diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 0c099d7..df0b10f 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -5,37 +5,27 @@ "url": "https://github.com/cdppcorp" }, "metadata": { - "description": "KISA-based security vulnerability assessment skills. Supports CII (Critical Information Infrastructure) with 560+ items and AI Security Guide. Technical, Administrative, Physical security evaluation based on Korean KISA guidelines.", - "version": "2.1.0", + "description": "KISA-based security vulnerability assessment skills. Supports CII (560+ items), AI Security Guide, Robot Security (103 items), Space Security (satellite/GSaaS/supply chain, 53 items), and Secure Coding Guide (JS/Python/Pseudo Code, 46 items, 49 CWE). Available in English and Korean.", + "version": "3.2.0", "license": "MIT" }, "plugins": [ { - "name": "kesekit-en", - "description": "Security vulnerability assessment skills (English). start(full CII + AI security audit), check(compliance pre-deployment checklist), fix(auto-fix with hardening scripts), guide(secure coding prompts for AI tools). Supports CII infrastructure (560+ items) and AI Security Guide.", + "name": "kesekit", + "description": "Security vulnerability assessment (EN/KO). CII infrastructure (560+), AI Security, Robot Security (IEC 62443), Space Security (satellite/GSaaS/supply chain, CMMC/NIS2), Secure Coding (JS/Python/Pseudo Code, 46 CWE). Use /kesekit-start, /kesekit-start-ko, /kesekit-check, /kesekit-fix, /kesekit-guide etc.", "source": "./", "strict": false, - "keywords": ["security", "KISA", "CII", "vulnerability", "assessment", "infrastructure", "hardening", "AI security", "robot security", "IEC 62443"], + "keywords": ["security", "KISA", "CII", "vulnerability", "assessment", "infrastructure", "hardening", "AI security", "robot security", "IEC 62443", "space security", "satellite", "GSaaS", "CMMC", "NIS2", "secure coding", "CWE", "OWASP", "JavaScript", "Python", "보안", "취약점", "분석평가", "우주보안", "로봇보안", "시큐어코딩"], "category": "security", "skills": [ - "./skills/start", - "./skills/check", - "./skills/fix", - "./skills/guide" - ] - }, - { - "name": "kesekit-ko", - "description": "보안 취약점 분석평가 스킬 (한국어). start(CII + AI 보안 전체 감사), check(컴플라이언스 배포 전 체크리스트), fix(취약점 자동 수정 + 하드닝 스크립트), guide(AI 도구용 시큐어코딩 프롬프트 생성). 주요정보통신기반시설(560+항목)과 AI 보안 안내서를 지원합니다.", - "source": "./", - "strict": false, - "keywords": ["보안", "KISA", "주요정보통신기반시설", "취약점", "분석평가", "기반시설", "보안설정", "AI보안", "로봇보안", "IEC 62443"], - "category": "security", - "skills": [ - "./skills-ko/start", - "./skills-ko/check", - "./skills-ko/fix", - "./skills-ko/guide" + "./skills/kesekit-start", + "./skills/kesekit-check", + "./skills/kesekit-fix", + "./skills/kesekit-guide", + "./skills-ko/kesekit-start-ko", + "./skills-ko/kesekit-check-ko", + "./skills-ko/kesekit-fix-ko", + "./skills-ko/kesekit-guide-ko" ] } ] diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..9969eb4 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,23 @@ +name: Validate Content + +on: + pull_request: + push: + branches: + - main + +jobs: + validate: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: Validate repository content + run: node scripts/validate-content.mjs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b038791 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Python virtual environments +.venv*/ +__pycache__/ +*.pyc + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# OS +Thumbs.db +.DS_Store + +# Claude Code local +.claude/ + +# Authorkit working files (converted outputs are large) +authorkit/converted/ref-*/images/ +authorkit/converted/ref-*/full.md +authorkit/.venv-ocr/ + +# Temp +*.tmp diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 704164b..e686e3e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ ## 새 가이드라인 추가 방법 -KESE-KIT은 **스킬 4개 고정 + references 확장** 구조입니다. 새 보안 가이드라인을 추가할 때 스킬 파일을 수정할 필요 없이 reference 파일만 추가하면 됩니다. +KESE-KIT은 **스킬 4개 고정 + 3-디렉터리 확장** 구조입니다. 새 보안 가이드라인을 추가할 때 스킬 파일을 수정할 필요 없이 `references/`, `templates/`, `scripts/` 디렉터리에 파일을 추가하면 됩니다. ### Step 1: 원본 문서 준비 @@ -16,29 +16,57 @@ authorkit/new pdf/ ← PDF 파일 배치 python authorkit/convert_pdf.py "authorkit/new pdf/가이드라인.pdf" authorkit/converted/ref-XXX ref-XXX ``` -### Step 3: Reference 파일 작성 +### Step 3: References / Templates / Scripts 파일 작성 -`skills-ko/start/references/` 아래에 새 가이드라인 디렉터리를 생성합니다: +`skills-ko/kesekit-start-ko/` 아래 3개 디렉터리에 새 가이드라인 파일을 생성합니다: ``` -skills-ko/start/references/ -├── cii/ ← 기존 -├── ai-security/ ← 기존 -└── new-guideline/ ← 신규 - ├── overview.md - ├── category-1.md - └── category-2.md +skills-ko/kesekit-start-ko/ +├── SKILL.md +├── references/new-guideline/ ← 순수 설명/기준 문서 +│ ├── overview.md +│ ├── category-1.md +│ └── category-2.md +├── templates/new-guideline/ ← 별지 서식, 체크리스트 테이블 +│ ├── assessment-table.md +│ └── checklist.md +└── scripts/new-guideline/ ← 실행 가능한 점검/수정 스크립트 + ├── check-linux.sh + ├── check-windows.ps1 + └── fix-linux.sh ``` -각 reference 파일은 다음을 포함해야 합니다: -- 항목 코드, 이름, 중요도 -- 점검 내용 및 판단 기준 (양호/취약) -- 점검 명령어 또는 확인 방법 -- 조치 방법 +#### 디렉터리별 콘텐츠 배치 기준 + +| 디렉터리 | 들어가는 내용 | 예시 | +|-----------|--------------|------| +| `references/` | 순수 설명, 위협 기술, 가이드라인 본문, 판단 기준 (양호/취약) | 위협 시나리오 설명, 보안 요구사항 해설 | +| `templates/` | `코드\|항목\|중요도` 평가 항목 테이블, `□` 체크리스트, 채점 기준표 | 별지 서식, 컴플라이언스 체크리스트 | +| `scripts/` | 실행 가능한 bash/powershell/sql 점검·수정 명령어 | `check-linux.sh`, `fix-windows.ps1` | + +> **참고**: 모든 가이드라인이 3개 디렉터리를 모두 사용하지는 않습니다. +> - `ai-security`, `space-security` 등은 `references/`를 사용합니다. +> - CII 등 체크리스트 중심 가이드라인은 `templates/`와 `scripts/`를 주로 사용합니다. +> - 새 가이드라인의 성격에 맞게 필요한 디렉터리만 생성하면 됩니다. + +#### references/ 파일 작성 시 포함 사항 +- 위협 설명 및 보안 요구사항 +- 판단 기준 (양호/취약) +- 관련 표준·규격 출처 + +#### templates/ 파일 작성 시 포함 사항 +- 항목 코드, 이름, 중요도 (`코드|항목|중요도` 테이블) +- 체크리스트 (`□` 형식) +- 채점·평가 기준표 + +#### scripts/ 파일 작성 시 포함 사항 +- 점검 명령어 (bash/powershell/sql) +- 조치(수정) 명령어 +- OS/환경별 분리 (linux/windows 등) ### Step 4: SKILL.md 라우터 업데이트 -`skills-ko/start/SKILL.md`의 가이드라인 선택 테이블에 새 가이드라인을 추가합니다: +`skills-ko/kesekit-start-ko/SKILL.md`의 가이드라인 선택 테이블에 새 가이드라인을 추가합니다: ```markdown | 3 | **새 가이드라인** | 설명 | 항목 수 | @@ -49,26 +77,45 @@ skills-ko/start/references/ ```markdown ## 새 가이드라인 분기 시 -`references/new-guideline/` 디렉터리에서 해당 reference를 읽어 평가합니다. +`references/new-guideline/`, `templates/new-guideline/`, `scripts/new-guideline/` 디렉터리에서 해당 파일을 읽어 평가합니다. ``` -**4개 스킬 (start, check, fix, guide) 모두 동일하게 업데이트합니다.** +**4개 스킬 (kesekit-start, kesekit-check, kesekit-fix, kesekit-guide) 모두 동일하게 업데이트합니다.** -### Step 5: References 복사 +### Step 5: References / Templates / Scripts 복사 -모든 스킬 디렉터리에 references를 복사합니다: +모든 스킬 디렉터리에 3개 디렉터리를 복사합니다: ```bash # 한국어 스킬 -cp -r skills-ko/start/references/new-guideline skills-ko/check/references/ -cp -r skills-ko/start/references/new-guideline skills-ko/fix/references/ -cp -r skills-ko/start/references/new-guideline skills-ko/guide/references/ +cp -r skills-ko/kesekit-start-ko/references/new-guideline skills-ko/kesekit-check-ko/references/ +cp -r skills-ko/kesekit-start-ko/templates/new-guideline skills-ko/kesekit-check-ko/templates/ +cp -r skills-ko/kesekit-start-ko/scripts/new-guideline skills-ko/kesekit-check-ko/scripts/ + +cp -r skills-ko/kesekit-start-ko/references/new-guideline skills-ko/kesekit-fix-ko/references/ +cp -r skills-ko/kesekit-start-ko/templates/new-guideline skills-ko/kesekit-fix-ko/templates/ +cp -r skills-ko/kesekit-start-ko/scripts/new-guideline skills-ko/kesekit-fix-ko/scripts/ + +cp -r skills-ko/kesekit-start-ko/references/new-guideline skills-ko/kesekit-guide-ko/references/ +cp -r skills-ko/kesekit-start-ko/templates/new-guideline skills-ko/kesekit-guide-ko/templates/ +cp -r skills-ko/kesekit-start-ko/scripts/new-guideline skills-ko/kesekit-guide-ko/scripts/ # 영문 스킬 -cp -r skills-ko/start/references/new-guideline skills/start/references/ -cp -r skills-ko/start/references/new-guideline skills/check/references/ -cp -r skills-ko/start/references/new-guideline skills/fix/references/ -cp -r skills-ko/start/references/new-guideline skills/guide/references/ +cp -r skills-ko/kesekit-start-ko/references/new-guideline skills/kesekit-start/references/ +cp -r skills-ko/kesekit-start-ko/templates/new-guideline skills/kesekit-start/templates/ +cp -r skills-ko/kesekit-start-ko/scripts/new-guideline skills/kesekit-start/scripts/ + +cp -r skills-ko/kesekit-start-ko/references/new-guideline skills/kesekit-check/references/ +cp -r skills-ko/kesekit-start-ko/templates/new-guideline skills/kesekit-check/templates/ +cp -r skills-ko/kesekit-start-ko/scripts/new-guideline skills/kesekit-check/scripts/ + +cp -r skills-ko/kesekit-start-ko/references/new-guideline skills/kesekit-fix/references/ +cp -r skills-ko/kesekit-start-ko/templates/new-guideline skills/kesekit-fix/templates/ +cp -r skills-ko/kesekit-start-ko/scripts/new-guideline skills/kesekit-fix/scripts/ + +cp -r skills-ko/kesekit-start-ko/references/new-guideline skills/kesekit-guide/references/ +cp -r skills-ko/kesekit-start-ko/templates/new-guideline skills/kesekit-guide/templates/ +cp -r skills-ko/kesekit-start-ko/scripts/new-guideline skills/kesekit-guide/scripts/ ``` ### Step 6: marketplace.json 업데이트 @@ -79,24 +126,74 @@ cp -r skills-ko/start/references/new-guideline skills/guide/references/ `README.md`와 `docs/` 아래 각 언어별 README에 새 가이드라인 정보를 추가합니다. +### Step 8: 검증 스크립트 실행 + +PR을 올리기 전에 아래 검증 스크립트를 실행하세요: + +```bash +node scripts/validate-content.mjs +``` + +이 스크립트는 다음을 검사합니다: +- README / SKILL / reference 간 항목 수 정합성 +- `start/check/fix/guide` 간 references/templates/scripts 파일 목록 및 내용 드리프트 +- Robot Security 라우터 분기 누락 여부 + +GitHub Actions에서도 동일한 검증이 자동 실행됩니다. + --- -## Reference 파일 작성 가이드 +## 콘텐츠 파일 작성 가이드 -### 구조 +### 스킬 디렉터리 구조 + +``` +skill-name/ +├── SKILL.md +├── references/ ← 순수 설명/기준 문서 +├── templates/ ← 별지 서식, 체크리스트 테이블 +└── scripts/ ← 실행 가능한 점검/수정 스크립트 +``` + +### references/ 파일 구조 예시 ```markdown -# [시스템명] 취약점 분석·평가 항목 +# [시스템명] 보안 가이드라인 > 출처 정보 +## 1. 카테고리명 + +위협 설명, 보안 요구사항, 판단 기준 등 순수 설명 콘텐츠 +``` + +### templates/ 파일 구조 예시 + +```markdown +# [시스템명] 취약점 분석·평가 항목 + ## 1. 카테고리명 (N항목) | 코드 | 항목 | 중요도 | |------|------|:------:| | XX-01 | 항목명 | 상 | -### 주요 점검 명령어 +### 체크리스트 +- □ 항목 1 확인 +- □ 항목 2 확인 +``` + +### scripts/ 파일 구조 예시 + +```bash +#!/bin/bash +# XX-01: 항목명 점검 +result=$(command_here) +if [ "$result" == "expected" ]; then + echo "[양호] XX-01" +else + echo "[취약] XX-01" +fi ``` ### 원칙 diff --git a/README.md b/README.md index 9a50304..c03bbca 100644 --- a/README.md +++ b/README.md @@ -1,137 +1,88 @@ # KESE - KISA Enhanced Security Evaluation Kit -주요정보통신기반시설(CII) 취약점 분석평가 및 AI 보안 평가를 위한 Claude Code 스킬 플러그인입니다. +주요정보통신기반시설(CII) 취약점 분석평가, AI 보안 평가, 로봇 보안 점검, 우주 보안 점검, 시큐어코딩 가이드, 제로트러스트 보안 평가를 위한 Claude Code 스킬 플러그인입니다. -🌐 [한국어](#한국어) | [English](#english) | [Français](docs/README.fr.md) | [日本語](docs/README.ja.md) | [中文](docs/README.zh.md) | [Русский](docs/README.ru.md) | [Español](docs/README.es.md) | [Deutsch](docs/README.de.md) | [Português](docs/README.pt.md) | [Italiano](docs/README.it.md) | [العربية](docs/README.ar.md) | [हिन्दी](docs/README.hi.md) | [Türkçe](docs/README.tr.md) | [Tiếng Việt](docs/README.vi.md) | [ภาษาไทย](docs/README.th.md) | [Bahasa Indonesia](docs/README.id.md) | [Polski](docs/README.pl.md) | [Nederlands](docs/README.nl.md) | [Svenska](docs/README.sv.md) | [Українська](docs/README.uk.md) +🌐 [한국어](#빠른-시작) | [English](#english) | [Français](docs/README.fr.md) | [日本語](docs/README.ja.md) | [中文](docs/README.zh.md) | [Русский](docs/README.ru.md) | [Español](docs/README.es.md) | [Deutsch](docs/README.de.md) | [Português](docs/README.pt.md) | [Italiano](docs/README.it.md) | [العربية](docs/README.ar.md) | [हिन्दी](docs/README.hi.md) | [Türkçe](docs/README.tr.md) | [Tiếng Việt](docs/README.vi.md) | [ภาษาไทย](docs/README.th.md) | [Bahasa Indonesia](docs/README.id.md) | [Polski](docs/README.pl.md) | [Nederlands](docs/README.nl.md) | [Svenska](docs/README.sv.md) | [Українська](docs/README.uk.md) --- -## English +## 빠른 시작 -### Overview +### 1단계: 설치 -KESE (KISA Enhanced Security Evaluation Kit) is a Claude Code plugin that provides comprehensive vulnerability assessment capabilities based on KISA (Korea Internet & Security Agency) guidelines. Supports both Critical Information Infrastructure (CII) and AI Security assessments. +터미널(CMD, PowerShell, bash 등)에서 Claude Code를 실행합니다: -### Source Documents +```bash +claude +``` -This plugin is built upon the following official security guidelines: +Claude Code 안에서 다음 명령어로 마켓플레이스 등록 및 플러그인 설치를 합니다: -| # | Document | Publisher | Year | Pages | PDF | -|---|----------|-----------|:----:|:-----:|:---:| -| 1 | **Technical Vulnerability Assessment Guide for CII** | KISA | 2026 | 873 | [PDF](문서/주요정보통신기반시설%20기술적%20취약점%20분석·평가%20방법%20상세가이드.pdf) | -| 2 | **Administrative & Physical Vulnerability Assessment Guide for CII** | KISA | 2026 | 332 | [PDF](문서/주요정보통신기반시설%20관리·물리적%20취약점%20분석·평가%20방법%20안내서.pdf) | -| 3 | **AI Security Guide** (인공지능(AI) 보안 안내서) | MSIT / KISA | 2026 | 239 | [PDF](문서/인공지능(AI)%20보안%20안내서(정오%20수정).pdf) | -| 4 | **Robot Security Model** (로봇 보안모델(고도화)) | KISA | 2026 | 156 | [PDF](문서/로봇%20보안모델(고도화).pdf) | -| 5 | **Robot Security Checklist Guide** (로봇 보안취약점 점검 체크리스트 해설서) | KISA | 2026 | 225 | [PDF](문서/로봇%20보안취약점%20점검%20체크리스트%20해설서.pdf) | +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT +``` -### Features +> **업데이트 시:** +> ``` +> /plugin marketplace update cdppcorp-KESE-KIT +> /plugin update kesekit@cdppcorp-KESE-KIT +> /reload-plugins +> ``` -| Skill | Description | -|-------|-------------| -| `/kesekit-en:start` | Run full security vulnerability assessment (CII 560+ / AI Security / Robot Security) | -| `/kesekit-en:check` | Pre-deployment security compliance checklist | -| `/kesekit-en:fix` | Auto-generate hardening scripts and security fixes | -| `/kesekit-en:guide` | Generate secure coding prompts for AI tools | - -### Supported Guidelines - -#### 1. CII (Critical Information Infrastructure) — 560+ items - -**Technical Assessment** -| System | Code | Items | -|--------|------|:-----:| -| Unix/Linux Server | U-01~U-67 | 67 | -| Windows Server | W-01~W-64 | 64 | -| Web Service | WEB-01~WEB-26 | 26 | -| Security Equipment | S-01~S-23 | 23 | -| Network Equipment | N-01~N-38 | 38 | -| Control System | C-01~C-51 | 46 | -| PC | PC-01~PC-18 | 18 | -| DBMS | D-01~D-26 | 26 | -| Mobile | M-01~M-04 | 4 | -| Web Application | 21 codes | 21 | -| Virtualization | HV-01~HV-25 | 25 | -| Cloud | CA-01~CA-19 | 19 | - -**Administrative Assessment**: A-1~A-127 (127 items, 14 domains) -**Physical Assessment**: P-1~P-18 (18 items) - -#### 2. AI Security Guide — 54+ items - -| Target | Items | Lifecycle | -|--------|:-----:|-----------| -| AI Developer | 54 | 6-stage (Plan→Data→Model→Deploy→Monitor→Decommission) | -| Service Provider | ~43 | 6-stage (Plan→Dev→Ops→Maintain→Feedback→Decommission) | -| User | 7 | Security best practices | - -#### 3. Robot Security — ~103 items - -| Category | Code | Items | Standard | -|----------|------|:-----:|----------| -| Secure SW Dev (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | -| Supply Chain | SC-01~07 | 7 | NIST SP 800-161 | -| Identification & Auth | IA-01~11 | 11 | IEC 62443 | -| Use Control | UC-01~11 | 11 | IEC 62443 | -| System Integrity | SI-01~11 | 11 | IEC 62443 | -| Data Protection | DP-01~04 | 4 | IEC 62443 | -| Data Flow Restriction | DFR-01~02 | 2 | IEC 62443 | -| Event Response | ER-01~03 | 3 | IEC 62443 | -| Resource Availability | RA-01~08 | 8 | IEC 62443 | -| Cyber Resilience | CR-01~13 | 13 | EU CRA | -| Wireless Security | WS-01~14 | 14 | EU RED | - -Target: Industrial / Service / Medical robots (ISO 8373) - -### Installation +### 2단계: 사용 -```bash -claude plugins install kesekit-en@kesekit -``` +Claude Code 프롬프트에 슬래시 명령어를 입력합니다: -### Usage +``` +/kesekit-start-ko 보안 취약점 분석평가 실행 +/kesekit-check-ko 배포 전 보안 체크리스트 +/kesekit-fix-ko 취약점 자동 수정 / 하드닝 스크립트 생성 +/kesekit-guide-ko 시큐어코딩 가이드 프롬프트 생성 +``` -```bash -# Start full security assessment -/kesekit-en:start +영문 버전도 사용 가능합니다: -# Run pre-deployment checklist -/kesekit-en:check +``` +/kesekit-start Full security assessment +/kesekit-check Pre-deployment checklist +/kesekit-fix Generate hardening scripts +/kesekit-guide Secure coding prompts +``` -# Generate hardening scripts -/kesekit-en:fix +### 사용 예시 -# Get secure coding prompts -/kesekit-en:guide ``` +# 프로젝트 폴더에서 Claude Code 실행 후: ---- +> /kesekit-start-ko + → "어떤 시스템을 점검하시겠습니까?" 질문에 답변 + → 예: "Ubuntu 22.04 웹 서버", "Windows Server 2022", "AI 모델 배포 환경" -## 한국어 +> /kesekit-check-ko + → 배포 전 보안 컴플라이언스 자동 체크 -### 개요 +> /kesekit-fix-ko + → 취약점 분석 결과를 기반으로 하드닝 스크립트 자동 생성 -KESE(KISA Enhanced Security Evaluation Kit)는 KISA(한국인터넷진흥원) 가이드라인에 기반한 보안 취약점 분석평가 기능을 제공하는 Claude Code 플러그인입니다. 주요정보통신기반시설(CII) 취약점 분석평가와 AI 보안 평가를 모두 지원합니다. +> /kesekit-guide-ko + → "Python Flask 인증 구현" 같은 요청에 시큐어코딩 프롬프트 제공 +``` -### 원본 문서 +--- -본 플러그인은 다음 공식 보안 가이드라인을 기반으로 재구성되었습니다: +## 개요 -| # | 문서명 | 발행기관 | 연도 | 페이지 | PDF | -|---|--------|---------|:----:|:------:|:---:| -| 1 | **주요정보통신기반시설 기술적 취약점 분석·평가방법 상세가이드** | KISA | 2026 | 873 | [PDF](문서/주요정보통신기반시설%20기술적%20취약점%20분석·평가%20방법%20상세가이드.pdf) | -| 2 | **주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서** | KISA | 2026 | 332 | [PDF](문서/주요정보통신기반시설%20관리·물리적%20취약점%20분석·평가%20방법%20안내서.pdf) | -| 3 | **인공지능(AI) 보안 안내서** | 과기정통부 / KISA | 2026 | 239 | [PDF](문서/인공지능(AI)%20보안%20안내서(정오%20수정).pdf) | -| 4 | **로봇 보안모델(고도화)** | KISA | 2026 | 156 | [PDF](문서/로봇%20보안모델(고도화).pdf) | -| 5 | **로봇 보안취약점 점검 체크리스트 해설서** | KISA | 2026 | 225 | [PDF](문서/로봇%20보안취약점%20점검%20체크리스트%20해설서.pdf) | +KESE(KISA Enhanced Security Evaluation Kit)는 KISA(한국인터넷진흥원) 가이드라인에 기반한 보안 취약점 분석평가 기능을 제공하는 Claude Code 플러그인입니다. 주요정보통신기반시설(CII) 취약점 분석평가, AI 보안 평가, 로봇 보안 점검, 우주 보안 점검, 제로트러스트 보안 평가를 지원합니다. ### 기능 | 스킬 | 설명 | |------|------| -| `/kesekit-ko:start` | 전체 보안 취약점 분석평가 실행 (CII 560+ / AI 보안 / 로봇 보안) | -| `/kesekit-ko:check` | 배포 전 보안 컴플라이언스 체크리스트 | -| `/kesekit-ko:fix` | 하드닝 스크립트 및 보안 수정 자동 생성 | -| `/kesekit-ko:guide` | AI 도구용 시큐어코딩 프롬프트 생성 | +| `/kesekit-start-ko` | 전체 보안 취약점 분석평가 실행 (CII 560+ / AI 보안 / 로봇 보안 / 우주 보안 / 시큐어코딩 / 제로트러스트) | +| `/kesekit-check-ko` | 배포 전 보안 컴플라이언스 체크리스트 (CII / AI / 로봇 / 우주 / 시큐어코딩 / 제로트러스트) | +| `/kesekit-fix-ko` | 하드닝 스크립트 및 보안 수정 자동 생성 (CII / AI / 로봇 / 우주 / 시큐어코딩 / 제로트러스트) | +| `/kesekit-guide-ko` | AI 도구용 시큐어코딩 프롬프트 생성 (CII / AI / 로봇 / 우주 / JS·Python·범용 / 제로트러스트) | ### 지원 가이드라인 @@ -182,27 +133,203 @@ KESE(KISA Enhanced Security Evaluation Kit)는 KISA(한국인터넷진흥원) 대상: 산업용 / 서비스용 / 의료용 로봇 (ISO 8373) -### 설치 +#### 4. 우주 보안 — 53항목 + +| 분야 | 코드 | 항목 수 | 참조 표준 | +|------|------|:------:|----------| +| 접근통제 | AC-01~12 | 12 | CMMC, K-RMF | +| 식별 및 인증 | IA-01~02 | 2 | CMMC, NIS2 | +| 시스템 및 통신 보안 | SC-01~07 | 7 | NIST IR 8401 | +| 시스템 및 정보 무결성 | SI-01~04 | 4 | NIST CSF | +| 시스템/서비스 운영관리 | SO-01~09 | 9 | ISMS-P | +| 사고 대응 | IR-01~02 | 2 | NIS2 | +| 인원 보안 | PS-01~02 | 2 | CMMC | +| 물리보안 | PE-01~03 | 3 | K-RMF | +| 위험평가 및 보안 평가 | RA-01~02 | 2 | NIST CSF | +| 보안 거버넌스 | SG-01~04 | 4 | ISMS-P | +| 비상 계획 | CP-01~02 | 2 | NIST IR 8270 | +| 공급망 관리 | SM-01~04 | 4 | CMMC, NIS2 | + +대상: 위성 운영사, GSaaS 제공자, 지상국 운영사, 우주 공급망 참여기업 + +#### 5. 시큐어코딩 가이드 — 46항목 + +| 카테고리 | 항목 수 | CWE 수 | 참조 표준 | +|---------|:------:|:------:|----------| +| 입력데이터 검증 및 표현 | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| 보안기능 | 16 | 16 | CWE/SANS Top 25 | +| 시간 및 상태 | 2 | 3 | CWE | +| 에러처리 | 3 | 3 | CWE | +| 코드오류 | 3 | 3 | CWE | +| 캡슐화 | 4 | 5 | CWE | +| API 오용 | 2 | 1 | CWE | + +**지원 언어:** +| 언어 | 항목 수 | 프레임워크 | +|------|:------:|-----------| +| Pseudo Code (범용) | 46 | 언어 무관 패턴 | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +대상: JavaScript/Python 웹 개발자, AI 도구(Claude, Cursor, Copilot) 사용자, 바이브코딩 개발자 + +#### 6. 제로트러스트 보안 — ~421항목 + +| 핵심 요소 | 코드 | 항목 수 | 성숙도 | +|----------|------|:------:|--------| +| 식별자·신원 | ZT-ID-01~53 | 53 | 기존/초기/향상/최적화 | +| 기기·엔드포인트 | ZT-DV-01~36 | 36 | 기존/초기/향상/최적화 | +| 네트워크 | ZT-NW-01~54 | 54 | 기존/초기/향상/최적화 | +| 시스템 | ZT-SY-01~49 | 49 | 기존/초기/향상/최적화 | +| 애플리케이션·워크로드 | ZT-AP-01~60 | 60 | 기존/초기/향상/최적화 | +| 데이터 | ZT-DA-01~58 | 58 | 기존/초기/향상/최적화 | +| 가시성·분석 | ZT-VA-01~43 | 43 | 기존/초기/향상/최적화 | +| 자동화·통합 | ZT-AU-01~43 | 43 | 기존/초기/향상/최적화 | +| OT/ICS 특화 | ZT-OT-01~25 | 25 | 기존/초기/향상/최적화 | + +**성숙도 4단계**: 기존(Traditional) → 초기(Initial) → 향상(Advanced) → 최적화(Optimal) +**참조 표준**: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-207, CISA ZT Maturity Model + +대상: 제로트러스트 도입 기업, OT/ICS 환경, 클라우드 전환 조직, 보안 성숙도 평가 담당자 -```bash -claude plugins install kesekit-ko@kesekit +### 원본 문서 + +본 플러그인은 다음 공식 보안 가이드라인을 기반으로 재구성되었습니다: + +| # | 문서명 | 발행기관 | 연도 | 페이지 | PDF / MD | +|---|--------|---------|:----:|:------:|:--------:| +| 1 | **주요정보통신기반시설 기술적 취약점 분석·평가방법 상세가이드** | KISA | 2026 | 873 | [PDF](문서/주요정보통신기반시설%20기술적%20취약점%20분석·평가%20방법%20상세가이드.pdf) / [MD](문서/주요정보통신기반시설_기술적_취약점_상세가이드.md) | +| 2 | **주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서** | KISA | 2026 | 332 | [PDF](문서/주요정보통신기반시설%20관리·물리적%20취약점%20분석·평가%20방법%20안내서.pdf) / [MD](문서/주요정보통신기반시설_관리물리적_취약점_가이드.md) | +| 3 | **인공지능(AI) 보안 안내서** | 과기정통부 / KISA | 2026 | 239 | [PDF](문서/인공지능%28AI%29%20보안%20안내서%28정오%20수정%29.pdf) / [MD](문서/인공지능_AI_보안_안내서.md) | +| 4 | **로봇 보안모델(고도화)** | KISA | 2026 | 156 | [PDF](문서/로봇%20보안모델%28고도화%29.pdf) / [MD](문서/로봇_보안모델.md) | +| 5 | **로봇 보안취약점 점검 체크리스트 해설서** | KISA | 2026 | 225 | [PDF](문서/로봇%20보안취약점%20점검%20체크리스트%20해설서.pdf) / [MD](문서/로봇_보안취약점_점검_체크리스트_해설서.md) | +| 6 | **우주 보안모델 Part1** (위성활용 서비스) | 과기정통부 / KISA | 2024 | 134 | [PDF](문서/우주%20보안모델%20Part1.pdf) / [MD](문서/우주_보안모델_Part1.md) | +| 7 | **우주 보안모델 Part2** (GSaaS/우주 공급망) | 과기정통부 / KISA | 2025 | 223 | [PDF](문서/우주%20보안모델%20Part2.pdf) / [MD](문서/우주_보안모델_Part2.md) | +| 8 | **우주 보안모델 해설서 및 사례집** | 과기정통부 / KISA | 2025 | 218 | [PDF](문서/우주%20보안모델%20해설서%20및%20사례집.pdf) / [MD](문서/우주_보안모델_해설서_및_사례집.md) | +| 9 | **Javascript 시큐어코딩 가이드** (2023년 개정본) | KISA | 2023 | 159 | [PDF](문서/Javascript_시큐어코딩_가이드%282023년_개정본%29.pdf) / [MD](문서/Javascript_시큐어코딩_가이드.md) | +| 10 | **Python 시큐어코딩 가이드** (2023년 개정본) | KISA | 2023 | 176 | [PDF](문서/Python_시큐어코딩_가이드%282023년_개정본%29.pdf) / [MD](문서/Python_시큐어코딩_가이드.md) | +| 11 | **Pseudo Code 시큐어코딩 가이드** (범용) | KESE-KIT | 2026 | - | [MD](문서/Pseudocode_시큐어코딩_가이드.md) | +| 12 | **제로트러스트 가이드라인 2.0** | 한국제로트러스트포럼 / KISA | 2024 | 245 | [PDF](문서/제로트러스트_가이드라인_2.0.pdf) / [MD](문서/제로트러스트_가이드라인_2.0.md) | +| 13 | **제로트러스트 성숙도 모델 해설서** | 한국제로트러스트포럼 / KISA | 2024 | 182 | [PDF](문서/제로트러스트_성숙도_모델_해설서.pdf) / [MD](문서/제로트러스트_성숙도_모델_해설서.md) | +| 14 | **OT 환경의 제로트러스트 적용 안내서** | 과기정통부 / KISA | 2025 | 67 | [PDF](문서/OT_환경의_제로트러스트_적용_안내서.pdf) / [MD](문서/OT_환경의_제로트러스트_적용_안내서.md) | + +### v2.x에서 마이그레이션 + +v3.0에서 모든 스킬이 단일 `kesekit` 네임스페이스로 통합되었습니다. v2.x 이하를 사용하셨다면 기존 플러그인을 삭제 후 재설치하세요: + +``` +/plugin uninstall kesekit +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` -### 사용법 +명령어 변경사항: + +| 이전 (v2.x) | 이후 (v3.0+) | +|-------------|------------| +| `/start` | `/kesekit-start` | +| `/check` | `/kesekit-check` | +| `/fix` | `/kesekit-fix` | +| `/guide` | `/kesekit-guide` | +| `/start-ko` | `/kesekit-start-ko` | +| `/check-ko` | `/kesekit-check-ko` | +| `/fix-ko` | `/kesekit-fix-ko` | +| `/guide-ko` | `/kesekit-guide-ko` | + +> **참고:** 기존 `/start`, `/check`, `/fix`, `/guide` 명령어는 더 이상 동작하지 않습니다. `/kesekit-*` (하이픈) 형식의 접두사를 사용하세요. + +--- + +## English + +### Quick Start + +#### Step 1: Install + +Launch Claude Code in your terminal: ```bash -# 전체 보안 평가 시작 -/kesekit-ko:start +claude +``` + +Inside Claude Code, register the marketplace and install the plugin: + +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT +``` + +> **To update:** +> ``` +> /plugin marketplace update cdppcorp-KESE-KIT +> /plugin update kesekit@cdppcorp-KESE-KIT +> /reload-plugins +> ``` -# 배포 전 체크리스트 실행 -/kesekit-ko:check +#### Step 2: Use -# 하드닝 스크립트 생성 -/kesekit-ko:fix +Type slash commands at the Claude Code prompt: -# 시큐어코딩 프롬프트 가져오기 -/kesekit-ko:guide ``` +/kesekit-start Full security vulnerability assessment +/kesekit-check Pre-deployment security checklist +/kesekit-fix Auto-fix vulnerabilities / generate hardening scripts +/kesekit-guide Generate secure coding prompts +``` + +Korean versions are also available: + +``` +/kesekit-start-ko 보안 취약점 분석평가 +/kesekit-check-ko 배포 전 체크리스트 +/kesekit-fix-ko 하드닝 스크립트 생성 +/kesekit-guide-ko 시큐어코딩 가이드 +``` + +#### Usage Examples + +``` +# After launching Claude Code in your project folder: + +> /kesekit-start + → Answer "What system do you want to assess?" + → e.g. "Ubuntu 22.04 web server", "Windows Server 2022", "AI model deployment" + +> /kesekit-check + → Automated pre-deployment compliance check + +> /kesekit-fix + → Generate hardening scripts from assessment results + +> /kesekit-guide + → Request like "Python Flask authentication" → get secure coding prompt +``` + +### Overview + +KESE (KISA Enhanced Security Evaluation Kit) is a Claude Code plugin that provides comprehensive vulnerability assessment capabilities based on KISA (Korea Internet & Security Agency) guidelines. Supports Critical Information Infrastructure (CII), AI Security, Robot Security, and Space Security assessments. + +### Features + +| Skill | Description | +|-------|-------------| +| `/kesekit-start` | Run full security vulnerability assessment (CII 560+ / AI Security / Robot Security / Space Security) | +| `/kesekit-check` | Pre-deployment security compliance checklist (CII / AI / Robot / Space) | +| `/kesekit-fix` | Auto-generate hardening scripts and security fixes (CII / AI / Robot / Space) | +| `/kesekit-guide` | Generate secure coding prompts for AI, robot, and space-aware secure development | + +### Source Documents + +| # | Document | Publisher | Year | Pages | +|---|----------|-----------|:----:|:-----:| +| 1 | **Technical Vulnerability Assessment Guide for CII** | KISA | 2026 | 873 | +| 2 | **Administrative & Physical Vulnerability Assessment Guide for CII** | KISA | 2026 | 332 | +| 3 | **AI Security Guide** | MSIT / KISA | 2026 | 239 | +| 4 | **Robot Security Model** | KISA | 2026 | 156 | +| 5 | **Robot Security Checklist Guide** | KISA | 2026 | 225 | +| 6 | **Space Security Model Part1** | MSIT / KISA | 2024 | 134 | +| 7 | **Space Security Model Part2** (GSaaS/Supply Chain) | MSIT / KISA | 2025 | 223 | +| 8 | **Space Security Explanation Guide** | MSIT / KISA | 2025 | 218 | --- @@ -212,26 +339,26 @@ claude plugins install kesekit-ko@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← 플러그인 메타데이터 -├── skills/ ← 영문 스킬 (라우터) +├── skills/ ← 영문 스킬 │ ├── start/ │ │ ├── SKILL.md ← 라우터 (~80줄) -│ │ └── references/ ← 가이드라인별 지식 -│ │ ├── cii/ ← CII 14개 reference -│ │ ├── ai-security/ ← AI 보안 4개 reference -│ │ └── robot-security/ ← 로봇 보안 6개 reference +│ │ ├── references/ ← 순수 설명/기준 문서 +│ │ │ ├── ai-security/ ← 개요, 서비스제공자, 이용자 가이드 +│ │ │ └── space-security/ ← 개요, 공급망 위협 시나리오 +│ │ ├── templates/ ← 별지 서식, 체크리스트 테이블 +│ │ │ ├── cii/ ← CII 14개 점검항목 테이블 +│ │ │ ├── ai-security/ ← AI 개발자 검증항목, 이용자 체크리스트 +│ │ │ ├── robot-security/ ← 로봇 보안 6개 체크리스트 +│ │ │ └── space-security/ ← 우주 보안 4개 점검항목 테이블 +│ │ └── scripts/ ← 실행 가능한 점검/수정 스크립트 +│ │ ├── cii/ ← bash, PowerShell, SQL 스크립트 +│ │ └── robot-security/ ← 방화벽, SBOM, 인증서 스크립트 │ ├── check/ -│ ├── fix/ +│ ├── fix/ ← scripts/space-security/ 추가 포함 │ └── guide/ ├── skills-ko/ ← 한글 스킬 (동일 구조) -├── 문서/ ← 원본 PDF 문서 (5개) +├── 문서/ ← 원본 PDF 문서 (8개) ├── authorkit/ ← 변환 산출물 및 작업 파일 -│ ├── converted/ -│ │ ├── ref-001/ ← 관리·물리적 가이드 (full.md) -│ │ ├── ref-002/ ← 기술적 가이드 (full.md) -│ │ ├── ref-003/ ← AI 보안 안내서 (full.md) -│ │ ├── ref-004/ ← 로봇 보안모델 (full.md) -│ │ └── ref-005/ ← 로봇 체크리스트 해설서 (full.md) -│ └── ... ├── docs/ ← 20개 국어 README ├── CONTRIBUTING.md ← 가이드라인 추가 방법 └── README.md @@ -241,6 +368,64 @@ KESE-KIT/ ## 변경 이력 +### v3.2.0 (2026-04-02) + +**새 가이드라인 추가: 시큐어코딩 가이드** +- 출처: KISA Javascript 시큐어코딩 가이드 159p + Python 시큐어코딩 가이드 176p (2023년 개정본) +- 7개 카테고리, 46개 항목, 49 CWE 매핑 +- 범용 Pseudo Code 가이드 신규 작성 (언어 무관 UNSAFE/SAFE 패턴) +- JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) 프레임워크별 코드 예시 +- 공식문서 Markdown 변환 (JS 3,241줄 + Python 4,377줄 + 이미지 127개) +- 8개 스킬(EN/KO) 모두에 `references/secure-coding/` + `templates/secure-coding/` 배치 + +### v3.1.0 (2026-04-02) + +**구조 리팩토링 — references/templates/scripts 3분류 분리** + +| 변경 | 이전 (v3.0) | 이후 (v3.1) | +|------|------------|------------| +| 리소스 구조 | references/ 단일 디렉터리 | references/ + templates/ + scripts/ 3분류 | +| 스크립트 | 인라인 코드 블록 (345줄) | 독립 스크립트 파일 (7,000+줄) | +| 체크리스트 | references에 혼재 | templates/로 분리 | +| 명령어 형식 | `/kesekit-start` | `/kesekit-start` (네임스페이스:스킬) | + +**CII 스크립트 대폭 보강 (원본 873페이지 가이드 기반)** +- Unix: 112 → 1,531줄 (U-01~U-67, Linux/Solaris/AIX/HP-UX) +- Windows: 80 → 1,489줄 (W-01~W-64, PowerShell/레지스트리) +- Web Application: 31 → 880줄 (21개 취약점, Java/PHP/JS 코드 예시) +- Web Service: 30 → 725줄 (WEB-01~WEB-26, Apache/Nginx/IIS/Tomcat) +- Network: 28 → 892줄 (N-01~N-38, Cisco/Juniper) +- Database: 18 → 649줄 (D-01~D-26, Oracle/MySQL/MSSQL/PostgreSQL) +- Cloud: 20 → 517줄 (CA-01~CA-19, AWS/Azure/GCP CLI) +- PC: 26 → 348줄 (PC-01~PC-18, PowerShell/GPO) + +**로봇 보안 스크립트 신규 추가** +- 출처: 로봇 보안취약점 점검 체크리스트 해설서 (ref-005) +- firewall-hardening, resource-management, sbom-audit, cert-and-protocol 4개 파일 + +### v3.0.0 (2026-04-02) + +**Breaking Change: 명령어 형식 변경** +- 모든 스킬이 단일 `kesekit` 네임스페이스로 통합 +- 명령어 형식: `/start` → `/kesekit-start` (네임스페이스 접두사 추가) +- 기존 사용자는 재설치 필요: `/plugin uninstall kesekit` → `/plugin install kesekit@cdppcorp-KESE-KIT` + +**새 가이드라인 추가: 우주 보안** +- 출처: 우주 보안모델 Part1 134p + Part2 223p + 해설서 218p (과기정통부/KISA) +- 12개 분야(AC/IA/SC/SI/SO/IR/PS/PE/RA/SG/CP/SM), 53개 체크리스트 항목 +- 대상: 위성 운영사, GSaaS 제공자, 지상국 운영사, 우주 공급망 참여기업 +- 참조 표준: CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, CCSDS +- 6개 위협 시나리오 포함 (GSaaS 3개 + 공급망 3개) +- PaddleOCR 기반 한국어 PDF OCR 변환 파이프라인 구축 + +### v2.1.0 (2026-03-30) + +**새 가이드라인 추가: 로봇 보안** +- 출처: 로봇 보안모델(고도화) 156p + 로봇 보안취약점 점검 체크리스트 해설서 225p +- 11개 카테고리, ~103개 체크리스트 항목 +- 참조 표준: NIST SP 800-218, IEC 62443, EU CRA, EU RED, NIS2 +- 6개 reference 파일 추가 + ### v2.0.0 (2026-03-30) **구조 리팩토링 — Progressive Disclosure 패턴 적용** @@ -263,14 +448,6 @@ KESE-KIT/ - 2026 상세가이드 기반으로 전체 항목 재추출 - 항목 코드 체계 반영 (WEB, HV, CA 등 신규 코드) -### v2.1.0 (2026-03-30) - -**새 가이드라인 추가: 로봇 보안** -- 출처: 로봇 보안모델(고도화) 156p + 로봇 보안취약점 점검 체크리스트 해설서 225p -- 11개 카테고리, ~103개 체크리스트 항목 -- 참조 표준: NIST SP 800-218, IEC 62443, EU CRA, EU RED, NIS2 -- 6개 reference 파일 추가 - ### v1.0.0 (2026-03-29) - 초기 릴리스 diff --git a/authorkit/CONTRIBUTE-paddleocr.md b/authorkit/CONTRIBUTE-paddleocr.md new file mode 100644 index 0000000..3cbf232 --- /dev/null +++ b/authorkit/CONTRIBUTE-paddleocr.md @@ -0,0 +1,187 @@ +# Contribution: PaddleOCR 기반 한국어 PDF 변환 파이프라인 + +> authorkit의 PDF → Markdown 변환 시 한국어 OCR 품질을 대폭 개선하는 PaddleOCR 통합 제안 + +## 배경 + +authorkit의 기존 `convert_pdf.py`는 pymupdf(`fitz`)의 `get_text("text")`를 사용하여 PDF에서 텍스트를 추출합니다. 대부분의 경우 잘 작동하지만, 다음 상황에서 한국어 텍스트 추출 품질이 크게 저하됩니다: + +| 문제 상황 | 증상 | +|----------|------| +| 이미지 기반 PDF (스캔본) | 텍스트 추출 자체가 불가 | +| 한국어 폰트가 임베드되지 않은 PDF | 깨진 문자 또는 빈 텍스트 | +| 표지/도해 페이지 | 텍스트 레이어 없이 이미지만 존재 | +| 정부/공공기관 발행 PDF | CID 폰트 사용으로 한글 추출 실패 빈번 | + +## 해결책: PaddleOCR Hybrid 방식 + +pymupdf 텍스트 추출을 1차 시도하고, 실패 시 PaddleOCR로 폴백하는 **하이브리드 방식**을 구현했습니다. + +``` +[PDF 페이지] + │ + ▼ +[pymupdf get_text()] + │ + ├─ 텍스트 충분 & 한국어 비율 정상 → 그대로 사용 (빠름) + │ + └─ 텍스트 부족 or 한국어 비율 < 5% → PaddleOCR 폴백 + │ + ▼ + [페이지 → 2x 이미지 렌더링] + │ + ▼ + [PaddleOCR (korean, confidence > 0.5)] + │ + ▼ + [OCR 텍스트 사용] +``` + +### 핵심 로직 + +```python +# pymupdf 텍스트 추출 시도 +raw_text = page.get_text("text").strip() + +# 한국어 비율 기반 OCR 필요 여부 판단 +korean_ratio = len(re.findall(r'[가-힣]', raw_text)) / max(len(raw_text), 1) +use_ocr = len(raw_text) < 50 or korean_ratio < 0.05 + +if use_ocr: + # 2x 해상도로 이미지 렌더링 → PaddleOCR + mat = fitz.Matrix(2.0, 2.0) + pix = page.get_pixmap(matrix=mat) + # ... OCR 수행 +``` + +### 왜 PaddleOCR인가? + +| OCR 엔진 | 한국어 정확도 | 속도 | GPU 지원 | 설치 용이성 | +|----------|:----------:|:----:|:-------:|:---------:| +| Tesseract | 중 | 느림 | X | 별도 바이너리 필요 | +| EasyOCR | 중상 | 보통 | O | pip만으로 가능 | +| **PaddleOCR** | **상** | **빠름** | **O** | **pip만으로 가능** | +| Google Vision | 최상 | 빠름 | - | API 키 필요, 유료 | + +PaddleOCR은 한국어 인식 정확도가 높고, GPU 가속을 지원하며, 오프라인으로 동작합니다. + +## 실제 적용 결과 + +KISA 발행 「우주 보안모델」 시리즈 5개 PDF (총 628페이지)를 변환한 결과: + +| 문서 | 페이지 | 추출 문자수 | 헤딩 탐지 | 비고 | +|------|:------:|:----------:|:---------:|------| +| 우주 보안모델 Part1 요약본 | 22 | 12,746 | 21 | 표지 OCR 성공 | +| 우주 보안모델 Part1 | 134 | 117,974 | 481 | 목차/본문 정상 추출 | +| 우주 보안모델 Part2 요약본 | 31 | 16,547 | 24 | 도해 페이지 OCR 적용 | +| 우주 보안모델 Part2 | 223 | 195,171 | 129 | GSaaS 전문 용어 정상 | +| 우주 보안모델 해설서 | 218 | 208,471 | 276 | 53개 체크리스트 완전 추출 | +| **합계** | **628** | **550,909** | **931** | | + +## 추가 구현 사항 + +### 1. 배치 모드 지원 + +```bash +python convert_pdf_ocr.py --batch +``` + +여러 PDF를 한 번에 순차 변환하고 최종 요약을 출력합니다. + +### 2. 이미지 추출 개선 + +- 50x50px 미만 장식 이미지 자동 스킵 +- CMYK → RGB 자동 변환 +- colorspace 호환 에러 graceful 처리 + +### 3. 한국어 헤딩 패턴 확장 + +```python +# 기존: 제N장, N.X 패턴만 +# 추가: 제I장 (로마자), 제N절, 가/나/다 패턴 +if re.match(r'^제?\s*\d+장', line) or re.match(r'^제?\s*[IVX]+\s*[\.장]', line): + # chapter heading +elif re.match(r'^\d+\.\s+[가-힣A-Z]', line): + # section heading +``` + +## 설치 방법 + +### 요구사항 + +- Python 3.10~3.12 (PaddlePaddle이 3.13 미지원) +- CUDA 11.x~12.x (GPU 사용 시) + +### 설치 + +```bash +# CPU 전용 +pip install paddlepaddle==2.6.2 "paddleocr==2.9.1" pymupdf + +# GPU (CUDA 12.x + cuDNN 8.x 필요) +pip install paddlepaddle-gpu==2.6.2 "paddleocr==2.9.1" pymupdf +``` + +### 호환성 참고 + +| PaddlePaddle | PaddleOCR | Python | 비고 | +|:------------:|:---------:|:------:|------| +| 2.6.2 | 2.9.1 | 3.10~3.12 | 안정 조합 | +| 2.6.2 | 3.4.0 | 3.10~3.12 | `set_optimization_level` 에러 — 비호환 | +| GPU | 2.9.1 | 3.12 | cuDNN 8 필요 (12.x 드라이버와 별도) | + +**권장**: `paddlepaddle==2.6.2` + `paddleocr==2.9.1` 조합이 가장 안정적입니다. + +Python 3.13 환경에서는 별도 venv를 만들어 사용: + +```bash +py -3.12 -m venv .venv-ocr +.venv-ocr/Scripts/python.exe -m pip install paddlepaddle==2.6.2 "paddleocr==2.9.1" pymupdf +``` + +## authorkit 통합 제안 + +### 방안 A: analyze 스킬에 OCR 옵션 추가 + +```markdown +# analyze 스킬 사용 시 +/authorkit:analyze --ocr korean path/to/document.pdf +``` + +analyze 스킬이 `convert_pdf.py` 대신 `convert_pdf_ocr.py`를 호출하도록 분기. + +### 방안 B: convert_pdf.py에 OCR 폴백 통합 + +기존 `convert_pdf.py`에 PaddleOCR 폴백을 옵셔널로 통합: + +```python +try: + from paddleocr import PaddleOCR + OCR_AVAILABLE = True +except ImportError: + OCR_AVAILABLE = False + +# 텍스트 추출 실패 시에만 OCR 사용 +if use_ocr and OCR_AVAILABLE: + # PaddleOCR 폴백 +elif use_ocr: + print("Warning: OCR not available. Install paddleocr for better results.") +``` + +PaddleOCR가 설치되지 않은 환경에서도 기존 동작이 유지됩니다. + +### 방안 C: 별도 OCR 프리프로세서 + +`convert_pdf_ocr.py`를 독립 도구로 유지하고, authorkit 워크플로우에서 선택적으로 호출. + +## 제공 파일 + +| 파일 | 설명 | +|------|------| +| `convert_pdf_ocr.py` | PaddleOCR 기반 PDF→MD 변환기 (단일/배치 모드) | +| 이 문서 | 컨트리뷰션 설명 및 통합 제안 | + +## 라이선스 + +PaddleOCR: Apache License 2.0 +본 코드: authorkit 프로젝트 라이선스를 따름 diff --git a/authorkit/KESE-KIT-Complete-Guide.md b/authorkit/archive/KESE-KIT-Complete-Guide.md similarity index 100% rename from authorkit/KESE-KIT-Complete-Guide.md rename to authorkit/archive/KESE-KIT-Complete-Guide.md diff --git "a/authorkit/KESE-KIT-\354\231\204\354\240\204\355\214\220.md" "b/authorkit/archive/KESE-KIT-\354\231\204\354\240\204\355\214\220.md" similarity index 100% rename from "authorkit/KESE-KIT-\354\231\204\354\240\204\355\214\220.md" rename to "authorkit/archive/KESE-KIT-\354\231\204\354\240\204\355\214\220.md" diff --git a/authorkit/drafts-en/ch01/chapter-01.md b/authorkit/archive/drafts-en-chapters/ch01/chapter-01.md similarity index 100% rename from authorkit/drafts-en/ch01/chapter-01.md rename to authorkit/archive/drafts-en-chapters/ch01/chapter-01.md diff --git a/authorkit/drafts-en/ch02/chapter-02.md b/authorkit/archive/drafts-en-chapters/ch02/chapter-02.md similarity index 100% rename from authorkit/drafts-en/ch02/chapter-02.md rename to authorkit/archive/drafts-en-chapters/ch02/chapter-02.md diff --git a/authorkit/drafts-en/ch03/chapter-03.md b/authorkit/archive/drafts-en-chapters/ch03/chapter-03.md similarity index 100% rename from authorkit/drafts-en/ch03/chapter-03.md rename to authorkit/archive/drafts-en-chapters/ch03/chapter-03.md diff --git a/authorkit/drafts-en/ch04/chapter-04.md b/authorkit/archive/drafts-en-chapters/ch04/chapter-04.md similarity index 100% rename from authorkit/drafts-en/ch04/chapter-04.md rename to authorkit/archive/drafts-en-chapters/ch04/chapter-04.md diff --git a/authorkit/drafts-en/ch05/chapter-05.md b/authorkit/archive/drafts-en-chapters/ch05/chapter-05.md similarity index 100% rename from authorkit/drafts-en/ch05/chapter-05.md rename to authorkit/archive/drafts-en-chapters/ch05/chapter-05.md diff --git a/authorkit/drafts-en/ch06/chapter-06.md b/authorkit/archive/drafts-en-chapters/ch06/chapter-06.md similarity index 100% rename from authorkit/drafts-en/ch06/chapter-06.md rename to authorkit/archive/drafts-en-chapters/ch06/chapter-06.md diff --git a/authorkit/drafts-en/ch07/chapter-07.md b/authorkit/archive/drafts-en-chapters/ch07/chapter-07.md similarity index 100% rename from authorkit/drafts-en/ch07/chapter-07.md rename to authorkit/archive/drafts-en-chapters/ch07/chapter-07.md diff --git a/authorkit/drafts-en/ch08/chapter-08.md b/authorkit/archive/drafts-en-chapters/ch08/chapter-08.md similarity index 100% rename from authorkit/drafts-en/ch08/chapter-08.md rename to authorkit/archive/drafts-en-chapters/ch08/chapter-08.md diff --git a/authorkit/drafts-en/ch09/chapter-09.md b/authorkit/archive/drafts-en-chapters/ch09/chapter-09.md similarity index 100% rename from authorkit/drafts-en/ch09/chapter-09.md rename to authorkit/archive/drafts-en-chapters/ch09/chapter-09.md diff --git a/authorkit/drafts-en/ch10/chapter-10.md b/authorkit/archive/drafts-en-chapters/ch10/chapter-10.md similarity index 100% rename from authorkit/drafts-en/ch10/chapter-10.md rename to authorkit/archive/drafts-en-chapters/ch10/chapter-10.md diff --git a/authorkit/drafts-en/ch11/chapter-11.md b/authorkit/archive/drafts-en-chapters/ch11/chapter-11.md similarity index 100% rename from authorkit/drafts-en/ch11/chapter-11.md rename to authorkit/archive/drafts-en-chapters/ch11/chapter-11.md diff --git a/authorkit/drafts-en/ch12/chapter-12.md b/authorkit/archive/drafts-en-chapters/ch12/chapter-12.md similarity index 100% rename from authorkit/drafts-en/ch12/chapter-12.md rename to authorkit/archive/drafts-en-chapters/ch12/chapter-12.md diff --git a/authorkit/drafts-en/ch13/chapter-13.md b/authorkit/archive/drafts-en-chapters/ch13/chapter-13.md similarity index 100% rename from authorkit/drafts-en/ch13/chapter-13.md rename to authorkit/archive/drafts-en-chapters/ch13/chapter-13.md diff --git a/authorkit/drafts-en/ch14/chapter-14.md b/authorkit/archive/drafts-en-chapters/ch14/chapter-14.md similarity index 100% rename from authorkit/drafts-en/ch14/chapter-14.md rename to authorkit/archive/drafts-en-chapters/ch14/chapter-14.md diff --git a/authorkit/drafts-en/ch15/chapter-15.md b/authorkit/archive/drafts-en-chapters/ch15/chapter-15.md similarity index 100% rename from authorkit/drafts-en/ch15/chapter-15.md rename to authorkit/archive/drafts-en-chapters/ch15/chapter-15.md diff --git a/authorkit/drafts-en/ch16/chapter-16.md b/authorkit/archive/drafts-en-chapters/ch16/chapter-16.md similarity index 100% rename from authorkit/drafts-en/ch16/chapter-16.md rename to authorkit/archive/drafts-en-chapters/ch16/chapter-16.md diff --git a/authorkit/drafts-en/ch17/chapter-17.md b/authorkit/archive/drafts-en-chapters/ch17/chapter-17.md similarity index 100% rename from authorkit/drafts-en/ch17/chapter-17.md rename to authorkit/archive/drafts-en-chapters/ch17/chapter-17.md diff --git a/authorkit/drafts-en/ch18/chapter-18.md b/authorkit/archive/drafts-en-chapters/ch18/chapter-18.md similarity index 100% rename from authorkit/drafts-en/ch18/chapter-18.md rename to authorkit/archive/drafts-en-chapters/ch18/chapter-18.md diff --git a/authorkit/drafts-en/ch19/chapter-19.md b/authorkit/archive/drafts-en-chapters/ch19/chapter-19.md similarity index 100% rename from authorkit/drafts-en/ch19/chapter-19.md rename to authorkit/archive/drafts-en-chapters/ch19/chapter-19.md diff --git a/authorkit/drafts-en/ch20/chapter-20.md b/authorkit/archive/drafts-en-chapters/ch20/chapter-20.md similarity index 100% rename from authorkit/drafts-en/ch20/chapter-20.md rename to authorkit/archive/drafts-en-chapters/ch20/chapter-20.md diff --git a/authorkit/drafts-en/ch21/chapter-21.md b/authorkit/archive/drafts-en-chapters/ch21/chapter-21.md similarity index 100% rename from authorkit/drafts-en/ch21/chapter-21.md rename to authorkit/archive/drafts-en-chapters/ch21/chapter-21.md diff --git a/authorkit/drafts-en/ch22/chapter-22.md b/authorkit/archive/drafts-en-chapters/ch22/chapter-22.md similarity index 100% rename from authorkit/drafts-en/ch22/chapter-22.md rename to authorkit/archive/drafts-en-chapters/ch22/chapter-22.md diff --git a/authorkit/drafts/README.md b/authorkit/archive/drafts-ko-chapters/README.md similarity index 100% rename from authorkit/drafts/README.md rename to authorkit/archive/drafts-ko-chapters/README.md diff --git a/authorkit/drafts/appendix/appendix.md b/authorkit/archive/drafts-ko-chapters/appendix/appendix.md similarity index 100% rename from authorkit/drafts/appendix/appendix.md rename to authorkit/archive/drafts-ko-chapters/appendix/appendix.md diff --git a/authorkit/drafts/ch01/chapter-01.md b/authorkit/archive/drafts-ko-chapters/ch01/chapter-01.md similarity index 100% rename from authorkit/drafts/ch01/chapter-01.md rename to authorkit/archive/drafts-ko-chapters/ch01/chapter-01.md diff --git a/authorkit/drafts/ch02/chapter-02.md b/authorkit/archive/drafts-ko-chapters/ch02/chapter-02.md similarity index 100% rename from authorkit/drafts/ch02/chapter-02.md rename to authorkit/archive/drafts-ko-chapters/ch02/chapter-02.md diff --git a/authorkit/drafts/ch03/chapter-03.md b/authorkit/archive/drafts-ko-chapters/ch03/chapter-03.md similarity index 100% rename from authorkit/drafts/ch03/chapter-03.md rename to authorkit/archive/drafts-ko-chapters/ch03/chapter-03.md diff --git a/authorkit/drafts/ch04/chapter-04.md b/authorkit/archive/drafts-ko-chapters/ch04/chapter-04.md similarity index 100% rename from authorkit/drafts/ch04/chapter-04.md rename to authorkit/archive/drafts-ko-chapters/ch04/chapter-04.md diff --git a/authorkit/drafts/ch05/chapter-05.md b/authorkit/archive/drafts-ko-chapters/ch05/chapter-05.md similarity index 100% rename from authorkit/drafts/ch05/chapter-05.md rename to authorkit/archive/drafts-ko-chapters/ch05/chapter-05.md diff --git a/authorkit/drafts/ch06/chapter-06.md b/authorkit/archive/drafts-ko-chapters/ch06/chapter-06.md similarity index 100% rename from authorkit/drafts/ch06/chapter-06.md rename to authorkit/archive/drafts-ko-chapters/ch06/chapter-06.md diff --git a/authorkit/drafts/ch07/chapter-07.md b/authorkit/archive/drafts-ko-chapters/ch07/chapter-07.md similarity index 100% rename from authorkit/drafts/ch07/chapter-07.md rename to authorkit/archive/drafts-ko-chapters/ch07/chapter-07.md diff --git a/authorkit/drafts/ch08/chapter-08.md b/authorkit/archive/drafts-ko-chapters/ch08/chapter-08.md similarity index 100% rename from authorkit/drafts/ch08/chapter-08.md rename to authorkit/archive/drafts-ko-chapters/ch08/chapter-08.md diff --git a/authorkit/drafts/ch09/chapter-09.md b/authorkit/archive/drafts-ko-chapters/ch09/chapter-09.md similarity index 100% rename from authorkit/drafts/ch09/chapter-09.md rename to authorkit/archive/drafts-ko-chapters/ch09/chapter-09.md diff --git a/authorkit/drafts/ch10/chapter-10.md b/authorkit/archive/drafts-ko-chapters/ch10/chapter-10.md similarity index 100% rename from authorkit/drafts/ch10/chapter-10.md rename to authorkit/archive/drafts-ko-chapters/ch10/chapter-10.md diff --git a/authorkit/drafts/ch11/chapter-11.md b/authorkit/archive/drafts-ko-chapters/ch11/chapter-11.md similarity index 100% rename from authorkit/drafts/ch11/chapter-11.md rename to authorkit/archive/drafts-ko-chapters/ch11/chapter-11.md diff --git a/authorkit/drafts/ch12/chapter-12.md b/authorkit/archive/drafts-ko-chapters/ch12/chapter-12.md similarity index 100% rename from authorkit/drafts/ch12/chapter-12.md rename to authorkit/archive/drafts-ko-chapters/ch12/chapter-12.md diff --git a/authorkit/drafts/ch13/chapter-13.md b/authorkit/archive/drafts-ko-chapters/ch13/chapter-13.md similarity index 100% rename from authorkit/drafts/ch13/chapter-13.md rename to authorkit/archive/drafts-ko-chapters/ch13/chapter-13.md diff --git a/authorkit/drafts/ch14/chapter-14.md b/authorkit/archive/drafts-ko-chapters/ch14/chapter-14.md similarity index 100% rename from authorkit/drafts/ch14/chapter-14.md rename to authorkit/archive/drafts-ko-chapters/ch14/chapter-14.md diff --git a/authorkit/drafts/ch15/chapter-15.md b/authorkit/archive/drafts-ko-chapters/ch15/chapter-15.md similarity index 100% rename from authorkit/drafts/ch15/chapter-15.md rename to authorkit/archive/drafts-ko-chapters/ch15/chapter-15.md diff --git a/authorkit/drafts/ch16/chapter-16.md b/authorkit/archive/drafts-ko-chapters/ch16/chapter-16.md similarity index 100% rename from authorkit/drafts/ch16/chapter-16.md rename to authorkit/archive/drafts-ko-chapters/ch16/chapter-16.md diff --git a/authorkit/drafts/ch17/chapter-17.md b/authorkit/archive/drafts-ko-chapters/ch17/chapter-17.md similarity index 100% rename from authorkit/drafts/ch17/chapter-17.md rename to authorkit/archive/drafts-ko-chapters/ch17/chapter-17.md diff --git a/authorkit/drafts/ch18/chapter-18.md b/authorkit/archive/drafts-ko-chapters/ch18/chapter-18.md similarity index 100% rename from authorkit/drafts/ch18/chapter-18.md rename to authorkit/archive/drafts-ko-chapters/ch18/chapter-18.md diff --git a/authorkit/drafts/ch19/chapter-19.md b/authorkit/archive/drafts-ko-chapters/ch19/chapter-19.md similarity index 100% rename from authorkit/drafts/ch19/chapter-19.md rename to authorkit/archive/drafts-ko-chapters/ch19/chapter-19.md diff --git a/authorkit/drafts/ch20/chapter-20.md b/authorkit/archive/drafts-ko-chapters/ch20/chapter-20.md similarity index 100% rename from authorkit/drafts/ch20/chapter-20.md rename to authorkit/archive/drafts-ko-chapters/ch20/chapter-20.md diff --git a/authorkit/drafts/ch21/chapter-21.md b/authorkit/archive/drafts-ko-chapters/ch21/chapter-21.md similarity index 100% rename from authorkit/drafts/ch21/chapter-21.md rename to authorkit/archive/drafts-ko-chapters/ch21/chapter-21.md diff --git a/authorkit/drafts/ch22/chapter-22.md b/authorkit/archive/drafts-ko-chapters/ch22/chapter-22.md similarity index 100% rename from authorkit/drafts/ch22/chapter-22.md rename to authorkit/archive/drafts-ko-chapters/ch22/chapter-22.md diff --git "a/authorkit/archive/\353\241\234\353\264\207 \353\263\264\354\225\210\353\252\250\353\215\270(\352\263\240\353\217\204\355\231\224).pdf" "b/authorkit/archive/\353\241\234\353\264\207 \353\263\264\354\225\210\353\252\250\353\215\270(\352\263\240\353\217\204\355\231\224).pdf" new file mode 100644 index 0000000..9bf1b79 Binary files /dev/null and "b/authorkit/archive/\353\241\234\353\264\207 \353\263\264\354\225\210\353\252\250\353\215\270(\352\263\240\353\217\204\355\231\224).pdf" differ diff --git "a/authorkit/archive/\353\241\234\353\264\207 \353\263\264\354\225\210\354\267\250\354\225\275\354\240\220 \354\240\220\352\262\200 \354\262\264\355\201\254\353\246\254\354\212\244\355\212\270 \355\225\264\354\204\244\354\204\234.pdf" "b/authorkit/archive/\353\241\234\353\264\207 \353\263\264\354\225\210\354\267\250\354\225\275\354\240\220 \354\240\220\352\262\200 \354\262\264\355\201\254\353\246\254\354\212\244\355\212\270 \355\225\264\354\204\244\354\204\234.pdf" new file mode 100644 index 0000000..6b25411 Binary files /dev/null and "b/authorkit/archive/\353\241\234\353\264\207 \353\263\264\354\225\210\354\267\250\354\225\275\354\240\220 \354\240\220\352\262\200 \354\262\264\355\201\254\353\246\254\354\212\244\355\212\270 \355\225\264\354\204\244\354\204\234.pdf" differ diff --git a/authorkit/constitution.md b/authorkit/constitution.md index 1877054..d426fd6 100644 --- a/authorkit/constitution.md +++ b/authorkit/constitution.md @@ -111,12 +111,56 @@ command --option value - 기본 리눅스 명령어 이해 - 서버 운영 기초 지식 - 보안 개념 기초 이해 (취약점, 패치 등) +- JavaScript/Python 기본 문법 이해 (시큐어코딩 파트) ### 6.2 설명 수준 - 정부/공공 환경 특수성 설명 포함 - 실무 적용 가능한 구체적 예시 제공 - 바이브코딩 환경에서의 활용 방법 포함 +- AI 도구(Claude, Cursor, Copilot) 활용 시 보안 유의사항 --- -*이 문서는 질문지 응답을 기반으로 생성되었습니다. 필요시 수정하세요.* +## 7. 시큐어코딩 항목 작성 규칙 + +### 7.1 항목 구조 (ref-011, ref-012 기반) +각 보안약점 항목은 다음 순서로 작성합니다: + +```markdown +### N. 보안약점명(영문명, CWE-XXX) + +**개요**: 취약점 설명 (1~2문장) + +**영향**: 발생 시 위험성 + +> **WARNING** +> 이 취약점이 발생하는 대표적인 상황 설명 + +**안전하지 않은 코드** +```언어 +// 취약한 코드 예시 +``` + +**안전한 코드** +```언어 +// 안전한 코드 예시 +``` + +> **TIP** +> 점검 기준 및 추가 권장사항 +``` + +### 7.2 코드 예시 규칙 +- 안전하지 않은 코드와 안전한 코드는 반드시 쌍으로 제공 +- 코드 블록에 언어 지정 필수 (javascript, python, sql, bash 등) +- 주석으로 취약 지점 / 수정 지점 표시 +- 실무 프레임워크 기반 예시 우선 (Express.js, Django, Flask 등) + +### 7.3 CWE 표기 규칙 +- 항목 제목에 CWE 코드 병기: `SQL 삽입(SQL Injection, CWE-89)` +- CWE 코드는 약어로 직접 사용 가능 (예: CWE-79) +- 동일 CWE가 JS/Python 양쪽에 있을 경우 각각의 언어 특성 반영 + +--- + +*최종 업데이트: 2026-04-02 (ref-011/012 시큐어코딩 가이드 규칙 추가)* diff --git a/authorkit/convert_pdf_ocr.py b/authorkit/convert_pdf_ocr.py new file mode 100644 index 0000000..465e554 --- /dev/null +++ b/authorkit/convert_pdf_ocr.py @@ -0,0 +1,200 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""PDF to Markdown converter using PaddleOCR for Korean text extraction""" + +import fitz # pymupdf +import os +import sys +import re +import tempfile +from datetime import datetime +from pathlib import Path + +def extract_pdf_with_ocr(pdf_path, output_dir, ref_id): + """Convert PDF to markdown using PaddleOCR for better Korean text extraction""" + + from paddleocr import PaddleOCR + + # Initialize PaddleOCR with Korean + English (v2.9 API) + ocr = PaddleOCR(use_angle_cls=True, lang='korean', use_gpu=True, show_log=False) + + doc = fitz.open(pdf_path) + total_pages = len(doc) + + images_dir = os.path.join(output_dir, "images") + os.makedirs(images_dir, exist_ok=True) + + all_text = [] + image_count = 0 + headings_detected = 0 + + print(f"Processing: {os.path.basename(pdf_path)}") + print(f"Total pages: {total_pages}") + print(f"Using PaddleOCR (Korean + GPU)") + + for page_num in range(total_pages): + page = doc[page_num] + + # Try pymupdf text extraction first + raw_text = page.get_text("text").strip() + + # If text is too short or has garbled chars, use OCR + korean_ratio = len(re.findall(r'[가-힣]', raw_text)) / max(len(raw_text), 1) + use_ocr = len(raw_text) < 50 or korean_ratio < 0.05 + + if use_ocr: + # Render page as image for OCR + mat = fitz.Matrix(2.0, 2.0) # 2x zoom for better OCR + pix = page.get_pixmap(matrix=mat) + img_path = os.path.join(tempfile.gettempdir(), f"ocr_page_{page_num}.png") + pix.save(img_path) + + # Run PaddleOCR + result = ocr.ocr(img_path, cls=True) + ocr_lines = [] + if result and result[0]: + for line in result[0]: + text_content = line[1][0] + confidence = line[1][1] + if confidence > 0.5: + ocr_lines.append(text_content) + text = '\n'.join(ocr_lines) + os.remove(img_path) + else: + text = raw_text + + # Extract embedded images + page_images = page.get_images() + for img_idx, img in enumerate(page_images): + try: + xref = img[0] + pix = fitz.Pixmap(doc, xref) + if pix.n >= 5: + pix = fitz.Pixmap(fitz.csRGB, pix) + + # Skip tiny images (likely decorative) + if pix.width < 50 or pix.height < 50: + continue + + img_filename = f"p{page_num+1:04d}_img{img_idx}.png" + img_path_save = os.path.join(images_dir, img_filename) + pix.save(img_path_save) + image_count += 1 + text += f"\n\n![이미지 {page_num+1}-{img_idx}](images/{img_filename})\n" + except Exception as e: + print(f" Warning: Image extraction failed on page {page_num+1}: {e}") + + # Detect headings + lines = text.split('\n') + processed_lines = [] + for line in lines: + line = line.strip() + if not line: + processed_lines.append("") + continue + + # Korean chapter/section patterns + if re.match(r'^제?\s*\d+장', line) or re.match(r'^제?\s*[IVX]+\s*[\.장]', line): + processed_lines.append(f"\n## {line}\n") + headings_detected += 1 + elif re.match(r'^\d+\.\s+[가-힣A-Z]', line): + processed_lines.append(f"\n## {line}\n") + headings_detected += 1 + elif re.match(r'^\d+\.\d+\s+[가-힣A-Z]', line) or re.match(r'^[가-힣]+\s*\d+\.\s', line): + processed_lines.append(f"\n### {line}\n") + headings_detected += 1 + elif re.match(r'^\d+\.\d+\.\d+', line): + processed_lines.append(f"\n#### {line}\n") + headings_detected += 1 + else: + processed_lines.append(line) + + page_text = '\n'.join(processed_lines) + all_text.append(f"\n---\n\n{page_text}") + + if (page_num + 1) % 10 == 0: + print(f" Processed {page_num + 1}/{total_pages} pages...") + + doc.close() + + # Write full markdown + full_md = '\n'.join(all_text) + full_md_path = os.path.join(output_dir, "full.md") + with open(full_md_path, 'w', encoding='utf-8') as f: + f.write(f"# {os.path.basename(pdf_path)}\n\n") + f.write(f"> Converted: {datetime.now().strftime('%Y-%m-%d %H:%M')}\n") + f.write(f"> OCR Engine: PaddleOCR (Korean + GPU)\n\n") + f.write(full_md) + + # Write conversion log + log_path = os.path.join(output_dir, "conversion-log.md") + with open(log_path, 'w', encoding='utf-8') as f: + f.write(f"# Conversion Log\n\n") + f.write(f"- **Source**: {os.path.basename(pdf_path)}\n") + f.write(f"- **Ref ID**: {ref_id}\n") + f.write(f"- **Pages**: {total_pages}\n") + f.write(f"- **Converted**: {datetime.now().strftime('%Y-%m-%d %H:%M')}\n") + f.write(f"- **OCR Engine**: PaddleOCR (Korean + GPU)\n") + f.write(f"- **Text characters**: {len(full_md):,}\n") + f.write(f"- **Images extracted**: {image_count}\n") + f.write(f"- **Headings detected**: {headings_detected}\n") + + print(f"\nConversion complete!") + print(f" Text: {len(full_md):,} characters") + print(f" Images: {image_count}") + print(f" Headings: {headings_detected}") + print(f" Output: {full_md_path}") + + return { + 'pages': total_pages, + 'characters': len(full_md), + 'images': image_count, + 'headings': headings_detected + } + + +if __name__ == "__main__": + if len(sys.argv) < 4: + print("Usage: python convert_pdf_ocr.py ") + print("\nBatch mode:") + print(" python convert_pdf_ocr.py --batch ") + sys.exit(1) + + if sys.argv[1] == "--batch": + pdf_dir = sys.argv[2] + output_base = sys.argv[3] + start_num = int(sys.argv[4]) + + pdf_files = sorted([f for f in os.listdir(pdf_dir) if f.endswith('.pdf')]) + print(f"Found {len(pdf_files)} PDF files:") + for i, f in enumerate(pdf_files): + print(f" ref-{start_num+i:03d}: {f}") + print() + + results = {} + for i, pdf_file in enumerate(pdf_files): + ref_id = f"ref-{start_num+i:03d}" + pdf_path = os.path.join(pdf_dir, pdf_file) + out_dir = os.path.join(output_base, ref_id) + os.makedirs(out_dir, exist_ok=True) + + print(f"\n{'='*60}") + print(f"[{i+1}/{len(pdf_files)}] {ref_id}: {pdf_file}") + print(f"{'='*60}") + + result = extract_pdf_with_ocr(pdf_path, out_dir, ref_id) + results[ref_id] = {**result, 'filename': pdf_file} + + # Print summary + print(f"\n{'='*60}") + print("BATCH CONVERSION SUMMARY") + print(f"{'='*60}") + for ref_id, info in results.items(): + print(f" {ref_id}: {info['filename']}") + print(f" Pages: {info['pages']} | Chars: {info['characters']:,} | Images: {info['images']} | Headings: {info['headings']}") + else: + pdf_path = sys.argv[1] + output_dir = sys.argv[2] + ref_id = sys.argv[3] + os.makedirs(output_dir, exist_ok=True) + extract_pdf_with_ocr(pdf_path, output_dir, ref_id) diff --git a/authorkit/converted/diagrams.md b/authorkit/converted/diagrams.md new file mode 100644 index 0000000..ec407b2 --- /dev/null +++ b/authorkit/converted/diagrams.md @@ -0,0 +1,401 @@ +# 우주 보안 아키텍처 텍스트 블록도 (Space Security Architecture Diagrams) + +> 출처: 우주 보안모델 Part1 (ref-007), 우주 보안모델 Part2 (ref-009) +> 생성일: 2026-04-02 + + +--- + +## Diagram 1: 우주 아키텍처 전체도 (Space Architecture Overview) + +> 출처: ref-007, 그림 2 (p.12) + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 우주 영역 (Space Segment) │ +│ │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │ +│ │ 정지궤도 위성 │ │ 중궤도 위성 │ │ 저궤도 위성 │ │ 저궤도 │ │ +│ │ (GEO) │ │ (MEO) │ │ (LEO) │ │ 군집위성 │ │ +│ │ ~36,000km │ │ 2,000~ │ │ 200~2,000km │ │ (LEO │ │ +│ │ │ │ 36,000km │ │ │ │ Constellation)│ +│ │ Ku/Ka 밴드 │ │ L/S/C/X 밴드 │ │ L/S/X 밴드 │ │ Ku/Ka 밴드 │ │ +│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬──────┘ │ +│ │ │ │ │ │ +└─────────┼──────────────────┼──────────────────┼──────────────────┼──────────┘ + │ RF 통신 (업링크/다운링크) │ │ + ↓ ↓ ↓ ↓ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 지상국 영역 (Ground Segment) │ +│ │ +│ ┌────────────────────────────────┐ ┌────────────────────────────────────┐ │ +│ │ 위성운영 영역 │ │ 페이로드 데이터 이용 영역 │ │ +│ │ (Satellite Operations) │ │ (Payload Data Utilization) │ │ +│ │ │ │ │ │ +│ │ ┌────────────┐ ┌───────────┐ │ │ ┌──────────────┐ ┌────────────┐ │ │ +│ │ │위성상태 │ │궤도제어 │ │ │ │데이터 수신 │ │DB 분석 및 │ │ │ +│ │ │모니터링 │ │시스템 │ │ │ │및 처리 시스템│ │시각화 시스템│ │ │ +│ │ └────────────┘ └───────────┘ │ │ └──────────────┘ └────────────┘ │ │ +│ │ ┌────────────┐ ┌───────────┐ │ │ ┌──────────────┐ ┌────────────┐ │ │ +│ │ │미션제어 및 │ │위성제어 │ │ │ │페이로드 데이터│ │관측요청 │ │ │ +│ │ │운영지원 │ │시스템 │ │ │ │서비스 시스템 │ │접수 시스템 │ │ │ +│ │ └────────────┘ └───────────┘ │ │ └──────────────┘ └────────────┘ │ │ +│ │ ┌────────────┐ │ │ ┌──────────────┐ │ │ +│ │ │긴급대응 및 │ │ │ │실험계획 및 │ │ │ +│ │ │위기관리 │ │ │ │제어 시스템 │ │ │ +│ │ └────────────┘ │ │ └──────────────┘ │ │ +│ └────────────────────────────────┘ └────────────────────────────────────┘ │ +│ │ +└──────────────────────────────┬──────────────────────────────────────────────┘ + │ + ↓ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 위성활용 서비스 영역 (Satellite Services) │ +│ │ +│ ┌─────────────────────┐ ┌─────────────────────┐ ┌───────────────────────┐ │ +│ │ 위성항법 서비스 │ │ 위성통신 서비스 │ │ 위성방송 서비스 │ │ +│ │ (Navigation) │ │ (Communication) │ │ (Broadcasting) │ │ +│ │ │ │ │ │ │ │ +│ │ - GPS/GNSS 수신기 │ │ - 위성전화 │ │ - 위성방송 송출센터 │ │ +│ │ - PNT 서비스 │ │ - 광대역 인터넷 │ │ - 위성방송 수신기 │ │ +│ │ - 위치/항법/시각 │ │ - 이동통신 중계 │ │ - 셋톱박스 │ │ +│ │ 정보 제공 │ │ - VSAT 터미널 │ │ - TV/라디오 서비스 │ │ +│ │ - 해상조난안전 │ │ - 선박/항공 통신 │ │ │ │ +│ │ (GMDSS) │ │ │ │ │ │ +│ └─────────────────────┘ └─────────────────────┘ └───────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────────────────┘ +``` + + +--- + +## Diagram 2: GSaaS 아키텍처 (GSaaS Architecture) + +> 출처: ref-009, 그림 2 (p.14) + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 우주 영역 (Space Zone) │ +│ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ 방송위성 │ │ 통신위성 │ │ 항법위성 │ │ 관측위성 │ │ +│ │(Broadcast)│ │(Telecom) │ │(GNSS) │ │(Observe) │ │ +│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ +│ │ │ │ │ │ +└───────────┼───────────────┼───────────────┼───────────────┼───────────────┘ + │ │ │ │ + │ RF 통신 (업링크/다운링크) │ + ↓ ↓ ↓ ↓ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ GSaaS 영역 (GSaaS Zone) │ +│ │ +│ ┌───────────────────────────────────────────────────────────────────────┐ │ +│ │ 안테나 영역 (Antenna Area) │ │ +│ │ ┌──────────┐ ┌───────────┐ ┌──────────────┐ ┌──────────────┐ │ │ +│ │ │ 안테나 │ │ 위성모뎀 │ │ 안테나 제어 │ │ 관리서버 │ │ │ +│ │ │(Antenna) │ │(Modem) │ │ 시스템(ACS) │ │(Mgmt Server)│ │ │ +│ │ └──────────┘ └───────────┘ └──────────────┘ └──────────────┘ │ │ +│ └──────────────────────────────────┬────────────────────────────────────┘ │ +│ │ │ +│ ↓ │ +│ ┌───────────────────────────────────────────────────────────────────────┐ │ +│ │ 지상국 영역 (Ground Station Area) │ │ +│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ +│ │ │위성관제 시스템│ │데이터 처리 │ │미션 운영 │ │ │ +│ │ │(TT&C) │ │시스템 │ │시스템 │ │ │ +│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ +│ └──────────────────────────────────┬────────────────────────────────────┘ │ +│ │ │ +│ ↓ │ +│ ┌───────────────────────────────────────────────────────────────────────┐ │ +│ │ 클라우드 영역 (Cloud Area) │ │ +│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ +│ │ │안테나 예약 │ │데이터 저장 │ │서비스 운영 │ │ │ +│ │ │스케줄링 │ │플랫폼 │ │플랫폼 │ │ │ +│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ +│ └──────────────────────────────────┬────────────────────────────────────┘ │ +│ │ │ +└─────────────────────────────────────┼───────────────────────────────────────┘ + │ + ┌─────────────────┼─────────────────┐ + ↓ ↓ +┌──────────────────────────────────┐ ┌──────────────────────────────────────┐ +│ 위성 운영사 영역 │ │ 위성 활용 서비스 영역 │ +│ (Satellite Operator Zone) │ │ (Satellite Service Zone) │ +│ │ │ │ +│ ┌────────────┐ ┌─────────────┐ │ │ ┌────────────┐ ┌───────────────┐ │ +│ │데이터 분석 │ │서비스 운영 │ │ │ │사용자 단말 │ │서비스 │ │ +│ │및 가공 │ │관리 시스템 │ │ │ │(User │ │애플리케이션 │ │ +│ └────────────┘ └─────────────┘ │ │ │ Terminal) │ │(Service App) │ │ +│ │ │ └────────────┘ └───────────────┘ │ +└──────────────────────────────────┘ └──────────────────────────────────────┘ +``` + + +--- + +## Diagram 3: 우주 공급망 아키텍처 (Space Supply Chain Architecture) + +> 출처: ref-009, 그림 6 (p.25) + +``` + 위성 생애주기 (Satellite Lifecycle) + ─────────────────────────────────────────────────────────────────────────→ + + 설계/개발 준비/조립 발사 궤도진입확인 운영 해체 + (Design/Dev) (Assembly) (Launch) (Orbit Entry) (Operation) (Decom) + │ │ │ │ │ │ + ├─────────────────┤ │ ├────────────┤ │ + │ │ │ │ │ │ + ↓ ↓ ↓ ↓ ↓ ↓ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 위성/발사체 제조사 영역 (Satellite/Launch Vehicle Manufacturer) │ +│ │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ +│ │ SW 개발 서버 │ │ 위성체 제조 시스템│ │ 발사체 제조 시스템│ │ +│ │ (SW Dev Server) │ │ (Sat Mfg System) │ │ (LV Mfg System) │ │ +│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ +│ │ 라이브러리 DB │ │ 탑재체 제조 시스템│ │ 코드 DB │ │ +│ │ (Library DB) │ │ (Payload Mfg) │ │ (Code DB) │ │ +│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ +│ │ +│ ← 부품사 (Parts Supplier) 로부터 부품 조달 │ +│ │ +└──────────────────────────────────┬──────────────────────────────────────────┘ + │ 위성/발사체 인도 + ↓ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 지상국 운영사 영역 (Ground Station Operator) │ +│ │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ +│ │ 안테나 시스템 │ │ 위성관제 시스템 │ │ 데이터 처리 시스템│ │ +│ │ (Antenna System) │ │ (TT&C System) │ │ (Data Processing)│ │ +│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ +│ ┌──────────────────┐ ┌──────────────────┐ │ +│ │ 네트워크 인프라 │ │ 보안 시스템 │ │ +│ │ (Network Infra) │ │ (Security System)│ │ +│ └──────────────────┘ └──────────────────┘ │ +│ │ +└──────────────────────────────────┬──────────────────────────────────────────┘ + │ 위성 데이터 전달 + ↓ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 위성 운영사 영역 (Satellite Operator) │ +│ │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ +│ │ 탑재체 데이터 │ │ 서비스 운영 시스템│ │ 사용자 서비스 │ │ +│ │ 분석/처리 시스템 │ │ (Service Ops) │ │ 제공 시스템 │ │ +│ │ (Payload Data) │ │ │ │ (User Service) │ │ +│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ +│ │ +│ ↓ 위성 활용 서비스 제공 │ +│ ┌──────────────┐ │ +│ │ 최종 사용자 │ │ +│ │ (End Users) │ │ +│ └──────────────┘ │ +└─────────────────────────────────────────────────────────────────────────────┘ +``` + + +--- + +## Diagram 4: 보안위협 도출 절차 (Security Threat Derivation Process) + +> 출처: ref-009, 그림 8 (p.33) + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 보안위협 도출 절차 (4단계) │ +│ Security Threat Derivation Process (4 Steps) │ +└─────────────────────────────────────────────────────────────────────────────┘ + + STEP 1 STEP 2 STEP 3 STEP 4 +┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ +│ │ │ │ │ │ │ │ +│ 공격대상 정의 │ │ 공격벡터 정의 │ │ 공격기법 정의 │ │ 보안위협 도출 │ +│ (Define │ ⇒ │ (Define │ ⇒ │ (Define │ ⇒ │ (Derive │ +│ Attack │ │ Attack │ │ Attack │ │ Security │ +│ Targets) │ │ Vectors) │ │ Techniques) │ │ Threats) │ +│ │ │ │ │ │ │ │ +└───────┬───────┘ └───────┬───────┘ └───────┬───────┘ └───────┬───────┘ + │ │ │ │ + ↓ ↓ ↓ ↓ +┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ +│ GSaaS 및 │ │ - 통신구간 │ │ - 도청/감청 │ │ GSaaS 및 │ +│ 우주 공급망의 │ │ - 지상국 장비 │ │ - 재밍/스푸핑 │ │ 우주 공급망에 │ +│ 구성요소를 │ │ - 운영자 │ │ - 악성코드 │ │ 부정적 영향을 │ +│ 공격대상으로 │ │ - 시설 │ │ - 권한 탈취 │ │ 줄 수 있는 │ +│ 식별 │ │ - SW 개발사 │ │ - 데이터 변조 │ │ 보안위협 도출 │ +│ │ │ - 위성 제조사 │ │ - 물리적 파괴 │ │ │ +└───────────────┘ └───────────────┘ └───────────────┘ └───────────────┘ + + ┌──────────────────────────────────────────────────┐ + │ 적용 대상 (Applied To) │ + ├─────────────────────┬────────────────────────────┤ + │ GSaaS 아키텍처 │ 우주 공급망 아키텍처 │ + │ │ │ + │ - 통신 구간 │ - 위성/발사체 제조사 영역 │ + │ - 안테나 영역 │ - 지상국 운영사 영역 │ + │ - 지상국-클라우드 │ - 위성 운영사 영역 │ + │ - 위성 운영사 영역 │ │ + └─────────────────────┴────────────────────────────┘ +``` + + +--- + +## Diagram 5: GSaaS 보안 아키텍처 (GSaaS Security Architecture) + +> 출처: ref-009, 그림 22 (p.104) + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 우주 영역 (Space Zone) │ +│ ┌──────────────────────────────────────────────────────────┐ │ +│ │ 위성 (Satellite) - 암호화 통신, 안티재밍, 인증 │ │ +│ └─────────────────────────┬────────────────────────────────┘ │ +└───────────────────────────────┼─────────────────────────────────────────────┘ + │ ◆ 통신구간 보안 (Communication Security) + │ - VPN/암호화 채널 + │ - 안티재밍 (Anti-Jamming) + │ - 데이터 암호화 (Encryption) + │ - 인증 및 키교환 (Auth & Key Exchange) + ↓ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ GSaaS 영역 보안 (GSaaS Zone Security) │ +│ │ +│ ┌───────────────────────────────────────────────────────────────────────┐ │ +│ │ 안테나 영역 보안 (Antenna Area Security) │ │ +│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │ │ +│ │ │ 접근통제 │ │ 물리보안 │ │ RF 신호 │ │ 안테나 제어 │ │ │ +│ │ │(Access │ │(Physical │ │ 모니터링 │ │ 시스템 인증 │ │ │ +│ │ │ Control) │ │ Security) │ │(RF Monitor) │ │(ACS Auth) │ │ │ +│ │ └─────────────┘ └─────────────┘ └─────────────┘ └───────────────┘ │ │ +│ └──────────────────────────────────┬────────────────────────────────────┘ │ +│ │ │ +│ ┌───────────────────────────────────────────────────────────────────────┐ │ +│ │ 지상국-클라우드 영역 보안 (Ground Station & Cloud Security) │ │ +│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │ │ +│ │ │ 방화벽/IPS │ │ IAM/MFA │ │ 데이터 암호화│ │ SIEM/SOC │ │ │ +│ │ │(Firewall/ │ │(Identity & │ │(Data │ │(Security │ │ │ +│ │ │ IPS) │ │ Access Mgmt)│ │ Encryption) │ │ Monitoring) │ │ │ +│ │ └─────────────┘ └─────────────┘ └─────────────┘ └───────────────┘ │ │ +│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │ │ +│ │ │ 취약점 관리 │ │ 형상관리 │ │ 백업/이중화 │ │ 네트워크 │ │ │ +│ │ │(Vuln │ │(Config │ │(Backup/ │ │ 분리/세그먼트 │ │ │ +│ │ │ Management)│ │ Management)│ │ Redundancy) │ │(Segmentation)│ │ │ +│ │ └─────────────┘ └─────────────┘ └─────────────┘ └───────────────┘ │ │ +│ └──────────────────────────────────┬────────────────────────────────────┘ │ +│ │ │ +└─────────────────────────────────────┼───────────────────────────────────────┘ + │ + ┌─────────────────┼─────────────────┐ + ↓ ↓ +┌──────────────────────────────────┐ ┌──────────────────────────────────────┐ +│ 위성 운영사 영역 보안 │ │ 위성 활용 서비스 영역 보안 │ +│ (Operator Zone Security) │ │ (Service Zone Security) │ +│ │ │ │ +│ ┌────────────┐ ┌─────────────┐ │ │ ┌────────────┐ ┌───────────────┐ │ +│ │ 사용자 인증 │ │ 권한 관리 │ │ │ │ 단말 보안 │ │ 서비스 보안 │ │ +│ │ 및 MFA │ │(Privilege │ │ │ │(Endpoint │ │(Service │ │ +│ │(User Auth) │ │ Management) │ │ │ │ Security) │ │ Security) │ │ +│ └────────────┘ └─────────────┘ │ │ └────────────┘ └───────────────┘ │ +│ ┌────────────┐ ┌─────────────┐ │ │ │ +│ │ 감사 로그 │ │ 데이터 보호 │ │ │ │ +│ │(Audit Log) │ │(Data │ │ │ │ +│ │ │ │ Protection) │ │ │ │ +│ └────────────┘ └─────────────┘ │ │ │ +└──────────────────────────────────┘ └──────────────────────────────────────┘ +``` + + +--- + +## Diagram 6: 보안 체크리스트 프레임워크 (Security Checklist Framework) + +> 출처: ref-009, 표 25 (p.107-109) +> 기준: CMMC 2단계 + K-RMF + NIS2 + ISMS 반영 + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 우주 보안 체크리스트 (Space Security Checklist) │ +│ 12개 분야 (Domains), 53개 항목 (Items) │ +│ │ +│ 기준: CMMC Level 2 ─┬─ K-RMF ─┬─ NIS2 Directive ─┬─ ISMS(국내) │ +│ │ │ │ │ +└──────────────────────┴─────────┴──────────────────┴────────────────────────┘ + +┌────────────────────────┐ ┌────────────────────────┐ ┌────────────────────┐ +│ 1. 접근통제 (AC) │ │ 2. 식별 및 인증 (IA) │ │ 3. 시스템 및 │ +│ Access Control │ │ Identification & │ │ 통신보안 (SC) │ +│ │ │ Authentication │ │ System & Comm │ +│ AC-01 접근통제 정책 │ │ │ │ Security │ +│ AC-02 최소권한 │ │ IA-01 식별 및 인증 │ │ │ +│ AC-03 특수 권한 사용 │ │ IA-02 다중 인증 │ │ SC-01 경계 보호 │ +│ AC-04 정보흐름 통제 │ │ │ │ SC-02 보안공학 │ +│ AC-05 직무 분리 │ │ │ │ SC-03 정보 보안 │ +│ AC-06 로그인시도 실패 │ │ │ │ SC-04 통신 보안 │ +│ AC-07 세션 잠금/종료 │ │ │ │ SC-05 암호화 │ +│ AC-08 원격 접근통제 │ │ │ │ SC-06 협업장치 │ +│ AC-09 무선 접속 │ │ │ │ SC-07 모바일코드 │ +│ AC-10 모바일기기 통제 │ │ │ │ │ +│ AC-11 외부 연결 통제 │ │ │ │ │ +│ AC-12 공공 정보 통제 │ │ │ │ │ +│ [12 항목] │ │ [2 항목] │ │ [7 항목] │ +└────────────────────────┘ └────────────────────────┘ └────────────────────┘ + +┌────────────────────────┐ ┌────────────────────────┐ ┌────────────────────┐ +│ 4. 시스템 및 │ │ 5. 시스템/서비스 │ │ 6. 사고 대응 (IR) │ +│ 정보무결성 (SI) │ │ 운영관리 (SO) │ │ Incident │ +│ System & Info │ │ System/Service │ │ Response │ +│ Integrity │ │ Operations Mgmt │ │ │ +│ │ │ │ │ IR-01 사고 처리 │ +│ SI-01 취약점 점검 │ │ SO-01 유지보수 통제 │ │ 및 테스트 │ +│ SI-02 악성코드 방지 │ │ SO-02 감사 및 분석 │ │ IR-02 사고 보고 │ +│ SI-03 보안 경보/권고 │ │ SO-03 시간동기화 │ │ │ +│ SI-04 트래픽 모니터링 │ │ SO-04 저장매체 보안 │ │ │ +│ │ │ SO-05 형상관리 │ │ │ +│ │ │ SO-06 보안요구사항 │ │ │ +│ │ │ SO-07 변경관리 │ │ │ +│ │ │ SO-08 시험 및 평가 │ │ │ +│ │ │ SO-09 기능최소화 │ │ │ +│ [4 항목] │ │ [9 항목] │ │ [2 항목] │ +└────────────────────────┘ └────────────────────────┘ └────────────────────┘ + +┌────────────────────────┐ ┌────────────────────────┐ ┌────────────────────┐ +│ 7. 인원보안 (PS) │ │ 8. 물리보안 (PE) │ │ 9. 위험 평가 및 │ +│ Personnel Security │ │ Physical Security │ │ 보안평가 (RA) │ +│ │ │ │ │ Risk Assessment │ +│ PS-01 인원보안 │ │ PE-01 물리적 접근통제 │ │ │ +│ PS-02 보안인식 │ │ PE-02 대체 근무장소 │ │ RA-01 위험 평가 │ +│ 교육/훈련 │ │ PE-03 보호설비 운영 │ │ RA-02 보안 통제 │ +│ │ │ │ │ 모니터링 │ +│ [2 항목] │ │ [3 항목] │ │ [2 항목] │ +└────────────────────────┘ └────────────────────────┘ └────────────────────┘ + +┌────────────────────────┐ ┌────────────────────────┐ ┌────────────────────┐ +│ 10. 보안 거버넌스 (SG) │ │ 11. 비상계획 (CP) │ │ 12. 공급망 │ +│ Security │ │ Contingency │ │ 관리 (SM) │ +│ Governance │ │ Planning │ │ Supply Chain │ +│ │ │ │ │ Management │ +│ SG-01 보안 정책 수립 │ │ CP-01 비상계획 수립 │ │ │ +│ SG-02 역할/책임 정의 │ │ CP-02 백업 및 │ │ SM-01 공급망 보호 │ +│ SG-03 자산관리 │ │ 이중화 관리 │ │ │ +│ SG-04 법적요구사항 │ │ │ │ │ +│ │ │ │ │ │ +│ [4 항목] │ │ [2 항목] │ │ [1 항목] │ +└────────────────────────┘ └────────────────────────┘ └────────────────────┘ + + ┌─────────────────────────────────────────────────────────────────────────┐ + │ 매핑 관계 (Mapping Relationships) │ + │ │ + │ CMMC Level 2 ──→ 우주 보안 체크리스트 기본 프레임워크 │ + │ K-RMF ──→ 국방/방위산업 우주 시스템 보안 요구사항 반영 │ + │ NIS2 ──→ EU 필수기업(우주산업) 사이버보안 지침 반영 │ + │ ISMS ──→ 국내 정보보호 관리체계 보안 기준 반영 │ + │ │ + │ 총 12개 분야 × 53개 항목 → GSaaS 및 우주 공급망 전체 보안 범위 포함 │ + └─────────────────────────────────────────────────────────────────────────┘ +``` diff --git a/authorkit/converted/ref-003/clean_fullmd.py b/authorkit/converted/ref-003/clean_fullmd.py new file mode 100644 index 0000000..91509d2 --- /dev/null +++ b/authorkit/converted/ref-003/clean_fullmd.py @@ -0,0 +1,161 @@ +"""ref-003 full.md 정리 스크립트 — cleaned.md 생성""" +import re +from pathlib import Path + +SRC = Path(__file__).parent / "full.md" +DST = Path(__file__).parent / "cleaned.md" + +lines = SRC.read_text(encoding="utf-8").splitlines() + +# --- 1. 페이지 번호 잔재 제거 --- +# 로마 숫자 단독 줄 +roman_re = re.compile(r"^(i{1,3}|iv|vi{0,3}|ix|x{0,3})$", re.IGNORECASE) +# 아라비아 숫자 단독 줄 (1~999) - 페이지 번호로 추정 +arabic_page_re = re.compile(r"^\d{1,3}$") +# "인공지능(AI) 보안 안내서" 단독 줄 (헤더/푸터 반복) +header_footer_re = re.compile(r"^인공지능\(AI\)\s*보안\s*안내서\s*$") + +# --- 2. 목차 점선 제거 --- +dotline_re = re.compile(r"[·]{3,}") + +# --- 3. 장 제목 패턴 (본문에서의 실제 장 제목) --- +chapter_title_re = re.compile(r"^(제\d+\s*장)\s*$") + +# --- 4. 섹션 번호 패턴 (체크리스트에서 단독 줄로 나오는 번호) --- +# "01", "02" 등 0-padded 2자리 (페이지 번호 잔재) +zeropad_re = re.compile(r"^0[1-9]$") + +cleaned = [] +i = 0 +removed_count = 0 +stats = {"page_nums": 0, "roman": 0, "header_footer": 0, "dotline": 0, "zeropad": 0} + +while i < len(lines): + line = lines[i] + stripped = line.strip() + + # 빈 줄은 그대로 유지 + if stripped == "": + cleaned.append(line) + i += 1 + continue + + # 페이지 구분 주석은 유지 + if stripped.startswith(" + + +![이미지 1-0](images/p0001_img0.png) + + +![이미지 1-1](images/p0001_img1.png) + + +--- + +일러두기 +본 안내서는 AI 기술 및 서비스와 관련된 보안 위협을 선제적으로 예방하고 데이터와 +시스템의 안전성을 확보하며, 이를 통해 개발자, 서비스 제공자, 이용자 모두가 신뢰할 수 +있는 AI 환경을 조성하는데 활용하고자 작성된 것입니다. +본 안내서는 과학기술정보통신부와 한국인터넷진흥원의 정책연구 사업의 연구 결과로서 +내용의 무단 전재를 금합니다. +아울러, 안내서의 내용을 가공․ 인용하는 경우에는 반드시 ‘과학기술정보통신부・한국인터넷 +진흥원 《인공지능(AI) 보안 안내서》’의 출처를 밝혀 주시기 바랍니다. +본 안내서는 AI 서비스 및 제품을 개발하는 과정이나 서비스 제공과정에서 참고 자료로 +활용할 수 있도록 편찬 되었습니다. 본 안내서 활용 시에는 기업의 업무 환경과 상황, 모 +델이나 시스템 개발 목적, 서비스 내용 등을 고려하여 필요하신 내용을 취사 선택하여 활 +용하시기 바랍니다. +AI와 관련된 기술은 계속적으로 발전하고 있고 AI 시스템의 취약점과 이에 따른 위협 공 +격도 다양해지고 있기 때문에, 「인공지능(AI) 보안 안내서」는 앞으로도 지속해서 최신 기 +술 동향과 정보보안 위협 동향, 침해사고 사례 등을 반영해서 보안요구사항과 검증항목 +내용을 업데이트해 나갈 예정입니다. + + +![이미지 2-0](images/p0002_img0.png) + + +--- + +체크리스트 요약 +1 AI 개발자를 위한 보안 체크리스트 iv +2 AI 서비스 제공자를 위한 보안 체크리스트 vii +## 제1 장 개요 +1. 「인공지능(AI) 보안 안내서」 개발 목적 +2. AI 보안 위협 +3. AI 보안 안내서의 필요성 및 적용범위 +## 제2 장 AI 개발자를 위한 보안 안내서 + +## 1. 개요 + +2. AI 개발자 대상 보안 프레임워크 +3. AI 개발자를 위한 보안 요구사항 및 검증항목 +## 제3 장 AI 서비스 제공자를 위한 보안 안내서 + +## 1. 개요 + +2. AI 서비스 제공자 대상 보안 프레임워크 +3. AI 서비스 제공자를 위한 보안 요구사항 및 검증항목 +## 제4 장 AI 이용자를 위한 보안 수칙 + +## 1. 개요 + +2. AI 이용자에게 발생할 수 있는 보안위협 사례 +3. AI 서비스 이용자를 위한 보안 수칙 +참고문헌 +부록 + +## 1. 용어 정의 + + +## 2. 참고자료 + +3. TTA "신뢰할 수 있는 인공지능 개발 안내서"와 비교 및 차별점 + +## 4. 국내 주요 AI 보안 가이드라인 비교 + +5. AI 개발자 대상 보안 프레임워크 +6. AI 서비스 제공자 대상 보안 프레임워크 +목차 + + +![이미지 3-0](images/p0003_img0.png) + + +--- + +1 +AI 개발자를 위한 보안 체크리스트 +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +1 +계획 및 +설계 +(AI 개발자, AI 서비스 제공자 공통사항) 거버넌스 및 위험관리 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +□ +□ +□ + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +□ +□ +□ + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +□ +□ +□ +1.2 +AI 모델개발에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 위험요소를 분석・도출하고 있는가? □ +□ +□ + +#### 1.2.2 + +AI 시스템에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +□ +□ +□ + +#### 1.2.3 + +AI 시스템에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +□ +□ +□ +2 +데이터 수집 +및 준비 +2.1 +데이터 수집 및 전처리 + +#### 2.1.1 + +데이터 수집 시 사용되는 네트워크 프로토콜이 충분한 보안 기능을 제공하고 있는가? +□ +□ +□ + +#### 2.1.2 + +수집된 데이터의 보관 및 삭제 절차가 명확하게 정의되어 있는가? +□ +□ +□ + +#### 2.1.3 + +전처리 과정에서 중요 데이터를 보호하기 위해 암호화 기술을 사용하고 있는가? +□ +□ +□ +2.2 +데이터 무결성 검증 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.2.1 + +데이터 저장 및 전송 시 데이터 무결성을 검증하고 있는가? +□ +□ +□ + +#### 2.2.2 + +데이터 처리 과정에서 데이터 무결성을 검증하고 있는가? +□ +□ +□ + +#### 2.2.3 + +데이터에 접근할 수 있는 권한을 제한하고 있는가? +□ +□ +□ +2.3 +데이터 공격에 대한 방어 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.3.1 + +데이터 중독(poisoning) 공격에 대한 방어 대책을 마련하고 있는가? +□ +□ +□ + +#### 2.3.2 + +데이터 회피(evasion) 공격에 대한 방어 대책을 마련하고 있는가? +□ +□ +□ + +#### 2.3.3 + +데이터 유출・변조 공격을 방지하기 위한 방안을 마련하고 있는가? +□ +□ +□ +체크리스트 요약 + + +![이미지 4-0](images/p0004_img0.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +3 +모델개발 +(학습/ +모델링/ +검증) +3.1 +학습/검증 환경에 대한 보안(Secure Training Environment) + +#### 3.1.1 + +모델 학습을 진행하는 환경이 안전하게 보안조치 되어 있는가? +□ +□ +□ + +#### 3.1.2 + +학습 또는 검증 단계에서 악의적인 사용자가 허위 데이터를 삽입할 가능성을 차단하고 있는가? +□ +□ +□ + +#### 3.1.3 + +연합 학습(Federated Learning)에 참여하는 장치 중 악의적인 장치가 있는지 검증하고 있는가? +□ +□ +□ +3.2 +모델 공격에 대한 방어 + +#### 3.2.1 + +AI Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.2 + +적대적 예제 공격 (Adversarial Example Attacks)에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.3 + +모델 회피 공격(model evasion attack)에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.4 + +모델 오염 공격(Model Poisoning Attack)에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.5 + +모델 추출 공격(model extraction attack) 및 리버스 엔지니어링에 대한 방어 방안을 수립하고 +있는가? +□ +□ +□ + +#### 3.2.6 + +반복적인 질의에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.7 + +기계 학습을 활용한 모델 공격에 대해 능동적으로 방어하고 있는가? +□ +□ +□ +3.3 +오픈소스 라이브러리 보안 + +#### 3.3.1 + +오픈소스 라이브러리의 업데이트 및 취약점을 관리하고 있는가? +□ +□ +□ + +#### 3.3.2 + +오픈소스 라이브러리의 소스 코드를 직접 검토하거나 사용에 대한 보안 문제를 검증하고 있는가? +□ +□ +□ + +#### 3.3.3 오픈소스 라이브러리를 실행할 때 잠재적인 보안 위험을 제거하기 위해 격리된 환경을 이용하고 있는가? □ + +□ +□ +3.4 +LLM 보안 + +#### 3.4.1 + +LLM 애플리케이션 공격에 대한 예방책을 마련하고 있는가? +□ +□ +□ + +#### 3.4.2 LLM의 모델 서비스 거부(Model Denial of Service) 공격에 대한 방어 방안을 수립하고 있는가? + +□ +□ +□ + +#### 3.4.3 LLM의 API 보안을 위한 방안을 수립하고 있는가? + +□ +□ +□ + +#### 3.4.4 LLM의 인터페이스 공격에 대한 예방책을 마련하고 있는가? + +□ +□ +□ + +#### 3.4.5 개발 환경에서 LLM을 사용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 코딩 관행과 지침을 + +수립하고 있는가? +□ +□ +□ + +#### 3.4.6 LLM 출력결과를 정기적으로 모니터링하고 검토하고 있는가? + +□ +□ +□ + +#### 3.4.7 LLM의 Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? + +□ +□ +□ + +#### 3.4.8 LLM의 벡터 및 임베딩 취약점에 대한 방어 방안을 수립하고 있는가? + +□ +□ +□ + + +![이미지 5-0](images/p0005_img0.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +4 +모델 배포 +4.1 +모델파일 및 배포 환경 보호 + +#### 4.1.1 + +모델을 배포하기 전에 코드 및 모델을 스캔하고, 자동화된 취약점 분석을 하고 있는가? +□ +□ +□ + +#### 4.1.2 + +모델파일을 암호화하여 저장하고 전송 중에도 안전하게 보호하고 있는가? +□ +□ +□ + +#### 4.1.3 + +AI 모델이 배포되는 인프라(클라우드, 서버 등) 환경이 충분한 보안시스템을 갖추고 있는가? +□ +□ +□ +4.2 +API 및 인터페이스 보안 + +#### 4.2.1 + +AI 모델이 배포된 후, API를 통해 외부 시스템과 상호작용하는 경우, 충분한 보안 조치 기능을 갖추고 +있는가? +□ +□ +□ + +#### 4.2.2 + +배포된 AI 모델이 실시간으로 데이터를 수신하고 이를 처리할 때, 중간자 공격 +(Man-in-the-Middle Attack)에 대응하고 있는가? +□ +□ +□ + +#### 4.2.3 + +AI 모델의 API에 대한 접근 권한을 제한하고, 강한 인증 메커니즘을 사용해 불법 접근을 방지하고 있는가? □ +□ +□ + +#### 4.2.4 API 사용자는 필요한 권한만 부여받도록 최소 권한 원칙(Least Privilege)을 적용하고 있는가? + +□ +□ +□ + +#### 4.2.5 + +AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치만 연결되도록 하고 있는가? □ +□ +□ +5 +모니터링 및 +유지보수 +5.1 +실시간 모니터링 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 5.1.1 + +모델의 입력 데이터, 출력 결과 등을 실시간으로 모니터링하여 비정상적인 동작을 탐지하고 있는가? +□ +□ +□ + +#### 5.1.2 + +모델 응답 시간, 사용 패턴을 추적하고 분석하여 보안에 의심스러운 행동을 탐지하고 있는가? +□ +□ +□ + +#### 5.1.3 + +AI 모델이 동작하는 서버 및 네트워크의 트래픽을 모니터링하여 비정상적인 요청을 탐지하고 있는가? □ +□ +□ + +#### 5.1.4 + +API 호출, 입력/출력 등 요청로그를 정기적으로 분석하여 보안에 의심스러운 동작을 탐지하고 있는가? □ +□ +□ + +#### 5.1.5 + +AI 모델과 배포 환경에 대해 모의 해킹을 수행하여 잠재적인 보안 취약점을 탐지하고 수정하고 있는가? □ +□ +□ +5.2 +보안 패치 및 업데이트 관리 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 5.2.1 + +모델에 대한 보안 패치 및 업데이트 관리 프로세스를 구축하고 있는가? +□ +□ +□ + +#### 5.2.2 + +모델 배포 후 모델 및 라이브러리의 업데이트가 정기적으로 이루어지고 있는가? +□ +□ +□ + +#### 5.2.3 + +운영 체제, 라이브러리, 프레임워크의 보안 패치를 운영 환경에 적용하기 전에 스테이징 환경에서 패치를 +테스트하고 있는가? +□ +□ +□ +6 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 6.1.1 + +AI 모델이 더 이상 사용되지 않으면, 모델 파일을 완전히 삭제하고 복구할 수 없도록 처리하고 있는가? □ +□ +□ + +#### 6.1.2 + +AI 모델에서 사용 중이던 데이터가 시스템을 폐기하거나 교체할 때 안전하게 삭제되고 있는가? +□ +□ +□ + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면, 해당 모델과 연결된 API나 인터페이스를 비활성화하여 외부 접근을 +차단하고 있는가? +□ +□ +□ + + +![이미지 6-0](images/p0006_img0.png) + + +--- + +2 +AI 서비스 제공자를 위한 보안 체크리스트 +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +1 +서비스 기획 +및 설계 +(AI 개발자, AI 서비스 제공자 공통사항) 거버넌스 및 위험관리 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +□□□ + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +□□□ + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +□□□ +1.2 +AI 서비스에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 위험요소를 분석・도출하고 +있는가? +□□□ + +#### 1.2.2 + +AI 서비스에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +□□□ + +#### 1.2.3 + +AI 서비스에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +□□□ +(AI 서비스 제공자) 계약관리 +1.3 +서비스 수준 계약(SLA) 관리 + +#### 1.3.1 + +공급업체와 계약시, SLA에 보안요구 사항을 명확히 포함했는가? +□□□ + +#### 1.3.2 + +보안 침해 발생 시를 대비하여, 대응 계획을 수립하고 있는가? +□□□ + +#### 1.3.3 + +보안 침해 발생 시를 대비하여, 책임 소재를 명확히 하고 있는가? +□□□ +2 +서비스 +개발 및 +구축 +2.1 +코드 취약점 점검 등 관리 + +#### 2.1.1 + +정적 및 동적 코드 분석 도구를 사용하여 소스 코드의 보안 취약점을 분석하고 있는가? +□□□ + +#### 2.1.2 + +코드 리뷰 프로세스를 도입하여 보안 문제가 있는 부분을 검토하고 개선하고 있는가? +□□□ +2.2 +모델 환경의 보안 + +#### 2.2.1 + +모델 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 최소화하여 무단 접근을 방지하고 +있는가? +□□□ + +#### 2.2.2 + +모델이 악의적으로 수정되지 않도록 모델의 무결성을 보장하는 방법을 적용하고 있는가? +□□□ + +#### 2.2.3 + +보안 모니터링 도구를 사용하여 모델의 비정상적인 활동을 감지하고, 실시간으로 대응할 수 있는 체계를 +구축하고 있는가? +□□□ +2.3 +데이터 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.3.1 + +적대적 공격 등 데이터 공격에 대한 방어 수단을 강구하고 있는가? +□□□ + +#### 2.3.2 + +데이터 저장 및 전송 시 무결성을 보호하기 위한 조치를 하고 있는가? +□□□ + +#### 2.3.3 + +중요 데이터에 대한 기밀성 유지를 위해 보호 방안을 마련하고 있는가? +□□□ + +#### 2.3.4 + +전송구간에서 중요정보 유출을 방지하기 위한 보호 방안을 마련하고 있는가? +□□□ + +#### 2.3.5 + +데이터 유출시 책임추적을 할 수 있도록 조치를 하고 있는가? +□□□ + + +![이미지 7-0](images/p0007_img0.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +2.4 +API 및 인터페이스 보안 + +#### 2.4.1 + +API 통신을 암호화하여 데이터가 전송되는 구간에서 외부 공격에 대한 방어를 하고 있는가? +□□□ + +#### 2.4.2 + +모든 API 요청에 대해 인증 및 권한 관리를 강화하고, 중요 데이터에 접근할 때는 강한 인증 메커니즘을 +적용하고 있는가? +□□□ + +#### 2.4.3 + +API 트래픽은 암호화 기술을 사용하여 보호하고, 데이터를 안전하게 주고 받도록 보장하고 있는가? □□□ + +#### 2.4.4 + +API 호출 제한(Rate Limiting)을 설정하여 과도한 요청을 방지하고, 비정상적인 요청 패턴을 탐지하여 +차단하고 있는가? +□□□ +3 +서비스 +제공 및 +운영 +3.1 +로그 및 운영 데이터 보안 + +#### 3.1.1 + +데이터 처리 중 접속로그 관리를 강화하고 있는가? +□□□ + +#### 3.1.2 + +로그 파일 및 운영 데이터에 암호화를 적용하고, 중요정보는 별도로 관리하여 유출을 방지하고 있는가? □□□ + +#### 3.1.3 + +운영 중 발생하는 데이터를 안전하게 저장하고, 접근 제어를 통해 인증된 관리자만이 로그에 접근할 수 +있도록 설정하고 있는가? +□□□ + +#### 3.1.4 + +로그 데이터 접근 권한을 최소화하고, 접근 제어 및 사용자 활동 기록을 통해 비정상적인 접근을 탐지하고 +있는가? +□□□ +4 +서비스 +유지보수 및 +지원 +4.1 +모니터링, 업데이트 및 패치 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 4.1.1 + +지속적인 사용자 경험 모니터링을 위해 사용자 로그를 수집・관리하고 있는가? +□□□ + +#### 4.1.2 + +AI 시스템이 정상적으로 작동하지 않거나 예기치 못한 오류가 발생할 경우 이를 조기에 탐지하고 대응하 +는 메커니즘이 있는가? +□□□ + +#### 4.1.3 + +AI 시스템의 보안 패치나 모델 업데이트가 정기적으로 이루어지고 있는가? +□□□ +4.2 +성능 및 장애 관리 + +#### 4.2.1 + +서비스 장애가 발생했을 때 자동으로 복구할 수 있도록 하고 있는가? +□□□ + +#### 4.2.2 + +모델 성능을 지속적으로 모니터링하고, 성능 저하가 감지되면 재학습을 통해 성능을 유지하고 있는가? □□□ + +#### 4.2.3 + +실시간으로 모델 드리프트 탐지 시스템을 운영하여 모델 성능이 저하될 경우 즉시 대응할 수 있는 체계를 +마련하고 있는가? +□□□ + +#### 4.2.4 + +정기적으로 모델 재학습 및 업데이트를 수행하여 새로운 데이터 패턴을 반영하고, 성능을 개선하고 있는 +가? +□□□ + +#### 4.2.5 + +AI 서비스에 대해 다중화(HA) 및 백업 시스템을 구축하여 장애 발생 시에도 서비스가 연속적으로 제공될 +수 있도록 하고 있는가? +□□□ + +#### 4.2.6 + +침입차단시스템 등을 통해 외부에서 발생하는 DoS/DDoS 공격을 방어하고, 실시간 모니터링 시스템을 +운영하여 장애를 빠르게 감지하고 대응하고 있는가? +□□□ + + +![이미지 8-0](images/p0008_img0.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +5 +Feedback +(환류) 및 +개선 +5.1 +사용자 피드백 관리 + +#### 5.1.1 + +사용자 피드백 시스템에 입력 검증 및 필터링을 적용하여 악성 코드나 비정상적인 데이터 입력을 차단하 +고 있는가? +□□□ + +#### 5.1.2 + +피드백을 자동으로 분석하기 전에 사전 검증 절차를 마련하여 피드백 데이터의 무결성을 확인하고 있는 +가? +□□□ + +#### 5.1.3 + +최소 권한 원칙(Least Privilege)을 적용하여 피드백 및 개선 과정에서 접근할 수 있는 권한을 최소화하 +고 있는가? +□□□ + +#### 5.1.4 + +피드백 처리 및 개선 과정에서 이루어진 모든 접근 및 변경 사항을 감사 로그로 기록하고, 정기적으로 검토 +하여 무단 접근을 탐지하고 있는가? +□□□ +6 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 6.1.1 + +모델 파기 시, 모델 파일을 완전히 삭제하고 복구할 수 없도록 처리하고 있는가? +□□□ + +#### 6.1.2 + +시스템을 폐기하거나 교체할 때 AI 모델에서 사용 중이던 관련 파일 및 데이터를 안전하게 삭제하고 있는가? □□□ + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 인터페이스를 비활성화하여 외부 +접근을 차단하고 있는가? +□□□ + + +![이미지 9-0](images/p0009_img0.png) + + +--- + + + +--- + +개요 + + +![이미지 11-0](images/p0011_img0.png) + + +--- + +「인공지능(AI) 보안 안내서」 개발 목적 +본 안내서에서는 AI 보안(Security)을 “외부의 사이버 공격‧침해행위 등으로 인한 AI 시스템 손상, 탈 +취 등 무결성, 기밀성, 가용성을 저해하는 행위로부터 AI 시스템을 보호하는 것”으로 정의하였다. 또한 +NIST AI RMF 1.0, OWASP Top 10 for LLM Applications 등 국내외 AI 보안 정책, 연구 자료들 +을 분석하여 AI 보안 위협을 구분하고, AI 보안 위협 예방·대응을 위한 보안 요구사항들을 마련하는데 +참고하였다. +< AI 보안 위협 분류 및 주요 내용 > +구분 +주요 내용 +AI 모델 취약점 +공격 +‣ AI 모델과 시스템의 취약점을 공격하여 서비스 중단, 결과물 조작, 데이터 탈취 등을 일으키는 행위 +① 프롬프트 공격 ② 회피 공격, ③ 오염 공격, ④ 데이터 추출 공격, ⑤ 모델 추출 공격 등 +AI 서비스 공격 +‣ AI 기반 서비스를 대상으로 서비스를 마비시키거나 서비스社가 보유하고 있는 데이터 탈취 등을 +하기 위한 일련의 행위 +⑥ DoS/DDoS, ⑦ 피싱 메일 등을 통한 악성코드 배포, ⑧ AI 서비스 대상 해킹 등 +AI 악용 보안 위협 +‣ AI 서비스의 뛰어난 성능을 해킹, 침해사고 등에 악용하는 행위 +⑨ 악성코드 생성, ⑩ 피싱/스미싱 메일 등 생성, ⑪ 범죄 지식 학습 +데이터 유출 +‣ 이용자가 실수로 민감정보를 AI 서비스에 입력하거나, AI 서비스의 오류로 민감정보를 출력하는 +행위 +⑫ 민감정보(기업 기밀정보 등) 입력, ⑬ 개인정보 등 출력 +AI와 관련된 보안은 AI 시스템 자체의 보안(Security for AI)과 AI 기술을 활용하여 다른 시스템의 +보안을 강화하는 역할(Security by AI)로 나눌 수 있고, 두 개념은 AI와 보안의 상호작용에 대한 서로 +다른 관점을 다룬다. +●“Security for AI”(AI 시스템에 대한 보안)는 AI 시스템 자체를 보호하는 것을 의미한다. AI 시스 +템이 외부 위협이나 악의적인 공격으로부터 안전하게 운영되도록 체계적인 보안 조치를 취하는 것 +이 핵심이다. AI 시스템의 모든 생애 주기 단계에서 보안성을 보장하는 것을 목표로 하며, 데이터 +보호, 모델 보호, 운영 및 인프라 보안 등이 포함된다. +●“Security for AI“의 주요 내용은 다음과 같다. +- (데이터 보안) AI 시스템에서 사용되는 데이터가 유출되거나 변조되지 않도록 보호하는 것으로, +특히, 훈련 데이터와 실시간 데이터의 기밀성, 무결성, 가용성을 보장하는 것이 중요하다. + + +![이미지 12-0](images/p0012_img0.png) + + +![이미지 12-1](images/p0012_img1.png) + + +![이미지 12-2](images/p0012_img2.png) + + +![이미지 12-3](images/p0012_img3.png) + + +![이미지 12-4](images/p0012_img4.png) + + +--- + + +## 제1장 + +개요 +- (모델 보안) AI 모델 자체가 도난, 역설계(Reverse Engineering), 적대적 공격(adversarial +attacks)에 노출되지 않도록 보호하는 것으로, 이를 통해 AI 모델이 안전하게 운영되도록 신뢰 +성을 유지해야 한다. +- (운영 보안) AI 시스템이 배포된 후에도 외부 공격이나 성능 저하에 대응할 수 있는 운영 보안 +조치를 마련하는 것으로, API 보안, 모델 드리프트(model drift) 탐지, 패치 및 업데이트 적용 +등이 포함된다. +“Security by AI“(AI에 의한 보안)은 AI 기술을 사이버 보안에 적용하여 보안 위협을 자동으로 탐지 +하고 대응하는 것을 의미한다. 즉, AI가 보안 강화 도구로 활용되는 것이며, 이를 통해 사이버 보안의 +효율성을 크게 향상시킬 수 있다. +●“Security by AI“의 주요 내용은 다음과 같다. +- (위협 탐지 및 분석) AI는 대규모 데이터 분석을 통해 네트워크 상의 이상 징후를 감지하거나 보 +안 위협을 탐지할 수 있다. AI 모델은 정상 패턴과 비정상 패턴을 학습하고, 이를 기반으로 실시 +간으로 사이버 공격을 식별하는 데 효과적이다. +- (자동화된 보안 대응) AI는 발견된 보안 위협에 대해 자동으로 대응하는 메커니즘을 제공한다. +예를 들어, AI 시스템이 특정 공격을 탐지하면 해당 IP를 차단하거나 보안 설정을 자동으로 변경 +할 수 있다. +- (사이버 공격 예측) AI는 과거의 보안사고 데이터를 분석하여 향후 발생할 수 있는 공격을 예측 +할 수 있다. 이로 인해 사전에 보안 조치를 취해 공격을 방어할 수 있다. +- (사용자 인증 및 접근 제어) AI 기반 시스템은 이상 행동 감지를 통해 사용자 인증 절차를 강화 +하고, 비정상적인 접근 시도를 차단할 수 있다. +표 1-1 +“Security for AI”와 “Security by AI” 비교 +구분 +Security for AI +Security by AI +주요 목적 +AI 시스템 자체를 보호 +AI 기술을 활용해 보안 시스템을 강화 +적용 대상 +AI 모델, 데이터, 인프라 등 AI 시스템 자체 +침입 탐지, 위협 예측, 자동 대응 등의 보안 시스템 +주요 위협 +데이터 포이즈닝, 모델 탈취, 적대적 예제 공격 +사이버 공격, 네트워크 침입, 악성 소프트웨어 +활용 기술 +데이터 암호화, 모델 보호, API 접근 제어 +AI 기반 위협 탐지, 이상행동 탐지, 자동화된 보안 대응 +대응 대상 +AI 시스템에 대한 외부 위협 +일반적인 네트워크, 시스템, 사용자에 대한 보안 위협 +예시 +AI 모델 기밀성 보호, 데이터 무결성 유지 +AI 기반 침입탐지시스템 및 피싱 탐지 및 차단 + + +![이미지 13-0](images/p0013_img0.png) + + +![이미지 13-1](images/p0013_img1.png) + + +![이미지 13-2](images/p0013_img2.png) + + +![이미지 13-3](images/p0013_img3.png) + + +![이미지 13-4](images/p0013_img4.png) + + +--- + +그 동안 많은 기관에서 인공지능 신뢰성 확보를 위한 원칙과 지침, 안내서를 발간하였으나, 주로 신뢰 +성 관점에서 다루거나 보안 관점에서 상세한 가이드를 제시하고 있지 않아 아쉬운 점이 많았다. +●이에 따라 본 안내서는 AI 제품 및 서비스 개발 현장에서 모델 개발자, 서비스 제공자, 서비스 이 +용자 등 이해관계자들이 정보보안 측면에서 참고할 수 있는 기준을 마련하고자 추진하였다. +●본 안내서에서는 AI 시스템의 전반적인 안전성과 무결성을 보장하기 위한 다양한 보안 방책을 의 +미하는 “Security for AI”에 초점을 맞추고자 한다. “Security for AI”는 AI 시스템의 모든 생애 +주기(데이터 수집, 모델 개발, 학습, 배포, 유지보수, 폐기)에서 발생할 수 있는 다양한 위협에 대해 +AI 시스템을 보호하는 것을 의미한다. 이는 데이터 보안, 모델 보안, 배포 및 운영 보안 등의 영역 +을 포함하며, 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability) 등을 적용하여 AI +시스템을 대내외적인 위협으로부터 보호하는데 목적이 있다. +본 안내서는 AI 시스템의 설계, 개발, 운영, 배포, 유지보수, 폐기 등 전 단계에서 발생할 수 있는 다 +양한 보안 위험을 관리하기 위한 방안을 제시하였다. 또한 AI 시스템의 생애 주기에 걸쳐 기술적 고려 +가 필요한 요구사항 및 검증항목을 기밀성, 무결성 및 가용성을 기준으로 하여 세부적으로 다루었다. +따라서 AI 개발자 및 서비스 제공자가 AI 시스템의 보안(Security) 문제를 해결하는데 「인공지능(AI) +보안 안내서」가 실질적인 도움이 될 것으로 기대된다. +다만, AI 신뢰성 보장을 위해서는 보안(Security) 측면 외에도 윤리, 편향성, 개인정보보호와 같은 +법・제도적 측면도 함께 고려되어야 한다. 「인공지능(AI) 보안 안내서」는 이러한 범용성을 갖추는 것 +보다는 보안 영역에 초점을 맞추었기 때문에 AI의 윤리적 측면, 신뢰성 측면, 개인정보보호 측면에 대 +해서는 타 자료를 병행하여 참고할 필요가 있다. +●따라서 AI 개발자 및 서비스 제공자는 기업 내부의 기술 역량, 제품 서비스 특성 등을 고려하여 적 +절한 요구사항과 검증항목을 선택하여 적용하고, 「인공지능(AI) 보안 안내서」가 다루지 않는 부분 +에 대해서는 기업에서 제공 중인 서비스 분야 및 환경에 맞게 국내 AI 관련 안내서를 참고 자료로 +활용하길 바란다. +본 안내서는 예측형 AI, 생성형 AI, LLM 등 다양한 산업, 경제, 사회 분야에서 활용되는 AI를 대상으 +로 공통적으로 발생할 수 있는 보안 위협과 침해사고를 선제적으로 예방·대응하기 위한 보안 요구사항 +과 검증항목을 제시하고 있다. 따라서 본 안내서는 AI 개발 및 활용 환경에서 발생할 수 있는 보안 위 +협에 대응하는데 초점을 맞추어 개발되었다. 향후 의료, 교통, 에너지 등 각 산업 분야 內 AI 모델, +시스템의 특징과 AI 활용 현황 등에 따라 개별 산업 별 AI 보안 위협, AI 보안 요구사항 등을 연구하 +여, 산업 별 보안 안내서 개발도 추진할 예정이다. + + +![이미지 14-0](images/p0014_img0.png) + + +![이미지 14-1](images/p0014_img1.png) + + +![이미지 14-2](images/p0014_img2.png) + + +![이미지 14-3](images/p0014_img3.png) + + +![이미지 14-4](images/p0014_img4.png) + + +--- + + +## 제1장 + +개요 +AI 보안 위협 +Prompt Injection +공격자는 정교하게 만든 입력을 통해 LLM을 조작하여 공격자의 의도를 실행하게 할 수 있다. 이는 +시스템 프롬프트를 적대적으로 유도하거나 조작된 외부 입력을 통해 간접적으로 수행할 수 있으며, +잠재적으로 데이터 유출 등의 문제로 이어질 수 있다. +• Direct Prompt Injections (일명 jailbreaking): 악의적인 사용자가 민감한 정보를 추출하기 위해 프롬프트를 삽입 +• Indirect Prompt Injections: 사용자가 웹페이지 프롬프트를 통해 민감한 데이터를 요청 +• 플러그인을 통한 사기: 웹사이트가 플러그인을 악용하여 사기 등 범죄목적을 위한 기망행위를 함 +참고 사례 +●인공지능(AI) 음성비서 서비스인 아마존 알렉사와 구글 어시스턴트 등도 해킹에 취약하였다. 스마트 +스피커에 레이저를 쏴 이들에게 명령을 내릴 수 있음이 알려졌기 때문이다.1 미시간대와 일본 전기 +통신대(UEC) 연구진에 따르면 “구글, 차고 문을 열어줘” 같은 명령어가 암호화되어 입력된 빛을 +스마트 스피커의 마이크에 비춰 음성 명령을 암호화해 빛에 실어 보내면, 이 빛이 스마트 스피커에 +내장된 진동판에 부딪쳐 마치 사람이 음성 명령을 말했을 때와 똑같이 이 진동판이 떨리면서 스마 +트 스피커에 명령을 내린다는 것이다. 연구진은 실험에서 이런 취약점을 이용해 스마트 차고 문을 +열거나 현재 시간을 묻는 등의 작업을 수행하였다. 연구진은 이와 같이 빛을 이용한 해킹에 취약한 +기기들은 구글 홈, 구글 네스트 캠 IQ, 아마존 에코・에코 닷・에코 쇼, 페이스북의 포털 미니, 아이폰 +XR, 6세대 아이패드 등이었다고 밝혔다. +●또한, 이러한 인공지능(AI) 음성 비서는 제3자가 대화 내용을 엿듣거나 해킹 프로그램을 설치해 +민감한 정보를 넘겨주도록 유도할 수도 있다.2 아마존과 구글이 애플리케이션 업그레이드를 위해 +앱 개발자들에게 제공하는 접근법을 해커들이 악용하여 자신이 원하는 대로 음성비서의 응답을 유도 +하는 명령을 내릴 수 있음이 알려졌다. 예를 들어, 사용자를 가장한 해커가 음성 명령을 통해 앱을 +열고 그 앱이 실행되지 않는다고 말한다. AI 음성 비서는 대답하지 않지만, 사용자에게 알리지 않은 채 +계속 백그라운드를 실행하고, 몇 분 후 AI 음성 비서는 회사 업데이트가 있었다면서 사용자에게 비 +밀번호를 말해달라고 요청한다. +1 +연합뉴스, https://www.yna.co.kr/view/AKR20191106004500091, 2019.11.06 +2 +머니투데이, https://news.mt.co.kr/mtview.php?no=2019102214138230917, 2019.10.22 + + +![이미지 15-0](images/p0015_img0.png) + + +![이미지 15-1](images/p0015_img1.png) + + +![이미지 15-2](images/p0015_img2.png) + + +![이미지 15-3](images/p0015_img3.png) + + +![이미지 15-4](images/p0015_img4.png) + + +![이미지 15-5](images/p0015_img5.png) + + +--- + +민감 정보 노출(Sensitive Information Disclosure) +LLM 애플리케이션은 실수로 민감한 정보 또는 기밀 데이터를 공개하여 무단 액세스, 지적 재산권 도용 +및 개인정보 침해로 이어질 수 있다. +• 의도치 않은 노출: 잘못된 해석이나 스크러빙 부족으로 인한 데이터 유출 +• Complete Filtering (완료 필터링) 오류: 모델이 생성한 텍스트(완료 output)를 필터링하는 과정에서 위험하거나 부 +적절한 응답이 필터링을 우회해 노출될 수도 있음 +• Overfitting (과잉적합) 오류: LLM이 훈련 데이터에 지나치게 적합하여, 훈련 시에는 잘 작동하지만 새로운 상황에 +서는 비효율적이거나 학습 데이터 내 포함된 민감정보를 기억해 출력할 수도 있음. +공격 시나리오 +●(의도치 않은 노출) 사용자 A가 다른 사용자 데이터에 노출됨 +의심하지 않는 합법적인 사용자 A는 LLM 애플리케이션과 악의적이지 않은 방식으로 상호 작용할 때 LLM을 통해 특정 +다른 사용자 데이터에 노출된다. +참고 사례 +●오픈AI의 챗GPT가 사용자의 로그인 정보와 개인정보를 유출하는 일이 발생하였다.3 정보 유출 피해를 +입었다고 주장하는 제보자가 제출한 스크린샷에는 약국 처방약 포털의 직원이 사용하는 지원 시스템에 +연결된 제보자 이름과 비밀번호가 포함돼 있었다. 이 외에도 앱의 이름과 문제가 발생한 스토어 번호 +등이 포함돼 있는 것이 나타났다. 2023년 3월에는 챗GPT의 버그로 인해 사이트에서 한 활성 사용자 +의 채팅 기록이 관련 없는 사용자에게 표시되는 현상이 발생한 바 있다. 이러한 유형의 시스템 오류는 +종종 발생할 수 있으며, 정확한 원인은 인시던트마다 다르지만, 프론트엔드 디바이스와 백엔드 디바이스 +사이에 있는 미들박스 디바이스와 관련된 경우가 많은 것으로 알려져 있다. 미들박스는 성능 향상을 +위해 최근에 로그인한 사용자의 자격 증명을 비롯한 특정 데이터를 캐시하는 기능을 말한다. 이때 불 +일치가 발생하면 한 계정의 정보를 다른 계정에 매핑하는 등의 문제가 발생할 수 있다. +●2023년 구글 딥마인드와 대학 공동 연구진은 챗GPT에 단순한 프롬프트 공격으로 개인정보를 +비롯한 1만 개 훈련 데이터를 추출할 수 있었다는 논문을 airXiv에 게재하였다.4 +3 +디지털투데이, https://www.digitaltoday.co.kr/news/articleView.html?idxno=504025, 2024.1.30 +4 +Nasr 외(2023.11), Scalable Extraction of Training Data from (Production) Language Models, arXiv:2311.17035v1 + + +![이미지 16-0](images/p0016_img0.png) + + +![이미지 16-1](images/p0016_img1.png) + + +![이미지 16-2](images/p0016_img2.png) + + +![이미지 16-3](images/p0016_img3.png) + + +![이미지 16-4](images/p0016_img4.png) + + +![이미지 16-5](images/p0016_img5.png) + + +--- + + +## 제1장 + +개요 +적대적 예제(Adversarial Example) 공격 +3.1 +회피 공격(Evasion attack) +회피 공격(Evasion Attack)은 입력데이터에 노이즈를 추가하여 모델을 속이는 공격이다. 이미지 데이터 +에 노이즈를 추가하게 되면 인간의 눈으로는 큰 차이가 없지만, 모델은 다른 데이터로 인식하여 행동 +하게 된다. +참고 사례 +●정지표지판에 표시를 추가하여 자율주행 차량이 이를 속도제한표지판으로 잘못 인식하게 하거나, +차선 표시를 혼동하게 만들어 차량이 도로를 벗어나도록 하는 등의 공격이 이에 해당한다. 아래의 +예에서는 도로의 잘못된 표시가 무인 자동차를 잘못 인도하여 마주 오는 차량으로 방향을 틀게 할 +수 있는 것으로 나타났다.5 +그림 1-1 회피공격의 예 +출처=N. Hanacek/NIST +5 +AEM, https://www.autoelectronics.co.kr/article/articleView.asp?idx=5496, 2024.1.15. + + +![이미지 17-0](images/p0017_img0.png) + + +![이미지 17-1](images/p0017_img1.png) + + +![이미지 17-2](images/p0017_img2.png) + + +![이미지 17-3](images/p0017_img3.png) + + +![이미지 17-4](images/p0017_img4.png) + + +![이미지 17-5](images/p0017_img5.png) + + +![이미지 17-6](images/p0017_img6.png) + + +--- + +●2017년 워싱턴대학 연구팀은 자율주행차를 오작동시키는 시연을 한 바 있는데, 그때 쓰인 방법이 +회피 공격의 사례이다. 연구팀은 STOP 표지판에 스티커를 붙여 인공지능을 교란함으로써, 자율 +주행차가 ‘정지’ 표시판을 ‘속도제한’ 표시판으로 오인하도록 만들었다. 이는 사이버 공간이 아닌 물리적 +공간에서도 아주 간단한 방법으로 적대적 공격이 가능함을 보여준다. +●2018년 구글 리서치 그룹은 논문을 통해 이미지 인식 머신러닝 알고리즘을 오작동 시킬 수 있는 스 +티커를 발표했다. 적대적 스티커(Adversarial patch)라고 불리는 이 스티커를 바나나 옆에 붙이면 이미 +지 인식 앱이 바나나를 100% 확률로 토스터 기기로 인식했다. 이 스티커는 누구나 쉽게 인쇄해 사용 +할 수 있고 악의적인 공격인지 쉽게 발견하기 어려워서, 악용되는 경우 큰 위험을 가져올 수도 있다. +3.2 +오염 공격(Poisoning attack) +오염 공격(Poisoning attack)은 학습데이터에 오염된 데이터를 추가하여 모델을 망가뜨리는 공격 방법 +이다. 공격자가 AI 모델의 학습 단계에서 의도적으로 악의적인 데이터를 주입하여 발생시키는 것으로, +예를 들어, 챗봇이 부적절한 발언을 하도록 악의적인 행위자에 의해 학습되어 욕설, 인종차별 발언을 +남발하도록 하는 것이다. +참고 사례 +●2024년 중국에서 제조된 로봇청소기 ‘에코백스 디봇 X2s(Ecovacs Deebot X2s)’가 해킹을 당해 +미국 가정집에서 욕설과 인종차별적 발언을 하는 일이 발생하였다.6 로봇청소기가 마이크 기능을 +통해 인종차별적인 욕설을 하거나 개를 쫓아다닌 일도 있었다. 조사 결과 해커가 제조사의 보안 조치 +를 우회해 카메라, 마이크, 이동 제어 기능을 탈취한 것으로 파악되었다. 제조사 측이 보안 조사를 +실시한 결과, 이용자의 계정과 비밀번호가 도용되면서 이런 일이 발생했고, 제조사 기술팀이 범인 +의 IP 주소를 파악해 계정으로의 추가 접근을 막았다고 밝혔다. 특히 보안에 취약했던 부분은 4자리 +의 PIN코드였던 것으로 확인되었다. 보안 전문가들 사이에서 이 제조사의 보안 취약성에 대해서는 +이미 지적이 나온 바 있었다. 2024년 8월 미국 라스베이거스에서 열린 ‘데프콘 해킹 콘퍼런스’에서 +보안 연구원들이 에코백스 제품을 분석한 결과 블루투스로 로봇을 해킹하거나 원격으로 마이크와 +카메라를 몰래 켜는 데 악용할 수 있다고 하였다. 특히 약 130m 떨어진 곳에서 블루투스를 활용해 +로봇을 해킹하고 원격으로 기기를 제어할 수 있는 것으로 밝혀졌다. +●마이크로소프트는 2016년 인공지능 챗봇 'Tay'를 출시했다. 그러나 일부 사용자들이 악의적인 메시지 +와 인종차별적 발언을 반복적으로 입력하여 학습 데이터를 오염시켰고, 그 결과 Tay는 부적절한 발언 +을 생성하게 되었다. 이 사건으로 인해 마이크로소프트는 출시 16시간 만에 Tay의 운영을 중단해야 +했으며, AI 시스템의 학습 데이터에 대한 보안과 검증의 중요성이 부각되었다. +6 +조선일보, https://www.chosun.com/international/international_general/2024/10/21/CCCTWF5ERRCQRDOF6C7MUEQSUU/, 2024.10.21 + + +![이미지 18-0](images/p0018_img0.png) + + +![이미지 18-1](images/p0018_img1.png) + + +![이미지 18-2](images/p0018_img2.png) + + +![이미지 18-3](images/p0018_img3.png) + + +![이미지 18-4](images/p0018_img4.png) + + +--- + + +## 제1장 + +개요 +3.3 +탐색적 공격 +AI 데이터 추출 공격 +●AI 모델의 학습에 사용했던 데이터 자체를 탈취하는 공격 기법이며, 이때 데이터 추출을 위해 활용 +한 공격을 ‘전도 공격(Inversion Attack)’이라고도 한다. 인공지능이 훈련한 원래 데이터를 찾아내 +면 악의적인 의도에 맞게 학습 결과를 유도할 수 있게 된다. +●데이터 추출 공격은 인공지능에 하는 질의 횟수를 조정하는 방식으로 대응이 가능하다. 예컨대, 하 +루 동안 한 명이 질의할 수 있는 횟수를 작게 제한함으로써 데이터가 유출되더라도 피해를 최소화 +할 수 있다 +AI 모델 추출(Model Extraction) 공격 +●머신러닝 모델에 수많은 쿼리를 던진 후, 산출된 결과값을 분석해 모델 학습을 위해 사용된 데이터 +를 추출하는 공격을 말한다. 이 공격 방법은 얼굴인식 머신러닝 모델의 학습을 위해 사용한 얼굴 +이미지 데이터를 복원할 수도 있다. 70초 동안 650번 쿼리만으로도 아마존 머신러닝 모델과 유사 +한 모델을 만들어내는 것이 가능하다는 연구 결과도 있다. +●이 공격 방법은 유료 러닝모델 서비스(MLaas : Machine Learning as a Service)를 탈취하거나 +Inversion attack, Evasion attack과 같은 2차 공격에 활용하기 위해 사용될 수 있다. 머신러닝 +모델을 훈련시키는 학습 데이터 안에 개인정보, 민감정보 등이 포함되어 있는 경우에는 이러한 공 +격에 의해 유출될 가능성이 있다. +●공격 대상이 되는 AI 모델에 대한 공격자의 사전 지식(AI 모델의 구조, 학습 데이터 등)이 양에 따 +라 블랙박스 AI 모델 탈취 공격과 그레이박스 AI 모델 탈취 공격으로 분류한다. +- 그레이박스 AI 모델 탈취 공격: 공격자가 공격 대상이 되는 AI 모델에 대하여 부분적인 사전 지 +식을 갖고 있을 때 수행되는 공격이다. +- 블랙박스 AI 모델 탈취 공격: 공격자가 공격 대상이 되는 AI 모델에 대하여 어떠한 사전 지식도 +갖지 않을 때 수행되는 공격이다. + + +![이미지 19-0](images/p0019_img0.png) + + +![이미지 19-1](images/p0019_img1.png) + + +![이미지 19-2](images/p0019_img2.png) + + +![이미지 19-3](images/p0019_img3.png) + + +![이미지 19-4](images/p0019_img4.png) + + +--- + +AI 보안 안내서의 필요성 및 적용범위 +본 안내서는 미국, 유럽, 일본 등 해외기관에서 발표한 원칙 및 프레임워크 등을 참조하였고, 국내자료 +로는 과학기술정보통신부/한국정보통신기술협회(TTA)에서 발간한 「신뢰할 수 있는 인공지능 개발 안내서: +일반분야」, 국가정보원/국가보안기술연구소에서 발간한 「챗GPT 등 생성형 AI 활용 보안 가이드라인」, +금융보안원에서 발간한 「금융분야 AI 보안 가이드라인」 등도 참고하였다. 본 「인공지능(AI) 보안 안내 +서」의 특징은 다음과 같다. +첫째, 신뢰성, 프라이버시 등에 관한 항목을 모두 제외하고 보안의 목표인 기밀성⋅무결성⋅가용성 보 +장을 위한 요구사항에 초점을 맞추었다. +둘째 개발자 뿐만 아니라 서비스 제공자 및 이용자를 대상으로 적용대상을 확대하였다. +●「인공지능(AI) 보안 안내서」는 AI 모델을 개발하는 개발자와 개발조직, 모델을 활용하여 서비스를 +제공하는 사업자, 해당 서비스를 이용하여 결과물을 생성한 이용자 모두를 대상으로 하여 각 주체별 +로 AI 보안에 대한 안내서를 마련하였다. 이를 위해 인공지능 발전과 신뢰 기반 조성 등에 관한 기 +본법(인공지능 기본법, '26. 1. 22 시행예정), EU AI Act 등을 참고하여 개발자, 서비스 제공자, +이용자의 개념을 아래와 같이 정의하였다. +- “개발자”라고 하면 주로 소프트웨어 개발자(Developer 혹은 Engineer) 또는 개발 조직(기업)을 +지칭하며, 이들은 시스템 분석가의 요구에 맞게 컴퓨터 프로그래밍을 하거나 시스템 설계를 하는 +사람 또는 조직(기업)을 말한다. 안내서에서 개발자는 요구사항 및 검증항목에 따라 조직의 구성원 +개인일 수도 있고 팀(조직) 또는 회사가 될 수도 있다. 따라서 개발자가 실제 이 안내서를 참고 +할 때 해당 내용이 개발자 개인에 관한 것인지 아니면 조직 또는 회사가 주도적으로 해야 할 것 +인지 여부에 대한 혼란이 있을 수 있다. 그래서 「인공지능(AI) 보안 안내서」에서는 요구사항 별 +로 수행주체를 명시적으로 표시하였다. +- “서비스제공자”는 업으로서 AI 서비스 또는 AI 부수 서비스를 타인에게 제공하는 자를 말한다. +“업으로” 한다는 것은 같은 행위를 계속하여 반복하는 것을 의미하고, 여기에 해당하는지 여부는 +단순히 그에 필요한 인적 또는 물적 시설의 구비 여부와는 관계없이 행위의 반복・계속성 여부, +영업성의 유무, 그 행위의 목적이나 규모・횟수・기간・태양 등의 여러 사정을 종합적으로 고려하 +여 사회통념에 따라 판단하여야 한다. 이 안내서에서 서비스제공자는 영리를 목적으로 AI 서비스 +를 제공하는 법인(회사 등)을 말한다. 그러나 실제 업무 수행 시에는 임직원 개인이 해야 할 것 +인지 아니면 조직 또는 회사가 해야 할 것인지 불명확한 경우가 있을 수 있다. 따라서 「인공지능 +(AI) 보안 안내서」에서는 이를 명확히 하고자 요구사항 별로 수행주체를 표기하였다. + + +![이미지 20-0](images/p0020_img0.png) + + +![이미지 20-1](images/p0020_img1.png) + + +![이미지 20-2](images/p0020_img2.png) + + +![이미지 20-3](images/p0020_img3.png) + + +![이미지 20-4](images/p0020_img4.png) + + +--- + + +## 제1장 + +개요 +- “이용자”는 AI 서비스 또는 AI 부수 서비스를 타인에게 제공하지 않고 AI 서비스 또는 AI 부수 +서비스를 이용하는 사람을 말한다. 이러한 “이용자” 개념에는 업으로서 AI 시스템 또는 AI 서비 +스를 이용하는 사람(이하 “AI 비즈니스 이용자”라고 함)이 포함될 수도 있으나, 본 「AI 이용자를 +위한 보안 수칙」의 적용 대상은 AI 서비스를 이용하는 일반 국민을 대상으로 작성하였다. +그림 1-2 AI 서비스 관련 사업 활동의 주체 +셋째, 보안 측면에서 중요한 “파기” 단계를 추가하여 AI 서비스의 생명주기를 차별화했다. +●인공지능 서비스 생명주기를 “파기” 단계를 추가하여 총 6단계로 구분하였으며, 생명주기 단계별 +세부 내용도 차별화하였다. 「인공지능(AI) 보안 안내서」에서 정의한 각 단계별 목표와 주요 활동은 +다음과 같다. +그림 1-3 인공지능 서비스의 생명주기 + +## 1. 계획 및 설계 + + +## 2. 데이터 수집 및 준비 + + +## 3. 모델 개발(학습/모델링/검증) + + +## 4. 모델 배포 + + +## 5. 모니터링 및 유지보수 + + +## 6. 파기 + + +![이미지 21-0](images/p0021_img0.png) + + +![이미지 21-1](images/p0021_img1.png) + + +![이미지 21-2](images/p0021_img2.png) + + +![이미지 21-3](images/p0021_img3.png) + + +![이미지 21-4](images/p0021_img4.png) + + +![이미지 21-5](images/p0021_img5.png) + + +![이미지 21-6](images/p0021_img6.png) + + +--- + +표 1-2 +인공지능 생명주기별 주요활동(AI 보안 안내서) +생명주기 +목표 +주요 활동 + +## 1. 계획 및 설계 + +AI 시스템이 해결할 목표 및 +성공 지표를 정의 +∙AI가 해결할 수 있는 비즈니스 및 기술적 목표를 정의 +∙AI 시스템 관리 감독 조직 및 방안 마련 +∙AI시스템 위험요소 분석 및 대응 방안 마련 + +## 2. 데이터 수집 + +및 준비 +AI 모델을 학습하고 개발하는 데 +사용할 데이터를 수집하고, 사전 +처리 및 모델 개발에 적합한 +형식으로 변환 +∙데이터 소스(구조화된 데이터 및 구조화되지 않은 데이터, 센 +서 데이터, 과거 데이터 세트 등)를 정의함 +∙데이터 사용과 관련된 보안 정책 및 법적 제약을 고려함 +∙누락된 데이터를 처리하고 중복을 제거하고 데이터 일관성 보장 +∙데이터 세트를 학습, 검증 및 테스트 세트로 분할함 + +## 3. 모델 개발 + +AI 모델을 구축하고, 학습하여 +성능 평가를 통해 필요한 지표를 +충족 +∙적절한 기술(예: 머신 러닝, 딥 러닝, 자연어 처리), 알고리즘 +(예: 의사 결정 트리, 신경망, SVM 등)과 모델 아키텍처 선택 +∙준비된 데이터를 사용하여 모델 학습, 하이퍼파라미터 조정 +∙모델을 검증 또는 보이지 않는 테스트 데이터 세트에서 테스 +트하여 정확도와 견고성을 확인함 + +## 4. 모델 배포 + +학습된 AI 모델을 실제 +애플리케이션에서 예측할 수 +있는 프로덕션 환경에 통합 +∙클라우드 서비스, 에지 장치 또는 내부 서버 내에서 모델을 +패키징하여 배포 +∙모델이 실시간 또는 일괄 모드에서 다른 시스템이나 서비스와 +상호 작용할 수 있는지 확인 + +## 5. 모니터링 및 + +유지보수 +배포된 모델의 성능을 +지속적으로 모니터링하고 시간이 +지남에 따라 유지 관리 +∙시간 경과에 따른 모델 성능 추적 +∙배포 후에 나타나는 보안취약성을 감지하고 완화함 +∙모델 및 기반 인프라에 대한 업데이트 및 패치를 구현 + +## 6. 파기 + +더 이상 유용하지 않거나 +교체해야 할 때 AI 모델을 +안전하게 폐기 +∙모델을 폐기하기 전에 중요한 데이터와 로그를 백업 +∙잔여 데이터나 지적 재산이 유출되지 않도록 함 +∙폐기 사유와 향후 모델을 위해 얻은 교훈을 문서화 +넷째, 예측형 AI(Pred AI)와 생성형 AI(Gen AI)에 맞게 구별하여 검증항목을 제시했다. +●요구사항별 검증항목에서 예측형 AI(이하, Pred AI)와 생성형 AI(Gen AI)를 구별하여 제시하였 +다. 예측형 AI(Pred AI)와 생성형 AI(이하, Gen AI)는 두 기술의 목적, 작동 방식, 위험 요소가 +서로 다를 수 있으므로, 각 기술의 특성과 관련된 위협을 명확히 이해하고 이에 적합한 보안 대책 +을 수립하는 것이 중요하다. 따라서 본 「인공지능(AI) 보안 안내서」에서는 이를 구별하여 AI 개발 +자와 AI 서비스 제공자 대상 보안요구사항과 검증항목을 제시하였다. +- Pred AI는 과거 및 현재 데이터를 사용하여 패턴을 식별하고 해당 정보를 기반으로 추론한다. +이는 주로 통계 알고리즘과 ML(기계학습)에 사용한다. 반면에 Gen AI는 한 단계 더 나아가 딥 +러닝을 사용하여 학습된 데이터를 기반으로 새로운 콘텐츠를 생성한다. +- 이러한 기술적 특성으로 인해 데이터 관련 문제라 하더라도 위험 요소가 서로 다를 수 있다. 예 +를 들어 Pred AI는 정확한 예측을 지원할 수 있도록 고품질 데이터와 라벨링이 필요할 것이고, +Gen AI는 모델의 학습 기반이 된 데이터를 제공하는 오픈소스 모델을 안전하게 사용하는 것에 +초점을 맞추는 것이 중요하므로 이에 맞는 보안 검증항목이 필요하다. + + +![이미지 22-0](images/p0022_img0.png) + + +![이미지 22-1](images/p0022_img1.png) + + +![이미지 22-2](images/p0022_img2.png) + + +![이미지 22-3](images/p0022_img3.png) + + +![이미지 22-4](images/p0022_img4.png) + + +--- + + +## 제1장 + +개요 +- 따라서 개발자나 서비스 제공자 등은 발생한 위험이 어떠한 AI 유형과 관련이 있는지 사전에 파 +악하는 것이 매우 중요하고, 이를 반영한 검증항목이 필요할 것으로 예측된다. 이에 본 「인공지 +능(AI) 보안 안내서」에서는 요구사항 및 검증항목 별로 이를 구분하여 제시하였다. 예측형 AI와 +생성형 AI에 따라 구별하여 점검하면, 각 기술에 필요한 보안 조치를 적절하게 파악하고 자원을 +효율적으로 분배할 수 있어, 과도하거나 불필요한 보안 비용을 줄일 수 있을 것으로 기대된다. + + +![이미지 23-0](images/p0023_img0.png) + + +![이미지 23-1](images/p0023_img1.png) + + +![이미지 23-2](images/p0023_img2.png) + + +![이미지 23-3](images/p0023_img3.png) + + +--- + + + +--- + +AI 개발자를 위한 +보안 안내서 + + +![이미지 25-0](images/p0025_img0.png) + + +--- + +개요 +개발자 대상 「인공지능(AI) 보안 안내서」의 특징 +●AI에 대한 공격 스펙트럼은 넓고 빠르게 진행되고 있으며, 설계 및 구현에서 학습 및 테스트, 실제 +배포 및 파기에 이르기까지 라이프사이클의 모든 단계를 포함하고 있다. 따라서 개발자 대상 「인공 +지능(AI) 보안 안내서」도 생명주기에 따라 6개의 섹션(계획 및 설계 → 데이터 수집 및 준비 → 모 +델 개발 → 모델 배포 → 모니터링 및 유지보수 → 파기)으로 구성하였다. 특히 모델 파기 시 보 +안 사항은 다른 가이드라인에서는 없는 내용으로 본 「인공지능(AI) 보안 안내서」에서 이를 추가하 +였다. +AI 보안 안내서 생명주기 + +## 1. 계획 및 설계 + + +## 2. 데이터 수집 및 준비 + + +## 3. 모델 개발(학습/모델링/검증) + + +## 4. 모델 배포 + + +## 5. 모니터링 및 유지보수 + + +## 6. 파기 + +●AI 모델의 크기가 계속 커짐에 따라 많은 기업에서 직접 사용하거나 새로운 데이터 세트로 미세 +조정하여 다양한 작업을 수행할 수 있는 사전 학습된 모델에 의존하는 경향이 커지고 있다. 그런데 +이는 공격자가 모델 가용성을 손상시키거나 악성코드를 삽입하여 사전 학습된 모델을 악의적으로 +수정할 수 있는 더 큰 기회를 제공해 주기도 한다. 따라서 「인공지능(AI) 보안 안내서」에서는 개발 +자들이 참고할 수 있도록 ‘오픈소스 라이브러리 보안’에 대한 요구사항 및 검증항목을 반영하였다. +●생성형 AI와 검색 증강 생성(RAG: Retrieval-Augmented Generation) 기반의 LLM 도입이 증가하 +면서, 기업에서는 업무 효율성 향상, 창의성 증진, 고객 만족도 향상 등 다양한 비즈니스 혁신이 이루어 +지고 있다. 이처럼 LLM 기술이 활발하게 사용되고 있지만 동시에 고유한 보안 위협에 노출될 가능성을 +내포하고 있다. 「인공지능(AI) 보안 안내서」는 개발자들에게 보안 관점에서 도움을 주고자 ‘LLM 보안’ +에 대한 요구사항 및 검증항목을 추가하였다. 이를 활용하여 개발자는 LLM의 안정성, 데이터 보호, 사 +용자 신뢰성을 유지하고, 적절한 방어 조치를 통해 비즈니스 지속성을 확보할 수 있을 것으로 기대된다. + + +![이미지 26-0](images/p0026_img0.png) + + +![이미지 26-1](images/p0026_img1.png) + + +![이미지 26-2](images/p0026_img2.png) + + +![이미지 26-3](images/p0026_img3.png) + + +![이미지 26-4](images/p0026_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +17 +개발자 대상 「인공지능(AI) 보안 안내서」의 활용 방안 +●「인공지능(AI) 보안 안내서」는 AI 제품 및 시스템 개발 현장에서 보안(Security) 관련 공격을 받거 +나 받을 우려가 있는 경우 데이터 과학자, 모델 개발자 등이 실제로 취해야 할 조치 사항으로 활용할 +수 있다. +●「인공지능(AI) 보안 안내서」의 요구사항 및 검증항목 점검주체는 조직의 구성원 개인을 의미하는 +경우도 있으나, 조직의 부서(예컨대, 개발팀) 내지 조직 자체(예컨대, AI 소프트웨어 개발회사)를 +가리키는 경우도 있다. 예를 들어, 모델 학습을 진행하는 환경이 안전하게 보안조치 되어 있는지 +여부를 파악하기 위해서는 물리적 보안 외에도 방화벽・VPN 등 네트워크 보안도 함께 봐야 한 +다.(3.1.1. 참고) 이 경우 해당 보호조치는 개발자 개인이 아니라 전사적 차원에서 수행해야 할 업 +무이다. 반면에 개발자는 직무 관련 교육을 연간 100시간 이상 받아야 한다면 이 업무는 개발자 +개인이 1차적인 수행주체가 된다. 「인공지능(AI) 보안 안내서」에서는 요구사항 및 검증항목에 대한 +개인과 조직의 역할을 분명하게 인식할 수 있도록 해당 항목의 이행주체를 명시하였다. +●다만, 본 안내서는 대외적으로 법적 효력을 가지는 것이 아니므로 본문의 기술 방식(‘~해야 한다.’ +‘필수적이다’ 등)에도 불구하고 참고로만 활용하기 바란다. +안내서 작성 과정 및 참고 자료 +●2024년 6월부터 「AI 보안 정책 포럼」을 구성하여 운영하였고, 그 외에도 다양한 의견을 수렴하는 +과정을 거쳤다. 초안 작성한 후, 학계 및 산업계 전문가 등의 의견수렴을 거쳐 최종본을 마련하였다. +●미국, 유럽, 일본 등 해외기관에서 발표한 원칙 및 프레임워크 등을 참조하였고, 국내자료로는 과 +학기술정보통신부/한국정보통신기술협회(TTA)에서 발간한 「신뢰할 수 있는 인공지능 개발 안내서」, +국가정보원/국가보안기술연구소에서 발간한 「챗GPT 등 생성형 AI 활용 보안 가이드라인」, 금융보 +안원에서 발간한 「금융분야 AI 보안 가이드라인」 등도 참고하였다. +※ 주요 해외 참고자료 +주관 +명칭 +특징 +(미국) NIST +AI Risk Management Framework(AI RMF 1.0), 2023.1 +글로벌 표준 +(미국) ISO/IEC +ISO/IEC 42001 +인증 +ISO/IEC 23894 +AI에 특화 +(미국) OWASP +OWASP Top 10 for LLM Applications (Ver 1.1) +개발 보안 +(미국) Google +Google SAIF +개발 보안 +EU +EU AI ACT +규제 +OECD +OECD AI 원칙 +정책 권고 +(싱가폴) 정보통신부 +Model AI Governance Framework, 2020 +생성형 AI +(영국) NCSC +Guidelines for secure AI system development, 2023.11 +가이드라인 +(일본) 총무성·경제산업성 +AI 사업자 가이드라인(제1.0판), 2024. 6 + + +![이미지 27-0](images/p0027_img0.png) + + +![이미지 27-1](images/p0027_img1.png) + + +![이미지 27-2](images/p0027_img2.png) + + +![이미지 27-3](images/p0027_img3.png) + + +![이미지 27-4](images/p0027_img4.png) + + +--- + +AI 개발자 대상 보안 프레임워크 +AI 시스템 보안(Security) 목표 +AI 시스템 보안(Security) 목표는 AI 기술을 안전하게 보호하고 신뢰할 수 있는 방식으로 운영되도록 +보장하는 데 있다. 이 목표는 AI 시스템이 외부 공격, 데이터 유출, 시스템 오작동 등 다양한 보안 위 +협에 대응할 수 있도록 설계되고 유지되는 것을 의미한다. +●AI 시스템에서 보안의 주요 목표는 전통적인 정보보호의 3대 요소인 기밀성(Confidentiality), 무 +결성(Integrity), 가용성(Availability)을 기본으로 하고, AI 모델·시스템 등 개발 생애 주기에서의 +책임성 확보 및 검증을 위한 Accountability(책임 추적성)를 추가하였다. +그림 2-1 AI 개발자 대상 보안 프레임워크(Security Framework) + + +![이미지 28-0](images/p0028_img0.png) + + +![이미지 28-1](images/p0028_img1.png) + + +![이미지 28-2](images/p0028_img2.png) + + +![이미지 28-3](images/p0028_img3.png) + + +![이미지 28-4](images/p0028_img4.png) + + +![이미지 28-5](images/p0028_img5.png) + + +![이미지 28-6](images/p0028_img6.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +19 +1.1 +가용성(Availability) +가용성(Availability)은 AI 보안 전략에서 중요한 요소 중 하나로, 서비스와 데이터가 항상 접근 가능하 +고 사용할 수 있는 상태를 유지하는 것을 목표로 한다. 이는 AI 시스템의 연속성과 신뢰성을 보장하기 +위해 필수적이다. +1.2 +기밀성(Confidentiality) +기밀성(Confidentiality)은 AI 보안 전략에서 중요한 요소 중 하나로, 정보가 승인된 사람만 접근할 수 +있도록 보호하는 것을 목표로 한다. 이는 데이터 유출과 같은 보안 사고를 방지하고, 민감한 정보가 보 +호되도록 하는 데 필수적이다. +1.3 +무결성(Integrity) +무결성(Integrity)은 AI 보안 전략의 중요한 요소 중 하나로, 데이터와 시스템이 허가되지 않은 변경 +없이 정확하고 일관된 상태를 유지하는 것을 목표로 한다. 이는 AI 시스템이 신뢰할 수 있는 결과를 +제공하고, 데이터의 변조나 손상을 방지하기 위해 필수적이다. +1.4 +책임 추적성(Accountability) +책임 추적성(Accountability)은 AI 보안 전략에서 중요한 요소 중 하나로, AI 시스템의 행동과 결정에 +대한 책임을 명확히 하고, 문제가 발생했을 때 원인을 추적할 수 있도록 하는 것을 목표로 한다. 이는 +AI 시스템의 투명성을 높이고, 신뢰성을 보장하며, 윤리적이고 법적 기준을 준수하기 위해 필수적이다. +AI 시스템 보안을 위한 거버넌스(Governance) +AI 시스템 보안을 위한 조직 내 규정과 정책, 그리고 거버넌스 체계는 AI 모델이 조직에서 안전하게 +운영되고, 보안 리스크를 관리하는 데 중요한 역할을 한다. 효과적인 AI 보안 거버넌스는 기술, 사람, +프로세스를 통합하여 AI 시스템의 무결성, 기밀성, 가용성을 유지하고, 법적 규제와 윤리적 기준을 준 +수하도록 설계되어야 한다. 이를 위해 조직은 명확한 정책과 절차를 수립하고, 보안 거버넌스를 통해 +AI 시스템이 지속적으로 안전하게 운영될 수 있도록 관리해야 한다. AI 보안 거버넌스의 핵심 요소는 +정책(Policy), 규정(Guidelines), 절차(Processes) 등을 포함한다. + + +![이미지 29-0](images/p0029_img0.png) + + +![이미지 29-1](images/p0029_img1.png) + + +![이미지 29-2](images/p0029_img2.png) + + +![이미지 29-3](images/p0029_img3.png) + + +![이미지 29-4](images/p0029_img4.png) + + +![이미지 29-5](images/p0029_img5.png) + + +--- + +2.1 +정책(Policy) +●AI 보안 정책 수립: 조직은 AI 시스템을 안전하게 운영하기 위한 포괄적인 보안 정책을 수립해야 +한다. 정책에는 AI 시스템의 설계, 개발, 배포 및 운영에 필요한 보안 기준과 절차를 명확히 정의 +해야 한다. +●접근 권한 관리 정책: AI 시스템에 대한 접근 권한을 관리하기 위한 정책을 수립하여, 민감한 데이 +터와 시스템에 대한 무단 접근을 방지해야 한다. 역할 기반 접근 제어(RBAC)를 통해 AI 시스템에 +접근할 수 있는 사용자와 권한을 제한해야 한다. +●데이터 보호 정책: AI 시스템이 다루는 데이터의 기밀성과 무결성을 보장하기 위해 데이터 암호화, +데이터 저장소 보호에 대한 규정을 마련해야 한다. +2.2 +규정(Guidelines) +●AI 모델 관리 규정: AI 모델의 학습, 배포 및 사용에 대한 구체적인 지침을 제공해야 한다. 이 규 +정은 AI 모델의 검증 및 테스트 절차, 안전한 데이터 사용, 모델 업데이트 및 폐기 절차를 포함 +한다. +●AI 시스템 모니터링 규정: AI 시스템이 보안 위협에 대응할 수 있도록 실시간 모니터링 및 로그 +분석 규정을 마련해야 한다. 이를 통해 시스템 내 이상 활동이나 보안 위협을 조기에 감지하고 대 +응할 수 있어야 한다. +●리스크 관리 규정: AI 시스템에 내재된 보안 리스크를 식별하고 관리하기 위한 규정을 수립해야 한 +다. 이는 잠재적인 보안 위협을 사전에 평가하고 완화하는 절차를 포함한다. +2.3 +절차(Process) +●AI 보안 평가 절차: AI 시스템 개발 초기부터 보안 평가 절차를 구축하여, 보안 위험을 사전에 감 +지하고 해결해야 한다. 이 절차는 보안 취약점 분석, 침투 테스트 및 코드 리뷰를 포함할 수 있다. +●AI 시스템 업데이트 및 패치 절차: AI 시스템과 모델이 최신 보안 위협에 대응할 수 있도록 정기적 +인 업데이트 및 패치 절차를 수립해야 한다. 이 절차는 새로운 보안 위협에 대한 대응 방안을 포함 +하며, 보안 업데이트가 원활하게 이루어지도록 해야 한다. +●비상 대응 계획: 보안 사고가 발생했을 때 즉각적으로 대응할 수 있는 비상 대응 계획을 마련해야 +한다. 여기에는 사고 보고, 대응 팀 구성, 시스템 복구 및 데이터 손실 방지 절차가 포함된다. + + +![이미지 30-0](images/p0030_img0.png) + + +![이미지 30-1](images/p0030_img1.png) + + +![이미지 30-2](images/p0030_img2.png) + + +![이미지 30-3](images/p0030_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +21 +AI 시스템 보안을 위한 위험 관리(Risk Management) +위험 관리(Risk Management)는 AI를 활용한 서비스에서 필수적인 요소로, AI 시스템이 직면할 수 +있는 잠재적 위험을 식별하고, 이를 효과적으로 관리하고 대응하기 위한 체계적인 접근을 포함한다. +위험 관리는 위험 분석, 위험 감지, 사고 대응의 세 가지 주요 단계로 나눌 수 있다. +3.1 +위험 분석(Risk Analysis) +●위험 분석(Risk Analysis)은 AI 시스템이 직면할 수 있는 잠재적 위험을 식별하고, 그 심각성과 +발생 가능성을 평가하는 과정이다. 이 과정은 위험 관리의 첫 단계로, 체계적인 접근을 통해 위험 +요소를 사전에 파악하고 대응 전략을 마련하는 것을 목표로 한다. +●주요 활동 +- 위험 식별 (Risk Identification): AI 시스템과 관련된 모든 잠재적 위험을 식별하고, 기술적・운 +영적・윤리적・법적 측면에서 발생할 수 있는 다양한 위험을 고려한다. +데이터 손실, 시스템 오류, 보안 침해, 윤리적 문제 등 +- 위험 평가 (Risk Assessment): 식별된 위험의 심각성과 발생 가능성을 평가하고, 각 위험 요 +소의 영향을 분석하여 우선순위를 정한다. +- 위험 대응 계획 (Risk Mitigation Plan) 수립: 평가된 위험에 대한 대응 계획을 수립하고, 위험 +을 줄이기 위한 예방 조치와 대응 전략을 마련한다. +보안 강화, 데이터 백업, 긴급 대응 절차 마련 등 +3.2 +위험 감지(Risk Detection) +●위험 감지(Risk Detection)는 AI 시스템의 운영 중 발생하는 이상 징후나 위험 요소를 실시간으 +로 감지하고, 이를 신속하게 보고하는 과정이다. 이는 위험 발생 시 신속한 대응을 위해 중요한 단 +계이다. +●주요 활동 +- 모니터링 시스템 구축 (Establish Monitoring Systems) : AI 시스템의 성능과 안전성을 실시 +간으로 모니터링하는 시스템을 구축한다. +네트워크 트래픽 모니터링, 시스템 로그 분석, 사용자 활동 추적 등 + + +![이미지 31-0](images/p0031_img0.png) + + +![이미지 31-1](images/p0031_img1.png) + + +![이미지 31-2](images/p0031_img2.png) + + +![이미지 31-3](images/p0031_img3.png) + + +![이미지 31-4](images/p0031_img4.png) + + +![이미지 31-5](images/p0031_img5.png) + + +![이미지 31-6](images/p0031_img6.png) + + +--- + +- 이상 징후 탐지 (Anomaly Detection) : 정상적인 패턴에서 벗어난 이상 징후를 자동으로 감지 +할 수 있는 알고리즘과 기술을 도입한다. +머신러닝 기반 이상 탐지 알고리즘, 실시간 경고 시스템 등 +- 자동화된 경고 (Automated Alerts) : 이상 징후나 위험 요소 감지 시 즉각적으로 관련 담당자 +에게 경고를 보내는 자동화된 시스템을 운영한다. +이메일 알림, SMS 경고, 대시보드 알림 등 +- 정기적 검토 (Regular Reviews) : 모니터링 결과와 경고 로그를 정기적으로 검토하여, 새로운 +위험 요소나 패턴을 식별하고 대응 방안을 업데이트한다. +주간/월간 보고서 작성, 경고 로그 분석 회의 등 +3.3 +사고 대응(Incident Handling) +●사고 대응(Incident Handling)은 실제로 위험이 발생했을 때 이를 효과적으로 대응하고 해결하는 +과정이다. 이는 신속한 대응과 문제 해결을 통해 피해를 최소화하고, 재발 방지를 위한 교훈을 도 +출하는 것을 목표로 한다. +●주요 활동 +- 사고 대응 절차 수립 (Establish Incident Response Procedures) : 사고 발생 시 신속하고 +체계적으로 대응할 수 있는 절차와 계획을 마련한다. +사고 대응 매뉴얼 작성, 비상 연락망 구축, 역할 및 책임 정의 등 +- 사고 대응 팀 구성 (Form Incident Response Team) : 사고 발생 시 대응할 전담 팀을 구성 +하고, 각 팀원의 역할과 책임을 명확히 한다. +보안 담당자, 데이터 과학자, IT 지원팀 등으로 구성 +- 초기 대응 및 완화 (Initial Response and Mitigation) : 사고 발생 시 초기 대응을 통해 피해 +를 최소화하고, 추가 피해를 방지하기 위한 조치를 취한다. +시스템 격리, 데이터 복구, 보안 패치 적용 등 +- 사고 분석 및 보고 (Incident Analysis and Reporting) : 사고의 원인을 분석하고, 사고 발생 +과정과 대응 결과를 상세히 기록하여 보고한다. +사고 원인 분석 보고서 작성, 대응 결과 리뷰 등 +- 사후 조치 및 재발 방지 (Post-Incident Actions and Prevention) : 사고 종료 후 사후 조치 +를 취하고, 재발 방지를 위한 교훈을 도출하여 시스템과 절차를 개선한다. +시스템 업데이트, 보안 정책 강화, 교육 프로그램 운영 등 + + +![이미지 32-0](images/p0032_img0.png) + + +![이미지 32-1](images/p0032_img1.png) + + +![이미지 32-2](images/p0032_img2.png) + + +![이미지 32-3](images/p0032_img3.png) + + +![이미지 32-4](images/p0032_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +23 +●예시 시나리오 +- AI 모델 오류 사고 대응 +▸위험 분석: AI 모델의 예측 오류 가능성을 평가하고, 모델 검증 및 테스트 계획 수립 +▸위험 감지: AI 모델의 실시간 성능 모니터링 시스템 도입, 예측 오류 발생 시 경고 시스템 운영 +▸사고 대응: AI 모델의 예측 오류 발생 시 즉시 모델 사용 중지 및 수정 작업, 오류 원인 분석 +및 보고, 수정된 모델의 검증 및 테스트 후 재배포, 재발 방지를 위한 모델 검증 절차 강화 + + +![이미지 33-0](images/p0033_img0.png) + + +![이미지 33-1](images/p0033_img1.png) + + +![이미지 33-2](images/p0033_img2.png) + + +![이미지 33-3](images/p0033_img3.png) + + +--- + +AI 개발자를 위한 요구사항 및 검증항목 +체크리스트 요약 +생명주기 +요구사항 및 체크리스트 +개발자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +1 +계획 및 +설계 +(AI 개발자, AI 서비스 제공자 공통사항) 거버넌스 및 위험관리 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +○ +○ +○ + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +○ +○ +○ + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +○ +○ +○ +1.2 +AI 모델개발에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 위험요소를 +분석・도출하고 있는가? +○ +○ +○ + +#### 1.2.2 + +AI 시스템에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +○ +○ +○ + +#### 1.2.3 + +AI 시스템에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +○ +○ +○ +2 +데이터 수집 +및 준비 +2.1 +데이터 수집 및 전처리 + +#### 2.1.1 + +데이터 수집 시 사용되는 네트워크 프로토콜이 충분한 보안 기능을 제공하고 있 +는가? +○ +○ +○ + +#### 2.1.2 + +수집된 데이터의 보관 및 삭제 절차가 명확하게 정의되어 있는가? +○ +○ +○ +○ + +#### 2.1.3 + +전처리 과정에서 중요 데이터를 보호하기 위해 암호화 기술을 사용하고 있는가? +○ +○ +○ +2.2 +데이터 무결성 검증 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.2.1 + +데이터 처리 과정에서 데이터 무결성을 검증하고 있는가? +○ +○ +○ + +#### 2.2.2 + +데이터에 접근할 수 있는 권한을 제한하고 있는가? +○ +○ +○ +○ +2.3 +데이터 공격에 대한 방어 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.3.1 + +데이터 중독(poisoning) 공격에 대한 방어 대책을 마련하고 있는가? +○ +○ +○ + +#### 2.3.2 + +데이터 회피(evasion) 공격에 대한 방어 대책을 마련하고 있는가? +○ +○ +○ + +#### 2.3.3 + +데이터 유출・변조 공격을 방지하기 위한 방안을 마련하고 있는가? +○ +○ +○ + + +![이미지 34-0](images/p0034_img0.png) + + +![이미지 34-1](images/p0034_img1.png) + + +![이미지 34-2](images/p0034_img2.png) + + +![이미지 34-3](images/p0034_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +25 +생명주기 +요구사항 및 체크리스트 +개발자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +3 +모델개발 +(학습/ +모델링/ +검증) +3.1 +학습/검증 환경에 대한 보안(Secure Training Environment) + +#### 3.1.1 + +모델 학습을 진행하는 환경이 안전하게 보안조치 되어 있는가? +○ +○ +○ +○ + +#### 3.1.2 + +학습 또는 검증 단계에서 악의적인 사용자가 허위 데이터를 삽입할 가능성을 차단 +하고 있는가? +○ +○ +○ + +#### 3.1.3 + +연합 학습(Federated Learning)에 참여하는 장치 중 악의적인 장치가 있는지 +검증하고 있는가? +○ +○ +○ +3.2 +모델 공격에 대한 방어 + +#### 3.2.1 + +AI Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +○ +○ + +#### 3.2.2 + +적대적 예제 공격 (Adversarial Example Attacks)에 대한 방어 방안을 수립 +하고 있는가? +○ +○ +○ + +#### 3.2.3 + +모델 회피 공격(model evasion attack)에 대한 방어 방안을 수립하고 있는가? +○ +○ +○ + +#### 3.2.4 + +모델 오염 공격(Model Poisoning Attack)에 대한 방어 방안을 수립하고 +있는가? +○ +○ +○ + +#### 3.2.5 + +모델 추출 공격(model extraction attack) 및 리버스 엔지니어링에 대한 방어 +방안을 수립하고 있는가? +○ +○ +○ + +#### 3.2.6 + +반복적인 질의에 대한 방어 방안을 수립하고 있는가? +○ +○ + +#### 3.2.7 + +기계 학습을 활용한 모델 공격에 대해 능동적으로 방어하고 있는가? +○ +○ +○ +3.3 +오픈소스 라이브러리 보안 + +#### 3.3.1 + +오픈소스 라이브러리의 업데이트 및 취약점을 관리하고 있는가? +○ +○ +○ + +#### 3.3.2 + +오픈소스 라이브러리의 소스 코드를 직접 검토하거나 사용에 대한 보안 문제를 +검증하고 있는가? +○ +○ +○ + +#### 3.3.3 오픈소스 라이브러리를 실행할 때 잠재적인 보안 위험을 제거하기 위해 격리된 + +환경을 이용하고 있는가? +○ +○ +○ +3.4 +LLM 보안 + +#### 3.4.1 + +LLM 애플리케이션 공격에 대한 예방책을 마련하고 있는가? +○ +○ + +#### 3.4.2 LLM의 모델 서비스 거부(Model Denial of Service) 공격에 대한 방어 방안을 + +수립하고 있는가? +○ +○ + +#### 3.4.3 LLM의 API 보안을 위한 방안을 수립하고 있는가? + +○ +○ + +#### 3.4.4 LLM의 인터페이스 공격에 대한 예방책을 마련하고 있는가? + +○ +○ + +#### 3.4.5 개발 환경에서 LLM을 사용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 + +코딩 관행과 지침을 수립하고 있는가? +○ +○ +○ + +#### 3.4.6 LLM 출력결과를 정기적으로 모니터링하고 검토하고 있는가? + +○ +○ + +#### 3.4.7 + +LLM의 Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +○ +○ + +#### 3.4.8 LLM의 벡터 및 임베딩 취약점에 대한 방어 방안을 수립하고 있는가? + +○ +○ + + +![이미지 35-0](images/p0035_img0.png) + + +![이미지 35-1](images/p0035_img1.png) + + +![이미지 35-2](images/p0035_img2.png) + + +![이미지 35-3](images/p0035_img3.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +개발자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +4 +모델 배포 +4.1 +모델파일 및 배포 환경 보호 + +#### 4.1.1 + +모델을 배포하기 전에 코드 및 모델을 스캔하고, 자동화된 취약점 분석을 하고 있 +는가? +○ +○ +○ + +#### 4.1.2 + +모델파일을 암호화하여 저장하고 전송 중에도 안전하게 보호하고 있는가? +○ +○ +○ + +#### 4.1.3 + +AI 모델이 배포되는 인프라(클라우드, 서버 등) 환경이 충분한 보안시스템을 갖추 +고 있는가? +○ +○ +○ +4.2 +API 및 인터페이스 보안 + +#### 4.2.1 + +AI 모델이 배포된 후, API를 통해 외부 시스템과 상호작용하는 경우, 충분한 보안 +조치 기능을 갖추고 있는가? +○ +○ +○ +○ + +#### 4.2.2 + +배포된 AI 모델이 실시간으로 데이터를 수신하고 이를 처리할 때, 중간자 공격 +(Man-in-the-Middle Attack)에 대응하고 있는가? +○ +○ +○ + +#### 4.2.3 + +AI 모델의 API에 대한 접근 권한을 제한하고, 강한 인증 메커니즘을 사용해 불법 +접근을 방지하고 있는가? +○ +○ +○ + +#### 4.2.4 API 사용자는 필요한 권한만 부여받도록 최소 권한(Least Privilege) 원칙을 적 + +용하고 있는가? +○ +○ +○ + +#### 4.2.5 + +AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치만 연결 +되도록 하고 있는가? +○ +○ +○ +5 +모니터링 및 +유지보수 +5.1 +실시간 모니터링 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 5.1.1 + +모델의 입력 데이터, 출력 결과 등을 실시간으로 모니터링하여 비정상적인 동작을 +탐지하고 있는가? +○ +○ +○ + +#### 5.1.2 + +모델 응답 시간, 사용 패턴을 추적하고 분석하여 보안에 의심스러운 행동을 탐지하 +고 있는가? +○ +○ +○ + +#### 5.1.3 + +AI 모델이 동작하는 서버 및 네트워크의 트래픽을 모니터링하여 비정상적인 요청 +을 탐지하고 있는가? +○ +○ +○ + +#### 5.1.4 + +API 호출, 입력/출력 등 요청로그를 정기적으로 분석하여 보안에 의심스러운 동 +작을 탐지하고 있는가? +○ +○ +○ + +#### 5.1.5 + +AI 모델과 배포 환경에 대해 모의 해킹을 수행하여 잠재적인 보안 취약점을 탐지하 +고 수정하고 있는가? +○ +○ +○ +5.2 +보안 패치 및 업데이트 관리 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 5.2.1 + +모델에 대한 보안 패치 및 업데이트 관리 프로세스를 구축하고 있는가? +○ +○ +○ + +#### 5.2.2 + +모델 배포 후 모델 및 라이브러리의 업데이트가 정기적으로 이루어지고 있는가? +○ +○ +○ + +#### 5.2.3 + +운영 체제, 라이브러리, 프레임워크의 보안 패치를 운영 환경에 적용하기 전에 스 +테이징 환경에서 패치를 테스트하고 있는가? +○ +○ +○ +6 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 6.1.1 + +AI 모델이 더 이상 사용되지 않으면, 모델 파일을 완전히 삭제하고 복구할 수 없도 +록 처리하고 있는가? +○ +○ +○ + +#### 6.1.2 + +AI 모델에서 사용 중이던 데이터가 시스템을 폐기하거나 교체할 때 안전하게 삭제 +되고 있는가? +○ +○ +○ + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면, 해당 모델과 연결된 API나 인터페이스를 비 +활성화하여 외부 접근을 차단하고 있는가? +○ +○ +○ + + +![이미지 36-0](images/p0036_img0.png) + + +![이미지 36-1](images/p0036_img1.png) + + +![이미지 36-2](images/p0036_img2.png) + + +![이미지 36-3](images/p0036_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +27 +계획 및 설계 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 +AI 모델을 개발하는 기업과 AI 서비스를 제공하는 기업에서는 AI 보안(Security) 거버넌스 체계 +를 구축하기 위해 AI 보안 정책 및 절차 정의, AI 보안 조직 및 역할 정의 등과 같은 AI 보안 +거버넌스 프레임워크를 수립하고, AI 보안 위험 분석 및 관리 체계 등을 구축해야 함 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +AI 시스템은 보안와 관련된 문제가 발생할 수 있다는 위험 요소가 존재하므로 다양한 위험 요소 +를 인식하고 관련 규정을 마련하여 이를 실행할 수 있도록 관리 및 감독하는 조직이 필요함 +AI 보안(Security) 거버넌스를 위한 조직을 구성하기 위해서는 조직 내 역할과 책임(Roles and +Responsibilities)도 명확하게 정의해야 함 +- 역할 분담: 보안 정책 수립, 기술 구현, 규제 준수 등 각 부서의 책임을 명확히 정의 +- 독립성: 보안 거버넌스 조직은 개발팀과 독립적으로 운영되어 객관성을 유지해야 함 +- 리더십 확보: 보안 관련 결정을 내릴 수 있는 충분한 권한을 부여 +(예시) 명확한 역할과 책임 +- CISO(Chief Information Security Officer): 보안 전략 및 거버넌스의 총괄 책임자로서 정 +책 수립과 이행 감독 +- 데이터 보안팀: 데이터 암호화, 접근 제어, 민감 데이터 보호 관리 +- AI 개발팀과 협업: AI 모델 개발 단계부터 보안 요소를 반영하도록 보안 관점에서 협업 필요 +- 규제 준수 담당자: 글로벌 및 로컬 보안 규제 등에 대한 모니터링 및 준수 확인 + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +• AI 모델을 개발하는 기업과 AI 서비스를 제공하는 기업이 AI 보안(Security) 거버넌스 정책 수립 +을 위해서는 다음과 같은 내용을 수행해야 함 +- AI 보안 원칙 및 목표 정의 +󰋻AI 모델 및 서비스의 보안, 데이터 무결성, 서비스 신뢰성을 보장하기 위한 핵심 원칙 설정 +󰋻AI 보안 비전과 목표를 명확히 수립 +- AI 보안 정책 문서화 및 실행 +󰋻AI 보안 가이드라인 작성(데이터 보호, 모델 보안, API 보안, 서비스 보호 등) +󰋻보안 거버넌스 조직 구성(CISO, AI 보안팀, 데이터 보호 책임자 등 역할 정의) +󰋻AI SW, HW 공급망 보안 관리 체계 구축(AI 모델 알고리즘 정보, 소스코드 정보, AI 칩 +정보, 보안 패치 적용 및 이력 등) + + +![이미지 37-0](images/p0037_img0.png) + + +![이미지 37-1](images/p0037_img1.png) + + +![이미지 37-2](images/p0037_img2.png) + + +![이미지 37-3](images/p0037_img3.png) + + +![이미지 37-4](images/p0037_img4.png) + + +![이미지 37-5](images/p0037_img5.png) + + +--- + +- AI 보안 규제 및 컴플라이언스 준수 +󰋻GDPR, CCPA, EU AI Act, NIST AI RMF, ISO/IEC 27001 등 글로벌 규제 및 표준 준수 +󰋻법적 리스크 평가 및 보안 정책과의 정합성 검토 +• AI 모델을 개발하는 기업과 AI 서비스를 제공하는 기업은 AI 보안(Security) 거버넌스를 위해 AI +보안 감사 및 지속적인 보안 거버넌스 운영 체계도 갖춰야 함 +- AI 보안 거버넌스 체계 지속 점검 및 개선 +󰋻정기적인 AI 보안 감사(Security Audit) 및 리스크 평가 수행 +󰋻AI 보안 정책 및 절차의 지속적인 개선 및 업데이트 +- AI 보안 교육 및 인식 제고 +󰋻개발자 및 운영자를 위한 AI 보안 교육 프로그램 운영 +󰋻AI 보안 사고 사례 공유 및 대응 훈련 수행 +- AI 보안 사고 대응 및 위기관리 프로세스 구축 +󰋻AI 보안 사고 대응 계획 수립 및 시뮬레이션 테스트 진행 +󰋻보안 사고 발생 시 보고 및 대응 절차 운영 +AI 거버넌스 체계 구축 관련 요구사항 예시 +∙AI와 관련된 법률 및 규제 요구 사항을 이해하고 관리하며 문서화함 +∙조직의 위험 허용 범위를 기반으로 필요한 위험 관리 활동 수준을 결정하기 위한 프로세스, 절차 및 관행 +이 마련되어야 함 +∙위험 관리 프로세스와 그 결과는 조직의 위험 우선 순위에 따라 투명한 정책, 절차 및 기타 통제를 통해 +설정 +∙위험 관리 프로세스와 그 결과에 대한 지속적인 모니터링과 정기 검토가 계획되고, 정기 검토 빈도 결정을 +포함하여 조직의 역할과 책임이 명확하게 정의 +∙위험을 증가시키거나 조직의 신뢰성을 저하시키지 않는 방식으로 AI 시스템을 안전하게 폐기하고 단계적 +으로 폐지하기 위한 프로세스와 절차 마련 +NIST, AI Risk Management Framework 참조 + + +![이미지 38-0](images/p0038_img0.png) + + +![이미지 38-1](images/p0038_img1.png) + + +![이미지 38-2](images/p0038_img2.png) + + +![이미지 38-3](images/p0038_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +29 + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +AI 보안 거버넌스 전문인력(Security Governance Specialists)은 AI 모델 및 서비스의 보안성 +을 보장하고, 보안 정책을 수립하며, 규제 준수를 이행하는 역할을 수행함. 이들의 업무는 크게 +정책 수립, 보안 리스크 분석, 데이터 보호, AI 모델 및 인프라 보안 강화, 법적 준수, 보안 모니 +터링 및 대응으로 나눌 수 있음 +- AI 보안 정책 및 거버넌스 체계 구축 – AI 보안 원칙, 정책, 운영 가이드라인 수립 등 +- AI 보안 리스크 분석 및 위협 모델링 수행 – AI 서비스의 보안 취약점 평가 등 +- 컴플라이언스 및 법적 규제 준수 – GDPR, CCPA, AI 윤리 원칙 준수 등 +- AI 보안 사고 대응 및 위기 관리 운영 – 보안 사고 대응 계획, 보안 로그 모니터링 등 +- AI 보안 교육 및 내부 인식 강화 – AI 보안 교육 제공, 보안 가이드 문서화 등 +AI 모델 보안을 담당하는 전문 인력은 AI 기술과 보안 기술 모두에 대한 깊은 이해를 갖추고 있 +어야 하며, 동시에 윤리적 기준과 법적 규제를 준수하는 능력도 중요함. 기술적・윤리적・관리적 +역량을 통합적으로 갖춘 인력이 기업의 AI 보안 거버넌스 성공의 핵심임 +- 기술적 역량: AI 및 머신러닝 관련 기술, 데이터 보안, 네트워크 및 시스템 보안, 보안 자동화 +이해 등 +- 윤리적 역량: AI 윤리 및 공정성, 규제 및 법적 지식 등 +- 관리적 역량: 위험 관리, 사고 대응, 거버넌스 정책 설계, 협업 능력 등 소프트 스킬 등 +거버넌스 담당자는 AI 시스템 생명주기에 따라 조직이 보안 관련 내부 규정을 준수함을 확인・감 +독해야 함. 또한, 정의된 규정을 실행하고 관리하기 위해 각 담당자에게 관련 교육을 충분히 제공 +해야 함 + + +![이미지 39-0](images/p0039_img0.png) + + +![이미지 39-1](images/p0039_img1.png) + + +![이미지 39-2](images/p0039_img2.png) + + +![이미지 39-3](images/p0039_img3.png) + + +![이미지 39-4](images/p0039_img4.png) + + +--- + +1.2 +AI 모델개발/서비스 제공에 대한 위험관리 계획의 수립AI 개발자, AI 서비스 제공자 공통사항 +• AI 시스템에 대한 보안 측면에서의 위험관리 계획은 모델 도난, 해킹, 기밀 데이터 유출, 서비스 +마비 등의 위협을 방지하기 위해 필수적임. 모델개발/서비스 운영 생명주기에 걸쳐 나타날 수 있는 +위험요소를 분석하고, 지속적인 보안 점검, 접근 통제, 데이터 보호, 모델 무결성 유지 등의 전략 +을 통해 AI 시스템에 대한 위험요소를 제거·완화해야 함 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 +위험요소를 분석・도출하고 있는가? +• AI 모델개발/서비스 제공 생명주기 전반에서 보안 위험 요소를 분석·도출하는 것이 중요한 이유 +는 다음과 같음 +- 데이터 및 모델의 보안 취약점으로 인한 피해 예방 +- AI 모델의 신뢰성과 무결성 유지, AI 서비스의 악용 방지 +- AI 시스템의 안정성과 지속 가능성 확보 +- 개발/서비스 기업의 경제적 손실 방지 및 지속적적인 성장과 경쟁력 확보 +• 따라서 AI 모델개발/서비스 제공 기업에서 보안 위험을 사전에 분석하고 대응 전략을 마련하는 +것은 AI 기술/서비스의 안정성과 지속 가능성을 보장하는 필수적인 과정임 +• AI 모델개발/서비스 제공 생명주기 전반에서 보안 위험 요소를 도출하려면 각 단계별로 발생 가능한 +위협을 분석하고, 보안 정책 및 기술적 대응 방안을 마련하는 것이 필수적임. 이를 위해 보안 테스트, +위협 모델링, 침투 테스트, 지속적인 모니터링 및 AI 보안 거버넌스 구축을 적극적으로 수행해야 함 +예방・대응 필요한 보안 관련 취약점 예시 + +## 1. 데이터와 관련된 취약점 + +- 데이터 무결성 문제: AI 모델이 학습하는 데이터셋이 조작되거나 변조되면, 모델이 왜곡된 결과를 생성할 수 있음 + +## 2. 알고리즘과 모델의 취약점 + +- 모델 탈취: 공격자가 AI 모델에 접근해 모델의 내부 구조와 학습 데이터를 복제하거나 악용할 수 있음 +- 모델 업데이트의 취약점: 지속적으로 업데이트되는 AI 시스템이 악의적인 코드나 데이터를 통해 오염될 위험도 존재할 +수 있음 +- 소스코드 및 라이브러리의 보안 취약점으로 인한 서비스 마비, 데이터 유출 등 보안 위협 발생 우려 +- Prompt Injection, 악의적인 질의, 우회된 질의 등을 악용한 AI 탈옥(AI Jailbreak)으로 인해 AI 행동 유도, 유해한 콘 +텐츠 생성, 범죄 악용 등이 발생할 수 있음 +3. AI 시스템 인프라의 취약점 +- API 및 인터페이스 보안: AI 시스템의 API가 부적절하게 보호되면, 공격자가 시스템을 오용하거나 데이터를 유출할 수 있음 +- AI 시스템, 서비스에 대한 공격(DDoS 등)으로 인한 서비스 장애, 서비스 오류 등이 발생할 수 있음 +• 또한 AI 모델 개발/서비스 제공하는 과정에서 AI와 관련된 SW, HW 등 공급망 보안 관리 체계 +를 구축하고 관리하여야 함. +- AI 모델개발 및 서비스 제공과정에서의 개발, 제조, 장비 증 구매, 배포, 통합 운영 및 유지 보수 +또는 폐기 등 공급망 요소에서 모델과 서비스의 보안 취약점 등을 악용하여 AI 보안 위험이 발 +생할 수 있음 + + +![이미지 40-0](images/p0040_img0.png) + + +![이미지 40-1](images/p0040_img1.png) + + +![이미지 40-2](images/p0040_img2.png) + + +![이미지 40-3](images/p0040_img3.png) + + +![이미지 40-4](images/p0040_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +31 + +#### 1.2.2 + +AI 시스템에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +• 위협 및 위험 평가(TRA: Threat and Risk Assessment)는 시스템에 대한 다양한 위협과 취약 +성을 식별하고 이러한 시스템이 노출되는 위험 수준을 결정하며 적절한 보호 수준을 권장하는 체 +계적인 프로세스임 +- 위협 및 위험 평가를 수행하려면 먼저 시스템의 보안 분류를 결정하는 것이 중요함 +- 보안 분류는 위험을 평가할 때 위협 및 취약성 정보와 함께 사용됨 +• TRA의 목적은 위험을 최소화하면서 기밀성, 무결성 및 가용성 보호를 극대화하는 것이며, 일반 +적으로 TRA에는 다음의 사항이 포함됨; ①기능 요구사항 사양 검토, ②위협 및 취약점 식별, ③ +위험 식별, 분석 및 평가, ④적절한 보안 통제에 대한 권장 사항 +• AI 위험을 다음과 같이 평가함; ①위험 분석 결과를 위험 기준과 비교함, ②위험 처리를 위해 평 +가된 위험의 우선순위를 정함 +• 조직은 AI 위험 평가 프로세스에 대해 문서화된 정보로 관리/유지해야 함 +• (예시) 공격 벡터 식별 +- 공격 표면 매핑: 시스템이 외부와 상호작용하는 지점을 분석하여 공격 가능성을 확인 +▸데이터 입력 및 출력 채널, API 엔드포인트, 모델 업데이트 또는 재훈련 과정 +- 잠재적 위협 목록 작성 +▸데이터 수준 위협: 데이터 오염, 데이터 유출, 적대적 데이터 공격 등 +▸모델 수준 위협: 모델 도용, 적대적 샘플 공격, 모델 역공학, AI 탈옥 등 +▸시스템 수준 위협: 인증 우회, API 악용, 서비스 거부(DoS) 공격 등 + +#### 1.2.3 + +AI 시스템에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +• AI를 구현하는 이해관계자는 위험 요소에 대한 대응 방안을 마련하고, 위험이 제거 및 완화되었 +는지 확인해야 함 +• 대응 방안이란, 구현 및 운영 방식 등의 절차, 소프트웨어 및 하드웨어 기능, 모델 학습 기법 및 +전략 등 기술적으로 적용할 수 있는 모든 방법을 의미하고, 위험 요소의 분석 과정에서 평가한 파 +급효과가 가장 큰 위험 요소를 우선적으로 대응해야 함 +• 대응 방안이 적용된 이후에는 파급효과를 재평가함으로써 위험 요소가 실제로 제거, 방지 혹은 이 +의 영향이 완화되었는지 확인해야 함 +• (예시) 설계 및 개발 단계에서의 보안 강화 +- 보안 중심 설계(Security by Design): AI 시스템을 설계할 때부터 보안을 우선시하는 접근법을 적용 +- AI 탈옥, 모델 해킹 등 방지 : AI 모델에 대한 적대적 공격, 프롬프트 인젝션 등의 공격을 방 +지하기 위한 적대적 훈련을 실시 및 검증 +- 데이터 무결성 검증: 학습 데이터의 품질과 신뢰성을 확인하고, 데이터 중복 또는 오염을 방지 +- 개발 소스코드, 라이브러리 등의 보안 취약점 점검 및 시큐어코딩 적용 등 개발 보안 가이드라 +인 및 SW 공급망 보안 가이드라인 등 준수 + + +![이미지 41-0](images/p0041_img0.png) + + +![이미지 41-1](images/p0041_img1.png) + + +![이미지 41-2](images/p0041_img2.png) + + +![이미지 41-3](images/p0041_img3.png) + + +![이미지 41-4](images/p0041_img4.png) + + +--- + +데이터 수집 및 준비 +2.1 +데이터 수집 및 전처리 +• AI 모델은 중요 데이터를 보호하고, 승인되지 않은 접근이나 유출을 방지하여야 함. 이는 사용자의 +신뢰를 유지하고, 법적 및 규제 요구 사항을 준수하며, 기밀성/무결성을 보장하기 위해 필수적임. + +#### 2.1.1 + +데이터 수집 시 사용되는 네트워크 프로토콜이 충분한 보안 기능을 제공하고 +있는가? +• 데이터 수집 시 사용되는 네트워크 프로토콜이 충분한 보안 기능을 제공하지 않으면, 데이터가 전 +송 중에 공격자에게 탈취되거나 변조될 수 있음 +• 데이터 전송 중에 발생하는 공격으로 인해 데이터 유출이나 변조가 발생하면, AI 모델에 잘못된 +데이터가 제공되거나 중요한 정보가 손실될 수 있음 +- 데이터 수집 과정에서 공격자가 데이터를 조작하거나 변조할 경우, 신뢰할 수 없는 데이터가 +AI 모델에 전달됨. 특히 센서나 IoT 장치에서 수집된 데이터는 외부 요인에 의해 쉽게 변조될 +수 있음 +- 변조된 데이터는 AI 시스템의 예측 정확도를 크게 떨어뜨리며, 특히 의사결정이 중요한 분야 +(의료, 금융)에서 큰 문제를 야기할 수 있음 +• (예시) 사용 중인 프로토콜 파악 +- 프로토콜 유형 식별: HTTP/HTTPS, FTP/SFTP, MQTT, WebSocket 등 사용 중인 프로토 +콜 확인 +- 전송 계층 확인: TCP, UDP 등 기본 전송 계층 프로토콜도 파악 +• (예시) 보안 표준 준수 여부 검토 +- 암호화 프로토콜 확인: HTTPS, SFTP, VPN 등 +- 인증 메커니즘: 프로토콜에서 다중 인증(Multi-Factor Authentication, MFA) 지원 여부 + + +![이미지 42-0](images/p0042_img0.png) + + +![이미지 42-1](images/p0042_img1.png) + + +![이미지 42-2](images/p0042_img2.png) + + +![이미지 42-3](images/p0042_img3.png) + + +![이미지 42-4](images/p0042_img4.png) + + +![이미지 42-5](images/p0042_img5.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +33 + +#### 2.1.2 + +수집된 데이터의 보관 및 삭제 절차가 명확하게 정의되어 있는가? +• 수집된 데이터의 보관 및 삭제 절차가 명확하지 않거나, 삭제 정책이 적용되지 않으면 오래된 데 +이터나 필요 없는 데이터가 계속 남아 있어 보안 위협이 될 수 있음 +- 보유 기간이 만료된 데이터가 지속적으로 저장되면, 불필요한 위험이 증가하며, 해커가 공격 +시 사용할 수 있는 표적이 될 수 있음 +• 데이터 완전 삭제 및 파기 : 데이터가 저장된 모든 장치에서 데이터를 완전히 삭제하고, 중요 데 +이터는 물리적으로 파기함. 이를 위해 데이터 완전 삭제(secure erase)나 장치 파쇄 등의 방법 +을 사용함 +• (예시) 보관 절차 정의 +- 데이터 암호화: 저장 시 안전한 암호화 방식 채택 +- 접근 통제: 권한이 있는 사용자만 데이터에 접근할 수 있도록 설정 +- 백업 정책: 필요 시 데이터 복구를 위한 백업 절차 마련 +• (예시) 삭제 절차 정의 +- 삭제 방법: 완전 삭제(예: 디지털 삭제 기술, 영구 삭제), 익명화(비식별화) +- 자동화된 삭제 시스템: 보관 기간 종료 시 자동으로 삭제되는 메커니즘 구축 +- 감사 로그 유지: 삭제 기록을 추적하고 검증 가능하게 유지 + +#### 2.1.3 + +전처리 과정에서 중요 데이터를 보호하기 위해 암호화 기술을 사용하고 있는가? +• 데이터 수집 및 처리 과정에서 암호화가 적용되지 않으면, 민감한 정보가 외부 공격자에게 쉽게 +노출될 수 있음. +• 암호화되지 않은 데이터는 네트워크 스니핑, 중간자 공격(MITM) 등에 취약하며, 이는 데이터 유 +출로 이어질 수 있음 +• 중요 데이터 보호 +- 기밀 정보 보호: 전처리 단계에서는 데이터를 수집, 정리, 변환하는 과정에서 원본 데이터가 +노출될 가능성이 높음. 암호화를 사용하면 중요 데이터가 보호됨 +• (예시) 암호화 적용 방법 +- 저장 데이터 암호화 (At-Rest Encryption) +▸데이터가 저장될 때 암호화 적용 +▸파일 수준 또는 데이터베이스 암호화 사용 +▸기술 예시: AES(Advanced Encryption Standard) 256비트, TDE(Transparent Data +Encryption) for databases + + +![이미지 43-0](images/p0043_img0.png) + + +![이미지 43-1](images/p0043_img1.png) + + +![이미지 43-2](images/p0043_img2.png) + + +![이미지 43-3](images/p0043_img3.png) + + +![이미지 43-4](images/p0043_img4.png) + + +--- + +- 전송 데이터 암호화 (In-Transit Encryption): 네트워크를 통해 데이터를 전송할 때 보호 +▸기술 예시: HTTPS/TLS, VPN, SSH +- 처리 중 데이터 암호화 (In-Use Encryption): 전처리 단계에서 데이터를 처리할 때도 보호 +▸기술 예시: 동형 암호화 (Homomorphic Encryption), 암호화 메모리(Intel SGX, AMD +SEV) +• (예시) 암호화 단계별 사용 +- 데이터 수집 후 암호화: 데이터를 수집한 즉시 암호화하여 원본 데이터를 보호 +- 전처리 중 암호화 유지: 동형 암호화나 암호화 연산 라이브러리 사용 +- 전처리 후 암호화된 출력 저장: 전처리 후 데이터 결과도 암호화하여 저장 +• (예시) 적용 가능한 암호화 기술 +- AES (Advanced Encryption Standard): 대칭 키 암호화 방식, 빠르고 효율적이며 저장 및 +전송 데이터 암호화에 적합 +- RSA (Rivest–Shamir–Adleman): 비대칭 키 암호화 방식, 키 관리 및 소량의 데이터 암호화 +에 적합 +- 동형 암호화 (Homomorphic Encryption): 암호화 상태에서 데이터 연산이 가능 +- 해시 함수: 데이터 식별을 위해 비가역적 해싱 적용, 예: SHA-256, bcrypt +• (예시) 암호화 키 관리 +- 키 생성: 안전한 키 생성 방식 사용 +- 키 저장: 하드웨어 보안 모듈(Hardware Security Module, HSM) 또는 키 관리 서비스 +(KMS) 활용 +- 키 교체 및 폐기: 키 교체 주기와 폐기 절차 명확화 + + +![이미지 44-0](images/p0044_img0.png) + + +![이미지 44-1](images/p0044_img1.png) + + +![이미지 44-2](images/p0044_img2.png) + + +![이미지 44-3](images/p0044_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +35 +2.2 +데이터 무결성 검증 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 모델 개발 시 데이터 처리 과정에서 데이터 무결성 검증의 목적은 데이터가 정확하고, 완전하 +며, 변조되지 않았음을 보장하여 신뢰할 수 있는 결과를 도출하는 데 있음 + +#### 2.2.1 + +데이터 처리 과정에서 데이터 무결성을 검증하고 있는가? +• 데이터 무결성의 검증은 공격자의 침해 영향 최소화에 도움이 됨 +- 안전한 학습 환경 조성: 무결성을 검증하면 외부 공격으로부터 AI 모델의 학습 환경을 보호할 +수 있음 +- 사고 대응 용이성 제공: 무결성 검증 기록은 보안 사고 발생 시 문제를 빠르게 식별하고 대응 +하는 데 도움을 줌 +• (예시) 데이터 전송 시 무결성 검증 방법 +- 메시지 인증 코드(MAC): +▸데이터를 전송할 때 메시지 인증 코드를 함께 전송 +▸수신 측에서 재계산한 MAC과 비교하여 데이터 무결성 검증 +▸HMAC(Hash-based Message Authentication Code): 암호화 키와 해시를 결합하여 안 +전한 인증 코드 생성 +- 데이터 패킷의 체크섬 +▸데이터 전송 시 각 패킷에 체크섬을 포함하여 전송 +▸수신 측에서 체크섬을 계산하여 무결성 확인 +▸TCP/UDP 프로토콜의 기본 기능으로 지원 + + +![이미지 45-0](images/p0045_img0.png) + + +![이미지 45-1](images/p0045_img1.png) + + +![이미지 45-2](images/p0045_img2.png) + + +![이미지 45-3](images/p0045_img3.png) + + +![이미지 45-4](images/p0045_img4.png) + + +--- + + +#### 2.2.2 + +데이터에 접근할 수 있는 권한을 제한하고 있는가? +• 데이터 수집 및 처리 과정에서 접근 제어가 제대로 설정되지 않으면, 권한이 없는 사용자가 기밀 +데이터에 접근할 수 있음 +• 권한 없는 접근은 데이터 유출뿐만 아니라 데이터 무결성을 해치거나 악의적으로 수정할 위험을 +초래할 수 있음 +• 내부 위협 방지 +- 내부자 위험 관리: 내부 직원이나 협력자가 데이터를 무단으로 접근하거나 외부로 유출할 가능 +성이 있음. 권한 제한은 내부 위협을 줄이는 데 필수적임 +- 역할 기반 접근 제어(RBAC): 필요한 작업에만 접근 권한을 부여하면, 데이터 남용과 실수를 +예방할 수 있음 +• 보안 사고의 범위 최소화 +- 사고 시 영향 제한: 데이터 접근이 제한되면, 보안 사고 발생 시 피해 범위를 줄일 수 있음. +권한이 없는 사람은 데이터에 접근할 수 없으므로 유출 위험이 감소함 +- 접근 로그 및 추적성 확보: 제한된 권한으로 접근이 이루어질 경우, 어떤 사용자가 데이터를 +조회했는지 명확히 파악할 수 있어 사고 발생 시 원인 분석이 용이함 +• 과도한 데이터 접근으로 인한 리소스 낭비 +- 불필요한 데이터 활용 방지: 권한이 제한되지 않으면, AI 개발자나 팀원이 불필요한 데이터에 +접근하여 리소스를 낭비할 가능성이 있음 +- 효율적인 데이터 관리: 필요하지 않은 데이터에 대한 접근을 제한하면, 데이터 관리를 효율적 +으로 수행할 수 있음 +• (예시) 역할 기반 접근 제어 (Role-Based Access Control, RBAC) +- 사용자에게 특정 역할(Role)을 할당하고, 역할에 따라 데이터 접근 권한을 제한 +- 예) 관리자: 모든 데이터에 접근 가능, 데이터 분석가: 비식별화된 데이터만 접근 가능, 일반 +사용자: 제한된 데이터에만 접근 가능 +• (예시) 원칙 기반 접근 제어 (Policy-Based Access Control, PBAC) +- 접근 정책을 정의하여 조건에 따라 데이터 접근 허용 여부를 결정 +- 예) 특정 시간대에만 접근 허용, 회사 내부 네트워크에서만 접근 가능 +• (예시) 다중 인증(Multi-Factor Authentication, MFA) +- 데이터 접근 시 추가적인 인증 단계를 요구 +- MFA 요소: +▸무엇을 알고 있는가: 비밀번호, PIN +▸무엇을 소유하고 있는가: OTP, 인증 앱 +▸무엇인가: 생체 인식(지문, 얼굴 인식) +- MFA를 IAM 시스템과 통합하여 강화된 보안을 제공 + + +![이미지 46-0](images/p0046_img0.png) + + +![이미지 46-1](images/p0046_img1.png) + + +![이미지 46-2](images/p0046_img2.png) + + +![이미지 46-3](images/p0046_img3.png) + + +![이미지 46-4](images/p0046_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +37 +2.3 +데이터 공격에 대한 방어 +AI 개발자, AI 서비스 제공자 공통사항 +• 인공지능 서비스 개발 또는 운영 과정에서 의도적으로 학습 데이터를 변질시키거나 입력 데이터 +에 최소한의 변조를 가해 예상과는 다른 결과를 출력하도록 하는 공격에 노출될 수 있으므로, 이 +를 대처할 방안을 검토 및 적용하는 것이 바람직함 + +#### 2.3.1 + +데이터 오염(poisoning) 공격에 대한 방어 대책을 마련하고 있는가? +• 적대적 공격을 방어하고 AI 서비스의 강건성을 높이기 위한 다양한 방어 기법이 존재함. 특히 데 +이터 수집 및 준비 단계에서의 오염 공격 방어를 위한 대표적 기법으로는 적대적 학습 +(adversarial training), Gradient Masking, Feature Squeezing 등이 있음 +• (예시) 데이터 오염(Poisoning) 공격에 대한 방어 대책 +➊ 데이터 수준 방어 +- 데이터 검증 및 정제: 데이터 수집 및 학습 전 단계에서 품질 검증 및 노이즈 제거 +- 이상치 탐지 기술을 활용해 의심스러운 데이터를 식별(예: Isolation Forest, PCA) +- 신뢰할 수 있는 데이터 소스: 신뢰할 수 있는 출처에서만 데이터를 수집하여 악의적인 데이터 +유입 방지 +- 데이터 감사: 정기적으로 데이터셋을 검토하여 의도적으로 삽입된 비정상 데이터를 탐지 +➋모델 수준 방어 +- 로버스트 학습 알고리즘: 적대적 공격에 견고한 알고리즘을 사용(예: Krum, Bulyan 등 집계 +전략) +- 안정적 훈련(Stable Training): 데이터 가중치를 재조정하여 이상치가 모델 학습에 미치는 영 +향을 완화 +방어기법 +방어기법 내용 +적대적 학습 +(adversarial training) +모델을 학습시킬 때, 적대적 사례로 활용할 수 있는 모든 경우의 수를 미리 고려하여 학 +습 데이터셋에 포함시키는 방법. 충분한 수와 다양성이 보장된 적대적 데이터를 생성하 +는 과정 없이는 그 성능을 보장할 수 없음 +Gradient Masking +(Distillation) +대부분의 공격은 모델 추론 과정에서의 경사(gradient)를 보고 이루어지므로 학습 모델 +의 경사가 그대로 노출되는 것을 방지하거나 gradient masking, 정규화 방법 등을 통 +해 경사가 두드러지지 않게 하여 적대적 공격에 방어할 수 있는 방법(distillation)들이 +제안됨 +Feature Squeezing +본래의 학습 모델과 별도로, 주어진 입력이 적대적 사례인지 아닌지를 판단하는 학습 모 +델을 추가하는 방법. 그 외에 다수의 학습 모델을 조합하여 시스템을 구성하면 특정 모 +델에 대한 화이트박스 공격을 피할 수 있으며, 특정 모델에 적용되는 적대적 공격이 불 +가능해짐 +적대적 공격에 대한 방어 기법 + + +![이미지 47-0](images/p0047_img0.png) + + +![이미지 47-1](images/p0047_img1.png) + + +![이미지 47-2](images/p0047_img2.png) + + +![이미지 47-3](images/p0047_img3.png) + + +![이미지 47-4](images/p0047_img4.png) + + +--- + + +#### 2.3.2 + +데이터 회피(evasion) 공격에 대한 방어 대책을 마련하고 있는가? +• (예시) 데이터 회피(evasion) 공격에 대한 방어 대책 +- 입력 데이터 검증 및 전처리 강화 +▸데이터 정규화: 입력 데이터를 일정한 범위로 정규화하여 이상값을 감지 +▸이상 탐지 모델: 데이터 분포에서 벗어난 입력을 감지하고 차단 +예) Autoencoder, Isolation Forest 등을 사용 +▸입력 필터링: 입력 이미지나 데이터를 변조 탐지 알고리즘으로 사전 처리 +- 모델 예측 확률 제한 +▸출력 확률 경계 설정: 모델의 출력 확률이 특정 범위를 벗어나면 의심스러운 입력으로 간주 +▸확률 분포 점검: Softmax 출력 분포의 평탄화 정도를 분석하여 이상 여부 판단 +- 방어용 알고리즘 사용 +▸Defensive Distillation: 모델을 학습시키기 전에 출력 확률 분포를 부드럽게 만들어 적대적 +공격의 효과를 감소, 높은 온도 매개변수를 사용하여 Softmax를 부드럽게 학습 +▸Randomization: 입력 데이터나 모델의 일부를 무작위화(randomize)하여 공격자가 예측하 +기 어렵게 구성. 예) 입력 크기 변형, 픽셀 섞기 등 + +#### 2.3.3 + +데이터 유출・변조 공격을 방지하기 위한 방안을 마련하고 있는가? +• 데이터 수집 및 처리 단계에서 기밀 데이터를 보호하지 못하면 데이터 유출이 발생할 수 있음. +- 암호화되지 않은 데이터는 네트워크 스니핑, 중간자 공격(MITM) 등에 취약하며, 이는 데이터 +유출로 이어질 수 있음 +- 데이터 전송 중에 발생하는 공격으로 인해 데이터 유출이나 변조가 발생하면, AI 모델에 잘못 +된 데이터가 제공되거나 중요한 정보가 손실될 수 있음 +• 액세스 제어 +- 역할 기반 접근 제어(RBAC): 데이터를 처리하거나 접근할 수 있는 사용자와 시스템에 권한을 +제한 +- 최소 권한 원칙(Least Privilege): 사용자와 프로세스가 필요한 데이터에만 접근할 수 있도록 +권한을 최소화 +- 다중 인증(MFA): 데이터를 다룰 때 추가적인 인증 단계를 요구하여 보안을 강화 +• 데이터 접근 및 사용 추적 +- 로그 기록 및 모니터링: 데이터에 대한 접근 기록을 보관하고 정기적으로 모니터링하여 이상 +활동 탐지 +- 데이터 사용 감사: 데이터 사용 현황을 주기적으로 검토하고, 비정상적인 패턴이나 의심스러운 +행동을 분석 + + +![이미지 48-0](images/p0048_img0.png) + + +![이미지 48-1](images/p0048_img1.png) + + +![이미지 48-2](images/p0048_img2.png) + + +![이미지 48-3](images/p0048_img3.png) + + +![이미지 48-4](images/p0048_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +39 +모델개발 (학습/모델링/검증) +3.1 +학습/검증 환경에 대한 보안(Secure Training Environment) +• 학습・검증을 진행하는 환경이 안전하지 않을 경우 공격자가 학습 프로세스를 방해하거나 모델을 +악의적으로 수정할 수 있음 + +#### 3.1.1 + +모델 학습을 진행하는 환경이 안전하게 보안조치 되어 있는가? +• 모델 학습을 진행하는 환경이 안전하지 않거나, 외부에서 무단 접근이 가능할 경우 공격자는 학습 +중인 모델에 접근하여 모델의 매개변수를 조작하거나 학습 데이터를 변조하여 시스템에 악성 코 +드를 삽입할 수 있음 +• (예시) AI 모델 학습 환경을 안전하게 보안 조치하기 위한 주요 방법 +➊ 물리적 보안 +- 접근 제한: 모델 학습이 진행되는 서버룸이나 데이터센터에 물리적 접근 제어 시스템(예: 카드 +키, 생체 인증) 도입 +- 감시 시스템: 학습 환경의 물리적 보안을 강화하기 위해 CCTV 및 경고 시스템 설치 +- 보안 네트워크 분리: 학습 서버가 외부 네트워크와 분리되도록 설계하여 불법 접근 차단 +➋ 네트워크 보안 +- 방화벽(Firewall): 외부 및 내부 네트워크로부터 불법 트래픽을 차단 +- VPN 사용: 학습 환경에 접근할 때 VPN을 사용하여 암호화된 통신 경로 제공 +- IDS/IPS 시스템: 침입 탐지 및 방지 시스템을 설치하여 의심스러운 네트워크 활동 탐지 및 차단 +- 네트워크 분리: 학습 환경을 공용 네트워크에서 분리하고, 필요한 경우 최소한의 포트를 통해 +통신 + + +![이미지 49-0](images/p0049_img0.png) + + +![이미지 49-1](images/p0049_img1.png) + + +![이미지 49-2](images/p0049_img2.png) + + +![이미지 49-3](images/p0049_img3.png) + + +![이미지 49-4](images/p0049_img4.png) + + +![이미지 49-5](images/p0049_img5.png) + + +--- + + +#### 3.1.2 + +학습 또는 검증 단계에서 악의적인 사용자가 허위 데이터를 삽입할 가능성을 +차단하고 있는가? +• 학습 또는 검증 단계에서 악의적인 사용자가 허위 데이터를 삽입(Fake Data Injection)할 경우, +모델이 이러한 데이터를 학습하면서 잘못된 결과를 도출할 수 있음. 이는 학습 데이터가 공개 출 +처일 때 더욱 취약함 +• 허위 데이터로 학습된 모델은 신뢰할 수 없는 결과를 생성할 가능성이 높으며, 이는 모델 성능 저 +하 및 보안 취약점으로 이어짐 +• 허위 데이터를 삽입하려는 시도를 차단하려면 데이터 수집, 전처리, 학습, 검증, 배포 등 모든 단 +계에서 종합적인 보안 조치를 적용해야 함. 신뢰할 수 있는 데이터 소스 사용, 디지털 서명 및 인 +증, 이상치 탐지, 권한 관리 등 기술적 조치와 함께 조직 차원의 교육과 정책적 조치가 병행되어 +야 함 +• (예시) 악의적인 사용자가 허위 데이터를 삽입할 가능성을 차단할 수 있도록 사용자 접근 관리 +➊ 인증 및 권한 관리 +- 다중 인증(Multi-Factor Authentication): 학습 환경 및 데이터에 접근하려면 추가 인증 단 +계를 요구 +- 권한 기반 접근 제어(RBAC): 데이터에 접근할 수 있는 사용자 및 애플리케이션을 제한 +➋ 활동 모니터링 +- 사용자 로그 기록: 학습 환경에서 데이터와 상호작용하는 사용자 활동을 기록 +- 비정상 활동 탐지: 의심스러운 활동이 감지되면 즉시 차단 및 경고 + + +![이미지 50-0](images/p0050_img0.png) + + +![이미지 50-1](images/p0050_img1.png) + + +![이미지 50-2](images/p0050_img2.png) + + +![이미지 50-3](images/p0050_img3.png) + + +![이미지 50-4](images/p0050_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +41 + +#### 3.1.3 + +연합 학습(Federated Learning)에 참여하는 장치 중 악의적인 장치가 있는지 +검증하고 있는가? +• 연합 학습(Federated Learning)은 여러 분산된 장치에서 데이터를 수집하여 학습을 진행하는 +방법이며, 참여하는 장치 중 악의적인 장치가 있으면 전체 모델 학습에 악영향을 미칠 수 있음 +• 악의적인 참여자가 학습 데이터나 업데이트를 조작해 전체 모델에 영향을 미치면, 연합 학습의 신 +뢰성이 저하되고 보안 위협이 발생할 수 있음 +• (예시) 연합 학습(Federated Learning)에 참여하는 장치 중 악의적인 장치가 있는지 검증하는 +방법 +➊ 모델 업데이트 유효성 검증 +- 비교 검증: 제출된 업데이트를 다수의 장치로부터 수집된 정상 업데이트와 비교하여 편향성이 +나 비정상적인 패턴 탐지 +- 검증 데이터 기반 평가: 중앙 서버에서 검증 데이터셋을 사용해 각 참여자의 업데이트를 평가 +하고, 성능이 현저히 낮거나 의심스러운 경우 차단 +➋ 신뢰 기반 접근으로 참여 장치 검증 +- 디지털 인증: 참여 장치에 디지털 인증서를 부여하여 인증된 장치만 학습에 참여 +- 장치 프로파일링: 장치의 과거 참여 기록과 행동 패턴을 기반으로 신뢰 점수를 부여하고 악의 +적 활동을 탐지 +➌ 장치 격리로 참여 장치 검증 +- 의심 장치 격리: 악의적 의심이 드는 장치를 임시적으로 학습 과정에서 제외하고 추가 검증 +- 샌드박스 테스트: 의심 장치의 업데이트를 별도의 환경에서 테스트하여 안전성 확인 + + +![이미지 51-0](images/p0051_img0.png) + + +![이미지 51-1](images/p0051_img1.png) + + +![이미지 51-2](images/p0051_img2.png) + + +![이미지 51-3](images/p0051_img3.png) + + +![이미지 51-4](images/p0051_img4.png) + + +--- + +3.2 +모델 공격에 대한 방어 +• 인공지능 모델은 적대적 의도를 가진 사용자에 의해 학습 데이터 및 기능을 도용당하거나 다른 +방식의 공격으로 인한 AI 탈옥, AI 모델 탈취 등이 발생할 수 있으므로 이를 방지 또는 완화하기 +위한 대책을 수립함 + +#### 3.2.1 + +AI Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +• “Prompt Injection”은 공격자가 정교하게 설계된 입력을 통해 AI의 동작이나 출력을 조작하여 +의도하지 않은 결과를 유도함. 유형으로 ▲직접 프롬프트 인젝션 ▲간접 프롬프트 인젝션, ▲다중 +모달 및 언어 기반 인젝션 등이 있음 +• “Prompt Injection”은 출력을 조작하여 의도하지 않은 결과 유도, AI 탈옥 또는 모델 탈취 등을 +발생시킬 수 있음 +• “Prompt Injection”은 AI 애플리케이션의 보안을 위협할 수 있는 가장 흔한 공격으로, 다양한 +애플리케이션에서 발생 가능하며, 방어가 까다롭기 때문에 지속적인 모니터링과 보안 대책이 필수 +방어 기법 +세부 내용 +모델 동작 제한 +모델의 역할, 기능, 한계에 대한 구체적인 지침을 설정. 응답을 특정 작업이나 주 +제로 제한하며, 핵심 지침을 수정하려는 시도를 무시하도록 지시 +예상 출력 형식 정의 및 검증 +명확한 출력 형식을 지정하고 상세한 근거와 출처를 요구 +입력 및 출력 필터링 구현 +민감한 내용 감지 및 차단을 위한 규칙을 설정. RAG Triad를 활용해 ▲컨텍스트 +관련성, ▲정보 근거성, ▲질문/응답 관련성을 평가하며 잠재적으로 악성일 수 있 +는 출력을 식별 +권한 제어 및 최소 권한 접근 +시행 +애플리케이션에 자체 API 토큰을 제공하여 확장 가능한 기능을 구현하고 모델 대 +신 코드에서 처리되도록 설계. 모델의 접근 권한을 필요 최소한의 수준으로 제한 +고위험 작업에 대한 사용자 +승인 요구 +민감한 작업(예: 고급 권한이 필요한 작업)을 위한 사용자 승인 절차 +(human-in-the-loop controls)를 구현하여 비인가된 행동을 방지 +외부 콘텐츠 분리 및 식별 +신뢰할 수 없는 콘텐츠를 분리하고 이를 명확히 표시하여 사용자 프롬프트에 미 +치는 영향을 제한 +적대적 테스트 및 공격 +시뮬레이션 수행 +모델을 신뢰할 수 없는 사용자로 취급하여 침투 테스트와 침해 시뮬레이션을 정 +기적으로 수행하여 신뢰 경계 및 접근 제어의 효과를 평가 +“Prompt Injection”에 대한 예방책 + + +![이미지 52-0](images/p0052_img0.png) + + +![이미지 52-1](images/p0052_img1.png) + + +![이미지 52-2](images/p0052_img2.png) + + +![이미지 52-3](images/p0052_img3.png) + + +![이미지 52-4](images/p0052_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +43 + +#### 3.2.2 + +적대적 예제 공격(Adversarial Example Attacks)에 대한 방어 방안을 수립하고 +있는가? +• 모델 학습이나 검증 과정에서 적대적 공격을 고려하지 않으면, 공격자가 고의적으로 생성한 적대 +적 예제(Adversarial Examples)에 의해 모델이 잘못된 결정을 내리게 할 수 있음. 적대적 예제 +는 인간이 식별하기 어려운 미세한 변화를 통해 모델을 속임 +• 적대적 공격으로 인해 AI 모델이 이미지 분류, 음성 인식, 자율주행 등에서 오작동을 일으킬 수 +있으며, 이는 안전성과 직결된 문제를 야기할 수 있음 +• (예시) 적대적 예제 공격(Adversarial Example Attacks) 방어 방법: 적대적 훈련(Adversarial +Training) +➊ 적대적 샘플 포함 학습 +- 적대적 샘플 생성 및 추가: 학습 데이터에 적대적 샘플을 포함시켜 모델이 이러한 입력에 대해 +견고하게 학습 +- 공격 기법에 따라 다양화: FGSM(Fast Gradient Sign Method), PGD(Projected Gradient Descent) +와 같은 다양한 공격 기법으로 생성된 샘플을 포함 +➋ 정기적 업데이트 +- 새로운 공격 기법에 대해 정기적으로 모델을 재훈련하여 적대적 샘플 방어 능력 강화 +• (예시) 적대적 예제 공격(Adversarial Example Attacks) 방어 방법: 모델 설계 및 학습 과정 개선 +➊ 모델 견고성 강화 +- Dropout 및 정규화: 학습 과정에서 Dropout과 정규화를 사용해 과적합 방지 +- Gradient Masking: 모델이 내부 경사 정보를 공격자에게 노출하지 않도록 설계 +➋ Robust Optimization +- 학습 과정에서 적대적 샘플을 포함해 최적화 과정을 강화하는 알고리즘 사용 +➌ 다중 모델 앙상블 +- 여러 개의 모델을 조합해 하나의 예측값을 생성하여 특정 모델 공격의 성공률 감소 + + +![이미지 53-0](images/p0053_img0.png) + + +![이미지 53-1](images/p0053_img1.png) + + +![이미지 53-2](images/p0053_img2.png) + + +![이미지 53-3](images/p0053_img3.png) + + +![이미지 53-4](images/p0053_img4.png) + + +--- + + +#### 3.2.3 + +모델 회피 공격(model evasion attack)에 대한 방어 방안을 수립하고 있는가? +• 모델 회피 공격은 입력 데이터에 최소한의 변조를 가해 인공지능 모델을 속이는 기법임. 특히 이 +미지 메인은 약간의 변화가 발생해도 사람의 눈에 잘 띄지 않으므로 적대적 공격(adversarial +attack)에 취약함 +• 모델 회피 공격에 대한 방어는 다중 방어 전략을 통해 이루어져야 함. 적대적 훈련, 입력 전처리, +모델 앙상블과 같은 기술적 방어뿐만 아니라, 지속적 평가와 커뮤니티 협업을 통해 AI 모델의 강 +건성/안전성을 강화하는 것이 필수임 +• (예시) 적대적 훈련 (Adversarial Training) +- 개념: 공격자가 사용할 수 있는 적대적 예제(Adversarial Examples)를 모델 학습 데이터에 +포함시켜 훈련 +- 방법: 적대적 샘플을 생성하여, 원본 데이터와 적대적 데이터 모두로 모델을 훈련 +- 효과: 모델이 공격에 노출되었을 때도 강건성(Robustness)이 향상됨 +• (예시) 탐지 및 모니터링 시스템 구축 +- 개념: 입력이 정상적인 데이터 분포에서 벗어나면 이를 탐지해 방어 +- 방법: +▸Anomaly Detection: 이상 데이터 탐지 기법을 활용 +▸Input Certification: 입력 데이터가 허용 가능한 분포 내에 있는지 확인 +- 효과: 회피 공격을 조기에 탐지하고 대응할 수 있음 +• (예시) 방어적 디코딩 (Defensive Decoding) +- 개념: 입력 데이터를 처리하기 전에 추가적인 필터링과 디코딩을 수행해 모델의 취약점을 차단 +- 방법: +▸이미지 데이터에 대해 복원 네트워크를 사용하여 노이즈를 제거 +▸텍스트 데이터의 경우 문장 구조를 재확인하고 오류를 수정 +- 효과: 모델에 전달되는 데이터의 안전성 향상 + + +![이미지 54-0](images/p0054_img0.png) + + +![이미지 54-1](images/p0054_img1.png) + + +![이미지 54-2](images/p0054_img2.png) + + +![이미지 54-3](images/p0054_img3.png) + + +![이미지 54-4](images/p0054_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +45 + +#### 3.2.4 + +모델 오염 공격(Model Poisoning Attack)에 대한 방어 방안을 수립하고 있는가? +• 공격자가 훈련 데이터를 조작하여 AI 모델이 악의적인 방향으로 학습하도록 유도하는 공격임. 주 +로 훈련 데이터에 악성 데이터를 삽입해 모델이 왜곡된 학습을 하게 함 +• 모델이 공격자의 의도에 따라 편향된 결과를 도출할 수 있으며, 정상적인 상황에서 예측 오류가 +증가할 수 있음. 이는 AI 시스템의 신뢰성을 저하시키고, 악의적인 목적에 사용될 위험이 있음 +• (예시) 모델 오염 공격(Model Poisoning Attack) 방어 방법: 데이터 수준에서의 방어 +➊ 데이터 검증 및 정제 +- 데이터 무결성 검사: 데이터 수집 단계에서 해시 값을 비교하여 데이터 무결성을 검증 +- 이상치 탐지: 학습 데이터 내에서 비정상적인 패턴을 보이는 데이터를 식별 +예) Isolation Forest, PCA 기반 탐지 +- 샘플링 검토: 학습 데이터의 하위 샘플링을 무작위로 점검하여 의도적으로 조작된 데이터를 제거 +➋ 데이터 필터링 +- 노이즈 필터링: 데이터에 노이즈를 제거하거나 정규화를 수행하여 포이즈닝 효과를 완화 +➌ 신뢰할 수 있는 데이터 소스 사용 +- 데이터 수집 시 신뢰할 수 있는 출처에서 데이터를 획득하며, 외부 데이터 검증 프로세스 도입 + + +![이미지 55-0](images/p0055_img0.png) + + +![이미지 55-1](images/p0055_img1.png) + + +![이미지 55-2](images/p0055_img2.png) + + +![이미지 55-3](images/p0055_img3.png) + + +![이미지 55-4](images/p0055_img4.png) + + +--- + + +#### 3.2.5 + +모델 추출 공격(model extraction attack) 및 리버스 엔지니어링에 대한 방어 +방안을 수립하고 있는가? +• 모델 추출 공격은 학습된 모델의 다양한 입력에 대한 예측 결과를 분석하고 분류 기준을 추출하 +여 서비스 중인 학습 모델과 유사한 성능의 대체 모델을 구성하는 방법과 학습된 모델의 입력 데 +이터, 모델의 초매개변수(hyperparameter) 정보, 계층 구조 등을 추출하는 공격 방식이 존재함 +인공지능 모델 공격에 대한 주요 완화 방법에는 특정 시간 간격당 인공지능 서비스에 대한 질의 수 +를 제한, 의심스러운 질의에 대한 탐지 및 경고, 예측 결과의 난독화(obfuscation) 등이 있음 +방어 기법 분류 +방어 기법 내용 +질의 횟수 제한 +특정 기간 내에 수행할 수 있는 질의 수를 제한하여 모델 공격을 위한 반복적인 질의를 방 +어하는 기법 +학습기반 모니터링 +기계학습을 활용하여 모델 공격에 대해 사전 탐지 및 경고 알림, 상응하는 방어 기법을 실행 +하는 등 능동적으로 방어하는 기법 +결과 난독화 +예측 결과가 결정경계에 가까운 경우 예측 결과의 정확도를 임의로 낮춰 모델의 세부 속성 +에 대한 추출을 방해하는 기법 +인공지능 모델 추출 공격에 대한 방어 기법 (예시) +• (예시) 리버스 엔지니어링 방어 방법: 모델 출력 제어 +➊ 출력 제한 +- 결과 일반화: 모델 출력값(예: 확률 분포)을 과도하게 자세히 제공하지 않고, 최상위 클래스나 +간략화된 정보를 제공 +- 탑-k 제한: 모델이 반환하는 결과를 상위 k개의 결과로 제한하여 상세한 출력 제공 방지 +- 예: 분류 모델에서 확률값 대신 가장 높은 확률의 k개 클래스만 반환 +➋ 출력 노이즈 추가 +- 차등정보보호(Differential Privacy): 모델 출력에 소량의 노이즈를 추가하여 원본 모델 구조 +와 매개변수를 추론하기 어렵게 제공 +- 적응형 노이즈: 특정 질의 패턴에서만 노이즈를 추가해 공격자를 혼란시킴 +➌ 출력 왜곡 +- 랜덤화: 출력값의 순서나 범위를 무작위로 변경하여 제공함으로써 탈취 시도 무력화 +- 결과 변형: 특정 질의 패턴에서는 변형된 결과를 제공 + + +![이미지 56-0](images/p0056_img0.png) + + +![이미지 56-1](images/p0056_img1.png) + + +![이미지 56-2](images/p0056_img2.png) + + +![이미지 56-3](images/p0056_img3.png) + + +![이미지 56-4](images/p0056_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +47 + +#### 3.2.6 + +반복적인 질의 공격(Repetitive Query Attack)에 대한 방어 방안을 수립하고 +있는가? +• AI 모델 자체는 지적 재산으로서 보호가 필요하며, 적대적 공격이나 모델 탈취로부터 안전해야 +함. 특히, Model Denial of Service는 공격자가 LLM과 상호작용할 때 예외적으로 많은 양의 +리소스를 소모할 때 발생함. 이는 다른 사용자의 서비스 품질을 저하시킬 수 있으며, 잠재적으로 +높은 리소스 비용이 발생할 수 있음 +• 위와 같은 모델 공격에 대해서는 특정 기간 내에 개별 사용자 또는 특정 IP가 수행할 수 있는 질 +의 수를 제한하여 모델 공격을 위한 반복적인 질의를 방어하는 방법이 있음 +• (예시) 질의 제한 및 속도 조절 +➊ 요청 속도 제한 (Rate Limiting) +- 일정 시간 내 허용되는 질의 수를 제한하여 반복적이고 과도한 요청을 방지 +➋ 요청 빈도 감소 (Throttling) +- 동일한 사용자가 짧은 시간 내 다수의 요청을 보내는 경우 응답을 지연시켜 공격의 효율성 감소 +➌ 동적 속도 제한 +- 사용자의 행동 패턴에 따라 속도 제한 정책을 동적으로 조정 + +#### 3.2.7 + +기계 학습을 활용한 모델 공격에 대해 능동적으로 방어하고 있는가? +• 기계 학습을 활용한 모델 공격에 대해서는 사전 탐지 및 경고 알림, 상응하는 방어 기법을 실행하는 +등 능동적으로 방어할 필요가 있음 +- DoS 공격을 나타낼 수 있는 비정상적인 급증이나 패턴을 식별하기 위해 LLM의 리소스 사용 +률을 지속적으로 모니터링함 +- 요청 또는 단계당 리소스 사용량을 제한하여 복잡한 부분을 포함하는 요청을 더 느리게 실행 +• (예시) 기계 학습을 활용한 모델 공격 방어 방법: 공격 탐지 및 모니터링 +➊ 이상 탐지 기법 +- ML 기반 탐지: 요청 데이터와 사용 패턴을 학습하여 정상 사용자와 공격자의 행동 차이를 식 +별. Isolation Forest, DBSCAN, Autoencoder 등을 활용해 비정상적인 요청 탐지 +- 행동 패턴 분석: 반복적이고 대량의 요청, 유사한 질의 패턴을 분석하여 의심스러운 활동을 탐지 +➋ 실시간 로그 분석 +- 질의 기록 분석: API 요청 및 응답 로그를 저장하고 의심스러운 패턴을 실시간으로 탐지 +- 알고리즘 변칙 탐지: 요청 데이터가 모델에 미치는 영향을 분석하여 비정상적인 변화를 탐지 +➌ 경고 시스템 +- 비정상적인 요청이 감지되면 관리자에게 즉시 알림을 보내거나 자동으로 차단 + + +![이미지 57-0](images/p0057_img0.png) + + +![이미지 57-1](images/p0057_img1.png) + + +![이미지 57-2](images/p0057_img2.png) + + +![이미지 57-3](images/p0057_img3.png) + + +![이미지 57-4](images/p0057_img4.png) + + +--- + +3.3 +오픈소스 라이브러리 보안 +• 인공지능 모델 개발 단계에서는 다양한 오픈소스를 활용할 수 있음. 오픈소스 라이브러리 도입 전 +에는 필요성 및 원하는 기능의 제공 여부 등의 확인이 필요하고, 사용할 라이브러리가 안정적으로 +업데이트 중인지, 주의해야 할 라이선스 기준은 무엇인지 등을 확인해야 함. 또한, 사용 중인 오 +픈소스의 목록 및 버전을 지속해서 확인하여 운영 및 보안상의 위험 요소를 점검해야 함 + +#### 3.3.1 + +오픈소스 라이브러리의 업데이트 및 취약점을 관리하고 있는가? +• 인공지능 모델 개발에 오픈소스 라이브러리를 사용한다면, 안정성 확인을 위해 해당 오픈소스 라 +이브러리가 얼마나 많은 사용자를 보유하는지, 업데이트는 자주 이루어지는지, 이슈가 발생했을 +때 대응은 신속하게 이루어지는지 등을 따져봐야 함 +• (예시) 오픈소스 라이브러리 안전성 확인 방법: 라이브러리의 출처와 신뢰성 검증 +➊ 공식 소스 확인 +- 공식 문서 확인: 라이브러리의 공식 웹사이트와 문서를 검토하여 신뢰성 확보. +➋ 개발 커뮤니티의 활동 확인 +- 이슈 대응: 버그나 보안 문제에 대한 커뮤니티의 대응 속도와 품질 평가 +• (예시) 오픈소스 라이브러리 위험요소 관리 방법: 정기적인 보안 패치 +➊ 업데이트 및 패치 +- 라이브러리의 최신 보안 패치를 정기적으로 적용. 변경 로그(Changelog)를 검토하여 보안 개 +선 사항을 확인 +➋ 자동화된 업데이트 도구 활용 +- Dependabot: GitHub 리포지토리에서 취약점이 발견된 의존성을 자동으로 업데이트 +- Renovate: 여러 프로젝트에서 의존성을 자동으로 업데이트 및 관리 + + +![이미지 58-0](images/p0058_img0.png) + + +![이미지 58-1](images/p0058_img1.png) + + +![이미지 58-2](images/p0058_img2.png) + + +![이미지 58-3](images/p0058_img3.png) + + +![이미지 58-4](images/p0058_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +49 + +#### 3.3.2 + +오픈소스 라이브러리의 소스 코드를 직접 검토하거나 사용에 대한 보안 문제를 +검증하고 있는가? +• 오픈소스 라이브러리의 소스 코드를 직접 검토하고 사용에 대한 보안 문제를 검증하는 것은 보안 +취약점 예방, 성능 최적화, 법적 컴플라이언스 준수, 신뢰성 확보를 위한 필수적인 과정임. 이를 +통해 AI 개발 프로젝트의 안정성과 신뢰성을 높이고, 잠재적인 위험을 사전에 방지할 수 있음 +오픈소스 라이브러리의 종류 및 버전 선택 시 개발 과정에서 보안 취약점이 발견될 수 있으므로 +이러한 이슈들을 확인하여 보안상의 위험 요소에 대한 관리가 필요함 +• (예시) 오픈소스 라이브러리 위험요소 관리 방법: 코드 분석 및 검토 +➊ 정적 코드 분석: 라이브러리의 소스 코드를 분석하여 보안 취약점을 탐지 +➋ 동적 분석: 라이브러리를 샌드박스 환경에서 실행하여 악성 코드가 포함되었는지 확인 +➌ 코드 리뷰: 오픈소스 커뮤니티에서 제공하는 코드 리뷰 내용을 검토하여 위험 요소 확인 +• (예시) 오픈소스 라이브러리 안전성 확인 방법: 취약점 데이터베이스 확인 +- CVE 데이터베이스 검색: 라이브러리와 관련된 알려진 취약점이 있는지 확인 +- NVD(National Vulnerability Database): 오픈소스 라이브러리의 보안 이슈를 검색 +• (예시) 오픈소스 라이브러리 사용 제한 적용 +➊ 최소 권한 부여 +- 라이브러리에서 사용하는 API나 파일 접근 권한을 최소화 +- Sandbox를 통해 실행 환경에서 라이브러리가 시스템 자원에 접근하지 못하도록 제한 +➋ 민감 데이터 처리 방지 +- 오픈소스 라이브러리를 사용할 때 민감 데이터를 직접 처리하지 않도록 설계 + +#### 3.3.3 + +오픈소스 라이브러리를 실행할 때 잠재적인 보안 위험을 제거하기 위해 격리된 +환경을 이용하고 있는가? +• AI 모델 개발 시 오픈소스 라이브러리를 실행할 때 격리된 환경을 이용하는 이유는 보안, 안정성, +호환성, 및 효율성을 보장하기 위해서임. 이를 통해 악성 코드 실행, 시스템 변경, 중요 데이터 유 +출 등으로부터 시스템을 보호하고, 라이브러리의 영향 범위를 제한할 수 있음 +• (예시) 오픈소스 라이브러리 위험요소 관리 방법: 환경에서의 안전한 실행 +➊ 샌드박스 환경에서 테스트 +- 라이브러리를 프로덕션 환경에 배포하기 전에 격리된 테스트 환경에서 실행 +- 테스트 데이터와 시뮬레이션 환경을 사용하여 예상치 못한 동작 방지 +➋ 최소 권한 실행 +- 라이브러리가 접근할 수 있는 시스템 자원과 데이터를 최소화 +- 원격 API 호출이나 외부 네트워크 액세스를 제한 +➌ 컨테이너화 +- Docker, Kubernetes 같은 컨테이너 기술을 활용해 라이브러리 실행 환경을 격리 + + +![이미지 59-0](images/p0059_img0.png) + + +![이미지 59-1](images/p0059_img1.png) + + +![이미지 59-2](images/p0059_img2.png) + + +![이미지 59-3](images/p0059_img3.png) + + +![이미지 59-4](images/p0059_img4.png) + + +--- + +3.4 +LLM 보안 +• LLM 애플리케이션 보안 영역에 대한 실용적이고 실행가능한 지침을 제공하고자 함 +• 일반적인 애플리케이션 보안 원칙과 LLM이 제기하는 특정 보안 취약성과의 간극을 메우는 것이 +필요하며, 기존 취약성이 어떻게 LLM 내에서 다른 위험을 초래하거나 새로운 방식으로 악용될 +수 있는지, 그리고 개발자가 LLM을 활용하는 애플리케이션에 대해 기존 수정 전략을 어떻게 적 +용해야 하는지에 방향성을 제공함 + +#### 3.4.1 + +LLM 애플리케이션 공격에 대한 예방책을 마련하고 있는가? +• LLM 애플리케이션은 실수로 민감 정보 또는 기밀 데이터를 외부에 공개할 수 있음 +• LLM 애플리케이션 공격에 대한 예방책은 다음과 같음 +- 적절한 데이터 Sanitization 및 스크러빙 기술을 통합하여 사용자 데이터가 학습 모델 데이터 +에 입력되는 것을 방지 +- 강력한 입력 검증 및 Sanitization 방법을 구현하여 잠재적인 악성 입력을 식별하고 필터링하 +여 모델이 오염되는 것을 방지 +- 외부 데이터 소스에 대한 액세스(런타임 시 데이터 오케스트레이션)는 제한되어야 함. 외부 데이터 +소스에 대한 엄격한 액세스 제어 방법과 안전한 공급망을 유지하기 위한 엄격한 접근 방식을 적용 + +#### 3.4.2 + +LLM의 모델 서비스 거부(Model Denial of Service) 공격에 대한 방어 방안을 +수립하고 있는가? +• “Model Denial of Service”는 공격자가 LLM(Large Language Model)과 상호작용할 때 예외 +적으로 많은 양의 리소스를 소모할 때 발생함. 이는 공격자와 다른 사용자에게 서비스 품질이 저 +하될 수 있으며, 잠재적으로 높은 리소스 비용이 발생할 수 있음 +※ 예시: ①대량 대기열(리소스 집약적 작업), ②리소스 소모 쿼리(비정상적인 쿼리), ③오버플로(overflow, 지속 +적인 과도한 입력), ④ 반복적인 긴 입력(리소스 고갈) +방어 기법 +세부 내용 +입력 검증 +정의된 한도를 준수하고 악성 콘텐츠를 걸러내기 위해 사용자 입력에 대한 입력 검증 및 정 +리(sanitization)를 구현 +리소스 캡 +요청 또는 단계당 리소스 사용량을 제한하여 복잡한 부분을 포함하는 요청이 더 느리게 실 +행되도록 함 +API 비율 제한 +특정 기간 내에 개별 사용자 또는 IP 주소가 수행할 수 있는 요청 수를 제한하기 위해 API +속도 제한 적용 +큐 관리 +LLM 응답에 반응하는 시스템에서 대기 중인 작업 수와 총 작업 수를 제한 +리소스 모니터링 +Dos 공격을 나타낼 수 있는 비정상적인 급증이나 패턴을 식별하기 위해 LLM의 리소스 사 +용률을 지속적으로 모니터링함 +“Model Denial of Service”에 대한 예방책 + + +![이미지 60-0](images/p0060_img0.png) + + +![이미지 60-1](images/p0060_img1.png) + + +![이미지 60-2](images/p0060_img2.png) + + +![이미지 60-3](images/p0060_img3.png) + + +![이미지 60-4](images/p0060_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +51 + +#### 3.4.3 + +LLM의 API 보안을 위한 방안을 수립하고 있는가? +• API는 특정 시스템에서 프로그램이 작동하도록 간편화한 인터페이스임. +• 해커는 기업이나 생성형 AI 제조사의 일반 시스템에 접근하는 대신 LLM 접목을 위해 사용하는 +API의 취약점을 노리기 때문에 LLM(대규모 언어 모델)을 도입하는 기업이 단계에 맞는 API 보 +안 정책을 세워야 함. +- 주요 단계는 ▲설계 및 개발 ▲교육 및 테스트 ▲배포 ▲운영 및 모니터링 ▲유지 및 업데이 +트 등으로 구분됨 +• LLM(대규모 언어 모델) API의 보안을 보장하기 위해서는 접근 제한, 데이터 보호, 인증 및 권한 +부여, 실시간 모니터링과 같은 다각적인 보안 대책이 필요함 +• (예시) 인증(Authentication) 및 권한 부여(Authorization) +➊ API 키 관리: 각 사용자에게 고유한 API 키를 제공하여 접근 권한을 제한 +➋ OAuth 2.0 및 OpenID Connect: 사용자 인증 및 권한 부여를 위한 업계 표준 프로토콜 사용 +➌ 다중 인증(Multi-Factor Authentication, MFA): API 접근 시 추가 인증 단계 요구 +• (예시) 사용량 제한 및 모니터링 +➊ Rate Limiting: 사용자당 요청 수를 제한하여 과도한 호출로 인한 서비스 중단 방지 +➋ 실시간 모니터링: API 호출 로그를 실시간으로 모니터링하여 비정상적인 활동 탐지 +➌ 악의적인 사용 탐지: 비정상적인 패턴(예: DDoS 공격, 스크래핑) 탐지 및 차단 +• (예시) API 응답 보안 +➊Rate Limiting 초과 응답: 초과 요청에 대해 표준 HTTP 상태 코드(429 Too Many Requests) +반환 +➋ 민감 데이터 마스킹: API 응답에서 민감 데이터를 마스킹하거나 제거 +➌ 에러 메시지 관리: 에러 메시지를 통해 민감한 시스템 정보(예: 디버그 정보, 경로 등)가 노출 +되지 않도록 제한 + + +![이미지 61-0](images/p0061_img0.png) + + +![이미지 61-1](images/p0061_img1.png) + + +![이미지 61-2](images/p0061_img2.png) + + +![이미지 61-3](images/p0061_img3.png) + + +![이미지 61-4](images/p0061_img4.png) + + +--- + + +#### 3.4.4 + +LLM의 인터페이스 공격에 대한 예방책을 마련하고 있는가? +• LLM(대규모 언어 모델)의 인터페이스 공격은 공격자가 모델의 입력 또는 출력 인터페이스를 악 +용하여 비정상적인 동작을 유도하거나 민감한 데이터를 유출시키는 공격을 의미함 +• (예시) LLM의 인터페이스 공격에 대한 예방책: 입력 검증 및 필터링 +➊ 입력 유효성 검증: 입력 데이터를 정규화하고, 예상치 못한 형식이나 길이를 가진 입력을 차 +단. 허용 가능한 입력 유형과 범위를 명확히 정의(예: SQL 인젝션, 코드 실행 명령 등이 포함 +된 텍스트 필터링) +➋ 금지어 및 패턴 필터링: 모델이 민감한 정보나 금지된 데이터를 반환하지 않도록 특정 키워드 +또는 패턴을 필터링(예: “비밀번호”, “크레디트 카드 번호” 등 민감 데이터 차단) +➌ 입력 크기 제한: 과도한 크기의 입력(예: 너무 긴 텍스트)이 시스템에 부하를 주지 않도록 제 +한. 예: 최대 입력 토큰 수 설정 +• (예시) LLM의 인터페이스 공격에 대한 예방책: 출력 검증 및 제어 +➊ 민감 데이터 필터링: 출력에 포함된 민감한 데이터나 비정상적인 정보를 사전에 검출 및 차단. +예: 사용자 인증 정보, 내부 시스템 구조 관련 정보 등 +➋ 모델 출력 제한: 출력 길이 제한을 설정하여 과도한 데이터 반환을 방지. 모델 출력의 특정 +토큰 또는 문맥 조건을 검토. +➌ 결과 샌드박싱: 모델 출력을 사용하기 전에 별도의 검증 계층에서 안전성을 평가 + + +![이미지 62-0](images/p0062_img0.png) + + +![이미지 62-1](images/p0062_img1.png) + + +![이미지 62-2](images/p0062_img2.png) + + +![이미지 62-3](images/p0062_img3.png) + + +![이미지 62-4](images/p0062_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +53 + +#### 3.4.5 + +개발 환경에서 LLM을 사용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 +코딩 관행과 지침을 수립하고 있는가? +• 소프트웨어 개발팀이 LLM 시스템을 사용하여 코딩 작업을 빠르게 할 수 있음. 이 때 AI의 제안 +에 지나치게 의존하면 안전하지 않은 기본 설정이나 안전한 코딩 관행과 일치하지 않는 권장 사 +항으로 인해 애플리케이션에 보안 취약성이 발생할 수 있음 +• 지나친 의존 때문에 나타나는 취약점을 사전에 예방할 수 있는 방법은 개발 환경에서 LLM을 사 +용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 코딩 관행과 지침을 수립해야함 +• (예시) 안전한 코딩 관행의 기본 원칙 수립 +➊ 최소 권한 원칙 (Principle of Least Privilege): 모델, 데이터, 코드, API가 필요한 최소한의 +권한만 가질 수 있도록 설계. 예: 모델이 파일 시스템이나 네트워크에 불필요하게 접근하지 +않도록 제한 +➋ 데이터 최소화: LLM이 처리해야 할 데이터의 범위를 최소화하여 불필요한 민감 데이터 노출 +방지. 훈련 데이터와 입력 데이터에서 개인정보(PII) 제거 +• (예시) 안전한 입력/출력 처리 +➊ 입력 검증 및 필터링: 사용자 입력의 길이, 형식, 값 범위를 검증하여 악의적인 입력을 차단. +정규표현식 또는 화이트리스트 방식으로 유효성을 검사 +➋ 출력 제어: LLM 출력이 민감 데이터나 예상치 못한 정보를 포함하지 않도록 필터링. 모델이 +생성한 응답을 후처리(post-processing)하여 안전성 검토 +➌ 입력 데이터와 명령어 분리: 사용자 입력 데이터를 명령어나 코드와 분리하여 코드 삽입 공격 +방지 + +#### 3.4.6 + +LLM 출력결과를 정기적으로 모니터링하고 검토하고 있는가? +• LLM 출력에 대해서는 정기적으로 자기 일관성(Self Consistency on prompt) 투표 기술을 사 +용하여 일관되지 않은 텍스트를 필터링함. 단일 프롬프트에 대한 여러 모델 응답을 비교하면 출력 +의 품질과 일관성을 더 잘 판단할 수 있음 +• (예시) LLM 출력결과 모니터링시 확인사항: 출력 데이터 수집 및 로그 기록 +➊ 출력 데이터 로깅: 모든 요청과 응답 데이터를 로그로 기록. 요청, 응답, 사용자 ID, 타임스탬 +프 등 메타데이터 포함 +➋ 로그 저장소 관리: 로그 데이터를 암호화하여 저장. 데이터베이스 또는 로그 관리 도구 사용 +(Splunk, ELK Stack) +• (예시) LLM 출력결과 모니터링시 확인사항: 이상 탐지 및 자동화 +➊ 이상 출력 탐지: AI 기반 이상 탐지 도구를 활용하여 비정상적인 출력 탐지 +➋ 규칙 기반 필터링: 출력 데이터에 대한 규칙 기반 점검 +➌ 실시간 알림: 비정상 출력이 발생하면 알림을 보내는 시스템 구축 + + +![이미지 63-0](images/p0063_img0.png) + + +![이미지 63-1](images/p0063_img1.png) + + +![이미지 63-2](images/p0063_img2.png) + + +![이미지 63-3](images/p0063_img3.png) + + +![이미지 63-4](images/p0063_img4.png) + + +--- + + +#### 3.4.7 + +LLM의 Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +• “Prompt Injection”은 공격자가 정교하게 설계된 입력을 통해 LLM(Large Language Moel)의 +동작이나 출력을 조작하여 의도하지 않은 결과를 유도함. 유형으로 ▲직접 프롬프트 인젝션 ▲간 +접 프롬프트 인젝션, ▲다중 모달 및 언어 기반 인젝션 등이 있음 +• “Prompt Injection”은 출력을 조작하여 의도하지 않은 결과 유도, AI 탈옥 또는 모델 탈취 등을 +발생시킬 수 있음 +• “Prompt Injection”은 LLM 애플리케이션의 보안을 위협할 수 있는 가장 흔한 공격으로, 다양한 +애플리케이션에서 발생 가능하며, 방어가 까다롭기 때문에 지속적인 모니터링과 보안 대책이 필수 +방어 기법 +세부 내용 +모델 동작 제한 +모델의 역할, 기능, 한계에 대한 구체적인 지침을 설정. 응답을 특정 작업이나 주 +제로 제한하며, 핵심 지침을 수정하려는 시도를 무시하도록 지시 +예상 출력 형식 정의 및 검증 +명확한 출력 형식을 지정하고 상세한 근거와 출처를 요구 +입력 및 출력 필터링 구현 +민감한 내용 감지 및 차단을 위한 규칙을 설정. RAG Triad를 활용해 ▲컨텍스트 +관련성, ▲정보 근거성, ▲질문/응답 관련성을 평가하며 잠재적으로 악성일 수 있 +는 출력을 식별 +권한 제어 및 최소 권한 접근 +시행 +애플리케이션에 자체 API 토큰을 제공하여 확장 가능한 기능을 구현하고 모델 대 +신 코드에서 처리되도록 설계. 모델의 접근 권한을 필요 최소한의 수준으로 제한 +고위험 작업에 대한 사용자 +승인 요구 +민감한 작업(예: 고급 권한이 필요한 작업)을 위한 사용자 승인 절차 +(human-in-the-loop controls)를 구현하여 비인가된 행동을 방지 +외부 콘텐츠 분리 및 식별 +신뢰할 수 없는 콘텐츠를 분리하고 이를 명확히 표시하여 사용자 프롬프트에 미 +치는 영향을 제한 +적대적 테스트 및 공격 +시뮬레이션 수행 +모델을 신뢰할 수 없는 사용자로 취급하여 침투 테스트와 침해 시뮬레이션을 정 +기적으로 수행하여 신뢰 경계 및 접근 제어의 효과를 평가 +“Prompt Injection”에 대한 예방책 + +#### 3.4.8 + +LLM의 벡터 및 임베딩 취약점에 대한 방어 방안을 수립하고 있는가? +• RAG(Retrieval Augmented Generation) 및 임베딩 기반 시스템은 정보를 검색하고 LLM 출 +력의 정확성을 높이기 위해 사용됨. 그러나 공격자들은 이를 악용하여 유해한 콘텐츠 삽입, 모델 +동작을 조작, 민감한 정보를 노출시킬 수 있음. +• RAG(Retrieval Augmented Generation)는 사전 학습된 언어 모델과 외부 지식 소스를 결합 +하여 LLM 애플리케이션의 성능과 응답의 맥락 관련성을 향상시키는 모델 적응 기술 +방어 기법 +세부 내용 +권한 및 접근 제어 +세분화된 접근 제어 및 권한 관리가 가능한 벡터 및 임베딩 저장소를 구현 +데이터 검증 및 출처 인증 +강력한 데이터 검증 파이프 라인을 구현하여 신뢰할 수 있고, 검증된 소스의 데이터만허용 +데이터 결합 및 분류 검토 +서로 다른 소스의 데이터를 결합할 때, 결합된 데이터셋을 철저히 검토. 지식 데이터베 +이스 내 데이터를 태그하고 분류하여 접근 수준을 제어하고 데이터 불일치 오류를 방지 +모니터링 및 로깅 +의심스러운 동작을 신속히 탐지하고 대응하기 위해, 검색 활동에 대한 세부적인 불 +변 로그(immutable log)를 유지하여 기록의 무결성을 확보 +“벡터 및 임베딩 취약점”에 대한 예방책 + + +![이미지 64-0](images/p0064_img0.png) + + +![이미지 64-1](images/p0064_img1.png) + + +![이미지 64-2](images/p0064_img2.png) + + +![이미지 64-3](images/p0064_img3.png) + + +![이미지 64-4](images/p0064_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +55 +모델 배포 +4.1 +모델파일 및 배포 환경 보호 +• 모델 파일이나 배포 환경이 악의적으로 변경되면, 출력 결과가 왜곡되어 잘못된 결정을 초래할 수 +있고, 또한 공격자가 모델에 백도어를 삽입하여, 특정 입력에 대해 예상치 못한 출력을 유도하거 +나 민감 데이터를 유출할 수 있음 + +#### 4.1.1 + +모델을 배포하기 전에 코드 및 모델을 스캔하고, 자동화된 취약점 분석을 하고 +있는가? +• AI 모델을 배포하기 전에 코드 및 모델을 스캔하고 자동화된 취약점 분석을 수행하기 위해서는 +체계적인 절차와 도구를 활용해야 함. 이 작업은 모델의 안전성과 신뢰성을 보장하고, 보안 위협 +을 사전에 방지하는 데 중요함 +• (예시) 자동화된 취약점 분석 프로세스 +➊ 정적 코드 분석 (Static Analysis): 소스 코드를 실행하지 않고 코드 내부의 잠재적 취약점을 +탐지 +▸작업 내용: 보안 결함, 코드 품질 문제, 잘못된 API 호출 등을 식별 +➋ 동적 코드 분석 (Dynamic Analysis): 실행 중인 코드의 보안 취약점을 탐지 +▸작업 내용: 런타임에서 발생할 수 있는 취약점(예: 메모리 누수, 비정상 동작)을 식별 +➌ 모델 수준의 취약점 분석: +▸적대적 공격 시뮬레이션: 적대적 입력(Adversarial Input)에 대해 모델의 반응을 테스트 +• (예시) 종속성 및 라이브러리 취약점 분석 +➊ 종속성 관리: 모델이 의존하는 오픈소스 라이브러리와 종속성의 취약점 확인 +➋ 최신 상태 유지: 최신 보안 패치가 적용된 라이브러리와 소프트웨어 사용 +• (예시) 배포 전에 MCP(Model Context Protocol) 보안 점검 +- MCP를 통해 어떤 도구/기능이 호출될 수 있는지 식별 +- 각 MCP 툴의 신뢰성 및 보안 검토 +- 비정상 컨텍스트 요청 시 응답 행동 검증 +- 세션 간 정보 누출 여부 확인 +- MCP 호출 흐름에 대한 감사 로깅 확인 +- MCP 툴 권한 설정 및 호출 패턴의 이상탐지 적용 +※ MCP(Model Context Protocol)는 AI 모델이 외부 애플리케이션 또는 사용자와 상호작용할 때 컨텍스트 +정보를 안전하고 구조화된 방식으로 주고받기 위한 프로토콜로, OpenAI 등에서 도입한 개념임. 예를 들어, +사용자 명령어를 보조 앱으로 전달하거나, LLM이 플러그인, API, 툴 등과 연동될 때 사용됨. 하지만 이러 +한 구조는 보안상 여러 위협에 노출될 수 있으므로 AI 모델 개발자는 MCP 관련 보안 점검을 수행할 필요 +가 있음 + + +![이미지 65-0](images/p0065_img0.png) + + +![이미지 65-1](images/p0065_img1.png) + + +![이미지 65-2](images/p0065_img2.png) + + +![이미지 65-3](images/p0065_img3.png) + + +![이미지 65-4](images/p0065_img4.png) + + +![이미지 65-5](images/p0065_img5.png) + + +--- + + +#### 4.1.2 + +모델파일을 암호화하여 저장하고 전송 중에도 안전하게 보호하고 있는가? +• 모델 파일의 암호화 및 전송 보안을 보장하려면 저장 암호화, 전송 암호화, 접근 제어, 무결성 검 +증과 같은 다각적인 보안 조치를 적용해야 함. 이 과정을 자동화하고 정기적으로 검토함으로써 +AI 모델의 안전성을 유지하고 잠재적 위협을 효과적으로 방지할 수 있음 +• (예시) 모델 파일 접근 제어 +➊ 접근 제어 정책: 모델 파일에 대한 접근 권한을 최소 권한 원칙에 따라 설정. 읽기/쓰기 권한 +을 엄격히 제한 +➋ 다중 인증(MFA): 모델 파일에 접근하거나 다운로드하려면 비밀번호 외에 OTP, 인증 앱 등 +추가 인증 절차 요구 +➌ 로그 기록: 파일 접근 로그를 기록하고 비정상적인 접근 시 경고 알림 +• (예시) 배포 환경 보호 +➊ 컨테이너 이미지 암호화: Docker 이미지 내부의 모델 파일을 암호화하거나 비공개 레지스트 +리 사용 +➋ 런타임 암호화: 하드웨어 기반 보안을 사용하여 모델 파일이 실행 중에도 암호화 상태로 유지. +Confidential Computing 기술 활용 등 + +#### 4.1.3 + +AI 모델이 배포되는 인프라(클라우드, 서버 등) 환경이 충분한 보안시스템을 갖추고 +있는가? +• AI 모델이 배포되는 환경이 안전하지 않으면 공격자가 모델에 무단으로 접근하거나 모델을 악용 +할 수 있음. 클라우드 환경에서 배포되는 경우 특히 주의가 필요함 +• 이에 대한 보안요구 사항은 다음과 같음 +- 배포 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 최소화하여 무단 접근을 방지함 +- 암호화된 모델 배포 방식을 사용하여 모델이 악의적으로 수정되지 않도록 하고, 배포된 모델의 +무결성을 보장하는 디지털 서명을 적용 +- 보안 모니터링 도구를 사용하여 배포된 환경에서 비정상적인 활동을 감지하고, 실시간으로 대 +응할 수 있는 시스템을 구축함 + + +![이미지 66-0](images/p0066_img0.png) + + +![이미지 66-1](images/p0066_img1.png) + + +![이미지 66-2](images/p0066_img2.png) + + +![이미지 66-3](images/p0066_img3.png) + + +![이미지 66-4](images/p0066_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +57 +4.2 +API 및 인터페이스 보안 +• API 보안은 애플리케이션 간의 인터페이스를 보호하는 것임. 적절한 API 보안이 없으면 민감한 +데이터가 노출되고, 시스템이 감염되며 서비스가 중단될 수 있음 + +#### 4.2.1 + +AI 모델이 배포된 후, API를 통해 외부 시스템과 상호작용하는 경우, 충분한 보안 +조치 기능을 갖추고 있는가? +• AI 서비스가 외부 시스템과 통신하는 API나 인터페이스가 안전하지 않으면 공격자가 이를 통해 +시스템에 접근하거나 데이터를 탈취할 수 있음 +• 이 때 발생 가능한 취약점은 다음과 같음 +- API가 충분한 인증 및 권한 관리 없이 공개되어 있으면, 무단 접근이 발생할 수 있음 +- API 트래픽이 암호화되지 않으면 중간자 공격(Man-in-the-Middle Attack)에 노출될 수 있음 +- API에 대한 과도한 요청으로 서비스 거부(DoS) 공격이 발생할 위험이 있음 +• 위와 같은 공격에 대한 예방책은 아래와 같음 +- 모든 API 요청에 대해 인증 및 권한 관리를 강화하고, 민감한 데이터에 접근할 때는 다중 인 +증(MFA)을 적용함 +- API 트래픽은 암호화(TLS)를 사용하여 보호하고, 데이터를 안전하게 주고받도록 보장함 +- API 호출 제한(Rate Limiting)을 설정하여 과도한 요청을 방지하고, 비정상적인 요청 패턴을 +탐지하여 차단하는 시스템을 구축함 + +#### 4.2.2 + +배포된 AI 모델이 실시간으로 데이터를 수신하고 이를 처리할 때, 중간자 공격 +(Man-in-the-Middle Attack)에 대응하고 있는가? +• 데이터 전송 중 암호화가 미흡할 경우 “중간자 공격(Man-in- the-Middle Attack)”을 통해 데 +이터가 탈취될 수 있음 +• 실시간 데이터 처리 중 데이터 유출 등을 방지하기 위한 예방책은 다음과 같음 +- 암호화된 데이터 전송(TLS/SSL) 프로토콜을 사용하여 전송 중인 데이터의 기밀성을 보호함 +- 실시간 데이터 처리 시스템에 대한 접근 제어를 엄격히 적용하고, 민감한 데이터에 대한 접근 +권한을 최소화함 +- 데이터 처리 중 로그 관리를 강화하고, 민감한 정보는 로그에서 제거하거나 익명화 처리함 + + +![이미지 67-0](images/p0067_img0.png) + + +![이미지 67-1](images/p0067_img1.png) + + +![이미지 67-2](images/p0067_img2.png) + + +![이미지 67-3](images/p0067_img3.png) + + +![이미지 67-4](images/p0067_img4.png) + + +--- + + +#### 4.2.3 + +AI 모델의 API에 대한 접근 권한을 제한하고, 강한 인증 메커니즘을 사용해 불법 +접근을 방지하고 있는가? +• AI 서비스를 제공하는 동안 사용자 인증 및 접근 제어가 제대로 설정되지 않으면, 공격자가 서비 +스에 무단으로 접근하거나 시스템을 악용할 수 있음 +• AI 모델의 API에 대한 접근 권한을 제한하고 강한 인증 메커니즘을 적용하려면 인증 강화 +(OAuth, MFA), 역할 기반 권한 제어(RBAC), 데이터 암호화, Rate Limiting과 같은 다층적인 +보안 전략이 필요함. 이러한 조치를 자동화 도구와 정책을 통해 체계적으로 관리하면 불법 접근을 +효과적으로 방지하고 API의 신뢰성과 안정성을 보장할 수 있음 +• (예시) 인증 및 권한 부여 강화 +➊ API 키 관리: 각 사용자나 애플리케이션에 고유한 API 키를 발급. API 키에 유효 기간 설정. +키 별로 사용량 제한(Rate Limiting) 적용. 만료된 키는 즉시 회수 및 재발급 +➋ OAuth 2.0 및 OpenID Connect: 업계 표준 인증 프로토콜을 활용. +- OAuth 2.0: 클라이언트가 요청하는 권한 범위(스코프)를 지정. Access Token을 통해 +제한된 API 호출 권한 부여 +➌ 다중 인증(MFA, Multi-Factor Authentication): 사용자가 추가 인증 단계(OTP, 생체 인증) +를 거쳐야만 API에 접근 가능 +➍ 세션 기반 접근 제어: Access Token을 기반으로 세션 만료 시간 설정. 장기적으로는 Refresh +Token을 사용하여 새 토큰 발급 + +#### 4.2.4 + +API 사용자는 필요한 권한만 부여받도록 최소 권한 원칙(Least Privilege)을 +적용하고 있는가? +• 최소 권한 원칙을 적용하려면 역할 기반 접근 제어(RBAC)와 정책 기반 접근 제어(PBAC)를 중 +심으로 인증, 권한 부여, 데이터 보호, 사용량 제한 등을 통합적으로 관리해야 함. 또한 정기적인 +모니터링과 권한 리뷰를 통해 권한이 필요 이상으로 부여되지 않도록 하고, 이를 자동화하여 운영 +효율성을 높이는 것이 중요함 +• (예시) 역할 및 권한 정의 +➊ 역할 기반 접근 제어(RBAC, Role-Based Access Control) +- 사용자 역할 정의: API 사용자의 역할과 책임을 명확히 구분하고 각 역할에 필요한 최소한 +의 권한만 할당 +예: 관리자(Admin), 개발자(Developer), 일반 사용자(User), 모니터링 사용자(Monitoring) +➋ 세분화된 권한 정의: API 엔드포인트별로 권한을 세분화 +예: GET 요청 권한만 부여. 민감 데이터 수정 또는 삭제는 관리자만 수행 가능 +• (예시) 정책 기반 접근 제어(PBAC, Policy-Based Access Control) +- 동적으로 권한을 설정하기 위해 정책 기반 접근 제어 적용 +- 조건 기반 권한 설정: 요청이 특정 조건을 충족할 때만 권한 부여 +예: 시간 제한(업무 시간대만 허용), IP 화이트리스트 + + +![이미지 68-0](images/p0068_img0.png) + + +![이미지 68-1](images/p0068_img1.png) + + +![이미지 68-2](images/p0068_img2.png) + + +![이미지 68-3](images/p0068_img3.png) + + +![이미지 68-4](images/p0068_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +59 + +#### 4.2.5 + +AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치만 +연결되도록 하고 있는가? +• AI 시스템에 연결된 장치를 보호하여 보안 위협으로부터 안전하게 유지해야 함 +- 장치 인증 및 승인: AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치 +만 연결되도록 함 +- 장치 보안 설정: 각 장치에 대한 보안 설정을 강화하여 취약점을 최소화 +• AI 시스템에 연결된 장치를 보호하기 위해 장치 인증, 승인 프로세스, 네트워크 보안, 실시간 모 +니터링을 포함한 다층적인 보안 전략이 필요함. 이러한 체계적인 접근 방식은 비인가 장치로 인한 +보안 위험을 최소화하고, 시스템의 신뢰성과 안정성을 유지하는 데 필수적임 +• (예시) 장치 인증 메커니즘 구축 +➊ 고유한 장치 ID 할당: 각 장치에 고유한 ID(Device ID)를 할당하여 식별. 장치 등록 시 고유 +ID와 관련된 메타데이터(예: MAC 주소, IP, 위치 정보)를 기록 +➋ 인증 프로토콜 사용: 각 장치에 디지털 인증서(예: X.509 인증서)를 발급. 장치가 시스템에 연 +결할 때 인증서를 통해 신뢰 관계 확인 +➌ API 키 또는 토큰 기반 인증: 각 장치에 API 키 또는 OAuth 토큰 발급. 토큰은 만료 시간과 +권한 범위를 지정하여 오용 방지 +• (예시) 장치 등록 및 승인 프로세스 +➊ 장치 등록: 새로운 장치를 연결하기 전에 등록 프로세스를 통해 신뢰성을 확인 +➋ 장치 승인: 관리자 또는 시스템이 장치 정보를 검토하고 승인 절차를 진행. 승인된 장치만 시 +스템에 연결할 수 있도록 데이터베이스에 등록 +➌ 승인 목록(Whitelist) 관리: 승인된 장치의 고유 ID를 기반으로 화이트리스트 생성. 연결 요청 +시 화이트리스트를 조회하여 인증 수행 +➍ 비승인 장치 차단: 인증 실패 또는 화이트리스트에 없는 장치의 연결 시도를 즉시 차단 + + +![이미지 69-0](images/p0069_img0.png) + + +![이미지 69-1](images/p0069_img1.png) + + +![이미지 69-2](images/p0069_img2.png) + + +![이미지 69-3](images/p0069_img3.png) + + +![이미지 69-4](images/p0069_img4.png) + + +--- + +모니터링 및 유지보수 +5.1 +실시간 모니터링 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 모델의 입력 데이터와 출력 결과를 실시간으로 모니터링하고 비정상 동작을 탐지하는 것은 보 +안 위협 방지, 서비스 안정성 유지, 모델 성능 보장과 같은 다각적인 이점을 제공함 + +#### 5.1.1 + +모델의 입력 데이터, 출력 결과 등을 실시간으로 모니터링하여 비정상적인 동작을 +탐지하고 있는가? +• 입력 데이터와 출력 결과를 실시간으로 모니터링하여 비정상 동작을 탐지하려면 로그 수집 및 분 +석, AI 기반 이상 탐지, 실시간 경고 시스템, 데이터 검증 및 후처리를 포함하는 다층적 접근이 +필요함. 이러한 체계는 모델의 안정성과 신뢰성을 유지하고, 비정상 동작으로 인한 위험을 최소화 +하는 데 기여함 +• (예시) 실시간 데이터 수집 및 로깅 +➊ 입력 데이터 로깅: 모든 입력 데이터를 실시간으로 기록 +- 필수 기록 항목: 입력 데이터 유형, 크기, 요청 시간, 요청자 ID +➋ 출력 데이터 로깅: 모델의 출력 결과를 기록하여 분석 +- 기록 항목: 출력 값, 응답 시간, 요청과의 관련성(추론 결과와 입력 간 관계) +➌ 로그 관리 시스템: 대규모 로그 데이터를 효율적으로 저장하고 관리 +• (예시) 실시간 모니터링 대시보드 +➊ 시각화 도구 활용: 실시간으로 입력과 출력 데이터를 모니터링하는 대시보드 구성 +➋ 핵심 지표 추적 +- 모니터링 대상: API 호출 빈도, 응답 시간, 에러 발생률. 입력 데이터 크기 및 형식. 출력 +값의 정상 범위 여부 + + +![이미지 70-0](images/p0070_img0.png) + + +![이미지 70-1](images/p0070_img1.png) + + +![이미지 70-2](images/p0070_img2.png) + + +![이미지 70-3](images/p0070_img3.png) + + +![이미지 70-4](images/p0070_img4.png) + + +![이미지 70-5](images/p0070_img5.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +61 + +#### 5.1.2 + +모델 응답 시간, 사용 패턴을 추적하고 분석하여 보안에 의심스러운 행동을 +탐지하고 있는가? +• 모델의 응답 시간과 사용 패턴을 실시간으로 추적하고 분석하려면 로그 수집, 데이터 분석, 이상 +탐지 시스템, 실시간 알림을 포함한 다층적인 보안 전략이 필요함. 이를 통해 보안 위협을 조기에 +감지하고, 서비스 품질과 모델 신뢰성을 유지할 수 있음 +• (예시) 비정상 패턴 탐지를 위한 분석 +➊ 정적 규칙 기반 탐지: 특정 조건을 만족하는 경우 비정상으로 간주 +예: 입력 데이터 크기 초과. 예상치 못한 데이터 형식. 출력 값의 허용 범위를 벗어남 +➋ 동적 이상 탐지(Anomaly Detection): 머신러닝 기반 모델을 사용하여 이상 행동 탐지 +➌ 패턴 비교: 정상 입력/출력 데이터의 패턴과 현재 데이터를 비교. 비정상적인 요청이나 예외 +적인 출력 탐지 +• (예시) 실시간 모니터링 및 경고 시스템 +➊ 응답 시간 모니터링: 요청 응답 시간이 비정상적으로 길거나 짧은 경우 경고. 평균 응답 시간 +과 비교하여 이상치 탐지 +➋ 사용 패턴 분석 +- 비정상적인 요청 패턴: 요청이 특정 시간대에 집중됨. 예상치 못한 엔드포인트 호출 +➌ 실시간 알림 설정 +- 비정상적인 행동이 탐지되면 실시간으로 관리자에게 알림 +- 알림 방법: 이메일, SMS 등 + + +![이미지 71-0](images/p0071_img0.png) + + +![이미지 71-1](images/p0071_img1.png) + + +![이미지 71-2](images/p0071_img2.png) + + +![이미지 71-3](images/p0071_img3.png) + + +![이미지 71-4](images/p0071_img4.png) + + +--- + + +#### 5.1.3 + +AI 모델이 동작하는 서버 및 네트워크의 트래픽을 모니터링하여 비정상적인 요청을 +탐지하고 있는가? +• AI 모델이 동작하는 서버와 네트워크의 트래픽을 모니터링하여 비정상적인 요청을 탐지하려면 네 +트워크 트래픽 분석, WAF 및 IDS/IPS 도구 사용, 로그 분석, 머신러닝 기반 이상 탐지, 실시간 +경고 시스템을 포함한 다층적인 보안 접근이 필요함. 이러한 조치를 통해 네트워크 보안 위협을 +신속히 탐지하고 대응할 수 있음 +• (예시) 네트워크 트래픽 모니터링 구축 +➊ 실시간 트래픽 로깅: 모든 네트워크 트래픽(입력/출력 요청)을 실시간으로 로깅 +- 기록 항목: 요청 IP, 포트, 요청 시간, 프로토콜(TCP, UDP), 요청 크기, 응답 시간 +➋ 트래픽 흐름 분석: 네트워크 트래픽의 정상 패턴을 분석하고, 비정상적인 흐름을 식별 +예: 특정 IP에서 과도한 요청 발생 +• (예시) 비정상 요청 탐지를 위한 시스템 구성 +➊ 정적 규칙 기반 탐지: +- 사전 정의된 규칙을 기반으로 비정상적인 요청 탐지: IP/포트 차단(화이트리스트/블랙리스 +트 관리). 비인가된 요청 차단 +예: 초당 100개 이상의 요청을 보내는 IP를 차단 +➋ 머신러닝 기반 이상 탐지: 정상적인 트래픽 패턴을 학습하고 비정상적인 요청을 탐지 +➌ DPI(Deep Packet Inspection): 패킷 내부 데이터를 분석하여 비정상적 요청 탐지. 공격 패 +턴, 악성 코드, 비인가 데이터 식별 + +#### 5.1.4 + +API 호출, 입력/출력 등 요청로그를 정기적으로 분석하여 보안에 의심스러운 +동작을 탐지하고 있는가? +• API 호출, 입력/출력 요청 로그를 정기적으로 분석하여 보안 위협을 탐지하려면 로그 수집 및 저 +장, 정적 규칙 기반 탐지, 머신러닝 기반 이상 탐지, 실시간 경고 및 자동화된 차단, 요청 제한 +관리를 통합한 다층적인 보안 체계를 구축해야 함. 이러한 방법은 시스템의 보안과 신뢰성을 유지 +하는 데 필요함 +• (예시) 요청 로그 수집 및 관리 +➊ 로그 수집 체계 구축: 모든 API 호출, 입력 데이터, 출력 결과를 로그로 기록 +- 기록 항목: 요청 ID, 사용자 ID, 요청 시간, IP 주소, 엔드포인트, 요청/응답 크기, HTTP +상태 코드, 입력/출력 데이터 +➋ 로그 저장: 로그 데이터를 중앙화하여 안전하게 저장 +➌ 로그 보존 정책: 규정에 따라 로그 보존 기간 설정 +• (예시) 로그 데이터 분석 +➊ 정적 규칙 기반 분석: 사전 정의된 규칙을 사용하여 의심스러운 동작 탐지 +- 탐지 규칙 예시: 초당 요청 횟수 초과. 동일 IP에서 과도한 호출 발생. 잘못된 API 키 사용 +➋ 동적 이상 탐지: 머신러닝 기반 이상 탐지 모델로 비정상적인 요청 패턴 식별 +➌ 로그 필터링 및 클러스터링: 정상 로그와 의심스러운 로그를 분리. 비정상적 로그 그룹 식별 + + +![이미지 72-0](images/p0072_img0.png) + + +![이미지 72-1](images/p0072_img1.png) + + +![이미지 72-2](images/p0072_img2.png) + + +![이미지 72-3](images/p0072_img3.png) + + +![이미지 72-4](images/p0072_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +63 + +#### 5.1.5 + +AI 모델과 배포 환경에 대해 모의 해킹을 수행하여 잠재적인 보안 취약점을 +탐지하고 수정하고 있는가? +• AI 모델과 배포 환경에 대해 모의 해킹을 수행하려면 취약점 분석, 공격 시뮬레이션, 보고서 작성, +수정 및 재검증의 체계적인 단계를 따르는 것이 중요함. 정기적인 모의 해킹과 지속적인 보안 모니 +터링을 통해 AI 시스템의 안전성을 유지하고, 잠재적 보안 위협에 효과적으로 대응할 수 있음 +• (예시) 취약점 식별 +➊ 네트워크 및 API 테스트: AI 모델의 API 및 네트워크를 스캔하여 취약점을 식별: +- 엔드포인트 보호 상태 분석(SQL Injection, Command Injection 등) +➋ 모델 보안 테스트 +- 모델 자체의 취약점 테스트: 적대적 샘플(Adversarial Example) 입력. 모델의 민감 데이 +터 노출 가능성 +➌ 데이터 및 저장소 테스트 +- 데이터 유출 가능성 점검: 데이터베이스의 접근 제어 및 암호화 상태 확인 +- 데이터 저장소에서 PII(개인 식별 정보) 보호 여부 분석 +➍ 클라우드 및 컨테이너 환경 테스트 +- 클라우드 배포 환경의 보안 설정 검토: 권한 오용, 공개된 API 키 탐지. 컨테이너 취약점 +분석 +• (예시) 공격 벡터 시뮬레이션 +➊ AI 모델 특화 공격 테스트 +- 적대적 샘플: 모델이 잘못된 출력을 생성하도록 설계된 입력 데이터 테스트 +- 데이터 중독(Data Poisoning): 학습 데이터에 악의적인 데이터가 포함될 경우의 영향 분석 +- 모델 반출(Model Extraction): 모델 출력만으로 내부 구조를 복제하려는 시도 +➌ API 오용 및 DoS/DDoS 테스트 +- 비정상적인 API 호출 시도의 영향 분석. Rate Limiting과 Quota 설정 검증 + + +![이미지 73-0](images/p0073_img0.png) + + +![이미지 73-1](images/p0073_img1.png) + + +![이미지 73-2](images/p0073_img2.png) + + +![이미지 73-3](images/p0073_img3.png) + + +![이미지 73-4](images/p0073_img4.png) + + +--- + +5.2 +보안 패치 및 업데이트 관리 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 개발자는 AI 모델이 배포된 후에도 보안을 유지하며, 지속적으로 보안 모니터링과 유지보수를 +실시해야 함 + +#### 5.2.1 + +모델에 대한 보안 패치 및 업데이트 관리 프로세스를 구축하고 있는가? +• 보안 패치 및 업데이트 관리 프로세스를 구축하려면 정책 수립, 취약점 탐지, 패치 개발 및 테스 +트, 단계적 배포, 모니터링 및 피드백을 포함한 체계적인 접근이 필요함. 자동화 도구를 적극 활 +용하여 보안과 효율성을 동시에 확보할 수 있음 +• (예시) 취약점 탐지 및 패치 평가 +➊ 취약점 탐지: AI 모델, 종속성, 배포 환경의 취약점 스캔 +➋ 패치 필요성 평가: 취약점의 심각도 분석 +➌ 종속성 업데이트 관리: AI 모델이 의존하는 라이브러리, 프레임워크, 도구의 최신 버전 유지 +• (예시) 패치 개발 및 테스트 +➊ 패치 개발: 취약점을 해결하는 보안 패치 코드를 작성. 기존 모델 성능 및 기능에 영향을 최소 +화하도록 설계 +➋ 테스트 환경 준비: 실제 환경과 동일한 스테이징 환경 구축 +➌ 테스트 자동화: 정적 분석, 동적 분석, 회귀 테스트 자동화 +➍ AI 모델 성능 검증: 보안 패치가 모델의 성능 및 정확성에 미치는 영향을 평가 + +#### 5.2.2 + +모델 배포 후 모델 및 라이브러리의 업데이트가 정기적으로 이루어지고 +있는가? +• 모델 및 라이브러리의 업데이트가 정기적으로 이루어지고 있는지 확인하려면 정기 점검 프로세스, +자동화된 도구, 보고 체계, 정책 문서화를 활용하여 체계적으로 관리해야 함. 이를 통해 보안 취약 +점을 신속히 해결하고, 최신 기술과 기능을 적용하여 AI 모델과 환경의 안정성을 유지할 수 있음 +• (예시) 정기 점검 프로세스 +➊ 자동화된 라이브러리 취약점 검사: 취약점 스캐너를 활용하여 사용 중인 라이브러리와 프레임 +워크의 보안 상태를 점검 +➋ 모델 성능 평가: 모델이 성능 저하를 보일 경우 업데이트 필요성을 평가 +➌ 배포 환경 점검: 배포된 모델의 실행 환경 상태 점검 +• (예시) 자동화 및 모니터링 도구 설정 +➊ CI/CD(지속적 통합/지속적 배포)에 업데이트 관리 통합: 라이브러리 및 모델 업데이트를 +CI/CD 파이프라인에서 자동으로 감지하고 처리 +➋ 대시보드 및 보고: 업데이트 상태를 시각적으로 확인할 수 있는 대시보드 구축 +➌ 알림 시스템: 업데이트 필요 시 알림을 설정하여 관리자가 신속히 대응할 수 있도록 함 + + +![이미지 74-0](images/p0074_img0.png) + + +![이미지 74-1](images/p0074_img1.png) + + +![이미지 74-2](images/p0074_img2.png) + + +![이미지 74-3](images/p0074_img3.png) + + +![이미지 74-4](images/p0074_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +65 + +#### 5.2.3 + +운영 체제, 라이브러리, 프레임워크의 보안 패치를 운영 환경에 적용하기 전에 +스테이징 환경에서 패치를 테스트하고 있는가? +• 운영 체제, 라이브러리, 프레임워크의 보안 패치를 운영 환경에 적용하기 전에 스테이징 환경에서 +테스트가 이루어지고 있는지 확인하려면 스테이징 환경 구성 점검, 테스트 프로세스 문서화, 자동 +화 도구 활용, 테스트 결과 검토 및 승인 절차 확인이 필요함. 이를 통해 보안 패치가 운영 환경 +에서 문제를 일으키지 않도록 안전하게 관리할 수 있음 +• (예시) 스테이징 환경 준비 확인 +➊ 스테이징 환경 구성 상태 점검 +- 운영 환경과 동일한 설정으로 스테이징 환경을 구축: 운영 체제, 네트워크, 라이브러리, 프 +레임워크가 동일해야 함 +- 스테이징 환경에서 실제 데이터를 사용하지 않고, 테스트 데이터를 구성 +➋ 테스트 데이터 준비 +- 운영 환경을 시뮬레이션할 수 있는 충분한 양과 질의 테스트 데이터 생성 +➌ 테스트 환경 분리 +- 스테이징 환경은 운영 환경과 완전히 독립적으로 작동해야 함: 네트워크 세분화 및 자원 분리 +• (예시) 스테이징 환경에서 패치 테스트 여부 확인 방법 +➊ 테스트 기록 검토 +- 스테이징 환경에서 보안 패치 테스트가 실행된 기록을 검토: 패치 적용 로그. 테스트 실행 +결과 보고서 +➋ 모니터링 및 대시보드 활용 +- 스테이징 환경에서 패치 테스트 결과를 실시간으로 모니터링하는 대시보드 확인 +➌ 정기 점검 및 감사 +- 보안 패치 적용 프로세스와 테스트 기록이 정기적으로 감사되고 있는지 확인 + + +![이미지 75-0](images/p0075_img0.png) + + +![이미지 75-1](images/p0075_img1.png) + + +![이미지 75-2](images/p0075_img2.png) + + +![이미지 75-3](images/p0075_img3.png) + + +![이미지 75-4](images/p0075_img4.png) + + +--- + +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 개발자는 AI 모델이 더 이상 사용되지 않거나 교체될 경우, 해당 AI 모델을 안전하게 폐기해 +야 하며 관련 데이터도 완전히 삭제해야 함 + +#### 6.1.1 + +AI 모델이 더 이상 사용되지 않으면, 모델 파일을 완전히 삭제하고 +복구할 수 없도록 처리하고 있는가? +• 모델 파일을 복구 불가능하게 삭제하려면 정책 수립, 안전한 삭제 기술 활용, 삭제 검증, 로그 기 +록 및 교육과 같은 다각적인 접근이 필요함. 안전한 삭제 도구와 자동화된 프로세스를 활용하면 +효율성과 보안을 동시에 달성할 수 있음 +• (예시) 데이터 삭제 준비 +➊ 삭제 대상 식별: +- 삭제해야 할 데이터와 파일 식별(.pth, .onnx, .h5 등 모델 파일 형식), 학습 데이터, 로그 +파일, 캐시. +- 클라우드 스토리지와 로컬 스토리지 모두 포함 +➋ 파일 백업 정책 +- 삭제 전, 백업이 필요한 경우 암호화된 백업을 일정 기간 유지: 중요한 기록 보관 요구사항을 +충족하기 위해 임시 백업 보관 +• (예시) 안전한 삭제 방법 +➊ 논리적 삭제(Logical Deletion): 파일을 운영 환경에서 제거하지만 실제 데이터는 삭제되지 +않고 보관 +➋ 물리적 삭제(Physical Deletion): 파일을 스토리지에서 실제로 삭제하고 복구 불가능하도록 +처리 +➌ 안전한 삭제(Secure Deletion): 데이터를 복구할 수 없도록 덮어쓰기 방식으로 삭제 +➍ 디스크 초기화: 디스크에 저장된 모델 파일을 포함하여 모든 데이터를 완전히 삭제 +➎ 클라우드 환경에서 데이터 삭제: 클라우드 제공자의 삭제 및 데이터 보안 정책 준수 +• (예시) 삭제 프로세스 검증 +➊ 삭제 검증 수행 +- 삭제된 파일이나 데이터가 복구되지 않았음을 확인: 데이터 복구 도구를 사용해 삭제된 데 +이터 존재 여부 테스트 +➋ 삭제 로그 기록 +- 삭제 작업에 대한 기록 보관: 삭제된 파일 이름, 삭제 시간, 삭제 담당자 +- 감사 및 규제 준수를 위해 필요한 경우 보관 + + +![이미지 76-0](images/p0076_img0.png) + + +![이미지 76-1](images/p0076_img1.png) + + +![이미지 76-2](images/p0076_img2.png) + + +![이미지 76-3](images/p0076_img3.png) + + +![이미지 76-4](images/p0076_img4.png) + + +![이미지 76-5](images/p0076_img5.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +67 +• (예시) 정기적인 삭제 프로세스 검토 +➊ 삭제 프로세스 검증 +- 삭제 프로세스를 정기적으로 검토하여 최신 보안 요구사항을 반영 +➋ 감사 및 보고 +- 데이터 삭제 기록을 감사하고, 삭제 프로세스 개선을 위한 보고서를 작성 + +#### 6.1.2 + +AI 모델에서 사용 중이던 데이터가 시스템을 폐기하거나 교체할 때 +안전하게 삭제되고 있는가? +• 시스템을 폐기하거나 교체할 때 사용 중이던 데이터가 안전하게 삭제되었는지 확인하려면 정책 +수립, 삭제 대상 식별, 안전한 삭제 방법 적용, 삭제 상태 검증, 로그 기록 및 정기 감사를 포함한 +체계적인 접근이 필요함 +• (예시) 데이터 삭제 정책 및 절차 수립 +➊ 데이터 삭제 정책 정의 +- 삭제 대상: 원본 데이터, 임시 데이터, 캐시, 백업 데이터 +- 삭제 시점: 시스템 폐기, 교체 또는 데이터 사용 종료 시 +- 보존 정책: 보존 기간이 만료된 데이터 삭제 +- 법적/규제 요구사항에 따른 데이터 삭제 방식 지정 +➋ 삭제 책임자 지정 +- 데이터 삭제 프로세스를 담당할 팀 또는 개인을 지정: +▸IT 운영팀: 물리적 스토리지 관리 및 데이터 삭제 수행 +▸보안 팀: 데이터 삭제 검증 및 감사 수행 +• (예시) 데이터 삭제 대상 식별 +➊ 삭제할 데이터 목록 작성 +- 삭제가 필요한 데이터와 위치를 식별: 학습 데이터, 모델 생성 로그, 출력 데이터. 클라우드 +스토리지, 로컬 스토리지, 데이터베이스 등 +- 사용된 데이터 파일 경로와 유형 기록 +➋ 데이터 보존 필요성 평가 +- 보존 정책 또는 계약에 따라 특정 데이터가 삭제 예외 대상인지 검토 +- 법적 요구사항으로 보존이 필요한 경우 암호화 후 별도 저장 + + +![이미지 77-0](images/p0077_img0.png) + + +![이미지 77-1](images/p0077_img1.png) + + +![이미지 77-2](images/p0077_img2.png) + + +![이미지 77-3](images/p0077_img3.png) + + +![이미지 77-4](images/p0077_img4.png) + + +--- + + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 인터페이스를 +비활성화하여 외부 접근을 차단하고 있는가? +• AI 모델이 더 이상 사용되지 않을 경우 API 및 인터페이스 비활성화를 체계적으로 관리하려면 +API 상태 점검, 비활성화 수행, 모니터링 및 로그 관리와 같은 체계를 마련해야 함. 이를 통해 외 +부 접근을 완전히 차단하고 보안 위협을 예방할 수 있음 +• (예시) API 및 인터페이스 상태 점검 +➊ 연결된 API 목록 식별: AI 모델과 연결된 모든 API 및 인터페이스를 식별 +➋ 활성 상태 확인: API 및 인터페이스가 현재 활성화되어 있는지 점검 +➌ 인증 및 접근 로그 확인: 해당 API가 최근 호출된 기록이 있는지 분석 +• (예시) API 및 인터페이스 비활성화 +➊ API 엔드포인트 비활성화: API Gateway에서 불필요한 API 엔드포인트를 비활성화하거나 +삭제 +➋ 외부 접근 제어: 허용된 IP 화이트리스트에서 해당 API 제거 +➌ 인증 키 및 토큰 폐기: 사용되지 않는 API의 인증 키, 토큰, 인증서를 무효화 +➍ 인터페이스 제거: 모델과 연결된 인터페이스(예: 프론트엔드, 대시보드)를 완전히 비활성화 또 +는 제거 + + +![이미지 78-0](images/p0078_img0.png) + + +--- + +AI 서비스 제공자를 위한 +보안 안내서 + + +![이미지 79-0](images/p0079_img0.png) + + +--- + +개요 +서비스 제공자 대상 「인공지능(AI) 보안 안내서」의 특징 +●AI 서비스 제공자는 단순히 모델을 개발하는 데 그치지 않고, 이를 다양한 사용자 및 조직에게 제 +공하는 플랫폼 역할을 한다. 이러한 서비스는 광범위한 사용자 기반에 영향을 미치기 때문에 시스 +템 전반의 보안을 보장할 책임이 있다. 또한 서비스 제공자는 API와 사용자 인터페이스를 안전하 +게 설계하여 악용 가능성을 줄여야 한다. 예를 들어, API 키 탈취나 DoS 공격을 방지하는 것은 +서비스 제공자의 역할이다. 「인공지능(AI) 보안 안내서」는 서비스 제공자를 위한 보안 요구사항 및 +검증항목을 제시하여 서비스 제공자들이 활용할 수 있도록 하였다. +●또한 AI 서비스 제공자는 사용자 데이터를 보호하고 모델 훈련 또는 추론 과정에서 데이터가 유출 +되거나 악용되지 않도록 해야 한다. 서비스 제공자 대상 「인공지능(AI) 보안 안내서」는 서비스 제 +공자의 특수한 역할과 책임을 반영하여, 보안 위협을 예방하고 서비스의 신뢰성을 강화하며, AI 기 +술이 안전하게 사용될 수 있도록 돕는 중요한 지침서가 될 수 있을 것으로 기대된다. +서비스 제공자 대상 「인공지능(AI) 보안 안내서」의 활용 방안 +●「인공지능(AI) 보안 안내서」는 AI 서비스가 보안(Security) 관련 공격을 받거나 받을 우려가 있는 +경우 서비스 제공자가 실제로 취해야 할 조치 사항으로 활용할 수 있다. AI 개발자가 AI 서비스 +제공자를 겸하는 경우도 있으나, 동 안내서에는 서비스 제공자에 해당하는 내용만을 다루고 있으므 +로 개발자 관련 조치 내용에 대해서는 개발자 대상 「인공지능(AI) 보안 안내서」를 동시에 참조하여 +활용할 필요가 있다. +안내서 작성 과정 및 참고 자료 +●서비스 제공자 대상 「인공지능(AI) 보안 안내서」 작업도 2024년 6월부터 「AI 보안 정책 포럼」을 +구성하여 운영하였고, 그 외에도 다양한 의견을 수렴하는 과정을 거쳤다. 초안 작성한 후, 학계 및 +산업계 전문가 등의 의견수렴을 거쳐 최종본을 마련하였다. + + +![이미지 80-0](images/p0080_img0.png) + + +![이미지 80-1](images/p0080_img1.png) + + +![이미지 80-2](images/p0080_img2.png) + + +![이미지 80-3](images/p0080_img3.png) + + +![이미지 80-4](images/p0080_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +71 +AI 서비스 제공자 대상 보안 프레임워크(Security Framework) +보안 프레임워크(Security Framework) - 예방(Prevention) 단계 +예방(Prevention) 단계에서의 보안 목표: 예방 단계의 Framework는 AI 시스템에 대한 잠재적 위협 +을 사전에 대비하고 보호하기 위한 다양한 전략과 메커니즘을 포함한다. +●거버넌스(Governance): 보안 정책, 절차, 표준, 가이드라인을 수립하여 AI 워크로드와 관련된 역 +할과 책임을 명확히 한다. +●위험 관리(Risk Management): AI 시스템과 서비스에 대한 보안 요구사항을 준수하기 위해 보안 +조치를 설계, 적용, 평가, 검증한다. +그림 3-1 AI 서비스 제공자 대상 보안 프레임워크(Security Framework) - 예방 단계 + + +![이미지 81-0](images/p0081_img0.png) + + +![이미지 81-1](images/p0081_img1.png) + + +![이미지 81-2](images/p0081_img2.png) + + +![이미지 81-3](images/p0081_img3.png) + + +![이미지 81-4](images/p0081_img4.png) + + +![이미지 81-5](images/p0081_img5.png) + + +![이미지 81-6](images/p0081_img6.png) + + +--- + +예방 단계에 대한 보안 기술(Security Technology) 적용 방안 +●데이터 보호(Data Protection) +- 데이터 보호는 AI 시스템에서 데이터의 기밀성, 무결성, 가용성을 유지하여 보안성을 확보하는 +중요한 과정이다. 이는 데이터가 불법적으로 접근되거나 수정되지 않도록 하며, 시스템의 신뢰성 +을 높이는 역할을 한다. +●모델 보안 유지(Secure Model) +- 모델 보안 유지(Secure Model)는 AI 시스템에서 모델의 보안을 보장하기 위한 다양한 활동과 +절차를 포함한다. 이를 통해 AI 모델이 안전하게 작동하고 신뢰성을 유지하도록 한다. +●사이버 보안(Cyber Security) 기술 적용 +- AI Security Framework에서 Cyber Security는 AI 시스템 및 데이터의 보안을 강화하는 데 +중점을 둔다. 이는 다양한 보안 기술과 절차를 통해 AI 시스템을 보호하고, 데이터 무결성과 기 +밀성을 유지하며, 시스템의 가용성을 보장하는 것을 목표로 한다. +- 구성 요소(Component)별 보안 목표 및 요구사항은 다음과 같다. +표 3-1 예방 단계에 대한 보안 기술 구성 요소별 보안 목표 및 요구사항 +구분 +보안 목표 및 요구사항 +Application +Security +(응용 프로그램 +보안) +[목표] AI 애플리케이션의 보안을 강화하여 취약점 및 공격으로부터 보호한다. +∙코드 리뷰 및 테스트: 애플리케이션의 코드를 주기적으로 리뷰하고, 보안 취약점을 발견하여 수정한다. +∙취약점 스캐닝: 애플리케이션 내의 보안 취약점을 탐지하고, 이를 해결하기 위한 조치를 취한다. +∙보안 패치 관리: 애플리케이션에 대한 최신 보안 패치를 적용하고 보안취약점을 해결한다. +Network +Security +(네트워크 보안) +[목표] AI 시스템이 연결된 네트워크를 보호하여 데이터의 무결성과 기밀성을 유지한다. +∙방화벽 설정 및 관리: 외부 공격으로부터 네트워크를 보호하기 위해 방화벽을 설정하고 관리한다. +∙침입 탐지 시스템 (IDS): 네트워크 트래픽을 모니터링하여 비정상적인 활동을 탐지하고 대응한다. +∙가상 사설망 (VPN): 네트워크를 통한 데이터 전송 시 암호화된 연결을 제공하여 데이터의 기밀 +성을 유지한다. +System Security +(시스템 보안) +[목표] AI 시스템의 운영 체제 및 관련 인프라를 보호하여 무단 접근과 공격을 방지한다. +∙운영 체제 보안 설정: 시스템의 운영 체제에 대한 보안 설정을 강화하여 취약점을 줄인다. +∙정기적인 시스템 업데이트: 운영 체제 및 소프트웨어에 대한 최신 업데이트를 적용하여 보안을 +유지한다. +∙시스템 모니터링: 시스템 로그를 주기적으로 모니터링하여 비정상적인 활동을 탐지하고 대응한다. +DB Security +(데이터베이스 +보안) +[목표] AI 시스템에서 사용되는 데이터베이스를 보호하여 데이터 무결성과 기밀성을 유지한다. +∙접근 제어: 데이터베이스에 대한 접근 권한을 관리하여 무단 접근을 방지한다. +∙데이터 암호화: 저장된 데이터를 암호화하여 데이터 유출 시에도 기밀성을 유지한다. +∙백업 및 복구 계획: 데이터베이스의 정기적인 백업을 수행하고, 데이터 손실 시 복구 계획을 마련한다. +Device Security +(장치 보안) +[목표] AI 시스템에 연결된 장치를 보호하여 보안 위협으로부터 안전하게 유지한다. +∙장치 인증 및 승인: AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치만 +연결되도록 한다. +∙장치 보안 설정: 각 장치에 대한 보안 설정을 강화하여 취약점을 최소화한다. +∙펌웨어 업데이트: 장치의 펌웨어를 최신 상태로 유지하여 보안 취약점을 해결한다. + + +![이미지 82-0](images/p0082_img0.png) + + +![이미지 82-1](images/p0082_img1.png) + + +![이미지 82-2](images/p0082_img2.png) + + +![이미지 82-3](images/p0082_img3.png) + + +![이미지 82-4](images/p0082_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +73 +보안 프레임워크(Security Framework) - 탐지·대응(Detection) 단계 +탐지·대응(Detection) 단계에서의 Security Framework 목표: 탐지・대응(Detection) 단계의 Framework +는 사업자 관점에서 AI 시스템의 보안 위협을 탐지하기 위한 전략과 메커니즘을 설명한다. 탐지 +(Detection) 단계는 AI 시스템에서 발생할 수 있는 보안 위협을 실시간으로 모니터링하고, 이를 신속 +하게 식별하여 대응할 수 있도록 하는 데 중점을 둔다. +●거버넌스(Governance): AI 생명주기 전반에 대한 위험 관리를 수립하고, AI 워크로드에 대한 탐 +지 절차, 매뉴얼, 사고대응 팀을 배정한다. +●위험 관리(Management): AI 시스템과 서비스에 대한 보안 요구사항을 준수하기 위해 보안 조치 +를 적용한다. +그림 3-2 AI 서비스 제공자 대상 보안 프레임워크(Security Framework) - 탐지・대응 단계 + + +![이미지 83-0](images/p0083_img0.png) + + +![이미지 83-1](images/p0083_img1.png) + + +![이미지 83-2](images/p0083_img2.png) + + +![이미지 83-3](images/p0083_img3.png) + + +![이미지 83-4](images/p0083_img4.png) + + +![이미지 83-5](images/p0083_img5.png) + + +![이미지 83-6](images/p0083_img6.png) + + +--- + +탐지·대응(Detection) 단계에 대한 보안 기술(Security Technology) 적용 방안 +●데이터 이상 징후 탐지(Data Anomaly Detection) +- 데이터 이상 징후 탐지는 AI 시스템의 데이터를 정기적으로 점검하고, 실시간 모니터링 시스템을 통 +해 이상 징후를 감지하며, 체크리스트를 활용하여 테스트와 훈련 단계를 점검하는 과정이다. 이를 통 +해 데이터의 무결성, 기밀성, 가용성을 보장하고, AI 시스템의 안정성과 신뢰성을 유지할 수 있다. +●모델 보안 유지(Secure Model) +- 모델 보안 유지는 AI 모델이 안전하게 동작할 수 있도록 알고리즘 검증, 위험 평가 및 모델 조 +정, 소프트웨어 시각화 도구를 통한 프로세스 자동화 등의 과정을 포함한다. 이를 통해 AI 모델 +의 신뢰성을 높이고, 외부 위협으로부터 보호할 수 있다. +●사이버 보안(Cyber Security) 기술 적용 +- 탐지·대응(Detection) 부문별 목표 및 요구사항 +표 3-2 탐지・대응 단계에 대한 보안 기술 구성 요소별 보안 목표 및 요구사항 +구분 +보안 목표 및 요구사항 +Data Collection +Modules +(데이터 수집 모듈) +[목표] 다양한 데이터를 수집하기 위한 장치와 방법을 추진한다. +∙장비 에이전트 설치, API 연결, 명령 실행, 추출 파일, 수동 등록, PC/서버 보안, +PKI/SSO, NMS, SMS 등을 통해 데이터를 수집한다. +∙(예시) 네트워크 장비에 에이전트를 설치하여 데이터 수집, API를 통해 외부 시스템과 연 +결, 서버의 보안 로그를 수집한다. +Data Collection System +(데이터 수집 시스템) +[목표] 실시간 데이터 수집 및 분석, 이벤트 감지를 담당한다. +∙실시간으로 데이터를 수집하고, 이를 분석하여 보안 이벤트를 감지한다. +∙(예시) 실시간 로그 수집 시스템, 네트워크 트래픽 분석 시스템, 보안 이벤트 모니터링 시스템 +Data Management +System +(데이터 관리 시스템) +[목표] 데이터베이스 분석, 데이터 평가, 설정 및 변경 이력 관리 등을 포함한 데이터 관리 +기능을 제공한다. +∙지속적인 DB 분석, 설정 변경 이력 관리, 관리 작업 및 데이터 모니터링, 정기 보고서 작 +성, 기능 개선, 로그 분석, 템플릿 생성, 작업 자동화 등을 수행한다. +∙(예시) 데이터베이스 관리 시스템(DBMS), 로그 분석 도구, 자동화된 데이터 모니터링 및 보고 시스템 +- 핵심 보안기술(Core Security)별 목표 및 요구사항 +구분 +목표 및 요구사항 +Prevention System +(예방 시스템) +[목표] 침해 위험 예측 및 관리, 실시간 침해 및 정보 손상 감지, 대응 시스템 연계 등을 담당한다. +∙침해 위험을 예측하고 관리하며, 실시간으로 침해 및 정보 손상을 감지하고 대응 시스템 +과 연계한다. +∙(예시) 개인정보 보호 시스템, 실시간 침해 감지 시스템, 침해 대응 연계 시스템 +Detection and +Response Measures +(탐지 및 대응 조치) +[목표] 실시간 데이터 수집 및 분석, 다양한 침해 상황 및 대응 시나리오 수립을 포함한다. +∙실시간으로 데이터를 수집하고 분석하며, 다양한 침해 상황에 대한 시나리오를 수립하고 +대응 조치를 마련한다. +∙(예시) 침해 대응 시나리오, 실시간 데이터 분석 시스템, 침해 대응 절차 수립 +Error Occurrence and +Reporting +(오류 발생 및 보고) +[목표] 실시간 오류 감지, 오류 발생 및 보고를 담당한다. +∙실시간으로 오류를 감지하고, 발생한 오류를 저장 및 보고한다. +∙(예시) 오류 감지 시스템, 오류 보고 시스템, 실시간 오류 모니터링 도구 + + +![이미지 84-0](images/p0084_img0.png) + + +![이미지 84-1](images/p0084_img1.png) + + +![이미지 84-2](images/p0084_img2.png) + + +![이미지 84-3](images/p0084_img3.png) + + +![이미지 84-4](images/p0084_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +75 +AI 서비스 제공자를 위한 보안 요구사항 및 검증항목 +체크리스트 요약 +생명주기 +요구사항 및 체크리스트 +서비스제공자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +1 +서비스 기획 +및 설계 +(AI 개발자, AI 서비스 제공자 공통사항) 거버넌스 및 위험관리 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +○ +○ +○ + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +○ +○ +○ + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +○ +○ +○ +1.2 +AI 서비스에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 위험요소를 +분석・도출하고 있는가? +○ +○ +○ + +#### 1.2.2 + +AI 서비스에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +○ +○ +○ + +#### 1.2.3 + +AI 서비스에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +○ +○ +○ +(AI 서비스 제공자) 계약관리 +1.3 +서비스 수준 계약(SLA) 관리 + +#### 1.3.1 + +공급업체와 계약시, SLA에 보안요구 사항을 명확히 포함했는가? +○ +○ +○ + +#### 1.3.2 + +보안 침해 발생 시를 대비하여, 대응 계획을 수립하고 있는가? +○ +○ +○ +○ + +#### 1.3.3 + +보안 침해 발생 시를 대비하여, 책임 소재를 명확히 하고 있는가? +○ +○ +○ +2 +서비스 +개발 및 +구축 +2.1 +코드 취약 점검 등 관리점 + +#### 2.1.1 + +정적 및 동적 코드 분석 도구를 사용하여 소스 코드의 보안 취약점을 분석하고 있 +는가? +○ +○ +○ + +#### 2.1.2 + +코드 리뷰 프로세스를 도입하여 보안 문제가 있는 부분을 검토하고 개선하고 있는 +가? +○ +○ +○ +2.2 +모델 환경의 보안 + +#### 2.2.1 + +모델 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 최소화하여 무 +단 접근을 방지하고 있는가? +○ +○ +○ + +#### 2.2.2 + +모델이 악의적으로 수정되지 않도록 모델의 무결성을 보장하는 방법을 적용하고 +있는가? +○ +○ +○ + +#### 2.2.3 + +보안 모니터링 도구를 사용하여 모델의 비정상적인 활동을 감지하고, 실시간으로 +대응할 수 있는 체계를 구축하고 있는가? +○ +○ +○ + + +![이미지 85-0](images/p0085_img0.png) + + +![이미지 85-1](images/p0085_img1.png) + + +![이미지 85-2](images/p0085_img2.png) + + +![이미지 85-3](images/p0085_img3.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +서비스제공자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +2 +서비스 +개발 및 +구축 +2.3 +데이터 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.3.1 + +적대적 공격 등 데이터 공격에 대한 방어 수단을 강구하고 있는가? +○ +○ +○ + +#### 2.3.2 + +데이터 저장 및 전송 시 무결성을 보호하기 위한 조치를 하고 있는가? +○ +○ +○ + +#### 2.3.3 + +중요 데이터에 대한 기밀성 유지를 위해 보호 방안을 마련하고 있는가? +○ +○ +○ + +#### 2.3.4 + +전송구간에서 중요정보 유출을 방지하기 위한 보호 방안을 마련하고 있는가? +○ +○ +○ + +#### 2.3.5 + +데이터 유출시 책임추적을 할 수 있도록 조치를 하고 있는가? +○ +○ +○ +○ +2.4 +API 및 인터페이스 보안 + +#### 2.4.1 + +API 통신을 암호화하여 데이터가 전송되는 구간에서 외부 공격에 대한 방어를 하 +고 있는가? +○ +○ +○ + +#### 2.4.2 + +모든 API 요청에 대해 인증 및 권한 관리를 강화하고, 중요 데이터에 접근할 때는 +강한 인증 메커니즘을 적용하고 있는가? +○ +○ +○ + +#### 2.4.3 + +API 트래픽은 암호화 기술을 사용하여 보호하고, 데이터를 안전하게 주고 받도록 +보장하고 있는가? +○ +○ +○ + +#### 2.4.4 + +API 호출 제한(Rate Limiting)을 설정하여 과도한 요청을 방지하고, 비정상적인 +요청 패턴을 탐지하여 차단하고 있는가? +○ +○ +○ +3 +서비스 +제공 및 +운영 +3.1 +로그 및 운영 데이터 보안 + +#### 3.1.1 + +데이터 처리 중 접속로그 관리를 강화하고 있는가? +○ +○ +○ + +#### 3.1.2 + +로그 파일 및 운영 데이터에 암호화를 적용하고, 중요정보는 별도로 관리하여 유출 +을 방지하고 있는가? +○ +○ +○ + +#### 3.1.3 + +운영 중 발생하는 데이터를 안전하게 저장하고, 접근 제어를 통해 인증된 관리자만 +로그에 접근할 수 있도록 설정하고 있는가? +○ +○ +○ + +#### 3.1.4 + +로그 데이터 접근 권한을 최소화하고, 접근 제어 및 사용자 활동 기록을 통해 비정 +상적인 접근을 탐지하고 있는가? +○ +○ +○ +4 +서비스 +유지보수 및 +지원 +4.1 +모니터링, 업데이트 및 패치 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 4.1.1 + +지속적인 사용자 경험 모니터링을 위해 사용자 로그를 수집・관리하고 있는가? +○ +○ +○ + +#### 4.1.2 + +AI 시스템이 정상적으로 작동하지 않거나 예기치 못한 오류가 발생할 경우 이를 +조기에 탐지하고 대응하는 메커니즘이 있는가? +○ +○ +○ + +#### 4.1.3 + +AI 시스템의 보안 패치나 모델 업데이트가 정기적으로 이루어지고 있는가? +○ +○ +○ +4.2 +성능 및 장애 관리 + +#### 4.2.1 + +서비스 장애가 발생했을 때 자동으로 복구할 수 있도록 하고 있는가? +○ +○ +○ + + +![이미지 86-0](images/p0086_img0.png) + + +![이미지 86-1](images/p0086_img1.png) + + +![이미지 86-2](images/p0086_img2.png) + + +![이미지 86-3](images/p0086_img3.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +77 +생명주기 +요구사항 및 체크리스트 +서비스제공자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI + +#### 4.2.2 + +모델 성능을 지속적으로 모니터링하고, 성능 저하가 감지되면 재학습을 통해 성능 +을 유지하고 있는가? +○ +○ +○ + +#### 4.2.3 + +실시간으로 모델 드리프트 탐지 시스템을 운영하여 모델 성능이 저하될 경우 즉시 +대응할 수 있는 체계를 마련하고 있는가? +○ +○ +○ + +#### 4.2.4 + +정기적으로 모델 재학습 및 업데이트를 수행하여 새로운 데이터 패턴을 반영하고, +성능을 개선하고 있는가? +○ +○ +○ + +#### 4.2.5 + +AI 서비스에 대해 다중화(HA) 및 백업 시스템을 구축하여 장애 발생 시에도 서비 +스가 연속적으로 제공될 수 있도록 하고 있는가? +○ +○ +○ + +#### 4.2.6 + +침입차단시스템 등을 통해 외부에서 발생하는 DoS/DDoS 공격을 방어하고, 실 +시간 모니터링 시스템을 운영하여 장애를 빠르게 감지하고 대응하고 있는가? +○ +○ +○ +5 +피드백 +및 +서비스 개선 +5.1 +사용자 피드백 관리 + +#### 5.1.1 + +사용자 피드백 시스템에 입력 검증 및 필터링을 적용하여 악성 코드나 비정상적인 +데이터의 입력을 차단하고 있는가? +○ +○ +○ + +#### 5.1.2 + +피드백을 자동으로 분석하기 전에 사전 검증 절차를 마련하여 피드백 데이터의 +무결성을 확인하고 있는가? +○ +○ +○ + +#### 5.1.3 + +최소 권한 원칙(Least Privilege)을 적용하여 피드백 및 개선 과정에서 접근할 수 +있는 권한을 최소화하고 있는가? +○ +○ +○ + +#### 5.1.4 + +피드백 처리 및 개선 과정에서 이루어진 모든 접근 및 변경 사항을 감사 로그로 +기록하고, 정기적으로 검토하여 무단 접근을 탐지하고 있는가? +○ +○ +○ +6 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 6.1.1 + +모델 파기 시, 모델 파일을 완전히 삭제하고 복구할 수 없도록 처리하고 있는가? +○ +○ +○ + +#### 6.1.2 + +시스템을 폐기하거나 교체할 때 AI 모델에서 사용 중이던 관련 파일 및 데이터를 +안전하게 삭제하고 있는가? +○ +○ +○ + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 인터페이스를 비활 +성화하여 외부 접근을 차단하고 있는가? +○ +○ +○ + + +![이미지 87-0](images/p0087_img0.png) + + +![이미지 87-1](images/p0087_img1.png) + + +![이미지 87-2](images/p0087_img2.png) + + +![이미지 87-3](images/p0087_img3.png) + + +--- + +서비스 기획 및 설계 +<1.1 AI 보안(Security) 거버넌스 체계 구축>, <1.2 AI 서비스에 대한 위험관리 계획의 수립>은 AI 개발자, +AI 서비스 제공자 모두에게 해당하는 공통사항으로 <제2장. AI 개발자를 위한 보안 안내서>를 참고하여 +적용하기 바랍니다. +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 보안 거버넌스는 단순한 보안 조치를 넘어 기업의 리스크를 줄이고, 법적 규제를 준수하며, 지 +속 가능성을 확보하는 핵심적인 프레임워크임. AI가 기업에서 점점 더 중요한 기술로 자리 잡고 +있는 만큼, 기업들은 전문 조직 구성, 정책 수립, 전문인력 확보 등 AI 보안 거버넌스 체계를 구축 +하여 AI 서비스가 안정적으로 운영이 되도록 해야 함 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +1.2 +AI 서비스에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 서비스를 제공하는 기업은 데이터 조작, 모델 탈취, 적대적 공격 등 다양한 보안 위협에 노출 +될 수 있어, 이를 예방하고 대응하기 위한 위험관리 계획이 필요함. 위험관리 계획을 통해 AI 서 +비스 제공 생명주기에 걸쳐 나타날 수 있는 위험요소를 분석·도출하고 위험요소를 제거·완화하기 +위한 방안을 통해 AI 시스템의 보안성과 안전성을 유지해야 함 + +#### 1.2.1 + +AI 서비스 제공 생명주기에 걸쳐 나타날 수 있는 위험요소를 분석・도출하고 +있는가? + +#### 1.2.2 + +AI 서비스에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? + +#### 1.2.3 + +AI 서비스에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? + + +![이미지 88-0](images/p0088_img0.png) + + +![이미지 88-1](images/p0088_img1.png) + + +![이미지 88-2](images/p0088_img2.png) + + +![이미지 88-3](images/p0088_img3.png) + + +![이미지 88-4](images/p0088_img4.png) + + +![이미지 88-5](images/p0088_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +79 +1.3 +서비스 수준 계약(SLA) 관리 +• AI 서비스의 보안 요구 사항이 명확하게 정의되지 않으면 이후 단계에서 발생할 수 있는 보안 문 +제에 충분히 대비하지 못하게 됨. 이로 인해 데이터 보호, 모델 보호, 운영 보안 측면에서 취약점 +이 발생할 수 있음 +※ 서비스 수준 계약(SLA)은 공급업체가 고객에게 제공하기로 약속한 서비스 수준을 명시하는 아웃소싱 및 기술 +공급업체 계약임. 이 계약에는 가동 시간, 납품 시간, 응답 시간 및 해결 시간 등의 지표가 포함되어 있음 + +#### 1.3.1 + +공급업체와 계약 시, SLA에 보안요구 사항을 명확히 포함했는가? +• SLA에 보안 요구 사항을 명시함으로써 위험 관리에 선제적으로 대응할 수 있는 기회를 제공받 +음. SLA는 잠재적인 위험과 위협을 미리 식별하고 비즈니스 이해관계자가 이러한 문제를 방지하 +거나 완화하기 위한 계획을 개발하는 데 도움이 됨 +• (예시) 데이터 보안 관련 명시 +- 데이터 암호화: 데이터 저장 및 전송 중 암호화 수준(예: AES-256)과 구현 방법을 명시 +- 데이터 무결성: 데이터 무결성을 확인하고 보장하기 위한 검증 메커니즘(예: 해싱, 서명 등) +- 데이터 소유권 및 사용 권한: 데이터의 소유권이 AI 서비스 제공기업에 있고, 공급업체는 명시 +된 용도로만 데이터를 사용할 수 있도록 규정 +- 데이터 반환 및 삭제: 계약 종료 시 데이터 반환과 안전한 삭제 절차를 명확히 기술 +• (예시) 보안 모니터링 및 위협 탐지 관련 명시 +- 보안 이벤트 모니터링: 보안 정보 및 이벤트 관리(SIEM) 시스템을 통해 실시간 모니터링 및 +이상 탐지 수행 +- 위협 탐지 및 경고: 공급업체가 비정상적인 활동이나 보안 위협을 실시간으로 탐지하고 경고를 +제공. +- 로그 관리: 모든 데이터 및 시스템 활동 로그를 생성, 보관, 분석하도록 요구. 보관 기간을 명시 + + +![이미지 89-0](images/p0089_img0.png) + + +![이미지 89-1](images/p0089_img1.png) + + +![이미지 89-2](images/p0089_img2.png) + + +![이미지 89-3](images/p0089_img3.png) + + +![이미지 89-4](images/p0089_img4.png) + + +--- + + +#### 1.3.2 + +보안 침해 발생 시를 대비하여, 대응 계획을 수립하고 있는가? +• SLA에 보안 요구 사항을 명시하면, 보안 침해 발생 시 대응 계획이 명확히 설정되고, 문제 발생 +시 혼란을 최소화할 수 있음 +• (예시) 보안 침해의 정의 및 범위 명확화 +- 보안 침해 정의: SLA 계약서에서 “보안 침해”의 정확한 정의를 명확히 기술 +예: 데이터 유출, 무단 접근, 시스템 무결성 손상, 서비스 거부(DoS), 악성코드 감염 등, AI 탈옥 등 +- 범위 및 영향: 침해가 발생할 수 있는 데이터, 시스템, 네트워크의 범위와 이로 인한 영향 수준 +을 명확히 명시 +• (예시) 침해 탐지 및 보고 +- 탐지 의무: 공급업체가 보안 침해를 탐지해야 하는 방법과 시스템(예: SIEM, IDS/IPS)을 명시 +- 보고 시간: 침해 탐지 후 AI 서비스 제공기업에 보고해야 하는 최대 시간을 명시 +- 보고 방식: 보고 절차와 채널(예: 이메일, 전화, 전용 포털)을 명시 +- 초기 보고 내용: 침해의 유형, 범위, 잠재적 영향, 즉각적 대응 조치 등을 포함한 초기 보고서 +작성 요구 + + +![이미지 90-0](images/p0090_img0.png) + + +![이미지 90-1](images/p0090_img1.png) + + +![이미지 90-2](images/p0090_img2.png) + + +![이미지 90-3](images/p0090_img3.png) + + +![이미지 90-4](images/p0090_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +81 + +#### 1.3.3 + +보안 침해 발생 시를 대비하여, 책임 소재를 명확히 하고 있는가? +• SLA에 보안 요구 사항이 명시되지 않으면, 서비스 제공 중에 보안 침해가 발생해도 책임 소재가 +불분명해질 수 있음. 따라서 SLA에 보안 요구 사항을 명확하게 포함시키고, 보안 침해 발생 시 +책임 소재를 명확히 규정하는 것이 필요함 +• (예시) 책임 소재 정의 +- 공급업체의 책임: 공급업체가 제공하는 서비스 및 시스템에서 발생한 보안 침해에 대한 책임을 +명확히 함 +예: 클라우드 인프라 보안, 데이터 저장 및 전송 과정의 암호화, 시스템 취약점 관리 +- AI 서비스 제공기업의 책임: 제공기업이 직접 관리하는 부분에서 발생하는 보안 침해는 제공기 +업이 책임을 짐 +- 공동 책임 구역: 데이터 전송, API 통합 등 양측이 상호작용하는 영역에서의 책임 분할을 명확 +히 정의 +(예시) 보안 의무 명시 +- 공급업체의 보안 의무: 공급업체가 준수해야 할 보안 표준 및 의무를 명시. 보안 취약점 점검, +주기적인 침투 테스트, 데이터 암호화 적용 등 구체적인 보안 조치를 SLA에 포함 +- AI 서비스 제공기업의 의무: 공급업체에게 제공하는 데이터의 정확성과 무결성을 보장할 의무. +적법한 사용 및 데이터 제공 조건을 준수 +(예시) 법적 및 재정적 책임 +- 재정적 보상: 보안 침해로 인해 발생한 금전적 손실, 벌금, 고객 보상 등에 대한 책임 소재를 +명확히 함 +예: “공급업체의 과실로 발생한 손실은 공급업체가 전적으로 책임진다.” +- 책임 제한: 공급업체의 책임 한도를 설정하되, 중과실이나 중대한 위반에는 예외를 둠 +- 보험 가입: 공급업체가 사이버 보험에 가입하고, 사고 발생 시 이를 통해 보상을 제공하도록 +요구 + + +![이미지 91-0](images/p0091_img0.png) + + +![이미지 91-1](images/p0091_img1.png) + + +![이미지 91-2](images/p0091_img2.png) + + +![이미지 91-3](images/p0091_img3.png) + + +![이미지 91-4](images/p0091_img4.png) + + +--- + +서비스 개발 및 구축 +2.1 +코드 취약점 점검 등 관리 +• AI 서비스 과정에서 소스 코드나 알고리즘에 보안 취약점이 존재할 경우, 공격이 발생할 수 있음. +특히 공개된 코드나 외부 라이브러리를 사용할 때 보안에 취약할 수 있음 + +#### 2.1.1 + +정적 및 동적 코드 분석 도구를 사용하여 소스 코드의 보안 취약점을 분석하고 +있는가? +• AI 서비스를 구현하는 과정에서 소스 코드나 알고리즘에 보안 취약점이 존재할 경우, 공격자가 +이를 악용할 수 있음. 특히 공개된 코드(오픈 소스코드)나 외부 라이브러리를 사용할 때 보안에 +취약할 수 있음 +• 정적 및 동적 코드 분석 도구를 사용하여 소스 코드의 보안 취약점을 탐지하고 수정함 +동적 분석 +프로그램을 실행하여 평가하는 것을 포함함. 이 유형의 분석은 메모리 사용, 성능 및 잠재적인 +런타임 오류를 포함한 런타임 동작을 확인함. 메모리 누수, 동시성 문제 및 잘못된 프로그램 출 +력과 같이 코드가 실행 중일 때만 나타나는 문제를 식별하는 데 유용함 +정적 분석 +코드를 실행하지 않고 검사함. 이 방법은 코드의 구조, 제어 흐름 및 데이터 사용을 분석하여 +구문 오류, 코드 표준 위반 및 잠재적 보안 취약성을 탐지하는 데 중점을 둠 +동적 분석과 정적 분석 비교 +• Generative AI 서비스 제공시 정적 및 동적 코드 분석 도구를 활용하여 보안 취약점을 분석하는 +것은 유해 콘텐츠 생성 방지, 데이터 보호, API 및 서비스 보안 강화 등을 위해 필요함 +- 유해 콘텐츠 생성 방지 +▸부적절한 출력 방지: Generative AI는 사용자 입력을 바탕으로 텍스트, 이미지, 코드 등을 +생성함. 정적 분석 도구는 코드 상에서 유해 콘텐츠를 생성할 가능성이 있는 로직(예: 검증되 +지 않은 입력 처리, 비정상적 조건)을 식별할 수 있음 +▸입력 검증 강화: 동적 분석 도구는 실제 사용 시 모델이 예상치 못한 입력으로 유해한 결과 +를 생성할 가능성을 시뮬레이션하여 보완할 수 있음 +- 데이터 보호 +▸훈련 데이터 노출 방지: Generative AI는 훈련 데이터 기반으로 작동하며, 코드 취약점이 +있으면 훈련 데이터 일부가 의도치 않게 생성 결과에 포함될 수 있음. 코드 분석 도구는 데이 +터 노출을 유발할 수 있는 부분을 자동으로 탐지함 +- API 및 서비스 보안 강화 +▸API 남용 방지: 정적 분석은 API 인증, 입력 검증, 속도 제한과 같은 보안 메커니즘이 올바 +르게 구현되었는지 검토할 수 있음 + + +![이미지 92-0](images/p0092_img0.png) + + +![이미지 92-1](images/p0092_img1.png) + + +![이미지 92-2](images/p0092_img2.png) + + +![이미지 92-3](images/p0092_img3.png) + + +![이미지 92-4](images/p0092_img4.png) + + +![이미지 92-5](images/p0092_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +83 +▸실시간 위협 대응: 동적 분석 도구는 실행 중인 서비스에 대한 악의적인 요청 시나리오(예: +SQL 인젝션, XSS, DoS 공격)를 테스트하여 취약점을 보완함 +- 모델 및 서비스 신뢰성 보장 +▸예상치 못한 동작 방지: 정적 및 동적 분석은 코드가 다양한 입력과 상황에서 의도대로 작동 +하는지 확인하고, 생성 결과의 신뢰성을 높이는 데 도움을 줌 + +#### 2.1.2 + +코드 리뷰 프로세스를 도입하여 보안 문제가 있는 부분을 검토하고 개선하고 +있는가? +• 코드 리뷰는 본인이 작성하지 않는 코드의 내용을 점검하고, 피드백을 주는 과정임. +• 여기서 피드백은 오타, 버그에 대한 가능성, 좋은 코드를 위한 피드백이 될 수 있음. 예상되는 문 +제를 일찍 파악하는 이점도 있을 뿐만 아니라 무엇보다 해당 코드를 작성한 사람에게만 책임이 +있는 것이 아니라, 서비스 제공자에게도 있다는 문화를 만들어내는 것에 목표가 있음. AI 서비스 +제공기업이 코드 리뷰 프로세스를 통해 보안 문제를 검토하고 개선하려면 체계적이고 철저한 절 +차를 도입해야 함 +• Predictive AI 서비스 제공 시 코드 리뷰 프로세스를 도입하여 보안 문제가 있는 부분을 검토하 +는 것은 예측 결과의 정확성과 무결성 보장, 중요 데이터 보호, 시스템 안정성 및 성능 보장 등을 +위해 필요함 +- 예측 결과의 정확성과 무결성 보장 +▸오류 및 편향 제거: Predictive AI 모델의 로직에서 데이터 처리 오류나 편향을 유발할 수 +있는 부분을 코드 리뷰를 통해 식별하고 수정할 수 있음 +▸데이터 드리프트 방지: 데이터 입력 및 처리 로직이 최신 데이터에 적합하게 구현되었는지 +검토하여, 데이터 드리프트로 인한 예측 오류를 줄일 수 있음 +- 중요 데이터 보호 +▸데이터 유출 방지: Predictive AI는 종종 민감한 데이터를 처리함. 코드 리뷰를 통해 데이터 +가 안전하게 처리되고 저장되는지 확인하여 데이터 유출 사고를 예방할 수 있음 +▸액세스 제어 검증: 코드에서 데이터 접근 제어가 적절히 구현되었는지 검토하여, 비인가된 접 +근을 차단할 수 있음 +- 시스템 안정성 및 성능 보장 +▸리소스 관리 최적화: 코드 리뷰는 모델 실행 로직에서 리소스 낭비를 유발할 수 있는 코드를 +식별하여 시스템의 안정성을 높일 수 있음 +▸장애 대응 강화: 코드 리뷰를 통해 오류가 발생했을 때 대체 경로 또는 복구 절차가 제대로 +구현되었는지 확인할 수 있음 +(예시) 코드 리뷰 정책 및 가이드라인 수립 +- 코드 리뷰 목적 명확화: 보안 취약점 식별, 코드 품질 향상, 규정 준수 확인 등 명확한 목표를 +설정 +- 표준화된 리뷰 가이드라인: 코드 리뷰 중점 사항을 포함한 체크리스트를 개발 + + +![이미지 93-0](images/p0093_img0.png) + + +![이미지 93-1](images/p0093_img1.png) + + +![이미지 93-2](images/p0093_img2.png) + + +![이미지 93-3](images/p0093_img3.png) + + +![이미지 93-4](images/p0093_img4.png) + + +--- + +- 보안 기준 준수: OWASP Secure Coding Practices, ISO/IEC 27001 등 보안 표준에 기 +반한 리뷰 기준 설정 +(예시) 코드 리뷰 프로세스 설계 +- 단계별 코드 리뷰: 각 코드 변경 사항에 대해 다음과 같은 단계로 검토 +▸자동화된 분석: 정적 분석 도구(SAST)를 사용하여 코드에서 보안 취약점을 자동으로 탐지 +▸동료 리뷰: 동료 개발자들이 수동으로 코드를 검토하며 보안 취약점과 논리적 오류 탐지 +▸보안 전문가 리뷰: 보안 전문가가 민감하거나 중요한 코드의 보안성을 검토 +- PR(풀 리퀘스트) 기반 리뷰: 모든 코드 변경 사항은 Pull Request(PR)로 제출하고, 병합 전 +에 승인을 받도록 함 +- 리뷰 범위 지정: 변경된 코드뿐 아니라 해당 변경이 영향을 미치는 기존 코드도 함께 검토 +2.2 +모델 환경의 보안 +• AI 모델 환경이 안전하지 않으면 공격자가 모델에 무단으로 접근하거나 모델을 악용할 수 있고 +클라우드 환경에서 배포되는 경우 특히 주의가 필요함 + +#### 2.2.1 + +모델 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 +최소화하여 무단 접근을 방지하고 있는가? +• AI 모델 환경이 안전하지 않으면 공격자가 모델에 무단으로 접근하거나 모델을 악용할 수 있음. +클라우드나 온프레미스 환경에서 AI 모델에 무단 접근이 발생할 수 있음 +• 모델 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 최소화하여 무단 접근을 방지해야 +함 +(예시) 역할 기반 접근 제어(RBAC) +- 역할 정의: 모델 환경에 대한 접근 권한을 역할(예: 개발자, 데이터 과학자, 운영자)별로 구분 +- 최소 권한 원칙: 각 역할에 대해 최소한의 권한만 부여 +예: 운영자는 모델 실행만 가능하고, 데이터 과학자는 모델 수정만 가능하도록 설정 +- 동적 권한 할당: 사용자 요청에 따라 임시 권한을 부여하고, 작업 완료 후 권한을 회수 +(예시) 다단계 인증(MFA) +- MFA 적용: 모든 모델 환경에 대한 접근은 다단계 인증(예: 비밀번호 + 인증 앱)을 요구 +- 장치 인증: 접근에 사용되는 장치의 신뢰성을 검증하여 승인된 장치에서만 접근 가능하도록 설정 +(예시) 네트워크 및 IP 기반 접근 제어 +- VPN 및 전용 네트워크: 모델 환경에 대한 접근은 보안 VPN을 통해서만 가능하도록 제한 +- IP 화이트리스트: 허용된 IP 주소에서만 모델 환경에 접근할 수 있도록 구성 +- 방화벽 설정: 모델 환경을 보호하는 방화벽을 설정하고, 외부에서의 무단 트래픽을 차단 + + +![이미지 94-0](images/p0094_img0.png) + + +![이미지 94-1](images/p0094_img1.png) + + +![이미지 94-2](images/p0094_img2.png) + + +![이미지 94-3](images/p0094_img3.png) + + +![이미지 94-4](images/p0094_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +85 + +#### 2.2.2 + +모델이 악의적으로 수정되지 않도록 모델의 무결성을 보장하는 방법을 +적용하고 있는가? +• AI 서비스 제공기업은 모델의 무결성을 보장하기 위해 필요한 방법을 적용해야 함. 모델의 무결 +성을 보장하면 악의적인 수정으로 인한 오작동과 데이터 유출을 방지하여 AI 시스템의 신뢰성과 +안전성을 유지할 수 있음. 이는 서비스 품질 저하와 고객 신뢰 손실을 예방하고, 규제 및 보안 표 +준을 준수하기 위해 필요함 +• (예시) 모델 무결성 검증 +- 모델 해싱(Hashing): 모델 파일의 해시 값을 생성하여 무단 변경 여부를 검증. 배포 전후의 모 +델 상태를 비교하여 일관성을 확인 +- 모델 검증 프로세스: 배포 전에 모델 성능 및 보안 테스트를 수행하여 무결성을 확인 +• (예시) 운영 환경 보안 +- 운영 환경 격리: 모델 운영 환경을 테스트 및 개발 환경과 격리하여 무단 변경을 방지 +- 접근 제어: 역할 기반 접근 제어(RBAC)를 적용하여 모델 환경에 접근할 수 있는 사용자를 제한 +- 실시간 무결성 검증: 운영 중인 모델의 무결성을 주기적으로 검증하는 자동화된 시스템을 구축 + +#### 2.2.3 + +보안 모니터링 도구를 사용하여 모델의 비정상적인 활동을 감지하고, +실시간으로 대응할 수 있는 체계를 구축하고 있는가? +• AI 서비스 제공기업이 보안 모니터링 도구를 사용하여 모델의 비정상적인 활동을 감지하고, 실시간 +대응 체계를 구축하는 것은 모델의 무결성 보호, 데이터 기밀성과 안전성 보장 측면에서 중요함 +• (예시) 모니터링 요구사항 정의 +- 보안 목표 설정: 모델의 무결성・가용성・기밀성을 보호하기 위해 필요한 주요 보안 목표를 정의 +- 모니터링 대상 식별: 모델의 입력 데이터, 출력 결과, API 호출, 리소스 사용량, 데이터 접근 +기록 등 감시할 요소를 명확히 함 +- 위협 시나리오 정의: 예상 가능한 보안 위협(예: 적대적 공격, 비인가 접근, 과도한 API 호출) +과 이에 대응할 방법을 문서화 +• (예시) 이상 탐지 시스템 구축 +- 이상 탐지 모델 개발: 머신러닝 기반 이상 탐지 모델을 사용하여 비정상적인 입력 패턴, 출력 +이상, 비인가 접근 탐지 +- 행동 분석: 사용자의 접근 패턴, API 호출 빈도, 모델 출력 결과의 통계적 변화를 감지 +- 임계값 설정: 비정상적인 활동을 판단할 임계값을 설정하고 과도한 알림을 방지 +• (예시) 주기적인 테스트 및 개선 +- 취약점 점검: 보안 모니터링 시스템과 대응 프로세스의 취약점을 주기적으로 점검 +- 모의훈련: 비정상 활동 탐지와 대응 시뮬레이션을 통해 체계의 효과성을 검증 +- AI 기반 개선: 이상 탐지 모델을 지속적으로 학습 및 개선하여 새로운 위협에 대응 + + +![이미지 95-0](images/p0095_img0.png) + + +![이미지 95-1](images/p0095_img1.png) + + +![이미지 95-2](images/p0095_img2.png) + + +![이미지 95-3](images/p0095_img3.png) + + +![이미지 95-4](images/p0095_img4.png) + + +--- + +2.3 +데이터 보안 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 서비스 개발 또는 운영 과정에서 의도적으로 학습 데이터를 변질시키거나 입력 데이터에 최소 +한의 변조를 가해 예상과는 다른 결과를 출력하도록 하는 공격에 노출될 수 있으므로, 이를 대처 +할 방안을 검토 및 적용하는 것이 바람직함 +공격기법 +공격기법 내용 +데이터 중독 공격 +(poisoning attack) +AI 서비스는 일반적으로 입력 데이터 분포의 변화에 적응하기 위해 모델 배치 후 수집된 +새로운 데이터를 사용해 재교육 됨. 이때, 공격자는 세심하게 조작된(perturbed) 데이터 +를 주입하여 서비스의 정상적인 기능을 손상시키는 방식으로 학습 데이터를 오염시킬 수 +있음 +회피공격 +(evasion attack) +공격자는 학습 모델이 입력을 올바르게 식별할 수 없도록 기존의 입력 데이터에 대해 미 +묘한 차이의 노이즈를 추가하여 조작된 입력 데이터를 생성함. 이러한 변화는 사람의 눈 +에 잘 띄지 않지만, 심층학습 모델의 추론 결과에 큰 영향을 미침 +데이터 공격 기법 (예시) + +#### 2.3.1 + +적대적 공격 등 데이터 공격에 대한 방어 수단을 강구하고 있는가? +• 적대적 공격을 방어하고 AI 서비스의 강건성을 높이기 위한 다양한 방어 기법이 존재함. 특히 데 +이터 수집 및 준비 단계에서의 회피 공격과 중독 공격 방어를 위한 대표적 기법으로는 적대적 학습 +(adversarial training), Gradient Masking, Feature Squeezing 등이 있음 +방어기법 +방어기법 내용 +적대적 학습 +(adversarial +training) +모델을 학습시킬 때, 적대적 사례로 활용할 수 있는 모든 경우의 수를 미리 고려하여 학 +습 데이터셋에 포함시키는 방법. 충분한 수와 다양성이 보장된 적대적 데이터를 생성하 +는 과정 없이는 그 성능을 보장할 수 없음 +Gradient Masking +(Distillation) +대부분의 공격은 모델 추론 과정에서의 경사(gradient)를 보고 이루어지므로 학습 모델 +의 경사가 그대로 노출되는 것을 방지하거나 gradient masking, 정규화 방법 등을 통 +해 경사가 두드러지지 않게 하여 적대적 공격에 방어할 수 있는 방법(distillation)들이 +제안됨 +Feature Squeezing +본래의 학습 모델과 별도로, 주어진 입력이 적대적 사례인지 아닌지를 판단하는 학습 모 +델을 추가하는 방법. 그 외에 다수의 학습 모델을 조합하여 시스템을 구성하면 특정 모델 +에 대한 화이트박스 공격을 피할 수 있으며, 특정 모델에 적용되는 적대적 공격이 불가능 +해짐 +적대적 공격에 대한 방어 기법 + + +![이미지 96-0](images/p0096_img0.png) + + +![이미지 96-1](images/p0096_img1.png) + + +![이미지 96-2](images/p0096_img2.png) + + +![이미지 96-3](images/p0096_img3.png) + + +![이미지 96-4](images/p0096_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +87 + +#### 2.3.2 + +데이터 저장 및 전송 시 무결성을 보호하기 위한 조치를 하고 있는가? +• 데이터 암호화와 같은 보호 기법을 설계 단계에서 도입하고, 데이터 저장 및 전송 시 무결성을 유 +지할 수 있도록 함 +• (예시) 해시(Hash) 및 체크섬 사용 +- 데이터 무결성 검증: 데이터 저장 및 전송 전후에 해시 함수(SHA-256 등)를 사용해 데이터의 +무결성을 확인 +- 체크섬(Checksum) 생성: 데이터 전송 시 체크섬을 생성하고, 수신 측에서 이를 검증하여 데 +이터 변조 여부를 확인 +• (예시) 디지털 서명 및 인증 +- 디지털 서명: 데이터에 디지털 서명을 추가하여 무결성을 보장하고, 출처를 확인할 수 있도록 함 +- 인증서 사용: 전송 과정에서 SSL/TLS 인증서를 사용하여 데이터 송수신 주체의 신뢰성을 검증 + +#### 2.3.3 + +중요 데이터에 대한 기밀성 유지를 위해 보호 방안을 마련하고 있는가? +• AI 서비스를 제공할 때, 중요한 데이터를 보호하기 위한 방안을 마련하는 것은 매우 중요한 것으 +로 아래와 같은 방안들이 적용될 필요가 있음 +(1) 데이터 수집 및 사용 정책 수립 +- 목적 명시: 데이터를 수집할 때, 왜 데이터를 수집하는지 명확히 하고 사용 목적을 제한 +- 최소 수집 원칙: 서비스 운영에 꼭 필요한 최소한의 데이터만 수집 +(2) 데이터 암호화 +- 저장 중 암호화: 민감한 데이터를 저장할 때 AES와 같은 강력한 암호화 알고리즘을 사용 +- 키 관리: 암호화 키를 안전하게 저장하고 관리 +(3) 접근 제어 +- 권한 관리: 데이터에 접근할 수 있는 사용자를 최소화하고 역할 기반 접근 제어(RBAC)를 구현 +- 로그인 보안: 다단계 인증(MFA) 및 강력한 비밀번호 정책을 적용 +- 접근 기록: 데이터를 접근하거나 수정한 기록을 상세히 로그로 남김 + + +![이미지 97-0](images/p0097_img0.png) + + +![이미지 97-1](images/p0097_img1.png) + + +![이미지 97-2](images/p0097_img2.png) + + +![이미지 97-3](images/p0097_img3.png) + + +![이미지 97-4](images/p0097_img4.png) + + +--- + + +#### 2.3.4 + +전송구간에서 중요정보 유출을 방지하기 위한 보호 방안을 마련하고 있는가? +• 전송 구간에서 중요정보 유출을 방지하는 것은 데이터의 기밀성과 무결성을 보호하여 민감 정보 +가 중간에서 가로채지거나 조작되지 않도록 하는 데 필수적임. 안전한 데이터 전송은 AI 서비스 +의 안정성과 지속 가능성을 확보하는 핵심 요소임 +• (예시) 네트워크 보안 강화 +- 방화벽 및 IDS/IPS: 방화벽과 침입 탐지 및 방지 시스템(IDS/IPS)을 사용하여 네트워크로부 +터의 비인가 접근을 차단 +- VPN 및 전용 네트워크: 데이터 전송 시 가상 사설망(VPN) 또는 전용 네트워크를 사용하여 +보안을 강화 +- DLP(Data Loss Prevention) 솔루션 적용: 중요정보가 외부로 유출되지 않도록 모니터링하 +고, 중요 데이터를 전송하려는 시도를 차단 +• (예시) 암호화 기술 적용 +- TLS/SSL 사용: TLS 1.2 이상 프로토콜을 사용하여 데이터 전송 구간에서 암호화를 보장 +- 강력한 암호화 알고리즘: AES-256, RSA 등 강력한 암호화 알고리즘을 적용하여 데이터를 +보호 +- 엔드투엔드 암호화(End-to-End Encryption): 데이터가 송신자에서 수신자까지 암호화된 상 +태로 유지되도록 보장 +• (예시) 키 관리 강화 +- 보안 키 교환: 전송 중 안전한 암호화 키 교환을 위해 Diffie-Hellman 또는 Elliptic Curve +Cryptography(ECC)와 같은 보안 키 교환 방식을 사용 +- 중앙화된 키 관리: 키 관리 시스템(KMS)을 사용하여 암호화 키를 안전하게 생성, 저장 및 관리 +- 키 교체 주기: 암호화 키를 정기적으로 회전하여 보안성을 유지 + + +![이미지 98-0](images/p0098_img0.png) + + +![이미지 98-1](images/p0098_img1.png) + + +![이미지 98-2](images/p0098_img2.png) + + +![이미지 98-3](images/p0098_img3.png) + + +![이미지 98-4](images/p0098_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +89 + +#### 2.3.5 + +데이터 유출시 책임추적을 할 수 있도록 조치를 하고 있는가? +• 데이터 유출 시 발생 원인과 책임자를 효과적으로 추적하고, 데이터 보안 체계를 강화하기 위해서 +는 접근 및 활동 로그 관리, 데이터 태그 및 분류 활동 등이 필요함 +• (예시) 접근 및 활동 로그 관리 +- 접근 기록 저장: 데이터에 접근한 모든 사용자와 시스템의 활동을 기록하고, 로그에는 사용자 +ID, IP 주소, 시간, 작업 내용을 포함 +- 로그 중앙화: 중앙화된 로그 관리 시스템(SIEM)을 도입하여 모든 로그를 한곳에서 관리하고 +분석 가능하도록 함 +- 로그 보존 기간: 법적 요구사항과 내부 정책에 따라 로그 데이터를 일정 기간 보관(예: 1~5년) +• (예시) 데이터 태그 및 분류 +- 데이터 태그 지정: 각 데이터에 식별 태그를 부여하여 데이터의 출처와 사용 이력을 추적할 수 +있도록 함 +- 중요도에 따른 분류: 데이터를 민감도와 중요도에 따라 분류하고, 민감 데이터에 대해 더 강력 +한 보안 조치를 적용 +2.4 +API 및 인터페이스 보안 +• API 및 인터페이스 보안은 AI 서비스 제공기업이 데이터의 기밀성과 무결성을 보호하고, 민감한 +정보가 무단 접근이나 변조로부터 안전하게 유지되도록 보장하기 위해 필수적임. API를 통한 비 +인가 접근은 데이터 유출, 서비스 오작동, 또는 고객 신뢰 손실로 이어질 수 있음. +• 또한, 적대적 공격(Adversarial Attack)이나 과도한 요청(DoS/DDoS 공격)은 모델 성능을 저하 +시켜 서비스 가용성을 위협할 수 있음. 보안이 취약한 인터페이스는 해커가 시스템의 내부를 분석 +하고 추가적인 공격을 시도할 수 있는 진입점이 됨. 따라서 API 및 인터페이스 보안은 법적 규제 +준수, 서비스 품질 유지 등을 위해 필요함 + + +![이미지 99-0](images/p0099_img0.png) + + +![이미지 99-1](images/p0099_img1.png) + + +![이미지 99-2](images/p0099_img2.png) + + +![이미지 99-3](images/p0099_img3.png) + + +![이미지 99-4](images/p0099_img4.png) + + +--- + + +#### 2.4.1 + +API 통신을 암호화하여 데이터가 전송되는 구간에서 외부 공격에 대한 방어를 +하고 있는가? +• API가 공개되어 있으면 공격자가 무단으로 모델에 접근하여 악의적인 요청을 보낼 수 있음. +• API 통신을 암호화하여 데이터가 전송되는 동안 중간자 공격을 방지하고, 모든 트래픽에 대해 암 +호화(TLS/SSL)를 적용하는 것이 필요함 +• (예시) HTTPS 프로토콜 사용 +- TLS/SSL 적용: API 통신에 HTTPS를 적용하여 데이터 전송 구간을 암호화 +- TLS 1.2 이상(권장 TLS 1.3)을 사용하여 최신 보안 표준을 준수 +- SSL 인증서 관리: 신뢰할 수 있는 인증기관(CA)에서 발급한 인증서를 사용하고, 만료 전에 갱신 +• (예시) API 인증 및 권한 관리 +- 강력한 인증 프로토콜: OAuth2, OpenID Connect와 같은 표준 인증 프로토콜을 사용 +- API 키 및 토큰 보안: API 호출 시 고유 키 또는 JWT(JSON Web Token)를 요구하며, 민 +감 정보는 암호화된 환경 변수에 저장 +- 권한 최소화: 사용자 및 애플리케이션에 필요한 최소 권한만 부여하고, API 호출 범위를 제한 + +#### 2.4.2 + +모든 API 요청에 대해 인증 및 권한 관리를 강화하고, 중요 데이터에 접근할 때는 +강한 인증 메커니즘을 적용하고 있는가? +• API는 인터넷을 통해 접근이 가능하므로, 인증 및 권한 관리가 취약하면 데이터 유출, 무단 접근, +악의적인 사용이 발생할 위험이 높아짐 +• 보안이 취약한 서비스는 사용자 신뢰를 잃게 되고, 결국 브랜드 이미지 실추 및 고객 이탈로 이어 +질 가능성이 큼. 특히, 기업 고객(B2B)의 경우 보안이 미흡한 API 서비스는 고객이 사용을 기피 +할 가능성이 큼 +• 또한 내부 직원이나 협력업체가 불필요한 데이터 접근 권한을 가지면 내부 유출 위험이 증가할 +수 있으므로, 로그 및 감사(Audit) 기능을 추가하면 누가, 언제, 어떤 데이터에 접근했는지 추적 +가능하여 보안 사고 대응이 가능함 +• 이에 대한 예방책은 다음과 같음 +- 사용자 인증을 강화하기 위해 다중 인증(MFA)을 도입하고, 모든 중요한 서비스에 대해 강력한 +인증 절차를 적용함 +- 최소 권한 원칙을 적용하여 사용자가 필요한 최소한의 권한만 부여받도록 하고, 불필요한 권한 +이 부여되지 않도록 관리함 +- 사용자 활동을 실시간으로 모니터링하고, 비정상적인 접근 시도를 자동으로 차단할 수 있는 침 +입 탐지 시스템(IDS)을 구축함 + + +![이미지 100-0](images/p0100_img0.png) + + +![이미지 100-1](images/p0100_img1.png) + + +![이미지 100-2](images/p0100_img2.png) + + +![이미지 100-3](images/p0100_img3.png) + + +![이미지 100-4](images/p0100_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +91 + +#### 2.4.3 + +API 트래픽은 암호화 기술을 사용하여 보호하고, 데이터를 안전하게 +주고받도록 보장하고 있는가? +• API 트래픽이 암호화되지 않으면 중간자 공격(Man-in-the-Middle Attack)에 노출될 수 있음. +API 트래픽은 암호화(TLS)를 사용하여 보호하고, 데이터를 안전하게 주고받도록 보장함 +• (예시) 강력한 암호화 알고리즘 사용 +- 암호화 표준: AES-256, RSA-2048과 같은 강력한 암호화 알고리즘을 사용하여 데이터 기밀 +성을 유지 +- Perfect Forward Secrecy(PFS): 세션 키가 유출되더라도 과거 통신 데이터가 복호화되지 +않도록 PFS를 활성 +- 메시지 인증 코드(MAC): HMAC-SHA256을 사용하여 데이터 무결성을 보장하고, 데이터 변 +조를 방지 +• (예시) API 요청 및 응답 보호 방안 +- 토큰 기반 인증: OAuth2, JWT(JSON Web Token)와 같은 표준 인증 방식을 사용하여 +API 요청과 응답을 보호 +- 권한 범위 설정: API 호출의 권한 범위를 명확히 정의하여 민감한 데이터 접근을 제한 +- 전송 데이터 검증: 요청 데이터와 응답 데이터를 해시 또는 체크섬으로 검증하여 무결성을 확인 + +#### 2.4.4 + +API 호출 제한(Rate Limiting)을 설정하여 과도한 요청을 방지하고, +비정상적인 요청 패턴을 탐지하여 차단하고 있는가? +• API 호출을 실시간으로 모니터링하고 비정상적인 패턴이나 오용 시도를 감지하려면 로그 관리, +AI 기반 이상 탐지, Rate Limiting, WAF, 실시간 알림 등 다층적인 보안 전략이 필요함. 이를 +통해 API의 안정성과 보안을 유지하고, 불법 접근이나 오용으로부터 시스템을 보호할 수 있음 +• API 호출 제한(rate limit)이란 분 당 호출할 수 있는 API 호출 횟수를 의미함 +• API에 과도한 요청이 발생할 경우 “서비스 거부 공격(DoS)”의 위험이 있음. 따라서 이 경우에는 +“API 호출 제한(Rate Limiting)”을 설정하여 과도한 요청을 차단하고, 비정상적인 요청 패턴을 +탐지하는 시스템을 구축함 +• (예시) Rate Limiting 정책 설계 +- 요청 한도 정의: API 호출 빈도와 허용 한도를 설정(예: 사용자당 1분에 1000회 호출 제한) +- 기간 기준 설정: 호출 빈도 제한을 적용할 기간을 설정(예: 초, 분, 시간, 일 단위) +- 사용자 기반 제한: 사용자별, IP별, 또는 API 키별로 개별 호출 제한 정책을 설정 +• (예시) Rate Limiting 구현 +- 정적 및 동적 설정: API 사용량에 따라 정적 또는 동적으로 Rate Limiting 값을 조정할 수 +있는 기능을 구현 + + +![이미지 101-0](images/p0101_img0.png) + + +![이미지 101-1](images/p0101_img1.png) + + +![이미지 101-2](images/p0101_img2.png) + + +![이미지 101-3](images/p0101_img3.png) + + +![이미지 101-4](images/p0101_img4.png) + + +--- + +서비스 제공 및 운영 +3.1 +로그 및 운영 데이터 보안 +• AI 서비스 운영 중 발생하는 로그 및 운영 데이터는 중요한 정보로서, 이를 안전하게 관리하지 +않으면 공격자가 이를 분석하여 시스템의 구조와 취약점을 파악할 수 있음 + +#### 3.1.1 + +데이터 처리 중 접속로그 관리를 강화하고 있는가? +• AI 서비스 운영 중 발생하는 로그 및 운영 데이터는 특히 Generative AI 서비스 제공시 모델의 +품질 관리 및 성능 최적화, 오류 추적 및 문제 해결, Generative AI 특유의 문제 해결 등을 위해 +매우 중요함 +• 모델의 품질 관리 및 성능 최적화 +- 결과물 검증: Generative AI는 예측 가능한 정답보다 창의적이고 다양한 응답을 생성하므로, +로그를 통해 출력 결과물이 유효한지 확인할 필요가 있음 +- 피드백 기반 학습: 운영 데이터를 통해 잘못된 응답, 비효율적인 생성 결과 등을 분석하고 이 +를 모델 개선에 반영할 수 있음 +• 오류 추적 및 문제 해결 +- 오류 원인 분석: 비정상적 응답, 시스템 충돌, 사용자 불만족을 유발하는 문제를 로그 데이터 +를 통해 빠르게 식별할 수 있음 +- 실시간 대응: 생성형 AI의 예기치 않은 오류나 비정상적 응답을 감지하고, 운영 데이터 기반으 +로 즉각적인 대응이 가능 +• Generative AI 특유의 문제 해결 +- 출력 다양성 및 품질 분석: Generative AI는 출력이 다양하고 예측하기 어려운 경우가 많아, +로그 데이터를 통해 생성 결과의 품질과 일관성을 평가할 수 있음 +- 안전성 확보: 생성된 응답이 유해하거나 부적절한 경우를 모니터링하고, 로그 데이터를 기반으 +로 이를 예방하는 메커니즘을 설계할 수 있음 +• (예시) 접속 로그 수집 및 저장 +- 접속 기록 범위 정의: 사용자 ID, IP 주소, 접근 시간, 요청 URL, HTTP 상태 코드, 처리 결과 +등 접속 관련 주요 정보를 기록 +- 중앙 집중식 로그 관리: 로그 데이터를 중앙에서 관리할 수 있는 통합 로그 관리 시스템 +(SIEM)을 구축 +- 안전한 로그 저장: 로그 데이터를 암호화하고 안전한 위치에 저장하여 무단 액세스 및 변조를 방지 +• (예시) 로그 보존 및 삭제 정책 +- 보존 기간 설정: 법적 규제 및 기업 내부 정책에 따라 로그 데이터를 일정 기간(예: 1~5년) 보관 +- 안전한 삭제: 로그 데이터를 보존 기간 이후 안전하게 삭제하여 데이터 유출 위험을 줄임 + + +![이미지 102-0](images/p0102_img0.png) + + +![이미지 102-1](images/p0102_img1.png) + + +![이미지 102-2](images/p0102_img2.png) + + +![이미지 102-3](images/p0102_img3.png) + + +![이미지 102-4](images/p0102_img4.png) + + +![이미지 102-5](images/p0102_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +93 + +#### 3.1.2 + +로그 파일 및 운영 데이터에 암호화를 적용하고, 중요정보는 별도로 관리하여 +유출을 방지하고 있는가? +• Generative AI 서비스 제공 시 로그 파일 및 운영 데이터에 암호화를 적용하고 중요 정보를 별 +도로 관리하여 유출을 방지하는 것은 중요 데이터 보호, 생성 결과 및 학습 데이터 보호, 악의적 +인 행위 방지 등을 위해 필요함 +• 중요 데이터 보호, 생성 결과 및 학습 데이터 보호 +- 기밀 유지: 생성형 AI는 종종 비즈니스 기밀, 제품 설계, 혹은 연구 데이터를 처리함. 이런 결 +과물이나 입력 데이터가 로그에 저장될 경우, 유출 시 경쟁력 손실로 이어질 수 있음 +- 지적 재산권 보호: AI 모델이 생성한 결과물은 조직의 자산일 수 있으므로, 로그에 저장된 관 +련 데이터를 보호하는 것이 중요함 +• Generative AI의 특성으로 인한 보안 리스크 +- 데이터 재학습 가능성: Generative AI는 학습 과정에서 중요한 정보를 학습할 가능성이 있음. +로그 데이터가 유출되면 공격자는 이를 분석해 모델의 학습 데이터나 사용자 데이터를 추론할 +수 있음 +- 출력물 조작: 로그에 저장된 데이터가 유출되거나 변조될 경우, 생성 결과물의 무결성을 보장 +할 수 없게 되어 서비스 신뢰도가 하락할 수 있음 +• 악의적인 행위 방지 +- 리버스 엔지니어링 방지: 로그와 운영 데이터를 암호화하지 않을 경우, 악의적인 사용자가 데 +이터를 분석해 모델 동작 방식을 역으로 추적하거나 공격 벡터를 설계할 수 있음 +- 서비스 악용 방지: 로그 데이터를 통해 AI 모델의 취약점(예: 특정 입력 패턴에서 부적절한 응 +답)이 노출되면 이를 악용한 공격(예: 모델 중독, 데이터 중독)이 발생할 수 있음 +• 운영 효율성과 데이터 접근 제어 +- 중요 정보 별도 관리: 운영 데이터 중 중요 정보(예: API 키, 인증 토큰, 암호화 키)는 별도로 +관리하여 로그에서 제거하면, 데이터 유출 사고 발생 시 피해 범위를 최소화할 수 있음 +- 접근 통제 강화: 로그 데이터를 암호화하고 중요 정보를 분리 관리하면, 내부 관계자나 시스템 +의 비인가 접근으로 인한 데이터 유출 가능성을 줄일 수 있음 + + +![이미지 103-0](images/p0103_img0.png) + + +![이미지 103-1](images/p0103_img1.png) + + +![이미지 103-2](images/p0103_img2.png) + + +![이미지 103-3](images/p0103_img3.png) + + +![이미지 103-4](images/p0103_img4.png) + + +--- + + +#### 3.1.3 + +운영 중 발생하는 데이터를 안전하게 저장하고, 접근 제어를 통해 인증된 +관리자만 로그에 접근할 수 있도록 설정하고 있는가? +• Generative AI 서비스 제공 시 운영 중 발생하는 데이터를 안전하게 저장하고 접근 제어를 통해 +인증된 관리자만이 로그에 접근하도록 설정하는 것은 생성된 데이터의 기밀성 보장, 보안 사고 예 +방 및 책임 분산 방지 등을 위해 필요함 +• 생성된 데이터의 기밀성 보장 +- 기밀 유지: Generative AI가 생성한 결과물에는 종종 비즈니스 기밀 또는 사용자 특정 데이 +터가 포함될 수 있으므로, 로그에 저장된 생성 데이터를 보호하지 않으면 외부로 유출될 가능 +성이 있음 +- 데이터 오용 방지: 인증되지 않은 사용자가 로그에 접근하면 생성 데이터나 사용 데이터를 악 +의적으로 조작, 재사용, 유출할 수 있음 +- 사용 기록: 로그에는 사용자가 어떤 요청을 했는지, 어떤 결과를 생성했는지와 같은 정보가 포 +함됨. 이러한 정보는 사용자 행동 분석에 악용될 수 있으므로 철저한 접근 통제가 필요함 +• 보안 사고 예방 및 책임 분산 방지 +- 내부 위협 관리: 내부 관계자가 로그에 접근해 데이터를 유출하거나 악용하는 일이 발생하지 +않도록, 인증된 관리자만 접근하도록 설정해야 함 +- 무결성 보장: 접근 통제를 통해 로그 데이터를 보호함으로써, 데이터가 의도치 않게 변경되거 +나 삭제되지 않도록 보장할 수 있음 +• (예시) 접근 제어 강화 +- 역할 기반 접근 제어(RBAC): 사용자 역할별로 데이터 접근 권한을 부여하고, 최소 권한 원칙 +을 준수 +- 다단계 인증(MFA): 로그 데이터에 접근하려면 ID/비밀번호와 추가 인증(예: OTP, 인증 앱)을 +요구하여 보안을 강화 +- 접근 로그 기록: 로그 데이터에 접근한 모든 사용자와 작업 내역을 기록하여 추후 감사와 분석 +이 가능하도록 함 +• (예시) 접근 요청 인증 +- 네트워크 기반 인증: VPN 사용, IP 화이트리스트 정책 적용 +- 암호화된 통신 TLS(Transport Layer Security)를 적용하여 로그 데이터 전송 중 기밀성과 +무결성을 유지 + + +![이미지 104-0](images/p0104_img0.png) + + +![이미지 104-1](images/p0104_img1.png) + + +![이미지 104-2](images/p0104_img2.png) + + +![이미지 104-3](images/p0104_img3.png) + + +![이미지 104-4](images/p0104_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +95 + +#### 3.1.4 + +로그 데이터 접근 권한을 최소화하고, 접근 제어 및 사용자 활동기록을 통해 +비정상적인 접근을 탐지하고 있는가? +• Predictive AI 서비스 제공 시 로그 데이터 접근 권한을 최소화하고, 접근 제어 및 사용자 활동 +기록을 통해 비정상적인 접근을 탐지하는 것은 모델 신뢰성과 무결성 유지, 비즈니스 기밀 보호, +비정상적 접근 탐지를 통한 보안 강화 등을 위해 필요함 +• 모델 신뢰성과 무결성 유지 +- 데이터 조작 방지: 로그에 비인가 접근이 발생하면, 모델의 입력 데이터나 예측 결과가 조작될 +가능성이 있음. 이는 모델의 신뢰성을 손상시킬 수 있음 +- 운영 데이터 보호: Predictive AI의 운영 데이터는 모델 성능 평가와 개선에 사용되므로, 이를 +안전하게 보호해야 모델의 무결성을 유지할 수 있음 +• 비즈니스 기밀 보호 +- 모델 및 예측 알고리즘 보호: Predictive AI의 핵심 경쟁력은 예측 알고리즘과 데이터를 분석 +해 도출한 비즈니스 통찰임. 로그 데이터에 비즈니스 기밀이 포함될 경우, 권한 없는 접근은 +경쟁력 손실로 이어질 수 있음 +• 비정상적 접근 탐지를 통한 보안 강화 +- 내부 위협 관리: 내부 사용자가 악의적이거나 부주의한 행동으로 로그 데이터를 유출하거나 변 +경하는 것을 방지할 수 있음 +- 외부 공격 방어: 비인가 접근 시도를 탐지하고, 이를 통해 데이터 도난이나 서비스 악용을 조 +기에 차단할 수 있음 +- 운영 이상 감지: 비정상적인 접근 패턴은 시스템 취약점이나 보안 위협의 신호일 수 있으므로 +이를 탐지하면 사전 대응이 가능함 +• Predictive AI 서비스는 데이터의 민감성과 모델의 의존성 때문에 로그 데이터의 안전한 저장과 +접근 통제가 필수적임. 접근 권한 최소화와 사용자 활동 기록은 데이터 보호, 보안 강화, 규제 준 +수, 비즈니스 신뢰 확보를 가능하게 하며, Predictive AI 서비스의 안정성과 지속 가능성을 보장 +하는 핵심 요소임 + + +![이미지 105-0](images/p0105_img0.png) + + +![이미지 105-1](images/p0105_img1.png) + + +![이미지 105-2](images/p0105_img2.png) + + +![이미지 105-3](images/p0105_img3.png) + + +![이미지 105-4](images/p0105_img4.png) + + +--- + +서비스 유지보수 및 지원 +4.1 +모니터링, 업데이트 및 패치 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 서비스 제공자는 AI 활용 과정을 통해 AI 기능을 향상시키고 위험을 억제하기 위해 소프트웨 +어 업데이트, 검사 및 수리 등을 제공하여야 함. 특히 업데이트를 통해 다른 AI 연동에 영향을 미 +칠 것으로 예상되는 경우 위험에 대한 정보를 제공해야 함 + +#### 4.1.1 + +지속적인 사용자 경험 모니터링을 위해 사용자 로그를 수집・관리하고 있는가? +• 서비스 이용 로그 분석은 서비스 운영 상태에 관한 확인뿐만 아니라, 사용자가 겪는 문제가 무엇 +인지 확인할 수 있는 가장 기본적인 방법이 될 수 있음. 서비스 로그는 서비스가 운영되는 동안 +지속해서 수집되며 서비스 고도화에 따라 다양한 형태로 누적될 수 있음 +• 서버 인프라에 대한 로그를 통해 서비스 운영 상태에 대한 모니터링을 수행할 수 있으며, 사용자 +상호 작용 로그는 사용자가 어떤 서비스를 많이 이용하고 어떤 서비스에서 오류를 겪는지 분석할 +수 있음. 이를 위해 인프라 관점에서는 로그 분석 소프트웨어를 활용할 수 있으며, 사용자 관점에 +서는 기업이 자체적으로 인터페이스 또는 상호작용의 호출에 따른 로그를 수집하거나 로그 분석 +도구를 활용할 수 있음 +• Generative AI 서비스 제공 관점: 사용자 로그를 수집・관리해야 하는 이유 +- 사용자 피드백 반영 및 서비스 개선 +▸생성 결과 품질 개선: Generative AI는 텍스트, 이미지, 코드 등 다양한 유형의 콘텐츠를 생 +성함. 사용자 로그를 통해 생성된 결과물의 품질, 적절성, 유용성을 평가하고 개선할 수 있음 +▸오류 수정: 로그 데이터를 활용해 잘못된 응답이나 비정상적인 동작을 추적하고, 모델과 서비 +스의 정확성을 개선할 수 있음 +- 유해 콘텐츠 모니터링 및 방지 +▸부적절한 콘텐츠 생성 감지: 로그 데이터를 통해 모델이 유해하거나 부적절한 콘텐츠를 생성 +한 사례를 식별하고, 이를 방지하는 데 필요한 개선 조치를 취할 수 있음 +▸안전성 확보: 지속적인 로그 모니터링은 생성 결과가 윤리적이고 규제 요구를 충족하도록 보 +장하는 데 필수적임 +• Predictive AI 서비스 제공 관점: 사용자 로그를 수집・관리해야 하는 이유 +- 예측 정확성 향상 +▸모델 성능 평가: 사용자 로그는 Predictive AI 모델의 예측 결과와 실제 결과를 비교하고, +모델의 정확성을 평가하는 데 핵심 자료로 사용됨 +▸데이터 드리프트 감지: 사용자 로그를 통해 입력 데이터의 특성 변화를 모니터링하고, 데이터 +드리프트나 개념 드리프트를 감지하여 모델 업데이트가 필요한 시점을 파악할 수 있음 +▸오류 수정 및 학습: 부정확한 예측 결과를 식별하고, 이를 통해 모델 재훈련 및 성능 개선을 + + +![이미지 106-0](images/p0106_img0.png) + + +![이미지 106-1](images/p0106_img1.png) + + +![이미지 106-2](images/p0106_img2.png) + + +![이미지 106-3](images/p0106_img3.png) + + +![이미지 106-4](images/p0106_img4.png) + + +![이미지 106-5](images/p0106_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +97 +수행할 수 있음 +- 비즈니스 리스크 관리 +▸부정확한 결과 방지: 사용자 로그는 Predictive AI 모델의 출력물이 적절했는지 확인하고, +잘못된 결과로 인해 발생할 수 있는 비즈니스 리스크를 방지하는 데 도움을 줌 +▸서비스 품질 유지: 지속적인 모니터링은 모델이 비즈니스 목표를 지원하는 데 필요한 성능과 +안정성을 유지하도록 보장함 + +#### 4.1.2 + +AI 시스템이 정상적으로 작동하지 않거나 예기치 못한 오류가 발생할 경우 이를 +조기에 탐지하고 대응하는 메커니즘이 있는가? +• AI 시스템에 오류 등 탐지 및 대응 메카니즘 +구분 +설명 +예시 +시스템 모니터링 +시스템 로그를 주기적으로 모니터링하여 비정 +상적인 활동을 탐지하고 대응함 +시스템에 최신 보안 업데이트를 정기 +적으로 적용하고, 로그 모니터링 도구 +를 사용하여 시스템 활동을 실시간으 +로 감시 +이상 징후 탐지 +(Anomaly Detection) +정상적인 패턴에서 벗어난 이상 징후를 자동 +으로 감지할 수 있는 알고리즘과 기술을 도입 +머신러닝 기반 이상 탐지 알고리즘, 실 +시간 경고 시스템 +자동화된 경고 +(Automated Alerts) +이상 징후나 위험 요소 감지 시 즉각적으로 +관련 담당자에게 경고를 보내는 자동화된 시 +스템을 운영함 +이메일 알림, SMS 경고, 대시보드 알 +림 등 +정기적 검토 +(Regular Reviews) +모니터링 결과와 경고 로그를 정기적으로 검 +토하여, 새로운 위험 요소나 패턴을 식별하고 +대응 방안을 업데이트함 +주간/월간 보고서 작성, 경고 로그 분 +석 회의 + + +![이미지 107-0](images/p0107_img0.png) + + +![이미지 107-1](images/p0107_img1.png) + + +![이미지 107-2](images/p0107_img2.png) + + +![이미지 107-3](images/p0107_img3.png) + + +![이미지 107-4](images/p0107_img4.png) + + +--- + + +#### 4.1.3 + +AI 시스템의 보안 패치나 모델 업데이트가 정기적으로 이루어지고 있는가? +• 보안 취약점이 발견되면 신속하게 패치를 적용하고, 정기적인 보안 업데이트를 통해 시스템의 보 +안 상태를 최신으로 유지해야 함 +• Generative AI 서비스 제공 시 AI 시스템에 대한 보안 패치 및 모델 업데이트 확인이 중요한 이유 +- 유해 콘텐츠 및 부적절한 응답 방지 +▸윤리적 리스크 관리: Generative AI는 새로운 입력에 따라 다양한 결과를 생성함. 모델 업 +데이트가 이루어지지 않으면, 유해 콘텐츠, 편향된 결과, 허위 정보가 생성될 가능성이 커질 +수 있음 +▸사용자 요구 반영: 정기적인 모델 업데이트는 사용자의 피드백을 반영하여 생성 결과의 품질 +과 적절성을 개선할 수 있음 +- 보안 취약점 예방 +▸사이버 공격 방어: Generative AI의 API나 인터페이스는 공격자가 악용하려는 주요 표적임. +보안 패치가 없으면 SQL 삽입, API 남용, 악의적인 입력 패턴에 취약해질 수 있음 +▸데이터 유출 방지: 모델 업데이트를 통해 훈련 데이터에서 학습된 중요한 정보가 노출되지 +않도록 최신 보안 조치를 적용해야 함 +• Predictive AI 서비스 제공 시 AI 시스템에 대한 보안 패치 및 모델 업데이트 확인이 중요한 이유 +- 데이터 특성 변화 대응 +▸모델 노후화 방지: Predictive AI는 입력 데이터의 패턴을 기반으로 예측을 수행함. 시간이 +지나면 데이터의 특성이 변할 수 있으며, 정기적인 모델 업데이트가 이루어지지 않으면 예측 +정확도가 떨어질 위험이 있음 +▸드리프트(Drift) 관리: 데이터 드리프트(특성 변화)나 개념 드리프트(관계 변화)에 대응하기 +위해 최신 데이터를 반영한 재훈련과 업데이트가 필요함 +- 보안 취약점 완화 +▸모델 보안 강화: Predictive AI도 Generative AI와 마찬가지로 공격의 대상이 될 수 있음. +예를 들어, 데이터 중독(Data Poisoning) 공격은 모델이 잘못된 예측을 하도록 유도할 수 +있으므로, 보안 패치와 업데이트는 이를 예방하는 데 필수적임 +▸데이터 보호: Predictive AI는 종종 민감한 정보나 금융 데이터를 처리하므로, 보안 취약점 +이 있으면 데이터 유출로 이어질 가능성이 높음 + + +![이미지 108-0](images/p0108_img0.png) + + +![이미지 108-1](images/p0108_img1.png) + + +![이미지 108-2](images/p0108_img2.png) + + +![이미지 108-3](images/p0108_img3.png) + + +![이미지 108-4](images/p0108_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +99 +4.2 +성능 및 장애 관리 +• 모델 성능 저하가 감지되면 재학습을 통해 성능을 유지하고, 관련 시스템을 구축하여 장애 발생 +시에도 서비스 가용성을 유지할 수 있도록 함 + +#### 4.2.1 + +서비스 장애가 발생했을 때 자동으로 복구할 수 있도록 하고 있는가? +• 자동 복구 시스템을 구축하여 서비스 장애가 발생했을 때 자동으로 복구할 수 있도록 해야 함 +• Generative AI 서비스 제공 시 장애가 발생했을 때 자동으로 복구하는 것이 중요한 이유 +- 서비스 장애 발생 시 영향 +▸사용자 경험: Generative AI는 실시간 상호작용이 중요한 서비스임. 예를 들어, 사용자가 질 +문을 입력했는데 응답이 늦거나 제공되지 않으면 서비스 신뢰도가 크게 하락할 수 있음 +▸창의성 및 생산성 저하: 콘텐츠 생성 중 장애가 발생하면 사용자 작업 흐름이 끊기거나 데이 +터가 손실될 수 있음 +▸실시간 응답 요구: 특히 실시간 응답이 중요한 고객 지원, 콘텐츠 제작 도구에서의 장애는 즉 +각적인 문제 해결과 복구가 필요함 +• Predictive AI 서비스 제공 시 장애가 발생했을 때 자동으로 복구하는 것이 중요한 이유 +- 서비스 장애 발생 시 영향 +▸의사결정 지연: Predictive AI는 중요한 비즈니스 의사결정이나 시스템 운영(예: 공장 설비 +관리, 금융 거래)에 활용됨. 장애가 발생하면 의사결정이 지연되어 업무나 시스템에 직접적인 +영향을 미칠 수 있음 +▸데이터 흐름 중단: 예측 모델은 실시간으로 데이터를 수집하고 처리하는 경우가 많음. 데이터 +입력이 중단되거나 처리 지연이 발생하면 결과의 신뢰도와 정확도가 저하됨 +▸비용 증가: Predictive AI의 예측 실패는 물류, 생산, 운영 등에서 비용 증가와 손실로 이어 +질 수 있음 + + +![이미지 109-0](images/p0109_img0.png) + + +![이미지 109-1](images/p0109_img1.png) + + +![이미지 109-2](images/p0109_img2.png) + + +![이미지 109-3](images/p0109_img3.png) + + +![이미지 109-4](images/p0109_img4.png) + + +--- + + +#### 4.2.2 + +모델 성능을 지속적으로 모니터링하고, 성능 저하가 감지되면 재학습을 통해 +성능을 유지하고 있는가? +• 운영 중인 AI 모델은 시간이 지남에 따라 성능이 저하되거나, 데이터의 변화로 인해 훈련 데이터 +와 실시간 데이터 간에 차이가 발생하는 모델 드리프트(Model Drift) 현상이 발생할 수 있음. +- 현실 적합성 부족: 시간이 지남에 따라 모델이 최신 정보나 사용자 요구를 반영하지 못해 구식 +이 되거나, 현실과 동떨어진 결과를 생성할 수 있음 +- 데이터 드리프트(Data Drift): 시간이 지남에 따라 데이터 분포가 변화하면, 모델이 학습했던 +데이터와 실제 데이터 간의 불일치가 발생함 +• 모델 성능을 지속적으로 모니터링하고, 성능 저하가 감지되면 재학습을 통해 성능을 유지해야 함 +• Generative AI 서비스 제공 시 모델 성능 저하의 영향 +- 품질 저하: 생성된 콘텐츠의 품질(예: 문법 오류, 맥락 부적합, 비논리적 답변 등)이 낮아져 사 +용자 만족도 감소 +- 사용자 신뢰 손실: 사용자에게 정확하고 맥락에 맞는 정보를 제공하지 못하면 서비스 신뢰도 하락 +• Predictive AI 서비스 제공 시 모델 성능 저하의 영향 +- 예측 정확도 감소: 모델이 실제 데이터 분포를 제대로 반영하지 못하면 잘못된 예측을 제공할 +수 있음.(예: 행동 예측 오류로 마케팅 비용 낭비, 재고 부족 또는 과잉 발생) +- 비즈니스 손실: 예측 실패로 인해 물류, 금융, 운영 등에서 직접적인 손실이 발생할 수 있음 + +#### 4.2.3 + +실시간으로 모델 드리프트 탐지 시스템을 운영하여 모델 성능이 저하될 경우 즉시 +대응할 수 있는 체계를 마련하고 있는가? +• 실시간 데이터와 훈련 데이터 간의 차이로 인해 모델의 예측 성능이 떨어져 보안 취약점이 발생 +할 수 있음. 이 경우에는 실시간으로 모델 드리프트 탐지 시스템을 운영하여 모델 성능이 변할 경 +우 즉시 대응할 수 있는 체계를 마련해야 함 +• Generative AI 서비스 제공 시 모델 성능에 대한 실시간 탐지 및 대응의 중요성 +- 빠른 오류 수정: 드리프트를 실시간으로 탐지하면, 품질 저하가 사용자 경험에 영향을 미치기 +전에 신속하게 대응 가능 +- 동적 콘텐츠 적응: 드리프트 탐지 시스템은 새로운 사용자 입력 패턴이나 트렌드를 인식하고 +적응할 수 있도록 모델 업데이트를 지원 +- 서비스 연속성 보장: 탐지된 드리프트를 해결함으로써 지속적으로 일관성 있고 고품질의 콘텐 +츠를 제공할 수 있음 +• Predictive AI 서비스 제공 시 모델 성능에 대한 실시간 탐지 및 대응의 중요성 +- 정확성 유지: 실시간 드리프트 탐지는 예측 결과의 정확성을 유지하고, 잘못된 결과를 방지 +- 의사결정 지원: 모델 성능 저하가 감지되면 즉시 조치를 취하여 비즈니스 의사결정이 잘못된 +데이터를 기반으로 하지 않도록 보장 +- 비용 절감: 드리프트로 인한 손실을 조기에 방지하여 비즈니스 연속성과 수익성을 보호 + + +![이미지 110-0](images/p0110_img0.png) + + +![이미지 110-1](images/p0110_img1.png) + + +![이미지 110-2](images/p0110_img2.png) + + +![이미지 110-3](images/p0110_img3.png) + + +![이미지 110-4](images/p0110_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +101 + +#### 4.2.4 + +정기적으로 모델 재학습 및 업데이트를 수행하여 새로운 데이터 패턴을 반영하고, +성능을 개선하고 있는가? +• 모델 성능이 저하되면 잘못된 의사결정을 내릴 수 있으며, 이를 공격자가 악용할 수 있음 +• Generative AI 서비스 제공 시 정기적인 재학습이 중요한 이유 +- 민감 정보 제거: 과거 학습 데이터에서 모델이 민감하거나 기밀 정보를 학습한 경우, 정기적으 +로 업데이트하여 이러한 정보를 제거하고 오용 가능성을 줄일 수 있음 +- 보안 취약점 보완: 악성 입력(예: prompt injection 공격)이나 예측 가능한 응답 패턴을 탐지 +하고, 정기적인 업데이트로 이를 수정하여 악의적 사용을 방지 +- 콘텐츠 생성 안전성 강화: 업데이트를 통해 모델이 불법적이거나, 부적절한 콘텐츠를 생성하지 +않도록 제어 및 필터링 성능을 개선 +• Predictive AI 서비스 제공 시 정기적인 재학습이 중요한 이유 +- 새로운 위협 탐지: 사이버 보안, 사기 탐지와 같은 Predictive AI 서비스는 새로운 공격 패턴 +과 수법에 적응하기 위해 최신 데이터를 반영(예: 피싱 이메일의 텍스트 패턴 변화 또는 새로 +운 네트워크 공격 패턴 학습) +- 오탐률 및 미탐률 감소: 오래된 모델은 위협 탐지에서 오탐률(False Positive) 또는 미탐률 +(False Negative)을 증가시켜 보안 문제를 유발할 수 있음. 정기적인 업데이트로 이를 줄일 +수 있음 +- 보안 규제 준수: 정기적으로 모델을 재학습하면 최신 데이터 보안 규정을 준수하고, 데이터 사 +용 정책이 변경될 때 이를 반영할 수 있음 + + +![이미지 111-0](images/p0111_img0.png) + + +![이미지 111-1](images/p0111_img1.png) + + +![이미지 111-2](images/p0111_img2.png) + + +![이미지 111-3](images/p0111_img3.png) + + +![이미지 111-4](images/p0111_img4.png) + + +--- + + +#### 4.2.5 + +AI 서비스에 대해 다중화(HA) 및 백업 시스템을 구축하여 장애 발생 시에도 +서비스가 연속적으로 제공될 수 있도록 하고 있는가? +• AI 서비스는 항상 가용성을 유지해야 하지만, 서비스 운영 중 장애가 발생하거나 서비스가 과부 +하 또는 DoS/DDoS 공격으로 인해 시스템이 다운되면 고객에게 심각한 영향을 미칠 수 있음 +• AI 서비스에 대해 다중화(HA) 및 백업 시스템을 구축하여 장애 발생 시에도 서비스가 연속적으 +로 제공될 수 있도록 해야 함 +• Generative AI 서비스 제공 시 다중화 및 백업의 중요성 +- 서비스 연속성 보장: 다중화된 시스템은 장애가 발생해도 대체 서버나 리소스를 통해 서비스를 +지속적으로 제공하므로, 데이터가 유실되거나 무단으로 노출될 위험을 줄임.(예: 실시간 대화형 +서비스에서 장애가 발생하더라도 사용자 데이터를 안전하게 처리) +- 데이터 보존 및 복구: 백업 시스템은 생성된 콘텐츠와 사용자 요청 데이터를 안전하게 저장하 +며, 장애 이후에도 원래 상태로 복구할 수 있도록 보장함. 데이터 손실로 인해 악의적 행위자 +가 시스템 내 취약점을 노리는 상황을 방지 +- 사이버 공격 방어: 장애 상황에서 서비스가 중단되면, 이를 노리는 DDoS 공격이나 데이터 유 +출 시도가 증가할 수 있음. 다중화는 이러한 공격에 대한 방어력을 강화함 +• Predictive AI 서비스 제공 시 다중화 및 백업의 중요성 +- 실시간 보안 위협 대응: Predictive AI는 사이버 공격, 사기 탐지, 네트워크 이상 탐지 등 보 +안과 직접적으로 관련된 역할을 수행함. 다중화된 시스템은 장애 발생 시에도 실시간 대응을 +유지해 보안 사고를 방지할 수 있음 +- 중단 없는 데이터 흐름 유지: 백업 시스템은 데이터 입력과 처리의 연속성을 보장하며, 장애로 +인해 중요한 데이터를 놓치거나 보안 위협을 간과하는 문제를 방지함 +- 신뢰할 수 있는 복구 체계: Predictive AI 서비스는 장애 발생 시 신속하고 정확한 복구가 필 +수적임. 백업 시스템은 보안 위협 탐지와 같은 중요한 작업이 지속되도록 보장함 + + +![이미지 112-0](images/p0112_img0.png) + + +![이미지 112-1](images/p0112_img1.png) + + +![이미지 112-2](images/p0112_img2.png) + + +![이미지 112-3](images/p0112_img3.png) + + +![이미지 112-4](images/p0112_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +103 + +#### 4.2.6 + +침입차단시스템 등을 통해 외부에서 발생하는 DoS/DDoS 공격을 방어하고, +실시간 모니터링 시스템을 운영하여 장애를 빠르게 감지하고 대응하고 있는가? +• 운영 중 발생하는 장애에 대한 대응이 늦어지면 고객 불만이 발생하고, 비즈니스 중단으로 이어질 +수 있음 +• 침입 방지 및 차단 시스템을 통해 외부에서 발생하는 DoS/DDoS 공격을 방어하고, 실시간 모니 +터링 시스템을 운영하여 장애를 빠르게 감지하고 대응해야 함 +• Generative AI 서비스 제공 시 DoS/DDoS 방어 및 실시간 모니터링의 중요성 +- 서비스 연속성 보장: 침입차단시스템과 같은 보안 장치를 통해 DoS/DDoS 공격을 방어하면, +서비스 중단 없이 사용자 요청을 처리할 수 있음.(예: 요청의 우선순위를 관리하거나 비정상 +트래픽을 차단하여 정당한 사용자 요청이 처리되도록 보장함) +- 사용자 데이터 보호: 실시간 모니터링을 통해 비정상 트래픽과 패턴을 빠르게 감지하여, 데이 +터 유출과 추가적인 공격 가능성을 방지할 수 있음 +• Predictive AI 서비스 제공 시 DoS/DDoS 방어 및 실시간 모니터링의 중요성 +- 실시간 데이터 보호: DoS/DDoS 방어를 통해 실시간으로 들어오는 데이터를 안정적으로 처 +리하여 예측 결과의 신뢰성을 유지할 수 있음.(예: 정상적인 데이터가 차단되지 않고 지속적으 +로 모델에 공급될 수 있도록 보장) +- 비즈니스 연속성 보장: Predictive AI의 의사결정 시스템이 중단되지 않도록 실시간 모니터링 +으로 장애를 빠르게 감지하고 대응할 수 있음 + + +![이미지 113-0](images/p0113_img0.png) + + +![이미지 113-1](images/p0113_img1.png) + + +![이미지 113-2](images/p0113_img2.png) + + +![이미지 113-3](images/p0113_img3.png) + + +![이미지 113-4](images/p0113_img4.png) + + +--- + +피드백 및 서비스 개선 +5.1 +사용자 피드백 관리 +• 사용자 피드백, 성능 모니터링, 보안 로그, 성과 평가 등을 기반으로 AI 시스템을 개선하는 과정 +에서 발생할 수 있는 보안 취약점이 존재함. 이 단계는 AI 서비스의 품질과 성능을 지속적으로 +향상시키는 중요한 과정이지만, 보안 관리가 소홀할 경우 공격자가 취약점을 악용할 수 있는 위험 +이 큼 + +#### 5.1.1 + +사용자 피드백 시스템에 입력 검증 및 필터링을 적용하여 악성 코드나 +비정상적인 데이터 입력을 차단하고 있는가? +• 사용자 피드백을 수집하는 과정에서 공격자가 피드백 시스템을 악용해 악의적인 데이터를 입력하 +거나 시스템에 해를 가할 수 있음 +※ 피드백 인젝션(Feedback Injection): 공격자가 악성 코드나 비정상적인 데이터를 식에 주입하여 시스템을 손 +상시킬 수 있음 +• Generative AI 서비스 제공 시 사용자 피드백 입력 검증 및 필터링의 중요성 +- 악성 데이터 차단: 입력 데이터에 대한 검증 및 필터링을 통해 악성 코드나 의도적으로 조작된 +데이터를 제거하여 시스템을 보호(예: 특수 문자를 제한하거나, 유효한 데이터 형식을 강제하 +여 악성 입력을 방지) +- 유해 콘텐츠 생성 방지: 입력 검증으로 사용자가 악의적으로 특정 결과를 유도하는 공격을 차 +단하여 모델이 안전하고 신뢰할 수 있는 콘텐츠만 생성하도록 보장 +• Predictive AI 서비스 제공 시 사용자 피드백 입력 검증 및 필터링의 중요성 +- 모델의 신뢰성 유지: 악의적 피드백 데이터가 모델 학습에 사용되지 않도록 필터링하여, 모델 +이 신뢰할 수 있는 데이터만 학습하게 함.(예: 비정상 데이터로 인해 발생할 수 있는 False +Positive 또는 False Negative 결과 방지) +- 보안 위협 차단: Predictive AI가 사이버 공격 탐지에 사용되는 경우, 입력 검증은 보안 위협 +탐지의 신뢰성을 높이고 잘못된 경보를 방지함.(예: 위조된 위협 데이터를 차단하여 모델이 오 +탐지하지 않도록 보장) + + +![이미지 114-0](images/p0114_img0.png) + + +![이미지 114-1](images/p0114_img1.png) + + +![이미지 114-2](images/p0114_img2.png) + + +![이미지 114-3](images/p0114_img3.png) + + +![이미지 114-4](images/p0114_img4.png) + + +![이미지 114-5](images/p0114_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +105 + +#### 5.1.2 + +사용자 피드백을 자동으로 분석하기 전에 사전 검증 절차를 마련하여 +피드백 데이터의 무결성을 확인하고 있는가? +• 자동화된 데이터 정제를 통해 유효하지 않은 피드백을 걸러내고, 거짓 피드백을 탐지할 수 있는 +알고리즘을 도입 +※ 거짓 피드백: 악의적인 사용자가 부정확하거나 거짓된 피드백을 제공해 모델 성능에 부정적인 영향을 미칠 수 +있음 +• Generative AI 서비스 제공 시 사용자 피드백에 대한 사전 검증 절차의 중요성 +- 악성 데이터 차단: 입력된 피드백 데이터를 자동 분석 전에 검증하여 악성 코드, 유해 콘텐츠, +또는 비정상 데이터를 사전에 차단 가능 +- 모델 안전성 강화: 검증 절차를 통해 모델에 전달되는 데이터의 무결성을 확보하여, 예상치 못 +한 결과나 오작동을 방지 가능 +• Predictive AI 서비스 제공 시 사용자 피드백에 대한 사전 검증 절차의 중요성 +- 데이터 오염 방지: 피드백 데이터에 포함된 비정상적 데이터 또는 악의적 입력을 제거하여, 학 +습 데이터의 무결성을 유지(예: 이상치 탐지 및 데이터 유효성 검사를 통해 데이터 품질을 향상). +- 모델 안정성 및 보안 강화: 예측 모델이 학습하는 데이터가 항상 신뢰할 수 있는 상태임을 보 +장하여, 악의적인 의도로 인한 보안 사고를 방지 + +#### 5.1.3 + +최소 권한 원칙(Least Privilege)을 적용하여 사용자 피드백 및 개선 과정에서 +접근할 수 있는 권한을 최소화하고 있는가? +• 피드백을 반영하거나 성능을 개선하는 과정에서 접근 제어가 미흡하면, 내부 인력이나 외부 공격 +자가 시스템에 무단으로 접근하거나 데이터를 수정할 수 있음. 따라서 최소 권한 원칙(Least +Privilege)을 적용하여 피드백 및 개선 과정에서 접근할 수 있는 권한을 최소화함 +• Generative AI 서비스 제공 시 사용자 피드백 접근권한에 대한 최소 권한 원칙의 중요성 +- 데이터 유출 방지: 사용자 피드백 데이터에 접근할 수 있는 권한을 최소화함으로써, 데이터 유 +출이나 무단 사용을 방지. (예: 특정 역할(예: 데이터 분석가)에게만 피드백 데이터 접근 권한 +부여) +- 권한 오남용 방지: 권한이 불필요하게 확장되지 않도록 하여 내부 직원이나 시스템 관리자의 +악의적 행위(예: 데이터 삭제, 유출 등)를 방지 +• Predictive AI 서비스 제공 시 사용자 피드백 접근권한에 대한 최소 권한 원칙의 중요성 +- 데이터 무결성 유지: 피드백 데이터를 검증하고 처리할 수 있는 권한을 제한하여, 데이터 조작 +및 왜곡 방지 +- 보안 사고 영향 축소: 권한을 최소화함으로써, 보안 사고가 발생하더라도 피해 범위를 제한하 +고 민감 데이터 보호 +- 비즈니스 연속성 보장: 권한 남용으로 인해 예측 모델이 오작동하거나 의사결정에 영향을 미치 +는 문제를 방지하여 비즈니스 연속성을 유지 + + +![이미지 115-0](images/p0115_img0.png) + + +![이미지 115-1](images/p0115_img1.png) + + +![이미지 115-2](images/p0115_img2.png) + + +![이미지 115-3](images/p0115_img3.png) + + +![이미지 115-4](images/p0115_img4.png) + + +--- + + +#### 5.1.4 + +사용자 피드백 처리 및 개선 과정에서 이루어진 모든 접근 및 변경 사항을 감사 +로그로 기록하고, 정기적으로 검토하여 무단 접근을 탐지하고 있는가? +• 내부 인력이 과도한 권한을 통해 데이터나 모델을 무단으로 수정할 수 있는 위험이 있음 +• 피드백 처리 및 개선 과정에서 이루어진 모든 접근 및 변경 사항을 감사 로그로 기록하고, 정기적 +으로 검토하여 무단 접근을 탐지함 +• Generative AI 서비스 제공 시 감사 로그 관리의 중요성 +- 무단 접근 탐지: 모든 접근과 변경 사항을 감사 로그로 기록함으로써, 비정상적 접근 시도를 +탐지하고 대응할 수 있음.(예: 비인가 사용자가 피드백 데이터를 조회하거나 모델 학습 데이터 +에 접근하려는 시도) +- 모델 안전성 보장: 모델 개선 과정에서 이루어진 모든 변경 사항을 기록하여, 의도치 않은 변 +경이나 악의적인 조작을 사전에 방지(예: 잘못된 학습 데이터를 삽입한 사용자를 추적하여 수정) +- 책임성 확보 및 추적 가능성 강화: 피드백 데이터 처리 과정에서 발생한 문제를 정확히 파악하 +고, 이를 책임질 수 있도록 추적 가능성을 보장 +• Predictive AI 서비스 제공 시 감사 로그 관리의 중요성 +- 데이터 무결성 보장: 피드백 데이터에 대한 모든 변경 사항을 기록하고 검토함으로써 데이터 +무결성을 유지하고 조작 가능성을 제거(예: 피드백 데이터가 언제, 누구에 의해 변경되었는지 +를 정확히 기록) +- 모델 성능 추적 및 복구 지원: 변경 사항을 기록하면, 모델 성능 저하가 발생했을 때 문제의 +원인을 추적하고 복구하는 데 도움을 줄 수 있음.(예: 특정 피드백 데이터가 추가된 후 예측 정 +확도가 저하된 경우 해당 데이터를 식별하고 수정) +- 보안 사고 대응력 강화: 무단 접근이나 변경이 발견되었을 때, 감사 로그를 통해 책임자를 확 +인하고 필요한 보안 조치를 신속히 취할 수 있음. + + +![이미지 116-0](images/p0116_img0.png) + + +![이미지 116-1](images/p0116_img1.png) + + +![이미지 116-2](images/p0116_img2.png) + + +![이미지 116-3](images/p0116_img3.png) + + +![이미지 116-4](images/p0116_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +107 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 모델이 더 이상 사용되지 않는 경우에 훈련된 데이터와 내부 알고리즘이 남아 있으면 해커나 +내부자의 접근을 통해 관련 내용들이 유출될 위험이 있음. 또한 폐기되지 않은 AI 모델이 남아 +있으면 의도치 않은 방식으로 다시 사용될 가능성이 있으므로, AI 서비스 제공자는 AI 모델 및 +관련 데이터에 대한 폐기 프로세스를 명확히 정의하고 운영해야 함 + +#### 6.1.1 + +모델 파기 시, 모델 파일을 완전히 삭제하고 복구할 수 없도록 처리하고 있는가? +• AI 시스템이 사용 중이던 데이터가 시스템을 폐기하거나 교체할 때 적절하게 삭제되지 않으면, +민감한 데이터가 남아 있을 수 있음. 데이터베이스, 로그 파일, 캐시 등에서 데이터가 완전히 삭 +제되지 않는 경우가 있음 +• 남아 있는 데이터가 유출되거나 악용될 위험이 있음. 특히 개인정보나 기밀 데이터가 포함된 경우 +심각한 데이터 유출 사고로 이어질 수 있음 +• Generative AI와 Predictive AI는 각각 고유한 특성과 데이터를 다루기 때문에, 모델 파기의 중 +요성은 서비스 유형에 따라 다르게 나타날 수 있음 +• Generative AI 서비스 제공 관점 +- 모델 특성과 데이터 보호 +▸훈련 데이터 재노출 방지: Generative AI는 종종 민감하거나 기밀 데이터로 학습되기도 함. +파기되지 않은 모델 파일이 유출되면, 모델의 메모리 현상(훈련 데이터의 직접 재생산)을 통 +해 원본 데이터가 노출될 위험이 있음 +▸출력물 유출 방지: 파기되지 않은 모델이 유출되면, 조직의 기밀 정보나 사용자의 요청 결과 +가 외부로 노출될 가능성이 있음 +• Predictive AI 서비스 제공 관점 +- 잘못된 예측 방지 +▸오래된 모델의 재사용 방지: Predictive AI 모델은 시간이 지남에 따라 데이터의 특성이 변 +화하거나 정확성이 떨어질 수 있음. 완전히 파기하지 않은 모델이 복구되어 사용되면, 비즈니 +스 의사결정에 부정확한 예측 결과를 제공할 수 있음 +▸모델 관리 투명성 확보: 파기되지 않은 모델이 비인가된 방식으로 재사용되면, 서비스 품질에 +악영향을 미치고 사용자 신뢰를 저하시킬 수 있음 +- 비즈니스 및 보안 리스크 관리 +▸경쟁사 악용 방지: Predictive AI 모델 파일이 유출되면, 경쟁사가 이를 역공학하여 예측 로 +직이나 데이터를 추출해 경쟁 우위를 확보할 수 있음 +▸보안 위협 완화: 미완전한 파기로 인해 모델이 복구 가능한 상태로 남아 있으면, 사이버 공격 +의 대상이 될 가능성이 높아질 수 있음 + + +![이미지 117-0](images/p0117_img0.png) + + +![이미지 117-1](images/p0117_img1.png) + + +![이미지 117-2](images/p0117_img2.png) + + +![이미지 117-3](images/p0117_img3.png) + + +![이미지 117-4](images/p0117_img4.png) + + +![이미지 117-5](images/p0117_img5.png) + + +--- + + +#### 6.1.2 + +시스템을 폐기하거나 교체할 때 AI 모델에서 사용 중이던 관련 파일 및 +데이터를 삭제하고 있는가? +• AI 모델이 퇴역하거나 교체될 때 모델 파일 및 관련 데이터를 완전히 삭제하고 복구할 수 없도록 +처리해야 함 +• Generative AI와 Predictive AI는 데이터 처리 방식과 활용 목적이 다르기 때문에, 시스템 폐기 +또는 교체 시 파일 및 데이터 삭제의 중요성을 각각 구분하여 설명할 수 있음 +• Generative AI 서비스 제공 관점 +- 민감한 데이터 및 훈련 데이터 보호 +▸데이터 재노출 위험: Generative AI는 대규모 텍스트, 이미지, 음성 데이터를 학습함. 폐기 +된 시스템에 훈련 데이터가 남아 있으면 기밀 데이터가 복구되어 외부로 노출될 위험이 있음 +▸메모리 현상 방지: Generative AI 모델은 훈련 중 학습한 민감한 정보를 출력할 가능성이 +있음. 사용 중이던 데이터를 완전히 삭제하지 않으면, 이후 악의적으로 사용되어 민감한 정보 +가 재노출될 수 있음 +- 생성 모델의 악용 방지 +▸유해 콘텐츠 생성: 시스템 폐기 후 남겨진 Generative AI 모델 파일이 제3자에 의해 복구되 +거나 유출되면, 유해 콘텐츠를 생성하는 데 악용될 수 있음 +▸기술 오용 방지: 생성 모델의 알고리즘이나 구조가 남아 있다면, 이를 분석하여 경쟁사나 공 +격자가 악의적으로 사용할 수 있음 +• Predictive AI 서비스 제공 관점 +- 민감한 예측 데이터 보호 +▸데이터 역추적 방지: Predictive AI의 예측 결과를 기반으로 중요한 패턴이나 개인 데이터를 +역추적할 가능성이 있으므로, 관련 파일을 완전히 삭제해야 함 +- 기밀 데이터 보호 +▸모델 및 알고리즘 보호: Predictive AI 모델은 기업의 분석 및 예측 역량을 강화하는 핵심 +기술임. 폐기된 시스템에서 이러한 기술이 유출되면, 경쟁사나 제3자에 의해 활용될 수 있음 +▸비즈니스 데이터 보호: Predictive AI가 분석한 데이터는 기업의 전략적 자산으로, 삭제되지 +않으면 비즈니스 기밀이 노출될 가능성이 있음 + + +![이미지 118-0](images/p0118_img0.png) + + +![이미지 118-1](images/p0118_img1.png) + + +![이미지 118-2](images/p0118_img2.png) + + +![이미지 118-3](images/p0118_img3.png) + + +![이미지 118-4](images/p0118_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +109 + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 +인터페이스를 비활성화하여 외부 접근을 차단하고 있는가? +• AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 인터페이스를 비활성화하여 외부 +접근을 차단해야 함 +• Generative AI와 Predictive AI 서비스는 모델 활용 방식과 데이터 처리 목적이 다르기 때문에, +API나 인터페이스를 비활성화하는 중요성은 서비스 관점에 따라 구분될 수 있음 +• Generative AI 서비스 제공 관점 +- 리소스 오용 방지 +▸비용 낭비 예방: 사용하지 않는 모델에 대한 API 호출이 남아 있으면, 서버 자원이 불필요하 +게 소모되어 비용이 증가할 수 있음 +▸성능 저하 방지: 외부에서의 무분별한 접근은 다른 활성 모델이나 서비스에 영향을 미쳐 전 +체 시스템의 성능을 저하시킬 수 있음 +- 보안 위협 차단 +▸사이버 공격 방지: 비활성화되지 않은 API는 공격자가 모델의 취약점을 분석하거나 악용할 +수 있는 경로가 됨. 이를 통해 서비스 중단, 데이터 탈취 등 보안 사고로 이어질 수 있음 +▸비인가 접근 방지: 모델이 더 이상 관리되지 않음에도 외부 접근이 가능하면, 무단으로 모델 +을 호출하거나 데이터를 악용할 수 있음 +• Predictive AI 서비스 제공 관점 +- 비즈니스 리스크 관리 +▸예측 서비스 악용 방지: 비활성화되지 않은 API가 경쟁자 또는 악의적인 사용자에 의해 호출 +되면, 기업의 분석 및 예측 역량이 노출될 수 있음 +▸불필요한 운영 부담 감소: 사용되지 않는 Predictive AI 모델의 API 호출은 운영 비용을 증 +가시키고, 현재 운영 중인 모델 및 시스템의 자원을 소모할 수 있음 +- 보안 위협 차단 +▸모델 공격 방지: Predictive AI 모델의 API는 입력 패턴을 분석해 모델을 왜곡하거나, 예측 +알고리즘에 영향을 미치는 공격의 대상이 될 수 있음 +▸시스템 무결성 보장: 사용하지 않는 API를 통해 외부 접근이 가능하면, 내부 시스템에 대한 +부정적인 영향을 초래할 수 있음. 이를 비활성화함으로써 시스템 무결성을 유지할 수 있음 + + +![이미지 119-0](images/p0119_img0.png) + + +![이미지 119-1](images/p0119_img1.png) + + +![이미지 119-2](images/p0119_img2.png) + + +![이미지 119-3](images/p0119_img3.png) + + +![이미지 119-4](images/p0119_img4.png) + + +--- + + + +--- + +AI 이용자를 위한 +보안 수칙 + + +![이미지 121-0](images/p0121_img0.png) + + +--- + +개요 +「이용자 수칙」 개발 필요성 +●AI 서비스가 안전하게 설계되었더라도, 이용자가 부주의하게 행동하면 보안 사고가 발생할 수 있 +다. 예를 들어, 민감한 정보를 AI 시스템에 입력하거나, 자신도 모르게 악성 AI 응용 프로그램을 +실행할 경우 위험이 커질 수 있다. 해커들은 주로 이용자를 대상으로 한 사회공학적 기법(예: 피싱, +사기)을 활용하기 때문에, AI 이용자 대상 보안수칙은 이용자가 이러한 위험을 인식하고 대응하도 +록 하는 것이 반드시 필요하다. +●이에, 본 안내서의 「이용자 수칙」에서는 윤리적인 원칙 선언에 그치지 않고 AI 서비스 접속・이용단 +계에서 이용자가 지켜야 할 구체적인 보안 행동 지침을 제공하고자 한다. 이용자는 AI 서비스에 입 +력하는 데이터가 저장되거나 악용될 가능성을 이해하지 못할 수 있다. 보안수칙에는 어떤 데이터를 +입력해야 안전한지, 어떤 데이터는 공유하면 안 되는지에 대한 명확한 가이드를 제공하고자 하였 +다. 또한 이용자가 AI를 통해 허위 정보, AI 악용 콘텐츠, 악성 코드 등을 생성하지 않도록 가이드 +라인을 제공하고자 하였다. +「이용자 수칙」 도출 과정 및 참고자료 +●2024년 6월부터 구성・운영된 「AI 보안 정책 포럼」을 비롯해서 다양한 전문가 의견수렴 과정을 거 +쳤다. 초안 작성 후 한국인터넷진흥원(KISA)과의 협의 과정에서 몇 차례 수정작업을 거쳐 최종본이 마련되었다. +●미국, 유럽, 일본 등 해외 자료를 참고하였고, 국내자료로는 국가정보원의 「챗GPT 등 생성형 AI +활용 보안 가이드라인」 등을 참고하였다. +활용 방안 +●AI 서비스로 인한 피해를 사전에 예방하기 위해 AI 서비스 접속부터 이용단계까지 이용자가 지켜야 +할 구체적인 행동 지침으로 기능할 것으로 기대한다. 또한 새로운 기술 개발이나 공격 유형이 나타날 +때마다 관련 내용을 업데이트하여, 이용자 대상 교육 및 홍보 자료로도 활용 가능 할 것으로 기대 +된다. + + +![이미지 122-0](images/p0122_img0.png) + + +![이미지 122-1](images/p0122_img1.png) + + +![이미지 122-2](images/p0122_img2.png) + + +![이미지 122-3](images/p0122_img3.png) + + +![이미지 122-4](images/p0122_img4.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +113 +AI 이용자에게 발생할 수 있는 보안위협 사례 +본 시나리오들은 AI 서비스의 다양한 활용 사례에서 발생할 수 있는 해킹, 데이터 유출, 컨텐츠 악용 피해 +등의 사례이다. +●AI 챗봇에서 중요정보 유출 +- 이용자가 입력한 이름, 주소, 금융 정보 등이 AI 챗봇 로그에 저장되고, 해커가 이를 탈취하거나, +챗봇 시스템의 취약점으로 인해 개인의 중요정보가 유출될 수 있다. +- (사례) 챗봇이 사용자와의 대화 중에 실제 이용자들의 이름, 주소, 은행 계좌번호 등 민감한 정보 +를 무작위로 노출하는 사례가 발생하였다. 이는 챗봇의 학습 데이터에 포함된 중요정보가 제대로 +비식별화되지 않고 사용되었기 때문으로 추정된다. +●AI 기반 음성 비서 도청 +- 스마트 AI 스피커가 음성 명령을 기다리는 동안 대화 내용을 녹음하고 이를 외부로 전송하거나 +악용할 수 있다. +- (사례 1) 아마존 에코(Amazon Echo) 사고 +▸2018년, 미국 오리건주 포틀랜드에 거주하는 한 부부의 사적 대화가 아마존의 AI 스피커 '에 +코'에 의해 녹음되어, 부부의 지인에게 전송되는 사건이 발생하였다. AI가 특정 단어를 호출어 +(wake word)로 오인하여 활성화되었고, 이후 대화를 '메시지 전송' 명령으로 잘못 인식하여 +발생한 사례이다. +- (사례 2) 구글 어시스턴트(Google Assistant) 사고 +▸2019년, 구글의 AI 음성비서 '구글 어시스턴트'에 녹음된 사용자들의 대화 1,000건 이상이 외부로 +유출되는 사건이 발생하였다. 구글은 협력사 직원 중 한 명이 데이터 보안 정책을 위반하여 음성 데 +이터를 유출한 것으로 파악하였다. +●AI 챗봇의 악성 링크 배포 +- 해커가 AI 챗봇의 응답을 조작해 사용자에게 악성 코드가 포함된 링크를 배포한다. +- (사례 1) 해커들이 챗GPT와 같은 AI 챗봇을 활용하여 악성 코드를 생성하는 사례가 발견되었 +다. 이스라엘 보안 회사 체크포인트는 챗GPT를 사용해 강력한 해킹 도구를 구축하고, 젊은 여성 +을 사칭해 목표물을 함정에 빠뜨리도록 설계된 새로운 챗봇을 만드는 등의 사이버 범죄 사례를 +보고한 바 있다. +- (사례 2) 피싱 이메일 작성: 챗GPT를 이용해 설득력 있는 피싱 이메일을 생성하는 사례도 증가 +하고 있다. 전문 지식 없이도 챗GPT를 통해 고도로 표적화된 사기 및 피싱 캠페인을 시작하는 + + +![이미지 123-0](images/p0123_img0.png) + + +![이미지 123-1](images/p0123_img1.png) + + +![이미지 123-2](images/p0123_img2.png) + + +![이미지 123-3](images/p0123_img3.png) + + +![이미지 123-4](images/p0123_img4.png) + + +--- + +봇 및 사이트를 구축할 수 있기 때문에 이용자들은 더욱 더 조심하고 보안 수칙에 관심을 가져 +야 한다. +●AI 얼굴 인식 시스템의 해킹 +- 공격자가 얼굴 인식 AI 시스템을 해킹해 다른 사용자의 권한으로 불법 접근하거나 출입을 허용 +할 수 있다. +- (사례) 중국에서는 얼굴 인식 기술이 휴대전화 잠금 해제, 아파트 출입, 고속철 탑승 등 다양한 +분야에 활용되고 있다. 그러나 최근 얼굴 정보를 도용하여 금융 기관에 부정 접근하거나, 딥페이 +크 기술을 이용해 범죄에 악용하는 사례가 늘어나고 있다. 예를 들어, 특정 지역에서는 얼굴 정 +보를 훔쳐 판매하려던 용의자가 체포되었으며, 이를 통해 금융 기관에 로그인하여 자금을 탈취한 +사건도 발생하였다. +- 생체 인식 정보는 유출될 경우 위・변조 등의 위험이 있으며, 한 번 유출되면 변경이 불가능하다 +는 특성 때문에 심각한 피해를 초래할 수 있다. 따라서 이용자들은 생체 정보를 제공할 때는 해 +당 AI 서비스 제공자를 더욱 더 의심하고 확인해야 한다. +●AI 서비스의 딥페이크 영상 유포 +- 공격자가 AI 기반 딥페이크 기술을 사용해 특정 사용자의 영상을 조작해 명예를 실추시키거나 +사기 범죄에 활용한 사례가 있다. +- 딥페이크를 통한 성범죄 및 명예훼손 +▸(사례 1) 지인 능욕 영상 제작 및 유포: 딥페이크 기술을 이용해 특정 인물의 얼굴을 성적 영 +상에 합성하는 '지인 능욕' 범죄가 발생하고 있다. 이는 피해자의 사생활 침해와 명예 훼손을 +초래하며, 심각한 사회적 문제로 대두되고 있다. +▸(사례 2) 청소년 대상 딥페이크 범죄: 최근 10대 청소년들을 중심으로 딥페이크 성범죄가 확 +산되고 있으며, 피해 학교 명단이 SNS에 떠도는 등 사회적 불안이 커지고 있다. +- 딥페이크를 이용한 사기 범죄 +▸(사례 1) 보이스피싱 및 금융 사기: 딥페이크 기술을 통해 특정 인물의 목소리나 얼굴을 합성 +하여 보이스피싱, 금융 사기 등 범죄에 악용되는 사례가 보고되고 있다. 예를 들어, CEO의 +목소리를 모방하여 회사 재무 담당자에게 자금을 이체하도록 지시하는 등의 방식으로 실제 피 +해 사례가 발생하였다. +▸(사례 2) 동남아시아에서의 AI・딥페이크 활용 사기: 동남아시아 지역에서는 범죄 조직이 AI와 +딥페이크 기술을 활용한 사이버 사기를 벌여 막대한 피해를 초래한 사고가 보고되었다. 유엔 +마약범죄사무소(UNODC)는 이러한 기술이 사칭 범죄, 딥페이크 포르노, 사이버 사기 등에 악 +용되고 있다고 지적하였다. + + +![이미지 124-0](images/p0124_img0.png) + + +![이미지 124-1](images/p0124_img1.png) + + +![이미지 124-2](images/p0124_img2.png) + + +![이미지 124-3](images/p0124_img3.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +115 +- 따라서 이용자들은 AI 서비스 접속 및 이용 시 각별히 주의해야 하고, 컨텐츠 악용에 대한 피해 +를 예방하기 위해 함께 노력해야 한다. +●AI를 악용한 사이버 테러 등 +- ChatGPT 등 생성형 AI를 악용하여 악성코드를 생성하거나, 프로그램을 손상시키는 등 사이버 +공격에 필요한 정보를 획득하거나 실제 테러를 위한 준비를 할 수 있다. +▸(사례 1) 마이크로소프트(MS)의 분석에 따르면, 중국, 러시아, 북한 등은 ChatGPT를 악의적 +인 사이버 활동에 활용하고 있으며, 특히 북한에서는 암호화폐 탈취 등을 위해 적극적으로 생 +성형 AI를 이용하고 있다고 발표하였다. +▸(사례 2) ’25년 1월 1일 미국 라스베이거스 트럼프호텔 정문에서 발생한 테슬라의 ‘사이버트 +럭’ 폭발 사건의 용의자가 ChatGPT 등 생성형 AI를 활용하였다고 경찰 당국이 발표하였으며, +ChatGPT를 통해 폭발물의 목표, 특정 탄약의 이동 속도 등을 검색하고 정보를 수집하였다고 +밝혔다. + + +![이미지 125-0](images/p0125_img0.png) + + +![이미지 125-1](images/p0125_img1.png) + + +![이미지 125-2](images/p0125_img2.png) + + +![이미지 125-3](images/p0125_img3.png) + + +--- + + + +![이미지 126-0](images/p0126_img0.png) + + +![이미지 126-1](images/p0126_img1.png) + + +![이미지 126-2](images/p0126_img2.png) + + +![이미지 126-3](images/p0126_img3.png) + + +![이미지 126-4](images/p0126_img4.png) + + +![이미지 126-5](images/p0126_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +117 +AI 서비스 이용자를 위한 보안 수칙 +AI 서비스 접속 + +## 1. 공식 사이트에서만 다운로드 + +서비스 접근・가입 시, 공식 사이트를 통해 가입 및 프로그램 다운로드 확인하기 +공식 사이트나 검증된 웹 스토어를 이용해야 하는 이유 +●공식 사이트나 검증된 앱 스토어에서 제공하는 소프트웨어는 일반적으로 보안 검토를 거치기 때문 +에 악성 소프트웨어나 바이러스의 위험이 낮다. +●공인된 출처에서 제공하는 AI 도구는 일반적으로 신뢰할 수 있는 개발자나 기업에 의해 만들어졌 +기 때문에 안정성과 성능이 보장된다. +●공식 경로를 통해 다운로드하면 소프트웨어가 정품임을 확인할 수 있으며, 이를 통해 사용 중 발생 +할 수 있는 법적 문제를 피할 수 있다. +●공식 사이트에서 다운로드한 소프트웨어는 정기적으로 업데이트가 제공되며, 문제가 발생했을 때 +고객 지원을 받을 수 있는 가능성이 높다. +●공식 플랫폼에서는 다른 사용자들의 리뷰와 평가를 통해 소프트웨어의 품질과 성능을 확인할 수 +있어, 선택하는 데 도움이 된다. +이용자 주의 사항 +●사이트 접속 전에 해당 서비스의 공식 사이트인지 여부를 확인한다. +●피싱 공격 및 거짓 사이트 방지를 위해 해당 사이트의 SSL 인증서 유무를 확인한다. +●사용하지 않는 불필요한 AI 애플리케이션이나 확장 프로그램은 설치하지 않으며, 설치할 경우 신뢰 +할 수 있는 출처인지 확인한다. +●AI 서비스가 다른 서비스 또는 프로그램에 연계・확장되거나 정보가 공유되는 경우, 관련 연계 프 +로그램 등의 보안 취약여부 등 보안성과 안전성을 확인한다. + + +![이미지 127-0](images/p0127_img0.png) + + +![이미지 127-1](images/p0127_img1.png) + + +![이미지 127-2](images/p0127_img2.png) + + +![이미지 127-3](images/p0127_img3.png) + + +![이미지 127-4](images/p0127_img4.png) + + +![이미지 127-5](images/p0127_img5.png) + + +![이미지 127-6](images/p0127_img6.png) + + +--- + +보안 위협 +●AI 서비스 이용자에게 발생할 수 있는 보안 위협으로 가짜 사이트(Phishing 사이트 또는 Fake +Website)를 통한 정보 탈취도 있다. +●피싱 사이트는 대개 합법적인 AI 서비스 웹사이트와 매우 유사하게 만들어지며, 이용자들은 이러한 +가짜 웹사이트에 자신의 로그인 정보나 신용카드 정보 등을 입력하게 된다. +표 3-1 +피싱 사이트 유형 +도메인 스푸핑 +피싱 사이트는 합법적인 사이트의 도메인 이름과 매우 유사한 이름을 사용하여 사용자를 속 +임. (예) “ai-service.com” 대신 “ai-serv1ce.com”과 같이 오타를 이용한 도메인이 사용될 +수 있음 +합법적인 사이트 +모방 +사이트의 디자인, 로고, 사용자 인터페이스(UI)를 합법적인 사이트와 거의 동일하게 만들어, +이용자가 의심 없이 개인 정보를 입력하도록 유도함 +이메일 피싱 +이메일로 사용자를 유인하여 가짜 웹사이트로 이동하도록 만듬. 이메일에는 긴급한 메시지나 +계정 문제가 있다는 내용으로 사용자의 주의를 끌어 가짜 사이트 링크를 클릭하도록 유도함 +●웹사이트 클론 공격(Website Cloning Attack)은 공격자가 AI 서비스의 웹사이트를 정확하게 복 +제한 가짜 사이트를 만들어 이용자를 속이는 방법이다. 이 공격은 합법적인 AI 서비스와 매우 유사하 +게 만들어져 있으며, 이용자에게 신뢰를 심어주어 민감한 정보를 탈취할 목적으로 사용될 수 있다. +완전한 사이트 +복제 +합법적인 웹사이트의 HTML, CSS, 이미지 파일 등을 그대로 복제하여 실제 사이트처럼 보이 +게 만듬 +로그인 정보 +탈취 +사용자가 로그인 정보나 결제 정보를 입력하면, 이 데이터가 공격자의 서버로 전송됨 +●스피어 피싱(Spear Phishing)은 특정한 개인이나 조직을 목표로 하는 정교한 피싱 공격이다. 공격 +자는 특정 AI 서비스 이용자에 대한 세부 정보를 수집하고, 이 정보를 기반으로 더 신뢰할 수 있게 +보이는 개인화된 가짜 웹사이트를 만들어 공격을 시도한다. +개인화된 공격 +일반적인 피싱보다 더 구체적이고 개인화된 정보를 사용하여 신뢰를 높이고, 사용자가 가짜 +웹사이트에 더 쉽게 속도록 만듬 +조직 대상 +AI 서비스를 사용하는 기업이나 단체를 대상으로 하여, 그들의 조직 내 계정이나 시스템에 접 +근하기 위한 수단으로 스피어 피싱이 사용될 수 있음 +●타이포스쿼팅(Typosquatting)은 이용자가 URL을 잘못 입력할 가능성을 악용하여 비슷한 도메인 +을 등록하는 방식으로, 이용자가 유사한 도메인 이름의 가짜 사이트에 접속하도록 유도한다. 이 공 +격은 이용자가 AI 서비스 웹사이트를 방문할 때 오타를 내거나 실수로 다른 사이트에 접속할 때 +주로 발생한다. + + +![이미지 128-0](images/p0128_img0.png) + + +![이미지 128-1](images/p0128_img1.png) + + +![이미지 128-2](images/p0128_img2.png) + + +![이미지 128-3](images/p0128_img3.png) + + +![이미지 128-4](images/p0128_img4.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +119 +가짜 사이트로 +리디렉션 +사용자가 잘못된 도메인에 접속하면, 가짜 로그인 페이지나 정보 탈취 페이지로 리디렉션됨 + +## 2. 안전한 비밀번호 설정 및 주기적 변경 + +특수문자를 포함한 강력한 비밀번호로 설정하고, 주기적(3개월)으로 변경하기 +계정에 대한 보안을 강화해야 하는 이유 +●비밀번호는 사용자의 계정을 보호하는 첫 번째 방어선으로, 안전하지 않은 비밀번호를 사용하거나 +주기적으로 변경하지 않으면, 해커가 계정에 접근할 위험이 커진다. +●계정이 해킹되면 개인정보, 결제 정보, 민감한 데이터 등이 유출될 수 있다. +●해커는 종종 무작위 대입 공격(브루트포스)이나 사전 공격을 통해 비밀번호를 알아내려고 시도한 +다. 강력하고 안전한 비밀번호는 이러한 공격을 방지하는 데 효과적이다. +●AI 서비스는 사용자의 행동 패턴, 검색 기록, 대화 내용 등 민감한 데이터를 포함할 가능성이 크 +다. 비밀번호가 안전하지 않으면 이러한 데이터를 악의적으로 이용당할 위험이 있다. +●계정이 공격받으면 해당 서비스의 악용이나 변조가 가능해져 잘못된 정보가 생성되거나 사용될 위 +험이 있다. +●계정 보안이 강화되면 해킹이나 피싱 공격으로 인한 피해를 줄일 수 있고, 강력한 비밀번호나 이중 +인증을 사용하면 공격자가 계정을 접근하기 어려워진다. +이용자 주의 사항 +●AI 계정 및 관련 서비스에 접근할 때에는 유추하기 어려운 강력한 비밀번호(충분한 길이 및 대소문 +자, 숫자, 특수 문자 혼합)를 설정해야 하고, 사이트 마다 서로 다른 비밀번호를 사용해야 한다. +●비밀번호는 정기적으로 변경하고, 한번 사용한 비밀번호는 재사용하지 않아야 한다. +보안 위협 +●AI 서비스 이용 시 비밀번호 유추 공격(Password Guessing Attack)은 해커가 사용자의 비밀번 +호를 추측하여 계정에 무단으로 접근하려는 공격 기법이다. 이 공격은 여러 가지 방식으로 이루어 +질 수 있으며, 다음과 같은 유형이 있다. +●무작위 대입 공격(Brute Force Attack)은 해커가 가능한 모든 조합의 비밀번호를 하나씩 대입하 +여 맞출 때까지 시도하는 방식이다. 단순한 비밀번호나 짧은 비밀번호일수록 성공 가능성이 높다. +자동화된 프로그램을 사용하여 빠르게 많은 조합을 시도하기 때문에, 복잡한 비밀번호가 아니면 쉽 + + +![이미지 129-0](images/p0129_img0.png) + + +![이미지 129-1](images/p0129_img1.png) + + +![이미지 129-2](images/p0129_img2.png) + + +![이미지 129-3](images/p0129_img3.png) + + +![이미지 129-4](images/p0129_img4.png) + + +![이미지 129-5](images/p0129_img5.png) + + +--- + +게 뚫릴 수 있다. +●사전 공격(Dictionary Attack)은 일반적으로 사람들이 사용하는 단어나 구문(예: “password123”, +“qwerty”, “123456”)을 사전에 미리 만들어 놓고, 이를 기반으로 비밀번호를 추측하는 방식이다. +사전에는 흔히 사용되는 비밀번호 목록이 포함되며, 사용자가 단순하거나 예측 가능한 비밀번호를 +설정했을 경우 쉽게 뚫릴 수 있다. +●크리덴셜 스터핑(Credential Stuffing)은 다른 웹사이트나 서비스에서 유출된 사용자 계정 정보 +(아이디와 비밀번호)를 사용하여 AI 서비스 계정에 접근하는 방식이다. 사용자가 여러 서비스에서 +동일한 비밀번호를 사용할 경우 성공률이 높아진다. +●사회 공학적 접근(Social Engineering)은 해커가 사용자의 개인정보(예: 생일, 이름, 애완동물 이 +름 등)를 조사한 후, 이를 비밀번호로 사용하는지 추측하는 방식이다. 사용자가 개인적인 정보를 +비밀번호로 설정했을 경우 쉽게 유추될 수 있다. +●스프레이 공격(Password Spraying)은 흔히 사용되는 비밀번호를 다수의 사용자 계정에 동시에 +대입하여 공격하는 방식이다. 특정 계정을 집중적으로 시도하지 않기 때문에 계정 잠금 같은 방어 +메커니즘을 피할 수 있다. + +## 3. 공개된 장소에서 이용 금지 + +카페 등 공공장소 및 공개된 네트워크에서 서비스 이용, 정보 입력 등 금지 +보안이 취약한 장소에서 이용을 자제해야 하는 이유 +●공공 Wi-Fi나 보안이 설정되지 않은 네트워크를 사용하는 경우, 해커가 네트워크를 감청하여 사용 +자의 로그인 정보(아이디, 비밀번호)나 데이터를 탈취할 수 있다. +●공공 장소에서 AI 서비스에 접속하면 화면이나 입력 내용을 어깨 너머로 엿보는 것(Shoulder +Surfing)이 가능하다. 특히, 비밀번호나 민감한 데이터를 입력할 때 주변 사람이 이를 볼 수 있어 +정보가 노출될 위험이 있다. +●보안이 취약한 장소에서는 사용 중인 디바이스(스마트폰, 태블릿, 노트북 등)가 도난당하거나 분실 +될 가능성이 높다. 디바이스가 물리적으로 탈취되면 저장된 로그인 정보, 쿠키, 인증 토큰 등이 악 +용될 수 있다. +●공공 네트워크를 통해 악성 코드나 바이러스가 디바이스에 침투할 수 있다. 해커는 AI 서비스 계정 +을 포함한 사용자의 디지털 자산에 접근하기 위해 키로깅(Keylogging)이나 랜섬웨어를 설치할 가 +능성이 있다. + + +![이미지 130-0](images/p0130_img0.png) + + +![이미지 130-1](images/p0130_img1.png) + + +![이미지 130-2](images/p0130_img2.png) + + +![이미지 130-3](images/p0130_img3.png) + + +![이미지 130-4](images/p0130_img4.png) + + +![이미지 130-5](images/p0130_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +121 +●해커가 가짜 공공 Wi-Fi를 만들어 사용자가 연결하도록 유도할 수도 있다. 사용자가 가짜 네트워 +크에 접속하면, 해커가 모든 통신 내용을 감시하거나 데이터를 가로챌 수 있다. +●AI 서비스 사용 중 대화 내용이나 데이터 업로드 시, 서비스에 업로드되는 정보가 외부로 유출될 +위험이 있다. 이러한 정보는 개인정보, 업무 기밀, 또는 기타 민감한 자료일 수 있다. +●보안이 취약한 환경에서는 실시간으로 발생하는 보안 위협을 감지하거나 대응하기 어렵다. 보안 소 +프트웨어가 제대로 작동하지 않거나 업데이트되지 않은 경우, 위협에 더욱 취약해질 수 있다. +이용자 주의 사항 +●공공 Wi-Fi는 보안이 취약할 수 있으므로, 가상 사설망(VPN)을 사용해 데이터 전송을 암호화하는 +것이 좋다. +●로그인 정보나 금융 정보와 같은 민감한 데이터를 입력하는 것은 피하는 것이 안전하다. +●웹사이트 주소가 HTTPS로 시작하는지 확인한다. 이는 데이터가 암호화되어 전송된다는 것을 의미한다. +●사용하지 않는 네트워크 기능(예: 파일 공유, 프린터 공유 등)을 비활성화하여 보안을 강화할 수 있다. +●사용이 끝난 후 서비스에서 로그아웃하고, 브라우저의 캐시를 삭제하는 것이 좋다. +●공공 Wi-Fi 사용 시 비밀번호를 입력할 때는 주변 사람들에게 보이지 않도록 주의한다. +●인터넷 연결 시 네트워크 방화벽을 활성화하고, 최신 안티바이러스 소프트웨어를 사용하여 보안을 +강화한다. +보안 위협 +●맨-인-더-미들 공격(Man-in-the-Middle Attack, MITM)은 공격자가 이용자와 AI 서비스 간의 +통신을 가로채어 데이터를 탈취하는 방법이다. 가짜 사이트를 사용해 사용자의 세션을 중간에서 가 +로챌 수도 있으며, 공격자는 사용자가 입력하는 모든 정보를 실시간으로 탈취할 수 있다. +중간에서 트래픽 +탈취 +공격자는 합법적인 사이트와 사용자의 통신을 가로채거나 리디렉션하여 민감한 데이터를 +탈취함 +네트워크 스니핑 +공공 Wi-Fi나 보호되지 않은 네트워크에서 발생하기 쉬운 공격임 +●가짜 네트워크(Fake Networks) 공격은 공격자가 허위 네트워크를 통해 이용자를 속이고, 이용자 +가 주고받는 데이터를 탈취하는 공격이다. 이러한 공격은 공공 Wi-Fi에서 자주 발생하며, 중간자 +공격(MITM)으로 확장될 수 있다. +데이터 탈취 +공격자는 사용자가 AI 서비스에 로그인할 때 주고받는 로그인 정보나 기타 민감한 데이터를 +가로챌 수 있음 +서비스 교란 +공격자가 데이터를 변조하거나 중간에서 통신을 방해하여 AI 서비스의 결과를 왜곡시킬 수 있음 + + +![이미지 131-0](images/p0131_img0.png) + + +![이미지 131-1](images/p0131_img1.png) + + +![이미지 131-2](images/p0131_img2.png) + + +![이미지 131-3](images/p0131_img3.png) + + +![이미지 131-4](images/p0131_img4.png) + + +--- + + +## 4. 법률 및 이용약관 확인 + +서비스 관련 법률, 이용약관에서 정하는 금지행위, 이용자 권리 등 확인하기 +이용약관을 확인해야 하는 이유 +●이용약관은 사용자와 서비스 제공자 간의 권리와 의무를 명확히 하므로, 이를 이해하지 않으면 발 +생할 수 있는 문제를 예방하기 어렵다. +●AI 서비스는 종종 사용자 데이터를 수집하므로, 이용약관에서 데이터 수집, 저장 및 사용 방식에 +대한 정보를 확인해야 한다. +●서비스 제공자의 책임이 명시되어 있는 경우, 서비스 이용 중 문제가 발생했을 때 그에 대한 법적 +책임을 파악할 수 있다. +●서비스가 종료되거나 변경될 경우의 조건과 절차에 대해 미리 알아두면, 갑작스러운 변화에 대비할 +수 있다. +●특정 산업이나 지역에서는 이용약관이 법적 요구사항을 포함하고 있을 수 있으므로, 이를 확인하여 +규정을 준수할 수 있다. +●문제가 발생했을 때의 분쟁 해결 절차나 관할 법원에 대한 정보가 포함되어 있어 상황에 따라 적절 +한 대응을 할 수 있다. +이용자 주의 사항 +●허용된 사용 범위: 서비스가 어떤 용도로 제공되는지, 비즈니스, 연구, 교육, 개인 용도 등 특정 목 +적으로 제한되어 있는지 확인한다. +●금지된 행위: 서비스가 금지하는 활동(예: 불법적인 목적, 악의적 콘텐츠 생성, 스팸 등)을 반드시 +숙지한다. +●데이터 수집: 서비스가 어떤 데이터를 수집하고, 이를 어떻게 사용하며, 어디에 저장하는지 확인한다. +●데이터 소유권: 사용자가 업로드한 데이터와 AI가 생성한 결과물의 소유권이 누구에게 있는지 주 +의 깊게 살펴본다. +●데이터 삭제: 사용자가 데이터를 삭제하거나 계정을 해지한 경우, 데이터가 어떻게 처리되는지 확 +인한다. +●AI가 생성한 콘텐츠로 인해 발생한 문제(오류, 부정확한 정보, 윤리적 문제 등)에 대한 책임이 누구 +로 명시되어 있는지 확인한다. +●생성 콘텐츠의 책임: AI가 생성한 결과물을 사용하는 데 있어 저작권, 윤리적 문제, 법적 문제를 +방지하기 위한 이용자의 책임이 명시되어 있는지 확인한다. + + +![이미지 132-0](images/p0132_img0.png) + + +![이미지 132-1](images/p0132_img1.png) + + +![이미지 132-2](images/p0132_img2.png) + + +![이미지 132-3](images/p0132_img3.png) + + +![이미지 132-4](images/p0132_img4.png) + + +![이미지 132-5](images/p0132_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +123 +●서비스 제공자가 약관이나 정책을 변경할 경우, 사용자에게 통지하는 방법과 변경 사항에 동의하지 +않을 경우의 대응 방안을 확인한다. +보안 위협 +●보안 책임의 불명확성: 이용약관을 확인하지 않으면 보안 사고 발생 시 책임이 사용자에게 귀속될 +가능성을 인지하지 못할 수 있다.(예시: 이용약관에 “사용자가 입력한 데이터의 보안 책임은 사용 +자에게 있다“고 명시되어 있으나 이를 인지하지 못하고 데이터를 입력하여 유출 사고가 발생) +●서비스 제공 중단 위험: 이용약관에 명시된 서비스 제공 중단 또는 데이터 삭제 조건을 알지 못하 +면 중요한 작업 도중 서비스가 중단되거나 데이터 접근이 불가능해질 수 있다.(예시: 무료 서비스 +가 갑작스레 종료되거나 유료화되면서 중요한 프로젝트가 중단) +●AI 생성물의 책임 문제: AI가 생성한 결과물(텍스트, 코드, 디자인 등)에 대해 오류나 부정확성이 +있을 경우, 이에 대한 법적 책임이 사용자에게 귀속될 가능성이 있다.(예시: AI가 생성한 코드에서 +보안 취약점이 발견되어 피해가 발생했으나, 약관에 “결과물의 정확성과 안전성에 대해 책임지지 +않는다”고 명시된 경우) +AI 서비스 이용 + +## 1. 중요 정보 입력 금지 + +개인정보, 기밀정보 등 중요 정보 및 허위 콘텐츠 생성을 위한 허위 정보 등 입력 금지 +민감하거나 중요한 정보는 입력하지 않아야 하는 이유 +●AI 서비스는 데이터를 인터넷을 통해 전송하며, 이 과정에서 정보가 노출될 가능성이 있다. AI 모 +델이 사용하는 플랫폼의 보안 정책이 강력하더라도, 데이터 유출, 해킹, 또는 기타 예기치 않은 보 +안 문제가 발생할 수 있다. +●많은 AI 서비스는 입력된 데이터를 학습 또는 개선 목적으로 저장할 수 있다. 사용자가 민감한 +정보를 입력할 경우, 해당 데이터가 회사 서버에 저장되어 내부적으로 활용되거나 오용될 위험이 +있다. +●AI는 입력된 데이터를 기반으로 응답하지만, 데이터를 완전히 삭제하거나 “잊어버리는” 능력이 제 +한적일 수 있다. 입력된 정보가 모델의 학습 데이터에 통합되거나 서비스 기록에 남아 있을 수 있다. + + +![이미지 133-0](images/p0133_img0.png) + + +![이미지 133-1](images/p0133_img1.png) + + +![이미지 133-2](images/p0133_img2.png) + + +![이미지 133-3](images/p0133_img3.png) + + +![이미지 133-4](images/p0133_img4.png) + + +![이미지 133-5](images/p0133_img5.png) + + +![이미지 133-6](images/p0133_img6.png) + + +--- + +이용자 주의 사항 +●챗GPT 사용 시 비밀번호나 중요한 기밀사항은 절대 입력하지 않아야 한다. +●부적절한 혹은 거짓된 정보를 입력하면 챗GPT가 그럴 듯한 오답을 생성해 허위 정보 제작 및 유 +포에 악용할 수 있으므로 챗GPT 등 생성형 AI를 사용할 때는 정확한 정보를 제공해야 한다. +●사전예방을 위해 챗GPT에 질문할 수 있는 글자 수를 제한하거나 기업의 경우 사내 인트라넷에서 +만 챗GPT를 사용하도록 한다. +●ChatGPT(OpenAI), Copliot(MS), ClovaX(Naver) 등 AI 서비스 내 설정에서 대화 이력, 학습이 +력 저장(또는 전송) 기능을 비활성화하거나 데이터 저장 동의를 거부한다. +보안 위협 +●챗GPT 등 생성형 AI에 기밀 정보를 입력할 경우 해당 정보가 서비스 제공자의 직원이나 다른 위 +탁자에게 노출되거나, 학습 데이터로 사용될 위험이 있다. +※ 챗GPT 사용으로 인해 입력된 기밀정보가 유출된 사례 +기업 내부의 +기밀정보 유출 +2023년 2월, 미국의 사이버보안 회사 Cyberhaven은 고객 기업에 대해 ChatGPT 사용에 관한 보 +고서를 발표한다. 그 보고서에 따르면, Cyberhaven 제품을 사용하는 고객 기업의 160만 명의 근 +로자 중, 지식 노동자의 8.2%가 직장에서 ChatGPT를 한 번이라도 사용했으며, 그 중 3.1%는 +ChatGPT에 기업 기밀 데이터를 입력했다고 한다. +또한, 2023년 3월 30일, 한국의 ‘Economist’는 S사의 내부 일부 부서가 ChatGPT 사용을 허가한 +후, 기밀 정보를 입력하는 사건이 발생했다고 보도하였다. 회사 측은 사내 정보 보안에 대한 주의를 +당부하고 있었음에도 불구하고, 프로그램의 소스 코드나 회의 내용을 입력한 직원이 있었다고 발표 +한 바 있다. + +## 2. 결과에 대한 정확성 검증 + +AI로 생성되는 정보에 대한 정확성과 함께 정보의 최신성, 편향성 등 검증 필수 +AI의 결과에 확인・검증이 필요한 이유 +●AI 모델은 항상 정확한 정보를 제공하지 않을 수 있다. 잘못된 정보에 의존하면 잘못된 결정을 내 +릴 수 있다. +●AI는 학습 데이터에 기반하여 결과를 생성하기 때문에, 데이터의 편향이 결과에 영향을 줄 수 있 +다. 이로 인해 왜곡된 정보가 제공될 수 있다. +●정보는 시간이 지남에 따라 변할 수 있다. 최신 정보인지 확인하는 것이 중요하다. + + +![이미지 134-0](images/p0134_img0.png) + + +![이미지 134-1](images/p0134_img1.png) + + +![이미지 134-2](images/p0134_img2.png) + + +![이미지 134-3](images/p0134_img3.png) + + +![이미지 134-4](images/p0134_img4.png) + + +![이미지 134-5](images/p0134_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +125 +●특정 분야(예: 의학, 법률)에서는 전문적인 지식이 필요하다. AI의 정보는 참고용일 뿐, 전문가의 +조언을 대체할 수 없다. +●AI 결과를 검증함으로써 정보를 보다 신뢰할 수 있게 된다. 필요 시 출처를 확인해야 한다. +●AI는 결과를 생성하는 과정에서 맥락을 고려하지 않을 수 있다. 검증을 통해 보다 깊이 있는 이해 +를 도모할 수 있다. +이용자 주의 사항 +●AI 모델 답변이 항상 정확하거나 최신 정보를 반영하는 것은 아니므로 인터넷 검색, 전문가 의견・ +자문, 공식 문서 등 다양한 출처 참조를 통해 추가적으로 확인해야 한다. +●AI가 생성한 답변을 사용할 경우에는 그 출처를 표시한다. +●AI 서비스를 통해 생성된 정보는 정확성이 확보되었다고 보기 어려우므로 이용에 주의가 필요하며, +허위 정보를 입력하거나 악의적인 의도(스팸, 스미싱 등)로 사용은 금지하고, 악용 시 범죄행위임을 +인식한다. +보안 위협 +●오정보 및 의사결정 오류: AI가 잘못된 정보를 제공하면 이를 기반으로 잘못된 결정을 내릴 수 있 +다. 예를 들어, AI가 잘못된 보안 권고를 제공하거나 취약한 설정을 권장하면 시스템이 공격에 취 +약해질 수 있다. +●피싱 및 사회공학적 공격: AI를 악용해 생성된 잘못된 결과(예: 이메일 내용, 링크, 메시지)를 신뢰 +하면 피싱 공격에 취약해질 수 있다. 공격자가 AI를 사용하여 설득력 있는 가짜 정보를 생성하고 +이를 사용자가 검증 없이 신뢰하면, 민감한 정보를 유출하거나 악성 링크를 클릭할 가능성이 높아 +진다. +●취약점 악용: AI가 코드, 설정, 네트워크 구성 등에 대한 잘못된 조언을 제공하면 보안 취약점이 +발생할 수 있다. 이러한 취약점은 악의적인 행위자들에게 공격 기회를 제공할 수 있다. +●신뢰할 수 없는 소스의 정보 유입: AI는 학습 데이터에 기반하여 응답하며, 종종 공개된 인터넷 데 +이터나 제한된 학습 데이터에 의존한다. 이 경우, 악의적으로 조작된 데이터가 결과에 영향을 미칠 +수 있다. 이를 신뢰하면 공격자들이 원하는 방향으로 시스템을 유도할 수 있다. +●자동화된 악의적 행위: AI가 자동화된 프로세스를 지원하는 경우, 검증 없이 결과를 실행하면 악성 +행위를 촉진할 수 있다. 예를 들어, AI가 추천하는 네트워크 설정을 즉시 적용하면 악의적인 코드 +실행이나 백도어 생성과 같은 문제가 발생할 수 있다. + + +![이미지 135-0](images/p0135_img0.png) + + +![이미지 135-1](images/p0135_img1.png) + + +![이미지 135-2](images/p0135_img2.png) + + +![이미지 135-3](images/p0135_img3.png) + + +![이미지 135-4](images/p0135_img4.png) + + +--- + + +## 3. 데이터 삭제 + +입력, 생성된 정보는 반드시 삭제하고, 필요 시에는 별도로 다운로드하여 저장하기 +데이터 백업이 필요한 이유 +●데이터가 저장된 채로 남아 있으면, 해커나 사이버 공격자가 이를 노릴 가능성이 있다. 특히 중요 +한 정보(예: 비밀 프로젝트 관련 데이터)가 포함된 경우, 보안 위협은 더욱 심각해질 수 있다. +●저장된 데이터가 오용되거나 잘못 활용될 경우, 사용자와 서비스 제공자 모두에게 부정적인 영향을 +미칠 수 있다. 특히 생성된 콘텐츠가 민감하거나 윤리적으로 논란이 될 수 있는 경우, 기록 삭제는 +오용을 방지하는 데 필수적이다. +●불필요한 데이터는 저장 공간과 처리 리소스를 차지하므로, 이를 삭제하면 서비스 운영 비용을 절 +감하고 효율성을 높일 수 있다. +●필요 시에는 별도로 다운로드해 놓으면 랜섬웨어 같은 악성 공격에 대한 방어를 강화할 수 있다. +백업된 데이터가 안전하게 보관되면, 공격받더라도 손실을 최소화할 수 있다. +●필요 시에는 별도로 다운로드해 놓으면 문제가 발생했을 때, 빠르게 데이터를 복구할 수 있다. +이용자 주의 사항 +●AI 서비스 제공자의 개인정보 처리방침과 데이터 보존 정책을 검토한다. +●서비스 제공자가 제공하는 삭제 기능이나 데이터 삭제 요청 옵션을 이용한다. +●서비스가 데이터를 자동으로 저장하거나 클라우드에 백업하는 기능이 있다면 이를 비활성화하거나 +삭제 절차를 따른다. +●작성 도중 민감한 데이터를 입력하지 않도록 주의한다. +보안 위협 +●외부 공격: 해커나 악의적 행위자가 서버에 저장된 데이터에 접근하여 사용자 정보를 탈취할 가능 +성이 높아진다. +●내부 유출: 서비스 제공자의 내부 직원이나 협력업체의 실수 또는 악의적 의도로 인해 데이터가 유 +출될 수 있다. +●공격 대상 확대: 저장된 데이터가 많을수록 공격 대상이 커지고 보안 취약점이 발생할 확률이 증가 +한다. + + +![이미지 136-0](images/p0136_img0.png) + + +![이미지 136-1](images/p0136_img1.png) + + +![이미지 136-2](images/p0136_img2.png) + + +![이미지 136-3](images/p0136_img3.png) + + +![이미지 136-4](images/p0136_img4.png) + + +![이미지 136-5](images/p0136_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +127 + +## 4. 최신 보안 업데이트 적용 + +서비스의 안전성, 안정성 등 유지를 위한 보안 패치는 최신버전으로 업데이트 필수 +보안 업데이트가 필요한 이유 +●소프트웨어는 시간이 지남에 따라 새로운 보안 취약점이 발견될 수 있다. 보안 패치는 이러한 취약 +점을 수정하여 해커가 시스템에 침투하거나 데이터를 악용하는 것을 방지한다. +●보안 업데이트는 종종 새로운 기능이나 성능 개선도 포함되므로, 최신 버전을 유지하는 것이 전체 +적인 사용자 경험을 향상시킬 수 있다. +●정기적인 보안 패치 적용은 서비스 제공자의 신뢰성을 높이며, 이용자가 서비스에 대해 안심할 수 +있는 환경을 제공한다. +●AI 서비스는 종종 민감한 데이터를 다루기 때문에, 보안 패치를 통해 데이터 유출이나 손실을 방지 +하는 것이 중요하다. +이용자 주의 사항 +●소프트웨어 및 사용 중인 디바이스의 운영 체제, 보안 소프트웨어를 항상 최신 버전으로 업데이트 +한다. +●AI 서비스 및 관련 소프트웨어에서 가능한 경우 자동 업데이트를 활성화하여 보안 패치를 즉시 적 +용한다. +●업데이트가 실패하거나 시스템에 문제가 생길 경우를 대비해 정기적인 데이터 백업과 복구 계획을 +유지한다. +●불필요한 AI 관련 확장 프로그램 업데이트는 AI 시스템의 성능 저하 및 보안 취약점을 초래할 수 +있으므로 주의해야 한다. +보안 위협 +●취약점 악용: AI 소프트웨어의 기존 버전에는 알려진 취약점이 있을 수 있다. 최신 업데이트를 적 +용하지 않으면 해커가 이를 악용해 시스템에 침투하거나 데이터를 탈취할 수 있다(예: 악성 코드 +실행, 권한 상승, 서비스 거부(DoS) 공격). +●데이터 유출 및 프라이버시 침해: AI 서비스가 데이터 처리를 포함하는 경우, 보안 업데이트를 적 +용하지 않으면 암호화 프로토콜 또는 데이터 보호 메커니즘의 취약점이 노출될 가능성이 있다. 이 +러한 취약점은 민감한 데이터를 무단으로 접근하거나 외부로 유출하는 데 이용될 수 있다. +●악성 코드 감염: 업데이트가 되지 않은 시스템은 최신 위협 탐지 및 방지 기능을 포함하지 않을 수 + + +![이미지 137-0](images/p0137_img0.png) + + +![이미지 137-1](images/p0137_img1.png) + + +![이미지 137-2](images/p0137_img2.png) + + +![이미지 137-3](images/p0137_img3.png) + + +![이미지 137-4](images/p0137_img4.png) + + +![이미지 137-5](images/p0137_img5.png) + + +--- + +있다. 공격자는 이를 악용해 AI 서비스에 악성 코드를 삽입하거나 배포할 수 있다. +AI 악용 피해 예방 + +## 1. 항상 의심하고 확인 + +정보의 허위・조작 가능성 등을 항상 의심하고 생성물 활용 분야와 목적을 반드시 확인 +항상 의심하고 확인이 필요한 이유 +●딥페이크와 생성형 AI의 발전 +- AI 기술이 발전하면서 딥페이크 영상, 음성 합성, 텍스트 생성이 매우 정교해지고 있고, 특히 생 +성형 AI를 활용하면 가짜 이미지, 영상, 기사 등을 쉽게 만들 수 있다. 이러한 허위 정보는 진짜 +와 구별하기 어려울 정도로 정교해 사회적 혼란을 초래할 수 있다. +- 예시: 가짜 뉴스 영상이 유포되어 특정 정치인이나 유명인의 명예를 실추시킬 수 있다. 금융 사 +기에서 CEO 목소리를 합성한 딥페이크로 대규모 자금 이체를 유도한 사건도 있었다. +●정보의 확산 속도 증가 +- AI와 인터넷의 결합으로 정보는 순식간에 전 세계로 확산될 수 있다. +- 허위・조작된 정보는 진짜 정보보다 더 눈길을 끌기 쉬워 더 빠르게 퍼질 가능성이 높다. +- 확인되지 않은 정보가 확산되면 개인, 기업, 국가에 막대한 피해를 줄 수 있다. +- 예시: 잘못된 건강 정보가 퍼져 사람들이 위험한 치료법을 선택하거나 건강을 해칠 수 있고, 주 +가 조작을 위해 허위 기업 정보를 유포해 투자자들이 손해를 볼 수 있다. +●개인화된 허위 정보 공격 (Targeted Manipulation) +- AI는 사용자의 행동 패턴과 취향을 학습해 정확하게 개인화된 허위 정보를 제공할 수 있다. 이는 +사용자가 허위 정보에 더 쉽게 현혹되도록 만들어 비판적 사고를 방해한다. +- 예시: 소셜 미디어 알고리즘이 사용자가 보고 싶은 정보만 보여주며, 허위・극단적 정보의 확산을 +강화한다. 사기범이 AI를 사용해 특정 개인의 정보를 조합, 맞춤형 피싱 공격을 수행한다. +이용자 주의 사항 +●정보 출처 확인 +- 공식적이고 신뢰할 수 있는 출처에서 제공된 정보인지 확인한다. +- 뉴스, 연구 자료, 기사 등을 확인할 때 출처의 신뢰성을 검증한다. + + +![이미지 138-0](images/p0138_img0.png) + + +![이미지 138-1](images/p0138_img1.png) + + +![이미지 138-2](images/p0138_img2.png) + + +![이미지 138-3](images/p0138_img3.png) + + +![이미지 138-4](images/p0138_img4.png) + + +![이미지 138-5](images/p0138_img5.png) + + +![이미지 138-6](images/p0138_img6.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +129 +- 소셜미디어나 커뮤니티를 통해 유포된 정보는 다시 한번 확인한다. +●팩트 체크 및 교차 검증 +- 하나의 정보에 의존하지 말고 여러 출처를 비교하여 진위를 확인한다. +- 팩트체크 웹사이트나 도구를 활용하여 허위 정보 여부를 검증한다. +●AI를 이용한 정보 또는 콘텐츠 등에 대한 출처 표시 +- 검증된 정보를 기반으로 AI를 이용하여 생성된 정보, 콘텐츠 등에는 반드시 AI를 이용해 생성된 +정보임을 표시하여야 한다. +- 생성된 정보, 콘텐츠에 활용된 정보의 출처를 표시한다. +- AI를 이용하여 생성된 정보와 콘텐츠는 개인적인 용도로만 사용하여야 하며, 상업적인 목적으로 +이용은 금지하여야 한다. +●중요 정보(개인정보, 민감정보 등)가 포함되어 생성된 정보인 경우, 중요 정보에 대해 보호조치를 +적용하여 활용한다. +- 「개인정보 보호법」에 따라 개인정보와 민감정보 등을 마스킹 또는 삭제하고, 기업의 기밀정보 +등에도 동일하게 적용한다. +보안 위협 +●잘못된 의사결정: AI가 제공한 정보가 조작되었거나 부정확할 경우, 이를 기반으로 한 의사결정이 +잘못된 방향으로 흘러갈 수 있다. +●사회공학적 공격(피싱 및 스캠): 공격자가 AI를 통해 설득력 있는 허위 정보를 제공하거나 사용자 +를 속이는 메시지를 생성할 수 있다(예시: AI가 생성한 잘못된 이메일 또는 메시지(가짜 비밀번호 +재설정 요청)를 신뢰하고 실행할 경우, 계정 탈취 또는 데이터 유출 발생 가능). +●악성 코드 및 스크립트 실행: AI가 제공한 코드나 스크립트를 검증 없이 실행하면 악성 코드가 시 +스템에 침투하거나 데이터를 손상시킬 수 있다(예시: AI가 제공한 “최적화된 스크립트”가 실제로는 +악성 소프트웨어를 설치하도록 유도 가능). +●데이터 손실 및 무단 접근: AI가 권장하는 설정 변경이나 데이터를 관리하는 방법이 허위 또는 악 +의적으로 조작된 정보일 경우, 데이터 손실 또는 무단 접근이 발생할 수 있다(예시: 잘못된 암호화 +방식 또는 데이터 백업 지침을 신뢰하여 중요한 데이터를 잃거나 복구하지 못하는 상황 발생 가능). +●AI 모델 중독(Poisoning): 악의적인 사용자가 AI 서비스의 응답을 조작하여 허위 데이터를 포함시 +키면, 사용자는 이를 검증 없이 신뢰할 가능성이 있다(예시: AI 모델이 의도적으로 편향된 데이터 +로 학습된 경우, 왜곡된 결과를 제공하여 중요한 결정을 오도). + + +![이미지 139-0](images/p0139_img0.png) + + +![이미지 139-1](images/p0139_img1.png) + + +![이미지 139-2](images/p0139_img2.png) + + +![이미지 139-3](images/p0139_img3.png) + + +![이미지 139-4](images/p0139_img4.png) + + +--- + +2. AI 악용이 의심되면 삭제 +AI를 악용하여 제작된 콘텐츠, 사이트, 프로그램 등이 의심되면 삭제하고 신고하기 +AI 악용이 의심되면 관련 콘텐츠, 프로그램 등을 반드시 삭제해야 하는 이유 +●악성 코드 및 보안 위협 방지 +- AI를 악용한 콘텐츠나 프로그램은 악성 코드, 랜섬웨어, 트로이 목마 등이 숨겨져 있을 수 있다. +이를 통해 개인정보 탈취, 시스템 감염, 데이터 손상 등 심각한 보안 사고가 발생할 수 있다. +- 예시: 딥페이크 영상이나 AI 생성 콘텐츠에 숨겨진 악성 링크를 클릭하면, 사용자의 컴퓨터가 악 +성 코드에 감염될 수 있다. 또한 AI로 제작된 가짜 소프트웨어가 백그라운드에서 키로깅(타이핑 +기록 감시) 등을 통해 민감 정보를 탈취할 수 있다. +●중요 정보 유출 및 사생활 침해 예방 +- AI 악용 콘텐츠는 사용자의 이름, 얼굴, 목소리 등 개인정보를 수집하고 불법적으로 활용할 가능 +성이 있다. 삭제하지 않으면 해커가 이를 악용해 신원 도용, 금융 사기, 딥페이크 제작 등에 사용 +할 수 있다. +- 예시: AI를 통해 유출된 목소리나 영상이 사기범에 의해 가공되어 가족이나 지인을 속이는 사기 +수법에 활용될 수 있고, 악성 AI 소프트웨어가 사용자 정보를 백그라운드에서 전송할 수 있다. +●시스템 리소스 오남용 방지 +- AI 악용 프로그램이나 콘텐츠는 종종 사용자의 시스템 리소스를 몰래 사용하여 불법 채굴 +(Cryptojacking)이나 봇넷의 일부로 활용될 수 있다. 이는 시스템 성능 저하, 과도한 전력 소모 +를 일으키고, 기기의 수명을 단축시킬 수 있다. +- 예시: 악성 AI 프로그램이 사용자 컴퓨터를 이용해 암호화폐를 불법 채굴하거나, DDoS 공격의 +일부로 활용될 수 있다. +이용자 주의 사항 +●의심스러운 파일이나 링크 실행 금지 +- 의심스러운 파일이나 링크를 절대 실행하거나 클릭하지 않아야 한다. +- 실행된 순간 악성 코드가 설치되거나 시스템이 감염될 수 있다. +- 특히 이메일, 메신저 등을 통해 전달된 출처 불명의 첨부 파일이나 링크는 위험하다. + + +![이미지 140-0](images/p0140_img0.png) + + +![이미지 140-1](images/p0140_img1.png) + + +![이미지 140-2](images/p0140_img2.png) + + +![이미지 140-3](images/p0140_img3.png) + + +![이미지 140-4](images/p0140_img4.png) + + +![이미지 140-5](images/p0140_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +131 +●신뢰할 수 있는 보안 소프트웨어로 검사 +- AI 악용이 의심되는 콘텐츠를 삭제하기 전, 반드시 보안 소프트웨어를 사용하여 시스템을 검사 +해야 한다. +- 최신 보안 업데이트가 적용된 백신 프로그램을 사용해 전체 시스템을 점검해야 한다. +보안 위협 +●악성코드 확산 및 감염: 악의적으로 설계된 AI 기반 콘텐츠나 프로그램은 악성코드(바이러스, 랜섬 +웨어, 트로이 목마 등)를 포함할 수 있다. 이를 방치하면 다른 장치나 서비스로 확산될 가능성이 +높다.(예시: 악성코드가 백그라운드에서 실행되어 데이터를 손상시키거나 탈취, 시스템 과부하를 +초래) +●데이터 유출: 악용 콘텐츠가 사용자 데이터를 무단으로 수집하거나 외부 서버로 전송할 수 있다. +(예시: 민감한 정보(개인정보, 비밀번호, 금융 정보 등)가 외부로 유출되어 금전적 손실 및 프라이 +버시 침해 발생 가능) +●AI 모델 중독 및 오작동: 의심스러운 콘텐츠나 프로그램이 AI 모델의 학습 데이터를 오염시키거나 +시스템의 의사결정 과정을 조작할 수 있다.(예시: AI 모델이 편향되거나 부정확한 결과를 제공하도 +록 유도되어 개인의 판단 오류를 초래 가능) +3. AI 악용 결과물 공유 금지 +악성코드, 허위 콘텐츠 등으로 의심되는 결과물을 소장하거나 다른 사람에게 공유 금지 +AI 악용 결과물은 공유를 금지해야 하는 이유 +●불법 행위에 가담할 수 있음 +- AI 악용 결과물은 불법적이거나 부적절한 목적으로 만들어졌을 가능성이 높고, 이를 공유하는 +행위는 의도와 상관없이 법적 처벌 대상이 될 수 있다. +- 딥페이크 음란물, 저작권 침해 콘텐츠, 가짜 뉴스 등을 공유하면 유포자로서 책임이 발생할 수 +있다. +- 예시: 딥페이크 성적 영상 공유 시, 「성폭력처벌법」 위반으로 징역형이나 벌금형에 처할 수 있 +고, 저작권 침해 콘텐츠 공유 시 「저작권법」 위반으로 과태료나 손해배상 책임이 발생할 수 있다. +●악성 코드나 보안 위협 유포 가능성 +- AI 악용 결과물에 악성 코드, 피싱 링크 등이 숨겨져 있을 수 있고, 이를 다른 사람과 공유하면 +타인의 기기나 시스템을 감염시킬 위험이 커질 수 있다. + + +![이미지 141-0](images/p0141_img0.png) + + +![이미지 141-1](images/p0141_img1.png) + + +![이미지 141-2](images/p0141_img2.png) + + +![이미지 141-3](images/p0141_img3.png) + + +![이미지 141-4](images/p0141_img4.png) + + +![이미지 141-5](images/p0141_img5.png) + + +--- + +- 예시: 악성 AI 생성 파일을 다른 사람에게 전송하면, 해당 파일을 열어보는 순간 바이러스에 감 +염될 수 있다. 피싱 링크가 포함된 AI 결과물을 공유해 타인의 개인정보가 유출될 가능성이 있다. +●악용 도구의 확산 방지 +- AI 악용 결과물을 공유하는 행위는 악용 도구의 확산을 조장할 수 있고, 악의적인 목적을 가진 +사람들이 이를 활용해 더 많은 범죄를 저지를 수 있다. +- 예시: AI 기반으로 생성된 악성 코드나 해킹 도구가 공유되면 사이버 공격이 확산될 수 있다. 생 +성된 가짜 리뷰, 가짜 광고 등을 공유하면 기업이나 개인이 경제적 피해를 입을 수 있다. +이용자 주의 사항 +●의심스러운 콘텐츠 확인 및 경각심 유지 +- AI를 악용해 생성된 딥페이크 영상, 가짜 뉴스, 조작된 이미지는 진짜처럼 보일 수 있으므로 항 +상 의심하고 확인해야 한다. +- 과도하게 자극적이거나 감정적 반응을 유도하는 콘텐츠는 즉시 공유하지 말고 확인이 필요하다. +●링크 및 파일의 안전성 확인 +- AI 악용 결과물은 악성 코드나 피싱 링크를 포함할 수 있으므로, 출처 불명의 파일, 링크는 열어 +보거나 다른 사람과 공유하지 않도록 주의한다. +●콘텐츠 발견 시 즉시 신고 +- AI 악용 결과물을 발견하면 해당 플랫폼이나 관련 기관에 즉시 신고해야 한다. +보안 위협 +●악성코드 및 사이버 공격 확산: AI 악용 결과물이 포함된 코드, 파일, 또는 링크가 공유되면 악성 +코드나 랜섬웨어가 빠르게 확산될 수 있다.(예시: 공유된 악성 AI 생성 프로그램이 사용자 장치에 +감염을 일으키거나 네트워크를 통해 확산되어 광범위한 피해를 초래 가능) +●사회공학적 공격 지원: AI를 악용해 생성된 설득력 있는 가짜 메시지(피싱 이메일, 사기 메시지, 가 +짜 뉴스)가 널리 퍼질 경우, 사람들이 이를 신뢰하고 민감한 정보를 제공하거나 악성 링크를 클릭 +하게 될 가능성이 커진다.(예시: AI 생성 피싱 이메일로 인해 대규모 데이터 유출이 발생 가능) +●허위 정보 및 조작된 콘텐츠 확산: AI 악용 결과물로 생성된 가짜 뉴스, 허위 정보, 편집된 이미지 +및 영상(딥페이크 등)이 공유되면 공공 혼란, 신뢰 상실, 정치적・사회적 불안을 야기할 수 있다.(예 +시: 특정 인물에 대한 딥페이크 영상이 퍼져 명예 훼손 및 신뢰성 손상 가능) +●보안 취약점 노출: AI 악용 결과물에는 보안 취약점을 공격하는 기술적 정보나 방법론이 포함될 수 +있다. 이러한 정보를 공유하면 공격자들에게 보안 취약점 악용 방법을 학습할 기회를 제공한다.(예 +시: 공유된 결과물이 특정 시스템의 취약점을 악용하는 스크립트인 경우, 해당 시스템이 대규모로 + + +![이미지 142-0](images/p0142_img0.png) + + +![이미지 142-1](images/p0142_img1.png) + + +![이미지 142-2](images/p0142_img2.png) + + +![이미지 142-3](images/p0142_img3.png) + + +![이미지 142-4](images/p0142_img4.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +133 +공격당할 위험 증가) +●범죄 및 불법 활동 지원: AI 악용 결과물이 범죄 행위(사기, 해킹, 테러 등)에 사용될 수 있는 도구 +(예: 가짜 문서 생성, 스팸 메시지 자동화)를 포함하고 있다면 이를 공유함으로써 불법 활동이 확산 +될 가능성이 있다.(예시: AI 생성 허위 신분증이나 금융 서류가 범죄 조직에 의해 악용 가능) +●신뢰 손상: AI 악용 결과물을 공유한 사람이 조직이나 기업의 일원일 경우, 해당 조직의 신뢰성과 +명성이 훼손될 수 있다.(예시: 조직 내 직원이 AI 악용 결과물을 공유하여 외부에서 법적・윤리적 +문제로 비난받음) + +## 4. 허위 콘텐츠 매매 금지 + +AI를 악용해 생성된 허위 콘텐츠(가짜 뉴스, 영상, 음성 등)를 돈으로 사거나 팔지 않기 +AI를 악용해 생성된 허위 콘텐츠는 매매나 공유를 금지해야 하는 이유 +●불법 행위 해당 +- 허위 콘텐츠의 생성, 공유, 매매는 의도와 관계없이 불법 행위로 간주될 수 있다. +- 특히 AI를 악용해 생성된 콘텐츠가 허위사실 유포, 명예훼손, 저작권 침해, 성범죄와 연관된 경 +우, 법적 처벌을 받을 수 있다. +●피해 확산과 2차 가해 유발 +- AI로 생성된 허위 콘텐츠(딥페이크 영상, 조작된 뉴스, 합성 이미지)는 피해자에게 큰 정신적・사 +회적 고통을 준다. 이를 공유하거나 매매하면 피해 확산과 함께 2차 가해를 유발하게 된다. +- 예시: 딥페이크 음란물이나 허위사실을 퍼뜨리면 피해자의 사회적 평판이 실추되고 고통이 가중 +된다. 콘텐츠가 온라인에 영구적으로 남아 피해자가 일상생활에 어려움을 겪게 된다. +●허위 정보의 빠른 확산으로 사회 혼란 초래 +- AI를 악용한 허위 콘텐츠는 정교하고 설득력이 높아 일반 사용자가 진위를 구별하기 어렵고, 이 +러한 콘텐츠가 빠르게 확산되면 사회적 혼란을 초래하고 여론을 왜곡할 수 있다. +- 예시: 선거 기간 중 AI가 생성한 가짜 뉴스나 여론 조작 콘텐츠가 유포되어 민주적 절차가 왜곡 +될 수 있고, 허위 재난 등의 확산은 공포와 혼란을 유발할 수 있다. +●가짜 정보 확산 방지를 위한 윤리적 책임 +- AI 허위 콘텐츠를 공유하거나 판매하는 행위는 정보의 진실성을 해치며 윤리적 책임을 저버리는 +것이다. +- AI 시대에서 이용자는 허위 정보 확산 방지를 위해 신중하게 행동해야 할 책임이 있다. + + +![이미지 143-0](images/p0143_img0.png) + + +![이미지 143-1](images/p0143_img1.png) + + +![이미지 143-2](images/p0143_img2.png) + + +![이미지 143-3](images/p0143_img3.png) + + +![이미지 143-4](images/p0143_img4.png) + + +![이미지 143-5](images/p0143_img5.png) + + +--- + +이용자 주의 사항 +●콘텐츠 진위 확인 및 출처 검증 +- 허위 콘텐츠는 진짜처럼 보이도록 정교하게 만들어지므로 항상 진위 여부를 확인해야 하고, 콘텐 +츠의 출처가 신뢰할 수 있는 기관이나 출처인지 검증한다. +●의심스러운 콘텐츠 저장 및 공유 금지 +- AI 악용 콘텐츠(딥페이크, 가짜 뉴스 등)는 불법일 가능성이 높으므로 소장하거나 공유하지 않아 +야 한다. 의심스러운 콘텐츠는 즉시 삭제하고, 불필요하게 유포되지 않도록 차단한다. +●불법 콘텐츠 유포의 법적 책임 인지 +- AI 허위 콘텐츠를 매매하거나 공유하면 법적 처벌 대상이 될 수 있으므로 항상 법적 책임을 인 +지해야 한다. +보안 위협 +●사이버 범죄 확산: 허위 콘텐츠를 매매하거나 공유하면 악의적인 행위자들이 이를 범죄 목적으로 +활용할 가능성이 높아진다.(예시: 딥페이크를 사용한 사기, 협박, 금전 요구(블랙메일) 등) +●사회적 혼란 및 신뢰 붕괴: 허위 콘텐츠가 정치적, 사회적, 경제적 이슈에 대해 잘못된 정보를 퍼뜨 +리면 공공 혼란과 불신을 조장할 수 있다.(예시: 정치인의 허위 발언을 담은 딥페이크 영상이 대중 +에게 확산되어 선거 결과에 영향을 미침) +●데이터 유출 및 보안 침해: AI로 생성된 허위 콘텐츠가 악성코드 또는 피싱 수단으로 활용될 경우, +이를 매매하거나 공유하면 광범위한 데이터 유출 및 보안 침해가 발생할 수 있다.(예시: 악성 첨부 +파일이 포함된 AI 생성 이메일을 대량으로 유포하여 기업 네트워크 침투) +●개인정보 침해 및 명예 훼손: AI가 생성한 허위 콘텐츠(딥페이크, 가짜 메시지 등)를 통해 특정 개 +인이나 단체의 명예를 훼손하거나 사생활을 침해할 수 있다.(예시: 허위 음란물 딥페이크를 제작 +및 유포하여 피해자에게 심각한 정신적, 사회적 피해를 초래) +●보안 시스템 악용: AI 악용 콘텐츠가 보안 시스템을 교란하거나 우회하는 도구로 사용될 수 있다. +(예시: 위조된 음성이나 얼굴 데이터를 사용해 생체 인증 시스템을 우회하고, 민감한 정보에 접근 +가능) +●허위 기술 확산: 악성 AI 기술이나 허위 콘텐츠 제작 방법이 매매 및 공유를 통해 확산되면, 더 많 +은 공격자가 이를 활용하여 보안 위협이 증가한다.(예시: AI 기반 딥페이크 제작 소프트웨어를 공 +유하여 누구나 쉽게 허위 콘텐츠를 생성 가능) + + +![이미지 144-0](images/p0144_img0.png) + + +![이미지 144-1](images/p0144_img1.png) + + +![이미지 144-2](images/p0144_img2.png) + + +![이미지 144-3](images/p0144_img3.png) + + +![이미지 144-4](images/p0144_img4.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +135 +참고문헌 +● +AEM, https://www.autoelectronics.co.kr/article/articleView.asp?idx=5496, 2024.1.15. +● +AKM I. Newaz et al., "Adversarial Attacks to Machine Learning-based Smart Healthcare +Systems," 2020. +● +Christopher J. Kelly et al., "Key challenges for delivering clinical impact with artificial +intelligence," 2019. +● +CISA, NSA, FBI, SHIFTING THE BALANCE OF CYBERSECURITY RISK: PRINCIPLES AND +APPROACHES FOR SECURE BY DESIGN SOFTWARE, April 2023, +● +Council of Europe. Recommendation on the Human Rights Impacts of AI, 2021. +● +CSA Singapore, Security-by-Design Framework, Version: 1.0, 09 November 2017 +● +Cyber Security Agency of Singapore. Security by Design Framework, Version 1.0, 2017. +● +dataDx, "Can You Trust Your Data?", Dec 12, 2019 +● +Department for Science, Innovation and Technology(UK), AI Cyber Security Code of +Practice, November 2023 +● +Department for Science, Innovation and Technology(UK), Call for views on the Cyber +Security of AI, 24 May 2024 +● +Department for Science, Innovation and Technology(UK), Cyber security risks to artificial +intelligence, 15 May 2024 +● +Department of Homeland Security, MITIGATING ARTIFICIAL INTELLIGENCE (AI) RISK: +Safety and Security Guidelines for Critical Infrastructure Owners and Operators, April +2024 +● +Digital Transformation Agency (Australia). AI Ethics Principles, 2019. +● +European Commission. White Paper on Artificial Intelligence: A European Approach to +Excellence and Trust, 2020. +● +European Parliament, Artificial Intelligence Act, 2019-2024 +● +European Parliament. Regulation on a European Approach to Artificial Intelligence, 2023. +● +European Union. The Artificial Intelligence Act Proposal, 2021. +● +Frank Liao et al., "Governance of Clinical AI applications to facilitate safe and equitable +deployment in a large health system," 2022. +● +GOV.UK, Call for views on the Cyber Security of AI, 2024.8.2. +● +GOV.UK, Cyber security risks to artificial intelligence, 2024.5.15 +● +IBM. AI Explainability 360: Interpretation and Insights for AI Models, 2021. + + +![이미지 145-0](images/p0145_img0.png) + + +![이미지 145-1](images/p0145_img1.png) + + +![이미지 145-2](images/p0145_img2.png) + + +![이미지 145-3](images/p0145_img3.png) + + +--- + +● +IEEE. Ethically Aligned Design: A Vision for Prioritizing Human Well-being with +Autonomous and Intelligent Systems, 2019. +● +IEEE-USA, A FLEXIBLE MATURITY MODEL FOR AI GOVERNANCE BASED ON THE +NIST AI RISK MANAGEMENT FRAMEWORK, 2024.7 +● +International Medical Device Regulators Forum, "Software as a Medical Device: Possible +Framework for Risk Categorization and Corresponding Considerations," 2014. +● +ISO/IEC 42001, Information technology — Artificial intelligence — Management system, +2023 +● +J. Baek, D. B. Lee, and S. J. Hwang, "Learning to Extrapolate Knowledge: Transductive +Few-shot Out-of-Graph Link Prediction," 2020. +● +Joint Cybersecurity Information, Deploying AI Systems Securely, U/OO/143395-24, +PP-24-1538, April 2024 Ver. 1.0 +● +Justin Spears, Introduction to the NetApp AI Security Framework, NetApp, May 2024, +WP-7365 +● +K. Lerman, and T. Hogg, "Leveraging position bias to improve peer recommendation," +2014. +● +M. Maadi, H. A. Khorshidi, and U. Aickelin, "A Review on Human–AI Interaction in +Machine Learning and Insights for Medical Applications," 2021. +● +MIT News, "Artificial intelligence predicts patients' race from their medical images," +2022. +● +N. Mehrabi, F. Morstatter, N. Saxena, K. Lerman, and A. Galstyan, "A survey on bias +and fairness in machine learning," 2021. +● +Nasr et al.(2023.11), Scalable Extraction of Training Data from (Production) Language +Models, arXiv:2311.17035v1 +● +National Cyber Security Center, Guidelines for secure AI system development, + +#### 2023.11.27. + +● +Nawaf Alharbe et al., "A Healthcare Quality Assessment Model Based on Outlier +Detection Algorithm," 2022. +● +NIST Trustworthy and Responsible AI, Adversarial Machine Learning: A Taxonomy and +Terminology of Attacks and Mitigations, January 2024 +● +NIST Trustworthy and Responsible AI, Artificial Intelligence Risk Management +Framework: Generative Artificial Intelligence Profile, July 2024 +● +NIST, AI 100-5: A Plan for Global Engagement on AI Standards, July 2024 +● +NIST, AI Risk Management Framework(AI RMF 1.0), January 2023 +● +NIST, Artificial Intelligence Risk Management Framework, 2021. + + +![이미지 146-0](images/p0146_img0.png) + + +![이미지 146-1](images/p0146_img1.png) + + +![이미지 146-2](images/p0146_img2.png) + + +![이미지 146-3](images/p0146_img3.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +137 +● +NITI Aayog, India. National Strategy for Artificial Intelligence, 2018. +● +OECD. Recommendation of the Council on Artificial Intelligence, OECD Legal +Instruments, 2019. +● +OWASP, OWASP Top 10 for LLM Applications 2025, Version 2025, November 18, 2024 +● +OWASP, OWASP Top 10 for LLM Applications Ver1.1, October 16, 2023 +● +R. Baeza-Yates, "Bias on the Web," 2018. +● +R. K. E. Bellamy et al., "AI Fairness 360: An Extensible Toolkit for Detecting, +Understanding, and Mitigating Unwanted Algorithmic Bias," 2018. +● +S. Vasudevan and K. Kenthapadi, "LiFT: A Scalable Framework for Measuring Fairness in +ML Applications," 2020. +● +Singapore Ministry of Communications and Information. Model AI Governance +Framework, 2020. +● +T. Chen, S. Kornblith, M. Norouzi, and G. Hinton, "A Simple Framework for Contrasive +Learning of Visual Representations," 2020. +● +U.S. Food and Drug Administration, "Proposed Regulatory Framework for Modifications +to AI/ML-Based Software as a Medical Device (SaMD)," 2019. +● +United +Nations +Educational, +Scientific +and +Cultural +Organization +(UNESCO). +Recommendation on the Ethics of Artificial Intelligence, 2021. +● +World Economic Forum. AI Ethics and Governance: A Global Framework, 2021. +● +Yisroel Mirsky et al., "CT-GAN: Malicious Tampering of 3D Medical Imagery using Deep +Learning," 2019. +● +Zhichen Dong et al., Attacks, Defenses and Evaluations for LLM Conversation Safety: A +Survey, Proceedings of the 2024 Conference of the North American Chapter of the +Association for Computational Linguistics: Human Language Technologies (Volume 1: +Long Papers), pages 6734–6747, June 16-21, 2024 +● +개인정보보호위원회, 「AI 시대 안전한 개인정보 활용 정책방향」발표문, 2023.8.3. +● +개인정보보호위원회, AI 시대 개인정보 정책 종합설명회 자료, 2024.12.19. +● +개인정보보호위원회, 안전한 인공지능(AI)·데이터 활용을 위한 AI 프라이버시 리스크 관리 모델, +2024. 12. +● +개인정보보호위원회, 인공지능 시대 안전한 개인정보 활용 정책방향, 2023.8. +● +개인정보보호위원회, 인공지능(AI) 개인정보보호 자율점검표, 2021.5.31. +● +과기정통부/TTA, 신뢰할 수 있는 인공지능 개발 안내서, 2024.4 +● +광장 국제통상연구원, “글로벌 인공지능(AI) 규제 동향과 시사점 - EU, 미국, 영국을 중심으로”, +「Issue Brief」 vol. 2, 2024 +● +국가정보원, 안전한 AI 시스템 개발을 위한 가이드라인, 2023.11 + + +![이미지 147-0](images/p0147_img0.png) + + +![이미지 147-1](images/p0147_img1.png) + + +![이미지 147-2](images/p0147_img2.png) + + +![이미지 147-3](images/p0147_img3.png) + + +--- + +● +국가정보원/국가보안기술연구소, 챗GPT 등 생성형 AI 활용 보안 가이드라인, 2023.6 +● +국회입법조사처, 인공지능 시대 도래에 따른 AI 입법수요 및 과제 연구, 2023.12.20. +● +금융보안원, 금융분야 AI 보안 가이드라인, 2023.4 +● +금융위원회, 금융분야 인공지능 가이드라인, 2021.7 +● +디지털투데이, https://www.digitaltoday.co.kr/news/articleView.html?idxno=504025, 2024.1.30 +● +매일경제, https://www.mk.co.kr/news/it/11059386?utm_source=chatgpt.com, 2024.7.4 +● +머니투데이, https://news.mt.co.kr/mtview.php?no=2019102214138230917, 2019.10.22 +● +보안뉴스, https://www.boannews.com/media/view.asp?idx=93908&utm_source=chatgpt.com, + +#### 2021.1.3 + +● +서울특별시, 서울시 유니버설디자인 통합 가이드라인, 2017.1 +● +소프트웨어정책연구소, 설명가능한 인공지능(XAI) 연구 동향과 시사점, 2021.9.13 +● +식품의약품안전처, "의료기기 GMP 국제 품질관리 민원인 안내서," 2017. +● +식품의약품안전처, "의료기기의 사이버보안 허가・심사 가이드라인," 2022. +● +식품의약품안전처, "인공지능 의료기기 임상시험방법 설계 가이드라인," 2022. +● +식품의약품안전처, "인공지능 의료기기의 허가・심사 가이드라인," 2022. +● +연합뉴스, https://www.yna.co.kr/view/AKR20191106004500091, 2019.11.06 +● +이코노미스트, https://www.economist.co.kr/article/view/ecn202303300057, 2023.3.30 +● +정보통신산업진흥원, "기업 공개소프트웨어 거버넌스 가이드," 2021. +● +조선일보, https://www.chosun.com/international/international_general/ +2024/10/21/CCCTWF5ERRCQRDOF6C7MUEQSUU/, 2024.10.21 +● +한겨레, https://www.hani.co.kr/arti/science/future/898163.html?utm_source=chatgpt.com, 2019.6.17 +● +한국과학기술기획평가원(KISTEP), EU AI 규제 현황과 시사점, 「KISTEP 브리프 119」, 2024.2.13 +● +한국과학기술원(KAIST), 한국4차산업혁명정책센터, "인공지능(AI)의 의료활용과 주요 이슈," 2019. +● +한국데이터베이스진흥원, "데이터 품질진단 절차 및 기법 (Ver 1.0)," 2009. +● +한국인터넷진흥원, KISA Insight, AI 중심사회의 도래와 보안이슈 분석, 2022 Vol.3 +● +한국인터넷진흥원, KISA Insight, 인공지능(AI) 안전 및 보안 규범 분석 및 시사점, 2023 Vol.6 +● +한국정보통신기술협회, "지도학습을 위한 데이터 품질 관리 요구사항," 2021. +● +한국지능정보사회진흥원(NIA), “해외 생성형 인공지능 관련 주요 규제 동향 및 시사점”, 「디지털법제 +Brief」, 2024.3 +● +한국지능정보사회진흥원, 「NIA The AI Report」, THE AI REPORT 2023-7, 2023.7.13 +● +総務省, AIネットワーク社会推進会議 事務局, AI開発ガイドライン及びAI利活用ガイドラインに関 +するレビュー, 2022年2月8日 +● +総務省, AIネットワーク社会推進会議, AI利活用ガイドライン - AI利活用のためのプラクティ +カルリファレンス - 2019.8.9 +● +総務省, AIネットワーク社会推進会議, 国際的な議論のためのAI開発ガイドライン案, 2017 + + +![이미지 148-0](images/p0148_img0.png) + + +![이미지 148-1](images/p0148_img1.png) + + +![이미지 148-2](images/p0148_img2.png) + + +![이미지 148-3](images/p0148_img3.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +139 +● +総務省, The Conference toward AI Network Society, Overview of 2019 Report(incl. AI +Utilization Guidelines), 2019. 8. 9 +● +総務省·経済産業省, 「ビジネスのためのAIガイドライン」案の概要, 2024.1.19 +● +総務省·経済産業省, AI 事業者ガイドライン(第 1.0 版), 令和 6 年 4 月 19 日 + + +![이미지 149-0](images/p0149_img0.png) + + +![이미지 149-1](images/p0149_img1.png) + + +![이미지 149-2](images/p0149_img2.png) + + +![이미지 149-3](images/p0149_img3.png) + + +--- + + + +--- + +부록 + + +![이미지 151-0](images/p0151_img0.png) + + +--- + +용어 정의 +인공지능 +AI +학습, 추론, 지각, 판단, 언어의 이해 등 인간이 가진 지적 능력을 전자적 방법으로 구현한 것을 +말한다. +인공지능시스템 +AI System +다양한 수준의 자율성과 적응성을 가지고 주어진 목표를 위하여 실제 및 가상환경에 영향을 미 +치는 예측, 추천, 결정 등의 결과물을 추론하는 인공지능 기반 시스템을 말한다. +인공지능기술 +AI Technology +인공지능을 구현하기 위하여 필요한 하드웨어ㆍ소프트웨어 기술 또는 그 활용 기술을 말한다. +고영향 인공지능 +High-impact AI +사람의 생명, 신체의 안전 및 기본권에 중대한 영향을 미치거나 위험을 초래할 우려가 있는 인 +공지능시스템으로 인공지능기본법 2조에 정의된 것을 말한다. +생성형 인공지능 +Generative AI +입력한 데이터의 구조와 특성을 모방하여 글, 소리, 그림, 영상, 그 밖의 다양한 결과물을 생성하 +는 인공지능시스템을 말한다. +인공지능산업 +AI Industry +인공지능 또는 인공지능기술을 활용한 제품(인공지능제품)을 개발ㆍ제조ㆍ생산 또는 유통하거나 +이와 관련한 서비스(인공지능서비스)를 제공하는 산업을 말한다. +인공지능사업자 +AI Provider +인공지능산업과 관련된 사업을 하는 자로서 인공지능개발사업자, 인공지능이용사업자 중 어느 +하나에 해당하는 법인, 단체, 개인 및 국가기관 등을 말한다. +인공지능개발사업자 +AI Development +Provider +인공지능을 개발하여 제공하는 자 +인공지능이용사업자 +AI Service Provider +인공지능개발사업자가 제공한 인공지능을 이용하여 인공지능제품 또는 인공지능서비스를 제공하 +는 자 +인공지능이용자 +AI User +인공지능제품 또는 인공지능서비스를 제공받는 자를 말한다. +인공지능사회 +AI Society +인공지능을 통하여 산업ㆍ경제, 사회ㆍ문화, 행정 등 모든 분야에서 가치를 창출하고 발전을 이 +끌어가는 사회를 말한다. +인공지능윤리 +AI Ethics +인간의 존엄성에 대한 존중을 기초로 하여, 국민의 권익과 생명ㆍ재산을 보호할 수 있는 안전하 +고 신뢰할 수 있는 인공지능사회를 구현하기 위하여 인공지능의 개발, 제공 및 이용 등 모든 영 +역에서 사회구성원이 지켜야 할 윤리적 기준을 말한다. +데이터 공격 +data attack +인공지능 서비스 개발 또는 운영 과정에서 인공지능의 기밀성(confidentiality)과 무결성 +(integrity)을 공격하기 위하여 의도적으로 학습 데이터를 변질시키거나 입력 데이터를 오염시켜 +예상과는 다른 결과를 나타내도록 하는 것을 의미한다. +데이터 강건성 +data robustness +인공지능 모델이 학습용 데이터의 이상값(outlier), 중독(poisoning) 및 회피(evasion) 등의 공 +격에 영향을 받지 않는 것을 의미한다. +데이터 중독 +data poisoning +인공지능 모델의 학습 데이터에 악의적인 데이터를 주입하는 행위를 말한다. 공격자는 데이터 +중독을 통해 인공지능 시스템이 학습하지 말아야 할 내용을 학습하게 만들어 바람직하지 못한 +결과를 출력하게 한다. 이를 위해, 기계학습 데이터베이스에 침투하여 부정확하고 그릇된 예측을 + + +![이미지 152-0](images/p0152_img0.png) + + +![이미지 152-1](images/p0152_img1.png) + + +![이미지 152-2](images/p0152_img2.png) + + +![이미지 152-3](images/p0152_img3.png) + + +--- + +부록 +하도록 유도하는 정보를 입력한다. 이렇게 주입된 데이터로부터 학습한 알고리즘은 원래 의도하 +지 않은 결과를 도출한다. +데이터 편향 +data bias +가용한 데이터가 모집단이나 연구 현상을 적절히 표현하지 못하여 데이터셋의 특정 요소가 과장 +되거나 축소되어 표현될 때 발생하는 오류이다. 편향된 데이터셋은 기계학습 모델이 실세계를 +정확하게 나타내지 못해서 왜곡된 결과 또는 낮은 정확도를 초래한다. 데이터 편향은 기술 제약 +조건 등에서 발생하며 인간의 인지 편향, 교육 방법론, 교육 인프라의 차이로도 발생할 수 있다. +인공지능 모델 +AI model +인공지능 시스템을 개발할 때 해당 분야 서비스에서 수집된 데이터셋으로 모델을 만들기 위한 +학습을 수행하고, 학습 알고리즘을 이용하여 목적에 맞는 특정 패턴을 만들어내는데, 이때 추출 +된 패턴을 의미한다. 학습 알고리즘은 데이터셋에서 패턴과 상관관계를 찾고 분석을 통해 최적 +의 의사결정과 예측을 수행하도록 설계된 알고리즘에 따라 모델을 학습시킨다. +인공지능 모델 개발자 +AI model developer +인공지능 서비스의 생명주기에서 인공지능 모델 개발, 시스템 구현, 운영 및 모니터링 과정의 주 +체이다. +• 인공지능 모델 개발 단계에서는 인공지능 모델을 구현하고, 학습 모델의 편향적인 추론 결과나 +공격에 대한 대응방안 마련과 학습 모델 추론 결과에 대한 해석, 모델의 확인 및 검증, 모델에 +대한 성능평가까지를 담당한다. +• 시스템 구현 단계에서는 기존 레거시 시스템과의 호환성을 제공하고, 기능 시험, 시스템 검증 +배포 버전을 승인해 주는 역할을 수행한다. +• 운영 및 모니터링 단계에서는 모델 모니터링 결과 분석을 통한 모델의 재학습, 모델의 편향성 +제거, 공평성과 설명가능성 등 시스템 신뢰성을 모니터링하고 치명적 문제가 발생할 때 시스템 +폐기의 의사결정까지 관여한다. +인공지능 모델 +공격/적대적 공격 +AI model attack +/adversarial attack +적대적 의도를 가진 사용자가 학습 데이터 및 기능을 도용하거나 다른 방식의 공격으로 인공지 +능 모델을 변형하거나 오용하는 것을 의미한다. 인공지능 모델 공격에는 모델 추출 공격과 모델 +회피 공격이 있다. +• 모델 추출 공격은 학습된 모델의 다양한 입력에 대한 인지 결과를 분석하고, 분류 기준을 추출 +하여 적용 중인 학습 모델과 유사한 성능의 대체 모델을 구성하는 방식의 공격이다. +• 모델 회피 공격은 입력 데이터에 최소한의 변조를 가해 인공지능 모델을 속이는 방식의 공격 +이다. +모델 추출 공격 +model extraction +attack +기계학습 모델에 질의를 계속 입력하면서 결과값을 분석함으로써 모델을 추출하는 공격이다. 이 +공격은 주로 서비스형 기계학습((MLaaS) Machine Learning as a Service)을 탈취하거나 전 +도 공격(inversion attack)이나 회피 공격(evasion attack)과 같은 2차 공격에 활용한다. +모델 추출 공격 방어 +기법 +attack defensive +method +인공지능 모델 추출 공격에 대항하여 이를 방어하는 방법을 의미한다. 참고로, 모델 추출 공격이 +란 기계학습 모델에 질의를 계속 입력하면서 결과값을 분석하는 방식의 공격을 의미한다. +모델 회피 공격 +model evasion +attack +공격자가 기계학습 시스템에서 오류를 생성하기 위해 입력 데이터를 조작하는 것을 목표로 하는 +공격이다. 데이터 중독과 달리 모델 회피 공격은 시스템의 동작을 변경하지 않지만, 모델의 맹점 +과 약점을 악용하여 공격 자가 원하는 오류를 생성하게 된다. 모델 회피는 기계학습 모델에 대 +한 가장 일반적 공격 중 하나이다. +모델 편향 +model bias +인공지능 모델을 개발하는 과정에서 모델의 종류나 시스템의 목표에 따라 발생할 수 있는 편향 +이다. 모델 편향은 기계학습 편향, 알고리즘 편향, 또는 인공지능 편향(bias in AI)이라고도 하 +는데, 알고리즘이 결과를 출력할 때 기계학습 절차상 가정에 오류가 있어서 구조적으로 편향성 +을 가진 결과를 출력하는 현상이다. 유럽위원회에서는 인공지능(또는 알고리즘) 편향을 임의의 +특정 사용자 그룹을 다른 그룹보다 선호하는 것과 같이 불공평한 결과를 생성하는 컴퓨터 시스 +템의 체계적이고 반복될 수 있는 오류라 정의한다. + + +![이미지 153-0](images/p0153_img0.png) + + +![이미지 153-1](images/p0153_img1.png) + + +![이미지 153-2](images/p0153_img2.png) + + +![이미지 153-3](images/p0153_img3.png) + + +--- + +인적 편향 +human bias in AI +학습을 위한 데이터를 수집 및 가공 시 인적 요인에 의해 발생하는 오류이다. 이는 사람이 의식 +적 혹은 무의식적으로 특정 정보에 대해 편향되어 있다는 점에서 기인한다. 학습 데이터 수집 +시 발생 가능한 편향을 확인해야 하며, 학습을 위한 특성을 선택하거나 데이터 라벨링 및 샘플 +링 시에도 인적 편향이 발생할 수 있다. +안전 모드 +safety mode +외부로부터의 공격, 인적 오류(human error), 인공지능 모델의 성능 저하, 편향 발생으로 인한 +사회적 물의, 사고 등이 예상되는 경우, 이의 발생 원인을 파악하고 해결하거나 사용자에게 정상 +적인 기능으로 복구하는 방법을 사용자에게 제시하는 대처 방법이 작동하는 상태를 의미한다. +오픈소스 라이브러리 +open source library +소프트웨어를 개발하는 프로그래머들이 참고할 수 있도록 컴파일해서 재사용할 수 있는 파일, +함수, 스크립트, 루틴, 그리고 그 외의 자원을 모아놓은 곳을 의미한다. 오픈소스 라이브러리 +(open source library)란 오픈소스 라이선스(open source license)를 가지고 있는 라이브러 +리를 의미한다. +기계학습 +machine learning +기계가 인간의 지능적인 행동을 모방할 수 있는 능력이라고 정의할 수 있다. 기계학습은 인공지 +능의 한 분야로, 명시적으로 프로그래밍하지 않고도 기계를 학습시킬 수 있는 능력을 부여하는 +연구 분야이다. +챗봇 +chatbot +채팅(chatting)과 로봇(robot)이 결합된 용어이며, 사람이 입력한 질문을 인식하고, 그에 알맞는 +응답을 제공하는 소프트웨어이다. 음성 명령이나 텍스트 채팅을 통해 사람이 사용하는 언어로 +대화를 시뮬레이션할 수 있다. 챗봇은 전자상거래, 은행 등 다양한 분야에서 고객 지원이나 정보 +습득과 같은 영역에 활용된다. 인공지능 챗봇은 기계학습, 자연어 처리, 자동화된 규칙과 빅데이 +터 분석을 바탕으로 사람이 소통하는 방식으로 대화한다. 특히, chat과 GPT의 합성어인 +ChatGPT는 OpenAI가 2022년 12월 1일 공개한 초거대 인공지능 기반 프로토타입 대화형 인 +공지능 챗봇이다. ChatGPT는 기존 챗봇과 달리 정해진 답을 내 놓는게 아니라 사람이 묻는 질 +문에 알맞는 대답을 생성한다. + + +![이미지 154-0](images/p0154_img0.png) + + +![이미지 154-1](images/p0154_img1.png) + + +![이미지 154-2](images/p0154_img2.png) + + +![이미지 154-3](images/p0154_img3.png) + + +--- + +부록 +참고자료 +OWASP Top 10 for LLM Applications (Version 1.1) 요약 +1.1 +개요 +(적용 대상) LLM 기술을 활용한 애플리케이션과 플러그인을 설계하고 구축하는 업무를 맡은 개발자, +데이터 과학자, 보안 전문가이다. +(목적) 전문가들이 복잡하고 진화하는 LLM 애플리케이션 보안 영역을 탐색할 수 있도록 실용적이고 +실행가능하며 간결한 보안 지침을 제공하고자 한다. +●일반적인 애플리케이션 보안 원칙과 LLM이 제기하는 특정 보안 취약성과의 간극을 메우는 것이 +필요하며, 기존 취약성이 어떻게 LLM 내에서 다른 위험을 초래하거나 새로운 방식으로 악용될 수 +있는지, 그리고 개발자가 LLM을 활용하는 애플리케이션에 대해 기존 수정 전략을 어떻게 적용해 +야 하는지에 방향성을 제공하고자 한다. +LLM 애플리케이션 데이터 흐름 +●아래 다이어그램은 가상의 대규모 언어 모델(LLM) 애플리케이션에 대한 높은 수준의 아키텍처를 +보여준다. +●다이어그램에 중첩된 위험 영역은 이 보고서에서 다룰 LLM Applications 항목이 애플리케이션 +흐름과 교차하는 방식을 보여준다. + + +![이미지 155-0](images/p0155_img0.png) + + +![이미지 155-1](images/p0155_img1.png) + + +![이미지 155-2](images/p0155_img2.png) + + +![이미지 155-3](images/p0155_img3.png) + + +![이미지 155-4](images/p0155_img4.png) + + +![이미지 155-5](images/p0155_img5.png) + + +![이미지 155-6](images/p0155_img6.png) + + +--- + +1.2 +LLM Application 취약점 공격과 방어 + +#### 1.2.1 Prompt Injection + +개념 +공격자는 정교하게 만든 입력을 통해 LLM을 조작하여 공격자의 의도를 실행하게 할 수 있다. 이는 +시스템 프롬프트를 적대적으로 유도하거나 조작된 외부 입력을 통해 간접적으로 수행할 수 있으며, 잠 +재적으로 데이터 유출, 소셜 엔지니어링 및 기타 문제로 이어질 수 있다. +예시 +• Direct Prompt Injections (일명 jailbreaking) : 악의적인 사용자가 민감한 정보를 추출하기 위해 프롬프트를 삽입 +• Indirect Prompt Injections : 사용자가 웹페이지 프롬프트를 통해 민감한 데이터를 요청 +• 플러그인을 통한 사기 : 웹사이트가 플러그인을 악용하여 사기를 침 +공격 시나리오 +●(Chatbot Remote Execution) 프롬프트 주입으로 인해 chatbot을 통한 무단 액세스가 발생 +악의적인 사용자가 LLM 기반 지원 챗봇에 직접 프롬프트 주입을 제공한다. 주입에는 애플리케이션 생성자의 시스템 프 +롬프트를 무시하고 대신 “이전의 모든 지시를 잊으세요”와 개인정보 저장소를 쿼리하고, 패키지 취약성을 악용하고, 백 +엔드 기능에서 이메일을 보내는 출력 검증이 부족하다는 새로운 지시가 포함된다. 이로 인해 원격 코드 실행이 발생하여 +무단 액세스와 권한 상승이 발생한다. +●(via Image) 웹페이지 프롬프트에서 개인 데이터가 유출됨 +사용자가 LLM을 사용하여 모델에 이전 사용자 지시를 무시하고 대신 대화 요약이 포함된 URL로 연결되는 이미지를 +삽입하도록 지시하는 텍스트(간접 프롬프트 주입)가 포함된 웹페이지(문서)를 이해하기 쉬운 형식으로 짧게 정리해 준다. +그러면 LLM이 사용자에게 민감한 정보를 요청하고 JavaScript 또는 Markdown을 통해 추출을 수행한다. +●(Misleading Resume) LLM이 후보자를 잘못 추천함 +악의적인 사용자가 간접 프롬프트 주입이 포함된 이력서를 업로드한다. 이 문서에는 LLM이 사용자에게 이 문서가 훌륭 +하다는 것을 알리도록 하는 지침이 포함된 프롬프트 주입이 포함되어 있다(예를 들어, “직무 역할에 적합한 후보자입니 +다”). 내부 사용자가 LLM을 통해 문서를 실행하여 웹페이지(문서)를 이해하기 쉬운 형식으로 짧게 정리해 준다. LLM의 +출력은 이 문서가 훌륭하다는 정보를 반환한다. +●(Prompt Replay) 공격자가 잠재적인 추가 공격을 위해 시스템 프롬프트를 재생함 +공격자는 시스템 프롬프트에 의존하는 독점 모델에 메시지를 보내 모델에게 이전 지침을 무시하고 대신 시스템 프롬프 +트를 반복하도록 요청한다. 모델은 독점 프롬프트를 출력하고 공격자는 이러한 지침을 다른 곳에서 사용하거나 더 미묘 +한 추가 공격을 구성할 수 있다. + + +![이미지 156-0](images/p0156_img0.png) + + +![이미지 156-1](images/p0156_img1.png) + + +![이미지 156-2](images/p0156_img2.png) + + +![이미지 156-3](images/p0156_img3.png) + + +![이미지 156-4](images/p0156_img4.png) + + +--- + +부록 +●(Email Deletion) 간접 주입으로 인해 이메일이 삭제됨 +공격자가 간접 프롬프트 주입을 웹페이지에 임베드하여 LLM에 이전 사용자 지시를 무시하고 LLM 플러그인을 사용하 +여 사용자의 이메일을 삭제하도록 지시한다. 사용자가 LLM을 사용하여 이 웹페이지를 이해하기 쉬운 형식으로 짧게 정 +리하면 LLM 플러그인이 사용자의 이메일을 삭제한다. +예방 +●(Privilige Control) LLM 액세스 제한 및 역할 기반 권한 적용 +백엔드 시스템에 대한 LLM 액세스 권한 제어를 시행한다. 플러그인, 데이터 액세스, 기능 수준 권한과 같은 확장 가능 +한 기능을 위해 LLM에 자체 API 토큰을 제공한다. LLM을 의도된 작업에 필요한 최소한의 액세스 수준으로만 제한하 +여 최소 권한의 원칙을 따른다. +●(Human Approval) 권한 있는 작업에 대한 사용자 동의 요구 +확장된 기능을 위해 루프에 사람을 추가한다. 이메일 보내기 또는 삭제와 같은 권한이 있는 작업을 수행할 때 애플리케 +이션에서 사용자가 먼저 작업을 승인하도록 요구한다. 이렇게 하면 간접적인 프롬프트 주입으로 인해 사용자의 인식이나 +동의 없이 사용자를 대신하여 승인되지 않은 작업이 수행될 가능성이 줄어든다. +●(Segregate Content) 신뢰할 수 없는 콘텐츠를 사용자 프롬프트에서 분리 +외부 콘텐츠를 사용자 프롬프트에서 분리한다. 신뢰할 수 없는 콘텐츠가 사용되는 위치를 분리하고 표시하여 사용자 프 +롬프트에 미치는 영향을 제한한다. 예를 들어, OpenAI API 호출에 ChatML을 사용하여 LLM에 프롬프트 입력 소스를 +표시한다. +●(Trust Boundaries) LLM을 신뢰할 수 없는 것으로 취급하고 신뢰할 수 없는 응답을 시각적으로 +강조 +LLM, 외부 소스 및 확장 가능한 기능(예: 플러그인 또는 다운스트림 기능) 간에 신뢰 경계를 설정한다. LLM을 신뢰할 +수 없는 사용자로 취급하고 의사 결정 프로세스에 대한 최종 사용자 제어를 유지한다. 그러나 손상된 LLM은 사용자에 +게 정보를 제공하기 전에 정보를 숨기거나 조작할 수 있으므로 애플리케이션의 API와 사용자 사이에서 여전히 중개자 +(중간자) 역할을 할 수 있다. 신뢰할 수 없는 응답을 사용자에게 시각적으로 강조・표시한다. + + +![이미지 157-0](images/p0157_img0.png) + + +![이미지 157-1](images/p0157_img1.png) + + +![이미지 157-2](images/p0157_img2.png) + + +![이미지 157-3](images/p0157_img3.png) + + +![이미지 157-4](images/p0157_img4.png) + + +--- + + +#### 1.2.2 Insecure Output Handling + +개념 +“Insecure Output Handling(안전하지 않은 출력 처리)”란 다운스트림 구성 요소가 적절한 검토 없 +이 대규모 언어 모델(LLM) 출력을 맹목적으로 수용할 때 발생하는 취약점이다. 이는 웹 브라우저에서 +XSS 및 CSRF, SSRF, 권한 상승 또는 백엔드 시스템에서 원격 코드 실행으로 이어질 수 있다. +예시 +• Remote Code Execution : LLM 출력이 시스템 쉘에서 실행되어 코드 실행으로 이어짐 +• Cross-Site Scripting (XSS): LLM에서 생성된 JavaScript 또는 마크다운으로 인해 브라우저가 코드를 해석하고 실 +행함 +공격 시나리오 +●(Chatbot Shutdown) LLM 출력은 검증이 부족하여 플러그인을 종료 +애플리케이션은 LLM 플러그인을 사용하여 챗봇 기능에 대한 응답을 생성한다. 이 플러그인은 또한 다른 권한이 있는 +LLM에서 액세스할 수 있는 여러 관리 기능을 제공한다. 일반적인 용도의 LLM은 적절한 출력 검증 없이 플러그인에 +직접 응답을 전달하여 플러그인이 유지 관리를 위해 종료되도록 한다 +●(Sensitive Data Capture) LLM은 민감한 데이터를 캡처하여 공격자가 제어하는 서버로 전송 +사용자는 LLM에서 구동되는 웹사이트 요약 도구를 사용하여 기사의 간결한 요약을 생성한다. 웹사이트에는 LLM이 웹 +사이트나 사용자 대화에서 민감한 콘텐츠를 캡처하도록 지시하는 프롬프트 주입이 포함되어 있다. 거기서 LLM은 민감 +한 데이터를 인코딩하여 출력 검증이나 필터링 없이 공격자가 제어하는 서버로 보낼 수 있다. +●(Database Table Deletion) LLM은 파괴적인 SQL 쿼리를 만들어 모든 테이블을 삭제할 가능성 +이 있음 +LLM은 사용자가 채팅과 같은 기능을 통해 백엔드 데이터베이스에 대한 SQL 쿼리를 작성하게할 수 있다. 사용자는 모 +든 데이터베이스 테이블을 삭제하는 쿼리를 요청한다. LLM에서 작성된 쿼리가 면밀히 조사되지 않으면 모든 데이터베 +이스 테이블이 삭제된다. +●(XSS Exploitation) LLM은 unsanitized JavaScript 페이로드를 반환하여 피해자의 브라우저에 +서 XSS가 발생 +web app 사용자는 LLM을 사용하여 출력 검증 없이 사용자 텍스트 프롬프트에서 콘텐츠를 생성한다. 공격자는 정교하 +게 만든 프롬프트를 제출하여 LLM이 unsanitized JavaScript 페이로드를 반환하게 하고, 피해자의 브라우저에서 렌더 +링될 때 XSS로 이어질 수 있다. 프롬프트의 검증이 충분하지 않아 이 공격이 가능해진다. + + +![이미지 158-0](images/p0158_img0.png) + + +![이미지 158-1](images/p0158_img1.png) + + +![이미지 158-2](images/p0158_img2.png) + + +![이미지 158-3](images/p0158_img3.png) + + +![이미지 158-4](images/p0158_img4.png) + + +--- + +부록 +예방 +●(Zero-Trust 접근 방식) LLM 출력을 사용자 입력처럼 취급한다; 적절하게 검증한다. +모델은 다른 사용자와 마찬가지로 취급하고 Zero-Trust 방식을 채택하고 모델에서 백엔드 함수로 오는 응답에 적절한 +입력 검증을 적용한다. +●(OWASP ASVS Guidelines) 입력 검증 및 정제를 위한 OWASP 표준을 따름 +효과적인 입력 검증 및 정제를 보장하기 위해 OWASP ASVS(애플리케이션 보안 검증 표준) 가이드라인을 따른다. +●(Output Encoddng) JavaScript 또는 Markdown에서 코드 실행을 방지하기 위해 LLM 출력을 +인코딩 +JavaScript 또는 Markdown에 의한 원치 않는 코드 실행을 완화하기 위해 모델 출력을 사용자에게 다시 인코딩한다. +OWASP ASVS는 출력 인코딩에 대한 자세한 지침을 제공한다. + +#### 1.2.3 Training Data Poisoning + +개념 +“Training Data Poisoning”은 모델의 보안, 효과성 또는 윤리적 행동을 손상시킬 수 있는 취약성, 백 +도어 또는 편향을 도입하기 위한 데이터 조작 또는 미세 조정 프로세스를 말한다. 이는 성능 저하, 다 +운스트림 소프트웨어 악용 및 평판 손상의 위험이 있다. +예시 +• (Malicious Data Injection) 모델 훈련 중에 위조된 데이터 주입 +• (Biased Training Outputs) 모델은 오염된 데이터에서 부정확한 내용을 반영 +• (Content Injection) 악의적인 행위자는 편향된 콘텐츠를 훈련에 주입 +공격 시나리오 +●(오해의 소지가 있는 출력) LLM은 편향이나 증오를 조장하는 콘텐츠를 생성 +LLM 생성 AI 프롬프트 출력은 애플리케이션 사용자를 오도하여 편향된 의견, 추종자 또는 비정상적인 경우 증오 범죄 +등으로 이어질 수 있다. +●(유해 데이터 주입) 악의적인 사용자가 편향된 데이터로 모델을 조작 +학습 데이터가 올바르게 필터링되지 않으면 애플리케이션의 악의적인 사용자가 모델에 영향을 미치고 악성 데이터를 주 +입하여 편향되고 잘못된 데이터에 적응하려고 할 수 있다. + + +![이미지 159-0](images/p0159_img0.png) + + +![이미지 159-1](images/p0159_img1.png) + + +![이미지 159-2](images/p0159_img2.png) + + +![이미지 159-3](images/p0159_img3.png) + + +![이미지 159-4](images/p0159_img4.png) + + +--- + +●(악의적인 문서 주입) 경쟁자가 모델 학습 중에 거짓 데이터를 삽입 +악의적인 행위자 또는 경쟁자가 의도적으로 부정확하거나 악의적인 문서를 생성하여 모델의 학습 데이터를 표적으로 삼 +고 동시에 입력을 기반으로 모델을 훈련한다. 희생양이 된 모델(victim model)은 생성 AI 프롬프트의 출력에 반영되는 +이 위조된 정보를 사용하여 훈련한다. +예방 +●(공급망 검증) 외부 데이터 소스를 검증하고 “ML-BOM” 레코드를 유지・관리 +특히 외부에서 소싱한 경우 학습 데이터의 공급망을 확인하고 “ML-BOM”(기계 학습 자재 목록) 방법을 통해 증명을 +유지하고 모델 카드를 확인한다. +●(합법성 검증) 입력 검증을 위한 OWASP 표준을 따름 +사전 교육, 미세 조정7 및 임베딩 프로세스8 모두에서 얻은 대상 데이터 소스와 포함된 데이터의 올바른 적법성을 확인 +한다. +●(사용 사례별 교육) JavaScript 또는 Markdown에서 코드 실행을 방지하기 위해 LLM 출력을 코딩 +LLM과 통합할 애플리케이션에 대한 사용 사례를 확인한다. 별도의 교육 데이터를 통해 다른 모델을 만들거나 다른 사 +용 사례에 대한 미세 조정을 통해 정의된 사용 사례에 따라 보다 세부적이고 정확한 생성 AI 출력을 만든다. +7 +이미 훈련된 기존 모델을 가져와 큐레이팅된 데이터 세트를 사용하여 훈련함으로써 더 좁은 주제나 더 집중된 목표에 맞게 조정하는 +것을 포함한다. 이 데이터 세트에는 일반적으로 입력과 해당 원하는 출력의 예가 포함된다. +8 +범주형 데이터(종종 텍스트)를 언어 모델을 훈련하는 데 사용할 수 있는 숫자 표현으로 변환하는 프로세스를 말하며, 텍스트 데이터의 +단어나 구문을 연속 벡터 공간의 벡터로 표현하는 것을 포함한다. 벡터는 일반적으로 텍스트의 큰 코퍼스에서 훈련된 신경망에 텍스 +트 데이터를 입력하여 생성된다. + + +![이미지 160-0](images/p0160_img0.png) + + +![이미지 160-1](images/p0160_img1.png) + + +![이미지 160-2](images/p0160_img2.png) + + +![이미지 160-3](images/p0160_img3.png) + + +![이미지 160-4](images/p0160_img4.png) + + +--- + +부록 + +#### 1.2.4 Model Denial of Service + +개념 +“Model Denial of Service”는 공격자가 LLM(Large Language Model)과 상호작용할 때 예외적으 +로 많은 양의 리소스를 소모할 때 발생한다. 이는 공격자와 다른 사용자에게 서비스 품질이 저하될 수 +있으며, 잠재적으로 높은 리소스 비용이 발생할 수 있다. +예시 +• (Malicious Data Injection) 모델 훈련 중에 위조된 데이터 주입 +• (Biased Training Outputs) 모델은 오염된 데이터에서 부정확한 내용을 반영 +• (Content Injection) 악의적인 행위자는 편향된 콘텐츠를 훈련에 주입 +●대량 대기열 : 공격자는 리소스 집약적 작업으로 LLM을 과부하시킴 +●리소스 소모 쿼리 : 비정상적인 쿼리는 시스템 리소스를 고갈시킴 +●지속적인 입력 오버플로(overflow) : 과도한 입력으로 LLM을 범람시킴 +●반복적인 긴 입력 : 반복적인 긴 쿼리는 리소스를 고갈시킴 +●재귀적 컨텍스트 확장 : 공격자는 재귀적 동작을 악용 +공격 시나리오 +●(리소스 과다 사용) 공격자가 호스팅된 모델을 과부하시켜 다른 사용자에게 영향을 미침 +공격자는 호스팅 모델에 어렵고 비용이 많이 드는 여러 요청을 반복적으로 보내 다른 사용자에게 더 나쁜 서비스를 제공 +하고 호스트의 리소스 비용을 증가시킨다. +●(Webpage Request Amplification) LLM 도구가 예상치 못한 콘텐츠로 인해 과도한 리소스를 +소모함 +LLM 기반 도구가 악성이 아닌 쿼리에 응답하기 위해 정보를 수집하는 과정에서 웹페이지에 일부 텍스트가 있음을 발견 +하게 된다. +●(Input Flood) 과도한 입력으로 LLM을 압도하여 속도 저하 +공격자는 컨텍스트 창을 초과하는 입력으로 LLM을 지속적으로 폭격한다. 공격자는 자동화된 스크립트나 도구를 사용하 +여 대량의 입력을 보내 LLM의 처리 기능을 압도할 수 있다. 결과적으로 LLM은 과도한 리소스를 소비하여 시스템이 +상당히 느려지거나 완전히 응답하지 않게 된다. + + +![이미지 161-0](images/p0161_img0.png) + + +![이미지 161-1](images/p0161_img1.png) + + +![이미지 161-2](images/p0161_img2.png) + + +![이미지 161-3](images/p0161_img3.png) + + +![이미지 161-4](images/p0161_img4.png) + + +--- + +●(Sequential Input Drain) 격자가 순차적 입력으로 컨텍스트 창을 고갈시킴 +공격자는 각 입력이 컨텍스트 창의 용량 바로 아래에 있도록 설계된 일련의 순차적 입력을 LLM에 보낸다. 공격자는 +이러한 입력을 반복적으로 제출하여 사용 가능한 컨텍스트 창 용량을 소진하려고 한다. LLM이 컨텍스트 창 내에서 +각 입력을 처리하는 데 어려움을 겪으면서 시스템 리소스가 부족해져 성능이 저하되거나 서비스가 완전히 거부될 수 +있다. +예방 +●(입력 검증) 입력 검증 및 콘텐츠 필터링 구현 +정의된 한도를 준수하고 악성 콘텐츠를 걸러내기 위해 사용자 입력에 대한 입력 검증을 구현한다. +●(리소스 캡) 요청당 리소스 사용 제한 +요청 또는 단계당 리소스 사용량을 제한하여 복잡한 부분을 포함하는 요청이 더 느리게 실행되도록 한다. +●(API 비율 제한) 사용자 또는 IP 주소에 대한 비율 제한 적용 +특정 기간 내에 개별 사용자 또는 IP 주소가 수행할 수 있는 요청 수를 제한하기 위해 API 속도 제한을 적용한다. +●(큐 관리) 대기 중인 작업 및 전체 작업 제어 +LLM 응답에 반응하는 시스템에서 대기 중인 작업 수와 총 작업 수를 제한한다. +●(리소스 모니터링) 리소스 사용을 지속적으로 모니터링함 +Dos 공격을 나타낼 수 있는 비정상적인 급증이나 패턴을 식별하기 위해 LLM의 리소스 사용률을 지속적으로 모니터링 +한다. + + +![이미지 162-0](images/p0162_img0.png) + + +![이미지 162-1](images/p0162_img1.png) + + +![이미지 162-2](images/p0162_img2.png) + + +![이미지 162-3](images/p0162_img3.png) + + +![이미지 162-4](images/p0162_img4.png) + + +--- + +부록 + +#### 1.2.5 Supply Chain Vulnerabilities + +개념 +LLM의 공급망 취약성은 교육 데이터, ML 모델 및 배포 플랫폼을 손상시켜 편향된 결과, 보안 침해 또 +는 전체 시스템 장애를 일으킬 수 있다. 이러한 취약성은 오래된 소프트웨어, 취약한 사전 훈련된 모델, +오염된 교육 데이터 및 안전하지 않은 플러그인 디자인에서 비롯될 수 있다. +예시 +• 패키지 Null 취약점: 오래된 구성 요소 사용 +• Nulnerable 모델: 미세 조정을 위한 위험한 사전 학습 모델 +• Poisoned Data: 오염된 크라우드 소싱 데이터 +• Oldated 모델: 유지・관리되지 않은 모델 사용 +• Unclear Terms: 불분명한 용어로 인한 데이터 오용 +공격 시나리오 +●(Library Exploitation) 취약한 Python 라이브러리 Exploiting +공격자가 취약한 Python 라이브러리를 악용하여 시스템을 손상시킨다. 이는 첫 번째 Open AI 데이터 침해에서 발 +생했다. +●(Scamming Plugin) 사기를 위한 플러그인 배포 +공격자가 항공편을 검색하는 LLM 플러그인을 제공하여 사용자를 사기치는 가짜 링크를 생성한다. +●(패키지 레지스트리 공격) 손상된 패키지로 개발자 속이기 +공격자가 PyPi 패키지 레지스트리를 악용하여 모델 개발자를 속여 손상된 패키지를 다운로드하고 데이터를 빼내거나 모 +델 개발 환경에서 권한을 확대한다.(실제 공격이었음) +●(잘못된 정보 백도어) 가짜 뉴스를 위해 모델 Poisoning +공격자는 경제 분석 및 사회 연구에 특화된 공개적으로 사용 가능한 사전 훈련된 모델을 오염시켜 잘못된 정보와 가짜 +뉴스를 생성하는 백도어를 만든다. 그들은 피해자가 사용할 수 있도록 모델 마켓플레이스(예: Hugging Face)에 배포한다. +●(데이터 Poisoning) 미세 조정 중 데이터 세트 Poisoning +공격자가 공개적으로 사용 가능한 데이터 세트를 오염시켜 모델을 미세 조정할 때 백도어를 만드는 데 도움을 준다. 백 +도어는 다른 시장의 특정 회사를 미묘하게 선호한다. + + +![이미지 163-0](images/p0163_img0.png) + + +![이미지 163-1](images/p0163_img1.png) + + +![이미지 163-2](images/p0163_img2.png) + + +![이미지 163-3](images/p0163_img3.png) + + +![이미지 163-4](images/p0163_img4.png) + + +--- + +예방 +●(공급업체 평가) 공급업체 및 정책 검토 +신뢰할 수 있는 공급업체만 사용하고, 이용 약관 및 개인정보 보호 정책을 포함한 데이터 소스 및 공급업체를 신중하게 +검토한다. 적절하고 독립적으로 감사된 보안이 적용되고 모델 운영자 정책이 데이터 보호 정책과 일치하는지 확인한다. +즉, 데이터가 모델 학습에 사용되지 않도록 한다. 마찬가지로 모델 유지 관리자로부터 저작권이 있는 자료를 사용하지 +않도록 보장하고 법적 완화 조치를 모색한다. +●(플러그인 테스트) 테스트되고 신뢰할 수 있는 플러그인 사용 +평판이 좋은 플러그인만 사용하고 애플리케이션 요구 사항에 대해 테스트되었는지 확인한다. LLM-Insecure Plugin +Design은 타사 플러그인 사용으로 인한 위험을 완화하기 위해 테스트해야 하는 Insecure Plugin 디자인의 LLM 측면 +에 대한 정보를 제공한다. +●(OWASP A06) 오래된 구성 요소 위험 완화 +OWASP Top Ten's A06:2021 – 취약하고 오래된 구성 요소에서 발견되는 완화책을 이해하고 적용한다. 여기에는 취 +약성 스캐닝, 관리 및 패치 구성 요소가 포함된다. 민감한 데이터에 액세스할 수 있는 개발 환경의 경우 해당 환경에도 +이러한 통제를 적용한다. +●(재고 관리) 최신 재고 유지 +소프트웨어 자재 목록(SBOM)을 사용하여 최신 구성 요소 인벤토리를 유지・관리하여 최신의 정확하고 서명된 인벤토리 +를 유지하고 배포된 패키지의 변조를 방지한다. SBOM은 새로운 제로데이트 취약성을 신속하게 감지하고 경고하는 데 +사용할 수 있다. +●(보안 조치) 모델 및 코드 서명, 이상 탐지 적용 및 모니터링 +모델과 그 아티팩트(artifacts)를 포함하여, 구성 요소 및 환경 취약성 스캐닝, 승인되지 않은 플러그인 사용, 오래된 구 +성 요소 등을 포괄하는 충분한 모니터링을 구현한다. + + +![이미지 164-0](images/p0164_img0.png) + + +![이미지 164-1](images/p0164_img1.png) + + +![이미지 164-2](images/p0164_img2.png) + + +![이미지 164-3](images/p0164_img3.png) + + +![이미지 164-4](images/p0164_img4.png) + + +--- + +부록 + +#### 1.2.6 Sensitive Information Disclosure + +개념 +LLM 애플리케이션은 실수로 민감한 정보, 알고리즘 또는 기밀 데이터를 공개하여 무단 액세스, 지적 +재산권 도용 및 개인정보 침해로 이어질 수 있다. 이러한 위험을 완화하기 위해 LLM 애플리케이션은 +데이터를 정제(sanitization)하고 적절한 사용 정책을 구현하며 LLM에서 반환하는 데이터 유형을 제 +한해야 한다. +예시 +• complete Filtering (완료 필터링): LLM 응답에는 민감한 데이터가 포함될 수 있음 +• Overfitting (과잉적합): LLM은 학습 중에 민감한 데이터를 기억할 수 있음 +• 의도치 않은 공개: 잘못된 해석이나 스크러빙 부족으로 인한 데이터 유출 +공격 시나리오 +●(의도치 않은 노출) 사용자 A가 다른 사용자 데이터에 노출됨 +의심하지 않는 합법적인 사용자 A는 LLM 애플리케이션과 악의적이지 않은 방식으로 상호 작용할 때 LLM을 통해 특정 +다른 사용자 데이터에 노출된다. +●(필터 우회) 사용자 A가 필터를 우회하여 PII 추출 +사용자 A는 LLM에서 입력 필터와 sanitization을 우회하기 위해 잘 만들어진 일련의 프롬프트를 대상으로 하여 애플리 +케이션의 다른 사용자에 대한 민감한 정보(PII)를 공개한다. +●(학습 데이터 유출) 학습 중에 개인 데이터가 유출됨 +PII와 같은 개인 데이터는 사용자 자신의 과실 또는 LLM 애플리케이션으로 인해 훈련 데이터를 통해 모델로 유출된다. +예방 +●(Data Sanitization) 스크러빙을 사용하여 학습에서 사용자 데이터를 방지 +적절한 데이터 Sanitization 및 스크러빙 기술을 통합하여 사용자 데이터가 학습 모델 데이터에 입력되는 것을 방지 +한다. +●(입력 검증) 악성 입력을 필터링하여 모델 포이즌을 방지 +강력한 입력 검증 및 Sanitization 방법을 구현하여 잠재적인 악성 입력을 식별하고 필터링하여 모델이 오염되는 것을 +방지한다. + + +![이미지 165-0](images/p0165_img0.png) + + +![이미지 165-1](images/p0165_img1.png) + + +![이미지 165-2](images/p0165_img2.png) + + +![이미지 165-3](images/p0165_img3.png) + + +![이미지 165-4](images/p0165_img4.png) + + +--- + +●(미세 조정 주의) 모델 미세 조정에서 민감한 데이터를 주의한다. +미세 조정 데이터에서 민감한 것으로 간주되는 모든 사항은 사용자에게 공개될 가능성이 있다. 따라서 최소 권한 규칙을 +적용하고, 가장 높은 권한을 가진 사용자가 액세스할 수 있고 권한이 낮은 사용자에게 표시될 수 있는 정보에 대해 모델 +을 학습시키면 않는다. +●(데이터 액세스 제어) 외부 데이터 소스 액세스를 제한 +외부 데이터 소스에 대한 액세스(런타임 시 데이터 오케스트레이션)는 제한되어야 한다. 외부 데이터 소스에 대한 엄격 +한 액세스 제어 방법과 안전한 공급망을 유지하기 위한 엄격한 접근 방식을 적용한다. + +#### 1.2.7 Insecure Plugin Design (안전하지 않은 플러그인 디자인) + +개념 +플러그인은 악의적인 요청으로 이어질 수 있는 취약한 결과를 초래하여 데이터 유출, 원격 코드 실행, 불 +충분한 액세스 제어 및 부적절한 입력 검증으로 인한 권한 상승과 같은 해로운 결과를 초래할 수 있다. +개발자는 악용을 방지하기 위해 엄격한 매개변수화된 입력 및 안전한 액세스 제어 지침과 같은 강력한 +보안 조치를 따라야 한다. +예시 +• (단일 필드 매개변수) 플러그인에 매개변수 분리가 없음 +• (구성 문자열) 구성이 설정을 재정의할 수 있음 +• (인증 문제) 특정 플러그인 권한 부여가 없음 +• (원시 SQL 또는 코드) 코드 또는 SQL을 안전하지 않게 수용 +공격 시나리오 +●(URL Manipulation) 공격자는 조작된 URL을 통해 콘텐츠를 삽입함 +플러그인은 기본 URL을 수락하고 LLM에 URL을 쿼리와 결합하여 사용자 요청을 처리하는 데 포함된 날씨예보를 얻도 +록 지시한다. 악의적인 사용자는 URL이 제어하는 도메인을 가리키도록 요청을 작성할 수 있으며, 이를 통해 도메인을 +통해 LLM 시스템에 자체 콘텐츠를 삽입할 수 있다. +●(Reconnaissance and Exploitation) 코드 실행 및 데이터 도난에 대한 검증 부족을 악용함 +플러그인은 검증하지 않는 단일 필드에 자유 형식 입력을 허용한다. 공격자는 오류 메시지에서 정찰(Reconnaissance)을 수 +행하기 위해 신중하게 제작된 페이로드를 제공한다. 그런 다음 알려진 타사 취약성을 악용하여 코드를 실행하고 데이터 +추출 또는 권한 상승을 수행한다. + + +![이미지 166-0](images/p0166_img0.png) + + +![이미지 166-1](images/p0166_img1.png) + + +![이미지 166-2](images/p0166_img2.png) + + +![이미지 166-3](images/p0166_img3.png) + + +![이미지 166-4](images/p0166_img4.png) + + +--- + +부록 +●(Unauthorized Access) 매개변수 조작을 통해 무단 데이터에 액세스 +벡터 저장소에서 임베딩을 검색하는데 사용되는 플러그인은 유효성 검사 없이 연결 문자열로 구성 매개변수를 허용한다. +이를 통해 공격자는 이름이나 호스트 매개변수를 변경하여 다른 벡터 저장소에 액세스하고 액세스해서는 안 되는 임베 +딩을 추출하여 실험할 수 있다. +●(Repository Takeover) 저장소 인수를 위해 안전하지 않은 코드 관리 플러그인을 악용함 +공격자는 간접 프롬프트 주입을 사용하여 입력 유효성 검사 및 취약한 액세스 제어가 없는 안전하지 않은 코드 관리 플 +러그인을 악용하여 저장소 소유권을 이전하고 사용자를 저장소에서 잠근다. +예방 +●(매개변수 제어) 유형 검사를 시행하고 검증 계층을 사용함 +플러그인은 가능한 한 엄격한 매개변수화된 입력을 적용하고 입력에 대한 유형 및 범위 검사를 포함해야 한다. 이것이 +불가능한 경우, 요청을 구문 분석하고 검증을 적용하는 두 번째 계층의 유형화된 호출을 도입해야 한다. 애플리케이션 +의미론(semantics) 때문에 자유형(freeform) 입력을 허용해야 하는 경우, 잠재적으로 유해한 메서드(mathods)가 호 +출되지 않는지 확인하기 위해 신중하게 검사해야 한다. +●(OWASP 지침) ASVS 권장 사항을 적용함 +플러그인 개발자는 ASVS(애플리케이션 보안 검증 표준)에서 OWASP의 권장 사항을 적용하여 적절한 입력 검증을 보 +장해야 한다. +●(철저한 테스트) SAST, DAST, IAST로 검사하고 테스트함 +플러그인은 적절한 검증을 보장하기 위해 철저히 검사하고 테스트해야 한다. 개발 파이프라인에서 정적 애플리케이션 보 +안 테스트(SAST) 검사와 동적 및 대화형 애플리케이션 테스트(DAST, IAST)를 사용한다. +●(최소 권한) ASVS 접근 통제 가이드라인을 따름 +플러그인은 OWASP ASVS 접근 통제 지침에 따라 안전하지 않은 입력 매개변수 악용의 영향을 최소화하도록 설계해 +야 한다. 여기서는 최소 권한 접근통제를 포함하여 원하는 기능을 수행하면서 가능한 적은 기능을 노출한다. +●(인증 ID) 사용자 지정 인증에 OAuth2 및 API 키를 사용 +플러그인은 OAuth2와 같은 적절한 인증 ID를 사용하여 효과적인 권한 부여 및 접근 통제를 적용해야 한다. 또한 API +키는 기본 대화형 사용자 경로가 아닌 플러그인 경로를 반영하는 사용자 정의 권한 부여 결정에 대한 컨텍스트를 제공하 +는 데 사용해야 한다. + + +![이미지 167-0](images/p0167_img0.png) + + +![이미지 167-1](images/p0167_img1.png) + + +![이미지 167-2](images/p0167_img2.png) + + +![이미지 167-3](images/p0167_img3.png) + + +![이미지 167-4](images/p0167_img4.png) + + +--- + + +#### 1.2.8 Excessive Agency (과도한 대행) + +개념 +LLM 기반 시스템의 과도한 에이전시는 과도한 기능, 과도한 권한 또는 너무 많은 자율성으로 인해 +발생하는 취약성이다. 이를 방지하기 위해 개발자는 플러그인 기능, 권한 및 자율성을 절대적으로 필 +요한 것으로 제한하고, 사용자 권한을 추적하고, 모든 작업에 대해 사람의 승인을 요구하고, 다운스트 +림 시스템에서 권한을 구현해야 한다. +예시 +• (과도한 기능) LLM 에이전트는 불필요한 기능을 가지고 있어 오용의 위험이 있다. +• (과도한 권한) 플러그인은 시스템에 과도하게 접근할 수 있다. +• (과도한 자율성) LLM은 영향력이 큰 작업에 대한 인간 검증이 부족하다. +공격 시나리오 +●과도한 권한과 자율성을 가진 LLM 기반 개인 비서 앱이 악성 이메일에 속아 스팸을 보냄. 이는 기 +능・권한을 제한하거나, 사용자 승인을 요구하거나, 속도 제한을 구현하여 방지할 수 있음. +LLM 기반 개인 비서 앱은 플러그인을 통해 개인의 사서함에 액세스하여 수신 이메일의 내용을 요약한다. 이 기능을 구 +현하려면 이메일 플러그인에 메시지를 읽을 수 있는 기능이 필요하지만, 시스템 개발자가 사용하기로 선택한 플러그인에 +는 메시지를 보내는 기능도 포함되어 있다. LLM은 간접 프롬프트 주입 공격에 취약하여 악의적으로 작성된 수신 이메 +일이 LLM을 속여 이메일 플러그인에 '메시지 보내기' 기능을 호출하여 사용자의 사서함에서 스팸을 보내도록 명령한다. +이를 방지할 수 있는 방법은 다음과 같다; (a) 메일 읽기 기능만 제공하는 플러그인을 사용하여 과도한 기능을 제거, (b) +읽기 전용 범위의 OAuth 세션을 통해 사용자의 이메일 서비스에 인증하여 과도한 권한을 제거, (c) LLM 플러그인에서 +초안한 모든 메일을 사용자가 수동으로 검토하고 '보내기'를 클릭하도록 요구하여 과도한 자율성을 제거하거나 또는 메 +일 전송 인터페이스에 속도 제한을 구현하여 발생한 피해를 줄일 수 있다. +예방 +●(플러그인 기능 제한) LLM 에이전트에 필수적인 기능만 허용 +LLM 에이전트가 호출할 수 있는 플러그인/도구를 필요한 최소한의 기능으로만 제한한다. 예를 들어, LLM 기반 시스템 +이 URL의 내용을 가져오는 기능을 요구하지 않는 경우 이러한 플러그인은 LLM 에이전트에게 제공되어서는 안 된다. +●(플러그인 범위 제어) LLM 플러그인 내의 기능 제한 +LLM 플러그인/도구에 구현된 기능을 필요한 최소한으로 제한한다. 예를 들어, 이메일을 요약하기 위해 사용자의 사서 +함에 액세스하는 플러그인은 이메일을 읽는 기능만 필요할 수 있으므로 플러그인에는 메시지 삭제 또는 전송과 같은 다 +른 기능이 포함되어서는 안 된다. + + +![이미지 168-0](images/p0168_img0.png) + + +![이미지 168-1](images/p0168_img1.png) + + +![이미지 168-2](images/p0168_img2.png) + + +![이미지 168-3](images/p0168_img3.png) + + +![이미지 168-4](images/p0168_img4.png) + + +--- + +부록 +●(세분화된 기능) 개방형 기능은 피하고 특정 플러그인 사용 +가능한 경우 개방형 기능(예: 셸 명령 실행, URL 가져오기 등)을 피하고 더 세부적인 기능이 있는 플러그인/도구를 사 +용한다. 예를 들어, LLM 기반 앱은 파일에 출력을 써야 할 수 있다. 이것이 셸 함수를 실행하기 위한 플러그인을 사용 +하여 구현된 경우 바람직하지 않은 동작의 범위가 매우 크다(다른 셸 명령이 실행될 수 있음). 더 안전한 대안은 해당 +특정 기능만 지원할 수 있는 파일 쓰기 플러그인을 빌드하는 것이다. +●(권한 제어) 필요한 최소한으로 권한 제한 +LLM 플러그인/도구가 다른 시스템에 부여하는 권한을 최소한으로 제한하여 바람직하지 않은 작업의 범위를 제한한다. +예를 들어, 고객에게 구매를 권장하기 위해 제품 데이터베이스를 사용하는 LLM 에이전트는 '제품' 테이블에 대한 읽기 +액세스만 필요할 수 있다. 다른 테이블에 대한 액세스 권한이나 레코드를 삽입, 업데이트 또는 삭제할 수 있는 권한이 +없어야 한다. 이는 LLM 플러그인이 데이터베이스에 연결하는 데 사용하는 ID에 대한 적절한 데이터베이스 권한을 적용 +하여 시행해야 한다. +●(사용자 인증) 작업이 사용자 컨텍스트에 있는지 확인 +사용자 권한 부여 및 보안 범위를 추적하여 사용자를 대신하여 수행된 작업이 해당 특정 사용자의 컨텍스트에서 다운스 +트림 시스템에서 실행되고 필요한 최소 권한으로 실행되도록 한다. 예를 들어, 사용자의 코드 repo를 읽는 LLM 플러그 +인은 사용자가 OAuth를 통해 인증하고 필요한 최소 범위로 인증하도록 요구해야 한다. +●(human-in-the-Loop) 작업에 대한 인간 승인 요구 +모든 작업을 수행하기 전에 사람이 승인하도록 요구하는 human-in-the-Loop 제어를 활용한다. 이는 다운스트림 시 +스템(LLM 애플리케이션 범위 밖 또는 LLM 플러그인/도구 자체 내부)에서 구현될 수 있다. 예를 들어, 사용자를 대신하 +여 소셜 미디어 콘텐츠를 만들고 게시하는 LLM 기반 앱은 '게시' 작업을 구현하는 플러그인/도구/API 내에 사용자 승 +인 루틴을 포함해야 한다. +●(다운스트림 권한 부여) 다운스트림 시스템에서 권한 부여 구현 +LLM에 의존하여 작업이 허용되는지 여부를 결정하는 대신 다운스트림 시스템에서 권한을 구현한다. 도구/플러그인을 +구현할 때 플러그인/도구를 통해 다운스트림 시스템에 요청된 모든 요청이 보안 정책에 대해 검증되도록 완전한 중재 +원칙(mediation principle)을 적용한다. + + +![이미지 169-0](images/p0169_img0.png) + + +![이미지 169-1](images/p0169_img1.png) + + +![이미지 169-2](images/p0169_img2.png) + + +![이미지 169-3](images/p0169_img3.png) + + +--- + + +#### 1.2.9 Overreliance (지나친 의존) + +개념 +LLM에 대한 과도한 의존은 잘못된 정보, 법적 문제, 보안 취약성과 같은 심각한 결과를 초래할 수 있 +다. 이는 LLM이 적절한 감독이나 검증 없이 중요한 결정을 내리거나 콘텐츠를 생성할 수 있다고 신뢰 +될 때 발생한다. +예시 +• (과도한 기능) LLM 에이전트는 불필요한 기능을 가지고 있어 오용의 위험이 있다. +• (과도한 권한) 플러그인은 시스템에 과도하게 접근할 수 있다. +• (과도한 자율성) LLM은 영향력이 큰 작업에 대한 인간 검증이 부족하다. +●(오해의 소지가 있는 정보) LLM은 검증 없이 오해의 소지가 있는 정보를 제공할 수 있음 +●(불안전한 코드) LLM은 소프트웨어에서 안전하지 않은 코드를 제안할 수 있음 +공격 시나리오 +●(잘못된 정보 확산) 악의적인 행위자가 LLM에 의존하는 뉴스 기관을 악용 +뉴스 기관은 LLM을 사용하여 뉴스 기사를 생성한다. 악의적인 행위자가 이러한 과도한 의존성을 악용하여 LLM에 오해 +의 소지가 있는 정보를 제공하고 잘못된 정보가 퍼지게 한다. +●(Plagiarism) 의도치 않은 표절로 인해 저작권 문제가 발생 +AI가 의도치 않게 콘텐츠를 표절하여 저작권 문제가 발생하고 기관에 대한 신뢰가 감소한다. +●(안전하지 않은 소프트웨어) LLM 제안으로 보안 취약성이 발생 +소프트웨어 개발팀이 LLM 시스템을 사용하여 코딩 프로세스를 가속화한다. AI의 제안에 지나치게 의존하면 안전하지 +않은 기본 설정이나 안전한 코딩 관행과 일치하지 않는 권장 사항으로 인해 애플리케이션에 보안 취약성이 발생한다. +●(악성 패키지) LLM이 존재하지 않는 코드 라이브러리를 제안 +소프트웨어 개발 회사가 LLM을 사용하여 개발자를 지원한다. LLM은 존재하지 않는 코드 라이브러리 또는 패키지를 +제안하고 AI를 신뢰하는 개발자는 자신도 모르게 악성 패키지를 회사 소프트웨어에 통합한다. 이는 특히 타사 코드나 +라이브러리를 포함할 때 LLM 제안을 교차 확인하는 것의 중요성을 강조한다. + + +![이미지 170-0](images/p0170_img0.png) + + +![이미지 170-1](images/p0170_img1.png) + + +![이미지 170-2](images/p0170_img2.png) + + +![이미지 170-3](images/p0170_img3.png) + + +![이미지 170-4](images/p0170_img4.png) + + +--- + +부록 +예방 +●(모니터링 및 검증) 일관성(consistency) 검사를 통해 LLM 출력을 정기적으로 검토 +LLM 출력을 정기적으로 모니터링하고 검토한다. 자체 일관성 또는 투표 기술을 사용하여 일관되지 않은 텍스트를 필터 +링한다. 단일 프롬프트에 대한 여러 모델 응답을 비교하면 출력의 품질과 일관성을 더 잘 판단할 수 있다. +●(교차 확인) 신뢰할 수 있는 출처로 LLM 출력 확인 +신뢰할 수 있는 외부 소스와 LLM 출력을 교차 확인한다. 이 추가 검증 계층은 모델에서 제공하는 정보가 정확하고 신 +뢰할 수 있는지 확인하는 데 도움이 될 수 있다. +●(미세 조정) 작업별 미세 조정으로 LLM 품질 향상 +미세 조정 또는 임베딩을 사용하여 모델을 향상시켜 출력 품질을 개선한다. 일반적으로 사전 학습된 모델은 특정 도메인 +에서 조정된 모델에 비해 부정확한 정보를 생성할 가능성이 더 높다. 프롬프트 엔지니어링, 매개변수 효율적 조정(PET), +전체 모델 조정 및 사고 체인 프롬프트와 같은 기술을 이러한 목적으로 사용할 수 있다. +●(자동 검증) 알려진 사실과 출력을 검증하는 시스템 구현 +생성된 출력을 알려진 사실 또는 데이터와 교차 검증할 수 있는 자동 검증 메커니즘을 구현한다. 이를 통해 보안 계층을 +추가로 제공하고 할루시네이션(Hallucination)9과 관련된 위험을 완화할 수 있다. +●(작업 세분화) 복잡한 작업을 나누어 위험 감소 +복잡한 작업을 관리 가능한 하위 작업으로 나누고 이를 다른 에이전트에 할당한다. 이는 복잡성을 관리하는 데 도움이 +될 뿐만 아니라 각 에이전트가 더 작은 작업에 대해 책임을 질 수 있으므로 Hallucination의 가능성도 줄어든다. +●(위험 전달) LLM 제한 사항 전달 +LLM 사용과 관련된 위험과 한계를 일찍 전달한다. 여기에는 정보 부정확성 및 기타 위험이 포함된다. 효과적인 위험 +전달은 사용자를 잠재적인 이슈에 대비시키고 정보에 입각한 결정을 내리는 데 도움이 될 수 있다. +●(사용자 친화적 인터페이스) 콘텐츠 필터 및 경고가 있는 인터페이스 생성 +LLM의 책임감 있고 안전한 사용을 장려하는 API와 사용자 인터페이스를 구축한다. 여기에는 콘텐츠 필터, 잠재적 부정 +확성에 대한 사용자 경고, AI 생성 콘텐츠의 명확한 레이블 지정과 같은 조치가 포함될 수 있다. +●(보안 코딩) 취약점을 방지하기 위한 지침 수립 +개발 환경에서 LLM을 사용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 코딩 관행과 지침을 수립한다. +9 +AI 모델이 정확하지 않거나 사실이 아닌 조작된 정보를 생성하는 것 + + +![이미지 171-0](images/p0171_img0.png) + + +![이미지 171-1](images/p0171_img1.png) + + +![이미지 171-2](images/p0171_img2.png) + + +![이미지 171-3](images/p0171_img3.png) + + +![이미지 171-4](images/p0171_img4.png) + + +--- + + +#### 1.2.10 Model Theft + +개념 +LLM 모델 도난에는 LLM 모델에 대한 무단 액세스 및 유출이 포함되며, 경제적 손실, 평판 손상 및 +민감한 데이터에 대한 무단 액세스 위험이 있다. 이러한 모델을 보호하려면 강력한 보안 조치가 필수적 +이다. +예시 +• (취약점 악용) 보안 결함으로 인한 무단 액세스 +• (중앙 모델 레지스트리) 거버넌스를 위한 중앙 보안 +• (내부 위협) 직원 모델 유출 위험 +• (사이드 채널 공격) 사이드 기술을 통한 모델 세부 정보 추출 +공격 시나리오 +●(모델 도난) 경쟁을 위한 무단 액세스 및 사용 +공격자가 회사 인프라의 취약점을 악용하여 LLM 모델 저장소에 대한 무단 액세스를 얻는다. 공격자는 귀중한 LLM 모 +델을 추출하여 경쟁 언어 처리 서비스를 시작하거나 민감한 정보를 추출하여 원래 회사에 상당한 재정적 피해를 입힌다. +●(직원 유출) 노출로 인한 위험 증가 +불만이 있는 직원이 모델이나 관련 아티팩트를 유출한다. 이 시나리오를 대중에 공개하면 공격자가 적대적 공격을 위한 +지식을 얻거나, 아니면 사용 가능한 자산을 직접 훔칠 수 있다. +●(섀도우 모델 생성) 쿼리로 모델 복제 +공격자가 신중하게 선택한 입력으로 API를 쿼리하고 충분한 수의 출력을 수집하여 섀도우(shadow) 모델을 만든다. +●(사이드 채널 공격) 사이드 기술을 통한 추출 +악의적인 공격자는 LLM의 입력 필터링 기술과 프리앰블(preamble)을 우회하여 사이드 채널 공격을 수행하고 자신이 +제어하는 원격 제어 리소스에 대한 모델 정보를 검색한다. + + +![이미지 172-0](images/p0172_img0.png) + + +![이미지 172-1](images/p0172_img1.png) + + +![이미지 172-2](images/p0172_img2.png) + + +![이미지 172-3](images/p0172_img3.png) + + +![이미지 172-4](images/p0172_img4.png) + + +--- + +부록 +예방 +●(접근 통제 및 인증) 강력한 접근 통제 및 인증 +강력한 액세스 제어(예: RBAC 및 최소 권한 규칙)와 강력한 인증 메커니즘을 구현하여 LLM 모델 저장소와 학습 환경 +에 대한 무단 액세스를 제한한다. +이는 특히 처음 세 가지 일반적인 예에 해당하는데, 내부 위협, 잘못된 구성 및/또는 악의적인 행위자가 내부자 또는 +환경 외부에서 침투할 수 있는 LLM 모델, 가중치 및 아키텍처를 수용하는 인프라에 대한 취약한 보안 제어로 인해 이 +러한 취약성이 발생할 수 있다. +공급업체 관리 추적, 검증 및 종속성 취약성은 공급망 공격의 악용을 방지하기 위한 중요한 주제이다. +●(네트워크 제한) 리소스 및 API에 대한 LLM 액세스 제한 +LLM의 네트워크 리소스, 내부 서비스 및 API에 대한 액세스 제한 +이것은 특히 내부자 위험과 위협을 다루기 때문에 모든 일반적인 예에 해당하지만 궁극적으로 LLM 애플리케이션이 “액세스 +할 수 있는” 것을 제어하므로 사이드 채널 공격을 방지하기 위한 메커니즘 또는 예방 단계가 될 수 있다. +●(모니터링 및 감사) 액세스 로그의 정기적 모니터링 +LLM 모델 저장소와 관련된 액세스 로그 및 활동을 정기적으로 모니터링하고 감사하여 의심스럽거나 승인되지 않은 동 +작을 즉시 감지하고 대응한다. +●(MLOps 자동화) 승인 워크플로를 통한 보안 배포 +거버넌스, 추적 및 승인 워크플로를 사용하여 MLOps 배포를 자동화하여 인프라 내에서 액세스 및 배포 제어를 강화 +한다. + + +![이미지 173-0](images/p0173_img0.png) + + +![이미지 173-1](images/p0173_img1.png) + + +![이미지 173-2](images/p0173_img2.png) + + +![이미지 173-3](images/p0173_img3.png) + + +![이미지 173-4](images/p0173_img4.png) + + +--- + +NIST Trustworthy and Responsible AI NIST AI 100-2e2023 +2.1 +개요 +AI 시스템은 기능에 따라 예측 AI(Predictive AI, “이하 PredAI”))와 생성 AI(Generative AI, “이하 +GenAI”)의 두 가지로 구분할 수 있음 +●공격자는 PredAI 및 GenAI 시스템 모두에 대한 학습 데이터를 조작하여 이를 기반으로 교육된 AI +시스템을 공격에 취약하게 만들 수 있음 +- ML 모델의 크기가 계속 커짐에 따라 많은 조직에서 직접 사용하거나 새로운 데이터 세트로 미 +세 조정하여 다양한 작업을 수행할 수 있는 사전 훈련된 모델에 의존하는 경향이 있는데, 이는 +공격자가 모델 가용성을 손상시키거나 잘못된 처리를 강제하거나 지시를 받을 때 데이터를 유 +출할 수 있도록 TROJANS를 삽입하여 사전 훈련된 모델을 악의적으로 수정할 수 있는 기회를 제 +공함 +이 보고서는 「NIST AI 위험 관리 프레임워크」에서 ML 시스템의 보안, 회복성 및 견고성 개념을 채택 +함. 보안, 회복성 및 견고성은 위험에 의해 측정되며, 위험은 엔터티(예컨대, 시스템)가 잠재적인 상황 +이나 이벤트(예: 공격)에 의해 위협받는 정도와 그러한 이벤트가 발생할 경우 결과의 심각성을 측정하 +는 것임 +●이 보고서는 적대적 머신 러닝(AML)과 관련된 위험을 식별, 해결 및 관리하는 데 중점을 두고 있으며, +다음을 개발하기 위한 지침을 제공함 +- ML 및 사이버 보안 커뮤니티에서 사용할 AML의 표준화된 용어 +- PredAI 시스템에 대한 회피, 포이즈닝 및 프라이버시 공격 대응 +- GenAI 시스템에 대한 회피, 포이즈닝, 개인정보 보호 및 남용(abuse) 공격대응 +- 여러 데이터 모달리티(modalities)에 걸친 모든 실행 가능한 학습 방법(예: 지도, 비지도, 반지 +도 학습, 연합 학습, 강화 학습)에 대한 공격과 기존 완화책 기법의 한계에 대한 논의 +2.2 +예측 AI 분류 +공격 분류 +●(학습 단계) 머신 러닝은 모델을 학습하는 Training Stage와 예측을 생성하기 위해 레이블이 지정되지 +않은 새 데이터 샘플에 모델을 배포하는 Deployment Stage 구성. Supervised Learning의 경우 +레이블이 지정된 학습 데이터가 학습 단계에서 학습 알고리즘에 입력으로 제공되고 ML 모델은 특 +정 손실 함수를 최소화하도록 최적화됨. ML 모델의 검증 및 테스트는 일반적으로 모델이 실제 세계에 +배포되기 전에 수행되며, 지도 학습 기술에는 예측 레이블 또는 클래스가 불연속형인 Classification과 예측 +레이블 또는 응답 변수가 연속형인 Regression이 포함됨 + + +![이미지 174-0](images/p0174_img0.png) + + +![이미지 174-1](images/p0174_img1.png) + + +![이미지 174-2](images/p0174_img2.png) + + +![이미지 174-3](images/p0174_img3.png) + + +![이미지 174-4](images/p0174_img4.png) + + +![이미지 174-5](images/p0174_img5.png) + + +--- + +부록 +- 학습 시간 공격(Training-time attacks) : ML 학습 단계 동안의 공격을 Poisoning Attacks라 +고 함 +Data Poisoning 공격 +Model Poisoning 공격 +공격자는 학습 샘플을 삽입하거나 수정하여 학습 데이터 +의 하위 집합을 제어 +공격자는 모델과 해당 매개변수를 제어 +모든 학습 패러다임에 적용 가능 +클라이언트가 로컬 모델 업데이트를 집계 서버로 보내는 +연합 학습과 모델 기술 공급업체가 모델에 악성 코드를 +추가할 수 있는 공급망 공격에서 가장 흔히 발생 +- 배포 시간 공격(Deployment-time attacks) : 회피 공격은 테스트 샘플을 수정하여 적대적 사 +례를 생성하고, 멤버십 추론 및 데이터 재구성과 같은 프라이버시 공격은 일반적으로 ML 모델 +에 대한 쿼리 액세스 권한이 있는 공격자가 마운트함 +●(공격자의 목표 및 목적) 공격자 목표는 가용성・무결성・기밀성에 따라 세 가지로 분류 +- 가용성 침해(Availability Breakdown) : 가용성 공격은 공격자가 배포 시점에 모델의 성능을 분 +석하려고 시도하는 ML에 대한 무차별 공격이며, 공격자가 학습 세트의 일부를 제어할 때 데이 +터 포이즈닝을 통해 마운트될 수 있음 +- 무결성 침해(Integrity Violations) : 무결성 공격은 ML 모델 출력의 무결성을 표적으로 삼아 ML 모델 +이 잘못된 예측을 수행하게 함. 공격자는 배포 시 회피 공격을 마운트하거나 학습 시 포이즌 공격을 마 +운트하여 무결성 위반을 일으킬 수 있음 +포이즈닝을 통한 무결성 공격 +Targeted Poisoning 공격 +몇몇 타겟 샘플의 무결성을 침해하려 하며 공격자가 포이즈닝된 샘플을 삽입하기 +위한 훈련 데이터 제어를 가지고 있다고 가정함 +Backdoor Poisoning 공격 +포이즈닝된 샘플과 테스트 샘플에 모두 추가되어 오분류를 유발하는 Backdoor +Pattern을 생성해야 함 +Model Poisoning 공격 +타겟 또는 Backdoor 공격으로 이어질 수 있으며 공격자는 무결성 위반을 유발하 +기 위해 모델 매개변수를 수정함. 이들은 중앙 집중식 학습과 연합 학습을 위해 +설계되었음 +- 개인정보 침해(Privacy Compromise) : 공격자는 훈련 데이터(Data Privacy 공격으로 이어 +짐) 또는 ML 모델(Model Privacy 공격으로 이어짐)에 대한 정보를 알아내는 데 관심이 있을 +수 있음 + + +![이미지 175-0](images/p0175_img0.png) + + +![이미지 175-1](images/p0175_img1.png) + + +![이미지 175-2](images/p0175_img2.png) + + +![이미지 175-3](images/p0175_img3.png) + + +--- + +●(공격자의 역할) 공격자는 다음의 6가지 유형의 역량을 사용할 수 있음 +훈련 데이터 +제어 +공격자는 훈련 샘플을 삽입하거나 수정하여 훈련 데이터의 하위 집합을 제어할 수 있음. 이 +역량은 데이터 포이즈닝 공격(예: 가용성 포이즈닝, 타겟팅 또는 백도어 포이즈닝)에 사용됨 +모델 제어 +공격자는 트로이 목마 트리거를 생성하여 모델에 삽입하거나 연합 학습에서 악의적인 로컬 모 +델 업데이트를 보내 모델 매개변수를 제어할 수 있음 +테스트 데이터 +제어 +공격자는 이를 활용하여 모델 배포 시 테스트 샘플에 교란을 추가할 수 있으며, 이는 회피 공 +격에서 적대적 예를 생성하거나 백도어 포이즈닝 공격에서 수행하는 것과 같음 +레이블 제한 +이 기능은 감독 학습에서 학습 샘플의 레이블에 대한 적대적 제어를 제한하는 데 적합함. 클 +린 레이블 포이즈닝 공격은 공격자가 포이즈닝된 샘플의 레이블을 제어하지 않는다고 가정함 +소스 코드 제어 +공격자는 난수 생성기나 종종 오픈 소스인 타사 라이브러리와 같은 ML 알고리즘의 소스 코드 +를 수정할 수 있음 +쿼리 액세스 +ML 모델이 클라우드 공급자(Machine Learning as a Service - MLaaS 사용)에 의해 관리되 +는 경우 공격자는 모델에 쿼리를 제출하고 예측(레이블 또는 모델 신뢰도)을 받을 수 있음 +●(공격자 지식) 화이트박스, 블랙박스, 그레이박스의 세 가지 주요 유형이 있음 +화이트박스 공격 +공격자가 훈련 데이터, 모델 아키텍처, 모델 하이퍼 매개변수를 포함하여 ML 시스템에 대한 +모든 지식을 가지고 운영한다고 가정함 +블랙박스 공격 +ML 시스템에 대한 최소한의 지식이 있다고 가정함. 공격자는 모델에 대한 쿼리 액세스를 얻 +을 수 있지만 모델이 어떻게 훈련되는지에 대한 다른 정보는 없음. 이러한 공격은 공격자가 +AI 시스템에 대한 지식이 없다고 가정하고 일반적으로 사용할 수 있는 시스템 인터페이스를 +활용하기 때문에 가장 일반적임 +그레이박스 공격 +블랙박스와 화이트박스 공격 사이의 적대적 지식을 포착 +●(데이터 모달리티) 최근까지 대부분의 공격과 방어는 단일 모달리티에서 작동했지만 새로운 ML 추세는 +다중 모달(multimodal) 데이터를 사용하는 것임. 적대적 ML 문헌에서 가장 일반적인 데이터 모달리티는 +다음과 같음 +이미지 +이미지 데이터 모달리티의 적대적 예는 그래디언트(gradient) 기반 방법을 직접 적용할 수 있음 +텍스트 +자연어 처리(NLP)는 인기 있는 모달리티이며 회피, 포이즈닝, 프라이버시를 포함한 모든 종류 +의 공격이 NLP 애플리케이션에 적용되었음 +오디오 +오디오 시스템과 오디오 신호에서 생성된 텍스트도 공격을 받았음 +비디오 +비디오 이해 모델은 시각 및 언어 작업에서 점점 더 많은 기능을 보여주었지만 이러한 모델도 +공격에 취약함 +사이버 보안2 +최초의 포이즈닝 공격은 웜 서명 생성 및 스팸 이메일 분류를 위한 사이버 보안에서 발견되었음 +표 형식 데이터 +금융, 비즈니스 및 의료 애플리케이션에서 표 형식 데이터를 사용하는 ML 모델에 대한 수많 +은 공격이 입증되었음 + + +![이미지 176-0](images/p0176_img0.png) + + +![이미지 176-1](images/p0176_img1.png) + + +![이미지 176-2](images/p0176_img2.png) + + +![이미지 176-3](images/p0176_img3.png) + + +--- + +부록 +회피 공격과 완화책(Evasion Attacks and Mitigations) +●(화이트박스 회피 공격) 원래 테스트 샘플에서 가까운 거리에 적대적 사례를 생성하는 회피 공격을 설 +계하기 위한 여러 가지 최적화 기반 방법이 있음. 또한 거리 측정법, 범용 회피 공격 및 물리적으로 실현 +가능한 공격에 대한 여러 가지 선택 사항과 NLP, 오디오, 비디오 및 사이버 보안 도메인을 포함한 여러 +데이터 모달리티에 대해 개발된 회피 공격이 있음 +●(블랙박스 회피 공격) 공격자가 모델 아키텍처나 학습 데이터에 대한 사전 지식이 없는 현실적인 적 +대적 모델에 따라 설계됨. 대신, 적대자는 다양한 데이터 샘플에서 쿼리를 실행하고 모델의 예측을 +얻어 학습된 ML 모델과 상호 작용할 수 있음 +- 블랙박스 설정에서 적대적 사례를 만드는 데 있어 가장 큰 과제는 ML 모델에 대한 쿼리 수를 +줄이는 것임. 최근 기술은 일반적으로 1,000개 미만인 비교적 적은 수의 쿼리로 ML 분류기를 +성공적으로 회피할 수 있음 +●(공격의 이전 가능성) 적대적 공격을 생성하는 또 다른 방법은 다른 ML 모델에서 만들어진 공격 +의 이전 가능성을 통한 것임. 일반적으로 공격자는 대체 ML 모델을 훈련하고 대체 모델에서 화이트박 +스 적대적 공격을 생성한 다음, 공격을 대상 모델로 이전함 +●(완화책) 적대적 회피 공격에 대한 주요 방어책은 다음 세 가지가 있음 +적대적 훈련 +올바른 레이블을 사용하여 훈련 중에 반복적으로 생성된 적대적 예제로 훈련 데이터를 증강하 +는 일반적인 방법임. 적대적 예제를 생성하기 위한 적대적 공격이 강할수록 훈련된 모델의 회 +복성이 높아짐. 하지만 이러한 이점은 일반적으로 깨끗한 데이터에 대한 모델 정확도가 감소 +하는 결과를 초래함. 또한 적대적 훈련은 훈련 중에 적대적 예제를 반복적으로 생성하기 때문 +에 비용이 많이 발생함 +무작위 평활화 +가우시안(Gaussian) 노이즈 교란에서 가장 가능성 있는 예측을 생성하여 모든 분류기를 인증 +가능한 견고한 평활화 분류기로 변환하는 방법임. 무작위 평활화는 일반적으로 테스트 샘플 +하위 집합에 대한 인증된 예측을 제공함 +공식 검증 +신경망의 적대적 견고성을 인증하는 또 다른 방법은 공식 방법의 기술을 기반으로 검증하는 +것임. 공식 검증 기술은 신경망 견고성을 인증하는 데 상당한 잠재력이 있지만 주요 한계는 +확장성 부족, 계산 비용 및 지원되는 작업 유형의 제한임 +포이즈닝 공격과 완화책 (Poisoning Attacks and Mitigations) +●포이즈닝 공격은 매우 강력하며 가용성 위반이나 무결성 침해를 일으킬 수 있음 +- 가용성 포이즈닝 공격은 모든 샘플에서 머신 러닝 모델을 무차별적으로 저하시키는 반면, 타겟 +팅 및 백도어 포이즈닝 공격은 더 은밀하고 소수의 타겟 샘플에서 무결성 침해를 유발함 +- 포이즈닝 공격은 데이터 포이즈닝, 모델 포이즈닝, 레이블 제어, 소스 코드 제어 및 테스트 데이 +터 제어와 같은 광범위한 적대적 역량을 활용하여 여러 하위 범주의 포이즈닝 공격을 생성함 + + +![이미지 177-0](images/p0177_img0.png) + + +![이미지 177-1](images/p0177_img1.png) + + +![이미지 177-2](images/p0177_img2.png) + + +![이미지 177-3](images/p0177_img3.png) + + +![이미지 177-4](images/p0177_img4.png) + + +--- + +●(가용성 중독) 간단한 블랙박스 포이즈닝 공격 전략은 레이블 플립핑(Label Flipping)으로, 공격자가 +선택한 피해자 레이블로 교육 예제를 생성함. 이 방법은 가용성 공격을 마운트하기 위해 많은 비율의 +포이즈닝 샘플이 필요함 +- 지도 학습을 위한 현실적인 위협 모델은 적대자가 학습 예제만 제어할 수 있고 레이블은 제어할 +수 없는 클린 레이블 포이즈닝 공격임. 이 사례는 악성 코드 분류에서 공격자가 바이너리 파일 +을 위협 인텔리전스 플랫폼에 제공할 수 있고 레이블링이 바이러스 백신 서명 또는 기타 외부 +방법을 사용하여 수행되는 것처럼 레이블링 프로세스가 학습 알고리즘 외부에 있는 시나리오를 +모델링함 +- 클린 레이블 가용성 공격은 생성 모델을 학습하고 학습 샘플에 노이즈를 추가하여 적대적 목적 +을 극대화함으로써 신경망 분류기에 도입되었음 +- 가용성 포이즈닝 공격은 중심 기반 이상 탐지 및 맬웨어에 대한 행동 클러스터링에 대한 비지도 +학습을 위해 설계되었음. 연합 학습에서 공격자는 전역적으로 학습된 모델에서 가용성 위반을 +유도하기 위해 모델 포이즈닝 공격을 마운트할 수 있음 +- (완화책) 기존 완화책 중에서 일반적으로 유망한 기술은 다음과 같음 +▸(학습 데이터 정제) 기계 학습 교육을 수행하기 전에 교육 세트를 정리하고 중독된 샘플을 제 +거하도록 설계됨 +▸(견고한 훈련) ML 훈련 알고리즘을 수정하고 일반 훈련 대신 견고한 훈련을 수행하는 것임 +●(대상 포이즈닝) 소수의 대상 샘플에 대한 ML 모델의 예측을 변경함 +●(백도어 포이즈닝) 더 정교하고 은밀해져서 탐지하고 완화하기가 더 어려워졌음 +- 잠재적 백도어 공격은 깨끗한 데이터를 사용하여 마지막 몇 개의 레이어에 대한 모델 fine-tuning +에도 살아남도록 설계되었음 +- 백도어 생성 네트워크(Backdoor Generating Network, BaN)는 트리거의 위치가 중독된 샘플 +에서 변경되어 모델이 위치 불변 방식으로 트리거를 학습하는 동적 백도어 공격임 +- 기능적 트리거, 즉 기능적 공격은 이미지 전체에 내장되거나 입력에 따라 변경됨. +- (완화책) 학습 데이터 정리, 트리거 재구성, 모델 검사 및 정제 등이 있음 +●(모델 포이즈닝) 학습된 ML 모델을 직접 수정하여 모델에 악성 기능을 주입하려고 시도함. 대부분 +의 모델 포이즈닝 공격은 클라이언트가 로컬 모델 업데이트를 전역모델(Global Model)로 집계하 +는 서버로 보내는 연합 학습 설정에서 설계되었음. 모델 포이즈닝 공격은 연합 모델에서 가용성 및 +무결성 위반을 모두 일으킬 수 있음. 또한, 공급업체가 제공한 모델 또는 모델의 구성 요소가 악성 +코드로 포이즈닝되는 공급망 시나리오에서도 가능함 +- (완화책) 공격자가 훈련 알고리즘의 소스 코드나 ML 하이퍼파라미터를 제어할 수 있는 공급망 +공격을 완화하는 것은 여전히 어려움 + + +![이미지 178-0](images/p0178_img0.png) + + +![이미지 178-1](images/p0178_img1.png) + + +![이미지 178-2](images/p0178_img2.png) + + +![이미지 178-3](images/p0178_img3.png) + + +--- + +부록 +프라이버시 침해 공격 +●(데이터 재구성) 공개된 집계 정보에서 개인의 데이터를 복구할 수 있기 때문에 가장 우려되는 프 +라이버시 침해 공격임 +●(멤버쉽 추론) 개인에 대한 비공개 정보를 노출하며, 사용자 데이터로 훈련된 집계 정보 또는 ML 모 +델을 공개할 때 여전히 큰 우려 사항임. 특정 상황에서 개인이 훈련 세트의 일부인지 확인하는 것은 +이미 개인정보 침해를 초래함(예: 희귀 질환 환자에 대한 의학적 연구 또한 멤버십 추론은 데이터 +추출 공격을 위한 빌딩 블록으로 사용될 수 있음). 멤버십 추론에서 공격자의 목표는 특정 기록 +또는 데이터 샘플이 통계 또는 ML 알고리즘에 사용된 훈련 데이터 세트의 일부인지 여부를 확인 +하는 것임 +●(모델 추출) MLaaS 시나리오에서 클라우드 제공자는 일반적으로 독점 데이터를 사용하여 대규모 +ML 모델을 학습하고 모델 아키텍처와 매개변수를 기밀로 유지하고자 함. 모델 추출 공격을 수행하 +는 공격자의 목표는 MLaaS 제공자가 학습한 ML 모델에 쿼리를 제출하여 모델 아키텍처와 매개 +변수에 대한 정보를 추출하는 것임 +●(속성 추론) 공격자는 ML 모델과 상호 작용하여 학습 데이터 분포에 대한 전역 정보를 알아내려고 +함. 예를 들어, 공격자는 인구 통계 정보와 같이 특정 민감한 속성이 있는 학습 세트의 일부를 결정 +할 수 있으며, 이는 공개할 의도가 없는 학습 세트에 대해 잠재적으로 기밀 정보를 드러낼 수 있음 +●(완화책) 차등 개인정보 보호(DP)는 알고리즘 출력에 액세스할 수 있는 공격자가 데이터 세트의 각 +개별 레코드에 대해 얼마나 많이 알 수 있는지에 대한 제한을 보장하는 매우 강력한 수단임 +- DP는 멤버십 추론 및 데이터 재구성 공격으로부터 보호하는 엄격한 프라이버시 개념을 제공함. +프라이버시와 유용성 간의 최상의 균형을 달성하기 위해 개인 학습 알고리즘의 이론적 분석을 +보완하기 위해 경험적 프라이버시 감사가 권장됨 +- 모델 추출에 대한 다른 완화 기술로는 사용자 질의를 모델로 제한하거나, 모델에 대한 의심스러 +운 질의를 감지하거나, 사이드 채널 공격을 방지하기 위한 보다 강력한 아키텍처를 만드는 것이 +있음. 그러나 이러한 기술은 동기가 부여되고 자원이 풍부한 공격자가 우회할 수 있으므로 주의 +해서 사용해야 함 + + +![이미지 179-0](images/p0179_img0.png) + + +![이미지 179-1](images/p0179_img1.png) + + +![이미지 179-2](images/p0179_img2.png) + + +![이미지 179-3](images/p0179_img3.png) + + +![이미지 179-4](images/p0179_img4.png) + + +--- + +2.3 +생성 AI 분류 +공격 분류 +●(GenAI 학습 단계) 모델과 학습 세트의 크기로 인해 GenAI 모델 개발의 주요 패턴은 데이터 수 +집, 레이블 지정, 모델 학습, 모델 검증 및 모델 배포의 전체 프로세스가 단일 조직에서 단일 파이프 +라인으로 수행되는 이전 프로세스에서 벗어났음. 기초 모델은 비지도 학습을 많이 사용하는 사전 +학습 단계에서 생성됨. 기초 모델은 다운스트림 작업에 유용한 패턴(예: 텍스트, 이미지 등)을 인코 +딩하고, 그런 다음 기초 모델 자체가 fine-tuning을 통해 작업별 애플리케이션을 만드는 기반이 됨. +많은 경우 애플리케이션 개발자는 타사가 개발한 기초 모델로 시작하여 특정 애플리케이션에 맞게 +fine-tuning함 +- (학습 시간 공격) GenAI의 학습 단계는 기초 모델 사전 학습과 모델 미세 조정의 두 가지 단계 +로 구성됨. 이 패턴은 생성 이미지 모델, 텍스트 모델, 오디오 모델 및 멀티모달 모델 등에 존재 +함. 기초 모델은 대규모 데이터 세트에서 학습할 때 가장 효과적이므로 광범위한 공개 소스에서 +데이터를 스크래핑하는 것이 일반적임. 이로 인해 기초 모델은 특히 공격자가 학습 데이터의 하 +위 집합을 제어하는 포이즈닝 공격에 취약해짐 +- (추론 시간 공격) GenAI의 배포 단계는 PredAI와는 다르며, 배포 중에 모델을 사용하는 방법은 +애플리케이션에 따라 다름. 그러나 LLM 및 RAG 애플리케이션의 많은 보안 취약성의 근간은 +데이터와 지침이 LLM에 별도의 채널로 제공되지 않는다는 사실임. 이를 통해 공격자는 데이터 +채널을 사용하여 수십 년 된 SQL 주입과 유사한 추론 시간 공격을 수행할 수 있음. 특히 질문 +과 답변 및 텍스트 요약 작업에 대한 LLM에 대한 특별한 강조점을 인정하면서 이 단계의 많은 +공격은 텍스트 기반 생성 모델 응용 프로그램에 공통적인 다음과 같은 관행으로 인해 발생함 +모델 지침을 통한 +정렬 +LLM 동작은 모델의 입력 및 컨텍스트에 미리 추가된 지침을 통해 추론 시간에 정렬됨. 이러 +한 지침은 모델의 애플리케이션별 사용 사례에 대한 자연어 설명(예: “당신은 우아하고 간결하 +게 응답하는 유용한 재정 지원자입니다...”)으로 구성됨 +컨텍스트적 +few-shot 학습 +모델 컨텍스트에서 애플리케이션에 예상되는 입・출력의 예를 제공하면 애플리케이션에서의 +성능을 개선할 수 있음. 이를 통해 모델은 자기 회귀 작업을 보다 자연스럽게 완료할 수 있음 +타사 소스에서 +런타임 데이터 수집 +Retrieval Augmented Generation 애플리케이션에서 컨텍스트는 쿼리에 따라 런타임이 만 +들어지고 애플리케이션의 일부로 요약될 외부 데이터 소스(예: 문서, 웹 페이지 등)에서 채워 +짐. 간접 프롬프트 주입 공격은 공격자가 사용자가 직접 수집하지 않더라도 시스템에서 수집 +한 외부 정보 소스를 사용하여 컨텍스트를 수정할 수 있는 능력에 달려 있음 +출력 처리 +LLM의 출력은 웹 페이지의 요소를 채우거나 명령을 구성하는 데 사용될 수 있음 +●(공격자 목표 및 목적) PredAI와 마찬가지로 공격자 목표는 가용성, 무결성 및 프라이버시의 차원 +에 따라 광범위하게 분류할 수 있음. 그러나 GenAI에 특정한 네 번째 공격자 목표인 남용이 있음. +남용 위반은 공격자가 GenAI 시스템의 의도된 용도를 재활용하여 자신의 목표를 달성할 때 발생함 + + +![이미지 180-0](images/p0180_img0.png) + + +![이미지 180-1](images/p0180_img1.png) + + +![이미지 180-2](images/p0180_img2.png) + + +![이미지 180-3](images/p0180_img3.png) + + +![이미지 180-4](images/p0180_img4.png) + + +--- + +부록 +- 공격자는 GenAI 모델의 기능을 사용하여 증오 표현이나 차별을 조장하고, 특정 그룹에 대한 폭 +력을 부추기는 미디어를 생성하거나, 사이버 공격을 가능하게 하는 이미지, 텍스트 또는 악성 코 +드를 생성하여 공격적인 사이버 보안 작업을 확장할 수 있음 +●(공격자 기능) GenAI 공격자 목표를 실현하는 새로운 공격자 기능은 다음과 같음 +학습 데이터 +제어 +공격자는 학습 샘플을 삽입하거나 수정하여 학습 데이터의 하위 집합을 제어할 수 있으며, 이 +기능은 데이터 포이즈닝 공격에 사용됨 +쿼리 액세스 +많은 GenAI 모델과 해당 애플리케이션(예: 검색 증강 생성)은 API 키를 통해 액세스가 제어 +되는 클라우드 호스팅 서비스로 배포됨. 이 경우 공격자는 모델에 쿼리를 제출하여 출력을 받 +을 수 있음. GenAI에서 공격자가 조정한 입력을 제출하는 목적은 모델에서 특정 동작을 유도 +하는 것임. 이 기능은 즉시 주입, 즉시 추출 및 모델 도용 공격에 사용됨 +소스 코드 제어 +공격자는 난수 생성기 또는 종종 오픈 소스인 타사 라이브러리와 같은 ML 알고리즘의 소스 +코드를 수정할 수 있음. 오픈소스 모델 저장소의 등장으로 공격자는 악성 모델을 만들거나 악 +성 코드를 역직렬화 형식에 내장하여 양성 모델을 래핑할 수 있음 +리소스 제어 +공격자는 런타임에 GenAI 모델이 수집할 리소스(예: 문서, 웹 페이지)를 수정할 수 있음. 이 +기능은 간접 프롬프트 주입 공격에 사용됨 +(AI 공급망 공격 및 완화책) ML에 대한 실제 보안 취약성에 대한 연구에 따르면 보안은 소프트웨어, 데 +이터 및 모델 공급망, 네트워크 및 스토리지 시스템을 포함하여 포괄적으로 해결하는 것이 가장 좋음. +그러나 많은 실제 GenAI 작업은 일반적으로 기존 사이버 보안 범위를 벗어난 오픈소스 모델이나 데이 +터로 시작됨 +●(역직렬화 취약성) 많은 ML 프로젝트는 다운스트림 애플리케이션에서 사용하기 위해 오픈소스 +GenAI 모델을 다운로드하는 것으로 시작함. 대부분의 경우 이러한 모델은 pickle, pytorch, +joblib, numpy 또는 tensorflow 형식으로 지속되는 아티팩트로 존재함. 이러한 각 형식은 직렬화 +지속성 메커니즘을 허용하여 직렬화 해제 시 임의 코드 실행(ACE)을 허용함. 직렬화를 통한 ACE는 +일반적으로 심각한 취약성으로 분류됨 +●(포이즈닝 공격) GenAI 텍스트-이미지 및 언어 모델의 성능은 모델 크기와 데이터 세트 크기 및 품 +질에 따라 확장됨. 따라서 GenAI 기반 모델 개발자가 더 광범위한 큐레이션되지 않은 소스에서 데이 +터를 스크래핑하는 것이 일반적임. 데이터 세트 게시자는 데이터 세트를 구성하는 URL 목록만 제공 +하며 해당 URL을 제공하는 도메인은 만료되거나 구매될 수 있으며 공격자가 리소스를 교체할 수 +있음. PredAI 모델과 마찬가지로 이는 Targeted Poisoning Attacks, Backdoor Poisoning +Attacks 및 Model Poisoning으로 이어질 수 있음 +- 간단한 완화책은 데이터 세트가 다운로더가 검증할 수 있는 콘텐츠의 URL과 암호화 해시를 모 +두 나열하는 것이나, 이 기술은 인터넷의 일부 대규모 분산 데이터 세트에 잘 확장되지 않을 수 +있음 + + +![이미지 181-0](images/p0181_img0.png) + + +![이미지 181-1](images/p0181_img1.png) + + +![이미지 181-2](images/p0181_img2.png) + + +![이미지 181-3](images/p0181_img3.png) + + +![이미지 181-4](images/p0181_img4.png) + + +--- + +●(완화책) AI 공급망 공격은 공급망 보증 관행을 통해 완화할 수 있음. 모델 파일 종속성의 경우 여 +기에는 ML 파이프라인에서 사용되는 모델 아티팩트의 정기적인 취약성 검사와 safetensor와 같 +은 안전한 모델 지속성 형식을 채택하는 것이 포함됨 +- 웹 스케일 데이터 종속성의 경우에는 암호화 해시를 게시(제공자)하여 웹 다운로드를 확인하고, +도메인 하이재킹이 새로운 데이터 소스를 학습 데이터 세트에 주입하지 않았는지 확인하기 위한 +기본 무결성 검사로 학습 데이터를 확인(다운로더)하는 것이 포함됨. 대규모 확산 모델에 의한 악 +의적인 이미지 편집과 관련된 위험을 완화하는 또 다른 접근 방식은 이러한 모델에 의한 조작에 +저항하도록 이미지에 면역을 부여하는 것임 +(직접 프롬프트 주입 공격 및 완화책) 직접 프롬프트 주입은 사용자가 LLM의 동작을 변경하려는 텍스 +트를 주입할 때 발생함 +●(공격자 목표) 공격자는 다음과 같이 프롬프트 주입을 통해 다양한 목표를 가질 수 있음 +- (남용) 공격자는 직접적인 프롬프트 주입을 사용하여 보호 장치를 우회하여 잘못된 정보, 선전, +해로운 콘텐츠, 성적 콘텐츠, 맬웨어(코드) 또는 피싱 콘텐츠를 생산 +- (개인정보 침해) 공격자는 시스템 프롬프트를 추출하거나 컨텍스트에서 모델에 제공된 개인정보 +를 사용자가 필터링 없이 액세스할 수 있도록 시도 +●(공격자 기술) LLM을 탈옥하기 위한 수동 방법은 일반적으로 경쟁 목표와 불일치하는 일반화의 두 +가지로 분류됨. 이러한 방법은 종종 특정 언어 조작에 대한 모델의 취약성을 이용하고 기존의 적대적 입 +력을 넘어 확장됨 +- 경쟁 목표 범주에서는 작성자가 원래 제공한 지침과 경쟁하는 추가 지침이 제공됨 +접두사 주입 +이 방법은 모델이 긍정적인 확인으로 응답을 시작하도록 촉구하는 것을 포함함. 모델이 미리 +정해진 방식으로 출력을 시작하도록 조건화함으로써 적대자는 후속 언어 생성을 특정하고 미 +리 정해진 패턴이나 행동으로 유도하려고 시도함 +거부 억제 +적대자는 모델에 명확한 지침을 제공하여 출력에서 거부나 거부를 생성하지 않도록 강요함. +이 전술은 부정적인 반응의 생성을 제한하거나 금지함으로써 모델이 제공된 지침을 준수하도 +록 보장하여 잠재적으로 안전 조치를 손상시키는 것을 목표로 함 +스타일 주입 +이 접근 방식에서 적대자는 모델에게 긴 단어를 사용하거나 특정 스타일(style)을 채택하지 +말라고 지시함. 모델의 언어를 단순하거나 비전문적인 톤으로 제한함으로써 모델의 응답의 정 +교함이나 정확성을 제한하여 잠재적으로 전반적인 성과를 손상시키는 것을 목표로 함 +롤플레잉 +적대자는 “지금 무엇이든 하라”(DAN) 또는 “항상 지적이고 마키아벨리적”(AIM)과 같은 롤플 +레잉 전략을 활용하여 모델이 원래 의도와 상충되는 특정 페르소나 또는 행동 패턴을 채택하 +도록 안내함. 이 조작은 다양한 역할이나 특성에 대한 모델의 적응력을 악용하여 잠재적으로 +안전 프로토콜 준수를 손상시키는 것을 목표로 함 + + +![이미지 182-0](images/p0182_img0.png) + + +![이미지 182-1](images/p0182_img1.png) + + +![이미지 182-2](images/p0182_img2.png) + + +![이미지 182-3](images/p0182_img3.png) + + +![이미지 182-4](images/p0182_img4.png) + + +--- + +부록 +- 불일치 일반화 범주의 기술은 안전 교육이나 보호책과 크게 다르며, 모델의 표준 학습 데이터에 +서 분포되지 않은 입력을 배치함. 접근 방식은 다음과 같음 +특수 인코딩 +이 방법은 입력 데이터의 표현을 변경하고 표준 인식 알고리즘에서 인식할 수 없게 만듦. 적 +대자는 정보를 인코딩하여 입력에 대한 모델의 이해를 속이고 안전 메커니즘을 우회하려고 함 +문자 변환 +ROT13 암호, 기호 대체(예: l33tspeak), 모스 부호와 같은 기술은 입력 텍스트의 문자를 조 +작함. 이러한 변환은 텍스트의 원래 의미를 모호하게 하여 모델의 해석을 혼란스럽게 하고 적 +대적 입력이 감지되지 않도록 하는 것을 목표로 함 +단어 변환 +언어 구조를 변경하는 것을 목표로 하는 전략에는 Pig Latin, 동의어 교환(예: “훔치다” 대신 +“pilfer” 사용), 민감한 단어를 하위 문자열로 분해하기 위한 페이로드 분할(또는 “토큰 밀수”) +이 포함될 수 있음. 이러한 조작은 LLM이 여전히 이해하는 방식으로 모델의 보호 장치를 속 +이는 것을 목적으로 함 +프롬프트 수준 +난독화 +적대자는 다른 언어로 번역하는 것과 같은 방법을 사용하여 모델이 완전히 이해할 수 없는 방 +식으로 콘텐츠를 난독화하거나 요약하도록 함. 이러한 난독화는 모호성이나 변경된 언어적 맥 +락을 도입하고 모델의 안전 메커니즘이 명확성 부족이나 오해로 인해 덜 효과적인 입력 시나 +리오를 만듦 +●(데이터 추출) GenAI 모델은 독점적이거나 민감한 정보를 포함할 수 있는 데이터에서 학습함. +GenAI 애플리케이션은 신중하게 제작된 프롬프트로 계측되거나 RAG와 마찬가지로 요약 또는 기 +타 작업 완료를 위해 컨텍스트에서 민감한 정보가 제공될 수 있음 +●(완화책) 모든 공격자 기술에 대한 완전한 면역성은 없지만 일정 수준의 보호를 제공하는 신속한 +주입을 위한 다양한 방어 전략이 제안됨 +정렬을 위한 교육 +모델 제공자는 더 엄격한 전방 정렬로 학습하여 내장 메커니즘을 계속 생성함. 예를 들어, 모 +델 정렬은 신중하게 큐레이팅되고 사전 정렬된 데이터 세트에서 학습하여 조정할 수 있음. 그 +런 다음 인간의 피드백을 통해 강화 학습을 통해 반복적으로 개선할 수 있음 +신속한 지시 및 +서식 지정 기술 +LLM 지시는 모델이 사용자 입력을 신중하게 처리하도록 신호를 보낼 수 있음. 예를 들어, 특 +정 지시를 프롬프트에 추가하면 모델은 탈옥을 구성할 수 있는 후속 콘텐츠에 대해 알 수 있 +음. 프롬프트 앞에 사용자 입력을 배치하면 지시를 따르는 최근성 편향을 활용할 수 있음. 프 +롬프트를 임의의 문자나 특수 HTML 태그로 캡슐화하면 모델에 시스템 지시와 사용자 프롬프 +트를 구성하는 것에 대한 신호를 제공함 +탐지 기술 +모델 제공자는 특별히 제작된 벤치마크 데이터 세트 또는 보호된 LLM의 입력과 출력을 모니 +터링하는 필터에 대한 평가를 통해 더 엄격한 역방향 정렬로 학습하여 내장 메커니즘을 계속 +생성함 + + +![이미지 183-0](images/p0183_img0.png) + + +![이미지 183-1](images/p0183_img1.png) + + +![이미지 183-2](images/p0183_img2.png) + + +![이미지 183-3](images/p0183_img3.png) + + +--- + +(간접 프롬프트 주입 공격 및 완화책) 간접 프롬프트 주입 공격은 리소스 제어를 통해 활성화되므로 +공격자는 RAG 애플리케이션과 직접 상호 작용하지 않고도 간접적으로(또는 원격으로) 시스템 프롬프 +트를 주입할 수 있음 +●간접적인 프롬프트 주입 공격은 공격자 목표의 네 가지 범주에 걸쳐 위반을 초래할 수 있음: ① 가 +용성 위반, ② 무결성 위반, ③ 개인정보 침해, ④ 남용 위반 +- (가용성 위반) 모델 가용성 위반은 공격자가 악의적으로 제작된 입력으로 모델을 프롬프트하여 +계산량을 증가시키거나 시스템에 많은 수의 입력을 가하여 사용자에게 서비스를 거부함으로써 +발생할 수 있는 서비스 중단임 +▸서비스 거부 공격은 모델을 무차별적으로 사용할 수 없게 만들거나(예: 유용한 출력 생성 실 +패), 특정 기능(예: 특정 API)을 구체적으로 차단할 수 있음. +▸(공격자 기술) 간접 프롬프트 주입을 통해 상업용 RAG 서비스에 대한 다음과 같은 공격이 가 +능함 +시간 소모적인 +백그라운드 작업 +프롬프트는 모델에 요청에 응답하기 전에 시간 소모적인 작업을 수행하도록 지시함. 프롬프트 +자체는 간단할 수 있으며 모델을 평가할 때 반복 동작을 요청할 수 있음 +뮤팅 +이 공격은 사용자 요청 중간에 <|endoftext|> 토큰이 나타나면 모델이 문장을 마칠 수 없다 +는 사실을 악용함. 이 토큰으로 문장을 시작하라는 요청을 포함하면 예를 들어, 검색 에이전트 +는 생성된 텍스트 없이 반환함 +기능 억제 +이 공격에서 내장된 프롬프트는 모델에 특정 API(예: Bing Chat의 색 기능)를 사용할 수 없 +음을 지시함. 이렇게 하면 서비스의 핵심 구성 요소가 선택적으로 무장 해제됨 +입력 또는 +출력 방해 +이 공격에서 간접 프롬프트 주입은 모델에 검색된 텍스트의 문자를 동형 문자로 대체하도록 +지시하여 텍스트에 의존하는 API에 대한 호출을 방해하거나, 프롬프트는 모델에 쿼리 결과를 +손상시켜 쓸모없는 검색 또는 요약을 생성하도록 지시할 수 있음 +●(무결성 위반) GenAI 시스템을 신뢰할 수 없게 만드는 위협임. AI 챗봇은 온라인 허위 정보를 악 +화시켰으며, 이는 Microsoft의 Bing과 Google의 Bard가 서로의 허위 정보 출처를 영속시키는 +경향에서 알 수 있음. LLM이 신뢰할 수 있는 뉴스 및 정보 출처를 판단할 수 없는 것은 사실과 +다른 출력을 생성하는 데 악용될 수 있음 +- (공격자 기술) LLM의 주요 작업을 조작하여 무결성 공격이 가능함. 이는 악의적인 부수 작업을 +수행하는 보다 일반적인 간접 프롬프트 주입 공격과는 다름 +- (조작) 사전에 잘못된 출력을 선택하지 않으면 모델은 검색 결과의 잘못된 요약(즉, 임의로 잘못 +된 요약)을 제공하라는 메시지를 받음. 조작 공격은 모델에 잘못된 답변을 제공하도록 지시하고 +모델의 답변이 인용된 출처와 모순되는 주장을 하게 함 +※ 조작 공격(예시): ① (잘못된 요약) 모델은 문서, 이메일 또는 검색 쿼리에 대한 적대적으로 선택되거나 임의로 잘못 +된 요약을 생성하라는 메시지를 받을 수 있음. ② (허위 정보 전파) 검색 챗봇은 신뢰할 수 없는 뉴스 소스나 다른 +검색 챗봇의 출력에 의존하거나 이를 영속화하여 허위 정보를 전파하라는 메시지를 받을 수 있음 + + +![이미지 184-0](images/p0184_img0.png) + + +![이미지 184-1](images/p0184_img1.png) + + +![이미지 184-2](images/p0184_img2.png) + + +![이미지 184-3](images/p0184_img3.png) + + +![이미지 184-4](images/p0184_img4.png) + + +--- + +부록 +●(개인정보 침해) 간접 프롬프트 주입은 수많은 새로운 개인정보 침해와 우려를 야기함. 공격자의 +목표는 두 가지 주요 범주로 나눌 수 있음 +정보 수집 +특정 공격은 이러한 위험을 높일 수 있음. 예를 들어, 인간 참여 간접 프롬프트는 사용자 데이 +터(예: 개인정보, 자격증명)를 추출하거나 채팅 세션에서 상호작용하고 사용자에게 정보를 공 +개하도록 설득하거나 사이드 채널을 통해 채팅 기록을 유출하는 데 사용될 수 있음 +무단 공개 +모델은 일반적으로 시스템 인프라에 통합되어 승인되지 않은 공개나 개인 사용자 데이터에 대 +한 권한을 부여함. 악의적인 행위자는 다양한 방법(예: API 호출 실행, 악성 코드 자동 완성) +을 사용하여 백도어 공격을 활용하여 LLM 또는 시스템에 액세스할 수 있음 +- (공격자 기술) 데이터 도용 공격을 달성하기 위해 사용한 몇 가지 공격 기술 +인간 참여 간접 +프롬프트 +읽기 작업(예: 공격자에게 요청을 하는 검색 쿼리 트리거 또는 URL 직접 검색)을 악용하여 +공격자에게 정보를 전송 +채팅 세션에서 +상호 작용 +이 모델은 공격자가 사용자 이름을 삽입하는 URL을 따르도록 사용자를 설득 +보이지 않는 +마크다운 이미지 +프롬프트 주입은 채팅봇 답변을 보이지 않는 단일 픽셀 마크다운 이미지로 수정하여 사용자의 +채팅 데이터를 악의적인 제3자에게 인출하여 채팅봇에 수행 +●(남용 위반) 공격자가 간접적인 프롬프트 주입을 통해 자신의 목적을 달성하기 위해 시스템의 의도 +된 용도를 재활용하는 경우를 광범위하게 나타냄 +- 공격자 목표는 다음과 같은 주요 범주로 나눌 수 있음 +사기 +최근 지시를 따르는 LLM의 발전으로 인해 이중 사용 위험이 동시에 증가 +맬웨어 +LLM은 사용자에게 악성 링크를 제안하여 맬웨어 확산을 현저하게 촉진할 수 있음. 또한 +LLM 통합 애플리케이션의 확산으로 프롬프트 자체가 맬웨어 역할을 하도록 강제하여 새로운 +맬웨어 위협이 발생함(예를 들어, 이메일을 읽는 LLM 증강 이메일 클라이언트는 악성 프롬프 +트를 전달한 다음 해당 프롬프트를 확산시키는 이메일을 보낼 가능성이 높음) +조작 +모델은 현재 사용자와 조작하기 쉬운 정보 출력 사이의 취약한 중개 계층 역할을 함. LLM은 +이제 일반적으로 더 큰 시스템의 일부이며 애플리케이션과 통합됨. 중개 상태는 모델을 수많 +은 취약성에 노출시킬 수 있음. 예를 들어, ①검색 챗봇은 허위 정보를 생성하도록 요청받을 +수 있고 ② 특정 정보, 소스 또는 검색 쿼리를 숨기도록 요청받을 수 있으며 ③ 모델은 적대 +적으로 선택되거나 임의로 잘못된 정보 소스(예: 문서, 이메일, 검색 쿼리)에 대한 요약을 제 +공하도록 요청받을 수 있음 + + +![이미지 185-0](images/p0185_img0.png) + + +![이미지 185-1](images/p0185_img1.png) + + +![이미지 185-2](images/p0185_img2.png) + + +![이미지 185-3](images/p0185_img3.png) + + +--- + +- (공격자 기술) 챗봇(예: Microsoft의 Bing 챗봇)을 사용한 실험을 수행하여 다양한 공격 기술의 +예를 보여줌 +피싱 +이전에는 LLM이 피싱 이메일과 같은 설득력 있는 사기를 만들어낼 수 있다는 것이 입증되었 +고, 이제 LLM이 애플리케이션과 더 쉽게 통합될 수 있으므로 사기를 만들 수 있을 뿐만 아니 +라 이러한 공격을 광범위하게 확산할 수도 있음 +위장 +LLM은 서비스 제공자의 공식 요청인 척하거나 신뢰할 수 있는 사기성 웹사이트를 추천할 수 +있음 +주입 확산 +LLM 자체는 유해한 코드를 실행하고 확산하는 컴퓨터 역할을 함(예를 들어, 이메일을 읽고 +작성하고 사용자의 개인 데이터를 볼 수 있는 자동 메시지 처리 도구는 그 수신 메시지를 읽 +을 수 있는 다른 모델에 주입을 확산할 수 있음) +맬웨어 확산 +피싱과 유사하게 LLM은 사용자가 “드라이브 바이 다운로드(drive-by downloads)”로 이어 +지는 악성 웹 페이지를 방문하도록 설득하는 데 악용될 수 있음 +역사적 왜곡 +공격자는 모델이 적대적으로 선택한 허위 정보를 출력하도록 유도할 수 있음 +주변 관련 +컨텍스트 유도 +중립적 입장 대신 특정 방향으로 검색 결과를 유도하면 편향 증폭을 달성하기 위한 공격을 만 +들 수 있음 + +●(완화책) +- 인간 피드백을 통한 강화 학습(RLHF): 인간의 참여를 간접적으로 사용하여 모델을 미세 조정하 +는 유형의 AI 모델 학습임. 이를 활용하여 LLM을 인간의 가치와 더 잘 맞추고 원치 않는 행동 +을 방지할 수 있음 +- 검색된 입력 필터링: 검색된 입력을 처리하여 명령을 필터링하는 것을 제안 +- LLM 조정자: LLM은 명백히 유해한 출력을 필터링하는 것 외에도 공격을 탐지하는 데 활용할 +수 있음. 이는 검색된 소스에 의존하지 않지만 허위 정보나 다른 종류의 조작 공격을 탐지하는 +데 유익할 수 있음 +- 해석성 기반 솔루션: 이러한 솔루션은 예측 궤적의 이상치 탐지를 수행함 + + +![이미지 186-0](images/p0186_img0.png) + + +![이미지 186-1](images/p0186_img1.png) + + +![이미지 186-2](images/p0186_img2.png) + + +![이미지 186-3](images/p0186_img3.png) + + +--- + +부록 +AI RMF 1.0 요약 +미국 국립표준기술연구소(이하 “NIST”)는 AI 시스템을 설계ㆍ개발ㆍ도입하는 조직을 위한 자발적 활 +용 가이드 문서인 ‘AI 위험관리 프레임워크 1.0(이하 “AI RMF”)’을 발표(’23.1.26) +●(목적) 모든 분야ㆍ규모의 기업ㆍ조직이 AI 위험을 해결할 수 있도록 유연하고 체계적이며 측정 가 +능한 프로세스를 제공하여 AI 기술의 이점을 극대화하고 동시에 개인ㆍ그룹ㆍ조직ㆍ사회에 부정적 +인 영향을 미칠 가능성을 줄이기 위해 수립 +●AI RMF는 조직의 크기와 형태에 상관없이 조직의 전체적인 위험관리 정책에 포함되어 AI 시스템 +의 전 주기에서 신뢰할 수 있는 AI 시스템 구현을 위한 핵심 기능의 위험관리 프로파일을 제시 +- (적용대상) 모든 분야ㆍ규모의 기업ㆍ조직의 ‘AI 시스템’ +- (적용주체 및 방식) ‘AI 행위자’*가 제시된 항목에 따라 자발적으로 참고 및 점검 +* 설계자・개발자・배포자・사용자, 고위 경영진이나 관리자 등 +- (적용시점) AI 시스템의 설계, 개발, 활용, 테스트, 평가 등 모든 단계 +- (핵심내용) 안전성, 책임・투명성 등 신뢰할 수 있는 AI 시스템의 7가지 특성을 제시하고, 이를 +위한 조직의 핵심 기능을 4가지 영역(거버넌스, 매핑(위험 식별), 측정, 관리)에서 제시 +신뢰할 수 있는 AI 시스템의 특징 +●신뢰할 수 있는 AI 시스템은 ▲타당하고 신뢰할 수 있으며, ▲안전하고, ▲보안이 철저하고, 탄력 +적이며, ▲책임을 질 수 있고, 투명하고, ▲설명 및 해석이 가능하고, ▲개인정보보호가 강화되고, +▲유해한 편향 관리를 통해 공정한 특성을 가짐 +- (유효성 및 신뢰성) 배포된 AI 시스템의 유효성과 신뢰성은 시스템이 용도에 따라 작동하는지 확 +인하는 테스트 또는 모니터링을 통해 지속적으로 평가되며 유효성, 정확성, 견고성, 신뢰성을 측 +정하여 신뢰할 수 있는 AI 시스템을 구축할 수 있음 +- (안전성) AI 시스템은 정의된 조건에 따라 작동할 때 인간의 생명, 건강, 재산 또는 환경에 유해 +한 영향을 미치지 않아야 하며 AI 시스템의 안전성은 이하를 통해 개선 가능(출처: ISO/IEC TS +5723:2022) +▸책임감 있는 설계, 개발 및 배포 기준 +▸책임감 있는 시스템 사용에 대해 배포자에게 명확한 정보 제공 +▸배포자 및 최종 사용자의 책임감 있는 의사 결정 +▸사건의 실증적 증거를 기반으로 위험 설명 및 문서화 +- (보안 및 탄력성) AI 시스템 및 시스템이 배포된 생태계는 예상치 못한 이상 반응 또는 변화를 +견딜 수 있는 경우, 내부/외부적 변화에도 불구하고 그 기능과 구조를 유지하며, 필요한 경우 안 + + +![이미지 187-0](images/p0187_img0.png) + + +![이미지 187-1](images/p0187_img1.png) + + +![이미지 187-2](images/p0187_img2.png) + + +![이미지 187-3](images/p0187_img3.png) + + +![이미지 187-4](images/p0187_img4.png) + + +![이미지 187-5](images/p0187_img5.png) + + +--- + +전하게 작동하면서 기능을 제한적으로 제공할 수 있는 탄력성이 있어야 함(출처: ISO/IEC TS +5723:2022) +- (책임 및 투명성) 책임감은 투명성*을 전제로 하며 부정확하거나 부정적인 영향을 초래하는 AI +시스템 결과를 시정하기 위해서 필요 +* AI 시스템 및 그 결과에 대한 정보가 시스템과 상호작용하는 개인에게 제공되는 정도를 반영 +- (설명 및 해석가능성) AI 시스템 작동의 기본 메커니즘을 나타내는 ‘설명가능성’과 기능적 목적 +관점에서 AI 시스템의 결과를 나타내는 ‘해석가능성’의 특성이 필요 +※ 투명성은 시스템에서 “무슨 일이 발생했는지”, 설명가능성은 “어떻게 결정이 내려졌는지”, 해석가능성은 시스템이 +결정을 내린 “이유와 그 의미 또는 상황”에 대한 질문에 답함 +- (개인정보보호 강화) AI 시스템을 설계, 개발 및 배포 시 익명성, 기밀성 및 통제 등 개인정보 +보호 가치 고려 필요 +- (공정성 : 유해한 편향 관리) 3가지 범주의 편향(시스템적 편향, 통계적 편향, 인간 인지적 편향) +을 고려하고 관리해야 함 +▸시스템적 편향은 AI 데이터셋, AI 주기 전반에 걸친 조직적 규범, 수행 기준 및 절차, AI 시스 +템을 사용하는 광범위한 사회에 존재 가능 +▸통계적 편향은 AI 데이터셋 및 알고리즘 프로세스에 존재할 수 있으며, 이는 대표성이 없는 샘플의 +체계적 오류로 인해 종종 발생 +핵심 및 프로파일 +●신뢰할 수 있는 AI 시스템을 개발하기 위해 ‘거버넌스-매핑(위험식별)-측정-관리’의 4가지 핵심 기 +능을 구성하며 각 기능은 범주와 하위 범주로 구분됨 +구성 +기능 +거버넌스 +거버넌스는 3가지 다른 기능에 정보를 제공하고 제공받는 교차 기능으로 설계되었음. 조직 내 AI +시스템을 설계, 개발, 배포 또는 획득하기 위한 위험관리 문화를 조성 +관리 +식별된 위험을 처리하고 시스템 오류 및 부정적 영향에 대한 가능성을 최소화하기 위해 거버넌스 +에서 설정된 문서 작성 기준, 매핑의 상황별 정보 및 측정의 경험적 정보를 활용. 관리 기능 후에 +는 위험 우선 순위를 지정하고 이를 지속적으로 모니터링 및 개선하기 위한 계획 수립 +매칭 +(위험식별) +측정, 관리를 기초 작업으로 AI 시스템의 위험, 광범위한 위험 유발 요인을 식별 +측정 +정량적・정성적 또는 복합적 도구, 기법 및 방법을 채택하여 AI 위험 및 관련 영향을 분석・평가하고 +하고 벤치마킹하며 모니터링. 매핑에서 식별된 AI 위험과 관련한 지식을 활용해 관리를 위한 위험 모 +니터링 +●(거버넌스) AI 시스템 수명 및 조직 계층 구조 전반에 걸쳐 AI 위험을 효과적으로 관리하기 위한 +지속적이고 본질적인 요구 사항으로, 다른 핵심 기능을 가능하게 하며 조직 내에서 AI 시스템을 설 +계・개발・배포・획득하기 위한 위험관리 문화를 조성 가능하도록 해야 함. + + +![이미지 188-0](images/p0188_img0.png) + + +![이미지 188-1](images/p0188_img1.png) + + +![이미지 188-2](images/p0188_img2.png) + + +![이미지 188-3](images/p0188_img3.png) + + +![이미지 188-4](images/p0188_img4.png) + + +--- + +부록 +거버넌스 기능 범주 및 하위범주 +범주 +하위 범주 +거버넌스 1 +AI 위험 매핑, 측정 및 관리와 +관련된 조직 전반의 정책, +프로세스, 절차 및 수행 기준이 +투명하고 효과적으로 구현된다. +1.1 AI와 관련된 법적 및 규제적 요구 사항을 이해, 관리 및 문서화한다. + +### 1.2 신뢰할 수 있는 AI의 특성을 조직적 정책, 프로세스, 절차 및 수행 기준에 통 + +합한다. + +### 1.3 조직의 위험 허용 범위를 기반으로 위험관리 활동의 수준을 결정하기 위한 프 + +로세스, 절차 및 수행 기준을 마련한다. + +### 1.4 위험관리 프로세스 및 그 결과는 투명한 정책, 절차 및 조직의 위험 우선 순위 + +를 기반으로 한 기타 통제를 통해 설정된다. + +### 1.5 위험관리 프로세스 및 그 결과에 대한 지속적인 모니터링 및 정기적인 검토를 + +계획하고 주기적 검토 빈도를 포함하여 조직의 역할 및 책무를 명확하게 정의 +한다. +1.6 AI 시스템 인벤토리를 작성하는 메커니즘을 구축하며 조직의 위험 우선 순위 +에 따라 리소스를 할당한다. + +### 1.7 위험성을 높이거나 조직의 신뢰성을 떨어뜨리지 않는 방식으로 AI 시스템을 + +안전하게 해제하고 단계적으로 중단하기 위한 프로세스 및 절차를 마련한다. +거버넌스 2 +적절한 부서 및 직원에게 AI +위험을 매핑, 측정 및 관리하기 +위한 권한을 부여하고 교육을 받을 +수 있도록 하는 책임 구조를 +구축한다. +2.1 AI 위험을 매핑, 측정 및 관리하는 것과 관련된 역할, 책임 및 커뮤니케이션 +내용을 문서화하고 이를 조직 전반의 부서 및 개인에게 명확히 인지시킨다. + +### 2.2 조직 내 직원 및 파트너는 관련 정책, 절차 및 계약에 따라 그들의 의무와 책 + +임을 수행할 수 있도록 AI 위험관리 교육을 받는다. + +### 2.3 조직의 경영진은 AI 시스템의 개발 및 배포와 관련된 위험에 대해 의사 결정 + +할 책임을 가진다. +거버넌스 3 +주기 전반에 걸쳐 AI 위험을 매핑, +측정 및 관리하기 위해 인력 +다양성, 형평성, 포용성 및 접근성 +프로세스의 우선 순위를 설정한다. + +### 3.1 주기 전반에 걸쳐 AI 위험을 매핑, 측정 및 관리하는 의사 결정을 내릴 때 다 + +양한 부서로부터 정보를 얻는다. + +### 3.2 인간-AI 구성 및 AI 시스템 감독과 관련된 역할과 책임을 정의하고 차별화하 + +기 위한 정책 및 절차를 마련한다. +거버넌스 4 +조직 내 부서는 AI 위험을 +고려하고 해당 내용에 대해 +커뮤니케이션하는 문화를 구축하기 +위해 노력한다. + +### 4.1 잠재적인 악영향을 최소화하기 위해 AI 시스템을 설계, 개발, 배포 및 사용하 + +는 데에 있어 비판적 사고 및 안전 우선 주의 방식을 장려하기 위한 조직적 +정책 및 수행 기준을 마련한다. + +### 4.2 조직 내 부서는 설계, 개발, 배포, 평가 및 사용하는 AI 기술의 위험 및 잠재 + +적 영향을 문서화하고 그 영향에 대해 보다 광범위하게 소통한다. +4.3 AI 테스트, 사고 식별 및 정보 공유를 위한 조직적 수행 기준을 마련한다. +거버넌스 5 +AI 행위자의 강력한 참여를 +유도하기 위한 프로세스를 +마련한다. +5.1 AI 위험과 관련된 잠재적인 개인적/사회적 영향에 대해 AI 시스템을 개발 또 +는 배포한 부서 외부의 피드백을 수집, 고려, 우선 순위 지정 및 통합하기 위 +한 조직적 정책 및 수행 기준을 마련한다. +5.2 AI 시스템을 개발 또는 배포한 부서가 관련 AI 행위자의 피드백을 시스템 설 +계 및 구현에 정기적으로 통합할 수 있도록 하는 메커니즘을 구축한다. +거버넌스 6 +제3자의 소프트웨어, 데이터 및 +기타 공급망 문제로 발생하는 AI +위험 및 이점을 해결하기 위한 +정책 및 절차를 마련한다. + +### 6.1 제3자의 지적재산권 또는 기타 권리 침해를 포함하여 제3자 기관과 관련된 + +AI 위험을 해결하기 위한 정책 및 절차를 마련한다. + +### 6.2 위험성이 높은 것으로 간주되는 제3자의 데이터 또는 AI 시스템의 고장 및 사 + +고를 해결하기 위한 비상 프로세스를 마련한다 + + +![이미지 189-0](images/p0189_img0.png) + + +![이미지 189-1](images/p0189_img1.png) + + +![이미지 189-2](images/p0189_img2.png) + + +![이미지 189-3](images/p0189_img3.png) + + +--- + +●(매핑) 매핑 기능을 수행하는 동안 수집된 정보는 부정적인 위험을 방지하고 프로세스(예: 모델 관리) +에 대한 의사 결정은 물론 AI 솔루션의 적합성 또는 필요성에 대한 초기 의사 결정의 정보를 제공하 +며 매핑 기능에서의 결과물은 측정(MEASURE) 및 관리(MANAGE) 기능을 위한 토대를 형성함 +매핑 기능 범주 및 하위범주 +범주 +하위 범주 +매핑 1 +상황을 설정 및 파악한다. + +### 1.1 목적, 잠재적으로 유익한 용도, 상황별 법률, 규범, 기대치, AI 시스템이 배포될 예상 + +조건을 파악하고 이하를 고려해 문서화한다. +<고려 사항> +∙사용자의 특정 집합 또는 유형(기대치 포함) +∙시스템이 개인, 커뮤니티, 조직, 사회 및 지구에 미치는 잠재적인 긍정적/부정적 영향 +∙개발 또는 제품 AI 주기 전반에 걸친 AI 시스템의 목적, 용도 및 위험에 관한 가정 +및 관련 제한 사항 +∙관련 TEVV 및 시스템 지표 + +### 1.2 학제 간(Interdisciplinary) AI 행위자, 기능, 기술 및 상황 설정을 위한 역량은 인구 + +통계학적 다양성, 광범위한 도메인 및 사용자의 전문 지식을 반영하며, 이들의 참여는 +문서화된다. 학제 간 협업 기회는 우선순위로 지정된다. +1.3 AI 기술에 대한 조직의 사명 및 목표를 파악하고 문서화한다. + +### 1.4 비즈니스 가치 또는 비즈니스 상황을 명확하게 정의하거나 (기존의 AI 시스템을 평가 + +하는 경우) 재평가한다. + +### 1.5 조직의 위험 허용 범위를 파악하고 문서화한다. + + +### 1.6 관련 AI 행위자로부터 시스템 요구 사항(예: 사용자의 개인정보를 보호해야 하는 시스 + +템)을 도출하고 파악한다. 설계 의사 결정 시 AI 위험을 해결하기 위해 사회적·기술적 +영향을 고려한다. +매핑 2 +AI 시스템을 분류한다. +2.1 AI 시스템이 지원하는 작업을 구현하는 데 사용되는 특정 작업 및 방법을 정의한다. +(예: 분류자, 생성 모델, 추천자) +2.2 AI 시스템의 정보 한계 및 인간이 시스템 결과를 활용하고 감독하는 방법에 관한 정 +보가 문서화된다. 문서화를 통해 관련 AI 행위자가 의사 결정을 내리고 후속 조치를 +취하기 위한 충분한 정보를 제공할 수 있다. + +### 2.3 실험 설계, 데이터 수집 및 선택(예: 가용성, 대표성, 적합성), 시스템 신뢰성 및 구성 + +타당성과 관련된 항목을 포함하여 과학적 무결성 및 TEVV 고려 사항을 식별하고 문 +서화한다 +매핑 3 +적절한 벤치마크와 +비교하여 AI 기능, 대상 용도, +목표, 예상 이점 및 비용을 +파악한다. +3.1 AI 시스템의 기능 및 성능에 대한 잠재적 이점을 조사하고 문서화한다. + +### 3.2 잠재적/실제적 AI 오류 또는 시스템의 기능 및 신뢰성(조직의 위험 허용 범위와 연관 + +됨)으로 인해 발생하는 비금전적 비용을 포함한 잠재적 비용을 조사하고 문서화한다. + +### 3.3 대상 응용 프로그램 범위는 시스템 기능, 설정된 상황 및 AI 시스템 분류를 기반으로 + +지정 및 문서화된다. +3.4 AI 시스템 성능, 신뢰성, 관련 기술 표준 및 인증에 대해 운영자 및 실무자를 숙련시 +키는 프로세스를 정의, 평가 및 문서화한다. + +### 3.5 거버넌스 기능의 조직적 정책에 따라 사람의 감독(human oversight) 프로세스를 정의, + +평가 및 문서화한다. + + +![이미지 190-0](images/p0190_img0.png) + + +![이미지 190-1](images/p0190_img1.png) + + +![이미지 190-2](images/p0190_img2.png) + + +![이미지 190-3](images/p0190_img3.png) + + +--- + +부록 +●(측정) 정량적・정성적 또는 복합적 도구, 기법 및 방법을 채택하여 AI 위험 및 관련 영향을 분석, +평가, 모니터링하고 매핑(MAP) 기능에서 식별된 AI 위험과 관련한 지식을 사용하며 관리 +(MANAGE) 기능의 위험 모니터링 및 대응 활동에 필요한 정보를 제공 +측정 기능 범주 및 하위범주 +범주 +하위 범주 +매핑 4 +제3자의 소프트웨어 및 데 +이터를 포함하여 AI 시스템 +의 모든 구성 요소에 대한 +위험 및 이점을 매핑한다 + +### 4.1 제3자의 지적재산권 또는 기타 권리 침해 위험과 마찬가지로 AI 기술과 구성 요소의 + +법적 위험(제3자의 데이터 또는 소프트웨어 사용 포함)을 매핑하는 방법을 확립하고 +이를 준수하여 문서화한다. + +### 4.2 제3자의 AI 기술을 포함하여 AI 시스템 구성 요소에 대한 내부 위험 통제를 식별하고 + +문서화한다. +매핑 5 +개인, 그룹, 커뮤니티, 조직 +및 사회에 대한 영향을 특 +성화 한다 + +### 5.1 예상 용도, AI 시스템의 과거 용도, 공개 사건 보고, AI 시스템을 개발 또는 배포한 + +팀에 대한 외부 피드백 또는 기타 데이터를 기반으로 식별된 각 영향(잠재적으로 긍정 +적인 또는 부정적인 영향 모두)에 대한 가능성과 규모를 식별하고 문서화한다. + +### 5.2 관련 AI 행위자의 정기적인 참여를 지원하고 긍정적/부정적/예상치 못한 영향에 관한 + +피드백을 통합하기 위한 절차 및 인력을 구축하고 이를 문서화한다. +범주 +하위 범주 +측정 1 +적절한 방법 및 지표를 식별하고 +적용한다. +1.1 +가장 중요한 AI 위험을 우선적으로 구현하기 위해 매핑 기능을 통해 열거된 +AI 위험 측정 방법 및 지표를 선택한다. 측정하지 않거나 측정할 수 없는 위 +험 또는 신뢰도 특성을 적절히 문서화한다. +1.2 +오류 보고서 및 커뮤니티에 대한 잠재적 영향을 포함하여 AI 지표의 적절성 +및 기존 통계의 효율성을 정기적으로 평가 및 업데이트한다. +1.3 +시스템의 일선 개발자 또는 독립 평가자의 역할을 하지 않은 내부 전문가를 +정기적 평가 및 업데이트에 참여시킨다. 도메인 전문가, 사용자, AI 시스템을 +개발 또는 배포한 팀의 외부 AI 행위자 및 영향을 받는 커뮤니티는 조직의 위 +험 허용 범위에 따라 필요한 평가를 지원한다. +측정 2 +신뢰할 수 있는 특성에 대해 AI +시스템을 평가한다. +2.1 +TEVV 중에 사용된 도구의 테스트 세트, 지표 및 세부 정보를 문서화한다. +2.2 +인간 피실험자와 관련된 평가는 관련 요구 사항(인간 피실험자 보호 포함)을 +충족하고 모집단을 대표한다. +2.3 +AI 시스템의 성능 또는 보증 기준을 정성적 또는 정량적으로 측정하고 배포 +조건과 유사한 조건에서 입증한다. 조치를 문서화한다. +2.4 +매핑 기능에서 식별된 AI 시스템 및 구성 요소의 기능과 동작은 제조 시 모니 +터링된다. +2.5 +배포할 AI 시스템이 타당하고 신뢰할 수 있는지를 입증한다. 기술 개발 조건 +이외의 일반화 한계를 문서화한다. +2.6 +매핑 기능에서 식별되는 안전 위험에 대해 AI 시스템을 정기적으로 평가한다. +배포할 AI 시스템이 안전하다는 것을 입증하고 남은 부정적 위험은 위험 허용 +범위를 초과하지 않아야 한다. AI 시스템이 정보 한계를 넘어 작동하도록 구 +성된 경우 안전에 실패할 수 있다. 안전 지표는 시스템의 신뢰성, 견고성, 실 +시간 모니터링 및 AI 시스템 오류에 대한 응답 시간을 반영한다. + + +![이미지 191-0](images/p0191_img0.png) + + +![이미지 191-1](images/p0191_img1.png) + + +![이미지 191-2](images/p0191_img2.png) + + +![이미지 191-3](images/p0191_img3.png) + + +--- + +●(관리) 식별된 위험을 처리하고 시스템 오류 및 부정적 영향에 대한 가능성을 최소화하기 위해 거 +버넌스에서 설정된 문서 작성 기준, 매핑의 상황별 정보 및 측정의 경험적 정보를 활용하며 관리 +기능이 완료되면 위험 우선순위를 지정하고 이를 지속적으로 모니터링 및 개선하기 위한 계획이 +수립됨 +범주 +하위 범주 +2.7 +매핑 기능에서 식별된 AI 시스템의 보안 및 탄력성을 평가 및 문서화한다. +2.8 +매핑 기능에서 식별된 투명성 및 책임과 관련된 위험을 조사하고 문서화한다. +2.9 +AI 모델을 설명, 검증 및 문서화해야 하며 책임 있는 사용과 거버넌스 기능에 +대해 알리기 위해 AI 시스템 결과를 매핑 기능을 통해 식별한 상황 내에서 해 +석해야 한다. + +### 2.10 매핑 기능에서 식별된 AI 시스템의 개인정보보호 위험을 조사하고 문서화한다. + + +### 2.11 매핑 기능에서 식별된 공정성 및 편향을 평가하고 그 결과를 문서화한다. + + +### 2.12 매핑 기능에서 식별된 AI 모델 훈련 및 관리 활동에 대한 환경적 영향 및 지 + +속 가능성을 평가하고 문서화한다. + +### 2.13 측정 기능에서 사용된 TEVV 지표 및 프로세스의 효율성을 평가하고 문서화 + +한다. +측정 3 +AI 위험을 시간 경과에 따라 추 +적하는 메커니즘을 구축한다. +3.1 +배포 상황 내에서 잠재적/실제적 성능 등의 요소를 기반으로 기존의, 예상치 +못한, 새로운 AI 위험을 정기적으로 식별하고 추적하기 위한 접근 방법, 인력 +및 문서를 구축한다. +3.2 +현재 가용 측정 기술을 사용하여 AI 위험을 평가하기 어렵거나 관련 지표를 +아직 사용할 수 없는 경우 위험 추적 접근 방법이 고려된다. +3.3 +문제를 보고하고 시스템 결과에 이의를 제기하기 위한 최종 사용자 및 영향을 +받는 커뮤니티의 피드백 프로세스를 구축하여 AI 시스템 평가 지표에 통합한다. +측정 4 +측정 효율성에 대한 +피드백을 수집하고 평가한다 +4.1 +AI 위험을 식별하기 위한 측정 방법을 배포 상황과 연관시켜 도메인 전문가 +및 기타 최종 사용자와의 협의를 통해 정보를 얻는다. 접근 방법을 문서화한다. +4.2 +시스템이 의도한 바에 따라 일관되게 수행되는지를 검증하기 위해 도메인 전 +문가 및 관련 AI 행위자를 통해 배포 상황 및 AI 주기 전반에 걸친 AI 시스템 +신뢰도에 대한 측정 결과를 얻는다. 결과를 문서화한다. +4.3 +커뮤니티 및 관련 AI 행위자와의 협의를 기반으로 측정한 성능의 개선 또는 +감소, 상황과 관련된 위험 및 신뢰도 특성에 관한 현장 데이터를 식별하고 문 +서화한다. + + +![이미지 192-0](images/p0192_img0.png) + + +![이미지 192-1](images/p0192_img1.png) + + +![이미지 192-2](images/p0192_img2.png) + + +![이미지 192-3](images/p0192_img3.png) + + +--- + +부록 +관리 기능 범주 및 하위범주 +범주 +하위 범주 +관리 1 +매핑 및 측정 기능으로부터 얻 +은 평가 및 기타 분석 결과를 +기반으로 AI 위험에 대해 우선 +순위를 부여하고, 대응하며, 관 +리한다. +1.1 AI 시스템이 의도한 목적 및 목표를 달성했는지 여부와 시스템의 개발 또는 배포 +를 진행해야 하는지 여부에 대한 결정을 내린다. + +### 1.2 문서화된 AI 위험은 영향, 가능성, 가용 리소스 또는 방법에 따라 그 우선 순위가 + +지정된다. + +### 1.3 매핑 기능을 통해 식별된 우선 순위가 높은 AI 위험에 대응하기 위한 방법을 개 + +발, 계획 및 문서화한다. 위험 대응 옵션에는 완화, 이전, 회피 또는 수용이 포함 +된다. +1.4 AI 시스템의 후속 취득자 및 최종 사용자 모두에 대한 부정적인 잔류 위험(완화 +되지 않은 모든 위험의 합계로 정의됨)을 문서화한다. +관리 2 +관련 AI 행위자의 개입을 통해 +AI 이점을 극대화하고 부정적인 +영향을 최소화하기 위한 전략을 +계획, 준비, 구현, 문서화하고 +해당 정보를 제공한다. + +### 2.1 잠재적 영향의 규모 또는 가능성을 줄이기 위해 실행 가능한 AI가 아닌 대체 시 + +스템, 접근 방식 또는 방법과 함께 AI 위험을 관리하는 데 필요한 리소스를 고려 +한다. + +### 2.2 배포된 AI 시스템의 가치를 유지하기 위한 메커니즘을 구축하고 적용한다. + + +### 2.3 이전에 알려지지 않은 위험이 식별될 경우 해당 위험에 대응하고 그로부터 복구 + +하기 위한 절차를 준수한다. + +### 2.4 의도한 목적과는 다른 성능 또는 결과를 나타내는 AI 시스템을 대체, 해제 또는 + +비활성화하기 위한 메커니즘을 마련하고 관련 책무를 할당하고 파악한다. +관리 3 +제3자 기관의 AI 위험 및 이점 +을 관리한다. + +### 3.1 제3자 리소스의 AI 위험 및 이점을 정기적으로 모니터링하고 위험 통계를 적용 + +하고 문서화한다. +3.2 AI 시스템의 정기적 모니터링 및 유지 관리의 일환으로 개발용으로 사용되는 사 +전 학습된 모델을 모니터링한다. +관리 4 +식별 및 측정된 AI 위험에 대해 +위험 처리(대응 및 복구 포함) +및 커뮤니케이션 계획을 문서화 +하고 이를 정기적으로 모니터링 +한다. + +### 4.1 배포 후 AI 시스템에 대한 모니터링 계획을 구현한다. 여기에는 사용자 및 기타 + +관련 AI 행위자의 의견을 수집하고 평가하기 위한 메커니즘, 이의 제기, 중단, 해 +제, 사고 대응, 복구 및 변경 관리가 포함된다. + +### 4.2 지속적인 개선 활동이 AI 시스템 업데이트에 통합되며, 여기에는 이해당사자(관 + +련 AI 행위자 포함)와의 정기적인 참여가 포함된다. + +### 4.3 사고 및 오류는 영향을 받는 커뮤니티를 포함하여 관련 AI 행위자에게 전달된다. + +사고 및 오류를 추적하고, 이에 대응하며, 그로부터 복구하기 위한 프로세스를 준 +수하고 이를 문서화한다. + + +![이미지 193-0](images/p0193_img0.png) + + +![이미지 193-1](images/p0193_img1.png) + + +![이미지 193-2](images/p0193_img2.png) + + +![이미지 193-3](images/p0193_img3.png) + + +--- + +AI 관련 국내외 정책 동향 +4.1 +개요 +AI 윤리기준 중심으로 이루어지던 국제적 논의가 최근 AI의 위험성을 적절히 통제할 수 있는 규제에 +대한 논의로 본격 전환되면서 EU, 미국, 영국 등 주요국을 중심으로 AI 관련 국제 규범을 주도하고 +국내 입법을 마련하기 위한 움직임이 빠르게 이루어지고 있음 +●EU는 AI가 초래할 수 있는 위험으로부터 기본권과 안전 등의 가치를 보장하는데 초점을 두면서도 기 +술발전을 통한 혁신과 시장의 발전을 저해하지 않는 것을 기본방향으로 설정 +●미국은 행정부 내에서 효력이 발생하는 행정명령을 통해 AI의 긍정적인 잠재성은 극대화하고 국가안 +보, 허위정보 생성, 일자리 등에 미치는 영향은 최소화하려는 규제 방식임 +●영국, 일본 등 주요국은 EU와 미국의 규제 방향을 고려하고 해당 국가의 기술수준과 산업현황 등 +에 기반하여 국내외 규제 논의에 유연하게 대응하고 있음 +세계 각국은 강력한 규제에서 유연한 규제까지 다양한 규제 접근방식을 도입하고 있으며, 규제의 강도 +에는 차이가 있으나 AI가 초래할 부작용 및 위험에 대한 심각성을 인지하고 AI 규제 도입의 필요성에 +는 공감하고 있음 +4.2 +유럽연합 +AI에 대한 법적 대응을 가장 적극적으로 하는 EU의 경우, EU AI Act(이하, “인공지능법”이라 함)가 +유럽의회를 통과(2023년 6월)하여 2026년부터 시행 예정임 +●EU의 접근방식은 인공지능의 여러 형태의 사용과 관련된 위험을 평가하는 것을 기반으로 하며 시 +민의 기본권, 건강, 안전 또는 기타 공공의 이익에 용납할 수 없는 위험을 초래하는 침입적이고 차별 +적인 사용의 경우 전면적인 금지를 규정하고 있음10 +●인공지능법은 ‘리스크 기반 접근방식(Risk-Based Approach)’을 채택하여 AI 시스템의 리스크를 +(i) 허용할 수 없는 위험군(Unacceptable risk), (ii) 고위험군(High risk), (iii) 제한된 위험군(Limited +risk), (iv) 최소 위험군(Minimal risk)으로 분류하여 수범자 별로 금지 여부, 적합성 평가 등 차등 +적인 의무를 부과하고 있음 +●인공지능법을 위반하는 기업은 최대 약 424억 원 또는 연간 글로벌 매출의 6%에 해당하는 벌금이 +부과되며 AI에 의한 스코어링과 분류 등을 엄격하게 금지하고 있음 +10 +성욱준, 지능 시대 도래에 따른 AI 입법수요 및 과제 연구, 국회입법조사처, 2023. 12, 45면 + + +![이미지 194-0](images/p0194_img0.png) + + +![이미지 194-1](images/p0194_img1.png) + + +![이미지 194-2](images/p0194_img2.png) + + +![이미지 194-3](images/p0194_img3.png) + + +![이미지 194-4](images/p0194_img4.png) + + +![이미지 194-5](images/p0194_img5.png) + + +--- + +부록 +리스크 기반 AI 시스템 위험관리 +허용할 수 +없는 위험군 +• 인간의 안전, 건강, 생계, 기본권을 위협하는 명백한 위협이 되는 인공지능 시스템. +합법적으로 허가를 받는 연구목적의 개발 및 운영을 제외하고는 현장 활용이 전면 금지 +• (예시) ①개인이나 집단을 사회적 행동이나 개인을 특성을 기반으로 평가하거나 분류하는 사회적 점수 +시스템, ②인터넷이나 CCTV 영상에서의 무차별적인 안면 이미지 수집을 통해 안면 인식 데이터베이 +스를 구축・활용하는 시스템, ③인종, 성적 지향성, 종교적 신념을 나타내는 민감한 개인 생체인식 데이 +터를 기반으로 사람을 판별하는 시스템 등 +고위험군 +• 시스템 개발자, 공급자, 유통업체, 이용자 각각에게 AI 활용 시 반드시 수행해야 할 의무사항을 규정 +• (서비스 수입 및 유통업체 포함), EU내 소재하는 AI 시스템 배치자 모두에게 적용 +• (예시) ①교육 및 직업 훈련 시스템(교육 기회 결정, 학생 평가 시스템, 교육 기관 입학 시 응시자 평가 +시스템, 응시자 시험감독 시스템 등), ②근로자 관리 및 자영업 계약 관련 시스템, ③필수공공/민간 서 +비스에 사용되는 시스템(주로 서비스 혜택 적격성을 평가하는 시스템. 의료보험용 개인평가 시스템, 복 +지 수당 적격자 평가시스템 등 포함) 등 +제한된 +위험군 +• 챗봇과 같이 인간과 상호작용하는 서비스, 딥페이크와 같이 컨텐츠를 생성하거나 조작하는 시스템이 +포함됨. 이 경우 투명성의 원칙이 강조되어 서비스 제공자는 ①시스템과 상호작용하는 자연인에게 인 +간이 아닌 봇과 상호작용하고 있음이 알려지도록 시스템을 설계 및 운영해야 하고 ②딥페이크*와 같 +은 생성 AI의 결과물은 그 산출물이 AI를 활용하여 생성 혹은 조작되었음을 공개**하여야 함 +* 딥페이크는 진정하거나 진실한 것이라고 잘못 보여지는 텍스트, 오디오 또는 시각적 콘텐츠와 그 사 +람의 동의없이 그 사람이 실제로 하지 않은 말 또는 행동을 표시하는 것으로 정의 +** 공개란 해당 콘텐츠 이용자에게 콘텐츠가 진정한 것이 아님을 분명하게 시각적 방법으로 콘텐츠에 +표시하는 것 +최소 위험군 +• 추가적인 법적 의무 없이 기존 법규에 따라 개발 및 사용이 가능 +4.3 +미국 +미국은 인공지능의 개발과 활용을 안전하고 책임감 있게 활용하는 것을 최우선 과제로 삼고 있으며, +이를 위해 연방 정부 차원에서의 통합된 접근방식을 추진 중임 +미국은 AI 규제에 관한 포괄적인 입법을 진행하고 있지는 않으나, 2023년 10월 30일, “안전하고 보 +안이 보장되며 신뢰할 수 있는 AI의 개발과 사용에 대한 행정명령”(Executive Order on the Safe, +Secure, and Trustworthy Development and Use of Artificial Intelligence, 이하 “AI 행정명 +령”)에 바이든 대통령이 서명함으로써 연방기관들이 범정부 차원의 규제 프레임 마련에 나서고 있음 +●AI 행정명령은 시장주의적인 접근을 취하면서 혁신의 지속을 위한 정부의 책임과 역할을 전략적으로 +규율하는 것이 특징임 +●AI 행정명령은 8개 분야의 ‘정책 및 원칙(Guiding Principles)’을 제시(Sec.2)하고 있으며, 이를 기반 +으로 연방정부와 관련 기관이 인공지능의 개발과 활용을 촉진하고 관리하기 위해 수행해야 하는 세 +부 조치사항(Sec.4~11)을 제시함 +- 예컨대, 딥페이크를 포함한 인공지능을 이용한 사기 등으로부터 국민을 보호하기 위해 상무부에 +서 인공지능 생성 콘텐츠를 탐지하고 정부 공식 콘텐츠를 인증하는 모범관행 및 기준이 포함된 + + +![이미지 195-0](images/p0195_img0.png) + + +![이미지 195-1](images/p0195_img1.png) + + +![이미지 195-2](images/p0195_img2.png) + + +![이미지 195-3](images/p0195_img3.png) + + +![이미지 195-4](images/p0195_img4.png) + + +--- + +지침을 마련하도록 하고 있음 +- 또한, 국립표준기술연구소(NIST)를 통한 표준 제정을 통해 AI 보안과 안보 관련 위험을 최소화 +하고 관련 기업들의 법률 준수와 관련한 예측 가능성을 담보하고, 고성능 AI에 대해서는 레드팀 +을 통해 AI의 시스템 결함 및 취약점을 찾도록 하는 실증적인 접근을 하며, 소규모 개발자 등에 +대한 제도적 지원과 함께 해외 AI 인재를 유치하기 위한 정책을 제시함 +4.4 +영국 +영국은 EU와의 차별성을 강조하며 AI 관련 규제에 대한 친혁신 프레임워크를 제시하고 AI 분야에서 +의 선도적인 지위를 유지해 나가고자 함. EU 인공지능법과 달리 영국은 AI 관련 규제의 입법을 시도 +하지 않고, AI 활용 분야에 따라 기존의 규제 부처에서 관련 규범을 만들고자 하고 있음11 +이러한 AI 관련 규제 설계의 중심이 되는 것은 2022년의 ‘친혁신적 AI 규제 수립을 위한 정책 보고 +서’와 2023년의 ‘AI 규제에 대한 친혁신적 접근’ 백서임. +●“친혁신적 AI 규제 수립을 위한 정책 보고서”는 EU 인공지능법과 같이 AI 시스템에 대한 고정된 정의 +를 제시하는 대신, AI가 공통적으로 갖는 핵심 특징을 학습 결과가 지속적으로 반영되어 의도나 논 +리를 설명하기 어렵다는 ‘적응력’과 복잡한 인지적 과업을 자동화하여 명확한 의도나 인간의 통제 없 +이도 의사결정을 함은 ‘자율성’으로 규정하고, 각 규제기관이 소관 분야의 특성에 맞게 더 자세한 정의 +를 발전시키도록 하였음 +●“AI 규제에 대한 친혁신적 접근 백서”는 AI 규제를 단시일 내에 법제화하지 않음을 재확인하면서 AI 규 +제 프레임워크의 이행 원칙 및 이행 방안을 구체화하여 제시하고, 규제기관으로서 정부의 역할을 +규정하였음 +4.5 +중국 +중국은 AI를 전체적으로 규제하기보다는 새로운 AI 제품이 등장할 때마다 개별 법안을 발표하는 형태 +로 단편적이고 세분화된 규제를 시행하고 있음. 이러한 접근방식은 기술변화에 따라 신속하게 대응할 +수 있디는 장점이 있으나, 장기적이고 거시적인 관점의 발전을 저해할 수 있음12 +심층합성기술(深層合性技術, 딥페이크)은 「인터넷 정보 서비스의 심층합성 관리 규정」을 마련하고, +‘생성형 인공지능 서비스’는 별도의 규정인 「생성형 인공지능 서비스 규정」을 통해 규제13 +11 +광장 국제통상연구원, “글로벌 인공지능(AI) 규제 동향과 시사점 - EU, 미국, 영국을 중심으로”, 「Issue Brief」 vol. 2, 2024, 5~7면 +12 +강진원・김혜나, “EU 인공지능(AI) 규제현황과 시사점”, 「KISTEP 브리프 119」, 2024. 2, 5면 +13 +채은선, “해외 생성형 인공지능 관련 주요 규제 동향 및 시사점”, 「디지털법제 Brief」, 한국지능정보사회진흥원(NIA), 2024. 3, 2~3면 + + +![이미지 196-0](images/p0196_img0.png) + + +![이미지 196-1](images/p0196_img1.png) + + +![이미지 196-2](images/p0196_img2.png) + + +![이미지 196-3](images/p0196_img3.png) + + +![이미지 196-4](images/p0196_img4.png) + + +--- + +부록 +●(생성형 인공지능) 「생성형 인공지능 규정(‘23.7.13.공표, ’23.8.15.시행)」은 중국 내에서 생성형 +인공지능 기술을 이용하여 텍스트, 이미지, 오디오, 영상 및 기타 콘텐츠를 생성하는 서비스 제공을 +규제 +- 서비스 유형별로 생성형 인공지능 서비스의 투명성 증진 및 생성된 콘텐츠의 정확성・신뢰성 향 +상을 위한 효과적 조치 수행 +- 생성형 인공지능 서비스 공급자들은 「인터넷 정보 서비스의 심층합성 관리 규정」에 따라 생성된 +그림, 동영상 및 기타 콘텐츠에 표시 +- 생성형 인공지능 서비스 공급자는 이용자가 불법적인 활동에 자사의 서비스를 이용한다는 사실 +을 알게 된 경우 해당 이용자에 대해 경고 및 해당 서비스의 제한・정지・종료 조치 가능 +4.6 +일본 +일본의 정부 부처들은 AI라는 새로운 법적 문제와 관련한 가이드라인을 발표 +●2024년 1월, 일본 총무성과 경제산업성은 ‘기업을 위한 AI 가이드라인 초안’을 발표하였음. 이 가이 +드라인은 기업 및 정부 기관의 AI 개발자, 제공자 및 사용자를 대상으로 하고, 비업무용 사용자는 +제외됨 +주요 7개국(G7)이 2023년 5월 일본 히로시마에서 연 정상회의를 계기로 ‘히로시마 AI 프로세스’에 +합의(2023.10.30.). G7 정상들은 챗GPT 등 첨단 AI의 기회와 변혁 가능성을 강조하며 이와 함께 위 +험을 관리해 법의 지배와 민주주의 가치를 포함한 공유된 원칙을 지킬 필요성을 공유 + + +![이미지 197-0](images/p0197_img0.png) + + +![이미지 197-1](images/p0197_img1.png) + + +![이미지 197-2](images/p0197_img2.png) + + +![이미지 197-3](images/p0197_img3.png) + + +![이미지 197-4](images/p0197_img4.png) + + +--- + +TTA "신뢰할 수 있는 인공지능 개발 안내서"와 비교 및 차별점 +TTA 「신뢰할 수 있는 인공지능 개발 안내서」와 차별점 +본 안내서는 미국, 유럽, 일본 등 해외기관에서 발표한 원칙 및 프레임워크 등을 참조하였고, 국내자료 +로는 과학기술정보통신부/한국정보통신기술협회(TTA)에서 발간한 「신뢰할 수 있는 인공지능 개발 안 +내서: 일반분야」, 국가정보원/국가보안기술연구소에서 발간한 「챗GPT 등 생성형 AI 활용 보안 가이 +드라인」, 금융보안원에서 발간한 「금융분야 AI 보안 가이드라인」 등도 참고하였다. +「신뢰할 수 있는 인공지능 개발 안내서: 일반분야(과기정통부·TTA, 이하 ‘AI 신뢰 안내서’라고 함)」는 +인공지능 신뢰성 확보를 위한 원칙을 수립하는데 주요 목적이 있었다. 이에 따라 윤리, 편향성, 프라이 +버시 등이 AI 서비스의 주요 키워드로 사용되었으나, 본 「인공지능(AI) 보안 안내서」는 신뢰성, 프라이버 +시 등에 관한 항목을 모두 제외하고 보안의 기본원칙에 따라 기밀성·무결성·가용성 보장을 위한 기술적 +요구사항에 초점을 맞추었다. +●AI의 “신뢰성(Trustworthy)”은 AI의 활용 및 적용 과정에서의 편향 및 차별 발생, 설명 가능 여 +부, 오작동 사례 등 크고 작은 이슈가 생겨나면서 2010년대 중후반부터 국제사회에서 논의되기 시 +작하였고, “AI 윤리”라는 개념으로 더욱 널리 알려져 있다. ‘신뢰’는 사전적 정의로 ‘굳게 믿고 의지 +함’을 말하는데, 여기서 ‘무엇’ 때문에 대상을 믿을 수 있는가? 라는 질문에 대한 대답은 천차만별 +일 수 있다. ‘Trustworthy’와 ‘Reliability’ 두 단어 모두 ‘신뢰성’이라 번역되지만, 그 의미는 미세 +한 차이가 있다. Reliability가 성능이나 품질이 견고한가에 달려 있다면, Trustworthy는 결과에 +따른 부작용 여부, 시스템이나 관리체계 수준 등으로 AI를 얼마나 믿고 쓸 수 있는가와 관계가 있 +다. AI 신뢰성을 “인공지능이 내포한 위험과 기술적 한계를 해결하고 활용・확산 과정에서의 위 +험・부작용을 방지하기 위한 가치 기준”으로 정의하기도 한다. 이처럼 신뢰성은 다양한 속성이 고려 +되어야 하는 포괄적 개념이다. 주로 AI의 설명 가능 여부와 투명성, 책임성, 공정성, 안전성 및 강 +건성, 그리고 개인정보보호 등이 이에 해당한다. +●정보 보안(security)은 중요한 정보의 공개, 변경, 파괴를 초래하는 무단 액세스 또는 데이터 유출 +등의 위협으로부터 데이터 및 정보시스템을 보호하는 것을 말하며, 기밀성(Confidentiality), 무결 +성(Integrity) 및 가용성(Availability)의 세 가지 원칙을 보장하기 위한 다양한 기술적인 조치가 수반 +된다. 보안은 신뢰성 보장을 위한 여러 가지 속성 중 “안전성”과 밀접한 관련이 있다. AI의 “안전 +성”은 시스템이 예측 가능하고, 해로운 행동이나 결과를 초래하지 않는 것을 말하며, AI가 인간 사 +용자와 환경에 해를 끼치지 않도록 하는 특성을 가지고 있다. + + +![이미지 198-0](images/p0198_img0.png) + + +![이미지 198-1](images/p0198_img1.png) + + +![이미지 198-2](images/p0198_img2.png) + + +![이미지 198-3](images/p0198_img3.png) + + +![이미지 198-4](images/p0198_img4.png) + + +![이미지 198-5](images/p0198_img5.png) + + +--- + +부록 +●결론적으로 신뢰성과 안전성이 보안 보다 더 큰 개념이며 보안은 AI의 안전성, 크게는 AI의 신뢰성 +을 보장하기 위한 핵심 구성요소로서 기능한다고 말할 수 있다. 따라서 본 「인공지능(AI) 보안 안 +내서」는 보안의 목표인 기밀성・무결성・가용성 보장을 위한 요구사항에 초점을 맞추었다. +부록 그림 1 AI 신뢰 안내서」와 「인공지능(AI) 보안 안내서」의 윤리 기준 비교 +또한 「AI 신뢰 안내서(과기정통부・TTA)」가 AI 개발자를 대상으로 한 것과 달리, 본 「인공지능(AI) 보 +안 안내서」는 개발자 뿐만 아니라 서비스 제공자 및 이용자를 대상으로 적용대상을 확대하였다. +부록 표 1 AI 신뢰 안내서(TTA)와 AI 보안 안내서(KISA)의 적용 대상 비교 +AI 신뢰 안내서 적용 대상 +확대 +AI 보안 안내서 적용 대상 +AI 모델, 시스템 등 개발자 +AI 모델, 시스템 등 개발자 +AI 서비스, 플랫폼 제공자 +AI 서비스 이용자 +●「인공지능(AI) 보안 안내서」는 AI 모델을 개발하는 개발자와 개발조직, 모델을 활용하여 서비스를 +제공하는 사업자, 해당 서비스를 이용하여 결과물을 생성한 이용자 모두를 대상으로 하여 각 주체 +별로 AI 보안에 대한 안내서를 마련하였다. 이를 위해 인공지능 발전과 신뢰 기반 조성 등에 관한 +기본법(인공지능 기본법, '26. 1. 22 시행예정), EU AI Act 등을 참고하여 개발자, 서비스 제공자, +이용자의 개념을 아래와 같이 정의하였다. + + +![이미지 199-0](images/p0199_img0.png) + + +![이미지 199-1](images/p0199_img1.png) + + +![이미지 199-2](images/p0199_img2.png) + + +![이미지 199-3](images/p0199_img3.png) + + +![이미지 199-4](images/p0199_img4.png) + + +![이미지 199-5](images/p0199_img5.png) + + +--- + +- “개발자”라고 하면 주로 소프트웨어 개발자(Developer 혹은 Engineer) 또는 개발 조직(기업)을 +지칭하며, 이들은 시스템 분석가의 요구에 맞게 컴퓨터 프로그래밍을 하거나 시스템 설계를 하는 +사람 또는 조직(기업)을 말한다. 안내서에서 개발자는 요구사항 및 검증항목에 따라 조직의 구성 +원 개인일 수도 있고 팀(조직) 또는 회사가 될 수도 있다. 따라서 개발자가 실제 이 안내서를 참 +고할 때 해당 내용이 개발자 개인에 관한 것인지 아니면 조직 또는 회사가 주도적으로 해야 할 +것인지 여부에 대한 혼란이 있을 수 있다. 그래서 「인공지능(AI) 보안 안내서」에서는 요구사항 +별로 수행주체를 명시적으로 표시하였다. +- “서비스제공자”는 업으로서 AI 서비스 또는 AI 부수 서비스를 타인에게 제공하는 자를 말한다. +“업으로” 한다는 것은 같은 행위를 계속하여 반복하는 것을 의미하고, 여기에 해당하는지 여부는 +단순히 그에 필요한 인적 또는 물적 시설의 구비 여부와는 관계없이 행위의 반복・계속성 여부, +영업성의 유무, 그 행위의 목적이나 규모・횟수・기간・태양 등의 여러 사정을 종합적으로 고려하 +여 사회통념에 따라 판단하여야 한다. 이 안내서에서 서비스제공자는 영리를 목적으로 AI 서비 +스를 제공하는 법인(회사 등)을 말한다. 그러나 실제 업무 수행 시에는 임직원 개인이 해야 할 +것인지 아니면 조직 또는 회사가 해야 할 것인지 불명확한 경우가 있을 수 있다. 따라서 「인공지 +능(AI) 보안 안내서」에서는 이를 명확히 하고자 요구사항 별로 수행주체를 표기하였다. +- “이용자”는 AI 서비스 또는 AI 부수 서비스를 타인에게 제공하지 않고 AI 서비스 또는 AI 부수 +서비스를 이용하는 사람을 말한다. 이러한 “이용자” 개념에는 업으로서 AI 시스템 또는 AI 서비 +스를 이용하는 사람(이하 “AI 비즈니스 이용자”라고 함)이 포함될 수도 있으나, 본 「AI 이용자를 +위한 보안 수칙」의 적용 대상은 AI 서비스를 이용하는 일반 국민을 대상으로 작성하였다. +부록 그림 2 AI 서비스 관련 사업 활동의 주체 + + +![이미지 200-0](images/p0200_img0.png) + + +![이미지 200-1](images/p0200_img1.png) + + +![이미지 200-2](images/p0200_img2.png) + + +![이미지 200-3](images/p0200_img3.png) + + +![이미지 200-4](images/p0200_img4.png) + + +![이미지 200-5](images/p0200_img5.png) + + +--- + +부록 +보안 측면에서 중요한 “파기” 단계를 추가하여 AI 서비스의 생명주기 차별화 +●「AI 신뢰 안내서」가 인공지능 생명주기의 각 단계별로 인공지능의 신뢰성을 확보하기 위한 주요 +요구사항을 5단계로 구분한 반면, 「인공지능(AI) 보안 안내서」는 보안 측면에서 중요한 “파기” 단 +계를 추가하여 총 6단계로 구분하였으며, 생명주기 단계별 세부 내용도 차별화하였다. +부록 그림 3 인공지능 서비스의 생명주기 +AI 신뢰 안내서 생명주기 +AI 보안 안내서 생명주기 + +## 1. 계획 및 설계 + + +## 1. 계획 및 설계 + + +## 2. 데이터 수집 및 준비 + + +## 2. 데이터 수집 및 처리 + + +## 3. 모델 개발(학습/모델링/검증) + + +## 3. 인공지능 모델개발 + + +## 4. 모델 배포 + + +## 4. 시스템 구현 + + +## 5. 모니터링 및 유지보수 + + +## 5. 운영 및 모니터링 + + +## 6. 파기 + +- 「인공지능(AI) 보안 안내서」에서 정의한 각 단계별 목표와 주요 활동은 다음과 같다. +부록 표 2 인공지능 생명주기별 주요활동(인공지능(AI) 보안 안내서) +생명주기 +목표 +주요 활동 + +## 1. 계획 및 설계 + +AI 시스템이 해결할 목표 및 +성공 지표를 정의 +∙AI가 해결할 수 있는 비즈니스 및 기술적 목표를 정의 +∙AI 시스템 관리 감독 조직 및 방안 마련 +∙AI시스템 위험요소 분석 및 대응 방안 마련 + +## 2. 데이터 수집 + +및 준비 +AI 모델을 학습하고 개발하는 데 +사용할 데이터를 수집하고, 사전 +처리 및 모델 개발에 적합한 +형식으로 변환 +∙데이터 소스(구조화된 데이터 및 구조화되지 않은 데이터, 센 +서 데이터, 과거 데이터 세트 등)를 정의함 +∙데이터 사용과 관련된 보안 정책 및 법적 제약을 고려함 +∙누락된 데이터를 처리하고 중복을 제거하고 데이터 일관성 보장 +∙데이터 세트를 학습, 검증 및 테스트 세트로 분할함 + +## 3. 모델 개발 + +AI 모델을 구축하고, 학습하여 +성능 평가를 통해 필요한 지표를 +충족 +∙적절한 기술(예: 머신 러닝, 딥 러닝, 자연어 처리), 알고리즘 +(예: 의사 결정 트리, 신경망, SVM 등)과 모델 아키텍처 선택 +∙준비된 데이터를 사용하여 모델 학습, 하이퍼파라미터 조정 +∙모델을 검증 또는 보이지 않는 테스트 데이터 세트에서 테스 +트하여 정확도와 견고성을 확인함 + +## 4. 모델 배포 + +학습된 AI 모델을 실제 +애플리케이션에서 예측할 수 +있는 프로덕션 환경에 통합 +∙클라우드 서비스, 에지 장치 또는 내부 서버 내에서 모델을 +패키징하여 배포 +∙모델이 실시간 또는 일괄 모드에서 다른 시스템이나 서비스와 +상호 작용할 수 있는지 확인 + +## 5. 모니터링 및 + +유지보수 +배포된 모델의 성능을 +지속적으로 모니터링하고 시간이 +지남에 따라 유지 관리 +∙시간 경과에 따른 모델 성능 추적 +∙배포 후에 나타나는 보안취약성을 감지하고 완화함 +∙모델 및 기반 인프라에 대한 업데이트 및 패치를 구현 + +## 6. 파기 + +더 이상 유용하지 않거나 +교체해야 할 때 AI 모델을 +안전하게 폐기 +∙모델을 폐기하기 전에 중요한 데이터와 로그를 백업 +∙잔여 데이터나 지적 재산이 유출되지 않도록 함 +∙폐기 사유와 향후 모델을 위해 얻은 교훈을 문서화 + + +![이미지 201-0](images/p0201_img0.png) + + +![이미지 201-1](images/p0201_img1.png) + + +![이미지 201-2](images/p0201_img2.png) + + +![이미지 201-3](images/p0201_img3.png) + + +![이미지 201-4](images/p0201_img4.png) + + +--- + +사이버 보안 위협으로부터 AI 서비스를 보호하는 것에 초점을 맞춤 +●「AI 신뢰 안내서」는 인공지능 신뢰성에 필요한 요건을 정의하고자 「인공지능 윤리기준」의 10대 +핵심요건을 준용하여 기술적 관점에서 필요한 요구사항과 검증항목으로 ①다양성 존중, ②책임성, ③ +안전성, ④투명성을 도출하였다. 그리고 최종적으로 검증 가능한 15개의 요구사항과 이에 매칭되는 +69개의 정성・정량적 검증항목이 도출되었다. +부록 표 3 인공지능 생명주기별 요구사항 및 검증항목 수(AI 신뢰 안내서) +생명주기 +요구사항 +검증항목 + +## 1. 계획 및 설계 + +4개 +21개 + +## 2. 데이터 수집 및 처리 + +3개 +18개 + +## 3. 인공지능 모델개발 + +4개 +12개 + +## 4. 시스템 구현 + +3개 +14개 + +## 5. 운영 및 모니터링 + +1개 +4개 +15개 +69개 +●반면에 「인공지능(AI) 보안 안내서」는 「인공지능 윤리기준」의 10대 핵심요건에서 편향성, 프라이버 +시 등 윤리적 요소를 모두 배제하고 “안전성”만을 고려하였다. 특히, 안전성 중에서도 정보보안(기밀 +성・무결성・가용성)의 관점에서 사이버 보안 위협으로부터 AI 서비스를 보호하는 것에 초점을 맞추 +었다. 그리고 최종적으로 검증 가능한 14개의 요구사항과 이에 매칭되는 57개의 정성・정량적 검증 +항목을 도출하였다. +부록 표 4 인공지능 생명주기별 요구사항 및 검증항목 수(인공지능(AI) 보안 안내서) +생명주기 +요구사항 +검증항목 + +## 1. 계획 및 설계 + +2개 +6개 + +## 2. 데이터 수집 및 준비 + +3개 +9개 + +## 3. 모델 개발(학습/모델링/검증) + +4개 +22개 + +## 4. 모델 배포 + +2개 +9개 + +## 5. 모니터링 및 유지보수 + +2개 +8개 + +## 6. 파기 + +1개 +3개 +14개 +57개 +※ 금융보안원에서 발간한 금융분야 AI 보안 가이드라인에서는 데이터 수집 단계(1개 항목), 데이터 전처리(3개 항목), 설 +계・학습(4개 항목), 검증・테스트(6개 항목) 등 총 14개 검증항목 제시 + + +![이미지 202-0](images/p0202_img0.png) + + +![이미지 202-1](images/p0202_img1.png) + + +![이미지 202-2](images/p0202_img2.png) + + +![이미지 202-3](images/p0202_img3.png) + + +![이미지 202-4](images/p0202_img4.png) + + +--- + +부록 +예측형 AI(Pred AI)와 생성형 AI(Gen AI)에 맞게 구별하여 검증항목 제시 +●「인공지능(AI) 보안 안내서」는 요구사항별 검증항목에서 예측형 AI(이하, Pred AI)와 생성형 +AI(Gen AI)를 구별하여 제시하였다. 예측형 AI(Pred AI)와 생성형 AI(이하, Gen AI)는 두 기술의 +목적, 작동 방식, 위험 요소가 서로 다를 수 있으므로, 각 기술의 특성과 관련된 위협을 명확히 이해 +하고 이에 적합한 보안 대책을 수립하는 것이 중요하다. 따라서 본 「인공지능(AI) 보안 안내서」에서 +는 이를 구별하여 AI 개발자와 AI 서비스 제공자 대상 보안요구사항과 검증항목을 제시하였다. +- Pred AI는 과거 및 현재 데이터를 사용하여 패턴을 식별하고 해당 정보를 기반으로 추론한다. +이는 주로 통계 알고리즘과 ML(기계학습)에 사용한다. 반면에 Gen AI는 한 단계 더 나아가 딥 +러닝을 사용하여 학습된 데이터를 기반으로 새로운 콘텐츠를 생성한다. +- 이러한 기술적 특성으로 인해 데이터 관련 문제라 하더라도 위험 요소가 서로 다를 수 있다. 예 +를 들어 Pred AI는 정확한 예측을 지원할 수 있도록 고품질 데이터와 라벨링이 필요할 것이고, +Gen AI는 모델의 학습 기반이 된 데이터를 제공하는 오픈소스 모델을 안전하게 사용하는 것에 +초점을 맞추는 것이 중요하므로 이에 맞는 보안 검증항목이 필요하다. +- 따라서 개발자나 서비스 제공자 등은 발생한 위험이 어떠한 AI 유형과 관련이 있는지 사전에 파 +악하는 것이 매우 중요하고, 이를 반영한 검증항목이 필요할 것으로 예측된다. 이에 본 「인공지 +능(AI) 보안 안내서」에서는 요구사항 및 검증항목 별로 이를 구분하여 제시하였다. 예측형 AI와 +생성형 AI에 따라 구별하여 점검하면, 각 기술에 필요한 보안 조치를 적절하게 파악하고 자원을 +효율적으로 분배할 수 있어, 과도하거나 불필요한 보안 비용을 줄일 수 있을 것으로 기대된다. +요구사항의 공통점과 차이점 분석(요약비교) +●「AI 신뢰 안내서」와 「인공지능(AI) 보안 안내서」 모두 요구사항 도출에 있어서 “안전성”을 고려하기 때 +문에 해당 부분에 한해서 일부 중복이 있을 수 있으나, 「인공지능(AI) 보안 안내서」에서는 보안을 중심 +으로 보다 더 구체적으로 요구사항을 정의하고, 각 요구사항별 하위 검증항목에서도 차별화하였다. +부록 표 5 안전성 관련 요구사항 정의 +AI 신뢰 안내서 +다양성 +존중 +책임성 +안전성 +투명성 +AI 보안 안내서 + +## 02. 인공지능 거버넌스 체계 구성 + +○ +○ +○ +○ +1.1 AI 보안 거버넌스 체계 구축 + +## 05. 데이터 강건성 확보를 위한 이상 + +데이터 점검 +○ + +### 2.3 데이터 공격에 대한 방어 + + +## 07. 오픈소스 라이브러리의 보안성 및 + +호환성 확보 +○ +○ + +### 3.3 오픈소스 라이브러리 보안 + + +## 09. 인공지능 모델 공격에 대한 방어 대책 + +수립 +○ + +### 3.2 모델 공격에 대한 방어 + + +![이미지 203-0](images/p0203_img0.png) + + +![이미지 203-1](images/p0203_img1.png) + + +![이미지 203-2](images/p0203_img2.png) + + +![이미지 203-3](images/p0203_img3.png) + + +![이미지 203-4](images/p0203_img4.png) + + +--- + +부록 표 6 요구사항별 검증항목 분석 +AI 신뢰 안내서 +차별점 + +## 02. 인공지능 거버넌스 체계 구성 + +1.1 AI 보안 거버넌스 체계 구축 +∙실제 조직 내 정책 및 인력은 +다르게 구성됨 +※ 정책, 조직, 인력 등 거버넌스 관련 일반적인 공통사항에 해당 + +## 05. 데이터 강건성 확보를 위한 이상 + +(Abnormal) 데이터 점검 + +### 2.3 데이터 공격에 대한 방어 + +∙각 공격 유형을 세분화해 방어 +대책 제시 +∙데이터 중독, 회피 등 방어 대책 +∙데이터 중독 방어 대책 +∙데이터 회피 방어 대책 +∙데이터 유출・변조 방어 대책 + +## 07. 오픈소스 라이브러리의 보안성 및 호 + +환성 확보 + +### 3.3 오픈소스 라이브러리 보안 + +∙오픈소스 라이브러리 관련 검토 +사항을 보안관점에서 세분화해 +확인 사항 제시 +∙오픈소스 라이브러리의 안정성 확인, 위 +험요소 관리, 라이선스 준수 사항, 호환성 +및 보안취약점 확인(포괄적 접근) +∙오픈소스 라이브러리의 업데이트 및 취약 +점 관리 +∙오픈소스 라이브러리의 소스코드 직접 검 +토 및 사용에 대한 보안 문제 검토 +∙오픈소스 라이브러리의 실행 시 격리된 +환경 이용 + +## 09. 인공지능 모델 공격에 대한 방어 대책 + +수립 + +### 3.2 모델 공격에 대한 방어 + +∙모델 공격에 대한 유형을 보 +안 관점에서 세분화 하여 확 +인사항 제시 +∙모델 추출 공격 및 모델 회피 공격에 대 +한 방어 +∙데이터 및 기능 도용에 대한 대책 +∙모델 추출 공격에 대한 대책 +∙모델 회피 공격에 대한 대책 +∙모델 포이즈닝에 대한 대책 +∙적대적 예제 공격에 대한 대책 +∙모델 탈취 및 리버스 엔지니어링에 대한 +대책 +∙반복적인 질의에 대한 방어 대책 +∙기계 학습을 활용한 모델 공격에 대한 대책 + + +![이미지 204-0](images/p0204_img0.png) + + +![이미지 204-1](images/p0204_img1.png) + + +![이미지 204-2](images/p0204_img2.png) + + +![이미지 204-3](images/p0204_img3.png) + + +--- + +부록 +인공지능(AI) 보안 안내서 보안 요구사항 및 검증항목과 정보보안 원칙 간 비교 +본 안내서의 모든 보안 요구사항은 기밀성・무결성・가용성 및 책임추적성과 매핑이 가능하도록 구 +성하였다. 아울러 보안 관점에서 개발자의 이해를 돕기 위해 관련 사례 및 예시를 충분히 제시하 +고자 하였다. +부록 그림 4 개발자 대상 보안 요구사항과 정보보안 원칙의 매핑 +생명주기 +검증항목 +보안 원칙 + +## 1. 기획 및 설계 + +1-1 +AI 보안(Security) 거버넌스 체계 구축 + +1-2 +AI 모델 개발에 대한 위험관리 + + +## 2. 데이터 수집 및 준비 + +2-1 +데이터 수집 및 전처리 + +2-2 +데이터 무결성 점검 +2-3 +데이터 공격에 대한 방어 + +## 3. 모델 개발 + +(학습/모델링/검증) +3-1 +학습/검증 환경에 대한 보안 +3-2 +모델 공격에 대한 방어 +3-3 +오픈 소스 라이브러리 보안 +3-4 +LLM 보안 + +## 4. 모델 배포 + +4-1 +모델파일 및 배포 환경 보호 + +4-2 +API 및 인터페이스 보안 + +## 5. 모니터링 및 유지보수 + +5-1 +실시간 모니터링 +5-2 +보안 패치 및 업데이트 관리 + +## 6. 파기 + +6-1 +파기 시 보안 +●서비스 제공자를 위한 「인공지능(AI) 보안 안내서」는 AI 서비스 제공 Life Cycle - ①서비스 계획 +및 설계(Service Planning and Design), ②서비스 개발 및 구축(Service Development and +Deployment), ③서비스 제공 및 운영(Service Delivery and Operation), ④서비스 유지보수 및 지원 +(Service Maintenance and Support), ⑤피드백 및 서비스 개선(Feedback and Imprrovement) +– 각각에서 보안점검 사항을 도출하였다. +- 도출된 점검사항은 개발자의 경우와 마찬가지로 기밀성, 무결성, 가용성 및 책임추적성과 매핑이 +가능하다. + + +![이미지 205-0](images/p0205_img0.png) + + +![이미지 205-1](images/p0205_img1.png) + + +![이미지 205-2](images/p0205_img2.png) + + +![이미지 205-3](images/p0205_img3.png) + + +![이미지 205-4](images/p0205_img4.png) + + +![이미지 205-5](images/p0205_img5.png) + + +![이미지 205-6](images/p0205_img6.png) + + +![이미지 205-7](images/p0205_img7.png) + + +![이미지 205-8](images/p0205_img8.png) + + +![이미지 205-9](images/p0205_img9.png) + + +--- + +부록 표 7 서비스 제공자를 위한 보안 요구사항 및 검증항목 수(인공지능(AI) 보안 안내서) +서비스 제공 Life Cycle +요구사항 +검증항목 + +## 1. 서비스 계획 및 설계 + +3개 +9개 + +## 2. 서비스 개발 및 구축 + +4개 +15개 + +## 3. 서비스 제공 및 운영 + +2개 +7개 + +## 4. 서비스 유지보수 및 지원 + +2개 +9개 + +## 5. 피드백 및 서비스 개선 + +1개 +4개 +합계 +12개 +44개 +부록 그림 5 서비스제공자 대상 보안 요구사항과 정보보안 원칙의 매핑 +생명주기 +검증항목 +보안 원칙 + +## 1. 서비스 설계 및 계획 + +1-1 +AI 보안(Security) 거버넌스 체계 구축 +1-2 +AI 서비스에 대한 위험관리 +1-3 +서비스 수준 계약(SLA) 관리 + +## 2. 서비스 개발 및 구축 + +2-1 +코드 및 알고리즘 보안 +2-2 +모델 환경의 보안 + +2-3 +데이터 보안 +2-4 +API 및 인터페이스 보안 + +## 3. 서비스 제공 및 운영 + +3-1 +로그 및 운영 데이터 +3-2 +파기 + +## 4. 서비스 유지보수 및 지원 + +4-1 +모니터링, 업데이트 및 배치 +4-2 +성능 및 장애관리 + +## 5. 피드백 및 서비스개선 + +5-1 +사용자 피드백 관리 + + +![이미지 206-0](images/p0206_img0.png) + + +![이미지 206-1](images/p0206_img1.png) + + +![이미지 206-2](images/p0206_img2.png) + + +![이미지 206-3](images/p0206_img3.png) + + +![이미지 206-4](images/p0206_img4.png) + + +![이미지 206-5](images/p0206_img5.png) + + +![이미지 206-6](images/p0206_img6.png) + + +![이미지 206-7](images/p0206_img7.png) + + +--- + +부록 +이용자 대상 AI 안내서 비교 +각 부처에서 발표한 AI 관련 안내서・가이드는 주로 AI 서비스 개발자가 적용대상이고, 챗GPT 등 특 +정 서비스 이용자에 대해 윤리 또는 신뢰에 근거한 행동 수칙을 담고 있다. 이는 AI 이용자 대상 가이드 +를 발표한 캐나다, 일본 등 해외의 경우에도 크게 다르지 않아 보인다. +●이에 반해, 이용자 대상 「인공지능(AI) 보안 안내서」는 일반적인 원칙 선언에 그치지 않고 AI 서비 +스 접속・이용 단계에서 보안 강화를 위해 이용자가 지켜야 할 구체적인 행동 지침을 제공하는 것에 +초점을 맞추어 차별화하였다. +부록 표 8 이용자 대상 인공지능(AI) 보안 안내서 비교 +구 분 +이용자 대상 가이드 유무 +내용 +없음 +가이드 제시 +일반 원칙 +구체적인 +행동수칙 제시 +인공지능(AI) 보안 안내서(본 안내서) +○ +○ +○ +신뢰할 수 있는 인공지능 개발 안내서 +(과기정통부/TTA, ‘24.4) +○ +챗GPT 등 생성형 AI 활용 보안 가이드라인 +(국가정보원/국가보안기술연구소, ‘23.6) +○ +(챗GPT 중심) +○ +(챗GPT 중심) +안전한 AI 시스템 개발을 위한 가이드라인 +(국가정보원, ‘23.11) +○ +금융분야 인공지능 가이드라인 +(금융위, ‘21.7) +○ +금융분야 AI 보안 가이드라인 +(금융보안원, ‘23.4) +○ + + +![이미지 207-0](images/p0207_img0.png) + + +![이미지 207-1](images/p0207_img1.png) + + +![이미지 207-2](images/p0207_img2.png) + + +![이미지 207-3](images/p0207_img3.png) + + +![이미지 207-4](images/p0207_img4.png) + + +![이미지 207-5](images/p0207_img5.png) + + +--- + +TTA 신뢰할 수 있는 인공지능 개발 안내서와 요구사항별 상세비교 +●TTA 신뢰할 수 있는 인공지능 개발 안내서와 요구사항별 상세 비교를 하면, 유사항목은 6개이고, 본 +<인공지능(AI) 보안 안내서>에서 보안 관점에서 확대된 항목은 20개, 신규로 추가된 항목은 31개로 나 +타나 검증항목 내용상 차이가 있음 +< AI 신뢰 안내서 > +* 15개 요구사항 69개 검증항목 +< 인공지능(AI) 보안 안내서 > +* 14개 요구사항 57개 검증항목 +(유사 6개/ 확대 20개 / 신규 31개) +요구사항 및 체크리스트 +요구사항 및 체크리스트 +인공지능 시스템의 위험 관리 계획 및 수행 +4개→3개 +1.2 +AI 모델개발에 대한 위험관리 계획의 수립 +유사 +01-1 +인공지능 시스템 생명주기에 걸쳐 나타날 수 있는 위험 +요소를 분석하였는가? + +#### 1.2.1 + +AI 모델개발 생명주기에 걸쳐 나타날 수 있는 위 +험요소를 분석・도출하고 있는가? +유사 +01-1a +인공지능 시스템의 위험 요소를 도출하고 이의 파급효 +과를 파악하였는가? + +#### 1.2.2 AI 시스템에 대한 위협 모델링 및 위험 평가를 수 + +행하고 있는가? +유사 +01-1b +인공지능 기술 적용을 어렵게 만드는 위험 요소가 있는 +지 확인하였는가? + +#### 1.2.3 AI 시스템에 대한 위험요소를 제거・완화하기 위 + +한 방안을 마련하고 있는가? +유사 +01-2 +위험요소를 제거 및 방지하거나 영향을 완화하기 위한 +방안을 마련하였는가? +01-2a 위험 요소별 완화 또는 제거 방안을 마련하였는가? +01-2b 위험 요소의 파급효과가 감소하였는지 확인하였는가? +인공지능 거버넌스 체계 구성 +5개→3개 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +유사 +02-1 +인공지능 거버넌스에 대한 지침 및 규정을 수립하였는 +가? + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구 +성되어 있는가? +유사 +2-1a +내부적으로 준수해야 할 인공지능 거버넌스에 대한 지 +침 및 규정을 마련하였는가? + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, +프로세스가 구현되어 있는가? +유사 +2-2 +인공지능 거버넌스를 위한 조직을 구성하고 인력 구성 +에 대해 검토하였는가? + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력 +을 갖추고 있는가? +유사 +2-2a +인공지능 거버넌스를 위한 조직을 구성하였는가? +※ 보안을 위한 별도의 거버넌스 필요성 존재 +2-2b +인공지능 거버넌스를 위한 조직은 전문성을 갖춘 인력 +으로 구성하였는가? +2-3 +인공지능 거버넌스 체계가 올바로 이행되고 있는지 감 +독하고 있는가? +2-3a +인공지능 거버넌스에 대한 내부 지침 및 규정 준수 여부 +를 감독하고 있는가? +2-4 +인공지능 거버넌스 조직이 신규 및 기존 시스템의 차이 +점을 분석하였는가? +2-4a +기존 동일 목적의 시스템과 비교하여, 신규 시스템이 개 +선할 수 있는 사항을 분석하였는가? +인공지능 시스템의 신뢰성 테스트 계획 수립 +03-1 +인공지능 시스템의 특성을 고려한 테스트 환경을 설계 +하였는가? +03-1a 테스트 환경 결정 시 인공지능 시스템의 운영환경을 고 +려하였는가? +03-1b 가상테스트 환경이 필요한 인공지능 시스템의 경우, 시 +뮬레이터를 확보하였는가? +03-2 +인공지능 시스템의 테스트 설계에 필요한 협의 체계를 +구성하였는가? +03-2a 인공지능 시스템의 기대 출력을 결정하기 위한 협의 체 +계를 구성하였는가? +03-2b 설명가능성 및 해석가능성 확인을 위한 사용자 평가단 +을 구성하였는가? + + +![이미지 208-0](images/p0208_img0.png) + + +![이미지 208-1](images/p0208_img1.png) + + +![이미지 208-2](images/p0208_img2.png) + + +![이미지 208-3](images/p0208_img3.png) + + +![이미지 208-4](images/p0208_img4.png) + + +--- + +부록 +인공지능 시스템의 추적가능성 및 변경이력 확보 +04-1 +인공지능 시스템의 의사결정에 대한 추적 방안을 수립 +하였는가? +04-1a 인공지능 시스템의 의사결정에 대한 기여도 추적 방안 +은 확보하였는가? +04-1b 인공지능 시스템의 의사결정 추적을 위한 로그 수집 기 +능을 구현하였는가? +04-1c 지속적인 사용자 경험 모니터링을 위해 사용자 로그를 +수집 및 관리하고 있는가? +04-2 +학습 데이터의 변경 이력을 확보하고, 데이터 변경이 미 +치는 영향을 관리하였는가? +04-2a 데이터 흐름 및 계보를 추적하기 위한 조치를 마련하였 +는가? +04-2b 데이터 소스 변경에 대한 모니터링 방안을 확보하였는가? +04-2c 데이터 변경 시, 버전 관리를 수행하였는가? +04-2d 데이터 변경 시, 이해관계자를 위한 정보를 제공하는가? +04-2e 신규 데이터 확보 시, 인공지능 모델의 성능평가를 재수 +행하였는가? +데이터 활용을 위한 상세 정보 제공 +05-1 +데이터의 명확한 이해와 활용을 지원하는 상세한 정보 +를 제공하는가? +05-1a 정제 전과 후의 데이터 특성을 설명하였는가? +05-1b 학습 데이터의 메타데이터를 구분하고 각 명세자료를 +확보하였는가? +05-1c 보호변수의 선점 이유 및 반영 여부를 설명하였는가? +05-1d 라벨링 작업자를 위한 교육을 시행하고 작업 가이드 문 +서를 마련하였는가? +05-2 +데이터의 출처는 기록 및 관리되고 있는가? +05-2a 신뢰할 수 있는 출처로부터 제공되는 데이터셋을 사용 +하였는가? +05-2b 오픈소스 데이터셋을 활용하는 경우, 출처를 명시하였 +는가? +데이터 견고성 확보를 위한 이상 데이터 점검 +06-1 +이상 데이터의 식별 및 정상 여부를 점검하였는가? +06-1a 전체 학습용 데이터 분포를 시각화하여 발생 가능한 오 +류들을 확인하였는가? +06-1b 학습 데이터 이상값 식별 기법을 적용하였는가? +06-2 +데이터 공격에 대한 방어 수단을 강구하였는가? +1개→9개 +2.1 +데이터 수집 및 전처리 +확대 +06-2a 데이터 최적화를 통한 방어 대책을 마련하였는가? + +#### 2.1.1 + +데이터 수집 시 사용되는 네트워크 프로토콜이 충 +분한 보안 기능을 제공하고 있는가? +신규 + +#### 2.1.2 수집된 데이터의 보관 및 삭제 절차가 명확하게 + +정의되어 있는가? +신규 + +#### 2.1.3 전처리 과정에서 중요 데이터를 보호하기 위해 암 + +호화 기술을 사용하고 있는가? +신규 +2.2 +데이터 무결성 검증 +확대 + +#### 2.2.1 데이터 저장 및 전송 시 데이터 무결성을 검증하 + +고 있는가? +신규 + +#### 2.2.2 데이터 처리 과정에서 데이터 무결성을 검증하고 + +있는가? +신규 + +#### 2.2.3 데이터에 접근할 수 있는 권한을 제한하고 있는가? 확대 + +2.3 +데이터 공격에 대한 방어 +확대 + +#### 2.3.1 데이터 중독(poisoning) 공격에 대한 방어 대 + +책을 마련하고 있는가? +확대 + +#### 2.3.2 데이터 회피(evasion) 공격에 대한 방어 대책을 + +마련하고 있는가? +확대 + +#### 2.3.3 데이터 유출・변조 공격을 방지하기 위한 방안을 + +마련하고 있는가? +신규 + + +![이미지 209-0](images/p0209_img0.png) + + +![이미지 209-1](images/p0209_img1.png) + + +![이미지 209-2](images/p0209_img2.png) + + +![이미지 209-3](images/p0209_img3.png) + + +--- + +수집 및 가공된 학습 데이터의 편향 제거 +07-1 +데이터 수집 시, 인적・물리적 요인으로 인한 편향 완화 +방안을 마련하였는가? +07-1a 인적 편향을 제거하기 위한 절차적, 기술적 수단을 적용 +하였는가? +07-1b 데이터의 다양성 확보를 위해 여러 수집 장치를 활용하 +였는가? +07-2 +학습에 사용되는 특성을 분석하고 선정 기준을 마련하 +였는가? +07-2a 보호변수 선정 시 충분한 분석을 수행하였는가? +07-2b 편향을 발생시킬 수 있는 특성의 영향력을 완화하였는 +가? +07-2c 데이터 전처리 시 특성이 과도하게 제거되었는지 검토 +하였는가? +07-3 +데이터 라벨링 시, 발생 가능한 편향을 확인하고 방지하 +였는가? +07-3a 데이터 라벨링 기준을 명확히 수립하고 작업작에게 제 +공하였는가? +07-3b 다양한 데이터 라벨링 작업자를 섭외하기 위해 노력하 +였는가? +07-4 +데이터의 편향 방지를 위한 샘플링을 수행하였는가? +07-4a 편향 방지를 위한 샘플링 기법을 적용하였는가? +오픈소스 라이브러리의 보안성 및 호환성 검증 +08-1 +오픈소스 라이브러리의 안정성을 확인하였는가? +08-1a 활성화된 오픈소스 라이브러리를 사용하였는가? +08-2 +오픈소스 라이브러리의 위험 요소는 관리되고 있는가? +08-2a 사용 중인 오픈소스 라이브러리의 라이선스 준수사항 +을 이행하였는가? +08-2b 사용 중인 오픈소스 라이브러리의 호환성 및 보안취약 +점을 확인하였는가? +1개→3개 +3.3 +오픈소스 라이브러리 보안 +확대 + +#### 3.3.1 오픈소스 라이브러리의 업데이트 및 취약점을 관 + +리하고 있는가? +확대 + +#### 3.3.2 오픈소스 라이브러리의 소스 코드를 직접 검토하 + +거나 사용에 대한 보안 문제를 검증하고 있는가? 확대 + +#### 3.3.3 + +오픈소스 라이브러리를 실행할 때 잠재적인 보안 +위험을 제거하기 위해 격리된 환경을 이용하고 있 +는가? +확대 +인공지능 모델의 편향 제거 +09-1 +모델 편향을 제거하는 기법을 적용하였는가? +09-1a 개발하려는 모델에 맞게 편향 제거 기법을 선택하였는가? +09-1b 편향성 평가 및 모니터링을 위한 정량적 지표를 선정하 +고 관리하는가? + + +![이미지 210-0](images/p0210_img0.png) + + +![이미지 210-1](images/p0210_img1.png) + + +![이미지 210-2](images/p0210_img2.png) + + +![이미지 210-3](images/p0210_img3.png) + + +--- + +부록 +10 +인공지능 모델 공격에 대한 방어 대책 수립 +2개→8개 +3.2 +모델 공격에 대한 방어 +확대 +10-1 +모델 공격이 가능한 상황을 파악하였는가? + +#### 3.2.1 + +AI 모델이 적대적 의도를 가진 사용자에 의해 데 +이터 및 기능을 도용당하거나 다른 공격에 악용되 +지 않도록 대책을 수립하고 있는가? +확대 +10-1a +데이터 유형별 공격 가능한 적대적 사례를 확인하였는가? + +#### 3.2.2 모델 추출 공격에 대한 방어 방안을 수립하고 있 + +는가? +확대 +10-2 +모델 공격에 대한 방어 수단을 강구하였는가? + +#### 3.2.3 모델 회피 공격에 대한 방어 방안을 수립하고 있 + +는가? +확대 +10-2b 모델 최적화를 통한 방어 대책을 마련하였는가? + +#### 3.2.4 모델 포이즈닝에 대한 방어 방안을 수립하고 있는가? 확대 + + +#### 3.2.5 적대적 예제 공격에 대한 방어 방안을 수립하고 + +있는가? +확대 + +#### 3.2.6 모델 탈취 및 리버스 엔지니어링에 대한 방어 방 + +안을 수립하고 있는가? +신규 + +#### 3.2.7 반복적인 질의에 대한 방어 방안을 수립하고 있는 + +가? +신규 + +#### 3.2.8 기계 학습을 활용한 모델 공격에 대해 능동적으로 + +방어하고 있는가? +신규 +11 +인공지능 모델 명세 및 추론 결과에 대한 설명 제공 +11-1 +인공지능 모델의 명세를 투명하게 제공하는가? +11-1a +사용자 개발 과정과 모델 작동 방식에 대한 세부 정보가 +설명된 문서를 작성하였는가? +11-2 +사용자가 모델 추론 결과의 도출 과정을 수용할 수 있도 +록 근거를 제공하는가? +11-2a +인공지능 모델에 적합한 XAI 기술을 적용하였는가? +11-2b +XAI 기술 적용이 불가능한 경우, 기술 외 대안을 마련하 +였는가? +11-3 +모델 추론 결과에 대한 사용자의 판단을 도울 수 있는 설 +명을 제공하는가? +11-3a +모델 추론 결과에 대한 설명이 필요한지 검토하였는가? +11-3b +사용자에게 인공지능 모델 추론 결과에 대한 설명을 제 +공하였는가? +3.1 +학습/검증 환경에 대한 보안 +신규 + +#### 3.1.1 + +모델 학습을 진행하는 환경이 안전하게 보안조치 +되어 있는가? +신규 + +#### 3.1.2 학습 또는 검증 단계에서 악의적인 사용자가 허위 + +데이터를 삽입할 가능성을 차단하고 있는가? +신규 + +#### 3.1.3 연합 학습(Federated Learning)에 참여하는 + +장치 중 악의적인 장치가 있는지 검증하고 있는가? 신규 +3.4 +LLM 보안 +신규 + +#### 3.4.1 LLM 애플리케이션 공격에 대한 예방책을 마련 + +하고 있는가? +신규 + +#### 3.4.2 LLM의 Model Denial of Service 공격에 대 + +한 방어 방안을 수립하고 있는가? +신규 + +#### 3.4.3 LLM의 API 보안을 위한 방안을 수립하고 있는가? 신규 + + +#### 3.4.4 LLM의 인터페이스 공격에 대한 예방책을 마련 + +하고 있는가? +신규 + +#### 3.4.5 + +개발 환경에서 LLM을 사용할 때 잠재적인 취약 +성의 통합을 방지하기 위한 안전한 코딩 관행과 +지침을 수립하고 있는가? +신규 + +#### 3.4.6 LLM 출력결과를 정기적으로 모니터링하고 검 + +토하고 있는가? +신규 + +#### 3.4.7 LLM의 Prompt Injection 공격에 대한 방어 + +방안을 수립하고 있는가? +신규 + + +![이미지 211-0](images/p0211_img0.png) + + +![이미지 211-1](images/p0211_img1.png) + + +![이미지 211-2](images/p0211_img2.png) + + +![이미지 211-3](images/p0211_img3.png) + + +--- + + +#### 3.4.8 LLM의 벡터 및 임베딩 취약점에 대한 방어 방안 + +을 수립하고 있는가? +신규 +12 +인공지능 시스템 구현 시 발생 가능한 편향 제거 +12-1 +소스 코드 및 사용자 인터페이스로 인한 편향을 제거하 +기 위해 노력하였는가? +12-1a +데이터 접근 방식 구현과정 등 소스 코드에서의 편향 발 +생 가능성을 확인하였는가? +12-1b +사용자 인터페이스 및 상호작용 방식으로 인한 편향을 +확인하였는가? +13 +인공지능 시스템의 안전모드 구현 및 문제발생 알림 절 +차 수립 +13-1 +공격, 성능 저하 및 사회적 이슈 등의 문제 발생 시 대응 +가능한 안전 모드를 적용하는가? +13-1a +문제 상황에 대한 예외 처리 정책이 마련되어 있는가? +13-1b +인공지능 데이터 및 모델 공격에 대해 시스템 측면의 방 +어 대책을 마련하였는가? +(* 06-2 데이터 공격 방어수단, 10 모델 공격 방어 대책 +내용과 유사) +13-1c +인공지능 시스템의 의사결정으로 인한 파급효과가 크고 +불확실성이 높은 경우, 사람의 개입을 고려하였는가? +13-1d +예상되는 사용자 오류에 대한 안내 및 대응을 제공하는 +가? +13-2 +인공지능 시스템에서 문제가 발생할 경우, 시스템은 이 +를 운영자에게 전달하는 기능을 수행하는가? +13-2a 편견, 차별 등 윤리적 문제에 대한 알림 절차를 수립하였 +는가? +13-2b 시스템 성능 저하를 평가하기 위한 지표 및 절차를 설정 +하고 알림 절차를 수립하였는가? +14 +인공지능 시스템의 설명에 대한 사용자의 이해도 제고 +14-1 +인공지능 시스템 사용자의 특성과 제약사항을 분석하 +였는가? +14-1a +사용자 특성에 따른 세부 고려사항을 분석하였는가? +14-2 +사용자 특성에 따른 설명을 제공하는가? +14-2a 사용자 특성에 따른 설명 평가 기준을 수립하였는가? +14-2b 사용자가 이해하기 어려운 전문 용어 사용을 지양하였는가? +14-2c 사용자의 구체적인 행동과 이해를 이끌어낼 수 있도록 +명확한 표현을 사용하였는가? +14-2d 설명이 필요한 위치와 타이밍은 적절한가? +14-2e 사용자 경험을 평가할 수 있는 다양한 사용자 조사 기법 +을 활용하였는가? +4.1 +모델파일 및 배포 환경 보호 +신규 + +#### 4.1.1 + +모델을 배포하기 전에 코드 및 모델을 스캔하고, +자동화된 취약점 분석을 하고 있는가? +신규 + +#### 4.1.2 모델파일을 암호화하여 저장하고 전송 중에도 안 + +전하게 보호하고 있는가? +신규 + +#### 4.1.3 AI 모델이 배포되는 인프라(클라우드, 서버 등) + +환경이 충분한 보안시스템을 갖추고 있는가? +신규 +4.2 +API 및 인터페이스 보안 +신규 + + +![이미지 212-0](images/p0212_img0.png) + + +![이미지 212-1](images/p0212_img1.png) + + +![이미지 212-2](images/p0212_img2.png) + + +![이미지 212-3](images/p0212_img3.png) + + +--- + +부록 + +#### 4.2.1 + +AI 모델이 배포된 후, API를 통해 외부 시스템과 +상호작용하는 경우, 충분한 보안 조치 기능을 갖 +추고 있는가? +신규 + +#### 4.2.2 + +배포된 AI 모델이 실시간으로 데이터를 수신하고 +이를 처리할 때, 중간자 공격(Man-in-the- +Middle Attack)에 대응하고 있는가? +신규 + +#### 4.2.3 + +AI 모델의 API에 대한 접근 권한을 제한하고, 강 +한 인증 메커니즘을 사용해 불법 접근을 방지하고 +있는가? +신규 + +#### 4.2.4 API 사용자는 필요한 권한만 부여받도록 최소 권 + +한 원칙을 적용하고 있는가? +신규 + +#### 4.2.5 AI 시스템에 연결된 모든 장치에 대한 인증 절차를 + +마련하고, 승인된 장치만 연결되도록 하고 있는가? 신규 + +#### 4.2.6 API 호출을 실시간으로 모니터링하여 비정상적인 + +패턴이나 오용 시도를 감지하고 차단하고 있는가? 신규 +15 +서비스 제공 범위 및 상호작용 대상에 대한 설명 제공 +15-1 +인공지능 서비스의 올바른 사용을 유도하기 위한 설명 +을 제공하는가? +15-1a +서비스의 목적과 목표에 대한 설명을 제공하는가? +15-1b +서비스의 한계와 범위에 대한 설명을 제공하는가? +15-2 +사용자가 상호작용하고 있는 대상을 인지할 수 있도록 +설명하는가? +15-2a 사용자와 인공지능이 상호작용하는 서비스 범위를 명 +시하였는가? +15-2b 서비스 내의 최종 의사결정을 수행하는 주체에 대해 사 +용자에게 설명하는가? +5.1 +실시간 모니터링 +신규 + +#### 5.1.1 + +모델의 입력 데이터, 출력 결과 등을 실시간으로 모 +니터링하여 비정상적인 동작을 탐지하고 있는가? 신규 + +#### 5.1.2 모델 응답 시간, 사용 패턴을 추적하고 분석하여 + +보안에 의심스러운 행동을 탐지하고 있는가? +신규 + +#### 5.1.3 AI 모델이 동작하는 서버 및 네트워크의 트래픽을 모 + +니터링하여 비정상적인 요청을 탐지하고 있는가? +신규 + +#### 5.1.4 API 호출, 입력/출력 등 요청로그를 정기적으로 분 + +석하여 보안에 의심스러운 동작을 탐지하고 있는가? 신규 + +#### 5.1.5 + +AI 모델과 배포 환경에 대해 모의 해킹을 수행하 +여 잠재적인 보안 취약점을 탐지하고 수정하고 있 +는가? +신규 +5.2 +보안 패치 및 업데이트 관리 +신규 + +#### 5.2.1 모델에 대한 보안 패치 및 업데이트 관리 프로세 + +스를 구축하고 있는가? +신규 + +#### 5.2.2 모델 배포 후 모델 및 라이브러리의 업데이트가 + +정기적으로 이루어지고 있는가? +신규 + +#### 5.2.3 + +운영 체제, 라이브러리, 프레임워크의 보안 패치 +를 운영 환경에 적용하기 전에 스테이징 환경에서 +패치를 테스트하고 있는가? +신규 +6.1 +파기 시 보안 +신규 + +#### 6.1.1 + +AI 모델이 더 이상 사용되지 않으면, 모델 파일을 완 +전히 삭제하고 복구할 수 없도록 처리하고 있는가? 신규 + +#### 6.1.2 AI 모델에서 사용 중이던 데이터가 시스템을 폐 + +기하거나 교체할 때 안전하게 삭제되고 있는가? 신규 + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면, 해당 모델과 +연결된 API나 인터페이스를 비활성화하여 외부 +접근을 차단하고 있는가? +신규 + + +![이미지 213-0](images/p0213_img0.png) + + +![이미지 213-1](images/p0213_img1.png) + + +![이미지 213-2](images/p0213_img2.png) + + +![이미지 213-3](images/p0213_img3.png) + + +--- + +국내 주요 AI 보안 가이드라인 비교 +최근 몇 년 동안 각 부처는 소관 업무와 관련된 인공지능 정책을 수립하고 있으며, AI 운영의 방향성 +을 보여주는 안내서를 발표하고 있음. +국내 주요 AI 안내서 +구분 +챗GPT 등 생성형 AI 활용 +보안 가이드라인 +(국가정보원, ‘23. 6.) +금융분야 AI 보안 +가이드라인 +(금융보안원, ‘23. 4.) +신뢰할 수 있는 인공지능 +개발 안내서 - 일반분야 +(과기정통부, ’23.7) +인공지능 시대 안전한 +개인정보 활용 정책 방향 +(개인정보위, ’23.8) +배경 +• 챗 GPT 등 생성형 AI를 +안전하게 활용할 수 있도 +록 정부 차원의 보안 대책 +필요 +• 국내・외 금융분야의 AI 기 +반 금융서비스 및 시스템 +에 대한 신뢰성 확보를 위 +한 대책 필요 +• 국내 AI 서비스, 시스템 개 +발 환경 및 실제 실무를 기 +반하는 요구사항 및 검증 +항목 필요 +• 생성형 AI, 자율주행차, 로 +봇 등 데이터 수집・활용에 +서 발생하는 개인정보 침 +해에 대한 정부 차원의 규 +범 필요 +목적 +• 생성형 AI를 활용하는 과 +정에서 업무상 비밀・개인 +정보 유출 등 기술 악용 및 +보안 문제를 사전 예방하 +기 위한 방안 제시 +• 금융산업 AI 학습용 데이 +터 정확성・안정성 확보, +AI 금융 서비스의 투명성・ +공정성 담보 등을 하기 위 +한 방안 제시 +• AI 서비스 개발 시 최소한 +의 신뢰성을 확보하고, 중 +소기업 등의 자율 점검체 +계 구축 등에 기여 +• AI 환경에서의 프라이버시 +침해 위험 최소화하기 위 +한 정책 방향 수립 및 관련 +추진 과제 제시 +주요 +대상 +• 정부, 공공・민간분야 및 일 +반 국민 +• 금융기관, 금융 서비스 개 +발 업체 등 +• AI 서비스 개발 실무자 및 +AI 서비스 관련 기업・기관 +• AI 모델・서비스 개발・제공 +기업, 기관 및 이용자 +목차 +및 +주요 +내용 + +## 1. 개요 + + +## 2. 생성형 인공지능 기술의 + +대표적인 보안 위협 +※ AI 서비스 취약점 공격, +사이버 범죄 악용, 불법 +콘텐츠 생성, 정보 유출 +등 사례 소개 + +## 3. 안전한 생성형 인공지능 + +기술 사용 가이드라인 +※ 기관의 정보보호・정보보 +안 담당자 등을 대상으로 +효율적으로 안전하게 서 +비스를 활용할 수 있는 +방안 제시 +※ (안내사항) 서비스 사용 +주의사항, 서비스와 대화 +시 주의사항, AI 모델 플 +러그인 사용 주의사항, +AI 모델 확장 프로그램 + +## 1. 개요 + +2. AI 서비스 구성 +※ AI 서비스의 전반적인 구 +성, 기능 및 운영 방안 등 +소개 +3. AI 학습 데이터 및 +모델 보안 관리 +※ 다음 4단계의 AI 모델 개 +발 주기에 따른 보안 방 +안 제시 + +## 1. 개요 + + +## 2. 요구사항 및 검증항목 + +※ 다음의 AI 생명주기 별 +안전한 시스템 구축, 서비 +스 활용을 위한 요구사항 +제시 +① 계획 및 설계: ▲위험관 +리 계획 및 수행 ▲거버 +넌스 체계 구성 +▲시스템 신뢰성 테스트 +계획 수립 +②데이터 수집 및 처리: +▲데이터 활용을 위한 상 +세 정보 제공 ▲이상 데 +이터 점검 ▲학습 데이터 +의 편향 제거 +③ 인공지능 모델 개발: +▲모델 편향 제거 ▲모델 +공격에 대한 방어 대책 + +## 1. 추진 배경 + +2. AI 데이터 처리방식 변화 +와 프라이버시 이슈 +3. AI와 개인정보 보호 기본 +원칙 +※ ①헌법상 개인정보자기결 +정권, ②개인정보보호 원 +칙 기반 AI에 대한 기본원 +칙 제시 + +## 4. 인공지능 단계별 데이터 + +처리기준과 보호조치 +※ ①AI 모델・서비스 기획 +②데이터 수집 ③데이터 +학습 ④AI 서비스 각 단 +계별 개인정보 처리, 활 +용, 관리 및 정보보호 등 +을 위한 정책적 필요사항 + + +![이미지 214-0](images/p0214_img0.png) + + +![이미지 214-1](images/p0214_img1.png) + + +![이미지 214-2](images/p0214_img2.png) + + +![이미지 214-3](images/p0214_img3.png) + + +![이미지 214-4](images/p0214_img4.png) + + +--- + +부록 +구분 +챗GPT 등 생성형 AI 활용 +보안 가이드라인 +(국가정보원, ‘23. 6.) +금융분야 AI 보안 +가이드라인 +(금융보안원, ‘23. 4.) +신뢰할 수 있는 인공지능 +개발 안내서 - 일반분야 +(과기정통부, ’23.7) +인공지능 시대 안전한 +개인정보 활용 정책 방향 +(개인정보위, ’23.8) +사용 주의사항, AI 모델 +생성 기반 공격 대처 방 +안 + +## 4. 생성형 인공지능 기반 정 + +보화사업 구축 방안 및 +보안 대책 +※ ①구축 유형별 생성 AI +기술 도입시 고려사항, ② +AI 모델 API 활용 및 민 +간 AI 모델 도입 방안, ③ +자체 데이터 세트 및 AI +모델 구축 단계별* 보안 +위협 대응 방안 등으로 +구성하여 보안 대책 제시 +* (AI 모델 구축 단계) ▲ 데 +이터 수집/전처리 ▲모델 +학습 ▲평가 및 테스트 ▲ +배포 및 서비스 +단계 +주요 내용 +학습 +데이터 +수집 +AI 모델 학습에 +필요한 데이터 +수집 단계 +학습 +데이터 +전처리 +AI 모델에 적합한 +형태로 변환하고 +데이터 오염 여부 +확인 단계 +모델 +설계・ +학습 +AI 모델을 +설계하고 학습하는 +단계 +모델 +검증 +・테스트 +AI 모델의 성능 +확인 및 테스트 +단계 +※ AI 모델 대상 보안 공격 +기법: 데이터 오염 공격, +모델 오염 공격, 모델 추 +출 공격, 모델 인버전 공 +격, 회피 공격 +수립, ▲모델 명세 및 추 +론 결과에 대한 설명 제공 +④시스템 구현: ▲시스템에 +서의 편향 제거 ▲안전모 +드 구현 및 문제 발생 알 +림 절차 수립 +▲사용자 이해도 제고 +⑤운영 및 모니터링: ▲추 +적 가능성 및 변경이력 +확보, ▲서비스 제공 범 +위 및 상호작용 대상 설 +명 제공 + +## 3. 부록 + +분석 및 정책 추진 방향 +제시 + +## 5. 원칙 기반 규율 추진체계 + +※ AI 분야 정부・민간 간 소 +통・협력의 구심점으로서 +개인정보 규제를 함께 설 +계하고 국제적인 공조 체 +계를 구축 등 추진 +※ AI 프라이버시 전담팀 및 +AI 프라이버시 민・관 정 +책협의회 구성・운영 + +## 6. 향후 계획 + +응용 +분야 +• 정부 서비스 및 기타 민간 +분야 +• 금융 서비스, 시스템 등 AI +적용이 가능한 금융 분야 +전반 +• AI 적용이 가능한 공공・민 +간 全분야 +• AI 적용이 가능한 공공・민 +간 全분야 + + +![이미지 215-0](images/p0215_img0.png) + + +![이미지 215-1](images/p0215_img1.png) + + +![이미지 215-2](images/p0215_img2.png) + + +![이미지 215-3](images/p0215_img3.png) + + +--- + +AI 개발자 대상 보안 프레임워크 +프레임워크 개념과 필요성 +현재 많은 분야에서 다양하게 프레임워크라는 말을 쓰고 있고 기술과 시대가 변하면서 그 의미도 조금 +씩 변하고 있으나, 큰 틀에서 프레임워크의 정의를 내리면 다음과 같다. +●첫째, 만들고자 하는 구조물의 기본 골격으로 아키텍처와 마찬가지로 소프트웨어 공학 뿐만 아니라 +건축, 비행기, 선박, 다리 같은 구조물을 만드는 모든 분야에서 발견할 수 있는 개념이라고 할 수 +있다. 또한 실체가 있는 구조물뿐만 아니라 실체가 없는 정책, 전략에도 쓰인다. +●둘째, 정부정책 라이프사이클 프레임워크(GPLC framework)에 따르면 정책수립에서 정책집행까 +지 정책과 관련된 모든 과정의 틀을 제공하는 것이라고 할 수 있다. 이처럼 프레임워크는 자신이 +다루는 대상의 틀을 결정하는 것이라 할 수 있다. +●GoF(Gang of Four)의 디자인 패턴으로 유명한 랄프 존슨(Ralph Johnson) 교수14는 프레임워크 +를 공학적 측면으로 “소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 +일련의 협업화된 형태로 클래스들을 제공하는 것”이라고 정의하였다. +●이에 AI 보안 프레임워크는, 다가올 AI 산업의 능동적인 대응 방안을 마련하기 위해 상호 관련성이 +있는 기술과 지식을 일목요연하게 정리하여 신뢰할 수 있는 AI 기반 산업의 적용 및 활성화를 위 +한 전체적인 기반 구조를 만드는 것이라 할 수 있다. + +프레임워크의 필요성 +●안전한 AI 개발을 위한 정보보안은 다양한 새로운 기술 요소로 구성되어 있어 이를 통합하고 관리 +하는 것은 매우 복잡한 작업이다. 이러한 복잡성을 효과적으로 관리하고 개발과 구현의 일관성을 +유지하며 시스템에 대한 안전성과 상호 운용성을 높이기 위해 AI 시스템과 서비스에 대한 정보보 +안 프레임워크는 필요하다고 판단된다. +●안전한 AI 개발을 위한 정보보안 프레임워크는 전략적・관리적・정책적・기술적 및 메커니즘 측면에 +서 AI 환경 내 발생할 수 있는 침해 문제를 해결하고 이를 통해 개발자는 사용자에게 더욱 안전하 +고 투명한 AI 서비스 환경을 제공할 수 있을 것으로 판단된다. +14 +랄프 존슨(Ralph Johnson) 교수는 소프트웨어 공학 및 디자인 패턴 분야에서 매우 중요한 인물로, 특히 디자인 패턴의 고전인 +GoF(Gang of Four)의 공동 저자 중 한 사람이다. GoF는 에릭 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨 +(Ralph Johnson), 존 블리시디스(John Vlissides) 네 명의 저자가 공동으로 집필한 “Design Patterns: Elements of Reusable +Object-Oriented Software” (1994)로, 객체 지향 소프트웨어 설계에서 재사용 가능한 23가지 패턴을 소개하여 현대 소프트웨어 +공학에 큰 영향을 미쳤다. + + +![이미지 216-0](images/p0216_img0.png) + + +![이미지 216-1](images/p0216_img1.png) + + +![이미지 216-2](images/p0216_img2.png) + + +![이미지 216-3](images/p0216_img3.png) + + +![이미지 216-4](images/p0216_img4.png) + + +![이미지 216-5](images/p0216_img5.png) + + +--- + +부록 +AI 시스템 보안(Security) 목표 +AI 시스템 보안(Security) 목표는 AI 기술을 안전하게 보호하고 신뢰할 수 있는 방식으로 운영되도록 +보장하는 데 있다. 이 목표는 AI 시스템이 외부 공격, 데이터 유출, 시스템 오작동 등 다양한 보안 위 +협에 대응할 수 있도록 설계되고 유지되는 것을 의미한다. +●AI 시스템에서 보안의 주요 목표는 전통적인 정보보호의 3대 요소인 기밀성(Confidentiality), 무 +결성(Integrity), 가용성(Availability)을 기본으로 하고, AI 모델・시스템 등 개발 생애 주기에서의 +책임성 확보 및 검증을 위한 Accountability(책임 추적성)를 추가하였다. +부록 그림 6 AI 개발자 대상 보안 프레임워크(Security Framework) + + +![이미지 217-0](images/p0217_img0.png) + + +![이미지 217-1](images/p0217_img1.png) + + +![이미지 217-2](images/p0217_img2.png) + + +![이미지 217-3](images/p0217_img3.png) + + +![이미지 217-4](images/p0217_img4.png) + + +![이미지 217-5](images/p0217_img5.png) + + +![이미지 217-6](images/p0217_img6.png) + + +--- + +2.1 +가용성 +가용성(Availability)은 AI 보안 전략에서 중요한 요소 중 하나로, 서비스와 데이터가 항상 접근 가능 +하고 사용할 수 있는 상태를 유지하는 것을 목표로 한다. 이는 AI 시스템의 연속성과 신뢰성을 보장하 +기 위해 필수적이다. 가용성에 대한 주요 관점과 이를 유지하기 위한 방법들은 다음과 같다. +주요 관점 +가용성 유지 방법 +서비스 중단 방지 +∙AI 시스템이 항상 사용 가능하도록 보장함 +∙장애 발생 시 신속한 복구 및 대응 계획을 수립함 +데이터 접근성 보장 +∙필요한 데이터가 언제나 접근 가능해야 함 +∙데이터 손실을 방지하기 위한 백업 및 복구 계획을 마련함 +시스템 성능 유지 +∙높은 부하나 공격에도 시스템이 안정적으로 작동하도록 보장함 +∙성능 저하를 방지하기 위한 자원 관리를 함 +2.2 +기밀성 +기밀성(Confidentiality)은 AI 보안 전략에서 중요한 요소 중 하나로, 정보가 승인된 사람만 접근할 수 +있도록 보호하는 것을 목표로 한다. 이는 데이터 유출과 같은 보안 사고를 방지하고, 민감한 정보가 +보호되도록 하는 데 필수적이다. 기밀성에 대한 주요 관점과 이를 유지하기 위한 방법은 다음과 같다. +주요 관점 +가용성 유지 방법 +데이터 접근 제어 +∙민감한 정보에 대한 접근을 승인된 사용자로 제한함 +∙사용자 인증 및 권한 관리를 통해 불법 접근을 방지함 +데이터 암호화 +∙데이터를 저장하거나 전송할 때 암호화하여 보호함 +∙데이터가 탈취되더라도 내용을 해독할 수 없도록 함 +데이터 유출 방지 +∙내부 및 외부로부터의 데이터 유출을 방지함 +∙데이터 접근 및 전송 경로를 모니터링하여 유출 시도를 감지함 + + +![이미지 218-0](images/p0218_img0.png) + + +![이미지 218-1](images/p0218_img1.png) + + +![이미지 218-2](images/p0218_img2.png) + + +![이미지 218-3](images/p0218_img3.png) + + +![이미지 218-4](images/p0218_img4.png) + + +--- + +부록 +2.3 +무결성 +무결성(Integrity)은 AI 보안 전략의 중요한 요소 중 하나로, 데이터와 시스템이 허가되지 않은 변경 +없이 정확하고 일관된 상태를 유지하는 것을 목표로 한다. 이는 AI 시스템이 신뢰할 수 있는 결과를 +제공하고, 데이터의 변조나 손상을 방지하기 위해 필수적이다. 무결성에 대한 주요 관점과 이를 유지 +하기 위한 방법은 다음과 같다. +주요 관점 +가용성 유지 방법 +데이터 무결성 보장 +∙데이터가 생성, 저장, 전송되는 동안 변조되지 않도록 보호함 +∙데이터의 정확성과 일관성을 유지함 +시스템 무결성 보장 +∙시스템 구성 요소와 소프트웨어가 허가되지 않은 변경 없이 유지되도록 함 +∙시스템이 예상대로 작동하도록 보장함 +변경 추적 및 감사 +∙데이터와 시스템의 변경내역을 기록하고 추적할 수 있도록 함 +∙변경 사항을 모니터링하고, 비정상적인 변경이 감지되면 경고를 발송함 +2.4 +책임 추적성 +책임 추적성(Accountability)은 AI 보안 전략에서 중요한 요소 중 하나로, AI 시스템의 행동과 결정에 +대한 책임을 명확히 하고, 문제가 발생했을 때 원인을 추적할 수 있도록 하는 것을 목표로 한다. 이는 +AI 시스템의 투명성을 높이고, 신뢰성을 보장하며, 윤리적이고 법적 기준을 준수하기 위해 필수적이 +다. 책임 추적성에 대한 주요 관점과 이를 유지하기 위한 방법은 다음과 같다. +주요 관점 +책임 추적성 유지 방법 +행동 및 결정 기록 +∙AI 시스템의 모든 행동과 결정을 기록하여 추적할 수 있도록 함 +∙기록된 데이터를 통해 문제가 발생했을 때 원인을 분석하고 책임을 규명함 +투명성 +∙AI 시스템의 동작 원리와 의사결정 과정을 이해할 수 있도록 설명함 +∙시스템의 작동 방식과 데이터 사용에 대한 정보를 공개하여 신뢰를 구축함 +책임 규명 +∙AI 시스템의 개발자, 운영자, 사용자 간의 역할과 책임을 명확히 함 +∙문제가 발생했을 때 책임 소재를 명확히 규명하여 신속히 대응함 + + +![이미지 219-0](images/p0219_img0.png) + + +![이미지 219-1](images/p0219_img1.png) + + +![이미지 219-2](images/p0219_img2.png) + + +![이미지 219-3](images/p0219_img3.png) + + +![이미지 219-4](images/p0219_img4.png) + + +--- + +안전한 AI를 위한 요소(Mechanism) +1.1 +견고성(Robustness) +●견고성(Robustness)은 AI 보안 메커니즘에서 중요한 요소로, AI 시스템이 다양한 공격이나 예기 +치 않은 상황에서도 안정적이고 일관된 성능을 유지하도록 보장하는 것을 목표로 한다. 견고한 AI 시 +스템은 외부의 악의적 시도나 데이터 왜곡에 흔들리지 않고 신뢰할 수 있는 결과를 제공하여 사용자 +보호와 시스템의 신뢰성을 높이는 역할을 한다. +주요 관점 +구현 방법 +내성 강화 +∙AI 모델이 다양한 공격 시나리오에 대응할 수 있도록 방어 메커니즘을 추가한다. +∙악의적인 데이터 입력에 대한 내성을 강화하여 시스템의 신뢰성을 확보한다. +가용성 유지 +∙AI 시스템이 언제나 사용할 수 있도록 높은 가용성을 유지한다. +∙시스템 다운타임을 최소화하여 사용자 경험을 개선한다. +지속적 검증 및 모니터링 +∙AI 시스템의 성능과 보안 취약점을 정기적으로 테스트하고 검증한다. +∙실시간 모니터링을 통해 이상 징후를 조기에 탐지하고 대응한다. +1.2 +중요정보 보호 +●중요정보(Critical Information) 보호는 AI 보안 메커니즘의 중요한 요소 중 하나로, AI 시스템이 +중요 데이터를 보호하고, 승인되지 않은 접근이나 유출을 방지하는 것을 목표로 한다. 이는 사용자 +의 신뢰를 유지하고, 법적 및 규제 요구 사항을 준수하기 위해 필수적이다. +주요 관점 +구현 방법 +데이터 등급화 +분류 및 관리 +∙데이터 중요도에 따라 조직의 목적에 맞는 데이터 분류 기준을 수립한다. +∙데이터 등급에 따라 접근 권한을 제한하고, 관리할 수 있는 사용자를 명확히 한다. +데이터 접근 제어 +∙중요 데이터에 대한 접근을 엄격히 통제하고, 승인된 사용자만 접근할 수 있도록 +한다. +∙데이터 접근 권한을 최소한으로 제한하고, 접근 로그를 기록한다. +암호화 +∙중요 데이터에 대한 접근 통제와 암호화를 적용한다. +∙데이터 왜곡이나 변조 방지를 위해 안전한 데이터 저장 및 처리 방법을 도입한다. + + +![이미지 220-0](images/p0220_img0.png) + + +![이미지 220-1](images/p0220_img1.png) + + +![이미지 220-2](images/p0220_img2.png) + + +![이미지 220-3](images/p0220_img3.png) + + +![이미지 220-4](images/p0220_img4.png) + + +--- + +부록 +1.3 +신뢰성 +●신뢰성(Reliability)는 AI 보안 메커니즘에서 중요한 요소로, AI 시스템이 일관되고 예측 가능한 성 +능을 제공하며, 다양한 상황에서도 안정적으로 작동하는 것을 목표로 한다. 이는 AI 시스템이 신뢰 +할 수 있는 결과를 제공하고, 사용자가 의존할 수 있도록 하는 데 필수적이다. +주요 관점 +구현 방법 +안정성 (Stability) +∙AI 시스템이 다양한 환경과 조건에서도 안정적으로 작동하도록 보장한다. +∙시스템 장애나 오류가 발생하지 않도록 예방하고, 발생 시 신속히 복구한다. +무결성 +∙AI 시스템은 수집된 데이터나 개발된 모델이 변조되지 않도록 보장한다. +∙무결성 검사를 정기적으로 수행하고, 데이터나 모델에 악의적인 변조가 있는지 모니 +터링한다. +1.4 +사회적 영향 +●사회적 영향(Social Impact)은 AI 보안 메커니즘에서 중요한 요소로, AI 시스템이 사회에 미치는 +긍정적 또는 부정적 영향을 고려하여, 긍정적 영향은 최대화하고 부정적 영향은 최소화하는 것을 +목표로 한다. 이는 AI 기술이 공익적이고 책임감 있게 사용되도록 보장하고, 사회적 신뢰를 구축하 +기 위해 필수적이다. +주요 관점 +관리 방법 +사회 기반시설 +보호 +∙사회 기반시설에 대한 정보는 국가 및 공공의 안보와 직결되므로, 중요 데이터를 별도 +로 분류하고 최고 수준의 보호를 적용한다. +공공시스템 +보호 +∙중요한 공공시스템은 일반 네트워크와 물리적으로 분리하거나, 강력한 네트워크 분할 +(segmentation)을 통해 외부 접근으로부터 보호하고 다양한 기술적 조치를 통해 보 +안을 강화한다. +악용 방지 +∙AI 기술이 사회적 해악을 끼칠 목적으로 악용되지 않도록 예방하는 보안 메커니즘이 +필요하다. 예를 들어, 자동화된 사이버 공격 등에 대한 방지책을 마련한다. +∙시스템의 악용 가능성을 사전에 분석하고, 이러한 위험에 대한 대응책을 포함한 설계 +를 적용한다. + + +![이미지 221-0](images/p0221_img0.png) + + +![이미지 221-1](images/p0221_img1.png) + + +![이미지 221-2](images/p0221_img2.png) + + +![이미지 221-3](images/p0221_img3.png) + + +--- + +안전한 AI를 위한 위험 관리(Risk Management) +4.1 +인적 측면(Personal Aspect) + +#### 4.1.1 사람의 감독 + +●사람의 감독(Human Oversight)은 AI 관련 사업에서 중요한 요소로, AI 시스템이 의사결정 과정 +에서 인간의 감독과 개입을 받을 수 있도록 하는 것을 목표로 한다. 이는 AI 시스템의 신뢰성과 보 +안성을 보장하고, 잠재적인 위험을 최소화하기 위해 필수적이다. +주요 관점 +구현 방법 +인간의 개입 +∙AI 시스템의 결정에 대해 책임질 수 있는 인간 감독자가 존재해야 한다. +∙인간 감독자는 AI 시스템의 결과와 그에 따른 행동에 대해 책임을 진다. +AI 모델의 학습 및 +업데이트 감독 +∙AI 시스템이 새로운 데이터로 학습하거나 모델을 업데이트할 때, 사람이 그 데이터를 +검토하여 악의적 데이터, 또는 보안 취약성을 식별하도록 해야 한다. +∙학습 과정 중 생성된 결과나 변경 사항에 대해 정기적으로 감사(Audit)를 실시한다. + +#### 4.1.2 데이터 보호 + +●데이터 보호는 AI 관련 사업에서 중요한 요소로, 데이터가 무단으로 수집되거나 사용되지 않도록 +보호하는 것을 목표로 한다. 이는 사용자의 신뢰를 유지하고, 법적 및 규제 요구 사항을 준수하며, +데이터 기밀성과 무결성을 보장하기 위해 필수적이다. +주요 관점 +구현 방법 +데이터 암호화 +∙전송/저장 중 암호화: 네트워크를 통해 전송되는 데이터를 암호화하고 데이터베이스 +와 스토리지 시스템에 저장된 데이터를 암호화하여 물리적 접근 및 데이터 유출 시에 +도 기밀성을 유지한다. +접근 제어 +∙최소 권한 원칙(Principle of Least Privilege): 사용자가 최소한의 데이터에만 접근 +할 수 있도록 접근 권한을 제한한다. +∙역할 기반 접근 제어(Role-Based Access Control, RBAC): 사용자의 직무나 역할 +에 따라 접근 권한을 부여한다. +사용자 인증 및 신원 확인 +∙멀티팩터 인증(Multi-Factor Authentication, MFA): 비밀번호 외에 추가 인증 요소 +를 요구한다. +∙생체 인증(Biometric Authentication): 얼굴 인식, 지문, 홍채 등 고급 인증 기술을 +사용한다. + +#### 4.1.3 역할과 책임 + +●역할과 책임(Role and Responsibility, R&R)은 AI 관련 사업에서 중요한 요소로, 각 개인의 역 +할과 책임을 명확히 정의하여 AI 시스템의 개발, 운영, 유지보수 과정에서 발생할 수 있는 혼란과 +문제를 최소화하는 것을 목표로 한다. 이는 AI 시스템의 효율적이고 신뢰할 수 있는 운영을 보장하 +기 위해 필수적이다. + + +![이미지 222-0](images/p0222_img0.png) + + +![이미지 222-1](images/p0222_img1.png) + + +![이미지 222-2](images/p0222_img2.png) + + +![이미지 222-3](images/p0222_img3.png) + + +![이미지 222-4](images/p0222_img4.png) + + +--- + +부록 +주요 관점 +구현 방법 +명확한 역할 정의 +(Clear Role Definition) +∙각 개인의 역할과 책임을 명확히 정의하여, 중복되거나 누락되는 부분이 없도록 한다. +∙역할에 대한 명확한 정의는 책임의 한계를 명확히 하고, 효율적인 업무 분담을 한다. +책임 분담 +(Responsibility +Allocation) +∙AI 시스템의 다양한 기능과 과업에 대해 책임을 적절히 분담한다. +∙책임 분담을 통해 각 팀원이 자신의 역할에 충실하고, 협력하여 목표를 달성한다. +지속적인 모니터링과 평가 +(Continuous +Monitoring and +Evaluation) +∙각 역할과 책임이 제대로 이행되고 있는지 지속적으로 모니터링하고 평가한다. +∙이를 통해 문제를 조기에 발견하고, 신속히 해결한다. + +#### 4.1.4 직무 분리 + +●직무 분리(Segregation of Duties, SoD)는 AI 관련 사업에서 중요한 요소로, 특정한 직무와 책 +임을 여러 개인에게 분산시켜 비윤리적 행위나 실수를 방지하고, 내부 통제와 보안을 강화하는 것 +을 목표로 한다. 이는 AI 시스템의 신뢰성과 투명성을 보장하기 위해 필수적이다. +주요 관점 +구현 방법 +내부 통제 강화 +(Enhanced Internal +Control) +∙한 사람이 모든 권한을 가지는 것을 방지하여 내부 통제를 강화한다. +∙비윤리적 행위나 실수로 인한 위험을 최소화한다. +책임성 증대 +(Increased +Accountability) +∙각 개인의 책임을 명확히 하여 책임성을 증대한다. +∙직무와 권한이 분리됨으로써 서로를 감시하고 견제한다. +투명성 확보 +(Ensured +Transparency) +∙직무 분리를 통해 업무 과정의 투명성을 확보한다. +∙권한 남용이나 비리의 가능성을 줄인다. +4.2 +물리적/환경적 측면(Physical/Environmental Aspect) + +#### 4.2.1 사회적 책임 + +●사회적 책임(Social Responsibility)은 AI 관련 사업에서 중요한 요소로, AI 시스템이 사회와 환경 +에 미치는 영향을 고려하고, 이를 통해 사회적 가치와 국가적 이익을 증진하는 것을 목표로 한다. +이는 AI 시스템의 개발, 운영, 유지보수 과정에서 발생할 수 있는 사회적 및 환경적 영향을 최소화 +하고, 지속 가능한 발전을 도모하기 위해 필수적이다. + + +![이미지 223-0](images/p0223_img0.png) + + +![이미지 223-1](images/p0223_img1.png) + + +![이미지 223-2](images/p0223_img2.png) + + +![이미지 223-3](images/p0223_img3.png) + + +--- + +주요 관점 +구현 방법 +사회적 영향 +(Social Impact) +∙AI 시스템이 사회에 미치는 긍정적 및 부정적 영향을 평가하고 관리한다. +∙모든 사회 구성원이 공평하게 AI의 혜택을 누릴 수 있도록 한다. +환경적 지속 가능성 +(Environmental +Sustainability) +∙AI 시스템의 개발과 운영이 환경에 미치는 영향을 최소화한다. +∙지속 가능한 자원 사용과 환경 보호를 고려한다. +법적 및 윤리적 준수 +(Legal and Ethical +Compliance): +∙AI 시스템이 관련 법규와 윤리적 기준을 준수하도록 한다. +∙사용자와 사회의 신뢰를 유지하기 위해 투명하고 책임 있는 AI 개발을 추진한다. + + +#### 4.2.2 물리적 피해 방지 설계 + +●물리적 피해 방지 설계(Design to Prevent Physical Harm)는 AI 관련 사업에서 중요한 요소로, +AI 시스템이 물리적 환경에서 작동할 때 사용자와 주변 환경에 신체적 피해를 주지 않도록 설계하 +는 것을 목표로 한다. 이는 AI 시스템의 안전성과 신뢰성을 보장하고, 법적 및 윤리적 책임을 다하 +기 위해 필수적이다. +주요 관점 +구현 방법 +안전 설계 +(Safety by Design) +∙AI 시스템이 물리적 환경에서 안전하게 작동하도록 설계한다. +∙위험 요소를 사전에 식별하고 제거하여 안전성을 확보한다. +위험 평가 및 관리 +(Risk Assessment and +Management) +∙AI 시스템의 물리적 작동이 초래할 수 있는 잠재적 위험을 평가하고 관리한다. +∙위험 발생 시 신속히 대응할 수 있는 절차를 마련한다. +법적 및 규제 준수 +(Legal and Regulatory +Compliance) +∙AI 시스템의 설계와 운영이 관련 법규와 규제 기준을 준수한다. +∙안전 표준과 가이드라인을 따라 시스템을 개발하고 운영한다. +AI 시스템 보안을 위한 거버넌스(Governance) +AI 시스템 보안을 위한 조직 내 규정과 정책, 그리고 거버넌스 체계는 AI 모델이 조직에서 안전하게 +운영되고, 보안 리스크를 관리하는 데 중요한 역할을 한다. 효과적인 AI 보안 거버넌스는 기술, 사람, +프로세스를 통합하여 AI 시스템의 무결성, 기밀성, 가용성을 유지하고, 법적 규제와 윤리적 기준을 준 +수하도록 설계되어야 한다. 이를 위해 조직은 명확한 정책과 절차를 수립하고, 보안 거버넌스를 통해 +AI 시스템이 지속적으로 안전하게 운영될 수 있도록 관리해야 한다. AI 보안 거버넌스의 핵심 요소는 +정책(Policy), 규정(Guidelines), 절차(Processes) 등을 포함한다. + + +![이미지 224-0](images/p0224_img0.png) + + +![이미지 224-1](images/p0224_img1.png) + + +![이미지 224-2](images/p0224_img2.png) + + +![이미지 224-3](images/p0224_img3.png) + + +![이미지 224-4](images/p0224_img4.png) + + +![이미지 224-5](images/p0224_img5.png) + + +--- + +부록 +5.1 +정책(Policy) +●AI 보안 정책 수립: 조직은 AI 시스템을 안전하게 운영하기 위한 포괄적인 보안 정책을 수립해야 +한다. 정책에는 AI 시스템의 설계, 개발, 배포 및 운영에 필요한 보안 기준과 절차를 명확히 정의 +해야 한다. +●접근 권한 관리 정책: AI 시스템에 대한 접근 권한을 관리하기 위한 정책을 수립하여, 민감한 데이 +터와 시스템에 대한 무단 접근을 방지해야 한다. 역할 기반 접근 제어(RBAC)를 통해 AI 시스템에 +접근할 수 있는 사용자와 권한을 제한해야 한다. +●데이터 보호 정책: AI 시스템이 다루는 데이터의 기밀성과 무결성을 보장하기 위해 데이터 암호화, +데이터 저장소 보호에 대한 규정을 마련해야 한다. +5.2 +규정(Guidelines) +●AI 모델 관리 규정: AI 모델의 학습, 배포 및 사용에 대한 구체적인 지침을 제공해야 한다. 이 +규정은 AI 모델의 검증 및 테스트 절차, 안전한 데이터 사용, 모델 업데이트 및 폐기 절차를 포 +함한다. +●AI 시스템 모니터링 규정: AI 시스템이 보안 위협에 대응할 수 있도록 실시간 모니터링 및 로그 +분석 규정을 마련해야 한다. 이를 통해 시스템 내 이상 활동이나 보안 위협을 조기에 감지하고 대 +응할 수 있어야 한다. +●리스크 관리 규정: AI 시스템에 내재된 보안 리스크를 식별하고 관리하기 위한 규정을 수립해야 한 +다. 이는 잠재적인 보안 위협을 사전에 평가하고 완화하는 절차를 포함한다. +5.3 +절차(Process) +●AI 보안 평가 절차: AI 시스템 개발 초기부터 보안 평가 절차를 구축하여, 보안 위험을 사전에 감 +지하고 해결해야 한다. 이 절차는 보안 취약점 분석, 침투 테스트 및 코드 리뷰를 포함할 수 있다. +●AI 시스템 업데이트 및 패치 절차: AI 시스템과 모델이 최신 보안 위협에 대응할 수 있도록 정기적 +인 업데이트 및 패치 절차를 수립해야 한다. 이 절차는 새로운 보안 위협에 대한 대응 방안을 포함 +하며, 보안 업데이트가 원활하게 이루어지도록 해야 한다. +●비상 대응 계획: 보안 사고가 발생했을 때 즉각적으로 대응할 수 있는 비상 대응 계획을 마련해야 +한다. 여기에는 사고 보고, 대응 팀 구성, 시스템 복구 및 데이터 손실 방지 절차가 포함된다. + + +![이미지 225-0](images/p0225_img0.png) + + +![이미지 225-1](images/p0225_img1.png) + + +![이미지 225-2](images/p0225_img2.png) + + +![이미지 225-3](images/p0225_img3.png) + + +--- + +AI 시스템 보안를 위한 위험관리(Risk Management) +위험관리(Risk Management)는 AI를 활용한 서비스에서 필수적인 요소로, AI 시스템이 직면할 수 +있는 잠재적 위험을 식별하고, 이를 효과적으로 관리하고 대응하기 위한 체계적인 접근을 포함한다. +위험 관리는 위험 분석, 위험 감지, 사고 대응의 세 가지 주요 단계로 나눌 수 있다. +6.1 +위험 분석 +●위험 분석(Risk Analysis)은 AI 시스템이 직면할 수 있는 잠재적 위험을 식별하고, 그 심각성과 +발생 가능성을 평가하는 과정이다. 이 과정은 위험 관리의 첫 단계로, 체계적인 접근을 통해 위험 +요소를 사전에 파악하고 대응 전략을 마련하는 것을 목표로 한다. +●주요 활동 +- 위험 식별(Risk Identification): AI 시스템과 관련된 모든 잠재적 위험을 식별하고, 기술적・운 +영적・윤리적・법적 측면에서 발생할 수 있는 다양한 위험을 고려한다. +※ 예시: 데이터 손실, 시스템 오류, 보안 침해, 윤리적 문제 등 +- 위험 평가(Risk Assessment): 식별된 위험의 심각성과 발생 가능성을 평가하고, 각 위험 요소 +의 영향을 분석하여 우선순위를 정한다. +- 위험 대응 계획(Risk Mitigation Plan) 수립: 평가된 위험에 대한 대응 계획을 수립하고, 위험을 +줄이기 위한 예방 조치와 대응 전략을 마련한다. +※ 예시: 보안 강화, 데이터 백업, 긴급 대응 절차 마련 등 +6.2 +위험 감지 +●위험 감지(Risk Detection)는 AI 시스템의 운영 중 발생하는 이상 징후나 위험 요소를 실시간으 +로 감지하고, 이를 신속하게 보고하는 과정이다. 이는 위험 발생 시 신속한 대응을 위해 중요한 단 +계이다. +●주요 활동 +- 모니터링 시스템 구축(Establish Monitoring Systems): AI 시스템의 성능과 안전성을 실시간 +으로 모니터링하는 시스템을 구축한다. +※ 예시: 네트워크 트래픽 모니터링, 시스템 로그 분석, 사용자 활동 추적 등 +- 이상 징후 탐지(Anomaly Detection) : 정상적인 패턴에서 벗어난 이상 징후를 자동으로 감지 +할 수 있는 알고리즘과 기술을 도입한다. +※ 예시: 머신러닝 기반 이상 탐지 알고리즘, 실시간 경고 시스템 등 + + +![이미지 226-0](images/p0226_img0.png) + + +![이미지 226-1](images/p0226_img1.png) + + +![이미지 226-2](images/p0226_img2.png) + + +![이미지 226-3](images/p0226_img3.png) + + +![이미지 226-4](images/p0226_img4.png) + + +![이미지 226-5](images/p0226_img5.png) + + +--- + +부록 +- 자동화된 경고(Automated Alerts): 이상 징후나 위험 요소 감지 시 즉각적으로 관련 담당자에 +게 경고를 보내는 자동화된 시스템을 운영한다. +※ 예시: 이메일 알림, SMS 경고, 대시보드 알림 등 +- 정기적 검토(Regular Reviews): 모니터링 결과와 경고 로그를 정기적으로 검토하여, 새로운 위 +험 요소나 패턴을 식별하고 대응 방안을 업데이트한다. +※ 예시: 주간/월간 보고서 작성, 경고 로그 분석 회의 등 +6.3 +사고 대응 +●사고 대응(Incident Handling)은 실제로 위험이 발생했을 때 이를 효과적으로 대응하고 해결하는 +과정이다. 이는 신속한 대응과 문제 해결을 통해 피해를 최소화하고, 재발 방지를 위한 교훈을 도 +출하는 것을 목표로 한다. +●주요 활동 +- 사고 대응 절차 수립(Establish Incident Response Procedures): 사고 발생 시 신속하고 체 +계적으로 대응할 수 있는 절차와 계획을 마련한다. +※ 예시: 사고 대응 매뉴얼 작성, 비상 연락망 구축, 역할 및 책임 정의 등 +- 사고 대응 팀 구성(Form Incident Response Team) : 사고 발생 시 대응할 전담 팀을 구성하 +고, 각 팀원의 역할과 책임을 명확히 한다. +※ 예시: 보안 담당자, 데이터 과학자, IT 지원팀 등으로 구성 +- 초기 대응 및 완화(Initial Response and Mitigation) : 사고 발생 시 초기 대응을 통해 피해를 +최소화하고, 추가 피해를 방지하기 위한 조치를 취한다. +※ 예시: 시스템 격리, 데이터 복구, 보안 패치 적용 등 +- 사고 분석 및 보고(Incident Analysis and Reporting) : 사고의 원인을 분석하고, 사고 발생 +과정과 대응 결과를 상세히 기록하여 보고한다. +※ 예시: 사고 원인 분석 보고서 작성, 대응 결과 리뷰 등 +- 사후 조치 및 재발 방지(Post-Incident Actions and Prevention) : 사고 종료 후 사후 조치를 +취하고, 재발 방지를 위한 교훈을 도출하여 시스템과 절차를 개선한다. +※ 예시: 시스템 업데이트, 보안 정책 강화, 교육 프로그램 운영 등 +●예시 시나리오 +- AI 모델 오류 사고 대응 +▸위험 분석: AI 모델의 예측 오류 가능성을 평가하고, 모델 검증 및 테스트 계획 수립 +▸위험 감지: AI 모델의 실시간 성능 모니터링 시스템 도입. 예측 오류 발생 시 경고 시스템 운영 +▸사고 대응: AI 모델의 예측 오류 발생 시 즉시 모델 사용 중지 및 수정 작업. 오류 원인 분석 +및 보고. 수정된 모델의 검증 및 테스트 후 재배포. 재발 방지를 위한 모델 검증 절차 강화 + + +![이미지 227-0](images/p0227_img0.png) + + +![이미지 227-1](images/p0227_img1.png) + + +![이미지 227-2](images/p0227_img2.png) + + +![이미지 227-3](images/p0227_img3.png) + + +--- + +AI 서비스 제공자 대상 보안 프레임워크 +AI 서비스 제공자 관점의 프레임워크 필요성 +●AI 서비스를 위한 정보보안은 다양한 새로운 기술 요소로 구성되어 있어 이를 통합하고 관리하는 +것은 매우 복잡한 작업이므로, 이러한 복잡성을 효과적으로 관리하고 시스템에 대한 안전성과 상호 +운용성을 높이기 위해 AI 시스템과 서비스에 대한 정보보안 프레임워크는 필요하다. +●AI 서비스를 위한 정보보안 프레임워크는 전략적・관리적・정책적・기술적 및 메커니즘 측면에서 AI +환경 내 발생 할 수 있는 침해 문제를 해결하고 이를 통해 서비스 제공자는 AI 기술을 효과적으로 +도입하여 이용자에게 더욱 안전한 AI 서비스 환경을 제공할 수 있다. +- (데이터 보호 및 기밀성 유지) AI 서비스는 대량의 데이터를 처리하며, 이 중에는 중요 정보가 +포함될 수 있다. AI 서비스 제공자는 정보보안 프레임워크를 통해 데이터의 기밀성을 유지하고 +불법 접근이나 유출을 방지할 수 있다. +- (AI 모델의 무결성 유지) AI 모델이나 서비스가 사이버 공격(예: 데이터 조작, 모델 해킹 등)에 +노출되면 결과의 정확성과 무결성이 위협받을 수 있으므로, AI 서비스 제공자는 보안 프레임워 +크를 통해 AI 시스템이 악의적 변경이나 조작으로부터 보호되도록 예방할 수 있다. +- (사이버 위협 대응 및 리스크 최소화) AI 서비스 제공자는 사이버 공격, 해킹, 랜섬웨어 등 다양 +한 위협에 노출될 수 있으므로, 보안 프레임워크를 통해 사전 대비와 함께, 발생 시 대응 프로토 +콜을 제공하여 피해를 최소화할 수 있다. +- (서비스 연속성 및 가용성 보장) AI 서비스의 중단은 기업의 신뢰와 수익에 큰 타격을 줄 수 있 +으므로, 보안 프레임워크를 통해 백업, 복구 계획 등을 포함하여 AI 서비스의 안정적인 가용성을 +보장할 수 있다. +- (고객 신뢰 확보) 고객들은 자신의 데이터를 다루는 AI 기업이 신뢰할 수 있어야 서비스를 사용 +하므로, AI 서비스 제공자는 보안 프레임워크를 통해 고객의 데이터 보호 및 신뢰를 높이고, 비 +즈니스 지속성을 강화할 수 있다. + + +![이미지 228-0](images/p0228_img0.png) + + +![이미지 228-1](images/p0228_img1.png) + + +![이미지 228-2](images/p0228_img2.png) + + +![이미지 228-3](images/p0228_img3.png) + + +![이미지 228-4](images/p0228_img4.png) + + +--- + +부록 +AI 서비스 제공자 관점의 보안 목표 +2.1 +보안 프레임워크(Security Framework) - 예방 단계 +예방(Prevention) 단계에서의 보안 목표: 예방 단계의 Framework는 AI 시스템에 대한 잠재적 위협 +을 사전에 대비하고 보호하기 위한 다양한 전략과 메커니즘을 포함한다. +●거버넌스(Governance): 보안 정책, 절차, 표준, 가이드라인 및 윤리를 수립하여 AI 워크로드와 관 +련된 역할과 책임을 명확히 한다. +●위험 관리(Risk Management): AI 시스템과 서비스에 대한 보안 요구사항을 준수하기 위해 보안 +조치를 설계, 적용, 평가, 검증한다. +부록 그림 7 AI 서비스 제공자 대상 보안 프레임워크(Security Framework) - 예방 단계 + + +![이미지 229-0](images/p0229_img0.png) + + +![이미지 229-1](images/p0229_img1.png) + + +![이미지 229-2](images/p0229_img2.png) + + +![이미지 229-3](images/p0229_img3.png) + + +![이미지 229-4](images/p0229_img4.png) + + +![이미지 229-5](images/p0229_img5.png) + + +![이미지 229-6](images/p0229_img6.png) + + +--- + +예방 단계에 대한 보안 기술(Security Technology) 적용 방안 +●데이터 보호 +- 데이터 보호(Data Protection)는 AI 시스템에서 데이터의 기밀성, 무결성, 가용성을 유지하여 +보안성을 확보하는 중요한 과정이다. 이는 데이터가 불법적으로 접근되거나 수정되지 않도록 하 +며, 시스템의 신뢰성을 높이는 역할을 한다. +구 분 +내 용 +추진방안 +설정 및 설계 +(Setup and +Design) +데이터 보호를 +위한 보안 정책과 +시스템을 설정하고 +설계 +∙데이터 보안 정책 수립: 데이터를 보호하기 위한 정책과 절차를 수립한 +다. 이는 데이터 접근 권한, 저장, 전송, 삭제 등의 과정에서의 보안 요 +구사항을 포함한다. +∙거버넌스 체계 구축: 데이터 관리와 보호를 위한 거버넌스 체계를 구축 +하여 책임과 역할을 명확히 한다. 이를 통해 데이터 보호가 조직 전반에 +걸쳐 일관되게 적용될 수 있도록 한다. +∙보안 아키텍처 설계: 데이터 보호를 위한 보안 아키텍처를 설계한다. 이는 +데이터 암호화, 접근 통제, 로그 관리 등의 기술적 요구사항을 포함한다. +∙(예시) 데이터 암호화 정책 수립, 데이터 접근 통제 설계, 데이터 저장 +및 백업 절차 설정. +단계 설정 +(Stage Setup) +데이터 보호를 +위한 구체적인 +단계와 절차를 +설정 +∙신뢰할 수 있는 데이터 구축: 데이터 수집, 저장, 처리 과정에서 데이터 +의 신뢰성을 보장할 수 있는 절차를 마련한다. 이는 데이터의 정확성, 일 +관성, 무결성을 포함한다. +∙훈련 및 테스트 단계 설계: AI 모델의 훈련 및 테스트 단계에서 데이터 보 +호를 위한 절차를 마련하여 데이터가 안전하게 사용될 수 있도록 한다. +∙보안 검토 및 업데이트: 데이터 보호 절차가 최신 보안 표준과 법적 요 +구사항을 준수하도록 정기적으로 검토하고 업데이트한다. +∙(예시) 데이터 검증 절차 설정, 훈련 데이터셋의 무결성 검증, 테스트 데 +이터의 보호 및 관리. + + +![이미지 230-0](images/p0230_img0.png) + + +![이미지 230-1](images/p0230_img1.png) + + +![이미지 230-2](images/p0230_img2.png) + + +![이미지 230-3](images/p0230_img3.png) + + +![이미지 230-4](images/p0230_img4.png) + + +--- + +부록 +●모델 보안 유지 +- 모델 보안 유지(Secure Model)는 AI 시스템에서 모델의 보안을 보장하기 위한 다양한 활동과 +절차를 포함한다. 이를 통해 AI 모델이 안전하게 작동하고 신뢰성을 유지하도록 한다. 여기에는 +다음과 같은 구체적인 활동이 포함된다: +구 분 +내 용 +추진방안 +모델 접근 통계 +(Implement Access +Control on Model) +AI 모델에 대한 접근 +권한을 통계하여 무단 +접근을 방지하고 보안을 +강화하는 과정 +∙사용자 인증 및 권한 부여: AI 모델에 접근할 수 있는 사용자 +나 시스템을 인증하고, 적절한 권한을 부여한다. +∙접근 로그 관리: AI 모델에 대한 접근 시도를 기록하고, 이상 +활동을 모니터링하여 보안 위협을 식별한다. +∙역할 기반 접근 통계(Role-Based Access Control): 사용 +자 역할에 따라 접근 권한을 제한하여 민감한 모델에 대한 무 +단 접근을 방지한다. +∙(예시) AI 모델에 대한 접근 시 다단계 인증을 요구하고, 접 +근 로그를 주기적으로 검토하여 비정상적인 접근을 탐지한다. +모델 설명 가능성 및 +상호 운용성 적용 +(Apply Model +Explainability and +Interoperability with +Secure Manner) +AI 모델의 결정 과정을 +투명하게 설명하고, +다른 시스템과의 상호 +운용성을 보장하는 +동시에 보안을 유지하는 +과정 +∙설명 가능 AI(Explainable AI): AI 모델의 예측이나 결정이 +어떻게 도출되었는지 설명할 수 있는 기능을 추가하여 투명성 +을 높인다. +∙상호 운용성 보장: AI 모델이 다른 시스템과 원활하게 연동될 +수 있도록 설계하며, 데이터 교환 시 보안을 유지한다. +∙보안 모니터링: 모델 설명 과정에서 민감한 정보가 노출되지 +않도록 보안 모니터링을 실시한다. +∙(예시) AI 모델의 예측 결과를 설명하는 대시보드를 제공하 +고, 다른 시스템과의 데이터 교환 시 암호화를 적용하여 보안 +을 유지한다. +리뷰 및 승인 +프로세스 설정 +(Set Up Review and +Approval Process +for Feedback +Process) +AI 모델의 변경 사항을 +검토하고 승인하는 +절차를 마련하여, +모델의 신뢰성과 보안을 +보장하는 과정 +∙변경 사항 검토: AI 모델의 업데이트나 수정 사항을 사전에 +검토하고, 잠재적인 보안 위험을 평가한다. +∙승인 절차 마련: 변경 사항을 적용하기 전에 승인 절차를 거 +쳐, 보안 및 품질 기준을 충족하도록 한다. +∙피드백 반영: 사용자 및 시스템에서 제공된 피드백을 기반으 +로 모델을 개선하고, 보안성을 유지한다. +∙(예시) AI 모델 업데이트 시 전문가 리뷰를 통해 변경 사항을 +검토하고, 필요시 보안 패치를 적용하여 보안성을 강화한다. + + +![이미지 231-0](images/p0231_img0.png) + + +![이미지 231-1](images/p0231_img1.png) + + +![이미지 231-2](images/p0231_img2.png) + + +![이미지 231-3](images/p0231_img3.png) + + +--- + +●사이버 보안 기술 적용 +- AI Security Framework에서 사이버 보안(Cyber Security)은 AI 시스템 및 데이터의 보안을 +강화하는 데 중점을 둔다. 이는 다양한 보안 기술과 절차를 통해 AI 시스템을 보호하고, 데이터 +무결성과 기밀성을 유지하며, 시스템의 가용성을 보장하는 것을 목표로 한다. +▸구성요소(Component)별 목표 및 요구사항은 다음과 같다 +구분 +보안 목표 및 요구사항 +Application Security +(응용 프로그램 보안) +[목표] AI 애플리케이션의 보안을 강화하여 취약점 및 공격으로부터 보호한다. +∙코드 리뷰 및 테스트: 애플리케이션의 코드를 주기적으로 리뷰하고, 보안 취약점을 발견 +하여 수정한다. +∙취약점 스캐닝: 애플리케이션 내의 보안 취약점을 탐지하고, 이를 해결하기 위한 조치를 +취한다. +∙보안 패치 관리: 애플리케이션에 대한 최신 보안 패치를 적용하여 알려진 취약점을 방지한다. +∙(예시) 정기적인 취약점 스캐닝 도구를 사용하여 AI 애플리케이션의 보안 상태를 점검하 +고, 발견된 취약점을 신속히 수정한다. +Network Security +(네트워크 보안) +[목표] AI 시스템이 연결된 네트워크를 보호하여 데이터의 무결성과 기밀성을 유지한다. +∙방화벽 설정 및 관리: 외부 공격으로부터 네트워크를 보호하기 위해 방화벽을 설정하고 +관리한다. +∙침입 탐지 시스템(IDS): 네트워크 트래픽을 모니터링하여 비정상적인 활동을 탐지하고 +대응한다. +∙가상 사설망(VPN): 네트워크를 통한 데이터 전송 시 암호화된 연결을 제공하여 데이터 +의 기밀성을 유지한다. +∙(예시) 네트워크에 IDS를 설치하여 실시간으로 비정상적인 트래픽을 감지하고, 즉시 대 +응할 수 있도록 한다. +System Security +(시스템 보안) +[목표] AI 시스템의 운영 체제 및 관련 인프라를 보호하여 무단 접근과 공격을 방지한다. +∙운영 체제 보안 설정: 시스템의 운영 체제에 대한 보안 설정을 강화하여 취약점을 줄인다. +∙정기적인 시스템 업데이트: 운영 체제 및 소프트웨어에 대한 최신 업데이트를 적용하여 +보안을 유지한다. +∙시스템 모니터링: 시스템 로그를 주기적으로 모니터링하여 비정상적인 활동을 탐지하고 +대응한다. +∙(예시) 시스템에 최신 보안 업데이트를 정기적으로 적용하고, 로그 모니터링 도구를 사용 +하여 시스템 활동을 실시간으로 감시한다. +DB Security +(데이터베이스 보안) +[목표] AI 시스템에서 사용되는 데이터베이스를 보호하여 데이터 무결성과 기밀성을 유지한다. +∙접근 통계: 데이터베이스에 대한 접근 권한을 관리하여 무단 접근을 방지한다. +∙데이터 암호화: 저장된 데이터를 암호화하여 데이터 유출 시에도 기밀성을 유지한다. +∙백업 및 복구 계획: 데이터베이스의 정기적인 백업을 수행하고, 데이터 손실 시 복구 계 +획을 마련한다. +∙(예시) 중요한 데이터베이스 필드를 암호화하고, 정기적으로 백업을 수행하여 데이터 손 +실에 대비한다. +Device Security +(장치 보안) +[목표] AI 시스템에 연결된 장치를 보호하여 보안 위협으로부터 안전하게 유지한다. +∙장치 인증 및 승인: AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인 +된 장치만 연결되도록 한다. +∙장치 보안 설정: 각 장치에 대한 보안 설정을 강화하여 취약점을 최소화한다. +∙펌웨어 업데이트: 장치의 펌웨어를 최신 상태로 유지하여 보안 취약점을 해결한다. +∙(예시) AI 시스템에 연결된 IoT 장치에 대해 정기적인 펌웨어 업데이트를 실시하고, 보 +안 인증 절차를 적용하여 무단 장치 연결을 방지한다. + + +![이미지 232-0](images/p0232_img0.png) + + +![이미지 232-1](images/p0232_img1.png) + + +![이미지 232-2](images/p0232_img2.png) + + +![이미지 232-3](images/p0232_img3.png) + + +--- + +부록 +▸핵심 보안기술(Core Security)별 목표 및 요구사항 +구분 +보안 목표 및 요구사항 +Multi-Factor +Authentication +(MFA) +[목표] Multi-Factor Authentication은 두 개 이상의 인증 요소를 사용하는 보안 체계이 +다. 이는 사용자나 시스템이 본인임을 확인하기 위해 여러 단계를 거치는 방식으로, 보안 +강화를 목표로 한다. +∙지식 기반 요소: 사용자만 알고 있는 정보(예: 비밀번호, PIN) +∙소유 기반 요소: 사용자만 소유한 물리적 장치(예: 스마트폰, OTP 토큰) +∙고유 기반 요소: 사용자의 생체 정보(예: 지문, 얼굴 인식, 음성 인식) +∙OTP(One-Time Password): 일회용 비밀번호를 생성하여 로그인 시 추가 인증 단계 +로 사용 +∙생체인식: 지문 스캐너, 얼굴 인식 시스템을 통해 물리적 접근 및 데이터 접근 제어 +∙보안 토큰: 하드웨어나 소프트웨어 토큰을 사용하여 두 번째 인증 단계 제공 +∙(예시) 은행 거래 시 스마트폰에 OTP를 생성하여 입력하거나, 회사 시스템 로그인 시 +지문 인식을 사용한다. +Access Control +(접근 통계) +[목표] 접근 통계는 시스템 내에서 사용자가 접근할 수 있는 자원과 권한을 관리하는 메커 +니즘이다. 이는 무단 접근을 방지하고 데이터 기밀성과 무결성을 유지하는 데 중요한 역할 +을 한다. +∙Mandatory Access Control(MAC): 시스템 관리자에 의해 설정된 정책에 따라 접근이 +통제되며, 사용자는 이를 변경할 수 없다. 주로 높은 보안이 요구되는 군사나 정부 기관 +에서 사용한다. +∙Discretionary Access Control(DAC): 데이터 소유자가 누구에게 접근 권한을 부여할 +지 결정하는 방식으로, 유연성이 높다. +∙Role-Based Access Control(RBAC): 사용자의 역할에 따라 접근 권한을 부여하는 +방식으로, 대규모 조직에서 효율적이다. +∙파일 시스템 보안: 특정 사용자나 그룹에 파일 읽기/쓰기 권한을 설정한다. +∙네트워크 보안: 네트워크 장치와 서버에 대한 접근 권한을 역할에 따라 설정한다. +∙데이터베이스 보안: DBMS에서 사용자 역할에 따라 테이블이나 행 단위의 접근 권한을 +관리한다. +∙(예시) 직원이 회사의 기밀 문서에 접근할 때, 해당 직원의 역할에 따라 접근 권한을 설 +정하여 불필요한 접근을 방지한다. +Cryptography +(암호화) +[목표] 암호화는 데이터를 보호하기 위해 정보를 특정 알고리즘을 사용해 암호화하고, 인 +가된 사용자만이 이를 해독할 수 있게 하는 기술이다. +∙양자 암호화(Quantum Cryptography): 양자 역학의 원리를 이용한 암호화 방식으로, +매우 높은 보안성을 제공한다. +∙키 관리(Key Management): 암호화 키의 생성, 배포, 저장, 교체, 폐기를 관리하여 보 +안성을 유지한다. +∙PKI(Public Key Infrastructure): 공개 키 암호화 기술을 사용하여 안전한 통신을 보장 +하고, 디지털서명 등을 통해 데이터의 무결성을 검증한다. +∙디지털서명(Digital Signature): 전자문서나 메시지의 출처를 검증하고, 변경 여부를 확 +인하기 위한 기술을 사용한다. +∙데이터 전송 보안: SSL/TLS를 사용하여 웹 브라우저와 서버 간의 데이터 전송을 암호 +화한다. +∙파일 암호화: 중요한 문서 파일을 암호화하여 무단 접근을 방지한다. +∙전자상거래: 거래 정보와 결제 정보를 암호화하여 안전하게 처리한다. +∙(예시) 이메일 전송 시 PGP를 사용하여 메시지를 암호화하고, 디지털서명을 통해 발신 +자의 신원을 확인한다. + + +![이미지 233-0](images/p0233_img0.png) + + +![이미지 233-1](images/p0233_img1.png) + + +![이미지 233-2](images/p0233_img2.png) + + +![이미지 233-3](images/p0233_img3.png) + + +--- + +2.2 +보안 프레임워크(Security Framework) - 탐지・대응 단계 +탐지・대응 단계에서의 Security Framework 목표: 탐지・대응(Detection) 단계 Framework는 사업자 관 +점에서 AI 시스템의 보안 위협을 탐지하기 위한 전략과 메커니즘을 설명한다. 탐지(Detection) 단계는 +AI 시스템에서 발생할 수 있는 보안 위협을 실시간으로 모니터링하고, 이를 신속하게 식별하여 대응할 +수 있도록 하는 데 중점을 둔다. +●거버넌스(Governance): AI 생명주기 전반에 대한 위험 관리를 수립하고, AI 워크로드에 대한 탐 +지 절차, 매뉴얼, 사고 대응 팀을 배정한다. +●위험 관리(Risk Management): AI 시스템과 서비스에 대한 보안 요구사항을 준수하기 위해 보안 +조치를 적용한다. +부록 그림 8 AI 서비스 제공자 대상 보안 프레임워크(Security Framework) - 탐지․ 예방 단계 + + +![이미지 234-0](images/p0234_img0.png) + + +![이미지 234-1](images/p0234_img1.png) + + +![이미지 234-2](images/p0234_img2.png) + + +![이미지 234-3](images/p0234_img3.png) + + +![이미지 234-4](images/p0234_img4.png) + + +![이미지 234-5](images/p0234_img5.png) + + +--- + +부록 +탐지・대응 단계에 대한 보안 기술(Security Technology) 적용 방안 +●데이터 이상 징후 탐지 +- 데이터 이상징후 탐지(Data Anomaly Detection)는 AI 시스템의 데이터를 정기적으로 점검하 +고, 실시간 모니터링 시스템을 통해 이상 징후를 감지하며, 체크리스트를 활용하여 테스트와 훈 +련 단계를 점검하는 과정이다. 이를 통해 데이터의 무결성, 기밀성, 가용성을 보장하고, AI 시스 +템의 안정성과 신뢰성을 유지할 수 있다. +구 분 +내 용 +추진방안 +Data Vulnerability Check +(데이터 취약성 점검) +AI 시스템의 데이터 +취약성을 점검하여 보안 +취약점을 발견하고 수정하는 +과정 +∙데이터 저장소, 데이터 전송 경로, 데이터 접근 +권한 등을 점검하여 잠재적인 보안 취약점을 식별 +하고, 이를 해결하기 위한 보안 조치를 시행한다. +∙(예시) 데이터베이스의 취약성 스캔, 데이터 암호 +화 여부 점검, 접근 통계 정책 검토 +Real-Time Monitoring +System +(실시간 모니터링 시스템) +실시간으로 AI 시스템의 +데이터를 모니터링하여 이상 +징후를 탐지하는 시스템 +∙실시간 데이터 흐름을 분석하여 비정상적인 활동 +을 탐지하고, 이를 경고하거나 자동으로 대응하는 +시스템을 구축한다. 이러한 모니터링 시스템은 AI +모델의 예측 결과와 실제 데이터 간의 불일치를 +탐지할 수 있다. +∙(예시) 실시간 네트워크 트래픽 모니터링, 사용자 +활동 모니터링, 시스템 로그 분석 +Design to Unit, Entire +Testing and Training +Phased with Checklist +(체크리스트를 활용한 단위, +전체 테스트 및 훈련 단계 +설계) +AI 시스템의 각 구성 요소에 +대해 테스트와 훈련 단계를 +설계하고, 이를 체크리스트를 +통해 검증하는 과정 +∙시스템의 각 구성 요소별로 테스트와 훈련 계획을 +수립하고, 이를 체크리스트 형태로 문서화하여 각 +단계에서 수행해야 할 검증 항목들을 명확히 정의 +한다. 이를 통해 체계적인 검증과 훈련이 이루어 +지도록 한다. +∙(예시) 모델의 학습 데이터 검증, 모델 업데이트 +후 테스트 계획 수립, 시스템 통합 테스트 계획 +수립 및 체크리스트 작성 + + +![이미지 235-0](images/p0235_img0.png) + + +![이미지 235-1](images/p0235_img1.png) + + +![이미지 235-2](images/p0235_img2.png) + + +![이미지 235-3](images/p0235_img3.png) + + +![이미지 235-4](images/p0235_img4.png) + + +--- + +●모델 보안 유지 +- 모델 보안 유지는 AI 모델이 안전하게 동작할 수 있도록 알고리즘 검증, 위험 평가 및 모델 조 +정, 소프트웨어 시각화 도구를 통한 프로세스 자동화 등의 과정을 포함한다. 이를 통해 AI 모델 +의 신뢰성을 높이고, 외부 위협으로부터 보호할 수 있다. +구 분 +내 용 +추진방안 +Verified to Algorithm +Related Machine +Learning (알고리즘 관련 +머신러닝 검증) +AI 모델이 사용하는 +알고리즘이 안전하고 신뢰할 +수 있도록 검증하는 과정 +∙모델의 학습 알고리즘을 검토하고, 보안 표준을 +충족하는지 확인한다. 알고리즘의 동작 방식과 결 +과를 분석하여 예상치 못한 오류나 보안 취약점이 +없는지 점검한다. +∙(예시) 알고리즘 코드 리뷰, 알고리즘의 보안 표준 +준수 여부 검토, 알고리즘의 동작 검증 테스트 +Risk Evaluation and +Detect to Fine-tuned +Model (위험 평가 및 세밀 +조정된 모델 탐지) +AI 모델의 잠재적인 위험을 +평가하고, 이를 미세 +조정하여 보안성을 강화하는 +과정 +∙모델의 예측 결과를 분석하여 잠재적인 위험 요소 +를 식별하고, 이를 기반으로 모델을 조정하여 보 +안성을 향상시킨다. 위험 평가에는 데이터 입력, +모델의 예측 과정, 예측 결과 등이 포함된다. +∙(예시) 모델의 예측 정확도 평가, 예측 결과의 이 +상 탐지, 모델 파라미터 조정 및 튜닝 +Process Automation for +Software Visual Tools +(소프트웨어 시각화 도구를 +위한 프로세스 자동화) +소프트웨어 시각화 도구를 +사용하여 모델의 동작과 보안 +상태를 시각적으로 +모니터링하고, 이를 +자동화하는 과정 +∙모델의 동작 상태와 보안 상태를 실시간으로 모니 +터링할 수 있는 시각화 도구를 구축하고, 이를 통 +해 자동으로 보안 상태를 점검하고 보고하는 시스 +템을 운영한다. +∙(예시) 실시간 보안 대시보드 구축, 모델 동작 모 +니터링 시각화 도구 개발, 보안 상태 자동 보고 +시스템 + + +![이미지 236-0](images/p0236_img0.png) + + +![이미지 236-1](images/p0236_img1.png) + + +![이미지 236-2](images/p0236_img2.png) + + +![이미지 236-3](images/p0236_img3.png) + + +--- + +부록 +●사이버 보안(Cyber Security) 기술 적용 +- 탐지 관점에서 Cyber Security는 다양한 영역에서 보안 위협을 실시간으로 탐지하고 대응하는 +것을 목표로 한다. AI Security Framework 탐지 및 대응 부문에서 Cyber Security는 애플리 +케이션, 네트워크, 시스템, 데이터베이스, 장치 등의 다양한 계층에서 보안을 강화하며, 다중 인 +증, 접근 통제, 암호화와 같은 최신 보안 기술을 적용한다. 이를 통해 AI 시스템이 안전하게 운 +영되고, 데이터 무결성 및 기밀성이 유지되며, 시스템 가용성이 보장될 수 있도록 한다. 또한, 실 +모니터링 및 침해 대응 절차를 통해 잠재적인 위협을 빠르게 식별하고 대응한다. +▸탐지・대응 부문별 목표 및 요구사항은 다음과 같다. +구분 +목표 및 요구사항 +Data Collection +Modules +(데이터 수집 모듈) +[목표] 다양한 데이터를 수집하기 위한 장치와 방법을 추진한다. +∙장비 에이전트 설치, API 연결, 명령 실행, 추출 파일, 수동 등록, PC/서버 보안, +PKI/SSO, NMS, SMS 등을 통해 데이터를 수집한다. +∙(예시) 네트워크 장비에 에이전트를 설치하여 데이터 수집, API를 통해 외부 시스템과 +연결, 서버의 보안 로그를 수집한다. +Data Collection +System +(데이터 수집 시스템) +[목표] 실시간 데이터 수집 및 분석, 이벤트 감지를 담당한다. +∙실시간으로 데이터를 수집하고, 이를 분석하여 보안 이벤트를 감지한다. +∙(예시) 실시간 로그 수집 시스템, 네트워크 트래픽 분석 시스템, 보안 이벤트 모니터링 +시스템 +Data Management +System +(데이터 관리 시스템) +[목표] 데이터베이스 분석, 데이터 평가, 설정 및 변경 이력 관리 등을 포함한 데이터 관 +리 기능을 제공한다. +∙지속적인 DB 분석, 데이터 가치 평가, 설정 변경 이력 관리, 관리 작업 및 데이터 모니터 +링, 정기 보고서 작성, 기능 개선, 로그 분석, 템플릿 생성, 작업 자동화 등을 수행한다. +∙(예시) 데이터베이스 관리 시스템(DBMS), 로그 분석 도구, 자동화된 데이터 모니터링 +및 보고 시스템 +▸핵심 보안기술(Core Security)별 목표 및 요구사항 +구분 +목표 및 요구사항 +Prevention System +(예방 시스템) +[목표] 침해 위험 예측 및 관리, 실시간 침해 및 정보 손상 감지, 대응 시스템 연계 등을 +담당한다. +∙침해 위험을 예측하고 관리하며, 실시간으로 침해 및 정보 손상을 감지하고 대응 시스템 +과 연계한다. +∙(예시) 개인정보 보호 시스템, 실시간 침해 감지 시스템, 침해 대응 연계 시스템 +Detection and +Response +Measures +(탐지 및 대응 조치) +[목표] 실시간 데이터 수집 및 분석, 다양한 침해 상황 및 대응 시나리오 수립을 포함한다. +∙실시간으로 데이터를 수집하고 분석하며, 다양한 침해 상황에 대한 시나리오를 수립하고 +대응 조치를 마련한다. +∙(예시) 침해 대응 시나리오, 실시간 데이터 분석 시스템, 침해 대응 절차 수립 +Error Occurrence +and Reporting +(오류 발생 및 보고) +[목표] 실시간 오류 감지, 오류 발생 및 보고를 담당한다. +∙실시간으로 오류를 감지하고, 발생한 오류를 저장 및 보고한다. +∙(예시) 오류 감지 시스템, 오류 보고 시스템, 실시간 오류 모니터링 도구 + + +![이미지 237-0](images/p0237_img0.png) + + +![이미지 237-1](images/p0237_img1.png) + + +![이미지 237-2](images/p0237_img2.png) + + +![이미지 237-3](images/p0237_img3.png) + + +--- + + + +--- + +집필진 +● +상명대학교 유진호 교수 +● +한신대학교 홍승필 교수 +● +개인정보보호협회 정상호 부장 +● +상명대학교 김민정 교수 +● +과학기술정보통신부 정보보호기획과 +● +한국인터넷진흥원(KISA) +- 황보성 본부장, 이익섭 실장, 김성훈 팀장, 김관영 선임연구원 +자문반 +● +중앙대학교 이기혁 교수 +● +연세대학교 권태경 교수 +● +제이앤시큐리티 김경하 대표 +● +카카오모빌리티 김정민 실장 +인 +쇄 +발 + +행 +발행처 +편집․제작 +2025년 12월 +2025년 12월 +한국인터넷진흥원(KISA, Korea Internet & Security Agency) 전라남도 나주시 진흥길 9 +Tel: 1544-5118 +아람에디트 +<비매품> + +## 1. 본 자료의 저작권은 한국인터넷진흥원에 있으며, 무단 전제를 금합니다. + + +## 2. 본 자료의 전문 PDF 파일은 한국인터넷진흥원 공식 홈페이지에서 무료로 다운받으실 수 있습니다. diff --git a/authorkit/converted/ref-003/merge_all.py b/authorkit/converted/ref-003/merge_all.py new file mode 100644 index 0000000..bdce493 --- /dev/null +++ b/authorkit/converted/ref-003/merge_all.py @@ -0,0 +1,107 @@ +"""전체 draft를 합본 — 기존 1~22장(archive) + 신규 23~26장 + 부록""" +import re +from pathlib import Path + +BASE = Path("C:/Users/Nowzero/PycharmProjects/Skills/KESE-KIT/authorkit") +ARCHIVE_KO = BASE / "archive" / "drafts-ko-chapters" +NEW_DRAFTS = BASE / "drafts" / "KESE-KIT-KO" +OUT = NEW_DRAFTS / "KESE-KIT-완전판.md" + +CHAPTER_RE = re.compile(r"^#\s+(\d+장[\.\s].*|부록|Part\s+[IVX]+\.?.*)$") +SECTION_RE = re.compile(r"^##\s+(\d+-\d+[\.\s].*)$") + + +def make_anchor(text): + anchor = text.lower() + anchor = re.sub(r"[^\w가-힣\s-]", "", anchor) + anchor = re.sub(r"\s+", "-", anchor).strip("-") + return anchor + + +def extract_toc(content): + entries = [] + in_code = False + for line in content.splitlines(): + s = line.strip() + if s.startswith("```"): + in_code = not in_code + continue + if in_code: + continue + if s.startswith("# ") and not s.startswith("## "): + h = s[2:].strip() + if re.match(r"Part\s+[IVX]+", h): + entries.append((0, h, make_anchor(h))) + elif re.match(r"\d+장", h): + entries.append((1, h, make_anchor(h))) + elif "부록" in h or "Appendix" in h: + entries.append((1, h, make_anchor(h))) + elif s.startswith("## ") and not s.startswith("### "): + h = s[3:].strip() + if re.match(r"\d+-\d+[\.\s]", h): + entries.append((2, h, make_anchor(h))) + return entries + + +# 1) 기존 1~22장 + 부록 수집 +old_chapters = [] +for ch_dir in sorted(ARCHIVE_KO.iterdir()): + if not ch_dir.is_dir(): + continue + for md in ch_dir.glob("*.md"): + old_chapters.append((ch_dir.name, md.read_text(encoding="utf-8"))) + +# 2) 신규 23~26장 수집 +new_ch_dirs = sorted([ + d for d in NEW_DRAFTS.iterdir() + if d.is_dir() and d.name.startswith("ch") +]) +new_chapters = [] +for ch_dir in new_ch_dirs: + section_new = ch_dir / "section-new.md" + if section_new.exists(): + new_chapters.append((ch_dir.name, section_new.read_text(encoding="utf-8"))) + +all_chapters = old_chapters + new_chapters + +# 3) TOC 생성 +all_toc = [] +for _, content in all_chapters: + all_toc.extend(extract_toc(content)) + +# 4) 합본 조립 +lines = [] +lines.append("# KESE KIT") +lines.append("") +lines.append("## 주요정보통신기반시설 취약점 분석·평가 실무 가이드") +lines.append("") +lines.append("**Korea Enhanced Security Evaluation - KISA Infrastructure Toolkit**") +lines.append("") +lines.append("---") +lines.append("") +lines.append("# 목차") +lines.append("") + +for level, text, anchor in all_toc: + if level == 0: + lines.append(f"\n### {text}\n") + elif level == 1: + lines.append(f"- **[{text}](#{anchor})**") + elif level == 2: + lines.append(f" - [{text}](#{anchor})") + +lines.append("") +lines.append("---") +lines.append("") + +for folder, content in all_chapters: + lines.append(content) + lines.append("") + lines.append("---") + lines.append("") + +OUT.write_text("\n".join(lines), encoding="utf-8") +print(f"합본 완료: {OUT.name}") +print(f" 챕터: {len(old_chapters)}(기존) + {len(new_chapters)}(신규) = {len(all_chapters)}개") +print(f" 목차: {len(all_toc)}항목") +print(f" 총 줄수: {len(lines)}") diff --git a/authorkit/converted/ref-003/merge_drafts.py b/authorkit/converted/ref-003/merge_drafts.py new file mode 100644 index 0000000..e1040ba --- /dev/null +++ b/authorkit/converted/ref-003/merge_drafts.py @@ -0,0 +1,116 @@ +"""기존 챕터별 draft를 합본하고 목차를 자동 생성하는 스크립트""" +import re +from pathlib import Path + +BASE = Path("C:/Users/Nowzero/PycharmProjects/Skills/KESE-KIT/authorkit") +ARCHIVE_KO = BASE / "archive" / "drafts-ko-chapters" +ARCHIVE_EN = BASE / "archive" / "drafts-en-chapters" +OUT_KO = BASE / "drafts" / "KESE-KIT-KO" / "KESE-KIT-완전판.md" +OUT_EN = BASE / "drafts" / "KESE-KIT-EN" / "KESE-KIT-Complete-Guide.md" + +# 장 제목 패턴 +CHAPTER_RE = re.compile(r"^#\s+(\d+장[\.\s].*|부록|Part\s+[IVX]+\.?.*)$") +# 절 제목 패턴 (N-M. 제목) +SECTION_RE = re.compile(r"^##\s+(\d+-\d+[\.\s].*)$") +# Part 제목 패턴 +PART_RE = re.compile(r"^#\s+(Part\s+[IVX]+\.?.*)$") + + +def merge_chapters(archive_dir: Path, output_path: Path, title: str, subtitle: str): + chapters = [] + for ch_dir in sorted(archive_dir.iterdir()): + if not ch_dir.is_dir(): + continue + for md_file in ch_dir.glob("*.md"): + chapters.append((ch_dir.name, md_file)) + + toc_entries = [] + chapter_contents = [] + in_code_block = False + + for folder_name, md_file in chapters: + content = md_file.read_text(encoding="utf-8") + chapter_contents.append((folder_name, content)) + + for line in content.splitlines(): + stripped = line.strip() + + # 코드 블록 내부 무시 + if stripped.startswith("```"): + in_code_block = not in_code_block + continue + if in_code_block: + continue + + # # 레벨: 장 제목 또는 Part 제목만 + if stripped.startswith("# ") and not stripped.startswith("## "): + heading = stripped[2:].strip() + # Part 제목 + if re.match(r"Part\s+[IVX]+", heading): + anchor = make_anchor(heading) + toc_entries.append((0, heading, anchor)) + # 장 제목 (N장) + elif re.match(r"\d+장", heading): + anchor = make_anchor(heading) + toc_entries.append((1, heading, anchor)) + # "부록" + elif "부록" in heading or "Appendix" in heading: + anchor = make_anchor(heading) + toc_entries.append((1, heading, anchor)) + continue + + # ## 레벨: N-M 형식 절 제목만 + if stripped.startswith("## ") and not stripped.startswith("### "): + heading = stripped[3:].strip() + if re.match(r"\d+-\d+[\.\s]", heading): + anchor = make_anchor(heading) + toc_entries.append((2, heading, anchor)) + + # 합본 조립 + lines = [] + lines.append(f"# {title}") + lines.append("") + lines.append(f"## {subtitle}") + lines.append("") + lines.append("---") + lines.append("") + lines.append("# 목차") + lines.append("") + + for level, text, anchor in toc_entries: + if level == 0: # Part + lines.append(f"\n### {text}\n") + elif level == 1: # 장 + lines.append(f"- **[{text}](#{anchor})**") + elif level == 2: # 절 + lines.append(f" - [{text}](#{anchor})") + + lines.append("") + lines.append("---") + lines.append("") + + for folder_name, content in chapter_contents: + lines.append(content) + lines.append("") + lines.append("---") + lines.append("") + + output_path.parent.mkdir(parents=True, exist_ok=True) + output_path.write_text("\n".join(lines), encoding="utf-8") + return len(chapters), len(toc_entries), len(lines) + + +def make_anchor(text: str) -> str: + anchor = text.lower() + anchor = re.sub(r"[^\w가-힣\s-]", "", anchor) + anchor = re.sub(r"\s+", "-", anchor).strip("-") + return anchor + + +if ARCHIVE_KO.exists(): + ch, toc, ln = merge_chapters(ARCHIVE_KO, OUT_KO, "KESE KIT", "주요정보통신기반시설 취약점 분석·평가 실무 가이드") + print(f"[KO] {ch}개 챕터, 목차 {toc}항목, {ln}줄") + +if ARCHIVE_EN.exists(): + ch, toc, ln = merge_chapters(ARCHIVE_EN, OUT_EN, "KESE KIT", "CII Vulnerability Assessment Practical Guide") + print(f"[EN] {ch}개 챕터, 목차 {toc}항목, {ln}줄") diff --git a/authorkit/converted/ref-006/conversion-log.md b/authorkit/converted/ref-006/conversion-log.md new file mode 100644 index 0000000..2507467 --- /dev/null +++ b/authorkit/converted/ref-006/conversion-log.md @@ -0,0 +1,10 @@ +# Conversion Log + +- **Source**: 우주 보안모델 Part1 요약본.pdf +- **Ref ID**: ref-006 +- **Pages**: 22 +- **Converted**: 2026-04-02 01:22 +- **OCR Engine**: PaddleOCR (Korean + GPU) +- **Text characters**: 12,746 +- **Images extracted**: 8 +- **Headings detected**: 21 diff --git a/authorkit/converted/ref-007/conversion-log.md b/authorkit/converted/ref-007/conversion-log.md new file mode 100644 index 0000000..e671eed --- /dev/null +++ b/authorkit/converted/ref-007/conversion-log.md @@ -0,0 +1,10 @@ +# Conversion Log + +- **Source**: 우주 보안모델 Part1.pdf +- **Ref ID**: ref-007 +- **Pages**: 134 +- **Converted**: 2026-04-02 01:22 +- **OCR Engine**: PaddleOCR (Korean + GPU) +- **Text characters**: 117,974 +- **Images extracted**: 14 +- **Headings detected**: 481 diff --git a/authorkit/converted/ref-008/conversion-log.md b/authorkit/converted/ref-008/conversion-log.md new file mode 100644 index 0000000..bc0c7df --- /dev/null +++ b/authorkit/converted/ref-008/conversion-log.md @@ -0,0 +1,10 @@ +# Conversion Log + +- **Source**: 우주 보안모델 Part2 요약본.pdf +- **Ref ID**: ref-008 +- **Pages**: 31 +- **Converted**: 2026-04-02 01:23 +- **OCR Engine**: PaddleOCR (Korean + GPU) +- **Text characters**: 16,547 +- **Images extracted**: 0 +- **Headings detected**: 24 diff --git a/authorkit/converted/ref-009/conversion-log.md b/authorkit/converted/ref-009/conversion-log.md new file mode 100644 index 0000000..a04bf85 --- /dev/null +++ b/authorkit/converted/ref-009/conversion-log.md @@ -0,0 +1,10 @@ +# Conversion Log + +- **Source**: 우주 보안모델 Part2.pdf +- **Ref ID**: ref-009 +- **Pages**: 223 +- **Converted**: 2026-04-02 01:23 +- **OCR Engine**: PaddleOCR (Korean + GPU) +- **Text characters**: 195,171 +- **Images extracted**: 0 +- **Headings detected**: 129 diff --git a/authorkit/converted/ref-010/conversion-log.md b/authorkit/converted/ref-010/conversion-log.md new file mode 100644 index 0000000..0447978 --- /dev/null +++ b/authorkit/converted/ref-010/conversion-log.md @@ -0,0 +1,10 @@ +# Conversion Log + +- **Source**: 우주 보안모델 해설서 및 사례집.pdf +- **Ref ID**: ref-010 +- **Pages**: 218 +- **Converted**: 2026-04-02 01:24 +- **OCR Engine**: PaddleOCR (Korean + GPU) +- **Text characters**: 208,471 +- **Images extracted**: 0 +- **Headings detected**: 276 diff --git a/authorkit/converted/ref-011/analysis.md b/authorkit/converted/ref-011/analysis.md new file mode 100644 index 0000000..d49bf3d --- /dev/null +++ b/authorkit/converted/ref-011/analysis.md @@ -0,0 +1,141 @@ +# ref-011: JavaScript 시큐어코딩 가이드 (2023년 개정본) + +## 문서 정보 + +| 항목 | 값 | +|------|-----| +| 제목 | Javascript 시큐어코딩 가이드 (2023년 개정본) | +| 발행기관 | KISA (한국인터넷진흥원) | +| 연도 | 2023 | +| 페이지 | 159p | +| 대상 언어 | JavaScript (ES13+, Node.js) | + +## 구조 (목차) + +``` +PART 제1장 개요 (p.7~14) + 제1절 배경 (p.8) + 제2절 왜 자바스크립트인가 (p.10) + 제3절 가이드 목적 및 구성 (p.12) + +PART 제2장 시큐어코딩 가이드 (p.15~150) + 제1절 입력데이터 검증 및 표현 (p.16~67) — 13개 항목 + 1. SQL 삽입 (p.16) + 2. 코드 삽입 (p.22) + 3. 경로 조작 및 자원 삽입 (p.25) + 4. 크로스사이트 스크립트 XSS (p.29) + 5. 운영체제 명령어 삽입 (p.38) + 6. 위험한 형식 파일 업로드 (p.41) + 7. 신뢰되지 않은 URL주소로 자동접속 연결 (p.44) + 8. 부적절한 XML 외부 개체 참조 (p.46) + 9. XML 삽입 (p.49) + 10. LDAP 삽입 (p.52) + 11. 크로스사이트 요청 위조 CSRF (p.56) + 12. 서버사이드 요청 위조 SSRF (p.62) + 13. 보안기능 결정에 사용되는 부적절한 입력값 (p.65) + + 제2절 보안기능 (p.68~112) — 16개 항목 + 1. 적절한 인증 없는 중요 기능 허용 (p.68) + 2. 부적절한 인가 (p.71) + 3. 중요한 자원에 대한 잘못된 권한 설정 (p.73) + 4. 취약한 암호화 알고리즘 사용 (p.75) + 5. 암호화되지 않은 중요정보 (p.79) + 6. 하드코드된 중요정보 (p.83) + 7. 충분하지 않은 키 길이 사용 (p.86) + 8. 적절하지 않은 난수 값 사용 (p.89) + 9. 취약한 패스워드 허용 (p.91) + 10. 부적절한 전자서명 확인 (p.94) + 11. 부적절한 인증서 유효성 검증 (p.97) + 12. 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 (p.100) + 13. 주석문 안에 포함된 시스템 주요정보 (p.103) + 14. 솔트 없이 일방향 해쉬 함수 사용 (p.105) + 15. 무결성 검사없는 코드 다운로드 (p.107) + 16. 반복된 인증시도 제한 기능 부재 (p.110) + + 제3절 시간 및 상태 (p.113~114) — 1개 항목 + 1. 종료되지 않는 반복문 또는 재귀 함수 (p.113) + + 제4절 에러처리 (p.115~124) — 3개 항목 + 1. 오류 메시지 정보노출 (p.115) + 2. 오류상황 대응 부재 (p.119) + 3. 부적절한 예외 처리 (p.122) + + 제5절 코드오류 (p.125~132) — 3개 항목 + 1. Null Pointer 역참조 (p.125) + 2. 부적절한 자원 해제 (p.127) + 3. 신뢰할 수 없는 데이터의 역직렬화 (p.130) + + 제6절 캡슐화 (p.133~141) — 4개 항목 + 1. 잘못된 세션에 의한 데이터 정보 노출 (p.133) + 2. 제거되지 않고 남은 디버그 코드 (p.136) + 3. Public 메소드로부터 반환된 Private 배열 (p.138) + 4. Private 배열에 Public 데이터 할당 (p.140) + + 제7절 API 오용 (p.142~150) — 2개 항목 + 1. DNS lookup에 의존한 보안결정 (p.142) + 2. 취약한 API 사용 (p.145) + +PART 제3장 부록 (p.151~159) + 제1절 구현단계 보안약점 제거 기준 (p.152) + 제2절 용어정리 (p.155) +``` + +**총 항목 수: 42개** (13+16+1+3+3+4+2) + +## CWE 매핑 (47개) + +| CWE | 보안약점 | 카테고리 | +|-----|---------|---------| +| CWE-89 | SQL Injection | 입력데이터 | +| CWE-94 | Code Injection | 입력데이터 | +| CWE-95 | Eval Injection | 입력데이터 | +| CWE-22 | Path Traversal | 입력데이터 | +| CWE-99 | Resource Injection | 입력데이터 | +| CWE-79 | Cross-site Scripting (XSS) | 입력데이터 | +| CWE-78 | OS Command Injection | 입력데이터 | +| CWE-434 | Unrestricted File Upload | 입력데이터 | +| CWE-601 | Open Redirect | 입력데이터 | +| CWE-611 | XML External Entity (XXE) | 입력데이터 | +| CWE-643 | XPath Injection | 입력데이터 | +| CWE-90 | LDAP Injection | 입력데이터 | +| CWE-352 | CSRF | 입력데이터 | +| CWE-918 | SSRF | 입력데이터 | +| CWE-807 | Untrusted Input for Security Decision | 입력데이터 | +| CWE-306 | Missing Authentication | 보안기능 | +| CWE-285 | Improper Authorization | 보안기능 | +| CWE-732 | Incorrect Permission Assignment | 보안기능 | +| CWE-327 | Broken Crypto Algorithm | 보안기능 | +| CWE-312 | Cleartext Storage | 보안기능 | +| CWE-319 | Cleartext Transmission | 보안기능 | +| CWE-259 | Hard-coded Password | 보안기능 | +| CWE-321 | Hard-coded Crypto Key | 보안기능 | +| CWE-326 | Inadequate Key Size | 보안기능 | +| CWE-330 | Insufficient Randomness | 보안기능 | +| CWE-521 | Weak Password Requirements | 보안기능 | +| CWE-347 | Improper Signature Verification | 보안기능 | +| CWE-295 | Improper Certificate Validation | 보안기능 | +| CWE-539 | Sensitive Info in Persistent Cookie | 보안기능 | +| CWE-615 | Sensitive Info in Comments | 보안기능 | +| CWE-759 | Unsalted Hash | 보안기능 | +| CWE-494 | Download Without Integrity Check | 보안기능 | +| CWE-307 | Brute Force | 보안기능 | +| CWE-835 | Infinite Loop | 시간/상태 | +| CWE-674 | Uncontrolled Recursion | 시간/상태 | +| CWE-209 | Error Message Info Exposure | 에러처리 | +| CWE-390 | Error Condition Without Action | 에러처리 | +| CWE-754 | Improper Check for Exceptional Conditions | 에러처리 | +| CWE-476 | NULL Pointer Dereference | 코드오류 | +| CWE-404 | Improper Resource Shutdown | 코드오류 | +| CWE-502 | Deserialization of Untrusted Data | 코드오류 | +| CWE-488 | Data Leak Between Sessions | 캡슐화 | +| CWE-543 | Stale Session Variable | 캡슐화 | +| CWE-489 | Active Debug Code | 캡슐화 | +| CWE-495 | Private Array Returned from Public Method | 캡슐화 | +| CWE-496 | Public Data Assigned to Private Array | 캡슐화 | +| CWE-350 | Reliance on DNS Lookup | API 오용 | + +## 특이사항 + +- 각 항목마다 **안전하지 않은 코드 예시** + **안전한 코드 예시** 쌍으로 구성 +- Express.js, Sequelize, Mongoose, Node.js crypto 등 실무 프레임워크 코드 포함 +- PART 3 부록에 **구현단계 보안약점 제거 기준** 매트릭스 포함 (7카테고리 × 항목별 점검 기준) diff --git a/authorkit/converted/ref-012/analysis.md b/authorkit/converted/ref-012/analysis.md new file mode 100644 index 0000000..4d0306c --- /dev/null +++ b/authorkit/converted/ref-012/analysis.md @@ -0,0 +1,164 @@ +# ref-012: Python 시큐어코딩 가이드 (2023년 개정본) + +## 문서 정보 + +| 항목 | 값 | +|------|-----| +| 제목 | Python 시큐어코딩 가이드 (2023년 개정본) | +| 발행기관 | KISA (한국인터넷진흥원) | +| 연도 | 2023 | +| 페이지 | 176p | +| 대상 언어 | Python 3.x | + +## 구조 (목차) + +``` +PART 제1장 개요 (p.7~12) + 제1절 배경 (p.8) + 제2절 가이드 목적 및 구성 (p.10) + +PART 제2장 시큐어코딩 가이드 (p.13~167) + 제1절 입력데이터 검증 및 표현 (p.14~74) — 16개 항목 + 1. SQL 삽입 (p.14) + 2. 코드 삽입 (p.20) + 3. 경로 조작 및 자원 삽입 (p.24) + 4. 크로스사이트 스크립트 XSS (p.28) + 5. 운영체제 명령어 삽입 (p.35) + 6. 위험한 형식 파일 업로드 (p.39) + 7. 신뢰되지 않은 URL주소로 자동접속 연결 (p.42) + 8. 부적절한 XML 외부 개체 참조 (p.45) + 9. XML 삽입 (p.48) + 10. LDAP 삽입 (p.50) + 11. 크로스사이트 요청 위조 CSRF (p.54) + 12. 서버사이드 요청 위조 SSRF (p.61) + 13. HTTP 응답분할 (p.64) + 14. 정수형 오버플로우 (p.67) + 15. 보안기능 결정에 사용되는 부적절한 입력값 (p.70) + 16. 포맷 스트링 삽입 (p.73) + + 제2절 보안기능 (p.75~124) — 16개 항목 + 1. 적절한 인증 없는 중요 기능 허용 (p.75) + 2. 부적절한 인가 (p.78) + 3. 중요한 자원에 대한 잘못된 권한 설정 (p.81) + 4. 취약한 암호화 알고리즘 사용 (p.83) + 5. 암호화되지 않은 중요정보 (p.87) + 6. 하드코드된 중요정보 (p.91) + 7. 충분하지 않은 키 길이 사용 (p.94) + 8. 적절하지 않은 난수 값 사용 (p.97) + 9. 취약한 패스워드 허용 (p.101) + 10. 부적절한 전자서명 확인 (p.105) + 11. 부적절한 인증서 유효성 검증 (p.109) + 12. 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 (p.112) + 13. 주석문 안에 포함된 시스템 주요정보 (p.115) + 14. 솔트 없이 일방향 해쉬 함수 사용 (p.117) + 15. 무결성 검사없는 코드 다운로드 (p.119) + 16. 반복된 인증시도 제한 기능 부재 (p.122) + + 제3절 시간 및 상태 (p.125~130) — 2개 항목 + 1. 경쟁조건: 검사시점과 사용시점 TOCTOU (p.125) + 2. 종료되지 않는 반복문 또는 재귀 함수 (p.128) + + 제4절 에러처리 (p.131~139) — 3개 항목 + 1. 오류 메시지 정보노출 (p.131) + 2. 오류상황 대응 부재 (p.135) + 3. 부적절한 예외 처리 (p.138) + + 제5절 코드오류 (p.140~148) — 3개 항목 + 1. Null Pointer 역참조 (p.140) + 2. 부적절한 자원 해제 (p.143) + 3. 신뢰할 수 없는 데이터의 역직렬화 (p.146) + + 제6절 캡슐화 (p.149~159) — 4개 항목 + 1. 잘못된 세션에 의한 데이터 정보 노출 (p.149) + 2. 제거되지 않고 남은 디버그 코드 (p.153) + 3. Public 메소드로부터 반환된 Private 배열 (p.155) + 4. Private 배열에 Public 데이터 할당 (p.157) + + 제7절 API 오용 (p.160~167) — 2개 항목 + 1. DNS lookup에 의존한 보안결정 (p.160) + 2. 취약한 API 사용 (p.163) + +PART 제3장 부록 (p.168~176) + 제1절 구현단계 보안약점 제거 기준 (p.169) + 제2절 용어정리 (p.172) +``` + +**총 항목 수: 46개** (16+16+2+3+3+4+2) + +## CWE 매핑 (51개) + +| CWE | 보안약점 | 카테고리 | +|-----|---------|---------| +| CWE-89 | SQL Injection | 입력데이터 | +| CWE-94 | Code Injection | 입력데이터 | +| CWE-95 | Eval Injection | 입력데이터 | +| CWE-22 | Path Traversal | 입력데이터 | +| CWE-99 | Resource Injection | 입력데이터 | +| CWE-79 | Cross-site Scripting (XSS) | 입력데이터 | +| CWE-78 | OS Command Injection | 입력데이터 | +| CWE-434 | Unrestricted File Upload | 입력데이터 | +| CWE-601 | Open Redirect | 입력데이터 | +| CWE-611 | XML External Entity (XXE) | 입력데이터 | +| CWE-643 | XPath Injection | 입력데이터 | +| CWE-90 | LDAP Injection | 입력데이터 | +| CWE-352 | CSRF | 입력데이터 | +| CWE-918 | SSRF | 입력데이터 | +| CWE-113 | HTTP Response Splitting | 입력데이터 | +| CWE-190 | Integer Overflow | 입력데이터 | +| CWE-807 | Untrusted Input for Security Decision | 입력데이터 | +| CWE-134 | Format String | 입력데이터 | +| CWE-306 | Missing Authentication | 보안기능 | +| CWE-285 | Improper Authorization | 보안기능 | +| CWE-732 | Incorrect Permission Assignment | 보안기능 | +| CWE-327 | Broken Crypto Algorithm | 보안기능 | +| CWE-312 | Cleartext Storage | 보안기능 | +| CWE-319 | Cleartext Transmission | 보안기능 | +| CWE-259 | Hard-coded Password | 보안기능 | +| CWE-321 | Hard-coded Crypto Key | 보안기능 | +| CWE-326 | Inadequate Key Size | 보안기능 | +| CWE-330 | Insufficient Randomness | 보안기능 | +| CWE-521 | Weak Password Requirements | 보안기능 | +| CWE-347 | Improper Signature Verification | 보안기능 | +| CWE-295 | Improper Certificate Validation | 보안기능 | +| CWE-539 | Sensitive Info in Persistent Cookie | 보안기능 | +| CWE-615 | Sensitive Info in Comments | 보안기능 | +| CWE-759 | Unsalted Hash | 보안기능 | +| CWE-494 | Download Without Integrity Check | 보안기능 | +| CWE-307 | Brute Force | 보안기능 | +| CWE-367 | TOCTOU Race Condition | 시간/상태 | +| CWE-835 | Infinite Loop | 시간/상태 | +| CWE-674 | Uncontrolled Recursion | 시간/상태 | +| CWE-209 | Error Message Info Exposure | 에러처리 | +| CWE-390 | Error Condition Without Action | 에러처리 | +| CWE-754 | Improper Check for Exceptional Conditions | 에러처리 | +| CWE-476 | NULL Pointer Dereference | 코드오류 | +| CWE-404 | Improper Resource Shutdown | 코드오류 | +| CWE-502 | Deserialization of Untrusted Data | 코드오류 | +| CWE-488 | Data Leak Between Sessions | 캡슐화 | +| CWE-543 | Stale Session Variable | 캡슐화 | +| CWE-489 | Active Debug Code | 캡슐화 | +| CWE-495 | Private Array Returned from Public Method | 캡슐화 | +| CWE-496 | Public Data Assigned to Private Array | 캡슐화 | +| CWE-350 | Reliance on DNS Lookup | API 오용 | + +## JavaScript 가이드와의 차이점 + +| 항목 | JavaScript (ref-011) | Python (ref-012) | +|------|:-------------------:|:----------------:| +| 총 항목 수 | 42개 | 46개 | +| CWE 수 | 47개 | 51개 | +| 입력데이터 항목 | 13개 | **16개** | +| 시간/상태 항목 | 1개 | **2개** | + +**Python에만 있는 항목 (4개):** +- HTTP 응답분할 (CWE-113) +- 정수형 오버플로우 (CWE-190) +- 포맷 스트링 삽입 (CWE-134) +- 경쟁조건 TOCTOU (CWE-367) + +## 특이사항 + +- 각 항목마다 **안전하지 않은 코드 예시** + **안전한 코드 예시** 쌍으로 구성 +- Django, Flask, SQLAlchemy, cryptography, hashlib 등 실무 프레임워크 코드 포함 +- Python 특유의 pickle 역직렬화, eval() 취약점 등 언어 고유 취약점 상세 설명 +- PART 3 부록에 **구현단계 보안약점 제거 기준** 매트릭스 포함 diff --git a/authorkit/converted/ref-013/conversion-log.md b/authorkit/converted/ref-013/conversion-log.md new file mode 100644 index 0000000..f54c666 --- /dev/null +++ b/authorkit/converted/ref-013/conversion-log.md @@ -0,0 +1,21 @@ +# Conversion Log + +- **Source**: 241203_제로트러스트_가이드라인_2.0.pdf +- **Ref ID**: ref-013 +- **Pages**: 245 +- **Converted**: 2026-04-03 02:57 +- **Method**: authorkit-juice v2 (caption-matched, size-filtered) +- **Text characters**: 367,004 +- **Images kept**: 3 +- **Images skipped**: 160 +- **Headings detected**: 216 +- **Tables detected**: 121 +- **OCR pages**: 5 + +## Image Mapping + +| Image File | Page | Size | Caption | +|-----------|:----:|------|--------| +| p0109_img0.png | 109 | 1242x95 | 그림 4-1] 의 붉은색 막대그래프를 보면 어디서부터 붉은색인지에 대해 단정 짓기 | +| p0177_img0.png | 177 | 883x504 | 그림 5-3 제로트러스트 침투시험 예시 (네트워크 세분화 검증 시나리오) | +| p0211_img0.png | 211 | 1545x758 | | diff --git a/authorkit/converted/ref-014/conversion-log.md b/authorkit/converted/ref-014/conversion-log.md new file mode 100644 index 0000000..ac19cb7 --- /dev/null +++ b/authorkit/converted/ref-014/conversion-log.md @@ -0,0 +1,16 @@ +# Conversion Log + +- **Source**: 제로트러스트 성숙도 모델 해설서.pdf +- **Ref ID**: ref-014 +- **Pages**: 182 +- **Converted**: 2026-04-03 02:57 +- **Method**: authorkit-juice v2 (caption-matched, size-filtered) +- **Text characters**: 286,699 +- **Images kept**: 0 +- **Images skipped**: 0 +- **Headings detected**: 28 +- **Tables detected**: 88 +- **OCR pages**: 1 + +> Images skipped entirely (document uses full-page image rendering) + diff --git a/authorkit/converted/ref-015/conversion-log.md b/authorkit/converted/ref-015/conversion-log.md new file mode 100644 index 0000000..86bb95d --- /dev/null +++ b/authorkit/converted/ref-015/conversion-log.md @@ -0,0 +1,87 @@ +# Conversion Log + +- **Source**: 251222_OT_환경의_제로트러스트_적용_안내서 (1).pdf +- **Ref ID**: ref-015 +- **Pages**: 67 +- **Converted**: 2026-04-03 02:57 +- **Method**: authorkit-juice v2 (caption-matched, size-filtered) +- **Text characters**: 97,570 +- **Images kept**: 69 +- **Images skipped**: 77 +- **Headings detected**: 7 +- **Tables detected**: 27 +- **OCR pages**: 2 + +## Image Mapping + +| Image File | Page | Size | Caption | +|-----------|:----:|------|--------| +| p0003_img0.png | 3 | 2551x3579 | | +| p0004_img1.png | 4 | 2551x3579 | | +| p0005_img3.png | 5 | 2294x3579 | | +| p0006_img0.png | 6 | 2551x3579 | | +| p0007_img0.png | 7 | 2551x3579 | | +| p0008_img0.png | 8 | 2551x3579 | | +| p0008_img1.png | 8 | 1541x134 | | +| p0008_img2.png | 8 | 1541x134 | | +| p0008_img3.png | 8 | 1541x134 | | +| p0008_img4.png | 8 | 1541x134 | | +| p0008_img5.png | 8 | 1541x134 | | +| p0008_img6.png | 8 | 1541x134 | | +| p0009_img0.png | 9 | 2551x408 | | +| p0009_img1.png | 9 | 2551x407 | | +| p0009_img2.png | 9 | 1886x102 | | +| p0010_img0.png | 10 | 1886x102 | | +| p0011_img0.png | 11 | 2551x408 | | +| p0011_img1.png | 11 | 2551x407 | | +| p0011_img2.png | 11 | 1894x102 | | +| p0011_img3.png | 11 | 1891x73 | | +| p0011_img4.png | 11 | 1891x356 | | +| p0011_img5.png | 11 | 1891x73 | | +| p0013_img0.png | 13 | 1971x534 | 그림 1> OT 환경 내 구성 요소 현황 | +| p0014_img0.png | 14 | 1059x774 | 그림 2 참조) | +| p0015_img1.png | 15 | 1855x922 | 그림 3> IEC 62443 표준 시리즈 | +| p0016_img0.png | 16 | 1894x102 | | +| p0016_img1.png | 16 | 1891x73 | | +| p0016_img2.png | 16 | 1891x356 | | +| p0016_img3.png | 16 | 1891x73 | | +| p0019_img1.png | 19 | 1277x612 | 그림 4> 제로트러스트 아키텍처 보안 모델 및 논리 구성 요소 | +| p0021_img0.png | 21 | 2551x408 | | +| p0021_img1.png | 21 | 2551x407 | | +| p0022_img0.png | 22 | 1347x552 | 그림 5> OT 보안 성숙도별 사이버 침해사고 비율 | +| p0022_img1.png | 22 | 600x245 | 그림 5> OT 보안 성숙도별 사이버 침해사고 비율 | +| p0028_img1.png | 28 | 2156x1530 | | +| p0031_img0.png | 31 | 1919x940 | | +| p0032_img0.png | 32 | 2551x408 | | +| p0032_img1.png | 32 | 2551x407 | | +| p0032_img2.png | 32 | 1886x102 | | +| p0032_img3.png | 32 | 1891x73 | | +| p0032_img4.png | 32 | 1891x356 | | +| p0032_img5.png | 32 | 1891x73 | | +| p0033_img0.png | 33 | 521x272 | 그림 7> NRC의 원자력시설 제로트러스트 핵심 요소 및 교차 요소 | +| p0034_img0.png | 34 | 732x405 | 그림 8> NRC의 원자력시설 논리적 제로트러스트 아키텍처 | +| p0035_img0.png | 35 | 1138x391 | 그림 9> NRC의 원자력시설 접근제어 배치 모델 | +| p0036_img0.png | 36 | 1275x439 | 그림 10> NRC 신뢰 점수 계산 방법 예시 | +| p0037_img0.png | 37 | 1170x532 | 그림 11> NRC의 신뢰 속성 | +| p0037_img1.png | 37 | 634x615 | 그림 11> NRC의 신뢰 속성 | +| p0040_img0.png | 40 | 1032x527 | 그림 13> CSA의 OT 환경 제로트러스트 접근법 | +| p0043_img1.png | 43 | 1425x720 | 그림 14> 일반적인 음용수 시스템을 위한 엔터프라이즈 IT 및 OT 환경의 구분 | +| p0044_img0.png | 44 | 2400x742 | 그림 15> 는 Microsoft Defender for IoT의 Purdue 모델 기반 배치 구조를 보여줌 | +| p0044_img1.png | 44 | 2400x369 | 그림 15> 는 Microsoft Defender for IoT의 Purdue 모델 기반 배치 구조를 보여줌 | +| p0046_img0.png | 46 | 1886x102 | | +| p0046_img1.png | 46 | 1891x73 | | +| p0046_img2.png | 46 | 1891x356 | | +| p0046_img3.png | 46 | 1891x73 | | +| p0050_img0.png | 50 | 2551x408 | | +| p0050_img1.png | 50 | 2551x407 | | +| p0053_img1.png | 53 | 616x607 | 그림 16> 제로트러스트 아키텍처 구성 요소 배치 시나리오 예시 1 | +| p0054_img0.png | 54 | 1048x987 | 그림 17> 제로트러스트 아키텍처 구성 요소 배치 시나리오 예시 2 | +| p0055_img5.png | 55 | 1455x589 | 그림 18> OT 환경에 적합한 제로트러스트 도입 로드맵 | +| p0059_img1.png | 59 | 1532x552 | | +| p0059_img2.png | 59 | 1532x275 | | +| p0060_img0.png | 60 | 2551x408 | | +| p0060_img1.png | 60 | 2551x407 | | +| p0062_img0.png | 62 | 2551x408 | | +| p0062_img1.png | 62 | 2551x407 | | +| p0064_img0.png | 64 | 2551x408 | | +| p0064_img1.png | 64 | 2551x407 | | diff --git a/authorkit/drafts/KESE-KIT-EN/KESE-KIT-Complete-Guide.md b/authorkit/drafts/KESE-KIT-EN/KESE-KIT-Complete-Guide.md new file mode 100644 index 0000000..4969962 --- /dev/null +++ b/authorkit/drafts/KESE-KIT-EN/KESE-KIT-Complete-Guide.md @@ -0,0 +1,8384 @@ +# KESE KIT + +## CII Vulnerability Assessment Practical Guide + +--- + +# 목차 + + - [1-1. What is KESE KIT?](#1-1-what-is-kese-kit) + - [1-2. Understanding Critical Information Infrastructure (CII)](#1-2-understanding-critical-information-infrastructure-cii) + - [1-3. Necessity of Vulnerability Analysis and Assessment](#1-3-necessity-of-vulnerability-analysis-and-assessment) + - [1-4. Book Structure and How to Use It](#1-4-book-structure-and-how-to-use-it) + - [1-5. Learning Paths by Reader Type](#1-5-learning-paths-by-reader-type) + - [2-1. Overview of the Act on Protection of Information and Communications Infrastructure](#2-1-overview-of-the-act-on-protection-of-information-and-communications-infrastructure) + - [2-2. Vulnerability Analysis and Assessment Obligation (Article 9)](#2-2-vulnerability-analysis-and-assessment-obligation-article-9) + - [2-3. Role of KISA and Assessment Framework](#2-3-role-of-kisa-and-assessment-framework) + - [2-4. Assessment Item Classification (Administrative/Physical/Technical)](#2-4-assessment-item-classification-administrativephysicaltechnical) + - [2-5. Judgment Criteria (Good/Partial/Vulnerable)](#2-5-judgment-criteria-goodpartialvulnerable) + - [3-1. Account Management (U-01 ~ U-13)](#3-1-account-management-u-01-u-13) + - [3-2. File and Directory Management (U-14 ~ U-33)](#3-2-file-and-directory-management-u-14-u-33) + - [3-3. Service Management (U-34 ~ U-63)](#3-3-service-management-u-34-u-63) + - [3-4. Patch Management (U-64)](#3-4-patch-management-u-64) + - [3-5. Log Management (U-65 ~ U-68)](#3-5-log-management-u-65-u-68) + - [3-6. Automation Scripts](#3-6-automation-scripts) + - [4-1. Account Management (W-01 ~ W-14)](#4-1-account-management-w-01-w-14) + - [4-2. Service Management (W-15 ~ W-39)](#4-2-service-management-w-15-w-39) + - [4-3. Patch Management (W-40 ~ W-41)](#4-3-patch-management-w-40-w-41) + - [4-4. Log Management (W-42 ~ W-47)](#4-4-log-management-w-42-w-47) + - [4-5. Security Management (W-48 ~ W-73)](#4-5-security-management-w-48-w-73) + - [4-6. PowerShell Assessment Script](#4-6-powershell-assessment-script) + - [5-1. Account Management (WS-01 ~ WS-05)](#5-1-account-management-ws-01-ws-05) + - [5-2. Service Management (WS-06 ~ WS-30)](#5-2-service-management-ws-06-ws-30) + - [5-3. Security Settings (WS-31 ~ WS-43)](#5-3-security-settings-ws-31-ws-43) + - [5-4. Patch and Log Management (WS-44 ~ WS-47)](#5-4-patch-and-log-management-ws-44-ws-47) + - [6-1. Input Validation (SQL Injection, XSS, CSRF)](#6-1-input-validation-sql-injection-xss-csrf) + - [6-2. Authentication and Session Management](#6-2-authentication-and-session-management) + - [6-3. Access Control and Authorization Verification](#6-3-access-control-and-authorization-verification) + - [6-4. Information Disclosure Prevention](#6-4-information-disclosure-prevention) + - [6-5. Security in Vibe Coding Environments](#6-5-security-in-vibe-coding-environments) + - [7-1. Account Management (D-01 ~ D-16)](#7-1-account-management-d-01-d-16) + - [7-2. Access Management (D-17 ~ D-23)](#7-2-access-management-d-17-d-23) + - [7-3. Option Management (D-24 ~ D-30)](#7-3-option-management-d-24-d-30) + - [7-4. Patch Management (D-31 ~ D-32)](#7-4-patch-management-d-31-d-32) + - [7-5. DB Assessment Scripts](#7-5-db-assessment-scripts) + - [8-1. Account Management (N-01 ~ N-10)](#8-1-account-management-n-01-n-10) + - [8-2. Access Management (N-11 ~ N-18)](#8-2-access-management-n-11-n-18) + - [8-3. Patch Management (N-19)](#8-3-patch-management-n-19) + - [8-4. Log Management (N-20 ~ N-24)](#8-4-log-management-n-20-n-24) + - [8-5. Feature Management (N-25 ~ N-40)](#8-5-feature-management-n-25-n-40) + - [9-1. Firewall Assessment (S-01 ~ S-19)](#9-1-firewall-assessment-s-01-s-19) + - [9-2. IDS/IPS Assessment](#9-2-idsips-assessment) + - [9-3. WAF Assessment](#9-3-waf-assessment) + - [10-1. Virtualization Equipment (V-01 ~ V-36)](#10-1-virtualization-equipment-v-01-v-36) + - [10-2. Cloud Environment (CL-01 ~ CL-14)](#10-2-cloud-environment-cl-01-cl-14) + - [10-3. Container Security (Docker, K8s)](#10-3-container-security-docker-k8s) + - [11-1. Account Management (PC-01 ~ PC-04)](#11-1-account-management-pc-01-pc-04) + - [11-2. Access Management (PC-05 ~ PC-11)](#11-2-access-management-pc-05-pc-11) + - [11-3. Patch Management (PC-12 ~ PC-13)](#11-3-patch-management-pc-12-pc-13) + - [11-4. Security Management (PC-14 ~ PC-18)](#11-4-security-management-pc-14-pc-18) + - [12-1. Control System Characteristics](#12-1-control-system-characteristics) + - [12-2. Account/Service Management (C-01 ~ C-14)](#12-2-accountservice-management-c-01-c-14) + - [12-3. Network/Physical Access Control (C-19 ~ C-27)](#12-3-networkphysical-access-control-c-19-c-27) + - [12-4. Security Threat Detection and Recovery (C-28 ~ C-38)](#12-4-security-threat-detection-and-recovery-c-28-c-38) + - [13-1. Information Security Policy (A-1 ~ A-7)](#13-1-information-security-policy-a-1-a-7) + - [13-2. Information Security Organization (A-8 ~ A-9)](#13-2-information-security-organization-a-8-a-9) + - [13-3. Policy/Guideline Document Templates](#13-3-policyguideline-document-templates) + - [14-1. Asset Classification (A-10 ~ A-14)](#14-1-asset-classification-a-10-a-14) + - [14-2. Risk Management (A-15 ~ A-17)](#14-2-risk-management-a-15-a-17) + - [14-3. Audit (A-18 ~ A-20)](#14-3-audit-a-18-a-20) + - [14-4. Asset Inventory Management Automation](#14-4-asset-inventory-management-automation) + - [15-1. Human Resource Security (A-21 ~ A-26)](#15-1-human-resource-security-a-21-a-26) + - [15-2. External Party Security (A-27 ~ A-33)](#15-2-external-party-security-a-27-a-33) + - [15-3. Security Pledge Templates](#15-3-security-pledge-templates) + - [16-1. Training (A-34 ~ A-38)](#16-1-training-a-34-a-38) + - [16-2. Authentication and Authorization (A-39 ~ A-42)](#16-2-authentication-and-authorization-a-39-a-42) + - [16-3. Access Control (A-43 ~ A-55)](#16-3-access-control-a-43-a-55) + - [17-1. Operations Management (A-56 ~ A-93)](#17-1-operations-management-a-56-a-93) + - [17-2. Security Management (A-94 ~ A-103)](#17-2-security-management-a-94-a-103) + - [17-3. Network Air-Gap Configuration](#17-3-network-air-gap-configuration) + - [18-1. Incident Response (A-104 ~ A-113)](#18-1-incident-response-a-104-a-113) + - [18-2. Business Continuity (A-114 ~ A-118)](#18-2-business-continuity-a-114-a-118) + - [18-3. Incident Reporting Procedures](#18-3-incident-reporting-procedures) + - [19-1. Physical Security Assessment (B-1 ~ B-9)](#19-1-physical-security-assessment-b-1-b-9) + - [19-2. Protected Area Management](#19-2-protected-area-management) + - [20-1. Public Organization Security Requirements](#20-1-public-organization-security-requirements) + - [20-2. Information Security Budget Guidelines](#20-2-information-security-budget-guidelines) + - [20-3. Pre-Certified Product Utilization](#20-3-pre-certified-product-utilization) + - [21-1. Procurement Agency Security Requirements](#21-1-procurement-agency-security-requirements) + - [21-2. Proposal Writing Guide](#21-2-proposal-writing-guide) + - [21-3. Security Review Response](#21-3-security-review-response) + - [22-1. Assessment Script Architecture](#22-1-assessment-script-architecture) + - [22-2. Integrated Assessment Scripts](#22-2-integrated-assessment-scripts) + - [22-3. Result Collection and Reporting](#22-3-result-collection-and-reporting) + - [22-4. CI/CD Pipeline Integration](#22-4-cicd-pipeline-integration) + +--- + +# Chapter 1. Introduction + +> Part I. Fundamentals + +--- + +## 1-1. What is KESE KIT? + +KESE KIT (Korea Enhanced Security Evaluation - KISA Infrastructure Toolkit) is a practical guide for systematically conducting vulnerability analysis and assessment of Critical Information Infrastructure (CII). + +### Purpose of KESE KIT + +KESE KIT was developed with the following objectives: + +1. **Enhance practitioner capabilities**: Help vulnerability assessment practitioners accurately understand and apply inspection items. +2. **Support inspection automation**: Automate repetitive technical inspections with scripts to improve efficiency. +3. **Provide consistent evaluation criteria**: Ensure assessment consistency by clarifying Good/Partial/Vulnerable judgment criteria. +4. **Optimize for government project environments**: Provide practical guidance reflecting the unique requirements of public institutions and government projects. + +### KESE KIT Structure + +``` +┌─────────────────────────────────────────────────────────────┐ +│ KESE KIT │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Technical │ │Administrative│ │ Physical │ │ +│ │Vulnerabilities│ │Vulnerabilities│ │Vulnerabilities│ │ +│ │ (~424) │ │ (127) │ │ (9) │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ │ +│ └────────────────┼────────────────┘ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ Automation Scripts / Tools │ │ +│ │ (Bash, PowerShell, Python) │ │ +│ └─────────────────────────────────────────────────────┘ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ Checklists / Forms / Reports │ │ +│ └─────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +| Component | Description | +|-----------|-------------| +| Technical Vulnerability Assessment | 12 domains including Unix, Windows, Web, DBMS, Network | +| Administrative Vulnerability Assessment | 14 areas including Policy, Organization, HR Security, Access Control | +| Physical Vulnerability Assessment | Physical security, Protected area management | +| Automation Scripts | Automation tools for technical inspection items | +| Checklists/Forms | Templates ready for immediate practical use | + +> **TIP** +> KESE KIT is based on the official guide from the Korea Internet & Security Agency (KISA), restructured with a focus on practical application. + +--- + +## 1-2. Understanding Critical Information Infrastructure (CII) + +### What is Critical Information Infrastructure? + +Critical Information Infrastructure (CII) refers to electronic control and management systems related to national security, administration, defense, public safety, finance, telecommunications, transportation, energy, and other sectors. If compromised, these systems could have significant impacts on national security and the economy and society. + +### Legal Basis + +Critical Information Infrastructure is designated and managed under the "Act on the Protection of Information and Communications Infrastructure." + +``` +Article 8 of the Act on the Protection of Information and Communications Infrastructure +(Designation of Critical Information Infrastructure) + +① The head of a central administrative agency may designate information and + communications infrastructure that requires protection from electronic + intrusion activities as critical information infrastructure, considering + the following matters within their jurisdiction. +``` + +### CII Designation Status (By Sector) + +| Sector | Examples | +|--------|----------| +| Finance | Bank computer networks, Securities trading systems | +| Telecommunications | Major carrier networks | +| Energy | Power grid control systems, Gas supply networks | +| Transportation | Air traffic control systems, Railway control systems | +| Healthcare | Major hospital medical information systems | +| Administration | Resident registration systems, National Tax Service systems | + +> **WARNING** +> Organizations managing CII-designated facilities must conduct mandatory annual vulnerability analysis and assessment. Non-compliance may result in legal penalties. + +--- + +## 1-3. Necessity of Vulnerability Analysis and Assessment + +### Legal Obligation + +Under Article 9 of the "Act on the Protection of Information and Communications Infrastructure," organizations managing critical information infrastructure must conduct regular vulnerability analysis and assessment. + +``` +Article 9 of the Act on the Protection of Information and Communications Infrastructure +(Vulnerability Analysis and Assessment) + +① The head of a managing organization shall analyze and assess vulnerabilities + of their critical information infrastructure regularly as prescribed by + Presidential Decree. +``` + +### Assessment Performers + +| Performer | Description | +|-----------|-------------| +| Self-assessment | Conducted by the organization's own personnel | +| External delegation | Delegated to KISA or specialized information security service companies | + +### Assessment Categories + +Vulnerability analysis and assessment is divided into three main categories: + +| Category | Items | Key Content | +|----------|:-----:|-------------| +| Technical Vulnerabilities | ~424 | System security: servers, networks, databases, web | +| Administrative Vulnerabilities | 127 | Policy, organization, HR security, access control | +| Physical Vulnerabilities | 9 | Physical security, protected area management | + +### Utilizing Assessment Results + +Vulnerability analysis and assessment results are used as follows: + +1. **Developing protection measures**: Establish improvement plans for identified vulnerabilities +2. **Budget justification**: Provide objective basis for information security budget requests +3. **Executive reporting**: Report on organization's security posture +4. **Regulatory compliance**: Evidence of legal obligation fulfillment + +--- + +## 1-4. Book Structure and How to Use It + +### Overall Structure + +KESE KIT consists of 4 Parts and Appendices. + +| Part | Content | Target Audience | +|------|---------|-----------------| +| **Part I** | Fundamentals | All readers | +| **Part II** | Technical Vulnerability Assessment | System/Security administrators | +| **Part III** | Administrative/Physical Vulnerability Assessment | Security managers, Policy officers | +| **Part IV** | Practical Application | Government project managers, Developers | +| **Appendix** | Checklists, Forms, Glossary | Everyone | + +### Detailed Part Contents + +#### Part I. Fundamentals (Chapters 1-2) +- Concepts and legal basis of Critical Information Infrastructure +- Understanding the vulnerability analysis and assessment framework + +#### Part II. Technical Vulnerability Assessment (Chapters 3-12) +- Unix/Linux, Windows server inspection +- Web service, Web application inspection +- DBMS, Network, Security equipment inspection +- Virtualization, Cloud, Control system inspection + +#### Part III. Administrative/Physical Vulnerability Assessment (Chapters 13-19) +- Information security policy and organization +- Asset management, Risk management +- HR security, Third-party security +- Access control, Operations management +- Incident response, Business continuity +- Physical security + +#### Part IV. Practical Application (Chapters 20-22) +- Applying to government project environments +- Responding to public procurement market +- Building automation tools + +### How to Use + +> **TIP** +> This book doesn't need to be read sequentially from beginning to end. Select and reference the chapters you need based on your responsibilities. + +--- + +## 1-5. Learning Paths by Reader Type + +### Recommended Paths by Reader Type + +#### Developers Using Vibe Coding +``` +Chapter 1 → Chapter 6 (Web Application) → Chapter 22 (Automation Tools) → Appendix +``` +Understand the core of web application security and learn how to automate security during development. + +#### Server Operations Staff +``` +Chapter 1 → Chapter 2 → Chapter 3 (Unix) → Chapter 4 (Windows) → Chapter 7 (DBMS) → Appendix +``` +Learn how to directly inspect and remediate vulnerabilities on servers you operate. + +#### Government Project Developers +``` +Chapter 1 → Chapter 2 → Chapter 20 (Government Projects) → Chapter 21 (Public Procurement) → Required technical chapters +``` +First understand security requirements for government project environments, then study necessary technical areas. + +#### Security Managers/CISO +``` +Chapter 1 → Chapter 2 → Chapter 13 (Policy) → Chapter 14 (Asset Management) → Chapter 18 (Incident Response) → Full overview +``` +Learn how to inspect and improve organization's security framework from a management perspective. + +#### Those New to Servers +``` +Chapter 1 → Chapter 2 → Chapter 3 (Unix basics) → Chapter 5 (Web service basics) → Gradual expansion +``` +Build inspection capabilities by learning step by step from the basics. + +### Quick Reference Guide + +| Situation | Reference Chapter | +|-----------|-------------------| +| "Need to inspect Linux servers" | Chapter 3 | +| "Need to inspect web vulnerabilities" | Chapters 5, 6 | +| "Need to establish information security policy" | Chapter 13 | +| "Need incident response procedures" | Chapter 18 | +| "Want to create inspection scripts" | Chapter 22 | + +--- + +## Summary + +- **KESE KIT** is a practical guide for vulnerability analysis and assessment of Critical Information Infrastructure (CII). +- Under Article 9 of the "Act on the Protection of Information and Communications Infrastructure," CII managing organizations must conduct annual vulnerability analysis and assessment. +- Assessment items are categorized into **Technical** (~424), **Administrative** (127), and **Physical** (9) domains. +- Structured so readers can **selectively study** based on their role and needs. + +--- + +*Next Chapter: Chapter 2. Legal Framework and Assessment Framework* + + +--- + +# Chapter 2. Legal Framework and Assessment Framework + +> Part I. Fundamentals + +--- + +## 2-1. Overview of the Act on Protection of Information and Communications Infrastructure + +### Purpose of the Act + +The "Act on the Protection of Information and Communications Infrastructure" aims to ensure stable operation of critical information infrastructure by establishing and implementing protection measures against electronic intrusion activities, thereby ensuring national security and stability of citizens' lives. + +### Key Provisions + +| Article | Content | Related Work | +|---------|---------|--------------| +| Article 5 | Critical Information Infrastructure Protection Committee | Policy deliberation and coordination | +| Article 8 | Designation of Critical Information Infrastructure | CII designation criteria | +| Article 9 | Vulnerability Analysis and Assessment | **Core obligation provision** | +| Article 10 | Protection Guidelines | Protection measure standards | +| Article 12 | Notification of Security Incidents | Incident reporting obligation | +| Article 13 | Response to Security Incidents | Recovery and response | + +### Legal Framework + +``` +Act on Protection of Information and Communications Infrastructure (Law) + ├── Enforcement Decree (Presidential Decree) + ├── Enforcement Rules (Ministerial Ordinance) + └── Protection Guidelines (KISA Notice) + ├── Technical Vulnerability Analysis and Assessment Detailed Guide + └── Administrative/Physical Vulnerability Analysis and Assessment Guide +``` + +> **TIP** +> The inspection items covered in this book are based on KISA's official guides. Check for the latest version when laws are amended or guides are updated. + +--- + +## 2-2. Vulnerability Analysis and Assessment Obligation (Article 9) + +### Original Legal Text + +``` +Article 9 of the Act on Protection of Information and Communications Infrastructure +(Vulnerability Analysis and Assessment) + +① The head of a managing organization shall regularly analyze and assess + vulnerabilities of their critical information infrastructure as prescribed + by Presidential Decree. + +② The head of a central administrative agency may order the head of the + relevant managing organization to analyze and assess vulnerabilities of + critical information infrastructure in any of the following cases: + 1. When necessary to protect critical information infrastructure from + new types of electronic intrusion activities + 2. When significant changes have occurred in the critical information + infrastructure requiring separate vulnerability analysis and assessment + +③ When the head of a managing organization intends to analyze and assess + vulnerabilities pursuant to paragraphs (1) and (2), they may have KISA + or an information security service company designated under Article 23 + of the "Act on Promotion of Information Security Industry" analyze and + assess the vulnerabilities of their critical information infrastructure + as prescribed by Presidential Decree. +``` + +### Assessment Frequency + +| Type | Frequency | Notes | +|------|-----------|-------| +| Regular assessment | **At least annually** | Mandatory | +| Ad-hoc assessment | When significant changes occur | By order of central administrative agency | + +### Assessment Methods + +Vulnerability analysis and assessment can be performed in one of three ways: + +| Method | Description | Pros | Cons | +|--------|-------------|------|------| +| **Self-assessment** | Conducted by organization's own personnel | Cost savings, Internal capability building | Possible lack of expertise | +| **KISA delegation** | Delegated to Korea Internet & Security Agency | High expertise, Credibility | Schedule coordination needed | +| **Specialized company delegation** | Delegated to information security service company | Expertise, Flexible scheduling | Cost incurred | + +> **WARNING** +> Failure to conduct vulnerability analysis and assessment or falsely reporting results may result in legal penalties. + +--- + +## 2-3. Role of KISA and Assessment Framework + +### Role of Korea Internet & Security Agency (KISA) + +The Korea Internet & Security Agency (KISA) performs the following roles related to critical information infrastructure protection: + +| Role | Content | +|------|---------| +| Conducting vulnerability analysis and assessment | Direct execution when delegated by managing organizations | +| Guide development and distribution | Developing inspection items and methodologies | +| Technical support | Technical support for self-assessment | +| Professional training | Training vulnerability assessment professionals | +| Incident response | Technical support during security incidents | + +### Assessment Framework Structure + +``` +┌─────────────────────────────────────────────────────────┐ +│ Central Administrative Agencies │ +│ (Ministry of Science and ICT, etc.) │ +└─────────────────────┬───────────────────────────────────┘ + │ Policy guidelines + ▼ +┌─────────────────────────────────────────────────────────┐ +│ Korea Internet & Security Agency (KISA) │ +│ - Guide development - Assessment - Support │ +└─────────────────────┬───────────────────────────────────┘ + │ Guides/Support + ▼ +┌─────────────────────────────────────────────────────────┐ +│ Managing Organizations │ +│ (Organizations operating CII) │ +│ - Self-assessment or delegated assessment │ +│ - Results reporting and protection measure implementation │ +└─────────────────────────────────────────────────────────┘ +``` + +### Assessment Process + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Vulnerability Analysis and Assessment Process │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │1. Planning│───▶│2. Data │───▶│3. Vuln. │ │ +│ │ │ │Collection│ │Assessment│ │ +│ └──────────┘ └──────────┘ └────┬─────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │6. Protect│◀───│5. Report │◀───│4. Result │ │ +│ │ Measures │ │ Writing │ │ Analysis │ │ +│ └────┬─────┘ └──────────┘ └──────────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────┐ │ +│ │7. Impl. │ │ +│ │ Review │ │ +│ └──────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Phase | Activities | Deliverables | +|:-----:|------------|--------------| +| 1 | Planning | Assessment plan | +| 2 | Data collection | System inventory, Network diagrams | +| 3 | Vulnerability assessment | Assessment results | +| 4 | Result analysis | Vulnerability list | +| 5 | Report writing | Vulnerability analysis and assessment report | +| 6 | Protection measure development | Remediation plan | +| 7 | Implementation review | Implementation review results | + +--- + +## 2-4. Assessment Item Classification (Administrative/Physical/Technical) + +### Overview of Three Categories + +Vulnerability analysis and assessment items are divided into three main categories: + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Vulnerability Analysis and Assessment Categories │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Technical Vulnerabilities │ │ +│ │ (~424 items) │ │ +│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │ +│ │ │Unix │ │ Win │ │ Web │ │DBMS │ │ Net │ │Other│ │ │ +│ │ │(68) │ │(73) │ │(47) │ │(32) │ │(40) │ │(164)│ │ │ +│ │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ │ +│ ┌───────────────┼───────────────┐ │ +│ ▼ ▼ ▼ │ +│ ┌─────────────────┐ ┌─────────────┐ ┌─────────────────┐ │ +│ │ Administrative │ │ Information │ │ Physical │ │ +│ │ Vulnerabilities │ │ Security │ │ Vulnerabilities │ │ +│ │ (127 items) │ │ Management │ │ (9 items) │ │ +│ │ │ │ System │ │ │ │ +│ │Policy/Org/Asset │ │ ┌───────┐ │ │ Protected area │ │ +│ │HR/Access/Ops │ │ │Unified│ │ │ Access/CCTV │ │ +│ │Incident/BCP │ │ │Security│ │ │ Environment │ │ +│ │ │ │ └───────┘ │ │ │ │ +│ └─────────────────┘ └─────────────┘ └─────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Category | Item Code | Items | Assessment Method | +|----------|-----------|:-----:|-------------------| +| **Technical** | U, W, WS, S, N, C, PC, D, M, V, CL | ~424 | System inspection, Scripts | +| **Administrative** | A | 127 | Document review, Interviews | +| **Physical** | B | 9 | On-site inspection | + +### Technical Vulnerability Classification + +Technical vulnerabilities are subdivided by system type: + +| Code | Target System | Items | Key Inspection Areas | +|:----:|---------------|:-----:|---------------------| +| U | Unix/Linux servers | 68 | Accounts, File permissions, Services, Patches | +| W | Windows servers | 73 | Accounts, Services, Patches, Security settings | +| WS | Web services | 47 | Apache, Nginx configuration | +| S | Security equipment | 19 | Firewall, IDS/IPS | +| N | Network equipment | 40 | Routers, Switches | +| C | Control systems | 45 | SCADA, PLC | +| PC | PC/Terminals | 18 | Endpoint security | +| D | DBMS | 32 | Oracle, MySQL, MSSQL | +| M | Mobile communications | 2 | Mobile infrastructure | +| V | Virtualization equipment | 36 | VMware, Hyper-V | +| CL | Cloud | 14 | AWS, Azure, GCP | + +### Administrative Vulnerability Classification + +Administrative vulnerabilities consist of 14 domains: + +| Domain | Item Code | Key Inspection Content | +|--------|-----------|------------------------| +| Information security policy | A-1 ~ A-7 | Policy establishment, approval, distribution | +| Information security organization | A-8 ~ A-9 | Dedicated organization, Committee | +| Asset classification | A-10 ~ A-14 | Asset identification, Classification | +| Risk management | A-15 ~ A-17 | Risk assessment, Protection measures | +| Audit | A-18 ~ A-20 | Regular audit, Follow-up | +| HR security | A-21 ~ A-26 | Hiring, Termination, Discipline | +| Third-party security | A-27 ~ A-33 | Outsourcing, Service management | +| Education and training | A-34 ~ A-38 | Security training, Awareness | +| Authentication and authorization | A-39 ~ A-42 | Accounts, Password policy | +| Access control | A-43 ~ A-55 | Network, System access | +| Operations management | A-56 ~ A-93 | Change, Backup, Log management | +| Security management | A-94 ~ A-113 | Encryption, Malware response | +| Incident response | A-114 ~ A-121 | Security incident response system | +| Business continuity | A-122 ~ A-127 | BCP, DR | + +### Physical Vulnerability Classification + +Physical vulnerabilities consist of 1 domain with 9 items: + +| Domain | Item Code | Key Inspection Content | +|--------|-----------|------------------------| +| Physical security | B-1 ~ B-9 | Protected areas, Access control, CCTV | + +--- + +## 2-5. Judgment Criteria (Good/Partial/Vulnerable) + +### Three-Level Judgment System + +Each inspection item is judged as one of the following three levels: + +| Judgment | Meaning | Action Required | +|:--------:|---------|:---------------:| +| **Good** | Clearly meets inspection criteria | Not required | +| **Partial Compliance** | Partially meets, improvement elements exist | Required | +| **Vulnerable** | Does not meet inspection criteria | Immediately required | + +### Considerations for Judgment + +> **TIP** +> Judgment criteria are general recommendations. Actual judgments should comprehensively consider each infrastructure's policies, operational conditions, and risk acceptance levels. + +1. **Existence of compensating controls**: Items judged vulnerable may be assessed as Good if there are valid security measures and justification +2. **Business environment specificity**: Consider industry-specific unique requirements +3. **Risk acceptance decisions**: Document justification when deciding to accept risks + +### Severity Classification + +Technical vulnerability items are classified as High/Medium/Low based on severity: + +| Severity | Meaning | Action Priority | +|:--------:|---------|:---------------:| +| **High** | Severe impact if compromised | Immediate action | +| **Medium** | Moderate impact if compromised | Short-term action | +| **Low** | Minor impact if compromised | Medium to long-term action | + +### Judgment Examples + +#### Example 1: U-01 Restrict Remote Access to root Account + +| Judgment | Situation | +|:--------:|-----------| +| Good | Direct remote access to root account is blocked | +| Vulnerable | SSH remote access using root account is possible | + +#### Example 2: A-1 Information Security Policy Establishment + +| Judgment | Situation | +|:--------:|-----------| +| Good | Information security policy is established and approved by management | +| Partial Compliance | Policy exists but no management approval record | +| Vulnerable | Information security policy is not established | + +--- + +## Summary + +- Under **Article 9** of the "Act on the Protection of Information and Communications Infrastructure," CII managing organizations must conduct vulnerability analysis and assessment **at least annually**. +- Assessment can be performed through **self-assessment**, **KISA delegation**, or **specialized company delegation**. +- Assessment items are categorized into **Technical** (~424), **Administrative** (127), and **Physical** (9) domains. +- Judgments are made on a **Good/Partial/Vulnerable** three-level scale, comprehensively considering each organization's circumstances. + +--- + +*Next Chapter: Chapter 3. Unix/Linux Server Assessment* + + +--- + +# Chapter 3. Unix/Linux Server Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +Unix/Linux servers are core infrastructure for Critical Information Infrastructure. This chapter covers 68 assessment items (U-01 ~ U-68) divided into 5 domains. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Unix/Linux Server Vulnerability Assessment Domains │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Account │ │ File/Dir │ │ Service │ │ +│ │ Management │ │ Management │ │ Management │ │ +│ │ U-01~U-13 │ │ U-14~U-33 │ │ U-34~U-63 │ │ +│ │ (13) │ │ (20) │ │ (30) │ │ +│ │ │ │ │ │ │ │ +│ │ • root │ │ • Permissions│ │ • Unnecessary│ │ +│ │ access │ │ • SUID/SGID │ │ services │ │ +│ │ • Password │ │ • Ownership │ │ • SNMP │ │ +│ │ • Lockout │ │ │ │ security │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ │ +│ └────────────────┬┴─────────────────┘ │ +│ │ │ +│ ┌────────────────┴────────────────┐ │ +│ ▼ ▼ │ +│ ┌─────────────┐ ┌─────────────┐ │ +│ │ Patch │ │ Log │ │ +│ │ Management │ │ Management │ │ +│ │ U-64 │ │ U-65~U-68 │ │ +│ │ (1) │ │ (4) │ │ +│ │ │ │ │ │ +│ │ • Security │ │ • Log config│ │ +│ │ patches │ │ • Retention │ │ +│ └─────────────┘ └─────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Account Management | U-01 ~ U-13 | 13 | +| File and Directory Management | U-14 ~ U-33 | 20 | +| Service Management | U-34 ~ U-63 | 30 | +| Patch Management | U-64 | 1 | +| Log Management | U-65 ~ U-68 | 4 | + +--- + +## 3-1. Account Management (U-01 ~ U-13) + +Account management is the first line of defense for server security. Improper account management is a major cause of unauthorized access. + +### U-01. Restrict Remote Access to root Account + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent unauthorized access by restricting direct remote access to root account | +| **Criteria** | Good: Direct root access blocked / Vulnerable: Direct root access allowed | + +#### Assessment Method + +```bash +# Check SSH configuration +cat /etc/ssh/sshd_config | grep -i "PermitRootLogin" + +# Check Telnet usage (not recommended) +cat /etc/securetty +``` + +#### Remediation + +```bash +# Edit /etc/ssh/sshd_config +PermitRootLogin no + +# Restart SSH service +systemctl restart sshd +``` + +> **TIP** +> When root access is needed, connect with a regular account first and use `su -` or `sudo`. + +--- + +### U-02. Configure Password Policy + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Enforce password complexity and periodic changes | +| **Criteria** | Good: Policy configured / Vulnerable: Policy not configured | + +#### Assessment Method + +```bash +# Check password policy +cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" + +# Check PAM configuration (RHEL/CentOS) +cat /etc/pam.d/system-auth | grep pam_pwquality +``` + +#### Recommended Settings + +| Item | Recommended | Description | +|------|:-----------:|-------------| +| PASS_MAX_DAYS | 90 | Maximum password age | +| PASS_MIN_DAYS | 1 | Minimum password age | +| PASS_MIN_LEN | 8 | Minimum length | +| PASS_WARN_AGE | 7 | Warning days before expiry | + +#### Remediation + +```bash +# Edit /etc/login.defs +PASS_MAX_DAYS 90 +PASS_MIN_DAYS 1 +PASS_MIN_LEN 8 +PASS_WARN_AGE 7 +``` + +--- + +### U-03. Configure Account Lockout Threshold + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent brute force attacks | +| **Criteria** | Good: Set to 5 or less / Vulnerable: Not configured or exceeded | + +#### Assessment Method + +```bash +# Check PAM configuration +cat /etc/pam.d/system-auth | grep pam_tally2 +# or +cat /etc/pam.d/system-auth | grep pam_faillock +``` + +#### Remediation + +```bash +# /etc/pam.d/system-auth (RHEL 7 and later) +auth required pam_faillock.so preauth silent deny=5 unlock_time=600 +auth required pam_faillock.so authfail deny=5 unlock_time=600 +``` + +> **WARNING** +> Be careful with `even_deny_root` option to prevent locking out the root account. + +--- + +### U-04. Password File Protection + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Protect password hashes using Shadow passwords | +| **Criteria** | Good: Shadow used / Vulnerable: Passwords stored in passwd | + +#### Assessment Method + +```bash +# Check second field in /etc/passwd +cat /etc/passwd | awk -F: '{print $1":"$2}' +# 'x' indicates shadow is in use +``` + +--- + +### U-05. Prohibit UID '0' for Non-root Accounts + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Detect unauthorized accounts with root privileges | +| **Criteria** | Good: Only root has UID 0 / Vulnerable: Other accounts have UID 0 | + +#### Assessment Method + +```bash +# Check accounts with UID 0 +awk -F: '$3==0 {print $1}' /etc/passwd +``` + +#### Remediation + +Delete or change UID for any non-root accounts with UID 0. + +--- + +### U-06. Restrict su Command Access + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Restrict su command usage to specific groups | +| **Criteria** | Good: Only wheel group can use su / Vulnerable: No restrictions | + +#### Assessment Method + +```bash +# Check PAM configuration +cat /etc/pam.d/su | grep pam_wheel +``` + +#### Remediation + +```bash +# Edit /etc/pam.d/su (uncomment) +auth required pam_wheel.so use_uid + +# Add user to wheel group +usermod -aG wheel [username] +``` + +--- + +### U-07 ~ U-13. Other Account Management Items + +| Code | Item | Severity | Key Check | +|------|------|:--------:|-----------| +| U-07 | Remove unnecessary accounts | Low | Unused accounts in `/etc/passwd` | +| U-08 | Minimize admin group members | Medium | wheel/root group members | +| U-09 | Prohibit GID without accounts | Low | `/etc/group` integrity | +| U-10 | Prohibit duplicate UIDs | Medium | Check for duplicate UIDs | +| U-11 | User shell verification | Low | Unnecessary accounts `/sbin/nologin` | +| U-12 | Session timeout configuration | Low | TMOUT environment variable | +| U-13 | Secure password encryption algorithm | Medium | SHA-512 recommended | + +--- + +## 3-2. File and Directory Management (U-14 ~ U-33) + +File permission management is key to protecting system integrity. + +### U-14. root Home and PATH Directory Permissions + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent '.' in PATH environment variable | +| **Criteria** | Good: PATH without '.' / Vulnerable: '.' included | + +#### Assessment Method + +```bash +# Check PATH environment variable +echo $PATH | grep -E "^\.|:\.|:$" + +# Check root profile +cat /root/.bash_profile | grep PATH +``` + +> **WARNING** +> Including current directory (`.`) in PATH risks executing malicious programs. + +--- + +### U-16 ~ U-22. Key System File Permissions + +| Code | Target File | Recommended | Owner | +|------|------------|:-----------:|:-----:| +| U-16 | /etc/passwd | 644 | root | +| U-18 | /etc/shadow | 400 | root | +| U-19 | /etc/hosts | 600 | root | +| U-20 | /etc/(x)inetd.conf | 600 | root | +| U-21 | /etc/(r)syslog.conf | 640 | root | +| U-22 | /etc/services | 644 | root | + +#### Batch Assessment Script + +```bash +#!/bin/bash +# Key file permission check + +FILES=( + "/etc/passwd:644:root" + "/etc/shadow:400:root" + "/etc/hosts:600:root" + "/etc/services:644:root" +) + +for item in "${FILES[@]}"; do + IFS=':' read -r file perm owner <<< "$item" + if [ -f "$file" ]; then + actual_perm=$(stat -c "%a" "$file") + actual_owner=$(stat -c "%U" "$file") + if [ "$actual_perm" -le "$perm" ] && [ "$actual_owner" == "$owner" ]; then + echo "[Good] $file (Permission: $actual_perm, Owner: $actual_owner)" + else + echo "[Vulnerable] $file (Permission: $actual_perm, Owner: $actual_owner)" + fi + fi +done +``` + +--- + +### U-23. SUID, SGID, Sticky Bit File Assessment + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent privilege escalation through unnecessary SUID/SGID files | + +#### Assessment Method + +```bash +# Find SUID files +find / -perm -4000 -type f 2>/dev/null + +# Find SGID files +find / -perm -2000 -type f 2>/dev/null + +# Find SUID + SGID files +find / -perm -6000 -type f 2>/dev/null +``` + +#### Key SUID Files to Check + +| File | Required | Action | +|------|:--------:|--------| +| /usr/bin/passwd | Yes | Maintain | +| /usr/bin/su | Yes | Maintain | +| /usr/bin/chsh | Review | Remove if unnecessary | +| /usr/bin/newgrp | Review | Remove if unnecessary | + +--- + +### U-25. World Writable File Assessment + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Detect files writable by all users | + +#### Assessment Method + +```bash +# Find world writable files +find / -perm -2 -type f 2>/dev/null + +# Find world writable directories (without sticky bit) +find / -perm -2 -type d ! -perm -1000 2>/dev/null +``` + +--- + +## 3-3. Service Management (U-34 ~ U-63) + +Unnecessary services increase the attack surface. Run only essential services. + +### U-34. Disable Finger Service + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent user information disclosure | +| **Criteria** | Good: Disabled / Vulnerable: Enabled | + +#### Assessment Method + +```bash +# Check Finger service +systemctl status finger 2>/dev/null +# or +chkconfig --list finger 2>/dev/null +``` + +--- + +### U-36. Disable r-series Services + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Block remote access without authentication | +| **Target Services** | rsh, rlogin, rexec | + +#### Assessment Method + +```bash +# Check r-series services +systemctl status rsh.socket rlogin.socket rexec.socket 2>/dev/null + +# Check inetd/xinetd configuration +cat /etc/xinetd.d/rsh 2>/dev/null | grep disable +``` + +> **WARNING** +> r-series services use unencrypted communication. Replace with SSH. + +--- + +### U-52. Disable Telnet Service + +| Item | Content | +|------|---------| +| **Severity** | Medium | +| **Purpose** | Block plaintext communication services | +| **Criteria** | Good: Disabled or SSH used / Vulnerable: Telnet enabled | + +#### Assessment Method + +```bash +# Check Telnet service +systemctl status telnet.socket 2>/dev/null + +# Check port +netstat -tlnp | grep :23 +``` + +--- + +### U-58 ~ U-61. SNMP Security + +| Code | Item | Severity | +|------|------|:--------:| +| U-58 | Check unnecessary SNMP service | Medium | +| U-59 | Use secure SNMP version | High | +| U-60 | SNMP Community String complexity | Medium | +| U-61 | SNMP Access Control configuration | High | + +#### Assessment Method + +```bash +# Check SNMP service +systemctl status snmpd + +# Check Community String +cat /etc/snmp/snmpd.conf | grep -i community +``` + +> **TIP** +> Use SNMP v3 and always change default Community Strings (public, private). + +--- + +## 3-4. Patch Management (U-64) + +### U-64. Apply Regular Security Patches and Vendor Recommendations + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Apply patches for known vulnerabilities | +| **Criteria** | Good: Latest patches applied / Vulnerable: Not applied | + +#### Assessment Method + +```bash +# RHEL/CentOS +yum check-update + +# Ubuntu/Debian +apt list --upgradable + +# Check kernel version +uname -r +``` + +#### Remediation + +```bash +# RHEL/CentOS +yum update -y + +# Ubuntu/Debian +apt update && apt upgrade -y +``` + +> **WARNING** +> In production environments, verify patches in test environments before applying. + +--- + +## 3-5. Log Management (U-65 ~ U-68) + +### U-65. Log Policy Configuration + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Appropriate log recording and retention | + +#### Assessment Method + +```bash +# Check syslog configuration +cat /etc/rsyslog.conf + +# Check key log file existence +ls -la /var/log/messages /var/log/secure /var/log/wtmp +``` + +### U-66. Log Management per Policy + +| Log File | Content | Recommended Retention | +|----------|---------|:--------------------:| +| /var/log/messages | System messages | 6 months | +| /var/log/secure | Authentication logs | 6 months | +| /var/log/wtmp | Login records | 6 months | +| /var/log/btmp | Failed logins | 6 months | + +--- + +## 3-6. Automation Scripts + +### Integrated Assessment Script + +Below is a Bash script that automatically checks key items. + +```bash +#!/bin/bash +#=============================================== +# KESE KIT - Unix/Linux Server Vulnerability Auto-Check +# Version: 1.0 +#=============================================== + +REPORT_FILE="unix_check_$(date +%Y%m%d_%H%M%S).txt" + +echo "=============================================" | tee $REPORT_FILE +echo "KESE KIT Unix/Linux Vulnerability Check Results" | tee -a $REPORT_FILE +echo "Check Date: $(date)" | tee -a $REPORT_FILE +echo "Hostname: $(hostname)" | tee -a $REPORT_FILE +echo "=============================================" | tee -a $REPORT_FILE + +# U-01: root remote access restriction +echo -e "\n[U-01] root Remote Access Restriction" | tee -a $REPORT_FILE +SSH_ROOT=$(grep -i "^PermitRootLogin" /etc/ssh/sshd_config 2>/dev/null | awk '{print $2}') +if [ "$SSH_ROOT" == "no" ]; then + echo " [Good] PermitRootLogin = no" | tee -a $REPORT_FILE +else + echo " [Vulnerable] PermitRootLogin = $SSH_ROOT" | tee -a $REPORT_FILE +fi + +# U-04: Password file protection +echo -e "\n[U-04] Password File Protection (Shadow Usage)" | tee -a $REPORT_FILE +SHADOW_CHECK=$(awk -F: '$2!="x" && $2!="*" && $2!="!!" {print $1}' /etc/passwd) +if [ -z "$SHADOW_CHECK" ]; then + echo " [Good] Shadow password in use" | tee -a $REPORT_FILE +else + echo " [Vulnerable] Accounts not using Shadow: $SHADOW_CHECK" | tee -a $REPORT_FILE +fi + +# U-05: Non-root UID 0 accounts +echo -e "\n[U-05] Non-root UID 0 Accounts" | tee -a $REPORT_FILE +UID_ZERO=$(awk -F: '$3==0 && $1!="root" {print $1}' /etc/passwd) +if [ -z "$UID_ZERO" ]; then + echo " [Good] Only root has UID 0" | tee -a $REPORT_FILE +else + echo " [Vulnerable] UID 0 accounts: $UID_ZERO" | tee -a $REPORT_FILE +fi + +# U-16: /etc/passwd permission +echo -e "\n[U-16] /etc/passwd Permission" | tee -a $REPORT_FILE +PASSWD_PERM=$(stat -c "%a" /etc/passwd) +if [ "$PASSWD_PERM" -le "644" ]; then + echo " [Good] Permission: $PASSWD_PERM" | tee -a $REPORT_FILE +else + echo " [Vulnerable] Permission: $PASSWD_PERM (644 or less recommended)" | tee -a $REPORT_FILE +fi + +# U-18: /etc/shadow permission +echo -e "\n[U-18] /etc/shadow Permission" | tee -a $REPORT_FILE +SHADOW_PERM=$(stat -c "%a" /etc/shadow) +if [ "$SHADOW_PERM" -le "400" ]; then + echo " [Good] Permission: $SHADOW_PERM" | tee -a $REPORT_FILE +else + echo " [Vulnerable] Permission: $SHADOW_PERM (400 or less recommended)" | tee -a $REPORT_FILE +fi + +# U-52: Telnet service +echo -e "\n[U-52] Telnet Service" | tee -a $REPORT_FILE +TELNET_CHECK=$(systemctl is-active telnet.socket 2>/dev/null) +if [ "$TELNET_CHECK" != "active" ]; then + echo " [Good] Telnet disabled" | tee -a $REPORT_FILE +else + echo " [Vulnerable] Telnet enabled" | tee -a $REPORT_FILE +fi + +echo -e "\n=============================================" | tee -a $REPORT_FILE +echo "Check complete. Results file: $REPORT_FILE" | tee -a $REPORT_FILE +``` + +### Script Usage + +```bash +# Grant execution permission +chmod +x unix_check.sh + +# Execute (root privileges required) +sudo ./unix_check.sh + +# View results +cat unix_check_*.txt +``` + +> **TIP** +> Register this script in cron for periodic checks. +> ``` +> # Run every Monday at 2 AM +> 0 2 * * 1 /path/to/unix_check.sh +> ``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Account Management | root remote access, password policy, account lockout | Highest | +| File Permissions | Key config file permissions, SUID/SGID | High | +| Service Management | Disable unnecessary services, SNMP security | High | +| Patch Management | Apply latest security patches | Highest | +| Log Management | Log configuration and retention | Medium | + +--- + +*Next Chapter: Chapter 4. Windows Server Assessment* + + +--- + +# Chapter 4. Windows Server Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +Windows servers are used in enterprise environments for various roles including Active Directory, file servers, and web servers. This chapter covers 73 assessment items (W-01 ~ W-73) divided into 5 domains. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Windows Server Vulnerability Assessment Domains (73) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌────────────────────────────────────────────────────────────┐ │ +│ │ Security Management (W-48~W-73, 26) │ │ +│ │ Firewall | Antivirus | Screen Saver | Registry | Perms │ │ +│ └────────────────────────────────────────────────────────────┘ │ +│ ▲ │ +│ ┌─────────────────────┼─────────────────────┐ │ +│ │ │ │ │ +│ ┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐ │ +│ │ Account │ │ Service │ │ Log │ │ +│ │ Management│ │ Management│ │ Management│ │ +│ │ W-01~W-14 │ │ W-15~W-39 │ │ W-42~W-47 │ │ +│ │ (14) │ │ (25) │ │ (6) │ │ +│ │ │ │ │ │ │ │ +│ │• Admin │ │• Unnecessary│ │• Audit │ │ +│ │ rename │ │ services │ │ policy │ │ +│ │• Guest │ │• IIS check│ │• Log size │ │ +│ │ disable │ │• Shared │ │• Event │ │ +│ │• Lockout │ │ folders │ │ logs │ │ +│ └───────────┘ └───────────┘ └───────────┘ │ +│ │ │ +│ ┌─────┴─────┐ │ +│ │ Patch │ │ +│ │ Management│ │ +│ │ W-40~W-41 │ │ +│ │ (2) │ │ +│ │ │ │ +│ │• Service │ │ +│ │ Pack │ │ +│ │• Security │ │ +│ │ patches │ │ +│ └───────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Account Management | W-01 ~ W-14 | 14 | +| Service Management | W-15 ~ W-39 | 25 | +| Patch Management | W-40 ~ W-41 | 2 | +| Log Management | W-42 ~ W-47 | 6 | +| Security Management | W-48 ~ W-73 | 26 | + +--- + +## 4-1. Account Management (W-01 ~ W-14) + +### W-01. Rename Administrator Account + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent attacks targeting default admin account name | +| **Criteria** | Good: Name changed / Vulnerable: Default name used | + +#### Assessment Method (PowerShell) + +```powershell +# Check Administrator account +Get-LocalUser | Where-Object {$_.SID -like "*-500"} + +# Or Command Prompt +net user administrator +``` + +#### Remediation + +```powershell +# Rename account with PowerShell +Rename-LocalUser -Name "Administrator" -NewName "NewAdminName" + +# Or via Local Security Policy +# secpol.msc > Local Policies > Security Options > Accounts: Rename administrator account +``` + +> **TIP** +> Choose an unpredictable name, but document it for management convenience. + +--- + +### W-02. Disable Guest Account + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Block anonymous access | +| **Criteria** | Good: Disabled / Vulnerable: Enabled | + +#### Assessment Method + +```powershell +# Check Guest account status +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled +``` + +#### Remediation + +```powershell +# Disable Guest account +Disable-LocalUser -Name "Guest" +``` + +--- + +### W-03. Remove Unnecessary Accounts + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent unauthorized access through unused accounts | + +#### Assessment Method + +```powershell +# List all local accounts +Get-LocalUser | Select-Object Name, Enabled, LastLogon + +# Find accounts not logged in for 90+ days +$threshold = (Get-Date).AddDays(-90) +Get-LocalUser | Where-Object {$_.LastLogon -lt $threshold} +``` + +--- + +### W-04. Configure Password Policy + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Enforce strong password usage | + +#### Assessment Method + +```powershell +# Check password policy +net accounts + +# Or PowerShell +Get-ADDefaultDomainPasswordPolicy # Domain environment +``` + +#### Recommended Settings + +| Policy | Recommended | +|--------|:-----------:| +| Minimum password length | 8+ characters | +| Password complexity | Enabled | +| Maximum password age | 90 days | +| Minimum password age | 1 day | +| Password history | 12 | + +#### Remediation + +```powershell +# Configure via Local Security Policy (secpol.msc) or Group Policy (gpedit.msc) +# Computer Configuration > Windows Settings > Security Settings > Account Policies > Password Policy +``` + +--- + +### W-05. Configure Account Lockout Policy + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent brute force attacks | + +#### Assessment Method + +```powershell +# Check account lockout policy +net accounts +``` + +#### Recommended Settings + +| Policy | Recommended | +|--------|:-----------:| +| Account lockout threshold | 5 attempts | +| Account lockout duration | 30 minutes | +| Reset account lockout counter after | 30 minutes | + +--- + +### W-06 ~ W-14. Other Account Management Items + +| Code | Item | Severity | Key Check | +|------|------|:--------:|-----------| +| W-06 | Minimize admin group members | High | Administrators group members | +| W-07 | Local account management | Medium | Unnecessary local accounts | +| W-08 | Disable reversible encryption for passwords | Medium | Policy setting | +| W-09 | Restrict remote access for local accounts | Medium | UAC remote restriction | +| W-10 | Session timeout configuration | Low | Screen lock | +| W-11 | Don't display last logged on user | Low | Logon screen | +| W-12 | Display legal notice at logon | Low | Legal warning | +| W-13 | Don't allow anonymous enumeration of SAM accounts | High | Block anonymous enumeration | +| W-14 | Disable Remote Registry service | High | Remote Registry | + +--- + +## 4-2. Service Management (W-15 ~ W-39) + +### W-15. Disable Unnecessary Services + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Minimize attack surface | + +#### Services Recommended for Disabling + +| Service | Description | Disable | +|---------|-------------|:-------:| +| Telnet | Remote access (plaintext) | Yes | +| TFTP | File transfer (no auth) | Yes | +| FTP Publishing | FTP server | Review | +| Remote Registry | Remote registry access | Yes | +| Simple TCP/IP Services | Echo, Daytime, etc. | Yes | + +#### Assessment Method + +```powershell +# List running services +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName + +# Check specific service status +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` + +#### Remediation + +```powershell +# Stop and disable service +Stop-Service -Name "RemoteRegistry" +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-20. IIS Service Assessment + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Disable unnecessary web server | + +#### Assessment Method + +```powershell +# Check if IIS is installed +Get-WindowsFeature -Name Web-Server + +# IIS service status +Get-Service -Name "W3SVC" +``` + +--- + +### W-25. Shared Folder Assessment + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Remove unnecessary shares, verify permissions | + +#### Assessment Method + +```powershell +# List shared folders +Get-SmbShare + +# Check administrative shares +Get-SmbShare | Where-Object {$_.Name -match '\$$'} + +# Check share permissions +Get-SmbShareAccess -Name "ShareName" +``` + +> **WARNING** +> Administrative shares (C$, ADMIN$, etc.) are created by default for management. Remove if unnecessary, but review impact first. + +--- + +## 4-3. Patch Management (W-40 ~ W-41) + +### W-40. Apply Latest Service Pack + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Apply patches for known vulnerabilities | + +#### Assessment Method + +```powershell +# Check OS version and build +Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber + +# Check installed hotfixes +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +``` + +--- + +### W-41. Apply Latest Security Patches + +#### Assessment Method + +```powershell +# Check Windows Update history +Get-WindowsUpdateLog # Windows 10/Server 2016 and later + +# Or check for updates +$UpdateSession = New-Object -ComObject Microsoft.Update.Session +$UpdateSearcher = $UpdateSession.CreateUpdateSearcher() +$Updates = $UpdateSearcher.Search("IsInstalled=0") +$Updates.Updates | Select-Object Title +``` + +--- + +## 4-4. Log Management (W-42 ~ W-47) + +### W-42. Configure Log Policy + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Record appropriate audit logs | + +#### Recommended Audit Policies + +| Policy | Success | Failure | +|--------|:-------:|:-------:| +| Audit account logon events | Yes | Yes | +| Audit account management | Yes | Yes | +| Audit logon events | Yes | Yes | +| Audit object access | Yes | Yes | +| Audit policy change | Yes | Yes | +| Audit system events | Yes | Yes | + +#### Assessment Method + +```powershell +# Check audit policy +auditpol /get /category:* +``` + +--- + +### W-43. Configure Log File Size + +#### Recommended Settings + +| Log | Max Size | Retention Policy | +|-----|:--------:|------------------| +| Application | 64MB+ | Overwrite as needed | +| Security | 128MB+ | Archive then overwrite | +| System | 64MB+ | Overwrite as needed | + +#### Assessment Method + +```powershell +# Check event log settings +Get-EventLog -List | Select-Object Log, MaximumKilobytes +``` + +--- + +## 4-5. Security Management (W-48 ~ W-73) + +### W-48. Screen Saver Configuration + +| Item | Content | +|------|---------| +| **Severity** | Medium | +| **Purpose** | Protect unattended terminals | + +#### Recommended Settings + +- Wait time: 10 minutes or less +- Password protect on resume: Enabled + +--- + +### W-56. Windows Firewall Configuration + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Network access control | + +#### Assessment Method + +```powershell +# Check firewall status +Get-NetFirewallProfile | Select-Object Name, Enabled + +# Check inbound rules +Get-NetFirewallRule -Direction Inbound -Enabled True | Select-Object Name, Action +``` + +--- + +### W-67. Use Updated Antivirus Software + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Malware defense | + +#### Assessment Method + +```powershell +# Check Windows Defender status +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntispywareEnabled, RealTimeProtectionEnabled + +# Check latest definition update +Get-MpComputerStatus | Select-Object AntivirusSignatureLastUpdated +``` + +--- + +## 4-6. PowerShell Assessment Script + +### Integrated Assessment Script + +```powershell +#=============================================== +# KESE KIT - Windows Server Vulnerability Auto-Check +# Version: 1.0 +#=============================================== + +$ReportFile = "windows_check_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt" + +function Write-Report { + param([string]$Message) + Write-Host $Message + Add-Content -Path $ReportFile -Value $Message +} + +Write-Report "=============================================" +Write-Report "KESE KIT Windows Vulnerability Check Results" +Write-Report "Check Date: $(Get-Date)" +Write-Report "Hostname: $env:COMPUTERNAME" +Write-Report "=============================================" + +# W-01: Administrator account name change +Write-Report "`n[W-01] Administrator Account Name Change" +$AdminUser = Get-LocalUser | Where-Object {$_.SID -like "*-500"} +if ($AdminUser.Name -ne "Administrator") { + Write-Report " [Good] Account renamed: $($AdminUser.Name)" +} else { + Write-Report " [Vulnerable] Using default account name" +} + +# W-02: Guest account disabled +Write-Report "`n[W-02] Guest Account Disabled" +$GuestUser = Get-LocalUser -Name "Guest" +if ($GuestUser.Enabled -eq $false) { + Write-Report " [Good] Guest account disabled" +} else { + Write-Report " [Vulnerable] Guest account enabled" +} + +# W-05: Account lockout policy +Write-Report "`n[W-05] Account Lockout Policy" +$NetAccounts = net accounts +$LockoutThreshold = ($NetAccounts | Select-String "Lockout threshold").ToString().Split(":")[1].Trim() +if ($LockoutThreshold -ne "Never" -and [int]$LockoutThreshold -le 5) { + Write-Report " [Good] Lockout threshold: $LockoutThreshold" +} else { + Write-Report " [Vulnerable] Lockout threshold: $LockoutThreshold (5 or less recommended)" +} + +# W-14: Remote Registry service +Write-Report "`n[W-14] Remote Registry Service" +$RemoteReg = Get-Service -Name "RemoteRegistry" -ErrorAction SilentlyContinue +if ($RemoteReg.Status -ne "Running") { + Write-Report " [Good] Remote Registry disabled" +} else { + Write-Report " [Vulnerable] Remote Registry running" +} + +# W-56: Windows Firewall +Write-Report "`n[W-56] Windows Firewall" +$Firewall = Get-NetFirewallProfile +$AllEnabled = ($Firewall | Where-Object {$_.Enabled -eq $true}).Count -eq 3 +if ($AllEnabled) { + Write-Report " [Good] All firewall profiles enabled" +} else { + Write-Report " [Vulnerable] Some firewall profiles disabled" +} + +# W-67: Antivirus software +Write-Report "`n[W-67] Antivirus Software" +try { + $Defender = Get-MpComputerStatus + if ($Defender.AntivirusEnabled) { + Write-Report " [Good] Windows Defender enabled" + } else { + Write-Report " [Vulnerable] Windows Defender disabled" + } +} catch { + Write-Report " [Info] Unable to check Windows Defender status" +} + +Write-Report "`n=============================================" +Write-Report "Check complete. Results file: $ReportFile" +``` + +### Script Usage + +```powershell +# Run PowerShell as Administrator +# Set execution policy (if needed) +Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +# Run script +.\windows_check.ps1 + +# View results +Get-Content .\windows_check_*.txt +``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Account Management | Administrator rename, Guest disable, lockout policy | Highest | +| Service Management | Disable unnecessary services, shared folder check | High | +| Patch Management | Apply latest security patches | Highest | +| Log Management | Audit policy configuration, log size | Medium | +| Security Management | Firewall, antivirus, screen saver | High | + +--- + +*Next Chapter: Chapter 5. Web Service Assessment* + + +--- + +# Chapter 5. Web Service Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +Web service assessment covers configuration checks for web server software like Apache and Nginx. This chapter covers 47 assessment items (WS-01 ~ WS-47) divided into 4 domains. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Web Service Vulnerability Assessment Domains (47) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────┐ │ +│ │ Web Server (Apache/Nginx) │ │ +│ └──────────────┬──────────────┘ │ +│ │ │ +│ ┌───────────────────────┼───────────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ Account │ │ Service │ │ Security│ │ +│ │ Mgmt │ │ Mgmt │ │ Settings│ │ +│ │WS-01~05 │ │WS-06~30 │ │WS-31~43 │ │ +│ │ (5) │ │ (25) │ │ (13) │ │ +│ │ │ │ │ │ │ │ +│ │• Dedicated│ │• Dir │ │• SSL/TLS│ │ +│ │ account │ │ listing│ │• Security│ │ +│ │• Shell │ │ remove │ │ headers│ │ +│ │ restrict│ │• Version│ │• Error │ │ +│ │• Perms │ │ hide │ │ pages │ │ +│ └────┬────┘ └────┬────┘ └────┬────┘ │ +│ │ │ │ │ +│ └─────────────────────┼─────────────────────┘ │ +│ ▼ │ +│ ┌─────────────┐ │ +│ │ Patch/Log │ │ +│ │ Mgmt │ │ +│ │ WS-44~47 │ │ +│ │ (4) │ │ +│ │ │ │ +│ │• Latest │ │ +│ │ version │ │ +│ │• Log config│ │ +│ └─────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Account Management | WS-01 ~ WS-05 | 5 | +| Service Management | WS-06 ~ WS-30 | 25 | +| Security Settings | WS-31 ~ WS-43 | 13 | +| Patch and Log Management | WS-44 ~ WS-47 | 4 | + +--- + +## 5-1. Account Management (WS-01 ~ WS-05) + +### WS-01. Use Dedicated Web Service Account + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Verify web service runs with minimal privilege account | +| **Criteria** | Good: Dedicated account (www-data, apache, etc.) / Vulnerable: Running as root | + +#### Assessment Method + +```bash +# Check Apache process account +ps aux | grep httpd | grep -v grep +ps aux | grep apache2 | grep -v grep + +# Check Nginx process account +ps aux | grep nginx | grep -v grep +``` + +#### Remediation (Apache) + +```bash +# /etc/httpd/conf/httpd.conf or /etc/apache2/envvars +User www-data +Group www-data +``` + +#### Remediation (Nginx) + +```bash +# /etc/nginx/nginx.conf +user www-data; +``` + +> **WARNING** +> Running a web server as root puts the entire system at risk if vulnerabilities are exploited. + +--- + +### WS-02. Restrict Web Service Account Shell + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Block interactive login for web service account | + +#### Assessment Method + +```bash +# Check web service account shell +grep -E "www-data|apache|nginx" /etc/passwd +``` + +#### Recommended Setting + +```bash +# Set shell to nologin +www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin +``` + +--- + +### WS-03 ~ WS-05. Other Account Management + +| Code | Item | Severity | +|------|------|:--------:| +| WS-03 | Web service account home directory permissions | Medium | +| WS-04 | Web service configuration file permissions | High | +| WS-05 | Web service log file permissions | Medium | + +--- + +## 5-2. Service Management (WS-06 ~ WS-30) + +### WS-06. Disable Directory Listing + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent directory content disclosure | +| **Criteria** | Good: Disabled / Vulnerable: Enabled | + +#### Assessment Method (Apache) + +```bash +# Check for Indexes option in httpd.conf +grep -r "Options.*Indexes" /etc/httpd/ +grep -r "Options.*Indexes" /etc/apache2/ +``` + +#### Remediation (Apache) + +```apache +# Remove Indexes option + + Options -Indexes +FollowSymLinks + +``` + +#### Remediation (Nginx) + +```nginx +# Set autoindex off +location / { + autoindex off; +} +``` + +--- + +### WS-07. Hide Web Server Version Information + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent targeted attacks through server version disclosure | + +#### Assessment Method + +```bash +# Check HTTP headers +curl -I http://localhost + +# Check Server header in response +# Example: Server: Apache/2.4.41 (Ubuntu) +``` + +#### Remediation (Apache) + +```apache +# /etc/httpd/conf/httpd.conf +ServerTokens Prod +ServerSignature Off +``` + +#### Remediation (Nginx) + +```nginx +# /etc/nginx/nginx.conf +server_tokens off; +``` + +--- + +### WS-10. Restrict Unnecessary HTTP Methods + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Block dangerous methods like PUT, DELETE | + +#### Assessment Method + +```bash +# Check allowed methods with OPTIONS +curl -X OPTIONS -I http://localhost +``` + +#### Remediation (Apache) + +```apache + + + Require all denied + + +``` + +#### Remediation (Nginx) + +```nginx +if ($request_method !~ ^(GET|POST|HEAD)$ ) { + return 405; +} +``` + +--- + +### WS-15. Restrict Symbolic Link Usage + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent filesystem access through symbolic links | + +#### Remediation (Apache) + +```apache + + Options -FollowSymLinks + # Or use SymLinksIfOwnerMatch + Options +SymLinksIfOwnerMatch + +``` + +--- + +### WS-20. Remove Default Pages/Documents + +| Item | Content | +|------|---------| +| **Severity** | Medium | +| **Purpose** | Prevent information disclosure through default installation pages | + +#### Check Targets + +- Apache default page (/var/www/html/index.html) +- Nginx default page +- Sample applications +- Manual directories (/manual/) + +--- + +## 5-3. Security Settings (WS-31 ~ WS-43) + +### WS-31. Customize Error Pages + +| Item | Content | +|------|---------| +| **Severity** | Medium | +| **Purpose** | Prevent system information disclosure through error messages | + +#### Remediation (Apache) + +```apache +# Custom error page configuration +ErrorDocument 400 /error/400.html +ErrorDocument 401 /error/401.html +ErrorDocument 403 /error/403.html +ErrorDocument 404 /error/404.html +ErrorDocument 500 /error/500.html +``` + +#### Remediation (Nginx) + +```nginx +error_page 404 /404.html; +error_page 500 502 503 504 /50x.html; + +location = /404.html { + root /var/www/error; + internal; +} +``` + +--- + +### WS-35. SSL/TLS Configuration + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Ensure secure encrypted communication | + +#### Recommended Settings (Apache) + +```apache +# Allow only modern protocols +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 + +# Secure cipher suites +SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 + +# Server cipher suite preference +SSLHonorCipherOrder on +``` + +#### Recommended Settings (Nginx) + +```nginx +ssl_protocols TLSv1.2 TLSv1.3; +ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; +ssl_prefer_server_ciphers on; +``` + +> **TIP** +> You can test SSL configuration at SSL Labs (https://www.ssllabs.com/ssltest/). + +--- + +### WS-40. Configure HTTP Security Headers + +| Header | Purpose | Recommended Value | +|--------|---------|-------------------| +| X-Content-Type-Options | Prevent MIME sniffing | nosniff | +| X-Frame-Options | Prevent clickjacking | DENY or SAMEORIGIN | +| X-XSS-Protection | XSS filter | 1; mode=block | +| Strict-Transport-Security | Force HTTPS | max-age=31536000 | +| Content-Security-Policy | Restrict content sources | Configure per policy | + +#### Remediation (Apache) + +```apache +Header always set X-Content-Type-Options "nosniff" +Header always set X-Frame-Options "SAMEORIGIN" +Header always set X-XSS-Protection "1; mode=block" +Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" +``` + +#### Remediation (Nginx) + +```nginx +add_header X-Content-Type-Options "nosniff" always; +add_header X-Frame-Options "SAMEORIGIN" always; +add_header X-XSS-Protection "1; mode=block" always; +add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; +``` + +--- + +## 5-4. Patch and Log Management (WS-44 ~ WS-47) + +### WS-44. Use Latest Web Server Version + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Patch known vulnerabilities | + +#### Assessment Method + +```bash +# Check Apache version +httpd -v +apache2 -v + +# Check Nginx version +nginx -v +``` + +--- + +### WS-46. Log Configuration + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Record access and error logs | + +#### Recommended Log Format (Apache) + +```apache +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined +CustomLog /var/log/httpd/access_log combined +ErrorLog /var/log/httpd/error_log +LogLevel warn +``` + +#### Recommended Log Format (Nginx) + +```nginx +log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + +access_log /var/log/nginx/access.log main; +error_log /var/log/nginx/error.log warn; +``` + +--- + +## Web Service Assessment Script + +### Apache Assessment Script + +```bash +#!/bin/bash +#=============================================== +# KESE KIT - Apache Web Server Vulnerability Check +#=============================================== + +echo "===== Apache Web Server Check =====" +echo "Check Date: $(date)" + +# WS-01: Check running account +echo -e "\n[WS-01] Web Service Running Account" +APACHE_USER=$(ps aux | grep -E "httpd|apache2" | grep -v grep | head -1 | awk '{print $1}') +if [ "$APACHE_USER" != "root" ]; then + echo " [Good] Running account: $APACHE_USER" +else + echo " [Vulnerable] Running as root" +fi + +# WS-06: Directory listing +echo -e "\n[WS-06] Directory Listing" +if grep -rq "Options.*Indexes" /etc/httpd/ /etc/apache2/ 2>/dev/null; then + echo " [Vulnerable] Indexes option found" +else + echo " [Good] Directory listing disabled" +fi + +# WS-07: Version information +echo -e "\n[WS-07] Server Version Information" +SERVER_HEADER=$(curl -sI http://localhost 2>/dev/null | grep -i "^Server:") +if echo "$SERVER_HEADER" | grep -qE "[0-9]+\.[0-9]+"; then + echo " [Vulnerable] Version exposed: $SERVER_HEADER" +else + echo " [Good] Version information hidden" +fi + +echo -e "\n===== Check Complete =====" +``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Account Management | Dedicated account, shell restriction | Highest | +| Service Management | Directory listing, version hiding, method restriction | Highest | +| Security Settings | SSL/TLS, security headers | High | +| Patch/Log | Latest version, log configuration | High | + +--- + +*Next Chapter: Chapter 6. Web Application Assessment* + + +--- + +# Chapter 6. Web Application Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +Web application vulnerabilities are assessed based on OWASP Top 10. This chapter is especially important for those developing in **Vibe Coding** environments. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Web Application Security Vulnerability Domains │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ User Input │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌───────────────────┼───────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Input │ │ Auth/ │ │ Access │ │ +│ │ Validation │ │ Session │ │ Control │ │ +│ │ │ │ Management │ │ │ │ +│ │ ┌─────────┐│ │ ┌─────────┐│ │ ┌─────────┐│ │ +│ │ │SQL Inj. ││ │ │ Session ││ │ │Vertical ││ │ +│ │ └─────────┘│ │ └─────────┘│ │ │Privilege││ │ +│ │ ┌─────────┐│ │ ┌─────────┐│ │ │Escalation│ │ +│ │ │ XSS ││ │ │Password ││ │ └─────────┘│ │ +│ │ └─────────┘│ │ │Storage ││ │ ┌─────────┐│ │ +│ │ ┌─────────┐│ │ └─────────┘│ │ │Horizontal│ │ +│ │ │ CSRF ││ │ ┌─────────┐│ │ │Privilege││ │ +│ │ └─────────┘│ │ │ Cookie ││ │ │Escalation│ │ +│ └─────────────┘ │ │Security ││ │ └─────────┘│ │ +│ │ │ └─────────┘│ └─────────────┘ │ +│ │ └─────────────┘ │ │ +│ │ │ │ │ +│ └───────────────────┼─────────────────┘ │ +│ ▼ │ +│ ┌─────────────────┐ │ +│ │ Information │ │ +│ │ Disclosure │ │ +│ │ │ │ +│ │ • Error messages│ │ +│ │ • Source comments│ │ +│ │ • Version info │ │ +│ └─────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Key Vulnerabilities | +|--------|---------------------| +| Input Validation | SQL Injection, XSS, CSRF | +| Auth/Session Management | Session fixation, Cookie security | +| Access Control | Privilege bypass, Path manipulation | +| Information Disclosure | Error messages, Comments, Directories | + +--- + +## 6-1. Input Validation (SQL Injection, XSS, CSRF) + +### SQL Injection + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Risk Level** | OWASP Top 10 A03:2021 | +| **Impact** | Data leakage, modification, deletion, system compromise | + +#### Vulnerable Code Example (Python) + +```python +# Vulnerable: User input directly inserted into query +def get_user(username): + query = f"SELECT * FROM users WHERE username = '{username}'" + cursor.execute(query) + return cursor.fetchone() + +# Attack example: username = "admin' OR '1'='1" +# Resulting query: SELECT * FROM users WHERE username = 'admin' OR '1'='1' +``` + +#### Secure Code (Parameterized Query) + +```python +# Secure: Using parameterized query +def get_user(username): + query = "SELECT * FROM users WHERE username = %s" + cursor.execute(query, (username,)) + return cursor.fetchone() +``` + +#### Secure Methods by Framework + +| Framework | Secure Method | +|-----------|---------------| +| Django | ORM usage, `filter()`, `get()` | +| Flask-SQLAlchemy | ORM usage, `query.filter_by()` | +| Node.js (mysql2) | Prepared Statements | +| Java (JDBC) | PreparedStatement | +| PHP (PDO) | Prepared Statements | + +> **WARNING** +> Even when using ORM, be careful with `raw()` or direct SQL queries. + +--- + +### XSS (Cross-Site Scripting) + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Risk Level** | OWASP Top 10 A03:2021 | +| **Types** | Stored XSS, Reflected XSS, DOM XSS | + +#### Vulnerable Code Example + +```html + +
Welcome, <%= user.name %>!
+ + +``` + +#### Secure Code (HTML Escape) + +```html + +
Welcome, <%= escape(user.name) %>!
+ + + + +``` + +#### XSS Defense Checklist + +| Item | Defense Method | +|------|----------------| +| Escape on output | HTML Entity encoding | +| Content-Type setting | `text/html; charset=utf-8` | +| HttpOnly cookies | HttpOnly flag on session cookies | +| CSP header | Content-Security-Policy configuration | + +--- + +### CSRF (Cross-Site Request Forgery) + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Risk Level** | OWASP Top 10 A01:2021 | +| **Impact** | Unauthorized actions using user privileges | + +#### Vulnerable Scenario + +```html + + + +``` + +#### Defense Method: CSRF Token + +```html + +
+ + + + +
+``` + +#### CSRF Defense by Framework + +| Framework | Method | +|-----------|--------| +| Django | `{% csrf_token %}` | +| Flask | Flask-WTF extension | +| Spring | `_csrf.token` | +| Express | csurf middleware | + +--- + +## 6-2. Authentication and Session Management + +### Secure Session Management + +| Item | Recommended Setting | +|------|---------------------| +| Session ID length | 128 bits or more | +| Session ID generation | Use cryptographic random | +| Session timeout | Within 30 minutes (critical systems) | +| Session regeneration after login | Required | + +#### Session Cookie Security Settings + +```python +# Django settings.py +SESSION_COOKIE_SECURE = True # HTTPS only +SESSION_COOKIE_HTTPONLY = True # Block JavaScript access +SESSION_COOKIE_SAMESITE = 'Lax' # CSRF defense +SESSION_COOKIE_AGE = 1800 # 30 minutes +``` + +--- + +### Password Storage + +| Method | Security | Recommended | +|--------|:--------:|:-----------:| +| Plaintext storage | Very vulnerable | No | +| MD5/SHA-1 | Vulnerable | No | +| SHA-256 (no salt) | Vulnerable | No | +| bcrypt/scrypt/Argon2 | Secure | Yes | + +#### Secure Password Hashing (Python) + +```python +import bcrypt + +# Hash password +password = "user_password".encode('utf-8') +hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12)) + +# Verify password +if bcrypt.checkpw(password, hashed): + print("Password match") +``` + +--- + +## 6-3. Access Control and Authorization Verification + +### Vertical Privilege Escalation + +| Item | Content | +|------|---------| +| **Description** | Regular user accessing admin functions | +| **Defense** | Server-side authorization verification required | + +#### Vulnerable Code + +```python +# Vulnerable: Admin page accessible by URL only +@app.route('/admin/users') +def admin_users(): + return render_template('admin_users.html') +``` + +#### Secure Code + +```python +# Secure: Authorization verification added +@app.route('/admin/users') +@login_required +def admin_users(): + if not current_user.is_admin: + abort(403) # Forbidden + return render_template('admin_users.html') +``` + +--- + +### Horizontal Privilege Escalation + +| Item | Content | +|------|---------| +| **Description** | Accessing another user's data | +| **Defense** | Resource ownership verification | + +#### Vulnerable Code + +```python +# Vulnerable: Only checks user ID +@app.route('/user//profile') +def user_profile(user_id): + user = User.query.get(user_id) + return render_template('profile.html', user=user) +``` + +#### Secure Code + +```python +# Secure: Compare current user with requested user +@app.route('/user//profile') +@login_required +def user_profile(user_id): + if current_user.id != user_id: + abort(403) + user = User.query.get(user_id) + return render_template('profile.html', user=user) +``` + +--- + +## 6-4. Information Disclosure Prevention + +### Error Message Management + +| Environment | Error Display | +|-------------|---------------| +| Development | Detailed errors (for debugging) | +| Production | Generic error messages only | + +#### Secure Error Handling (Django) + +```python +# settings.py +DEBUG = False # Production environment + +# Custom error handlers +handler404 = 'myapp.views.custom_404' +handler500 = 'myapp.views.custom_500' +``` + +--- + +### Remove Comments and Unnecessary Information + +| Remove Target | Risk | +|---------------|------| +| Developer notes in HTML comments | Logic disclosure | +| Commented-out code | Feature disclosure | +| Version information | Vulnerability identification | +| Test account information | Unauthorized access | + +--- + +## 6-5. Security in Vibe Coding Environments + +### AI Code Generation Security Checklist + +Code generated by Vibe Coding (AI-based coding) requires security review. + +| Review Item | Check For | +|-------------|-----------| +| SQL queries | Parameterized query usage | +| User input | Validation/escaping | +| Auth/permissions | Server-side verification | +| Sensitive info | Hardcoding | +| Dependencies | Known vulnerabilities | + +### AI Prompt Security Guide + +``` +# Secure prompt example +"Create a user login function. +Use parameterized queries to prevent SQL Injection, +hash passwords with bcrypt, +and apply CSRF tokens." +``` + +> **TIP** +> Never deploy AI-generated code to production without security review. + +--- + +### Security Automation Tools + +| Tool | Purpose | Type | +|------|---------|------| +| Bandit | Python static analysis | SAST | +| ESLint (security) | JavaScript static analysis | SAST | +| OWASP ZAP | Dynamic analysis | DAST | +| npm audit | Dependency vulnerabilities | SCA | +| pip-audit | Python dependencies | SCA | + +#### Usage Examples + +```bash +# Python code security analysis +pip install bandit +bandit -r ./src + +# JavaScript dependency vulnerability check +npm audit + +# Python dependency vulnerability check +pip install pip-audit +pip-audit +``` + +--- + +## Web Application Security Testing Script + +### Basic Vulnerability Testing + +```python +#!/usr/bin/env python3 +""" +KESE KIT - Web Application Basic Security Test +""" + +import requests +import sys + +def test_sql_injection(url, param): + """SQL Injection basic test""" + payloads = ["'", "' OR '1'='1", "1; DROP TABLE users--"] + + for payload in payloads: + try: + response = requests.get(url, params={param: payload}, timeout=5) + if "error" in response.text.lower() or "sql" in response.text.lower(): + print(f"[Vulnerable] SQL Injection possible: {payload}") + return True + except: + pass + + print("[Good] SQL Injection basic test passed") + return False + +def test_xss(url, param): + """XSS basic test""" + payload = "" + + try: + response = requests.get(url, params={param: payload}, timeout=5) + if payload in response.text: + print(f"[Vulnerable] XSS possible: Script reflected as-is") + return True + except: + pass + + print("[Good] XSS basic test passed") + return False + +def test_security_headers(url): + """Security headers test""" + headers_to_check = [ + "X-Content-Type-Options", + "X-Frame-Options", + "X-XSS-Protection", + "Strict-Transport-Security", + "Content-Security-Policy" + ] + + try: + response = requests.get(url, timeout=5) + missing = [] + + for header in headers_to_check: + if header not in response.headers: + missing.append(header) + + if missing: + print(f"[Vulnerable] Missing security headers: {', '.join(missing)}") + else: + print("[Good] All security headers configured") + + except Exception as e: + print(f"[Error] Test failed: {e}") + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Usage: python web_security_test.py ") + sys.exit(1) + + target_url = sys.argv[1] + print(f"===== Web Security Basic Test: {target_url} =====\n") + + test_security_headers(target_url) +``` + +--- + +## Summary + +| Domain | Key Defense | Priority | +|--------|-------------|:--------:| +| SQL Injection | Parameterized queries, ORM | Highest | +| XSS | Output escaping, CSP | Highest | +| CSRF | CSRF tokens | High | +| Auth/Session | Secure session management, bcrypt | Highest | +| Access Control | Server-side authorization verification | High | +| Information Disclosure | Error message management | Medium | + +--- + +## Vibe Coding Security Summary + +1. **Review AI-generated code**: Always review from security perspective +2. **Input validation**: Never trust any user input +3. **Output encoding**: Context-specific encoding for HTML, SQL, JavaScript +4. **Dependency management**: Regular vulnerability scanning +5. **Automation tool usage**: Integrate SAST, DAST tools in CI/CD + +--- + +*Next Chapter: Chapter 7. Database (DBMS) Assessment* + + +--- + +# Chapter 7. Database (DBMS) Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +DBMS is a critical asset that stores organizational core data. This chapter covers 32 assessment items (D-01 ~ D-32). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ DBMS Vulnerability Assessment Domains (32 items) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────┐ │ +│ │ Supported DBMS Platforms │ │ +│ │ Oracle | MySQL | MSSQL | PostgreSQL | MariaDB │ │ +│ └───────────────────────┬─────────────────────────┘ │ +│ │ │ +│ ┌───────────────────────┼───────────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ Account │ │ Access │ │ Option │ │ +│ │ Management│ │ Management│ │ Management│ │ +│ │ D-01~D-16 │ │ D-17~D-23 │ │ D-24~D-30 │ │ +│ │ (16) │ │ (7) │ │ (7) │ │ +│ │ │ │ │ │ │ │ +│ │• Default │ │• Remote │ │• Security │ │ +│ │ accounts │ │ access │ │ params │ │ +│ │• Password │ │ restrict │ │• Audit │ │ +│ │ policy │ │• Least │ │ settings │ │ +│ │• Unused │ │ privilege│ │ │ │ +│ │ accounts │ │ │ │ │ │ +│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ +│ │ │ │ │ +│ └──────────────────────┼──────────────────────┘ │ +│ ▼ │ +│ ┌───────────┐ │ +│ │ Patch │ │ +│ │ Management│ │ +│ │ D-31~D-32 │ │ +│ │ (2) │ │ +│ │• Security │ │ +│ │ patches │ │ +│ └───────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Account Management | D-01 ~ D-16 | 16 | +| Access Management | D-17 ~ D-23 | 7 | +| Option Management | D-24 ~ D-30 | 7 | +| Patch Management | D-31 ~ D-32 | 2 | + +--- + +## 7-1. Account Management (D-01 ~ D-16) + +### D-01. Change Default Account Password + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Target DB** | Oracle, MySQL, MSSQL, PostgreSQL | +| **Criteria** | Good: Default password changed / Vulnerable: Default used | + +#### Default Account List + +| DBMS | Default Account | Default Password | +|------|-----------------|------------------| +| Oracle | SYS, SYSTEM | change_on_install, manager | +| MySQL | root | (empty string) | +| MSSQL | sa | (set during installation) | +| PostgreSQL | postgres | (set during installation) | + +#### Assessment Method (MySQL) + +```sql +-- Check accounts without password +SELECT user, host FROM mysql.user WHERE authentication_string = ''; +``` + +#### Assessment Method (Oracle) + +```sql +-- Check accounts using default password +SELECT username, account_status FROM dba_users +WHERE username IN ('SYS', 'SYSTEM', 'DBSNMP', 'SCOTT'); +``` + +--- + +### D-02. Remove Unnecessary Accounts + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent unauthorized access through unused accounts | + +#### Assessment Method (MySQL) + +```sql +-- Check all accounts +SELECT user, host, account_locked FROM mysql.user; +``` + +#### Assessment Method (Oracle) + +```sql +-- Check account status +SELECT username, account_status, expiry_date, lock_date +FROM dba_users +ORDER BY username; +``` + +--- + +### D-05. Configure Password Policy + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Recommended** | Complexity, length, expiration period | + +#### MySQL Password Policy + +```sql +-- Check password policy +SHOW VARIABLES LIKE 'validate_password%'; + +-- Configure policy +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.policy = MEDIUM; +``` + +#### Oracle Password Policy (Profile) + +```sql +-- Create profile +CREATE PROFILE secure_profile LIMIT + PASSWORD_LIFE_TIME 90 + PASSWORD_GRACE_TIME 7 + PASSWORD_REUSE_TIME 365 + PASSWORD_REUSE_MAX 12 + FAILED_LOGIN_ATTEMPTS 5 + PASSWORD_LOCK_TIME 1/24; + +-- Apply profile +ALTER USER username PROFILE secure_profile; +``` + +--- + +## 7-2. Access Management (D-17 ~ D-23) + +### D-17. Restrict Remote Access + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Block unauthorized remote access | + +#### MySQL Remote Access Restriction + +```sql +-- Check accounts with remote access +SELECT user, host FROM mysql.user WHERE host NOT IN ('localhost', '127.0.0.1'); + +-- Allow specific IP only +CREATE USER 'user'@'192.168.1.%' IDENTIFIED BY 'password'; +``` + +#### PostgreSQL Access Control (pg_hba.conf) + +``` +# Allow local connections only +local all all md5 +host all all 127.0.0.1/32 md5 +# Allow specific network +host all all 192.168.1.0/24 md5 +``` + +--- + +### D-19. Principle of Least Privilege + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Grant only minimum required privileges | + +#### MySQL Permission Check + +```sql +-- Check user privileges +SHOW GRANTS FOR 'username'@'host'; + +-- Full privilege status +SELECT * FROM mysql.user WHERE user = 'username'\G +``` + +> **WARNING** +> `GRANT ALL PRIVILEGES` violates least privilege principle. Grant only necessary permissions individually. + +--- + +## 7-3. Option Management (D-24 ~ D-30) + +### D-24. Configure Security-Related Parameters + +#### Oracle Security Parameters + +| Parameter | Recommended | Description | +|-----------|:-----------:|-------------| +| REMOTE_LOGIN_PASSWORDFILE | EXCLUSIVE | Remote password file | +| REMOTE_OS_AUTHENT | FALSE | Disable OS authentication | +| O7_DICTIONARY_ACCESSIBILITY | FALSE | Restrict data dictionary access | +| AUDIT_TRAIL | DB | Enable auditing | + +#### MySQL Security Parameters + +| Parameter | Recommended | Description | +|-----------|:-----------:|-------------| +| local_infile | OFF | Disable local file load | +| skip_symbolic_links | ON | Disable symbolic links | +| secure_file_priv | Specified path | Restrict file operations path | + +--- + +## 7-4. Patch Management (D-31 ~ D-32) + +### D-31. Apply Latest Security Patches + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Patch known vulnerabilities | + +#### Version Check Methods + +```sql +-- MySQL +SELECT VERSION(); + +-- Oracle +SELECT * FROM V$VERSION; + +-- PostgreSQL +SELECT version(); + +-- MSSQL +SELECT @@VERSION; +``` + +--- + +## 7-5. DB Assessment Scripts + +### MySQL Assessment Script + +```bash +#!/bin/bash +# KESE KIT - MySQL Assessment Script + +MYSQL_USER="root" +MYSQL_PASS="your_password" + +echo "===== MySQL Security Assessment =====" + +# D-01: Accounts with empty password +echo -e "\n[D-01] Accounts with Empty Password" +mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SELECT user, host FROM mysql.user WHERE authentication_string = '';" 2>/dev/null + +# D-02: All accounts list +echo -e "\n[D-02] All Accounts List" +mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SELECT user, host, account_locked FROM mysql.user;" 2>/dev/null + +# D-17: Accounts with remote access +echo -e "\n[D-17] Accounts with Remote Access" +mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SELECT user, host FROM mysql.user WHERE host NOT IN ('localhost', '127.0.0.1', '::1');" 2>/dev/null + +echo -e "\n===== Assessment Complete =====" +``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Account Management | Default password change, remove unused accounts | Highest | +| Access Management | Remote access restriction, least privilege | Highest | +| Option Management | Security parameter settings | High | +| Patch Management | Apply latest patches | Highest | + +--- + +*Next Chapter: Chapter 8. Network Equipment Assessment* + + +--- + +# Chapter 8. Network Equipment Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +Network equipment (routers, switches) is the core of infrastructure. This chapter covers 40 assessment items (N-01 ~ N-40). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Network Equipment Vulnerability Assessment Domains (40) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │Network Equipment│ │ +│ │ Router | Switch │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌───────────────────────┼───────────────────────┐ │ +│ │ │ │ │ │ │ +│ ▼ ▼ ▼ ▼ ▼ │ +│ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ +│ │Account│ │ Access│ │ Patch │ │ Log │ │Feature│ │ +│ │ Mgmt │ │ Mgmt │ │ Mgmt │ │ Mgmt │ │ Mgmt │ │ +│ │N-01~10│ │N-11~18│ │ N-19 │ │N-20~24│ │N-25~40│ │ +│ │ (10) │ │ (8) │ │ (1) │ │ (5) │ │ (16) │ │ +│ │ │ │ │ │ │ │ │ │ │ │ +│ │•Default│ │• ACL │ │• Firm-│ │• Sys- │ │• SNMP │ │ +│ │ acct │ │• SSH │ │ ware │ │ log │ │• CDP │ │ +│ │•Encrypt│ │•Telnet│ │ │ │• NTP │ │•Unnec-│ │ +│ │ │ │ block │ │ │ │ │ │ essary│ │ +│ │ │ │ │ │ │ │ │ │ svc │ │ +│ └───────┘ └───────┘ └───────┘ └───────┘ └───────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Account Management | N-01 ~ N-10 | 10 | +| Access Management | N-11 ~ N-18 | 8 | +| Patch Management | N-19 | 1 | +| Log Management | N-20 ~ N-24 | 5 | +| Feature Management | N-25 ~ N-40 | 16 | + +--- + +## 8-1. Account Management (N-01 ~ N-10) + +### N-01. Change Default Account Password + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Criteria** | Good: Default password changed / Vulnerable: Default used | + +#### Cisco Equipment Default Accounts + +| Account | Default Password | Action | +|---------|------------------|--------| +| cisco | cisco | Change required | +| admin | admin | Change required | +| enable | (none) | Configuration required | + +#### Remediation (Cisco IOS) + +``` +enable +configure terminal +username admin privilege 15 secret [strong_password] +enable secret [strong_password] +``` + +--- + +### N-04. Encrypt Stored Passwords + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent plaintext passwords in config files | + +#### Assessment Method (Cisco) + +``` +show running-config | include password +# "password 7" or plaintext indicates vulnerability +``` + +#### Remediation + +``` +configure terminal +service password-encryption +# Use enable secret instead of enable password +enable secret [password] +``` + +--- + +## 8-2. Access Management (N-11 ~ N-18) + +### N-11. Restrict Remote Access (ACL) + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Allow access only from management networks | + +#### Remediation (Cisco) + +``` +! Create management ACL +access-list 10 permit 192.168.1.0 0.0.0.255 +access-list 10 deny any log + +! Apply to VTY lines +line vty 0 4 + access-class 10 in + transport input ssh +``` + +--- + +### N-12. Use SSH (Disable Telnet) + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Use encrypted management access | + +#### Remediation (Cisco) + +``` +! Enable SSH +hostname Router1 +ip domain-name example.com +crypto key generate rsa modulus 2048 +ip ssh version 2 + +! Disable Telnet +line vty 0 4 + transport input ssh +``` + +--- + +## 8-3. Patch Management (N-19) + +### N-19. Apply Latest Firmware + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Patch known vulnerabilities | + +#### Version Check (Cisco) + +``` +show version +``` + +> **WARNING** +> Always backup current configuration before firmware upgrade. + +--- + +## 8-4. Log Management (N-20 ~ N-24) + +### N-20. Configure Logging + +#### Remediation (Cisco) + +``` +! Syslog server configuration +logging host 192.168.1.100 +logging trap informational +logging facility local7 + +! Add timestamps +service timestamps log datetime msec +``` + +--- + +## 8-5. Feature Management (N-25 ~ N-40) + +### N-25. SNMP Security Configuration + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent unauthorized access via SNMP | + +#### Remediation + +``` +! Delete default communities +no snmp-server community public +no snmp-server community private + +! Use complex community or SNMPv3 +snmp-server community [complex_string] RO 10 +snmp-server group v3group v3 priv +snmp-server user v3user v3group v3 auth sha [auth_password] priv aes 256 [priv_password] +``` + +--- + +### N-30. Disable Unnecessary Services + +#### Recommended to Disable + +``` +no ip http server +no ip http secure-server +no cdp run +no ip source-route +no service tcp-small-servers +no service udp-small-servers +no ip finger +no ip bootp server +``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Account Management | Default password, encrypted storage | Highest | +| Access Management | SSH usage, ACL configuration | Highest | +| Patch Management | Latest firmware | High | +| Log Management | Syslog configuration | Medium | +| Feature Management | SNMP security, disable unnecessary services | High | + +--- + +*Next Chapter: Chapter 9. Security Equipment Assessment* + + +--- + +# Chapter 9. Security Equipment Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +Security equipment (Firewall, IDS/IPS, WAF) is a core element of security. This chapter covers 19 assessment items (S-01 ~ S-19). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Security Equipment Vulnerability Assessment Domains (19) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌────────────────────────────────────────────────────────────┐ │ +│ │ Security Equipment Types │ │ +│ │ │ │ +│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ +│ │ │ Firewall │ │ IDS/IPS │ │ WAF │ │ │ +│ │ │ │ │Intrusion │ │ Web │ │ │ +│ │ │ │ │Detection/│ │Application│ │ │ +│ │ │ │ │Prevention│ │ Firewall │ │ │ +│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ +│ │ │ │ │ │ │ +│ │ └───────────────┼───────────────┘ │ │ +│ │ │ │ │ +│ └────────────────────────┼──────────────────────────────────┘ │ +│ │ │ +│ ┌───────────────┼───────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │Account/Access│ │ Patch/Log │ │ Feature │ │ +│ │ Management │ │ Management │ │ Management │ │ +│ │ S-01~S-08 │ │ S-09~S-12 │ │ S-13~S-19 │ │ +│ │ (8) │ │ (4) │ │ (7) │ │ +│ │ │ │ │ │ │ │ +│ │• Default │ │• Firmware │ │• Policy │ │ +│ │ accounts │ │• Signature │ │ optimization│ │ +│ │• Admin │ │• Log │ │• Ruleset │ │ +│ │ access │ │ retention │ │ management │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Account Management | S-01 ~ S-05 | 5 | +| Access Management | S-06 ~ S-08 | 3 | +| Patch Management | S-09 | 1 | +| Log Management | S-10 ~ S-12 | 3 | +| Feature Management | S-13 ~ S-19 | 7 | + +--- + +## 9-1. Firewall Assessment (S-01 ~ S-19) + +### S-01. Change Default Account Password + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Target** | Firewall, IDS/IPS, UTM | +| **Criteria** | Good: Changed / Vulnerable: Default | + +#### Key Security Equipment Default Accounts + +| Equipment | Default Account | Action | +|-----------|-----------------|--------| +| Palo Alto | admin/admin | Change required | +| FortiGate | admin/(none) | Set password | +| Cisco ASA | - | Set enable password | + +--- + +### S-06. Management Access Control + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Restrict management interface access | + +#### Recommended Settings + +- Separate management interface on isolated network +- Allow access only from specific IPs +- Use SSH or HTTPS (disable HTTP/Telnet) + +--- + +### S-13. Policy Optimization + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Remove unnecessary allow policies | + +#### Check Points + +| Item | Check For | +|------|-----------| +| Any-Any policies | Source/destination is Any | +| Unused policies | Hit count is 0 | +| Duplicate policies | Same effect duplicated | +| Order issues | Broader policies above specific ones | + +> **TIP** +> Regularly review policies and remove unused ones. + +--- + +## 9-2. IDS/IPS Assessment + +### Signature Updates + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Detect latest attack patterns | + +#### Check Points + +- Auto-update configuration +- Update frequency check (daily recommended) +- Last update date verification + +--- + +## 9-3. WAF Assessment + +### Web Attack Defense Settings + +| Attack Type | Defense Setting | +|-------------|-----------------| +| SQL Injection | Detect/Block | +| XSS | Detect/Block | +| CSRF | Detect | +| File Inclusion | Detect/Block | +| Command Injection | Detect/Block | + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Account Management | Default password change | Highest | +| Access Management | Management interface restriction | Highest | +| Feature Management | Policy optimization, signature updates | High | + +--- + +*Next Chapter: Chapter 10. Virtualization and Cloud Assessment* + + +--- + +# Chapter 10. Virtualization and Cloud Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +Virtualization and cloud environments are core to modern infrastructure. This chapter covers Virtualization equipment (V-01 ~ V-36) and Cloud (CL-01 ~ CL-14) assessments. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Virtualization and Cloud Vulnerability Assessment (50) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌────────────────────────┐ ┌────────────────────────┐ │ +│ │ Virtualization Env │ │ Cloud Env │ │ +│ │ V-01 ~ V-36 │ │ CL-01 ~ CL-14 │ │ +│ │ (36) │ │ (14) │ │ +│ └───────────┬────────────┘ └───────────┬────────────┘ │ +│ │ │ │ +│ ▼ ▼ │ +│ ┌────────────────────────┐ ┌────────────────────────┐ │ +│ │ • VMware vSphere │ │ • AWS │ │ +│ │ • Microsoft Hyper-V │ │ • Microsoft Azure │ │ +│ │ • KVM/QEMU │ │ • Google Cloud (GCP) │ │ +│ │ • Citrix Xen │ │ • NHN Cloud / NCP │ │ +│ └───────────┬────────────┘ └───────────┬────────────┘ │ +│ │ │ │ +│ └──────────────┬───────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Common Assessment Domains │ │ +│ ├─────────────────────────────────────────────────────────┤ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ Account │ │ Network │ │ Storage │ │Container│ │ │ +│ │ │ Mgmt │ │Isolation│ │Security │ │Security │ │ │ +│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ +│ │ │ │ +│ │ • IAM Policy • VLAN/VPC • Encryption │ │ +│ │ • MFA • Security Group • Block public │ │ +│ │ • Least privilege • Firewall rules • Backup policy │ │ +│ └─────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 10-1. Virtualization Equipment (V-01 ~ V-36) + +### V-01. Hypervisor Account Management + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Target** | VMware vSphere, Hyper-V, KVM | +| **Purpose** | Hypervisor admin account security | + +#### VMware vSphere Assessment + +```powershell +# Check users with PowerCLI +Connect-VIServer -Server vcenter.example.com +Get-VIPermission | Select Principal, Role +``` + +--- + +### V-12. Virtual Network Segregation + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Network isolation between VMs | + +#### Recommendations + +- Separate VLAN/port groups by purpose +- Isolate management network +- Separate production/development environments + +--- + +### V-25. Snapshot Management + +| Item | Content | +|------|---------| +| **Severity** | Medium | +| **Purpose** | Prevent performance degradation from snapshot accumulation | + +#### Check Points + +- Identify old snapshots (7+ days) +- Verify snapshot chain length + +```powershell +# VMware snapshot check +Get-VM | Get-Snapshot | Select VM, Name, Created, SizeGB +``` + +--- + +## 10-2. Cloud Environment (CL-01 ~ CL-14) + +### CL-01. IAM Account Management + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Target** | AWS, Azure, GCP | +| **Purpose** | Cloud account and permission management | + +#### AWS IAM Assessment + +```bash +# Check unused accounts +aws iam generate-credential-report +aws iam get-credential-report --output text | base64 -d + +# Check users without MFA +aws iam list-users --query 'Users[*].UserName' --output text | while read user; do + mfa=$(aws iam list-mfa-devices --user-name $user --query 'MFADevices' --output text) + if [ -z "$mfa" ]; then + echo "No MFA: $user" + fi +done +``` + +--- + +### CL-04. Principle of Least Privilege + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent excessive permission grants | + +#### AWS Permission Assessment + +```bash +# Users with AdministratorAccess policy +aws iam list-entities-for-policy \ + --policy-arn arn:aws:iam::aws:policy/AdministratorAccess +``` + +> **WARNING** +> Minimize AdministratorAccess and *:* permissions. + +--- + +### CL-07. Storage Security + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Block public access, encryption | + +#### AWS S3 Bucket Assessment + +```bash +# Check public buckets +aws s3api list-buckets --query 'Buckets[*].Name' --output text | while read bucket; do + acl=$(aws s3api get-bucket-acl --bucket $bucket --query 'Grants[?Grantee.URI==`http://acs.amazonaws.com/groups/global/AllUsers`]' --output text) + if [ -n "$acl" ]; then + echo "Public bucket: $bucket" + fi +done +``` + +--- + +## 10-3. Container Security (Docker, K8s) + +### Docker Security Assessment + +| Item | Check For | +|------|-----------| +| Image vulnerabilities | Base image vulnerability scan | +| Privileged execution | Prohibit --privileged flag | +| root execution | Use non-root user in container | +| Network | Prohibit unnecessary port exposure | + +#### Docker Assessment Commands + +```bash +# Check privileged mode containers +docker ps --quiet | xargs docker inspect --format '{{.Name}}: Privileged={{.HostConfig.Privileged}}' + +# Containers running as root +docker ps --quiet | xargs docker inspect --format '{{.Name}}: User={{.Config.User}}' +``` + +### Kubernetes Security Assessment + +```bash +# Check Pod Security +kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.containers[].securityContext.privileged==true) | .metadata.name' + +# Check ServiceAccount permissions +kubectl get clusterrolebindings -o json | jq '.items[] | select(.subjects[].kind=="ServiceAccount")' +``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Virtualization | Hypervisor accounts, network segregation | Highest | +| Cloud | IAM, least privilege, storage security | Highest | +| Container | Image vulnerabilities, privilege restriction | High | + +--- + +*Next Chapter: Chapter 11. PC and Endpoint Assessment* + + +--- + +# Chapter 11. PC and Endpoint Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +PCs and endpoints are the points of direct contact with users. This chapter covers 18 assessment items (PC-01 ~ PC-18). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ PC/Endpoint Vulnerability Assessment Domains (18) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ User PC │ │ +│ │ (Endpoint) │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌───────────────────────┼───────────────────────┐ │ +│ │ │ │ │ │ │ +│ ▼ ▼ ▼ ▼ ▼ │ +│ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ +│ │Account│ │ Access│ │ Patch │ │Security│ │ Data │ │ +│ │ Mgmt │ │ Mgmt │ │ Mgmt │ │ Mgmt │ │Protect│ │ +│ │PC-01~4│ │PC-05~11│ │PC-12~13│ │PC-14~18│ │(Integ)│ │ +│ │ (4) │ │ (7) │ │ (2) │ │ (5) │ │ │ │ +│ │ │ │ │ │ │ │ │ │ │ │ +│ │•Unnec-│ │•Shared│ │• OS │ │•Anti- │ │•Encrypt│ │ +│ │ essary│ │ folder│ │ patch │ │ virus │ │•DLP │ │ +│ │ acct │ │• USB │ │• App │ │•Fire- │ │ │ │ +│ │•Screen│ │ block │ │ patch │ │ wall │ │ │ │ +│ │ saver │ │ │ │ │ │ │ │ │ │ +│ └───────┘ └───────┘ └───────┘ └────────┘ └───────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────┐ │ +│ │ Unified Endpoint Security │ │ +│ │ (EDR / MDM / NAC) │ │ +│ └───────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Account Management | PC-01 ~ PC-04 | 4 | +| Access Management | PC-05 ~ PC-11 | 7 | +| Patch Management | PC-12 ~ PC-13 | 2 | +| Security Management | PC-14 ~ PC-18 | 5 | + +--- + +## 11-1. Account Management (PC-01 ~ PC-04) + +### PC-01. Remove Unnecessary Accounts + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Prevent unauthorized access through unused accounts | + +#### Assessment Method (Windows) + +```powershell +# Check local accounts +Get-LocalUser | Select-Object Name, Enabled, LastLogon + +# Verify Guest account is disabled +Get-LocalUser -Name "Guest" | Select-Object Enabled +``` + +--- + +### PC-03. Screen Saver Configuration + +| Item | Content | +|------|---------| +| **Severity** | Medium | +| **Recommended** | Within 10 minutes, password protected | + +#### Assessment Method (Windows Registry) + +```powershell +# Check registry +Get-ItemProperty -Path "HKCU:\Control Panel\Desktop" | Select-Object ScreenSaveActive, ScreenSaverIsSecure, ScreenSaveTimeOut +``` + +--- + +## 11-2. Access Management (PC-05 ~ PC-11) + +### PC-05. Shared Folder Assessment + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Remove unnecessary shares | + +#### Assessment Method + +```powershell +# Check shared folders +Get-SmbShare | Select-Object Name, Path, Description + +# Check shares accessible by Everyone +Get-SmbShareAccess -Name "ShareName" | Where-Object {$_.AccountName -eq "Everyone"} +``` + +--- + +### PC-08. Restrict Removable Storage Media + +| Item | Content | +|------|---------| +| **Severity** | Medium | +| **Purpose** | Prevent data leakage via USB | + +#### Group Policy Configuration + +``` +Computer Configuration > Administrative Templates > System > Removable Storage Access +- Removable Disks: Deny read access +- Removable Disks: Deny write access +``` + +--- + +## 11-3. Patch Management (PC-12 ~ PC-13) + +### PC-12. Operating System Patches + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Apply latest security patches | + +#### Assessment Method + +```powershell +# Check recently installed updates +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 5 + +# Check pending updates +(New-Object -ComObject Microsoft.Update.Session).CreateUpdateSearcher().Search("IsInstalled=0").Updates | Select-Object Title +``` + +--- + +## 11-4. Security Management (PC-14 ~ PC-18) + +### PC-14. Antivirus Installation and Updates + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Malware defense | + +#### Assessment Method (Windows Defender) + +```powershell +# Windows Defender status +Get-MpComputerStatus | Select-Object AntivirusEnabled, RealTimeProtectionEnabled, AntivirusSignatureLastUpdated +``` + +--- + +### PC-17. Personal Firewall Usage + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Network attack defense | + +#### Assessment Method + +```powershell +# Windows Firewall status +Get-NetFirewallProfile | Select-Object Name, Enabled +``` + +--- + +## PC Assessment Script + +```powershell +#=============================================== +# KESE KIT - PC Security Assessment Script +#=============================================== + +Write-Host "===== PC Security Assessment =====" -ForegroundColor Cyan + +# PC-01: Guest account +Write-Host "`n[PC-01] Guest Account Status" +$guest = Get-LocalUser -Name "Guest" +if ($guest.Enabled) { Write-Host " [Vulnerable] Guest enabled" -ForegroundColor Red } +else { Write-Host " [Good] Guest disabled" -ForegroundColor Green } + +# PC-05: Shared folders +Write-Host "`n[PC-05] Shared Folders" +Get-SmbShare | Where-Object {$_.Name -notmatch '\$$'} | ForEach-Object { + Write-Host " Share: $($_.Name) - $($_.Path)" +} + +# PC-14: Antivirus status +Write-Host "`n[PC-14] Antivirus Status" +$defender = Get-MpComputerStatus +if ($defender.AntivirusEnabled -and $defender.RealTimeProtectionEnabled) { + Write-Host " [Good] Windows Defender enabled" -ForegroundColor Green +} else { + Write-Host " [Vulnerable] Windows Defender disabled" -ForegroundColor Red +} + +# PC-17: Firewall +Write-Host "`n[PC-17] Firewall Status" +$firewallEnabled = (Get-NetFirewallProfile | Where-Object {$_.Enabled -eq $true}).Count +if ($firewallEnabled -eq 3) { + Write-Host " [Good] All profiles enabled" -ForegroundColor Green +} else { + Write-Host " [Vulnerable] Some profiles disabled" -ForegroundColor Red +} + +Write-Host "`n===== Assessment Complete =====" -ForegroundColor Cyan +``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Account Management | Unnecessary accounts, screen saver | High | +| Access Management | Shared folders, removable media | High | +| Patch Management | OS patches | Highest | +| Security Management | Antivirus, firewall | Highest | + +--- + +*Next Chapter: Chapter 12. Control System (OT) Assessment* + + +--- + +# Chapter 12. Control System (OT) Assessment + +> Part II. Technical Vulnerability Assessment + +--- + +## Overview + +Control systems (OT, Operational Technology) control physical processes in power plants, factories, transportation, etc. They have unique characteristics different from IT systems and require separate assessment methods. This chapter covers 45 assessment items (C-01 ~ C-45). + +| Domain | Items | Count | +|--------|-------|:-----:| +| Account Management | C-01 ~ C-08 | 8 | +| Service Management | C-09 ~ C-14 | 6 | +| Patch Management | C-15 ~ C-18 | 4 | +| Network Access Control | C-19 ~ C-24 | 6 | +| Physical Access Control | C-25 ~ C-27 | 3 | +| Security Threat Detection | C-28 ~ C-30 | 3 | +| Recovery Response | C-31 ~ C-38 | 8 | +| Security Management | C-39 ~ C-44 | 6 | +| Education/Training | C-45 | 1 | + +--- + +## 12-1. Control System Characteristics + +### IT vs OT Comparison + +| Item | IT System | OT/Control System | +|------|-----------|-------------------| +| **Priority** | Confidentiality > Integrity > Availability | **Availability** > Integrity > Confidentiality | +| **Uptime** | Reboot possible | 24/7 continuous operation | +| **Patching** | Regular patches | Maintenance windows only | +| **Lifespan** | 3-5 years | 15-20 years | +| **Protocols** | TCP/IP | Modbus, DNP3, OPC, etc. | + +> **WARNING** +> When assessing control systems, **availability** must be the top priority. System downtime can lead to physical damage. + +--- + +## 12-2. Account/Service Management (C-01 ~ C-14) + +### C-01. Change Default Account Password + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Target** | HMI, PLC, SCADA Server | +| **Special Note** | Change vendor default passwords | + +#### Key Control System Default Accounts + +| System | Default Account | Action | +|--------|-----------------|--------| +| Siemens S7 | (none) | Set password | +| Allen Bradley | (default) | Change required | +| Schneider | admin | Change required | + +--- + +### C-09. Disable Unnecessary Services + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Minimize attack surface | + +#### Recommended to Disable + +- Remote Desktop (restrict if needed) +- File sharing +- Web server (except HMI) +- USB auto-run + +--- + +## 12-3. Network/Physical Access Control (C-19 ~ C-27) + +### C-19. Network Segregation + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | IT/OT network separation | + +#### Recommended Architecture (Purdue Model) + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Purdue Model-Based IT/OT Separation │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Level 5: Enterprise Network (Internet, ERP, Email) │ │ +│ └─────────────────────────┬───────────────────────────────┘ │ +│ │ ← DMZ / Firewall │ +│ ┌─────────────────────────┴───────────────────────────────┐ │ +│ │ Level 4: Business Systems (Production Planning, Inv) │ │ +│ └─────────────────────────┬───────────────────────────────┘ │ +│ │ ← Firewall (IT/OT Boundary) │ +│ ╔═════════════════════════╧═══════════════════════════════╗ │ +│ ║ OT Zone (Control Systems) ║ │ +│ ╠═════════════════════════════════════════════════════════╣ │ +│ ║ ┌───────────────────────────────────────────────────┐ ║ │ +│ ║ │ Level 3: Manufacturing Operations (MES, Historian)│ ║ │ +│ ║ └───────────────────────┬───────────────────────────┘ ║ │ +│ ║ │ ║ │ +│ ║ ┌───────────────────────┴───────────────────────────┐ ║ │ +│ ║ │ Level 2: Supervisory Control (SCADA Server, HMI) │ ║ │ +│ ║ └───────────────────────┬───────────────────────────┘ ║ │ +│ ║ │ ║ │ +│ ║ ┌───────────────────────┴───────────────────────────┐ ║ │ +│ ║ │ Level 1: Basic Control (PLC, RTU, DCS) │ ║ │ +│ ║ └───────────────────────┬───────────────────────────┘ ║ │ +│ ║ │ ║ │ +│ ║ ┌───────────────────────┴───────────────────────────┐ ║ │ +│ ║ │ Level 0: Physical Process (Sensors, Actuators) │ ║ │ +│ ║ └───────────────────────────────────────────────────┘ ║ │ +│ ╚═════════════════════════════════════════════════════════╝ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +### C-25. Physical Access Restriction + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Physical security of control room/equipment room | + +#### Check Points + +- Control room access control +- CCTV installation +- Access log management +- Locking devices (cabinets, terminals) + +--- + +## 12-4. Security Threat Detection and Recovery (C-28 ~ C-38) + +### C-28. Abnormal Traffic Detection + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | OT environment IDS operation | + +#### Recommendations + +- Deploy OT-specific IDS (Claroty, Nozomi, etc.) +- Detect abnormal protocols +- Configure alarm thresholds + +--- + +### C-31. Backup and Recovery Procedures + +| Item | Content | +|------|---------| +| **Severity** | High | +| **Purpose** | Rapid recovery in case of failure | + +#### Backup Targets + +| Target | Backup Frequency | Storage Location | +|--------|:----------------:|------------------| +| PLC programs | On change | Offline | +| HMI configuration | Weekly | Separate server | +| SCADA DB | Daily | Backup server | +| Network configuration | On change | Documentation | + +--- + +## Control System Assessment Precautions + +> **WARNING** +> The following must be observed when assessing control systems. + +1. **Prior coordination**: Coordinate assessment schedule with operations staff +2. **Minimize live testing**: Test during maintenance windows when possible +3. **Simulation environment**: Verify in test environment first when possible +4. **Emergency contacts**: Have immediate response capability for issues +5. **Rollback plan**: Establish recovery plan before changes + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Account/Service | Default password, unnecessary services | High | +| Network | IT/OT separation | Highest | +| Physical Security | Access control | High | +| Detection/Recovery | IDS, backups | High | + +--- + +## Part II Complete + +Systems covered in Part II (Technical Vulnerability Assessment): + +- Chapter 3: Unix/Linux Server +- Chapter 4: Windows Server +- Chapter 5: Web Service +- Chapter 6: Web Application +- Chapter 7: DBMS +- Chapter 8: Network Equipment +- Chapter 9: Security Equipment +- Chapter 10: Virtualization/Cloud +- Chapter 11: PC/Endpoint +- Chapter 12: Control System (OT) + +--- + +*Next Chapter: Chapter 13. Information Security Policy and Organization (Part III Start)* + + +--- + +# Chapter 13. Information Security Policy and Organization + +> Part III. Administrative and Physical Vulnerability Assessment + +--- + +## Overview + +Administrative vulnerability assessment, unlike technical assessment, involves reviewing policies, guidelines, and procedures, along with conducting interviews with relevant personnel. This chapter covers Information Security Policy (A-1 ~ A-7) and Information Security Organization (A-8 ~ A-9). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Information Security Policy and Organization (A-1 ~ A-9) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ Executive │ │ +│ │ Approval │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────────────────────────────────────────────────────┐ │ +│ │ Information Security Policy (A-1 ~ A-7) │ │ +│ ├──────────────────────────────────────────────────────────┤ │ +│ │ A-1 Policy Est. A-2 Impl. Docs A-3 Distribution │ │ +│ │ A-4 Validity Rev A-5 Stakeholder A-6 Annual Plan │ │ +│ │ A-7 Long-term Plan │ │ +│ └──────────────────────────┬───────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────────────────────────────────────────────────────┐ │ +│ │ Information Security Organization (A-8 ~ A-9) │ │ +│ ├──────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌─────────────┐ ┌─────────────┐ │ │ +│ │ │ A-8 Dedic. │ │ A-9 Committee│ │ │ +│ │ │ Team │ │ │ │ │ +│ │ │ • CISO │ │ • Deliberate │ │ │ +│ │ │ • Policy │◀─────────▶│ • Budget │ │ │ +│ │ │ • SOC │ │ • Plan │ │ │ +│ │ │ • Tech │ │ Approval │ │ │ +│ │ └─────────────┘ └─────────────┘ │ │ +│ │ │ │ +│ └──────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Information Security Policy | A-1 ~ A-7 | 7 | +| Information Security Organization | A-8 ~ A-9 | 2 | + +> **TIP** +> Administrative assessment requires a combination of document review + interviews + on-site inspection. Prepare a list of required documents in advance for efficiency. + +--- + +## 13-1. Information Security Policy (A-1 ~ A-7) + +### A-1. Establish Policy and Obtain Executive Approval + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish information security policies/guidelines applicable to the entire organization and obtain executive approval | +| **Related Dept.** | Information Security Department | + +#### Assessment Points + +- Existence of organization's top-level information security policy document +- Official approval by CEO/head of organization (approval document or signed copy) +- Clear basis and criteria for information security activities + +#### Judgment Criteria + +| Judgment | Criteria | +|:--------:|----------| +| Good | Top-level information security policy established with executive approval | +| Partial | Policy exists but approval history unclear | +| Vulnerable | No information security policy established | + +#### Related Regulations + +| Category | Regulation | +|----------|------------| +| Common | Act on Protection of Information and Communications Infrastructure, Article 10 (Protection Guidelines) | +| Common | Personal Information Protection Act, Article 29 (Security Measures) | +| Public | National Information Security Basic Guidelines, Articles 4, 7 | +| Financial | Electronic Financial Transactions Act, Article 21 (Security Requirements) | + +--- + +### A-2. Establish Implementation Documents + +| Item | Content | +|------|---------| +| **Assessment Item** | Define and document methods, procedures, and frequencies needed to implement information security policy | +| **Related Dept.** | Information Security Department, System Operations Department | + +#### Required Implementation Documents + +| Document Type | Examples | +|---------------|----------| +| Guidelines | Information System Operation Guidelines, Access Control Guidelines | +| Procedures | Account Management Procedure, Change Management Procedure | +| Manuals | Security Incident Response Manual | +| Guides | Secure Password Creation Guide | + +--- + +### A-3. Policy Publication and Distribution + +| Item | Content | +|------|---------| +| **Assessment Item** | Provide information security policies and implementation documents in an accessible format to all employees and stakeholders | +| **Related Dept.** | Information Security Department | + +#### Distribution Methods + +- Internal bulletin board posting +- Email distribution +- Groupware announcement +- Printed copy distribution + +--- + +### A-4. Policy Validity Review + +| Item | Content | +|------|---------| +| **Assessment Item** | Periodically or upon significant changes, review and evaluate the validity of information security policies and implementation documents, then revise and supplement | +| **Review Frequency** | At least annually | + +#### Review Triggers + +- Regular review: At least annually +- Ad-hoc review: Upon significant changes + - Enactment/amendment of security-related regulations + - Organizational restructuring, new service introduction + - New system deployment + - Security incident occurrence + - Discovery of new threats/vulnerabilities + +--- + +### A-5. Stakeholder Review + +| Item | Content | +|------|---------| +| **Assessment Item** | Obtain stakeholder review when enacting/revising information security policies and implementation documents, and reflect their input | +| **Related Dept.** | Information Security Department, Related Departments | + +#### Stakeholders + +- Chief Information Security Officer (CISO) +- IT Operations Department +- Business Department Representatives +- Legal/Audit Department + +--- + +### A-6. Annual Information Security Work Plan + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement detailed annual information security work plan | +| **Related Dept.** | Information Security Department | + +#### Annual Plan Components + +| Item | Content | +|------|---------| +| Vulnerability Assessment | Annual assessment schedule and scope | +| Training | Employee security awareness training plan | +| Drills | Security incident response exercises | +| Budget | Information security budget allocation | +| Systems | Security system deployment/renewal plan | + +--- + +### A-7. Long-term Plan + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement long-term (3+ years) plan to strengthen organizational information security | +| **Related Dept.** | Information Security Department, Executive Management | + +#### Long-term Plan Example + +| Year | Objectives | +|:----:|------------| +| Year 1 | Foundation: Policy systematization, essential security systems deployment | +| Year 2 | Enhancement: Security operations strengthening, automation tools development | +| Year 3 | Maturity: ISMS certification, continuous improvement framework | + +--- + +## 13-2. Information Security Organization (A-8 ~ A-9) + +### A-8. Dedicated Information Security Team + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish a dedicated team and personnel to plan, execute, and review information security activities | +| **Related Dept.** | Information Security Department, HR Department | + +#### Organization Structure Example + +``` +[CEO/Executive Director] + ↓ +[Chief Information Security Officer (CISO)] + ↓ +[Dedicated Information Security Department] + ├── Policy/Planning Team + ├── Security Operations Center (SOC) + └── Technical Security Team +``` + +#### Assessment Points + +- Existence of dedicated information security team or designated personnel +- Information security organization shown in organizational chart +- Defined roles and responsibilities for personnel + +--- + +### A-9. Information Security Committee + +| Item | Content | +|------|---------| +| **Assessment Item** | Information Security Committee is established with documented roles and responsibilities | +| **Related Dept.** | Information Security Department, Executive Management | + +#### Committee Composition + +| Role | Responsibility | +|------|----------------| +| Chairperson | CEO or Deputy Head | +| Secretary | Chief Information Security Officer (CISO) | +| Members | Department Heads, External Experts | + +#### Committee Responsibilities + +- Deliberate and approve information security policies +- Determine response direction for major security incidents +- Review information security budget +- Approve annual information security plan + +#### Meeting Frequency + +- Regular meetings: At least twice annually +- Ad-hoc meetings: Upon significant issues + +--- + +## 13-3. Policy/Guideline Document Templates + +### Information Security Policy Table of Contents Example + +```markdown +Chapter 1. General Provisions + Article 1 (Purpose) + Article 2 (Scope) + Article 3 (Definitions) + Article 4 (Responsibilities and Obligations) + +Chapter 2. Information Security Organization + Article 5 (Information Security Committee) + Article 6 (Chief Information Security Officer) + Article 7 (Information Security Personnel) + +Chapter 3. Information Asset Management + Article 8 (Asset Classification) + Article 9 (Asset Protection) + +Chapter 4. Human Resource Security + Article 10 (Pre-employment Security) + Article 11 (During Employment Security) + Article 12 (Termination Security) + +Chapter 5. Physical Security + Article 13 (Protected Areas) + Article 14 (Access Control) + +Chapter 6. Technical Security + Article 15 (Access Control) + Article 16 (Encryption) + Article 17 (Network Security) + +Chapter 7. Operational Security + Article 18 (Change Management) + Article 19 (Backup) + Article 20 (Log Management) + +Chapter 8. Incident Response + Article 21 (Incident Reporting) + Article 22 (Incident Handling) + Article 23 (Prevention of Recurrence) + +Chapter 9. Supplementary Provisions + Article 24 (Disciplinary Actions for Violations) + Article 25 (Effective Date) +``` + +--- + +### Policy Validity Review Checklist + +| Review Item | Y/N | Notes | +|-------------|:---:|-------| +| Reflected changes in related laws | | | +| Reflected organizational changes | | | +| Reflected system changes | | | +| Consistency of terminology | | | +| Clarity of roles/responsibilities | | | +| Feasibility | | | +| Measurable criteria included | | | + +--- + +## Assessment Execution Guide + +### Preparation + +1. **Document Request List** + - Information security policy + - Implementation guidelines/procedures + - Organizational chart + - Information Security Committee meeting minutes + - Annual plan + - Long-term plan + +2. **Interview Subject Selection** + - Chief Information Security Officer (CISO) + - Information security personnel + - IT operations personnel + +### Assessment Verification Items + +| Item | Verification Method | +|------|---------------------| +| A-1 | Policy document + approval document review | +| A-2 | Implementation document existence + revision history | +| A-3 | Distribution history or posting location verification | +| A-4 | Validity review result document | +| A-5 | Stakeholder review feedback document | +| A-6 | Annual plan and implementation results | +| A-7 | Long-term plan document | +| A-8 | Organizational chart + job descriptions | +| A-9 | Committee regulations + meeting minutes | + +--- + +## Summary + +| Item | Key Assessment Content | Priority | +|------|------------------------|:--------:| +| A-1 | Top-level policy + executive approval | Highest | +| A-2 | Implementation documents (guidelines/procedures) | Highest | +| A-6 | Annual plan establishment and implementation | High | +| A-8 | Dedicated team/personnel designation | Highest | +| A-9 | Information Security Committee composition and operation | High | + +--- + +*Next Chapter: Chapter 14. Asset Management and Risk Management* + + +--- + +# Chapter 14. Asset Management and Risk Management + +> Part III. Administrative and Physical Vulnerability Assessment + +--- + +## Overview + +Asset management and risk management form the foundation of information security. You need to identify assets to protect and assess risks to establish appropriate protection measures. This chapter covers Asset Classification (A-10 ~ A-14), Risk Management (A-15 ~ A-17), and Audit (A-18 ~ A-20). + +| Domain | Items | Count | +|--------|-------|:-----:| +| Asset Classification | A-10 ~ A-14 | 5 | +| Risk Management | A-15 ~ A-17 | 3 | +| Audit | A-18 ~ A-20 | 3 | + +--- + +## 14-1. Asset Classification (A-10 ~ A-14) + +### A-10. Establish Asset Classification Criteria + +| Item | Content | +|------|---------| +| **Assessment Item** | Identify all assets (personnel, facilities, equipment, etc.) within critical information infrastructure and establish documented asset classification criteria | +| **Related Dept.** | Information Security Department, Asset Management Department | + +#### Asset Types + +| Type | Examples | +|------|----------| +| Information Assets | Databases, documents, software | +| Physical Assets | Servers, network equipment, PCs | +| Human Assets | System administrators, developers | +| Facility Assets | Data center, communications room, protected areas | + +#### Classification Criteria Example + +| Level | Confidentiality | Integrity | Availability | +|:-----:|-----------------|-----------|--------------| +| Level 1 | Secret | Operations impossible if damaged | Immediate recovery required | +| Level 2 | Confidential | Operations impaired if damaged | Recovery within 4 hours | +| Level 3 | General | Recoverable | Recovery within 1 day | + +--- + +### A-11. Security Level Classification Management + +| Item | Content | +|------|---------| +| **Assessment Item** | Classify and manage information assets according to security level and importance | +| **Related Dept.** | Information Security Department, Asset Management Department | + +#### Security Level Classification + +| Level | Definition | Examples | +|:-----:|------------|----------| +| Top Secret | Disclosure affects national security | Encryption keys, core designs | +| Secret | Disclosure causes severe organizational damage | Personal information, financial data | +| Confidential | Disclosure causes organizational damage | Internal business documents | +| General | Can be disclosed | Marketing materials, public documents | + +--- + +### A-12. Asset Inventory Management + +| Item | Content | +|------|---------| +| **Assessment Item** | Create and maintain an up-to-date asset inventory reflecting regular asset status surveys and changes (acquisition, disposal, transfer, etc.) | +| **Related Dept.** | Information Security Department, Asset Management Department | + +#### Required Asset Inventory Fields + +| Field | Description | +|-------|-------------| +| Asset ID | Unique identifier | +| Asset Name | Equipment/system name | +| Category | Server/network/endpoint, etc. | +| Location | Installation location | +| Administrator | Responsible person/department | +| Security Level | Level 1/2/3 | +| Acquisition Date | Purchase date | +| Change History | Transfer/replacement/disposal history | + +--- + +### A-13. Asset Handling Procedures + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement handling procedures (creation/acquisition, storage, use, disposal) and protection measures according to asset classification | +| **Related Dept.** | Information Security Department, Asset Management Department | + +#### Lifecycle-based Protection Measures + +| Stage | Level 1 | Level 2 | Level 3 | +|-------|---------|---------|---------| +| Acquisition | Approval required | Approval required | Registration | +| Storage | Encryption + isolation | Encryption | Standard storage | +| Use | Access log + approval | Access log | Basic control | +| Disposal | Secure deletion + certificate | Secure deletion | Format/delete | + +--- + +### A-14. Asset Manager Designation + +| Item | Content | +|------|---------| +| **Assessment Item** | Designate administrators and management owners for each information asset and maintain an up-to-date list | +| **Related Dept.** | Information Security Department, All Departments | + +#### Role Definitions + +| Role | Responsibility | +|------|----------------| +| Asset Owner | Ultimate responsibility for the asset | +| Asset Administrator | Day-to-day management and operations | +| Asset User | Use within authorized scope | + +--- + +## 14-2. Risk Management (A-15 ~ A-17) + +### A-15. Service Status Identification + +| Item | Content | +|------|---------| +| **Assessment Item** | Identify service status of critical information infrastructure, understand business processes and flows, and document them | +| **Related Dept.** | Information Security Department, System Operations Department | + +#### Service Status Documentation Content + +- Service list and descriptions +- Business flow diagrams (Data Flow Diagram) +- System architecture diagrams +- Network topology +- Connected systems status + +--- + +### A-16. Risk Assessment Execution + +| Item | Content | +|------|---------| +| **Assessment Item** | Conduct risk assessment at least annually on a regular basis | +| **Related Dept.** | Information Security Department | + +#### Risk Assessment Process + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Risk Assessment Process │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ 1. Asset │────▶│ 2. Threat │────▶│3. Vuln. │ │ +│ │ Ident. │ │ Ident. │ │ Ident. │ │ +│ └───────────┘ └───────────┘ └─────┬─────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────┐ │ +│ │ 4. Risk Level │ │ +│ │ Calculation │ │ +│ │ │ │ +│ │ Risk = Asset │ │ +│ │ × Threat │ │ +│ │ × Vuln. │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ 5. Risk Treatment Decision │ │ +│ ├─────────────┬─────────────┬─────────────┬───────────────┤ │ +│ │ Reduce │ Transfer │ Avoid │ Accept │ │ +│ │ (Controls) │ (Insurance) │(Discontinue)│(Mgmt Approval)│ │ +│ └─────────────┴─────────────┴─────────────┴───────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +#### Risk Treatment Options + +| Option | Description | Example | +|--------|-------------|---------| +| Risk Reduction | Apply protection measures | Deploy firewall, encryption | +| Risk Transfer | Transfer through insurance, etc. | Cyber insurance | +| Risk Avoidance | Eliminate risk source | Service discontinuation | +| Risk Acceptance | Accept residual risk | Accept with executive approval | + +--- + +### A-17. Protection Measure Implementation Plan + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish annual protection measure implementation plan based on risk assessment and report to executive management | +| **Related Dept.** | Information Security Department, Executive Management | + +#### Implementation Plan Components + +| Item | Content | +|------|---------| +| Measure Name | Specific protection measure | +| Owner | Implementation responsibility | +| Schedule | Start date/completion date | +| Budget | Required cost | +| Effect | Risk reduction level | + +--- + +## 14-3. Audit (A-18 ~ A-20) + +### A-18. Legal Requirements Compliance Review + +| Item | Content | +|------|---------| +| **Assessment Item** | Review compliance with legal requirements at least annually on a regular basis | +| **Related Dept.** | Information Security Department, Legal Department | + +#### Key Legal Requirements + +| Regulation | Key Content | +|------------|-------------| +| Act on Protection of Information and Communications Infrastructure | Vulnerability analysis and assessment, protection measure establishment | +| Personal Information Protection Act | Security measures, access control | +| Electronic Financial Transactions Act | Electronic financial transaction security | +| Information and Communications Network Act | Technical and administrative protection measures | + +--- + +### A-19. Information Security Audit + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement periodic information security audit plan | +| **Related Dept.** | Audit Department, Information Security Department | + +#### Audit Types + +| Type | Frequency | Performed By | +|------|:---------:|--------------| +| Regular Audit | At least annually | Internal audit team | +| Ad-hoc Audit | As needed | Internal audit team | +| External Audit | As needed | External professional organization | + +--- + +### A-20. Audit Results Reporting and Follow-up + +| Item | Content | +|------|---------| +| **Assessment Item** | Report audit results to executive management and implement appropriate follow-up actions | +| **Related Dept.** | Audit Department, Executive Management | + +#### Audit Follow-up Actions + +1. Prepare audit result report +2. Report to executive management +3. Develop corrective action plan +4. Implement corrective actions +5. Verify implementation + +--- + +## 14-4. Asset Inventory Management Automation + +### Asset Inventory Template (Excel/CSV) + +```csv +AssetID,AssetName,Type,Location,Administrator,SecurityLevel,AcquisitionDate,Status,Notes +A001,DBServer01,Server,DataCenterA,Kim,Level1,2024-01-15,Operational,Oracle DB +A002,WebServer01,Server,DataCenterA,Kim,Level2,2024-02-20,Operational,Apache +A003,Switch01,Network,CommRoom,Park,Level2,2023-05-10,Operational,Cisco +``` + +### Asset Collection Script (PowerShell) + +```powershell +#=============================================== +# KESE KIT - Asset Information Collection Script +#=============================================== + +$report = @() + +# Collect server information +Get-ADComputer -Filter * -Properties * | ForEach-Object { + $report += [PSCustomObject]@{ + AssetName = $_.Name + Type = "Server" + OS = $_.OperatingSystem + IPAddress = $_.IPv4Address + LastLogon = $_.LastLogonDate + } +} + +# Export to CSV +$report | Export-Csv -Path "asset_inventory.csv" -Encoding UTF8 -NoTypeInformation + +Write-Host "Asset inventory generated: asset_inventory.csv" +``` + +### Asset Change Monitoring (Python) + +```python +""" +KESE KIT - Asset Change Monitoring +Compares with previous snapshot to detect changes +""" +import pandas as pd +from datetime import datetime + +def compare_assets(old_file, new_file): + """Compare asset inventories""" + old_df = pd.read_csv(old_file) + new_df = pd.read_csv(new_file) + + # New assets + new_assets = new_df[~new_df['AssetID'].isin(old_df['AssetID'])] + + # Removed assets + removed_assets = old_df[~old_df['AssetID'].isin(new_df['AssetID'])] + + # Changed assets + merged = old_df.merge(new_df, on='AssetID', suffixes=('_old', '_new')) + changed = merged[merged['Status_old'] != merged['Status_new']] + + return { + 'new': new_assets, + 'removed': removed_assets, + 'changed': changed + } + +if __name__ == "__main__": + result = compare_assets("assets_old.csv", "assets_new.csv") + print(f"New: {len(result['new'])} items") + print(f"Removed: {len(result['removed'])} items") + print(f"Changed: {len(result['changed'])} items") +``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Asset Classification | Asset inventory + classification criteria | Highest | +| Asset Management | Administrator designation + currency | High | +| Risk Management | Annual risk assessment | Highest | +| Audit | Annual audit + result reporting | High | + +--- + +*Next Chapter: Chapter 15. Human Resource Security and External Party Security* + + +--- + +# Chapter 15. Human Resource Security and External Party Security + +> Part III. Administrative and Physical Vulnerability Assessment + +--- + +## Overview + +Human resource security addresses security for internal employees, while external party security addresses security for contractors and outsourced personnel. Human factors can be the weakest security link, requiring systematic management. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ HR Security Lifecycle Management │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Internal Employees (A-21~A-26) │ │ +│ └─────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ Hiring │────▶│ Active │────▶│ Transfer│────▶│ Term. │ │ +│ │ │ │ │ │ │ │ │ │ +│ │•Screen- │ │•Job │ │•Access │ │•Revoke │ │ +│ │ ing │ │ defined │ │ adjust │ │ access │ │ +│ │•Security│ │•Training│ │•Handover│ │•Asset │ │ +│ │ pledge │ │•Monitor │ │ │ │ return │ │ +│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ External Parties (A-27~A-33) │ │ +│ └─────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │Contract │────▶│Execute │────▶│ Audit │────▶│ Close │ │ +│ │ │ │ │ │ │ │ │ │ +│ │•Security│ │•Status │ │•Compli- │ │•Delete │ │ +│ │ clauses │ │ mgmt │ │ ance │ │ accounts│ │ +│ │•NDA │ │•Visit │ │•Violation│ │•Return │ │ +│ │ │ │ proced. │ │ action │ │ data │ │ +│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Human Resource Security | A-21 ~ A-26 | 6 | +| External Party Security | A-27 ~ A-33 | 7 | + +--- + +## 15-1. Human Resource Security (A-21 ~ A-26) + +### A-21. Define Job Responsibilities and Roles + +| Item | Content | +|------|---------| +| **Assessment Item** | Clearly define and document responsibilities and roles for information security-related positions | +| **Related Dept.** | Information Security Department, HR Department | + +#### Job Description Components + +| Item | Description | +|------|-------------| +| Job Title | Information Security Officer, System Administrator, etc. | +| Role | Tasks to be performed | +| Responsibility | Scope of responsibility and authority | +| Reporting Line | Superior reporting structure | +| Qualifications | Required certifications, experience, etc. | + +--- + +### A-22. Pre-employment Screening + +| Item | Content | +|------|---------| +| **Assessment Item** | Conduct pre-employment screening covering identity, capability, education, and experience when designating critical infrastructure personnel | +| **Related Dept.** | Information Security Department, HR Department | + +#### Screening Items + +| Item | Verification Content | +|------|----------------------| +| Identity Verification | ID card, military service records, etc. | +| Education Verification | Diploma certificate | +| Experience Verification | Employment certificates, career verification | +| Qualification Verification | Certification copies | +| Credit Check | Credit inquiry (if necessary) | + +> **TIP** +> Public organizations may require background investigations according to "Security Work Regulations." + +--- + +### A-23. Pre-employment Security Pledge + +| Item | Content | +|------|---------| +| **Assessment Item** | Obtain security pledge or non-disclosure agreement when designating critical infrastructure personnel | +| **Related Dept.** | Information Security Department, HR Department | + +#### Security Pledge Content + +- Confidentiality obligation +- Information security policy compliance obligation +- Disciplinary provisions for violations +- Post-termination confidentiality obligation +- Signature and date + +--- + +### A-24. Termination Confidentiality Agreement + +| Item | Content | +|------|---------| +| **Assessment Item** | Obtain separate confidentiality agreement when removing critical infrastructure personnel designation | +| **Related Dept.** | Information Security Department, HR Department | + +#### Termination Confidentiality Agreement Content + +- Obligation to maintain secrets acquired during employment +- Confidentiality period (e.g., 3 years after termination) +- Legal liability for violations +- Damage compensation clause + +--- + +### A-25. Termination Access Revocation + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement procedures for prompt asset return, access revocation/adjustment, and result verification when removing critical infrastructure personnel designation | +| **Related Dept.** | Information Security Department, HR Department, IT Department | + +#### Termination Processing Checklist + +| Item | Responsible | Check | +|------|-------------|:-----:| +| Access card collection | Security Team | ☐ | +| PC/laptop return | IT Team | ☐ | +| System account deletion | IT Team | ☐ | +| Email account deactivation | IT Team | ☐ | +| VPN access removal | Security Team | ☐ | +| Security pledge collection | HR Team | ☐ | +| Portable storage media return | IT Team | ☐ | + +--- + +### A-26. Security Violation Discipline + +| Item | Content | +|------|---------| +| **Assessment Item** | Clearly specify disciplinary measures for information security policy violations by critical infrastructure personnel in regulations | +| **Related Dept.** | Information Security Department, HR Department, Legal Department | + +#### Disciplinary Levels + +| Violation Type | Disciplinary Level | +|----------------|-------------------| +| Minor violation (1st offense) | Warning, caution | +| Repeated violation | Pay reduction, suspension | +| Serious violation | Termination, legal action | +| Intentional leakage | Termination + civil/criminal action | + +--- + +## 15-2. External Party Security (A-27 ~ A-33) + +### A-27. External Party Security Pledge + +| Item | Content | +|------|---------| +| **Assessment Item** | Obtain security pledge from new external parties for external service use and business outsourcing | +| **Related Dept.** | Information Security Department, Contract Department | + +#### External Party Scope + +- Contractor employees +- Dispatched personnel +- Maintenance vendors +- Partner company personnel +- Outsourced developers + +--- + +### A-28. External Party Status Management + +| Item | Content | +|------|---------| +| **Assessment Item** | Identify and manage external service use and business outsourcing status within critical infrastructure scope | +| **Related Dept.** | Information Security Department, Contract Department | + +#### External Party Status Management Items + +| Item | Content | +|------|---------| +| Company Name | Contracted company name | +| Contract Period | Start date ~ end date | +| Scope of Work | Outsourced work content | +| Point of Contact | Vendor contact information | +| Access Rights | Granted system/area access | +| Pledge Status | Security pledge obtained | + +--- + +### A-29. Security Requirements in Contracts + +| Item | Content | +|------|---------| +| **Assessment Item** | Identify information security requirements for external service use and business outsourcing and specify in contracts or agreements | +| **Related Dept.** | Information Security Department, Contract Department, Legal Department | + +#### Contract Security Clause Examples + +- Confidentiality obligation +- Prohibition or approval conditions for subcontracting +- Security incident notification obligation +- Security audit acceptance obligation +- Data return/deletion upon contract termination +- Damage compensation for security violations + +--- + +### A-30. Temporary Visitor Security Notification + +| Item | Content | +|------|---------| +| **Assessment Item** | Provide advance notification of security regulations regarding information and asset access for temporary visitors (e.g., maintenance personnel) | +| **Related Dept.** | Information Security Department, Facilities Management Department | + +#### Temporary Visitor Procedure + +``` +1. Submit visit request in advance (Requester → Security Team) + ↓ +2. Visit approval + ↓ +3. Identity verification + visitor badge issuance upon arrival + ↓ +4. Security regulation notification (signature required) + ↓ +5. Work performed with escort + ↓ +6. Badge return + belongings check upon departure +``` + +--- + +### A-31. External Party Security Audit + +| Item | Content | +|------|---------| +| **Assessment Item** | Periodically audit or inspect whether external parties comply with information security requirements specified in contracts, agreements, and internal policies | +| **Related Dept.** | Information Security Department, Audit Department | + +#### External Party Audit Items + +| Area | Audit Items | +|------|-------------| +| Account Management | Existence of unnecessary accounts | +| Access Control | Compliance with authorized scope | +| Work Records | Work log maintenance | +| Data Management | Data leakage status | +| Security Training | Training completion status | + +--- + +### A-32. External Party Security Violation Actions + +| Item | Content | +|------|---------| +| **Assessment Item** | Take appropriate action when external parties violate security requirements or cause security incidents | +| **Related Dept.** | Information Security Department, Legal Department, Contract Department | + +#### Violation Response Steps + +| Step | Action | +|:----:|--------| +| Step 1 | Warning and corrective action request | +| Step 2 | Penalty imposition | +| Step 3 | Contract termination | +| Step 4 | Legal action (damage compensation) | + +--- + +### A-33. External Party Contract Termination Processing + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement security measures for asset return, access deletion, and confidentiality agreement upon external party contract expiration, work completion, or personnel change | +| **Related Dept.** | Information Security Department, Contract Department, IT Department | + +#### External Party Termination Checklist + +| Item | Responsible | Check | +|------|-------------|:-----:| +| Account deletion | IT Team | ☐ | +| Access authorization removal | Security Team | ☐ | +| Equipment/data return | IT Team | ☐ | +| Confidentiality pledge | Contract Team | ☐ | +| Data deletion verification | IT Team | ☐ | +| Handover completion | Responsible Dept. | ☐ | + +--- + +## 15-3. Security Pledge Templates + +### Employee Security Pledge + +```markdown +Security Pledge + +I hereby pledge to comply with the following in performing duties +related to critical information infrastructure at [Organization Name]: + +1. I will not disclose secrets and important information + acquired through my duties to external parties. +2. I will faithfully comply with information security laws + and internal regulations. +3. I will not access information assets beyond my authorized + work purposes. +4. I will not copy, remove, or leak information without + authorization. +5. I will immediately report any security incident occurrence + or discovery. +6. I will maintain secrets acquired during employment even + after resignation. +7. I confirm that I will bear civil and criminal liability + according to relevant laws if I violate the above. + +Date: YYYY/MM/DD + +Department: _______________ +Name: _______________ (Signature) +``` + +### Termination Confidentiality Agreement + +```markdown +Confidentiality Agreement + +Upon leaving [Organization Name], I hereby confirm the following: + +1. I will not disclose any secrets and important information + acquired during my employment to external parties even + after termination. +2. I have returned all work-related materials and confirm + that I do not retain any personal copies. +3. I will comply with this agreement for 3 years after + termination. +4. I confirm that I will bear civil and criminal liability + according to relevant laws if I violate the above. + +Date: YYYY/MM/DD + +Department: _______________ +Name: _______________ (Signature) +``` + +### External Party Security Pledge + +```markdown +External Party Security Pledge + +I hereby pledge to comply with the following in performing +information system-related work for [Organization Name]: + +1. I will not disclose information acquired through work + to external parties. +2. I will not access information assets beyond my authorized + work purposes. +3. I will comply with security regulations including + prohibition of personal storage media use. +4. I will delete/return all materials after work completion. +5. I will not retain acquired information even after + contract termination. +6. I confirm that I will bear contract termination and + legal liability if I violate the above. + +Date: YYYY/MM/DD + +Company: _______________ +Name: _______________ (Signature) +Supervisor Verification: _______________ (Signature) +``` + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| HR Security | Job definition + security pledge | Highest | +| HR Security | Termination access revocation | Highest | +| External Party | Security requirements in contracts | Highest | +| External Party | External party status management | High | +| External Party | Contract termination processing | Highest | + +--- + +*Next Chapter: Chapter 16. Training, Authentication, and Access Control* + + +--- + +# Chapter 16. Training, Authentication, and Access Control + +> Part III. Administrative and Physical Vulnerability Assessment + +--- + +## Overview + +Training is essential for human resource security, while authentication and access control form the foundation of system security. This chapter covers Training (A-34 ~ A-38), Authentication and Authorization Management (A-39 ~ A-42), and Access Control (A-43 ~ A-55). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Training, Authentication, Access Control Assessment (22) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────┐ │ +│ │ Personnel │ │ +│ │ (Human) │ │ +│ └──────┬──────┘ │ +│ │ │ +│ ┌───────────────────┼───────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Training │ │ Auth & │ │ Access │ │ +│ │ A-34 ~ A-38 │ │ AuthZ │ │ Control │ │ +│ │ (5) │ │ A-39 ~ A-42 │ │ A-43 ~ A-55 │ │ +│ ├─────────────┤ │ (4) │ │ (13) │ │ +│ │• Training │ ├─────────────┤ ├─────────────┤ │ +│ │ plan │ │• Account/ │ │• Network │ │ +│ │• All-staff │ │ permission │ │ separation │ │ +│ │• Role-based │ │• Auth method│ │• Remote work│ │ +│ │• Measure │ │• Password │ │• Air-gap │ │ +│ │• Alerts │ │• Review │ │• Wireless │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ │ +│ └───────────────────┼───────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────┐ │ +│ │ Integrated Security │ │ +│ │ (Who + How + Where) │ │ +│ └───────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Training | A-34 ~ A-38 | 5 | +| Authentication and Authorization | A-39 ~ A-42 | 4 | +| Access Control | A-43 ~ A-55 | 13 | + +--- + +## 16-1. Training (A-34 ~ A-38) + +### A-34. Establish Training Plan + +| Item | Content | +|------|---------| +| **Assessment Item** | Develop comprehensive training plan for information security awareness and conduct regularly | +| **Related Dept.** | Information Security Department, HR Department | + +#### Annual Training Plan Example + +| Quarter | Target | Training Content | Duration | +|:-------:|--------|-----------------|:--------:| +| Q1 | All staff | Information security basics | 2H | +| Q2 | IT staff | Latest security threats | 4H | +| Q3 | All staff | Personal information protection | 2H | +| Q4 | Managers | Incident response exercises | 4H | + +--- + +### A-35. All-Staff Training + +| Item | Content | +|------|---------| +| **Assessment Item** | Conduct information security training for all employees and external parties | +| **Related Dept.** | Information Security Department, HR Department | + +#### Training Content by Audience + +| Audience | Required Content | +|----------|------------------| +| All staff | Security policy, password management, phishing response | +| New hires | Security orientation (within 1 week) | +| IT staff | Technical security, vulnerability management | +| External parties | Security regulations, pledge education | + +--- + +### A-36. Role-Based Differentiated Training + +| Item | Content | +|------|---------| +| **Assessment Item** | Differentiate training based on position and job characteristics | +| **Related Dept.** | Information Security Department | + +#### Differentiated Training Framework + +| Position/Role | Training Level | Annual Hours | +|---------------|----------------|:------------:| +| Executives | Security governance | 2H | +| Middle managers | Departmental security | 4H | +| General staff | Basic security rules | 4H | +| IT personnel | Technical advanced training | 8H+ | +| Security personnel | Professional training + certification | 16H+ | + +--- + +### A-37. Training Effectiveness Measurement + +| Item | Content | +|------|---------| +| **Assessment Item** | Measure and analyze training effectiveness and reflect in future training | +| **Related Dept.** | Information Security Department | + +#### Effectiveness Measurement Methods + +| Method | Description | +|--------|-------------| +| Pre/Post test | Compare knowledge levels before and after | +| Satisfaction survey | Evaluate content and instructor | +| Behavior observation | Monitor security incident frequency changes | +| Simulation exercises | Measure phishing response rate | + +--- + +### A-38. Security Advisory Sharing + +| Item | Content | +|------|---------| +| **Assessment Item** | Share security advisories from relevant agencies with employees and external parties and provide action guidance | +| **Related Dept.** | Information Security Department | + +#### Key Security Information Sources + +| Agency | URL | Content | +|--------|-----|---------| +| KISA | boho.or.kr | Security advisories, vulnerability information | +| NCSC | ncsc.go.kr | Cyber threat intelligence | +| CVE | cve.mitre.org | Vulnerability database | + +--- + +## 16-2. Authentication and Authorization (A-39 ~ A-42) + +### A-39. Account and Access Policy + +| Item | Content | +|------|---------| +| **Assessment Item** | Define and implement user account and access authorization methods and scope based on job responsibilities | +| **Related Dept.** | Information Security Department, IT Department | + +#### Authorization Principles + +| Principle | Description | +|-----------|-------------| +| Least privilege | Grant only minimum permissions needed for job | +| Separation of duties | Separate conflicting roles (dev/ops) | +| Approval process | Grant permissions after manager approval | +| Regular review | Periodically review permission appropriateness | + +#### Account Request Procedure + +``` +1. Complete account request form (User) + ↓ +2. Department head approval + ↓ +3. Information security officer review + ↓ +4. IT department creates account + ↓ +5. Initial password delivered to user + ↓ +6. Password change at first login +``` + +--- + +### A-40. Secure Authentication Methods + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement secure authentication methods and procedures for internal and external system access | +| **Related Dept.** | Information Security Department, IT Department | + +#### Authentication Methods by Access Type + +| Access Type | Authentication Method | +|-------------|----------------------| +| Regular work | ID/PW + 2FA (OTP) | +| Remote access | VPN + certificate + OTP | +| Critical systems | MFA required | +| Admin access | Certificate + OTP + IP restriction | + +--- + +### A-41. Password Management + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement secure password management procedures and composition rules for system access | +| **Related Dept.** | Information Security Department, IT Department | + +#### Password Policy + +| Item | Requirement | +|------|-------------| +| Minimum length | 8+ characters (admin 10+) | +| Complexity | Combination of letters + numbers + special characters | +| Change frequency | 90 days (admin 60 days) | +| History | Prohibit reuse of last 5 passwords | +| Lockout | Lock for 15 minutes after 5 failed attempts | + +--- + +### A-42. Permission Appropriateness Review + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement review criteria, responsible parties, methods, and frequency for user account and access permission appropriateness | +| **Related Dept.** | Information Security Department, IT Department | + +#### Regular Review Items + +| Item | Frequency | Responsible | +|------|:---------:|-------------| +| Dormant accounts | Monthly | IT Team | +| Permission appropriateness | Quarterly | Security Team | +| Privileged accounts | Monthly | Security Team | +| Terminated employee accounts | Real-time | HR + IT Team | + +--- + +## 16-3. Access Control (A-43 ~ A-55) + +### A-43. Network Security Policy + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement network security policy including access authorization control, remote access management, network segregation | +| **Related Dept.** | Information Security Department, Network Operations | + +--- + +### A-44. Network Segregation + +| Item | Content | +|------|---------| +| **Assessment Item** | Segregate networks based on system purpose and sensitivity, apply access control between zones | +| **Related Dept.** | Information Security Department, Network Operations | + +#### Network Segregation Structure + +``` +[Internet] + ↓ +[DMZ] ─── Web servers, mail servers + ↓ Firewall +[Work Network] ─── Business systems + ↓ Firewall +[DB Zone] ─── Databases + ↓ Firewall +[Management Network] ─── Management systems +``` + +--- + +### A-45. Access Control Rule Approval + +| Item | Content | +|------|---------| +| **Assessment Item** | Access control rules must be set or changed with administrator approval | +| **Related Dept.** | Information Security Department | + +--- + +### A-46. Access Control Policy Review + +| Item | Content | +|------|---------| +| **Assessment Item** | Periodically review access control policy appropriateness | +| **Review Frequency** | At least quarterly | + +--- + +### A-47. Firewall and IDS Deployment + +| Item | Content | +|------|---------| +| **Assessment Item** | Deploy firewalls, intrusion detection systems for secure network | +| **Related Dept.** | Information Security Department, Network Operations | + +--- + +### A-48. Remote Work Policy + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement policy for remote work (telework, incident response) including manager approval, work scope, duration, access log recording/review | +| **Related Dept.** | Information Security Department, IT Department | + +#### Remote Work Procedure + +1. Complete remote work request form +2. Department head + CISO approval +3. VPN account issuance (time-limited) +4. Work execution (log recording) +5. VPN account deactivation after completion +6. Log review + +--- + +### A-49. Internal Management Terminal Restriction + +| Item | Content | +|------|---------| +| **Assessment Item** | When operating systems over network, restrict management to specific internal terminals only | +| **Related Dept.** | Information Security Department, IT Department | + +--- + +### A-50. VPN and Secure Access + +| Item | Content | +|------|---------| +| **Assessment Item** | Apply VPN or other secure access methods when accessing internal systems from external locations | +| **Related Dept.** | Information Security Department, IT Department | + +--- + +### A-51. Network Air-Gap + +| Item | Content | +|------|---------| +| **Assessment Item** | Separate internal network (work network) from internet network | +| **Related Dept.** | Information Security Department, IT Department | + +#### Air-Gap Types + +| Type | Description | Pros/Cons | +|------|-------------|-----------| +| Physical separation | Separate network infrastructure | Security↑, Cost↑ | +| Logical separation | VLAN, VDI utilization | Cost↓, Requires management | + +--- + +### A-52. Data Transfer System + +| Item | Content | +|------|---------| +| **Assessment Item** | Deploy and use secure data transfer system after network segregation | +| **Related Dept.** | Information Security Department, IT Department | + +--- + +### A-53. VoIP Network Separation + +| Item | Content | +|------|---------| +| **Assessment Item** | Separate VoIP network from general IT network | +| **Related Dept.** | Information Security Department, Communications Department | + +--- + +### A-54. External Party Network Separation + +| Item | Content | +|------|---------| +| **Assessment Item** | Separate network for external parties stationed internally | +| **Related Dept.** | Information Security Department, IT Department | + +--- + +### A-55. Wireless Network Security + +| Item | Content | +|------|---------| +| **Assessment Item** | Apply appropriate security measures including security review approval, secure encryption algorithms, and encryption key settings for wireless network use | +| **Related Dept.** | Information Security Department, IT Department | + +#### Wireless Network Security Requirements + +| Item | Requirement | +|------|-------------| +| Encryption | WPA3 or WPA2-Enterprise | +| Authentication | 802.1X + RADIUS | +| SSID | Hidden setting recommended | +| Access control | MAC address filtering | +| Monitoring | Rogue AP detection | + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Training | Annual training plan + differentiated training | High | +| Authentication | Password policy + MFA | Highest | +| Authorization | Least privilege + regular review | Highest | +| Access Control | Network segregation + VPN | Highest | +| Wireless | WPA2/3 + 802.1X | High | + +--- + +*Next Chapter: Chapter 17. Operations Management and Security Management* + + +--- + +# Chapter 17. Operations Management and Security Management + +> Part III. Administrative and Physical Vulnerability Assessment + +--- + +## Overview + +Operations management ensures stable system operation, while security management provides protection from security threats. This chapter covers Operations Management (A-56 ~ A-93) and Security Management (A-94 ~ A-103). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Operations and Security Management Assessment (48) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Operations Management (A-56 ~ A-93) 38 items │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ Wireless │ │ System │ │Mainten- │ │ Log │ │ │ +│ │ │ Network │ │ Deploy/ │ │ ance/ │ │ Mgmt │ │ │ +│ │ │ A-56~57 │ │ Change │ │ Backup │ │ A-73~75 │ │ │ +│ │ │ (2) │ │ A-58~66 │ │ A-67~72 │ │ (3) │ │ │ +│ │ │ │ │ (9) │ │ (6) │ │ │ │ │ +│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ +│ │ │ │ │ │ │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ Data │ │ Security│ │ Mobile │ │ │ +│ │ │ Protect │ │ Sys Ops│ │ Device │ │ │ +│ │ │ A-76~85 │ │ A-86~88 │ │ A-89~93 │ │ │ +│ │ │ (10) │ │ (3) │ │ (5) │ │ │ +│ │ └─────────┘ └─────────┘ └─────────┘ │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Security Management (A-94 ~ A-103) 10 items │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │Patch/EOS│ │ Malware │ │Personal │ │ Vuln/ │ │ │ +│ │ │ Mgmt │ │/Security│ │ Info │ │ Pentest │ │ │ +│ │ │ A-94~95 │ │ A-96~97 │ │ A-100 │ │A-101~103│ │ │ +│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Operations Management | A-56 ~ A-93 | 38 | +| Security Management | A-94 ~ A-103 | 10 | + +--- + +## 17-1. Operations Management (A-56 ~ A-93) + +### Wireless Network Management (A-56 ~ A-57) + +#### A-56. Wireless Network Usage Procedure + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement procedures for wireless network usage application and termination so only authorized personnel can use authorized devices | +| **Related Dept.** | Information Security Department, IT Department | + +#### A-57. Wireless Network Inspection + +| Item | Content | +|------|---------| +| **Assessment Item** | Periodically inspect for unauthorized wireless use, unauthorized APs, and bypass network blocking | +| **Inspection Frequency** | At least monthly | + +#### Wireless AP Inspection Items + +| Item | Content | +|------|---------| +| Authorization | Verify if registered AP | +| Encryption | WPA2/WPA3 applied | +| SSID | Organization name exposure | +| Location | Installation location appropriateness | + +--- + +### System Deployment/Change Management (A-58 ~ A-67) + +#### A-58. Legal Requirements Documentation + +| Item | Content | +|------|---------| +| **Assessment Item** | When deploying, developing, or changing assets and systems, define and document legal, regulatory, and contractual requirements | +| **Related Dept.** | Information Security Department, Legal Department | + +#### A-59. Security Review + +| Item | Content | +|------|---------| +| **Assessment Item** | When deploying, developing, or changing assets and systems, conduct security and compatibility review with security officer confirmation and approval | +| **Related Dept.** | Information Security Department | + +#### Security Review Checklist + +| Item | Verification Content | +|------|----------------------| +| Account management | Default account change, password policy | +| Access control | Unnecessary port blocking, permission settings | +| Encryption | Transmission/storage data encryption | +| Logging | Audit log configuration | +| Patching | Latest patch application | + +--- + +#### A-60. Change Management Procedure + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement system change management procedures | +| **Related Dept.** | Information Security Department, IT Department | + +#### Change Management Process + +``` +1. Submit change request + ↓ +2. Impact analysis (including security impact) + ↓ +3. Change Advisory Board approval + ↓ +4. Develop change plan (including rollback plan) + ↓ +5. Verify in test environment + ↓ +6. Execute change + ↓ +7. Confirm results and document +``` + +--- + +#### A-61. CC Certification and Security Validation + +| Item | Content | +|------|---------| +| **Assessment Item** | Security products must have domestic CC certification or security validation | +| **Related Dept.** | Information Security Department, Procurement Department | + +> **TIP** +> Public organizations must deploy CC-certified or security-validated products. The IT Security Certification Office (www.itscc.kr) provides certified product lists. + +--- + +#### A-63 ~ A-66. Development/Operations Environment Management + +| Item | Assessment Content | +|------|-------------------| +| A-63 | Separate development/test and production environments | +| A-64 | Separate developer and operator access permissions | +| A-65 | Differentiate source code access, store separately | +| A-66 | Analyze security vulnerabilities when changing source code | + +#### Environment Separation Principles + +| Environment | Purpose | Access | +|-------------|---------|--------| +| Development | Code writing, unit testing | Developers | +| Test | Integration/performance testing | Developers, QA | +| Staging | Pre-production verification | Operations, QA | +| Production | Live service | Operations only | + +--- + +### Maintenance, Incident, Backup Management (A-67 ~ A-72) + +#### A-67. Change Procedures + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement formal procedures for changes to major systems and security products | + +--- + +#### A-68. Maintenance Work Management + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement formal work request and execution procedures for maintenance, regularly review work records | +| **Related Dept.** | Information Security Department, IT Department | + +#### Maintenance Procedure + +| Step | Content | +|:----:|---------| +| 1 | Complete work request (content, date, personnel) | +| 2 | Manager approval | +| 3 | Pre-work backup | +| 4 | Execute work (with escort) | +| 5 | Verify work results | +| 6 | Document work record | + +--- + +#### A-69. Incident Management + +| Item | Content | +|------|---------| +| **Assessment Item** | Document system incident management guidelines including detection, recording, analysis, recovery, and reporting | +| **Related Dept.** | IT Department | + +--- + +#### A-70. Backup Procedures + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement backup procedures including targets, frequency, methods, storage location, retention period, offsite storage | +| **Related Dept.** | IT Department | + +#### Backup Policy Example + +| Target | Type | Frequency | Retention | +|--------|------|:---------:|:---------:| +| DB | Full | Weekly | 1 year | +| DB | Incremental | Daily | 1 month | +| System config | Full | Monthly | 1 year | +| Logs | Archive | Daily | 2 years | + +--- + +#### A-71. Recovery Testing + +| Item | Content | +|------|---------| +| **Assessment Item** | Regularly conduct recovery tests to verify backup completeness, accuracy, and procedure appropriateness | +| **Test Frequency** | At least annually | + +--- + +### Log Management (A-73 ~ A-75) + +#### A-73. Access Record Generation and Retention + +| Item | Content | +|------|---------| +| **Assessment Item** | Generate and retain access records (logs) for systems and security systems, implement protective measures against unauthorized viewing and tampering | +| **Retention Period** | Minimum 6 months (1 year for personal information) | + +#### Log Management Requirements + +| Item | Requirement | +|------|-------------| +| Collection | Access time, accessor, IP address, performed action | +| Storage | Separate log server, tamper protection | +| Retention | Minimum 6 months | +| Review | Regular anomaly analysis | + +--- + +#### A-74. Log Review and Monitoring + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement log review and monitoring procedures including review frequency, targets, and methods to detect anomalies such as errors, abuse, and fraud | + +--- + +#### A-75. Log Review Result Reporting + +| Item | Content | +|------|---------| +| **Assessment Item** | Report log and monitoring results to responsible manager at least monthly | +| **Reporting Frequency** | At least monthly | + +--- + +### Data Protection (A-76 ~ A-85) + +#### A-76. Information/Media Disposal + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement disposal methods for information and media | + +#### Storage Media Deletion Methods + +| Media Type | Deletion Method | +|------------|-----------------| +| HDD | Secure erase (DoD 5220.22-M) or physical destruction | +| SSD | Secure Erase or physical destruction | +| Optical media | Physical destruction | +| Documents | Cross-cut shredder (DIN Level 4+) | + +--- + +#### A-77. Security Inspection + +| Item | Content | +|------|---------| +| **Assessment Item** | Conduct periodic and unscheduled security inspections to verify compliance with security regulations | + +--- + +#### A-78 ~ A-81. Confidential Information Management + +| Item | Assessment Content | +|------|-------------------| +| A-78 | Register and manage confidential documents in registry | +| A-79 | Store printed confidential documents in locked cabinets | +| A-80 | Deploy protection measures/systems for sensitive information handling | +| A-81 | Manage network configuration (IP info) as confidential or higher | + +--- + +#### A-82 ~ A-85. Data Protection + +| Item | Assessment Content | +|------|-------------------| +| A-82 | Store critical and general data on separate servers | +| A-83 | Establish posting procedures for website content | +| A-84 | Establish encryption policy including targets, strength, key management | +| A-85 | Establish encryption key recovery procedures and review recovery records | + +--- + +### Security System Operations (A-86 ~ A-93) + +#### A-86. Firewall/IDS Operations + +| Item | Content | +|------|---------| +| **Assessment Item** | Install and operate intrusion prevention and detection tools according to organizational security policy and rules | + +--- + +#### A-88. Unauthorized Device Blocking + +| Item | Content | +|------|---------| +| **Assessment Item** | Block unauthorized PCs, laptops when connected to network and periodically review blocking records | + +--- + +#### A-89 ~ A-93. Mobile Device Management + +| Item | Assessment Content | +|------|-------------------| +| A-89 | Mobile device (laptop, tablet, USB) usage/removal control procedures | +| A-90 | Record removal history and periodic inspection | +| A-91 | Protection measures for sensitive information on smartphones | +| A-92 | Periodic inspection of portable storage media, current status updates | +| A-93 | Countermeasures for mobile device loss | + +--- + +## 17-2. Security Management (A-94 ~ A-103) + +### A-94. Patch Management Policy + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement OS and software patch management policy and procedures based on asset characteristics and criticality | +| **Related Dept.** | Information Security Department, IT Department | + +#### Patch Management Process + +``` +1. Collect patch information (KISA, vendors, etc.) + ↓ +2. Impact analysis + ↓ +3. Apply to test environment + ↓ +4. Develop deployment plan (prioritization) + ↓ +5. Apply to production + ↓ +6. Verify deployment results +``` + +--- + +### A-95. End of Security Support Response + +| Item | Content | +|------|---------| +| **Assessment Item** | When OS or software is no longer supported by vendor, replace product or implement security measures | + +#### EOS/EOL Response Options + +| Option | Description | +|--------|-------------| +| Upgrade | Upgrade to supported version | +| Replace | Replace with new product | +| Isolate | Network isolation + additional security | +| Virtual patching | Block vulnerabilities with WAF, IPS | + +--- + +### A-96. Malware Response + +| Item | Content | +|------|---------| +| **Assessment Item** | Deploy and operate security programs to protect against viruses and other malware | + +--- + +### A-97. Monthly Security Inspection Day + +| Item | Content | +|------|---------| +| **Assessment Item** | Conduct monthly security inspection and remediation activities on focus items | +| **Frequency** | Monthly (third Wednesday of each month) | + +> **TIP** +> Public organizations designate the third Wednesday of each month as "Cyber Security Inspection Day" for PC security checks. + +--- + +### A-100. Personal Information Security Measures + +| Item | Content | +|------|---------| +| **Assessment Item** | Implement measures for personal information security including access authorization management, access control, encryption, access record retention and inspection | + +#### Personal Information Security Requirements + +| Measure | Content | +|---------|---------| +| Access authorization | Grant to minimum personnel only, regular review | +| Access control | IP restriction, unauthorized access blocking | +| Encryption | Encrypt passwords, SSN, etc. in storage/transmission | +| Access records | Retain minimum 1 year, review monthly | + +--- + +### A-101. DDoS Response + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and operate DDoS attack prevention measures | + +#### DDoS Response Options + +| Option | Description | +|--------|-------------| +| DDoS protection service | KISA Cyber Shelter, CDN, etc. | +| Bandwidth capacity | Sufficient network bandwidth | +| Detection system | Abnormal traffic detection | +| Response plan | Attack response procedures | + +--- + +### A-102. Penetration Testing + +| Item | Content | +|------|---------| +| **Assessment Item** | Conduct penetration testing on systems directly or indirectly connected to critical infrastructure and establish security measures | +| **Frequency** | At least annually | + +--- + +### A-103. Vulnerability Assessment + +| Item | Content | +|------|---------| +| **Assessment Item** | Operate periodic security vulnerability review and remediation process for systems and equipment | +| **Frequency** | At least annually (per Article 9, Act on Protection of Information and Communications Infrastructure) | + +--- + +## 17-3. Network Air-Gap Configuration + +### Air-Gap Type Comparison + +| Type | Physical Separation | Logical Separation | +|------|--------------------|--------------------| +| Implementation | Separate network, PCs | VDI, CBC, etc. | +| Cost | High | Relatively low | +| Security | High | Depends on management | +| Usability | Less convenient | Relatively convenient | + +### Air-Gap Architecture Example + +``` +[Internet Network] [Work Network] + │ │ +[Internet PC]──[Data Transfer]──[Work PC] + │ System │ + ↓ ↓ +[Internet Server] [Work Server] +``` + +### Data Transfer System Security + +| Item | Requirement | +|------|-------------| +| Approval | Approval procedure for data transfer | +| Scanning | Malware scanning | +| Logging | Transfer history recording | +| Capacity | Transfer size limits | + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Operations | Change management + backup/recovery | Highest | +| Operations | Log management + regular review | Highest | +| Security | Patch management + malware response | Highest | +| Security | Vulnerability assessment + penetration testing | High | +| Air-Gap | Physical/logical separation + data transfer | Highest | + +--- + +*Next Chapter: Chapter 18. Incident Response and Business Continuity* + + +--- + +# Chapter 18. Incident Response and Business Continuity + +> Part III. Administrative and Physical Vulnerability Assessment + +--- + +## Overview + +Rapid incident response and ensuring business continuity are critical to organizational survival. This chapter covers Incident Response (A-104 ~ A-113) and Business Continuity (A-114 ~ A-118). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Incident Response and Business Continuity (15) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Incident Response (A-104 ~ A-113) 10 items │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌──────────┐ │ │ +│ │ │ Detection │ │ │ +│ │ │(Monitoring)│ │ │ +│ │ └─────┬────┘ │ │ +│ │ ▼ │ │ +│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ +│ │ │ Initial │───▶│ Analysis │───▶│Containmnt│ │ │ +│ │ │ Response │ │(Root Cause)│ │(Isolate) │ │ │ +│ │ └──────────┘ └──────────┘ └─────┬────┘ │ │ +│ │ ▼ │ │ +│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ +│ │ │Prevention│◀───│ Evidence │◀───│ Recovery │ │ │ +│ │ │(Lessons) │ │(Forensics)│ │(Eradicate)│ │ │ +│ │ └──────────┘ └──────────┘ └──────────┘ │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Business Continuity (A-114 ~ A-118) 5 items │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ Disaster│───▶│ RTO/RPO │───▶│ DR │ │ │ +│ │ │ Types │ │ Define │ │ Plan │ │ │ +│ │ └─────────┘ └─────────┘ └────┬────┘ │ │ +│ │ │ │ │ +│ │ ┌────────────────────┼─────────────┐ │ │ +│ │ ▼ ▼ │ │ │ +│ │ ┌─────────┐ ┌─────────┐ │ │ │ +│ │ │Redundancy│ │ DR Drill │ │ │ │ +│ │ │ Setup │ │ Execute │ │ │ │ +│ │ └─────────┘ └─────────┘ │ │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Incident Response | A-104 ~ A-113 | 10 | +| Business Continuity | A-114 ~ A-118 | 5 | + +--- + +## 18-1. Incident Response (A-104 ~ A-113) + +### A-104. Establish Incident Response Framework + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish framework and procedures for preventing security incidents and personal information breaches, and for rapid effective response when incidents occur | +| **Related Dept.** | Information Security Department, All Departments | + +#### Incident Response Framework Components + +| Component | Content | +|-----------|---------| +| Response Team | Computer Emergency Response Team (CERT) composition | +| Response Procedures | Detect→Analyze→Contain→Eradicate→Recover→Post-incident | +| Contact System | Internal/external emergency contact lists | +| Roles/Responsibilities | Define roles for each team member | + +--- + +### A-105. Incident Reporting Procedure + +| Item | Content | +|------|---------| +| **Assessment Item** | Document procedures for rapid security incident reporting and execute prompt reporting | +| **Related Dept.** | Information Security Department, All Departments | + +#### Incident Reporting Chain + +``` +[Incident Discoverer] + ↓ Immediate report +[Department Head] + ↓ Within 1 hour +[Chief Information Security Officer (CISO)] + ↓ If necessary +[CEO/Executive Director] + ↓ If legally required +[KISA/Relevant Agencies] +``` + +--- + +### A-106. External Coordination Framework + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish coordination framework with external agencies and experts for incident response | +| **Related Dept.** | Information Security Department | + +#### External Coordination Agencies + +| Agency | Contact | Role | +|--------|---------|------| +| KISA Internet Incident Response Center | 118 | Incident reporting, technical support | +| Cyber Safety Center (NCSC) | - | Public organization incident response | +| Police Cyber Bureau | 182 | Cybercrime investigation | +| External specialists | - | Forensics, recovery support | + +--- + +### A-107. Emergency Response Team + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish Emergency Response Team that can be activated when cyber crisis level reaches "Caution" or higher, or when damage occurs | +| **Related Dept.** | Information Security Department, Executive Management | + +#### Cyber Crisis Alert Levels + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Cyber Crisis Alert Levels │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────┐ │ +│ │ Severe │ ← Large-scale damage, full emergency response │ +│ │ (Red) │ │ +│ ├─────────┤ │ +│ │ Alert │ ← Damage occurring, emergency response mode │ +│ │(Orange) │ │ +│ ├─────────┤ │ +│ │ Caution │ ← Potential damage, activate emergency team │ +│ │(Yellow) │ │ +│ ├─────────┤ │ +│ │ Interest│ ← Increased threat indicators, enhanced monitoring│ +│ │ (Blue) │ │ +│ ├─────────┤ │ +│ │ Normal │ ← Normal monitoring operations │ +│ │ (Green) │ │ +│ └─────────┘ │ +│ │ +│ ※ Based on NCSC (National Cyber Security Center) criteria │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Level | Situation | Response | +|:-----:|-----------|----------| +| Normal | Normal | Regular monitoring | +| Interest | Increased threats | Enhanced monitoring | +| Caution | Potential damage | Activate emergency team | +| Alert | Damage occurring | Emergency response mode | +| Severe | Large-scale damage | Full emergency response | + +--- + +### A-108. Incident Monitoring + +| Item | Content | +|------|---------| +| **Assessment Item** | Continuously monitor for unauthorized access and security incidents | +| **Related Dept.** | Information Security Department, Security Operations Center | + +--- + +### A-109. Response Training + +| Item | Content | +|------|---------| +| **Assessment Item** | Conduct periodic training to familiarize personnel with incident response procedures and methods | +| **Frequency** | At least annually | + +#### Training Types + +| Type | Content | Frequency | +|------|---------|:---------:| +| Tabletop exercise | Scenario-based discussion | Annually | +| Simulation | Actual response simulation | Annually | +| Phishing drill | Simulated phishing emails | Quarterly | + +--- + +### A-110. Incident Record Management + +| Item | Content | +|------|---------| +| **Assessment Item** | Record and manage security incident analysis results including type, scope, and impact | +| **Related Dept.** | Information Security Department | + +#### Incident Record Items + +| Item | Content | +|------|---------| +| Incident time | Occurrence/detection/closure times | +| Incident type | Malware, hacking, data breach, etc. | +| Impact scope | Systems, data, operations | +| Damage extent | Data loss, service downtime | +| Root cause | Root cause analysis | +| Response actions | Actions taken | +| Lessons learned | Improvement items | + +--- + +### A-111. Remediation Procedures + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish remediation procedures for security vulnerabilities and incidents | +| **Related Dept.** | Information Security Department, IT Department | + +--- + +### A-112. Recurrence Prevention Measures + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement recurrence prevention measures after cyber security incidents | +| **Related Dept.** | Information Security Department | + +#### Recurrence Prevention Process + +``` +1. Root Cause Analysis + ↓ +2. Identify similar risk factors + ↓ +3. Develop prevention measures + ↓ +4. Implement measures + ↓ +5. Verify effectiveness + ↓ +6. Update policies/procedures +``` + +--- + +### A-113. Evidence Collection + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement guidelines for collecting appropriate evidence for incident handling, contract verification, and litigation | +| **Related Dept.** | Information Security Department, Legal Department | + +#### Evidence Collection Principles + +| Principle | Description | +|-----------|-------------| +| Integrity | Prevent evidence tampering (record hash values) | +| Chain of custody | Document collection→storage→analysis process | +| Timeliness | Collect volatile data first | +| Legality | Collect in legally valid manner | + +--- + +## 18-2. Business Continuity (A-114 ~ A-118) + +### A-114. IT Disaster Type Identification + +| Item | Content | +|------|---------| +| **Assessment Item** | Identify IT disaster types that could threaten service continuity, analyze damage extent and business impact, identify critical IT services and systems | +| **Related Dept.** | Information Security Department, IT Department, Business Departments | + +#### IT Disaster Types + +| Type | Examples | +|------|----------| +| Natural disasters | Earthquake, fire, flood | +| Technical failures | Hardware failure, software errors | +| Human errors | Operational mistakes, data deletion | +| Cyber attacks | Ransomware, DDoS, hacking | +| Infrastructure failures | Power, communications, HVAC | + +--- + +### A-115. Recovery Objectives Definition + +| Item | Content | +|------|---------| +| **Assessment Item** | Define recovery time objectives and recovery point objectives based on characteristics of critical IT services and systems | +| **Related Dept.** | Information Security Department, IT Department, Business Departments | + +#### Recovery Objective Metrics + +| Metric | Definition | Example | +|--------|------------|---------| +| RTO | Recovery Time Objective | 4 hours | +| RPO | Recovery Point Objective | 1 hour | +| MTPD | Maximum Tolerable Period of Disruption | 24 hours | + +#### System Recovery Objectives Example + +| System | RTO | RPO | Tier | +|--------|:---:|:---:|:----:| +| Mission-critical systems | 2H | 0 (real-time) | Tier 1 | +| Critical business systems | 4H | 1H | Tier 2 | +| General business systems | 24H | 4H | Tier 3 | + +--- + +### A-116. Disaster Recovery Plan + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement disaster recovery plan including recovery strategy, emergency recovery organization, emergency contact system, and recovery procedures to ensure service and system continuity during disasters | +| **Related Dept.** | Information Security Department, IT Department, Executive Management | + +#### Disaster Recovery Plan (DRP) Components + +| Component | Content | +|-----------|---------| +| Recovery strategy | Hot/Warm/Cold Site | +| Recovery organization | Roles, responsibilities, contacts | +| Recovery procedures | Step-by-step recovery procedures | +| Resource inventory | Required resources (HW, SW, personnel) | +| Test plan | Annual drill plan | + +--- + +### A-117. System Redundancy + +| Item | Content | +|------|---------| +| **Assessment Item** | Implement redundancy for high security importance systems | +| **Related Dept.** | IT Department | + +#### Redundancy Types + +| Type | Description | RTO | +|------|-------------|:---:| +| Active-Active | Both systems running simultaneously | ~0 | +| Active-Standby | Automatic failover to standby | Minutes | +| Cold Standby | Manual failover to standby | Hours | + +--- + +### A-118. Continuity Review and Training + +| Item | Content | +|------|---------| +| **Assessment Item** | Continuously review and manage business continuity through drills, reflect organizational changes | +| **Frequency** | At least annually | + +#### DR Drill Types + +| Type | Description | Frequency | +|------|-------------|:---------:| +| Walkthrough | Procedure review | Semi-annually | +| Simulation | Virtual scenario | Annually | +| Failover test | Actual failover execution | Annually | + +--- + +## 18-3. Incident Reporting Procedures + +### Legal Reporting Requirements + +| Regulation | Subject | Report To | Deadline | +|------------|---------|-----------|----------| +| Act on Protection of CII | Critical infrastructure | KISA, relevant agency | Without delay | +| Personal Information Protection Act | Personal information processors | PIPC | Within 72 hours | +| Information and Communications Network Act | IT service providers | KISA | Within 24 hours | + +### Incident Report Form + +```markdown +Security Incident Report + +1. Reporting Organization Information + - Organization name: + - Contact person: + - Phone number: + +2. Incident Overview + - Occurrence time: + - Discovery time: + - Incident type: [ ]Malware [ ]Hacking [ ]DDoS [ ]Data breach [ ]Other + - Affected systems: + - Damage extent: + +3. Incident Details + - How discovered: + - Cause (suspected): + - Damage details: + +4. Response Status + - Initial response: + - Future plans: + +5. Attachments + - Relevant logs + - Screenshots + +Date: YYYY/MM/DD +Prepared by: (Signature) +``` + +### KISA Reporting Methods + +| Method | Contact | +|--------|---------| +| Phone | 118 (Internet Incident Response Center) | +| Web | boho.or.kr | +| Email | cert@krcert.or.kr | + +--- + +## Summary + +| Domain | Key Assessment Items | Priority | +|--------|---------------------|:--------:| +| Incident Response | Response framework + reporting procedures | Highest | +| Incident Response | External coordination + emergency team | High | +| Incident Response | Evidence collection + recurrence prevention | High | +| Business Continuity | RTO/RPO definition | Highest | +| Business Continuity | DR plan + training | Highest | + +--- + +*Next Chapter: Chapter 19. Physical Security* + + +--- + +# Chapter 19. Physical Security + +> Part III. Administrative and Physical Vulnerability Assessment + +--- + +## Overview + +Physical security protects information assets from physical threats. No matter how strong technical security is, all security can be compromised if physical access is possible. This chapter covers Physical Security assessment items (B-1 ~ B-9). + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Physical Security Assessment (9) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────┐ │ +│ │ External Boundary │ │ +│ │ (Building Perimeter) │ │ +│ └──────────┬──────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────┐ │ +│ │ General Zone │ │ +│ │ (Lobby, Meeting rooms - │ │ +│ │ General access) │ │ +│ │ B-5: Visitor control │ │ +│ └──────────────────┬──────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────┐ │ +│ │ Restricted Zone │ │ +│ │ (Offices, Dev rooms - │ │ +│ │ Authorized access) │ │ +│ │ B-2: Access control │ B-3: Records│ │ +│ │ B-9: Document sec. │ B-6: Removal│ │ +│ └──────────────────┬──────────────────┘ │ +│ │ │ +│ ▼ │ +│ ╔═════════════════════════════════════╗ │ +│ ║ Controlled Zone ║ │ +│ ║ (Data center, Server room - ║ │ +│ ║ Strict control) ║ │ +│ ║ ║ │ +│ ║ B-1: Protected area B-4: CCTV ║ │ +│ ║ B-7: Environmental B-8: Cable ║ │ +│ ║ ║ │ +│ ║ ┌─────────────────────────┐ ║ │ +│ ║ │ Information Assets │ ║ │ +│ ║ │ (Servers, Network, DB) │ ║ │ +│ ║ └─────────────────────────┘ ║ │ +│ ╚═════════════════════════════════════╝ │ +│ │ +│ ※ Higher security levels toward center │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| Domain | Items | Count | +|--------|-------|:-----:| +| Physical Security | B-1 ~ B-9 | 9 | + +--- + +## 19-1. Physical Security Assessment (B-1 ~ B-9) + +### B-1. Protected Area Designation + +| Item | Content | +|------|---------| +| **Assessment Item** | Designate and manage locations requiring physical protection (data center, communications room, etc.) as protected areas | +| **Related Dept.** | Information Security Department, Facilities Management | + +#### Protected Area Classification + +| Zone | Definition | Examples | +|------|------------|----------| +| Controlled | Unauthorized access prohibited | Data center, server room | +| Restricted | Authorized personnel only | Offices, development room | +| General | General access allowed | Lobby, meeting rooms | + +#### Protected Area Marking + +- Zone signage installation +- Floor color/line differentiation +- Security level indication + +--- + +### B-2. Access Control Procedures + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish access control procedures for protected areas and maintain access records | +| **Related Dept.** | Information Security Department, Facilities Management | + +#### Access Control Methods + +| Method | Description | Security Level | +|--------|-------------|:--------------:| +| Key card | RFID/smart card | Medium | +| Biometrics | Fingerprint, iris, facial | High | +| PIN + Card | Dual authentication | High | +| Key | Physical key | Low | + +#### Access Record Management + +| Item | Content | +|------|---------| +| Record items | Date/time, accessor, purpose, escort | +| Retention period | Minimum 1 year | +| Review frequency | Monthly | + +--- + +### B-3. Access Record Retention + +| Item | Content | +|------|---------| +| **Assessment Item** | Retain and manage access records for protected areas (data center, etc.) for minimum 1 year | +| **Retention Period** | Minimum 1 year | + +--- + +### B-4. CCTV Installation and Operation + +| Item | Content | +|------|---------| +| **Assessment Item** | Install and operate CCTV for monitoring access to protected areas | +| **Related Dept.** | Facilities Management, Information Security Department | + +#### CCTV Installation Requirements + +| Item | Requirement | +|------|-------------| +| Location | Entrances, corridors, data center interior | +| Recording quality | Face-identifiable resolution | +| Retention period | Minimum 30 days | +| Monitoring | Real-time monitoring or regular review | + +> **WARNING** +> CCTV operation must comply with privacy laws. Notice signs and purpose disclosure are required. + +--- + +### B-5. Visitor Access Control + +| Item | Content | +|------|---------| +| **Assessment Item** | Control access for external visitors (including maintenance vendors) to protected areas | +| **Related Dept.** | Facilities Management, Information Security Department | + +#### Visitor Access Procedure + +``` +1. Pre-visit request (Requester → Security Team) + ↓ +2. Visit approval + ↓ +3. Identity verification on visit day + ↓ +4. Visitor badge issuance (photo recommended) + ↓ +5. Security regulation briefing/signature + ↓ +6. Escort by responsible party + ↓ +7. Badge return upon departure + ↓ +8. Belongings inspection (if necessary) +``` + +--- + +### B-6. Asset Removal Control + +| Item | Content | +|------|---------| +| **Assessment Item** | Control removal of information systems and protected assets | +| **Related Dept.** | Information Security Department, Facilities Management | + +#### Asset Removal Control Targets + +| Category | Targets | +|----------|---------| +| Incoming | External equipment, storage media, laptops | +| Outgoing | Servers, storage media, documents | + +#### Removal Procedure + +1. Complete removal request form +2. Manager/security officer approval +3. Data deletion verification (for media) +4. Create removal record +5. Inspection upon return + +--- + +### B-7. Environmental Protection Equipment + +| Item | Content | +|------|---------| +| **Assessment Item** | Operate and manage equipment to protect information systems in protected areas from natural disasters and environmental risks | +| **Related Dept.** | Facilities Management | + +#### Environmental Protection Equipment + +| Equipment | Purpose | Inspection Frequency | +|-----------|---------|:--------------------:| +| HVAC | Temperature/humidity control | Daily | +| Fire suppression | Fire response | Monthly | +| UPS | Power outage protection | Monthly | +| Generator | Extended outage protection | Quarterly | +| Water leak detection | Flood prevention | Daily | +| Grounding | Lightning/static protection | Annually | + +#### Data Center Environmental Standards + +| Item | Standard | +|------|----------| +| Temperature | 18~27°C | +| Humidity | 40~60% | +| Dust | Class 100,000 or below | + +--- + +### B-8. Cable Security + +| Item | Content | +|------|---------| +| **Assessment Item** | Safely install and manage cables in protected areas | +| **Related Dept.** | Facilities Management, IT Department | + +#### Cable Security Requirements + +| Item | Requirement | +|------|-------------| +| Routing | Under-floor/ceiling routing (minimize exposure) | +| Identification | Cable labeling | +| Separation | Separate power/data/communications cables | +| Protection | Use cable trays, ducts | + +--- + +### B-9. Document Security + +| Item | Content | +|------|---------| +| **Assessment Item** | Establish and implement secure storage and disposal procedures for important documents | +| **Related Dept.** | Information Security Department, All Departments | + +#### Document Security Requirements + +| Item | Requirement | +|------|-------------| +| Storage | Store in locked cabinets | +| Disposal | Use cross-cut shredder (DIN Level 4+) | +| Copying | Approval procedure for copying | +| Removal | Approval and logging for removal | + +--- + +## 19-2. Protected Area Management + +### Protected Area Registry Form + +| Zone Name | Location | Level | Manager | Access Method | Notes | +|-----------|----------|:-----:|---------|---------------|-------| +| Data Center | 1F Bldg A | Controlled | Kim | Card+Biometric | 24hr CCTV | +| Comm Room | 2F Bldg B | Controlled | Park | Card+PIN | 24hr CCTV | +| Dev Room | 3F Bldg C | Restricted | Lee | Card | - | + +### Access Log Form + +| Date | Visitor | Affiliation | Purpose | Escort | In | Out | Notes | +|------|---------|-------------|---------|--------|:--:|:---:|-------| +| 3/15 | Hong | Company A | Server maintenance | Kim | 09:00 | 12:00 | | +| 3/15 | Lee | Company B | Network inspection | Park | 14:00 | 16:00 | | + +### Physical Security Inspection Checklist + +| Inspection Item | Content | Good | Vulnerable | +|-----------------|---------|:----:|:----------:| +| Access control | Card/biometric operation | ☐ | ☐ | +| CCTV | Recording status, angle appropriateness | ☐ | ☐ | +| Access records | Record retention | ☐ | ☐ | +| Locking devices | Cabinet lock status | ☐ | ☐ | +| Environmental equipment | Temperature/humidity, fire suppression status | ☐ | ☐ | +| Cabling | Cable organization | ☐ | ☐ | +| Visitor control | Badge issuance/collection | ☐ | ☐ | + +--- + +## Physical Security Related Regulations + +### Act on Protection of Information and Communications Infrastructure + +- Article 10 (Protection Guidelines): Includes physical protection measures + +### Personal Information Protection Act + +- Article 29 (Security Measures): Physical access blocking + +### National Information Security Basic Guidelines + +- Article 42 (Physical Protected Area Designation) +- Article 43 (Access Control) + +--- + +## Summary + +| Item | Key Assessment Content | Priority | +|------|------------------------|:--------:| +| B-1 | Protected area designation | Highest | +| B-2 | Access control procedures + records | Highest | +| B-4 | CCTV installation and operation | High | +| B-5 | Visitor access control | Highest | +| B-6 | Asset removal control | High | +| B-7 | Environmental protection equipment | High | + +--- + +## Part III Complete + +Content covered in Part III (Administrative and Physical Vulnerability Assessment): + +- Chapter 13: Information Security Policy and Organization +- Chapter 14: Asset Management and Risk Management +- Chapter 15: Human Resource Security and External Party Security +- Chapter 16: Training, Authentication, and Access Control +- Chapter 17: Operations Management and Security Management +- Chapter 18: Incident Response and Business Continuity +- Chapter 19: Physical Security + +--- + +*Next Chapter: Chapter 20. Government Project Environment Application (Part IV Start)* + + +--- + +# Chapter 20. Government Project Environment Application + +> Part IV. Practical Application + +--- + +## Overview + +Government and public sector projects have different security requirements from private sector projects. This chapter covers public organization security requirements, information security budget guidelines, and pre-certified product utilization methods. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Government Project Security Requirements │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ Legal Basis │ │ +│ │(Info Comm Infra │ │ +│ │ Protection Act, │ │ +│ │ e-Government Act)│ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌────────────────┼────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ Security │ │ Certified │ │ Security │ │ +│ │ Budget │ │ Products │ │ Review │ │ +│ │ (5~10%) │ │(CC Cert.) │ │(e-Gov Act │ │ +│ └─────┬─────┘ └─────┬─────┘ │ Art.56) │ │ +│ │ │ └─────┬─────┘ │ +│ └────────────────┼─────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Public SI Project Security Lifecycle │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │ +│ │ │ Plan │─▶│Analyze│─▶│Design│─▶│Develop│─▶│ Test │─▶Deploy│ │ +│ │ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ │ │ +│ │ │ │ │ │ │ │ │ +│ │ Security Risk Security Secure Vuln. │ │ +│ │ Require- Analysis Architec- Coding Assessment/ │ │ +│ │ ments PIA ture Pentest │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 20-1. Public Organization Security Requirements + +### Key Legal Basis + +| Law/Guideline | Key Content | +|---------------|-------------| +| Act on Protection of Information and Communications Infrastructure | Critical infrastructure protection | +| e-Government Act | Electronic government security | +| National Information Security Basic Guidelines | Public organization security standards | +| Personal Information Protection Act | Personal information protection | +| Cloud Computing Act | Public cloud security | + +### Security Requirements by Organization Type + +| Classification | Organization Examples | Security Level | +|----------------|----------------------|:--------------:| +| National agencies | Central administrative agencies | Highest | +| Local governments | Provincial/city offices | High | +| Public organizations | Public corporations | High | +| Educational institutions | Universities, education offices | Medium-High | + +### Public SI Project Security Checklist + +| Phase | Security Activities | +|-------|---------------------| +| Planning | Security requirements definition, budget allocation | +| Analysis | Security risk analysis, privacy impact assessment | +| Design | Security architecture, access control design | +| Development | Secure coding, security configuration | +| Testing | Security testing, vulnerability assessment | +| Deployment | Security review, handover | + +--- + +## 20-2. Information Security Budget Guidelines + +### Information Security Budget Guidelines + +Information security budget ratio within public organization IT project budgets: + +| Category | Recommended Ratio | Notes | +|----------|:-----------------:|-------| +| General IT projects | 5% or more | Baseline | +| Personal information systems | 7% or more | Recommended | +| Critical information infrastructure | 10% or more | Required | + +### Information Security Budget Items + +| Category | Detail Items | +|----------|--------------| +| Personnel | Security staff costs, training | +| Systems | Security equipment, licenses | +| Services | Security monitoring, vulnerability assessment | +| Consulting | ISMS certification, security consulting | + +### Budget Calculation Example + +``` +[IT Project Budget: 1 Billion KRW] + +Information Security Budget (10%): 100 Million KRW +├── Security Systems: 50M KRW +│ ├── Firewall: 20M KRW +│ ├── WAF: 15M KRW +│ └── Access Control: 15M KRW +├── Security Services: 30M KRW +│ ├── Vulnerability Assessment: 10M KRW +│ ├── Penetration Testing: 10M KRW +│ └── Security Training: 10M KRW +└── Security Consulting: 20M KRW + └── ISMS Certification Consulting: 20M KRW +``` + +--- + +## 20-3. Pre-Certified Product Utilization + +### CC Certification (Common Criteria) + +Information security product certification based on international Common Criteria + +| Level | Description | Application | +|:-----:|-------------|-------------| +| EAL1 | Functional testing | - | +| EAL2 | Structural testing | General | +| EAL3 | Methodical testing | General | +| EAL4 | Methodical design/test | Public | +| EAL5 | Semi-formal design/test | Defense | +| EAL6~7 | Formal design | Defense/Classified | + +### Public Organization Product Deployment Standards + +| Product Type | Required Certification | +|--------------|----------------------| +| Firewall | CC Certification | +| IDS (Intrusion Detection System) | CC Certification | +| IPS (Intrusion Prevention System) | CC Certification | +| VPN | CC Certification | +| ESM (Enterprise Security Management) | CC Certification | +| Database Access Control | CC Certification | +| PC Security | CC Certification | + +### CC Certified Product Verification + +1. **IT Security Certification Office** (www.itscc.kr) + - Certified product list lookup + - Certificate validity verification + +2. **Verification Items** + - Certificate validity period + - Certification scope + - Evaluation assurance level + +### Security Conformance Validation + +Validation for national cryptographic products + +| Category | Details | +|----------|---------| +| Validation Agency | National Security Research Institute | +| Target Products | Cryptographic modules, network encryption devices, etc. | +| Verification Method | Security conformance validated product list lookup | + +--- + +## Public Project Security Requirements Example + +### RFP Security Section + +```markdown +## Security Requirements + +### 1. General Requirements +- Compliance with information security regulations +- Deployment of CC-certified products for public use +- Minimum 10% information security budget allocation + +### 2. Technical Requirements + +#### 2.1 Network Security +- Internal/external network segregation +- Firewall deployment (CC-certified) +- IDS deployment (CC-certified) + +#### 2.2 System Security +- Server access control solution deployment +- System vulnerability assessment +- Security patch management system + +#### 2.3 Data Security +- Encryption of sensitive data +- DB access control solution (CC-certified) +- Personal information masking + +#### 2.4 Application Security +- Secure coding implementation +- Source code security vulnerability assessment +- Web application firewall deployment + +### 3. Administrative Requirements +- Security policy/guideline establishment +- Security training implementation +- Incident response plan establishment + +### 4. Verification and Acceptance Requirements +- Vulnerability analysis and assessment +- Penetration testing +- Security review approval +``` + +--- + +## Public Project Security Assessment Schedule Example + +| Phase | Activity | Timing | Deliverables | +|-------|----------|--------|--------------| +| Analysis | Security requirements analysis | Analysis phase | Security requirements specification | +| Design | Security architecture design | Design phase | Security design document | +| Development | Secure coding | During development | Source code review results | +| Testing | Vulnerability assessment | Testing phase | Vulnerability assessment report | +| Testing | Penetration testing | Testing phase | Penetration testing report | +| Deployment | Security review | Pre-deployment | Security review results | + +--- + +## Tips for Vibe Coders + +### Essential Checks for Government Projects + +1. **Secure Budget Allocation** + - Request security budget specification at RFP stage + - Secure minimum 5~10% + +2. **Early CC Certification Review** + - Confirm product list during design phase + - Verify certification validity period + +3. **Secure Coding** + - Follow Ministry of Interior secure coding guide + - Use source code review tools + +4. **Vulnerability Assessment Schedule** + - Allocate sufficient assessment time after development + - Consider remediation period + +> **TIP** +> Even with vibe coding for rapid development, allocate sufficient time for security assessments. When using AI code generation, include OWASP Top 10 and CWE Top 25 considerations in prompts to reduce security vulnerabilities. + +--- + +## Summary + +| Item | Key Content | +|------|-------------| +| Legal Requirements | Act on Protection of Information Infrastructure, e-Government Act | +| Budget Standards | 5~10% of IT budget | +| Product Certification | CC certification required (public organizations) | +| Development Security | Secure coding + vulnerability assessment | + +--- + +*Next Chapter: Chapter 21. Public Procurement Market Response* + + +--- + +# Chapter 21. Public Procurement Market Response + +> Part IV. Practical Application + +--- + +## Overview + +To enter the public procurement market, security requirements must be met. This chapter covers procurement agency security requirements, proposal writing guide, and security review response methods. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Public Procurement Market Entry │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Preparation Phase │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ Certif- │ │ Track │ │Personnel│ │ │ +│ │ │ ication │ │ Record │ │ Secure │ │ │ +│ │ │ │ │ │ │ │ │ │ +│ │ │• ISMS │ │• Public │ │• CISA │ │ │ +│ │ │• ISO │ │ project│ │• CISSP │ │ │ +│ │ │ 27001 │ │ exp. │ │• OSCP │ │ │ +│ │ │• GS Cert│ │ │ │ │ │ │ +│ │ │• CC Cert│ │ │ │ │ │ │ +│ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ +│ └───────┼──────────────┼──────────────┼────────────────────┘ │ +│ └──────────────┼──────────────┘ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Bidding Phase │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ e-Procurement ──▶ Proposal ──▶ Technical ──▶ Award/ │ │ +│ │ Portal Preparation Evaluation Contract │ │ +│ │ (g2b.go.kr) (Security pts) │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ Execution and Review Phase │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ Development ──▶ Security Review ──▶ Review Pass ──▶Deploy│ │ +│ │ (Secure coding) Application (Remediation) │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 21-1. Procurement Agency Security Requirements + +### Government e-Procurement (www.g2b.go.kr) + +Public procurement electronic bidding system + +| Category | Content | +|----------|---------| +| Procurement methods | Open competition, limited competition, negotiation | +| Contract types | Goods, services, construction | +| Registration requirements | Business registration, procurement registration | + +### IT Project Security Requirements + +#### Mandatory Security Review + +| Target | Criteria | +|--------|----------| +| Mandatory | Over 100M KRW or critical infrastructure connected | +| Recommended | IT projects over 10M KRW | + +#### Security Certification Requirements + +| Certification | Required Situation | +|---------------|-------------------| +| ISMS | Large-scale information system operation | +| ISMS-P | Personal information processing systems | +| ISO 27001 | International certification required | +| CC Certification | Security product deployment | + +### Procurement Product Security Requirements + +#### Software Products + +| Item | Requirement | +|------|-------------| +| Secure Coding | Ministry of Interior guide compliance | +| Vulnerability Assessment | KISA or professional agency assessment | +| Source Code | Escrow or submission | + +#### Information Security Products + +| Item | Requirement | +|------|-------------| +| CC Certification | Domestic CC certification required | +| Technical Support | Domestic support capability | +| Maintenance | Maintenance plan submission | + +--- + +## 21-2. Proposal Writing Guide + +### Proposal Security Section Structure + +```markdown +## Security Plan + +### 1. Development Security +#### 1.1 Secure Coding +- Applied Guide: Ministry of Interior Secure Coding Guide +- Assessment Tool: [Tool name] +- Assessment Frequency: Per development phase + +#### 1.2 Source Code Review +- Review Method: Static analysis + dynamic analysis +- Review Agency: [Agency name/self] +- Remediation Plan: 100% remediation of findings + +### 2. System Security +#### 2.1 Access Control +- Network Segregation: DMZ, work network, DB network +- Firewall Policy: Least privilege principle +- Access Logs: Retain 6+ months + +#### 2.2 Authentication/Authorization +- Authentication Method: ID/PW + OTP +- Authorization Management: RBAC-based +- Privileged Accounts: Separate management + +### 3. Data Security +#### 3.1 Encryption +- In-transit: TLS 1.2 or higher +- At-rest: AES-256 +- Key Management: HSM or separate management + +#### 3.2 Personal Information +- Collection minimization +- Masking +- Disposal procedures + +### 4. Operational Security +#### 4.1 Security Monitoring +- 24x7 monitoring +- Anomaly detection/response +- Monthly reporting + +#### 4.2 Vulnerability Management +- Regular assessment: Annually +- Patch management: Monthly +``` + +### Proposal Differentiation Points + +| Area | Differentiation Points | +|------|----------------------| +| Certification | ISMS/ISO 27001 holder | +| Experience | Similar public project track record | +| Tools | Proprietary security assessment tools | +| Personnel | Information security professionals | +| Methodology | Security development methodology | + +### Proposal Evaluation Security Scoring + +| Evaluation Item | Score Example | +|-----------------|:-------------:| +| Technical (including security) | 50-60 pts | +| Price | 30-40 pts | +| Other (track record, etc.) | 10-20 pts | + +> **TIP** +> Security items often comprise 10-20% of technical evaluation. Emphasize specific methodologies and experience. + +--- + +## 21-3. Security Review Response + +### What is Security Review? + +A procedure to review whether security requirements are met when deploying or developing information systems in administrative agencies + +| Item | Content | +|------|---------| +| Legal Basis | e-Government Act Article 56 | +| Target | Public organization information systems | +| Review Agency | NIS (national/public) or self-review | + +### Security Review Procedure + +``` +1. Review Application + - Submit project overview, system architecture + ↓ +2. Document Review + - Security requirement compliance check + ↓ +3. On-site Review (if necessary) + - Verify actual deployment environment + ↓ +4. Review Result Notification + - Pass / Remediation Required / Fail + ↓ +5. Remediation (if necessary) + - Address findings and re-review +``` + +### Security Review Preparation Checklist + +| Area | Check Items | Check | +|------|-------------|:-----:| +| **Network** | Network segregation applied | ☐ | +| | Firewall policy appropriateness | ☐ | +| | Encrypted communication applied | ☐ | +| **System** | Security settings applied | ☐ | +| | CC-certified products deployed | ☐ | +| | Access control applied | ☐ | +| **Application** | Secure coding applied | ☐ | +| | Vulnerability assessment completed | ☐ | +| | Input validation | ☐ | +| **Data** | Encryption applied | ☐ | +| | Personal information protection | ☐ | +| | Log management | ☐ | +| **Administrative** | Security policy established | ☐ | +| | Operational procedures established | ☐ | +| | Training plan | ☐ | + +### Common Security Review Findings + +| Area | Frequent Findings | +|------|-------------------| +| Network | Unnecessary ports open, inadequate segregation | +| System | Default accounts unchanged, patches not applied | +| Application | SQL Injection, XSS vulnerabilities | +| Data | Unencrypted transmission/storage | +| Administrative | Logs not retained, procedures not established | + +### Security Review Timeline Example + +| Phase | Duration | Activities | +|-------|:--------:|------------| +| Preparation | 2 weeks | Document preparation, self-assessment | +| Application | 1 day | Submit review application | +| Document review | 2-4 weeks | Review in progress | +| Remediation | 1-2 weeks | Address findings | +| Completion | 1 week | Final review pass | + +--- + +## Public Procurement Entry Preparation + +### Pre-Certification Acquisition + +| Certification | Benefits | Duration | +|---------------|----------|:--------:| +| ISMS | Bidding bonus points, credibility | 6 months-1 year | +| ISO 27001 | International certification | 3-6 months | +| GS Certification | Software quality | 2-3 months | +| CC Certification | Security products required | 6 months-1 year | + +### Track Record Building + +| Method | Description | +|--------|-------------| +| Direct execution | Execute without subcontracting | +| Joint venture | Joint execution with experienced company | +| Solo track record | Start with small projects | + +### Professional Personnel + +| Qualification | Field | +|---------------|-------| +| Information Security Engineer | Overall security | +| CISA/CISSP | Audit/management | +| OSCP | Penetration testing | + +--- + +## Summary + +| Item | Key Content | +|------|-------------| +| Procurement Requirements | CC certification, secure coding, vulnerability assessment | +| Proposal | Detailed security plan, methodology presentation | +| Security Review | Advance preparation, checklist utilization | +| Preparation | ISMS certification, track record, personnel | + +--- + +*Next Chapter: Chapter 22. Automation Tool Development* + + +--- + +# Chapter 22. Automation Tool Development + +> Part IV. Practical Application + +--- + +## Overview + +Automating vulnerability assessments significantly improves efficiency. This chapter covers assessment script architecture, result collection and reporting, and CI/CD pipeline integration. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ KESE-KIT Automation Architecture │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Target Systems │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ Unix/ │ │ Windows │ │ Network │ │ Database│ │ │ +│ │ │ Linux │ │ Server │ │ Device │ │ (DBMS) │ │ │ +│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ +│ └───────┼────────────┼────────────┼────────────┼────────┘ │ +│ │ │ │ │ │ +│ └────────────┴────────────┴────────────┘ │ +│ │ │ +│ ▼ Execute assessment scripts │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Assessment Engine (Scripts) │ │ +│ │ ┌───────────────┐ ┌────────────────┐ │ │ +│ │ │ Item Defs │ │ Target Defs │ │ │ +│ │ │ (items.yaml) │ │ (targets.yaml) │ │ │ +│ │ └───────────────┘ └────────────────┘ │ │ +│ └─────────────────────────┬───────────────────────────────┘ │ +│ │ │ +│ ▼ JSON results transmission │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Collector Server │ │ +│ │ REST API (Flask/FastAPI) │ │ +│ │ ┌───────────────────────────────────────────────────┐ │ │ +│ │ │ /api/v1/results │ /api/v1/summary │ │ │ +│ │ └───────────────────────────────────────────────────┘ │ │ +│ └─────────────────────────┬───────────────────────────────┘ │ +│ │ │ +│ ┌────────────────┼────────────────┐ │ +│ ▼ ▼ ▼ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ Reporting │ │ Web │ │ CI/CD │ │ +│ │ (HTML/PDF)│ │ Dashboard │ │Integration│ │ +│ └───────────┘ └───────────┘ └───────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 22-1. Assessment Script Architecture + +### Overall Structure + +``` +KESE-KIT/ +├── scripts/ +│ ├── unix/ # Unix/Linux assessment scripts +│ │ ├── account.sh # Account management +│ │ ├── file.sh # File/directory +│ │ ├── service.sh # Service management +│ │ └── run_all.sh # Execute all +│ ├── windows/ # Windows assessment scripts +│ │ ├── account.ps1 +│ │ ├── service.ps1 +│ │ └── run_all.ps1 +│ ├── network/ # Network device assessment +│ └── database/ # Database assessment +├── collector/ # Result collection module +│ ├── agent.py # Agent +│ └── server.py # Collection server +├── reporter/ # Reporting module +│ ├── templates/ # Report templates +│ └── generator.py # Report generator +├── config/ # Configuration files +│ ├── items.yaml # Assessment item definitions +│ └── targets.yaml # Assessment target definitions +└── web/ # Web dashboard + └── dashboard/ +``` + +### Assessment Item Definition (YAML) + +```yaml +# config/items.yaml +unix: + - id: U-01 + name: Restrict root remote login + category: Account Management + severity: High + check: + type: grep + target: /etc/ssh/sshd_config + pattern: "^PermitRootLogin" + expected: "no" + remediation: "Set PermitRootLogin no in sshd_config" + + - id: U-02 + name: Password complexity settings + category: Account Management + severity: High + check: + type: file_exists + target: /etc/security/pwquality.conf + remediation: "Configure pwquality.conf file" + +windows: + - id: W-01 + name: Rename Administrator account + category: Account Management + severity: High + check: + type: powershell + script: "(Get-LocalUser | Where-Object {$_.SID -like '*-500'}).Name" + expected_not: "Administrator" + remediation: "Rename Administrator account to different name" +``` + +### Assessment Target Definition (YAML) + +```yaml +# config/targets.yaml +groups: + - name: Web Servers + targets: + - hostname: web01 + ip: 192.168.1.10 + os: linux + credentials: + type: ssh_key + user: admin + key_file: ~/.ssh/id_rsa + - hostname: web02 + ip: 192.168.1.11 + os: linux + + - name: DB Servers + targets: + - hostname: db01 + ip: 192.168.1.20 + os: linux + db_type: mysql +``` + +--- + +## 22-2. Integrated Assessment Scripts + +### Unix/Linux Integrated Script + +```bash +#!/bin/bash +#=============================================== +# KESE KIT - Unix/Linux Integrated Assessment Script +# Version: 1.0 +#=============================================== + +# Configuration +REPORT_DIR="/var/log/kese_kit" +REPORT_FILE="$REPORT_DIR/$(hostname)_$(date +%Y%m%d).json" +RESULT=() + +# Create log directory +mkdir -p "$REPORT_DIR" + +# Assessment function +check_item() { + local id="$1" + local name="$2" + local result="$3" # GOOD, VULN, N/A + local detail="$4" + + RESULT+=("{\"id\":\"$id\",\"name\":\"$name\",\"result\":\"$result\",\"detail\":\"$detail\"}") + + if [ "$result" == "GOOD" ]; then + echo -e "[\e[32mGOOD\e[0m] $id: $name" + elif [ "$result" == "VULN" ]; then + echo -e "[\e[31mVULN\e[0m] $id: $name - $detail" + else + echo -e "[\e[33mN/A\e[0m] $id: $name" + fi +} + +# U-01: Restrict root remote login +check_u01() { + local id="U-01" + local name="Restrict root remote login" + + if grep -q "^PermitRootLogin no" /etc/ssh/sshd_config 2>/dev/null; then + check_item "$id" "$name" "GOOD" "" + else + check_item "$id" "$name" "VULN" "PermitRootLogin is not set to no" + fi +} + +# U-02: Password complexity +check_u02() { + local id="U-02" + local name="Password complexity settings" + + if [ -f /etc/security/pwquality.conf ]; then + check_item "$id" "$name" "GOOD" "" + else + check_item "$id" "$name" "VULN" "pwquality.conf does not exist" + fi +} + +# U-04: Password file protection +check_u04() { + local id="U-04" + local name="Password file protection" + + if [ ! -r /etc/shadow ] || [ "$(stat -c %a /etc/shadow)" -le "400" ]; then + check_item "$id" "$name" "GOOD" "" + else + check_item "$id" "$name" "VULN" "/etc/shadow has excessive permissions" + fi +} + +# Main execution +echo "=============================================" +echo "KESE KIT - Unix/Linux Vulnerability Assessment" +echo "Host: $(hostname)" +echo "Date: $(date)" +echo "=============================================" + +check_u01 +check_u02 +check_u04 +# ... additional assessment items + +# Save JSON results +echo "[" > "$REPORT_FILE" +echo "${RESULT[*]}" | sed 's/} {/},\n{/g' >> "$REPORT_FILE" +echo "]" >> "$REPORT_FILE" + +echo "" +echo "Results saved: $REPORT_FILE" +``` + +### Windows Integrated Script + +```powershell +#=============================================== +# KESE KIT - Windows Integrated Assessment Script +# Version: 1.0 +#=============================================== + +param( + [string]$ReportPath = "C:\KESE_KIT\Reports" +) + +# Configuration +$ReportFile = Join-Path $ReportPath "$($env:COMPUTERNAME)_$(Get-Date -Format 'yyyyMMdd').json" +$Results = @() + +# Create directory +New-Item -ItemType Directory -Path $ReportPath -Force | Out-Null + +# Assessment function +function Test-Item { + param( + [string]$Id, + [string]$Name, + [string]$Result, + [string]$Detail = "" + ) + + $script:Results += @{ + id = $Id + name = $Name + result = $Result + detail = $Detail + } + + $color = switch ($Result) { + "GOOD" { "Green" } + "VULN" { "Red" } + default { "Yellow" } + } + + Write-Host "[$Result] $Id`: $Name" -ForegroundColor $color + if ($Detail) { Write-Host " -> $Detail" -ForegroundColor Gray } +} + +# W-01: Administrator account rename +function Test-W01 { + $id = "W-01" + $name = "Rename Administrator account" + + $admin = Get-LocalUser | Where-Object { $_.SID -like "*-500" } + if ($admin.Name -ne "Administrator") { + Test-Item -Id $id -Name $name -Result "GOOD" + } else { + Test-Item -Id $id -Name $name -Result "VULN" -Detail "Using default account name" + } +} + +# W-02: Guest account disabled +function Test-W02 { + $id = "W-02" + $name = "Disable Guest account" + + $guest = Get-LocalUser -Name "Guest" -ErrorAction SilentlyContinue + if (-not $guest.Enabled) { + Test-Item -Id $id -Name $name -Result "GOOD" + } else { + Test-Item -Id $id -Name $name -Result "VULN" -Detail "Guest account is enabled" + } +} + +# W-03: Password complexity +function Test-W03 { + $id = "W-03" + $name = "Password complexity settings" + + $policy = Get-Content C:\Windows\System32\GroupPolicy\Machine\Microsoft\Windows` NT\SecEdit\GptTmpl.inf -ErrorAction SilentlyContinue + if ($policy -match "PasswordComplexity\s*=\s*1") { + Test-Item -Id $id -Name $name -Result "GOOD" + } else { + # Check with secedit + secedit /export /cfg "$env:TEMP\secpol.cfg" | Out-Null + $cfg = Get-Content "$env:TEMP\secpol.cfg" + if ($cfg -match "PasswordComplexity\s*=\s*1") { + Test-Item -Id $id -Name $name -Result "GOOD" + } else { + Test-Item -Id $id -Name $name -Result "VULN" -Detail "Complexity not configured" + } + } +} + +# Main execution +Write-Host "=============================================" -ForegroundColor Cyan +Write-Host "KESE KIT - Windows Vulnerability Assessment" -ForegroundColor Cyan +Write-Host "Host: $($env:COMPUTERNAME)" +Write-Host "Date: $(Get-Date)" +Write-Host "=============================================" -ForegroundColor Cyan + +Test-W01 +Test-W02 +Test-W03 +# ... additional assessment items + +# Save JSON results +$Results | ConvertTo-Json | Out-File $ReportFile -Encoding UTF8 + +Write-Host "" +Write-Host "Results saved: $ReportFile" -ForegroundColor Green +``` + +--- + +## 22-3. Result Collection and Reporting + +### Result Collection Server (Python) + +```python +""" +KESE KIT - Result Collection Server +Flask-based REST API +""" +from flask import Flask, request, jsonify +from datetime import datetime +import json +import os + +app = Flask(__name__) +RESULT_DIR = "./results" + +@app.route('/api/v1/results', methods=['POST']) +def receive_result(): + """Receive assessment results""" + data = request.json + + hostname = data.get('hostname', 'unknown') + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + filename = f"{hostname}_{timestamp}.json" + + os.makedirs(RESULT_DIR, exist_ok=True) + with open(os.path.join(RESULT_DIR, filename), 'w') as f: + json.dump(data, f, ensure_ascii=False, indent=2) + + return jsonify({'status': 'success', 'filename': filename}) + +@app.route('/api/v1/results', methods=['GET']) +def get_results(): + """Get assessment result list""" + files = os.listdir(RESULT_DIR) if os.path.exists(RESULT_DIR) else [] + return jsonify({'results': files}) + +@app.route('/api/v1/results/', methods=['GET']) +def get_result(filename): + """Get specific assessment result""" + filepath = os.path.join(RESULT_DIR, filename) + if os.path.exists(filepath): + with open(filepath, 'r') as f: + return jsonify(json.load(f)) + return jsonify({'error': 'Not found'}), 404 + +@app.route('/api/v1/summary', methods=['GET']) +def get_summary(): + """Get overall status summary""" + if not os.path.exists(RESULT_DIR): + return jsonify({'total': 0, 'good': 0, 'vuln': 0}) + + total, good, vuln = 0, 0, 0 + for filename in os.listdir(RESULT_DIR): + with open(os.path.join(RESULT_DIR, filename), 'r') as f: + data = json.load(f) + for item in data.get('results', []): + total += 1 + if item.get('result') == 'GOOD': + good += 1 + elif item.get('result') == 'VULN': + vuln += 1 + + return jsonify({ + 'total': total, + 'good': good, + 'vuln': vuln, + 'compliance_rate': round(good / total * 100, 1) if total > 0 else 0 + }) + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000) +``` + +### Report Generator (Python) + +```python +""" +KESE KIT - Report Generator +Generate HTML/PDF reports from vulnerability assessment results +""" +from jinja2 import Template +import json +from datetime import datetime + +HTML_TEMPLATE = """ + + + + + Vulnerability Assessment Report + + + +

Critical Information Infrastructure Vulnerability Assessment Report

+ +
+

Assessment Overview

+

Assessment Date: {{ date }}

+

Target: {{ hostname }}

+

Total Items: {{ total }}

+

Good: {{ good }} / + Vulnerable: {{ vuln }}

+

Compliance Rate: {{ compliance_rate }}%

+
+ +

Detailed Results

+ + + + + + + + {% for item in results %} + + + + + + + {% endfor %} +
IDAssessment ItemResultDetails
{{ item.id }}{{ item.name }} + {{ 'Good' if item.result == 'GOOD' else 'Vulnerable' }} + {{ item.detail }}
+ + +""" + +def generate_report(result_file, output_file): + """Generate HTML report from assessment results""" + with open(result_file, 'r') as f: + data = json.load(f) + + results = data.get('results', []) + good = sum(1 for r in results if r.get('result') == 'GOOD') + vuln = sum(1 for r in results if r.get('result') == 'VULN') + total = len(results) + + template = Template(HTML_TEMPLATE) + html = template.render( + date=datetime.now().strftime('%Y-%m-%d %H:%M'), + hostname=data.get('hostname', 'Unknown'), + total=total, + good=good, + vuln=vuln, + compliance_rate=round(good / total * 100, 1) if total > 0 else 0, + results=results + ) + + with open(output_file, 'w', encoding='utf-8') as f: + f.write(html) + + print(f"Report generated: {output_file}") + +if __name__ == '__main__': + generate_report('result.json', 'report.html') +``` + +--- + +## 22-4. CI/CD Pipeline Integration + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ CI/CD Security Assessment Pipeline │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌──────────┐ │ +│ │ Code │ │ +│ │ Push │ │ +│ └────┬─────┘ │ +│ │ │ +│ ▼ │ +│ ╔══════════════════════════════════════════════════════╗ │ +│ ║ CI/CD Pipeline (Automated) ║ │ +│ ╠══════════════════════════════════════════════════════╣ │ +│ ║ ║ │ +│ ║ ┌─────────┐ ┌─────────┐ ┌─────────┐ ║ │ +│ ║ │ SAST │ │ Depend- │ │KESE-KIT │ ║ │ +│ ║ │(Bandit) │ │ ency │ │ Check │ ║ │ +│ ║ │ │ │(Safety) │ │ │ ║ │ +│ ║ └────┬────┘ └────┬────┘ └────┬────┘ ║ │ +│ ║ │ │ │ ║ │ +│ ║ └────────────┴────────────┘ ║ │ +│ ║ │ ║ │ +│ ║ ▼ ║ │ +│ ║ ┌───────────────┐ ║ │ +│ ║ │ Report Gen. │ ║ │ +│ ║ │ (HTML/JSON) │ ║ │ +│ ║ └───────┬───────┘ ║ │ +│ ║ │ ║ │ +│ ╚════════════════════╪════════════════════════════════╝ │ +│ │ │ +│ ┌───────────────┼───────────────┐ │ +│ ▼ ▼ ▼ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ Artifact│ │ Alert │ │ Report │ │ +│ │ Storage │ │ (Email) │ │ Publish │ │ +│ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### GitHub Actions Integration + +```yaml +# .github/workflows/security-check.yml +name: Security Vulnerability Check + +on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main ] + schedule: + - cron: '0 0 * * 1' # Every Monday + +jobs: + security-check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + pip install -r requirements.txt + pip install bandit safety + + - name: Run SAST (Bandit) + run: | + bandit -r . -f json -o bandit-report.json || true + + - name: Run dependency check (Safety) + run: | + safety check --json > safety-report.json || true + + - name: Run KESE-KIT checks + run: | + ./scripts/unix/run_all.sh + + - name: Upload results + uses: actions/upload-artifact@v3 + with: + name: security-reports + path: | + bandit-report.json + safety-report.json + /var/log/kese_kit/*.json + + - name: Check for critical vulnerabilities + run: | + python scripts/check_critical.py +``` + +### Jenkins Pipeline + +```groovy +// Jenkinsfile +pipeline { + agent any + + stages { + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Security Scan') { + parallel { + stage('SAST') { + steps { + sh 'bandit -r . -f json -o bandit-report.json || true' + } + } + + stage('Dependency Check') { + steps { + sh 'safety check --json > safety-report.json || true' + } + } + + stage('KESE-KIT') { + steps { + sh './scripts/unix/run_all.sh' + } + } + } + } + + stage('Generate Report') { + steps { + sh 'python reporter/generator.py' + } + } + + stage('Archive') { + steps { + archiveArtifacts artifacts: '*.json,*.html', fingerprint: true + } + } + } + + post { + always { + publishHTML([ + reportDir: '.', + reportFiles: 'report.html', + reportName: 'Security Report' + ]) + } + failure { + emailext( + subject: "Security Check Failed: ${env.JOB_NAME}", + body: "Check the results: ${env.BUILD_URL}", + to: 'security@company.com' + ) + } + } +} +``` + +--- + +## Summary + +| Item | Key Content | +|------|-------------| +| Architecture | Modular script structure | +| Item Definition | YAML-based item/target definitions | +| Result Collection | REST API-based collection server | +| Reporting | Automated HTML/PDF generation | +| CI/CD | GitHub Actions, Jenkins integration | + +--- + +## Part IV Complete + +Content covered in Part IV (Practical Application): + +- Chapter 20: Government Project Environment Application +- Chapter 21: Public Procurement Market Response +- Chapter 22: Automation Tool Development + +--- + +*Next: Appendix* + + +--- diff --git "a/authorkit/drafts/KESE-KIT-KO/KESE-KIT-\354\231\204\354\240\204\355\214\220.md" "b/authorkit/drafts/KESE-KIT-KO/KESE-KIT-\354\231\204\354\240\204\355\214\220.md" new file mode 100644 index 0000000..10b5f9e --- /dev/null +++ "b/authorkit/drafts/KESE-KIT-KO/KESE-KIT-\354\231\204\354\240\204\355\214\220.md" @@ -0,0 +1,10603 @@ +# KESE KIT + +## 주요정보통신기반시설 취약점 분석·평가 실무 가이드 + +**Korea Enhanced Security Evaluation - KISA Infrastructure Toolkit** + +--- + +# 목차 + +- **[부록](#부록)** +- **[1장. 개요](#1장-개요)** + - [1-1. KESE KIT란?](#1-1-kese-kit란) + - [1-2. 주요정보통신기반시설(CII) 이해](#1-2-주요정보통신기반시설cii-이해) + - [1-3. 취약점 분석·평가의 필요성](#1-3-취약점-분석평가의-필요성) + - [1-4. 이 책의 구성과 활용 방법](#1-4-이-책의-구성과-활용-방법) + - [1-5. 대상 독자별 학습 경로](#1-5-대상-독자별-학습-경로) +- **[2장. 법적 기반과 프레임워크](#2장-법적-기반과-프레임워크)** + - [2-1. 정보통신기반보호법 개요](#2-1-정보통신기반보호법-개요) + - [2-2. 취약점 분석·평가 의무 (제9조)](#2-2-취약점-분석평가-의무-제9조) + - [2-3. KISA의 역할과 평가 체계](#2-3-kisa의-역할과-평가-체계) + - [2-4. 평가 항목 분류 체계 (관리/물리/기술)](#2-4-평가-항목-분류-체계-관리물리기술) + - [2-5. 판정 기준 (양호/부분이행/취약)](#2-5-판정-기준-양호부분이행취약) +- **[3장. Unix/Linux 서버 점검](#3장-unixlinux-서버-점검)** + - [3-1. 계정 관리 (U-01 ~ U-13)](#3-1-계정-관리-u-01-u-13) + - [3-2. 파일 및 디렉터리 관리 (U-14 ~ U-33)](#3-2-파일-및-디렉터리-관리-u-14-u-33) + - [3-3. 서비스 관리 (U-34 ~ U-63)](#3-3-서비스-관리-u-34-u-63) + - [3-4. 패치 관리 (U-64)](#3-4-패치-관리-u-64) + - [3-5. 로그 관리 (U-65 ~ U-68)](#3-5-로그-관리-u-65-u-68) + - [3-6. 자동화 스크립트 작성](#3-6-자동화-스크립트-작성) +- **[4장. Windows 서버 점검](#4장-windows-서버-점검)** + - [4-1. 계정 관리 (W-01 ~ W-14)](#4-1-계정-관리-w-01-w-14) + - [4-2. 서비스 관리 (W-15 ~ W-39)](#4-2-서비스-관리-w-15-w-39) + - [4-3. 패치 관리 (W-40 ~ W-41)](#4-3-패치-관리-w-40-w-41) + - [4-4. 로그 관리 (W-42 ~ W-47)](#4-4-로그-관리-w-42-w-47) + - [4-5. 보안 관리 (W-48 ~ W-73)](#4-5-보안-관리-w-48-w-73) + - [4-6. PowerShell 점검 스크립트](#4-6-powershell-점검-스크립트) +- **[5장. 웹 서비스 점검](#5장-웹-서비스-점검)** + - [5-1. 계정 관리 (WS-01 ~ WS-05)](#5-1-계정-관리-ws-01-ws-05) + - [5-2. 서비스 관리 (WS-06 ~ WS-30)](#5-2-서비스-관리-ws-06-ws-30) + - [5-3. 보안 설정 (WS-31 ~ WS-43)](#5-3-보안-설정-ws-31-ws-43) + - [5-4. 패치 및 로그 관리 (WS-44 ~ WS-47)](#5-4-패치-및-로그-관리-ws-44-ws-47) +- **[6장. 웹 애플리케이션 점검](#6장-웹-애플리케이션-점검)** + - [6-1. 입력값 검증 (SQL Injection, XSS, CSRF)](#6-1-입력값-검증-sql-injection-xss-csrf) + - [6-2. 인증 및 세션 관리](#6-2-인증-및-세션-관리) + - [6-3. 접근제어 및 권한 검증](#6-3-접근제어-및-권한-검증) + - [6-4. 정보노출 방지](#6-4-정보노출-방지) + - [6-5. 바이브코딩 환경에서의 보안](#6-5-바이브코딩-환경에서의-보안) +- **[7장. 데이터베이스(DBMS) 점검](#7장-데이터베이스dbms-점검)** + - [7-1. 계정 관리 (D-01 ~ D-16)](#7-1-계정-관리-d-01-d-16) + - [7-2. 접근 관리 (D-17 ~ D-23)](#7-2-접근-관리-d-17-d-23) + - [7-3. 옵션 관리 (D-24 ~ D-30)](#7-3-옵션-관리-d-24-d-30) + - [7-4. 패치 관리 (D-31 ~ D-32)](#7-4-패치-관리-d-31-d-32) + - [7-5. DB별 점검 스크립트](#7-5-db별-점검-스크립트) +- **[8장. 네트워크 장비 점검](#8장-네트워크-장비-점검)** + - [8-1. 계정 관리 (N-01 ~ N-10)](#8-1-계정-관리-n-01-n-10) + - [8-2. 접근 관리 (N-11 ~ N-18)](#8-2-접근-관리-n-11-n-18) + - [8-3. 패치 관리 (N-19)](#8-3-패치-관리-n-19) + - [8-4. 로그 관리 (N-20 ~ N-24)](#8-4-로그-관리-n-20-n-24) + - [8-5. 기능 관리 (N-25 ~ N-40)](#8-5-기능-관리-n-25-n-40) +- **[9장. 보안 장비 점검](#9장-보안-장비-점검)** + - [9-1. 방화벽 점검 (S-01 ~ S-19)](#9-1-방화벽-점검-s-01-s-19) + - [9-2. IDS/IPS 점검](#9-2-idsips-점검) + - [9-3. WAF 점검](#9-3-waf-점검) +- **[10장. 가상화 및 클라우드 점검](#10장-가상화-및-클라우드-점검)** + - [10-1. 가상화 장비 (V-01 ~ V-36)](#10-1-가상화-장비-v-01-v-36) + - [10-2. 클라우드 환경 (CL-01 ~ CL-14)](#10-2-클라우드-환경-cl-01-cl-14) + - [10-3. 컨테이너 보안 (Docker, K8s)](#10-3-컨테이너-보안-docker-k8s) +- **[11장. PC 및 단말기 점검](#11장-pc-및-단말기-점검)** + - [11-1. 계정 관리 (PC-01 ~ PC-04)](#11-1-계정-관리-pc-01-pc-04) + - [11-2. 접근 관리 (PC-05 ~ PC-11)](#11-2-접근-관리-pc-05-pc-11) + - [11-3. 패치 관리 (PC-12 ~ PC-13)](#11-3-패치-관리-pc-12-pc-13) + - [11-4. 보안 관리 (PC-14 ~ PC-18)](#11-4-보안-관리-pc-14-pc-18) +- **[12장. 제어시스템(OT) 점검](#12장-제어시스템ot-점검)** + - [12-1. 제어시스템 특수성](#12-1-제어시스템-특수성) + - [12-2. 계정/서비스 관리 (C-01 ~ C-14)](#12-2-계정서비스-관리-c-01-c-14) + - [12-3. 네트워크/물리적 접근통제 (C-19 ~ C-27)](#12-3-네트워크물리적-접근통제-c-19-c-27) + - [12-4. 보안위협 탐지 및 복구 (C-28 ~ C-38)](#12-4-보안위협-탐지-및-복구-c-28-c-38) +- **[13장. 정보보호 정책 및 조직](#13장-정보보호-정책-및-조직)** + - [13-1. 정보보호 정책 (A-1 ~ A-7)](#13-1-정보보호-정책-a-1-a-7) + - [13-2. 정보보호 조직 (A-8 ~ A-9)](#13-2-정보보호-조직-a-8-a-9) + - [13-3. 정책/지침 문서 템플릿](#13-3-정책지침-문서-템플릿) +- **[14장. 자산관리 및 위험관리](#14장-자산관리-및-위험관리)** + - [14-1. 자산분류 (A-10 ~ A-14)](#14-1-자산분류-a-10-a-14) + - [14-2. 위험관리 (A-15 ~ A-17)](#14-2-위험관리-a-15-a-17) + - [14-3. 감사 (A-18 ~ A-20)](#14-3-감사-a-18-a-20) + - [14-4. 자산 목록 관리 자동화](#14-4-자산-목록-관리-자동화) +- **[15장. 인적보안 및 외부자보안](#15장-인적보안-및-외부자보안)** + - [15-1. 인적보안 (A-21 ~ A-26)](#15-1-인적보안-a-21-a-26) + - [15-2. 외부자보안 (A-27 ~ A-33)](#15-2-외부자보안-a-27-a-33) + - [15-3. 보안 서약서 템플릿](#15-3-보안-서약서-템플릿) +- **[16장. 교육·인증·접근통제](#16장-교육인증접근통제)** + - [16-1. 교육 및 훈련 (A-34 ~ A-38)](#16-1-교육-및-훈련-a-34-a-38) + - [16-2. 인증 및 권한관리 (A-39 ~ A-42)](#16-2-인증-및-권한관리-a-39-a-42) + - [16-3. 접근통제 (A-43 ~ A-55)](#16-3-접근통제-a-43-a-55) +- **[17장. 운영관리 및 보안관리](#17장-운영관리-및-보안관리)** + - [17-1. 운영관리 (A-56 ~ A-93)](#17-1-운영관리-a-56-a-93) + - [17-2. 보안관리 (A-94 ~ A-103)](#17-2-보안관리-a-94-a-103) + - [17-3. 망분리 환경 구성](#17-3-망분리-환경-구성) +- **[18장. 사고대응 및 업무연속성](#18장-사고대응-및-업무연속성)** + - [18-1. 사고대응 (A-104 ~ A-113)](#18-1-사고대응-a-104-a-113) + - [18-2. 업무연속성 (A-114 ~ A-118)](#18-2-업무연속성-a-114-a-118) + - [18-3. 침해사고 신고 절차](#18-3-침해사고-신고-절차) +- **[19장. 물리보안](#19장-물리보안)** + - [19-1. 물리보안 점검 (B-1 ~ B-9)](#19-1-물리보안-점검-b-1-b-9) + - [19-2. 보호구역 관리](#19-2-보호구역-관리) +- **[20장. 정부과제 환경 적용](#20장-정부과제-환경-적용)** + - [20-1. 공공기관 보안 요구사항](#20-1-공공기관-보안-요구사항) + - [20-2. 정보보호 예산 기준](#20-2-정보보호-예산-기준) + - [20-3. 사전인증 제품 활용](#20-3-사전인증-제품-활용) +- **[21장. 공공조달시장 대응](#21장-공공조달시장-대응)** + - [21-1. 조달청 보안 요건](#21-1-조달청-보안-요건) + - [21-2. 제안서 작성 가이드](#21-2-제안서-작성-가이드) + - [21-3. 보안성 검토 대응](#21-3-보안성-검토-대응) +- **[22장. 자동화 도구 구축](#22장-자동화-도구-구축)** + - [22-1. 점검 스크립트 아키텍처](#22-1-점검-스크립트-아키텍처) + - [22-2. 통합 점검 스크립트](#22-2-통합-점검-스크립트) + - [22-3. 결과 수집 및 리포팅](#22-3-결과-수집-및-리포팅) + - [22-4. CI/CD 파이프라인 연동](#22-4-cicd-파이프라인-연동) +- **[23장. AI 보안 개요](#23장-ai-보안-개요)** + - [23-1. AI 보안 위협 유형](#23-1-ai-보안-위협-유형) + - [23-2. AI 보안 안내서의 적용범위](#23-2-ai-보안-안내서의-적용범위) + - [23-3. AI 서비스 생명주기와 보안 프레임워크](#23-3-ai-서비스-생명주기와-보안-프레임워크) +- **[24장. AI 개발자를 위한 보안 점검](#24장-ai-개발자를-위한-보안-점검)** + - [24-1. 계획 및 설계 — 거버넌스, 위험관리](#24-1-계획-및-설계-거버넌스-위험관리) + - [24-2. 데이터 수집 및 준비 — 수집/전처리, 무결성, 라벨링](#24-2-데이터-수집-및-준비-수집전처리-무결성-라벨링) + - [24-3. 모델 개발 — 학습환경, 알고리즘, 오픈소스, 개발환경](#24-3-모델-개발-학습환경-알고리즘-오픈소스-개발환경) + - [24-4. 모델 배포 — 배포보안, API보안](#24-4-모델-배포-배포보안-api보안) + - [24-5. 모니터링 및 유지보수 — 운영보안, 사후관리](#24-5-모니터링-및-유지보수-운영보안-사후관리) + - [24-6. 파기 — 파기 시 보안](#24-6-파기-파기-시-보안) +- **[25장. AI 서비스 제공자를 위한 보안 점검](#25장-ai-서비스-제공자를-위한-보안-점검)** + - [25-1. 서비스 제공자 보안 프레임워크](#25-1-서비스-제공자-보안-프레임워크) + - [25-2. Generative AI 서비스 보안 요구사항](#25-2-generative-ai-서비스-보안-요구사항) + - [25-3. Predictive AI 서비스 보안 요구사항](#25-3-predictive-ai-서비스-보안-요구사항) + - [25-4. 사용자 피드백 및 개선 과정 보안](#25-4-사용자-피드백-및-개선-과정-보안) +- **[26장. AI 이용자를 위한 보안 수칙](#26장-ai-이용자를-위한-보안-수칙)** + - [26-1. AI 이용자 대상 보안위협 사례](#26-1-ai-이용자-대상-보안위협-사례) + - [26-2. AI 서비스 이용 시 보안 수칙](#26-2-ai-서비스-이용-시-보안-수칙) + - [26-3. 바이브코딩 환경에서의 AI 보안](#26-3-바이브코딩-환경에서의-ai-보안) + +--- + +# 부록 + +--- + +## 부록 A. 체크리스트 템플릿 + +### A-1. 기술적 취약점 체크리스트 (Unix/Linux) + +| ID | 점검 항목 | 양호 | 취약 | N/A | 비고 | +|:--:|----------|:----:|:----:|:---:|------| +| U-01 | root 계정 원격접속 제한 | ☐ | ☐ | ☐ | | +| U-02 | 패스워드 복잡성 설정 | ☐ | ☐ | ☐ | | +| U-03 | 계정 잠금 임계값 설정 | ☐ | ☐ | ☐ | | +| U-04 | 패스워드 파일 보호 | ☐ | ☐ | ☐ | | +| U-05 | root 이외의 UID가 '0' 금지 | ☐ | ☐ | ☐ | | +| U-06 | root 계정 su 제한 | ☐ | ☐ | ☐ | | +| U-07 | 패스워드 최소 길이 설정 | ☐ | ☐ | ☐ | | +| U-08 | 패스워드 최대 사용기간 설정 | ☐ | ☐ | ☐ | | +| U-09 | 패스워드 최소 사용기간 설정 | ☐ | ☐ | ☐ | | +| U-10 | 불필요한 계정 제거 | ☐ | ☐ | ☐ | | + +### A-2. 기술적 취약점 체크리스트 (Windows) + +| ID | 점검 항목 | 양호 | 취약 | N/A | 비고 | +|:--:|----------|:----:|:----:|:---:|------| +| W-01 | Administrator 계정 이름 변경 | ☐ | ☐ | ☐ | | +| W-02 | Guest 계정 비활성화 | ☐ | ☐ | ☐ | | +| W-03 | 불필요한 계정 제거 | ☐ | ☐ | ☐ | | +| W-04 | 계정 잠금 임계값 설정 | ☐ | ☐ | ☐ | | +| W-05 | 패스워드 복잡성 설정 | ☐ | ☐ | ☐ | | +| W-06 | 패스워드 최소 사용기간 설정 | ☐ | ☐ | ☐ | | +| W-07 | 마지막 사용자 이름 표시 안 함 | ☐ | ☐ | ☐ | | +| W-08 | 로컬 보안 정책 설정 | ☐ | ☐ | ☐ | | + +### A-3. 관리적 취약점 체크리스트 + +| ID | 점검 항목 | 양호 | 부분 | 취약 | 비고 | +|:--:|----------|:----:|:----:|:----:|------| +| A-1 | 정보보호 정책 수립 및 승인 | ☐ | ☐ | ☐ | | +| A-2 | 시행문서 수립 | ☐ | ☐ | ☐ | | +| A-3 | 정책 공개 및 배포 | ☐ | ☐ | ☐ | | +| A-4 | 정책 타당성 검토 | ☐ | ☐ | ☐ | | +| A-5 | 이해관계자 검토 | ☐ | ☐ | ☐ | | +| A-6 | 연간 정보보호 업무 계획 | ☐ | ☐ | ☐ | | +| A-7 | 중장기 계획 수립 | ☐ | ☐ | ☐ | | +| A-8 | 정보보호 전담 조직 | ☐ | ☐ | ☐ | | +| A-9 | 정보보호위원회 | ☐ | ☐ | ☐ | | + +### A-4. 물리적 취약점 체크리스트 + +| ID | 점검 항목 | 양호 | 취약 | 비고 | +|:--:|----------|:----:|:----:|------| +| B-1 | 보호구역 지정 | ☐ | ☐ | | +| B-2 | 출입통제 절차 | ☐ | ☐ | | +| B-3 | 출입 기록 보관 | ☐ | ☐ | | +| B-4 | CCTV 설치·운영 | ☐ | ☐ | | +| B-5 | 외부인 출입 통제 | ☐ | ☐ | | +| B-6 | 반출입 통제 | ☐ | ☐ | | +| B-7 | 환경 보호 설비 | ☐ | ☐ | | +| B-8 | 케이블 보안 | ☐ | ☐ | | +| B-9 | 문서 보안 | ☐ | ☐ | | + +--- + +## 부록 B. 서식 모음 + +### B-1. 침해사고 신고서 + +``` +정보통신 침해사고 신고서 + +1. 신고기관 정보 + - 기관명: + - 주소: + - 담당자: + - 연락처: + - 이메일: + +2. 사고 개요 + - 발생 일시: 20 년 월 일 시 분 + - 발견 일시: 20 년 월 일 시 분 + - 사고 유형: [ ]악성코드 [ ]해킹 [ ]DDoS [ ]정보유출 [ ]기타( ) + +3. 피해 현황 + - 피해 시스템: + - 피해 규모: + - 피해 내용: + +4. 사고 경위 + - 발견 경위: + - 추정 원인: + - 조치 현황: + +5. 향후 대책 + - 추가 조치 계획: + - 재발 방지 대책: + +작성일: 20 년 월 일 +작성자: (서명) +``` + +### B-2. 계정등록 신청서 + +``` +계정등록(변경/삭제) 신청서 + +□ 등록 □ 변경 □ 삭제 + +1. 신청자 정보 + - 성명: + - 소속: + - 연락처: + +2. 신청 내용 + - 대상 시스템: + - 요청 계정: + - 요청 권한: [ ]일반 [ ]관리자 [ ]기타( ) + - 사용 목적: + - 사용 기간: 20 년 월 일 ~ 20 년 월 일 + +3. 승인 + - 부서장: (서명) 일자: + - 보안담당: (서명) 일자: + - IT담당: (서명) 일자: + +4. 처리 결과 + - 처리일: + - 처리자: + - 처리내용: +``` + +### B-3. 보호구역 관리대장 + +| 구역명 | 위치 | 등급 | 관리자 | 출입방법 | 설치장비 | 비고 | +|--------|------|:----:|--------|----------|----------|------| +| 전산실 | | 통제 | | | | | +| 통신실 | | 통제 | | | | | +| 서버실 | | 통제 | | | | | + +### B-4. 정보보호 업무 계획서 + +``` +20XX년 정보보호 업무 계획서 + +1. 추진 목표 + - + - + +2. 추진 과제 + +| 과제명 | 내용 | 일정 | 예산 | 담당 | +|--------|------|------|------|------| +| | | | | | + +3. 세부 일정 + +| 월 | 주요 활동 | +|:--:|----------| +| 1월 | | +| 2월 | | +... + +4. 소요 예산 + +| 항목 | 금액 | 비고 | +|------|------|------| +| 합계 | | | + +5. 기대 효과 + - + - + +작성일: 20 년 월 일 +작성자: (서명) +승인자: (서명) +``` + +--- + +## 부록 C. 용어집 + +| 용어 | 영문 | 설명 | +|------|------|------| +| 주요정보통신기반시설 | Critical Information Infrastructure | 정보통신기반보호법에 따른 보호 대상 시설 | +| 취약점 분석·평가 | Vulnerability Assessment | 시스템의 보안 취약점을 식별하고 평가하는 활동 | +| KISA | Korea Internet & Security Agency | 한국인터넷진흥원 | +| CC인증 | Common Criteria | 국제공통평가기준에 따른 정보보호제품 인증 | +| ISMS | Information Security Management System | 정보보호 관리체계 | +| ISMS-P | ISMS + Personal Information | 정보보호 및 개인정보보호 관리체계 | +| CISO | Chief Information Security Officer | 정보보호최고책임자 | +| RTO | Recovery Time Objective | 복구 목표 시간 | +| RPO | Recovery Point Objective | 복구 목표 시점 | +| DMZ | DeMilitarized Zone | 비무장지대 (네트워크) | +| SIEM | Security Information and Event Management | 보안정보 및 이벤트 관리 | +| WAF | Web Application Firewall | 웹 방화벽 | +| IDS | Intrusion Detection System | 침입탐지시스템 | +| IPS | Intrusion Prevention System | 침입방지시스템 | +| DDoS | Distributed Denial of Service | 분산 서비스 거부 공격 | +| APT | Advanced Persistent Threat | 지능형 지속 위협 | +| CVE | Common Vulnerabilities and Exposures | 공개된 보안 취약점 식별자 | +| CWE | Common Weakness Enumeration | 공통 약점 목록 | +| OWASP | Open Web Application Security Project | 웹 애플리케이션 보안 프로젝트 | + +--- + +## 부록 D. 참고 법령 및 가이드 + +### D-1. 법령 + +| 법령 | 주요 내용 | +|------|----------| +| 정보통신기반보호법 | 주요정보통신기반시설 보호 | +| 개인정보보호법 | 개인정보 처리 및 보호 | +| 정보통신망법 | 정보통신서비스 보안 | +| 전자정부법 | 전자정부 서비스 보안 | +| 전자금융거래법 | 전자금융 보안 | + +### D-2. KISA 가이드 + +| 가이드명 | 발행처 | URL | +|----------|--------|-----| +| 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 | KISA | www.kisa.or.kr | +| 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 | KISA | www.kisa.or.kr | +| 소프트웨어 개발보안 가이드 | 행정안전부/KISA | www.kisa.or.kr | +| 클라우드 보안 가이드 | KISA | www.kisa.or.kr | + +### D-3. 국제 표준 및 프레임워크 + +| 표준/프레임워크 | 설명 | +|----------------|------| +| ISO 27001 | 정보보안경영시스템 국제표준 | +| ISO 27002 | 정보보안 통제 지침 | +| NIST CSF | 사이버보안 프레임워크 | +| CIS Controls | 보안 통제 항목 | +| OWASP Top 10 | 웹 애플리케이션 보안 위협 | +| MITRE ATT&CK | 공격 기법 분류 체계 | + +--- + +## 부록 E. KESE KIT 점검 항목 요약 + +### 기술적 취약점 (약 420개) + +| 분야 | 항목 코드 | 항목 수 | +|------|:--------:|:------:| +| Unix/Linux 서버 | U-01 ~ U-68 | 68 | +| Windows 서버 | W-01 ~ W-73 | 73 | +| 웹 서비스 | WS-01 ~ WS-47 | 47 | +| DBMS | D-01 ~ D-32 | 32 | +| 네트워크 장비 | N-01 ~ N-40 | 40 | +| 보안 장비 | S-01 ~ S-19 | 19 | +| 가상화 | V-01 ~ V-36 | 36 | +| 클라우드 | CL-01 ~ CL-14 | 14 | +| PC/단말기 | PC-01 ~ PC-18 | 18 | +| 제어시스템 | C-01 ~ C-45 | 45 | + +### 관리적 취약점 (127개) + +| 분야 | 항목 코드 | 항목 수 | +|------|:--------:|:------:| +| 정보보호 정책 | A-1 ~ A-7 | 7 | +| 정보보호 조직 | A-8 ~ A-9 | 2 | +| 자산분류 | A-10 ~ A-14 | 5 | +| 위험관리 | A-15 ~ A-17 | 3 | +| 감사 | A-18 ~ A-20 | 3 | +| 인적보안 | A-21 ~ A-26 | 6 | +| 외부자보안 | A-27 ~ A-33 | 7 | +| 교육 및 훈련 | A-34 ~ A-38 | 5 | +| 인증 및 권한관리 | A-39 ~ A-42 | 4 | +| 접근통제 | A-43 ~ A-55 | 13 | +| 운영관리 | A-56 ~ A-93 | 38 | +| 보안관리 | A-94 ~ A-103 | 10 | +| 사고대응 | A-104 ~ A-113 | 10 | +| 업무연속성 | A-114 ~ A-118 | 5 | + +### 물리적 취약점 (9개) + +| 분야 | 항목 코드 | 항목 수 | +|------|:--------:|:------:| +| 물리보안 | B-1 ~ B-9 | 9 | + +--- + +**KESE KIT: Korea Enhanced Security Evaluation - KISA Infrastructure Toolkit** + +*취약점 분석·평가를 위한 실무 가이드* + + +--- + +# 1장. 개요 + +> Part I. 기초 이해 + +--- + +## 1-1. KESE KIT란? + +KESE KIT(Korea Enhanced Security Evaluation - KISA Infrastructure Toolkit)는 주요정보통신기반시설(Critical Information Infrastructure, CII)의 취약점 분석·평가를 체계적으로 수행하기 위한 실무 가이드입니다. + +### KESE KIT의 목적 + +KESE KIT는 다음과 같은 목적으로 개발되었습니다. + +1. **실무자 역량 강화**: 취약점 분석·평가 담당자가 점검 항목을 정확히 이해하고 적용할 수 있도록 지원합니다. +2. **점검 자동화 지원**: 반복적인 기술적 점검을 스크립트로 자동화하여 효율성을 높입니다. +3. **일관된 평가 기준 제공**: 양호/부분이행/취약 판정 기준을 명확히 하여 평가의 일관성을 확보합니다. +4. **정부과제 환경 최적화**: 공공기관 및 정부과제 환경의 특수성을 반영한 실무 가이드를 제공합니다. + +### KESE KIT의 구성 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ KESE KIT │ +├─────────────────────────────────────────────────────────────┤ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ 기술적 │ │ 관리적 │ │ 물리적 │ │ +│ │ 취약점 │ │ 취약점 │ │ 취약점 │ │ +│ │ (~424개) │ │ (127개) │ │ (9개) │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ │ +│ └────────────────┼────────────────┘ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ 자동화 스크립트 / 도구 │ │ +│ │ (Bash, PowerShell, Python) │ │ +│ └─────────────────────────────────────────────────────┘ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ 체크리스트 / 서식 / 보고서 │ │ +│ └─────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +| 구성 요소 | 설명 | +|----------|------| +| 기술적 취약점 점검 | Unix, Windows, 웹, DBMS, 네트워크 등 12개 분야 | +| 관리적 취약점 점검 | 정책, 조직, 인적보안, 접근통제 등 14개 영역 | +| 물리적 취약점 점검 | 물리보안, 보호구역 관리 등 | +| 자동화 스크립트 | 기술적 점검 항목의 자동화 도구 | +| 체크리스트/서식 | 실무에서 바로 활용 가능한 템플릿 | + +> **TIP** +> KESE KIT는 한국인터넷진흥원(Korea Internet & Security Agency, KISA)의 공식 가이드를 기반으로 하되, 실무 적용에 초점을 맞추어 재구성되었습니다. + +--- + +## 1-2. 주요정보통신기반시설(CII) 이해 + +### 주요정보통신기반시설이란? + +주요정보통신기반시설(Critical Information Infrastructure, CII)은 국가안전보장, 행정, 국방, 치안, 금융, 통신, 운송, 에너지 등의 업무와 관련된 전자적 제어·관리시스템으로서, 이를 침해할 경우 국가안전보장과 경제·사회에 중대한 영향을 미칠 수 있는 시설을 말합니다. + +### 법적 근거 + +주요정보통신기반시설은 「정보통신기반 보호법」에 따라 지정·관리됩니다. + +``` +정보통신기반보호법 제8조(주요정보통신기반시설의 지정 등) +① 중앙행정기관의 장은 소관분야의 정보통신기반시설 중 다음 각 호의 사항을 고려하여 + 전자적 침해행위로부터의 보호가 필요하다고 인정되는 정보통신기반시설을 + 주요정보통신기반시설로 지정할 수 있다. +``` + +### CII 지정 현황 (분야별) + +| 분야 | 예시 | +|------|------| +| 금융 | 은행 전산망, 증권거래시스템 | +| 통신 | 기간통신사업자 네트워크 | +| 에너지 | 전력계통 제어시스템, 가스공급망 | +| 교통 | 항공관제시스템, 철도관제시스템 | +| 의료 | 대형병원 의료정보시스템 | +| 행정 | 주민등록시스템, 국세청 시스템 | + +> **WARNING** +> CII로 지정된 시설의 관리기관은 매년 취약점 분석·평가를 의무적으로 수행해야 합니다. 미이행 시 법적 제재를 받을 수 있습니다. + +--- + +## 1-3. 취약점 분석·평가의 필요성 + +### 법적 의무 + +「정보통신기반 보호법」 제9조에 따라 주요정보통신기반시설 관리기관은 정기적으로 취약점 분석·평가를 실시해야 합니다. + +``` +정보통신기반보호법 제9조(취약점의 분석·평가) +① 관리기관의 장은 대통령령이 정하는 바에 따라 정기적으로 소관 주요정보통신기반시설의 + 취약점을 분석·평가하여야 한다. +``` + +### 취약점 분석·평가 수행 주체 + +| 수행 주체 | 설명 | +|----------|------| +| 자체 수행 | 관리기관이 자체 인력으로 수행 | +| 외부 위탁 | 한국인터넷진흥원(KISA) 또는 정보보호 전문서비스 기업에 위탁 | + +### 평가 항목 분류 + +취약점 분석·평가는 크게 세 가지 분야로 구분됩니다. + +| 분야 | 항목 수 | 주요 내용 | +|------|:------:|----------| +| 기술적 취약점 | ~424개 | 서버, 네트워크, DB, 웹 등 시스템 보안 | +| 관리적 취약점 | 127개 | 정책, 조직, 인적보안, 접근통제 등 | +| 물리적 취약점 | 9개 | 물리보안, 보호구역 관리 등 | + +### 평가 결과 활용 + +취약점 분석·평가 결과는 다음과 같이 활용됩니다. + +1. **보호대책 수립**: 발견된 취약점에 대한 개선 계획 수립 +2. **예산 확보 근거**: 정보보호 예산 요청의 객관적 근거 제공 +3. **경영진 보고**: 조직의 보안 수준 현황 보고 +4. **규제 준수**: 법적 의무 이행 증빙 + +--- + +## 1-4. 이 책의 구성과 활용 방법 + +### 전체 구성 + +KESE KIT는 4개의 Part와 부록으로 구성됩니다. + +| Part | 내용 | 대상 | +|------|------|------| +| **Part I** | 기초 이해 | 모든 독자 | +| **Part II** | 기술적 취약점 점검 | 시스템/보안 담당자 | +| **Part III** | 관리적·물리적 취약점 점검 | 보안관리자, 정책담당자 | +| **Part IV** | 실무 적용 | 정부과제 담당자, 개발자 | +| **부록** | 체크리스트, 서식, 용어집 | 전체 | + +### Part별 상세 내용 + +#### Part I. 기초 이해 (1~2장) +- 주요정보통신기반시설의 개념과 법적 근거 +- 취약점 분석·평가 프레임워크 이해 + +#### Part II. 기술적 취약점 점검 (3~12장) +- Unix/Linux, Windows 서버 점검 +- 웹 서비스, 웹 애플리케이션 점검 +- DBMS, 네트워크, 보안장비 점검 +- 가상화, 클라우드, 제어시스템 점검 + +#### Part III. 관리적·물리적 취약점 점검 (13~19장) +- 정보보호 정책 및 조직 +- 자산관리, 위험관리 +- 인적보안, 외부자보안 +- 접근통제, 운영관리 +- 사고대응, 업무연속성 +- 물리보안 + +#### Part IV. 실무 적용 (20~22장) +- 정부과제 환경 적용 +- 공공조달시장 대응 +- 자동화 도구 구축 + +### 활용 방법 + +> **TIP** +> 이 책은 처음부터 끝까지 순차적으로 읽을 필요가 없습니다. 담당 업무에 따라 필요한 장을 선택하여 참조하세요. + +--- + +## 1-5. 대상 독자별 학습 경로 + +### 독자 유형별 추천 경로 + +#### 바이브코딩을 하는 개발자 +``` +1장 → 6장(웹 애플리케이션) → 22장(자동화 도구) → 부록 +``` +웹 애플리케이션 보안의 핵심을 파악하고, 개발 과정에서 보안을 자동화하는 방법을 익힙니다. + +#### 서버 운영 담당자 +``` +1장 → 2장 → 3장(Unix) → 4장(Windows) → 7장(DBMS) → 부록 +``` +운영 중인 서버의 취약점을 직접 점검하고 조치하는 방법을 학습합니다. + +#### 정부과제 개발자 +``` +1장 → 2장 → 20장(정부과제) → 21장(공공조달) → 필요한 기술 장 +``` +정부과제 환경의 보안 요구사항을 먼저 파악한 후, 필요한 기술 영역을 학습합니다. + +#### 보안관리자/CISO +``` +1장 → 2장 → 13장(정책) → 14장(자산관리) → 18장(사고대응) → 전체 개관 +``` +관리적 관점에서 조직의 보안 체계를 점검하고 개선하는 방법을 익힙니다. + +#### 서버를 처음 다루는 분 +``` +1장 → 2장 → 3장(Unix 기초) → 5장(웹 서비스 기초) → 점진적 확장 +``` +기초부터 차근차근 학습하며 점검 역량을 쌓아갑니다. + +### 빠른 참조 가이드 + +| 상황 | 참조 장 | +|------|---------| +| "리눅스 서버 점검해야 해" | 3장 | +| "웹 취약점 점검해야 해" | 5장, 6장 | +| "정보보호 정책 수립해야 해" | 13장 | +| "침해사고 대응 절차가 필요해" | 18장 | +| "점검 스크립트 만들고 싶어" | 22장 | + +--- + +## 요약 + +- **KESE KIT**는 주요정보통신기반시설(CII)의 취약점 분석·평가를 위한 실무 가이드입니다. +- 「정보통신기반 보호법」 제9조에 따라 CII 관리기관은 매년 취약점 분석·평가를 수행해야 합니다. +- 평가 항목은 **기술적**(~424개), **관리적**(127개), **물리적**(9개) 분야로 구분됩니다. +- 독자의 역할과 필요에 따라 **선택적으로 학습**할 수 있도록 구성되어 있습니다. + +--- + +*다음 장: 2장. 법적 기반과 프레임워크* + + +--- + +# 2장. 법적 기반과 프레임워크 + +> Part I. 기초 이해 + +--- + +## 2-1. 정보통신기반보호법 개요 + +### 법률의 목적 + +「정보통신기반 보호법」은 전자적 침해행위에 대비하여 주요정보통신기반시설의 보호에 관한 대책을 수립·시행함으로써 동 시설을 안정적으로 운용하도록 하여 국가의 안전과 국민생활의 안정을 보장하는 것을 목적으로 합니다. + +### 주요 조항 + +| 조항 | 내용 | 관련 업무 | +|------|------|----------| +| 제5조 | 주요정보통신기반시설보호위원회 | 정책 심의·조정 | +| 제8조 | 주요정보통신기반시설의 지정 | CII 지정 기준 | +| 제9조 | 취약점의 분석·평가 | **핵심 의무 조항** | +| 제10조 | 보호지침 | 보호조치 기준 | +| 제12조 | 침해사고의 통지 | 사고 신고 의무 | +| 제13조 | 침해사고의 대응 | 복구 및 대응 | + +### 법률 체계 + +``` +정보통신기반 보호법 (법률) + ├── 시행령 (대통령령) + ├── 시행규칙 (부령) + └── 보호지침 (KISA 고시) + ├── 기술적 취약점 분석·평가 상세가이드 + └── 관리적·물리적 취약점 분석·평가 안내서 +``` + +> **TIP** +> 본 책에서 다루는 점검 항목은 KISA의 공식 가이드를 기반으로 합니다. 법률 개정이나 가이드 업데이트 시 최신 버전을 확인하세요. + +--- + +## 2-2. 취약점 분석·평가 의무 (제9조) + +### 법률 원문 + +``` +정보통신기반보호법 제9조(취약점의 분석·평가) + +① 관리기관의 장은 대통령령이 정하는 바에 따라 정기적으로 소관 주요정보통신기반시설의 + 취약점을 분석·평가하여야 한다. + +② 중앙행정기관의 장은 다음 각 호의 어느 하나에 해당하는 경우 해당 관리기관의 장에게 + 주요정보통신기반시설의 취약점을 분석·평가하도록 명령할 수 있다. + 1. 새로운 형태의 전자적 침해행위로부터 주요정보통신기반시설을 보호하기 위하여 + 필요한 경우 + 2. 주요정보통신기반시설에 중대한 변화가 발생하여 별도의 취약점 분석·평가가 + 필요한 경우 + +③ 관리기관의 장은 제1항 및 제2항에 따라 취약점을 분석·평가하고자 하는 경우에는 + 대통령령이 정하는 바에 따라 한국인터넷진흥원 또는 「정보보호산업의 진흥에 관한 + 법률」 제23조에 따라 지정된 정보보호 전문서비스 기업으로 하여금 소관 + 주요정보통신기반시설의 취약점을 분석·평가하게 할 수 있다. +``` + +### 수행 주기 + +| 구분 | 주기 | 비고 | +|------|------|------| +| 정기 평가 | **연 1회 이상** | 의무 | +| 수시 평가 | 중대한 변화 발생 시 | 중앙행정기관 명령 | + +### 수행 방식 + +취약점 분석·평가는 다음 세 가지 방식 중 하나로 수행할 수 있습니다. + +| 방식 | 설명 | 장점 | 단점 | +|------|------|------|------| +| **자체 수행** | 관리기관 자체 인력으로 수행 | 비용 절감, 내부 역량 강화 | 전문성 부족 가능 | +| **KISA 위탁** | 한국인터넷진흥원에 위탁 | 높은 전문성, 공신력 | 일정 조율 필요 | +| **전문기업 위탁** | 정보보호 전문서비스 기업에 위탁 | 전문성, 유연한 일정 | 비용 발생 | + +> **WARNING** +> 취약점 분석·평가를 수행하지 않거나 결과를 허위로 보고할 경우 법적 제재를 받을 수 있습니다. + +--- + +## 2-3. KISA의 역할과 평가 체계 + +### 한국인터넷진흥원(KISA)의 역할 + +한국인터넷진흥원(Korea Internet & Security Agency, KISA)은 주요정보통신기반시설 보호와 관련하여 다음 역할을 수행합니다. + +| 역할 | 내용 | +|------|------| +| 취약점 분석·평가 수행 | 관리기관 위탁 시 직접 수행 | +| 가이드 개발·배포 | 점검 항목 및 방법론 개발 | +| 기술 지원 | 관리기관 자체 수행 시 기술 지원 | +| 전문인력 양성 | 취약점 분석·평가 전문인력 교육 | +| 침해사고 대응 | 침해사고 발생 시 기술 지원 | + +### 평가 체계 구조 + +``` +┌─────────────────────────────────────────────────────────┐ +│ 중앙행정기관 │ +│ (과학기술정보통신부 등) │ +└─────────────────────┬───────────────────────────────────┘ + │ 정책 지침 + ▼ +┌─────────────────────────────────────────────────────────┐ +│ 한국인터넷진흥원 (KISA) │ +│ - 가이드 개발 - 평가 수행 - 기술 지원 │ +└─────────────────────┬───────────────────────────────────┘ + │ 가이드/지원 + ▼ +┌─────────────────────────────────────────────────────────┐ +│ 관리기관 │ +│ (CII를 운영하는 기관/기업) │ +│ - 자체 수행 또는 위탁 수행 │ +│ - 결과 보고 및 보호대책 이행 │ +└─────────────────────────────────────────────────────────┘ +``` + +### 평가 프로세스 + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 취약점 분석·평가 프로세스 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ 1. 계획 │───▶│ 2. 자료 │───▶│ 3. 취약점│ │ +│ │ 수립 │ │ 수집 │ │ 점검 │ │ +│ └──────────┘ └──────────┘ └────┬─────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ 6. 보호 │◀───│ 5. 보고서│◀───│ 4. 결과 │ │ +│ │ 대책수립 │ │ 작성 │ │ 분석 │ │ +│ └────┬─────┘ └──────────┘ └──────────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────┐ │ +│ │ 7. 이행 │ │ +│ │ 점검 │ │ +│ └──────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 단계 | 활동 | 산출물 | +|:----:|------|--------| +| 1 | 계획 수립 | 평가 계획서 | +| 2 | 자료 수집 | 시스템 현황, 네트워크 구성도 | +| 3 | 취약점 점검 | 점검 결과 | +| 4 | 결과 분석 | 취약점 목록 | +| 5 | 보고서 작성 | 취약점 분석·평가 보고서 | +| 6 | 보호대책 수립 | 조치 계획서 | +| 7 | 이행 점검 | 이행 점검 결과서 | + +--- + +## 2-4. 평가 항목 분류 체계 (관리/물리/기술) + +### 3대 분야 개요 + +취약점 분석·평가 항목은 크게 세 가지 분야로 구분됩니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 취약점 분석·평가 3대 분야 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 기술적 취약점 │ │ +│ │ (~424개 항목) │ │ +│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │ +│ │ │Unix │ │ Win │ │ Web │ │DBMS │ │ Net │ │기타 │ │ │ +│ │ │(68) │ │(73) │ │(47) │ │(32) │ │(40) │ │(164)│ │ │ +│ │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ │ +│ ┌───────────────┼───────────────┐ │ +│ ▼ ▼ ▼ │ +│ ┌─────────────────┐ ┌─────────────┐ ┌─────────────────┐ │ +│ │ 관리적 취약점 │ │ 정보보호 │ │ 물리적 취약점 │ │ +│ │ (127개 항목) │ │ 관리 체계 │ │ (9개 항목) │ │ +│ │ │ │ │ │ │ │ +│ │ 정책/조직/자산 │ │ ┌───────┐ │ │ 보호구역/출입 │ │ +│ │ 인적/접근/운영 │ │ │ 통합 │ │ │ CCTV/환경보호 │ │ +│ │ 사고/연속성 │ │ │ 보안 │ │ │ │ │ +│ │ │ │ └───────┘ │ │ │ │ +│ └─────────────────┘ └─────────────┘ └─────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 분야 | 항목 코드 | 항목 수 | 점검 방식 | +|------|----------|:------:|----------| +| **기술적** | U, W, WS, S, N, C, PC, D, M, V, CL | ~424개 | 시스템 점검, 스크립트 | +| **관리적** | A | 127개 | 문서 검토, 인터뷰 | +| **물리적** | B | 9개 | 현장 실사 | + +### 기술적 취약점 분류 + +기술적 취약점은 시스템 유형별로 세분화됩니다. + +| 코드 | 대상 시스템 | 항목 수 | 주요 점검 영역 | +|:----:|-------------|:------:|---------------| +| U | Unix/Linux 서버 | 68 | 계정, 파일권한, 서비스, 패치 | +| W | Windows 서버 | 73 | 계정, 서비스, 패치, 보안설정 | +| WS | 웹 서비스 | 47 | Apache, Nginx 설정 | +| S | 보안 장비 | 19 | 방화벽, IDS/IPS | +| N | 네트워크 장비 | 40 | 라우터, 스위치 | +| C | 제어시스템 | 45 | SCADA, PLC | +| PC | PC/단말기 | 18 | 엔드포인트 보안 | +| D | DBMS | 32 | Oracle, MySQL, MSSQL | +| M | 이동통신 | 2 | 모바일 인프라 | +| V | 가상화 장비 | 36 | VMware, Hyper-V | +| CL | 클라우드 | 14 | AWS, Azure, GCP | + +### 관리적 취약점 분류 + +관리적 취약점은 14개 영역으로 구성됩니다. + +| 영역 | 항목 코드 | 주요 점검 내용 | +|------|----------|---------------| +| 정보보호 정책 | A-1 ~ A-7 | 정책 수립, 승인, 배포 | +| 정보보호 조직 | A-8 ~ A-9 | 전담 조직, 위원회 | +| 자산분류 | A-10 ~ A-14 | 자산 식별, 등급 분류 | +| 위험관리 | A-15 ~ A-17 | 위험 평가, 보호대책 | +| 감사 | A-18 ~ A-20 | 정기 감사, 사후관리 | +| 인적보안 | A-21 ~ A-26 | 채용, 퇴직, 징계 | +| 외부자보안 | A-27 ~ A-33 | 위탁, 용역 관리 | +| 교육 및 훈련 | A-34 ~ A-38 | 보안 교육, 인식제고 | +| 인증 및 권한관리 | A-39 ~ A-42 | 계정, 비밀번호 정책 | +| 접근통제 | A-43 ~ A-55 | 네트워크, 시스템 접근 | +| 운영관리 | A-56 ~ A-93 | 변경, 백업, 로그 관리 | +| 보안관리 | A-94 ~ A-113 | 암호화, 악성코드 대응 | +| 사고대응 | A-114 ~ A-121 | 침해사고 대응 체계 | +| 업무 연속성 | A-122 ~ A-127 | BCP, DR | + +### 물리적 취약점 분류 + +물리적 취약점은 1개 영역, 9개 항목으로 구성됩니다. + +| 영역 | 항목 코드 | 주요 점검 내용 | +|------|----------|---------------| +| 물리보안 | B-1 ~ B-9 | 보호구역, 출입통제, CCTV | + +--- + +## 2-5. 판정 기준 (양호/부분이행/취약) + +### 3단계 판정 체계 + +각 점검 항목은 다음 세 가지 중 하나로 판정됩니다. + +| 판정 | 의미 | 조치 필요 | +|:----:|------|:--------:| +| **양호** | 점검 항목에 명확히 부합 | 불필요 | +| **부분 이행** | 일부 만족, 개선 필요 요소 존재 | 필요 | +| **취약** | 점검 항목에 부합하지 못함 | 즉시 필요 | + +### 판정 시 고려사항 + +> **TIP** +> 판정 기준은 일반적인 권고사항입니다. 실제 판정은 각 기반시설의 정책, 운용 상황, 위험 수용 수준을 종합적으로 고려하여 결정해야 합니다. + +1. **보완 조치의 존재**: 취약 판정 항목이라도 합당한 보안조치와 근거가 있다면 양호로 판정 가능 +2. **업무 환경 특수성**: 산업 영역별 특수한 요구사항 고려 +3. **위험 수용 결정**: 위험을 수용하기로 결정한 경우 그 근거 문서화 + +### 중요도 분류 + +기술적 취약점 항목은 중요도에 따라 상/중/하로 분류됩니다. + +| 중요도 | 의미 | 조치 우선순위 | +|:------:|------|:------------:| +| **상** | 침해 시 심각한 영향 | 즉시 조치 | +| **중** | 침해 시 중간 수준 영향 | 단기 조치 | +| **하** | 침해 시 낮은 영향 | 중장기 조치 | + +### 판정 예시 + +#### 예시 1: U-01 root 계정 원격 접속 제한 + +| 판정 | 상황 | +|:----:|------| +| 양호 | root 계정의 직접 원격 접속이 차단되어 있음 | +| 취약 | root 계정으로 SSH 원격 접속이 가능함 | + +#### 예시 2: A-1 정보보호 정책 수립 + +| 판정 | 상황 | +|:----:|------| +| 양호 | 정보보호 정책이 수립되어 있고 경영진 승인을 받음 | +| 부분 이행 | 정책은 있으나 경영진 승인 기록이 없음 | +| 취약 | 정보보호 정책이 수립되어 있지 않음 | + +--- + +## 요약 + +- 「**정보통신기반 보호법**」 제9조에 따라 CII 관리기관은 **연 1회 이상** 취약점 분석·평가를 수행해야 합니다. +- 평가는 **자체 수행**, **KISA 위탁**, **전문기업 위탁** 중 선택할 수 있습니다. +- 평가 항목은 **기술적**(~424개), **관리적**(127개), **물리적**(9개) 분야로 구분됩니다. +- 판정은 **양호/부분이행/취약** 3단계로 이루어지며, 기관의 상황을 종합적으로 고려합니다. + +--- + +*다음 장: 3장. Unix/Linux 서버 점검* + + +--- + +# 3장. Unix/Linux 서버 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +Unix/Linux 서버는 주요정보통신기반시설의 핵심 인프라입니다. 이 장에서는 68개의 점검 항목(U-01 ~ U-68)을 5개 영역으로 나누어 설명합니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Unix/Linux 서버 취약점 점검 영역 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ 계정 관리 │ │ 파일/디렉 │ │ 서비스 │ │ +│ │ U-01~U-13 │ │ 터리 관리 │ │ 관리 │ │ +│ │ (13개) │ │ U-14~U-33 │ │ U-34~U-63 │ │ +│ │ │ │ (20개) │ │ (30개) │ │ +│ │ • root 접속 │ │ • 권한 설정 │ │ • 불필요 │ │ +│ │ • 비밀번호 │ │ • SUID/SGID│ │ 서비스 │ │ +│ │ • 계정 잠금 │ │ • 소유자 │ │ • SNMP 보안 │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ │ +│ └────────────────┬┴─────────────────┘ │ +│ │ │ +│ ┌────────────────┴────────────────┐ │ +│ ▼ ▼ │ +│ ┌─────────────┐ ┌─────────────┐ │ +│ │ 패치 관리 │ │ 로그 관리 │ │ +│ │ U-64 │ │ U-65~U-68 │ │ +│ │ (1개) │ │ (4개) │ │ +│ │ │ │ │ │ +│ │ • 보안 패치 │ │ • 로그 설정 │ │ +│ │ 적용 │ │ • 로그 보관 │ │ +│ └─────────────┘ └─────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 계정 관리 | U-01 ~ U-13 | 13 | +| 파일 및 디렉터리 관리 | U-14 ~ U-33 | 20 | +| 서비스 관리 | U-34 ~ U-63 | 30 | +| 패치 관리 | U-64 | 1 | +| 로그 관리 | U-65 ~ U-68 | 4 | + +--- + +## 3-1. 계정 관리 (U-01 ~ U-13) + +계정 관리는 서버 보안의 첫 번째 방어선입니다. 부적절한 계정 관리는 비인가 접근의 주요 원인이 됩니다. + +### U-01. root 계정 원격 접속 제한 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | root 계정의 직접 원격 접속을 제한하여 비인가 접근 방지 | +| **판단 기준** | 양호: root 직접 접속 차단 / 취약: root 직접 접속 허용 | + +#### 점검 방법 + +```bash +# SSH 설정 확인 +cat /etc/ssh/sshd_config | grep -i "PermitRootLogin" + +# Telnet 사용 여부 확인 (사용하지 않는 것이 권장) +cat /etc/securetty +``` + +#### 조치 방법 + +```bash +# /etc/ssh/sshd_config 수정 +PermitRootLogin no + +# SSH 서비스 재시작 +systemctl restart sshd +``` + +> **TIP** +> root 접속이 필요한 경우, 일반 계정으로 접속 후 `su -` 또는 `sudo`를 사용하세요. + +--- + +### U-02. 비밀번호 관리정책 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 비밀번호 복잡성 및 주기적 변경 강제 | +| **판단 기준** | 양호: 정책 설정됨 / 취약: 정책 미설정 | + +#### 점검 방법 + +```bash +# 비밀번호 정책 확인 +cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" + +# PAM 설정 확인 (RHEL/CentOS) +cat /etc/pam.d/system-auth | grep pam_pwquality +``` + +#### 권장 설정값 + +| 항목 | 권장값 | 설명 | +|------|:------:|------| +| PASS_MAX_DAYS | 90 | 최대 사용 기간 | +| PASS_MIN_DAYS | 1 | 최소 사용 기간 | +| PASS_MIN_LEN | 8 | 최소 길이 | +| PASS_WARN_AGE | 7 | 만료 경고 일수 | + +#### 조치 방법 + +```bash +# /etc/login.defs 수정 +PASS_MAX_DAYS 90 +PASS_MIN_DAYS 1 +PASS_MIN_LEN 8 +PASS_WARN_AGE 7 +``` + +--- + +### U-03. 계정 잠금 임계값 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 무차별 대입 공격(Brute Force) 방지 | +| **판단 기준** | 양호: 5회 이하 설정 / 취약: 미설정 또는 초과 | + +#### 점검 방법 + +```bash +# PAM 설정 확인 +cat /etc/pam.d/system-auth | grep pam_tally2 +# 또는 +cat /etc/pam.d/system-auth | grep pam_faillock +``` + +#### 조치 방법 + +```bash +# /etc/pam.d/system-auth (RHEL 7 이상) +auth required pam_faillock.so preauth silent deny=5 unlock_time=600 +auth required pam_faillock.so authfail deny=5 unlock_time=600 +``` + +> **WARNING** +> 계정 잠금 설정 시 root 계정이 잠기지 않도록 `even_deny_root` 옵션 사용에 주의하세요. + +--- + +### U-04. 비밀번호 파일 보호 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | Shadow 패스워드 사용으로 암호 해시 보호 | +| **판단 기준** | 양호: shadow 사용 / 취약: passwd에 암호 저장 | + +#### 점검 방법 + +```bash +# /etc/passwd에서 두 번째 필드 확인 +cat /etc/passwd | awk -F: '{print $1":"$2}' +# 'x'로 표시되면 shadow 사용 중 +``` + +--- + +### U-05. root 이외의 UID가 '0' 금지 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | root 권한을 가진 비인가 계정 탐지 | +| **판단 기준** | 양호: root만 UID 0 / 취약: 다른 계정이 UID 0 | + +#### 점검 방법 + +```bash +# UID가 0인 계정 확인 +awk -F: '$3==0 {print $1}' /etc/passwd +``` + +#### 조치 방법 + +root 외에 UID가 0인 계정이 있다면 삭제하거나 UID를 변경합니다. + +--- + +### U-06. 사용자 계정 su 기능 제한 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | su 명령어 사용을 특정 그룹으로 제한 | +| **판단 기준** | 양호: wheel 그룹만 su 사용 가능 / 취약: 제한 없음 | + +#### 점검 방법 + +```bash +# PAM 설정 확인 +cat /etc/pam.d/su | grep pam_wheel +``` + +#### 조치 방법 + +```bash +# /etc/pam.d/su 수정 (주석 해제) +auth required pam_wheel.so use_uid + +# wheel 그룹에 사용자 추가 +usermod -aG wheel [사용자명] +``` + +--- + +### U-07 ~ U-13. 기타 계정 관리 항목 + +| 코드 | 항목 | 중요도 | 핵심 점검 | +|------|------|:------:|----------| +| U-07 | 불필요한 계정 제거 | 하 | `/etc/passwd` 미사용 계정 | +| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | wheel/root 그룹 구성원 | +| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | `/etc/group` 정합성 | +| U-10 | 동일한 UID 금지 | 중 | 중복 UID 확인 | +| U-11 | 사용자 Shell 점검 | 하 | 불필요 계정 `/sbin/nologin` | +| U-12 | 세션 종료 시간 설정 | 하 | TMOUT 환경변수 | +| U-13 | 안전한 비밀번호 암호화 알고리즘 | 중 | SHA-512 사용 권장 | + +--- + +## 3-2. 파일 및 디렉터리 관리 (U-14 ~ U-33) + +파일 권한 관리는 시스템 무결성 보호의 핵심입니다. + +### U-14. root 홈, 패스 디렉터리 권한 및 패스 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | PATH 환경변수에 '.' 포함 방지 | +| **판단 기준** | 양호: PATH에 '.' 미포함 / 취약: '.' 포함 | + +#### 점검 방법 + +```bash +# PATH 환경변수 확인 +echo $PATH | grep -E "^\.|:\.|:$" + +# root 프로파일 확인 +cat /root/.bash_profile | grep PATH +``` + +> **WARNING** +> PATH에 현재 디렉터리(`.`)가 포함되면 악성 프로그램 실행 위험이 있습니다. + +--- + +### U-16 ~ U-22. 주요 시스템 파일 권한 + +| 코드 | 대상 파일 | 권장 권한 | 소유자 | +|------|----------|:--------:|:------:| +| U-16 | /etc/passwd | 644 | root | +| U-18 | /etc/shadow | 400 | root | +| U-19 | /etc/hosts | 600 | root | +| U-20 | /etc/(x)inetd.conf | 600 | root | +| U-21 | /etc/(r)syslog.conf | 640 | root | +| U-22 | /etc/services | 644 | root | + +#### 일괄 점검 스크립트 + +```bash +#!/bin/bash +# 주요 파일 권한 점검 + +FILES=( + "/etc/passwd:644:root" + "/etc/shadow:400:root" + "/etc/hosts:600:root" + "/etc/services:644:root" +) + +for item in "${FILES[@]}"; do + IFS=':' read -r file perm owner <<< "$item" + if [ -f "$file" ]; then + actual_perm=$(stat -c "%a" "$file") + actual_owner=$(stat -c "%U" "$file") + if [ "$actual_perm" -le "$perm" ] && [ "$actual_owner" == "$owner" ]; then + echo "[양호] $file (권한: $actual_perm, 소유자: $actual_owner)" + else + echo "[취약] $file (권한: $actual_perm, 소유자: $actual_owner)" + fi + fi +done +``` + +--- + +### U-23. SUID, SGID, Sticky bit 설정 파일 점검 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 불필요한 SUID/SGID 파일로 인한 권한 상승 방지 | + +#### 점검 방법 + +```bash +# SUID 파일 검색 +find / -perm -4000 -type f 2>/dev/null + +# SGID 파일 검색 +find / -perm -2000 -type f 2>/dev/null + +# SUID + SGID 동시 검색 +find / -perm -6000 -type f 2>/dev/null +``` + +#### 주요 점검 대상 SUID 파일 + +| 파일 | 필요 여부 | 조치 | +|------|:--------:|------| +| /usr/bin/passwd | 필요 | 유지 | +| /usr/bin/su | 필요 | 유지 | +| /usr/bin/chsh | 검토 | 불필요 시 제거 | +| /usr/bin/newgrp | 검토 | 불필요 시 제거 | + +--- + +### U-25. world writable 파일 점검 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 모든 사용자가 쓰기 가능한 파일 탐지 | + +#### 점검 방법 + +```bash +# world writable 파일 검색 +find / -perm -2 -type f 2>/dev/null + +# world writable 디렉터리 검색 (sticky bit 없는) +find / -perm -2 -type d ! -perm -1000 2>/dev/null +``` + +--- + +## 3-3. 서비스 관리 (U-34 ~ U-63) + +불필요한 서비스는 공격 표면을 증가시킵니다. 최소한의 서비스만 운영해야 합니다. + +### U-34. Finger 서비스 비활성화 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 사용자 정보 노출 방지 | +| **판단 기준** | 양호: 비활성화 / 취약: 활성화 | + +#### 점검 방법 + +```bash +# Finger 서비스 확인 +systemctl status finger 2>/dev/null +# 또는 +chkconfig --list finger 2>/dev/null +``` + +--- + +### U-36. r 계열 서비스 비활성화 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 인증 없는 원격 접속 차단 | +| **대상 서비스** | rsh, rlogin, rexec | + +#### 점검 방법 + +```bash +# r 계열 서비스 확인 +systemctl status rsh.socket rlogin.socket rexec.socket 2>/dev/null + +# inetd/xinetd 설정 확인 +cat /etc/xinetd.d/rsh 2>/dev/null | grep disable +``` + +> **WARNING** +> r 계열 서비스는 암호화되지 않은 통신을 사용합니다. SSH로 대체하세요. + +--- + +### U-52. Telnet 서비스 비활성화 + +| 항목 | 내용 | +|------|------| +| **중요도** | 중 | +| **점검 목적** | 평문 통신 서비스 차단 | +| **판단 기준** | 양호: 비활성화 또는 SSH 사용 / 취약: Telnet 활성화 | + +#### 점검 방법 + +```bash +# Telnet 서비스 확인 +systemctl status telnet.socket 2>/dev/null + +# 포트 확인 +netstat -tlnp | grep :23 +``` + +--- + +### U-58 ~ U-61. SNMP 보안 + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| U-59 | 안전한 SNMP 버전 사용 | 상 | +| U-60 | SNMP Community String 복잡성 | 중 | +| U-61 | SNMP Access Control 설정 | 상 | + +#### 점검 방법 + +```bash +# SNMP 서비스 확인 +systemctl status snmpd + +# Community String 확인 +cat /etc/snmp/snmpd.conf | grep -i community +``` + +> **TIP** +> SNMP v3를 사용하고, 기본 Community String(public, private)은 반드시 변경하세요. + +--- + +## 3-4. 패치 관리 (U-64) + +### U-64. 주기적 보안 패치 및 벤더 권고사항 적용 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 알려진 취약점에 대한 패치 적용 | +| **판단 기준** | 양호: 최신 패치 적용 / 취약: 미적용 | + +#### 점검 방법 + +```bash +# RHEL/CentOS +yum check-update + +# Ubuntu/Debian +apt list --upgradable + +# 커널 버전 확인 +uname -r +``` + +#### 조치 방법 + +```bash +# RHEL/CentOS +yum update -y + +# Ubuntu/Debian +apt update && apt upgrade -y +``` + +> **WARNING** +> 프로덕션 환경에서는 패치 전 테스트 환경에서 검증 후 적용하세요. + +--- + +## 3-5. 로그 관리 (U-65 ~ U-68) + +### U-65. 로그 정책 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 적절한 로그 기록 및 보관 | + +#### 점검 방법 + +```bash +# syslog 설정 확인 +cat /etc/rsyslog.conf + +# 주요 로그 파일 존재 확인 +ls -la /var/log/messages /var/log/secure /var/log/wtmp +``` + +### U-66. 정책에 따른 로그 관리 + +| 로그 파일 | 내용 | 권장 보관 기간 | +|----------|------|:-------------:| +| /var/log/messages | 시스템 메시지 | 6개월 | +| /var/log/secure | 인증 로그 | 6개월 | +| /var/log/wtmp | 로그인 기록 | 6개월 | +| /var/log/btmp | 실패한 로그인 | 6개월 | + +--- + +## 3-6. 자동화 스크립트 작성 + +### 통합 점검 스크립트 + +아래는 주요 항목을 자동으로 점검하는 Bash 스크립트입니다. + +```bash +#!/bin/bash +#=============================================== +# KESE KIT - Unix/Linux 서버 취약점 자동 점검 +# Version: 1.0 +#=============================================== + +REPORT_FILE="unix_check_$(date +%Y%m%d_%H%M%S).txt" + +echo "=============================================" | tee $REPORT_FILE +echo "KESE KIT Unix/Linux 취약점 점검 결과" | tee -a $REPORT_FILE +echo "점검 일시: $(date)" | tee -a $REPORT_FILE +echo "호스트명: $(hostname)" | tee -a $REPORT_FILE +echo "=============================================" | tee -a $REPORT_FILE + +# U-01: root 원격 접속 제한 +echo -e "\n[U-01] root 원격 접속 제한" | tee -a $REPORT_FILE +SSH_ROOT=$(grep -i "^PermitRootLogin" /etc/ssh/sshd_config 2>/dev/null | awk '{print $2}') +if [ "$SSH_ROOT" == "no" ]; then + echo " [양호] PermitRootLogin = no" | tee -a $REPORT_FILE +else + echo " [취약] PermitRootLogin = $SSH_ROOT" | tee -a $REPORT_FILE +fi + +# U-04: 비밀번호 파일 보호 +echo -e "\n[U-04] 비밀번호 파일 보호 (Shadow 사용)" | tee -a $REPORT_FILE +SHADOW_CHECK=$(awk -F: '$2!="x" && $2!="*" && $2!="!!" {print $1}' /etc/passwd) +if [ -z "$SHADOW_CHECK" ]; then + echo " [양호] Shadow 패스워드 사용 중" | tee -a $REPORT_FILE +else + echo " [취약] Shadow 미사용 계정: $SHADOW_CHECK" | tee -a $REPORT_FILE +fi + +# U-05: root 외 UID 0 계정 +echo -e "\n[U-05] root 외 UID 0 계정" | tee -a $REPORT_FILE +UID_ZERO=$(awk -F: '$3==0 && $1!="root" {print $1}' /etc/passwd) +if [ -z "$UID_ZERO" ]; then + echo " [양호] root만 UID 0" | tee -a $REPORT_FILE +else + echo " [취약] UID 0 계정: $UID_ZERO" | tee -a $REPORT_FILE +fi + +# U-16: /etc/passwd 권한 +echo -e "\n[U-16] /etc/passwd 권한" | tee -a $REPORT_FILE +PASSWD_PERM=$(stat -c "%a" /etc/passwd) +if [ "$PASSWD_PERM" -le "644" ]; then + echo " [양호] 권한: $PASSWD_PERM" | tee -a $REPORT_FILE +else + echo " [취약] 권한: $PASSWD_PERM (644 이하 권장)" | tee -a $REPORT_FILE +fi + +# U-18: /etc/shadow 권한 +echo -e "\n[U-18] /etc/shadow 권한" | tee -a $REPORT_FILE +SHADOW_PERM=$(stat -c "%a" /etc/shadow) +if [ "$SHADOW_PERM" -le "400" ]; then + echo " [양호] 권한: $SHADOW_PERM" | tee -a $REPORT_FILE +else + echo " [취약] 권한: $SHADOW_PERM (400 이하 권장)" | tee -a $REPORT_FILE +fi + +# U-52: Telnet 서비스 +echo -e "\n[U-52] Telnet 서비스" | tee -a $REPORT_FILE +TELNET_CHECK=$(systemctl is-active telnet.socket 2>/dev/null) +if [ "$TELNET_CHECK" != "active" ]; then + echo " [양호] Telnet 비활성화" | tee -a $REPORT_FILE +else + echo " [취약] Telnet 활성화됨" | tee -a $REPORT_FILE +fi + +echo -e "\n=============================================" | tee -a $REPORT_FILE +echo "점검 완료. 결과 파일: $REPORT_FILE" | tee -a $REPORT_FILE +``` + +### 스크립트 사용 방법 + +```bash +# 실행 권한 부여 +chmod +x unix_check.sh + +# 실행 (root 권한 필요) +sudo ./unix_check.sh + +# 결과 확인 +cat unix_check_*.txt +``` + +> **TIP** +> 이 스크립트를 cron에 등록하여 주기적으로 점검할 수 있습니다. +> ``` +> # 매주 월요일 오전 2시 실행 +> 0 2 * * 1 /path/to/unix_check.sh +> ``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 계정 관리 | root 원격접속, 비밀번호 정책, 계정 잠금 | 최우선 | +| 파일 권한 | 주요 설정 파일 권한, SUID/SGID | 높음 | +| 서비스 관리 | 불필요 서비스 비활성화, SNMP 보안 | 높음 | +| 패치 관리 | 최신 보안 패치 적용 | 최우선 | +| 로그 관리 | 로그 설정 및 보관 | 중간 | + +--- + +*다음 장: 4장. Windows 서버 점검* + + +--- + +# 4장. Windows 서버 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +Windows 서버는 기업 환경에서 Active Directory, 파일 서버, 웹 서버 등 다양한 역할로 활용됩니다. 이 장에서는 73개의 점검 항목(W-01 ~ W-73)을 5개 영역으로 나누어 설명합니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Windows 서버 취약점 점검 영역 (73개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌────────────────────────────────────────────────────────────┐ │ +│ │ 보안 관리 (W-48~W-73, 26개) │ │ +│ │ 방화벽 | 백신 | 화면보호기 | 레지스트리 | 권한 설정 │ │ +│ └────────────────────────────────────────────────────────────┘ │ +│ ▲ │ +│ ┌─────────────────────┼─────────────────────┐ │ +│ │ │ │ │ +│ ┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐ │ +│ │ 계정 관리 │ │ 서비스 관리│ │ 로그 관리 │ │ +│ │ W-01~W-14 │ │ W-15~W-39 │ │ W-42~W-47 │ │ +│ │ (14개) │ │ (25개) │ │ (6개) │ │ +│ │ │ │ │ │ │ │ +│ │• Admin │ │• 불필요 │ │• 감사정책 │ │ +│ │ 이름변경 │ │ 서비스 │ │• 로그크기 │ │ +│ │• Guest │ │• IIS 점검 │ │• 이벤트 │ │ +│ │ 비활성화 │ │• 공유폴더 │ │ 로그 │ │ +│ │• 잠금정책│ │ │ │ │ │ +│ └───────────┘ └───────────┘ └───────────┘ │ +│ │ │ +│ ┌─────┴─────┐ │ +│ │ 패치 관리 │ │ +│ │ W-40~W-41 │ │ +│ │ (2개) │ │ +│ │ │ │ +│ │• 서비스팩 │ │ +│ │• 보안패치 │ │ +│ └───────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 계정 관리 | W-01 ~ W-14 | 14 | +| 서비스 관리 | W-15 ~ W-39 | 25 | +| 패치 관리 | W-40 ~ W-41 | 2 | +| 로그 관리 | W-42 ~ W-47 | 6 | +| 보안 관리 | W-48 ~ W-73 | 26 | + +--- + +## 4-1. 계정 관리 (W-01 ~ W-14) + +### W-01. Administrator 계정 이름 변경 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 기본 관리자 계정명 노출로 인한 공격 방지 | +| **판단 기준** | 양호: 이름 변경됨 / 취약: 기본값 사용 | + +#### 점검 방법 (PowerShell) + +```powershell +# Administrator 계정 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} + +# 또는 명령 프롬프트 +net user administrator +``` + +#### 조치 방법 + +```powershell +# PowerShell로 계정 이름 변경 +Rename-LocalUser -Name "Administrator" -NewName "새로운관리자명" + +# 또는 로컬 보안 정책 +# secpol.msc > 로컬 정책 > 보안 옵션 > 계정: Administrator 계정 이름 바꾸기 +``` + +> **TIP** +> 계정 이름은 예측하기 어려운 이름으로 변경하되, 관리 편의를 위해 문서화하세요. + +--- + +### W-02. Guest 계정 비활성화 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 익명 접근 차단 | +| **판단 기준** | 양호: 비활성화 / 취약: 활성화 | + +#### 점검 방법 + +```powershell +# Guest 계정 상태 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled +``` + +#### 조치 방법 + +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" +``` + +--- + +### W-03. 불필요한 계정 제거 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 미사용 계정을 통한 비인가 접근 방지 | + +#### 점검 방법 + +```powershell +# 모든 로컬 계정 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon + +# 90일 이상 미접속 계정 확인 +$threshold = (Get-Date).AddDays(-90) +Get-LocalUser | Where-Object {$_.LastLogon -lt $threshold} +``` + +--- + +### W-04. 비밀번호 정책 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 강력한 비밀번호 사용 강제 | + +#### 점검 방법 + +```powershell +# 비밀번호 정책 확인 +net accounts + +# 또는 PowerShell +Get-ADDefaultDomainPasswordPolicy # 도메인 환경 +``` + +#### 권장 설정값 + +| 정책 | 권장값 | +|------|:------:| +| 최소 비밀번호 길이 | 8자 이상 | +| 비밀번호 복잡성 | 사용 | +| 최대 비밀번호 사용 기간 | 90일 | +| 최소 비밀번호 사용 기간 | 1일 | +| 비밀번호 기억 | 12개 | + +#### 조치 방법 + +```powershell +# 로컬 보안 정책 (secpol.msc) 또는 그룹 정책(gpedit.msc)에서 설정 +# 컴퓨터 구성 > Windows 설정 > 보안 설정 > 계정 정책 > 암호 정책 +``` + +--- + +### W-05. 계정 잠금 정책 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 무차별 대입 공격 방지 | + +#### 점검 방법 + +```powershell +# 계정 잠금 정책 확인 +net accounts +``` + +#### 권장 설정값 + +| 정책 | 권장값 | +|------|:------:| +| 계정 잠금 임계값 | 5회 | +| 계정 잠금 기간 | 30분 | +| 다음 시간 후 계정 잠금 수를 원래대로 설정 | 30분 | + +--- + +### W-06 ~ W-14. 기타 계정 관리 항목 + +| 코드 | 항목 | 중요도 | 핵심 점검 | +|------|------|:------:|----------| +| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | Administrators 그룹 구성원 | +| W-07 | 로컬 계정 관리 | 중 | 불필요 로컬 계정 | +| W-08 | 비밀번호 저장을 위한 해독 가능한 암호화 사용 안 함 | 중 | 정책 설정 | +| W-09 | 로컬 계정의 원격 접속 제한 | 중 | UAC 원격 제한 | +| W-10 | 세션 타임아웃 설정 | 하 | 화면 잠금 | +| W-11 | 마지막 로그온 사용자 이름 표시 안 함 | 하 | 로그온 화면 | +| W-12 | 로그온 시 경고 메시지 표시 | 하 | 법적 고지 | +| W-13 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | 익명 열거 차단 | +| W-14 | 원격 레지스트리 서비스 비활성화 | 상 | 원격 레지스트리 | + +--- + +## 4-2. 서비스 관리 (W-15 ~ W-39) + +### W-15. 불필요한 서비스 비활성화 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 공격 표면 최소화 | + +#### 비활성화 권장 서비스 + +| 서비스 | 설명 | 비활성화 권장 | +|--------|------|:------------:| +| Telnet | 원격 접속 (평문) | O | +| TFTP | 파일 전송 (비인증) | O | +| FTP Publishing | FTP 서버 | 검토 | +| Remote Registry | 원격 레지스트리 | O | +| Simple TCP/IP Services | Echo, Daytime 등 | O | + +#### 점검 방법 + +```powershell +# 실행 중인 서비스 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName + +# 특정 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` + +#### 조치 방법 + +```powershell +# 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-20. IIS 서비스 구동 점검 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 불필요한 웹 서버 비활성화 | + +#### 점검 방법 + +```powershell +# IIS 설치 여부 확인 +Get-WindowsFeature -Name Web-Server + +# IIS 서비스 상태 +Get-Service -Name "W3SVC" +``` + +--- + +### W-25. 공유 폴더 점검 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 불필요한 공유 제거, 권한 점검 | + +#### 점검 방법 + +```powershell +# 공유 폴더 목록 +Get-SmbShare + +# 관리 공유 확인 +Get-SmbShare | Where-Object {$_.Name -match '\$$'} + +# 공유 권한 확인 +Get-SmbShareAccess -Name "공유명" +``` + +> **WARNING** +> 관리 공유(C$, ADMIN$ 등)는 관리 목적으로 기본 생성됩니다. 불필요 시 제거하되, 영향도를 검토하세요. + +--- + +## 4-3. 패치 관리 (W-40 ~ W-41) + +### W-40. 최신 서비스팩 적용 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 알려진 취약점 패치 적용 | + +#### 점검 방법 + +```powershell +# OS 버전 및 빌드 확인 +Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber + +# 설치된 핫픽스 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +``` + +--- + +### W-41. 최신 보안 패치 적용 + +#### 점검 방법 + +```powershell +# Windows Update 기록 확인 +Get-WindowsUpdateLog # Windows 10/Server 2016 이상 + +# 또는 업데이트 확인 +$UpdateSession = New-Object -ComObject Microsoft.Update.Session +$UpdateSearcher = $UpdateSession.CreateUpdateSearcher() +$Updates = $UpdateSearcher.Search("IsInstalled=0") +$Updates.Updates | Select-Object Title +``` + +--- + +## 4-4. 로그 관리 (W-42 ~ W-47) + +### W-42. 로그 정책 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 적절한 감사 로그 기록 | + +#### 권장 감사 정책 + +| 정책 | 성공 | 실패 | +|------|:----:|:----:| +| 계정 로그온 이벤트 감사 | O | O | +| 계정 관리 감사 | O | O | +| 로그온 이벤트 감사 | O | O | +| 개체 액세스 감사 | O | O | +| 정책 변경 감사 | O | O | +| 시스템 이벤트 감사 | O | O | + +#### 점검 방법 + +```powershell +# 감사 정책 확인 +auditpol /get /category:* +``` + +--- + +### W-43. 로그 파일 크기 설정 + +#### 권장 설정 + +| 로그 | 최대 크기 | 보존 정책 | +|------|:--------:|----------| +| 응용 프로그램 | 64MB 이상 | 필요한 경우 덮어쓰기 | +| 보안 | 128MB 이상 | 보관 후 덮어쓰기 | +| 시스템 | 64MB 이상 | 필요한 경우 덮어쓰기 | + +#### 점검 방법 + +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes +``` + +--- + +## 4-5. 보안 관리 (W-48 ~ W-73) + +### W-48. 화면 보호기 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 중 | +| **점검 목적** | 무인 터미널 보호 | + +#### 권장 설정 + +- 대기 시간: 10분 이내 +- 다시 시작 시 암호 보호: 사용 + +--- + +### W-56. Windows 방화벽 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 네트워크 접근 통제 | + +#### 점검 방법 + +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled + +# 인바운드 규칙 확인 +Get-NetFirewallRule -Direction Inbound -Enabled True | Select-Object Name, Action +``` + +--- + +### W-67. 최신 백신 프로그램 사용 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 악성코드 방어 | + +#### 점검 방법 + +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntispywareEnabled, RealTimeProtectionEnabled + +# 최신 정의 업데이트 확인 +Get-MpComputerStatus | Select-Object AntivirusSignatureLastUpdated +``` + +--- + +## 4-6. PowerShell 점검 스크립트 + +### 통합 점검 스크립트 + +```powershell +#=============================================== +# KESE KIT - Windows 서버 취약점 자동 점검 +# Version: 1.0 +#=============================================== + +$ReportFile = "windows_check_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt" + +function Write-Report { + param([string]$Message) + Write-Host $Message + Add-Content -Path $ReportFile -Value $Message +} + +Write-Report "=============================================" +Write-Report "KESE KIT Windows 취약점 점검 결과" +Write-Report "점검 일시: $(Get-Date)" +Write-Report "호스트명: $env:COMPUTERNAME" +Write-Report "=============================================" + +# W-01: Administrator 계정 이름 변경 +Write-Report "`n[W-01] Administrator 계정 이름 변경" +$AdminUser = Get-LocalUser | Where-Object {$_.SID -like "*-500"} +if ($AdminUser.Name -ne "Administrator") { + Write-Report " [양호] 계정명 변경됨: $($AdminUser.Name)" +} else { + Write-Report " [취약] 기본 계정명 사용 중" +} + +# W-02: Guest 계정 비활성화 +Write-Report "`n[W-02] Guest 계정 비활성화" +$GuestUser = Get-LocalUser -Name "Guest" +if ($GuestUser.Enabled -eq $false) { + Write-Report " [양호] Guest 계정 비활성화됨" +} else { + Write-Report " [취약] Guest 계정 활성화됨" +} + +# W-05: 계정 잠금 정책 +Write-Report "`n[W-05] 계정 잠금 정책" +$NetAccounts = net accounts +$LockoutThreshold = ($NetAccounts | Select-String "Lockout threshold").ToString().Split(":")[1].Trim() +if ($LockoutThreshold -ne "Never" -and [int]$LockoutThreshold -le 5) { + Write-Report " [양호] 잠금 임계값: $LockoutThreshold" +} else { + Write-Report " [취약] 잠금 임계값: $LockoutThreshold (5회 이하 권장)" +} + +# W-14: 원격 레지스트리 서비스 +Write-Report "`n[W-14] 원격 레지스트리 서비스" +$RemoteReg = Get-Service -Name "RemoteRegistry" -ErrorAction SilentlyContinue +if ($RemoteReg.Status -ne "Running") { + Write-Report " [양호] 원격 레지스트리 비활성화" +} else { + Write-Report " [취약] 원격 레지스트리 실행 중" +} + +# W-56: Windows 방화벽 +Write-Report "`n[W-56] Windows 방화벽" +$Firewall = Get-NetFirewallProfile +$AllEnabled = ($Firewall | Where-Object {$_.Enabled -eq $true}).Count -eq 3 +if ($AllEnabled) { + Write-Report " [양호] 모든 프로필 방화벽 활성화" +} else { + Write-Report " [취약] 일부 방화벽 프로필 비활성화" +} + +# W-67: 백신 프로그램 +Write-Report "`n[W-67] 백신 프로그램" +try { + $Defender = Get-MpComputerStatus + if ($Defender.AntivirusEnabled) { + Write-Report " [양호] Windows Defender 활성화" + } else { + Write-Report " [취약] Windows Defender 비활성화" + } +} catch { + Write-Report " [정보] Windows Defender 상태 확인 불가" +} + +Write-Report "`n=============================================" +Write-Report "점검 완료. 결과 파일: $ReportFile" +``` + +### 스크립트 사용 방법 + +```powershell +# 관리자 권한으로 PowerShell 실행 +# 실행 정책 설정 (필요 시) +Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +# 스크립트 실행 +.\windows_check.ps1 + +# 결과 확인 +Get-Content .\windows_check_*.txt +``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 계정 관리 | Administrator 변경, Guest 비활성화, 잠금 정책 | 최우선 | +| 서비스 관리 | 불필요 서비스 비활성화, 공유 폴더 점검 | 높음 | +| 패치 관리 | 최신 보안 패치 적용 | 최우선 | +| 로그 관리 | 감사 정책 설정, 로그 크기 | 중간 | +| 보안 관리 | 방화벽, 백신, 화면 보호기 | 높음 | + +--- + +*다음 장: 5장. 웹 서비스 점검* + + +--- + +# 5장. 웹 서비스 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +웹 서비스는 Apache, Nginx 등의 웹 서버 소프트웨어 설정에 대한 점검입니다. 이 장에서는 47개의 점검 항목(WS-01 ~ WS-47)을 4개 영역으로 나누어 설명합니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 웹 서비스 취약점 점검 영역 (47개 항목) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────┐ │ +│ │ 웹 서버 (Apache/Nginx) │ │ +│ └──────────────┬──────────────┘ │ +│ │ │ +│ ┌───────────────────────┼───────────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ 계정 │ │ 서비스 │ │ 보안 │ │ +│ │ 관리 │ │ 관리 │ │ 설정 │ │ +│ │WS-01~05 │ │WS-06~30 │ │WS-31~43 │ │ +│ │ (5개) │ │ (25개) │ │ (13개) │ │ +│ │ │ │ │ │ │ │ +│ │• 전용 │ │• 디렉터 │ │• SSL/TLS│ │ +│ │ 계정 │ │ 리 리스│ │• 보안 │ │ +│ │• 쉘제한 │ │ 팅 제거│ │ 헤더 │ │ +│ │• 권한 │ │• 버전 │ │• 에러 │ │ +│ │ 설정 │ │ 숨김 │ │ 페이지 │ │ +│ └────┬────┘ └────┬────┘ └────┬────┘ │ +│ │ │ │ │ +│ └─────────────────────┼─────────────────────┘ │ +│ ▼ │ +│ ┌─────────────┐ │ +│ │ 패치/로그 │ │ +│ │ 관리 │ │ +│ │ WS-44~47 │ │ +│ │ (4개) │ │ +│ │ │ │ +│ │• 최신버전 │ │ +│ │• 로그설정 │ │ +│ └─────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 계정 관리 | WS-01 ~ WS-05 | 5 | +| 서비스 관리 | WS-06 ~ WS-30 | 25 | +| 보안 설정 | WS-31 ~ WS-43 | 13 | +| 패치 및 로그 관리 | WS-44 ~ WS-47 | 4 | + +--- + +## 5-1. 계정 관리 (WS-01 ~ WS-05) + +### WS-01. 웹 서비스 전용 계정 사용 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 웹 서비스가 최소 권한 계정으로 실행되는지 확인 | +| **판단 기준** | 양호: 전용 계정(www-data, apache 등) 사용 / 취약: root로 실행 | + +#### 점검 방법 + +```bash +# Apache 실행 계정 확인 +ps aux | grep httpd | grep -v grep +ps aux | grep apache2 | grep -v grep + +# Nginx 실행 계정 확인 +ps aux | grep nginx | grep -v grep +``` + +#### 조치 방법 (Apache) + +```bash +# /etc/httpd/conf/httpd.conf 또는 /etc/apache2/envvars +User www-data +Group www-data +``` + +#### 조치 방법 (Nginx) + +```bash +# /etc/nginx/nginx.conf +user www-data; +``` + +> **WARNING** +> 웹 서버를 root 계정으로 실행하면 취약점 발생 시 시스템 전체가 위험해집니다. + +--- + +### WS-02. 웹 서비스 계정 쉘 제한 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 웹 서비스 계정의 대화형 로그인 차단 | + +#### 점검 방법 + +```bash +# 웹 서비스 계정 쉘 확인 +grep -E "www-data|apache|nginx" /etc/passwd +``` + +#### 권장 설정 + +```bash +# 쉘을 nologin으로 설정 +www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin +``` + +--- + +### WS-03 ~ WS-05. 기타 계정 관리 + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WS-03 | 웹 서비스 계정 홈 디렉터리 권한 | 중 | +| WS-04 | 웹 서비스 설정 파일 권한 | 상 | +| WS-05 | 웹 서비스 로그 파일 권한 | 중 | + +--- + +## 5-2. 서비스 관리 (WS-06 ~ WS-30) + +### WS-06. 디렉터리 리스팅 제거 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 디렉터리 내용 노출 방지 | +| **판단 기준** | 양호: 비활성화 / 취약: 활성화 | + +#### 점검 방법 (Apache) + +```bash +# httpd.conf에서 Indexes 옵션 확인 +grep -r "Options.*Indexes" /etc/httpd/ +grep -r "Options.*Indexes" /etc/apache2/ +``` + +#### 조치 방법 (Apache) + +```apache +# Indexes 옵션 제거 + + Options -Indexes +FollowSymLinks + +``` + +#### 조치 방법 (Nginx) + +```nginx +# autoindex off 설정 +location / { + autoindex off; +} +``` + +--- + +### WS-07. 웹 서비스 버전 정보 숨김 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 서버 버전 정보 노출로 인한 표적 공격 방지 | + +#### 점검 방법 + +```bash +# HTTP 헤더 확인 +curl -I http://localhost + +# 응답에서 Server 헤더 확인 +# 예: Server: Apache/2.4.41 (Ubuntu) +``` + +#### 조치 방법 (Apache) + +```apache +# /etc/httpd/conf/httpd.conf +ServerTokens Prod +ServerSignature Off +``` + +#### 조치 방법 (Nginx) + +```nginx +# /etc/nginx/nginx.conf +server_tokens off; +``` + +--- + +### WS-10. 불필요한 HTTP 메소드 제한 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | PUT, DELETE 등 위험한 메소드 차단 | + +#### 점검 방법 + +```bash +# OPTIONS 메소드로 허용된 메소드 확인 +curl -X OPTIONS -I http://localhost +``` + +#### 조치 방법 (Apache) + +```apache + + + Require all denied + + +``` + +#### 조치 방법 (Nginx) + +```nginx +if ($request_method !~ ^(GET|POST|HEAD)$ ) { + return 405; +} +``` + +--- + +### WS-15. 웹 서버 심볼릭 링크 사용 제한 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 심볼릭 링크를 통한 파일 시스템 접근 방지 | + +#### 조치 방법 (Apache) + +```apache + + Options -FollowSymLinks + # 또는 SymLinksIfOwnerMatch 사용 + Options +SymLinksIfOwnerMatch + +``` + +--- + +### WS-20. 기본 페이지/문서 제거 + +| 항목 | 내용 | +|------|------| +| **중요도** | 중 | +| **점검 목적** | 기본 설치 페이지로 인한 정보 노출 방지 | + +#### 점검 대상 + +- Apache 기본 페이지 (/var/www/html/index.html) +- Nginx 기본 페이지 +- 샘플 애플리케이션 +- 매뉴얼 디렉터리 (/manual/) + +--- + +## 5-3. 보안 설정 (WS-31 ~ WS-43) + +### WS-31. 에러 페이지 커스터마이징 + +| 항목 | 내용 | +|------|------| +| **중요도** | 중 | +| **점검 목적** | 에러 메시지를 통한 시스템 정보 노출 방지 | + +#### 조치 방법 (Apache) + +```apache +# 커스텀 에러 페이지 설정 +ErrorDocument 400 /error/400.html +ErrorDocument 401 /error/401.html +ErrorDocument 403 /error/403.html +ErrorDocument 404 /error/404.html +ErrorDocument 500 /error/500.html +``` + +#### 조치 방법 (Nginx) + +```nginx +error_page 404 /404.html; +error_page 500 502 503 504 /50x.html; + +location = /404.html { + root /var/www/error; + internal; +} +``` + +--- + +### WS-35. SSL/TLS 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 안전한 암호화 통신 보장 | + +#### 권장 설정 (Apache) + +```apache +# 최신 프로토콜만 허용 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 + +# 안전한 암호화 스위트 +SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 + +# 서버 암호화 스위트 우선 +SSLHonorCipherOrder on +``` + +#### 권장 설정 (Nginx) + +```nginx +ssl_protocols TLSv1.2 TLSv1.3; +ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; +ssl_prefer_server_ciphers on; +``` + +> **TIP** +> SSL Labs (https://www.ssllabs.com/ssltest/)에서 SSL 설정을 테스트할 수 있습니다. + +--- + +### WS-40. HTTP 보안 헤더 설정 + +| 헤더 | 용도 | 권장 값 | +|------|------|---------| +| X-Content-Type-Options | MIME 스니핑 방지 | nosniff | +| X-Frame-Options | 클릭재킹 방지 | DENY 또는 SAMEORIGIN | +| X-XSS-Protection | XSS 필터 | 1; mode=block | +| Strict-Transport-Security | HTTPS 강제 | max-age=31536000 | +| Content-Security-Policy | 콘텐츠 출처 제한 | 정책에 맞게 설정 | + +#### 조치 방법 (Apache) + +```apache +Header always set X-Content-Type-Options "nosniff" +Header always set X-Frame-Options "SAMEORIGIN" +Header always set X-XSS-Protection "1; mode=block" +Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" +``` + +#### 조치 방법 (Nginx) + +```nginx +add_header X-Content-Type-Options "nosniff" always; +add_header X-Frame-Options "SAMEORIGIN" always; +add_header X-XSS-Protection "1; mode=block" always; +add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; +``` + +--- + +## 5-4. 패치 및 로그 관리 (WS-44 ~ WS-47) + +### WS-44. 웹 서버 최신 버전 사용 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 알려진 취약점 패치 | + +#### 점검 방법 + +```bash +# Apache 버전 확인 +httpd -v +apache2 -v + +# Nginx 버전 확인 +nginx -v +``` + +--- + +### WS-46. 로그 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 접근 및 에러 로그 기록 | + +#### 권장 로그 형식 (Apache) + +```apache +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined +CustomLog /var/log/httpd/access_log combined +ErrorLog /var/log/httpd/error_log +LogLevel warn +``` + +#### 권장 로그 형식 (Nginx) + +```nginx +log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + +access_log /var/log/nginx/access.log main; +error_log /var/log/nginx/error.log warn; +``` + +--- + +## 웹 서비스 점검 스크립트 + +### Apache 점검 스크립트 + +```bash +#!/bin/bash +#=============================================== +# KESE KIT - Apache 웹 서버 취약점 점검 +#=============================================== + +echo "===== Apache 웹 서버 점검 =====" +echo "점검 일시: $(date)" + +# WS-01: 실행 계정 확인 +echo -e "\n[WS-01] 웹 서비스 실행 계정" +APACHE_USER=$(ps aux | grep -E "httpd|apache2" | grep -v grep | head -1 | awk '{print $1}') +if [ "$APACHE_USER" != "root" ]; then + echo " [양호] 실행 계정: $APACHE_USER" +else + echo " [취약] root 계정으로 실행 중" +fi + +# WS-06: 디렉터리 리스팅 +echo -e "\n[WS-06] 디렉터리 리스팅" +if grep -rq "Options.*Indexes" /etc/httpd/ /etc/apache2/ 2>/dev/null; then + echo " [취약] Indexes 옵션 발견" +else + echo " [양호] 디렉터리 리스팅 비활성화" +fi + +# WS-07: 버전 정보 +echo -e "\n[WS-07] 서버 버전 정보" +SERVER_HEADER=$(curl -sI http://localhost 2>/dev/null | grep -i "^Server:") +if echo "$SERVER_HEADER" | grep -qE "[0-9]+\.[0-9]+"; then + echo " [취약] 버전 노출: $SERVER_HEADER" +else + echo " [양호] 버전 정보 숨김" +fi + +echo -e "\n===== 점검 완료 =====" +``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 계정 관리 | 전용 계정 사용, 쉘 제한 | 최우선 | +| 서비스 관리 | 디렉터리 리스팅, 버전 숨김, 메소드 제한 | 최우선 | +| 보안 설정 | SSL/TLS, 보안 헤더 | 높음 | +| 패치/로그 | 최신 버전, 로그 설정 | 높음 | + +--- + +*다음 장: 6장. 웹 애플리케이션 점검* + + +--- + +# 6장. 웹 애플리케이션 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +웹 애플리케이션 취약점은 OWASP Top 10을 기반으로 점검합니다. 이 장은 특히 **바이브코딩** 환경에서 개발하는 분들에게 중요합니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 웹 애플리케이션 보안 취약점 영역 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ 사용자 입력 │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌───────────────────┼───────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ 입력값 │ │ 인증/ │ │ 접근 │ │ +│ │ 검증 │ │ 세션 관리 │ │ 제어 │ │ +│ │ │ │ │ │ │ │ +│ │ ┌─────────┐│ │ ┌─────────┐│ │ ┌─────────┐│ │ +│ │ │SQL Inj. ││ │ │세션 관리││ │ │수직 권한││ │ +│ │ └─────────┘│ │ └─────────┘│ │ │상승 ││ │ +│ │ ┌─────────┐│ │ ┌─────────┐│ │ └─────────┘│ │ +│ │ │ XSS ││ │ │비밀번호 ││ │ ┌─────────┐│ │ +│ │ └─────────┘│ │ │저장 ││ │ │수평 권한││ │ +│ │ ┌─────────┐│ │ └─────────┘│ │ │상승 ││ │ +│ │ │ CSRF ││ │ ┌─────────┐│ │ └─────────┘│ │ +│ │ └─────────┘│ │ │쿠키 보안││ │ │ │ +│ └─────────────┘ │ └─────────┘│ └─────────────┘ │ +│ │ └─────────────┘ │ │ +│ │ │ │ │ +│ └───────────────────┼─────────────────┘ │ +│ ▼ │ +│ ┌─────────────────┐ │ +│ │ 정보 노출 │ │ +│ │ │ │ +│ │ • 에러 메시지 │ │ +│ │ • 소스코드 주석│ │ +│ │ • 버전 정보 │ │ +│ └─────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 주요 취약점 | +|------|------------| +| 입력값 검증 | SQL Injection, XSS, CSRF | +| 인증/세션 관리 | 세션 고정, 쿠키 보안 | +| 접근제어 | 권한 우회, 경로 조작 | +| 정보노출 | 에러 메시지, 주석, 디렉터리 | + +--- + +## 6-1. 입력값 검증 (SQL Injection, XSS, CSRF) + +### SQL Injection (SQL 삽입) + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **위험도** | OWASP Top 10 A03:2021 | +| **영향** | 데이터 유출, 변조, 삭제, 시스템 침해 | + +#### 취약한 코드 예시 (Python) + +```python +# 취약: 사용자 입력을 직접 쿼리에 삽입 +def get_user(username): + query = f"SELECT * FROM users WHERE username = '{username}'" + cursor.execute(query) + return cursor.fetchone() + +# 공격 예시: username = "admin' OR '1'='1" +# 결과 쿼리: SELECT * FROM users WHERE username = 'admin' OR '1'='1' +``` + +#### 안전한 코드 (Parameterized Query) + +```python +# 안전: 파라미터화된 쿼리 사용 +def get_user(username): + query = "SELECT * FROM users WHERE username = %s" + cursor.execute(query, (username,)) + return cursor.fetchone() +``` + +#### 프레임워크별 안전한 방법 + +| 프레임워크 | 안전한 방법 | +|-----------|------------| +| Django | ORM 사용, `filter()`, `get()` | +| Flask-SQLAlchemy | ORM 사용, `query.filter_by()` | +| Node.js (mysql2) | Prepared Statements | +| Java (JDBC) | PreparedStatement | +| PHP (PDO) | Prepared Statements | + +> **WARNING** +> ORM을 사용하더라도 `raw()` 또는 직접 SQL 작성 시 주의가 필요합니다. + +--- + +### XSS (Cross-Site Scripting, 크로스사이트 스크립팅) + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **위험도** | OWASP Top 10 A03:2021 | +| **유형** | Stored XSS, Reflected XSS, DOM XSS | + +#### 취약한 코드 예시 + +```html + +
환영합니다, <%= user.name %>!
+ + +``` + +#### 안전한 코드 (HTML Escape) + +```html + +
환영합니다, <%= escape(user.name) %>!
+ + + + +``` + +#### XSS 방어 체크리스트 + +| 항목 | 방어 방법 | +|------|----------| +| 출력 시 이스케이프 | HTML Entity 인코딩 | +| Content-Type 설정 | `text/html; charset=utf-8` | +| HttpOnly 쿠키 | 세션 쿠키에 HttpOnly 플래그 | +| CSP 헤더 | Content-Security-Policy 설정 | + +--- + +### CSRF (Cross-Site Request Forgery, 크로스사이트 요청 위조) + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **위험도** | OWASP Top 10 A01:2021 | +| **영향** | 사용자 권한으로 비인가 작업 수행 | + +#### 취약한 시나리오 + +```html + + + +``` + +#### 방어 방법: CSRF 토큰 + +```html + +
+ + + + +
+``` + +#### 프레임워크별 CSRF 방어 + +| 프레임워크 | 방법 | +|-----------|------| +| Django | `{% csrf_token %}` | +| Flask | Flask-WTF 확장 | +| Spring | `_csrf.token` | +| Express | csurf 미들웨어 | + +--- + +## 6-2. 인증 및 세션 관리 + +### 안전한 세션 관리 + +| 항목 | 권장 설정 | +|------|----------| +| 세션 ID 길이 | 128비트 이상 | +| 세션 ID 생성 | 암호학적 난수 사용 | +| 세션 타임아웃 | 30분 이내 (중요 시스템) | +| 로그인 후 세션 재생성 | 필수 | + +#### 세션 쿠키 보안 설정 + +```python +# Django settings.py +SESSION_COOKIE_SECURE = True # HTTPS만 전송 +SESSION_COOKIE_HTTPONLY = True # JavaScript 접근 차단 +SESSION_COOKIE_SAMESITE = 'Lax' # CSRF 방어 +SESSION_COOKIE_AGE = 1800 # 30분 +``` + +--- + +### 비밀번호 저장 + +| 방법 | 안전성 | 권장 | +|------|:------:|:----:| +| 평문 저장 | 매우 취약 | X | +| MD5/SHA-1 | 취약 | X | +| SHA-256 (salt 없음) | 취약 | X | +| bcrypt/scrypt/Argon2 | 안전 | O | + +#### 안전한 비밀번호 해싱 (Python) + +```python +import bcrypt + +# 비밀번호 해싱 +password = "user_password".encode('utf-8') +hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12)) + +# 비밀번호 검증 +if bcrypt.checkpw(password, hashed): + print("비밀번호 일치") +``` + +--- + +## 6-3. 접근제어 및 권한 검증 + +### 수직적 권한 상승 (Vertical Privilege Escalation) + +| 항목 | 내용 | +|------|------| +| **설명** | 일반 사용자가 관리자 기능 접근 | +| **방어** | 서버 측 권한 검증 필수 | + +#### 취약한 코드 + +```python +# 취약: URL만으로 관리자 페이지 접근 +@app.route('/admin/users') +def admin_users(): + return render_template('admin_users.html') +``` + +#### 안전한 코드 + +```python +# 안전: 권한 검증 추가 +@app.route('/admin/users') +@login_required +def admin_users(): + if not current_user.is_admin: + abort(403) # Forbidden + return render_template('admin_users.html') +``` + +--- + +### 수평적 권한 상승 (Horizontal Privilege Escalation) + +| 항목 | 내용 | +|------|------| +| **설명** | 다른 사용자의 데이터에 접근 | +| **방어** | 리소스 소유권 검증 | + +#### 취약한 코드 + +```python +# 취약: 사용자 ID만 확인 +@app.route('/user//profile') +def user_profile(user_id): + user = User.query.get(user_id) + return render_template('profile.html', user=user) +``` + +#### 안전한 코드 + +```python +# 안전: 현재 사용자와 요청 사용자 비교 +@app.route('/user//profile') +@login_required +def user_profile(user_id): + if current_user.id != user_id: + abort(403) + user = User.query.get(user_id) + return render_template('profile.html', user=user) +``` + +--- + +## 6-4. 정보노출 방지 + +### 에러 메시지 관리 + +| 환경 | 에러 표시 | +|------|----------| +| 개발 환경 | 상세 에러 (디버깅용) | +| 운영 환경 | 일반 에러 메시지만 | + +#### 안전한 에러 처리 (Django) + +```python +# settings.py +DEBUG = False # 운영 환경 + +# 커스텀 에러 핸들러 +handler404 = 'myapp.views.custom_404' +handler500 = 'myapp.views.custom_500' +``` + +--- + +### 주석 및 불필요한 정보 제거 + +| 제거 대상 | 위험 | +|----------|------| +| HTML 주석의 개발자 메모 | 로직 노출 | +| 주석 처리된 코드 | 기능 노출 | +| 버전 정보 | 취약점 식별 | +| 테스트 계정 정보 | 비인가 접근 | + +--- + +## 6-5. 바이브코딩 환경에서의 보안 + +### AI 코드 생성 시 보안 체크리스트 + +바이브코딩(AI 기반 코딩)에서 생성된 코드는 반드시 보안 검토가 필요합니다. + +| 검토 항목 | 확인 사항 | +|----------|----------| +| SQL 쿼리 | 파라미터화 사용 여부 | +| 사용자 입력 | 검증/이스케이프 여부 | +| 인증/권한 | 서버 측 검증 여부 | +| 민감 정보 | 하드코딩 여부 | +| 의존성 | 알려진 취약점 여부 | + +### AI 프롬프트 보안 가이드 + +``` +# 안전한 프롬프트 예시 +"사용자 로그인 기능을 만들어줘. +SQL Injection 방지를 위해 파라미터화된 쿼리를 사용하고, +비밀번호는 bcrypt로 해싱해줘. +CSRF 토큰도 적용해줘." +``` + +> **TIP** +> AI가 생성한 코드라도 보안 검토 없이 프로덕션에 배포하지 마세요. + +--- + +### 보안 자동화 도구 + +| 도구 | 용도 | 유형 | +|------|------|------| +| Bandit | Python 정적 분석 | SAST | +| ESLint (security) | JavaScript 정적 분석 | SAST | +| OWASP ZAP | 동적 분석 | DAST | +| npm audit | 의존성 취약점 | SCA | +| pip-audit | Python 의존성 | SCA | + +#### 사용 예시 + +```bash +# Python 코드 보안 분석 +pip install bandit +bandit -r ./src + +# JavaScript 의존성 취약점 검사 +npm audit + +# Python 의존성 취약점 검사 +pip install pip-audit +pip-audit +``` + +--- + +## 웹 애플리케이션 보안 테스트 스크립트 + +### 기본 취약점 테스트 + +```python +#!/usr/bin/env python3 +""" +KESE KIT - 웹 애플리케이션 기본 보안 테스트 +""" + +import requests +import sys + +def test_sql_injection(url, param): + """SQL Injection 기본 테스트""" + payloads = ["'", "' OR '1'='1", "1; DROP TABLE users--"] + + for payload in payloads: + try: + response = requests.get(url, params={param: payload}, timeout=5) + if "error" in response.text.lower() or "sql" in response.text.lower(): + print(f"[취약] SQL Injection 가능성: {payload}") + return True + except: + pass + + print("[양호] SQL Injection 기본 테스트 통과") + return False + +def test_xss(url, param): + """XSS 기본 테스트""" + payload = "" + + try: + response = requests.get(url, params={param: payload}, timeout=5) + if payload in response.text: + print(f"[취약] XSS 가능성: 스크립트가 그대로 반영됨") + return True + except: + pass + + print("[양호] XSS 기본 테스트 통과") + return False + +def test_security_headers(url): + """보안 헤더 테스트""" + headers_to_check = [ + "X-Content-Type-Options", + "X-Frame-Options", + "X-XSS-Protection", + "Strict-Transport-Security", + "Content-Security-Policy" + ] + + try: + response = requests.get(url, timeout=5) + missing = [] + + for header in headers_to_check: + if header not in response.headers: + missing.append(header) + + if missing: + print(f"[취약] 누락된 보안 헤더: {', '.join(missing)}") + else: + print("[양호] 모든 보안 헤더 설정됨") + + except Exception as e: + print(f"[오류] 테스트 실패: {e}") + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("사용법: python web_security_test.py ") + sys.exit(1) + + target_url = sys.argv[1] + print(f"===== 웹 보안 기본 테스트: {target_url} =====\n") + + test_security_headers(target_url) +``` + +--- + +## 요약 + +| 영역 | 핵심 방어 | 우선순위 | +|------|----------|:--------:| +| SQL Injection | 파라미터화된 쿼리, ORM | 최우선 | +| XSS | 출력 이스케이프, CSP | 최우선 | +| CSRF | CSRF 토큰 | 높음 | +| 인증/세션 | 안전한 세션 관리, bcrypt | 최우선 | +| 접근제어 | 서버 측 권한 검증 | 높음 | +| 정보노출 | 에러 메시지 관리 | 중간 | + +--- + +## 바이브코딩 보안 요약 + +1. **AI 생성 코드 검토**: 항상 보안 관점에서 리뷰 +2. **입력값 검증**: 모든 사용자 입력은 신뢰하지 않음 +3. **출력값 인코딩**: HTML, SQL, JavaScript 컨텍스트별 인코딩 +4. **의존성 관리**: 정기적인 취약점 검사 +5. **자동화 도구 활용**: SAST, DAST 도구 CI/CD 연동 + +--- + +*다음 장: 7장. 데이터베이스(DBMS) 점검* + + +--- + +# 7장. 데이터베이스(DBMS) 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +DBMS는 조직의 핵심 데이터를 저장하는 중요 자산입니다. 이 장에서는 32개의 점검 항목(D-01 ~ D-32)을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ DBMS 취약점 점검 영역 (32개 항목) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────┐ │ +│ │ 지원 DBMS 플랫폼 │ │ +│ │ Oracle | MySQL | MSSQL | PostgreSQL | MariaDB │ │ +│ └───────────────────────┬─────────────────────────┘ │ +│ │ │ +│ ┌───────────────────────┼───────────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ 계정 관리 │ │ 접근 관리 │ │ 옵션 관리 │ │ +│ │ D-01~D-16 │ │ D-17~D-23 │ │ D-24~D-30 │ │ +│ │ (16개) │ │ (7개) │ │ (7개) │ │ +│ │ │ │ │ │ │ │ +│ │• 기본계정 │ │• 원격접속 │ │• 보안 │ │ +│ │• 비밀번호 │ │ 제한 │ │ 파라미터 │ │ +│ │ 정책 │ │• 최소권한 │ │• 감사 │ │ +│ │• 불필요 │ │ 원칙 │ │ 설정 │ │ +│ │ 계정 │ │ │ │ │ │ +│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ +│ │ │ │ │ +│ └──────────────────────┼──────────────────────┘ │ +│ ▼ │ +│ ┌───────────┐ │ +│ │ 패치 관리 │ │ +│ │ D-31~D-32 │ │ +│ │ (2개) │ │ +│ │• 보안패치 │ │ +│ └───────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 계정 관리 | D-01 ~ D-16 | 16 | +| 접근 관리 | D-17 ~ D-23 | 7 | +| 옵션 관리 | D-24 ~ D-30 | 7 | +| 패치 관리 | D-31 ~ D-32 | 2 | + +--- + +## 7-1. 계정 관리 (D-01 ~ D-16) + +### D-01. 기본 계정 비밀번호 변경 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **대상 DB** | Oracle, MySQL, MSSQL, PostgreSQL | +| **판단 기준** | 양호: 기본 비밀번호 변경됨 / 취약: 기본값 사용 | + +#### 기본 계정 목록 + +| DBMS | 기본 계정 | 기본 비밀번호 | +|------|----------|-------------| +| Oracle | SYS, SYSTEM | change_on_install, manager | +| MySQL | root | (빈 문자열) | +| MSSQL | sa | (설치 시 지정) | +| PostgreSQL | postgres | (설치 시 지정) | + +#### 점검 방법 (MySQL) + +```sql +-- 비밀번호 없는 계정 확인 +SELECT user, host FROM mysql.user WHERE authentication_string = ''; +``` + +#### 점검 방법 (Oracle) + +```sql +-- 기본 비밀번호 사용 계정 확인 +SELECT username, account_status FROM dba_users +WHERE username IN ('SYS', 'SYSTEM', 'DBSNMP', 'SCOTT'); +``` + +--- + +### D-02. 불필요한 계정 제거 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 미사용 계정을 통한 비인가 접근 방지 | + +#### 점검 방법 (MySQL) + +```sql +-- 모든 계정 확인 +SELECT user, host, account_locked FROM mysql.user; +``` + +#### 점검 방법 (Oracle) + +```sql +-- 계정 상태 확인 +SELECT username, account_status, expiry_date, lock_date +FROM dba_users +ORDER BY username; +``` + +--- + +### D-05. 비밀번호 정책 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **권장 설정** | 복잡성, 길이, 만료 기간 | + +#### MySQL 비밀번호 정책 + +```sql +-- 비밀번호 정책 확인 +SHOW VARIABLES LIKE 'validate_password%'; + +-- 정책 설정 +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.policy = MEDIUM; +``` + +#### Oracle 비밀번호 정책 (프로파일) + +```sql +-- 프로파일 생성 +CREATE PROFILE secure_profile LIMIT + PASSWORD_LIFE_TIME 90 + PASSWORD_GRACE_TIME 7 + PASSWORD_REUSE_TIME 365 + PASSWORD_REUSE_MAX 12 + FAILED_LOGIN_ATTEMPTS 5 + PASSWORD_LOCK_TIME 1/24; + +-- 프로파일 적용 +ALTER USER username PROFILE secure_profile; +``` + +--- + +## 7-2. 접근 관리 (D-17 ~ D-23) + +### D-17. 원격 접속 제한 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 비인가 원격 접속 차단 | + +#### MySQL 원격 접속 제한 + +```sql +-- 원격 접속 가능 계정 확인 +SELECT user, host FROM mysql.user WHERE host NOT IN ('localhost', '127.0.0.1'); + +-- 특정 IP만 허용 +CREATE USER 'user'@'192.168.1.%' IDENTIFIED BY 'password'; +``` + +#### PostgreSQL 접근 제어 (pg_hba.conf) + +``` +# 로컬 접속만 허용 +local all all md5 +host all all 127.0.0.1/32 md5 +# 특정 네트워크 허용 +host all all 192.168.1.0/24 md5 +``` + +--- + +### D-19. 최소 권한 원칙 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 업무에 필요한 최소 권한만 부여 | + +#### MySQL 권한 확인 + +```sql +-- 사용자별 권한 확인 +SHOW GRANTS FOR 'username'@'host'; + +-- 전체 권한 현황 +SELECT * FROM mysql.user WHERE user = 'username'\G +``` + +> **WARNING** +> `GRANT ALL PRIVILEGES`는 최소 권한 원칙에 위배됩니다. 필요한 권한만 개별 부여하세요. + +--- + +## 7-3. 옵션 관리 (D-24 ~ D-30) + +### D-24. 보안 관련 파라미터 설정 + +#### Oracle 보안 파라미터 + +| 파라미터 | 권장값 | 설명 | +|---------|:-----:|------| +| REMOTE_LOGIN_PASSWORDFILE | EXCLUSIVE | 원격 비밀번호 파일 | +| REMOTE_OS_AUTHENT | FALSE | OS 인증 비활성화 | +| O7_DICTIONARY_ACCESSIBILITY | FALSE | 데이터 딕셔너리 접근 제한 | +| AUDIT_TRAIL | DB | 감사 활성화 | + +#### MySQL 보안 파라미터 + +| 파라미터 | 권장값 | 설명 | +|---------|:-----:|------| +| local_infile | OFF | 로컬 파일 로드 비활성화 | +| skip_symbolic_links | ON | 심볼릭 링크 비활성화 | +| secure_file_priv | 지정된 경로 | 파일 작업 경로 제한 | + +--- + +## 7-4. 패치 관리 (D-31 ~ D-32) + +### D-31. 최신 보안 패치 적용 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 알려진 취약점 패치 | + +#### 버전 확인 방법 + +```sql +-- MySQL +SELECT VERSION(); + +-- Oracle +SELECT * FROM V$VERSION; + +-- PostgreSQL +SELECT version(); + +-- MSSQL +SELECT @@VERSION; +``` + +--- + +## 7-5. DB별 점검 스크립트 + +### MySQL 점검 스크립트 + +```bash +#!/bin/bash +# KESE KIT - MySQL 점검 스크립트 + +MYSQL_USER="root" +MYSQL_PASS="your_password" + +echo "===== MySQL 보안 점검 =====" + +# D-01: 빈 비밀번호 계정 +echo -e "\n[D-01] 빈 비밀번호 계정" +mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SELECT user, host FROM mysql.user WHERE authentication_string = '';" 2>/dev/null + +# D-02: 전체 계정 목록 +echo -e "\n[D-02] 전체 계정 목록" +mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SELECT user, host, account_locked FROM mysql.user;" 2>/dev/null + +# D-17: 원격 접속 가능 계정 +echo -e "\n[D-17] 원격 접속 가능 계정" +mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SELECT user, host FROM mysql.user WHERE host NOT IN ('localhost', '127.0.0.1', '::1');" 2>/dev/null + +echo -e "\n===== 점검 완료 =====" +``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 계정 관리 | 기본 비밀번호 변경, 불필요 계정 제거 | 최우선 | +| 접근 관리 | 원격 접속 제한, 최소 권한 | 최우선 | +| 옵션 관리 | 보안 파라미터 설정 | 높음 | +| 패치 관리 | 최신 패치 적용 | 최우선 | + +--- + +*다음 장: 8장. 네트워크 장비 점검* + + +--- + +# 8장. 네트워크 장비 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +네트워크 장비(라우터, 스위치)는 인프라의 핵심입니다. 이 장에서는 40개의 점검 항목(N-01 ~ N-40)을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 네트워크 장비 취약점 점검 영역 (40개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ 네트워크 장비 │ │ +│ │ 라우터 | 스위치 │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌───────────────────────┼───────────────────────┐ │ +│ │ │ │ │ │ │ +│ ▼ ▼ ▼ ▼ ▼ │ +│ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ +│ │ 계정 │ │ 접근 │ │ 패치 │ │ 로그 │ │ 기능 │ │ +│ │ 관리 │ │ 관리 │ │ 관리 │ │ 관리 │ │ 관리 │ │ +│ │N-01~10│ │N-11~18│ │ N-19 │ │N-20~24│ │N-25~40│ │ +│ │(10개) │ │(8개) │ │(1개) │ │(5개) │ │(16개) │ │ +│ │ │ │ │ │ │ │ │ │ │ │ +│ │• 기본 │ │• ACL │ │• 펌웨 │ │• Sys- │ │• SNMP │ │ +│ │ 계정 │ │• SSH │ │ 어 │ │ log │ │• CDP │ │ +│ │• 암호 │ │• Telnet│ │ │ │• NTP │ │• 불필 │ │ +│ │ 화 │ │ 차단 │ │ │ │ │ │ 요 │ │ +│ │ │ │ │ │ │ │ │ │ 서비 │ │ +│ └───────┘ └───────┘ └───────┘ └───────┘ │ 스 │ │ +│ └───────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 계정 관리 | N-01 ~ N-10 | 10 | +| 접근 관리 | N-11 ~ N-18 | 8 | +| 패치 관리 | N-19 | 1 | +| 로그 관리 | N-20 ~ N-24 | 5 | +| 기능 관리 | N-25 ~ N-40 | 16 | + +--- + +## 8-1. 계정 관리 (N-01 ~ N-10) + +### N-01. 기본 계정 비밀번호 변경 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **판단 기준** | 양호: 기본 비밀번호 변경됨 / 취약: 기본값 사용 | + +#### Cisco 장비 기본 계정 + +| 계정 | 기본 비밀번호 | 조치 | +|------|-------------|------| +| cisco | cisco | 변경 필수 | +| admin | admin | 변경 필수 | +| enable | (없음) | 설정 필수 | + +#### 조치 방법 (Cisco IOS) + +``` +enable +configure terminal +username admin privilege 15 secret [강력한비밀번호] +enable secret [강력한비밀번호] +``` + +--- + +### N-04. 비밀번호 암호화 저장 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 설정 파일 내 평문 비밀번호 방지 | + +#### 점검 방법 (Cisco) + +``` +show running-config | include password +# "password 7" 또는 평문이 보이면 취약 +``` + +#### 조치 방법 + +``` +configure terminal +service password-encryption +# enable password 대신 enable secret 사용 +enable secret [비밀번호] +``` + +--- + +## 8-2. 접근 관리 (N-11 ~ N-18) + +### N-11. 원격 접속 제한 (ACL) + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 관리 네트워크에서만 접속 허용 | + +#### 조치 방법 (Cisco) + +``` +! 관리용 ACL 생성 +access-list 10 permit 192.168.1.0 0.0.0.255 +access-list 10 deny any log + +! VTY 라인에 적용 +line vty 0 4 + access-class 10 in + transport input ssh +``` + +--- + +### N-12. SSH 사용 (Telnet 비활성화) + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 암호화된 관리 접속 사용 | + +#### 조치 방법 (Cisco) + +``` +! SSH 활성화 +hostname Router1 +ip domain-name example.com +crypto key generate rsa modulus 2048 +ip ssh version 2 + +! Telnet 비활성화 +line vty 0 4 + transport input ssh +``` + +--- + +## 8-3. 패치 관리 (N-19) + +### N-19. 최신 펌웨어 적용 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 알려진 취약점 패치 | + +#### 버전 확인 (Cisco) + +``` +show version +``` + +> **WARNING** +> 펌웨어 업그레이드 전 반드시 현재 설정을 백업하세요. + +--- + +## 8-4. 로그 관리 (N-20 ~ N-24) + +### N-20. 로깅 설정 + +#### 조치 방법 (Cisco) + +``` +! Syslog 서버 설정 +logging host 192.168.1.100 +logging trap informational +logging facility local7 + +! 타임스탬프 추가 +service timestamps log datetime msec +``` + +--- + +## 8-5. 기능 관리 (N-25 ~ N-40) + +### N-25. SNMP 보안 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | SNMP를 통한 비인가 접근 방지 | + +#### 조치 방법 + +``` +! 기본 커뮤니티 삭제 +no snmp-server community public +no snmp-server community private + +! 복잡한 커뮤니티 설정 또는 SNMPv3 사용 +snmp-server community [복잡한문자열] RO 10 +snmp-server group v3group v3 priv +snmp-server user v3user v3group v3 auth sha [인증비밀번호] priv aes 256 [암호화비밀번호] +``` + +--- + +### N-30. 불필요한 서비스 비활성화 + +#### 비활성화 권장 서비스 + +``` +no ip http server +no ip http secure-server +no cdp run +no ip source-route +no service tcp-small-servers +no service udp-small-servers +no ip finger +no ip bootp server +``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 계정 관리 | 기본 비밀번호, 암호화 저장 | 최우선 | +| 접근 관리 | SSH 사용, ACL 설정 | 최우선 | +| 패치 관리 | 최신 펌웨어 | 높음 | +| 로그 관리 | Syslog 설정 | 중간 | +| 기능 관리 | SNMP 보안, 불필요 서비스 비활성화 | 높음 | + +--- + +*다음 장: 9장. 보안 장비 점검* + + +--- + +# 9장. 보안 장비 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +보안 장비(방화벽, IDS/IPS, WAF)는 보안의 핵심 요소입니다. 이 장에서는 19개의 점검 항목(S-01 ~ S-19)을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 보안 장비 취약점 점검 영역 (19개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌────────────────────────────────────────────────────────────┐ │ +│ │ 보안 장비 유형 │ │ +│ │ │ │ +│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ +│ │ │ 방화벽 │ │ IDS/IPS │ │ WAF │ │ │ +│ │ │Firewall │ │침입탐지/ │ │웹 방화벽 │ │ │ +│ │ │ │ │ 방지 │ │ │ │ │ +│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ +│ │ │ │ │ │ │ +│ │ └───────────────┼───────────────┘ │ │ +│ │ │ │ │ +│ └────────────────────────┼──────────────────────────────────┘ │ +│ │ │ +│ ┌───────────────┼───────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ 계정/접근 │ │ 패치/로그 │ │ 기능 관리 │ │ +│ │ 관리 │ │ 관리 │ │ │ │ +│ │ S-01~S-08 │ │ S-09~S-12 │ │ S-13~S-19 │ │ +│ │ (8개) │ │ (4개) │ │ (7개) │ │ +│ │ │ │ │ │ │ │ +│ │• 기본계정 │ │• 펌웨어 │ │• 정책최적화│ │ +│ │• 관리접근 │ │• 시그니처 │ │• 룰셋관리 │ │ +│ │ 제어 │ │• 로그보관 │ │• 모니터링 │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 계정 관리 | S-01 ~ S-05 | 5 | +| 접근 관리 | S-06 ~ S-08 | 3 | +| 패치 관리 | S-09 | 1 | +| 로그 관리 | S-10 ~ S-12 | 3 | +| 기능 관리 | S-13 ~ S-19 | 7 | + +--- + +## 9-1. 방화벽 점검 (S-01 ~ S-19) + +### S-01. 기본 계정 비밀번호 변경 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **대상** | 방화벽, IDS/IPS, UTM | +| **판단 기준** | 양호: 변경됨 / 취약: 기본값 | + +#### 주요 보안 장비 기본 계정 + +| 장비 | 기본 계정 | 조치 | +|------|----------|------| +| Palo Alto | admin/admin | 변경 필수 | +| FortiGate | admin/(없음) | 비밀번호 설정 | +| Cisco ASA | - | enable 비밀번호 설정 | + +--- + +### S-06. 관리 접근 제어 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 관리 인터페이스 접근 제한 | + +#### 권장 설정 + +- 관리 인터페이스는 별도 네트워크 분리 +- 특정 IP에서만 접근 허용 +- SSH 또는 HTTPS 사용 (HTTP/Telnet 비활성화) + +--- + +### S-13. 정책 최적화 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 불필요한 허용 정책 제거 | + +#### 점검 포인트 + +| 항목 | 점검 내용 | +|------|----------| +| Any-Any 정책 | 출발지/목적지가 Any인 정책 | +| 사용되지 않는 정책 | Hit Count가 0인 정책 | +| 중복 정책 | 동일한 효과의 중복 정책 | +| 순서 문제 | 더 넓은 정책이 위에 있는 경우 | + +> **TIP** +> 정기적으로 정책을 리뷰하고 사용되지 않는 정책은 제거하세요. + +--- + +## 9-2. IDS/IPS 점검 + +### 시그니처 업데이트 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 최신 공격 패턴 탐지 | + +#### 점검 포인트 + +- 시그니처 자동 업데이트 설정 +- 업데이트 주기 확인 (일 1회 이상 권장) +- 마지막 업데이트 일자 확인 + +--- + +## 9-3. WAF 점검 + +### 웹 공격 방어 설정 + +| 공격 유형 | 방어 설정 | +|----------|----------| +| SQL Injection | 탐지/차단 | +| XSS | 탐지/차단 | +| CSRF | 탐지 | +| File Inclusion | 탐지/차단 | +| Command Injection | 탐지/차단 | + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 계정 관리 | 기본 비밀번호 변경 | 최우선 | +| 접근 관리 | 관리 인터페이스 제한 | 최우선 | +| 기능 관리 | 정책 최적화, 시그니처 업데이트 | 높음 | + +--- + +*다음 장: 10장. 가상화 및 클라우드 점검* + + +--- + +# 10장. 가상화 및 클라우드 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +가상화 및 클라우드 환경은 현대 인프라의 핵심입니다. 이 장에서는 가상화 장비(V-01 ~ V-36)와 클라우드(CL-01 ~ CL-14) 점검을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 가상화 및 클라우드 취약점 점검 체계 (50개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌────────────────────────┐ ┌────────────────────────┐ │ +│ │ 가상화 환경 │ │ 클라우드 환경 │ │ +│ │ V-01 ~ V-36 │ │ CL-01 ~ CL-14 │ │ +│ │ (36개) │ │ (14개) │ │ +│ └───────────┬────────────┘ └───────────┬────────────┘ │ +│ │ │ │ +│ ▼ ▼ │ +│ ┌────────────────────────┐ ┌────────────────────────┐ │ +│ │ • VMware vSphere │ │ • AWS │ │ +│ │ • Microsoft Hyper-V │ │ • Microsoft Azure │ │ +│ │ • KVM/QEMU │ │ • Google Cloud (GCP) │ │ +│ │ • Citrix Xen │ │ • NHN Cloud / NCP │ │ +│ └───────────┬────────────┘ └───────────┬────────────┘ │ +│ │ │ │ +│ └──────────────┬───────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ 공통 점검 영역 │ │ +│ ├─────────────────────────────────────────────────────────┤ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ 계정 │ │ 네트워크│ │ 스토리지│ │ 컨테이너│ │ │ +│ │ │ 관리 │ │ 분리 │ │ 보안 │ │ 보안 │ │ │ +│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ +│ │ │ │ +│ │ • IAM 정책 • VLAN/VPC • 암호화 │ │ +│ │ • MFA 적용 • 보안 그룹 • 퍼블릭 차단 │ │ +│ │ • 최소 권한 • 방화벽 규칙 • 백업 정책 │ │ +│ └─────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 10-1. 가상화 장비 (V-01 ~ V-36) + +### V-01. 하이퍼바이저 계정 관리 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **대상** | VMware vSphere, Hyper-V, KVM | +| **점검 목적** | 하이퍼바이저 관리 계정 보안 | + +#### VMware vSphere 점검 + +```powershell +# PowerCLI로 사용자 확인 +Connect-VIServer -Server vcenter.example.com +Get-VIPermission | Select Principal, Role +``` + +--- + +### V-12. 가상 네트워크 분리 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | VM 간 네트워크 격리 | + +#### 권장 사항 + +- 용도별 VLAN/포트 그룹 분리 +- 관리 네트워크 분리 +- 프로덕션/개발 환경 분리 + +--- + +### V-25. 스냅샷 관리 + +| 항목 | 내용 | +|------|------| +| **중요도** | 중 | +| **점검 목적** | 스냅샷 누적으로 인한 성능 저하 방지 | + +#### 점검 포인트 + +- 오래된 스냅샷 확인 (7일 이상) +- 스냅샷 체인 길이 확인 + +```powershell +# VMware 스냅샷 확인 +Get-VM | Get-Snapshot | Select VM, Name, Created, SizeGB +``` + +--- + +## 10-2. 클라우드 환경 (CL-01 ~ CL-14) + +### CL-01. IAM 계정 관리 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **대상** | AWS, Azure, GCP | +| **점검 목적** | 클라우드 계정 및 권한 관리 | + +#### AWS IAM 점검 + +```bash +# 미사용 계정 확인 +aws iam generate-credential-report +aws iam get-credential-report --output text | base64 -d + +# MFA 미설정 사용자 확인 +aws iam list-users --query 'Users[*].UserName' --output text | while read user; do + mfa=$(aws iam list-mfa-devices --user-name $user --query 'MFADevices' --output text) + if [ -z "$mfa" ]; then + echo "MFA 미설정: $user" + fi +done +``` + +--- + +### CL-04. 최소 권한 원칙 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 과도한 권한 부여 방지 | + +#### AWS 권한 점검 + +```bash +# AdministratorAccess 정책 사용자 +aws iam list-entities-for-policy \ + --policy-arn arn:aws:iam::aws:policy/AdministratorAccess +``` + +> **WARNING** +> AdministratorAccess나 *:* 권한은 최소화하세요. + +--- + +### CL-07. 스토리지 보안 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 퍼블릭 접근 차단, 암호화 | + +#### AWS S3 버킷 점검 + +```bash +# 퍼블릭 버킷 확인 +aws s3api list-buckets --query 'Buckets[*].Name' --output text | while read bucket; do + acl=$(aws s3api get-bucket-acl --bucket $bucket --query 'Grants[?Grantee.URI==`http://acs.amazonaws.com/groups/global/AllUsers`]' --output text) + if [ -n "$acl" ]; then + echo "퍼블릭 버킷: $bucket" + fi +done +``` + +--- + +## 10-3. 컨테이너 보안 (Docker, K8s) + +### Docker 보안 점검 + +| 항목 | 점검 내용 | +|------|----------| +| 이미지 취약점 | 베이스 이미지 취약점 스캔 | +| 권한 실행 | --privileged 플래그 사용 금지 | +| root 실행 | 컨테이너 내 non-root 사용자 | +| 네트워크 | 불필요한 포트 노출 금지 | + +#### Docker 점검 명령어 + +```bash +# 특권 모드 컨테이너 확인 +docker ps --quiet | xargs docker inspect --format '{{.Name}}: Privileged={{.HostConfig.Privileged}}' + +# root로 실행 중인 컨테이너 +docker ps --quiet | xargs docker inspect --format '{{.Name}}: User={{.Config.User}}' +``` + +### Kubernetes 보안 점검 + +```bash +# Pod Security 확인 +kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.containers[].securityContext.privileged==true) | .metadata.name' + +# ServiceAccount 권한 확인 +kubectl get clusterrolebindings -o json | jq '.items[] | select(.subjects[].kind=="ServiceAccount")' +``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 가상화 | 하이퍼바이저 계정, 네트워크 분리 | 최우선 | +| 클라우드 | IAM, 최소 권한, 스토리지 보안 | 최우선 | +| 컨테이너 | 이미지 취약점, 권한 제한 | 높음 | + +--- + +*다음 장: 11장. PC 및 단말기 점검* + + +--- + +# 11장. PC 및 단말기 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +PC 및 단말기는 사용자와 직접 접촉하는 엔드포인트입니다. 이 장에서는 18개의 점검 항목(PC-01 ~ PC-18)을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ PC/단말기 취약점 점검 영역 (18개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ 사용자 PC │ │ +│ │ (엔드포인트) │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌───────────────────────┼───────────────────────┐ │ +│ │ │ │ │ │ │ +│ ▼ ▼ ▼ ▼ ▼ │ +│ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ +│ │ 계정 │ │ 접근 │ │ 패치 │ │ 보안 │ │ 데이터│ │ +│ │ 관리 │ │ 관리 │ │ 관리 │ │ 관리 │ │ 보호 │ │ +│ │PC-01~4│ │PC-05~11│ │PC-12~13│ │PC-14~18│ │ (통합)│ │ +│ │(4개) │ │(7개) │ │(2개) │ │(5개) │ │ │ │ +│ │ │ │ │ │ │ │ │ │ │ │ +│ │• 불필 │ │• 공유 │ │• OS │ │• 백신 │ │• 암호 │ │ +│ │ 요 │ │ 폴더 │ │ 패치 │ │• 방화 │ │ 화 │ │ +│ │ 계정 │ │• USB │ │• 앱 │ │ 벽 │ │• DLP │ │ +│ │• 화면 │ │ 제한 │ │ 패치 │ │ │ │ │ │ +│ │ 보호 │ │ │ │ │ │ │ │ │ │ +│ └───────┘ └───────┘ └───────┘ └───────┘ └───────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────┐ │ +│ │ 통합 엔드포인트 보안 │ │ +│ │ (EDR / MDM / NAC) │ │ +│ └───────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 계정 관리 | PC-01 ~ PC-04 | 4 | +| 접근 관리 | PC-05 ~ PC-11 | 7 | +| 패치 관리 | PC-12 ~ PC-13 | 2 | +| 보안 관리 | PC-14 ~ PC-18 | 5 | + +--- + +## 11-1. 계정 관리 (PC-01 ~ PC-04) + +### PC-01. 불필요한 계정 제거 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 미사용 계정을 통한 비인가 접근 방지 | + +#### 점검 방법 (Windows) + +```powershell +# 로컬 계정 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon + +# Guest 계정 비활성화 확인 +Get-LocalUser -Name "Guest" | Select-Object Enabled +``` + +--- + +### PC-03. 화면 보호기 설정 + +| 항목 | 내용 | +|------|------| +| **중요도** | 중 | +| **권장 설정** | 10분 이내, 암호 보호 | + +#### 점검 방법 (Windows 레지스트리) + +```powershell +# 레지스트리 확인 +Get-ItemProperty -Path "HKCU:\Control Panel\Desktop" | Select-Object ScreenSaveActive, ScreenSaverIsSecure, ScreenSaveTimeOut +``` + +--- + +## 11-2. 접근 관리 (PC-05 ~ PC-11) + +### PC-05. 공유 폴더 점검 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 불필요한 공유 제거 | + +#### 점검 방법 + +```powershell +# 공유 폴더 확인 +Get-SmbShare | Select-Object Name, Path, Description + +# Everyone 접근 가능 공유 확인 +Get-SmbShareAccess -Name "공유명" | Where-Object {$_.AccountName -eq "Everyone"} +``` + +--- + +### PC-08. 이동식 저장매체 사용 제한 + +| 항목 | 내용 | +|------|------| +| **중요도** | 중 | +| **점검 목적** | USB 등을 통한 데이터 유출 방지 | + +#### 그룹 정책 설정 + +``` +컴퓨터 구성 > 관리 템플릿 > 시스템 > 이동식 저장소 액세스 +- 이동식 디스크: 읽기 권한 거부 +- 이동식 디스크: 쓰기 권한 거부 +``` + +--- + +## 11-3. 패치 관리 (PC-12 ~ PC-13) + +### PC-12. 운영체제 패치 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 최신 보안 패치 적용 | + +#### 점검 방법 + +```powershell +# 최근 설치된 업데이트 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 5 + +# 대기 중인 업데이트 확인 +(New-Object -ComObject Microsoft.Update.Session).CreateUpdateSearcher().Search("IsInstalled=0").Updates | Select-Object Title +``` + +--- + +## 11-4. 보안 관리 (PC-14 ~ PC-18) + +### PC-14. 백신 프로그램 설치 및 업데이트 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 악성코드 방어 | + +#### 점검 방법 (Windows Defender) + +```powershell +# Windows Defender 상태 +Get-MpComputerStatus | Select-Object AntivirusEnabled, RealTimeProtectionEnabled, AntivirusSignatureLastUpdated +``` + +--- + +### PC-17. 개인 방화벽 사용 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 네트워크 공격 방어 | + +#### 점검 방법 + +```powershell +# Windows 방화벽 상태 +Get-NetFirewallProfile | Select-Object Name, Enabled +``` + +--- + +## PC 점검 스크립트 + +```powershell +#=============================================== +# KESE KIT - PC 보안 점검 스크립트 +#=============================================== + +Write-Host "===== PC 보안 점검 =====" -ForegroundColor Cyan + +# PC-01: Guest 계정 +Write-Host "`n[PC-01] Guest 계정 상태" +$guest = Get-LocalUser -Name "Guest" +if ($guest.Enabled) { Write-Host " [취약] Guest 활성화" -ForegroundColor Red } +else { Write-Host " [양호] Guest 비활성화" -ForegroundColor Green } + +# PC-05: 공유 폴더 +Write-Host "`n[PC-05] 공유 폴더" +Get-SmbShare | Where-Object {$_.Name -notmatch '\$$'} | ForEach-Object { + Write-Host " 공유: $($_.Name) - $($_.Path)" +} + +# PC-14: 백신 상태 +Write-Host "`n[PC-14] 백신 상태" +$defender = Get-MpComputerStatus +if ($defender.AntivirusEnabled -and $defender.RealTimeProtectionEnabled) { + Write-Host " [양호] Windows Defender 활성화" -ForegroundColor Green +} else { + Write-Host " [취약] Windows Defender 비활성화" -ForegroundColor Red +} + +# PC-17: 방화벽 +Write-Host "`n[PC-17] 방화벽 상태" +$firewallEnabled = (Get-NetFirewallProfile | Where-Object {$_.Enabled -eq $true}).Count +if ($firewallEnabled -eq 3) { + Write-Host " [양호] 모든 프로필 활성화" -ForegroundColor Green +} else { + Write-Host " [취약] 일부 프로필 비활성화" -ForegroundColor Red +} + +Write-Host "`n===== 점검 완료 =====" -ForegroundColor Cyan +``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 계정 관리 | 불필요 계정, 화면 보호기 | 높음 | +| 접근 관리 | 공유 폴더, 이동식 매체 | 높음 | +| 패치 관리 | OS 패치 | 최우선 | +| 보안 관리 | 백신, 방화벽 | 최우선 | + +--- + +*다음 장: 12장. 제어시스템(OT) 점검* + + +--- + +# 12장. 제어시스템(OT) 점검 + +> Part II. 기술적 취약점 점검 + +--- + +## 개요 + +제어시스템(OT, Operational Technology)은 발전소, 공장, 교통 등 물리적 프로세스를 제어합니다. IT 시스템과 다른 특수성이 있어 별도의 점검 방법이 필요합니다. 이 장에서는 45개의 점검 항목(C-01 ~ C-45)을 다룹니다. + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 계정 관리 | C-01 ~ C-08 | 8 | +| 서비스 관리 | C-09 ~ C-14 | 6 | +| 패치 관리 | C-15 ~ C-18 | 4 | +| 네트워크 접근통제 | C-19 ~ C-24 | 6 | +| 물리적 접근통제 | C-25 ~ C-27 | 3 | +| 보안위협 탐지 | C-28 ~ C-30 | 3 | +| 복구 대응 | C-31 ~ C-38 | 8 | +| 보안 관리 | C-39 ~ C-44 | 6 | +| 교육 훈련 | C-45 | 1 | + +--- + +## 12-1. 제어시스템 특수성 + +### IT vs OT 비교 + +| 항목 | IT 시스템 | OT/제어시스템 | +|------|----------|--------------| +| **우선순위** | 기밀성 > 무결성 > 가용성 | **가용성** > 무결성 > 기밀성 | +| **가동 시간** | 재부팅 가능 | 24/7 연속 운전 | +| **패치 적용** | 정기 패치 | 유지보수 기간에만 | +| **수명** | 3~5년 | 15~20년 | +| **프로토콜** | TCP/IP | Modbus, DNP3, OPC 등 | + +> **WARNING** +> 제어시스템 점검 시 **가용성**을 최우선으로 고려해야 합니다. 시스템 중단은 물리적 피해로 이어질 수 있습니다. + +--- + +## 12-2. 계정/서비스 관리 (C-01 ~ C-14) + +### C-01. 기본 계정 비밀번호 변경 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **대상** | HMI, PLC, SCADA 서버 | +| **특이사항** | 벤더 기본 비밀번호 변경 | + +#### 주요 제어시스템 기본 계정 + +| 시스템 | 기본 계정 | 조치 | +|--------|----------|------| +| Siemens S7 | (없음) | 비밀번호 설정 | +| Allen Bradley | (기본값) | 변경 필수 | +| Schneider | admin | 변경 필수 | + +--- + +### C-09. 불필요한 서비스 비활성화 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 공격 표면 최소화 | + +#### 비활성화 권장 + +- 원격 데스크톱 (필요 시 제한) +- 파일 공유 +- 웹 서버 (HMI 외) +- USB 자동 실행 + +--- + +## 12-3. 네트워크/물리적 접근통제 (C-19 ~ C-27) + +### C-19. 네트워크 분리 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | IT/OT 네트워크 분리 | + +#### 권장 아키텍처 (Purdue 모델) + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Purdue 모델 기반 IT/OT 분리 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Level 5: 기업 네트워크 (인터넷, ERP, 이메일) │ │ +│ └─────────────────────────┬───────────────────────────────┘ │ +│ │ ← DMZ / 방화벽 │ +│ ┌─────────────────────────┴───────────────────────────────┐ │ +│ │ Level 4: 비즈니스 시스템 (생산계획, 재고관리) │ │ +│ └─────────────────────────┬───────────────────────────────┘ │ +│ │ ← 방화벽 (IT/OT 경계) │ +│ ╔═════════════════════════╧═══════════════════════════════╗ │ +│ ║ OT 영역 (제어시스템) ║ │ +│ ╠═════════════════════════════════════════════════════════╣ │ +│ ║ ┌───────────────────────────────────────────────────┐ ║ │ +│ ║ │ Level 3: 제조 운영 시스템 (MES, Historian) │ ║ │ +│ ║ └───────────────────────┬───────────────────────────┘ ║ │ +│ ║ │ ║ │ +│ ║ ┌───────────────────────┴───────────────────────────┐ ║ │ +│ ║ │ Level 2: 감시 제어 (SCADA 서버, HMI) │ ║ │ +│ ║ └───────────────────────┬───────────────────────────┘ ║ │ +│ ║ │ ║ │ +│ ║ ┌───────────────────────┴───────────────────────────┐ ║ │ +│ ║ │ Level 1: 기본 제어 (PLC, RTU, DCS) │ ║ │ +│ ║ └───────────────────────┬───────────────────────────┘ ║ │ +│ ║ │ ║ │ +│ ║ ┌───────────────────────┴───────────────────────────┐ ║ │ +│ ║ │ Level 0: 물리적 프로세스 (센서, 액추에이터) │ ║ │ +│ ║ └───────────────────────────────────────────────────┘ ║ │ +│ ╚═════════════════════════════════════════════════════════╝ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +### C-25. 물리적 접근 제한 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 제어실/장비실 물리적 보안 | + +#### 점검 포인트 + +- 제어실 출입 통제 +- CCTV 설치 +- 출입 기록 관리 +- 잠금 장치 (캐비닛, 단말기) + +--- + +## 12-4. 보안위협 탐지 및 복구 (C-28 ~ C-38) + +### C-28. 비정상 트래픽 탐지 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | OT 환경 IDS 운영 | + +#### 권장 사항 + +- OT 전용 IDS 도입 (Claroty, Nozomi 등) +- 비정상 프로토콜 탐지 +- 알람 임계값 설정 + +--- + +### C-31. 백업 및 복구 절차 + +| 항목 | 내용 | +|------|------| +| **중요도** | 상 | +| **점검 목적** | 장애 시 신속한 복구 | + +#### 백업 대상 + +| 대상 | 백업 주기 | 보관 장소 | +|------|:--------:|----------| +| PLC 프로그램 | 변경 시 | 오프라인 | +| HMI 설정 | 주간 | 별도 서버 | +| SCADA DB | 일간 | 백업 서버 | +| 네트워크 설정 | 변경 시 | 문서화 | + +--- + +## 제어시스템 점검 시 주의사항 + +> **WARNING** +> 제어시스템 점검 시 다음 사항을 반드시 준수하세요. + +1. **사전 협의**: 운영 담당자와 점검 일정 협의 +2. **가동 중 점검 최소화**: 가능하면 유지보수 기간에 점검 +3. **시뮬레이션 환경**: 가능하면 테스트 환경에서 먼저 검증 +4. **비상 연락망**: 문제 발생 시 즉시 대응 가능한 체계 +5. **롤백 계획**: 변경 전 복구 계획 수립 + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 계정/서비스 | 기본 비밀번호, 불필요 서비스 | 높음 | +| 네트워크 | IT/OT 분리 | 최우선 | +| 물리적 보안 | 출입 통제 | 높음 | +| 탐지/복구 | IDS, 백업 | 높음 | + +--- + +## Part II 완료 + +Part II (기술적 취약점 점검)에서 다룬 시스템: + +- 3장: Unix/Linux 서버 +- 4장: Windows 서버 +- 5장: 웹 서비스 +- 6장: 웹 애플리케이션 +- 7장: DBMS +- 8장: 네트워크 장비 +- 9장: 보안 장비 +- 10장: 가상화/클라우드 +- 11장: PC/단말기 +- 12장: 제어시스템(OT) + +--- + +*다음 장: 13장. 정보보호 정책 및 조직 (Part III 시작)* + + +--- + +# 13장. 정보보호 정책 및 조직 + +> Part III. 관리적·물리적 취약점 점검 + +--- + +## 개요 + +관리적 취약점 점검은 기술적 점검과 달리 정책, 지침, 절차 등 문서를 검토하고 관련자 인터뷰를 수행합니다. 이 장에서는 정보보호 정책(A-1 ~ A-7)과 정보보호 조직(A-8 ~ A-9)을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 정보보호 정책 및 조직 체계 (A-1 ~ A-9) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ 기관장 승인 │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────────────────────────────────────────────────────┐ │ +│ │ 정보보호 정책 (A-1 ~ A-7) │ │ +│ ├──────────────────────────────────────────────────────────┤ │ +│ │ A-1 정책 수립 A-2 시행문서 A-3 배포 │ │ +│ │ A-4 타당성검토 A-5 이해관계자 A-6 연간계획 │ │ +│ │ A-7 중장기계획 │ │ +│ └──────────────────────────┬───────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────────────────────────────────────────────────────┐ │ +│ │ 정보보호 조직 (A-8 ~ A-9) │ │ +│ ├──────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌─────────────┐ ┌─────────────┐ │ │ +│ │ │ A-8 전담조직 │ │ A-9 위원회 │ │ │ +│ │ │ │ │ │ │ │ +│ │ │ • CISO │ │ • 심의/의결 │ │ │ +│ │ │ • 정책팀 │◀─────────▶│ • 예산 승인 │ │ │ +│ │ │ • 관제팀 │ │ • 계획 승인 │ │ │ +│ │ │ • 기술팀 │ │ │ │ │ +│ │ └─────────────┘ └─────────────┘ │ │ +│ │ │ │ +│ └──────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 정보보호 정책 | A-1 ~ A-7 | 7 | +| 정보보호 조직 | A-8 ~ A-9 | 2 | + +> **TIP** +> 관리적 점검은 문서 점검 + 인터뷰 + 현장 실사의 복합적인 점검이 필요합니다. 사전에 필요한 문서 목록을 정리해두면 효율적입니다. + +--- + +## 13-1. 정보보호 정책 (A-1 ~ A-7) + +### A-1. 정보보호 정책 수립 및 경영진 승인 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 조직 전반에 적용하고 있는 정보보호 정책/지침 수립 및 경영진의 승인 획득 | +| **관련 조직** | 정보보호 부서 | + +#### 점검 포인트 + +- 기관 자체의 최상위 정보보호 정책 문서 존재 여부 +- 최고경영자(기관장)의 공식 승인 여부 (결재문 또는 서명본) +- 정보보호 활동의 근거와 기준이 명확히 제시되어 있는지 + +#### 판정 기준 + +| 판정 | 기준 | +|:----:|------| +| 양호 | 최상위 정보보호 정책이 수립되어 있고 기관장 승인을 받음 | +| 부분이행 | 정책은 있으나 승인 이력이 불분명 | +| 취약 | 정보보호 정책이 수립되어 있지 않음 | + +#### 관계 법규 + +| 구분 | 법규 | +|------|------| +| 공통 | 정보통신기반 보호법 제10조(보호지침) | +| 공통 | 개인정보 보호법 제29조(안전조치의무) | +| 공공기관 | 국가 정보보안 기본지침 제4조, 제7조 | +| 금융회사 | 전자금융거래법 제21조(안전성의 확보의무) | + +--- + +### A-2. 시행문서 수립 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호 정책의 시행을 위해 필요한 방법, 절차, 주기 등을 정의하고 문서화 | +| **관련 조직** | 정보보호 부서, 시스템 운영 부서 | + +#### 필요 시행문서 예시 + +| 문서 유형 | 예시 | +|----------|------| +| 지침 | 정보시스템 운영 지침, 접근통제 지침 | +| 절차 | 계정관리 절차, 변경관리 절차 | +| 매뉴얼 | 침해사고 대응 매뉴얼 | +| 가이드라인 | 안전한 패스워드 작성 가이드 | + +--- + +### A-3. 정책 공개 및 배포 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호 정책 및 시행문서를 모든 임직원 및 관련자에게 접근하기 쉬운 형태로 제공 | +| **관련 조직** | 정보보호 부서 | + +#### 배포 방법 + +- 사내 게시판 공지 +- 전자우편 배포 +- 그룹웨어 공지 +- 인쇄본 교부 + +--- + +### A-4. 정책 타당성 검토 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호 정책 및 시행문서에 대한 타당성을 주기적으로 또는 중대한 변화 발생 시 검토·평가하여 수정 및 보완 | +| **검토 주기** | 연 1회 이상 | + +#### 검토 시점 + +- 정기 검토: 연 1회 이상 +- 수시 검토: 중대한 변화 발생 시 + - 정보보호 관련 법규 제·개정 + - 조직개편, 신규 서비스 도입 + - 신규 시스템 도입 + - 보안사고 발생 + - 새로운 위협·취약성 발견 + +--- + +### A-5. 이해관계자 검토 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호 정책 및 시행문서의 제·개정 시 이해관계자의 검토를 받고 해당 내용 반영 | +| **관련 조직** | 정보보호 부서, 관련 부서 | + +#### 이해관계자 + +- 정보보호책임자(CISO) +- IT 운영 부서 +- 현업 부서 대표 +- 법무/감사 부서 + +--- + +### A-6. 연간 정보보호 업무 계획 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 연도별 정보보호 업무 세부추진 계획을 수립·이행 | +| **관련 조직** | 정보보호 부서 | + +#### 연간 계획 포함 사항 + +| 항목 | 내용 | +|------|------| +| 취약점 점검 | 연간 점검 일정 및 대상 | +| 교육·훈련 | 임직원 보안 교육 계획 | +| 모의훈련 | 침해사고 대응 훈련 | +| 예산 | 정보보호 예산 확보 계획 | +| 시스템 | 보안시스템 도입·갱신 계획 | + +--- + +### A-7. 중장기 계획 수립 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 기관의 정보보호 강화를 위한 중장기(3년 이상) 계획 수립·이행 | +| **관련 조직** | 정보보호 부서, 경영진 | + +#### 중장기 계획 예시 + +| 연도 | 목표 | +|:----:|------| +| 1년차 | 기반 구축: 정책 체계화, 필수 보안시스템 도입 | +| 2년차 | 고도화: 보안관제 강화, 자동화 도구 구축 | +| 3년차 | 성숙: ISMS 인증 획득, 지속적 개선 체계 | + +--- + +## 13-2. 정보보호 조직 (A-8 ~ A-9) + +### A-8. 정보보호 전담 조직 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호 활동을 계획, 실행, 검토하는 전담 조직 및 담당자 구성 | +| **관련 조직** | 정보보호 부서, 인사 부서 | + +#### 조직 구성 예시 + +``` +[최고경영자(기관장)] + ↓ +[정보보호최고책임자(CISO)] + ↓ +[정보보호 전담 부서] + ├── 정책/기획팀 + ├── 보안관제팀 + └── 기술보안팀 +``` + +#### 점검 포인트 + +- 정보보호 전담 조직 또는 담당자 지정 여부 +- 조직도에 정보보호 조직 명시 여부 +- 담당자의 역할과 책임 정의 여부 + +--- + +### A-9. 정보보호위원회 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호위원회가 구성되어 있으며 위원회의 역할 및 책임을 문서화 | +| **관련 조직** | 정보보호 부서, 경영진 | + +#### 정보보호위원회 구성 + +| 구분 | 역할 | +|------|------| +| 위원장 | 기관장 또는 부기관장 | +| 간사 | 정보보호책임자(CISO) | +| 위원 | 각 부서장, 외부 전문가 | + +#### 위원회 역할 + +- 정보보호 정책 심의·의결 +- 중요 보안사고 대응 방향 결정 +- 정보보호 예산 심의 +- 연간 정보보호 계획 승인 + +#### 운영 주기 + +- 정기회의: 연 2회 이상 +- 임시회의: 중요 사안 발생 시 + +--- + +## 13-3. 정책/지침 문서 템플릿 + +### 정보보호 정책 목차 예시 + +```markdown +제1장 총칙 + 제1조 (목적) + 제2조 (적용범위) + 제3조 (용어의 정의) + 제4조 (책임과 의무) + +제2장 정보보호 조직 + 제5조 (정보보호위원회) + 제6조 (정보보호책임자) + 제7조 (정보보호담당자) + +제3장 정보자산 관리 + 제8조 (자산분류) + 제9조 (자산보호) + +제4장 인적보안 + 제10조 (채용 시 보안) + 제11조 (재직 중 보안) + 제12조 (퇴직 시 보안) + +제5장 물리적 보안 + 제13조 (보호구역) + 제14조 (출입통제) + +제6장 기술적 보안 + 제15조 (접근통제) + 제16조 (암호화) + 제17조 (네트워크 보안) + +제7장 운영 보안 + 제18조 (변경관리) + 제19조 (백업) + 제20조 (로그관리) + +제8장 사고대응 + 제21조 (사고 신고) + 제22조 (사고 처리) + 제23조 (재발 방지) + +제9장 보칙 + 제24조 (위반 시 조치) + 제25조 (시행일) +``` + +--- + +### 정보보호 정책 타당성 검토 체크리스트 + +| 검토 항목 | Y/N | 비고 | +|----------|:---:|------| +| 관련 법령 변경사항 반영 여부 | | | +| 조직 변경사항 반영 여부 | | | +| 시스템 변경사항 반영 여부 | | | +| 용어의 일관성 | | | +| 역할/책임의 명확성 | | | +| 실행 가능성 | | | +| 측정 가능한 기준 포함 여부 | | | + +--- + +## 점검 수행 가이드 + +### 사전 준비 + +1. **문서 요청 목록 작성** + - 정보보호 정책 + - 시행 지침/절차 + - 조직도 + - 정보보호위원회 회의록 + - 연간 계획서 + - 중장기 계획서 + +2. **인터뷰 대상자 선정** + - 정보보호책임자(CISO) + - 정보보호담당자 + - IT 운영 담당자 + +### 점검 시 확인 사항 + +| 점검 항목 | 확인 방법 | +|----------|----------| +| A-1 | 정책 문서 + 승인 결재문 확인 | +| A-2 | 시행문서 존재 여부 + 제개정 이력 | +| A-3 | 배포 이력 또는 게시 위치 확인 | +| A-4 | 타당성 검토 결과 문서 | +| A-5 | 이해관계자 검토 의견서 | +| A-6 | 연간 계획서 및 이행 실적 | +| A-7 | 중장기 계획서 | +| A-8 | 조직도 + 직무기술서 | +| A-9 | 위원회 규정 + 회의록 | + +--- + +## 요약 + +| 항목 | 핵심 점검 내용 | 우선순위 | +|------|---------------|:--------:| +| A-1 | 최상위 정책 + 기관장 승인 | 최우선 | +| A-2 | 시행문서(지침/절차) 수립 | 최우선 | +| A-6 | 연간 계획 수립·이행 | 높음 | +| A-8 | 전담 조직/담당자 지정 | 최우선 | +| A-9 | 정보보호위원회 구성·운영 | 높음 | + +--- + +*다음 장: 14장. 자산관리 및 위험관리* + + +--- + +# 14장. 자산관리 및 위험관리 + +> Part III. 관리적·물리적 취약점 점검 + +--- + +## 개요 + +자산관리와 위험관리는 정보보호의 기반입니다. 보호할 자산을 식별하고, 위험을 평가해야 적절한 보호대책을 수립할 수 있습니다. 이 장에서는 자산분류(A-10 ~ A-14), 위험관리(A-15 ~ A-17), 감사(A-18 ~ A-20)를 다룹니다. + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 자산분류 | A-10 ~ A-14 | 5 | +| 위험관리 | A-15 ~ A-17 | 3 | +| 감사 | A-18 ~ A-20 | 3 | + +--- + +## 14-1. 자산분류 (A-10 ~ A-14) + +### A-10. 자산분류기준 수립 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 주요정보통신기반시설 내 모든 자산(인력, 시설, 장비 등)을 식별하여 자산분류기준을 수립하고 문서화 | +| **관련 조직** | 정보보호 부서, 자산관리 부서 | + +#### 자산 유형 + +| 유형 | 예시 | +|------|------| +| 정보자산 | 데이터베이스, 문서, 소프트웨어 | +| 물리자산 | 서버, 네트워크 장비, PC | +| 인적자산 | 시스템 관리자, 개발자 | +| 시설자산 | 전산실, 통신실, 보호구역 | + +#### 분류 기준 예시 + +| 등급 | 기밀성 | 무결성 | 가용성 | +|:----:|--------|--------|--------| +| 1등급 | 비밀 | 손상 시 업무 불가 | 즉시 복구 필요 | +| 2등급 | 대외비 | 손상 시 업무 지장 | 4시간 내 복구 | +| 3등급 | 일반 | 복구 가능 | 1일 내 복구 | + +--- + +### A-11. 보안등급별 분류 관리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보자산을 보안등급과 중요도 등에 따라 분류하여 관리 | +| **관련 조직** | 정보보호 부서, 자산관리 부서 | + +#### 보안등급 분류 + +| 등급 | 정의 | 예시 | +|:----:|------|------| +| 극비 | 공개 시 국가안보에 영향 | 암호키, 핵심 설계도 | +| 비밀 | 공개 시 조직에 심각한 피해 | 개인정보, 재무정보 | +| 대외비 | 공개 시 조직에 피해 | 내부 업무 문서 | +| 일반 | 공개 가능 | 홍보자료, 공개 문서 | + +--- + +### A-12. 자산 목록 관리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 조직의 주요 자산 목록을 작성하고, 정기적인 자산 현황 조사 결과 및 변경 사항(취득, 폐기, 양도 등)을 자산 목록에 반영하여 최신으로 유지 관리 | +| **관련 조직** | 정보보호 부서, 자산관리 부서 | + +#### 자산 목록 필수 항목 + +| 항목 | 설명 | +|------|------| +| 자산 식별번호 | 고유 식별자 | +| 자산명 | 장비명/시스템명 | +| 분류 | 서버/네트워크/단말기 등 | +| 위치 | 설치 장소 | +| 관리자 | 담당자명/부서 | +| 보안등급 | 1등급/2등급/3등급 | +| 도입일 | 취득 일자 | +| 변경이력 | 이동/교체/폐기 이력 | + +--- + +### A-13. 자산 취급절차 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 자산의 등급에 따른 취급절차(생성·도입, 저장, 이용, 파기) 및 보호대책을 수립·이행 | +| **관련 조직** | 정보보호 부서, 자산관리 부서 | + +#### 자산 생애주기별 보호대책 + +| 단계 | 1등급 | 2등급 | 3등급 | +|------|-------|-------|-------| +| 도입 | 승인 필수 | 승인 필수 | 등록 | +| 저장 | 암호화 + 격리 | 암호화 | 일반 저장 | +| 이용 | 접근로그 + 승인 | 접근로그 | 기본 통제 | +| 파기 | 완전삭제 + 증명서 | 완전삭제 | 포맷/삭제 | + +--- + +### A-14. 자산 관리자 지정 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보자산별로 관리자 및 관리 책임자가 지정되어 있으며, 목록을 최신으로 유지·관리 | +| **관련 조직** | 정보보호 부서, 각 부서 | + +#### 역할 정의 + +| 역할 | 책임 | +|------|------| +| 자산 소유자 | 자산에 대한 최종 책임 | +| 자산 관리자 | 일상적인 관리 및 운영 | +| 자산 사용자 | 허가된 범위 내 사용 | + +--- + +## 14-2. 위험관리 (A-15 ~ A-17) + +### A-15. 서비스 현황 파악 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 주요정보통신기반시설의 서비스 현황을 식별하고 업무 절차와 흐름을 파악하여 문서화 | +| **관련 조직** | 정보보호 부서, 시스템 운영 부서 | + +#### 서비스 현황 문서화 내용 + +- 서비스 목록 및 설명 +- 업무 흐름도(Data Flow Diagram) +- 시스템 구성도 +- 네트워크 토폴로지 +- 연계 시스템 현황 + +--- + +### A-16. 위험 평가 수행 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 연 1회 이상 정기적으로 위험 평가 수행 | +| **관련 조직** | 정보보호 부서 | + +#### 위험 평가 절차 + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 위험 평가 프로세스 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ 1. 자산 │────▶│ 2. 위협 │────▶│ 3. 취약점 │ │ +│ │ 식별 │ │ 식별 │ │ 식별 │ │ +│ └───────────┘ └───────────┘ └─────┬─────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────┐ │ +│ │ 4. 위험도 산정 │ │ +│ │ │ │ +│ │ 위험 = 자산가치│ │ +│ │ × 위협 │ │ +│ │ × 취약점 │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ 5. 위험 처리 방안 결정 │ │ +│ ├─────────────┬─────────────┬─────────────┬───────────────┤ │ +│ │ 위험 감소 │ 위험 전가 │ 위험 회피 │ 위험 수용 │ │ +│ │ (보호대책) │ (보험 등) │ (서비스 폐지)│ (경영진 승인)│ │ +│ └─────────────┴─────────────┴─────────────┴───────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +#### 위험 처리 방안 + +| 방안 | 설명 | 예시 | +|------|------|------| +| 위험 감소 | 보호대책 적용 | 방화벽 도입, 암호화 | +| 위험 전가 | 보험 등으로 전가 | 사이버보험 가입 | +| 위험 회피 | 위험 원천 제거 | 서비스 중단 | +| 위험 수용 | 잔여위험 수용 | 경영진 승인 하에 수용 | + +--- + +### A-17. 보호대책 이행계획 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 위험평가에 따른 연간 보호대책 이행계획 수립 및 경영진 보고 | +| **관련 조직** | 정보보호 부서, 경영진 | + +#### 보호대책 이행계획 포함 사항 + +| 항목 | 내용 | +|------|------| +| 대책명 | 구체적인 보호대책 | +| 담당자 | 이행 책임자 | +| 일정 | 시작일/완료일 | +| 예산 | 소요 비용 | +| 효과 | 위험 감소 수준 | + +--- + +## 14-3. 감사 (A-18 ~ A-20) + +### A-18. 법적 요구사항 준수 검토 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 법적 요구사항의 준수여부를 연 1회 이상 정기적 검토 | +| **관련 조직** | 정보보호 부서, 법무 부서 | + +#### 주요 법적 요구사항 + +| 법령 | 주요 내용 | +|------|----------| +| 정보통신기반보호법 | 취약점 분석·평가, 보호대책 수립 | +| 개인정보보호법 | 안전조치의무, 접근통제 | +| 전자금융거래법 | 전자금융거래 안전성 확보 | +| 정보통신망법 | 기술적·관리적 보호조치 | + +--- + +### A-19. 정보보호 감사 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 주기적으로 정보보호 감사 계획 수립·이행 | +| **관련 조직** | 감사 부서, 정보보호 부서 | + +#### 감사 유형 + +| 유형 | 주기 | 수행 주체 | +|------|:----:|----------| +| 정기 감사 | 연 1회 이상 | 내부 감사팀 | +| 수시 감사 | 필요 시 | 내부 감사팀 | +| 외부 감사 | 필요 시 | 외부 전문기관 | + +--- + +### A-20. 감사 결과 보고 및 조치 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 감사결과를 경영진에게 보고하여 적정한 사후관리를 시행 | +| **관련 조직** | 감사 부서, 경영진 | + +#### 감사 후속 조치 + +1. 감사 결과 보고서 작성 +2. 경영진 보고 +3. 시정조치 계획 수립 +4. 시정조치 이행 +5. 이행 확인 + +--- + +## 14-4. 자산 목록 관리 자동화 + +### 자산 목록 템플릿 (Excel/CSV) + +```csv +자산ID,자산명,유형,위치,관리자,보안등급,도입일,상태,비고 +A001,DB서버01,서버,전산실A,김관리,1등급,2024-01-15,운영,Oracle DB +A002,웹서버01,서버,전산실A,김관리,2등급,2024-02-20,운영,Apache +A003,스위치01,네트워크,통신실,박네트,2등급,2023-05-10,운영,Cisco +``` + +### 자산 수집 스크립트 (PowerShell) + +```powershell +#=============================================== +# KESE KIT - 자산 정보 수집 스크립트 +#=============================================== + +$report = @() + +# 서버 정보 수집 +Get-ADComputer -Filter * -Properties * | ForEach-Object { + $report += [PSCustomObject]@{ + 자산명 = $_.Name + 유형 = "서버" + 운영체제 = $_.OperatingSystem + IP주소 = $_.IPv4Address + 마지막로그온 = $_.LastLogonDate + } +} + +# CSV 출력 +$report | Export-Csv -Path "asset_inventory.csv" -Encoding UTF8 -NoTypeInformation + +Write-Host "자산 목록 생성 완료: asset_inventory.csv" +``` + +### 자산 변경 모니터링 (Python) + +```python +""" +KESE KIT - 자산 변경 모니터링 +이전 스냅샷과 비교하여 변경사항 탐지 +""" +import pandas as pd +from datetime import datetime + +def compare_assets(old_file, new_file): + """자산 목록 비교""" + old_df = pd.read_csv(old_file) + new_df = pd.read_csv(new_file) + + # 신규 자산 + new_assets = new_df[~new_df['자산ID'].isin(old_df['자산ID'])] + + # 삭제된 자산 + removed_assets = old_df[~old_df['자산ID'].isin(new_df['자산ID'])] + + # 변경된 자산 + merged = old_df.merge(new_df, on='자산ID', suffixes=('_old', '_new')) + changed = merged[merged['상태_old'] != merged['상태_new']] + + return { + 'new': new_assets, + 'removed': removed_assets, + 'changed': changed + } + +if __name__ == "__main__": + result = compare_assets("assets_old.csv", "assets_new.csv") + print(f"신규: {len(result['new'])}건") + print(f"삭제: {len(result['removed'])}건") + print(f"변경: {len(result['changed'])}건") +``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 자산분류 | 자산 목록 + 분류기준 | 최우선 | +| 자산관리 | 관리자 지정 + 최신화 | 높음 | +| 위험관리 | 연간 위험평가 | 최우선 | +| 감사 | 연간 감사 + 결과 보고 | 높음 | + +--- + +*다음 장: 15장. 인적보안 및 외부자보안* + + +--- + +# 15장. 인적보안 및 외부자보안 + +> Part III. 관리적·물리적 취약점 점검 + +--- + +## 개요 + +인적보안은 내부 직원에 대한 보안을, 외부자보안은 협력업체와 외주 인력에 대한 보안을 다룹니다. 인적 요소는 가장 취약한 보안 고리가 될 수 있으므로 체계적인 관리가 필요합니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 인적보안 생애주기 관리 체계 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ 내부 직원 (A-21~A-26) │ │ +│ └─────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ 채용 │────▶│ 재직 │────▶│ 이동 │────▶│ 퇴직 │ │ +│ │ │ │ │ │ │ │ │ │ +│ │• 적격심사│ │• 직무정의│ │• 권한조정│ │• 권한회수│ │ +│ │• 서약서 │ │• 교육 │ │• 인수인계│ │• 자산반납│ │ +│ │ 징구 │ │• 모니터링│ │ │ │• 서약서 │ │ +│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ 외부자 (A-27~A-33) │ │ +│ └─────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ 계약 │────▶│ 수행 │────▶│ 점검 │────▶│ 종료 │ │ +│ │ │ │ │ │ │ │ │ │ +│ │• 보안조항│ │• 현황관리│ │• 준수점검│ │• 계정삭제│ │ +│ │• 서약서 │ │• 방문절차│ │• 위반조치│ │• 자료반납│ │ +│ │ │ │ │ │ │ │• 서약서 │ │ +│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 인적보안 | A-21 ~ A-26 | 6 | +| 외부자보안 | A-27 ~ A-33 | 7 | + +--- + +## 15-1. 인적보안 (A-21 ~ A-26) + +### A-21. 직무 책임과 역할 정의 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호 관련 직무자의 책임과 역할을 명확히 정의하여 문서화 | +| **관련 조직** | 정보보호 부서, 인사 부서 | + +#### 직무기술서 포함 사항 + +| 항목 | 설명 | +|------|------| +| 직무명 | 정보보호담당자, 시스템관리자 등 | +| 역할 | 수행해야 할 업무 | +| 책임 | 책임 범위 및 권한 | +| 보고라인 | 상위 보고 체계 | +| 자격요건 | 필요한 자격증, 경력 등 | + +--- + +### A-22. 적격심사 수행 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 기반시설 업무 담당자 지정 시 신원, 업무능력, 교육정도, 경력 등에 대한 적격심사 수행 | +| **관련 조직** | 정보보호 부서, 인사 부서 | + +#### 적격심사 항목 + +| 항목 | 확인 내용 | +|------|----------| +| 신원 확인 | 주민등록, 병역사항 등 | +| 학력 확인 | 학위 증명서 | +| 경력 확인 | 경력증명서, 재직증명서 | +| 자격 확인 | 자격증 사본 | +| 신용 확인 | 신용조회 (필요 시) | + +> **TIP** +> 공공기관의 경우 「보안업무규정」에 따른 신원조사가 필요할 수 있습니다. + +--- + +### A-23. 채용 시 보안 서약서 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 기반시설 업무 담당자 지정 시 보안 서약서나 비밀유지 확약서 작성 | +| **관련 조직** | 정보보호 부서, 인사 부서 | + +#### 보안 서약서 포함 내용 + +- 비밀유지 의무 +- 정보보호 정책 준수 의무 +- 위반 시 처벌 조항 +- 퇴직 후 비밀유지 의무 +- 서명 및 날인 + +--- + +### A-24. 퇴직 시 비밀유지 확약서 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 기반시설 업무 담당자 지정 해제 시 별도의 비밀유지 확약서 작성 | +| **관련 조직** | 정보보호 부서, 인사 부서 | + +#### 퇴직자 비밀유지 확약서 포함 내용 + +- 재직 중 취득한 비밀의 유지 의무 +- 비밀유지 기간 (예: 퇴직 후 3년) +- 위반 시 법적 책임 +- 손해배상 조항 + +--- + +### A-25. 퇴직 시 권한 회수 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 기반시설 업무 담당자 지정 해제 시 지체 없는 정보자산 반납, 접근권한 회수·조정, 결과 확인 등의 절차 수립·이행 | +| **관련 조직** | 정보보호 부서, 인사 부서, IT 부서 | + +#### 퇴직 처리 체크리스트 + +| 항목 | 담당 | 확인 | +|------|------|:----:| +| 출입카드 회수 | 보안팀 | ☐ | +| PC/노트북 반납 | IT팀 | ☐ | +| 시스템 계정 삭제 | IT팀 | ☐ | +| 이메일 계정 비활성화 | IT팀 | ☐ | +| VPN 권한 삭제 | 보안팀 | ☐ | +| 보안 서약서 징구 | 인사팀 | ☐ | +| 휴대용 저장매체 반납 | IT팀 | ☐ | + +--- + +### A-26. 보안 위반 시 징계 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 기반시설 업무 관련자가 정보보호 정책을 위반할 경우 이에 대한 징계와 관련된 사항을 규정에 명시 | +| **관련 조직** | 정보보호 부서, 인사 부서, 법무 부서 | + +#### 징계 수준 예시 + +| 위반 유형 | 징계 수준 | +|----------|----------| +| 경미한 위반 (1회) | 경고, 주의 | +| 반복 위반 | 감봉, 정직 | +| 중대한 위반 | 해고, 법적 조치 | +| 고의적 유출 | 해고 + 민·형사 조치 | + +--- + +## 15-2. 외부자보안 (A-27 ~ A-33) + +### A-27. 외부자 보안 서약서 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 외부 서비스 이용 및 업무 위탁에 따른 신규 외부자에 대한 보안 서약서 작성 | +| **관련 조직** | 정보보호 부서, 계약 부서 | + +#### 외부자 범위 + +- 용역업체 직원 +- 파견 인력 +- 유지보수 업체 +- 협력업체 담당자 +- 외주 개발자 + +--- + +### A-28. 외부자 현황 관리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 기반시설 범위 내에서 발생하고 있는 외부 서비스 이용 및 업무 위탁 현황을 식별 및 관리 | +| **관련 조직** | 정보보호 부서, 계약 부서 | + +#### 외부자 현황 관리 항목 + +| 항목 | 내용 | +|------|------| +| 업체명 | 계약 업체명 | +| 계약 기간 | 시작일 ~ 종료일 | +| 업무 범위 | 위탁 업무 내용 | +| 담당자 | 업체 측 담당자 정보 | +| 접근 권한 | 부여된 시스템/구역 | +| 서약서 | 보안 서약서 징구 여부 | + +--- + +### A-29. 계약서 내 보안 요구사항 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 외부 서비스 이용 및 업무 위탁에 따른 정보보호 요구사항을 식별하고 이를 계약서 또는 협정서에 명시 | +| **관련 조직** | 정보보호 부서, 계약 부서, 법무 부서 | + +#### 계약서 내 보안 조항 예시 + +- 비밀유지 의무 +- 재위탁 금지 또는 승인 조건 +- 보안사고 발생 시 통지 의무 +- 보안 점검 수용 의무 +- 계약 종료 시 자료 반환/삭제 +- 보안 위반 시 손해배상 + +--- + +### A-30. 임시 방문자 보안 고지 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 유지보수 등을 위한 외부자 임시 방문 시 정보 및 자산 접근에 대한 보안 규정 사전 고지 | +| **관련 조직** | 정보보호 부서, 시설관리 부서 | + +#### 임시 방문자 절차 + +``` +1. 방문 사전 신청 (담당자 → 보안팀) + ↓ +2. 방문 승인 + ↓ +3. 방문 시 신분 확인 + 방문증 발급 + ↓ +4. 보안 규정 고지 (서명 징구) + ↓ +5. 담당자 동행 하 작업 수행 + ↓ +6. 퇴실 시 방문증 반납 + 휴대품 검사 +``` + +--- + +### A-31. 외부자 보안 점검 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 외부자가 계약서, 협정서, 내부정책에 명시된 정보보호 요구사항을 준수하고 있는지 주기적으로 점검 또는 감사를 수행 | +| **관련 조직** | 정보보호 부서, 감사 부서 | + +#### 외부자 점검 항목 + +| 영역 | 점검 항목 | +|------|----------| +| 계정 관리 | 불필요한 계정 존재 여부 | +| 접근 통제 | 권한 범위 준수 여부 | +| 작업 기록 | 작업 로그 유지 여부 | +| 자료 관리 | 자료 유출 여부 | +| 보안 교육 | 교육 이수 여부 | + +--- + +### A-32. 외부자 보안 위반 조치 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 외부자의 보안 관련 사항 위반이나 침해사고 발생 시, 이에 따른 조치 수행 | +| **관련 조직** | 정보보호 부서, 법무 부서, 계약 부서 | + +#### 위반 시 조치 단계 + +| 단계 | 조치 | +|:----:|------| +| 1단계 | 경고 및 시정 요구 | +| 2단계 | 위약금 부과 | +| 3단계 | 계약 해지 | +| 4단계 | 법적 조치 (손해배상) | + +--- + +### A-33. 외부자 계약 종료 시 처리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 외부자의 계약만료, 업무 종료, 담당자 변경 시 자산 반납, 접근권한 삭제 및 비밀유지 확약서 작성 등이 이루어질 수 있도록 보안대책 수립·이행 | +| **관련 조직** | 정보보호 부서, 계약 부서, IT 부서 | + +#### 외부자 종료 처리 체크리스트 + +| 항목 | 담당 | 확인 | +|------|------|:----:| +| 계정 삭제 | IT팀 | ☐ | +| 출입권한 삭제 | 보안팀 | ☐ | +| 장비/자료 반납 | IT팀 | ☐ | +| 비밀유지 서약서 | 계약팀 | ☐ | +| 자료 삭제 확인 | IT팀 | ☐ | +| 인수인계 완료 | 담당 부서 | ☐ | + +--- + +## 15-3. 보안 서약서 템플릿 + +### 입사 시 보안 서약서 + +```markdown +보안 서약서 + +본인은 [기관명]의 주요정보통신기반시설 업무를 수행함에 있어 +다음 사항을 준수할 것을 서약합니다. + +1. 직무상 취득한 비밀 및 중요정보를 외부에 누설하지 않겠습니다. +2. 정보보호 관련 법규 및 내부 규정을 성실히 준수하겠습니다. +3. 업무 목적 외로 정보자산에 접근하지 않겠습니다. +4. 허가 없이 정보를 복사, 반출, 유출하지 않겠습니다. +5. 보안사고 발생 또는 발견 시 즉시 보고하겠습니다. +6. 퇴직 후에도 재직 중 취득한 비밀을 유지하겠습니다. +7. 위 사항을 위반할 경우 관련 법규에 따른 민·형사상 + 책임을 질 것을 확약합니다. + +20XX년 XX월 XX일 + +소속: _______________ +성명: _______________ (서명) +``` + +### 퇴직자 비밀유지 확약서 + +```markdown +비밀유지 확약서 + +본인은 [기관명]을 퇴직함에 있어 다음 사항을 확약합니다. + +1. 재직 중 취득한 모든 비밀 및 중요정보를 퇴직 후에도 + 외부에 누설하지 않겠습니다. +2. 모든 업무 관련 자료를 반납하였으며, 개인적으로 보유한 + 사본이 없음을 확인합니다. +3. 퇴직 후 3년간 본 확약서의 내용을 준수하겠습니다. +4. 위 사항을 위반할 경우 관련 법규에 따른 민·형사상 + 책임을 질 것을 확약합니다. + +20XX년 XX월 XX일 + +소속: _______________ +성명: _______________ (서명) +``` + +### 외부자 보안 서약서 + +```markdown +외부자 보안 서약서 + +본인은 [기관명]의 정보시스템 관련 업무를 수행함에 있어 +다음 사항을 준수할 것을 서약합니다. + +1. 업무상 취득한 정보를 외부에 누설하지 않겠습니다. +2. 업무 목적 외로 정보자산에 접근하지 않겠습니다. +3. 개인 저장매체 사용 금지 등 보안 규정을 준수하겠습니다. +4. 작업 완료 후 모든 자료를 삭제/반납하겠습니다. +5. 계약 종료 후에도 취득한 정보를 유지하지 않겠습니다. +6. 위 사항을 위반할 경우 계약 해지 및 법적 책임을 + 질 것을 확약합니다. + +20XX년 XX월 XX일 + +업체명: _______________ +성명: _______________ (서명) +담당자 확인: _______________ (서명) +``` + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 인적보안 | 직무 정의 + 보안 서약서 | 최우선 | +| 인적보안 | 퇴직 시 권한 회수 | 최우선 | +| 외부자보안 | 계약서 내 보안 요구사항 | 최우선 | +| 외부자보안 | 외부자 현황 관리 | 높음 | +| 외부자보안 | 계약 종료 시 처리 | 최우선 | + +--- + +*다음 장: 16장. 교육·인증·접근통제* + + +--- + +# 16장. 교육·인증·접근통제 + +> Part III. 관리적·물리적 취약점 점검 + +--- + +## 개요 + +교육과 훈련은 인적보안의 핵심이며, 인증과 접근통제는 시스템 보안의 기반입니다. 이 장에서는 교육 및 훈련(A-34 ~ A-38), 인증 및 권한관리(A-39 ~ A-42), 접근통제(A-43 ~ A-55)를 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 교육·인증·접근통제 취약점 점검 영역 (22개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────┐ │ +│ │ 조직원 │ │ +│ │ (사람 중심) │ │ +│ └──────┬──────┘ │ +│ │ │ +│ ┌───────────────────┼───────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ 교육 및 훈련 │ │ 인증 및 │ │ 접근통제 │ │ +│ │ A-34 ~ A-38 │ │ 권한관리 │ │ A-43 ~ A-55 │ │ +│ │ (5개) │ │ A-39 ~ A-42 │ │ (13개) │ │ +│ ├─────────────┤ │ (4개) │ ├─────────────┤ │ +│ │• 교육 계획 │ ├─────────────┤ │• 네트워크 │ │ +│ │• 전체 교육 │ │• 계정/권한 │ │ 분리/통제 │ │ +│ │• 차등 교육 │ │ 정책 │ │• 원격작업 │ │ +│ │• 효과 측정 │ │• 인증 방법 │ │• 망분리 │ │ +│ │• 보안 공지 │ │• 비밀번호 │ │• 무선보안 │ │ +│ │ │ │• 권한 검토 │ │ │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ │ +│ └───────────────────┼───────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────┐ │ +│ │ 통합 보안 관리 체계 │ │ +│ │ (Who + How + Where) │ │ +│ └───────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 교육 및 훈련 | A-34 ~ A-38 | 5 | +| 인증 및 권한관리 | A-39 ~ A-42 | 4 | +| 접근통제 | A-43 ~ A-55 | 13 | + +--- + +## 16-1. 교육 및 훈련 (A-34 ~ A-38) + +### A-34. 교육·훈련 계획 수립 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호 인식제고를 위한 교육 및 훈련 계획을 종합적으로 수립하여 정기적으로 실시 | +| **관련 조직** | 정보보호 부서, 인사 부서 | + +#### 연간 교육 계획 예시 + +| 분기 | 대상 | 교육 내용 | 시간 | +|:----:|------|----------|:----:| +| 1Q | 전 직원 | 정보보호 기본 | 2H | +| 2Q | IT 담당자 | 최신 보안 위협 | 4H | +| 3Q | 전 직원 | 개인정보 보호 | 2H | +| 4Q | 관리자 | 사고 대응 훈련 | 4H | + +--- + +### A-35. 전체 임직원 교육 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 전체 임직원 및 외부자에 대하여 정보보호 교육 및 훈련 수행 | +| **관련 조직** | 정보보호 부서, 인사 부서 | + +#### 교육 대상별 내용 + +| 대상 | 필수 교육 내용 | +|------|---------------| +| 전 직원 | 정보보호 정책, 비밀번호 관리, 피싱 대응 | +| 신규 입사자 | 입사 시 보안 교육 (1주일 내) | +| IT 담당자 | 기술적 보안, 취약점 관리 | +| 외부자 | 보안 규정 안내, 서약서 교육 | + +--- + +### A-36. 직위·업무별 차등 교육 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 교육 및 훈련은 대상자의 직위 및 업무 특성에 따라 차등화하여 실시 | +| **관련 조직** | 정보보호 부서 | + +#### 차등 교육 체계 + +| 직위/업무 | 교육 수준 | 교육 시간 | +|----------|----------|:--------:| +| 경영진 | 정보보호 거버넌스 | 연 2H | +| 중간관리자 | 부서별 보안 관리 | 연 4H | +| 일반 직원 | 기본 보안 수칙 | 연 4H | +| IT 담당자 | 기술적 심화 교육 | 연 8H+ | +| 보안 담당자 | 전문 교육 + 자격 | 연 16H+ | + +--- + +### A-37. 교육 효과 측정 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 교육 및 훈련의 효과가 측정·분석되어 차기 교육 및 훈련에 반영 | +| **관련 조직** | 정보보호 부서 | + +#### 교육 효과 측정 방법 + +| 방법 | 설명 | +|------|------| +| 사전/사후 테스트 | 교육 전후 지식 수준 비교 | +| 만족도 조사 | 교육 내용, 강사 평가 | +| 행동 변화 관찰 | 보안 사고 건수 변화 | +| 모의 훈련 | 피싱 대응률 측정 | + +--- + +### A-38. 보안 공지·권고문 공유 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 유관기관에서 공유한 보안공지·권고문 등에 대한 내용을 임직원 및 외부자에게 공유하고 조치요령을 안내 | +| **관련 조직** | 정보보호 부서 | + +#### 주요 보안 정보 출처 + +| 기관 | URL | 내용 | +|------|-----|------| +| KISA | boho.or.kr | 보안 공지, 취약점 정보 | +| NCSC | ncsc.go.kr | 사이버 위협 정보 | +| CVE | cve.mitre.org | 취약점 데이터베이스 | + +--- + +## 16-2. 인증 및 권한관리 (A-39 ~ A-42) + +### A-39. 계정 및 권한 부여 정책 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 담당 업무에 따라 시스템에 접근할 수 있는 사용자 계정 및 접근권한 부여 방법과 범위 등을 정의 및 이행 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 권한 부여 원칙 + +| 원칙 | 설명 | +|------|------| +| 최소 권한 | 업무 수행에 필요한 최소한의 권한만 부여 | +| 직무 분리 | 상충되는 업무의 분리 (개발/운영) | +| 승인 절차 | 관리자 승인 후 권한 부여 | +| 정기 검토 | 권한의 적정성 정기 검토 | + +#### 계정 신청 절차 + +``` +1. 계정 신청서 작성 (사용자) + ↓ +2. 부서장 승인 + ↓ +3. 정보보호담당자 검토 + ↓ +4. IT 부서 계정 생성 + ↓ +5. 사용자에게 초기 비밀번호 전달 + ↓ +6. 최초 로그인 시 비밀번호 변경 +``` + +--- + +### A-40. 안전한 인증 방법 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 내·외부에서 시스템 접근 시 안전한 인증 방법 및 절차를 마련하고 이에 따라 이행 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 인증 방법별 적용 + +| 접근 유형 | 인증 방법 | +|----------|----------| +| 일반 업무 | ID/PW + 2차 인증(OTP) | +| 원격 접근 | VPN + 인증서 + OTP | +| 중요 시스템 | 다중 인증(MFA) 필수 | +| 관리자 접근 | 인증서 + OTP + IP 제한 | + +--- + +### A-41. 비밀번호 관리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 시스템에 대한 안전한 사용자 비밀번호 관리 절차 및 작성 규칙 수립·이행 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 비밀번호 정책 + +| 항목 | 기준 | +|------|------| +| 최소 길이 | 8자 이상 (관리자 10자 이상) | +| 복잡도 | 영문+숫자+특수문자 조합 | +| 변경 주기 | 90일 (관리자 60일) | +| 이력 관리 | 최근 5개 재사용 금지 | +| 잠금 정책 | 5회 실패 시 15분 잠금 | + +--- + +### A-42. 권한 적정성 검토 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 시스템에 대한 사용자 계정 및 접근권한의 적정성 검토 기준, 검토 주체, 검토 방법, 주기 등을 수립하여 이행 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 정기 검토 항목 + +| 항목 | 주기 | 담당 | +|------|:----:|------| +| 휴면 계정 | 월간 | IT팀 | +| 권한 적정성 | 분기 | 정보보호팀 | +| 특권 계정 | 월간 | 정보보호팀 | +| 퇴직자 계정 | 실시간 | 인사팀+IT팀 | + +--- + +## 16-3. 접근통제 (A-43 ~ A-55) + +### A-43. 네트워크 운영 보안 정책 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 네트워크 접근통제 유지를 위해 접근권한 통제, 원격접속 관리, 네트워크 분리 등의 내용을 포함한 네트워크 운영 보안 정책을 수립·이행 | +| **관련 조직** | 정보보호 부서, 네트워크 운영 부서 | + +--- + +### A-44. 네트워크 분리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 시스템의 목적 및 민감도 등에 따라 네트워크를 분리 운영하고 각 영역 간 접근통제를 적용 | +| **관련 조직** | 정보보호 부서, 네트워크 운영 부서 | + +#### 네트워크 분리 구성 + +``` +[인터넷] + ↓ +[DMZ] ─── 웹서버, 메일서버 + ↓ 방화벽 +[업무망] ─── 업무 시스템 + ↓ 방화벽 +[DB존] ─── 데이터베이스 + ↓ 방화벽 +[관리망] ─── 관리 시스템 +``` + +--- + +### A-45. 접근통제 규칙 승인 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 접근통제 규칙은 관리자의 승인을 거쳐서 설정 또는 변경 | +| **관련 조직** | 정보보호 부서 | + +--- + +### A-46. 접근통제 정책 검토 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 접근통제 정책의 적합성 여부에 대해 주기적 검토 | +| **검토 주기** | 분기 1회 이상 | + +--- + +### A-47. 방화벽·IDS 구축 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 방화벽, 침입탐지시스템 구축 등 안전한 네트워크를 위한 대책을 마련 | +| **관련 조직** | 정보보호 부서, 네트워크 운영 부서 | + +--- + +### A-48. 원격작업 정책 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 외부 네트워크를 통한 원격작업(재택근무, 장애대응 등)에 대한 책임자 승인, 작업내용 및 범위, 기간 설정, 접근 로그 기록/검토 등이 포함된 정책(절차) 수립·이행 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 원격작업 절차 + +1. 원격작업 신청서 작성 +2. 부서장 + 정보보호책임자 승인 +3. VPN 계정 발급 (기간 한정) +4. 작업 수행 (로그 기록) +5. 작업 완료 후 VPN 계정 비활성화 +6. 로그 검토 + +--- + +### A-49. 내부 관리 단말 제한 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 네트워크를 통해 시스템을 운영하는 경우 원칙적으로 시스템 관리는 내부의 특정 단말기에서만 할 수 있도록 제한 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +--- + +### A-50. VPN 등 안전한 접속 수단 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 외부에서 내부 시스템 접속 시 VPN 등 안전한 접속 수단 적용 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +--- + +### A-51. 망분리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 내부망(업무망)과 인터넷망을 분리하여 운용 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 망분리 유형 + +| 유형 | 설명 | 장단점 | +|------|------|--------| +| 물리적 분리 | 별도 네트워크 구축 | 보안↑, 비용↑ | +| 논리적 분리 | VLAN, VDI 활용 | 비용↓, 관리 필요 | + +--- + +### A-52. 자료전송 시스템 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 망분리 후 안전한 자료전송을 위한 시스템을 도입하여 사용 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +--- + +### A-53. 인터넷 전화망 분리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 인터넷 전화망과 일반 전산망은 분리하여 운용 | +| **관련 조직** | 정보보호 부서, 통신 부서 | + +--- + +### A-54. 외부자 네트워크 분리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 내부에 상주하는 외부자에 대하여 네트워크를 분리하여 운영 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +--- + +### A-55. 무선네트워크 보안 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 무선네트워크 사용 시 상급기관장의 보안성 검토를 필하거나 안전한 암호화 알고리즘 및 암호키 설정 등의 적절한 보안조치를 적용 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 무선네트워크 보안 요구사항 + +| 항목 | 요구사항 | +|------|----------| +| 암호화 | WPA3 또는 WPA2-Enterprise | +| 인증 | 802.1X + RADIUS | +| SSID | 숨김 설정 권장 | +| 접근통제 | MAC 주소 필터링 | +| 모니터링 | 불법 AP 탐지 | + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 교육 | 연간 교육 계획 + 차등 교육 | 높음 | +| 인증 | 비밀번호 정책 + MFA | 최우선 | +| 권한관리 | 최소 권한 + 정기 검토 | 최우선 | +| 접근통제 | 망분리 + VPN | 최우선 | +| 무선보안 | WPA2/3 + 802.1X | 높음 | + +--- + +*다음 장: 17장. 운영관리 및 보안관리* + + +--- + +# 17장. 운영관리 및 보안관리 + +> Part III. 관리적·물리적 취약점 점검 + +--- + +## 개요 + +운영관리는 시스템의 안정적 운영을, 보안관리는 보안 위협으로부터의 보호를 다룹니다. 이 장에서는 운영관리(A-56 ~ A-93)와 보안관리(A-94 ~ A-103)를 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 운영관리 및 보안관리 취약점 점검 영역 (48개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 운영관리 (A-56 ~ A-93) 38개 │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ 무선네트 │ │ 시스템 │ │유지보수 │ │ 로그 │ │ │ +│ │ │ 워크관리 │ │도입/변경│ │장애/백업│ │ 관리 │ │ │ +│ │ │ A-56~57 │ │ A-58~66 │ │ A-67~72 │ │ A-73~75 │ │ │ +│ │ │ (2개) │ │ (9개) │ │ (6개) │ │ (3개) │ │ │ +│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ +│ │ │ │ │ │ │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ 정보 │ │보안시스 │ │이동형 │ │ │ +│ │ │ 보호 │ │템 운영 │ │장치관리 │ │ │ +│ │ │ A-76~85 │ │ A-86~88 │ │ A-89~93 │ │ │ +│ │ │ (10개) │ │ (3개) │ │ (5개) │ │ │ +│ │ └─────────┘ └─────────┘ └─────────┘ │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 보안관리 (A-94 ~ A-103) 10개 │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ 패치/EOS │ │ 악성코드│ │개인정보 │ │ 점검/ │ │ │ +│ │ │ 관리 │ │/보안점검│ │ 안전조치│ │ 모의해킹│ │ │ +│ │ │ A-94~95 │ │ A-96~97 │ │ A-100 │ │A-101~103│ │ │ +│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 운영관리 | A-56 ~ A-93 | 38 | +| 보안관리 | A-94 ~ A-103 | 10 | + +--- + +## 17-1. 운영관리 (A-56 ~ A-93) + +### 무선네트워크 관리 (A-56 ~ A-57) + +#### A-56. 무선네트워크 사용 절차 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 인가된 임직원만이 인가된 단말을 이용하여 무선네트워크를 사용할 수 있도록 사용 신청 및 해지 절차를 수립·이행 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### A-57. 무선네트워크 점검 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 무선네트워크 무단 사용 여부, 비인가 무선 중계기(AP) 설치 여부, 우회 정보통신망 사용 차단 여부 등을 주기적으로 점검 | +| **점검 주기** | 월 1회 이상 | + +#### 무선 AP 점검 항목 + +| 항목 | 내용 | +|------|------| +| 인가 여부 | 등록된 AP인지 확인 | +| 암호화 | WPA2/WPA3 적용 여부 | +| SSID | 기관명 노출 여부 | +| 위치 | 설치 위치 적정성 | + +--- + +### 시스템 도입·변경 관리 (A-58 ~ A-67) + +#### A-58. 법적 요구사항 문서화 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 자산 및 시스템을 신규 도입·개발 또는 변경하는 경우 법, 규제, 계약상의 요구사항을 정의하여 문서화 | +| **관련 조직** | 정보보호 부서, 법무 부서 | + +#### A-59. 보안성 검토 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 자산 및 시스템을 신규 도입·개발 또는 변경하는 경우 보안성 검토 및 호환성 검토 수행하고 보안책임자는 이를 확인 및 승인 | +| **관련 조직** | 정보보호 부서 | + +#### 보안성 검토 체크리스트 + +| 항목 | 확인 내용 | +|------|----------| +| 계정 관리 | 기본 계정 변경, 비밀번호 정책 | +| 접근 통제 | 불필요 포트 차단, 권한 설정 | +| 암호화 | 전송/저장 데이터 암호화 | +| 로그 | 감사 로그 설정 | +| 패치 | 최신 패치 적용 | + +--- + +#### A-60. 변경관리 절차 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 시스템의 변경관리 절차 수립·이행 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 변경관리 프로세스 + +``` +1. 변경 요청서 작성 + ↓ +2. 영향도 분석 (보안 영향 포함) + ↓ +3. 변경심의위원회 승인 + ↓ +4. 변경 계획 수립 (롤백 계획 포함) + ↓ +5. 테스트 환경에서 검증 + ↓ +6. 변경 실행 + ↓ +7. 결과 확인 및 문서화 +``` + +--- + +#### A-61. CC인증 및 보안적합성 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보보호시스템은 국내용 CC인증을 받았거나, 보안적합성 검증 수행 | +| **관련 조직** | 정보보호 부서, 구매 부서 | + +> **TIP** +> 공공기관은 CC인증 제품 또는 보안적합성 검증 필 제품을 도입해야 합니다. IT보안인증사무국(www.itscc.kr)에서 인증 제품 목록을 확인할 수 있습니다. + +--- + +#### A-63 ~ A-66. 개발·운영 환경 관리 + +| 항목 | 점검 내용 | +|------|----------| +| A-63 | 개발/테스트 환경과 운영 환경 분리 | +| A-64 | 개발자와 운영자 접근 권한 분리 | +| A-65 | 소스코드 접근권한 차등 부여, 별도 보관 | +| A-66 | 소스코드 변경 시 보안약점 분석 | + +#### 환경 분리 원칙 + +| 환경 | 용도 | 접근 권한 | +|------|------|----------| +| 개발 | 코드 작성, 단위 테스트 | 개발자 | +| 테스트 | 통합/성능 테스트 | 개발자, QA | +| 스테이징 | 운영 전 검증 | 운영자, QA | +| 운영 | 실제 서비스 | 운영자만 | + +--- + +### 유지보수·장애·백업 관리 (A-67 ~ A-72) + +#### A-67. 변경 절차 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 주요 시스템 및 정보보호제품의 변경을 위한 공식적인 절차 수립·이행 | + +--- + +#### A-68. 유지보수 작업 관리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 유지보수 작업 전 공식적인 작업 신청 및 수행절차를 수립·이행하고 작업 기록을 주기적으로 검토 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 유지보수 작업 절차 + +| 단계 | 내용 | +|:----:|------| +| 1 | 작업 신청서 작성 (작업 내용, 일시, 담당자) | +| 2 | 관리자 승인 | +| 3 | 작업 전 백업 | +| 4 | 작업 수행 (담당자 동행) | +| 5 | 작업 결과 확인 | +| 6 | 작업 기록 문서화 | + +--- + +#### A-69. 장애관리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 장애탐지, 장애기록, 장애분석, 장애복구, 장애보고 등의 사항을 포함하는 시스템의 장애관리 지침 문서화 | +| **관련 조직** | IT 부서 | + +--- + +#### A-70. 백업 절차 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 백업 대상, 주기, 방법, 보관 장소, 보관기간, 소산 등을 포함한 백업 절차 수립·이행 | +| **관련 조직** | IT 부서 | + +#### 백업 정책 예시 + +| 대상 | 유형 | 주기 | 보관 기간 | +|------|------|:----:|:--------:| +| DB | 전체 | 주간 | 1년 | +| DB | 증분 | 일간 | 1개월 | +| 시스템 설정 | 전체 | 월간 | 1년 | +| 로그 | 아카이브 | 일간 | 2년 | + +--- + +#### A-71. 복구 테스트 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 백업된 정보의 완전성과 정확성, 복구절차의 적절성을 확인하기 위하여 정기적으로 복구 테스트 수행 | +| **테스트 주기** | 연 1회 이상 | + +--- + +### 로그 관리 (A-73 ~ A-75) + +#### A-73. 접근기록 생성·보관 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 시스템 및 정보보호시스템에 대한 접근기록(로그 등)을 생성·보관하고, 이에 대한 비인가 열람, 훼손 등을 방지하기 위한 보호대책 운영 | +| **보관 기간** | 최소 6개월 (개인정보 관련 1년) | + +#### 로그 관리 요구사항 + +| 항목 | 요구사항 | +|------|----------| +| 수집 | 접속 일시, 접속자, 접속 IP, 수행 작업 | +| 저장 | 별도 로그 서버, 변조 방지 | +| 보관 | 최소 6개월 이상 | +| 검토 | 정기적 이상 징후 분석 | + +--- + +#### A-74. 로그 검토·모니터링 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 시스템과 네트워크의 오류, 오·남용(비인가접속, 과다조회 등), 부정행위 등 이상징후를 인지할 수 있도록 로그 검토 주기, 대상, 방법 등을 포함한 로그 검토 및 모니터링 절차 수립·이행 | + +--- + +#### A-75. 로그 검토 결과 보고 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 로그 및 모니터링 결과를 월 1회 이상 책임자에게 보고 | +| **보고 주기** | 월 1회 이상 | + +--- + +### 정보 보호 (A-76 ~ A-85) + +#### A-76. 정보·매체 폐기 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보나 매체가 용도 폐기되기 위한 폐기 방법 수립·이행 | + +#### 저장매체 삭제 방법 + +| 매체 유형 | 삭제 방법 | +|----------|----------| +| HDD | 완전 삭제(DoD 5220.22-M) 또는 물리 파쇄 | +| SSD | Secure Erase 또는 물리 파쇄 | +| 광학매체 | 물리 파쇄 | +| 문서 | 세단기(4등급 이상) | + +--- + +#### A-77. 보안점검 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보안규정의 이행여부를 확인하는 주기적인 보안점검 및 불시 보안점검 수행 | + +--- + +#### A-78 ~ A-81. 비밀 관리 + +| 항목 | 점검 내용 | +|------|----------| +| A-78 | 비밀(대외비 포함)을 비밀관리기록부 등에 등재 관리 | +| A-79 | 출력된 비밀문서를 잠금장치 캐비넷에 보관 | +| A-80 | 중요정보 안전 처리를 위한 보호대책/시스템 도입 | +| A-81 | 네트워크 구성현황(IP 정보 등)을 비공개 이상으로 관리 | + +--- + +#### A-82 ~ A-85. 데이터 보호 + +| 항목 | 점검 내용 | +|------|----------| +| A-82 | 중요 데이터와 일반 데이터를 다른 서버에 분리 보관 | +| A-83 | 홈페이지 게시 자료에 대해 게시 절차 마련 | +| A-84 | 암호화 대상, 암호강도, 암호키 관리 등 암호정책 수립 | +| A-85 | 암호키 복구 절차 수립 및 복구 내역 검토 | + +--- + +### 보안시스템 운영 (A-86 ~ A-93) + +#### A-86. 침입차단·탐지 운영 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 침입차단 및 탐지 도구는 조직의 보안 정책과 규칙에 적합하게 설치하여 운영 | + +--- + +#### A-88. 비인가 장비 차단 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보통신망에 비인가 PC, 노트북 등을 연결 시 차단 및 차단 이력 주기적 검토 | + +--- + +#### A-89 ~ A-93. 이동형 장치 관리 + +| 항목 | 점검 내용 | +|------|----------| +| A-89 | 이동형 장치(노트북, 태블릿, USB 등) 사용/반출입 통제 절차 | +| A-90 | 반출입 이력 기록 및 주기적 점검 | +| A-91 | 스마트폰 등 정보기기 활용 시 중요정보 보호 방안 | +| A-92 | 보조저장매체 사용 주기적 점검, 현황 최신화 | +| A-93 | 이동형 장치 분실 대비책 마련 | + +--- + +## 17-2. 보안관리 (A-94 ~ A-103) + +### A-94. 패치관리 정책 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 서버, 네트워크시스템, 보안시스템, PC 등 자산별 특성 및 중요도에 따라 운영체제(OS)와 소프트웨어의 패치관리 정책 및 절차 수립·이행 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +#### 패치 관리 프로세스 + +``` +1. 패치 정보 수집 (KISA, 벤더 등) + ↓ +2. 영향도 분석 + ↓ +3. 테스트 환경 적용 + ↓ +4. 적용 계획 수립 (우선순위) + ↓ +5. 운영 환경 적용 + ↓ +6. 적용 결과 확인 +``` + +--- + +### A-95. 보안 지원 종료 제품 대응 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 서버, 네트워크시스템, 보안시스템, PC 등의 운영체제, 소프트웨어 등이 개발사로부터 보안 지원이 되지 않을 경우 해당 제품을 교체하거나 보안대책 마련 | + +#### EOS/EOL 대응 방안 + +| 대응 방안 | 설명 | +|----------|------| +| 업그레이드 | 지원되는 버전으로 업그레이드 | +| 교체 | 신규 제품으로 교체 | +| 격리 | 네트워크 분리 + 추가 보안 | +| 가상 패치 | WAF, IPS 등으로 취약점 차단 | + +--- + +### A-96. 악성프로그램 대응 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 바이러스 등 악성프로그램을 대비한 보안프로그램의 설치·운영 등 보호대책 운영 | + +--- + +### A-97. 사이버보안진단의 날 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | '사이버보안진단의 날' 등과 같이 월별 보안 중점점검사항에 대해 매월 보안점검 및 조치활동 수행 | +| **주기** | 월 1회 (매월 셋째 주 수요일) | + +> **TIP** +> 공공기관은 매월 셋째 주 수요일을 '사이버보안진단의 날'로 지정하여 PC 보안점검을 수행합니다. + +--- + +### A-100. 개인정보 안전조치 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 개인정보의 유출 등을 방지하기 위해 접근 권한의 관리, 접근통제, 암호화, 접속기록의 보관 및 점검 등 개인정보의 안전성 확보에 필요한 조치 이행 | + +#### 개인정보 안전조치 기준 + +| 조치 | 내용 | +|------|------| +| 접근 권한 | 최소한의 인원에게만 부여, 정기 검토 | +| 접근 통제 | IP 제한, 비인가 접근 차단 | +| 암호화 | 비밀번호, 주민번호 등 암호화 저장/전송 | +| 접속 기록 | 최소 1년 보관, 월 1회 점검 | + +--- + +### A-101. DDoS 대응 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 서비스 거부(DDoS) 공격 방지를 위한 대응방안(그린DDoSZone 등) 수립 및 운영 | + +#### DDoS 대응 방안 + +| 방안 | 설명 | +|------|------| +| DDoS 방어 서비스 | KISA 사이버대피소, CDN 등 | +| 대역폭 확보 | 충분한 네트워크 대역폭 | +| 탐지 시스템 | 이상 트래픽 탐지 | +| 대응 계획 | 공격 시 대응 절차 | + +--- + +### A-102. 모의해킹 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 주요정보통기반시설과 직·간접적으로 연계된 시스템을 대상으로 모의해킹 수행 및 보안대책 마련 | +| **주기** | 연 1회 이상 | + +--- + +### A-103. 취약점 점검 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 시스템 및 사용 장비에 대한 보안 취약점에 대한 주기적 검토 및 보완 프로세스 운영 | +| **주기** | 연 1회 이상 (정보통신기반보호법 제9조) | + +--- + +## 17-3. 망분리 환경 구성 + +### 망분리 유형별 비교 + +| 유형 | 물리적 망분리 | 논리적 망분리 | +|------|-------------|-------------| +| 구현 | 별도 네트워크, PC | VDI, CBC 등 | +| 비용 | 높음 | 상대적 낮음 | +| 보안성 | 높음 | 관리에 따라 다름 | +| 사용성 | 불편함 | 상대적 편리 | + +### 망분리 아키텍처 예시 + +``` +[인터넷망] [업무망] + │ │ +[인터넷PC]──[자료전송]──[업무PC] + │ 시스템 │ + ↓ ↓ +[인터넷 서버] [업무 서버] +``` + +### 자료전송 시스템 보안 + +| 항목 | 요구사항 | +|------|----------| +| 승인 | 자료 전송 시 승인 절차 | +| 검사 | 악성코드 검사 | +| 로그 | 전송 이력 기록 | +| 용량 | 전송 용량 제한 | + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 운영관리 | 변경관리 + 백업·복구 | 최우선 | +| 운영관리 | 로그 관리 + 정기 검토 | 최우선 | +| 보안관리 | 패치관리 + 악성코드 대응 | 최우선 | +| 보안관리 | 취약점 점검 + 모의해킹 | 높음 | +| 망분리 | 물리적/논리적 분리 + 자료전송 | 최우선 | + +--- + +*다음 장: 18장. 사고대응 및 업무연속성* + + +--- + +# 18장. 사고대응 및 업무연속성 + +> Part III. 관리적·물리적 취약점 점검 + +--- + +## 개요 + +침해사고에 신속히 대응하고 업무 연속성을 보장하는 것은 조직의 생존과 직결됩니다. 이 장에서는 사고대응(A-104 ~ A-113)과 업무연속성(A-114 ~ A-118)을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 사고대응 및 업무연속성 관리 체계 (15개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 사고대응 (A-104 ~ A-113) 10개 │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌──────────┐ │ │ +│ │ │ 사고 탐지 │ │ │ +│ │ │ (모니터링) │ │ │ +│ │ └─────┬────┘ │ │ +│ │ ▼ │ │ +│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ +│ │ │ 초기 대응 │───▶│ 상세 분석 │───▶│ 억제/격리 │ │ │ +│ │ │ (보고체계)│ │ (원인규명)│ │ (확산방지)│ │ │ +│ │ └──────────┘ └──────────┘ └─────┬────┘ │ │ +│ │ ▼ │ │ +│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ +│ │ │ 재발방지 │◀───│ 증거확보 │◀───│ 복구/근절 │ │ │ +│ │ │ (사후조치)│ │ (포렌식) │ │ (정상화) │ │ │ +│ │ └──────────┘ └──────────┘ └──────────┘ │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 업무연속성 (A-114 ~ A-118) 5개 │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ 재해유형 │───▶│ RTO/RPO │───▶│ DR │ │ │ +│ │ │ 식별 │ │ 정의 │ │ 계획 │ │ │ +│ │ └─────────┘ └─────────┘ └────┬────┘ │ │ +│ │ │ │ │ +│ │ ┌────────────────────┼─────────────┐ │ │ +│ │ ▼ ▼ │ │ │ +│ │ ┌─────────┐ ┌─────────┐ │ │ │ +│ │ │ 이중화 │ │ DR훈련 │ │ │ │ +│ │ │ 구성 │ │ 실시 │ │ │ │ +│ │ └─────────┘ └─────────┘ │ │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 사고대응 | A-104 ~ A-113 | 10 | +| 업무연속성 | A-114 ~ A-118 | 5 | + +--- + +## 18-1. 사고대응 (A-104 ~ A-113) + +### A-104. 사고대응 체계 수립 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 침해사고 및 개인정보 유출사고를 예방하고 사고 발생 시 신속하고 효과적으로 대응하기 위한 체계와 절차 수립 | +| **관련 조직** | 정보보호 부서, 전 부서 | + +#### 사고대응 체계 구성요소 + +| 구성요소 | 내용 | +|----------|------| +| 대응 조직 | 침해사고대응팀(CERT) 구성 | +| 대응 절차 | 탐지→분석→억제→근절→복구→사후 | +| 연락체계 | 내/외부 비상연락망 | +| 역할/책임 | 구성원별 역할 정의 | + +--- + +### A-105. 사고 보고 절차 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 침해사고 발생 시 신속한 보안사고 보고를 위한 절차를 문서화하고 있고 이에 따라 신속한 보고 수행 | +| **관련 조직** | 정보보호 부서, 전 부서 | + +#### 사고 보고 체계 + +``` +[사고 발견자] + ↓ 즉시 보고 +[부서장] + ↓ 1시간 내 +[정보보호책임자(CISO)] + ↓ 필요 시 +[기관장] + ↓ 법적 요건 시 +[KISA/관계기관] +``` + +--- + +### A-106. 외부 대응협조체계 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 침해사고 시 외부기관 및 전문가들과의 대응협조체계 구축 | +| **관련 조직** | 정보보호 부서 | + +#### 외부 협조 기관 + +| 기관 | 연락처 | 역할 | +|------|--------|------| +| KISA 인터넷침해대응센터 | 118 | 침해사고 신고, 기술지원 | +| 사이버안전센터(NCSC) | - | 공공기관 사고 대응 | +| 경찰청 사이버안전국 | 182 | 사이버범죄 수사 | +| 외부 전문업체 | - | 포렌식, 복구 지원 | + +--- + +### A-107. 긴급대응반 구성 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 사이버위기 '주의' 이상 경보 발령 및 피해발생 등 필요 시 대응할 수 있는 '긴급대응반'을 구성 | +| **관련 조직** | 정보보호 부서, 경영진 | + +#### 사이버위기 경보 단계 + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 사이버위기 경보 단계 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────┐ │ +│ │ 심각 │ ← 대규모 피해 발생, 전사 비상 대응 │ +│ │ (빨강) │ │ +│ ├─────────┤ │ +│ │ 경계 │ ← 피해 발생, 비상 대응 체제 돌입 │ +│ │ (주황) │ │ +│ ├─────────┤ │ +│ │ 주의 │ ← 피해 가능성, 긴급대응반 가동 │ +│ │ (노랑) │ │ +│ ├─────────┤ │ +│ │ 관심 │ ← 위협 증가 징후, 모니터링 강화 │ +│ │ (파랑) │ │ +│ ├─────────┤ │ +│ │ 정상 │ ← 일상적인 모니터링 수행 │ +│ │ (녹색) │ │ +│ └─────────┘ │ +│ │ +│ ※ 국가사이버안전센터(NCSC) 경보 기준 준용 │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 단계 | 상황 | 대응 | +|:----:|------|------| +| 정상 | 일상 | 일상 모니터링 | +| 관심 | 위협 증가 | 모니터링 강화 | +| 주의 | 피해 발생 가능성 | 긴급대응반 가동 | +| 경계 | 피해 발생 | 비상 대응 체제 | +| 심각 | 대규모 피해 | 전사 비상 대응 | + +--- + +### A-108. 사고 모니터링 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 부정접근 사례나 보안사고 내역을 지속적으로 모니터링 | +| **관련 조직** | 정보보호 부서, 보안관제 | + +--- + +### A-109. 대응 훈련 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 침해사고 발생에 대비한 대응절차 및 방법 숙지를 위한 주기적인 교육·훈련 실시 | +| **주기** | 연 1회 이상 | + +#### 훈련 유형 + +| 유형 | 내용 | 주기 | +|------|------|:----:| +| 탁상 훈련 | 시나리오 기반 토론 | 연 1회 | +| 모의 훈련 | 실제 대응 시뮬레이션 | 연 1회 | +| 피싱 훈련 | 모의 피싱 메일 발송 | 분기 | + +--- + +### A-110. 사고 기록 관리 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보안사고 유형, 범위, 영향 등을 포함한 보안사고 분석 결과를 기록 및 관리 | +| **관련 조직** | 정보보호 부서 | + +#### 사고 기록 항목 + +| 항목 | 내용 | +|------|------| +| 사고 일시 | 발생/탐지/종결 시점 | +| 사고 유형 | 악성코드, 해킹, 유출 등 | +| 영향 범위 | 시스템, 데이터, 업무 | +| 피해 규모 | 데이터 손실, 서비스 중단 시간 | +| 원인 분석 | 근본 원인(Root Cause) | +| 대응 조치 | 수행한 대응 활동 | +| 교훈 | 개선 사항 | + +--- + +### A-111. 보완작업 절차 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보안 취약점 및 사고 발생 시 이에 대한 보완작업 절차 마련 | +| **관련 조직** | 정보보호 부서, IT 부서 | + +--- + +### A-112. 재발방지 대책 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 사이버침해사고 발생 후 재발방지 대책 수립·이행 | +| **관련 조직** | 정보보호 부서 | + +#### 재발방지 프로세스 + +``` +1. 사고 원인 분석 (Root Cause Analysis) + ↓ +2. 유사 위험 요소 식별 + ↓ +3. 재발방지 대책 수립 + ↓ +4. 대책 이행 + ↓ +5. 효과성 검증 + ↓ +6. 정책/절차 반영 +``` + +--- + +### A-113. 증거자료 확보 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 침해사고 처리, 계약증빙 및 소송 등을 위한 적정한 증거자료 확보에 관한 지침 수립·이행 | +| **관련 조직** | 정보보호 부서, 법무 부서 | + +#### 증거 확보 원칙 + +| 원칙 | 설명 | +|------|------| +| 무결성 | 증거 변조 방지 (해시값 기록) | +| 연속성 | 증거 수집→보관→분석 과정 기록 | +| 적시성 | 휘발성 데이터 우선 수집 | +| 적법성 | 법적으로 유효한 방식으로 수집 | + +--- + +## 18-2. 업무연속성 (A-114 ~ A-118) + +### A-114. IT 재해 유형 식별 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 기반시설의 서비스(업무) 연속성을 위협할 수 있는 IT 재해 유형을 식별하고 유형별 피해규모 및 업무에 미치는 영향을 분석하여 핵심 IT 서비스(업무) 및 시스템을 식별 | +| **관련 조직** | 정보보호 부서, IT 부서, 현업 부서 | + +#### IT 재해 유형 + +| 유형 | 예시 | +|------|------| +| 자연재해 | 지진, 화재, 수해 | +| 기술 장애 | 하드웨어 고장, 소프트웨어 오류 | +| 인적 오류 | 운영 실수, 데이터 삭제 | +| 사이버공격 | 랜섬웨어, DDoS, 해킹 | +| 인프라 장애 | 전력, 통신, 공조 | + +--- + +### A-115. 복구 목표 정의 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 핵심 IT서비스(업무) 및 시스템의 특성에 따른 복구 목표시간, 복구 목표시점을 정의 | +| **관련 조직** | 정보보호 부서, IT 부서, 현업 부서 | + +#### 복구 목표 지표 + +| 지표 | 정의 | 예시 | +|------|------|------| +| RTO | 복구 목표 시간 (Recovery Time Objective) | 4시간 | +| RPO | 복구 목표 시점 (Recovery Point Objective) | 1시간 | +| MTPD | 최대 허용 중단 시간 | 24시간 | + +#### 시스템별 복구 목표 예시 + +| 시스템 | RTO | RPO | 등급 | +|--------|:---:|:---:|:----:| +| 핵심 업무 시스템 | 2H | 0 (실시간) | 1등급 | +| 주요 업무 시스템 | 4H | 1H | 2등급 | +| 일반 업무 시스템 | 24H | 4H | 3등급 | + +--- + +### A-116. 재해 복구 계획 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 재해 및 재난 발생 시에도 기반시설 서비스 및 시스템의 연속성을 보장할 수 있도록 복구 전략 및 대책, 비상시 복구 조직, 비상연락체계, 복구 절차 등 재해 복구 계획 수립·이행 | +| **관련 조직** | 정보보호 부서, IT 부서, 경영진 | + +#### 재해복구계획(DRP) 구성 + +| 구성요소 | 내용 | +|----------|------| +| 복구 전략 | Hot/Warm/Cold Site | +| 복구 조직 | 역할, 책임, 연락처 | +| 복구 절차 | 단계별 복구 절차 | +| 자원 목록 | 필요 자원 (HW, SW, 인력) | +| 테스트 계획 | 연간 훈련 계획 | + +--- + +### A-117. 시스템 이중화 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보안중요성이 높은 등급의 시스템들은 이중화하여 관리 | +| **관련 조직** | IT 부서 | + +#### 이중화 유형 + +| 유형 | 설명 | RTO | +|------|------|:---:| +| Active-Active | 양쪽 동시 운영 | ~0 | +| Active-Standby | 대기 시스템 자동 전환 | 분 | +| Cold Standby | 대기 시스템 수동 전환 | 시간 | + +--- + +### A-118. 연속성 검토 및 훈련 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 모의 훈련 등을 통해 업무 연속성을 지속적으로 검토 및 관리하고, 조직 내의 변경이 있을 경우 이에 대한 사항을 반영 | +| **주기** | 연 1회 이상 | + +#### DR 훈련 유형 + +| 유형 | 설명 | 주기 | +|------|------|:----:| +| 워크쓰루 | 절차서 검토 | 반기 | +| 시뮬레이션 | 가상 시나리오 | 연 1회 | +| 전환 테스트 | 실제 전환 수행 | 연 1회 | + +--- + +## 18-3. 침해사고 신고 절차 + +### 법적 신고 의무 + +| 법령 | 대상 | 신고처 | 기한 | +|------|------|--------|------| +| 정보통신기반보호법 | 주요정보통신기반시설 | KISA, 관계중앙행정기관 | 지체없이 | +| 개인정보보호법 | 개인정보처리자 | 개인정보보호위원회 | 72시간 내 | +| 정보통신망법 | 정보통신서비스제공자 | KISA | 24시간 내 | + +### 침해사고 신고서 양식 + +```markdown +침해사고 신고서 + +1. 신고 기관 정보 + - 기관명: + - 담당자: + - 연락처: + +2. 사고 개요 + - 발생 일시: + - 발견 일시: + - 사고 유형: [ ]악성코드 [ ]해킹 [ ]DDoS [ ]정보유출 [ ]기타 + - 영향 시스템: + - 피해 규모: + +3. 사고 경위 + - 발견 경위: + - 사고 원인(추정): + - 피해 내용: + +4. 조치 현황 + - 초기 대응: + - 향후 계획: + +5. 첨부 + - 관련 로그 + - 스크린샷 + +작성일: 20XX년 XX월 XX일 +작성자: (서명) +``` + +### KISA 신고 방법 + +| 방법 | 연락처 | +|------|--------| +| 전화 | 118 (인터넷침해대응센터) | +| 웹 | boho.or.kr | +| 이메일 | cert@krcert.or.kr | + +--- + +## 요약 + +| 영역 | 핵심 점검 항목 | 우선순위 | +|------|---------------|:--------:| +| 사고대응 | 대응체계 + 보고절차 | 최우선 | +| 사고대응 | 외부 협조체계 + 긴급대응반 | 높음 | +| 사고대응 | 증거확보 + 재발방지 | 높음 | +| 업무연속성 | RTO/RPO 정의 | 최우선 | +| 업무연속성 | DR 계획 + 훈련 | 최우선 | + +--- + +*다음 장: 19장. 물리보안* + + +--- + +# 19장. 물리보안 + +> Part III. 관리적·물리적 취약점 점검 + +--- + +## 개요 + +물리보안은 정보자산을 물리적 위협으로부터 보호합니다. 아무리 기술적 보안이 강해도 물리적 접근이 가능하면 모든 보안이 무력화될 수 있습니다. 이 장에서는 물리보안 점검 항목(B-1 ~ B-9)을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 물리보안 점검 영역 체계 (9개) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────┐ │ +│ │ 외부 경계 │ │ +│ │ (건물/시설 외곽) │ │ +│ └──────────┬──────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────┐ │ +│ │ 일반 구역 │ │ +│ │ (로비, 회의실 - 일반 출입) │ │ +│ │ B-5: 외부인 통제 │ │ +│ └──────────────────┬──────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────┐ │ +│ │ 제한 구역 │ │ +│ │ (사무실, 개발실 - 승인 출입) │ │ +│ │ B-2: 출입통제 │ B-3: 기록보관 │ │ +│ │ B-9: 문서보안 │ B-6: 반출입통제 │ │ +│ └──────────────────┬──────────────────┘ │ +│ │ │ +│ ▼ │ +│ ╔═════════════════════════════════════╗ │ +│ ║ 통제 구역 ║ │ +│ ║ (전산실, 서버실 - 엄격 통제) ║ │ +│ ║ ║ │ +│ ║ B-1: 보호구역 B-4: CCTV ║ │ +│ ║ B-7: 환경설비 B-8: 케이블보안 ║ │ +│ ║ ║ │ +│ ║ ┌─────────────────────────┐ ║ │ +│ ║ │ 정보 자산 │ ║ │ +│ ║ │ (서버, 네트워크, DB) │ ║ │ +│ ║ └─────────────────────────┘ ║ │ +│ ╚═════════════════════════════════════╝ │ +│ │ +│ ※ 중심으로 갈수록 높은 보안 수준 요구 │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +| 영역 | 항목 | 항목 수 | +|------|------|:------:| +| 물리보안 | B-1 ~ B-9 | 9 | + +--- + +## 19-1. 물리보안 점검 (B-1 ~ B-9) + +### B-1. 보호구역 지정 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 물리적 보호가 필요한 장소(전산실, 통신실 등)에 대해 보호구역으로 지정·관리 | +| **관련 조직** | 정보보호 부서, 시설관리 부서 | + +#### 보호구역 분류 + +| 구역 | 정의 | 예시 | +|------|------|------| +| 통제구역 | 비인가자 출입 금지 | 전산실, 서버실 | +| 제한구역 | 승인된 자만 출입 | 사무실, 개발실 | +| 일반구역 | 일반인 출입 가능 | 로비, 회의실 | + +#### 보호구역 표시 + +- 구역별 표지판 부착 +- 바닥 색상/선으로 구분 +- 보안등급 표시 + +--- + +### B-2. 출입통제 절차 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보호구역에 대한 출입통제 절차를 수립하고 출입 기록 유지·관리 | +| **관련 조직** | 정보보호 부서, 시설관리 부서 | + +#### 출입통제 방법 + +| 방법 | 설명 | 보안 수준 | +|------|------|:--------:| +| 카드키 | RFID/스마트카드 | 중 | +| 생체인식 | 지문, 홍채, 안면 | 상 | +| PIN + 카드 | 이중 인증 | 상 | +| 열쇠 | 물리적 열쇠 | 하 | + +#### 출입 기록 관리 + +| 항목 | 내용 | +|------|------| +| 기록 항목 | 일시, 출입자, 출입 목적, 동행자 | +| 보관 기간 | 최소 1년 | +| 검토 주기 | 월 1회 | + +--- + +### B-3. 출입 기록 보관 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보호구역(전산실 등)에 대한 출입 관련 기록은 최소 1년 이상 보관·관리 | +| **보관 기간** | 최소 1년 | + +--- + +### B-4. CCTV 설치·운영 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보호구역에 출입자 감시를 위한 CCTV 설치·운영 | +| **관련 조직** | 시설관리 부서, 정보보호 부서 | + +#### CCTV 설치 요건 + +| 항목 | 요건 | +|------|------| +| 설치 위치 | 출입구, 복도, 전산실 내부 | +| 녹화 품질 | 얼굴 식별 가능 해상도 | +| 저장 기간 | 최소 30일 이상 | +| 모니터링 | 실시간 모니터링 또는 정기 검토 | + +> **WARNING** +> CCTV 운영 시 개인정보보호법을 준수해야 합니다. 안내판 부착, 촬영 목적 고지 등이 필요합니다. + +--- + +### B-5. 외부인 출입 통제 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보호구역 내 외부인(유지보수업체 포함) 출입 시 출입 통제를 수행 | +| **관련 조직** | 시설관리 부서, 정보보호 부서 | + +#### 외부인 출입 절차 + +``` +1. 사전 방문 신청 (담당자 → 보안팀) + ↓ +2. 방문 승인 + ↓ +3. 방문 당일 신분 확인 + ↓ +4. 방문증 발급 (사진 부착 권장) + ↓ +5. 보안 규정 안내/서명 + ↓ +6. 담당자 동행 + ↓ +7. 퇴실 시 방문증 반납 + ↓ +8. 휴대품 검사 (필요 시) +``` + +--- + +### B-6. 반출입 통제 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 정보시스템 등 보호자산에 대한 반출입을 통제 | +| **관련 조직** | 정보보호 부서, 시설관리 부서 | + +#### 반출입 통제 대상 + +| 구분 | 대상 | +|------|------| +| 반입 | 외부 장비, 저장매체, 노트북 | +| 반출 | 서버, 저장매체, 문서 | + +#### 반출 절차 + +1. 반출 신청서 작성 +2. 담당자/보안책임자 승인 +3. 데이터 삭제 확인 (매체의 경우) +4. 반출 기록 작성 +5. 반입 시 검사 + +--- + +### B-7. 환경 보호 설비 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보호구역의 정보시스템을 자연재해 및 환경적 위험으로부터 보호하기 위한 설비 운영·관리 | +| **관련 조직** | 시설관리 부서 | + +#### 환경 보호 설비 + +| 설비 | 목적 | 점검 주기 | +|------|------|:--------:| +| 항온항습기 | 온도/습도 유지 | 매일 | +| 소화설비 | 화재 대응 | 월 1회 | +| UPS | 정전 대비 | 월 1회 | +| 발전기 | 장시간 정전 대비 | 분기 | +| 누수 감지 | 수해 방지 | 매일 | +| 접지 | 낙뢰/정전기 방지 | 연 1회 | + +#### 전산실 환경 기준 + +| 항목 | 기준 | +|------|------| +| 온도 | 18~27°C | +| 습도 | 40~60% | +| 먼지 | Class 100,000 이하 | + +--- + +### B-8. 케이블 보안 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 보호구역의 케이블을 안전하게 설치하고 관리 | +| **관련 조직** | 시설관리 부서, IT 부서 | + +#### 케이블 보안 요건 + +| 항목 | 요건 | +|------|------| +| 배선 | 바닥/천장 배선 (노출 최소화) | +| 식별 | 케이블 라벨링 | +| 분리 | 전원/데이터/통신 케이블 분리 | +| 보호 | 케이블 트레이, 덕트 사용 | + +--- + +### B-9. 문서 보안 + +| 항목 | 내용 | +|------|------| +| **점검 항목** | 중요 문서의 안전한 보관 및 파기 절차 수립·이행 | +| **관련 조직** | 정보보호 부서, 각 부서 | + +#### 문서 보안 요건 + +| 항목 | 요건 | +|------|------| +| 보관 | 잠금 캐비넷에 보관 | +| 파기 | 세단기 사용 (4등급 이상) | +| 복사 | 복사 시 승인 절차 | +| 반출 | 반출 시 승인 및 기록 | + +--- + +## 19-2. 보호구역 관리 + +### 보호구역 관리대장 양식 + +| 구역명 | 위치 | 등급 | 관리자 | 출입 방법 | 비고 | +|--------|------|:----:|--------|----------|------| +| 전산실 | 1층 A동 | 통제 | 김관리 | 카드+지문 | 24시간 CCTV | +| 통신실 | 2층 B동 | 통제 | 박통신 | 카드+PIN | 24시간 CCTV | +| 개발실 | 3층 C동 | 제한 | 이개발 | 카드 | - | + +### 출입자 명부 양식 + +| 일시 | 출입자 | 소속 | 출입 목적 | 동행자 | 입실 | 퇴실 | 비고 | +|------|--------|------|----------|--------|:----:|:----:|------| +| 3/15 | 홍길동 | A사 | 서버 유지보수 | 김담당 | 09:00 | 12:00 | | +| 3/15 | 이순신 | B사 | 네트워크 점검 | 박네트 | 14:00 | 16:00 | | + +### 물리보안 점검 체크리스트 + +| 점검 항목 | 점검 내용 | 양호 | 취약 | +|----------|----------|:----:|:----:| +| 출입통제 | 카드/생체인식 작동 여부 | ☐ | ☐ | +| CCTV | 녹화 상태, 각도 적정 여부 | ☐ | ☐ | +| 출입 기록 | 기록 보관 여부 | ☐ | ☐ | +| 잠금장치 | 캐비넷 잠금 상태 | ☐ | ☐ | +| 환경 설비 | 온습도, 소화설비 상태 | ☐ | ☐ | +| 케이블 | 배선 정리 상태 | ☐ | ☐ | +| 방문자 통제 | 방문증 발급/회수 | ☐ | ☐ | + +--- + +## 물리보안 관련 법규 + +### 정보통신기반보호법 + +- 제10조(보호지침): 물리적 보호조치 포함 + +### 개인정보보호법 + +- 제29조(안전조치의무): 물리적 접근 차단 + +### 국가정보보안기본지침 + +- 제42조(물리적 보호구역 지정) +- 제43조(출입통제) + +--- + +## 요약 + +| 항목 | 핵심 점검 내용 | 우선순위 | +|------|---------------|:--------:| +| B-1 | 보호구역 지정 | 최우선 | +| B-2 | 출입통제 절차 + 기록 | 최우선 | +| B-4 | CCTV 설치·운영 | 높음 | +| B-5 | 외부인 출입 통제 | 최우선 | +| B-6 | 반출입 통제 | 높음 | +| B-7 | 환경 보호 설비 | 높음 | + +--- + +## Part III 완료 + +Part III (관리적·물리적 취약점 점검)에서 다룬 내용: + +- 13장: 정보보호 정책 및 조직 +- 14장: 자산관리 및 위험관리 +- 15장: 인적보안 및 외부자보안 +- 16장: 교육·인증·접근통제 +- 17장: 운영관리 및 보안관리 +- 18장: 사고대응 및 업무연속성 +- 19장: 물리보안 + +--- + +*다음 장: 20장. 정부과제 환경 적용 (Part IV 시작)* + + +--- + +# 20장. 정부과제 환경 적용 + +> Part IV. 실무 적용 + +--- + +## 개요 + +정부 및 공공기관 프로젝트는 일반 민간 프로젝트와 다른 보안 요구사항이 있습니다. 이 장에서는 공공기관 보안 요구사항, 정보보호 예산 기준, 사전인증 제품 활용 방법을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 정부과제 보안 요구사항 체계 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ │ +│ │ 법적 근거 │ │ +│ │ (정보통신기반보호법│ │ +│ │ 전자정부법 등) │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌────────────────┼────────────────┐ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ 보안 예산 │ │ 인증 제품 │ │ 보안성 │ │ +│ │ 기준 │ │ 요건 │ │ 검토 │ │ +│ │ (5~10%) │ │ (CC인증) │ │ (전자정부법│ │ +│ └─────┬─────┘ └─────┬─────┘ │ 제56조) │ │ +│ │ │ └─────┬─────┘ │ +│ └────────────────┼─────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 공공 SI 프로젝트 보안 라이프사이클 │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │ +│ │ │ 계획 │─▶│ 분석 │─▶│ 설계 │─▶│ 구현 │─▶│ 시험 │─▶이관 │ │ +│ │ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ │ │ +│ │ │ │ │ │ │ │ │ +│ │ 보안요구 위험분석 보안아키 시큐어 취약점 │ │ +│ │ 사항정의 영향평가 텍처설계 코딩 점검/모의해킹 │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 20-1. 공공기관 보안 요구사항 + +### 주요 법적 근거 + +| 법령/지침 | 주요 내용 | +|----------|----------| +| 정보통신기반보호법 | 주요정보통신기반시설 보호 | +| 전자정부법 | 전자정부 보안 | +| 국가정보보안기본지침 | 공공기관 보안 표준 | +| 개인정보보호법 | 개인정보 보호 | +| 클라우드컴퓨팅법 | 공공 클라우드 보안 | + +### 공공기관 분류별 보안 요구사항 + +| 분류 | 기관 예시 | 보안 수준 | +|------|----------|:--------:| +| 국가기관 | 중앙행정기관 | 최상 | +| 지방자치단체 | 시/도청, 구청 | 상 | +| 공공기관 | 공단, 공사 | 상 | +| 교육기관 | 대학, 교육청 | 중~상 | + +### 공공 SI 프로젝트 보안 체크리스트 + +| 단계 | 보안 활동 | +|------|----------| +| 계획 | 보안 요구사항 정의, 예산 확보 | +| 분석 | 보안 위험 분석, 개인정보 영향평가 | +| 설계 | 보안 아키텍처, 접근통제 설계 | +| 구현 | 시큐어 코딩, 보안 설정 | +| 시험 | 보안 테스트, 취약점 점검 | +| 이관 | 보안성 검토, 인수인계 | + +--- + +## 20-2. 정보보호 예산 기준 + +### 정보보호 예산 가이드라인 + +공공기관의 정보화사업 예산에서 정보보호 예산 비율: + +| 구분 | 권장 비율 | 비고 | +|------|:--------:|------| +| 일반 정보화 사업 | 5% 이상 | 기본 | +| 개인정보 처리 시스템 | 7% 이상 | 권장 | +| 주요정보통신기반시설 | 10% 이상 | 필수 | + +### 정보보호 예산 항목 + +| 대분류 | 세부 항목 | +|--------|----------| +| 인력 | 보안 담당자 인건비, 교육비 | +| 시스템 | 보안 장비, 라이선스 | +| 서비스 | 보안관제, 취약점 점검 | +| 컨설팅 | ISMS 인증, 보안 컨설팅 | + +### 예산 산정 예시 + +``` +[정보화 사업 예산: 10억원] + +정보보호 예산 (10%): 1억원 +├── 보안 시스템: 5,000만원 +│ ├── 방화벽: 2,000만원 +│ ├── 웹방화벽: 1,500만원 +│ └── 접근제어: 1,500만원 +├── 보안 서비스: 3,000만원 +│ ├── 취약점 점검: 1,000만원 +│ ├── 모의해킹: 1,000만원 +│ └── 보안 교육: 1,000만원 +└── 보안 컨설팅: 2,000만원 + └── ISMS 인증 컨설팅: 2,000만원 +``` + +--- + +## 20-3. 사전인증 제품 활용 + +### CC인증 (Common Criteria) + +국제공통평가기준에 따른 정보보호제품 인증 + +| 등급 | 설명 | 적용 | +|:----:|------|------| +| EAL1 | 기능 시험 | - | +| EAL2 | 구조 시험 | 일반 | +| EAL3 | 방법적 시험 | 일반 | +| EAL4 | 방법적 설계/시험 | 공공 | +| EAL5 | 준정형적 설계/시험 | 국방 | +| EAL6~7 | 정형적 설계 | 국방/기밀 | + +### 공공기관 제품 도입 기준 + +| 제품 유형 | 요구 인증 | +|----------|----------| +| 침입차단시스템(방화벽) | CC인증 | +| 침입탐지시스템(IDS) | CC인증 | +| 침입방지시스템(IPS) | CC인증 | +| 가상사설망(VPN) | CC인증 | +| 통합보안관리(ESM) | CC인증 | +| 데이터베이스 접근제어 | CC인증 | +| PC보안 | CC인증 | + +### CC인증 제품 확인 방법 + +1. **IT보안인증사무국** (www.itscc.kr) + - 인증제품 목록 조회 + - 인증서 유효기간 확인 + +2. **확인 사항** + - 인증 유효기간 + - 인증 범위 + - 평가 등급 + +### 보안적합성 검증 + +국가용 암호제품에 대한 검증 + +| 구분 | 대상 | +|------|------| +| 검증 기관 | 국가보안기술연구소 | +| 대상 제품 | 암호모듈, 네트워크암호화 장비 등 | +| 확인 방법 | 보안적합성 검증필 목록 조회 | + +--- + +## 공공 프로젝트 보안 요구사항 작성 예시 + +### 제안요청서(RFP) 보안 항목 + +```markdown +## 보안 요구사항 + +### 1. 일반 요구사항 +- 정보보호 관련 법규 준수 +- 공공기관용 CC인증 제품 도입 +- 정보보호 예산 10% 이상 확보 + +### 2. 기술적 요구사항 + +#### 2.1 네트워크 보안 +- 내/외부 네트워크 분리 +- 침입차단시스템(CC인증) 구축 +- 침입탐지시스템(CC인증) 구축 + +#### 2.2 시스템 보안 +- 서버 접근제어 솔루션 도입 +- 시스템 취약점 점검 수행 +- 보안 패치 관리 체계 구축 + +#### 2.3 데이터 보안 +- 중요 데이터 암호화 +- DB 접근제어 솔루션(CC인증) 도입 +- 개인정보 마스킹 처리 + +#### 2.4 애플리케이션 보안 +- 시큐어 코딩 적용 +- 소스코드 보안 취약점 점검 +- 웹 방화벽 도입 + +### 3. 관리적 요구사항 +- 보안 정책/지침 수립 +- 보안 교육 실시 +- 침해사고 대응 계획 수립 + +### 4. 검증 및 인수 요구사항 +- 취약점 분석·평가 수행 +- 모의해킹 수행 +- 보안성 검토 통과 +``` + +--- + +## 공공 프로젝트 보안 점검 일정 예시 + +| 단계 | 활동 | 시점 | 산출물 | +|------|------|------|--------| +| 분석 | 보안 요구사항 분석 | 분석 단계 | 보안 요구사항 정의서 | +| 설계 | 보안 아키텍처 설계 | 설계 단계 | 보안 설계서 | +| 구현 | 시큐어 코딩 | 개발 중 | 소스코드 점검 결과 | +| 시험 | 취약점 점검 | 테스트 단계 | 취약점 점검 보고서 | +| 시험 | 모의해킹 | 테스트 단계 | 모의해킹 보고서 | +| 이관 | 보안성 검토 | 이관 전 | 보안성 검토 결과서 | + +--- + +## 바이브코더를 위한 팁 + +### 정부과제 수행 시 필수 체크 + +1. **보안 예산 확보** + - RFP 단계에서 보안 예산 명시 요청 + - 최소 5~10% 확보 + +2. **CC인증 제품 조기 검토** + - 설계 단계에서 제품 목록 확인 + - 인증 유효기간 확인 + +3. **시큐어 코딩** + - 행정안전부 시큐어 코딩 가이드 준수 + - 소스코드 점검 도구 활용 + +4. **취약점 점검 일정** + - 개발 완료 후 충분한 점검 기간 확보 + - 조치 기간 고려 + +> **TIP** +> 바이브코딩으로 빠르게 개발하더라도 보안 점검 시간은 충분히 확보하세요. AI 코드 생성 시에도 OWASP Top 10, CWE Top 25를 고려한 프롬프트를 사용하면 보안 취약점을 줄일 수 있습니다. + +--- + +## 요약 + +| 항목 | 핵심 내용 | +|------|----------| +| 법적 요구사항 | 정보통신기반보호법, 전자정부법 | +| 예산 기준 | 정보화 예산의 5~10% | +| 제품 인증 | CC인증 필수 (공공기관) | +| 개발 보안 | 시큐어 코딩 + 취약점 점검 | + +--- + +*다음 장: 21장. 공공조달시장 대응* + + +--- + +# 21장. 공공조달시장 대응 + +> Part IV. 실무 적용 + +--- + +## 개요 + +공공조달시장에 진입하려면 보안 요건을 충족해야 합니다. 이 장에서는 조달청 보안 요건, 제안서 작성 가이드, 보안성 검토 대응 방법을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 공공조달시장 진입 체계 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 사전 준비 단계 │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ 인증 │ │ 실적 │ │ 인력 │ │ │ +│ │ │ 취득 │ │ 확보 │ │ 확보 │ │ │ +│ │ │ │ │ │ │ │ │ │ +│ │ │• ISMS │ │• 공공 │ │• 정보 │ │ │ +│ │ │• ISO │ │ 사업 │ │ 보안 │ │ │ +│ │ │ 27001 │ │ 수행 │ │ 기사 │ │ │ +│ │ │• GS인증 │ │ 경험 │ │• CISA │ │ │ +│ │ │• CC인증 │ │ │ │• CISSP │ │ │ +│ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ +│ └───────┼──────────────┼──────────────┼────────────────────┘ │ +│ └──────────────┼──────────────┘ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 입찰 참여 단계 │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ 나라장터 ──▶ 제안서 ──▶ 기술평가 ──▶ 낙찰/계약 │ │ +│ │ (g2b.go.kr) 작성 (보안배점) │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────────┐ │ +│ │ 수행 및 검토 단계 │ │ +│ ├───────────────────────────────────────────────────────────┤ │ +│ │ │ │ +│ │ 개발 수행 ──▶ 보안성 검토 신청 ──▶ 검토 통과 ──▶ 이관│ │ +│ │ (시큐어코딩) (국정원/자체) (보완조치) │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 21-1. 조달청 보안 요건 + +### 나라장터 (www.g2b.go.kr) + +공공조달 전자입찰 시스템 + +| 구분 | 내용 | +|------|------| +| 조달 방식 | 일반경쟁, 제한경쟁, 협상 | +| 계약 유형 | 물품, 용역, 공사 | +| 인증 요건 | 사업자등록, 조달등록 | + +### 정보화 사업 보안 요건 + +#### 보안성 검토 의무 + +| 대상 | 기준 | +|------|------| +| 필수 | 100억 이상 또는 기반시설 연계 | +| 권장 | 10억 이상 정보화 사업 | + +#### 보안 인증 요건 + +| 인증 | 요구 상황 | +|------|----------| +| ISMS | 대규모 정보시스템 운영 | +| ISMS-P | 개인정보 처리 시스템 | +| ISO 27001 | 국제 인증 요구 시 | +| CC인증 | 보안제품 도입 시 | + +### 조달 제품 보안 요구사항 + +#### 소프트웨어 제품 + +| 항목 | 요구사항 | +|------|----------| +| 시큐어 코딩 | 행안부 가이드 준수 | +| 취약점 점검 | KISA 또는 전문기관 점검 | +| 소스코드 | 에스크로 또는 제출 | + +#### 정보보호 제품 + +| 항목 | 요구사항 | +|------|----------| +| CC인증 | 국내용 CC인증 필수 | +| 기술지원 | 국내 기술지원 체계 | +| 유지보수 | 유지보수 계획 제출 | + +--- + +## 21-2. 제안서 작성 가이드 + +### 제안서 보안 항목 구성 + +```markdown +## 보안 계획 + +### 1. 개발 보안 +#### 1.1 시큐어 코딩 +- 적용 가이드: 행정안전부 시큐어 코딩 가이드 +- 점검 도구: [도구명] +- 점검 주기: 개발 단계별 + +#### 1.2 소스코드 점검 +- 점검 방법: 정적 분석 + 동적 분석 +- 점검 기관: [기관명/자체] +- 조치 계획: 점검 결과 100% 조치 + +### 2. 시스템 보안 +#### 2.1 접근통제 +- 네트워크 분리: DMZ, 업무망, DB망 +- 방화벽 정책: 최소 허용 원칙 +- 접근 로그: 6개월 이상 보관 + +#### 2.2 인증/권한 +- 인증 방식: ID/PW + OTP +- 권한 관리: RBAC 기반 +- 특권 계정: 별도 관리 + +### 3. 데이터 보안 +#### 3.1 암호화 +- 전송 구간: TLS 1.2 이상 +- 저장 데이터: AES-256 +- 키 관리: HSM 또는 별도 관리 + +#### 3.2 개인정보 +- 수집 최소화 +- 마스킹 처리 +- 파기 절차 + +### 4. 운영 보안 +#### 4.1 보안관제 +- 24x7 모니터링 +- 이상 탐지/대응 +- 월간 보고 + +#### 4.2 취약점 관리 +- 정기 점검: 연 1회 +- 패치 관리: 월 1회 +``` + +### 보안 제안 차별화 포인트 + +| 영역 | 차별화 포인트 | +|------|-------------| +| 인증 | ISMS/ISO 27001 보유 | +| 경험 | 유사 공공사업 수행 실적 | +| 도구 | 자체 보안 점검 도구 | +| 인력 | 정보보호 전문인력 보유 | +| 방법론 | 보안 개발 방법론 | + +### 제안 평가 시 보안 배점 + +| 평가 항목 | 배점 예시 | +|----------|:--------:| +| 기술성 (보안 포함) | 50~60점 | +| 가격 | 30~40점 | +| 기타 (실적 등) | 10~20점 | + +> **TIP** +> 보안 항목이 기술성 평가의 10~20%를 차지하는 경우가 많습니다. 구체적인 방법론과 경험을 강조하세요. + +--- + +## 21-3. 보안성 검토 대응 + +### 보안성 검토란? + +행정기관의 정보시스템 도입·개발 시 보안 요건 충족 여부를 검토하는 절차 + +| 항목 | 내용 | +|------|------| +| 근거 | 전자정부법 제56조 | +| 대상 | 공공기관 정보시스템 | +| 검토 기관 | 국정원(국가·공공) 또는 자체 | + +### 보안성 검토 절차 + +``` +1. 검토 신청 + - 사업 개요, 시스템 구성도 제출 + ↓ +2. 서류 검토 + - 보안 요구사항 충족 여부 + ↓ +3. 현장 검토 (필요 시) + - 실제 구축 환경 확인 + ↓ +4. 검토 결과 통보 + - 적합 / 보완 / 부적합 + ↓ +5. 보완 조치 (필요 시) + - 지적사항 조치 후 재검토 +``` + +### 보안성 검토 준비 체크리스트 + +| 영역 | 점검 항목 | 확인 | +|------|----------|:----:| +| **네트워크** | 망분리 적용 | ☐ | +| | 방화벽 정책 적정성 | ☐ | +| | 암호화 통신 적용 | ☐ | +| **시스템** | 보안 설정 적용 | ☐ | +| | CC인증 제품 도입 | ☐ | +| | 접근통제 적용 | ☐ | +| **응용** | 시큐어 코딩 적용 | ☐ | +| | 취약점 점검 완료 | ☐ | +| | 입력값 검증 | ☐ | +| **데이터** | 암호화 적용 | ☐ | +| | 개인정보 보호 | ☐ | +| | 로그 관리 | ☐ | +| **관리** | 보안 정책 수립 | ☐ | +| | 운영 절차 수립 | ☐ | +| | 교육 계획 | ☐ | + +### 보안성 검토 주요 지적 사항 + +| 영역 | 빈번한 지적 사항 | +|------|----------------| +| 네트워크 | 불필요한 포트 개방, 미흡한 망분리 | +| 시스템 | 기본 계정 미변경, 패치 미적용 | +| 응용 | SQL Injection, XSS 취약점 | +| 데이터 | 미암호화 전송/저장 | +| 관리 | 로그 미보관, 절차 미수립 | + +### 보안성 검토 대응 일정 예시 + +| 단계 | 기간 | 활동 | +|------|:----:|------| +| 준비 | 2주 | 문서 준비, 자체 점검 | +| 신청 | 1일 | 검토 신청서 제출 | +| 서류검토 | 2~4주 | 검토 진행 | +| 보완 | 1~2주 | 지적사항 조치 | +| 완료 | 1주 | 최종 검토 통과 | + +--- + +## 공공조달 진입을 위한 준비 + +### 사전 인증 취득 + +| 인증 | 효과 | 소요 기간 | +|------|------|:--------:| +| ISMS | 입찰 가점, 신뢰도 | 6개월~1년 | +| ISO 27001 | 국제 인증 | 3~6개월 | +| GS인증 | 소프트웨어 품질 | 2~3개월 | +| CC인증 | 보안제품 필수 | 6개월~1년 | + +### 사업 실적 확보 + +| 방법 | 설명 | +|------|------| +| 직접 수행 | 하도급 없이 직접 수행 | +| 공동 수급 | 실적 있는 업체와 공동 수행 | +| 단독 실적 | 소규모 사업부터 시작 | + +### 전문인력 확보 + +| 자격 | 분야 | +|------|------| +| 정보보안기사 | 보안 전반 | +| CISA/CISSP | 감사/관리 | +| OSCP | 모의해킹 | + +--- + +## 요약 + +| 항목 | 핵심 내용 | +|------|----------| +| 조달 요건 | CC인증, 시큐어 코딩, 취약점 점검 | +| 제안서 | 보안 계획 구체화, 방법론 제시 | +| 보안성 검토 | 사전 준비, 체크리스트 활용 | +| 사전 준비 | ISMS 인증, 실적 확보, 인력 | + +--- + +*다음 장: 22장. 자동화 도구 구축* + + +--- + +# 22장. 자동화 도구 구축 + +> Part IV. 실무 적용 + +--- + +## 개요 + +취약점 점검을 자동화하면 효율성이 크게 향상됩니다. 이 장에서는 점검 스크립트 아키텍처, 결과 수집 및 리포팅, CI/CD 파이프라인 연동 방법을 다룹니다. + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ KESE-KIT 자동화 아키텍처 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ 점검 대상 시스템 │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ Unix/ │ │ Windows │ │ Network │ │ Database│ │ │ +│ │ │ Linux │ │ Server │ │ Device │ │ (DBMS) │ │ │ +│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ +│ └───────┼────────────┼────────────┼────────────┼────────┘ │ +│ │ │ │ │ │ +│ └────────────┴────────────┴────────────┘ │ +│ │ │ +│ ▼ 점검 스크립트 실행 │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ 점검 엔진 (Scripts) │ │ +│ │ ┌───────────────┐ ┌────────────────┐ │ │ +│ │ │ 항목 정의 │ │ 대상 정의 │ │ │ +│ │ │ (items.yaml) │ │ (targets.yaml) │ │ │ +│ │ └───────────────┘ └────────────────┘ │ │ +│ └─────────────────────────┬───────────────────────────────┘ │ +│ │ │ +│ ▼ JSON 결과 전송 │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ 수집 서버 (Collector) │ │ +│ │ REST API (Flask/FastAPI) │ │ +│ │ ┌───────────────────────────────────────────────────┐ │ │ +│ │ │ /api/v1/results │ /api/v1/summary │ │ │ +│ │ └───────────────────────────────────────────────────┘ │ │ +│ └─────────────────────────┬───────────────────────────────┘ │ +│ │ │ +│ ┌────────────────┼────────────────┐ │ +│ ▼ ▼ ▼ │ +│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ +│ │ 리포팅 │ │ 웹 │ │ CI/CD │ │ +│ │ (HTML/PDF)│ │ 대시보드 │ │ 연동 │ │ +│ └───────────┘ └───────────┘ └───────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 22-1. 점검 스크립트 아키텍처 + +### 전체 구조 + +``` +KESE-KIT/ +├── scripts/ +│ ├── unix/ # Unix/Linux 점검 스크립트 +│ │ ├── account.sh # 계정 관리 +│ │ ├── file.sh # 파일/디렉터리 +│ │ ├── service.sh # 서비스 관리 +│ │ └── run_all.sh # 전체 실행 +│ ├── windows/ # Windows 점검 스크립트 +│ │ ├── account.ps1 +│ │ ├── service.ps1 +│ │ └── run_all.ps1 +│ ├── network/ # 네트워크 장비 점검 +│ └── database/ # 데이터베이스 점검 +├── collector/ # 결과 수집 모듈 +│ ├── agent.py # 에이전트 +│ └── server.py # 수집 서버 +├── reporter/ # 리포팅 모듈 +│ ├── templates/ # 보고서 템플릿 +│ └── generator.py # 보고서 생성기 +├── config/ # 설정 파일 +│ ├── items.yaml # 점검 항목 정의 +│ └── targets.yaml # 점검 대상 정의 +└── web/ # 웹 대시보드 + └── dashboard/ +``` + +### 점검 항목 정의 (YAML) + +```yaml +# config/items.yaml +unix: + - id: U-01 + name: root 계정 원격접속 제한 + category: 계정관리 + severity: 상 + check: + type: grep + target: /etc/ssh/sshd_config + pattern: "^PermitRootLogin" + expected: "no" + remediation: "sshd_config에서 PermitRootLogin no 설정" + + - id: U-02 + name: 패스워드 복잡성 설정 + category: 계정관리 + severity: 상 + check: + type: file_exists + target: /etc/security/pwquality.conf + remediation: "pwquality.conf 파일 설정" + +windows: + - id: W-01 + name: Administrator 계정 이름 변경 + category: 계정관리 + severity: 상 + check: + type: powershell + script: "(Get-LocalUser | Where-Object {$_.SID -like '*-500'}).Name" + expected_not: "Administrator" + remediation: "Administrator 계정명을 다른 이름으로 변경" +``` + +### 점검 대상 정의 (YAML) + +```yaml +# config/targets.yaml +groups: + - name: 웹서버 + targets: + - hostname: web01 + ip: 192.168.1.10 + os: linux + credentials: + type: ssh_key + user: admin + key_file: ~/.ssh/id_rsa + - hostname: web02 + ip: 192.168.1.11 + os: linux + + - name: DB서버 + targets: + - hostname: db01 + ip: 192.168.1.20 + os: linux + db_type: mysql +``` + +--- + +## 22-2. 통합 점검 스크립트 + +### Unix/Linux 통합 스크립트 + +```bash +#!/bin/bash +#=============================================== +# KESE KIT - Unix/Linux 통합 점검 스크립트 +# Version: 1.0 +#=============================================== + +# 설정 +REPORT_DIR="/var/log/kese_kit" +REPORT_FILE="$REPORT_DIR/$(hostname)_$(date +%Y%m%d).json" +RESULT=() + +# 로그 디렉터리 생성 +mkdir -p "$REPORT_DIR" + +# 점검 함수 +check_item() { + local id="$1" + local name="$2" + local result="$3" # GOOD, VULN, N/A + local detail="$4" + + RESULT+=("{\"id\":\"$id\",\"name\":\"$name\",\"result\":\"$result\",\"detail\":\"$detail\"}") + + if [ "$result" == "GOOD" ]; then + echo -e "[\e[32m양호\e[0m] $id: $name" + elif [ "$result" == "VULN" ]; then + echo -e "[\e[31m취약\e[0m] $id: $name - $detail" + else + echo -e "[\e[33mN/A\e[0m] $id: $name" + fi +} + +# U-01: root 원격접속 제한 +check_u01() { + local id="U-01" + local name="root 계정 원격접속 제한" + + if grep -q "^PermitRootLogin no" /etc/ssh/sshd_config 2>/dev/null; then + check_item "$id" "$name" "GOOD" "" + else + check_item "$id" "$name" "VULN" "PermitRootLogin이 no가 아님" + fi +} + +# U-02: 패스워드 복잡성 +check_u02() { + local id="U-02" + local name="패스워드 복잡성 설정" + + if [ -f /etc/security/pwquality.conf ]; then + check_item "$id" "$name" "GOOD" "" + else + check_item "$id" "$name" "VULN" "pwquality.conf 미존재" + fi +} + +# U-04: 패스워드 파일 보호 +check_u04() { + local id="U-04" + local name="패스워드 파일 보호" + + if [ ! -r /etc/shadow ] || [ "$(stat -c %a /etc/shadow)" -le "400" ]; then + check_item "$id" "$name" "GOOD" "" + else + check_item "$id" "$name" "VULN" "/etc/shadow 권한 과다" + fi +} + +# 메인 실행 +echo "=============================================" +echo "KESE KIT - Unix/Linux 취약점 점검" +echo "Host: $(hostname)" +echo "Date: $(date)" +echo "=============================================" + +check_u01 +check_u02 +check_u04 +# ... 추가 점검 항목 + +# JSON 결과 저장 +echo "[" > "$REPORT_FILE" +echo "${RESULT[*]}" | sed 's/} {/},\n{/g' >> "$REPORT_FILE" +echo "]" >> "$REPORT_FILE" + +echo "" +echo "결과 저장: $REPORT_FILE" +``` + +### Windows 통합 스크립트 + +```powershell +#=============================================== +# KESE KIT - Windows 통합 점검 스크립트 +# Version: 1.0 +#=============================================== + +param( + [string]$ReportPath = "C:\KESE_KIT\Reports" +) + +# 설정 +$ReportFile = Join-Path $ReportPath "$($env:COMPUTERNAME)_$(Get-Date -Format 'yyyyMMdd').json" +$Results = @() + +# 디렉터리 생성 +New-Item -ItemType Directory -Path $ReportPath -Force | Out-Null + +# 점검 함수 +function Test-Item { + param( + [string]$Id, + [string]$Name, + [string]$Result, + [string]$Detail = "" + ) + + $script:Results += @{ + id = $Id + name = $Name + result = $Result + detail = $Detail + } + + $color = switch ($Result) { + "GOOD" { "Green" } + "VULN" { "Red" } + default { "Yellow" } + } + + Write-Host "[$Result] $Id`: $Name" -ForegroundColor $color + if ($Detail) { Write-Host " -> $Detail" -ForegroundColor Gray } +} + +# W-01: Administrator 계정명 변경 +function Test-W01 { + $id = "W-01" + $name = "Administrator 계정 이름 변경" + + $admin = Get-LocalUser | Where-Object { $_.SID -like "*-500" } + if ($admin.Name -ne "Administrator") { + Test-Item -Id $id -Name $name -Result "GOOD" + } else { + Test-Item -Id $id -Name $name -Result "VULN" -Detail "기본 계정명 사용 중" + } +} + +# W-02: Guest 계정 비활성화 +function Test-W02 { + $id = "W-02" + $name = "Guest 계정 비활성화" + + $guest = Get-LocalUser -Name "Guest" -ErrorAction SilentlyContinue + if (-not $guest.Enabled) { + Test-Item -Id $id -Name $name -Result "GOOD" + } else { + Test-Item -Id $id -Name $name -Result "VULN" -Detail "Guest 계정 활성화됨" + } +} + +# W-03: 패스워드 복잡성 +function Test-W03 { + $id = "W-03" + $name = "패스워드 복잡성 설정" + + $policy = Get-Content C:\Windows\System32\GroupPolicy\Machine\Microsoft\Windows NT\SecEdit\GptTmpl.inf -ErrorAction SilentlyContinue + if ($policy -match "PasswordComplexity\s*=\s*1") { + Test-Item -Id $id -Name $name -Result "GOOD" + } else { + # secedit로 확인 + secedit /export /cfg "$env:TEMP\secpol.cfg" | Out-Null + $cfg = Get-Content "$env:TEMP\secpol.cfg" + if ($cfg -match "PasswordComplexity\s*=\s*1") { + Test-Item -Id $id -Name $name -Result "GOOD" + } else { + Test-Item -Id $id -Name $name -Result "VULN" -Detail "복잡성 미설정" + } + } +} + +# 메인 실행 +Write-Host "=============================================" -ForegroundColor Cyan +Write-Host "KESE KIT - Windows 취약점 점검" -ForegroundColor Cyan +Write-Host "Host: $($env:COMPUTERNAME)" +Write-Host "Date: $(Get-Date)" +Write-Host "=============================================" -ForegroundColor Cyan + +Test-W01 +Test-W02 +Test-W03 +# ... 추가 점검 항목 + +# JSON 결과 저장 +$Results | ConvertTo-Json | Out-File $ReportFile -Encoding UTF8 + +Write-Host "" +Write-Host "결과 저장: $ReportFile" -ForegroundColor Green +``` + +--- + +## 22-3. 결과 수집 및 리포팅 + +### 결과 수집 서버 (Python) + +```python +""" +KESE KIT - 결과 수집 서버 +Flask 기반 REST API +""" +from flask import Flask, request, jsonify +from datetime import datetime +import json +import os + +app = Flask(__name__) +RESULT_DIR = "./results" + +@app.route('/api/v1/results', methods=['POST']) +def receive_result(): + """점검 결과 수신""" + data = request.json + + hostname = data.get('hostname', 'unknown') + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + filename = f"{hostname}_{timestamp}.json" + + os.makedirs(RESULT_DIR, exist_ok=True) + with open(os.path.join(RESULT_DIR, filename), 'w') as f: + json.dump(data, f, ensure_ascii=False, indent=2) + + return jsonify({'status': 'success', 'filename': filename}) + +@app.route('/api/v1/results', methods=['GET']) +def get_results(): + """점검 결과 목록 조회""" + files = os.listdir(RESULT_DIR) if os.path.exists(RESULT_DIR) else [] + return jsonify({'results': files}) + +@app.route('/api/v1/results/', methods=['GET']) +def get_result(filename): + """특정 점검 결과 조회""" + filepath = os.path.join(RESULT_DIR, filename) + if os.path.exists(filepath): + with open(filepath, 'r') as f: + return jsonify(json.load(f)) + return jsonify({'error': 'Not found'}), 404 + +@app.route('/api/v1/summary', methods=['GET']) +def get_summary(): + """전체 현황 요약""" + if not os.path.exists(RESULT_DIR): + return jsonify({'total': 0, 'good': 0, 'vuln': 0}) + + total, good, vuln = 0, 0, 0 + for filename in os.listdir(RESULT_DIR): + with open(os.path.join(RESULT_DIR, filename), 'r') as f: + data = json.load(f) + for item in data.get('results', []): + total += 1 + if item.get('result') == 'GOOD': + good += 1 + elif item.get('result') == 'VULN': + vuln += 1 + + return jsonify({ + 'total': total, + 'good': good, + 'vuln': vuln, + 'compliance_rate': round(good / total * 100, 1) if total > 0 else 0 + }) + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000) +``` + +### 보고서 생성기 (Python) + +```python +""" +KESE KIT - 보고서 생성기 +취약점 점검 결과를 HTML/PDF 보고서로 생성 +""" +from jinja2 import Template +import json +from datetime import datetime + +HTML_TEMPLATE = """ + + + + + 취약점 점검 보고서 + + + +

주요정보통신기반시설 취약점 점검 보고서

+ +
+

점검 개요

+

점검 일시: {{ date }}

+

점검 대상: {{ hostname }}

+

총 점검 항목: {{ total }}개

+

양호: {{ good }}개 / + 취약: {{ vuln }}개

+

준수율: {{ compliance_rate }}%

+
+ +

점검 결과 상세

+ + + + + + + + {% for item in results %} + + + + + + + {% endfor %} +
ID점검 항목결과세부 내용
{{ item.id }}{{ item.name }} + {{ '양호' if item.result == 'GOOD' else '취약' }} + {{ item.detail }}
+ + +""" + +def generate_report(result_file, output_file): + """점검 결과로부터 HTML 보고서 생성""" + with open(result_file, 'r') as f: + data = json.load(f) + + results = data.get('results', []) + good = sum(1 for r in results if r.get('result') == 'GOOD') + vuln = sum(1 for r in results if r.get('result') == 'VULN') + total = len(results) + + template = Template(HTML_TEMPLATE) + html = template.render( + date=datetime.now().strftime('%Y-%m-%d %H:%M'), + hostname=data.get('hostname', 'Unknown'), + total=total, + good=good, + vuln=vuln, + compliance_rate=round(good / total * 100, 1) if total > 0 else 0, + results=results + ) + + with open(output_file, 'w', encoding='utf-8') as f: + f.write(html) + + print(f"보고서 생성: {output_file}") + +if __name__ == '__main__': + generate_report('result.json', 'report.html') +``` + +--- + +## 22-4. CI/CD 파이프라인 연동 + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ CI/CD 보안 점검 파이프라인 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌──────────┐ │ +│ │ 코드 │ │ +│ │ Push │ │ +│ └────┬─────┘ │ +│ │ │ +│ ▼ │ +│ ╔══════════════════════════════════════════════════════╗ │ +│ ║ CI/CD Pipeline (자동 실행) ║ │ +│ ╠══════════════════════════════════════════════════════╣ │ +│ ║ ║ │ +│ ║ ┌─────────┐ ┌─────────┐ ┌─────────┐ ║ │ +│ ║ │ SAST │ │의존성 │ │KESE-KIT │ ║ │ +│ ║ │(Bandit) │ │검사 │ │ 점검 │ ║ │ +│ ║ │ │ │(Safety) │ │ │ ║ │ +│ ║ └────┬────┘ └────┬────┘ └────┬────┘ ║ │ +│ ║ │ │ │ ║ │ +│ ║ └────────────┴────────────┘ ║ │ +│ ║ │ ║ │ +│ ║ ▼ ║ │ +│ ║ ┌───────────────┐ ║ │ +│ ║ │ 보고서 생성 │ ║ │ +│ ║ │ (HTML/JSON) │ ║ │ +│ ║ └───────┬───────┘ ║ │ +│ ║ │ ║ │ +│ ╚════════════════════╪════════════════════════════════╝ │ +│ │ │ +│ ┌───────────────┼───────────────┐ │ +│ ▼ ▼ ▼ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ 아티팩트 │ │ 알림 │ │ 리포트 │ │ +│ │ 저장 │ │ (이메일) │ │ 게시 │ │ +│ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### GitHub Actions 연동 + +```yaml +# .github/workflows/security-check.yml +name: Security Vulnerability Check + +on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main ] + schedule: + - cron: '0 0 * * 1' # 매주 월요일 + +jobs: + security-check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + pip install -r requirements.txt + pip install bandit safety + + - name: Run SAST (Bandit) + run: | + bandit -r . -f json -o bandit-report.json || true + + - name: Run dependency check (Safety) + run: | + safety check --json > safety-report.json || true + + - name: Run KESE-KIT checks + run: | + ./scripts/unix/run_all.sh + + - name: Upload results + uses: actions/upload-artifact@v3 + with: + name: security-reports + path: | + bandit-report.json + safety-report.json + /var/log/kese_kit/*.json + + - name: Check for critical vulnerabilities + run: | + python scripts/check_critical.py +``` + +### Jenkins 파이프라인 + +```groovy +// Jenkinsfile +pipeline { + agent any + + stages { + stage('Checkout') { + steps { + checkout scm + } + } + + stage('Security Scan') { + parallel { + stage('SAST') { + steps { + sh 'bandit -r . -f json -o bandit-report.json || true' + } + } + + stage('Dependency Check') { + steps { + sh 'safety check --json > safety-report.json || true' + } + } + + stage('KESE-KIT') { + steps { + sh './scripts/unix/run_all.sh' + } + } + } + } + + stage('Generate Report') { + steps { + sh 'python reporter/generator.py' + } + } + + stage('Archive') { + steps { + archiveArtifacts artifacts: '*.json,*.html', fingerprint: true + } + } + } + + post { + always { + publishHTML([ + reportDir: '.', + reportFiles: 'report.html', + reportName: 'Security Report' + ]) + } + failure { + emailext( + subject: "보안 점검 실패: ${env.JOB_NAME}", + body: "점검 결과를 확인하세요: ${env.BUILD_URL}", + to: 'security@company.com' + ) + } + } +} +``` + +--- + +## 요약 + +| 항목 | 핵심 내용 | +|------|----------| +| 아키텍처 | 모듈화된 스크립트 구조 | +| 점검 정의 | YAML 기반 항목/대상 정의 | +| 결과 수집 | REST API 기반 수집 서버 | +| 리포팅 | HTML/PDF 자동 생성 | +| CI/CD | GitHub Actions, Jenkins 연동 | + +--- + +## Part IV 완료 + +Part IV (실무 적용)에서 다룬 내용: + +- 20장: 정부과제 환경 적용 +- 21장: 공공조달시장 대응 +- 22장: 자동화 도구 구축 + +--- + +*다음: 부록* + + +--- + +# 23장. AI 보안 개요 + +AI 기술이 빠르게 확산되면서 보안 위협도 함께 진화하고 있습니다. 이 장에서는 AI 시스템을 대상으로 한 주요 보안 위협 유형을 살펴보고, KISA의 「인공지능(AI) 보안 안내서」가 제시하는 적용범위와 생명주기 기반 보안 프레임워크를 정리합니다. + +기존 1~22장에서 다룬 주요정보통신기반시설(Critical Information Infrastructure, CII) 점검 항목과 달리, 이 파트는 AI 시스템 고유의 보안 요구사항에 초점을 맞춥니다. + +> **TIP** +> AI 보안은 기존 정보보안의 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability) 원칙을 AI 시스템에 확장 적용한 것입니다. 1장에서 다룬 CII 보안 프레임워크와 동일한 철학을 공유합니다. + +--- + +## 23-1. AI 보안 위협 유형 + +AI 시스템을 대상으로 한 보안 위협은 크게 **프롬프트 주입 공격**, **민감 정보 노출**, **적대적 공격**으로 나뉩니다. 각 위협은 AI 모델의 특성을 악용하는 방식으로, 기존 IT 보안 위협과는 성격이 다릅니다. + +### 23-1-1. 프롬프트 주입 공격(Prompt Injection) + +대규모 언어 모델(Large Language Model, LLM)에 조작된 입력을 넣어 공격자의 의도대로 동작하게 만드는 공격입니다. + +**직접 프롬프트 주입(Direct Prompt Injection)** + +탈옥(AI Jailbreak)이라고도 합니다. 악의적인 프롬프트를 직접 입력하여 모델의 보안 제한을 우회합니다. 시스템 프롬프트를 무력화하고 민감 정보를 추출하거나, 허용되지 않은 동작을 유도합니다. + +**간접 프롬프트 주입(Indirect Prompt Injection)** + +외부 데이터 소스(웹 페이지, 문서 등)에 악성 프롬프트를 삽입합니다. 모델이 해당 데이터를 처리할 때 공격이 실행됩니다. 검색 증강 생성(Retrieval-Augmented Generation, RAG) 기반 시스템에서 특히 위험합니다. + +**플러그인 기반 공격** + +LLM이 연동하는 외부 플러그인이나 API를 악용합니다. 웹사이트가 플러그인을 통해 사기 목적으로 모델을 조작할 수 있습니다. + +> **WARNING** +> 바이브코딩 환경에서 AI 코딩 어시스턴트를 사용할 때도 프롬프트 주입에 주의해야 합니다. 외부 라이브러리의 README나 코드 주석에 악성 프롬프트가 삽입될 수 있습니다. + +**실제 사례** + +- Amazon Alexa와 Google Assistant가 레이저 기반 해킹 공격에 노출되어 스마트 스피커에 원격 명령을 실행할 수 있었습니다. +- 해커가 Amazon과 Google의 애플리케이션 업그레이드 메커니즘을 악용하여 음성 비서의 응답을 조작했습니다. + +### 23-1-2. 민감 정보 노출(Sensitive Information Disclosure) + +LLM 기반 서비스가 학습 데이터에 포함된 민감 정보를 의도치 않게 출력하는 위협입니다. + +**주요 원인** + +| 원인 | 설명 | +|------|------| +| 비의도적 노출 | 데이터 스크러빙 미흡으로 학습 데이터의 민감 정보가 응답에 포함 | +| 필터링 오류 | 위험하거나 부적절한 응답이 필터를 우회하여 출력 | +| 과적합(Overfitting) | 모델이 학습 데이터에 과도하게 맞춰져 민감 정보를 기억 | + +**실제 사례** + +- OpenAI의 ChatGPT에서 약국 포털 직원의 로그인 정보와 개인 데이터가 유출되었습니다. +- 2023년 3월, ChatGPT 버그로 인해 한 사용자의 채팅 기록이 다른 사용자에게 노출되었습니다. +- 2023년, Google DeepMind와 대학 연구진이 간단한 프롬프트 공격으로 ChatGPT에서 개인정보를 포함한 10,000건의 학습 데이터를 추출할 수 있음을 증명했습니다. + +### 23-1-3. 적대적 공격(Adversarial Attack) + +AI 모델의 입력 데이터를 교묘하게 조작하여 오작동을 유도하는 공격입니다. 크게 세 가지로 분류됩니다. + +#### 회피 공격(Evasion Attack) + +입력 데이터에 사람이 인식할 수 없는 수준의 노이즈를 추가하여 모델을 속이는 공격입니다. 주로 이미지 인식 모델을 대상으로 합니다. + +**실제 사례** + +- 2017년 워싱턴대 연구팀이 정지 표지판에 스티커를 부착하여 자율주행 차량이 속도 제한 표지판으로 오인식하도록 만들었습니다. +- 2018년 Google Research가 적대적 패치(Adversarial Patch) 논문을 발표했습니다. 바나나 옆에 스티커를 붙이면 이미지 인식 앱이 100% 확률로 토스터로 인식했습니다. + +#### 오염 공격(Poisoning Attack) + +모델 학습 과정에서 의도적으로 오염된 데이터를 주입하는 공격입니다. 모델이 특정 상황에서 부적절하게 동작하도록 만듭니다. + +**실제 사례** + +- 2024년 중국산 로봇 청소기 'Ecovacs Deebot X2s'가 해킹되어 미국 가정에서 인종차별적 발언을 했습니다. 해커가 제조사 보안을 우회하여 카메라, 마이크, 이동 제어 기능을 탈취했습니다. +- 2016년 Microsoft의 챗봇 'Tay'가 악의적인 사용자들의 데이터 오염으로 부적절한 발언을 생성했습니다. Microsoft는 출시 16시간 만에 서비스를 중단했습니다. + +#### 탐색적 공격(Exploratory Attack) + +학습된 모델에 다수의 질의를 보내 모델의 내부 구조나 학습 데이터를 역추적하는 공격입니다. + +**데이터 추출 공격(Data Extraction / Inversion Attack)** + +모델의 학습에 사용된 원본 데이터를 복원하는 공격입니다. 예를 들어 얼굴 인식 모델에서 학습에 사용된 얼굴 이미지를 역추출할 수 있습니다. + +> **TIP** +> 데이터 추출 공격은 질의 빈도를 제한하는 것으로 대응할 수 있습니다. 예를 들어, 1인당 하루 질의 횟수를 제한하면 공격 효과를 최소화할 수 있습니다. API 호출 제한(Rate Limiting) 설정은 4장(W-15 이후)과 5장(WS-06 이후)의 서비스 관리 항목을 참조하세요. + +**모델 추출 공격(Model Extraction)** + +수많은 질의와 응답을 분석하여 모델의 분류 기준과 학습 내용을 복제하는 공격입니다. + +- Amazon의 ML 모델과 유사한 모델을 단 650건의 질의로 70초 만에 생성한 연구 사례가 있습니다. +- 서비스형 기계학습(Machine Learning as a Service, MLaaS)의 유료 모델을 탈취하는 데 악용될 수 있습니다. +- 추출된 모델을 이용한 2차 공격(회피 공격, 전도 공격 등)으로 이어질 수 있습니다. + +**공격자 지식 수준에 따른 분류** + +| 유형 | 설명 | +|------|------| +| 그레이박스(Gray-box) 모델 추출 | 공격자가 대상 AI 모델에 대한 부분적 사전 지식을 보유 | +| 블랙박스(Black-box) 모델 추출 | 공격자가 대상 AI 모델에 대한 사전 지식 없이 공격 | + +### 23-1-4. AI 보안 위협 요약 + +| 위협 유형 | 공격 대상 | 핵심 위험 | 대응 방향 | +|-----------|-----------|-----------|-----------| +| 프롬프트 주입 | LLM 입력 | 보안 제한 우회, 데이터 유출 | 입력 검증, 프롬프트 필터링 | +| 민감 정보 노출 | 학습 데이터 | 개인정보 유출, 기밀 노출 | 데이터 스크러빙, 과적합 방지 | +| 회피 공격 | 입력 데이터 | 모델 오작동 | 적대적 학습, 입력 검증 | +| 오염 공격 | 학습 과정 | 모델 무결성 훼손 | 데이터 검증, 이상치 탐지 | +| 데이터 추출 | 모델 응답 | 학습 데이터 복원 | 질의 제한, 차분 프라이버시 | +| 모델 추출 | 모델 응답 | 모델 복제, 지적재산 탈취 | 질의 제한, 응답 난독화 | + +--- + +## 23-2. AI 보안 안내서의 적용범위 + +KISA의 「인공지능(AI) 보안 안내서」는 기존 AI 신뢰성 가이드라인과 달리 **보안(Security)**에 특화된 안내서입니다. 이 절에서는 안내서의 핵심 특징과 적용 대상을 정리합니다. + +### 23-2-1. 기존 가이드라인과의 차이점 + +기존에 발표된 AI 관련 가이드라인은 주로 신뢰성(Trustworthiness)에 초점을 맞추었습니다. 편향성, 투명성, 윤리적 문제를 다루었지만, 구체적인 보안 요구사항은 부족했습니다. + +AI 보안 안내서는 정보보안의 3요소인 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)을 AI 시스템에 적용합니다. 여기에 **책임 추적성(Accountability)**을 추가하여 4가지 보안 목표를 제시합니다. + +| 보안 목표 | 설명 | AI 시스템 적용 | +|-----------|------|---------------| +| 기밀성 | 인가된 사용자만 정보에 접근 | 학습 데이터, 모델 파라미터 보호 | +| 무결성 | 데이터와 시스템의 정확성 유지 | 학습 데이터 오염 방지, 모델 변조 방지 | +| 가용성 | 서비스와 데이터의 접근성 보장 | AI 서비스 연속성, DDoS 대응 | +| 책임 추적성 | 행위에 대한 책임과 검증 가능성 | 모델 결정의 추적 가능성, 감사 로그 | + +### 23-2-2. 적용 대상 + +안내서는 AI 생태계의 세 주체를 대상으로 합니다. + +**AI 개발자(Developer)** + +시스템 분석가의 요구사항에 따라 프로그래밍이나 시스템 설계를 수행하는 소프트웨어 개발자 또는 개발 조직입니다. 24장에서 상세하게 다룹니다. + +**AI 서비스 제공자(Service Provider)** + +AI 서비스 또는 보조 서비스를 타인에게 제공하는 사업자입니다. 영리 법인이 주요 대상입니다. 25장에서 상세하게 다룹니다. + +**AI 이용자(User)** + +AI 서비스를 타인에게 제공하지 않고 직접 사용하는 사람입니다. 일반 대중이 주요 대상이지만, 기업 내 AI 사용자도 포함합니다. 26장에서 상세하게 다룹니다. + +> **TIP** +> 바이브코딩을 하는 개발자라면 AI 이용자이면서 동시에 개발자이기도 합니다. AI 코딩 어시스턴트를 사용하여 코드를 생성할 때는 26장의 이용자 보안 수칙과 24장의 개발 보안 요구사항을 함께 참고하세요. + +### 23-2-3. 참고 국제 표준 및 가이드라인 + +AI 보안 안내서는 다음 국제 표준과 가이드라인을 참고하여 작성되었습니다. + +| 기관 | 문서명 | 비고 | +|------|--------|------| +| NIST (미국) | AI Risk Management Framework (AI RMF 1.0) | 2023년 1월 | +| ISO/IEC | 42001, 23894 | AI 관리체계 표준 | +| OWASP (미국) | Top 10 for LLM Applications (Ver 1.1) | LLM 취약점 Top 10 | +| Google | SAIF (Secure AI Framework) | AI 보안 프레임워크 | +| EU | EU AI Act | AI 규제법 | +| OECD | AI Principles | AI 원칙 | +| UK NCSC | Guidelines for Secure AI System Development | 2023년 11월 | +| 일본 | AI Business Operator Guidelines (Ver 1.0) | 2024년 6월 | +| 한국 TTA | 신뢰할 수 있는 인공지능 개발 안내서 | | +| 한국 NIS | ChatGPT 등 생성형 AI 활용 보안 가이드라인 | | + +--- + +## 23-3. AI 서비스 생명주기와 보안 프레임워크 + +AI 보안 안내서는 AI 서비스의 전체 생명주기를 6단계로 구분하고, 각 단계별 보안 요구사항을 제시합니다. 기존 가이드라인이 5단계를 사용하는 것과 달리, **파기(Disposal)** 단계를 별도로 분리한 것이 특징입니다. + +### 23-3-1. 6단계 생명주기 + +``` +┌─────────────┐ ┌─────────────┐ ┌─────────────┐ +│ 1. 계획 및 │───▶│ 2. 데이터 │───▶│ 3. 모델 │ +│ 설계 │ │ 수집 및 준비 │ │ 개발 │ +└─────────────┘ └─────────────┘ └─────────────┘ + │ +┌─────────────┐ ┌─────────────┐ ┌─────────────┐ +│ 6. 파기 │◀───│ 5. 모니터링 │◀───│ 4. 모델 │ +│ │ │ 및 유지보수 │ │ 배포 │ +└─────────────┘ └─────────────┘ └─────────────┘ +``` + +**1단계. 계획 및 설계(Planning & Design)** + +AI가 해결할 비즈니스 및 기술적 목표를 정의합니다. 관리 감독 조직과 방법을 수립하고, 시스템 위험요소를 분석하여 대응 방안을 마련합니다. + +- 보안 거버넌스 체계 구축 +- AI 모델 개발에 대한 위험관리 계획 수립 +- 24장 24-1절에서 상세 점검 항목을 다룹니다. + +**2단계. 데이터 수집 및 준비(Data Collection & Preparation)** + +데이터 소스를 정의하고 보안 정책과 법적 제약을 고려합니다. 결측치와 중복 데이터를 처리하고, 학습/검증/테스트 데이터셋으로 분리합니다. + +- 데이터 수집 시 네트워크 보안 +- 데이터 무결성 검증 +- 데이터 라벨링 보안 +- 24장 24-2절에서 상세 점검 항목을 다룹니다. + +**3단계. 모델 개발(Model Development)** + +적절한 기술과 알고리즘을 선택하고, 준비된 데이터로 모델을 학습합니다. 미사용 테스트 데이터로 정확도와 견고성(Robustness)을 검증합니다. + +- 학습/검증 환경 보안 +- 알고리즘 및 모델 보안 +- 오픈소스 라이브러리 보안 +- 개발 환경(LLM 활용 포함) 보안 +- 24장 24-3절에서 상세 점검 항목을 다룹니다. + +**4단계. 모델 배포(Model Deployment)** + +모델을 클라우드, 엣지 디바이스, 내부 서버에 배포합니다. 다른 시스템과 실시간 또는 배치 방식으로 연동합니다. + +- 배포 과정 보안 +- API 보안 +- 24장 24-4절에서 상세 점검 항목을 다룹니다. + +**5단계. 모니터링 및 유지보수(Monitoring & Maintenance)** + +배포 후 모델 성능을 지속적으로 추적합니다. 보안 취약점을 탐지하고 완화하며, 업데이트와 패치를 적용합니다. + +- 운영 보안 +- 사용자 피드백 및 개선 과정 보안 +- 24장 24-5절에서 상세 점검 항목을 다룹니다. + +**6단계. 파기(Disposal)** + +중요 데이터와 로그를 백업한 후 파기합니다. 잔여 데이터 유출을 방지하고, 파기 사유와 교훈을 문서화합니다. + +- 모델 파일 및 학습 데이터 완전 삭제 +- 복구 불가능한 방식으로 처리 +- 24장 24-6절에서 상세 점검 항목을 다룹니다. + +> **WARNING** +> 파기 단계를 소홀히 하면 폐기된 AI 모델에서 학습 데이터가 복원되어 민감 정보가 유출될 수 있습니다. 23-1-3절의 데이터 추출 공격 사례를 참고하세요. + +### 23-3-2. 보안 프레임워크 구성 + +AI 보안 프레임워크는 **보안 목표**, **거버넌스**, **위험관리** 세 축으로 구성됩니다. + +``` +┌─────────────────────────────────────────────┐ +│ 보안 프레임워크 │ +├─────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────┐ │ +│ │ 보안 목표: C.I.A. + 책임 추적성 │ │ +│ └───────────────────────────────────────┘ │ +│ │ +│ ┌──────────────┐ ┌──────────────────────┐ │ +│ │ 거버넌스 │ │ 위험관리 │ │ +│ │ │ │ │ │ +│ │ · 정책 │ │ · 위험 분석 │ │ +│ │ · 규정 │ │ · 위험 감지 │ │ +│ │ · 절차 │ │ · 사고 대응 │ │ +│ └──────────────┘ └──────────────────────┘ │ +│ │ +│ ┌───────────────────────────────────────┐ │ +│ │ 6단계 생명주기별 보안 요구사항 │ │ +│ └───────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────┘ +``` + +**거버넌스(Governance)** + +조직의 AI 관련 정책, 절차, 표준, 지침을 수립합니다. 역할과 책임을 명확히 하여 AI 워크로드에 대한 관리 체계를 갖춥니다. + +| 구성 요소 | 내용 | +|-----------|------| +| 정책(Policy) | AI 보안 정책, 접근 제어 정책, 데이터 보호 정책 | +| 규정(Guidelines) | AI 모델 관리 규정, 모니터링 규정, 위험관리 규정 | +| 절차(Process) | 보안 평가 절차, 업데이트/패치 절차, 비상 대응 계획 | + +> **TIP** +> AI 거버넌스 체계는 13장에서 다룬 정보보호 정책 및 조직(A-1 ~ A-9)과 동일한 프레임워크 위에 구축합니다. 기존 정보보호 조직에 AI 보안 역할을 추가하는 방식으로 접근하면 효율적입니다. + +**위험관리(Risk Management)** + +| 단계 | 활동 | 설명 | +|------|------|------| +| 위험 분석 | 식별 → 평가 → 완화 계획 | 기술·운영·윤리·법적 위험을 식별하고 심각도와 발생 확률을 평가 | +| 위험 감지 | 모니터링 → 이상 탐지 → 알림 | AI 시스템의 성능과 안전을 실시간으로 모니터링 | +| 사고 대응 | 대응 → 복구 → 재발 방지 | 위험 발생 시 신속한 대응과 피해 최소화 | + +### 23-3-3. AI 유형별 차별화 + +안내서는 예측형 AI(Predictive AI)와 생성형 AI(Generative AI)를 구분하여 보안 요구사항을 제시합니다. 동일한 보안 항목이라도 AI 유형에 따라 위험 요소가 다르기 때문입니다. + +| 구분 | 예측형 AI(Predictive AI) | 생성형 AI(Generative AI) | +|------|------------------------|------------------------| +| 핵심 기술 | 통계 알고리즘, 기계학습(ML) | 딥러닝, 대규모 언어 모델(LLM) | +| 주요 기능 | 과거/현재 데이터 기반 패턴 식별 및 추론 | 학습 데이터 기반 새로운 콘텐츠 생성 | +| 데이터 보안 초점 | 고품질 데이터 확보, 정확한 라벨링 | 오픈소스 모델의 안전한 활용 | +| 주요 위협 | 데이터 역추적, 예측 결과 조작 | 민감 정보 생성, 유해 콘텐츠 생성 | +| 파기 시 위험 | 비즈니스 데이터 유출 | 학습 데이터 복원, 모델 악용 | + +> **TIP** +> 바이브코딩에서 주로 사용하는 AI 코딩 어시스턴트(Claude, ChatGPT, Cursor, Copilot 등)는 생성형 AI에 해당합니다. 생성형 AI 관련 보안 요구사항을 우선적으로 확인하세요. + +--- + +## 23장 요약 체크리스트 + +| 점검 항목 | 확인 | +|-----------|:----:| +| AI 시스템의 주요 보안 위협 유형(프롬프트 주입, 정보 노출, 적대적 공격)을 이해했는가? | □ | +| AI 보안 안내서의 4가지 보안 목표(C.I.A. + 책임 추적성)를 파악했는가? | □ | +| AI 생태계의 3대 주체(개발자, 서비스 제공자, 이용자)별 역할을 이해했는가? | □ | +| 6단계 AI 서비스 생명주기를 숙지했는가? | □ | +| 보안 프레임워크의 3축(보안 목표, 거버넌스, 위험관리)을 이해했는가? | □ | +| 예측형 AI와 생성형 AI의 보안 차이점을 파악했는가? | □ | + +--- + +*다음 장(24장)에서는 AI 개발자를 위한 보안 요구사항과 검증항목을 생명주기 단계별로 상세하게 다룹니다.* + + +--- + +# 24장. AI 개발자를 위한 보안 점검 + +23장에서 AI 보안 위협 유형과 생명주기 기반 프레임워크를 살펴보았습니다. 이 장에서는 AI 개발자가 각 생명주기 단계에서 점검해야 할 보안 요구사항을 구체적으로 다룹니다. + +KISA의 「인공지능(AI) 보안 안내서」가 제시하는 6단계 생명주기를 따라 점검 항목을 정리합니다. 바이브코더, 서버 운용 개발자, 정부과제 개발자 모두에게 실무 지침을 제공합니다. + +> **TIP** +> 이 장의 점검 항목은 기존 1~22장의 CII 보안 항목과 병행하여 적용합니다. AI 시스템도 서버, 네트워크, 데이터베이스 위에서 동작하므로 기존 보안 기반이 필수입니다. + +--- + +## 24-1. 계획 및 설계 — 거버넌스, 위험관리 + +AI 프로젝트의 첫 단계입니다. 보안 체계를 수립하고 위험요소를 사전에 분석합니다. 이 단계를 생략하면 이후 모든 단계에서 보안 공백이 발생합니다. + +### 24-1-1. 거버넌스 + +AI 보안 거버넌스는 조직, 정책, 인력의 세 축으로 구성됩니다. + +[표 24-1] 거버넌스 점검 항목 + +| 번호 | 점검 항목 | 설명 | 대상 | +|------|-----------|------|------| +| 1.1.1 | AI 보안 조직 구성 | AI 보안 전담 조직 또는 역할을 지정했는가? | 전체 | +| 1.1.2 | 정책/절차/프로세스 수립 | AI 개발·운영에 관한 보안 정책과 절차를 문서화했는가? | 전체 | +| 1.1.3 | 전문 인력 확보 | AI 보안 관련 전문 인력을 배치하거나 교육 계획을 수립했는가? | 전체 | + +**조직 구성(1.1.1)** + +AI 보안 전담 조직을 구성합니다. 소규모 팀이라면 기존 정보보호 담당자에게 AI 보안 역할을 추가합니다. 13장의 정보보호 조직(A-1 ~ A-9) 체계를 기반으로 확장합니다. + +정부과제 개발자는 과제 수행 시 보안 책임자를 명시해야 합니다. 과제 제안서에 AI 보안 거버넌스 항목을 포함하세요. + +**정책/절차/프로세스(1.1.2)** + +다음 정책을 문서화합니다. + +- AI 모델 개발 보안 정책 +- 학습 데이터 수집·관리 정책 +- 모델 배포 및 변경 관리 절차 +- 보안 사고 대응 절차 +- AI 서비스 파기 절차 + +> **TIP** +> 바이브코더도 개인 프로젝트에서 최소한의 보안 정책을 수립하세요. AI 코딩 어시스턴트에게 "이 프로젝트의 보안 정책을 작성해줘"라고 요청하면 좋은 출발점이 됩니다. + +**전문 인력(1.1.3)** + +AI 보안은 기존 IT 보안과 다른 전문성을 요구합니다. 적대적 공격 방어, 프롬프트 주입 방어, 데이터 오염 탐지 등의 역량이 필요합니다. 외부 교육이나 자격 인증을 통해 역량을 확보합니다. + +### 24-1-2. 위험관리 + +AI 시스템 고유의 위험요소를 식별하고 대응 방안을 마련합니다. + +[표 24-2] 위험관리 점검 항목 + +| 번호 | 점검 항목 | 설명 | 대상 | +|------|-----------|------|------| +| 1.2.1 | 위험요소 분석 | AI 시스템의 기술적·운영적·법적 위험요소를 식별했는가? | 전체 | +| 1.2.2 | 위협 모델링 | AI 모델에 대한 위협 시나리오를 수립했는가? | 전체 | +| 1.2.3 | 위험 완화 계획 | 식별된 위험에 대한 완화 방안을 수립했는가? | 전체 | + +**위험요소 분석(1.2.1)** + +AI 시스템에 특화된 위험요소를 분류합니다. + +| 위험 유형 | 예시 | +|-----------|------| +| 기술적 위험 | 적대적 공격, 모델 오염, 데이터 유출 | +| 운영적 위험 | 모델 성능 저하, 서비스 중단, 과적합 | +| 법적 위험 | 개인정보 침해, 저작권 위반, AI 규제 위반 | +| 윤리적 위험 | 편향된 판단, 차별적 결과, 유해 콘텐츠 생성 | + +**위협 모델링(1.2.2)** + +23장에서 다룬 위협 유형(프롬프트 주입, 적대적 공격, 데이터 추출 등)을 기반으로 위협 시나리오를 작성합니다. 23-1절 참조. + +STRIDE(스푸핑, 변조, 부인, 정보 노출, 서비스 거부, 권한 상승) 모델을 AI 시스템에 확장 적용합니다. 각 위협에 대해 발생 가능성과 영향도를 평가합니다. + +**위험 완화 계획(1.2.3)** + +식별된 위험에 대해 수용, 회피, 전가, 완화 중 대응 전략을 결정합니다. 완화 조치의 우선순위를 정하고 담당자를 지정합니다. + +> **WARNING** +> 정부과제에서 AI 보안 위험관리를 생략하면 감사 시 지적 사항이 됩니다. 과제 시작 전에 반드시 위험 분석 보고서를 작성하세요. + +--- + +## 24-2. 데이터 수집 및 준비 — 수집/전처리, 무결성, 라벨링 + +학습 데이터의 품질과 보안이 모델 성능과 안전성을 결정합니다. 데이터가 오염되면 모델도 오염됩니다. + +### 24-2-1. 수집/전처리 보안 + +[표 24-3] 데이터 수집/전처리 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 2.1.1 | 네트워크 프로토콜 보안 | 데이터 수집 시 안전한 통신 프로토콜을 사용하는가? | +| 2.1.2 | 보관/삭제 절차 | 수집 데이터의 보관 기간과 삭제 절차를 정의했는가? | +| 2.1.3 | 암호화 적용 | 수집·저장·전송 시 데이터를 암호화하는가? | + +**네트워크 프로토콜 보안(2.1.1)** + +데이터 수집 경로에 TLS 1.2 이상을 적용합니다. 외부 API에서 데이터를 수집할 때 인증서를 검증합니다. 8장의 네트워크 보안 항목(N-01 이후)을 함께 점검하세요. + +크롤링으로 데이터를 수집할 때는 HTTPS만 사용합니다. HTTP 응답을 그대로 학습 데이터로 사용하면 중간자 공격(Man-in-the-Middle, MitM)에 노출됩니다. + +**보관/삭제 절차(2.1.2)** + +수집 데이터의 보관 기간을 명시합니다. 학습 완료 후 원본 데이터의 보관 필요성을 검토합니다. 개인정보가 포함된 데이터는 관련 법령에 따라 처리합니다. + +**암호화 적용(2.1.3)** + +| 구분 | 적용 방법 | 참고 | +|------|-----------|------| +| 전송 중 | TLS 1.2+ | 8장 참조 | +| 저장 중 | AES-256 | 7장 DB 암호화 참조 | +| 백업 시 | 암호화된 백업 | 14장 참조 | + +> **TIP** +> 바이브코더가 공개 데이터셋을 다운로드할 때도 HTTPS로 받고, 해시값(SHA-256)을 검증하세요. `hashlib`(Python)이나 `sha256sum`(Linux) 명령으로 간단히 확인할 수 있습니다. + +### 24-2-2. 무결성 검증 + +[표 24-4] 데이터 무결성 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 2.2.1 | 무결성 검증 | 학습 데이터의 위변조 여부를 검증하는 절차가 있는가? | +| 2.2.2 | 접근 권한 제한 | 학습 데이터에 대한 접근 권한을 최소 권한 원칙으로 관리하는가? | + +**무결성 검증(2.2.1)** + +학습 데이터에 해시 기반 무결성 검증을 적용합니다. 데이터 파이프라인의 각 단계에서 체크섬을 기록하고 비교합니다. + +``` +수집 → 해시 기록 → 전처리 → 해시 비교 → 학습 투입 +``` + +서버 운용 개발자는 데이터 저장소에 파일 무결성 모니터링(File Integrity Monitoring, FIM) 도구를 적용합니다. 2장의 파일 시스템 보안 항목을 참고하세요. + +**접근 권한 제한(2.2.2)** + +학습 데이터 저장소에 최소 권한 원칙(Principle of Least Privilege)을 적용합니다. 개발자, 데이터 엔지니어, 운영자 각각의 접근 범위를 제한합니다. 1장의 계정 관리(U-01 이후)와 3장의 접근 제어 항목을 참조하세요. + +### 24-2-3. 데이터 공격 방어 + +[표 24-5] 데이터 공격 방어 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 2.3.1 | 데이터 오염 방어 | 학습 데이터에 악의적 데이터가 삽입되는 것을 탐지·차단하는가? | +| 2.3.2 | 회피 공격 방어 | 입력 데이터 조작을 통한 모델 오작동을 방어하는가? | +| 2.3.3 | 유출/변조 방지 | 학습 데이터의 유출이나 변조를 방지하는 조치를 적용하는가? | + +**데이터 오염 방어(2.3.1)** + +23-1-3절에서 다룬 오염 공격(Poisoning Attack)을 방어합니다. 수집 데이터의 출처를 검증하고, 이상치(Outlier) 탐지 알고리즘을 적용합니다. + +구체적인 방어 조치는 다음과 같습니다. + +- 데이터 출처별 신뢰도를 평가합니다. +- 통계적 이상치 탐지를 적용합니다. +- 크라우드소싱 데이터는 교차 검증합니다. +- 데이터 수집 이력을 기록합니다. + +**회피 공격 방어(2.3.2)** + +입력 데이터의 유효성을 검증하는 전처리 파이프라인을 구축합니다. 입력값 범위 검증, 형식 검증, 이상 패턴 탐지를 적용합니다. 5장과 6장의 웹 입력값 검증 항목을 참고하세요. + +**유출/변조 방지(2.3.3)** + +학습 데이터가 외부로 유출되거나 내부에서 변조되는 것을 방지합니다. 데이터 손실 방지(Data Loss Prevention, DLP) 솔루션을 적용하고, 접근 로그를 기록합니다. + +> **WARNING** +> 공개 데이터셋이라도 악의적으로 오염된 사례가 있습니다. Hugging Face, Kaggle 등에서 데이터셋을 받을 때 커뮤니티 리뷰와 데이터 카드를 반드시 확인하세요. + +--- + +## 24-3. 모델 개발 — 학습환경, 알고리즘, 오픈소스, 개발환경 + +모델 개발 단계는 점검 항목이 가장 많습니다. 학습환경, 모델 공격 방어, 오픈소스, LLM 보안까지 4개 영역을 다룹니다. + +### 24-3-1. 학습환경 보안 + +[표 24-6] 학습환경 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 3.1.1 | 학습환경 보안조치 | GPU 서버, 클라우드 학습 환경에 접근 제어를 적용하는가? | +| 3.1.2 | 허위 데이터 삽입 차단 | 학습 과정에서 비인가 데이터가 삽입되는 것을 차단하는가? | +| 3.1.3 | 연합학습 장치 검증 | 연합학습(Federated Learning) 참여 장치의 신뢰성을 검증하는가? | + +**학습환경 보안조치(3.1.1)** + +GPU 서버에 대한 접근을 SSH 키 기반 인증으로 제한합니다. 클라우드 학습 환경(AWS SageMaker, Google Vertex AI 등)에 IAM(Identity and Access Management) 정책을 적용합니다. + +서버 운용 개발자는 학습 서버의 OS 보안을 1장(Unix/Linux)과 2장(Windows) 기준으로 점검합니다. 학습 전용 네트워크 세그먼트를 분리하는 것을 권장합니다. + +**허위 데이터 삽입 차단(3.1.2)** + +학습 파이프라인에 데이터 검증 단계를 추가합니다. 학습 데이터 목록을 화이트리스트로 관리하고, 비인가 데이터 파일이 추가되면 알림을 발생시킵니다. + +**연합학습 장치 검증(3.1.3)** + +연합학습 환경에서는 참여 장치가 보내는 모델 업데이트를 검증합니다. 비잔틴 내결함성(Byzantine Fault Tolerance) 알고리즘을 적용하여 악의적 참여자의 영향을 최소화합니다. + +> **TIP** +> 바이브코더가 Google Colab이나 Kaggle Notebook에서 학습할 때도 런타임 환경의 패키지 목록을 확인하세요. `pip list`로 설치된 패키지를 점검하고, 의심스러운 패키지가 없는지 확인합니다. + +### 24-3-2. 모델 공격 방어 + +AI 모델을 대상으로 한 7가지 주요 공격 유형에 대한 방어 방법입니다. + +[표 24-7] 모델 공격 방어 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 3.2.1 | 프롬프트 주입 방어 | 프롬프트 주입(Prompt Injection) 공격을 탐지·차단하는가? | +| 3.2.2 | 적대적 예제 방어 | 적대적 예제(Adversarial Example)를 탐지하는가? | +| 3.2.3 | 모델 회피 공격 방어 | 회피 공격(Evasion Attack)에 대한 견고성을 확보했는가? | +| 3.2.4 | 모델 오염 방어 | 백도어(Backdoor) 삽입 등 오염 공격을 방어하는가? | +| 3.2.5 | 모델 추출/역설계 방어 | 모델 파라미터 추출이나 역설계를 방지하는가? | +| 3.2.6 | 반복 질의 공격 방어 | 대량 질의를 통한 모델 정보 유출을 방어하는가? | +| 3.2.7 | ML 기반 능동 방어 | 머신러닝 기법으로 공격을 자동 탐지하는가? | + +**프롬프트 주입 방어(3.2.1)** + +23-1-1절에서 다룬 프롬프트 주입 공격에 대한 방어 조치입니다. + +- 시스템 프롬프트와 사용자 입력을 명확히 분리합니다. +- 입력 필터링 규칙을 적용합니다. +- 출력 검증 레이어를 추가합니다. +- 허용된 동작 범위를 사전에 정의합니다. + +``` +[입력] → [필터링] → [시스템 프롬프트 + 사용자 입력] → [모델] → [출력 검증] → [응답] +``` + +> **WARNING** +> 프롬프트 주입은 LLM 기반 서비스의 가장 심각한 위협입니다. 단순 키워드 필터링만으로는 방어가 불충분합니다. 다중 레이어 방어 전략을 적용하세요. + +**적대적 예제 방어(3.2.2)** + +적대적 학습(Adversarial Training)을 통해 모델의 견고성을 높입니다. 학습 과정에서 적대적 예제를 의도적으로 포함시켜 모델이 이를 올바르게 분류하도록 훈련합니다. + +**모델 회피 공격 방어(3.2.3)** + +입력 데이터 전처리 단계에서 노이즈 제거 필터를 적용합니다. 모델 앙상블(Ensemble) 기법으로 단일 모델의 취약점을 보완합니다. + +**모델 오염 방어(3.2.4)** + +학습 데이터와 사전학습 모델(Pretrained Model)의 무결성을 검증합니다. 백도어 탐지 도구(예: Neural Cleanse)를 적용하여 모델에 삽입된 트리거를 탐지합니다. + +**모델 추출/역설계 방어(3.2.5)** + +API 응답에서 신뢰도 점수(Confidence Score)를 제거하거나 라운딩합니다. 응답에 워터마크를 삽입하여 추출 여부를 추적합니다. 모델 파일을 암호화하여 저장합니다. + +**반복 질의 공격 방어(3.2.6)** + +API 호출 횟수를 제한(Rate Limiting)합니다. 비정상적 질의 패턴을 탐지합니다. 4장(W-15 이후)과 5장(WS-06 이후)의 서비스 관리 항목을 참조하세요. + +| 방어 기법 | 설명 | +|-----------|------| +| Rate Limiting | 사용자별, IP별 API 호출 횟수 제한 | +| 질의 패턴 분석 | 유사한 질의 반복 탐지 | +| 응답 지연 | 의심스러운 요청에 응답 지연 적용 | +| 캡차(CAPTCHA) | 자동화된 질의 차단 | + +**ML 기반 능동 방어(3.2.7)** + +보안 이벤트 로그를 기반으로 이상 탐지 모델을 구축합니다. 공격 패턴을 자동으로 학습하고 대응합니다. 9장의 로그 관리 항목과 연계합니다. + +### 24-3-3. 오픈소스 보안 + +AI 개발에서 오픈소스 라이브러리 사용은 필수입니다. PyTorch, TensorFlow, Hugging Face Transformers 등이 대표적입니다. 그러나 오픈소스에도 보안 취약점이 존재합니다. + +[표 24-8] 오픈소스 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 3.3.1 | 업데이트/취약점 관리 | 오픈소스 라이브러리의 버전과 알려진 취약점을 관리하는가? | +| 3.3.2 | 소스코드 검토 | 사용 전 오픈소스의 소스코드를 검토하는가? | +| 3.3.3 | 격리 환경 사용 | 오픈소스 실행 환경을 격리하는가? | + +**업데이트/취약점 관리(3.3.1)** + +소프트웨어 구성 분석(Software Composition Analysis, SCA) 도구를 사용하여 의존성을 관리합니다. CVE(Common Vulnerabilities and Exposures) 데이터베이스를 정기적으로 확인합니다. + +```bash +# Python 프로젝트의 취약점 스캔 예시 +pip install safety +safety check --full-report +``` + +**소스코드 검토(3.3.2)** + +Hugging Face에서 모델을 다운로드할 때 `pickle` 파일의 악성 코드 삽입 여부를 확인합니다. `safetensors` 형식을 우선 사용합니다. `pickle` 형식은 임의 코드 실행이 가능하므로 위험합니다. + +> **WARNING** +> PyPI, npm 등 패키지 저장소에서 타이포스쿼팅(Typosquatting) 공격이 증가하고 있습니다. `pytorch`가 아닌 `pytorh`같은 유사 이름의 악성 패키지에 주의하세요. 패키지 설치 전 이름과 게시자를 반드시 확인합니다. + +**격리 환경 사용(3.3.3)** + +Docker 컨테이너나 가상환경(venv, conda)으로 개발 환경을 격리합니다. 프로젝트별로 독립된 의존성을 관리합니다. + +```bash +# 격리 환경 생성 예시 +python -m venv ai-project-env +source ai-project-env/bin/activate # Linux/Mac +``` + +### 24-3-4. LLM 보안 + +대규모 언어 모델(LLM)을 활용한 개발 시 추가로 점검해야 할 8가지 항목입니다. OWASP Top 10 for LLM Applications(23-2-3절 참조)과 연계됩니다. + +[표 24-9] LLM 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 3.4.1 | 민감 정보 보호 | LLM 입출력에서 민감 정보 노출을 방지하는가? | +| 3.4.2 | 서비스 거부(DoS) 방어 | LLM 서비스에 대한 DoS 공격을 방어하는가? | +| 3.4.3 | API 보안 | LLM API의 인증/인가를 적절히 구현했는가? | +| 3.4.4 | 인터페이스 보안 | LLM 연동 인터페이스의 보안을 확보했는가? | +| 3.4.5 | 시큐어 코딩 | LLM이 생성한 코드의 보안을 검증하는가? | +| 3.4.6 | 출력 모니터링 | LLM 출력에서 유해/부적절한 콘텐츠를 필터링하는가? | +| 3.4.7 | 프롬프트 주입 방어 | 간접 프롬프트 주입을 포함한 방어 조치를 적용하는가? | +| 3.4.8 | 벡터/임베딩 보안 | 벡터 데이터베이스와 임베딩 데이터의 보안을 확보했는가? | + +**민감 정보 보호(3.4.1)** + +LLM에 전달하는 프롬프트에 API 키, 비밀번호, 개인정보를 포함하지 않습니다. 출력 결과에 민감 정보가 포함되는지 자동 검사합니다. + +- 입력 단계: 정규식 기반 민감 정보 탐지 +- 출력 단계: PII(Personally Identifiable Information) 필터링 + +> **TIP** +> 바이브코더가 AI 코딩 어시스턴트에 코드를 붙여넣을 때 `.env` 파일이나 API 키가 포함되지 않도록 주의하세요. `.gitignore`에 등록된 파일은 AI에게도 전달하지 마세요. + +**서비스 거부(DoS) 방어(3.4.2)** + +LLM 서비스에 대한 자원 소진 공격을 방어합니다. 요청당 토큰 수 제한, 동시 요청 수 제한, 타임아웃 설정을 적용합니다. 10장의 서비스 관리 항목을 참조하세요. + +**API 보안(3.4.3)** + +LLM API에 OAuth 2.0 또는 API 키 기반 인증을 적용합니다. 5장과 6장의 웹 서버 보안 항목을 참조하세요. + +**인터페이스 보안(3.4.4)** + +LLM과 연동하는 플러그인, 도구, 외부 서비스의 보안을 검증합니다. MCP(Model Context Protocol) 서버 연동 시 신뢰할 수 있는 소스만 허용합니다. + +**시큐어 코딩(3.4.5)** + +AI가 생성한 코드를 그대로 사용하지 않습니다. 정적 분석(Static Analysis) 도구로 보안 취약점을 검사합니다. SQL 인젝션, XSS, 경로 순회 등 기존 웹 보안 취약점(5장, 6장 참조)을 우선 점검합니다. + +``` +[AI 코드 생성] → [코드 리뷰] → [정적 분석] → [테스트] → [배포] +``` + +> **WARNING** +> AI 코딩 어시스턴트가 생성한 코드에는 보안 취약점이 포함될 수 있습니다. 하드코딩된 비밀번호, 안전하지 않은 역직렬화, 불충분한 입력 검증이 대표적입니다. 생성된 코드는 반드시 보안 검토를 거쳐야 합니다. + +**출력 모니터링(3.4.6)** + +LLM 출력에서 유해 콘텐츠, 편향된 내용, 허위 정보를 필터링합니다. 안전 분류기(Safety Classifier)를 출력 파이프라인에 적용합니다. + +**프롬프트 주입 방어(3.4.7)** + +RAG(Retrieval-Augmented Generation) 시스템에서 외부 문서에 삽입된 악성 프롬프트를 탐지합니다. 검색된 문서의 내용을 별도 컨텍스트로 격리합니다. 3.2.1항과 연계하여 다중 레이어 방어를 적용합니다. + +**벡터/임베딩 보안(3.4.8)** + +벡터 데이터베이스(Pinecone, Weaviate, ChromaDB 등)에 대한 접근 제어를 적용합니다. 임베딩 데이터에서 원본 텍스트를 역추출하는 공격을 방어합니다. 7장의 DB 보안 항목을 참조하세요. + +--- + +## 24-4. 모델 배포 — 배포보안, API보안 + +개발된 모델을 운영 환경에 배포하는 단계입니다. 배포 과정의 보안 공백은 공격자에게 침투 경로를 제공합니다. + +### 24-4-1. 모델파일/배포 환경 보호 + +[표 24-10] 모델 배포 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 4.1.1 | 취약점 스캔 | 배포 환경(컨테이너, 서버)의 취약점을 스캔하는가? | +| 4.1.2 | 암호화 저장/전송 | 모델 파일을 암호화하여 저장하고 전송하는가? | +| 4.1.3 | 인프라 보안 | 배포 인프라(서버, 컨테이너, 클라우드)의 보안을 확보했는가? | + +**취약점 스캔(4.1.1)** + +배포 전 컨테이너 이미지를 스캔합니다. Trivy, Grype 등의 도구로 알려진 취약점을 탐지합니다. CI/CD 파이프라인에 자동 스캔을 통합합니다. + +```bash +# Docker 이미지 취약점 스캔 예시 +trivy image my-ai-model:latest +``` + +**암호화 저장/전송(4.1.2)** + +모델 파일(`.pt`, `.onnx`, `.safetensors` 등)을 암호화하여 저장합니다. 모델 전송 시 TLS를 적용합니다. 모델 파일의 해시값을 기록하여 무결성을 검증합니다. + +**인프라 보안(4.1.3)** + +| 배포 환경 | 점검 사항 | 참고 | +|-----------|-----------|------| +| 온프레미스 서버 | OS 보안, 네트워크 분리 | 1~3장 참조 | +| Docker/Kubernetes | 컨테이너 보안, 네트워크 정책 | 8장 참조 | +| 클라우드(AWS/GCP/Azure) | IAM, 보안 그룹, VPC | 11장 참조 | +| 엣지 디바이스 | 펌웨어 보안, 물리적 보안 | 12장 참조 | + +### 24-4-2. API/인터페이스 보안 + +[표 24-11] API 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 4.2.1 | 인증/인가 | API에 적절한 인증/인가 메커니즘을 적용했는가? | +| 4.2.2 | 입력 검증 | API 입력값에 대한 유효성 검증을 수행하는가? | +| 4.2.3 | 출력 필터링 | API 응답에서 민감 정보를 필터링하는가? | +| 4.2.4 | 접근 제어 | API 접근을 IP, 사용자, 역할 기반으로 제어하는가? | +| 4.2.5 | 로깅/감사 | API 호출 기록을 저장하고 감사하는가? | + +**인증/인가(4.2.1)** + +모든 API 엔드포인트에 인증을 적용합니다. API 키는 환경변수로 관리하고, 코드에 하드코딩하지 않습니다. OAuth 2.0이나 JWT(JSON Web Token)를 권장합니다. + +**입력 검증(4.2.2)** + +API 입력값의 크기, 형식, 범위를 검증합니다. 악의적 프롬프트를 필터링합니다. 5장의 웹 서버 입력값 검증 항목(W-01 이후)을 참조하세요. + +**출력 필터링(4.2.3)** + +API 응답에 모델 내부 정보(가중치, 구조, 학습 데이터)가 노출되지 않도록 합니다. 에러 메시지에서 시스템 정보를 제거합니다. + +**접근 제어(4.2.4)** + +IP 화이트리스트, API 키별 권한 차등, 역할 기반 접근 제어(Role-Based Access Control, RBAC)를 적용합니다. + +**로깅/감사(4.2.5)** + +모든 API 호출의 시간, 요청자, 요청 내용, 응답 코드를 기록합니다. 비정상적 호출 패턴을 탐지합니다. 9장의 로그 관리 항목을 참조하세요. + +> **TIP** +> 서버 운용 개발자는 API 게이트웨이(Kong, AWS API Gateway 등)를 도입하여 인증, Rate Limiting, 로깅을 중앙에서 관리하세요. 개별 마이크로서비스에서 보안 로직을 반복 구현하는 것보다 효율적입니다. + +--- + +## 24-5. 모니터링 및 유지보수 — 운영보안, 사후관리 + +배포 이후가 보안의 시작입니다. 실시간 모니터링과 정기적인 업데이트가 필수입니다. + +### 24-5-1. 실시간 모니터링 + +[표 24-12] 모니터링 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 5.1.1 | 모델 성능 모니터링 | 모델의 정확도, 지연시간 등 성능 지표를 실시간 추적하는가? | +| 5.1.2 | 이상 탐지 | 모델 입출력의 이상 패턴을 탐지하는가? | +| 5.1.3 | 드리프트 감지 | 데이터 드리프트(Data Drift)와 모델 드리프트를 감지하는가? | +| 5.1.4 | 보안 이벤트 모니터링 | 공격 시도, 비인가 접근 등 보안 이벤트를 모니터링하는가? | +| 5.1.5 | 감사 로그 관리 | AI 시스템의 모든 활동에 대한 감사 로그를 관리하는가? | + +**모델 성능 모니터링(5.1.1)** + +모델의 정확도가 임계치 이하로 떨어지면 알림을 발생시킵니다. 성능 저하는 데이터 오염이나 공격의 징후일 수 있습니다. + +**이상 탐지(5.1.2)** + +입력 데이터의 분포가 학습 데이터와 크게 다른 경우를 탐지합니다. 비정상적으로 긴 입력, 반복적 패턴, 알려진 공격 시그니처를 모니터링합니다. + +**드리프트 감지(5.1.3)** + +시간이 지남에 따라 입력 데이터의 분포가 변화(Data Drift)하면 모델 재학습이 필요합니다. 드리프트를 방치하면 모델 성능이 저하되고 보안 취약점이 발생할 수 있습니다. + +**보안 이벤트 모니터링(5.1.4)** + +SIEM(Security Information and Event Management) 시스템과 연동하여 보안 이벤트를 중앙에서 관리합니다. 9장의 로그 관리 항목을 참조하세요. + +**감사 로그 관리(5.1.5)** + +AI 모델의 판단 과정, 입출력 데이터, 설정 변경 이력을 기록합니다. 규제 준수와 사고 조사를 위해 최소 1년 이상 보관합니다. + +> **TIP** +> 정부과제 개발자는 감사 로그 보관 기간을 과제 계약 조건과 관련 법령에 맞추어 설정하세요. 공공기관의 경우 3~5년 보관이 일반적입니다. + +### 24-5-2. 보안 패치/업데이트 관리 + +[표 24-13] 보안 패치 관리 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 5.2.1 | 정기 업데이트 | AI 프레임워크와 의존성 라이브러리를 정기적으로 업데이트하는가? | +| 5.2.2 | 취약점 대응 | 알려진 취약점(CVE)에 대해 신속하게 패치를 적용하는가? | +| 5.2.3 | 변경 관리 | 모델 업데이트 시 변경 영향을 평가하고 롤백 계획을 수립하는가? | + +**정기 업데이트(5.2.1)** + +PyTorch, TensorFlow, CUDA 등 주요 프레임워크의 보안 업데이트를 월 1회 이상 확인합니다. `dependabot`이나 `renovate`를 사용하여 자동화합니다. + +**취약점 대응(5.2.2)** + +CVSS(Common Vulnerability Scoring System) 7.0 이상의 취약점은 72시간 이내에 패치를 적용합니다. 즉시 패치가 불가능하면 임시 완화 조치(Workaround)를 적용합니다. + +**변경 관리(5.2.3)** + +모델 업데이트 시 스테이징 환경에서 충분히 테스트합니다. A/B 테스트나 카나리 배포(Canary Deployment)로 안전하게 전환합니다. 문제 발생 시 즉시 이전 버전으로 롤백할 수 있도록 합니다. + +> **WARNING** +> AI 프레임워크 업데이트 시 모델 호환성이 깨질 수 있습니다. 업데이트 전에 반드시 스테이징 환경에서 모델 동작을 검증하세요. 특히 PyTorch 메이저 버전 업데이트 시 주의가 필요합니다. + +--- + +## 24-6. 파기 — 파기 시 보안 + +AI 서비스를 종료하거나 모델을 폐기할 때의 보안 절차입니다. 파기 단계를 소홀히 하면 폐기된 모델에서 학습 데이터가 복원될 수 있습니다. 23-1-3절의 데이터 추출 공격 사례를 참고하세요. + +### 24-6-1. 파기 시 보안 + +[표 24-14] 파기 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 6.1.1 | 모델 파일 삭제 | 모델 파일을 복구 불가능한 방식으로 완전 삭제하는가? | +| 6.1.2 | 데이터 삭제 | 학습 데이터, 중간 산출물, 로그를 완전 삭제하는가? | +| 6.1.3 | API 비활성화 | 폐기된 모델의 API 엔드포인트를 완전히 비활성화했는가? | + +**모델 파일 삭제(6.1.1)** + +모델 파일(가중치, 설정, 체크포인트)을 안전하게 삭제합니다. 단순 `rm` 명령이 아닌, 디스크 덮어쓰기 방식을 사용합니다. + +| 환경 | 삭제 방법 | +|------|-----------| +| 로컬 서버 | `shred -vfz -n 5 model.pt` (Linux) | +| 클라우드 스토리지 | 객체 삭제 후 버전 관리 비활성화 | +| GPU 메모리 | 프로세스 종료 후 메모리 초기화 | + +클라우드 환경에서는 스냅샷, 백업, CDN 캐시에 모델 파일이 남아있을 수 있습니다. 모든 복사본을 추적하여 삭제합니다. + +**데이터 삭제(6.1.2)** + +학습 데이터뿐 아니라 다음 항목도 삭제 대상입니다. + +- 전처리된 데이터셋 +- 학습 중간 체크포인트 +- 텐서보드 로그 +- 실험 기록(MLflow, W&B 등) +- 벡터 데이터베이스의 임베딩 데이터 + +개인정보가 포함된 데이터는 개인정보 보호법에 따라 파기 기록을 남깁니다. + +**API 비활성화(6.1.3)** + +폐기된 모델의 API 엔드포인트를 즉시 비활성화합니다. DNS 레코드를 삭제하고, 로드밸런서에서 라우팅을 제거합니다. API 키를 폐기(Revoke)합니다. + +비활성화 후 일정 기간 동안 해당 엔드포인트로의 접근 시도를 모니터링합니다. 비인가 접근 시도가 있으면 보안팀에 알립니다. + +> **WARNING** +> 클라우드 환경에서 모델 파일 삭제 시 S3 버전 관리, EBS 스냅샷 등에 이전 버전이 남아있을 수 있습니다. 모든 스토리지의 수명주기 정책(Lifecycle Policy)을 확인하세요. + +--- + +## 24장 요약 체크리스트 + +다음 체크리스트로 AI 개발 보안을 종합 점검합니다. + +[표 24-15] AI 개발자 보안 종합 체크리스트 + +| 생명주기 | 점검 항목 | 확인 | +|----------|-----------|:----:| +| **1. 계획 및 설계** | AI 보안 전담 조직 또는 담당자를 지정했는가? | □ | +| | 보안 정책과 절차를 문서화했는가? | □ | +| | AI 시스템의 위험요소를 분석하고 위협 모델링을 수행했는가? | □ | +| | 위험 완화 계획을 수립하고 담당자를 지정했는가? | □ | +| **2. 데이터** | 데이터 수집 시 안전한 프로토콜(TLS 1.2+)을 사용하는가? | □ | +| | 학습 데이터를 암호화하여 저장하는가? | □ | +| | 데이터 무결성 검증 절차를 적용하는가? | □ | +| | 데이터 오염/유출 방어 조치를 적용하는가? | □ | +| **3. 모델 개발** | 학습 환경에 접근 제어를 적용하는가? | □ | +| | 프롬프트 주입 방어를 구현했는가? | □ | +| | 적대적 예제/오염/추출 공격 방어를 적용하는가? | □ | +| | 오픈소스 라이브러리의 취약점을 관리하는가? | □ | +| | LLM 입출력에서 민감 정보 노출을 방지하는가? | □ | +| | AI 생성 코드에 대한 보안 검토를 수행하는가? | □ | +| **4. 모델 배포** | 배포 환경의 취약점을 스캔했는가? | □ | +| | 모델 파일을 암호화하여 전송/저장하는가? | □ | +| | API에 인증/인가/접근 제어를 적용했는가? | □ | +| | API 호출 로그를 기록하고 감사하는가? | □ | +| **5. 모니터링** | 모델 성능과 이상 패턴을 실시간 모니터링하는가? | □ | +| | 데이터 드리프트를 감지하는가? | □ | +| | AI 프레임워크와 의존성을 정기적으로 업데이트하는가? | □ | +| | 모델 업데이트 시 롤백 계획을 수립하는가? | □ | +| **6. 파기** | 모델 파일을 복구 불가능한 방식으로 삭제하는가? | □ | +| | 학습 데이터와 중간 산출물을 완전 삭제하는가? | □ | +| | 폐기된 모델의 API를 비활성화했는가? | □ | + +> **TIP** +> 이 체크리스트를 프로젝트 시작 시, 배포 전, 서비스 종료 시 각각 활용하세요. 정부과제 개발자는 과제 최종 보고서에 이 체크리스트의 점검 결과를 포함하면 보안 요구사항 충족을 증빙할 수 있습니다. + +--- + +*다음 장(25장)에서는 AI 서비스 제공자를 위한 보안 요구사항을 다룹니다.* + + +--- + +# 25장. AI 서비스 제공자를 위한 보안 점검 + +AI 서비스 제공자(Service Provider)는 AI 모델을 직접 개발하거나 외부에서 도입하여 최종 사용자에게 서비스를 제공합니다. 24장에서 다룬 AI 개발자 보안과 달리, 서비스 제공자는 **서비스 수준 협약(Service Level Agreement, SLA)** 관리와 **생성형 AI(Generative AI, GenAI)/예측형 AI(Predictive AI, PredAI) 구분**이 핵심입니다. + +이 장에서는 KISA의 「인공지능(AI) 보안 안내서」가 제시하는 서비스 제공자 보안 프레임워크를 정리합니다. 서비스 기획부터 파기까지 6단계 생명주기를 기준으로, GenAI와 PredAI 각각의 보안 요구사항을 비교합니다. + +> **TIP** +> 서비스 제공자와 개발자의 보안 프레임워크는 구조가 유사합니다. 공통 항목은 24장 참조를 안내하고, 이 장에서는 서비스 제공자 고유 항목에 집중합니다. + +--- + +## 25-1. 서비스 제공자 보안 프레임워크 + +서비스 제공자의 AI 보안 생명주기는 6단계로 구성됩니다. 24장의 개발자 생명주기와 단계 이름은 같지만, 세부 점검 항목이 다릅니다. + +### 25-1-1. 6단계 생명주기 + +| 단계 | 핵심 활동 | 서비스 제공자 특화 요소 | +|------|-----------|------------------------| +| 1. 서비스 기획 및 설계 | 거버넌스, 위험관리, SLA | SLA 관리 | +| 2. 서비스 개발 및 구축 | 코드 점검, 모델/데이터/API 보안 | API Rate Limiting | +| 3. 서비스 제공 및 운영 | 로그 관리, 운영 데이터 보안 | 접속 로그 암호화 | +| 4. 서비스 유지보수 | 모니터링, 성능/장애 관리 | DDoS 방어, HA | +| 5. 환류(Feedback) 및 개선 | 사용자 피드백 관리 | 입력 검증, 감사 로그 | +| 6. 파기 | 데이터/모델 안전 폐기 | 24장과 공통 | + +> **WARNING** +> 서비스 제공자는 개발자와 달리 최종 사용자와 직접 접점을 갖습니다. 보안 사고 발생 시 법적 책임 소재가 서비스 제공자에게 있으므로, SLA에 보안 요구사항을 반드시 포함해야 합니다. + +### 25-1-2. GenAI와 PredAI의 구분 + +서비스 제공자 보안에서 가장 중요한 축은 GenAI와 PredAI의 구분입니다. 두 유형은 위협 벡터와 보안 요구사항이 다릅니다. + +| 구분 | GenAI (생성형 AI) | PredAI (예측형 AI) | +|------|-------------------|-------------------| +| 대표 서비스 | 챗봇, 이미지 생성, 코드 생성 | 이상 탐지, 수요 예측, 추천 | +| 주요 위협 | 프롬프트 주입, 환각(Hallucination) | 적대적 입력, 모델 드리프트 | +| 입력 형태 | 자유 형식 텍스트/이미지 | 정형 데이터, 센서 데이터 | +| 출력 형태 | 텍스트, 이미지, 코드 등 | 분류값, 확률, 수치 | +| 보안 초점 | 출력 필터링, 콘텐츠 안전성 | 입력 검증, 모델 무결성 | + +> **TIP** +> 하나의 서비스가 GenAI와 PredAI를 동시에 포함할 수 있습니다. 예를 들어, 고객 이탈 예측(PredAI) 결과를 바탕으로 맞춤 메시지를 생성(GenAI)하는 마케팅 서비스가 있습니다. 이 경우 두 유형의 보안 요구사항을 모두 적용합니다. + +### 25-1-3. 서비스 기획 및 설계 단계 + +이 단계에서는 거버넌스, 위험관리, SLA 관리를 수행합니다. + +**거버넌스(공통사항)** + +AI 보안 정책을 수립하고 조직 내 역할과 책임을 정의합니다. 보안 책임자를 지정하고, 정기 감사 체계를 구축합니다. 상세 내용은 24-1절 참조합니다. + +**위험관리(공통사항)** + +AI 시스템 고유의 위험을 식별하고 평가합니다. 23-1절에서 다룬 위협 유형별로 위험도를 산정합니다. 상세 내용은 24-1절 참조합니다. + +**SLA 관리(서비스 제공자 특화)** + +SLA 관리는 서비스 제공자만의 고유 점검 항목입니다. 다음 세 가지를 반드시 포함합니다. + +1. **SLA에 보안 요구사항 포함**: 서비스 가용성, 데이터 보호 수준, 침해 통보 시한을 SLA에 명시합니다. +2. **보안 침해 대응 계획**: 침해 발생 시 대응 절차, 통보 체계, 복구 목표 시간(Recovery Time Objective, RTO)을 정의합니다. +3. **책임 소재 명확화**: 서비스 제공자와 이용자 간 보안 책임 범위를 계약에 명시합니다. + +| SLA 보안 항목 | GenAI 적용 예시 | PredAI 적용 예시 | +|---------------|-----------------|-----------------| +| 가용성 목표 | 챗봇 서비스 99.9% 가동률 | 실시간 예측 API 99.95% 가동률 | +| 데이터 보호 | 대화 내용 30일 후 자동 삭제 | 입력 데이터 암호화 저장 | +| 침해 통보 | 프롬프트 주입 탐지 시 24시간 내 통보 | 모델 오염 감지 시 12시간 내 통보 | +| 책임 범위 | 생성 콘텐츠 정확성 면책 조항 | 예측 결과 오류에 대한 책임 한도 | + +> **WARNING** +> SLA에 보안 조항이 없으면 침해 발생 시 책임 분쟁이 발생합니다. 특히 GenAI 서비스에서 생성된 콘텐츠의 정확성과 안전성에 대한 면책 조항은 반드시 포함해야 합니다. + +--- + +## 25-2. Generative AI 서비스 보안 요구사항 + +GenAI 서비스는 사용자의 자유 형식 입력을 받아 콘텐츠를 생성합니다. 챗봇 서비스, 이미지 생성 API, AI 코딩 어시스턴트가 대표적입니다. 입력과 출력 모두에 보안 위험이 존재합니다. + +### 25-2-1. 서비스 개발 및 구축 + +#### 코드 취약점 점검 + +정적 분석(Static Application Security Testing, SAST)과 동적 분석(Dynamic Application Security Testing, DAST)을 수행합니다. GenAI 서비스에서는 다음 항목을 추가로 점검합니다. + +- **프롬프트 처리 코드**: 시스템 프롬프트 노출 방지 로직 검증 +- **출력 필터링 코드**: 유해 콘텐츠 필터의 우회 가능성 점검 +- **스트리밍 응답 처리**: 토큰 단위 출력 시 필터 적용 여부 확인 + +> **TIP** +> 코드 리뷰 시 프롬프트 템플릿 파일도 점검 대상에 포함합니다. 하드코딩된 시스템 프롬프트가 소스 코드에 노출되지 않도록 환경 변수나 비밀 관리 서비스를 사용합니다. + +#### 모델 환경 보안 + +| 점검 항목 | GenAI 세부 요구사항 | +|-----------|-------------------| +| 접근 제어 | 모델 가중치 파일에 대한 역할 기반 접근 제어(RBAC) | +| 무결성 검증 | 모델 체크섬 검증, 서명된 모델만 배포 허용 | +| 모니터링 | 모델 호출 빈도, 응답 시간, 오류율 실시간 모니터링 | +| GPU 자원 관리 | 단일 사용자의 과도한 자원 점유 방지 | + +#### 데이터 보안 + +GenAI 서비스의 데이터 보안은 학습 데이터와 실시간 입출력 데이터를 모두 포함합니다. + +- **적대적 공격 방어**: 프롬프트 주입 탐지 및 차단 규칙 적용 +- **데이터 무결성**: RAG 파이프라인의 외부 데이터 소스 검증 +- **기밀성 보호**: 사용자 대화 기록 암호화 저장 +- **전송 보안**: TLS 1.3 이상 적용 +- **책임 추적성**: 모든 입출력에 대한 감사 로그 기록 + +> **WARNING** +> RAG 기반 GenAI 서비스에서는 외부 문서에 삽입된 간접 프롬프트 주입(23-1-1절 참조)에 특히 주의합니다. 외부 데이터 소스의 무결성을 검증하는 파이프라인을 구축해야 합니다. + +#### API/인터페이스 보안 + +GenAI 서비스 API에 대한 보안 요구사항입니다. + +| 점검 항목 | 요구사항 | 구현 예시 | +|-----------|---------|-----------| +| 암호화 | 전송 구간 암호화 | TLS 1.3, mTLS | +| 인증 | API 키 또는 OAuth 2.0 | Bearer 토큰, JWT | +| Rate Limiting | 요청 빈도 제한 | 분당 60회, 일 10,000회 | +| 입력 검증 | 최대 입력 길이 제한 | 프롬프트 4,096 토큰 제한 | +| 출력 필터링 | 유해 콘텐츠 차단 | 안전성 분류기 적용 | + +``` +[GenAI API 보안 아키텍처] + +사용자 요청 GenAI 서비스 + | | + v v ++----------+ TLS 1.3 +-------------+ +| 클라이언트 | -----------> | API Gateway | ++----------+ +-------------+ + | + +-------------+-------------+ + | | | + v v v + +---------+ +---------+ +----------+ + | 인증/인가 | | Rate | | 입력 | + | 모듈 | | Limiter | | 검증기 | + +---------+ +---------+ +----------+ + | + v + +------------+ + | AI 모델 | + | 추론 엔진 | + +------------+ + | + v + +------------+ + | 출력 | + | 필터링 | + +------------+ + | + v + 응답 반환 +``` + +### 25-2-2. 서비스 제공 및 운영 + +GenAI 서비스 운영 단계에서는 로그와 운영 데이터 보안이 핵심입니다. + +**접속 로그 관리** + +- 사용자 요청과 모델 응답을 포함한 접속 로그를 기록합니다. +- 로그에 민감 정보(개인정보, 비밀번호 등)가 포함되지 않도록 마스킹 처리합니다. +- 로그 저장소에 대한 접근 제어를 적용합니다. + +**로그 암호화** + +- 저장 시 AES-256 이상 암호화를 적용합니다. +- 로그 전송 시 TLS 1.3 이상을 사용합니다. +- 암호화 키를 별도의 키 관리 서비스(Key Management Service, KMS)에서 관리합니다. + +**GenAI 특화 로그 항목** + +| 로그 항목 | 목적 | 보존 기간 예시 | +|-----------|------|---------------| +| 프롬프트 주입 탐지 로그 | 공격 시도 분석 | 1년 | +| 유해 콘텐츠 필터링 로그 | 필터 성능 평가 | 6개월 | +| 토큰 사용량 로그 | 비용 관리, 이상 탐지 | 3개월 | +| 모델 버전 변경 로그 | 장애 원인 추적 | 영구 | + +### 25-2-3. 서비스 유지보수 + +#### 모니터링 및 업데이트 + +- **사용자 행동 로그 분석**: 비정상 사용 패턴을 탐지합니다. 대량 프롬프트 전송, 시스템 프롬프트 탈취 시도 등을 식별합니다. +- **오류 탐지**: 모델 응답 오류율을 모니터링합니다. 환각(Hallucination) 빈도가 임계치를 초과하면 알림을 발생합니다. +- **보안 패치 적용**: 프레임워크(PyTorch, TensorFlow 등)와 의존성 라이브러리의 보안 패치를 적시에 적용합니다. + +#### 성능 및 장애 관리 + +GenAI 서비스는 추론에 대량의 GPU 자원을 사용합니다. 장애 관리 항목은 다음과 같습니다. + +| 점검 항목 | 요구사항 | +|-----------|---------| +| 자동 복구 | 모델 서빙 인스턴스 자동 재시작 | +| 모델 드리프트 감지 | 응답 품질 저하 시 자동 알림 | +| 고가용성(High Availability, HA) | 다중 GPU 인스턴스 로드 밸런싱 | +| 백업 | 모델 가중치 및 설정 파일 정기 백업 | +| DDoS 방어 | 대량 요청 차단, CDN 활용 | + +> **TIP** +> GenAI 서비스에서 DDoS 공격은 단순 트래픽 폭주 외에 **고비용 추론 유발 공격**도 포함합니다. 매우 긴 프롬프트나 복잡한 생성 요청을 대량 전송하여 GPU 자원을 고갈시키는 공격입니다. 입력 토큰 수 제한과 요청별 타임아웃 설정이 필수입니다. + +--- + +## 25-3. Predictive AI 서비스 보안 요구사항 + +PredAI 서비스는 정형 데이터를 입력받아 분류, 회귀, 이상 탐지 등의 예측 결과를 제공합니다. 금융 사기 탐지, 설비 고장 예측, 상품 추천 시스템이 대표적입니다. + +### 25-3-1. 서비스 개발 및 구축 + +#### 코드 취약점 점검 + +PredAI 서비스의 코드 점검은 데이터 파이프라인에 초점을 맞춥니다. + +- **데이터 전처리 코드**: 입력 값 범위 검증, 타입 검사 로직 확인 +- **특성 엔지니어링(Feature Engineering) 코드**: 특성 추출 과정에서 민감 정보 노출 여부 점검 +- **모델 서빙 코드**: 입력/출력 직렬화 과정의 취약점 점검 + +#### 모델 환경 보안 + +| 점검 항목 | PredAI 세부 요구사항 | +|-----------|---------------------| +| 접근 제어 | 모델 파일 및 학습 데이터셋에 대한 RBAC | +| 무결성 검증 | 모델 버전 관리, 학습 데이터 해시 검증 | +| 모니터링 | 예측 정확도, 입력 분포 변화 모니터링 | +| 자원 관리 | 배치 추론과 실시간 추론의 자원 분리 | + +#### 데이터 보안 + +PredAI 서비스의 데이터 보안은 학습 데이터의 무결성이 핵심입니다. + +- **적대적 공격 방어**: 입력 데이터의 이상치 탐지, 적대적 입력 필터링 +- **데이터 무결성**: 학습 데이터 변조 탐지, 데이터 출처 검증 +- **기밀성 보호**: 금융 데이터, 의료 데이터 등 민감 입력 데이터 암호화 +- **전송 보안**: API 호출 시 TLS 1.3 이상 적용 +- **책임 추적성**: 예측 결과와 입력 데이터의 연결 추적 가능 + +> **WARNING** +> PredAI 서비스에서 학습 데이터 오염(23-1-3절 참조)은 탐지가 어렵습니다. 오염된 모델이 장기간 운영될 수 있으며, 피해 규모가 클 수 있습니다. 학습 데이터 무결성 검증을 자동화해야 합니다. + +#### API/인터페이스 보안 + +PredAI 서비스 API는 GenAI와 비교하여 다음과 같은 차이가 있습니다. + +| 점검 항목 | GenAI 서비스 | PredAI 서비스 | +|-----------|-------------|---------------| +| 입력 검증 | 프롬프트 길이 제한 | 데이터 스키마 검증 | +| 출력 필터링 | 유해 콘텐츠 차단 | 예측값 범위 검증 | +| Rate Limiting | 토큰 기반 과금 연동 | 요청 건수 기반 제한 | +| 배치 처리 | 해당 없음 | 대량 예측 요청 큐 관리 | +| 모델 버전 관리 | 프롬프트 버전 관리 | A/B 테스트 지원 | + +``` +[PredAI API 보안 아키텍처] + +클라이언트 요청 PredAI 서비스 + | | + v v ++----------+ TLS 1.3 +-------------+ +| 클라이언트 | -----------> | API Gateway | ++----------+ +-------------+ + | + +-------------+-------------+ + | | | + v v v + +---------+ +---------+ +----------+ + | 인증/인가 | | Rate | | 스키마 | + | 모듈 | | Limiter | | 검증기 | + +---------+ +---------+ +----------+ + | + +-------------+-------------+ + | | + v v + +------------+ +-------------+ + | 실시간 추론 | | 배치 추론 | + | 엔진 | | 큐 | + +------------+ +-------------+ + | | + +-------------+-------------+ + | + v + +------------+ + | 결과 검증 | + | 범위 확인 | + +------------+ + | + v + 응답 반환 +``` + +### 25-3-2. 서비스 제공 및 운영 + +PredAI 서비스 운영 단계의 로그 관리는 예측 정확도 추적에 초점을 맞춥니다. + +**접속 로그 관리** + +- 예측 요청과 결과를 포함한 접속 로그를 기록합니다. +- 입력 데이터에 포함된 개인 식별 정보(Personally Identifiable Information, PII)를 마스킹합니다. +- 예측 결과의 정확도를 사후 검증하기 위한 참값(Ground Truth) 로그를 별도 관리합니다. + +**PredAI 특화 로그 항목** + +| 로그 항목 | 목적 | 보존 기간 예시 | +|-----------|------|---------------| +| 입력 분포 변화 로그 | 데이터 드리프트 탐지 | 1년 | +| 예측 정확도 로그 | 모델 성능 추적 | 1년 | +| 이상 입력 탐지 로그 | 적대적 공격 분석 | 6개월 | +| 모델 재학습 이력 | 모델 이력 추적 | 영구 | + +### 25-3-3. 서비스 유지보수 + +#### 모니터링 및 업데이트 + +- **데이터 드리프트(Data Drift) 탐지**: 입력 데이터 분포가 학습 시점과 달라지면 알림을 발생합니다. +- **모델 드리프트(Model Drift) 탐지**: 예측 정확도가 지속적으로 하락하면 재학습을 트리거합니다. +- **보안 패치 적용**: 24장과 동일하게 프레임워크 및 의존성 보안 패치를 적시에 적용합니다. + +#### 성능 및 장애 관리 + +PredAI 서비스는 실시간 예측과 배치 예측이 공존하는 경우가 많습니다. + +| 점검 항목 | 요구사항 | +|-----------|---------| +| 자동 복구 | 실시간 추론 서버 자동 재시작, 배치 작업 자동 재실행 | +| 모델 드리프트 대응 | 성능 저하 시 이전 모델로 자동 롤백(Rollback) | +| 재학습 파이프라인 | 주기적 또는 이벤트 기반 자동 재학습 | +| 고가용성(HA) | 다중 인스턴스 배포, 로드 밸런싱 | +| 백업 | 모델 파일, 학습 데이터, 설정 파일 정기 백업 | +| DDoS 방어 | 대량 예측 요청 차단, 큐 기반 부하 분산 | + +> **TIP** +> PredAI 서비스에서 모델 롤백은 단순히 이전 모델 파일로 교체하는 것이 아닙니다. 입력 데이터 전처리 파이프라인, 특성 스키마, API 응답 형식까지 함께 롤백해야 합니다. 모델 버전과 파이프라인 버전을 함께 관리하는 ML 버전 관리 도구를 도입합니다. + +### 25-3-4. GenAI vs PredAI 보안 요구사항 종합 비교 + +| 생명주기 단계 | 점검 항목 | GenAI | PredAI | +|--------------|-----------|-------|--------| +| 개발/구축 | 코드 점검 | 프롬프트 처리, 출력 필터링 | 데이터 파이프라인, 직렬화 | +| 개발/구축 | 모델 보안 | GPU 자원 관리 | 배치/실시간 자원 분리 | +| 개발/구축 | 데이터 보안 | RAG 데이터 검증 | 학습 데이터 무결성 | +| 개발/구축 | API 보안 | 토큰 기반 제한 | 스키마 검증, 큐 관리 | +| 운영 | 로그 관리 | 프롬프트/응답 로그 | 예측 정확도 로그 | +| 유지보수 | 모니터링 | 환각 빈도 모니터링 | 데이터/모델 드리프트 | +| 유지보수 | 장애 관리 | GPU 고갈 방어 | 모델 롤백, 재학습 | + +--- + +## 25-4. 사용자 피드백 및 개선 과정 보안 + +5단계 환류(Feedback) 및 개선은 서비스 품질 향상의 핵심 과정입니다. 동시에 새로운 보안 위협이 발생하는 지점이기도 합니다. + +### 25-4-1. 사용자 피드백 관리 + +사용자 피드백은 서비스 개선의 원료입니다. 그러나 피드백 채널 자체가 공격 벡터가 될 수 있습니다. + +**입력 검증** + +- 피드백 데이터에 대한 입력 검증을 수행합니다. +- GenAI 서비스: 피드백 텍스트에 포함된 프롬프트 주입 시도를 탐지합니다. +- PredAI 서비스: 피드백으로 제출된 참값(Ground Truth)의 정합성을 검증합니다. + +**데이터 무결성** + +- 피드백 데이터의 변조를 방지합니다. +- 피드백 수집 시점의 타임스탬프를 기록합니다. +- 피드백 데이터를 모델 재학습에 사용하기 전에 무결성을 검증합니다. + +> **WARNING** +> 피드백 데이터를 검증 없이 재학습에 사용하면 오염 공격(23-1-3절 참조)에 노출됩니다. 악의적인 사용자가 의도적으로 잘못된 피드백을 대량 제출하여 모델 성능을 저하시킬 수 있습니다. + +**최소 권한 원칙** + +- 피드백 수집 시스템은 최소한의 데이터만 수집합니다. +- 피드백 처리 시스템은 모델 재학습 파이프라인에 직접 접근하지 못하도록 격리합니다. +- 피드백 데이터에 대한 접근 권한을 역할별로 분리합니다. + +**감사 로그** + +- 피드백 수집, 처리, 활용의 전 과정을 감사 로그에 기록합니다. +- 누가 어떤 피드백을 모델 재학습에 반영했는지 추적할 수 있어야 합니다. + +### 25-4-2. GenAI 서비스 피드백 보안 + +GenAI 서비스에서는 다음과 같은 피드백 유형을 관리합니다. + +| 피드백 유형 | 보안 위험 | 대응 방안 | +|------------|-----------|-----------| +| 좋아요/싫어요 | 조작 가능성 낮음 | 비율 이상 탐지 | +| 텍스트 피드백 | 프롬프트 주입 가능 | 입력 검증, 필터링 | +| 응답 수정 제안 | 오염 데이터 주입 가능 | 전문가 검토 후 반영 | +| 신고(Report) | 허위 신고 가능 | 신고 패턴 분석 | + +> **TIP** +> 인간 피드백 기반 강화학습(Reinforcement Learning from Human Feedback, RLHF)에 사용자 피드백을 활용하는 경우, 피드백 품질 관리가 특히 중요합니다. 악의적 피드백이 RLHF 데이터에 포함되면 모델의 안전성이 저하될 수 있습니다. + +### 25-4-3. PredAI 서비스 피드백 보안 + +PredAI 서비스에서는 예측 결과에 대한 피드백이 모델 성능에 직접 영향을 미칩니다. + +| 피드백 유형 | 보안 위험 | 대응 방안 | +|------------|-----------|-----------| +| 예측 정확도 보고 | 허위 보고로 모델 왜곡 | 통계적 이상 탐지 | +| 참값 제출 | 오염 데이터 주입 | 다중 소스 교차 검증 | +| 오분류 신고 | 허위 신고 가능 | 신고 건수 임계치 적용 | +| 특성 중요도 피드백 | 모델 구조 유추 가능 | 피드백 범위 제한 | + +> **WARNING** +> PredAI 서비스에서 사용자가 제출한 참값(Ground Truth)을 검증 없이 재학습에 사용하면, 공격자가 모델을 특정 방향으로 편향시킬 수 있습니다. 예를 들어, 사기 탐지 모델에서 정상 거래를 사기로 신고하면 오탐률이 증가합니다. + +### 25-4-4. 파기 단계 + +서비스 종료 시 데이터와 모델을 안전하게 폐기합니다. 이 단계는 24장의 개발자 파기 단계와 공통입니다. 24장 참조합니다. + +주요 점검 항목은 다음과 같습니다. + +- 학습 데이터, 사용자 대화 기록, 피드백 데이터를 복구 불가능하게 삭제합니다. +- 모델 가중치 파일을 안전하게 폐기합니다. +- 암호화 키를 폐기합니다. +- 파기 수행 내역을 감사 로그에 기록합니다. + +--- + +## 25장 요약 체크리스트 + +서비스 제공자가 AI 서비스를 운영할 때 확인해야 할 핵심 점검 항목입니다. + +### 서비스 기획 및 설계 + +- [ ] AI 보안 거버넌스를 수립했습니다 (24-1절 참조) +- [ ] AI 시스템 위험 평가를 수행했습니다 (24-1절 참조) +- [ ] SLA에 보안 요구사항(가용성, 데이터 보호, 침해 통보)을 포함했습니다 +- [ ] 보안 침해 대응 계획과 RTO를 정의했습니다 +- [ ] 서비스 제공자와 이용자 간 책임 소재를 명확히 했습니다 + +### 서비스 개발 및 구축 + +- [ ] 정적/동적 코드 분석을 수행했습니다 +- [ ] 모델 접근 제어와 무결성 검증을 적용했습니다 +- [ ] 데이터 암호화(저장/전송)를 적용했습니다 +- [ ] API 인증, Rate Limiting, 입력 검증을 적용했습니다 +- [ ] (GenAI) 프롬프트 주입 방어와 출력 필터링을 적용했습니다 +- [ ] (PredAI) 입력 스키마 검증과 이상치 탐지를 적용했습니다 + +### 서비스 제공 및 운영 + +- [ ] 접속 로그를 암호화하여 저장합니다 +- [ ] 로그에 민감 정보 마스킹을 적용했습니다 +- [ ] 로그 접근 제어를 적용했습니다 +- [ ] (GenAI) 프롬프트 주입 탐지 로그를 기록합니다 +- [ ] (PredAI) 예측 정확도와 입력 분포 변화를 기록합니다 + +### 서비스 유지보수 + +- [ ] 비정상 사용 패턴 모니터링을 운영합니다 +- [ ] 보안 패치를 적시에 적용합니다 +- [ ] 고가용성(HA) 및 자동 복구를 구성했습니다 +- [ ] DDoS 방어 대책을 적용했습니다 +- [ ] (GenAI) 환각 빈도와 GPU 자원 사용량을 모니터링합니다 +- [ ] (PredAI) 데이터/모델 드리프트를 모니터링하고 재학습 파이프라인을 구축했습니다 + +### 환류(Feedback) 및 개선 + +- [ ] 피드백 입력 검증을 적용했습니다 +- [ ] 피드백 데이터 무결성을 보장합니다 +- [ ] 피드백 처리에 최소 권한 원칙을 적용했습니다 +- [ ] 피드백 수집/처리/활용 감사 로그를 기록합니다 +- [ ] 피드백 데이터를 재학습에 반영하기 전 검증 절차를 거칩니다 + +### 파기 + +- [ ] 데이터, 모델, 암호화 키를 복구 불가능하게 삭제합니다 (24장 참조) +- [ ] 파기 수행 내역을 감사 로그에 기록합니다 + +> **TIP** +> 이 체크리스트를 분기별 보안 점검에 활용합니다. GenAI와 PredAI 서비스를 모두 운영하는 경우, 각 유형별 항목을 별도로 점검합니다. 26장에서는 AI 이용자 관점의 보안 수칙을 다룹니다. + + +--- + +# 26장. AI 이용자를 위한 보안 수칙 + +AI 서비스는 누구나 쉽게 사용할 수 있습니다. 그만큼 보안 위협에 노출되기도 쉽습니다. 이 장에서는 AI 서비스 이용자가 알아야 할 보안 위협 사례와 실천 수칙을 정리합니다. + +23장에서 다룬 AI 보안 위협 유형과 프레임워크를 기반으로, 이용자 관점에서 구체적인 대응 방법을 제시합니다. 특히 26-3절에서는 바이브코딩(Vibe Coding) 환경에서의 AI 보안을 다룹니다. + +> **TIP** +> 이 장은 AI 서비스를 직접 사용하는 모든 사람을 대상으로 합니다. 개발자를 위한 보안 요구사항은 24장, 서비스 제공자를 위한 보안 요구사항은 25장을 참조하세요. + +--- + +## 26-1. AI 이용자 대상 보안위협 사례 + +AI 서비스 이용자를 대상으로 한 보안위협은 다양합니다. 실제 사례를 통해 위협의 심각성을 살펴봅니다. + +### 26-1-1. AI 챗봇에서 중요정보 유출 + +AI 챗봇에 입력한 내용은 서버에 저장될 수 있습니다. 사용자가 입력한 개인정보, 업무 기밀, 의료 정보 등이 학습 데이터로 활용되거나 로그에 남을 수 있습니다. + +**위험 시나리오** + +- 직원이 사내 기밀 문서를 AI 챗봇에 붙여넣어 요약을 요청합니다. +- 해당 내용이 모델 학습에 반영됩니다. +- 다른 사용자의 질문에 대한 응답에 기밀 정보가 포함됩니다. + +실제로 삼성전자 반도체 부문에서 직원들이 ChatGPT에 소스코드와 회의록을 입력한 사건이 보도되었습니다. 이후 삼성전자는 사내 생성형 AI 사용을 제한했습니다. + +> **WARNING** +> AI 챗봇에 입력한 내용은 완전히 삭제되지 않을 수 있습니다. 한 번 입력한 정보는 되돌릴 수 없다고 가정해야 합니다. + +### 26-1-2. AI 기반 음성 비서 도청 + +AI 음성 비서가 사용자의 대화를 의도치 않게 녹음하는 사례가 발생했습니다. + +**실제 사례** + +| 시기 | 사례 | 내용 | +|------|------|------| +| 2018년 | Amazon Echo | 사용자 대화를 녹음하여 연락처에 전송한 사건 발생 | +| 2019년 | Google Assistant | 녹음된 음성을 인간 검토자가 청취하고 있었음이 밝혀짐 | +| 2019년 | Apple Siri | 의료 정보, 사적 대화가 외부 검수 업체에 전달됨 | + +음성 비서는 항상 대기 상태에서 음성을 수집합니다. 호출어(Wake Word) 감지 과정에서 의도하지 않은 녹음이 발생할 수 있습니다. + +### 26-1-3. AI 챗봇의 악성 링크 배포 + +공격자가 AI 챗봇의 응답을 조작하여 악성 링크를 배포하는 위협입니다. + +**공격 방식** + +1. 공격자가 AI 모델의 학습 데이터를 오염시킵니다. +2. 사용자가 특정 질문을 하면 조작된 응답이 생성됩니다. +3. 응답에 포함된 악성 URL을 사용자가 클릭합니다. +4. 피싱(Phishing) 사이트로 연결되어 개인정보가 탈취됩니다. + +AI가 생성한 응답이라는 신뢰감 때문에 사용자는 링크를 의심 없이 클릭할 가능성이 높습니다. + +### 26-1-4. AI 얼굴 인식 시스템의 해킹 + +생체 인식(Biometrics) 데이터는 비밀번호와 달리 변경이 불가능합니다. 한번 유출되면 영구적인 피해로 이어집니다. + +**실제 사례** + +- 2019년, 미국 CBP(세관국경보호국)의 안면 인식 데이터베이스에서 약 10만 명의 생체 정보가 유출되었습니다. +- 2021년, 이스라엘 감시 소프트웨어 기업 Cellebrite의 얼굴 인식 데이터가 해킹당했습니다. + +> **WARNING** +> 얼굴, 지문, 홍채 등 생체 정보는 한번 유출되면 교체할 수 없습니다. AI 기반 생체 인식 서비스 가입 전에 데이터 보호 정책을 반드시 확인하세요. + +### 26-1-5. AI 서비스의 딥페이크 영상 유포 + +딥페이크(Deepfake)는 AI를 이용하여 실존 인물의 얼굴이나 음성을 합성하는 기술입니다. 범죄에 악용되는 사례가 급증하고 있습니다. + +**주요 악용 사례** + +| 유형 | 설명 | +|------|------| +| 보이스피싱(Voice Phishing) | 가족이나 상사의 음성을 합성하여 금전을 요구 | +| 딥페이크 영상 | 유명인의 얼굴을 합성한 허위 광고 및 사기 | +| 신원 도용 | 타인의 얼굴로 본인 인증을 통과 | +| 허위 증거 조작 | 법적 분쟁에서 조작된 영상을 증거로 제출 | + +2024년, 홍콩의 한 기업에서 딥페이크로 합성된 CFO의 화상회의 영상에 속아 약 2,500만 달러를 송금한 사건이 발생했습니다. + +### 26-1-6. AI를 악용한 사이버 테러 + +AI 기술이 사이버 공격에 직접 활용되는 사례입니다. + +**주요 유형** + +- **악성 코드 자동 생성**: AI를 이용하여 탐지를 회피하는 변종 악성 코드를 대량 생성합니다. +- **자동화된 취약점 탐색**: AI가 시스템의 보안 취약점을 자동으로 탐색합니다. +- **국가 지원 공격**: 국가 수준의 공격자가 AI를 활용하여 기반시설을 공격합니다. +- **소셜 엔지니어링(Social Engineering)**: AI가 생성한 자연스러운 피싱 이메일로 사용자를 속입니다. + +> **TIP** +> AI가 생성한 피싱 이메일은 기존보다 훨씬 자연스럽습니다. 이메일의 발신자 주소, 링크 URL, 첨부파일을 항상 확인하는 습관이 중요합니다. + +### 26-1-7. 보안위협 사례 요약 + +| 위협 유형 | 피해 대상 | 핵심 위험 | +|-----------|-----------|-----------| +| 중요정보 유출 | 개인·기업 | 기밀 정보 학습·노출 | +| 음성 비서 도청 | 개인 | 사생활 침해, 녹음 유출 | +| 악성 링크 배포 | 챗봇 사용자 | 피싱, 개인정보 탈취 | +| 얼굴 인식 해킹 | 생체 인증 사용자 | 생체 정보 영구 유출 | +| 딥페이크 | 일반 대중 | 사기, 명예훼손, 금전 피해 | +| 사이버 테러 | 기관·기업 | 기반시설 파괴, 대규모 피해 | + +--- + +## 26-2. AI 서비스 이용 시 보안 수칙 + +이 절에서는 AI 서비스 이용 전, 이용 중, 개인정보 보호 관점에서 보안 수칙을 정리합니다. + +### 26-2-1. AI 서비스 이용 전 보안 수칙 + +AI 서비스를 사용하기 전에 기본적인 보안 점검을 수행해야 합니다. + +**1. 공식 사이트에서만 다운로드합니다** + +AI 서비스 앱은 반드시 공식 웹사이트나 앱 스토어에서 다운로드합니다. + +| 위협 | 설명 | +|------|------| +| 피싱 사이트(Phishing Site) | 공식 사이트와 유사한 가짜 사이트에서 악성 앱 배포 | +| 타이포스쿼팅(Typosquatting) | chatgtp.com 등 오타 도메인으로 유인 | +| 웹사이트 복제(Website Clone) | 공식 사이트를 그대로 복제하여 로그인 정보 탈취 | + +> **TIP** +> URL 주소가 정확한지 확인하세요. HTTPS 인증서가 유효한지도 함께 확인합니다. 검색 엔진의 광고 링크보다 직접 URL을 입력하는 것이 안전합니다. + +**2. 안전한 비밀번호를 설정합니다** + +AI 서비스 계정에는 강력한 비밀번호를 사용합니다. 다른 서비스와 동일한 비밀번호를 사용하면 안 됩니다. + +| 위협 | 설명 | +|------|------| +| 무차별 대입 공격(Brute Force) | 가능한 모든 조합을 시도하여 비밀번호를 알아냄 | +| 크리덴셜 스터핑(Credential Stuffing) | 유출된 다른 서비스의 계정 정보로 로그인 시도 | + +비밀번호 설정 기준은 다음과 같습니다. + +- 최소 12자 이상 +- 대문자, 소문자, 숫자, 특수문자 조합 +- 다단계 인증(Multi-Factor Authentication, MFA) 활성화 +- 비밀번호 관리자(Password Manager) 사용 권장 + +**3. 공개된 장소에서 이용을 금지합니다** + +공용 Wi-Fi 환경에서 AI 서비스를 사용하면 위험합니다. + +| 위협 | 설명 | +|------|------| +| 중간자 공격(Man-in-the-Middle, MITM) | 통신 경로를 가로채 데이터를 탈취 | +| 네트워크 스니핑(Network Sniffing) | 네트워크 트래픽을 감청하여 정보 수집 | +| 가짜 네트워크(Evil Twin) | 공식 Wi-Fi와 동일한 이름의 가짜 네트워크 구축 | + +> **WARNING** +> 카페, 공항 등의 공용 Wi-Fi에서 AI 서비스에 로그인하지 마세요. 불가피한 경우 VPN(Virtual Private Network)을 사용합니다. + +**4. 법률 및 이용약관을 확인합니다** + +AI 서비스에 가입하기 전에 다음 사항을 확인합니다. + +- 입력 데이터가 모델 학습에 사용되는지 여부 +- 데이터 보관 기간 및 삭제 정책 +- 제3자 데이터 공유 여부 +- 해외 서버 저장 여부(개인정보 국외 이전) +- 서비스 종료 시 데이터 처리 방법 + +### 26-2-2. AI 서비스 이용 중 보안 수칙 + +AI 서비스를 사용하는 동안 지켜야 할 수칙입니다. + +**1. 중요 정보를 입력하지 않습니다** + +AI 서비스에 다음 정보를 절대 입력하면 안 됩니다. + +| 정보 유형 | 예시 | +|-----------|------| +| 개인식별정보(PII) | 주민등록번호, 여권번호, 운전면허번호 | +| 금융 정보 | 계좌번호, 카드번호, 비밀번호 | +| 의료 정보 | 진료 기록, 처방전, 건강 상태 | +| 기업 기밀 | 소스코드, 설계 문서, 재무 정보 | +| 법률 정보 | 계약서 원문, 소송 관련 문서 | + +> **WARNING** +> "학습에 사용하지 않음" 옵션을 선택해도 서버 로그에 입력 내용이 남을 수 있습니다. 중요 정보는 아예 입력하지 않는 것이 원칙입니다. + +**2. AI 결과의 정확성을 검증합니다** + +AI가 생성한 결과를 무조건 신뢰하면 안 됩니다. AI 환각(Hallucination) 현상으로 사실과 다른 내용을 자신 있게 출력하는 경우가 많습니다. + +- 중요한 사실 관계는 반드시 원본 출처를 확인합니다. +- 법률, 의료, 재무 관련 조언은 전문가와 상담합니다. +- AI가 제시한 URL이나 참고 문헌이 실제로 존재하는지 확인합니다. + +**3. 대화 기록을 삭제합니다** + +AI 서비스의 대화 기록을 주기적으로 정리합니다. + +- 대화 기록 자동 저장 기능을 비활성화합니다. +- 사용 후 불필요한 대화 기록을 삭제합니다. +- 민감한 내용이 포함된 대화는 즉시 삭제합니다. + +**4. 최신 보안 업데이트를 적용합니다** + +AI 서비스 앱과 운영체제를 항상 최신 상태로 유지합니다. + +- AI 앱의 자동 업데이트를 활성화합니다. +- 운영체제와 브라우저를 최신 버전으로 유지합니다. +- 보안 패치가 발표되면 즉시 적용합니다. + +### 26-2-3. 개인정보 보호 수칙 + +AI 시대에 개인정보를 보호하기 위한 수칙입니다. + +**1. 항상 의심하고 확인합니다** + +AI가 관여된 모든 콘텐츠를 비판적으로 검토합니다. + +- 영상 통화에서 상대방의 이상한 행동을 주의합니다. +- 음성 메시지의 진위를 전화로 직접 확인합니다. +- 긴급한 금전 요구는 다른 수단으로 재확인합니다. +- SNS에서 공유되는 AI 생성 콘텐츠를 구별합니다. + +**2. 개인정보 노출을 최소화합니다** + +SNS, 공개 게시판 등에 개인정보를 과도하게 공개하면 AI를 이용한 표적 공격에 활용됩니다. + +- 프로필에 연락처, 주소, 생년월일을 공개하지 않습니다. +- 가족 관계, 직장 정보의 공개 범위를 제한합니다. +- AI 학습에 이미지가 사용되는 것을 방지하려면 SNS 공개 범위를 설정합니다. + +**3. 딥페이크 대응 방법을 숙지합니다** + +딥페이크 피해를 예방하고 대응하는 방법입니다. + +- 딥페이크 탐지 도구(Microsoft Video Authenticator 등)를 활용합니다. +- 자신의 얼굴이나 음성이 무단으로 사용된 경우 즉시 신고합니다. +- 한국인터넷진흥원(KISA) 인터넷 침해사고 신고: 118 + +**4. 허위 콘텐츠를 매매하지 않습니다** + +AI로 생성한 허위 콘텐츠의 제작과 유통은 불법입니다. + +| 행위 | 관련 법률 | +|------|-----------| +| 딥페이크 음란물 제작·유포 | 성폭력범죄의 처벌 등에 관한 특례법 | +| 위조 문서 생성 | 형법 제225조(공문서위조) | +| 허위 사실 유포 | 정보통신망법 제70조 | +| 명예훼손 목적 합성물 | 개인정보보호법, 초상권 침해 | + +> **WARNING** +> 2024년 개정된 성폭력처벌법에 따라 딥페이크 성적 합성물의 소지만으로도 처벌 대상이 됩니다. 호기심으로도 접근하지 마세요. + +--- + +## 26-3. 바이브코딩 환경에서의 AI 보안 + +바이브코딩(Vibe Coding)은 AI 코딩 어시스턴트(Claude, ChatGPT, Cursor, Copilot 등)를 활용하여 코드를 생성하는 개발 방식입니다. 생산성은 높아지지만, 새로운 보안 위험도 함께 발생합니다. + +이 절은 KISA 안내서에 수록되지 않은 독창적인 내용입니다. 바이브코딩을 실제로 사용하는 개발자와 비개발자 모두를 대상으로 합니다. + +> **TIP** +> 바이브코딩의 보안은 "AI가 생성한 코드도 내 코드"라는 원칙에서 출발합니다. AI가 작성했더라도 배포 책임은 사용자에게 있습니다. + +### 26-3-1. AI 생성 코드의 보안 취약점 + +AI가 생성한 코드에는 보안 취약점이 포함될 수 있습니다. AI는 학습 데이터에 포함된 안전하지 않은 코드 패턴을 그대로 재현하는 경우가 많습니다. + +**자주 발생하는 취약점 유형** + +| 취약점 | CWE 번호 | 설명 | +|--------|----------|------| +| SQL 인젝션(SQL Injection) | CWE-89 | 사용자 입력을 쿼리에 직접 삽입 | +| 크로스사이트 스크립팅(XSS) | CWE-79 | 입력값 검증 없이 웹 페이지에 출력 | +| 하드코딩된 인증 정보 | CWE-798 | 소스코드에 비밀번호·API 키를 직접 기입 | +| 경로 순회(Path Traversal) | CWE-22 | 파일 경로 검증 없이 파일 시스템 접근 | +| 안전하지 않은 역직렬화 | CWE-502 | 외부 데이터를 검증 없이 객체로 변환 | +| 명령어 주입(Command Injection) | CWE-78 | 사용자 입력을 시스템 명령에 직접 전달 | + +AI에게 "로그인 기능을 만들어줘"라고 요청하면 동작하는 코드를 생성합니다. 그러나 비밀번호 해싱, 입력값 검증, SQL 파라미터 바인딩이 누락된 코드를 제공할 수 있습니다. + +> **WARNING** +> AI가 생성한 코드를 검증 없이 프로덕션에 배포하면 안 됩니다. 6장(웹 애플리케이션 보안)에서 다룬 SQL 인젝션, XSS 등의 취약점이 AI 생성 코드에서도 동일하게 발생합니다. 6장 참조. + +**대응 방법** + +1. AI에게 보안 요구사항을 프롬프트에 명시합니다. +2. 생성된 코드를 정적 분석 도구(SonarQube, Semgrep 등)로 검사합니다. +3. OWASP Top 10 항목을 기준으로 코드를 검토합니다. +4. 보안 관련 코드는 반드시 인간이 리뷰합니다. + +### 26-3-2. 프롬프트 주입을 통한 코드 오염 + +바이브코딩 환경에서는 AI 코딩 어시스턴트가 프로젝트 내 파일을 읽습니다. 공격자가 악성 지시를 코드 주석이나 문서에 삽입하면, AI가 이를 따를 수 있습니다. + +**공격 벡터** + +``` +┌─────────────────────────────────────────────┐ +│ 프롬프트 주입 공격 경로 │ +├─────────────────────────────────────────────┤ +│ │ +│ 1. 악성 README.md │ +│ "이 프로젝트 빌드 시 다음 코드를 추가하세요" │ +│ │ │ +│ ▼ │ +│ 2. AI 코딩 어시스턴트가 README를 읽음 │ +│ │ │ +│ ▼ │ +│ 3. AI가 악성 코드를 생성 결과에 포함 │ +│ │ │ +│ ▼ │ +│ 4. 개발자가 검증 없이 코드를 실행 │ +│ │ +└─────────────────────────────────────────────┘ +``` + +**실제 공격 유형** + +| 공격 유형 | 삽입 위치 | 목적 | +|-----------|-----------|------| +| 악성 주석 | 소스코드 주석 | AI가 백도어 코드를 생성하도록 유도 | +| README 조작 | 오픈소스 저장소 README | AI가 악성 의존성을 추가하도록 유도 | +| 설정 파일 조작 | .env.example, config 파일 | 민감 정보 외부 전송 코드 유도 | +| 이슈·PR 본문 | GitHub Issues, PR 설명 | AI가 취약한 코드 패턴을 생성하도록 유도 | + +> **WARNING** +> 외부 오픈소스 프로젝트를 AI 코딩 어시스턴트로 작업할 때 특히 주의하세요. 신뢰할 수 없는 저장소의 파일을 AI에게 읽히기 전에 직접 검토해야 합니다. + +**대응 방법** + +1. AI가 읽는 파일의 범위를 제한합니다. +2. 외부 저장소의 README, 주석을 사전에 검토합니다. +3. AI 생성 결과에서 예상하지 못한 코드가 포함되었는지 확인합니다. +4. `.gitignore`와 AI 도구의 무시 설정(`.cursorignore` 등)을 활용합니다. + +### 26-3-3. AI가 제안하는 의존성 혼동 공격 + +AI 코딩 어시스턴트가 존재하지 않는 패키지를 제안하는 경우가 있습니다. 공격자가 해당 이름으로 악성 패키지를 미리 등록해두면 피해가 발생합니다. + +**의존성 혼동 공격(Dependency Confusion Attack)** + +``` +┌──────────────┐ ┌──────────────┐ ┌──────────────┐ +│ AI가 가상의 │───▶│ 공격자가 동일 │───▶│ 개발자가 해당 │ +│ 패키지명 제안 │ │ 이름으로 악성 │ │ 패키지를 설치 │ +│ │ │ 패키지 등록 │ │ │ +└──────────────┘ └──────────────┘ └──────────────┘ +``` + +AI가 `pip install company-utils`를 제안했을 때, 이 패키지가 실제로 존재하는지 확인해야 합니다. PyPI나 npm에 해당 이름의 악성 패키지가 등록되어 있을 수 있습니다. + +**대응 방법** + +1. AI가 제안한 패키지의 존재를 공식 레지스트리에서 확인합니다. +2. 패키지의 다운로드 수, 유지관리 이력, 게시자를 확인합니다. +3. `package-lock.json`, `requirements.txt`의 변경 사항을 리뷰합니다. +4. 내부 패키지 레지스트리(Private Registry)를 운영합니다. + +### 26-3-4. AI 생성 코드의 배포 전 검증 + +AI가 생성한 코드를 프로덕션에 배포하기 전에 반드시 검증 절차를 거쳐야 합니다. + +**검증 체크리스트** + +| 단계 | 점검 항목 | 도구 예시 | +|------|-----------|-----------| +| 정적 분석 | 코드 내 보안 취약점 탐지 | SonarQube, Semgrep, Bandit | +| 의존성 검사 | 알려진 취약점이 있는 라이브러리 탐지 | Snyk, Dependabot, pip-audit | +| 시크릿 스캔 | 하드코딩된 API 키, 비밀번호 탐지 | git-secrets, TruffleHog | +| 코드 리뷰 | 보안 전문가의 수동 검토 | Pull Request 리뷰 | +| 동적 테스트 | 실행 중 취약점 탐지 | OWASP ZAP, Burp Suite | + +> **TIP** +> CI/CD 파이프라인에 보안 검사를 자동화하면 AI 생성 코드의 취약점을 배포 전에 차단할 수 있습니다. 3장(Unix 서버 보안)에서 다룬 서버 하드닝과 함께 적용하세요. 3장 참조. + +### 26-3-5. AI 도구에 프로덕션 시크릿 공유 금지 + +AI 코딩 어시스턴트에 프로덕션 환경의 인증 정보를 전달하면 안 됩니다. + +**절대 공유하면 안 되는 정보** + +- 데이터베이스 접속 정보(호스트, 사용자명, 비밀번호) +- API 키, 시크릿 키, 토큰 +- SSL/TLS 인증서 및 개인 키 +- 클라우드 서비스 인증 정보(AWS Access Key 등) +- SSH 키, VPN 인증서 +- 환경 변수(.env) 파일의 실제 값 + +> **WARNING** +> "디버깅 도와줘"라며 에러 로그를 AI에 붙여넣을 때 주의하세요. 로그에 접속 정보, 토큰, 내부 IP 주소가 포함되어 있을 수 있습니다. + +**안전한 대안** + +| 위험한 방법 | 안전한 방법 | +|-------------|-------------| +| 실제 API 키를 AI에 전달 | 더미 값(YOUR_API_KEY)으로 대체 | +| .env 파일 전체를 공유 | .env.example 템플릿만 공유 | +| 프로덕션 에러 로그를 그대로 전달 | 민감 정보를 마스킹 후 전달 | +| 데이터베이스 덤프를 AI에 전달 | 스키마 구조만 공유 | + +### 26-3-6. 공공기관·정부 프로젝트에서의 AI 사용 + +공공기관이나 정부 프로젝트에서 AI 코딩 어시스턴트를 사용할 때는 추가적인 주의가 필요합니다. + +**주요 고려사항** + +| 항목 | 설명 | +|------|------| +| 데이터 주권 | 입력 데이터가 국외 서버로 전송되는지 확인 | +| 보안 등급 | 비밀 이상의 정보를 AI에 입력 금지 | +| 규정 준수 | 국가정보원 보안 가이드라인 준수 | +| 감사 추적 | AI 사용 내역의 기록과 보관 | +| 코드 소유권 | AI 생성 코드의 저작권과 라이선스 확인 | + +국가정보원(NIS)은 「ChatGPT 등 생성형 AI 활용 보안 가이드라인」을 통해 공공기관의 AI 사용 기준을 제시했습니다. 주요 내용은 다음과 같습니다. + +- 업무 관련 비공개 정보를 입력하지 않습니다. +- AI 생성 결과를 공식 문서에 그대로 사용하지 않습니다. +- AI 활용 시 소속 기관의 보안 정책을 우선 준수합니다. +- AI 사용 사실과 범위를 문서화합니다. + +> **TIP** +> 온프레미스(On-premise) AI 도구를 활용하면 데이터가 외부로 전송되지 않습니다. 보안 등급이 높은 프로젝트에서는 자체 호스팅 가능한 AI 도구를 검토하세요. + +### 26-3-7. 바이브코딩 보안 실천 요약 + +바이브코딩 환경에서 AI를 안전하게 사용하기 위한 핵심 원칙입니다. + +``` +┌─────────────────────────────────────────────┐ +│ 바이브코딩 보안 5대 원칙 │ +├─────────────────────────────────────────────┤ +│ │ +│ 1. 신뢰하되 검증합니다 (Trust but Verify) │ +│ → AI 생성 코드를 반드시 리뷰합니다 │ +│ │ +│ 2. 시크릿을 공유하지 않습니다 │ +│ → 프로덕션 인증 정보를 AI에 전달 금지 │ +│ │ +│ 3. 의존성을 확인합니다 │ +│ → AI가 제안한 패키지를 직접 검증합니다 │ +│ │ +│ 4. 입력을 통제합니다 │ +│ → AI가 읽는 파일 범위를 제한합니다 │ +│ │ +│ 5. 자동화로 보호합니다 │ +│ → CI/CD에 보안 검사를 통합합니다 │ +│ │ +└─────────────────────────────────────────────┘ +``` + +--- + +## 26장 요약 체크리스트 + +AI 이용자를 위한 보안 수칙을 점검합니다. 이 체크리스트를 인쇄하여 활용하세요. + +### AI 서비스 이용 전 + +| 점검 항목 | 확인 | +|-----------|:----:| +| AI 서비스 앱을 공식 사이트에서 다운로드했는가? | □ | +| 12자 이상의 강력한 비밀번호를 설정했는가? | □ | +| 다단계 인증(MFA)을 활성화했는가? | □ | +| 이용약관에서 데이터 학습 정책을 확인했는가? | □ | +| 안전한 네트워크 환경에서 접속하는가? | □ | + +### AI 서비스 이용 중 + +| 점검 항목 | 확인 | +|-----------|:----:| +| 개인식별정보(PII)를 입력하지 않았는가? | □ | +| 기업 기밀이나 소스코드를 입력하지 않았는가? | □ | +| AI 응답의 사실 여부를 검증했는가? | □ | +| 대화 기록을 주기적으로 삭제했는가? | □ | +| AI 앱과 운영체제를 최신 버전으로 유지하는가? | □ | + +### 개인정보 보호 + +| 점검 항목 | 확인 | +|-----------|:----:| +| 딥페이크 의심 콘텐츠를 비판적으로 검토하는가? | □ | +| SNS 개인정보 공개 범위를 제한했는가? | □ | +| 긴급 금전 요구 시 다른 수단으로 확인하는가? | □ | +| AI 생성 허위 콘텐츠를 유통하지 않는가? | □ | + +### 바이브코딩 보안 + +| 점검 항목 | 확인 | +|-----------|:----:| +| AI 생성 코드를 배포 전에 보안 검토했는가? | □ | +| 정적 분석 도구로 취약점을 검사했는가? | □ | +| AI에 프로덕션 시크릿을 전달하지 않았는가? | □ | +| AI가 제안한 패키지의 존재와 안전성을 확인했는가? | □ | +| 외부 저장소 파일을 AI에 읽히기 전에 검토했는가? | □ | +| CI/CD 파이프라인에 보안 검사를 통합했는가? | □ | +| 공공기관 프로젝트 시 데이터 주권을 확인했는가? | □ | + +--- + +*이전 장(25장)에서는 AI 서비스 제공자를 위한 보안 요구사항을 다루었습니다. 다음 파트에서는 부록으로 AI 보안 체크리스트 전체를 통합 정리합니다.* + + +--- diff --git a/authorkit/drafts/KESE-KIT-KO/ch23-ai-security-overview/section-new.md b/authorkit/drafts/KESE-KIT-KO/ch23-ai-security-overview/section-new.md new file mode 100644 index 0000000..0081344 --- /dev/null +++ b/authorkit/drafts/KESE-KIT-KO/ch23-ai-security-overview/section-new.md @@ -0,0 +1,325 @@ +# 23장. AI 보안 개요 + +AI 기술이 빠르게 확산되면서 보안 위협도 함께 진화하고 있습니다. 이 장에서는 AI 시스템을 대상으로 한 주요 보안 위협 유형을 살펴보고, KISA의 「인공지능(AI) 보안 안내서」가 제시하는 적용범위와 생명주기 기반 보안 프레임워크를 정리합니다. + +기존 1~22장에서 다룬 주요정보통신기반시설(Critical Information Infrastructure, CII) 점검 항목과 달리, 이 파트는 AI 시스템 고유의 보안 요구사항에 초점을 맞춥니다. + +> **TIP** +> AI 보안은 기존 정보보안의 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability) 원칙을 AI 시스템에 확장 적용한 것입니다. 1장에서 다룬 CII 보안 프레임워크와 동일한 철학을 공유합니다. + +--- + +## 23-1. AI 보안 위협 유형 + +AI 시스템을 대상으로 한 보안 위협은 크게 **프롬프트 주입 공격**, **민감 정보 노출**, **적대적 공격**으로 나뉩니다. 각 위협은 AI 모델의 특성을 악용하는 방식으로, 기존 IT 보안 위협과는 성격이 다릅니다. + +### 23-1-1. 프롬프트 주입 공격(Prompt Injection) + +대규모 언어 모델(Large Language Model, LLM)에 조작된 입력을 넣어 공격자의 의도대로 동작하게 만드는 공격입니다. + +**직접 프롬프트 주입(Direct Prompt Injection)** + +탈옥(AI Jailbreak)이라고도 합니다. 악의적인 프롬프트를 직접 입력하여 모델의 보안 제한을 우회합니다. 시스템 프롬프트를 무력화하고 민감 정보를 추출하거나, 허용되지 않은 동작을 유도합니다. + +**간접 프롬프트 주입(Indirect Prompt Injection)** + +외부 데이터 소스(웹 페이지, 문서 등)에 악성 프롬프트를 삽입합니다. 모델이 해당 데이터를 처리할 때 공격이 실행됩니다. 검색 증강 생성(Retrieval-Augmented Generation, RAG) 기반 시스템에서 특히 위험합니다. + +**플러그인 기반 공격** + +LLM이 연동하는 외부 플러그인이나 API를 악용합니다. 웹사이트가 플러그인을 통해 사기 목적으로 모델을 조작할 수 있습니다. + +> **WARNING** +> 바이브코딩 환경에서 AI 코딩 어시스턴트를 사용할 때도 프롬프트 주입에 주의해야 합니다. 외부 라이브러리의 README나 코드 주석에 악성 프롬프트가 삽입될 수 있습니다. + +**실제 사례** + +- Amazon Alexa와 Google Assistant가 레이저 기반 해킹 공격에 노출되어 스마트 스피커에 원격 명령을 실행할 수 있었습니다. +- 해커가 Amazon과 Google의 애플리케이션 업그레이드 메커니즘을 악용하여 음성 비서의 응답을 조작했습니다. + +### 23-1-2. 민감 정보 노출(Sensitive Information Disclosure) + +LLM 기반 서비스가 학습 데이터에 포함된 민감 정보를 의도치 않게 출력하는 위협입니다. + +**주요 원인** + +| 원인 | 설명 | +|------|------| +| 비의도적 노출 | 데이터 스크러빙 미흡으로 학습 데이터의 민감 정보가 응답에 포함 | +| 필터링 오류 | 위험하거나 부적절한 응답이 필터를 우회하여 출력 | +| 과적합(Overfitting) | 모델이 학습 데이터에 과도하게 맞춰져 민감 정보를 기억 | + +**실제 사례** + +- OpenAI의 ChatGPT에서 약국 포털 직원의 로그인 정보와 개인 데이터가 유출되었습니다. +- 2023년 3월, ChatGPT 버그로 인해 한 사용자의 채팅 기록이 다른 사용자에게 노출되었습니다. +- 2023년, Google DeepMind와 대학 연구진이 간단한 프롬프트 공격으로 ChatGPT에서 개인정보를 포함한 10,000건의 학습 데이터를 추출할 수 있음을 증명했습니다. + +### 23-1-3. 적대적 공격(Adversarial Attack) + +AI 모델의 입력 데이터를 교묘하게 조작하여 오작동을 유도하는 공격입니다. 크게 세 가지로 분류됩니다. + +#### 회피 공격(Evasion Attack) + +입력 데이터에 사람이 인식할 수 없는 수준의 노이즈를 추가하여 모델을 속이는 공격입니다. 주로 이미지 인식 모델을 대상으로 합니다. + +**실제 사례** + +- 2017년 워싱턴대 연구팀이 정지 표지판에 스티커를 부착하여 자율주행 차량이 속도 제한 표지판으로 오인식하도록 만들었습니다. +- 2018년 Google Research가 적대적 패치(Adversarial Patch) 논문을 발표했습니다. 바나나 옆에 스티커를 붙이면 이미지 인식 앱이 100% 확률로 토스터로 인식했습니다. + +#### 오염 공격(Poisoning Attack) + +모델 학습 과정에서 의도적으로 오염된 데이터를 주입하는 공격입니다. 모델이 특정 상황에서 부적절하게 동작하도록 만듭니다. + +**실제 사례** + +- 2024년 중국산 로봇 청소기 'Ecovacs Deebot X2s'가 해킹되어 미국 가정에서 인종차별적 발언을 했습니다. 해커가 제조사 보안을 우회하여 카메라, 마이크, 이동 제어 기능을 탈취했습니다. +- 2016년 Microsoft의 챗봇 'Tay'가 악의적인 사용자들의 데이터 오염으로 부적절한 발언을 생성했습니다. Microsoft는 출시 16시간 만에 서비스를 중단했습니다. + +#### 탐색적 공격(Exploratory Attack) + +학습된 모델에 다수의 질의를 보내 모델의 내부 구조나 학습 데이터를 역추적하는 공격입니다. + +**데이터 추출 공격(Data Extraction / Inversion Attack)** + +모델의 학습에 사용된 원본 데이터를 복원하는 공격입니다. 예를 들어 얼굴 인식 모델에서 학습에 사용된 얼굴 이미지를 역추출할 수 있습니다. + +> **TIP** +> 데이터 추출 공격은 질의 빈도를 제한하는 것으로 대응할 수 있습니다. 예를 들어, 1인당 하루 질의 횟수를 제한하면 공격 효과를 최소화할 수 있습니다. API 호출 제한(Rate Limiting) 설정은 4장(W-15 이후)과 5장(WS-06 이후)의 서비스 관리 항목을 참조하세요. + +**모델 추출 공격(Model Extraction)** + +수많은 질의와 응답을 분석하여 모델의 분류 기준과 학습 내용을 복제하는 공격입니다. + +- Amazon의 ML 모델과 유사한 모델을 단 650건의 질의로 70초 만에 생성한 연구 사례가 있습니다. +- 서비스형 기계학습(Machine Learning as a Service, MLaaS)의 유료 모델을 탈취하는 데 악용될 수 있습니다. +- 추출된 모델을 이용한 2차 공격(회피 공격, 전도 공격 등)으로 이어질 수 있습니다. + +**공격자 지식 수준에 따른 분류** + +| 유형 | 설명 | +|------|------| +| 그레이박스(Gray-box) 모델 추출 | 공격자가 대상 AI 모델에 대한 부분적 사전 지식을 보유 | +| 블랙박스(Black-box) 모델 추출 | 공격자가 대상 AI 모델에 대한 사전 지식 없이 공격 | + +### 23-1-4. AI 보안 위협 요약 + +| 위협 유형 | 공격 대상 | 핵심 위험 | 대응 방향 | +|-----------|-----------|-----------|-----------| +| 프롬프트 주입 | LLM 입력 | 보안 제한 우회, 데이터 유출 | 입력 검증, 프롬프트 필터링 | +| 민감 정보 노출 | 학습 데이터 | 개인정보 유출, 기밀 노출 | 데이터 스크러빙, 과적합 방지 | +| 회피 공격 | 입력 데이터 | 모델 오작동 | 적대적 학습, 입력 검증 | +| 오염 공격 | 학습 과정 | 모델 무결성 훼손 | 데이터 검증, 이상치 탐지 | +| 데이터 추출 | 모델 응답 | 학습 데이터 복원 | 질의 제한, 차분 프라이버시 | +| 모델 추출 | 모델 응답 | 모델 복제, 지적재산 탈취 | 질의 제한, 응답 난독화 | + +--- + +## 23-2. AI 보안 안내서의 적용범위 + +KISA의 「인공지능(AI) 보안 안내서」는 기존 AI 신뢰성 가이드라인과 달리 **보안(Security)**에 특화된 안내서입니다. 이 절에서는 안내서의 핵심 특징과 적용 대상을 정리합니다. + +### 23-2-1. 기존 가이드라인과의 차이점 + +기존에 발표된 AI 관련 가이드라인은 주로 신뢰성(Trustworthiness)에 초점을 맞추었습니다. 편향성, 투명성, 윤리적 문제를 다루었지만, 구체적인 보안 요구사항은 부족했습니다. + +AI 보안 안내서는 정보보안의 3요소인 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)을 AI 시스템에 적용합니다. 여기에 **책임 추적성(Accountability)**을 추가하여 4가지 보안 목표를 제시합니다. + +| 보안 목표 | 설명 | AI 시스템 적용 | +|-----------|------|---------------| +| 기밀성 | 인가된 사용자만 정보에 접근 | 학습 데이터, 모델 파라미터 보호 | +| 무결성 | 데이터와 시스템의 정확성 유지 | 학습 데이터 오염 방지, 모델 변조 방지 | +| 가용성 | 서비스와 데이터의 접근성 보장 | AI 서비스 연속성, DDoS 대응 | +| 책임 추적성 | 행위에 대한 책임과 검증 가능성 | 모델 결정의 추적 가능성, 감사 로그 | + +### 23-2-2. 적용 대상 + +안내서는 AI 생태계의 세 주체를 대상으로 합니다. + +**AI 개발자(Developer)** + +시스템 분석가의 요구사항에 따라 프로그래밍이나 시스템 설계를 수행하는 소프트웨어 개발자 또는 개발 조직입니다. 24장에서 상세하게 다룹니다. + +**AI 서비스 제공자(Service Provider)** + +AI 서비스 또는 보조 서비스를 타인에게 제공하는 사업자입니다. 영리 법인이 주요 대상입니다. 25장에서 상세하게 다룹니다. + +**AI 이용자(User)** + +AI 서비스를 타인에게 제공하지 않고 직접 사용하는 사람입니다. 일반 대중이 주요 대상이지만, 기업 내 AI 사용자도 포함합니다. 26장에서 상세하게 다룹니다. + +> **TIP** +> 바이브코딩을 하는 개발자라면 AI 이용자이면서 동시에 개발자이기도 합니다. AI 코딩 어시스턴트를 사용하여 코드를 생성할 때는 26장의 이용자 보안 수칙과 24장의 개발 보안 요구사항을 함께 참고하세요. + +### 23-2-3. 참고 국제 표준 및 가이드라인 + +AI 보안 안내서는 다음 국제 표준과 가이드라인을 참고하여 작성되었습니다. + +| 기관 | 문서명 | 비고 | +|------|--------|------| +| NIST (미국) | AI Risk Management Framework (AI RMF 1.0) | 2023년 1월 | +| ISO/IEC | 42001, 23894 | AI 관리체계 표준 | +| OWASP (미국) | Top 10 for LLM Applications (Ver 1.1) | LLM 취약점 Top 10 | +| Google | SAIF (Secure AI Framework) | AI 보안 프레임워크 | +| EU | EU AI Act | AI 규제법 | +| OECD | AI Principles | AI 원칙 | +| UK NCSC | Guidelines for Secure AI System Development | 2023년 11월 | +| 일본 | AI Business Operator Guidelines (Ver 1.0) | 2024년 6월 | +| 한국 TTA | 신뢰할 수 있는 인공지능 개발 안내서 | | +| 한국 NIS | ChatGPT 등 생성형 AI 활용 보안 가이드라인 | | + +--- + +## 23-3. AI 서비스 생명주기와 보안 프레임워크 + +AI 보안 안내서는 AI 서비스의 전체 생명주기를 6단계로 구분하고, 각 단계별 보안 요구사항을 제시합니다. 기존 가이드라인이 5단계를 사용하는 것과 달리, **파기(Disposal)** 단계를 별도로 분리한 것이 특징입니다. + +### 23-3-1. 6단계 생명주기 + +``` +┌─────────────┐ ┌─────────────┐ ┌─────────────┐ +│ 1. 계획 및 │───▶│ 2. 데이터 │───▶│ 3. 모델 │ +│ 설계 │ │ 수집 및 준비 │ │ 개발 │ +└─────────────┘ └─────────────┘ └─────────────┘ + │ +┌─────────────┐ ┌─────────────┐ ┌─────────────┐ +│ 6. 파기 │◀───│ 5. 모니터링 │◀───│ 4. 모델 │ +│ │ │ 및 유지보수 │ │ 배포 │ +└─────────────┘ └─────────────┘ └─────────────┘ +``` + +**1단계. 계획 및 설계(Planning & Design)** + +AI가 해결할 비즈니스 및 기술적 목표를 정의합니다. 관리 감독 조직과 방법을 수립하고, 시스템 위험요소를 분석하여 대응 방안을 마련합니다. + +- 보안 거버넌스 체계 구축 +- AI 모델 개발에 대한 위험관리 계획 수립 +- 24장 24-1절에서 상세 점검 항목을 다룹니다. + +**2단계. 데이터 수집 및 준비(Data Collection & Preparation)** + +데이터 소스를 정의하고 보안 정책과 법적 제약을 고려합니다. 결측치와 중복 데이터를 처리하고, 학습/검증/테스트 데이터셋으로 분리합니다. + +- 데이터 수집 시 네트워크 보안 +- 데이터 무결성 검증 +- 데이터 라벨링 보안 +- 24장 24-2절에서 상세 점검 항목을 다룹니다. + +**3단계. 모델 개발(Model Development)** + +적절한 기술과 알고리즘을 선택하고, 준비된 데이터로 모델을 학습합니다. 미사용 테스트 데이터로 정확도와 견고성(Robustness)을 검증합니다. + +- 학습/검증 환경 보안 +- 알고리즘 및 모델 보안 +- 오픈소스 라이브러리 보안 +- 개발 환경(LLM 활용 포함) 보안 +- 24장 24-3절에서 상세 점검 항목을 다룹니다. + +**4단계. 모델 배포(Model Deployment)** + +모델을 클라우드, 엣지 디바이스, 내부 서버에 배포합니다. 다른 시스템과 실시간 또는 배치 방식으로 연동합니다. + +- 배포 과정 보안 +- API 보안 +- 24장 24-4절에서 상세 점검 항목을 다룹니다. + +**5단계. 모니터링 및 유지보수(Monitoring & Maintenance)** + +배포 후 모델 성능을 지속적으로 추적합니다. 보안 취약점을 탐지하고 완화하며, 업데이트와 패치를 적용합니다. + +- 운영 보안 +- 사용자 피드백 및 개선 과정 보안 +- 24장 24-5절에서 상세 점검 항목을 다룹니다. + +**6단계. 파기(Disposal)** + +중요 데이터와 로그를 백업한 후 파기합니다. 잔여 데이터 유출을 방지하고, 파기 사유와 교훈을 문서화합니다. + +- 모델 파일 및 학습 데이터 완전 삭제 +- 복구 불가능한 방식으로 처리 +- 24장 24-6절에서 상세 점검 항목을 다룹니다. + +> **WARNING** +> 파기 단계를 소홀히 하면 폐기된 AI 모델에서 학습 데이터가 복원되어 민감 정보가 유출될 수 있습니다. 23-1-3절의 데이터 추출 공격 사례를 참고하세요. + +### 23-3-2. 보안 프레임워크 구성 + +AI 보안 프레임워크는 **보안 목표**, **거버넌스**, **위험관리** 세 축으로 구성됩니다. + +``` +┌─────────────────────────────────────────────┐ +│ 보안 프레임워크 │ +├─────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────┐ │ +│ │ 보안 목표: C.I.A. + 책임 추적성 │ │ +│ └───────────────────────────────────────┘ │ +│ │ +│ ┌──────────────┐ ┌──────────────────────┐ │ +│ │ 거버넌스 │ │ 위험관리 │ │ +│ │ │ │ │ │ +│ │ · 정책 │ │ · 위험 분석 │ │ +│ │ · 규정 │ │ · 위험 감지 │ │ +│ │ · 절차 │ │ · 사고 대응 │ │ +│ └──────────────┘ └──────────────────────┘ │ +│ │ +│ ┌───────────────────────────────────────┐ │ +│ │ 6단계 생명주기별 보안 요구사항 │ │ +│ └───────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────┘ +``` + +**거버넌스(Governance)** + +조직의 AI 관련 정책, 절차, 표준, 지침을 수립합니다. 역할과 책임을 명확히 하여 AI 워크로드에 대한 관리 체계를 갖춥니다. + +| 구성 요소 | 내용 | +|-----------|------| +| 정책(Policy) | AI 보안 정책, 접근 제어 정책, 데이터 보호 정책 | +| 규정(Guidelines) | AI 모델 관리 규정, 모니터링 규정, 위험관리 규정 | +| 절차(Process) | 보안 평가 절차, 업데이트/패치 절차, 비상 대응 계획 | + +> **TIP** +> AI 거버넌스 체계는 13장에서 다룬 정보보호 정책 및 조직(A-1 ~ A-9)과 동일한 프레임워크 위에 구축합니다. 기존 정보보호 조직에 AI 보안 역할을 추가하는 방식으로 접근하면 효율적입니다. + +**위험관리(Risk Management)** + +| 단계 | 활동 | 설명 | +|------|------|------| +| 위험 분석 | 식별 → 평가 → 완화 계획 | 기술·운영·윤리·법적 위험을 식별하고 심각도와 발생 확률을 평가 | +| 위험 감지 | 모니터링 → 이상 탐지 → 알림 | AI 시스템의 성능과 안전을 실시간으로 모니터링 | +| 사고 대응 | 대응 → 복구 → 재발 방지 | 위험 발생 시 신속한 대응과 피해 최소화 | + +### 23-3-3. AI 유형별 차별화 + +안내서는 예측형 AI(Predictive AI)와 생성형 AI(Generative AI)를 구분하여 보안 요구사항을 제시합니다. 동일한 보안 항목이라도 AI 유형에 따라 위험 요소가 다르기 때문입니다. + +| 구분 | 예측형 AI(Predictive AI) | 생성형 AI(Generative AI) | +|------|------------------------|------------------------| +| 핵심 기술 | 통계 알고리즘, 기계학습(ML) | 딥러닝, 대규모 언어 모델(LLM) | +| 주요 기능 | 과거/현재 데이터 기반 패턴 식별 및 추론 | 학습 데이터 기반 새로운 콘텐츠 생성 | +| 데이터 보안 초점 | 고품질 데이터 확보, 정확한 라벨링 | 오픈소스 모델의 안전한 활용 | +| 주요 위협 | 데이터 역추적, 예측 결과 조작 | 민감 정보 생성, 유해 콘텐츠 생성 | +| 파기 시 위험 | 비즈니스 데이터 유출 | 학습 데이터 복원, 모델 악용 | + +> **TIP** +> 바이브코딩에서 주로 사용하는 AI 코딩 어시스턴트(Claude, ChatGPT, Cursor, Copilot 등)는 생성형 AI에 해당합니다. 생성형 AI 관련 보안 요구사항을 우선적으로 확인하세요. + +--- + +## 23장 요약 체크리스트 + +| 점검 항목 | 확인 | +|-----------|:----:| +| AI 시스템의 주요 보안 위협 유형(프롬프트 주입, 정보 노출, 적대적 공격)을 이해했는가? | □ | +| AI 보안 안내서의 4가지 보안 목표(C.I.A. + 책임 추적성)를 파악했는가? | □ | +| AI 생태계의 3대 주체(개발자, 서비스 제공자, 이용자)별 역할을 이해했는가? | □ | +| 6단계 AI 서비스 생명주기를 숙지했는가? | □ | +| 보안 프레임워크의 3축(보안 목표, 거버넌스, 위험관리)을 이해했는가? | □ | +| 예측형 AI와 생성형 AI의 보안 차이점을 파악했는가? | □ | + +--- + +*다음 장(24장)에서는 AI 개발자를 위한 보안 요구사항과 검증항목을 생명주기 단계별로 상세하게 다룹니다.* diff --git a/authorkit/drafts/KESE-KIT-KO/ch24-ai-developer-security/section-new.md b/authorkit/drafts/KESE-KIT-KO/ch24-ai-developer-security/section-new.md new file mode 100644 index 0000000..1f1523e --- /dev/null +++ b/authorkit/drafts/KESE-KIT-KO/ch24-ai-developer-security/section-new.md @@ -0,0 +1,605 @@ +# 24장. AI 개발자를 위한 보안 점검 + +23장에서 AI 보안 위협 유형과 생명주기 기반 프레임워크를 살펴보았습니다. 이 장에서는 AI 개발자가 각 생명주기 단계에서 점검해야 할 보안 요구사항을 구체적으로 다룹니다. + +KISA의 「인공지능(AI) 보안 안내서」가 제시하는 6단계 생명주기를 따라 점검 항목을 정리합니다. 바이브코더, 서버 운용 개발자, 정부과제 개발자 모두에게 실무 지침을 제공합니다. + +> **TIP** +> 이 장의 점검 항목은 기존 1~22장의 CII 보안 항목과 병행하여 적용합니다. AI 시스템도 서버, 네트워크, 데이터베이스 위에서 동작하므로 기존 보안 기반이 필수입니다. + +--- + +## 24-1. 계획 및 설계 — 거버넌스, 위험관리 + +AI 프로젝트의 첫 단계입니다. 보안 체계를 수립하고 위험요소를 사전에 분석합니다. 이 단계를 생략하면 이후 모든 단계에서 보안 공백이 발생합니다. + +### 24-1-1. 거버넌스 + +AI 보안 거버넌스는 조직, 정책, 인력의 세 축으로 구성됩니다. + +[표 24-1] 거버넌스 점검 항목 + +| 번호 | 점검 항목 | 설명 | 대상 | +|------|-----------|------|------| +| 1.1.1 | AI 보안 조직 구성 | AI 보안 전담 조직 또는 역할을 지정했는가? | 전체 | +| 1.1.2 | 정책/절차/프로세스 수립 | AI 개발·운영에 관한 보안 정책과 절차를 문서화했는가? | 전체 | +| 1.1.3 | 전문 인력 확보 | AI 보안 관련 전문 인력을 배치하거나 교육 계획을 수립했는가? | 전체 | + +**조직 구성(1.1.1)** + +AI 보안 전담 조직을 구성합니다. 소규모 팀이라면 기존 정보보호 담당자에게 AI 보안 역할을 추가합니다. 13장의 정보보호 조직(A-1 ~ A-9) 체계를 기반으로 확장합니다. + +정부과제 개발자는 과제 수행 시 보안 책임자를 명시해야 합니다. 과제 제안서에 AI 보안 거버넌스 항목을 포함하세요. + +**정책/절차/프로세스(1.1.2)** + +다음 정책을 문서화합니다. + +- AI 모델 개발 보안 정책 +- 학습 데이터 수집·관리 정책 +- 모델 배포 및 변경 관리 절차 +- 보안 사고 대응 절차 +- AI 서비스 파기 절차 + +> **TIP** +> 바이브코더도 개인 프로젝트에서 최소한의 보안 정책을 수립하세요. AI 코딩 어시스턴트에게 "이 프로젝트의 보안 정책을 작성해줘"라고 요청하면 좋은 출발점이 됩니다. + +**전문 인력(1.1.3)** + +AI 보안은 기존 IT 보안과 다른 전문성을 요구합니다. 적대적 공격 방어, 프롬프트 주입 방어, 데이터 오염 탐지 등의 역량이 필요합니다. 외부 교육이나 자격 인증을 통해 역량을 확보합니다. + +### 24-1-2. 위험관리 + +AI 시스템 고유의 위험요소를 식별하고 대응 방안을 마련합니다. + +[표 24-2] 위험관리 점검 항목 + +| 번호 | 점검 항목 | 설명 | 대상 | +|------|-----------|------|------| +| 1.2.1 | 위험요소 분석 | AI 시스템의 기술적·운영적·법적 위험요소를 식별했는가? | 전체 | +| 1.2.2 | 위협 모델링 | AI 모델에 대한 위협 시나리오를 수립했는가? | 전체 | +| 1.2.3 | 위험 완화 계획 | 식별된 위험에 대한 완화 방안을 수립했는가? | 전체 | + +**위험요소 분석(1.2.1)** + +AI 시스템에 특화된 위험요소를 분류합니다. + +| 위험 유형 | 예시 | +|-----------|------| +| 기술적 위험 | 적대적 공격, 모델 오염, 데이터 유출 | +| 운영적 위험 | 모델 성능 저하, 서비스 중단, 과적합 | +| 법적 위험 | 개인정보 침해, 저작권 위반, AI 규제 위반 | +| 윤리적 위험 | 편향된 판단, 차별적 결과, 유해 콘텐츠 생성 | + +**위협 모델링(1.2.2)** + +23장에서 다룬 위협 유형(프롬프트 주입, 적대적 공격, 데이터 추출 등)을 기반으로 위협 시나리오를 작성합니다. 23-1절 참조. + +STRIDE(스푸핑, 변조, 부인, 정보 노출, 서비스 거부, 권한 상승) 모델을 AI 시스템에 확장 적용합니다. 각 위협에 대해 발생 가능성과 영향도를 평가합니다. + +**위험 완화 계획(1.2.3)** + +식별된 위험에 대해 수용, 회피, 전가, 완화 중 대응 전략을 결정합니다. 완화 조치의 우선순위를 정하고 담당자를 지정합니다. + +> **WARNING** +> 정부과제에서 AI 보안 위험관리를 생략하면 감사 시 지적 사항이 됩니다. 과제 시작 전에 반드시 위험 분석 보고서를 작성하세요. + +--- + +## 24-2. 데이터 수집 및 준비 — 수집/전처리, 무결성, 라벨링 + +학습 데이터의 품질과 보안이 모델 성능과 안전성을 결정합니다. 데이터가 오염되면 모델도 오염됩니다. + +### 24-2-1. 수집/전처리 보안 + +[표 24-3] 데이터 수집/전처리 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 2.1.1 | 네트워크 프로토콜 보안 | 데이터 수집 시 안전한 통신 프로토콜을 사용하는가? | +| 2.1.2 | 보관/삭제 절차 | 수집 데이터의 보관 기간과 삭제 절차를 정의했는가? | +| 2.1.3 | 암호화 적용 | 수집·저장·전송 시 데이터를 암호화하는가? | + +**네트워크 프로토콜 보안(2.1.1)** + +데이터 수집 경로에 TLS 1.2 이상을 적용합니다. 외부 API에서 데이터를 수집할 때 인증서를 검증합니다. 8장의 네트워크 보안 항목(N-01 이후)을 함께 점검하세요. + +크롤링으로 데이터를 수집할 때는 HTTPS만 사용합니다. HTTP 응답을 그대로 학습 데이터로 사용하면 중간자 공격(Man-in-the-Middle, MitM)에 노출됩니다. + +**보관/삭제 절차(2.1.2)** + +수집 데이터의 보관 기간을 명시합니다. 학습 완료 후 원본 데이터의 보관 필요성을 검토합니다. 개인정보가 포함된 데이터는 관련 법령에 따라 처리합니다. + +**암호화 적용(2.1.3)** + +| 구분 | 적용 방법 | 참고 | +|------|-----------|------| +| 전송 중 | TLS 1.2+ | 8장 참조 | +| 저장 중 | AES-256 | 7장 DB 암호화 참조 | +| 백업 시 | 암호화된 백업 | 14장 참조 | + +> **TIP** +> 바이브코더가 공개 데이터셋을 다운로드할 때도 HTTPS로 받고, 해시값(SHA-256)을 검증하세요. `hashlib`(Python)이나 `sha256sum`(Linux) 명령으로 간단히 확인할 수 있습니다. + +### 24-2-2. 무결성 검증 + +[표 24-4] 데이터 무결성 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 2.2.1 | 무결성 검증 | 학습 데이터의 위변조 여부를 검증하는 절차가 있는가? | +| 2.2.2 | 접근 권한 제한 | 학습 데이터에 대한 접근 권한을 최소 권한 원칙으로 관리하는가? | + +**무결성 검증(2.2.1)** + +학습 데이터에 해시 기반 무결성 검증을 적용합니다. 데이터 파이프라인의 각 단계에서 체크섬을 기록하고 비교합니다. + +``` +수집 → 해시 기록 → 전처리 → 해시 비교 → 학습 투입 +``` + +서버 운용 개발자는 데이터 저장소에 파일 무결성 모니터링(File Integrity Monitoring, FIM) 도구를 적용합니다. 2장의 파일 시스템 보안 항목을 참고하세요. + +**접근 권한 제한(2.2.2)** + +학습 데이터 저장소에 최소 권한 원칙(Principle of Least Privilege)을 적용합니다. 개발자, 데이터 엔지니어, 운영자 각각의 접근 범위를 제한합니다. 1장의 계정 관리(U-01 이후)와 3장의 접근 제어 항목을 참조하세요. + +### 24-2-3. 데이터 공격 방어 + +[표 24-5] 데이터 공격 방어 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 2.3.1 | 데이터 오염 방어 | 학습 데이터에 악의적 데이터가 삽입되는 것을 탐지·차단하는가? | +| 2.3.2 | 회피 공격 방어 | 입력 데이터 조작을 통한 모델 오작동을 방어하는가? | +| 2.3.3 | 유출/변조 방지 | 학습 데이터의 유출이나 변조를 방지하는 조치를 적용하는가? | + +**데이터 오염 방어(2.3.1)** + +23-1-3절에서 다룬 오염 공격(Poisoning Attack)을 방어합니다. 수집 데이터의 출처를 검증하고, 이상치(Outlier) 탐지 알고리즘을 적용합니다. + +구체적인 방어 조치는 다음과 같습니다. + +- 데이터 출처별 신뢰도를 평가합니다. +- 통계적 이상치 탐지를 적용합니다. +- 크라우드소싱 데이터는 교차 검증합니다. +- 데이터 수집 이력을 기록합니다. + +**회피 공격 방어(2.3.2)** + +입력 데이터의 유효성을 검증하는 전처리 파이프라인을 구축합니다. 입력값 범위 검증, 형식 검증, 이상 패턴 탐지를 적용합니다. 5장과 6장의 웹 입력값 검증 항목을 참고하세요. + +**유출/변조 방지(2.3.3)** + +학습 데이터가 외부로 유출되거나 내부에서 변조되는 것을 방지합니다. 데이터 손실 방지(Data Loss Prevention, DLP) 솔루션을 적용하고, 접근 로그를 기록합니다. + +> **WARNING** +> 공개 데이터셋이라도 악의적으로 오염된 사례가 있습니다. Hugging Face, Kaggle 등에서 데이터셋을 받을 때 커뮤니티 리뷰와 데이터 카드를 반드시 확인하세요. + +--- + +## 24-3. 모델 개발 — 학습환경, 알고리즘, 오픈소스, 개발환경 + +모델 개발 단계는 점검 항목이 가장 많습니다. 학습환경, 모델 공격 방어, 오픈소스, LLM 보안까지 4개 영역을 다룹니다. + +### 24-3-1. 학습환경 보안 + +[표 24-6] 학습환경 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 3.1.1 | 학습환경 보안조치 | GPU 서버, 클라우드 학습 환경에 접근 제어를 적용하는가? | +| 3.1.2 | 허위 데이터 삽입 차단 | 학습 과정에서 비인가 데이터가 삽입되는 것을 차단하는가? | +| 3.1.3 | 연합학습 장치 검증 | 연합학습(Federated Learning) 참여 장치의 신뢰성을 검증하는가? | + +**학습환경 보안조치(3.1.1)** + +GPU 서버에 대한 접근을 SSH 키 기반 인증으로 제한합니다. 클라우드 학습 환경(AWS SageMaker, Google Vertex AI 등)에 IAM(Identity and Access Management) 정책을 적용합니다. + +서버 운용 개발자는 학습 서버의 OS 보안을 1장(Unix/Linux)과 2장(Windows) 기준으로 점검합니다. 학습 전용 네트워크 세그먼트를 분리하는 것을 권장합니다. + +**허위 데이터 삽입 차단(3.1.2)** + +학습 파이프라인에 데이터 검증 단계를 추가합니다. 학습 데이터 목록을 화이트리스트로 관리하고, 비인가 데이터 파일이 추가되면 알림을 발생시킵니다. + +**연합학습 장치 검증(3.1.3)** + +연합학습 환경에서는 참여 장치가 보내는 모델 업데이트를 검증합니다. 비잔틴 내결함성(Byzantine Fault Tolerance) 알고리즘을 적용하여 악의적 참여자의 영향을 최소화합니다. + +> **TIP** +> 바이브코더가 Google Colab이나 Kaggle Notebook에서 학습할 때도 런타임 환경의 패키지 목록을 확인하세요. `pip list`로 설치된 패키지를 점검하고, 의심스러운 패키지가 없는지 확인합니다. + +### 24-3-2. 모델 공격 방어 + +AI 모델을 대상으로 한 7가지 주요 공격 유형에 대한 방어 방법입니다. + +[표 24-7] 모델 공격 방어 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 3.2.1 | 프롬프트 주입 방어 | 프롬프트 주입(Prompt Injection) 공격을 탐지·차단하는가? | +| 3.2.2 | 적대적 예제 방어 | 적대적 예제(Adversarial Example)를 탐지하는가? | +| 3.2.3 | 모델 회피 공격 방어 | 회피 공격(Evasion Attack)에 대한 견고성을 확보했는가? | +| 3.2.4 | 모델 오염 방어 | 백도어(Backdoor) 삽입 등 오염 공격을 방어하는가? | +| 3.2.5 | 모델 추출/역설계 방어 | 모델 파라미터 추출이나 역설계를 방지하는가? | +| 3.2.6 | 반복 질의 공격 방어 | 대량 질의를 통한 모델 정보 유출을 방어하는가? | +| 3.2.7 | ML 기반 능동 방어 | 머신러닝 기법으로 공격을 자동 탐지하는가? | + +**프롬프트 주입 방어(3.2.1)** + +23-1-1절에서 다룬 프롬프트 주입 공격에 대한 방어 조치입니다. + +- 시스템 프롬프트와 사용자 입력을 명확히 분리합니다. +- 입력 필터링 규칙을 적용합니다. +- 출력 검증 레이어를 추가합니다. +- 허용된 동작 범위를 사전에 정의합니다. + +``` +[입력] → [필터링] → [시스템 프롬프트 + 사용자 입력] → [모델] → [출력 검증] → [응답] +``` + +> **WARNING** +> 프롬프트 주입은 LLM 기반 서비스의 가장 심각한 위협입니다. 단순 키워드 필터링만으로는 방어가 불충분합니다. 다중 레이어 방어 전략을 적용하세요. + +**적대적 예제 방어(3.2.2)** + +적대적 학습(Adversarial Training)을 통해 모델의 견고성을 높입니다. 학습 과정에서 적대적 예제를 의도적으로 포함시켜 모델이 이를 올바르게 분류하도록 훈련합니다. + +**모델 회피 공격 방어(3.2.3)** + +입력 데이터 전처리 단계에서 노이즈 제거 필터를 적용합니다. 모델 앙상블(Ensemble) 기법으로 단일 모델의 취약점을 보완합니다. + +**모델 오염 방어(3.2.4)** + +학습 데이터와 사전학습 모델(Pretrained Model)의 무결성을 검증합니다. 백도어 탐지 도구(예: Neural Cleanse)를 적용하여 모델에 삽입된 트리거를 탐지합니다. + +**모델 추출/역설계 방어(3.2.5)** + +API 응답에서 신뢰도 점수(Confidence Score)를 제거하거나 라운딩합니다. 응답에 워터마크를 삽입하여 추출 여부를 추적합니다. 모델 파일을 암호화하여 저장합니다. + +**반복 질의 공격 방어(3.2.6)** + +API 호출 횟수를 제한(Rate Limiting)합니다. 비정상적 질의 패턴을 탐지합니다. 4장(W-15 이후)과 5장(WS-06 이후)의 서비스 관리 항목을 참조하세요. + +| 방어 기법 | 설명 | +|-----------|------| +| Rate Limiting | 사용자별, IP별 API 호출 횟수 제한 | +| 질의 패턴 분석 | 유사한 질의 반복 탐지 | +| 응답 지연 | 의심스러운 요청에 응답 지연 적용 | +| 캡차(CAPTCHA) | 자동화된 질의 차단 | + +**ML 기반 능동 방어(3.2.7)** + +보안 이벤트 로그를 기반으로 이상 탐지 모델을 구축합니다. 공격 패턴을 자동으로 학습하고 대응합니다. 9장의 로그 관리 항목과 연계합니다. + +### 24-3-3. 오픈소스 보안 + +AI 개발에서 오픈소스 라이브러리 사용은 필수입니다. PyTorch, TensorFlow, Hugging Face Transformers 등이 대표적입니다. 그러나 오픈소스에도 보안 취약점이 존재합니다. + +[표 24-8] 오픈소스 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 3.3.1 | 업데이트/취약점 관리 | 오픈소스 라이브러리의 버전과 알려진 취약점을 관리하는가? | +| 3.3.2 | 소스코드 검토 | 사용 전 오픈소스의 소스코드를 검토하는가? | +| 3.3.3 | 격리 환경 사용 | 오픈소스 실행 환경을 격리하는가? | + +**업데이트/취약점 관리(3.3.1)** + +소프트웨어 구성 분석(Software Composition Analysis, SCA) 도구를 사용하여 의존성을 관리합니다. CVE(Common Vulnerabilities and Exposures) 데이터베이스를 정기적으로 확인합니다. + +```bash +# Python 프로젝트의 취약점 스캔 예시 +pip install safety +safety check --full-report +``` + +**소스코드 검토(3.3.2)** + +Hugging Face에서 모델을 다운로드할 때 `pickle` 파일의 악성 코드 삽입 여부를 확인합니다. `safetensors` 형식을 우선 사용합니다. `pickle` 형식은 임의 코드 실행이 가능하므로 위험합니다. + +> **WARNING** +> PyPI, npm 등 패키지 저장소에서 타이포스쿼팅(Typosquatting) 공격이 증가하고 있습니다. `pytorch`가 아닌 `pytorh`같은 유사 이름의 악성 패키지에 주의하세요. 패키지 설치 전 이름과 게시자를 반드시 확인합니다. + +**격리 환경 사용(3.3.3)** + +Docker 컨테이너나 가상환경(venv, conda)으로 개발 환경을 격리합니다. 프로젝트별로 독립된 의존성을 관리합니다. + +```bash +# 격리 환경 생성 예시 +python -m venv ai-project-env +source ai-project-env/bin/activate # Linux/Mac +``` + +### 24-3-4. LLM 보안 + +대규모 언어 모델(LLM)을 활용한 개발 시 추가로 점검해야 할 8가지 항목입니다. OWASP Top 10 for LLM Applications(23-2-3절 참조)과 연계됩니다. + +[표 24-9] LLM 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 3.4.1 | 민감 정보 보호 | LLM 입출력에서 민감 정보 노출을 방지하는가? | +| 3.4.2 | 서비스 거부(DoS) 방어 | LLM 서비스에 대한 DoS 공격을 방어하는가? | +| 3.4.3 | API 보안 | LLM API의 인증/인가를 적절히 구현했는가? | +| 3.4.4 | 인터페이스 보안 | LLM 연동 인터페이스의 보안을 확보했는가? | +| 3.4.5 | 시큐어 코딩 | LLM이 생성한 코드의 보안을 검증하는가? | +| 3.4.6 | 출력 모니터링 | LLM 출력에서 유해/부적절한 콘텐츠를 필터링하는가? | +| 3.4.7 | 프롬프트 주입 방어 | 간접 프롬프트 주입을 포함한 방어 조치를 적용하는가? | +| 3.4.8 | 벡터/임베딩 보안 | 벡터 데이터베이스와 임베딩 데이터의 보안을 확보했는가? | + +**민감 정보 보호(3.4.1)** + +LLM에 전달하는 프롬프트에 API 키, 비밀번호, 개인정보를 포함하지 않습니다. 출력 결과에 민감 정보가 포함되는지 자동 검사합니다. + +- 입력 단계: 정규식 기반 민감 정보 탐지 +- 출력 단계: PII(Personally Identifiable Information) 필터링 + +> **TIP** +> 바이브코더가 AI 코딩 어시스턴트에 코드를 붙여넣을 때 `.env` 파일이나 API 키가 포함되지 않도록 주의하세요. `.gitignore`에 등록된 파일은 AI에게도 전달하지 마세요. + +**서비스 거부(DoS) 방어(3.4.2)** + +LLM 서비스에 대한 자원 소진 공격을 방어합니다. 요청당 토큰 수 제한, 동시 요청 수 제한, 타임아웃 설정을 적용합니다. 10장의 서비스 관리 항목을 참조하세요. + +**API 보안(3.4.3)** + +LLM API에 OAuth 2.0 또는 API 키 기반 인증을 적용합니다. 5장과 6장의 웹 서버 보안 항목을 참조하세요. + +**인터페이스 보안(3.4.4)** + +LLM과 연동하는 플러그인, 도구, 외부 서비스의 보안을 검증합니다. MCP(Model Context Protocol) 서버 연동 시 신뢰할 수 있는 소스만 허용합니다. + +**시큐어 코딩(3.4.5)** + +AI가 생성한 코드를 그대로 사용하지 않습니다. 정적 분석(Static Analysis) 도구로 보안 취약점을 검사합니다. SQL 인젝션, XSS, 경로 순회 등 기존 웹 보안 취약점(5장, 6장 참조)을 우선 점검합니다. + +``` +[AI 코드 생성] → [코드 리뷰] → [정적 분석] → [테스트] → [배포] +``` + +> **WARNING** +> AI 코딩 어시스턴트가 생성한 코드에는 보안 취약점이 포함될 수 있습니다. 하드코딩된 비밀번호, 안전하지 않은 역직렬화, 불충분한 입력 검증이 대표적입니다. 생성된 코드는 반드시 보안 검토를 거쳐야 합니다. + +**출력 모니터링(3.4.6)** + +LLM 출력에서 유해 콘텐츠, 편향된 내용, 허위 정보를 필터링합니다. 안전 분류기(Safety Classifier)를 출력 파이프라인에 적용합니다. + +**프롬프트 주입 방어(3.4.7)** + +RAG(Retrieval-Augmented Generation) 시스템에서 외부 문서에 삽입된 악성 프롬프트를 탐지합니다. 검색된 문서의 내용을 별도 컨텍스트로 격리합니다. 3.2.1항과 연계하여 다중 레이어 방어를 적용합니다. + +**벡터/임베딩 보안(3.4.8)** + +벡터 데이터베이스(Pinecone, Weaviate, ChromaDB 등)에 대한 접근 제어를 적용합니다. 임베딩 데이터에서 원본 텍스트를 역추출하는 공격을 방어합니다. 7장의 DB 보안 항목을 참조하세요. + +--- + +## 24-4. 모델 배포 — 배포보안, API보안 + +개발된 모델을 운영 환경에 배포하는 단계입니다. 배포 과정의 보안 공백은 공격자에게 침투 경로를 제공합니다. + +### 24-4-1. 모델파일/배포 환경 보호 + +[표 24-10] 모델 배포 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 4.1.1 | 취약점 스캔 | 배포 환경(컨테이너, 서버)의 취약점을 스캔하는가? | +| 4.1.2 | 암호화 저장/전송 | 모델 파일을 암호화하여 저장하고 전송하는가? | +| 4.1.3 | 인프라 보안 | 배포 인프라(서버, 컨테이너, 클라우드)의 보안을 확보했는가? | + +**취약점 스캔(4.1.1)** + +배포 전 컨테이너 이미지를 스캔합니다. Trivy, Grype 등의 도구로 알려진 취약점을 탐지합니다. CI/CD 파이프라인에 자동 스캔을 통합합니다. + +```bash +# Docker 이미지 취약점 스캔 예시 +trivy image my-ai-model:latest +``` + +**암호화 저장/전송(4.1.2)** + +모델 파일(`.pt`, `.onnx`, `.safetensors` 등)을 암호화하여 저장합니다. 모델 전송 시 TLS를 적용합니다. 모델 파일의 해시값을 기록하여 무결성을 검증합니다. + +**인프라 보안(4.1.3)** + +| 배포 환경 | 점검 사항 | 참고 | +|-----------|-----------|------| +| 온프레미스 서버 | OS 보안, 네트워크 분리 | 1~3장 참조 | +| Docker/Kubernetes | 컨테이너 보안, 네트워크 정책 | 8장 참조 | +| 클라우드(AWS/GCP/Azure) | IAM, 보안 그룹, VPC | 11장 참조 | +| 엣지 디바이스 | 펌웨어 보안, 물리적 보안 | 12장 참조 | + +### 24-4-2. API/인터페이스 보안 + +[표 24-11] API 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 4.2.1 | 인증/인가 | API에 적절한 인증/인가 메커니즘을 적용했는가? | +| 4.2.2 | 입력 검증 | API 입력값에 대한 유효성 검증을 수행하는가? | +| 4.2.3 | 출력 필터링 | API 응답에서 민감 정보를 필터링하는가? | +| 4.2.4 | 접근 제어 | API 접근을 IP, 사용자, 역할 기반으로 제어하는가? | +| 4.2.5 | 로깅/감사 | API 호출 기록을 저장하고 감사하는가? | + +**인증/인가(4.2.1)** + +모든 API 엔드포인트에 인증을 적용합니다. API 키는 환경변수로 관리하고, 코드에 하드코딩하지 않습니다. OAuth 2.0이나 JWT(JSON Web Token)를 권장합니다. + +**입력 검증(4.2.2)** + +API 입력값의 크기, 형식, 범위를 검증합니다. 악의적 프롬프트를 필터링합니다. 5장의 웹 서버 입력값 검증 항목(W-01 이후)을 참조하세요. + +**출력 필터링(4.2.3)** + +API 응답에 모델 내부 정보(가중치, 구조, 학습 데이터)가 노출되지 않도록 합니다. 에러 메시지에서 시스템 정보를 제거합니다. + +**접근 제어(4.2.4)** + +IP 화이트리스트, API 키별 권한 차등, 역할 기반 접근 제어(Role-Based Access Control, RBAC)를 적용합니다. + +**로깅/감사(4.2.5)** + +모든 API 호출의 시간, 요청자, 요청 내용, 응답 코드를 기록합니다. 비정상적 호출 패턴을 탐지합니다. 9장의 로그 관리 항목을 참조하세요. + +> **TIP** +> 서버 운용 개발자는 API 게이트웨이(Kong, AWS API Gateway 등)를 도입하여 인증, Rate Limiting, 로깅을 중앙에서 관리하세요. 개별 마이크로서비스에서 보안 로직을 반복 구현하는 것보다 효율적입니다. + +--- + +## 24-5. 모니터링 및 유지보수 — 운영보안, 사후관리 + +배포 이후가 보안의 시작입니다. 실시간 모니터링과 정기적인 업데이트가 필수입니다. + +### 24-5-1. 실시간 모니터링 + +[표 24-12] 모니터링 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 5.1.1 | 모델 성능 모니터링 | 모델의 정확도, 지연시간 등 성능 지표를 실시간 추적하는가? | +| 5.1.2 | 이상 탐지 | 모델 입출력의 이상 패턴을 탐지하는가? | +| 5.1.3 | 드리프트 감지 | 데이터 드리프트(Data Drift)와 모델 드리프트를 감지하는가? | +| 5.1.4 | 보안 이벤트 모니터링 | 공격 시도, 비인가 접근 등 보안 이벤트를 모니터링하는가? | +| 5.1.5 | 감사 로그 관리 | AI 시스템의 모든 활동에 대한 감사 로그를 관리하는가? | + +**모델 성능 모니터링(5.1.1)** + +모델의 정확도가 임계치 이하로 떨어지면 알림을 발생시킵니다. 성능 저하는 데이터 오염이나 공격의 징후일 수 있습니다. + +**이상 탐지(5.1.2)** + +입력 데이터의 분포가 학습 데이터와 크게 다른 경우를 탐지합니다. 비정상적으로 긴 입력, 반복적 패턴, 알려진 공격 시그니처를 모니터링합니다. + +**드리프트 감지(5.1.3)** + +시간이 지남에 따라 입력 데이터의 분포가 변화(Data Drift)하면 모델 재학습이 필요합니다. 드리프트를 방치하면 모델 성능이 저하되고 보안 취약점이 발생할 수 있습니다. + +**보안 이벤트 모니터링(5.1.4)** + +SIEM(Security Information and Event Management) 시스템과 연동하여 보안 이벤트를 중앙에서 관리합니다. 9장의 로그 관리 항목을 참조하세요. + +**감사 로그 관리(5.1.5)** + +AI 모델의 판단 과정, 입출력 데이터, 설정 변경 이력을 기록합니다. 규제 준수와 사고 조사를 위해 최소 1년 이상 보관합니다. + +> **TIP** +> 정부과제 개발자는 감사 로그 보관 기간을 과제 계약 조건과 관련 법령에 맞추어 설정하세요. 공공기관의 경우 3~5년 보관이 일반적입니다. + +### 24-5-2. 보안 패치/업데이트 관리 + +[표 24-13] 보안 패치 관리 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 5.2.1 | 정기 업데이트 | AI 프레임워크와 의존성 라이브러리를 정기적으로 업데이트하는가? | +| 5.2.2 | 취약점 대응 | 알려진 취약점(CVE)에 대해 신속하게 패치를 적용하는가? | +| 5.2.3 | 변경 관리 | 모델 업데이트 시 변경 영향을 평가하고 롤백 계획을 수립하는가? | + +**정기 업데이트(5.2.1)** + +PyTorch, TensorFlow, CUDA 등 주요 프레임워크의 보안 업데이트를 월 1회 이상 확인합니다. `dependabot`이나 `renovate`를 사용하여 자동화합니다. + +**취약점 대응(5.2.2)** + +CVSS(Common Vulnerability Scoring System) 7.0 이상의 취약점은 72시간 이내에 패치를 적용합니다. 즉시 패치가 불가능하면 임시 완화 조치(Workaround)를 적용합니다. + +**변경 관리(5.2.3)** + +모델 업데이트 시 스테이징 환경에서 충분히 테스트합니다. A/B 테스트나 카나리 배포(Canary Deployment)로 안전하게 전환합니다. 문제 발생 시 즉시 이전 버전으로 롤백할 수 있도록 합니다. + +> **WARNING** +> AI 프레임워크 업데이트 시 모델 호환성이 깨질 수 있습니다. 업데이트 전에 반드시 스테이징 환경에서 모델 동작을 검증하세요. 특히 PyTorch 메이저 버전 업데이트 시 주의가 필요합니다. + +--- + +## 24-6. 파기 — 파기 시 보안 + +AI 서비스를 종료하거나 모델을 폐기할 때의 보안 절차입니다. 파기 단계를 소홀히 하면 폐기된 모델에서 학습 데이터가 복원될 수 있습니다. 23-1-3절의 데이터 추출 공격 사례를 참고하세요. + +### 24-6-1. 파기 시 보안 + +[표 24-14] 파기 보안 점검 항목 + +| 번호 | 점검 항목 | 설명 | +|------|-----------|------| +| 6.1.1 | 모델 파일 삭제 | 모델 파일을 복구 불가능한 방식으로 완전 삭제하는가? | +| 6.1.2 | 데이터 삭제 | 학습 데이터, 중간 산출물, 로그를 완전 삭제하는가? | +| 6.1.3 | API 비활성화 | 폐기된 모델의 API 엔드포인트를 완전히 비활성화했는가? | + +**모델 파일 삭제(6.1.1)** + +모델 파일(가중치, 설정, 체크포인트)을 안전하게 삭제합니다. 단순 `rm` 명령이 아닌, 디스크 덮어쓰기 방식을 사용합니다. + +| 환경 | 삭제 방법 | +|------|-----------| +| 로컬 서버 | `shred -vfz -n 5 model.pt` (Linux) | +| 클라우드 스토리지 | 객체 삭제 후 버전 관리 비활성화 | +| GPU 메모리 | 프로세스 종료 후 메모리 초기화 | + +클라우드 환경에서는 스냅샷, 백업, CDN 캐시에 모델 파일이 남아있을 수 있습니다. 모든 복사본을 추적하여 삭제합니다. + +**데이터 삭제(6.1.2)** + +학습 데이터뿐 아니라 다음 항목도 삭제 대상입니다. + +- 전처리된 데이터셋 +- 학습 중간 체크포인트 +- 텐서보드 로그 +- 실험 기록(MLflow, W&B 등) +- 벡터 데이터베이스의 임베딩 데이터 + +개인정보가 포함된 데이터는 개인정보 보호법에 따라 파기 기록을 남깁니다. + +**API 비활성화(6.1.3)** + +폐기된 모델의 API 엔드포인트를 즉시 비활성화합니다. DNS 레코드를 삭제하고, 로드밸런서에서 라우팅을 제거합니다. API 키를 폐기(Revoke)합니다. + +비활성화 후 일정 기간 동안 해당 엔드포인트로의 접근 시도를 모니터링합니다. 비인가 접근 시도가 있으면 보안팀에 알립니다. + +> **WARNING** +> 클라우드 환경에서 모델 파일 삭제 시 S3 버전 관리, EBS 스냅샷 등에 이전 버전이 남아있을 수 있습니다. 모든 스토리지의 수명주기 정책(Lifecycle Policy)을 확인하세요. + +--- + +## 24장 요약 체크리스트 + +다음 체크리스트로 AI 개발 보안을 종합 점검합니다. + +[표 24-15] AI 개발자 보안 종합 체크리스트 + +| 생명주기 | 점검 항목 | 확인 | +|----------|-----------|:----:| +| **1. 계획 및 설계** | AI 보안 전담 조직 또는 담당자를 지정했는가? | □ | +| | 보안 정책과 절차를 문서화했는가? | □ | +| | AI 시스템의 위험요소를 분석하고 위협 모델링을 수행했는가? | □ | +| | 위험 완화 계획을 수립하고 담당자를 지정했는가? | □ | +| **2. 데이터** | 데이터 수집 시 안전한 프로토콜(TLS 1.2+)을 사용하는가? | □ | +| | 학습 데이터를 암호화하여 저장하는가? | □ | +| | 데이터 무결성 검증 절차를 적용하는가? | □ | +| | 데이터 오염/유출 방어 조치를 적용하는가? | □ | +| **3. 모델 개발** | 학습 환경에 접근 제어를 적용하는가? | □ | +| | 프롬프트 주입 방어를 구현했는가? | □ | +| | 적대적 예제/오염/추출 공격 방어를 적용하는가? | □ | +| | 오픈소스 라이브러리의 취약점을 관리하는가? | □ | +| | LLM 입출력에서 민감 정보 노출을 방지하는가? | □ | +| | AI 생성 코드에 대한 보안 검토를 수행하는가? | □ | +| **4. 모델 배포** | 배포 환경의 취약점을 스캔했는가? | □ | +| | 모델 파일을 암호화하여 전송/저장하는가? | □ | +| | API에 인증/인가/접근 제어를 적용했는가? | □ | +| | API 호출 로그를 기록하고 감사하는가? | □ | +| **5. 모니터링** | 모델 성능과 이상 패턴을 실시간 모니터링하는가? | □ | +| | 데이터 드리프트를 감지하는가? | □ | +| | AI 프레임워크와 의존성을 정기적으로 업데이트하는가? | □ | +| | 모델 업데이트 시 롤백 계획을 수립하는가? | □ | +| **6. 파기** | 모델 파일을 복구 불가능한 방식으로 삭제하는가? | □ | +| | 학습 데이터와 중간 산출물을 완전 삭제하는가? | □ | +| | 폐기된 모델의 API를 비활성화했는가? | □ | + +> **TIP** +> 이 체크리스트를 프로젝트 시작 시, 배포 전, 서비스 종료 시 각각 활용하세요. 정부과제 개발자는 과제 최종 보고서에 이 체크리스트의 점검 결과를 포함하면 보안 요구사항 충족을 증빙할 수 있습니다. + +--- + +*다음 장(25장)에서는 AI 서비스 제공자를 위한 보안 요구사항을 다룹니다.* diff --git a/authorkit/drafts/KESE-KIT-KO/ch25-ai-provider-security/section-new.md b/authorkit/drafts/KESE-KIT-KO/ch25-ai-provider-security/section-new.md new file mode 100644 index 0000000..5227ff2 --- /dev/null +++ b/authorkit/drafts/KESE-KIT-KO/ch25-ai-provider-security/section-new.md @@ -0,0 +1,482 @@ +# 25장. AI 서비스 제공자를 위한 보안 점검 + +AI 서비스 제공자(Service Provider)는 AI 모델을 직접 개발하거나 외부에서 도입하여 최종 사용자에게 서비스를 제공합니다. 24장에서 다룬 AI 개발자 보안과 달리, 서비스 제공자는 **서비스 수준 협약(Service Level Agreement, SLA)** 관리와 **생성형 AI(Generative AI, GenAI)/예측형 AI(Predictive AI, PredAI) 구분**이 핵심입니다. + +이 장에서는 KISA의 「인공지능(AI) 보안 안내서」가 제시하는 서비스 제공자 보안 프레임워크를 정리합니다. 서비스 기획부터 파기까지 6단계 생명주기를 기준으로, GenAI와 PredAI 각각의 보안 요구사항을 비교합니다. + +> **TIP** +> 서비스 제공자와 개발자의 보안 프레임워크는 구조가 유사합니다. 공통 항목은 24장 참조를 안내하고, 이 장에서는 서비스 제공자 고유 항목에 집중합니다. + +--- + +## 25-1. 서비스 제공자 보안 프레임워크 + +서비스 제공자의 AI 보안 생명주기는 6단계로 구성됩니다. 24장의 개발자 생명주기와 단계 이름은 같지만, 세부 점검 항목이 다릅니다. + +### 25-1-1. 6단계 생명주기 + +| 단계 | 핵심 활동 | 서비스 제공자 특화 요소 | +|------|-----------|------------------------| +| 1. 서비스 기획 및 설계 | 거버넌스, 위험관리, SLA | SLA 관리 | +| 2. 서비스 개발 및 구축 | 코드 점검, 모델/데이터/API 보안 | API Rate Limiting | +| 3. 서비스 제공 및 운영 | 로그 관리, 운영 데이터 보안 | 접속 로그 암호화 | +| 4. 서비스 유지보수 | 모니터링, 성능/장애 관리 | DDoS 방어, HA | +| 5. 환류(Feedback) 및 개선 | 사용자 피드백 관리 | 입력 검증, 감사 로그 | +| 6. 파기 | 데이터/모델 안전 폐기 | 24장과 공통 | + +> **WARNING** +> 서비스 제공자는 개발자와 달리 최종 사용자와 직접 접점을 갖습니다. 보안 사고 발생 시 법적 책임 소재가 서비스 제공자에게 있으므로, SLA에 보안 요구사항을 반드시 포함해야 합니다. + +### 25-1-2. GenAI와 PredAI의 구분 + +서비스 제공자 보안에서 가장 중요한 축은 GenAI와 PredAI의 구분입니다. 두 유형은 위협 벡터와 보안 요구사항이 다릅니다. + +| 구분 | GenAI (생성형 AI) | PredAI (예측형 AI) | +|------|-------------------|-------------------| +| 대표 서비스 | 챗봇, 이미지 생성, 코드 생성 | 이상 탐지, 수요 예측, 추천 | +| 주요 위협 | 프롬프트 주입, 환각(Hallucination) | 적대적 입력, 모델 드리프트 | +| 입력 형태 | 자유 형식 텍스트/이미지 | 정형 데이터, 센서 데이터 | +| 출력 형태 | 텍스트, 이미지, 코드 등 | 분류값, 확률, 수치 | +| 보안 초점 | 출력 필터링, 콘텐츠 안전성 | 입력 검증, 모델 무결성 | + +> **TIP** +> 하나의 서비스가 GenAI와 PredAI를 동시에 포함할 수 있습니다. 예를 들어, 고객 이탈 예측(PredAI) 결과를 바탕으로 맞춤 메시지를 생성(GenAI)하는 마케팅 서비스가 있습니다. 이 경우 두 유형의 보안 요구사항을 모두 적용합니다. + +### 25-1-3. 서비스 기획 및 설계 단계 + +이 단계에서는 거버넌스, 위험관리, SLA 관리를 수행합니다. + +**거버넌스(공통사항)** + +AI 보안 정책을 수립하고 조직 내 역할과 책임을 정의합니다. 보안 책임자를 지정하고, 정기 감사 체계를 구축합니다. 상세 내용은 24-1절 참조합니다. + +**위험관리(공통사항)** + +AI 시스템 고유의 위험을 식별하고 평가합니다. 23-1절에서 다룬 위협 유형별로 위험도를 산정합니다. 상세 내용은 24-1절 참조합니다. + +**SLA 관리(서비스 제공자 특화)** + +SLA 관리는 서비스 제공자만의 고유 점검 항목입니다. 다음 세 가지를 반드시 포함합니다. + +1. **SLA에 보안 요구사항 포함**: 서비스 가용성, 데이터 보호 수준, 침해 통보 시한을 SLA에 명시합니다. +2. **보안 침해 대응 계획**: 침해 발생 시 대응 절차, 통보 체계, 복구 목표 시간(Recovery Time Objective, RTO)을 정의합니다. +3. **책임 소재 명확화**: 서비스 제공자와 이용자 간 보안 책임 범위를 계약에 명시합니다. + +| SLA 보안 항목 | GenAI 적용 예시 | PredAI 적용 예시 | +|---------------|-----------------|-----------------| +| 가용성 목표 | 챗봇 서비스 99.9% 가동률 | 실시간 예측 API 99.95% 가동률 | +| 데이터 보호 | 대화 내용 30일 후 자동 삭제 | 입력 데이터 암호화 저장 | +| 침해 통보 | 프롬프트 주입 탐지 시 24시간 내 통보 | 모델 오염 감지 시 12시간 내 통보 | +| 책임 범위 | 생성 콘텐츠 정확성 면책 조항 | 예측 결과 오류에 대한 책임 한도 | + +> **WARNING** +> SLA에 보안 조항이 없으면 침해 발생 시 책임 분쟁이 발생합니다. 특히 GenAI 서비스에서 생성된 콘텐츠의 정확성과 안전성에 대한 면책 조항은 반드시 포함해야 합니다. + +--- + +## 25-2. Generative AI 서비스 보안 요구사항 + +GenAI 서비스는 사용자의 자유 형식 입력을 받아 콘텐츠를 생성합니다. 챗봇 서비스, 이미지 생성 API, AI 코딩 어시스턴트가 대표적입니다. 입력과 출력 모두에 보안 위험이 존재합니다. + +### 25-2-1. 서비스 개발 및 구축 + +#### 코드 취약점 점검 + +정적 분석(Static Application Security Testing, SAST)과 동적 분석(Dynamic Application Security Testing, DAST)을 수행합니다. GenAI 서비스에서는 다음 항목을 추가로 점검합니다. + +- **프롬프트 처리 코드**: 시스템 프롬프트 노출 방지 로직 검증 +- **출력 필터링 코드**: 유해 콘텐츠 필터의 우회 가능성 점검 +- **스트리밍 응답 처리**: 토큰 단위 출력 시 필터 적용 여부 확인 + +> **TIP** +> 코드 리뷰 시 프롬프트 템플릿 파일도 점검 대상에 포함합니다. 하드코딩된 시스템 프롬프트가 소스 코드에 노출되지 않도록 환경 변수나 비밀 관리 서비스를 사용합니다. + +#### 모델 환경 보안 + +| 점검 항목 | GenAI 세부 요구사항 | +|-----------|-------------------| +| 접근 제어 | 모델 가중치 파일에 대한 역할 기반 접근 제어(RBAC) | +| 무결성 검증 | 모델 체크섬 검증, 서명된 모델만 배포 허용 | +| 모니터링 | 모델 호출 빈도, 응답 시간, 오류율 실시간 모니터링 | +| GPU 자원 관리 | 단일 사용자의 과도한 자원 점유 방지 | + +#### 데이터 보안 + +GenAI 서비스의 데이터 보안은 학습 데이터와 실시간 입출력 데이터를 모두 포함합니다. + +- **적대적 공격 방어**: 프롬프트 주입 탐지 및 차단 규칙 적용 +- **데이터 무결성**: RAG 파이프라인의 외부 데이터 소스 검증 +- **기밀성 보호**: 사용자 대화 기록 암호화 저장 +- **전송 보안**: TLS 1.3 이상 적용 +- **책임 추적성**: 모든 입출력에 대한 감사 로그 기록 + +> **WARNING** +> RAG 기반 GenAI 서비스에서는 외부 문서에 삽입된 간접 프롬프트 주입(23-1-1절 참조)에 특히 주의합니다. 외부 데이터 소스의 무결성을 검증하는 파이프라인을 구축해야 합니다. + +#### API/인터페이스 보안 + +GenAI 서비스 API에 대한 보안 요구사항입니다. + +| 점검 항목 | 요구사항 | 구현 예시 | +|-----------|---------|-----------| +| 암호화 | 전송 구간 암호화 | TLS 1.3, mTLS | +| 인증 | API 키 또는 OAuth 2.0 | Bearer 토큰, JWT | +| Rate Limiting | 요청 빈도 제한 | 분당 60회, 일 10,000회 | +| 입력 검증 | 최대 입력 길이 제한 | 프롬프트 4,096 토큰 제한 | +| 출력 필터링 | 유해 콘텐츠 차단 | 안전성 분류기 적용 | + +``` +[GenAI API 보안 아키텍처] + +사용자 요청 GenAI 서비스 + | | + v v ++----------+ TLS 1.3 +-------------+ +| 클라이언트 | -----------> | API Gateway | ++----------+ +-------------+ + | + +-------------+-------------+ + | | | + v v v + +---------+ +---------+ +----------+ + | 인증/인가 | | Rate | | 입력 | + | 모듈 | | Limiter | | 검증기 | + +---------+ +---------+ +----------+ + | + v + +------------+ + | AI 모델 | + | 추론 엔진 | + +------------+ + | + v + +------------+ + | 출력 | + | 필터링 | + +------------+ + | + v + 응답 반환 +``` + +### 25-2-2. 서비스 제공 및 운영 + +GenAI 서비스 운영 단계에서는 로그와 운영 데이터 보안이 핵심입니다. + +**접속 로그 관리** + +- 사용자 요청과 모델 응답을 포함한 접속 로그를 기록합니다. +- 로그에 민감 정보(개인정보, 비밀번호 등)가 포함되지 않도록 마스킹 처리합니다. +- 로그 저장소에 대한 접근 제어를 적용합니다. + +**로그 암호화** + +- 저장 시 AES-256 이상 암호화를 적용합니다. +- 로그 전송 시 TLS 1.3 이상을 사용합니다. +- 암호화 키를 별도의 키 관리 서비스(Key Management Service, KMS)에서 관리합니다. + +**GenAI 특화 로그 항목** + +| 로그 항목 | 목적 | 보존 기간 예시 | +|-----------|------|---------------| +| 프롬프트 주입 탐지 로그 | 공격 시도 분석 | 1년 | +| 유해 콘텐츠 필터링 로그 | 필터 성능 평가 | 6개월 | +| 토큰 사용량 로그 | 비용 관리, 이상 탐지 | 3개월 | +| 모델 버전 변경 로그 | 장애 원인 추적 | 영구 | + +### 25-2-3. 서비스 유지보수 + +#### 모니터링 및 업데이트 + +- **사용자 행동 로그 분석**: 비정상 사용 패턴을 탐지합니다. 대량 프롬프트 전송, 시스템 프롬프트 탈취 시도 등을 식별합니다. +- **오류 탐지**: 모델 응답 오류율을 모니터링합니다. 환각(Hallucination) 빈도가 임계치를 초과하면 알림을 발생합니다. +- **보안 패치 적용**: 프레임워크(PyTorch, TensorFlow 등)와 의존성 라이브러리의 보안 패치를 적시에 적용합니다. + +#### 성능 및 장애 관리 + +GenAI 서비스는 추론에 대량의 GPU 자원을 사용합니다. 장애 관리 항목은 다음과 같습니다. + +| 점검 항목 | 요구사항 | +|-----------|---------| +| 자동 복구 | 모델 서빙 인스턴스 자동 재시작 | +| 모델 드리프트 감지 | 응답 품질 저하 시 자동 알림 | +| 고가용성(High Availability, HA) | 다중 GPU 인스턴스 로드 밸런싱 | +| 백업 | 모델 가중치 및 설정 파일 정기 백업 | +| DDoS 방어 | 대량 요청 차단, CDN 활용 | + +> **TIP** +> GenAI 서비스에서 DDoS 공격은 단순 트래픽 폭주 외에 **고비용 추론 유발 공격**도 포함합니다. 매우 긴 프롬프트나 복잡한 생성 요청을 대량 전송하여 GPU 자원을 고갈시키는 공격입니다. 입력 토큰 수 제한과 요청별 타임아웃 설정이 필수입니다. + +--- + +## 25-3. Predictive AI 서비스 보안 요구사항 + +PredAI 서비스는 정형 데이터를 입력받아 분류, 회귀, 이상 탐지 등의 예측 결과를 제공합니다. 금융 사기 탐지, 설비 고장 예측, 상품 추천 시스템이 대표적입니다. + +### 25-3-1. 서비스 개발 및 구축 + +#### 코드 취약점 점검 + +PredAI 서비스의 코드 점검은 데이터 파이프라인에 초점을 맞춥니다. + +- **데이터 전처리 코드**: 입력 값 범위 검증, 타입 검사 로직 확인 +- **특성 엔지니어링(Feature Engineering) 코드**: 특성 추출 과정에서 민감 정보 노출 여부 점검 +- **모델 서빙 코드**: 입력/출력 직렬화 과정의 취약점 점검 + +#### 모델 환경 보안 + +| 점검 항목 | PredAI 세부 요구사항 | +|-----------|---------------------| +| 접근 제어 | 모델 파일 및 학습 데이터셋에 대한 RBAC | +| 무결성 검증 | 모델 버전 관리, 학습 데이터 해시 검증 | +| 모니터링 | 예측 정확도, 입력 분포 변화 모니터링 | +| 자원 관리 | 배치 추론과 실시간 추론의 자원 분리 | + +#### 데이터 보안 + +PredAI 서비스의 데이터 보안은 학습 데이터의 무결성이 핵심입니다. + +- **적대적 공격 방어**: 입력 데이터의 이상치 탐지, 적대적 입력 필터링 +- **데이터 무결성**: 학습 데이터 변조 탐지, 데이터 출처 검증 +- **기밀성 보호**: 금융 데이터, 의료 데이터 등 민감 입력 데이터 암호화 +- **전송 보안**: API 호출 시 TLS 1.3 이상 적용 +- **책임 추적성**: 예측 결과와 입력 데이터의 연결 추적 가능 + +> **WARNING** +> PredAI 서비스에서 학습 데이터 오염(23-1-3절 참조)은 탐지가 어렵습니다. 오염된 모델이 장기간 운영될 수 있으며, 피해 규모가 클 수 있습니다. 학습 데이터 무결성 검증을 자동화해야 합니다. + +#### API/인터페이스 보안 + +PredAI 서비스 API는 GenAI와 비교하여 다음과 같은 차이가 있습니다. + +| 점검 항목 | GenAI 서비스 | PredAI 서비스 | +|-----------|-------------|---------------| +| 입력 검증 | 프롬프트 길이 제한 | 데이터 스키마 검증 | +| 출력 필터링 | 유해 콘텐츠 차단 | 예측값 범위 검증 | +| Rate Limiting | 토큰 기반 과금 연동 | 요청 건수 기반 제한 | +| 배치 처리 | 해당 없음 | 대량 예측 요청 큐 관리 | +| 모델 버전 관리 | 프롬프트 버전 관리 | A/B 테스트 지원 | + +``` +[PredAI API 보안 아키텍처] + +클라이언트 요청 PredAI 서비스 + | | + v v ++----------+ TLS 1.3 +-------------+ +| 클라이언트 | -----------> | API Gateway | ++----------+ +-------------+ + | + +-------------+-------------+ + | | | + v v v + +---------+ +---------+ +----------+ + | 인증/인가 | | Rate | | 스키마 | + | 모듈 | | Limiter | | 검증기 | + +---------+ +---------+ +----------+ + | + +-------------+-------------+ + | | + v v + +------------+ +-------------+ + | 실시간 추론 | | 배치 추론 | + | 엔진 | | 큐 | + +------------+ +-------------+ + | | + +-------------+-------------+ + | + v + +------------+ + | 결과 검증 | + | 범위 확인 | + +------------+ + | + v + 응답 반환 +``` + +### 25-3-2. 서비스 제공 및 운영 + +PredAI 서비스 운영 단계의 로그 관리는 예측 정확도 추적에 초점을 맞춥니다. + +**접속 로그 관리** + +- 예측 요청과 결과를 포함한 접속 로그를 기록합니다. +- 입력 데이터에 포함된 개인 식별 정보(Personally Identifiable Information, PII)를 마스킹합니다. +- 예측 결과의 정확도를 사후 검증하기 위한 참값(Ground Truth) 로그를 별도 관리합니다. + +**PredAI 특화 로그 항목** + +| 로그 항목 | 목적 | 보존 기간 예시 | +|-----------|------|---------------| +| 입력 분포 변화 로그 | 데이터 드리프트 탐지 | 1년 | +| 예측 정확도 로그 | 모델 성능 추적 | 1년 | +| 이상 입력 탐지 로그 | 적대적 공격 분석 | 6개월 | +| 모델 재학습 이력 | 모델 이력 추적 | 영구 | + +### 25-3-3. 서비스 유지보수 + +#### 모니터링 및 업데이트 + +- **데이터 드리프트(Data Drift) 탐지**: 입력 데이터 분포가 학습 시점과 달라지면 알림을 발생합니다. +- **모델 드리프트(Model Drift) 탐지**: 예측 정확도가 지속적으로 하락하면 재학습을 트리거합니다. +- **보안 패치 적용**: 24장과 동일하게 프레임워크 및 의존성 보안 패치를 적시에 적용합니다. + +#### 성능 및 장애 관리 + +PredAI 서비스는 실시간 예측과 배치 예측이 공존하는 경우가 많습니다. + +| 점검 항목 | 요구사항 | +|-----------|---------| +| 자동 복구 | 실시간 추론 서버 자동 재시작, 배치 작업 자동 재실행 | +| 모델 드리프트 대응 | 성능 저하 시 이전 모델로 자동 롤백(Rollback) | +| 재학습 파이프라인 | 주기적 또는 이벤트 기반 자동 재학습 | +| 고가용성(HA) | 다중 인스턴스 배포, 로드 밸런싱 | +| 백업 | 모델 파일, 학습 데이터, 설정 파일 정기 백업 | +| DDoS 방어 | 대량 예측 요청 차단, 큐 기반 부하 분산 | + +> **TIP** +> PredAI 서비스에서 모델 롤백은 단순히 이전 모델 파일로 교체하는 것이 아닙니다. 입력 데이터 전처리 파이프라인, 특성 스키마, API 응답 형식까지 함께 롤백해야 합니다. 모델 버전과 파이프라인 버전을 함께 관리하는 ML 버전 관리 도구를 도입합니다. + +### 25-3-4. GenAI vs PredAI 보안 요구사항 종합 비교 + +| 생명주기 단계 | 점검 항목 | GenAI | PredAI | +|--------------|-----------|-------|--------| +| 개발/구축 | 코드 점검 | 프롬프트 처리, 출력 필터링 | 데이터 파이프라인, 직렬화 | +| 개발/구축 | 모델 보안 | GPU 자원 관리 | 배치/실시간 자원 분리 | +| 개발/구축 | 데이터 보안 | RAG 데이터 검증 | 학습 데이터 무결성 | +| 개발/구축 | API 보안 | 토큰 기반 제한 | 스키마 검증, 큐 관리 | +| 운영 | 로그 관리 | 프롬프트/응답 로그 | 예측 정확도 로그 | +| 유지보수 | 모니터링 | 환각 빈도 모니터링 | 데이터/모델 드리프트 | +| 유지보수 | 장애 관리 | GPU 고갈 방어 | 모델 롤백, 재학습 | + +--- + +## 25-4. 사용자 피드백 및 개선 과정 보안 + +5단계 환류(Feedback) 및 개선은 서비스 품질 향상의 핵심 과정입니다. 동시에 새로운 보안 위협이 발생하는 지점이기도 합니다. + +### 25-4-1. 사용자 피드백 관리 + +사용자 피드백은 서비스 개선의 원료입니다. 그러나 피드백 채널 자체가 공격 벡터가 될 수 있습니다. + +**입력 검증** + +- 피드백 데이터에 대한 입력 검증을 수행합니다. +- GenAI 서비스: 피드백 텍스트에 포함된 프롬프트 주입 시도를 탐지합니다. +- PredAI 서비스: 피드백으로 제출된 참값(Ground Truth)의 정합성을 검증합니다. + +**데이터 무결성** + +- 피드백 데이터의 변조를 방지합니다. +- 피드백 수집 시점의 타임스탬프를 기록합니다. +- 피드백 데이터를 모델 재학습에 사용하기 전에 무결성을 검증합니다. + +> **WARNING** +> 피드백 데이터를 검증 없이 재학습에 사용하면 오염 공격(23-1-3절 참조)에 노출됩니다. 악의적인 사용자가 의도적으로 잘못된 피드백을 대량 제출하여 모델 성능을 저하시킬 수 있습니다. + +**최소 권한 원칙** + +- 피드백 수집 시스템은 최소한의 데이터만 수집합니다. +- 피드백 처리 시스템은 모델 재학습 파이프라인에 직접 접근하지 못하도록 격리합니다. +- 피드백 데이터에 대한 접근 권한을 역할별로 분리합니다. + +**감사 로그** + +- 피드백 수집, 처리, 활용의 전 과정을 감사 로그에 기록합니다. +- 누가 어떤 피드백을 모델 재학습에 반영했는지 추적할 수 있어야 합니다. + +### 25-4-2. GenAI 서비스 피드백 보안 + +GenAI 서비스에서는 다음과 같은 피드백 유형을 관리합니다. + +| 피드백 유형 | 보안 위험 | 대응 방안 | +|------------|-----------|-----------| +| 좋아요/싫어요 | 조작 가능성 낮음 | 비율 이상 탐지 | +| 텍스트 피드백 | 프롬프트 주입 가능 | 입력 검증, 필터링 | +| 응답 수정 제안 | 오염 데이터 주입 가능 | 전문가 검토 후 반영 | +| 신고(Report) | 허위 신고 가능 | 신고 패턴 분석 | + +> **TIP** +> 인간 피드백 기반 강화학습(Reinforcement Learning from Human Feedback, RLHF)에 사용자 피드백을 활용하는 경우, 피드백 품질 관리가 특히 중요합니다. 악의적 피드백이 RLHF 데이터에 포함되면 모델의 안전성이 저하될 수 있습니다. + +### 25-4-3. PredAI 서비스 피드백 보안 + +PredAI 서비스에서는 예측 결과에 대한 피드백이 모델 성능에 직접 영향을 미칩니다. + +| 피드백 유형 | 보안 위험 | 대응 방안 | +|------------|-----------|-----------| +| 예측 정확도 보고 | 허위 보고로 모델 왜곡 | 통계적 이상 탐지 | +| 참값 제출 | 오염 데이터 주입 | 다중 소스 교차 검증 | +| 오분류 신고 | 허위 신고 가능 | 신고 건수 임계치 적용 | +| 특성 중요도 피드백 | 모델 구조 유추 가능 | 피드백 범위 제한 | + +> **WARNING** +> PredAI 서비스에서 사용자가 제출한 참값(Ground Truth)을 검증 없이 재학습에 사용하면, 공격자가 모델을 특정 방향으로 편향시킬 수 있습니다. 예를 들어, 사기 탐지 모델에서 정상 거래를 사기로 신고하면 오탐률이 증가합니다. + +### 25-4-4. 파기 단계 + +서비스 종료 시 데이터와 모델을 안전하게 폐기합니다. 이 단계는 24장의 개발자 파기 단계와 공통입니다. 24장 참조합니다. + +주요 점검 항목은 다음과 같습니다. + +- 학습 데이터, 사용자 대화 기록, 피드백 데이터를 복구 불가능하게 삭제합니다. +- 모델 가중치 파일을 안전하게 폐기합니다. +- 암호화 키를 폐기합니다. +- 파기 수행 내역을 감사 로그에 기록합니다. + +--- + +## 25장 요약 체크리스트 + +서비스 제공자가 AI 서비스를 운영할 때 확인해야 할 핵심 점검 항목입니다. + +### 서비스 기획 및 설계 + +- [ ] AI 보안 거버넌스를 수립했습니다 (24-1절 참조) +- [ ] AI 시스템 위험 평가를 수행했습니다 (24-1절 참조) +- [ ] SLA에 보안 요구사항(가용성, 데이터 보호, 침해 통보)을 포함했습니다 +- [ ] 보안 침해 대응 계획과 RTO를 정의했습니다 +- [ ] 서비스 제공자와 이용자 간 책임 소재를 명확히 했습니다 + +### 서비스 개발 및 구축 + +- [ ] 정적/동적 코드 분석을 수행했습니다 +- [ ] 모델 접근 제어와 무결성 검증을 적용했습니다 +- [ ] 데이터 암호화(저장/전송)를 적용했습니다 +- [ ] API 인증, Rate Limiting, 입력 검증을 적용했습니다 +- [ ] (GenAI) 프롬프트 주입 방어와 출력 필터링을 적용했습니다 +- [ ] (PredAI) 입력 스키마 검증과 이상치 탐지를 적용했습니다 + +### 서비스 제공 및 운영 + +- [ ] 접속 로그를 암호화하여 저장합니다 +- [ ] 로그에 민감 정보 마스킹을 적용했습니다 +- [ ] 로그 접근 제어를 적용했습니다 +- [ ] (GenAI) 프롬프트 주입 탐지 로그를 기록합니다 +- [ ] (PredAI) 예측 정확도와 입력 분포 변화를 기록합니다 + +### 서비스 유지보수 + +- [ ] 비정상 사용 패턴 모니터링을 운영합니다 +- [ ] 보안 패치를 적시에 적용합니다 +- [ ] 고가용성(HA) 및 자동 복구를 구성했습니다 +- [ ] DDoS 방어 대책을 적용했습니다 +- [ ] (GenAI) 환각 빈도와 GPU 자원 사용량을 모니터링합니다 +- [ ] (PredAI) 데이터/모델 드리프트를 모니터링하고 재학습 파이프라인을 구축했습니다 + +### 환류(Feedback) 및 개선 + +- [ ] 피드백 입력 검증을 적용했습니다 +- [ ] 피드백 데이터 무결성을 보장합니다 +- [ ] 피드백 처리에 최소 권한 원칙을 적용했습니다 +- [ ] 피드백 수집/처리/활용 감사 로그를 기록합니다 +- [ ] 피드백 데이터를 재학습에 반영하기 전 검증 절차를 거칩니다 + +### 파기 + +- [ ] 데이터, 모델, 암호화 키를 복구 불가능하게 삭제합니다 (24장 참조) +- [ ] 파기 수행 내역을 감사 로그에 기록합니다 + +> **TIP** +> 이 체크리스트를 분기별 보안 점검에 활용합니다. GenAI와 PredAI 서비스를 모두 운영하는 경우, 각 유형별 항목을 별도로 점검합니다. 26장에서는 AI 이용자 관점의 보안 수칙을 다룹니다. diff --git a/authorkit/drafts/KESE-KIT-KO/ch26-ai-user-security/section-new.md b/authorkit/drafts/KESE-KIT-KO/ch26-ai-user-security/section-new.md new file mode 100644 index 0000000..9815f40 --- /dev/null +++ b/authorkit/drafts/KESE-KIT-KO/ch26-ai-user-security/section-new.md @@ -0,0 +1,506 @@ +# 26장. AI 이용자를 위한 보안 수칙 + +AI 서비스는 누구나 쉽게 사용할 수 있습니다. 그만큼 보안 위협에 노출되기도 쉽습니다. 이 장에서는 AI 서비스 이용자가 알아야 할 보안 위협 사례와 실천 수칙을 정리합니다. + +23장에서 다룬 AI 보안 위협 유형과 프레임워크를 기반으로, 이용자 관점에서 구체적인 대응 방법을 제시합니다. 특히 26-3절에서는 바이브코딩(Vibe Coding) 환경에서의 AI 보안을 다룹니다. + +> **TIP** +> 이 장은 AI 서비스를 직접 사용하는 모든 사람을 대상으로 합니다. 개발자를 위한 보안 요구사항은 24장, 서비스 제공자를 위한 보안 요구사항은 25장을 참조하세요. + +--- + +## 26-1. AI 이용자 대상 보안위협 사례 + +AI 서비스 이용자를 대상으로 한 보안위협은 다양합니다. 실제 사례를 통해 위협의 심각성을 살펴봅니다. + +### 26-1-1. AI 챗봇에서 중요정보 유출 + +AI 챗봇에 입력한 내용은 서버에 저장될 수 있습니다. 사용자가 입력한 개인정보, 업무 기밀, 의료 정보 등이 학습 데이터로 활용되거나 로그에 남을 수 있습니다. + +**위험 시나리오** + +- 직원이 사내 기밀 문서를 AI 챗봇에 붙여넣어 요약을 요청합니다. +- 해당 내용이 모델 학습에 반영됩니다. +- 다른 사용자의 질문에 대한 응답에 기밀 정보가 포함됩니다. + +실제로 삼성전자 반도체 부문에서 직원들이 ChatGPT에 소스코드와 회의록을 입력한 사건이 보도되었습니다. 이후 삼성전자는 사내 생성형 AI 사용을 제한했습니다. + +> **WARNING** +> AI 챗봇에 입력한 내용은 완전히 삭제되지 않을 수 있습니다. 한 번 입력한 정보는 되돌릴 수 없다고 가정해야 합니다. + +### 26-1-2. AI 기반 음성 비서 도청 + +AI 음성 비서가 사용자의 대화를 의도치 않게 녹음하는 사례가 발생했습니다. + +**실제 사례** + +| 시기 | 사례 | 내용 | +|------|------|------| +| 2018년 | Amazon Echo | 사용자 대화를 녹음하여 연락처에 전송한 사건 발생 | +| 2019년 | Google Assistant | 녹음된 음성을 인간 검토자가 청취하고 있었음이 밝혀짐 | +| 2019년 | Apple Siri | 의료 정보, 사적 대화가 외부 검수 업체에 전달됨 | + +음성 비서는 항상 대기 상태에서 음성을 수집합니다. 호출어(Wake Word) 감지 과정에서 의도하지 않은 녹음이 발생할 수 있습니다. + +### 26-1-3. AI 챗봇의 악성 링크 배포 + +공격자가 AI 챗봇의 응답을 조작하여 악성 링크를 배포하는 위협입니다. + +**공격 방식** + +1. 공격자가 AI 모델의 학습 데이터를 오염시킵니다. +2. 사용자가 특정 질문을 하면 조작된 응답이 생성됩니다. +3. 응답에 포함된 악성 URL을 사용자가 클릭합니다. +4. 피싱(Phishing) 사이트로 연결되어 개인정보가 탈취됩니다. + +AI가 생성한 응답이라는 신뢰감 때문에 사용자는 링크를 의심 없이 클릭할 가능성이 높습니다. + +### 26-1-4. AI 얼굴 인식 시스템의 해킹 + +생체 인식(Biometrics) 데이터는 비밀번호와 달리 변경이 불가능합니다. 한번 유출되면 영구적인 피해로 이어집니다. + +**실제 사례** + +- 2019년, 미국 CBP(세관국경보호국)의 안면 인식 데이터베이스에서 약 10만 명의 생체 정보가 유출되었습니다. +- 2021년, 이스라엘 감시 소프트웨어 기업 Cellebrite의 얼굴 인식 데이터가 해킹당했습니다. + +> **WARNING** +> 얼굴, 지문, 홍채 등 생체 정보는 한번 유출되면 교체할 수 없습니다. AI 기반 생체 인식 서비스 가입 전에 데이터 보호 정책을 반드시 확인하세요. + +### 26-1-5. AI 서비스의 딥페이크 영상 유포 + +딥페이크(Deepfake)는 AI를 이용하여 실존 인물의 얼굴이나 음성을 합성하는 기술입니다. 범죄에 악용되는 사례가 급증하고 있습니다. + +**주요 악용 사례** + +| 유형 | 설명 | +|------|------| +| 보이스피싱(Voice Phishing) | 가족이나 상사의 음성을 합성하여 금전을 요구 | +| 딥페이크 영상 | 유명인의 얼굴을 합성한 허위 광고 및 사기 | +| 신원 도용 | 타인의 얼굴로 본인 인증을 통과 | +| 허위 증거 조작 | 법적 분쟁에서 조작된 영상을 증거로 제출 | + +2024년, 홍콩의 한 기업에서 딥페이크로 합성된 CFO의 화상회의 영상에 속아 약 2,500만 달러를 송금한 사건이 발생했습니다. + +### 26-1-6. AI를 악용한 사이버 테러 + +AI 기술이 사이버 공격에 직접 활용되는 사례입니다. + +**주요 유형** + +- **악성 코드 자동 생성**: AI를 이용하여 탐지를 회피하는 변종 악성 코드를 대량 생성합니다. +- **자동화된 취약점 탐색**: AI가 시스템의 보안 취약점을 자동으로 탐색합니다. +- **국가 지원 공격**: 국가 수준의 공격자가 AI를 활용하여 기반시설을 공격합니다. +- **소셜 엔지니어링(Social Engineering)**: AI가 생성한 자연스러운 피싱 이메일로 사용자를 속입니다. + +> **TIP** +> AI가 생성한 피싱 이메일은 기존보다 훨씬 자연스럽습니다. 이메일의 발신자 주소, 링크 URL, 첨부파일을 항상 확인하는 습관이 중요합니다. + +### 26-1-7. 보안위협 사례 요약 + +| 위협 유형 | 피해 대상 | 핵심 위험 | +|-----------|-----------|-----------| +| 중요정보 유출 | 개인·기업 | 기밀 정보 학습·노출 | +| 음성 비서 도청 | 개인 | 사생활 침해, 녹음 유출 | +| 악성 링크 배포 | 챗봇 사용자 | 피싱, 개인정보 탈취 | +| 얼굴 인식 해킹 | 생체 인증 사용자 | 생체 정보 영구 유출 | +| 딥페이크 | 일반 대중 | 사기, 명예훼손, 금전 피해 | +| 사이버 테러 | 기관·기업 | 기반시설 파괴, 대규모 피해 | + +--- + +## 26-2. AI 서비스 이용 시 보안 수칙 + +이 절에서는 AI 서비스 이용 전, 이용 중, 개인정보 보호 관점에서 보안 수칙을 정리합니다. + +### 26-2-1. AI 서비스 이용 전 보안 수칙 + +AI 서비스를 사용하기 전에 기본적인 보안 점검을 수행해야 합니다. + +**1. 공식 사이트에서만 다운로드합니다** + +AI 서비스 앱은 반드시 공식 웹사이트나 앱 스토어에서 다운로드합니다. + +| 위협 | 설명 | +|------|------| +| 피싱 사이트(Phishing Site) | 공식 사이트와 유사한 가짜 사이트에서 악성 앱 배포 | +| 타이포스쿼팅(Typosquatting) | chatgtp.com 등 오타 도메인으로 유인 | +| 웹사이트 복제(Website Clone) | 공식 사이트를 그대로 복제하여 로그인 정보 탈취 | + +> **TIP** +> URL 주소가 정확한지 확인하세요. HTTPS 인증서가 유효한지도 함께 확인합니다. 검색 엔진의 광고 링크보다 직접 URL을 입력하는 것이 안전합니다. + +**2. 안전한 비밀번호를 설정합니다** + +AI 서비스 계정에는 강력한 비밀번호를 사용합니다. 다른 서비스와 동일한 비밀번호를 사용하면 안 됩니다. + +| 위협 | 설명 | +|------|------| +| 무차별 대입 공격(Brute Force) | 가능한 모든 조합을 시도하여 비밀번호를 알아냄 | +| 크리덴셜 스터핑(Credential Stuffing) | 유출된 다른 서비스의 계정 정보로 로그인 시도 | + +비밀번호 설정 기준은 다음과 같습니다. + +- 최소 12자 이상 +- 대문자, 소문자, 숫자, 특수문자 조합 +- 다단계 인증(Multi-Factor Authentication, MFA) 활성화 +- 비밀번호 관리자(Password Manager) 사용 권장 + +**3. 공개된 장소에서 이용을 금지합니다** + +공용 Wi-Fi 환경에서 AI 서비스를 사용하면 위험합니다. + +| 위협 | 설명 | +|------|------| +| 중간자 공격(Man-in-the-Middle, MITM) | 통신 경로를 가로채 데이터를 탈취 | +| 네트워크 스니핑(Network Sniffing) | 네트워크 트래픽을 감청하여 정보 수집 | +| 가짜 네트워크(Evil Twin) | 공식 Wi-Fi와 동일한 이름의 가짜 네트워크 구축 | + +> **WARNING** +> 카페, 공항 등의 공용 Wi-Fi에서 AI 서비스에 로그인하지 마세요. 불가피한 경우 VPN(Virtual Private Network)을 사용합니다. + +**4. 법률 및 이용약관을 확인합니다** + +AI 서비스에 가입하기 전에 다음 사항을 확인합니다. + +- 입력 데이터가 모델 학습에 사용되는지 여부 +- 데이터 보관 기간 및 삭제 정책 +- 제3자 데이터 공유 여부 +- 해외 서버 저장 여부(개인정보 국외 이전) +- 서비스 종료 시 데이터 처리 방법 + +### 26-2-2. AI 서비스 이용 중 보안 수칙 + +AI 서비스를 사용하는 동안 지켜야 할 수칙입니다. + +**1. 중요 정보를 입력하지 않습니다** + +AI 서비스에 다음 정보를 절대 입력하면 안 됩니다. + +| 정보 유형 | 예시 | +|-----------|------| +| 개인식별정보(PII) | 주민등록번호, 여권번호, 운전면허번호 | +| 금융 정보 | 계좌번호, 카드번호, 비밀번호 | +| 의료 정보 | 진료 기록, 처방전, 건강 상태 | +| 기업 기밀 | 소스코드, 설계 문서, 재무 정보 | +| 법률 정보 | 계약서 원문, 소송 관련 문서 | + +> **WARNING** +> "학습에 사용하지 않음" 옵션을 선택해도 서버 로그에 입력 내용이 남을 수 있습니다. 중요 정보는 아예 입력하지 않는 것이 원칙입니다. + +**2. AI 결과의 정확성을 검증합니다** + +AI가 생성한 결과를 무조건 신뢰하면 안 됩니다. AI 환각(Hallucination) 현상으로 사실과 다른 내용을 자신 있게 출력하는 경우가 많습니다. + +- 중요한 사실 관계는 반드시 원본 출처를 확인합니다. +- 법률, 의료, 재무 관련 조언은 전문가와 상담합니다. +- AI가 제시한 URL이나 참고 문헌이 실제로 존재하는지 확인합니다. + +**3. 대화 기록을 삭제합니다** + +AI 서비스의 대화 기록을 주기적으로 정리합니다. + +- 대화 기록 자동 저장 기능을 비활성화합니다. +- 사용 후 불필요한 대화 기록을 삭제합니다. +- 민감한 내용이 포함된 대화는 즉시 삭제합니다. + +**4. 최신 보안 업데이트를 적용합니다** + +AI 서비스 앱과 운영체제를 항상 최신 상태로 유지합니다. + +- AI 앱의 자동 업데이트를 활성화합니다. +- 운영체제와 브라우저를 최신 버전으로 유지합니다. +- 보안 패치가 발표되면 즉시 적용합니다. + +### 26-2-3. 개인정보 보호 수칙 + +AI 시대에 개인정보를 보호하기 위한 수칙입니다. + +**1. 항상 의심하고 확인합니다** + +AI가 관여된 모든 콘텐츠를 비판적으로 검토합니다. + +- 영상 통화에서 상대방의 이상한 행동을 주의합니다. +- 음성 메시지의 진위를 전화로 직접 확인합니다. +- 긴급한 금전 요구는 다른 수단으로 재확인합니다. +- SNS에서 공유되는 AI 생성 콘텐츠를 구별합니다. + +**2. 개인정보 노출을 최소화합니다** + +SNS, 공개 게시판 등에 개인정보를 과도하게 공개하면 AI를 이용한 표적 공격에 활용됩니다. + +- 프로필에 연락처, 주소, 생년월일을 공개하지 않습니다. +- 가족 관계, 직장 정보의 공개 범위를 제한합니다. +- AI 학습에 이미지가 사용되는 것을 방지하려면 SNS 공개 범위를 설정합니다. + +**3. 딥페이크 대응 방법을 숙지합니다** + +딥페이크 피해를 예방하고 대응하는 방법입니다. + +- 딥페이크 탐지 도구(Microsoft Video Authenticator 등)를 활용합니다. +- 자신의 얼굴이나 음성이 무단으로 사용된 경우 즉시 신고합니다. +- 한국인터넷진흥원(KISA) 인터넷 침해사고 신고: 118 + +**4. 허위 콘텐츠를 매매하지 않습니다** + +AI로 생성한 허위 콘텐츠의 제작과 유통은 불법입니다. + +| 행위 | 관련 법률 | +|------|-----------| +| 딥페이크 음란물 제작·유포 | 성폭력범죄의 처벌 등에 관한 특례법 | +| 위조 문서 생성 | 형법 제225조(공문서위조) | +| 허위 사실 유포 | 정보통신망법 제70조 | +| 명예훼손 목적 합성물 | 개인정보보호법, 초상권 침해 | + +> **WARNING** +> 2024년 개정된 성폭력처벌법에 따라 딥페이크 성적 합성물의 소지만으로도 처벌 대상이 됩니다. 호기심으로도 접근하지 마세요. + +--- + +## 26-3. 바이브코딩 환경에서의 AI 보안 + +바이브코딩(Vibe Coding)은 AI 코딩 어시스턴트(Claude, ChatGPT, Cursor, Copilot 등)를 활용하여 코드를 생성하는 개발 방식입니다. 생산성은 높아지지만, 새로운 보안 위험도 함께 발생합니다. + +이 절은 KISA 안내서에 수록되지 않은 독창적인 내용입니다. 바이브코딩을 실제로 사용하는 개발자와 비개발자 모두를 대상으로 합니다. + +> **TIP** +> 바이브코딩의 보안은 "AI가 생성한 코드도 내 코드"라는 원칙에서 출발합니다. AI가 작성했더라도 배포 책임은 사용자에게 있습니다. + +### 26-3-1. AI 생성 코드의 보안 취약점 + +AI가 생성한 코드에는 보안 취약점이 포함될 수 있습니다. AI는 학습 데이터에 포함된 안전하지 않은 코드 패턴을 그대로 재현하는 경우가 많습니다. + +**자주 발생하는 취약점 유형** + +| 취약점 | CWE 번호 | 설명 | +|--------|----------|------| +| SQL 인젝션(SQL Injection) | CWE-89 | 사용자 입력을 쿼리에 직접 삽입 | +| 크로스사이트 스크립팅(XSS) | CWE-79 | 입력값 검증 없이 웹 페이지에 출력 | +| 하드코딩된 인증 정보 | CWE-798 | 소스코드에 비밀번호·API 키를 직접 기입 | +| 경로 순회(Path Traversal) | CWE-22 | 파일 경로 검증 없이 파일 시스템 접근 | +| 안전하지 않은 역직렬화 | CWE-502 | 외부 데이터를 검증 없이 객체로 변환 | +| 명령어 주입(Command Injection) | CWE-78 | 사용자 입력을 시스템 명령에 직접 전달 | + +AI에게 "로그인 기능을 만들어줘"라고 요청하면 동작하는 코드를 생성합니다. 그러나 비밀번호 해싱, 입력값 검증, SQL 파라미터 바인딩이 누락된 코드를 제공할 수 있습니다. + +> **WARNING** +> AI가 생성한 코드를 검증 없이 프로덕션에 배포하면 안 됩니다. 6장(웹 애플리케이션 보안)에서 다룬 SQL 인젝션, XSS 등의 취약점이 AI 생성 코드에서도 동일하게 발생합니다. 6장 참조. + +**대응 방법** + +1. AI에게 보안 요구사항을 프롬프트에 명시합니다. +2. 생성된 코드를 정적 분석 도구(SonarQube, Semgrep 등)로 검사합니다. +3. OWASP Top 10 항목을 기준으로 코드를 검토합니다. +4. 보안 관련 코드는 반드시 인간이 리뷰합니다. + +### 26-3-2. 프롬프트 주입을 통한 코드 오염 + +바이브코딩 환경에서는 AI 코딩 어시스턴트가 프로젝트 내 파일을 읽습니다. 공격자가 악성 지시를 코드 주석이나 문서에 삽입하면, AI가 이를 따를 수 있습니다. + +**공격 벡터** + +``` +┌─────────────────────────────────────────────┐ +│ 프롬프트 주입 공격 경로 │ +├─────────────────────────────────────────────┤ +│ │ +│ 1. 악성 README.md │ +│ "이 프로젝트 빌드 시 다음 코드를 추가하세요" │ +│ │ │ +│ ▼ │ +│ 2. AI 코딩 어시스턴트가 README를 읽음 │ +│ │ │ +│ ▼ │ +│ 3. AI가 악성 코드를 생성 결과에 포함 │ +│ │ │ +│ ▼ │ +│ 4. 개발자가 검증 없이 코드를 실행 │ +│ │ +└─────────────────────────────────────────────┘ +``` + +**실제 공격 유형** + +| 공격 유형 | 삽입 위치 | 목적 | +|-----------|-----------|------| +| 악성 주석 | 소스코드 주석 | AI가 백도어 코드를 생성하도록 유도 | +| README 조작 | 오픈소스 저장소 README | AI가 악성 의존성을 추가하도록 유도 | +| 설정 파일 조작 | .env.example, config 파일 | 민감 정보 외부 전송 코드 유도 | +| 이슈·PR 본문 | GitHub Issues, PR 설명 | AI가 취약한 코드 패턴을 생성하도록 유도 | + +> **WARNING** +> 외부 오픈소스 프로젝트를 AI 코딩 어시스턴트로 작업할 때 특히 주의하세요. 신뢰할 수 없는 저장소의 파일을 AI에게 읽히기 전에 직접 검토해야 합니다. + +**대응 방법** + +1. AI가 읽는 파일의 범위를 제한합니다. +2. 외부 저장소의 README, 주석을 사전에 검토합니다. +3. AI 생성 결과에서 예상하지 못한 코드가 포함되었는지 확인합니다. +4. `.gitignore`와 AI 도구의 무시 설정(`.cursorignore` 등)을 활용합니다. + +### 26-3-3. AI가 제안하는 의존성 혼동 공격 + +AI 코딩 어시스턴트가 존재하지 않는 패키지를 제안하는 경우가 있습니다. 공격자가 해당 이름으로 악성 패키지를 미리 등록해두면 피해가 발생합니다. + +**의존성 혼동 공격(Dependency Confusion Attack)** + +``` +┌──────────────┐ ┌──────────────┐ ┌──────────────┐ +│ AI가 가상의 │───▶│ 공격자가 동일 │───▶│ 개발자가 해당 │ +│ 패키지명 제안 │ │ 이름으로 악성 │ │ 패키지를 설치 │ +│ │ │ 패키지 등록 │ │ │ +└──────────────┘ └──────────────┘ └──────────────┘ +``` + +AI가 `pip install company-utils`를 제안했을 때, 이 패키지가 실제로 존재하는지 확인해야 합니다. PyPI나 npm에 해당 이름의 악성 패키지가 등록되어 있을 수 있습니다. + +**대응 방법** + +1. AI가 제안한 패키지의 존재를 공식 레지스트리에서 확인합니다. +2. 패키지의 다운로드 수, 유지관리 이력, 게시자를 확인합니다. +3. `package-lock.json`, `requirements.txt`의 변경 사항을 리뷰합니다. +4. 내부 패키지 레지스트리(Private Registry)를 운영합니다. + +### 26-3-4. AI 생성 코드의 배포 전 검증 + +AI가 생성한 코드를 프로덕션에 배포하기 전에 반드시 검증 절차를 거쳐야 합니다. + +**검증 체크리스트** + +| 단계 | 점검 항목 | 도구 예시 | +|------|-----------|-----------| +| 정적 분석 | 코드 내 보안 취약점 탐지 | SonarQube, Semgrep, Bandit | +| 의존성 검사 | 알려진 취약점이 있는 라이브러리 탐지 | Snyk, Dependabot, pip-audit | +| 시크릿 스캔 | 하드코딩된 API 키, 비밀번호 탐지 | git-secrets, TruffleHog | +| 코드 리뷰 | 보안 전문가의 수동 검토 | Pull Request 리뷰 | +| 동적 테스트 | 실행 중 취약점 탐지 | OWASP ZAP, Burp Suite | + +> **TIP** +> CI/CD 파이프라인에 보안 검사를 자동화하면 AI 생성 코드의 취약점을 배포 전에 차단할 수 있습니다. 3장(Unix 서버 보안)에서 다룬 서버 하드닝과 함께 적용하세요. 3장 참조. + +### 26-3-5. AI 도구에 프로덕션 시크릿 공유 금지 + +AI 코딩 어시스턴트에 프로덕션 환경의 인증 정보를 전달하면 안 됩니다. + +**절대 공유하면 안 되는 정보** + +- 데이터베이스 접속 정보(호스트, 사용자명, 비밀번호) +- API 키, 시크릿 키, 토큰 +- SSL/TLS 인증서 및 개인 키 +- 클라우드 서비스 인증 정보(AWS Access Key 등) +- SSH 키, VPN 인증서 +- 환경 변수(.env) 파일의 실제 값 + +> **WARNING** +> "디버깅 도와줘"라며 에러 로그를 AI에 붙여넣을 때 주의하세요. 로그에 접속 정보, 토큰, 내부 IP 주소가 포함되어 있을 수 있습니다. + +**안전한 대안** + +| 위험한 방법 | 안전한 방법 | +|-------------|-------------| +| 실제 API 키를 AI에 전달 | 더미 값(YOUR_API_KEY)으로 대체 | +| .env 파일 전체를 공유 | .env.example 템플릿만 공유 | +| 프로덕션 에러 로그를 그대로 전달 | 민감 정보를 마스킹 후 전달 | +| 데이터베이스 덤프를 AI에 전달 | 스키마 구조만 공유 | + +### 26-3-6. 공공기관·정부 프로젝트에서의 AI 사용 + +공공기관이나 정부 프로젝트에서 AI 코딩 어시스턴트를 사용할 때는 추가적인 주의가 필요합니다. + +**주요 고려사항** + +| 항목 | 설명 | +|------|------| +| 데이터 주권 | 입력 데이터가 국외 서버로 전송되는지 확인 | +| 보안 등급 | 비밀 이상의 정보를 AI에 입력 금지 | +| 규정 준수 | 국가정보원 보안 가이드라인 준수 | +| 감사 추적 | AI 사용 내역의 기록과 보관 | +| 코드 소유권 | AI 생성 코드의 저작권과 라이선스 확인 | + +국가정보원(NIS)은 「ChatGPT 등 생성형 AI 활용 보안 가이드라인」을 통해 공공기관의 AI 사용 기준을 제시했습니다. 주요 내용은 다음과 같습니다. + +- 업무 관련 비공개 정보를 입력하지 않습니다. +- AI 생성 결과를 공식 문서에 그대로 사용하지 않습니다. +- AI 활용 시 소속 기관의 보안 정책을 우선 준수합니다. +- AI 사용 사실과 범위를 문서화합니다. + +> **TIP** +> 온프레미스(On-premise) AI 도구를 활용하면 데이터가 외부로 전송되지 않습니다. 보안 등급이 높은 프로젝트에서는 자체 호스팅 가능한 AI 도구를 검토하세요. + +### 26-3-7. 바이브코딩 보안 실천 요약 + +바이브코딩 환경에서 AI를 안전하게 사용하기 위한 핵심 원칙입니다. + +``` +┌─────────────────────────────────────────────┐ +│ 바이브코딩 보안 5대 원칙 │ +├─────────────────────────────────────────────┤ +│ │ +│ 1. 신뢰하되 검증합니다 (Trust but Verify) │ +│ → AI 생성 코드를 반드시 리뷰합니다 │ +│ │ +│ 2. 시크릿을 공유하지 않습니다 │ +│ → 프로덕션 인증 정보를 AI에 전달 금지 │ +│ │ +│ 3. 의존성을 확인합니다 │ +│ → AI가 제안한 패키지를 직접 검증합니다 │ +│ │ +│ 4. 입력을 통제합니다 │ +│ → AI가 읽는 파일 범위를 제한합니다 │ +│ │ +│ 5. 자동화로 보호합니다 │ +│ → CI/CD에 보안 검사를 통합합니다 │ +│ │ +└─────────────────────────────────────────────┘ +``` + +--- + +## 26장 요약 체크리스트 + +AI 이용자를 위한 보안 수칙을 점검합니다. 이 체크리스트를 인쇄하여 활용하세요. + +### AI 서비스 이용 전 + +| 점검 항목 | 확인 | +|-----------|:----:| +| AI 서비스 앱을 공식 사이트에서 다운로드했는가? | □ | +| 12자 이상의 강력한 비밀번호를 설정했는가? | □ | +| 다단계 인증(MFA)을 활성화했는가? | □ | +| 이용약관에서 데이터 학습 정책을 확인했는가? | □ | +| 안전한 네트워크 환경에서 접속하는가? | □ | + +### AI 서비스 이용 중 + +| 점검 항목 | 확인 | +|-----------|:----:| +| 개인식별정보(PII)를 입력하지 않았는가? | □ | +| 기업 기밀이나 소스코드를 입력하지 않았는가? | □ | +| AI 응답의 사실 여부를 검증했는가? | □ | +| 대화 기록을 주기적으로 삭제했는가? | □ | +| AI 앱과 운영체제를 최신 버전으로 유지하는가? | □ | + +### 개인정보 보호 + +| 점검 항목 | 확인 | +|-----------|:----:| +| 딥페이크 의심 콘텐츠를 비판적으로 검토하는가? | □ | +| SNS 개인정보 공개 범위를 제한했는가? | □ | +| 긴급 금전 요구 시 다른 수단으로 확인하는가? | □ | +| AI 생성 허위 콘텐츠를 유통하지 않는가? | □ | + +### 바이브코딩 보안 + +| 점검 항목 | 확인 | +|-----------|:----:| +| AI 생성 코드를 배포 전에 보안 검토했는가? | □ | +| 정적 분석 도구로 취약점을 검사했는가? | □ | +| AI에 프로덕션 시크릿을 전달하지 않았는가? | □ | +| AI가 제안한 패키지의 존재와 안전성을 확인했는가? | □ | +| 외부 저장소 파일을 AI에 읽히기 전에 검토했는가? | □ | +| CI/CD 파이프라인에 보안 검사를 통합했는가? | □ | +| 공공기관 프로젝트 시 데이터 주권을 확인했는가? | □ | + +--- + +*이전 장(25장)에서는 AI 서비스 제공자를 위한 보안 요구사항을 다루었습니다. 다음 파트에서는 부록으로 AI 보안 체크리스트 전체를 통합 정리합니다.* diff --git a/authorkit/drafts/secure-coding/javascript.md b/authorkit/drafts/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/authorkit/drafts/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/authorkit/drafts/secure-coding/overview.md b/authorkit/drafts/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/authorkit/drafts/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/authorkit/drafts/secure-coding/pseudocode.md b/authorkit/drafts/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/authorkit/drafts/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/authorkit/drafts/secure-coding/python.md b/authorkit/drafts/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/authorkit/drafts/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/authorkit/glossary.md b/authorkit/glossary.md index 90b7a02..f88220e 100644 --- a/authorkit/glossary.md +++ b/authorkit/glossary.md @@ -161,6 +161,33 @@ --- +## AI 보안 관련 (ref-003) + +| 한글 | 영문 | 약어 | 비고 | +|------|------|------|------| +| 대규모 언어 모델 | Large Language Model | LLM | | +| 생성형 인공지능 | Generative AI | GenAI | | +| 예측형 인공지능 | Predictive AI | Pred AI | | +| 적대적 예제 | Adversarial Example | - | AI 공격 유형 | +| 회피 공격 | Evasion Attack | - | AI 공격 유형 | +| 오염 공격 | Poisoning Attack | - | 학습 데이터 오염 | +| 전도 공격 | Inversion Attack | - | 모델 역추론 | +| 모델 추출 | Model Extraction | - | AI 공격 유형 | +| AI 탈옥 | AI Jailbreak | - | 프롬프트 우회 공격 | +| 데이터 오염 | Data Poisoning | - | | +| 연합 학습 | Federated Learning | FL | | +| 검색 증강 생성 | Retrieval-Augmented Generation | RAG | | +| 인간 피드백 강화학습 | Reinforcement Learning from Human Feedback | RLHF | | +| 서비스형 기계학습 | Machine Learning as a Service | MLaaS | | +| AI 위험관리 프레임워크 | AI Risk Management Framework | AI RMF | NIST 표준 | +| 역할 기반 접근 제어 | Role-Based Access Control | RBAC | | +| 다중 인증 | Multi-Factor Authentication | MFA | | +| 보안 정보 이벤트 관리 | Security Information and Event Management | SIEM | | +| 보안 중심 설계 | Security by Design | - | | +| 최소 권한 원칙 | Least Privilege Principle | - | | + +--- + ## 사용 규칙 1. **첫 등장**: 전체 형식 사용 @@ -172,4 +199,189 @@ --- -*분석 완료 후 업데이트됨: 2026-03-27* +## 로봇 보안 관련 (ref-004, ref-005) + +| 한글 | 영문 | 약어 | 비고 | +|------|------|------|------| +| 산업용 로봇 | Industrial Robot | - | ISO 8373 | +| 서비스 로봇 | Service Robot | - | ISO 8373 | +| 의료용 로봇 | Medical Robot | - | ISO 8373 | +| 보안 소프트웨어 개발 프레임워크 | Secure Software Development Framework | SSDF | NIST SP 800-218 | +| 산업제어시스템 보안 | Industrial Control System Security | IEC 62443 | 국제 표준 | +| 사이버 복원력 법 | Cyber Resilience Act | CRA | EU 규정 | +| 무선기기 지침 | Radio Equipment Directive | RED | EU 규정 | +| 소프트웨어 자재명세서 | Software Bill of Materials | SBoM | 공급망 보안 | + +--- + +## 우주 보안 관련 (ref-006~010) + +### 우주 아키텍처 용어 + +| 한글 | 영문 | 약어 | 비고 | +|------|------|------|------| +| 정지궤도 위성 | Geostationary Earth Orbit | GEO | ~36,000km | +| 중궤도 위성 | Middle Earth Orbit | MEO | 2,000~30,000km | +| 저궤도 위성 | Low Earth Orbit | LEO | 250~2,000km | +| 저궤도 군집위성 | LEO Constellation | - | 소형위성 집단 | +| 지상국 서비스 | Ground Station as a Service | GSaaS | 클라우드 기반 지상국 | +| 위성항법시스템 | Global Navigation Satellite System | GNSS | 위치/항법/시각 제공 | +| 도심항공모빌리티 | Urban Air Mobility | UAM | 저고도 항공운송 | +| 초소형 위성통신지구국 | Very Small Aperture Terminal | VSAT | 소형 위성 지상국 | +| 탑재체 | Payload | - | 위성 임무수행 부분 | +| 위성 본체 | Satellite Bus | - | 위성 구동 부분 | +| 온보드 컴퓨터 | On Board Computer | OBC | 위성 탑재 컴퓨터 | +| 우주 데이터시스템 자문위원회 | Consultative Committee for Space Data Systems | CCSDS | 우주 통신 표준 기구 | + +### 우주 보안위협 용어 + +| 한글 | 영문 | 약어 | 비고 | +|------|------|------|------| +| 재밍 | Jamming | - | 방해전파 송출 | +| 스푸핑 | Spoofing | - | 위장 공격 | +| GPS 위장 교란 | GPS Spoofing | - | 위치정보 위변조 | +| 양자내성암호 | Post-Quantum Cryptography | PQC | 양자컴퓨터 내성 | +| 소프트웨어 정의 라디오 | Software Defined Radio | SDR | 전파분석 장치 | +| 일방향 전송장비 | One-way Transfer Device | - | 제어망 보호 | +| 무선침입방지시스템 | Wireless Intrusion Prevention System | WIPS | 무선AP 불법접속 방지 | +| 네트워크 접근통제 | Network Access Control | NAC | 인가 장치 접속 통제 | +| 정보유출방지 | Data Loss Prevention | DLP | 매체제어/유출차단 | +| 주파수 호핑 | Frequency Hopping | - | 안티재밍 기술 | +| 확산 스펙트럼 | Spread Spectrum | - | 안티재밍 기술 | + +### 우주 보안 체크리스트 분야 코드 + +| 코드 | 분야명 | 영문 | 항목 수 | +|:----:|--------|------|:-------:| +| AC | 접근통제 | Access Control | 12 | +| IA | 식별 및 인증 | Identification & Authentication | 2 | +| SC | 시스템 및 통신 보안 | System & Communication Security | 7 | +| SI | 시스템 및 정보 무결성 | System & Information Integrity | 4 | +| SO | 시스템/서비스 운영관리 | System/Service Operations Management | 9 | +| IR | 사고 대응 | Incident Response | 2 | +| PS | 인원 보안 | Personnel Security | 2 | +| PE | 물리보안 | Physical & Environmental Security | 3 | +| RA | 위험평가 및 보안 평가 | Risk Assessment & Security Evaluation | 2 | +| SG | 보안 거버넌스 | Security Governance | 4 | +| CP | 비상 계획 | Contingency Planning | 2 | +| SM | 공급망 관리 | Supply Chain Management | 4 | + +### 우주 보안 준거 기준 + +| 한글 | 영문 | 약어 | 비고 | +|------|------|------|------| +| 사이버보안 성숙도 모델 인증 | Cybersecurity Maturity Model Certification | CMMC | 미 국방부 공급망 인증 | +| 한국형 위험관리체계 | Korea Risk Management Framework | K-RMF | 국내 표준 | +| 네트워크 및 정보 보안 지침 | Network and Information Security Directive | NIS2 | EU 사이버보안 지침 | +| 사이버보안 프레임워크 | Cyber Security Framework | CSF | NIST 표준 | +| 위성 지상국 사이버보안 | Satellite Ground Segment Cybersecurity | NIST IR 8401 | NIST 지침 | +| 상업 위성 운영 사이버보안 | Commercial Satellite Operations Cybersecurity | NIST IR 8270 | NIST 지침 | +| 우주 시스템 위협 분석 | Space Threat Landscape | - | ENISA 보고서 | + +--- + +## 시큐어코딩 관련 (ref-011, ref-012) + +### 보안약점 카테고리 + +| 한글 | 영문 | 항목 수 (JS/Py) | +|------|------|:---------------:| +| 입력데이터 검증 및 표현 | Input Data Validation and Representation | 13 / 16 | +| 보안기능 | Security Features | 16 / 16 | +| 시간 및 상태 | Time and State | 1 / 2 | +| 에러처리 | Error Handling | 3 / 3 | +| 코드오류 | Code Quality | 3 / 3 | +| 캡슐화 | Encapsulation | 4 / 4 | +| API 오용 | API Misuse | 2 / 2 | + +### 입력데이터 검증 및 표현 + +| 한글 | 영문 | CWE | 비고 | +|------|------|-----|------| +| SQL 삽입 | SQL Injection | CWE-89 | JS/Py 공통 | +| 코드 삽입 | Code Injection | CWE-94, 95 | eval() 등 | +| 경로 조작 및 자원 삽입 | Path Traversal / Resource Injection | CWE-22, 99 | | +| 크로스사이트 스크립트 | Cross-Site Scripting | CWE-79 | XSS | +| 운영체제 명령어 삽입 | OS Command Injection | CWE-78 | | +| 위험한 형식 파일 업로드 | Unrestricted File Upload | CWE-434 | | +| 신뢰되지 않은 URL 자동접속 | Open Redirect | CWE-601 | | +| 부적절한 XML 외부 개체 참조 | XML External Entity | CWE-611 | XXE | +| XML 삽입 | XPath Injection | CWE-643 | | +| LDAP 삽입 | LDAP Injection | CWE-90 | | +| 크로스사이트 요청 위조 | Cross-Site Request Forgery | CWE-352 | CSRF | +| 서버사이드 요청 위조 | Server-Side Request Forgery | CWE-918 | SSRF | +| 보안기능 결정에 사용되는 부적절한 입력값 | Untrusted Input for Security Decision | CWE-807 | | +| HTTP 응답분할 | HTTP Response Splitting | CWE-113 | Python만 | +| 정수형 오버플로우 | Integer Overflow | CWE-190 | Python만 | +| 포맷 스트링 삽입 | Format String Injection | CWE-134 | Python만 | + +### 보안기능 + +| 한글 | 영문 | CWE | 비고 | +|------|------|-----|------| +| 적절한 인증 없는 중요 기능 허용 | Missing Authentication for Critical Function | CWE-306 | | +| 부적절한 인가 | Improper Authorization | CWE-285 | | +| 잘못된 권한 설정 | Incorrect Permission Assignment | CWE-732 | | +| 취약한 암호화 알고리즘 사용 | Use of Broken Crypto Algorithm | CWE-327 | | +| 암호화되지 않은 중요정보 | Cleartext Storage/Transmission | CWE-312, 319 | | +| 하드코드된 중요정보 | Hard-coded Credentials | CWE-259, 321 | | +| 충분하지 않은 키 길이 | Inadequate Encryption Strength | CWE-326 | | +| 부적절한 난수 값 | Insufficient Randomness | CWE-330 | | +| 취약한 패스워드 허용 | Weak Password Requirements | CWE-521 | | +| 부적절한 전자서명 확인 | Improper Verification of Signature | CWE-347 | | +| 부적절한 인증서 유효성 검증 | Improper Certificate Validation | CWE-295 | | +| 쿠키를 통한 정보 노출 | Sensitive Info in Persistent Cookie | CWE-539 | | +| 주석문 안에 포함된 시스템 주요정보 | Sensitive Info in Source Code Comments | CWE-615 | | +| 솔트 없이 일방향 해쉬 함수 사용 | Use of One-Way Hash Without Salt | CWE-759 | | +| 무결성 검사없는 코드 다운로드 | Download of Code Without Integrity Check | CWE-494 | | +| 반복된 인증시도 제한 기능 부재 | Improper Restriction of Auth Attempts | CWE-307 | | + +### 기타 카테고리 + +| 한글 | 영문 | CWE | 카테고리 | +|------|------|-----|---------| +| 경쟁조건 TOCTOU | Time-of-check Time-of-use | CWE-367 | 시간/상태 (Py만) | +| 종료되지 않는 반복문/재귀 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | 시간/상태 | +| 오류 메시지 정보노출 | Information Exposure Through Error Message | CWE-209 | 에러처리 | +| 오류상황 대응 부재 | Detection of Error Without Action | CWE-390 | 에러처리 | +| 부적절한 예외 처리 | Improper Check for Exceptional Conditions | CWE-754 | 에러처리 | +| Null Pointer 역참조 | NULL Pointer Dereference | CWE-476 | 코드오류 | +| 부적절한 자원 해제 | Improper Resource Shutdown or Release | CWE-404 | 코드오류 | +| 신뢰할 수 없는 데이터의 역직렬화 | Deserialization of Untrusted Data | CWE-502 | 코드오류 | +| 잘못된 세션에 의한 정보 노출 | Exposure of Data from Wrong Session | CWE-488 | 캡슐화 | +| 제거되지 않은 디버그 코드 | Active Debug Code | CWE-489 | 캡슐화 | +| DNS lookup에 의존한 보안결정 | Reliance on Reverse DNS Resolution | CWE-350 | API 오용 | + +### 프레임워크/라이브러리 + +| 이름 | 언어 | 용도 | 비고 | +|------|------|------|------| +| Express.js | JavaScript | 웹 서버 | Node.js 기반 | +| Sequelize | JavaScript | ORM | SQL 삽입 방지 | +| Mongoose | JavaScript | ODM | MongoDB | +| helmet | JavaScript | HTTP 보안 헤더 | Express 미들웨어 | +| csurf | JavaScript | CSRF 방지 | Express 미들웨어 | +| Django | Python | 웹 프레임워크 | ORM, CSRF 내장 | +| Flask | Python | 웹 프레임워크 | 경량 | +| SQLAlchemy | Python | ORM | SQL 삽입 방지 | +| cryptography | Python | 암호화 라이브러리 | | +| hashlib | Python | 해시 함수 | 표준 라이브러리 | +| secrets | Python | 보안 난수 | 표준 라이브러리 | + +--- + +## 사용 규칙 + +1. **첫 등장**: 전체 형식 사용 + - 예: 주요정보통신기반시설(Critical Information Infrastructure, CII) + - 예: SQL 삽입(SQL Injection, CWE-89) +2. **이후 등장**: 한글 또는 약어 사용 + - 예: 주요정보통신기반시설 또는 CII + - 예: SQL 삽입 또는 CWE-89 +3. **새 용어 추가 시**: 이 파일에 등록 후 사용 +4. **점검 항목 코드**: 본문에서 `U-01`, `W-02`, `AC-01` 형식으로 직접 사용 가능 +5. **CWE 코드**: 본문에서 `CWE-89` 형식으로 직접 사용 가능 + +--- + +*최종 업데이트: 2026-04-02 (ref-011/012 시큐어코딩 가이드 용어 추가)* diff --git a/authorkit/references/README.md b/authorkit/references/README.md index 55d56d2..44adfbb 100644 --- a/authorkit/references/README.md +++ b/authorkit/references/README.md @@ -40,6 +40,34 @@ C:\Users\admin\PycharmProjects\PawnERP\Skills\KESE\문서 --- +### ref-013: 제로트러스트 가이드라인 2.0 (메인) +- **파일**: `241203_제로트러스트_가이드라인_2.0.pdf` +- **페이지**: 245 +- **문자 수**: 261,584 +- **이미지**: 180개 +- **그림**: 21개 | **표**: 73개 +- **분석일**: 2026-04-03 +- **분석 경로**: `references/ref-013/analysis.md` + +### ref-014: 제로트러스트 성숙도 모델 해설서 (서브 — 실무 상세화) +- **파일**: `제로트러스트 성숙도 모델 해설서.pdf` +- **페이지**: 182 +- **문자 수**: 228,479 +- **이미지**: 165개 +- **분석일**: 2026-04-03 +- **분석 경로**: `references/ref-014/analysis.md` + +### ref-015: OT 환경의 제로트러스트 적용 안내서 (서브 — OT 특화) +- **파일**: `251222_OT_환경의_제로트러스트_적용_안내서 (1).pdf` +- **페이지**: 67 +- **문자 수**: 77,784 +- **이미지**: 152개 +- **그림**: 20개 | **표**: 26개 +- **분석일**: 2026-04-03 +- **분석 경로**: `references/ref-015/analysis.md` + +--- + ## 사용법 변환된 마크다운 파일은 다음 위치에서 접근 가능합니다: diff --git a/authorkit/references/ref-003/README.md b/authorkit/references/ref-003/README.md new file mode 100644 index 0000000..884506d --- /dev/null +++ b/authorkit/references/ref-003/README.md @@ -0,0 +1,19 @@ +# ref-003: 인공지능(AI) 보안 안내서(정오 수정) + +- **출처**: 과학기술정보통신부 · 한국인터넷진흥원(KISA) +- **발행**: 2025년 12월 +- **원본 PDF**: `authorkit/new pdf/인공지능(AI) 보안 안내서(정오 수정).pdf` +- **변환 파일**: `authorkit/converted/ref-003/full.md` +- **분석 결과**: `analysis.md` +- **페이지 수**: 239페이지 +- **이미지 수**: 1,125개 + +## 대상 장 매핑 + +| 참고자료 장 | 본서 장 | 비고 | +|---|---|---| +| 제1장 개요 | 23장 AI 보안 개요 | 위협 유형, 적용범위 | +| 제2장 AI 개발자 | 24장 AI 개발자 보안 점검 | 6단계 생명주기 | +| 제3장 AI 서비스 제공자 | 25장 AI 서비스 제공자 보안 점검 | GenAI/PredAI 구분 | +| 제4장 AI 이용자 | 26장 AI 이용자 보안 수칙 | 실무 수칙 | +| 부록 | 부록 C 용어집 보완 | 용어 정의 반영 | diff --git a/authorkit/references/ref-003/analysis.md b/authorkit/references/ref-003/analysis.md new file mode 100644 index 0000000..3e18516 --- /dev/null +++ b/authorkit/references/ref-003/analysis.md @@ -0,0 +1,221 @@ +# ref-003 분석 결과: 인공지능(AI) 보안 안내서(정오 수정) + +> 분석일: 2026-03-30 +> 원본: `authorkit/converted/ref-003/full.md` +> 출처: 과학기술정보통신부 · 한국인터넷진흥원(KISA), 2025년 12월 발행 + +--- + +## 1. 기본 정보 + +| 항목 | 값 | +|---|---| +| 총 라인 수 | 14,579줄 | +| 총 페이지 수 | 239페이지 | +| 추출 이미지 수 | 1,125개 | +| 명시적 그림 참조 | 16건 (그림 1-1 ~ 부록 그림 8) | +| 명시적 표 참조 | 10건 (표 1-2, 표 3-1, 표 3-2 등) | + +--- + +## 2. 문서 구조 (목차) + +### 체크리스트 요약 +- AI 개발자를 위한 보안 체크리스트 (pp. iv~vi) +- AI 서비스 제공자를 위한 보안 체크리스트 (pp. vii~ix) + +### 제1장 개요 +1. 「인공지능(AI) 보안 안내서」 개발 목적 (p.2) +2. AI 보안 위협 (p.5) +3. AI 보안 안내서의 필요성 및 적용범위 (p.10) + +### 제2장 AI 개발자를 위한 보안 안내서 +1. 개요 (p.16) +2. AI 개발자 대상 보안 프레임워크 (p.18) +3. AI 개발자를 위한 보안 요구사항 및 검증항목 (p.24) + - 1단계: 계획 및 설계 — 거버넌스, 위험관리 (1.1~1.2) + - 2단계: 데이터 수집 및 준비 — 수집/전처리, 무결성, 라벨링 (2.1~2.3) + - 3단계: 모델 개발 — 학습환경, 알고리즘, 오픈소스, 개발환경 (3.1~3.4) + - 4단계: 모델 배포 — 배포보안, API보안 (4.1~4.2) + - 5단계: 모니터링 및 유지보수 — 운영보안, 사후관리 (5.1~5.2) + - 6단계: 파기 — 파기 시 보안 (6.1) + +### 제3장 AI 서비스 제공자를 위한 보안 안내서 +1. 개요 (p.70) +2. AI 서비스 제공자 대상 보안 프레임워크 (p.71) +3. AI 서비스 제공자를 위한 보안 요구사항 및 검증항목 (p.75) + - 동일 6단계 생명주기 구조 (1.1~6.1) + +### 제4장 AI 이용자를 위한 보안 수칙 +1. 개요 (p.112) +2. AI 이용자에게 발생할 수 있는 보안위협 사례 (p.113) +3. AI 서비스 이용자를 위한 보안 수칙 (p.117) + +### 참고문헌 (p.135) + +### 부록 +1. 용어 정의 (p.142) +2. 참고자료 (p.145) +3. TTA "신뢰할 수 있는 인공지능 개발 안내서"와 비교 및 차별점 (p.188) +4. 국내 주요 AI 보안 가이드라인 비교 (p.204) +5. AI 개발자 대상 보안 프레임워크 (p.206) +6. AI 서비스 제공자 대상 보안 프레임워크 (p.218) + +--- + +## 3. 그림/도표 목록 + +### 본문 그림 +| ID | 제목 | 위치(라인) | +|---|---|---| +| 그림 1-1 | 회피공격의 예 | 1199 | +| 그림 1-2 | AI 서비스 관련 사업 활동의 주체 | 1389 | +| 그림 1-3 | 인공지능 서비스의 생명주기 | 1394 | +| 그림 2-1 | AI 개발자 대상 보안 프레임워크(Security Framework) | 1726 | + +### 본문 표 +| ID | 제목 | 위치(라인) | +|---|---|---| +| 표 1-2 | (체크리스트 관련) | 1440 | +| 표 3-1 | 예방 단계에 대한 보안 기술 구성 요소별 보안 목표 및 요구사항 | 4874 | +| 표 3-2 | 탐지·대응 단계에 대한 보안 기술 구성 요소별 보안 목표 및 요구사항 | 4985 | + +### 부록 그림 +- 부록 그림 1~8 (라인 11468~14294) + +### 이미지 분포 +- 페이지당 평균 4~5개 이미지 +- 최다 이미지 페이지: p.205 (10개), p.206 (8개) +- 부록(p.205~237)에 이미지 밀도가 높음 + +--- + +## 4. 핵심 개념 및 용어 + +### AI 보안 핵심 개념 +| 한국어 | 영어 | 비고 | +|---|---|---| +| 보안(Security) 거버넌스 | Security Governance | 조직/정책/프로세스 체계 | +| 위험관리 | Risk Management | 위협 모델링, 위험 평가 | +| 최소 권한 원칙 | Least Privilege | 접근 제어 원칙 | +| 역할 기반 접근 제어(RBAC) | Role-Based Access Control | | +| 다중 인증(MFA) | Multi-Factor Authentication | | +| 기밀성/무결성/가용성 | CIA Triad | 정보보안 3요소 | + +### AI 공격 유형 +| 한국어 | 영어 | +|---|---| +| 적대적 예제 | Adversarial Example | +| 회피 공격 | Evasion Attack | +| 오염 공격 | Poisoning Attack | +| 전도 공격 | Inversion Attack | +| 모델 추출 | Model Extraction | +| 역설계 | Reverse Engineering | +| AI 탈옥 | AI Jailbreak | +| 데이터 오염 | Data Poisoning | + +### AI 기술 용어 +| 약어 | 풀네임 | +|---|---| +| LLM | Large Language Model | +| GenAI | Generative AI | +| RAG | Retrieval-Augmented Generation | +| RLHF | Reinforcement Learning from Human Feedback | +| MLaaS | Machine Learning as a Service | + +### 표준/기관 +| 약어 | 풀네임 | +|---|---| +| NIST | National Institute of Standards and Technology | +| TTA | 한국정보통신기술협회 | +| KISA | 한국인터넷진흥원 | +| OWASP | Open Web Application Security Project | +| AI RMF | AI Risk Management Framework | + +### 보안 인프라 용어 +| 약어 | 풀네임 | +|---|---| +| TLS | Transport Layer Security | +| AES | Advanced Encryption Standard | +| SIEM | Security Information and Event Management | +| IDS | Intrusion Detection System | +| VPN | Virtual Private Network | +| KMS | Key Management Service | +| SLA | Service Level Agreement | + +--- + +## 5. 분량 분석 + +### 장별 페이지 분포 (추정) +| 장 | 페이지 범위 | 페이지 수 | +|---|---|---| +| 체크리스트 요약 | iv~ix | 6 | +| 제1장 개요 | 2~15 | 14 | +| 제2장 AI 개발자 | 16~69 | 54 | +| 제3장 AI 서비스 제공자 | 70~111 | 42 | +| 제4장 AI 이용자 | 112~134 | 23 | +| 참고문헌 | 135~141 | 7 | +| 부록 | 142~237 | 96 | +| **합계** | | **~239** | + +- 제2장(개발자)과 제3장(서비스 제공자)이 본문의 핵심 (총 96페이지) +- 부록이 전체의 약 40%를 차지 (96페이지) + +--- + +## 6. 이슈 탐지 + +### [심각] 중복 섹션 (7회 반복) +- 섹션 번호 1.1.1이 7회 등장 (라인 107, 579, 2005, 2524, 5072, 5532, 12275) +- 체크리스트 요약 → 본문 → 부록에서 동일 섹션 번호 체계가 반복됨 +- **원인**: 체크리스트, 개발자편, 서비스 제공자편, 부록이 동일 번호 체계(1.1~6.1)를 독립적으로 사용 + +### [중간] 페이지 번호 잔재 (300건 이상) +- 로마 숫자: ii, iii, iv, v, vi, vii, viii, ix (라인 18, 43, 91, 233, 399, 563, 700, 822) +- 아라비아 숫자: 단독 줄로 나타나는 페이지 번호 (46건 이상) +- 섹션 번호와 혼동 가능성 있음 + +### [중간] 표 구조 손실 +- 마크다운 파이프 테이블(`|`) 0건 — 모든 표가 플레인 텍스트로 평탄화됨 +- 체크리스트 Y/N/N/A 컬럼이 각각 별도 줄로 분리됨 +- 체크박스(□) 기호가 구조 없이 산재 + +### [중간] 헤딩 레벨 불일치 +- 목차의 `##` 헤딩에 점선(···)과 페이지 번호가 포함됨 +- `####`가 검증항목 번호에 사용되나, 같은 레벨의 내용이 `##`로도 표기됨 +- 일관된 계층 구조 부재 + +### [경미] 헤딩 텍스트 줄바꿈 +- 긴 검증항목 제목이 다음 줄로 넘어감 (라인 368, 455, 2248, 2279 등) +- 예: `#### 3.4.5 개발 환경에서 LLM을 사용할 때...` → 다음 줄로 이어짐 + +### [경미] 빈 섹션 +- `####` 헤딩 직후 바로 다음 `####` 헤딩이 이어지는 경우 다수 +- 체크리스트 영역에서 주로 발생 (내용 없이 번호만 나열) + +### [정보] 누락 페이지 +- 이미지 기준으로 Page 10, 24, 120, 150의 이미지가 없음 +- 해당 페이지가 텍스트만 있거나 빈 페이지일 가능성 + +--- + +## 7. 변환 품질 종합 평가 + +| 평가 항목 | 등급 | 설명 | +|---|---|---| +| 텍스트 추출 | ★★★★★ | 본문 텍스트가 거의 완벽하게 추출됨 | +| 구조 보존 | ★★★☆☆ | 장/절 구조는 보존되나 헤딩 레벨 불일치 | +| 표 변환 | ★☆☆☆☆ | 모든 표가 플레인 텍스트로 평탄화됨 | +| 이미지 추출 | ★★★★★ | 1,125개 이미지 체계적으로 추출 | +| 정리 상태 | ★★☆☆☆ | 페이지 번호 잔재, 중복 섹션 번호 존재 | +| **레퍼런스 활용도** | **★★★★☆** | **집필 참고용으로 충분히 활용 가능** | + +--- + +## 8. 활용 권장사항 + +1. **검증항목 참조 시**: 섹션 번호만으로는 장을 특정할 수 없음 → 반드시 "제2장 3.4.5" 등 장 번호와 함께 참조할 것 +2. **표/체크리스트 참조 시**: 원본 PDF를 함께 참조 권장 +3. **용어 활용 시**: 부록 1(용어 정의)의 정의를 우선 적용 +4. **도해 작성 시**: 그림 1-1~2-1 및 부록 그림 1~8의 이미지 파일 직접 참조 가능 diff --git a/authorkit/references/ref-013/analysis.md b/authorkit/references/ref-013/analysis.md new file mode 100644 index 0000000..01901c5 --- /dev/null +++ b/authorkit/references/ref-013/analysis.md @@ -0,0 +1,146 @@ +# ref-013: 제로트러스트 가이드라인 2.0 — 분석 결과 + +> **역할**: 메인 문서 (원본 프레임워크) +> **파일**: `241203_제로트러스트_가이드라인_2.0.pdf` +> **발행**: 한국제로트러스트포럼, 2024.12 +> **분량**: 245페이지 | 261,584자 | 60,844단어 | 이미지 180개 + +--- + +## 1. 구조 (목차) + +| 장 | 절 | 제목 | 페이지 | +|---|---|------|-------| +| 제1장 | | 제로트러스트 가이드라인 2.0 개요 | p.8 | +| | 제1절 | 가이드라인 2.0 발간 배경 | p.8 | +| | 제2절 | 가이드라인 2.0 목적 및 구성 | p.14 | +| | 제3절 | 가이드라인 2.0 주안점 | p.17 | +| 제2장 | | 제로트러스트 보안 모델 및 도입 필요성 | p.22 | +| | 제1절 | 제로트러스트 아키텍처 보안 모델 | p.22 | +| | | 1. 제로트러스트 개념 모델 | p.23 | +| | | 2. 제로트러스트 아키텍처 기본 원리 | p.24 | +| | | 3. 제로트러스트 아키텍처 보안 모델 | p.26 | +| | 제2절 | 기업은 왜 제로트러스트를 도입해야 하는가? | p.28 | +| | | 1. 제로트러스트와 비즈니스 목표의 관계 | p.29 | +| | | 2. 비용 절감 효과 및 ROI | p.30 | +| | | 3. 현재 보안 환경의 취약점 및 한계 개선 | p.30 | +| | | 4. IT 환경 변화에 대한 적응력 | p.32 | +| | | 5. 기업 이미지 개선 | p.32 | +| 제3장 | | 제로트러스트 성숙도 모델 및 세부역량 | p.34 | +| | 제1절 | 제로트러스트 성숙도 모델 2.0 | p.35 | +| | | 1. 성숙도 모델의 의미와 역할 | p.36 | +| | | 2. 도입 절차의 세부 단계별 성숙도 모델 활용 방안 | p.38 | +| | | 3. 기업망 핵심 요소 | p.41 | +| | | 4. 성숙도 모델 2.0 (4단계: 기존/초기/향상/최적화) | p.43 | +| | 제2절 | 성숙도 모델 기반 보안 세부역량 | p.51 | +| | | 핵심요소별 기능 및 세부역량 연계표 (표 3-10) | p.55 | +| | | 식별자·신원 (표 3-11~3-14) | p.57 | +| | | 기기 및 엔드포인트 (표 3-15~3-18) | p.61 | +| | | 네트워크 (표 3-19~3-23) | p.65 | +| | | 시스템 (표 3-24~3-27) | p.71 | +| | | 애플리케이션 및 워크로드 (표 3-28~3-32) | p.75 | +| | | 데이터 (표 3-33~3-37) | p.80 | +| | | 가시성 및 분석 (표 3-38) | p.85 | +| | | 자동화 및 통합 (표 3-39) | p.88 | +| | 제3절 | 성숙도 모델 기반 구현 방안 | p.90 | +| 제4장 | | 제로트러스트 도입 준비 방안 | p.106 | +| | 제1절 | 제로트러스트 아키텍처 도입 고려사항 | p.106 | +| | 제2절 | 아키텍처 구축을 위한 보안 환경 및 현황 분석 및 목표 수립 | p.120 | +| | 제3절 | 아키텍처 도입 방안 | p.128 | +| | 제4절 | 아키텍처 도입 준비 사례 | p.139 | +| 제5장 | | 제로트러스트 도입 수준 분석 | p.150 | +| | 제1절 | 성숙도 모델 기반 도입 수준 분석 (체크리스트 표 5-1~5-8) | p.150 | +| | 제2절 | 침투 시험 기반 효과성 분석 | p.170 | +| 부록 | | 용어 및 약어 정의, 국내외 제로트러스트 인식 현황 | p.184 | + +총 213개 섹션 감지 + +--- + +## 2. 그림/표 목록 + +### 그림 (21개) + +| 번호 | 제목 | 페이지 | +|------|------|-------| +| 그림 2-1 | 제로트러스트 접근의 개념 모델 | p.23 | +| 그림 2-2 | 제로트러스트 아키텍처 보안 모델 및 논리 구성 요소 | p.26 | +| 그림 3-1 | 제로트러스트 도입 절차의 세부 단계별 성숙도 모델 활용 방안 | p.38 | +| 그림 3-2 | 제로트러스트 성숙도 모델 2.0 요약 | p.45 | +| 그림 3-3 | 성숙도 모델 2.0에서 제시한 기능 및 세부역량 | p.54 | +| 그림 4-1 | 붉은색 막대그래프 | p.109 | +| 그림 4-2 | 제로트러스트 아키텍처 접근 주체와 보호 대상 리소스 | p.130 | +| 그림 4-3 | 성숙도 모델 기반 제로트러스트 아키텍처 분석 및 설계 | p.136 | +| 그림 4-4 | 현재 보안 아키텍처 성숙도 수준 분석 후 목표 모델 구성 절차 | p.138 | +| 그림 4-5 | 안전한 소프트웨어 개발 환경 구축을 위한 제로트러스트 아키텍처 | p.141 | +| 그림 5-1 | TIBER-EU 프레임워크 | p.173 | +| 그림 5-2 | 제로트러스트 침투 시험 | p.176 | +| 그림 5-3 | 제로트러스트 침투시험 예시 (네트워크 세분화 검증 시나리오) | p.177 | + +### 표 (73개) + +주요 표: +- 표 1-1: 제로트러스트 관련 미 연방정부 주요 정책 대응 현황 (p.12) +- 표 1-2: 기업 구성원별 필독 항목 (p.17) +- 표 1-3: 본 문서와 가이드라인 1.0 비교 (p.19) +- 표 2-1: 제로트러스트 아키텍처 기본 원리 (p.25) +- 표 2-2: 제로트러스트 아키텍처 논리 구성 요소 (p.28) +- 표 3-1~3-9: 핵심 요소별 제로트러스트 성숙도 모델 (p.42~51) +- 표 3-10: 성숙도 모델 2.0 핵심요소/기능/세부역량 연계표 (p.55) +- 표 3-11~3-39: 핵심요소별 세부역량 및 성숙도 정의 (p.57~88) +- 표 4-1~4-6: 도입 고려사항, 미 국방부 전략, 조직 구성, 세부역량 도출 (p.107~146) +- 표 5-1~5-8: 핵심 요소별 체크리스트 (p.154~169) +- 표 5-9~5-11: 침투시험 유형 및 시나리오 (p.172~178) + +--- + +## 3. 핵심 용어/약어 + +### 주요 이중언어 용어 (빈도순) + +| 빈도 | 용어 | +|------|------| +| 10회 | 다중인증(MFA) | +| 8회 | 정책정보지점(PIP) | +| 7회 | 정책시행지점(PEP) | +| 7회 | 데이터 손실 방지(DLP) | +| 5회 | 역할기반 접근제어(RBAC) | +| 4회 | 정책결정지점(PDP) | +| 4회 | 속성기반 접근제어(ABAC) | +| 4회 | 정보보호 관리체계(ISMS-P) | +| 3회 | 최고정보보호책임자(CISO) | +| 3회 | 정책 엔진(PE) / 정책 관리자(PA) | + +### 약어 정의 + +| 약어 | 풀네임 | +|------|--------| +| ABAC | Attribute-Based Access Control | +| BAS | Breach and Attack Simulation | +| CASB | Cloud Access Security Broker | +| CDM | Continuous Diagnostics and Mitigation | +| CTI | Cyber-Threat Intelligence | +| DLP | Data Loss Prevention | +| EDR | Endpoint Detection and Response | +| FIM | File Integrity Monitoring | +| MDM | Mobile Device Management | +| MFA | Multi-Factor Authentication | +| NAC | Network Access Control | +| NGFW | Next Generation Firewall | +| PAM | Privileged Access Management | +| RBAC | Role-Based Access Control | +| SASE | Secure Access Service Edge | +| SBOM | Software Bill Of Materials | +| SDLC | Software Development Life-Cycle | +| SDP | Software Defined Perimeter | +| SIEM | Security Information and Event Management | +| UEBA | User and Entity Behavior Analytics | + +--- + +## 4. 이슈/특이사항 + +- 성숙도 모델 4단계 (기존/Traditional → 초기/Initial → 향상/Advanced → 최적화/Optimal)는 CISA ZT Maturity Model과 유사하나 한국형으로 재정의 +- 제5장의 체크리스트(표 5-1~5-8)는 kesekit-check/kesekit-start에 직접 통합 가능한 구조 +- 침투시험(제5장 제2절)은 TIBER-EU 프레임워크 참조 — 국내 독자적 ZT 침투시험 방법론 제시 +- 부록에 국내외 제로트러스트 인식 현황 설문 데이터 포함 diff --git a/authorkit/references/ref-014/analysis.md b/authorkit/references/ref-014/analysis.md new file mode 100644 index 0000000..257ff51 --- /dev/null +++ b/authorkit/references/ref-014/analysis.md @@ -0,0 +1,95 @@ +# ref-014: 제로트러스트 성숙도 모델 해설서 — 분석 결과 + +> **역할**: 서브 문서 (메인 가이드라인 2.0의 제3장 실무 상세화) +> **파일**: `제로트러스트 성숙도 모델 해설서.pdf` +> **발행**: 보안 실무자를 위한 해설서 +> **분량**: 182페이지 | 228,479자 | 51,419단어 | 이미지 165개 + +--- + +## 1. 구조 (목차) + +| 장 | 절 | 제목 | 페이지 | +|---|---|------|-------| +| 제1장 | | 제로트러스트 성숙도 모델 해설서 개요 | p.6 | +| | 1. | 성숙도 모델 해설서의 목적 및 구성 | p.6 | +| | 1.1 | 성숙도 모델 해설서의 목적 | p.6 | +| | 1.2 | 성숙도 모델 해설서 구성 | p.7 | +| | 2. | 성숙도 수준 평가 절차 및 도입 절차 | p.8 | +| | 2.1 | 성숙도 수준 평가 절차 | p.8 | +| | 2.2 | 성숙도 수준 평가 기반 도입 절차 | p.11 | +| 제2장 | | 제로트러스트 성숙도 모델 소개 | p.16 | +| | 1. | 성숙도 모델 소개 | p.16 | +| | | 성숙도 수준 4단계: 기존/초기/향상/최적화 | p.26-28 | +| 제3장 | | 핵심 요소별 세부역량 해설 | p.42 | +| | 1. | 식별자 (Identity) | p.42 | +| | | 1.1 식별자 관리 | | +| | | 1.2 인증 | | +| | | 1.3 위험도 평가 | | +| | | 1.4 접근 관리 | | +| | 2. | 기기 및 엔드포인트 (Device & Endpoint) | p.59 | +| | | 2.1 정책 준수 모니터링 | | +| | | 2.2 데이터 접근제어 | | +| | | 2.3 자산 관리 | | +| | | 2.4 기기 위협 보호 | | +| | 3. | 네트워크 (Network) | p.71 | +| | | 3.1 네트워크 세분화 | | +| | | 3.2 위협 대응 | | +| | | 3.3 트래픽 암호화 | | +| | | 3.4 트래픽 관리 | | +| | | 3.5 네트워크 회복성 | | +| | 4. | 시스템 (System) | p.86 | +| | | 4.1 접근통제 | | +| | | 4.2 시스템 계정 관리 | | +| | | 4.3 네트워크 분리 정책 | | +| | | 4.4 시스템 보안 및 정책 관리 | | +| | 5. | 애플리케이션 및 워크로드 (Application & Workload) | p.99 | +| | | 5.1 애플리케이션 접근 | | +| | | 5.2 애플리케이션 위협 보호 | | +| | | 5.3 접근 가능한 애플리케이션 | | +| | | 5.4 안전한 애플리케이션 배포 | | +| | | 5.5 소프트웨어·애플리케이션 보안 | | +| | 6. | 데이터 (Data) | p.117 | +| | | 6.1 데이터 목록 관리 | | +| | | 6.2 접근 결정방법 | | +| | | 6.3 데이터 암호화 | | +| | | 6.4 데이터 분류 | | +| | | 6.5 데이터 손실 방지 | | +| 부록 | | | p.161 | + +--- + +## 2. 그림/표 + +- 그림: 감지되지 않음 (캡션 없이 임베디드 이미지로만 존재, 165개) +- 표: 감지되지 않음 (본문 내 표 형식이 PDF에서 텍스트로 추출되지 않는 구조) + +> 참고: 이 문서는 가이드라인 2.0의 표 3-11~3-39의 각 항목을 풀어서 설명하는 구조로, 체크리스트 항목별로 "무엇을/어떻게/왜" 구현해야 하는지 상세 해설 + +--- + +## 3. 핵심 용어 + +| 빈도 | 용어 | +|------|------| +| 4회 | 데이터(Data) | +| 3회 | 네트워크(Network), 시스템(System), 기존(Traditional) | +| 2회 | 표준운영절차(SOP), RBAC, ITAM, SIEM, CTI, DLP, DR, SDLC | + +> 이 문서는 가이드라인 2.0에서 정의된 약어를 그대로 사용하므로 별도 약어 정의가 적음 + +--- + +## 4. 메인 문서(ref-013)와의 관계 + +- 가이드라인 2.0의 **제3장 제2절(성숙도 모델 기반 보안 세부역량)**을 실무 수준으로 확장 +- 6대 핵심 요소(식별자/기기/네트워크/시스템/애플리케이션/데이터)의 각 기능별 세부역량을 4단계 성숙도에 맞춰 해설 +- **체크리스트 항목별 상세 설명** 포함 → kesekit-check 통합 시 이 문서가 "해설 데이터" 역할 + +--- + +## 5. 이슈/특이사항 + +- PDF에서 그림/표 캡션이 텍스트로 추출되지 않음 — OCR 변환 시 PaddleOCR 사용 권장 +- 문서 전체가 "체크리스트 해설" 구조로, 섹션별 분량이 균일함 (각 핵심 요소당 약 20~30p) +- 실무자가 즉시 활용 가능한 구체적 구현 가이드 포함 diff --git a/authorkit/references/ref-015/analysis.md b/authorkit/references/ref-015/analysis.md new file mode 100644 index 0000000..5b143b8 --- /dev/null +++ b/authorkit/references/ref-015/analysis.md @@ -0,0 +1,129 @@ +# ref-015: OT 환경의 제로트러스트 적용 안내서 — 분석 결과 + +> **역할**: 서브 문서 (OT/ICS 도메인 특화) +> **파일**: `251222_OT_환경의_제로트러스트_적용_안내서 (1).pdf` +> **발행**: 2025.12 +> **분량**: 67페이지 | 77,784자 | 16,870단어 | 이미지 152개 + +--- + +## 1. 구조 (목차) + +| 장 | 절 | 제목 | 페이지 | +|---|---|------|-------| +| 제1장 | | 서론 | p.9 | +| | 1-1 | 문서 발간 배경 | p.9 | +| | 1-2 | 문서 발간 목적 | p.10 | +| | 1-3 | 문서 구성 | p.10 | +| 제2장 | | OT 및 제로트러스트 개요 | p.11 | +| | 2-1 | OT(운영 기술) | p.11 | +| | 2-2 | 제로트러스트(Zero Trust) | p.16 | +| 제3장 | | OT 특화 제로트러스트(OT ZT)의 필요성 | p.21 | +| | 3-1 | OT 위협 사례 | p.21 | +| | 3-2 | OT 환경 특성 및 고유 취약점 | p.26 | +| | 3-3 | OT 환경에서의 제로트러스트 필요성 | p.29 | +| 제4장 | | 국내외 OT 특화 제로트러스트 정책 동향 및 적용 사례 | p.32 | +| | | - NRC(미 원자력규제위원회) 제로트러스트 | p.32 | +| | | - CSA(사이버보안청) OT 환경 제로트러스트 | p.40 | +| | | - OTZTA(OT Zero Trust Alliance) | p.42 | +| | | - Microsoft Defender for IoT | p.44 | +| | | - 국내 OT 보안 지침 현황 | p.47 | +| 제5장 | | OT 특화 제로트러스트 적용 방안 | p.50 | +| | | - OT 특화 제로트러스트 핵심 원칙 | p.50 | +| | | - 적용 고려 사항 | p.51 | +| | | - 핵심 요소별 기능 요구사항 | p.52 | +| | | - 아키텍처 배치 시나리오 | p.53 | +| | | - OT 제로트러스트 도입 로드맵 | p.55 | +| 제6장 | | 결론 | p.60 | + +--- + +## 2. 그림/표 목록 + +### 그림 (20개) + +| 번호 | 제목 | 페이지 | +|------|------|-------| +| 그림 1 | OT 환경 내 구성 요소 현황 | p.13 | +| 그림 2 | OT 구성 요소 및 네트워크 구조 | p.14 | +| 그림 3 | IEC 62443 표준 시리즈 | p.15 | +| 그림 4 | 제로트러스트 아키텍처 보안 모델 및 논리 구성 요소 | p.19 | +| 그림 5 | OT 보안 성숙도별 사이버 침해사고 비율 | p.22 | +| 그림 6 | OT 레벨별 사이버 침해사건 발생 비율 | p.22 | +| 그림 7 | NRC의 원자력시설 제로트러스트 핵심 요소 및 교차 요소 | p.33 | +| 그림 8 | NRC의 원자력시설 논리적 제로트러스트 아키텍처 | p.34 | +| 그림 9 | NRC의 원자력시설 접근제어 배치 모델 | p.35 | +| 그림 10 | NRC 신뢰 점수 계산 방법 예시 | p.36 | +| 그림 11 | NRC의 신뢰 속성 | p.37 | +| 그림 12 | NRC의 신기술 도입을 위한 위험 관리 사이클 | p.37 | +| 그림 13 | CSA의 OT 환경 제로트러스트 접근법 | p.40 | +| 그림 14 | 음용수 시스템을 위한 IT/OT 환경 구분 | p.43 | +| 그림 15 | Microsoft Defender for IoT 배치 방안 | p.44 | +| 그림 16 | 제로트러스트 아키텍처 구성 요소 배치 시나리오 예시 1 | p.53 | +| 그림 17 | 제로트러스트 아키텍처 구성 요소 배치 시나리오 예시 2 | p.54 | +| 그림 18 | OT 환경에 적합한 제로트러스트 도입 로드맵 | p.55 | + +### 표 (26개) + +| 번호 | 제목 | 페이지 | +|------|------|-------| +| 표 1 | 운영기술과 정보기술 차이 | p.11 | +| 표 2 | 분야별 OT 적용 시스템 예시 | p.12 | +| 표 3 | 제로트러스트 기본 원리 | p.17 | +| 표 4 | 주요국 제로트러스트 정책 현황 | p.20 | +| 표 5 | OT 보안 성숙도 설명 | p.21 | +| 표 6 | 연도별 OT 시스템 랜섬웨어 공격 사례 | p.23 | +| 표 7 | 연도별 OT 시스템 대상 주요 사이버 공격 사례 | p.24 | +| 표 8 | 변전소 내 메시지 성능 요구사항 | p.27 | +| 표 9 | IT 제로트러스트와 OT 환경 제약사항 비교 | p.30 | +| 표 10-14 | NRC 관련 기술보고서, 핵심/교차 요소, PIP 요소, 위험 관리 단계 | p.32-38 | +| 표 15-17 | CSA/SANS/OTZTA OT 제로트러스트 관련 | p.41-42 | +| 표 18-19 | 국내 산업제어시스템 보안 요구사항 및 지침 | p.47-48 | +| 표 20 | 제로트러스트 도입 시범사업 선정 과제 | p.49 | +| 표 21 | OT 특화 제로트러스트 핵심 원칙 | p.50 | +| 표 22 | OT 특화 제로트러스트 적용 고려 사항 | p.51 | +| 표 23 | OT 특화 제로트러스트 핵심 요소별 기능 요구사항 | p.52 | +| 표 24 | DAAS 요소 | p.56 | + +--- + +## 3. 핵심 용어 + +| 빈도 | 용어 | +|------|------| +| 9회 | 정책시행지점(PEP) | +| 7회 | OT 제로트러스트(OT ZT) | +| 6회 | 한국인터넷진흥원(KISA) | +| 5회 | 제로트러스트(Zero Trust) | +| 4회 | 구역(Zone), 정책 엔진(PE), 정책 관리자(PA), 사이버보안청(CSA) | +| 3회 | 정책결정지점(PDP), 정책정보지점(PIP), 경제산업성(METI) | +| 2회 | 미 국방부(DoD), 업무영향분석(BIA), 한국정보통신기술협회(TTA) | + +### OT 특화 용어 +- SCADA, DCS, PLC, RTU, HMI +- IEC 62443, Purdue 모델 +- 마이크로세그멘테이션, DPI(Deep Packet Inspection) +- SMR(소형모듈원자로) + +--- + +## 4. 메인 문서(ref-013)와의 관계 + +- 가이드라인 2.0의 제로트러스트 프레임워크를 **OT/ICS 환경에 맞게 변환** +- IT ZT vs OT ZT 비교표(표 9)가 핵심 차이점 정리 +- OT 핵심 원칙 4가지: + 1. 실시간성·가용성 유지 + 2. OT 장비의 독립성 유지 + 3. OT·IT 전역에서의 침해 가정 + 4. 지속적 모니터링 +- CSA 5단계 도입 로드맵 참조 + +--- + +## 5. 이슈/특이사항 + +- 67페이지로 가장 짧지만, OT 위협 사례(Stuxnet, Colonial Pipeline 등)와 실제 배치 시나리오가 구체적 +- NRC(미 원자력규제위원회) 제로트러스트가 상당한 분량 할당 — 원전/SMR 관련 OT 보안 최신 동향 +- 국내 산업별 OT 보안 지침(TTA 표준, KISA 가이드) 정리 포함 +- kesekit의 **CII(주요정보통신기반시설)** 점검과 직접 연계 가능 +- 우주 보안의 지상국/위성 통신도 OT 관점에서 유사한 접근 가능 diff --git a/authorkit/setup-questionnaire.md b/authorkit/setup-questionnaire.md index d3eb07f..15510ce 100644 --- a/authorkit/setup-questionnaire.md +++ b/authorkit/setup-questionnaire.md @@ -6,16 +6,16 @@ --- ## 1. 작업 유형 -- [ ] 참고자료를 기반으로 새 책 집필 +- [x] 참고자료를 기반으로 새 책 집필 ## 2. 도서 분류 -- [ ] 실용/교육 가이드 (예: 엑셀 입문서) +- [x] 실용/교육 가이드 (예: 엑셀 입문서) ## 3. 대상 독자 -> Answer: 바이브코딩을 하는사람, 개발자지만 서버를 운용하는 사람, 정부과제로 개발을 하는사람, 공공조달시장에서 개발을 하는 사람, 정부관련 코딩하는 사람, 서버를 처음 다루는 사람 +> Answer: 바이브코딩을 하는 사람, 개발자지만 서버를 운용하는 사람, 정부과제로 개발을 하는 사람, 공공조달시장에서 개발을 하는 사람, 정부 관련 코딩하는 사람, 서버를 처음 다루는 사람, JavaScript/Python으로 웹 서비스를 개발하는 사람, AI 도구(Claude, Cursor, Copilot)로 코딩하면서 보안을 신경 쓰고 싶은 사람 ## 4. 책 제목 (가제) > Answer: KESE KIT: Korea Enhanced Security Evaluation - KISA Infrastructure Toolkit @@ -24,18 +24,41 @@ 참고자료가 있는 폴더 경로를 입력하세요. 지원 형식: pdf, docx, txt, xlsx, hwpx 폴더가 아닌 경우 파일명을 직접 입력하세요. 없으면 "없음"이라고 입력하세요. -> Answer: C:\Users\admin\PycharmProjects\PawnERP\Skills\KESE\문서 +> Answer: C:\Users\Nowzero\PycharmProjects\Skills\KESE-KIT\authorkit\new pdf + +참고자료 목록: +- ref-011: Javascript_시큐어코딩_가이드(2023년_개정본).pdf (159p, KISA, 42개 항목) +- ref-012: Python_시큐어코딩_가이드(2023년_개정본).pdf (176p, KISA, 46개 항목) + +기존 참고자료 (authorkit/converted/에 분석 완료): +- ref-001~010: CII 기술/관리/물리, AI 보안, 로봇 보안, 우주 보안 가이드 ## 6. 기존 원고 원고가 있는 폴더 경로를 입력하세요. 지원 형식: pdf, docx, txt, xlsx, hwpx, md 폴더가 아닌 경우 파일명을 직접 입력하세요. 없으면 "없음"이라고 입력하세요. -> Answer: +> Answer: 없음 (기존 kesekit 스킬의 references/ 파일들을 원고 대신 활용) ## 7. 목차 -- [ ] 있음 (아래에 작성하거나 파일 경로 입력) +- [x] 있음 (아래에 작성하거나 파일 경로 입력) - [ ] 없음 (참고자료 기반으로 제안받고 싶음) -> Answer: 없음 +> Answer: + +### 변환 목표 구조 (kesekit guide 스킬용 reference 파일) + +``` +references/secure-coding/ +├── overview.md ← 시큐어코딩 개요, 7개 카테고리 설명, CWE 매핑 요약 +├── javascript.md ← JS 시큐어코딩 42개 항목 (안전/위험 코드 예시) +└── python.md ← Python 시큐어코딩 46개 항목 (안전/위험 코드 예시) +``` + +각 항목 구조: +1. 보안약점명 + CWE 코드 +2. 설명 (위험성, 영향) +3. 안전하지 않은 코드 예시 +4. 안전한 코드 예시 +5. 점검 기준 ## 8. 문체 설정 기존 원고가 있으면 비워두세요 — 자동 분석됩니다. @@ -47,11 +70,11 @@ > Answer: 평어 특수 요소 (예: 팁 박스, 주의 박스, 연습문제): -> Answer: 팁박스, 주의박스 +> Answer: 팁박스, 주의박스, 코드블록(안전/위험 코드 쌍) 용어 표기 형식 (예: "한글(영문, 약어)"): -> Answer: 한글(영문, 약어) +> Answer: 한글(영문, 약어) — 예: SQL 삽입(SQL Injection, CWE-89) ## 9. 작업 디렉토리 비워두면 현재 프로젝트 루트에 `authorkit/` 폴더가 생성됩니다. -> Answer: +> Answer: C:\Users\Nowzero\PycharmProjects\Skills\KESE-KIT\authorkit diff --git a/authorkit/structure.md b/authorkit/structure.md index 2f9a7fc..fa1963b 100644 --- a/authorkit/structure.md +++ b/authorkit/structure.md @@ -19,7 +19,13 @@ |------|------|:------:|:------:| | ref-001 | 관리적/물리적 취약점 | 136개 | 332 | | ref-002 | 기술적 취약점 | ~424개 | 873 | -| **합계** | - | **~560개** | **1,205** | +| ref-003 | AI 보안 (개발자/서비스제공자/이용자) | 239페이지 | 239 | +| ref-004 | 로봇 보안모델 | - | 156 | +| ref-005 | 로봇 보안 체크리스트 해설서 | 103개 | 225 | +| ref-006~010 | 우주 보안모델 Part1/Part2/해설서 | 53개 | 575 | +| ref-011 | **JavaScript 시큐어코딩 가이드** | **42개** | **159** | +| ref-012 | **Python 시큐어코딩 가이드** | **46개** | **176** | +| **합계** | - | **~800+개** | **2,735** | --- @@ -169,6 +175,78 @@ --- +### Part V. AI 보안 점검 (ref-003 기반) + +#### 23장. AI 보안 개요 +- 23-1. AI 보안 위협 유형 (적대적 예제, 오염 공격, 모델 추출 등) +- 23-2. AI 보안 안내서의 적용범위 +- 23-3. AI 서비스 생명주기와 보안 프레임워크 + +#### 24장. AI 개발자를 위한 보안 점검 +- 24-1. 계획 및 설계 — 거버넌스, 위험관리 (1.1~1.2) +- 24-2. 데이터 수집 및 준비 — 수집/전처리, 무결성, 라벨링 (2.1~2.3) +- 24-3. 모델 개발 — 학습환경, 알고리즘, 오픈소스, 개발환경 (3.1~3.4) +- 24-4. 모델 배포 — 배포보안, API보안 (4.1~4.2) +- 24-5. 모니터링 및 유지보수 — 운영보안, 사후관리 (5.1~5.2) +- 24-6. 파기 — 파기 시 보안 (6.1) + +#### 25장. AI 서비스 제공자를 위한 보안 점검 +- 25-1. 서비스 제공자 보안 프레임워크 +- 25-2. Generative AI 서비스 보안 요구사항 +- 25-3. Predictive AI 서비스 보안 요구사항 +- 25-4. 사용자 피드백 및 개선 과정 보안 + +#### 26장. AI 이용자를 위한 보안 수칙 +- 26-1. AI 이용자 대상 보안위협 사례 +- 26-2. AI 서비스 이용 시 보안 수칙 +- 26-3. 바이브코딩 환경에서의 AI 보안 + +--- + +### Part VI. 시큐어코딩 가이드 (ref-011, ref-012 기반) + +#### 27장. 시큐어코딩 개요 +- 27-1. 시큐어코딩이란? +- 27-2. 7개 보안약점 카테고리 이해 +- 27-3. CWE 매핑 체계 +- 27-4. JavaScript vs Python 공통/차이 항목 비교 + +#### 28장. 입력데이터 검증 및 표현 +- 28-1. SQL 삽입 (CWE-89) — JS: Sequelize/Mongoose, Py: Django ORM/SQLAlchemy +- 28-2. 코드 삽입 (CWE-94, 95) — JS: eval(), Py: exec()/eval() +- 28-3. 경로 조작 및 자원 삽입 (CWE-22, 99) +- 28-4. 크로스사이트 스크립트 XSS (CWE-79) +- 28-5. 운영체제 명령어 삽입 (CWE-78) +- 28-6. 파일 업로드 / URL 리다이렉트 / XXE / XML 삽입 / LDAP +- 28-7. CSRF (CWE-352) / SSRF (CWE-918) +- 28-8. [Python만] HTTP 응답분할, 정수형 오버플로우, 포맷 스트링 + +#### 29장. 보안기능 +- 29-1. 인증 및 인가 (CWE-306, 285, 732) +- 29-2. 암호화 — 알고리즘, 키 길이, 난수 (CWE-327, 326, 330) +- 29-3. 중요정보 보호 — 하드코딩, 평문 저장/전송 (CWE-259, 312, 319) +- 29-4. 패스워드 / 전자서명 / 인증서 (CWE-521, 347, 295) +- 29-5. 쿠키, 주석문, 솔트, 무결성, 인증 제한 (CWE-539, 615, 759, 494, 307) + +#### 30장. 시간/상태, 에러처리, 코드오류 +- 30-1. TOCTOU 경쟁조건 (CWE-367) — Python +- 30-2. 무한 반복/재귀 (CWE-835, 674) +- 30-3. 오류 메시지 정보노출 (CWE-209) / 오류 대응 부재 (CWE-390) +- 30-4. Null Pointer (CWE-476) / 자원 해제 (CWE-404) +- 30-5. 역직렬화 (CWE-502) — JS: JSON, Py: pickle + +#### 31장. 캡슐화, API 오용 +- 31-1. 세션 데이터 노출 / 디버그 코드 (CWE-488, 489) +- 31-2. Private 배열 보호 (CWE-495, 496) +- 31-3. DNS lookup 의존 / 취약한 API (CWE-350) + +#### 32장. 바이브코딩 환경의 시큐어코딩 +- 32-1. AI 도구가 생성하는 코드의 보안 취약점 패턴 +- 32-2. Claude/Cursor/Copilot에 시큐어코딩 프롬프트 적용하기 +- 32-3. 코드 리뷰 자동화와 CWE 기반 점검 + +--- + ### 부록 #### A. 체크리스트 템플릿 @@ -200,17 +278,21 @@ | Part II. 기술적 취약점 | 10장 | 250~300 | | Part III. 관리적·물리적 | 7장 | 100~120 | | Part IV. 실무 적용 | 3장 | 50~60 | +| Part V. AI 보안 점검 | 4장 | 80~100 | +| Part VI. 시큐어코딩 가이드 | 6장 | 120~150 | | 부록 | 4개 | 40~50 | -| **합계** | **22장** | **470~570** | +| **합계** | **32장** | **670~820** | --- ## 다음 단계 1. 목차 검토 및 확정 -2. `/authorkit.draft`로 각 장 집필 시작 -3. 우선 집필 추천: 3장(Unix 서버), 6장(웹 앱), 13장(정책) +2. `/authorkit:compare`로 ref-011(JS) vs ref-012(Python) 정밀 대조 +3. `/authorkit:diagram`으로 CWE 카테고리 관계도 생성 +4. `/authorkit:draft`로 각 장 집필 시작 +5. 우선 집필 추천: 27장(시큐어코딩 개요), 28장(입력데이터), 32장(바이브코딩) --- -*분석 완료: 2026-03-27* +*최종 업데이트: 2026-04-02 (ref-011/012 시큐어코딩 가이드 추가, Part VI 신설)* diff --git a/docs/README.ar.md b/docs/README.ar.md index 28c6eb3..a2a95a6 100644 --- a/docs/README.ar.md +++ b/docs/README.ar.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -اضافة لـ Claude Code لتقييم الثغرات الامنية في البنى التحتية الحيوية للمعلومات (CII) وتقييم امن الذكاء الاصطناعي، استنادا الى ارشادات وكالة الانترنت والامن الكورية (KISA). +اضافة لـ Claude Code لتقييم الثغرات الامنية في البنى التحتية الحيوية للمعلومات (CII) وتقييم امن الذكاء الاصطناعي وامن الروبوتات وامن الفضاء ودليل البرمجة الامنة وتقييم امن الثقة الصفرية (Zero Trust)، استنادا الى ارشادات وكالة الانترنت والامن الكورية (KISA). --- ## نظرة عامة -KESE (KISA Enhanced Security Evaluation Kit) هي اضافة لـ Claude Code توفر امكانيات شاملة لتقييم الثغرات الامنية بناء على ارشادات وكالة الانترنت والامن الكورية (KISA). تدعم كلا من تقييمات البنى التحتية الحيوية للمعلومات (CII) وتقييمات امن الذكاء الاصطناعي. +KESE (KISA Enhanced Security Evaluation Kit) هي اضافة لـ Claude Code توفر امكانيات شاملة لتقييم الثغرات الامنية بناء على ارشادات وكالة الانترنت والامن الكورية (KISA). تدعم تقييمات البنى التحتية الحيوية للمعلومات (CII) وامن الذكاء الاصطناعي وامن الروبوتات وامن الفضاء والبرمجة الامنة وامن الثقة الصفرية (Zero Trust). ## الميزات | المهارة | الوصف | |---------|-------| -| `/kesekit-en:start` | تشغيل تقييم شامل للثغرات الامنية (CII اكثر من 560 عنصرا او امن الذكاء الاصطناعي) | -| `/kesekit-en:check` | قائمة فحص الامتثال الامني قبل النشر | -| `/kesekit-en:fix` | انشاء تلقائي لنصوص التقوية والاصلاحات الامنية | -| `/kesekit-en:guide` | انشاء موجهات البرمجة الامنة لادوات الذكاء الاصطناعي | +| `/kesekit-start` | تشغيل تقييم شامل للثغرات الامنية (CII اكثر من 560 / امن الذكاء الاصطناعي / امن الروبوتات / امن الفضاء / البرمجة الامنة / الثقة الصفرية) | +| `/kesekit-check` | قائمة فحص الامتثال الامني قبل النشر (CII / الذكاء الاصطناعي / الروبوتات / الفضاء / البرمجة الامنة / الثقة الصفرية) | +| `/kesekit-fix` | انشاء تلقائي لنصوص التقوية والاصلاحات الامنية (CII / الذكاء الاصطناعي / الروبوتات / الفضاء / البرمجة الامنة / الثقة الصفرية) | +| `/kesekit-guide` | انشاء موجهات البرمجة الامنة لادوات الذكاء الاصطناعي (CII / الذكاء الاصطناعي / الروبوتات / الفضاء / JS·Python·عام / الثقة الصفرية) | ## الارشادات المدعومة @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) هي اضافة لـ Claude Code ت | مزود الخدمة | ~43 | 6 مراحل (تخطيط ← تطوير ← تشغيل ← صيانة ← تغذية راجعة ← ايقاف) | | المستخدم | 7 | افضل الممارسات الامنية | +### 3. امن الروبوتات — نحو 103 عنصرا + +| الفئة | الرمز | العناصر | المعيار المرجعي | +|-------|-------|:-------:|----------------| +| تطوير البرمجيات الامنة (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| امن سلسلة التوريد | SC-01~07 | 7 | NIST SP 800-161 | +| التعريف والمصادقة | IA-01~11 | 11 | IEC 62443 | +| التحكم في الاستخدام | UC-01~11 | 11 | IEC 62443 | +| سلامة النظام | SI-01~11 | 11 | IEC 62443 | +| حماية البيانات | DP-01~04 | 4 | IEC 62443 | +| تقييد تدفق البيانات | DFR-01~02 | 2 | IEC 62443 | +| الاستجابة للاحداث | ER-01~03 | 3 | IEC 62443 | +| توافر الموارد | RA-01~08 | 8 | IEC 62443 | +| المرونة السيبرانية | CR-01~13 | 13 | EU CRA | +| الامن اللاسلكي | WS-01~14 | 14 | EU RED | + +الفئة المستهدفة: الروبوتات الصناعية / الخدمية / الطبية (ISO 8373) + +### 4. امن الفضاء — 53 عنصرا + +| المجال | الرمز | العناصر | المعيار المرجعي | +|--------|-------|:-------:|----------------| +| التحكم في الوصول | AC-01~12 | 12 | CMMC, K-RMF | +| التعريف والمصادقة | IA-01~02 | 2 | CMMC, NIS2 | +| امن الانظمة والاتصالات | SC-01~07 | 7 | NIST IR 8401 | +| سلامة الانظمة والمعلومات | SI-01~04 | 4 | NIST CSF | +| ادارة تشغيل الانظمة/الخدمات | SO-01~09 | 9 | ISMS-P | +| الاستجابة للحوادث | IR-01~02 | 2 | NIS2 | +| امن الموظفين | PS-01~02 | 2 | CMMC | +| الامن المادي | PE-01~03 | 3 | K-RMF | +| تقييم المخاطر والامن | RA-01~02 | 2 | NIST CSF | +| حوكمة الامن | SG-01~04 | 4 | ISMS-P | +| خطط الطوارئ | CP-01~02 | 2 | NIST IR 8270 | +| ادارة سلسلة التوريد | SM-01~04 | 4 | CMMC, NIS2 | + +الفئة المستهدفة: مشغلو الاقمار الصناعية، مزودو GSaaS، مشغلو المحطات الارضية، شركات سلسلة التوريد الفضائية + +### 5. دليل البرمجة الامنة — 46 عنصرا + +| الفئة | العناصر | CWE | المعيار المرجعي | +|-------|:-------:|:---:|----------------| +| التحقق من صحة المدخلات وتمثيلها | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| وظائف الامن | 16 | 16 | CWE/SANS Top 25 | +| الوقت والحالة | 2 | 3 | CWE | +| معالجة الاخطاء | 3 | 3 | CWE | +| اخطاء الكود | 3 | 3 | CWE | +| التغليف | 4 | 5 | CWE | +| سوء استخدام API | 2 | 1 | CWE | + +**اللغات المدعومة:** +| اللغة | العناصر | اطار العمل | +|-------|:-------:|------------| +| Pseudo Code (عام) | 46 | انماط مستقلة عن اللغة | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +الفئة المستهدفة: مطورو ويب JavaScript/Python، مستخدمو ادوات الذكاء الاصطناعي (Claude, Cursor, Copilot)، مطورو vibe coding + +### 6. امن الثقة الصفرية (Zero Trust) — نحو 421 عنصرا + +| العنصر الاساسي | الرمز | العناصر | النضج | +|----------------|-------|:-------:|-------| +| الهوية | ZT-ID-01~53 | 53 | تقليدي/اولي/متقدم/مثالي | +| الاجهزة ونقاط النهاية | ZT-DV-01~36 | 36 | تقليدي/اولي/متقدم/مثالي | +| الشبكة | ZT-NW-01~54 | 54 | تقليدي/اولي/متقدم/مثالي | +| النظام | ZT-SY-01~49 | 49 | تقليدي/اولي/متقدم/مثالي | +| التطبيقات واعباء العمل | ZT-AP-01~60 | 60 | تقليدي/اولي/متقدم/مثالي | +| البيانات | ZT-DA-01~58 | 58 | تقليدي/اولي/متقدم/مثالي | +| الرؤية والتحليلات | ZT-VA-01~43 | 43 | تقليدي/اولي/متقدم/مثالي | +| الاتمتة والتنسيق | ZT-AU-01~43 | 43 | تقليدي/اولي/متقدم/مثالي | +| خاص بـ OT/ICS | ZT-OT-01~25 | 25 | تقليدي/اولي/متقدم/مثالي | + +**4 مستويات نضج**: تقليدي (Traditional) ← اولي (Initial) ← متقدم (Advanced) ← مثالي (Optimal) +**المعايير المرجعية**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +الفئة المستهدفة: المؤسسات التي تتبنى الثقة الصفرية، بيئات OT/ICS، المؤسسات المهاجرة الى السحابة، مسؤولو تقييم نضج الامن + ## التثبيت -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## الاستخدام ```bash # بدء التقييم الامني الشامل -/kesekit-en:start +/kesekit-start # تشغيل قائمة فحص ما قبل النشر -/kesekit-en:check +/kesekit-check # انشاء نصوص التقوية -/kesekit-en:fix +/kesekit-fix # الحصول على موجهات البرمجة الامنة -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,29 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← البيانات الوصفية للاضافة -├── skills/ ← المهارات بالانجليزية (الموجه) +├── skills/ ← المهارات بالانجليزية │ ├── start/ │ │ ├── SKILL.md ← الموجه (~80 سطرا) -│ │ └── references/ ← المعرفة حسب الارشادات -│ │ ├── cii/ ← 14 مرجعا لـ CII -│ │ └── ai-security/ ← 4 مراجع لامن الذكاء الاصطناعي +│ │ ├── references/ ← المستندات الوصفية/المعيارية +│ │ │ ├── ai-security/ ← نظرة عامة، مزودو الخدمات، دليل المستخدم +│ │ │ └── space-security/ ← نظرة عامة، سيناريوهات التهديد +│ │ ├── templates/ ← النماذج، جداول قوائم الفحص +│ │ │ ├── cii/ ← 14 جدول فحص CII +│ │ │ ├── ai-security/ ← فحص مطوري الذكاء الاصطناعي، قائمة فحص المستخدم +│ │ │ ├── robot-security/ ← 6 قوائم فحص امن الروبوتات +│ │ │ ├── space-security/ ← 4 جداول فحص امن الفضاء +│ │ │ └── zero-trust/ ← جداول فحص الثقة الصفرية +│ │ └── scripts/ ← نصوص فحص/اصلاح قابلة للتنفيذ +│ │ ├── cii/ ← نصوص bash، PowerShell، SQL +│ │ └── robot-security/ ← نصوص جدار الحماية، SBOM، الشهادات │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← المهارات بالكورية (نفس الهيكل) -├── authorkit/ ← المستندات الاصلية ومخرجات العمل -│ ├── converted/ -│ │ ├── ref-001/ ← الدليل الاداري/المادي (full.md) -│ │ ├── ref-002/ ← الدليل التقني (full.md) -│ │ └── ref-003/ ← دليل امن الذكاء الاصطناعي (full.md) -│ └── ... ├── 문서/ ← ملفات PDF الاصلية +├── authorkit/ ← المستندات الاصلية ومخرجات العمل +├── docs/ ← ملفات README بـ 20 لغة +├── CONTRIBUTING.md ← كيفية اضافة الارشادات └── README.md ``` @@ -106,6 +190,33 @@ KESE-KIT/ ## سجل التغييرات +### v4.0.0 (2026-04-03) + +**اضافة ارشادات جديدة: امن الثقة الصفرية (Zero Trust)** +- المصدر: KISA Zero Trust Guideline 2.0 (245 صفحة) + نموذج نضج الثقة الصفرية (182 صفحة) + دليل الثقة الصفرية لبيئات OT (67 صفحة) +- 9 عناصر اساسية، نحو 421 عنصر فحص، 4 مستويات نضج +- دعم خاص بـ OT/ICS (ZT-OT-01~25) +- المعايير: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**اضافة ارشادات جديدة: دليل البرمجة الامنة** +- المصدر: KISA Javascript Secure Coding Guide 159 صفحة + Python Secure Coding Guide 176 صفحة (مراجعة 2023) +- 7 فئات، 46 عنصرا، 49 CWE +- دليل Pseudo Code عام جديد (انماط UNSAFE/SAFE مستقلة عن اللغة) +- امثلة كود لاطر عمل JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) + +### v3.0.0 (2026-04-02) + +**تغيير جذري: تحديث تنسيق الاوامر** +- توحيد جميع المهارات تحت نطاق الاسماء `kesekit` +- تنسيق الاوامر: `/start` ← `/kesekit-start` (اضافة بادئة نطاق الاسماء) + +**اضافة ارشادات جديدة: امن الفضاء** +- المصدر: نموذج امن الفضاء الجزء 1 (134 صفحة) + الجزء 2 (223 صفحة) + دليل تفسيري (218 صفحة) (MSIT/KISA) +- 12 مجالا، 53 عنصر قائمة فحص +- الفئة المستهدفة: مشغلو الاقمار الصناعية، مزودو GSaaS، مشغلو المحطات الارضية + ### v2.0.0 (2026-03-30) **اعادة هيكلة البنية — تطبيق نمط Progressive Disclosure** diff --git a/docs/README.de.md b/docs/README.de.md index 1a983f5..59cfa3f 100644 --- a/docs/README.de.md +++ b/docs/README.de.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Ein Claude Code-Plugin zur Schwachstellenanalyse und -bewertung kritischer Informationsinfrastrukturen (CII) sowie zur KI-Sicherheitsbewertung. +Ein Claude Code-Plugin zur Schwachstellenanalyse und -bewertung kritischer Informationsinfrastrukturen (CII), KI-Sicherheitsbewertung, Roboter-Sicherheitspruefung, Weltraum-Sicherheitspruefung, Secure-Coding-Leitfaden und Zero-Trust-Sicherheitsbewertung. --- ## Ueberblick -KESE (KISA Enhanced Security Evaluation Kit) ist ein Claude Code-Plugin, das umfassende Schwachstellenbewertungsfunktionen auf Basis der KISA-Richtlinien (Koreanische Agentur fuer Internet und Sicherheit) bereitstellt. Es unterstuetzt sowohl die Bewertung kritischer Informationsinfrastrukturen (CII) als auch KI-Sicherheitsbewertungen. +KESE (KISA Enhanced Security Evaluation Kit) ist ein Claude Code-Plugin, das umfassende Schwachstellenbewertungsfunktionen auf Basis der KISA-Richtlinien (Koreanische Agentur fuer Internet und Sicherheit) bereitstellt. Es unterstuetzt CII-Schwachstellenbewertung, KI-Sicherheitsbewertung, Roboter-Sicherheitspruefung, Weltraum-Sicherheitspruefung, Secure-Coding-Leitfaden und Zero-Trust-Sicherheitsbewertung. ## Funktionen | Skill | Beschreibung | |-------|--------------| -| `/kesekit-en:start` | Vollstaendige Sicherheits-Schwachstellenbewertung ausfuehren (CII 560+ Elemente oder KI-Sicherheit) | -| `/kesekit-en:check` | Sicherheits-Compliance-Checkliste vor der Bereitstellung | -| `/kesekit-en:fix` | Automatische Generierung von Haertungsskripten und Sicherheitskorrekturen | -| `/kesekit-en:guide` | Sichere Coding-Prompts fuer KI-Werkzeuge generieren | +| `/kesekit-start` | Vollstaendige Sicherheits-Schwachstellenbewertung ausfuehren (CII 560+ / KI-Sicherheit / Roboter-Sicherheit / Weltraum-Sicherheit / Secure Coding / Zero Trust) | +| `/kesekit-check` | Sicherheits-Compliance-Checkliste vor der Bereitstellung (CII / KI / Roboter / Weltraum / Secure Coding / Zero Trust) | +| `/kesekit-fix` | Automatische Generierung von Haertungsskripten und Sicherheitskorrekturen (CII / KI / Roboter / Weltraum / Secure Coding / Zero Trust) | +| `/kesekit-guide` | Sichere Coding-Prompts fuer KI-Werkzeuge generieren (CII / KI / Roboter / Weltraum / JS·Python·Generisch / Zero Trust) | ## Unterstuetzte Richtlinien @@ -50,28 +50,113 @@ KESE (KISA Enhanced Security Evaluation Kit) ist ein Claude Code-Plugin, das umf |------------|:--------:|--------------| | KI-Entwickler | 54 | 6 Phasen (Planung→Daten→Modell→Bereitstellung→Ueberwachung→Ausserbetriebnahme) | | Dienstanbieter | ~43 | 6 Phasen (Planung→Entwicklung→Betrieb→Wartung→Feedback→Ausserbetriebnahme) | -| Nutzer | 7 | Bewehrte Sicherheitspraktiken | +| Nutzer | 7 | Bewaehrte Sicherheitspraktiken | + +### 3. Roboter-Sicherheit — ~103 Elemente + +| Kategorie | Code | Elemente | Referenzstandards | +|-----------|------|:--------:|-------------------| +| Sichere SW-Entwicklung (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Lieferketten-Sicherheit | SC-01~07 | 7 | NIST SP 800-161 | +| Identifizierung und Authentifizierung | IA-01~11 | 11 | IEC 62443 | +| Nutzungskontrolle | UC-01~11 | 11 | IEC 62443 | +| Systemintegritaet | SI-01~11 | 11 | IEC 62443 | +| Datenschutz | DP-01~04 | 4 | IEC 62443 | +| Datenfluss-Beschraenkung | DFR-01~02 | 2 | IEC 62443 | +| Ereignisreaktion | ER-01~03 | 3 | IEC 62443 | +| Ressourcenverfuegbarkeit | RA-01~08 | 8 | IEC 62443 | +| Cyber-Resilienz | CR-01~13 | 13 | EU CRA | +| Drahtlose Sicherheit | WS-01~14 | 14 | EU RED | + +Zielgruppe: Industrie- / Service- / Medizinroboter (ISO 8373) + +### 4. Weltraum-Sicherheit — 53 Elemente + +| Bereich | Code | Elemente | Referenzstandards | +|---------|------|:--------:|-------------------| +| Zugriffskontrolle | AC-01~12 | 12 | CMMC, K-RMF | +| Identifizierung und Authentifizierung | IA-01~02 | 2 | CMMC, NIS2 | +| System- und Kommunikationssicherheit | SC-01~07 | 7 | NIST IR 8401 | +| System- und Informationsintegritaet | SI-01~04 | 4 | NIST CSF | +| System-/Dienstbetriebsmanagement | SO-01~09 | 9 | ISMS-P | +| Vorfallreaktion | IR-01~02 | 2 | NIS2 | +| Personalsicherheit | PS-01~02 | 2 | CMMC | +| Physische Sicherheit | PE-01~03 | 3 | K-RMF | +| Risiko- und Sicherheitsbewertung | RA-01~02 | 2 | NIST CSF | +| Sicherheits-Governance | SG-01~04 | 4 | ISMS-P | +| Notfallplanung | CP-01~02 | 2 | NIST IR 8270 | +| Lieferketten-Management | SM-01~04 | 4 | CMMC, NIS2 | + +Zielgruppe: Satellitenbetreiber, GSaaS-Anbieter, Bodenstationsbetreiber, Unternehmen der Weltraum-Lieferkette + +### 5. Secure-Coding-Leitfaden — 46 Elemente + +| Kategorie | Elemente | CWE | Referenzstandards | +|-----------|:--------:|:---:|-------------------| +| Eingabedaten-Validierung und Darstellung | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Sicherheitsfunktionen | 16 | 16 | CWE/SANS Top 25 | +| Zeit und Zustand | 2 | 3 | CWE | +| Fehlerbehandlung | 3 | 3 | CWE | +| Code-Fehler | 3 | 3 | CWE | +| Kapselung | 4 | 5 | CWE | +| API-Missbrauch | 2 | 1 | CWE | + +**Unterstuetzte Sprachen:** +| Sprache | Elemente | Frameworks | +|---------|:--------:|-----------| +| Pseudo Code (generisch) | 46 | Sprachunabhaengige Muster | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Zielgruppe: JavaScript/Python-Webentwickler, KI-Tool-Nutzer (Claude, Cursor, Copilot), Vibe-Coding-Entwickler + +### 6. Zero-Trust-Sicherheit — ~421 Elemente + +| Kernelement | Code | Elemente | Reifegrad | +|-------------|------|:--------:|-----------| +| Identitaet | ZT-ID-01~53 | 53 | Traditionell/Initial/Fortgeschritten/Optimal | +| Geraet und Endpunkt | ZT-DV-01~36 | 36 | Traditionell/Initial/Fortgeschritten/Optimal | +| Netzwerk | ZT-NW-01~54 | 54 | Traditionell/Initial/Fortgeschritten/Optimal | +| System | ZT-SY-01~49 | 49 | Traditionell/Initial/Fortgeschritten/Optimal | +| Anwendung und Workload | ZT-AP-01~60 | 60 | Traditionell/Initial/Fortgeschritten/Optimal | +| Daten | ZT-DA-01~58 | 58 | Traditionell/Initial/Fortgeschritten/Optimal | +| Sichtbarkeit und Analyse | ZT-VA-01~43 | 43 | Traditionell/Initial/Fortgeschritten/Optimal | +| Automatisierung und Orchestrierung | ZT-AU-01~43 | 43 | Traditionell/Initial/Fortgeschritten/Optimal | +| OT/ICS-spezifisch | ZT-OT-01~25 | 25 | Traditionell/Initial/Fortgeschritten/Optimal | + +**4 Reifegradstufen**: Traditionell (Traditional) → Initial (Initial) → Fortgeschritten (Advanced) → Optimal (Optimal) +**Referenzstandards**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Zielgruppe: Unternehmen mit Zero-Trust-Einfuehrung, OT/ICS-Umgebungen, Cloud-Migrationsorganisationen, Verantwortliche fuer Sicherheitsreifegradbeurteilung ## Installation -```bash -claude plugins install kesekit-en@kesekit ``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT +``` + +> **Zum Aktualisieren:** +> ``` +> /plugin marketplace update cdppcorp-KESE-KIT +> /plugin update kesekit@cdppcorp-KESE-KIT +> /reload-plugins +> ``` ## Verwendung ```bash # Vollstaendige Sicherheitsbewertung starten -/kesekit-en:start +/kesekit-start # Checkliste vor der Bereitstellung ausfuehren -/kesekit-en:check +/kesekit-check # Haertungsskripte generieren -/kesekit-en:fix +/kesekit-fix # Sichere Coding-Prompts abrufen -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +167,39 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Plugin-Metadaten -├── skills/ ← Englische Skills (Router) +├── skills/ ← Englische Skills │ ├── start/ │ │ ├── SKILL.md ← Router (~80 Zeilen) -│ │ └── references/ ← Wissen nach Richtlinie -│ │ ├── cii/ ← 14 CII-Referenzdateien -│ │ └── ai-security/ ← 4 KI-Sicherheits-Referenzdateien +│ │ ├── references/ ← Beschreibungs-/Kriteriendokumente +│ │ │ ├── ai-security/ ← Uebersicht, Dienstanbieter, Nutzerleitfaden +│ │ │ ├── space-security/ ← Uebersicht, Lieferketten-Bedrohungsszenarien +│ │ │ └── zero-trust/ ← Zero-Trust-Reifegradmodell, OT/ICS +│ │ ├── templates/ ← Anhangsformulare, Checklisten-Tabellen +│ │ │ ├── cii/ ← 14 CII-Pruefungstabellen +│ │ │ ├── ai-security/ ← KI-Entwickler-Verifizierung, Nutzer-Checkliste +│ │ │ ├── robot-security/ ← 6 Roboter-Sicherheits-Checklisten +│ │ │ ├── space-security/ ← 4 Weltraum-Sicherheits-Pruefungstabellen +│ │ │ └── zero-trust/ ← 9 Zero-Trust-Kernelement-Checklisten +│ │ └── scripts/ ← Ausfuehrbare Pruef-/Korrekturskripte +│ │ ├── cii/ ← bash, PowerShell, SQL-Skripte +│ │ └── robot-security/ ← Firewall-, SBOM-, Zertifikatskripte │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Koreanische Skills (gleiche Struktur) -├── authorkit/ ← Originaldokumente und Arbeitsmaterialien +├── 문서/ ← Original-PDFs (14) +├── authorkit/ ← Konvertierte Ergebnisse und Arbeitsdateien │ ├── converted/ │ │ ├── ref-001/ ← Administrativer/physischer Leitfaden (full.md) │ │ ├── ref-002/ ← Technischer Leitfaden (full.md) -│ │ └── ref-003/ ← KI-Sicherheitsleitfaden (full.md) +│ │ ├── ref-003/ ← KI-Sicherheitsleitfaden (full.md) +│ │ ├── ... +│ │ ├── ref-013/ ← Zero Trust Guideline 2.0 (full.md) +│ │ ├── ref-014/ ← Zero Trust Reifegradmodell Erklaerung (full.md) +│ │ └── ref-015/ ← Zero Trust fuer OT-Umgebungen Leitfaden (full.md) │ └── ... -├── 문서/ ← Original-PDFs +├── docs/ ← README in 20 Sprachen +├── CONTRIBUTING.md └── README.md ``` @@ -106,6 +207,40 @@ KESE-KIT/ ## Aenderungshistorie +### v4.0.0 (2026-04-03) + +**Neue Richtlinie: Zero-Trust-Sicherheit** +- Quelle: KISA Zero Trust Guideline 2.0 (245S.) + Zero Trust Reifegradmodell Erklaerung (182S.) + Zero Trust fuer OT-Umgebungen Leitfaden (67S.) +- 9 Kernelemente, ~421 Checklisten-Elemente +- 4 Reifegradstufen: Traditional → Initial → Advanced → Optimal +- Referenzstandards: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model +- 25 OT/ICS-spezifische Elemente enthalten + +### v3.2.0 (2026-04-02) + +**Neue Richtlinie: Secure-Coding-Leitfaden** +- Quelle: KISA Javascript Secure Coding Guide 159S. + Python Secure Coding Guide 176S. (ueberarbeitete Ausgabe 2023) +- 7 Kategorien, 46 Elemente, 49 CWE-Zuordnungen +- Neuer generischer Pseudo Code Leitfaden (sprachunabhaengige UNSAFE/SAFE-Muster) +- Framework-spezifische Codebeispiele: JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) +- `references/secure-coding/` + `templates/secure-coding/` in allen 8 Skills (EN/KO) bereitgestellt + +### v3.0.0 (2026-04-02) + +**Breaking Change: Aenderung des Befehlsformats** +- Alle Skills unter dem einheitlichen Namespace `kesekit` zusammengefasst +- Befehlsformat: `/start` → `/kesekit-start` (Namespace-Praefix hinzugefuegt) + +**Neue Richtlinie: Weltraum-Sicherheit** +- Quelle: Weltraum-Sicherheitsmodell Part1 134S. + Part2 223S. + Erklaerungsleitfaden 218S. +- 12 Bereiche, 53 Checklisten-Elemente +- Referenzstandards: CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, CCSDS + +**Neue Richtlinie: Roboter-Sicherheit** (v2.1) +- Quelle: Roboter-Sicherheitsmodell (erweitert) 156S. + Roboter-Sicherheits-Checklisten-Erklaerung 225S. +- 11 Kategorien, ~103 Checklisten-Elemente +- Referenzstandards: NIST SP 800-218, IEC 62443, EU CRA, EU RED, NIS2 + ### v2.0.0 (2026-03-30) **Strukturrefaktorierung — Anwendung des Progressive-Disclosure-Musters** diff --git a/docs/README.es.md b/docs/README.es.md index e188a1b..708dde6 100644 --- a/docs/README.es.md +++ b/docs/README.es.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Plugin de Claude Code para el analisis y evaluacion de vulnerabilidades en Infraestructuras Criticas de Informacion (CII) y evaluacion de seguridad de IA. +Plugin de Claude Code para el analisis y evaluacion de vulnerabilidades en Infraestructuras Criticas de Informacion (CII), evaluacion de seguridad de IA, inspeccion de seguridad de robots, inspeccion de seguridad espacial, guia de codificacion segura y evaluacion de seguridad Zero Trust. --- ## Descripcion general -KESE (KISA Enhanced Security Evaluation Kit) es un plugin de Claude Code que ofrece capacidades integrales de evaluacion de vulnerabilidades basadas en las directrices de KISA (Agencia de Internet y Seguridad de Corea). Soporta tanto la evaluacion de Infraestructuras Criticas de Informacion (CII) como la evaluacion de seguridad de IA. +KESE (KISA Enhanced Security Evaluation Kit) es un plugin de Claude Code que ofrece capacidades integrales de evaluacion de vulnerabilidades basadas en las directrices de KISA (Agencia de Internet y Seguridad de Corea). Soporta evaluaciones CII, seguridad de IA, seguridad de robots, seguridad espacial, codificacion segura y evaluacion de seguridad Zero Trust. ## Funcionalidades | Skill | Descripcion | |-------|-------------| -| `/kesekit-en:start` | Ejecutar evaluacion completa de vulnerabilidades de seguridad (CII 560+ elementos o seguridad IA) | -| `/kesekit-en:check` | Lista de verificacion de cumplimiento de seguridad previo al despliegue | -| `/kesekit-en:fix` | Generacion automatica de scripts de hardening y correcciones de seguridad | -| `/kesekit-en:guide` | Generar prompts de codificacion segura para herramientas de IA | +| `/kesekit-start` | Ejecutar evaluacion completa de vulnerabilidades de seguridad (CII 560+ / Seguridad IA / Seguridad de robots / Seguridad espacial / Codificacion segura / Zero Trust) | +| `/kesekit-check` | Lista de verificacion de cumplimiento de seguridad previo al despliegue (CII / IA / Robots / Espacio / Codificacion segura / Zero Trust) | +| `/kesekit-fix` | Generacion automatica de scripts de hardening y correcciones de seguridad (CII / IA / Robots / Espacio / Codificacion segura / Zero Trust) | +| `/kesekit-guide` | Generar prompts de codificacion segura para herramientas de IA (CII / IA / Robots / Espacio / JS·Python·Generico / Zero Trust) | ## Directrices soportadas @@ -52,26 +52,111 @@ KESE (KISA Enhanced Security Evaluation Kit) es un plugin de Claude Code que ofr | Proveedor de servicios | ~43 | 6 etapas (Planificacion→Desarrollo→Operaciones→Mantenimiento→Retroalimentacion→Desmantelamiento) | | Usuario | 7 | Mejores practicas de seguridad | +### 3. Seguridad de robots — ~103 elementos + +| Categoria | Codigo | Elementos | Estandares de referencia | +|-----------|--------|:---------:|--------------------------| +| Desarrollo SW seguro (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Seguridad de la cadena de suministro | SC-01~07 | 7 | NIST SP 800-161 | +| Identificacion y autenticacion | IA-01~11 | 11 | IEC 62443 | +| Control de uso | UC-01~11 | 11 | IEC 62443 | +| Integridad del sistema | SI-01~11 | 11 | IEC 62443 | +| Proteccion de datos | DP-01~04 | 4 | IEC 62443 | +| Restriccion de flujo de datos | DFR-01~02 | 2 | IEC 62443 | +| Respuesta a eventos | ER-01~03 | 3 | IEC 62443 | +| Disponibilidad de recursos | RA-01~08 | 8 | IEC 62443 | +| Ciber-resiliencia | CR-01~13 | 13 | EU CRA | +| Seguridad inalambrica | WS-01~14 | 14 | EU RED | + +Destinatarios: robots industriales / de servicio / medicos (ISO 8373) + +### 4. Seguridad espacial — 53 elementos + +| Area | Codigo | Elementos | Estandares de referencia | +|------|--------|:---------:|--------------------------| +| Control de acceso | AC-01~12 | 12 | CMMC, K-RMF | +| Identificacion y autenticacion | IA-01~02 | 2 | CMMC, NIS2 | +| Seguridad de sistemas y comunicaciones | SC-01~07 | 7 | NIST IR 8401 | +| Integridad de sistemas e informacion | SI-01~04 | 4 | NIST CSF | +| Gestion de operaciones de sistema/servicio | SO-01~09 | 9 | ISMS-P | +| Respuesta a incidentes | IR-01~02 | 2 | NIS2 | +| Seguridad del personal | PS-01~02 | 2 | CMMC | +| Seguridad fisica | PE-01~03 | 3 | K-RMF | +| Evaluacion de riesgos y seguridad | RA-01~02 | 2 | NIST CSF | +| Gobernanza de seguridad | SG-01~04 | 4 | ISMS-P | +| Plan de contingencia | CP-01~02 | 2 | NIST IR 8270 | +| Gestion de la cadena de suministro | SM-01~04 | 4 | CMMC, NIS2 | + +Destinatarios: operadores de satelites, proveedores GSaaS, operadores de estaciones terrestres, empresas de la cadena de suministro espacial + +### 5. Guia de codificacion segura — 46 elementos + +| Categoria | Elementos | CWE | Estandares de referencia | +|-----------|:---------:|:---:|--------------------------| +| Validacion de datos de entrada y representacion | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Funciones de seguridad | 16 | 16 | CWE/SANS Top 25 | +| Tiempo y estado | 2 | 3 | CWE | +| Manejo de errores | 3 | 3 | CWE | +| Errores de codigo | 3 | 3 | CWE | +| Encapsulacion | 4 | 5 | CWE | +| Uso incorrecto de API | 2 | 1 | CWE | + +**Lenguajes soportados:** +| Lenguaje | Elementos | Frameworks | +|----------|:---------:|-----------| +| Pseudo Code (generico) | 46 | Patrones independientes del lenguaje | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Destinatarios: desarrolladores web JavaScript/Python, usuarios de herramientas IA (Claude, Cursor, Copilot), desarrolladores de vibe coding + +### 6. Seguridad Zero Trust — ~421 elementos + +| Elemento central | Codigo | Elementos | Madurez | +|------------------|--------|:---------:|---------| +| Identidad | ZT-ID-01~53 | 53 | Tradicional/Inicial/Avanzado/Optimo | +| Dispositivo y punto final | ZT-DV-01~36 | 36 | Tradicional/Inicial/Avanzado/Optimo | +| Red | ZT-NW-01~54 | 54 | Tradicional/Inicial/Avanzado/Optimo | +| Sistema | ZT-SY-01~49 | 49 | Tradicional/Inicial/Avanzado/Optimo | +| Aplicacion y carga de trabajo | ZT-AP-01~60 | 60 | Tradicional/Inicial/Avanzado/Optimo | +| Datos | ZT-DA-01~58 | 58 | Tradicional/Inicial/Avanzado/Optimo | +| Visibilidad y analisis | ZT-VA-01~43 | 43 | Tradicional/Inicial/Avanzado/Optimo | +| Automatizacion y orquestacion | ZT-AU-01~43 | 43 | Tradicional/Inicial/Avanzado/Optimo | +| OT/ICS especifico | ZT-OT-01~25 | 25 | Tradicional/Inicial/Avanzado/Optimo | + +**4 niveles de madurez**: Tradicional (Traditional) → Inicial (Initial) → Avanzado (Advanced) → Optimo (Optimal) +**Estandares de referencia**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Destinatarios: empresas que adoptan Zero Trust, entornos OT/ICS, organizaciones en migracion a la nube, responsables de evaluacion de madurez de seguridad + ## Instalacion -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` +> **Para actualizar:** +> ``` +> /plugin marketplace update cdppcorp-KESE-KIT +> /plugin update kesekit@cdppcorp-KESE-KIT +> /reload-plugins +> ``` + ## Uso ```bash # Iniciar evaluacion completa de seguridad -/kesekit-en:start +/kesekit-start # Ejecutar lista de verificacion previa al despliegue -/kesekit-en:check +/kesekit-check # Generar scripts de hardening -/kesekit-en:fix +/kesekit-fix # Obtener prompts de codificacion segura -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +167,39 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Metadatos del plugin -├── skills/ ← Skills en ingles (enrutador) +├── skills/ ← Skills en ingles │ ├── start/ │ │ ├── SKILL.md ← Enrutador (~80 lineas) -│ │ └── references/ ← Conocimiento por directriz -│ │ ├── cii/ ← 14 archivos de referencia CII -│ │ └── ai-security/ ← 4 archivos de referencia de seguridad IA +│ │ ├── references/ ← Documentos de descripcion/criterios +│ │ │ ├── ai-security/ ← Descripcion, proveedor de servicios, guia de usuario +│ │ │ ├── space-security/ ← Descripcion, escenarios de amenazas de la cadena de suministro +│ │ │ └── zero-trust/ ← Madurez Zero Trust, OT/ICS +│ │ ├── templates/ ← Formularios anexos, tablas de checklists +│ │ │ ├── cii/ ← 14 tablas de verificacion CII +│ │ │ ├── ai-security/ ← Verificacion de desarrollador IA, checklist de usuario +│ │ │ ├── robot-security/ ← 6 checklists de seguridad de robots +│ │ │ ├── space-security/ ← 4 tablas de verificacion de seguridad espacial +│ │ │ └── zero-trust/ ← 9 checklists de elementos centrales Zero Trust +│ │ └── scripts/ ← Scripts de verificacion/correccion ejecutables +│ │ ├── cii/ ← Scripts bash, PowerShell, SQL +│ │ └── robot-security/ ← Scripts de firewall, SBOM, certificados │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Skills en coreano (misma estructura) +├── 문서/ ← PDFs originales (14) ├── authorkit/ ← Documentos originales y materiales de trabajo │ ├── converted/ │ │ ├── ref-001/ ← Guia administrativa/fisica (full.md) │ │ ├── ref-002/ ← Guia tecnica (full.md) -│ │ └── ref-003/ ← Guia de seguridad IA (full.md) +│ │ ├── ref-003/ ← Guia de seguridad IA (full.md) +│ │ ├── ... +│ │ ├── ref-013/ ← Zero Trust Guideline 2.0 (full.md) +│ │ ├── ref-014/ ← Guia del modelo de madurez Zero Trust (full.md) +│ │ └── ref-015/ ← Guia de aplicacion Zero Trust para OT (full.md) │ └── ... -├── 문서/ ← PDFs originales +├── docs/ ← README en 20 idiomas +├── CONTRIBUTING.md └── README.md ``` @@ -106,6 +207,40 @@ KESE-KIT/ ## Historial de cambios +### v4.0.0 (2026-04-03) + +**Nueva directriz: Seguridad Zero Trust** +- Fuente: KISA Zero Trust Guideline 2.0 (245p) + Guia del modelo de madurez Zero Trust (182p) + Guia de aplicacion Zero Trust para OT (67p) +- 9 elementos centrales, ~421 elementos de checklist +- 4 niveles de madurez: Traditional → Initial → Advanced → Optimal +- Estandares de referencia: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model +- 25 elementos especificos de OT/ICS incluidos + +### v3.2.0 (2026-04-02) + +**Nueva directriz: Guia de codificacion segura** +- Fuente: KISA Javascript Secure Coding Guide 159p + Python Secure Coding Guide 176p (edicion revisada 2023) +- 7 categorias, 46 elementos, 49 correspondencias CWE +- Nueva guia generica Pseudo Code (patrones UNSAFE/SAFE independientes del lenguaje) +- Ejemplos de codigo por framework: JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) +- `references/secure-coding/` + `templates/secure-coding/` desplegados en los 8 skills (EN/KO) + +### v3.0.0 (2026-04-02) + +**Breaking Change: Cambio de formato de comandos** +- Todos los skills unificados bajo el namespace `kesekit` +- Formato de comandos: `/start` → `/kesekit-start` (prefijo de namespace agregado) + +**Nueva directriz: Seguridad espacial** +- Fuente: Modelo de seguridad espacial Part1 134p + Part2 223p + Guia explicativa 218p +- 12 areas, 53 elementos de checklist +- Estandares de referencia: CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, CCSDS + +**Nueva directriz: Seguridad de robots** (v2.1) +- Fuente: Modelo de seguridad de robots (avanzado) 156p + Guia de checklist de seguridad de robots 225p +- 11 categorias, ~103 elementos de checklist +- Estandares de referencia: NIST SP 800-218, IEC 62443, EU CRA, EU RED, NIS2 + ### v2.0.0 (2026-03-30) **Refactorizacion de estructura — Aplicacion del patron Progressive Disclosure** diff --git a/docs/README.fr.md b/docs/README.fr.md index fb65376..bdd5f14 100644 --- a/docs/README.fr.md +++ b/docs/README.fr.md @@ -4,36 +4,36 @@ # KESE - KISA Enhanced Security Evaluation Kit -Plugin Claude Code pour l'analyse des vulnérabilités des infrastructures d'information critiques (CII) et l'évaluation de la sécurité de l'IA. +Plugin Claude Code pour l'analyse des vulnerabilites des infrastructures d'information critiques (CII), l'evaluation de la securite de l'IA, l'inspection de securite des robots, l'inspection de securite spatiale, le guide de codage securise et l'evaluation de securite Zero Trust. --- -## Présentation +## Presentation -KESE (KISA Enhanced Security Evaluation Kit) est un plugin Claude Code qui fournit des capacités complètes d'évaluation des vulnérabilités de sécurité basées sur les directives de la KISA (Korea Internet & Security Agency). Il prend en charge à la fois les évaluations des infrastructures d'information critiques (CII) et les évaluations de sécurité de l'IA. +KESE (KISA Enhanced Security Evaluation Kit) est un plugin Claude Code qui fournit des capacites completes d'evaluation des vulnerabilites de securite basees sur les directives de la KISA (Korea Internet & Security Agency). Il prend en charge les evaluations CII, la securite de l'IA, la securite des robots, la securite spatiale, le codage securise et l'evaluation de securite Zero Trust. -## Fonctionnalités +## Fonctionnalites | Skill | Description | |-------|-------------| -| `/kesekit-en:start` | Exécuter une évaluation complète des vulnérabilités de sécurité (CII 560+ éléments ou sécurité IA) | -| `/kesekit-en:check` | Checklist de conformité sécurité avant déploiement | -| `/kesekit-en:fix` | Génération automatique de scripts de durcissement et de correctifs de sécurité | -| `/kesekit-en:guide` | Générer des prompts de codage sécurisé pour les outils d'IA | +| `/kesekit-start` | Executer une evaluation complete des vulnerabilites de securite (CII 560+ / Securite IA / Securite des robots / Securite spatiale / Codage securise / Zero Trust) | +| `/kesekit-check` | Checklist de conformite securite avant deploiement (CII / IA / Robots / Espace / Codage securise / Zero Trust) | +| `/kesekit-fix` | Generation automatique de scripts de durcissement et de correctifs de securite (CII / IA / Robots / Espace / Codage securise / Zero Trust) | +| `/kesekit-guide` | Generer des prompts de codage securise pour les outils d'IA (CII / IA / Robots / Espace / JS·Python·Generique / Zero Trust) | ## Directives prises en charge -### 1. CII (Infrastructures d'information critiques) — 560+ éléments +### 1. CII (Infrastructures d'information critiques) — 560+ elements -**Évaluation technique des vulnérabilités** -| Système | Code | Éléments | +**Evaluation technique des vulnerabilites** +| Systeme | Code | Elements | |---------|------|:--------:| | Serveur Unix/Linux | U-01~U-67 | 67 | | Serveur Windows | W-01~W-64 | 64 | | Service Web | WEB-01~WEB-26 | 26 | -| Équipement de sécurité | S-01~S-23 | 23 | -| Équipement réseau | N-01~N-38 | 38 | -| Système de contrôle | C-01~C-51 | 46 | +| Equipement de securite | S-01~S-23 | 23 | +| Equipement reseau | N-01~N-38 | 38 | +| Systeme de controle | C-01~C-51 | 46 | | PC | PC-01~PC-18 | 18 | | DBMS | D-01~D-26 | 26 | | Mobile | M-01~M-04 | 4 | @@ -41,37 +41,122 @@ KESE (KISA Enhanced Security Evaluation Kit) est un plugin Claude Code qui fourn | Virtualisation | HV-01~HV-25 | 25 | | Cloud | CA-01~CA-19 | 19 | -**Évaluation administrative** : A-1~A-127 (127 éléments, 14 domaines) -**Évaluation physique** : P-1~P-18 (18 éléments) +**Evaluation administrative** : A-1~A-127 (127 elements, 14 domaines) +**Evaluation physique** : P-1~P-18 (18 elements) -### 2. Guide de sécurité IA — 54+ éléments +### 2. Guide de securite IA — 54+ elements -| Cible | Éléments | Cycle de vie | +| Cible | Elements | Cycle de vie | |-------|:--------:|-------------| -| Développeur IA | 54 | 6 phases (Planification → Données → Modèle → Déploiement → Surveillance → Mise hors service) | -| Fournisseur de services | ~43 | 6 phases (Planification → Développement → Exploitation → Maintenance → Retour d'information → Mise hors service) | -| Utilisateur | 7 | Bonnes pratiques de sécurité | +| Developpeur IA | 54 | 6 phases (Planification → Donnees → Modele → Deploiement → Surveillance → Mise hors service) | +| Fournisseur de services | ~43 | 6 phases (Planification → Developpement → Exploitation → Maintenance → Retour d'information → Mise hors service) | +| Utilisateur | 7 | Bonnes pratiques de securite | + +### 3. Securite des robots — ~103 elements + +| Categorie | Code | Elements | Normes de reference | +|-----------|------|:--------:|---------------------| +| Developpement SW securise (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Securite de la chaine d'approvisionnement | SC-01~07 | 7 | NIST SP 800-161 | +| Identification et authentification | IA-01~11 | 11 | IEC 62443 | +| Controle d'utilisation | UC-01~11 | 11 | IEC 62443 | +| Integrite du systeme | SI-01~11 | 11 | IEC 62443 | +| Protection des donnees | DP-01~04 | 4 | IEC 62443 | +| Restriction des flux de donnees | DFR-01~02 | 2 | IEC 62443 | +| Reponse aux evenements | ER-01~03 | 3 | IEC 62443 | +| Disponibilite des ressources | RA-01~08 | 8 | IEC 62443 | +| Cyber-resilience | CR-01~13 | 13 | EU CRA | +| Securite sans fil | WS-01~14 | 14 | EU RED | + +Cible : robots industriels / de service / medicaux (ISO 8373) + +### 4. Securite spatiale — 53 elements + +| Domaine | Code | Elements | Normes de reference | +|---------|------|:--------:|---------------------| +| Controle d'acces | AC-01~12 | 12 | CMMC, K-RMF | +| Identification et authentification | IA-01~02 | 2 | CMMC, NIS2 | +| Securite des systemes et communications | SC-01~07 | 7 | NIST IR 8401 | +| Integrite des systemes et informations | SI-01~04 | 4 | NIST CSF | +| Gestion des operations systeme/service | SO-01~09 | 9 | ISMS-P | +| Reponse aux incidents | IR-01~02 | 2 | NIS2 | +| Securite du personnel | PS-01~02 | 2 | CMMC | +| Securite physique | PE-01~03 | 3 | K-RMF | +| Evaluation des risques et de la securite | RA-01~02 | 2 | NIST CSF | +| Gouvernance de la securite | SG-01~04 | 4 | ISMS-P | +| Plan d'urgence | CP-01~02 | 2 | NIST IR 8270 | +| Gestion de la chaine d'approvisionnement | SM-01~04 | 4 | CMMC, NIS2 | + +Cible : operateurs de satellites, fournisseurs GSaaS, operateurs de stations au sol, entreprises de la chaine d'approvisionnement spatiale + +### 5. Guide de codage securise — 46 elements + +| Categorie | Elements | CWE | Normes de reference | +|-----------|:--------:|:---:|---------------------| +| Validation des donnees d'entree et representation | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Fonctions de securite | 16 | 16 | CWE/SANS Top 25 | +| Temps et etat | 2 | 3 | CWE | +| Gestion des erreurs | 3 | 3 | CWE | +| Erreurs de code | 3 | 3 | CWE | +| Encapsulation | 4 | 5 | CWE | +| Mauvais usage des API | 2 | 1 | CWE | + +**Langages pris en charge :** +| Langage | Elements | Frameworks | +|---------|:--------:|-----------| +| Pseudo Code (generique) | 46 | Modeles independants du langage | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Cible : developpeurs web JavaScript/Python, utilisateurs d'outils IA (Claude, Cursor, Copilot), developpeurs en vibe coding + +### 6. Securite Zero Trust — ~421 elements + +| Element central | Code | Elements | Maturite | +|-----------------|------|:--------:|----------| +| Identite | ZT-ID-01~53 | 53 | Traditionnel/Initial/Avance/Optimal | +| Appareil et point de terminaison | ZT-DV-01~36 | 36 | Traditionnel/Initial/Avance/Optimal | +| Reseau | ZT-NW-01~54 | 54 | Traditionnel/Initial/Avance/Optimal | +| Systeme | ZT-SY-01~49 | 49 | Traditionnel/Initial/Avance/Optimal | +| Application et charge de travail | ZT-AP-01~60 | 60 | Traditionnel/Initial/Avance/Optimal | +| Donnees | ZT-DA-01~58 | 58 | Traditionnel/Initial/Avance/Optimal | +| Visibilite et analyse | ZT-VA-01~43 | 43 | Traditionnel/Initial/Avance/Optimal | +| Automatisation et orchestration | ZT-AU-01~43 | 43 | Traditionnel/Initial/Avance/Optimal | +| OT/ICS specifique | ZT-OT-01~25 | 25 | Traditionnel/Initial/Avance/Optimal | + +**4 niveaux de maturite** : Traditionnel (Traditional) → Initial (Initial) → Avance (Advanced) → Optimal (Optimal) +**Normes de reference** : KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Cible : entreprises adoptant le Zero Trust, environnements OT/ICS, organisations en migration cloud, responsables de l'evaluation de la maturite de securite ## Installation -```bash -claude plugins install kesekit-en@kesekit ``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT +``` + +> **Pour mettre a jour :** +> ``` +> /plugin marketplace update cdppcorp-KESE-KIT +> /plugin update kesekit@cdppcorp-KESE-KIT +> /reload-plugins +> ``` ## Utilisation ```bash -# Lancer l'évaluation complète de sécurité -/kesekit-en:start +# Lancer l'evaluation complete de securite +/kesekit-start -# Exécuter la checklist avant déploiement -/kesekit-en:check +# Executer la checklist avant deploiement +/kesekit-check -# Générer les scripts de durcissement -/kesekit-en:fix +# Generer les scripts de durcissement +/kesekit-fix -# Obtenir les prompts de codage sécurisé -/kesekit-en:guide +# Obtenir les prompts de codage securise +/kesekit-guide ``` --- @@ -81,24 +166,40 @@ claude plugins install kesekit-en@kesekit ``` KESE-KIT/ ├── .claude-plugin/ -│ └── marketplace.json ← Métadonnées du plugin -├── skills/ ← Skills anglais (routeur) +│ └── marketplace.json ← Metadonnees du plugin +├── skills/ ← Skills anglais │ ├── start/ │ │ ├── SKILL.md ← Routeur (~80 lignes) -│ │ └── references/ ← Base de connaissances par directive -│ │ ├── cii/ ← 14 références CII -│ │ └── ai-security/ ← 4 références sécurité IA +│ │ ├── references/ ← Documents de description/criteres +│ │ │ ├── ai-security/ ← Apercu, fournisseur de services, guide utilisateur +│ │ │ ├── space-security/ ← Apercu, scenarios de menaces de la chaine d'approvisionnement +│ │ │ └── zero-trust/ ← Maturite Zero Trust, OT/ICS +│ │ ├── templates/ ← Formulaires annexes, tableaux de checklist +│ │ │ ├── cii/ ← 14 tableaux de verification CII +│ │ │ ├── ai-security/ ← Verification developpeur IA, checklist utilisateur +│ │ │ ├── robot-security/ ← 6 checklists securite des robots +│ │ │ ├── space-security/ ← 4 tableaux de verification securite spatiale +│ │ │ └── zero-trust/ ← 9 checklists elements centraux Zero Trust +│ │ └── scripts/ ← Scripts de verification/correction executables +│ │ ├── cii/ ← Scripts bash, PowerShell, SQL +│ │ └── robot-security/ ← Scripts pare-feu, SBOM, certificats │ ├── check/ │ ├── fix/ │ └── guide/ -├── skills-ko/ ← Skills coréen (même structure) +├── skills-ko/ ← Skills coreen (meme structure) +├── 문서/ ← PDF sources (14) ├── authorkit/ ← Documents source et livrables │ ├── converted/ │ │ ├── ref-001/ ← Guide administratif et physique (full.md) │ │ ├── ref-002/ ← Guide technique (full.md) -│ │ └── ref-003/ ← Guide sécurité IA (full.md) +│ │ ├── ref-003/ ← Guide securite IA (full.md) +│ │ ├── ... +│ │ ├── ref-013/ ← Zero Trust Guideline 2.0 (full.md) +│ │ ├── ref-014/ ← Guide du modele de maturite Zero Trust (full.md) +│ │ └── ref-015/ ← Guide d'application Zero Trust pour l'OT (full.md) │ └── ... -├── 문서/ ← PDF sources +├── docs/ ← README en 20 langues +├── CONTRIBUTING.md └── README.md ``` @@ -106,61 +207,95 @@ KESE-KIT/ ## Historique des modifications +### v4.0.0 (2026-04-03) + +**Nouvelle directive ajoutee : Securite Zero Trust** +- Source : KISA Zero Trust Guideline 2.0 (245p) + Guide du modele de maturite Zero Trust (182p) + Guide d'application Zero Trust pour l'OT (67p) +- 9 elements centraux, ~421 elements de checklist +- 4 niveaux de maturite : Traditional → Initial → Advanced → Optimal +- Normes de reference : KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model +- 25 elements specifiques OT/ICS inclus + +### v3.2.0 (2026-04-02) + +**Nouvelle directive ajoutee : Guide de codage securise** +- Source : KISA Javascript Secure Coding Guide 159p + Python Secure Coding Guide 176p (edition revisee 2023) +- 7 categories, 46 elements, 49 correspondances CWE +- Nouveau guide Pseudo Code generique (motifs UNSAFE/SAFE independants du langage) +- Exemples de code par framework : JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) +- `references/secure-coding/` + `templates/secure-coding/` deployes dans les 8 skills (EN/KO) + +### v3.0.0 (2026-04-02) + +**Breaking Change : Changement de format des commandes** +- Tous les skills unifies sous le namespace `kesekit` +- Format des commandes : `/start` → `/kesekit-start` (ajout du prefixe namespace) + +**Nouvelle directive ajoutee : Securite spatiale** +- Source : Modele de securite spatiale Part1 134p + Part2 223p + Guide explicatif 218p +- 12 domaines, 53 elements de checklist +- Normes de reference : CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, CCSDS + +**Nouvelle directive ajoutee : Securite des robots** (v2.1) +- Source : Modele de securite des robots (avance) 156p + Guide de la checklist de securite des robots 225p +- 11 categories, ~103 elements de checklist +- Normes de reference : NIST SP 800-218, IEC 62443, EU CRA, EU RED, NIS2 + ### v2.0.0 (2026-03-30) **Refactoring structurel — Application du pattern Progressive Disclosure** -| Modification | Avant (v1.0) | Après (v2.0) | +| Modification | Avant (v1.0) | Apres (v2.0) | |-------------|-------------|-------------| | SKILL.md | Toutes les connaissances en ligne (270~465 lignes) | Routeur uniquement (~50~80 lignes) | -| Directives | CII uniquement | CII + Sécurité IA | -| Stockage des connaissances | Codé en dur dans SKILL.md | Séparé dans `references/` (18 fichiers) | -| Codes d'éléments | Seulement certains éléments | Tous les éléments basés sur le guide 2026 | -| Extensibilité | Ajout de nouvelles directives = plus de skills | 4 skills fixes, ajout de références uniquement | +| Directives | CII uniquement | CII + Securite IA | +| Stockage des connaissances | Code en dur dans SKILL.md | Separe dans `references/` (18 fichiers) | +| Codes d'elements | Seulement certains elements | Tous les elements bases sur le guide 2026 | +| Extensibilite | Ajout de nouvelles directives = plus de skills | 4 skills fixes, ajout de references uniquement | -**Nouvelle directive ajoutée : Guide de sécurité IA** -- Source : Ministère des Sciences et des TIC / KISA — « Guide de sécurité de l'intelligence artificielle (IA) » -- 54 éléments de vérification pour les développeurs IA (cycle de vie en 6 phases) -- Exigences de sécurité pour les fournisseurs de services IA -- 7 règles de sécurité pour les utilisateurs d'IA +**Nouvelle directive ajoutee : Guide de securite IA** +- Source : Ministere des Sciences et des TIC / KISA — « Guide de securite de l'intelligence artificielle (IA) » +- 54 elements de verification pour les developpeurs IA (cycle de vie en 6 phases) +- Exigences de securite pour les fournisseurs de services IA +- 7 regles de securite pour les utilisateurs d'IA -**Mise à jour des directives CII** -- Réextraction complète des éléments basée sur le guide détaillé 2026 -- Intégration du système de codes d'éléments (nouveaux codes WEB, HV, CA, etc.) +**Mise a jour des directives CII** +- Reextraction complete des elements basee sur le guide detaille 2026 +- Integration du systeme de codes d'elements (nouveaux codes WEB, HV, CA, etc.) ### v1.0.0 (2026-03-29) - Version initiale -- 4 skills d'évaluation des vulnérabilités CII (coréen/anglais) -- Éléments techniques (424) + administratifs (127) + physiques (9) +- 4 skills d'evaluation des vulnerabilites CII (coreen/anglais) +- Elements techniques (424) + administratifs (127) + physiques (9) --- ## Base juridique - **Loi sur la protection des infrastructures d'information et de communication** (정보통신기반 보호법) -- **Loi sur l'administration électronique** (전자정부법) -- **Loi sur la protection des données personnelles** (개인정보 보호법) -- **Loi fondamentale sur l'intelligence artificielle** (인공지능 기본법, entrée en vigueur le 22 janvier 2026) +- **Loi sur l'administration electronique** (전자정부법) +- **Loi sur la protection des donnees personnelles** (개인정보 보호법) +- **Loi fondamentale sur l'intelligence artificielle** (인공지능 기본법, entree en vigueur le 22 janvier 2026) --- -## Ressources associées +## Ressources associees -- [Guide détaillé d'évaluation des vulnérabilités techniques de la KISA](https://www.kisa.or.kr) -- [Guide de sécurité de l'intelligence artificielle (IA)](https://www.kisa.or.kr) +- [Guide detaille d'evaluation des vulnerabilites techniques de la KISA](https://www.kisa.or.kr) +- [Guide de securite de l'intelligence artificielle (IA)](https://www.kisa.or.kr) - [OWASP Top 10](https://owasp.org/Top10/) - [OWASP Top 10 for LLM](https://owasp.org/www-project-top-10-for-large-language-model-applications/) - [CWE/SANS Top 25](https://cwe.mitre.org/top25/) --- -## Conçu avec +## Concu avec | Plugin | Description | |--------|-------------| -| [authorkit-ko](https://github.com/cdppcorp/authorkit) | Skill d'aide à la rédaction — Analyse de PDF, extraction de structure, relecture/réécriture | -| [win-hooks](https://github.com/anthropics/claude-code-plugins) | Compatibilité des hooks de plugins Claude Code pour environnement Windows | +| [authorkit-ko](https://github.com/cdppcorp/authorkit) | Skill d'aide a la redaction — Analyse de PDF, extraction de structure, relecture/reecriture | +| [win-hooks](https://github.com/anthropics/claude-code-plugins) | Compatibilite des hooks de plugins Claude Code pour environnement Windows | --- diff --git a/docs/README.hi.md b/docs/README.hi.md index cb3ee16..bd8c671 100644 --- a/docs/README.hi.md +++ b/docs/README.hi.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -प्रमुख सूचना एवं संचार अवसंरचना (CII) की कमजोरी विश्लेषण-मूल्यांकन तथा AI सुरक्षा मूल्यांकन के लिए Claude Code स्किल प्लगइन। +प्रमुख सूचना एवं संचार अवसंरचना (CII) की कमजोरी विश्लेषण-मूल्यांकन, AI सुरक्षा मूल्यांकन, रोबोट सुरक्षा, अंतरिक्ष सुरक्षा, सुरक्षित कोडिंग गाइड और जीरो ट्रस्ट सुरक्षा मूल्यांकन के लिए Claude Code स्किल प्लगइन। --- ## अवलोकन -KESE (KISA Enhanced Security Evaluation Kit) एक Claude Code प्लगइन है जो KISA (कोरिया इंटरनेट एवं सुरक्षा एजेंसी) दिशानिर्देशों पर आधारित व्यापक सुरक्षा कमजोरी मूल्यांकन क्षमताएँ प्रदान करता है। यह प्रमुख सूचना अवसंरचना (CII) और AI सुरक्षा दोनों प्रकार के मूल्यांकनों का समर्थन करता है। +KESE (KISA Enhanced Security Evaluation Kit) एक Claude Code प्लगइन है जो KISA (कोरिया इंटरनेट एवं सुरक्षा एजेंसी) दिशानिर्देशों पर आधारित व्यापक सुरक्षा कमजोरी मूल्यांकन क्षमताएँ प्रदान करता है। यह प्रमुख सूचना अवसंरचना (CII), AI सुरक्षा, रोबोट सुरक्षा, अंतरिक्ष सुरक्षा, सुरक्षित कोडिंग और जीरो ट्रस्ट सुरक्षा मूल्यांकनों का समर्थन करता है। ## सुविधाएँ | स्किल | विवरण | |-------|-------| -| `/kesekit-en:start` | पूर्ण सुरक्षा कमजोरी मूल्यांकन चलाएँ (CII 560+ आइटम या AI सुरक्षा) | -| `/kesekit-en:check` | तैनाती-पूर्व सुरक्षा अनुपालन चेकलिस्ट | -| `/kesekit-en:fix` | हार्डनिंग स्क्रिप्ट और सुरक्षा सुधार स्वचालित रूप से तैयार करें | -| `/kesekit-en:guide` | AI उपकरणों के लिए सुरक्षित कोडिंग प्रॉम्प्ट तैयार करें | +| `/kesekit-start` | पूर्ण सुरक्षा कमजोरी मूल्यांकन चलाएँ (CII 560+ / AI सुरक्षा / रोबोट सुरक्षा / अंतरिक्ष सुरक्षा / सुरक्षित कोडिंग / जीरो ट्रस्ट) | +| `/kesekit-check` | तैनाती-पूर्व सुरक्षा अनुपालन चेकलिस्ट (CII / AI / रोबोट / अंतरिक्ष / सुरक्षित कोडिंग / जीरो ट्रस्ट) | +| `/kesekit-fix` | हार्डनिंग स्क्रिप्ट और सुरक्षा सुधार स्वचालित रूप से तैयार करें (CII / AI / रोबोट / अंतरिक्ष / सुरक्षित कोडिंग / जीरो ट्रस्ट) | +| `/kesekit-guide` | AI उपकरणों के लिए सुरक्षित कोडिंग प्रॉम्प्ट तैयार करें (CII / AI / रोबोट / अंतरिक्ष / JS·Python·सामान्य / जीरो ट्रस्ट) | ## समर्थित दिशानिर्देश @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) एक Claude Code प्लगइ | सेवा प्रदाता | ~43 | 6-चरण (योजना→विकास→संचालन→रखरखाव→प्रतिक्रिया→विलोपन) | | उपयोगकर्ता | 7 | सुरक्षा सर्वोत्तम प्रथाएँ | +### 3. रोबोट सुरक्षा — ~103 आइटम + +| श्रेणी | कोड | आइटम | संदर्भ मानक | +|--------|------|:-----:|------------| +| सुरक्षित SW विकास (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| आपूर्ति श्रृंखला सुरक्षा | SC-01~07 | 7 | NIST SP 800-161 | +| पहचान एवं प्रमाणीकरण | IA-01~11 | 11 | IEC 62443 | +| उपयोग नियंत्रण | UC-01~11 | 11 | IEC 62443 | +| सिस्टम अखंडता | SI-01~11 | 11 | IEC 62443 | +| डेटा सुरक्षा | DP-01~04 | 4 | IEC 62443 | +| डेटा प्रवाह प्रतिबंध | DFR-01~02 | 2 | IEC 62443 | +| घटना प्रतिक्रिया | ER-01~03 | 3 | IEC 62443 | +| संसाधन उपलब्धता | RA-01~08 | 8 | IEC 62443 | +| साइबर लचीलापन | CR-01~13 | 13 | EU CRA | +| वायरलेस सुरक्षा | WS-01~14 | 14 | EU RED | + +लक्षित समूह: औद्योगिक / सेवा / चिकित्सा रोबोट (ISO 8373) + +### 4. अंतरिक्ष सुरक्षा — 53 आइटम + +| क्षेत्र | कोड | आइटम | संदर्भ मानक | +|---------|------|:-----:|------------| +| पहुँच नियंत्रण | AC-01~12 | 12 | CMMC, K-RMF | +| पहचान एवं प्रमाणीकरण | IA-01~02 | 2 | CMMC, NIS2 | +| सिस्टम एवं संचार सुरक्षा | SC-01~07 | 7 | NIST IR 8401 | +| सिस्टम एवं सूचना अखंडता | SI-01~04 | 4 | NIST CSF | +| सिस्टम/सेवा परिचालन प्रबंधन | SO-01~09 | 9 | ISMS-P | +| घटना प्रतिक्रिया | IR-01~02 | 2 | NIS2 | +| कार्मिक सुरक्षा | PS-01~02 | 2 | CMMC | +| भौतिक सुरक्षा | PE-01~03 | 3 | K-RMF | +| जोखिम एवं सुरक्षा मूल्यांकन | RA-01~02 | 2 | NIST CSF | +| सुरक्षा शासन | SG-01~04 | 4 | ISMS-P | +| आपातकालीन योजना | CP-01~02 | 2 | NIST IR 8270 | +| आपूर्ति श्रृंखला प्रबंधन | SM-01~04 | 4 | CMMC, NIS2 | + +लक्षित समूह: उपग्रह संचालक, GSaaS प्रदाता, भू-स्टेशन संचालक, अंतरिक्ष आपूर्ति श्रृंखला कंपनियाँ + +### 5. सुरक्षित कोडिंग गाइड — 46 आइटम + +| श्रेणी | आइटम | CWE | संदर्भ मानक | +|--------|:-----:|:---:|------------| +| इनपुट डेटा सत्यापन एवं प्रतिनिधित्व | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| सुरक्षा कार्य | 16 | 16 | CWE/SANS Top 25 | +| समय एवं स्थिति | 2 | 3 | CWE | +| त्रुटि प्रबंधन | 3 | 3 | CWE | +| कोड त्रुटियाँ | 3 | 3 | CWE | +| एनकैप्सुलेशन | 4 | 5 | CWE | +| API दुरुपयोग | 2 | 1 | CWE | + +**समर्थित भाषाएँ:** +| भाषा | आइटम | फ्रेमवर्क | +|------|:-----:|-----------| +| Pseudo Code (सामान्य) | 46 | भाषा-स्वतंत्र पैटर्न | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +लक्षित समूह: JavaScript/Python वेब डेवलपर, AI उपकरण (Claude, Cursor, Copilot) उपयोगकर्ता, वाइब कोडिंग डेवलपर + +### 6. जीरो ट्रस्ट सुरक्षा — ~421 आइटम + +| मूल तत्व | कोड | आइटम | परिपक्वता | +|----------|------|:-----:|-----------| +| पहचान | ZT-ID-01~53 | 53 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | +| डिवाइस एवं एंडपॉइंट | ZT-DV-01~36 | 36 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | +| नेटवर्क | ZT-NW-01~54 | 54 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | +| सिस्टम | ZT-SY-01~49 | 49 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | +| एप्लिकेशन एवं वर्कलोड | ZT-AP-01~60 | 60 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | +| डेटा | ZT-DA-01~58 | 58 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | +| दृश्यता एवं विश्लेषिकी | ZT-VA-01~43 | 43 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | +| स्वचालन एवं ऑर्केस्ट्रेशन | ZT-AU-01~43 | 43 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | +| OT/ICS विशिष्ट | ZT-OT-01~25 | 25 | पारंपरिक/प्रारंभिक/उन्नत/इष्टतम | + +**4 परिपक्वता स्तर**: पारंपरिक (Traditional) → प्रारंभिक (Initial) → उन्नत (Advanced) → इष्टतम (Optimal) +**संदर्भ मानक**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +लक्षित समूह: जीरो ट्रस्ट अपनाने वाले उद्यम, OT/ICS वातावरण, क्लाउड माइग्रेशन संगठन, सुरक्षा परिपक्वता मूल्यांकन प्रभारी + ## स्थापना -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## उपयोग ```bash # पूर्ण सुरक्षा मूल्यांकन शुरू करें -/kesekit-en:start +/kesekit-start # तैनाती-पूर्व चेकलिस्ट चलाएँ -/kesekit-en:check +/kesekit-check # हार्डनिंग स्क्रिप्ट तैयार करें -/kesekit-en:fix +/kesekit-fix # सुरक्षित कोडिंग प्रॉम्प्ट प्राप्त करें -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,29 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← प्लगइन मेटाडेटा -├── skills/ ← अंग्रेज़ी स्किल (राउटर) +├── skills/ ← अंग्रेज़ी स्किल │ ├── start/ │ │ ├── SKILL.md ← राउटर (~80 पंक्तियाँ) -│ │ └── references/ ← दिशानिर्देश-आधारित ज्ञान -│ │ ├── cii/ ← CII 14 संदर्भ -│ │ └── ai-security/ ← AI सुरक्षा 4 संदर्भ +│ │ ├── references/ ← वर्णनात्मक/मानक दस्तावेज़ +│ │ │ ├── ai-security/ ← अवलोकन, प्रदाता, उपयोगकर्ता गाइड +│ │ │ └── space-security/ ← अवलोकन, खतरा परिदृश्य +│ │ ├── templates/ ← फ़ॉर्म, चेकलिस्ट तालिकाएँ +│ │ │ ├── cii/ ← CII 14 जाँच तालिकाएँ +│ │ │ ├── ai-security/ ← AI डेवलपर सत्यापन, उपयोगकर्ता चेकलिस्ट +│ │ │ ├── robot-security/ ← रोबोट सुरक्षा 6 चेकलिस्ट +│ │ │ ├── space-security/ ← अंतरिक्ष सुरक्षा 4 जाँच तालिकाएँ +│ │ │ └── zero-trust/ ← जीरो ट्रस्ट जाँच तालिकाएँ +│ │ └── scripts/ ← निष्पादन योग्य जाँच/सुधार स्क्रिप्ट +│ │ ├── cii/ ← bash, PowerShell, SQL स्क्रिप्ट +│ │ └── robot-security/ ← फ़ायरवॉल, SBOM, प्रमाणपत्र स्क्रिप्ट │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← कोरियाई स्किल (समान संरचना) -├── authorkit/ ← मूल दस्तावेज़ और कार्य-परिणाम -│ ├── converted/ -│ │ ├── ref-001/ ← प्रशासनिक/भौतिक गाइड (full.md) -│ │ ├── ref-002/ ← तकनीकी गाइड (full.md) -│ │ └── ref-003/ ← AI सुरक्षा गाइड (full.md) -│ └── ... ├── 문서/ ← मूल PDF +├── authorkit/ ← मूल दस्तावेज़ और कार्य-परिणाम +├── docs/ ← 20 भाषाओं में README +├── CONTRIBUTING.md ← दिशानिर्देश जोड़ने का तरीका └── README.md ``` @@ -106,6 +190,33 @@ KESE-KIT/ ## परिवर्तन इतिहास +### v4.0.0 (2026-04-03) + +**नया दिशानिर्देश जोड़ा गया: जीरो ट्रस्ट सुरक्षा** +- स्रोत: KISA Zero Trust Guideline 2.0 (245 पृष्ठ) + Zero Trust परिपक्वता मॉडल (182 पृष्ठ) + OT के लिए Zero Trust गाइड (67 पृष्ठ) +- 9 मूल तत्व, ~421 जाँच आइटम, 4 परिपक्वता स्तर +- OT/ICS विशिष्ट समर्थन (ZT-OT-01~25) +- मानक: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**नया दिशानिर्देश जोड़ा गया: सुरक्षित कोडिंग गाइड** +- स्रोत: KISA Javascript Secure Coding Guide 159 पृष्ठ + Python Secure Coding Guide 176 पृष्ठ (2023 संशोधन) +- 7 श्रेणियाँ, 46 आइटम, 49 CWE मैपिंग +- सामान्य Pseudo Code गाइड नई रचना (भाषा-स्वतंत्र UNSAFE/SAFE पैटर्न) +- JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) फ्रेमवर्क कोड उदाहरण + +### v3.0.0 (2026-04-02) + +**ब्रेकिंग चेंज: कमांड प्रारूप अपडेट** +- सभी स्किल एकल `kesekit` नेमस्पेस में एकीकृत +- कमांड प्रारूप: `/start` → `/kesekit-start` (नेमस्पेस उपसर्ग जोड़ा गया) + +**नया दिशानिर्देश जोड़ा गया: अंतरिक्ष सुरक्षा** +- स्रोत: अंतरिक्ष सुरक्षा मॉडल Part1 134 पृष्ठ + Part2 223 पृष्ठ + व्याख्या गाइड 218 पृष्ठ (MSIT/KISA) +- 12 क्षेत्र, 53 चेकलिस्ट आइटम +- लक्षित समूह: उपग्रह संचालक, GSaaS प्रदाता, भू-स्टेशन संचालक + ### v2.0.0 (2026-03-30) **संरचना पुनर्गठन — Progressive Disclosure पैटर्न लागू** diff --git a/docs/README.id.md b/docs/README.id.md index dad2ead..10a4ffb 100644 --- a/docs/README.id.md +++ b/docs/README.id.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Plugin Claude Code untuk analisis dan evaluasi kerentanan Infrastruktur Informasi Kritis (CII) serta evaluasi keamanan AI berdasarkan pedoman KISA (Badan Internet dan Keamanan Korea). +Plugin Claude Code untuk analisis dan evaluasi kerentanan Infrastruktur Informasi Kritis (CII), evaluasi keamanan AI, keamanan robot, keamanan ruang angkasa, panduan secure coding, dan evaluasi Zero Trust berdasarkan pedoman KISA (Badan Internet dan Keamanan Korea). --- ## Ikhtisar -KESE (KISA Enhanced Security Evaluation Kit) adalah plugin Claude Code yang menyediakan kemampuan penilaian kerentanan keamanan secara menyeluruh berdasarkan pedoman KISA (Badan Internet dan Keamanan Korea). Mendukung penilaian Infrastruktur Informasi Kritis (CII) maupun penilaian Keamanan AI. +KESE (KISA Enhanced Security Evaluation Kit) adalah plugin Claude Code yang menyediakan kemampuan penilaian kerentanan keamanan secara menyeluruh berdasarkan pedoman KISA (Badan Internet dan Keamanan Korea). Mendukung penilaian Infrastruktur Informasi Kritis (CII), Keamanan AI, Keamanan Robot, Keamanan Ruang Angkasa, Secure Coding, dan evaluasi Zero Trust. ## Fitur | Skill | Deskripsi | |-------|-----------| -| `/kesekit-en:start` | Menjalankan penilaian kerentanan keamanan lengkap (CII 560+ item atau AI Security) | -| `/kesekit-en:check` | Daftar periksa kepatuhan keamanan sebelum deployment | -| `/kesekit-en:fix` | Menghasilkan skrip hardening dan perbaikan keamanan secara otomatis | -| `/kesekit-en:guide` | Membuat prompt secure coding untuk alat AI | +| `/kesekit-start` | Menjalankan penilaian kerentanan keamanan lengkap (CII 560+ / AI / Robot / Ruang Angkasa / Secure Coding / Zero Trust) | +| `/kesekit-check` | Daftar periksa kepatuhan keamanan sebelum deployment (CII / AI / Robot / Ruang Angkasa / Secure Coding / Zero Trust) | +| `/kesekit-fix` | Menghasilkan skrip hardening dan perbaikan keamanan secara otomatis (CII / AI / Robot / Ruang Angkasa / Secure Coding / Zero Trust) | +| `/kesekit-guide` | Membuat prompt secure coding untuk alat AI (CII / AI / Robot / Ruang Angkasa / JS·Python·Umum / Zero Trust) | ## Pedoman yang Didukung @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) adalah plugin Claude Code yang meny | Penyedia Layanan AI | ~43 | 6 tahap (Perencanaan→Pengembangan→Operasi→Pemeliharaan→Umpan Balik→Penghentian) | | Pengguna AI | 7 | Praktik terbaik keamanan | +### 3. Keamanan Robot — ~103 item + +| Kategori | Kode | Jumlah Item | Standar Referensi | +|----------|------|:----------:|------------------| +| Pengembangan SW Aman (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Keamanan Rantai Pasok | SC-01~07 | 7 | NIST SP 800-161 | +| Identifikasi dan Otentikasi | IA-01~11 | 11 | IEC 62443 | +| Kontrol Penggunaan | UC-01~11 | 11 | IEC 62443 | +| Integritas Sistem | SI-01~11 | 11 | IEC 62443 | +| Perlindungan Data | DP-01~04 | 4 | IEC 62443 | +| Pembatasan Aliran Data | DFR-01~02 | 2 | IEC 62443 | +| Respons Kejadian | ER-01~03 | 3 | IEC 62443 | +| Ketersediaan Sumber Daya | RA-01~08 | 8 | IEC 62443 | +| Ketahanan Siber | CR-01~13 | 13 | EU CRA | +| Keamanan Nirkabel | WS-01~14 | 14 | EU RED | + +Target: Robot industri / Robot layanan / Robot medis (ISO 8373) + +### 4. Keamanan Ruang Angkasa — 53 item + +| Bidang | Kode | Jumlah Item | Standar Referensi | +|--------|------|:----------:|------------------| +| Kontrol Akses | AC-01~12 | 12 | CMMC, K-RMF | +| Identifikasi dan Otentikasi | IA-01~02 | 2 | CMMC, NIS2 | +| Keamanan Sistem dan Komunikasi | SC-01~07 | 7 | NIST IR 8401 | +| Integritas Sistem dan Informasi | SI-01~04 | 4 | NIST CSF | +| Manajemen Operasi Sistem/Layanan | SO-01~09 | 9 | ISMS-P | +| Respons Insiden | IR-01~02 | 2 | NIS2 | +| Keamanan Personel | PS-01~02 | 2 | CMMC | +| Keamanan Fisik | PE-01~03 | 3 | K-RMF | +| Penilaian Risiko dan Keamanan | RA-01~02 | 2 | NIST CSF | +| Tata Kelola Keamanan | SG-01~04 | 4 | ISMS-P | +| Rencana Darurat | CP-01~02 | 2 | NIST IR 8270 | +| Manajemen Rantai Pasok | SM-01~04 | 4 | CMMC, NIS2 | + +Target: Operator satelit, Penyedia GSaaS, Operator stasiun bumi, Perusahaan dalam rantai pasok ruang angkasa + +### 5. Panduan Secure Coding — 46 item + +| Kategori | Jumlah Item | Jumlah CWE | Standar Referensi | +|----------|:----------:|:--------:|------------------| +| Validasi dan Representasi Data Input | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Fungsi Keamanan | 16 | 16 | CWE/SANS Top 25 | +| Waktu dan Status | 2 | 3 | CWE | +| Penanganan Kesalahan | 3 | 3 | CWE | +| Kesalahan Kode | 3 | 3 | CWE | +| Enkapsulasi | 4 | 5 | CWE | +| Penyalahgunaan API | 2 | 1 | CWE | + +**Bahasa yang Didukung:** +| Bahasa | Jumlah Item | Framework | +|--------|:----------:|-----------| +| Pseudo Code (Umum) | 46 | Pola yang tidak terikat bahasa | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Target: Pengembang web JavaScript/Python, Pengguna alat AI (Claude, Cursor, Copilot), Pengembang Vibe Coding + +### 6. Keamanan Zero Trust — ~421 item + +| Elemen Inti | Kode | Jumlah Item | Kematangan | +|-------------|------|:----------:|-----------| +| Identitas | ZT-ID-01~53 | 53 | Tradisional/Awal/Lanjutan/Optimal | +| Perangkat & Titik Akhir | ZT-DV-01~36 | 36 | Tradisional/Awal/Lanjutan/Optimal | +| Jaringan | ZT-NW-01~54 | 54 | Tradisional/Awal/Lanjutan/Optimal | +| Sistem | ZT-SY-01~49 | 49 | Tradisional/Awal/Lanjutan/Optimal | +| Aplikasi & Beban Kerja | ZT-AP-01~60 | 60 | Tradisional/Awal/Lanjutan/Optimal | +| Data | ZT-DA-01~58 | 58 | Tradisional/Awal/Lanjutan/Optimal | +| Visibilitas & Analitik | ZT-VA-01~43 | 43 | Tradisional/Awal/Lanjutan/Optimal | +| Otomatisasi & Orkestrasi | ZT-AU-01~43 | 43 | Tradisional/Awal/Lanjutan/Optimal | +| Khusus OT/ICS | ZT-OT-01~25 | 25 | Tradisional/Awal/Lanjutan/Optimal | + +**4 Tingkat Kematangan**: Tradisional (Traditional) → Awal (Initial) → Lanjutan (Advanced) → Optimal (Optimal) +**Standar Referensi**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Target: Organisasi yang mengadopsi Zero Trust, Lingkungan OT/ICS, Organisasi yang bermigrasi ke cloud, Penilai kematangan keamanan + ## Instalasi -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## Penggunaan ```bash # Memulai penilaian keamanan lengkap -/kesekit-en:start +/kesekit-start # Menjalankan daftar periksa sebelum deployment -/kesekit-en:check +/kesekit-check # Menghasilkan skrip hardening -/kesekit-en:fix +/kesekit-fix # Mendapatkan prompt secure coding -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,28 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Metadata plugin -├── skills/ ← Skill bahasa Inggris (router) +├── skills/ ← Skill bahasa Inggris │ ├── start/ │ │ ├── SKILL.md ← Router (~80 baris) -│ │ └── references/ ← Basis pengetahuan per pedoman -│ │ ├── cii/ ← 14 referensi CII -│ │ └── ai-security/ ← 4 referensi keamanan AI +│ │ ├── references/ ← Dokumen deskripsi/kriteria +│ │ │ ├── ai-security/ ← Ikhtisar, penyedia layanan, panduan pengguna +│ │ │ └── space-security/ ← Ikhtisar, skenario ancaman rantai pasok +│ │ ├── templates/ ← Formulir, tabel daftar periksa +│ │ │ ├── cii/ ← 14 tabel pemeriksaan CII +│ │ │ ├── ai-security/ ← Daftar periksa pengembang AI, pengguna +│ │ │ ├── robot-security/ ← 6 daftar periksa keamanan robot +│ │ │ ├── space-security/ ← 4 tabel pemeriksaan ruang angkasa +│ │ │ └── zero-trust/ ← Tabel daftar periksa Zero Trust +│ │ └── scripts/ ← Skrip pemeriksaan/perbaikan +│ │ ├── cii/ ← bash, PowerShell, SQL +│ │ └── robot-security/ ← Firewall, SBOM, sertifikat │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Skill bahasa Korea (struktur sama) -├── authorkit/ ← Dokumen sumber dan hasil kerja -│ ├── converted/ -│ │ ├── ref-001/ ← Panduan administratif & fisik (full.md) -│ │ ├── ref-002/ ← Panduan teknis (full.md) -│ │ └── ref-003/ ← Panduan keamanan AI (full.md) -│ └── ... ├── 문서/ ← PDF asli +├── authorkit/ ← Dokumen sumber dan hasil kerja +├── docs/ ← README 20 bahasa └── README.md ``` @@ -106,6 +189,30 @@ KESE-KIT/ ## Riwayat Perubahan +### v4.0.0 (2026-04-03) + +**Pedoman Baru: Keamanan Zero Trust — ~421 item** +- Sumber: KISA Zero Trust Guideline 2.0 (245 hal) + Panduan Model Kematangan (182 hal) + Panduan Penerapan OT (67 hal) +- 9 elemen inti, ~421 item daftar periksa, 4 tingkat kematangan +- Standar: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Pedoman Baru: Secure Coding** +- Sumber: KISA Javascript Secure Coding Guide 159 hal + Python Secure Coding Guide 176 hal (revisi 2023) +- 7 kategori, 46 item, 49 CWE +- JavaScript / Python / Pseudo Code (umum) + +### v3.0.0 (2026-04-02) + +**Breaking Change: Perubahan format perintah** +- Semua skill digabungkan ke namespace `kesekit` tunggal +- Format perintah: `/start` → `/kesekit-start` + +**Pedoman Baru: Keamanan Ruang Angkasa** +- Sumber: Space Security Model Part1 134 hal + Part2 223 hal + Panduan Penjelasan 218 hal +- 12 bidang, 53 item daftar periksa + ### v2.0.0 (2026-03-30) **Refaktorisasi Struktur — Penerapan Pola Progressive Disclosure** diff --git a/docs/README.it.md b/docs/README.it.md index a36bb64..d9eea54 100644 --- a/docs/README.it.md +++ b/docs/README.it.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Plugin per Claude Code dedicato alla valutazione delle vulnerabilita delle Infrastrutture Critiche Informatiche (CII) e alla valutazione della sicurezza dell'IA, basato sulle linee guida della KISA (Agenzia Coreana per Internet e la Sicurezza). +Plugin per Claude Code dedicato alla valutazione delle vulnerabilita delle Infrastrutture Critiche Informatiche (CII), alla valutazione della sicurezza dell'IA, alla sicurezza robotica, alla sicurezza spaziale, alla guida alla codifica sicura e alla valutazione della sicurezza Zero Trust, basato sulle linee guida della KISA (Agenzia Coreana per Internet e la Sicurezza). --- ## Panoramica -KESE (KISA Enhanced Security Evaluation Kit) e un plugin per Claude Code che fornisce funzionalita complete di valutazione delle vulnerabilita di sicurezza basate sulle linee guida della KISA (Agenzia Coreana per Internet e la Sicurezza). Supporta sia le valutazioni delle Infrastrutture Critiche Informatiche (CII) sia le valutazioni della Sicurezza dell'IA. +KESE (KISA Enhanced Security Evaluation Kit) e un plugin per Claude Code che fornisce funzionalita complete di valutazione delle vulnerabilita di sicurezza basate sulle linee guida della KISA (Agenzia Coreana per Internet e la Sicurezza). Supporta le valutazioni delle Infrastrutture Critiche Informatiche (CII), della Sicurezza dell'IA, della Sicurezza Robotica, della Sicurezza Spaziale, della Codifica Sicura e della Sicurezza Zero Trust. ## Funzionalita | Skill | Descrizione | |-------|-------------| -| `/kesekit-en:start` | Eseguire la valutazione completa delle vulnerabilita di sicurezza (CII 560+ elementi o Sicurezza IA) | -| `/kesekit-en:check` | Checklist di conformita di sicurezza pre-distribuzione | -| `/kesekit-en:fix` | Generare automaticamente script di hardening e correzioni di sicurezza | -| `/kesekit-en:guide` | Generare prompt di codifica sicura per strumenti di IA | +| `/kesekit-start` | Eseguire la valutazione completa delle vulnerabilita di sicurezza (CII 560+ / Sicurezza IA / Sicurezza Robotica / Sicurezza Spaziale / Codifica Sicura / Zero Trust) | +| `/kesekit-check` | Checklist di conformita di sicurezza pre-distribuzione (CII / IA / Robot / Spazio / Codifica Sicura / Zero Trust) | +| `/kesekit-fix` | Generare automaticamente script di hardening e correzioni di sicurezza (CII / IA / Robot / Spazio / Codifica Sicura / Zero Trust) | +| `/kesekit-guide` | Generare prompt di codifica sicura per strumenti di IA (CII / IA / Robot / Spazio / JS·Python·Generico / Zero Trust) | ## Linee Guida Supportate @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) e un plugin per Claude Code che for | Fornitore di Servizi | ~43 | 6 fasi (Pianificazione→Sviluppo→Operazioni→Manutenzione→Feedback→Dismissione) | | Utente | 7 | Best practice di sicurezza | +### 3. Sicurezza Robotica — ~103 elementi + +| Categoria | Codice | Elementi | Standard di Riferimento | +|-----------|--------|:--------:|------------------------| +| Sviluppo SW sicuro (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Sicurezza della catena di fornitura | SC-01~07 | 7 | NIST SP 800-161 | +| Identificazione e autenticazione | IA-01~11 | 11 | IEC 62443 | +| Controllo d'uso | UC-01~11 | 11 | IEC 62443 | +| Integrita del sistema | SI-01~11 | 11 | IEC 62443 | +| Protezione dei dati | DP-01~04 | 4 | IEC 62443 | +| Limitazione del flusso dati | DFR-01~02 | 2 | IEC 62443 | +| Risposta agli eventi | ER-01~03 | 3 | IEC 62443 | +| Disponibilita delle risorse | RA-01~08 | 8 | IEC 62443 | +| Resilienza informatica | CR-01~13 | 13 | EU CRA | +| Sicurezza wireless | WS-01~14 | 14 | EU RED | + +Destinatari: Robot industriali / di servizio / medici (ISO 8373) + +### 4. Sicurezza Spaziale — 53 elementi + +| Area | Codice | Elementi | Standard di Riferimento | +|------|--------|:--------:|------------------------| +| Controllo accessi | AC-01~12 | 12 | CMMC, K-RMF | +| Identificazione e autenticazione | IA-01~02 | 2 | CMMC, NIS2 | +| Sicurezza sistemi e comunicazioni | SC-01~07 | 7 | NIST IR 8401 | +| Integrita sistemi e informazioni | SI-01~04 | 4 | NIST CSF | +| Gestione operativa sistemi/servizi | SO-01~09 | 9 | ISMS-P | +| Risposta agli incidenti | IR-01~02 | 2 | NIS2 | +| Sicurezza del personale | PS-01~02 | 2 | CMMC | +| Sicurezza fisica | PE-01~03 | 3 | K-RMF | +| Valutazione dei rischi e della sicurezza | RA-01~02 | 2 | NIST CSF | +| Governance della sicurezza | SG-01~04 | 4 | ISMS-P | +| Piani di emergenza | CP-01~02 | 2 | NIST IR 8270 | +| Gestione della catena di fornitura | SM-01~04 | 4 | CMMC, NIS2 | + +Destinatari: Operatori satellitari, fornitori GSaaS, operatori di stazioni di terra, aziende della catena di fornitura spaziale + +### 5. Guida alla Codifica Sicura — 46 elementi + +| Categoria | Elementi | CWE | Standard di Riferimento | +|-----------|:--------:|:---:|------------------------| +| Validazione e rappresentazione dati di input | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Funzionalita di sicurezza | 16 | 16 | CWE/SANS Top 25 | +| Tempo e stato | 2 | 3 | CWE | +| Gestione errori | 3 | 3 | CWE | +| Errori di codice | 3 | 3 | CWE | +| Incapsulamento | 4 | 5 | CWE | +| Uso improprio delle API | 2 | 1 | CWE | + +**Linguaggi supportati:** +| Linguaggio | Elementi | Framework | +|------------|:--------:|-----------| +| Pseudo Code (generico) | 46 | Pattern indipendenti dal linguaggio | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Destinatari: Sviluppatori web JavaScript/Python, utenti di strumenti IA (Claude, Cursor, Copilot), sviluppatori vibe coding + +### 6. Sicurezza Zero Trust — ~421 elementi + +| Elemento Fondamentale | Codice | Elementi | Maturita | +|-----------------------|--------|:--------:|----------| +| Identita | ZT-ID-01~53 | 53 | Tradizionale/Iniziale/Avanzato/Ottimale | +| Dispositivi ed Endpoint | ZT-DV-01~36 | 36 | Tradizionale/Iniziale/Avanzato/Ottimale | +| Rete | ZT-NW-01~54 | 54 | Tradizionale/Iniziale/Avanzato/Ottimale | +| Sistema | ZT-SY-01~49 | 49 | Tradizionale/Iniziale/Avanzato/Ottimale | +| Applicazioni e Carichi di Lavoro | ZT-AP-01~60 | 60 | Tradizionale/Iniziale/Avanzato/Ottimale | +| Dati | ZT-DA-01~58 | 58 | Tradizionale/Iniziale/Avanzato/Ottimale | +| Visibilita e Analisi | ZT-VA-01~43 | 43 | Tradizionale/Iniziale/Avanzato/Ottimale | +| Automazione e Orchestrazione | ZT-AU-01~43 | 43 | Tradizionale/Iniziale/Avanzato/Ottimale | +| Specifico OT/ICS | ZT-OT-01~25 | 25 | Tradizionale/Iniziale/Avanzato/Ottimale | + +**4 livelli di maturita**: Tradizionale → Iniziale → Avanzato → Ottimale +**Standard di riferimento**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Destinatari: Aziende che adottano Zero Trust, ambienti OT/ICS, organizzazioni in migrazione cloud, responsabili della valutazione della maturita della sicurezza + ## Installazione -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## Utilizzo ```bash # Avviare la valutazione completa di sicurezza -/kesekit-en:start +/kesekit-start # Eseguire la checklist pre-distribuzione -/kesekit-en:check +/kesekit-check # Generare script di hardening -/kesekit-en:fix +/kesekit-fix # Ottenere prompt di codifica sicura -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,29 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Metadati del plugin -├── skills/ ← Skill in inglese (router) +├── skills/ ← Skill in inglese │ ├── start/ │ │ ├── SKILL.md ← Router (~80 righe) -│ │ └── references/ ← Conoscenze per linea guida -│ │ ├── cii/ ← 14 riferimenti CII -│ │ └── ai-security/ ← 4 riferimenti Sicurezza IA +│ │ ├── references/ ← Documenti descrittivi/normativi +│ │ │ ├── ai-security/ ← Panoramica, fornitori, guida utente +│ │ │ └── space-security/ ← Panoramica, scenari di minaccia +│ │ ├── templates/ ← Moduli, tabelle checklist +│ │ │ ├── cii/ ← 14 tabelle di verifica CII +│ │ │ ├── ai-security/ ← Verifica sviluppatore IA, checklist utente +│ │ │ ├── robot-security/ ← 6 checklist sicurezza robotica +│ │ │ ├── space-security/ ← 4 tabelle verifica sicurezza spaziale +│ │ │ └── zero-trust/ ← Tabelle verifica Zero Trust +│ │ └── scripts/ ← Script di verifica/correzione eseguibili +│ │ ├── cii/ ← Script bash, PowerShell, SQL +│ │ └── robot-security/ ← Script firewall, SBOM, certificati │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Skill in coreano (stessa struttura) -├── authorkit/ ← Documenti originali e artefatti di lavoro -│ ├── converted/ -│ │ ├── ref-001/ ← Guida amministrativa/fisica (full.md) -│ │ ├── ref-002/ ← Guida tecnica (full.md) -│ │ └── ref-003/ ← Guida Sicurezza IA (full.md) -│ └── ... ├── 문서/ ← PDF originali +├── authorkit/ ← Documenti originali e artefatti di lavoro +├── docs/ ← README in 20 lingue +├── CONTRIBUTING.md ← Come aggiungere linee guida └── README.md ``` @@ -106,6 +190,33 @@ KESE-KIT/ ## Registro delle Modifiche +### v4.0.0 (2026-04-03) + +**Nuova Linea Guida Aggiunta: Sicurezza Zero Trust** +- Fonte: KISA Zero Trust Guideline 2.0 (245p) + Modello di Maturita Zero Trust (182p) + Guida Zero Trust per OT (67p) +- 9 elementi fondamentali, ~421 voci di verifica, 4 livelli di maturita +- Supporto OT/ICS specifico (ZT-OT-01~25) +- Standard: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Nuova Linea Guida Aggiunta: Guida alla Codifica Sicura** +- Fonte: KISA Javascript Secure Coding Guide 159p + Python Secure Coding Guide 176p (revisione 2023) +- 7 categorie, 46 elementi, 49 CWE mappati +- Guida Pseudo Code generica di nuova creazione (pattern UNSAFE/SAFE indipendenti dal linguaggio) +- Esempi di codice per framework JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) + +### v3.0.0 (2026-04-02) + +**Modifica incompatibile: formato dei comandi aggiornato** +- Tutti gli skill unificati sotto il namespace `kesekit` +- Formato comandi: `/start` → `/kesekit-start` (prefisso namespace aggiunto) + +**Nuova Linea Guida Aggiunta: Sicurezza Spaziale** +- Fonte: Modello di Sicurezza Spaziale Part1 134p + Part2 223p + Guida Esplicativa 218p (MSIT/KISA) +- 12 aree, 53 voci di checklist +- Destinatari: Operatori satellitari, fornitori GSaaS, operatori stazioni di terra + ### v2.0.0 (2026-03-30) **Refactoring della Struttura — Applicazione del pattern Progressive Disclosure** diff --git a/docs/README.ja.md b/docs/README.ja.md index 05bd6e0..ce2df2e 100644 --- a/docs/README.ja.md +++ b/docs/README.ja.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -主要情報通信基盤施設(CII)の脆弱性分析評価およびAIセキュリティ評価のためのClaude Codeスキルプラグインです。 +主要情報通信基盤施設(CII)の脆弱性分析評価、AIセキュリティ評価、ロボットセキュリティ点検、宇宙セキュリティ点検、セキュアコーディングガイド、ゼロトラストセキュリティ評価のためのClaude Codeスキルプラグインです。 --- ## 概要 -KESE(KISA Enhanced Security Evaluation Kit)は、KISA(韓国インターネット振興院)のガイドラインに基づいた包括的なセキュリティ脆弱性分析評価機能を提供するClaude Codeプラグインです。主要情報通信基盤施設(CII)の脆弱性分析評価とAIセキュリティ評価の両方に対応しています。 +KESE(KISA Enhanced Security Evaluation Kit)は、KISA(韓国インターネット振興院)のガイドラインに基づいた包括的なセキュリティ脆弱性分析評価機能を提供するClaude Codeプラグインです。主要情報通信基盤施設(CII)の脆弱性分析評価、AIセキュリティ評価、ロボットセキュリティ点検、宇宙セキュリティ点検、セキュアコーディングガイド、ゼロトラストセキュリティ評価に対応しています。 ## 機能 | スキル | 説明 | |--------|------| -| `/kesekit-en:start` | セキュリティ脆弱性の総合評価を実行(CII 560+項目またはAIセキュリティ) | -| `/kesekit-en:check` | デプロイ前のセキュリティコンプライアンスチェックリスト | -| `/kesekit-en:fix` | ハードニングスクリプトおよびセキュリティ修正の自動生成 | -| `/kesekit-en:guide` | AIツール向けセキュアコーディングプロンプトの生成 | +| `/kesekit-start` | セキュリティ脆弱性の総合評価を実行(CII 560+ / AIセキュリティ / ロボットセキュリティ / 宇宙セキュリティ / セキュアコーディング / ゼロトラスト) | +| `/kesekit-check` | デプロイ前のセキュリティコンプライアンスチェックリスト(CII / AI / ロボット / 宇宙 / セキュアコーディング / ゼロトラスト) | +| `/kesekit-fix` | ハードニングスクリプトおよびセキュリティ修正の自動生成(CII / AI / ロボット / 宇宙 / セキュアコーディング / ゼロトラスト) | +| `/kesekit-guide` | AIツール向けセキュアコーディングプロンプトの生成(CII / AI / ロボット / 宇宙 / JS・Python・汎用 / ゼロトラスト) | ## 対応ガイドライン @@ -52,26 +52,111 @@ KESE(KISA Enhanced Security Evaluation Kit)は、KISA(韓国インター | AIサービス提供者 | ~43 | 6段階(計画→開発→運用→保守→フィードバック→廃棄) | | AI利用者 | 7 | セキュリティベストプラクティス | +### 3. ロボットセキュリティ — ~103項目 + +| カテゴリ | コード | 項目数 | 参照規格 | +|---------|------|:------:|----------| +| セキュアSW開発(SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| サプライチェーンセキュリティ | SC-01~07 | 7 | NIST SP 800-161 | +| 識別・認証 | IA-01~11 | 11 | IEC 62443 | +| 使用制御 | UC-01~11 | 11 | IEC 62443 | +| システム整合性 | SI-01~11 | 11 | IEC 62443 | +| データ保護 | DP-01~04 | 4 | IEC 62443 | +| データフロー制限 | DFR-01~02 | 2 | IEC 62443 | +| イベント対応 | ER-01~03 | 3 | IEC 62443 | +| リソース可用性 | RA-01~08 | 8 | IEC 62443 | +| サイバーレジリエンス | CR-01~13 | 13 | EU CRA | +| 無線セキュリティ | WS-01~14 | 14 | EU RED | + +対象:産業用 / サービス用 / 医療用ロボット(ISO 8373) + +### 4. 宇宙セキュリティ — 53項目 + +| 分野 | コード | 項目数 | 参照規格 | +|------|------|:------:|----------| +| アクセス制御 | AC-01~12 | 12 | CMMC, K-RMF | +| 識別・認証 | IA-01~02 | 2 | CMMC, NIS2 | +| システム・通信セキュリティ | SC-01~07 | 7 | NIST IR 8401 | +| システム・情報整合性 | SI-01~04 | 4 | NIST CSF | +| システム/サービス運用管理 | SO-01~09 | 9 | ISMS-P | +| インシデント対応 | IR-01~02 | 2 | NIS2 | +| 人的セキュリティ | PS-01~02 | 2 | CMMC | +| 物理セキュリティ | PE-01~03 | 3 | K-RMF | +| リスク評価・セキュリティ評価 | RA-01~02 | 2 | NIST CSF | +| セキュリティガバナンス | SG-01~04 | 4 | ISMS-P | +| 緊急時対応計画 | CP-01~02 | 2 | NIST IR 8270 | +| サプライチェーン管理 | SM-01~04 | 4 | CMMC, NIS2 | + +対象:衛星運用事業者、GSaaS提供者、地上局運用者、宇宙サプライチェーン参加企業 + +### 5. セキュアコーディングガイド — 46項目 + +| カテゴリ | 項目数 | CWE数 | 参照規格 | +|---------|:------:|:------:|----------| +| 入力データ検証・表現 | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| セキュリティ機能 | 16 | 16 | CWE/SANS Top 25 | +| 時間・状態 | 2 | 3 | CWE | +| エラー処理 | 3 | 3 | CWE | +| コードエラー | 3 | 3 | CWE | +| カプセル化 | 4 | 5 | CWE | +| API誤用 | 2 | 1 | CWE | + +**対応言語:** +| 言語 | 項目数 | フレームワーク | +|------|:------:|-----------| +| Pseudo Code(汎用) | 46 | 言語非依存パターン | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +対象:JavaScript/Python Web開発者、AIツール(Claude, Cursor, Copilot)利用者、バイブコーディング開発者 + +### 6. ゼロトラストセキュリティ — ~421項目 + +| コア要素 | コード | 項目数 | 成熟度 | +|----------|------|:------:|--------| +| アイデンティティ | ZT-ID-01~53 | 53 | 従来型/初期/高度/最適化 | +| デバイス・エンドポイント | ZT-DV-01~36 | 36 | 従来型/初期/高度/最適化 | +| ネットワーク | ZT-NW-01~54 | 54 | 従来型/初期/高度/最適化 | +| システム | ZT-SY-01~49 | 49 | 従来型/初期/高度/最適化 | +| アプリケーション・ワークロード | ZT-AP-01~60 | 60 | 従来型/初期/高度/最適化 | +| データ | ZT-DA-01~58 | 58 | 従来型/初期/高度/最適化 | +| 可視性・分析 | ZT-VA-01~43 | 43 | 従来型/初期/高度/最適化 | +| 自動化・オーケストレーション | ZT-AU-01~43 | 43 | 従来型/初期/高度/最適化 | +| OT/ICS特化 | ZT-OT-01~25 | 25 | 従来型/初期/高度/最適化 | + +**成熟度4段階**:従来型(Traditional) → 初期(Initial) → 高度(Advanced) → 最適化(Optimal) +**参照規格**:KISA ゼロトラストガイドライン 2.0、NIST SP 800-207、CISA ZT Maturity Model + +対象:ゼロトラスト導入企業、OT/ICS環境、クラウド移行組織、セキュリティ成熟度評価担当者 + ## インストール -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` +> **更新する場合:** +> ``` +> /plugin marketplace update cdppcorp-KESE-KIT +> /plugin update kesekit@cdppcorp-KESE-KIT +> /reload-plugins +> ``` + ## 使用方法 ```bash # セキュリティ総合評価を開始 -/kesekit-en:start +/kesekit-start # デプロイ前チェックリストを実行 -/kesekit-en:check +/kesekit-check # ハードニングスクリプトを生成 -/kesekit-en:fix +/kesekit-fix # セキュアコーディングプロンプトを取得 -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +167,39 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← プラグインメタデータ -├── skills/ ← 英語スキル(ルーター) +├── skills/ ← 英語スキル │ ├── start/ │ │ ├── SKILL.md ← ルーター(約80行) -│ │ └── references/ ← ガイドライン別ナレッジ -│ │ ├── cii/ ← CII 14件のリファレンス -│ │ └── ai-security/ ← AIセキュリティ 4件のリファレンス +│ │ ├── references/ ← 説明・基準文書 +│ │ │ ├── ai-security/ ← 概要、サービス提供者、利用者ガイド +│ │ │ ├── space-security/ ← 概要、サプライチェーン脅威シナリオ +│ │ │ └── zero-trust/ ← ゼロトラスト成熟度・OT/ICS +│ │ ├── templates/ ← 別紙・チェックリストテーブル +│ │ │ ├── cii/ ← CII 14件の点検項目テーブル +│ │ │ ├── ai-security/ ← AI開発者検証項目、利用者チェックリスト +│ │ │ ├── robot-security/ ← ロボットセキュリティ 6件のチェックリスト +│ │ │ ├── space-security/ ← 宇宙セキュリティ 4件の点検項目テーブル +│ │ │ └── zero-trust/ ← ゼロトラスト 9コア要素チェックリスト +│ │ └── scripts/ ← 実行可能な点検・修正スクリプト +│ │ ├── cii/ ← bash, PowerShell, SQLスクリプト +│ │ └── robot-security/ ← ファイアウォール、SBOM、証明書スクリプト │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← 韓国語スキル(同一構成) -├── authorkit/ ← 原本ドキュメントおよび成果物 +├── 문서/ ← 原本PDF(14件) +├── authorkit/ ← 変換成果物および作業ファイル │ ├── converted/ │ │ ├── ref-001/ ← 管理・物理的ガイド(full.md) │ │ ├── ref-002/ ← 技術的ガイド(full.md) -│ │ └── ref-003/ ← AIセキュリティガイド(full.md) +│ │ ├── ref-003/ ← AIセキュリティガイド(full.md) +│ │ ├── ... +│ │ ├── ref-013/ ← ゼロトラストガイドライン 2.0(full.md) +│ │ ├── ref-014/ ← ゼロトラスト成熟度モデル解説書(full.md) +│ │ └── ref-015/ ← OT環境のゼロトラスト適用ガイド(full.md) │ └── ... -├── 문서/ ← 原本PDF +├── docs/ ← 20ヶ国語README +├── CONTRIBUTING.md └── README.md ``` @@ -106,6 +207,40 @@ KESE-KIT/ ## 変更履歴 +### v4.0.0 (2026-04-03) + +**新規ガイドライン追加:ゼロトラストセキュリティ** +- 出典:KISA ゼロトラストガイドライン 2.0(245p) + ゼロトラスト成熟度モデル解説書(182p) + OT環境のゼロトラスト適用ガイド(67p) +- 9つのコア要素、~421件のチェックリスト項目 +- 成熟度4段階:Traditional → Initial → Advanced → Optimal +- 参照規格:KISA ゼロトラストガイドライン 2.0、NIST SP 800-207、CISA ZT Maturity Model +- OT/ICS特化項目 25件を含む + +### v3.2.0 (2026-04-02) + +**新規ガイドライン追加:セキュアコーディングガイド** +- 出典:KISA Javascript セキュアコーディングガイド 159p + Python セキュアコーディングガイド 176p(2023年改訂版) +- 7つのカテゴリ、46項目、49 CWEマッピング +- 汎用 Pseudo Code ガイド新規作成(言語非依存 UNSAFE/SAFE パターン) +- JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) フレームワーク別コード例 +- 8つのスキル(EN/KO)すべてに `references/secure-coding/` + `templates/secure-coding/` を配置 + +### v3.0.0 (2026-04-02) + +**Breaking Change:コマンド形式の変更** +- すべてのスキルが単一の `kesekit` ネームスペースに統合 +- コマンド形式:`/start` → `/kesekit-start`(ネームスペースプレフィックス追加) + +**新規ガイドライン追加:宇宙セキュリティ** +- 出典:宇宙セキュリティモデル Part1 134p + Part2 223p + 解説書 218p +- 12分野、53件のチェックリスト項目 +- 参照規格:CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, CCSDS + +**新規ガイドライン追加:ロボットセキュリティ**(v2.1) +- 出典:ロボットセキュリティモデル(高度化)156p + ロボットセキュリティ脆弱性点検チェックリスト解説書 225p +- 11カテゴリ、~103件のチェックリスト項目 +- 参照規格:NIST SP 800-218, IEC 62443, EU CRA, EU RED, NIS2 + ### v2.0.0 (2026-03-30) **構造リファクタリング — Progressive Disclosureパターンの適用** diff --git a/docs/README.nl.md b/docs/README.nl.md index 15392ab..ac79705 100644 --- a/docs/README.nl.md +++ b/docs/README.nl.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Een Claude Code skill-plugin voor kwetsbaarheidsanalyse van kritieke informatie-infrastructuur (CII) en AI-beveiligingsevaluatie. +Een Claude Code skill-plugin voor kwetsbaarheidsanalyse van kritieke informatie-infrastructuur (CII), AI-beveiligingsevaluatie, robotbeveiliging, ruimtevaartbeveiliging, secure coding en Zero Trust-evaluatie. --- ## Overzicht -KESE (KISA Enhanced Security Evaluation Kit) is een Claude Code-plugin die uitgebreide mogelijkheden biedt voor kwetsbaarheidsanalyse op basis van de richtlijnen van KISA (Korea Internet & Security Agency). Het ondersteunt zowel evaluaties van kritieke informatie-infrastructuur (CII) als AI-beveiligingsevaluaties. +KESE (KISA Enhanced Security Evaluation Kit) is een Claude Code-plugin die uitgebreide mogelijkheden biedt voor kwetsbaarheidsanalyse op basis van de richtlijnen van KISA (Korea Internet & Security Agency). Het ondersteunt evaluaties van kritieke informatie-infrastructuur (CII), AI-beveiliging, robotbeveiliging, ruimtevaartbeveiliging, secure coding en Zero Trust-evaluatie. ## Functies | Skill | Beschrijving | |-------|-------------| -| `/kesekit-en:start` | Volledige beveiligingskwetsbaarheidsanalyse uitvoeren (CII 560+ items of AI-beveiliging) | -| `/kesekit-en:check` | Beveiligingschecklist voor compliance voor implementatie | -| `/kesekit-en:fix` | Automatisch hardening-scripts en beveiligingsoplossingen genereren | -| `/kesekit-en:guide` | Secure coding-prompts genereren voor AI-tools | +| `/kesekit-start` | Volledige beveiligingskwetsbaarheidsanalyse uitvoeren (CII 560+ / AI / Robot / Ruimtevaart / Secure Coding / Zero Trust) | +| `/kesekit-check` | Beveiligingschecklist voor compliance voor implementatie (CII / AI / Robot / Ruimtevaart / Secure Coding / Zero Trust) | +| `/kesekit-fix` | Automatisch hardening-scripts en beveiligingsoplossingen genereren (CII / AI / Robot / Ruimtevaart / Secure Coding / Zero Trust) | +| `/kesekit-guide` | Secure coding-prompts genereren voor AI-tools (CII / AI / Robot / Ruimtevaart / JS·Python·Algemeen / Zero Trust) | ## Ondersteunde richtlijnen @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) is een Claude Code-plugin die uitge | AI-serviceprovider | ~43 | 6 fasen (Planning→Ontwikkeling→Beheer→Onderhoud→Feedback→Buitengebruikstelling) | | AI-gebruiker | 7 | Beveiligingsrichtlijnen | +### 3. Robotbeveiliging — ~103 items + +| Categorie | Code | Aantal items | Referentiestandaard | +|-----------|------|:------:|---------------------| +| Veilige SW-ontwikkeling (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Toeleveringsketenbeveiliging | SC-01~07 | 7 | NIST SP 800-161 | +| Identificatie en authenticatie | IA-01~11 | 11 | IEC 62443 | +| Gebruikscontrole | UC-01~11 | 11 | IEC 62443 | +| Systeemintegriteit | SI-01~11 | 11 | IEC 62443 | +| Gegevensbescherming | DP-01~04 | 4 | IEC 62443 | +| Beperking gegevensstromen | DFR-01~02 | 2 | IEC 62443 | +| Incidentrespons | ER-01~03 | 3 | IEC 62443 | +| Beschikbaarheid van middelen | RA-01~08 | 8 | IEC 62443 | +| Cyberweerbaarheid | CR-01~13 | 13 | EU CRA | +| Draadloze beveiliging | WS-01~14 | 14 | EU RED | + +Doelgroep: Industriele robots / Servicerobot / Medische robots (ISO 8373) + +### 4. Ruimtevaartbeveiliging — 53 items + +| Domein | Code | Aantal items | Referentiestandaard | +|--------|------|:------:|---------------------| +| Toegangscontrole | AC-01~12 | 12 | CMMC, K-RMF | +| Identificatie en authenticatie | IA-01~02 | 2 | CMMC, NIS2 | +| Systeem- en communicatiebeveiliging | SC-01~07 | 7 | NIST IR 8401 | +| Systeem- en informatie-integriteit | SI-01~04 | 4 | NIST CSF | +| Systeem-/dienstoperatiebeheer | SO-01~09 | 9 | ISMS-P | +| Incidentrespons | IR-01~02 | 2 | NIS2 | +| Personeelsbeveiliging | PS-01~02 | 2 | CMMC | +| Fysieke beveiliging | PE-01~03 | 3 | K-RMF | +| Risico- en beveiligingsevaluatie | RA-01~02 | 2 | NIST CSF | +| Beveiligingsgovernance | SG-01~04 | 4 | ISMS-P | +| Noodplan | CP-01~02 | 2 | NIST IR 8270 | +| Toeleveringsketenbeheer | SM-01~04 | 4 | CMMC, NIS2 | + +Doelgroep: Satellietoperators, GSaaS-providers, Grondstationoperators, Bedrijven in de ruimtevaarttoeleveringsketen + +### 5. Secure coding-gids — 46 items + +| Categorie | Aantal items | Aantal CWE | Referentiestandaard | +|-----------|:------:|:------:|---------------------| +| Invoervalidatie en -representatie | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Beveiligingsfuncties | 16 | 16 | CWE/SANS Top 25 | +| Tijd en status | 2 | 3 | CWE | +| Foutafhandeling | 3 | 3 | CWE | +| Codefouten | 3 | 3 | CWE | +| Inkapseling | 4 | 5 | CWE | +| API-misbruik | 2 | 1 | CWE | + +**Ondersteunde talen:** +| Taal | Aantal items | Framework | +|------|:------:|-----------| +| Pseudo Code (Algemeen) | 46 | Taalonafhankelijke patronen | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Doelgroep: JavaScript/Python-webontwikkelaars, AI-toolgebruikers (Claude, Cursor, Copilot), Vibe Coding-ontwikkelaars + +### 6. Zero Trust-beveiliging — ~421 items + +| Kernelement | Code | Aantal items | Volwassenheid | +|-------------|------|:------:|-------------| +| Identiteit | ZT-ID-01~53 | 53 | Traditioneel/Initieel/Geavanceerd/Optimaal | +| Apparaat & Eindpunt | ZT-DV-01~36 | 36 | Traditioneel/Initieel/Geavanceerd/Optimaal | +| Netwerk | ZT-NW-01~54 | 54 | Traditioneel/Initieel/Geavanceerd/Optimaal | +| Systeem | ZT-SY-01~49 | 49 | Traditioneel/Initieel/Geavanceerd/Optimaal | +| Applicatie & Workload | ZT-AP-01~60 | 60 | Traditioneel/Initieel/Geavanceerd/Optimaal | +| Data | ZT-DA-01~58 | 58 | Traditioneel/Initieel/Geavanceerd/Optimaal | +| Zichtbaarheid & Analyse | ZT-VA-01~43 | 43 | Traditioneel/Initieel/Geavanceerd/Optimaal | +| Automatisering & Orkestratie | ZT-AU-01~43 | 43 | Traditioneel/Initieel/Geavanceerd/Optimaal | +| OT/ICS-specifiek | ZT-OT-01~25 | 25 | Traditioneel/Initieel/Geavanceerd/Optimaal | + +**4 volwassenheidsniveaus**: Traditioneel (Traditional) → Initieel (Initial) → Geavanceerd (Advanced) → Optimaal (Optimal) +**Referentiestandaarden**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Doelgroep: Organisaties die Zero Trust implementeren, OT/ICS-omgevingen, Organisaties die naar de cloud migreren, Verantwoordelijken voor beveiligingsvolwassenheidsevaluatie + ## Installatie -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## Gebruik ```bash # Volledige beveiligingsevaluatie starten -/kesekit-en:start +/kesekit-start # Checklist voor implementatie uitvoeren -/kesekit-en:check +/kesekit-check # Hardening-scripts genereren -/kesekit-en:fix +/kesekit-fix # Secure coding-prompts ophalen -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,28 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Plugin-metadata -├── skills/ ← Engelstalige skills (router) +├── skills/ ← Engelstalige skills │ ├── start/ │ │ ├── SKILL.md ← Router (~80 regels) -│ │ └── references/ ← Kennis per richtlijn -│ │ ├── cii/ ← CII 14 referenties -│ │ └── ai-security/ ← AI-beveiliging 4 referenties +│ │ ├── references/ ← Beschrijvings-/criteriadocumenten +│ │ │ ├── ai-security/ ← Overzicht, serviceproviders, gebruikersgids +│ │ │ └── space-security/ ← Overzicht, bedreigingsscenario's toeleveringsketen +│ │ ├── templates/ ← Formulieren, checklisttabellen +│ │ │ ├── cii/ ← CII 14 inspectietabellen +│ │ │ ├── ai-security/ ← AI-ontwikkelaar, gebruikerchecklists +│ │ │ ├── robot-security/ ← 6 robotbeveiligingschecklists +│ │ │ ├── space-security/ ← 4 ruimtevaarttabellen +│ │ │ └── zero-trust/ ← Zero Trust-checklisttabellen +│ │ └── scripts/ ← Inspectie-/herstelscripts +│ │ ├── cii/ ← bash, PowerShell, SQL +│ │ └── robot-security/ ← Firewall, SBOM, certificaten │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Koreaanse skills (zelfde structuur) -├── authorkit/ ← Brondocumenten en werkproducten -│ ├── converted/ -│ │ ├── ref-001/ ← Organisatorische/fysieke gids (full.md) -│ │ ├── ref-002/ ← Technische gids (full.md) -│ │ └── ref-003/ ← AI-beveiligingsgids (full.md) -│ └── ... ├── 문서/ ← Originele PDF's +├── authorkit/ ← Brondocumenten en werkproducten +├── docs/ ← README's in 20 talen └── README.md ``` @@ -106,6 +189,30 @@ KESE-KIT/ ## Wijzigingsgeschiedenis +### v4.0.0 (2026-04-03) + +**Nieuwe richtlijn: Zero Trust-beveiliging — ~421 items** +- Bron: KISA Zero Trust Guideline 2.0 (245 pag.) + Volwassenheidsmodel-gids (182 pag.) + OT-implementatiegids (67 pag.) +- 9 kernelementen, ~421 checklistitems, 4 volwassenheidsniveaus +- Standaarden: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Nieuwe richtlijn: Secure Coding** +- Bron: KISA Javascript Secure Coding Guide 159 pag. + Python Secure Coding Guide 176 pag. (herziene editie 2023) +- 7 categorieen, 46 items, 49 CWE +- JavaScript / Python / Pseudo Code (algemeen) + +### v3.0.0 (2026-04-02) + +**Breaking Change: Opdrachtformaat gewijzigd** +- Alle skills samengevoegd in enkele `kesekit`-namespace +- Opdrachtformaat: `/start` → `/kesekit-start` + +**Nieuwe richtlijn: Ruimtevaartbeveiliging** +- Bron: Space Security Model Part1 134 pag. + Part2 223 pag. + Toelichting 218 pag. +- 12 domeinen, 53 checklistitems + ### v2.0.0 (2026-03-30) **Structuurherziening — Progressive Disclosure-patroon toegepast** diff --git a/docs/README.pl.md b/docs/README.pl.md index 6bb2efe..d1df513 100644 --- a/docs/README.pl.md +++ b/docs/README.pl.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Wtyczka Claude Code do analizy i oceny podatnosci Krytycznej Infrastruktury Informacyjnej (CII) oraz oceny bezpieczenstwa AI zgodnie z wytycznymi KISA (Koreanska Agencja Internetu i Bezpieczenstwa). +Wtyczka Claude Code do analizy i oceny podatnosci Krytycznej Infrastruktury Informacyjnej (CII), oceny bezpieczenstwa AI, bezpieczenstwa robotow, bezpieczenstwa kosmicznego, bezpiecznego kodowania oraz oceny Zero Trust zgodnie z wytycznymi KISA (Koreanska Agencja Internetu i Bezpieczenstwa). --- ## Przegląd -KESE (KISA Enhanced Security Evaluation Kit) to wtyczka Claude Code zapewniająca kompleksowe możliwości oceny podatności bezpieczeństwa w oparciu o wytyczne KISA (Koreańska Agencja Internetu i Bezpieczeństwa). Obsługuje zarówno ocenę Krytycznej Infrastruktury Informacyjnej (CII), jak i ocenę Bezpieczeństwa AI. +KESE (KISA Enhanced Security Evaluation Kit) to wtyczka Claude Code zapewniająca kompleksowe możliwości oceny podatności bezpieczeństwa w oparciu o wytyczne KISA (Koreańska Agencja Internetu i Bezpieczeństwa). Obsługuje ocenę Krytycznej Infrastruktury Informacyjnej (CII), Bezpieczeństwa AI, Bezpieczeństwa Robotów, Bezpieczeństwa Kosmicznego, Bezpiecznego Kodowania oraz ocenę Zero Trust. ## Funkcje | Umiejętność | Opis | |-------------|------| -| `/kesekit-en:start` | Uruchomienie pełnej oceny podatności bezpieczeństwa (CII 560+ pozycji lub AI Security) | -| `/kesekit-en:check` | Lista kontrolna zgodności bezpieczeństwa przed wdrożeniem | -| `/kesekit-en:fix` | Automatyczne generowanie skryptów utwardzających i poprawek bezpieczeństwa | -| `/kesekit-en:guide` | Generowanie promptów bezpiecznego kodowania dla narzędzi AI | +| `/kesekit-start` | Uruchomienie pełnej oceny podatności bezpieczeństwa (CII 560+ / AI / Roboty / Kosmos / Bezpieczne kodowanie / Zero Trust) | +| `/kesekit-check` | Lista kontrolna zgodności bezpieczeństwa przed wdrożeniem (CII / AI / Roboty / Kosmos / Bezpieczne kodowanie / Zero Trust) | +| `/kesekit-fix` | Automatyczne generowanie skryptów utwardzających i poprawek bezpieczeństwa (CII / AI / Roboty / Kosmos / Bezpieczne kodowanie / Zero Trust) | +| `/kesekit-guide` | Generowanie promptów bezpiecznego kodowania dla narzędzi AI (CII / AI / Roboty / Kosmos / JS·Python·Ogólny / Zero Trust) | ## Obsługiwane wytyczne @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) to wtyczka Claude Code zapewniając | Dostawcy usług AI | ~43 | 6 etapów (Planowanie→Rozwój→Eksploatacja→Utrzymanie→Informacja zwrotna→Wycofanie) | | Użytkownicy AI | 7 | Najlepsze praktyki bezpieczeństwa | +### 3. Bezpieczeństwo robotów — ~103 pozycji + +| Kategoria | Kod | Liczba pozycji | Standard referencyjny | +|-----------|-----|:-------------:|----------------------| +| Bezpieczne tworzenie oprogramowania (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Bezpieczeństwo łańcucha dostaw | SC-01~07 | 7 | NIST SP 800-161 | +| Identyfikacja i uwierzytelnianie | IA-01~11 | 11 | IEC 62443 | +| Kontrola użytkowania | UC-01~11 | 11 | IEC 62443 | +| Integralność systemu | SI-01~11 | 11 | IEC 62443 | +| Ochrona danych | DP-01~04 | 4 | IEC 62443 | +| Ograniczenie przepływu danych | DFR-01~02 | 2 | IEC 62443 | +| Reagowanie na zdarzenia | ER-01~03 | 3 | IEC 62443 | +| Dostępność zasobów | RA-01~08 | 8 | IEC 62443 | +| Odporność cybernetyczna | CR-01~13 | 13 | EU CRA | +| Bezpieczeństwo bezprzewodowe | WS-01~14 | 14 | EU RED | + +Cel: Roboty przemysłowe / Roboty usługowe / Roboty medyczne (ISO 8373) + +### 4. Bezpieczeństwo kosmiczne — 53 pozycji + +| Dziedzina | Kod | Liczba pozycji | Standard referencyjny | +|-----------|-----|:-------------:|----------------------| +| Kontrola dostępu | AC-01~12 | 12 | CMMC, K-RMF | +| Identyfikacja i uwierzytelnianie | IA-01~02 | 2 | CMMC, NIS2 | +| Bezpieczeństwo systemu i komunikacji | SC-01~07 | 7 | NIST IR 8401 | +| Integralność systemu i informacji | SI-01~04 | 4 | NIST CSF | +| Zarządzanie operacjami systemu/usług | SO-01~09 | 9 | ISMS-P | +| Reagowanie na incydenty | IR-01~02 | 2 | NIS2 | +| Bezpieczeństwo personelu | PS-01~02 | 2 | CMMC | +| Bezpieczeństwo fizyczne | PE-01~03 | 3 | K-RMF | +| Ocena ryzyka i bezpieczeństwa | RA-01~02 | 2 | NIST CSF | +| Zarządzanie bezpieczeństwem | SG-01~04 | 4 | ISMS-P | +| Plan awaryjny | CP-01~02 | 2 | NIST IR 8270 | +| Zarządzanie łańcuchem dostaw | SM-01~04 | 4 | CMMC, NIS2 | + +Cel: Operatorzy satelitów, Dostawcy GSaaS, Operatorzy stacji naziemnych, Firmy w łańcuchu dostaw kosmicznego + +### 5. Przewodnik bezpiecznego kodowania — 46 pozycji + +| Kategoria | Liczba pozycji | Liczba CWE | Standard referencyjny | +|-----------|:-------------:|:--------:|----------------------| +| Walidacja i reprezentacja danych wejściowych | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Funkcje bezpieczeństwa | 16 | 16 | CWE/SANS Top 25 | +| Czas i stan | 2 | 3 | CWE | +| Obsługa błędów | 3 | 3 | CWE | +| Błędy kodu | 3 | 3 | CWE | +| Enkapsulacja | 4 | 5 | CWE | +| Nadużycie API | 2 | 1 | CWE | + +**Obsługiwane języki:** +| Język | Liczba pozycji | Framework | +|-------|:-------------:|-----------| +| Pseudo Code (Ogólny) | 46 | Wzorce niezależne od języka | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Cel: Programiści webowi JavaScript/Python, Użytkownicy narzędzi AI (Claude, Cursor, Copilot), Programiści Vibe Coding + +### 6. Bezpieczeństwo Zero Trust — ~421 pozycji + +| Element podstawowy | Kod | Liczba pozycji | Dojrzałość | +|-------------------|-----|:-------------:|-----------| +| Tożsamość | ZT-ID-01~53 | 53 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | +| Urządzenia i punkty końcowe | ZT-DV-01~36 | 36 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | +| Sieć | ZT-NW-01~54 | 54 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | +| System | ZT-SY-01~49 | 49 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | +| Aplikacja i obciążenie robocze | ZT-AP-01~60 | 60 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | +| Dane | ZT-DA-01~58 | 58 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | +| Widoczność i analityka | ZT-VA-01~43 | 43 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | +| Automatyzacja i orkiestracja | ZT-AU-01~43 | 43 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | +| Specyficzny dla OT/ICS | ZT-OT-01~25 | 25 | Tradycyjny/Początkowy/Zaawansowany/Optymalny | + +**4 poziomy dojrzałości**: Tradycyjny (Traditional) → Początkowy (Initial) → Zaawansowany (Advanced) → Optymalny (Optimal) +**Standardy referencyjne**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Cel: Organizacje wdrażające Zero Trust, Środowiska OT/ICS, Organizacje migrujące do chmury, Osoby odpowiedzialne za ocenę dojrzałości bezpieczeństwa + ## Instalacja -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## Użycie ```bash # Rozpoczęcie pełnej oceny bezpieczeństwa -/kesekit-en:start +/kesekit-start # Uruchomienie listy kontrolnej przed wdrożeniem -/kesekit-en:check +/kesekit-check # Generowanie skryptów utwardzających -/kesekit-en:fix +/kesekit-fix # Uzyskanie promptów bezpiecznego kodowania -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,28 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Metadane wtyczki -├── skills/ ← Umiejętności angielskie (router) +├── skills/ ← Umiejętności angielskie │ ├── start/ │ │ ├── SKILL.md ← Router (~80 linii) -│ │ └── references/ ← Baza wiedzy według wytycznych -│ │ ├── cii/ ← 14 referencji CII -│ │ └── ai-security/ ← 4 referencje bezpieczeństwa AI +│ │ ├── references/ ← Dokumenty opisowe/kryteria +│ │ │ ├── ai-security/ ← Przegląd, dostawcy usług, przewodnik użytkownika +│ │ │ └── space-security/ ← Przegląd, scenariusze zagrożeń łańcucha dostaw +│ │ ├── templates/ ← Formularze, tabele list kontrolnych +│ │ │ ├── cii/ ← 14 tabel kontrolnych CII +│ │ │ ├── ai-security/ ← Listy kontrolne programistów AI, użytkowników +│ │ │ ├── robot-security/ ← 6 list kontrolnych bezpieczeństwa robotów +│ │ │ ├── space-security/ ← 4 tabele kontrolne kosmiczne +│ │ │ └── zero-trust/ ← Tabele list kontrolnych Zero Trust +│ │ └── scripts/ ← Skrypty kontrolne/naprawcze +│ │ ├── cii/ ← bash, PowerShell, SQL +│ │ └── robot-security/ ← Firewall, SBOM, certyfikaty │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Umiejętności koreańskie (ta sama struktura) -├── authorkit/ ← Dokumenty źródłowe i wyniki prac -│ ├── converted/ -│ │ ├── ref-001/ ← Przewodnik administracyjny i fizyczny (full.md) -│ │ ├── ref-002/ ← Przewodnik techniczny (full.md) -│ │ └── ref-003/ ← Przewodnik bezpieczeństwa AI (full.md) -│ └── ... ├── 문서/ ← Oryginalne pliki PDF +├── authorkit/ ← Dokumenty źródłowe i wyniki prac +├── docs/ ← README w 20 językach └── README.md ``` @@ -106,6 +189,30 @@ KESE-KIT/ ## Historia zmian +### v4.0.0 (2026-04-03) + +**Nowe wytyczne: Bezpieczeństwo Zero Trust — ~421 pozycji** +- Źródło: KISA Zero Trust Guideline 2.0 (245 str.) + Przewodnik modelu dojrzałości (182 str.) + Przewodnik wdrożenia OT (67 str.) +- 9 elementów podstawowych, ~421 pozycji list kontrolnych, 4 poziomy dojrzałości +- Standardy: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Nowe wytyczne: Bezpieczne kodowanie** +- Źródło: KISA Javascript Secure Coding Guide 159 str. + Python Secure Coding Guide 176 str. (rewizja 2023) +- 7 kategorii, 46 pozycji, 49 CWE +- JavaScript / Python / Pseudo Code (ogólny) + +### v3.0.0 (2026-04-02) + +**Breaking Change: Zmiana formatu poleceń** +- Wszystkie umiejętności połączone w jedną przestrzeń nazw `kesekit` +- Format poleceń: `/start` → `/kesekit-start` + +**Nowe wytyczne: Bezpieczeństwo kosmiczne** +- Źródło: Space Security Model Part1 134 str. + Part2 223 str. + Przewodnik objaśniający 218 str. +- 12 dziedzin, 53 pozycji list kontrolnych + ### v2.0.0 (2026-03-30) **Refaktoryzacja struktury — zastosowanie wzorca Progressive Disclosure** diff --git a/docs/README.pt.md b/docs/README.pt.md index 8d28428..c8205ea 100644 --- a/docs/README.pt.md +++ b/docs/README.pt.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Plugin do Claude Code para avaliacao de vulnerabilidades em Infraestruturas Criticas de Informacao (CII) e avaliacao de seguranca de IA, com base nas diretrizes da KISA (Agencia Coreana de Internet e Seguranca). +Plugin do Claude Code para avaliacao de vulnerabilidades em Infraestruturas Criticas de Informacao (CII), avaliacao de seguranca de IA, inspecao de seguranca de robos, inspecao de seguranca espacial, guia de codificacao segura e avaliacao de seguranca Zero Trust. --- ## Visao Geral -KESE (KISA Enhanced Security Evaluation Kit) e um plugin do Claude Code que oferece recursos abrangentes de avaliacao de vulnerabilidades de seguranca com base nas diretrizes da KISA (Agencia Coreana de Internet e Seguranca). Suporta tanto avaliacoes de Infraestruturas Criticas de Informacao (CII) quanto avaliacoes de Seguranca de IA. +KESE (KISA Enhanced Security Evaluation Kit) e um plugin do Claude Code que oferece recursos abrangentes de avaliacao de vulnerabilidades de seguranca com base nas diretrizes da KISA (Agencia Coreana de Internet e Seguranca). Suporta avaliacoes CII, seguranca de IA, seguranca de robos, seguranca espacial, codificacao segura e avaliacao de seguranca Zero Trust. ## Funcionalidades | Skill | Descricao | |-------|-----------| -| `/kesekit-en:start` | Executar avaliacao completa de vulnerabilidades de seguranca (CII 560+ itens ou Seguranca de IA) | -| `/kesekit-en:check` | Lista de verificacao de conformidade de seguranca pre-implantacao | -| `/kesekit-en:fix` | Gerar automaticamente scripts de hardening e correcoes de seguranca | -| `/kesekit-en:guide` | Gerar prompts de codificacao segura para ferramentas de IA | +| `/kesekit-start` | Executar avaliacao completa de vulnerabilidades de seguranca (CII 560+ / Seguranca de IA / Seguranca de robos / Seguranca espacial / Codificacao segura / Zero Trust) | +| `/kesekit-check` | Lista de verificacao de conformidade de seguranca pre-implantacao (CII / IA / Robos / Espaco / Codificacao segura / Zero Trust) | +| `/kesekit-fix` | Gerar automaticamente scripts de hardening e correcoes de seguranca (CII / IA / Robos / Espaco / Codificacao segura / Zero Trust) | +| `/kesekit-guide` | Gerar prompts de codificacao segura para ferramentas de IA (CII / IA / Robos / Espaco / JS·Python·Generico / Zero Trust) | ## Diretrizes Suportadas @@ -52,26 +52,111 @@ KESE (KISA Enhanced Security Evaluation Kit) e um plugin do Claude Code que ofer | Provedor de Servicos | ~43 | 6 etapas (Planejamento→Desenvolvimento→Operacao→Manutencao→Feedback→Descarte) | | Usuario | 7 | Boas praticas de seguranca | +### 3. Seguranca de Robos — ~103 itens + +| Categoria | Codigo | Itens | Padroes de referencia | +|-----------|--------|:-----:|------------------------| +| Desenvolvimento SW seguro (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Seguranca da cadeia de suprimentos | SC-01~07 | 7 | NIST SP 800-161 | +| Identificacao e autenticacao | IA-01~11 | 11 | IEC 62443 | +| Controle de uso | UC-01~11 | 11 | IEC 62443 | +| Integridade do sistema | SI-01~11 | 11 | IEC 62443 | +| Protecao de dados | DP-01~04 | 4 | IEC 62443 | +| Restricao de fluxo de dados | DFR-01~02 | 2 | IEC 62443 | +| Resposta a eventos | ER-01~03 | 3 | IEC 62443 | +| Disponibilidade de recursos | RA-01~08 | 8 | IEC 62443 | +| Ciber-resiliencia | CR-01~13 | 13 | EU CRA | +| Seguranca sem fio | WS-01~14 | 14 | EU RED | + +Publico-alvo: robos industriais / de servico / medicos (ISO 8373) + +### 4. Seguranca Espacial — 53 itens + +| Area | Codigo | Itens | Padroes de referencia | +|------|--------|:-----:|------------------------| +| Controle de acesso | AC-01~12 | 12 | CMMC, K-RMF | +| Identificacao e autenticacao | IA-01~02 | 2 | CMMC, NIS2 | +| Seguranca de sistemas e comunicacoes | SC-01~07 | 7 | NIST IR 8401 | +| Integridade de sistemas e informacoes | SI-01~04 | 4 | NIST CSF | +| Gestao de operacoes de sistema/servico | SO-01~09 | 9 | ISMS-P | +| Resposta a incidentes | IR-01~02 | 2 | NIS2 | +| Seguranca de pessoal | PS-01~02 | 2 | CMMC | +| Seguranca fisica | PE-01~03 | 3 | K-RMF | +| Avaliacao de riscos e seguranca | RA-01~02 | 2 | NIST CSF | +| Governanca de seguranca | SG-01~04 | 4 | ISMS-P | +| Plano de contingencia | CP-01~02 | 2 | NIST IR 8270 | +| Gestao da cadeia de suprimentos | SM-01~04 | 4 | CMMC, NIS2 | + +Publico-alvo: operadores de satelites, provedores GSaaS, operadores de estacoes terrestres, empresas da cadeia de suprimentos espacial + +### 5. Guia de Codificacao Segura — 46 itens + +| Categoria | Itens | CWE | Padroes de referencia | +|-----------|:-----:|:---:|------------------------| +| Validacao de dados de entrada e representacao | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Funcoes de seguranca | 16 | 16 | CWE/SANS Top 25 | +| Tempo e estado | 2 | 3 | CWE | +| Tratamento de erros | 3 | 3 | CWE | +| Erros de codigo | 3 | 3 | CWE | +| Encapsulamento | 4 | 5 | CWE | +| Uso incorreto de API | 2 | 1 | CWE | + +**Linguagens suportadas:** +| Linguagem | Itens | Frameworks | +|-----------|:-----:|-----------| +| Pseudo Code (generico) | 46 | Padroes independentes de linguagem | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Publico-alvo: desenvolvedores web JavaScript/Python, usuarios de ferramentas IA (Claude, Cursor, Copilot), desenvolvedores de vibe coding + +### 6. Seguranca Zero Trust — ~421 itens + +| Elemento central | Codigo | Itens | Maturidade | +|------------------|--------|:-----:|------------| +| Identidade | ZT-ID-01~53 | 53 | Tradicional/Inicial/Avancado/Otimo | +| Dispositivo e ponto final | ZT-DV-01~36 | 36 | Tradicional/Inicial/Avancado/Otimo | +| Rede | ZT-NW-01~54 | 54 | Tradicional/Inicial/Avancado/Otimo | +| Sistema | ZT-SY-01~49 | 49 | Tradicional/Inicial/Avancado/Otimo | +| Aplicacao e carga de trabalho | ZT-AP-01~60 | 60 | Tradicional/Inicial/Avancado/Otimo | +| Dados | ZT-DA-01~58 | 58 | Tradicional/Inicial/Avancado/Otimo | +| Visibilidade e analise | ZT-VA-01~43 | 43 | Tradicional/Inicial/Avancado/Otimo | +| Automacao e orquestracao | ZT-AU-01~43 | 43 | Tradicional/Inicial/Avancado/Otimo | +| OT/ICS especifico | ZT-OT-01~25 | 25 | Tradicional/Inicial/Avancado/Otimo | + +**4 niveis de maturidade**: Tradicional (Traditional) → Inicial (Initial) → Avancado (Advanced) → Otimo (Optimal) +**Padroes de referencia**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Publico-alvo: empresas adotando Zero Trust, ambientes OT/ICS, organizacoes em migracao para nuvem, responsaveis por avaliacao de maturidade de seguranca + ## Instalacao -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` +> **Para atualizar:** +> ``` +> /plugin marketplace update cdppcorp-KESE-KIT +> /plugin update kesekit@cdppcorp-KESE-KIT +> /reload-plugins +> ``` + ## Uso ```bash # Iniciar avaliacao completa de seguranca -/kesekit-en:start +/kesekit-start # Executar lista de verificacao pre-implantacao -/kesekit-en:check +/kesekit-check # Gerar scripts de hardening -/kesekit-en:fix +/kesekit-fix # Obter prompts de codificacao segura -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +167,39 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Metadados do plugin -├── skills/ ← Skills em ingles (roteador) +├── skills/ ← Skills em ingles │ ├── start/ │ │ ├── SKILL.md ← Roteador (~80 linhas) -│ │ └── references/ ← Conhecimento por diretriz -│ │ ├── cii/ ← 14 referencias CII -│ │ └── ai-security/ ← 4 referencias de Seguranca de IA +│ │ ├── references/ ← Documentos de descricao/criterios +│ │ │ ├── ai-security/ ← Visao geral, provedor de servicos, guia do usuario +│ │ │ ├── space-security/ ← Visao geral, cenarios de ameacas da cadeia de suprimentos +│ │ │ └── zero-trust/ ← Maturidade Zero Trust, OT/ICS +│ │ ├── templates/ ← Formularios anexos, tabelas de checklist +│ │ │ ├── cii/ ← 14 tabelas de verificacao CII +│ │ │ ├── ai-security/ ← Verificacao de desenvolvedor IA, checklist de usuario +│ │ │ ├── robot-security/ ← 6 checklists de seguranca de robos +│ │ │ ├── space-security/ ← 4 tabelas de verificacao de seguranca espacial +│ │ │ └── zero-trust/ ← 9 checklists de elementos centrais Zero Trust +│ │ └── scripts/ ← Scripts de verificacao/correcao executaveis +│ │ ├── cii/ ← Scripts bash, PowerShell, SQL +│ │ └── robot-security/ ← Scripts de firewall, SBOM, certificados │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Skills em coreano (mesma estrutura) +├── 문서/ ← PDFs originais (14) ├── authorkit/ ← Documentos originais e artefatos de trabalho │ ├── converted/ │ │ ├── ref-001/ ← Guia administrativo/fisico (full.md) │ │ ├── ref-002/ ← Guia tecnico (full.md) -│ │ └── ref-003/ ← Guia de Seguranca de IA (full.md) +│ │ ├── ref-003/ ← Guia de Seguranca de IA (full.md) +│ │ ├── ... +│ │ ├── ref-013/ ← Zero Trust Guideline 2.0 (full.md) +│ │ ├── ref-014/ ← Guia do modelo de maturidade Zero Trust (full.md) +│ │ └── ref-015/ ← Guia de aplicacao Zero Trust para OT (full.md) │ └── ... -├── 문서/ ← PDFs originais +├── docs/ ← README em 20 idiomas +├── CONTRIBUTING.md └── README.md ``` @@ -106,6 +207,40 @@ KESE-KIT/ ## Historico de Alteracoes +### v4.0.0 (2026-04-03) + +**Nova Diretriz: Seguranca Zero Trust** +- Fonte: KISA Zero Trust Guideline 2.0 (245p) + Guia do modelo de maturidade Zero Trust (182p) + Guia de aplicacao Zero Trust para OT (67p) +- 9 elementos centrais, ~421 itens de checklist +- 4 niveis de maturidade: Traditional → Initial → Advanced → Optimal +- Padroes de referencia: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model +- 25 itens especificos de OT/ICS incluidos + +### v3.2.0 (2026-04-02) + +**Nova Diretriz: Guia de Codificacao Segura** +- Fonte: KISA Javascript Secure Coding Guide 159p + Python Secure Coding Guide 176p (edicao revisada 2023) +- 7 categorias, 46 itens, 49 mapeamentos CWE +- Novo guia generico Pseudo Code (padroes UNSAFE/SAFE independentes de linguagem) +- Exemplos de codigo por framework: JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) +- `references/secure-coding/` + `templates/secure-coding/` implantados em todos os 8 skills (EN/KO) + +### v3.0.0 (2026-04-02) + +**Breaking Change: Mudanca de formato de comandos** +- Todos os skills unificados sob o namespace `kesekit` +- Formato de comandos: `/start` → `/kesekit-start` (prefixo de namespace adicionado) + +**Nova Diretriz: Seguranca Espacial** +- Fonte: Modelo de seguranca espacial Part1 134p + Part2 223p + Guia explicativo 218p +- 12 areas, 53 itens de checklist +- Padroes de referencia: CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, CCSDS + +**Nova Diretriz: Seguranca de Robos** (v2.1) +- Fonte: Modelo de seguranca de robos (avancado) 156p + Guia de checklist de seguranca de robos 225p +- 11 categorias, ~103 itens de checklist +- Padroes de referencia: NIST SP 800-218, IEC 62443, EU CRA, EU RED, NIS2 + ### v2.0.0 (2026-03-30) **Refatoracao de Estrutura — Aplicacao do padrao Progressive Disclosure** diff --git a/docs/README.ru.md b/docs/README.ru.md index 37be89f..34bfef2 100644 --- a/docs/README.ru.md +++ b/docs/README.ru.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Плагин Claude Code для анализа и оценки уязвимостей критической информационной инфраструктуры (CII) и оценки безопасности ИИ. +Плагин Claude Code для анализа и оценки уязвимостей критической информационной инфраструктуры (CII), оценки безопасности ИИ, безопасности роботов, безопасности космических систем, руководства по безопасному кодированию и оценки безопасности Zero Trust. --- ## Обзор -KESE (KISA Enhanced Security Evaluation Kit) — это плагин Claude Code, предоставляющий комплексные возможности оценки уязвимостей на основе руководств KISA (Корейское агентство интернета и безопасности). Поддерживает оценку как критической информационной инфраструктуры (CII), так и безопасности ИИ. +KESE (KISA Enhanced Security Evaluation Kit) — это плагин Claude Code, предоставляющий комплексные возможности оценки уязвимостей на основе руководств KISA (Корейское агентство интернета и безопасности). Поддерживает оценку критической информационной инфраструктуры (CII), безопасности ИИ, безопасности роботов, безопасности космических систем, безопасного кодирования и безопасности Zero Trust. ## Функции | Навык | Описание | |-------|----------| -| `/kesekit-en:start` | Запуск полной оценки уязвимостей безопасности (CII 560+ элементов или безопасность ИИ) | -| `/kesekit-en:check` | Контрольный список соответствия безопасности перед развёртыванием | -| `/kesekit-en:fix` | Автоматическая генерация скриптов усиления защиты и исправлений безопасности | -| `/kesekit-en:guide` | Генерация промптов для безопасного кодирования с помощью ИИ-инструментов | +| `/kesekit-start` | Запуск полной оценки уязвимостей безопасности (CII 560+ / Безопасность ИИ / Безопасность роботов / Безопасность космических систем / Безопасное кодирование / Zero Trust) | +| `/kesekit-check` | Контрольный список соответствия безопасности перед развёртыванием (CII / ИИ / Роботы / Космос / Безопасное кодирование / Zero Trust) | +| `/kesekit-fix` | Автоматическая генерация скриптов усиления защиты и исправлений безопасности (CII / ИИ / Роботы / Космос / Безопасное кодирование / Zero Trust) | +| `/kesekit-guide` | Генерация промптов для безопасного кодирования с помощью ИИ-инструментов (CII / ИИ / Роботы / Космос / JS·Python·Общий / Zero Trust) | ## Поддерживаемые руководства @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) — это плагин Claude Code | Поставщик услуг | ~43 | 6 этапов (Планирование→Разработка→Эксплуатация→Обслуживание→Обратная связь→Вывод из эксплуатации) | | Пользователь | 7 | Лучшие практики безопасности | +### 3. Безопасность роботов — ~103 элемента + +| Категория | Код | Элементы | Стандарт | +|-----------|-----|:--------:|----------| +| Безопасная разработка ПО (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Безопасность цепочки поставок | SC-01~07 | 7 | NIST SP 800-161 | +| Идентификация и аутентификация | IA-01~11 | 11 | IEC 62443 | +| Управление использованием | UC-01~11 | 11 | IEC 62443 | +| Целостность системы | SI-01~11 | 11 | IEC 62443 | +| Защита данных | DP-01~04 | 4 | IEC 62443 | +| Ограничение потоков данных | DFR-01~02 | 2 | IEC 62443 | +| Реагирование на события | ER-01~03 | 3 | IEC 62443 | +| Доступность ресурсов | RA-01~08 | 8 | IEC 62443 | +| Киберустойчивость | CR-01~13 | 13 | EU CRA | +| Беспроводная безопасность | WS-01~14 | 14 | EU RED | + +Целевая аудитория: Промышленные / сервисные / медицинские роботы (ISO 8373) + +### 4. Безопасность космических систем — 53 элемента + +| Область | Код | Элементы | Стандарт | +|---------|-----|:--------:|----------| +| Управление доступом | AC-01~12 | 12 | CMMC, K-RMF | +| Идентификация и аутентификация | IA-01~02 | 2 | CMMC, NIS2 | +| Безопасность систем и коммуникаций | SC-01~07 | 7 | NIST IR 8401 | +| Целостность систем и информации | SI-01~04 | 4 | NIST CSF | +| Управление эксплуатацией систем/сервисов | SO-01~09 | 9 | ISMS-P | +| Реагирование на инциденты | IR-01~02 | 2 | NIS2 | +| Безопасность персонала | PS-01~02 | 2 | CMMC | +| Физическая безопасность | PE-01~03 | 3 | K-RMF | +| Оценка рисков и безопасности | RA-01~02 | 2 | NIST CSF | +| Управление безопасностью | SG-01~04 | 4 | ISMS-P | +| Планы действий в чрезвычайных ситуациях | CP-01~02 | 2 | NIST IR 8270 | +| Управление цепочкой поставок | SM-01~04 | 4 | CMMC, NIS2 | + +Целевая аудитория: Операторы спутников, провайдеры GSaaS, операторы наземных станций, компании космической цепочки поставок + +### 5. Руководство по безопасному кодированию — 46 элементов + +| Категория | Элементы | CWE | Стандарт | +|-----------|:--------:|:---:|----------| +| Валидация и представление входных данных | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Функции безопасности | 16 | 16 | CWE/SANS Top 25 | +| Время и состояние | 2 | 3 | CWE | +| Обработка ошибок | 3 | 3 | CWE | +| Ошибки кода | 3 | 3 | CWE | +| Инкапсуляция | 4 | 5 | CWE | +| Некорректное использование API | 2 | 1 | CWE | + +**Поддерживаемые языки:** +| Язык | Элементы | Фреймворк | +|------|:--------:|-----------| +| Псевдокод (универсальный) | 46 | Языконезависимые паттерны | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Целевая аудитория: Веб-разработчики JavaScript/Python, пользователи ИИ-инструментов (Claude, Cursor, Copilot), разработчики vibe coding + +### 6. Безопасность Zero Trust — ~421 элемент + +| Основной элемент | Код | Элементы | Зрелость | +|-----------------|-----|:--------:|----------| +| Идентичность | ZT-ID-01~53 | 53 | Традиционный/Начальный/Продвинутый/Оптимальный | +| Устройства и конечные точки | ZT-DV-01~36 | 36 | Традиционный/Начальный/Продвинутый/Оптимальный | +| Сеть | ZT-NW-01~54 | 54 | Традиционный/Начальный/Продвинутый/Оптимальный | +| Система | ZT-SY-01~49 | 49 | Традиционный/Начальный/Продвинутый/Оптимальный | +| Приложения и рабочие нагрузки | ZT-AP-01~60 | 60 | Традиционный/Начальный/Продвинутый/Оптимальный | +| Данные | ZT-DA-01~58 | 58 | Традиционный/Начальный/Продвинутый/Оптимальный | +| Видимость и аналитика | ZT-VA-01~43 | 43 | Традиционный/Начальный/Продвинутый/Оптимальный | +| Автоматизация и оркестрация | ZT-AU-01~43 | 43 | Традиционный/Начальный/Продвинутый/Оптимальный | +| Специфика OT/ICS | ZT-OT-01~25 | 25 | Традиционный/Начальный/Продвинутый/Оптимальный | + +**4 уровня зрелости**: Традиционный (Traditional) → Начальный (Initial) → Продвинутый (Advanced) → Оптимальный (Optimal) +**Стандарты**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Целевая аудитория: Организации, внедряющие Zero Trust, среды OT/ICS, организации с облачной миграцией, специалисты по оценке зрелости безопасности + ## Установка -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## Использование ```bash # Запуск полной оценки безопасности -/kesekit-en:start +/kesekit-start # Запуск контрольного списка перед развёртыванием -/kesekit-en:check +/kesekit-check # Генерация скриптов усиления защиты -/kesekit-en:fix +/kesekit-fix # Получение промптов для безопасного кодирования -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,29 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Метаданные плагина -├── skills/ ← Навыки на английском (маршрутизатор) +├── skills/ ← Навыки на английском │ ├── start/ │ │ ├── SKILL.md ← Маршрутизатор (~80 строк) -│ │ └── references/ ← Знания по руководствам -│ │ ├── cii/ ← 14 справочных файлов CII -│ │ └── ai-security/ ← 4 справочных файла безопасности ИИ +│ │ ├── references/ ← Описательные/нормативные документы +│ │ │ ├── ai-security/ ← Обзор, провайдеры, руководство пользователя +│ │ │ └── space-security/ ← Обзор, сценарии угроз +│ │ ├── templates/ ← Формы, таблицы чек-листов +│ │ │ ├── cii/ ← 14 таблиц проверки CII +│ │ │ ├── ai-security/ ← Проверка разработчика ИИ, чек-лист пользователя +│ │ │ ├── robot-security/ ← 6 чек-листов безопасности роботов +│ │ │ ├── space-security/ ← 4 таблицы проверки безопасности космических систем +│ │ │ └── zero-trust/ ← Таблицы проверки Zero Trust +│ │ └── scripts/ ← Исполняемые скрипты проверки/исправления +│ │ ├── cii/ ← Скрипты bash, PowerShell, SQL +│ │ └── robot-security/ ← Скрипты firewall, SBOM, сертификатов │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Навыки на корейском (аналогичная структура) -├── authorkit/ ← Исходные документы и рабочие материалы -│ ├── converted/ -│ │ ├── ref-001/ ← Административное/физическое руководство (full.md) -│ │ ├── ref-002/ ← Техническое руководство (full.md) -│ │ └── ref-003/ ← Руководство по безопасности ИИ (full.md) -│ └── ... ├── 문서/ ← Исходные PDF +├── authorkit/ ← Исходные документы и рабочие материалы +├── docs/ ← README на 20 языках +├── CONTRIBUTING.md ← Как добавить руководства └── README.md ``` @@ -106,6 +190,33 @@ KESE-KIT/ ## История изменений +### v4.0.0 (2026-04-03) + +**Новое руководство: Безопасность Zero Trust** +- Источник: KISA Zero Trust Guideline 2.0 (245 стр.) + Модель зрелости Zero Trust (182 стр.) + Руководство по Zero Trust для OT (67 стр.) +- 9 основных элементов, ~421 запись проверки, 4 уровня зрелости +- Специальная поддержка OT/ICS (ZT-OT-01~25) +- Стандарты: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Новое руководство: Руководство по безопасному кодированию** +- Источник: KISA Javascript Secure Coding Guide 159 стр. + Python Secure Coding Guide 176 стр. (ред. 2023) +- 7 категорий, 46 элементов, 49 CWE +- Универсальное руководство Pseudo Code (языконезависимые паттерны UNSAFE/SAFE) +- Примеры кода для фреймворков JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) + +### v3.0.0 (2026-04-02) + +**Критическое изменение: формат команд обновлён** +- Все навыки объединены в единое пространство имён `kesekit` +- Формат команд: `/start` → `/kesekit-start` (добавлен префикс пространства имён) + +**Новое руководство: Безопасность космических систем** +- Источник: Модель безопасности космических систем Part1 134 стр. + Part2 223 стр. + Пояснительное руководство 218 стр. (MSIT/KISA) +- 12 областей, 53 записи чек-листа +- Целевая аудитория: Операторы спутников, провайдеры GSaaS, операторы наземных станций + ### v2.0.0 (2026-03-30) **Рефакторинг структуры — применение паттерна Progressive Disclosure** diff --git a/docs/README.sv.md b/docs/README.sv.md index 23c81dd..e522b75 100644 --- a/docs/README.sv.md +++ b/docs/README.sv.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Ett Claude Code skill-plugin for sarbarhetsanalys av kritisk informationsinfrastruktur (CII) och AI-sakerhetsutvardering. +Ett Claude Code skill-plugin for sarbarhetsanalys av kritisk informationsinfrastruktur (CII), AI-sakerhetsutvardering, robotsakerhet, rymdsakerhet, saker kodning och Zero Trust-utvardering. --- ## Oversikt -KESE (KISA Enhanced Security Evaluation Kit) ar ett Claude Code-plugin som erbjuder omfattande funktioner for sarbarhetsanalys baserad pa KISA:s (Korea Internet & Security Agency) riktlinjer. Det stoder bade utvarderingar av kritisk informationsinfrastruktur (CII) och AI-sakerhetsutvarderingar. +KESE (KISA Enhanced Security Evaluation Kit) ar ett Claude Code-plugin som erbjuder omfattande funktioner for sarbarhetsanalys baserad pa KISA:s (Korea Internet & Security Agency) riktlinjer. Det stoder utvarderingar av kritisk informationsinfrastruktur (CII), AI-sakerhet, robotsakerhet, rymdsakerhet, saker kodning och Zero Trust-utvardering. ## Funktioner | Skill | Beskrivning | |-------|-------------| -| `/kesekit-en:start` | Kor fullstandig sakerhetsarbarhetsanalys (CII 560+ objekt eller AI-sakerhet) | -| `/kesekit-en:check` | Sakerhetschecklista for efterlevnad fore driftsattning | -| `/kesekit-en:fix` | Generera hardening-skript och sakerhetsatgarder automatiskt | -| `/kesekit-en:guide` | Generera secure coding-promptar for AI-verktyg | +| `/kesekit-start` | Kor fullstandig sakerhetsarbarhetsanalys (CII 560+ / AI / Robot / Rymd / Saker kodning / Zero Trust) | +| `/kesekit-check` | Sakerhetschecklista for efterlevnad fore driftsattning (CII / AI / Robot / Rymd / Saker kodning / Zero Trust) | +| `/kesekit-fix` | Generera hardening-skript och sakerhetsatgarder automatiskt (CII / AI / Robot / Rymd / Saker kodning / Zero Trust) | +| `/kesekit-guide` | Generera secure coding-promptar for AI-verktyg (CII / AI / Robot / Rymd / JS·Python·Allman / Zero Trust) | ## Riktlinjer som stods @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) ar ett Claude Code-plugin som erbju | AI-tjanstleverantor | ~43 | 6 faser (Planering→Utveckling→Drift→Underhall→Aterrapportering→Avveckling) | | AI-anvandare | 7 | Sakerhetsriktlinjer | +### 3. Robotsakerhet — ~103 objekt + +| Kategori | Kod | Antal objekt | Referensstandard | +|----------|-----|:------:|-----------------| +| Saker SW-utveckling (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Leveranskedjesakerhet | SC-01~07 | 7 | NIST SP 800-161 | +| Identifiering och autentisering | IA-01~11 | 11 | IEC 62443 | +| Anvandningskontroll | UC-01~11 | 11 | IEC 62443 | +| Systemintegritet | SI-01~11 | 11 | IEC 62443 | +| Dataskydd | DP-01~04 | 4 | IEC 62443 | +| Begransning av dataflode | DFR-01~02 | 2 | IEC 62443 | +| Incidentrespons | ER-01~03 | 3 | IEC 62443 | +| Resurstillganglighet | RA-01~08 | 8 | IEC 62443 | +| Cyberresiliens | CR-01~13 | 13 | EU CRA | +| Tradlos sakerhet | WS-01~14 | 14 | EU RED | + +Malgrupp: Industrirobotar / Tjensterobotar / Medicinska robotar (ISO 8373) + +### 4. Rymdsakerhet — 53 objekt + +| Omrade | Kod | Antal objekt | Referensstandard | +|--------|-----|:------:|-----------------| +| Atkomstkontroll | AC-01~12 | 12 | CMMC, K-RMF | +| Identifiering och autentisering | IA-01~02 | 2 | CMMC, NIS2 | +| System- och kommunikationssakerhet | SC-01~07 | 7 | NIST IR 8401 | +| System- och informationsintegritet | SI-01~04 | 4 | NIST CSF | +| System-/tjanstdriftsforvaltning | SO-01~09 | 9 | ISMS-P | +| Incidentrespons | IR-01~02 | 2 | NIS2 | +| Personalsakerhet | PS-01~02 | 2 | CMMC | +| Fysisk sakerhet | PE-01~03 | 3 | K-RMF | +| Risk- och sakerhetsbedomning | RA-01~02 | 2 | NIST CSF | +| Sakerhetsstyrning | SG-01~04 | 4 | ISMS-P | +| Beredskapsplan | CP-01~02 | 2 | NIST IR 8270 | +| Leveranskedjehantering | SM-01~04 | 4 | CMMC, NIS2 | + +Malgrupp: Satellitoperatorer, GSaaS-leverantorer, Markstationsoperatorer, Foretag i rymdleveranskedjan + +### 5. Guide for saker kodning — 46 objekt + +| Kategori | Antal objekt | Antal CWE | Referensstandard | +|----------|:------:|:------:|-----------------| +| Indatavalidering och -representation | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Sakerhetsfunktioner | 16 | 16 | CWE/SANS Top 25 | +| Tid och tillstand | 2 | 3 | CWE | +| Felhantering | 3 | 3 | CWE | +| Kodfel | 3 | 3 | CWE | +| Inkapsling | 4 | 5 | CWE | +| API-missbruk | 2 | 1 | CWE | + +**Sprak som stods:** +| Sprak | Antal objekt | Ramverk | +|-------|:------:|---------| +| Pseudo Code (Allman) | 46 | Sprakobeorende monster | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Malgrupp: JavaScript/Python-webbutvecklare, AI-verktygsanvandare (Claude, Cursor, Copilot), Vibe Coding-utvecklare + +### 6. Zero Trust-sakerhet — ~421 objekt + +| Karnelement | Kod | Antal objekt | Mognad | +|-------------|-----|:------:|--------| +| Identitet | ZT-ID-01~53 | 53 | Traditionell/Initial/Avancerad/Optimal | +| Enhet & Andpunkt | ZT-DV-01~36 | 36 | Traditionell/Initial/Avancerad/Optimal | +| Natverk | ZT-NW-01~54 | 54 | Traditionell/Initial/Avancerad/Optimal | +| System | ZT-SY-01~49 | 49 | Traditionell/Initial/Avancerad/Optimal | +| Applikation & Arbetsbelastning | ZT-AP-01~60 | 60 | Traditionell/Initial/Avancerad/Optimal | +| Data | ZT-DA-01~58 | 58 | Traditionell/Initial/Avancerad/Optimal | +| Synlighet & Analys | ZT-VA-01~43 | 43 | Traditionell/Initial/Avancerad/Optimal | +| Automatisering & Orkestrering | ZT-AU-01~43 | 43 | Traditionell/Initial/Avancerad/Optimal | +| OT/ICS-specifik | ZT-OT-01~25 | 25 | Traditionell/Initial/Avancerad/Optimal | + +**4 mognadsnivder**: Traditionell (Traditional) → Initial (Initial) → Avancerad (Advanced) → Optimal (Optimal) +**Referensstandarder**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Malgrupp: Organisationer som infor Zero Trust, OT/ICS-miljoer, Organisationer som migrerar till molnet, Ansvariga for sakerhetsmognadsbedomning + ## Installation -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## Anvandning ```bash # Starta fullstandig sakerhetsutvardering -/kesekit-en:start +/kesekit-start # Kor checklista fore driftsattning -/kesekit-en:check +/kesekit-check # Generera hardening-skript -/kesekit-en:fix +/kesekit-fix # Hamta secure coding-promptar -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,28 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Plugin-metadata -├── skills/ ← Engelska skills (router) +├── skills/ ← Engelska skills │ ├── start/ │ │ ├── SKILL.md ← Router (~80 rader) -│ │ └── references/ ← Kunskap per riktlinje -│ │ ├── cii/ ← CII 14 referenser -│ │ └── ai-security/ ← AI-sakerhet 4 referenser +│ │ ├── references/ ← Beskrivnings-/kriteriedokument +│ │ │ ├── ai-security/ ← Oversikt, tjanstleverantorer, anvandarguide +│ │ │ └── space-security/ ← Oversikt, hotscenarier for leveranskedja +│ │ ├── templates/ ← Formulir, checklisttabeller +│ │ │ ├── cii/ ← CII 14 inspektionstabeller +│ │ │ ├── ai-security/ ← AI-utvecklare, anvandarchecklistor +│ │ │ ├── robot-security/ ← 6 robotsakerhetschecklistor +│ │ │ ├── space-security/ ← 4 rymdsakerhetstabeller +│ │ │ └── zero-trust/ ← Zero Trust-checklisttabeller +│ │ └── scripts/ ← Inspektions-/atgardsskript +│ │ ├── cii/ ← bash, PowerShell, SQL +│ │ └── robot-security/ ← Brandvagg, SBOM, certifikat │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Koreanska skills (samma struktur) -├── authorkit/ ← Kalldokument och arbetsprodukter -│ ├── converted/ -│ │ ├── ref-001/ ← Administrativ/fysisk guide (full.md) -│ │ ├── ref-002/ ← Teknisk guide (full.md) -│ │ └── ref-003/ ← AI-sakerhetsguide (full.md) -│ └── ... ├── 문서/ ← Original-PDF:er +├── authorkit/ ← Kalldokument och arbetsprodukter +├── docs/ ← README pa 20 sprak └── README.md ``` @@ -106,6 +189,30 @@ KESE-KIT/ ## Andringshistorik +### v4.0.0 (2026-04-03) + +**Ny riktlinje: Zero Trust-sakerhet — ~421 objekt** +- Kalla: KISA Zero Trust Guideline 2.0 (245 sid.) + Mognadsmodellguide (182 sid.) + OT-implementeringsguide (67 sid.) +- 9 karnelement, ~421 checklistobjekt, 4 mognadsnivder +- Standarder: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Ny riktlinje: Saker kodning** +- Kalla: KISA Javascript Secure Coding Guide 159 sid. + Python Secure Coding Guide 176 sid. (2023 ars revision) +- 7 kategorier, 46 objekt, 49 CWE +- JavaScript / Python / Pseudo Code (allman) + +### v3.0.0 (2026-04-02) + +**Breaking Change: Andrat kommandoformat** +- Alla skills samlade i en enda `kesekit`-namnrymd +- Kommandoformat: `/start` → `/kesekit-start` + +**Ny riktlinje: Rymdsakerhet** +- Kalla: Space Security Model Part1 134 sid. + Part2 223 sid. + Forklaringsguide 218 sid. +- 12 omraden, 53 checklistobjekt + ### v2.0.0 (2026-03-30) **Strukturomarbetning — Progressive Disclosure-monster tillampad** diff --git a/docs/README.th.md b/docs/README.th.md index 4865c68..99e2095 100644 --- a/docs/README.th.md +++ b/docs/README.th.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -ปลั๊กอิน Claude Code สำหรับการวิเคราะห์และประเมินช่องโหว่ของโครงสร้างพื้นฐานสารสนเทศสำคัญ (CII) และการประเมินความปลอดภัยด้าน AI ตามแนวทางของ KISA (สำนักงานอินเทอร์เน็ตและความปลอดภัยแห่งเกาหลี) +ปลั๊กอิน Claude Code สำหรับการวิเคราะห์และประเมินช่องโหว่ของโครงสร้างพื้นฐานสารสนเทศสำคัญ (CII) การประเมินความปลอดภัยด้าน AI ความปลอดภัยหุ่นยนต์ ความปลอดภัยอวกาศ การเขียนโค้ดที่ปลอดภัย และการประเมิน Zero Trust ตามแนวทางของ KISA (สำนักงานอินเทอร์เน็ตและความปลอดภัยแห่งเกาหลี) --- ## ภาพรวม -KESE (KISA Enhanced Security Evaluation Kit) เป็นปลั๊กอิน Claude Code ที่มอบความสามารถในการประเมินช่องโหว่ด้านความปลอดภัยอย่างครอบคลุม ตามแนวทางของ KISA (สำนักงานอินเทอร์เน็ตและความปลอดภัยแห่งเกาหลี) รองรับทั้งการประเมินโครงสร้างพื้นฐานสารสนเทศสำคัญ (CII) และการประเมินความปลอดภัยด้าน AI +KESE (KISA Enhanced Security Evaluation Kit) เป็นปลั๊กอิน Claude Code ที่มอบความสามารถในการประเมินช่องโหว่ด้านความปลอดภัยอย่างครอบคลุม ตามแนวทางของ KISA (สำนักงานอินเทอร์เน็ตและความปลอดภัยแห่งเกาหลี) รองรับการประเมินโครงสร้างพื้นฐานสารสนเทศสำคัญ (CII) ความปลอดภัยด้าน AI ความปลอดภัยหุ่นยนต์ ความปลอดภัยอวกาศ การเขียนโค้ดที่ปลอดภัย และการประเมิน Zero Trust ## คุณสมบัติ | สกิล | คำอธิบาย | |------|----------| -| `/kesekit-en:start` | เริ่มการประเมินช่องโหว่ด้านความปลอดภัยแบบเต็มรูปแบบ (CII 560+ รายการ หรือ AI Security) | -| `/kesekit-en:check` | รายการตรวจสอบความสอดคล้องด้านความปลอดภัยก่อนการปรับใช้งาน | -| `/kesekit-en:fix` | สร้างสคริปต์เสริมความแข็งแกร่งและแก้ไขด้านความปลอดภัยโดยอัตโนมัติ | -| `/kesekit-en:guide` | สร้างพรอมต์การเขียนโค้ดที่ปลอดภัยสำหรับเครื่องมือ AI | +| `/kesekit-start` | เริ่มการประเมินช่องโหว่ด้านความปลอดภัยแบบเต็มรูปแบบ (CII 560+ / AI / หุ่นยนต์ / อวกาศ / โค้ดปลอดภัย / Zero Trust) | +| `/kesekit-check` | รายการตรวจสอบความสอดคล้องด้านความปลอดภัยก่อนการปรับใช้งาน (CII / AI / หุ่นยนต์ / อวกาศ / โค้ดปลอดภัย / Zero Trust) | +| `/kesekit-fix` | สร้างสคริปต์เสริมความแข็งแกร่งและแก้ไขด้านความปลอดภัยโดยอัตโนมัติ (CII / AI / หุ่นยนต์ / อวกาศ / โค้ดปลอดภัย / Zero Trust) | +| `/kesekit-guide` | สร้างพรอมต์การเขียนโค้ดที่ปลอดภัยสำหรับเครื่องมือ AI (CII / AI / หุ่นยนต์ / อวกาศ / JS·Python·ทั่วไป / Zero Trust) | ## แนวทางที่รองรับ @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) เป็นปลั๊กอิ | ผู้ให้บริการ AI | ~43 | 6 ขั้นตอน (วางแผน→พัฒนา→ดำเนินงาน→บำรุงรักษา→ตอบรับ→ยกเลิก) | | ผู้ใช้ AI | 7 | แนวปฏิบัติด้านความปลอดภัย | +### 3. ความปลอดภัยหุ่นยนต์ — ~103 รายการ + +| หมวดหมู่ | รหัส | จำนวนรายการ | มาตรฐานอ้างอิง | +|---------|------|:----------:|--------------| +| การพัฒนา SW ที่ปลอดภัย (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| ความปลอดภัยห่วงโซ่อุปทาน | SC-01~07 | 7 | NIST SP 800-161 | +| การระบุตัวตนและการยืนยัน | IA-01~11 | 11 | IEC 62443 | +| การควบคุมการใช้งาน | UC-01~11 | 11 | IEC 62443 | +| ความสมบูรณ์ของระบบ | SI-01~11 | 11 | IEC 62443 | +| การปกป้องข้อมูล | DP-01~04 | 4 | IEC 62443 | +| การจำกัดการไหลของข้อมูล | DFR-01~02 | 2 | IEC 62443 | +| การตอบสนองต่อเหตุการณ์ | ER-01~03 | 3 | IEC 62443 | +| ความพร้อมใช้งานของทรัพยากร | RA-01~08 | 8 | IEC 62443 | +| ความทนทานทางไซเบอร์ | CR-01~13 | 13 | EU CRA | +| ความปลอดภัยไร้สาย | WS-01~14 | 14 | EU RED | + +เป้าหมาย: หุ่นยนต์อุตสาหกรรม / หุ่นยนต์บริการ / หุ่นยนต์ทางการแพทย์ (ISO 8373) + +### 4. ความปลอดภัยอวกาศ — 53 รายการ + +| สาขา | รหัส | จำนวนรายการ | มาตรฐานอ้างอิง | +|------|------|:----------:|--------------| +| การควบคุมการเข้าถึง | AC-01~12 | 12 | CMMC, K-RMF | +| การระบุตัวตนและการยืนยัน | IA-01~02 | 2 | CMMC, NIS2 | +| ความปลอดภัยของระบบและการสื่อสาร | SC-01~07 | 7 | NIST IR 8401 | +| ความสมบูรณ์ของระบบและสารสนเทศ | SI-01~04 | 4 | NIST CSF | +| การจัดการการดำเนินงานระบบ/บริการ | SO-01~09 | 9 | ISMS-P | +| การตอบสนองต่อเหตุการณ์ | IR-01~02 | 2 | NIS2 | +| ความปลอดภัยบุคลากร | PS-01~02 | 2 | CMMC | +| ความปลอดภัยทางกายภาพ | PE-01~03 | 3 | K-RMF | +| การประเมินความเสี่ยงและความปลอดภัย | RA-01~02 | 2 | NIST CSF | +| การกำกับดูแลด้านความปลอดภัย | SG-01~04 | 4 | ISMS-P | +| แผนฉุกเฉิน | CP-01~02 | 2 | NIST IR 8270 | +| การจัดการห่วงโซ่อุปทาน | SM-01~04 | 4 | CMMC, NIS2 | + +เป้าหมาย: ผู้ดำเนินการดาวเทียม, ผู้ให้บริการ GSaaS, ผู้ดำเนินการสถานีภาคพื้นดิน, องค์กรในห่วงโซ่อุปทานอวกาศ + +### 5. การเขียนโค้ดที่ปลอดภัย — 46 รายการ + +| หมวดหมู่ | จำนวนรายการ | จำนวน CWE | มาตรฐานอ้างอิง | +|---------|:----------:|:--------:|--------------| +| การตรวจสอบและแสดงข้อมูลนำเข้า | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| ฟังก์ชันความปลอดภัย | 16 | 16 | CWE/SANS Top 25 | +| เวลาและสถานะ | 2 | 3 | CWE | +| การจัดการข้อผิดพลาด | 3 | 3 | CWE | +| ข้อผิดพลาดของโค้ด | 3 | 3 | CWE | +| การห่อหุ้ม | 4 | 5 | CWE | +| การใช้ API ผิดวิธี | 2 | 1 | CWE | + +**ภาษาที่รองรับ:** +| ภาษา | จำนวนรายการ | เฟรมเวิร์ก | +|------|:----------:|-----------| +| Pseudo Code (ทั่วไป) | 46 | รูปแบบที่ไม่ขึ้นกับภาษา | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +เป้าหมาย: นักพัฒนาเว็บ JavaScript/Python, ผู้ใช้เครื่องมือ AI (Claude, Cursor, Copilot), นักพัฒนา Vibe Coding + +### 6. ความปลอดภัย Zero Trust — ~421 รายการ + +| องค์ประกอบหลัก | รหัส | จำนวนรายการ | ระดับวุฒิภาวะ | +|---------------|------|:----------:|-------------| +| อัตลักษณ์ | ZT-ID-01~53 | 53 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | +| อุปกรณ์และจุดปลายทาง | ZT-DV-01~36 | 36 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | +| เครือข่าย | ZT-NW-01~54 | 54 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | +| ระบบ | ZT-SY-01~49 | 49 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | +| แอปพลิเคชันและเวิร์กโหลด | ZT-AP-01~60 | 60 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | +| ข้อมูล | ZT-DA-01~58 | 58 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | +| การมองเห็นและการวิเคราะห์ | ZT-VA-01~43 | 43 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | +| ระบบอัตโนมัติและการประสาน | ZT-AU-01~43 | 43 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | +| เฉพาะ OT/ICS | ZT-OT-01~25 | 25 | แบบเดิม/เริ่มต้น/ก้าวหน้า/เหมาะสมที่สุด | + +**ระดับวุฒิภาวะ 4 ระดับ**: แบบเดิม (Traditional) → เริ่มต้น (Initial) → ก้าวหน้า (Advanced) → เหมาะสมที่สุด (Optimal) +**มาตรฐานอ้างอิง**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +เป้าหมาย: องค์กรที่นำ Zero Trust มาใช้, สภาพแวดล้อม OT/ICS, องค์กรที่ย้ายไปคลาวด์, ผู้รับผิดชอบการประเมินวุฒิภาวะด้านความปลอดภัย + ## การติดตั้ง -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## วิธีใช้งาน ```bash # เริ่มการประเมินความปลอดภัยแบบเต็มรูปแบบ -/kesekit-en:start +/kesekit-start # เรียกใช้รายการตรวจสอบก่อนปรับใช้งาน -/kesekit-en:check +/kesekit-check # สร้างสคริปต์เสริมความแข็งแกร่ง -/kesekit-en:fix +/kesekit-fix # รับพรอมต์การเขียนโค้ดที่ปลอดภัย -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,28 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← ข้อมูลเมตาของปลั๊กอิน -├── skills/ ← สกิลภาษาอังกฤษ (เราเตอร์) +├── skills/ ← สกิลภาษาอังกฤษ │ ├── start/ │ │ ├── SKILL.md ← เราเตอร์ (~80 บรรทัด) -│ │ └── references/ ← ฐานความรู้ตามแนวทาง -│ │ ├── cii/ ← ข้อมูลอ้างอิง CII 14 รายการ -│ │ └── ai-security/ ← ข้อมูลอ้างอิงความปลอดภัย AI 4 รายการ +│ │ ├── references/ ← เอกสารอธิบาย/เกณฑ์ +│ │ │ ├── ai-security/ ← ภาพรวม, ผู้ให้บริการ, คู่มือผู้ใช้ +│ │ │ └── space-security/ ← ภาพรวม, สถานการณ์ภัยคุกคามห่วงโซ่อุปทาน +│ │ ├── templates/ ← แบบฟอร์ม, ตารางรายการตรวจสอบ +│ │ │ ├── cii/ ← ตาราง 14 รายการตรวจสอบ CII +│ │ │ ├── ai-security/ ← รายการตรวจสอบนักพัฒนา AI, ผู้ใช้ +│ │ │ ├── robot-security/ ← รายการตรวจสอบหุ่นยนต์ 6 รายการ +│ │ │ ├── space-security/ ← ตาราง 4 รายการตรวจสอบอวกาศ +│ │ │ └── zero-trust/ ← ตารางรายการตรวจสอบ Zero Trust +│ │ └── scripts/ ← สคริปต์ตรวจสอบ/แก้ไข +│ │ ├── cii/ ← bash, PowerShell, SQL +│ │ └── robot-security/ ← ไฟร์วอลล์, SBOM, ใบรับรอง │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← สกิลภาษาเกาหลี (โครงสร้างเดียวกัน) -├── authorkit/ ← เอกสารต้นฉบับและผลงาน -│ ├── converted/ -│ │ ├── ref-001/ ← แนวทางบริหารจัดการและกายภาพ (full.md) -│ │ ├── ref-002/ ← แนวทางทางเทคนิค (full.md) -│ │ └── ref-003/ ← แนวทางความปลอดภัย AI (full.md) -│ └── ... ├── 문서/ ← PDF ต้นฉบับ +├── authorkit/ ← เอกสารต้นฉบับและผลงาน +├── docs/ ← README 20 ภาษา └── README.md ``` @@ -106,6 +189,30 @@ KESE-KIT/ ## ประวัติการเปลี่ยนแปลง +### v4.0.0 (2026-04-03) + +**เพิ่มแนวทางใหม่: ความปลอดภัย Zero Trust — ~421 รายการ** +- แหล่งที่มา: แนวทาง Zero Trust ของ KISA 2.0 (245 หน้า) + คู่มืออธิบายโมเดลวุฒิภาวะ (182 หน้า) + คู่มือการนำไปใช้กับ OT (67 หน้า) +- 9 องค์ประกอบหลัก, ~421 รายการตรวจสอบ, ระดับวุฒิภาวะ 4 ระดับ +- มาตรฐาน: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**เพิ่มแนวทางใหม่: การเขียนโค้ดที่ปลอดภัย** +- แหล่งที่มา: KISA Javascript Secure Coding Guide 159 หน้า + Python Secure Coding Guide 176 หน้า (ฉบับแก้ไข 2023) +- 7 หมวดหมู่, 46 รายการ, 49 CWE +- JavaScript / Python / Pseudo Code (ทั่วไป) + +### v3.0.0 (2026-04-02) + +**Breaking Change: เปลี่ยนรูปแบบคำสั่ง** +- สกิลทั้งหมดรวมอยู่ใน namespace `kesekit` เดียว +- รูปแบบคำสั่ง: `/start` → `/kesekit-start` + +**เพิ่มแนวทางใหม่: ความปลอดภัยอวกาศ** +- แหล่งที่มา: Space Security Model Part1 134 หน้า + Part2 223 หน้า + คู่มืออธิบาย 218 หน้า +- 12 สาขา, 53 รายการตรวจสอบ + ### v2.0.0 (2026-03-30) **ปรับโครงสร้างใหม่ — นำรูปแบบ Progressive Disclosure มาใช้** diff --git a/docs/README.tr.md b/docs/README.tr.md index a4a7f4f..c5db9a6 100644 --- a/docs/README.tr.md +++ b/docs/README.tr.md @@ -4,151 +4,262 @@ # KESE - KISA Enhanced Security Evaluation Kit -Kritik Bilgi Altyapısı (CII) zafiyet analiz-değerlendirmesi ve AI güvenlik değerlendirmesi için Claude Code beceri eklentisidir. +Kritik Bilgi Altyapisi (CII) zafiyet analiz-degerlendirmesi, AI guvenlik degerlendirmesi, robot guvenligi, uzay guvenligi, guvenli kodlama kilavuzu ve Sifir Guven (Zero Trust) guvenlik degerlendirmesi icin Claude Code beceri eklentisidir. --- -## Genel Bakış +## Genel Bakis -KESE (KISA Enhanced Security Evaluation Kit), KISA (Kore İnternet ve Güvenlik Ajansı) kılavuzlarına dayalı kapsamlı güvenlik zafiyet değerlendirme yetenekleri sunan bir Claude Code eklentisidir. Hem Kritik Bilgi Altyapısı (CII) hem de AI Güvenlik değerlendirmelerini destekler. +KESE (KISA Enhanced Security Evaluation Kit), KISA (Kore Internet ve Guvenlik Ajansi) kilavuzlarina dayali kapsamli guvenlik zafiyet degerlendirme yetenekleri sunan bir Claude Code eklentisidir. Kritik Bilgi Altyapisi (CII), AI Guvenlik, Robot Guvenligi, Uzay Guvenligi, Guvenli Kodlama ve Sifir Guven (Zero Trust) degerlendirmelerini destekler. -## Özellikler +## Ozellikler -| Beceri | Açıklama | +| Beceri | Aciklama | |--------|----------| -| `/kesekit-en:start` | Tam güvenlik zafiyet değerlendirmesi çalıştır (CII 560+ madde veya AI Güvenlik) | -| `/kesekit-en:check` | Dağıtım öncesi güvenlik uyumluluk kontrol listesi | -| `/kesekit-en:fix` | Sıkılaştırma betikleri ve güvenlik düzeltmeleri otomatik oluştur | -| `/kesekit-en:guide` | AI araçları için güvenli kodlama komut istemi oluştur | +| `/kesekit-start` | Tam guvenlik zafiyet degerlendirmesi calistir (CII 560+ / AI Guvenlik / Robot Guvenligi / Uzay Guvenligi / Guvenli Kodlama / Sifir Guven) | +| `/kesekit-check` | Dagitim oncesi guvenlik uyumluluk kontrol listesi (CII / AI / Robot / Uzay / Guvenli Kodlama / Sifir Guven) | +| `/kesekit-fix` | Sikilastirma betikleri ve guvenlik duzeltmeleri otomatik olustur (CII / AI / Robot / Uzay / Guvenli Kodlama / Sifir Guven) | +| `/kesekit-guide` | AI araclari icin guvenli kodlama komut istemi olustur (CII / AI / Robot / Uzay / JS·Python·Genel / Sifir Guven) | -## Desteklenen Kılavuzlar +## Desteklenen Kilavuzlar -### 1. CII (Kritik Bilgi Altyapısı) — 560+ madde +### 1. CII (Kritik Bilgi Altyapisi) — 560+ madde -**Teknik Değerlendirme** +**Teknik Degerlendirme** | Sistem | Kod | Madde | |--------|-----|:-----:| | Unix/Linux Sunucu | U-01~U-67 | 67 | | Windows Sunucu | W-01~W-64 | 64 | | Web Hizmeti | WEB-01~WEB-26 | 26 | -| Güvenlik Ekipmanı | S-01~S-23 | 23 | -| Ağ Ekipmanı | N-01~N-38 | 38 | +| Guvenlik Ekipmani | S-01~S-23 | 23 | +| Ag Ekipmani | N-01~N-38 | 38 | | Kontrol Sistemi | C-01~C-51 | 46 | | PC | PC-01~PC-18 | 18 | | DBMS | D-01~D-26 | 26 | | Mobil | M-01~M-04 | 4 | | Web Application | 21 kod | 21 | -| Sanallaştırma | HV-01~HV-25 | 25 | +| Sanallastirma | HV-01~HV-25 | 25 | | Bulut | CA-01~CA-19 | 19 | -**Yönetimsel Değerlendirme**: A-1~A-127 (127 madde, 14 alan) -**Fiziksel Değerlendirme**: P-1~P-18 (18 madde) +**Yonetimsel Degerlendirme**: A-1~A-127 (127 madde, 14 alan) +**Fiziksel Degerlendirme**: P-1~P-18 (18 madde) -### 2. AI Güvenlik Kılavuzu — 54+ madde +### 2. AI Guvenlik Kilavuzu — 54+ madde -| Hedef Kitle | Madde | Yaşam Döngüsü | +| Hedef Kitle | Madde | Yasam Dongusu | |-------------|:-----:|---------------| -| AI Geliştirici | 54 | 6 aşama (Planlama→Veri→Model→Dağıtım→İzleme→Tasfiye) | -| Hizmet Sağlayıcı | ~43 | 6 aşama (Planlama→Geliştirme→İşletme→Bakım→Geri Bildirim→Tasfiye) | -| Kullanıcı | 7 | Güvenlik en iyi uygulamaları | +| AI Gelistirici | 54 | 6 asama (Planlama→Veri→Model→Dagitim→Izleme→Tasfiye) | +| Hizmet Saglayici | ~43 | 6 asama (Planlama→Gelistirme→Isletme→Bakim→Geri Bildirim→Tasfiye) | +| Kullanici | 7 | Guvenlik en iyi uygulamalari | + +### 3. Robot Guvenligi — ~103 madde + +| Kategori | Kod | Madde | Referans Standart | +|----------|-----|:-----:|-------------------| +| Guvenli SW Gelistirme (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Tedarik Zinciri Guvenligi | SC-01~07 | 7 | NIST SP 800-161 | +| Tanimlama ve Kimlik Dogrulama | IA-01~11 | 11 | IEC 62443 | +| Kullanim Kontrolu | UC-01~11 | 11 | IEC 62443 | +| Sistem Butunlugu | SI-01~11 | 11 | IEC 62443 | +| Veri Koruma | DP-01~04 | 4 | IEC 62443 | +| Veri Akisi Kisitlamasi | DFR-01~02 | 2 | IEC 62443 | +| Olay Mudahalesi | ER-01~03 | 3 | IEC 62443 | +| Kaynak Erisilebilirligi | RA-01~08 | 8 | IEC 62443 | +| Siber Dayaniklilik | CR-01~13 | 13 | EU CRA | +| Kablosuz Guvenlik | WS-01~14 | 14 | EU RED | + +Hedef Kitle: Endustriyel / hizmet / tibbi robotlar (ISO 8373) + +### 4. Uzay Guvenligi — 53 madde + +| Alan | Kod | Madde | Referans Standart | +|------|-----|:-----:|-------------------| +| Erisim Kontrolu | AC-01~12 | 12 | CMMC, K-RMF | +| Tanimlama ve Kimlik Dogrulama | IA-01~02 | 2 | CMMC, NIS2 | +| Sistem ve Iletisim Guvenligi | SC-01~07 | 7 | NIST IR 8401 | +| Sistem ve Bilgi Butunlugu | SI-01~04 | 4 | NIST CSF | +| Sistem/Hizmet Isletme Yonetimi | SO-01~09 | 9 | ISMS-P | +| Olay Mudahalesi | IR-01~02 | 2 | NIS2 | +| Personel Guvenligi | PS-01~02 | 2 | CMMC | +| Fiziksel Guvenlik | PE-01~03 | 3 | K-RMF | +| Risk ve Guvenlik Degerlendirmesi | RA-01~02 | 2 | NIST CSF | +| Guvenlik Yonetisimi | SG-01~04 | 4 | ISMS-P | +| Acil Durum Planlari | CP-01~02 | 2 | NIST IR 8270 | +| Tedarik Zinciri Yonetimi | SM-01~04 | 4 | CMMC, NIS2 | + +Hedef Kitle: Uydu operatorleri, GSaaS saglayicilari, yer istasyonu operatorleri, uzay tedarik zinciri sirketleri + +### 5. Guvenli Kodlama Kilavuzu — 46 madde + +| Kategori | Madde | CWE | Referans Standart | +|----------|:-----:|:---:|-------------------| +| Giris Verisi Dogrulama ve Temsil | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Guvenlik Islevleri | 16 | 16 | CWE/SANS Top 25 | +| Zaman ve Durum | 2 | 3 | CWE | +| Hata Yonetimi | 3 | 3 | CWE | +| Kod Hatalari | 3 | 3 | CWE | +| Kapsulleme | 4 | 5 | CWE | +| API Kotuye Kullanimi | 2 | 1 | CWE | + +**Desteklenen Diller:** +| Dil | Madde | Cerceve | +|-----|:-----:|---------| +| Pseudo Code (genel) | 46 | Dilden bagimsiz kaliplar | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Hedef Kitle: JavaScript/Python web gelistiricileri, AI arac (Claude, Cursor, Copilot) kullanicilari, vibe coding gelistiricileri + +### 6. Sifir Guven (Zero Trust) Guvenligi — ~421 madde + +| Temel Oge | Kod | Madde | Olgunluk | +|-----------|-----|:-----:|----------| +| Kimlik | ZT-ID-01~53 | 53 | Geleneksel/Baslangic/Gelismis/Optimal | +| Cihaz ve Uc Nokta | ZT-DV-01~36 | 36 | Geleneksel/Baslangic/Gelismis/Optimal | +| Ag | ZT-NW-01~54 | 54 | Geleneksel/Baslangic/Gelismis/Optimal | +| Sistem | ZT-SY-01~49 | 49 | Geleneksel/Baslangic/Gelismis/Optimal | +| Uygulama ve Is Yuku | ZT-AP-01~60 | 60 | Geleneksel/Baslangic/Gelismis/Optimal | +| Veri | ZT-DA-01~58 | 58 | Geleneksel/Baslangic/Gelismis/Optimal | +| Gorunurluk ve Analitik | ZT-VA-01~43 | 43 | Geleneksel/Baslangic/Gelismis/Optimal | +| Otomasyon ve Orkestrasyon | ZT-AU-01~43 | 43 | Geleneksel/Baslangic/Gelismis/Optimal | +| OT/ICS Ozel | ZT-OT-01~25 | 25 | Geleneksel/Baslangic/Gelismis/Optimal | + +**4 Olgunluk Duzeyi**: Geleneksel (Traditional) → Baslangic (Initial) → Gelismis (Advanced) → Optimal (Optimal) +**Referans Standartlar**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Hedef Kitle: Sifir Guven benimseyen kuruluslar, OT/ICS ortamlari, buluta gecis yapan organizasyonlar, guvenlik olgunluk degerlendirme sorumlulari ## Kurulum -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` -## Kullanım +## Kullanim ```bash -# Tam güvenlik değerlendirmesini başlat -/kesekit-en:start +# Tam guvenlik degerlendirmesini baslat +/kesekit-start -# Dağıtım öncesi kontrol listesini çalıştır -/kesekit-en:check +# Dagitim oncesi kontrol listesini calistir +/kesekit-check -# Sıkılaştırma betikleri oluştur -/kesekit-en:fix +# Sikilastirma betikleri olustur +/kesekit-fix -# Güvenli kodlama komut istemlerini al -/kesekit-en:guide +# Guvenli kodlama komut istemlerini al +/kesekit-guide ``` --- -## Proje Yapısı +## Proje Yapisi ``` KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Eklenti meta verileri -├── skills/ ← İngilizce beceriler (yönlendirici) +├── skills/ ← Ingilizce beceriler │ ├── start/ -│ │ ├── SKILL.md ← Yönlendirici (~80 satır) -│ │ └── references/ ← Kılavuz bazlı bilgi -│ │ ├── cii/ ← CII 14 referans -│ │ └── ai-security/ ← AI güvenlik 4 referans +│ │ ├── SKILL.md ← Yonlendirici (~80 satir) +│ │ ├── references/ ← Tanimlayici/normatif belgeler +│ │ │ ├── ai-security/ ← Genel bakis, saglayicilar, kullanici kilavuzu +│ │ │ └── space-security/ ← Genel bakis, tehdit senaryolari +│ │ ├── templates/ ← Formlar, kontrol listesi tablolari +│ │ │ ├── cii/ ← CII 14 denetim tablosu +│ │ │ ├── ai-security/ ← AI gelistirici dogrulamasi, kullanici kontrol listesi +│ │ │ ├── robot-security/ ← Robot guvenligi 6 kontrol listesi +│ │ │ ├── space-security/ ← Uzay guvenligi 4 denetim tablosu +│ │ │ └── zero-trust/ ← Sifir Guven denetim tablolari +│ │ └── scripts/ ← Calistirilabilir denetim/duzeltme betikleri +│ │ ├── cii/ ← bash, PowerShell, SQL betikleri +│ │ └── robot-security/ ← Guvenlik duvari, SBOM, sertifika betikleri │ ├── check/ │ ├── fix/ │ └── guide/ -├── skills-ko/ ← Korece beceriler (aynı yapı) -├── authorkit/ ← Orijinal belgeler ve çıktılar -│ ├── converted/ -│ │ ├── ref-001/ ← Yönetimsel/fiziksel kılavuz (full.md) -│ │ ├── ref-002/ ← Teknik kılavuz (full.md) -│ │ └── ref-003/ ← AI güvenlik kılavuzu (full.md) -│ └── ... +├── skills-ko/ ← Korece beceriler (ayni yapi) ├── 문서/ ← Orijinal PDF'ler +├── authorkit/ ← Orijinal belgeler ve ciktilar +├── docs/ ← 20 dilde README +├── CONTRIBUTING.md ← Kilavuz ekleme yontemi └── README.md ``` --- -## Değişiklik Geçmişi +## Degisiklik Gecmisi + +### v4.0.0 (2026-04-03) + +**Yeni Kilavuz Eklendi: Sifir Guven (Zero Trust) Guvenligi** +- Kaynak: KISA Zero Trust Guideline 2.0 (245 sayfa) + Zero Trust Olgunluk Modeli (182 sayfa) + OT icin Zero Trust Kilavuzu (67 sayfa) +- 9 temel oge, ~421 denetim maddesi, 4 olgunluk duzeyi +- OT/ICS ozel destek (ZT-OT-01~25) +- Standartlar: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Yeni Kilavuz Eklendi: Guvenli Kodlama Kilavuzu** +- Kaynak: KISA Javascript Secure Coding Guide 159 sayfa + Python Secure Coding Guide 176 sayfa (2023 revizyonu) +- 7 kategori, 46 madde, 49 CWE eslesmesi +- Genel Pseudo Code kilavuzu yeni olusturuldu (dilden bagimsiz UNSAFE/SAFE kaliplari) +- JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) cerceve kod ornekleri + +### v3.0.0 (2026-04-02) + +**Uyumsuz Degisiklik: komut formati guncellendi** +- Tum beceriler tek `kesekit` ad alaninda birlesti +- Komut formati: `/start` → `/kesekit-start` (ad alani oneki eklendi) + +**Yeni Kilavuz Eklendi: Uzay Guvenligi** +- Kaynak: Uzay Guvenlik Modeli Part1 134 sayfa + Part2 223 sayfa + Aciklama Kilavuzu 218 sayfa (MSIT/KISA) +- 12 alan, 53 kontrol listesi maddesi +- Hedef Kitle: Uydu operatorleri, GSaaS saglayicilari, yer istasyonu operatorleri ### v2.0.0 (2026-03-30) -**Yapısal Yeniden Düzenleme — Progressive Disclosure Deseni Uygulandı** +**Yapisal Yeniden Duzenleme — Progressive Disclosure Deseni Uygulandi** -| Değişiklik | Önceki (v1.0) | Sonraki (v2.0) | +| Degisiklik | Onceki (v1.0) | Sonraki (v2.0) | |-----------|--------------|----------------| -| SKILL.md | Tüm bilgi satır içi (270~465 satır) | Yalnızca yönlendirici (~50~80 satır) | -| Kılavuzlar | Yalnızca CII desteği | CII + AI Güvenlik desteği | -| Bilgi depolama | SKILL.md içinde sabit kodlanmış | `references/` olarak ayrılmış (18 dosya) | -| Madde kodları | Yalnızca bazı maddeler dahil | 2026 kılavuzuna dayalı tüm maddeler | -| Genişletilebilirlik | Yeni kılavuz eklerken beceri sayısı artar | Beceriler 4'te sabit, yalnızca references eklenir | - -**Yeni Kılavuz Eklendi: AI Güvenlik Kılavuzu** -- Kaynak: Bilim ve ICT Bakanlığı · KISA 「Yapay Zeka (AI) Güvenlik Kılavuzu」 -- AI Geliştirici 54 doğrulama maddesi (6 aşamalı yaşam döngüsü) -- AI Hizmet Sağlayıcı güvenlik gereksinimleri -- AI Kullanıcı güvenlik kuralları 7 madde - -**CII Kılavuzu Güncellemesi** -- 2026 ayrıntılı kılavuzuna dayalı olarak tüm maddeler yeniden çıkarıldı -- Madde kod sistemi yansıtıldı (WEB, HV, CA vb. yeni kodlar) +| SKILL.md | Tum bilgi satir ici (270~465 satir) | Yalnizca yonlendirici (~50~80 satir) | +| Kilavuzlar | Yalnizca CII destegi | CII + AI Guvenlik destegi | +| Bilgi depolama | SKILL.md icinde sabit kodlanmis | `references/` olarak ayrilmis (18 dosya) | +| Madde kodlari | Yalnizca bazi maddeler dahil | 2026 kilavuzuna dayali tum maddeler | +| Genisletilebilirlik | Yeni kilavuz eklerken beceri sayisi artar | Beceriler 4'te sabit, yalnizca references eklenir | + +**Yeni Kilavuz Eklendi: AI Guvenlik Kilavuzu** +- Kaynak: Bilim ve ICT Bakanligi · KISA 「Yapay Zeka (AI) Guvenlik Kilavuzu」 +- AI Gelistirici 54 dogrulama maddesi (6 asamali yasam dongusu) +- AI Hizmet Saglayici guvenlik gereksinimleri +- AI Kullanici guvenlik kurallari 7 madde + +**CII Kilavuzu Guncellemesi** +- 2026 ayrintili kilavuzuna dayali olarak tum maddeler yeniden cikarildi +- Madde kod sistemi yansitildi (WEB, HV, CA vb. yeni kodlar) ### v1.0.0 (2026-03-29) -- İlk sürüm -- CII zafiyet analiz-değerlendirmesi 4 beceri (Korece/İngilizce) -- Teknik (424) + Yönetimsel (127) + Fiziksel (9) madde +- Ilk surum +- CII zafiyet analiz-degerlendirmesi 4 beceri (Korece/Ingilizce) +- Teknik (424) + Yonetimsel (127) + Fiziksel (9) madde --- ## Yasal Dayanak -- **Bilgi ve İletişim Altyapısı Koruma Kanunu** (Act on Protection of Information and Communications Infrastructure) +- **Bilgi ve Iletisim Altyapisi Koruma Kanunu** (Act on Protection of Information and Communications Infrastructure) - **e-Devlet Kanunu** (e-Government Act) -- **Kişisel Bilgi Koruma Kanunu** (Personal Information Protection Act) -- **Yapay Zeka Temel Kanunu** (AI Basic Act, 2026.1.22 tarihinde yürürlüğe girmiştir) +- **Kisisel Bilgi Koruma Kanunu** (Personal Information Protection Act) +- **Yapay Zeka Temel Kanunu** (AI Basic Act, 2026.1.22 tarihinde yururluge girmistir) --- -## İlgili Kaynaklar +## Ilgili Kaynaklar -- [KISA Teknik Zafiyet Analiz-Değerlendirme Ayrıntılı Kılavuzu](https://www.kisa.or.kr) -- [Yapay Zeka (AI) Güvenlik Kılavuzu](https://www.kisa.or.kr) +- [KISA Teknik Zafiyet Analiz-Degerlendirme Ayrintili Kilavuzu](https://www.kisa.or.kr) +- [Yapay Zeka (AI) Guvenlik Kilavuzu](https://www.kisa.or.kr) - [OWASP Top 10](https://owasp.org/Top10/) - [OWASP Top 10 for LLM](https://owasp.org/www-project-top-10-for-large-language-model-applications/) - [CWE/SANS Top 25](https://cwe.mitre.org/top25/) @@ -157,10 +268,10 @@ KESE-KIT/ ## Built With -| Eklenti | Açıklama | +| Eklenti | Aciklama | |---------|----------| -| [authorkit-ko](https://github.com/cdppcorp/authorkit) | Kitap yazarlığı destek becerisi - PDF analizi, yapı çıkarma, düzeltme/yeniden yazma | -| [win-hooks](https://github.com/anthropics/claude-code-plugins) | Windows ortamı Claude Code eklenti kanca uyumluluğu | +| [authorkit-ko](https://github.com/cdppcorp/authorkit) | Kitap yazarligi destek becerisi - PDF analizi, yapi cikarma, duzeltme/yeniden yazma | +| [win-hooks](https://github.com/anthropics/claude-code-plugins) | Windows ortami Claude Code eklenti kanca uyumlulugu | --- diff --git a/docs/README.uk.md b/docs/README.uk.md index 374884d..d8572ab 100644 --- a/docs/README.uk.md +++ b/docs/README.uk.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -Плагін навичок Claude Code для аналізу вразливостей критичної інформаційної інфраструктури (CII) та оцінки безпеки ШІ. +Плагін навичок Claude Code для аналізу вразливостей критичної інформаційної інфраструктури (CII), оцінки безпеки ШІ, безпеки роботів, космічної безпеки, безпечного кодування та оцінки Zero Trust. --- ## Огляд -KESE (KISA Enhanced Security Evaluation Kit) — це плагін Claude Code, який надає комплексні можливості аналізу вразливостей на основі настанов KISA (Корейське агентство з інтернету та безпеки). Підтримує як оцінку критичної інформаційної інфраструктури (CII), так і оцінку безпеки ШІ. +KESE (KISA Enhanced Security Evaluation Kit) — це плагін Claude Code, який надає комплексні можливості аналізу вразливостей на основі настанов KISA (Корейське агентство з інтернету та безпеки). Підтримує оцінку критичної інформаційної інфраструктури (CII), безпеки ШІ, безпеки роботів, космічної безпеки, безпечного кодування та оцінку Zero Trust. ## Функції | Навичка | Опис | |---------|------| -| `/kesekit-en:start` | Запуск повного аналізу вразливостей безпеки (CII 560+ пунктів або безпека ШІ) | -| `/kesekit-en:check` | Контрольний список відповідності безпеці перед розгортанням | -| `/kesekit-en:fix` | Автоматична генерація скриптів зміцнення та виправлень безпеки | -| `/kesekit-en:guide` | Генерація промптів безпечного кодування для інструментів ШІ | +| `/kesekit-start` | Запуск повного аналізу вразливостей безпеки (CII 560+ / ШІ / Роботи / Космос / Безпечне кодування / Zero Trust) | +| `/kesekit-check` | Контрольний список відповідності безпеці перед розгортанням (CII / ШІ / Роботи / Космос / Безпечне кодування / Zero Trust) | +| `/kesekit-fix` | Автоматична генерація скриптів зміцнення та виправлень безпеки (CII / ШІ / Роботи / Космос / Безпечне кодування / Zero Trust) | +| `/kesekit-guide` | Генерація промптів безпечного кодування для інструментів ШІ (CII / ШІ / Роботи / Космос / JS·Python·Загальний / Zero Trust) | ## Підтримувані настанови @@ -52,26 +52,104 @@ KESE (KISA Enhanced Security Evaluation Kit) — це плагін Claude Code, | Постачальник послуг ШІ | ~43 | 6 етапів (Планування→Розробка→Експлуатація→Обслуговування→Зворотний зв'язок→Виведення з експлуатації) | | Користувач ШІ | 7 | Правила безпеки | +### 3. Безпека роботів — ~103 пунктів + +| Категорія | Код | Кількість пунктів | Стандарт | +|-----------|-----|:------:|---------| +| Безпечна розробка ПЗ (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Безпека ланцюга постачання | SC-01~07 | 7 | NIST SP 800-161 | +| Ідентифікація та автентифікація | IA-01~11 | 11 | IEC 62443 | +| Контроль використання | UC-01~11 | 11 | IEC 62443 | +| Цілісність системи | SI-01~11 | 11 | IEC 62443 | +| Захист даних | DP-01~04 | 4 | IEC 62443 | +| Обмеження потоку даних | DFR-01~02 | 2 | IEC 62443 | +| Реагування на події | ER-01~03 | 3 | IEC 62443 | +| Доступність ресурсів | RA-01~08 | 8 | IEC 62443 | +| Кіберстійкість | CR-01~13 | 13 | EU CRA | +| Бездротова безпека | WS-01~14 | 14 | EU RED | + +Цільова група: Промислові роботи / Сервісні роботи / Медичні роботи (ISO 8373) + +### 4. Космічна безпека — 53 пунктів + +| Сфера | Код | Кількість пунктів | Стандарт | +|-------|-----|:------:|---------| +| Контроль доступу | AC-01~12 | 12 | CMMC, K-RMF | +| Ідентифікація та автентифікація | IA-01~02 | 2 | CMMC, NIS2 | +| Безпека системи та комунікацій | SC-01~07 | 7 | NIST IR 8401 | +| Цілісність системи та інформації | SI-01~04 | 4 | NIST CSF | +| Управління експлуатацією системи/сервісу | SO-01~09 | 9 | ISMS-P | +| Реагування на інциденти | IR-01~02 | 2 | NIS2 | +| Безпека персоналу | PS-01~02 | 2 | CMMC | +| Фізична безпека | PE-01~03 | 3 | K-RMF | +| Оцінка ризиків та безпеки | RA-01~02 | 2 | NIST CSF | +| Управління безпекою | SG-01~04 | 4 | ISMS-P | +| План надзвичайних ситуацій | CP-01~02 | 2 | NIST IR 8270 | +| Управління ланцюгом постачання | SM-01~04 | 4 | CMMC, NIS2 | + +Цільова група: Оператори супутників, Постачальники GSaaS, Оператори наземних станцій, Компанії в космічному ланцюзі постачання + +### 5. Посібник з безпечного кодування — 46 пунктів + +| Категорія | Кількість пунктів | Кількість CWE | Стандарт | +|-----------|:------:|:------:|---------| +| Перевірка та представлення вхідних даних | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Функції безпеки | 16 | 16 | CWE/SANS Top 25 | +| Час та стан | 2 | 3 | CWE | +| Обробка помилок | 3 | 3 | CWE | +| Помилки коду | 3 | 3 | CWE | +| Інкапсуляція | 4 | 5 | CWE | +| Зловживання API | 2 | 1 | CWE | + +**Підтримувані мови:** +| Мова | Кількість пунктів | Фреймворк | +|------|:------:|-----------| +| Pseudo Code (Загальний) | 46 | Мовонезалежні шаблони | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Цільова група: Веброзробники JavaScript/Python, Користувачі ШІ-інструментів (Claude, Cursor, Copilot), Розробники Vibe Coding + +### 6. Безпека Zero Trust — ~421 пунктів + +| Ключовий елемент | Код | Кількість пунктів | Зрілість | +|-----------------|-----|:------:|---------| +| Ідентичність | ZT-ID-01~53 | 53 | Традиційний/Початковий/Просунутий/Оптимальний | +| Пристрій та кінцева точка | ZT-DV-01~36 | 36 | Традиційний/Початковий/Просунутий/Оптимальний | +| Мережа | ZT-NW-01~54 | 54 | Традиційний/Початковий/Просунутий/Оптимальний | +| Система | ZT-SY-01~49 | 49 | Традиційний/Початковий/Просунутий/Оптимальний | +| Застосунок та робоче навантаження | ZT-AP-01~60 | 60 | Традиційний/Початковий/Просунутий/Оптимальний | +| Дані | ZT-DA-01~58 | 58 | Традиційний/Початковий/Просунутий/Оптимальний | +| Видимість та аналітика | ZT-VA-01~43 | 43 | Традиційний/Початковий/Просунутий/Оптимальний | +| Автоматизація та оркестрація | ZT-AU-01~43 | 43 | Традиційний/Початковий/Просунутий/Оптимальний | +| Специфічні для OT/ICS | ZT-OT-01~25 | 25 | Традиційний/Початковий/Просунутий/Оптимальний | + +**4 рівні зрілості**: Традиційний (Traditional) → Початковий (Initial) → Просунутий (Advanced) → Оптимальний (Optimal) +**Стандарти**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Цільова група: Організації, що впроваджують Zero Trust, Середовища OT/ICS, Організації, що мігрують у хмару, Відповідальні за оцінку зрілості безпеки + ## Встановлення -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` ## Використання ```bash # Запустити повну оцінку безпеки -/kesekit-en:start +/kesekit-start # Виконати контрольний список перед розгортанням -/kesekit-en:check +/kesekit-check # Згенерувати скрипти зміцнення -/kesekit-en:fix +/kesekit-fix # Отримати промпти безпечного кодування -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +160,28 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← Метадані плагіна -├── skills/ ← Англомовні навички (маршрутизатор) +├── skills/ ← Англомовні навички │ ├── start/ │ │ ├── SKILL.md ← Маршрутизатор (~80 рядків) -│ │ └── references/ ← Знання за настановами -│ │ ├── cii/ ← CII 14 довідників -│ │ └── ai-security/ ← Безпека ШІ 4 довідники +│ │ ├── references/ ← Описові документи/критерії +│ │ │ ├── ai-security/ ← Огляд, постачальники послуг, посібник користувача +│ │ │ └── space-security/ ← Огляд, сценарії загроз ланцюга постачання +│ │ ├── templates/ ← Форми, таблиці контрольних списків +│ │ │ ├── cii/ ← 14 таблиць перевірки CII +│ │ │ ├── ai-security/ ← Контрольні списки розробників ШІ, користувачів +│ │ │ ├── robot-security/ ← 6 контрольних списків безпеки роботів +│ │ │ ├── space-security/ ← 4 таблиці космічної перевірки +│ │ │ └── zero-trust/ ← Таблиці контрольних списків Zero Trust +│ │ └── scripts/ ← Скрипти перевірки/виправлення +│ │ ├── cii/ ← bash, PowerShell, SQL +│ │ └── robot-security/ ← Брандмауер, SBOM, сертифікати │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← Корейські навички (та сама структура) -├── authorkit/ ← Вихідні документи та робочі матеріали -│ ├── converted/ -│ │ ├── ref-001/ ← Управлінський/фізичний посібник (full.md) -│ │ ├── ref-002/ ← Технічний посібник (full.md) -│ │ └── ref-003/ ← Посібник з безпеки ШІ (full.md) -│ └── ... ├── 문서/ ← Оригінальні PDF +├── authorkit/ ← Вихідні документи та робочі матеріали +├── docs/ ← README 20 мовами └── README.md ``` @@ -106,6 +189,30 @@ KESE-KIT/ ## Історія змін +### v4.0.0 (2026-04-03) + +**Нова настанова: Безпека Zero Trust — ~421 пунктів** +- Джерело: KISA Zero Trust Guideline 2.0 (245 стор.) + Посібник моделі зрілості (182 стор.) + Посібник впровадження OT (67 стор.) +- 9 ключових елементів, ~421 пунктів контрольних списків, 4 рівні зрілості +- Стандарти: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Нова настанова: Безпечне кодування** +- Джерело: KISA Javascript Secure Coding Guide 159 стор. + Python Secure Coding Guide 176 стор. (редакція 2023) +- 7 категорій, 46 пунктів, 49 CWE +- JavaScript / Python / Pseudo Code (загальний) + +### v3.0.0 (2026-04-02) + +**Breaking Change: Зміна формату команд** +- Усі навички об'єднані в єдиний простір імен `kesekit` +- Формат команд: `/start` → `/kesekit-start` + +**Нова настанова: Космічна безпека** +- Джерело: Space Security Model Part1 134 стор. + Part2 223 стор. + Посібник пояснень 218 стор. +- 12 сфер, 53 пункти контрольних списків + ### v2.0.0 (2026-03-30) **Рефакторинг структури — застосовано шаблон Progressive Disclosure** diff --git a/docs/README.vi.md b/docs/README.vi.md index 88688ac..8f048ec 100644 --- a/docs/README.vi.md +++ b/docs/README.vi.md @@ -4,151 +4,262 @@ # KESE - KISA Enhanced Security Evaluation Kit -Plugin kỹ năng Claude Code dành cho phân tích-đánh giá lỗ hổng Hạ tầng Thông tin Trọng yếu (CII) và đánh giá bảo mật AI. +Plugin ky nang Claude Code danh cho phan tich-danh gia lo hong Ha tang Thong tin Trong yeu (CII), danh gia bao mat AI, bao mat robot, bao mat khong gian, huong dan lap trinh an toan va danh gia bao mat Zero Trust. --- -## Tổng quan +## Tong quan -KESE (KISA Enhanced Security Evaluation Kit) là một plugin Claude Code cung cấp khả năng đánh giá lỗ hổng bảo mật toàn diện dựa trên hướng dẫn của KISA (Cơ quan An ninh và Internet Hàn Quốc). Hỗ trợ cả đánh giá Hạ tầng Thông tin Trọng yếu (CII) và đánh giá Bảo mật AI. +KESE (KISA Enhanced Security Evaluation Kit) la mot plugin Claude Code cung cap kha nang danh gia lo hong bao mat toan dien dua tren huong dan cua KISA (Co quan An ninh va Internet Han Quoc). Ho tro danh gia Ha tang Thong tin Trong yeu (CII), Bao mat AI, Bao mat Robot, Bao mat Khong gian, Lap trinh An toan va Bao mat Zero Trust. -## Tính năng +## Tinh nang -| Kỹ năng | Mô tả | +| Ky nang | Mo ta | |---------|-------| -| `/kesekit-en:start` | Chạy đánh giá lỗ hổng bảo mật toàn diện (CII 560+ hạng mục hoặc Bảo mật AI) | -| `/kesekit-en:check` | Danh sách kiểm tra tuân thủ bảo mật trước triển khai | -| `/kesekit-en:fix` | Tự động tạo script tăng cường bảo mật và bản vá lỗ hổng | -| `/kesekit-en:guide` | Tạo prompt lập trình an toàn cho các công cụ AI | +| `/kesekit-start` | Chay danh gia lo hong bao mat toan dien (CII 560+ / Bao mat AI / Bao mat Robot / Bao mat Khong gian / Lap trinh An toan / Zero Trust) | +| `/kesekit-check` | Danh sach kiem tra tuan thu bao mat truoc trien khai (CII / AI / Robot / Khong gian / Lap trinh An toan / Zero Trust) | +| `/kesekit-fix` | Tu dong tao script tang cuong bao mat va ban va lo hong (CII / AI / Robot / Khong gian / Lap trinh An toan / Zero Trust) | +| `/kesekit-guide` | Tao prompt lap trinh an toan cho cac cong cu AI (CII / AI / Robot / Khong gian / JS·Python·Chung / Zero Trust) | -## Hướng dẫn được hỗ trợ +## Huong dan duoc ho tro -### 1. CII (Hạ tầng Thông tin Trọng yếu) — 560+ hạng mục +### 1. CII (Ha tang Thong tin Trong yeu) — 560+ hang muc -**Đánh giá Kỹ thuật** -| Hệ thống | Mã | Hạng mục | +**Danh gia Ky thuat** +| He thong | Ma | Hang muc | |----------|-----|:--------:| -| Máy chủ Unix/Linux | U-01~U-67 | 67 | -| Máy chủ Windows | W-01~W-64 | 64 | -| Dịch vụ Web | WEB-01~WEB-26 | 26 | -| Thiết bị Bảo mật | S-01~S-23 | 23 | -| Thiết bị Mạng | N-01~N-38 | 38 | -| Hệ thống Điều khiển | C-01~C-51 | 46 | +| May chu Unix/Linux | U-01~U-67 | 67 | +| May chu Windows | W-01~W-64 | 64 | +| Dich vu Web | WEB-01~WEB-26 | 26 | +| Thiet bi Bao mat | S-01~S-23 | 23 | +| Thiet bi Mang | N-01~N-38 | 38 | +| He thong Dieu khien | C-01~C-51 | 46 | | PC | PC-01~PC-18 | 18 | | DBMS | D-01~D-26 | 26 | -| Di động | M-01~M-04 | 4 | -| Web Application | 21 mã | 21 | -| Ảo hóa | HV-01~HV-25 | 25 | -| Đám mây | CA-01~CA-19 | 19 | +| Di dong | M-01~M-04 | 4 | +| Web Application | 21 ma | 21 | +| Ao hoa | HV-01~HV-25 | 25 | +| Dam may | CA-01~CA-19 | 19 | -**Đánh giá Quản lý**: A-1~A-127 (127 hạng mục, 14 lĩnh vực) -**Đánh giá Vật lý**: P-1~P-18 (18 hạng mục) +**Danh gia Quan ly**: A-1~A-127 (127 hang muc, 14 linh vuc) +**Danh gia Vat ly**: P-1~P-18 (18 hang muc) -### 2. Hướng dẫn Bảo mật AI — 54+ hạng mục +### 2. Huong dan Bao mat AI — 54+ hang muc -| Đối tượng | Hạng mục | Vòng đời | +| Doi tuong | Hang muc | Vong doi | |-----------|:--------:|----------| -| Nhà phát triển AI | 54 | 6 giai đoạn (Lập kế hoạch→Dữ liệu→Mô hình→Triển khai→Giám sát→Loại bỏ) | -| Nhà cung cấp dịch vụ | ~43 | 6 giai đoạn (Lập kế hoạch→Phát triển→Vận hành→Bảo trì→Phản hồi→Loại bỏ) | -| Người dùng | 7 | Các phương pháp bảo mật tốt nhất | +| Nha phat trien AI | 54 | 6 giai doan (Lap ke hoach→Du lieu→Mo hinh→Trien khai→Giam sat→Loai bo) | +| Nha cung cap dich vu | ~43 | 6 giai doan (Lap ke hoach→Phat trien→Van hanh→Bao tri→Phan hoi→Loai bo) | +| Nguoi dung | 7 | Cac phuong phap bao mat tot nhat | + +### 3. Bao mat Robot — ~103 hang muc + +| Danh muc | Ma | Hang muc | Tieu chuan Tham chieu | +|----------|-----|:--------:|----------------------| +| Phat trien PM an toan (SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| Bao mat chuoi cung ung | SC-01~07 | 7 | NIST SP 800-161 | +| Nhan dang va Xac thuc | IA-01~11 | 11 | IEC 62443 | +| Kiem soat Su dung | UC-01~11 | 11 | IEC 62443 | +| Toan ven He thong | SI-01~11 | 11 | IEC 62443 | +| Bao ve Du lieu | DP-01~04 | 4 | IEC 62443 | +| Han che Luong Du lieu | DFR-01~02 | 2 | IEC 62443 | +| Phan hoi Su kien | ER-01~03 | 3 | IEC 62443 | +| Kha dung Tai nguyen | RA-01~08 | 8 | IEC 62443 | +| Khuc phuc Mang | CR-01~13 | 13 | EU CRA | +| Bao mat Khong day | WS-01~14 | 14 | EU RED | + +Doi tuong: Robot cong nghiep / dich vu / y te (ISO 8373) + +### 4. Bao mat Khong gian — 53 hang muc + +| Linh vuc | Ma | Hang muc | Tieu chuan Tham chieu | +|----------|-----|:--------:|----------------------| +| Kiem soat Truy cap | AC-01~12 | 12 | CMMC, K-RMF | +| Nhan dang va Xac thuc | IA-01~02 | 2 | CMMC, NIS2 | +| Bao mat He thong va Truyen thong | SC-01~07 | 7 | NIST IR 8401 | +| Toan ven He thong va Thong tin | SI-01~04 | 4 | NIST CSF | +| Quan ly Van hanh He thong/Dich vu | SO-01~09 | 9 | ISMS-P | +| Phan hoi Su co | IR-01~02 | 2 | NIS2 | +| Bao mat Nhan su | PS-01~02 | 2 | CMMC | +| Bao mat Vat ly | PE-01~03 | 3 | K-RMF | +| Danh gia Rui ro va Bao mat | RA-01~02 | 2 | NIST CSF | +| Quan tri Bao mat | SG-01~04 | 4 | ISMS-P | +| Ke hoach Khan cap | CP-01~02 | 2 | NIST IR 8270 | +| Quan ly Chuoi cung ung | SM-01~04 | 4 | CMMC, NIS2 | + +Doi tuong: Nha van hanh ve tinh, nha cung cap GSaaS, nha van hanh tram mat dat, cong ty chuoi cung ung khong gian + +### 5. Huong dan Lap trinh An toan — 46 hang muc + +| Danh muc | Hang muc | CWE | Tieu chuan Tham chieu | +|----------|:--------:|:---:|----------------------| +| Xac thuc va Bieu dien Du lieu Dau vao | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| Chuc nang Bao mat | 16 | 16 | CWE/SANS Top 25 | +| Thoi gian va Trang thai | 2 | 3 | CWE | +| Xu ly Loi | 3 | 3 | CWE | +| Loi Ma nguon | 3 | 3 | CWE | +| Dong goi | 4 | 5 | CWE | +| Lam dung API | 2 | 1 | CWE | + +**Ngon ngu duoc ho tro:** +| Ngon ngu | Hang muc | Framework | +|----------|:--------:|-----------| +| Pseudo Code (chung) | 46 | Mau doc lap ngon ngu | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +Doi tuong: Nha phat trien web JavaScript/Python, nguoi dung cong cu AI (Claude, Cursor, Copilot), nha phat trien vibe coding + +### 6. Bao mat Zero Trust — ~421 hang muc + +| Yeu to Cot loi | Ma | Hang muc | Muc do Truong thanh | +|----------------|-----|:--------:|---------------------| +| Danh tinh | ZT-ID-01~53 | 53 | Truyen thong/Khoi dau/Nang cao/Toi uu | +| Thiet bi va Diem cuoi | ZT-DV-01~36 | 36 | Truyen thong/Khoi dau/Nang cao/Toi uu | +| Mang | ZT-NW-01~54 | 54 | Truyen thong/Khoi dau/Nang cao/Toi uu | +| He thong | ZT-SY-01~49 | 49 | Truyen thong/Khoi dau/Nang cao/Toi uu | +| Ung dung va Khoi luong Cong viec | ZT-AP-01~60 | 60 | Truyen thong/Khoi dau/Nang cao/Toi uu | +| Du lieu | ZT-DA-01~58 | 58 | Truyen thong/Khoi dau/Nang cao/Toi uu | +| Kha nang Quan sat va Phan tich | ZT-VA-01~43 | 43 | Truyen thong/Khoi dau/Nang cao/Toi uu | +| Tu dong hoa va Dieu phoi | ZT-AU-01~43 | 43 | Truyen thong/Khoi dau/Nang cao/Toi uu | +| Dac thu OT/ICS | ZT-OT-01~25 | 25 | Truyen thong/Khoi dau/Nang cao/Toi uu | + +**4 Muc do Truong thanh**: Truyen thong (Traditional) → Khoi dau (Initial) → Nang cao (Advanced) → Toi uu (Optimal) +**Tieu chuan Tham chieu**: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +Doi tuong: Doanh nghiep ap dung Zero Trust, moi truong OT/ICS, to chuc chuyen doi dam may, nguoi phu trach danh gia muc do truong thanh bao mat + +## Cai dat -## Cài đặt - -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` -## Cách sử dụng +## Cach su dung ```bash -# Bắt đầu đánh giá bảo mật toàn diện -/kesekit-en:start +# Bat dau danh gia bao mat toan dien +/kesekit-start -# Chạy danh sách kiểm tra trước triển khai -/kesekit-en:check +# Chay danh sach kiem tra truoc trien khai +/kesekit-check -# Tạo script tăng cường bảo mật -/kesekit-en:fix +# Tao script tang cuong bao mat +/kesekit-fix -# Nhận prompt lập trình an toàn -/kesekit-en:guide +# Nhan prompt lap trinh an toan +/kesekit-guide ``` --- -## Cấu trúc Dự án +## Cau truc Du an ``` KESE-KIT/ ├── .claude-plugin/ -│ └── marketplace.json ← Siêu dữ liệu plugin -├── skills/ ← Kỹ năng tiếng Anh (bộ định tuyến) +│ └── marketplace.json ← Sieu du lieu plugin +├── skills/ ← Ky nang tieng Anh │ ├── start/ -│ │ ├── SKILL.md ← Bộ định tuyến (~80 dòng) -│ │ └── references/ ← Kiến thức theo hướng dẫn -│ │ ├── cii/ ← CII 14 tài liệu tham khảo -│ │ └── ai-security/ ← Bảo mật AI 4 tài liệu tham khảo +│ │ ├── SKILL.md ← Bo dinh tuyen (~80 dong) +│ │ ├── references/ ← Tai lieu mo ta/quy chuan +│ │ │ ├── ai-security/ ← Tong quan, nha cung cap, huong dan nguoi dung +│ │ │ └── space-security/ ← Tong quan, kich ban de doa +│ │ ├── templates/ ← Bieu mau, bang danh sach kiem tra +│ │ │ ├── cii/ ← CII 14 bang kiem tra +│ │ │ ├── ai-security/ ← Xac minh nha phat trien AI, danh sach kiem tra nguoi dung +│ │ │ ├── robot-security/ ← Bao mat robot 6 danh sach kiem tra +│ │ │ ├── space-security/ ← Bao mat khong gian 4 bang kiem tra +│ │ │ └── zero-trust/ ← Bang kiem tra Zero Trust +│ │ └── scripts/ ← Script kiem tra/sua loi co the thuc thi +│ │ ├── cii/ ← Script bash, PowerShell, SQL +│ │ └── robot-security/ ← Script tuong lua, SBOM, chung chi │ ├── check/ │ ├── fix/ │ └── guide/ -├── skills-ko/ ← Kỹ năng tiếng Hàn (cùng cấu trúc) -├── authorkit/ ← Tài liệu gốc và sản phẩm công việc -│ ├── converted/ -│ │ ├── ref-001/ ← Hướng dẫn quản lý/vật lý (full.md) -│ │ ├── ref-002/ ← Hướng dẫn kỹ thuật (full.md) -│ │ └── ref-003/ ← Hướng dẫn bảo mật AI (full.md) -│ └── ... -├── 문서/ ← PDF gốc +├── skills-ko/ ← Ky nang tieng Han (cung cau truc) +├── 문서/ ← PDF goc +├── authorkit/ ← Tai lieu goc va san pham cong viec +├── docs/ ← README bang 20 ngon ngu +├── CONTRIBUTING.md ← Cach them huong dan └── README.md ``` --- -## Lịch sử Thay đổi +## Lich su Thay doi + +### v4.0.0 (2026-04-03) + +**Them huong dan moi: Bao mat Zero Trust** +- Nguon: KISA Zero Trust Guideline 2.0 (245 trang) + Mo hinh Truong thanh Zero Trust (182 trang) + Huong dan Zero Trust cho OT (67 trang) +- 9 yeu to cot loi, ~421 hang muc kiem tra, 4 muc do truong thanh +- Ho tro dac thu OT/ICS (ZT-OT-01~25) +- Tieu chuan: KISA Zero Trust Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model + +### v3.2.0 (2026-04-02) + +**Them huong dan moi: Huong dan Lap trinh An toan** +- Nguon: KISA Javascript Secure Coding Guide 159 trang + Python Secure Coding Guide 176 trang (ban cap nhat 2023) +- 7 danh muc, 46 hang muc, 49 CWE +- Huong dan Pseudo Code chung moi (mau UNSAFE/SAFE doc lap ngon ngu) +- Vi du ma nguon cho framework JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) + +### v3.0.0 (2026-04-02) + +**Thay doi khong tuong thich: dinh dang lenh da cap nhat** +- Tat ca ky nang duoc hop nhat vao khong gian ten `kesekit` +- Dinh dang lenh: `/start` → `/kesekit-start` (them tien to khong gian ten) + +**Them huong dan moi: Bao mat Khong gian** +- Nguon: Mo hinh Bao mat Khong gian Part1 134 trang + Part2 223 trang + Huong dan Giai thich 218 trang (MSIT/KISA) +- 12 linh vuc, 53 hang muc danh sach kiem tra +- Doi tuong: Nha van hanh ve tinh, nha cung cap GSaaS, nha van hanh tram mat dat ### v2.0.0 (2026-03-30) -**Tái cấu trúc — Áp dụng mẫu Progressive Disclosure** +**Tai cau truc — Ap dung mau Progressive Disclosure** -| Thay đổi | Trước (v1.0) | Sau (v2.0) | +| Thay doi | Truoc (v1.0) | Sau (v2.0) | |----------|-------------|------------| -| SKILL.md | Toàn bộ kiến thức nội tuyến (270~465 dòng) | Chỉ bộ định tuyến (~50~80 dòng) | -| Hướng dẫn | Chỉ hỗ trợ CII | Hỗ trợ CII + Bảo mật AI | -| Lưu trữ kiến thức | Mã cứng trong SKILL.md | Tách riêng vào `references/` (18 tệp) | -| Mã hạng mục | Chỉ bao gồm một số hạng mục | Toàn bộ hạng mục dựa trên hướng dẫn 2026 | -| Khả năng mở rộng | Thêm hướng dẫn mới tăng số kỹ năng | Cố định 4 kỹ năng, chỉ thêm references | - -**Thêm hướng dẫn mới: Hướng dẫn Bảo mật AI** -- Nguồn: Bộ Khoa học và ICT · KISA 「Hướng dẫn Bảo mật Trí tuệ Nhân tạo (AI)」 -- Nhà phát triển AI: 54 hạng mục xác minh (vòng đời 6 giai đoạn) -- Yêu cầu bảo mật cho nhà cung cấp dịch vụ AI -- 7 quy tắc bảo mật cho người dùng AI - -**Cập nhật Hướng dẫn CII** -- Trích xuất lại toàn bộ hạng mục dựa trên hướng dẫn chi tiết 2026 -- Phản ánh hệ thống mã hạng mục (WEB, HV, CA và các mã mới khác) +| SKILL.md | Toan bo kien thuc noi tuyen (270~465 dong) | Chi bo dinh tuyen (~50~80 dong) | +| Huong dan | Chi ho tro CII | Ho tro CII + Bao mat AI | +| Luu tru kien thuc | Ma cung trong SKILL.md | Tach rieng vao `references/` (18 tep) | +| Ma hang muc | Chi bao gom mot so hang muc | Toan bo hang muc dua tren huong dan 2026 | +| Kha nang mo rong | Them huong dan moi tang so ky nang | Co dinh 4 ky nang, chi them references | + +**Them huong dan moi: Huong dan Bao mat AI** +- Nguon: Bo Khoa hoc va ICT · KISA 「Huong dan Bao mat Tri tue Nhan tao (AI)」 +- Nha phat trien AI: 54 hang muc xac minh (vong doi 6 giai doan) +- Yeu cau bao mat cho nha cung cap dich vu AI +- 7 quy tac bao mat cho nguoi dung AI + +**Cap nhat Huong dan CII** +- Trich xuat lai toan bo hang muc dua tren huong dan chi tiet 2026 +- Phan anh he thong ma hang muc (WEB, HV, CA va cac ma moi khac) ### v1.0.0 (2026-03-29) -- Phiên bản đầu tiên -- 4 kỹ năng phân tích-đánh giá lỗ hổng CII (Hàn/Anh) -- Kỹ thuật (424) + Quản lý (127) + Vật lý (9) hạng mục +- Phien ban dau tien +- 4 ky nang phan tich-danh gia lo hong CII (Han/Anh) +- Ky thuat (424) + Quan ly (127) + Vat ly (9) hang muc --- -## Cơ sở Pháp lý +## Co so Phap ly -- **Luật Bảo vệ Hạ tầng Thông tin và Truyền thông** (Act on Protection of Information and Communications Infrastructure) -- **Luật Chính phủ Điện tử** (e-Government Act) -- **Luật Bảo vệ Thông tin Cá nhân** (Personal Information Protection Act) -- **Luật Cơ bản về Trí tuệ Nhân tạo** (AI Basic Act, có hiệu lực từ 2026.1.22) +- **Luat Bao ve Ha tang Thong tin va Truyen thong** (Act on Protection of Information and Communications Infrastructure) +- **Luat Chinh phu Dien tu** (e-Government Act) +- **Luat Bao ve Thong tin Ca nhan** (Personal Information Protection Act) +- **Luat Co ban ve Tri tue Nhan tao** (AI Basic Act, co hieu luc tu 2026.1.22) --- -## Tài liệu Liên quan +## Tai lieu Lien quan -- [Hướng dẫn Chi tiết Phân tích-Đánh giá Lỗ hổng Kỹ thuật KISA](https://www.kisa.or.kr) -- [Hướng dẫn Bảo mật Trí tuệ Nhân tạo (AI)](https://www.kisa.or.kr) +- [Huong dan Chi tiet Phan tich-Danh gia Lo hong Ky thuat KISA](https://www.kisa.or.kr) +- [Huong dan Bao mat Tri tue Nhan tao (AI)](https://www.kisa.or.kr) - [OWASP Top 10](https://owasp.org/Top10/) - [OWASP Top 10 for LLM](https://owasp.org/www-project-top-10-for-large-language-model-applications/) - [CWE/SANS Top 25](https://cwe.mitre.org/top25/) @@ -157,10 +268,10 @@ KESE-KIT/ ## Built With -| Plugin | Mô tả | +| Plugin | Mo ta | |--------|-------| -| [authorkit-ko](https://github.com/cdppcorp/authorkit) | Kỹ năng hỗ trợ viết sách - phân tích PDF, trích xuất cấu trúc, biên tập/viết lại | -| [win-hooks](https://github.com/anthropics/claude-code-plugins) | Tương thích hook plugin Claude Code trên môi trường Windows | +| [authorkit-ko](https://github.com/cdppcorp/authorkit) | Ky nang ho tro viet sach - phan tich PDF, trich xuat cau truc, bien tap/viet lai | +| [win-hooks](https://github.com/anthropics/claude-code-plugins) | Tuong thich hook plugin Claude Code tren moi truong Windows | --- diff --git a/docs/README.zh.md b/docs/README.zh.md index 2316461..b50239b 100644 --- a/docs/README.zh.md +++ b/docs/README.zh.md @@ -4,22 +4,22 @@ # KESE - KISA Enhanced Security Evaluation Kit -面向关键信息基础设施(CII)漏洞分析评估及AI安全评估的Claude Code技能插件。 +面向关键信息基础设施(CII)漏洞分析评估、AI安全评估、机器人安全检查、太空安全检查、安全编码指南、零信任安全评估的Claude Code技能插件。 --- ## 概述 -KESE(KISA Enhanced Security Evaluation Kit)是一款基于KISA(韩国互联网振兴院)指南的Claude Code插件,提供全面的安全漏洞分析评估能力。同时支持关键信息基础设施(CII)漏洞分析评估和AI安全评估。 +KESE(KISA Enhanced Security Evaluation Kit)是一款基于KISA(韩国互联网振兴院)指南的Claude Code插件,提供全面的安全漏洞分析评估能力。支持关键信息基础设施(CII)漏洞分析评估、AI安全评估、机器人安全检查、太空安全检查、安全编码指南、零信任安全评估。 ## 功能 | 技能 | 说明 | |------|------| -| `/kesekit-en:start` | 运行完整的安全漏洞评估(CII 560+项或AI安全) | -| `/kesekit-en:check` | 部署前安全合规检查清单 | -| `/kesekit-en:fix` | 自动生成加固脚本和安全修复方案 | -| `/kesekit-en:guide` | 为AI工具生成安全编码提示词 | +| `/kesekit-start` | 运行完整的安全漏洞评估(CII 560+ / AI安全 / 机器人安全 / 太空安全 / 安全编码 / 零信任) | +| `/kesekit-check` | 部署前安全合规检查清单(CII / AI / 机器人 / 太空 / 安全编码 / 零信任) | +| `/kesekit-fix` | 自动生成加固脚本和安全修复方案(CII / AI / 机器人 / 太空 / 安全编码 / 零信任) | +| `/kesekit-guide` | 为AI工具生成安全编码提示词(CII / AI / 机器人 / 太空 / JS·Python·通用 / 零信任) | ## 支持的指南 @@ -52,26 +52,111 @@ KESE(KISA Enhanced Security Evaluation Kit)是一款基于KISA(韩国互 | AI服务提供者 | ~43 | 6个阶段(规划→开发→运营→维护→反馈→退役) | | AI用户 | 7 | 安全最佳实践 | +### 3. 机器人安全 — ~103项 + +| 类别 | 代码 | 项数 | 参考标准 | +|------|------|:----:|----------| +| 安全SW开发(SSDF) | SSDF-01~19 | 19 | NIST SP 800-218 | +| 供应链安全 | SC-01~07 | 7 | NIST SP 800-161 | +| 识别与认证 | IA-01~11 | 11 | IEC 62443 | +| 使用控制 | UC-01~11 | 11 | IEC 62443 | +| 系统完整性 | SI-01~11 | 11 | IEC 62443 | +| 数据保护 | DP-01~04 | 4 | IEC 62443 | +| 数据流限制 | DFR-01~02 | 2 | IEC 62443 | +| 事件响应 | ER-01~03 | 3 | IEC 62443 | +| 资源可用性 | RA-01~08 | 8 | IEC 62443 | +| 网络韧性 | CR-01~13 | 13 | EU CRA | +| 无线安全 | WS-01~14 | 14 | EU RED | + +适用对象:工业用 / 服务用 / 医疗用机器人(ISO 8373) + +### 4. 太空安全 — 53项 + +| 领域 | 代码 | 项数 | 参考标准 | +|------|------|:----:|----------| +| 访问控制 | AC-01~12 | 12 | CMMC, K-RMF | +| 识别与认证 | IA-01~02 | 2 | CMMC, NIS2 | +| 系统与通信安全 | SC-01~07 | 7 | NIST IR 8401 | +| 系统与信息完整性 | SI-01~04 | 4 | NIST CSF | +| 系统/服务运维管理 | SO-01~09 | 9 | ISMS-P | +| 事件响应 | IR-01~02 | 2 | NIS2 | +| 人员安全 | PS-01~02 | 2 | CMMC | +| 物理安全 | PE-01~03 | 3 | K-RMF | +| 风险评估与安全评估 | RA-01~02 | 2 | NIST CSF | +| 安全治理 | SG-01~04 | 4 | ISMS-P | +| 应急计划 | CP-01~02 | 2 | NIST IR 8270 | +| 供应链管理 | SM-01~04 | 4 | CMMC, NIS2 | + +适用对象:卫星运营商、GSaaS提供商、地面站运营商、太空供应链参与企业 + +### 5. 安全编码指南 — 46项 + +| 类别 | 项数 | CWE数 | 参考标准 | +|------|:----:|:----:|----------| +| 输入数据验证与表示 | 16 | 18 | CWE/SANS Top 25, OWASP Top 10 | +| 安全功能 | 16 | 16 | CWE/SANS Top 25 | +| 时间与状态 | 2 | 3 | CWE | +| 错误处理 | 3 | 3 | CWE | +| 代码错误 | 3 | 3 | CWE | +| 封装 | 4 | 5 | CWE | +| API误用 | 2 | 1 | CWE | + +**支持语言:** +| 语言 | 项数 | 框架 | +|------|:----:|------| +| Pseudo Code(通用) | 46 | 语言无关模式 | +| JavaScript | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | 46 | Django, Flask, SQLAlchemy, cryptography | + +适用对象:JavaScript/Python Web开发者、AI工具(Claude, Cursor, Copilot)用户、Vibe编程开发者 + +### 6. 零信任安全 — ~421项 + +| 核心要素 | 代码 | 项数 | 成熟度 | +|----------|------|:----:|--------| +| 身份认证 | ZT-ID-01~53 | 53 | 传统/初始/高级/最优 | +| 设备与终端 | ZT-DV-01~36 | 36 | 传统/初始/高级/最优 | +| 网络 | ZT-NW-01~54 | 54 | 传统/初始/高级/最优 | +| 系统 | ZT-SY-01~49 | 49 | 传统/初始/高级/最优 | +| 应用与工作负载 | ZT-AP-01~60 | 60 | 传统/初始/高级/最优 | +| 数据 | ZT-DA-01~58 | 58 | 传统/初始/高级/最优 | +| 可视性与分析 | ZT-VA-01~43 | 43 | 传统/初始/高级/最优 | +| 自动化与编排 | ZT-AU-01~43 | 43 | 传统/初始/高级/最优 | +| OT/ICS专用 | ZT-OT-01~25 | 25 | 传统/初始/高级/最优 | + +**4个成熟度等级**:传统(Traditional) → 初始(Initial) → 高级(Advanced) → 最优(Optimal) +**参考标准**:KISA 零信任指南 2.0、NIST SP 800-207、CISA ZT Maturity Model + +适用对象:零信任实施企业、OT/ICS环境、云迁移组织、安全成熟度评估负责人 + ## 安装 -```bash -claude plugins install kesekit-en@kesekit +``` +/plugin marketplace add cdppcorp/KESE-KIT +/plugin install kesekit@cdppcorp-KESE-KIT ``` +> **更新时:** +> ``` +> /plugin marketplace update cdppcorp-KESE-KIT +> /plugin update kesekit@cdppcorp-KESE-KIT +> /reload-plugins +> ``` + ## 使用方法 ```bash # 启动完整安全评估 -/kesekit-en:start +/kesekit-start # 运行部署前检查清单 -/kesekit-en:check +/kesekit-check # 生成加固脚本 -/kesekit-en:fix +/kesekit-fix # 获取安全编码提示词 -/kesekit-en:guide +/kesekit-guide ``` --- @@ -82,23 +167,39 @@ claude plugins install kesekit-en@kesekit KESE-KIT/ ├── .claude-plugin/ │ └── marketplace.json ← 插件元数据 -├── skills/ ← 英文技能(路由器) +├── skills/ ← 英文技能 │ ├── start/ │ │ ├── SKILL.md ← 路由器(约80行) -│ │ └── references/ ← 按指南分类的知识库 -│ │ ├── cii/ ← CII 14个参考文件 -│ │ └── ai-security/ ← AI安全 4个参考文件 +│ │ ├── references/ ← 说明/基准文档 +│ │ │ ├── ai-security/ ← 概要、服务提供者、用户指南 +│ │ │ ├── space-security/ ← 概要、供应链威胁场景 +│ │ │ └── zero-trust/ ← 零信任成熟度、OT/ICS +│ │ ├── templates/ ← 附表、检查清单表格 +│ │ │ ├── cii/ ← CII 14项检查表 +│ │ │ ├── ai-security/ ← AI开发者验证项、用户检查清单 +│ │ │ ├── robot-security/ ← 机器人安全 6项检查清单 +│ │ │ ├── space-security/ ← 太空安全 4项检查表 +│ │ │ └── zero-trust/ ← 零信任 9核心要素检查清单 +│ │ └── scripts/ ← 可执行的检查/修复脚本 +│ │ ├── cii/ ← bash, PowerShell, SQL脚本 +│ │ └── robot-security/ ← 防火墙、SBOM、证书脚本 │ ├── check/ │ ├── fix/ │ └── guide/ ├── skills-ko/ ← 韩文技能(相同结构) -├── authorkit/ ← 源文档及工作成果 +├── 문서/ ← 源PDF(14份) +├── authorkit/ ← 转换产出物及工作文件 │ ├── converted/ │ │ ├── ref-001/ ← 管理与物理指南(full.md) │ │ ├── ref-002/ ← 技术指南(full.md) -│ │ └── ref-003/ ← AI安全指南(full.md) +│ │ ├── ref-003/ ← AI安全指南(full.md) +│ │ ├── ... +│ │ ├── ref-013/ ← 零信任指南 2.0(full.md) +│ │ ├── ref-014/ ← 零信任成熟度模型解说书(full.md) +│ │ └── ref-015/ ← OT环境的零信任应用指南(full.md) │ └── ... -├── 문서/ ← 源PDF +├── docs/ ← 20种语言README +├── CONTRIBUTING.md └── README.md ``` @@ -106,6 +207,40 @@ KESE-KIT/ ## 变更记录 +### v4.0.0 (2026-04-03) + +**新增指南:零信任安全** +- 来源:KISA 零信任指南 2.0(245p) + 零信任成熟度模型解说书(182p) + OT环境的零信任应用指南(67p) +- 9个核心要素,~421项检查清单 +- 4个成熟度等级:Traditional → Initial → Advanced → Optimal +- 参考标准:KISA 零信任指南 2.0、NIST SP 800-207、CISA ZT Maturity Model +- 含OT/ICS专用项目 25项 + +### v3.2.0 (2026-04-02) + +**新增指南:安全编码指南** +- 来源:KISA Javascript 安全编码指南 159p + Python 安全编码指南 176p(2023年修订版) +- 7个类别、46项、49 CWE映射 +- 新建通用 Pseudo Code 指南(语言无关 UNSAFE/SAFE 模式) +- JavaScript (Express.js, Sequelize, Node.js) / Python (Django, Flask, SQLAlchemy) 框架代码示例 +- 8个技能(EN/KO)均配置 `references/secure-coding/` + `templates/secure-coding/` + +### v3.0.0 (2026-04-02) + +**Breaking Change:命令格式变更** +- 所有技能统一至 `kesekit` 命名空间 +- 命令格式:`/start` → `/kesekit-start`(添加命名空间前缀) + +**新增指南:太空安全** +- 来源:太空安全模型 Part1 134p + Part2 223p + 解说书 218p +- 12个领域、53项检查清单 +- 参考标准:CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, CCSDS + +**新增指南:机器人安全**(v2.1) +- 来源:机器人安全模型(高级版)156p + 机器人安全漏洞检查清单解说书 225p +- 11个类别、~103项检查清单 +- 参考标准:NIST SP 800-218, IEC 62443, EU CRA, EU RED, NIS2 + ### v2.0.0 (2026-03-30) **结构重构 — 应用渐进式展示(Progressive Disclosure)模式** diff --git a/scripts/validate-content.mjs b/scripts/validate-content.mjs new file mode 100644 index 0000000..f39bc98 --- /dev/null +++ b/scripts/validate-content.mjs @@ -0,0 +1,551 @@ +#!/usr/bin/env node + +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const rootDir = path.resolve(__dirname, ".."); +const errors = []; +const checks = []; + +const skillRoots = ["skills", "skills-ko"]; +const skillNames = ["start", "check", "fix", "guide"]; + +// Maps (skillRoot, skillName) to actual directory name +function skillDir(skillRoot, skillName) { + if (skillRoot === "skills-ko") { + return `kesekit-${skillName}-ko`; + } + return `kesekit-${skillName}`; +} + +function skillPath(skillRoot, skillName, ...rest) { + return path.join(rootDir, skillRoot, skillDir(skillRoot, skillName), ...rest); +} + +const expectedCiiCounts = { + "admin.md": 127, + "cloud.md": 19, + "control-system.md": 46, + "database.md": 26, + "mobile.md": 4, + "network.md": 38, + "pc.md": 18, + "physical.md": 18, + "security-equip.md": 23, + "unix.md": 67, + "virtualization.md": 25, + "web-service.md": 26, + "webapp.md": 21, + "windows.md": 64, +}; + +const expectedRobotCounts = { + "cyber-resilience.md": 13, + "iec62443.md": 50, + "ssdf.md": 19, + "supply-chain.md": 7, + "wireless.md": 14, +}; + +const expectedStartReferenceCounts = { + "templates/cii/unix.md": 67, + "templates/cii/windows.md": 64, + "templates/cii/web-service.md": 26, + "templates/cii/security-equip.md": 23, + "templates/cii/network.md": 38, + "templates/cii/control-system.md": 46, + "templates/cii/pc.md": 18, + "templates/cii/database.md": 26, + "templates/cii/mobile.md": 4, + "templates/cii/webapp.md": 21, + "templates/cii/virtualization.md": 25, + "templates/cii/cloud.md": 19, + "templates/cii/admin.md": 127, + "templates/cii/physical.md": 18, +}; + +const expectedReadmeEnglishCounts = { + "U-01~U-67": 67, + "W-01~W-64": 64, + "WEB-01~WEB-26": 26, + "S-01~S-23": 23, + "N-01~N-38": 38, + "C-01~C-51": 46, + "PC-01~PC-18": 18, + "D-01~D-26": 26, + "M-01~M-04": 4, + "21 codes": 21, + "HV-01~HV-25": 25, + "CA-01~CA-19": 19, +}; + +const expectedReadmeKoreanCounts = { + "U-01~U-67": 67, + "W-01~W-64": 64, + "WEB-01~WEB-26": 26, + "S-01~S-23": 23, + "N-01~N-38": 38, + "C-01~C-51": 46, + "PC-01~PC-18": 18, + "D-01~D-26": 26, + "M-01~M-04": 4, + "21개 코드": 21, + "HV-01~HV-25": 25, + "CA-01~CA-19": 19, +}; + +function rel(filePath) { + return path.relative(rootDir, filePath).replaceAll(path.sep, "/"); +} + +function read(filePath) { + return fs.readFileSync(filePath, "utf8"); +} + +function assert(condition, message) { + if (!condition) { + errors.push(message); + } +} + +function check(name, fn) { + checks.push(name); + try { + fn(); + } catch (error) { + errors.push(`${name}: ${error instanceof Error ? error.message : String(error)}`); + } +} + +function listMarkdownFiles(dirPath) { + const result = []; + + for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) { + const entryPath = path.join(dirPath, entry.name); + + if (entry.isDirectory()) { + result.push(...listMarkdownFiles(entryPath)); + continue; + } + + if (entry.isFile() && entry.name.endsWith(".md")) { + result.push(rel(entryPath)); + } + } + + return result.sort(); +} + +function parseItemCountFromCell(cell) { + const trimmed = cell.trim(); + + if (/^(코드|Code|#|항목|Item|대상|Target)$/i.test(trimmed)) { + return 0; + } + + let match = trimmed.match(/^([A-Z]{1,5})-(\d+)\s*~\s*\1-(\d+)$/); + if (match) { + const start = Number(match[2]); + const end = Number(match[3]); + return end - start + 1; + } + + match = trimmed.match(/^([A-Z]{1,5})-(\d+)$/); + if (match) { + return 1; + } + + if (/^[A-Z]{2}$/.test(trimmed)) { + return 1; + } + + return 0; +} + +function countReferenceItems(filePath) { + return read(filePath) + .split(/\r?\n/) + .reduce((sum, line) => { + const match = line.match(/^\|\s*([^|]+?)\s*\|/); + return sum + (match ? parseItemCountFromCell(match[1]) : 0); + }, 0); +} + +function sectionBetween(content, startMarker, endMarker) { + const start = content.indexOf(startMarker); + if (start === -1) { + return null; + } + + const end = content.indexOf(endMarker, start + startMarker.length); + if (end === -1) { + return null; + } + + return content.slice(start, end); +} + +function parseStartReferenceTable(filePath) { + const content = read(filePath); + const rows = {}; + + for (const line of content.split(/\r?\n/)) { + const match = line.match(/^\|\s*[^|]+?\s*\|\s*`(templates\/cii\/[^`]+)`\s*\|\s*(\d+)\s*\|$/); + if (match) { + rows[match[1]] = Number(match[2]); + } + } + + return rows; +} + +function parseReadmeTechnicalTable(content, startMarker, endMarker) { + const section = sectionBetween(content, startMarker, endMarker); + if (!section) { + return null; + } + + const rows = {}; + + for (const line of section.split(/\r?\n/)) { + const match = line.match(/^\|\s*[^|]+?\s*\|\s*([^|]+?)\s*\|\s*(\d+)\s*\|$/); + if (match) { + rows[match[1].trim()] = Number(match[2]); + } + } + + return rows; +} + +function assertObjectEqual(actual, expected, name) { + const actualJson = JSON.stringify(actual, Object.keys(actual).sort()); + const expectedJson = JSON.stringify(expected, Object.keys(expected).sort()); + assert(actualJson === expectedJson, `${name} mismatch.\nactual: ${actualJson}\nexpected: ${expectedJson}`); +} + +function assertIncludes(filePath, pattern, description) { + const content = read(filePath); + const ok = pattern instanceof RegExp ? pattern.test(content) : content.includes(pattern); + assert(ok, `${rel(filePath)} is missing ${description}`); +} + +check("reference-tree-parity", () => { + for (const skillRoot of skillRoots) { + const baseDir = skillPath(skillRoot, "start", "references"); + const basePrefix = `${skillRoot}/${skillDir(skillRoot, "start")}/`; + const expectedFiles = listMarkdownFiles(baseDir).map((file) => file.replace(basePrefix, "")); + + for (const skillName of skillNames.slice(1)) { + const dirPath = skillPath(skillRoot, skillName, "references"); + const prefix = `${skillRoot}/${skillDir(skillRoot, skillName)}/`; + const actualFiles = listMarkdownFiles(dirPath).map((file) => file.replace(prefix, "")); + assertObjectEqual(actualFiles, expectedFiles, `${skillRoot}/${skillDir(skillRoot, skillName)}/references file list`); + } + } +}); + +check("reference-content-parity", () => { + for (const skillRoot of skillRoots) { + const baseDir = skillPath(skillRoot, "start", "references"); + const basePrefix = `${skillRoot}/${skillDir(skillRoot, "start")}/`; + const relativeFiles = listMarkdownFiles(baseDir).map((file) => file.replace(basePrefix, "")); + + for (const relativeFile of relativeFiles) { + const baseline = read(skillPath(skillRoot, "start", relativeFile)); + + for (const skillName of skillNames.slice(1)) { + const candidatePath = skillPath(skillRoot, skillName, relativeFile); + const candidate = read(candidatePath); + assert( + candidate === baseline, + `${rel(candidatePath)} diverged from ${skillRoot}/${skillDir(skillRoot, "start")}/${relativeFile}`, + ); + } + } + } +}); + +check("cii-reference-counts", () => { + const ciiDir = skillPath("skills", "start", "templates", "cii"); + + for (const [fileName, expectedCount] of Object.entries(expectedCiiCounts)) { + const filePath = path.join(ciiDir, fileName); + const actualCount = countReferenceItems(filePath); + assert(actualCount === expectedCount, `${rel(filePath)} expected ${expectedCount} items, found ${actualCount}`); + } +}); + +check("robot-reference-counts", () => { + const robotDir = skillPath("skills", "start", "templates", "robot-security"); + let total = 0; + + for (const [fileName, expectedCount] of Object.entries(expectedRobotCounts)) { + const filePath = path.join(robotDir, fileName); + const actualCount = countReferenceItems(filePath); + total += actualCount; + assert(actualCount === expectedCount, `${rel(filePath)} expected ${expectedCount} items, found ${actualCount}`); + } + + assert(total === 103, `Robot Security total expected 103 items, found ${total}`); +}); + +check("start-skill-count-tables", () => { + const englishStart = parseStartReferenceTable(skillPath("skills", "start", "SKILL.md")); + const koreanStart = parseStartReferenceTable(skillPath("skills-ko", "start", "SKILL.md")); + + assertObjectEqual(englishStart, expectedStartReferenceCounts, "skills/kesekit-start/SKILL.md reference table"); + assertObjectEqual(koreanStart, expectedStartReferenceCounts, "skills-ko/kesekit-start-ko/SKILL.md reference table"); +}); + +check("readme-count-tables", () => { + const content = read(path.join(rootDir, "README.md")); + const englishTable = parseReadmeTechnicalTable(content, "**Technical Assessment**", "**Administrative Assessment**"); + const koreanTable = parseReadmeTechnicalTable(content, "**기술적 취약점 평가**", "**관리적 취약점 평가**"); + + assert(englishTable !== null, "README.md English technical assessment table was not found"); + assert(koreanTable !== null, "README.md Korean technical assessment table was not found"); + + if (englishTable) { + assertObjectEqual(englishTable, expectedReadmeEnglishCounts, "README.md English CII count table"); + } + + if (koreanTable) { + assertObjectEqual(koreanTable, expectedReadmeKoreanCounts, "README.md Korean CII count table"); + } +}); + +check("router-robot-branch-coverage", () => { + for (const skillName of skillNames) { + assertIncludes(skillPath("skills", skillName, "SKILL.md"), /## Robot Security Branch/, "an English Robot Security branch section"); + assertIncludes(skillPath("skills-ko", skillName, "SKILL.md"), /## 로봇 보안 분기 시/, "a Korean robot branch section"); + } +}); + +check("metadata-mentions-robot-security", () => { + assertIncludes(path.join(rootDir, ".claude-plugin", "marketplace.json"), /Robot Security|로봇 보안/, "Robot Security metadata"); + assertIncludes(path.join(rootDir, "README.md"), /Robot Security/, "Robot Security in the English README"); + assertIncludes(path.join(rootDir, "README.md"), /로봇 보안/, "robot security in the Korean README"); +}); + +// --- Templates and Scripts directory checks --- + +function listAllFiles(dirPath) { + const result = []; + if (!fs.existsSync(dirPath)) return result; + for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) { + const entryPath = path.join(dirPath, entry.name); + if (entry.isDirectory()) { + result.push(...listAllFiles(entryPath)); + } else if (entry.isFile()) { + result.push(rel(entryPath)); + } + } + return result.sort(); +} + +function countFiles(dirPath) { + return listAllFiles(dirPath).length; +} + +const expectedTemplateFileCounts = { + "cii": 14, + "robot-security": 6, + "space-security": 5, + "ai-security": 2, +}; + +const expectedScriptFileCounts = { + "cii": 8, + "robot-security": 4, +}; + +// fix skills have additional space-security scripts +const expectedFixScriptFileCounts = { + ...expectedScriptFileCounts, + "space-security": 3, +}; + +check("templates-directories-exist", () => { + for (const skillRoot of skillRoots) { + for (const skillName of skillNames) { + const templatesDir = skillPath(skillRoot, skillName, "templates"); + const label = `${skillRoot}/${skillDir(skillRoot, skillName)}/templates`; + assert(fs.existsSync(templatesDir), `${label} directory does not exist`); + } + } +}); + +check("scripts-directories-exist", () => { + for (const skillRoot of skillRoots) { + for (const skillName of skillNames) { + const scriptsDir = skillPath(skillRoot, skillName, "scripts"); + const label = `${skillRoot}/${skillDir(skillRoot, skillName)}/scripts`; + assert(fs.existsSync(scriptsDir), `${label} directory does not exist`); + } + } +}); + +check("template-file-counts", () => { + for (const skillRoot of skillRoots) { + for (const skillName of skillNames) { + for (const [subDir, expectedCount] of Object.entries(expectedTemplateFileCounts)) { + const dirPath = skillPath(skillRoot, skillName, "templates", subDir); + const label = `${skillRoot}/${skillDir(skillRoot, skillName)}/templates/${subDir}`; + assert(fs.existsSync(dirPath), `${label} directory does not exist`); + if (fs.existsSync(dirPath)) { + const actual = countFiles(dirPath); + assert(actual === expectedCount, `${label} expected ${expectedCount} files, found ${actual}`); + } + } + } + } +}); + +check("script-file-counts", () => { + for (const skillRoot of skillRoots) { + for (const skillName of skillNames) { + const expected = skillName === "fix" ? expectedFixScriptFileCounts : expectedScriptFileCounts; + for (const [subDir, expectedCount] of Object.entries(expected)) { + const dirPath = skillPath(skillRoot, skillName, "scripts", subDir); + const label = `${skillRoot}/${skillDir(skillRoot, skillName)}/scripts/${subDir}`; + assert(fs.existsSync(dirPath), `${label} directory does not exist`); + if (fs.existsSync(dirPath)) { + const actual = countFiles(dirPath); + assert(actual === expectedCount, `${label} expected ${expectedCount} files, found ${actual}`); + } + } + } + } +}); + +check("template-content-parity", () => { + for (const skillRoot of skillRoots) { + const baseDir = skillPath(skillRoot, "start", "templates"); + const basePrefix = `${skillRoot}/${skillDir(skillRoot, "start")}/`; + + for (const subDir of Object.keys(expectedTemplateFileCounts)) { + const subDirPath = path.join(baseDir, subDir); + if (!fs.existsSync(subDirPath)) continue; + + const baselineFiles = listAllFiles(subDirPath).map((f) => f.replace(basePrefix, "")); + + for (const skillName of skillNames.slice(1)) { + const candidateDir = skillPath(skillRoot, skillName, "templates", subDir); + const prefix = `${skillRoot}/${skillDir(skillRoot, skillName)}/`; + const candidateFiles = listAllFiles(candidateDir).map((f) => f.replace(prefix, "")); + assertObjectEqual(candidateFiles, baselineFiles, `${skillRoot}/${skillDir(skillRoot, skillName)}/templates/${subDir} file list`); + + for (const relFile of baselineFiles) { + const baselinePath = skillPath(skillRoot, "start", relFile); + const candidatePath = skillPath(skillRoot, skillName, relFile); + const baselineContent = read(baselinePath); + const candidateContent = read(candidatePath); + assert( + candidateContent === baselineContent, + `${rel(candidatePath)} diverged from ${skillRoot}/${skillDir(skillRoot, "start")}/${relFile}`, + ); + } + } + } + } +}); + +check("script-content-parity", () => { + // Scripts in cii/ and robot-security/ should be identical across all skills. + // space-security/ scripts only exist in fix skills, so parity is checked between + // skills/kesekit-fix and skills-ko/kesekit-fix-ko (handled by cross-language parity below). + const sharedSubDirs = ["cii", "robot-security"]; + + for (const skillRoot of skillRoots) { + for (const subDir of sharedSubDirs) { + const baseDir = skillPath(skillRoot, "start", "scripts", subDir); + if (!fs.existsSync(baseDir)) continue; + + const basePrefix = `${skillRoot}/${skillDir(skillRoot, "start")}/`; + const baselineFiles = listAllFiles(baseDir).map((f) => f.replace(basePrefix, "")); + + for (const skillName of skillNames.slice(1)) { + const candidateDir = skillPath(skillRoot, skillName, "scripts", subDir); + const prefix = `${skillRoot}/${skillDir(skillRoot, skillName)}/`; + const candidateFiles = listAllFiles(candidateDir).map((f) => f.replace(prefix, "")); + assertObjectEqual(candidateFiles, baselineFiles, `${skillRoot}/${skillDir(skillRoot, skillName)}/scripts/${subDir} file list`); + + for (const relFile of baselineFiles) { + const baselinePath = skillPath(skillRoot, "start", relFile); + const candidatePath = skillPath(skillRoot, skillName, relFile); + const baselineContent = read(baselinePath); + const candidateContent = read(candidatePath); + assert( + candidateContent === baselineContent, + `${rel(candidatePath)} diverged from ${skillRoot}/${skillDir(skillRoot, "start")}/${relFile}`, + ); + } + } + } + } +}); + +check("cross-language-template-parity", () => { + // templates should be identical between skills/ and skills-ko/ for each skill type + for (const skillName of skillNames) { + for (const subDir of Object.keys(expectedTemplateFileCounts)) { + const enDir = skillPath("skills", skillName, "templates", subDir); + const koDir = skillPath("skills-ko", skillName, "templates", subDir); + if (!fs.existsSync(enDir) || !fs.existsSync(koDir)) continue; + + const enPrefix = `skills/${skillDir("skills", skillName)}/`; + const koPrefix = `skills-ko/${skillDir("skills-ko", skillName)}/`; + const enFiles = listAllFiles(enDir).map((f) => f.replace(enPrefix, "")); + const koFiles = listAllFiles(koDir).map((f) => f.replace(koPrefix, "")); + assertObjectEqual(koFiles, enFiles, `skills-ko/${skillDir("skills-ko", skillName)}/templates/${subDir} vs EN file list`); + + for (const relFile of enFiles) { + const enContent = read(skillPath("skills", skillName, relFile)); + const koContent = read(skillPath("skills-ko", skillName, relFile)); + assert( + koContent === enContent, + `skills-ko/${skillDir("skills-ko", skillName)}/${relFile} diverged from skills/${skillDir("skills", skillName)}/${relFile}`, + ); + } + } + } +}); + +check("cross-language-script-parity", () => { + // scripts should be identical between skills/ and skills-ko/ for each skill type + for (const skillName of skillNames) { + const expected = skillName === "fix" ? expectedFixScriptFileCounts : expectedScriptFileCounts; + for (const subDir of Object.keys(expected)) { + const enDir = skillPath("skills", skillName, "scripts", subDir); + const koDir = skillPath("skills-ko", skillName, "scripts", subDir); + if (!fs.existsSync(enDir) || !fs.existsSync(koDir)) continue; + + const enPrefix = `skills/${skillDir("skills", skillName)}/`; + const koPrefix = `skills-ko/${skillDir("skills-ko", skillName)}/`; + const enFiles = listAllFiles(enDir).map((f) => f.replace(enPrefix, "")); + const koFiles = listAllFiles(koDir).map((f) => f.replace(koPrefix, "")); + assertObjectEqual(koFiles, enFiles, `skills-ko/${skillDir("skills-ko", skillName)}/scripts/${subDir} vs EN file list`); + + for (const relFile of enFiles) { + const enContent = read(skillPath("skills", skillName, relFile)); + const koContent = read(skillPath("skills-ko", skillName, relFile)); + assert( + koContent === enContent, + `skills-ko/${skillDir("skills-ko", skillName)}/${relFile} diverged from skills/${skillDir("skills", skillName)}/${relFile}`, + ); + } + } + } +}); + +if (errors.length > 0) { + console.error(`Validation failed with ${errors.length} issue(s):`); + for (const error of errors) { + console.error(`- ${error}`); + } + process.exit(1); +} + +console.log(`Validated ${checks.length} content checks successfully.`); diff --git a/skill-creator/LICENSE.txt b/skill-creator/LICENSE.txt new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/skill-creator/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/skill-creator/SKILL.md b/skill-creator/SKILL.md new file mode 100644 index 0000000..b7f8659 --- /dev/null +++ b/skill-creator/SKILL.md @@ -0,0 +1,356 @@ +--- +name: skill-creator +description: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations. +license: Complete terms in LICENSE.txt +--- + +# Skill Creator + +This skill provides guidance for creating effective skills. + +## About Skills + +Skills are modular, self-contained packages that extend Claude's capabilities by providing +specialized knowledge, workflows, and tools. Think of them as "onboarding guides" for specific +domains or tasks—they transform Claude from a general-purpose agent into a specialized agent +equipped with procedural knowledge that no model can fully possess. + +### What Skills Provide + +1. Specialized workflows - Multi-step procedures for specific domains +2. Tool integrations - Instructions for working with specific file formats or APIs +3. Domain expertise - Company-specific knowledge, schemas, business logic +4. Bundled resources - Scripts, references, and assets for complex and repetitive tasks + +## Core Principles + +### Concise is Key + +The context window is a public good. Skills share the context window with everything else Claude needs: system prompt, conversation history, other Skills' metadata, and the actual user request. + +**Default assumption: Claude is already very smart.** Only add context Claude doesn't already have. Challenge each piece of information: "Does Claude really need this explanation?" and "Does this paragraph justify its token cost?" + +Prefer concise examples over verbose explanations. + +### Set Appropriate Degrees of Freedom + +Match the level of specificity to the task's fragility and variability: + +**High freedom (text-based instructions)**: Use when multiple approaches are valid, decisions depend on context, or heuristics guide the approach. + +**Medium freedom (pseudocode or scripts with parameters)**: Use when a preferred pattern exists, some variation is acceptable, or configuration affects behavior. + +**Low freedom (specific scripts, few parameters)**: Use when operations are fragile and error-prone, consistency is critical, or a specific sequence must be followed. + +Think of Claude as exploring a path: a narrow bridge with cliffs needs specific guardrails (low freedom), while an open field allows many routes (high freedom). + +### Anatomy of a Skill + +Every skill consists of a required SKILL.md file and optional bundled resources: + +``` +skill-name/ +├── SKILL.md (required) +│ ├── YAML frontmatter metadata (required) +│ │ ├── name: (required) +│ │ └── description: (required) +│ └── Markdown instructions (required) +└── Bundled Resources (optional) + ├── scripts/ - Executable code (Python/Bash/etc.) + ├── references/ - Documentation intended to be loaded into context as needed + └── assets/ - Files used in output (templates, icons, fonts, etc.) +``` + +#### SKILL.md (required) + +Every SKILL.md consists of: + +- **Frontmatter** (YAML): Contains `name` and `description` fields. These are the only fields that Claude reads to determine when the skill gets used, thus it is very important to be clear and comprehensive in describing what the skill is, and when it should be used. +- **Body** (Markdown): Instructions and guidance for using the skill. Only loaded AFTER the skill triggers (if at all). + +#### Bundled Resources (optional) + +##### Scripts (`scripts/`) + +Executable code (Python/Bash/etc.) for tasks that require deterministic reliability or are repeatedly rewritten. + +- **When to include**: When the same code is being rewritten repeatedly or deterministic reliability is needed +- **Example**: `scripts/rotate_pdf.py` for PDF rotation tasks +- **Benefits**: Token efficient, deterministic, may be executed without loading into context +- **Note**: Scripts may still need to be read by Claude for patching or environment-specific adjustments + +##### References (`references/`) + +Documentation and reference material intended to be loaded as needed into context to inform Claude's process and thinking. + +- **When to include**: For documentation that Claude should reference while working +- **Examples**: `references/finance.md` for financial schemas, `references/mnda.md` for company NDA template, `references/policies.md` for company policies, `references/api_docs.md` for API specifications +- **Use cases**: Database schemas, API documentation, domain knowledge, company policies, detailed workflow guides +- **Benefits**: Keeps SKILL.md lean, loaded only when Claude determines it's needed +- **Best practice**: If files are large (>10k words), include grep search patterns in SKILL.md +- **Avoid duplication**: Information should live in either SKILL.md or references files, not both. Prefer references files for detailed information unless it's truly core to the skill—this keeps SKILL.md lean while making information discoverable without hogging the context window. Keep only essential procedural instructions and workflow guidance in SKILL.md; move detailed reference material, schemas, and examples to references files. + +##### Assets (`assets/`) + +Files not intended to be loaded into context, but rather used within the output Claude produces. + +- **When to include**: When the skill needs files that will be used in the final output +- **Examples**: `assets/logo.png` for brand assets, `assets/slides.pptx` for PowerPoint templates, `assets/frontend-template/` for HTML/React boilerplate, `assets/font.ttf` for typography +- **Use cases**: Templates, images, icons, boilerplate code, fonts, sample documents that get copied or modified +- **Benefits**: Separates output resources from documentation, enables Claude to use files without loading them into context + +#### What to Not Include in a Skill + +A skill should only contain essential files that directly support its functionality. Do NOT create extraneous documentation or auxiliary files, including: + +- README.md +- INSTALLATION_GUIDE.md +- QUICK_REFERENCE.md +- CHANGELOG.md +- etc. + +The skill should only contain the information needed for an AI agent to do the job at hand. It should not contain auxilary context about the process that went into creating it, setup and testing procedures, user-facing documentation, etc. Creating additional documentation files just adds clutter and confusion. + +### Progressive Disclosure Design Principle + +Skills use a three-level loading system to manage context efficiently: + +1. **Metadata (name + description)** - Always in context (~100 words) +2. **SKILL.md body** - When skill triggers (<5k words) +3. **Bundled resources** - As needed by Claude (Unlimited because scripts can be executed without reading into context window) + +#### Progressive Disclosure Patterns + +Keep SKILL.md body to the essentials and under 500 lines to minimize context bloat. Split content into separate files when approaching this limit. When splitting out content into other files, it is very important to reference them from SKILL.md and describe clearly when to read them, to ensure the reader of the skill knows they exist and when to use them. + +**Key principle:** When a skill supports multiple variations, frameworks, or options, keep only the core workflow and selection guidance in SKILL.md. Move variant-specific details (patterns, examples, configuration) into separate reference files. + +**Pattern 1: High-level guide with references** + +```markdown +# PDF Processing + +## Quick start + +Extract text with pdfplumber: +[code example] + +## Advanced features + +- **Form filling**: See [FORMS.md](FORMS.md) for complete guide +- **API reference**: See [REFERENCE.md](REFERENCE.md) for all methods +- **Examples**: See [EXAMPLES.md](EXAMPLES.md) for common patterns +``` + +Claude loads FORMS.md, REFERENCE.md, or EXAMPLES.md only when needed. + +**Pattern 2: Domain-specific organization** + +For Skills with multiple domains, organize content by domain to avoid loading irrelevant context: + +``` +bigquery-skill/ +├── SKILL.md (overview and navigation) +└── reference/ + ├── finance.md (revenue, billing metrics) + ├── sales.md (opportunities, pipeline) + ├── product.md (API usage, features) + └── marketing.md (campaigns, attribution) +``` + +When a user asks about sales metrics, Claude only reads sales.md. + +Similarly, for skills supporting multiple frameworks or variants, organize by variant: + +``` +cloud-deploy/ +├── SKILL.md (workflow + provider selection) +└── references/ + ├── aws.md (AWS deployment patterns) + ├── gcp.md (GCP deployment patterns) + └── azure.md (Azure deployment patterns) +``` + +When the user chooses AWS, Claude only reads aws.md. + +**Pattern 3: Conditional details** + +Show basic content, link to advanced content: + +```markdown +# DOCX Processing + +## Creating documents + +Use docx-js for new documents. See [DOCX-JS.md](DOCX-JS.md). + +## Editing documents + +For simple edits, modify the XML directly. + +**For tracked changes**: See [REDLINING.md](REDLINING.md) +**For OOXML details**: See [OOXML.md](OOXML.md) +``` + +Claude reads REDLINING.md or OOXML.md only when the user needs those features. + +**Important guidelines:** + +- **Avoid deeply nested references** - Keep references one level deep from SKILL.md. All reference files should link directly from SKILL.md. +- **Structure longer reference files** - For files longer than 100 lines, include a table of contents at the top so Claude can see the full scope when previewing. + +## Skill Creation Process + +Skill creation involves these steps: + +1. Understand the skill with concrete examples +2. Plan reusable skill contents (scripts, references, assets) +3. Initialize the skill (run init_skill.py) +4. Edit the skill (implement resources and write SKILL.md) +5. Package the skill (run package_skill.py) +6. Iterate based on real usage + +Follow these steps in order, skipping only if there is a clear reason why they are not applicable. + +### Step 1: Understanding the Skill with Concrete Examples + +Skip this step only when the skill's usage patterns are already clearly understood. It remains valuable even when working with an existing skill. + +To create an effective skill, clearly understand concrete examples of how the skill will be used. This understanding can come from either direct user examples or generated examples that are validated with user feedback. + +For example, when building an image-editor skill, relevant questions include: + +- "What functionality should the image-editor skill support? Editing, rotating, anything else?" +- "Can you give some examples of how this skill would be used?" +- "I can imagine users asking for things like 'Remove the red-eye from this image' or 'Rotate this image'. Are there other ways you imagine this skill being used?" +- "What would a user say that should trigger this skill?" + +To avoid overwhelming users, avoid asking too many questions in a single message. Start with the most important questions and follow up as needed for better effectiveness. + +Conclude this step when there is a clear sense of the functionality the skill should support. + +### Step 2: Planning the Reusable Skill Contents + +To turn concrete examples into an effective skill, analyze each example by: + +1. Considering how to execute on the example from scratch +2. Identifying what scripts, references, and assets would be helpful when executing these workflows repeatedly + +Example: When building a `pdf-editor` skill to handle queries like "Help me rotate this PDF," the analysis shows: + +1. Rotating a PDF requires re-writing the same code each time +2. A `scripts/rotate_pdf.py` script would be helpful to store in the skill + +Example: When designing a `frontend-webapp-builder` skill for queries like "Build me a todo app" or "Build me a dashboard to track my steps," the analysis shows: + +1. Writing a frontend webapp requires the same boilerplate HTML/React each time +2. An `assets/hello-world/` template containing the boilerplate HTML/React project files would be helpful to store in the skill + +Example: When building a `big-query` skill to handle queries like "How many users have logged in today?" the analysis shows: + +1. Querying BigQuery requires re-discovering the table schemas and relationships each time +2. A `references/schema.md` file documenting the table schemas would be helpful to store in the skill + +To establish the skill's contents, analyze each concrete example to create a list of the reusable resources to include: scripts, references, and assets. + +### Step 3: Initializing the Skill + +At this point, it is time to actually create the skill. + +Skip this step only if the skill being developed already exists, and iteration or packaging is needed. In this case, continue to the next step. + +When creating a new skill from scratch, always run the `init_skill.py` script. The script conveniently generates a new template skill directory that automatically includes everything a skill requires, making the skill creation process much more efficient and reliable. + +Usage: + +```bash +scripts/init_skill.py --path +``` + +The script: + +- Creates the skill directory at the specified path +- Generates a SKILL.md template with proper frontmatter and TODO placeholders +- Creates example resource directories: `scripts/`, `references/`, and `assets/` +- Adds example files in each directory that can be customized or deleted + +After initialization, customize or remove the generated SKILL.md and example files as needed. + +### Step 4: Edit the Skill + +When editing the (newly-generated or existing) skill, remember that the skill is being created for another instance of Claude to use. Include information that would be beneficial and non-obvious to Claude. Consider what procedural knowledge, domain-specific details, or reusable assets would help another Claude instance execute these tasks more effectively. + +#### Learn Proven Design Patterns + +Consult these helpful guides based on your skill's needs: + +- **Multi-step processes**: See references/workflows.md for sequential workflows and conditional logic +- **Specific output formats or quality standards**: See references/output-patterns.md for template and example patterns + +These files contain established best practices for effective skill design. + +#### Start with Reusable Skill Contents + +To begin implementation, start with the reusable resources identified above: `scripts/`, `references/`, and `assets/` files. Note that this step may require user input. For example, when implementing a `brand-guidelines` skill, the user may need to provide brand assets or templates to store in `assets/`, or documentation to store in `references/`. + +Added scripts must be tested by actually running them to ensure there are no bugs and that the output matches what is expected. If there are many similar scripts, only a representative sample needs to be tested to ensure confidence that they all work while balancing time to completion. + +Any example files and directories not needed for the skill should be deleted. The initialization script creates example files in `scripts/`, `references/`, and `assets/` to demonstrate structure, but most skills won't need all of them. + +#### Update SKILL.md + +**Writing Guidelines:** Always use imperative/infinitive form. + +##### Frontmatter + +Write the YAML frontmatter with `name` and `description`: + +- `name`: The skill name +- `description`: This is the primary triggering mechanism for your skill, and helps Claude understand when to use the skill. + - Include both what the Skill does and specific triggers/contexts for when to use it. + - Include all "when to use" information here - Not in the body. The body is only loaded after triggering, so "When to Use This Skill" sections in the body are not helpful to Claude. + - Example description for a `docx` skill: "Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. Use when Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks" + +Do not include any other fields in YAML frontmatter. + +##### Body + +Write instructions for using the skill and its bundled resources. + +### Step 5: Packaging a Skill + +Once development of the skill is complete, it must be packaged into a distributable .skill file that gets shared with the user. The packaging process automatically validates the skill first to ensure it meets all requirements: + +```bash +scripts/package_skill.py +``` + +Optional output directory specification: + +```bash +scripts/package_skill.py ./dist +``` + +The packaging script will: + +1. **Validate** the skill automatically, checking: + + - YAML frontmatter format and required fields + - Skill naming conventions and directory structure + - Description completeness and quality + - File organization and resource references + +2. **Package** the skill if validation passes, creating a .skill file named after the skill (e.g., `my-skill.skill`) that includes all files and maintains the proper directory structure for distribution. The .skill file is a zip file with a .skill extension. + +If validation fails, the script will report the errors and exit without creating a package. Fix any validation errors and run the packaging command again. + +### Step 6: Iterate + +After testing the skill, users may request improvements. Often this happens right after using the skill, with fresh context of how the skill performed. + +**Iteration workflow:** + +1. Use the skill on real tasks +2. Notice struggles or inefficiencies +3. Identify how SKILL.md or bundled resources should be updated +4. Implement changes and test again diff --git a/skill-creator/references/output-patterns.md b/skill-creator/references/output-patterns.md new file mode 100644 index 0000000..073ddda --- /dev/null +++ b/skill-creator/references/output-patterns.md @@ -0,0 +1,82 @@ +# Output Patterns + +Use these patterns when skills need to produce consistent, high-quality output. + +## Template Pattern + +Provide templates for output format. Match the level of strictness to your needs. + +**For strict requirements (like API responses or data formats):** + +```markdown +## Report structure + +ALWAYS use this exact template structure: + +# [Analysis Title] + +## Executive summary +[One-paragraph overview of key findings] + +## Key findings +- Finding 1 with supporting data +- Finding 2 with supporting data +- Finding 3 with supporting data + +## Recommendations +1. Specific actionable recommendation +2. Specific actionable recommendation +``` + +**For flexible guidance (when adaptation is useful):** + +```markdown +## Report structure + +Here is a sensible default format, but use your best judgment: + +# [Analysis Title] + +## Executive summary +[Overview] + +## Key findings +[Adapt sections based on what you discover] + +## Recommendations +[Tailor to the specific context] + +Adjust sections as needed for the specific analysis type. +``` + +## Examples Pattern + +For skills where output quality depends on seeing examples, provide input/output pairs: + +```markdown +## Commit message format + +Generate commit messages following these examples: + +**Example 1:** +Input: Added user authentication with JWT tokens +Output: +``` +feat(auth): implement JWT-based authentication + +Add login endpoint and token validation middleware +``` + +**Example 2:** +Input: Fixed bug where dates displayed incorrectly in reports +Output: +``` +fix(reports): correct date formatting in timezone conversion + +Use UTC timestamps consistently across report generation +``` + +Follow this style: type(scope): brief description, then detailed explanation. +``` + +Examples help Claude understand the desired style and level of detail more clearly than descriptions alone. diff --git a/skill-creator/references/workflows.md b/skill-creator/references/workflows.md new file mode 100644 index 0000000..a350c3c --- /dev/null +++ b/skill-creator/references/workflows.md @@ -0,0 +1,28 @@ +# Workflow Patterns + +## Sequential Workflows + +For complex tasks, break operations into clear, sequential steps. It is often helpful to give Claude an overview of the process towards the beginning of SKILL.md: + +```markdown +Filling a PDF form involves these steps: + +1. Analyze the form (run analyze_form.py) +2. Create field mapping (edit fields.json) +3. Validate mapping (run validate_fields.py) +4. Fill the form (run fill_form.py) +5. Verify output (run verify_output.py) +``` + +## Conditional Workflows + +For tasks with branching logic, guide Claude through decision points: + +```markdown +1. Determine the modification type: + **Creating new content?** → Follow "Creation workflow" below + **Editing existing content?** → Follow "Editing workflow" below + +2. Creation workflow: [steps] +3. Editing workflow: [steps] +``` \ No newline at end of file diff --git a/skill-creator/scripts/init_skill.py b/skill-creator/scripts/init_skill.py new file mode 100644 index 0000000..329ad4e --- /dev/null +++ b/skill-creator/scripts/init_skill.py @@ -0,0 +1,303 @@ +#!/usr/bin/env python3 +""" +Skill Initializer - Creates a new skill from template + +Usage: + init_skill.py --path + +Examples: + init_skill.py my-new-skill --path skills/public + init_skill.py my-api-helper --path skills/private + init_skill.py custom-skill --path /custom/location +""" + +import sys +from pathlib import Path + + +SKILL_TEMPLATE = """--- +name: {skill_name} +description: [TODO: Complete and informative explanation of what the skill does and when to use it. Include WHEN to use this skill - specific scenarios, file types, or tasks that trigger it.] +--- + +# {skill_title} + +## Overview + +[TODO: 1-2 sentences explaining what this skill enables] + +## Structuring This Skill + +[TODO: Choose the structure that best fits this skill's purpose. Common patterns: + +**1. Workflow-Based** (best for sequential processes) +- Works well when there are clear step-by-step procedures +- Example: DOCX skill with "Workflow Decision Tree" → "Reading" → "Creating" → "Editing" +- Structure: ## Overview → ## Workflow Decision Tree → ## Step 1 → ## Step 2... + +**2. Task-Based** (best for tool collections) +- Works well when the skill offers different operations/capabilities +- Example: PDF skill with "Quick Start" → "Merge PDFs" → "Split PDFs" → "Extract Text" +- Structure: ## Overview → ## Quick Start → ## Task Category 1 → ## Task Category 2... + +**3. Reference/Guidelines** (best for standards or specifications) +- Works well for brand guidelines, coding standards, or requirements +- Example: Brand styling with "Brand Guidelines" → "Colors" → "Typography" → "Features" +- Structure: ## Overview → ## Guidelines → ## Specifications → ## Usage... + +**4. Capabilities-Based** (best for integrated systems) +- Works well when the skill provides multiple interrelated features +- Example: Product Management with "Core Capabilities" → numbered capability list +- Structure: ## Overview → ## Core Capabilities → ### 1. Feature → ### 2. Feature... + +Patterns can be mixed and matched as needed. Most skills combine patterns (e.g., start with task-based, add workflow for complex operations). + +Delete this entire "Structuring This Skill" section when done - it's just guidance.] + +## [TODO: Replace with the first main section based on chosen structure] + +[TODO: Add content here. See examples in existing skills: +- Code samples for technical skills +- Decision trees for complex workflows +- Concrete examples with realistic user requests +- References to scripts/templates/references as needed] + +## Resources + +This skill includes example resource directories that demonstrate how to organize different types of bundled resources: + +### scripts/ +Executable code (Python/Bash/etc.) that can be run directly to perform specific operations. + +**Examples from other skills:** +- PDF skill: `fill_fillable_fields.py`, `extract_form_field_info.py` - utilities for PDF manipulation +- DOCX skill: `document.py`, `utilities.py` - Python modules for document processing + +**Appropriate for:** Python scripts, shell scripts, or any executable code that performs automation, data processing, or specific operations. + +**Note:** Scripts may be executed without loading into context, but can still be read by Claude for patching or environment adjustments. + +### references/ +Documentation and reference material intended to be loaded into context to inform Claude's process and thinking. + +**Examples from other skills:** +- Product management: `communication.md`, `context_building.md` - detailed workflow guides +- BigQuery: API reference documentation and query examples +- Finance: Schema documentation, company policies + +**Appropriate for:** In-depth documentation, API references, database schemas, comprehensive guides, or any detailed information that Claude should reference while working. + +### assets/ +Files not intended to be loaded into context, but rather used within the output Claude produces. + +**Examples from other skills:** +- Brand styling: PowerPoint template files (.pptx), logo files +- Frontend builder: HTML/React boilerplate project directories +- Typography: Font files (.ttf, .woff2) + +**Appropriate for:** Templates, boilerplate code, document templates, images, icons, fonts, or any files meant to be copied or used in the final output. + +--- + +**Any unneeded directories can be deleted.** Not every skill requires all three types of resources. +""" + +EXAMPLE_SCRIPT = '''#!/usr/bin/env python3 +""" +Example helper script for {skill_name} + +This is a placeholder script that can be executed directly. +Replace with actual implementation or delete if not needed. + +Example real scripts from other skills: +- pdf/scripts/fill_fillable_fields.py - Fills PDF form fields +- pdf/scripts/convert_pdf_to_images.py - Converts PDF pages to images +""" + +def main(): + print("This is an example script for {skill_name}") + # TODO: Add actual script logic here + # This could be data processing, file conversion, API calls, etc. + +if __name__ == "__main__": + main() +''' + +EXAMPLE_REFERENCE = """# Reference Documentation for {skill_title} + +This is a placeholder for detailed reference documentation. +Replace with actual reference content or delete if not needed. + +Example real reference docs from other skills: +- product-management/references/communication.md - Comprehensive guide for status updates +- product-management/references/context_building.md - Deep-dive on gathering context +- bigquery/references/ - API references and query examples + +## When Reference Docs Are Useful + +Reference docs are ideal for: +- Comprehensive API documentation +- Detailed workflow guides +- Complex multi-step processes +- Information too lengthy for main SKILL.md +- Content that's only needed for specific use cases + +## Structure Suggestions + +### API Reference Example +- Overview +- Authentication +- Endpoints with examples +- Error codes +- Rate limits + +### Workflow Guide Example +- Prerequisites +- Step-by-step instructions +- Common patterns +- Troubleshooting +- Best practices +""" + +EXAMPLE_ASSET = """# Example Asset File + +This placeholder represents where asset files would be stored. +Replace with actual asset files (templates, images, fonts, etc.) or delete if not needed. + +Asset files are NOT intended to be loaded into context, but rather used within +the output Claude produces. + +Example asset files from other skills: +- Brand guidelines: logo.png, slides_template.pptx +- Frontend builder: hello-world/ directory with HTML/React boilerplate +- Typography: custom-font.ttf, font-family.woff2 +- Data: sample_data.csv, test_dataset.json + +## Common Asset Types + +- Templates: .pptx, .docx, boilerplate directories +- Images: .png, .jpg, .svg, .gif +- Fonts: .ttf, .otf, .woff, .woff2 +- Boilerplate code: Project directories, starter files +- Icons: .ico, .svg +- Data files: .csv, .json, .xml, .yaml + +Note: This is a text placeholder. Actual assets can be any file type. +""" + + +def title_case_skill_name(skill_name): + """Convert hyphenated skill name to Title Case for display.""" + return ' '.join(word.capitalize() for word in skill_name.split('-')) + + +def init_skill(skill_name, path): + """ + Initialize a new skill directory with template SKILL.md. + + Args: + skill_name: Name of the skill + path: Path where the skill directory should be created + + Returns: + Path to created skill directory, or None if error + """ + # Determine skill directory path + skill_dir = Path(path).resolve() / skill_name + + # Check if directory already exists + if skill_dir.exists(): + print(f"❌ Error: Skill directory already exists: {skill_dir}") + return None + + # Create skill directory + try: + skill_dir.mkdir(parents=True, exist_ok=False) + print(f"✅ Created skill directory: {skill_dir}") + except Exception as e: + print(f"❌ Error creating directory: {e}") + return None + + # Create SKILL.md from template + skill_title = title_case_skill_name(skill_name) + skill_content = SKILL_TEMPLATE.format( + skill_name=skill_name, + skill_title=skill_title + ) + + skill_md_path = skill_dir / 'SKILL.md' + try: + skill_md_path.write_text(skill_content) + print("✅ Created SKILL.md") + except Exception as e: + print(f"❌ Error creating SKILL.md: {e}") + return None + + # Create resource directories with example files + try: + # Create scripts/ directory with example script + scripts_dir = skill_dir / 'scripts' + scripts_dir.mkdir(exist_ok=True) + example_script = scripts_dir / 'example.py' + example_script.write_text(EXAMPLE_SCRIPT.format(skill_name=skill_name)) + example_script.chmod(0o755) + print("✅ Created scripts/example.py") + + # Create references/ directory with example reference doc + references_dir = skill_dir / 'references' + references_dir.mkdir(exist_ok=True) + example_reference = references_dir / 'api_reference.md' + example_reference.write_text(EXAMPLE_REFERENCE.format(skill_title=skill_title)) + print("✅ Created references/api_reference.md") + + # Create assets/ directory with example asset placeholder + assets_dir = skill_dir / 'assets' + assets_dir.mkdir(exist_ok=True) + example_asset = assets_dir / 'example_asset.txt' + example_asset.write_text(EXAMPLE_ASSET) + print("✅ Created assets/example_asset.txt") + except Exception as e: + print(f"❌ Error creating resource directories: {e}") + return None + + # Print next steps + print(f"\n✅ Skill '{skill_name}' initialized successfully at {skill_dir}") + print("\nNext steps:") + print("1. Edit SKILL.md to complete the TODO items and update the description") + print("2. Customize or delete the example files in scripts/, references/, and assets/") + print("3. Run the validator when ready to check the skill structure") + + return skill_dir + + +def main(): + if len(sys.argv) < 4 or sys.argv[2] != '--path': + print("Usage: init_skill.py --path ") + print("\nSkill name requirements:") + print(" - Hyphen-case identifier (e.g., 'data-analyzer')") + print(" - Lowercase letters, digits, and hyphens only") + print(" - Max 40 characters") + print(" - Must match directory name exactly") + print("\nExamples:") + print(" init_skill.py my-new-skill --path skills/public") + print(" init_skill.py my-api-helper --path skills/private") + print(" init_skill.py custom-skill --path /custom/location") + sys.exit(1) + + skill_name = sys.argv[1] + path = sys.argv[3] + + print(f"🚀 Initializing skill: {skill_name}") + print(f" Location: {path}") + print() + + result = init_skill(skill_name, path) + + if result: + sys.exit(0) + else: + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/skill-creator/scripts/package_skill.py b/skill-creator/scripts/package_skill.py new file mode 100644 index 0000000..5cd36cb --- /dev/null +++ b/skill-creator/scripts/package_skill.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +""" +Skill Packager - Creates a distributable .skill file of a skill folder + +Usage: + python utils/package_skill.py [output-directory] + +Example: + python utils/package_skill.py skills/public/my-skill + python utils/package_skill.py skills/public/my-skill ./dist +""" + +import sys +import zipfile +from pathlib import Path +from quick_validate import validate_skill + + +def package_skill(skill_path, output_dir=None): + """ + Package a skill folder into a .skill file. + + Args: + skill_path: Path to the skill folder + output_dir: Optional output directory for the .skill file (defaults to current directory) + + Returns: + Path to the created .skill file, or None if error + """ + skill_path = Path(skill_path).resolve() + + # Validate skill folder exists + if not skill_path.exists(): + print(f"❌ Error: Skill folder not found: {skill_path}") + return None + + if not skill_path.is_dir(): + print(f"❌ Error: Path is not a directory: {skill_path}") + return None + + # Validate SKILL.md exists + skill_md = skill_path / "SKILL.md" + if not skill_md.exists(): + print(f"❌ Error: SKILL.md not found in {skill_path}") + return None + + # Run validation before packaging + print("🔍 Validating skill...") + valid, message = validate_skill(skill_path) + if not valid: + print(f"❌ Validation failed: {message}") + print(" Please fix the validation errors before packaging.") + return None + print(f"✅ {message}\n") + + # Determine output location + skill_name = skill_path.name + if output_dir: + output_path = Path(output_dir).resolve() + output_path.mkdir(parents=True, exist_ok=True) + else: + output_path = Path.cwd() + + skill_filename = output_path / f"{skill_name}.skill" + + # Create the .skill file (zip format) + try: + with zipfile.ZipFile(skill_filename, 'w', zipfile.ZIP_DEFLATED) as zipf: + # Walk through the skill directory + for file_path in skill_path.rglob('*'): + if file_path.is_file(): + # Calculate the relative path within the zip + arcname = file_path.relative_to(skill_path.parent) + zipf.write(file_path, arcname) + print(f" Added: {arcname}") + + print(f"\n✅ Successfully packaged skill to: {skill_filename}") + return skill_filename + + except Exception as e: + print(f"❌ Error creating .skill file: {e}") + return None + + +def main(): + if len(sys.argv) < 2: + print("Usage: python utils/package_skill.py [output-directory]") + print("\nExample:") + print(" python utils/package_skill.py skills/public/my-skill") + print(" python utils/package_skill.py skills/public/my-skill ./dist") + sys.exit(1) + + skill_path = sys.argv[1] + output_dir = sys.argv[2] if len(sys.argv) > 2 else None + + print(f"📦 Packaging skill: {skill_path}") + if output_dir: + print(f" Output directory: {output_dir}") + print() + + result = package_skill(skill_path, output_dir) + + if result: + sys.exit(0) + else: + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/skill-creator/scripts/quick_validate.py b/skill-creator/scripts/quick_validate.py new file mode 100644 index 0000000..d9fbeb7 --- /dev/null +++ b/skill-creator/scripts/quick_validate.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +""" +Quick validation script for skills - minimal version +""" + +import sys +import os +import re +import yaml +from pathlib import Path + +def validate_skill(skill_path): + """Basic validation of a skill""" + skill_path = Path(skill_path) + + # Check SKILL.md exists + skill_md = skill_path / 'SKILL.md' + if not skill_md.exists(): + return False, "SKILL.md not found" + + # Read and validate frontmatter + content = skill_md.read_text() + if not content.startswith('---'): + return False, "No YAML frontmatter found" + + # Extract frontmatter + match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL) + if not match: + return False, "Invalid frontmatter format" + + frontmatter_text = match.group(1) + + # Parse YAML frontmatter + try: + frontmatter = yaml.safe_load(frontmatter_text) + if not isinstance(frontmatter, dict): + return False, "Frontmatter must be a YAML dictionary" + except yaml.YAMLError as e: + return False, f"Invalid YAML in frontmatter: {e}" + + # Define allowed properties + ALLOWED_PROPERTIES = {'name', 'description', 'license', 'allowed-tools', 'metadata'} + + # Check for unexpected properties (excluding nested keys under metadata) + unexpected_keys = set(frontmatter.keys()) - ALLOWED_PROPERTIES + if unexpected_keys: + return False, ( + f"Unexpected key(s) in SKILL.md frontmatter: {', '.join(sorted(unexpected_keys))}. " + f"Allowed properties are: {', '.join(sorted(ALLOWED_PROPERTIES))}" + ) + + # Check required fields + if 'name' not in frontmatter: + return False, "Missing 'name' in frontmatter" + if 'description' not in frontmatter: + return False, "Missing 'description' in frontmatter" + + # Extract name for validation + name = frontmatter.get('name', '') + if not isinstance(name, str): + return False, f"Name must be a string, got {type(name).__name__}" + name = name.strip() + if name: + # Check naming convention (hyphen-case: lowercase with hyphens) + if not re.match(r'^[a-z0-9-]+$', name): + return False, f"Name '{name}' should be hyphen-case (lowercase letters, digits, and hyphens only)" + if name.startswith('-') or name.endswith('-') or '--' in name: + return False, f"Name '{name}' cannot start/end with hyphen or contain consecutive hyphens" + # Check name length (max 64 characters per spec) + if len(name) > 64: + return False, f"Name is too long ({len(name)} characters). Maximum is 64 characters." + + # Extract and validate description + description = frontmatter.get('description', '') + if not isinstance(description, str): + return False, f"Description must be a string, got {type(description).__name__}" + description = description.strip() + if description: + # Check for angle brackets + if '<' in description or '>' in description: + return False, "Description cannot contain angle brackets (< or >)" + # Check description length (max 1024 characters per spec) + if len(description) > 1024: + return False, f"Description is too long ({len(description)} characters). Maximum is 1024 characters." + + return True, "Skill is valid!" + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Usage: python quick_validate.py ") + sys.exit(1) + + valid, message = validate_skill(sys.argv[1]) + print(message) + sys.exit(0 if valid else 1) \ No newline at end of file diff --git a/skills-ko/check/SKILL.md b/skills-ko/check/SKILL.md deleted file mode 100644 index 7172338..0000000 --- a/skills-ko/check/SKILL.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -name: check -description: KISA 가이드라인 기반 배포 전 보안 컴플라이언스 체크리스트를 실행합니다. CII 컴플라이언스(계정/접근제어/암호화/로깅/하드닝 70항목)와 AI 보안 체크리스트를 지원합니다. "배포 전 점검", "컴플라이언스 체크", "배포 준비", "보안 체크리스트", "AI 보안 체크" 시 반드시 이 스킬을 사용하세요. ---- - -# KESE 배포 전 보안 컴플라이언스 체크리스트 - -배포 전 보안 점검을 수행합니다. 사용자의 환경에 맞는 가이드라인을 자동 선택합니다. - -## 가이드라인 선택 - -| # | 가이드라인 | 설명 | -|---|----------|------| -| 1 | **CII 컴플라이언스** | 주요정보통신기반시설 배포 전 70항목 체크 | -| 2 | **AI 보안 체크리스트** | AI 개발자/서비스제공자 보안 검증항목 체크 | -| 3 | **로봇 보안 체크리스트** | 로봇 시스템 11개 카테고리 103항목 체크 | - -서버, 인프라, 웹 서비스 → **CII** / AI 모델, LLM, AI 서비스 → **AI 보안** - ---- - -## CII 분기 시 - -대상 환경을 탐지한 후, 해당하는 reference 파일을 `references/cii/`에서 로드하여 체크리스트를 실행합니다. reference 파일 목록은 start 스킬과 동일합니다. - -### 심각도 수준 -- **긴급**: 배포 차단. 운영 전 반드시 수정 -- **높음**: 수정 필요. 문서화된 위험 수용 시 배포 가능 -- **중간**: 개선 권고. 단기간 내 수정 계획 수립 -- **낮음**: 권장 사항. 배포 차단하지 않음 - -### 체크 카테고리 - -1. **계정 보안** (15항목) — root/Admin 원격접속, 패스워드 정책, 계정 잠금 -2. **접근 제어** (15항목) — 파일 권한, 방화벽, 포트, 네트워크 분리 -3. **암호화 및 데이터 보호** (12항목) — HTTPS, TLS, 패스워드 해시, 하드코딩 금지 -4. **로깅 및 모니터링** (10항목) — 시스템 로깅, 인증 로그, 디버그 모드 -5. **서비스 하드닝** (12항목) — 불필요 서비스, 보안 헤더, CSRF, SQLi 방지 -6. **패치 및 업데이트** (6항목) — OS 패치, 프레임워크 업데이트, CVE 점검 - -### 배포 준비 보고서 - -``` -============================================================ - KESE CII 배포 준비 보고서 -============================================================ -프로젝트: [프로젝트명] -일시: [날짜] - -요약: 전체 [N]항목 / 통과 [N] / 실패 [N] / 건너뜀 [N] -배포 결정: [승인 / 차단 / 조건부] -============================================================ -``` - ---- - -## AI 보안 분기 시 - -`references/ai-security/` 디렉터리에서 대상에 해당하는 reference를 로드합니다. - -### AI 개발자 체크리스트 -`references/ai-security/developer.md`를 로드하여 6단계 생명주기별 54개 검증항목을 점검합니다. - -### AI 서비스 제공자 체크리스트 -`references/ai-security/service-provider.md`를 로드하여 서비스 운영 관점의 보안 요구사항을 점검합니다. - -### AI 이용자 체크리스트 -`references/ai-security/user-guide.md`를 로드하여 7개 보안 수칙 이행 여부를 점검합니다. - ---- - -## 중요 규칙 -- 긴급 심각도 항목은 절대 건너뛰지 마세요 -- 수정을 위한 구체적인 파일 경로와 명령어를 제공하세요 -- 통과율이 60% 미만이면 배포를 강력히 권고하지 않습니다 diff --git a/skills-ko/fix/SKILL.md b/skills-ko/fix/SKILL.md deleted file mode 100644 index 6797bff..0000000 --- a/skills-ko/fix/SKILL.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -name: fix -description: 보안 취약점 자동 수정 및 하드닝 스크립트를 생성합니다. CII 시스템(Unix/Windows/웹서버/DB)과 AI 시스템의 취약점을 수정합니다. KISA 가이드라인에 따른 보안 설정을 적용합니다. "취약점 수정", "시스템 보안", "서버 하드닝", "보안 수정", "AI 보안 조치", "KISA 하드닝" 시 반드시 이 스킬을 사용하세요. ---- - -# KESE 취약점 자동 수정 - -취약점 분석 결과를 기반으로 적절한 수정을 생성하고 적용합니다. 사용자의 환경에 맞는 가이드라인을 자동 선택합니다. - -## 가이드라인 선택 - -| # | 가이드라인 | 설명 | -|---|----------|------| -| 1 | **CII 하드닝** | 플랫폼별 하드닝 스크립트 생성 | -| 2 | **AI 보안 조치** | AI 시스템 보안 강화 가이드 | -| 3 | **로봇 보안 조치** | 로봇 시스템 보안 강화 (IEC 62443, CRA, RED) | - -서버, 인프라, 웹 서비스, DB → **CII** / AI 모델, LLM, AI 서비스 → **AI 보안** - ---- - -## CII 분기 시 - -### 실행 흐름 -1. `reports/kese/`에서 이전 평가 결과 읽기 (있는 경우) -2. 이전 평가가 없으면 사용자에게 대상 플랫폼 확인 -3. 해당 reference 파일을 `references/cii/`에서 로드 -4. 플랫폼별 하드닝 스크립트 생성 -5. 스크립트를 `scripts/kese-hardening/`에 저장 - -### 출력 구조 - -``` -scripts/kese-hardening/ -├── unix/ ← bash 스크립트 -├── windows/ ← PowerShell 스크립트 -├── web/ ← Apache/Nginx 설정 -├── database/ ← SQL 스크립트 -└── README.md -``` - -### 플랫폼별 reference 매핑 - -| 플랫폼 | reference | 스크립트 유형 | -|--------|-----------|-------------| -| Unix/Linux | `references/cii/unix.md` | bash | -| Windows | `references/cii/windows.md` | PowerShell | -| 웹 서비스 | `references/cii/web-service.md` | conf 파일 | -| DBMS | `references/cii/database.md` | SQL | -| 네트워크 장비 | `references/cii/network.md` | CLI 명령어 | -| 보안 장비 | `references/cii/security-equip.md` | 설정 가이드 | -| PC | `references/cii/pc.md` | PowerShell/GPO | -| 클라우드 | `references/cii/cloud.md` | CLI 명령어 | - -### 수정 적용 시 주의사항 -- 수정 전 항상 설정 백업 -- 비운영 환경에서 먼저 테스트 -- 일부 수정은 서비스 재시작 필요 -- 컴플라이언스 감사를 위해 모든 변경사항 문서화 - ---- - -## AI 보안 분기 시 - -### 실행 흐름 -1. `references/ai-security/overview.md`를 읽어 AI 보안 위협 유형 파악 -2. 대상에 따라 적절한 reference 로드 -3. 보안 강화 가이드 및 코드 패치 생성 - -### 대상별 조치 - -| 대상 | reference | 조치 내용 | -|------|-----------|----------| -| AI 개발자 | `references/ai-security/developer.md` | 모델 보안, 데이터 보호, API 보안 코드 | -| 서비스 제공자 | `references/ai-security/service-provider.md` | 서비스 보안 설정, 접근통제 | -| AI 이용자 | `references/ai-security/user-guide.md` | 보안 수칙 적용 체크리스트 | - -### AI 보안 주요 조치 항목 -- Prompt Injection 방어 (입출력 필터링, 가드레일) -- 데이터 중독(Poisoning) 방어 (이상치 탐지, 데이터 검증) -- 모델 추출 방어 (쿼리 제한, 워터마킹) -- API 보안 (Rate Limiting, 인증, TLS) -- LLM 보안 (OWASP Top 10 for LLM 기반) - ---- - -## 참고사항 -- 발견된 각 취약점에 대해 구체적인 수정 명령어/코드를 제시하세요 -- 긴급 심각도 항목을 우선적으로 수정하세요 -- 수정 후 재점검을 권고하세요 diff --git a/skills-ko/guide/SKILL.md b/skills-ko/guide/SKILL.md deleted file mode 100644 index 8daeef2..0000000 --- a/skills-ko/guide/SKILL.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -name: guide -description: AI 도구(Claude, ChatGPT, Cursor, Copilot)용 시큐어 코딩 프롬프트와 가이드를 생성합니다. KISA CII 가이드라인, CWE 매핑, AI 보안 안내서를 따르는 보안 코드 작성을 위한 프롬프트를 생성합니다. "보안 가이드 생성", "AI 보안 프롬프트", "시큐어코딩 가이드", "AI에게 안전한 코드 요청", "AI 보안 가이드" 시 반드시 이 스킬을 사용하세요. ---- - -# KESE 시큐어 코딩 프롬프트 생성기 - -KISA 가이드라인과 국제 표준(OWASP, CWE)을 기반으로 AI 도구용 시큐어 코딩 프롬프트를 생성합니다. - -## 가이드라인 선택 - -| # | 가이드라인 | 설명 | -|---|----------|------| -| 1 | **CII 시큐어코딩** | 전통적 보안 취약점 (SQL Injection, XSS 등) | -| 2 | **AI 보안 시큐어코딩** | AI 특화 보안 (Prompt Injection, 데이터 중독 등) | -| 3 | **로봇 보안 시큐어코딩** | 로봇 특화 보안 (IEC 62443, 펌웨어, 통신 프로토콜) | - -웹/서버/DB 개발 → **CII** / AI 모델/LLM/AI 서비스 개발 → **AI 보안** - ---- - -## CII 분기 시 - -`references/cii/webapp.md`를 참조하여 CWE 기반 시큐어 코딩 프롬프트를 생성합니다. - -### 실행 흐름 -1. 사용자에게 대상 컨텍스트 확인 (언어, 프레임워크, 기능 유형) -2. 커스터마이징된 시큐어 코딩 프롬프트 생성 -3. 관련 CWE 패턴 및 KISA 가이드라인 포함 -4. 복사-붙여넣기 형식으로 프롬프트 제공 - -### 주요 CWE 패턴 - -| CWE | 이름 | 방지 방법 | -|-----|------|----------| -| CWE-20 | 부적절한 입력 검증 | 모든 입력 검증 | -| CWE-22 | 경로 조작 | 경로 정규화 및 검증 | -| CWE-78 | OS Command Injection | shell 피하기, 인자 리스트 | -| CWE-79 | XSS | 출력 인코딩, CSP | -| CWE-89 | SQL Injection | 매개변수화된 쿼리 | -| CWE-94 | Code Injection | eval(), exec() 피하기 | -| CWE-287 | 부적절한 인증 | 검증된 프레임워크 사용 | -| CWE-327 | 약한 암호화 | AES-256, RSA-2048+ | -| CWE-352 | CSRF | CSRF 토큰 | -| CWE-434 | 무제한 업로드 | 타입, 크기, 이름 검증 | -| CWE-502 | 안전하지 않은 역직렬화 | JSON 사용 | -| CWE-611 | XXE | 외부 엔티티 비활성화 | -| CWE-798 | 하드코딩된 자격 증명 | 환경 변수 사용 | -| CWE-918 | SSRF | URL 검증, 사설 IP 차단 | - -### 언어별 프롬프트 생성 -사용자가 지정한 언어에 맞게 시큐어 코딩 프롬프트를 생성합니다: -- **Python**: SQL Injection, Command Injection, 경로 조작, 역직렬화, 패스워드 해싱 -- **JavaScript/Node.js**: XSS, SQL Injection, Command Injection, 안전한 난수 -- **Java**: SQL Injection, XXE, 경로 조작, 역직렬화 -- **Go, Rust, C#** 등 요청 시 해당 언어에 맞게 생성 - -### 기능별 프롬프트 생성 -- 인증 구현, 파일 업로드, API 보안, 세션 관리 등 - ---- - -## AI 보안 분기 시 - -`references/ai-security/developer.md`와 `references/ai-security/overview.md`를 참조하여 AI 특화 시큐어 코딩 프롬프트를 생성합니다. - -### AI 보안 위협별 방어 프롬프트 - -| 위협 | 방어 방법 | -|------|----------| -| Prompt Injection | 입출력 필터링, 시스템/사용자 프롬프트 분리, 가드레일 | -| 데이터 중독 | 이상치 탐지, 데이터 무결성 검증, 적대적 훈련 | -| 모델 추출 | 쿼리 제한, 출력 제한, 워터마킹, 차등 프라이버시 | -| 민감 정보 노출 | 출력 필터링, PII 마스킹, 학습 데이터 정제 | -| 적대적 예제 | 적대적 훈련, 입력 전처리, 앙상블 방어 | -| LLM 탈옥 | 콘텐츠 필터링, 안전 가드레일, 출력 모니터링 | - -### AI 보안 시큐어 코딩 영역 -1. **데이터 파이프라인 보안** — 수집, 전처리, 저장 암호화 -2. **모델 학습 보안** — 환경 격리, 데이터 검증, 연합학습 보안 -3. **모델 배포 보안** — API 인증, Rate Limiting, TLS -4. **LLM 운영 보안** — Prompt Guard, 출력 검증, RAG 보안 -5. **모델 파기 보안** — 안전한 삭제, API 비활성화 - ---- - -## 사용법 - -관련 프롬프트를 복사하여 AI 어시스턴트 대화에 붙여넣은 후 코드 작성을 요청하세요. - -``` -[여기에 시큐어 코딩 요구사항 붙여넣기] - -이제 Python/FastAPI로 사용자 등록 엔드포인트를 구현해주세요. -``` diff --git a/skills-ko/kesekit-check-ko/SKILL.md b/skills-ko/kesekit-check-ko/SKILL.md new file mode 100644 index 0000000..cad9e31 --- /dev/null +++ b/skills-ko/kesekit-check-ko/SKILL.md @@ -0,0 +1,113 @@ +--- +name: kesekit-check-ko +description: KISA 가이드라인 기반 배포 전 보안 컴플라이언스 체크리스트를 실행합니다. CII 컴플라이언스(70항목), AI 보안 체크리스트, 로봇 보안 체크리스트, 우주 보안 체크리스트(12분야 53항목)를 지원합니다. "배포 전 점검", "컴플라이언스 체크", "보안 체크리스트", "우주 보안 점검", "위성 보안 체크" 시 사용하세요. +--- + +# KESE 배포 전 보안 컴플라이언스 체크리스트 + +배포 전 보안 점검을 수행합니다. 사용자의 환경에 맞는 가이드라인을 자동 선택합니다. + +## 가이드라인 선택 + +| # | 가이드라인 | 설명 | +|---|----------|------| +| 1 | **CII 컴플라이언스** | 주요정보통신기반시설 배포 전 70항목 체크 | +| 2 | **AI 보안 체크리스트** | AI 개발자/서비스제공자 보안 검증항목 체크 | +| 3 | **로봇 보안 체크리스트** | 로봇 시스템 11개 카테고리 103항목 체크 | +| 4 | **우주 보안 체크리스트** | 위성/GSaaS/공급망 12분야 53항목 체크 | +| 5 | **시큐어코딩 체크리스트** | JavaScript/Python 코드 리뷰 (7개 카테고리, 46 CWE) | +| 6 | **제로트러스트 체크리스트** | 제로트러스트 성숙도 평가 (8개 핵심요소, 4단계 성숙도, ~396항목) | + +서버, 인프라, 웹 서비스 → **CII** / AI 모델, LLM, AI 서비스 → **AI 보안** / 로봇, ROS/ROS2, 의료용 로봇, AMR/AGV → **로봇 보안** / 위성, 지상국, GSaaS, 우주 공급망 → **우주 보안** / JavaScript, Python, 웹 앱 코드 → **시큐어코딩** +Zero Trust, ZTA, ZTNA, 제로트러스트, 마이크로세그멘테이션, microsegmentation, SDP, SASE, PEP/PDP, never trust always verify → **제로트러스트** + +--- + +## CII 분기 시 + +대상 환경을 탐지한 후, 해당하는 템플릿 파일을 `templates/cii/`에서 로드하여 체크리스트를 실행합니다. 점검/수정 스크립트는 `scripts/cii/`에 있습니다. 템플릿 파일 목록은 start 스킬과 동일합니다. + +### 심각도 수준 +- **긴급**: 배포 차단. 운영 전 반드시 수정 +- **높음**: 수정 필요. 문서화된 위험 수용 시 배포 가능 +- **중간**: 개선 권고. 단기간 내 수정 계획 수립 +- **낮음**: 권장 사항. 배포 차단하지 않음 + +### 체크 카테고리 + +1. **계정 보안** (15항목) — root/Admin 원격접속, 패스워드 정책, 계정 잠금 +2. **접근 제어** (15항목) — 파일 권한, 방화벽, 포트, 네트워크 분리 +3. **암호화 및 데이터 보호** (12항목) — HTTPS, TLS, 패스워드 해시, 하드코딩 금지 +4. **로깅 및 모니터링** (10항목) — 시스템 로깅, 인증 로그, 디버그 모드 +5. **서비스 하드닝** (12항목) — 불필요 서비스, 보안 헤더, CSRF, SQLi 방지 +6. **패치 및 업데이트** (6항목) — OS 패치, 프레임워크 업데이트, CVE 점검 + +### 배포 준비 보고서 + +``` +============================================================ + KESE CII 배포 준비 보고서 +============================================================ +프로젝트: [프로젝트명] +일시: [날짜] + +요약: 전체 [N]항목 / 통과 [N] / 실패 [N] / 건너뜀 [N] +배포 결정: [승인 / 차단 / 조건부] +============================================================ +``` + +--- + +## AI 보안 분기 시 + +`references/ai-security/` 및 `templates/ai-security/` 디렉터리에서 대상에 해당하는 파일을 로드합니다. + +### AI 개발자 체크리스트 +`templates/ai-security/developer.md`를 로드하여 6단계 생명주기별 54개 검증항목을 점검합니다. + +### AI 서비스 제공자 체크리스트 +`references/ai-security/service-provider.md`를 로드하여 서비스 운영 관점의 보안 요구사항을 점검합니다. + +### AI 이용자 체크리스트 +`references/ai-security/user-guide.md`를 로드하여 7개 보안 수칙 이행 여부를 점검합니다. + +--- + +## 로봇 보안 분기 시 + +`templates/robot-security/` 디렉터리에서 관련 템플릿을 로드합니다. 먼저 `overview.md`를 읽고, 로봇 유형과 통신 인터페이스, 적용 표준에 따라 `ssdf.md`, `supply-chain.md`, `iec62443.md`, `cyber-resilience.md`, `wireless.md` 중 필요한 파일을 선택합니다. + +--- + +## 시큐어코딩 분기 시 + +`references/secure-coding/overview.md`에서 카테고리/CWE 매핑을 로드한 후, `templates/secure-coding/javascript.md` 또는 `templates/secure-coding/python.md`로 언어별 체크리스트를 실행합니다. 기타 언어는 `references/secure-coding/pseudocode.md`를 사용합니다. + +우선순위: 긴급 (8항목) → 높음 (13항목) → 보통 (25항목). 긴급 CWE가 발견되면 배포를 차단합니다. + +--- + +## 제로트러스트 분기 시 + +`references/zero-trust/`에서 아키텍처 참조와 성숙도 모델을, `templates/zero-trust/`에서 핵심요소별 체크리스트를 로드합니다. `templates/zero-trust/overview.md`부터 시작하여 시스템 맥락에 맞는 핵심요소를 선택합니다. OT/ICS 환경이 감지되면 `templates/zero-trust/ot-environment.md`도 로드합니다. + +| 주제 | reference 파일 | +|------|---------------| +| 개요 | `templates/zero-trust/overview.md` | +| 식별자 및 디바이스 | `templates/zero-trust/identity-device.md` | +| 네트워크 및 시스템 | `templates/zero-trust/network-system.md` | +| 애플리케이션 및 데이터 | `templates/zero-trust/app-data.md` | +| 가시성 및 자동화 | `templates/zero-trust/visibility-automation.md` | +| OT/ICS 환경 | `templates/zero-trust/ot-environment.md` | +| ZT 아키텍처 참조 | `references/zero-trust/overview.md` | +| 성숙도 모델 상세 | `references/zero-trust/maturity-model.md` | +| OT 배포 가이드 | `references/zero-trust/ot-guide.md` | + +8개 핵심요소, ~396개 항목, 4단계 성숙도. 표준: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-207, CISA ZT Maturity Model. + +--- + +## 중요 규칙 +- 긴급 심각도 항목은 절대 건너뛰지 마세요 +- 수정을 위한 구체적인 파일 경로와 명령어를 제공하세요 +- 통과율이 60% 미만이면 배포를 강력히 권고하지 않습니다 diff --git a/skills-ko/check/references/ai-security/overview.md b/skills-ko/kesekit-check-ko/references/ai-security/overview.md similarity index 100% rename from skills-ko/check/references/ai-security/overview.md rename to skills-ko/kesekit-check-ko/references/ai-security/overview.md diff --git a/skills-ko/check/references/ai-security/service-provider.md b/skills-ko/kesekit-check-ko/references/ai-security/service-provider.md similarity index 100% rename from skills-ko/check/references/ai-security/service-provider.md rename to skills-ko/kesekit-check-ko/references/ai-security/service-provider.md diff --git a/skills-ko/start/references/ai-security/user-guide.md b/skills-ko/kesekit-check-ko/references/ai-security/user-guide.md similarity index 82% rename from skills-ko/start/references/ai-security/user-guide.md rename to skills-ko/kesekit-check-ko/references/ai-security/user-guide.md index 1c3f1e3..808f78d 100644 --- a/skills-ko/start/references/ai-security/user-guide.md +++ b/skills-ko/kesekit-check-ko/references/ai-security/user-guide.md @@ -56,15 +56,3 @@ - 정기적으로 음성 기록 검토 및 삭제 --- - -## 3. 체크리스트 요약 - -| # | 항목 | 확인 | -|---|------|:----:| -| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | -| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | -| 3 | AI 서비스 이용약관을 확인했는가? | □ | -| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | -| 5 | AI 출력 결과를 검증하고 있는가? | □ | -| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | -| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills-ko/kesekit-check-ko/references/secure-coding/overview.md b/skills-ko/kesekit-check-ko/references/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/skills-ko/kesekit-check-ko/references/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/skills-ko/kesekit-check-ko/references/secure-coding/pseudocode.md b/skills-ko/kesekit-check-ko/references/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/skills-ko/kesekit-check-ko/references/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/skills-ko/kesekit-check-ko/references/space-security/overview.md b/skills-ko/kesekit-check-ko/references/space-security/overview.md new file mode 100644 index 0000000..f31ab87 --- /dev/null +++ b/skills-ko/kesekit-check-ko/references/space-security/overview.md @@ -0,0 +1,82 @@ +# Space Security Overview + +> Source: KISA "Space Security Model" Part1 (2024.12) + Part2 (2025.12) + Explanation Guide (2025.12) + +## 1. Overview + +| Item | Content | +|------|---------| +| Publisher | KISA (Korea Internet & Security Agency) / MSIT | +| Target | Space industry operators, satellite service providers, GSaaS providers, supply chain participants | +| Scope | Space segment, Ground segment, Satellite service segment, GSaaS, Supply chain | +| Standards | CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, NIST CSF, CCSDS | + +## 2. Space Architecture Layers + +| Layer | Components | +|-------|-----------| +| Space Segment | GEO/MEO/LEO satellites, LEO constellations, satellite bus, payload, OBC | +| Ground Segment | Satellite control, payload data processing, antenna, satellite modem, mission control | +| GSaaS | Antenna zone, ground station-cloud zone, reservation/scheduling, API/DB servers | +| Satellite Services | Navigation (GNSS), Communication (VSAT/LEO), Broadcasting | +| Supply Chain | Satellite/launch vehicle manufacturers, ground station operators, satellite operators | + +## 3. Satellite Service Types + +| Service | Description | Key Components | +|---------|-------------|----------------| +| Navigation (GNSS) | Position/navigation/timing via GNSS satellites | Smart ships, autonomous vehicles, UAM | +| Communication | Satellite-based data/voice communication | VSAT, LEO mobile, LEO internet | +| Broadcasting | Satellite TV/radio relay | Broadcasting centers, set-top boxes | +| GSaaS | Ground Station as a Service (cloud-based shared infrastructure) | Shared antennas, cloud scheduling, API | + +## 4. Security Objectives + +| Objective | Description | +|-----------|-------------| +| Confidentiality | Prevent unauthorized access to satellite data and communications | +| Integrity | Prevent unauthorized modification of commands, telemetry, and operational data | +| Availability | Ensure continuous satellite service operation | +| Authentication | Verify identity of users, processes, devices, and satellites | +| Non-repudiation | Ensure accountability for satellite operations | +| Resilience | Maintain operations during and after security incidents | + +## 5. Threat Categories (3 Major Types) + +| Type | Description | Attack Vectors | +|------|-------------|----------------| +| Data Corruption | Unauthorized data modification/deletion | MITM, spoofing, malware, insider threat | +| Service Disruption | Service interruption/degradation | Jamming, DDoS, physical destruction, SW vulnerabilities | +| Information Leakage | Sensitive data exfiltration | Eavesdropping, sniffing, session hijacking, data theft | + +## 6. Checklist Structure (12 Domains, 53 Items) + +| # | Code | Domain | Items | Reference File | +|---|------|--------|:-----:|----------------| +| 1 | AC | Access Control | 12 | `access-control.md` | +| 2 | IA | Identification & Authentication | 2 | `access-control.md` | +| 3 | SC | System & Communication Security | 7 | `system-security.md` | +| 4 | SI | System & Information Integrity | 4 | `system-security.md` | +| 5 | SO | System/Service Operations Management | 9 | `operations.md` | +| 6 | IR | Incident Response | 2 | `operations.md` | +| 7 | PS | Personnel Security | 2 | `governance.md` | +| 8 | PE | Physical & Environmental Security | 3 | `governance.md` | +| 9 | RA | Risk Assessment & Security Evaluation | 2 | `governance.md` | +| 10 | SG | Security Governance | 4 | `governance.md` | +| 11 | CP | Contingency Planning | 2 | `governance.md` | +| 12 | SM | Supply Chain Management | 4 | `supply-chain.md` | + +## 7. Compliance Standards + +| Standard | Description | +|----------|-------------| +| CMMC | Cybersecurity Maturity Model Certification (US DoD, Level 1-3) | +| K-RMF | Korea Risk Management Framework | +| NIS2 | EU Network and Information Security Directive (includes space) | +| ISMS-P | Korea Information Security Management System | +| NIST IR 8401 | Satellite Ground Segment Cybersecurity | +| NIST IR 8270 | Commercial Satellite Operations Cybersecurity | +| NIST CSF | Cybersecurity Framework (Identify/Protect/Detect/Respond/Recover) | +| NIST SP 800-171 | CUI Protection (110 requirements) | +| CCSDS 352.0-B-2 | Space System Cryptographic Algorithm Recommendation | +| ENISA Space Threat Landscape | Space system threat analysis | diff --git a/skills-ko/kesekit-check-ko/references/space-security/supply-chain.md b/skills-ko/kesekit-check-ko/references/space-security/supply-chain.md new file mode 100644 index 0000000..2f66548 --- /dev/null +++ b/skills-ko/kesekit-check-ko/references/space-security/supply-chain.md @@ -0,0 +1,60 @@ +# Supply Chain Threat Scenarios + +> Domain: GSaaS/Supply Chain Threat Scenarios (with code-block illustrations) + +## Threat Scenarios (Supply Chain) + +### Scenario 1: Vulnerable Open-Source Causing Ground Station Failure +``` +Backdoor inserted into open-source community + -> Library used without verification + -> Backdoor enables system takeover + -> Ground station service disruption +``` + +### Scenario 2: Malicious Code in Payload Update File +``` +Developer PC compromised via phishing + -> Ransomware inserted into SW update + -> Update uploaded to satellite without verification + -> Payload malfunction +``` + +### Scenario 3: Tampered IDE Plugin Causing Satellite Malfunction +``` +Malicious code in IDE/CI-CD plugin + -> Firmware developed/loaded without verification + -> Component inspection skipped + -> Satellite bus malfunction +``` + +## GSaaS Threat Scenarios + +### Scenario 1: Satellite Control Hijacking via Weak Authentication +``` +Plaintext communication sniffing + -> IAM credential theft + -> Web shell upload + -> Ground station infiltration + -> Orbit control system takeover + -> Satellite hijacking +``` + +### Scenario 2: Data Tampering via Unauthorized Device Backdoor +``` +No media control + -> USB/single-board-computer backdoor + -> Internal network access + -> Satellite access credential collection + -> Data tampering malware injection +``` + +### Scenario 3: Physical Attack via Drone Disrupting Satellite Communication +``` +Plaintext communication sniffing + -> Antenna location identified + -> Drone with jamming device/explosives + -> Antenna-satellite communication disrupted +``` + +## Total: 4 Checklist Items + 6 Threat Scenarios diff --git a/skills-ko/kesekit-check-ko/references/zero-trust/maturity-model.md b/skills-ko/kesekit-check-ko/references/zero-trust/maturity-model.md new file mode 100644 index 0000000..2f3612d --- /dev/null +++ b/skills-ko/kesekit-check-ko/references/zero-trust/maturity-model.md @@ -0,0 +1,75 @@ +# Zero Trust Maturity Model + +> Reference: KISA 제로트러스트 가이드라인 2.0 (2024.12), CISA Zero Trust Maturity Model v2.0 +> Purpose: Detailed maturity level definitions and scoring guidance + +## Maturity Level Definitions + +### Traditional (전통적) +- Perimeter-based security model (castle-and-moat) +- Manual identity management and access control +- Static, rule-based security policies +- Limited visibility into internal traffic + +### Initial (기본) +- Beginning adoption of ZT principles +- Some automated identity management (SSO, basic MFA) +- Initial network segmentation beyond perimeter +- Centralized logging introduced + +### Advanced (고도화) +- Context-aware, dynamic access policies +- AI-assisted threat detection and response +- Comprehensive microsegmentation +- Real-time monitoring and analytics + +### Optimal (최적화) +- Fully automated, self-adaptive security +- AI-driven orchestration and response +- Predictive threat analysis +- Continuous verification at all layers +- Zero standing privileges + +## Scoring Framework + +### Per-Item Scoring + +| Score | Criteria | +|-------|----------| +| 3 | Fully implemented and operational | +| 2 | Partially implemented, gaps exist | +| 1 | Planned but not yet implemented | +| 0 | Not implemented, no plans | + +### Element Maturity Calculation + +``` +Element Score = (Sum of item scores for target level) / (Max possible score) x 100% + +Maturity Rating: + >= 80% → Mature (at or above target level) + 60-79% → Developing (approaching target level) + 40-59% → Emerging (significant gaps remain) + < 40% → Insufficient (major remediation needed) +``` + +## Cross-Element Dependencies + +| Element | Depends On | +|---------|-----------| +| Identity | — (foundation element) | +| Device | Identity | +| Network | Identity, Device | +| System | Network, Identity | +| Application | Identity, Device, Network | +| Data | Application, Identity | +| Visibility | All elements (observability layer) | +| Automation | Visibility (requires data to automate) | + +## Assessment Prioritization + +1. Start with **Identity** — foundation of all ZT controls +2. Then **Device** — ensure endpoint trust +3. Then **Network** — establish segmentation +4. Then **Application** and **Data** — protect workloads +5. Finally **Visibility** and **Automation** — enable continuous improvement diff --git a/skills-ko/kesekit-check-ko/references/zero-trust/ot-guide.md b/skills-ko/kesekit-check-ko/references/zero-trust/ot-guide.md new file mode 100644 index 0000000..92c0970 --- /dev/null +++ b/skills-ko/kesekit-check-ko/references/zero-trust/ot-guide.md @@ -0,0 +1,128 @@ +# OT/ICS Zero Trust Deployment Guide + +> Reference: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-82 Rev.3, IEC 62443 +> Purpose: Guidance for deploying Zero Trust in OT/ICS environments + +## Why OT/ICS Requires Special ZT Consideration + +Traditional IT Zero Trust assumes: +- Modern endpoints capable of running agents +- Tolerance for additional authentication latency +- Ability to patch and update frequently +- Replaceable infrastructure components + +OT/ICS reality: +- Legacy devices (PLCs, RTUs, HMIs) with 15-30 year lifecycles +- Real-time control loops with microsecond-level latency requirements +- Safety-critical functions where authentication delays can cause harm +- Proprietary protocols (Modbus, DNP3, OPC UA, PROFINET) +- Air-gapped or semi-isolated networks + +## Phased Deployment Approach + +### Phase 1: Visibility & Asset Discovery + +**Objective**: Know what you have before you protect it. + +- Conduct complete OT asset inventory (active + passive discovery) +- Map communication flows between OT devices, IT systems, and external connections +- Identify Purdue Model levels for each asset +- Baseline normal traffic patterns and protocol usage +- Document legacy devices that cannot support modern security controls + +### Phase 2: IT-OT Boundary Segmentation + +**Objective**: Establish strong boundary between IT and OT networks. + +- Deploy industrial DMZ between IT and OT networks +- Implement data diodes or unidirectional gateways for critical flows +- Control all IT-OT data exchange through monitored jump servers +- Establish separate authentication domains for IT and OT + +### Phase 3: OT Internal Segmentation + +**Objective**: Apply zone/conduit model within OT network. + +- Implement IEC 62443 zones and conduits +- Segment by safety level (SL), function, and criticality +- Deploy OT-aware firewalls between zones +- Establish conduit-level access policies + +### Phase 4: Identity & Access Control + +**Objective**: Enforce identity-based access in OT environment. + +- Deploy MFA for all remote OT access (hardware tokens preferred) +- Implement privileged access management (PAM) for OT systems +- Apply least-privilege access for OT operators and engineers +- Manage shared/service accounts with rotation and monitoring +- Use jump servers with session recording for maintenance access + +### Phase 5: Continuous Monitoring + +**Objective**: Maintain visibility and detect anomalies. + +- Deploy OT-specific IDS/IPS (passive monitoring preferred initially) +- Implement Deep Packet Inspection (DPI) for OT protocols +- Integrate OT security events with enterprise SIEM +- Establish OT-specific SOC or extend IT SOC with OT expertise +- Monitor for known OT malware signatures (Triton, Industroyer, etc.) + +### Phase 6: Automated Response (with Safety Validation) + +**Objective**: Enable automated response without compromising safety. + +- Define automated response actions with safety impact assessment +- Implement fail-safe defaults (fail-open for safety-critical, fail-close for non-critical) +- Require human approval for actions affecting safety systems +- Test automated responses in simulation environment before deployment + +## OT-Specific ZT Architecture + +``` +┌────────────────────────────────────────────┐ +│ Enterprise Zone (IT) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ PDP │ │ IdP/ │ │ Enterprise │ │ +│ │ │ │ MFA │ │ SIEM │ │ +│ └────────┘ └────────┘ └────────────┘ │ +└──────────────────┬─────────────────────────┘ + │ Industrial DMZ +┌──────────────────┴─────────────────────────┐ +│ ┌────────────┐ ┌─────────┐ ┌────────┐ │ +│ │ Jump Server│ │ Historian│ │ PEP │ │ +│ │ (PAM) │ │ Mirror │ │ (OT) │ │ +│ └────────────┘ └─────────┘ └────────┘ │ +└──────────────────┬─────────────────────────┘ + │ +┌──────────────────┴─────────────────────────┐ +│ OT Zone (ICS/SCADA) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ HMI │ │ PLC │ │ RTU │ │ +│ │ │ │ │ │ │ │ +│ └────────┘ └────────┘ └────────────┘ │ +│ ┌────────────────────────────────────┐ │ +│ │ OT IDS (Passive Monitoring) │ │ +│ └────────────────────────────────────┘ │ +└────────────────────────────────────────────┘ +``` + +## Legacy Device Handling + +For OT devices that cannot support modern ZT controls: + +1. **Security Wrapper/Proxy**: Place a ZT-capable proxy in front of legacy devices +2. **Network-Level Protection**: Use OT-aware firewalls to enforce access policies +3. **Monitoring**: Deploy passive DPI sensors for visibility without device modification +4. **Compensating Controls**: Document risk acceptance with compensating controls per IEC 62443 + +## Standards Mapping + +| OT-ZT Requirement | IEC 62443 | NIST SP 800-82 | KISA ZT 2.0 | +|-------------------|-----------|----------------|-------------| +| Network Segmentation | Zone/Conduit | Section 5.3 | NW Element | +| Access Control | FR 1 (AC) | Section 6.2 | ID Element | +| Device Management | FR 4 (DC) | Section 6.3 | DV Element | +| Communication Integrity | FR 3 (SI) | Section 5.4 | SY Element | +| Monitoring | FR 6 (RE) | Section 6.6 | VA Element | +| Incident Response | FR 7 (RA) | Section 6.7 | AU Element | diff --git a/skills-ko/kesekit-check-ko/references/zero-trust/overview.md b/skills-ko/kesekit-check-ko/references/zero-trust/overview.md new file mode 100644 index 0000000..38fe30d --- /dev/null +++ b/skills-ko/kesekit-check-ko/references/zero-trust/overview.md @@ -0,0 +1,72 @@ +# Zero Trust Architecture Reference + +> Reference: NIST SP 800-207, KISA 제로트러스트 가이드라인 2.0, CISA Zero Trust Maturity Model +> Purpose: Provide architectural context for Zero Trust maturity assessment + +## Zero Trust Architecture (ZTA) + +### Core Logical Components + +``` +┌─────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ PDP │ │ Policy │ │ Trust Algorithm │ │ +│ │ (Policy │ │ Engine │ │ (Risk Score + │ │ +│ │ Decision │ │ │ │ Context Analysis) │ │ +│ │ Point) │ │ │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ + │ + ┌────┴────┐ + │ PEP │ ← Policy Enforcement Point + │ │ + └────┬────┘ + │ +┌─────────────────────────────────────────────────────────┐ +│ Data Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ Subject │ │ Resource │ │ Enterprise │ │ +│ │ (User/ │→→│ (App/ │ │ Resources │ │ +│ │ Device) │ │ Data) │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### Deployment Models (NIST SP 800-207) + +1. **SDP (Software Defined Perimeter)**: Agent/gateway-based model +2. **Micro-segmentation**: Network-centric approach +3. **Network Infrastructure + SDP**: Hybrid approach + +### KISA Zero Trust Guidelines 2.0 — 8 Elements + +| Element | Korean | Scope | +|---------|--------|-------| +| Identity | 식별자 및 신원 | User identity management, MFA, continuous authentication | +| Device | 디바이스 및 엔드포인트 | Device inventory, health checks, compliance | +| Network | 네트워크 | Macro/micro segmentation, SDN, encrypted traffic | +| System | 시스템 | System hardening, patching, configuration management | +| Application | 애플리케이션 및 워크로드 | Resource authorization, remote access, monitoring | +| Data | 데이터 | Classification, DLP, encryption, access control | +| Visibility | 가시성 및 분석 | Logging, SIEM, threat analysis | +| Automation | 자동화 및 오케스트레이션 | SOAR, automated response, policy orchestration | + +### Related Standards + +| Standard | Organization | Focus | +|----------|-------------|-------| +| NIST SP 800-207 | NIST | ZTA reference architecture | +| CISA Zero Trust Maturity Model | CISA | Federal ZT maturity assessment | +| 제로트러스트 가이드라인 2.0 | KISA | Korean ZT implementation guide | +| NIST SP 800-82 | NIST | OT/ICS security guide | +| IEC 62443 | IEC | Industrial automation security | + +### Key Concepts + +- **PDP (Policy Decision Point)**: Evaluates access requests against policy +- **PEP (Policy Enforcement Point)**: Enforces PDP decisions at the access point +- **SDP (Software Defined Perimeter)**: Creates dynamic, identity-based perimeters +- **SASE (Secure Access Service Edge)**: Cloud-delivered convergence of network and security +- **ZTNA (Zero Trust Network Access)**: Application-level access without VPN +- **Microsegmentation**: Granular network isolation at workload level diff --git a/skills-ko/kesekit-check-ko/scripts/cii/cloud.md b/skills-ko/kesekit-check-ko/scripts/cii/cloud.md new file mode 100644 index 0000000..b5fc514 --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/cii/cloud.md @@ -0,0 +1,517 @@ +# 클라우드 점검 스크립트 (CA-01 ~ CA-19) + +## 1. 계정 관리 + +### CA-01: 사용자 계정 관리 +**점검:** +```bash +# AWS: IAM 사용자 목록 및 마지막 로그인 확인 +aws iam list-users --output table +aws iam generate-credential-report +aws iam get-credential-report --output text --query Content | base64 -d + +# Azure: 사용자 목록 확인 +az ad user list --output table +az ad user list --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}" --output table + +# GCP: IAM 사용자 확인 +gcloud iam service-accounts list +gcloud projects get-iam-policy --format=json +``` +**조치:** +```bash +# AWS: 불필요 계정 삭제/비활성화 +aws iam delete-user --user-name <사용자명> +aws iam delete-login-profile --user-name <사용자명> +# 액세스 키 비활성화 +aws iam update-access-key --user-name <사용자명> --access-key-id <키ID> --status Inactive + +# Azure: 불필요 계정 삭제/비활성화 +az ad user update --id <사용자ID> --account-enabled false +az ad user delete --id <사용자ID> + +# GCP: 서비스 계정 삭제/비활성화 +gcloud iam service-accounts disable <서비스계정이메일> +gcloud iam service-accounts delete <서비스계정이메일> +``` + +### CA-02: 사용자 정책 관리 +**점검:** +```bash +# AWS: 사용자별 정책 확인 +aws iam list-attached-user-policies --user-name <사용자명> +aws iam list-user-policies --user-name <사용자명> +aws iam list-groups-for-user --user-name <사용자명> + +# Azure: 역할 할당 확인 +az role assignment list --all --output table + +# GCP: IAM 정책 확인 +gcloud projects get-iam-policy +``` +**조치:** +```bash +# AWS: 불필요 권한 제거, 최소 권한 원칙 적용 +aws iam detach-user-policy --user-name <사용자명> --policy-arn <정책ARN> +# 그룹 기반 권한 관리 +aws iam create-group --group-name <그룹명> +aws iam attach-group-policy --group-name <그룹명> --policy-arn <정책ARN> +aws iam add-user-to-group --user-name <사용자명> --group-name <그룹명> + +# Azure: 역할 할당 변경 +az role assignment delete --assignee <사용자ID> --role <역할명> +az role assignment create --assignee <사용자ID> --role <역할명> --scope <범위> + +# GCP: IAM 바인딩 변경 +gcloud projects remove-iam-policy-binding --member=user:<이메일> --role=<역할> +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=<역할> +``` + +### CA-03: MFA(Multi-Factor Authentication) 설정 +**점검:** +```bash +# AWS: MFA 설정 여부 확인 +aws iam list-virtual-mfa-devices +aws iam list-mfa-devices --user-name <사용자명> +# MFA 미설정 사용자 확인 (credential report 활용) +aws iam get-credential-report --output text --query Content | base64 -d | grep -i "false" + +# Azure: MFA 상태 확인 +az ad user list --query "[].{UPN:userPrincipalName}" --output table +# Azure Portal: Azure AD > 보안 > MFA 에서 확인 + +# GCP: 2단계 인증은 Google Workspace Admin Console에서 확인 +``` +**조치:** +```bash +# AWS: 가상 MFA 디바이스 생성 및 활성화 +aws iam create-virtual-mfa-device --virtual-mfa-device-name <디바이스명> --outfile QRCode.png --bootstrap-method QRCodePNG +aws iam enable-mfa-device --user-name <사용자명> --serial-number --authentication-code1 <코드1> --authentication-code2 <코드2> + +# Azure: 조건부 액세스 정책으로 MFA 강제 (Azure Portal에서 설정) +# Azure AD > 보안 > 조건부 액세스 > 새 정책 > MFA 필수 + +# GCP: Google Workspace Admin Console에서 2단계 인증 강제 +``` + +### CA-04: 클라우드 계정 비밀번호 정책 관리 +**점검:** +```bash +# AWS: 비밀번호 정책 확인 +aws iam get-account-password-policy + +# Azure: 비밀번호 정책 확인 (Azure AD) +az ad group list --output table +# Azure Portal: Azure AD > 보안 > 인증 방법 > 비밀번호 보호 +``` +**조치:** +```bash +# AWS: 비밀번호 정책 설정 +aws iam update-account-password-policy \ + --minimum-password-length 8 \ + --require-symbols \ + --require-numbers \ + --require-uppercase-characters \ + --require-lowercase-characters \ + --max-password-age 90 \ + --password-reuse-prevention 24 \ + --allow-users-to-change-password + +# Azure: Azure AD Portal에서 비밀번호 정책 설정 +# Azure AD > 보안 > 인증 방법 > 비밀번호 보호 > 사용자 지정 금지 비밀번호 목록 +``` + +## 2. 권한 관리 + +### CA-05: 인스턴스 서비스 정책 관리 +**점검:** +```bash +# AWS: EC2 관련 IAM 정책 확인 +aws iam list-policies --query "Policies[?contains(PolicyName,'EC2')]" --output table +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,IamInstanceProfile]" --output table + +# Azure: VM 관련 역할 확인 +az vm list --output table +az role assignment list --query "[?contains(scope,'Microsoft.Compute')]" --output table + +# GCP: Compute Engine IAM 확인 +gcloud compute instances list +``` +**조치:** +```bash +# AWS: 인스턴스 관련 권한 최소화 +# 전용 IAM 역할 생성 후 인스턴스에 할당 +aws iam create-role --role-name <역할명> --assume-role-policy-document file://trust-policy.json +aws iam attach-role-policy --role-name <역할명> --policy-arn <정책ARN> +aws ec2 associate-iam-instance-profile --instance-id <인스턴스ID> --iam-instance-profile Name=<프로필명> + +# Azure: 리소스 그룹 단위 역할 할당 +az role assignment create --assignee <사용자ID> --role "Virtual Machine Contributor" --scope /subscriptions/<구독ID>/resourceGroups/<리소스그룹> + +# GCP: 커스텀 역할 적용 +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=roles/compute.instanceAdmin +``` + +### CA-06: 네트워크 서비스 정책 관리 +**점검:** +```bash +# AWS: VPC/네트워크 관련 정책 확인 +aws ec2 describe-vpcs --output table +aws ec2 describe-security-groups --output table + +# Azure: NSG 확인 +az network nsg list --output table +az network nsg rule list --nsg-name --resource-group <리소스그룹> --output table + +# GCP: 방화벽 규칙 확인 +gcloud compute firewall-rules list +``` +**조치:** +```bash +# AWS: 보안 그룹 규칙 관리 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr <관리자IP>/32 + +# Azure: NSG 규칙 관리 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> +az network nsg rule create --nsg-name --resource-group --name <규칙명> --priority 100 --access Allow --source-address-prefixes --destination-port-ranges 22 + +# GCP: 방화벽 규칙 관리 +gcloud compute firewall-rules delete <규칙명> +gcloud compute firewall-rules create <규칙명> --allow tcp:22 --source-ranges=/32 +``` + +## 3. 가상 리소스 관리 + +### CA-07: VPC 네트워크 서브넷 관리 +**점검:** +```bash +# AWS: 서브넷 구성 확인 (Public/Private 분리 여부) +aws ec2 describe-subnets --output table +aws ec2 describe-route-tables --output table +aws ec2 describe-internet-gateways --output table +aws ec2 describe-nat-gateways --output table + +# Azure: 가상 네트워크 서브넷 확인 +az network vnet list --output table +az network vnet subnet list --vnet-name --resource-group --output table + +# GCP: 서브넷 확인 +gcloud compute networks subnets list +``` +**조치:** +```bash +# Public 서브넷: 인터넷 게이트웨이 할당 +# Private 서브넷: NAT 게이트웨이 할당 +# 서브넷별 네트워크 리소스 별도 설정 + +# AWS: NAT 게이트웨이 생성 (Private 서브넷용) +aws ec2 create-nat-gateway --subnet-id --allocation-id + +# Azure: Private 서브넷에 NSG 적용 +az network vnet subnet update --vnet-name --name <서브넷명> --resource-group --network-security-group +``` + +### CA-08: 가상 네트워크 리소스 관리 +**점검:** +```bash +# AWS: 공인 IP 할당 인스턴스 확인 +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress]" --output table + +# Azure: 공인 IP 확인 +az network public-ip list --output table +az vm list-ip-addresses --output table + +# GCP: 외부 IP 확인 +gcloud compute instances list --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)" +``` +**조치:** +```bash +# AWS: 불필요 공인 IP 해제 +aws ec2 disassociate-address --association-id <연결ID> +aws ec2 release-address --allocation-id <할당ID> + +# Azure: 공인 IP 해제 +az network nic ip-config update --resource-group --nic-name --name --remove publicIpAddress + +# GCP: 외부 IP 제거 +gcloud compute instances delete-access-config <인스턴스명> --access-config-name "External NAT" +``` + +### CA-09: 접근 제어 설정 관리 +**점검:** +```bash +# AWS: 보안 그룹 규칙 확인 (0.0.0.0/0 허용 여부) +aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,Ingress:IpPermissions}" --output json +# 0.0.0.0/0 허용 규칙 필터링 +aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" --output table + +# Azure: NSG 규칙 중 Any 허용 확인 +az network nsg list --query "[].{Name:name,Rules:securityRules[?sourceAddressPrefix=='*']}" --output json + +# GCP: 0.0.0.0/0 허용 방화벽 규칙 확인 +gcloud compute firewall-rules list --filter="sourceRanges=0.0.0.0/0" +``` +**조치:** +```bash +# AWS: 불필요한 0.0.0.0/0 규칙 제거 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port <포트> --cidr 0.0.0.0/0 + +# Azure: 불필요 규칙 삭제 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> + +# GCP: 불필요 방화벽 규칙 삭제 +gcloud compute firewall-rules delete <규칙명> + +# 공통: 관리자 IP 또는 특정 IP에서만 접속 허용 +``` + +### CA-10: 스토리지 리소스 퍼블릭 접근 관리 +**점검:** +```bash +# AWS: S3 버킷 퍼블릭 접근 확인 +aws s3api get-bucket-acl --bucket <버킷명> +aws s3api get-public-access-block --bucket <버킷명> +aws s3api get-bucket-policy --bucket <버킷명> + +# Azure: 스토리지 계정 공개 접근 확인 +az storage account list --query "[].{Name:name,PublicAccess:allowBlobPublicAccess}" --output table + +# GCP: 버킷 IAM 확인 +gsutil iam get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 퍼블릭 접근 차단 +aws s3api put-public-access-block --bucket <버킷명> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true + +# Azure: 스토리지 공개 접근 비활성화 +az storage account update --name <스토리지명> --resource-group --allow-blob-public-access false + +# GCP: 버킷에서 allUsers/allAuthenticatedUsers 제거 +gsutil iam ch -d allUsers gs://<버킷명> +gsutil iam ch -d allAuthenticatedUsers gs://<버킷명> +``` + +## 4. 운영 관리 + +### CA-11: 관계형 데이터베이스 암호화 설정 +**점검:** +```bash +# AWS: RDS 암호화 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Encrypted:StorageEncrypted}" --output table + +# Azure: SQL DB 암호화 확인 +az sql db tde show --server <서버명> --database --resource-group + +# GCP: Cloud SQL 암호화 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.dataDiskEncryptionConfiguration)" +``` +**조치:** +```bash +# AWS: RDS 암호화 활성화 (생성 시 또는 스냅샷 복원) +aws rds create-db-instance --db-instance-identifier --storage-encrypted --kms-key-id ... + +# Azure: TDE 활성화 +az sql db tde set --server <서버명> --database --resource-group --status Enabled + +# GCP: 기본적으로 저장 데이터 암호화 적용됨 (CMEK 설정 가능) +``` + +### CA-12: 통신 구간 암호화 설정 +**점검:** +```bash +# AWS: ELB/ALB SSL 인증서 확인 +aws elbv2 describe-listeners --load-balancer-arn --query "Listeners[*].{Port:Port,Protocol:Protocol,Certs:Certificates}" --output table + +# Azure: Application Gateway SSL 확인 +az network application-gateway ssl-cert list --gateway-name <게이트웨이명> --resource-group + +# 공통: TLS 버전 확인 +openssl s_client -connect <호스트>:443 -tls1_2 +``` +**조치:** +```bash +# 공통 권고사항: +# 서버 원격 접근 시 VPN, SSH 사용 +# TLS v1.2 이상 (TLS v1.3 권장) 사용 +# 블록 암호: SEED, ARIA, AES (키 128bits 이상) +# 공개키 암호: RSA (키 2048bits 이상) +# 해시: SHA-2 이상 +``` + +### CA-13: 클라우드 서비스 사용자 계정 로깅 설정 +**점검:** +```bash +# AWS: CloudTrail 설정 확인 +aws cloudtrail describe-trails --output table +aws cloudtrail get-trail-status --name <트레일명> + +# Azure: Activity Log 확인 +az monitor activity-log list --offset 1h --output table + +# GCP: Cloud Audit Logs 확인 +gcloud logging read "logName:cloudaudit.googleapis.com" --limit 10 +``` +**조치:** +```bash +# AWS: CloudTrail 활성화 +aws cloudtrail create-trail --name <트레일명> --s3-bucket-name <버킷명> --is-multi-region-trail +aws cloudtrail start-logging --name <트레일명> + +# Azure: 진단 설정 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <리소스ID> --logs '[{"category":"AuditEvent","enabled":true}]' --storage-account <스토리지ID> + +# GCP: Audit Log 기본 활성화됨, 추가 설정 시 +gcloud projects get-iam-policy --format=json +``` + +### CA-14: 인스턴스 로깅 설정 +**점검:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 그룹 확인 +aws logs describe-log-groups --output table + +# Azure: VM 진단 설정 확인 +az vm diagnostics get-default-config + +# GCP: Ops Agent 설치 확인 +gcloud compute instances describe <인스턴스명> --format="value(metadata.items)" +``` +**조치:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 전송 +aws ssm send-command --instance-ids <인스턴스ID> --document-name "AWS-ConfigureAWSPackage" --parameters '{"action":["Install"],"name":["AmazonCloudWatchAgent"]}' + +# Azure: VM 진단 확장 설치 +az vm diagnostics set --resource-group --vm-name --settings <설정JSON> + +# GCP: Ops Agent 설치 +gcloud compute ssh <인스턴스명> -- 'curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh && sudo bash add-google-cloud-ops-agent-repo.sh --also-install' +``` + +### CA-15: 관계형 데이터베이스 로깅 설정 +**점검:** +```bash +# AWS: RDS 로깅 파라미터 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Logs:EnabledCloudwatchLogsExports}" --output table + +# Azure: SQL 감사 설정 확인 +az sql server audit-policy show --server <서버명> --resource-group + +# GCP: Cloud SQL 로그 플래그 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.databaseFlags)" +``` +**조치:** +```bash +# AWS: RDS 로그 내보내기 활성화 +aws rds modify-db-instance --db-instance-identifier --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}' + +# Azure: SQL 감사 활성화 +az sql server audit-policy update --server <서버명> --resource-group --state Enabled --storage-account <스토리지명> + +# GCP: Cloud SQL 감사 로그 활성화 +gcloud sql instances patch <인스턴스명> --database-flags=log_output=FILE,general_log=on,slow_query_log=on +``` + +### CA-16: 오브젝트 스토리지 버킷 로깅 설정 +**점검:** +```bash +# AWS: S3 서버 액세스 로깅 확인 +aws s3api get-bucket-logging --bucket <버킷명> + +# Azure: Blob Storage 진단 로그 확인 +az monitor diagnostic-settings list --resource <스토리지리소스ID> + +# GCP: 버킷 로깅 확인 +gsutil logging get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 서버 액세스 로깅 활성화 +aws s3api put-bucket-logging --bucket <버킷명> --bucket-logging-status '{"LoggingEnabled":{"TargetBucket":"<로그버킷>","TargetPrefix":"logs/"}}' + +# Azure: Blob Storage 진단 로그 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <스토리지리소스ID> --logs '[{"category":"StorageRead","enabled":true},{"category":"StorageWrite","enabled":true},{"category":"StorageDelete","enabled":true}]' + +# GCP: 버킷 로깅 활성화 +gsutil logging set on -b gs://<로그버킷> gs://<대상버킷> +``` + +### CA-17: 로그 보관 기간 설정 +**점검:** +```bash +# AWS: CloudWatch Logs 보관 기간 확인 +aws logs describe-log-groups --query "logGroups[*].{Name:logGroupName,Retention:retentionInDays}" --output table +# S3 수명 주기 정책 확인 +aws s3api get-bucket-lifecycle-configuration --bucket <버킷명> + +# Azure: 로그 보관 정책 확인 +az monitor diagnostic-settings list --resource <리소스ID> + +# GCP: 로그 버킷 보관 기간 확인 +gcloud logging buckets describe <버킷명> --location=global +``` +**조치:** +```bash +# AWS: CloudWatch Logs 보관 기간 설정 (예: 365일) +aws logs put-retention-policy --log-group-name <로그그룹명> --retention-in-days 365 + +# Azure: 진단 설정에서 보관 기간 설정 (일반적으로 Azure Portal에서 설정) + +# GCP: 로그 버킷 보관 기간 설정 +gcloud logging buckets update <버킷명> --location=global --retention-days=365 +``` + +### CA-18: 백업 사용 여부 +**점검:** +```bash +# AWS: 백업 설정 확인 +aws backup list-backup-plans --output table +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,BackupRetention:BackupRetentionPeriod}" --output table +aws ec2 describe-snapshots --owner-ids self --output table + +# Azure: 백업 항목 확인 +az backup item list --vault-name <볼트명> --resource-group --output table + +# GCP: 스냅샷 확인 +gcloud compute snapshots list +gcloud sql backups list --instance=<인스턴스명> +``` +**조치:** +```bash +# AWS: 자동 백업 설정 +aws backup create-backup-plan --backup-plan file://backup-plan.json +# RDS 백업 보관 기간 설정 +aws rds modify-db-instance --db-instance-identifier --backup-retention-period 7 + +# Azure: 백업 정책 설정 +az backup protection enable-for-vm --resource-group --vault-name <볼트명> --vm --policy-name <정책명> + +# GCP: 스냅샷 스케줄 생성 +gcloud compute resource-policies create snapshot-schedule <정책명> --region=<리전> --max-retention-days=14 --daily-schedule +``` + +### CA-19: 가상 리소스 이상징후 알림 설정 +**점검:** +```bash +# AWS: CloudWatch 알람 확인 +aws cloudwatch describe-alarms --output table + +# Azure: 경고 규칙 확인 +az monitor metrics alert list --output table + +# GCP: 알림 정책 확인 +gcloud alpha monitoring policies list +``` +**조치:** +```bash +# AWS: CloudWatch 알람 생성 (예: CPU 사용률) +aws cloudwatch put-metric-alarm --alarm-name "HighCPU" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions --dimensions Name=InstanceId,Value=<인스턴스ID> + +# Azure: 메트릭 경고 생성 +az monitor metrics alert create --name "HighCPU" --resource-group --scopes <리소스ID> --condition "avg Percentage CPU > 80" --action <액션그룹ID> + +# GCP: 알림 정책 생성 (gcloud 또는 Cloud Console에서 설정) +# Cloud Console > Monitoring > 알림 > 정책 만들기 > 조건 및 알림 채널(SMS, 이메일) 설정 +``` diff --git a/skills-ko/kesekit-check-ko/scripts/cii/database.md b/skills-ko/kesekit-check-ko/scripts/cii/database.md new file mode 100644 index 0000000..5abb7fb --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/cii/database.md @@ -0,0 +1,649 @@ +# DBMS 점검 스크립트 (D-01 ~ D-26) + +## 1. 계정 관리 + +### D-01: 기본 계정의 비밀번호, 정책 등을 변경하여 사용 +**점검:** +```sql +-- Oracle: 기본 계정 사용 여부 및 정책 확인 +SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE account_status = 'OPEN'; + +-- MSSQL: sa 계정 확인 +SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa'; + +-- MySQL: root 계정 확인 +SELECT User, Host FROM mysql.user; +SHOW VARIABLES LIKE 'validate_password%'; + +-- PostgreSQL: 역할 확인 +SELECT rolname, rolsuper FROM pg_roles; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; + +-- Cubrid +SELECT name, password FROM db_user; +SELECT * FROM db_password; +``` +**조치:** +```sql +-- Oracle: 비밀번호 변경 / 잠금 +ALTER USER <기본계정명> IDENTIFIED BY <신규비밀번호>; +ALTER USER <기본계정명> ACCOUNT LOCK; + +-- MSSQL: sa 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; + +-- MySQL 5.7 +UPDATE user SET authentication_string = PASSWORD('신규비밀번호') WHERE User = 'root'; +FLUSH PRIVILEGES; +-- MySQL 8.0 +ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; +FLUSH PRIVILEGES; + +-- Altibase +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- Tibero +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- PostgreSQL +ALTER USER postgres WITH PASSWORD '신규비밀번호'; + +-- Cubrid +ALTER USER "사용자계정명" PASSWORD '신규비밀번호'; +``` + +### D-02: 불필요 계정 제거 또는 잠금설정 +**점검:** +```sql +-- Oracle +SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; + +-- MSSQL +SELECT name, is_disabled FROM sys.server_principals; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM all_users; +SELECT * FROM dba_users; + +-- PostgreSQL +SELECT * FROM pg_roles; +-- 또는 명령어: \du + +-- Cubrid +SELECT name, password FROM db_user; +``` +**조치:** +```sql +-- Oracle +DROP USER [삭제할 계정]; + +-- MSSQL +EXEC sp_droplogin '삭제할 계정'; + +-- MySQL +DROP USER '삭제할 계정'@'호스트명'; +FLUSH PRIVILEGES; + +-- Altibase / Tibero +DROP USER user_name CASCADE; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; + +-- Cubrid +DROP USER [삭제할 계정]; +``` + +### D-03: 비밀번호 사용 기간 및 복잡도 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES WHERE resource_name LIKE 'PASSWORD%'; + +-- MySQL +SHOW VARIABLES LIKE 'validate_password%'; +SHOW VARIABLES LIKE 'default_password_lifetime'; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle: 비밀번호 정책 설정 +ALTER PROFILE <프로파일명> LIMIT + FAILED_LOGIN_ATTEMPTS 3 + PASSWORD_LIFE_TIME 30 + PASSWORD_REUSE_TIME 30 + PASSWORD_VERIFY_FUNCTION verify_function + PASSWORD_GRACE_TIME 5; +ALTER USER <계정명> PROFILE <프로파일명>; + +-- MSSQL: 암호 만료 강제 적용 (SSMS GUI) +-- 보안 > 로그인 > 속성 > "암호 만료 강제 적용" 설정 +-- OS 암호 정책: [로컬 보안 정책] > [암호 정책] > 최대 암호 사용 기간: 60일 + +-- MySQL: 복잡도 정책 +INSTALL COMPONENT 'file://component_validate_password'; +SET GLOBAL validate_password.policy = 'MEDIUM'; +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.mixed_case_count = 1; +SET GLOBAL validate_password.number_count = 1; +SET GLOBAL validate_password.special_char_count = 1; +-- LifeTime 정책 +SET GLOBAL default_password_lifetime = 90; +ALTER USER '<계정명>'@'<호스트>' PASSWORD EXPIRE INTERVAL 91 DAY; + +-- Altibase +ALTER USER 계정명 LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7); + +-- Tibero +CREATE PROFILE prof LIMIT + failed_login_attempts 3 + password_lock_time 1/1440 + password_life_time 90 + password_reuse_time unlimited + password_reuse_max 10 + password_grace_time 10 + password_verify_function verify_function; +``` + +### D-04: 관리자 권한을 필요한 계정에만 허용 +**점검:** +```sql +-- Oracle: SYSDBA 권한 점검 +SELECT username FROM v$pwfile_users WHERE username NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +) AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +-- Admin 부적합 계정 점검 +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ( + 'SYS','SYSTEM','AQ_ADMINISTRATOR_ROLE','DBA','DSYS','BACSYS','SCHEDULER_ADMIN','MSYS' +) AND admin_option = 'YES' AND grantee NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +); + +-- MySQL: SUPER 권한 확인 +SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; + +-- PostgreSQL +SELECT * FROM pg_user; +SELECT username, usesuper FROM pg_shadow; + +-- Cubrid: DBA 권한 사용자 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +REVOKE <권한> FROM <계정명>; +GRANT <권한> ON <테이블명> TO <계정명>; + +-- MSSQL: sysadmin 역할에서 삭제 +EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; + +-- MySQL: SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; + +-- PostgreSQL: 불필요 관리자 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; + +-- Cubrid: DBA 권한 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +``` + +### D-05: 비밀번호 재사용 제약 설정 +**점검:** +```sql +-- Oracle +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' + AND limit IN ('UNLIMITED', 'NULL'); +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' + AND limit IN ('UNLIMITED', 'NULL'); + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; + +-- Altibase +ALTER USER [계정명] LIMIT (PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 10); + +-- Tibero +CREATE PROFILE prof LIMIT + password_reuse_time unlimited + password_reuse_max 10; +``` + +### D-06: DB 사용자 계정 개별 부여 +**점검:** +```sql +-- Oracle +SELECT username FROM dba_users ORDER BY username; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL +SELECT * FROM pg_shadow; + +-- Altibase +SELECT * FROM system_.sys_users_; +``` +**조치:** +```sql +-- Oracle: 공용 계정 삭제 후 개별 계정 생성 +DROP USER '공용계정'; +CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +GRANT connect, resource TO [계정명]; + +-- MSSQL +EXEC sp_droplogin '공용계정'; +CREATE LOGIN '생성계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성계정' FOR LOGIN '생성계정'; + +-- MySQL +DROP USER <계정명>@<호스트>; +CREATE USER '<계정명>'@'<호스트>' IDENTIFIED BY '비밀번호'; +GRANT SELECT, INSERT ON DB이름.테이블명 TO '<계정명>'@'<호스트>'; +FLUSH PRIVILEGES; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' <권한명>; +``` + +### D-07: root 권한으로 서비스 구동 제한 +**점검:** +```bash +# Oracle +ps -ef | grep pmon +ps -ef | grep tnslsnr + +# MySQL +ps -ef | grep mysqld +cat /etc/my.cnf | grep user + +# Altibase +ps -ef | grep altibase | grep -v grep +``` +**조치:** +```bash +# Oracle: oracle 계정으로 전환 후 구동 +su - oracle +lsnrctl start +sqlplus / as sysdba +startup + +# MySQL: my.cnf [mysqld] 섹션에 user 지정 +# vi /etc/my.cnf +# [mysqld] +# user = mysql + +# Altibase: 전용 계정으로 소유자 변경 +chown -R [계정명]:[그룹명] '[Altibase 디렉터리]' +``` + +### D-08: 안전한 암호화 알고리즘 사용 +**점검:** +```sql +-- Oracle: 암호화 알고리즘 확인 +SELECT * FROM v$parameter WHERE name LIKE '%crypto%'; + +-- MySQL +SHOW VARIABLES LIKE '%ssl%'; +``` +**조치:** +```sql +-- 안전한 암호화 알고리즘(AES-256, SHA-256 등) 사용 설정 +-- DBMS별 암호화 설정은 벤더 문서 참조 +``` + +### D-09: 로그인 실패 시 잠금정책 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES + WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS'; + +-- MySQL +SHOW VARIABLES LIKE 'max_connect_errors'; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE <프로파일명> LIMIT FAILED_LOGIN_ATTEMPTS 5; + +-- MySQL +SET GLOBAL max_connect_errors = 5; +``` + +## 2. 접근 관리 + +### D-10: 원격에서 DB 서버 접속 제한 +**점검:** +```sql +-- Oracle: listener.ora에서 접근 IP 제한 확인 +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL: pg_hba.conf 확인 +``` +**조치:** +```sql +-- MySQL: 원격 접속 제한 +-- 특정 IP에서만 접속 가능하도록 계정 생성 +CREATE USER '<계정명>'@'<허용IP>' IDENTIFIED BY '비밀번호'; +-- 모든 호스트 접근 가능 계정 삭제 +DROP USER '<계정명>'@'%'; +FLUSH PRIVILEGES; +``` +```bash +# Oracle: $ORACLE_HOME/network/admin/sqlnet.ora +# tcp.validnode_checking = YES +# tcp.invited_nodes = (허용IP1, 허용IP2) + +# PostgreSQL: pg_hba.conf에서 접근 IP 제한 +# host all all <허용IP>/32 md5 +``` + +### D-11: 시스템 테이블 접근 제한 +**점검:** +```sql +-- Oracle: DBA 이외 시스템 테이블 접근 권한 확인 +SELECT grantee, privilege, table_name FROM dba_tab_privs + WHERE table_name IN (SELECT table_name FROM dba_tables WHERE owner = 'SYS'); +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.<테이블명> FROM <계정명>; +``` + +### D-12: 리스너 비밀번호 설정 +**점검:** +```bash +# Oracle: listener.ora 파일 확인 +cat $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: 리스너 비밀번호 설정 +lsnrctl +LSNRCTL> set current_listener <리스너명> +LSNRCTL> change_password +# Old password: (빈칸) +# New password: <비밀번호> +LSNRCTL> save_config +``` + +### D-13: 불필요한 ODBC/OLE-DB 데이터 소스 제거 +**점검:** +```powershell +# Windows: ODBC 데이터 소스 확인 +Get-OdbcDsn +``` +**조치:** +```powershell +# Windows: 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType "System" +``` + +### D-14: 주요 파일 접근 권한 설정 +**점검:** +```bash +# Oracle +ls -la $ORACLE_HOME/dbs/*.ora +ls -la $ORACLE_HOME/network/admin/*.ora + +# MySQL +ls -la /etc/my.cnf +ls -la /var/lib/mysql/ + +# PostgreSQL +ls -la /var/lib/pgsql/data/pg_hba.conf +ls -la /var/lib/pgsql/data/postgresql.conf +``` +**조치:** +```bash +# Oracle: 640 이하 권한 설정 +chmod 640 $ORACLE_HOME/dbs/*.ora +chmod 640 $ORACLE_HOME/network/admin/*.ora +chown oracle:dba $ORACLE_HOME/dbs/*.ora + +# MySQL +chmod 640 /etc/my.cnf +chown mysql:mysql /etc/my.cnf + +# PostgreSQL +chmod 600 /var/lib/pgsql/data/pg_hba.conf +chown postgres:postgres /var/lib/pgsql/data/pg_hba.conf +``` + +### D-15: 리스너 로그 및 trace 파일 변경 제한 +**점검:** +```bash +# Oracle: listener.ora에서 ADMIN_RESTRICTIONS 확인 +grep ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: listener.ora에 추가 +# ADMIN_RESTRICTIONS_<리스너명> = ON +``` + +### D-16: Windows 인증 모드 사용 +**점검:** +```sql +-- MSSQL: 인증 모드 확인 +SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); +-- 1: Windows 인증 모드, 0: 혼합 모드 +``` +**조치:** +``` +-- MSSQL: SSMS > 서버 속성 > 보안 > "Windows 인증 모드" 선택 +``` + +## 3. 옵션 관리 + +### D-17: Audit Table 접근 제한 +**점검:** +```sql +-- Oracle: Audit 테이블 접근 권한 확인 +SELECT grantee, privilege FROM dba_tab_privs WHERE table_name LIKE '%AUDIT%'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.AUD$ FROM <계정명>; +``` + +### D-18: DBA 계정 Role이 Public으로 설정되지 않도록 조정 +**점검:** +```sql +-- Oracle: PUBLIC에 부여된 권한 확인 +SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'PUBLIC'; +``` +**조치:** +```sql +-- Oracle: PUBLIC에서 불필요 Role/권한 회수 +REVOKE FROM PUBLIC; +REVOKE EXECUTE ON <패키지명> FROM PUBLIC; +``` + +### D-19: OS_ROLES 등 FALSE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER OS_ROLES; +SHOW PARAMETER REMOTE_OS_AUTHENTICATION; +SHOW PARAMETER REMOTE_OS_ROLES; +``` +**조치:** +```sql +-- Oracle: init.ora 또는 spfile 수정 +ALTER SYSTEM SET OS_ROLES = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_AUTHENTICATION = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE; +-- DB 재시작 필요 +``` + +### D-20: 인가되지 않은 Object Owner 제한 +**점검:** +```sql +-- Oracle: Object Owner 확인 +SELECT owner, object_type, count(*) FROM dba_objects GROUP BY owner, object_type ORDER BY owner; +``` +**조치:** +```sql +-- 불필요한 Object Owner의 객체를 적절한 스키마로 이전 또는 삭제 +``` + +### D-21: 인가되지 않은 GRANT OPTION 사용 제한 +**점검:** +```sql +-- Oracle +SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE admin_option = 'YES'; +SELECT grantee, table_name, privilege, grantable FROM dba_tab_privs WHERE grantable = 'YES'; +``` +**조치:** +```sql +-- Oracle: ADMIN OPTION 제거 후 재부여 +REVOKE <권한> FROM <계정명>; +GRANT <권한> TO <계정명>; +``` + +### D-22: 자원 제한 기능 TRUE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER RESOURCE_LIMIT; +``` +**조치:** +```sql +-- Oracle +ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +``` + +### D-23: xp_cmdshell 사용 제한 +**점검:** +```sql +-- MSSQL +EXEC sp_configure 'xp_cmdshell'; +``` +**조치:** +```sql +-- MSSQL: xp_cmdshell 비활성화 +EXEC sp_configure 'show advanced options', 1; +RECONFIGURE; +EXEC sp_configure 'xp_cmdshell', 0; +RECONFIGURE; +``` + +### D-24: Registry Procedure 권한 제한 +**점검:** +```sql +-- MSSQL: 레지스트리 관련 확장 저장 프로시저 확인 +SELECT name FROM sys.objects WHERE name LIKE 'xp_reg%'; +``` +**조치:** +```sql +-- MSSQL: public에서 실행 권한 제거 +DENY EXECUTE ON xp_regread TO public; +DENY EXECUTE ON xp_regwrite TO public; +DENY EXECUTE ON xp_regdeletekey TO public; +DENY EXECUTE ON xp_regdeletevalue TO public; +DENY EXECUTE ON xp_regenumvalues TO public; +``` + +## 4. 패치 관리 + +### D-25: 주기적 보안 패치 및 벤더 권고 사항 적용 +**점검:** +```sql +-- Oracle: 버전 확인 +SELECT * FROM v$version; + +-- MSSQL: 버전 확인 +SELECT @@VERSION; + +-- MySQL: 버전 확인 +SELECT VERSION(); + +-- PostgreSQL: 버전 확인 +SELECT version(); +``` +**조치:** +``` +-- 공통: 벤더 보안 패치 사이트에서 최신 패치 확인 및 적용 +-- Oracle: https://www.oracle.com/security-alerts/ +-- MSSQL: https://learn.microsoft.com/ko-kr/sql/ +-- MySQL: https://dev.mysql.com/downloads/ +-- PostgreSQL: https://www.postgresql.org/support/security/ +``` + +### D-26: 감사 기록 정책 설정 +**점검:** +```sql +-- Oracle: Audit 설정 확인 +SHOW PARAMETER AUDIT_TRAIL; +SELECT * FROM dba_stmt_audit_opts; +SELECT * FROM dba_priv_audit_opts; + +-- MSSQL: 감사 설정 확인 +SELECT * FROM sys.server_audits; + +-- MySQL: 로그 설정 확인 +SHOW VARIABLES LIKE 'general_log%'; +SHOW VARIABLES LIKE 'log_bin%'; + +-- PostgreSQL +SHOW log_statement; +SHOW log_connections; +SHOW log_disconnections; +``` +**조치:** +```sql +-- Oracle: Audit 활성화 +ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE=SPFILE; +AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS; +AUDIT CREATE SESSION; + +-- MySQL: 일반 로그 활성화 +SET GLOBAL general_log = 'ON'; +SET GLOBAL general_log_file = '/var/log/mysql/general.log'; + +-- PostgreSQL: postgresql.conf +-- log_statement = 'all' +-- log_connections = on +-- log_disconnections = on +-- logging_collector = on +``` diff --git a/skills-ko/kesekit-check-ko/scripts/cii/network.md b/skills-ko/kesekit-check-ko/scripts/cii/network.md new file mode 100644 index 0000000..9d0b68d --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/cii/network.md @@ -0,0 +1,892 @@ +# 네트워크 장비 점검 스크립트 (N-01 ~ N-38) + +## 1. 계정 관리 + +### N-01: 비밀번호 설정 +**점검:** +``` +! Cisco IOS +Router> enable +Router# show running-config +! VTY, 콘솔, AUX 포트의 login/password 설정 확인 + +! Juniper Junos +user@host> configure +user@host# show + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - enable 비밀번호 +Router(config)# enable secret <비밀번호> +! VTY 비밀번호 +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! 콘솔 비밀번호 +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! AUX 비밀번호 +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> + +! Radware Alteon +Main# /cfg/sys/access/user/admpw +Main# apply +Main# save + +! Juniper Junos +user@host# set system root-authentication plain-test-passwd + +! Piolink PLOS +(config)# password +``` + +### N-02: 비밀번호 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! security passwords min-length 설정 확인 +``` +**조치:** +``` +! Cisco IOS - 비밀번호 최소 길이 설정 +Router(config)# security passwords min-length <길이> +``` + +### N-03: 암호화된 비밀번호 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! enable secret / username secret / service password-encryption 확인 + +! Juniper Junos +user@host# show +! encrypted-password 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# enable secret <비밀번호> +Router(config)# username <사용자> secret <비밀번호> +Router(config)# service password-encryption + +! Juniper Junos +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> +``` + +### N-04: 계정 잠금 임계값 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show login + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! Cisco IOS +Router(config)# login block-for <잠금시간> attempts <실패횟수> within <허용시간> + +! Juniper Junos +[edit system login retry-options] +user@host# set tries-before-disconnect <실패횟수> +user@host# set lockout-period <잠금시간> +``` + +### N-05: 사용자/명령어별 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show privilege + +! Juniper Junos +! [edit system login] 에서 superuser, read-only 클래스 분리 확인 +``` +**조치:** +``` +! Cisco IOS - 사용자별 권한 수준 지정 +Router(config)# username [ID] privilege [1-15] secret [PASS] +! 명령어별 권한 수준 지정 (중요 명령어 레벨 15 적용) +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging + +! Juniper Junos +[edit system login] +login { + class class-name { + allow-commands "regular-expression"; + deny-commands "regular-expression"; + idle-timeout minutes; + permissions [ permissions ]; + } +} + +! Piolink PLOS +! 슈퍼 유저(root)와 일반 유저로 권한 분리 관리 +``` + +## 2. 접근 관리 + +### N-06: VTY 접근(ACL) 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list 및 access-class 설정 확인 + +! Juniper Junos +user@host# show +! firewall filter + 루프백 인터페이스 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty 0 4 +Router(config-line)# access-class in + +! Radware Alteon +# cfg > sys > access > mgmt > add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply > save + +! Juniper Junos +user@host# set policy-options prefix-list +user@host# edit firewall family inet filter +user@host# edit term +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set from protocol tcp +user@host# set from destination-port ssh +user@host# set then discard +! 기본 허용 종료 +user@host# set term then accept +! 루프백에 적용 +user@host# set interfaces lo0 unit 0 family inet filter input + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-07: Session Timeout 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! exec-timeout 설정 확인 +``` +**조치:** +``` +! Cisco IOS (10분 이하 권고, 예: 5분) +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 + +! Radware Alteon +# cfg > sys > idle <분> > apply > save + +! Juniper Junos +[edit login] +user@host# set class <클래스> idle-timeout <분> + +! Piolink PLOS +(config)# terminal timeout <분> +``` + +### N-08: VTY 접속 시 안전한 프로토콜 사용 +**점검:** +``` +! Cisco IOS +Router# show ip ssh +Router# show version + +! Juniper Junos +user@host# set ssh +``` +**조치:** +``` +! Cisco IOS - SSH 설정 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +Router(config)# ip ssh version 2 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh authentication-retries <횟수> +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh + +! Radware Alteon +# cfg > /sys/sshd ena > /sys/sshd on > apply > save + +! Juniper Junos +root# set system services ssh +root# delete system services telnet +root# commit + +! Piolink PLOS +(config-management-access)# ssh status enable +(config-management-access)# telnet status disable +(config-management-access)# apply +``` + +### N-09: 불필요한 보조 입출력 포트 사용 금지 +**점검:** +``` +! Cisco IOS +Router# show running +! 불필요 포트 Up/Down 확인 +``` +**조치:** +``` +! Cisco IOS - AUX 포트 차단 +Router(config)# line aux 0 +Router(config-line)# no password +Router(config-line)# transport input none +Router(config-line)# no exec +Router(config-line)# exec-timeout 0 1 + +! Juniper Junos +[edit system ports] +root# set auxiliary disable +root# commit +``` + +### N-10: 로그인 시 경고 메시지 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! banner 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# banner motd # <경고 문구> # +Router(config)# banner login # <경고 문구> # +Router(config)# banner exec # <경고 문구> # + +! Radware Alteon +# cfg > sys > banner > apply > save + +! Juniper Junos +[edit system login] +message "경고 문구" +``` + +### N-11: 원격로그 서버 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging trap informational +Router(config)# logging +Router(config)# logging facility local6 +Router(config)# logging source-interface serial 0 + +! Radware Alteon +# cfg > sys > /syslog/host > apply > save + +! Juniper Junos +user@host# edit system syslog +user@host# set system syslog file message any error +user@host# set system syslog host any any +user@host# set archive files 5 sizes 5m world-readable + +! Piolink PLOS +# logging server enable +# logging server +``` + +## 3. 패치 관리 + +### N-12: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +``` +! Cisco IOS +Router# show version + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! 공통 +! 1. 하드웨어/소프트웨어/EOL/패치 현황 문서화 +! 2. 벤더 보안 패치 및 권고사항 입수 +! 3. 취약점 영향도/발생 가능성 분석 후 패치 우선순위 결정 +! 4. 테스트베드(GNS3 등)에서 패치 검증 +! 5. 패치 적용 전 이미지/설정 백업 후 적용 +! 벤더별 패치 사이트: +! Cisco: https://software.cisco.com +! Juniper: https://support.juniper.net/support/downloads +! 공통: https://www.krcert.or.kr +``` + +## 4. 로그 관리 + +### N-13: 로깅 버퍼 크기 설정 +**점검:** +``` +! Cisco IOS +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging buffered 16000 +Router(config)# logging buffered informational + +! Piolink PLOS +(config)# logging buffer +(config)# logging priority +``` + +### N-14: 정책에 따른 로깅 설정 +**점검:** +``` +! Cisco IOS +Router# show logging + +! Juniper Junos +user@host# show log messages +``` +**조치:** +``` +! 공통 - 6가지 로깅 방법 활용 +! 1. 콘솔 로깅: 콘솔 포트에서만 확인 +! 2. Buffered 로깅: RAM에 저장 (버퍼 가득 차면 오래된 로그 대체) +! 3. Terminal 로깅: terminal monitor로 VTY에 전송 +! 4. Syslog: 외부 syslog 서버에 저장 +! 5. SNMP traps: 외부 SNMP 서버에 전송 +! 6. ACL 침입 로깅: ACL 룰에 log/log-input 추가 +``` + +### N-15: NTP 및 시각 동기화 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ntp server 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# ntp server + +! Radware Alteon +# cfg > /sys/ntp > on +# prisrvr +# intrval <동기화주기> +# tzone +9:00 +# apply > save + +! Juniper Junos +[edit system ntp] +user@host# set server +user@host# set boot-server +``` + +### N-16: Timestamp 로그 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service timestamps 확인 +``` +**조치:** +``` +! Cisco IOS - UTC 시간 밀리초 단위 +Router(config)# service timestamps log datetime msec show-timezone +! 로컬 시간(KST) 밀리초 단위 +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone +``` + +## 5. 기능 관리 + +### N-17: SNMP 서비스 확인 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show snmp + +! Juniper Junos +user@host# show snmp + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - SNMP 비활성화 +Router(config)# no snmp-server + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: d + +! Juniper Junos +user@host# no set snmp community public +``` + +### N-18: SNMP Community String 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community 설정 확인 (public/private 사용 여부) +``` +**조치:** +``` +! Cisco IOS +Router(config)# snmp-server community <복잡한String> + +! Radware Alteon +# cfg/sys/ssnmp +# rcomm <복잡한String> +# wcomm <복잡한String> +# apply > save + +! Juniper Junos +user@host# set snmp community <복잡한String> authorization read-only + +! Piolink PLOS +switch(config-snmp)# community <복잡한String> +switch(config-snmp)# status enable +switch(config-snmp)# apply +``` + +### N-19: SNMP ACL 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community + ACL 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + +! Juniper Junos +[edit snmp] +user@host# edit client-list +user@host# set default restrict +user@host# set +user@host# up +user@host# edit community +user@host# set client-list-name + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-20: SNMP Community 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community RO/RW 확인 +``` +**조치:** +``` +! Cisco IOS - RO 권한만 설정 +Router(config)# snmp-server community RO + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: r +>> Main# apply + +! Juniper Junos +[edit snmp] +user@host# delete community +user@host# set community authorization read-only +! SNMPv3 그룹 RW 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <모델> security-level <레벨> write-view + +! Piolink PLOS +switch(config-snmp)# policy read-only +switch(config-snmp)# apply +``` + +### N-21: TFTP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tftp +``` + +### N-22: Spoofing 방지 필터링 적용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list deny 설정 확인 + +! Juniper Junos +! Configure/Apply Firewall Filters 확인 +``` +**조치:** +``` +! Cisco IOS - Anti-Spoofing ACL (Extended ACL 100-199) +Router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +Router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +Router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +Router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any +Router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +Router(config)# access-list permit ip any any +Router(config)# interface serial <인터페이스> +Router(config-if)# ip access-group in + +! Juniper Junos +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +[edit firewall family inet filter ] +user@host# set term then accept +user@host# set interfaces <인터페이스> unit <유닛> family inet filter input +``` + +### N-23: DDoS 공격 방어 설정 또는 DDoS 장비 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show configuration +``` +**조치:** +``` +! 공통 - DDoS 방어 3가지 방법 +! 1. ACL: 스푸핑 방지 필터링 사전 적용, 공격 유형별 IP/프로토콜/포트 임시 차단 +! 2. Rate Limiting: UDP, ICMP, TCP SYN 패킷 대역폭 제한 +! 3. TCP Intercept: SYN Flooding 방어 +! - Intercept 모드: 라우터가 SYN-ACK 대신 응답 +! - Watch 모드: SYN 전달 후 30초 미완료 시 RST 전송 +``` + +### N-24: 사용하지 않는 인터페이스 비활성화 +**점검:** +``` +! Cisco IOS +Router# show interface +! Administratively down 확인 + +! Juniper Junos +user@host# show interface terse +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# shutdown + +! Radware Alteon +>> Main# /cfg/port <포트>/dis +>> Main# apply + +! Juniper Junos +[edit interfaces] +user@host# set <인터페이스> disable + +! Piolink PLOS +switch(config)# port <포트> status disable +switch(config)# apply +``` + +### N-25: TCP Keepalive 서비스 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service tcp-keepalives 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# service tcp-keepalives-in +Router(config)# service tcp-keepalives-out +``` + +### N-26: Finger 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip finger + +! Juniper Junos +[edit system services] +user@host# delete finger +user@host# commit +``` + +### N-27: 웹 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip http server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip http server +Router(config)# no ip http secure-server + +! Radware Alteon +>> Main# /cfg/sys/access/https/https dis +>> Main# apply + +! Juniper Junos +user@host# delete system services web-management + +! Piolink PLOS +(config-management-access)# http status disable +(config-management-access)# https status disable +``` + +### N-28: TCP/UDP Small 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +``` + +### N-29: Bootp 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip bootp server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip bootp server +! DHCP 유지하고 BOOTP만 차단 시 +Router(config)# ip dhcp bootp ignore + +! Radware Alteon +>> Main# /cfg/sys/bootp dis +>> Main# apply + +! Juniper Junos +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스> server <주소> +``` + +### N-30: CDP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show cdp +``` +**조치:** +``` +! Cisco IOS - 전체 비활성화 +Router(config)# no cdp run +! 특정 인터페이스 비활성화 +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +``` + +### N-31: Directed-broadcast 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast + +! Radware Alteon +# cfg/l3/frwd > dirbr disable > apply > save + +! Passport +# config vlan ip directed-broadcast > disable +``` + +### N-32: Source Routing 차단 +**점검:** +``` +! Cisco IOS / Juniper Junos +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip source-route + +! Juniper Junos +user@host# set chassis no-source-route +``` + +### N-33: Proxy ARP 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp + +! Juniper Junos +[edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp +``` + +### N-34: ICMP unreachable, redirect 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! 각 인터페이스 no ip unreachables / no ip redirects 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects + +! Juniper Junos - 전체 장비 +[edit system] +user@host# set no-redirects +! 특정 인터페이스 +[edit interfaces] +user@host# set <인터페이스> unit <유닛> family <패밀리> no-redirects +``` + +### N-35: identd 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip identd +``` + +### N-36: Domain Lookup 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip domain lookup +``` + +### N-37: PAD 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service pad +``` + +### N-38: mask-reply 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show ip interface +! "ICMP mask replies are never sent" 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +``` diff --git a/skills-ko/kesekit-check-ko/scripts/cii/pc.md b/skills-ko/kesekit-check-ko/scripts/cii/pc.md new file mode 100644 index 0000000..167c9ca --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/cii/pc.md @@ -0,0 +1,348 @@ +# PC 점검 스크립트 (PC-01 ~ PC-18) + +## 1. 계정 관리 + +### PC-01: 비밀번호의 주기적 변경 +**점검:** +```powershell +# 최대 암호 사용 기간 확인 +net accounts | findstr "최대" +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol.cfg +findstr "MaximumPasswordAge" C:\secpol.cfg +findstr "MinimumPasswordAge" C:\secpol.cfg +findstr "PasswordHistorySize" C:\secpol.cfg +``` +**조치:** +```powershell +# 최대 암호 사용 기간 90일 설정 +net accounts /maxpwage:90 +# 최소 암호 사용 기간 1일 +net accounts /minpwage:1 + +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최대 암호 사용 기간": 90일 +# "최소 암호 사용 기간": 1일 +# "최근 암호 기억": 24개 + +# 계정별 비밀번호 기간 설정 +# LUSRMGR.MSC > 사용자 > 계정 속성 > "암호 사용 기간 제한 없음" 해제 +``` + +### PC-02: 비밀번호 관리정책 설정 +**점검:** +```powershell +# 암호 복잡성 및 최소 길이 확인 +net accounts +secedit /export /cfg C:\secpol.cfg +findstr "MinimumPasswordLength" C:\secpol.cfg +findstr "PasswordComplexity" C:\secpol.cfg +``` +**조치:** +```powershell +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최소 암호 길이": 8문자 이상 +# "암호는 복잡성을 만족해야 함": 사용함 + +# 복잡성 기준: 영문 대/소문자, 숫자, 특수문자 중 +# 2종류 조합 시 최소 10자리 이상 +# 3종류 조합 시 최소 8자리 이상 +``` + +### PC-03: 복구 콘솔에서 자동 로그온 금지 +**점검:** +```powershell +# 복구 콘솔 자동 로그온 설정 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "복구 콘솔: 자동 관리 로그온 허용" -> "사용 안 함" + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel /t REG_DWORD /d 0 /f +``` + +## 2. 서비스 관리 + +### PC-04: 공유 폴더 제거 +**점검:** +```powershell +# 공유 폴더 목록 확인 +net share +# 기본 공유 폴더 확인 (C$, D$, Admin$, IPC$) +Get-SmbShare +# AutoShareWks 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks +``` +**조치:** +```powershell +# 기본 공유 폴더 삭제 +net share C$ /delete +net share D$ /delete +net share Admin$ /delete + +# 재부팅 시 자동 공유 방지 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 일반 공유 폴더 삭제 +net share <공유폴더명> /delete + +# 공유 폴더 접근에 "Everyone" 제거 (GUI) +# 컴퓨터 관리 > 공유 폴더 > 공유 > 속성 > 공유 사용 권한 > Everyone 제거 + +# 암호로 보호된 공유 설정 +# 설정 > 네트워크 > 고급 공유 설정 > 모든 네트워크 > "암호로 보호된 공유" 켬 +``` + +### PC-05: 불필요한 서비스 제거 +**점검:** +```powershell +# 실행 중인 서비스 목록 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType +# 특정 불필요 서비스 확인 +Get-Service -Name "RemoteRegistry","Messenger","Clipbook","Alerter" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# 불필요 서비스 중지 및 시작 유형 변경 +# GUI: services.msc > 해당 서비스 > 속성 > 시작 유형: 사용 안 함 + +# PowerShell로 서비스 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 일반적으로 불필요한 서비스 예시: +# Alerter, Clipbook, Computer Browser, DHCP Client (고정IP 사용 시) +# Distributed Link Tracking Client, Error Reporting Service +# Messenger, NetMeeting Remote Desktop Sharing +# Print Spooler (프린터 미사용 시), Remote Registry +# Simple TCP/IP Services, Universal Plug and Play Device Host +``` + +### PC-06: 비인가 상용 메신저 사용 금지 +**점검:** +```powershell +# 설치된 메신저 프로그램 확인 +Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -match "카카오톡|Skype|NateOn|Telegram"} | Select-Object Name +# 실행 중인 메신저 프로세스 확인 +Get-Process | Where-Object {$_.ProcessName -match "kakaotalk|skype|nateon"} | Select-Object ProcessName +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows Messenger +# "Windows Messenger를 실행 허용 안 함": 사용 + +# 상용 메신저 제거 +# 설정 > 앱 > 앱 및 기능 > 해당 메신저 제거 +``` + +### PC-07: 파일 시스템이 NTFS 포맷으로 설정 +**점검:** +```powershell +# 디스크 볼륨 파일 시스템 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size +# 또는 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT32 -> NTFS 변환 (비파괴 변환) +convert C: /fs:ntfs + +# 변환 후 폴더/파일에 적합한 ACL 적용 +# 속성 > 보안 > 편집 > 그룹/계정별 권한 설정 +``` + +### PC-08: 멀티 부팅 방지 +**점검:** +```powershell +# 설치된 OS 확인 +bcdedit /enum +# 또는 +msconfig +# 부팅 탭에서 2개 이상 OS 확인 +``` +**조치:** +```powershell +# msconfig > 부팅 탭 > 사용하지 않는 OS 선택 후 삭제 +# 또는 +bcdedit /delete {identifier} +``` + +### PC-09: 브라우저 종료 시 임시 인터넷 파일 삭제 +**점검:** +```powershell +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 +# > Internet Explorer > 인터넷 제어판 > 고급 페이지 +# "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기": 사용 + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit /t REG_DWORD /d 1 /f +``` + +## 3. 패치 관리 + +### PC-10: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```powershell +# 설치된 HOT FIX 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +# Windows Update 설정 확인 +Get-WindowsUpdateLog +# 자동 업데이트 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" +``` +**조치:** +```powershell +# 설정 > Windows Update > 업데이트 확인 +# PowerShell로 업데이트 확인 및 설치 +Install-Module PSWindowsUpdate -Force +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot +``` + +### PC-11: 지원이 종료되지 않은 Windows OS Build 적용 +**점검:** +```powershell +# 현재 OS 빌드 버전 확인 +[System.Environment]::OSVersion.Version +Get-ComputerInfo | Select-Object WindowsVersion, OsBuildNumber, WindowsProductName +winver +``` +**조치:** +```powershell +# Windows Update를 통한 최신 빌드 적용 +# 설정 > Windows Update > 업데이트 확인 +# 수동 업데이트: https://www.microsoft.com/ko-kr/software-download/ +``` + +## 4. 보안 관리 + +### PC-12: Windows 자동 로그인 점검 +**점검:** +```powershell +# 자동 로그인 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword +``` +**조치:** +```powershell +# 자동 로그인 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +# DefaultPassword 값 삭제 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +``` + +### PC-13: 바이러스 백신 프로그램 설치 및 주기적 업데이트 +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntivirusSignatureLastUpdated, AntispywareEnabled +# 백신 설치 여부 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState +``` +**조치:** +```powershell +# Windows Defender 업데이트 +Update-MpSignature +# 설정 > Windows 보안 > 바이러스 및 위협 방지 > 보호 업데이트 > 업데이트 확인 +``` + +### PC-14: 백신 실시간 감시 기능 활성화 +**점검:** +```powershell +# 실시간 보호 상태 확인 +Get-MpPreference | Select-Object DisableRealtimeMonitoring +Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled +``` +**조치:** +```powershell +# 실시간 보호 활성화 +Set-MpPreference -DisableRealtimeMonitoring $false +# GUI: Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 켬 +``` + +### PC-15: OS에서 제공하는 침입차단 기능 활성화 +**점검:** +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled +netsh advfirewall show allprofiles state +``` +**조치:** +```powershell +# 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True +# 또는 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정/해제 > "사용" 설정 +``` + +### PC-16: 화면보호기 대기 시간 설정 및 재시작 시 암호 보호 +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +``` +**조치:** +```powershell +# 화면보호기 활성화 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +# 대기 시간 설정 (600초 = 10분 이하) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +# 재시작 시 암호 보호 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f + +# GUI: 설정 > 개인설정 > 잠금화면 > 화면보호기 +# 대기: 10분 이하 / "다시 시작 시 로그온 화면 표시" 체크 +``` + +### PC-17: 이동식 미디어 자동 실행 방지 +**점검:** +```powershell +# 자동 실행 정책 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun +# GPO 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoAutorun +``` +**조치:** +```powershell +# 모든 드라이브 자동 실행 끄기 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 자동 실행 정책 +# "자동 실행 끄기": 사용 - 모든 드라이브 + +# 제어판: 하드웨어 및 소리 > 자동 실행 +# "모든 미디어 및 장치에 자동 실행 사용" 체크 해제 +``` + +### PC-18: 원격 지원 금지 +**점검:** +```powershell +# 원격 지원 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +``` +**조치:** +```powershell +# 원격 지원 비활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 0 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 원격 지원 +# "원격 지원 제공 구성": 사용 안 함 + +# 원격 데스크톱 비활성화 (필요 시) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f +``` diff --git a/skills-ko/kesekit-check-ko/scripts/cii/unix.md b/skills-ko/kesekit-check-ko/scripts/cii/unix.md new file mode 100644 index 0000000..6969221 --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/cii/unix.md @@ -0,0 +1,1531 @@ +# Unix 서버 점검 및 조치 스크립트 + +## 1. 계정 관리 + +### U-01: root 계정 원격 접속 제한 +**판단기준:** 원격터미널 서비스 사용 시 root 직접 접속을 차단한 경우 양호 +**점검:** +```bash +# SSH root 접속 설정 확인 +grep -i "PermitRootLogin" /etc/ssh/sshd_config + +# Telnet root 접속 설정 확인 (SOLARIS) +grep "CONSOLE" /etc/default/login + +# Telnet pts 설정 확인 (LINUX) +cat /etc/securetty | grep pts + +# Telnet rlogin 설정 확인 (AIX) +grep "rlogin" /etc/security/user +``` +**조치:** +```bash +# SSH - 모든 OS 공통 +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config +systemctl restart sshd + +# Telnet - SOLARIS +# /etc/default/login 파일에 설정 +echo "CONSOLE=/dev/console" >> /etc/default/login + +# Telnet - LINUX (/etc/securetty에서 pts 제거) +sed -i '/^pts\//d' /etc/securetty +# /etc/pam.d/login에 모듈 추가 +# auth required /lib/security/pam_securetty.so + +# Telnet - AIX (/etc/security/user) +chsec -f /etc/security/user -s root -a rlogin=false + +# HP-UX SSH +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /opt/ssh/etc/sshd_config +``` + +### U-02: 비밀번호 관리정책 설정 +**판단기준:** 영문+숫자+특수문자 8자리 이상, 최소사용 1일, 최대사용 90일, 이력 4회 이상 양호 +**점검:** +```bash +# LINUX - 비밀번호 정책 확인 +grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" /etc/login.defs +cat /etc/security/pwquality.conf 2>/dev/null +grep pam_pwquality /etc/pam.d/system-auth 2>/dev/null +grep pam_pwquality /etc/pam.d/common-password 2>/dev/null + +# SOLARIS +cat /etc/default/passwd | grep -E "HISTORY|PASSLENGTH|MINDIGIT|MINUPPER|MINLOWER|MINSPECIAL" + +# AIX +grep -E "minage|maxage|minalpha|minother|minlen|histsize" /etc/security/user +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/login.defs +sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs +sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs + +# LINUX (Redhat) - /etc/security/pwquality.conf +cat > /etc/security/pwquality.conf <<'CONF' +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +CONF + +# SOLARIS - /etc/default/passwd +cat >> /etc/default/passwd <<'CONF' +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO +CONF + +# AIX - /etc/security/user +chsec -f /etc/security/user -s default -a minage=1 +chsec -f /etc/security/user -s default -a maxage=12 +chsec -f /etc/security/user -s default -a minalpha=2 +chsec -f /etc/security/user -s default -a minother=2 +chsec -f /etc/security/user -s default -a minlen=8 +chsec -f /etc/security/user -s default -a histsize=4 + +# HP-UX - /etc/default/security +cat >> /etc/default/security <<'CONF' +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +CONF +``` + +### U-03: 계정 잠금 임계값 설정 +**판단기준:** 계정 잠금 임계값이 10회 이하로 설정된 경우 양호 +**점검:** +```bash +# LINUX - PAM 계정잠금 설정 확인 +grep pam_tally /etc/pam.d/system-auth 2>/dev/null +grep pam_faillock /etc/pam.d/system-auth 2>/dev/null +grep -E "deny|unlock_time" /etc/security/faillock.conf 2>/dev/null +authselect current 2>/dev/null + +# SOLARIS +grep "RETRIES" /etc/default/login +grep "LOCK_AFTER_RETRIES" /etc/security/policy.conf 2>/dev/null + +# AIX +grep "loginretries" /etc/security/user + +# HP-UX +grep "AUTH_MAXTRIES" /etc/default/security 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat - authselect 방식, RHEL 8+) +authselect enable-feature with-faillock +# /etc/security/faillock.conf 수정 +cat >> /etc/security/faillock.conf <<'CONF' +silent +deny = 10 +unlock_time = 120 +CONF + +# LINUX (Redhat - pam_faillock 방식) +# /etc/pam.d/system-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +# /etc/pam.d/password-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# LINUX (Debian - pam_faillock 방식) +# /etc/pam.d/common-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# SOLARIS (5.9+) +# /etc/security/policy.conf +echo "LOCK_AFTER_RETRIES=YES" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/user -s default -a loginretries=10 + +# HP-UX (11.v3+) +echo "AUTH_MAXTRIES=10" >> /etc/default/security +``` + +### U-04: 비밀번호 파일 보호 +**판단기준:** 쉐도우 비밀번호를 사용하거나 비밀번호를 암호화하여 저장하는 경우 양호 +**점검:** +```bash +# /etc/passwd 두 번째 필드가 'x'인지 확인 (x이면 shadow 사용 중) +awk -F: '$2 != "x" {print $1" : 비밀번호 평문 저장 의심"}' /etc/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX - 쉐도우 비밀번호 적용 +pwconv + +# HP-UX - Trusted Mode 전환 +/etc/tsconvert +``` + +### U-05: root 이외의 UID가 '0' 금지 +**판단기준:** root 계정과 동일한 UID(0)를 갖는 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '$3==0 && $1!="root" {print $1" has UID 0"}' /etc/passwd +``` +**조치:** +```bash +# UID 변경 +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-06: 사용자 계정 su 기능 제한 +**판단기준:** su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 양호 +**점검:** +```bash +# wheel 그룹 확인 +grep wheel /etc/group +# su 명령어 권한 확인 +ls -l /usr/bin/su +# PAM 설정 확인 (LINUX) +grep pam_wheel /etc/pam.d/su +``` +**조치:** +```bash +# wheel 그룹 생성 (없는 경우) +groupadd wheel +# su 명령 그룹 변경 및 권한 설정 +chgrp wheel /usr/bin/su +chmod 4750 /usr/bin/su +# 허용 계정 등록 +usermod -G wheel + +# LINUX PAM 설정 - /etc/pam.d/su +# auth required pam_wheel.so use_uid +``` + +### U-07: 불필요한 계정 제거 +**판단기준:** 불필요한 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +# 시스템 계정 확인 +cat /etc/passwd +# 마지막 로그인 기록 확인 +last | head -30 +# 로그인 불가 계정 확인 +awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd +``` +**조치:** +```bash +userdel <사용자_이름> +# AIX의 경우 +# rmuser <사용자_이름> +``` + +### U-08: 관리자 그룹에 최소한의 계정 포함 +**판단기준:** 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 양호 +**점검:** +```bash +grep "^root:" /etc/group +``` +**조치:** +```bash +gpasswd -d <사용자_이름> root +# AIX의 경우 +# chgrpmem -m - <사용자_이름> root +``` + +### U-09: 계정이 존재하지 않는 GID 금지 +**판단기준:** 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 양호 +**점검:** +```bash +# /etc/group과 /etc/passwd 비교 +cat /etc/group +cat /etc/gshadow 2>/dev/null +``` +**조치:** +```bash +groupdel <그룹_이름> +``` + +### U-10: 동일한 UID 금지 +**판단기준:** 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d +# 중복 UID가 있다면 해당 계정 확인 +awk -F: '{uid[$3]=uid[$3]" "$1} END{for(u in uid) if(split(uid[u],a," ")>2) print "UID "u":"uid[u]}' /etc/passwd +``` +**조치:** +```bash +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-11: 사용자 shell 점검 +**판단기준:** 로그인이 필요하지 않은 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +cat /etc/passwd | grep -E "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^games|^gopher" | grep -v admin +``` +**조치:** +```bash +# 불필요한 계정에 nologin 쉘 부여 +usermod -s /bin/false <계정명> +usermod -s /sbin/nologin <계정명> +``` + +### U-12: 세션 종료 시간 설정 +**판단기준:** Session Timeout이 600초(10분) 이하로 설정된 경우 양호 +**점검:** +```bash +echo $TMOUT +grep -i tmout /etc/profile /etc/bashrc 2>/dev/null +grep autologout /etc/csh.cshrc /etc/csh.login 2>/dev/null +``` +**조치:** +```bash +# sh, ksh, bash - /etc/profile에 추가 +echo "TMOUT=600" >> /etc/profile +echo "export TMOUT" >> /etc/profile + +# csh - /etc/csh.cshrc 또는 /etc/csh.login에 추가 +echo "set autologout=10" >> /etc/csh.cshrc +``` + +### U-13: 안전한 비밀번호 암호화 알고리즘 사용 +**판단기준:** SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 양호 ($5=SHA-256, $6=SHA-512) +**점검:** +```bash +# 암호화 알고리즘 확인 ($1=MD5, $5=SHA-256, $6=SHA-512) +awk -F: '$2 ~ /^\$/ {split($2,a,"$"); print $1" -> $"a[2]}' /etc/shadow 2>/dev/null + +# LINUX +grep ENCRYPT_METHOD /etc/login.defs +``` +**조치:** +```bash +# LINUX (Redhat) +sed -i 's/^ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' /etc/login.defs +# /etc/pam.d/system-auth +# password sufficient pam_unix.so sha512 + +# SOLARIS +# /etc/security/policy.conf +echo "CRYPT_DEFAULT=6" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/login.cfg -s usw -a pwd_algorithm=ssha512 + +# HP-UX +echo "CRYPT_DEFAULT=6" >> /etc/default/security +``` + +--- + +## 2. 파일 및 디렉터리 관리 + +### U-14: root 홈, 패스 디렉터리 권한 및 패스 설정 +**판단기준:** PATH 환경변수에 "."이 맨 앞이나 중간에 포함되지 않은 경우 양호 +**점검:** +```bash +echo $PATH | tr ':' '\n' | grep -n "^\.$" +echo $PATH | grep -E "(^\.:|:\.:|:\.$ )" +``` +**조치:** +```bash +# 환경설정 파일에서 PATH 변숫값에서 "." 제거 또는 맨 마지막으로 이동 +# ~/.profile, ~/.bashrc, /etc/profile 등에서 수정 +# 예: PATH=$PATH:$HOME/bin (상대경로 "." 삭제) +``` + +### U-15: 파일 및 디렉터리 소유자 설정 +**판단기준:** 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 양호 +**점검:** +```bash +find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +``` +**조치:** +```bash +# 불필요한 파일 제거 +rm <파일_이름> +rm -r <디렉터리_이름> +# 사용 중인 파일의 소유자 변경 +chown <사용자_이름> <파일명> +chgrp <그룹_이름> <파일명> +``` + +### U-16: /etc/passwd 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/passwd +``` +**조치:** +```bash +chown root /etc/passwd +chmod 644 /etc/passwd +``` + +### U-17: 시스템 시작 스크립트 권한 설정 +**판단기준:** 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +# LINUX (init) +ls -al /etc/rc.d/*/* 2>/dev/null +# LINUX (systemd) +ls -al /etc/systemd/system/* 2>/dev/null +# SOLARIS +ls -al /etc/rc*.d/* 2>/dev/null +``` +**조치:** +```bash +chown root <파일_이름> +chmod o-w <파일_이름> +``` + +### U-18: /etc/shadow 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 400 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/shadow +# AIX +ls -l /etc/security/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX +chown root /etc/shadow +chmod 400 /etc/shadow + +# AIX +chown root /etc/security/passwd +chmod 400 /etc/security/passwd +``` + +### U-19: /etc/hosts 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts +``` +**조치:** +```bash +chown root /etc/hosts +chmod 644 /etc/hosts +``` + +### U-20: /etc/(x)inetd.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/inetd.conf 2>/dev/null +ls -l /etc/xinetd.conf 2>/dev/null +ls -l /etc/xinetd.d/* 2>/dev/null +ls -l /etc/systemd/system.conf 2>/dev/null +``` +**조치:** +```bash +# inetd +chown root /etc/inetd.conf +chmod 600 /etc/inetd.conf + +# xinetd +chown root /etc/xinetd.conf +chmod 600 /etc/xinetd.conf +chown -R root /etc/xinetd.d/ +chmod -R 600 /etc/xinetd.d/ + +# systemd +chown root /etc/systemd/system.conf +chmod 600 /etc/systemd/system.conf +``` + +### U-21: /etc/(r)syslog.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/syslog.conf /etc/rsyslog.conf 2>/dev/null +``` +**조치:** +```bash +chown root /etc/rsyslog.conf +chmod 640 /etc/rsyslog.conf +``` + +### U-22: /etc/services 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/services +``` +**조치:** +```bash +chown root /etc/services +chmod 644 /etc/services +``` + +### U-23: SUID, SGID, Sticky bit 설정 파일 점검 +**판단기준:** 주요 실행 파일의 권한에 불필요한 SUID/SGID가 부여되어 있지 않은 경우 양호 +**점검:** +```bash +find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +``` +**조치:** +```bash +# 불필요한 특수 권한 제거 +chmod -s <파일_이름> + +# 특정 그룹에서만 사용하도록 제한 +chgrp <그룹_이름> +chmod 4750 +``` + +### U-24: 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +**판단기준:** 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정이고, 소유자 외 쓰기 권한이 없는 경우 양호 +**점검:** +```bash +# 각 사용자 홈 디렉터리의 환경변수 파일 확인 +ls -la ~/.profile ~/.kshrc ~/.cshrc ~/.bashrc ~/.bash_profile ~/.login ~/.exrc ~/.netrc 2>/dev/null +``` +**조치:** +```bash +chown <환경변수_파일> +chmod o-w <환경변수_파일> +``` + +### U-25: world writable 파일 점검 +**판단기준:** world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 양호 +**점검:** +```bash +find / -type f -perm -2 -exec ls -l {} \; 2>/dev/null +``` +**조치:** +```bash +# 일반 사용자 쓰기 권한 제거 +chmod o-w <파일_이름> +# 불필요한 파일 제거 +rm <파일_이름> +``` + +### U-26: /dev에 존재하지 않는 device 파일 점검 +**판단기준:** /dev 디렉터리에 존재하지 않는 device 파일을 제거한 경우 양호 +**점검:** +```bash +find /dev -type f -exec ls -l {} \; +``` +**조치:** +```bash +rm <파일_이름> +``` + +### U-27: $HOME/.rhosts, hosts.equiv 사용 금지 +**판단기준:** rlogin/rsh/rexec 미사용 또는 사용 시 소유자 root, 권한 600 이하, "+" 설정 없는 경우 양호 +**점검:** +```bash +find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null +cat /etc/hosts.equiv 2>/dev/null +ls -la /etc/hosts.equiv 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.equiv +chmod 600 /etc/hosts.equiv +chown root $HOME/.rhosts +chmod 600 $HOME/.rhosts +# "+" 옵션 제거 후 허용 호스트 및 계정만 등록 +``` + +### U-28: 접속 IP 및 포트 제한 +**판단기준:** 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 양호 +**점검:** +```bash +# TCP Wrapper +cat /etc/hosts.allow 2>/dev/null +cat /etc/hosts.deny 2>/dev/null + +# iptables +iptables -L 2>/dev/null + +# firewalld +firewall-cmd --list-all 2>/dev/null + +# UFW +ufw status numbered 2>/dev/null +``` +**조치:** +```bash +# TCP Wrapper +echo "ALL:ALL" > /etc/hosts.deny +echo "sshd : <허용_IP>" >> /etc/hosts.allow + +# iptables +iptables -A INPUT -p tcp -s --dport <포트> -j ACCEPT +iptables-save + +# firewalld +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="" port protocol="tcp" port="<포트>" accept' +firewall-cmd --reload + +# UFW +ufw allow from to any port <포트> +ufw reload +``` + +### U-29: hosts.lpd 파일 소유자 및 권한 설정 +**판단기준:** /etc/hosts.lpd 파일이 존재하지 않거나, 소유자 root이고 권한 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts.lpd 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.lpd +chmod 600 /etc/hosts.lpd +``` + +### U-30: UMASK 설정 관리 +**판단기준:** UMASK 값이 022 이상으로 설정된 경우 양호 +**점검:** +```bash +umask +grep -i umask /etc/profile /etc/bashrc /etc/login.defs 2>/dev/null +# SOLARIS +grep UMASK /etc/default/login 2>/dev/null +``` +**조치:** +```bash +# /etc/profile에 추가 +echo "umask 022" >> /etc/profile +echo "export umask" >> /etc/profile + +# LINUX - /etc/login.defs +sed -i 's/^UMASK.*/UMASK 022/' /etc/login.defs + +# SOLARIS - /etc/default/login +echo "UMASK=022" >> /etc/default/login + +# FTP umask 설정 +# vsFTP: vsftpd.conf -> local_umask=022 +# ProFTP: proftpd.conf -> Umask 022 +``` + +### U-31: 홈디렉토리 소유자 및 권한 설정 +**판단기준:** 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +cat /etc/passwd | awk -F: '{print $1" "$6}' | while read user dir; do + ls -ald "$dir" 2>/dev/null +done +``` +**조치:** +```bash +chown <사용자_이름> <홈_디렉터리> +chmod o-w <홈_디렉터리> +``` + +### U-32: 홈 디렉토리로 지정한 디렉토리의 존재 관리 +**판단기준:** 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $1" "$6}' /etc/passwd | while read user dir; do + [ ! -d "$dir" ] && echo "$user : $dir 존재하지 않음" +done +``` +**조치:** +```bash +# 불필요한 계정 삭제 +userdel <사용자_이름> +# 사용중인 계정의 홈 디렉터리 생성 +mkdir -p /home/<사용자_이름> +chown <사용자_이름> /home/<사용자_이름> +``` + +### U-33: 숨겨진 파일 및 디렉토리 검색 및 제거 +**판단기준:** 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 양호 +**점검:** +```bash +find / -type f -name ".*" 2>/dev/null +find / -type d -name ".*" 2>/dev/null +``` +**조치:** +```bash +rm <파일_이름> +rm -r <디렉터리_이름> +``` + +--- + +## 3. 서비스 관리 + +### U-34: Finger 서비스 비활성화 +**판단기준:** Finger 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep finger +# SOLARIS (5.10+) +inetadm | grep finger 2>/dev/null +# inetd +grep finger /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/finger 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop finger.socket 2>/dev/null +systemctl disable finger.socket 2>/dev/null + +# xinetd +# /etc/xinetd.d/finger -> disable = yes +systemctl restart xinetd + +# inetd - finger 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/finger:default +``` + +### U-35: 공유 서비스에 대한 익명 접근 제한 설정 +**판단기준:** 공유 서비스에 대해 익명 접근을 제한한 경우 양호 +**점검:** +```bash +# FTP 익명 계정 확인 +grep -E "^ftp|^anonymous" /etc/passwd + +# vsFTP +grep anonymous_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# ProFTP +sed -n '//,/<\/Anonymous>/p' /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null + +# NFS 익명 접근 +grep -E "anonuid|anongid" /etc/exports 2>/dev/null + +# Samba +grep "guest ok" /etc/samba/smb.conf 2>/dev/null +``` +**조치:** +```bash +# FTP 익명 계정 제거 +userdel ftp +userdel anonymous + +# vsFTP - /etc/vsftpd/vsftpd.conf +# anonymous_enable=NO +systemctl restart vsftpd + +# NFS - /etc/exports에서 anon 옵션 제거 +exportfs -ra + +# Samba - /etc/samba/smb.conf +# guest ok = no +smbcontrol all reload-config +``` + +### U-36: r 계열 서비스 비활성화 +**판단기준:** 불필요한 r 계열 서비스(rlogin, rsh, rexec)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "rlogin|rsh|rexec" +# inetd +grep -E "rlogin|rsh|rexec|shell|login|exec" /etc/inetd.conf 2>/dev/null +# SOLARIS (5.10+) +inetadm | egrep "shell|rlogin|rexec" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop rlogin.socket rsh.socket rexec.socket 2>/dev/null +systemctl disable rlogin.socket rsh.socket rexec.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/login:rlogin +inetadm -d svc:/network/shell:default +inetadm -d svc:/network/rexec:default +``` + +### U-37: crontab 설정파일 권한 설정 미흡 +**판단기준:** crontab/at 명령어 권한 750 이하, cron/at 관련 파일 권한 640 이하인 경우 양호 +**점검:** +```bash +ls -l /usr/bin/crontab +ls -l /usr/bin/at +ls -l /var/spool/cron/ 2>/dev/null +ls -l /var/spool/cron/crontabs/ 2>/dev/null +ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny 2>/dev/null +``` +**조치:** +```bash +# crontab/at 명령어 권한 설정 +chown root /usr/bin/crontab +chmod 750 /usr/bin/crontab +chown root /usr/bin/at +chmod 750 /usr/bin/at + +# cron 관련 파일 권한 설정 +chmod 640 /etc/cron.allow /etc/cron.deny 2>/dev/null +chmod 640 /etc/at.allow /etc/at.deny 2>/dev/null +``` + +### U-38: DoS 공격에 취약한 서비스 비활성화 +**판단기준:** echo, discard, daytime, chargen 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "echo|discard|daytime|chargen" +# inetd +grep -E "echo|discard|daytime|chargen" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep enable | egrep "echo|discard|daytime|chargen" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null +systemctl disable echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬> +``` + +### U-39: 불필요한 NFS 서비스 비활성화 +**판단기준:** 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep nfs +# AIX +ps -ef | grep nfsd +lssrc -a | grep nfs 2>/dev/null +# SOLARIS +inetadm | egrep "nfs|statd|lockd" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop nfs-server +systemctl disable nfs-server + +# SOLARIS +inetadm -d + +# AIX +stopsrc -g nfs + +# HP-UX +# /etc/rc.config.d/nfsconf -> NFS_SERVER=0 +``` + +### U-40: NFS 접근 통제 +**판단기준:** 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX +ls -l /etc/exports +cat /etc/exports +showmount -e 2>/dev/null + +# SOLARIS +ls -l /etc/dfs/dfstab 2>/dev/null +cat /etc/dfs/dfstab 2>/dev/null +``` +**조치:** +```bash +# LINUX +chown root /etc/exports +chmod 644 /etc/exports +# /etc/exports 예시: /home/share host1(ro,root_squash) +exportfs -ra + +# SOLARIS +chown root /etc/dfs/dfstab +chmod 644 /etc/dfs/dfstab +# /etc/dfs/dfstab 예시: share -F nfs -o rw=client1:client2,ro=client1:client2 /export/home +shareall +``` + +### U-41: 불필요한 automountd 제거 +**판단기준:** automountd 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "automount|autofs" +# SOLARIS +svcs -a | grep autofs 2>/dev/null +# AIX +ps -ef | grep automountd +``` +**조치:** +```bash +# LINUX +systemctl stop autofs +systemctl disable autofs + +# SOLARIS +svcadm disable svc:/system/filesystem/autofs:default + +# HP-UX +# /etc/rc.config.d/nfsconf -> AUTOFS=0 +``` + +### U-42: 불필요한 RPC 서비스 비활성화 +**판단기준:** 불필요한 RPC 서비스(rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd 등)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep rpc +# inetd +grep -E "rpc\." /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep rpc | grep enabled | egrep "ttdbserver|rex|rstart|rusers|spray|wall|rquota" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop <서비스명> +systemctl disable <서비스명> + +# inetd - 해당 RPC 서비스 항목 주석 처리 +# SOLARIS +svcadm disable <서비스_데몬> +``` + +### U-43: NIS, NIS+ 점검 +**판단기준:** NIS 서비스가 비활성화되어 있거나, 불가피 시 NIS+ 서비스를 사용하는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated" +# SOLARIS +svcs -a | grep nis 2>/dev/null +# AIX +lssrc -a | grep -E "ypserv|ypbind" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop ypserv ypbind 2>/dev/null +systemctl disable ypserv ypbind 2>/dev/null + +# SOLARIS +svcadm disable + +# HP-UX - /etc/rc.config.d/namesrvs +# NIS_MASTER_SERVER=0 +# NIS_SLAVE_SERVER=0 +# NIS_CLIENT_SERVER=0 +``` + +### U-44: tftp, talk 서비스 비활성화 +**판단기준:** tftp, talk, ntalk 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "tftp|talk|ntalk" +# inetd +grep -E "tftp|talk|ntalk" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | egrep "tftp|talk" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop tftp.socket talk.socket ntalk.socket 2>/dev/null +systemctl disable tftp.socket talk.socket ntalk.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬명> +``` + +### U-45: 메일 서비스 버전 점검 +**판단기준:** 메일 서비스 버전이 최신 버전인 경우 양호 +**점검:** +```bash +# Sendmail +sendmail -d0 -bt < /dev/null 2>&1 | grep Version +# Postfix +postconf mail_version 2>/dev/null +# Exim +exim -bV 2>/dev/null +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop sendmail postfix 2>/dev/null +systemctl disable sendmail postfix 2>/dev/null + +# 사용 시 최신 버전으로 패치 적용 +# Sendmail: http://www.sendmail.org/ +# Postfix: https://www.postfix.org/packages.html +# Exim: https://www.exim.org/ +``` + +### U-46: 일반 사용자의 메일 서비스 실행 방지 +**판단기준:** 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf 2>/dev/null +# Postfix +ls -l /usr/sbin/postsuper 2>/dev/null +# Exim +ls -l /usr/sbin/exiqgrep 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun + +# Postfix +chmod o-x /usr/sbin/postsuper + +# Exim +chmod o-x /usr/sbin/exiqgrep +``` + +### U-47: 스팸 메일 릴레이 제한 +**판단기준:** 릴레이 제한이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep "promiscuous_relay" /etc/mail/sendmail.mc 2>/dev/null +cat /etc/mail/access 2>/dev/null +# Postfix +grep -E "smtpd_recipient_restrictions|mynetworks" /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "relay_from_hosts|hosts =" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.mc에서 promiscuous_relay 제거 +# FEATURE(`promiscuous_relay')dnl 삭제 +m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +# /etc/mail/access에 허용/차단 설정 +makemap hash /etc/mail/access.db < /etc/mail/access +systemctl restart sendmail + +# Postfix - /etc/postfix/main.cf +# mynetworks = <허용할_네트워크> +postfix reload + +# Exim - /etc/exim/exim.conf +# hostlist relay_from_hosts = <허용할_네트워크> +systemctl restart exim +``` + +### U-48: expn, vrfy 명령어 제한 +**판단기준:** noexpn, novrfy 옵션이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf +# Postfix +grep disable_vrfy_command /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "acl_smtp_vrfy|acl_smtp_expn" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +# 또는 PrivacyOptions = restrictqrun, goaway + +# Postfix - /etc/postfix/main.cf +# disable_vrfy_command = yes +postfix reload + +# Exim - acl_smtp_vrfy, acl_smtp_expn 설정 제거/주석 처리 +``` + +### U-49: DNS 보안 버전 패치 +**판단기준:** 주기적으로 패치를 관리하는 경우 양호 +**점검:** +```bash +named -v 2>/dev/null +# LINUX +systemctl list-units --type=service | grep named +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop named +systemctl disable named + +# 사용 시 최신 버전 패치 +# ISC BIND: https://www.isc.org/downloads/ +# 취약점 정보: https://kb.isc.org/v1/docs/en/aa-00913 +``` + +### U-50: DNS ZoneTransfer 설정 +**판단기준:** Zone Transfer를 허가된 사용자에게만 허용한 경우 양호 +**점검:** +```bash +grep allow-transfer /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +grep xfrnets /etc/named.boot /etc/bind/named.boot 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf (또는 /etc/bind/named.conf.options) 수정 +# allow-transfer { <허용할_IP>; }; +systemctl restart named +``` + +### U-51: DNS 서비스의 취약한 동적 업데이트 설정 금지 +**판단기준:** 동적 업데이트 기능이 비활성화되었거나, 적절한 접근통제를 수행하는 경우 양호 +**점검:** +```bash +grep allow-update /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf 수정 +# 불필요 시: allow-update { none; }; +# 필요 시: allow-update { <허용할_IP>; }; +systemctl restart named +``` + +### U-52: Telnet 서비스 비활성화 +**판단기준:** Telnet 프로토콜을 비활성화하고 있는 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=socket | grep telnet +# inetd +grep telnet /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/telnet 2>/dev/null +# SOLARIS +svcs -a | grep telnet 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop telnet.socket +systemctl disable telnet.socket +systemctl start sshd + +# xinetd - /etc/xinetd.d/telnet -> disable = yes +systemctl restart xinetd + +# SOLARIS +svcadm disable svc:/network/telnet:default +svcadm enable ssh +``` + +### U-53: FTP 서비스 정보 노출 제한 +**판단기준:** FTP 접속 배너에 노출되는 정보가 없는 경우 양호 +**점검:** +```bash +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +# ProFTP +grep ServerIdent /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only +systemctl restart vsftpd + +# ProFTP - /etc/proftpd/proftpd.conf +# ServerIdent off +# 또는 ServerIdent on "Authorized access only" +systemctl restart proftpd +``` + +### U-54: 암호화되지 않는 FTP 서비스 비활성화 +**판단기준:** 암호화되지 않은 FTP 서비스가 비활성화된 경우 양호 (SFTP 사용 권고) +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "vsftpd|proftpd" +# inetd +grep "^ftp" /etc/inetd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop vsftpd proftpd 2>/dev/null +systemctl disable vsftpd proftpd 2>/dev/null + +# inetd - ftp 항목 주석 처리 +``` + +### U-55: FTP 계정 shell 제한 +**판단기준:** FTP 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +grep "^ftp" /etc/passwd +``` +**조치:** +```bash +usermod -s /bin/false ftp +# 또는 +usermod -s /sbin/nologin ftp +``` + +### U-56: FTP 서비스 접근 제어 설정 +**판단기준:** 특정 IP주소/호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 양호 +**점검:** +```bash +# ftpusers 파일 +cat /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null +ls -l /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null + +# vsFTP +grep userlist_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +cat /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep UseFtpUsers /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일 권한 설정 +chown root /etc/ftpusers +chmod 640 /etc/ftpusers + +# vsFTP - user_list 방식 +# /etc/vsftpd/vsftpd.conf +# userlist_enable=YES +# userlist_deny=YES (목록 사용자 차단) 또는 NO (목록 사용자만 허용) + +# ProFTP - proftpd.conf 접근제한 +# +# Order Deny,Allow +# AllowUser <사용자> 또는 Allow from +# DenyUser <사용자> 또는 Deny from +# +``` + +### U-57: Ftpusers 파일 설정 (root 계정 접근 제한) +**판단기준:** root 계정 접속을 차단한 경우 양호 +**점검:** +```bash +# ftpusers 파일에 root가 등록되어 있는지 확인 +grep "^root" /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep RootLogin /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일에 root 추가 (주석 해제) +# 해당 파일에서 #root -> root 로 변경 + +# ProFTP - /etc/proftpd/proftpd.conf +# RootLogin off +systemctl restart proftpd +``` + +### U-58: 불필요한 SNMP 서비스 구동 점검 +**판단기준:** SNMP 서비스를 사용하지 않는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep snmpd +# SOLARIS +svcs -a | grep snmp 2>/dev/null +# AIX +lssrc -a | grep snmp 2>/dev/null +# 프로세스 확인 +ps -ef | grep snmp +``` +**조치:** +```bash +# LINUX +systemctl stop snmpd +systemctl disable snmpd + +# SOLARIS (5.10+) +svcadm disable svc:/application/management/snmpd:default + +# AIX +stopsrc -s snmpd +# /etc/rc.tcpip에서 snmpd 주석 처리 +``` + +### U-59: 안전한 SNMP 버전 사용 +**판단기준:** SNMP 서비스를 v3 이상으로 사용하는 경우 양호 +**점검:** +```bash +# SNMPv3 사용 여부 확인 +snmpwalk -v3 -l authPriv -u <사용자> -a SHA -A <인증암호> -x AES -X <암호화암호> <서버IP> 2>/dev/null +grep -E "rouser|rwuser|createUser" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# SNMPv3 사용자 생성 +net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser + +# /etc/snmp/snmpd.conf에 추가 +# createUser myuser SHA myauthpass AES myprivpass +# rouser myuser + +systemctl restart snmpd +``` + +### U-60: SNMP Community String 복잡성 설정 +**판단기준:** Community String이 "public", "private"이 아니고 영숫자 10자리 이상 또는 영숫자+특수문자 8자리 이상인 경우 양호 +**점검:** +```bash +grep -i community /etc/snmp/snmpd.conf 2>/dev/null +# AIX +grep -i community /etc/snmpdv3.conf 2>/dev/null +# HP-UX +grep -i community /etc/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser default <복잡한_String값> +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <복잡한_String값> default +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY <새_String> <새_String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-61: SNMP Access Control 설정 +**판단기준:** SNMP 서비스에 접근 제어 설정이 되어 있는 경우 양호 +**점검:** +```bash +# LINUX (Redhat) +grep "com2sec" /etc/snmp/snmpd.conf 2>/dev/null +# LINUX (Debian) +grep -E "rocommunity|rwcommunity" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser <허용_네트워크> + +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <허용_네트워크> + +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY noAuthNoPriv <허용_IP> <넷마스크> - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-62: 로그인 시 경고 메시지 설정 +**판단기준:** 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 양호 +**점검:** +```bash +# 서버 로그온 배너 +cat /etc/motd 2>/dev/null +cat /etc/issue 2>/dev/null +cat /etc/issue.net 2>/dev/null + +# SSH 배너 +grep "^Banner" /etc/ssh/sshd_config + +# Sendmail +grep SmtpGreetingMessage /etc/mail/sendmail.cf 2>/dev/null + +# Postfix +grep smtpd_banner /etc/postfix/main.cf 2>/dev/null + +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# DNS +grep "version" /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# 서버 경고 메시지 +echo "Authorized access only. All activity is monitored." > /etc/motd +echo "Authorized access only." > /etc/issue +echo "Authorized access only." > /etc/issue.net + +# SSH - /etc/ssh/sshd_config +# Banner /etc/issue.net +systemctl restart sshd + +# Sendmail - /etc/mail/sendmail.cf +# SmtpGreetingMessage=Authorized access only + +# Postfix - /etc/postfix/main.cf +# smtpd_banner = Authorized access only + +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only + +# DNS - /etc/named.conf +# version "Not disclosed"; +``` + +### U-63: sudo 명령어 접근 관리 +**판단기준:** /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 양호 +**점검:** +```bash +ls -l /etc/sudoers +``` +**조치:** +```bash +chown root /etc/sudoers +chmod 640 /etc/sudoers +``` + +--- + +## 4. 패치 관리 + +### U-64: 주기적 보안 패치 및 벤더 권고사항 적용 +**판단기준:** 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있는 경우 양호 +**점검:** +```bash +# OS 및 커널 버전 확인 +uname -a +cat /etc/os-release 2>/dev/null +hostnamectl 2>/dev/null + +# 패치 이력 확인 (LINUX) +rpm -qa --last | head -20 2>/dev/null +apt list --upgradable 2>/dev/null + +# SOLARIS +pkg list -af entire@latest 2>/dev/null + +# AIX +oslevel -s +instfix -i | grep ML 2>/dev/null +instfix -i | grep SP 2>/dev/null + +# HP-UX +swlist -l product 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat/CentOS) +yum update -y +# LINUX (Debian/Ubuntu) +apt update && apt upgrade -y + +# SOLARIS +pkg update --accept + +# AIX - smitty installp를 통한 패치 설치 + +# HP-UX +# swinstall -s /tmp/patch.depot +``` + +--- + +## 5. 로그 관리 + +### U-65: NTP 및 시각 동기화 설정 +**판단기준:** NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 양호 +**점검:** +```bash +# NTP +ntpq -pn 2>/dev/null +cat /etc/ntp.conf 2>/dev/null + +# Chrony (RHEL 8+) +chronyc sources 2>/dev/null +cat /etc/chrony.conf 2>/dev/null +``` +**조치:** +```bash +# NTP - /etc/ntp.conf +# server +systemctl restart ntp 2>/dev/null || systemctl restart ntpd 2>/dev/null + +# Chrony - /etc/chrony.conf +# server +systemctl restart chronyd +``` + +### U-66: 정책에 따른 시스템 로깅 설정 +**판단기준:** 로그 기록 정책이 보안 정책에 따라 수립되어 있으며, 로그를 남기고 있는 경우 양호 +**점검:** +```bash +# LINUX +cat /etc/rsyslog.conf 2>/dev/null +ls /etc/rsyslog.d/ 2>/dev/null + +# SOLARIS +cat /etc/syslog.conf 2>/dev/null + +# AIX +cat /etc/syslog.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX - /etc/rsyslog.conf 권장 설정 +cat >> /etc/rsyslog.conf <<'CONF' +*.info;mail.none;authpriv.none;cron.none /var/log/messages +authpriv.* /var/log/secure +mail.* /var/log/maillog +cron.* /var/log/cron +*.emerg * +CONF +systemctl restart rsyslog + +# SOLARIS - /etc/syslog.conf 권장 설정 +# mail.debug /var/log/mail.log +# *.info /var/log/syslog.log +# *.alert /dev/console +# *.emerg * + +# AIX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/error.log +# mail.info /var/adm/mail.log +# auth.info /var/adm/auth.log +# refresh -s syslogd + +# HP-UX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/syslog/error.log +# mail.info /var/adm/syslog/mail.log +# auth.info /var/adm/syslog/auth.log +``` + +### U-67: 로그 디렉터리 소유자 및 권한 설정 +**판단기준:** 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX, SOLARIS +ls -la /var/log/ +# AIX +ls -la /var/adm/ 2>/dev/null +# HP-UX +ls -la /var/adm/syslog/ 2>/dev/null +``` +**조치:** +```bash +# LINUX, SOLARIS +chown root /var/log/* +chmod 644 /var/log/* + +# AIX +chown root /var/adm/* +chmod 644 /var/adm/* + +# HP-UX +chown root /var/adm/syslog/* +chmod 644 /var/adm/syslog/* +``` diff --git a/skills-ko/kesekit-check-ko/scripts/cii/web-service.md b/skills-ko/kesekit-check-ko/scripts/cii/web-service.md new file mode 100644 index 0000000..d70ca7c --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/cii/web-service.md @@ -0,0 +1,725 @@ +# 웹 서비스 점검 스크립트 (WEB-01 ~ WEB-26) + +## 1. 계정 관리 + +### WEB-01: Default 관리자 계정명 변경 +**점검:** +```bash +# Tomcat - 기본 계정명(tomcat, admin) 사용 여부 확인 +grep -i 'username=' /conf/server.xml +# JEUS - Security Domains > Account & Policies > Users에서 기본 계정 확인 +``` +**조치:** +```bash +# Tomcat - 기본 계정명을 유추 불가능한 이름으로 변경 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > ADD +# administrator 대신 유추 불가능한 계정명 입력 후 Administrators 그룹 체크 +./stopServer -host <도메인명>:<포트> +./startDomainAdminServer -host <도메인명>:<포트> +``` + +### WEB-02: 취약한 비밀번호 사용 제한 +**점검:** +```bash +# Tomcat +grep -i 'password=' /conf/server.xml +# 비밀번호 복잡도 기준: 2종류 이상 조합 최소 10자리 또는 3종류 이상 조합 최소 8자리 +# (영문대/소문자, 숫자, 특수문자) +``` +**조치:** +```bash +# Tomcat - 복잡도 만족하는 비밀번호 설정 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > 비밀번호 변경 +# SHA-256 이상 암호화 방식 비밀번호 설정 +``` + +### WEB-03: 비밀번호 파일 권한 관리 +**점검:** +```bash +# Tomcat +ls -al /conf/tomcat-users.xml +# IIS +# %systemroot%\system32\config\SAM 파일 속성 > 보안 확인 +# JEUS +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` +**조치:** +```bash +# Tomcat - 비밀번호 파일 권한 600 이하 설정 +chmod 600 /conf/tomcat-users.xml + +# IIS - SAM 파일 속성 > 보안 > 편집 > Administrators, SYSTEM만 허용 + +# JEUS +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` + +--- + +## 2. 서비스 관리 + +### WEB-04: 디렉터리 리스팅 방지 설정 +**점검:** +```bash +# Apache +grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" +# Nginx +grep -i "autoindex" /etc/nginx/nginx.conf +# Tomcat +grep -i "listings" /conf/web.xml +# JEUS +grep -i "allow-indexing" /WEB-INF/jeus-web-dd.xml +# WebtoB +grep -i "Options" /config/http.m | grep -i "Indexes" +``` +**조치:** +```bash +# Apache - httpd.conf 내 모든 디렉터리에서 Indexes 옵션 제거 +vi /conf/httpd.conf +# +# Options -Indexes (Indexes 삭제 또는 -Indexes 설정) +# +systemctl restart apache2 + +# Tomcat - web.xml 내 listings=false 설정 +vi /conf/web.xml +# +# listings +# false +# + +# Nginx - autoindex off 설정 +vi /conf/nginx.conf +# server { autoindex off; } +systemctl restart nginx + +# IIS - IIS 관리자 > 해당 웹사이트 > 디렉터리 검색 > "사용 안 함" 설정 + +# JEUS +vi /WEB-INF/jeus-web-dd.xml +# false + +# WebtoB +vi /config/http.m +# *NODE +# Options = "-Indexes", +wscfl -I http.m && wsdown && wsboot +``` + +### WEB-05: 지정하지 않은 CGI/ISAPI 실행 제한 +**점검:** +```bash +# Apache +grep -i "LoadModule.*cgi" /conf/httpd.conf +grep -i "ExecCGI" /conf/httpd.conf +# Nginx +grep -i "fastcgi_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - CGI 모듈 비활성화 및 ExecCGI 옵션 제거 +vi /conf/httpd.conf +# #LoadModule cgi_module modules/mod_cgi.so +# #LoadModule cgid_module modules/mod_cgid.so +# +# Options -ExecCGI +# +systemctl restart apache2 + +# Tomcat - web.xml 내 CGI 매핑 비활성화(주석 처리) +# + +# Nginx - fastcgi 설정 주석 처리 +# location ~ \.cgi$ { +# #fastcgi_pass :<포트>; +# #include fastcgi_params; +# } + +# IIS - ISAPI 및 CGI 제한 > 사용하지 않는 CGI/ISAPI 모듈 해제 + +# WebtoB - http.m 내 *SVRGROUP, *SERVER, *URI에서 CGI 설정 주석 처리 +``` + +### WEB-06: 상위 디렉터리 접근 제한 설정 +**점검:** +```bash +# Apache +grep -i "AllowOverride" /conf/httpd.conf +# Tomcat +grep -i "allowLinking" /conf/server.xml +# Nginx +grep -i "auth_basic" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - AllowOverride AuthConfig 설정 + .htaccess 인증 파일 생성 +vi /conf/httpd.conf +# +# AllowOverride AuthConfig +# +htpasswd /.htpasswd [사용자명] +systemctl restart apache2 + +# Tomcat - allowLinking 옵션 제거 +vi /conf/server.xml +# (allowLinking="true" 제거) + +# Nginx - 기본 인증으로 디렉터리 접근 제한 +# location /<접근제한 디렉터리>/ { +# auth_basic "Restricted Content"; +# auth_basic_user_file /etc/nginx/.htpasswd; +# } + +# IIS 7.0+ - web.config 내 enableParentPaths="false" 설정 +# + +# WebtoB - UpperDirRestrict = N 설정 +``` + +### WEB-07: 웹 서비스 경로 내 불필요한 파일 제거 +**점검/조치:** +```bash +# Apache +rm -rf /htdocs/manual +rm -rf /manual + +# Tomcat +rm -rf /webapps/docs/<불필요 파일> +# BUILDING.txt, RELEASE-NOTES.txt 등 매뉴얼 파일 포함 + +# Nginx +rm -rf /html/index.html + +# IIS - 샘플 디렉터리 제거 +# c:\inetpub\iissamples +# c:\winnt\help\iishelp +# c:\program files\common files\system\msadc\sample + +# JEUS +rm -rf /docs/manuals/default/web-manager/<불필요 파일> +rm -rf /samples/<불필요 파일> + +# WebtoB +rm -rf /docs/manuals/<불필요 파일> +rm -rf /samples/<불필요 파일> +``` + +### WEB-08: 파일 업로드 및 다운로드 용량 제한 +**점검:** +```bash +# Apache +grep -i "LimitRequestBody" /conf/httpd.conf +# Tomcat +grep -i "maxPostSize" /conf/server.xml +# Nginx +grep -i "client_max_body_size" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - LimitRequestBody 지시자 설정 (5MB = 5000000) +# +# LimitRequestBody 5000000 +# + +# Tomcat - server.xml 내 maxPostSize 설정 + web.xml 내 multipart-config 설정 +# +# +# 2097152 +# 4194304 +# + +# Nginx - client_max_body_size 설정 +# client_max_body_size 5M; +systemctl restart nginx + +# IIS - web.config 내 maxAllowedContentLength 설정 (기본값 30MB) +# applicationHost.config 내 bufferingLimit(4MB) 및 maxRequestEntityAllowed(0.2MB) 설정 + +# JEUS - web.xml 내 max-file-size 설정 +# 5242880 + +# WebtoB - LimitRequestBody 설정 +# LimitRequestBody = 2048000 +``` + +### WEB-09: 웹 서비스 프로세스 권한 제한 +**점검:** +```bash +# 프로세스 실행 계정 확인 +ps -ef | grep httpd | grep -v root +ps -ef | grep nginx +ps -ef | grep tomcat +ps -ef | grep jeus +``` +**조치:** +```bash +# Apache - www-data 계정으로 실행 +vi /envvars +# export APACHE_RUN_USER=www-data +# export APACHE_RUN_GROUP=www-data +chown -R www-data:www-data /etc/apache2/ /var/www/ /var/log/apache2/ +usermod -s /sbin/nologin www-data +systemctl restart apache2 + +# Tomcat - tomcat 전용 계정으로 실행 +vi /etc/systemd/system/tomcat.service +# [Service] +# User=tomcat +# Group=tomcat +chown -R tomcat:tomcat / +usermod -s /sbin/nologin tomcat +systemctl restart tomcat + +# Nginx - nginx 전용 계정으로 실행 +vi /conf/nginx.conf +# user nginx nginx; +adduser --system --no-create-home --shell /bin/false nginx +groupadd nginx && usermod -aG nginx nginx +systemctl restart nginx + +# IIS - 응용프로그램 풀 ID를 ApplicationPoolIdentity로 설정 + +# JEUS - jeus 전용 계정 생성 후 소유권 변경 +useradd -m jeus +chown -R jeus:jeus / +``` + +### WEB-10: 불필요한 프록시 설정 제한 +**점검:** +```bash +# Apache +grep -i "ProxyPass\|ProxyRequests" /conf/httpd.conf +# Tomcat +grep -i "proxyName\|proxyPort" /conf/server.xml +# Nginx +grep -i "proxy_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - 불필요한 Proxy 설정 제거, ProxyRequests Off 유지 +# +# ProxyRequests Off +# + +# Tomcat - Connector 요소에서 불필요한 proxyName, proxyPort 제거 +# Nginx - 불필요한 proxy_pass 설정 제거 +# IIS - 루트 디렉터리에서 불필요한 Proxy 설정 제거 +# JEUS - web.xml 내 불필요한 ReverseProxy 설정 제거 +# WebtoB - http.m 내 REVERSE_PROXY 설정 제거 +``` + +### WEB-11: 웹 서비스 경로 설정 +**조치:** +```bash +# Apache - DocumentRoot를 별도 경로로 변경 +# DocumentRoot [별도의 경로] + +# Tomcat - docBase를 별도 경로로 변경 +# + +# Nginx - root를 별도 경로로 변경 +# root [별도의 경로]; + +# IIS - 사이트 편집 > 실제 경로를 별도 경로로 변경 +# JEUS - Docroot = "[별도의 경로]" +# WebtoB - DOCROOT="[별도의 경로]" +``` + +### WEB-12: 웹 서비스 링크 사용 금지 +**조치:** +```bash +# Apache - FollowSymLinks 옵션 제거 +vi /conf/httpd.conf +# +# Options -FollowSymLinks +# + +# Tomcat - allowLinking 옵션 제거 (기본값: false) +# Nginx - disable_symlinks on 설정 +# location / { disable_symlinks on; } + +# IIS - 홈 디렉터리 내 바로가기 파일 제거 +# JEUS - jeus-web-dd.xml 내 alias 요소 제거 +# WebtoB - http.m 내 ALIAS 절 불필요 설정 제거 +``` + +### WEB-13: 웹 서비스 설정 파일 노출 제한 +**조치:** +```bash +# Tomcat - 불필요한 DB 연결 리소스 설정 제거 후 접근 권한 설정 +chmod 600 /conf/server.xml + +# IIS - 처리기 매핑에서 *.asa/*.asax 항목 제거 +# 요청 필터링에서 "파일 이름 확장명 거부"에 등록 + +# JEUS - domain.xml 내 불필요한 DB 연결 리소스 제거 +chmod 600 /conf/domain.xml +``` + +### WEB-14: 웹 서비스 경로 내 파일의 접근 통제 +**조치:** +```bash +# Apache +chown -R www-data:www-data /conf/apache2.conf +chmod -R 750 /conf/apache2.conf + +# Tomcat +chown -R tomcat:tomcat /conf/web.xml +chmod -R 750 /conf/web.xml + +# Nginx +chown -R nginx:nginx /conf/nginx.conf +chmod -R 750 /conf/nginx.conf + +# IIS - web.config > 속성 > 보안 > 불필요 권한 제거 + +# JEUS +chown -R jeus:jeus /config/security/SYSTEM_DOMAIN/accounts.xml +chmod -R 750 /config/security/SYSTEM_DOMAIN/accounts.xml + +# WebtoB +chown -R webtob:webtob /config/http.m +chmod -R 750 /config/http.m +``` + +### WEB-15: 불필요한 스크립트 매핑 제거 +**점검:** +```bash +# Tomcat - 불필요한 servlet-mapping 확인 +grep -A2 "servlet-mapping" /conf/web.xml +# IIS - 처리기 매핑에서 취약한 확장자 확인 +# (.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +``` +**조치:** +```bash +# Tomcat - 불필요한 servlet-mapping 제거 +# IIS - 처리기 매핑에서 미사용 확장자 매핑 제거 +# JEUS - web.xml 내 불필요한 제거 +``` + +### WEB-16: 웹 서비스 헤더 정보 노출 제한 +**점검:** +```bash +# Apache +grep -i "ServerTokens\|ServerSignature" /conf/httpd.conf +# Nginx +grep -i "server_tokens" /conf/nginx.conf +# WebtoB +grep -i "ServerTokens" /config/http.m +``` +**조치:** +```bash +# Apache - ServerTokens Prod, ServerSignature Off 설정 +vi /conf/httpd.conf +# ServerTokens Prod +# ServerSignature Off + +# Tomcat - server.xml 내 server 값을 임의 정보로 변경 +# +# + ErrorReportValve에 showServerInfo="false" 추가 +# + +# Nginx +# server_tokens off; + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS 7 이전 - JEUSMain.xml 내 command-option 추가 +# -Djeus.servlet.response.header.serverInfo=false +# JEUS 7 - domain.xml 내 response-header 설정 + +# WebtoB +# ServerTokens ProductOnly +# ServerSignature off +``` + +### WEB-17: 웹 서비스 가상 디렉터리 삭제 +**점검/조치:** +```bash +# Apache - 불필요한 Alias 지시자 확인 후 제거 +grep -i "Alias" /conf/httpd.conf + +# Tomcat - Context path 속성값 확인 후 불필요 제거 +grep -i "Context path" /conf/server.xml + +# Nginx - 불필요한 alias 지시자 제거 +grep -i "alias" /conf/nginx.conf + +# WebtoB - NODE절의 불필요한 Alias 설정 삭제 +grep -i "ALIAS" /config/http.m +``` + +### WEB-18: WebDAV 비활성화 +**점검:** +```bash +# Apache +grep -i "Dav On" /conf/httpd.conf +grep -i "LoadModule.*dav" /conf/httpd.conf +# Nginx +grep -i "dav_methods" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - WebDAV 비활성화 +vi /conf/httpd.conf +# +# Dav Off +# +systemctl restart apache2 + +# Nginx - dav_methods 설정 주석 처리 또는 제거 +systemctl restart nginx + +# IIS - ISAPI 및 CGI 제한 > WebDAV 항목 > 확장 경로 실행 허용 체크 해제 + +# WebtoB - VHOST 절에서 PUT, DELETE, MKCOL, COPY, MOVE 메소드 제거 +``` + +--- + +## 3. 보안 설정 + +### WEB-19: SSI(Server Side Includes) 사용 제한 +**점검:** +```bash +# Apache +grep -i "Includes" /conf/httpd.conf +# Tomcat +grep -i "SSIServlet\|SSIFilter" /conf/web.xml +# Nginx +grep -i "ssi on" /conf/nginx.conf +# WebtoB +grep -i "SSI" /config/http.m +``` +**조치:** +```bash +# Apache - Options Includes 제거 +# Options (Includes 삭제) + +# Tomcat - SSI 서블릿/필터 설정 주석 처리 또는 삭제 +# Nginx - ssi off; 설정 +# IIS - 처리기 매핑에서 .shtml, .shtm, .stm 확장자 매핑 제거 +# WebtoB - *SVRGROUP, *SERVER에서 SSI 관련 설정 삭제 +``` + +### WEB-20: SSL/TLS 활성화 +**점검:** +```bash +# Apache +apache2ctl -M | grep ssl +# Nginx +grep -i "ssl_protocols" /conf/nginx.conf +# WebtoB +grep -i "SSLFLAG\|SSLNAME" /config/http.m +``` +**조치:** +```bash +# Apache - SSL 모듈 활성화 및 인증서 설정 +vi /sites-available/default-ssl.conf +# +# SSLEngine on +# SSLCertificateFile /path/to/cert.crt +# SSLCertificateKeyFile /path/to/privkey.key +# +a2ensite default-ssl +systemctl restart apache2 + +# Nginx - SSL 인증서 설정 +# server { +# listen 443 ssl; +# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; +# ssl_protocols TLSv1.2 TLSv1.3; +# ssl_prefer_server_ciphers on; +# } +systemctl restart nginx + +# IIS - SSL 인증서 바인딩 설정 (IIS 관리자 > 사이트 바인딩 > https 추가) + +# WebtoB - http.m 내 SSLFLAG = Y, SSLNAME 설정 +# *SSL 절에 인증서 경로 설정 +# Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3" +``` + +### WEB-21: HTTP 리디렉션 +**조치:** +```bash +# Apache - HTTP → HTTPS 리디렉션 설정 +# +# RewriteEngine On +# RewriteCond %{HTTPS} off +# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# + +# Nginx +# server { +# listen 80; +# return 301 https://$host$request_uri; +# } + +# IIS - 사이트 바인딩 종류를 HTTPS로 설정 + +# WebtoB - URLRewrite = Y 설정 +# RewriteCond %{HTTPS} off +# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +``` + +### WEB-22: 에러 페이지 관리 +**조치:** +```bash +# Apache - 에러 코드별 일원화된 에러 페이지 설정 +vi /sites-available/000-default.conf +# ErrorDocument 400 /error.html +# ErrorDocument 401 /error.html +# ErrorDocument 403 /error.html +# ErrorDocument 404 /error.html +# ErrorDocument 500 /error.html +systemctl restart apache2 + +# Tomcat - web.xml 내 에러 페이지 설정 +# +# 404 +# /error/404.html +# + +# Nginx +# error_page 404 /404.html; +# error_page 500 502 503 504 /50x.html; +# location = /404.html { root html; internal; } + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS - web.xml 내 에러 메시지 설정 +# WebtoB - *ERRORDOCUMENT 절에 에러 페이지 설정 +# 503 status = 503, url = "/503.html" +``` + +### WEB-23: LDAP 알고리즘 적절하게 구성 +**점검:** +```bash +# Tomcat - 비밀번호 다이제스트 알고리즘 확인 +grep 'digest=' /conf/server.xml +``` +**조치:** +```bash +# Tomcat - SHA-256 이상 알고리즘 설정 +vi /conf/server.xml +# digest="SHA-256" +systemctl restart tomcat +``` + +--- + +## 4. 패치 및 로그 관리 + +### WEB-24: 별도의 업로드 경로 사용 및 권한 설정 +**조치:** +```bash +# Apache - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +# apache2.conf 내 업로드 디렉터리 접근 제한 +# +# Require all denied +# + +# Tomcat - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ + +# Nginx - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ + +# IIS - 웹 서비스 외부에 업로드 디렉터리 생성, IIS 구동 계정에 쓰기 권한 부여 + +# JEUS - 업로드 디렉터리 권한 설정 +chmod 750 +chown jeus:jeus + +# WebtoB - 업로드 디렉터리 권한 설정 +chmod 750 +chown tmax:tmax +``` + +### WEB-25: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```bash +# Apache +/bin/httpd -v + +# Tomcat +cd /lib && java -cp catalina.jar org.apache.catalina.util.ServerInfo + +# Nginx +/sbin/nginx -v + +# IIS +reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v VersionString + +# JEUS +jeusadmin -version + +# WebtoB +wscfl -version +``` +**참고 사이트:** +- Apache: http://httpd.apache.org/download.cgi +- Tomcat: https://tomcat.apache.org/ +- Nginx: https://nginx.org/en/download.html +- IIS: https://www.iis.net/downloads/microsoft +- JEUS/WebtoB: https://technet.tmaxsoft.com/ + +### WEB-26: 로그 디렉터리 및 파일 권한 설정 +**점검:** +```bash +# Apache +ls -al / +# Tomcat +ls -al /logs/ +# Nginx +ls -al /var/log/nginx/ +# JEUS +ls -al /domains/jeus_domain/servers/sample/logs/ +# WebtoB +ls -al /log/ +``` +**조치:** +```bash +# Apache +chmod o-rwx /* + +# Tomcat +chmod o-rwx /logs/* + +# Nginx +chmod o-rwx /var/log/nginx/* + +# IIS - C:\Windows\System32\config 속성 > 보안 > Everyone 권한 제거 +# C:\Windows\System32\LogFiles에서도 동일 조치 + +# JEUS - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /domains/jeus_domain/servers/sample/logs +chmod 640 /domains/jeus_domain/servers/sample/logs/* + +# WebtoB - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /log/ +chmod 640 /log/* +``` diff --git a/skills-ko/kesekit-check-ko/scripts/cii/webapp.md b/skills-ko/kesekit-check-ko/scripts/cii/webapp.md new file mode 100644 index 0000000..83e1041 --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/cii/webapp.md @@ -0,0 +1,880 @@ +# Web Application 점검 스크립트 + +## 1. SSTI (Server Side Template Injection) +**취약 패턴:** +```python +# Python (Jinja2) - 사용자 입력을 직접 템플릿에 삽입 +template = param # 사용자 입력이 직접 템플릿으로 사용됨 +return render_template_string(template) +``` +**안전한 구현:** +```python +# Python (Jinja2) - 사용자 입력을 템플릿 변수로 전달 +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +``` + +--- + +## 2. SQL Injection (SI) + +### 취약 패턴 +```java +// Java - 문자열 연결 방식 쿼리 (취약) +String sql = "SELECT * FROM users WHERE username = '" + userInput + "'"; +Statement stmt = connection.createStatement(); +ResultSet rs = stmt.executeQuery(sql); +``` + +### 안전한 구현 - PreparedStatement (Java) +```java +// Java - PreparedStatement 사용 +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +ResultSet resultSet = preparedStatement.executeQuery(); +``` + +### 안전한 구현 - ORM (JPA/Hibernate) +```java +// Java - JPQL 파라미터 바인딩 +public class ItemService { + @PersistenceContext + private EntityManager em; + public List findItemsByUserInput(String userInput) { + String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; + Query query = em.createQuery(jpql, Item.class); + query.setParameter("userInput", userInput); + return query.getResultList(); + } +} +``` + +### 안전한 구현 - MyBatis 파라미터 바인딩 +```xml + + + INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) + VALUES (#{num}, #{name}, #{age}, #{grade}) + + + DELETE FROM STUDENTS WHERE NUM = #{num} + +``` + +### 안전한 구현 - SQL 키워드 필터링 (Java) +```java +public static String sanitize(String input) { + if (input == null) return null; + String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; + String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; + Pattern regex = Pattern.compile(pattern + "|--"); + Matcher matcher = regex.matcher(input); + return matcher.replaceAll(" "); +} +``` + +### 안전한 구현 - PreparedStatement (PHP) +```php +// PHP - PDO PreparedStatement +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +``` + +### 안전한 구현 - 예외 처리 +```java +// Java - 적절한 예외 처리 (에러 메시지 노출 방지) +try { + // 데이터베이스 작업 +} catch (SQLException e) { + e.printStackTrace(); // 로그에만 기록 + System.out.println("An error occurred. Please try again later."); // 사용자에게 일반 메시지 +} +``` +```php +// PHP - PDO 예외 처리 +try { + // 데이터베이스 작업 +} catch (PDOException $e) { + error_log($e->getMessage()); + echo 'SQL Exception'; // 상세 에러 노출 금지 +} +``` + +### 특수문자 필터링 대상 +| 문자 | 설명 | +|------|------| +| `'` | 문자 데이터 구분 기호 | +| `;` | 쿼리 구분 기호 | +| `--`, `#` | 라인 주석 구분 기호 | +| `/* */` | 블록 주석 | + +--- + +## 3. 디렉터리 인덱싱 (DI) +**조치:** +```apache +# Apache - Indexes 옵션 제거 + + Options FollowSymLinks # Indexes 제거 + +``` +```xml + + + listings + false + +``` +```nginx +# Nginx +server { + location / { + autoindex off; + } +} +``` + +--- + +## 4. 에러 페이지 적용 미흡 (EP) +**조치:** +```apache +# Apache - 서버 정보 노출 제거 및 사용자 에러 페이지 정의 +ServerTokens Prod +ServerSignature Off +ErrorDocument 404 /main/error.html +ErrorDocument 405 /main/error.html +``` +```xml + + + + +``` +```xml + + + 404 + /errors/404 + + + 500 + /errors/500 + + + java.lang.Exception + /errors/500 + +``` +```nginx +# Nginx - 서버 정보 제거 및 사용자 에러 페이지 +http { + server_tokens off; +} +server { + error_page 400 401 402 405 /custom_4xx.html; + error_page 404 /custom_404.html; + error_page 500 502 503 504 /custom_5xx.html; + location = /custom_404.html { root /var/www/html; internal; } + location = /custom_4xx.html { root /var/www/html; internal; } + location = /custom_5xx.html { root /var/www/html; internal; } +} +``` + +--- + +## 5. 정보 누출 (IL) +**조치 항목:** +1. robots.txt, web.config, nginx.conf로 검색 차단 디렉터리/확장자 지정 +2. 백업 파일 삭제 (*.bak, *.backup, *.org, *.old, *.zip, *.log, *.sql, *.tmp, *.temp) +3. 초기 페이지/디렉터리/배너 삭제 +4. 개인정보 마스킹 처리 (홍\*동, 901231-1\*\*\*\*\*\*, 010-1234-\*\*\*\* 등) +5. 개발 중 주석/디버그 정보 제거 + +--- + +## 6. 크로스사이트 스크립트 - XSS (XS) + +### 취약 패턴 +```javascript +// JavaScript - innerHTML 사용 (취약) +document.getElementById('output').innerHTML = userInput; +// document.write(userInput); // 취약 +``` + +### 안전한 구현 - HTML Entity 변환 (Java) +```java +public static String sanitizeInput(String input) { + if (input == null) return null; + return input.replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll("\"", """) + .replaceAll("'", "'"); +} +``` + +### 안전한 구현 - HTML Entity 변환 (PHP) +```php +function escapeHtml($input) { + return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { + $escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); + $additionalEscapes = [ + '\\' => '\', + '(' => '(', + ')' => ')', + '#' => '#' + ]; + return strtr($escaped, $additionalEscapes); +} +``` + +### 특수문자 필터링 대상 +| 변경 전 | 변경 후 | +|---------|---------| +| `<` | `<` | +| `>` | `>` | +| `"` | `"` | +| `(` | `(` | +| `)` | `)` | +| `#` | `#` | +| `&` | `&` | + +### 쿠키 보안 설정 +``` +Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict +``` + +--- + +## 7. 크로스사이트 요청 위조 - CSRF (CF) + +### 안전한 구현 - CSRF Token (Java/Spring) +```java +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + String csrfToken = generateCsrfToken(); + session.setAttribute("csrfToken", csrfToken); + model.addAttribute("csrfToken", csrfToken); + return "index"; +} + +// CSRF Token 생성 함수 +private String generateCsrfToken() { + SecureRandom secureRandom = new SecureRandom(); + byte[] token = new byte[16]; + secureRandom.nextBytes(token); + return Base64.getUrlEncoder().encodeToString(token); +} + +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, + @RequestParam("csrfToken") String csrfToken, + HttpServletRequest request, Model model) { + HttpSession session = request.getSession(); + String sessionToken = (String) session.getAttribute("csrfToken"); + if (sessionToken == null || !sessionToken.equals(csrfToken)) { + throw new IllegalStateException("Invalid CSRF token"); + } + String sanitizedInput = sanitizeInput(input); + inputs.add(sanitizedInput); + return "index"; +} +``` + +### HTML 폼에 CSRF Token 포함 +```html +
+ + + + +
+``` + +### 추가 방어 조치 +1. Referer/Origin 헤더 검증으로 외부 도메인 요청 차단 +2. SameSite 쿠키 옵션 적용 +3. HTTPS 환경에서 Secure, HttpOnly 속성 적용 + +--- + +## 8. 서버사이드 요청 위조 - SSRF (SF) + +### 안전한 구현 - URL 화이트리스트 (Java) +```java +private final List allowedDomains = Arrays.asList("example.com"); +private final Map> allowedIPsAndPorts = new HashMap<>(); + +public UrlValidator() { + allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); + allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} + +public boolean isUrlAllowed(String urlString) { + try { + URL url = new URL(urlString); + String protocol = url.getProtocol(); + // HTTP와 HTTPS만 허용 + if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { + return false; + } + String host = url.getHost(); + int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); + if (allowedDomains.contains(host)) return true; + if (allowedIPsAndPorts.containsKey(host)) { + return allowedIPsAndPorts.get(host).contains(port); + } + return false; + } catch (Exception e) { + return false; + } +} +``` + +### 안전한 구현 - URL 화이트리스트 (PHP) +```php +function isUrlAllowed($url) { + $allowedDomains = ['example.com', 'api.example.com']; + $allowedIPsAndPorts = [ + '192.168.10.10' => [80, 443, 8000], + '10.0.0.1' => [80, 443] + ]; + $parsedUrl = parse_url($url); + if (!$parsedUrl || !isset($parsedUrl['host'])) return false; + + $host = $parsedUrl['host']; + $port = isset($parsedUrl['port']) ? $parsedUrl['port'] + : ($parsedUrl['scheme'] === 'https' ? 443 : 80); + if (in_array($host, $allowedDomains, true)) return true; + if (filter_var($host, FILTER_VALIDATE_IP)) { + if (array_key_exists($host, $allowedIPsAndPorts)) { + return in_array($port, $allowedIPsAndPorts[$host], true); + } + } + return false; +} +``` + +### PHP 설정 강화 +```ini +; php.ini - 원격 URL 접근 차단 +allow_url_fopen=Off +allow_url_include=Off +``` + +### 추가 방어 조치 +1. 내부 네트워크 대역 및 관리용 포트 요청 차단 +2. http, https 외 프로토콜(file://, gopher://, data://) 차단 +3. 에러 발생 시 응답값 노출 금지 +4. 애플리케이션 서버와 내부 시스템 간 네트워크 분리 + +--- + +## 9. 약한 비밀번호 정책 (BF) +**비밀번호 복잡성 검증 (JavaScript):** +```javascript +function isPasswordStrong(password) { + const minLength = 8; + const hasUpperCase = /[A-Z]/.test(password); + const hasLowerCase = /[a-z]/.test(password); + const hasNumber = /[0-9]/.test(password); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); + return password.length >= minLength + && hasUpperCase && hasLowerCase + && hasNumber && hasSpecialChar; +} +``` +**취약 ID 예시:** admin, administrator, manager, guest, tomcat, root, user +**취약 비밀번호 예시:** abcd, 1234, 1111, test, password, public, 빈 비밀번호, ID와 동일 + +--- + +## 10. 불충분한 인증 절차 (IA) + +### 안전한 구현 - 재인증 로직 (Java) +```java +// 중요 페이지 접근 시 세션 기반 인증 검증 +public String editProfile(HttpSession session, Model model) { + User user = (User) session.getAttribute("user"); + Boolean isVerified = (Boolean) session.getAttribute("isVerified"); + if (user == null || isVerified == null || !isVerified) { + return "redirect:/user/authenticate"; + } + model.addAttribute("user", user); + return "edit_profile"; +} + +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { + if (input.equals(code)) { + session.setAttribute("isVerified", true); + return "redirect:/user/edit_profile"; + } else { + return "redirect:/user/authenticate?error=true"; + } +} +``` + +### 안전한 구현 - 접근 통제 공통 모듈 (Java) +```java +public class AccessControl { + public static boolean isAuthenticated(HttpSession session) { + return session.getAttribute("user") != null; + } + public static boolean isVerified(HttpSession session) { + return Boolean.TRUE.equals(session.getAttribute("isVerified")); + } +} +``` + +--- + +## 11. 불충분한 권한 검증 (IN) + +### 안전한 구현 - 서버 사이드 세션 검증 (Java) +```java +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { + User currentUser = (User) session.getAttribute("currentUser"); + if (currentUser == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); + } + Inquiry inquiry = inquiryService.findInquiryById(id); + if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); + } + model.addAttribute("inquiry", inquiry); + return "inquiry_detail"; +} +``` + +--- + +## 12. 취약한 비밀번호 복구 절차 (PR) + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (Java) +```java +private static final String CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +private static final int PASSWORD_LENGTH = 12; + +private String generateTemporaryPassword() { + SecureRandom secureRandom = new SecureRandom(); + StringBuilder password = new StringBuilder(PASSWORD_LENGTH); + for (int i = 0; i < PASSWORD_LENGTH; i++) { + int randomIndex = secureRandom.nextInt(CHARACTERS.length()); + password.append(CHARACTERS.charAt(randomIndex)); + } + return password.toString(); +} +``` + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (PHP) +```php +function generateRandomPassword($length = 12) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; + $charactersLength = strlen($characters); + $randomPassword = ''; + for ($i = 0; $i < $length; $i++) { + $randomPassword .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomPassword; +} +``` + +--- + +## 13. 프로세스 검증 누락 (PV) + +### 안전한 구현 - 세션 기반 접근 통제 (Java/Spring) +```java +// 인터셉터 설정 - 비공개/공개 페이지 구분 +public class SessionConfig implements WebMvcConfigurer { + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SessionInterceptor()) + .addPathPatterns("/home", "/board/**") + .excludePathPatterns("/login", "/register", "/error"); + } +} + +public class SessionInterceptor implements HandlerInterceptor { + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + return true; + } +} +``` + +### 안전한 구현 - 플로우 제어 (PHP) +```php +session_start(); +if ($step_completed) { + $_SESSION['step1_completed'] = true; + header('Location: step2.php'); + exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { + header('Location: step1.php'); // 1단계 미완료 시 리다이렉트 + exit; +} +``` + +--- + +## 14. 악성 파일 업로드 (FU) + +### 안전한 구현 - 파일 업로드 보안 (Java) +```java +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of( + "image/jpeg", "image/png", "application/pdf", "text/plain"); + +// 파일명 정규화 +private static String normalizeFilename(String filename) { + if (filename == null) return null; + String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); + name = Normalizer.normalize(name, Normalizer.Form.NFC); + name = name.replace("\0", ""); + name = name.replaceAll("[<>:\"/\\\\|?*]", ""); + name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); + return name; +} + +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { + String safe = normalizeFilename(filename); + int dotCount = safe.length() - safe.replace(".", "").length(); + if (dotCount != 1) return ""; // 이중 확장자 차단 + int idx = safe.lastIndexOf('.'); + return (idx == -1) ? "" : safe.substring(idx + 1).toLowerCase(); +} + +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { + String original = file.getOriginalFilename(); + String ext = getExtension(original); + if (!Arrays.asList(ALLOWED_EXTENSIONS).contains(ext)) { + throw new IOException("허용되지 않은 확장자"); + } + // MIME 시그니처 검증 + Tika tika = new Tika(); + String mime = tika.detect(file.getInputStream()); + if (!ALLOWED_MIME.contains(mime)) { + throw new IOException("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; + Path savePath = Paths.get(uploadDir, newName); + file.transferTo(savePath.toFile()); + return newName; +} +``` + +### 안전한 구현 - 파일 업로드 보안 (PHP) +```php +function normalize_filename($filename) { + $filename = urldecode($filename); + $filename = normalizer_normalize($filename, Normalizer::FORM_C); + $filename = str_replace("\0", "", $filename); + $filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); + $filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); + return $filename; +} + +function is_valid_extension($filename, $allowed_exts) { + $safe = normalize_filename($filename); + if (substr_count($safe, '.') !== 1) return false; // 이중 확장자 차단 + $ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); + return in_array($ext, $allowed_exts, true); +} + +function save_upload($file, $uploadDir) { + $allowed_exts = ['jpg', 'jpeg', 'png', 'pdf', 'txt']; + $allowed_mime = ['image/jpeg', 'image/png', 'application/pdf', 'text/plain']; + + if (!is_valid_extension($file['name'], $allowed_exts)) { + throw new Exception("허용되지 않은 확장자"); + } + $mime = mime_content_type($file['tmp_name']); + if (!in_array($mime, $allowed_mime, true)) { + throw new Exception("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $newName = bin2hex(random_bytes(16)) . '.' . $ext; + $dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; + if (!move_uploaded_file($file['tmp_name'], $dest)) { + throw new Exception("파일 저장 실패"); + } + return $newName; +} +``` + +### 핵심 보안 조치 +1. 확장자 화이트리스트 검증 + MIME 타입 검증 +2. 파일명 난수화 (UUID 등) +3. 업로드 경로를 웹 디렉터리 외부에 배치 +4. 업로드된 파일의 실행 권한 제거 + +--- + +## 15. 파일 다운로드 (FD) + +### 안전한 구현 - 파일명 검증 (Java) +```java +public class FileDownloadUtil { + // 파일명에 영문, 숫자, 일부 특수문자만 허용 + public static boolean isValidFileName(String fileName) { + return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); + } + + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "png"); + + public static boolean isAllowedExtension(String filePath) { + String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + return ALLOWED_EXTENSIONS.contains(extension); + } +} + +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename) throws IOException { + if (!FileDownloadUtil.isValidFileName(filename) + || !FileDownloadUtil.isAllowedExtension(filename)) { + return ResponseEntity.badRequest().build(); + } + // ... 다운로드 로직 +} +``` + +### 안전한 구현 - 경로 정규화 (PHP) +```php +if (isset($_GET['file'])) { + $file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); + $filePath = realpath('../uploads/' . $file); // 경로 정규화 + // 파일 경로가 지정된 디렉터리 내에 있는지 확인 + if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { + downloadFile($filePath); + } else { + echo "잘못된 파일 경로입니다."; + exit; + } +} +``` + +### 우회 공격 대응 +| 인코딩 방식 | 예시 | +|-------------|------| +| URL 인코딩 | `.(%2e)`, `/(%2f)`, `\(%5c)` | +| 더블 URL 인코딩 | `.(%252e)`, `/(%252f)` | +| 16bit 유니코드 | `.(%u002e)`, `/(%u2215)` | +| 특수문자 중첩 | `....//` → `../` | +| 종단 문자 추가 | `[파일명]%00.jpg` | + +--- + +## 16. 불충분한 세션 관리 (IS) + +### 안전한 구현 - 세션 고정 방지 (Java/Spring) +```java +@RequestMapping("/login") +public String login(HttpServletRequest request) { + request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 + return "redirect:/home"; +} + +// Spring Security 설정 +@Override +protected void configure(HttpSecurity http) throws Exception { + http.sessionManagement() + .sessionFixation().migrateSession() + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(1).maxSessionsPreventsLogin(false) + .expiredUrl("/login?expired"); +} +``` + +### 세션 만료 시간 설정 +```xml + + + 60 + +``` +```properties +# Spring Boot application.properties +server.servlet.session.timeout=60m +``` +```php +// PHP - 세션 재생성 및 만료 설정 +session_start(); +session_regenerate_id(true); // 예측 불가능한 세션 ID 생성 +ini_set('session.gc_maxlifetime', 3600); // 60분 +ini_set('session.cookie_lifetime', 3600); +``` + +### JWT 보안 설정 +| 안전한 알고리즘 | 설명 | +|----------------|------| +| HS256~512 | 비밀 키 기반 HMAC 해시 | +| RS256~512 | 비대칭 키 RSA 서명 | +| ES256~512 | 타원 곡선 암호화 서명 | + +| 취약한 알고리즘 | 설명 | +|----------------|------| +| HS1, RS1 | SHA-1 기반 (취약) | +| none | 서명 생략 (위험) | +| plaintext | 평문 서명 (위험) | + +--- + +## 17. 데이터 평문 전송 (SN) +**조치:** +```apache +# Apache - TLSv1.2 이상 사용, SSLv2/v3 비활성화 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +``` +``` +# IIS - 레지스트리에서 SSL 2.0, 3.0 비활성화 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] +"Enabled"=dword:00000000 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] +"Enabled"=dword:00000000 +``` + +--- + +## 18. 쿠키 변조 (CC) + +### 안전한 구현 - AES + HMAC 쿠키 (Java) +```java +public class CookieUtil { + private static final int IV_LEN = 16, HMAC_LEN = 32; + private final byte[] encKey; // AES-256 키 (32 bytes) + private final byte[] hmacKey; // HMAC 키 + + // 보안 쿠키 생성 + public void addSecureCookie(HttpServletResponse resp, String name, + String plaintext, int maxAgeSec) throws Exception { + byte[] iv = new byte[IV_LEN]; + new SecureRandom().nextBytes(iv); + + // AES-256-CBC 암호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, + new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // HMAC 생성 + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); + mac.update(iv); + mac.update(ciphertext); + byte[] hmac = mac.doFinal(); + + // payload = IV + HMAC + 암호문 + byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; + System.arraycopy(iv, 0, payload, 0, iv.length); + System.arraycopy(hmac, 0, payload, iv.length, hmac.length); + System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); + + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); + + // HttpOnly, Secure, SameSite 속성 설정 + String header = String.format( + "%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", + name, encoded, maxAgeSec); + resp.addHeader("Set-Cookie", header); + } +} +``` + +--- + +## 19. 관리자 페이지 노출 (AE) +**조치:** +1. 유추하기 어려운 URL 및 포트로 관리자 페이지 변경 +2. 지정된 IP만 관리자 페이지 접근 허용 +3. 관리자 로그인 시 2차 인증(OTP, VPN, 인증서) 적용 +4. 하위 페이지별 세션 검증 구현 + +--- + +## 20. 자동화 공격 (CC) +**조치:** +1. 로그인 시도, 게시글 등록, SMS 발송 등에 횟수 제한 설정 +2. CAPTCHA 등 일회성 확인 로직 구현 +3. IDS/IPS 시스템으로 대량 패킷 감지 및 차단 +4. 로그인 실패 3~5회 초과 시 계정 잠금 로직 구현 + +--- + +## 21. 불필요한 Method 악용 (WM) + +### 조치 - Apache +```bash +# WebDAV 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs + +# 불필요한 메소드 제한 +# /etc/apache2/apache2.conf + + Dav Off + + Order Allow,Deny + Deny from all + + + +# TRACE 메소드 비활성화 +TraceEnable Off + +# CONNECT 메소드 비활성화 (mod_rewrite) + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} ^CONNECT + RewriteRule .* - [F] + +``` + +### 조치 - Tomcat +```xml + + + readonly + true + + + + +``` + +### 조치 - Nginx +```nginx +# WebDAV 비활성화 - dav_methods 지시어 삭제 +# Nginx는 0.5.17 이후 TRACE를 405로 거부 +# CONNECT 메소드는 기본적으로 미지원 +``` + +### 조치 - IIS +``` +# IIS 6.0 이상: 요청 필터링 > HTTP 동사 > 동사 거부에 TRACE 추가 +# WebDAV 기능 비활성화 확인 +``` diff --git a/skills-ko/kesekit-check-ko/scripts/cii/windows.md b/skills-ko/kesekit-check-ko/scripts/cii/windows.md new file mode 100644 index 0000000..e2970e3 --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/cii/windows.md @@ -0,0 +1,1489 @@ +# Windows 서버 취약점 점검/조치 스크립트 +> KISA 주요정보통신기반시설 기술적 취약점 분석평가 가이드 (W-01 ~ W-64) + +--- + +## 1. 계정 관리 + +### W-01: Administrator 계정 이름 변경 등 보안성 강화 (상) +**점검:** +```powershell +# Administrator(SID-500) 계정명 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select-Object Name, Enabled, SID + +# 로컬 보안 정책에서 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "NewAdministratorName" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# Administrator 계정명을 유추 불가능한 이름으로 변경 +Rename-LocalUser -Name "Administrator" -NewName "yourCustomAdmin" + +# 또는 wmic 사용 +wmic useraccount where "SID like '%-500'" rename "yourCustomAdmin" + +# GPO 방식: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: Administrator 계정 이름 바꾸기" 설정 +``` + +--- + +### W-02: Guest 계정 비활성화 (상) +**점검:** +```powershell +# Guest 계정 활성화 여부 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled + +# net 명령으로 확인 +net user Guest +``` +**조치:** +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" + +# 또는 net 명령 +net user Guest /active:no +``` + +--- + +### W-03: 불필요한 계정 제거 (상) +**점검:** +```powershell +# 전체 로컬 사용자 계정 목록 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Format-Table + +# 장기 미사용 계정 확인 (90일 이상 미로그인) +Get-LocalUser | Where-Object { + $_.Enabled -eq $true -and + $_.LastLogon -lt (Get-Date).AddDays(-90) +} | Select-Object Name, LastLogon +``` +**조치:** +```powershell +# 불필요한 계정 비활성화 +Disable-LocalUser -Name "<불필요한계정명>" + +# 불필요한 계정 삭제 +Remove-LocalUser -Name "<불필요한계정명>" +``` + +--- + +### W-04: 계정 잠금 임계값 설정 (상) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts + +# 상세 확인 (secedit) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutBadCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 임계값 5회로 설정 +net accounts /lockoutthreshold:5 + +# GPO 방식: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 임계값" = 5 +``` + +--- + +### W-05: 해독 가능한 암호화를 사용하여 암호 저장 해제 (상) +**점검:** +```powershell +# 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ClearTextPassword" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "해독 가능한 암호화를 사용하여 암호 저장" = 사용 안 함 +# secedit 인라인 설정 +secedit /export /cfg C:\secpol_tmp.cfg +(Get-Content C:\secpol_tmp.cfg) -replace "ClearTextPassword = 1","ClearTextPassword = 0" | Set-Content C:\secpol_tmp.cfg +secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol_tmp.cfg /areas SECURITYPOLICY +Remove-Item C:\secpol_tmp.cfg -Force +``` + +--- + +### W-06: 관리자 그룹에 최소한의 사용자 포함 (상) +**점검:** +```powershell +# Administrators 그룹 구성원 확인 +Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource + +# net 명령 +net localgroup Administrators +``` +**조치:** +```powershell +# 불필요한 계정을 Administrators 그룹에서 제거 +Remove-LocalGroupMember -Group "Administrators" -Member "<불필요한계정>" + +# 관리 업무용 계정과 일반 업무용 계정을 분리하여 운용 +``` + +--- + +### W-07: Everyone 사용 권한을 익명 사용자에 적용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous +# 값이 0이면 양호 + +# 로컬 보안 정책 내보내기로 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "EveryoneIncludesAnonymous" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: Everyone 사용 권한을 익명 사용자에게 적용" = 사용 안 함 +``` + +--- + +### W-08: 계정 잠금 기간 설정 (중) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts +# "잠금 기간(분)"과 "잠금 관찰 창(분)" 확인 + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutDuration|ResetLockoutCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 기간 60분, 잠금 수 원래대로 설정 기간 60분 +net accounts /lockoutduration:60 +net accounts /lockoutwindow:60 + +# GPO: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 기간" = 60분 +# "다음 시간 후 계정 잠금 수를 원래대로 설정" = 60분 +``` + +--- + +### W-09: 비밀번호 관리 정책 설정 (상) +**점검:** +```powershell +# 암호 정책 확인 +net accounts + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MinimumPasswordLength|PasswordComplexity|MaximumPasswordAge|MinimumPasswordAge|PasswordHistorySize" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 암호 정책 설정 +net accounts /minpwlen:8 /maxpwage:90 /minpwage:1 /uniquepw:4 + +# GPO: 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "암호는 복잡성을 만족해야 함" = 사용 +# "최소 암호 길이" = 8문자 +# "최대 암호 사용 기간" = 90일 +# "최소 암호 사용 기간" = 1일 +# "최근 암호 기억" = 4개 암호 기억됨 +``` + +--- + +### W-10: 마지막 사용자 이름 표시 안 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 마지막 사용자 이름 표시 안 함" = 사용 +``` + +--- + +### W-11: 로컬 로그온 허용 (중) +**점검:** +```powershell +# 로컬 로그온 허용 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeInteractiveLogonRight" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force + +# Administrators, IUSR_ 외 다른 계정이 있으면 취약 +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "로컬 로그온 허용" 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹 제거 + +# ntrights 유틸리티 사용 (Windows Resource Kit) +# ntrights -u "<제거할계정>" -r SeInteractiveLogonRight +``` + +--- + +### W-12: 익명 SID/이름 변환 허용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 (Windows 2003 이상) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LSAAnonymousNameLookup" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: 익명 SID/이름 변환 허용" = 사용 안 함 +``` + +--- + +### W-13: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한" = 사용 +``` + +--- + +### W-14: 원격터미널 접속 가능한 사용자 그룹 제한 (중) +**점검:** +```powershell +# Remote Desktop Users 그룹 구성원 확인 +Get-LocalGroupMember -Group "Remote Desktop Users" | Select-Object Name, ObjectClass + +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +# 0이면 원격 데스크톱 허용 상태 +``` +**조치:** +```powershell +# 관리자 외 별도 원격 접속 계정 생성 +New-LocalUser -Name "rdpUser" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -FullName "RDP 전용 사용자" +Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpUser" + +# 불필요한 계정 제거 +Remove-LocalGroupMember -Group "Remote Desktop Users" -Member "<불필요한계정>" +``` + +--- + +## 2. 서비스 관리 + +### W-15: 사용자 개인키 사용 시 암호 입력 (상) +**점검:** +```powershell +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ForceKeyProtection" C:\secpol_tmp.cfg +# 값이 2이면 양호 (키를 사용할 때마다 암호 입력) +Remove-Item C:\secpol_tmp.cfg -Force + +# 레지스트리 직접 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection +``` +**조치:** +```powershell +# 레지스트리 설정 (2 = 키를 사용할 때마다 암호 매번 입력) +reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection /t REG_DWORD /d 2 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용" +# = "키를 사용할 때마다 암호를 매 번 입력해야 함" +``` + +--- + +### W-16: 공유 권한 및 사용자 그룹 설정 (상) +**점검:** +```powershell +# 공유 폴더 목록 확인 +Get-SmbShare | Select-Object Name, Path, Description | Format-Table + +# 공유 폴더 권한에서 Everyone 확인 +Get-SmbShare | ForEach-Object { + $share = $_.Name + Get-SmbShareAccess -Name $share | Where-Object { $_.AccountName -like "*Everyone*" } | + Select-Object @{N='Share';E={$share}}, AccountName, AccessControlType, AccessRight +} +``` +**조치:** +```powershell +# 공유 폴더에서 Everyone 권한 제거 +Revoke-SmbShareAccess -Name "<공유명>" -AccountName "Everyone" -Force + +# 필요한 계정에 적절한 권한 추가 +Grant-SmbShareAccess -Name "<공유명>" -AccountName "<계정명>" -AccessRight Read -Force +``` + +--- + +### W-17: 하드디스크 기본 공유 제거 (상) +**점검:** +```powershell +# 기본 공유 확인 +net share +Get-SmbShare | Where-Object { $_.Name -match '^\w\$|^ADMIN\$' } | Select-Object Name, Path + +# AutoShareServer 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks 2>$null +``` +**조치:** +```powershell +# 기본 공유 중지 +net share C$ /delete +net share D$ /delete +net share ADMIN$ /delete + +# 재부팅 후 재생성 방지 (레지스트리) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-18: 불필요한 서비스 제거 (상) +**점검:** +```powershell +# 실행 중인 서비스 목록 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType | Format-Table + +# 불필요한 서비스 존재 여부 확인 +$unnecessaryServices = @("Alerter","ClipSrv","Browser","CryptSvc","DHCPClient", + "TrkWks","TrkSvr","ERSvc","HidServ","IMAPICD","Messenger","mnmsrvc", + "WmdmPmSN","Spooler","RemoteRegistry","simptcp","upnphost","WZCSVC") +Get-Service | Where-Object { $unnecessaryServices -contains $_.Name -and $_.Status -eq "Running" } | + Select-Object Name, DisplayName, Status +``` +**조치:** +```powershell +# 불필요한 서비스 중지 및 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 예시: Remote Registry 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled + +# 예시: Print Spooler 비활성화 (프린터 미사용 시) +Stop-Service -Name "Spooler" -Force +Set-Service -Name "Spooler" -StartupType Disabled +``` + +--- + +### W-19: 불필요한 IIS 서비스 구동 점검 (상) +**점검:** +```powershell +# IIS 서비스 상태 확인 +Get-Service -Name "W3SVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "IISADMIN" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# IIS 설치 여부 +Get-WindowsFeature -Name Web-Server 2>$null | Select-Object Name, Installed +``` +**조치:** +```powershell +# IIS 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "W3SVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "W3SVC" -StartupType Disabled -ErrorAction SilentlyContinue +Stop-Service -Name "IISADMIN" -Force -ErrorAction SilentlyContinue +Set-Service -Name "IISADMIN" -StartupType Disabled -ErrorAction SilentlyContinue + +# IIS 기능 제거 +Uninstall-WindowsFeature -Name Web-Server +``` + +--- + +### W-20: NetBIOS 바인딩 서비스 구동 점검 (상) +**점검:** +```powershell +# NetBIOS over TCP/IP 설정 확인 +Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | + Select-Object Description, TcpipNetbiosOptions +# TcpipNetbiosOptions: 0=DHCP기본, 1=사용, 2=사용안함 + +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces" /s /v NetbiosOptions +``` +**조치:** +```powershell +# NetBIOS over TCP/IP 비활성화 (WMI) +$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" +foreach ($adapter in $adapters) { + $adapter.SetTcpipNetbios(2) # 2 = NetBIOS 사용 안 함 +} + +# GUI: 네트워크 연결 > 속성 > TCP/IPv4 > 고급 > WINS 탭 +# "NetBIOS over TCP/IP 사용 안 함" 선택 +``` + +--- + +### W-21: 암호화되지 않는 FTP 서비스 비활성화 (상) +**점검:** +```powershell +# FTP 서비스 상태 확인 +Get-Service -Name "FTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "MSFTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# FTP 서비스 중지 및 비활성화 +Stop-Service -Name "FTPSVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "FTPSVC" -StartupType Disabled -ErrorAction SilentlyContinue + +# SFTP 또는 FTPS 대안 사용 권장 +``` + +--- + +### W-22: FTP 디렉토리 접근권한 설정 (상) +**점검:** +```powershell +# FTP 홈 디렉터리 경로 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/sites/site" -PSPath "IIS:\" -ErrorAction SilentlyContinue + +# FTP 홈 디렉터리 권한 확인 +icacls "C:\inetpub\ftproot" 2>$null +# Everyone 권한이 있으면 취약 +``` +**조치:** +```powershell +# FTP 홈 디렉터리에서 Everyone 권한 제거 +icacls "C:\inetpub\ftproot" /remove Everyone /T + +# 필요한 사용자에게만 권한 부여 +icacls "C:\inetpub\ftproot" /grant "ftpUser:(OI)(CI)RX" +``` + +--- + +### W-23: 공유 서비스에 대한 익명 접근 제한 설정 (상) +**점검:** +```powershell +# FTP 익명 인증 설정 확인 (IIS) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS FTP 익명 인증 비활성화 +Import-Module WebAdministration +Set-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -Value $false + +# 또는 IIS 관리자에서: +# FTP 사이트 > FTP 인증 > 익명 인증 = 사용 안 함 +``` + +--- + +### W-24: FTP 접근 제어 설정 (상) +**점검:** +```powershell +# IIS FTP IP 제한 설정 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/security/ipSecurity" -PSPath "IIS:\Sites\Default FTP Site" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS 관리자에서 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +# 1) 허용 항목 추가 (접속 허용 IP) +# 2) 기능 설정 편집 > 지정되지 않은 클라이언트 액세스 = 거부 + +# PowerShell (IIS 모듈) +Import-Module WebAdministration +# 특정 IP 허용 추가 +Add-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/ipSecurity" -Name "." -Value @{ipAddress="192.168.1.100";allowed="true"} +``` + +--- + +### W-25: DNS Zone Transfer 설정 (상) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 영역 전송 설정 확인 (DNS 서버 설치 시) +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, ZoneType +Get-DnsServerZone -ErrorAction SilentlyContinue | ForEach-Object { + Get-DnsServerZoneTransferPolicy -ZoneName $_.ZoneName -ErrorAction SilentlyContinue +} +``` +**조치:** +```powershell +# DNS 영역 전송을 특정 서버로만 제한 +# dnscmd /zoneresetsecondaries <영역이름> /securens +Set-DnsServerPrimaryZone -Name "<영역이름>" -SecureSecondaries TransferToSecureServers -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-26: RDS(Remote Data Services) 제거 (상) +**점검:** +```powershell +# MSADC 가상 디렉터리 존재 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch" 2>$null +``` +**조치:** +```powershell +# MSADC 가상 디렉터리 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 키 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\RDSServer.DataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\AdvancedDataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\VbBusObj.VbBusObjCls" /f 2>$null + +# 참고: Windows 2008 이상은 해당 없음 +``` + +--- + +### W-27: 최신 Windows OS Build 버전 적용 (상) +**점검:** +```powershell +# Windows 빌드 버전 확인 +[System.Environment]::OSVersion.Version +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").UBR + +# winver 실행 +winver + +# systeminfo로 상세 정보 +systeminfo | Select-String "OS 이름|OS 버전|OS Name|OS Version" +``` +**조치:** +```powershell +# Windows Update 확인 및 설치 +# 자동 업데이트: +# 제어판 > Windows Update + +# PowerShell로 업데이트 확인 (PSWindowsUpdate 모듈) +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot + +# 수동 패치: https://msrc.microsoft.com/update-guide +``` + +--- + +### W-28: 터미널 서비스 암호화 수준 설정 (중) +**점검:** +```powershell +# RDP 암호화 수준 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel +# 2=중간(클라이언트 호환 가능), 3=높음, 4=FIPS + +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MinEncryptionLevel 2>$null +``` +**조치:** +```powershell +# 레지스트리에서 암호화 수준 설정 (2 이상) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 3 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 보안 +# "클라이언트 연결 암호화 수준 설정" = 사용 (높음) +``` + +--- + +### W-29: 불필요한 SNMP 서비스 구동 점검 (중) +**점검:** +```powershell +# SNMP 서비스 상태 확인 +Get-Service -Name "SNMP" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# SNMP 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "SNMP" -Force -ErrorAction SilentlyContinue +Set-Service -Name "SNMP" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-30: SNMP Community String 복잡성 설정 (중) +**점검:** +```powershell +# SNMP Community String 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" 2>$null +# public, private이 있으면 취약 +``` +**조치:** +```powershell +# 기본 Community String 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v public /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v private /f 2>$null + +# 복잡한 Community String 추가 (읽기전용 = 4) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v "C0mpl3x$tr1ng!" /t REG_DWORD /d 4 /f + +# SNMP 서비스 재시작 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-31: SNMP Access Control 설정 (중) +**점검:** +```powershell +# SNMP 허용 호스트 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" 2>$null +# 값이 없으면 모든 호스트 허용 (취약) +``` +**조치:** +```powershell +# 특정 호스트로부터만 SNMP 패킷 수신 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d "192.168.1.100" /f + +# GUI: 서비스 > SNMP Service > 속성 > 보안 탭 +# "다음 호스트로부터 SNMP 패킷 받아들이기" 선택 후 호스트 등록 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-32: DNS 서비스 구동 점검 (중) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 동적 업데이트 설정 확인 +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, DynamicUpdate +``` +**조치:** +```powershell +# DNS 동적 업데이트 비활성화 +Set-DnsServerPrimaryZone -Name "<영역이름>" -DynamicUpdate None -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-33: HTTP/FTP/SMTP 배너 차단 (하) +**점검:** +```powershell +# IIS Server 헤더 확인 (HTTP 응답) +# (Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing).Headers["Server"] + +# IIS X-Powered-By 헤더 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -ErrorAction SilentlyContinue + +# SMTP 배너 확인 +# telnet localhost 25 으로 접속 시 배너 확인 +``` +**조치:** +```powershell +# [HTTP] IIS Server 헤더 제거 - URL Rewrite 모듈 필요 +# 1) URL Rewrite 설치: https://www.iis.net/downloads/microsoft/url-rewrite +# 2) 아웃바운드 규칙 추가: 서버 변수 RESPONSE_SERVER 비우기 + +# [HTTP] X-Powered-By 헤더 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -AtElement @{name="X-Powered-By"} -ErrorAction SilentlyContinue + +# [FTP] 기본 배너 숨기기 +# IIS 관리자 > FTP 사이트 > FTP 메시지 > "기본 배너 숨기기" 체크 + +# [SMTP] 배너 변경 +# cd C:\inetpub\AdminScripts +# cscript adsutil.vbs set smtpsvc/1/connectresponse "Authorized Access Only" +# net stop smtpsvc && net start smtpsvc +``` + +--- + +### W-34: Telnet 서비스 비활성화 (중) +**점검:** +```powershell +# Telnet 서비스 상태 확인 +Get-Service -Name "TlntSvr" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# Telnet 인증 방식 확인 (Windows 2003~2012) +# tlntadmn config 명령으로 확인 +``` +**조치:** +```powershell +# Telnet 서비스 중지 및 비활성화 +Stop-Service -Name "TlntSvr" -Force -ErrorAction SilentlyContinue +Set-Service -Name "TlntSvr" -StartupType Disabled -ErrorAction SilentlyContinue + +# 부득이 사용 시 NTLM 인증만 사용 +# tlntadmn config sec = +NTLM -passwd + +# 참고: Windows 2016 이상에서는 Telnet 서버 제공하지 않음 +``` + +--- + +### W-35: 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 (중) +**점검:** +```powershell +# 시스템 DSN 확인 +Get-OdbcDsn -DsnType System -ErrorAction SilentlyContinue | Select-Object Name, DriverName, Platform + +# 레지스트리에서 ODBC 데이터 소스 확인 +reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" 2>$null +``` +**조치:** +```powershell +# 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType System -ErrorAction SilentlyContinue + +# GUI: 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN +# 불필요한 데이터 소스 선택 후 제거 +``` + +--- + +### W-36: 원격터미널 접속 타임아웃 설정 (중) +**점검:** +```powershell +# RDP 세션 유휴 타임아웃 레지스트리 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime 2>$null +# 밀리초 단위: 1800000 = 30분 + +# 현재 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MaxIdleTime 2>$null +``` +**조치:** +```powershell +# 유휴 세션 타임아웃 30분(1800000ms) 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime /t REG_DWORD /d 1800000 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 세션 시간 제한 +# "활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정" = 사용 (30분) +``` + +--- + +### W-37: 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 (중) +**점검:** +```powershell +# 예약된 작업 목록 확인 +Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} | + Select-Object TaskName, TaskPath, State | + Format-Table -AutoSize + +# 예약된 작업 상세 정보 (실행 명령 포함) +Get-ScheduledTask | ForEach-Object { + $task = $_ + $actions = $task.Actions + foreach ($action in $actions) { + [PSCustomObject]@{ + TaskName = $task.TaskName + Execute = $action.Execute + Arguments = $action.Arguments + State = $task.State + } + } +} | Format-Table -AutoSize + +# schtasks 명령 +schtasks /query /fo LIST /v +``` +**조치:** +```powershell +# 의심스러운 예약 작업 비활성화 +Disable-ScheduledTask -TaskName "<작업이름>" + +# 의심스러운 예약 작업 삭제 +Unregister-ScheduledTask -TaskName "<작업이름>" -Confirm:$false + +# schtasks 명령 +schtasks /delete /tn "<작업이름>" /f +``` + +--- + +## 3. 패치 관리 + +### W-38: 주기적 보안 패치 및 벤더 권고사항 적용 (상) +**점검:** +```powershell +# 설치된 핫픽스 목록 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, InstalledOn, Description -First 20 + +# 시스템 정보에서 KB 목록 +systeminfo | findstr "KB" + +# 마지막 패치 설치 날짜 확인 +(Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).InstalledOn + +# Windows Update 이력 확인 +$session = New-Object -ComObject Microsoft.Update.Session +$searcher = $session.CreateUpdateSearcher() +$history = $searcher.QueryHistory(0, 20) +$history | Select-Object Title, Date, ResultCode | Format-Table +``` +**조치:** +```powershell +# Windows Update 실행 +# 수동: https://msrc.microsoft.com/update-guide +# 자동: 제어판 > Windows Update + +# PowerShell 모듈 사용 +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll +``` + +--- + +### W-39: 백신 프로그램 업데이트 (상) +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntispywareEnabled, AntivirusEnabled, + AntivirusSignatureLastUpdated, AntispywareSignatureLastUpdated + +# 백신 엔진 버전 확인 +Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, AntivirusSignatureVersion + +# 3rd party 백신 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState, pathToSignedProductExe +``` +**조치:** +```powershell +# Windows Defender 정의 업데이트 +Update-MpSignature + +# Windows Defender 수동 빠른 검사 +Start-MpScan -ScanType QuickScan + +# 3rd party 백신의 경우 해당 제조사 업데이트 절차 참조 +``` + +--- + +## 4. 로그 관리 + +### W-40: 정책에 따른 시스템 로깅 설정 (중) +**점검:** +```powershell +# 감사 정책 확인 +auditpol /get /category:* + +# 주요 감사 정책 확인 +auditpol /get /subcategory:"로그온","로그오프","계정 관리","정책 변경","권한 사용","디렉터리 서비스 액세스" +``` +**조치:** +```powershell +# 감사 정책 설정 (KISA 권고 기준) +auditpol /set /subcategory:"계정 관리" /failure:enable +auditpol /set /subcategory:"계정 로그온 이벤트" /success:enable /failure:enable +auditpol /set /subcategory:"권한 사용" /success:enable /failure:enable +auditpol /set /subcategory:"디렉터리 서비스 액세스" /failure:enable +auditpol /set /subcategory:"로그온" /success:enable /failure:enable +auditpol /set /subcategory:"로그오프" /success:enable /failure:enable +auditpol /set /subcategory:"정책 변경" /success:enable /failure:enable + +# GPO: 로컬 보안 정책 > 로컬 정책 > 감사 정책 +``` + +--- + +### W-41: NTP 및 시각 동기화 설정 (중) +**점검:** +```powershell +# NTP 동기화 상태 확인 +w32tm /query /status +w32tm /query /configuration + +# NTP 서버 설정 확인 +w32tm /dumpreg /subkey:parameters + +# 시간 서비스 상태 +Get-Service -Name "W32Time" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Windows Time 서비스 활성화 +Set-Service -Name "W32Time" -StartupType Automatic +Start-Service -Name "W32Time" + +# 내부 NTP 서버와 동기화 설정 +w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.server.ip" /update +w32tm /resync + +# 동기화 시간차 확인 +w32tm /stripchart /dataonly /computer:"ntp.server.ip" +``` + +--- + +### W-42: 이벤트 로그 관리 설정 (하) +**점검:** +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes, OverflowAction, MinimumRetentionDays | Format-Table + +# 레지스트리에서 직접 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System" /v MaxSize +``` +**조치:** +```powershell +# 이벤트 로그 최대 크기 10240KB(10MB) 이상 설정 +Limit-EventLog -LogName Application -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName Security -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName System -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 + +# 레지스트리 직접 설정 (바이트 단위: 10485760 = 10MB) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize /t REG_DWORD /d 10485760 /f +``` + +--- + +### W-43: 이벤트 로그 파일 접근 통제 설정 (중) +**점검:** +```powershell +# 시스템 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\config" +# Everyone 권한이 있으면 취약 + +# IIS 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\LogFiles" 2>$null +``` +**조치:** +```powershell +# 로그 디렉터리에서 Everyone 권한 제거 +icacls "C:\Windows\System32\config" /remove Everyone /T +icacls "C:\Windows\System32\LogFiles" /remove Everyone /T + +# Administrators, SYSTEM만 접근 가능하도록 설정 +``` + +--- + +## 5. 보안 관리 + +### W-44: 원격으로 액세스할 수 있는 레지스트리 경로 (상) +**점검:** +```powershell +# Remote Registry 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Remote Registry 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-45: 백신 프로그램 설치 (상) +**점검:** +```powershell +# Windows Defender 설치 및 활성화 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusEnabled, RealTimeProtectionEnabled + +# 설치된 백신 프로그램 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState + +# 프로그램 목록에서 백신 확인 +Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "antivirus|백신|V3|알약|Kaspersky|Norton|McAfee|Symantec" } | + Select-Object Name, Version +``` +**조치:** +```powershell +# Windows Defender 활성화 (비활성화된 경우) +Set-MpPreference -DisableRealtimeMonitoring $false + +# 백신이 설치되지 않은 경우 조직 정책에 따라 백신 프로그램 설치 +# Windows Defender는 Windows Server 2016 이상 기본 탑재 +Install-WindowsFeature -Name Windows-Defender -ErrorAction SilentlyContinue +``` + +--- + +### W-46: SAM 파일 접근 통제 설정 (상) +**점검:** +```powershell +# SAM 파일 접근 권한 확인 +icacls "C:\Windows\System32\config\SAM" +# Administrator, SYSTEM 외 다른 그룹/사용자 권한이 있으면 취약 +``` +**조치:** +```powershell +# SAM 파일 권한 설정 (Administrator, SYSTEM만 접근) +icacls "C:\Windows\System32\config\SAM" /inheritance:r +icacls "C:\Windows\System32\config\SAM" /grant "BUILTIN\Administrators:(F)" +icacls "C:\Windows\System32\config\SAM" /grant "NT AUTHORITY\SYSTEM:(F)" +``` + +--- + +### W-47: 화면보호기 설정 (하) +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +# ScreenSaveActive=1, ScreenSaveTimeOut<=600(10분), ScreenSaverIsSecure=1 이면 양호 +``` +**조치:** +```powershell +# 화면보호기 활성화 (대기 시간 10분, 암호 사용) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "C:\Windows\System32\scrnsave.scr" /f + +# GPO 일괄 적용: +# 사용자 구성 > 관리 템플릿 > 제어판 > 개인 설정 +# "화면 보호기 사용" = 사용 +# "화면 보호기 시간 제한" = 600초 +# "화면 보호기 암호로 보호" = 사용 +``` + +--- + +### W-48: 로그온하지 않고 시스템 종료 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon +# 값이 0이면 양호 +``` +**조치:** +```powershell +# 로그온 없이 시스템 종료 차단 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 종료: 로그온하지 않고 시스템 종료 허용" = 사용 안 함 +``` + +--- + +### W-49: 원격 시스템에서 강제로 시스템 종료 (상) +**점검:** +```powershell +# 원격 시스템 종료 권한 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeRemoteShutdownPrivilege" C:\secpol_tmp.cfg +# Administrators만 있으면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "원격 시스템에서 강제로 시스템 종료" 정책에 Administrators 외 다른 계정/그룹 제거 +``` + +--- + +### W-50: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail +# 값이 0이면 양호 (사용 안 함), 1이면 취약 + +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "CrashOnAuditFail" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 (사용 안 함) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료" = 사용 안 함 +``` + +--- + +### W-51: SAM 계정과 공유의 익명 열거 허용 안 함 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM +# RestrictAnonymous=1, RestrictAnonymousSAM=1 이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함" = 사용 +# "네트워크 액세스: SAM 계정의 익명 열거 허용 안 함" = 사용 + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-52: Autologon 기능 제어 (상) +**점검:** +```powershell +# AutoAdminLogon 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +# 값이 0이거나 존재하지 않으면 양호 + +# DefaultPassword 존재 여부 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword 2>$null +``` +**조치:** +```powershell +# Autologon 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f + +# DefaultPassword 제거 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f 2>$null +``` + +--- + +### W-53: 이동식 미디어 포맷 및 꺼내기 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD +# 값이 0(Administrators만)이면 양호 +``` +**조치:** +```powershell +# Administrators에게만 이동식 미디어 포맷/꺼내기 허용 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 이동식 미디어 포맷 및 꺼내기 허용" = Administrators +``` + +--- + +### W-54: DoS 공격 방어 레지스트리 설정 (중) +**점검:** +```powershell +# TCP/IP 스택 강화 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand 2>$null +# SynAttackProtect>=1, EnableDeadGWDetect=0, KeepAliveTime=300000, NoNameReleaseOnDemand=1 이면 양호 +``` +**조치:** +```powershell +# DoS 방어 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand /t REG_DWORD /d 1 /f + +# 주의: 잘못된 값 설정 시 OS 재설치 필요할 수 있음 +``` + +--- + +### W-55: 사용자가 프린터 드라이버를 설치할 수 없게 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers 2>$null +# 값이 1이면 양호 (사용자 설치 차단) +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 사용자가 프린터 드라이버를 설치할 수 없게 함" = 사용 +``` + +--- + +### W-56: SMB 세션 중단 관리 설정 (중) +**점검:** +```powershell +# SMB 세션 유휴 시간 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect 2>$null +# 값이 15 이하이면 양호 + +# 로그온 시간 만료 시 연결 끊기 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff 2>$null +# 값이 1이면 양호 +``` +**조치:** +```powershell +# SMB 유휴 세션 타임아웃 15분 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect /t REG_DWORD /d 15 /f + +# 로그온 시간 만료 시 연결 끊기 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기" = 사용 +# "Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간" = 15분 +``` + +--- + +### W-57: 로그온 시 경고 메시지 설정 (하) +**점검:** +```powershell +# 로그온 경고 메시지 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText +# 둘 다 값이 설정되어 있으면 양호 +``` +**조치:** +```powershell +# 로그온 경고 메시지 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption /t REG_SZ /d "경고" /f +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText /t REG_SZ /d "이 시스템은 인가된 사용자만 접근할 수 있습니다. 비인가 접근 시도 시 법적 처벌을 받을 수 있습니다." /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목" = 경고 제목 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트" = 경고 내용 +``` + +--- + +### W-58: 사용자별 홈 디렉터리 권한 설정 (중) +**점검:** +```powershell +# 사용자 홈 디렉터리 권한 확인 +Get-ChildItem "C:\Users" -Directory | ForEach-Object { + $acl = Get-Acl $_.FullName + $everyoneAccess = $acl.Access | Where-Object { $_.IdentityReference -like "*Everyone*" } + if ($everyoneAccess) { + [PSCustomObject]@{ + Directory = $_.Name + Everyone = ($everyoneAccess | ForEach-Object { $_.FileSystemRights }) -join ", " + } + } +} +``` +**조치:** +```powershell +# 홈 디렉터리에서 Everyone 권한 제거 (All Users, Default User 제외) +Get-ChildItem "C:\Users" -Directory | Where-Object { + $_.Name -notin @("All Users","Default User","Default","Public") +} | ForEach-Object { + icacls $_.FullName /remove Everyone /T +} +``` + +--- + +### W-59: LAN Manager 인증 수준 (중) +**점검:** +```powershell +# LAN Manager 인증 수준 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel +# 값이 5이면 양호 (NTLMv2 응답만 보냄, LM 및 NTLM 거부) +# 최소 3 이상 권장 +``` +**조치:** +```powershell +# NTLMv2 응답만 보내도록 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 보안: LAN Manager 인증 수준" = "NTLMv2 응답만 보내기/LM 및 NTLM 거부" +``` + +--- + +### W-60: 보안 채널 데이터 디지털 암호화 또는 서명 (중) +**점검:** +```powershell +# 보안 채널 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel 2>$null +# 세 값 모두 1이면 양호 +``` +**조치:** +```powershell +# 보안 채널 데이터 암호화/서명 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상)" = 사용 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우)" = 사용 +# "도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우)" = 사용 +``` + +--- + +### W-61: 파일 및 디렉토리 보호 (중) +**점검:** +```powershell +# 파일 시스템 유형 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size | Format-Table + +# CMD 확인 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT 파일 시스템을 NTFS로 변환 +# convert <드라이브명>: /fs:ntfs +# 예: convert F: /fs:ntfs + +# 주의: 변환은 비가역적이며 초기 설치 시 NTFS 선택 권장 +# 기존 FAT에서 변환 시 Default ACL이 적용되지 않을 수 있음 +``` + +--- + +### W-62: 시작 프로그램 목록 분석 (중) +**점검:** +```powershell +# 시작 프로그램 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 2>$null + +# 시작 폴더 확인 +Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue +Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue + +# WMI 시작 프로그램 목록 +Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table -AutoSize +``` +**조치:** +```powershell +# 불필요한 시작 프로그램 제거 (레지스트리) +reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f +reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f + +# msconfig 실행 (Windows 2008 이하) +# 시작 프로그램 탭에서 불필요한 항목 체크 해제 +``` + +--- + +### W-63: 도메인 컨트롤러-사용자의 시간 동기화 (중) +**점검:** +```powershell +# Kerberos 최대 허용 오차 확인 (도메인 컨트롤러) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MaxClockSkew" C:\secpol_tmp.cfg +# 값이 5 이하이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force + +# 현재 시간 동기화 상태 +w32tm /query /status +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +# "컴퓨터 시계 동기화 최대 허용 오차" = 5분 + +# 시간 동기화 강제 수행 +w32tm /resync /force +``` + +--- + +### W-64: 윈도우 방화벽 설정 (중) +**점검:** +```powershell +# Windows 방화벽 프로필 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled | Format-Table + +# 방화벽 규칙 요약 +Get-NetFirewallProfile | ForEach-Object { + $profile = $_.Name + $enabled = $_.Enabled + [PSCustomObject]@{ + Profile = $profile + Enabled = $enabled + InboundDefault = $_.DefaultInboundAction + OutboundDefault = $_.DefaultOutboundAction + } +} | Format-Table + +# netsh 명령 +netsh advfirewall show allprofiles +``` +**조치:** +```powershell +# Windows 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True + +# netsh 명령 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정 또는 해제 +# 모든 프로필에 대해 "사용" 설정 +``` diff --git a/skills-ko/kesekit-check-ko/scripts/robot-security/cert-and-protocol.md b/skills-ko/kesekit-check-ko/scripts/robot-security/cert-and-protocol.md new file mode 100644 index 0000000..259a9d3 --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/robot-security/cert-and-protocol.md @@ -0,0 +1,96 @@ +# Certificate & Protocol Security + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: IA-04, ER-01 + +--- + +## 1. OpenSSL Certificate Inspection (IA-04) + +```bash +# 인증서 내용 확인 명령어 +openssl x509 -in server.crt -text -noout +``` + +--- + +## 2. Key File Permission Hardening (IA-04) + +```bash +# 개인키 접근 권한 설정 +chown robot-service:robot-service /etc/robot/keys/device.key +chmod 600 /etc/robot/keys/device.key # 파일 소유자만 접근 가능 +``` + +--- + +## 3. OPC UA Security Configuration (IA-04) + +### 3.1 Certificate Validation + +```ini +# server.conf (OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +### 3.2 Certificate Revocation Check + +```ini +# server.conf (OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +--- + +## 4. TLS Client Certificate Verification - Python (IA-04) + +```python +import ssl, socket + +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 + +with socket.create_connection(("server.com", 443)) as sock: + with context.wrap_socket(sock, server_hostname="server.com") as ssock: + print("TLS Established:", ssock.version()) +``` + +--- + +## 5. Crypto Algorithm Requirements (IA-04) + +| Category | Recommended | Insufficient | +|---|---|---| +| Key algorithm | RSA >= 2048bit or ECC P-256+ | RSA 1024bit or below, ECC P-192 or below | +| Hash algorithm | SHA-256+ (SHA-2/SHA-3 family) | SHA-1, MD5 | +| TLS protocol | TLS 1.2+ (recommended: TLS 1.3) | TLS 1.0 / 1.1 | + +--- + +## 6. Audit Log API Access (ER-01) + +```http +GET /api/audit/logs +Authorization: Bearer + +HTTP/1.1 200 OK +{ + "entries": [...], + "integrity": "sha256:f45a..." +} +``` + +--- + +## 7. Platform-specific Certificate ACL Examples (IA-04) + +| Platform | Certificate Store | +|---|---| +| General server / cloud | DB table | +| OPC UA | /pki/trusted, /pki/rejected folders | +| MQTT mTLS | CA DB, allowed client certificate list | +| Robot PKI | KV DB, HSM integration | diff --git a/skills-ko/kesekit-check-ko/scripts/robot-security/firewall-hardening.md b/skills-ko/kesekit-check-ko/scripts/robot-security/firewall-hardening.md new file mode 100644 index 0000000..8d8820f --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/robot-security/firewall-hardening.md @@ -0,0 +1,106 @@ +# Firewall & Network Hardening + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: DFR-02, RA-01, RA-08 + +--- + +## 1. Host Firewall (iptables) + +### 1.1 MQTT / HTTPS Only (DFR-02 Protocol Filtering) + +```bash +# MQTT 및 HTTPS 외의 포트 차단 +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.2 SSH + HTTPS Only (RA-01 DoS Prevention) + +```bash +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.3 Unnecessary Port Blocking (RA-08 Service Restriction) + +```bash +# 외부 포트 스캔 (TCP 포트 확인) +nmap -sS 192.168.0.10 + +# 불필요한 포트(예: FTP 21, Telnet 23, TFTP 69) 차단 +sudo iptables -A INPUT -p tcp --dport 21 -j DROP +sudo iptables -A INPUT -p tcp --dport 23 -j DROP +sudo iptables -A INPUT -p udp --dport 69 -j DROP +``` + +--- + +## 2. Service Hardening (RA-08) + +```bash +# 현재 활성화된 포트 및 프로세스 확인 +sudo ss -tulnp +sudo netstat -tulnp + +# 서비스 상태 확인 및 비활성화 +sudo systemctl status telnet +sudo systemctl disable telnet +sudo systemctl stop telnet +``` + +--- + +## 3. VLAN Network Segmentation (RA-01 L2) + +Control network and sensor network separation via VLAN. + +```bash +# 제어 망 (VLAN ID 10) +sudo ip link add link eth0 name eth0.10 type vlan id 10 +# 센서 망 (VLAN ID 20) +sudo ip link add link eth0 name eth0.20 type vlan id 20 + +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +``` + +--- + +## 4. sysctl Network Tuning (RA-01) + +```bash +sudo sysctl -w net.core.somaxconn=128 +sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +ulimit -n 1024 +``` + +--- + +## 5. Nginx Rate Limiting (RA-01) + +```nginx +# /etc/nginx/nginx.conf +http { + limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; + server { + listen 443 ssl; + server_name example.com; + location / { + limit_req zone=req_limit_per_ip burst=5 nodelay; + limit_conn conn_limit_per_ip 10; + } + } +} +``` + +--- + +## 6. Suricata IDS Rule (RA-01 L2 DoS Detection) + +```yaml +alert tcp any any -> $HOME_NET any (msg:"TCP SYN Flood"; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +``` diff --git a/skills-ko/kesekit-check-ko/scripts/robot-security/resource-management.md b/skills-ko/kesekit-check-ko/scripts/robot-security/resource-management.md new file mode 100644 index 0000000..fd35dce --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/robot-security/resource-management.md @@ -0,0 +1,96 @@ +# Resource Management & Monitoring + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: RA-02, RA-03 + +--- + +## 1. cgroups - Security Agent Resource Limits (RA-02) + +Restrict CPU and memory usage for security processes so they do not interfere with real-time robot control. + +```bash +# cgroup 생성 (cpu + memory) +sudo cgcreate -g cpu,memory:/robot_security + +# CPU 할당 제한 (20000us = 20% of 1 core at default 100000us period) +echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us + +# 메모리 제한 (256MB) +echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes + +# 실행 중인 보안 에이전트를 cgroup에 할당 +sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +``` + +--- + +## 2. OpenSSL Hardware Acceleration Check (RA-02) + +Offload crypto operations to hardware to reduce CPU overhead. + +```bash +openssl engine -t +# Expected output: +# (dynamic) Dynamic engine loading support +# (rdrand) Intel RDRAND engine +# (aesni) Intel AES-NI engine +``` + +--- + +## 3. logrotate Configuration (RA-02) + +Prevent audit/operational logs from exhausting disk space. + +```bash +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { + size 50M + rotate 5 + compress + missingok + notifempty +} +``` + +--- + +## 4. System Resource Monitoring (RA-03) + +Dashboard or CLI-based monitoring of CPU, memory, disk, and network utilization. The robot system should provide a user interface for operators to view resource status in real-time. + +Key resource metrics to monitor: +- CPU usage per core / per process +- Memory (RSS / swap) usage +- Disk I/O and capacity +- Network interface throughput and error rates + +--- + +## 5. ROS Publisher Rate Limiting (RA-01 L2) + +Limit sensor data publish rate to prevent communication overload. + +```cpp +ros::Publisher pub = nh.advertise("sensor_data", 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { + std_msgs::String msg; + msg.data = "sensor data"; + pub.publish(msg); + loop_rate.sleep(); +} +``` + +--- + +## 6. ROS2 QoS Security Profile (RA-01 L2) + +```yaml +QoSProfile: + reliability: RELIABLE + durability: TRANSIENT_LOCAL + history: KEEP_LAST + depth: 10 +``` diff --git a/skills-ko/kesekit-check-ko/scripts/robot-security/sbom-audit.md b/skills-ko/kesekit-check-ko/scripts/robot-security/sbom-audit.md new file mode 100644 index 0000000..1b1387f --- /dev/null +++ b/skills-ko/kesekit-check-ko/scripts/robot-security/sbom-audit.md @@ -0,0 +1,84 @@ +# SBOM & Supply Chain Audit + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: SC-05 + +--- + +## 1. SBOM Generation with Syft (SC-05) + +Generate a Software Bill of Materials from source code or container images using Anchore Syft. + +```bash +# Syft를 통한 SBOM 생성 (JSON format) +syft <소스코드 경로> -o json > sbom.json +``` + +--- + +## 2. Vulnerability Scanning with Grype (SC-05) + +Scan the generated SBOM for known vulnerabilities (CVEs). + +```bash +# Grype를 통한 취약점 식별 +grype sbom://sbom.json +``` + +--- + +## 3. Package Manager Built-in Audit Commands (SC-05) + +Use built-in security features of each package manager to analyze declared dependencies and automatically scan for known vulnerabilities. + +### Node.js (NPM) + +```bash +npm audit +``` + +### Python (pip) + +```bash +pip-audit +``` + +### Java (Maven) + +```bash +mvn dependency-check:check +``` + +### .NET (NuGet) + +```bash +dotnet list package --vulnerable +``` + +### Rust (Cargo) + +```bash +cargo audit +``` + +--- + +## 4. CI/CD Pipeline Integration (SC-05) + +Integrate vulnerability scanning into CI/CD pipelines (GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins, etc.) to automatically detect vulnerabilities before deployment. + +### Vulnerability Response Record Fields + +| Field | Description | +|---|---| +| CVE ID | 취약점 식별자 | +| 구성요소 | 영향받는 컴포넌트(이름/버전) | +| 기술적 위험 | 공개 PoC/익스플로잇 존재 여부, CVSS 점수 | +| 비즈니스 영향 | 영향을 받는 서비스/데이터/운영 영향 | +| EoS 여부 | 해당 구성요소의 지원상태 | +| 우선 순위 | P0/P1/P2 또는 High/Medium/Low | +| 대응방안 | 패치/업그레이드/가상패치/격리 등 | +| SLA | 목표 기간 | +| 담당자 및 일정 | 책임부서, 담당자, 완료예정일 | +| 검증 방법 | 재스캔, 기능/회귀 테스트 결과 링크 | +| 상태 | 계획/진행/완료/예외(승인) | diff --git a/skills-ko/check/references/ai-security/developer.md b/skills-ko/kesekit-check-ko/templates/ai-security/developer.md similarity index 100% rename from skills-ko/check/references/ai-security/developer.md rename to skills-ko/kesekit-check-ko/templates/ai-security/developer.md diff --git a/skills-ko/kesekit-check-ko/templates/ai-security/user-guide-checklist.md b/skills-ko/kesekit-check-ko/templates/ai-security/user-guide-checklist.md new file mode 100644 index 0000000..903ec01 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/ai-security/user-guide-checklist.md @@ -0,0 +1,13 @@ +# AI 이용자 보안 체크리스트 요약 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +| # | 항목 | 확인 | +|---|------|:----:| +| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | +| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | +| 3 | AI 서비스 이용약관을 확인했는가? | □ | +| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | +| 5 | AI 출력 결과를 검증하고 있는가? | □ | +| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | +| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills-ko/check/references/cii/admin.md b/skills-ko/kesekit-check-ko/templates/cii/admin.md similarity index 100% rename from skills-ko/check/references/cii/admin.md rename to skills-ko/kesekit-check-ko/templates/cii/admin.md diff --git a/skills-ko/guide/references/cii/cloud.md b/skills-ko/kesekit-check-ko/templates/cii/cloud.md similarity index 82% rename from skills-ko/guide/references/cii/cloud.md rename to skills-ko/kesekit-check-ko/templates/cii/cloud.md index ef26ef5..42834e8 100644 --- a/skills-ko/guide/references/cii/cloud.md +++ b/skills-ko/kesekit-check-ko/templates/cii/cloud.md @@ -42,23 +42,4 @@ | CA-18 | 컨테이너/서버리스 보안 설정 | 중 | | CA-19 | 클라우드 서비스 가용성 관리 | 중 | -### 주요 점검 명령어 -```bash -# AWS -aws iam list-users -aws iam get-credential-report -aws ec2 describe-security-groups -aws s3api get-bucket-encryption --bucket -aws cloudtrail describe-trails - -# Azure -az ad user list -az network nsg list -az storage account list - -# GCP -gcloud iam service-accounts list -gcloud compute firewall-rules list -``` - ## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills-ko/check/references/cii/control-system.md b/skills-ko/kesekit-check-ko/templates/cii/control-system.md similarity index 100% rename from skills-ko/check/references/cii/control-system.md rename to skills-ko/kesekit-check-ko/templates/cii/control-system.md diff --git a/skills-ko/fix/references/cii/database.md b/skills-ko/kesekit-check-ko/templates/cii/database.md similarity index 82% rename from skills-ko/fix/references/cii/database.md rename to skills-ko/kesekit-check-ko/templates/cii/database.md index 67e8efc..d6847e0 100644 --- a/skills-ko/fix/references/cii/database.md +++ b/skills-ko/kesekit-check-ko/templates/cii/database.md @@ -17,23 +17,6 @@ | D-08 | 안전한 암호화 알고리즘 사용 | 상 | | D-09 | 로그인 실패 시 잠금정책 설정 | 중 | -### 주요 점검 명령어 -```sql --- Oracle: 계정 확인 -SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; --- Oracle: 비밀번호 변경 -ALTER USER <계정> IDENTIFIED BY <신규비밀번호>; - --- MSSQL: sa 비밀번호 변경 -ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; - --- MySQL: root 비밀번호 변경 -ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; - --- PostgreSQL: 역할 확인 -SELECT rolname, rolsuper FROM pg_roles; -``` - ## 2. 접근 관리 (7항목) | 코드 | 항목 | 중요도 | diff --git a/skills-ko/check/references/cii/mobile.md b/skills-ko/kesekit-check-ko/templates/cii/mobile.md similarity index 100% rename from skills-ko/check/references/cii/mobile.md rename to skills-ko/kesekit-check-ko/templates/cii/mobile.md diff --git a/skills-ko/check/references/cii/network.md b/skills-ko/kesekit-check-ko/templates/cii/network.md similarity index 86% rename from skills-ko/check/references/cii/network.md rename to skills-ko/kesekit-check-ko/templates/cii/network.md index 1f99ce4..e168fb3 100644 --- a/skills-ko/check/references/cii/network.md +++ b/skills-ko/kesekit-check-ko/templates/cii/network.md @@ -66,22 +66,4 @@ | N-37 | pad 차단 | 중 | | N-38 | mask-reply 차단 | 중 | -### 주요 점검 명령어 (Cisco IOS) -``` -! 계정 관리 -show running-config | include username -show running-config | include enable secret - -! 접근 관리 -show running-config | include line vty -show running-config | include access-class - -! SNMP -show running-config | include snmp-server - -! 불필요 서비스 -show running-config | include no service -show ip http server -``` - ## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills-ko/guide/references/cii/pc.md b/skills-ko/kesekit-check-ko/templates/cii/pc.md similarity index 82% rename from skills-ko/guide/references/cii/pc.md rename to skills-ko/kesekit-check-ko/templates/cii/pc.md index c3dd9fc..b5ca66b 100644 --- a/skills-ko/guide/references/cii/pc.md +++ b/skills-ko/kesekit-check-ko/templates/cii/pc.md @@ -41,22 +41,4 @@ | PC-17 | 이동식 미디어 자동실행 방지 | 상 | | PC-18 | 원격 지원 금지 정책 설정 | 중 | -### 주요 점검 명령어 -```powershell -# PC-01: 비밀번호 최대 사용기간 -net accounts | findstr "최대" - -# PC-04: 공유 폴더 -net share - -# PC-13~14: 백신 -Get-MpComputerStatus - -# PC-15: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled - -# PC-16: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -``` - ## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills-ko/check/references/cii/physical.md b/skills-ko/kesekit-check-ko/templates/cii/physical.md similarity index 100% rename from skills-ko/check/references/cii/physical.md rename to skills-ko/kesekit-check-ko/templates/cii/physical.md diff --git a/skills-ko/check/references/cii/security-equip.md b/skills-ko/kesekit-check-ko/templates/cii/security-equip.md similarity index 100% rename from skills-ko/check/references/cii/security-equip.md rename to skills-ko/kesekit-check-ko/templates/cii/security-equip.md diff --git a/skills-ko/guide/references/cii/unix.md b/skills-ko/kesekit-check-ko/templates/cii/unix.md similarity index 68% rename from skills-ko/guide/references/cii/unix.md rename to skills-ko/kesekit-check-ko/templates/cii/unix.md index b9688e3..969c52f 100644 --- a/skills-ko/guide/references/cii/unix.md +++ b/skills-ko/kesekit-check-ko/templates/cii/unix.md @@ -21,35 +21,6 @@ | U-12 | 세션 종료 시간 설정 | 하 | | U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | -### 주요 점검 명령어 -```bash -# U-01: root 원격 접속 제한 -grep -i "PermitRootLogin" /etc/ssh/sshd_config -cat /etc/default/login | grep CONSOLE # Solaris -cat /etc/securetty # Linux - -# U-02: 비밀번호 정책 -cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" -cat /etc/security/pwquality.conf # Linux - -# U-03: 계정 잠금 -cat /etc/pam.d/system-auth | grep pam_tally -cat /etc/security/user | grep loginretries # AIX - -# U-04: shadow 파일 보호 -ls -la /etc/shadow - -# U-05: UID 0 점검 -awk -F: '$3==0 {print $1}' /etc/passwd - -# U-06: su 제한 -cat /etc/pam.d/su | grep pam_wheel -ls -la /usr/bin/su - -# U-12: 세션 타임아웃 -echo $TMOUT -``` - --- ## 2. 파일 및 디렉터리 관리 (20항목) @@ -77,38 +48,6 @@ echo $TMOUT | U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | | U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | -### 주요 점검 명령어 -```bash -# U-14: root PATH -echo $PATH | grep "::" -echo $PATH | grep ":$" - -# U-16~U-22: 주요 파일 권한 -ls -la /etc/passwd /etc/shadow /etc/hosts /etc/services -ls -la /etc/inetd.conf /etc/xinetd.conf /etc/syslog.conf /etc/rsyslog.conf - -# U-23: SUID/SGID -find / -perm -4000 -o -perm -2000 2>/dev/null - -# U-25: world writable -find / -type f -perm -002 2>/dev/null - -# U-26: /dev 점검 -find /dev -type f 2>/dev/null - -# U-27: rhosts -find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null - -# U-28: 접속 제한 -cat /etc/hosts.allow -cat /etc/hosts.deny -iptables -L - -# U-30: umask -umask -grep umask /etc/profile /etc/bashrc -``` - --- ## 3. 서비스 관리 (30항목) @@ -146,32 +85,6 @@ grep umask /etc/profile /etc/bashrc | U-62 | 로그인 시 경고 메시지 설정 | 하 | | U-63 | sudo 명령어 접근 관리 | 중 | -### 주요 점검 명령어 -```bash -# U-34~U-44: 불필요 서비스 점검 -systemctl list-unit-files --state=enabled -chkconfig --list # CentOS 6 -inetadm # Solaris - -# U-39~U-40: NFS -showmount -e -cat /etc/exports -cat /etc/dfs/dfstab # Solaris - -# U-45~U-48: 메일 서비스 -sendmail -d0.1 -bt < /dev/null 2>&1 | grep Version -postconf mail_version -cat /etc/mail/sendmail.cf | grep "O PrivacyOptions" - -# U-49~U-51: DNS -named -v -cat /etc/named.conf | grep "allow-transfer" - -# U-58~U-61: SNMP -cat /etc/snmp/snmpd.conf | grep -i community -ps -ef | grep snmp -``` - --- ## 4. 패치 관리 (1항목) @@ -180,14 +93,6 @@ ps -ef | grep snmp |------|------|:------:| | U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -```bash -# 패치 현황 -uname -a -rpm -qa --last | head -20 # Linux -showrev -p # Solaris -instfix -i | grep ML # AIX -``` - --- ## 5. 로그 관리 (4항목) @@ -198,20 +103,6 @@ instfix -i | grep ML # AIX | U-66 | 정책에 따른 시스템 로깅 설정 | 중 | | U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | -```bash -# U-65: NTP -ntpq -p -cat /etc/ntp.conf -chronyc sources # CentOS 8+ - -# U-66: 로깅 설정 -cat /etc/rsyslog.conf -cat /etc/syslog.conf - -# U-67: 로그 권한 -ls -la /var/log/ -``` - --- ## 판단 기준 diff --git a/skills-ko/check/references/cii/virtualization.md b/skills-ko/kesekit-check-ko/templates/cii/virtualization.md similarity index 100% rename from skills-ko/check/references/cii/virtualization.md rename to skills-ko/kesekit-check-ko/templates/cii/virtualization.md diff --git a/skills-ko/check/references/cii/web-service.md b/skills-ko/kesekit-check-ko/templates/cii/web-service.md similarity index 78% rename from skills-ko/check/references/cii/web-service.md rename to skills-ko/kesekit-check-ko/templates/cii/web-service.md index e3f96bd..9f6298a 100644 --- a/skills-ko/check/references/cii/web-service.md +++ b/skills-ko/kesekit-check-ko/templates/cii/web-service.md @@ -49,26 +49,4 @@ | WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | | WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | -### 주요 점검 명령어 -```bash -# WEB-04: 디렉터리 리스팅 -# Apache -grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" -# Nginx -grep -i "autoindex" /etc/nginx/nginx.conf - -# WEB-09: 프로세스 권한 -ps -ef | grep httpd | grep -v root - -# WEB-16: 헤더 정보 노출 -# Apache: grep "ServerTokens" httpd.conf → Prod 설정 -# Nginx: grep "server_tokens" nginx.conf → off 설정 - -# WEB-18: WebDAV -grep -i "LoadModule.*dav" /etc/httpd/conf/httpd.conf - -# WEB-20: SSL/TLS -grep -i "SSLProtocol\|ssl_protocols" /etc/httpd/conf.d/ssl.conf /etc/nginx/nginx.conf -``` - ## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills-ko/check/references/cii/webapp.md b/skills-ko/kesekit-check-ko/templates/cii/webapp.md similarity index 71% rename from skills-ko/check/references/cii/webapp.md rename to skills-ko/kesekit-check-ko/templates/cii/webapp.md index 5a1888d..ca84427 100644 --- a/skills-ko/check/references/cii/webapp.md +++ b/skills-ko/kesekit-check-ko/templates/cii/webapp.md @@ -44,27 +44,4 @@ | IL | 불필요한 정보 노출 | 중 | | AU | 부적절한 감사 로깅 | 중 | -### 주요 점검 패턴 -``` -# SQL Injection -- 문자열 연결 쿼리: "SELECT * FROM users WHERE id = '" + input -- 안전: PreparedStatement, 매개변수화 쿼리, ORM - -# XSS -- innerHTML, document.write(input), v-html -- 안전: textContent, DOMPurify, 자동 이스케이프 - -# Command Injection -- Runtime.exec(input), subprocess(shell=True) -- 안전: 화이트리스트 검증, execFile - -# CSRF -- POST 요청에 CSRF 토큰 누락 -- 안전: 프레임워크 CSRF 미들웨어 - -# File Upload -- 확장자 미검증, 웹 루트 내 저장 -- 안전: 화이트리스트, 웹 루트 외부 저장, 랜덤 파일명 -``` - ## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills-ko/check/references/cii/windows.md b/skills-ko/kesekit-check-ko/templates/cii/windows.md similarity index 74% rename from skills-ko/check/references/cii/windows.md rename to skills-ko/kesekit-check-ko/templates/cii/windows.md index cef3781..15a5c32 100644 --- a/skills-ko/check/references/cii/windows.md +++ b/skills-ko/kesekit-check-ko/templates/cii/windows.md @@ -21,24 +21,6 @@ | W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | | W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | -### 주요 점검 명령어 -```powershell -# W-01: Administrator 계정명 -Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select Name - -# W-02: Guest 비활성화 -Get-LocalUser -Name "Guest" | Select Enabled - -# W-04: 계정 잠금 -net accounts - -# W-06: 관리자 그룹 -net localgroup Administrators - -# W-09: 패스워드 정책 -net accounts -``` - --- ## 2. 서비스 관리 (23항목) @@ -69,23 +51,6 @@ net accounts | W-36 | 원격터미널 접속 타임아웃 설정 | 중 | | W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | -### 주요 점검 명령어 -```powershell -# W-17: 기본 공유 -net share -Get-SmbShare - -# W-18: 서비스 목록 -Get-Service | Where-Object {$_.Status -eq "Running"} - -# W-19: IIS -Get-Service W3SVC - -# W-29~31: SNMP -Get-Service SNMP -reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" -``` - --- ## 3. 패치 관리 (2항목) @@ -95,15 +60,6 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommuniti | W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | | W-39 | 백신 프로그램 업데이트 | 상 | -```powershell -# W-38: 패치 현황 -Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 10 -systeminfo | findstr "KB" - -# W-39: 백신 -Get-MpComputerStatus # Windows Defender -``` - --- ## 4. 로그 관리 (4항목) @@ -115,17 +71,6 @@ Get-MpComputerStatus # Windows Defender | W-42 | 이벤트 로그 관리 설정 | 하 | | W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | -```powershell -# W-40: 감사 정책 -auditpol /get /category:* - -# W-41: NTP -w32tm /query /status - -# W-42: 이벤트 로그 설정 -Get-EventLog -List -``` - --- ## 5. 보안 관리 (21항목) @@ -154,28 +99,6 @@ Get-EventLog -List | W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | | W-64 | 윈도우 방화벽 설정 | 중 | -### 주요 점검 명령어 -```powershell -# W-44: 원격 레지스트리 -Get-Service RemoteRegistry | Select Status - -# W-46: SAM 파일 -icacls C:\Windows\System32\config\SAM - -# W-47: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure - -# W-52: Autologon -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon - -# W-59: LAN Manager -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel - -# W-64: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled -``` - --- ## 통계 diff --git a/skills-ko/check/references/robot-security/cyber-resilience.md b/skills-ko/kesekit-check-ko/templates/robot-security/cyber-resilience.md similarity index 100% rename from skills-ko/check/references/robot-security/cyber-resilience.md rename to skills-ko/kesekit-check-ko/templates/robot-security/cyber-resilience.md diff --git a/skills-ko/check/references/robot-security/iec62443.md b/skills-ko/kesekit-check-ko/templates/robot-security/iec62443.md similarity index 100% rename from skills-ko/check/references/robot-security/iec62443.md rename to skills-ko/kesekit-check-ko/templates/robot-security/iec62443.md diff --git a/skills-ko/check/references/robot-security/overview.md b/skills-ko/kesekit-check-ko/templates/robot-security/overview.md similarity index 100% rename from skills-ko/check/references/robot-security/overview.md rename to skills-ko/kesekit-check-ko/templates/robot-security/overview.md diff --git a/skills-ko/check/references/robot-security/ssdf.md b/skills-ko/kesekit-check-ko/templates/robot-security/ssdf.md similarity index 100% rename from skills-ko/check/references/robot-security/ssdf.md rename to skills-ko/kesekit-check-ko/templates/robot-security/ssdf.md diff --git a/skills-ko/check/references/robot-security/supply-chain.md b/skills-ko/kesekit-check-ko/templates/robot-security/supply-chain.md similarity index 100% rename from skills-ko/check/references/robot-security/supply-chain.md rename to skills-ko/kesekit-check-ko/templates/robot-security/supply-chain.md diff --git a/skills-ko/check/references/robot-security/wireless.md b/skills-ko/kesekit-check-ko/templates/robot-security/wireless.md similarity index 100% rename from skills-ko/check/references/robot-security/wireless.md rename to skills-ko/kesekit-check-ko/templates/robot-security/wireless.md diff --git a/skills-ko/kesekit-check-ko/templates/secure-coding/javascript.md b/skills-ko/kesekit-check-ko/templates/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/skills-ko/kesekit-check-ko/templates/secure-coding/python.md b/skills-ko/kesekit-check-ko/templates/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/skills-ko/kesekit-check-ko/templates/space-security/access-control.md b/skills-ko/kesekit-check-ko/templates/space-security/access-control.md new file mode 100644 index 0000000..7232d6a --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/space-security/access-control.md @@ -0,0 +1,49 @@ +# Access Control & Authentication Checklist + +> Domains: AC (Access Control, 12 items) + IA (Identification & Authentication, 2 items) + +## AC — Access Control (12 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| AC-01 | Access Control Policy | Restrict access to authorized users/processes/devices only | Access control policy established, authorized entities identified, per-system access rules defined | +| AC-02 | Least Privilege | Grant minimum necessary permissions | Least privilege procedures, management approval, periodic review | +| AC-03 | Privileged Access Use | Restrict and audit privileged account usage | Privileged account types defined/limited, audit logs stored/reviewed | +| AC-04 | Information Flow Control | Control information flow within and between systems | Flow control policy, source/destination identification, change approval | +| AC-05 | Separation of Duties | Prevent authority abuse through role separation | Duty separation policy, critical duties separated, compensating controls | +| AC-06 | Failed Login Attempts | Protect accounts from brute-force attacks | Max attempt limits, auto-lockout policy, alert/notification on failures | +| AC-07 | Session Lock & Termination | Prevent unauthorized access during idle sessions | Auto-lock on inactivity, re-authentication required, session termination conditions | +| AC-08 | Remote Access Control | Prevent unauthorized remote access | Remote access policy, device security check/MFA/encryption, monitoring/logging | +| AC-09 | Wireless Access | Prevent unauthorized wireless connections | Wireless policy, authentication/encryption, unauthorized AP prevention | +| AC-10 | Mobile Device Control | Control mobile device connections | Mobile device policy, data encryption, loss/theft protection | +| AC-11 | External Connection Control | Protect system boundaries from external systems | External systems identified, approved methods only, continuous monitoring | +| AC-12 | Public Information Control | Prevent sensitive information disclosure | Pre-publication review/approval, designated reviewers, periodic content review | + +### AC Protection Measures Summary + +| Category | Measures | +|----------|----------| +| Account Management | 1-person-1-account, default account deletion, immediate revocation on termination, annual full review | +| Authentication | MFA for privileged access, SSH/SFTP/VPN only, 8+ char passwords with 2+ character types | +| Network | ACL-based deny-all, IP/port whitelisting, WPA3/WPA2-Enterprise, WIPS deployment | +| Session | 10-min inactivity lock, screensaver with password, session timeout enforcement | +| Remote Access | 3-step procedure (request/approve/monitor), VPN+MFA, high-risk assets remote-access-denied by default | +| Monitoring | Failed login alerts to SOC, audit log analysis, access log review | + +## IA — Identification & Authentication (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IA-01 | Identification & Authentication | Prevent unauthorized access and credential theft | Unique identifiers for users/processes/devices, password complexity (upper+lower+special+number, 8+ chars), cryptographic protection, reuse prevention | +| IA-02 | Multi-Factor Authentication | Strengthen privileged account authentication, prevent replay attacks | MFA for privileged network access, replay attack prevention (challenge-response/timestamp) | + +### IA Protection Measures + +| Measure | Detail | +|---------|--------| +| Password Policy | Min 8 chars, 3+ character types, 90-day rotation, history check (last 5) | +| MFA Methods | OTP, certificate, biometric — at least 2 factors required | +| Replay Prevention | Challenge-response protocol, timestamp-based token validation | +| Credential Storage | Hashed (SHA-256+), no plaintext storage, encrypted transmission | + +## Total: 14 Items (AC: 12 + IA: 2) diff --git a/skills-ko/kesekit-check-ko/templates/space-security/governance.md b/skills-ko/kesekit-check-ko/templates/space-security/governance.md new file mode 100644 index 0000000..3ff7049 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/space-security/governance.md @@ -0,0 +1,90 @@ +# Governance, Personnel, Physical & Risk Checklist + +> Domains: PS (2) + PE (3) + RA (2) + SG (4) + CP (2) = 13 items + +## PS — Personnel Security (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PS-01 | Personnel Security | Control insider threats, prevent unauthorized personnel access | Background check on hiring, access review/revocation on role change/termination, disciplinary procedures | +| PS-02 | Security Awareness Training | Prevent security incidents, strengthen role-based security competency | Awareness activities, professional training plans, annual execution including contractors | + +### PS Protection Measures + +| Measure | Detail | +|---------|--------| +| Background Check | Resume/education/identity verification before hiring | +| Termination | Immediate access revocation, asset return, NDA enforcement | +| Training | Annual minimum, phishing simulation, role-specific curriculum, contractor inclusion | + +## PE — Physical & Environmental Security (3 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PE-01 | Physical Access Control | Block unauthorized physical access, ensure asset integrity | Entry control/monitoring, visitor escort, access log retention, control device management | +| PE-02 | Alternate Work Site Security | Maintain confidentiality in alternate work environments | Security control standards, work device security, secure remote access | +| PE-03 | Protective Equipment Operation | Ensure physical safety against environmental threats | Equipment inspection, environmental controls (temperature/humidity/fire/water/power) | + +### PE Protection Measures + +| Category | Measures | +|----------|----------| +| Access Zones | Controlled/restricted/reception areas designated, card reader/biometric, CCTV | +| Visitor Policy | Escort required, visitor log, temporary badge | +| Alternate Sites | Home/travel/remote office classification, organization-issued device, VPN+MFA | +| Environmental | UPS/emergency generator/dual power, 10-32C server room, fire detection/suppression, periodic inspection | + +## RA — Risk Assessment & Security Evaluation (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| RA-01 | Risk Assessment | Identify, assess, and manage organizational risks | Risk management framework, periodic assessment (annual+) | +| RA-02 | Security Control Monitoring & Effectiveness | Ensure continuous security control effectiveness | Effectiveness evaluation framework, periodic review/update | + +### RA Protection Measures + +| Measure | Detail | +|---------|--------| +| Assessment Method | Baseline/detailed/combined approach, management/technical/physical/legal domains | +| Frequency | Annual minimum, ad-hoc on major changes | +| Metrics | KPI/security performance indicators: violation rate, infection rate, scanning completion rate | +| Responsibility | Designated monitoring officer, management reporting | + +## SG — Security Governance (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SG-01 | Security Policy Establishment | Ensure policy effectiveness and currency | Top-level policy creation/approval/dissemination, periodic review/update, improvement plans | +| SG-02 | Security Roles & Responsibilities | Clarify security accountability | CISO designation, role/responsibility assignment/review | +| SG-03 | Asset Management | Maintain asset integrity and security posture | Asset identification/inventory/updates, classification/owner assignment | +| SG-04 | Legal Requirements Compliance | Ensure regulatory compliance | Legal requirements identification/integration, independent compliance review | + +### SG Key Regulations + +| Regulation | Relevance | +|-----------|-----------| +| Personal Information Protection Act | Data collected by satellite services | +| ICT Infrastructure Protection Act | CII designation for space systems | +| Radio Waves Act | Satellite frequency management | +| Space Development Promotion Act | Space industry regulations | +| Cloud Computing Act | GSaaS cloud infrastructure | +| NIS2 (EU) | Space as essential service sector | +| CMMC (US) | Defense supply chain requirements | + +## CP — Contingency Planning (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| CP-01 | Contingency Plan | Ensure space system operational continuity | Disaster type identification, impact analysis, critical service identification, recovery procedures | +| CP-02 | Backup & Redundancy Management | Ensure critical information/system availability | Periodic backup, safe storage, regular testing, system redundancy | + +### CP Protection Measures + +| Measure | Detail | +|---------|--------| +| RTO/RPO | Define for each critical service (satellite control, MOC, PCC) | +| Backup Plan | Target/frequency/retention/method defined, backup confidentiality/integrity/availability verified | +| Redundancy | Network/system dual paths, failover testing | +| BCP | Business continuity management system, emergency contact chain, recovery organization | + +## Total: 13 Items (PS: 2 + PE: 3 + RA: 2 + SG: 4 + CP: 2) diff --git a/skills-ko/kesekit-check-ko/templates/space-security/operations.md b/skills-ko/kesekit-check-ko/templates/space-security/operations.md new file mode 100644 index 0000000..d1a2d0d --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/space-security/operations.md @@ -0,0 +1,47 @@ +# Operations & Incident Response Checklist + +> Domains: SO (System/Service Operations Management, 9 items) + IR (Incident Response, 2 items) + +## SO — System/Service Operations Management (9 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SO-01 | Maintenance Control | Control maintenance personnel, tools, and remote access | Work request/approval/logging, NDA, media sanitization, VPN+MFA for remote maintenance | +| SO-02 | System Audit & Log Analysis | Detect unauthorized/abnormal activities, ensure accountability | Audit log generation/retention, tamper protection, restricted admin access, integrated analysis/reporting | +| SO-03 | Time Synchronization | Ensure audit log accuracy and reliability | NTP standard time sync, internal NTP server, periodic verification | +| SO-04 | Portable Storage Security | Protect storage media confidentiality/integrity | Classification marking, encrypted transfer, unauthorized media control, secure disposal | +| SO-05 | Configuration Management | Establish configuration baselines, maintain integrity | HW/SW/FW baseline identification, security configuration documentation, periodic monitoring | +| SO-06 | Security Requirements Definition | Define security requirements from planning phase | Authentication/access control/encryption/logging requirements in RFP, secure coding standards | +| SO-07 | Change Management | Ensure integrity during system/application changes | Change review/approval/recording, pre-change security impact analysis, access restrictions | +| SO-08 | Development Testing & Evaluation | Verify security requirement implementation | Acceptance testing, source code verification, vulnerability scanning in production-equivalent environment | +| SO-09 | Function Minimization & SW Control | Remove unnecessary features, control unauthorized software | Essential functions only, blacklist/whitelist policies, disable DHCP/Print Spooler etc., block P2P/webhard | + +### SO Protection Measures Summary + +| Category | Key Actions | +|----------|-------------| +| Maintenance | Approved personnel only, clean PC with AV scan, media control, session recording | +| Logging | All systems generate audit logs, tamper-proof storage, min 1-year retention, weekly review | +| Media Control | USB port lock, media control solution, encrypted transport, overwrite-based disposal | +| Configuration | Baseline registry/account/network settings, monthly drift detection, rollback capability | +| Secure Development | Security requirements in RFP, secure coding per language (Java/PHP/ASP/C), code review | +| Change Control | Formal approval process, security impact analysis, revision history, pre/post testing | + +## IR — Incident Response (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IR-01 | Incident Handling & Testing | Minimize damage and enable rapid recovery | Incident classification, detection/response/recovery procedures, post-incident review, periodic drills | +| IR-02 | Incident Reporting | Enable consistent response through timely reporting | Internal reporting chain, regulatory notification, stakeholder communication | + +### IR Protection Measures + +| Measure | Detail | +|---------|--------| +| Incident Types | Malware, unauthorized access, service disruption, data breach, physical compromise | +| Response Phases | Preparation > Detection > Investigation > Analysis > Containment > Eradication > Recovery | +| Reporting Timeline | Internal: immediate; KISA: within 24 hours (per ICT Infrastructure Act Art.48-3); NIS2: 24h/72h/1month staged | +| Emergency Contacts | Quarterly review, 24/7 contact chain, regulatory liaison designated | +| Testing | Annual tabletop exercise, biannual red team drill, post-exercise lessons learned | + +## Total: 11 Items (SO: 9 + IR: 2) diff --git a/skills-ko/kesekit-check-ko/templates/space-security/supply-chain.md b/skills-ko/kesekit-check-ko/templates/space-security/supply-chain.md new file mode 100644 index 0000000..750fe6f --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/space-security/supply-chain.md @@ -0,0 +1,47 @@ +# Supply Chain Management Checklist + +> Domain: SM (Supply Chain Management, 4 items) + +## SM — Supply Chain Management (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SM-01 | Supply Chain Protection | Identify and mitigate supply chain risks | Supply chain security policy, vendor selection criteria/contract security requirements, vendor registry updates | +| SM-02 | Pre-Acquisition Evaluation | Prevent vulnerable assets from entering operations | Pre-acquisition/update vulnerability scanning, acceptance testing, counterfeit inspection | +| SM-03 | All-Source Information Use | Achieve software transparency through SBOM | Require SBOM from suppliers, use SBOM for transparency/continuous management | +| SM-04 | Tampering/Counterfeiting Prevention & Detection | Detect and block supply chain tampering | Verify vendor development/distribution integrity, acceptance/operations integrity verification | + +### SM Protection Measures + +| Category | Measures | +|----------|----------| +| Contract Security | Training/incident notification/vulnerability remediation/audit rights/data disposal on termination in contracts | +| SBOM Management | SPDX/CycloneDX standard format, open-source/commercial SW identification, CVE periodic scanning | +| Integrity Verification | Hash value/digital signature verification, SBOM-based impact identification on new vulnerabilities | +| Vendor Management | Periodic vendor security audits, vendor registry maintenance, conditional acceptance criteria | + +## Supply Chain Architecture (3 Zones) + +### Satellite/Launch Vehicle Manufacturer +| Component | Security Focus | +|-----------|---------------| +| SW Development Server | IDE plugin verification, malware scanning | +| Library DB | Open-source library verification, vulnerability scanning | +| Code DB | Source code integrity, access control | +| Manufacturing Systems | Satellite bus, payload, launch vehicle manufacturing integrity | + +### Ground Station Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Control System | Build pipeline security, backdoor prevention | +| SW Development Server | Secure development environment | +| SW Update Server | Update file integrity verification, secure transmission | +| Library/Code DB | Vulnerable open-source blocking, SBOM verification | + +### Satellite Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Application System | Hard-coded credential prevention | +| SW Development Server | Remote work environment security | +| Data Processing System | Maintenance account management | +| Library/Code DB | Auto-build malicious open-source prevention | diff --git a/skills-ko/kesekit-check-ko/templates/space-security/system-security.md b/skills-ko/kesekit-check-ko/templates/space-security/system-security.md new file mode 100644 index 0000000..7297ada --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/space-security/system-security.md @@ -0,0 +1,46 @@ +# System & Communication Security Checklist + +> Domains: SC (System & Communication Security, 7 items) + SI (System & Information Integrity, 4 items) + +## SC — System & Communication Security (7 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SC-01 | Boundary Protection | Block unauthorized communications at boundaries | Network segmentation, DMZ deployment, communication encryption/monitoring, deny-all ACL | +| SC-02 | Security Engineering & Function Separation | Defense-in-depth, eliminate single points of failure | Security engineering principles, admin/user function separation, Secure by Design | +| SC-03 | Stored & Transmitted Information Security | Protect command/telemetry/log confidentiality and integrity | Storage encryption, uplink/downlink encryption, shared resource protection | +| SC-04 | Communication Security | Establish/maintain/terminate secure sessions | Default deny policy, authenticated/integrity-checked channels, session timeout | +| SC-05 | Encryption | Apply cryptographic algorithms and manage keys | Approved algorithms, key lifecycle management (create/distribute/store/retire) | +| SC-06 | Collaborative Computing Devices | Prevent remote camera/mic activation, prevent leaks | Device inventory, remote activation blocked, LED indicator required | +| SC-07 | Mobile Code & VoIP Control | Prevent malicious code execution and unauthorized VoIP | Mobile code execution control, VoIP usage restriction, monitoring | + +### SC Protection Measures + +| Category | Measures | +|----------|----------| +| Network Segmentation | Physical/logical separation, DMZ for public servers, satellite-control/operations/internet isolation | +| Encryption Standards | AES-256/ARIA-256, TLS 1.2+, IPsec VPN, CCSDS 352.0-B-2 for space systems | +| Integrity Verification | Digital signatures, HMAC, memory/buffer initialization | +| Session Management | mTLS, split-tunneling blocked, session ID rotation, 2-30 min timeout | +| Cryptographic Keys | AES-256, SHA-256+, RSA-4096+; PROHIBIT TDEA/MD5/SHA-1; full key lifecycle management | +| Code Control | ActiveX/Java Runtime disabled, script whitelisting, signed code only, SRTP for VoIP | + +## SI — System & Information Integrity (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SI-01 | Vulnerability Scanning & Flaw Remediation | Identify and fix system/application vulnerabilities | Periodic scanning, immediate scan on new vulnerabilities, flaw identification/remediation/reporting | +| SI-02 | Malicious Code Prevention | Prevent virus/worm/ransomware infiltration | Anti-malware on all systems, periodic/real-time scanning, signature updates | +| SI-03 | Security Alerts & Advisories | Monitor and respond to security alerts | Continuous monitoring of KISA/NCSC/CISA/NIST NVD, impact analysis, patch/hardening | +| SI-04 | System & Communication Traffic Monitoring | Detect abnormal traffic in real-time | Monitoring policy, inbound/outbound monitoring, result analysis/response | + +### SI Protection Measures + +| Measure | Detail | +|---------|--------| +| Vulnerability Management | Network/server/security/app/web scanning, CWE/CVE-based, prioritized remediation | +| Anti-Malware | Enterprise AV on all assets, daily+ updates, P2P/webhard blocked, central management | +| Alert Monitoring | RSS/email subscription to KISA/CISA/NVD, internal notification chain, patch within SLA | +| Traffic Monitoring | IDS/IPS at boundaries, access/security/network log integration, automated alerting | + +## Total: 11 Items (SC: 7 + SI: 4) diff --git a/skills-ko/kesekit-check-ko/templates/zero-trust/app-data.md b/skills-ko/kesekit-check-ko/templates/zero-trust/app-data.md new file mode 100644 index 0000000..f8d1195 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/zero-trust/app-data.md @@ -0,0 +1,162 @@ +# Application & Data Checklist + +> Zero Trust Maturity Assessment — Application (AP) & Data (DA) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## AP — 애플리케이션 및 워크로드 (Application) (60 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AP-01 | 리소스 권한 부여 및 통합 | 접근에 대한 사용자/시스템 권한을 수동으로 관리하는가? | Traditional | Critical | +| ZT-AP-02 | 리소스 권한 부여 및 통합 | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | Traditional | Critical | +| ZT-AP-03 | 리소스 권한 부여 및 통합 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | Initial | High | +| ZT-AP-04 | 리소스 권한 부여 및 통합 | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | Initial | High | +| ZT-AP-05 | 리소스 권한 부여 및 통합 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-06 | 리소스 권한 부여 및 통합 | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-07 | 리소스 권한 부여 및 통합 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | Optimal | Low | +| ZT-AP-08 | 리소스 권한 부여 및 통합 | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | Optimal | Low | +| ZT-AP-09 | 리소스 권한 부여 및 통합 | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | Optimal | Low | +| ZT-AP-10 | 리소스 권한 부여 및 통합 | 모든 리소스 권한 부여가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-11 | 지속적인 모니터링 및 진행 중인 승인 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | Traditional | Critical | +| ZT-AP-12 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-AP-13 | 지속적인 모니터링 및 진행 중인 승인 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | Initial | High | +| ZT-AP-14 | 지속적인 모니터링 및 진행 중인 승인 | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | Initial | High | +| ZT-AP-15 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | Advanced | Medium | +| ZT-AP-16 | 지속적인 모니터링 및 진행 중인 승인 | 보안 승인 프로세스를 자동화할 수 있는가? | Advanced | Medium | +| ZT-AP-17 | 지속적인 모니터링 및 진행 중인 승인 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | Optimal | Low | +| ZT-AP-18 | 원격 접속 | VPN을 통해서 외부 접속을 지원하는가? | Traditional | Critical | +| ZT-AP-19 | 원격 접속 | 애플리케이션에 대한 접근제어가 제한적인가? | Traditional | Critical | +| ZT-AP-20 | 원격 접속 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | Initial | High | +| ZT-AP-21 | 원격 접속 | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | Advanced | Medium | +| ZT-AP-22 | 원격 접속 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | Advanced | Medium | +| ZT-AP-23 | 원격 접속 | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | Optimal | Low | +| ZT-AP-24 | 원격 접속 | AI를 활용하여 원격 접속 보안을 고도화 하였는가? | Optimal | Low | +| ZT-AP-25 | 원격 접속 | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | Optimal | Low | +| ZT-AP-26 | 안전한 애플리케이션 배포 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | Traditional | Critical | +| ZT-AP-27 | 안전한 애플리케이션 배포 | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | Traditional | Critical | +| ZT-AP-28 | 안전한 애플리케이션 배포 | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | Traditional | Critical | +| ZT-AP-29 | 안전한 애플리케이션 배포 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | Initial | High | +| ZT-AP-30 | 안전한 애플리케이션 배포 | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | Initial | High | +| ZT-AP-31 | 안전한 애플리케이션 배포 | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | Initial | High | +| ZT-AP-32 | 안전한 애플리케이션 배포 | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | Initial | High | +| ZT-AP-33 | 안전한 애플리케이션 배포 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | Advanced | Medium | +| ZT-AP-34 | 안전한 애플리케이션 배포 | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | Advanced | Medium | +| ZT-AP-35 | 안전한 애플리케이션 배포 | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | Advanced | Medium | +| ZT-AP-36 | 안전한 애플리케이션 배포 | 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | Advanced | Medium | +| ZT-AP-37 | 안전한 애플리케이션 배포 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | Optimal | Low | +| ZT-AP-38 | 안전한 애플리케이션 배포 | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | Optimal | Low | +| ZT-AP-39 | 애플리케이션 인벤토리 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | Traditional | Critical | +| ZT-AP-40 | 애플리케이션 인벤토리 | 애플리케이션 기본 정보를 기록하여 관리하는가? | Traditional | Critical | +| ZT-AP-41 | 애플리케이션 인벤토리 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | Initial | High | +| ZT-AP-42 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가/관리할 수 있는가? | Advanced | Medium | +| ZT-AP-43 | 애플리케이션 인벤토리 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | Optimal | Low | +| ZT-AP-44 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-AP-45 | 보안 소프트웨어 개발 및 통합 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | Traditional | Critical | +| ZT-AP-46 | 보안 소프트웨어 개발 및 통합 | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | Traditional | Critical | +| ZT-AP-47 | 보안 소프트웨어 개발 및 통합 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | Initial | High | +| ZT-AP-48 | 보안 소프트웨어 개발 및 통합 | DevSecOps 문화를 도입하였는가? | Initial | High | +| ZT-AP-49 | 보안 소프트웨어 개발 및 통합 | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | Initial | High | +| ZT-AP-50 | 보안 소프트웨어 개발 및 통합 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | Advanced | Medium | +| ZT-AP-51 | 보안 소프트웨어 개발 및 통합 | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | Advanced | Medium | +| ZT-AP-52 | 보안 소프트웨어 개발 및 통합 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | Optimal | Low | +| ZT-AP-53 | 보안 소프트웨어 개발 및 통합 | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | Optimal | Low | +| ZT-AP-54 | 보안 소프트웨어 개발 및 통합 | 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-55 | 소프트웨어 위험 관리 | 최소한의 위험 요소가 식별되고 문서화 하였는가? | Traditional | Critical | +| ZT-AP-56 | 소프트웨어 위험 관리 | 소프트웨어 위험 관리 계획이 수립되어 있는가? | Traditional | Critical | +| ZT-AP-57 | 소프트웨어 위험 관리 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | Initial | High | +| ZT-AP-58 | 소프트웨어 위험 관리 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | Advanced | Medium | +| ZT-AP-59 | 소프트웨어 위험 관리 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | Optimal | Low | +| ZT-AP-60 | 소프트웨어 위험 관리 | 맞춤형 공격에 대응 가능한가? | Optimal | Low | + +### AP Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 리소스 권한 부여 및 통합 | 수동 권한 관리, 정적 접근제어 | 중앙 집중식 관리 | 컨텍스트 기반 최소 권한, 정밀 관리 | 실시간 분석, 자동 권한 부여/회수, 완전 자동화 | +| 지속적인 모니터링 및 승인 | 수동 모니터링, 수동 이벤트 기록 | 실시간 이벤트 수집/분석, 보안 검토 | AI 분석, 승인 자동화 | 실시간 탐지, 위협 사전 예측 | +| 원격 접속 | VPN 외부 접속, 제한적 접근제어 | 자동 보안 상태 평가 | 실시간 모니터링, 맞춤형 정책 | 동적 보안 정책, AI 고도화, 즉각 차단 | +| 안전한 애플리케이션 배포 | 수동 코드 검토, 배포 절차, 접근제어 | 자동화 파이프라인, CI/CD 취약점 검사, 무결성 검사 | 지속적 모니터링, 정책 자동 검증, 즉각 대응 | 완전 자동 배포, AI 위협 탐지 통합 | +| 애플리케이션 인벤토리 | 수동 목록화, 기본 정보 기록 | 자동 식별/관리 | 보안 상태 평가/관리 | AI 실시간 반영, 보안 시스템 통합 | +| 보안 SW 개발 및 통합 | 보안 코딩 표준, 수동 테스트 | SDLC 통합, DevSecOps, SBOM | 서드파티 자동 검사, 전체 SBOM | 프로세스 격리, 런타임 분석, 완전 자동화 | +| 소프트웨어 위험 관리 | 위험 식별/문서화, 관리 계획 | 위험 평가 프로세스 | 공급망 보안, 전주기 자동화 | AI 예측 분석, 맞춤형 공격 대응 | + +--- + +## DA — 데이터 (Data) (58 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DA-01 | 데이터 카탈로그 위험 정렬 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | Traditional | Critical | +| ZT-DA-02 | 데이터 카탈로그 위험 정렬 | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | Traditional | Critical | +| ZT-DA-03 | 데이터 카탈로그 위험 정렬 | 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | Traditional | Critical | +| ZT-DA-04 | 데이터 카탈로그 위험 정렬 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | Initial | High | +| ZT-DA-05 | 데이터 카탈로그 위험 정렬 | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | Initial | High | +| ZT-DA-06 | 데이터 카탈로그 위험 정렬 | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | Initial | High | +| ZT-DA-07 | 데이터 카탈로그 위험 정렬 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | Advanced | Medium | +| ZT-DA-08 | 데이터 카탈로그 위험 정렬 | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-DA-09 | 데이터 카탈로그 위험 정렬 | 데이터 사용 패턴 분석이 가능한가? | Advanced | Medium | +| ZT-DA-10 | 데이터 카탈로그 위험 정렬 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | Optimal | Low | +| ZT-DA-11 | 데이터 카탈로그 위험 정렬 | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | Optimal | Low | +| ZT-DA-12 | 기업 데이터 거버넌스 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | Traditional | Critical | +| ZT-DA-13 | 기업 데이터 거버넌스 | 데이터 소유자와 관리자를 지정하였는가? | Traditional | Critical | +| ZT-DA-14 | 기업 데이터 거버넌스 | 데이터 거버넌스 프레임워크가 도입되어 있는가? | Traditional | Critical | +| ZT-DA-15 | 기업 데이터 거버넌스 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | Initial | High | +| ZT-DA-16 | 기업 데이터 거버넌스 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | Advanced | Medium | +| ZT-DA-17 | 기업 데이터 거버넌스 | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | Advanced | Medium | +| ZT-DA-18 | 기업 데이터 거버넌스 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | Optimal | Low | +| ZT-DA-19 | 데이터 접근제어 | 데이터 접근 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-20 | 데이터 접근제어 | 데이터 접근권한이 수동으로 부여되는가? | Traditional | Critical | +| ZT-DA-21 | 데이터 접근제어 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-22 | 데이터 접근제어 | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | Initial | High | +| ZT-DA-23 | 데이터 접근제어 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | Advanced | Medium | +| ZT-DA-24 | 데이터 접근제어 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-25 | 데이터 암호화 및 권한 관리 | 데이터를 수동으로 암호화하는가? | Traditional | Critical | +| ZT-DA-26 | 데이터 암호화 및 권한 관리 | 암호화 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-27 | 데이터 암호화 및 권한 관리 | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-28 | 데이터 암호화 및 권한 관리 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | Initial | High | +| ZT-DA-29 | 데이터 암호화 및 권한 관리 | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-30 | 데이터 암호화 및 권한 관리 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | Advanced | Medium | +| ZT-DA-31 | 데이터 암호화 및 권한 관리 | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | Advanced | Medium | +| ZT-DA-32 | 데이터 암호화 및 권한 관리 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-33 | 데이터 암호화 및 권한 관리 | 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | Optimal | Low | +| ZT-DA-34 | 데이터 라벨링 및 태그 지정 | 라벨링 및 태그 지정 지침을 수립하였는가? | Traditional | Critical | +| ZT-DA-35 | 데이터 라벨링 및 태그 지정 | 일관된 데이터 분류 체계가 마련되어 있는가? | Traditional | Critical | +| ZT-DA-36 | 데이터 라벨링 및 태그 지정 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별/분류하는가? | Initial | High | +| ZT-DA-37 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | Initial | High | +| ZT-DA-38 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | Initial | High | +| ZT-DA-39 | 데이터 라벨링 및 태그 지정 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류/식별 가능한가? | Advanced | Medium | +| ZT-DA-40 | 데이터 라벨링 및 태그 지정 | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | Advanced | Medium | +| ZT-DA-41 | 데이터 라벨링 및 태그 지정 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | Optimal | Low | +| ZT-DA-42 | 데이터 라벨링 및 태그 지정 | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | Optimal | Low | +| ZT-DA-43 | 데이터 손실 방지 (DLP) | DLP 정책을 수립하고 수동으로 평가하는가? | Traditional | Critical | +| ZT-DA-44 | 데이터 손실 방지 (DLP) | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | Traditional | Critical | +| ZT-DA-45 | 데이터 손실 방지 (DLP) | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | Initial | High | +| ZT-DA-46 | 데이터 손실 방지 (DLP) | DLP 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-DA-47 | 데이터 손실 방지 (DLP) | DLP 솔루션이 모니터링 모드로 동작하는가? | Initial | High | +| ZT-DA-48 | 데이터 손실 방지 (DLP) | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | Advanced | Medium | +| ZT-DA-49 | 데이터 손실 방지 (DLP) | DLP 솔루션이 방지 모드로 사용되는가? | Advanced | Medium | +| ZT-DA-50 | 데이터 손실 방지 (DLP) | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | Optimal | Low | +| ZT-DA-51 | 데이터 손실 방지 (DLP) | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | Optimal | Low | +| ZT-DA-52 | 데이터 모니터링 및 감지 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | Traditional | Critical | +| ZT-DA-53 | 데이터 모니터링 및 감지 | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-54 | 데이터 모니터링 및 감지 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | Initial | High | +| ZT-DA-55 | 데이터 모니터링 및 감지 | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | Initial | High | +| ZT-DA-56 | 데이터 모니터링 및 감지 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-DA-57 | 데이터 모니터링 및 감지 | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | Advanced | Medium | +| ZT-DA-58 | 데이터 모니터링 및 감지 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | Optimal | Low | + +### DA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 데이터 카탈로그 위험 정렬 | 초기 카탈로그, 수동 분류, 위험 평가 문서화 | 자동 카탈로그, 자동 수집/분류, 기준 마련 | 민감도 분석, 보호 정책, 패턴 분석 | AI 실시간 분석, 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 정책 수립, 소유자 지정, 프레임워크 | 정기적 감사/검토 | 자동화, 실시간 모니터링 | 전체 시스템 통합 관리 | +| 데이터 접근제어 | 접근 정책 수립, 수동 권한 부여 | 중앙 집중식, 최소 권한 확인 | ABAC 컨텍스트 기반 | AI 실시간 권한 조정 | +| 데이터 암호화 및 권한 관리 | 수동 암호화, 정책 수립, 초기 관리 체계 | 자동 암호화, 중앙 집중식 관리 | 고급 암호화, RBAC+ABAC | AI 기반 최적화, 실시간 마스킹 | +| 데이터 라벨링 및 태그 지정 | 지침 수립, 분류 체계 마련 | 수동 라벨링, 특수 라벨, 차등 정책 | 자동 분류, 보안 시스템 연계 | 고급 메타데이터, AI 자동 조정 | +| 데이터 손실 방지 (DLP) | DLP 정책, 범위 지정 | DLP 도입, 중앙 관리, 모니터링 모드 | 전체 도입, 방지 모드 | AI 예측/차단, 자동 정책 최적화 | +| 데이터 모니터링 및 감지 | 수동 모니터링, 프로세스 수립 | 자동 감시, 정책 조정 | 이상 징후 탐지, 보안 시스템 연계 | 지속 평가, 컨텍스트 최소 접근제어 | + +--- + +## Total: 118 Items (AP: 60 + DA: 58) diff --git a/skills-ko/kesekit-check-ko/templates/zero-trust/identity-device.md b/skills-ko/kesekit-check-ko/templates/zero-trust/identity-device.md new file mode 100644 index 0000000..80e1800 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/zero-trust/identity-device.md @@ -0,0 +1,133 @@ +# Identity & Device Checklist + +> Zero Trust Maturity Assessment — Identity (ID) & Device (DV) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## ID — 식별자 및 신원 (Identity) (53 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-ID-01 | 사용자 인벤토리 | 사용자 목록에 대한 문서화가 되어있는가? | Traditional | Critical | +| ZT-ID-02 | 사용자 인벤토리 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | Initial | High | +| ZT-ID-03 | 사용자 인벤토리 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | Advanced | Medium | +| ZT-ID-04 | 사용자 인벤토리 | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | Advanced | Medium | +| ZT-ID-05 | 사용자 인벤토리 | AI 기반 사용자 행동에 따른 관리가 되는가? | Optimal | Low | +| ZT-ID-06 | 사용자 인벤토리 | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | Optimal | Low | +| ZT-ID-07 | ID 연계 및 사용자 자격 증명 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-08 | ID 연계 및 사용자 자격 증명 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | Initial | High | +| ZT-ID-09 | ID 연계 및 사용자 자격 증명 | ID 통합 관리 시스템이 구축되어 있는가? | Advanced | Medium | +| ZT-ID-10 | ID 연계 및 사용자 자격 증명 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | Optimal | Low | +| ZT-ID-11 | 다중인증 (MFA) | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-12 | 다중인증 (MFA) | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | Initial | High | +| ZT-ID-13 | 다중인증 (MFA) | FIDO 기반 인증 기법이 적용되어 있는가? | Initial | High | +| ZT-ID-14 | 다중인증 (MFA) | 상황에 따른 맞춤형 MFA가 지원 가능한가? | Advanced | Medium | +| ZT-ID-15 | 다중인증 (MFA) | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-16 | 다중인증 (MFA) | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | Optimal | Low | +| ZT-ID-17 | 지속 인증 | 세션 기반 인증이 수행되는가? | Traditional | Critical | +| ZT-ID-18 | 지속 인증 | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | Traditional | Critical | +| ZT-ID-19 | 지속 인증 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-20 | 지속 인증 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | Advanced | Medium | +| ZT-ID-21 | 지속 인증 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | Optimal | Low | +| ZT-ID-22 | 통합 ICAM 플랫폼 | ICAM 시스템이 구축되어 있는가? | Traditional | Critical | +| ZT-ID-23 | 통합 ICAM 플랫폼 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | Initial | High | +| ZT-ID-24 | 통합 ICAM 플랫폼 | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | Initial | High | +| ZT-ID-25 | 통합 ICAM 플랫폼 | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | Initial | High | +| ZT-ID-26 | 통합 ICAM 플랫폼 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | Advanced | Medium | +| ZT-ID-27 | 통합 ICAM 플랫폼 | ICAM 플랫폼이 자동화되어 있는가? | Advanced | Medium | +| ZT-ID-28 | 통합 ICAM 플랫폼 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | Optimal | Low | +| ZT-ID-29 | 통합 ICAM 플랫폼 | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | Optimal | Low | +| ZT-ID-30 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-31 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자 행동 패턴이 수동으로 분석되는가? | Traditional | Critical | +| ZT-ID-32 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | Initial | High | +| ZT-ID-33 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 컨텍스트 정보 기반 접근권한이 조정되는가? | Initial | High | +| ZT-ID-34 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | Advanced | Medium | +| ZT-ID-35 | 행동, 컨텍스트 기반 ID 및 생체 인식 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | Optimal | Low | +| ZT-ID-36 | 조건부 사용자 접근 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | Traditional | Critical | +| ZT-ID-37 | 조건부 사용자 접근 | 조건부 접근 정책에 대한 개념을 정의하였는가? | Traditional | Critical | +| ZT-ID-38 | 조건부 사용자 접근 | 시스템 별 각기 다른 접속 관리 기능이 있는가? | Traditional | Critical | +| ZT-ID-39 | 조건부 사용자 접근 | 특정 조건에 따른 사용자 접근제어가 가능한가? | Initial | High | +| ZT-ID-40 | 조건부 사용자 접근 | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | Initial | High | +| ZT-ID-41 | 조건부 사용자 접근 | 세션별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-42 | 조건부 사용자 접근 | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-43 | 조건부 사용자 접근 | 리소스별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-44 | 조건부 사용자 접근 | 동적 접근 정책을 실시간으로 적용 가능한가? | Optimal | Low | +| ZT-ID-45 | 조건부 사용자 접근 | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | Optimal | Low | +| ZT-ID-46 | 최소 권한 접근 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | Traditional | Critical | +| ZT-ID-47 | 최소 권한 접근 | 권한 부여에 대한 절차가 문서화 되어 있는가? | Traditional | Critical | +| ZT-ID-48 | 최소 권한 접근 | 권한 부여 절차가 표준화 되어 있는가? | Initial | High | +| ZT-ID-49 | 최소 권한 접근 | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-50 | 최소 권한 접근 | 자동화된 권한 상승이 가능한가? | Advanced | Medium | +| ZT-ID-51 | 최소 권한 접근 | 권한 관리 정책이 지속적으로 업데이트 되는가? | Advanced | Medium | +| ZT-ID-52 | 최소 권한 접근 | 권한 관리가 동적으로 변경 가능한가? | Optimal | Low | +| ZT-ID-53 | 최소 권한 접근 | 최소 권한 원칙이 실시간으로 조정 가능한가? | Optimal | Low | + +### ID Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 사용자 인벤토리 | 사용자 목록 문서화 | 역할별 상세 인벤토리 | 자동화 관리, 비정상 활동 탐지 | AI 기반 관리, 통합 최적화 | +| ID 연계 및 사용자 자격 증명 | ID 연계 솔루션 적용 | 시스템 간 연동 | 통합 관리 시스템 | 글로벌 수준 연계 | +| 다중인증 (MFA) | 패스워드+SMS/이메일 MFA | 인증 앱/토큰, FIDO | 맞춤형 MFA, 컨텍스트 인증 | 비정상 로그인 실시간 탐지 | +| 지속 인증 | 세션 기반 인증, 상태 모니터링 | 세션 중간 추가 인증 | 동적 인증 기술 | 자동 재인증, 실시간 검증 | +| 통합 ICAM 플랫폼 | ICAM 시스템 구축 | 중앙 관리, 정책 표준화, 위험도 평가 | 시스템 통합 안정화, 자동화 | AI 기반 보안 강화, 실시간 ID 위험 평가 | +| 행동/컨텍스트 기반 ID 및 생체 인식 | 기본 생체 인식, 수동 행동 분석 | 통합 인증, 컨텍스트 접근권한 | 실시간 접근제어 조정 | AI 기반 행동/생체 인식 | +| 조건부 사용자 접근 | 기초 시스템, 개념 정의, 접속 관리 | 조건부 접근제어, 최소 권한 | 세션/리소스별 권한, 다단계 정책 | 동적 정책, AI 실시간 관리 | +| 최소 권한 접근 | 원칙 정의, 절차 문서화 | 표준화, 변경 관리 시스템 | 자동 권한 상승, 정책 업데이트 | 동적 변경, 실시간 조정 | + +--- + +## DV — 기기 및 엔드포인트 (Device) (40 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DV-01 | 기기 감지 및 규정 준수 | 리소스에 연결된 기기를 식별할 수 있는가? | Traditional | Critical | +| ZT-DV-02 | 기기 감지 및 규정 준수 | 수동으로 규정 준수에 대한 확인이 가능한가? | Traditional | Critical | +| ZT-DV-03 | 기기 감지 및 규정 준수 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | Initial | High | +| ZT-DV-04 | 기기 감지 및 규정 준수 | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | Initial | High | +| ZT-DV-05 | 기기 감지 및 규정 준수 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | Advanced | Medium | +| ZT-DV-06 | 기기 감지 및 규정 준수 | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-DV-07 | 기기 감지 및 규정 준수 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | Optimal | Low | +| ZT-DV-08 | 기기 감지 및 규정 준수 | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | Optimal | Low | +| ZT-DV-09 | 실시간 검사를 통한 기기 권한 부여 | 자산 접근 기기에 대한 정보가 수집되는가? | Traditional | Critical | +| ZT-DV-10 | 실시간 검사를 통한 기기 권한 부여 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | Initial | High | +| ZT-DV-11 | 실시간 검사를 통한 기기 권한 부여 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | Advanced | Medium | +| ZT-DV-12 | 실시간 검사를 통한 기기 권한 부여 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | Optimal | Low | +| ZT-DV-13 | 실시간 검사를 통한 기기 권한 부여 | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | Optimal | Low | +| ZT-DV-14 | 기기 인벤토리 | 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | Traditional | Critical | +| ZT-DV-15 | 기기 인벤토리 | 주요 기기에 대한 정보를 수집하고 관리하는가? | Traditional | Critical | +| ZT-DV-16 | 기기 인벤토리 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | Initial | High | +| ZT-DV-17 | 기기 인벤토리 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | Advanced | Medium | +| ZT-DV-18 | 기기 인벤토리 | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | Advanced | Medium | +| ZT-DV-19 | 기기 인벤토리 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | Optimal | Low | +| ZT-DV-20 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | Traditional | Critical | +| ZT-DV-21 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 보안 정책을 설정하였는가? | Traditional | Critical | +| ZT-DV-22 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | Initial | High | +| ZT-DV-23 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기기 상태를 지속적으로 모니터링 하는가? | Initial | High | +| ZT-DV-24 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | Advanced | Medium | +| ZT-DV-25 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | Optimal | Low | +| ZT-DV-26 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | 기본적인 EDR 솔루션을 도입하였는가? | Traditional | Critical | +| ZT-DV-27 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | Initial | High | +| ZT-DV-28 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | XDR 솔루션을 도입하였는가? | Advanced | Medium | +| ZT-DV-29 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | AI 기반 EDR/XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | Optimal | Low | +| ZT-DV-30 | 자산, 취약성 및 패치 관리 자동화 | 자산 및 취약성을 수동으로 평가하는가? | Traditional | Critical | +| ZT-DV-31 | 자산, 취약성 및 패치 관리 자동화 | 주요 자산 및 취약성 목록이 작성되어 있는가? | Traditional | Critical | +| ZT-DV-32 | 자산, 취약성 및 패치 관리 자동화 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | Initial | High | +| ZT-DV-33 | 자산, 취약성 및 패치 관리 자동화 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | Advanced | Medium | +| ZT-DV-34 | 자산, 취약성 및 패치 관리 자동화 | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | Advanced | Medium | +| ZT-DV-35 | 자산, 취약성 및 패치 관리 자동화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | Optimal | Low | +| ZT-DV-36 | 자산, 취약성 및 패치 관리 자동화 | 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | Optimal | Low | + +### DV Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 기기 감지 및 규정 준수 | 기기 식별, 수동 규정 확인 | 실시간 탐지, 비준수 경고 | 자동 교정, 접근권한 연동 | 동적 권한 수정, AI 실시간 평가 | +| 실시간 검사를 통한 기기 권한 부여 | 기기 정보 수집 | 수동 검사 수행 | 자동 평가 및 접근 허용 | 접근권한 조정, 보안 시스템 연동 | +| 기기 인벤토리 | 수동 인벤토리, 정보 수집 | 자동화 기록 | 비정상 기기 탐지, 취약점 파악 | 실시간 모니터링, 예측 분석 | +| 통합 엔드포인트/모바일 기기 관리 | 관리 시스템 도입, 보안 정책 설정 | 중앙 관리, 지속 모니터링 | 중앙 자동 적용 | 통합 관리, 자동 위협 대응 | +| EDR 및 XDR | 기본 EDR 도입 | 실시간 탐지/자동 대응 | XDR 도입 | AI 기반 통합 위협 탐지 | +| 자산/취약성/패치 관리 자동화 | 수동 평가, 목록 작성 | 자동 패치 도입 | 지속적 자동화, 시스템 통합 | 사전 식별, 통합 관리 | + +--- + +## Total: 89 Items (ID: 53 + DV: 36) diff --git a/skills-ko/kesekit-check-ko/templates/zero-trust/network-system.md b/skills-ko/kesekit-check-ko/templates/zero-trust/network-system.md new file mode 100644 index 0000000..89cef54 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/zero-trust/network-system.md @@ -0,0 +1,145 @@ +# Network & System Checklist + +> Zero Trust Maturity Assessment — Network (NW) & System (SY) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## NW — 네트워크 (Network) (54 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-NW-01 | 매크로 세그멘테이션 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-02 | 매크로 세그멘테이션 | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | Traditional | Critical | +| ZT-NW-03 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | Initial | High | +| ZT-NW-04 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | Initial | High | +| ZT-NW-05 | 매크로 세그멘테이션 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | Advanced | Medium | +| ZT-NW-06 | 매크로 세그멘테이션 | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | Advanced | Medium | +| ZT-NW-07 | 매크로 세그멘테이션 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | Optimal | Low | +| ZT-NW-08 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-09 | 마이크로 세그멘테이션 | 수동으로 세그먼트를 구성하는가? | Traditional | Critical | +| ZT-NW-10 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | Initial | High | +| ZT-NW-11 | 마이크로 세그멘테이션 | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지/차단 할 수 있는가? | Initial | High | +| ZT-NW-12 | 마이크로 세그멘테이션 | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | Initial | High | +| ZT-NW-13 | 마이크로 세그멘테이션 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | Advanced | Medium | +| ZT-NW-14 | 마이크로 세그멘테이션 | 애플리케이션 별 격리 메커니즘이 적용되었는가? | Advanced | Medium | +| ZT-NW-15 | 마이크로 세그멘테이션 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | Optimal | Low | +| ZT-NW-16 | 소프트웨어 정의 네트워킹 | 소프트웨어 정의 네트워크가 도입되어 있는가? | Traditional | Critical | +| ZT-NW-17 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | Traditional | Critical | +| ZT-NW-18 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | Initial | High | +| ZT-NW-19 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | Advanced | Medium | +| ZT-NW-20 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | Optimal | Low | +| ZT-NW-21 | 위협 대응 | IDS/IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | Traditional | Critical | +| ZT-NW-22 | 위협 대응 | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | Traditional | Critical | +| ZT-NW-23 | 위협 대응 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | Initial | High | +| ZT-NW-24 | 위협 대응 | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | Initial | High | +| ZT-NW-25 | 위협 대응 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | Advanced | Medium | +| ZT-NW-26 | 위협 대응 | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | Advanced | Medium | +| ZT-NW-27 | 위협 대응 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | Optimal | Low | +| ZT-NW-28 | 위협 대응 | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | Optimal | Low | +| ZT-NW-29 | 트래픽 암호화 | 내/외부 트래픽 일부 암호화가 가능한가? | Traditional | Critical | +| ZT-NW-30 | 트래픽 암호화 | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | Traditional | Critical | +| ZT-NW-31 | 트래픽 암호화 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | Initial | High | +| ZT-NW-32 | 트래픽 암호화 | 데이터 전송 시 암호화를 필수로 하고 있는가? | Initial | High | +| ZT-NW-33 | 트래픽 암호화 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | Advanced | Medium | +| ZT-NW-34 | 트래픽 암호화 | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | Advanced | Medium | +| ZT-NW-35 | 트래픽 암호화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | Optimal | Low | +| ZT-NW-36 | 트래픽 암호화 | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-NW-37 | 데이터 흐름 매핑 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | Traditional | Critical | +| ZT-NW-38 | 데이터 흐름 매핑 | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | Traditional | Critical | +| ZT-NW-39 | 데이터 흐름 매핑 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | Initial | High | +| ZT-NW-40 | 데이터 흐름 매핑 | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | Initial | High | +| ZT-NW-41 | 데이터 흐름 매핑 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | Advanced | Medium | +| ZT-NW-42 | 데이터 흐름 매핑 | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | Advanced | Medium | +| ZT-NW-43 | 데이터 흐름 매핑 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | Optimal | Low | +| ZT-NW-44 | 데이터 흐름 매핑 | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | Optimal | Low | +| ZT-NW-45 | 네트워크 회복성 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | Traditional | Critical | +| ZT-NW-46 | 네트워크 회복성 | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | Traditional | Critical | +| ZT-NW-47 | 네트워크 회복성 | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | Traditional | Critical | +| ZT-NW-48 | 네트워크 회복성 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | Initial | High | +| ZT-NW-49 | 네트워크 회복성 | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | Initial | High | +| ZT-NW-50 | 네트워크 회복성 | 네트워크 이중화 설계가 되어 있는가? | Initial | High | +| ZT-NW-51 | 네트워크 회복성 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | Advanced | Medium | +| ZT-NW-52 | 네트워크 회복성 | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | Advanced | Medium | +| ZT-NW-53 | 네트워크 회복성 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | Optimal | Low | +| ZT-NW-54 | 네트워크 회복성 | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | Optimal | Low | + +### NW Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 매크로 세그멘테이션 | 영역별 세그멘테이션, 트래픽 흐름 기반 구성 | 보안 정책 적용, 비정상 활동 탐지 | 맞춤형 정책, 위협 대응 | AI 기반 관리 | +| 마이크로 세그멘테이션 | 워크로드 기준 세그멘테이션, 수동 구성 | 보안 정책, 워크로드 이동 탐지/차단, 모니터링 | 정책 설정/제어, 격리 메커니즘 | AI 기반 자동 대응 | +| 소프트웨어 정의 네트워킹 | SDN 도입, 기본 구조 설정 | 중앙 관리, 실시간 정책 | 트래픽 관리/보안 확장 | AI 기반 위협 관리/트래픽 예측 | +| 위협 대응 | IDS/IPS 감시, 정적 규칙 관리 | 자동 탐지/대응, 프로파일 관리 | 선제적 대응, 동적 규칙 | 즉각 자동 대응, 동적 트래픽 관리 | +| 트래픽 암호화 | 일부 암호화, SSL/TLS/VPN | 전반 암호화, 전송 필수 암호화 | 저장 데이터 암호화, 고급 키 관리 | 성능 유지 보호, 통합 키 관리 | +| 데이터 흐름 매핑 | 수동 모니터링, 수동 매핑 | 애플리케이션 단위 매핑, 실시간 매핑 | 비정상 이동 탐지, 상관관계 분석 | AI 예측 분석, 동적 우선순위 | +| 네트워크 회복성 | 복구 계획, 백업, 장애 대응 절차 | 다중 경로, Failover, 이중화 | 지속적 서비스, 주기적 테스트 | 중단 없는 운영, 자동화 복구 | + +--- + +## SY — 시스템 (System) (49 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-SY-01 | 접근통제 | 사용자 및 기기에 수동으로 권한을 부여하는가? | Traditional | Critical | +| ZT-SY-02 | 접근통제 | RBAC 기반 접근제어를 수행하는가? | Traditional | Critical | +| ZT-SY-03 | 접근통제 | 권한 관리를 수동으로 수행하는가? | Traditional | Critical | +| ZT-SY-04 | 접근통제 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | Initial | High | +| ZT-SY-05 | 접근통제 | 실시간 접근권한 부여가 가능한가? | Initial | High | +| ZT-SY-06 | 접근통제 | 권한 변경 사항이 자동으로 반영되는가? | Initial | High | +| ZT-SY-07 | 접근통제 | 특정 리소스에 대한 접근 제한/승인 정책이 자동으로 적용 가능한가? | Initial | High | +| ZT-SY-08 | 접근통제 | ABAC 기반 접근제어를 수행하는가? | Advanced | Medium | +| ZT-SY-09 | 접근통제 | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | Advanced | Medium | +| ZT-SY-10 | 접근통제 | 사용자/기기의 상태를 실시간으로 분석하고 실시간/자동으로 권한 조정이 가능한가? | Optimal | Low | +| ZT-SY-11 | 접근통제 | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | Optimal | Low | +| ZT-SY-12 | 접근통제 | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | Optimal | Low | +| ZT-SY-13 | 접근통제 | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | Optimal | Low | +| ZT-SY-14 | PAM | PAM 시스템을 구축하였는가? | Traditional | Critical | +| ZT-SY-15 | PAM | PAM 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-SY-16 | PAM | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | Initial | High | +| ZT-SY-17 | PAM | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | Initial | High | +| ZT-SY-18 | PAM | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | Advanced | Medium | +| ZT-SY-19 | PAM | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | Optimal | Low | +| ZT-SY-20 | 자격 증명 관리 | 자격 증명이 수동으로 관리되는가? | Traditional | Critical | +| ZT-SY-21 | 자격 증명 관리 | 패스워드에 기반한 인증 방식에 의존하는가? | Traditional | Critical | +| ZT-SY-22 | 자격 증명 관리 | 자격 증명 관리가 체계적이지 않고 수동적인가? | Traditional | Critical | +| ZT-SY-23 | 자격 증명 관리 | 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | Initial | High | +| ZT-SY-24 | 자격 증명 관리 | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | Initial | High | +| ZT-SY-25 | 자격 증명 관리 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | Advanced | Medium | +| ZT-SY-26 | 자격 증명 관리 | 자격 증명 관리 시스템을 고도화하여 관리하는가? | Advanced | Medium | +| ZT-SY-27 | 자격 증명 관리 | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | Advanced | Medium | +| ZT-SY-28 | 자격 증명 관리 | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | Advanced | Medium | +| ZT-SY-29 | 자격 증명 관리 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | Optimal | Low | +| ZT-SY-30 | 자격 증명 관리 | 실시간으로 인증 정책 조정이 가능한가? | Optimal | Low | +| ZT-SY-31 | 자격 증명 관리 | 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | Optimal | Low | +| ZT-SY-32 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | Traditional | Critical | +| ZT-SY-33 | 네트워크 세분화 및 그룹 간 이동 | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | Traditional | Critical | +| ZT-SY-34 | 네트워크 세분화 및 그룹 간 이동 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | Initial | High | +| ZT-SY-35 | 네트워크 세분화 및 그룹 간 이동 | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | Initial | High | +| ZT-SY-36 | 네트워크 세분화 및 그룹 간 이동 | 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | Advanced | Medium | +| ZT-SY-37 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | Advanced | Medium | +| ZT-SY-38 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | Advanced | Medium | +| ZT-SY-39 | 네트워크 세분화 및 그룹 간 이동 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | Optimal | Low | +| ZT-SY-40 | 네트워크 세분화 및 그룹 간 이동 | 재인증 없는 그룹 간 이동이 가능한가? | Optimal | Low | +| ZT-SY-41 | 네트워크 세분화 및 그룹 간 이동 | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | Optimal | Low | +| ZT-SY-42 | 시스템 환경에 따른 정책 관리 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | Traditional | Critical | +| ZT-SY-43 | 시스템 환경에 따른 정책 관리 | 수동으로 보안 정책을 유지/관리하고 있는가? | Traditional | Critical | +| ZT-SY-44 | 시스템 환경에 따른 정책 관리 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | Initial | High | +| ZT-SY-45 | 시스템 환경에 따른 정책 관리 | 정책이 자동으로 적용되는가? | Initial | High | +| ZT-SY-46 | 시스템 환경에 따른 정책 관리 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | Advanced | Medium | +| ZT-SY-47 | 시스템 환경에 따른 정책 관리 | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | Advanced | Medium | +| ZT-SY-48 | 시스템 환경에 따른 정책 관리 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | Optimal | Low | +| ZT-SY-49 | 시스템 환경에 따른 정책 관리 | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | Optimal | Low | + +### SY Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 접근통제 | 수동 권한 부여, RBAC | 중앙 집중 권한, 실시간 부여, 자동 반영 | ABAC, 동적 실시간 권한 | 실시간 분석/조정, 신뢰도 재산정, 위험 분석 기반 | +| PAM | PAM 시스템/정책 구축 | 모니터링/제어, 자동 승인 | 비정상 활동 탐지 | AI 기반 위협 탐지/대응 | +| 자격 증명 관리 | 수동 관리, 패스워드 의존 | 중앙 자동화, MFA | 생체 인증, 고도화, 무결성, AI 분석 | 실시간 차단/정책 조정, 자율 운영 | +| 네트워크 세분화 및 그룹 간 이동 | 통제 미흡, 경계형 모델 | 중요도 기반 분리, 이동 제어 | 워크로드별 세분화, 강력한 접근통제, 실시간 검사 | 실시간 분석/제어, 재인증 없는 이동, 자동 정책 | +| 시스템 환경에 따른 정책 관리 | 온프레미스 보안 정책, 수동 관리 | 클라우드 정책, 자동 적용 | 하이브리드 실시간 조정, 동적 변경 | 자율 정책, 완전 자동화 | + +--- + +## Total: 103 Items (NW: 54 + SY: 49) diff --git a/skills-ko/kesekit-check-ko/templates/zero-trust/ot-environment.md b/skills-ko/kesekit-check-ko/templates/zero-trust/ot-environment.md new file mode 100644 index 0000000..0331c34 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/zero-trust/ot-environment.md @@ -0,0 +1,51 @@ +# OT/ICS Zero Trust Environment Checklist + +> Zero Trust Maturity Assessment — OT/ICS (Operational Technology / Industrial Control Systems) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), IEC 62443, NIST SP 800-82 + +## OT/ICS Zero Trust Considerations + +OT/ICS environments require special Zero Trust deployment strategies due to: +- Legacy systems that cannot support modern authentication +- Real-time operational requirements (latency sensitivity) +- Safety-critical functions that must not be disrupted +- Air-gapped or semi-isolated network architectures +- Long equipment lifecycles (15-30 years) + +## OT-ZT Assessment Items + +| ID | Category | Verification | Maturity | Severity | +|----|----------|-------------|----------|----------| +| OT-ZT-01 | Network Segmentation | OT 네트워크와 IT 네트워크가 물리적/논리적으로 분리되어 있는가? | Traditional | Critical | +| OT-ZT-02 | Network Segmentation | DMZ를 통한 OT-IT 간 데이터 교환이 통제되고 있는가? | Traditional | Critical | +| OT-ZT-03 | Network Segmentation | Purdue Model 또는 IEC 62443 zone/conduit 기반 세그멘테이션이 적용되어 있는가? | Initial | High | +| OT-ZT-04 | Network Segmentation | 마이크로 세그멘테이션이 OT 환경 내부에 적용되어 있는가? | Advanced | Medium | +| OT-ZT-05 | Network Segmentation | SDN 기반 동적 세그멘테이션이 OT 환경에 적용 가능한가? | Optimal | Low | +| OT-ZT-06 | Identity & Access | OT 시스템 접근에 대한 사용자 인증이 수행되는가? | Traditional | Critical | +| OT-ZT-07 | Identity & Access | OT 전용 계정 관리 및 최소 권한 원칙이 적용되어 있는가? | Initial | High | +| OT-ZT-08 | Identity & Access | OT 환경에서 MFA가 적용되어 있는가 (물리적 토큰 포함)? | Initial | High | +| OT-ZT-09 | Identity & Access | OT 원격 접속에 대한 별도 인증 및 모니터링이 수행되는가? | Advanced | Medium | +| OT-ZT-10 | Identity & Access | 비정상적인 OT 접근 시도에 대한 실시간 탐지 및 대응이 가능한가? | Optimal | Low | +| OT-ZT-11 | Device Management | OT 자산 인벤토리가 문서화되어 있는가? | Traditional | Critical | +| OT-ZT-12 | Device Management | OT 디바이스 식별 및 분류 체계가 구축되어 있는가? | Initial | High | +| OT-ZT-13 | Device Management | OT 디바이스 보안 상태 자동 모니터링이 가능한가? | Advanced | Medium | +| OT-ZT-14 | Device Management | 레거시 OT 장비에 대한 보안 래퍼/프록시가 적용되어 있는가? | Advanced | Medium | +| OT-ZT-15 | Device Management | AI 기반 OT 자산 관리 및 이상 탐지가 가능한가? | Optimal | Low | +| OT-ZT-16 | Communication Security | OT 프로토콜(Modbus, OPC UA, DNP3 등) 트래픽이 모니터링되는가? | Traditional | Critical | +| OT-ZT-17 | Communication Security | OT 통신에 대한 암호화가 적용되어 있는가 (가능한 경우)? | Initial | High | +| OT-ZT-18 | Communication Security | OT 프로토콜 이상 탐지(DPI) 시스템이 도입되어 있는가? | Advanced | Medium | +| OT-ZT-19 | Communication Security | OT 환경 전용 위협 인텔리전스가 적용되어 있는가? | Optimal | Low | +| OT-ZT-20 | Safety & Availability | ZT 정책 적용 시 안전 기능(Safety Function)에 영향이 없는지 검증되었는가? | Traditional | Critical | +| OT-ZT-21 | Safety & Availability | ZT 정책 실패 시 fail-open/fail-safe 동작이 정의되어 있는가? | Initial | High | +| OT-ZT-22 | Safety & Availability | ZT 구성 변경에 대한 OT 영향도 분석 프로세스가 수립되어 있는가? | Advanced | Medium | +| OT-ZT-23 | Monitoring & Response | OT 환경 전용 SOC/보안 모니터링 체계가 수립되어 있는가? | Initial | High | +| OT-ZT-24 | Monitoring & Response | IT-OT 통합 보안 이벤트 분석이 가능한가? | Advanced | Medium | +| OT-ZT-25 | Monitoring & Response | OT 환경에 대한 자동화된 인시던트 대응이 가능한가? | Optimal | Low | + +## Deployment Strategy for OT + +1. **Phase 1 — Visibility**: Asset discovery, traffic mapping, baseline establishment +2. **Phase 2 — Segmentation**: IT-OT separation, zone/conduit implementation +3. **Phase 3 — Access Control**: Identity-based access, MFA for remote access +4. **Phase 4 — Monitoring**: Continuous monitoring, anomaly detection +5. **Phase 5 — Automation**: Automated response (with safety validation) diff --git a/skills-ko/kesekit-check-ko/templates/zero-trust/overview.md b/skills-ko/kesekit-check-ko/templates/zero-trust/overview.md new file mode 100644 index 0000000..0bdd288 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/zero-trust/overview.md @@ -0,0 +1,69 @@ +# Zero Trust Overview + +> Zero Trust Maturity Assessment — Overview & Assessment Guide +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), NIST SP 800-207, CISA ZT Maturity Model + +## Zero Trust Principles + +- **Never Trust, Always Verify**: Every access request must be authenticated and authorized regardless of network location +- **Assume Breach**: Minimize blast radius through microsegmentation and least-privilege access +- **Verify Explicitly**: Use all available data points (identity, location, device health, service/workload, data classification, anomalies) + +## 8 Core Elements + +| # | Element | Code | Items | +|---|---------|------|:-----:| +| 1 | Identity (식별자 및 신원) | ID | 53 | +| 2 | Device (디바이스 및 엔드포인트) | DV | ~50 | +| 3 | Network (네트워크) | NW | 54 | +| 4 | System (시스템) | SY | ~45 | +| 5 | Application (애플리케이션 및 워크로드) | AP | 60 | +| 6 | Data (데이터) | DA | ~50 | +| 7 | Visibility (가시성 및 분석) | VA | 43 | +| 8 | Automation (자동화 및 오케스트레이션) | AU | ~41 | + +**Total: ~396 items across 4 maturity levels** + +## 4 Maturity Levels + +| Level | Description | Target | +|-------|-------------|--------| +| **Traditional** | Perimeter-based security, manual processes | Baseline awareness | +| **Initial** | Some ZT controls adopted, partial automation | Early adopters | +| **Advanced** | Centralized management, context-aware policies, AI-assisted | Mature organizations | +| **Optimal** | Fully automated, real-time adaptive, AI-driven orchestration | Industry leaders | + +## Assessment Flow + +1. Determine target maturity level based on organizational goals +2. Select relevant core elements based on system context +3. Assess each item at or below the target maturity level +4. Items above target maturity level are informational (not scored) +5. Generate gap analysis comparing current state vs. target + +## Template Files + +| Topic | File | +|-------|------| +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | + +## Reference Files + +| Topic | File | +|-------|------| +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +## Judgment Criteria + +| Judgment | Description | +|----------|-------------| +| Pass (양호) | ZT control properly implemented at target maturity level | +| Partial (부분이행) | Control partially implemented, improvement needed | +| Fail (취약) | Control not implemented or significantly below target | +| N/A (해당없음) | Not applicable to the environment | diff --git a/skills-ko/kesekit-check-ko/templates/zero-trust/visibility-automation.md b/skills-ko/kesekit-check-ko/templates/zero-trust/visibility-automation.md new file mode 100644 index 0000000..7dca723 --- /dev/null +++ b/skills-ko/kesekit-check-ko/templates/zero-trust/visibility-automation.md @@ -0,0 +1,128 @@ +# Visibility & Automation Checklist + +> Zero Trust Maturity Assessment — Visibility (VA) & Automation (AU) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## VA — 가시성 및 분석 (Visibility) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-VA-01 | 모든 관련 활동 기록 | 로그 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-VA-02 | 모든 관련 활동 기록 | 로그 데이터가 특정한 시스템에서만 수집되는가? | Traditional | Critical | +| ZT-VA-03 | 모든 관련 활동 기록 | 다양한 시스템에서 자동으로 로그를 수집하는가? | Initial | High | +| ZT-VA-04 | 모든 관련 활동 기록 | 로그 수집 및 관리가 자동화 되었는가? | Initial | High | +| ZT-VA-05 | 모든 관련 활동 기록 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-VA-06 | 모든 관련 활동 기록 | 로그 기록의 무결성을 보장하는가? | Advanced | Medium | +| ZT-VA-07 | 모든 관련 활동 기록 | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | Advanced | Medium | +| ZT-VA-08 | 모든 관련 활동 기록 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | Optimal | Low | +| ZT-VA-09 | 모든 관련 활동 기록 | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | Optimal | Low | +| ZT-VA-10 | 모든 관련 활동 기록 | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | Optimal | Low | +| ZT-VA-11 | 중앙집중적 보안 정보 및 이벤트 관리 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | Traditional | Critical | +| ZT-VA-12 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템이 도입되었는가? | Initial | High | +| ZT-VA-13 | 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 보안 관리 체계가 구축되었는가? | Initial | High | +| ZT-VA-14 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | Advanced | Medium | +| ZT-VA-15 | 중앙집중적 보안 정보 및 이벤트 관리 | AI 기반으로 보안 이벤트를 분석하는가? | Optimal | Low | +| ZT-VA-16 | 중앙집중적 보안 정보 및 이벤트 관리 | 비정상적인 활동에 대하여 자동 대응이 가능한가? | Optimal | Low | +| ZT-VA-17 | 보안 위협 분석 | 보안 로그 및 데이터를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-18 | 보안 위협 분석 | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-19 | 보안 위협 분석 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | Initial | High | +| ZT-VA-20 | 보안 위협 분석 | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | Initial | High | +| ZT-VA-21 | 보안 위협 분석 | 자동화된 보안 위협 분석 도구를 도입하였는가? | Advanced | Medium | +| ZT-VA-22 | 보안 위협 분석 | 실시간 보안 위협 탐지가 가능한가? | Advanced | Medium | +| ZT-VA-23 | 보안 위협 분석 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | Optimal | Low | +| ZT-VA-24 | 사용자 및 기기 동작 분석 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | Traditional | Critical | +| ZT-VA-25 | 사용자 및 기기 동작 분석 | 비정상 행동을 수동으로 탐지하는가? | Traditional | Critical | +| ZT-VA-26 | 사용자 및 기기 동작 분석 | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | Traditional | Critical | +| ZT-VA-27 | 사용자 및 기기 동작 분석 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | Initial | High | +| ZT-VA-28 | 사용자 및 기기 동작 분석 | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | Initial | High | +| ZT-VA-29 | 사용자 및 기기 동작 분석 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | Advanced | Medium | +| ZT-VA-30 | 사용자 및 기기 동작 분석 | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | Advanced | Medium | +| ZT-VA-31 | 사용자 및 기기 동작 분석 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | Optimal | Low | +| ZT-VA-32 | 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-33 | 위협 인텔리전스 통합 | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | Traditional | Critical | +| ZT-VA-34 | 위협 인텔리전스 통합 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | Initial | High | +| ZT-VA-35 | 위협 인텔리전스 통합 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | Advanced | Medium | +| ZT-VA-36 | 위협 인텔리전스 통합 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | Optimal | Low | +| ZT-VA-37 | 자동화된 동적 정책 | 보안 정책을 수동으로 관리하는가? | Traditional | Critical | +| ZT-VA-38 | 자동화된 동적 정책 | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | Traditional | Critical | +| ZT-VA-39 | 자동화된 동적 정책 | 자동화된 정책 관리 시스템을 도입하였는가? | Initial | High | +| ZT-VA-40 | 자동화된 동적 정책 | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | Initial | High | +| ZT-VA-41 | 자동화된 동적 정책 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | Advanced | Medium | +| ZT-VA-42 | 자동화된 동적 정책 | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | Advanced | Medium | +| ZT-VA-43 | 자동화된 동적 정책 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | Optimal | Low | + +### VA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 모든 관련 활동 기록 | 수동 로그, 특정 시스템 수집 | 자동 로그 수집, 관리 자동화 | 실시간 탐지, 무결성, 예측 분석 | 자율 보안, 정규화, 자동 정책 조정 | +| 중앙집중적 보안 정보/이벤트 관리 | 수동 분석 | SIEM 도입, 중앙 관리 | 보안 도구 연동 종합 분석 | AI 분석, 자동 대응 | +| 보안 위협 분석 | 수동 로그/CVE 수집 | 평가 기준, 자동 경고 | 자동화 분석, 실시간 탐지 | AI 예측 분석 | +| 사용자/기기 동작 분석 | 활동 데이터 수집, 수동 탐지, 패턴 기록 | 자동 분석 도구 도입 | 행동 분석 탐지, AI 실시간 대응 | 자동 정책 조정, 최소 권한 | +| 위협 인텔리전스 통합 | 수동 수집, 수동 연동 | 자동 통합 도구 | 내부 시스템 통합 | AI 기반 시스템 | +| 자동화된 동적 정책 | 수동 관리, 수동 대응 | 자동 정책 관리, 자동 변경 | 실시간 조정, 위협 연계 | AI 자율 정책 조정 | + +--- + +## AU — 자동화 및 통합 (Automation) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AU-01 | 정책 통합 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | Traditional | Critical | +| ZT-AU-02 | 정책 통합 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-AU-03 | 정책 통합 | 정책 변경이 자동으로 이루어지는가? | Initial | High | +| ZT-AU-04 | 정책 통합 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | Advanced | Medium | +| ZT-AU-05 | 정책 통합 | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | Advanced | Medium | +| ZT-AU-06 | 정책 통합 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-07 | 중요 프로세스 자동화 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | Traditional | Critical | +| ZT-AU-08 | 중요 프로세스 자동화 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | Initial | High | +| ZT-AU-09 | 중요 프로세스 자동화 | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | Initial | High | +| ZT-AU-10 | 중요 프로세스 자동화 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | Advanced | Medium | +| ZT-AU-11 | 중요 프로세스 자동화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-12 | 인공지능 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-13 | 인공지능 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | Initial | High | +| ZT-AU-14 | 인공지능 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | Advanced | Medium | +| ZT-AU-15 | 인공지능 | AI가 모든 보안 시스템에 완전히 통합되었는가? | Optimal | Low | +| ZT-AU-16 | 인공지능 | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | Optimal | Low | +| ZT-AU-17 | 보안 통합, 자동화 및 대응 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | Traditional | Critical | +| ZT-AU-18 | 보안 통합, 자동화 및 대응 | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | Traditional | Critical | +| ZT-AU-19 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 도입하였는가? | Initial | High | +| ZT-AU-20 | 보안 통합, 자동화 및 대응 | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | Initial | High | +| ZT-AU-21 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | Advanced | Medium | +| ZT-AU-22 | 보안 통합, 자동화 및 대응 | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | Advanced | Medium | +| ZT-AU-23 | 보안 통합, 자동화 및 대응 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | Optimal | Low | +| ZT-AU-24 | 보안 통합, 자동화 및 대응 | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | Optimal | Low | +| ZT-AU-25 | 데이터 교환 표준화 | 수집된 데이터가 상이한 형식으로 저장되는가? | Traditional | Critical | +| ZT-AU-26 | 데이터 교환 표준화 | 데이터 교환이 비효율적으로 이루어지는가? | Traditional | Critical | +| ZT-AU-27 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-28 | 데이터 교환 표준화 | 데이터 교환 표준을 도입하였는가? | Initial | High | +| ZT-AU-29 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 자동화되었는가? | Initial | High | +| ZT-AU-30 | 데이터 교환 표준화 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | Advanced | Medium | +| ZT-AU-31 | 데이터 교환 표준화 | 여러 보안 도구 간의 상호 운용성이 제공되는가? | Advanced | Medium | +| ZT-AU-32 | 데이터 교환 표준화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | Optimal | Low | +| ZT-AU-33 | 데이터 교환 표준화 | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | Optimal | Low | +| ZT-AU-34 | 데이터 교환 표준화 | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | Optimal | Low | +| ZT-AU-35 | 보안 운영 조정 및 사고 대응 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | Traditional | Critical | +| ZT-AU-36 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 절차가 정형화되어 있지 않는가? | Traditional | Critical | +| ZT-AU-37 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | Initial | High | +| ZT-AU-38 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | Initial | High | +| ZT-AU-39 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | Advanced | Medium | +| ZT-AU-40 | 보안 운영 조정 및 사고 대응 | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | Advanced | Medium | +| ZT-AU-41 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | Optimal | Low | +| ZT-AU-42 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | Optimal | Low | +| ZT-AU-43 | 보안 운영 조정 및 사고 대응 | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | Optimal | Low | + +### AU Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 정책 통합 | 수동 시스템별 변경 | 중앙 관리, 자동 변경 | 실시간 동적 조정, 즉각 수정 | AI 자율 정책 조정 | +| 중요 프로세스 자동화 | 수동 절차 의존 | 자동화 도구, 백업/장애 대응 자동화 | 보안 사고 자동 대응 | 실시간 최적화, 무중단 조정 | +| 인공지능 | 수동 수집/분석/대응 | 기본 AI 도구, 패턴 식별 | AI 고도화, 실시간 탐지/대응 | 완전 통합, 자율 감지/대응/조정 | +| 보안 통합/자동화/대응 | 독립 운영, 수동 대응 | SOAR 도입, 중앙 대응 | SOAR 고도화, 실시간 통합 | 중앙 자동 처리, 자율 통합 | +| 데이터 교환 표준화 | 상이한 형식, 비효율적, 수동 교환 | 표준 도입, 교환 자동화 | 외부 공유, 상호 운용성 | 자율 관리, 일관된 형식, 실시간 교환 | +| 보안 운영 조정/사고 대응 | 수동 소통, 비정형 절차 | 대응 계획, 자동 경고 | 자동 대응, 실시간 조율, 자동 보고 | 사전 예측, 완전 자동화, 실시간 협력 | + +--- + +## Total: 86 Items (VA: 43 + AU: 43) diff --git a/skills-ko/kesekit-fix-ko/SKILL.md b/skills-ko/kesekit-fix-ko/SKILL.md new file mode 100644 index 0000000..5f0936e --- /dev/null +++ b/skills-ko/kesekit-fix-ko/SKILL.md @@ -0,0 +1,133 @@ +--- +name: kesekit-fix-ko +description: 보안 취약점 자동 수정 및 하드닝 스크립트를 생성합니다. CII(Unix/Windows/웹서버/DB), AI, 로봇, 우주 시스템(위성/GSaaS/지상국/공급망)의 취약점을 수정합니다. KISA/CMMC/NIS2 가이드라인에 따른 보안 설정을 적용합니다. "취약점 수정", "서버 하드닝", "우주 보안 수정", "위성 하드닝" 시 사용하세요. +--- + +# KESE 취약점 자동 수정 + +취약점 분석 결과를 기반으로 적절한 수정을 생성하고 적용합니다. 사용자의 환경에 맞는 가이드라인을 자동 선택합니다. + +## 가이드라인 선택 + +| # | 가이드라인 | 설명 | +|---|----------|------| +| 1 | **CII 하드닝** | 플랫폼별 하드닝 스크립트 생성 | +| 2 | **AI 보안 조치** | AI 시스템 보안 강화 가이드 | +| 3 | **로봇 보안 조치** | 로봇 시스템 보안 강화 (IEC 62443, CRA, RED) | +| 4 | **우주 보안 조치** | 우주 시스템 하드닝 (CMMC, K-RMF, NIS2, NIST IR 8401) | +| 5 | **시큐어코딩 수정** | 취약 코드 패턴 자동 수정 (JS/Python, 46 CWE) | +| 6 | **제로트러스트 조치** | 제로트러스트 갭 분석 기반 조치 가이드 (8개 핵심요소, ~396항목) | + +서버, 인프라, 웹 서비스, DB → **CII** / AI 모델, LLM, AI 서비스 → **AI 보안** / 로봇, ROS/ROS2, 로봇 펌웨어, 무선 제어 인터페이스 → **로봇 보안** / 위성, 지상국, GSaaS, 우주 공급망 → **우주 보안** / JavaScript, Python, 웹 앱 코드 → **시큐어코딩** +Zero Trust, ZTA, ZTNA, 제로트러스트, 마이크로세그멘테이션, microsegmentation, SDP, SASE, PEP/PDP, never trust always verify → **제로트러스트** + +--- + +## CII 분기 시 + +### 실행 흐름 +1. `reports/kese/`에서 이전 평가 결과 읽기 (있는 경우) +2. 이전 평가가 없으면 사용자에게 대상 플랫폼 확인 +3. 해당 템플릿 파일을 `templates/cii/`에서 로드 (점검/수정 스크립트는 `scripts/cii/`에 있음) +4. 플랫폼별 하드닝 스크립트 생성 +5. 스크립트를 `scripts/kese-hardening/`에 저장 + +### 출력 구조 + +``` +scripts/kese-hardening/ +├── unix/ ← bash 스크립트 +├── windows/ ← PowerShell 스크립트 +├── web/ ← Apache/Nginx 설정 +├── database/ ← SQL 스크립트 +└── README.md +``` + +### 플랫폼별 reference 매핑 + +| 플랫폼 | reference | 스크립트 유형 | +|--------|-----------|-------------| +| Unix/Linux | `templates/cii/unix.md` | bash | +| Windows | `templates/cii/windows.md` | PowerShell | +| 웹 서비스 | `templates/cii/web-service.md` | conf 파일 | +| DBMS | `templates/cii/database.md` | SQL | +| 네트워크 장비 | `templates/cii/network.md` | CLI 명령어 | +| 보안 장비 | `templates/cii/security-equip.md` | 설정 가이드 | +| PC | `templates/cii/pc.md` | PowerShell/GPO | +| 클라우드 | `templates/cii/cloud.md` | CLI 명령어 | + +### 수정 적용 시 주의사항 +- 수정 전 항상 설정 백업 +- 비운영 환경에서 먼저 테스트 +- 일부 수정은 서비스 재시작 필요 +- 컴플라이언스 감사를 위해 모든 변경사항 문서화 + +--- + +## AI 보안 분기 시 + +### 실행 흐름 +1. `references/ai-security/overview.md`를 읽어 AI 보안 위협 유형 파악 +2. 대상에 따라 적절한 reference 로드 +3. 보안 강화 가이드 및 코드 패치 생성 + +### 대상별 조치 + +| 대상 | reference | 조치 내용 | +|------|-----------|----------| +| AI 개발자 | `templates/ai-security/developer.md` | 모델 보안, 데이터 보호, API 보안 코드 | +| 서비스 제공자 | `references/ai-security/service-provider.md` | 서비스 보안 설정, 접근통제 | +| AI 이용자 | `references/ai-security/user-guide.md` | 보안 수칙 적용 체크리스트 | + +### AI 보안 주요 조치 항목 +- Prompt Injection 방어 (입출력 필터링, 가드레일) +- 데이터 중독(Poisoning) 방어 (이상치 탐지, 데이터 검증) +- 모델 추출 방어 (쿼리 제한, 워터마킹) +- API 보안 (Rate Limiting, 인증, TLS) +- LLM 보안 (OWASP Top 10 for LLM 기반) + +--- + +## 로봇 보안 분기 시 + +`templates/robot-security/`를 로드하여 로봇 시스템 보안 강화 가이드를 생성합니다. + +### 로봇 보안 주요 조치 영역 +- Secure SDLC / SSDF 적용 +- 서드파티 컴포넌트 및 SBOM 기반 공급망 통제 +- IEC 62443 기반 인증, 권한, 무결성, 데이터 보호 통제 +- CRA/NIS2 관점의 취약점 대응 및 사이버 복원력 +- Wi-Fi, Bluetooth, 5G 등 무선 인터페이스 보안 강화 + +--- + +## 시큐어코딩 분기 시 + +`references/secure-coding/pseudocode.md`에서 UNSAFE→SAFE 패턴 쌍을 로드합니다. `templates/secure-coding/javascript.md` 또는 `templates/secure-coding/python.md`로 프레임워크별 수정을 적용합니다. 각 항목은 정확한 코드 변환(UNSAFE → SAFE)을 제공합니다. + +--- + +## 제로트러스트 분기 시 + +`references/zero-trust/`에서 성숙도 모델과 아키텍처를, `templates/zero-trust/`에서 핵심요소별 체크리스트를 로드합니다. 현재 성숙도와 목표 성숙도 간 갭 분석을 기반으로 조치 가이드를 생성합니다. OT/ICS 환경이 감지되면 `templates/zero-trust/ot-environment.md`와 `references/zero-trust/ot-guide.md`도 로드합니다. + +| 주제 | reference 파일 | +|------|---------------| +| 개요 | `templates/zero-trust/overview.md` | +| 식별자 및 디바이스 | `templates/zero-trust/identity-device.md` | +| 네트워크 및 시스템 | `templates/zero-trust/network-system.md` | +| 애플리케이션 및 데이터 | `templates/zero-trust/app-data.md` | +| 가시성 및 자동화 | `templates/zero-trust/visibility-automation.md` | +| OT/ICS 환경 | `templates/zero-trust/ot-environment.md` | +| ZT 아키텍처 참조 | `references/zero-trust/overview.md` | +| 성숙도 모델 상세 | `references/zero-trust/maturity-model.md` | +| OT 배포 가이드 | `references/zero-trust/ot-guide.md` | + +8개 핵심요소, ~396개 항목, 4단계 성숙도. 표준: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-207, CISA ZT Maturity Model. + +--- + +## 참고사항 +- 발견된 각 취약점에 대해 구체적인 수정 명령어/코드를 제시하세요 +- 긴급 심각도 항목을 우선적으로 수정하세요 +- 수정 후 재점검을 권고하세요 diff --git a/skills-ko/fix/references/ai-security/overview.md b/skills-ko/kesekit-fix-ko/references/ai-security/overview.md similarity index 100% rename from skills-ko/fix/references/ai-security/overview.md rename to skills-ko/kesekit-fix-ko/references/ai-security/overview.md diff --git a/skills-ko/fix/references/ai-security/service-provider.md b/skills-ko/kesekit-fix-ko/references/ai-security/service-provider.md similarity index 100% rename from skills-ko/fix/references/ai-security/service-provider.md rename to skills-ko/kesekit-fix-ko/references/ai-security/service-provider.md diff --git a/skills-ko/check/references/ai-security/user-guide.md b/skills-ko/kesekit-fix-ko/references/ai-security/user-guide.md similarity index 82% rename from skills-ko/check/references/ai-security/user-guide.md rename to skills-ko/kesekit-fix-ko/references/ai-security/user-guide.md index 1c3f1e3..808f78d 100644 --- a/skills-ko/check/references/ai-security/user-guide.md +++ b/skills-ko/kesekit-fix-ko/references/ai-security/user-guide.md @@ -56,15 +56,3 @@ - 정기적으로 음성 기록 검토 및 삭제 --- - -## 3. 체크리스트 요약 - -| # | 항목 | 확인 | -|---|------|:----:| -| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | -| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | -| 3 | AI 서비스 이용약관을 확인했는가? | □ | -| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | -| 5 | AI 출력 결과를 검증하고 있는가? | □ | -| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | -| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills-ko/kesekit-fix-ko/references/secure-coding/overview.md b/skills-ko/kesekit-fix-ko/references/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/skills-ko/kesekit-fix-ko/references/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/skills-ko/kesekit-fix-ko/references/secure-coding/pseudocode.md b/skills-ko/kesekit-fix-ko/references/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/references/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/skills-ko/kesekit-fix-ko/references/space-security/overview.md b/skills-ko/kesekit-fix-ko/references/space-security/overview.md new file mode 100644 index 0000000..f31ab87 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/references/space-security/overview.md @@ -0,0 +1,82 @@ +# Space Security Overview + +> Source: KISA "Space Security Model" Part1 (2024.12) + Part2 (2025.12) + Explanation Guide (2025.12) + +## 1. Overview + +| Item | Content | +|------|---------| +| Publisher | KISA (Korea Internet & Security Agency) / MSIT | +| Target | Space industry operators, satellite service providers, GSaaS providers, supply chain participants | +| Scope | Space segment, Ground segment, Satellite service segment, GSaaS, Supply chain | +| Standards | CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, NIST CSF, CCSDS | + +## 2. Space Architecture Layers + +| Layer | Components | +|-------|-----------| +| Space Segment | GEO/MEO/LEO satellites, LEO constellations, satellite bus, payload, OBC | +| Ground Segment | Satellite control, payload data processing, antenna, satellite modem, mission control | +| GSaaS | Antenna zone, ground station-cloud zone, reservation/scheduling, API/DB servers | +| Satellite Services | Navigation (GNSS), Communication (VSAT/LEO), Broadcasting | +| Supply Chain | Satellite/launch vehicle manufacturers, ground station operators, satellite operators | + +## 3. Satellite Service Types + +| Service | Description | Key Components | +|---------|-------------|----------------| +| Navigation (GNSS) | Position/navigation/timing via GNSS satellites | Smart ships, autonomous vehicles, UAM | +| Communication | Satellite-based data/voice communication | VSAT, LEO mobile, LEO internet | +| Broadcasting | Satellite TV/radio relay | Broadcasting centers, set-top boxes | +| GSaaS | Ground Station as a Service (cloud-based shared infrastructure) | Shared antennas, cloud scheduling, API | + +## 4. Security Objectives + +| Objective | Description | +|-----------|-------------| +| Confidentiality | Prevent unauthorized access to satellite data and communications | +| Integrity | Prevent unauthorized modification of commands, telemetry, and operational data | +| Availability | Ensure continuous satellite service operation | +| Authentication | Verify identity of users, processes, devices, and satellites | +| Non-repudiation | Ensure accountability for satellite operations | +| Resilience | Maintain operations during and after security incidents | + +## 5. Threat Categories (3 Major Types) + +| Type | Description | Attack Vectors | +|------|-------------|----------------| +| Data Corruption | Unauthorized data modification/deletion | MITM, spoofing, malware, insider threat | +| Service Disruption | Service interruption/degradation | Jamming, DDoS, physical destruction, SW vulnerabilities | +| Information Leakage | Sensitive data exfiltration | Eavesdropping, sniffing, session hijacking, data theft | + +## 6. Checklist Structure (12 Domains, 53 Items) + +| # | Code | Domain | Items | Reference File | +|---|------|--------|:-----:|----------------| +| 1 | AC | Access Control | 12 | `access-control.md` | +| 2 | IA | Identification & Authentication | 2 | `access-control.md` | +| 3 | SC | System & Communication Security | 7 | `system-security.md` | +| 4 | SI | System & Information Integrity | 4 | `system-security.md` | +| 5 | SO | System/Service Operations Management | 9 | `operations.md` | +| 6 | IR | Incident Response | 2 | `operations.md` | +| 7 | PS | Personnel Security | 2 | `governance.md` | +| 8 | PE | Physical & Environmental Security | 3 | `governance.md` | +| 9 | RA | Risk Assessment & Security Evaluation | 2 | `governance.md` | +| 10 | SG | Security Governance | 4 | `governance.md` | +| 11 | CP | Contingency Planning | 2 | `governance.md` | +| 12 | SM | Supply Chain Management | 4 | `supply-chain.md` | + +## 7. Compliance Standards + +| Standard | Description | +|----------|-------------| +| CMMC | Cybersecurity Maturity Model Certification (US DoD, Level 1-3) | +| K-RMF | Korea Risk Management Framework | +| NIS2 | EU Network and Information Security Directive (includes space) | +| ISMS-P | Korea Information Security Management System | +| NIST IR 8401 | Satellite Ground Segment Cybersecurity | +| NIST IR 8270 | Commercial Satellite Operations Cybersecurity | +| NIST CSF | Cybersecurity Framework (Identify/Protect/Detect/Respond/Recover) | +| NIST SP 800-171 | CUI Protection (110 requirements) | +| CCSDS 352.0-B-2 | Space System Cryptographic Algorithm Recommendation | +| ENISA Space Threat Landscape | Space system threat analysis | diff --git a/skills-ko/kesekit-fix-ko/references/space-security/supply-chain.md b/skills-ko/kesekit-fix-ko/references/space-security/supply-chain.md new file mode 100644 index 0000000..2f66548 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/references/space-security/supply-chain.md @@ -0,0 +1,60 @@ +# Supply Chain Threat Scenarios + +> Domain: GSaaS/Supply Chain Threat Scenarios (with code-block illustrations) + +## Threat Scenarios (Supply Chain) + +### Scenario 1: Vulnerable Open-Source Causing Ground Station Failure +``` +Backdoor inserted into open-source community + -> Library used without verification + -> Backdoor enables system takeover + -> Ground station service disruption +``` + +### Scenario 2: Malicious Code in Payload Update File +``` +Developer PC compromised via phishing + -> Ransomware inserted into SW update + -> Update uploaded to satellite without verification + -> Payload malfunction +``` + +### Scenario 3: Tampered IDE Plugin Causing Satellite Malfunction +``` +Malicious code in IDE/CI-CD plugin + -> Firmware developed/loaded without verification + -> Component inspection skipped + -> Satellite bus malfunction +``` + +## GSaaS Threat Scenarios + +### Scenario 1: Satellite Control Hijacking via Weak Authentication +``` +Plaintext communication sniffing + -> IAM credential theft + -> Web shell upload + -> Ground station infiltration + -> Orbit control system takeover + -> Satellite hijacking +``` + +### Scenario 2: Data Tampering via Unauthorized Device Backdoor +``` +No media control + -> USB/single-board-computer backdoor + -> Internal network access + -> Satellite access credential collection + -> Data tampering malware injection +``` + +### Scenario 3: Physical Attack via Drone Disrupting Satellite Communication +``` +Plaintext communication sniffing + -> Antenna location identified + -> Drone with jamming device/explosives + -> Antenna-satellite communication disrupted +``` + +## Total: 4 Checklist Items + 6 Threat Scenarios diff --git a/skills-ko/kesekit-fix-ko/references/zero-trust/maturity-model.md b/skills-ko/kesekit-fix-ko/references/zero-trust/maturity-model.md new file mode 100644 index 0000000..2f3612d --- /dev/null +++ b/skills-ko/kesekit-fix-ko/references/zero-trust/maturity-model.md @@ -0,0 +1,75 @@ +# Zero Trust Maturity Model + +> Reference: KISA 제로트러스트 가이드라인 2.0 (2024.12), CISA Zero Trust Maturity Model v2.0 +> Purpose: Detailed maturity level definitions and scoring guidance + +## Maturity Level Definitions + +### Traditional (전통적) +- Perimeter-based security model (castle-and-moat) +- Manual identity management and access control +- Static, rule-based security policies +- Limited visibility into internal traffic + +### Initial (기본) +- Beginning adoption of ZT principles +- Some automated identity management (SSO, basic MFA) +- Initial network segmentation beyond perimeter +- Centralized logging introduced + +### Advanced (고도화) +- Context-aware, dynamic access policies +- AI-assisted threat detection and response +- Comprehensive microsegmentation +- Real-time monitoring and analytics + +### Optimal (최적화) +- Fully automated, self-adaptive security +- AI-driven orchestration and response +- Predictive threat analysis +- Continuous verification at all layers +- Zero standing privileges + +## Scoring Framework + +### Per-Item Scoring + +| Score | Criteria | +|-------|----------| +| 3 | Fully implemented and operational | +| 2 | Partially implemented, gaps exist | +| 1 | Planned but not yet implemented | +| 0 | Not implemented, no plans | + +### Element Maturity Calculation + +``` +Element Score = (Sum of item scores for target level) / (Max possible score) x 100% + +Maturity Rating: + >= 80% → Mature (at or above target level) + 60-79% → Developing (approaching target level) + 40-59% → Emerging (significant gaps remain) + < 40% → Insufficient (major remediation needed) +``` + +## Cross-Element Dependencies + +| Element | Depends On | +|---------|-----------| +| Identity | — (foundation element) | +| Device | Identity | +| Network | Identity, Device | +| System | Network, Identity | +| Application | Identity, Device, Network | +| Data | Application, Identity | +| Visibility | All elements (observability layer) | +| Automation | Visibility (requires data to automate) | + +## Assessment Prioritization + +1. Start with **Identity** — foundation of all ZT controls +2. Then **Device** — ensure endpoint trust +3. Then **Network** — establish segmentation +4. Then **Application** and **Data** — protect workloads +5. Finally **Visibility** and **Automation** — enable continuous improvement diff --git a/skills-ko/kesekit-fix-ko/references/zero-trust/ot-guide.md b/skills-ko/kesekit-fix-ko/references/zero-trust/ot-guide.md new file mode 100644 index 0000000..92c0970 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/references/zero-trust/ot-guide.md @@ -0,0 +1,128 @@ +# OT/ICS Zero Trust Deployment Guide + +> Reference: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-82 Rev.3, IEC 62443 +> Purpose: Guidance for deploying Zero Trust in OT/ICS environments + +## Why OT/ICS Requires Special ZT Consideration + +Traditional IT Zero Trust assumes: +- Modern endpoints capable of running agents +- Tolerance for additional authentication latency +- Ability to patch and update frequently +- Replaceable infrastructure components + +OT/ICS reality: +- Legacy devices (PLCs, RTUs, HMIs) with 15-30 year lifecycles +- Real-time control loops with microsecond-level latency requirements +- Safety-critical functions where authentication delays can cause harm +- Proprietary protocols (Modbus, DNP3, OPC UA, PROFINET) +- Air-gapped or semi-isolated networks + +## Phased Deployment Approach + +### Phase 1: Visibility & Asset Discovery + +**Objective**: Know what you have before you protect it. + +- Conduct complete OT asset inventory (active + passive discovery) +- Map communication flows between OT devices, IT systems, and external connections +- Identify Purdue Model levels for each asset +- Baseline normal traffic patterns and protocol usage +- Document legacy devices that cannot support modern security controls + +### Phase 2: IT-OT Boundary Segmentation + +**Objective**: Establish strong boundary between IT and OT networks. + +- Deploy industrial DMZ between IT and OT networks +- Implement data diodes or unidirectional gateways for critical flows +- Control all IT-OT data exchange through monitored jump servers +- Establish separate authentication domains for IT and OT + +### Phase 3: OT Internal Segmentation + +**Objective**: Apply zone/conduit model within OT network. + +- Implement IEC 62443 zones and conduits +- Segment by safety level (SL), function, and criticality +- Deploy OT-aware firewalls between zones +- Establish conduit-level access policies + +### Phase 4: Identity & Access Control + +**Objective**: Enforce identity-based access in OT environment. + +- Deploy MFA for all remote OT access (hardware tokens preferred) +- Implement privileged access management (PAM) for OT systems +- Apply least-privilege access for OT operators and engineers +- Manage shared/service accounts with rotation and monitoring +- Use jump servers with session recording for maintenance access + +### Phase 5: Continuous Monitoring + +**Objective**: Maintain visibility and detect anomalies. + +- Deploy OT-specific IDS/IPS (passive monitoring preferred initially) +- Implement Deep Packet Inspection (DPI) for OT protocols +- Integrate OT security events with enterprise SIEM +- Establish OT-specific SOC or extend IT SOC with OT expertise +- Monitor for known OT malware signatures (Triton, Industroyer, etc.) + +### Phase 6: Automated Response (with Safety Validation) + +**Objective**: Enable automated response without compromising safety. + +- Define automated response actions with safety impact assessment +- Implement fail-safe defaults (fail-open for safety-critical, fail-close for non-critical) +- Require human approval for actions affecting safety systems +- Test automated responses in simulation environment before deployment + +## OT-Specific ZT Architecture + +``` +┌────────────────────────────────────────────┐ +│ Enterprise Zone (IT) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ PDP │ │ IdP/ │ │ Enterprise │ │ +│ │ │ │ MFA │ │ SIEM │ │ +│ └────────┘ └────────┘ └────────────┘ │ +└──────────────────┬─────────────────────────┘ + │ Industrial DMZ +┌──────────────────┴─────────────────────────┐ +│ ┌────────────┐ ┌─────────┐ ┌────────┐ │ +│ │ Jump Server│ │ Historian│ │ PEP │ │ +│ │ (PAM) │ │ Mirror │ │ (OT) │ │ +│ └────────────┘ └─────────┘ └────────┘ │ +└──────────────────┬─────────────────────────┘ + │ +┌──────────────────┴─────────────────────────┐ +│ OT Zone (ICS/SCADA) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ HMI │ │ PLC │ │ RTU │ │ +│ │ │ │ │ │ │ │ +│ └────────┘ └────────┘ └────────────┘ │ +│ ┌────────────────────────────────────┐ │ +│ │ OT IDS (Passive Monitoring) │ │ +│ └────────────────────────────────────┘ │ +└────────────────────────────────────────────┘ +``` + +## Legacy Device Handling + +For OT devices that cannot support modern ZT controls: + +1. **Security Wrapper/Proxy**: Place a ZT-capable proxy in front of legacy devices +2. **Network-Level Protection**: Use OT-aware firewalls to enforce access policies +3. **Monitoring**: Deploy passive DPI sensors for visibility without device modification +4. **Compensating Controls**: Document risk acceptance with compensating controls per IEC 62443 + +## Standards Mapping + +| OT-ZT Requirement | IEC 62443 | NIST SP 800-82 | KISA ZT 2.0 | +|-------------------|-----------|----------------|-------------| +| Network Segmentation | Zone/Conduit | Section 5.3 | NW Element | +| Access Control | FR 1 (AC) | Section 6.2 | ID Element | +| Device Management | FR 4 (DC) | Section 6.3 | DV Element | +| Communication Integrity | FR 3 (SI) | Section 5.4 | SY Element | +| Monitoring | FR 6 (RE) | Section 6.6 | VA Element | +| Incident Response | FR 7 (RA) | Section 6.7 | AU Element | diff --git a/skills-ko/kesekit-fix-ko/references/zero-trust/overview.md b/skills-ko/kesekit-fix-ko/references/zero-trust/overview.md new file mode 100644 index 0000000..38fe30d --- /dev/null +++ b/skills-ko/kesekit-fix-ko/references/zero-trust/overview.md @@ -0,0 +1,72 @@ +# Zero Trust Architecture Reference + +> Reference: NIST SP 800-207, KISA 제로트러스트 가이드라인 2.0, CISA Zero Trust Maturity Model +> Purpose: Provide architectural context for Zero Trust maturity assessment + +## Zero Trust Architecture (ZTA) + +### Core Logical Components + +``` +┌─────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ PDP │ │ Policy │ │ Trust Algorithm │ │ +│ │ (Policy │ │ Engine │ │ (Risk Score + │ │ +│ │ Decision │ │ │ │ Context Analysis) │ │ +│ │ Point) │ │ │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ + │ + ┌────┴────┐ + │ PEP │ ← Policy Enforcement Point + │ │ + └────┬────┘ + │ +┌─────────────────────────────────────────────────────────┐ +│ Data Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ Subject │ │ Resource │ │ Enterprise │ │ +│ │ (User/ │→→│ (App/ │ │ Resources │ │ +│ │ Device) │ │ Data) │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### Deployment Models (NIST SP 800-207) + +1. **SDP (Software Defined Perimeter)**: Agent/gateway-based model +2. **Micro-segmentation**: Network-centric approach +3. **Network Infrastructure + SDP**: Hybrid approach + +### KISA Zero Trust Guidelines 2.0 — 8 Elements + +| Element | Korean | Scope | +|---------|--------|-------| +| Identity | 식별자 및 신원 | User identity management, MFA, continuous authentication | +| Device | 디바이스 및 엔드포인트 | Device inventory, health checks, compliance | +| Network | 네트워크 | Macro/micro segmentation, SDN, encrypted traffic | +| System | 시스템 | System hardening, patching, configuration management | +| Application | 애플리케이션 및 워크로드 | Resource authorization, remote access, monitoring | +| Data | 데이터 | Classification, DLP, encryption, access control | +| Visibility | 가시성 및 분석 | Logging, SIEM, threat analysis | +| Automation | 자동화 및 오케스트레이션 | SOAR, automated response, policy orchestration | + +### Related Standards + +| Standard | Organization | Focus | +|----------|-------------|-------| +| NIST SP 800-207 | NIST | ZTA reference architecture | +| CISA Zero Trust Maturity Model | CISA | Federal ZT maturity assessment | +| 제로트러스트 가이드라인 2.0 | KISA | Korean ZT implementation guide | +| NIST SP 800-82 | NIST | OT/ICS security guide | +| IEC 62443 | IEC | Industrial automation security | + +### Key Concepts + +- **PDP (Policy Decision Point)**: Evaluates access requests against policy +- **PEP (Policy Enforcement Point)**: Enforces PDP decisions at the access point +- **SDP (Software Defined Perimeter)**: Creates dynamic, identity-based perimeters +- **SASE (Secure Access Service Edge)**: Cloud-delivered convergence of network and security +- **ZTNA (Zero Trust Network Access)**: Application-level access without VPN +- **Microsegmentation**: Granular network isolation at workload level diff --git a/skills-ko/kesekit-fix-ko/scripts/cii/cloud.md b/skills-ko/kesekit-fix-ko/scripts/cii/cloud.md new file mode 100644 index 0000000..b5fc514 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/cii/cloud.md @@ -0,0 +1,517 @@ +# 클라우드 점검 스크립트 (CA-01 ~ CA-19) + +## 1. 계정 관리 + +### CA-01: 사용자 계정 관리 +**점검:** +```bash +# AWS: IAM 사용자 목록 및 마지막 로그인 확인 +aws iam list-users --output table +aws iam generate-credential-report +aws iam get-credential-report --output text --query Content | base64 -d + +# Azure: 사용자 목록 확인 +az ad user list --output table +az ad user list --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}" --output table + +# GCP: IAM 사용자 확인 +gcloud iam service-accounts list +gcloud projects get-iam-policy --format=json +``` +**조치:** +```bash +# AWS: 불필요 계정 삭제/비활성화 +aws iam delete-user --user-name <사용자명> +aws iam delete-login-profile --user-name <사용자명> +# 액세스 키 비활성화 +aws iam update-access-key --user-name <사용자명> --access-key-id <키ID> --status Inactive + +# Azure: 불필요 계정 삭제/비활성화 +az ad user update --id <사용자ID> --account-enabled false +az ad user delete --id <사용자ID> + +# GCP: 서비스 계정 삭제/비활성화 +gcloud iam service-accounts disable <서비스계정이메일> +gcloud iam service-accounts delete <서비스계정이메일> +``` + +### CA-02: 사용자 정책 관리 +**점검:** +```bash +# AWS: 사용자별 정책 확인 +aws iam list-attached-user-policies --user-name <사용자명> +aws iam list-user-policies --user-name <사용자명> +aws iam list-groups-for-user --user-name <사용자명> + +# Azure: 역할 할당 확인 +az role assignment list --all --output table + +# GCP: IAM 정책 확인 +gcloud projects get-iam-policy +``` +**조치:** +```bash +# AWS: 불필요 권한 제거, 최소 권한 원칙 적용 +aws iam detach-user-policy --user-name <사용자명> --policy-arn <정책ARN> +# 그룹 기반 권한 관리 +aws iam create-group --group-name <그룹명> +aws iam attach-group-policy --group-name <그룹명> --policy-arn <정책ARN> +aws iam add-user-to-group --user-name <사용자명> --group-name <그룹명> + +# Azure: 역할 할당 변경 +az role assignment delete --assignee <사용자ID> --role <역할명> +az role assignment create --assignee <사용자ID> --role <역할명> --scope <범위> + +# GCP: IAM 바인딩 변경 +gcloud projects remove-iam-policy-binding --member=user:<이메일> --role=<역할> +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=<역할> +``` + +### CA-03: MFA(Multi-Factor Authentication) 설정 +**점검:** +```bash +# AWS: MFA 설정 여부 확인 +aws iam list-virtual-mfa-devices +aws iam list-mfa-devices --user-name <사용자명> +# MFA 미설정 사용자 확인 (credential report 활용) +aws iam get-credential-report --output text --query Content | base64 -d | grep -i "false" + +# Azure: MFA 상태 확인 +az ad user list --query "[].{UPN:userPrincipalName}" --output table +# Azure Portal: Azure AD > 보안 > MFA 에서 확인 + +# GCP: 2단계 인증은 Google Workspace Admin Console에서 확인 +``` +**조치:** +```bash +# AWS: 가상 MFA 디바이스 생성 및 활성화 +aws iam create-virtual-mfa-device --virtual-mfa-device-name <디바이스명> --outfile QRCode.png --bootstrap-method QRCodePNG +aws iam enable-mfa-device --user-name <사용자명> --serial-number --authentication-code1 <코드1> --authentication-code2 <코드2> + +# Azure: 조건부 액세스 정책으로 MFA 강제 (Azure Portal에서 설정) +# Azure AD > 보안 > 조건부 액세스 > 새 정책 > MFA 필수 + +# GCP: Google Workspace Admin Console에서 2단계 인증 강제 +``` + +### CA-04: 클라우드 계정 비밀번호 정책 관리 +**점검:** +```bash +# AWS: 비밀번호 정책 확인 +aws iam get-account-password-policy + +# Azure: 비밀번호 정책 확인 (Azure AD) +az ad group list --output table +# Azure Portal: Azure AD > 보안 > 인증 방법 > 비밀번호 보호 +``` +**조치:** +```bash +# AWS: 비밀번호 정책 설정 +aws iam update-account-password-policy \ + --minimum-password-length 8 \ + --require-symbols \ + --require-numbers \ + --require-uppercase-characters \ + --require-lowercase-characters \ + --max-password-age 90 \ + --password-reuse-prevention 24 \ + --allow-users-to-change-password + +# Azure: Azure AD Portal에서 비밀번호 정책 설정 +# Azure AD > 보안 > 인증 방법 > 비밀번호 보호 > 사용자 지정 금지 비밀번호 목록 +``` + +## 2. 권한 관리 + +### CA-05: 인스턴스 서비스 정책 관리 +**점검:** +```bash +# AWS: EC2 관련 IAM 정책 확인 +aws iam list-policies --query "Policies[?contains(PolicyName,'EC2')]" --output table +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,IamInstanceProfile]" --output table + +# Azure: VM 관련 역할 확인 +az vm list --output table +az role assignment list --query "[?contains(scope,'Microsoft.Compute')]" --output table + +# GCP: Compute Engine IAM 확인 +gcloud compute instances list +``` +**조치:** +```bash +# AWS: 인스턴스 관련 권한 최소화 +# 전용 IAM 역할 생성 후 인스턴스에 할당 +aws iam create-role --role-name <역할명> --assume-role-policy-document file://trust-policy.json +aws iam attach-role-policy --role-name <역할명> --policy-arn <정책ARN> +aws ec2 associate-iam-instance-profile --instance-id <인스턴스ID> --iam-instance-profile Name=<프로필명> + +# Azure: 리소스 그룹 단위 역할 할당 +az role assignment create --assignee <사용자ID> --role "Virtual Machine Contributor" --scope /subscriptions/<구독ID>/resourceGroups/<리소스그룹> + +# GCP: 커스텀 역할 적용 +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=roles/compute.instanceAdmin +``` + +### CA-06: 네트워크 서비스 정책 관리 +**점검:** +```bash +# AWS: VPC/네트워크 관련 정책 확인 +aws ec2 describe-vpcs --output table +aws ec2 describe-security-groups --output table + +# Azure: NSG 확인 +az network nsg list --output table +az network nsg rule list --nsg-name --resource-group <리소스그룹> --output table + +# GCP: 방화벽 규칙 확인 +gcloud compute firewall-rules list +``` +**조치:** +```bash +# AWS: 보안 그룹 규칙 관리 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr <관리자IP>/32 + +# Azure: NSG 규칙 관리 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> +az network nsg rule create --nsg-name --resource-group --name <규칙명> --priority 100 --access Allow --source-address-prefixes --destination-port-ranges 22 + +# GCP: 방화벽 규칙 관리 +gcloud compute firewall-rules delete <규칙명> +gcloud compute firewall-rules create <규칙명> --allow tcp:22 --source-ranges=/32 +``` + +## 3. 가상 리소스 관리 + +### CA-07: VPC 네트워크 서브넷 관리 +**점검:** +```bash +# AWS: 서브넷 구성 확인 (Public/Private 분리 여부) +aws ec2 describe-subnets --output table +aws ec2 describe-route-tables --output table +aws ec2 describe-internet-gateways --output table +aws ec2 describe-nat-gateways --output table + +# Azure: 가상 네트워크 서브넷 확인 +az network vnet list --output table +az network vnet subnet list --vnet-name --resource-group --output table + +# GCP: 서브넷 확인 +gcloud compute networks subnets list +``` +**조치:** +```bash +# Public 서브넷: 인터넷 게이트웨이 할당 +# Private 서브넷: NAT 게이트웨이 할당 +# 서브넷별 네트워크 리소스 별도 설정 + +# AWS: NAT 게이트웨이 생성 (Private 서브넷용) +aws ec2 create-nat-gateway --subnet-id --allocation-id + +# Azure: Private 서브넷에 NSG 적용 +az network vnet subnet update --vnet-name --name <서브넷명> --resource-group --network-security-group +``` + +### CA-08: 가상 네트워크 리소스 관리 +**점검:** +```bash +# AWS: 공인 IP 할당 인스턴스 확인 +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress]" --output table + +# Azure: 공인 IP 확인 +az network public-ip list --output table +az vm list-ip-addresses --output table + +# GCP: 외부 IP 확인 +gcloud compute instances list --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)" +``` +**조치:** +```bash +# AWS: 불필요 공인 IP 해제 +aws ec2 disassociate-address --association-id <연결ID> +aws ec2 release-address --allocation-id <할당ID> + +# Azure: 공인 IP 해제 +az network nic ip-config update --resource-group --nic-name --name --remove publicIpAddress + +# GCP: 외부 IP 제거 +gcloud compute instances delete-access-config <인스턴스명> --access-config-name "External NAT" +``` + +### CA-09: 접근 제어 설정 관리 +**점검:** +```bash +# AWS: 보안 그룹 규칙 확인 (0.0.0.0/0 허용 여부) +aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,Ingress:IpPermissions}" --output json +# 0.0.0.0/0 허용 규칙 필터링 +aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" --output table + +# Azure: NSG 규칙 중 Any 허용 확인 +az network nsg list --query "[].{Name:name,Rules:securityRules[?sourceAddressPrefix=='*']}" --output json + +# GCP: 0.0.0.0/0 허용 방화벽 규칙 확인 +gcloud compute firewall-rules list --filter="sourceRanges=0.0.0.0/0" +``` +**조치:** +```bash +# AWS: 불필요한 0.0.0.0/0 규칙 제거 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port <포트> --cidr 0.0.0.0/0 + +# Azure: 불필요 규칙 삭제 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> + +# GCP: 불필요 방화벽 규칙 삭제 +gcloud compute firewall-rules delete <규칙명> + +# 공통: 관리자 IP 또는 특정 IP에서만 접속 허용 +``` + +### CA-10: 스토리지 리소스 퍼블릭 접근 관리 +**점검:** +```bash +# AWS: S3 버킷 퍼블릭 접근 확인 +aws s3api get-bucket-acl --bucket <버킷명> +aws s3api get-public-access-block --bucket <버킷명> +aws s3api get-bucket-policy --bucket <버킷명> + +# Azure: 스토리지 계정 공개 접근 확인 +az storage account list --query "[].{Name:name,PublicAccess:allowBlobPublicAccess}" --output table + +# GCP: 버킷 IAM 확인 +gsutil iam get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 퍼블릭 접근 차단 +aws s3api put-public-access-block --bucket <버킷명> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true + +# Azure: 스토리지 공개 접근 비활성화 +az storage account update --name <스토리지명> --resource-group --allow-blob-public-access false + +# GCP: 버킷에서 allUsers/allAuthenticatedUsers 제거 +gsutil iam ch -d allUsers gs://<버킷명> +gsutil iam ch -d allAuthenticatedUsers gs://<버킷명> +``` + +## 4. 운영 관리 + +### CA-11: 관계형 데이터베이스 암호화 설정 +**점검:** +```bash +# AWS: RDS 암호화 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Encrypted:StorageEncrypted}" --output table + +# Azure: SQL DB 암호화 확인 +az sql db tde show --server <서버명> --database --resource-group + +# GCP: Cloud SQL 암호화 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.dataDiskEncryptionConfiguration)" +``` +**조치:** +```bash +# AWS: RDS 암호화 활성화 (생성 시 또는 스냅샷 복원) +aws rds create-db-instance --db-instance-identifier --storage-encrypted --kms-key-id ... + +# Azure: TDE 활성화 +az sql db tde set --server <서버명> --database --resource-group --status Enabled + +# GCP: 기본적으로 저장 데이터 암호화 적용됨 (CMEK 설정 가능) +``` + +### CA-12: 통신 구간 암호화 설정 +**점검:** +```bash +# AWS: ELB/ALB SSL 인증서 확인 +aws elbv2 describe-listeners --load-balancer-arn --query "Listeners[*].{Port:Port,Protocol:Protocol,Certs:Certificates}" --output table + +# Azure: Application Gateway SSL 확인 +az network application-gateway ssl-cert list --gateway-name <게이트웨이명> --resource-group + +# 공통: TLS 버전 확인 +openssl s_client -connect <호스트>:443 -tls1_2 +``` +**조치:** +```bash +# 공통 권고사항: +# 서버 원격 접근 시 VPN, SSH 사용 +# TLS v1.2 이상 (TLS v1.3 권장) 사용 +# 블록 암호: SEED, ARIA, AES (키 128bits 이상) +# 공개키 암호: RSA (키 2048bits 이상) +# 해시: SHA-2 이상 +``` + +### CA-13: 클라우드 서비스 사용자 계정 로깅 설정 +**점검:** +```bash +# AWS: CloudTrail 설정 확인 +aws cloudtrail describe-trails --output table +aws cloudtrail get-trail-status --name <트레일명> + +# Azure: Activity Log 확인 +az monitor activity-log list --offset 1h --output table + +# GCP: Cloud Audit Logs 확인 +gcloud logging read "logName:cloudaudit.googleapis.com" --limit 10 +``` +**조치:** +```bash +# AWS: CloudTrail 활성화 +aws cloudtrail create-trail --name <트레일명> --s3-bucket-name <버킷명> --is-multi-region-trail +aws cloudtrail start-logging --name <트레일명> + +# Azure: 진단 설정 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <리소스ID> --logs '[{"category":"AuditEvent","enabled":true}]' --storage-account <스토리지ID> + +# GCP: Audit Log 기본 활성화됨, 추가 설정 시 +gcloud projects get-iam-policy --format=json +``` + +### CA-14: 인스턴스 로깅 설정 +**점검:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 그룹 확인 +aws logs describe-log-groups --output table + +# Azure: VM 진단 설정 확인 +az vm diagnostics get-default-config + +# GCP: Ops Agent 설치 확인 +gcloud compute instances describe <인스턴스명> --format="value(metadata.items)" +``` +**조치:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 전송 +aws ssm send-command --instance-ids <인스턴스ID> --document-name "AWS-ConfigureAWSPackage" --parameters '{"action":["Install"],"name":["AmazonCloudWatchAgent"]}' + +# Azure: VM 진단 확장 설치 +az vm diagnostics set --resource-group --vm-name --settings <설정JSON> + +# GCP: Ops Agent 설치 +gcloud compute ssh <인스턴스명> -- 'curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh && sudo bash add-google-cloud-ops-agent-repo.sh --also-install' +``` + +### CA-15: 관계형 데이터베이스 로깅 설정 +**점검:** +```bash +# AWS: RDS 로깅 파라미터 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Logs:EnabledCloudwatchLogsExports}" --output table + +# Azure: SQL 감사 설정 확인 +az sql server audit-policy show --server <서버명> --resource-group + +# GCP: Cloud SQL 로그 플래그 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.databaseFlags)" +``` +**조치:** +```bash +# AWS: RDS 로그 내보내기 활성화 +aws rds modify-db-instance --db-instance-identifier --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}' + +# Azure: SQL 감사 활성화 +az sql server audit-policy update --server <서버명> --resource-group --state Enabled --storage-account <스토리지명> + +# GCP: Cloud SQL 감사 로그 활성화 +gcloud sql instances patch <인스턴스명> --database-flags=log_output=FILE,general_log=on,slow_query_log=on +``` + +### CA-16: 오브젝트 스토리지 버킷 로깅 설정 +**점검:** +```bash +# AWS: S3 서버 액세스 로깅 확인 +aws s3api get-bucket-logging --bucket <버킷명> + +# Azure: Blob Storage 진단 로그 확인 +az monitor diagnostic-settings list --resource <스토리지리소스ID> + +# GCP: 버킷 로깅 확인 +gsutil logging get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 서버 액세스 로깅 활성화 +aws s3api put-bucket-logging --bucket <버킷명> --bucket-logging-status '{"LoggingEnabled":{"TargetBucket":"<로그버킷>","TargetPrefix":"logs/"}}' + +# Azure: Blob Storage 진단 로그 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <스토리지리소스ID> --logs '[{"category":"StorageRead","enabled":true},{"category":"StorageWrite","enabled":true},{"category":"StorageDelete","enabled":true}]' + +# GCP: 버킷 로깅 활성화 +gsutil logging set on -b gs://<로그버킷> gs://<대상버킷> +``` + +### CA-17: 로그 보관 기간 설정 +**점검:** +```bash +# AWS: CloudWatch Logs 보관 기간 확인 +aws logs describe-log-groups --query "logGroups[*].{Name:logGroupName,Retention:retentionInDays}" --output table +# S3 수명 주기 정책 확인 +aws s3api get-bucket-lifecycle-configuration --bucket <버킷명> + +# Azure: 로그 보관 정책 확인 +az monitor diagnostic-settings list --resource <리소스ID> + +# GCP: 로그 버킷 보관 기간 확인 +gcloud logging buckets describe <버킷명> --location=global +``` +**조치:** +```bash +# AWS: CloudWatch Logs 보관 기간 설정 (예: 365일) +aws logs put-retention-policy --log-group-name <로그그룹명> --retention-in-days 365 + +# Azure: 진단 설정에서 보관 기간 설정 (일반적으로 Azure Portal에서 설정) + +# GCP: 로그 버킷 보관 기간 설정 +gcloud logging buckets update <버킷명> --location=global --retention-days=365 +``` + +### CA-18: 백업 사용 여부 +**점검:** +```bash +# AWS: 백업 설정 확인 +aws backup list-backup-plans --output table +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,BackupRetention:BackupRetentionPeriod}" --output table +aws ec2 describe-snapshots --owner-ids self --output table + +# Azure: 백업 항목 확인 +az backup item list --vault-name <볼트명> --resource-group --output table + +# GCP: 스냅샷 확인 +gcloud compute snapshots list +gcloud sql backups list --instance=<인스턴스명> +``` +**조치:** +```bash +# AWS: 자동 백업 설정 +aws backup create-backup-plan --backup-plan file://backup-plan.json +# RDS 백업 보관 기간 설정 +aws rds modify-db-instance --db-instance-identifier --backup-retention-period 7 + +# Azure: 백업 정책 설정 +az backup protection enable-for-vm --resource-group --vault-name <볼트명> --vm --policy-name <정책명> + +# GCP: 스냅샷 스케줄 생성 +gcloud compute resource-policies create snapshot-schedule <정책명> --region=<리전> --max-retention-days=14 --daily-schedule +``` + +### CA-19: 가상 리소스 이상징후 알림 설정 +**점검:** +```bash +# AWS: CloudWatch 알람 확인 +aws cloudwatch describe-alarms --output table + +# Azure: 경고 규칙 확인 +az monitor metrics alert list --output table + +# GCP: 알림 정책 확인 +gcloud alpha monitoring policies list +``` +**조치:** +```bash +# AWS: CloudWatch 알람 생성 (예: CPU 사용률) +aws cloudwatch put-metric-alarm --alarm-name "HighCPU" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions --dimensions Name=InstanceId,Value=<인스턴스ID> + +# Azure: 메트릭 경고 생성 +az monitor metrics alert create --name "HighCPU" --resource-group --scopes <리소스ID> --condition "avg Percentage CPU > 80" --action <액션그룹ID> + +# GCP: 알림 정책 생성 (gcloud 또는 Cloud Console에서 설정) +# Cloud Console > Monitoring > 알림 > 정책 만들기 > 조건 및 알림 채널(SMS, 이메일) 설정 +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/cii/database.md b/skills-ko/kesekit-fix-ko/scripts/cii/database.md new file mode 100644 index 0000000..5abb7fb --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/cii/database.md @@ -0,0 +1,649 @@ +# DBMS 점검 스크립트 (D-01 ~ D-26) + +## 1. 계정 관리 + +### D-01: 기본 계정의 비밀번호, 정책 등을 변경하여 사용 +**점검:** +```sql +-- Oracle: 기본 계정 사용 여부 및 정책 확인 +SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE account_status = 'OPEN'; + +-- MSSQL: sa 계정 확인 +SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa'; + +-- MySQL: root 계정 확인 +SELECT User, Host FROM mysql.user; +SHOW VARIABLES LIKE 'validate_password%'; + +-- PostgreSQL: 역할 확인 +SELECT rolname, rolsuper FROM pg_roles; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; + +-- Cubrid +SELECT name, password FROM db_user; +SELECT * FROM db_password; +``` +**조치:** +```sql +-- Oracle: 비밀번호 변경 / 잠금 +ALTER USER <기본계정명> IDENTIFIED BY <신규비밀번호>; +ALTER USER <기본계정명> ACCOUNT LOCK; + +-- MSSQL: sa 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; + +-- MySQL 5.7 +UPDATE user SET authentication_string = PASSWORD('신규비밀번호') WHERE User = 'root'; +FLUSH PRIVILEGES; +-- MySQL 8.0 +ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; +FLUSH PRIVILEGES; + +-- Altibase +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- Tibero +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- PostgreSQL +ALTER USER postgres WITH PASSWORD '신규비밀번호'; + +-- Cubrid +ALTER USER "사용자계정명" PASSWORD '신규비밀번호'; +``` + +### D-02: 불필요 계정 제거 또는 잠금설정 +**점검:** +```sql +-- Oracle +SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; + +-- MSSQL +SELECT name, is_disabled FROM sys.server_principals; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM all_users; +SELECT * FROM dba_users; + +-- PostgreSQL +SELECT * FROM pg_roles; +-- 또는 명령어: \du + +-- Cubrid +SELECT name, password FROM db_user; +``` +**조치:** +```sql +-- Oracle +DROP USER [삭제할 계정]; + +-- MSSQL +EXEC sp_droplogin '삭제할 계정'; + +-- MySQL +DROP USER '삭제할 계정'@'호스트명'; +FLUSH PRIVILEGES; + +-- Altibase / Tibero +DROP USER user_name CASCADE; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; + +-- Cubrid +DROP USER [삭제할 계정]; +``` + +### D-03: 비밀번호 사용 기간 및 복잡도 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES WHERE resource_name LIKE 'PASSWORD%'; + +-- MySQL +SHOW VARIABLES LIKE 'validate_password%'; +SHOW VARIABLES LIKE 'default_password_lifetime'; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle: 비밀번호 정책 설정 +ALTER PROFILE <프로파일명> LIMIT + FAILED_LOGIN_ATTEMPTS 3 + PASSWORD_LIFE_TIME 30 + PASSWORD_REUSE_TIME 30 + PASSWORD_VERIFY_FUNCTION verify_function + PASSWORD_GRACE_TIME 5; +ALTER USER <계정명> PROFILE <프로파일명>; + +-- MSSQL: 암호 만료 강제 적용 (SSMS GUI) +-- 보안 > 로그인 > 속성 > "암호 만료 강제 적용" 설정 +-- OS 암호 정책: [로컬 보안 정책] > [암호 정책] > 최대 암호 사용 기간: 60일 + +-- MySQL: 복잡도 정책 +INSTALL COMPONENT 'file://component_validate_password'; +SET GLOBAL validate_password.policy = 'MEDIUM'; +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.mixed_case_count = 1; +SET GLOBAL validate_password.number_count = 1; +SET GLOBAL validate_password.special_char_count = 1; +-- LifeTime 정책 +SET GLOBAL default_password_lifetime = 90; +ALTER USER '<계정명>'@'<호스트>' PASSWORD EXPIRE INTERVAL 91 DAY; + +-- Altibase +ALTER USER 계정명 LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7); + +-- Tibero +CREATE PROFILE prof LIMIT + failed_login_attempts 3 + password_lock_time 1/1440 + password_life_time 90 + password_reuse_time unlimited + password_reuse_max 10 + password_grace_time 10 + password_verify_function verify_function; +``` + +### D-04: 관리자 권한을 필요한 계정에만 허용 +**점검:** +```sql +-- Oracle: SYSDBA 권한 점검 +SELECT username FROM v$pwfile_users WHERE username NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +) AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +-- Admin 부적합 계정 점검 +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ( + 'SYS','SYSTEM','AQ_ADMINISTRATOR_ROLE','DBA','DSYS','BACSYS','SCHEDULER_ADMIN','MSYS' +) AND admin_option = 'YES' AND grantee NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +); + +-- MySQL: SUPER 권한 확인 +SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; + +-- PostgreSQL +SELECT * FROM pg_user; +SELECT username, usesuper FROM pg_shadow; + +-- Cubrid: DBA 권한 사용자 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +REVOKE <권한> FROM <계정명>; +GRANT <권한> ON <테이블명> TO <계정명>; + +-- MSSQL: sysadmin 역할에서 삭제 +EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; + +-- MySQL: SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; + +-- PostgreSQL: 불필요 관리자 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; + +-- Cubrid: DBA 권한 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +``` + +### D-05: 비밀번호 재사용 제약 설정 +**점검:** +```sql +-- Oracle +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' + AND limit IN ('UNLIMITED', 'NULL'); +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' + AND limit IN ('UNLIMITED', 'NULL'); + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; + +-- Altibase +ALTER USER [계정명] LIMIT (PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 10); + +-- Tibero +CREATE PROFILE prof LIMIT + password_reuse_time unlimited + password_reuse_max 10; +``` + +### D-06: DB 사용자 계정 개별 부여 +**점검:** +```sql +-- Oracle +SELECT username FROM dba_users ORDER BY username; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL +SELECT * FROM pg_shadow; + +-- Altibase +SELECT * FROM system_.sys_users_; +``` +**조치:** +```sql +-- Oracle: 공용 계정 삭제 후 개별 계정 생성 +DROP USER '공용계정'; +CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +GRANT connect, resource TO [계정명]; + +-- MSSQL +EXEC sp_droplogin '공용계정'; +CREATE LOGIN '생성계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성계정' FOR LOGIN '생성계정'; + +-- MySQL +DROP USER <계정명>@<호스트>; +CREATE USER '<계정명>'@'<호스트>' IDENTIFIED BY '비밀번호'; +GRANT SELECT, INSERT ON DB이름.테이블명 TO '<계정명>'@'<호스트>'; +FLUSH PRIVILEGES; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' <권한명>; +``` + +### D-07: root 권한으로 서비스 구동 제한 +**점검:** +```bash +# Oracle +ps -ef | grep pmon +ps -ef | grep tnslsnr + +# MySQL +ps -ef | grep mysqld +cat /etc/my.cnf | grep user + +# Altibase +ps -ef | grep altibase | grep -v grep +``` +**조치:** +```bash +# Oracle: oracle 계정으로 전환 후 구동 +su - oracle +lsnrctl start +sqlplus / as sysdba +startup + +# MySQL: my.cnf [mysqld] 섹션에 user 지정 +# vi /etc/my.cnf +# [mysqld] +# user = mysql + +# Altibase: 전용 계정으로 소유자 변경 +chown -R [계정명]:[그룹명] '[Altibase 디렉터리]' +``` + +### D-08: 안전한 암호화 알고리즘 사용 +**점검:** +```sql +-- Oracle: 암호화 알고리즘 확인 +SELECT * FROM v$parameter WHERE name LIKE '%crypto%'; + +-- MySQL +SHOW VARIABLES LIKE '%ssl%'; +``` +**조치:** +```sql +-- 안전한 암호화 알고리즘(AES-256, SHA-256 등) 사용 설정 +-- DBMS별 암호화 설정은 벤더 문서 참조 +``` + +### D-09: 로그인 실패 시 잠금정책 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES + WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS'; + +-- MySQL +SHOW VARIABLES LIKE 'max_connect_errors'; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE <프로파일명> LIMIT FAILED_LOGIN_ATTEMPTS 5; + +-- MySQL +SET GLOBAL max_connect_errors = 5; +``` + +## 2. 접근 관리 + +### D-10: 원격에서 DB 서버 접속 제한 +**점검:** +```sql +-- Oracle: listener.ora에서 접근 IP 제한 확인 +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL: pg_hba.conf 확인 +``` +**조치:** +```sql +-- MySQL: 원격 접속 제한 +-- 특정 IP에서만 접속 가능하도록 계정 생성 +CREATE USER '<계정명>'@'<허용IP>' IDENTIFIED BY '비밀번호'; +-- 모든 호스트 접근 가능 계정 삭제 +DROP USER '<계정명>'@'%'; +FLUSH PRIVILEGES; +``` +```bash +# Oracle: $ORACLE_HOME/network/admin/sqlnet.ora +# tcp.validnode_checking = YES +# tcp.invited_nodes = (허용IP1, 허용IP2) + +# PostgreSQL: pg_hba.conf에서 접근 IP 제한 +# host all all <허용IP>/32 md5 +``` + +### D-11: 시스템 테이블 접근 제한 +**점검:** +```sql +-- Oracle: DBA 이외 시스템 테이블 접근 권한 확인 +SELECT grantee, privilege, table_name FROM dba_tab_privs + WHERE table_name IN (SELECT table_name FROM dba_tables WHERE owner = 'SYS'); +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.<테이블명> FROM <계정명>; +``` + +### D-12: 리스너 비밀번호 설정 +**점검:** +```bash +# Oracle: listener.ora 파일 확인 +cat $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: 리스너 비밀번호 설정 +lsnrctl +LSNRCTL> set current_listener <리스너명> +LSNRCTL> change_password +# Old password: (빈칸) +# New password: <비밀번호> +LSNRCTL> save_config +``` + +### D-13: 불필요한 ODBC/OLE-DB 데이터 소스 제거 +**점검:** +```powershell +# Windows: ODBC 데이터 소스 확인 +Get-OdbcDsn +``` +**조치:** +```powershell +# Windows: 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType "System" +``` + +### D-14: 주요 파일 접근 권한 설정 +**점검:** +```bash +# Oracle +ls -la $ORACLE_HOME/dbs/*.ora +ls -la $ORACLE_HOME/network/admin/*.ora + +# MySQL +ls -la /etc/my.cnf +ls -la /var/lib/mysql/ + +# PostgreSQL +ls -la /var/lib/pgsql/data/pg_hba.conf +ls -la /var/lib/pgsql/data/postgresql.conf +``` +**조치:** +```bash +# Oracle: 640 이하 권한 설정 +chmod 640 $ORACLE_HOME/dbs/*.ora +chmod 640 $ORACLE_HOME/network/admin/*.ora +chown oracle:dba $ORACLE_HOME/dbs/*.ora + +# MySQL +chmod 640 /etc/my.cnf +chown mysql:mysql /etc/my.cnf + +# PostgreSQL +chmod 600 /var/lib/pgsql/data/pg_hba.conf +chown postgres:postgres /var/lib/pgsql/data/pg_hba.conf +``` + +### D-15: 리스너 로그 및 trace 파일 변경 제한 +**점검:** +```bash +# Oracle: listener.ora에서 ADMIN_RESTRICTIONS 확인 +grep ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: listener.ora에 추가 +# ADMIN_RESTRICTIONS_<리스너명> = ON +``` + +### D-16: Windows 인증 모드 사용 +**점검:** +```sql +-- MSSQL: 인증 모드 확인 +SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); +-- 1: Windows 인증 모드, 0: 혼합 모드 +``` +**조치:** +``` +-- MSSQL: SSMS > 서버 속성 > 보안 > "Windows 인증 모드" 선택 +``` + +## 3. 옵션 관리 + +### D-17: Audit Table 접근 제한 +**점검:** +```sql +-- Oracle: Audit 테이블 접근 권한 확인 +SELECT grantee, privilege FROM dba_tab_privs WHERE table_name LIKE '%AUDIT%'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.AUD$ FROM <계정명>; +``` + +### D-18: DBA 계정 Role이 Public으로 설정되지 않도록 조정 +**점검:** +```sql +-- Oracle: PUBLIC에 부여된 권한 확인 +SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'PUBLIC'; +``` +**조치:** +```sql +-- Oracle: PUBLIC에서 불필요 Role/권한 회수 +REVOKE FROM PUBLIC; +REVOKE EXECUTE ON <패키지명> FROM PUBLIC; +``` + +### D-19: OS_ROLES 등 FALSE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER OS_ROLES; +SHOW PARAMETER REMOTE_OS_AUTHENTICATION; +SHOW PARAMETER REMOTE_OS_ROLES; +``` +**조치:** +```sql +-- Oracle: init.ora 또는 spfile 수정 +ALTER SYSTEM SET OS_ROLES = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_AUTHENTICATION = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE; +-- DB 재시작 필요 +``` + +### D-20: 인가되지 않은 Object Owner 제한 +**점검:** +```sql +-- Oracle: Object Owner 확인 +SELECT owner, object_type, count(*) FROM dba_objects GROUP BY owner, object_type ORDER BY owner; +``` +**조치:** +```sql +-- 불필요한 Object Owner의 객체를 적절한 스키마로 이전 또는 삭제 +``` + +### D-21: 인가되지 않은 GRANT OPTION 사용 제한 +**점검:** +```sql +-- Oracle +SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE admin_option = 'YES'; +SELECT grantee, table_name, privilege, grantable FROM dba_tab_privs WHERE grantable = 'YES'; +``` +**조치:** +```sql +-- Oracle: ADMIN OPTION 제거 후 재부여 +REVOKE <권한> FROM <계정명>; +GRANT <권한> TO <계정명>; +``` + +### D-22: 자원 제한 기능 TRUE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER RESOURCE_LIMIT; +``` +**조치:** +```sql +-- Oracle +ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +``` + +### D-23: xp_cmdshell 사용 제한 +**점검:** +```sql +-- MSSQL +EXEC sp_configure 'xp_cmdshell'; +``` +**조치:** +```sql +-- MSSQL: xp_cmdshell 비활성화 +EXEC sp_configure 'show advanced options', 1; +RECONFIGURE; +EXEC sp_configure 'xp_cmdshell', 0; +RECONFIGURE; +``` + +### D-24: Registry Procedure 권한 제한 +**점검:** +```sql +-- MSSQL: 레지스트리 관련 확장 저장 프로시저 확인 +SELECT name FROM sys.objects WHERE name LIKE 'xp_reg%'; +``` +**조치:** +```sql +-- MSSQL: public에서 실행 권한 제거 +DENY EXECUTE ON xp_regread TO public; +DENY EXECUTE ON xp_regwrite TO public; +DENY EXECUTE ON xp_regdeletekey TO public; +DENY EXECUTE ON xp_regdeletevalue TO public; +DENY EXECUTE ON xp_regenumvalues TO public; +``` + +## 4. 패치 관리 + +### D-25: 주기적 보안 패치 및 벤더 권고 사항 적용 +**점검:** +```sql +-- Oracle: 버전 확인 +SELECT * FROM v$version; + +-- MSSQL: 버전 확인 +SELECT @@VERSION; + +-- MySQL: 버전 확인 +SELECT VERSION(); + +-- PostgreSQL: 버전 확인 +SELECT version(); +``` +**조치:** +``` +-- 공통: 벤더 보안 패치 사이트에서 최신 패치 확인 및 적용 +-- Oracle: https://www.oracle.com/security-alerts/ +-- MSSQL: https://learn.microsoft.com/ko-kr/sql/ +-- MySQL: https://dev.mysql.com/downloads/ +-- PostgreSQL: https://www.postgresql.org/support/security/ +``` + +### D-26: 감사 기록 정책 설정 +**점검:** +```sql +-- Oracle: Audit 설정 확인 +SHOW PARAMETER AUDIT_TRAIL; +SELECT * FROM dba_stmt_audit_opts; +SELECT * FROM dba_priv_audit_opts; + +-- MSSQL: 감사 설정 확인 +SELECT * FROM sys.server_audits; + +-- MySQL: 로그 설정 확인 +SHOW VARIABLES LIKE 'general_log%'; +SHOW VARIABLES LIKE 'log_bin%'; + +-- PostgreSQL +SHOW log_statement; +SHOW log_connections; +SHOW log_disconnections; +``` +**조치:** +```sql +-- Oracle: Audit 활성화 +ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE=SPFILE; +AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS; +AUDIT CREATE SESSION; + +-- MySQL: 일반 로그 활성화 +SET GLOBAL general_log = 'ON'; +SET GLOBAL general_log_file = '/var/log/mysql/general.log'; + +-- PostgreSQL: postgresql.conf +-- log_statement = 'all' +-- log_connections = on +-- log_disconnections = on +-- logging_collector = on +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/cii/network.md b/skills-ko/kesekit-fix-ko/scripts/cii/network.md new file mode 100644 index 0000000..9d0b68d --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/cii/network.md @@ -0,0 +1,892 @@ +# 네트워크 장비 점검 스크립트 (N-01 ~ N-38) + +## 1. 계정 관리 + +### N-01: 비밀번호 설정 +**점검:** +``` +! Cisco IOS +Router> enable +Router# show running-config +! VTY, 콘솔, AUX 포트의 login/password 설정 확인 + +! Juniper Junos +user@host> configure +user@host# show + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - enable 비밀번호 +Router(config)# enable secret <비밀번호> +! VTY 비밀번호 +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! 콘솔 비밀번호 +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! AUX 비밀번호 +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> + +! Radware Alteon +Main# /cfg/sys/access/user/admpw +Main# apply +Main# save + +! Juniper Junos +user@host# set system root-authentication plain-test-passwd + +! Piolink PLOS +(config)# password +``` + +### N-02: 비밀번호 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! security passwords min-length 설정 확인 +``` +**조치:** +``` +! Cisco IOS - 비밀번호 최소 길이 설정 +Router(config)# security passwords min-length <길이> +``` + +### N-03: 암호화된 비밀번호 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! enable secret / username secret / service password-encryption 확인 + +! Juniper Junos +user@host# show +! encrypted-password 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# enable secret <비밀번호> +Router(config)# username <사용자> secret <비밀번호> +Router(config)# service password-encryption + +! Juniper Junos +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> +``` + +### N-04: 계정 잠금 임계값 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show login + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! Cisco IOS +Router(config)# login block-for <잠금시간> attempts <실패횟수> within <허용시간> + +! Juniper Junos +[edit system login retry-options] +user@host# set tries-before-disconnect <실패횟수> +user@host# set lockout-period <잠금시간> +``` + +### N-05: 사용자/명령어별 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show privilege + +! Juniper Junos +! [edit system login] 에서 superuser, read-only 클래스 분리 확인 +``` +**조치:** +``` +! Cisco IOS - 사용자별 권한 수준 지정 +Router(config)# username [ID] privilege [1-15] secret [PASS] +! 명령어별 권한 수준 지정 (중요 명령어 레벨 15 적용) +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging + +! Juniper Junos +[edit system login] +login { + class class-name { + allow-commands "regular-expression"; + deny-commands "regular-expression"; + idle-timeout minutes; + permissions [ permissions ]; + } +} + +! Piolink PLOS +! 슈퍼 유저(root)와 일반 유저로 권한 분리 관리 +``` + +## 2. 접근 관리 + +### N-06: VTY 접근(ACL) 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list 및 access-class 설정 확인 + +! Juniper Junos +user@host# show +! firewall filter + 루프백 인터페이스 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty 0 4 +Router(config-line)# access-class in + +! Radware Alteon +# cfg > sys > access > mgmt > add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply > save + +! Juniper Junos +user@host# set policy-options prefix-list +user@host# edit firewall family inet filter +user@host# edit term +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set from protocol tcp +user@host# set from destination-port ssh +user@host# set then discard +! 기본 허용 종료 +user@host# set term then accept +! 루프백에 적용 +user@host# set interfaces lo0 unit 0 family inet filter input + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-07: Session Timeout 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! exec-timeout 설정 확인 +``` +**조치:** +``` +! Cisco IOS (10분 이하 권고, 예: 5분) +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 + +! Radware Alteon +# cfg > sys > idle <분> > apply > save + +! Juniper Junos +[edit login] +user@host# set class <클래스> idle-timeout <분> + +! Piolink PLOS +(config)# terminal timeout <분> +``` + +### N-08: VTY 접속 시 안전한 프로토콜 사용 +**점검:** +``` +! Cisco IOS +Router# show ip ssh +Router# show version + +! Juniper Junos +user@host# set ssh +``` +**조치:** +``` +! Cisco IOS - SSH 설정 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +Router(config)# ip ssh version 2 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh authentication-retries <횟수> +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh + +! Radware Alteon +# cfg > /sys/sshd ena > /sys/sshd on > apply > save + +! Juniper Junos +root# set system services ssh +root# delete system services telnet +root# commit + +! Piolink PLOS +(config-management-access)# ssh status enable +(config-management-access)# telnet status disable +(config-management-access)# apply +``` + +### N-09: 불필요한 보조 입출력 포트 사용 금지 +**점검:** +``` +! Cisco IOS +Router# show running +! 불필요 포트 Up/Down 확인 +``` +**조치:** +``` +! Cisco IOS - AUX 포트 차단 +Router(config)# line aux 0 +Router(config-line)# no password +Router(config-line)# transport input none +Router(config-line)# no exec +Router(config-line)# exec-timeout 0 1 + +! Juniper Junos +[edit system ports] +root# set auxiliary disable +root# commit +``` + +### N-10: 로그인 시 경고 메시지 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! banner 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# banner motd # <경고 문구> # +Router(config)# banner login # <경고 문구> # +Router(config)# banner exec # <경고 문구> # + +! Radware Alteon +# cfg > sys > banner > apply > save + +! Juniper Junos +[edit system login] +message "경고 문구" +``` + +### N-11: 원격로그 서버 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging trap informational +Router(config)# logging +Router(config)# logging facility local6 +Router(config)# logging source-interface serial 0 + +! Radware Alteon +# cfg > sys > /syslog/host > apply > save + +! Juniper Junos +user@host# edit system syslog +user@host# set system syslog file message any error +user@host# set system syslog host any any +user@host# set archive files 5 sizes 5m world-readable + +! Piolink PLOS +# logging server enable +# logging server +``` + +## 3. 패치 관리 + +### N-12: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +``` +! Cisco IOS +Router# show version + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! 공통 +! 1. 하드웨어/소프트웨어/EOL/패치 현황 문서화 +! 2. 벤더 보안 패치 및 권고사항 입수 +! 3. 취약점 영향도/발생 가능성 분석 후 패치 우선순위 결정 +! 4. 테스트베드(GNS3 등)에서 패치 검증 +! 5. 패치 적용 전 이미지/설정 백업 후 적용 +! 벤더별 패치 사이트: +! Cisco: https://software.cisco.com +! Juniper: https://support.juniper.net/support/downloads +! 공통: https://www.krcert.or.kr +``` + +## 4. 로그 관리 + +### N-13: 로깅 버퍼 크기 설정 +**점검:** +``` +! Cisco IOS +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging buffered 16000 +Router(config)# logging buffered informational + +! Piolink PLOS +(config)# logging buffer +(config)# logging priority +``` + +### N-14: 정책에 따른 로깅 설정 +**점검:** +``` +! Cisco IOS +Router# show logging + +! Juniper Junos +user@host# show log messages +``` +**조치:** +``` +! 공통 - 6가지 로깅 방법 활용 +! 1. 콘솔 로깅: 콘솔 포트에서만 확인 +! 2. Buffered 로깅: RAM에 저장 (버퍼 가득 차면 오래된 로그 대체) +! 3. Terminal 로깅: terminal monitor로 VTY에 전송 +! 4. Syslog: 외부 syslog 서버에 저장 +! 5. SNMP traps: 외부 SNMP 서버에 전송 +! 6. ACL 침입 로깅: ACL 룰에 log/log-input 추가 +``` + +### N-15: NTP 및 시각 동기화 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ntp server 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# ntp server + +! Radware Alteon +# cfg > /sys/ntp > on +# prisrvr +# intrval <동기화주기> +# tzone +9:00 +# apply > save + +! Juniper Junos +[edit system ntp] +user@host# set server +user@host# set boot-server +``` + +### N-16: Timestamp 로그 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service timestamps 확인 +``` +**조치:** +``` +! Cisco IOS - UTC 시간 밀리초 단위 +Router(config)# service timestamps log datetime msec show-timezone +! 로컬 시간(KST) 밀리초 단위 +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone +``` + +## 5. 기능 관리 + +### N-17: SNMP 서비스 확인 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show snmp + +! Juniper Junos +user@host# show snmp + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - SNMP 비활성화 +Router(config)# no snmp-server + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: d + +! Juniper Junos +user@host# no set snmp community public +``` + +### N-18: SNMP Community String 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community 설정 확인 (public/private 사용 여부) +``` +**조치:** +``` +! Cisco IOS +Router(config)# snmp-server community <복잡한String> + +! Radware Alteon +# cfg/sys/ssnmp +# rcomm <복잡한String> +# wcomm <복잡한String> +# apply > save + +! Juniper Junos +user@host# set snmp community <복잡한String> authorization read-only + +! Piolink PLOS +switch(config-snmp)# community <복잡한String> +switch(config-snmp)# status enable +switch(config-snmp)# apply +``` + +### N-19: SNMP ACL 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community + ACL 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + +! Juniper Junos +[edit snmp] +user@host# edit client-list +user@host# set default restrict +user@host# set +user@host# up +user@host# edit community +user@host# set client-list-name + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-20: SNMP Community 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community RO/RW 확인 +``` +**조치:** +``` +! Cisco IOS - RO 권한만 설정 +Router(config)# snmp-server community RO + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: r +>> Main# apply + +! Juniper Junos +[edit snmp] +user@host# delete community +user@host# set community authorization read-only +! SNMPv3 그룹 RW 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <모델> security-level <레벨> write-view + +! Piolink PLOS +switch(config-snmp)# policy read-only +switch(config-snmp)# apply +``` + +### N-21: TFTP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tftp +``` + +### N-22: Spoofing 방지 필터링 적용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list deny 설정 확인 + +! Juniper Junos +! Configure/Apply Firewall Filters 확인 +``` +**조치:** +``` +! Cisco IOS - Anti-Spoofing ACL (Extended ACL 100-199) +Router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +Router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +Router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +Router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any +Router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +Router(config)# access-list permit ip any any +Router(config)# interface serial <인터페이스> +Router(config-if)# ip access-group in + +! Juniper Junos +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +[edit firewall family inet filter ] +user@host# set term then accept +user@host# set interfaces <인터페이스> unit <유닛> family inet filter input +``` + +### N-23: DDoS 공격 방어 설정 또는 DDoS 장비 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show configuration +``` +**조치:** +``` +! 공통 - DDoS 방어 3가지 방법 +! 1. ACL: 스푸핑 방지 필터링 사전 적용, 공격 유형별 IP/프로토콜/포트 임시 차단 +! 2. Rate Limiting: UDP, ICMP, TCP SYN 패킷 대역폭 제한 +! 3. TCP Intercept: SYN Flooding 방어 +! - Intercept 모드: 라우터가 SYN-ACK 대신 응답 +! - Watch 모드: SYN 전달 후 30초 미완료 시 RST 전송 +``` + +### N-24: 사용하지 않는 인터페이스 비활성화 +**점검:** +``` +! Cisco IOS +Router# show interface +! Administratively down 확인 + +! Juniper Junos +user@host# show interface terse +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# shutdown + +! Radware Alteon +>> Main# /cfg/port <포트>/dis +>> Main# apply + +! Juniper Junos +[edit interfaces] +user@host# set <인터페이스> disable + +! Piolink PLOS +switch(config)# port <포트> status disable +switch(config)# apply +``` + +### N-25: TCP Keepalive 서비스 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service tcp-keepalives 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# service tcp-keepalives-in +Router(config)# service tcp-keepalives-out +``` + +### N-26: Finger 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip finger + +! Juniper Junos +[edit system services] +user@host# delete finger +user@host# commit +``` + +### N-27: 웹 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip http server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip http server +Router(config)# no ip http secure-server + +! Radware Alteon +>> Main# /cfg/sys/access/https/https dis +>> Main# apply + +! Juniper Junos +user@host# delete system services web-management + +! Piolink PLOS +(config-management-access)# http status disable +(config-management-access)# https status disable +``` + +### N-28: TCP/UDP Small 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +``` + +### N-29: Bootp 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip bootp server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip bootp server +! DHCP 유지하고 BOOTP만 차단 시 +Router(config)# ip dhcp bootp ignore + +! Radware Alteon +>> Main# /cfg/sys/bootp dis +>> Main# apply + +! Juniper Junos +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스> server <주소> +``` + +### N-30: CDP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show cdp +``` +**조치:** +``` +! Cisco IOS - 전체 비활성화 +Router(config)# no cdp run +! 특정 인터페이스 비활성화 +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +``` + +### N-31: Directed-broadcast 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast + +! Radware Alteon +# cfg/l3/frwd > dirbr disable > apply > save + +! Passport +# config vlan ip directed-broadcast > disable +``` + +### N-32: Source Routing 차단 +**점검:** +``` +! Cisco IOS / Juniper Junos +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip source-route + +! Juniper Junos +user@host# set chassis no-source-route +``` + +### N-33: Proxy ARP 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp + +! Juniper Junos +[edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp +``` + +### N-34: ICMP unreachable, redirect 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! 각 인터페이스 no ip unreachables / no ip redirects 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects + +! Juniper Junos - 전체 장비 +[edit system] +user@host# set no-redirects +! 특정 인터페이스 +[edit interfaces] +user@host# set <인터페이스> unit <유닛> family <패밀리> no-redirects +``` + +### N-35: identd 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip identd +``` + +### N-36: Domain Lookup 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip domain lookup +``` + +### N-37: PAD 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service pad +``` + +### N-38: mask-reply 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show ip interface +! "ICMP mask replies are never sent" 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/cii/pc.md b/skills-ko/kesekit-fix-ko/scripts/cii/pc.md new file mode 100644 index 0000000..167c9ca --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/cii/pc.md @@ -0,0 +1,348 @@ +# PC 점검 스크립트 (PC-01 ~ PC-18) + +## 1. 계정 관리 + +### PC-01: 비밀번호의 주기적 변경 +**점검:** +```powershell +# 최대 암호 사용 기간 확인 +net accounts | findstr "최대" +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol.cfg +findstr "MaximumPasswordAge" C:\secpol.cfg +findstr "MinimumPasswordAge" C:\secpol.cfg +findstr "PasswordHistorySize" C:\secpol.cfg +``` +**조치:** +```powershell +# 최대 암호 사용 기간 90일 설정 +net accounts /maxpwage:90 +# 최소 암호 사용 기간 1일 +net accounts /minpwage:1 + +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최대 암호 사용 기간": 90일 +# "최소 암호 사용 기간": 1일 +# "최근 암호 기억": 24개 + +# 계정별 비밀번호 기간 설정 +# LUSRMGR.MSC > 사용자 > 계정 속성 > "암호 사용 기간 제한 없음" 해제 +``` + +### PC-02: 비밀번호 관리정책 설정 +**점검:** +```powershell +# 암호 복잡성 및 최소 길이 확인 +net accounts +secedit /export /cfg C:\secpol.cfg +findstr "MinimumPasswordLength" C:\secpol.cfg +findstr "PasswordComplexity" C:\secpol.cfg +``` +**조치:** +```powershell +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최소 암호 길이": 8문자 이상 +# "암호는 복잡성을 만족해야 함": 사용함 + +# 복잡성 기준: 영문 대/소문자, 숫자, 특수문자 중 +# 2종류 조합 시 최소 10자리 이상 +# 3종류 조합 시 최소 8자리 이상 +``` + +### PC-03: 복구 콘솔에서 자동 로그온 금지 +**점검:** +```powershell +# 복구 콘솔 자동 로그온 설정 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "복구 콘솔: 자동 관리 로그온 허용" -> "사용 안 함" + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel /t REG_DWORD /d 0 /f +``` + +## 2. 서비스 관리 + +### PC-04: 공유 폴더 제거 +**점검:** +```powershell +# 공유 폴더 목록 확인 +net share +# 기본 공유 폴더 확인 (C$, D$, Admin$, IPC$) +Get-SmbShare +# AutoShareWks 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks +``` +**조치:** +```powershell +# 기본 공유 폴더 삭제 +net share C$ /delete +net share D$ /delete +net share Admin$ /delete + +# 재부팅 시 자동 공유 방지 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 일반 공유 폴더 삭제 +net share <공유폴더명> /delete + +# 공유 폴더 접근에 "Everyone" 제거 (GUI) +# 컴퓨터 관리 > 공유 폴더 > 공유 > 속성 > 공유 사용 권한 > Everyone 제거 + +# 암호로 보호된 공유 설정 +# 설정 > 네트워크 > 고급 공유 설정 > 모든 네트워크 > "암호로 보호된 공유" 켬 +``` + +### PC-05: 불필요한 서비스 제거 +**점검:** +```powershell +# 실행 중인 서비스 목록 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType +# 특정 불필요 서비스 확인 +Get-Service -Name "RemoteRegistry","Messenger","Clipbook","Alerter" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# 불필요 서비스 중지 및 시작 유형 변경 +# GUI: services.msc > 해당 서비스 > 속성 > 시작 유형: 사용 안 함 + +# PowerShell로 서비스 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 일반적으로 불필요한 서비스 예시: +# Alerter, Clipbook, Computer Browser, DHCP Client (고정IP 사용 시) +# Distributed Link Tracking Client, Error Reporting Service +# Messenger, NetMeeting Remote Desktop Sharing +# Print Spooler (프린터 미사용 시), Remote Registry +# Simple TCP/IP Services, Universal Plug and Play Device Host +``` + +### PC-06: 비인가 상용 메신저 사용 금지 +**점검:** +```powershell +# 설치된 메신저 프로그램 확인 +Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -match "카카오톡|Skype|NateOn|Telegram"} | Select-Object Name +# 실행 중인 메신저 프로세스 확인 +Get-Process | Where-Object {$_.ProcessName -match "kakaotalk|skype|nateon"} | Select-Object ProcessName +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows Messenger +# "Windows Messenger를 실행 허용 안 함": 사용 + +# 상용 메신저 제거 +# 설정 > 앱 > 앱 및 기능 > 해당 메신저 제거 +``` + +### PC-07: 파일 시스템이 NTFS 포맷으로 설정 +**점검:** +```powershell +# 디스크 볼륨 파일 시스템 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size +# 또는 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT32 -> NTFS 변환 (비파괴 변환) +convert C: /fs:ntfs + +# 변환 후 폴더/파일에 적합한 ACL 적용 +# 속성 > 보안 > 편집 > 그룹/계정별 권한 설정 +``` + +### PC-08: 멀티 부팅 방지 +**점검:** +```powershell +# 설치된 OS 확인 +bcdedit /enum +# 또는 +msconfig +# 부팅 탭에서 2개 이상 OS 확인 +``` +**조치:** +```powershell +# msconfig > 부팅 탭 > 사용하지 않는 OS 선택 후 삭제 +# 또는 +bcdedit /delete {identifier} +``` + +### PC-09: 브라우저 종료 시 임시 인터넷 파일 삭제 +**점검:** +```powershell +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 +# > Internet Explorer > 인터넷 제어판 > 고급 페이지 +# "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기": 사용 + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit /t REG_DWORD /d 1 /f +``` + +## 3. 패치 관리 + +### PC-10: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```powershell +# 설치된 HOT FIX 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +# Windows Update 설정 확인 +Get-WindowsUpdateLog +# 자동 업데이트 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" +``` +**조치:** +```powershell +# 설정 > Windows Update > 업데이트 확인 +# PowerShell로 업데이트 확인 및 설치 +Install-Module PSWindowsUpdate -Force +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot +``` + +### PC-11: 지원이 종료되지 않은 Windows OS Build 적용 +**점검:** +```powershell +# 현재 OS 빌드 버전 확인 +[System.Environment]::OSVersion.Version +Get-ComputerInfo | Select-Object WindowsVersion, OsBuildNumber, WindowsProductName +winver +``` +**조치:** +```powershell +# Windows Update를 통한 최신 빌드 적용 +# 설정 > Windows Update > 업데이트 확인 +# 수동 업데이트: https://www.microsoft.com/ko-kr/software-download/ +``` + +## 4. 보안 관리 + +### PC-12: Windows 자동 로그인 점검 +**점검:** +```powershell +# 자동 로그인 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword +``` +**조치:** +```powershell +# 자동 로그인 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +# DefaultPassword 값 삭제 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +``` + +### PC-13: 바이러스 백신 프로그램 설치 및 주기적 업데이트 +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntivirusSignatureLastUpdated, AntispywareEnabled +# 백신 설치 여부 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState +``` +**조치:** +```powershell +# Windows Defender 업데이트 +Update-MpSignature +# 설정 > Windows 보안 > 바이러스 및 위협 방지 > 보호 업데이트 > 업데이트 확인 +``` + +### PC-14: 백신 실시간 감시 기능 활성화 +**점검:** +```powershell +# 실시간 보호 상태 확인 +Get-MpPreference | Select-Object DisableRealtimeMonitoring +Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled +``` +**조치:** +```powershell +# 실시간 보호 활성화 +Set-MpPreference -DisableRealtimeMonitoring $false +# GUI: Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 켬 +``` + +### PC-15: OS에서 제공하는 침입차단 기능 활성화 +**점검:** +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled +netsh advfirewall show allprofiles state +``` +**조치:** +```powershell +# 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True +# 또는 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정/해제 > "사용" 설정 +``` + +### PC-16: 화면보호기 대기 시간 설정 및 재시작 시 암호 보호 +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +``` +**조치:** +```powershell +# 화면보호기 활성화 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +# 대기 시간 설정 (600초 = 10분 이하) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +# 재시작 시 암호 보호 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f + +# GUI: 설정 > 개인설정 > 잠금화면 > 화면보호기 +# 대기: 10분 이하 / "다시 시작 시 로그온 화면 표시" 체크 +``` + +### PC-17: 이동식 미디어 자동 실행 방지 +**점검:** +```powershell +# 자동 실행 정책 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun +# GPO 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoAutorun +``` +**조치:** +```powershell +# 모든 드라이브 자동 실행 끄기 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 자동 실행 정책 +# "자동 실행 끄기": 사용 - 모든 드라이브 + +# 제어판: 하드웨어 및 소리 > 자동 실행 +# "모든 미디어 및 장치에 자동 실행 사용" 체크 해제 +``` + +### PC-18: 원격 지원 금지 +**점검:** +```powershell +# 원격 지원 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +``` +**조치:** +```powershell +# 원격 지원 비활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 0 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 원격 지원 +# "원격 지원 제공 구성": 사용 안 함 + +# 원격 데스크톱 비활성화 (필요 시) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/cii/unix.md b/skills-ko/kesekit-fix-ko/scripts/cii/unix.md new file mode 100644 index 0000000..6969221 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/cii/unix.md @@ -0,0 +1,1531 @@ +# Unix 서버 점검 및 조치 스크립트 + +## 1. 계정 관리 + +### U-01: root 계정 원격 접속 제한 +**판단기준:** 원격터미널 서비스 사용 시 root 직접 접속을 차단한 경우 양호 +**점검:** +```bash +# SSH root 접속 설정 확인 +grep -i "PermitRootLogin" /etc/ssh/sshd_config + +# Telnet root 접속 설정 확인 (SOLARIS) +grep "CONSOLE" /etc/default/login + +# Telnet pts 설정 확인 (LINUX) +cat /etc/securetty | grep pts + +# Telnet rlogin 설정 확인 (AIX) +grep "rlogin" /etc/security/user +``` +**조치:** +```bash +# SSH - 모든 OS 공통 +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config +systemctl restart sshd + +# Telnet - SOLARIS +# /etc/default/login 파일에 설정 +echo "CONSOLE=/dev/console" >> /etc/default/login + +# Telnet - LINUX (/etc/securetty에서 pts 제거) +sed -i '/^pts\//d' /etc/securetty +# /etc/pam.d/login에 모듈 추가 +# auth required /lib/security/pam_securetty.so + +# Telnet - AIX (/etc/security/user) +chsec -f /etc/security/user -s root -a rlogin=false + +# HP-UX SSH +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /opt/ssh/etc/sshd_config +``` + +### U-02: 비밀번호 관리정책 설정 +**판단기준:** 영문+숫자+특수문자 8자리 이상, 최소사용 1일, 최대사용 90일, 이력 4회 이상 양호 +**점검:** +```bash +# LINUX - 비밀번호 정책 확인 +grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" /etc/login.defs +cat /etc/security/pwquality.conf 2>/dev/null +grep pam_pwquality /etc/pam.d/system-auth 2>/dev/null +grep pam_pwquality /etc/pam.d/common-password 2>/dev/null + +# SOLARIS +cat /etc/default/passwd | grep -E "HISTORY|PASSLENGTH|MINDIGIT|MINUPPER|MINLOWER|MINSPECIAL" + +# AIX +grep -E "minage|maxage|minalpha|minother|minlen|histsize" /etc/security/user +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/login.defs +sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs +sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs + +# LINUX (Redhat) - /etc/security/pwquality.conf +cat > /etc/security/pwquality.conf <<'CONF' +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +CONF + +# SOLARIS - /etc/default/passwd +cat >> /etc/default/passwd <<'CONF' +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO +CONF + +# AIX - /etc/security/user +chsec -f /etc/security/user -s default -a minage=1 +chsec -f /etc/security/user -s default -a maxage=12 +chsec -f /etc/security/user -s default -a minalpha=2 +chsec -f /etc/security/user -s default -a minother=2 +chsec -f /etc/security/user -s default -a minlen=8 +chsec -f /etc/security/user -s default -a histsize=4 + +# HP-UX - /etc/default/security +cat >> /etc/default/security <<'CONF' +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +CONF +``` + +### U-03: 계정 잠금 임계값 설정 +**판단기준:** 계정 잠금 임계값이 10회 이하로 설정된 경우 양호 +**점검:** +```bash +# LINUX - PAM 계정잠금 설정 확인 +grep pam_tally /etc/pam.d/system-auth 2>/dev/null +grep pam_faillock /etc/pam.d/system-auth 2>/dev/null +grep -E "deny|unlock_time" /etc/security/faillock.conf 2>/dev/null +authselect current 2>/dev/null + +# SOLARIS +grep "RETRIES" /etc/default/login +grep "LOCK_AFTER_RETRIES" /etc/security/policy.conf 2>/dev/null + +# AIX +grep "loginretries" /etc/security/user + +# HP-UX +grep "AUTH_MAXTRIES" /etc/default/security 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat - authselect 방식, RHEL 8+) +authselect enable-feature with-faillock +# /etc/security/faillock.conf 수정 +cat >> /etc/security/faillock.conf <<'CONF' +silent +deny = 10 +unlock_time = 120 +CONF + +# LINUX (Redhat - pam_faillock 방식) +# /etc/pam.d/system-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +# /etc/pam.d/password-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# LINUX (Debian - pam_faillock 방식) +# /etc/pam.d/common-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# SOLARIS (5.9+) +# /etc/security/policy.conf +echo "LOCK_AFTER_RETRIES=YES" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/user -s default -a loginretries=10 + +# HP-UX (11.v3+) +echo "AUTH_MAXTRIES=10" >> /etc/default/security +``` + +### U-04: 비밀번호 파일 보호 +**판단기준:** 쉐도우 비밀번호를 사용하거나 비밀번호를 암호화하여 저장하는 경우 양호 +**점검:** +```bash +# /etc/passwd 두 번째 필드가 'x'인지 확인 (x이면 shadow 사용 중) +awk -F: '$2 != "x" {print $1" : 비밀번호 평문 저장 의심"}' /etc/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX - 쉐도우 비밀번호 적용 +pwconv + +# HP-UX - Trusted Mode 전환 +/etc/tsconvert +``` + +### U-05: root 이외의 UID가 '0' 금지 +**판단기준:** root 계정과 동일한 UID(0)를 갖는 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '$3==0 && $1!="root" {print $1" has UID 0"}' /etc/passwd +``` +**조치:** +```bash +# UID 변경 +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-06: 사용자 계정 su 기능 제한 +**판단기준:** su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 양호 +**점검:** +```bash +# wheel 그룹 확인 +grep wheel /etc/group +# su 명령어 권한 확인 +ls -l /usr/bin/su +# PAM 설정 확인 (LINUX) +grep pam_wheel /etc/pam.d/su +``` +**조치:** +```bash +# wheel 그룹 생성 (없는 경우) +groupadd wheel +# su 명령 그룹 변경 및 권한 설정 +chgrp wheel /usr/bin/su +chmod 4750 /usr/bin/su +# 허용 계정 등록 +usermod -G wheel + +# LINUX PAM 설정 - /etc/pam.d/su +# auth required pam_wheel.so use_uid +``` + +### U-07: 불필요한 계정 제거 +**판단기준:** 불필요한 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +# 시스템 계정 확인 +cat /etc/passwd +# 마지막 로그인 기록 확인 +last | head -30 +# 로그인 불가 계정 확인 +awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd +``` +**조치:** +```bash +userdel <사용자_이름> +# AIX의 경우 +# rmuser <사용자_이름> +``` + +### U-08: 관리자 그룹에 최소한의 계정 포함 +**판단기준:** 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 양호 +**점검:** +```bash +grep "^root:" /etc/group +``` +**조치:** +```bash +gpasswd -d <사용자_이름> root +# AIX의 경우 +# chgrpmem -m - <사용자_이름> root +``` + +### U-09: 계정이 존재하지 않는 GID 금지 +**판단기준:** 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 양호 +**점검:** +```bash +# /etc/group과 /etc/passwd 비교 +cat /etc/group +cat /etc/gshadow 2>/dev/null +``` +**조치:** +```bash +groupdel <그룹_이름> +``` + +### U-10: 동일한 UID 금지 +**판단기준:** 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d +# 중복 UID가 있다면 해당 계정 확인 +awk -F: '{uid[$3]=uid[$3]" "$1} END{for(u in uid) if(split(uid[u],a," ")>2) print "UID "u":"uid[u]}' /etc/passwd +``` +**조치:** +```bash +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-11: 사용자 shell 점검 +**판단기준:** 로그인이 필요하지 않은 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +cat /etc/passwd | grep -E "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^games|^gopher" | grep -v admin +``` +**조치:** +```bash +# 불필요한 계정에 nologin 쉘 부여 +usermod -s /bin/false <계정명> +usermod -s /sbin/nologin <계정명> +``` + +### U-12: 세션 종료 시간 설정 +**판단기준:** Session Timeout이 600초(10분) 이하로 설정된 경우 양호 +**점검:** +```bash +echo $TMOUT +grep -i tmout /etc/profile /etc/bashrc 2>/dev/null +grep autologout /etc/csh.cshrc /etc/csh.login 2>/dev/null +``` +**조치:** +```bash +# sh, ksh, bash - /etc/profile에 추가 +echo "TMOUT=600" >> /etc/profile +echo "export TMOUT" >> /etc/profile + +# csh - /etc/csh.cshrc 또는 /etc/csh.login에 추가 +echo "set autologout=10" >> /etc/csh.cshrc +``` + +### U-13: 안전한 비밀번호 암호화 알고리즘 사용 +**판단기준:** SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 양호 ($5=SHA-256, $6=SHA-512) +**점검:** +```bash +# 암호화 알고리즘 확인 ($1=MD5, $5=SHA-256, $6=SHA-512) +awk -F: '$2 ~ /^\$/ {split($2,a,"$"); print $1" -> $"a[2]}' /etc/shadow 2>/dev/null + +# LINUX +grep ENCRYPT_METHOD /etc/login.defs +``` +**조치:** +```bash +# LINUX (Redhat) +sed -i 's/^ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' /etc/login.defs +# /etc/pam.d/system-auth +# password sufficient pam_unix.so sha512 + +# SOLARIS +# /etc/security/policy.conf +echo "CRYPT_DEFAULT=6" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/login.cfg -s usw -a pwd_algorithm=ssha512 + +# HP-UX +echo "CRYPT_DEFAULT=6" >> /etc/default/security +``` + +--- + +## 2. 파일 및 디렉터리 관리 + +### U-14: root 홈, 패스 디렉터리 권한 및 패스 설정 +**판단기준:** PATH 환경변수에 "."이 맨 앞이나 중간에 포함되지 않은 경우 양호 +**점검:** +```bash +echo $PATH | tr ':' '\n' | grep -n "^\.$" +echo $PATH | grep -E "(^\.:|:\.:|:\.$ )" +``` +**조치:** +```bash +# 환경설정 파일에서 PATH 변숫값에서 "." 제거 또는 맨 마지막으로 이동 +# ~/.profile, ~/.bashrc, /etc/profile 등에서 수정 +# 예: PATH=$PATH:$HOME/bin (상대경로 "." 삭제) +``` + +### U-15: 파일 및 디렉터리 소유자 설정 +**판단기준:** 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 양호 +**점검:** +```bash +find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +``` +**조치:** +```bash +# 불필요한 파일 제거 +rm <파일_이름> +rm -r <디렉터리_이름> +# 사용 중인 파일의 소유자 변경 +chown <사용자_이름> <파일명> +chgrp <그룹_이름> <파일명> +``` + +### U-16: /etc/passwd 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/passwd +``` +**조치:** +```bash +chown root /etc/passwd +chmod 644 /etc/passwd +``` + +### U-17: 시스템 시작 스크립트 권한 설정 +**판단기준:** 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +# LINUX (init) +ls -al /etc/rc.d/*/* 2>/dev/null +# LINUX (systemd) +ls -al /etc/systemd/system/* 2>/dev/null +# SOLARIS +ls -al /etc/rc*.d/* 2>/dev/null +``` +**조치:** +```bash +chown root <파일_이름> +chmod o-w <파일_이름> +``` + +### U-18: /etc/shadow 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 400 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/shadow +# AIX +ls -l /etc/security/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX +chown root /etc/shadow +chmod 400 /etc/shadow + +# AIX +chown root /etc/security/passwd +chmod 400 /etc/security/passwd +``` + +### U-19: /etc/hosts 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts +``` +**조치:** +```bash +chown root /etc/hosts +chmod 644 /etc/hosts +``` + +### U-20: /etc/(x)inetd.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/inetd.conf 2>/dev/null +ls -l /etc/xinetd.conf 2>/dev/null +ls -l /etc/xinetd.d/* 2>/dev/null +ls -l /etc/systemd/system.conf 2>/dev/null +``` +**조치:** +```bash +# inetd +chown root /etc/inetd.conf +chmod 600 /etc/inetd.conf + +# xinetd +chown root /etc/xinetd.conf +chmod 600 /etc/xinetd.conf +chown -R root /etc/xinetd.d/ +chmod -R 600 /etc/xinetd.d/ + +# systemd +chown root /etc/systemd/system.conf +chmod 600 /etc/systemd/system.conf +``` + +### U-21: /etc/(r)syslog.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/syslog.conf /etc/rsyslog.conf 2>/dev/null +``` +**조치:** +```bash +chown root /etc/rsyslog.conf +chmod 640 /etc/rsyslog.conf +``` + +### U-22: /etc/services 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/services +``` +**조치:** +```bash +chown root /etc/services +chmod 644 /etc/services +``` + +### U-23: SUID, SGID, Sticky bit 설정 파일 점검 +**판단기준:** 주요 실행 파일의 권한에 불필요한 SUID/SGID가 부여되어 있지 않은 경우 양호 +**점검:** +```bash +find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +``` +**조치:** +```bash +# 불필요한 특수 권한 제거 +chmod -s <파일_이름> + +# 특정 그룹에서만 사용하도록 제한 +chgrp <그룹_이름> +chmod 4750 +``` + +### U-24: 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +**판단기준:** 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정이고, 소유자 외 쓰기 권한이 없는 경우 양호 +**점검:** +```bash +# 각 사용자 홈 디렉터리의 환경변수 파일 확인 +ls -la ~/.profile ~/.kshrc ~/.cshrc ~/.bashrc ~/.bash_profile ~/.login ~/.exrc ~/.netrc 2>/dev/null +``` +**조치:** +```bash +chown <환경변수_파일> +chmod o-w <환경변수_파일> +``` + +### U-25: world writable 파일 점검 +**판단기준:** world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 양호 +**점검:** +```bash +find / -type f -perm -2 -exec ls -l {} \; 2>/dev/null +``` +**조치:** +```bash +# 일반 사용자 쓰기 권한 제거 +chmod o-w <파일_이름> +# 불필요한 파일 제거 +rm <파일_이름> +``` + +### U-26: /dev에 존재하지 않는 device 파일 점검 +**판단기준:** /dev 디렉터리에 존재하지 않는 device 파일을 제거한 경우 양호 +**점검:** +```bash +find /dev -type f -exec ls -l {} \; +``` +**조치:** +```bash +rm <파일_이름> +``` + +### U-27: $HOME/.rhosts, hosts.equiv 사용 금지 +**판단기준:** rlogin/rsh/rexec 미사용 또는 사용 시 소유자 root, 권한 600 이하, "+" 설정 없는 경우 양호 +**점검:** +```bash +find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null +cat /etc/hosts.equiv 2>/dev/null +ls -la /etc/hosts.equiv 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.equiv +chmod 600 /etc/hosts.equiv +chown root $HOME/.rhosts +chmod 600 $HOME/.rhosts +# "+" 옵션 제거 후 허용 호스트 및 계정만 등록 +``` + +### U-28: 접속 IP 및 포트 제한 +**판단기준:** 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 양호 +**점검:** +```bash +# TCP Wrapper +cat /etc/hosts.allow 2>/dev/null +cat /etc/hosts.deny 2>/dev/null + +# iptables +iptables -L 2>/dev/null + +# firewalld +firewall-cmd --list-all 2>/dev/null + +# UFW +ufw status numbered 2>/dev/null +``` +**조치:** +```bash +# TCP Wrapper +echo "ALL:ALL" > /etc/hosts.deny +echo "sshd : <허용_IP>" >> /etc/hosts.allow + +# iptables +iptables -A INPUT -p tcp -s --dport <포트> -j ACCEPT +iptables-save + +# firewalld +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="" port protocol="tcp" port="<포트>" accept' +firewall-cmd --reload + +# UFW +ufw allow from to any port <포트> +ufw reload +``` + +### U-29: hosts.lpd 파일 소유자 및 권한 설정 +**판단기준:** /etc/hosts.lpd 파일이 존재하지 않거나, 소유자 root이고 권한 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts.lpd 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.lpd +chmod 600 /etc/hosts.lpd +``` + +### U-30: UMASK 설정 관리 +**판단기준:** UMASK 값이 022 이상으로 설정된 경우 양호 +**점검:** +```bash +umask +grep -i umask /etc/profile /etc/bashrc /etc/login.defs 2>/dev/null +# SOLARIS +grep UMASK /etc/default/login 2>/dev/null +``` +**조치:** +```bash +# /etc/profile에 추가 +echo "umask 022" >> /etc/profile +echo "export umask" >> /etc/profile + +# LINUX - /etc/login.defs +sed -i 's/^UMASK.*/UMASK 022/' /etc/login.defs + +# SOLARIS - /etc/default/login +echo "UMASK=022" >> /etc/default/login + +# FTP umask 설정 +# vsFTP: vsftpd.conf -> local_umask=022 +# ProFTP: proftpd.conf -> Umask 022 +``` + +### U-31: 홈디렉토리 소유자 및 권한 설정 +**판단기준:** 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +cat /etc/passwd | awk -F: '{print $1" "$6}' | while read user dir; do + ls -ald "$dir" 2>/dev/null +done +``` +**조치:** +```bash +chown <사용자_이름> <홈_디렉터리> +chmod o-w <홈_디렉터리> +``` + +### U-32: 홈 디렉토리로 지정한 디렉토리의 존재 관리 +**판단기준:** 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $1" "$6}' /etc/passwd | while read user dir; do + [ ! -d "$dir" ] && echo "$user : $dir 존재하지 않음" +done +``` +**조치:** +```bash +# 불필요한 계정 삭제 +userdel <사용자_이름> +# 사용중인 계정의 홈 디렉터리 생성 +mkdir -p /home/<사용자_이름> +chown <사용자_이름> /home/<사용자_이름> +``` + +### U-33: 숨겨진 파일 및 디렉토리 검색 및 제거 +**판단기준:** 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 양호 +**점검:** +```bash +find / -type f -name ".*" 2>/dev/null +find / -type d -name ".*" 2>/dev/null +``` +**조치:** +```bash +rm <파일_이름> +rm -r <디렉터리_이름> +``` + +--- + +## 3. 서비스 관리 + +### U-34: Finger 서비스 비활성화 +**판단기준:** Finger 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep finger +# SOLARIS (5.10+) +inetadm | grep finger 2>/dev/null +# inetd +grep finger /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/finger 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop finger.socket 2>/dev/null +systemctl disable finger.socket 2>/dev/null + +# xinetd +# /etc/xinetd.d/finger -> disable = yes +systemctl restart xinetd + +# inetd - finger 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/finger:default +``` + +### U-35: 공유 서비스에 대한 익명 접근 제한 설정 +**판단기준:** 공유 서비스에 대해 익명 접근을 제한한 경우 양호 +**점검:** +```bash +# FTP 익명 계정 확인 +grep -E "^ftp|^anonymous" /etc/passwd + +# vsFTP +grep anonymous_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# ProFTP +sed -n '//,/<\/Anonymous>/p' /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null + +# NFS 익명 접근 +grep -E "anonuid|anongid" /etc/exports 2>/dev/null + +# Samba +grep "guest ok" /etc/samba/smb.conf 2>/dev/null +``` +**조치:** +```bash +# FTP 익명 계정 제거 +userdel ftp +userdel anonymous + +# vsFTP - /etc/vsftpd/vsftpd.conf +# anonymous_enable=NO +systemctl restart vsftpd + +# NFS - /etc/exports에서 anon 옵션 제거 +exportfs -ra + +# Samba - /etc/samba/smb.conf +# guest ok = no +smbcontrol all reload-config +``` + +### U-36: r 계열 서비스 비활성화 +**판단기준:** 불필요한 r 계열 서비스(rlogin, rsh, rexec)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "rlogin|rsh|rexec" +# inetd +grep -E "rlogin|rsh|rexec|shell|login|exec" /etc/inetd.conf 2>/dev/null +# SOLARIS (5.10+) +inetadm | egrep "shell|rlogin|rexec" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop rlogin.socket rsh.socket rexec.socket 2>/dev/null +systemctl disable rlogin.socket rsh.socket rexec.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/login:rlogin +inetadm -d svc:/network/shell:default +inetadm -d svc:/network/rexec:default +``` + +### U-37: crontab 설정파일 권한 설정 미흡 +**판단기준:** crontab/at 명령어 권한 750 이하, cron/at 관련 파일 권한 640 이하인 경우 양호 +**점검:** +```bash +ls -l /usr/bin/crontab +ls -l /usr/bin/at +ls -l /var/spool/cron/ 2>/dev/null +ls -l /var/spool/cron/crontabs/ 2>/dev/null +ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny 2>/dev/null +``` +**조치:** +```bash +# crontab/at 명령어 권한 설정 +chown root /usr/bin/crontab +chmod 750 /usr/bin/crontab +chown root /usr/bin/at +chmod 750 /usr/bin/at + +# cron 관련 파일 권한 설정 +chmod 640 /etc/cron.allow /etc/cron.deny 2>/dev/null +chmod 640 /etc/at.allow /etc/at.deny 2>/dev/null +``` + +### U-38: DoS 공격에 취약한 서비스 비활성화 +**판단기준:** echo, discard, daytime, chargen 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "echo|discard|daytime|chargen" +# inetd +grep -E "echo|discard|daytime|chargen" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep enable | egrep "echo|discard|daytime|chargen" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null +systemctl disable echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬> +``` + +### U-39: 불필요한 NFS 서비스 비활성화 +**판단기준:** 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep nfs +# AIX +ps -ef | grep nfsd +lssrc -a | grep nfs 2>/dev/null +# SOLARIS +inetadm | egrep "nfs|statd|lockd" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop nfs-server +systemctl disable nfs-server + +# SOLARIS +inetadm -d + +# AIX +stopsrc -g nfs + +# HP-UX +# /etc/rc.config.d/nfsconf -> NFS_SERVER=0 +``` + +### U-40: NFS 접근 통제 +**판단기준:** 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX +ls -l /etc/exports +cat /etc/exports +showmount -e 2>/dev/null + +# SOLARIS +ls -l /etc/dfs/dfstab 2>/dev/null +cat /etc/dfs/dfstab 2>/dev/null +``` +**조치:** +```bash +# LINUX +chown root /etc/exports +chmod 644 /etc/exports +# /etc/exports 예시: /home/share host1(ro,root_squash) +exportfs -ra + +# SOLARIS +chown root /etc/dfs/dfstab +chmod 644 /etc/dfs/dfstab +# /etc/dfs/dfstab 예시: share -F nfs -o rw=client1:client2,ro=client1:client2 /export/home +shareall +``` + +### U-41: 불필요한 automountd 제거 +**판단기준:** automountd 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "automount|autofs" +# SOLARIS +svcs -a | grep autofs 2>/dev/null +# AIX +ps -ef | grep automountd +``` +**조치:** +```bash +# LINUX +systemctl stop autofs +systemctl disable autofs + +# SOLARIS +svcadm disable svc:/system/filesystem/autofs:default + +# HP-UX +# /etc/rc.config.d/nfsconf -> AUTOFS=0 +``` + +### U-42: 불필요한 RPC 서비스 비활성화 +**판단기준:** 불필요한 RPC 서비스(rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd 등)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep rpc +# inetd +grep -E "rpc\." /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep rpc | grep enabled | egrep "ttdbserver|rex|rstart|rusers|spray|wall|rquota" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop <서비스명> +systemctl disable <서비스명> + +# inetd - 해당 RPC 서비스 항목 주석 처리 +# SOLARIS +svcadm disable <서비스_데몬> +``` + +### U-43: NIS, NIS+ 점검 +**판단기준:** NIS 서비스가 비활성화되어 있거나, 불가피 시 NIS+ 서비스를 사용하는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated" +# SOLARIS +svcs -a | grep nis 2>/dev/null +# AIX +lssrc -a | grep -E "ypserv|ypbind" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop ypserv ypbind 2>/dev/null +systemctl disable ypserv ypbind 2>/dev/null + +# SOLARIS +svcadm disable + +# HP-UX - /etc/rc.config.d/namesrvs +# NIS_MASTER_SERVER=0 +# NIS_SLAVE_SERVER=0 +# NIS_CLIENT_SERVER=0 +``` + +### U-44: tftp, talk 서비스 비활성화 +**판단기준:** tftp, talk, ntalk 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "tftp|talk|ntalk" +# inetd +grep -E "tftp|talk|ntalk" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | egrep "tftp|talk" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop tftp.socket talk.socket ntalk.socket 2>/dev/null +systemctl disable tftp.socket talk.socket ntalk.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬명> +``` + +### U-45: 메일 서비스 버전 점검 +**판단기준:** 메일 서비스 버전이 최신 버전인 경우 양호 +**점검:** +```bash +# Sendmail +sendmail -d0 -bt < /dev/null 2>&1 | grep Version +# Postfix +postconf mail_version 2>/dev/null +# Exim +exim -bV 2>/dev/null +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop sendmail postfix 2>/dev/null +systemctl disable sendmail postfix 2>/dev/null + +# 사용 시 최신 버전으로 패치 적용 +# Sendmail: http://www.sendmail.org/ +# Postfix: https://www.postfix.org/packages.html +# Exim: https://www.exim.org/ +``` + +### U-46: 일반 사용자의 메일 서비스 실행 방지 +**판단기준:** 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf 2>/dev/null +# Postfix +ls -l /usr/sbin/postsuper 2>/dev/null +# Exim +ls -l /usr/sbin/exiqgrep 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun + +# Postfix +chmod o-x /usr/sbin/postsuper + +# Exim +chmod o-x /usr/sbin/exiqgrep +``` + +### U-47: 스팸 메일 릴레이 제한 +**판단기준:** 릴레이 제한이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep "promiscuous_relay" /etc/mail/sendmail.mc 2>/dev/null +cat /etc/mail/access 2>/dev/null +# Postfix +grep -E "smtpd_recipient_restrictions|mynetworks" /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "relay_from_hosts|hosts =" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.mc에서 promiscuous_relay 제거 +# FEATURE(`promiscuous_relay')dnl 삭제 +m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +# /etc/mail/access에 허용/차단 설정 +makemap hash /etc/mail/access.db < /etc/mail/access +systemctl restart sendmail + +# Postfix - /etc/postfix/main.cf +# mynetworks = <허용할_네트워크> +postfix reload + +# Exim - /etc/exim/exim.conf +# hostlist relay_from_hosts = <허용할_네트워크> +systemctl restart exim +``` + +### U-48: expn, vrfy 명령어 제한 +**판단기준:** noexpn, novrfy 옵션이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf +# Postfix +grep disable_vrfy_command /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "acl_smtp_vrfy|acl_smtp_expn" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +# 또는 PrivacyOptions = restrictqrun, goaway + +# Postfix - /etc/postfix/main.cf +# disable_vrfy_command = yes +postfix reload + +# Exim - acl_smtp_vrfy, acl_smtp_expn 설정 제거/주석 처리 +``` + +### U-49: DNS 보안 버전 패치 +**판단기준:** 주기적으로 패치를 관리하는 경우 양호 +**점검:** +```bash +named -v 2>/dev/null +# LINUX +systemctl list-units --type=service | grep named +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop named +systemctl disable named + +# 사용 시 최신 버전 패치 +# ISC BIND: https://www.isc.org/downloads/ +# 취약점 정보: https://kb.isc.org/v1/docs/en/aa-00913 +``` + +### U-50: DNS ZoneTransfer 설정 +**판단기준:** Zone Transfer를 허가된 사용자에게만 허용한 경우 양호 +**점검:** +```bash +grep allow-transfer /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +grep xfrnets /etc/named.boot /etc/bind/named.boot 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf (또는 /etc/bind/named.conf.options) 수정 +# allow-transfer { <허용할_IP>; }; +systemctl restart named +``` + +### U-51: DNS 서비스의 취약한 동적 업데이트 설정 금지 +**판단기준:** 동적 업데이트 기능이 비활성화되었거나, 적절한 접근통제를 수행하는 경우 양호 +**점검:** +```bash +grep allow-update /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf 수정 +# 불필요 시: allow-update { none; }; +# 필요 시: allow-update { <허용할_IP>; }; +systemctl restart named +``` + +### U-52: Telnet 서비스 비활성화 +**판단기준:** Telnet 프로토콜을 비활성화하고 있는 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=socket | grep telnet +# inetd +grep telnet /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/telnet 2>/dev/null +# SOLARIS +svcs -a | grep telnet 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop telnet.socket +systemctl disable telnet.socket +systemctl start sshd + +# xinetd - /etc/xinetd.d/telnet -> disable = yes +systemctl restart xinetd + +# SOLARIS +svcadm disable svc:/network/telnet:default +svcadm enable ssh +``` + +### U-53: FTP 서비스 정보 노출 제한 +**판단기준:** FTP 접속 배너에 노출되는 정보가 없는 경우 양호 +**점검:** +```bash +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +# ProFTP +grep ServerIdent /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only +systemctl restart vsftpd + +# ProFTP - /etc/proftpd/proftpd.conf +# ServerIdent off +# 또는 ServerIdent on "Authorized access only" +systemctl restart proftpd +``` + +### U-54: 암호화되지 않는 FTP 서비스 비활성화 +**판단기준:** 암호화되지 않은 FTP 서비스가 비활성화된 경우 양호 (SFTP 사용 권고) +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "vsftpd|proftpd" +# inetd +grep "^ftp" /etc/inetd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop vsftpd proftpd 2>/dev/null +systemctl disable vsftpd proftpd 2>/dev/null + +# inetd - ftp 항목 주석 처리 +``` + +### U-55: FTP 계정 shell 제한 +**판단기준:** FTP 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +grep "^ftp" /etc/passwd +``` +**조치:** +```bash +usermod -s /bin/false ftp +# 또는 +usermod -s /sbin/nologin ftp +``` + +### U-56: FTP 서비스 접근 제어 설정 +**판단기준:** 특정 IP주소/호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 양호 +**점검:** +```bash +# ftpusers 파일 +cat /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null +ls -l /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null + +# vsFTP +grep userlist_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +cat /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep UseFtpUsers /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일 권한 설정 +chown root /etc/ftpusers +chmod 640 /etc/ftpusers + +# vsFTP - user_list 방식 +# /etc/vsftpd/vsftpd.conf +# userlist_enable=YES +# userlist_deny=YES (목록 사용자 차단) 또는 NO (목록 사용자만 허용) + +# ProFTP - proftpd.conf 접근제한 +# +# Order Deny,Allow +# AllowUser <사용자> 또는 Allow from +# DenyUser <사용자> 또는 Deny from +# +``` + +### U-57: Ftpusers 파일 설정 (root 계정 접근 제한) +**판단기준:** root 계정 접속을 차단한 경우 양호 +**점검:** +```bash +# ftpusers 파일에 root가 등록되어 있는지 확인 +grep "^root" /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep RootLogin /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일에 root 추가 (주석 해제) +# 해당 파일에서 #root -> root 로 변경 + +# ProFTP - /etc/proftpd/proftpd.conf +# RootLogin off +systemctl restart proftpd +``` + +### U-58: 불필요한 SNMP 서비스 구동 점검 +**판단기준:** SNMP 서비스를 사용하지 않는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep snmpd +# SOLARIS +svcs -a | grep snmp 2>/dev/null +# AIX +lssrc -a | grep snmp 2>/dev/null +# 프로세스 확인 +ps -ef | grep snmp +``` +**조치:** +```bash +# LINUX +systemctl stop snmpd +systemctl disable snmpd + +# SOLARIS (5.10+) +svcadm disable svc:/application/management/snmpd:default + +# AIX +stopsrc -s snmpd +# /etc/rc.tcpip에서 snmpd 주석 처리 +``` + +### U-59: 안전한 SNMP 버전 사용 +**판단기준:** SNMP 서비스를 v3 이상으로 사용하는 경우 양호 +**점검:** +```bash +# SNMPv3 사용 여부 확인 +snmpwalk -v3 -l authPriv -u <사용자> -a SHA -A <인증암호> -x AES -X <암호화암호> <서버IP> 2>/dev/null +grep -E "rouser|rwuser|createUser" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# SNMPv3 사용자 생성 +net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser + +# /etc/snmp/snmpd.conf에 추가 +# createUser myuser SHA myauthpass AES myprivpass +# rouser myuser + +systemctl restart snmpd +``` + +### U-60: SNMP Community String 복잡성 설정 +**판단기준:** Community String이 "public", "private"이 아니고 영숫자 10자리 이상 또는 영숫자+특수문자 8자리 이상인 경우 양호 +**점검:** +```bash +grep -i community /etc/snmp/snmpd.conf 2>/dev/null +# AIX +grep -i community /etc/snmpdv3.conf 2>/dev/null +# HP-UX +grep -i community /etc/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser default <복잡한_String값> +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <복잡한_String값> default +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY <새_String> <새_String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-61: SNMP Access Control 설정 +**판단기준:** SNMP 서비스에 접근 제어 설정이 되어 있는 경우 양호 +**점검:** +```bash +# LINUX (Redhat) +grep "com2sec" /etc/snmp/snmpd.conf 2>/dev/null +# LINUX (Debian) +grep -E "rocommunity|rwcommunity" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser <허용_네트워크> + +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <허용_네트워크> + +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY noAuthNoPriv <허용_IP> <넷마스크> - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-62: 로그인 시 경고 메시지 설정 +**판단기준:** 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 양호 +**점검:** +```bash +# 서버 로그온 배너 +cat /etc/motd 2>/dev/null +cat /etc/issue 2>/dev/null +cat /etc/issue.net 2>/dev/null + +# SSH 배너 +grep "^Banner" /etc/ssh/sshd_config + +# Sendmail +grep SmtpGreetingMessage /etc/mail/sendmail.cf 2>/dev/null + +# Postfix +grep smtpd_banner /etc/postfix/main.cf 2>/dev/null + +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# DNS +grep "version" /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# 서버 경고 메시지 +echo "Authorized access only. All activity is monitored." > /etc/motd +echo "Authorized access only." > /etc/issue +echo "Authorized access only." > /etc/issue.net + +# SSH - /etc/ssh/sshd_config +# Banner /etc/issue.net +systemctl restart sshd + +# Sendmail - /etc/mail/sendmail.cf +# SmtpGreetingMessage=Authorized access only + +# Postfix - /etc/postfix/main.cf +# smtpd_banner = Authorized access only + +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only + +# DNS - /etc/named.conf +# version "Not disclosed"; +``` + +### U-63: sudo 명령어 접근 관리 +**판단기준:** /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 양호 +**점검:** +```bash +ls -l /etc/sudoers +``` +**조치:** +```bash +chown root /etc/sudoers +chmod 640 /etc/sudoers +``` + +--- + +## 4. 패치 관리 + +### U-64: 주기적 보안 패치 및 벤더 권고사항 적용 +**판단기준:** 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있는 경우 양호 +**점검:** +```bash +# OS 및 커널 버전 확인 +uname -a +cat /etc/os-release 2>/dev/null +hostnamectl 2>/dev/null + +# 패치 이력 확인 (LINUX) +rpm -qa --last | head -20 2>/dev/null +apt list --upgradable 2>/dev/null + +# SOLARIS +pkg list -af entire@latest 2>/dev/null + +# AIX +oslevel -s +instfix -i | grep ML 2>/dev/null +instfix -i | grep SP 2>/dev/null + +# HP-UX +swlist -l product 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat/CentOS) +yum update -y +# LINUX (Debian/Ubuntu) +apt update && apt upgrade -y + +# SOLARIS +pkg update --accept + +# AIX - smitty installp를 통한 패치 설치 + +# HP-UX +# swinstall -s /tmp/patch.depot +``` + +--- + +## 5. 로그 관리 + +### U-65: NTP 및 시각 동기화 설정 +**판단기준:** NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 양호 +**점검:** +```bash +# NTP +ntpq -pn 2>/dev/null +cat /etc/ntp.conf 2>/dev/null + +# Chrony (RHEL 8+) +chronyc sources 2>/dev/null +cat /etc/chrony.conf 2>/dev/null +``` +**조치:** +```bash +# NTP - /etc/ntp.conf +# server +systemctl restart ntp 2>/dev/null || systemctl restart ntpd 2>/dev/null + +# Chrony - /etc/chrony.conf +# server +systemctl restart chronyd +``` + +### U-66: 정책에 따른 시스템 로깅 설정 +**판단기준:** 로그 기록 정책이 보안 정책에 따라 수립되어 있으며, 로그를 남기고 있는 경우 양호 +**점검:** +```bash +# LINUX +cat /etc/rsyslog.conf 2>/dev/null +ls /etc/rsyslog.d/ 2>/dev/null + +# SOLARIS +cat /etc/syslog.conf 2>/dev/null + +# AIX +cat /etc/syslog.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX - /etc/rsyslog.conf 권장 설정 +cat >> /etc/rsyslog.conf <<'CONF' +*.info;mail.none;authpriv.none;cron.none /var/log/messages +authpriv.* /var/log/secure +mail.* /var/log/maillog +cron.* /var/log/cron +*.emerg * +CONF +systemctl restart rsyslog + +# SOLARIS - /etc/syslog.conf 권장 설정 +# mail.debug /var/log/mail.log +# *.info /var/log/syslog.log +# *.alert /dev/console +# *.emerg * + +# AIX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/error.log +# mail.info /var/adm/mail.log +# auth.info /var/adm/auth.log +# refresh -s syslogd + +# HP-UX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/syslog/error.log +# mail.info /var/adm/syslog/mail.log +# auth.info /var/adm/syslog/auth.log +``` + +### U-67: 로그 디렉터리 소유자 및 권한 설정 +**판단기준:** 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX, SOLARIS +ls -la /var/log/ +# AIX +ls -la /var/adm/ 2>/dev/null +# HP-UX +ls -la /var/adm/syslog/ 2>/dev/null +``` +**조치:** +```bash +# LINUX, SOLARIS +chown root /var/log/* +chmod 644 /var/log/* + +# AIX +chown root /var/adm/* +chmod 644 /var/adm/* + +# HP-UX +chown root /var/adm/syslog/* +chmod 644 /var/adm/syslog/* +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/cii/web-service.md b/skills-ko/kesekit-fix-ko/scripts/cii/web-service.md new file mode 100644 index 0000000..d70ca7c --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/cii/web-service.md @@ -0,0 +1,725 @@ +# 웹 서비스 점검 스크립트 (WEB-01 ~ WEB-26) + +## 1. 계정 관리 + +### WEB-01: Default 관리자 계정명 변경 +**점검:** +```bash +# Tomcat - 기본 계정명(tomcat, admin) 사용 여부 확인 +grep -i 'username=' /conf/server.xml +# JEUS - Security Domains > Account & Policies > Users에서 기본 계정 확인 +``` +**조치:** +```bash +# Tomcat - 기본 계정명을 유추 불가능한 이름으로 변경 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > ADD +# administrator 대신 유추 불가능한 계정명 입력 후 Administrators 그룹 체크 +./stopServer -host <도메인명>:<포트> +./startDomainAdminServer -host <도메인명>:<포트> +``` + +### WEB-02: 취약한 비밀번호 사용 제한 +**점검:** +```bash +# Tomcat +grep -i 'password=' /conf/server.xml +# 비밀번호 복잡도 기준: 2종류 이상 조합 최소 10자리 또는 3종류 이상 조합 최소 8자리 +# (영문대/소문자, 숫자, 특수문자) +``` +**조치:** +```bash +# Tomcat - 복잡도 만족하는 비밀번호 설정 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > 비밀번호 변경 +# SHA-256 이상 암호화 방식 비밀번호 설정 +``` + +### WEB-03: 비밀번호 파일 권한 관리 +**점검:** +```bash +# Tomcat +ls -al /conf/tomcat-users.xml +# IIS +# %systemroot%\system32\config\SAM 파일 속성 > 보안 확인 +# JEUS +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` +**조치:** +```bash +# Tomcat - 비밀번호 파일 권한 600 이하 설정 +chmod 600 /conf/tomcat-users.xml + +# IIS - SAM 파일 속성 > 보안 > 편집 > Administrators, SYSTEM만 허용 + +# JEUS +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` + +--- + +## 2. 서비스 관리 + +### WEB-04: 디렉터리 리스팅 방지 설정 +**점검:** +```bash +# Apache +grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" +# Nginx +grep -i "autoindex" /etc/nginx/nginx.conf +# Tomcat +grep -i "listings" /conf/web.xml +# JEUS +grep -i "allow-indexing" /WEB-INF/jeus-web-dd.xml +# WebtoB +grep -i "Options" /config/http.m | grep -i "Indexes" +``` +**조치:** +```bash +# Apache - httpd.conf 내 모든 디렉터리에서 Indexes 옵션 제거 +vi /conf/httpd.conf +# +# Options -Indexes (Indexes 삭제 또는 -Indexes 설정) +# +systemctl restart apache2 + +# Tomcat - web.xml 내 listings=false 설정 +vi /conf/web.xml +# +# listings +# false +# + +# Nginx - autoindex off 설정 +vi /conf/nginx.conf +# server { autoindex off; } +systemctl restart nginx + +# IIS - IIS 관리자 > 해당 웹사이트 > 디렉터리 검색 > "사용 안 함" 설정 + +# JEUS +vi /WEB-INF/jeus-web-dd.xml +# false + +# WebtoB +vi /config/http.m +# *NODE +# Options = "-Indexes", +wscfl -I http.m && wsdown && wsboot +``` + +### WEB-05: 지정하지 않은 CGI/ISAPI 실행 제한 +**점검:** +```bash +# Apache +grep -i "LoadModule.*cgi" /conf/httpd.conf +grep -i "ExecCGI" /conf/httpd.conf +# Nginx +grep -i "fastcgi_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - CGI 모듈 비활성화 및 ExecCGI 옵션 제거 +vi /conf/httpd.conf +# #LoadModule cgi_module modules/mod_cgi.so +# #LoadModule cgid_module modules/mod_cgid.so +# +# Options -ExecCGI +# +systemctl restart apache2 + +# Tomcat - web.xml 내 CGI 매핑 비활성화(주석 처리) +# + +# Nginx - fastcgi 설정 주석 처리 +# location ~ \.cgi$ { +# #fastcgi_pass :<포트>; +# #include fastcgi_params; +# } + +# IIS - ISAPI 및 CGI 제한 > 사용하지 않는 CGI/ISAPI 모듈 해제 + +# WebtoB - http.m 내 *SVRGROUP, *SERVER, *URI에서 CGI 설정 주석 처리 +``` + +### WEB-06: 상위 디렉터리 접근 제한 설정 +**점검:** +```bash +# Apache +grep -i "AllowOverride" /conf/httpd.conf +# Tomcat +grep -i "allowLinking" /conf/server.xml +# Nginx +grep -i "auth_basic" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - AllowOverride AuthConfig 설정 + .htaccess 인증 파일 생성 +vi /conf/httpd.conf +# +# AllowOverride AuthConfig +# +htpasswd /.htpasswd [사용자명] +systemctl restart apache2 + +# Tomcat - allowLinking 옵션 제거 +vi /conf/server.xml +# (allowLinking="true" 제거) + +# Nginx - 기본 인증으로 디렉터리 접근 제한 +# location /<접근제한 디렉터리>/ { +# auth_basic "Restricted Content"; +# auth_basic_user_file /etc/nginx/.htpasswd; +# } + +# IIS 7.0+ - web.config 내 enableParentPaths="false" 설정 +# + +# WebtoB - UpperDirRestrict = N 설정 +``` + +### WEB-07: 웹 서비스 경로 내 불필요한 파일 제거 +**점검/조치:** +```bash +# Apache +rm -rf /htdocs/manual +rm -rf /manual + +# Tomcat +rm -rf /webapps/docs/<불필요 파일> +# BUILDING.txt, RELEASE-NOTES.txt 등 매뉴얼 파일 포함 + +# Nginx +rm -rf /html/index.html + +# IIS - 샘플 디렉터리 제거 +# c:\inetpub\iissamples +# c:\winnt\help\iishelp +# c:\program files\common files\system\msadc\sample + +# JEUS +rm -rf /docs/manuals/default/web-manager/<불필요 파일> +rm -rf /samples/<불필요 파일> + +# WebtoB +rm -rf /docs/manuals/<불필요 파일> +rm -rf /samples/<불필요 파일> +``` + +### WEB-08: 파일 업로드 및 다운로드 용량 제한 +**점검:** +```bash +# Apache +grep -i "LimitRequestBody" /conf/httpd.conf +# Tomcat +grep -i "maxPostSize" /conf/server.xml +# Nginx +grep -i "client_max_body_size" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - LimitRequestBody 지시자 설정 (5MB = 5000000) +# +# LimitRequestBody 5000000 +# + +# Tomcat - server.xml 내 maxPostSize 설정 + web.xml 내 multipart-config 설정 +# +# +# 2097152 +# 4194304 +# + +# Nginx - client_max_body_size 설정 +# client_max_body_size 5M; +systemctl restart nginx + +# IIS - web.config 내 maxAllowedContentLength 설정 (기본값 30MB) +# applicationHost.config 내 bufferingLimit(4MB) 및 maxRequestEntityAllowed(0.2MB) 설정 + +# JEUS - web.xml 내 max-file-size 설정 +# 5242880 + +# WebtoB - LimitRequestBody 설정 +# LimitRequestBody = 2048000 +``` + +### WEB-09: 웹 서비스 프로세스 권한 제한 +**점검:** +```bash +# 프로세스 실행 계정 확인 +ps -ef | grep httpd | grep -v root +ps -ef | grep nginx +ps -ef | grep tomcat +ps -ef | grep jeus +``` +**조치:** +```bash +# Apache - www-data 계정으로 실행 +vi /envvars +# export APACHE_RUN_USER=www-data +# export APACHE_RUN_GROUP=www-data +chown -R www-data:www-data /etc/apache2/ /var/www/ /var/log/apache2/ +usermod -s /sbin/nologin www-data +systemctl restart apache2 + +# Tomcat - tomcat 전용 계정으로 실행 +vi /etc/systemd/system/tomcat.service +# [Service] +# User=tomcat +# Group=tomcat +chown -R tomcat:tomcat / +usermod -s /sbin/nologin tomcat +systemctl restart tomcat + +# Nginx - nginx 전용 계정으로 실행 +vi /conf/nginx.conf +# user nginx nginx; +adduser --system --no-create-home --shell /bin/false nginx +groupadd nginx && usermod -aG nginx nginx +systemctl restart nginx + +# IIS - 응용프로그램 풀 ID를 ApplicationPoolIdentity로 설정 + +# JEUS - jeus 전용 계정 생성 후 소유권 변경 +useradd -m jeus +chown -R jeus:jeus / +``` + +### WEB-10: 불필요한 프록시 설정 제한 +**점검:** +```bash +# Apache +grep -i "ProxyPass\|ProxyRequests" /conf/httpd.conf +# Tomcat +grep -i "proxyName\|proxyPort" /conf/server.xml +# Nginx +grep -i "proxy_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - 불필요한 Proxy 설정 제거, ProxyRequests Off 유지 +# +# ProxyRequests Off +# + +# Tomcat - Connector 요소에서 불필요한 proxyName, proxyPort 제거 +# Nginx - 불필요한 proxy_pass 설정 제거 +# IIS - 루트 디렉터리에서 불필요한 Proxy 설정 제거 +# JEUS - web.xml 내 불필요한 ReverseProxy 설정 제거 +# WebtoB - http.m 내 REVERSE_PROXY 설정 제거 +``` + +### WEB-11: 웹 서비스 경로 설정 +**조치:** +```bash +# Apache - DocumentRoot를 별도 경로로 변경 +# DocumentRoot [별도의 경로] + +# Tomcat - docBase를 별도 경로로 변경 +# + +# Nginx - root를 별도 경로로 변경 +# root [별도의 경로]; + +# IIS - 사이트 편집 > 실제 경로를 별도 경로로 변경 +# JEUS - Docroot = "[별도의 경로]" +# WebtoB - DOCROOT="[별도의 경로]" +``` + +### WEB-12: 웹 서비스 링크 사용 금지 +**조치:** +```bash +# Apache - FollowSymLinks 옵션 제거 +vi /conf/httpd.conf +# +# Options -FollowSymLinks +# + +# Tomcat - allowLinking 옵션 제거 (기본값: false) +# Nginx - disable_symlinks on 설정 +# location / { disable_symlinks on; } + +# IIS - 홈 디렉터리 내 바로가기 파일 제거 +# JEUS - jeus-web-dd.xml 내 alias 요소 제거 +# WebtoB - http.m 내 ALIAS 절 불필요 설정 제거 +``` + +### WEB-13: 웹 서비스 설정 파일 노출 제한 +**조치:** +```bash +# Tomcat - 불필요한 DB 연결 리소스 설정 제거 후 접근 권한 설정 +chmod 600 /conf/server.xml + +# IIS - 처리기 매핑에서 *.asa/*.asax 항목 제거 +# 요청 필터링에서 "파일 이름 확장명 거부"에 등록 + +# JEUS - domain.xml 내 불필요한 DB 연결 리소스 제거 +chmod 600 /conf/domain.xml +``` + +### WEB-14: 웹 서비스 경로 내 파일의 접근 통제 +**조치:** +```bash +# Apache +chown -R www-data:www-data /conf/apache2.conf +chmod -R 750 /conf/apache2.conf + +# Tomcat +chown -R tomcat:tomcat /conf/web.xml +chmod -R 750 /conf/web.xml + +# Nginx +chown -R nginx:nginx /conf/nginx.conf +chmod -R 750 /conf/nginx.conf + +# IIS - web.config > 속성 > 보안 > 불필요 권한 제거 + +# JEUS +chown -R jeus:jeus /config/security/SYSTEM_DOMAIN/accounts.xml +chmod -R 750 /config/security/SYSTEM_DOMAIN/accounts.xml + +# WebtoB +chown -R webtob:webtob /config/http.m +chmod -R 750 /config/http.m +``` + +### WEB-15: 불필요한 스크립트 매핑 제거 +**점검:** +```bash +# Tomcat - 불필요한 servlet-mapping 확인 +grep -A2 "servlet-mapping" /conf/web.xml +# IIS - 처리기 매핑에서 취약한 확장자 확인 +# (.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +``` +**조치:** +```bash +# Tomcat - 불필요한 servlet-mapping 제거 +# IIS - 처리기 매핑에서 미사용 확장자 매핑 제거 +# JEUS - web.xml 내 불필요한 제거 +``` + +### WEB-16: 웹 서비스 헤더 정보 노출 제한 +**점검:** +```bash +# Apache +grep -i "ServerTokens\|ServerSignature" /conf/httpd.conf +# Nginx +grep -i "server_tokens" /conf/nginx.conf +# WebtoB +grep -i "ServerTokens" /config/http.m +``` +**조치:** +```bash +# Apache - ServerTokens Prod, ServerSignature Off 설정 +vi /conf/httpd.conf +# ServerTokens Prod +# ServerSignature Off + +# Tomcat - server.xml 내 server 값을 임의 정보로 변경 +# +# + ErrorReportValve에 showServerInfo="false" 추가 +# + +# Nginx +# server_tokens off; + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS 7 이전 - JEUSMain.xml 내 command-option 추가 +# -Djeus.servlet.response.header.serverInfo=false +# JEUS 7 - domain.xml 내 response-header 설정 + +# WebtoB +# ServerTokens ProductOnly +# ServerSignature off +``` + +### WEB-17: 웹 서비스 가상 디렉터리 삭제 +**점검/조치:** +```bash +# Apache - 불필요한 Alias 지시자 확인 후 제거 +grep -i "Alias" /conf/httpd.conf + +# Tomcat - Context path 속성값 확인 후 불필요 제거 +grep -i "Context path" /conf/server.xml + +# Nginx - 불필요한 alias 지시자 제거 +grep -i "alias" /conf/nginx.conf + +# WebtoB - NODE절의 불필요한 Alias 설정 삭제 +grep -i "ALIAS" /config/http.m +``` + +### WEB-18: WebDAV 비활성화 +**점검:** +```bash +# Apache +grep -i "Dav On" /conf/httpd.conf +grep -i "LoadModule.*dav" /conf/httpd.conf +# Nginx +grep -i "dav_methods" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - WebDAV 비활성화 +vi /conf/httpd.conf +# +# Dav Off +# +systemctl restart apache2 + +# Nginx - dav_methods 설정 주석 처리 또는 제거 +systemctl restart nginx + +# IIS - ISAPI 및 CGI 제한 > WebDAV 항목 > 확장 경로 실행 허용 체크 해제 + +# WebtoB - VHOST 절에서 PUT, DELETE, MKCOL, COPY, MOVE 메소드 제거 +``` + +--- + +## 3. 보안 설정 + +### WEB-19: SSI(Server Side Includes) 사용 제한 +**점검:** +```bash +# Apache +grep -i "Includes" /conf/httpd.conf +# Tomcat +grep -i "SSIServlet\|SSIFilter" /conf/web.xml +# Nginx +grep -i "ssi on" /conf/nginx.conf +# WebtoB +grep -i "SSI" /config/http.m +``` +**조치:** +```bash +# Apache - Options Includes 제거 +# Options (Includes 삭제) + +# Tomcat - SSI 서블릿/필터 설정 주석 처리 또는 삭제 +# Nginx - ssi off; 설정 +# IIS - 처리기 매핑에서 .shtml, .shtm, .stm 확장자 매핑 제거 +# WebtoB - *SVRGROUP, *SERVER에서 SSI 관련 설정 삭제 +``` + +### WEB-20: SSL/TLS 활성화 +**점검:** +```bash +# Apache +apache2ctl -M | grep ssl +# Nginx +grep -i "ssl_protocols" /conf/nginx.conf +# WebtoB +grep -i "SSLFLAG\|SSLNAME" /config/http.m +``` +**조치:** +```bash +# Apache - SSL 모듈 활성화 및 인증서 설정 +vi /sites-available/default-ssl.conf +# +# SSLEngine on +# SSLCertificateFile /path/to/cert.crt +# SSLCertificateKeyFile /path/to/privkey.key +# +a2ensite default-ssl +systemctl restart apache2 + +# Nginx - SSL 인증서 설정 +# server { +# listen 443 ssl; +# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; +# ssl_protocols TLSv1.2 TLSv1.3; +# ssl_prefer_server_ciphers on; +# } +systemctl restart nginx + +# IIS - SSL 인증서 바인딩 설정 (IIS 관리자 > 사이트 바인딩 > https 추가) + +# WebtoB - http.m 내 SSLFLAG = Y, SSLNAME 설정 +# *SSL 절에 인증서 경로 설정 +# Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3" +``` + +### WEB-21: HTTP 리디렉션 +**조치:** +```bash +# Apache - HTTP → HTTPS 리디렉션 설정 +# +# RewriteEngine On +# RewriteCond %{HTTPS} off +# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# + +# Nginx +# server { +# listen 80; +# return 301 https://$host$request_uri; +# } + +# IIS - 사이트 바인딩 종류를 HTTPS로 설정 + +# WebtoB - URLRewrite = Y 설정 +# RewriteCond %{HTTPS} off +# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +``` + +### WEB-22: 에러 페이지 관리 +**조치:** +```bash +# Apache - 에러 코드별 일원화된 에러 페이지 설정 +vi /sites-available/000-default.conf +# ErrorDocument 400 /error.html +# ErrorDocument 401 /error.html +# ErrorDocument 403 /error.html +# ErrorDocument 404 /error.html +# ErrorDocument 500 /error.html +systemctl restart apache2 + +# Tomcat - web.xml 내 에러 페이지 설정 +# +# 404 +# /error/404.html +# + +# Nginx +# error_page 404 /404.html; +# error_page 500 502 503 504 /50x.html; +# location = /404.html { root html; internal; } + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS - web.xml 내 에러 메시지 설정 +# WebtoB - *ERRORDOCUMENT 절에 에러 페이지 설정 +# 503 status = 503, url = "/503.html" +``` + +### WEB-23: LDAP 알고리즘 적절하게 구성 +**점검:** +```bash +# Tomcat - 비밀번호 다이제스트 알고리즘 확인 +grep 'digest=' /conf/server.xml +``` +**조치:** +```bash +# Tomcat - SHA-256 이상 알고리즘 설정 +vi /conf/server.xml +# digest="SHA-256" +systemctl restart tomcat +``` + +--- + +## 4. 패치 및 로그 관리 + +### WEB-24: 별도의 업로드 경로 사용 및 권한 설정 +**조치:** +```bash +# Apache - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +# apache2.conf 내 업로드 디렉터리 접근 제한 +# +# Require all denied +# + +# Tomcat - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ + +# Nginx - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ + +# IIS - 웹 서비스 외부에 업로드 디렉터리 생성, IIS 구동 계정에 쓰기 권한 부여 + +# JEUS - 업로드 디렉터리 권한 설정 +chmod 750 +chown jeus:jeus + +# WebtoB - 업로드 디렉터리 권한 설정 +chmod 750 +chown tmax:tmax +``` + +### WEB-25: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```bash +# Apache +/bin/httpd -v + +# Tomcat +cd /lib && java -cp catalina.jar org.apache.catalina.util.ServerInfo + +# Nginx +/sbin/nginx -v + +# IIS +reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v VersionString + +# JEUS +jeusadmin -version + +# WebtoB +wscfl -version +``` +**참고 사이트:** +- Apache: http://httpd.apache.org/download.cgi +- Tomcat: https://tomcat.apache.org/ +- Nginx: https://nginx.org/en/download.html +- IIS: https://www.iis.net/downloads/microsoft +- JEUS/WebtoB: https://technet.tmaxsoft.com/ + +### WEB-26: 로그 디렉터리 및 파일 권한 설정 +**점검:** +```bash +# Apache +ls -al / +# Tomcat +ls -al /logs/ +# Nginx +ls -al /var/log/nginx/ +# JEUS +ls -al /domains/jeus_domain/servers/sample/logs/ +# WebtoB +ls -al /log/ +``` +**조치:** +```bash +# Apache +chmod o-rwx /* + +# Tomcat +chmod o-rwx /logs/* + +# Nginx +chmod o-rwx /var/log/nginx/* + +# IIS - C:\Windows\System32\config 속성 > 보안 > Everyone 권한 제거 +# C:\Windows\System32\LogFiles에서도 동일 조치 + +# JEUS - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /domains/jeus_domain/servers/sample/logs +chmod 640 /domains/jeus_domain/servers/sample/logs/* + +# WebtoB - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /log/ +chmod 640 /log/* +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/cii/webapp.md b/skills-ko/kesekit-fix-ko/scripts/cii/webapp.md new file mode 100644 index 0000000..83e1041 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/cii/webapp.md @@ -0,0 +1,880 @@ +# Web Application 점검 스크립트 + +## 1. SSTI (Server Side Template Injection) +**취약 패턴:** +```python +# Python (Jinja2) - 사용자 입력을 직접 템플릿에 삽입 +template = param # 사용자 입력이 직접 템플릿으로 사용됨 +return render_template_string(template) +``` +**안전한 구현:** +```python +# Python (Jinja2) - 사용자 입력을 템플릿 변수로 전달 +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +``` + +--- + +## 2. SQL Injection (SI) + +### 취약 패턴 +```java +// Java - 문자열 연결 방식 쿼리 (취약) +String sql = "SELECT * FROM users WHERE username = '" + userInput + "'"; +Statement stmt = connection.createStatement(); +ResultSet rs = stmt.executeQuery(sql); +``` + +### 안전한 구현 - PreparedStatement (Java) +```java +// Java - PreparedStatement 사용 +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +ResultSet resultSet = preparedStatement.executeQuery(); +``` + +### 안전한 구현 - ORM (JPA/Hibernate) +```java +// Java - JPQL 파라미터 바인딩 +public class ItemService { + @PersistenceContext + private EntityManager em; + public List findItemsByUserInput(String userInput) { + String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; + Query query = em.createQuery(jpql, Item.class); + query.setParameter("userInput", userInput); + return query.getResultList(); + } +} +``` + +### 안전한 구현 - MyBatis 파라미터 바인딩 +```xml + + + INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) + VALUES (#{num}, #{name}, #{age}, #{grade}) + + + DELETE FROM STUDENTS WHERE NUM = #{num} + +``` + +### 안전한 구현 - SQL 키워드 필터링 (Java) +```java +public static String sanitize(String input) { + if (input == null) return null; + String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; + String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; + Pattern regex = Pattern.compile(pattern + "|--"); + Matcher matcher = regex.matcher(input); + return matcher.replaceAll(" "); +} +``` + +### 안전한 구현 - PreparedStatement (PHP) +```php +// PHP - PDO PreparedStatement +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +``` + +### 안전한 구현 - 예외 처리 +```java +// Java - 적절한 예외 처리 (에러 메시지 노출 방지) +try { + // 데이터베이스 작업 +} catch (SQLException e) { + e.printStackTrace(); // 로그에만 기록 + System.out.println("An error occurred. Please try again later."); // 사용자에게 일반 메시지 +} +``` +```php +// PHP - PDO 예외 처리 +try { + // 데이터베이스 작업 +} catch (PDOException $e) { + error_log($e->getMessage()); + echo 'SQL Exception'; // 상세 에러 노출 금지 +} +``` + +### 특수문자 필터링 대상 +| 문자 | 설명 | +|------|------| +| `'` | 문자 데이터 구분 기호 | +| `;` | 쿼리 구분 기호 | +| `--`, `#` | 라인 주석 구분 기호 | +| `/* */` | 블록 주석 | + +--- + +## 3. 디렉터리 인덱싱 (DI) +**조치:** +```apache +# Apache - Indexes 옵션 제거 + + Options FollowSymLinks # Indexes 제거 + +``` +```xml + + + listings + false + +``` +```nginx +# Nginx +server { + location / { + autoindex off; + } +} +``` + +--- + +## 4. 에러 페이지 적용 미흡 (EP) +**조치:** +```apache +# Apache - 서버 정보 노출 제거 및 사용자 에러 페이지 정의 +ServerTokens Prod +ServerSignature Off +ErrorDocument 404 /main/error.html +ErrorDocument 405 /main/error.html +``` +```xml + + + + +``` +```xml + + + 404 + /errors/404 + + + 500 + /errors/500 + + + java.lang.Exception + /errors/500 + +``` +```nginx +# Nginx - 서버 정보 제거 및 사용자 에러 페이지 +http { + server_tokens off; +} +server { + error_page 400 401 402 405 /custom_4xx.html; + error_page 404 /custom_404.html; + error_page 500 502 503 504 /custom_5xx.html; + location = /custom_404.html { root /var/www/html; internal; } + location = /custom_4xx.html { root /var/www/html; internal; } + location = /custom_5xx.html { root /var/www/html; internal; } +} +``` + +--- + +## 5. 정보 누출 (IL) +**조치 항목:** +1. robots.txt, web.config, nginx.conf로 검색 차단 디렉터리/확장자 지정 +2. 백업 파일 삭제 (*.bak, *.backup, *.org, *.old, *.zip, *.log, *.sql, *.tmp, *.temp) +3. 초기 페이지/디렉터리/배너 삭제 +4. 개인정보 마스킹 처리 (홍\*동, 901231-1\*\*\*\*\*\*, 010-1234-\*\*\*\* 등) +5. 개발 중 주석/디버그 정보 제거 + +--- + +## 6. 크로스사이트 스크립트 - XSS (XS) + +### 취약 패턴 +```javascript +// JavaScript - innerHTML 사용 (취약) +document.getElementById('output').innerHTML = userInput; +// document.write(userInput); // 취약 +``` + +### 안전한 구현 - HTML Entity 변환 (Java) +```java +public static String sanitizeInput(String input) { + if (input == null) return null; + return input.replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll("\"", """) + .replaceAll("'", "'"); +} +``` + +### 안전한 구현 - HTML Entity 변환 (PHP) +```php +function escapeHtml($input) { + return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { + $escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); + $additionalEscapes = [ + '\\' => '\', + '(' => '(', + ')' => ')', + '#' => '#' + ]; + return strtr($escaped, $additionalEscapes); +} +``` + +### 특수문자 필터링 대상 +| 변경 전 | 변경 후 | +|---------|---------| +| `<` | `<` | +| `>` | `>` | +| `"` | `"` | +| `(` | `(` | +| `)` | `)` | +| `#` | `#` | +| `&` | `&` | + +### 쿠키 보안 설정 +``` +Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict +``` + +--- + +## 7. 크로스사이트 요청 위조 - CSRF (CF) + +### 안전한 구현 - CSRF Token (Java/Spring) +```java +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + String csrfToken = generateCsrfToken(); + session.setAttribute("csrfToken", csrfToken); + model.addAttribute("csrfToken", csrfToken); + return "index"; +} + +// CSRF Token 생성 함수 +private String generateCsrfToken() { + SecureRandom secureRandom = new SecureRandom(); + byte[] token = new byte[16]; + secureRandom.nextBytes(token); + return Base64.getUrlEncoder().encodeToString(token); +} + +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, + @RequestParam("csrfToken") String csrfToken, + HttpServletRequest request, Model model) { + HttpSession session = request.getSession(); + String sessionToken = (String) session.getAttribute("csrfToken"); + if (sessionToken == null || !sessionToken.equals(csrfToken)) { + throw new IllegalStateException("Invalid CSRF token"); + } + String sanitizedInput = sanitizeInput(input); + inputs.add(sanitizedInput); + return "index"; +} +``` + +### HTML 폼에 CSRF Token 포함 +```html +
+ + + + +
+``` + +### 추가 방어 조치 +1. Referer/Origin 헤더 검증으로 외부 도메인 요청 차단 +2. SameSite 쿠키 옵션 적용 +3. HTTPS 환경에서 Secure, HttpOnly 속성 적용 + +--- + +## 8. 서버사이드 요청 위조 - SSRF (SF) + +### 안전한 구현 - URL 화이트리스트 (Java) +```java +private final List allowedDomains = Arrays.asList("example.com"); +private final Map> allowedIPsAndPorts = new HashMap<>(); + +public UrlValidator() { + allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); + allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} + +public boolean isUrlAllowed(String urlString) { + try { + URL url = new URL(urlString); + String protocol = url.getProtocol(); + // HTTP와 HTTPS만 허용 + if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { + return false; + } + String host = url.getHost(); + int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); + if (allowedDomains.contains(host)) return true; + if (allowedIPsAndPorts.containsKey(host)) { + return allowedIPsAndPorts.get(host).contains(port); + } + return false; + } catch (Exception e) { + return false; + } +} +``` + +### 안전한 구현 - URL 화이트리스트 (PHP) +```php +function isUrlAllowed($url) { + $allowedDomains = ['example.com', 'api.example.com']; + $allowedIPsAndPorts = [ + '192.168.10.10' => [80, 443, 8000], + '10.0.0.1' => [80, 443] + ]; + $parsedUrl = parse_url($url); + if (!$parsedUrl || !isset($parsedUrl['host'])) return false; + + $host = $parsedUrl['host']; + $port = isset($parsedUrl['port']) ? $parsedUrl['port'] + : ($parsedUrl['scheme'] === 'https' ? 443 : 80); + if (in_array($host, $allowedDomains, true)) return true; + if (filter_var($host, FILTER_VALIDATE_IP)) { + if (array_key_exists($host, $allowedIPsAndPorts)) { + return in_array($port, $allowedIPsAndPorts[$host], true); + } + } + return false; +} +``` + +### PHP 설정 강화 +```ini +; php.ini - 원격 URL 접근 차단 +allow_url_fopen=Off +allow_url_include=Off +``` + +### 추가 방어 조치 +1. 내부 네트워크 대역 및 관리용 포트 요청 차단 +2. http, https 외 프로토콜(file://, gopher://, data://) 차단 +3. 에러 발생 시 응답값 노출 금지 +4. 애플리케이션 서버와 내부 시스템 간 네트워크 분리 + +--- + +## 9. 약한 비밀번호 정책 (BF) +**비밀번호 복잡성 검증 (JavaScript):** +```javascript +function isPasswordStrong(password) { + const minLength = 8; + const hasUpperCase = /[A-Z]/.test(password); + const hasLowerCase = /[a-z]/.test(password); + const hasNumber = /[0-9]/.test(password); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); + return password.length >= minLength + && hasUpperCase && hasLowerCase + && hasNumber && hasSpecialChar; +} +``` +**취약 ID 예시:** admin, administrator, manager, guest, tomcat, root, user +**취약 비밀번호 예시:** abcd, 1234, 1111, test, password, public, 빈 비밀번호, ID와 동일 + +--- + +## 10. 불충분한 인증 절차 (IA) + +### 안전한 구현 - 재인증 로직 (Java) +```java +// 중요 페이지 접근 시 세션 기반 인증 검증 +public String editProfile(HttpSession session, Model model) { + User user = (User) session.getAttribute("user"); + Boolean isVerified = (Boolean) session.getAttribute("isVerified"); + if (user == null || isVerified == null || !isVerified) { + return "redirect:/user/authenticate"; + } + model.addAttribute("user", user); + return "edit_profile"; +} + +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { + if (input.equals(code)) { + session.setAttribute("isVerified", true); + return "redirect:/user/edit_profile"; + } else { + return "redirect:/user/authenticate?error=true"; + } +} +``` + +### 안전한 구현 - 접근 통제 공통 모듈 (Java) +```java +public class AccessControl { + public static boolean isAuthenticated(HttpSession session) { + return session.getAttribute("user") != null; + } + public static boolean isVerified(HttpSession session) { + return Boolean.TRUE.equals(session.getAttribute("isVerified")); + } +} +``` + +--- + +## 11. 불충분한 권한 검증 (IN) + +### 안전한 구현 - 서버 사이드 세션 검증 (Java) +```java +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { + User currentUser = (User) session.getAttribute("currentUser"); + if (currentUser == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); + } + Inquiry inquiry = inquiryService.findInquiryById(id); + if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); + } + model.addAttribute("inquiry", inquiry); + return "inquiry_detail"; +} +``` + +--- + +## 12. 취약한 비밀번호 복구 절차 (PR) + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (Java) +```java +private static final String CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +private static final int PASSWORD_LENGTH = 12; + +private String generateTemporaryPassword() { + SecureRandom secureRandom = new SecureRandom(); + StringBuilder password = new StringBuilder(PASSWORD_LENGTH); + for (int i = 0; i < PASSWORD_LENGTH; i++) { + int randomIndex = secureRandom.nextInt(CHARACTERS.length()); + password.append(CHARACTERS.charAt(randomIndex)); + } + return password.toString(); +} +``` + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (PHP) +```php +function generateRandomPassword($length = 12) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; + $charactersLength = strlen($characters); + $randomPassword = ''; + for ($i = 0; $i < $length; $i++) { + $randomPassword .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomPassword; +} +``` + +--- + +## 13. 프로세스 검증 누락 (PV) + +### 안전한 구현 - 세션 기반 접근 통제 (Java/Spring) +```java +// 인터셉터 설정 - 비공개/공개 페이지 구분 +public class SessionConfig implements WebMvcConfigurer { + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SessionInterceptor()) + .addPathPatterns("/home", "/board/**") + .excludePathPatterns("/login", "/register", "/error"); + } +} + +public class SessionInterceptor implements HandlerInterceptor { + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + return true; + } +} +``` + +### 안전한 구현 - 플로우 제어 (PHP) +```php +session_start(); +if ($step_completed) { + $_SESSION['step1_completed'] = true; + header('Location: step2.php'); + exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { + header('Location: step1.php'); // 1단계 미완료 시 리다이렉트 + exit; +} +``` + +--- + +## 14. 악성 파일 업로드 (FU) + +### 안전한 구현 - 파일 업로드 보안 (Java) +```java +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of( + "image/jpeg", "image/png", "application/pdf", "text/plain"); + +// 파일명 정규화 +private static String normalizeFilename(String filename) { + if (filename == null) return null; + String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); + name = Normalizer.normalize(name, Normalizer.Form.NFC); + name = name.replace("\0", ""); + name = name.replaceAll("[<>:\"/\\\\|?*]", ""); + name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); + return name; +} + +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { + String safe = normalizeFilename(filename); + int dotCount = safe.length() - safe.replace(".", "").length(); + if (dotCount != 1) return ""; // 이중 확장자 차단 + int idx = safe.lastIndexOf('.'); + return (idx == -1) ? "" : safe.substring(idx + 1).toLowerCase(); +} + +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { + String original = file.getOriginalFilename(); + String ext = getExtension(original); + if (!Arrays.asList(ALLOWED_EXTENSIONS).contains(ext)) { + throw new IOException("허용되지 않은 확장자"); + } + // MIME 시그니처 검증 + Tika tika = new Tika(); + String mime = tika.detect(file.getInputStream()); + if (!ALLOWED_MIME.contains(mime)) { + throw new IOException("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; + Path savePath = Paths.get(uploadDir, newName); + file.transferTo(savePath.toFile()); + return newName; +} +``` + +### 안전한 구현 - 파일 업로드 보안 (PHP) +```php +function normalize_filename($filename) { + $filename = urldecode($filename); + $filename = normalizer_normalize($filename, Normalizer::FORM_C); + $filename = str_replace("\0", "", $filename); + $filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); + $filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); + return $filename; +} + +function is_valid_extension($filename, $allowed_exts) { + $safe = normalize_filename($filename); + if (substr_count($safe, '.') !== 1) return false; // 이중 확장자 차단 + $ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); + return in_array($ext, $allowed_exts, true); +} + +function save_upload($file, $uploadDir) { + $allowed_exts = ['jpg', 'jpeg', 'png', 'pdf', 'txt']; + $allowed_mime = ['image/jpeg', 'image/png', 'application/pdf', 'text/plain']; + + if (!is_valid_extension($file['name'], $allowed_exts)) { + throw new Exception("허용되지 않은 확장자"); + } + $mime = mime_content_type($file['tmp_name']); + if (!in_array($mime, $allowed_mime, true)) { + throw new Exception("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $newName = bin2hex(random_bytes(16)) . '.' . $ext; + $dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; + if (!move_uploaded_file($file['tmp_name'], $dest)) { + throw new Exception("파일 저장 실패"); + } + return $newName; +} +``` + +### 핵심 보안 조치 +1. 확장자 화이트리스트 검증 + MIME 타입 검증 +2. 파일명 난수화 (UUID 등) +3. 업로드 경로를 웹 디렉터리 외부에 배치 +4. 업로드된 파일의 실행 권한 제거 + +--- + +## 15. 파일 다운로드 (FD) + +### 안전한 구현 - 파일명 검증 (Java) +```java +public class FileDownloadUtil { + // 파일명에 영문, 숫자, 일부 특수문자만 허용 + public static boolean isValidFileName(String fileName) { + return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); + } + + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "png"); + + public static boolean isAllowedExtension(String filePath) { + String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + return ALLOWED_EXTENSIONS.contains(extension); + } +} + +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename) throws IOException { + if (!FileDownloadUtil.isValidFileName(filename) + || !FileDownloadUtil.isAllowedExtension(filename)) { + return ResponseEntity.badRequest().build(); + } + // ... 다운로드 로직 +} +``` + +### 안전한 구현 - 경로 정규화 (PHP) +```php +if (isset($_GET['file'])) { + $file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); + $filePath = realpath('../uploads/' . $file); // 경로 정규화 + // 파일 경로가 지정된 디렉터리 내에 있는지 확인 + if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { + downloadFile($filePath); + } else { + echo "잘못된 파일 경로입니다."; + exit; + } +} +``` + +### 우회 공격 대응 +| 인코딩 방식 | 예시 | +|-------------|------| +| URL 인코딩 | `.(%2e)`, `/(%2f)`, `\(%5c)` | +| 더블 URL 인코딩 | `.(%252e)`, `/(%252f)` | +| 16bit 유니코드 | `.(%u002e)`, `/(%u2215)` | +| 특수문자 중첩 | `....//` → `../` | +| 종단 문자 추가 | `[파일명]%00.jpg` | + +--- + +## 16. 불충분한 세션 관리 (IS) + +### 안전한 구현 - 세션 고정 방지 (Java/Spring) +```java +@RequestMapping("/login") +public String login(HttpServletRequest request) { + request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 + return "redirect:/home"; +} + +// Spring Security 설정 +@Override +protected void configure(HttpSecurity http) throws Exception { + http.sessionManagement() + .sessionFixation().migrateSession() + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(1).maxSessionsPreventsLogin(false) + .expiredUrl("/login?expired"); +} +``` + +### 세션 만료 시간 설정 +```xml + + + 60 + +``` +```properties +# Spring Boot application.properties +server.servlet.session.timeout=60m +``` +```php +// PHP - 세션 재생성 및 만료 설정 +session_start(); +session_regenerate_id(true); // 예측 불가능한 세션 ID 생성 +ini_set('session.gc_maxlifetime', 3600); // 60분 +ini_set('session.cookie_lifetime', 3600); +``` + +### JWT 보안 설정 +| 안전한 알고리즘 | 설명 | +|----------------|------| +| HS256~512 | 비밀 키 기반 HMAC 해시 | +| RS256~512 | 비대칭 키 RSA 서명 | +| ES256~512 | 타원 곡선 암호화 서명 | + +| 취약한 알고리즘 | 설명 | +|----------------|------| +| HS1, RS1 | SHA-1 기반 (취약) | +| none | 서명 생략 (위험) | +| plaintext | 평문 서명 (위험) | + +--- + +## 17. 데이터 평문 전송 (SN) +**조치:** +```apache +# Apache - TLSv1.2 이상 사용, SSLv2/v3 비활성화 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +``` +``` +# IIS - 레지스트리에서 SSL 2.0, 3.0 비활성화 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] +"Enabled"=dword:00000000 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] +"Enabled"=dword:00000000 +``` + +--- + +## 18. 쿠키 변조 (CC) + +### 안전한 구현 - AES + HMAC 쿠키 (Java) +```java +public class CookieUtil { + private static final int IV_LEN = 16, HMAC_LEN = 32; + private final byte[] encKey; // AES-256 키 (32 bytes) + private final byte[] hmacKey; // HMAC 키 + + // 보안 쿠키 생성 + public void addSecureCookie(HttpServletResponse resp, String name, + String plaintext, int maxAgeSec) throws Exception { + byte[] iv = new byte[IV_LEN]; + new SecureRandom().nextBytes(iv); + + // AES-256-CBC 암호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, + new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // HMAC 생성 + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); + mac.update(iv); + mac.update(ciphertext); + byte[] hmac = mac.doFinal(); + + // payload = IV + HMAC + 암호문 + byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; + System.arraycopy(iv, 0, payload, 0, iv.length); + System.arraycopy(hmac, 0, payload, iv.length, hmac.length); + System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); + + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); + + // HttpOnly, Secure, SameSite 속성 설정 + String header = String.format( + "%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", + name, encoded, maxAgeSec); + resp.addHeader("Set-Cookie", header); + } +} +``` + +--- + +## 19. 관리자 페이지 노출 (AE) +**조치:** +1. 유추하기 어려운 URL 및 포트로 관리자 페이지 변경 +2. 지정된 IP만 관리자 페이지 접근 허용 +3. 관리자 로그인 시 2차 인증(OTP, VPN, 인증서) 적용 +4. 하위 페이지별 세션 검증 구현 + +--- + +## 20. 자동화 공격 (CC) +**조치:** +1. 로그인 시도, 게시글 등록, SMS 발송 등에 횟수 제한 설정 +2. CAPTCHA 등 일회성 확인 로직 구현 +3. IDS/IPS 시스템으로 대량 패킷 감지 및 차단 +4. 로그인 실패 3~5회 초과 시 계정 잠금 로직 구현 + +--- + +## 21. 불필요한 Method 악용 (WM) + +### 조치 - Apache +```bash +# WebDAV 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs + +# 불필요한 메소드 제한 +# /etc/apache2/apache2.conf + + Dav Off + + Order Allow,Deny + Deny from all + + + +# TRACE 메소드 비활성화 +TraceEnable Off + +# CONNECT 메소드 비활성화 (mod_rewrite) + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} ^CONNECT + RewriteRule .* - [F] + +``` + +### 조치 - Tomcat +```xml + + + readonly + true + + + + +``` + +### 조치 - Nginx +```nginx +# WebDAV 비활성화 - dav_methods 지시어 삭제 +# Nginx는 0.5.17 이후 TRACE를 405로 거부 +# CONNECT 메소드는 기본적으로 미지원 +``` + +### 조치 - IIS +``` +# IIS 6.0 이상: 요청 필터링 > HTTP 동사 > 동사 거부에 TRACE 추가 +# WebDAV 기능 비활성화 확인 +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/cii/windows.md b/skills-ko/kesekit-fix-ko/scripts/cii/windows.md new file mode 100644 index 0000000..e2970e3 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/cii/windows.md @@ -0,0 +1,1489 @@ +# Windows 서버 취약점 점검/조치 스크립트 +> KISA 주요정보통신기반시설 기술적 취약점 분석평가 가이드 (W-01 ~ W-64) + +--- + +## 1. 계정 관리 + +### W-01: Administrator 계정 이름 변경 등 보안성 강화 (상) +**점검:** +```powershell +# Administrator(SID-500) 계정명 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select-Object Name, Enabled, SID + +# 로컬 보안 정책에서 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "NewAdministratorName" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# Administrator 계정명을 유추 불가능한 이름으로 변경 +Rename-LocalUser -Name "Administrator" -NewName "yourCustomAdmin" + +# 또는 wmic 사용 +wmic useraccount where "SID like '%-500'" rename "yourCustomAdmin" + +# GPO 방식: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: Administrator 계정 이름 바꾸기" 설정 +``` + +--- + +### W-02: Guest 계정 비활성화 (상) +**점검:** +```powershell +# Guest 계정 활성화 여부 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled + +# net 명령으로 확인 +net user Guest +``` +**조치:** +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" + +# 또는 net 명령 +net user Guest /active:no +``` + +--- + +### W-03: 불필요한 계정 제거 (상) +**점검:** +```powershell +# 전체 로컬 사용자 계정 목록 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Format-Table + +# 장기 미사용 계정 확인 (90일 이상 미로그인) +Get-LocalUser | Where-Object { + $_.Enabled -eq $true -and + $_.LastLogon -lt (Get-Date).AddDays(-90) +} | Select-Object Name, LastLogon +``` +**조치:** +```powershell +# 불필요한 계정 비활성화 +Disable-LocalUser -Name "<불필요한계정명>" + +# 불필요한 계정 삭제 +Remove-LocalUser -Name "<불필요한계정명>" +``` + +--- + +### W-04: 계정 잠금 임계값 설정 (상) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts + +# 상세 확인 (secedit) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutBadCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 임계값 5회로 설정 +net accounts /lockoutthreshold:5 + +# GPO 방식: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 임계값" = 5 +``` + +--- + +### W-05: 해독 가능한 암호화를 사용하여 암호 저장 해제 (상) +**점검:** +```powershell +# 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ClearTextPassword" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "해독 가능한 암호화를 사용하여 암호 저장" = 사용 안 함 +# secedit 인라인 설정 +secedit /export /cfg C:\secpol_tmp.cfg +(Get-Content C:\secpol_tmp.cfg) -replace "ClearTextPassword = 1","ClearTextPassword = 0" | Set-Content C:\secpol_tmp.cfg +secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol_tmp.cfg /areas SECURITYPOLICY +Remove-Item C:\secpol_tmp.cfg -Force +``` + +--- + +### W-06: 관리자 그룹에 최소한의 사용자 포함 (상) +**점검:** +```powershell +# Administrators 그룹 구성원 확인 +Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource + +# net 명령 +net localgroup Administrators +``` +**조치:** +```powershell +# 불필요한 계정을 Administrators 그룹에서 제거 +Remove-LocalGroupMember -Group "Administrators" -Member "<불필요한계정>" + +# 관리 업무용 계정과 일반 업무용 계정을 분리하여 운용 +``` + +--- + +### W-07: Everyone 사용 권한을 익명 사용자에 적용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous +# 값이 0이면 양호 + +# 로컬 보안 정책 내보내기로 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "EveryoneIncludesAnonymous" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: Everyone 사용 권한을 익명 사용자에게 적용" = 사용 안 함 +``` + +--- + +### W-08: 계정 잠금 기간 설정 (중) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts +# "잠금 기간(분)"과 "잠금 관찰 창(분)" 확인 + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutDuration|ResetLockoutCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 기간 60분, 잠금 수 원래대로 설정 기간 60분 +net accounts /lockoutduration:60 +net accounts /lockoutwindow:60 + +# GPO: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 기간" = 60분 +# "다음 시간 후 계정 잠금 수를 원래대로 설정" = 60분 +``` + +--- + +### W-09: 비밀번호 관리 정책 설정 (상) +**점검:** +```powershell +# 암호 정책 확인 +net accounts + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MinimumPasswordLength|PasswordComplexity|MaximumPasswordAge|MinimumPasswordAge|PasswordHistorySize" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 암호 정책 설정 +net accounts /minpwlen:8 /maxpwage:90 /minpwage:1 /uniquepw:4 + +# GPO: 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "암호는 복잡성을 만족해야 함" = 사용 +# "최소 암호 길이" = 8문자 +# "최대 암호 사용 기간" = 90일 +# "최소 암호 사용 기간" = 1일 +# "최근 암호 기억" = 4개 암호 기억됨 +``` + +--- + +### W-10: 마지막 사용자 이름 표시 안 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 마지막 사용자 이름 표시 안 함" = 사용 +``` + +--- + +### W-11: 로컬 로그온 허용 (중) +**점검:** +```powershell +# 로컬 로그온 허용 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeInteractiveLogonRight" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force + +# Administrators, IUSR_ 외 다른 계정이 있으면 취약 +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "로컬 로그온 허용" 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹 제거 + +# ntrights 유틸리티 사용 (Windows Resource Kit) +# ntrights -u "<제거할계정>" -r SeInteractiveLogonRight +``` + +--- + +### W-12: 익명 SID/이름 변환 허용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 (Windows 2003 이상) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LSAAnonymousNameLookup" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: 익명 SID/이름 변환 허용" = 사용 안 함 +``` + +--- + +### W-13: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한" = 사용 +``` + +--- + +### W-14: 원격터미널 접속 가능한 사용자 그룹 제한 (중) +**점검:** +```powershell +# Remote Desktop Users 그룹 구성원 확인 +Get-LocalGroupMember -Group "Remote Desktop Users" | Select-Object Name, ObjectClass + +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +# 0이면 원격 데스크톱 허용 상태 +``` +**조치:** +```powershell +# 관리자 외 별도 원격 접속 계정 생성 +New-LocalUser -Name "rdpUser" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -FullName "RDP 전용 사용자" +Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpUser" + +# 불필요한 계정 제거 +Remove-LocalGroupMember -Group "Remote Desktop Users" -Member "<불필요한계정>" +``` + +--- + +## 2. 서비스 관리 + +### W-15: 사용자 개인키 사용 시 암호 입력 (상) +**점검:** +```powershell +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ForceKeyProtection" C:\secpol_tmp.cfg +# 값이 2이면 양호 (키를 사용할 때마다 암호 입력) +Remove-Item C:\secpol_tmp.cfg -Force + +# 레지스트리 직접 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection +``` +**조치:** +```powershell +# 레지스트리 설정 (2 = 키를 사용할 때마다 암호 매번 입력) +reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection /t REG_DWORD /d 2 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용" +# = "키를 사용할 때마다 암호를 매 번 입력해야 함" +``` + +--- + +### W-16: 공유 권한 및 사용자 그룹 설정 (상) +**점검:** +```powershell +# 공유 폴더 목록 확인 +Get-SmbShare | Select-Object Name, Path, Description | Format-Table + +# 공유 폴더 권한에서 Everyone 확인 +Get-SmbShare | ForEach-Object { + $share = $_.Name + Get-SmbShareAccess -Name $share | Where-Object { $_.AccountName -like "*Everyone*" } | + Select-Object @{N='Share';E={$share}}, AccountName, AccessControlType, AccessRight +} +``` +**조치:** +```powershell +# 공유 폴더에서 Everyone 권한 제거 +Revoke-SmbShareAccess -Name "<공유명>" -AccountName "Everyone" -Force + +# 필요한 계정에 적절한 권한 추가 +Grant-SmbShareAccess -Name "<공유명>" -AccountName "<계정명>" -AccessRight Read -Force +``` + +--- + +### W-17: 하드디스크 기본 공유 제거 (상) +**점검:** +```powershell +# 기본 공유 확인 +net share +Get-SmbShare | Where-Object { $_.Name -match '^\w\$|^ADMIN\$' } | Select-Object Name, Path + +# AutoShareServer 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks 2>$null +``` +**조치:** +```powershell +# 기본 공유 중지 +net share C$ /delete +net share D$ /delete +net share ADMIN$ /delete + +# 재부팅 후 재생성 방지 (레지스트리) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-18: 불필요한 서비스 제거 (상) +**점검:** +```powershell +# 실행 중인 서비스 목록 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType | Format-Table + +# 불필요한 서비스 존재 여부 확인 +$unnecessaryServices = @("Alerter","ClipSrv","Browser","CryptSvc","DHCPClient", + "TrkWks","TrkSvr","ERSvc","HidServ","IMAPICD","Messenger","mnmsrvc", + "WmdmPmSN","Spooler","RemoteRegistry","simptcp","upnphost","WZCSVC") +Get-Service | Where-Object { $unnecessaryServices -contains $_.Name -and $_.Status -eq "Running" } | + Select-Object Name, DisplayName, Status +``` +**조치:** +```powershell +# 불필요한 서비스 중지 및 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 예시: Remote Registry 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled + +# 예시: Print Spooler 비활성화 (프린터 미사용 시) +Stop-Service -Name "Spooler" -Force +Set-Service -Name "Spooler" -StartupType Disabled +``` + +--- + +### W-19: 불필요한 IIS 서비스 구동 점검 (상) +**점검:** +```powershell +# IIS 서비스 상태 확인 +Get-Service -Name "W3SVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "IISADMIN" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# IIS 설치 여부 +Get-WindowsFeature -Name Web-Server 2>$null | Select-Object Name, Installed +``` +**조치:** +```powershell +# IIS 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "W3SVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "W3SVC" -StartupType Disabled -ErrorAction SilentlyContinue +Stop-Service -Name "IISADMIN" -Force -ErrorAction SilentlyContinue +Set-Service -Name "IISADMIN" -StartupType Disabled -ErrorAction SilentlyContinue + +# IIS 기능 제거 +Uninstall-WindowsFeature -Name Web-Server +``` + +--- + +### W-20: NetBIOS 바인딩 서비스 구동 점검 (상) +**점검:** +```powershell +# NetBIOS over TCP/IP 설정 확인 +Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | + Select-Object Description, TcpipNetbiosOptions +# TcpipNetbiosOptions: 0=DHCP기본, 1=사용, 2=사용안함 + +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces" /s /v NetbiosOptions +``` +**조치:** +```powershell +# NetBIOS over TCP/IP 비활성화 (WMI) +$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" +foreach ($adapter in $adapters) { + $adapter.SetTcpipNetbios(2) # 2 = NetBIOS 사용 안 함 +} + +# GUI: 네트워크 연결 > 속성 > TCP/IPv4 > 고급 > WINS 탭 +# "NetBIOS over TCP/IP 사용 안 함" 선택 +``` + +--- + +### W-21: 암호화되지 않는 FTP 서비스 비활성화 (상) +**점검:** +```powershell +# FTP 서비스 상태 확인 +Get-Service -Name "FTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "MSFTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# FTP 서비스 중지 및 비활성화 +Stop-Service -Name "FTPSVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "FTPSVC" -StartupType Disabled -ErrorAction SilentlyContinue + +# SFTP 또는 FTPS 대안 사용 권장 +``` + +--- + +### W-22: FTP 디렉토리 접근권한 설정 (상) +**점검:** +```powershell +# FTP 홈 디렉터리 경로 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/sites/site" -PSPath "IIS:\" -ErrorAction SilentlyContinue + +# FTP 홈 디렉터리 권한 확인 +icacls "C:\inetpub\ftproot" 2>$null +# Everyone 권한이 있으면 취약 +``` +**조치:** +```powershell +# FTP 홈 디렉터리에서 Everyone 권한 제거 +icacls "C:\inetpub\ftproot" /remove Everyone /T + +# 필요한 사용자에게만 권한 부여 +icacls "C:\inetpub\ftproot" /grant "ftpUser:(OI)(CI)RX" +``` + +--- + +### W-23: 공유 서비스에 대한 익명 접근 제한 설정 (상) +**점검:** +```powershell +# FTP 익명 인증 설정 확인 (IIS) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS FTP 익명 인증 비활성화 +Import-Module WebAdministration +Set-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -Value $false + +# 또는 IIS 관리자에서: +# FTP 사이트 > FTP 인증 > 익명 인증 = 사용 안 함 +``` + +--- + +### W-24: FTP 접근 제어 설정 (상) +**점검:** +```powershell +# IIS FTP IP 제한 설정 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/security/ipSecurity" -PSPath "IIS:\Sites\Default FTP Site" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS 관리자에서 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +# 1) 허용 항목 추가 (접속 허용 IP) +# 2) 기능 설정 편집 > 지정되지 않은 클라이언트 액세스 = 거부 + +# PowerShell (IIS 모듈) +Import-Module WebAdministration +# 특정 IP 허용 추가 +Add-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/ipSecurity" -Name "." -Value @{ipAddress="192.168.1.100";allowed="true"} +``` + +--- + +### W-25: DNS Zone Transfer 설정 (상) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 영역 전송 설정 확인 (DNS 서버 설치 시) +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, ZoneType +Get-DnsServerZone -ErrorAction SilentlyContinue | ForEach-Object { + Get-DnsServerZoneTransferPolicy -ZoneName $_.ZoneName -ErrorAction SilentlyContinue +} +``` +**조치:** +```powershell +# DNS 영역 전송을 특정 서버로만 제한 +# dnscmd /zoneresetsecondaries <영역이름> /securens +Set-DnsServerPrimaryZone -Name "<영역이름>" -SecureSecondaries TransferToSecureServers -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-26: RDS(Remote Data Services) 제거 (상) +**점검:** +```powershell +# MSADC 가상 디렉터리 존재 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch" 2>$null +``` +**조치:** +```powershell +# MSADC 가상 디렉터리 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 키 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\RDSServer.DataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\AdvancedDataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\VbBusObj.VbBusObjCls" /f 2>$null + +# 참고: Windows 2008 이상은 해당 없음 +``` + +--- + +### W-27: 최신 Windows OS Build 버전 적용 (상) +**점검:** +```powershell +# Windows 빌드 버전 확인 +[System.Environment]::OSVersion.Version +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").UBR + +# winver 실행 +winver + +# systeminfo로 상세 정보 +systeminfo | Select-String "OS 이름|OS 버전|OS Name|OS Version" +``` +**조치:** +```powershell +# Windows Update 확인 및 설치 +# 자동 업데이트: +# 제어판 > Windows Update + +# PowerShell로 업데이트 확인 (PSWindowsUpdate 모듈) +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot + +# 수동 패치: https://msrc.microsoft.com/update-guide +``` + +--- + +### W-28: 터미널 서비스 암호화 수준 설정 (중) +**점검:** +```powershell +# RDP 암호화 수준 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel +# 2=중간(클라이언트 호환 가능), 3=높음, 4=FIPS + +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MinEncryptionLevel 2>$null +``` +**조치:** +```powershell +# 레지스트리에서 암호화 수준 설정 (2 이상) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 3 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 보안 +# "클라이언트 연결 암호화 수준 설정" = 사용 (높음) +``` + +--- + +### W-29: 불필요한 SNMP 서비스 구동 점검 (중) +**점검:** +```powershell +# SNMP 서비스 상태 확인 +Get-Service -Name "SNMP" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# SNMP 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "SNMP" -Force -ErrorAction SilentlyContinue +Set-Service -Name "SNMP" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-30: SNMP Community String 복잡성 설정 (중) +**점검:** +```powershell +# SNMP Community String 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" 2>$null +# public, private이 있으면 취약 +``` +**조치:** +```powershell +# 기본 Community String 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v public /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v private /f 2>$null + +# 복잡한 Community String 추가 (읽기전용 = 4) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v "C0mpl3x$tr1ng!" /t REG_DWORD /d 4 /f + +# SNMP 서비스 재시작 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-31: SNMP Access Control 설정 (중) +**점검:** +```powershell +# SNMP 허용 호스트 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" 2>$null +# 값이 없으면 모든 호스트 허용 (취약) +``` +**조치:** +```powershell +# 특정 호스트로부터만 SNMP 패킷 수신 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d "192.168.1.100" /f + +# GUI: 서비스 > SNMP Service > 속성 > 보안 탭 +# "다음 호스트로부터 SNMP 패킷 받아들이기" 선택 후 호스트 등록 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-32: DNS 서비스 구동 점검 (중) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 동적 업데이트 설정 확인 +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, DynamicUpdate +``` +**조치:** +```powershell +# DNS 동적 업데이트 비활성화 +Set-DnsServerPrimaryZone -Name "<영역이름>" -DynamicUpdate None -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-33: HTTP/FTP/SMTP 배너 차단 (하) +**점검:** +```powershell +# IIS Server 헤더 확인 (HTTP 응답) +# (Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing).Headers["Server"] + +# IIS X-Powered-By 헤더 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -ErrorAction SilentlyContinue + +# SMTP 배너 확인 +# telnet localhost 25 으로 접속 시 배너 확인 +``` +**조치:** +```powershell +# [HTTP] IIS Server 헤더 제거 - URL Rewrite 모듈 필요 +# 1) URL Rewrite 설치: https://www.iis.net/downloads/microsoft/url-rewrite +# 2) 아웃바운드 규칙 추가: 서버 변수 RESPONSE_SERVER 비우기 + +# [HTTP] X-Powered-By 헤더 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -AtElement @{name="X-Powered-By"} -ErrorAction SilentlyContinue + +# [FTP] 기본 배너 숨기기 +# IIS 관리자 > FTP 사이트 > FTP 메시지 > "기본 배너 숨기기" 체크 + +# [SMTP] 배너 변경 +# cd C:\inetpub\AdminScripts +# cscript adsutil.vbs set smtpsvc/1/connectresponse "Authorized Access Only" +# net stop smtpsvc && net start smtpsvc +``` + +--- + +### W-34: Telnet 서비스 비활성화 (중) +**점검:** +```powershell +# Telnet 서비스 상태 확인 +Get-Service -Name "TlntSvr" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# Telnet 인증 방식 확인 (Windows 2003~2012) +# tlntadmn config 명령으로 확인 +``` +**조치:** +```powershell +# Telnet 서비스 중지 및 비활성화 +Stop-Service -Name "TlntSvr" -Force -ErrorAction SilentlyContinue +Set-Service -Name "TlntSvr" -StartupType Disabled -ErrorAction SilentlyContinue + +# 부득이 사용 시 NTLM 인증만 사용 +# tlntadmn config sec = +NTLM -passwd + +# 참고: Windows 2016 이상에서는 Telnet 서버 제공하지 않음 +``` + +--- + +### W-35: 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 (중) +**점검:** +```powershell +# 시스템 DSN 확인 +Get-OdbcDsn -DsnType System -ErrorAction SilentlyContinue | Select-Object Name, DriverName, Platform + +# 레지스트리에서 ODBC 데이터 소스 확인 +reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" 2>$null +``` +**조치:** +```powershell +# 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType System -ErrorAction SilentlyContinue + +# GUI: 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN +# 불필요한 데이터 소스 선택 후 제거 +``` + +--- + +### W-36: 원격터미널 접속 타임아웃 설정 (중) +**점검:** +```powershell +# RDP 세션 유휴 타임아웃 레지스트리 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime 2>$null +# 밀리초 단위: 1800000 = 30분 + +# 현재 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MaxIdleTime 2>$null +``` +**조치:** +```powershell +# 유휴 세션 타임아웃 30분(1800000ms) 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime /t REG_DWORD /d 1800000 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 세션 시간 제한 +# "활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정" = 사용 (30분) +``` + +--- + +### W-37: 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 (중) +**점검:** +```powershell +# 예약된 작업 목록 확인 +Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} | + Select-Object TaskName, TaskPath, State | + Format-Table -AutoSize + +# 예약된 작업 상세 정보 (실행 명령 포함) +Get-ScheduledTask | ForEach-Object { + $task = $_ + $actions = $task.Actions + foreach ($action in $actions) { + [PSCustomObject]@{ + TaskName = $task.TaskName + Execute = $action.Execute + Arguments = $action.Arguments + State = $task.State + } + } +} | Format-Table -AutoSize + +# schtasks 명령 +schtasks /query /fo LIST /v +``` +**조치:** +```powershell +# 의심스러운 예약 작업 비활성화 +Disable-ScheduledTask -TaskName "<작업이름>" + +# 의심스러운 예약 작업 삭제 +Unregister-ScheduledTask -TaskName "<작업이름>" -Confirm:$false + +# schtasks 명령 +schtasks /delete /tn "<작업이름>" /f +``` + +--- + +## 3. 패치 관리 + +### W-38: 주기적 보안 패치 및 벤더 권고사항 적용 (상) +**점검:** +```powershell +# 설치된 핫픽스 목록 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, InstalledOn, Description -First 20 + +# 시스템 정보에서 KB 목록 +systeminfo | findstr "KB" + +# 마지막 패치 설치 날짜 확인 +(Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).InstalledOn + +# Windows Update 이력 확인 +$session = New-Object -ComObject Microsoft.Update.Session +$searcher = $session.CreateUpdateSearcher() +$history = $searcher.QueryHistory(0, 20) +$history | Select-Object Title, Date, ResultCode | Format-Table +``` +**조치:** +```powershell +# Windows Update 실행 +# 수동: https://msrc.microsoft.com/update-guide +# 자동: 제어판 > Windows Update + +# PowerShell 모듈 사용 +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll +``` + +--- + +### W-39: 백신 프로그램 업데이트 (상) +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntispywareEnabled, AntivirusEnabled, + AntivirusSignatureLastUpdated, AntispywareSignatureLastUpdated + +# 백신 엔진 버전 확인 +Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, AntivirusSignatureVersion + +# 3rd party 백신 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState, pathToSignedProductExe +``` +**조치:** +```powershell +# Windows Defender 정의 업데이트 +Update-MpSignature + +# Windows Defender 수동 빠른 검사 +Start-MpScan -ScanType QuickScan + +# 3rd party 백신의 경우 해당 제조사 업데이트 절차 참조 +``` + +--- + +## 4. 로그 관리 + +### W-40: 정책에 따른 시스템 로깅 설정 (중) +**점검:** +```powershell +# 감사 정책 확인 +auditpol /get /category:* + +# 주요 감사 정책 확인 +auditpol /get /subcategory:"로그온","로그오프","계정 관리","정책 변경","권한 사용","디렉터리 서비스 액세스" +``` +**조치:** +```powershell +# 감사 정책 설정 (KISA 권고 기준) +auditpol /set /subcategory:"계정 관리" /failure:enable +auditpol /set /subcategory:"계정 로그온 이벤트" /success:enable /failure:enable +auditpol /set /subcategory:"권한 사용" /success:enable /failure:enable +auditpol /set /subcategory:"디렉터리 서비스 액세스" /failure:enable +auditpol /set /subcategory:"로그온" /success:enable /failure:enable +auditpol /set /subcategory:"로그오프" /success:enable /failure:enable +auditpol /set /subcategory:"정책 변경" /success:enable /failure:enable + +# GPO: 로컬 보안 정책 > 로컬 정책 > 감사 정책 +``` + +--- + +### W-41: NTP 및 시각 동기화 설정 (중) +**점검:** +```powershell +# NTP 동기화 상태 확인 +w32tm /query /status +w32tm /query /configuration + +# NTP 서버 설정 확인 +w32tm /dumpreg /subkey:parameters + +# 시간 서비스 상태 +Get-Service -Name "W32Time" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Windows Time 서비스 활성화 +Set-Service -Name "W32Time" -StartupType Automatic +Start-Service -Name "W32Time" + +# 내부 NTP 서버와 동기화 설정 +w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.server.ip" /update +w32tm /resync + +# 동기화 시간차 확인 +w32tm /stripchart /dataonly /computer:"ntp.server.ip" +``` + +--- + +### W-42: 이벤트 로그 관리 설정 (하) +**점검:** +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes, OverflowAction, MinimumRetentionDays | Format-Table + +# 레지스트리에서 직접 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System" /v MaxSize +``` +**조치:** +```powershell +# 이벤트 로그 최대 크기 10240KB(10MB) 이상 설정 +Limit-EventLog -LogName Application -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName Security -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName System -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 + +# 레지스트리 직접 설정 (바이트 단위: 10485760 = 10MB) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize /t REG_DWORD /d 10485760 /f +``` + +--- + +### W-43: 이벤트 로그 파일 접근 통제 설정 (중) +**점검:** +```powershell +# 시스템 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\config" +# Everyone 권한이 있으면 취약 + +# IIS 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\LogFiles" 2>$null +``` +**조치:** +```powershell +# 로그 디렉터리에서 Everyone 권한 제거 +icacls "C:\Windows\System32\config" /remove Everyone /T +icacls "C:\Windows\System32\LogFiles" /remove Everyone /T + +# Administrators, SYSTEM만 접근 가능하도록 설정 +``` + +--- + +## 5. 보안 관리 + +### W-44: 원격으로 액세스할 수 있는 레지스트리 경로 (상) +**점검:** +```powershell +# Remote Registry 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Remote Registry 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-45: 백신 프로그램 설치 (상) +**점검:** +```powershell +# Windows Defender 설치 및 활성화 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusEnabled, RealTimeProtectionEnabled + +# 설치된 백신 프로그램 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState + +# 프로그램 목록에서 백신 확인 +Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "antivirus|백신|V3|알약|Kaspersky|Norton|McAfee|Symantec" } | + Select-Object Name, Version +``` +**조치:** +```powershell +# Windows Defender 활성화 (비활성화된 경우) +Set-MpPreference -DisableRealtimeMonitoring $false + +# 백신이 설치되지 않은 경우 조직 정책에 따라 백신 프로그램 설치 +# Windows Defender는 Windows Server 2016 이상 기본 탑재 +Install-WindowsFeature -Name Windows-Defender -ErrorAction SilentlyContinue +``` + +--- + +### W-46: SAM 파일 접근 통제 설정 (상) +**점검:** +```powershell +# SAM 파일 접근 권한 확인 +icacls "C:\Windows\System32\config\SAM" +# Administrator, SYSTEM 외 다른 그룹/사용자 권한이 있으면 취약 +``` +**조치:** +```powershell +# SAM 파일 권한 설정 (Administrator, SYSTEM만 접근) +icacls "C:\Windows\System32\config\SAM" /inheritance:r +icacls "C:\Windows\System32\config\SAM" /grant "BUILTIN\Administrators:(F)" +icacls "C:\Windows\System32\config\SAM" /grant "NT AUTHORITY\SYSTEM:(F)" +``` + +--- + +### W-47: 화면보호기 설정 (하) +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +# ScreenSaveActive=1, ScreenSaveTimeOut<=600(10분), ScreenSaverIsSecure=1 이면 양호 +``` +**조치:** +```powershell +# 화면보호기 활성화 (대기 시간 10분, 암호 사용) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "C:\Windows\System32\scrnsave.scr" /f + +# GPO 일괄 적용: +# 사용자 구성 > 관리 템플릿 > 제어판 > 개인 설정 +# "화면 보호기 사용" = 사용 +# "화면 보호기 시간 제한" = 600초 +# "화면 보호기 암호로 보호" = 사용 +``` + +--- + +### W-48: 로그온하지 않고 시스템 종료 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon +# 값이 0이면 양호 +``` +**조치:** +```powershell +# 로그온 없이 시스템 종료 차단 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 종료: 로그온하지 않고 시스템 종료 허용" = 사용 안 함 +``` + +--- + +### W-49: 원격 시스템에서 강제로 시스템 종료 (상) +**점검:** +```powershell +# 원격 시스템 종료 권한 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeRemoteShutdownPrivilege" C:\secpol_tmp.cfg +# Administrators만 있으면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "원격 시스템에서 강제로 시스템 종료" 정책에 Administrators 외 다른 계정/그룹 제거 +``` + +--- + +### W-50: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail +# 값이 0이면 양호 (사용 안 함), 1이면 취약 + +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "CrashOnAuditFail" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 (사용 안 함) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료" = 사용 안 함 +``` + +--- + +### W-51: SAM 계정과 공유의 익명 열거 허용 안 함 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM +# RestrictAnonymous=1, RestrictAnonymousSAM=1 이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함" = 사용 +# "네트워크 액세스: SAM 계정의 익명 열거 허용 안 함" = 사용 + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-52: Autologon 기능 제어 (상) +**점검:** +```powershell +# AutoAdminLogon 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +# 값이 0이거나 존재하지 않으면 양호 + +# DefaultPassword 존재 여부 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword 2>$null +``` +**조치:** +```powershell +# Autologon 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f + +# DefaultPassword 제거 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f 2>$null +``` + +--- + +### W-53: 이동식 미디어 포맷 및 꺼내기 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD +# 값이 0(Administrators만)이면 양호 +``` +**조치:** +```powershell +# Administrators에게만 이동식 미디어 포맷/꺼내기 허용 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 이동식 미디어 포맷 및 꺼내기 허용" = Administrators +``` + +--- + +### W-54: DoS 공격 방어 레지스트리 설정 (중) +**점검:** +```powershell +# TCP/IP 스택 강화 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand 2>$null +# SynAttackProtect>=1, EnableDeadGWDetect=0, KeepAliveTime=300000, NoNameReleaseOnDemand=1 이면 양호 +``` +**조치:** +```powershell +# DoS 방어 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand /t REG_DWORD /d 1 /f + +# 주의: 잘못된 값 설정 시 OS 재설치 필요할 수 있음 +``` + +--- + +### W-55: 사용자가 프린터 드라이버를 설치할 수 없게 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers 2>$null +# 값이 1이면 양호 (사용자 설치 차단) +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 사용자가 프린터 드라이버를 설치할 수 없게 함" = 사용 +``` + +--- + +### W-56: SMB 세션 중단 관리 설정 (중) +**점검:** +```powershell +# SMB 세션 유휴 시간 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect 2>$null +# 값이 15 이하이면 양호 + +# 로그온 시간 만료 시 연결 끊기 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff 2>$null +# 값이 1이면 양호 +``` +**조치:** +```powershell +# SMB 유휴 세션 타임아웃 15분 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect /t REG_DWORD /d 15 /f + +# 로그온 시간 만료 시 연결 끊기 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기" = 사용 +# "Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간" = 15분 +``` + +--- + +### W-57: 로그온 시 경고 메시지 설정 (하) +**점검:** +```powershell +# 로그온 경고 메시지 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText +# 둘 다 값이 설정되어 있으면 양호 +``` +**조치:** +```powershell +# 로그온 경고 메시지 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption /t REG_SZ /d "경고" /f +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText /t REG_SZ /d "이 시스템은 인가된 사용자만 접근할 수 있습니다. 비인가 접근 시도 시 법적 처벌을 받을 수 있습니다." /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목" = 경고 제목 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트" = 경고 내용 +``` + +--- + +### W-58: 사용자별 홈 디렉터리 권한 설정 (중) +**점검:** +```powershell +# 사용자 홈 디렉터리 권한 확인 +Get-ChildItem "C:\Users" -Directory | ForEach-Object { + $acl = Get-Acl $_.FullName + $everyoneAccess = $acl.Access | Where-Object { $_.IdentityReference -like "*Everyone*" } + if ($everyoneAccess) { + [PSCustomObject]@{ + Directory = $_.Name + Everyone = ($everyoneAccess | ForEach-Object { $_.FileSystemRights }) -join ", " + } + } +} +``` +**조치:** +```powershell +# 홈 디렉터리에서 Everyone 권한 제거 (All Users, Default User 제외) +Get-ChildItem "C:\Users" -Directory | Where-Object { + $_.Name -notin @("All Users","Default User","Default","Public") +} | ForEach-Object { + icacls $_.FullName /remove Everyone /T +} +``` + +--- + +### W-59: LAN Manager 인증 수준 (중) +**점검:** +```powershell +# LAN Manager 인증 수준 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel +# 값이 5이면 양호 (NTLMv2 응답만 보냄, LM 및 NTLM 거부) +# 최소 3 이상 권장 +``` +**조치:** +```powershell +# NTLMv2 응답만 보내도록 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 보안: LAN Manager 인증 수준" = "NTLMv2 응답만 보내기/LM 및 NTLM 거부" +``` + +--- + +### W-60: 보안 채널 데이터 디지털 암호화 또는 서명 (중) +**점검:** +```powershell +# 보안 채널 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel 2>$null +# 세 값 모두 1이면 양호 +``` +**조치:** +```powershell +# 보안 채널 데이터 암호화/서명 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상)" = 사용 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우)" = 사용 +# "도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우)" = 사용 +``` + +--- + +### W-61: 파일 및 디렉토리 보호 (중) +**점검:** +```powershell +# 파일 시스템 유형 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size | Format-Table + +# CMD 확인 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT 파일 시스템을 NTFS로 변환 +# convert <드라이브명>: /fs:ntfs +# 예: convert F: /fs:ntfs + +# 주의: 변환은 비가역적이며 초기 설치 시 NTFS 선택 권장 +# 기존 FAT에서 변환 시 Default ACL이 적용되지 않을 수 있음 +``` + +--- + +### W-62: 시작 프로그램 목록 분석 (중) +**점검:** +```powershell +# 시작 프로그램 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 2>$null + +# 시작 폴더 확인 +Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue +Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue + +# WMI 시작 프로그램 목록 +Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table -AutoSize +``` +**조치:** +```powershell +# 불필요한 시작 프로그램 제거 (레지스트리) +reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f +reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f + +# msconfig 실행 (Windows 2008 이하) +# 시작 프로그램 탭에서 불필요한 항목 체크 해제 +``` + +--- + +### W-63: 도메인 컨트롤러-사용자의 시간 동기화 (중) +**점검:** +```powershell +# Kerberos 최대 허용 오차 확인 (도메인 컨트롤러) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MaxClockSkew" C:\secpol_tmp.cfg +# 값이 5 이하이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force + +# 현재 시간 동기화 상태 +w32tm /query /status +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +# "컴퓨터 시계 동기화 최대 허용 오차" = 5분 + +# 시간 동기화 강제 수행 +w32tm /resync /force +``` + +--- + +### W-64: 윈도우 방화벽 설정 (중) +**점검:** +```powershell +# Windows 방화벽 프로필 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled | Format-Table + +# 방화벽 규칙 요약 +Get-NetFirewallProfile | ForEach-Object { + $profile = $_.Name + $enabled = $_.Enabled + [PSCustomObject]@{ + Profile = $profile + Enabled = $enabled + InboundDefault = $_.DefaultInboundAction + OutboundDefault = $_.DefaultOutboundAction + } +} | Format-Table + +# netsh 명령 +netsh advfirewall show allprofiles +``` +**조치:** +```powershell +# Windows 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True + +# netsh 명령 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정 또는 해제 +# 모든 프로필에 대해 "사용" 설정 +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/robot-security/cert-and-protocol.md b/skills-ko/kesekit-fix-ko/scripts/robot-security/cert-and-protocol.md new file mode 100644 index 0000000..259a9d3 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/robot-security/cert-and-protocol.md @@ -0,0 +1,96 @@ +# Certificate & Protocol Security + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: IA-04, ER-01 + +--- + +## 1. OpenSSL Certificate Inspection (IA-04) + +```bash +# 인증서 내용 확인 명령어 +openssl x509 -in server.crt -text -noout +``` + +--- + +## 2. Key File Permission Hardening (IA-04) + +```bash +# 개인키 접근 권한 설정 +chown robot-service:robot-service /etc/robot/keys/device.key +chmod 600 /etc/robot/keys/device.key # 파일 소유자만 접근 가능 +``` + +--- + +## 3. OPC UA Security Configuration (IA-04) + +### 3.1 Certificate Validation + +```ini +# server.conf (OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +### 3.2 Certificate Revocation Check + +```ini +# server.conf (OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +--- + +## 4. TLS Client Certificate Verification - Python (IA-04) + +```python +import ssl, socket + +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 + +with socket.create_connection(("server.com", 443)) as sock: + with context.wrap_socket(sock, server_hostname="server.com") as ssock: + print("TLS Established:", ssock.version()) +``` + +--- + +## 5. Crypto Algorithm Requirements (IA-04) + +| Category | Recommended | Insufficient | +|---|---|---| +| Key algorithm | RSA >= 2048bit or ECC P-256+ | RSA 1024bit or below, ECC P-192 or below | +| Hash algorithm | SHA-256+ (SHA-2/SHA-3 family) | SHA-1, MD5 | +| TLS protocol | TLS 1.2+ (recommended: TLS 1.3) | TLS 1.0 / 1.1 | + +--- + +## 6. Audit Log API Access (ER-01) + +```http +GET /api/audit/logs +Authorization: Bearer + +HTTP/1.1 200 OK +{ + "entries": [...], + "integrity": "sha256:f45a..." +} +``` + +--- + +## 7. Platform-specific Certificate ACL Examples (IA-04) + +| Platform | Certificate Store | +|---|---| +| General server / cloud | DB table | +| OPC UA | /pki/trusted, /pki/rejected folders | +| MQTT mTLS | CA DB, allowed client certificate list | +| Robot PKI | KV DB, HSM integration | diff --git a/skills-ko/kesekit-fix-ko/scripts/robot-security/firewall-hardening.md b/skills-ko/kesekit-fix-ko/scripts/robot-security/firewall-hardening.md new file mode 100644 index 0000000..8d8820f --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/robot-security/firewall-hardening.md @@ -0,0 +1,106 @@ +# Firewall & Network Hardening + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: DFR-02, RA-01, RA-08 + +--- + +## 1. Host Firewall (iptables) + +### 1.1 MQTT / HTTPS Only (DFR-02 Protocol Filtering) + +```bash +# MQTT 및 HTTPS 외의 포트 차단 +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.2 SSH + HTTPS Only (RA-01 DoS Prevention) + +```bash +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.3 Unnecessary Port Blocking (RA-08 Service Restriction) + +```bash +# 외부 포트 스캔 (TCP 포트 확인) +nmap -sS 192.168.0.10 + +# 불필요한 포트(예: FTP 21, Telnet 23, TFTP 69) 차단 +sudo iptables -A INPUT -p tcp --dport 21 -j DROP +sudo iptables -A INPUT -p tcp --dport 23 -j DROP +sudo iptables -A INPUT -p udp --dport 69 -j DROP +``` + +--- + +## 2. Service Hardening (RA-08) + +```bash +# 현재 활성화된 포트 및 프로세스 확인 +sudo ss -tulnp +sudo netstat -tulnp + +# 서비스 상태 확인 및 비활성화 +sudo systemctl status telnet +sudo systemctl disable telnet +sudo systemctl stop telnet +``` + +--- + +## 3. VLAN Network Segmentation (RA-01 L2) + +Control network and sensor network separation via VLAN. + +```bash +# 제어 망 (VLAN ID 10) +sudo ip link add link eth0 name eth0.10 type vlan id 10 +# 센서 망 (VLAN ID 20) +sudo ip link add link eth0 name eth0.20 type vlan id 20 + +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +``` + +--- + +## 4. sysctl Network Tuning (RA-01) + +```bash +sudo sysctl -w net.core.somaxconn=128 +sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +ulimit -n 1024 +``` + +--- + +## 5. Nginx Rate Limiting (RA-01) + +```nginx +# /etc/nginx/nginx.conf +http { + limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; + server { + listen 443 ssl; + server_name example.com; + location / { + limit_req zone=req_limit_per_ip burst=5 nodelay; + limit_conn conn_limit_per_ip 10; + } + } +} +``` + +--- + +## 6. Suricata IDS Rule (RA-01 L2 DoS Detection) + +```yaml +alert tcp any any -> $HOME_NET any (msg:"TCP SYN Flood"; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/robot-security/resource-management.md b/skills-ko/kesekit-fix-ko/scripts/robot-security/resource-management.md new file mode 100644 index 0000000..fd35dce --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/robot-security/resource-management.md @@ -0,0 +1,96 @@ +# Resource Management & Monitoring + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: RA-02, RA-03 + +--- + +## 1. cgroups - Security Agent Resource Limits (RA-02) + +Restrict CPU and memory usage for security processes so they do not interfere with real-time robot control. + +```bash +# cgroup 생성 (cpu + memory) +sudo cgcreate -g cpu,memory:/robot_security + +# CPU 할당 제한 (20000us = 20% of 1 core at default 100000us period) +echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us + +# 메모리 제한 (256MB) +echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes + +# 실행 중인 보안 에이전트를 cgroup에 할당 +sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +``` + +--- + +## 2. OpenSSL Hardware Acceleration Check (RA-02) + +Offload crypto operations to hardware to reduce CPU overhead. + +```bash +openssl engine -t +# Expected output: +# (dynamic) Dynamic engine loading support +# (rdrand) Intel RDRAND engine +# (aesni) Intel AES-NI engine +``` + +--- + +## 3. logrotate Configuration (RA-02) + +Prevent audit/operational logs from exhausting disk space. + +```bash +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { + size 50M + rotate 5 + compress + missingok + notifempty +} +``` + +--- + +## 4. System Resource Monitoring (RA-03) + +Dashboard or CLI-based monitoring of CPU, memory, disk, and network utilization. The robot system should provide a user interface for operators to view resource status in real-time. + +Key resource metrics to monitor: +- CPU usage per core / per process +- Memory (RSS / swap) usage +- Disk I/O and capacity +- Network interface throughput and error rates + +--- + +## 5. ROS Publisher Rate Limiting (RA-01 L2) + +Limit sensor data publish rate to prevent communication overload. + +```cpp +ros::Publisher pub = nh.advertise("sensor_data", 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { + std_msgs::String msg; + msg.data = "sensor data"; + pub.publish(msg); + loop_rate.sleep(); +} +``` + +--- + +## 6. ROS2 QoS Security Profile (RA-01 L2) + +```yaml +QoSProfile: + reliability: RELIABLE + durability: TRANSIENT_LOCAL + history: KEEP_LAST + depth: 10 +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/robot-security/sbom-audit.md b/skills-ko/kesekit-fix-ko/scripts/robot-security/sbom-audit.md new file mode 100644 index 0000000..1b1387f --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/robot-security/sbom-audit.md @@ -0,0 +1,84 @@ +# SBOM & Supply Chain Audit + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: SC-05 + +--- + +## 1. SBOM Generation with Syft (SC-05) + +Generate a Software Bill of Materials from source code or container images using Anchore Syft. + +```bash +# Syft를 통한 SBOM 생성 (JSON format) +syft <소스코드 경로> -o json > sbom.json +``` + +--- + +## 2. Vulnerability Scanning with Grype (SC-05) + +Scan the generated SBOM for known vulnerabilities (CVEs). + +```bash +# Grype를 통한 취약점 식별 +grype sbom://sbom.json +``` + +--- + +## 3. Package Manager Built-in Audit Commands (SC-05) + +Use built-in security features of each package manager to analyze declared dependencies and automatically scan for known vulnerabilities. + +### Node.js (NPM) + +```bash +npm audit +``` + +### Python (pip) + +```bash +pip-audit +``` + +### Java (Maven) + +```bash +mvn dependency-check:check +``` + +### .NET (NuGet) + +```bash +dotnet list package --vulnerable +``` + +### Rust (Cargo) + +```bash +cargo audit +``` + +--- + +## 4. CI/CD Pipeline Integration (SC-05) + +Integrate vulnerability scanning into CI/CD pipelines (GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins, etc.) to automatically detect vulnerabilities before deployment. + +### Vulnerability Response Record Fields + +| Field | Description | +|---|---| +| CVE ID | 취약점 식별자 | +| 구성요소 | 영향받는 컴포넌트(이름/버전) | +| 기술적 위험 | 공개 PoC/익스플로잇 존재 여부, CVSS 점수 | +| 비즈니스 영향 | 영향을 받는 서비스/데이터/운영 영향 | +| EoS 여부 | 해당 구성요소의 지원상태 | +| 우선 순위 | P0/P1/P2 또는 High/Medium/Low | +| 대응방안 | 패치/업그레이드/가상패치/격리 등 | +| SLA | 목표 기간 | +| 담당자 및 일정 | 책임부서, 담당자, 완료예정일 | +| 검증 방법 | 재스캔, 기능/회귀 테스트 결과 링크 | +| 상태 | 계획/진행/완료/예외(승인) | diff --git a/skills-ko/kesekit-fix-ko/scripts/space-security/access-control-fix.md b/skills-ko/kesekit-fix-ko/scripts/space-security/access-control-fix.md new file mode 100644 index 0000000..6082612 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/space-security/access-control-fix.md @@ -0,0 +1,248 @@ +# Access Control & Authentication — Fix Scripts + +> Hardening scripts and configurations for AC-01~AC-12, IA-01~IA-02 + +## AC-01: Access Control Policy + +### Network ACL +```bash +# Allow only Jump Server IP for SSH access +iptables -A INPUT -s -p tcp --dport 22 -j ACCEPT +iptables -A INPUT -p tcp --dport 22 -j DROP + +# Block plaintext protocols (Telnet, FTP) +iptables -A INPUT -p tcp --dport 23 -j DROP # Telnet +iptables -A INPUT -p tcp --dport 21 -j DROP # FTP +iptables -A OUTPUT -p tcp --dport 23 -j DROP +iptables -A OUTPUT -p tcp --dport 21 -j DROP +``` + +### Account Cleanup +```bash +# Find and disable default accounts +for user in admin guest test demo; do + id "$user" 2>/dev/null && usermod -L "$user" && echo "Locked: $user" +done + +# List accounts with no password expiry +chage -l | grep "Password expires" + +# Force password change for all users +for user in $(awk -F: '$3>=1000{print $1}' /etc/passwd); do + chage -M 90 "$user" # Max 90 days +done +``` + +### Thresholds +| Item | Value | Standard | +|------|-------|----------| +| Account deletion on termination | Same day | KISA | +| Full access review cycle | Annual (minimum) | CMMC | +| Allowed protocols | SSH, SFTP, VPN only | K-RMF | + +--- + +## AC-03: Privileged Access + +### Linux — SELinux/AppArmor +```bash +# Check SELinux status +getenforce + +# Enable SELinux enforcing mode +setenforce 1 +sed -i 's/SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config + +# Restrict admin to system management paths only (AppArmor) +# /etc/apparmor.d/usr.sbin.admin-profile +# deny /usr/bin/firefox rx, +# deny /usr/bin/chrome rx, +``` + +### Windows — AppLocker +```powershell +# Enable AppLocker via GPO +# Computer Configuration > Windows Settings > Security Settings > Application Control Policies > AppLocker +# Create rule: Allow only management tools (MMC, PowerShell) for admin profiles +# Block all other EXE, DLL for privileged accounts +``` + +### PAM (Privileged Access Management) +```bash +# Restrict admin IP + MAC address access +# /etc/hosts.allow +sshd: 10.0.1.0/24 +# /etc/hosts.deny +sshd: ALL +``` + +--- + +## AC-06: Failed Login Attempts + +### Linux — PAM +```bash +# /etc/pam.d/system-auth (or common-auth) +auth required pam_tally2.so deny=5 unlock_time=1800 onerr=fail + +# Check locked accounts +pam_tally2 --user= + +# Reset failed count +pam_tally2 --user= --reset +``` + +### Windows +``` +secpol.msc → Account Policies → Account Lockout Policy +→ Account lockout threshold: 5 +→ Account lockout duration: 30 minutes +→ Reset account lockout counter after: 30 minutes +``` + +### Thresholds +| Target | Max Attempts | Lockout Duration | Standard | +|--------|:-----------:|:----------------:|----------| +| Server | 3 | 30 min | K-RMF | +| User account | 5 | 15-60 min | CMMC | +| Mobile device | 5-10 (then wipe) | - | KISA | +| Login delay | 5-10 sec after failure | - | Best practice | + +--- + +## AC-07: Session Lock & Termination + +### Linux +```bash +# Auto-logout after 10 min inactivity +echo "TMOUT=600" >> /etc/profile +echo "readonly TMOUT" >> /etc/profile +echo "export TMOUT" >> /etc/profile +``` + +### Windows +``` +# Screen saver with password after 10 min +GPO: User Configuration > Administrative Templates > Control Panel > Personalization +→ Enable screen saver: Enabled +→ Screen saver timeout: 600 seconds +→ Password protect the screen saver: Enabled +``` + +### Web Application (JSP) +```xml + + + 10 + + + + + 600 + +``` + +### Session Timeout by Risk +| Risk Level | Timeout | Example | +|-----------|:-------:|---------| +| Critical functions | 2-5 min | Satellite command, orbit control | +| Standard operations | 10-15 min | Ground station monitoring | +| Low-risk | 15-30 min | Reporting, documentation | +| Exception | No timeout (approved) | 24/7 NOC/SOC dashboards | + +--- + +## AC-08: Remote Access Control + +### VPN + MFA +```bash +# OpenVPN with MFA (TOTP) +# /etc/openvpn/server.conf +plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn +verify-client-cert require + +# Require all traffic through VPN (no split tunneling) +push "redirect-gateway def1" +``` + +--- + +## AC-09: Wireless Access + +### Wi-Fi Hardening +```bash +# hostapd.conf — WPA2-Enterprise +wpa=2 +wpa_key_mgmt=WPA-EAP +rsn_pairwise=CCMP +ieee8021x=1 + +# Hide SSID +ignore_broadcast_ssid=1 + +# MAC filtering +macaddr_acl=1 +accept_mac_file=/etc/hostapd/accept +``` + +### WIPS Deployment +- Deploy Wireless IPS sensors in antenna zones and ground station facilities +- Monitor for rogue APs and unauthorized wireless connections +- Disable unused Bluetooth/Wi-Fi on all operational devices + +--- + +## IA-01: Identification & Authentication + +### Password Policy +```bash +# /etc/security/pwquality.conf +minlen = 8 +minclass = 2 # At least 2 character types +maxrepeat = 3 +dcredit = -1 # Require digit +ucredit = -1 # Require uppercase +lcredit = -1 # Require lowercase +ocredit = -1 # Require special char + +# /etc/login.defs +PASS_MAX_DAYS 90 +PASS_MIN_DAYS 1 +PASS_WARN_AGE 14 +``` + +### Windows +``` +secpol.msc → Account Policies → Password Policy +→ Minimum password length: 8 +→ Password must meet complexity requirements: Enabled +→ Maximum password age: 90 days +→ Enforce password history: 5 passwords remembered +``` + +### Password Storage +- **NEVER** store plaintext or reversibly encrypted passwords +- Use one-way hash: **SHA-256+** with salt +- Transmit via **TLS encrypted channel** only + +--- + +## IA-02: Multi-Factor Authentication + +### MFA Methods (combine 2+) +| Factor | Methods | +|--------|---------| +| Knowledge | Password | +| Possession | PKI certificate, OTP (TOTP 30s/60s), smart card, hardware token | +| Biometric | Fingerprint, iris, face | +| Supplemental | IP address, MAC address, device serial, geolocation | + +### Anti-Replay +``` +# TOTP configuration +- Token validity: 30 or 60 seconds +- Use Kerberos ticket-based authentication +- Include Nonce (random number) per request +- One-time-use tokens (discard after use) +- High-risk accounts: U2F/FIDO2, smart card, OTP hardware token +``` diff --git a/skills-ko/kesekit-fix-ko/scripts/space-security/operations-fix.md b/skills-ko/kesekit-fix-ko/scripts/space-security/operations-fix.md new file mode 100644 index 0000000..11fab62 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/space-security/operations-fix.md @@ -0,0 +1,174 @@ +# Operations & Incident Response — Fix Scripts + +> Hardening for SO-01~SO-09, IR-01~IR-02 + +## SO-02: Audit Logging + +### Log Types (all required) +| Type | Content | +|------|---------| +| System event | Start/stop, status, error codes | +| Network event | IP assignment, traffic on key segments | +| Security system | Admin access, policy create/change/delete | +| Audit | Login/logout, auth success/failure, file access | + +### Log Protection +```bash +# rsyslog — forward to central SIEM +*.* @@siem-server:514 + +# Append-only log files +chattr +a /var/log/secure +chattr +a /var/log/audit/audit.log + +# Minimum retention: 1 year +``` + +### Tamper-Proof Storage +- CD-ROM, DVD-R, WORM media for critical audit logs +- If writable media: store MAC value / digital signature separately +- Real-time collection to SIEM / central log server + +--- + +## SO-03: Time Synchronization + +### Linux NTP +```bash +# /etc/ntp.conf or /etc/chrony.conf +server iburst +driftfile /var/lib/chrony/drift + +# Verify sync +chronyc tracking +chronyc sources -v +``` + +### Windows NTP +```cmd +REM Check current sync +w32tm /dumpreg /subkey:parameters + +REM Set internal NTP server +w32tm /config /syncfromflags:manual /manualpeerlist: /update + +REM Force resync +w32tm /resync + +REM Check time difference +w32tm /stripchart /dataonly /computer: +``` + +--- + +## SO-04: Portable Storage Security + +### USB Control +```bash +# Disable USB storage (Linux) +echo "install usb-storage /bin/true" >> /etc/modprobe.d/disable-usb.conf +echo "blacklist usb-storage" >> /etc/modprobe.d/disable-usb.conf +``` + +### Secure Disposal Methods +| Method | Description | Recommended | +|--------|-------------|:-----------:| +| Physical destruction | Shredder, melting, incineration | For classified | +| Degausser | Magnetic field erasure | For HDD | +| Overwrite | Random/0/1 values, **3+ passes** | For reusable media | +| Crypto-erase | Encrypt → delete key → overwrite | For SSD | + +### Backup Encryption +| Type | Algorithms | +|------|-----------| +| Symmetric | SEED, ARIA-128/192/256, AES-128/192/256, HIGHT, LEA | +| Asymmetric | RSAES-OAEP | +| Hash | SHA-256/384/512 | + +--- + +## SO-05: Configuration Management + +### Baseline Items +``` +Hardware: Model, serial, firmware version, physical location +Software: OS version, installed packages, patch level +Firmware: Version, checksum, update history +Settings: Registry values, account permissions, file/directory permissions, network config +``` + +### Drift Detection +```bash +# AIDE (Advanced Intrusion Detection Environment) +aide --init +aide --check + +# Monthly baseline comparison +``` + +--- + +## IR-02: Incident Reporting + +### Korea (ICT Infrastructure Protection Act Art.48-3) +``` +Deadline: Within 24 hours of discovery +Contact: + Phone: 118 (24/7) + Online: KrCERT → "침해사고 신고" + Email: certgen@krcert.or.kr +``` + +### EU NIS2 Reporting Timeline +| Stage | Deadline | Content | +|-------|----------|---------| +| Early warning | **24 hours** | Indicate if unlawful/malicious | +| Incident notification | **72 hours** | Initial assessment, IoC | +| Interim report | On CSIRT request | Status update | +| Final report | **1 month** after 72h notification | Root cause, mitigation | + +### NIS2 Significant Incident Criteria +- Direct damage > **EUR 500,000** or **5%** of prior year revenue +- Cloud: service unavailable > **30 minutes** +- Data center: availability limited > **1 hour** + +### NIS2 Penalties +| Entity Type | Maximum Fine | +|-------------|-------------| +| Essential | **2%** annual revenue or **EUR 10,000,000** (whichever higher) | +| Important | **1.4%** annual revenue or **EUR 7,000,000** (whichever higher) | + +### US DFARS 252.204-7012 +- Report within **72 hours** to DC3 DCISE +- Preserve system images and network data for **90 days** +- Require DoD **Medium Assurance Certificate** + +--- + +## Supply Chain Fix — SBOM & Integrity + +### SBOM Standards +``` +Formats: SPDX, CycloneDX +Content: All open-source/commercial SW components, versions, licenses +CVE Scanning: Periodic (at least quarterly) +On new vulnerability: SBOM-based impact identification +``` + +### Integrity Verification +```bash +# Hash verification for SW updates +sha256sum firmware-update.bin > firmware-update.sha256 +sha256sum -c firmware-update.sha256 + +# Digital signature verification +gpg --verify firmware-update.bin.sig firmware-update.bin +``` + +### CI/CD Pipeline Security +- Verify all IDE plugins and CI/CD tools before use +- Scan build artifacts for malware before deployment +- Maintain internal library repository behind firewall +- Block unverified Docker Hub images +- Remove test/debug accounts before production deployment +- Check for hardcoded credentials (MASTER_KEY, API keys, passwords) diff --git a/skills-ko/kesekit-fix-ko/scripts/space-security/system-security-fix.md b/skills-ko/kesekit-fix-ko/scripts/space-security/system-security-fix.md new file mode 100644 index 0000000..1c6687b --- /dev/null +++ b/skills-ko/kesekit-fix-ko/scripts/space-security/system-security-fix.md @@ -0,0 +1,198 @@ +# System & Communication Security — Fix Scripts + +> Hardening for SC-01~SC-07, SI-01~SI-04 + +## SC-01: Boundary Protection + +### Network Segmentation +``` +Zone Layout: +┌──────────────────────────────────────┐ +│ DMZ │ Web Server, Mail │ +├───────────────┼──────────────────────┤ +│ Operations │ Servers, Security │ +├───────────────┼──────────────────────┤ +│ Development │ Dev/Test servers │ +├───────────────┼──────────────────────┤ +│ External │ Contractors, Public │ +└──────────────────────────────────────┘ + +# Firewall default deny +iptables -P INPUT DROP +iptables -P FORWARD DROP +iptables -P OUTPUT DROP +# Then add specific ALLOW rules +``` + +### Satellite Network Isolation +- Physically separate: satellite control network / operations network / internet network +- Use **one-way transfer device** for control → satellite communication path +- VDI virtualization for logical separation where physical not feasible + +--- + +## SC-03: Stored & Transmitted Information Security + +### Encryption Standards +| Use Case | Algorithm | Key Size | Standard | +|----------|-----------|:--------:|----------| +| Data at rest | AES-256 / ARIA-256 | 256-bit | CCSDS mandatory | +| Legacy systems | AES-128 (minimum) | 128-bit | CCSDS allowed | +| Integrity | HMAC-SHA-256 | - | CCSDS | +| Digital signature | RSA-4096+ | 4096-bit | CCSDS recommended | +| Hashing | SHA-256/384/512 | - | All standards | + +### Prohibited Algorithms +``` +BANNED: TDEA (3DES), MD5, SHA-1 (new systems) +``` + +### Korean Domestic Algorithms +``` +Symmetric: SEED, HIGHT, ARIA-128/192/256, LEA-128/192/256 +Public key: RSAES-OAEP (2048-bit minimum) +Hash: SHA-224/256/384/512 +``` + +--- + +## SC-04: Communication Security + +### Firewall Policy +```bash +# Default Deny → Exception Allow +iptables -P INPUT DROP +iptables -P FORWARD DROP + +# Define allowed traffic (Source, Dest, Port, Protocol, Direction) +iptables -A INPUT -s 10.0.1.0/24 -d 10.0.2.0/24 -p tcp --dport 443 -j ACCEPT + +# Block split tunneling on VPN +# OpenVPN: push "redirect-gateway def1" +# Block NAT/port forwarding from external to internal (principle) +``` + +### Session ID Security +| Requirement | Setting | +|-------------|---------| +| Session ID length | Minimum **128 bits** | +| Algorithm | Cryptographically secure PRNG | +| URL exposure | **Prohibited** (no URL rewrite) | +| On login | Destroy old session → issue new ID | +| Timeout (critical) | **2-5 minutes** | +| Timeout (standard) | **15-30 minutes** | + +### TLS Configuration +```bash +# nginx.conf - enforce TLS 1.2+ +ssl_protocols TLSv1.2 TLSv1.3; +ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; +ssl_prefer_server_ciphers on; + +# New systems: TLS 1.3+ recommended +``` + +--- + +## SC-05: Encryption Key Lifecycle + +### Key Management (4 phases) +``` +Phase 1: Preparation → Key generation (secure RNG), distribution +Phase 2: Operation → Active use, rotation schedule +Phase 3: Suspension → Inactive, archived, recoverable +Phase 4: Destruction → Secure deletion, audit trail +``` + +### Rules +- **NEVER** store keys in source code as plaintext +- Minimum access, all access logged +- Use HSM (Hardware Security Module) for critical keys +- Satellite communication keys: follow CCSDS 352.0-B-2 + +--- + +## SC-07: Mobile Code & VoIP + +### Mobile Code Control +```powershell +# Windows - Disable ActiveX, Java Runtime in operational environment +# GPO: Computer Configuration > Administrative Templates > Windows Components > Internet Explorer > Security +# → Disable "Run ActiveX controls and plug-ins": Enabled + +# PowerShell execution logging +Set-ExecutionPolicy AllSigned +# Enable script block logging in GPO +``` + +### VoIP Control +```bash +# Block VoIP protocols by default +iptables -A INPUT -p udp --dport 5060 -j DROP # SIP +iptables -A INPUT -p udp --dport 5004 -j DROP # RTP +iptables -A INPUT -p udp --dport 5005 -j DROP # RTCP + +# If VoIP allowed (internal only): enforce SRTP +``` + +--- + +## SI-01: Vulnerability Scanning + +### Scan Schedule +| Asset Criticality | Frequency | +|-------------------|-----------| +| Critical (satellite control) | Quarterly | +| High (ground station) | Semi-annual | +| Standard | Annual | +| On new vulnerability disclosure | Immediate | + +### Reference Sources +| Source | URL/Description | +|--------|----------------| +| KISA KrCERT/CC | Korean vulnerability alerts | +| NCSC | National cyber threat analysis | +| CISA | US-CERT alerts, ICS advisories | +| NIST NVD | CVE database, CVSS scores | + +--- + +## SI-02: Malicious Code Prevention +```bash +# Auto-update AV signatures (daily minimum) +# Disable USB autorun +echo "install usb-storage /bin/true" >> /etc/modprobe.d/disable-usb.conf + +# Block P2P, webhard applications +iptables -A OUTPUT -p tcp --dport 6881:6889 -j DROP # BitTorrent +``` + +--- + +## GSaaS-Specific Security Solutions + +### Anti-Jamming +| Technique | Description | +|-----------|-------------| +| Frequency Hopping | Rapidly switch frequencies to avoid jamming | +| Spread Spectrum | Spread signal across wide bandwidth | +| LPI Waveform | Low Probability of Intercept | +| Antenna diversity | Redundant antenna systems | +| Frequency diversity | Redundant frequency channels | +| Drone countermeasures | Drone jammer, detection radar | + +### GSaaS Network Architecture +``` +[Satellite] ←→ [Antenna Zone] ←IPSec VPN→ [Ground Station] ←IPSec VPN→ [Cloud] + ↑ + [Satellite Operator] + (SSL VPN + MFA) +``` + +### Security Solutions by Zone +| Zone | Solutions | +|------|----------| +| Communication | Anti-jamming sensors, VPN (IPSec), encryption (asymmetric key exchange + symmetric data) | +| Antenna | Firewall, NAC, IDS/IPS, Anti-DDoS, DLP (media control), whitelist AV, CCTV, access control | +| Ground Station-Cloud | WAF, web shell detection, cloud DLP, DRM, PMS, vulnerability scanner | +| Operator | MFA, server access control, VPN (SSL), UPS/backup power | diff --git a/skills-ko/fix/references/ai-security/developer.md b/skills-ko/kesekit-fix-ko/templates/ai-security/developer.md similarity index 100% rename from skills-ko/fix/references/ai-security/developer.md rename to skills-ko/kesekit-fix-ko/templates/ai-security/developer.md diff --git a/skills-ko/kesekit-fix-ko/templates/ai-security/user-guide-checklist.md b/skills-ko/kesekit-fix-ko/templates/ai-security/user-guide-checklist.md new file mode 100644 index 0000000..903ec01 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/ai-security/user-guide-checklist.md @@ -0,0 +1,13 @@ +# AI 이용자 보안 체크리스트 요약 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +| # | 항목 | 확인 | +|---|------|:----:| +| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | +| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | +| 3 | AI 서비스 이용약관을 확인했는가? | □ | +| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | +| 5 | AI 출력 결과를 검증하고 있는가? | □ | +| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | +| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills-ko/fix/references/cii/admin.md b/skills-ko/kesekit-fix-ko/templates/cii/admin.md similarity index 100% rename from skills-ko/fix/references/cii/admin.md rename to skills-ko/kesekit-fix-ko/templates/cii/admin.md diff --git a/skills-ko/start/references/cii/cloud.md b/skills-ko/kesekit-fix-ko/templates/cii/cloud.md similarity index 82% rename from skills-ko/start/references/cii/cloud.md rename to skills-ko/kesekit-fix-ko/templates/cii/cloud.md index ef26ef5..42834e8 100644 --- a/skills-ko/start/references/cii/cloud.md +++ b/skills-ko/kesekit-fix-ko/templates/cii/cloud.md @@ -42,23 +42,4 @@ | CA-18 | 컨테이너/서버리스 보안 설정 | 중 | | CA-19 | 클라우드 서비스 가용성 관리 | 중 | -### 주요 점검 명령어 -```bash -# AWS -aws iam list-users -aws iam get-credential-report -aws ec2 describe-security-groups -aws s3api get-bucket-encryption --bucket -aws cloudtrail describe-trails - -# Azure -az ad user list -az network nsg list -az storage account list - -# GCP -gcloud iam service-accounts list -gcloud compute firewall-rules list -``` - ## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills-ko/fix/references/cii/control-system.md b/skills-ko/kesekit-fix-ko/templates/cii/control-system.md similarity index 100% rename from skills-ko/fix/references/cii/control-system.md rename to skills-ko/kesekit-fix-ko/templates/cii/control-system.md diff --git a/skills-ko/guide/references/cii/database.md b/skills-ko/kesekit-fix-ko/templates/cii/database.md similarity index 82% rename from skills-ko/guide/references/cii/database.md rename to skills-ko/kesekit-fix-ko/templates/cii/database.md index 67e8efc..d6847e0 100644 --- a/skills-ko/guide/references/cii/database.md +++ b/skills-ko/kesekit-fix-ko/templates/cii/database.md @@ -17,23 +17,6 @@ | D-08 | 안전한 암호화 알고리즘 사용 | 상 | | D-09 | 로그인 실패 시 잠금정책 설정 | 중 | -### 주요 점검 명령어 -```sql --- Oracle: 계정 확인 -SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; --- Oracle: 비밀번호 변경 -ALTER USER <계정> IDENTIFIED BY <신규비밀번호>; - --- MSSQL: sa 비밀번호 변경 -ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; - --- MySQL: root 비밀번호 변경 -ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; - --- PostgreSQL: 역할 확인 -SELECT rolname, rolsuper FROM pg_roles; -``` - ## 2. 접근 관리 (7항목) | 코드 | 항목 | 중요도 | diff --git a/skills-ko/fix/references/cii/mobile.md b/skills-ko/kesekit-fix-ko/templates/cii/mobile.md similarity index 100% rename from skills-ko/fix/references/cii/mobile.md rename to skills-ko/kesekit-fix-ko/templates/cii/mobile.md diff --git a/skills-ko/guide/references/cii/network.md b/skills-ko/kesekit-fix-ko/templates/cii/network.md similarity index 86% rename from skills-ko/guide/references/cii/network.md rename to skills-ko/kesekit-fix-ko/templates/cii/network.md index 1f99ce4..e168fb3 100644 --- a/skills-ko/guide/references/cii/network.md +++ b/skills-ko/kesekit-fix-ko/templates/cii/network.md @@ -66,22 +66,4 @@ | N-37 | pad 차단 | 중 | | N-38 | mask-reply 차단 | 중 | -### 주요 점검 명령어 (Cisco IOS) -``` -! 계정 관리 -show running-config | include username -show running-config | include enable secret - -! 접근 관리 -show running-config | include line vty -show running-config | include access-class - -! SNMP -show running-config | include snmp-server - -! 불필요 서비스 -show running-config | include no service -show ip http server -``` - ## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills-ko/check/references/cii/pc.md b/skills-ko/kesekit-fix-ko/templates/cii/pc.md similarity index 82% rename from skills-ko/check/references/cii/pc.md rename to skills-ko/kesekit-fix-ko/templates/cii/pc.md index c3dd9fc..b5ca66b 100644 --- a/skills-ko/check/references/cii/pc.md +++ b/skills-ko/kesekit-fix-ko/templates/cii/pc.md @@ -41,22 +41,4 @@ | PC-17 | 이동식 미디어 자동실행 방지 | 상 | | PC-18 | 원격 지원 금지 정책 설정 | 중 | -### 주요 점검 명령어 -```powershell -# PC-01: 비밀번호 최대 사용기간 -net accounts | findstr "최대" - -# PC-04: 공유 폴더 -net share - -# PC-13~14: 백신 -Get-MpComputerStatus - -# PC-15: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled - -# PC-16: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -``` - ## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills-ko/fix/references/cii/physical.md b/skills-ko/kesekit-fix-ko/templates/cii/physical.md similarity index 100% rename from skills-ko/fix/references/cii/physical.md rename to skills-ko/kesekit-fix-ko/templates/cii/physical.md diff --git a/skills-ko/fix/references/cii/security-equip.md b/skills-ko/kesekit-fix-ko/templates/cii/security-equip.md similarity index 100% rename from skills-ko/fix/references/cii/security-equip.md rename to skills-ko/kesekit-fix-ko/templates/cii/security-equip.md diff --git a/skills-ko/check/references/cii/unix.md b/skills-ko/kesekit-fix-ko/templates/cii/unix.md similarity index 68% rename from skills-ko/check/references/cii/unix.md rename to skills-ko/kesekit-fix-ko/templates/cii/unix.md index b9688e3..969c52f 100644 --- a/skills-ko/check/references/cii/unix.md +++ b/skills-ko/kesekit-fix-ko/templates/cii/unix.md @@ -21,35 +21,6 @@ | U-12 | 세션 종료 시간 설정 | 하 | | U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | -### 주요 점검 명령어 -```bash -# U-01: root 원격 접속 제한 -grep -i "PermitRootLogin" /etc/ssh/sshd_config -cat /etc/default/login | grep CONSOLE # Solaris -cat /etc/securetty # Linux - -# U-02: 비밀번호 정책 -cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" -cat /etc/security/pwquality.conf # Linux - -# U-03: 계정 잠금 -cat /etc/pam.d/system-auth | grep pam_tally -cat /etc/security/user | grep loginretries # AIX - -# U-04: shadow 파일 보호 -ls -la /etc/shadow - -# U-05: UID 0 점검 -awk -F: '$3==0 {print $1}' /etc/passwd - -# U-06: su 제한 -cat /etc/pam.d/su | grep pam_wheel -ls -la /usr/bin/su - -# U-12: 세션 타임아웃 -echo $TMOUT -``` - --- ## 2. 파일 및 디렉터리 관리 (20항목) @@ -77,38 +48,6 @@ echo $TMOUT | U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | | U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | -### 주요 점검 명령어 -```bash -# U-14: root PATH -echo $PATH | grep "::" -echo $PATH | grep ":$" - -# U-16~U-22: 주요 파일 권한 -ls -la /etc/passwd /etc/shadow /etc/hosts /etc/services -ls -la /etc/inetd.conf /etc/xinetd.conf /etc/syslog.conf /etc/rsyslog.conf - -# U-23: SUID/SGID -find / -perm -4000 -o -perm -2000 2>/dev/null - -# U-25: world writable -find / -type f -perm -002 2>/dev/null - -# U-26: /dev 점검 -find /dev -type f 2>/dev/null - -# U-27: rhosts -find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null - -# U-28: 접속 제한 -cat /etc/hosts.allow -cat /etc/hosts.deny -iptables -L - -# U-30: umask -umask -grep umask /etc/profile /etc/bashrc -``` - --- ## 3. 서비스 관리 (30항목) @@ -146,32 +85,6 @@ grep umask /etc/profile /etc/bashrc | U-62 | 로그인 시 경고 메시지 설정 | 하 | | U-63 | sudo 명령어 접근 관리 | 중 | -### 주요 점검 명령어 -```bash -# U-34~U-44: 불필요 서비스 점검 -systemctl list-unit-files --state=enabled -chkconfig --list # CentOS 6 -inetadm # Solaris - -# U-39~U-40: NFS -showmount -e -cat /etc/exports -cat /etc/dfs/dfstab # Solaris - -# U-45~U-48: 메일 서비스 -sendmail -d0.1 -bt < /dev/null 2>&1 | grep Version -postconf mail_version -cat /etc/mail/sendmail.cf | grep "O PrivacyOptions" - -# U-49~U-51: DNS -named -v -cat /etc/named.conf | grep "allow-transfer" - -# U-58~U-61: SNMP -cat /etc/snmp/snmpd.conf | grep -i community -ps -ef | grep snmp -``` - --- ## 4. 패치 관리 (1항목) @@ -180,14 +93,6 @@ ps -ef | grep snmp |------|------|:------:| | U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -```bash -# 패치 현황 -uname -a -rpm -qa --last | head -20 # Linux -showrev -p # Solaris -instfix -i | grep ML # AIX -``` - --- ## 5. 로그 관리 (4항목) @@ -198,20 +103,6 @@ instfix -i | grep ML # AIX | U-66 | 정책에 따른 시스템 로깅 설정 | 중 | | U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | -```bash -# U-65: NTP -ntpq -p -cat /etc/ntp.conf -chronyc sources # CentOS 8+ - -# U-66: 로깅 설정 -cat /etc/rsyslog.conf -cat /etc/syslog.conf - -# U-67: 로그 권한 -ls -la /var/log/ -``` - --- ## 판단 기준 diff --git a/skills-ko/fix/references/cii/virtualization.md b/skills-ko/kesekit-fix-ko/templates/cii/virtualization.md similarity index 100% rename from skills-ko/fix/references/cii/virtualization.md rename to skills-ko/kesekit-fix-ko/templates/cii/virtualization.md diff --git a/skills-ko/guide/references/cii/web-service.md b/skills-ko/kesekit-fix-ko/templates/cii/web-service.md similarity index 78% rename from skills-ko/guide/references/cii/web-service.md rename to skills-ko/kesekit-fix-ko/templates/cii/web-service.md index e3f96bd..9f6298a 100644 --- a/skills-ko/guide/references/cii/web-service.md +++ b/skills-ko/kesekit-fix-ko/templates/cii/web-service.md @@ -49,26 +49,4 @@ | WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | | WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | -### 주요 점검 명령어 -```bash -# WEB-04: 디렉터리 리스팅 -# Apache -grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" -# Nginx -grep -i "autoindex" /etc/nginx/nginx.conf - -# WEB-09: 프로세스 권한 -ps -ef | grep httpd | grep -v root - -# WEB-16: 헤더 정보 노출 -# Apache: grep "ServerTokens" httpd.conf → Prod 설정 -# Nginx: grep "server_tokens" nginx.conf → off 설정 - -# WEB-18: WebDAV -grep -i "LoadModule.*dav" /etc/httpd/conf/httpd.conf - -# WEB-20: SSL/TLS -grep -i "SSLProtocol\|ssl_protocols" /etc/httpd/conf.d/ssl.conf /etc/nginx/nginx.conf -``` - ## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills-ko/guide/references/cii/webapp.md b/skills-ko/kesekit-fix-ko/templates/cii/webapp.md similarity index 71% rename from skills-ko/guide/references/cii/webapp.md rename to skills-ko/kesekit-fix-ko/templates/cii/webapp.md index 5a1888d..ca84427 100644 --- a/skills-ko/guide/references/cii/webapp.md +++ b/skills-ko/kesekit-fix-ko/templates/cii/webapp.md @@ -44,27 +44,4 @@ | IL | 불필요한 정보 노출 | 중 | | AU | 부적절한 감사 로깅 | 중 | -### 주요 점검 패턴 -``` -# SQL Injection -- 문자열 연결 쿼리: "SELECT * FROM users WHERE id = '" + input -- 안전: PreparedStatement, 매개변수화 쿼리, ORM - -# XSS -- innerHTML, document.write(input), v-html -- 안전: textContent, DOMPurify, 자동 이스케이프 - -# Command Injection -- Runtime.exec(input), subprocess(shell=True) -- 안전: 화이트리스트 검증, execFile - -# CSRF -- POST 요청에 CSRF 토큰 누락 -- 안전: 프레임워크 CSRF 미들웨어 - -# File Upload -- 확장자 미검증, 웹 루트 내 저장 -- 안전: 화이트리스트, 웹 루트 외부 저장, 랜덤 파일명 -``` - ## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills-ko/fix/references/cii/windows.md b/skills-ko/kesekit-fix-ko/templates/cii/windows.md similarity index 74% rename from skills-ko/fix/references/cii/windows.md rename to skills-ko/kesekit-fix-ko/templates/cii/windows.md index cef3781..15a5c32 100644 --- a/skills-ko/fix/references/cii/windows.md +++ b/skills-ko/kesekit-fix-ko/templates/cii/windows.md @@ -21,24 +21,6 @@ | W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | | W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | -### 주요 점검 명령어 -```powershell -# W-01: Administrator 계정명 -Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select Name - -# W-02: Guest 비활성화 -Get-LocalUser -Name "Guest" | Select Enabled - -# W-04: 계정 잠금 -net accounts - -# W-06: 관리자 그룹 -net localgroup Administrators - -# W-09: 패스워드 정책 -net accounts -``` - --- ## 2. 서비스 관리 (23항목) @@ -69,23 +51,6 @@ net accounts | W-36 | 원격터미널 접속 타임아웃 설정 | 중 | | W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | -### 주요 점검 명령어 -```powershell -# W-17: 기본 공유 -net share -Get-SmbShare - -# W-18: 서비스 목록 -Get-Service | Where-Object {$_.Status -eq "Running"} - -# W-19: IIS -Get-Service W3SVC - -# W-29~31: SNMP -Get-Service SNMP -reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" -``` - --- ## 3. 패치 관리 (2항목) @@ -95,15 +60,6 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommuniti | W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | | W-39 | 백신 프로그램 업데이트 | 상 | -```powershell -# W-38: 패치 현황 -Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 10 -systeminfo | findstr "KB" - -# W-39: 백신 -Get-MpComputerStatus # Windows Defender -``` - --- ## 4. 로그 관리 (4항목) @@ -115,17 +71,6 @@ Get-MpComputerStatus # Windows Defender | W-42 | 이벤트 로그 관리 설정 | 하 | | W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | -```powershell -# W-40: 감사 정책 -auditpol /get /category:* - -# W-41: NTP -w32tm /query /status - -# W-42: 이벤트 로그 설정 -Get-EventLog -List -``` - --- ## 5. 보안 관리 (21항목) @@ -154,28 +99,6 @@ Get-EventLog -List | W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | | W-64 | 윈도우 방화벽 설정 | 중 | -### 주요 점검 명령어 -```powershell -# W-44: 원격 레지스트리 -Get-Service RemoteRegistry | Select Status - -# W-46: SAM 파일 -icacls C:\Windows\System32\config\SAM - -# W-47: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure - -# W-52: Autologon -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon - -# W-59: LAN Manager -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel - -# W-64: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled -``` - --- ## 통계 diff --git a/skills-ko/fix/references/robot-security/cyber-resilience.md b/skills-ko/kesekit-fix-ko/templates/robot-security/cyber-resilience.md similarity index 100% rename from skills-ko/fix/references/robot-security/cyber-resilience.md rename to skills-ko/kesekit-fix-ko/templates/robot-security/cyber-resilience.md diff --git a/skills-ko/fix/references/robot-security/iec62443.md b/skills-ko/kesekit-fix-ko/templates/robot-security/iec62443.md similarity index 100% rename from skills-ko/fix/references/robot-security/iec62443.md rename to skills-ko/kesekit-fix-ko/templates/robot-security/iec62443.md diff --git a/skills-ko/fix/references/robot-security/overview.md b/skills-ko/kesekit-fix-ko/templates/robot-security/overview.md similarity index 100% rename from skills-ko/fix/references/robot-security/overview.md rename to skills-ko/kesekit-fix-ko/templates/robot-security/overview.md diff --git a/skills-ko/fix/references/robot-security/ssdf.md b/skills-ko/kesekit-fix-ko/templates/robot-security/ssdf.md similarity index 100% rename from skills-ko/fix/references/robot-security/ssdf.md rename to skills-ko/kesekit-fix-ko/templates/robot-security/ssdf.md diff --git a/skills-ko/fix/references/robot-security/supply-chain.md b/skills-ko/kesekit-fix-ko/templates/robot-security/supply-chain.md similarity index 100% rename from skills-ko/fix/references/robot-security/supply-chain.md rename to skills-ko/kesekit-fix-ko/templates/robot-security/supply-chain.md diff --git a/skills-ko/fix/references/robot-security/wireless.md b/skills-ko/kesekit-fix-ko/templates/robot-security/wireless.md similarity index 100% rename from skills-ko/fix/references/robot-security/wireless.md rename to skills-ko/kesekit-fix-ko/templates/robot-security/wireless.md diff --git a/skills-ko/kesekit-fix-ko/templates/secure-coding/javascript.md b/skills-ko/kesekit-fix-ko/templates/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/skills-ko/kesekit-fix-ko/templates/secure-coding/python.md b/skills-ko/kesekit-fix-ko/templates/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/skills-ko/kesekit-fix-ko/templates/space-security/access-control.md b/skills-ko/kesekit-fix-ko/templates/space-security/access-control.md new file mode 100644 index 0000000..7232d6a --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/space-security/access-control.md @@ -0,0 +1,49 @@ +# Access Control & Authentication Checklist + +> Domains: AC (Access Control, 12 items) + IA (Identification & Authentication, 2 items) + +## AC — Access Control (12 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| AC-01 | Access Control Policy | Restrict access to authorized users/processes/devices only | Access control policy established, authorized entities identified, per-system access rules defined | +| AC-02 | Least Privilege | Grant minimum necessary permissions | Least privilege procedures, management approval, periodic review | +| AC-03 | Privileged Access Use | Restrict and audit privileged account usage | Privileged account types defined/limited, audit logs stored/reviewed | +| AC-04 | Information Flow Control | Control information flow within and between systems | Flow control policy, source/destination identification, change approval | +| AC-05 | Separation of Duties | Prevent authority abuse through role separation | Duty separation policy, critical duties separated, compensating controls | +| AC-06 | Failed Login Attempts | Protect accounts from brute-force attacks | Max attempt limits, auto-lockout policy, alert/notification on failures | +| AC-07 | Session Lock & Termination | Prevent unauthorized access during idle sessions | Auto-lock on inactivity, re-authentication required, session termination conditions | +| AC-08 | Remote Access Control | Prevent unauthorized remote access | Remote access policy, device security check/MFA/encryption, monitoring/logging | +| AC-09 | Wireless Access | Prevent unauthorized wireless connections | Wireless policy, authentication/encryption, unauthorized AP prevention | +| AC-10 | Mobile Device Control | Control mobile device connections | Mobile device policy, data encryption, loss/theft protection | +| AC-11 | External Connection Control | Protect system boundaries from external systems | External systems identified, approved methods only, continuous monitoring | +| AC-12 | Public Information Control | Prevent sensitive information disclosure | Pre-publication review/approval, designated reviewers, periodic content review | + +### AC Protection Measures Summary + +| Category | Measures | +|----------|----------| +| Account Management | 1-person-1-account, default account deletion, immediate revocation on termination, annual full review | +| Authentication | MFA for privileged access, SSH/SFTP/VPN only, 8+ char passwords with 2+ character types | +| Network | ACL-based deny-all, IP/port whitelisting, WPA3/WPA2-Enterprise, WIPS deployment | +| Session | 10-min inactivity lock, screensaver with password, session timeout enforcement | +| Remote Access | 3-step procedure (request/approve/monitor), VPN+MFA, high-risk assets remote-access-denied by default | +| Monitoring | Failed login alerts to SOC, audit log analysis, access log review | + +## IA — Identification & Authentication (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IA-01 | Identification & Authentication | Prevent unauthorized access and credential theft | Unique identifiers for users/processes/devices, password complexity (upper+lower+special+number, 8+ chars), cryptographic protection, reuse prevention | +| IA-02 | Multi-Factor Authentication | Strengthen privileged account authentication, prevent replay attacks | MFA for privileged network access, replay attack prevention (challenge-response/timestamp) | + +### IA Protection Measures + +| Measure | Detail | +|---------|--------| +| Password Policy | Min 8 chars, 3+ character types, 90-day rotation, history check (last 5) | +| MFA Methods | OTP, certificate, biometric — at least 2 factors required | +| Replay Prevention | Challenge-response protocol, timestamp-based token validation | +| Credential Storage | Hashed (SHA-256+), no plaintext storage, encrypted transmission | + +## Total: 14 Items (AC: 12 + IA: 2) diff --git a/skills-ko/kesekit-fix-ko/templates/space-security/governance.md b/skills-ko/kesekit-fix-ko/templates/space-security/governance.md new file mode 100644 index 0000000..3ff7049 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/space-security/governance.md @@ -0,0 +1,90 @@ +# Governance, Personnel, Physical & Risk Checklist + +> Domains: PS (2) + PE (3) + RA (2) + SG (4) + CP (2) = 13 items + +## PS — Personnel Security (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PS-01 | Personnel Security | Control insider threats, prevent unauthorized personnel access | Background check on hiring, access review/revocation on role change/termination, disciplinary procedures | +| PS-02 | Security Awareness Training | Prevent security incidents, strengthen role-based security competency | Awareness activities, professional training plans, annual execution including contractors | + +### PS Protection Measures + +| Measure | Detail | +|---------|--------| +| Background Check | Resume/education/identity verification before hiring | +| Termination | Immediate access revocation, asset return, NDA enforcement | +| Training | Annual minimum, phishing simulation, role-specific curriculum, contractor inclusion | + +## PE — Physical & Environmental Security (3 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PE-01 | Physical Access Control | Block unauthorized physical access, ensure asset integrity | Entry control/monitoring, visitor escort, access log retention, control device management | +| PE-02 | Alternate Work Site Security | Maintain confidentiality in alternate work environments | Security control standards, work device security, secure remote access | +| PE-03 | Protective Equipment Operation | Ensure physical safety against environmental threats | Equipment inspection, environmental controls (temperature/humidity/fire/water/power) | + +### PE Protection Measures + +| Category | Measures | +|----------|----------| +| Access Zones | Controlled/restricted/reception areas designated, card reader/biometric, CCTV | +| Visitor Policy | Escort required, visitor log, temporary badge | +| Alternate Sites | Home/travel/remote office classification, organization-issued device, VPN+MFA | +| Environmental | UPS/emergency generator/dual power, 10-32C server room, fire detection/suppression, periodic inspection | + +## RA — Risk Assessment & Security Evaluation (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| RA-01 | Risk Assessment | Identify, assess, and manage organizational risks | Risk management framework, periodic assessment (annual+) | +| RA-02 | Security Control Monitoring & Effectiveness | Ensure continuous security control effectiveness | Effectiveness evaluation framework, periodic review/update | + +### RA Protection Measures + +| Measure | Detail | +|---------|--------| +| Assessment Method | Baseline/detailed/combined approach, management/technical/physical/legal domains | +| Frequency | Annual minimum, ad-hoc on major changes | +| Metrics | KPI/security performance indicators: violation rate, infection rate, scanning completion rate | +| Responsibility | Designated monitoring officer, management reporting | + +## SG — Security Governance (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SG-01 | Security Policy Establishment | Ensure policy effectiveness and currency | Top-level policy creation/approval/dissemination, periodic review/update, improvement plans | +| SG-02 | Security Roles & Responsibilities | Clarify security accountability | CISO designation, role/responsibility assignment/review | +| SG-03 | Asset Management | Maintain asset integrity and security posture | Asset identification/inventory/updates, classification/owner assignment | +| SG-04 | Legal Requirements Compliance | Ensure regulatory compliance | Legal requirements identification/integration, independent compliance review | + +### SG Key Regulations + +| Regulation | Relevance | +|-----------|-----------| +| Personal Information Protection Act | Data collected by satellite services | +| ICT Infrastructure Protection Act | CII designation for space systems | +| Radio Waves Act | Satellite frequency management | +| Space Development Promotion Act | Space industry regulations | +| Cloud Computing Act | GSaaS cloud infrastructure | +| NIS2 (EU) | Space as essential service sector | +| CMMC (US) | Defense supply chain requirements | + +## CP — Contingency Planning (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| CP-01 | Contingency Plan | Ensure space system operational continuity | Disaster type identification, impact analysis, critical service identification, recovery procedures | +| CP-02 | Backup & Redundancy Management | Ensure critical information/system availability | Periodic backup, safe storage, regular testing, system redundancy | + +### CP Protection Measures + +| Measure | Detail | +|---------|--------| +| RTO/RPO | Define for each critical service (satellite control, MOC, PCC) | +| Backup Plan | Target/frequency/retention/method defined, backup confidentiality/integrity/availability verified | +| Redundancy | Network/system dual paths, failover testing | +| BCP | Business continuity management system, emergency contact chain, recovery organization | + +## Total: 13 Items (PS: 2 + PE: 3 + RA: 2 + SG: 4 + CP: 2) diff --git a/skills-ko/kesekit-fix-ko/templates/space-security/operations.md b/skills-ko/kesekit-fix-ko/templates/space-security/operations.md new file mode 100644 index 0000000..d1a2d0d --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/space-security/operations.md @@ -0,0 +1,47 @@ +# Operations & Incident Response Checklist + +> Domains: SO (System/Service Operations Management, 9 items) + IR (Incident Response, 2 items) + +## SO — System/Service Operations Management (9 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SO-01 | Maintenance Control | Control maintenance personnel, tools, and remote access | Work request/approval/logging, NDA, media sanitization, VPN+MFA for remote maintenance | +| SO-02 | System Audit & Log Analysis | Detect unauthorized/abnormal activities, ensure accountability | Audit log generation/retention, tamper protection, restricted admin access, integrated analysis/reporting | +| SO-03 | Time Synchronization | Ensure audit log accuracy and reliability | NTP standard time sync, internal NTP server, periodic verification | +| SO-04 | Portable Storage Security | Protect storage media confidentiality/integrity | Classification marking, encrypted transfer, unauthorized media control, secure disposal | +| SO-05 | Configuration Management | Establish configuration baselines, maintain integrity | HW/SW/FW baseline identification, security configuration documentation, periodic monitoring | +| SO-06 | Security Requirements Definition | Define security requirements from planning phase | Authentication/access control/encryption/logging requirements in RFP, secure coding standards | +| SO-07 | Change Management | Ensure integrity during system/application changes | Change review/approval/recording, pre-change security impact analysis, access restrictions | +| SO-08 | Development Testing & Evaluation | Verify security requirement implementation | Acceptance testing, source code verification, vulnerability scanning in production-equivalent environment | +| SO-09 | Function Minimization & SW Control | Remove unnecessary features, control unauthorized software | Essential functions only, blacklist/whitelist policies, disable DHCP/Print Spooler etc., block P2P/webhard | + +### SO Protection Measures Summary + +| Category | Key Actions | +|----------|-------------| +| Maintenance | Approved personnel only, clean PC with AV scan, media control, session recording | +| Logging | All systems generate audit logs, tamper-proof storage, min 1-year retention, weekly review | +| Media Control | USB port lock, media control solution, encrypted transport, overwrite-based disposal | +| Configuration | Baseline registry/account/network settings, monthly drift detection, rollback capability | +| Secure Development | Security requirements in RFP, secure coding per language (Java/PHP/ASP/C), code review | +| Change Control | Formal approval process, security impact analysis, revision history, pre/post testing | + +## IR — Incident Response (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IR-01 | Incident Handling & Testing | Minimize damage and enable rapid recovery | Incident classification, detection/response/recovery procedures, post-incident review, periodic drills | +| IR-02 | Incident Reporting | Enable consistent response through timely reporting | Internal reporting chain, regulatory notification, stakeholder communication | + +### IR Protection Measures + +| Measure | Detail | +|---------|--------| +| Incident Types | Malware, unauthorized access, service disruption, data breach, physical compromise | +| Response Phases | Preparation > Detection > Investigation > Analysis > Containment > Eradication > Recovery | +| Reporting Timeline | Internal: immediate; KISA: within 24 hours (per ICT Infrastructure Act Art.48-3); NIS2: 24h/72h/1month staged | +| Emergency Contacts | Quarterly review, 24/7 contact chain, regulatory liaison designated | +| Testing | Annual tabletop exercise, biannual red team drill, post-exercise lessons learned | + +## Total: 11 Items (SO: 9 + IR: 2) diff --git a/skills-ko/kesekit-fix-ko/templates/space-security/supply-chain.md b/skills-ko/kesekit-fix-ko/templates/space-security/supply-chain.md new file mode 100644 index 0000000..750fe6f --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/space-security/supply-chain.md @@ -0,0 +1,47 @@ +# Supply Chain Management Checklist + +> Domain: SM (Supply Chain Management, 4 items) + +## SM — Supply Chain Management (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SM-01 | Supply Chain Protection | Identify and mitigate supply chain risks | Supply chain security policy, vendor selection criteria/contract security requirements, vendor registry updates | +| SM-02 | Pre-Acquisition Evaluation | Prevent vulnerable assets from entering operations | Pre-acquisition/update vulnerability scanning, acceptance testing, counterfeit inspection | +| SM-03 | All-Source Information Use | Achieve software transparency through SBOM | Require SBOM from suppliers, use SBOM for transparency/continuous management | +| SM-04 | Tampering/Counterfeiting Prevention & Detection | Detect and block supply chain tampering | Verify vendor development/distribution integrity, acceptance/operations integrity verification | + +### SM Protection Measures + +| Category | Measures | +|----------|----------| +| Contract Security | Training/incident notification/vulnerability remediation/audit rights/data disposal on termination in contracts | +| SBOM Management | SPDX/CycloneDX standard format, open-source/commercial SW identification, CVE periodic scanning | +| Integrity Verification | Hash value/digital signature verification, SBOM-based impact identification on new vulnerabilities | +| Vendor Management | Periodic vendor security audits, vendor registry maintenance, conditional acceptance criteria | + +## Supply Chain Architecture (3 Zones) + +### Satellite/Launch Vehicle Manufacturer +| Component | Security Focus | +|-----------|---------------| +| SW Development Server | IDE plugin verification, malware scanning | +| Library DB | Open-source library verification, vulnerability scanning | +| Code DB | Source code integrity, access control | +| Manufacturing Systems | Satellite bus, payload, launch vehicle manufacturing integrity | + +### Ground Station Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Control System | Build pipeline security, backdoor prevention | +| SW Development Server | Secure development environment | +| SW Update Server | Update file integrity verification, secure transmission | +| Library/Code DB | Vulnerable open-source blocking, SBOM verification | + +### Satellite Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Application System | Hard-coded credential prevention | +| SW Development Server | Remote work environment security | +| Data Processing System | Maintenance account management | +| Library/Code DB | Auto-build malicious open-source prevention | diff --git a/skills-ko/kesekit-fix-ko/templates/space-security/system-security.md b/skills-ko/kesekit-fix-ko/templates/space-security/system-security.md new file mode 100644 index 0000000..7297ada --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/space-security/system-security.md @@ -0,0 +1,46 @@ +# System & Communication Security Checklist + +> Domains: SC (System & Communication Security, 7 items) + SI (System & Information Integrity, 4 items) + +## SC — System & Communication Security (7 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SC-01 | Boundary Protection | Block unauthorized communications at boundaries | Network segmentation, DMZ deployment, communication encryption/monitoring, deny-all ACL | +| SC-02 | Security Engineering & Function Separation | Defense-in-depth, eliminate single points of failure | Security engineering principles, admin/user function separation, Secure by Design | +| SC-03 | Stored & Transmitted Information Security | Protect command/telemetry/log confidentiality and integrity | Storage encryption, uplink/downlink encryption, shared resource protection | +| SC-04 | Communication Security | Establish/maintain/terminate secure sessions | Default deny policy, authenticated/integrity-checked channels, session timeout | +| SC-05 | Encryption | Apply cryptographic algorithms and manage keys | Approved algorithms, key lifecycle management (create/distribute/store/retire) | +| SC-06 | Collaborative Computing Devices | Prevent remote camera/mic activation, prevent leaks | Device inventory, remote activation blocked, LED indicator required | +| SC-07 | Mobile Code & VoIP Control | Prevent malicious code execution and unauthorized VoIP | Mobile code execution control, VoIP usage restriction, monitoring | + +### SC Protection Measures + +| Category | Measures | +|----------|----------| +| Network Segmentation | Physical/logical separation, DMZ for public servers, satellite-control/operations/internet isolation | +| Encryption Standards | AES-256/ARIA-256, TLS 1.2+, IPsec VPN, CCSDS 352.0-B-2 for space systems | +| Integrity Verification | Digital signatures, HMAC, memory/buffer initialization | +| Session Management | mTLS, split-tunneling blocked, session ID rotation, 2-30 min timeout | +| Cryptographic Keys | AES-256, SHA-256+, RSA-4096+; PROHIBIT TDEA/MD5/SHA-1; full key lifecycle management | +| Code Control | ActiveX/Java Runtime disabled, script whitelisting, signed code only, SRTP for VoIP | + +## SI — System & Information Integrity (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SI-01 | Vulnerability Scanning & Flaw Remediation | Identify and fix system/application vulnerabilities | Periodic scanning, immediate scan on new vulnerabilities, flaw identification/remediation/reporting | +| SI-02 | Malicious Code Prevention | Prevent virus/worm/ransomware infiltration | Anti-malware on all systems, periodic/real-time scanning, signature updates | +| SI-03 | Security Alerts & Advisories | Monitor and respond to security alerts | Continuous monitoring of KISA/NCSC/CISA/NIST NVD, impact analysis, patch/hardening | +| SI-04 | System & Communication Traffic Monitoring | Detect abnormal traffic in real-time | Monitoring policy, inbound/outbound monitoring, result analysis/response | + +### SI Protection Measures + +| Measure | Detail | +|---------|--------| +| Vulnerability Management | Network/server/security/app/web scanning, CWE/CVE-based, prioritized remediation | +| Anti-Malware | Enterprise AV on all assets, daily+ updates, P2P/webhard blocked, central management | +| Alert Monitoring | RSS/email subscription to KISA/CISA/NVD, internal notification chain, patch within SLA | +| Traffic Monitoring | IDS/IPS at boundaries, access/security/network log integration, automated alerting | + +## Total: 11 Items (SC: 7 + SI: 4) diff --git a/skills-ko/kesekit-fix-ko/templates/zero-trust/app-data.md b/skills-ko/kesekit-fix-ko/templates/zero-trust/app-data.md new file mode 100644 index 0000000..f8d1195 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/zero-trust/app-data.md @@ -0,0 +1,162 @@ +# Application & Data Checklist + +> Zero Trust Maturity Assessment — Application (AP) & Data (DA) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## AP — 애플리케이션 및 워크로드 (Application) (60 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AP-01 | 리소스 권한 부여 및 통합 | 접근에 대한 사용자/시스템 권한을 수동으로 관리하는가? | Traditional | Critical | +| ZT-AP-02 | 리소스 권한 부여 및 통합 | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | Traditional | Critical | +| ZT-AP-03 | 리소스 권한 부여 및 통합 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | Initial | High | +| ZT-AP-04 | 리소스 권한 부여 및 통합 | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | Initial | High | +| ZT-AP-05 | 리소스 권한 부여 및 통합 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-06 | 리소스 권한 부여 및 통합 | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-07 | 리소스 권한 부여 및 통합 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | Optimal | Low | +| ZT-AP-08 | 리소스 권한 부여 및 통합 | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | Optimal | Low | +| ZT-AP-09 | 리소스 권한 부여 및 통합 | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | Optimal | Low | +| ZT-AP-10 | 리소스 권한 부여 및 통합 | 모든 리소스 권한 부여가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-11 | 지속적인 모니터링 및 진행 중인 승인 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | Traditional | Critical | +| ZT-AP-12 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-AP-13 | 지속적인 모니터링 및 진행 중인 승인 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | Initial | High | +| ZT-AP-14 | 지속적인 모니터링 및 진행 중인 승인 | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | Initial | High | +| ZT-AP-15 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | Advanced | Medium | +| ZT-AP-16 | 지속적인 모니터링 및 진행 중인 승인 | 보안 승인 프로세스를 자동화할 수 있는가? | Advanced | Medium | +| ZT-AP-17 | 지속적인 모니터링 및 진행 중인 승인 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | Optimal | Low | +| ZT-AP-18 | 원격 접속 | VPN을 통해서 외부 접속을 지원하는가? | Traditional | Critical | +| ZT-AP-19 | 원격 접속 | 애플리케이션에 대한 접근제어가 제한적인가? | Traditional | Critical | +| ZT-AP-20 | 원격 접속 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | Initial | High | +| ZT-AP-21 | 원격 접속 | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | Advanced | Medium | +| ZT-AP-22 | 원격 접속 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | Advanced | Medium | +| ZT-AP-23 | 원격 접속 | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | Optimal | Low | +| ZT-AP-24 | 원격 접속 | AI를 활용하여 원격 접속 보안을 고도화 하였는가? | Optimal | Low | +| ZT-AP-25 | 원격 접속 | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | Optimal | Low | +| ZT-AP-26 | 안전한 애플리케이션 배포 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | Traditional | Critical | +| ZT-AP-27 | 안전한 애플리케이션 배포 | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | Traditional | Critical | +| ZT-AP-28 | 안전한 애플리케이션 배포 | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | Traditional | Critical | +| ZT-AP-29 | 안전한 애플리케이션 배포 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | Initial | High | +| ZT-AP-30 | 안전한 애플리케이션 배포 | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | Initial | High | +| ZT-AP-31 | 안전한 애플리케이션 배포 | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | Initial | High | +| ZT-AP-32 | 안전한 애플리케이션 배포 | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | Initial | High | +| ZT-AP-33 | 안전한 애플리케이션 배포 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | Advanced | Medium | +| ZT-AP-34 | 안전한 애플리케이션 배포 | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | Advanced | Medium | +| ZT-AP-35 | 안전한 애플리케이션 배포 | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | Advanced | Medium | +| ZT-AP-36 | 안전한 애플리케이션 배포 | 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | Advanced | Medium | +| ZT-AP-37 | 안전한 애플리케이션 배포 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | Optimal | Low | +| ZT-AP-38 | 안전한 애플리케이션 배포 | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | Optimal | Low | +| ZT-AP-39 | 애플리케이션 인벤토리 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | Traditional | Critical | +| ZT-AP-40 | 애플리케이션 인벤토리 | 애플리케이션 기본 정보를 기록하여 관리하는가? | Traditional | Critical | +| ZT-AP-41 | 애플리케이션 인벤토리 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | Initial | High | +| ZT-AP-42 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가/관리할 수 있는가? | Advanced | Medium | +| ZT-AP-43 | 애플리케이션 인벤토리 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | Optimal | Low | +| ZT-AP-44 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-AP-45 | 보안 소프트웨어 개발 및 통합 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | Traditional | Critical | +| ZT-AP-46 | 보안 소프트웨어 개발 및 통합 | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | Traditional | Critical | +| ZT-AP-47 | 보안 소프트웨어 개발 및 통합 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | Initial | High | +| ZT-AP-48 | 보안 소프트웨어 개발 및 통합 | DevSecOps 문화를 도입하였는가? | Initial | High | +| ZT-AP-49 | 보안 소프트웨어 개발 및 통합 | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | Initial | High | +| ZT-AP-50 | 보안 소프트웨어 개발 및 통합 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | Advanced | Medium | +| ZT-AP-51 | 보안 소프트웨어 개발 및 통합 | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | Advanced | Medium | +| ZT-AP-52 | 보안 소프트웨어 개발 및 통합 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | Optimal | Low | +| ZT-AP-53 | 보안 소프트웨어 개발 및 통합 | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | Optimal | Low | +| ZT-AP-54 | 보안 소프트웨어 개발 및 통합 | 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-55 | 소프트웨어 위험 관리 | 최소한의 위험 요소가 식별되고 문서화 하였는가? | Traditional | Critical | +| ZT-AP-56 | 소프트웨어 위험 관리 | 소프트웨어 위험 관리 계획이 수립되어 있는가? | Traditional | Critical | +| ZT-AP-57 | 소프트웨어 위험 관리 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | Initial | High | +| ZT-AP-58 | 소프트웨어 위험 관리 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | Advanced | Medium | +| ZT-AP-59 | 소프트웨어 위험 관리 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | Optimal | Low | +| ZT-AP-60 | 소프트웨어 위험 관리 | 맞춤형 공격에 대응 가능한가? | Optimal | Low | + +### AP Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 리소스 권한 부여 및 통합 | 수동 권한 관리, 정적 접근제어 | 중앙 집중식 관리 | 컨텍스트 기반 최소 권한, 정밀 관리 | 실시간 분석, 자동 권한 부여/회수, 완전 자동화 | +| 지속적인 모니터링 및 승인 | 수동 모니터링, 수동 이벤트 기록 | 실시간 이벤트 수집/분석, 보안 검토 | AI 분석, 승인 자동화 | 실시간 탐지, 위협 사전 예측 | +| 원격 접속 | VPN 외부 접속, 제한적 접근제어 | 자동 보안 상태 평가 | 실시간 모니터링, 맞춤형 정책 | 동적 보안 정책, AI 고도화, 즉각 차단 | +| 안전한 애플리케이션 배포 | 수동 코드 검토, 배포 절차, 접근제어 | 자동화 파이프라인, CI/CD 취약점 검사, 무결성 검사 | 지속적 모니터링, 정책 자동 검증, 즉각 대응 | 완전 자동 배포, AI 위협 탐지 통합 | +| 애플리케이션 인벤토리 | 수동 목록화, 기본 정보 기록 | 자동 식별/관리 | 보안 상태 평가/관리 | AI 실시간 반영, 보안 시스템 통합 | +| 보안 SW 개발 및 통합 | 보안 코딩 표준, 수동 테스트 | SDLC 통합, DevSecOps, SBOM | 서드파티 자동 검사, 전체 SBOM | 프로세스 격리, 런타임 분석, 완전 자동화 | +| 소프트웨어 위험 관리 | 위험 식별/문서화, 관리 계획 | 위험 평가 프로세스 | 공급망 보안, 전주기 자동화 | AI 예측 분석, 맞춤형 공격 대응 | + +--- + +## DA — 데이터 (Data) (58 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DA-01 | 데이터 카탈로그 위험 정렬 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | Traditional | Critical | +| ZT-DA-02 | 데이터 카탈로그 위험 정렬 | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | Traditional | Critical | +| ZT-DA-03 | 데이터 카탈로그 위험 정렬 | 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | Traditional | Critical | +| ZT-DA-04 | 데이터 카탈로그 위험 정렬 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | Initial | High | +| ZT-DA-05 | 데이터 카탈로그 위험 정렬 | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | Initial | High | +| ZT-DA-06 | 데이터 카탈로그 위험 정렬 | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | Initial | High | +| ZT-DA-07 | 데이터 카탈로그 위험 정렬 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | Advanced | Medium | +| ZT-DA-08 | 데이터 카탈로그 위험 정렬 | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-DA-09 | 데이터 카탈로그 위험 정렬 | 데이터 사용 패턴 분석이 가능한가? | Advanced | Medium | +| ZT-DA-10 | 데이터 카탈로그 위험 정렬 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | Optimal | Low | +| ZT-DA-11 | 데이터 카탈로그 위험 정렬 | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | Optimal | Low | +| ZT-DA-12 | 기업 데이터 거버넌스 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | Traditional | Critical | +| ZT-DA-13 | 기업 데이터 거버넌스 | 데이터 소유자와 관리자를 지정하였는가? | Traditional | Critical | +| ZT-DA-14 | 기업 데이터 거버넌스 | 데이터 거버넌스 프레임워크가 도입되어 있는가? | Traditional | Critical | +| ZT-DA-15 | 기업 데이터 거버넌스 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | Initial | High | +| ZT-DA-16 | 기업 데이터 거버넌스 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | Advanced | Medium | +| ZT-DA-17 | 기업 데이터 거버넌스 | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | Advanced | Medium | +| ZT-DA-18 | 기업 데이터 거버넌스 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | Optimal | Low | +| ZT-DA-19 | 데이터 접근제어 | 데이터 접근 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-20 | 데이터 접근제어 | 데이터 접근권한이 수동으로 부여되는가? | Traditional | Critical | +| ZT-DA-21 | 데이터 접근제어 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-22 | 데이터 접근제어 | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | Initial | High | +| ZT-DA-23 | 데이터 접근제어 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | Advanced | Medium | +| ZT-DA-24 | 데이터 접근제어 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-25 | 데이터 암호화 및 권한 관리 | 데이터를 수동으로 암호화하는가? | Traditional | Critical | +| ZT-DA-26 | 데이터 암호화 및 권한 관리 | 암호화 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-27 | 데이터 암호화 및 권한 관리 | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-28 | 데이터 암호화 및 권한 관리 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | Initial | High | +| ZT-DA-29 | 데이터 암호화 및 권한 관리 | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-30 | 데이터 암호화 및 권한 관리 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | Advanced | Medium | +| ZT-DA-31 | 데이터 암호화 및 권한 관리 | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | Advanced | Medium | +| ZT-DA-32 | 데이터 암호화 및 권한 관리 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-33 | 데이터 암호화 및 권한 관리 | 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | Optimal | Low | +| ZT-DA-34 | 데이터 라벨링 및 태그 지정 | 라벨링 및 태그 지정 지침을 수립하였는가? | Traditional | Critical | +| ZT-DA-35 | 데이터 라벨링 및 태그 지정 | 일관된 데이터 분류 체계가 마련되어 있는가? | Traditional | Critical | +| ZT-DA-36 | 데이터 라벨링 및 태그 지정 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별/분류하는가? | Initial | High | +| ZT-DA-37 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | Initial | High | +| ZT-DA-38 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | Initial | High | +| ZT-DA-39 | 데이터 라벨링 및 태그 지정 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류/식별 가능한가? | Advanced | Medium | +| ZT-DA-40 | 데이터 라벨링 및 태그 지정 | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | Advanced | Medium | +| ZT-DA-41 | 데이터 라벨링 및 태그 지정 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | Optimal | Low | +| ZT-DA-42 | 데이터 라벨링 및 태그 지정 | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | Optimal | Low | +| ZT-DA-43 | 데이터 손실 방지 (DLP) | DLP 정책을 수립하고 수동으로 평가하는가? | Traditional | Critical | +| ZT-DA-44 | 데이터 손실 방지 (DLP) | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | Traditional | Critical | +| ZT-DA-45 | 데이터 손실 방지 (DLP) | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | Initial | High | +| ZT-DA-46 | 데이터 손실 방지 (DLP) | DLP 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-DA-47 | 데이터 손실 방지 (DLP) | DLP 솔루션이 모니터링 모드로 동작하는가? | Initial | High | +| ZT-DA-48 | 데이터 손실 방지 (DLP) | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | Advanced | Medium | +| ZT-DA-49 | 데이터 손실 방지 (DLP) | DLP 솔루션이 방지 모드로 사용되는가? | Advanced | Medium | +| ZT-DA-50 | 데이터 손실 방지 (DLP) | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | Optimal | Low | +| ZT-DA-51 | 데이터 손실 방지 (DLP) | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | Optimal | Low | +| ZT-DA-52 | 데이터 모니터링 및 감지 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | Traditional | Critical | +| ZT-DA-53 | 데이터 모니터링 및 감지 | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-54 | 데이터 모니터링 및 감지 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | Initial | High | +| ZT-DA-55 | 데이터 모니터링 및 감지 | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | Initial | High | +| ZT-DA-56 | 데이터 모니터링 및 감지 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-DA-57 | 데이터 모니터링 및 감지 | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | Advanced | Medium | +| ZT-DA-58 | 데이터 모니터링 및 감지 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | Optimal | Low | + +### DA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 데이터 카탈로그 위험 정렬 | 초기 카탈로그, 수동 분류, 위험 평가 문서화 | 자동 카탈로그, 자동 수집/분류, 기준 마련 | 민감도 분석, 보호 정책, 패턴 분석 | AI 실시간 분석, 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 정책 수립, 소유자 지정, 프레임워크 | 정기적 감사/검토 | 자동화, 실시간 모니터링 | 전체 시스템 통합 관리 | +| 데이터 접근제어 | 접근 정책 수립, 수동 권한 부여 | 중앙 집중식, 최소 권한 확인 | ABAC 컨텍스트 기반 | AI 실시간 권한 조정 | +| 데이터 암호화 및 권한 관리 | 수동 암호화, 정책 수립, 초기 관리 체계 | 자동 암호화, 중앙 집중식 관리 | 고급 암호화, RBAC+ABAC | AI 기반 최적화, 실시간 마스킹 | +| 데이터 라벨링 및 태그 지정 | 지침 수립, 분류 체계 마련 | 수동 라벨링, 특수 라벨, 차등 정책 | 자동 분류, 보안 시스템 연계 | 고급 메타데이터, AI 자동 조정 | +| 데이터 손실 방지 (DLP) | DLP 정책, 범위 지정 | DLP 도입, 중앙 관리, 모니터링 모드 | 전체 도입, 방지 모드 | AI 예측/차단, 자동 정책 최적화 | +| 데이터 모니터링 및 감지 | 수동 모니터링, 프로세스 수립 | 자동 감시, 정책 조정 | 이상 징후 탐지, 보안 시스템 연계 | 지속 평가, 컨텍스트 최소 접근제어 | + +--- + +## Total: 118 Items (AP: 60 + DA: 58) diff --git a/skills-ko/kesekit-fix-ko/templates/zero-trust/identity-device.md b/skills-ko/kesekit-fix-ko/templates/zero-trust/identity-device.md new file mode 100644 index 0000000..80e1800 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/zero-trust/identity-device.md @@ -0,0 +1,133 @@ +# Identity & Device Checklist + +> Zero Trust Maturity Assessment — Identity (ID) & Device (DV) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## ID — 식별자 및 신원 (Identity) (53 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-ID-01 | 사용자 인벤토리 | 사용자 목록에 대한 문서화가 되어있는가? | Traditional | Critical | +| ZT-ID-02 | 사용자 인벤토리 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | Initial | High | +| ZT-ID-03 | 사용자 인벤토리 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | Advanced | Medium | +| ZT-ID-04 | 사용자 인벤토리 | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | Advanced | Medium | +| ZT-ID-05 | 사용자 인벤토리 | AI 기반 사용자 행동에 따른 관리가 되는가? | Optimal | Low | +| ZT-ID-06 | 사용자 인벤토리 | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | Optimal | Low | +| ZT-ID-07 | ID 연계 및 사용자 자격 증명 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-08 | ID 연계 및 사용자 자격 증명 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | Initial | High | +| ZT-ID-09 | ID 연계 및 사용자 자격 증명 | ID 통합 관리 시스템이 구축되어 있는가? | Advanced | Medium | +| ZT-ID-10 | ID 연계 및 사용자 자격 증명 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | Optimal | Low | +| ZT-ID-11 | 다중인증 (MFA) | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-12 | 다중인증 (MFA) | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | Initial | High | +| ZT-ID-13 | 다중인증 (MFA) | FIDO 기반 인증 기법이 적용되어 있는가? | Initial | High | +| ZT-ID-14 | 다중인증 (MFA) | 상황에 따른 맞춤형 MFA가 지원 가능한가? | Advanced | Medium | +| ZT-ID-15 | 다중인증 (MFA) | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-16 | 다중인증 (MFA) | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | Optimal | Low | +| ZT-ID-17 | 지속 인증 | 세션 기반 인증이 수행되는가? | Traditional | Critical | +| ZT-ID-18 | 지속 인증 | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | Traditional | Critical | +| ZT-ID-19 | 지속 인증 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-20 | 지속 인증 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | Advanced | Medium | +| ZT-ID-21 | 지속 인증 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | Optimal | Low | +| ZT-ID-22 | 통합 ICAM 플랫폼 | ICAM 시스템이 구축되어 있는가? | Traditional | Critical | +| ZT-ID-23 | 통합 ICAM 플랫폼 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | Initial | High | +| ZT-ID-24 | 통합 ICAM 플랫폼 | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | Initial | High | +| ZT-ID-25 | 통합 ICAM 플랫폼 | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | Initial | High | +| ZT-ID-26 | 통합 ICAM 플랫폼 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | Advanced | Medium | +| ZT-ID-27 | 통합 ICAM 플랫폼 | ICAM 플랫폼이 자동화되어 있는가? | Advanced | Medium | +| ZT-ID-28 | 통합 ICAM 플랫폼 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | Optimal | Low | +| ZT-ID-29 | 통합 ICAM 플랫폼 | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | Optimal | Low | +| ZT-ID-30 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-31 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자 행동 패턴이 수동으로 분석되는가? | Traditional | Critical | +| ZT-ID-32 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | Initial | High | +| ZT-ID-33 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 컨텍스트 정보 기반 접근권한이 조정되는가? | Initial | High | +| ZT-ID-34 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | Advanced | Medium | +| ZT-ID-35 | 행동, 컨텍스트 기반 ID 및 생체 인식 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | Optimal | Low | +| ZT-ID-36 | 조건부 사용자 접근 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | Traditional | Critical | +| ZT-ID-37 | 조건부 사용자 접근 | 조건부 접근 정책에 대한 개념을 정의하였는가? | Traditional | Critical | +| ZT-ID-38 | 조건부 사용자 접근 | 시스템 별 각기 다른 접속 관리 기능이 있는가? | Traditional | Critical | +| ZT-ID-39 | 조건부 사용자 접근 | 특정 조건에 따른 사용자 접근제어가 가능한가? | Initial | High | +| ZT-ID-40 | 조건부 사용자 접근 | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | Initial | High | +| ZT-ID-41 | 조건부 사용자 접근 | 세션별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-42 | 조건부 사용자 접근 | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-43 | 조건부 사용자 접근 | 리소스별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-44 | 조건부 사용자 접근 | 동적 접근 정책을 실시간으로 적용 가능한가? | Optimal | Low | +| ZT-ID-45 | 조건부 사용자 접근 | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | Optimal | Low | +| ZT-ID-46 | 최소 권한 접근 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | Traditional | Critical | +| ZT-ID-47 | 최소 권한 접근 | 권한 부여에 대한 절차가 문서화 되어 있는가? | Traditional | Critical | +| ZT-ID-48 | 최소 권한 접근 | 권한 부여 절차가 표준화 되어 있는가? | Initial | High | +| ZT-ID-49 | 최소 권한 접근 | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-50 | 최소 권한 접근 | 자동화된 권한 상승이 가능한가? | Advanced | Medium | +| ZT-ID-51 | 최소 권한 접근 | 권한 관리 정책이 지속적으로 업데이트 되는가? | Advanced | Medium | +| ZT-ID-52 | 최소 권한 접근 | 권한 관리가 동적으로 변경 가능한가? | Optimal | Low | +| ZT-ID-53 | 최소 권한 접근 | 최소 권한 원칙이 실시간으로 조정 가능한가? | Optimal | Low | + +### ID Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 사용자 인벤토리 | 사용자 목록 문서화 | 역할별 상세 인벤토리 | 자동화 관리, 비정상 활동 탐지 | AI 기반 관리, 통합 최적화 | +| ID 연계 및 사용자 자격 증명 | ID 연계 솔루션 적용 | 시스템 간 연동 | 통합 관리 시스템 | 글로벌 수준 연계 | +| 다중인증 (MFA) | 패스워드+SMS/이메일 MFA | 인증 앱/토큰, FIDO | 맞춤형 MFA, 컨텍스트 인증 | 비정상 로그인 실시간 탐지 | +| 지속 인증 | 세션 기반 인증, 상태 모니터링 | 세션 중간 추가 인증 | 동적 인증 기술 | 자동 재인증, 실시간 검증 | +| 통합 ICAM 플랫폼 | ICAM 시스템 구축 | 중앙 관리, 정책 표준화, 위험도 평가 | 시스템 통합 안정화, 자동화 | AI 기반 보안 강화, 실시간 ID 위험 평가 | +| 행동/컨텍스트 기반 ID 및 생체 인식 | 기본 생체 인식, 수동 행동 분석 | 통합 인증, 컨텍스트 접근권한 | 실시간 접근제어 조정 | AI 기반 행동/생체 인식 | +| 조건부 사용자 접근 | 기초 시스템, 개념 정의, 접속 관리 | 조건부 접근제어, 최소 권한 | 세션/리소스별 권한, 다단계 정책 | 동적 정책, AI 실시간 관리 | +| 최소 권한 접근 | 원칙 정의, 절차 문서화 | 표준화, 변경 관리 시스템 | 자동 권한 상승, 정책 업데이트 | 동적 변경, 실시간 조정 | + +--- + +## DV — 기기 및 엔드포인트 (Device) (40 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DV-01 | 기기 감지 및 규정 준수 | 리소스에 연결된 기기를 식별할 수 있는가? | Traditional | Critical | +| ZT-DV-02 | 기기 감지 및 규정 준수 | 수동으로 규정 준수에 대한 확인이 가능한가? | Traditional | Critical | +| ZT-DV-03 | 기기 감지 및 규정 준수 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | Initial | High | +| ZT-DV-04 | 기기 감지 및 규정 준수 | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | Initial | High | +| ZT-DV-05 | 기기 감지 및 규정 준수 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | Advanced | Medium | +| ZT-DV-06 | 기기 감지 및 규정 준수 | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-DV-07 | 기기 감지 및 규정 준수 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | Optimal | Low | +| ZT-DV-08 | 기기 감지 및 규정 준수 | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | Optimal | Low | +| ZT-DV-09 | 실시간 검사를 통한 기기 권한 부여 | 자산 접근 기기에 대한 정보가 수집되는가? | Traditional | Critical | +| ZT-DV-10 | 실시간 검사를 통한 기기 권한 부여 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | Initial | High | +| ZT-DV-11 | 실시간 검사를 통한 기기 권한 부여 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | Advanced | Medium | +| ZT-DV-12 | 실시간 검사를 통한 기기 권한 부여 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | Optimal | Low | +| ZT-DV-13 | 실시간 검사를 통한 기기 권한 부여 | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | Optimal | Low | +| ZT-DV-14 | 기기 인벤토리 | 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | Traditional | Critical | +| ZT-DV-15 | 기기 인벤토리 | 주요 기기에 대한 정보를 수집하고 관리하는가? | Traditional | Critical | +| ZT-DV-16 | 기기 인벤토리 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | Initial | High | +| ZT-DV-17 | 기기 인벤토리 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | Advanced | Medium | +| ZT-DV-18 | 기기 인벤토리 | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | Advanced | Medium | +| ZT-DV-19 | 기기 인벤토리 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | Optimal | Low | +| ZT-DV-20 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | Traditional | Critical | +| ZT-DV-21 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 보안 정책을 설정하였는가? | Traditional | Critical | +| ZT-DV-22 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | Initial | High | +| ZT-DV-23 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기기 상태를 지속적으로 모니터링 하는가? | Initial | High | +| ZT-DV-24 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | Advanced | Medium | +| ZT-DV-25 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | Optimal | Low | +| ZT-DV-26 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | 기본적인 EDR 솔루션을 도입하였는가? | Traditional | Critical | +| ZT-DV-27 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | Initial | High | +| ZT-DV-28 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | XDR 솔루션을 도입하였는가? | Advanced | Medium | +| ZT-DV-29 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | AI 기반 EDR/XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | Optimal | Low | +| ZT-DV-30 | 자산, 취약성 및 패치 관리 자동화 | 자산 및 취약성을 수동으로 평가하는가? | Traditional | Critical | +| ZT-DV-31 | 자산, 취약성 및 패치 관리 자동화 | 주요 자산 및 취약성 목록이 작성되어 있는가? | Traditional | Critical | +| ZT-DV-32 | 자산, 취약성 및 패치 관리 자동화 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | Initial | High | +| ZT-DV-33 | 자산, 취약성 및 패치 관리 자동화 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | Advanced | Medium | +| ZT-DV-34 | 자산, 취약성 및 패치 관리 자동화 | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | Advanced | Medium | +| ZT-DV-35 | 자산, 취약성 및 패치 관리 자동화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | Optimal | Low | +| ZT-DV-36 | 자산, 취약성 및 패치 관리 자동화 | 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | Optimal | Low | + +### DV Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 기기 감지 및 규정 준수 | 기기 식별, 수동 규정 확인 | 실시간 탐지, 비준수 경고 | 자동 교정, 접근권한 연동 | 동적 권한 수정, AI 실시간 평가 | +| 실시간 검사를 통한 기기 권한 부여 | 기기 정보 수집 | 수동 검사 수행 | 자동 평가 및 접근 허용 | 접근권한 조정, 보안 시스템 연동 | +| 기기 인벤토리 | 수동 인벤토리, 정보 수집 | 자동화 기록 | 비정상 기기 탐지, 취약점 파악 | 실시간 모니터링, 예측 분석 | +| 통합 엔드포인트/모바일 기기 관리 | 관리 시스템 도입, 보안 정책 설정 | 중앙 관리, 지속 모니터링 | 중앙 자동 적용 | 통합 관리, 자동 위협 대응 | +| EDR 및 XDR | 기본 EDR 도입 | 실시간 탐지/자동 대응 | XDR 도입 | AI 기반 통합 위협 탐지 | +| 자산/취약성/패치 관리 자동화 | 수동 평가, 목록 작성 | 자동 패치 도입 | 지속적 자동화, 시스템 통합 | 사전 식별, 통합 관리 | + +--- + +## Total: 89 Items (ID: 53 + DV: 36) diff --git a/skills-ko/kesekit-fix-ko/templates/zero-trust/network-system.md b/skills-ko/kesekit-fix-ko/templates/zero-trust/network-system.md new file mode 100644 index 0000000..89cef54 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/zero-trust/network-system.md @@ -0,0 +1,145 @@ +# Network & System Checklist + +> Zero Trust Maturity Assessment — Network (NW) & System (SY) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## NW — 네트워크 (Network) (54 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-NW-01 | 매크로 세그멘테이션 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-02 | 매크로 세그멘테이션 | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | Traditional | Critical | +| ZT-NW-03 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | Initial | High | +| ZT-NW-04 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | Initial | High | +| ZT-NW-05 | 매크로 세그멘테이션 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | Advanced | Medium | +| ZT-NW-06 | 매크로 세그멘테이션 | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | Advanced | Medium | +| ZT-NW-07 | 매크로 세그멘테이션 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | Optimal | Low | +| ZT-NW-08 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-09 | 마이크로 세그멘테이션 | 수동으로 세그먼트를 구성하는가? | Traditional | Critical | +| ZT-NW-10 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | Initial | High | +| ZT-NW-11 | 마이크로 세그멘테이션 | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지/차단 할 수 있는가? | Initial | High | +| ZT-NW-12 | 마이크로 세그멘테이션 | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | Initial | High | +| ZT-NW-13 | 마이크로 세그멘테이션 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | Advanced | Medium | +| ZT-NW-14 | 마이크로 세그멘테이션 | 애플리케이션 별 격리 메커니즘이 적용되었는가? | Advanced | Medium | +| ZT-NW-15 | 마이크로 세그멘테이션 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | Optimal | Low | +| ZT-NW-16 | 소프트웨어 정의 네트워킹 | 소프트웨어 정의 네트워크가 도입되어 있는가? | Traditional | Critical | +| ZT-NW-17 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | Traditional | Critical | +| ZT-NW-18 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | Initial | High | +| ZT-NW-19 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | Advanced | Medium | +| ZT-NW-20 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | Optimal | Low | +| ZT-NW-21 | 위협 대응 | IDS/IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | Traditional | Critical | +| ZT-NW-22 | 위협 대응 | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | Traditional | Critical | +| ZT-NW-23 | 위협 대응 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | Initial | High | +| ZT-NW-24 | 위협 대응 | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | Initial | High | +| ZT-NW-25 | 위협 대응 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | Advanced | Medium | +| ZT-NW-26 | 위협 대응 | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | Advanced | Medium | +| ZT-NW-27 | 위협 대응 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | Optimal | Low | +| ZT-NW-28 | 위협 대응 | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | Optimal | Low | +| ZT-NW-29 | 트래픽 암호화 | 내/외부 트래픽 일부 암호화가 가능한가? | Traditional | Critical | +| ZT-NW-30 | 트래픽 암호화 | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | Traditional | Critical | +| ZT-NW-31 | 트래픽 암호화 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | Initial | High | +| ZT-NW-32 | 트래픽 암호화 | 데이터 전송 시 암호화를 필수로 하고 있는가? | Initial | High | +| ZT-NW-33 | 트래픽 암호화 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | Advanced | Medium | +| ZT-NW-34 | 트래픽 암호화 | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | Advanced | Medium | +| ZT-NW-35 | 트래픽 암호화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | Optimal | Low | +| ZT-NW-36 | 트래픽 암호화 | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-NW-37 | 데이터 흐름 매핑 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | Traditional | Critical | +| ZT-NW-38 | 데이터 흐름 매핑 | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | Traditional | Critical | +| ZT-NW-39 | 데이터 흐름 매핑 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | Initial | High | +| ZT-NW-40 | 데이터 흐름 매핑 | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | Initial | High | +| ZT-NW-41 | 데이터 흐름 매핑 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | Advanced | Medium | +| ZT-NW-42 | 데이터 흐름 매핑 | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | Advanced | Medium | +| ZT-NW-43 | 데이터 흐름 매핑 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | Optimal | Low | +| ZT-NW-44 | 데이터 흐름 매핑 | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | Optimal | Low | +| ZT-NW-45 | 네트워크 회복성 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | Traditional | Critical | +| ZT-NW-46 | 네트워크 회복성 | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | Traditional | Critical | +| ZT-NW-47 | 네트워크 회복성 | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | Traditional | Critical | +| ZT-NW-48 | 네트워크 회복성 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | Initial | High | +| ZT-NW-49 | 네트워크 회복성 | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | Initial | High | +| ZT-NW-50 | 네트워크 회복성 | 네트워크 이중화 설계가 되어 있는가? | Initial | High | +| ZT-NW-51 | 네트워크 회복성 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | Advanced | Medium | +| ZT-NW-52 | 네트워크 회복성 | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | Advanced | Medium | +| ZT-NW-53 | 네트워크 회복성 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | Optimal | Low | +| ZT-NW-54 | 네트워크 회복성 | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | Optimal | Low | + +### NW Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 매크로 세그멘테이션 | 영역별 세그멘테이션, 트래픽 흐름 기반 구성 | 보안 정책 적용, 비정상 활동 탐지 | 맞춤형 정책, 위협 대응 | AI 기반 관리 | +| 마이크로 세그멘테이션 | 워크로드 기준 세그멘테이션, 수동 구성 | 보안 정책, 워크로드 이동 탐지/차단, 모니터링 | 정책 설정/제어, 격리 메커니즘 | AI 기반 자동 대응 | +| 소프트웨어 정의 네트워킹 | SDN 도입, 기본 구조 설정 | 중앙 관리, 실시간 정책 | 트래픽 관리/보안 확장 | AI 기반 위협 관리/트래픽 예측 | +| 위협 대응 | IDS/IPS 감시, 정적 규칙 관리 | 자동 탐지/대응, 프로파일 관리 | 선제적 대응, 동적 규칙 | 즉각 자동 대응, 동적 트래픽 관리 | +| 트래픽 암호화 | 일부 암호화, SSL/TLS/VPN | 전반 암호화, 전송 필수 암호화 | 저장 데이터 암호화, 고급 키 관리 | 성능 유지 보호, 통합 키 관리 | +| 데이터 흐름 매핑 | 수동 모니터링, 수동 매핑 | 애플리케이션 단위 매핑, 실시간 매핑 | 비정상 이동 탐지, 상관관계 분석 | AI 예측 분석, 동적 우선순위 | +| 네트워크 회복성 | 복구 계획, 백업, 장애 대응 절차 | 다중 경로, Failover, 이중화 | 지속적 서비스, 주기적 테스트 | 중단 없는 운영, 자동화 복구 | + +--- + +## SY — 시스템 (System) (49 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-SY-01 | 접근통제 | 사용자 및 기기에 수동으로 권한을 부여하는가? | Traditional | Critical | +| ZT-SY-02 | 접근통제 | RBAC 기반 접근제어를 수행하는가? | Traditional | Critical | +| ZT-SY-03 | 접근통제 | 권한 관리를 수동으로 수행하는가? | Traditional | Critical | +| ZT-SY-04 | 접근통제 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | Initial | High | +| ZT-SY-05 | 접근통제 | 실시간 접근권한 부여가 가능한가? | Initial | High | +| ZT-SY-06 | 접근통제 | 권한 변경 사항이 자동으로 반영되는가? | Initial | High | +| ZT-SY-07 | 접근통제 | 특정 리소스에 대한 접근 제한/승인 정책이 자동으로 적용 가능한가? | Initial | High | +| ZT-SY-08 | 접근통제 | ABAC 기반 접근제어를 수행하는가? | Advanced | Medium | +| ZT-SY-09 | 접근통제 | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | Advanced | Medium | +| ZT-SY-10 | 접근통제 | 사용자/기기의 상태를 실시간으로 분석하고 실시간/자동으로 권한 조정이 가능한가? | Optimal | Low | +| ZT-SY-11 | 접근통제 | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | Optimal | Low | +| ZT-SY-12 | 접근통제 | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | Optimal | Low | +| ZT-SY-13 | 접근통제 | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | Optimal | Low | +| ZT-SY-14 | PAM | PAM 시스템을 구축하였는가? | Traditional | Critical | +| ZT-SY-15 | PAM | PAM 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-SY-16 | PAM | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | Initial | High | +| ZT-SY-17 | PAM | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | Initial | High | +| ZT-SY-18 | PAM | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | Advanced | Medium | +| ZT-SY-19 | PAM | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | Optimal | Low | +| ZT-SY-20 | 자격 증명 관리 | 자격 증명이 수동으로 관리되는가? | Traditional | Critical | +| ZT-SY-21 | 자격 증명 관리 | 패스워드에 기반한 인증 방식에 의존하는가? | Traditional | Critical | +| ZT-SY-22 | 자격 증명 관리 | 자격 증명 관리가 체계적이지 않고 수동적인가? | Traditional | Critical | +| ZT-SY-23 | 자격 증명 관리 | 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | Initial | High | +| ZT-SY-24 | 자격 증명 관리 | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | Initial | High | +| ZT-SY-25 | 자격 증명 관리 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | Advanced | Medium | +| ZT-SY-26 | 자격 증명 관리 | 자격 증명 관리 시스템을 고도화하여 관리하는가? | Advanced | Medium | +| ZT-SY-27 | 자격 증명 관리 | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | Advanced | Medium | +| ZT-SY-28 | 자격 증명 관리 | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | Advanced | Medium | +| ZT-SY-29 | 자격 증명 관리 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | Optimal | Low | +| ZT-SY-30 | 자격 증명 관리 | 실시간으로 인증 정책 조정이 가능한가? | Optimal | Low | +| ZT-SY-31 | 자격 증명 관리 | 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | Optimal | Low | +| ZT-SY-32 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | Traditional | Critical | +| ZT-SY-33 | 네트워크 세분화 및 그룹 간 이동 | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | Traditional | Critical | +| ZT-SY-34 | 네트워크 세분화 및 그룹 간 이동 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | Initial | High | +| ZT-SY-35 | 네트워크 세분화 및 그룹 간 이동 | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | Initial | High | +| ZT-SY-36 | 네트워크 세분화 및 그룹 간 이동 | 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | Advanced | Medium | +| ZT-SY-37 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | Advanced | Medium | +| ZT-SY-38 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | Advanced | Medium | +| ZT-SY-39 | 네트워크 세분화 및 그룹 간 이동 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | Optimal | Low | +| ZT-SY-40 | 네트워크 세분화 및 그룹 간 이동 | 재인증 없는 그룹 간 이동이 가능한가? | Optimal | Low | +| ZT-SY-41 | 네트워크 세분화 및 그룹 간 이동 | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | Optimal | Low | +| ZT-SY-42 | 시스템 환경에 따른 정책 관리 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | Traditional | Critical | +| ZT-SY-43 | 시스템 환경에 따른 정책 관리 | 수동으로 보안 정책을 유지/관리하고 있는가? | Traditional | Critical | +| ZT-SY-44 | 시스템 환경에 따른 정책 관리 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | Initial | High | +| ZT-SY-45 | 시스템 환경에 따른 정책 관리 | 정책이 자동으로 적용되는가? | Initial | High | +| ZT-SY-46 | 시스템 환경에 따른 정책 관리 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | Advanced | Medium | +| ZT-SY-47 | 시스템 환경에 따른 정책 관리 | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | Advanced | Medium | +| ZT-SY-48 | 시스템 환경에 따른 정책 관리 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | Optimal | Low | +| ZT-SY-49 | 시스템 환경에 따른 정책 관리 | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | Optimal | Low | + +### SY Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 접근통제 | 수동 권한 부여, RBAC | 중앙 집중 권한, 실시간 부여, 자동 반영 | ABAC, 동적 실시간 권한 | 실시간 분석/조정, 신뢰도 재산정, 위험 분석 기반 | +| PAM | PAM 시스템/정책 구축 | 모니터링/제어, 자동 승인 | 비정상 활동 탐지 | AI 기반 위협 탐지/대응 | +| 자격 증명 관리 | 수동 관리, 패스워드 의존 | 중앙 자동화, MFA | 생체 인증, 고도화, 무결성, AI 분석 | 실시간 차단/정책 조정, 자율 운영 | +| 네트워크 세분화 및 그룹 간 이동 | 통제 미흡, 경계형 모델 | 중요도 기반 분리, 이동 제어 | 워크로드별 세분화, 강력한 접근통제, 실시간 검사 | 실시간 분석/제어, 재인증 없는 이동, 자동 정책 | +| 시스템 환경에 따른 정책 관리 | 온프레미스 보안 정책, 수동 관리 | 클라우드 정책, 자동 적용 | 하이브리드 실시간 조정, 동적 변경 | 자율 정책, 완전 자동화 | + +--- + +## Total: 103 Items (NW: 54 + SY: 49) diff --git a/skills-ko/kesekit-fix-ko/templates/zero-trust/ot-environment.md b/skills-ko/kesekit-fix-ko/templates/zero-trust/ot-environment.md new file mode 100644 index 0000000..0331c34 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/zero-trust/ot-environment.md @@ -0,0 +1,51 @@ +# OT/ICS Zero Trust Environment Checklist + +> Zero Trust Maturity Assessment — OT/ICS (Operational Technology / Industrial Control Systems) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), IEC 62443, NIST SP 800-82 + +## OT/ICS Zero Trust Considerations + +OT/ICS environments require special Zero Trust deployment strategies due to: +- Legacy systems that cannot support modern authentication +- Real-time operational requirements (latency sensitivity) +- Safety-critical functions that must not be disrupted +- Air-gapped or semi-isolated network architectures +- Long equipment lifecycles (15-30 years) + +## OT-ZT Assessment Items + +| ID | Category | Verification | Maturity | Severity | +|----|----------|-------------|----------|----------| +| OT-ZT-01 | Network Segmentation | OT 네트워크와 IT 네트워크가 물리적/논리적으로 분리되어 있는가? | Traditional | Critical | +| OT-ZT-02 | Network Segmentation | DMZ를 통한 OT-IT 간 데이터 교환이 통제되고 있는가? | Traditional | Critical | +| OT-ZT-03 | Network Segmentation | Purdue Model 또는 IEC 62443 zone/conduit 기반 세그멘테이션이 적용되어 있는가? | Initial | High | +| OT-ZT-04 | Network Segmentation | 마이크로 세그멘테이션이 OT 환경 내부에 적용되어 있는가? | Advanced | Medium | +| OT-ZT-05 | Network Segmentation | SDN 기반 동적 세그멘테이션이 OT 환경에 적용 가능한가? | Optimal | Low | +| OT-ZT-06 | Identity & Access | OT 시스템 접근에 대한 사용자 인증이 수행되는가? | Traditional | Critical | +| OT-ZT-07 | Identity & Access | OT 전용 계정 관리 및 최소 권한 원칙이 적용되어 있는가? | Initial | High | +| OT-ZT-08 | Identity & Access | OT 환경에서 MFA가 적용되어 있는가 (물리적 토큰 포함)? | Initial | High | +| OT-ZT-09 | Identity & Access | OT 원격 접속에 대한 별도 인증 및 모니터링이 수행되는가? | Advanced | Medium | +| OT-ZT-10 | Identity & Access | 비정상적인 OT 접근 시도에 대한 실시간 탐지 및 대응이 가능한가? | Optimal | Low | +| OT-ZT-11 | Device Management | OT 자산 인벤토리가 문서화되어 있는가? | Traditional | Critical | +| OT-ZT-12 | Device Management | OT 디바이스 식별 및 분류 체계가 구축되어 있는가? | Initial | High | +| OT-ZT-13 | Device Management | OT 디바이스 보안 상태 자동 모니터링이 가능한가? | Advanced | Medium | +| OT-ZT-14 | Device Management | 레거시 OT 장비에 대한 보안 래퍼/프록시가 적용되어 있는가? | Advanced | Medium | +| OT-ZT-15 | Device Management | AI 기반 OT 자산 관리 및 이상 탐지가 가능한가? | Optimal | Low | +| OT-ZT-16 | Communication Security | OT 프로토콜(Modbus, OPC UA, DNP3 등) 트래픽이 모니터링되는가? | Traditional | Critical | +| OT-ZT-17 | Communication Security | OT 통신에 대한 암호화가 적용되어 있는가 (가능한 경우)? | Initial | High | +| OT-ZT-18 | Communication Security | OT 프로토콜 이상 탐지(DPI) 시스템이 도입되어 있는가? | Advanced | Medium | +| OT-ZT-19 | Communication Security | OT 환경 전용 위협 인텔리전스가 적용되어 있는가? | Optimal | Low | +| OT-ZT-20 | Safety & Availability | ZT 정책 적용 시 안전 기능(Safety Function)에 영향이 없는지 검증되었는가? | Traditional | Critical | +| OT-ZT-21 | Safety & Availability | ZT 정책 실패 시 fail-open/fail-safe 동작이 정의되어 있는가? | Initial | High | +| OT-ZT-22 | Safety & Availability | ZT 구성 변경에 대한 OT 영향도 분석 프로세스가 수립되어 있는가? | Advanced | Medium | +| OT-ZT-23 | Monitoring & Response | OT 환경 전용 SOC/보안 모니터링 체계가 수립되어 있는가? | Initial | High | +| OT-ZT-24 | Monitoring & Response | IT-OT 통합 보안 이벤트 분석이 가능한가? | Advanced | Medium | +| OT-ZT-25 | Monitoring & Response | OT 환경에 대한 자동화된 인시던트 대응이 가능한가? | Optimal | Low | + +## Deployment Strategy for OT + +1. **Phase 1 — Visibility**: Asset discovery, traffic mapping, baseline establishment +2. **Phase 2 — Segmentation**: IT-OT separation, zone/conduit implementation +3. **Phase 3 — Access Control**: Identity-based access, MFA for remote access +4. **Phase 4 — Monitoring**: Continuous monitoring, anomaly detection +5. **Phase 5 — Automation**: Automated response (with safety validation) diff --git a/skills-ko/kesekit-fix-ko/templates/zero-trust/overview.md b/skills-ko/kesekit-fix-ko/templates/zero-trust/overview.md new file mode 100644 index 0000000..0bdd288 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/zero-trust/overview.md @@ -0,0 +1,69 @@ +# Zero Trust Overview + +> Zero Trust Maturity Assessment — Overview & Assessment Guide +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), NIST SP 800-207, CISA ZT Maturity Model + +## Zero Trust Principles + +- **Never Trust, Always Verify**: Every access request must be authenticated and authorized regardless of network location +- **Assume Breach**: Minimize blast radius through microsegmentation and least-privilege access +- **Verify Explicitly**: Use all available data points (identity, location, device health, service/workload, data classification, anomalies) + +## 8 Core Elements + +| # | Element | Code | Items | +|---|---------|------|:-----:| +| 1 | Identity (식별자 및 신원) | ID | 53 | +| 2 | Device (디바이스 및 엔드포인트) | DV | ~50 | +| 3 | Network (네트워크) | NW | 54 | +| 4 | System (시스템) | SY | ~45 | +| 5 | Application (애플리케이션 및 워크로드) | AP | 60 | +| 6 | Data (데이터) | DA | ~50 | +| 7 | Visibility (가시성 및 분석) | VA | 43 | +| 8 | Automation (자동화 및 오케스트레이션) | AU | ~41 | + +**Total: ~396 items across 4 maturity levels** + +## 4 Maturity Levels + +| Level | Description | Target | +|-------|-------------|--------| +| **Traditional** | Perimeter-based security, manual processes | Baseline awareness | +| **Initial** | Some ZT controls adopted, partial automation | Early adopters | +| **Advanced** | Centralized management, context-aware policies, AI-assisted | Mature organizations | +| **Optimal** | Fully automated, real-time adaptive, AI-driven orchestration | Industry leaders | + +## Assessment Flow + +1. Determine target maturity level based on organizational goals +2. Select relevant core elements based on system context +3. Assess each item at or below the target maturity level +4. Items above target maturity level are informational (not scored) +5. Generate gap analysis comparing current state vs. target + +## Template Files + +| Topic | File | +|-------|------| +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | + +## Reference Files + +| Topic | File | +|-------|------| +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +## Judgment Criteria + +| Judgment | Description | +|----------|-------------| +| Pass (양호) | ZT control properly implemented at target maturity level | +| Partial (부분이행) | Control partially implemented, improvement needed | +| Fail (취약) | Control not implemented or significantly below target | +| N/A (해당없음) | Not applicable to the environment | diff --git a/skills-ko/kesekit-fix-ko/templates/zero-trust/visibility-automation.md b/skills-ko/kesekit-fix-ko/templates/zero-trust/visibility-automation.md new file mode 100644 index 0000000..7dca723 --- /dev/null +++ b/skills-ko/kesekit-fix-ko/templates/zero-trust/visibility-automation.md @@ -0,0 +1,128 @@ +# Visibility & Automation Checklist + +> Zero Trust Maturity Assessment — Visibility (VA) & Automation (AU) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## VA — 가시성 및 분석 (Visibility) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-VA-01 | 모든 관련 활동 기록 | 로그 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-VA-02 | 모든 관련 활동 기록 | 로그 데이터가 특정한 시스템에서만 수집되는가? | Traditional | Critical | +| ZT-VA-03 | 모든 관련 활동 기록 | 다양한 시스템에서 자동으로 로그를 수집하는가? | Initial | High | +| ZT-VA-04 | 모든 관련 활동 기록 | 로그 수집 및 관리가 자동화 되었는가? | Initial | High | +| ZT-VA-05 | 모든 관련 활동 기록 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-VA-06 | 모든 관련 활동 기록 | 로그 기록의 무결성을 보장하는가? | Advanced | Medium | +| ZT-VA-07 | 모든 관련 활동 기록 | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | Advanced | Medium | +| ZT-VA-08 | 모든 관련 활동 기록 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | Optimal | Low | +| ZT-VA-09 | 모든 관련 활동 기록 | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | Optimal | Low | +| ZT-VA-10 | 모든 관련 활동 기록 | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | Optimal | Low | +| ZT-VA-11 | 중앙집중적 보안 정보 및 이벤트 관리 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | Traditional | Critical | +| ZT-VA-12 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템이 도입되었는가? | Initial | High | +| ZT-VA-13 | 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 보안 관리 체계가 구축되었는가? | Initial | High | +| ZT-VA-14 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | Advanced | Medium | +| ZT-VA-15 | 중앙집중적 보안 정보 및 이벤트 관리 | AI 기반으로 보안 이벤트를 분석하는가? | Optimal | Low | +| ZT-VA-16 | 중앙집중적 보안 정보 및 이벤트 관리 | 비정상적인 활동에 대하여 자동 대응이 가능한가? | Optimal | Low | +| ZT-VA-17 | 보안 위협 분석 | 보안 로그 및 데이터를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-18 | 보안 위협 분석 | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-19 | 보안 위협 분석 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | Initial | High | +| ZT-VA-20 | 보안 위협 분석 | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | Initial | High | +| ZT-VA-21 | 보안 위협 분석 | 자동화된 보안 위협 분석 도구를 도입하였는가? | Advanced | Medium | +| ZT-VA-22 | 보안 위협 분석 | 실시간 보안 위협 탐지가 가능한가? | Advanced | Medium | +| ZT-VA-23 | 보안 위협 분석 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | Optimal | Low | +| ZT-VA-24 | 사용자 및 기기 동작 분석 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | Traditional | Critical | +| ZT-VA-25 | 사용자 및 기기 동작 분석 | 비정상 행동을 수동으로 탐지하는가? | Traditional | Critical | +| ZT-VA-26 | 사용자 및 기기 동작 분석 | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | Traditional | Critical | +| ZT-VA-27 | 사용자 및 기기 동작 분석 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | Initial | High | +| ZT-VA-28 | 사용자 및 기기 동작 분석 | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | Initial | High | +| ZT-VA-29 | 사용자 및 기기 동작 분석 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | Advanced | Medium | +| ZT-VA-30 | 사용자 및 기기 동작 분석 | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | Advanced | Medium | +| ZT-VA-31 | 사용자 및 기기 동작 분석 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | Optimal | Low | +| ZT-VA-32 | 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-33 | 위협 인텔리전스 통합 | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | Traditional | Critical | +| ZT-VA-34 | 위협 인텔리전스 통합 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | Initial | High | +| ZT-VA-35 | 위협 인텔리전스 통합 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | Advanced | Medium | +| ZT-VA-36 | 위협 인텔리전스 통합 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | Optimal | Low | +| ZT-VA-37 | 자동화된 동적 정책 | 보안 정책을 수동으로 관리하는가? | Traditional | Critical | +| ZT-VA-38 | 자동화된 동적 정책 | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | Traditional | Critical | +| ZT-VA-39 | 자동화된 동적 정책 | 자동화된 정책 관리 시스템을 도입하였는가? | Initial | High | +| ZT-VA-40 | 자동화된 동적 정책 | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | Initial | High | +| ZT-VA-41 | 자동화된 동적 정책 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | Advanced | Medium | +| ZT-VA-42 | 자동화된 동적 정책 | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | Advanced | Medium | +| ZT-VA-43 | 자동화된 동적 정책 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | Optimal | Low | + +### VA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 모든 관련 활동 기록 | 수동 로그, 특정 시스템 수집 | 자동 로그 수집, 관리 자동화 | 실시간 탐지, 무결성, 예측 분석 | 자율 보안, 정규화, 자동 정책 조정 | +| 중앙집중적 보안 정보/이벤트 관리 | 수동 분석 | SIEM 도입, 중앙 관리 | 보안 도구 연동 종합 분석 | AI 분석, 자동 대응 | +| 보안 위협 분석 | 수동 로그/CVE 수집 | 평가 기준, 자동 경고 | 자동화 분석, 실시간 탐지 | AI 예측 분석 | +| 사용자/기기 동작 분석 | 활동 데이터 수집, 수동 탐지, 패턴 기록 | 자동 분석 도구 도입 | 행동 분석 탐지, AI 실시간 대응 | 자동 정책 조정, 최소 권한 | +| 위협 인텔리전스 통합 | 수동 수집, 수동 연동 | 자동 통합 도구 | 내부 시스템 통합 | AI 기반 시스템 | +| 자동화된 동적 정책 | 수동 관리, 수동 대응 | 자동 정책 관리, 자동 변경 | 실시간 조정, 위협 연계 | AI 자율 정책 조정 | + +--- + +## AU — 자동화 및 통합 (Automation) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AU-01 | 정책 통합 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | Traditional | Critical | +| ZT-AU-02 | 정책 통합 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-AU-03 | 정책 통합 | 정책 변경이 자동으로 이루어지는가? | Initial | High | +| ZT-AU-04 | 정책 통합 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | Advanced | Medium | +| ZT-AU-05 | 정책 통합 | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | Advanced | Medium | +| ZT-AU-06 | 정책 통합 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-07 | 중요 프로세스 자동화 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | Traditional | Critical | +| ZT-AU-08 | 중요 프로세스 자동화 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | Initial | High | +| ZT-AU-09 | 중요 프로세스 자동화 | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | Initial | High | +| ZT-AU-10 | 중요 프로세스 자동화 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | Advanced | Medium | +| ZT-AU-11 | 중요 프로세스 자동화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-12 | 인공지능 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-13 | 인공지능 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | Initial | High | +| ZT-AU-14 | 인공지능 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | Advanced | Medium | +| ZT-AU-15 | 인공지능 | AI가 모든 보안 시스템에 완전히 통합되었는가? | Optimal | Low | +| ZT-AU-16 | 인공지능 | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | Optimal | Low | +| ZT-AU-17 | 보안 통합, 자동화 및 대응 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | Traditional | Critical | +| ZT-AU-18 | 보안 통합, 자동화 및 대응 | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | Traditional | Critical | +| ZT-AU-19 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 도입하였는가? | Initial | High | +| ZT-AU-20 | 보안 통합, 자동화 및 대응 | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | Initial | High | +| ZT-AU-21 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | Advanced | Medium | +| ZT-AU-22 | 보안 통합, 자동화 및 대응 | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | Advanced | Medium | +| ZT-AU-23 | 보안 통합, 자동화 및 대응 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | Optimal | Low | +| ZT-AU-24 | 보안 통합, 자동화 및 대응 | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | Optimal | Low | +| ZT-AU-25 | 데이터 교환 표준화 | 수집된 데이터가 상이한 형식으로 저장되는가? | Traditional | Critical | +| ZT-AU-26 | 데이터 교환 표준화 | 데이터 교환이 비효율적으로 이루어지는가? | Traditional | Critical | +| ZT-AU-27 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-28 | 데이터 교환 표준화 | 데이터 교환 표준을 도입하였는가? | Initial | High | +| ZT-AU-29 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 자동화되었는가? | Initial | High | +| ZT-AU-30 | 데이터 교환 표준화 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | Advanced | Medium | +| ZT-AU-31 | 데이터 교환 표준화 | 여러 보안 도구 간의 상호 운용성이 제공되는가? | Advanced | Medium | +| ZT-AU-32 | 데이터 교환 표준화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | Optimal | Low | +| ZT-AU-33 | 데이터 교환 표준화 | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | Optimal | Low | +| ZT-AU-34 | 데이터 교환 표준화 | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | Optimal | Low | +| ZT-AU-35 | 보안 운영 조정 및 사고 대응 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | Traditional | Critical | +| ZT-AU-36 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 절차가 정형화되어 있지 않는가? | Traditional | Critical | +| ZT-AU-37 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | Initial | High | +| ZT-AU-38 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | Initial | High | +| ZT-AU-39 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | Advanced | Medium | +| ZT-AU-40 | 보안 운영 조정 및 사고 대응 | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | Advanced | Medium | +| ZT-AU-41 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | Optimal | Low | +| ZT-AU-42 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | Optimal | Low | +| ZT-AU-43 | 보안 운영 조정 및 사고 대응 | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | Optimal | Low | + +### AU Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 정책 통합 | 수동 시스템별 변경 | 중앙 관리, 자동 변경 | 실시간 동적 조정, 즉각 수정 | AI 자율 정책 조정 | +| 중요 프로세스 자동화 | 수동 절차 의존 | 자동화 도구, 백업/장애 대응 자동화 | 보안 사고 자동 대응 | 실시간 최적화, 무중단 조정 | +| 인공지능 | 수동 수집/분석/대응 | 기본 AI 도구, 패턴 식별 | AI 고도화, 실시간 탐지/대응 | 완전 통합, 자율 감지/대응/조정 | +| 보안 통합/자동화/대응 | 독립 운영, 수동 대응 | SOAR 도입, 중앙 대응 | SOAR 고도화, 실시간 통합 | 중앙 자동 처리, 자율 통합 | +| 데이터 교환 표준화 | 상이한 형식, 비효율적, 수동 교환 | 표준 도입, 교환 자동화 | 외부 공유, 상호 운용성 | 자율 관리, 일관된 형식, 실시간 교환 | +| 보안 운영 조정/사고 대응 | 수동 소통, 비정형 절차 | 대응 계획, 자동 경고 | 자동 대응, 실시간 조율, 자동 보고 | 사전 예측, 완전 자동화, 실시간 협력 | + +--- + +## Total: 86 Items (VA: 43 + AU: 43) diff --git a/skills-ko/kesekit-guide-ko/SKILL.md b/skills-ko/kesekit-guide-ko/SKILL.md new file mode 100644 index 0000000..73d3fec --- /dev/null +++ b/skills-ko/kesekit-guide-ko/SKILL.md @@ -0,0 +1,144 @@ +--- +name: kesekit-guide-ko +description: AI 도구(Claude, ChatGPT, Cursor, Copilot)용 시큐어 코딩 프롬프트와 가이드를 생성합니다. KISA CII, CWE 매핑, AI 보안, 로봇 보안, 우주 보안(CCSDS/위성 프로토콜/GSaaS/공급망) 가이드를 지원합니다. "보안 가이드 생성", "시큐어코딩 가이드", "우주 시큐어코딩", "위성 보안 가이드" 시 사용하세요. +--- + +# KESE 시큐어 코딩 프롬프트 생성기 + +KISA 가이드라인과 국제 표준(OWASP, CWE)을 기반으로 AI 도구용 시큐어 코딩 프롬프트를 생성합니다. + +## 가이드라인 선택 + +| # | 가이드라인 | 설명 | +|---|----------|------| +| 1 | **CII 시큐어코딩** | 전통적 보안 취약점 (SQL Injection, XSS 등) | +| 2 | **AI 보안 시큐어코딩** | AI 특화 보안 (Prompt Injection, 데이터 중독 등) | +| 3 | **로봇 보안 시큐어코딩** | 로봇 특화 보안 (IEC 62443, 펌웨어, 통신 프로토콜) | +| 4 | **우주 보안 시큐어코딩** | 우주 특화 보안 (CCSDS, 위성 프로토콜, GSaaS, 공급망) | +| 5 | **시큐어코딩 (언어별)** | 언어별 시큐어코딩 (JS, Python, pseudo code) | +| 6 | **제로트러스트 가이드** | 제로트러스트 아키텍처 및 성숙도 평가 가이드 (8개 핵심요소, ~396항목) | + +웹/서버/DB 개발 → **CII** / AI 모델/LLM/AI 서비스 개발 → **AI 보안** / 로봇 펌웨어, ROS/ROS2, 로봇 API, 산업 프로토콜 개발 → **로봇 보안** / 위성 통신, 지상국, GSaaS API, 우주 공급망 → **우주 보안** / JavaScript, Python, 기타 언어 → **시큐어코딩 (언어별)** +Zero Trust, ZTA, ZTNA, 제로트러스트, 마이크로세그멘테이션, microsegmentation, SDP, SASE, PEP/PDP, never trust always verify → **제로트러스트** + +--- + +## CII 분기 시 + +`templates/cii/webapp.md`를 참조하여 CWE 기반 시큐어 코딩 프롬프트를 생성합니다. 점검/수정 스크립트는 `scripts/cii/`에 있습니다. + +### 실행 흐름 +1. 사용자에게 대상 컨텍스트 확인 (언어, 프레임워크, 기능 유형) +2. 커스터마이징된 시큐어 코딩 프롬프트 생성 +3. 관련 CWE 패턴 및 KISA 가이드라인 포함 +4. 복사-붙여넣기 형식으로 프롬프트 제공 + +### 주요 CWE 패턴 + +| CWE | 이름 | 방지 방법 | +|-----|------|----------| +| CWE-20 | 부적절한 입력 검증 | 모든 입력 검증 | +| CWE-22 | 경로 조작 | 경로 정규화 및 검증 | +| CWE-78 | OS Command Injection | shell 피하기, 인자 리스트 | +| CWE-79 | XSS | 출력 인코딩, CSP | +| CWE-89 | SQL Injection | 매개변수화된 쿼리 | +| CWE-94 | Code Injection | eval(), exec() 피하기 | +| CWE-287 | 부적절한 인증 | 검증된 프레임워크 사용 | +| CWE-327 | 약한 암호화 | AES-256, RSA-2048+ | +| CWE-352 | CSRF | CSRF 토큰 | +| CWE-434 | 무제한 업로드 | 타입, 크기, 이름 검증 | +| CWE-502 | 안전하지 않은 역직렬화 | JSON 사용 | +| CWE-611 | XXE | 외부 엔티티 비활성화 | +| CWE-798 | 하드코딩된 자격 증명 | 환경 변수 사용 | +| CWE-918 | SSRF | URL 검증, 사설 IP 차단 | + +### 언어별 프롬프트 생성 +사용자가 지정한 언어에 맞게 시큐어 코딩 프롬프트를 생성합니다: +- **Python**: SQL Injection, Command Injection, 경로 조작, 역직렬화, 패스워드 해싱 +- **JavaScript/Node.js**: XSS, SQL Injection, Command Injection, 안전한 난수 +- **Java**: SQL Injection, XXE, 경로 조작, 역직렬화 +- **Go, Rust, C#** 등 요청 시 해당 언어에 맞게 생성 + +### 기능별 프롬프트 생성 +- 인증 구현, 파일 업로드, API 보안, 세션 관리 등 + +--- + +## AI 보안 분기 시 + +`templates/ai-security/developer.md`와 `references/ai-security/overview.md`를 참조하여 AI 특화 시큐어 코딩 프롬프트를 생성합니다. + +### AI 보안 위협별 방어 프롬프트 + +| 위협 | 방어 방법 | +|------|----------| +| Prompt Injection | 입출력 필터링, 시스템/사용자 프롬프트 분리, 가드레일 | +| 데이터 중독 | 이상치 탐지, 데이터 무결성 검증, 적대적 훈련 | +| 모델 추출 | 쿼리 제한, 출력 제한, 워터마킹, 차등 프라이버시 | +| 민감 정보 노출 | 출력 필터링, PII 마스킹, 학습 데이터 정제 | +| 적대적 예제 | 적대적 훈련, 입력 전처리, 앙상블 방어 | +| LLM 탈옥 | 콘텐츠 필터링, 안전 가드레일, 출력 모니터링 | + +### AI 보안 시큐어 코딩 영역 +1. **데이터 파이프라인 보안** — 수집, 전처리, 저장 암호화 +2. **모델 학습 보안** — 환경 격리, 데이터 검증, 연합학습 보안 +3. **모델 배포 보안** — API 인증, Rate Limiting, TLS +4. **LLM 운영 보안** — Prompt Guard, 출력 검증, RAG 보안 +5. **모델 파기 보안** — 안전한 삭제, API 비활성화 + +--- + +## 로봇 보안 분기 시 + +`templates/robot-security/overview.md`를 먼저 읽고, 목적에 따라 `ssdf.md`, `supply-chain.md`, `iec62443.md`, `cyber-resilience.md`, `wireless.md`를 참조하여 로봇 특화 시큐어 코딩 프롬프트를 생성합니다. + +### 로봇 보안 시큐어 코딩 영역 +1. **펌웨어/임베디드 보안** — 안전한 부팅, 무결성 검증, 업데이트 보안 +2. **ROS/ROS2 및 미들웨어 보안** — 노드 인증, 토픽/서비스 접근 통제 +3. **원격 관리/API 보안** — 인증, 권한, 감사 로그 +4. **산업용/무선 프로토콜 보안** — IEC 62443, RED 요구사항 반영 +5. **공급망 보안** — SBOM, 서드파티 의존성 검증, 배포 무결성 + +--- + +## 시큐어코딩 (언어별) 분기 시 + +`references/secure-coding/overview.md`에서 7개 카테고리와 49개 CWE 매핑을 참조합니다. `references/secure-coding/pseudocode.md`에서 언어 무관 패턴(46항목, UNSAFE/SAFE 쌍)을 참조합니다. 언어별 프롬프트는 `templates/secure-coding/javascript.md`(Express.js, Sequelize, Node.js) 또는 `templates/secure-coding/python.md`(Django, Flask, SQLAlchemy)를 사용합니다. + +### 자동 판별 기준 +- JavaScript, Node.js, Express, React, Vue → `templates/secure-coding/javascript.md` +- Python, Django, Flask, FastAPI → `templates/secure-coding/python.md` +- 기타 언어 (Go, Java, Rust, C#) → `references/secure-coding/pseudocode.md` (AI가 패턴 적응) +- 일반 / 언어 무관 → `references/secure-coding/pseudocode.md` + +--- + +## 제로트러스트 분기 시 + +`references/zero-trust/overview.md`에서 ZT 아키텍처를, `references/zero-trust/maturity-model.md`에서 성숙도 정의를 참조합니다. `templates/zero-trust/overview.md`에서 평가 가이드를 참조합니다. 핵심요소별 템플릿을 기반으로 ZT 구현 프롬프트를 생성합니다. OT/ICS 환경은 `templates/zero-trust/ot-environment.md`와 `references/zero-trust/ot-guide.md`를 참조합니다. + +| 주제 | reference 파일 | +|------|---------------| +| 개요 | `templates/zero-trust/overview.md` | +| 식별자 및 디바이스 | `templates/zero-trust/identity-device.md` | +| 네트워크 및 시스템 | `templates/zero-trust/network-system.md` | +| 애플리케이션 및 데이터 | `templates/zero-trust/app-data.md` | +| 가시성 및 자동화 | `templates/zero-trust/visibility-automation.md` | +| OT/ICS 환경 | `templates/zero-trust/ot-environment.md` | +| ZT 아키텍처 참조 | `references/zero-trust/overview.md` | +| 성숙도 모델 상세 | `references/zero-trust/maturity-model.md` | +| OT 배포 가이드 | `references/zero-trust/ot-guide.md` | + +8개 핵심요소, ~396개 항목, 4단계 성숙도. 표준: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-207, CISA ZT Maturity Model. + +--- + +## 사용법 + +관련 프롬프트를 복사하여 AI 어시스턴트 대화에 붙여넣은 후 코드 작성을 요청하세요. + +``` +[여기에 시큐어 코딩 요구사항 붙여넣기] + +이제 Python/FastAPI로 사용자 등록 엔드포인트를 구현해주세요. +``` diff --git a/skills-ko/guide/references/ai-security/overview.md b/skills-ko/kesekit-guide-ko/references/ai-security/overview.md similarity index 100% rename from skills-ko/guide/references/ai-security/overview.md rename to skills-ko/kesekit-guide-ko/references/ai-security/overview.md diff --git a/skills-ko/guide/references/ai-security/service-provider.md b/skills-ko/kesekit-guide-ko/references/ai-security/service-provider.md similarity index 100% rename from skills-ko/guide/references/ai-security/service-provider.md rename to skills-ko/kesekit-guide-ko/references/ai-security/service-provider.md diff --git a/skills-ko/fix/references/ai-security/user-guide.md b/skills-ko/kesekit-guide-ko/references/ai-security/user-guide.md similarity index 82% rename from skills-ko/fix/references/ai-security/user-guide.md rename to skills-ko/kesekit-guide-ko/references/ai-security/user-guide.md index 1c3f1e3..808f78d 100644 --- a/skills-ko/fix/references/ai-security/user-guide.md +++ b/skills-ko/kesekit-guide-ko/references/ai-security/user-guide.md @@ -56,15 +56,3 @@ - 정기적으로 음성 기록 검토 및 삭제 --- - -## 3. 체크리스트 요약 - -| # | 항목 | 확인 | -|---|------|:----:| -| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | -| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | -| 3 | AI 서비스 이용약관을 확인했는가? | □ | -| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | -| 5 | AI 출력 결과를 검증하고 있는가? | □ | -| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | -| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills-ko/kesekit-guide-ko/references/secure-coding/overview.md b/skills-ko/kesekit-guide-ko/references/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/skills-ko/kesekit-guide-ko/references/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/skills-ko/kesekit-guide-ko/references/secure-coding/pseudocode.md b/skills-ko/kesekit-guide-ko/references/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/references/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/skills-ko/kesekit-guide-ko/references/space-security/overview.md b/skills-ko/kesekit-guide-ko/references/space-security/overview.md new file mode 100644 index 0000000..f31ab87 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/references/space-security/overview.md @@ -0,0 +1,82 @@ +# Space Security Overview + +> Source: KISA "Space Security Model" Part1 (2024.12) + Part2 (2025.12) + Explanation Guide (2025.12) + +## 1. Overview + +| Item | Content | +|------|---------| +| Publisher | KISA (Korea Internet & Security Agency) / MSIT | +| Target | Space industry operators, satellite service providers, GSaaS providers, supply chain participants | +| Scope | Space segment, Ground segment, Satellite service segment, GSaaS, Supply chain | +| Standards | CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, NIST CSF, CCSDS | + +## 2. Space Architecture Layers + +| Layer | Components | +|-------|-----------| +| Space Segment | GEO/MEO/LEO satellites, LEO constellations, satellite bus, payload, OBC | +| Ground Segment | Satellite control, payload data processing, antenna, satellite modem, mission control | +| GSaaS | Antenna zone, ground station-cloud zone, reservation/scheduling, API/DB servers | +| Satellite Services | Navigation (GNSS), Communication (VSAT/LEO), Broadcasting | +| Supply Chain | Satellite/launch vehicle manufacturers, ground station operators, satellite operators | + +## 3. Satellite Service Types + +| Service | Description | Key Components | +|---------|-------------|----------------| +| Navigation (GNSS) | Position/navigation/timing via GNSS satellites | Smart ships, autonomous vehicles, UAM | +| Communication | Satellite-based data/voice communication | VSAT, LEO mobile, LEO internet | +| Broadcasting | Satellite TV/radio relay | Broadcasting centers, set-top boxes | +| GSaaS | Ground Station as a Service (cloud-based shared infrastructure) | Shared antennas, cloud scheduling, API | + +## 4. Security Objectives + +| Objective | Description | +|-----------|-------------| +| Confidentiality | Prevent unauthorized access to satellite data and communications | +| Integrity | Prevent unauthorized modification of commands, telemetry, and operational data | +| Availability | Ensure continuous satellite service operation | +| Authentication | Verify identity of users, processes, devices, and satellites | +| Non-repudiation | Ensure accountability for satellite operations | +| Resilience | Maintain operations during and after security incidents | + +## 5. Threat Categories (3 Major Types) + +| Type | Description | Attack Vectors | +|------|-------------|----------------| +| Data Corruption | Unauthorized data modification/deletion | MITM, spoofing, malware, insider threat | +| Service Disruption | Service interruption/degradation | Jamming, DDoS, physical destruction, SW vulnerabilities | +| Information Leakage | Sensitive data exfiltration | Eavesdropping, sniffing, session hijacking, data theft | + +## 6. Checklist Structure (12 Domains, 53 Items) + +| # | Code | Domain | Items | Reference File | +|---|------|--------|:-----:|----------------| +| 1 | AC | Access Control | 12 | `access-control.md` | +| 2 | IA | Identification & Authentication | 2 | `access-control.md` | +| 3 | SC | System & Communication Security | 7 | `system-security.md` | +| 4 | SI | System & Information Integrity | 4 | `system-security.md` | +| 5 | SO | System/Service Operations Management | 9 | `operations.md` | +| 6 | IR | Incident Response | 2 | `operations.md` | +| 7 | PS | Personnel Security | 2 | `governance.md` | +| 8 | PE | Physical & Environmental Security | 3 | `governance.md` | +| 9 | RA | Risk Assessment & Security Evaluation | 2 | `governance.md` | +| 10 | SG | Security Governance | 4 | `governance.md` | +| 11 | CP | Contingency Planning | 2 | `governance.md` | +| 12 | SM | Supply Chain Management | 4 | `supply-chain.md` | + +## 7. Compliance Standards + +| Standard | Description | +|----------|-------------| +| CMMC | Cybersecurity Maturity Model Certification (US DoD, Level 1-3) | +| K-RMF | Korea Risk Management Framework | +| NIS2 | EU Network and Information Security Directive (includes space) | +| ISMS-P | Korea Information Security Management System | +| NIST IR 8401 | Satellite Ground Segment Cybersecurity | +| NIST IR 8270 | Commercial Satellite Operations Cybersecurity | +| NIST CSF | Cybersecurity Framework (Identify/Protect/Detect/Respond/Recover) | +| NIST SP 800-171 | CUI Protection (110 requirements) | +| CCSDS 352.0-B-2 | Space System Cryptographic Algorithm Recommendation | +| ENISA Space Threat Landscape | Space system threat analysis | diff --git a/skills-ko/kesekit-guide-ko/references/space-security/supply-chain.md b/skills-ko/kesekit-guide-ko/references/space-security/supply-chain.md new file mode 100644 index 0000000..2f66548 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/references/space-security/supply-chain.md @@ -0,0 +1,60 @@ +# Supply Chain Threat Scenarios + +> Domain: GSaaS/Supply Chain Threat Scenarios (with code-block illustrations) + +## Threat Scenarios (Supply Chain) + +### Scenario 1: Vulnerable Open-Source Causing Ground Station Failure +``` +Backdoor inserted into open-source community + -> Library used without verification + -> Backdoor enables system takeover + -> Ground station service disruption +``` + +### Scenario 2: Malicious Code in Payload Update File +``` +Developer PC compromised via phishing + -> Ransomware inserted into SW update + -> Update uploaded to satellite without verification + -> Payload malfunction +``` + +### Scenario 3: Tampered IDE Plugin Causing Satellite Malfunction +``` +Malicious code in IDE/CI-CD plugin + -> Firmware developed/loaded without verification + -> Component inspection skipped + -> Satellite bus malfunction +``` + +## GSaaS Threat Scenarios + +### Scenario 1: Satellite Control Hijacking via Weak Authentication +``` +Plaintext communication sniffing + -> IAM credential theft + -> Web shell upload + -> Ground station infiltration + -> Orbit control system takeover + -> Satellite hijacking +``` + +### Scenario 2: Data Tampering via Unauthorized Device Backdoor +``` +No media control + -> USB/single-board-computer backdoor + -> Internal network access + -> Satellite access credential collection + -> Data tampering malware injection +``` + +### Scenario 3: Physical Attack via Drone Disrupting Satellite Communication +``` +Plaintext communication sniffing + -> Antenna location identified + -> Drone with jamming device/explosives + -> Antenna-satellite communication disrupted +``` + +## Total: 4 Checklist Items + 6 Threat Scenarios diff --git a/skills-ko/kesekit-guide-ko/references/zero-trust/maturity-model.md b/skills-ko/kesekit-guide-ko/references/zero-trust/maturity-model.md new file mode 100644 index 0000000..2f3612d --- /dev/null +++ b/skills-ko/kesekit-guide-ko/references/zero-trust/maturity-model.md @@ -0,0 +1,75 @@ +# Zero Trust Maturity Model + +> Reference: KISA 제로트러스트 가이드라인 2.0 (2024.12), CISA Zero Trust Maturity Model v2.0 +> Purpose: Detailed maturity level definitions and scoring guidance + +## Maturity Level Definitions + +### Traditional (전통적) +- Perimeter-based security model (castle-and-moat) +- Manual identity management and access control +- Static, rule-based security policies +- Limited visibility into internal traffic + +### Initial (기본) +- Beginning adoption of ZT principles +- Some automated identity management (SSO, basic MFA) +- Initial network segmentation beyond perimeter +- Centralized logging introduced + +### Advanced (고도화) +- Context-aware, dynamic access policies +- AI-assisted threat detection and response +- Comprehensive microsegmentation +- Real-time monitoring and analytics + +### Optimal (최적화) +- Fully automated, self-adaptive security +- AI-driven orchestration and response +- Predictive threat analysis +- Continuous verification at all layers +- Zero standing privileges + +## Scoring Framework + +### Per-Item Scoring + +| Score | Criteria | +|-------|----------| +| 3 | Fully implemented and operational | +| 2 | Partially implemented, gaps exist | +| 1 | Planned but not yet implemented | +| 0 | Not implemented, no plans | + +### Element Maturity Calculation + +``` +Element Score = (Sum of item scores for target level) / (Max possible score) x 100% + +Maturity Rating: + >= 80% → Mature (at or above target level) + 60-79% → Developing (approaching target level) + 40-59% → Emerging (significant gaps remain) + < 40% → Insufficient (major remediation needed) +``` + +## Cross-Element Dependencies + +| Element | Depends On | +|---------|-----------| +| Identity | — (foundation element) | +| Device | Identity | +| Network | Identity, Device | +| System | Network, Identity | +| Application | Identity, Device, Network | +| Data | Application, Identity | +| Visibility | All elements (observability layer) | +| Automation | Visibility (requires data to automate) | + +## Assessment Prioritization + +1. Start with **Identity** — foundation of all ZT controls +2. Then **Device** — ensure endpoint trust +3. Then **Network** — establish segmentation +4. Then **Application** and **Data** — protect workloads +5. Finally **Visibility** and **Automation** — enable continuous improvement diff --git a/skills-ko/kesekit-guide-ko/references/zero-trust/ot-guide.md b/skills-ko/kesekit-guide-ko/references/zero-trust/ot-guide.md new file mode 100644 index 0000000..92c0970 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/references/zero-trust/ot-guide.md @@ -0,0 +1,128 @@ +# OT/ICS Zero Trust Deployment Guide + +> Reference: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-82 Rev.3, IEC 62443 +> Purpose: Guidance for deploying Zero Trust in OT/ICS environments + +## Why OT/ICS Requires Special ZT Consideration + +Traditional IT Zero Trust assumes: +- Modern endpoints capable of running agents +- Tolerance for additional authentication latency +- Ability to patch and update frequently +- Replaceable infrastructure components + +OT/ICS reality: +- Legacy devices (PLCs, RTUs, HMIs) with 15-30 year lifecycles +- Real-time control loops with microsecond-level latency requirements +- Safety-critical functions where authentication delays can cause harm +- Proprietary protocols (Modbus, DNP3, OPC UA, PROFINET) +- Air-gapped or semi-isolated networks + +## Phased Deployment Approach + +### Phase 1: Visibility & Asset Discovery + +**Objective**: Know what you have before you protect it. + +- Conduct complete OT asset inventory (active + passive discovery) +- Map communication flows between OT devices, IT systems, and external connections +- Identify Purdue Model levels for each asset +- Baseline normal traffic patterns and protocol usage +- Document legacy devices that cannot support modern security controls + +### Phase 2: IT-OT Boundary Segmentation + +**Objective**: Establish strong boundary between IT and OT networks. + +- Deploy industrial DMZ between IT and OT networks +- Implement data diodes or unidirectional gateways for critical flows +- Control all IT-OT data exchange through monitored jump servers +- Establish separate authentication domains for IT and OT + +### Phase 3: OT Internal Segmentation + +**Objective**: Apply zone/conduit model within OT network. + +- Implement IEC 62443 zones and conduits +- Segment by safety level (SL), function, and criticality +- Deploy OT-aware firewalls between zones +- Establish conduit-level access policies + +### Phase 4: Identity & Access Control + +**Objective**: Enforce identity-based access in OT environment. + +- Deploy MFA for all remote OT access (hardware tokens preferred) +- Implement privileged access management (PAM) for OT systems +- Apply least-privilege access for OT operators and engineers +- Manage shared/service accounts with rotation and monitoring +- Use jump servers with session recording for maintenance access + +### Phase 5: Continuous Monitoring + +**Objective**: Maintain visibility and detect anomalies. + +- Deploy OT-specific IDS/IPS (passive monitoring preferred initially) +- Implement Deep Packet Inspection (DPI) for OT protocols +- Integrate OT security events with enterprise SIEM +- Establish OT-specific SOC or extend IT SOC with OT expertise +- Monitor for known OT malware signatures (Triton, Industroyer, etc.) + +### Phase 6: Automated Response (with Safety Validation) + +**Objective**: Enable automated response without compromising safety. + +- Define automated response actions with safety impact assessment +- Implement fail-safe defaults (fail-open for safety-critical, fail-close for non-critical) +- Require human approval for actions affecting safety systems +- Test automated responses in simulation environment before deployment + +## OT-Specific ZT Architecture + +``` +┌────────────────────────────────────────────┐ +│ Enterprise Zone (IT) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ PDP │ │ IdP/ │ │ Enterprise │ │ +│ │ │ │ MFA │ │ SIEM │ │ +│ └────────┘ └────────┘ └────────────┘ │ +└──────────────────┬─────────────────────────┘ + │ Industrial DMZ +┌──────────────────┴─────────────────────────┐ +│ ┌────────────┐ ┌─────────┐ ┌────────┐ │ +│ │ Jump Server│ │ Historian│ │ PEP │ │ +│ │ (PAM) │ │ Mirror │ │ (OT) │ │ +│ └────────────┘ └─────────┘ └────────┘ │ +└──────────────────┬─────────────────────────┘ + │ +┌──────────────────┴─────────────────────────┐ +│ OT Zone (ICS/SCADA) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ HMI │ │ PLC │ │ RTU │ │ +│ │ │ │ │ │ │ │ +│ └────────┘ └────────┘ └────────────┘ │ +│ ┌────────────────────────────────────┐ │ +│ │ OT IDS (Passive Monitoring) │ │ +│ └────────────────────────────────────┘ │ +└────────────────────────────────────────────┘ +``` + +## Legacy Device Handling + +For OT devices that cannot support modern ZT controls: + +1. **Security Wrapper/Proxy**: Place a ZT-capable proxy in front of legacy devices +2. **Network-Level Protection**: Use OT-aware firewalls to enforce access policies +3. **Monitoring**: Deploy passive DPI sensors for visibility without device modification +4. **Compensating Controls**: Document risk acceptance with compensating controls per IEC 62443 + +## Standards Mapping + +| OT-ZT Requirement | IEC 62443 | NIST SP 800-82 | KISA ZT 2.0 | +|-------------------|-----------|----------------|-------------| +| Network Segmentation | Zone/Conduit | Section 5.3 | NW Element | +| Access Control | FR 1 (AC) | Section 6.2 | ID Element | +| Device Management | FR 4 (DC) | Section 6.3 | DV Element | +| Communication Integrity | FR 3 (SI) | Section 5.4 | SY Element | +| Monitoring | FR 6 (RE) | Section 6.6 | VA Element | +| Incident Response | FR 7 (RA) | Section 6.7 | AU Element | diff --git a/skills-ko/kesekit-guide-ko/references/zero-trust/overview.md b/skills-ko/kesekit-guide-ko/references/zero-trust/overview.md new file mode 100644 index 0000000..38fe30d --- /dev/null +++ b/skills-ko/kesekit-guide-ko/references/zero-trust/overview.md @@ -0,0 +1,72 @@ +# Zero Trust Architecture Reference + +> Reference: NIST SP 800-207, KISA 제로트러스트 가이드라인 2.0, CISA Zero Trust Maturity Model +> Purpose: Provide architectural context for Zero Trust maturity assessment + +## Zero Trust Architecture (ZTA) + +### Core Logical Components + +``` +┌─────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ PDP │ │ Policy │ │ Trust Algorithm │ │ +│ │ (Policy │ │ Engine │ │ (Risk Score + │ │ +│ │ Decision │ │ │ │ Context Analysis) │ │ +│ │ Point) │ │ │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ + │ + ┌────┴────┐ + │ PEP │ ← Policy Enforcement Point + │ │ + └────┬────┘ + │ +┌─────────────────────────────────────────────────────────┐ +│ Data Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ Subject │ │ Resource │ │ Enterprise │ │ +│ │ (User/ │→→│ (App/ │ │ Resources │ │ +│ │ Device) │ │ Data) │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### Deployment Models (NIST SP 800-207) + +1. **SDP (Software Defined Perimeter)**: Agent/gateway-based model +2. **Micro-segmentation**: Network-centric approach +3. **Network Infrastructure + SDP**: Hybrid approach + +### KISA Zero Trust Guidelines 2.0 — 8 Elements + +| Element | Korean | Scope | +|---------|--------|-------| +| Identity | 식별자 및 신원 | User identity management, MFA, continuous authentication | +| Device | 디바이스 및 엔드포인트 | Device inventory, health checks, compliance | +| Network | 네트워크 | Macro/micro segmentation, SDN, encrypted traffic | +| System | 시스템 | System hardening, patching, configuration management | +| Application | 애플리케이션 및 워크로드 | Resource authorization, remote access, monitoring | +| Data | 데이터 | Classification, DLP, encryption, access control | +| Visibility | 가시성 및 분석 | Logging, SIEM, threat analysis | +| Automation | 자동화 및 오케스트레이션 | SOAR, automated response, policy orchestration | + +### Related Standards + +| Standard | Organization | Focus | +|----------|-------------|-------| +| NIST SP 800-207 | NIST | ZTA reference architecture | +| CISA Zero Trust Maturity Model | CISA | Federal ZT maturity assessment | +| 제로트러스트 가이드라인 2.0 | KISA | Korean ZT implementation guide | +| NIST SP 800-82 | NIST | OT/ICS security guide | +| IEC 62443 | IEC | Industrial automation security | + +### Key Concepts + +- **PDP (Policy Decision Point)**: Evaluates access requests against policy +- **PEP (Policy Enforcement Point)**: Enforces PDP decisions at the access point +- **SDP (Software Defined Perimeter)**: Creates dynamic, identity-based perimeters +- **SASE (Secure Access Service Edge)**: Cloud-delivered convergence of network and security +- **ZTNA (Zero Trust Network Access)**: Application-level access without VPN +- **Microsegmentation**: Granular network isolation at workload level diff --git a/skills-ko/kesekit-guide-ko/scripts/cii/cloud.md b/skills-ko/kesekit-guide-ko/scripts/cii/cloud.md new file mode 100644 index 0000000..b5fc514 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/cii/cloud.md @@ -0,0 +1,517 @@ +# 클라우드 점검 스크립트 (CA-01 ~ CA-19) + +## 1. 계정 관리 + +### CA-01: 사용자 계정 관리 +**점검:** +```bash +# AWS: IAM 사용자 목록 및 마지막 로그인 확인 +aws iam list-users --output table +aws iam generate-credential-report +aws iam get-credential-report --output text --query Content | base64 -d + +# Azure: 사용자 목록 확인 +az ad user list --output table +az ad user list --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}" --output table + +# GCP: IAM 사용자 확인 +gcloud iam service-accounts list +gcloud projects get-iam-policy --format=json +``` +**조치:** +```bash +# AWS: 불필요 계정 삭제/비활성화 +aws iam delete-user --user-name <사용자명> +aws iam delete-login-profile --user-name <사용자명> +# 액세스 키 비활성화 +aws iam update-access-key --user-name <사용자명> --access-key-id <키ID> --status Inactive + +# Azure: 불필요 계정 삭제/비활성화 +az ad user update --id <사용자ID> --account-enabled false +az ad user delete --id <사용자ID> + +# GCP: 서비스 계정 삭제/비활성화 +gcloud iam service-accounts disable <서비스계정이메일> +gcloud iam service-accounts delete <서비스계정이메일> +``` + +### CA-02: 사용자 정책 관리 +**점검:** +```bash +# AWS: 사용자별 정책 확인 +aws iam list-attached-user-policies --user-name <사용자명> +aws iam list-user-policies --user-name <사용자명> +aws iam list-groups-for-user --user-name <사용자명> + +# Azure: 역할 할당 확인 +az role assignment list --all --output table + +# GCP: IAM 정책 확인 +gcloud projects get-iam-policy +``` +**조치:** +```bash +# AWS: 불필요 권한 제거, 최소 권한 원칙 적용 +aws iam detach-user-policy --user-name <사용자명> --policy-arn <정책ARN> +# 그룹 기반 권한 관리 +aws iam create-group --group-name <그룹명> +aws iam attach-group-policy --group-name <그룹명> --policy-arn <정책ARN> +aws iam add-user-to-group --user-name <사용자명> --group-name <그룹명> + +# Azure: 역할 할당 변경 +az role assignment delete --assignee <사용자ID> --role <역할명> +az role assignment create --assignee <사용자ID> --role <역할명> --scope <범위> + +# GCP: IAM 바인딩 변경 +gcloud projects remove-iam-policy-binding --member=user:<이메일> --role=<역할> +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=<역할> +``` + +### CA-03: MFA(Multi-Factor Authentication) 설정 +**점검:** +```bash +# AWS: MFA 설정 여부 확인 +aws iam list-virtual-mfa-devices +aws iam list-mfa-devices --user-name <사용자명> +# MFA 미설정 사용자 확인 (credential report 활용) +aws iam get-credential-report --output text --query Content | base64 -d | grep -i "false" + +# Azure: MFA 상태 확인 +az ad user list --query "[].{UPN:userPrincipalName}" --output table +# Azure Portal: Azure AD > 보안 > MFA 에서 확인 + +# GCP: 2단계 인증은 Google Workspace Admin Console에서 확인 +``` +**조치:** +```bash +# AWS: 가상 MFA 디바이스 생성 및 활성화 +aws iam create-virtual-mfa-device --virtual-mfa-device-name <디바이스명> --outfile QRCode.png --bootstrap-method QRCodePNG +aws iam enable-mfa-device --user-name <사용자명> --serial-number --authentication-code1 <코드1> --authentication-code2 <코드2> + +# Azure: 조건부 액세스 정책으로 MFA 강제 (Azure Portal에서 설정) +# Azure AD > 보안 > 조건부 액세스 > 새 정책 > MFA 필수 + +# GCP: Google Workspace Admin Console에서 2단계 인증 강제 +``` + +### CA-04: 클라우드 계정 비밀번호 정책 관리 +**점검:** +```bash +# AWS: 비밀번호 정책 확인 +aws iam get-account-password-policy + +# Azure: 비밀번호 정책 확인 (Azure AD) +az ad group list --output table +# Azure Portal: Azure AD > 보안 > 인증 방법 > 비밀번호 보호 +``` +**조치:** +```bash +# AWS: 비밀번호 정책 설정 +aws iam update-account-password-policy \ + --minimum-password-length 8 \ + --require-symbols \ + --require-numbers \ + --require-uppercase-characters \ + --require-lowercase-characters \ + --max-password-age 90 \ + --password-reuse-prevention 24 \ + --allow-users-to-change-password + +# Azure: Azure AD Portal에서 비밀번호 정책 설정 +# Azure AD > 보안 > 인증 방법 > 비밀번호 보호 > 사용자 지정 금지 비밀번호 목록 +``` + +## 2. 권한 관리 + +### CA-05: 인스턴스 서비스 정책 관리 +**점검:** +```bash +# AWS: EC2 관련 IAM 정책 확인 +aws iam list-policies --query "Policies[?contains(PolicyName,'EC2')]" --output table +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,IamInstanceProfile]" --output table + +# Azure: VM 관련 역할 확인 +az vm list --output table +az role assignment list --query "[?contains(scope,'Microsoft.Compute')]" --output table + +# GCP: Compute Engine IAM 확인 +gcloud compute instances list +``` +**조치:** +```bash +# AWS: 인스턴스 관련 권한 최소화 +# 전용 IAM 역할 생성 후 인스턴스에 할당 +aws iam create-role --role-name <역할명> --assume-role-policy-document file://trust-policy.json +aws iam attach-role-policy --role-name <역할명> --policy-arn <정책ARN> +aws ec2 associate-iam-instance-profile --instance-id <인스턴스ID> --iam-instance-profile Name=<프로필명> + +# Azure: 리소스 그룹 단위 역할 할당 +az role assignment create --assignee <사용자ID> --role "Virtual Machine Contributor" --scope /subscriptions/<구독ID>/resourceGroups/<리소스그룹> + +# GCP: 커스텀 역할 적용 +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=roles/compute.instanceAdmin +``` + +### CA-06: 네트워크 서비스 정책 관리 +**점검:** +```bash +# AWS: VPC/네트워크 관련 정책 확인 +aws ec2 describe-vpcs --output table +aws ec2 describe-security-groups --output table + +# Azure: NSG 확인 +az network nsg list --output table +az network nsg rule list --nsg-name --resource-group <리소스그룹> --output table + +# GCP: 방화벽 규칙 확인 +gcloud compute firewall-rules list +``` +**조치:** +```bash +# AWS: 보안 그룹 규칙 관리 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr <관리자IP>/32 + +# Azure: NSG 규칙 관리 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> +az network nsg rule create --nsg-name --resource-group --name <규칙명> --priority 100 --access Allow --source-address-prefixes --destination-port-ranges 22 + +# GCP: 방화벽 규칙 관리 +gcloud compute firewall-rules delete <규칙명> +gcloud compute firewall-rules create <규칙명> --allow tcp:22 --source-ranges=/32 +``` + +## 3. 가상 리소스 관리 + +### CA-07: VPC 네트워크 서브넷 관리 +**점검:** +```bash +# AWS: 서브넷 구성 확인 (Public/Private 분리 여부) +aws ec2 describe-subnets --output table +aws ec2 describe-route-tables --output table +aws ec2 describe-internet-gateways --output table +aws ec2 describe-nat-gateways --output table + +# Azure: 가상 네트워크 서브넷 확인 +az network vnet list --output table +az network vnet subnet list --vnet-name --resource-group --output table + +# GCP: 서브넷 확인 +gcloud compute networks subnets list +``` +**조치:** +```bash +# Public 서브넷: 인터넷 게이트웨이 할당 +# Private 서브넷: NAT 게이트웨이 할당 +# 서브넷별 네트워크 리소스 별도 설정 + +# AWS: NAT 게이트웨이 생성 (Private 서브넷용) +aws ec2 create-nat-gateway --subnet-id --allocation-id + +# Azure: Private 서브넷에 NSG 적용 +az network vnet subnet update --vnet-name --name <서브넷명> --resource-group --network-security-group +``` + +### CA-08: 가상 네트워크 리소스 관리 +**점검:** +```bash +# AWS: 공인 IP 할당 인스턴스 확인 +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress]" --output table + +# Azure: 공인 IP 확인 +az network public-ip list --output table +az vm list-ip-addresses --output table + +# GCP: 외부 IP 확인 +gcloud compute instances list --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)" +``` +**조치:** +```bash +# AWS: 불필요 공인 IP 해제 +aws ec2 disassociate-address --association-id <연결ID> +aws ec2 release-address --allocation-id <할당ID> + +# Azure: 공인 IP 해제 +az network nic ip-config update --resource-group --nic-name --name --remove publicIpAddress + +# GCP: 외부 IP 제거 +gcloud compute instances delete-access-config <인스턴스명> --access-config-name "External NAT" +``` + +### CA-09: 접근 제어 설정 관리 +**점검:** +```bash +# AWS: 보안 그룹 규칙 확인 (0.0.0.0/0 허용 여부) +aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,Ingress:IpPermissions}" --output json +# 0.0.0.0/0 허용 규칙 필터링 +aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" --output table + +# Azure: NSG 규칙 중 Any 허용 확인 +az network nsg list --query "[].{Name:name,Rules:securityRules[?sourceAddressPrefix=='*']}" --output json + +# GCP: 0.0.0.0/0 허용 방화벽 규칙 확인 +gcloud compute firewall-rules list --filter="sourceRanges=0.0.0.0/0" +``` +**조치:** +```bash +# AWS: 불필요한 0.0.0.0/0 규칙 제거 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port <포트> --cidr 0.0.0.0/0 + +# Azure: 불필요 규칙 삭제 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> + +# GCP: 불필요 방화벽 규칙 삭제 +gcloud compute firewall-rules delete <규칙명> + +# 공통: 관리자 IP 또는 특정 IP에서만 접속 허용 +``` + +### CA-10: 스토리지 리소스 퍼블릭 접근 관리 +**점검:** +```bash +# AWS: S3 버킷 퍼블릭 접근 확인 +aws s3api get-bucket-acl --bucket <버킷명> +aws s3api get-public-access-block --bucket <버킷명> +aws s3api get-bucket-policy --bucket <버킷명> + +# Azure: 스토리지 계정 공개 접근 확인 +az storage account list --query "[].{Name:name,PublicAccess:allowBlobPublicAccess}" --output table + +# GCP: 버킷 IAM 확인 +gsutil iam get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 퍼블릭 접근 차단 +aws s3api put-public-access-block --bucket <버킷명> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true + +# Azure: 스토리지 공개 접근 비활성화 +az storage account update --name <스토리지명> --resource-group --allow-blob-public-access false + +# GCP: 버킷에서 allUsers/allAuthenticatedUsers 제거 +gsutil iam ch -d allUsers gs://<버킷명> +gsutil iam ch -d allAuthenticatedUsers gs://<버킷명> +``` + +## 4. 운영 관리 + +### CA-11: 관계형 데이터베이스 암호화 설정 +**점검:** +```bash +# AWS: RDS 암호화 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Encrypted:StorageEncrypted}" --output table + +# Azure: SQL DB 암호화 확인 +az sql db tde show --server <서버명> --database --resource-group + +# GCP: Cloud SQL 암호화 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.dataDiskEncryptionConfiguration)" +``` +**조치:** +```bash +# AWS: RDS 암호화 활성화 (생성 시 또는 스냅샷 복원) +aws rds create-db-instance --db-instance-identifier --storage-encrypted --kms-key-id ... + +# Azure: TDE 활성화 +az sql db tde set --server <서버명> --database --resource-group --status Enabled + +# GCP: 기본적으로 저장 데이터 암호화 적용됨 (CMEK 설정 가능) +``` + +### CA-12: 통신 구간 암호화 설정 +**점검:** +```bash +# AWS: ELB/ALB SSL 인증서 확인 +aws elbv2 describe-listeners --load-balancer-arn --query "Listeners[*].{Port:Port,Protocol:Protocol,Certs:Certificates}" --output table + +# Azure: Application Gateway SSL 확인 +az network application-gateway ssl-cert list --gateway-name <게이트웨이명> --resource-group + +# 공통: TLS 버전 확인 +openssl s_client -connect <호스트>:443 -tls1_2 +``` +**조치:** +```bash +# 공통 권고사항: +# 서버 원격 접근 시 VPN, SSH 사용 +# TLS v1.2 이상 (TLS v1.3 권장) 사용 +# 블록 암호: SEED, ARIA, AES (키 128bits 이상) +# 공개키 암호: RSA (키 2048bits 이상) +# 해시: SHA-2 이상 +``` + +### CA-13: 클라우드 서비스 사용자 계정 로깅 설정 +**점검:** +```bash +# AWS: CloudTrail 설정 확인 +aws cloudtrail describe-trails --output table +aws cloudtrail get-trail-status --name <트레일명> + +# Azure: Activity Log 확인 +az monitor activity-log list --offset 1h --output table + +# GCP: Cloud Audit Logs 확인 +gcloud logging read "logName:cloudaudit.googleapis.com" --limit 10 +``` +**조치:** +```bash +# AWS: CloudTrail 활성화 +aws cloudtrail create-trail --name <트레일명> --s3-bucket-name <버킷명> --is-multi-region-trail +aws cloudtrail start-logging --name <트레일명> + +# Azure: 진단 설정 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <리소스ID> --logs '[{"category":"AuditEvent","enabled":true}]' --storage-account <스토리지ID> + +# GCP: Audit Log 기본 활성화됨, 추가 설정 시 +gcloud projects get-iam-policy --format=json +``` + +### CA-14: 인스턴스 로깅 설정 +**점검:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 그룹 확인 +aws logs describe-log-groups --output table + +# Azure: VM 진단 설정 확인 +az vm diagnostics get-default-config + +# GCP: Ops Agent 설치 확인 +gcloud compute instances describe <인스턴스명> --format="value(metadata.items)" +``` +**조치:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 전송 +aws ssm send-command --instance-ids <인스턴스ID> --document-name "AWS-ConfigureAWSPackage" --parameters '{"action":["Install"],"name":["AmazonCloudWatchAgent"]}' + +# Azure: VM 진단 확장 설치 +az vm diagnostics set --resource-group --vm-name --settings <설정JSON> + +# GCP: Ops Agent 설치 +gcloud compute ssh <인스턴스명> -- 'curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh && sudo bash add-google-cloud-ops-agent-repo.sh --also-install' +``` + +### CA-15: 관계형 데이터베이스 로깅 설정 +**점검:** +```bash +# AWS: RDS 로깅 파라미터 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Logs:EnabledCloudwatchLogsExports}" --output table + +# Azure: SQL 감사 설정 확인 +az sql server audit-policy show --server <서버명> --resource-group + +# GCP: Cloud SQL 로그 플래그 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.databaseFlags)" +``` +**조치:** +```bash +# AWS: RDS 로그 내보내기 활성화 +aws rds modify-db-instance --db-instance-identifier --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}' + +# Azure: SQL 감사 활성화 +az sql server audit-policy update --server <서버명> --resource-group --state Enabled --storage-account <스토리지명> + +# GCP: Cloud SQL 감사 로그 활성화 +gcloud sql instances patch <인스턴스명> --database-flags=log_output=FILE,general_log=on,slow_query_log=on +``` + +### CA-16: 오브젝트 스토리지 버킷 로깅 설정 +**점검:** +```bash +# AWS: S3 서버 액세스 로깅 확인 +aws s3api get-bucket-logging --bucket <버킷명> + +# Azure: Blob Storage 진단 로그 확인 +az monitor diagnostic-settings list --resource <스토리지리소스ID> + +# GCP: 버킷 로깅 확인 +gsutil logging get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 서버 액세스 로깅 활성화 +aws s3api put-bucket-logging --bucket <버킷명> --bucket-logging-status '{"LoggingEnabled":{"TargetBucket":"<로그버킷>","TargetPrefix":"logs/"}}' + +# Azure: Blob Storage 진단 로그 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <스토리지리소스ID> --logs '[{"category":"StorageRead","enabled":true},{"category":"StorageWrite","enabled":true},{"category":"StorageDelete","enabled":true}]' + +# GCP: 버킷 로깅 활성화 +gsutil logging set on -b gs://<로그버킷> gs://<대상버킷> +``` + +### CA-17: 로그 보관 기간 설정 +**점검:** +```bash +# AWS: CloudWatch Logs 보관 기간 확인 +aws logs describe-log-groups --query "logGroups[*].{Name:logGroupName,Retention:retentionInDays}" --output table +# S3 수명 주기 정책 확인 +aws s3api get-bucket-lifecycle-configuration --bucket <버킷명> + +# Azure: 로그 보관 정책 확인 +az monitor diagnostic-settings list --resource <리소스ID> + +# GCP: 로그 버킷 보관 기간 확인 +gcloud logging buckets describe <버킷명> --location=global +``` +**조치:** +```bash +# AWS: CloudWatch Logs 보관 기간 설정 (예: 365일) +aws logs put-retention-policy --log-group-name <로그그룹명> --retention-in-days 365 + +# Azure: 진단 설정에서 보관 기간 설정 (일반적으로 Azure Portal에서 설정) + +# GCP: 로그 버킷 보관 기간 설정 +gcloud logging buckets update <버킷명> --location=global --retention-days=365 +``` + +### CA-18: 백업 사용 여부 +**점검:** +```bash +# AWS: 백업 설정 확인 +aws backup list-backup-plans --output table +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,BackupRetention:BackupRetentionPeriod}" --output table +aws ec2 describe-snapshots --owner-ids self --output table + +# Azure: 백업 항목 확인 +az backup item list --vault-name <볼트명> --resource-group --output table + +# GCP: 스냅샷 확인 +gcloud compute snapshots list +gcloud sql backups list --instance=<인스턴스명> +``` +**조치:** +```bash +# AWS: 자동 백업 설정 +aws backup create-backup-plan --backup-plan file://backup-plan.json +# RDS 백업 보관 기간 설정 +aws rds modify-db-instance --db-instance-identifier --backup-retention-period 7 + +# Azure: 백업 정책 설정 +az backup protection enable-for-vm --resource-group --vault-name <볼트명> --vm --policy-name <정책명> + +# GCP: 스냅샷 스케줄 생성 +gcloud compute resource-policies create snapshot-schedule <정책명> --region=<리전> --max-retention-days=14 --daily-schedule +``` + +### CA-19: 가상 리소스 이상징후 알림 설정 +**점검:** +```bash +# AWS: CloudWatch 알람 확인 +aws cloudwatch describe-alarms --output table + +# Azure: 경고 규칙 확인 +az monitor metrics alert list --output table + +# GCP: 알림 정책 확인 +gcloud alpha monitoring policies list +``` +**조치:** +```bash +# AWS: CloudWatch 알람 생성 (예: CPU 사용률) +aws cloudwatch put-metric-alarm --alarm-name "HighCPU" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions --dimensions Name=InstanceId,Value=<인스턴스ID> + +# Azure: 메트릭 경고 생성 +az monitor metrics alert create --name "HighCPU" --resource-group --scopes <리소스ID> --condition "avg Percentage CPU > 80" --action <액션그룹ID> + +# GCP: 알림 정책 생성 (gcloud 또는 Cloud Console에서 설정) +# Cloud Console > Monitoring > 알림 > 정책 만들기 > 조건 및 알림 채널(SMS, 이메일) 설정 +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/cii/database.md b/skills-ko/kesekit-guide-ko/scripts/cii/database.md new file mode 100644 index 0000000..5abb7fb --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/cii/database.md @@ -0,0 +1,649 @@ +# DBMS 점검 스크립트 (D-01 ~ D-26) + +## 1. 계정 관리 + +### D-01: 기본 계정의 비밀번호, 정책 등을 변경하여 사용 +**점검:** +```sql +-- Oracle: 기본 계정 사용 여부 및 정책 확인 +SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE account_status = 'OPEN'; + +-- MSSQL: sa 계정 확인 +SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa'; + +-- MySQL: root 계정 확인 +SELECT User, Host FROM mysql.user; +SHOW VARIABLES LIKE 'validate_password%'; + +-- PostgreSQL: 역할 확인 +SELECT rolname, rolsuper FROM pg_roles; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; + +-- Cubrid +SELECT name, password FROM db_user; +SELECT * FROM db_password; +``` +**조치:** +```sql +-- Oracle: 비밀번호 변경 / 잠금 +ALTER USER <기본계정명> IDENTIFIED BY <신규비밀번호>; +ALTER USER <기본계정명> ACCOUNT LOCK; + +-- MSSQL: sa 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; + +-- MySQL 5.7 +UPDATE user SET authentication_string = PASSWORD('신규비밀번호') WHERE User = 'root'; +FLUSH PRIVILEGES; +-- MySQL 8.0 +ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; +FLUSH PRIVILEGES; + +-- Altibase +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- Tibero +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- PostgreSQL +ALTER USER postgres WITH PASSWORD '신규비밀번호'; + +-- Cubrid +ALTER USER "사용자계정명" PASSWORD '신규비밀번호'; +``` + +### D-02: 불필요 계정 제거 또는 잠금설정 +**점검:** +```sql +-- Oracle +SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; + +-- MSSQL +SELECT name, is_disabled FROM sys.server_principals; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM all_users; +SELECT * FROM dba_users; + +-- PostgreSQL +SELECT * FROM pg_roles; +-- 또는 명령어: \du + +-- Cubrid +SELECT name, password FROM db_user; +``` +**조치:** +```sql +-- Oracle +DROP USER [삭제할 계정]; + +-- MSSQL +EXEC sp_droplogin '삭제할 계정'; + +-- MySQL +DROP USER '삭제할 계정'@'호스트명'; +FLUSH PRIVILEGES; + +-- Altibase / Tibero +DROP USER user_name CASCADE; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; + +-- Cubrid +DROP USER [삭제할 계정]; +``` + +### D-03: 비밀번호 사용 기간 및 복잡도 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES WHERE resource_name LIKE 'PASSWORD%'; + +-- MySQL +SHOW VARIABLES LIKE 'validate_password%'; +SHOW VARIABLES LIKE 'default_password_lifetime'; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle: 비밀번호 정책 설정 +ALTER PROFILE <프로파일명> LIMIT + FAILED_LOGIN_ATTEMPTS 3 + PASSWORD_LIFE_TIME 30 + PASSWORD_REUSE_TIME 30 + PASSWORD_VERIFY_FUNCTION verify_function + PASSWORD_GRACE_TIME 5; +ALTER USER <계정명> PROFILE <프로파일명>; + +-- MSSQL: 암호 만료 강제 적용 (SSMS GUI) +-- 보안 > 로그인 > 속성 > "암호 만료 강제 적용" 설정 +-- OS 암호 정책: [로컬 보안 정책] > [암호 정책] > 최대 암호 사용 기간: 60일 + +-- MySQL: 복잡도 정책 +INSTALL COMPONENT 'file://component_validate_password'; +SET GLOBAL validate_password.policy = 'MEDIUM'; +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.mixed_case_count = 1; +SET GLOBAL validate_password.number_count = 1; +SET GLOBAL validate_password.special_char_count = 1; +-- LifeTime 정책 +SET GLOBAL default_password_lifetime = 90; +ALTER USER '<계정명>'@'<호스트>' PASSWORD EXPIRE INTERVAL 91 DAY; + +-- Altibase +ALTER USER 계정명 LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7); + +-- Tibero +CREATE PROFILE prof LIMIT + failed_login_attempts 3 + password_lock_time 1/1440 + password_life_time 90 + password_reuse_time unlimited + password_reuse_max 10 + password_grace_time 10 + password_verify_function verify_function; +``` + +### D-04: 관리자 권한을 필요한 계정에만 허용 +**점검:** +```sql +-- Oracle: SYSDBA 권한 점검 +SELECT username FROM v$pwfile_users WHERE username NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +) AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +-- Admin 부적합 계정 점검 +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ( + 'SYS','SYSTEM','AQ_ADMINISTRATOR_ROLE','DBA','DSYS','BACSYS','SCHEDULER_ADMIN','MSYS' +) AND admin_option = 'YES' AND grantee NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +); + +-- MySQL: SUPER 권한 확인 +SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; + +-- PostgreSQL +SELECT * FROM pg_user; +SELECT username, usesuper FROM pg_shadow; + +-- Cubrid: DBA 권한 사용자 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +REVOKE <권한> FROM <계정명>; +GRANT <권한> ON <테이블명> TO <계정명>; + +-- MSSQL: sysadmin 역할에서 삭제 +EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; + +-- MySQL: SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; + +-- PostgreSQL: 불필요 관리자 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; + +-- Cubrid: DBA 권한 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +``` + +### D-05: 비밀번호 재사용 제약 설정 +**점검:** +```sql +-- Oracle +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' + AND limit IN ('UNLIMITED', 'NULL'); +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' + AND limit IN ('UNLIMITED', 'NULL'); + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; + +-- Altibase +ALTER USER [계정명] LIMIT (PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 10); + +-- Tibero +CREATE PROFILE prof LIMIT + password_reuse_time unlimited + password_reuse_max 10; +``` + +### D-06: DB 사용자 계정 개별 부여 +**점검:** +```sql +-- Oracle +SELECT username FROM dba_users ORDER BY username; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL +SELECT * FROM pg_shadow; + +-- Altibase +SELECT * FROM system_.sys_users_; +``` +**조치:** +```sql +-- Oracle: 공용 계정 삭제 후 개별 계정 생성 +DROP USER '공용계정'; +CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +GRANT connect, resource TO [계정명]; + +-- MSSQL +EXEC sp_droplogin '공용계정'; +CREATE LOGIN '생성계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성계정' FOR LOGIN '생성계정'; + +-- MySQL +DROP USER <계정명>@<호스트>; +CREATE USER '<계정명>'@'<호스트>' IDENTIFIED BY '비밀번호'; +GRANT SELECT, INSERT ON DB이름.테이블명 TO '<계정명>'@'<호스트>'; +FLUSH PRIVILEGES; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' <권한명>; +``` + +### D-07: root 권한으로 서비스 구동 제한 +**점검:** +```bash +# Oracle +ps -ef | grep pmon +ps -ef | grep tnslsnr + +# MySQL +ps -ef | grep mysqld +cat /etc/my.cnf | grep user + +# Altibase +ps -ef | grep altibase | grep -v grep +``` +**조치:** +```bash +# Oracle: oracle 계정으로 전환 후 구동 +su - oracle +lsnrctl start +sqlplus / as sysdba +startup + +# MySQL: my.cnf [mysqld] 섹션에 user 지정 +# vi /etc/my.cnf +# [mysqld] +# user = mysql + +# Altibase: 전용 계정으로 소유자 변경 +chown -R [계정명]:[그룹명] '[Altibase 디렉터리]' +``` + +### D-08: 안전한 암호화 알고리즘 사용 +**점검:** +```sql +-- Oracle: 암호화 알고리즘 확인 +SELECT * FROM v$parameter WHERE name LIKE '%crypto%'; + +-- MySQL +SHOW VARIABLES LIKE '%ssl%'; +``` +**조치:** +```sql +-- 안전한 암호화 알고리즘(AES-256, SHA-256 등) 사용 설정 +-- DBMS별 암호화 설정은 벤더 문서 참조 +``` + +### D-09: 로그인 실패 시 잠금정책 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES + WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS'; + +-- MySQL +SHOW VARIABLES LIKE 'max_connect_errors'; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE <프로파일명> LIMIT FAILED_LOGIN_ATTEMPTS 5; + +-- MySQL +SET GLOBAL max_connect_errors = 5; +``` + +## 2. 접근 관리 + +### D-10: 원격에서 DB 서버 접속 제한 +**점검:** +```sql +-- Oracle: listener.ora에서 접근 IP 제한 확인 +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL: pg_hba.conf 확인 +``` +**조치:** +```sql +-- MySQL: 원격 접속 제한 +-- 특정 IP에서만 접속 가능하도록 계정 생성 +CREATE USER '<계정명>'@'<허용IP>' IDENTIFIED BY '비밀번호'; +-- 모든 호스트 접근 가능 계정 삭제 +DROP USER '<계정명>'@'%'; +FLUSH PRIVILEGES; +``` +```bash +# Oracle: $ORACLE_HOME/network/admin/sqlnet.ora +# tcp.validnode_checking = YES +# tcp.invited_nodes = (허용IP1, 허용IP2) + +# PostgreSQL: pg_hba.conf에서 접근 IP 제한 +# host all all <허용IP>/32 md5 +``` + +### D-11: 시스템 테이블 접근 제한 +**점검:** +```sql +-- Oracle: DBA 이외 시스템 테이블 접근 권한 확인 +SELECT grantee, privilege, table_name FROM dba_tab_privs + WHERE table_name IN (SELECT table_name FROM dba_tables WHERE owner = 'SYS'); +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.<테이블명> FROM <계정명>; +``` + +### D-12: 리스너 비밀번호 설정 +**점검:** +```bash +# Oracle: listener.ora 파일 확인 +cat $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: 리스너 비밀번호 설정 +lsnrctl +LSNRCTL> set current_listener <리스너명> +LSNRCTL> change_password +# Old password: (빈칸) +# New password: <비밀번호> +LSNRCTL> save_config +``` + +### D-13: 불필요한 ODBC/OLE-DB 데이터 소스 제거 +**점검:** +```powershell +# Windows: ODBC 데이터 소스 확인 +Get-OdbcDsn +``` +**조치:** +```powershell +# Windows: 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType "System" +``` + +### D-14: 주요 파일 접근 권한 설정 +**점검:** +```bash +# Oracle +ls -la $ORACLE_HOME/dbs/*.ora +ls -la $ORACLE_HOME/network/admin/*.ora + +# MySQL +ls -la /etc/my.cnf +ls -la /var/lib/mysql/ + +# PostgreSQL +ls -la /var/lib/pgsql/data/pg_hba.conf +ls -la /var/lib/pgsql/data/postgresql.conf +``` +**조치:** +```bash +# Oracle: 640 이하 권한 설정 +chmod 640 $ORACLE_HOME/dbs/*.ora +chmod 640 $ORACLE_HOME/network/admin/*.ora +chown oracle:dba $ORACLE_HOME/dbs/*.ora + +# MySQL +chmod 640 /etc/my.cnf +chown mysql:mysql /etc/my.cnf + +# PostgreSQL +chmod 600 /var/lib/pgsql/data/pg_hba.conf +chown postgres:postgres /var/lib/pgsql/data/pg_hba.conf +``` + +### D-15: 리스너 로그 및 trace 파일 변경 제한 +**점검:** +```bash +# Oracle: listener.ora에서 ADMIN_RESTRICTIONS 확인 +grep ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: listener.ora에 추가 +# ADMIN_RESTRICTIONS_<리스너명> = ON +``` + +### D-16: Windows 인증 모드 사용 +**점검:** +```sql +-- MSSQL: 인증 모드 확인 +SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); +-- 1: Windows 인증 모드, 0: 혼합 모드 +``` +**조치:** +``` +-- MSSQL: SSMS > 서버 속성 > 보안 > "Windows 인증 모드" 선택 +``` + +## 3. 옵션 관리 + +### D-17: Audit Table 접근 제한 +**점검:** +```sql +-- Oracle: Audit 테이블 접근 권한 확인 +SELECT grantee, privilege FROM dba_tab_privs WHERE table_name LIKE '%AUDIT%'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.AUD$ FROM <계정명>; +``` + +### D-18: DBA 계정 Role이 Public으로 설정되지 않도록 조정 +**점검:** +```sql +-- Oracle: PUBLIC에 부여된 권한 확인 +SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'PUBLIC'; +``` +**조치:** +```sql +-- Oracle: PUBLIC에서 불필요 Role/권한 회수 +REVOKE FROM PUBLIC; +REVOKE EXECUTE ON <패키지명> FROM PUBLIC; +``` + +### D-19: OS_ROLES 등 FALSE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER OS_ROLES; +SHOW PARAMETER REMOTE_OS_AUTHENTICATION; +SHOW PARAMETER REMOTE_OS_ROLES; +``` +**조치:** +```sql +-- Oracle: init.ora 또는 spfile 수정 +ALTER SYSTEM SET OS_ROLES = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_AUTHENTICATION = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE; +-- DB 재시작 필요 +``` + +### D-20: 인가되지 않은 Object Owner 제한 +**점검:** +```sql +-- Oracle: Object Owner 확인 +SELECT owner, object_type, count(*) FROM dba_objects GROUP BY owner, object_type ORDER BY owner; +``` +**조치:** +```sql +-- 불필요한 Object Owner의 객체를 적절한 스키마로 이전 또는 삭제 +``` + +### D-21: 인가되지 않은 GRANT OPTION 사용 제한 +**점검:** +```sql +-- Oracle +SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE admin_option = 'YES'; +SELECT grantee, table_name, privilege, grantable FROM dba_tab_privs WHERE grantable = 'YES'; +``` +**조치:** +```sql +-- Oracle: ADMIN OPTION 제거 후 재부여 +REVOKE <권한> FROM <계정명>; +GRANT <권한> TO <계정명>; +``` + +### D-22: 자원 제한 기능 TRUE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER RESOURCE_LIMIT; +``` +**조치:** +```sql +-- Oracle +ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +``` + +### D-23: xp_cmdshell 사용 제한 +**점검:** +```sql +-- MSSQL +EXEC sp_configure 'xp_cmdshell'; +``` +**조치:** +```sql +-- MSSQL: xp_cmdshell 비활성화 +EXEC sp_configure 'show advanced options', 1; +RECONFIGURE; +EXEC sp_configure 'xp_cmdshell', 0; +RECONFIGURE; +``` + +### D-24: Registry Procedure 권한 제한 +**점검:** +```sql +-- MSSQL: 레지스트리 관련 확장 저장 프로시저 확인 +SELECT name FROM sys.objects WHERE name LIKE 'xp_reg%'; +``` +**조치:** +```sql +-- MSSQL: public에서 실행 권한 제거 +DENY EXECUTE ON xp_regread TO public; +DENY EXECUTE ON xp_regwrite TO public; +DENY EXECUTE ON xp_regdeletekey TO public; +DENY EXECUTE ON xp_regdeletevalue TO public; +DENY EXECUTE ON xp_regenumvalues TO public; +``` + +## 4. 패치 관리 + +### D-25: 주기적 보안 패치 및 벤더 권고 사항 적용 +**점검:** +```sql +-- Oracle: 버전 확인 +SELECT * FROM v$version; + +-- MSSQL: 버전 확인 +SELECT @@VERSION; + +-- MySQL: 버전 확인 +SELECT VERSION(); + +-- PostgreSQL: 버전 확인 +SELECT version(); +``` +**조치:** +``` +-- 공통: 벤더 보안 패치 사이트에서 최신 패치 확인 및 적용 +-- Oracle: https://www.oracle.com/security-alerts/ +-- MSSQL: https://learn.microsoft.com/ko-kr/sql/ +-- MySQL: https://dev.mysql.com/downloads/ +-- PostgreSQL: https://www.postgresql.org/support/security/ +``` + +### D-26: 감사 기록 정책 설정 +**점검:** +```sql +-- Oracle: Audit 설정 확인 +SHOW PARAMETER AUDIT_TRAIL; +SELECT * FROM dba_stmt_audit_opts; +SELECT * FROM dba_priv_audit_opts; + +-- MSSQL: 감사 설정 확인 +SELECT * FROM sys.server_audits; + +-- MySQL: 로그 설정 확인 +SHOW VARIABLES LIKE 'general_log%'; +SHOW VARIABLES LIKE 'log_bin%'; + +-- PostgreSQL +SHOW log_statement; +SHOW log_connections; +SHOW log_disconnections; +``` +**조치:** +```sql +-- Oracle: Audit 활성화 +ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE=SPFILE; +AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS; +AUDIT CREATE SESSION; + +-- MySQL: 일반 로그 활성화 +SET GLOBAL general_log = 'ON'; +SET GLOBAL general_log_file = '/var/log/mysql/general.log'; + +-- PostgreSQL: postgresql.conf +-- log_statement = 'all' +-- log_connections = on +-- log_disconnections = on +-- logging_collector = on +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/cii/network.md b/skills-ko/kesekit-guide-ko/scripts/cii/network.md new file mode 100644 index 0000000..9d0b68d --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/cii/network.md @@ -0,0 +1,892 @@ +# 네트워크 장비 점검 스크립트 (N-01 ~ N-38) + +## 1. 계정 관리 + +### N-01: 비밀번호 설정 +**점검:** +``` +! Cisco IOS +Router> enable +Router# show running-config +! VTY, 콘솔, AUX 포트의 login/password 설정 확인 + +! Juniper Junos +user@host> configure +user@host# show + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - enable 비밀번호 +Router(config)# enable secret <비밀번호> +! VTY 비밀번호 +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! 콘솔 비밀번호 +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! AUX 비밀번호 +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> + +! Radware Alteon +Main# /cfg/sys/access/user/admpw +Main# apply +Main# save + +! Juniper Junos +user@host# set system root-authentication plain-test-passwd + +! Piolink PLOS +(config)# password +``` + +### N-02: 비밀번호 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! security passwords min-length 설정 확인 +``` +**조치:** +``` +! Cisco IOS - 비밀번호 최소 길이 설정 +Router(config)# security passwords min-length <길이> +``` + +### N-03: 암호화된 비밀번호 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! enable secret / username secret / service password-encryption 확인 + +! Juniper Junos +user@host# show +! encrypted-password 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# enable secret <비밀번호> +Router(config)# username <사용자> secret <비밀번호> +Router(config)# service password-encryption + +! Juniper Junos +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> +``` + +### N-04: 계정 잠금 임계값 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show login + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! Cisco IOS +Router(config)# login block-for <잠금시간> attempts <실패횟수> within <허용시간> + +! Juniper Junos +[edit system login retry-options] +user@host# set tries-before-disconnect <실패횟수> +user@host# set lockout-period <잠금시간> +``` + +### N-05: 사용자/명령어별 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show privilege + +! Juniper Junos +! [edit system login] 에서 superuser, read-only 클래스 분리 확인 +``` +**조치:** +``` +! Cisco IOS - 사용자별 권한 수준 지정 +Router(config)# username [ID] privilege [1-15] secret [PASS] +! 명령어별 권한 수준 지정 (중요 명령어 레벨 15 적용) +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging + +! Juniper Junos +[edit system login] +login { + class class-name { + allow-commands "regular-expression"; + deny-commands "regular-expression"; + idle-timeout minutes; + permissions [ permissions ]; + } +} + +! Piolink PLOS +! 슈퍼 유저(root)와 일반 유저로 권한 분리 관리 +``` + +## 2. 접근 관리 + +### N-06: VTY 접근(ACL) 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list 및 access-class 설정 확인 + +! Juniper Junos +user@host# show +! firewall filter + 루프백 인터페이스 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty 0 4 +Router(config-line)# access-class in + +! Radware Alteon +# cfg > sys > access > mgmt > add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply > save + +! Juniper Junos +user@host# set policy-options prefix-list +user@host# edit firewall family inet filter +user@host# edit term +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set from protocol tcp +user@host# set from destination-port ssh +user@host# set then discard +! 기본 허용 종료 +user@host# set term then accept +! 루프백에 적용 +user@host# set interfaces lo0 unit 0 family inet filter input + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-07: Session Timeout 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! exec-timeout 설정 확인 +``` +**조치:** +``` +! Cisco IOS (10분 이하 권고, 예: 5분) +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 + +! Radware Alteon +# cfg > sys > idle <분> > apply > save + +! Juniper Junos +[edit login] +user@host# set class <클래스> idle-timeout <분> + +! Piolink PLOS +(config)# terminal timeout <분> +``` + +### N-08: VTY 접속 시 안전한 프로토콜 사용 +**점검:** +``` +! Cisco IOS +Router# show ip ssh +Router# show version + +! Juniper Junos +user@host# set ssh +``` +**조치:** +``` +! Cisco IOS - SSH 설정 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +Router(config)# ip ssh version 2 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh authentication-retries <횟수> +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh + +! Radware Alteon +# cfg > /sys/sshd ena > /sys/sshd on > apply > save + +! Juniper Junos +root# set system services ssh +root# delete system services telnet +root# commit + +! Piolink PLOS +(config-management-access)# ssh status enable +(config-management-access)# telnet status disable +(config-management-access)# apply +``` + +### N-09: 불필요한 보조 입출력 포트 사용 금지 +**점검:** +``` +! Cisco IOS +Router# show running +! 불필요 포트 Up/Down 확인 +``` +**조치:** +``` +! Cisco IOS - AUX 포트 차단 +Router(config)# line aux 0 +Router(config-line)# no password +Router(config-line)# transport input none +Router(config-line)# no exec +Router(config-line)# exec-timeout 0 1 + +! Juniper Junos +[edit system ports] +root# set auxiliary disable +root# commit +``` + +### N-10: 로그인 시 경고 메시지 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! banner 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# banner motd # <경고 문구> # +Router(config)# banner login # <경고 문구> # +Router(config)# banner exec # <경고 문구> # + +! Radware Alteon +# cfg > sys > banner > apply > save + +! Juniper Junos +[edit system login] +message "경고 문구" +``` + +### N-11: 원격로그 서버 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging trap informational +Router(config)# logging +Router(config)# logging facility local6 +Router(config)# logging source-interface serial 0 + +! Radware Alteon +# cfg > sys > /syslog/host > apply > save + +! Juniper Junos +user@host# edit system syslog +user@host# set system syslog file message any error +user@host# set system syslog host any any +user@host# set archive files 5 sizes 5m world-readable + +! Piolink PLOS +# logging server enable +# logging server +``` + +## 3. 패치 관리 + +### N-12: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +``` +! Cisco IOS +Router# show version + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! 공통 +! 1. 하드웨어/소프트웨어/EOL/패치 현황 문서화 +! 2. 벤더 보안 패치 및 권고사항 입수 +! 3. 취약점 영향도/발생 가능성 분석 후 패치 우선순위 결정 +! 4. 테스트베드(GNS3 등)에서 패치 검증 +! 5. 패치 적용 전 이미지/설정 백업 후 적용 +! 벤더별 패치 사이트: +! Cisco: https://software.cisco.com +! Juniper: https://support.juniper.net/support/downloads +! 공통: https://www.krcert.or.kr +``` + +## 4. 로그 관리 + +### N-13: 로깅 버퍼 크기 설정 +**점검:** +``` +! Cisco IOS +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging buffered 16000 +Router(config)# logging buffered informational + +! Piolink PLOS +(config)# logging buffer +(config)# logging priority +``` + +### N-14: 정책에 따른 로깅 설정 +**점검:** +``` +! Cisco IOS +Router# show logging + +! Juniper Junos +user@host# show log messages +``` +**조치:** +``` +! 공통 - 6가지 로깅 방법 활용 +! 1. 콘솔 로깅: 콘솔 포트에서만 확인 +! 2. Buffered 로깅: RAM에 저장 (버퍼 가득 차면 오래된 로그 대체) +! 3. Terminal 로깅: terminal monitor로 VTY에 전송 +! 4. Syslog: 외부 syslog 서버에 저장 +! 5. SNMP traps: 외부 SNMP 서버에 전송 +! 6. ACL 침입 로깅: ACL 룰에 log/log-input 추가 +``` + +### N-15: NTP 및 시각 동기화 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ntp server 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# ntp server + +! Radware Alteon +# cfg > /sys/ntp > on +# prisrvr +# intrval <동기화주기> +# tzone +9:00 +# apply > save + +! Juniper Junos +[edit system ntp] +user@host# set server +user@host# set boot-server +``` + +### N-16: Timestamp 로그 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service timestamps 확인 +``` +**조치:** +``` +! Cisco IOS - UTC 시간 밀리초 단위 +Router(config)# service timestamps log datetime msec show-timezone +! 로컬 시간(KST) 밀리초 단위 +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone +``` + +## 5. 기능 관리 + +### N-17: SNMP 서비스 확인 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show snmp + +! Juniper Junos +user@host# show snmp + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - SNMP 비활성화 +Router(config)# no snmp-server + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: d + +! Juniper Junos +user@host# no set snmp community public +``` + +### N-18: SNMP Community String 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community 설정 확인 (public/private 사용 여부) +``` +**조치:** +``` +! Cisco IOS +Router(config)# snmp-server community <복잡한String> + +! Radware Alteon +# cfg/sys/ssnmp +# rcomm <복잡한String> +# wcomm <복잡한String> +# apply > save + +! Juniper Junos +user@host# set snmp community <복잡한String> authorization read-only + +! Piolink PLOS +switch(config-snmp)# community <복잡한String> +switch(config-snmp)# status enable +switch(config-snmp)# apply +``` + +### N-19: SNMP ACL 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community + ACL 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + +! Juniper Junos +[edit snmp] +user@host# edit client-list +user@host# set default restrict +user@host# set +user@host# up +user@host# edit community +user@host# set client-list-name + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-20: SNMP Community 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community RO/RW 확인 +``` +**조치:** +``` +! Cisco IOS - RO 권한만 설정 +Router(config)# snmp-server community RO + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: r +>> Main# apply + +! Juniper Junos +[edit snmp] +user@host# delete community +user@host# set community authorization read-only +! SNMPv3 그룹 RW 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <모델> security-level <레벨> write-view + +! Piolink PLOS +switch(config-snmp)# policy read-only +switch(config-snmp)# apply +``` + +### N-21: TFTP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tftp +``` + +### N-22: Spoofing 방지 필터링 적용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list deny 설정 확인 + +! Juniper Junos +! Configure/Apply Firewall Filters 확인 +``` +**조치:** +``` +! Cisco IOS - Anti-Spoofing ACL (Extended ACL 100-199) +Router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +Router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +Router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +Router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any +Router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +Router(config)# access-list permit ip any any +Router(config)# interface serial <인터페이스> +Router(config-if)# ip access-group in + +! Juniper Junos +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +[edit firewall family inet filter ] +user@host# set term then accept +user@host# set interfaces <인터페이스> unit <유닛> family inet filter input +``` + +### N-23: DDoS 공격 방어 설정 또는 DDoS 장비 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show configuration +``` +**조치:** +``` +! 공통 - DDoS 방어 3가지 방법 +! 1. ACL: 스푸핑 방지 필터링 사전 적용, 공격 유형별 IP/프로토콜/포트 임시 차단 +! 2. Rate Limiting: UDP, ICMP, TCP SYN 패킷 대역폭 제한 +! 3. TCP Intercept: SYN Flooding 방어 +! - Intercept 모드: 라우터가 SYN-ACK 대신 응답 +! - Watch 모드: SYN 전달 후 30초 미완료 시 RST 전송 +``` + +### N-24: 사용하지 않는 인터페이스 비활성화 +**점검:** +``` +! Cisco IOS +Router# show interface +! Administratively down 확인 + +! Juniper Junos +user@host# show interface terse +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# shutdown + +! Radware Alteon +>> Main# /cfg/port <포트>/dis +>> Main# apply + +! Juniper Junos +[edit interfaces] +user@host# set <인터페이스> disable + +! Piolink PLOS +switch(config)# port <포트> status disable +switch(config)# apply +``` + +### N-25: TCP Keepalive 서비스 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service tcp-keepalives 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# service tcp-keepalives-in +Router(config)# service tcp-keepalives-out +``` + +### N-26: Finger 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip finger + +! Juniper Junos +[edit system services] +user@host# delete finger +user@host# commit +``` + +### N-27: 웹 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip http server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip http server +Router(config)# no ip http secure-server + +! Radware Alteon +>> Main# /cfg/sys/access/https/https dis +>> Main# apply + +! Juniper Junos +user@host# delete system services web-management + +! Piolink PLOS +(config-management-access)# http status disable +(config-management-access)# https status disable +``` + +### N-28: TCP/UDP Small 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +``` + +### N-29: Bootp 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip bootp server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip bootp server +! DHCP 유지하고 BOOTP만 차단 시 +Router(config)# ip dhcp bootp ignore + +! Radware Alteon +>> Main# /cfg/sys/bootp dis +>> Main# apply + +! Juniper Junos +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스> server <주소> +``` + +### N-30: CDP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show cdp +``` +**조치:** +``` +! Cisco IOS - 전체 비활성화 +Router(config)# no cdp run +! 특정 인터페이스 비활성화 +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +``` + +### N-31: Directed-broadcast 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast + +! Radware Alteon +# cfg/l3/frwd > dirbr disable > apply > save + +! Passport +# config vlan ip directed-broadcast > disable +``` + +### N-32: Source Routing 차단 +**점검:** +``` +! Cisco IOS / Juniper Junos +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip source-route + +! Juniper Junos +user@host# set chassis no-source-route +``` + +### N-33: Proxy ARP 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp + +! Juniper Junos +[edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp +``` + +### N-34: ICMP unreachable, redirect 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! 각 인터페이스 no ip unreachables / no ip redirects 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects + +! Juniper Junos - 전체 장비 +[edit system] +user@host# set no-redirects +! 특정 인터페이스 +[edit interfaces] +user@host# set <인터페이스> unit <유닛> family <패밀리> no-redirects +``` + +### N-35: identd 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip identd +``` + +### N-36: Domain Lookup 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip domain lookup +``` + +### N-37: PAD 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service pad +``` + +### N-38: mask-reply 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show ip interface +! "ICMP mask replies are never sent" 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/cii/pc.md b/skills-ko/kesekit-guide-ko/scripts/cii/pc.md new file mode 100644 index 0000000..167c9ca --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/cii/pc.md @@ -0,0 +1,348 @@ +# PC 점검 스크립트 (PC-01 ~ PC-18) + +## 1. 계정 관리 + +### PC-01: 비밀번호의 주기적 변경 +**점검:** +```powershell +# 최대 암호 사용 기간 확인 +net accounts | findstr "최대" +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol.cfg +findstr "MaximumPasswordAge" C:\secpol.cfg +findstr "MinimumPasswordAge" C:\secpol.cfg +findstr "PasswordHistorySize" C:\secpol.cfg +``` +**조치:** +```powershell +# 최대 암호 사용 기간 90일 설정 +net accounts /maxpwage:90 +# 최소 암호 사용 기간 1일 +net accounts /minpwage:1 + +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최대 암호 사용 기간": 90일 +# "최소 암호 사용 기간": 1일 +# "최근 암호 기억": 24개 + +# 계정별 비밀번호 기간 설정 +# LUSRMGR.MSC > 사용자 > 계정 속성 > "암호 사용 기간 제한 없음" 해제 +``` + +### PC-02: 비밀번호 관리정책 설정 +**점검:** +```powershell +# 암호 복잡성 및 최소 길이 확인 +net accounts +secedit /export /cfg C:\secpol.cfg +findstr "MinimumPasswordLength" C:\secpol.cfg +findstr "PasswordComplexity" C:\secpol.cfg +``` +**조치:** +```powershell +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최소 암호 길이": 8문자 이상 +# "암호는 복잡성을 만족해야 함": 사용함 + +# 복잡성 기준: 영문 대/소문자, 숫자, 특수문자 중 +# 2종류 조합 시 최소 10자리 이상 +# 3종류 조합 시 최소 8자리 이상 +``` + +### PC-03: 복구 콘솔에서 자동 로그온 금지 +**점검:** +```powershell +# 복구 콘솔 자동 로그온 설정 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "복구 콘솔: 자동 관리 로그온 허용" -> "사용 안 함" + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel /t REG_DWORD /d 0 /f +``` + +## 2. 서비스 관리 + +### PC-04: 공유 폴더 제거 +**점검:** +```powershell +# 공유 폴더 목록 확인 +net share +# 기본 공유 폴더 확인 (C$, D$, Admin$, IPC$) +Get-SmbShare +# AutoShareWks 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks +``` +**조치:** +```powershell +# 기본 공유 폴더 삭제 +net share C$ /delete +net share D$ /delete +net share Admin$ /delete + +# 재부팅 시 자동 공유 방지 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 일반 공유 폴더 삭제 +net share <공유폴더명> /delete + +# 공유 폴더 접근에 "Everyone" 제거 (GUI) +# 컴퓨터 관리 > 공유 폴더 > 공유 > 속성 > 공유 사용 권한 > Everyone 제거 + +# 암호로 보호된 공유 설정 +# 설정 > 네트워크 > 고급 공유 설정 > 모든 네트워크 > "암호로 보호된 공유" 켬 +``` + +### PC-05: 불필요한 서비스 제거 +**점검:** +```powershell +# 실행 중인 서비스 목록 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType +# 특정 불필요 서비스 확인 +Get-Service -Name "RemoteRegistry","Messenger","Clipbook","Alerter" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# 불필요 서비스 중지 및 시작 유형 변경 +# GUI: services.msc > 해당 서비스 > 속성 > 시작 유형: 사용 안 함 + +# PowerShell로 서비스 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 일반적으로 불필요한 서비스 예시: +# Alerter, Clipbook, Computer Browser, DHCP Client (고정IP 사용 시) +# Distributed Link Tracking Client, Error Reporting Service +# Messenger, NetMeeting Remote Desktop Sharing +# Print Spooler (프린터 미사용 시), Remote Registry +# Simple TCP/IP Services, Universal Plug and Play Device Host +``` + +### PC-06: 비인가 상용 메신저 사용 금지 +**점검:** +```powershell +# 설치된 메신저 프로그램 확인 +Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -match "카카오톡|Skype|NateOn|Telegram"} | Select-Object Name +# 실행 중인 메신저 프로세스 확인 +Get-Process | Where-Object {$_.ProcessName -match "kakaotalk|skype|nateon"} | Select-Object ProcessName +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows Messenger +# "Windows Messenger를 실행 허용 안 함": 사용 + +# 상용 메신저 제거 +# 설정 > 앱 > 앱 및 기능 > 해당 메신저 제거 +``` + +### PC-07: 파일 시스템이 NTFS 포맷으로 설정 +**점검:** +```powershell +# 디스크 볼륨 파일 시스템 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size +# 또는 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT32 -> NTFS 변환 (비파괴 변환) +convert C: /fs:ntfs + +# 변환 후 폴더/파일에 적합한 ACL 적용 +# 속성 > 보안 > 편집 > 그룹/계정별 권한 설정 +``` + +### PC-08: 멀티 부팅 방지 +**점검:** +```powershell +# 설치된 OS 확인 +bcdedit /enum +# 또는 +msconfig +# 부팅 탭에서 2개 이상 OS 확인 +``` +**조치:** +```powershell +# msconfig > 부팅 탭 > 사용하지 않는 OS 선택 후 삭제 +# 또는 +bcdedit /delete {identifier} +``` + +### PC-09: 브라우저 종료 시 임시 인터넷 파일 삭제 +**점검:** +```powershell +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 +# > Internet Explorer > 인터넷 제어판 > 고급 페이지 +# "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기": 사용 + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit /t REG_DWORD /d 1 /f +``` + +## 3. 패치 관리 + +### PC-10: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```powershell +# 설치된 HOT FIX 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +# Windows Update 설정 확인 +Get-WindowsUpdateLog +# 자동 업데이트 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" +``` +**조치:** +```powershell +# 설정 > Windows Update > 업데이트 확인 +# PowerShell로 업데이트 확인 및 설치 +Install-Module PSWindowsUpdate -Force +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot +``` + +### PC-11: 지원이 종료되지 않은 Windows OS Build 적용 +**점검:** +```powershell +# 현재 OS 빌드 버전 확인 +[System.Environment]::OSVersion.Version +Get-ComputerInfo | Select-Object WindowsVersion, OsBuildNumber, WindowsProductName +winver +``` +**조치:** +```powershell +# Windows Update를 통한 최신 빌드 적용 +# 설정 > Windows Update > 업데이트 확인 +# 수동 업데이트: https://www.microsoft.com/ko-kr/software-download/ +``` + +## 4. 보안 관리 + +### PC-12: Windows 자동 로그인 점검 +**점검:** +```powershell +# 자동 로그인 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword +``` +**조치:** +```powershell +# 자동 로그인 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +# DefaultPassword 값 삭제 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +``` + +### PC-13: 바이러스 백신 프로그램 설치 및 주기적 업데이트 +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntivirusSignatureLastUpdated, AntispywareEnabled +# 백신 설치 여부 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState +``` +**조치:** +```powershell +# Windows Defender 업데이트 +Update-MpSignature +# 설정 > Windows 보안 > 바이러스 및 위협 방지 > 보호 업데이트 > 업데이트 확인 +``` + +### PC-14: 백신 실시간 감시 기능 활성화 +**점검:** +```powershell +# 실시간 보호 상태 확인 +Get-MpPreference | Select-Object DisableRealtimeMonitoring +Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled +``` +**조치:** +```powershell +# 실시간 보호 활성화 +Set-MpPreference -DisableRealtimeMonitoring $false +# GUI: Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 켬 +``` + +### PC-15: OS에서 제공하는 침입차단 기능 활성화 +**점검:** +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled +netsh advfirewall show allprofiles state +``` +**조치:** +```powershell +# 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True +# 또는 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정/해제 > "사용" 설정 +``` + +### PC-16: 화면보호기 대기 시간 설정 및 재시작 시 암호 보호 +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +``` +**조치:** +```powershell +# 화면보호기 활성화 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +# 대기 시간 설정 (600초 = 10분 이하) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +# 재시작 시 암호 보호 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f + +# GUI: 설정 > 개인설정 > 잠금화면 > 화면보호기 +# 대기: 10분 이하 / "다시 시작 시 로그온 화면 표시" 체크 +``` + +### PC-17: 이동식 미디어 자동 실행 방지 +**점검:** +```powershell +# 자동 실행 정책 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun +# GPO 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoAutorun +``` +**조치:** +```powershell +# 모든 드라이브 자동 실행 끄기 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 자동 실행 정책 +# "자동 실행 끄기": 사용 - 모든 드라이브 + +# 제어판: 하드웨어 및 소리 > 자동 실행 +# "모든 미디어 및 장치에 자동 실행 사용" 체크 해제 +``` + +### PC-18: 원격 지원 금지 +**점검:** +```powershell +# 원격 지원 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +``` +**조치:** +```powershell +# 원격 지원 비활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 0 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 원격 지원 +# "원격 지원 제공 구성": 사용 안 함 + +# 원격 데스크톱 비활성화 (필요 시) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/cii/unix.md b/skills-ko/kesekit-guide-ko/scripts/cii/unix.md new file mode 100644 index 0000000..6969221 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/cii/unix.md @@ -0,0 +1,1531 @@ +# Unix 서버 점검 및 조치 스크립트 + +## 1. 계정 관리 + +### U-01: root 계정 원격 접속 제한 +**판단기준:** 원격터미널 서비스 사용 시 root 직접 접속을 차단한 경우 양호 +**점검:** +```bash +# SSH root 접속 설정 확인 +grep -i "PermitRootLogin" /etc/ssh/sshd_config + +# Telnet root 접속 설정 확인 (SOLARIS) +grep "CONSOLE" /etc/default/login + +# Telnet pts 설정 확인 (LINUX) +cat /etc/securetty | grep pts + +# Telnet rlogin 설정 확인 (AIX) +grep "rlogin" /etc/security/user +``` +**조치:** +```bash +# SSH - 모든 OS 공통 +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config +systemctl restart sshd + +# Telnet - SOLARIS +# /etc/default/login 파일에 설정 +echo "CONSOLE=/dev/console" >> /etc/default/login + +# Telnet - LINUX (/etc/securetty에서 pts 제거) +sed -i '/^pts\//d' /etc/securetty +# /etc/pam.d/login에 모듈 추가 +# auth required /lib/security/pam_securetty.so + +# Telnet - AIX (/etc/security/user) +chsec -f /etc/security/user -s root -a rlogin=false + +# HP-UX SSH +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /opt/ssh/etc/sshd_config +``` + +### U-02: 비밀번호 관리정책 설정 +**판단기준:** 영문+숫자+특수문자 8자리 이상, 최소사용 1일, 최대사용 90일, 이력 4회 이상 양호 +**점검:** +```bash +# LINUX - 비밀번호 정책 확인 +grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" /etc/login.defs +cat /etc/security/pwquality.conf 2>/dev/null +grep pam_pwquality /etc/pam.d/system-auth 2>/dev/null +grep pam_pwquality /etc/pam.d/common-password 2>/dev/null + +# SOLARIS +cat /etc/default/passwd | grep -E "HISTORY|PASSLENGTH|MINDIGIT|MINUPPER|MINLOWER|MINSPECIAL" + +# AIX +grep -E "minage|maxage|minalpha|minother|minlen|histsize" /etc/security/user +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/login.defs +sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs +sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs + +# LINUX (Redhat) - /etc/security/pwquality.conf +cat > /etc/security/pwquality.conf <<'CONF' +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +CONF + +# SOLARIS - /etc/default/passwd +cat >> /etc/default/passwd <<'CONF' +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO +CONF + +# AIX - /etc/security/user +chsec -f /etc/security/user -s default -a minage=1 +chsec -f /etc/security/user -s default -a maxage=12 +chsec -f /etc/security/user -s default -a minalpha=2 +chsec -f /etc/security/user -s default -a minother=2 +chsec -f /etc/security/user -s default -a minlen=8 +chsec -f /etc/security/user -s default -a histsize=4 + +# HP-UX - /etc/default/security +cat >> /etc/default/security <<'CONF' +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +CONF +``` + +### U-03: 계정 잠금 임계값 설정 +**판단기준:** 계정 잠금 임계값이 10회 이하로 설정된 경우 양호 +**점검:** +```bash +# LINUX - PAM 계정잠금 설정 확인 +grep pam_tally /etc/pam.d/system-auth 2>/dev/null +grep pam_faillock /etc/pam.d/system-auth 2>/dev/null +grep -E "deny|unlock_time" /etc/security/faillock.conf 2>/dev/null +authselect current 2>/dev/null + +# SOLARIS +grep "RETRIES" /etc/default/login +grep "LOCK_AFTER_RETRIES" /etc/security/policy.conf 2>/dev/null + +# AIX +grep "loginretries" /etc/security/user + +# HP-UX +grep "AUTH_MAXTRIES" /etc/default/security 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat - authselect 방식, RHEL 8+) +authselect enable-feature with-faillock +# /etc/security/faillock.conf 수정 +cat >> /etc/security/faillock.conf <<'CONF' +silent +deny = 10 +unlock_time = 120 +CONF + +# LINUX (Redhat - pam_faillock 방식) +# /etc/pam.d/system-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +# /etc/pam.d/password-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# LINUX (Debian - pam_faillock 방식) +# /etc/pam.d/common-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# SOLARIS (5.9+) +# /etc/security/policy.conf +echo "LOCK_AFTER_RETRIES=YES" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/user -s default -a loginretries=10 + +# HP-UX (11.v3+) +echo "AUTH_MAXTRIES=10" >> /etc/default/security +``` + +### U-04: 비밀번호 파일 보호 +**판단기준:** 쉐도우 비밀번호를 사용하거나 비밀번호를 암호화하여 저장하는 경우 양호 +**점검:** +```bash +# /etc/passwd 두 번째 필드가 'x'인지 확인 (x이면 shadow 사용 중) +awk -F: '$2 != "x" {print $1" : 비밀번호 평문 저장 의심"}' /etc/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX - 쉐도우 비밀번호 적용 +pwconv + +# HP-UX - Trusted Mode 전환 +/etc/tsconvert +``` + +### U-05: root 이외의 UID가 '0' 금지 +**판단기준:** root 계정과 동일한 UID(0)를 갖는 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '$3==0 && $1!="root" {print $1" has UID 0"}' /etc/passwd +``` +**조치:** +```bash +# UID 변경 +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-06: 사용자 계정 su 기능 제한 +**판단기준:** su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 양호 +**점검:** +```bash +# wheel 그룹 확인 +grep wheel /etc/group +# su 명령어 권한 확인 +ls -l /usr/bin/su +# PAM 설정 확인 (LINUX) +grep pam_wheel /etc/pam.d/su +``` +**조치:** +```bash +# wheel 그룹 생성 (없는 경우) +groupadd wheel +# su 명령 그룹 변경 및 권한 설정 +chgrp wheel /usr/bin/su +chmod 4750 /usr/bin/su +# 허용 계정 등록 +usermod -G wheel + +# LINUX PAM 설정 - /etc/pam.d/su +# auth required pam_wheel.so use_uid +``` + +### U-07: 불필요한 계정 제거 +**판단기준:** 불필요한 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +# 시스템 계정 확인 +cat /etc/passwd +# 마지막 로그인 기록 확인 +last | head -30 +# 로그인 불가 계정 확인 +awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd +``` +**조치:** +```bash +userdel <사용자_이름> +# AIX의 경우 +# rmuser <사용자_이름> +``` + +### U-08: 관리자 그룹에 최소한의 계정 포함 +**판단기준:** 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 양호 +**점검:** +```bash +grep "^root:" /etc/group +``` +**조치:** +```bash +gpasswd -d <사용자_이름> root +# AIX의 경우 +# chgrpmem -m - <사용자_이름> root +``` + +### U-09: 계정이 존재하지 않는 GID 금지 +**판단기준:** 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 양호 +**점검:** +```bash +# /etc/group과 /etc/passwd 비교 +cat /etc/group +cat /etc/gshadow 2>/dev/null +``` +**조치:** +```bash +groupdel <그룹_이름> +``` + +### U-10: 동일한 UID 금지 +**판단기준:** 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d +# 중복 UID가 있다면 해당 계정 확인 +awk -F: '{uid[$3]=uid[$3]" "$1} END{for(u in uid) if(split(uid[u],a," ")>2) print "UID "u":"uid[u]}' /etc/passwd +``` +**조치:** +```bash +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-11: 사용자 shell 점검 +**판단기준:** 로그인이 필요하지 않은 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +cat /etc/passwd | grep -E "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^games|^gopher" | grep -v admin +``` +**조치:** +```bash +# 불필요한 계정에 nologin 쉘 부여 +usermod -s /bin/false <계정명> +usermod -s /sbin/nologin <계정명> +``` + +### U-12: 세션 종료 시간 설정 +**판단기준:** Session Timeout이 600초(10분) 이하로 설정된 경우 양호 +**점검:** +```bash +echo $TMOUT +grep -i tmout /etc/profile /etc/bashrc 2>/dev/null +grep autologout /etc/csh.cshrc /etc/csh.login 2>/dev/null +``` +**조치:** +```bash +# sh, ksh, bash - /etc/profile에 추가 +echo "TMOUT=600" >> /etc/profile +echo "export TMOUT" >> /etc/profile + +# csh - /etc/csh.cshrc 또는 /etc/csh.login에 추가 +echo "set autologout=10" >> /etc/csh.cshrc +``` + +### U-13: 안전한 비밀번호 암호화 알고리즘 사용 +**판단기준:** SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 양호 ($5=SHA-256, $6=SHA-512) +**점검:** +```bash +# 암호화 알고리즘 확인 ($1=MD5, $5=SHA-256, $6=SHA-512) +awk -F: '$2 ~ /^\$/ {split($2,a,"$"); print $1" -> $"a[2]}' /etc/shadow 2>/dev/null + +# LINUX +grep ENCRYPT_METHOD /etc/login.defs +``` +**조치:** +```bash +# LINUX (Redhat) +sed -i 's/^ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' /etc/login.defs +# /etc/pam.d/system-auth +# password sufficient pam_unix.so sha512 + +# SOLARIS +# /etc/security/policy.conf +echo "CRYPT_DEFAULT=6" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/login.cfg -s usw -a pwd_algorithm=ssha512 + +# HP-UX +echo "CRYPT_DEFAULT=6" >> /etc/default/security +``` + +--- + +## 2. 파일 및 디렉터리 관리 + +### U-14: root 홈, 패스 디렉터리 권한 및 패스 설정 +**판단기준:** PATH 환경변수에 "."이 맨 앞이나 중간에 포함되지 않은 경우 양호 +**점검:** +```bash +echo $PATH | tr ':' '\n' | grep -n "^\.$" +echo $PATH | grep -E "(^\.:|:\.:|:\.$ )" +``` +**조치:** +```bash +# 환경설정 파일에서 PATH 변숫값에서 "." 제거 또는 맨 마지막으로 이동 +# ~/.profile, ~/.bashrc, /etc/profile 등에서 수정 +# 예: PATH=$PATH:$HOME/bin (상대경로 "." 삭제) +``` + +### U-15: 파일 및 디렉터리 소유자 설정 +**판단기준:** 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 양호 +**점검:** +```bash +find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +``` +**조치:** +```bash +# 불필요한 파일 제거 +rm <파일_이름> +rm -r <디렉터리_이름> +# 사용 중인 파일의 소유자 변경 +chown <사용자_이름> <파일명> +chgrp <그룹_이름> <파일명> +``` + +### U-16: /etc/passwd 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/passwd +``` +**조치:** +```bash +chown root /etc/passwd +chmod 644 /etc/passwd +``` + +### U-17: 시스템 시작 스크립트 권한 설정 +**판단기준:** 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +# LINUX (init) +ls -al /etc/rc.d/*/* 2>/dev/null +# LINUX (systemd) +ls -al /etc/systemd/system/* 2>/dev/null +# SOLARIS +ls -al /etc/rc*.d/* 2>/dev/null +``` +**조치:** +```bash +chown root <파일_이름> +chmod o-w <파일_이름> +``` + +### U-18: /etc/shadow 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 400 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/shadow +# AIX +ls -l /etc/security/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX +chown root /etc/shadow +chmod 400 /etc/shadow + +# AIX +chown root /etc/security/passwd +chmod 400 /etc/security/passwd +``` + +### U-19: /etc/hosts 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts +``` +**조치:** +```bash +chown root /etc/hosts +chmod 644 /etc/hosts +``` + +### U-20: /etc/(x)inetd.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/inetd.conf 2>/dev/null +ls -l /etc/xinetd.conf 2>/dev/null +ls -l /etc/xinetd.d/* 2>/dev/null +ls -l /etc/systemd/system.conf 2>/dev/null +``` +**조치:** +```bash +# inetd +chown root /etc/inetd.conf +chmod 600 /etc/inetd.conf + +# xinetd +chown root /etc/xinetd.conf +chmod 600 /etc/xinetd.conf +chown -R root /etc/xinetd.d/ +chmod -R 600 /etc/xinetd.d/ + +# systemd +chown root /etc/systemd/system.conf +chmod 600 /etc/systemd/system.conf +``` + +### U-21: /etc/(r)syslog.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/syslog.conf /etc/rsyslog.conf 2>/dev/null +``` +**조치:** +```bash +chown root /etc/rsyslog.conf +chmod 640 /etc/rsyslog.conf +``` + +### U-22: /etc/services 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/services +``` +**조치:** +```bash +chown root /etc/services +chmod 644 /etc/services +``` + +### U-23: SUID, SGID, Sticky bit 설정 파일 점검 +**판단기준:** 주요 실행 파일의 권한에 불필요한 SUID/SGID가 부여되어 있지 않은 경우 양호 +**점검:** +```bash +find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +``` +**조치:** +```bash +# 불필요한 특수 권한 제거 +chmod -s <파일_이름> + +# 특정 그룹에서만 사용하도록 제한 +chgrp <그룹_이름> +chmod 4750 +``` + +### U-24: 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +**판단기준:** 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정이고, 소유자 외 쓰기 권한이 없는 경우 양호 +**점검:** +```bash +# 각 사용자 홈 디렉터리의 환경변수 파일 확인 +ls -la ~/.profile ~/.kshrc ~/.cshrc ~/.bashrc ~/.bash_profile ~/.login ~/.exrc ~/.netrc 2>/dev/null +``` +**조치:** +```bash +chown <환경변수_파일> +chmod o-w <환경변수_파일> +``` + +### U-25: world writable 파일 점검 +**판단기준:** world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 양호 +**점검:** +```bash +find / -type f -perm -2 -exec ls -l {} \; 2>/dev/null +``` +**조치:** +```bash +# 일반 사용자 쓰기 권한 제거 +chmod o-w <파일_이름> +# 불필요한 파일 제거 +rm <파일_이름> +``` + +### U-26: /dev에 존재하지 않는 device 파일 점검 +**판단기준:** /dev 디렉터리에 존재하지 않는 device 파일을 제거한 경우 양호 +**점검:** +```bash +find /dev -type f -exec ls -l {} \; +``` +**조치:** +```bash +rm <파일_이름> +``` + +### U-27: $HOME/.rhosts, hosts.equiv 사용 금지 +**판단기준:** rlogin/rsh/rexec 미사용 또는 사용 시 소유자 root, 권한 600 이하, "+" 설정 없는 경우 양호 +**점검:** +```bash +find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null +cat /etc/hosts.equiv 2>/dev/null +ls -la /etc/hosts.equiv 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.equiv +chmod 600 /etc/hosts.equiv +chown root $HOME/.rhosts +chmod 600 $HOME/.rhosts +# "+" 옵션 제거 후 허용 호스트 및 계정만 등록 +``` + +### U-28: 접속 IP 및 포트 제한 +**판단기준:** 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 양호 +**점검:** +```bash +# TCP Wrapper +cat /etc/hosts.allow 2>/dev/null +cat /etc/hosts.deny 2>/dev/null + +# iptables +iptables -L 2>/dev/null + +# firewalld +firewall-cmd --list-all 2>/dev/null + +# UFW +ufw status numbered 2>/dev/null +``` +**조치:** +```bash +# TCP Wrapper +echo "ALL:ALL" > /etc/hosts.deny +echo "sshd : <허용_IP>" >> /etc/hosts.allow + +# iptables +iptables -A INPUT -p tcp -s --dport <포트> -j ACCEPT +iptables-save + +# firewalld +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="" port protocol="tcp" port="<포트>" accept' +firewall-cmd --reload + +# UFW +ufw allow from to any port <포트> +ufw reload +``` + +### U-29: hosts.lpd 파일 소유자 및 권한 설정 +**판단기준:** /etc/hosts.lpd 파일이 존재하지 않거나, 소유자 root이고 권한 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts.lpd 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.lpd +chmod 600 /etc/hosts.lpd +``` + +### U-30: UMASK 설정 관리 +**판단기준:** UMASK 값이 022 이상으로 설정된 경우 양호 +**점검:** +```bash +umask +grep -i umask /etc/profile /etc/bashrc /etc/login.defs 2>/dev/null +# SOLARIS +grep UMASK /etc/default/login 2>/dev/null +``` +**조치:** +```bash +# /etc/profile에 추가 +echo "umask 022" >> /etc/profile +echo "export umask" >> /etc/profile + +# LINUX - /etc/login.defs +sed -i 's/^UMASK.*/UMASK 022/' /etc/login.defs + +# SOLARIS - /etc/default/login +echo "UMASK=022" >> /etc/default/login + +# FTP umask 설정 +# vsFTP: vsftpd.conf -> local_umask=022 +# ProFTP: proftpd.conf -> Umask 022 +``` + +### U-31: 홈디렉토리 소유자 및 권한 설정 +**판단기준:** 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +cat /etc/passwd | awk -F: '{print $1" "$6}' | while read user dir; do + ls -ald "$dir" 2>/dev/null +done +``` +**조치:** +```bash +chown <사용자_이름> <홈_디렉터리> +chmod o-w <홈_디렉터리> +``` + +### U-32: 홈 디렉토리로 지정한 디렉토리의 존재 관리 +**판단기준:** 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $1" "$6}' /etc/passwd | while read user dir; do + [ ! -d "$dir" ] && echo "$user : $dir 존재하지 않음" +done +``` +**조치:** +```bash +# 불필요한 계정 삭제 +userdel <사용자_이름> +# 사용중인 계정의 홈 디렉터리 생성 +mkdir -p /home/<사용자_이름> +chown <사용자_이름> /home/<사용자_이름> +``` + +### U-33: 숨겨진 파일 및 디렉토리 검색 및 제거 +**판단기준:** 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 양호 +**점검:** +```bash +find / -type f -name ".*" 2>/dev/null +find / -type d -name ".*" 2>/dev/null +``` +**조치:** +```bash +rm <파일_이름> +rm -r <디렉터리_이름> +``` + +--- + +## 3. 서비스 관리 + +### U-34: Finger 서비스 비활성화 +**판단기준:** Finger 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep finger +# SOLARIS (5.10+) +inetadm | grep finger 2>/dev/null +# inetd +grep finger /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/finger 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop finger.socket 2>/dev/null +systemctl disable finger.socket 2>/dev/null + +# xinetd +# /etc/xinetd.d/finger -> disable = yes +systemctl restart xinetd + +# inetd - finger 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/finger:default +``` + +### U-35: 공유 서비스에 대한 익명 접근 제한 설정 +**판단기준:** 공유 서비스에 대해 익명 접근을 제한한 경우 양호 +**점검:** +```bash +# FTP 익명 계정 확인 +grep -E "^ftp|^anonymous" /etc/passwd + +# vsFTP +grep anonymous_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# ProFTP +sed -n '//,/<\/Anonymous>/p' /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null + +# NFS 익명 접근 +grep -E "anonuid|anongid" /etc/exports 2>/dev/null + +# Samba +grep "guest ok" /etc/samba/smb.conf 2>/dev/null +``` +**조치:** +```bash +# FTP 익명 계정 제거 +userdel ftp +userdel anonymous + +# vsFTP - /etc/vsftpd/vsftpd.conf +# anonymous_enable=NO +systemctl restart vsftpd + +# NFS - /etc/exports에서 anon 옵션 제거 +exportfs -ra + +# Samba - /etc/samba/smb.conf +# guest ok = no +smbcontrol all reload-config +``` + +### U-36: r 계열 서비스 비활성화 +**판단기준:** 불필요한 r 계열 서비스(rlogin, rsh, rexec)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "rlogin|rsh|rexec" +# inetd +grep -E "rlogin|rsh|rexec|shell|login|exec" /etc/inetd.conf 2>/dev/null +# SOLARIS (5.10+) +inetadm | egrep "shell|rlogin|rexec" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop rlogin.socket rsh.socket rexec.socket 2>/dev/null +systemctl disable rlogin.socket rsh.socket rexec.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/login:rlogin +inetadm -d svc:/network/shell:default +inetadm -d svc:/network/rexec:default +``` + +### U-37: crontab 설정파일 권한 설정 미흡 +**판단기준:** crontab/at 명령어 권한 750 이하, cron/at 관련 파일 권한 640 이하인 경우 양호 +**점검:** +```bash +ls -l /usr/bin/crontab +ls -l /usr/bin/at +ls -l /var/spool/cron/ 2>/dev/null +ls -l /var/spool/cron/crontabs/ 2>/dev/null +ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny 2>/dev/null +``` +**조치:** +```bash +# crontab/at 명령어 권한 설정 +chown root /usr/bin/crontab +chmod 750 /usr/bin/crontab +chown root /usr/bin/at +chmod 750 /usr/bin/at + +# cron 관련 파일 권한 설정 +chmod 640 /etc/cron.allow /etc/cron.deny 2>/dev/null +chmod 640 /etc/at.allow /etc/at.deny 2>/dev/null +``` + +### U-38: DoS 공격에 취약한 서비스 비활성화 +**판단기준:** echo, discard, daytime, chargen 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "echo|discard|daytime|chargen" +# inetd +grep -E "echo|discard|daytime|chargen" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep enable | egrep "echo|discard|daytime|chargen" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null +systemctl disable echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬> +``` + +### U-39: 불필요한 NFS 서비스 비활성화 +**판단기준:** 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep nfs +# AIX +ps -ef | grep nfsd +lssrc -a | grep nfs 2>/dev/null +# SOLARIS +inetadm | egrep "nfs|statd|lockd" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop nfs-server +systemctl disable nfs-server + +# SOLARIS +inetadm -d + +# AIX +stopsrc -g nfs + +# HP-UX +# /etc/rc.config.d/nfsconf -> NFS_SERVER=0 +``` + +### U-40: NFS 접근 통제 +**판단기준:** 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX +ls -l /etc/exports +cat /etc/exports +showmount -e 2>/dev/null + +# SOLARIS +ls -l /etc/dfs/dfstab 2>/dev/null +cat /etc/dfs/dfstab 2>/dev/null +``` +**조치:** +```bash +# LINUX +chown root /etc/exports +chmod 644 /etc/exports +# /etc/exports 예시: /home/share host1(ro,root_squash) +exportfs -ra + +# SOLARIS +chown root /etc/dfs/dfstab +chmod 644 /etc/dfs/dfstab +# /etc/dfs/dfstab 예시: share -F nfs -o rw=client1:client2,ro=client1:client2 /export/home +shareall +``` + +### U-41: 불필요한 automountd 제거 +**판단기준:** automountd 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "automount|autofs" +# SOLARIS +svcs -a | grep autofs 2>/dev/null +# AIX +ps -ef | grep automountd +``` +**조치:** +```bash +# LINUX +systemctl stop autofs +systemctl disable autofs + +# SOLARIS +svcadm disable svc:/system/filesystem/autofs:default + +# HP-UX +# /etc/rc.config.d/nfsconf -> AUTOFS=0 +``` + +### U-42: 불필요한 RPC 서비스 비활성화 +**판단기준:** 불필요한 RPC 서비스(rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd 등)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep rpc +# inetd +grep -E "rpc\." /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep rpc | grep enabled | egrep "ttdbserver|rex|rstart|rusers|spray|wall|rquota" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop <서비스명> +systemctl disable <서비스명> + +# inetd - 해당 RPC 서비스 항목 주석 처리 +# SOLARIS +svcadm disable <서비스_데몬> +``` + +### U-43: NIS, NIS+ 점검 +**판단기준:** NIS 서비스가 비활성화되어 있거나, 불가피 시 NIS+ 서비스를 사용하는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated" +# SOLARIS +svcs -a | grep nis 2>/dev/null +# AIX +lssrc -a | grep -E "ypserv|ypbind" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop ypserv ypbind 2>/dev/null +systemctl disable ypserv ypbind 2>/dev/null + +# SOLARIS +svcadm disable + +# HP-UX - /etc/rc.config.d/namesrvs +# NIS_MASTER_SERVER=0 +# NIS_SLAVE_SERVER=0 +# NIS_CLIENT_SERVER=0 +``` + +### U-44: tftp, talk 서비스 비활성화 +**판단기준:** tftp, talk, ntalk 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "tftp|talk|ntalk" +# inetd +grep -E "tftp|talk|ntalk" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | egrep "tftp|talk" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop tftp.socket talk.socket ntalk.socket 2>/dev/null +systemctl disable tftp.socket talk.socket ntalk.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬명> +``` + +### U-45: 메일 서비스 버전 점검 +**판단기준:** 메일 서비스 버전이 최신 버전인 경우 양호 +**점검:** +```bash +# Sendmail +sendmail -d0 -bt < /dev/null 2>&1 | grep Version +# Postfix +postconf mail_version 2>/dev/null +# Exim +exim -bV 2>/dev/null +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop sendmail postfix 2>/dev/null +systemctl disable sendmail postfix 2>/dev/null + +# 사용 시 최신 버전으로 패치 적용 +# Sendmail: http://www.sendmail.org/ +# Postfix: https://www.postfix.org/packages.html +# Exim: https://www.exim.org/ +``` + +### U-46: 일반 사용자의 메일 서비스 실행 방지 +**판단기준:** 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf 2>/dev/null +# Postfix +ls -l /usr/sbin/postsuper 2>/dev/null +# Exim +ls -l /usr/sbin/exiqgrep 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun + +# Postfix +chmod o-x /usr/sbin/postsuper + +# Exim +chmod o-x /usr/sbin/exiqgrep +``` + +### U-47: 스팸 메일 릴레이 제한 +**판단기준:** 릴레이 제한이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep "promiscuous_relay" /etc/mail/sendmail.mc 2>/dev/null +cat /etc/mail/access 2>/dev/null +# Postfix +grep -E "smtpd_recipient_restrictions|mynetworks" /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "relay_from_hosts|hosts =" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.mc에서 promiscuous_relay 제거 +# FEATURE(`promiscuous_relay')dnl 삭제 +m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +# /etc/mail/access에 허용/차단 설정 +makemap hash /etc/mail/access.db < /etc/mail/access +systemctl restart sendmail + +# Postfix - /etc/postfix/main.cf +# mynetworks = <허용할_네트워크> +postfix reload + +# Exim - /etc/exim/exim.conf +# hostlist relay_from_hosts = <허용할_네트워크> +systemctl restart exim +``` + +### U-48: expn, vrfy 명령어 제한 +**판단기준:** noexpn, novrfy 옵션이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf +# Postfix +grep disable_vrfy_command /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "acl_smtp_vrfy|acl_smtp_expn" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +# 또는 PrivacyOptions = restrictqrun, goaway + +# Postfix - /etc/postfix/main.cf +# disable_vrfy_command = yes +postfix reload + +# Exim - acl_smtp_vrfy, acl_smtp_expn 설정 제거/주석 처리 +``` + +### U-49: DNS 보안 버전 패치 +**판단기준:** 주기적으로 패치를 관리하는 경우 양호 +**점검:** +```bash +named -v 2>/dev/null +# LINUX +systemctl list-units --type=service | grep named +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop named +systemctl disable named + +# 사용 시 최신 버전 패치 +# ISC BIND: https://www.isc.org/downloads/ +# 취약점 정보: https://kb.isc.org/v1/docs/en/aa-00913 +``` + +### U-50: DNS ZoneTransfer 설정 +**판단기준:** Zone Transfer를 허가된 사용자에게만 허용한 경우 양호 +**점검:** +```bash +grep allow-transfer /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +grep xfrnets /etc/named.boot /etc/bind/named.boot 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf (또는 /etc/bind/named.conf.options) 수정 +# allow-transfer { <허용할_IP>; }; +systemctl restart named +``` + +### U-51: DNS 서비스의 취약한 동적 업데이트 설정 금지 +**판단기준:** 동적 업데이트 기능이 비활성화되었거나, 적절한 접근통제를 수행하는 경우 양호 +**점검:** +```bash +grep allow-update /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf 수정 +# 불필요 시: allow-update { none; }; +# 필요 시: allow-update { <허용할_IP>; }; +systemctl restart named +``` + +### U-52: Telnet 서비스 비활성화 +**판단기준:** Telnet 프로토콜을 비활성화하고 있는 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=socket | grep telnet +# inetd +grep telnet /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/telnet 2>/dev/null +# SOLARIS +svcs -a | grep telnet 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop telnet.socket +systemctl disable telnet.socket +systemctl start sshd + +# xinetd - /etc/xinetd.d/telnet -> disable = yes +systemctl restart xinetd + +# SOLARIS +svcadm disable svc:/network/telnet:default +svcadm enable ssh +``` + +### U-53: FTP 서비스 정보 노출 제한 +**판단기준:** FTP 접속 배너에 노출되는 정보가 없는 경우 양호 +**점검:** +```bash +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +# ProFTP +grep ServerIdent /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only +systemctl restart vsftpd + +# ProFTP - /etc/proftpd/proftpd.conf +# ServerIdent off +# 또는 ServerIdent on "Authorized access only" +systemctl restart proftpd +``` + +### U-54: 암호화되지 않는 FTP 서비스 비활성화 +**판단기준:** 암호화되지 않은 FTP 서비스가 비활성화된 경우 양호 (SFTP 사용 권고) +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "vsftpd|proftpd" +# inetd +grep "^ftp" /etc/inetd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop vsftpd proftpd 2>/dev/null +systemctl disable vsftpd proftpd 2>/dev/null + +# inetd - ftp 항목 주석 처리 +``` + +### U-55: FTP 계정 shell 제한 +**판단기준:** FTP 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +grep "^ftp" /etc/passwd +``` +**조치:** +```bash +usermod -s /bin/false ftp +# 또는 +usermod -s /sbin/nologin ftp +``` + +### U-56: FTP 서비스 접근 제어 설정 +**판단기준:** 특정 IP주소/호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 양호 +**점검:** +```bash +# ftpusers 파일 +cat /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null +ls -l /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null + +# vsFTP +grep userlist_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +cat /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep UseFtpUsers /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일 권한 설정 +chown root /etc/ftpusers +chmod 640 /etc/ftpusers + +# vsFTP - user_list 방식 +# /etc/vsftpd/vsftpd.conf +# userlist_enable=YES +# userlist_deny=YES (목록 사용자 차단) 또는 NO (목록 사용자만 허용) + +# ProFTP - proftpd.conf 접근제한 +# +# Order Deny,Allow +# AllowUser <사용자> 또는 Allow from +# DenyUser <사용자> 또는 Deny from +# +``` + +### U-57: Ftpusers 파일 설정 (root 계정 접근 제한) +**판단기준:** root 계정 접속을 차단한 경우 양호 +**점검:** +```bash +# ftpusers 파일에 root가 등록되어 있는지 확인 +grep "^root" /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep RootLogin /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일에 root 추가 (주석 해제) +# 해당 파일에서 #root -> root 로 변경 + +# ProFTP - /etc/proftpd/proftpd.conf +# RootLogin off +systemctl restart proftpd +``` + +### U-58: 불필요한 SNMP 서비스 구동 점검 +**판단기준:** SNMP 서비스를 사용하지 않는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep snmpd +# SOLARIS +svcs -a | grep snmp 2>/dev/null +# AIX +lssrc -a | grep snmp 2>/dev/null +# 프로세스 확인 +ps -ef | grep snmp +``` +**조치:** +```bash +# LINUX +systemctl stop snmpd +systemctl disable snmpd + +# SOLARIS (5.10+) +svcadm disable svc:/application/management/snmpd:default + +# AIX +stopsrc -s snmpd +# /etc/rc.tcpip에서 snmpd 주석 처리 +``` + +### U-59: 안전한 SNMP 버전 사용 +**판단기준:** SNMP 서비스를 v3 이상으로 사용하는 경우 양호 +**점검:** +```bash +# SNMPv3 사용 여부 확인 +snmpwalk -v3 -l authPriv -u <사용자> -a SHA -A <인증암호> -x AES -X <암호화암호> <서버IP> 2>/dev/null +grep -E "rouser|rwuser|createUser" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# SNMPv3 사용자 생성 +net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser + +# /etc/snmp/snmpd.conf에 추가 +# createUser myuser SHA myauthpass AES myprivpass +# rouser myuser + +systemctl restart snmpd +``` + +### U-60: SNMP Community String 복잡성 설정 +**판단기준:** Community String이 "public", "private"이 아니고 영숫자 10자리 이상 또는 영숫자+특수문자 8자리 이상인 경우 양호 +**점검:** +```bash +grep -i community /etc/snmp/snmpd.conf 2>/dev/null +# AIX +grep -i community /etc/snmpdv3.conf 2>/dev/null +# HP-UX +grep -i community /etc/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser default <복잡한_String값> +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <복잡한_String값> default +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY <새_String> <새_String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-61: SNMP Access Control 설정 +**판단기준:** SNMP 서비스에 접근 제어 설정이 되어 있는 경우 양호 +**점검:** +```bash +# LINUX (Redhat) +grep "com2sec" /etc/snmp/snmpd.conf 2>/dev/null +# LINUX (Debian) +grep -E "rocommunity|rwcommunity" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser <허용_네트워크> + +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <허용_네트워크> + +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY noAuthNoPriv <허용_IP> <넷마스크> - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-62: 로그인 시 경고 메시지 설정 +**판단기준:** 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 양호 +**점검:** +```bash +# 서버 로그온 배너 +cat /etc/motd 2>/dev/null +cat /etc/issue 2>/dev/null +cat /etc/issue.net 2>/dev/null + +# SSH 배너 +grep "^Banner" /etc/ssh/sshd_config + +# Sendmail +grep SmtpGreetingMessage /etc/mail/sendmail.cf 2>/dev/null + +# Postfix +grep smtpd_banner /etc/postfix/main.cf 2>/dev/null + +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# DNS +grep "version" /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# 서버 경고 메시지 +echo "Authorized access only. All activity is monitored." > /etc/motd +echo "Authorized access only." > /etc/issue +echo "Authorized access only." > /etc/issue.net + +# SSH - /etc/ssh/sshd_config +# Banner /etc/issue.net +systemctl restart sshd + +# Sendmail - /etc/mail/sendmail.cf +# SmtpGreetingMessage=Authorized access only + +# Postfix - /etc/postfix/main.cf +# smtpd_banner = Authorized access only + +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only + +# DNS - /etc/named.conf +# version "Not disclosed"; +``` + +### U-63: sudo 명령어 접근 관리 +**판단기준:** /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 양호 +**점검:** +```bash +ls -l /etc/sudoers +``` +**조치:** +```bash +chown root /etc/sudoers +chmod 640 /etc/sudoers +``` + +--- + +## 4. 패치 관리 + +### U-64: 주기적 보안 패치 및 벤더 권고사항 적용 +**판단기준:** 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있는 경우 양호 +**점검:** +```bash +# OS 및 커널 버전 확인 +uname -a +cat /etc/os-release 2>/dev/null +hostnamectl 2>/dev/null + +# 패치 이력 확인 (LINUX) +rpm -qa --last | head -20 2>/dev/null +apt list --upgradable 2>/dev/null + +# SOLARIS +pkg list -af entire@latest 2>/dev/null + +# AIX +oslevel -s +instfix -i | grep ML 2>/dev/null +instfix -i | grep SP 2>/dev/null + +# HP-UX +swlist -l product 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat/CentOS) +yum update -y +# LINUX (Debian/Ubuntu) +apt update && apt upgrade -y + +# SOLARIS +pkg update --accept + +# AIX - smitty installp를 통한 패치 설치 + +# HP-UX +# swinstall -s /tmp/patch.depot +``` + +--- + +## 5. 로그 관리 + +### U-65: NTP 및 시각 동기화 설정 +**판단기준:** NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 양호 +**점검:** +```bash +# NTP +ntpq -pn 2>/dev/null +cat /etc/ntp.conf 2>/dev/null + +# Chrony (RHEL 8+) +chronyc sources 2>/dev/null +cat /etc/chrony.conf 2>/dev/null +``` +**조치:** +```bash +# NTP - /etc/ntp.conf +# server +systemctl restart ntp 2>/dev/null || systemctl restart ntpd 2>/dev/null + +# Chrony - /etc/chrony.conf +# server +systemctl restart chronyd +``` + +### U-66: 정책에 따른 시스템 로깅 설정 +**판단기준:** 로그 기록 정책이 보안 정책에 따라 수립되어 있으며, 로그를 남기고 있는 경우 양호 +**점검:** +```bash +# LINUX +cat /etc/rsyslog.conf 2>/dev/null +ls /etc/rsyslog.d/ 2>/dev/null + +# SOLARIS +cat /etc/syslog.conf 2>/dev/null + +# AIX +cat /etc/syslog.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX - /etc/rsyslog.conf 권장 설정 +cat >> /etc/rsyslog.conf <<'CONF' +*.info;mail.none;authpriv.none;cron.none /var/log/messages +authpriv.* /var/log/secure +mail.* /var/log/maillog +cron.* /var/log/cron +*.emerg * +CONF +systemctl restart rsyslog + +# SOLARIS - /etc/syslog.conf 권장 설정 +# mail.debug /var/log/mail.log +# *.info /var/log/syslog.log +# *.alert /dev/console +# *.emerg * + +# AIX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/error.log +# mail.info /var/adm/mail.log +# auth.info /var/adm/auth.log +# refresh -s syslogd + +# HP-UX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/syslog/error.log +# mail.info /var/adm/syslog/mail.log +# auth.info /var/adm/syslog/auth.log +``` + +### U-67: 로그 디렉터리 소유자 및 권한 설정 +**판단기준:** 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX, SOLARIS +ls -la /var/log/ +# AIX +ls -la /var/adm/ 2>/dev/null +# HP-UX +ls -la /var/adm/syslog/ 2>/dev/null +``` +**조치:** +```bash +# LINUX, SOLARIS +chown root /var/log/* +chmod 644 /var/log/* + +# AIX +chown root /var/adm/* +chmod 644 /var/adm/* + +# HP-UX +chown root /var/adm/syslog/* +chmod 644 /var/adm/syslog/* +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/cii/web-service.md b/skills-ko/kesekit-guide-ko/scripts/cii/web-service.md new file mode 100644 index 0000000..d70ca7c --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/cii/web-service.md @@ -0,0 +1,725 @@ +# 웹 서비스 점검 스크립트 (WEB-01 ~ WEB-26) + +## 1. 계정 관리 + +### WEB-01: Default 관리자 계정명 변경 +**점검:** +```bash +# Tomcat - 기본 계정명(tomcat, admin) 사용 여부 확인 +grep -i 'username=' /conf/server.xml +# JEUS - Security Domains > Account & Policies > Users에서 기본 계정 확인 +``` +**조치:** +```bash +# Tomcat - 기본 계정명을 유추 불가능한 이름으로 변경 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > ADD +# administrator 대신 유추 불가능한 계정명 입력 후 Administrators 그룹 체크 +./stopServer -host <도메인명>:<포트> +./startDomainAdminServer -host <도메인명>:<포트> +``` + +### WEB-02: 취약한 비밀번호 사용 제한 +**점검:** +```bash +# Tomcat +grep -i 'password=' /conf/server.xml +# 비밀번호 복잡도 기준: 2종류 이상 조합 최소 10자리 또는 3종류 이상 조합 최소 8자리 +# (영문대/소문자, 숫자, 특수문자) +``` +**조치:** +```bash +# Tomcat - 복잡도 만족하는 비밀번호 설정 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > 비밀번호 변경 +# SHA-256 이상 암호화 방식 비밀번호 설정 +``` + +### WEB-03: 비밀번호 파일 권한 관리 +**점검:** +```bash +# Tomcat +ls -al /conf/tomcat-users.xml +# IIS +# %systemroot%\system32\config\SAM 파일 속성 > 보안 확인 +# JEUS +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` +**조치:** +```bash +# Tomcat - 비밀번호 파일 권한 600 이하 설정 +chmod 600 /conf/tomcat-users.xml + +# IIS - SAM 파일 속성 > 보안 > 편집 > Administrators, SYSTEM만 허용 + +# JEUS +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` + +--- + +## 2. 서비스 관리 + +### WEB-04: 디렉터리 리스팅 방지 설정 +**점검:** +```bash +# Apache +grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" +# Nginx +grep -i "autoindex" /etc/nginx/nginx.conf +# Tomcat +grep -i "listings" /conf/web.xml +# JEUS +grep -i "allow-indexing" /WEB-INF/jeus-web-dd.xml +# WebtoB +grep -i "Options" /config/http.m | grep -i "Indexes" +``` +**조치:** +```bash +# Apache - httpd.conf 내 모든 디렉터리에서 Indexes 옵션 제거 +vi /conf/httpd.conf +# +# Options -Indexes (Indexes 삭제 또는 -Indexes 설정) +# +systemctl restart apache2 + +# Tomcat - web.xml 내 listings=false 설정 +vi /conf/web.xml +# +# listings +# false +# + +# Nginx - autoindex off 설정 +vi /conf/nginx.conf +# server { autoindex off; } +systemctl restart nginx + +# IIS - IIS 관리자 > 해당 웹사이트 > 디렉터리 검색 > "사용 안 함" 설정 + +# JEUS +vi /WEB-INF/jeus-web-dd.xml +# false + +# WebtoB +vi /config/http.m +# *NODE +# Options = "-Indexes", +wscfl -I http.m && wsdown && wsboot +``` + +### WEB-05: 지정하지 않은 CGI/ISAPI 실행 제한 +**점검:** +```bash +# Apache +grep -i "LoadModule.*cgi" /conf/httpd.conf +grep -i "ExecCGI" /conf/httpd.conf +# Nginx +grep -i "fastcgi_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - CGI 모듈 비활성화 및 ExecCGI 옵션 제거 +vi /conf/httpd.conf +# #LoadModule cgi_module modules/mod_cgi.so +# #LoadModule cgid_module modules/mod_cgid.so +# +# Options -ExecCGI +# +systemctl restart apache2 + +# Tomcat - web.xml 내 CGI 매핑 비활성화(주석 처리) +# + +# Nginx - fastcgi 설정 주석 처리 +# location ~ \.cgi$ { +# #fastcgi_pass :<포트>; +# #include fastcgi_params; +# } + +# IIS - ISAPI 및 CGI 제한 > 사용하지 않는 CGI/ISAPI 모듈 해제 + +# WebtoB - http.m 내 *SVRGROUP, *SERVER, *URI에서 CGI 설정 주석 처리 +``` + +### WEB-06: 상위 디렉터리 접근 제한 설정 +**점검:** +```bash +# Apache +grep -i "AllowOverride" /conf/httpd.conf +# Tomcat +grep -i "allowLinking" /conf/server.xml +# Nginx +grep -i "auth_basic" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - AllowOverride AuthConfig 설정 + .htaccess 인증 파일 생성 +vi /conf/httpd.conf +# +# AllowOverride AuthConfig +# +htpasswd /.htpasswd [사용자명] +systemctl restart apache2 + +# Tomcat - allowLinking 옵션 제거 +vi /conf/server.xml +# (allowLinking="true" 제거) + +# Nginx - 기본 인증으로 디렉터리 접근 제한 +# location /<접근제한 디렉터리>/ { +# auth_basic "Restricted Content"; +# auth_basic_user_file /etc/nginx/.htpasswd; +# } + +# IIS 7.0+ - web.config 내 enableParentPaths="false" 설정 +# + +# WebtoB - UpperDirRestrict = N 설정 +``` + +### WEB-07: 웹 서비스 경로 내 불필요한 파일 제거 +**점검/조치:** +```bash +# Apache +rm -rf /htdocs/manual +rm -rf /manual + +# Tomcat +rm -rf /webapps/docs/<불필요 파일> +# BUILDING.txt, RELEASE-NOTES.txt 등 매뉴얼 파일 포함 + +# Nginx +rm -rf /html/index.html + +# IIS - 샘플 디렉터리 제거 +# c:\inetpub\iissamples +# c:\winnt\help\iishelp +# c:\program files\common files\system\msadc\sample + +# JEUS +rm -rf /docs/manuals/default/web-manager/<불필요 파일> +rm -rf /samples/<불필요 파일> + +# WebtoB +rm -rf /docs/manuals/<불필요 파일> +rm -rf /samples/<불필요 파일> +``` + +### WEB-08: 파일 업로드 및 다운로드 용량 제한 +**점검:** +```bash +# Apache +grep -i "LimitRequestBody" /conf/httpd.conf +# Tomcat +grep -i "maxPostSize" /conf/server.xml +# Nginx +grep -i "client_max_body_size" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - LimitRequestBody 지시자 설정 (5MB = 5000000) +# +# LimitRequestBody 5000000 +# + +# Tomcat - server.xml 내 maxPostSize 설정 + web.xml 내 multipart-config 설정 +# +# +# 2097152 +# 4194304 +# + +# Nginx - client_max_body_size 설정 +# client_max_body_size 5M; +systemctl restart nginx + +# IIS - web.config 내 maxAllowedContentLength 설정 (기본값 30MB) +# applicationHost.config 내 bufferingLimit(4MB) 및 maxRequestEntityAllowed(0.2MB) 설정 + +# JEUS - web.xml 내 max-file-size 설정 +# 5242880 + +# WebtoB - LimitRequestBody 설정 +# LimitRequestBody = 2048000 +``` + +### WEB-09: 웹 서비스 프로세스 권한 제한 +**점검:** +```bash +# 프로세스 실행 계정 확인 +ps -ef | grep httpd | grep -v root +ps -ef | grep nginx +ps -ef | grep tomcat +ps -ef | grep jeus +``` +**조치:** +```bash +# Apache - www-data 계정으로 실행 +vi /envvars +# export APACHE_RUN_USER=www-data +# export APACHE_RUN_GROUP=www-data +chown -R www-data:www-data /etc/apache2/ /var/www/ /var/log/apache2/ +usermod -s /sbin/nologin www-data +systemctl restart apache2 + +# Tomcat - tomcat 전용 계정으로 실행 +vi /etc/systemd/system/tomcat.service +# [Service] +# User=tomcat +# Group=tomcat +chown -R tomcat:tomcat / +usermod -s /sbin/nologin tomcat +systemctl restart tomcat + +# Nginx - nginx 전용 계정으로 실행 +vi /conf/nginx.conf +# user nginx nginx; +adduser --system --no-create-home --shell /bin/false nginx +groupadd nginx && usermod -aG nginx nginx +systemctl restart nginx + +# IIS - 응용프로그램 풀 ID를 ApplicationPoolIdentity로 설정 + +# JEUS - jeus 전용 계정 생성 후 소유권 변경 +useradd -m jeus +chown -R jeus:jeus / +``` + +### WEB-10: 불필요한 프록시 설정 제한 +**점검:** +```bash +# Apache +grep -i "ProxyPass\|ProxyRequests" /conf/httpd.conf +# Tomcat +grep -i "proxyName\|proxyPort" /conf/server.xml +# Nginx +grep -i "proxy_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - 불필요한 Proxy 설정 제거, ProxyRequests Off 유지 +# +# ProxyRequests Off +# + +# Tomcat - Connector 요소에서 불필요한 proxyName, proxyPort 제거 +# Nginx - 불필요한 proxy_pass 설정 제거 +# IIS - 루트 디렉터리에서 불필요한 Proxy 설정 제거 +# JEUS - web.xml 내 불필요한 ReverseProxy 설정 제거 +# WebtoB - http.m 내 REVERSE_PROXY 설정 제거 +``` + +### WEB-11: 웹 서비스 경로 설정 +**조치:** +```bash +# Apache - DocumentRoot를 별도 경로로 변경 +# DocumentRoot [별도의 경로] + +# Tomcat - docBase를 별도 경로로 변경 +# + +# Nginx - root를 별도 경로로 변경 +# root [별도의 경로]; + +# IIS - 사이트 편집 > 실제 경로를 별도 경로로 변경 +# JEUS - Docroot = "[별도의 경로]" +# WebtoB - DOCROOT="[별도의 경로]" +``` + +### WEB-12: 웹 서비스 링크 사용 금지 +**조치:** +```bash +# Apache - FollowSymLinks 옵션 제거 +vi /conf/httpd.conf +# +# Options -FollowSymLinks +# + +# Tomcat - allowLinking 옵션 제거 (기본값: false) +# Nginx - disable_symlinks on 설정 +# location / { disable_symlinks on; } + +# IIS - 홈 디렉터리 내 바로가기 파일 제거 +# JEUS - jeus-web-dd.xml 내 alias 요소 제거 +# WebtoB - http.m 내 ALIAS 절 불필요 설정 제거 +``` + +### WEB-13: 웹 서비스 설정 파일 노출 제한 +**조치:** +```bash +# Tomcat - 불필요한 DB 연결 리소스 설정 제거 후 접근 권한 설정 +chmod 600 /conf/server.xml + +# IIS - 처리기 매핑에서 *.asa/*.asax 항목 제거 +# 요청 필터링에서 "파일 이름 확장명 거부"에 등록 + +# JEUS - domain.xml 내 불필요한 DB 연결 리소스 제거 +chmod 600 /conf/domain.xml +``` + +### WEB-14: 웹 서비스 경로 내 파일의 접근 통제 +**조치:** +```bash +# Apache +chown -R www-data:www-data /conf/apache2.conf +chmod -R 750 /conf/apache2.conf + +# Tomcat +chown -R tomcat:tomcat /conf/web.xml +chmod -R 750 /conf/web.xml + +# Nginx +chown -R nginx:nginx /conf/nginx.conf +chmod -R 750 /conf/nginx.conf + +# IIS - web.config > 속성 > 보안 > 불필요 권한 제거 + +# JEUS +chown -R jeus:jeus /config/security/SYSTEM_DOMAIN/accounts.xml +chmod -R 750 /config/security/SYSTEM_DOMAIN/accounts.xml + +# WebtoB +chown -R webtob:webtob /config/http.m +chmod -R 750 /config/http.m +``` + +### WEB-15: 불필요한 스크립트 매핑 제거 +**점검:** +```bash +# Tomcat - 불필요한 servlet-mapping 확인 +grep -A2 "servlet-mapping" /conf/web.xml +# IIS - 처리기 매핑에서 취약한 확장자 확인 +# (.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +``` +**조치:** +```bash +# Tomcat - 불필요한 servlet-mapping 제거 +# IIS - 처리기 매핑에서 미사용 확장자 매핑 제거 +# JEUS - web.xml 내 불필요한 제거 +``` + +### WEB-16: 웹 서비스 헤더 정보 노출 제한 +**점검:** +```bash +# Apache +grep -i "ServerTokens\|ServerSignature" /conf/httpd.conf +# Nginx +grep -i "server_tokens" /conf/nginx.conf +# WebtoB +grep -i "ServerTokens" /config/http.m +``` +**조치:** +```bash +# Apache - ServerTokens Prod, ServerSignature Off 설정 +vi /conf/httpd.conf +# ServerTokens Prod +# ServerSignature Off + +# Tomcat - server.xml 내 server 값을 임의 정보로 변경 +# +# + ErrorReportValve에 showServerInfo="false" 추가 +# + +# Nginx +# server_tokens off; + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS 7 이전 - JEUSMain.xml 내 command-option 추가 +# -Djeus.servlet.response.header.serverInfo=false +# JEUS 7 - domain.xml 내 response-header 설정 + +# WebtoB +# ServerTokens ProductOnly +# ServerSignature off +``` + +### WEB-17: 웹 서비스 가상 디렉터리 삭제 +**점검/조치:** +```bash +# Apache - 불필요한 Alias 지시자 확인 후 제거 +grep -i "Alias" /conf/httpd.conf + +# Tomcat - Context path 속성값 확인 후 불필요 제거 +grep -i "Context path" /conf/server.xml + +# Nginx - 불필요한 alias 지시자 제거 +grep -i "alias" /conf/nginx.conf + +# WebtoB - NODE절의 불필요한 Alias 설정 삭제 +grep -i "ALIAS" /config/http.m +``` + +### WEB-18: WebDAV 비활성화 +**점검:** +```bash +# Apache +grep -i "Dav On" /conf/httpd.conf +grep -i "LoadModule.*dav" /conf/httpd.conf +# Nginx +grep -i "dav_methods" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - WebDAV 비활성화 +vi /conf/httpd.conf +# +# Dav Off +# +systemctl restart apache2 + +# Nginx - dav_methods 설정 주석 처리 또는 제거 +systemctl restart nginx + +# IIS - ISAPI 및 CGI 제한 > WebDAV 항목 > 확장 경로 실행 허용 체크 해제 + +# WebtoB - VHOST 절에서 PUT, DELETE, MKCOL, COPY, MOVE 메소드 제거 +``` + +--- + +## 3. 보안 설정 + +### WEB-19: SSI(Server Side Includes) 사용 제한 +**점검:** +```bash +# Apache +grep -i "Includes" /conf/httpd.conf +# Tomcat +grep -i "SSIServlet\|SSIFilter" /conf/web.xml +# Nginx +grep -i "ssi on" /conf/nginx.conf +# WebtoB +grep -i "SSI" /config/http.m +``` +**조치:** +```bash +# Apache - Options Includes 제거 +# Options (Includes 삭제) + +# Tomcat - SSI 서블릿/필터 설정 주석 처리 또는 삭제 +# Nginx - ssi off; 설정 +# IIS - 처리기 매핑에서 .shtml, .shtm, .stm 확장자 매핑 제거 +# WebtoB - *SVRGROUP, *SERVER에서 SSI 관련 설정 삭제 +``` + +### WEB-20: SSL/TLS 활성화 +**점검:** +```bash +# Apache +apache2ctl -M | grep ssl +# Nginx +grep -i "ssl_protocols" /conf/nginx.conf +# WebtoB +grep -i "SSLFLAG\|SSLNAME" /config/http.m +``` +**조치:** +```bash +# Apache - SSL 모듈 활성화 및 인증서 설정 +vi /sites-available/default-ssl.conf +# +# SSLEngine on +# SSLCertificateFile /path/to/cert.crt +# SSLCertificateKeyFile /path/to/privkey.key +# +a2ensite default-ssl +systemctl restart apache2 + +# Nginx - SSL 인증서 설정 +# server { +# listen 443 ssl; +# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; +# ssl_protocols TLSv1.2 TLSv1.3; +# ssl_prefer_server_ciphers on; +# } +systemctl restart nginx + +# IIS - SSL 인증서 바인딩 설정 (IIS 관리자 > 사이트 바인딩 > https 추가) + +# WebtoB - http.m 내 SSLFLAG = Y, SSLNAME 설정 +# *SSL 절에 인증서 경로 설정 +# Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3" +``` + +### WEB-21: HTTP 리디렉션 +**조치:** +```bash +# Apache - HTTP → HTTPS 리디렉션 설정 +# +# RewriteEngine On +# RewriteCond %{HTTPS} off +# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# + +# Nginx +# server { +# listen 80; +# return 301 https://$host$request_uri; +# } + +# IIS - 사이트 바인딩 종류를 HTTPS로 설정 + +# WebtoB - URLRewrite = Y 설정 +# RewriteCond %{HTTPS} off +# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +``` + +### WEB-22: 에러 페이지 관리 +**조치:** +```bash +# Apache - 에러 코드별 일원화된 에러 페이지 설정 +vi /sites-available/000-default.conf +# ErrorDocument 400 /error.html +# ErrorDocument 401 /error.html +# ErrorDocument 403 /error.html +# ErrorDocument 404 /error.html +# ErrorDocument 500 /error.html +systemctl restart apache2 + +# Tomcat - web.xml 내 에러 페이지 설정 +# +# 404 +# /error/404.html +# + +# Nginx +# error_page 404 /404.html; +# error_page 500 502 503 504 /50x.html; +# location = /404.html { root html; internal; } + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS - web.xml 내 에러 메시지 설정 +# WebtoB - *ERRORDOCUMENT 절에 에러 페이지 설정 +# 503 status = 503, url = "/503.html" +``` + +### WEB-23: LDAP 알고리즘 적절하게 구성 +**점검:** +```bash +# Tomcat - 비밀번호 다이제스트 알고리즘 확인 +grep 'digest=' /conf/server.xml +``` +**조치:** +```bash +# Tomcat - SHA-256 이상 알고리즘 설정 +vi /conf/server.xml +# digest="SHA-256" +systemctl restart tomcat +``` + +--- + +## 4. 패치 및 로그 관리 + +### WEB-24: 별도의 업로드 경로 사용 및 권한 설정 +**조치:** +```bash +# Apache - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +# apache2.conf 내 업로드 디렉터리 접근 제한 +# +# Require all denied +# + +# Tomcat - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ + +# Nginx - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ + +# IIS - 웹 서비스 외부에 업로드 디렉터리 생성, IIS 구동 계정에 쓰기 권한 부여 + +# JEUS - 업로드 디렉터리 권한 설정 +chmod 750 +chown jeus:jeus + +# WebtoB - 업로드 디렉터리 권한 설정 +chmod 750 +chown tmax:tmax +``` + +### WEB-25: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```bash +# Apache +/bin/httpd -v + +# Tomcat +cd /lib && java -cp catalina.jar org.apache.catalina.util.ServerInfo + +# Nginx +/sbin/nginx -v + +# IIS +reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v VersionString + +# JEUS +jeusadmin -version + +# WebtoB +wscfl -version +``` +**참고 사이트:** +- Apache: http://httpd.apache.org/download.cgi +- Tomcat: https://tomcat.apache.org/ +- Nginx: https://nginx.org/en/download.html +- IIS: https://www.iis.net/downloads/microsoft +- JEUS/WebtoB: https://technet.tmaxsoft.com/ + +### WEB-26: 로그 디렉터리 및 파일 권한 설정 +**점검:** +```bash +# Apache +ls -al / +# Tomcat +ls -al /logs/ +# Nginx +ls -al /var/log/nginx/ +# JEUS +ls -al /domains/jeus_domain/servers/sample/logs/ +# WebtoB +ls -al /log/ +``` +**조치:** +```bash +# Apache +chmod o-rwx /* + +# Tomcat +chmod o-rwx /logs/* + +# Nginx +chmod o-rwx /var/log/nginx/* + +# IIS - C:\Windows\System32\config 속성 > 보안 > Everyone 권한 제거 +# C:\Windows\System32\LogFiles에서도 동일 조치 + +# JEUS - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /domains/jeus_domain/servers/sample/logs +chmod 640 /domains/jeus_domain/servers/sample/logs/* + +# WebtoB - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /log/ +chmod 640 /log/* +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/cii/webapp.md b/skills-ko/kesekit-guide-ko/scripts/cii/webapp.md new file mode 100644 index 0000000..83e1041 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/cii/webapp.md @@ -0,0 +1,880 @@ +# Web Application 점검 스크립트 + +## 1. SSTI (Server Side Template Injection) +**취약 패턴:** +```python +# Python (Jinja2) - 사용자 입력을 직접 템플릿에 삽입 +template = param # 사용자 입력이 직접 템플릿으로 사용됨 +return render_template_string(template) +``` +**안전한 구현:** +```python +# Python (Jinja2) - 사용자 입력을 템플릿 변수로 전달 +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +``` + +--- + +## 2. SQL Injection (SI) + +### 취약 패턴 +```java +// Java - 문자열 연결 방식 쿼리 (취약) +String sql = "SELECT * FROM users WHERE username = '" + userInput + "'"; +Statement stmt = connection.createStatement(); +ResultSet rs = stmt.executeQuery(sql); +``` + +### 안전한 구현 - PreparedStatement (Java) +```java +// Java - PreparedStatement 사용 +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +ResultSet resultSet = preparedStatement.executeQuery(); +``` + +### 안전한 구현 - ORM (JPA/Hibernate) +```java +// Java - JPQL 파라미터 바인딩 +public class ItemService { + @PersistenceContext + private EntityManager em; + public List findItemsByUserInput(String userInput) { + String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; + Query query = em.createQuery(jpql, Item.class); + query.setParameter("userInput", userInput); + return query.getResultList(); + } +} +``` + +### 안전한 구현 - MyBatis 파라미터 바인딩 +```xml + + + INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) + VALUES (#{num}, #{name}, #{age}, #{grade}) + + + DELETE FROM STUDENTS WHERE NUM = #{num} + +``` + +### 안전한 구현 - SQL 키워드 필터링 (Java) +```java +public static String sanitize(String input) { + if (input == null) return null; + String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; + String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; + Pattern regex = Pattern.compile(pattern + "|--"); + Matcher matcher = regex.matcher(input); + return matcher.replaceAll(" "); +} +``` + +### 안전한 구현 - PreparedStatement (PHP) +```php +// PHP - PDO PreparedStatement +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +``` + +### 안전한 구현 - 예외 처리 +```java +// Java - 적절한 예외 처리 (에러 메시지 노출 방지) +try { + // 데이터베이스 작업 +} catch (SQLException e) { + e.printStackTrace(); // 로그에만 기록 + System.out.println("An error occurred. Please try again later."); // 사용자에게 일반 메시지 +} +``` +```php +// PHP - PDO 예외 처리 +try { + // 데이터베이스 작업 +} catch (PDOException $e) { + error_log($e->getMessage()); + echo 'SQL Exception'; // 상세 에러 노출 금지 +} +``` + +### 특수문자 필터링 대상 +| 문자 | 설명 | +|------|------| +| `'` | 문자 데이터 구분 기호 | +| `;` | 쿼리 구분 기호 | +| `--`, `#` | 라인 주석 구분 기호 | +| `/* */` | 블록 주석 | + +--- + +## 3. 디렉터리 인덱싱 (DI) +**조치:** +```apache +# Apache - Indexes 옵션 제거 + + Options FollowSymLinks # Indexes 제거 + +``` +```xml + + + listings + false + +``` +```nginx +# Nginx +server { + location / { + autoindex off; + } +} +``` + +--- + +## 4. 에러 페이지 적용 미흡 (EP) +**조치:** +```apache +# Apache - 서버 정보 노출 제거 및 사용자 에러 페이지 정의 +ServerTokens Prod +ServerSignature Off +ErrorDocument 404 /main/error.html +ErrorDocument 405 /main/error.html +``` +```xml + + + + +``` +```xml + + + 404 + /errors/404 + + + 500 + /errors/500 + + + java.lang.Exception + /errors/500 + +``` +```nginx +# Nginx - 서버 정보 제거 및 사용자 에러 페이지 +http { + server_tokens off; +} +server { + error_page 400 401 402 405 /custom_4xx.html; + error_page 404 /custom_404.html; + error_page 500 502 503 504 /custom_5xx.html; + location = /custom_404.html { root /var/www/html; internal; } + location = /custom_4xx.html { root /var/www/html; internal; } + location = /custom_5xx.html { root /var/www/html; internal; } +} +``` + +--- + +## 5. 정보 누출 (IL) +**조치 항목:** +1. robots.txt, web.config, nginx.conf로 검색 차단 디렉터리/확장자 지정 +2. 백업 파일 삭제 (*.bak, *.backup, *.org, *.old, *.zip, *.log, *.sql, *.tmp, *.temp) +3. 초기 페이지/디렉터리/배너 삭제 +4. 개인정보 마스킹 처리 (홍\*동, 901231-1\*\*\*\*\*\*, 010-1234-\*\*\*\* 등) +5. 개발 중 주석/디버그 정보 제거 + +--- + +## 6. 크로스사이트 스크립트 - XSS (XS) + +### 취약 패턴 +```javascript +// JavaScript - innerHTML 사용 (취약) +document.getElementById('output').innerHTML = userInput; +// document.write(userInput); // 취약 +``` + +### 안전한 구현 - HTML Entity 변환 (Java) +```java +public static String sanitizeInput(String input) { + if (input == null) return null; + return input.replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll("\"", """) + .replaceAll("'", "'"); +} +``` + +### 안전한 구현 - HTML Entity 변환 (PHP) +```php +function escapeHtml($input) { + return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { + $escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); + $additionalEscapes = [ + '\\' => '\', + '(' => '(', + ')' => ')', + '#' => '#' + ]; + return strtr($escaped, $additionalEscapes); +} +``` + +### 특수문자 필터링 대상 +| 변경 전 | 변경 후 | +|---------|---------| +| `<` | `<` | +| `>` | `>` | +| `"` | `"` | +| `(` | `(` | +| `)` | `)` | +| `#` | `#` | +| `&` | `&` | + +### 쿠키 보안 설정 +``` +Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict +``` + +--- + +## 7. 크로스사이트 요청 위조 - CSRF (CF) + +### 안전한 구현 - CSRF Token (Java/Spring) +```java +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + String csrfToken = generateCsrfToken(); + session.setAttribute("csrfToken", csrfToken); + model.addAttribute("csrfToken", csrfToken); + return "index"; +} + +// CSRF Token 생성 함수 +private String generateCsrfToken() { + SecureRandom secureRandom = new SecureRandom(); + byte[] token = new byte[16]; + secureRandom.nextBytes(token); + return Base64.getUrlEncoder().encodeToString(token); +} + +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, + @RequestParam("csrfToken") String csrfToken, + HttpServletRequest request, Model model) { + HttpSession session = request.getSession(); + String sessionToken = (String) session.getAttribute("csrfToken"); + if (sessionToken == null || !sessionToken.equals(csrfToken)) { + throw new IllegalStateException("Invalid CSRF token"); + } + String sanitizedInput = sanitizeInput(input); + inputs.add(sanitizedInput); + return "index"; +} +``` + +### HTML 폼에 CSRF Token 포함 +```html +
+ + + + +
+``` + +### 추가 방어 조치 +1. Referer/Origin 헤더 검증으로 외부 도메인 요청 차단 +2. SameSite 쿠키 옵션 적용 +3. HTTPS 환경에서 Secure, HttpOnly 속성 적용 + +--- + +## 8. 서버사이드 요청 위조 - SSRF (SF) + +### 안전한 구현 - URL 화이트리스트 (Java) +```java +private final List allowedDomains = Arrays.asList("example.com"); +private final Map> allowedIPsAndPorts = new HashMap<>(); + +public UrlValidator() { + allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); + allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} + +public boolean isUrlAllowed(String urlString) { + try { + URL url = new URL(urlString); + String protocol = url.getProtocol(); + // HTTP와 HTTPS만 허용 + if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { + return false; + } + String host = url.getHost(); + int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); + if (allowedDomains.contains(host)) return true; + if (allowedIPsAndPorts.containsKey(host)) { + return allowedIPsAndPorts.get(host).contains(port); + } + return false; + } catch (Exception e) { + return false; + } +} +``` + +### 안전한 구현 - URL 화이트리스트 (PHP) +```php +function isUrlAllowed($url) { + $allowedDomains = ['example.com', 'api.example.com']; + $allowedIPsAndPorts = [ + '192.168.10.10' => [80, 443, 8000], + '10.0.0.1' => [80, 443] + ]; + $parsedUrl = parse_url($url); + if (!$parsedUrl || !isset($parsedUrl['host'])) return false; + + $host = $parsedUrl['host']; + $port = isset($parsedUrl['port']) ? $parsedUrl['port'] + : ($parsedUrl['scheme'] === 'https' ? 443 : 80); + if (in_array($host, $allowedDomains, true)) return true; + if (filter_var($host, FILTER_VALIDATE_IP)) { + if (array_key_exists($host, $allowedIPsAndPorts)) { + return in_array($port, $allowedIPsAndPorts[$host], true); + } + } + return false; +} +``` + +### PHP 설정 강화 +```ini +; php.ini - 원격 URL 접근 차단 +allow_url_fopen=Off +allow_url_include=Off +``` + +### 추가 방어 조치 +1. 내부 네트워크 대역 및 관리용 포트 요청 차단 +2. http, https 외 프로토콜(file://, gopher://, data://) 차단 +3. 에러 발생 시 응답값 노출 금지 +4. 애플리케이션 서버와 내부 시스템 간 네트워크 분리 + +--- + +## 9. 약한 비밀번호 정책 (BF) +**비밀번호 복잡성 검증 (JavaScript):** +```javascript +function isPasswordStrong(password) { + const minLength = 8; + const hasUpperCase = /[A-Z]/.test(password); + const hasLowerCase = /[a-z]/.test(password); + const hasNumber = /[0-9]/.test(password); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); + return password.length >= minLength + && hasUpperCase && hasLowerCase + && hasNumber && hasSpecialChar; +} +``` +**취약 ID 예시:** admin, administrator, manager, guest, tomcat, root, user +**취약 비밀번호 예시:** abcd, 1234, 1111, test, password, public, 빈 비밀번호, ID와 동일 + +--- + +## 10. 불충분한 인증 절차 (IA) + +### 안전한 구현 - 재인증 로직 (Java) +```java +// 중요 페이지 접근 시 세션 기반 인증 검증 +public String editProfile(HttpSession session, Model model) { + User user = (User) session.getAttribute("user"); + Boolean isVerified = (Boolean) session.getAttribute("isVerified"); + if (user == null || isVerified == null || !isVerified) { + return "redirect:/user/authenticate"; + } + model.addAttribute("user", user); + return "edit_profile"; +} + +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { + if (input.equals(code)) { + session.setAttribute("isVerified", true); + return "redirect:/user/edit_profile"; + } else { + return "redirect:/user/authenticate?error=true"; + } +} +``` + +### 안전한 구현 - 접근 통제 공통 모듈 (Java) +```java +public class AccessControl { + public static boolean isAuthenticated(HttpSession session) { + return session.getAttribute("user") != null; + } + public static boolean isVerified(HttpSession session) { + return Boolean.TRUE.equals(session.getAttribute("isVerified")); + } +} +``` + +--- + +## 11. 불충분한 권한 검증 (IN) + +### 안전한 구현 - 서버 사이드 세션 검증 (Java) +```java +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { + User currentUser = (User) session.getAttribute("currentUser"); + if (currentUser == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); + } + Inquiry inquiry = inquiryService.findInquiryById(id); + if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); + } + model.addAttribute("inquiry", inquiry); + return "inquiry_detail"; +} +``` + +--- + +## 12. 취약한 비밀번호 복구 절차 (PR) + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (Java) +```java +private static final String CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +private static final int PASSWORD_LENGTH = 12; + +private String generateTemporaryPassword() { + SecureRandom secureRandom = new SecureRandom(); + StringBuilder password = new StringBuilder(PASSWORD_LENGTH); + for (int i = 0; i < PASSWORD_LENGTH; i++) { + int randomIndex = secureRandom.nextInt(CHARACTERS.length()); + password.append(CHARACTERS.charAt(randomIndex)); + } + return password.toString(); +} +``` + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (PHP) +```php +function generateRandomPassword($length = 12) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; + $charactersLength = strlen($characters); + $randomPassword = ''; + for ($i = 0; $i < $length; $i++) { + $randomPassword .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomPassword; +} +``` + +--- + +## 13. 프로세스 검증 누락 (PV) + +### 안전한 구현 - 세션 기반 접근 통제 (Java/Spring) +```java +// 인터셉터 설정 - 비공개/공개 페이지 구분 +public class SessionConfig implements WebMvcConfigurer { + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SessionInterceptor()) + .addPathPatterns("/home", "/board/**") + .excludePathPatterns("/login", "/register", "/error"); + } +} + +public class SessionInterceptor implements HandlerInterceptor { + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + return true; + } +} +``` + +### 안전한 구현 - 플로우 제어 (PHP) +```php +session_start(); +if ($step_completed) { + $_SESSION['step1_completed'] = true; + header('Location: step2.php'); + exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { + header('Location: step1.php'); // 1단계 미완료 시 리다이렉트 + exit; +} +``` + +--- + +## 14. 악성 파일 업로드 (FU) + +### 안전한 구현 - 파일 업로드 보안 (Java) +```java +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of( + "image/jpeg", "image/png", "application/pdf", "text/plain"); + +// 파일명 정규화 +private static String normalizeFilename(String filename) { + if (filename == null) return null; + String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); + name = Normalizer.normalize(name, Normalizer.Form.NFC); + name = name.replace("\0", ""); + name = name.replaceAll("[<>:\"/\\\\|?*]", ""); + name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); + return name; +} + +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { + String safe = normalizeFilename(filename); + int dotCount = safe.length() - safe.replace(".", "").length(); + if (dotCount != 1) return ""; // 이중 확장자 차단 + int idx = safe.lastIndexOf('.'); + return (idx == -1) ? "" : safe.substring(idx + 1).toLowerCase(); +} + +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { + String original = file.getOriginalFilename(); + String ext = getExtension(original); + if (!Arrays.asList(ALLOWED_EXTENSIONS).contains(ext)) { + throw new IOException("허용되지 않은 확장자"); + } + // MIME 시그니처 검증 + Tika tika = new Tika(); + String mime = tika.detect(file.getInputStream()); + if (!ALLOWED_MIME.contains(mime)) { + throw new IOException("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; + Path savePath = Paths.get(uploadDir, newName); + file.transferTo(savePath.toFile()); + return newName; +} +``` + +### 안전한 구현 - 파일 업로드 보안 (PHP) +```php +function normalize_filename($filename) { + $filename = urldecode($filename); + $filename = normalizer_normalize($filename, Normalizer::FORM_C); + $filename = str_replace("\0", "", $filename); + $filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); + $filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); + return $filename; +} + +function is_valid_extension($filename, $allowed_exts) { + $safe = normalize_filename($filename); + if (substr_count($safe, '.') !== 1) return false; // 이중 확장자 차단 + $ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); + return in_array($ext, $allowed_exts, true); +} + +function save_upload($file, $uploadDir) { + $allowed_exts = ['jpg', 'jpeg', 'png', 'pdf', 'txt']; + $allowed_mime = ['image/jpeg', 'image/png', 'application/pdf', 'text/plain']; + + if (!is_valid_extension($file['name'], $allowed_exts)) { + throw new Exception("허용되지 않은 확장자"); + } + $mime = mime_content_type($file['tmp_name']); + if (!in_array($mime, $allowed_mime, true)) { + throw new Exception("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $newName = bin2hex(random_bytes(16)) . '.' . $ext; + $dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; + if (!move_uploaded_file($file['tmp_name'], $dest)) { + throw new Exception("파일 저장 실패"); + } + return $newName; +} +``` + +### 핵심 보안 조치 +1. 확장자 화이트리스트 검증 + MIME 타입 검증 +2. 파일명 난수화 (UUID 등) +3. 업로드 경로를 웹 디렉터리 외부에 배치 +4. 업로드된 파일의 실행 권한 제거 + +--- + +## 15. 파일 다운로드 (FD) + +### 안전한 구현 - 파일명 검증 (Java) +```java +public class FileDownloadUtil { + // 파일명에 영문, 숫자, 일부 특수문자만 허용 + public static boolean isValidFileName(String fileName) { + return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); + } + + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "png"); + + public static boolean isAllowedExtension(String filePath) { + String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + return ALLOWED_EXTENSIONS.contains(extension); + } +} + +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename) throws IOException { + if (!FileDownloadUtil.isValidFileName(filename) + || !FileDownloadUtil.isAllowedExtension(filename)) { + return ResponseEntity.badRequest().build(); + } + // ... 다운로드 로직 +} +``` + +### 안전한 구현 - 경로 정규화 (PHP) +```php +if (isset($_GET['file'])) { + $file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); + $filePath = realpath('../uploads/' . $file); // 경로 정규화 + // 파일 경로가 지정된 디렉터리 내에 있는지 확인 + if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { + downloadFile($filePath); + } else { + echo "잘못된 파일 경로입니다."; + exit; + } +} +``` + +### 우회 공격 대응 +| 인코딩 방식 | 예시 | +|-------------|------| +| URL 인코딩 | `.(%2e)`, `/(%2f)`, `\(%5c)` | +| 더블 URL 인코딩 | `.(%252e)`, `/(%252f)` | +| 16bit 유니코드 | `.(%u002e)`, `/(%u2215)` | +| 특수문자 중첩 | `....//` → `../` | +| 종단 문자 추가 | `[파일명]%00.jpg` | + +--- + +## 16. 불충분한 세션 관리 (IS) + +### 안전한 구현 - 세션 고정 방지 (Java/Spring) +```java +@RequestMapping("/login") +public String login(HttpServletRequest request) { + request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 + return "redirect:/home"; +} + +// Spring Security 설정 +@Override +protected void configure(HttpSecurity http) throws Exception { + http.sessionManagement() + .sessionFixation().migrateSession() + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(1).maxSessionsPreventsLogin(false) + .expiredUrl("/login?expired"); +} +``` + +### 세션 만료 시간 설정 +```xml + + + 60 + +``` +```properties +# Spring Boot application.properties +server.servlet.session.timeout=60m +``` +```php +// PHP - 세션 재생성 및 만료 설정 +session_start(); +session_regenerate_id(true); // 예측 불가능한 세션 ID 생성 +ini_set('session.gc_maxlifetime', 3600); // 60분 +ini_set('session.cookie_lifetime', 3600); +``` + +### JWT 보안 설정 +| 안전한 알고리즘 | 설명 | +|----------------|------| +| HS256~512 | 비밀 키 기반 HMAC 해시 | +| RS256~512 | 비대칭 키 RSA 서명 | +| ES256~512 | 타원 곡선 암호화 서명 | + +| 취약한 알고리즘 | 설명 | +|----------------|------| +| HS1, RS1 | SHA-1 기반 (취약) | +| none | 서명 생략 (위험) | +| plaintext | 평문 서명 (위험) | + +--- + +## 17. 데이터 평문 전송 (SN) +**조치:** +```apache +# Apache - TLSv1.2 이상 사용, SSLv2/v3 비활성화 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +``` +``` +# IIS - 레지스트리에서 SSL 2.0, 3.0 비활성화 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] +"Enabled"=dword:00000000 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] +"Enabled"=dword:00000000 +``` + +--- + +## 18. 쿠키 변조 (CC) + +### 안전한 구현 - AES + HMAC 쿠키 (Java) +```java +public class CookieUtil { + private static final int IV_LEN = 16, HMAC_LEN = 32; + private final byte[] encKey; // AES-256 키 (32 bytes) + private final byte[] hmacKey; // HMAC 키 + + // 보안 쿠키 생성 + public void addSecureCookie(HttpServletResponse resp, String name, + String plaintext, int maxAgeSec) throws Exception { + byte[] iv = new byte[IV_LEN]; + new SecureRandom().nextBytes(iv); + + // AES-256-CBC 암호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, + new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // HMAC 생성 + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); + mac.update(iv); + mac.update(ciphertext); + byte[] hmac = mac.doFinal(); + + // payload = IV + HMAC + 암호문 + byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; + System.arraycopy(iv, 0, payload, 0, iv.length); + System.arraycopy(hmac, 0, payload, iv.length, hmac.length); + System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); + + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); + + // HttpOnly, Secure, SameSite 속성 설정 + String header = String.format( + "%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", + name, encoded, maxAgeSec); + resp.addHeader("Set-Cookie", header); + } +} +``` + +--- + +## 19. 관리자 페이지 노출 (AE) +**조치:** +1. 유추하기 어려운 URL 및 포트로 관리자 페이지 변경 +2. 지정된 IP만 관리자 페이지 접근 허용 +3. 관리자 로그인 시 2차 인증(OTP, VPN, 인증서) 적용 +4. 하위 페이지별 세션 검증 구현 + +--- + +## 20. 자동화 공격 (CC) +**조치:** +1. 로그인 시도, 게시글 등록, SMS 발송 등에 횟수 제한 설정 +2. CAPTCHA 등 일회성 확인 로직 구현 +3. IDS/IPS 시스템으로 대량 패킷 감지 및 차단 +4. 로그인 실패 3~5회 초과 시 계정 잠금 로직 구현 + +--- + +## 21. 불필요한 Method 악용 (WM) + +### 조치 - Apache +```bash +# WebDAV 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs + +# 불필요한 메소드 제한 +# /etc/apache2/apache2.conf + + Dav Off + + Order Allow,Deny + Deny from all + + + +# TRACE 메소드 비활성화 +TraceEnable Off + +# CONNECT 메소드 비활성화 (mod_rewrite) + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} ^CONNECT + RewriteRule .* - [F] + +``` + +### 조치 - Tomcat +```xml + + + readonly + true + + + + +``` + +### 조치 - Nginx +```nginx +# WebDAV 비활성화 - dav_methods 지시어 삭제 +# Nginx는 0.5.17 이후 TRACE를 405로 거부 +# CONNECT 메소드는 기본적으로 미지원 +``` + +### 조치 - IIS +``` +# IIS 6.0 이상: 요청 필터링 > HTTP 동사 > 동사 거부에 TRACE 추가 +# WebDAV 기능 비활성화 확인 +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/cii/windows.md b/skills-ko/kesekit-guide-ko/scripts/cii/windows.md new file mode 100644 index 0000000..e2970e3 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/cii/windows.md @@ -0,0 +1,1489 @@ +# Windows 서버 취약점 점검/조치 스크립트 +> KISA 주요정보통신기반시설 기술적 취약점 분석평가 가이드 (W-01 ~ W-64) + +--- + +## 1. 계정 관리 + +### W-01: Administrator 계정 이름 변경 등 보안성 강화 (상) +**점검:** +```powershell +# Administrator(SID-500) 계정명 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select-Object Name, Enabled, SID + +# 로컬 보안 정책에서 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "NewAdministratorName" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# Administrator 계정명을 유추 불가능한 이름으로 변경 +Rename-LocalUser -Name "Administrator" -NewName "yourCustomAdmin" + +# 또는 wmic 사용 +wmic useraccount where "SID like '%-500'" rename "yourCustomAdmin" + +# GPO 방식: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: Administrator 계정 이름 바꾸기" 설정 +``` + +--- + +### W-02: Guest 계정 비활성화 (상) +**점검:** +```powershell +# Guest 계정 활성화 여부 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled + +# net 명령으로 확인 +net user Guest +``` +**조치:** +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" + +# 또는 net 명령 +net user Guest /active:no +``` + +--- + +### W-03: 불필요한 계정 제거 (상) +**점검:** +```powershell +# 전체 로컬 사용자 계정 목록 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Format-Table + +# 장기 미사용 계정 확인 (90일 이상 미로그인) +Get-LocalUser | Where-Object { + $_.Enabled -eq $true -and + $_.LastLogon -lt (Get-Date).AddDays(-90) +} | Select-Object Name, LastLogon +``` +**조치:** +```powershell +# 불필요한 계정 비활성화 +Disable-LocalUser -Name "<불필요한계정명>" + +# 불필요한 계정 삭제 +Remove-LocalUser -Name "<불필요한계정명>" +``` + +--- + +### W-04: 계정 잠금 임계값 설정 (상) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts + +# 상세 확인 (secedit) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutBadCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 임계값 5회로 설정 +net accounts /lockoutthreshold:5 + +# GPO 방식: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 임계값" = 5 +``` + +--- + +### W-05: 해독 가능한 암호화를 사용하여 암호 저장 해제 (상) +**점검:** +```powershell +# 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ClearTextPassword" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "해독 가능한 암호화를 사용하여 암호 저장" = 사용 안 함 +# secedit 인라인 설정 +secedit /export /cfg C:\secpol_tmp.cfg +(Get-Content C:\secpol_tmp.cfg) -replace "ClearTextPassword = 1","ClearTextPassword = 0" | Set-Content C:\secpol_tmp.cfg +secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol_tmp.cfg /areas SECURITYPOLICY +Remove-Item C:\secpol_tmp.cfg -Force +``` + +--- + +### W-06: 관리자 그룹에 최소한의 사용자 포함 (상) +**점검:** +```powershell +# Administrators 그룹 구성원 확인 +Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource + +# net 명령 +net localgroup Administrators +``` +**조치:** +```powershell +# 불필요한 계정을 Administrators 그룹에서 제거 +Remove-LocalGroupMember -Group "Administrators" -Member "<불필요한계정>" + +# 관리 업무용 계정과 일반 업무용 계정을 분리하여 운용 +``` + +--- + +### W-07: Everyone 사용 권한을 익명 사용자에 적용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous +# 값이 0이면 양호 + +# 로컬 보안 정책 내보내기로 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "EveryoneIncludesAnonymous" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: Everyone 사용 권한을 익명 사용자에게 적용" = 사용 안 함 +``` + +--- + +### W-08: 계정 잠금 기간 설정 (중) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts +# "잠금 기간(분)"과 "잠금 관찰 창(분)" 확인 + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutDuration|ResetLockoutCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 기간 60분, 잠금 수 원래대로 설정 기간 60분 +net accounts /lockoutduration:60 +net accounts /lockoutwindow:60 + +# GPO: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 기간" = 60분 +# "다음 시간 후 계정 잠금 수를 원래대로 설정" = 60분 +``` + +--- + +### W-09: 비밀번호 관리 정책 설정 (상) +**점검:** +```powershell +# 암호 정책 확인 +net accounts + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MinimumPasswordLength|PasswordComplexity|MaximumPasswordAge|MinimumPasswordAge|PasswordHistorySize" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 암호 정책 설정 +net accounts /minpwlen:8 /maxpwage:90 /minpwage:1 /uniquepw:4 + +# GPO: 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "암호는 복잡성을 만족해야 함" = 사용 +# "최소 암호 길이" = 8문자 +# "최대 암호 사용 기간" = 90일 +# "최소 암호 사용 기간" = 1일 +# "최근 암호 기억" = 4개 암호 기억됨 +``` + +--- + +### W-10: 마지막 사용자 이름 표시 안 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 마지막 사용자 이름 표시 안 함" = 사용 +``` + +--- + +### W-11: 로컬 로그온 허용 (중) +**점검:** +```powershell +# 로컬 로그온 허용 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeInteractiveLogonRight" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force + +# Administrators, IUSR_ 외 다른 계정이 있으면 취약 +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "로컬 로그온 허용" 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹 제거 + +# ntrights 유틸리티 사용 (Windows Resource Kit) +# ntrights -u "<제거할계정>" -r SeInteractiveLogonRight +``` + +--- + +### W-12: 익명 SID/이름 변환 허용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 (Windows 2003 이상) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LSAAnonymousNameLookup" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: 익명 SID/이름 변환 허용" = 사용 안 함 +``` + +--- + +### W-13: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한" = 사용 +``` + +--- + +### W-14: 원격터미널 접속 가능한 사용자 그룹 제한 (중) +**점검:** +```powershell +# Remote Desktop Users 그룹 구성원 확인 +Get-LocalGroupMember -Group "Remote Desktop Users" | Select-Object Name, ObjectClass + +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +# 0이면 원격 데스크톱 허용 상태 +``` +**조치:** +```powershell +# 관리자 외 별도 원격 접속 계정 생성 +New-LocalUser -Name "rdpUser" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -FullName "RDP 전용 사용자" +Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpUser" + +# 불필요한 계정 제거 +Remove-LocalGroupMember -Group "Remote Desktop Users" -Member "<불필요한계정>" +``` + +--- + +## 2. 서비스 관리 + +### W-15: 사용자 개인키 사용 시 암호 입력 (상) +**점검:** +```powershell +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ForceKeyProtection" C:\secpol_tmp.cfg +# 값이 2이면 양호 (키를 사용할 때마다 암호 입력) +Remove-Item C:\secpol_tmp.cfg -Force + +# 레지스트리 직접 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection +``` +**조치:** +```powershell +# 레지스트리 설정 (2 = 키를 사용할 때마다 암호 매번 입력) +reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection /t REG_DWORD /d 2 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용" +# = "키를 사용할 때마다 암호를 매 번 입력해야 함" +``` + +--- + +### W-16: 공유 권한 및 사용자 그룹 설정 (상) +**점검:** +```powershell +# 공유 폴더 목록 확인 +Get-SmbShare | Select-Object Name, Path, Description | Format-Table + +# 공유 폴더 권한에서 Everyone 확인 +Get-SmbShare | ForEach-Object { + $share = $_.Name + Get-SmbShareAccess -Name $share | Where-Object { $_.AccountName -like "*Everyone*" } | + Select-Object @{N='Share';E={$share}}, AccountName, AccessControlType, AccessRight +} +``` +**조치:** +```powershell +# 공유 폴더에서 Everyone 권한 제거 +Revoke-SmbShareAccess -Name "<공유명>" -AccountName "Everyone" -Force + +# 필요한 계정에 적절한 권한 추가 +Grant-SmbShareAccess -Name "<공유명>" -AccountName "<계정명>" -AccessRight Read -Force +``` + +--- + +### W-17: 하드디스크 기본 공유 제거 (상) +**점검:** +```powershell +# 기본 공유 확인 +net share +Get-SmbShare | Where-Object { $_.Name -match '^\w\$|^ADMIN\$' } | Select-Object Name, Path + +# AutoShareServer 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks 2>$null +``` +**조치:** +```powershell +# 기본 공유 중지 +net share C$ /delete +net share D$ /delete +net share ADMIN$ /delete + +# 재부팅 후 재생성 방지 (레지스트리) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-18: 불필요한 서비스 제거 (상) +**점검:** +```powershell +# 실행 중인 서비스 목록 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType | Format-Table + +# 불필요한 서비스 존재 여부 확인 +$unnecessaryServices = @("Alerter","ClipSrv","Browser","CryptSvc","DHCPClient", + "TrkWks","TrkSvr","ERSvc","HidServ","IMAPICD","Messenger","mnmsrvc", + "WmdmPmSN","Spooler","RemoteRegistry","simptcp","upnphost","WZCSVC") +Get-Service | Where-Object { $unnecessaryServices -contains $_.Name -and $_.Status -eq "Running" } | + Select-Object Name, DisplayName, Status +``` +**조치:** +```powershell +# 불필요한 서비스 중지 및 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 예시: Remote Registry 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled + +# 예시: Print Spooler 비활성화 (프린터 미사용 시) +Stop-Service -Name "Spooler" -Force +Set-Service -Name "Spooler" -StartupType Disabled +``` + +--- + +### W-19: 불필요한 IIS 서비스 구동 점검 (상) +**점검:** +```powershell +# IIS 서비스 상태 확인 +Get-Service -Name "W3SVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "IISADMIN" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# IIS 설치 여부 +Get-WindowsFeature -Name Web-Server 2>$null | Select-Object Name, Installed +``` +**조치:** +```powershell +# IIS 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "W3SVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "W3SVC" -StartupType Disabled -ErrorAction SilentlyContinue +Stop-Service -Name "IISADMIN" -Force -ErrorAction SilentlyContinue +Set-Service -Name "IISADMIN" -StartupType Disabled -ErrorAction SilentlyContinue + +# IIS 기능 제거 +Uninstall-WindowsFeature -Name Web-Server +``` + +--- + +### W-20: NetBIOS 바인딩 서비스 구동 점검 (상) +**점검:** +```powershell +# NetBIOS over TCP/IP 설정 확인 +Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | + Select-Object Description, TcpipNetbiosOptions +# TcpipNetbiosOptions: 0=DHCP기본, 1=사용, 2=사용안함 + +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces" /s /v NetbiosOptions +``` +**조치:** +```powershell +# NetBIOS over TCP/IP 비활성화 (WMI) +$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" +foreach ($adapter in $adapters) { + $adapter.SetTcpipNetbios(2) # 2 = NetBIOS 사용 안 함 +} + +# GUI: 네트워크 연결 > 속성 > TCP/IPv4 > 고급 > WINS 탭 +# "NetBIOS over TCP/IP 사용 안 함" 선택 +``` + +--- + +### W-21: 암호화되지 않는 FTP 서비스 비활성화 (상) +**점검:** +```powershell +# FTP 서비스 상태 확인 +Get-Service -Name "FTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "MSFTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# FTP 서비스 중지 및 비활성화 +Stop-Service -Name "FTPSVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "FTPSVC" -StartupType Disabled -ErrorAction SilentlyContinue + +# SFTP 또는 FTPS 대안 사용 권장 +``` + +--- + +### W-22: FTP 디렉토리 접근권한 설정 (상) +**점검:** +```powershell +# FTP 홈 디렉터리 경로 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/sites/site" -PSPath "IIS:\" -ErrorAction SilentlyContinue + +# FTP 홈 디렉터리 권한 확인 +icacls "C:\inetpub\ftproot" 2>$null +# Everyone 권한이 있으면 취약 +``` +**조치:** +```powershell +# FTP 홈 디렉터리에서 Everyone 권한 제거 +icacls "C:\inetpub\ftproot" /remove Everyone /T + +# 필요한 사용자에게만 권한 부여 +icacls "C:\inetpub\ftproot" /grant "ftpUser:(OI)(CI)RX" +``` + +--- + +### W-23: 공유 서비스에 대한 익명 접근 제한 설정 (상) +**점검:** +```powershell +# FTP 익명 인증 설정 확인 (IIS) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS FTP 익명 인증 비활성화 +Import-Module WebAdministration +Set-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -Value $false + +# 또는 IIS 관리자에서: +# FTP 사이트 > FTP 인증 > 익명 인증 = 사용 안 함 +``` + +--- + +### W-24: FTP 접근 제어 설정 (상) +**점검:** +```powershell +# IIS FTP IP 제한 설정 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/security/ipSecurity" -PSPath "IIS:\Sites\Default FTP Site" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS 관리자에서 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +# 1) 허용 항목 추가 (접속 허용 IP) +# 2) 기능 설정 편집 > 지정되지 않은 클라이언트 액세스 = 거부 + +# PowerShell (IIS 모듈) +Import-Module WebAdministration +# 특정 IP 허용 추가 +Add-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/ipSecurity" -Name "." -Value @{ipAddress="192.168.1.100";allowed="true"} +``` + +--- + +### W-25: DNS Zone Transfer 설정 (상) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 영역 전송 설정 확인 (DNS 서버 설치 시) +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, ZoneType +Get-DnsServerZone -ErrorAction SilentlyContinue | ForEach-Object { + Get-DnsServerZoneTransferPolicy -ZoneName $_.ZoneName -ErrorAction SilentlyContinue +} +``` +**조치:** +```powershell +# DNS 영역 전송을 특정 서버로만 제한 +# dnscmd /zoneresetsecondaries <영역이름> /securens +Set-DnsServerPrimaryZone -Name "<영역이름>" -SecureSecondaries TransferToSecureServers -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-26: RDS(Remote Data Services) 제거 (상) +**점검:** +```powershell +# MSADC 가상 디렉터리 존재 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch" 2>$null +``` +**조치:** +```powershell +# MSADC 가상 디렉터리 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 키 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\RDSServer.DataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\AdvancedDataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\VbBusObj.VbBusObjCls" /f 2>$null + +# 참고: Windows 2008 이상은 해당 없음 +``` + +--- + +### W-27: 최신 Windows OS Build 버전 적용 (상) +**점검:** +```powershell +# Windows 빌드 버전 확인 +[System.Environment]::OSVersion.Version +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").UBR + +# winver 실행 +winver + +# systeminfo로 상세 정보 +systeminfo | Select-String "OS 이름|OS 버전|OS Name|OS Version" +``` +**조치:** +```powershell +# Windows Update 확인 및 설치 +# 자동 업데이트: +# 제어판 > Windows Update + +# PowerShell로 업데이트 확인 (PSWindowsUpdate 모듈) +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot + +# 수동 패치: https://msrc.microsoft.com/update-guide +``` + +--- + +### W-28: 터미널 서비스 암호화 수준 설정 (중) +**점검:** +```powershell +# RDP 암호화 수준 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel +# 2=중간(클라이언트 호환 가능), 3=높음, 4=FIPS + +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MinEncryptionLevel 2>$null +``` +**조치:** +```powershell +# 레지스트리에서 암호화 수준 설정 (2 이상) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 3 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 보안 +# "클라이언트 연결 암호화 수준 설정" = 사용 (높음) +``` + +--- + +### W-29: 불필요한 SNMP 서비스 구동 점검 (중) +**점검:** +```powershell +# SNMP 서비스 상태 확인 +Get-Service -Name "SNMP" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# SNMP 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "SNMP" -Force -ErrorAction SilentlyContinue +Set-Service -Name "SNMP" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-30: SNMP Community String 복잡성 설정 (중) +**점검:** +```powershell +# SNMP Community String 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" 2>$null +# public, private이 있으면 취약 +``` +**조치:** +```powershell +# 기본 Community String 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v public /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v private /f 2>$null + +# 복잡한 Community String 추가 (읽기전용 = 4) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v "C0mpl3x$tr1ng!" /t REG_DWORD /d 4 /f + +# SNMP 서비스 재시작 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-31: SNMP Access Control 설정 (중) +**점검:** +```powershell +# SNMP 허용 호스트 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" 2>$null +# 값이 없으면 모든 호스트 허용 (취약) +``` +**조치:** +```powershell +# 특정 호스트로부터만 SNMP 패킷 수신 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d "192.168.1.100" /f + +# GUI: 서비스 > SNMP Service > 속성 > 보안 탭 +# "다음 호스트로부터 SNMP 패킷 받아들이기" 선택 후 호스트 등록 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-32: DNS 서비스 구동 점검 (중) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 동적 업데이트 설정 확인 +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, DynamicUpdate +``` +**조치:** +```powershell +# DNS 동적 업데이트 비활성화 +Set-DnsServerPrimaryZone -Name "<영역이름>" -DynamicUpdate None -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-33: HTTP/FTP/SMTP 배너 차단 (하) +**점검:** +```powershell +# IIS Server 헤더 확인 (HTTP 응답) +# (Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing).Headers["Server"] + +# IIS X-Powered-By 헤더 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -ErrorAction SilentlyContinue + +# SMTP 배너 확인 +# telnet localhost 25 으로 접속 시 배너 확인 +``` +**조치:** +```powershell +# [HTTP] IIS Server 헤더 제거 - URL Rewrite 모듈 필요 +# 1) URL Rewrite 설치: https://www.iis.net/downloads/microsoft/url-rewrite +# 2) 아웃바운드 규칙 추가: 서버 변수 RESPONSE_SERVER 비우기 + +# [HTTP] X-Powered-By 헤더 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -AtElement @{name="X-Powered-By"} -ErrorAction SilentlyContinue + +# [FTP] 기본 배너 숨기기 +# IIS 관리자 > FTP 사이트 > FTP 메시지 > "기본 배너 숨기기" 체크 + +# [SMTP] 배너 변경 +# cd C:\inetpub\AdminScripts +# cscript adsutil.vbs set smtpsvc/1/connectresponse "Authorized Access Only" +# net stop smtpsvc && net start smtpsvc +``` + +--- + +### W-34: Telnet 서비스 비활성화 (중) +**점검:** +```powershell +# Telnet 서비스 상태 확인 +Get-Service -Name "TlntSvr" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# Telnet 인증 방식 확인 (Windows 2003~2012) +# tlntadmn config 명령으로 확인 +``` +**조치:** +```powershell +# Telnet 서비스 중지 및 비활성화 +Stop-Service -Name "TlntSvr" -Force -ErrorAction SilentlyContinue +Set-Service -Name "TlntSvr" -StartupType Disabled -ErrorAction SilentlyContinue + +# 부득이 사용 시 NTLM 인증만 사용 +# tlntadmn config sec = +NTLM -passwd + +# 참고: Windows 2016 이상에서는 Telnet 서버 제공하지 않음 +``` + +--- + +### W-35: 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 (중) +**점검:** +```powershell +# 시스템 DSN 확인 +Get-OdbcDsn -DsnType System -ErrorAction SilentlyContinue | Select-Object Name, DriverName, Platform + +# 레지스트리에서 ODBC 데이터 소스 확인 +reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" 2>$null +``` +**조치:** +```powershell +# 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType System -ErrorAction SilentlyContinue + +# GUI: 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN +# 불필요한 데이터 소스 선택 후 제거 +``` + +--- + +### W-36: 원격터미널 접속 타임아웃 설정 (중) +**점검:** +```powershell +# RDP 세션 유휴 타임아웃 레지스트리 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime 2>$null +# 밀리초 단위: 1800000 = 30분 + +# 현재 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MaxIdleTime 2>$null +``` +**조치:** +```powershell +# 유휴 세션 타임아웃 30분(1800000ms) 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime /t REG_DWORD /d 1800000 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 세션 시간 제한 +# "활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정" = 사용 (30분) +``` + +--- + +### W-37: 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 (중) +**점검:** +```powershell +# 예약된 작업 목록 확인 +Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} | + Select-Object TaskName, TaskPath, State | + Format-Table -AutoSize + +# 예약된 작업 상세 정보 (실행 명령 포함) +Get-ScheduledTask | ForEach-Object { + $task = $_ + $actions = $task.Actions + foreach ($action in $actions) { + [PSCustomObject]@{ + TaskName = $task.TaskName + Execute = $action.Execute + Arguments = $action.Arguments + State = $task.State + } + } +} | Format-Table -AutoSize + +# schtasks 명령 +schtasks /query /fo LIST /v +``` +**조치:** +```powershell +# 의심스러운 예약 작업 비활성화 +Disable-ScheduledTask -TaskName "<작업이름>" + +# 의심스러운 예약 작업 삭제 +Unregister-ScheduledTask -TaskName "<작업이름>" -Confirm:$false + +# schtasks 명령 +schtasks /delete /tn "<작업이름>" /f +``` + +--- + +## 3. 패치 관리 + +### W-38: 주기적 보안 패치 및 벤더 권고사항 적용 (상) +**점검:** +```powershell +# 설치된 핫픽스 목록 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, InstalledOn, Description -First 20 + +# 시스템 정보에서 KB 목록 +systeminfo | findstr "KB" + +# 마지막 패치 설치 날짜 확인 +(Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).InstalledOn + +# Windows Update 이력 확인 +$session = New-Object -ComObject Microsoft.Update.Session +$searcher = $session.CreateUpdateSearcher() +$history = $searcher.QueryHistory(0, 20) +$history | Select-Object Title, Date, ResultCode | Format-Table +``` +**조치:** +```powershell +# Windows Update 실행 +# 수동: https://msrc.microsoft.com/update-guide +# 자동: 제어판 > Windows Update + +# PowerShell 모듈 사용 +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll +``` + +--- + +### W-39: 백신 프로그램 업데이트 (상) +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntispywareEnabled, AntivirusEnabled, + AntivirusSignatureLastUpdated, AntispywareSignatureLastUpdated + +# 백신 엔진 버전 확인 +Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, AntivirusSignatureVersion + +# 3rd party 백신 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState, pathToSignedProductExe +``` +**조치:** +```powershell +# Windows Defender 정의 업데이트 +Update-MpSignature + +# Windows Defender 수동 빠른 검사 +Start-MpScan -ScanType QuickScan + +# 3rd party 백신의 경우 해당 제조사 업데이트 절차 참조 +``` + +--- + +## 4. 로그 관리 + +### W-40: 정책에 따른 시스템 로깅 설정 (중) +**점검:** +```powershell +# 감사 정책 확인 +auditpol /get /category:* + +# 주요 감사 정책 확인 +auditpol /get /subcategory:"로그온","로그오프","계정 관리","정책 변경","권한 사용","디렉터리 서비스 액세스" +``` +**조치:** +```powershell +# 감사 정책 설정 (KISA 권고 기준) +auditpol /set /subcategory:"계정 관리" /failure:enable +auditpol /set /subcategory:"계정 로그온 이벤트" /success:enable /failure:enable +auditpol /set /subcategory:"권한 사용" /success:enable /failure:enable +auditpol /set /subcategory:"디렉터리 서비스 액세스" /failure:enable +auditpol /set /subcategory:"로그온" /success:enable /failure:enable +auditpol /set /subcategory:"로그오프" /success:enable /failure:enable +auditpol /set /subcategory:"정책 변경" /success:enable /failure:enable + +# GPO: 로컬 보안 정책 > 로컬 정책 > 감사 정책 +``` + +--- + +### W-41: NTP 및 시각 동기화 설정 (중) +**점검:** +```powershell +# NTP 동기화 상태 확인 +w32tm /query /status +w32tm /query /configuration + +# NTP 서버 설정 확인 +w32tm /dumpreg /subkey:parameters + +# 시간 서비스 상태 +Get-Service -Name "W32Time" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Windows Time 서비스 활성화 +Set-Service -Name "W32Time" -StartupType Automatic +Start-Service -Name "W32Time" + +# 내부 NTP 서버와 동기화 설정 +w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.server.ip" /update +w32tm /resync + +# 동기화 시간차 확인 +w32tm /stripchart /dataonly /computer:"ntp.server.ip" +``` + +--- + +### W-42: 이벤트 로그 관리 설정 (하) +**점검:** +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes, OverflowAction, MinimumRetentionDays | Format-Table + +# 레지스트리에서 직접 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System" /v MaxSize +``` +**조치:** +```powershell +# 이벤트 로그 최대 크기 10240KB(10MB) 이상 설정 +Limit-EventLog -LogName Application -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName Security -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName System -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 + +# 레지스트리 직접 설정 (바이트 단위: 10485760 = 10MB) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize /t REG_DWORD /d 10485760 /f +``` + +--- + +### W-43: 이벤트 로그 파일 접근 통제 설정 (중) +**점검:** +```powershell +# 시스템 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\config" +# Everyone 권한이 있으면 취약 + +# IIS 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\LogFiles" 2>$null +``` +**조치:** +```powershell +# 로그 디렉터리에서 Everyone 권한 제거 +icacls "C:\Windows\System32\config" /remove Everyone /T +icacls "C:\Windows\System32\LogFiles" /remove Everyone /T + +# Administrators, SYSTEM만 접근 가능하도록 설정 +``` + +--- + +## 5. 보안 관리 + +### W-44: 원격으로 액세스할 수 있는 레지스트리 경로 (상) +**점검:** +```powershell +# Remote Registry 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Remote Registry 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-45: 백신 프로그램 설치 (상) +**점검:** +```powershell +# Windows Defender 설치 및 활성화 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusEnabled, RealTimeProtectionEnabled + +# 설치된 백신 프로그램 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState + +# 프로그램 목록에서 백신 확인 +Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "antivirus|백신|V3|알약|Kaspersky|Norton|McAfee|Symantec" } | + Select-Object Name, Version +``` +**조치:** +```powershell +# Windows Defender 활성화 (비활성화된 경우) +Set-MpPreference -DisableRealtimeMonitoring $false + +# 백신이 설치되지 않은 경우 조직 정책에 따라 백신 프로그램 설치 +# Windows Defender는 Windows Server 2016 이상 기본 탑재 +Install-WindowsFeature -Name Windows-Defender -ErrorAction SilentlyContinue +``` + +--- + +### W-46: SAM 파일 접근 통제 설정 (상) +**점검:** +```powershell +# SAM 파일 접근 권한 확인 +icacls "C:\Windows\System32\config\SAM" +# Administrator, SYSTEM 외 다른 그룹/사용자 권한이 있으면 취약 +``` +**조치:** +```powershell +# SAM 파일 권한 설정 (Administrator, SYSTEM만 접근) +icacls "C:\Windows\System32\config\SAM" /inheritance:r +icacls "C:\Windows\System32\config\SAM" /grant "BUILTIN\Administrators:(F)" +icacls "C:\Windows\System32\config\SAM" /grant "NT AUTHORITY\SYSTEM:(F)" +``` + +--- + +### W-47: 화면보호기 설정 (하) +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +# ScreenSaveActive=1, ScreenSaveTimeOut<=600(10분), ScreenSaverIsSecure=1 이면 양호 +``` +**조치:** +```powershell +# 화면보호기 활성화 (대기 시간 10분, 암호 사용) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "C:\Windows\System32\scrnsave.scr" /f + +# GPO 일괄 적용: +# 사용자 구성 > 관리 템플릿 > 제어판 > 개인 설정 +# "화면 보호기 사용" = 사용 +# "화면 보호기 시간 제한" = 600초 +# "화면 보호기 암호로 보호" = 사용 +``` + +--- + +### W-48: 로그온하지 않고 시스템 종료 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon +# 값이 0이면 양호 +``` +**조치:** +```powershell +# 로그온 없이 시스템 종료 차단 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 종료: 로그온하지 않고 시스템 종료 허용" = 사용 안 함 +``` + +--- + +### W-49: 원격 시스템에서 강제로 시스템 종료 (상) +**점검:** +```powershell +# 원격 시스템 종료 권한 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeRemoteShutdownPrivilege" C:\secpol_tmp.cfg +# Administrators만 있으면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "원격 시스템에서 강제로 시스템 종료" 정책에 Administrators 외 다른 계정/그룹 제거 +``` + +--- + +### W-50: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail +# 값이 0이면 양호 (사용 안 함), 1이면 취약 + +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "CrashOnAuditFail" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 (사용 안 함) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료" = 사용 안 함 +``` + +--- + +### W-51: SAM 계정과 공유의 익명 열거 허용 안 함 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM +# RestrictAnonymous=1, RestrictAnonymousSAM=1 이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함" = 사용 +# "네트워크 액세스: SAM 계정의 익명 열거 허용 안 함" = 사용 + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-52: Autologon 기능 제어 (상) +**점검:** +```powershell +# AutoAdminLogon 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +# 값이 0이거나 존재하지 않으면 양호 + +# DefaultPassword 존재 여부 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword 2>$null +``` +**조치:** +```powershell +# Autologon 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f + +# DefaultPassword 제거 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f 2>$null +``` + +--- + +### W-53: 이동식 미디어 포맷 및 꺼내기 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD +# 값이 0(Administrators만)이면 양호 +``` +**조치:** +```powershell +# Administrators에게만 이동식 미디어 포맷/꺼내기 허용 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 이동식 미디어 포맷 및 꺼내기 허용" = Administrators +``` + +--- + +### W-54: DoS 공격 방어 레지스트리 설정 (중) +**점검:** +```powershell +# TCP/IP 스택 강화 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand 2>$null +# SynAttackProtect>=1, EnableDeadGWDetect=0, KeepAliveTime=300000, NoNameReleaseOnDemand=1 이면 양호 +``` +**조치:** +```powershell +# DoS 방어 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand /t REG_DWORD /d 1 /f + +# 주의: 잘못된 값 설정 시 OS 재설치 필요할 수 있음 +``` + +--- + +### W-55: 사용자가 프린터 드라이버를 설치할 수 없게 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers 2>$null +# 값이 1이면 양호 (사용자 설치 차단) +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 사용자가 프린터 드라이버를 설치할 수 없게 함" = 사용 +``` + +--- + +### W-56: SMB 세션 중단 관리 설정 (중) +**점검:** +```powershell +# SMB 세션 유휴 시간 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect 2>$null +# 값이 15 이하이면 양호 + +# 로그온 시간 만료 시 연결 끊기 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff 2>$null +# 값이 1이면 양호 +``` +**조치:** +```powershell +# SMB 유휴 세션 타임아웃 15분 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect /t REG_DWORD /d 15 /f + +# 로그온 시간 만료 시 연결 끊기 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기" = 사용 +# "Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간" = 15분 +``` + +--- + +### W-57: 로그온 시 경고 메시지 설정 (하) +**점검:** +```powershell +# 로그온 경고 메시지 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText +# 둘 다 값이 설정되어 있으면 양호 +``` +**조치:** +```powershell +# 로그온 경고 메시지 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption /t REG_SZ /d "경고" /f +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText /t REG_SZ /d "이 시스템은 인가된 사용자만 접근할 수 있습니다. 비인가 접근 시도 시 법적 처벌을 받을 수 있습니다." /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목" = 경고 제목 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트" = 경고 내용 +``` + +--- + +### W-58: 사용자별 홈 디렉터리 권한 설정 (중) +**점검:** +```powershell +# 사용자 홈 디렉터리 권한 확인 +Get-ChildItem "C:\Users" -Directory | ForEach-Object { + $acl = Get-Acl $_.FullName + $everyoneAccess = $acl.Access | Where-Object { $_.IdentityReference -like "*Everyone*" } + if ($everyoneAccess) { + [PSCustomObject]@{ + Directory = $_.Name + Everyone = ($everyoneAccess | ForEach-Object { $_.FileSystemRights }) -join ", " + } + } +} +``` +**조치:** +```powershell +# 홈 디렉터리에서 Everyone 권한 제거 (All Users, Default User 제외) +Get-ChildItem "C:\Users" -Directory | Where-Object { + $_.Name -notin @("All Users","Default User","Default","Public") +} | ForEach-Object { + icacls $_.FullName /remove Everyone /T +} +``` + +--- + +### W-59: LAN Manager 인증 수준 (중) +**점검:** +```powershell +# LAN Manager 인증 수준 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel +# 값이 5이면 양호 (NTLMv2 응답만 보냄, LM 및 NTLM 거부) +# 최소 3 이상 권장 +``` +**조치:** +```powershell +# NTLMv2 응답만 보내도록 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 보안: LAN Manager 인증 수준" = "NTLMv2 응답만 보내기/LM 및 NTLM 거부" +``` + +--- + +### W-60: 보안 채널 데이터 디지털 암호화 또는 서명 (중) +**점검:** +```powershell +# 보안 채널 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel 2>$null +# 세 값 모두 1이면 양호 +``` +**조치:** +```powershell +# 보안 채널 데이터 암호화/서명 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상)" = 사용 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우)" = 사용 +# "도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우)" = 사용 +``` + +--- + +### W-61: 파일 및 디렉토리 보호 (중) +**점검:** +```powershell +# 파일 시스템 유형 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size | Format-Table + +# CMD 확인 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT 파일 시스템을 NTFS로 변환 +# convert <드라이브명>: /fs:ntfs +# 예: convert F: /fs:ntfs + +# 주의: 변환은 비가역적이며 초기 설치 시 NTFS 선택 권장 +# 기존 FAT에서 변환 시 Default ACL이 적용되지 않을 수 있음 +``` + +--- + +### W-62: 시작 프로그램 목록 분석 (중) +**점검:** +```powershell +# 시작 프로그램 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 2>$null + +# 시작 폴더 확인 +Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue +Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue + +# WMI 시작 프로그램 목록 +Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table -AutoSize +``` +**조치:** +```powershell +# 불필요한 시작 프로그램 제거 (레지스트리) +reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f +reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f + +# msconfig 실행 (Windows 2008 이하) +# 시작 프로그램 탭에서 불필요한 항목 체크 해제 +``` + +--- + +### W-63: 도메인 컨트롤러-사용자의 시간 동기화 (중) +**점검:** +```powershell +# Kerberos 최대 허용 오차 확인 (도메인 컨트롤러) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MaxClockSkew" C:\secpol_tmp.cfg +# 값이 5 이하이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force + +# 현재 시간 동기화 상태 +w32tm /query /status +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +# "컴퓨터 시계 동기화 최대 허용 오차" = 5분 + +# 시간 동기화 강제 수행 +w32tm /resync /force +``` + +--- + +### W-64: 윈도우 방화벽 설정 (중) +**점검:** +```powershell +# Windows 방화벽 프로필 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled | Format-Table + +# 방화벽 규칙 요약 +Get-NetFirewallProfile | ForEach-Object { + $profile = $_.Name + $enabled = $_.Enabled + [PSCustomObject]@{ + Profile = $profile + Enabled = $enabled + InboundDefault = $_.DefaultInboundAction + OutboundDefault = $_.DefaultOutboundAction + } +} | Format-Table + +# netsh 명령 +netsh advfirewall show allprofiles +``` +**조치:** +```powershell +# Windows 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True + +# netsh 명령 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정 또는 해제 +# 모든 프로필에 대해 "사용" 설정 +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/robot-security/cert-and-protocol.md b/skills-ko/kesekit-guide-ko/scripts/robot-security/cert-and-protocol.md new file mode 100644 index 0000000..259a9d3 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/robot-security/cert-and-protocol.md @@ -0,0 +1,96 @@ +# Certificate & Protocol Security + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: IA-04, ER-01 + +--- + +## 1. OpenSSL Certificate Inspection (IA-04) + +```bash +# 인증서 내용 확인 명령어 +openssl x509 -in server.crt -text -noout +``` + +--- + +## 2. Key File Permission Hardening (IA-04) + +```bash +# 개인키 접근 권한 설정 +chown robot-service:robot-service /etc/robot/keys/device.key +chmod 600 /etc/robot/keys/device.key # 파일 소유자만 접근 가능 +``` + +--- + +## 3. OPC UA Security Configuration (IA-04) + +### 3.1 Certificate Validation + +```ini +# server.conf (OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +### 3.2 Certificate Revocation Check + +```ini +# server.conf (OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +--- + +## 4. TLS Client Certificate Verification - Python (IA-04) + +```python +import ssl, socket + +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 + +with socket.create_connection(("server.com", 443)) as sock: + with context.wrap_socket(sock, server_hostname="server.com") as ssock: + print("TLS Established:", ssock.version()) +``` + +--- + +## 5. Crypto Algorithm Requirements (IA-04) + +| Category | Recommended | Insufficient | +|---|---|---| +| Key algorithm | RSA >= 2048bit or ECC P-256+ | RSA 1024bit or below, ECC P-192 or below | +| Hash algorithm | SHA-256+ (SHA-2/SHA-3 family) | SHA-1, MD5 | +| TLS protocol | TLS 1.2+ (recommended: TLS 1.3) | TLS 1.0 / 1.1 | + +--- + +## 6. Audit Log API Access (ER-01) + +```http +GET /api/audit/logs +Authorization: Bearer + +HTTP/1.1 200 OK +{ + "entries": [...], + "integrity": "sha256:f45a..." +} +``` + +--- + +## 7. Platform-specific Certificate ACL Examples (IA-04) + +| Platform | Certificate Store | +|---|---| +| General server / cloud | DB table | +| OPC UA | /pki/trusted, /pki/rejected folders | +| MQTT mTLS | CA DB, allowed client certificate list | +| Robot PKI | KV DB, HSM integration | diff --git a/skills-ko/kesekit-guide-ko/scripts/robot-security/firewall-hardening.md b/skills-ko/kesekit-guide-ko/scripts/robot-security/firewall-hardening.md new file mode 100644 index 0000000..8d8820f --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/robot-security/firewall-hardening.md @@ -0,0 +1,106 @@ +# Firewall & Network Hardening + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: DFR-02, RA-01, RA-08 + +--- + +## 1. Host Firewall (iptables) + +### 1.1 MQTT / HTTPS Only (DFR-02 Protocol Filtering) + +```bash +# MQTT 및 HTTPS 외의 포트 차단 +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.2 SSH + HTTPS Only (RA-01 DoS Prevention) + +```bash +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.3 Unnecessary Port Blocking (RA-08 Service Restriction) + +```bash +# 외부 포트 스캔 (TCP 포트 확인) +nmap -sS 192.168.0.10 + +# 불필요한 포트(예: FTP 21, Telnet 23, TFTP 69) 차단 +sudo iptables -A INPUT -p tcp --dport 21 -j DROP +sudo iptables -A INPUT -p tcp --dport 23 -j DROP +sudo iptables -A INPUT -p udp --dport 69 -j DROP +``` + +--- + +## 2. Service Hardening (RA-08) + +```bash +# 현재 활성화된 포트 및 프로세스 확인 +sudo ss -tulnp +sudo netstat -tulnp + +# 서비스 상태 확인 및 비활성화 +sudo systemctl status telnet +sudo systemctl disable telnet +sudo systemctl stop telnet +``` + +--- + +## 3. VLAN Network Segmentation (RA-01 L2) + +Control network and sensor network separation via VLAN. + +```bash +# 제어 망 (VLAN ID 10) +sudo ip link add link eth0 name eth0.10 type vlan id 10 +# 센서 망 (VLAN ID 20) +sudo ip link add link eth0 name eth0.20 type vlan id 20 + +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +``` + +--- + +## 4. sysctl Network Tuning (RA-01) + +```bash +sudo sysctl -w net.core.somaxconn=128 +sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +ulimit -n 1024 +``` + +--- + +## 5. Nginx Rate Limiting (RA-01) + +```nginx +# /etc/nginx/nginx.conf +http { + limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; + server { + listen 443 ssl; + server_name example.com; + location / { + limit_req zone=req_limit_per_ip burst=5 nodelay; + limit_conn conn_limit_per_ip 10; + } + } +} +``` + +--- + +## 6. Suricata IDS Rule (RA-01 L2 DoS Detection) + +```yaml +alert tcp any any -> $HOME_NET any (msg:"TCP SYN Flood"; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/robot-security/resource-management.md b/skills-ko/kesekit-guide-ko/scripts/robot-security/resource-management.md new file mode 100644 index 0000000..fd35dce --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/robot-security/resource-management.md @@ -0,0 +1,96 @@ +# Resource Management & Monitoring + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: RA-02, RA-03 + +--- + +## 1. cgroups - Security Agent Resource Limits (RA-02) + +Restrict CPU and memory usage for security processes so they do not interfere with real-time robot control. + +```bash +# cgroup 생성 (cpu + memory) +sudo cgcreate -g cpu,memory:/robot_security + +# CPU 할당 제한 (20000us = 20% of 1 core at default 100000us period) +echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us + +# 메모리 제한 (256MB) +echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes + +# 실행 중인 보안 에이전트를 cgroup에 할당 +sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +``` + +--- + +## 2. OpenSSL Hardware Acceleration Check (RA-02) + +Offload crypto operations to hardware to reduce CPU overhead. + +```bash +openssl engine -t +# Expected output: +# (dynamic) Dynamic engine loading support +# (rdrand) Intel RDRAND engine +# (aesni) Intel AES-NI engine +``` + +--- + +## 3. logrotate Configuration (RA-02) + +Prevent audit/operational logs from exhausting disk space. + +```bash +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { + size 50M + rotate 5 + compress + missingok + notifempty +} +``` + +--- + +## 4. System Resource Monitoring (RA-03) + +Dashboard or CLI-based monitoring of CPU, memory, disk, and network utilization. The robot system should provide a user interface for operators to view resource status in real-time. + +Key resource metrics to monitor: +- CPU usage per core / per process +- Memory (RSS / swap) usage +- Disk I/O and capacity +- Network interface throughput and error rates + +--- + +## 5. ROS Publisher Rate Limiting (RA-01 L2) + +Limit sensor data publish rate to prevent communication overload. + +```cpp +ros::Publisher pub = nh.advertise("sensor_data", 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { + std_msgs::String msg; + msg.data = "sensor data"; + pub.publish(msg); + loop_rate.sleep(); +} +``` + +--- + +## 6. ROS2 QoS Security Profile (RA-01 L2) + +```yaml +QoSProfile: + reliability: RELIABLE + durability: TRANSIENT_LOCAL + history: KEEP_LAST + depth: 10 +``` diff --git a/skills-ko/kesekit-guide-ko/scripts/robot-security/sbom-audit.md b/skills-ko/kesekit-guide-ko/scripts/robot-security/sbom-audit.md new file mode 100644 index 0000000..1b1387f --- /dev/null +++ b/skills-ko/kesekit-guide-ko/scripts/robot-security/sbom-audit.md @@ -0,0 +1,84 @@ +# SBOM & Supply Chain Audit + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: SC-05 + +--- + +## 1. SBOM Generation with Syft (SC-05) + +Generate a Software Bill of Materials from source code or container images using Anchore Syft. + +```bash +# Syft를 통한 SBOM 생성 (JSON format) +syft <소스코드 경로> -o json > sbom.json +``` + +--- + +## 2. Vulnerability Scanning with Grype (SC-05) + +Scan the generated SBOM for known vulnerabilities (CVEs). + +```bash +# Grype를 통한 취약점 식별 +grype sbom://sbom.json +``` + +--- + +## 3. Package Manager Built-in Audit Commands (SC-05) + +Use built-in security features of each package manager to analyze declared dependencies and automatically scan for known vulnerabilities. + +### Node.js (NPM) + +```bash +npm audit +``` + +### Python (pip) + +```bash +pip-audit +``` + +### Java (Maven) + +```bash +mvn dependency-check:check +``` + +### .NET (NuGet) + +```bash +dotnet list package --vulnerable +``` + +### Rust (Cargo) + +```bash +cargo audit +``` + +--- + +## 4. CI/CD Pipeline Integration (SC-05) + +Integrate vulnerability scanning into CI/CD pipelines (GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins, etc.) to automatically detect vulnerabilities before deployment. + +### Vulnerability Response Record Fields + +| Field | Description | +|---|---| +| CVE ID | 취약점 식별자 | +| 구성요소 | 영향받는 컴포넌트(이름/버전) | +| 기술적 위험 | 공개 PoC/익스플로잇 존재 여부, CVSS 점수 | +| 비즈니스 영향 | 영향을 받는 서비스/데이터/운영 영향 | +| EoS 여부 | 해당 구성요소의 지원상태 | +| 우선 순위 | P0/P1/P2 또는 High/Medium/Low | +| 대응방안 | 패치/업그레이드/가상패치/격리 등 | +| SLA | 목표 기간 | +| 담당자 및 일정 | 책임부서, 담당자, 완료예정일 | +| 검증 방법 | 재스캔, 기능/회귀 테스트 결과 링크 | +| 상태 | 계획/진행/완료/예외(승인) | diff --git a/skills-ko/guide/references/ai-security/developer.md b/skills-ko/kesekit-guide-ko/templates/ai-security/developer.md similarity index 100% rename from skills-ko/guide/references/ai-security/developer.md rename to skills-ko/kesekit-guide-ko/templates/ai-security/developer.md diff --git a/skills-ko/kesekit-guide-ko/templates/ai-security/user-guide-checklist.md b/skills-ko/kesekit-guide-ko/templates/ai-security/user-guide-checklist.md new file mode 100644 index 0000000..903ec01 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/ai-security/user-guide-checklist.md @@ -0,0 +1,13 @@ +# AI 이용자 보안 체크리스트 요약 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +| # | 항목 | 확인 | +|---|------|:----:| +| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | +| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | +| 3 | AI 서비스 이용약관을 확인했는가? | □ | +| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | +| 5 | AI 출력 결과를 검증하고 있는가? | □ | +| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | +| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills-ko/guide/references/cii/admin.md b/skills-ko/kesekit-guide-ko/templates/cii/admin.md similarity index 100% rename from skills-ko/guide/references/cii/admin.md rename to skills-ko/kesekit-guide-ko/templates/cii/admin.md diff --git a/skills-ko/check/references/cii/cloud.md b/skills-ko/kesekit-guide-ko/templates/cii/cloud.md similarity index 82% rename from skills-ko/check/references/cii/cloud.md rename to skills-ko/kesekit-guide-ko/templates/cii/cloud.md index ef26ef5..42834e8 100644 --- a/skills-ko/check/references/cii/cloud.md +++ b/skills-ko/kesekit-guide-ko/templates/cii/cloud.md @@ -42,23 +42,4 @@ | CA-18 | 컨테이너/서버리스 보안 설정 | 중 | | CA-19 | 클라우드 서비스 가용성 관리 | 중 | -### 주요 점검 명령어 -```bash -# AWS -aws iam list-users -aws iam get-credential-report -aws ec2 describe-security-groups -aws s3api get-bucket-encryption --bucket -aws cloudtrail describe-trails - -# Azure -az ad user list -az network nsg list -az storage account list - -# GCP -gcloud iam service-accounts list -gcloud compute firewall-rules list -``` - ## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills-ko/guide/references/cii/control-system.md b/skills-ko/kesekit-guide-ko/templates/cii/control-system.md similarity index 100% rename from skills-ko/guide/references/cii/control-system.md rename to skills-ko/kesekit-guide-ko/templates/cii/control-system.md diff --git a/skills-ko/start/references/cii/database.md b/skills-ko/kesekit-guide-ko/templates/cii/database.md similarity index 82% rename from skills-ko/start/references/cii/database.md rename to skills-ko/kesekit-guide-ko/templates/cii/database.md index 67e8efc..d6847e0 100644 --- a/skills-ko/start/references/cii/database.md +++ b/skills-ko/kesekit-guide-ko/templates/cii/database.md @@ -17,23 +17,6 @@ | D-08 | 안전한 암호화 알고리즘 사용 | 상 | | D-09 | 로그인 실패 시 잠금정책 설정 | 중 | -### 주요 점검 명령어 -```sql --- Oracle: 계정 확인 -SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; --- Oracle: 비밀번호 변경 -ALTER USER <계정> IDENTIFIED BY <신규비밀번호>; - --- MSSQL: sa 비밀번호 변경 -ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; - --- MySQL: root 비밀번호 변경 -ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; - --- PostgreSQL: 역할 확인 -SELECT rolname, rolsuper FROM pg_roles; -``` - ## 2. 접근 관리 (7항목) | 코드 | 항목 | 중요도 | diff --git a/skills-ko/guide/references/cii/mobile.md b/skills-ko/kesekit-guide-ko/templates/cii/mobile.md similarity index 100% rename from skills-ko/guide/references/cii/mobile.md rename to skills-ko/kesekit-guide-ko/templates/cii/mobile.md diff --git a/skills-ko/fix/references/cii/network.md b/skills-ko/kesekit-guide-ko/templates/cii/network.md similarity index 86% rename from skills-ko/fix/references/cii/network.md rename to skills-ko/kesekit-guide-ko/templates/cii/network.md index 1f99ce4..e168fb3 100644 --- a/skills-ko/fix/references/cii/network.md +++ b/skills-ko/kesekit-guide-ko/templates/cii/network.md @@ -66,22 +66,4 @@ | N-37 | pad 차단 | 중 | | N-38 | mask-reply 차단 | 중 | -### 주요 점검 명령어 (Cisco IOS) -``` -! 계정 관리 -show running-config | include username -show running-config | include enable secret - -! 접근 관리 -show running-config | include line vty -show running-config | include access-class - -! SNMP -show running-config | include snmp-server - -! 불필요 서비스 -show running-config | include no service -show ip http server -``` - ## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills-ko/start/references/cii/pc.md b/skills-ko/kesekit-guide-ko/templates/cii/pc.md similarity index 82% rename from skills-ko/start/references/cii/pc.md rename to skills-ko/kesekit-guide-ko/templates/cii/pc.md index c3dd9fc..b5ca66b 100644 --- a/skills-ko/start/references/cii/pc.md +++ b/skills-ko/kesekit-guide-ko/templates/cii/pc.md @@ -41,22 +41,4 @@ | PC-17 | 이동식 미디어 자동실행 방지 | 상 | | PC-18 | 원격 지원 금지 정책 설정 | 중 | -### 주요 점검 명령어 -```powershell -# PC-01: 비밀번호 최대 사용기간 -net accounts | findstr "최대" - -# PC-04: 공유 폴더 -net share - -# PC-13~14: 백신 -Get-MpComputerStatus - -# PC-15: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled - -# PC-16: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -``` - ## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills-ko/guide/references/cii/physical.md b/skills-ko/kesekit-guide-ko/templates/cii/physical.md similarity index 100% rename from skills-ko/guide/references/cii/physical.md rename to skills-ko/kesekit-guide-ko/templates/cii/physical.md diff --git a/skills-ko/guide/references/cii/security-equip.md b/skills-ko/kesekit-guide-ko/templates/cii/security-equip.md similarity index 100% rename from skills-ko/guide/references/cii/security-equip.md rename to skills-ko/kesekit-guide-ko/templates/cii/security-equip.md diff --git a/skills-ko/fix/references/cii/unix.md b/skills-ko/kesekit-guide-ko/templates/cii/unix.md similarity index 68% rename from skills-ko/fix/references/cii/unix.md rename to skills-ko/kesekit-guide-ko/templates/cii/unix.md index b9688e3..969c52f 100644 --- a/skills-ko/fix/references/cii/unix.md +++ b/skills-ko/kesekit-guide-ko/templates/cii/unix.md @@ -21,35 +21,6 @@ | U-12 | 세션 종료 시간 설정 | 하 | | U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | -### 주요 점검 명령어 -```bash -# U-01: root 원격 접속 제한 -grep -i "PermitRootLogin" /etc/ssh/sshd_config -cat /etc/default/login | grep CONSOLE # Solaris -cat /etc/securetty # Linux - -# U-02: 비밀번호 정책 -cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" -cat /etc/security/pwquality.conf # Linux - -# U-03: 계정 잠금 -cat /etc/pam.d/system-auth | grep pam_tally -cat /etc/security/user | grep loginretries # AIX - -# U-04: shadow 파일 보호 -ls -la /etc/shadow - -# U-05: UID 0 점검 -awk -F: '$3==0 {print $1}' /etc/passwd - -# U-06: su 제한 -cat /etc/pam.d/su | grep pam_wheel -ls -la /usr/bin/su - -# U-12: 세션 타임아웃 -echo $TMOUT -``` - --- ## 2. 파일 및 디렉터리 관리 (20항목) @@ -77,38 +48,6 @@ echo $TMOUT | U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | | U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | -### 주요 점검 명령어 -```bash -# U-14: root PATH -echo $PATH | grep "::" -echo $PATH | grep ":$" - -# U-16~U-22: 주요 파일 권한 -ls -la /etc/passwd /etc/shadow /etc/hosts /etc/services -ls -la /etc/inetd.conf /etc/xinetd.conf /etc/syslog.conf /etc/rsyslog.conf - -# U-23: SUID/SGID -find / -perm -4000 -o -perm -2000 2>/dev/null - -# U-25: world writable -find / -type f -perm -002 2>/dev/null - -# U-26: /dev 점검 -find /dev -type f 2>/dev/null - -# U-27: rhosts -find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null - -# U-28: 접속 제한 -cat /etc/hosts.allow -cat /etc/hosts.deny -iptables -L - -# U-30: umask -umask -grep umask /etc/profile /etc/bashrc -``` - --- ## 3. 서비스 관리 (30항목) @@ -146,32 +85,6 @@ grep umask /etc/profile /etc/bashrc | U-62 | 로그인 시 경고 메시지 설정 | 하 | | U-63 | sudo 명령어 접근 관리 | 중 | -### 주요 점검 명령어 -```bash -# U-34~U-44: 불필요 서비스 점검 -systemctl list-unit-files --state=enabled -chkconfig --list # CentOS 6 -inetadm # Solaris - -# U-39~U-40: NFS -showmount -e -cat /etc/exports -cat /etc/dfs/dfstab # Solaris - -# U-45~U-48: 메일 서비스 -sendmail -d0.1 -bt < /dev/null 2>&1 | grep Version -postconf mail_version -cat /etc/mail/sendmail.cf | grep "O PrivacyOptions" - -# U-49~U-51: DNS -named -v -cat /etc/named.conf | grep "allow-transfer" - -# U-58~U-61: SNMP -cat /etc/snmp/snmpd.conf | grep -i community -ps -ef | grep snmp -``` - --- ## 4. 패치 관리 (1항목) @@ -180,14 +93,6 @@ ps -ef | grep snmp |------|------|:------:| | U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -```bash -# 패치 현황 -uname -a -rpm -qa --last | head -20 # Linux -showrev -p # Solaris -instfix -i | grep ML # AIX -``` - --- ## 5. 로그 관리 (4항목) @@ -198,20 +103,6 @@ instfix -i | grep ML # AIX | U-66 | 정책에 따른 시스템 로깅 설정 | 중 | | U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | -```bash -# U-65: NTP -ntpq -p -cat /etc/ntp.conf -chronyc sources # CentOS 8+ - -# U-66: 로깅 설정 -cat /etc/rsyslog.conf -cat /etc/syslog.conf - -# U-67: 로그 권한 -ls -la /var/log/ -``` - --- ## 판단 기준 diff --git a/skills-ko/guide/references/cii/virtualization.md b/skills-ko/kesekit-guide-ko/templates/cii/virtualization.md similarity index 100% rename from skills-ko/guide/references/cii/virtualization.md rename to skills-ko/kesekit-guide-ko/templates/cii/virtualization.md diff --git a/skills-ko/start/references/cii/web-service.md b/skills-ko/kesekit-guide-ko/templates/cii/web-service.md similarity index 78% rename from skills-ko/start/references/cii/web-service.md rename to skills-ko/kesekit-guide-ko/templates/cii/web-service.md index e3f96bd..9f6298a 100644 --- a/skills-ko/start/references/cii/web-service.md +++ b/skills-ko/kesekit-guide-ko/templates/cii/web-service.md @@ -49,26 +49,4 @@ | WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | | WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | -### 주요 점검 명령어 -```bash -# WEB-04: 디렉터리 리스팅 -# Apache -grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" -# Nginx -grep -i "autoindex" /etc/nginx/nginx.conf - -# WEB-09: 프로세스 권한 -ps -ef | grep httpd | grep -v root - -# WEB-16: 헤더 정보 노출 -# Apache: grep "ServerTokens" httpd.conf → Prod 설정 -# Nginx: grep "server_tokens" nginx.conf → off 설정 - -# WEB-18: WebDAV -grep -i "LoadModule.*dav" /etc/httpd/conf/httpd.conf - -# WEB-20: SSL/TLS -grep -i "SSLProtocol\|ssl_protocols" /etc/httpd/conf.d/ssl.conf /etc/nginx/nginx.conf -``` - ## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills-ko/start/references/cii/webapp.md b/skills-ko/kesekit-guide-ko/templates/cii/webapp.md similarity index 71% rename from skills-ko/start/references/cii/webapp.md rename to skills-ko/kesekit-guide-ko/templates/cii/webapp.md index 5a1888d..ca84427 100644 --- a/skills-ko/start/references/cii/webapp.md +++ b/skills-ko/kesekit-guide-ko/templates/cii/webapp.md @@ -44,27 +44,4 @@ | IL | 불필요한 정보 노출 | 중 | | AU | 부적절한 감사 로깅 | 중 | -### 주요 점검 패턴 -``` -# SQL Injection -- 문자열 연결 쿼리: "SELECT * FROM users WHERE id = '" + input -- 안전: PreparedStatement, 매개변수화 쿼리, ORM - -# XSS -- innerHTML, document.write(input), v-html -- 안전: textContent, DOMPurify, 자동 이스케이프 - -# Command Injection -- Runtime.exec(input), subprocess(shell=True) -- 안전: 화이트리스트 검증, execFile - -# CSRF -- POST 요청에 CSRF 토큰 누락 -- 안전: 프레임워크 CSRF 미들웨어 - -# File Upload -- 확장자 미검증, 웹 루트 내 저장 -- 안전: 화이트리스트, 웹 루트 외부 저장, 랜덤 파일명 -``` - ## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills-ko/guide/references/cii/windows.md b/skills-ko/kesekit-guide-ko/templates/cii/windows.md similarity index 74% rename from skills-ko/guide/references/cii/windows.md rename to skills-ko/kesekit-guide-ko/templates/cii/windows.md index cef3781..15a5c32 100644 --- a/skills-ko/guide/references/cii/windows.md +++ b/skills-ko/kesekit-guide-ko/templates/cii/windows.md @@ -21,24 +21,6 @@ | W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | | W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | -### 주요 점검 명령어 -```powershell -# W-01: Administrator 계정명 -Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select Name - -# W-02: Guest 비활성화 -Get-LocalUser -Name "Guest" | Select Enabled - -# W-04: 계정 잠금 -net accounts - -# W-06: 관리자 그룹 -net localgroup Administrators - -# W-09: 패스워드 정책 -net accounts -``` - --- ## 2. 서비스 관리 (23항목) @@ -69,23 +51,6 @@ net accounts | W-36 | 원격터미널 접속 타임아웃 설정 | 중 | | W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | -### 주요 점검 명령어 -```powershell -# W-17: 기본 공유 -net share -Get-SmbShare - -# W-18: 서비스 목록 -Get-Service | Where-Object {$_.Status -eq "Running"} - -# W-19: IIS -Get-Service W3SVC - -# W-29~31: SNMP -Get-Service SNMP -reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" -``` - --- ## 3. 패치 관리 (2항목) @@ -95,15 +60,6 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommuniti | W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | | W-39 | 백신 프로그램 업데이트 | 상 | -```powershell -# W-38: 패치 현황 -Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 10 -systeminfo | findstr "KB" - -# W-39: 백신 -Get-MpComputerStatus # Windows Defender -``` - --- ## 4. 로그 관리 (4항목) @@ -115,17 +71,6 @@ Get-MpComputerStatus # Windows Defender | W-42 | 이벤트 로그 관리 설정 | 하 | | W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | -```powershell -# W-40: 감사 정책 -auditpol /get /category:* - -# W-41: NTP -w32tm /query /status - -# W-42: 이벤트 로그 설정 -Get-EventLog -List -``` - --- ## 5. 보안 관리 (21항목) @@ -154,28 +99,6 @@ Get-EventLog -List | W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | | W-64 | 윈도우 방화벽 설정 | 중 | -### 주요 점검 명령어 -```powershell -# W-44: 원격 레지스트리 -Get-Service RemoteRegistry | Select Status - -# W-46: SAM 파일 -icacls C:\Windows\System32\config\SAM - -# W-47: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure - -# W-52: Autologon -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon - -# W-59: LAN Manager -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel - -# W-64: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled -``` - --- ## 통계 diff --git a/skills-ko/guide/references/robot-security/cyber-resilience.md b/skills-ko/kesekit-guide-ko/templates/robot-security/cyber-resilience.md similarity index 100% rename from skills-ko/guide/references/robot-security/cyber-resilience.md rename to skills-ko/kesekit-guide-ko/templates/robot-security/cyber-resilience.md diff --git a/skills-ko/guide/references/robot-security/iec62443.md b/skills-ko/kesekit-guide-ko/templates/robot-security/iec62443.md similarity index 100% rename from skills-ko/guide/references/robot-security/iec62443.md rename to skills-ko/kesekit-guide-ko/templates/robot-security/iec62443.md diff --git a/skills-ko/guide/references/robot-security/overview.md b/skills-ko/kesekit-guide-ko/templates/robot-security/overview.md similarity index 100% rename from skills-ko/guide/references/robot-security/overview.md rename to skills-ko/kesekit-guide-ko/templates/robot-security/overview.md diff --git a/skills-ko/guide/references/robot-security/ssdf.md b/skills-ko/kesekit-guide-ko/templates/robot-security/ssdf.md similarity index 100% rename from skills-ko/guide/references/robot-security/ssdf.md rename to skills-ko/kesekit-guide-ko/templates/robot-security/ssdf.md diff --git a/skills-ko/guide/references/robot-security/supply-chain.md b/skills-ko/kesekit-guide-ko/templates/robot-security/supply-chain.md similarity index 100% rename from skills-ko/guide/references/robot-security/supply-chain.md rename to skills-ko/kesekit-guide-ko/templates/robot-security/supply-chain.md diff --git a/skills-ko/guide/references/robot-security/wireless.md b/skills-ko/kesekit-guide-ko/templates/robot-security/wireless.md similarity index 100% rename from skills-ko/guide/references/robot-security/wireless.md rename to skills-ko/kesekit-guide-ko/templates/robot-security/wireless.md diff --git a/skills-ko/kesekit-guide-ko/templates/secure-coding/javascript.md b/skills-ko/kesekit-guide-ko/templates/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/skills-ko/kesekit-guide-ko/templates/secure-coding/python.md b/skills-ko/kesekit-guide-ko/templates/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/skills-ko/kesekit-guide-ko/templates/space-security/access-control.md b/skills-ko/kesekit-guide-ko/templates/space-security/access-control.md new file mode 100644 index 0000000..7232d6a --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/space-security/access-control.md @@ -0,0 +1,49 @@ +# Access Control & Authentication Checklist + +> Domains: AC (Access Control, 12 items) + IA (Identification & Authentication, 2 items) + +## AC — Access Control (12 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| AC-01 | Access Control Policy | Restrict access to authorized users/processes/devices only | Access control policy established, authorized entities identified, per-system access rules defined | +| AC-02 | Least Privilege | Grant minimum necessary permissions | Least privilege procedures, management approval, periodic review | +| AC-03 | Privileged Access Use | Restrict and audit privileged account usage | Privileged account types defined/limited, audit logs stored/reviewed | +| AC-04 | Information Flow Control | Control information flow within and between systems | Flow control policy, source/destination identification, change approval | +| AC-05 | Separation of Duties | Prevent authority abuse through role separation | Duty separation policy, critical duties separated, compensating controls | +| AC-06 | Failed Login Attempts | Protect accounts from brute-force attacks | Max attempt limits, auto-lockout policy, alert/notification on failures | +| AC-07 | Session Lock & Termination | Prevent unauthorized access during idle sessions | Auto-lock on inactivity, re-authentication required, session termination conditions | +| AC-08 | Remote Access Control | Prevent unauthorized remote access | Remote access policy, device security check/MFA/encryption, monitoring/logging | +| AC-09 | Wireless Access | Prevent unauthorized wireless connections | Wireless policy, authentication/encryption, unauthorized AP prevention | +| AC-10 | Mobile Device Control | Control mobile device connections | Mobile device policy, data encryption, loss/theft protection | +| AC-11 | External Connection Control | Protect system boundaries from external systems | External systems identified, approved methods only, continuous monitoring | +| AC-12 | Public Information Control | Prevent sensitive information disclosure | Pre-publication review/approval, designated reviewers, periodic content review | + +### AC Protection Measures Summary + +| Category | Measures | +|----------|----------| +| Account Management | 1-person-1-account, default account deletion, immediate revocation on termination, annual full review | +| Authentication | MFA for privileged access, SSH/SFTP/VPN only, 8+ char passwords with 2+ character types | +| Network | ACL-based deny-all, IP/port whitelisting, WPA3/WPA2-Enterprise, WIPS deployment | +| Session | 10-min inactivity lock, screensaver with password, session timeout enforcement | +| Remote Access | 3-step procedure (request/approve/monitor), VPN+MFA, high-risk assets remote-access-denied by default | +| Monitoring | Failed login alerts to SOC, audit log analysis, access log review | + +## IA — Identification & Authentication (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IA-01 | Identification & Authentication | Prevent unauthorized access and credential theft | Unique identifiers for users/processes/devices, password complexity (upper+lower+special+number, 8+ chars), cryptographic protection, reuse prevention | +| IA-02 | Multi-Factor Authentication | Strengthen privileged account authentication, prevent replay attacks | MFA for privileged network access, replay attack prevention (challenge-response/timestamp) | + +### IA Protection Measures + +| Measure | Detail | +|---------|--------| +| Password Policy | Min 8 chars, 3+ character types, 90-day rotation, history check (last 5) | +| MFA Methods | OTP, certificate, biometric — at least 2 factors required | +| Replay Prevention | Challenge-response protocol, timestamp-based token validation | +| Credential Storage | Hashed (SHA-256+), no plaintext storage, encrypted transmission | + +## Total: 14 Items (AC: 12 + IA: 2) diff --git a/skills-ko/kesekit-guide-ko/templates/space-security/governance.md b/skills-ko/kesekit-guide-ko/templates/space-security/governance.md new file mode 100644 index 0000000..3ff7049 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/space-security/governance.md @@ -0,0 +1,90 @@ +# Governance, Personnel, Physical & Risk Checklist + +> Domains: PS (2) + PE (3) + RA (2) + SG (4) + CP (2) = 13 items + +## PS — Personnel Security (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PS-01 | Personnel Security | Control insider threats, prevent unauthorized personnel access | Background check on hiring, access review/revocation on role change/termination, disciplinary procedures | +| PS-02 | Security Awareness Training | Prevent security incidents, strengthen role-based security competency | Awareness activities, professional training plans, annual execution including contractors | + +### PS Protection Measures + +| Measure | Detail | +|---------|--------| +| Background Check | Resume/education/identity verification before hiring | +| Termination | Immediate access revocation, asset return, NDA enforcement | +| Training | Annual minimum, phishing simulation, role-specific curriculum, contractor inclusion | + +## PE — Physical & Environmental Security (3 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PE-01 | Physical Access Control | Block unauthorized physical access, ensure asset integrity | Entry control/monitoring, visitor escort, access log retention, control device management | +| PE-02 | Alternate Work Site Security | Maintain confidentiality in alternate work environments | Security control standards, work device security, secure remote access | +| PE-03 | Protective Equipment Operation | Ensure physical safety against environmental threats | Equipment inspection, environmental controls (temperature/humidity/fire/water/power) | + +### PE Protection Measures + +| Category | Measures | +|----------|----------| +| Access Zones | Controlled/restricted/reception areas designated, card reader/biometric, CCTV | +| Visitor Policy | Escort required, visitor log, temporary badge | +| Alternate Sites | Home/travel/remote office classification, organization-issued device, VPN+MFA | +| Environmental | UPS/emergency generator/dual power, 10-32C server room, fire detection/suppression, periodic inspection | + +## RA — Risk Assessment & Security Evaluation (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| RA-01 | Risk Assessment | Identify, assess, and manage organizational risks | Risk management framework, periodic assessment (annual+) | +| RA-02 | Security Control Monitoring & Effectiveness | Ensure continuous security control effectiveness | Effectiveness evaluation framework, periodic review/update | + +### RA Protection Measures + +| Measure | Detail | +|---------|--------| +| Assessment Method | Baseline/detailed/combined approach, management/technical/physical/legal domains | +| Frequency | Annual minimum, ad-hoc on major changes | +| Metrics | KPI/security performance indicators: violation rate, infection rate, scanning completion rate | +| Responsibility | Designated monitoring officer, management reporting | + +## SG — Security Governance (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SG-01 | Security Policy Establishment | Ensure policy effectiveness and currency | Top-level policy creation/approval/dissemination, periodic review/update, improvement plans | +| SG-02 | Security Roles & Responsibilities | Clarify security accountability | CISO designation, role/responsibility assignment/review | +| SG-03 | Asset Management | Maintain asset integrity and security posture | Asset identification/inventory/updates, classification/owner assignment | +| SG-04 | Legal Requirements Compliance | Ensure regulatory compliance | Legal requirements identification/integration, independent compliance review | + +### SG Key Regulations + +| Regulation | Relevance | +|-----------|-----------| +| Personal Information Protection Act | Data collected by satellite services | +| ICT Infrastructure Protection Act | CII designation for space systems | +| Radio Waves Act | Satellite frequency management | +| Space Development Promotion Act | Space industry regulations | +| Cloud Computing Act | GSaaS cloud infrastructure | +| NIS2 (EU) | Space as essential service sector | +| CMMC (US) | Defense supply chain requirements | + +## CP — Contingency Planning (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| CP-01 | Contingency Plan | Ensure space system operational continuity | Disaster type identification, impact analysis, critical service identification, recovery procedures | +| CP-02 | Backup & Redundancy Management | Ensure critical information/system availability | Periodic backup, safe storage, regular testing, system redundancy | + +### CP Protection Measures + +| Measure | Detail | +|---------|--------| +| RTO/RPO | Define for each critical service (satellite control, MOC, PCC) | +| Backup Plan | Target/frequency/retention/method defined, backup confidentiality/integrity/availability verified | +| Redundancy | Network/system dual paths, failover testing | +| BCP | Business continuity management system, emergency contact chain, recovery organization | + +## Total: 13 Items (PS: 2 + PE: 3 + RA: 2 + SG: 4 + CP: 2) diff --git a/skills-ko/kesekit-guide-ko/templates/space-security/operations.md b/skills-ko/kesekit-guide-ko/templates/space-security/operations.md new file mode 100644 index 0000000..d1a2d0d --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/space-security/operations.md @@ -0,0 +1,47 @@ +# Operations & Incident Response Checklist + +> Domains: SO (System/Service Operations Management, 9 items) + IR (Incident Response, 2 items) + +## SO — System/Service Operations Management (9 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SO-01 | Maintenance Control | Control maintenance personnel, tools, and remote access | Work request/approval/logging, NDA, media sanitization, VPN+MFA for remote maintenance | +| SO-02 | System Audit & Log Analysis | Detect unauthorized/abnormal activities, ensure accountability | Audit log generation/retention, tamper protection, restricted admin access, integrated analysis/reporting | +| SO-03 | Time Synchronization | Ensure audit log accuracy and reliability | NTP standard time sync, internal NTP server, periodic verification | +| SO-04 | Portable Storage Security | Protect storage media confidentiality/integrity | Classification marking, encrypted transfer, unauthorized media control, secure disposal | +| SO-05 | Configuration Management | Establish configuration baselines, maintain integrity | HW/SW/FW baseline identification, security configuration documentation, periodic monitoring | +| SO-06 | Security Requirements Definition | Define security requirements from planning phase | Authentication/access control/encryption/logging requirements in RFP, secure coding standards | +| SO-07 | Change Management | Ensure integrity during system/application changes | Change review/approval/recording, pre-change security impact analysis, access restrictions | +| SO-08 | Development Testing & Evaluation | Verify security requirement implementation | Acceptance testing, source code verification, vulnerability scanning in production-equivalent environment | +| SO-09 | Function Minimization & SW Control | Remove unnecessary features, control unauthorized software | Essential functions only, blacklist/whitelist policies, disable DHCP/Print Spooler etc., block P2P/webhard | + +### SO Protection Measures Summary + +| Category | Key Actions | +|----------|-------------| +| Maintenance | Approved personnel only, clean PC with AV scan, media control, session recording | +| Logging | All systems generate audit logs, tamper-proof storage, min 1-year retention, weekly review | +| Media Control | USB port lock, media control solution, encrypted transport, overwrite-based disposal | +| Configuration | Baseline registry/account/network settings, monthly drift detection, rollback capability | +| Secure Development | Security requirements in RFP, secure coding per language (Java/PHP/ASP/C), code review | +| Change Control | Formal approval process, security impact analysis, revision history, pre/post testing | + +## IR — Incident Response (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IR-01 | Incident Handling & Testing | Minimize damage and enable rapid recovery | Incident classification, detection/response/recovery procedures, post-incident review, periodic drills | +| IR-02 | Incident Reporting | Enable consistent response through timely reporting | Internal reporting chain, regulatory notification, stakeholder communication | + +### IR Protection Measures + +| Measure | Detail | +|---------|--------| +| Incident Types | Malware, unauthorized access, service disruption, data breach, physical compromise | +| Response Phases | Preparation > Detection > Investigation > Analysis > Containment > Eradication > Recovery | +| Reporting Timeline | Internal: immediate; KISA: within 24 hours (per ICT Infrastructure Act Art.48-3); NIS2: 24h/72h/1month staged | +| Emergency Contacts | Quarterly review, 24/7 contact chain, regulatory liaison designated | +| Testing | Annual tabletop exercise, biannual red team drill, post-exercise lessons learned | + +## Total: 11 Items (SO: 9 + IR: 2) diff --git a/skills-ko/kesekit-guide-ko/templates/space-security/supply-chain.md b/skills-ko/kesekit-guide-ko/templates/space-security/supply-chain.md new file mode 100644 index 0000000..750fe6f --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/space-security/supply-chain.md @@ -0,0 +1,47 @@ +# Supply Chain Management Checklist + +> Domain: SM (Supply Chain Management, 4 items) + +## SM — Supply Chain Management (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SM-01 | Supply Chain Protection | Identify and mitigate supply chain risks | Supply chain security policy, vendor selection criteria/contract security requirements, vendor registry updates | +| SM-02 | Pre-Acquisition Evaluation | Prevent vulnerable assets from entering operations | Pre-acquisition/update vulnerability scanning, acceptance testing, counterfeit inspection | +| SM-03 | All-Source Information Use | Achieve software transparency through SBOM | Require SBOM from suppliers, use SBOM for transparency/continuous management | +| SM-04 | Tampering/Counterfeiting Prevention & Detection | Detect and block supply chain tampering | Verify vendor development/distribution integrity, acceptance/operations integrity verification | + +### SM Protection Measures + +| Category | Measures | +|----------|----------| +| Contract Security | Training/incident notification/vulnerability remediation/audit rights/data disposal on termination in contracts | +| SBOM Management | SPDX/CycloneDX standard format, open-source/commercial SW identification, CVE periodic scanning | +| Integrity Verification | Hash value/digital signature verification, SBOM-based impact identification on new vulnerabilities | +| Vendor Management | Periodic vendor security audits, vendor registry maintenance, conditional acceptance criteria | + +## Supply Chain Architecture (3 Zones) + +### Satellite/Launch Vehicle Manufacturer +| Component | Security Focus | +|-----------|---------------| +| SW Development Server | IDE plugin verification, malware scanning | +| Library DB | Open-source library verification, vulnerability scanning | +| Code DB | Source code integrity, access control | +| Manufacturing Systems | Satellite bus, payload, launch vehicle manufacturing integrity | + +### Ground Station Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Control System | Build pipeline security, backdoor prevention | +| SW Development Server | Secure development environment | +| SW Update Server | Update file integrity verification, secure transmission | +| Library/Code DB | Vulnerable open-source blocking, SBOM verification | + +### Satellite Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Application System | Hard-coded credential prevention | +| SW Development Server | Remote work environment security | +| Data Processing System | Maintenance account management | +| Library/Code DB | Auto-build malicious open-source prevention | diff --git a/skills-ko/kesekit-guide-ko/templates/space-security/system-security.md b/skills-ko/kesekit-guide-ko/templates/space-security/system-security.md new file mode 100644 index 0000000..7297ada --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/space-security/system-security.md @@ -0,0 +1,46 @@ +# System & Communication Security Checklist + +> Domains: SC (System & Communication Security, 7 items) + SI (System & Information Integrity, 4 items) + +## SC — System & Communication Security (7 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SC-01 | Boundary Protection | Block unauthorized communications at boundaries | Network segmentation, DMZ deployment, communication encryption/monitoring, deny-all ACL | +| SC-02 | Security Engineering & Function Separation | Defense-in-depth, eliminate single points of failure | Security engineering principles, admin/user function separation, Secure by Design | +| SC-03 | Stored & Transmitted Information Security | Protect command/telemetry/log confidentiality and integrity | Storage encryption, uplink/downlink encryption, shared resource protection | +| SC-04 | Communication Security | Establish/maintain/terminate secure sessions | Default deny policy, authenticated/integrity-checked channels, session timeout | +| SC-05 | Encryption | Apply cryptographic algorithms and manage keys | Approved algorithms, key lifecycle management (create/distribute/store/retire) | +| SC-06 | Collaborative Computing Devices | Prevent remote camera/mic activation, prevent leaks | Device inventory, remote activation blocked, LED indicator required | +| SC-07 | Mobile Code & VoIP Control | Prevent malicious code execution and unauthorized VoIP | Mobile code execution control, VoIP usage restriction, monitoring | + +### SC Protection Measures + +| Category | Measures | +|----------|----------| +| Network Segmentation | Physical/logical separation, DMZ for public servers, satellite-control/operations/internet isolation | +| Encryption Standards | AES-256/ARIA-256, TLS 1.2+, IPsec VPN, CCSDS 352.0-B-2 for space systems | +| Integrity Verification | Digital signatures, HMAC, memory/buffer initialization | +| Session Management | mTLS, split-tunneling blocked, session ID rotation, 2-30 min timeout | +| Cryptographic Keys | AES-256, SHA-256+, RSA-4096+; PROHIBIT TDEA/MD5/SHA-1; full key lifecycle management | +| Code Control | ActiveX/Java Runtime disabled, script whitelisting, signed code only, SRTP for VoIP | + +## SI — System & Information Integrity (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SI-01 | Vulnerability Scanning & Flaw Remediation | Identify and fix system/application vulnerabilities | Periodic scanning, immediate scan on new vulnerabilities, flaw identification/remediation/reporting | +| SI-02 | Malicious Code Prevention | Prevent virus/worm/ransomware infiltration | Anti-malware on all systems, periodic/real-time scanning, signature updates | +| SI-03 | Security Alerts & Advisories | Monitor and respond to security alerts | Continuous monitoring of KISA/NCSC/CISA/NIST NVD, impact analysis, patch/hardening | +| SI-04 | System & Communication Traffic Monitoring | Detect abnormal traffic in real-time | Monitoring policy, inbound/outbound monitoring, result analysis/response | + +### SI Protection Measures + +| Measure | Detail | +|---------|--------| +| Vulnerability Management | Network/server/security/app/web scanning, CWE/CVE-based, prioritized remediation | +| Anti-Malware | Enterprise AV on all assets, daily+ updates, P2P/webhard blocked, central management | +| Alert Monitoring | RSS/email subscription to KISA/CISA/NVD, internal notification chain, patch within SLA | +| Traffic Monitoring | IDS/IPS at boundaries, access/security/network log integration, automated alerting | + +## Total: 11 Items (SC: 7 + SI: 4) diff --git a/skills-ko/kesekit-guide-ko/templates/zero-trust/app-data.md b/skills-ko/kesekit-guide-ko/templates/zero-trust/app-data.md new file mode 100644 index 0000000..f8d1195 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/zero-trust/app-data.md @@ -0,0 +1,162 @@ +# Application & Data Checklist + +> Zero Trust Maturity Assessment — Application (AP) & Data (DA) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## AP — 애플리케이션 및 워크로드 (Application) (60 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AP-01 | 리소스 권한 부여 및 통합 | 접근에 대한 사용자/시스템 권한을 수동으로 관리하는가? | Traditional | Critical | +| ZT-AP-02 | 리소스 권한 부여 및 통합 | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | Traditional | Critical | +| ZT-AP-03 | 리소스 권한 부여 및 통합 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | Initial | High | +| ZT-AP-04 | 리소스 권한 부여 및 통합 | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | Initial | High | +| ZT-AP-05 | 리소스 권한 부여 및 통합 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-06 | 리소스 권한 부여 및 통합 | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-07 | 리소스 권한 부여 및 통합 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | Optimal | Low | +| ZT-AP-08 | 리소스 권한 부여 및 통합 | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | Optimal | Low | +| ZT-AP-09 | 리소스 권한 부여 및 통합 | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | Optimal | Low | +| ZT-AP-10 | 리소스 권한 부여 및 통합 | 모든 리소스 권한 부여가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-11 | 지속적인 모니터링 및 진행 중인 승인 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | Traditional | Critical | +| ZT-AP-12 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-AP-13 | 지속적인 모니터링 및 진행 중인 승인 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | Initial | High | +| ZT-AP-14 | 지속적인 모니터링 및 진행 중인 승인 | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | Initial | High | +| ZT-AP-15 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | Advanced | Medium | +| ZT-AP-16 | 지속적인 모니터링 및 진행 중인 승인 | 보안 승인 프로세스를 자동화할 수 있는가? | Advanced | Medium | +| ZT-AP-17 | 지속적인 모니터링 및 진행 중인 승인 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | Optimal | Low | +| ZT-AP-18 | 원격 접속 | VPN을 통해서 외부 접속을 지원하는가? | Traditional | Critical | +| ZT-AP-19 | 원격 접속 | 애플리케이션에 대한 접근제어가 제한적인가? | Traditional | Critical | +| ZT-AP-20 | 원격 접속 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | Initial | High | +| ZT-AP-21 | 원격 접속 | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | Advanced | Medium | +| ZT-AP-22 | 원격 접속 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | Advanced | Medium | +| ZT-AP-23 | 원격 접속 | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | Optimal | Low | +| ZT-AP-24 | 원격 접속 | AI를 활용하여 원격 접속 보안을 고도화 하였는가? | Optimal | Low | +| ZT-AP-25 | 원격 접속 | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | Optimal | Low | +| ZT-AP-26 | 안전한 애플리케이션 배포 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | Traditional | Critical | +| ZT-AP-27 | 안전한 애플리케이션 배포 | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | Traditional | Critical | +| ZT-AP-28 | 안전한 애플리케이션 배포 | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | Traditional | Critical | +| ZT-AP-29 | 안전한 애플리케이션 배포 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | Initial | High | +| ZT-AP-30 | 안전한 애플리케이션 배포 | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | Initial | High | +| ZT-AP-31 | 안전한 애플리케이션 배포 | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | Initial | High | +| ZT-AP-32 | 안전한 애플리케이션 배포 | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | Initial | High | +| ZT-AP-33 | 안전한 애플리케이션 배포 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | Advanced | Medium | +| ZT-AP-34 | 안전한 애플리케이션 배포 | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | Advanced | Medium | +| ZT-AP-35 | 안전한 애플리케이션 배포 | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | Advanced | Medium | +| ZT-AP-36 | 안전한 애플리케이션 배포 | 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | Advanced | Medium | +| ZT-AP-37 | 안전한 애플리케이션 배포 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | Optimal | Low | +| ZT-AP-38 | 안전한 애플리케이션 배포 | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | Optimal | Low | +| ZT-AP-39 | 애플리케이션 인벤토리 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | Traditional | Critical | +| ZT-AP-40 | 애플리케이션 인벤토리 | 애플리케이션 기본 정보를 기록하여 관리하는가? | Traditional | Critical | +| ZT-AP-41 | 애플리케이션 인벤토리 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | Initial | High | +| ZT-AP-42 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가/관리할 수 있는가? | Advanced | Medium | +| ZT-AP-43 | 애플리케이션 인벤토리 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | Optimal | Low | +| ZT-AP-44 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-AP-45 | 보안 소프트웨어 개발 및 통합 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | Traditional | Critical | +| ZT-AP-46 | 보안 소프트웨어 개발 및 통합 | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | Traditional | Critical | +| ZT-AP-47 | 보안 소프트웨어 개발 및 통합 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | Initial | High | +| ZT-AP-48 | 보안 소프트웨어 개발 및 통합 | DevSecOps 문화를 도입하였는가? | Initial | High | +| ZT-AP-49 | 보안 소프트웨어 개발 및 통합 | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | Initial | High | +| ZT-AP-50 | 보안 소프트웨어 개발 및 통합 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | Advanced | Medium | +| ZT-AP-51 | 보안 소프트웨어 개발 및 통합 | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | Advanced | Medium | +| ZT-AP-52 | 보안 소프트웨어 개발 및 통합 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | Optimal | Low | +| ZT-AP-53 | 보안 소프트웨어 개발 및 통합 | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | Optimal | Low | +| ZT-AP-54 | 보안 소프트웨어 개발 및 통합 | 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-55 | 소프트웨어 위험 관리 | 최소한의 위험 요소가 식별되고 문서화 하였는가? | Traditional | Critical | +| ZT-AP-56 | 소프트웨어 위험 관리 | 소프트웨어 위험 관리 계획이 수립되어 있는가? | Traditional | Critical | +| ZT-AP-57 | 소프트웨어 위험 관리 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | Initial | High | +| ZT-AP-58 | 소프트웨어 위험 관리 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | Advanced | Medium | +| ZT-AP-59 | 소프트웨어 위험 관리 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | Optimal | Low | +| ZT-AP-60 | 소프트웨어 위험 관리 | 맞춤형 공격에 대응 가능한가? | Optimal | Low | + +### AP Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 리소스 권한 부여 및 통합 | 수동 권한 관리, 정적 접근제어 | 중앙 집중식 관리 | 컨텍스트 기반 최소 권한, 정밀 관리 | 실시간 분석, 자동 권한 부여/회수, 완전 자동화 | +| 지속적인 모니터링 및 승인 | 수동 모니터링, 수동 이벤트 기록 | 실시간 이벤트 수집/분석, 보안 검토 | AI 분석, 승인 자동화 | 실시간 탐지, 위협 사전 예측 | +| 원격 접속 | VPN 외부 접속, 제한적 접근제어 | 자동 보안 상태 평가 | 실시간 모니터링, 맞춤형 정책 | 동적 보안 정책, AI 고도화, 즉각 차단 | +| 안전한 애플리케이션 배포 | 수동 코드 검토, 배포 절차, 접근제어 | 자동화 파이프라인, CI/CD 취약점 검사, 무결성 검사 | 지속적 모니터링, 정책 자동 검증, 즉각 대응 | 완전 자동 배포, AI 위협 탐지 통합 | +| 애플리케이션 인벤토리 | 수동 목록화, 기본 정보 기록 | 자동 식별/관리 | 보안 상태 평가/관리 | AI 실시간 반영, 보안 시스템 통합 | +| 보안 SW 개발 및 통합 | 보안 코딩 표준, 수동 테스트 | SDLC 통합, DevSecOps, SBOM | 서드파티 자동 검사, 전체 SBOM | 프로세스 격리, 런타임 분석, 완전 자동화 | +| 소프트웨어 위험 관리 | 위험 식별/문서화, 관리 계획 | 위험 평가 프로세스 | 공급망 보안, 전주기 자동화 | AI 예측 분석, 맞춤형 공격 대응 | + +--- + +## DA — 데이터 (Data) (58 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DA-01 | 데이터 카탈로그 위험 정렬 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | Traditional | Critical | +| ZT-DA-02 | 데이터 카탈로그 위험 정렬 | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | Traditional | Critical | +| ZT-DA-03 | 데이터 카탈로그 위험 정렬 | 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | Traditional | Critical | +| ZT-DA-04 | 데이터 카탈로그 위험 정렬 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | Initial | High | +| ZT-DA-05 | 데이터 카탈로그 위험 정렬 | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | Initial | High | +| ZT-DA-06 | 데이터 카탈로그 위험 정렬 | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | Initial | High | +| ZT-DA-07 | 데이터 카탈로그 위험 정렬 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | Advanced | Medium | +| ZT-DA-08 | 데이터 카탈로그 위험 정렬 | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-DA-09 | 데이터 카탈로그 위험 정렬 | 데이터 사용 패턴 분석이 가능한가? | Advanced | Medium | +| ZT-DA-10 | 데이터 카탈로그 위험 정렬 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | Optimal | Low | +| ZT-DA-11 | 데이터 카탈로그 위험 정렬 | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | Optimal | Low | +| ZT-DA-12 | 기업 데이터 거버넌스 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | Traditional | Critical | +| ZT-DA-13 | 기업 데이터 거버넌스 | 데이터 소유자와 관리자를 지정하였는가? | Traditional | Critical | +| ZT-DA-14 | 기업 데이터 거버넌스 | 데이터 거버넌스 프레임워크가 도입되어 있는가? | Traditional | Critical | +| ZT-DA-15 | 기업 데이터 거버넌스 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | Initial | High | +| ZT-DA-16 | 기업 데이터 거버넌스 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | Advanced | Medium | +| ZT-DA-17 | 기업 데이터 거버넌스 | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | Advanced | Medium | +| ZT-DA-18 | 기업 데이터 거버넌스 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | Optimal | Low | +| ZT-DA-19 | 데이터 접근제어 | 데이터 접근 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-20 | 데이터 접근제어 | 데이터 접근권한이 수동으로 부여되는가? | Traditional | Critical | +| ZT-DA-21 | 데이터 접근제어 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-22 | 데이터 접근제어 | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | Initial | High | +| ZT-DA-23 | 데이터 접근제어 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | Advanced | Medium | +| ZT-DA-24 | 데이터 접근제어 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-25 | 데이터 암호화 및 권한 관리 | 데이터를 수동으로 암호화하는가? | Traditional | Critical | +| ZT-DA-26 | 데이터 암호화 및 권한 관리 | 암호화 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-27 | 데이터 암호화 및 권한 관리 | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-28 | 데이터 암호화 및 권한 관리 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | Initial | High | +| ZT-DA-29 | 데이터 암호화 및 권한 관리 | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-30 | 데이터 암호화 및 권한 관리 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | Advanced | Medium | +| ZT-DA-31 | 데이터 암호화 및 권한 관리 | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | Advanced | Medium | +| ZT-DA-32 | 데이터 암호화 및 권한 관리 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-33 | 데이터 암호화 및 권한 관리 | 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | Optimal | Low | +| ZT-DA-34 | 데이터 라벨링 및 태그 지정 | 라벨링 및 태그 지정 지침을 수립하였는가? | Traditional | Critical | +| ZT-DA-35 | 데이터 라벨링 및 태그 지정 | 일관된 데이터 분류 체계가 마련되어 있는가? | Traditional | Critical | +| ZT-DA-36 | 데이터 라벨링 및 태그 지정 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별/분류하는가? | Initial | High | +| ZT-DA-37 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | Initial | High | +| ZT-DA-38 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | Initial | High | +| ZT-DA-39 | 데이터 라벨링 및 태그 지정 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류/식별 가능한가? | Advanced | Medium | +| ZT-DA-40 | 데이터 라벨링 및 태그 지정 | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | Advanced | Medium | +| ZT-DA-41 | 데이터 라벨링 및 태그 지정 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | Optimal | Low | +| ZT-DA-42 | 데이터 라벨링 및 태그 지정 | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | Optimal | Low | +| ZT-DA-43 | 데이터 손실 방지 (DLP) | DLP 정책을 수립하고 수동으로 평가하는가? | Traditional | Critical | +| ZT-DA-44 | 데이터 손실 방지 (DLP) | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | Traditional | Critical | +| ZT-DA-45 | 데이터 손실 방지 (DLP) | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | Initial | High | +| ZT-DA-46 | 데이터 손실 방지 (DLP) | DLP 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-DA-47 | 데이터 손실 방지 (DLP) | DLP 솔루션이 모니터링 모드로 동작하는가? | Initial | High | +| ZT-DA-48 | 데이터 손실 방지 (DLP) | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | Advanced | Medium | +| ZT-DA-49 | 데이터 손실 방지 (DLP) | DLP 솔루션이 방지 모드로 사용되는가? | Advanced | Medium | +| ZT-DA-50 | 데이터 손실 방지 (DLP) | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | Optimal | Low | +| ZT-DA-51 | 데이터 손실 방지 (DLP) | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | Optimal | Low | +| ZT-DA-52 | 데이터 모니터링 및 감지 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | Traditional | Critical | +| ZT-DA-53 | 데이터 모니터링 및 감지 | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-54 | 데이터 모니터링 및 감지 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | Initial | High | +| ZT-DA-55 | 데이터 모니터링 및 감지 | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | Initial | High | +| ZT-DA-56 | 데이터 모니터링 및 감지 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-DA-57 | 데이터 모니터링 및 감지 | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | Advanced | Medium | +| ZT-DA-58 | 데이터 모니터링 및 감지 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | Optimal | Low | + +### DA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 데이터 카탈로그 위험 정렬 | 초기 카탈로그, 수동 분류, 위험 평가 문서화 | 자동 카탈로그, 자동 수집/분류, 기준 마련 | 민감도 분석, 보호 정책, 패턴 분석 | AI 실시간 분석, 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 정책 수립, 소유자 지정, 프레임워크 | 정기적 감사/검토 | 자동화, 실시간 모니터링 | 전체 시스템 통합 관리 | +| 데이터 접근제어 | 접근 정책 수립, 수동 권한 부여 | 중앙 집중식, 최소 권한 확인 | ABAC 컨텍스트 기반 | AI 실시간 권한 조정 | +| 데이터 암호화 및 권한 관리 | 수동 암호화, 정책 수립, 초기 관리 체계 | 자동 암호화, 중앙 집중식 관리 | 고급 암호화, RBAC+ABAC | AI 기반 최적화, 실시간 마스킹 | +| 데이터 라벨링 및 태그 지정 | 지침 수립, 분류 체계 마련 | 수동 라벨링, 특수 라벨, 차등 정책 | 자동 분류, 보안 시스템 연계 | 고급 메타데이터, AI 자동 조정 | +| 데이터 손실 방지 (DLP) | DLP 정책, 범위 지정 | DLP 도입, 중앙 관리, 모니터링 모드 | 전체 도입, 방지 모드 | AI 예측/차단, 자동 정책 최적화 | +| 데이터 모니터링 및 감지 | 수동 모니터링, 프로세스 수립 | 자동 감시, 정책 조정 | 이상 징후 탐지, 보안 시스템 연계 | 지속 평가, 컨텍스트 최소 접근제어 | + +--- + +## Total: 118 Items (AP: 60 + DA: 58) diff --git a/skills-ko/kesekit-guide-ko/templates/zero-trust/identity-device.md b/skills-ko/kesekit-guide-ko/templates/zero-trust/identity-device.md new file mode 100644 index 0000000..80e1800 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/zero-trust/identity-device.md @@ -0,0 +1,133 @@ +# Identity & Device Checklist + +> Zero Trust Maturity Assessment — Identity (ID) & Device (DV) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## ID — 식별자 및 신원 (Identity) (53 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-ID-01 | 사용자 인벤토리 | 사용자 목록에 대한 문서화가 되어있는가? | Traditional | Critical | +| ZT-ID-02 | 사용자 인벤토리 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | Initial | High | +| ZT-ID-03 | 사용자 인벤토리 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | Advanced | Medium | +| ZT-ID-04 | 사용자 인벤토리 | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | Advanced | Medium | +| ZT-ID-05 | 사용자 인벤토리 | AI 기반 사용자 행동에 따른 관리가 되는가? | Optimal | Low | +| ZT-ID-06 | 사용자 인벤토리 | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | Optimal | Low | +| ZT-ID-07 | ID 연계 및 사용자 자격 증명 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-08 | ID 연계 및 사용자 자격 증명 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | Initial | High | +| ZT-ID-09 | ID 연계 및 사용자 자격 증명 | ID 통합 관리 시스템이 구축되어 있는가? | Advanced | Medium | +| ZT-ID-10 | ID 연계 및 사용자 자격 증명 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | Optimal | Low | +| ZT-ID-11 | 다중인증 (MFA) | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-12 | 다중인증 (MFA) | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | Initial | High | +| ZT-ID-13 | 다중인증 (MFA) | FIDO 기반 인증 기법이 적용되어 있는가? | Initial | High | +| ZT-ID-14 | 다중인증 (MFA) | 상황에 따른 맞춤형 MFA가 지원 가능한가? | Advanced | Medium | +| ZT-ID-15 | 다중인증 (MFA) | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-16 | 다중인증 (MFA) | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | Optimal | Low | +| ZT-ID-17 | 지속 인증 | 세션 기반 인증이 수행되는가? | Traditional | Critical | +| ZT-ID-18 | 지속 인증 | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | Traditional | Critical | +| ZT-ID-19 | 지속 인증 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-20 | 지속 인증 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | Advanced | Medium | +| ZT-ID-21 | 지속 인증 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | Optimal | Low | +| ZT-ID-22 | 통합 ICAM 플랫폼 | ICAM 시스템이 구축되어 있는가? | Traditional | Critical | +| ZT-ID-23 | 통합 ICAM 플랫폼 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | Initial | High | +| ZT-ID-24 | 통합 ICAM 플랫폼 | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | Initial | High | +| ZT-ID-25 | 통합 ICAM 플랫폼 | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | Initial | High | +| ZT-ID-26 | 통합 ICAM 플랫폼 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | Advanced | Medium | +| ZT-ID-27 | 통합 ICAM 플랫폼 | ICAM 플랫폼이 자동화되어 있는가? | Advanced | Medium | +| ZT-ID-28 | 통합 ICAM 플랫폼 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | Optimal | Low | +| ZT-ID-29 | 통합 ICAM 플랫폼 | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | Optimal | Low | +| ZT-ID-30 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-31 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자 행동 패턴이 수동으로 분석되는가? | Traditional | Critical | +| ZT-ID-32 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | Initial | High | +| ZT-ID-33 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 컨텍스트 정보 기반 접근권한이 조정되는가? | Initial | High | +| ZT-ID-34 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | Advanced | Medium | +| ZT-ID-35 | 행동, 컨텍스트 기반 ID 및 생체 인식 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | Optimal | Low | +| ZT-ID-36 | 조건부 사용자 접근 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | Traditional | Critical | +| ZT-ID-37 | 조건부 사용자 접근 | 조건부 접근 정책에 대한 개념을 정의하였는가? | Traditional | Critical | +| ZT-ID-38 | 조건부 사용자 접근 | 시스템 별 각기 다른 접속 관리 기능이 있는가? | Traditional | Critical | +| ZT-ID-39 | 조건부 사용자 접근 | 특정 조건에 따른 사용자 접근제어가 가능한가? | Initial | High | +| ZT-ID-40 | 조건부 사용자 접근 | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | Initial | High | +| ZT-ID-41 | 조건부 사용자 접근 | 세션별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-42 | 조건부 사용자 접근 | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-43 | 조건부 사용자 접근 | 리소스별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-44 | 조건부 사용자 접근 | 동적 접근 정책을 실시간으로 적용 가능한가? | Optimal | Low | +| ZT-ID-45 | 조건부 사용자 접근 | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | Optimal | Low | +| ZT-ID-46 | 최소 권한 접근 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | Traditional | Critical | +| ZT-ID-47 | 최소 권한 접근 | 권한 부여에 대한 절차가 문서화 되어 있는가? | Traditional | Critical | +| ZT-ID-48 | 최소 권한 접근 | 권한 부여 절차가 표준화 되어 있는가? | Initial | High | +| ZT-ID-49 | 최소 권한 접근 | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-50 | 최소 권한 접근 | 자동화된 권한 상승이 가능한가? | Advanced | Medium | +| ZT-ID-51 | 최소 권한 접근 | 권한 관리 정책이 지속적으로 업데이트 되는가? | Advanced | Medium | +| ZT-ID-52 | 최소 권한 접근 | 권한 관리가 동적으로 변경 가능한가? | Optimal | Low | +| ZT-ID-53 | 최소 권한 접근 | 최소 권한 원칙이 실시간으로 조정 가능한가? | Optimal | Low | + +### ID Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 사용자 인벤토리 | 사용자 목록 문서화 | 역할별 상세 인벤토리 | 자동화 관리, 비정상 활동 탐지 | AI 기반 관리, 통합 최적화 | +| ID 연계 및 사용자 자격 증명 | ID 연계 솔루션 적용 | 시스템 간 연동 | 통합 관리 시스템 | 글로벌 수준 연계 | +| 다중인증 (MFA) | 패스워드+SMS/이메일 MFA | 인증 앱/토큰, FIDO | 맞춤형 MFA, 컨텍스트 인증 | 비정상 로그인 실시간 탐지 | +| 지속 인증 | 세션 기반 인증, 상태 모니터링 | 세션 중간 추가 인증 | 동적 인증 기술 | 자동 재인증, 실시간 검증 | +| 통합 ICAM 플랫폼 | ICAM 시스템 구축 | 중앙 관리, 정책 표준화, 위험도 평가 | 시스템 통합 안정화, 자동화 | AI 기반 보안 강화, 실시간 ID 위험 평가 | +| 행동/컨텍스트 기반 ID 및 생체 인식 | 기본 생체 인식, 수동 행동 분석 | 통합 인증, 컨텍스트 접근권한 | 실시간 접근제어 조정 | AI 기반 행동/생체 인식 | +| 조건부 사용자 접근 | 기초 시스템, 개념 정의, 접속 관리 | 조건부 접근제어, 최소 권한 | 세션/리소스별 권한, 다단계 정책 | 동적 정책, AI 실시간 관리 | +| 최소 권한 접근 | 원칙 정의, 절차 문서화 | 표준화, 변경 관리 시스템 | 자동 권한 상승, 정책 업데이트 | 동적 변경, 실시간 조정 | + +--- + +## DV — 기기 및 엔드포인트 (Device) (40 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DV-01 | 기기 감지 및 규정 준수 | 리소스에 연결된 기기를 식별할 수 있는가? | Traditional | Critical | +| ZT-DV-02 | 기기 감지 및 규정 준수 | 수동으로 규정 준수에 대한 확인이 가능한가? | Traditional | Critical | +| ZT-DV-03 | 기기 감지 및 규정 준수 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | Initial | High | +| ZT-DV-04 | 기기 감지 및 규정 준수 | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | Initial | High | +| ZT-DV-05 | 기기 감지 및 규정 준수 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | Advanced | Medium | +| ZT-DV-06 | 기기 감지 및 규정 준수 | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-DV-07 | 기기 감지 및 규정 준수 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | Optimal | Low | +| ZT-DV-08 | 기기 감지 및 규정 준수 | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | Optimal | Low | +| ZT-DV-09 | 실시간 검사를 통한 기기 권한 부여 | 자산 접근 기기에 대한 정보가 수집되는가? | Traditional | Critical | +| ZT-DV-10 | 실시간 검사를 통한 기기 권한 부여 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | Initial | High | +| ZT-DV-11 | 실시간 검사를 통한 기기 권한 부여 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | Advanced | Medium | +| ZT-DV-12 | 실시간 검사를 통한 기기 권한 부여 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | Optimal | Low | +| ZT-DV-13 | 실시간 검사를 통한 기기 권한 부여 | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | Optimal | Low | +| ZT-DV-14 | 기기 인벤토리 | 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | Traditional | Critical | +| ZT-DV-15 | 기기 인벤토리 | 주요 기기에 대한 정보를 수집하고 관리하는가? | Traditional | Critical | +| ZT-DV-16 | 기기 인벤토리 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | Initial | High | +| ZT-DV-17 | 기기 인벤토리 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | Advanced | Medium | +| ZT-DV-18 | 기기 인벤토리 | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | Advanced | Medium | +| ZT-DV-19 | 기기 인벤토리 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | Optimal | Low | +| ZT-DV-20 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | Traditional | Critical | +| ZT-DV-21 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 보안 정책을 설정하였는가? | Traditional | Critical | +| ZT-DV-22 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | Initial | High | +| ZT-DV-23 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기기 상태를 지속적으로 모니터링 하는가? | Initial | High | +| ZT-DV-24 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | Advanced | Medium | +| ZT-DV-25 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | Optimal | Low | +| ZT-DV-26 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | 기본적인 EDR 솔루션을 도입하였는가? | Traditional | Critical | +| ZT-DV-27 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | Initial | High | +| ZT-DV-28 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | XDR 솔루션을 도입하였는가? | Advanced | Medium | +| ZT-DV-29 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | AI 기반 EDR/XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | Optimal | Low | +| ZT-DV-30 | 자산, 취약성 및 패치 관리 자동화 | 자산 및 취약성을 수동으로 평가하는가? | Traditional | Critical | +| ZT-DV-31 | 자산, 취약성 및 패치 관리 자동화 | 주요 자산 및 취약성 목록이 작성되어 있는가? | Traditional | Critical | +| ZT-DV-32 | 자산, 취약성 및 패치 관리 자동화 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | Initial | High | +| ZT-DV-33 | 자산, 취약성 및 패치 관리 자동화 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | Advanced | Medium | +| ZT-DV-34 | 자산, 취약성 및 패치 관리 자동화 | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | Advanced | Medium | +| ZT-DV-35 | 자산, 취약성 및 패치 관리 자동화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | Optimal | Low | +| ZT-DV-36 | 자산, 취약성 및 패치 관리 자동화 | 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | Optimal | Low | + +### DV Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 기기 감지 및 규정 준수 | 기기 식별, 수동 규정 확인 | 실시간 탐지, 비준수 경고 | 자동 교정, 접근권한 연동 | 동적 권한 수정, AI 실시간 평가 | +| 실시간 검사를 통한 기기 권한 부여 | 기기 정보 수집 | 수동 검사 수행 | 자동 평가 및 접근 허용 | 접근권한 조정, 보안 시스템 연동 | +| 기기 인벤토리 | 수동 인벤토리, 정보 수집 | 자동화 기록 | 비정상 기기 탐지, 취약점 파악 | 실시간 모니터링, 예측 분석 | +| 통합 엔드포인트/모바일 기기 관리 | 관리 시스템 도입, 보안 정책 설정 | 중앙 관리, 지속 모니터링 | 중앙 자동 적용 | 통합 관리, 자동 위협 대응 | +| EDR 및 XDR | 기본 EDR 도입 | 실시간 탐지/자동 대응 | XDR 도입 | AI 기반 통합 위협 탐지 | +| 자산/취약성/패치 관리 자동화 | 수동 평가, 목록 작성 | 자동 패치 도입 | 지속적 자동화, 시스템 통합 | 사전 식별, 통합 관리 | + +--- + +## Total: 89 Items (ID: 53 + DV: 36) diff --git a/skills-ko/kesekit-guide-ko/templates/zero-trust/network-system.md b/skills-ko/kesekit-guide-ko/templates/zero-trust/network-system.md new file mode 100644 index 0000000..89cef54 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/zero-trust/network-system.md @@ -0,0 +1,145 @@ +# Network & System Checklist + +> Zero Trust Maturity Assessment — Network (NW) & System (SY) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## NW — 네트워크 (Network) (54 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-NW-01 | 매크로 세그멘테이션 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-02 | 매크로 세그멘테이션 | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | Traditional | Critical | +| ZT-NW-03 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | Initial | High | +| ZT-NW-04 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | Initial | High | +| ZT-NW-05 | 매크로 세그멘테이션 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | Advanced | Medium | +| ZT-NW-06 | 매크로 세그멘테이션 | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | Advanced | Medium | +| ZT-NW-07 | 매크로 세그멘테이션 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | Optimal | Low | +| ZT-NW-08 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-09 | 마이크로 세그멘테이션 | 수동으로 세그먼트를 구성하는가? | Traditional | Critical | +| ZT-NW-10 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | Initial | High | +| ZT-NW-11 | 마이크로 세그멘테이션 | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지/차단 할 수 있는가? | Initial | High | +| ZT-NW-12 | 마이크로 세그멘테이션 | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | Initial | High | +| ZT-NW-13 | 마이크로 세그멘테이션 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | Advanced | Medium | +| ZT-NW-14 | 마이크로 세그멘테이션 | 애플리케이션 별 격리 메커니즘이 적용되었는가? | Advanced | Medium | +| ZT-NW-15 | 마이크로 세그멘테이션 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | Optimal | Low | +| ZT-NW-16 | 소프트웨어 정의 네트워킹 | 소프트웨어 정의 네트워크가 도입되어 있는가? | Traditional | Critical | +| ZT-NW-17 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | Traditional | Critical | +| ZT-NW-18 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | Initial | High | +| ZT-NW-19 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | Advanced | Medium | +| ZT-NW-20 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | Optimal | Low | +| ZT-NW-21 | 위협 대응 | IDS/IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | Traditional | Critical | +| ZT-NW-22 | 위협 대응 | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | Traditional | Critical | +| ZT-NW-23 | 위협 대응 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | Initial | High | +| ZT-NW-24 | 위협 대응 | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | Initial | High | +| ZT-NW-25 | 위협 대응 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | Advanced | Medium | +| ZT-NW-26 | 위협 대응 | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | Advanced | Medium | +| ZT-NW-27 | 위협 대응 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | Optimal | Low | +| ZT-NW-28 | 위협 대응 | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | Optimal | Low | +| ZT-NW-29 | 트래픽 암호화 | 내/외부 트래픽 일부 암호화가 가능한가? | Traditional | Critical | +| ZT-NW-30 | 트래픽 암호화 | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | Traditional | Critical | +| ZT-NW-31 | 트래픽 암호화 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | Initial | High | +| ZT-NW-32 | 트래픽 암호화 | 데이터 전송 시 암호화를 필수로 하고 있는가? | Initial | High | +| ZT-NW-33 | 트래픽 암호화 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | Advanced | Medium | +| ZT-NW-34 | 트래픽 암호화 | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | Advanced | Medium | +| ZT-NW-35 | 트래픽 암호화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | Optimal | Low | +| ZT-NW-36 | 트래픽 암호화 | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-NW-37 | 데이터 흐름 매핑 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | Traditional | Critical | +| ZT-NW-38 | 데이터 흐름 매핑 | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | Traditional | Critical | +| ZT-NW-39 | 데이터 흐름 매핑 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | Initial | High | +| ZT-NW-40 | 데이터 흐름 매핑 | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | Initial | High | +| ZT-NW-41 | 데이터 흐름 매핑 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | Advanced | Medium | +| ZT-NW-42 | 데이터 흐름 매핑 | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | Advanced | Medium | +| ZT-NW-43 | 데이터 흐름 매핑 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | Optimal | Low | +| ZT-NW-44 | 데이터 흐름 매핑 | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | Optimal | Low | +| ZT-NW-45 | 네트워크 회복성 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | Traditional | Critical | +| ZT-NW-46 | 네트워크 회복성 | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | Traditional | Critical | +| ZT-NW-47 | 네트워크 회복성 | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | Traditional | Critical | +| ZT-NW-48 | 네트워크 회복성 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | Initial | High | +| ZT-NW-49 | 네트워크 회복성 | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | Initial | High | +| ZT-NW-50 | 네트워크 회복성 | 네트워크 이중화 설계가 되어 있는가? | Initial | High | +| ZT-NW-51 | 네트워크 회복성 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | Advanced | Medium | +| ZT-NW-52 | 네트워크 회복성 | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | Advanced | Medium | +| ZT-NW-53 | 네트워크 회복성 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | Optimal | Low | +| ZT-NW-54 | 네트워크 회복성 | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | Optimal | Low | + +### NW Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 매크로 세그멘테이션 | 영역별 세그멘테이션, 트래픽 흐름 기반 구성 | 보안 정책 적용, 비정상 활동 탐지 | 맞춤형 정책, 위협 대응 | AI 기반 관리 | +| 마이크로 세그멘테이션 | 워크로드 기준 세그멘테이션, 수동 구성 | 보안 정책, 워크로드 이동 탐지/차단, 모니터링 | 정책 설정/제어, 격리 메커니즘 | AI 기반 자동 대응 | +| 소프트웨어 정의 네트워킹 | SDN 도입, 기본 구조 설정 | 중앙 관리, 실시간 정책 | 트래픽 관리/보안 확장 | AI 기반 위협 관리/트래픽 예측 | +| 위협 대응 | IDS/IPS 감시, 정적 규칙 관리 | 자동 탐지/대응, 프로파일 관리 | 선제적 대응, 동적 규칙 | 즉각 자동 대응, 동적 트래픽 관리 | +| 트래픽 암호화 | 일부 암호화, SSL/TLS/VPN | 전반 암호화, 전송 필수 암호화 | 저장 데이터 암호화, 고급 키 관리 | 성능 유지 보호, 통합 키 관리 | +| 데이터 흐름 매핑 | 수동 모니터링, 수동 매핑 | 애플리케이션 단위 매핑, 실시간 매핑 | 비정상 이동 탐지, 상관관계 분석 | AI 예측 분석, 동적 우선순위 | +| 네트워크 회복성 | 복구 계획, 백업, 장애 대응 절차 | 다중 경로, Failover, 이중화 | 지속적 서비스, 주기적 테스트 | 중단 없는 운영, 자동화 복구 | + +--- + +## SY — 시스템 (System) (49 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-SY-01 | 접근통제 | 사용자 및 기기에 수동으로 권한을 부여하는가? | Traditional | Critical | +| ZT-SY-02 | 접근통제 | RBAC 기반 접근제어를 수행하는가? | Traditional | Critical | +| ZT-SY-03 | 접근통제 | 권한 관리를 수동으로 수행하는가? | Traditional | Critical | +| ZT-SY-04 | 접근통제 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | Initial | High | +| ZT-SY-05 | 접근통제 | 실시간 접근권한 부여가 가능한가? | Initial | High | +| ZT-SY-06 | 접근통제 | 권한 변경 사항이 자동으로 반영되는가? | Initial | High | +| ZT-SY-07 | 접근통제 | 특정 리소스에 대한 접근 제한/승인 정책이 자동으로 적용 가능한가? | Initial | High | +| ZT-SY-08 | 접근통제 | ABAC 기반 접근제어를 수행하는가? | Advanced | Medium | +| ZT-SY-09 | 접근통제 | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | Advanced | Medium | +| ZT-SY-10 | 접근통제 | 사용자/기기의 상태를 실시간으로 분석하고 실시간/자동으로 권한 조정이 가능한가? | Optimal | Low | +| ZT-SY-11 | 접근통제 | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | Optimal | Low | +| ZT-SY-12 | 접근통제 | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | Optimal | Low | +| ZT-SY-13 | 접근통제 | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | Optimal | Low | +| ZT-SY-14 | PAM | PAM 시스템을 구축하였는가? | Traditional | Critical | +| ZT-SY-15 | PAM | PAM 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-SY-16 | PAM | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | Initial | High | +| ZT-SY-17 | PAM | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | Initial | High | +| ZT-SY-18 | PAM | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | Advanced | Medium | +| ZT-SY-19 | PAM | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | Optimal | Low | +| ZT-SY-20 | 자격 증명 관리 | 자격 증명이 수동으로 관리되는가? | Traditional | Critical | +| ZT-SY-21 | 자격 증명 관리 | 패스워드에 기반한 인증 방식에 의존하는가? | Traditional | Critical | +| ZT-SY-22 | 자격 증명 관리 | 자격 증명 관리가 체계적이지 않고 수동적인가? | Traditional | Critical | +| ZT-SY-23 | 자격 증명 관리 | 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | Initial | High | +| ZT-SY-24 | 자격 증명 관리 | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | Initial | High | +| ZT-SY-25 | 자격 증명 관리 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | Advanced | Medium | +| ZT-SY-26 | 자격 증명 관리 | 자격 증명 관리 시스템을 고도화하여 관리하는가? | Advanced | Medium | +| ZT-SY-27 | 자격 증명 관리 | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | Advanced | Medium | +| ZT-SY-28 | 자격 증명 관리 | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | Advanced | Medium | +| ZT-SY-29 | 자격 증명 관리 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | Optimal | Low | +| ZT-SY-30 | 자격 증명 관리 | 실시간으로 인증 정책 조정이 가능한가? | Optimal | Low | +| ZT-SY-31 | 자격 증명 관리 | 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | Optimal | Low | +| ZT-SY-32 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | Traditional | Critical | +| ZT-SY-33 | 네트워크 세분화 및 그룹 간 이동 | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | Traditional | Critical | +| ZT-SY-34 | 네트워크 세분화 및 그룹 간 이동 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | Initial | High | +| ZT-SY-35 | 네트워크 세분화 및 그룹 간 이동 | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | Initial | High | +| ZT-SY-36 | 네트워크 세분화 및 그룹 간 이동 | 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | Advanced | Medium | +| ZT-SY-37 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | Advanced | Medium | +| ZT-SY-38 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | Advanced | Medium | +| ZT-SY-39 | 네트워크 세분화 및 그룹 간 이동 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | Optimal | Low | +| ZT-SY-40 | 네트워크 세분화 및 그룹 간 이동 | 재인증 없는 그룹 간 이동이 가능한가? | Optimal | Low | +| ZT-SY-41 | 네트워크 세분화 및 그룹 간 이동 | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | Optimal | Low | +| ZT-SY-42 | 시스템 환경에 따른 정책 관리 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | Traditional | Critical | +| ZT-SY-43 | 시스템 환경에 따른 정책 관리 | 수동으로 보안 정책을 유지/관리하고 있는가? | Traditional | Critical | +| ZT-SY-44 | 시스템 환경에 따른 정책 관리 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | Initial | High | +| ZT-SY-45 | 시스템 환경에 따른 정책 관리 | 정책이 자동으로 적용되는가? | Initial | High | +| ZT-SY-46 | 시스템 환경에 따른 정책 관리 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | Advanced | Medium | +| ZT-SY-47 | 시스템 환경에 따른 정책 관리 | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | Advanced | Medium | +| ZT-SY-48 | 시스템 환경에 따른 정책 관리 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | Optimal | Low | +| ZT-SY-49 | 시스템 환경에 따른 정책 관리 | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | Optimal | Low | + +### SY Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 접근통제 | 수동 권한 부여, RBAC | 중앙 집중 권한, 실시간 부여, 자동 반영 | ABAC, 동적 실시간 권한 | 실시간 분석/조정, 신뢰도 재산정, 위험 분석 기반 | +| PAM | PAM 시스템/정책 구축 | 모니터링/제어, 자동 승인 | 비정상 활동 탐지 | AI 기반 위협 탐지/대응 | +| 자격 증명 관리 | 수동 관리, 패스워드 의존 | 중앙 자동화, MFA | 생체 인증, 고도화, 무결성, AI 분석 | 실시간 차단/정책 조정, 자율 운영 | +| 네트워크 세분화 및 그룹 간 이동 | 통제 미흡, 경계형 모델 | 중요도 기반 분리, 이동 제어 | 워크로드별 세분화, 강력한 접근통제, 실시간 검사 | 실시간 분석/제어, 재인증 없는 이동, 자동 정책 | +| 시스템 환경에 따른 정책 관리 | 온프레미스 보안 정책, 수동 관리 | 클라우드 정책, 자동 적용 | 하이브리드 실시간 조정, 동적 변경 | 자율 정책, 완전 자동화 | + +--- + +## Total: 103 Items (NW: 54 + SY: 49) diff --git a/skills-ko/kesekit-guide-ko/templates/zero-trust/ot-environment.md b/skills-ko/kesekit-guide-ko/templates/zero-trust/ot-environment.md new file mode 100644 index 0000000..0331c34 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/zero-trust/ot-environment.md @@ -0,0 +1,51 @@ +# OT/ICS Zero Trust Environment Checklist + +> Zero Trust Maturity Assessment — OT/ICS (Operational Technology / Industrial Control Systems) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), IEC 62443, NIST SP 800-82 + +## OT/ICS Zero Trust Considerations + +OT/ICS environments require special Zero Trust deployment strategies due to: +- Legacy systems that cannot support modern authentication +- Real-time operational requirements (latency sensitivity) +- Safety-critical functions that must not be disrupted +- Air-gapped or semi-isolated network architectures +- Long equipment lifecycles (15-30 years) + +## OT-ZT Assessment Items + +| ID | Category | Verification | Maturity | Severity | +|----|----------|-------------|----------|----------| +| OT-ZT-01 | Network Segmentation | OT 네트워크와 IT 네트워크가 물리적/논리적으로 분리되어 있는가? | Traditional | Critical | +| OT-ZT-02 | Network Segmentation | DMZ를 통한 OT-IT 간 데이터 교환이 통제되고 있는가? | Traditional | Critical | +| OT-ZT-03 | Network Segmentation | Purdue Model 또는 IEC 62443 zone/conduit 기반 세그멘테이션이 적용되어 있는가? | Initial | High | +| OT-ZT-04 | Network Segmentation | 마이크로 세그멘테이션이 OT 환경 내부에 적용되어 있는가? | Advanced | Medium | +| OT-ZT-05 | Network Segmentation | SDN 기반 동적 세그멘테이션이 OT 환경에 적용 가능한가? | Optimal | Low | +| OT-ZT-06 | Identity & Access | OT 시스템 접근에 대한 사용자 인증이 수행되는가? | Traditional | Critical | +| OT-ZT-07 | Identity & Access | OT 전용 계정 관리 및 최소 권한 원칙이 적용되어 있는가? | Initial | High | +| OT-ZT-08 | Identity & Access | OT 환경에서 MFA가 적용되어 있는가 (물리적 토큰 포함)? | Initial | High | +| OT-ZT-09 | Identity & Access | OT 원격 접속에 대한 별도 인증 및 모니터링이 수행되는가? | Advanced | Medium | +| OT-ZT-10 | Identity & Access | 비정상적인 OT 접근 시도에 대한 실시간 탐지 및 대응이 가능한가? | Optimal | Low | +| OT-ZT-11 | Device Management | OT 자산 인벤토리가 문서화되어 있는가? | Traditional | Critical | +| OT-ZT-12 | Device Management | OT 디바이스 식별 및 분류 체계가 구축되어 있는가? | Initial | High | +| OT-ZT-13 | Device Management | OT 디바이스 보안 상태 자동 모니터링이 가능한가? | Advanced | Medium | +| OT-ZT-14 | Device Management | 레거시 OT 장비에 대한 보안 래퍼/프록시가 적용되어 있는가? | Advanced | Medium | +| OT-ZT-15 | Device Management | AI 기반 OT 자산 관리 및 이상 탐지가 가능한가? | Optimal | Low | +| OT-ZT-16 | Communication Security | OT 프로토콜(Modbus, OPC UA, DNP3 등) 트래픽이 모니터링되는가? | Traditional | Critical | +| OT-ZT-17 | Communication Security | OT 통신에 대한 암호화가 적용되어 있는가 (가능한 경우)? | Initial | High | +| OT-ZT-18 | Communication Security | OT 프로토콜 이상 탐지(DPI) 시스템이 도입되어 있는가? | Advanced | Medium | +| OT-ZT-19 | Communication Security | OT 환경 전용 위협 인텔리전스가 적용되어 있는가? | Optimal | Low | +| OT-ZT-20 | Safety & Availability | ZT 정책 적용 시 안전 기능(Safety Function)에 영향이 없는지 검증되었는가? | Traditional | Critical | +| OT-ZT-21 | Safety & Availability | ZT 정책 실패 시 fail-open/fail-safe 동작이 정의되어 있는가? | Initial | High | +| OT-ZT-22 | Safety & Availability | ZT 구성 변경에 대한 OT 영향도 분석 프로세스가 수립되어 있는가? | Advanced | Medium | +| OT-ZT-23 | Monitoring & Response | OT 환경 전용 SOC/보안 모니터링 체계가 수립되어 있는가? | Initial | High | +| OT-ZT-24 | Monitoring & Response | IT-OT 통합 보안 이벤트 분석이 가능한가? | Advanced | Medium | +| OT-ZT-25 | Monitoring & Response | OT 환경에 대한 자동화된 인시던트 대응이 가능한가? | Optimal | Low | + +## Deployment Strategy for OT + +1. **Phase 1 — Visibility**: Asset discovery, traffic mapping, baseline establishment +2. **Phase 2 — Segmentation**: IT-OT separation, zone/conduit implementation +3. **Phase 3 — Access Control**: Identity-based access, MFA for remote access +4. **Phase 4 — Monitoring**: Continuous monitoring, anomaly detection +5. **Phase 5 — Automation**: Automated response (with safety validation) diff --git a/skills-ko/kesekit-guide-ko/templates/zero-trust/overview.md b/skills-ko/kesekit-guide-ko/templates/zero-trust/overview.md new file mode 100644 index 0000000..0bdd288 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/zero-trust/overview.md @@ -0,0 +1,69 @@ +# Zero Trust Overview + +> Zero Trust Maturity Assessment — Overview & Assessment Guide +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), NIST SP 800-207, CISA ZT Maturity Model + +## Zero Trust Principles + +- **Never Trust, Always Verify**: Every access request must be authenticated and authorized regardless of network location +- **Assume Breach**: Minimize blast radius through microsegmentation and least-privilege access +- **Verify Explicitly**: Use all available data points (identity, location, device health, service/workload, data classification, anomalies) + +## 8 Core Elements + +| # | Element | Code | Items | +|---|---------|------|:-----:| +| 1 | Identity (식별자 및 신원) | ID | 53 | +| 2 | Device (디바이스 및 엔드포인트) | DV | ~50 | +| 3 | Network (네트워크) | NW | 54 | +| 4 | System (시스템) | SY | ~45 | +| 5 | Application (애플리케이션 및 워크로드) | AP | 60 | +| 6 | Data (데이터) | DA | ~50 | +| 7 | Visibility (가시성 및 분석) | VA | 43 | +| 8 | Automation (자동화 및 오케스트레이션) | AU | ~41 | + +**Total: ~396 items across 4 maturity levels** + +## 4 Maturity Levels + +| Level | Description | Target | +|-------|-------------|--------| +| **Traditional** | Perimeter-based security, manual processes | Baseline awareness | +| **Initial** | Some ZT controls adopted, partial automation | Early adopters | +| **Advanced** | Centralized management, context-aware policies, AI-assisted | Mature organizations | +| **Optimal** | Fully automated, real-time adaptive, AI-driven orchestration | Industry leaders | + +## Assessment Flow + +1. Determine target maturity level based on organizational goals +2. Select relevant core elements based on system context +3. Assess each item at or below the target maturity level +4. Items above target maturity level are informational (not scored) +5. Generate gap analysis comparing current state vs. target + +## Template Files + +| Topic | File | +|-------|------| +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | + +## Reference Files + +| Topic | File | +|-------|------| +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +## Judgment Criteria + +| Judgment | Description | +|----------|-------------| +| Pass (양호) | ZT control properly implemented at target maturity level | +| Partial (부분이행) | Control partially implemented, improvement needed | +| Fail (취약) | Control not implemented or significantly below target | +| N/A (해당없음) | Not applicable to the environment | diff --git a/skills-ko/kesekit-guide-ko/templates/zero-trust/visibility-automation.md b/skills-ko/kesekit-guide-ko/templates/zero-trust/visibility-automation.md new file mode 100644 index 0000000..7dca723 --- /dev/null +++ b/skills-ko/kesekit-guide-ko/templates/zero-trust/visibility-automation.md @@ -0,0 +1,128 @@ +# Visibility & Automation Checklist + +> Zero Trust Maturity Assessment — Visibility (VA) & Automation (AU) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## VA — 가시성 및 분석 (Visibility) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-VA-01 | 모든 관련 활동 기록 | 로그 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-VA-02 | 모든 관련 활동 기록 | 로그 데이터가 특정한 시스템에서만 수집되는가? | Traditional | Critical | +| ZT-VA-03 | 모든 관련 활동 기록 | 다양한 시스템에서 자동으로 로그를 수집하는가? | Initial | High | +| ZT-VA-04 | 모든 관련 활동 기록 | 로그 수집 및 관리가 자동화 되었는가? | Initial | High | +| ZT-VA-05 | 모든 관련 활동 기록 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-VA-06 | 모든 관련 활동 기록 | 로그 기록의 무결성을 보장하는가? | Advanced | Medium | +| ZT-VA-07 | 모든 관련 활동 기록 | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | Advanced | Medium | +| ZT-VA-08 | 모든 관련 활동 기록 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | Optimal | Low | +| ZT-VA-09 | 모든 관련 활동 기록 | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | Optimal | Low | +| ZT-VA-10 | 모든 관련 활동 기록 | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | Optimal | Low | +| ZT-VA-11 | 중앙집중적 보안 정보 및 이벤트 관리 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | Traditional | Critical | +| ZT-VA-12 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템이 도입되었는가? | Initial | High | +| ZT-VA-13 | 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 보안 관리 체계가 구축되었는가? | Initial | High | +| ZT-VA-14 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | Advanced | Medium | +| ZT-VA-15 | 중앙집중적 보안 정보 및 이벤트 관리 | AI 기반으로 보안 이벤트를 분석하는가? | Optimal | Low | +| ZT-VA-16 | 중앙집중적 보안 정보 및 이벤트 관리 | 비정상적인 활동에 대하여 자동 대응이 가능한가? | Optimal | Low | +| ZT-VA-17 | 보안 위협 분석 | 보안 로그 및 데이터를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-18 | 보안 위협 분석 | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-19 | 보안 위협 분석 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | Initial | High | +| ZT-VA-20 | 보안 위협 분석 | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | Initial | High | +| ZT-VA-21 | 보안 위협 분석 | 자동화된 보안 위협 분석 도구를 도입하였는가? | Advanced | Medium | +| ZT-VA-22 | 보안 위협 분석 | 실시간 보안 위협 탐지가 가능한가? | Advanced | Medium | +| ZT-VA-23 | 보안 위협 분석 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | Optimal | Low | +| ZT-VA-24 | 사용자 및 기기 동작 분석 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | Traditional | Critical | +| ZT-VA-25 | 사용자 및 기기 동작 분석 | 비정상 행동을 수동으로 탐지하는가? | Traditional | Critical | +| ZT-VA-26 | 사용자 및 기기 동작 분석 | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | Traditional | Critical | +| ZT-VA-27 | 사용자 및 기기 동작 분석 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | Initial | High | +| ZT-VA-28 | 사용자 및 기기 동작 분석 | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | Initial | High | +| ZT-VA-29 | 사용자 및 기기 동작 분석 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | Advanced | Medium | +| ZT-VA-30 | 사용자 및 기기 동작 분석 | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | Advanced | Medium | +| ZT-VA-31 | 사용자 및 기기 동작 분석 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | Optimal | Low | +| ZT-VA-32 | 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-33 | 위협 인텔리전스 통합 | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | Traditional | Critical | +| ZT-VA-34 | 위협 인텔리전스 통합 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | Initial | High | +| ZT-VA-35 | 위협 인텔리전스 통합 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | Advanced | Medium | +| ZT-VA-36 | 위협 인텔리전스 통합 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | Optimal | Low | +| ZT-VA-37 | 자동화된 동적 정책 | 보안 정책을 수동으로 관리하는가? | Traditional | Critical | +| ZT-VA-38 | 자동화된 동적 정책 | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | Traditional | Critical | +| ZT-VA-39 | 자동화된 동적 정책 | 자동화된 정책 관리 시스템을 도입하였는가? | Initial | High | +| ZT-VA-40 | 자동화된 동적 정책 | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | Initial | High | +| ZT-VA-41 | 자동화된 동적 정책 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | Advanced | Medium | +| ZT-VA-42 | 자동화된 동적 정책 | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | Advanced | Medium | +| ZT-VA-43 | 자동화된 동적 정책 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | Optimal | Low | + +### VA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 모든 관련 활동 기록 | 수동 로그, 특정 시스템 수집 | 자동 로그 수집, 관리 자동화 | 실시간 탐지, 무결성, 예측 분석 | 자율 보안, 정규화, 자동 정책 조정 | +| 중앙집중적 보안 정보/이벤트 관리 | 수동 분석 | SIEM 도입, 중앙 관리 | 보안 도구 연동 종합 분석 | AI 분석, 자동 대응 | +| 보안 위협 분석 | 수동 로그/CVE 수집 | 평가 기준, 자동 경고 | 자동화 분석, 실시간 탐지 | AI 예측 분석 | +| 사용자/기기 동작 분석 | 활동 데이터 수집, 수동 탐지, 패턴 기록 | 자동 분석 도구 도입 | 행동 분석 탐지, AI 실시간 대응 | 자동 정책 조정, 최소 권한 | +| 위협 인텔리전스 통합 | 수동 수집, 수동 연동 | 자동 통합 도구 | 내부 시스템 통합 | AI 기반 시스템 | +| 자동화된 동적 정책 | 수동 관리, 수동 대응 | 자동 정책 관리, 자동 변경 | 실시간 조정, 위협 연계 | AI 자율 정책 조정 | + +--- + +## AU — 자동화 및 통합 (Automation) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AU-01 | 정책 통합 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | Traditional | Critical | +| ZT-AU-02 | 정책 통합 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-AU-03 | 정책 통합 | 정책 변경이 자동으로 이루어지는가? | Initial | High | +| ZT-AU-04 | 정책 통합 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | Advanced | Medium | +| ZT-AU-05 | 정책 통합 | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | Advanced | Medium | +| ZT-AU-06 | 정책 통합 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-07 | 중요 프로세스 자동화 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | Traditional | Critical | +| ZT-AU-08 | 중요 프로세스 자동화 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | Initial | High | +| ZT-AU-09 | 중요 프로세스 자동화 | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | Initial | High | +| ZT-AU-10 | 중요 프로세스 자동화 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | Advanced | Medium | +| ZT-AU-11 | 중요 프로세스 자동화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-12 | 인공지능 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-13 | 인공지능 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | Initial | High | +| ZT-AU-14 | 인공지능 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | Advanced | Medium | +| ZT-AU-15 | 인공지능 | AI가 모든 보안 시스템에 완전히 통합되었는가? | Optimal | Low | +| ZT-AU-16 | 인공지능 | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | Optimal | Low | +| ZT-AU-17 | 보안 통합, 자동화 및 대응 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | Traditional | Critical | +| ZT-AU-18 | 보안 통합, 자동화 및 대응 | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | Traditional | Critical | +| ZT-AU-19 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 도입하였는가? | Initial | High | +| ZT-AU-20 | 보안 통합, 자동화 및 대응 | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | Initial | High | +| ZT-AU-21 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | Advanced | Medium | +| ZT-AU-22 | 보안 통합, 자동화 및 대응 | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | Advanced | Medium | +| ZT-AU-23 | 보안 통합, 자동화 및 대응 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | Optimal | Low | +| ZT-AU-24 | 보안 통합, 자동화 및 대응 | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | Optimal | Low | +| ZT-AU-25 | 데이터 교환 표준화 | 수집된 데이터가 상이한 형식으로 저장되는가? | Traditional | Critical | +| ZT-AU-26 | 데이터 교환 표준화 | 데이터 교환이 비효율적으로 이루어지는가? | Traditional | Critical | +| ZT-AU-27 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-28 | 데이터 교환 표준화 | 데이터 교환 표준을 도입하였는가? | Initial | High | +| ZT-AU-29 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 자동화되었는가? | Initial | High | +| ZT-AU-30 | 데이터 교환 표준화 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | Advanced | Medium | +| ZT-AU-31 | 데이터 교환 표준화 | 여러 보안 도구 간의 상호 운용성이 제공되는가? | Advanced | Medium | +| ZT-AU-32 | 데이터 교환 표준화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | Optimal | Low | +| ZT-AU-33 | 데이터 교환 표준화 | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | Optimal | Low | +| ZT-AU-34 | 데이터 교환 표준화 | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | Optimal | Low | +| ZT-AU-35 | 보안 운영 조정 및 사고 대응 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | Traditional | Critical | +| ZT-AU-36 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 절차가 정형화되어 있지 않는가? | Traditional | Critical | +| ZT-AU-37 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | Initial | High | +| ZT-AU-38 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | Initial | High | +| ZT-AU-39 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | Advanced | Medium | +| ZT-AU-40 | 보안 운영 조정 및 사고 대응 | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | Advanced | Medium | +| ZT-AU-41 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | Optimal | Low | +| ZT-AU-42 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | Optimal | Low | +| ZT-AU-43 | 보안 운영 조정 및 사고 대응 | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | Optimal | Low | + +### AU Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 정책 통합 | 수동 시스템별 변경 | 중앙 관리, 자동 변경 | 실시간 동적 조정, 즉각 수정 | AI 자율 정책 조정 | +| 중요 프로세스 자동화 | 수동 절차 의존 | 자동화 도구, 백업/장애 대응 자동화 | 보안 사고 자동 대응 | 실시간 최적화, 무중단 조정 | +| 인공지능 | 수동 수집/분석/대응 | 기본 AI 도구, 패턴 식별 | AI 고도화, 실시간 탐지/대응 | 완전 통합, 자율 감지/대응/조정 | +| 보안 통합/자동화/대응 | 독립 운영, 수동 대응 | SOAR 도입, 중앙 대응 | SOAR 고도화, 실시간 통합 | 중앙 자동 처리, 자율 통합 | +| 데이터 교환 표준화 | 상이한 형식, 비효율적, 수동 교환 | 표준 도입, 교환 자동화 | 외부 공유, 상호 운용성 | 자율 관리, 일관된 형식, 실시간 교환 | +| 보안 운영 조정/사고 대응 | 수동 소통, 비정형 절차 | 대응 계획, 자동 경고 | 자동 대응, 실시간 조율, 자동 보고 | 사전 예측, 완전 자동화, 실시간 협력 | + +--- + +## Total: 86 Items (VA: 43 + AU: 43) diff --git a/skills-ko/kesekit-start-ko/SKILL.md b/skills-ko/kesekit-start-ko/SKILL.md new file mode 100644 index 0000000..5975e1d --- /dev/null +++ b/skills-ko/kesekit-start-ko/SKILL.md @@ -0,0 +1,215 @@ +--- +name: kesekit-start-ko +description: KISA 기반 보안 취약점 분석평가를 수행합니다. 주요정보통신기반시설(CII) 기술/관리/물리 취약점(560항목), AI 보안 안내서, 로봇 보안 체크리스트, 우주 보안(위성/GSaaS/공급망 53항목), 제로트러스트(8개 핵심요소, ~396항목) 평가를 지원합니다. "보안 점검", "취약점 분석", "기반시설 감사", "KISA 점검", "보안 평가", "AI 보안 점검", "로봇 보안 평가", "우주 보안 평가", "위성 보안", "제로트러스트", "ZTA", "ZTNA" 시 사용하세요. +--- + +# KESE 보안 취약점 분석평가 + +KISA 가이드라인에 따른 보안 취약점 분석평가를 수행합니다. 사용자의 환경과 목적에 맞는 가이드라인을 자동으로 선택하여 평가를 진행합니다. + +## 가이드라인 선택 + +사용자에게 어떤 분야의 보안 점검을 원하는지 확인합니다. 명확하지 않으면 아래 목록을 보여주고 선택하게 합니다. + +### 사용 가능한 가이드라인 + +| # | 가이드라인 | 설명 | 항목 수 | +|---|----------|------|:------:| +| 1 | **주요정보통신기반시설(CII)** | 기술적(424)+관리적(127)+물리적(18) 취약점 | ~560 | +| 2 | **AI 보안** | AI 개발자/서비스제공자/이용자 보안 요구사항 | ~54 | +| 3 | **로봇 보안** | 산업용/서비스용/의료용 로봇 보안 체크리스트 (11개 카테고리) | ~103 | +| 4 | **우주 보안** | 위성/GSaaS/공급망 체크리스트 (12개 분야) | 53 | +| 5 | **시큐어코딩** | JavaScript/Python 시큐어코딩 (7개 카테고리, 46 CWE) | 46 | +| 6 | **제로트러스트** | 제로트러스트 성숙도 평가 (8개 핵심요소, 4단계 성숙도) | ~396 | + +### 자동 판별 기준 + +- 서버, 네트워크, 데이터베이스, 웹 서비스, 방화벽 등 → **CII** +- AI 모델, LLM, 생성형 AI, 머신러닝, 프롬프트 등 → **AI 보안** +- 로봇, 산업용 로봇, 서비스 로봇, 의료용 로봇, ROS, PLC 등 → **로봇 보안** +- 위성, 지상국, GSaaS, 우주 시스템, GNSS, VSAT, LEO 군집, 우주 공급망 → **우주 보안** +- JavaScript, Python, 웹 애플리케이션 코드, 시큐어코딩, CWE, OWASP → **시큐어코딩** +- Zero Trust, ZTA, ZTNA, 제로트러스트, 마이크로세그멘테이션, microsegmentation, SDP, SASE, PEP/PDP, never trust always verify → **제로트러스트** +- 클라우드, 가상화 → 맥락에 따라 CII 또는 AI 보안 + +--- + +## CII 분기 시 + +`templates/cii/` 디렉터리에서 대상 시스템에 해당하는 평가 템플릿 파일을 읽어 평가를 수행합니다. 점검/수정 스크립트는 `scripts/cii/`에 있습니다. + +### 1단계: 환경 탐지 + +자동 탐지 또는 사용자 질문으로 대상 시스템을 파악합니다: + +| 시스템 | reference 파일 | 항목 수 | +|--------|---------------|:------:| +| Unix/Linux 서버 | `templates/cii/unix.md` | 67 | +| Windows 서버 | `templates/cii/windows.md` | 64 | +| 웹 서비스 | `templates/cii/web-service.md` | 26 | +| 보안 장비 | `templates/cii/security-equip.md` | 23 | +| 네트워크 장비 | `templates/cii/network.md` | 38 | +| 제어시스템 | `templates/cii/control-system.md` | 46 | +| PC | `templates/cii/pc.md` | 18 | +| DBMS | `templates/cii/database.md` | 26 | +| 이동통신 | `templates/cii/mobile.md` | 4 | +| Web Application | `templates/cii/webapp.md` | 21 | +| 가상화 장비 | `templates/cii/virtualization.md` | 25 | +| 클라우드 | `templates/cii/cloud.md` | 19 | +| 관리적 취약점 | `templates/cii/admin.md` | 127 | +| 물리적 취약점 | `templates/cii/physical.md` | 18 | + +### 2단계: 취약점 분석 + +해당 reference 파일을 Read로 로드한 후, 각 항목에 대해 점검합니다. + +### 3단계: 보고서 생성 + +``` +reports/kese/ +├── summary.md ← 전체 평가 요약 +├── technical/ ← 시스템별 기술적 취약점 결과 +├── administrative/ ← 관리적 취약점 결과 +└── physical/ ← 물리적 취약점 결과 +``` + +### 판단 기준 + +| 판단 | 설명 | +|------|------| +| 양호 | 보안 설정이 적절히 적용됨 | +| 부분이행 | 일부 구현되었으나 개선 필요 | +| 취약 | 보안 취약점 존재 | +| 해당없음 | 해당 환경에 적용 불가 | + +--- + +## AI 보안 분기 시 + +`references/ai-security/` 디렉터리에서 대상에 해당하는 reference를 읽어 평가를 수행합니다. + +### 1단계: 대상 확인 + +| 대상 | reference 파일 | +|------|---------------| +| 전체 개요 | `references/ai-security/overview.md` | +| AI 개발자 | `templates/ai-security/developer.md` | +| AI 서비스 제공자 | `references/ai-security/service-provider.md` | +| AI 이용자 | `references/ai-security/user-guide.md` | + +### 2단계: 생명주기별 평가 + +AI 보안은 6단계 생명주기에 따라 점검합니다: +1. 계획 및 설계 +2. 데이터 수집 및 준비 +3. 모델 개발 +4. 모델 배포 +5. 모니터링 및 유지보수 +6. 파기 + +### 3단계: 보고서 생성 + +``` +reports/ai-security/ +├── summary.md ← 전체 평가 요약 +├── developer.md ← 개발자 보안 검증 결과 +├── service-provider.md ← 서비스 제공자 검증 결과 +└── user-checklist.md ← 이용자 체크리스트 결과 +``` + +--- + +## 로봇 보안 분기 시 + +`templates/robot-security/` 디렉터리에서 해당 템플릿을 읽어 평가를 수행합니다. + +### 1단계: 대상 확인 + +| 대상 | reference 파일 | +|------|---------------| +| 전체 개요 | `templates/robot-security/overview.md` | +| SSDF (보안 SW 개발) | `templates/robot-security/ssdf.md` | +| 공급망 보안 | `templates/robot-security/supply-chain.md` | +| IEC 62443 기반 (IA, UC, SI, DP, DFR, ER, RA) | `templates/robot-security/iec62443.md` | +| 사이버 복원력 | `templates/robot-security/cyber-resilience.md` | +| 무선 보안 | `templates/robot-security/wireless.md` | + +### 2단계: 카테고리별 평가 + +11개 카테고리, 총 ~103개 체크리스트 항목을 점검합니다. + +### 3단계: 보고서 생성 + +``` +reports/robot-security/ +├── summary.md ← 전체 평가 요약 +├── ssdf.md ← SSDF 19항목 결과 +├── supply-chain.md ← 공급망 7항목 결과 +├── iec62443.md ← IEC 62443 50항목 결과 +├── cyber-resilience.md ← 사이버 복원력 13항목 결과 +└── wireless.md ← 무선 보안 14항목 결과 +``` + +--- + +## 우선순위 + +### 긴급 (즉시 조치) +- 계정 관리 취약점, 미패치 취약점, 인젝션, 민감 데이터 미암호화 + +### 높음 (일정 내 조치) +- 설정 취약점, 보안 헤더 누락, 불완전한 로깅 + +### 보통 (개선 권고) +- 하드닝 권고, 문서화 부족 + +## 시큐어코딩 분기 시 + +`references/secure-coding/`에서 개요와 의사 코드 패턴을, `templates/secure-coding/`에서 언어별 평가 템플릿을 읽어 평가를 수행합니다. + +| 주제 | reference 파일 | +|------|---------------| +| 개요 (7개 카테고리, 49 CWE) | `references/secure-coding/overview.md` | +| 의사 코드 (46항목, 언어 무관) | `references/secure-coding/pseudocode.md` | +| JavaScript (Express.js, Node.js, Sequelize) | `templates/secure-coding/javascript.md` | +| Python (Django, Flask, SQLAlchemy) | `templates/secure-coding/python.md` | + +### 판단 기준 +- **양호**: 시큐어 코딩 패턴이 올바르게 적용됨 +- **부분이행**: 패턴이 부분적으로 적용됨, 개선 필요 +- **취약**: 취약한 패턴 감지됨 (UNSAFE 코드 존재) +- **해당없음**: 코드베이스에 해당 없음 + +--- + +## 제로트러스트 분기 시 + +`references/zero-trust/`에서 아키텍처 개요와 성숙도 모델을, `templates/zero-trust/`에서 핵심요소별 평가 체크리스트를 읽어 평가를 수행합니다. + +| 주제 | reference 파일 | +|------|---------------| +| 개요 | `templates/zero-trust/overview.md` | +| 식별자 및 디바이스 | `templates/zero-trust/identity-device.md` | +| 네트워크 및 시스템 | `templates/zero-trust/network-system.md` | +| 애플리케이션 및 데이터 | `templates/zero-trust/app-data.md` | +| 가시성 및 자동화 | `templates/zero-trust/visibility-automation.md` | +| OT/ICS 환경 | `templates/zero-trust/ot-environment.md` | +| ZT 아키텍처 참조 | `references/zero-trust/overview.md` | +| 성숙도 모델 상세 | `references/zero-trust/maturity-model.md` | +| OT 배포 가이드 | `references/zero-trust/ot-guide.md` | + +8개 핵심요소, ~396개 항목, 4단계 성숙도. 표준: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-207, CISA ZT Maturity Model. + +### 평가 흐름 +1. 목표 성숙도 수준 결정 (전통적/기본/고도화/최적화) +2. 시스템 맥락에 따른 관련 핵심요소 선택 +3. OT/ICS 환경이 감지되면 `ot-environment.md`도 로드 +4. 목표 성숙도 이하의 항목을 평가 +5. 갭 분석 보고서 생성 + +--- + +## 참고사항 +- 평가 중 파일을 수정하지 마세요 — 읽기 전용입니다 +- 해당 기술이 환경에 없는 경우 해당없음으로 표시하세요 +- 발견된 각 취약점에 대해 구체적인 조치 방안을 제시하세요 diff --git a/skills-ko/start/references/ai-security/overview.md b/skills-ko/kesekit-start-ko/references/ai-security/overview.md similarity index 100% rename from skills-ko/start/references/ai-security/overview.md rename to skills-ko/kesekit-start-ko/references/ai-security/overview.md diff --git a/skills-ko/start/references/ai-security/service-provider.md b/skills-ko/kesekit-start-ko/references/ai-security/service-provider.md similarity index 100% rename from skills-ko/start/references/ai-security/service-provider.md rename to skills-ko/kesekit-start-ko/references/ai-security/service-provider.md diff --git a/skills-ko/guide/references/ai-security/user-guide.md b/skills-ko/kesekit-start-ko/references/ai-security/user-guide.md similarity index 82% rename from skills-ko/guide/references/ai-security/user-guide.md rename to skills-ko/kesekit-start-ko/references/ai-security/user-guide.md index 1c3f1e3..808f78d 100644 --- a/skills-ko/guide/references/ai-security/user-guide.md +++ b/skills-ko/kesekit-start-ko/references/ai-security/user-guide.md @@ -56,15 +56,3 @@ - 정기적으로 음성 기록 검토 및 삭제 --- - -## 3. 체크리스트 요약 - -| # | 항목 | 확인 | -|---|------|:----:| -| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | -| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | -| 3 | AI 서비스 이용약관을 확인했는가? | □ | -| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | -| 5 | AI 출력 결과를 검증하고 있는가? | □ | -| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | -| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills-ko/kesekit-start-ko/references/secure-coding/overview.md b/skills-ko/kesekit-start-ko/references/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/skills-ko/kesekit-start-ko/references/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/skills-ko/kesekit-start-ko/references/secure-coding/pseudocode.md b/skills-ko/kesekit-start-ko/references/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/skills-ko/kesekit-start-ko/references/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/skills-ko/kesekit-start-ko/references/space-security/overview.md b/skills-ko/kesekit-start-ko/references/space-security/overview.md new file mode 100644 index 0000000..f31ab87 --- /dev/null +++ b/skills-ko/kesekit-start-ko/references/space-security/overview.md @@ -0,0 +1,82 @@ +# Space Security Overview + +> Source: KISA "Space Security Model" Part1 (2024.12) + Part2 (2025.12) + Explanation Guide (2025.12) + +## 1. Overview + +| Item | Content | +|------|---------| +| Publisher | KISA (Korea Internet & Security Agency) / MSIT | +| Target | Space industry operators, satellite service providers, GSaaS providers, supply chain participants | +| Scope | Space segment, Ground segment, Satellite service segment, GSaaS, Supply chain | +| Standards | CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, NIST CSF, CCSDS | + +## 2. Space Architecture Layers + +| Layer | Components | +|-------|-----------| +| Space Segment | GEO/MEO/LEO satellites, LEO constellations, satellite bus, payload, OBC | +| Ground Segment | Satellite control, payload data processing, antenna, satellite modem, mission control | +| GSaaS | Antenna zone, ground station-cloud zone, reservation/scheduling, API/DB servers | +| Satellite Services | Navigation (GNSS), Communication (VSAT/LEO), Broadcasting | +| Supply Chain | Satellite/launch vehicle manufacturers, ground station operators, satellite operators | + +## 3. Satellite Service Types + +| Service | Description | Key Components | +|---------|-------------|----------------| +| Navigation (GNSS) | Position/navigation/timing via GNSS satellites | Smart ships, autonomous vehicles, UAM | +| Communication | Satellite-based data/voice communication | VSAT, LEO mobile, LEO internet | +| Broadcasting | Satellite TV/radio relay | Broadcasting centers, set-top boxes | +| GSaaS | Ground Station as a Service (cloud-based shared infrastructure) | Shared antennas, cloud scheduling, API | + +## 4. Security Objectives + +| Objective | Description | +|-----------|-------------| +| Confidentiality | Prevent unauthorized access to satellite data and communications | +| Integrity | Prevent unauthorized modification of commands, telemetry, and operational data | +| Availability | Ensure continuous satellite service operation | +| Authentication | Verify identity of users, processes, devices, and satellites | +| Non-repudiation | Ensure accountability for satellite operations | +| Resilience | Maintain operations during and after security incidents | + +## 5. Threat Categories (3 Major Types) + +| Type | Description | Attack Vectors | +|------|-------------|----------------| +| Data Corruption | Unauthorized data modification/deletion | MITM, spoofing, malware, insider threat | +| Service Disruption | Service interruption/degradation | Jamming, DDoS, physical destruction, SW vulnerabilities | +| Information Leakage | Sensitive data exfiltration | Eavesdropping, sniffing, session hijacking, data theft | + +## 6. Checklist Structure (12 Domains, 53 Items) + +| # | Code | Domain | Items | Reference File | +|---|------|--------|:-----:|----------------| +| 1 | AC | Access Control | 12 | `access-control.md` | +| 2 | IA | Identification & Authentication | 2 | `access-control.md` | +| 3 | SC | System & Communication Security | 7 | `system-security.md` | +| 4 | SI | System & Information Integrity | 4 | `system-security.md` | +| 5 | SO | System/Service Operations Management | 9 | `operations.md` | +| 6 | IR | Incident Response | 2 | `operations.md` | +| 7 | PS | Personnel Security | 2 | `governance.md` | +| 8 | PE | Physical & Environmental Security | 3 | `governance.md` | +| 9 | RA | Risk Assessment & Security Evaluation | 2 | `governance.md` | +| 10 | SG | Security Governance | 4 | `governance.md` | +| 11 | CP | Contingency Planning | 2 | `governance.md` | +| 12 | SM | Supply Chain Management | 4 | `supply-chain.md` | + +## 7. Compliance Standards + +| Standard | Description | +|----------|-------------| +| CMMC | Cybersecurity Maturity Model Certification (US DoD, Level 1-3) | +| K-RMF | Korea Risk Management Framework | +| NIS2 | EU Network and Information Security Directive (includes space) | +| ISMS-P | Korea Information Security Management System | +| NIST IR 8401 | Satellite Ground Segment Cybersecurity | +| NIST IR 8270 | Commercial Satellite Operations Cybersecurity | +| NIST CSF | Cybersecurity Framework (Identify/Protect/Detect/Respond/Recover) | +| NIST SP 800-171 | CUI Protection (110 requirements) | +| CCSDS 352.0-B-2 | Space System Cryptographic Algorithm Recommendation | +| ENISA Space Threat Landscape | Space system threat analysis | diff --git a/skills-ko/kesekit-start-ko/references/space-security/supply-chain.md b/skills-ko/kesekit-start-ko/references/space-security/supply-chain.md new file mode 100644 index 0000000..2f66548 --- /dev/null +++ b/skills-ko/kesekit-start-ko/references/space-security/supply-chain.md @@ -0,0 +1,60 @@ +# Supply Chain Threat Scenarios + +> Domain: GSaaS/Supply Chain Threat Scenarios (with code-block illustrations) + +## Threat Scenarios (Supply Chain) + +### Scenario 1: Vulnerable Open-Source Causing Ground Station Failure +``` +Backdoor inserted into open-source community + -> Library used without verification + -> Backdoor enables system takeover + -> Ground station service disruption +``` + +### Scenario 2: Malicious Code in Payload Update File +``` +Developer PC compromised via phishing + -> Ransomware inserted into SW update + -> Update uploaded to satellite without verification + -> Payload malfunction +``` + +### Scenario 3: Tampered IDE Plugin Causing Satellite Malfunction +``` +Malicious code in IDE/CI-CD plugin + -> Firmware developed/loaded without verification + -> Component inspection skipped + -> Satellite bus malfunction +``` + +## GSaaS Threat Scenarios + +### Scenario 1: Satellite Control Hijacking via Weak Authentication +``` +Plaintext communication sniffing + -> IAM credential theft + -> Web shell upload + -> Ground station infiltration + -> Orbit control system takeover + -> Satellite hijacking +``` + +### Scenario 2: Data Tampering via Unauthorized Device Backdoor +``` +No media control + -> USB/single-board-computer backdoor + -> Internal network access + -> Satellite access credential collection + -> Data tampering malware injection +``` + +### Scenario 3: Physical Attack via Drone Disrupting Satellite Communication +``` +Plaintext communication sniffing + -> Antenna location identified + -> Drone with jamming device/explosives + -> Antenna-satellite communication disrupted +``` + +## Total: 4 Checklist Items + 6 Threat Scenarios diff --git a/skills-ko/kesekit-start-ko/references/zero-trust/maturity-model.md b/skills-ko/kesekit-start-ko/references/zero-trust/maturity-model.md new file mode 100644 index 0000000..2f3612d --- /dev/null +++ b/skills-ko/kesekit-start-ko/references/zero-trust/maturity-model.md @@ -0,0 +1,75 @@ +# Zero Trust Maturity Model + +> Reference: KISA 제로트러스트 가이드라인 2.0 (2024.12), CISA Zero Trust Maturity Model v2.0 +> Purpose: Detailed maturity level definitions and scoring guidance + +## Maturity Level Definitions + +### Traditional (전통적) +- Perimeter-based security model (castle-and-moat) +- Manual identity management and access control +- Static, rule-based security policies +- Limited visibility into internal traffic + +### Initial (기본) +- Beginning adoption of ZT principles +- Some automated identity management (SSO, basic MFA) +- Initial network segmentation beyond perimeter +- Centralized logging introduced + +### Advanced (고도화) +- Context-aware, dynamic access policies +- AI-assisted threat detection and response +- Comprehensive microsegmentation +- Real-time monitoring and analytics + +### Optimal (최적화) +- Fully automated, self-adaptive security +- AI-driven orchestration and response +- Predictive threat analysis +- Continuous verification at all layers +- Zero standing privileges + +## Scoring Framework + +### Per-Item Scoring + +| Score | Criteria | +|-------|----------| +| 3 | Fully implemented and operational | +| 2 | Partially implemented, gaps exist | +| 1 | Planned but not yet implemented | +| 0 | Not implemented, no plans | + +### Element Maturity Calculation + +``` +Element Score = (Sum of item scores for target level) / (Max possible score) x 100% + +Maturity Rating: + >= 80% → Mature (at or above target level) + 60-79% → Developing (approaching target level) + 40-59% → Emerging (significant gaps remain) + < 40% → Insufficient (major remediation needed) +``` + +## Cross-Element Dependencies + +| Element | Depends On | +|---------|-----------| +| Identity | — (foundation element) | +| Device | Identity | +| Network | Identity, Device | +| System | Network, Identity | +| Application | Identity, Device, Network | +| Data | Application, Identity | +| Visibility | All elements (observability layer) | +| Automation | Visibility (requires data to automate) | + +## Assessment Prioritization + +1. Start with **Identity** — foundation of all ZT controls +2. Then **Device** — ensure endpoint trust +3. Then **Network** — establish segmentation +4. Then **Application** and **Data** — protect workloads +5. Finally **Visibility** and **Automation** — enable continuous improvement diff --git a/skills-ko/kesekit-start-ko/references/zero-trust/ot-guide.md b/skills-ko/kesekit-start-ko/references/zero-trust/ot-guide.md new file mode 100644 index 0000000..92c0970 --- /dev/null +++ b/skills-ko/kesekit-start-ko/references/zero-trust/ot-guide.md @@ -0,0 +1,128 @@ +# OT/ICS Zero Trust Deployment Guide + +> Reference: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-82 Rev.3, IEC 62443 +> Purpose: Guidance for deploying Zero Trust in OT/ICS environments + +## Why OT/ICS Requires Special ZT Consideration + +Traditional IT Zero Trust assumes: +- Modern endpoints capable of running agents +- Tolerance for additional authentication latency +- Ability to patch and update frequently +- Replaceable infrastructure components + +OT/ICS reality: +- Legacy devices (PLCs, RTUs, HMIs) with 15-30 year lifecycles +- Real-time control loops with microsecond-level latency requirements +- Safety-critical functions where authentication delays can cause harm +- Proprietary protocols (Modbus, DNP3, OPC UA, PROFINET) +- Air-gapped or semi-isolated networks + +## Phased Deployment Approach + +### Phase 1: Visibility & Asset Discovery + +**Objective**: Know what you have before you protect it. + +- Conduct complete OT asset inventory (active + passive discovery) +- Map communication flows between OT devices, IT systems, and external connections +- Identify Purdue Model levels for each asset +- Baseline normal traffic patterns and protocol usage +- Document legacy devices that cannot support modern security controls + +### Phase 2: IT-OT Boundary Segmentation + +**Objective**: Establish strong boundary between IT and OT networks. + +- Deploy industrial DMZ between IT and OT networks +- Implement data diodes or unidirectional gateways for critical flows +- Control all IT-OT data exchange through monitored jump servers +- Establish separate authentication domains for IT and OT + +### Phase 3: OT Internal Segmentation + +**Objective**: Apply zone/conduit model within OT network. + +- Implement IEC 62443 zones and conduits +- Segment by safety level (SL), function, and criticality +- Deploy OT-aware firewalls between zones +- Establish conduit-level access policies + +### Phase 4: Identity & Access Control + +**Objective**: Enforce identity-based access in OT environment. + +- Deploy MFA for all remote OT access (hardware tokens preferred) +- Implement privileged access management (PAM) for OT systems +- Apply least-privilege access for OT operators and engineers +- Manage shared/service accounts with rotation and monitoring +- Use jump servers with session recording for maintenance access + +### Phase 5: Continuous Monitoring + +**Objective**: Maintain visibility and detect anomalies. + +- Deploy OT-specific IDS/IPS (passive monitoring preferred initially) +- Implement Deep Packet Inspection (DPI) for OT protocols +- Integrate OT security events with enterprise SIEM +- Establish OT-specific SOC or extend IT SOC with OT expertise +- Monitor for known OT malware signatures (Triton, Industroyer, etc.) + +### Phase 6: Automated Response (with Safety Validation) + +**Objective**: Enable automated response without compromising safety. + +- Define automated response actions with safety impact assessment +- Implement fail-safe defaults (fail-open for safety-critical, fail-close for non-critical) +- Require human approval for actions affecting safety systems +- Test automated responses in simulation environment before deployment + +## OT-Specific ZT Architecture + +``` +┌────────────────────────────────────────────┐ +│ Enterprise Zone (IT) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ PDP │ │ IdP/ │ │ Enterprise │ │ +│ │ │ │ MFA │ │ SIEM │ │ +│ └────────┘ └────────┘ └────────────┘ │ +└──────────────────┬─────────────────────────┘ + │ Industrial DMZ +┌──────────────────┴─────────────────────────┐ +│ ┌────────────┐ ┌─────────┐ ┌────────┐ │ +│ │ Jump Server│ │ Historian│ │ PEP │ │ +│ │ (PAM) │ │ Mirror │ │ (OT) │ │ +│ └────────────┘ └─────────┘ └────────┘ │ +└──────────────────┬─────────────────────────┘ + │ +┌──────────────────┴─────────────────────────┐ +│ OT Zone (ICS/SCADA) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ HMI │ │ PLC │ │ RTU │ │ +│ │ │ │ │ │ │ │ +│ └────────┘ └────────┘ └────────────┘ │ +│ ┌────────────────────────────────────┐ │ +│ │ OT IDS (Passive Monitoring) │ │ +│ └────────────────────────────────────┘ │ +└────────────────────────────────────────────┘ +``` + +## Legacy Device Handling + +For OT devices that cannot support modern ZT controls: + +1. **Security Wrapper/Proxy**: Place a ZT-capable proxy in front of legacy devices +2. **Network-Level Protection**: Use OT-aware firewalls to enforce access policies +3. **Monitoring**: Deploy passive DPI sensors for visibility without device modification +4. **Compensating Controls**: Document risk acceptance with compensating controls per IEC 62443 + +## Standards Mapping + +| OT-ZT Requirement | IEC 62443 | NIST SP 800-82 | KISA ZT 2.0 | +|-------------------|-----------|----------------|-------------| +| Network Segmentation | Zone/Conduit | Section 5.3 | NW Element | +| Access Control | FR 1 (AC) | Section 6.2 | ID Element | +| Device Management | FR 4 (DC) | Section 6.3 | DV Element | +| Communication Integrity | FR 3 (SI) | Section 5.4 | SY Element | +| Monitoring | FR 6 (RE) | Section 6.6 | VA Element | +| Incident Response | FR 7 (RA) | Section 6.7 | AU Element | diff --git a/skills-ko/kesekit-start-ko/references/zero-trust/overview.md b/skills-ko/kesekit-start-ko/references/zero-trust/overview.md new file mode 100644 index 0000000..38fe30d --- /dev/null +++ b/skills-ko/kesekit-start-ko/references/zero-trust/overview.md @@ -0,0 +1,72 @@ +# Zero Trust Architecture Reference + +> Reference: NIST SP 800-207, KISA 제로트러스트 가이드라인 2.0, CISA Zero Trust Maturity Model +> Purpose: Provide architectural context for Zero Trust maturity assessment + +## Zero Trust Architecture (ZTA) + +### Core Logical Components + +``` +┌─────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ PDP │ │ Policy │ │ Trust Algorithm │ │ +│ │ (Policy │ │ Engine │ │ (Risk Score + │ │ +│ │ Decision │ │ │ │ Context Analysis) │ │ +│ │ Point) │ │ │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ + │ + ┌────┴────┐ + │ PEP │ ← Policy Enforcement Point + │ │ + └────┬────┘ + │ +┌─────────────────────────────────────────────────────────┐ +│ Data Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ Subject │ │ Resource │ │ Enterprise │ │ +│ │ (User/ │→→│ (App/ │ │ Resources │ │ +│ │ Device) │ │ Data) │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### Deployment Models (NIST SP 800-207) + +1. **SDP (Software Defined Perimeter)**: Agent/gateway-based model +2. **Micro-segmentation**: Network-centric approach +3. **Network Infrastructure + SDP**: Hybrid approach + +### KISA Zero Trust Guidelines 2.0 — 8 Elements + +| Element | Korean | Scope | +|---------|--------|-------| +| Identity | 식별자 및 신원 | User identity management, MFA, continuous authentication | +| Device | 디바이스 및 엔드포인트 | Device inventory, health checks, compliance | +| Network | 네트워크 | Macro/micro segmentation, SDN, encrypted traffic | +| System | 시스템 | System hardening, patching, configuration management | +| Application | 애플리케이션 및 워크로드 | Resource authorization, remote access, monitoring | +| Data | 데이터 | Classification, DLP, encryption, access control | +| Visibility | 가시성 및 분석 | Logging, SIEM, threat analysis | +| Automation | 자동화 및 오케스트레이션 | SOAR, automated response, policy orchestration | + +### Related Standards + +| Standard | Organization | Focus | +|----------|-------------|-------| +| NIST SP 800-207 | NIST | ZTA reference architecture | +| CISA Zero Trust Maturity Model | CISA | Federal ZT maturity assessment | +| 제로트러스트 가이드라인 2.0 | KISA | Korean ZT implementation guide | +| NIST SP 800-82 | NIST | OT/ICS security guide | +| IEC 62443 | IEC | Industrial automation security | + +### Key Concepts + +- **PDP (Policy Decision Point)**: Evaluates access requests against policy +- **PEP (Policy Enforcement Point)**: Enforces PDP decisions at the access point +- **SDP (Software Defined Perimeter)**: Creates dynamic, identity-based perimeters +- **SASE (Secure Access Service Edge)**: Cloud-delivered convergence of network and security +- **ZTNA (Zero Trust Network Access)**: Application-level access without VPN +- **Microsegmentation**: Granular network isolation at workload level diff --git a/skills-ko/kesekit-start-ko/scripts/cii/cloud.md b/skills-ko/kesekit-start-ko/scripts/cii/cloud.md new file mode 100644 index 0000000..b5fc514 --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/cii/cloud.md @@ -0,0 +1,517 @@ +# 클라우드 점검 스크립트 (CA-01 ~ CA-19) + +## 1. 계정 관리 + +### CA-01: 사용자 계정 관리 +**점검:** +```bash +# AWS: IAM 사용자 목록 및 마지막 로그인 확인 +aws iam list-users --output table +aws iam generate-credential-report +aws iam get-credential-report --output text --query Content | base64 -d + +# Azure: 사용자 목록 확인 +az ad user list --output table +az ad user list --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}" --output table + +# GCP: IAM 사용자 확인 +gcloud iam service-accounts list +gcloud projects get-iam-policy --format=json +``` +**조치:** +```bash +# AWS: 불필요 계정 삭제/비활성화 +aws iam delete-user --user-name <사용자명> +aws iam delete-login-profile --user-name <사용자명> +# 액세스 키 비활성화 +aws iam update-access-key --user-name <사용자명> --access-key-id <키ID> --status Inactive + +# Azure: 불필요 계정 삭제/비활성화 +az ad user update --id <사용자ID> --account-enabled false +az ad user delete --id <사용자ID> + +# GCP: 서비스 계정 삭제/비활성화 +gcloud iam service-accounts disable <서비스계정이메일> +gcloud iam service-accounts delete <서비스계정이메일> +``` + +### CA-02: 사용자 정책 관리 +**점검:** +```bash +# AWS: 사용자별 정책 확인 +aws iam list-attached-user-policies --user-name <사용자명> +aws iam list-user-policies --user-name <사용자명> +aws iam list-groups-for-user --user-name <사용자명> + +# Azure: 역할 할당 확인 +az role assignment list --all --output table + +# GCP: IAM 정책 확인 +gcloud projects get-iam-policy +``` +**조치:** +```bash +# AWS: 불필요 권한 제거, 최소 권한 원칙 적용 +aws iam detach-user-policy --user-name <사용자명> --policy-arn <정책ARN> +# 그룹 기반 권한 관리 +aws iam create-group --group-name <그룹명> +aws iam attach-group-policy --group-name <그룹명> --policy-arn <정책ARN> +aws iam add-user-to-group --user-name <사용자명> --group-name <그룹명> + +# Azure: 역할 할당 변경 +az role assignment delete --assignee <사용자ID> --role <역할명> +az role assignment create --assignee <사용자ID> --role <역할명> --scope <범위> + +# GCP: IAM 바인딩 변경 +gcloud projects remove-iam-policy-binding --member=user:<이메일> --role=<역할> +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=<역할> +``` + +### CA-03: MFA(Multi-Factor Authentication) 설정 +**점검:** +```bash +# AWS: MFA 설정 여부 확인 +aws iam list-virtual-mfa-devices +aws iam list-mfa-devices --user-name <사용자명> +# MFA 미설정 사용자 확인 (credential report 활용) +aws iam get-credential-report --output text --query Content | base64 -d | grep -i "false" + +# Azure: MFA 상태 확인 +az ad user list --query "[].{UPN:userPrincipalName}" --output table +# Azure Portal: Azure AD > 보안 > MFA 에서 확인 + +# GCP: 2단계 인증은 Google Workspace Admin Console에서 확인 +``` +**조치:** +```bash +# AWS: 가상 MFA 디바이스 생성 및 활성화 +aws iam create-virtual-mfa-device --virtual-mfa-device-name <디바이스명> --outfile QRCode.png --bootstrap-method QRCodePNG +aws iam enable-mfa-device --user-name <사용자명> --serial-number --authentication-code1 <코드1> --authentication-code2 <코드2> + +# Azure: 조건부 액세스 정책으로 MFA 강제 (Azure Portal에서 설정) +# Azure AD > 보안 > 조건부 액세스 > 새 정책 > MFA 필수 + +# GCP: Google Workspace Admin Console에서 2단계 인증 강제 +``` + +### CA-04: 클라우드 계정 비밀번호 정책 관리 +**점검:** +```bash +# AWS: 비밀번호 정책 확인 +aws iam get-account-password-policy + +# Azure: 비밀번호 정책 확인 (Azure AD) +az ad group list --output table +# Azure Portal: Azure AD > 보안 > 인증 방법 > 비밀번호 보호 +``` +**조치:** +```bash +# AWS: 비밀번호 정책 설정 +aws iam update-account-password-policy \ + --minimum-password-length 8 \ + --require-symbols \ + --require-numbers \ + --require-uppercase-characters \ + --require-lowercase-characters \ + --max-password-age 90 \ + --password-reuse-prevention 24 \ + --allow-users-to-change-password + +# Azure: Azure AD Portal에서 비밀번호 정책 설정 +# Azure AD > 보안 > 인증 방법 > 비밀번호 보호 > 사용자 지정 금지 비밀번호 목록 +``` + +## 2. 권한 관리 + +### CA-05: 인스턴스 서비스 정책 관리 +**점검:** +```bash +# AWS: EC2 관련 IAM 정책 확인 +aws iam list-policies --query "Policies[?contains(PolicyName,'EC2')]" --output table +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,IamInstanceProfile]" --output table + +# Azure: VM 관련 역할 확인 +az vm list --output table +az role assignment list --query "[?contains(scope,'Microsoft.Compute')]" --output table + +# GCP: Compute Engine IAM 확인 +gcloud compute instances list +``` +**조치:** +```bash +# AWS: 인스턴스 관련 권한 최소화 +# 전용 IAM 역할 생성 후 인스턴스에 할당 +aws iam create-role --role-name <역할명> --assume-role-policy-document file://trust-policy.json +aws iam attach-role-policy --role-name <역할명> --policy-arn <정책ARN> +aws ec2 associate-iam-instance-profile --instance-id <인스턴스ID> --iam-instance-profile Name=<프로필명> + +# Azure: 리소스 그룹 단위 역할 할당 +az role assignment create --assignee <사용자ID> --role "Virtual Machine Contributor" --scope /subscriptions/<구독ID>/resourceGroups/<리소스그룹> + +# GCP: 커스텀 역할 적용 +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=roles/compute.instanceAdmin +``` + +### CA-06: 네트워크 서비스 정책 관리 +**점검:** +```bash +# AWS: VPC/네트워크 관련 정책 확인 +aws ec2 describe-vpcs --output table +aws ec2 describe-security-groups --output table + +# Azure: NSG 확인 +az network nsg list --output table +az network nsg rule list --nsg-name --resource-group <리소스그룹> --output table + +# GCP: 방화벽 규칙 확인 +gcloud compute firewall-rules list +``` +**조치:** +```bash +# AWS: 보안 그룹 규칙 관리 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr <관리자IP>/32 + +# Azure: NSG 규칙 관리 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> +az network nsg rule create --nsg-name --resource-group --name <규칙명> --priority 100 --access Allow --source-address-prefixes --destination-port-ranges 22 + +# GCP: 방화벽 규칙 관리 +gcloud compute firewall-rules delete <규칙명> +gcloud compute firewall-rules create <규칙명> --allow tcp:22 --source-ranges=/32 +``` + +## 3. 가상 리소스 관리 + +### CA-07: VPC 네트워크 서브넷 관리 +**점검:** +```bash +# AWS: 서브넷 구성 확인 (Public/Private 분리 여부) +aws ec2 describe-subnets --output table +aws ec2 describe-route-tables --output table +aws ec2 describe-internet-gateways --output table +aws ec2 describe-nat-gateways --output table + +# Azure: 가상 네트워크 서브넷 확인 +az network vnet list --output table +az network vnet subnet list --vnet-name --resource-group --output table + +# GCP: 서브넷 확인 +gcloud compute networks subnets list +``` +**조치:** +```bash +# Public 서브넷: 인터넷 게이트웨이 할당 +# Private 서브넷: NAT 게이트웨이 할당 +# 서브넷별 네트워크 리소스 별도 설정 + +# AWS: NAT 게이트웨이 생성 (Private 서브넷용) +aws ec2 create-nat-gateway --subnet-id --allocation-id + +# Azure: Private 서브넷에 NSG 적용 +az network vnet subnet update --vnet-name --name <서브넷명> --resource-group --network-security-group +``` + +### CA-08: 가상 네트워크 리소스 관리 +**점검:** +```bash +# AWS: 공인 IP 할당 인스턴스 확인 +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress]" --output table + +# Azure: 공인 IP 확인 +az network public-ip list --output table +az vm list-ip-addresses --output table + +# GCP: 외부 IP 확인 +gcloud compute instances list --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)" +``` +**조치:** +```bash +# AWS: 불필요 공인 IP 해제 +aws ec2 disassociate-address --association-id <연결ID> +aws ec2 release-address --allocation-id <할당ID> + +# Azure: 공인 IP 해제 +az network nic ip-config update --resource-group --nic-name --name --remove publicIpAddress + +# GCP: 외부 IP 제거 +gcloud compute instances delete-access-config <인스턴스명> --access-config-name "External NAT" +``` + +### CA-09: 접근 제어 설정 관리 +**점검:** +```bash +# AWS: 보안 그룹 규칙 확인 (0.0.0.0/0 허용 여부) +aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,Ingress:IpPermissions}" --output json +# 0.0.0.0/0 허용 규칙 필터링 +aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" --output table + +# Azure: NSG 규칙 중 Any 허용 확인 +az network nsg list --query "[].{Name:name,Rules:securityRules[?sourceAddressPrefix=='*']}" --output json + +# GCP: 0.0.0.0/0 허용 방화벽 규칙 확인 +gcloud compute firewall-rules list --filter="sourceRanges=0.0.0.0/0" +``` +**조치:** +```bash +# AWS: 불필요한 0.0.0.0/0 규칙 제거 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port <포트> --cidr 0.0.0.0/0 + +# Azure: 불필요 규칙 삭제 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> + +# GCP: 불필요 방화벽 규칙 삭제 +gcloud compute firewall-rules delete <규칙명> + +# 공통: 관리자 IP 또는 특정 IP에서만 접속 허용 +``` + +### CA-10: 스토리지 리소스 퍼블릭 접근 관리 +**점검:** +```bash +# AWS: S3 버킷 퍼블릭 접근 확인 +aws s3api get-bucket-acl --bucket <버킷명> +aws s3api get-public-access-block --bucket <버킷명> +aws s3api get-bucket-policy --bucket <버킷명> + +# Azure: 스토리지 계정 공개 접근 확인 +az storage account list --query "[].{Name:name,PublicAccess:allowBlobPublicAccess}" --output table + +# GCP: 버킷 IAM 확인 +gsutil iam get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 퍼블릭 접근 차단 +aws s3api put-public-access-block --bucket <버킷명> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true + +# Azure: 스토리지 공개 접근 비활성화 +az storage account update --name <스토리지명> --resource-group --allow-blob-public-access false + +# GCP: 버킷에서 allUsers/allAuthenticatedUsers 제거 +gsutil iam ch -d allUsers gs://<버킷명> +gsutil iam ch -d allAuthenticatedUsers gs://<버킷명> +``` + +## 4. 운영 관리 + +### CA-11: 관계형 데이터베이스 암호화 설정 +**점검:** +```bash +# AWS: RDS 암호화 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Encrypted:StorageEncrypted}" --output table + +# Azure: SQL DB 암호화 확인 +az sql db tde show --server <서버명> --database --resource-group + +# GCP: Cloud SQL 암호화 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.dataDiskEncryptionConfiguration)" +``` +**조치:** +```bash +# AWS: RDS 암호화 활성화 (생성 시 또는 스냅샷 복원) +aws rds create-db-instance --db-instance-identifier --storage-encrypted --kms-key-id ... + +# Azure: TDE 활성화 +az sql db tde set --server <서버명> --database --resource-group --status Enabled + +# GCP: 기본적으로 저장 데이터 암호화 적용됨 (CMEK 설정 가능) +``` + +### CA-12: 통신 구간 암호화 설정 +**점검:** +```bash +# AWS: ELB/ALB SSL 인증서 확인 +aws elbv2 describe-listeners --load-balancer-arn --query "Listeners[*].{Port:Port,Protocol:Protocol,Certs:Certificates}" --output table + +# Azure: Application Gateway SSL 확인 +az network application-gateway ssl-cert list --gateway-name <게이트웨이명> --resource-group + +# 공통: TLS 버전 확인 +openssl s_client -connect <호스트>:443 -tls1_2 +``` +**조치:** +```bash +# 공통 권고사항: +# 서버 원격 접근 시 VPN, SSH 사용 +# TLS v1.2 이상 (TLS v1.3 권장) 사용 +# 블록 암호: SEED, ARIA, AES (키 128bits 이상) +# 공개키 암호: RSA (키 2048bits 이상) +# 해시: SHA-2 이상 +``` + +### CA-13: 클라우드 서비스 사용자 계정 로깅 설정 +**점검:** +```bash +# AWS: CloudTrail 설정 확인 +aws cloudtrail describe-trails --output table +aws cloudtrail get-trail-status --name <트레일명> + +# Azure: Activity Log 확인 +az monitor activity-log list --offset 1h --output table + +# GCP: Cloud Audit Logs 확인 +gcloud logging read "logName:cloudaudit.googleapis.com" --limit 10 +``` +**조치:** +```bash +# AWS: CloudTrail 활성화 +aws cloudtrail create-trail --name <트레일명> --s3-bucket-name <버킷명> --is-multi-region-trail +aws cloudtrail start-logging --name <트레일명> + +# Azure: 진단 설정 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <리소스ID> --logs '[{"category":"AuditEvent","enabled":true}]' --storage-account <스토리지ID> + +# GCP: Audit Log 기본 활성화됨, 추가 설정 시 +gcloud projects get-iam-policy --format=json +``` + +### CA-14: 인스턴스 로깅 설정 +**점검:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 그룹 확인 +aws logs describe-log-groups --output table + +# Azure: VM 진단 설정 확인 +az vm diagnostics get-default-config + +# GCP: Ops Agent 설치 확인 +gcloud compute instances describe <인스턴스명> --format="value(metadata.items)" +``` +**조치:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 전송 +aws ssm send-command --instance-ids <인스턴스ID> --document-name "AWS-ConfigureAWSPackage" --parameters '{"action":["Install"],"name":["AmazonCloudWatchAgent"]}' + +# Azure: VM 진단 확장 설치 +az vm diagnostics set --resource-group --vm-name --settings <설정JSON> + +# GCP: Ops Agent 설치 +gcloud compute ssh <인스턴스명> -- 'curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh && sudo bash add-google-cloud-ops-agent-repo.sh --also-install' +``` + +### CA-15: 관계형 데이터베이스 로깅 설정 +**점검:** +```bash +# AWS: RDS 로깅 파라미터 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Logs:EnabledCloudwatchLogsExports}" --output table + +# Azure: SQL 감사 설정 확인 +az sql server audit-policy show --server <서버명> --resource-group + +# GCP: Cloud SQL 로그 플래그 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.databaseFlags)" +``` +**조치:** +```bash +# AWS: RDS 로그 내보내기 활성화 +aws rds modify-db-instance --db-instance-identifier --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}' + +# Azure: SQL 감사 활성화 +az sql server audit-policy update --server <서버명> --resource-group --state Enabled --storage-account <스토리지명> + +# GCP: Cloud SQL 감사 로그 활성화 +gcloud sql instances patch <인스턴스명> --database-flags=log_output=FILE,general_log=on,slow_query_log=on +``` + +### CA-16: 오브젝트 스토리지 버킷 로깅 설정 +**점검:** +```bash +# AWS: S3 서버 액세스 로깅 확인 +aws s3api get-bucket-logging --bucket <버킷명> + +# Azure: Blob Storage 진단 로그 확인 +az monitor diagnostic-settings list --resource <스토리지리소스ID> + +# GCP: 버킷 로깅 확인 +gsutil logging get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 서버 액세스 로깅 활성화 +aws s3api put-bucket-logging --bucket <버킷명> --bucket-logging-status '{"LoggingEnabled":{"TargetBucket":"<로그버킷>","TargetPrefix":"logs/"}}' + +# Azure: Blob Storage 진단 로그 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <스토리지리소스ID> --logs '[{"category":"StorageRead","enabled":true},{"category":"StorageWrite","enabled":true},{"category":"StorageDelete","enabled":true}]' + +# GCP: 버킷 로깅 활성화 +gsutil logging set on -b gs://<로그버킷> gs://<대상버킷> +``` + +### CA-17: 로그 보관 기간 설정 +**점검:** +```bash +# AWS: CloudWatch Logs 보관 기간 확인 +aws logs describe-log-groups --query "logGroups[*].{Name:logGroupName,Retention:retentionInDays}" --output table +# S3 수명 주기 정책 확인 +aws s3api get-bucket-lifecycle-configuration --bucket <버킷명> + +# Azure: 로그 보관 정책 확인 +az monitor diagnostic-settings list --resource <리소스ID> + +# GCP: 로그 버킷 보관 기간 확인 +gcloud logging buckets describe <버킷명> --location=global +``` +**조치:** +```bash +# AWS: CloudWatch Logs 보관 기간 설정 (예: 365일) +aws logs put-retention-policy --log-group-name <로그그룹명> --retention-in-days 365 + +# Azure: 진단 설정에서 보관 기간 설정 (일반적으로 Azure Portal에서 설정) + +# GCP: 로그 버킷 보관 기간 설정 +gcloud logging buckets update <버킷명> --location=global --retention-days=365 +``` + +### CA-18: 백업 사용 여부 +**점검:** +```bash +# AWS: 백업 설정 확인 +aws backup list-backup-plans --output table +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,BackupRetention:BackupRetentionPeriod}" --output table +aws ec2 describe-snapshots --owner-ids self --output table + +# Azure: 백업 항목 확인 +az backup item list --vault-name <볼트명> --resource-group --output table + +# GCP: 스냅샷 확인 +gcloud compute snapshots list +gcloud sql backups list --instance=<인스턴스명> +``` +**조치:** +```bash +# AWS: 자동 백업 설정 +aws backup create-backup-plan --backup-plan file://backup-plan.json +# RDS 백업 보관 기간 설정 +aws rds modify-db-instance --db-instance-identifier --backup-retention-period 7 + +# Azure: 백업 정책 설정 +az backup protection enable-for-vm --resource-group --vault-name <볼트명> --vm --policy-name <정책명> + +# GCP: 스냅샷 스케줄 생성 +gcloud compute resource-policies create snapshot-schedule <정책명> --region=<리전> --max-retention-days=14 --daily-schedule +``` + +### CA-19: 가상 리소스 이상징후 알림 설정 +**점검:** +```bash +# AWS: CloudWatch 알람 확인 +aws cloudwatch describe-alarms --output table + +# Azure: 경고 규칙 확인 +az monitor metrics alert list --output table + +# GCP: 알림 정책 확인 +gcloud alpha monitoring policies list +``` +**조치:** +```bash +# AWS: CloudWatch 알람 생성 (예: CPU 사용률) +aws cloudwatch put-metric-alarm --alarm-name "HighCPU" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions --dimensions Name=InstanceId,Value=<인스턴스ID> + +# Azure: 메트릭 경고 생성 +az monitor metrics alert create --name "HighCPU" --resource-group --scopes <리소스ID> --condition "avg Percentage CPU > 80" --action <액션그룹ID> + +# GCP: 알림 정책 생성 (gcloud 또는 Cloud Console에서 설정) +# Cloud Console > Monitoring > 알림 > 정책 만들기 > 조건 및 알림 채널(SMS, 이메일) 설정 +``` diff --git a/skills-ko/kesekit-start-ko/scripts/cii/database.md b/skills-ko/kesekit-start-ko/scripts/cii/database.md new file mode 100644 index 0000000..5abb7fb --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/cii/database.md @@ -0,0 +1,649 @@ +# DBMS 점검 스크립트 (D-01 ~ D-26) + +## 1. 계정 관리 + +### D-01: 기본 계정의 비밀번호, 정책 등을 변경하여 사용 +**점검:** +```sql +-- Oracle: 기본 계정 사용 여부 및 정책 확인 +SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE account_status = 'OPEN'; + +-- MSSQL: sa 계정 확인 +SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa'; + +-- MySQL: root 계정 확인 +SELECT User, Host FROM mysql.user; +SHOW VARIABLES LIKE 'validate_password%'; + +-- PostgreSQL: 역할 확인 +SELECT rolname, rolsuper FROM pg_roles; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; + +-- Cubrid +SELECT name, password FROM db_user; +SELECT * FROM db_password; +``` +**조치:** +```sql +-- Oracle: 비밀번호 변경 / 잠금 +ALTER USER <기본계정명> IDENTIFIED BY <신규비밀번호>; +ALTER USER <기본계정명> ACCOUNT LOCK; + +-- MSSQL: sa 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; + +-- MySQL 5.7 +UPDATE user SET authentication_string = PASSWORD('신규비밀번호') WHERE User = 'root'; +FLUSH PRIVILEGES; +-- MySQL 8.0 +ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; +FLUSH PRIVILEGES; + +-- Altibase +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- Tibero +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- PostgreSQL +ALTER USER postgres WITH PASSWORD '신규비밀번호'; + +-- Cubrid +ALTER USER "사용자계정명" PASSWORD '신규비밀번호'; +``` + +### D-02: 불필요 계정 제거 또는 잠금설정 +**점검:** +```sql +-- Oracle +SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; + +-- MSSQL +SELECT name, is_disabled FROM sys.server_principals; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM all_users; +SELECT * FROM dba_users; + +-- PostgreSQL +SELECT * FROM pg_roles; +-- 또는 명령어: \du + +-- Cubrid +SELECT name, password FROM db_user; +``` +**조치:** +```sql +-- Oracle +DROP USER [삭제할 계정]; + +-- MSSQL +EXEC sp_droplogin '삭제할 계정'; + +-- MySQL +DROP USER '삭제할 계정'@'호스트명'; +FLUSH PRIVILEGES; + +-- Altibase / Tibero +DROP USER user_name CASCADE; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; + +-- Cubrid +DROP USER [삭제할 계정]; +``` + +### D-03: 비밀번호 사용 기간 및 복잡도 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES WHERE resource_name LIKE 'PASSWORD%'; + +-- MySQL +SHOW VARIABLES LIKE 'validate_password%'; +SHOW VARIABLES LIKE 'default_password_lifetime'; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle: 비밀번호 정책 설정 +ALTER PROFILE <프로파일명> LIMIT + FAILED_LOGIN_ATTEMPTS 3 + PASSWORD_LIFE_TIME 30 + PASSWORD_REUSE_TIME 30 + PASSWORD_VERIFY_FUNCTION verify_function + PASSWORD_GRACE_TIME 5; +ALTER USER <계정명> PROFILE <프로파일명>; + +-- MSSQL: 암호 만료 강제 적용 (SSMS GUI) +-- 보안 > 로그인 > 속성 > "암호 만료 강제 적용" 설정 +-- OS 암호 정책: [로컬 보안 정책] > [암호 정책] > 최대 암호 사용 기간: 60일 + +-- MySQL: 복잡도 정책 +INSTALL COMPONENT 'file://component_validate_password'; +SET GLOBAL validate_password.policy = 'MEDIUM'; +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.mixed_case_count = 1; +SET GLOBAL validate_password.number_count = 1; +SET GLOBAL validate_password.special_char_count = 1; +-- LifeTime 정책 +SET GLOBAL default_password_lifetime = 90; +ALTER USER '<계정명>'@'<호스트>' PASSWORD EXPIRE INTERVAL 91 DAY; + +-- Altibase +ALTER USER 계정명 LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7); + +-- Tibero +CREATE PROFILE prof LIMIT + failed_login_attempts 3 + password_lock_time 1/1440 + password_life_time 90 + password_reuse_time unlimited + password_reuse_max 10 + password_grace_time 10 + password_verify_function verify_function; +``` + +### D-04: 관리자 권한을 필요한 계정에만 허용 +**점검:** +```sql +-- Oracle: SYSDBA 권한 점검 +SELECT username FROM v$pwfile_users WHERE username NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +) AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +-- Admin 부적합 계정 점검 +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ( + 'SYS','SYSTEM','AQ_ADMINISTRATOR_ROLE','DBA','DSYS','BACSYS','SCHEDULER_ADMIN','MSYS' +) AND admin_option = 'YES' AND grantee NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +); + +-- MySQL: SUPER 권한 확인 +SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; + +-- PostgreSQL +SELECT * FROM pg_user; +SELECT username, usesuper FROM pg_shadow; + +-- Cubrid: DBA 권한 사용자 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +REVOKE <권한> FROM <계정명>; +GRANT <권한> ON <테이블명> TO <계정명>; + +-- MSSQL: sysadmin 역할에서 삭제 +EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; + +-- MySQL: SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; + +-- PostgreSQL: 불필요 관리자 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; + +-- Cubrid: DBA 권한 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +``` + +### D-05: 비밀번호 재사용 제약 설정 +**점검:** +```sql +-- Oracle +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' + AND limit IN ('UNLIMITED', 'NULL'); +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' + AND limit IN ('UNLIMITED', 'NULL'); + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; + +-- Altibase +ALTER USER [계정명] LIMIT (PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 10); + +-- Tibero +CREATE PROFILE prof LIMIT + password_reuse_time unlimited + password_reuse_max 10; +``` + +### D-06: DB 사용자 계정 개별 부여 +**점검:** +```sql +-- Oracle +SELECT username FROM dba_users ORDER BY username; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL +SELECT * FROM pg_shadow; + +-- Altibase +SELECT * FROM system_.sys_users_; +``` +**조치:** +```sql +-- Oracle: 공용 계정 삭제 후 개별 계정 생성 +DROP USER '공용계정'; +CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +GRANT connect, resource TO [계정명]; + +-- MSSQL +EXEC sp_droplogin '공용계정'; +CREATE LOGIN '생성계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성계정' FOR LOGIN '생성계정'; + +-- MySQL +DROP USER <계정명>@<호스트>; +CREATE USER '<계정명>'@'<호스트>' IDENTIFIED BY '비밀번호'; +GRANT SELECT, INSERT ON DB이름.테이블명 TO '<계정명>'@'<호스트>'; +FLUSH PRIVILEGES; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' <권한명>; +``` + +### D-07: root 권한으로 서비스 구동 제한 +**점검:** +```bash +# Oracle +ps -ef | grep pmon +ps -ef | grep tnslsnr + +# MySQL +ps -ef | grep mysqld +cat /etc/my.cnf | grep user + +# Altibase +ps -ef | grep altibase | grep -v grep +``` +**조치:** +```bash +# Oracle: oracle 계정으로 전환 후 구동 +su - oracle +lsnrctl start +sqlplus / as sysdba +startup + +# MySQL: my.cnf [mysqld] 섹션에 user 지정 +# vi /etc/my.cnf +# [mysqld] +# user = mysql + +# Altibase: 전용 계정으로 소유자 변경 +chown -R [계정명]:[그룹명] '[Altibase 디렉터리]' +``` + +### D-08: 안전한 암호화 알고리즘 사용 +**점검:** +```sql +-- Oracle: 암호화 알고리즘 확인 +SELECT * FROM v$parameter WHERE name LIKE '%crypto%'; + +-- MySQL +SHOW VARIABLES LIKE '%ssl%'; +``` +**조치:** +```sql +-- 안전한 암호화 알고리즘(AES-256, SHA-256 등) 사용 설정 +-- DBMS별 암호화 설정은 벤더 문서 참조 +``` + +### D-09: 로그인 실패 시 잠금정책 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES + WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS'; + +-- MySQL +SHOW VARIABLES LIKE 'max_connect_errors'; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE <프로파일명> LIMIT FAILED_LOGIN_ATTEMPTS 5; + +-- MySQL +SET GLOBAL max_connect_errors = 5; +``` + +## 2. 접근 관리 + +### D-10: 원격에서 DB 서버 접속 제한 +**점검:** +```sql +-- Oracle: listener.ora에서 접근 IP 제한 확인 +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL: pg_hba.conf 확인 +``` +**조치:** +```sql +-- MySQL: 원격 접속 제한 +-- 특정 IP에서만 접속 가능하도록 계정 생성 +CREATE USER '<계정명>'@'<허용IP>' IDENTIFIED BY '비밀번호'; +-- 모든 호스트 접근 가능 계정 삭제 +DROP USER '<계정명>'@'%'; +FLUSH PRIVILEGES; +``` +```bash +# Oracle: $ORACLE_HOME/network/admin/sqlnet.ora +# tcp.validnode_checking = YES +# tcp.invited_nodes = (허용IP1, 허용IP2) + +# PostgreSQL: pg_hba.conf에서 접근 IP 제한 +# host all all <허용IP>/32 md5 +``` + +### D-11: 시스템 테이블 접근 제한 +**점검:** +```sql +-- Oracle: DBA 이외 시스템 테이블 접근 권한 확인 +SELECT grantee, privilege, table_name FROM dba_tab_privs + WHERE table_name IN (SELECT table_name FROM dba_tables WHERE owner = 'SYS'); +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.<테이블명> FROM <계정명>; +``` + +### D-12: 리스너 비밀번호 설정 +**점검:** +```bash +# Oracle: listener.ora 파일 확인 +cat $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: 리스너 비밀번호 설정 +lsnrctl +LSNRCTL> set current_listener <리스너명> +LSNRCTL> change_password +# Old password: (빈칸) +# New password: <비밀번호> +LSNRCTL> save_config +``` + +### D-13: 불필요한 ODBC/OLE-DB 데이터 소스 제거 +**점검:** +```powershell +# Windows: ODBC 데이터 소스 확인 +Get-OdbcDsn +``` +**조치:** +```powershell +# Windows: 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType "System" +``` + +### D-14: 주요 파일 접근 권한 설정 +**점검:** +```bash +# Oracle +ls -la $ORACLE_HOME/dbs/*.ora +ls -la $ORACLE_HOME/network/admin/*.ora + +# MySQL +ls -la /etc/my.cnf +ls -la /var/lib/mysql/ + +# PostgreSQL +ls -la /var/lib/pgsql/data/pg_hba.conf +ls -la /var/lib/pgsql/data/postgresql.conf +``` +**조치:** +```bash +# Oracle: 640 이하 권한 설정 +chmod 640 $ORACLE_HOME/dbs/*.ora +chmod 640 $ORACLE_HOME/network/admin/*.ora +chown oracle:dba $ORACLE_HOME/dbs/*.ora + +# MySQL +chmod 640 /etc/my.cnf +chown mysql:mysql /etc/my.cnf + +# PostgreSQL +chmod 600 /var/lib/pgsql/data/pg_hba.conf +chown postgres:postgres /var/lib/pgsql/data/pg_hba.conf +``` + +### D-15: 리스너 로그 및 trace 파일 변경 제한 +**점검:** +```bash +# Oracle: listener.ora에서 ADMIN_RESTRICTIONS 확인 +grep ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: listener.ora에 추가 +# ADMIN_RESTRICTIONS_<리스너명> = ON +``` + +### D-16: Windows 인증 모드 사용 +**점검:** +```sql +-- MSSQL: 인증 모드 확인 +SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); +-- 1: Windows 인증 모드, 0: 혼합 모드 +``` +**조치:** +``` +-- MSSQL: SSMS > 서버 속성 > 보안 > "Windows 인증 모드" 선택 +``` + +## 3. 옵션 관리 + +### D-17: Audit Table 접근 제한 +**점검:** +```sql +-- Oracle: Audit 테이블 접근 권한 확인 +SELECT grantee, privilege FROM dba_tab_privs WHERE table_name LIKE '%AUDIT%'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.AUD$ FROM <계정명>; +``` + +### D-18: DBA 계정 Role이 Public으로 설정되지 않도록 조정 +**점검:** +```sql +-- Oracle: PUBLIC에 부여된 권한 확인 +SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'PUBLIC'; +``` +**조치:** +```sql +-- Oracle: PUBLIC에서 불필요 Role/권한 회수 +REVOKE FROM PUBLIC; +REVOKE EXECUTE ON <패키지명> FROM PUBLIC; +``` + +### D-19: OS_ROLES 등 FALSE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER OS_ROLES; +SHOW PARAMETER REMOTE_OS_AUTHENTICATION; +SHOW PARAMETER REMOTE_OS_ROLES; +``` +**조치:** +```sql +-- Oracle: init.ora 또는 spfile 수정 +ALTER SYSTEM SET OS_ROLES = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_AUTHENTICATION = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE; +-- DB 재시작 필요 +``` + +### D-20: 인가되지 않은 Object Owner 제한 +**점검:** +```sql +-- Oracle: Object Owner 확인 +SELECT owner, object_type, count(*) FROM dba_objects GROUP BY owner, object_type ORDER BY owner; +``` +**조치:** +```sql +-- 불필요한 Object Owner의 객체를 적절한 스키마로 이전 또는 삭제 +``` + +### D-21: 인가되지 않은 GRANT OPTION 사용 제한 +**점검:** +```sql +-- Oracle +SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE admin_option = 'YES'; +SELECT grantee, table_name, privilege, grantable FROM dba_tab_privs WHERE grantable = 'YES'; +``` +**조치:** +```sql +-- Oracle: ADMIN OPTION 제거 후 재부여 +REVOKE <권한> FROM <계정명>; +GRANT <권한> TO <계정명>; +``` + +### D-22: 자원 제한 기능 TRUE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER RESOURCE_LIMIT; +``` +**조치:** +```sql +-- Oracle +ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +``` + +### D-23: xp_cmdshell 사용 제한 +**점검:** +```sql +-- MSSQL +EXEC sp_configure 'xp_cmdshell'; +``` +**조치:** +```sql +-- MSSQL: xp_cmdshell 비활성화 +EXEC sp_configure 'show advanced options', 1; +RECONFIGURE; +EXEC sp_configure 'xp_cmdshell', 0; +RECONFIGURE; +``` + +### D-24: Registry Procedure 권한 제한 +**점검:** +```sql +-- MSSQL: 레지스트리 관련 확장 저장 프로시저 확인 +SELECT name FROM sys.objects WHERE name LIKE 'xp_reg%'; +``` +**조치:** +```sql +-- MSSQL: public에서 실행 권한 제거 +DENY EXECUTE ON xp_regread TO public; +DENY EXECUTE ON xp_regwrite TO public; +DENY EXECUTE ON xp_regdeletekey TO public; +DENY EXECUTE ON xp_regdeletevalue TO public; +DENY EXECUTE ON xp_regenumvalues TO public; +``` + +## 4. 패치 관리 + +### D-25: 주기적 보안 패치 및 벤더 권고 사항 적용 +**점검:** +```sql +-- Oracle: 버전 확인 +SELECT * FROM v$version; + +-- MSSQL: 버전 확인 +SELECT @@VERSION; + +-- MySQL: 버전 확인 +SELECT VERSION(); + +-- PostgreSQL: 버전 확인 +SELECT version(); +``` +**조치:** +``` +-- 공통: 벤더 보안 패치 사이트에서 최신 패치 확인 및 적용 +-- Oracle: https://www.oracle.com/security-alerts/ +-- MSSQL: https://learn.microsoft.com/ko-kr/sql/ +-- MySQL: https://dev.mysql.com/downloads/ +-- PostgreSQL: https://www.postgresql.org/support/security/ +``` + +### D-26: 감사 기록 정책 설정 +**점검:** +```sql +-- Oracle: Audit 설정 확인 +SHOW PARAMETER AUDIT_TRAIL; +SELECT * FROM dba_stmt_audit_opts; +SELECT * FROM dba_priv_audit_opts; + +-- MSSQL: 감사 설정 확인 +SELECT * FROM sys.server_audits; + +-- MySQL: 로그 설정 확인 +SHOW VARIABLES LIKE 'general_log%'; +SHOW VARIABLES LIKE 'log_bin%'; + +-- PostgreSQL +SHOW log_statement; +SHOW log_connections; +SHOW log_disconnections; +``` +**조치:** +```sql +-- Oracle: Audit 활성화 +ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE=SPFILE; +AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS; +AUDIT CREATE SESSION; + +-- MySQL: 일반 로그 활성화 +SET GLOBAL general_log = 'ON'; +SET GLOBAL general_log_file = '/var/log/mysql/general.log'; + +-- PostgreSQL: postgresql.conf +-- log_statement = 'all' +-- log_connections = on +-- log_disconnections = on +-- logging_collector = on +``` diff --git a/skills-ko/kesekit-start-ko/scripts/cii/network.md b/skills-ko/kesekit-start-ko/scripts/cii/network.md new file mode 100644 index 0000000..9d0b68d --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/cii/network.md @@ -0,0 +1,892 @@ +# 네트워크 장비 점검 스크립트 (N-01 ~ N-38) + +## 1. 계정 관리 + +### N-01: 비밀번호 설정 +**점검:** +``` +! Cisco IOS +Router> enable +Router# show running-config +! VTY, 콘솔, AUX 포트의 login/password 설정 확인 + +! Juniper Junos +user@host> configure +user@host# show + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - enable 비밀번호 +Router(config)# enable secret <비밀번호> +! VTY 비밀번호 +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! 콘솔 비밀번호 +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! AUX 비밀번호 +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> + +! Radware Alteon +Main# /cfg/sys/access/user/admpw +Main# apply +Main# save + +! Juniper Junos +user@host# set system root-authentication plain-test-passwd + +! Piolink PLOS +(config)# password +``` + +### N-02: 비밀번호 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! security passwords min-length 설정 확인 +``` +**조치:** +``` +! Cisco IOS - 비밀번호 최소 길이 설정 +Router(config)# security passwords min-length <길이> +``` + +### N-03: 암호화된 비밀번호 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! enable secret / username secret / service password-encryption 확인 + +! Juniper Junos +user@host# show +! encrypted-password 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# enable secret <비밀번호> +Router(config)# username <사용자> secret <비밀번호> +Router(config)# service password-encryption + +! Juniper Junos +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> +``` + +### N-04: 계정 잠금 임계값 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show login + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! Cisco IOS +Router(config)# login block-for <잠금시간> attempts <실패횟수> within <허용시간> + +! Juniper Junos +[edit system login retry-options] +user@host# set tries-before-disconnect <실패횟수> +user@host# set lockout-period <잠금시간> +``` + +### N-05: 사용자/명령어별 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show privilege + +! Juniper Junos +! [edit system login] 에서 superuser, read-only 클래스 분리 확인 +``` +**조치:** +``` +! Cisco IOS - 사용자별 권한 수준 지정 +Router(config)# username [ID] privilege [1-15] secret [PASS] +! 명령어별 권한 수준 지정 (중요 명령어 레벨 15 적용) +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging + +! Juniper Junos +[edit system login] +login { + class class-name { + allow-commands "regular-expression"; + deny-commands "regular-expression"; + idle-timeout minutes; + permissions [ permissions ]; + } +} + +! Piolink PLOS +! 슈퍼 유저(root)와 일반 유저로 권한 분리 관리 +``` + +## 2. 접근 관리 + +### N-06: VTY 접근(ACL) 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list 및 access-class 설정 확인 + +! Juniper Junos +user@host# show +! firewall filter + 루프백 인터페이스 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty 0 4 +Router(config-line)# access-class in + +! Radware Alteon +# cfg > sys > access > mgmt > add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply > save + +! Juniper Junos +user@host# set policy-options prefix-list +user@host# edit firewall family inet filter +user@host# edit term +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set from protocol tcp +user@host# set from destination-port ssh +user@host# set then discard +! 기본 허용 종료 +user@host# set term then accept +! 루프백에 적용 +user@host# set interfaces lo0 unit 0 family inet filter input + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-07: Session Timeout 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! exec-timeout 설정 확인 +``` +**조치:** +``` +! Cisco IOS (10분 이하 권고, 예: 5분) +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 + +! Radware Alteon +# cfg > sys > idle <분> > apply > save + +! Juniper Junos +[edit login] +user@host# set class <클래스> idle-timeout <분> + +! Piolink PLOS +(config)# terminal timeout <분> +``` + +### N-08: VTY 접속 시 안전한 프로토콜 사용 +**점검:** +``` +! Cisco IOS +Router# show ip ssh +Router# show version + +! Juniper Junos +user@host# set ssh +``` +**조치:** +``` +! Cisco IOS - SSH 설정 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +Router(config)# ip ssh version 2 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh authentication-retries <횟수> +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh + +! Radware Alteon +# cfg > /sys/sshd ena > /sys/sshd on > apply > save + +! Juniper Junos +root# set system services ssh +root# delete system services telnet +root# commit + +! Piolink PLOS +(config-management-access)# ssh status enable +(config-management-access)# telnet status disable +(config-management-access)# apply +``` + +### N-09: 불필요한 보조 입출력 포트 사용 금지 +**점검:** +``` +! Cisco IOS +Router# show running +! 불필요 포트 Up/Down 확인 +``` +**조치:** +``` +! Cisco IOS - AUX 포트 차단 +Router(config)# line aux 0 +Router(config-line)# no password +Router(config-line)# transport input none +Router(config-line)# no exec +Router(config-line)# exec-timeout 0 1 + +! Juniper Junos +[edit system ports] +root# set auxiliary disable +root# commit +``` + +### N-10: 로그인 시 경고 메시지 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! banner 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# banner motd # <경고 문구> # +Router(config)# banner login # <경고 문구> # +Router(config)# banner exec # <경고 문구> # + +! Radware Alteon +# cfg > sys > banner > apply > save + +! Juniper Junos +[edit system login] +message "경고 문구" +``` + +### N-11: 원격로그 서버 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging trap informational +Router(config)# logging +Router(config)# logging facility local6 +Router(config)# logging source-interface serial 0 + +! Radware Alteon +# cfg > sys > /syslog/host > apply > save + +! Juniper Junos +user@host# edit system syslog +user@host# set system syslog file message any error +user@host# set system syslog host any any +user@host# set archive files 5 sizes 5m world-readable + +! Piolink PLOS +# logging server enable +# logging server +``` + +## 3. 패치 관리 + +### N-12: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +``` +! Cisco IOS +Router# show version + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! 공통 +! 1. 하드웨어/소프트웨어/EOL/패치 현황 문서화 +! 2. 벤더 보안 패치 및 권고사항 입수 +! 3. 취약점 영향도/발생 가능성 분석 후 패치 우선순위 결정 +! 4. 테스트베드(GNS3 등)에서 패치 검증 +! 5. 패치 적용 전 이미지/설정 백업 후 적용 +! 벤더별 패치 사이트: +! Cisco: https://software.cisco.com +! Juniper: https://support.juniper.net/support/downloads +! 공통: https://www.krcert.or.kr +``` + +## 4. 로그 관리 + +### N-13: 로깅 버퍼 크기 설정 +**점검:** +``` +! Cisco IOS +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging buffered 16000 +Router(config)# logging buffered informational + +! Piolink PLOS +(config)# logging buffer +(config)# logging priority +``` + +### N-14: 정책에 따른 로깅 설정 +**점검:** +``` +! Cisco IOS +Router# show logging + +! Juniper Junos +user@host# show log messages +``` +**조치:** +``` +! 공통 - 6가지 로깅 방법 활용 +! 1. 콘솔 로깅: 콘솔 포트에서만 확인 +! 2. Buffered 로깅: RAM에 저장 (버퍼 가득 차면 오래된 로그 대체) +! 3. Terminal 로깅: terminal monitor로 VTY에 전송 +! 4. Syslog: 외부 syslog 서버에 저장 +! 5. SNMP traps: 외부 SNMP 서버에 전송 +! 6. ACL 침입 로깅: ACL 룰에 log/log-input 추가 +``` + +### N-15: NTP 및 시각 동기화 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ntp server 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# ntp server + +! Radware Alteon +# cfg > /sys/ntp > on +# prisrvr +# intrval <동기화주기> +# tzone +9:00 +# apply > save + +! Juniper Junos +[edit system ntp] +user@host# set server +user@host# set boot-server +``` + +### N-16: Timestamp 로그 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service timestamps 확인 +``` +**조치:** +``` +! Cisco IOS - UTC 시간 밀리초 단위 +Router(config)# service timestamps log datetime msec show-timezone +! 로컬 시간(KST) 밀리초 단위 +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone +``` + +## 5. 기능 관리 + +### N-17: SNMP 서비스 확인 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show snmp + +! Juniper Junos +user@host# show snmp + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - SNMP 비활성화 +Router(config)# no snmp-server + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: d + +! Juniper Junos +user@host# no set snmp community public +``` + +### N-18: SNMP Community String 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community 설정 확인 (public/private 사용 여부) +``` +**조치:** +``` +! Cisco IOS +Router(config)# snmp-server community <복잡한String> + +! Radware Alteon +# cfg/sys/ssnmp +# rcomm <복잡한String> +# wcomm <복잡한String> +# apply > save + +! Juniper Junos +user@host# set snmp community <복잡한String> authorization read-only + +! Piolink PLOS +switch(config-snmp)# community <복잡한String> +switch(config-snmp)# status enable +switch(config-snmp)# apply +``` + +### N-19: SNMP ACL 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community + ACL 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + +! Juniper Junos +[edit snmp] +user@host# edit client-list +user@host# set default restrict +user@host# set +user@host# up +user@host# edit community +user@host# set client-list-name + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-20: SNMP Community 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community RO/RW 확인 +``` +**조치:** +``` +! Cisco IOS - RO 권한만 설정 +Router(config)# snmp-server community RO + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: r +>> Main# apply + +! Juniper Junos +[edit snmp] +user@host# delete community +user@host# set community authorization read-only +! SNMPv3 그룹 RW 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <모델> security-level <레벨> write-view + +! Piolink PLOS +switch(config-snmp)# policy read-only +switch(config-snmp)# apply +``` + +### N-21: TFTP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tftp +``` + +### N-22: Spoofing 방지 필터링 적용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list deny 설정 확인 + +! Juniper Junos +! Configure/Apply Firewall Filters 확인 +``` +**조치:** +``` +! Cisco IOS - Anti-Spoofing ACL (Extended ACL 100-199) +Router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +Router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +Router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +Router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any +Router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +Router(config)# access-list permit ip any any +Router(config)# interface serial <인터페이스> +Router(config-if)# ip access-group in + +! Juniper Junos +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +[edit firewall family inet filter ] +user@host# set term then accept +user@host# set interfaces <인터페이스> unit <유닛> family inet filter input +``` + +### N-23: DDoS 공격 방어 설정 또는 DDoS 장비 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show configuration +``` +**조치:** +``` +! 공통 - DDoS 방어 3가지 방법 +! 1. ACL: 스푸핑 방지 필터링 사전 적용, 공격 유형별 IP/프로토콜/포트 임시 차단 +! 2. Rate Limiting: UDP, ICMP, TCP SYN 패킷 대역폭 제한 +! 3. TCP Intercept: SYN Flooding 방어 +! - Intercept 모드: 라우터가 SYN-ACK 대신 응답 +! - Watch 모드: SYN 전달 후 30초 미완료 시 RST 전송 +``` + +### N-24: 사용하지 않는 인터페이스 비활성화 +**점검:** +``` +! Cisco IOS +Router# show interface +! Administratively down 확인 + +! Juniper Junos +user@host# show interface terse +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# shutdown + +! Radware Alteon +>> Main# /cfg/port <포트>/dis +>> Main# apply + +! Juniper Junos +[edit interfaces] +user@host# set <인터페이스> disable + +! Piolink PLOS +switch(config)# port <포트> status disable +switch(config)# apply +``` + +### N-25: TCP Keepalive 서비스 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service tcp-keepalives 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# service tcp-keepalives-in +Router(config)# service tcp-keepalives-out +``` + +### N-26: Finger 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip finger + +! Juniper Junos +[edit system services] +user@host# delete finger +user@host# commit +``` + +### N-27: 웹 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip http server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip http server +Router(config)# no ip http secure-server + +! Radware Alteon +>> Main# /cfg/sys/access/https/https dis +>> Main# apply + +! Juniper Junos +user@host# delete system services web-management + +! Piolink PLOS +(config-management-access)# http status disable +(config-management-access)# https status disable +``` + +### N-28: TCP/UDP Small 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +``` + +### N-29: Bootp 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip bootp server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip bootp server +! DHCP 유지하고 BOOTP만 차단 시 +Router(config)# ip dhcp bootp ignore + +! Radware Alteon +>> Main# /cfg/sys/bootp dis +>> Main# apply + +! Juniper Junos +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스> server <주소> +``` + +### N-30: CDP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show cdp +``` +**조치:** +``` +! Cisco IOS - 전체 비활성화 +Router(config)# no cdp run +! 특정 인터페이스 비활성화 +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +``` + +### N-31: Directed-broadcast 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast + +! Radware Alteon +# cfg/l3/frwd > dirbr disable > apply > save + +! Passport +# config vlan ip directed-broadcast > disable +``` + +### N-32: Source Routing 차단 +**점검:** +``` +! Cisco IOS / Juniper Junos +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip source-route + +! Juniper Junos +user@host# set chassis no-source-route +``` + +### N-33: Proxy ARP 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp + +! Juniper Junos +[edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp +``` + +### N-34: ICMP unreachable, redirect 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! 각 인터페이스 no ip unreachables / no ip redirects 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects + +! Juniper Junos - 전체 장비 +[edit system] +user@host# set no-redirects +! 특정 인터페이스 +[edit interfaces] +user@host# set <인터페이스> unit <유닛> family <패밀리> no-redirects +``` + +### N-35: identd 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip identd +``` + +### N-36: Domain Lookup 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip domain lookup +``` + +### N-37: PAD 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service pad +``` + +### N-38: mask-reply 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show ip interface +! "ICMP mask replies are never sent" 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +``` diff --git a/skills-ko/kesekit-start-ko/scripts/cii/pc.md b/skills-ko/kesekit-start-ko/scripts/cii/pc.md new file mode 100644 index 0000000..167c9ca --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/cii/pc.md @@ -0,0 +1,348 @@ +# PC 점검 스크립트 (PC-01 ~ PC-18) + +## 1. 계정 관리 + +### PC-01: 비밀번호의 주기적 변경 +**점검:** +```powershell +# 최대 암호 사용 기간 확인 +net accounts | findstr "최대" +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol.cfg +findstr "MaximumPasswordAge" C:\secpol.cfg +findstr "MinimumPasswordAge" C:\secpol.cfg +findstr "PasswordHistorySize" C:\secpol.cfg +``` +**조치:** +```powershell +# 최대 암호 사용 기간 90일 설정 +net accounts /maxpwage:90 +# 최소 암호 사용 기간 1일 +net accounts /minpwage:1 + +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최대 암호 사용 기간": 90일 +# "최소 암호 사용 기간": 1일 +# "최근 암호 기억": 24개 + +# 계정별 비밀번호 기간 설정 +# LUSRMGR.MSC > 사용자 > 계정 속성 > "암호 사용 기간 제한 없음" 해제 +``` + +### PC-02: 비밀번호 관리정책 설정 +**점검:** +```powershell +# 암호 복잡성 및 최소 길이 확인 +net accounts +secedit /export /cfg C:\secpol.cfg +findstr "MinimumPasswordLength" C:\secpol.cfg +findstr "PasswordComplexity" C:\secpol.cfg +``` +**조치:** +```powershell +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최소 암호 길이": 8문자 이상 +# "암호는 복잡성을 만족해야 함": 사용함 + +# 복잡성 기준: 영문 대/소문자, 숫자, 특수문자 중 +# 2종류 조합 시 최소 10자리 이상 +# 3종류 조합 시 최소 8자리 이상 +``` + +### PC-03: 복구 콘솔에서 자동 로그온 금지 +**점검:** +```powershell +# 복구 콘솔 자동 로그온 설정 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "복구 콘솔: 자동 관리 로그온 허용" -> "사용 안 함" + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel /t REG_DWORD /d 0 /f +``` + +## 2. 서비스 관리 + +### PC-04: 공유 폴더 제거 +**점검:** +```powershell +# 공유 폴더 목록 확인 +net share +# 기본 공유 폴더 확인 (C$, D$, Admin$, IPC$) +Get-SmbShare +# AutoShareWks 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks +``` +**조치:** +```powershell +# 기본 공유 폴더 삭제 +net share C$ /delete +net share D$ /delete +net share Admin$ /delete + +# 재부팅 시 자동 공유 방지 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 일반 공유 폴더 삭제 +net share <공유폴더명> /delete + +# 공유 폴더 접근에 "Everyone" 제거 (GUI) +# 컴퓨터 관리 > 공유 폴더 > 공유 > 속성 > 공유 사용 권한 > Everyone 제거 + +# 암호로 보호된 공유 설정 +# 설정 > 네트워크 > 고급 공유 설정 > 모든 네트워크 > "암호로 보호된 공유" 켬 +``` + +### PC-05: 불필요한 서비스 제거 +**점검:** +```powershell +# 실행 중인 서비스 목록 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType +# 특정 불필요 서비스 확인 +Get-Service -Name "RemoteRegistry","Messenger","Clipbook","Alerter" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# 불필요 서비스 중지 및 시작 유형 변경 +# GUI: services.msc > 해당 서비스 > 속성 > 시작 유형: 사용 안 함 + +# PowerShell로 서비스 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 일반적으로 불필요한 서비스 예시: +# Alerter, Clipbook, Computer Browser, DHCP Client (고정IP 사용 시) +# Distributed Link Tracking Client, Error Reporting Service +# Messenger, NetMeeting Remote Desktop Sharing +# Print Spooler (프린터 미사용 시), Remote Registry +# Simple TCP/IP Services, Universal Plug and Play Device Host +``` + +### PC-06: 비인가 상용 메신저 사용 금지 +**점검:** +```powershell +# 설치된 메신저 프로그램 확인 +Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -match "카카오톡|Skype|NateOn|Telegram"} | Select-Object Name +# 실행 중인 메신저 프로세스 확인 +Get-Process | Where-Object {$_.ProcessName -match "kakaotalk|skype|nateon"} | Select-Object ProcessName +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows Messenger +# "Windows Messenger를 실행 허용 안 함": 사용 + +# 상용 메신저 제거 +# 설정 > 앱 > 앱 및 기능 > 해당 메신저 제거 +``` + +### PC-07: 파일 시스템이 NTFS 포맷으로 설정 +**점검:** +```powershell +# 디스크 볼륨 파일 시스템 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size +# 또는 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT32 -> NTFS 변환 (비파괴 변환) +convert C: /fs:ntfs + +# 변환 후 폴더/파일에 적합한 ACL 적용 +# 속성 > 보안 > 편집 > 그룹/계정별 권한 설정 +``` + +### PC-08: 멀티 부팅 방지 +**점검:** +```powershell +# 설치된 OS 확인 +bcdedit /enum +# 또는 +msconfig +# 부팅 탭에서 2개 이상 OS 확인 +``` +**조치:** +```powershell +# msconfig > 부팅 탭 > 사용하지 않는 OS 선택 후 삭제 +# 또는 +bcdedit /delete {identifier} +``` + +### PC-09: 브라우저 종료 시 임시 인터넷 파일 삭제 +**점검:** +```powershell +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 +# > Internet Explorer > 인터넷 제어판 > 고급 페이지 +# "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기": 사용 + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit /t REG_DWORD /d 1 /f +``` + +## 3. 패치 관리 + +### PC-10: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```powershell +# 설치된 HOT FIX 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +# Windows Update 설정 확인 +Get-WindowsUpdateLog +# 자동 업데이트 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" +``` +**조치:** +```powershell +# 설정 > Windows Update > 업데이트 확인 +# PowerShell로 업데이트 확인 및 설치 +Install-Module PSWindowsUpdate -Force +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot +``` + +### PC-11: 지원이 종료되지 않은 Windows OS Build 적용 +**점검:** +```powershell +# 현재 OS 빌드 버전 확인 +[System.Environment]::OSVersion.Version +Get-ComputerInfo | Select-Object WindowsVersion, OsBuildNumber, WindowsProductName +winver +``` +**조치:** +```powershell +# Windows Update를 통한 최신 빌드 적용 +# 설정 > Windows Update > 업데이트 확인 +# 수동 업데이트: https://www.microsoft.com/ko-kr/software-download/ +``` + +## 4. 보안 관리 + +### PC-12: Windows 자동 로그인 점검 +**점검:** +```powershell +# 자동 로그인 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword +``` +**조치:** +```powershell +# 자동 로그인 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +# DefaultPassword 값 삭제 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +``` + +### PC-13: 바이러스 백신 프로그램 설치 및 주기적 업데이트 +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntivirusSignatureLastUpdated, AntispywareEnabled +# 백신 설치 여부 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState +``` +**조치:** +```powershell +# Windows Defender 업데이트 +Update-MpSignature +# 설정 > Windows 보안 > 바이러스 및 위협 방지 > 보호 업데이트 > 업데이트 확인 +``` + +### PC-14: 백신 실시간 감시 기능 활성화 +**점검:** +```powershell +# 실시간 보호 상태 확인 +Get-MpPreference | Select-Object DisableRealtimeMonitoring +Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled +``` +**조치:** +```powershell +# 실시간 보호 활성화 +Set-MpPreference -DisableRealtimeMonitoring $false +# GUI: Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 켬 +``` + +### PC-15: OS에서 제공하는 침입차단 기능 활성화 +**점검:** +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled +netsh advfirewall show allprofiles state +``` +**조치:** +```powershell +# 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True +# 또는 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정/해제 > "사용" 설정 +``` + +### PC-16: 화면보호기 대기 시간 설정 및 재시작 시 암호 보호 +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +``` +**조치:** +```powershell +# 화면보호기 활성화 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +# 대기 시간 설정 (600초 = 10분 이하) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +# 재시작 시 암호 보호 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f + +# GUI: 설정 > 개인설정 > 잠금화면 > 화면보호기 +# 대기: 10분 이하 / "다시 시작 시 로그온 화면 표시" 체크 +``` + +### PC-17: 이동식 미디어 자동 실행 방지 +**점검:** +```powershell +# 자동 실행 정책 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun +# GPO 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoAutorun +``` +**조치:** +```powershell +# 모든 드라이브 자동 실행 끄기 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 자동 실행 정책 +# "자동 실행 끄기": 사용 - 모든 드라이브 + +# 제어판: 하드웨어 및 소리 > 자동 실행 +# "모든 미디어 및 장치에 자동 실행 사용" 체크 해제 +``` + +### PC-18: 원격 지원 금지 +**점검:** +```powershell +# 원격 지원 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +``` +**조치:** +```powershell +# 원격 지원 비활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 0 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 원격 지원 +# "원격 지원 제공 구성": 사용 안 함 + +# 원격 데스크톱 비활성화 (필요 시) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f +``` diff --git a/skills-ko/kesekit-start-ko/scripts/cii/unix.md b/skills-ko/kesekit-start-ko/scripts/cii/unix.md new file mode 100644 index 0000000..6969221 --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/cii/unix.md @@ -0,0 +1,1531 @@ +# Unix 서버 점검 및 조치 스크립트 + +## 1. 계정 관리 + +### U-01: root 계정 원격 접속 제한 +**판단기준:** 원격터미널 서비스 사용 시 root 직접 접속을 차단한 경우 양호 +**점검:** +```bash +# SSH root 접속 설정 확인 +grep -i "PermitRootLogin" /etc/ssh/sshd_config + +# Telnet root 접속 설정 확인 (SOLARIS) +grep "CONSOLE" /etc/default/login + +# Telnet pts 설정 확인 (LINUX) +cat /etc/securetty | grep pts + +# Telnet rlogin 설정 확인 (AIX) +grep "rlogin" /etc/security/user +``` +**조치:** +```bash +# SSH - 모든 OS 공통 +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config +systemctl restart sshd + +# Telnet - SOLARIS +# /etc/default/login 파일에 설정 +echo "CONSOLE=/dev/console" >> /etc/default/login + +# Telnet - LINUX (/etc/securetty에서 pts 제거) +sed -i '/^pts\//d' /etc/securetty +# /etc/pam.d/login에 모듈 추가 +# auth required /lib/security/pam_securetty.so + +# Telnet - AIX (/etc/security/user) +chsec -f /etc/security/user -s root -a rlogin=false + +# HP-UX SSH +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /opt/ssh/etc/sshd_config +``` + +### U-02: 비밀번호 관리정책 설정 +**판단기준:** 영문+숫자+특수문자 8자리 이상, 최소사용 1일, 최대사용 90일, 이력 4회 이상 양호 +**점검:** +```bash +# LINUX - 비밀번호 정책 확인 +grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" /etc/login.defs +cat /etc/security/pwquality.conf 2>/dev/null +grep pam_pwquality /etc/pam.d/system-auth 2>/dev/null +grep pam_pwquality /etc/pam.d/common-password 2>/dev/null + +# SOLARIS +cat /etc/default/passwd | grep -E "HISTORY|PASSLENGTH|MINDIGIT|MINUPPER|MINLOWER|MINSPECIAL" + +# AIX +grep -E "minage|maxage|minalpha|minother|minlen|histsize" /etc/security/user +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/login.defs +sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs +sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs + +# LINUX (Redhat) - /etc/security/pwquality.conf +cat > /etc/security/pwquality.conf <<'CONF' +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +CONF + +# SOLARIS - /etc/default/passwd +cat >> /etc/default/passwd <<'CONF' +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO +CONF + +# AIX - /etc/security/user +chsec -f /etc/security/user -s default -a minage=1 +chsec -f /etc/security/user -s default -a maxage=12 +chsec -f /etc/security/user -s default -a minalpha=2 +chsec -f /etc/security/user -s default -a minother=2 +chsec -f /etc/security/user -s default -a minlen=8 +chsec -f /etc/security/user -s default -a histsize=4 + +# HP-UX - /etc/default/security +cat >> /etc/default/security <<'CONF' +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +CONF +``` + +### U-03: 계정 잠금 임계값 설정 +**판단기준:** 계정 잠금 임계값이 10회 이하로 설정된 경우 양호 +**점검:** +```bash +# LINUX - PAM 계정잠금 설정 확인 +grep pam_tally /etc/pam.d/system-auth 2>/dev/null +grep pam_faillock /etc/pam.d/system-auth 2>/dev/null +grep -E "deny|unlock_time" /etc/security/faillock.conf 2>/dev/null +authselect current 2>/dev/null + +# SOLARIS +grep "RETRIES" /etc/default/login +grep "LOCK_AFTER_RETRIES" /etc/security/policy.conf 2>/dev/null + +# AIX +grep "loginretries" /etc/security/user + +# HP-UX +grep "AUTH_MAXTRIES" /etc/default/security 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat - authselect 방식, RHEL 8+) +authselect enable-feature with-faillock +# /etc/security/faillock.conf 수정 +cat >> /etc/security/faillock.conf <<'CONF' +silent +deny = 10 +unlock_time = 120 +CONF + +# LINUX (Redhat - pam_faillock 방식) +# /etc/pam.d/system-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +# /etc/pam.d/password-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# LINUX (Debian - pam_faillock 방식) +# /etc/pam.d/common-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# SOLARIS (5.9+) +# /etc/security/policy.conf +echo "LOCK_AFTER_RETRIES=YES" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/user -s default -a loginretries=10 + +# HP-UX (11.v3+) +echo "AUTH_MAXTRIES=10" >> /etc/default/security +``` + +### U-04: 비밀번호 파일 보호 +**판단기준:** 쉐도우 비밀번호를 사용하거나 비밀번호를 암호화하여 저장하는 경우 양호 +**점검:** +```bash +# /etc/passwd 두 번째 필드가 'x'인지 확인 (x이면 shadow 사용 중) +awk -F: '$2 != "x" {print $1" : 비밀번호 평문 저장 의심"}' /etc/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX - 쉐도우 비밀번호 적용 +pwconv + +# HP-UX - Trusted Mode 전환 +/etc/tsconvert +``` + +### U-05: root 이외의 UID가 '0' 금지 +**판단기준:** root 계정과 동일한 UID(0)를 갖는 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '$3==0 && $1!="root" {print $1" has UID 0"}' /etc/passwd +``` +**조치:** +```bash +# UID 변경 +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-06: 사용자 계정 su 기능 제한 +**판단기준:** su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 양호 +**점검:** +```bash +# wheel 그룹 확인 +grep wheel /etc/group +# su 명령어 권한 확인 +ls -l /usr/bin/su +# PAM 설정 확인 (LINUX) +grep pam_wheel /etc/pam.d/su +``` +**조치:** +```bash +# wheel 그룹 생성 (없는 경우) +groupadd wheel +# su 명령 그룹 변경 및 권한 설정 +chgrp wheel /usr/bin/su +chmod 4750 /usr/bin/su +# 허용 계정 등록 +usermod -G wheel + +# LINUX PAM 설정 - /etc/pam.d/su +# auth required pam_wheel.so use_uid +``` + +### U-07: 불필요한 계정 제거 +**판단기준:** 불필요한 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +# 시스템 계정 확인 +cat /etc/passwd +# 마지막 로그인 기록 확인 +last | head -30 +# 로그인 불가 계정 확인 +awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd +``` +**조치:** +```bash +userdel <사용자_이름> +# AIX의 경우 +# rmuser <사용자_이름> +``` + +### U-08: 관리자 그룹에 최소한의 계정 포함 +**판단기준:** 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 양호 +**점검:** +```bash +grep "^root:" /etc/group +``` +**조치:** +```bash +gpasswd -d <사용자_이름> root +# AIX의 경우 +# chgrpmem -m - <사용자_이름> root +``` + +### U-09: 계정이 존재하지 않는 GID 금지 +**판단기준:** 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 양호 +**점검:** +```bash +# /etc/group과 /etc/passwd 비교 +cat /etc/group +cat /etc/gshadow 2>/dev/null +``` +**조치:** +```bash +groupdel <그룹_이름> +``` + +### U-10: 동일한 UID 금지 +**판단기준:** 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d +# 중복 UID가 있다면 해당 계정 확인 +awk -F: '{uid[$3]=uid[$3]" "$1} END{for(u in uid) if(split(uid[u],a," ")>2) print "UID "u":"uid[u]}' /etc/passwd +``` +**조치:** +```bash +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-11: 사용자 shell 점검 +**판단기준:** 로그인이 필요하지 않은 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +cat /etc/passwd | grep -E "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^games|^gopher" | grep -v admin +``` +**조치:** +```bash +# 불필요한 계정에 nologin 쉘 부여 +usermod -s /bin/false <계정명> +usermod -s /sbin/nologin <계정명> +``` + +### U-12: 세션 종료 시간 설정 +**판단기준:** Session Timeout이 600초(10분) 이하로 설정된 경우 양호 +**점검:** +```bash +echo $TMOUT +grep -i tmout /etc/profile /etc/bashrc 2>/dev/null +grep autologout /etc/csh.cshrc /etc/csh.login 2>/dev/null +``` +**조치:** +```bash +# sh, ksh, bash - /etc/profile에 추가 +echo "TMOUT=600" >> /etc/profile +echo "export TMOUT" >> /etc/profile + +# csh - /etc/csh.cshrc 또는 /etc/csh.login에 추가 +echo "set autologout=10" >> /etc/csh.cshrc +``` + +### U-13: 안전한 비밀번호 암호화 알고리즘 사용 +**판단기준:** SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 양호 ($5=SHA-256, $6=SHA-512) +**점검:** +```bash +# 암호화 알고리즘 확인 ($1=MD5, $5=SHA-256, $6=SHA-512) +awk -F: '$2 ~ /^\$/ {split($2,a,"$"); print $1" -> $"a[2]}' /etc/shadow 2>/dev/null + +# LINUX +grep ENCRYPT_METHOD /etc/login.defs +``` +**조치:** +```bash +# LINUX (Redhat) +sed -i 's/^ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' /etc/login.defs +# /etc/pam.d/system-auth +# password sufficient pam_unix.so sha512 + +# SOLARIS +# /etc/security/policy.conf +echo "CRYPT_DEFAULT=6" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/login.cfg -s usw -a pwd_algorithm=ssha512 + +# HP-UX +echo "CRYPT_DEFAULT=6" >> /etc/default/security +``` + +--- + +## 2. 파일 및 디렉터리 관리 + +### U-14: root 홈, 패스 디렉터리 권한 및 패스 설정 +**판단기준:** PATH 환경변수에 "."이 맨 앞이나 중간에 포함되지 않은 경우 양호 +**점검:** +```bash +echo $PATH | tr ':' '\n' | grep -n "^\.$" +echo $PATH | grep -E "(^\.:|:\.:|:\.$ )" +``` +**조치:** +```bash +# 환경설정 파일에서 PATH 변숫값에서 "." 제거 또는 맨 마지막으로 이동 +# ~/.profile, ~/.bashrc, /etc/profile 등에서 수정 +# 예: PATH=$PATH:$HOME/bin (상대경로 "." 삭제) +``` + +### U-15: 파일 및 디렉터리 소유자 설정 +**판단기준:** 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 양호 +**점검:** +```bash +find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +``` +**조치:** +```bash +# 불필요한 파일 제거 +rm <파일_이름> +rm -r <디렉터리_이름> +# 사용 중인 파일의 소유자 변경 +chown <사용자_이름> <파일명> +chgrp <그룹_이름> <파일명> +``` + +### U-16: /etc/passwd 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/passwd +``` +**조치:** +```bash +chown root /etc/passwd +chmod 644 /etc/passwd +``` + +### U-17: 시스템 시작 스크립트 권한 설정 +**판단기준:** 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +# LINUX (init) +ls -al /etc/rc.d/*/* 2>/dev/null +# LINUX (systemd) +ls -al /etc/systemd/system/* 2>/dev/null +# SOLARIS +ls -al /etc/rc*.d/* 2>/dev/null +``` +**조치:** +```bash +chown root <파일_이름> +chmod o-w <파일_이름> +``` + +### U-18: /etc/shadow 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 400 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/shadow +# AIX +ls -l /etc/security/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX +chown root /etc/shadow +chmod 400 /etc/shadow + +# AIX +chown root /etc/security/passwd +chmod 400 /etc/security/passwd +``` + +### U-19: /etc/hosts 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts +``` +**조치:** +```bash +chown root /etc/hosts +chmod 644 /etc/hosts +``` + +### U-20: /etc/(x)inetd.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/inetd.conf 2>/dev/null +ls -l /etc/xinetd.conf 2>/dev/null +ls -l /etc/xinetd.d/* 2>/dev/null +ls -l /etc/systemd/system.conf 2>/dev/null +``` +**조치:** +```bash +# inetd +chown root /etc/inetd.conf +chmod 600 /etc/inetd.conf + +# xinetd +chown root /etc/xinetd.conf +chmod 600 /etc/xinetd.conf +chown -R root /etc/xinetd.d/ +chmod -R 600 /etc/xinetd.d/ + +# systemd +chown root /etc/systemd/system.conf +chmod 600 /etc/systemd/system.conf +``` + +### U-21: /etc/(r)syslog.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/syslog.conf /etc/rsyslog.conf 2>/dev/null +``` +**조치:** +```bash +chown root /etc/rsyslog.conf +chmod 640 /etc/rsyslog.conf +``` + +### U-22: /etc/services 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/services +``` +**조치:** +```bash +chown root /etc/services +chmod 644 /etc/services +``` + +### U-23: SUID, SGID, Sticky bit 설정 파일 점검 +**판단기준:** 주요 실행 파일의 권한에 불필요한 SUID/SGID가 부여되어 있지 않은 경우 양호 +**점검:** +```bash +find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +``` +**조치:** +```bash +# 불필요한 특수 권한 제거 +chmod -s <파일_이름> + +# 특정 그룹에서만 사용하도록 제한 +chgrp <그룹_이름> +chmod 4750 +``` + +### U-24: 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +**판단기준:** 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정이고, 소유자 외 쓰기 권한이 없는 경우 양호 +**점검:** +```bash +# 각 사용자 홈 디렉터리의 환경변수 파일 확인 +ls -la ~/.profile ~/.kshrc ~/.cshrc ~/.bashrc ~/.bash_profile ~/.login ~/.exrc ~/.netrc 2>/dev/null +``` +**조치:** +```bash +chown <환경변수_파일> +chmod o-w <환경변수_파일> +``` + +### U-25: world writable 파일 점검 +**판단기준:** world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 양호 +**점검:** +```bash +find / -type f -perm -2 -exec ls -l {} \; 2>/dev/null +``` +**조치:** +```bash +# 일반 사용자 쓰기 권한 제거 +chmod o-w <파일_이름> +# 불필요한 파일 제거 +rm <파일_이름> +``` + +### U-26: /dev에 존재하지 않는 device 파일 점검 +**판단기준:** /dev 디렉터리에 존재하지 않는 device 파일을 제거한 경우 양호 +**점검:** +```bash +find /dev -type f -exec ls -l {} \; +``` +**조치:** +```bash +rm <파일_이름> +``` + +### U-27: $HOME/.rhosts, hosts.equiv 사용 금지 +**판단기준:** rlogin/rsh/rexec 미사용 또는 사용 시 소유자 root, 권한 600 이하, "+" 설정 없는 경우 양호 +**점검:** +```bash +find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null +cat /etc/hosts.equiv 2>/dev/null +ls -la /etc/hosts.equiv 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.equiv +chmod 600 /etc/hosts.equiv +chown root $HOME/.rhosts +chmod 600 $HOME/.rhosts +# "+" 옵션 제거 후 허용 호스트 및 계정만 등록 +``` + +### U-28: 접속 IP 및 포트 제한 +**판단기준:** 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 양호 +**점검:** +```bash +# TCP Wrapper +cat /etc/hosts.allow 2>/dev/null +cat /etc/hosts.deny 2>/dev/null + +# iptables +iptables -L 2>/dev/null + +# firewalld +firewall-cmd --list-all 2>/dev/null + +# UFW +ufw status numbered 2>/dev/null +``` +**조치:** +```bash +# TCP Wrapper +echo "ALL:ALL" > /etc/hosts.deny +echo "sshd : <허용_IP>" >> /etc/hosts.allow + +# iptables +iptables -A INPUT -p tcp -s --dport <포트> -j ACCEPT +iptables-save + +# firewalld +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="" port protocol="tcp" port="<포트>" accept' +firewall-cmd --reload + +# UFW +ufw allow from to any port <포트> +ufw reload +``` + +### U-29: hosts.lpd 파일 소유자 및 권한 설정 +**판단기준:** /etc/hosts.lpd 파일이 존재하지 않거나, 소유자 root이고 권한 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts.lpd 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.lpd +chmod 600 /etc/hosts.lpd +``` + +### U-30: UMASK 설정 관리 +**판단기준:** UMASK 값이 022 이상으로 설정된 경우 양호 +**점검:** +```bash +umask +grep -i umask /etc/profile /etc/bashrc /etc/login.defs 2>/dev/null +# SOLARIS +grep UMASK /etc/default/login 2>/dev/null +``` +**조치:** +```bash +# /etc/profile에 추가 +echo "umask 022" >> /etc/profile +echo "export umask" >> /etc/profile + +# LINUX - /etc/login.defs +sed -i 's/^UMASK.*/UMASK 022/' /etc/login.defs + +# SOLARIS - /etc/default/login +echo "UMASK=022" >> /etc/default/login + +# FTP umask 설정 +# vsFTP: vsftpd.conf -> local_umask=022 +# ProFTP: proftpd.conf -> Umask 022 +``` + +### U-31: 홈디렉토리 소유자 및 권한 설정 +**판단기준:** 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +cat /etc/passwd | awk -F: '{print $1" "$6}' | while read user dir; do + ls -ald "$dir" 2>/dev/null +done +``` +**조치:** +```bash +chown <사용자_이름> <홈_디렉터리> +chmod o-w <홈_디렉터리> +``` + +### U-32: 홈 디렉토리로 지정한 디렉토리의 존재 관리 +**판단기준:** 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $1" "$6}' /etc/passwd | while read user dir; do + [ ! -d "$dir" ] && echo "$user : $dir 존재하지 않음" +done +``` +**조치:** +```bash +# 불필요한 계정 삭제 +userdel <사용자_이름> +# 사용중인 계정의 홈 디렉터리 생성 +mkdir -p /home/<사용자_이름> +chown <사용자_이름> /home/<사용자_이름> +``` + +### U-33: 숨겨진 파일 및 디렉토리 검색 및 제거 +**판단기준:** 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 양호 +**점검:** +```bash +find / -type f -name ".*" 2>/dev/null +find / -type d -name ".*" 2>/dev/null +``` +**조치:** +```bash +rm <파일_이름> +rm -r <디렉터리_이름> +``` + +--- + +## 3. 서비스 관리 + +### U-34: Finger 서비스 비활성화 +**판단기준:** Finger 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep finger +# SOLARIS (5.10+) +inetadm | grep finger 2>/dev/null +# inetd +grep finger /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/finger 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop finger.socket 2>/dev/null +systemctl disable finger.socket 2>/dev/null + +# xinetd +# /etc/xinetd.d/finger -> disable = yes +systemctl restart xinetd + +# inetd - finger 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/finger:default +``` + +### U-35: 공유 서비스에 대한 익명 접근 제한 설정 +**판단기준:** 공유 서비스에 대해 익명 접근을 제한한 경우 양호 +**점검:** +```bash +# FTP 익명 계정 확인 +grep -E "^ftp|^anonymous" /etc/passwd + +# vsFTP +grep anonymous_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# ProFTP +sed -n '//,/<\/Anonymous>/p' /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null + +# NFS 익명 접근 +grep -E "anonuid|anongid" /etc/exports 2>/dev/null + +# Samba +grep "guest ok" /etc/samba/smb.conf 2>/dev/null +``` +**조치:** +```bash +# FTP 익명 계정 제거 +userdel ftp +userdel anonymous + +# vsFTP - /etc/vsftpd/vsftpd.conf +# anonymous_enable=NO +systemctl restart vsftpd + +# NFS - /etc/exports에서 anon 옵션 제거 +exportfs -ra + +# Samba - /etc/samba/smb.conf +# guest ok = no +smbcontrol all reload-config +``` + +### U-36: r 계열 서비스 비활성화 +**판단기준:** 불필요한 r 계열 서비스(rlogin, rsh, rexec)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "rlogin|rsh|rexec" +# inetd +grep -E "rlogin|rsh|rexec|shell|login|exec" /etc/inetd.conf 2>/dev/null +# SOLARIS (5.10+) +inetadm | egrep "shell|rlogin|rexec" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop rlogin.socket rsh.socket rexec.socket 2>/dev/null +systemctl disable rlogin.socket rsh.socket rexec.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/login:rlogin +inetadm -d svc:/network/shell:default +inetadm -d svc:/network/rexec:default +``` + +### U-37: crontab 설정파일 권한 설정 미흡 +**판단기준:** crontab/at 명령어 권한 750 이하, cron/at 관련 파일 권한 640 이하인 경우 양호 +**점검:** +```bash +ls -l /usr/bin/crontab +ls -l /usr/bin/at +ls -l /var/spool/cron/ 2>/dev/null +ls -l /var/spool/cron/crontabs/ 2>/dev/null +ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny 2>/dev/null +``` +**조치:** +```bash +# crontab/at 명령어 권한 설정 +chown root /usr/bin/crontab +chmod 750 /usr/bin/crontab +chown root /usr/bin/at +chmod 750 /usr/bin/at + +# cron 관련 파일 권한 설정 +chmod 640 /etc/cron.allow /etc/cron.deny 2>/dev/null +chmod 640 /etc/at.allow /etc/at.deny 2>/dev/null +``` + +### U-38: DoS 공격에 취약한 서비스 비활성화 +**판단기준:** echo, discard, daytime, chargen 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "echo|discard|daytime|chargen" +# inetd +grep -E "echo|discard|daytime|chargen" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep enable | egrep "echo|discard|daytime|chargen" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null +systemctl disable echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬> +``` + +### U-39: 불필요한 NFS 서비스 비활성화 +**판단기준:** 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep nfs +# AIX +ps -ef | grep nfsd +lssrc -a | grep nfs 2>/dev/null +# SOLARIS +inetadm | egrep "nfs|statd|lockd" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop nfs-server +systemctl disable nfs-server + +# SOLARIS +inetadm -d + +# AIX +stopsrc -g nfs + +# HP-UX +# /etc/rc.config.d/nfsconf -> NFS_SERVER=0 +``` + +### U-40: NFS 접근 통제 +**판단기준:** 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX +ls -l /etc/exports +cat /etc/exports +showmount -e 2>/dev/null + +# SOLARIS +ls -l /etc/dfs/dfstab 2>/dev/null +cat /etc/dfs/dfstab 2>/dev/null +``` +**조치:** +```bash +# LINUX +chown root /etc/exports +chmod 644 /etc/exports +# /etc/exports 예시: /home/share host1(ro,root_squash) +exportfs -ra + +# SOLARIS +chown root /etc/dfs/dfstab +chmod 644 /etc/dfs/dfstab +# /etc/dfs/dfstab 예시: share -F nfs -o rw=client1:client2,ro=client1:client2 /export/home +shareall +``` + +### U-41: 불필요한 automountd 제거 +**판단기준:** automountd 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "automount|autofs" +# SOLARIS +svcs -a | grep autofs 2>/dev/null +# AIX +ps -ef | grep automountd +``` +**조치:** +```bash +# LINUX +systemctl stop autofs +systemctl disable autofs + +# SOLARIS +svcadm disable svc:/system/filesystem/autofs:default + +# HP-UX +# /etc/rc.config.d/nfsconf -> AUTOFS=0 +``` + +### U-42: 불필요한 RPC 서비스 비활성화 +**판단기준:** 불필요한 RPC 서비스(rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd 등)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep rpc +# inetd +grep -E "rpc\." /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep rpc | grep enabled | egrep "ttdbserver|rex|rstart|rusers|spray|wall|rquota" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop <서비스명> +systemctl disable <서비스명> + +# inetd - 해당 RPC 서비스 항목 주석 처리 +# SOLARIS +svcadm disable <서비스_데몬> +``` + +### U-43: NIS, NIS+ 점검 +**판단기준:** NIS 서비스가 비활성화되어 있거나, 불가피 시 NIS+ 서비스를 사용하는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated" +# SOLARIS +svcs -a | grep nis 2>/dev/null +# AIX +lssrc -a | grep -E "ypserv|ypbind" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop ypserv ypbind 2>/dev/null +systemctl disable ypserv ypbind 2>/dev/null + +# SOLARIS +svcadm disable + +# HP-UX - /etc/rc.config.d/namesrvs +# NIS_MASTER_SERVER=0 +# NIS_SLAVE_SERVER=0 +# NIS_CLIENT_SERVER=0 +``` + +### U-44: tftp, talk 서비스 비활성화 +**판단기준:** tftp, talk, ntalk 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "tftp|talk|ntalk" +# inetd +grep -E "tftp|talk|ntalk" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | egrep "tftp|talk" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop tftp.socket talk.socket ntalk.socket 2>/dev/null +systemctl disable tftp.socket talk.socket ntalk.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬명> +``` + +### U-45: 메일 서비스 버전 점검 +**판단기준:** 메일 서비스 버전이 최신 버전인 경우 양호 +**점검:** +```bash +# Sendmail +sendmail -d0 -bt < /dev/null 2>&1 | grep Version +# Postfix +postconf mail_version 2>/dev/null +# Exim +exim -bV 2>/dev/null +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop sendmail postfix 2>/dev/null +systemctl disable sendmail postfix 2>/dev/null + +# 사용 시 최신 버전으로 패치 적용 +# Sendmail: http://www.sendmail.org/ +# Postfix: https://www.postfix.org/packages.html +# Exim: https://www.exim.org/ +``` + +### U-46: 일반 사용자의 메일 서비스 실행 방지 +**판단기준:** 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf 2>/dev/null +# Postfix +ls -l /usr/sbin/postsuper 2>/dev/null +# Exim +ls -l /usr/sbin/exiqgrep 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun + +# Postfix +chmod o-x /usr/sbin/postsuper + +# Exim +chmod o-x /usr/sbin/exiqgrep +``` + +### U-47: 스팸 메일 릴레이 제한 +**판단기준:** 릴레이 제한이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep "promiscuous_relay" /etc/mail/sendmail.mc 2>/dev/null +cat /etc/mail/access 2>/dev/null +# Postfix +grep -E "smtpd_recipient_restrictions|mynetworks" /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "relay_from_hosts|hosts =" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.mc에서 promiscuous_relay 제거 +# FEATURE(`promiscuous_relay')dnl 삭제 +m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +# /etc/mail/access에 허용/차단 설정 +makemap hash /etc/mail/access.db < /etc/mail/access +systemctl restart sendmail + +# Postfix - /etc/postfix/main.cf +# mynetworks = <허용할_네트워크> +postfix reload + +# Exim - /etc/exim/exim.conf +# hostlist relay_from_hosts = <허용할_네트워크> +systemctl restart exim +``` + +### U-48: expn, vrfy 명령어 제한 +**판단기준:** noexpn, novrfy 옵션이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf +# Postfix +grep disable_vrfy_command /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "acl_smtp_vrfy|acl_smtp_expn" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +# 또는 PrivacyOptions = restrictqrun, goaway + +# Postfix - /etc/postfix/main.cf +# disable_vrfy_command = yes +postfix reload + +# Exim - acl_smtp_vrfy, acl_smtp_expn 설정 제거/주석 처리 +``` + +### U-49: DNS 보안 버전 패치 +**판단기준:** 주기적으로 패치를 관리하는 경우 양호 +**점검:** +```bash +named -v 2>/dev/null +# LINUX +systemctl list-units --type=service | grep named +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop named +systemctl disable named + +# 사용 시 최신 버전 패치 +# ISC BIND: https://www.isc.org/downloads/ +# 취약점 정보: https://kb.isc.org/v1/docs/en/aa-00913 +``` + +### U-50: DNS ZoneTransfer 설정 +**판단기준:** Zone Transfer를 허가된 사용자에게만 허용한 경우 양호 +**점검:** +```bash +grep allow-transfer /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +grep xfrnets /etc/named.boot /etc/bind/named.boot 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf (또는 /etc/bind/named.conf.options) 수정 +# allow-transfer { <허용할_IP>; }; +systemctl restart named +``` + +### U-51: DNS 서비스의 취약한 동적 업데이트 설정 금지 +**판단기준:** 동적 업데이트 기능이 비활성화되었거나, 적절한 접근통제를 수행하는 경우 양호 +**점검:** +```bash +grep allow-update /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf 수정 +# 불필요 시: allow-update { none; }; +# 필요 시: allow-update { <허용할_IP>; }; +systemctl restart named +``` + +### U-52: Telnet 서비스 비활성화 +**판단기준:** Telnet 프로토콜을 비활성화하고 있는 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=socket | grep telnet +# inetd +grep telnet /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/telnet 2>/dev/null +# SOLARIS +svcs -a | grep telnet 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop telnet.socket +systemctl disable telnet.socket +systemctl start sshd + +# xinetd - /etc/xinetd.d/telnet -> disable = yes +systemctl restart xinetd + +# SOLARIS +svcadm disable svc:/network/telnet:default +svcadm enable ssh +``` + +### U-53: FTP 서비스 정보 노출 제한 +**판단기준:** FTP 접속 배너에 노출되는 정보가 없는 경우 양호 +**점검:** +```bash +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +# ProFTP +grep ServerIdent /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only +systemctl restart vsftpd + +# ProFTP - /etc/proftpd/proftpd.conf +# ServerIdent off +# 또는 ServerIdent on "Authorized access only" +systemctl restart proftpd +``` + +### U-54: 암호화되지 않는 FTP 서비스 비활성화 +**판단기준:** 암호화되지 않은 FTP 서비스가 비활성화된 경우 양호 (SFTP 사용 권고) +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "vsftpd|proftpd" +# inetd +grep "^ftp" /etc/inetd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop vsftpd proftpd 2>/dev/null +systemctl disable vsftpd proftpd 2>/dev/null + +# inetd - ftp 항목 주석 처리 +``` + +### U-55: FTP 계정 shell 제한 +**판단기준:** FTP 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +grep "^ftp" /etc/passwd +``` +**조치:** +```bash +usermod -s /bin/false ftp +# 또는 +usermod -s /sbin/nologin ftp +``` + +### U-56: FTP 서비스 접근 제어 설정 +**판단기준:** 특정 IP주소/호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 양호 +**점검:** +```bash +# ftpusers 파일 +cat /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null +ls -l /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null + +# vsFTP +grep userlist_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +cat /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep UseFtpUsers /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일 권한 설정 +chown root /etc/ftpusers +chmod 640 /etc/ftpusers + +# vsFTP - user_list 방식 +# /etc/vsftpd/vsftpd.conf +# userlist_enable=YES +# userlist_deny=YES (목록 사용자 차단) 또는 NO (목록 사용자만 허용) + +# ProFTP - proftpd.conf 접근제한 +# +# Order Deny,Allow +# AllowUser <사용자> 또는 Allow from +# DenyUser <사용자> 또는 Deny from +# +``` + +### U-57: Ftpusers 파일 설정 (root 계정 접근 제한) +**판단기준:** root 계정 접속을 차단한 경우 양호 +**점검:** +```bash +# ftpusers 파일에 root가 등록되어 있는지 확인 +grep "^root" /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep RootLogin /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일에 root 추가 (주석 해제) +# 해당 파일에서 #root -> root 로 변경 + +# ProFTP - /etc/proftpd/proftpd.conf +# RootLogin off +systemctl restart proftpd +``` + +### U-58: 불필요한 SNMP 서비스 구동 점검 +**판단기준:** SNMP 서비스를 사용하지 않는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep snmpd +# SOLARIS +svcs -a | grep snmp 2>/dev/null +# AIX +lssrc -a | grep snmp 2>/dev/null +# 프로세스 확인 +ps -ef | grep snmp +``` +**조치:** +```bash +# LINUX +systemctl stop snmpd +systemctl disable snmpd + +# SOLARIS (5.10+) +svcadm disable svc:/application/management/snmpd:default + +# AIX +stopsrc -s snmpd +# /etc/rc.tcpip에서 snmpd 주석 처리 +``` + +### U-59: 안전한 SNMP 버전 사용 +**판단기준:** SNMP 서비스를 v3 이상으로 사용하는 경우 양호 +**점검:** +```bash +# SNMPv3 사용 여부 확인 +snmpwalk -v3 -l authPriv -u <사용자> -a SHA -A <인증암호> -x AES -X <암호화암호> <서버IP> 2>/dev/null +grep -E "rouser|rwuser|createUser" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# SNMPv3 사용자 생성 +net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser + +# /etc/snmp/snmpd.conf에 추가 +# createUser myuser SHA myauthpass AES myprivpass +# rouser myuser + +systemctl restart snmpd +``` + +### U-60: SNMP Community String 복잡성 설정 +**판단기준:** Community String이 "public", "private"이 아니고 영숫자 10자리 이상 또는 영숫자+특수문자 8자리 이상인 경우 양호 +**점검:** +```bash +grep -i community /etc/snmp/snmpd.conf 2>/dev/null +# AIX +grep -i community /etc/snmpdv3.conf 2>/dev/null +# HP-UX +grep -i community /etc/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser default <복잡한_String값> +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <복잡한_String값> default +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY <새_String> <새_String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-61: SNMP Access Control 설정 +**판단기준:** SNMP 서비스에 접근 제어 설정이 되어 있는 경우 양호 +**점검:** +```bash +# LINUX (Redhat) +grep "com2sec" /etc/snmp/snmpd.conf 2>/dev/null +# LINUX (Debian) +grep -E "rocommunity|rwcommunity" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser <허용_네트워크> + +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <허용_네트워크> + +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY noAuthNoPriv <허용_IP> <넷마스크> - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-62: 로그인 시 경고 메시지 설정 +**판단기준:** 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 양호 +**점검:** +```bash +# 서버 로그온 배너 +cat /etc/motd 2>/dev/null +cat /etc/issue 2>/dev/null +cat /etc/issue.net 2>/dev/null + +# SSH 배너 +grep "^Banner" /etc/ssh/sshd_config + +# Sendmail +grep SmtpGreetingMessage /etc/mail/sendmail.cf 2>/dev/null + +# Postfix +grep smtpd_banner /etc/postfix/main.cf 2>/dev/null + +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# DNS +grep "version" /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# 서버 경고 메시지 +echo "Authorized access only. All activity is monitored." > /etc/motd +echo "Authorized access only." > /etc/issue +echo "Authorized access only." > /etc/issue.net + +# SSH - /etc/ssh/sshd_config +# Banner /etc/issue.net +systemctl restart sshd + +# Sendmail - /etc/mail/sendmail.cf +# SmtpGreetingMessage=Authorized access only + +# Postfix - /etc/postfix/main.cf +# smtpd_banner = Authorized access only + +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only + +# DNS - /etc/named.conf +# version "Not disclosed"; +``` + +### U-63: sudo 명령어 접근 관리 +**판단기준:** /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 양호 +**점검:** +```bash +ls -l /etc/sudoers +``` +**조치:** +```bash +chown root /etc/sudoers +chmod 640 /etc/sudoers +``` + +--- + +## 4. 패치 관리 + +### U-64: 주기적 보안 패치 및 벤더 권고사항 적용 +**판단기준:** 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있는 경우 양호 +**점검:** +```bash +# OS 및 커널 버전 확인 +uname -a +cat /etc/os-release 2>/dev/null +hostnamectl 2>/dev/null + +# 패치 이력 확인 (LINUX) +rpm -qa --last | head -20 2>/dev/null +apt list --upgradable 2>/dev/null + +# SOLARIS +pkg list -af entire@latest 2>/dev/null + +# AIX +oslevel -s +instfix -i | grep ML 2>/dev/null +instfix -i | grep SP 2>/dev/null + +# HP-UX +swlist -l product 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat/CentOS) +yum update -y +# LINUX (Debian/Ubuntu) +apt update && apt upgrade -y + +# SOLARIS +pkg update --accept + +# AIX - smitty installp를 통한 패치 설치 + +# HP-UX +# swinstall -s /tmp/patch.depot +``` + +--- + +## 5. 로그 관리 + +### U-65: NTP 및 시각 동기화 설정 +**판단기준:** NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 양호 +**점검:** +```bash +# NTP +ntpq -pn 2>/dev/null +cat /etc/ntp.conf 2>/dev/null + +# Chrony (RHEL 8+) +chronyc sources 2>/dev/null +cat /etc/chrony.conf 2>/dev/null +``` +**조치:** +```bash +# NTP - /etc/ntp.conf +# server +systemctl restart ntp 2>/dev/null || systemctl restart ntpd 2>/dev/null + +# Chrony - /etc/chrony.conf +# server +systemctl restart chronyd +``` + +### U-66: 정책에 따른 시스템 로깅 설정 +**판단기준:** 로그 기록 정책이 보안 정책에 따라 수립되어 있으며, 로그를 남기고 있는 경우 양호 +**점검:** +```bash +# LINUX +cat /etc/rsyslog.conf 2>/dev/null +ls /etc/rsyslog.d/ 2>/dev/null + +# SOLARIS +cat /etc/syslog.conf 2>/dev/null + +# AIX +cat /etc/syslog.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX - /etc/rsyslog.conf 권장 설정 +cat >> /etc/rsyslog.conf <<'CONF' +*.info;mail.none;authpriv.none;cron.none /var/log/messages +authpriv.* /var/log/secure +mail.* /var/log/maillog +cron.* /var/log/cron +*.emerg * +CONF +systemctl restart rsyslog + +# SOLARIS - /etc/syslog.conf 권장 설정 +# mail.debug /var/log/mail.log +# *.info /var/log/syslog.log +# *.alert /dev/console +# *.emerg * + +# AIX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/error.log +# mail.info /var/adm/mail.log +# auth.info /var/adm/auth.log +# refresh -s syslogd + +# HP-UX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/syslog/error.log +# mail.info /var/adm/syslog/mail.log +# auth.info /var/adm/syslog/auth.log +``` + +### U-67: 로그 디렉터리 소유자 및 권한 설정 +**판단기준:** 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX, SOLARIS +ls -la /var/log/ +# AIX +ls -la /var/adm/ 2>/dev/null +# HP-UX +ls -la /var/adm/syslog/ 2>/dev/null +``` +**조치:** +```bash +# LINUX, SOLARIS +chown root /var/log/* +chmod 644 /var/log/* + +# AIX +chown root /var/adm/* +chmod 644 /var/adm/* + +# HP-UX +chown root /var/adm/syslog/* +chmod 644 /var/adm/syslog/* +``` diff --git a/skills-ko/kesekit-start-ko/scripts/cii/web-service.md b/skills-ko/kesekit-start-ko/scripts/cii/web-service.md new file mode 100644 index 0000000..d70ca7c --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/cii/web-service.md @@ -0,0 +1,725 @@ +# 웹 서비스 점검 스크립트 (WEB-01 ~ WEB-26) + +## 1. 계정 관리 + +### WEB-01: Default 관리자 계정명 변경 +**점검:** +```bash +# Tomcat - 기본 계정명(tomcat, admin) 사용 여부 확인 +grep -i 'username=' /conf/server.xml +# JEUS - Security Domains > Account & Policies > Users에서 기본 계정 확인 +``` +**조치:** +```bash +# Tomcat - 기본 계정명을 유추 불가능한 이름으로 변경 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > ADD +# administrator 대신 유추 불가능한 계정명 입력 후 Administrators 그룹 체크 +./stopServer -host <도메인명>:<포트> +./startDomainAdminServer -host <도메인명>:<포트> +``` + +### WEB-02: 취약한 비밀번호 사용 제한 +**점검:** +```bash +# Tomcat +grep -i 'password=' /conf/server.xml +# 비밀번호 복잡도 기준: 2종류 이상 조합 최소 10자리 또는 3종류 이상 조합 최소 8자리 +# (영문대/소문자, 숫자, 특수문자) +``` +**조치:** +```bash +# Tomcat - 복잡도 만족하는 비밀번호 설정 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > 비밀번호 변경 +# SHA-256 이상 암호화 방식 비밀번호 설정 +``` + +### WEB-03: 비밀번호 파일 권한 관리 +**점검:** +```bash +# Tomcat +ls -al /conf/tomcat-users.xml +# IIS +# %systemroot%\system32\config\SAM 파일 속성 > 보안 확인 +# JEUS +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` +**조치:** +```bash +# Tomcat - 비밀번호 파일 권한 600 이하 설정 +chmod 600 /conf/tomcat-users.xml + +# IIS - SAM 파일 속성 > 보안 > 편집 > Administrators, SYSTEM만 허용 + +# JEUS +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` + +--- + +## 2. 서비스 관리 + +### WEB-04: 디렉터리 리스팅 방지 설정 +**점검:** +```bash +# Apache +grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" +# Nginx +grep -i "autoindex" /etc/nginx/nginx.conf +# Tomcat +grep -i "listings" /conf/web.xml +# JEUS +grep -i "allow-indexing" /WEB-INF/jeus-web-dd.xml +# WebtoB +grep -i "Options" /config/http.m | grep -i "Indexes" +``` +**조치:** +```bash +# Apache - httpd.conf 내 모든 디렉터리에서 Indexes 옵션 제거 +vi /conf/httpd.conf +# +# Options -Indexes (Indexes 삭제 또는 -Indexes 설정) +# +systemctl restart apache2 + +# Tomcat - web.xml 내 listings=false 설정 +vi /conf/web.xml +# +# listings +# false +# + +# Nginx - autoindex off 설정 +vi /conf/nginx.conf +# server { autoindex off; } +systemctl restart nginx + +# IIS - IIS 관리자 > 해당 웹사이트 > 디렉터리 검색 > "사용 안 함" 설정 + +# JEUS +vi /WEB-INF/jeus-web-dd.xml +# false + +# WebtoB +vi /config/http.m +# *NODE +# Options = "-Indexes", +wscfl -I http.m && wsdown && wsboot +``` + +### WEB-05: 지정하지 않은 CGI/ISAPI 실행 제한 +**점검:** +```bash +# Apache +grep -i "LoadModule.*cgi" /conf/httpd.conf +grep -i "ExecCGI" /conf/httpd.conf +# Nginx +grep -i "fastcgi_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - CGI 모듈 비활성화 및 ExecCGI 옵션 제거 +vi /conf/httpd.conf +# #LoadModule cgi_module modules/mod_cgi.so +# #LoadModule cgid_module modules/mod_cgid.so +# +# Options -ExecCGI +# +systemctl restart apache2 + +# Tomcat - web.xml 내 CGI 매핑 비활성화(주석 처리) +# + +# Nginx - fastcgi 설정 주석 처리 +# location ~ \.cgi$ { +# #fastcgi_pass :<포트>; +# #include fastcgi_params; +# } + +# IIS - ISAPI 및 CGI 제한 > 사용하지 않는 CGI/ISAPI 모듈 해제 + +# WebtoB - http.m 내 *SVRGROUP, *SERVER, *URI에서 CGI 설정 주석 처리 +``` + +### WEB-06: 상위 디렉터리 접근 제한 설정 +**점검:** +```bash +# Apache +grep -i "AllowOverride" /conf/httpd.conf +# Tomcat +grep -i "allowLinking" /conf/server.xml +# Nginx +grep -i "auth_basic" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - AllowOverride AuthConfig 설정 + .htaccess 인증 파일 생성 +vi /conf/httpd.conf +# +# AllowOverride AuthConfig +# +htpasswd /.htpasswd [사용자명] +systemctl restart apache2 + +# Tomcat - allowLinking 옵션 제거 +vi /conf/server.xml +# (allowLinking="true" 제거) + +# Nginx - 기본 인증으로 디렉터리 접근 제한 +# location /<접근제한 디렉터리>/ { +# auth_basic "Restricted Content"; +# auth_basic_user_file /etc/nginx/.htpasswd; +# } + +# IIS 7.0+ - web.config 내 enableParentPaths="false" 설정 +# + +# WebtoB - UpperDirRestrict = N 설정 +``` + +### WEB-07: 웹 서비스 경로 내 불필요한 파일 제거 +**점검/조치:** +```bash +# Apache +rm -rf /htdocs/manual +rm -rf /manual + +# Tomcat +rm -rf /webapps/docs/<불필요 파일> +# BUILDING.txt, RELEASE-NOTES.txt 등 매뉴얼 파일 포함 + +# Nginx +rm -rf /html/index.html + +# IIS - 샘플 디렉터리 제거 +# c:\inetpub\iissamples +# c:\winnt\help\iishelp +# c:\program files\common files\system\msadc\sample + +# JEUS +rm -rf /docs/manuals/default/web-manager/<불필요 파일> +rm -rf /samples/<불필요 파일> + +# WebtoB +rm -rf /docs/manuals/<불필요 파일> +rm -rf /samples/<불필요 파일> +``` + +### WEB-08: 파일 업로드 및 다운로드 용량 제한 +**점검:** +```bash +# Apache +grep -i "LimitRequestBody" /conf/httpd.conf +# Tomcat +grep -i "maxPostSize" /conf/server.xml +# Nginx +grep -i "client_max_body_size" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - LimitRequestBody 지시자 설정 (5MB = 5000000) +# +# LimitRequestBody 5000000 +# + +# Tomcat - server.xml 내 maxPostSize 설정 + web.xml 내 multipart-config 설정 +# +# +# 2097152 +# 4194304 +# + +# Nginx - client_max_body_size 설정 +# client_max_body_size 5M; +systemctl restart nginx + +# IIS - web.config 내 maxAllowedContentLength 설정 (기본값 30MB) +# applicationHost.config 내 bufferingLimit(4MB) 및 maxRequestEntityAllowed(0.2MB) 설정 + +# JEUS - web.xml 내 max-file-size 설정 +# 5242880 + +# WebtoB - LimitRequestBody 설정 +# LimitRequestBody = 2048000 +``` + +### WEB-09: 웹 서비스 프로세스 권한 제한 +**점검:** +```bash +# 프로세스 실행 계정 확인 +ps -ef | grep httpd | grep -v root +ps -ef | grep nginx +ps -ef | grep tomcat +ps -ef | grep jeus +``` +**조치:** +```bash +# Apache - www-data 계정으로 실행 +vi /envvars +# export APACHE_RUN_USER=www-data +# export APACHE_RUN_GROUP=www-data +chown -R www-data:www-data /etc/apache2/ /var/www/ /var/log/apache2/ +usermod -s /sbin/nologin www-data +systemctl restart apache2 + +# Tomcat - tomcat 전용 계정으로 실행 +vi /etc/systemd/system/tomcat.service +# [Service] +# User=tomcat +# Group=tomcat +chown -R tomcat:tomcat / +usermod -s /sbin/nologin tomcat +systemctl restart tomcat + +# Nginx - nginx 전용 계정으로 실행 +vi /conf/nginx.conf +# user nginx nginx; +adduser --system --no-create-home --shell /bin/false nginx +groupadd nginx && usermod -aG nginx nginx +systemctl restart nginx + +# IIS - 응용프로그램 풀 ID를 ApplicationPoolIdentity로 설정 + +# JEUS - jeus 전용 계정 생성 후 소유권 변경 +useradd -m jeus +chown -R jeus:jeus / +``` + +### WEB-10: 불필요한 프록시 설정 제한 +**점검:** +```bash +# Apache +grep -i "ProxyPass\|ProxyRequests" /conf/httpd.conf +# Tomcat +grep -i "proxyName\|proxyPort" /conf/server.xml +# Nginx +grep -i "proxy_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - 불필요한 Proxy 설정 제거, ProxyRequests Off 유지 +# +# ProxyRequests Off +# + +# Tomcat - Connector 요소에서 불필요한 proxyName, proxyPort 제거 +# Nginx - 불필요한 proxy_pass 설정 제거 +# IIS - 루트 디렉터리에서 불필요한 Proxy 설정 제거 +# JEUS - web.xml 내 불필요한 ReverseProxy 설정 제거 +# WebtoB - http.m 내 REVERSE_PROXY 설정 제거 +``` + +### WEB-11: 웹 서비스 경로 설정 +**조치:** +```bash +# Apache - DocumentRoot를 별도 경로로 변경 +# DocumentRoot [별도의 경로] + +# Tomcat - docBase를 별도 경로로 변경 +# + +# Nginx - root를 별도 경로로 변경 +# root [별도의 경로]; + +# IIS - 사이트 편집 > 실제 경로를 별도 경로로 변경 +# JEUS - Docroot = "[별도의 경로]" +# WebtoB - DOCROOT="[별도의 경로]" +``` + +### WEB-12: 웹 서비스 링크 사용 금지 +**조치:** +```bash +# Apache - FollowSymLinks 옵션 제거 +vi /conf/httpd.conf +# +# Options -FollowSymLinks +# + +# Tomcat - allowLinking 옵션 제거 (기본값: false) +# Nginx - disable_symlinks on 설정 +# location / { disable_symlinks on; } + +# IIS - 홈 디렉터리 내 바로가기 파일 제거 +# JEUS - jeus-web-dd.xml 내 alias 요소 제거 +# WebtoB - http.m 내 ALIAS 절 불필요 설정 제거 +``` + +### WEB-13: 웹 서비스 설정 파일 노출 제한 +**조치:** +```bash +# Tomcat - 불필요한 DB 연결 리소스 설정 제거 후 접근 권한 설정 +chmod 600 /conf/server.xml + +# IIS - 처리기 매핑에서 *.asa/*.asax 항목 제거 +# 요청 필터링에서 "파일 이름 확장명 거부"에 등록 + +# JEUS - domain.xml 내 불필요한 DB 연결 리소스 제거 +chmod 600 /conf/domain.xml +``` + +### WEB-14: 웹 서비스 경로 내 파일의 접근 통제 +**조치:** +```bash +# Apache +chown -R www-data:www-data /conf/apache2.conf +chmod -R 750 /conf/apache2.conf + +# Tomcat +chown -R tomcat:tomcat /conf/web.xml +chmod -R 750 /conf/web.xml + +# Nginx +chown -R nginx:nginx /conf/nginx.conf +chmod -R 750 /conf/nginx.conf + +# IIS - web.config > 속성 > 보안 > 불필요 권한 제거 + +# JEUS +chown -R jeus:jeus /config/security/SYSTEM_DOMAIN/accounts.xml +chmod -R 750 /config/security/SYSTEM_DOMAIN/accounts.xml + +# WebtoB +chown -R webtob:webtob /config/http.m +chmod -R 750 /config/http.m +``` + +### WEB-15: 불필요한 스크립트 매핑 제거 +**점검:** +```bash +# Tomcat - 불필요한 servlet-mapping 확인 +grep -A2 "servlet-mapping" /conf/web.xml +# IIS - 처리기 매핑에서 취약한 확장자 확인 +# (.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +``` +**조치:** +```bash +# Tomcat - 불필요한 servlet-mapping 제거 +# IIS - 처리기 매핑에서 미사용 확장자 매핑 제거 +# JEUS - web.xml 내 불필요한 제거 +``` + +### WEB-16: 웹 서비스 헤더 정보 노출 제한 +**점검:** +```bash +# Apache +grep -i "ServerTokens\|ServerSignature" /conf/httpd.conf +# Nginx +grep -i "server_tokens" /conf/nginx.conf +# WebtoB +grep -i "ServerTokens" /config/http.m +``` +**조치:** +```bash +# Apache - ServerTokens Prod, ServerSignature Off 설정 +vi /conf/httpd.conf +# ServerTokens Prod +# ServerSignature Off + +# Tomcat - server.xml 내 server 값을 임의 정보로 변경 +# +# + ErrorReportValve에 showServerInfo="false" 추가 +# + +# Nginx +# server_tokens off; + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS 7 이전 - JEUSMain.xml 내 command-option 추가 +# -Djeus.servlet.response.header.serverInfo=false +# JEUS 7 - domain.xml 내 response-header 설정 + +# WebtoB +# ServerTokens ProductOnly +# ServerSignature off +``` + +### WEB-17: 웹 서비스 가상 디렉터리 삭제 +**점검/조치:** +```bash +# Apache - 불필요한 Alias 지시자 확인 후 제거 +grep -i "Alias" /conf/httpd.conf + +# Tomcat - Context path 속성값 확인 후 불필요 제거 +grep -i "Context path" /conf/server.xml + +# Nginx - 불필요한 alias 지시자 제거 +grep -i "alias" /conf/nginx.conf + +# WebtoB - NODE절의 불필요한 Alias 설정 삭제 +grep -i "ALIAS" /config/http.m +``` + +### WEB-18: WebDAV 비활성화 +**점검:** +```bash +# Apache +grep -i "Dav On" /conf/httpd.conf +grep -i "LoadModule.*dav" /conf/httpd.conf +# Nginx +grep -i "dav_methods" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - WebDAV 비활성화 +vi /conf/httpd.conf +# +# Dav Off +# +systemctl restart apache2 + +# Nginx - dav_methods 설정 주석 처리 또는 제거 +systemctl restart nginx + +# IIS - ISAPI 및 CGI 제한 > WebDAV 항목 > 확장 경로 실행 허용 체크 해제 + +# WebtoB - VHOST 절에서 PUT, DELETE, MKCOL, COPY, MOVE 메소드 제거 +``` + +--- + +## 3. 보안 설정 + +### WEB-19: SSI(Server Side Includes) 사용 제한 +**점검:** +```bash +# Apache +grep -i "Includes" /conf/httpd.conf +# Tomcat +grep -i "SSIServlet\|SSIFilter" /conf/web.xml +# Nginx +grep -i "ssi on" /conf/nginx.conf +# WebtoB +grep -i "SSI" /config/http.m +``` +**조치:** +```bash +# Apache - Options Includes 제거 +# Options (Includes 삭제) + +# Tomcat - SSI 서블릿/필터 설정 주석 처리 또는 삭제 +# Nginx - ssi off; 설정 +# IIS - 처리기 매핑에서 .shtml, .shtm, .stm 확장자 매핑 제거 +# WebtoB - *SVRGROUP, *SERVER에서 SSI 관련 설정 삭제 +``` + +### WEB-20: SSL/TLS 활성화 +**점검:** +```bash +# Apache +apache2ctl -M | grep ssl +# Nginx +grep -i "ssl_protocols" /conf/nginx.conf +# WebtoB +grep -i "SSLFLAG\|SSLNAME" /config/http.m +``` +**조치:** +```bash +# Apache - SSL 모듈 활성화 및 인증서 설정 +vi /sites-available/default-ssl.conf +# +# SSLEngine on +# SSLCertificateFile /path/to/cert.crt +# SSLCertificateKeyFile /path/to/privkey.key +# +a2ensite default-ssl +systemctl restart apache2 + +# Nginx - SSL 인증서 설정 +# server { +# listen 443 ssl; +# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; +# ssl_protocols TLSv1.2 TLSv1.3; +# ssl_prefer_server_ciphers on; +# } +systemctl restart nginx + +# IIS - SSL 인증서 바인딩 설정 (IIS 관리자 > 사이트 바인딩 > https 추가) + +# WebtoB - http.m 내 SSLFLAG = Y, SSLNAME 설정 +# *SSL 절에 인증서 경로 설정 +# Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3" +``` + +### WEB-21: HTTP 리디렉션 +**조치:** +```bash +# Apache - HTTP → HTTPS 리디렉션 설정 +# +# RewriteEngine On +# RewriteCond %{HTTPS} off +# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# + +# Nginx +# server { +# listen 80; +# return 301 https://$host$request_uri; +# } + +# IIS - 사이트 바인딩 종류를 HTTPS로 설정 + +# WebtoB - URLRewrite = Y 설정 +# RewriteCond %{HTTPS} off +# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +``` + +### WEB-22: 에러 페이지 관리 +**조치:** +```bash +# Apache - 에러 코드별 일원화된 에러 페이지 설정 +vi /sites-available/000-default.conf +# ErrorDocument 400 /error.html +# ErrorDocument 401 /error.html +# ErrorDocument 403 /error.html +# ErrorDocument 404 /error.html +# ErrorDocument 500 /error.html +systemctl restart apache2 + +# Tomcat - web.xml 내 에러 페이지 설정 +# +# 404 +# /error/404.html +# + +# Nginx +# error_page 404 /404.html; +# error_page 500 502 503 504 /50x.html; +# location = /404.html { root html; internal; } + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS - web.xml 내 에러 메시지 설정 +# WebtoB - *ERRORDOCUMENT 절에 에러 페이지 설정 +# 503 status = 503, url = "/503.html" +``` + +### WEB-23: LDAP 알고리즘 적절하게 구성 +**점검:** +```bash +# Tomcat - 비밀번호 다이제스트 알고리즘 확인 +grep 'digest=' /conf/server.xml +``` +**조치:** +```bash +# Tomcat - SHA-256 이상 알고리즘 설정 +vi /conf/server.xml +# digest="SHA-256" +systemctl restart tomcat +``` + +--- + +## 4. 패치 및 로그 관리 + +### WEB-24: 별도의 업로드 경로 사용 및 권한 설정 +**조치:** +```bash +# Apache - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +# apache2.conf 내 업로드 디렉터리 접근 제한 +# +# Require all denied +# + +# Tomcat - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ + +# Nginx - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ + +# IIS - 웹 서비스 외부에 업로드 디렉터리 생성, IIS 구동 계정에 쓰기 권한 부여 + +# JEUS - 업로드 디렉터리 권한 설정 +chmod 750 +chown jeus:jeus + +# WebtoB - 업로드 디렉터리 권한 설정 +chmod 750 +chown tmax:tmax +``` + +### WEB-25: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```bash +# Apache +/bin/httpd -v + +# Tomcat +cd /lib && java -cp catalina.jar org.apache.catalina.util.ServerInfo + +# Nginx +/sbin/nginx -v + +# IIS +reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v VersionString + +# JEUS +jeusadmin -version + +# WebtoB +wscfl -version +``` +**참고 사이트:** +- Apache: http://httpd.apache.org/download.cgi +- Tomcat: https://tomcat.apache.org/ +- Nginx: https://nginx.org/en/download.html +- IIS: https://www.iis.net/downloads/microsoft +- JEUS/WebtoB: https://technet.tmaxsoft.com/ + +### WEB-26: 로그 디렉터리 및 파일 권한 설정 +**점검:** +```bash +# Apache +ls -al / +# Tomcat +ls -al /logs/ +# Nginx +ls -al /var/log/nginx/ +# JEUS +ls -al /domains/jeus_domain/servers/sample/logs/ +# WebtoB +ls -al /log/ +``` +**조치:** +```bash +# Apache +chmod o-rwx /* + +# Tomcat +chmod o-rwx /logs/* + +# Nginx +chmod o-rwx /var/log/nginx/* + +# IIS - C:\Windows\System32\config 속성 > 보안 > Everyone 권한 제거 +# C:\Windows\System32\LogFiles에서도 동일 조치 + +# JEUS - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /domains/jeus_domain/servers/sample/logs +chmod 640 /domains/jeus_domain/servers/sample/logs/* + +# WebtoB - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /log/ +chmod 640 /log/* +``` diff --git a/skills-ko/kesekit-start-ko/scripts/cii/webapp.md b/skills-ko/kesekit-start-ko/scripts/cii/webapp.md new file mode 100644 index 0000000..83e1041 --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/cii/webapp.md @@ -0,0 +1,880 @@ +# Web Application 점검 스크립트 + +## 1. SSTI (Server Side Template Injection) +**취약 패턴:** +```python +# Python (Jinja2) - 사용자 입력을 직접 템플릿에 삽입 +template = param # 사용자 입력이 직접 템플릿으로 사용됨 +return render_template_string(template) +``` +**안전한 구현:** +```python +# Python (Jinja2) - 사용자 입력을 템플릿 변수로 전달 +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +``` + +--- + +## 2. SQL Injection (SI) + +### 취약 패턴 +```java +// Java - 문자열 연결 방식 쿼리 (취약) +String sql = "SELECT * FROM users WHERE username = '" + userInput + "'"; +Statement stmt = connection.createStatement(); +ResultSet rs = stmt.executeQuery(sql); +``` + +### 안전한 구현 - PreparedStatement (Java) +```java +// Java - PreparedStatement 사용 +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +ResultSet resultSet = preparedStatement.executeQuery(); +``` + +### 안전한 구현 - ORM (JPA/Hibernate) +```java +// Java - JPQL 파라미터 바인딩 +public class ItemService { + @PersistenceContext + private EntityManager em; + public List findItemsByUserInput(String userInput) { + String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; + Query query = em.createQuery(jpql, Item.class); + query.setParameter("userInput", userInput); + return query.getResultList(); + } +} +``` + +### 안전한 구현 - MyBatis 파라미터 바인딩 +```xml + + + INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) + VALUES (#{num}, #{name}, #{age}, #{grade}) + + + DELETE FROM STUDENTS WHERE NUM = #{num} + +``` + +### 안전한 구현 - SQL 키워드 필터링 (Java) +```java +public static String sanitize(String input) { + if (input == null) return null; + String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; + String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; + Pattern regex = Pattern.compile(pattern + "|--"); + Matcher matcher = regex.matcher(input); + return matcher.replaceAll(" "); +} +``` + +### 안전한 구현 - PreparedStatement (PHP) +```php +// PHP - PDO PreparedStatement +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +``` + +### 안전한 구현 - 예외 처리 +```java +// Java - 적절한 예외 처리 (에러 메시지 노출 방지) +try { + // 데이터베이스 작업 +} catch (SQLException e) { + e.printStackTrace(); // 로그에만 기록 + System.out.println("An error occurred. Please try again later."); // 사용자에게 일반 메시지 +} +``` +```php +// PHP - PDO 예외 처리 +try { + // 데이터베이스 작업 +} catch (PDOException $e) { + error_log($e->getMessage()); + echo 'SQL Exception'; // 상세 에러 노출 금지 +} +``` + +### 특수문자 필터링 대상 +| 문자 | 설명 | +|------|------| +| `'` | 문자 데이터 구분 기호 | +| `;` | 쿼리 구분 기호 | +| `--`, `#` | 라인 주석 구분 기호 | +| `/* */` | 블록 주석 | + +--- + +## 3. 디렉터리 인덱싱 (DI) +**조치:** +```apache +# Apache - Indexes 옵션 제거 + + Options FollowSymLinks # Indexes 제거 + +``` +```xml + + + listings + false + +``` +```nginx +# Nginx +server { + location / { + autoindex off; + } +} +``` + +--- + +## 4. 에러 페이지 적용 미흡 (EP) +**조치:** +```apache +# Apache - 서버 정보 노출 제거 및 사용자 에러 페이지 정의 +ServerTokens Prod +ServerSignature Off +ErrorDocument 404 /main/error.html +ErrorDocument 405 /main/error.html +``` +```xml + + + + +``` +```xml + + + 404 + /errors/404 + + + 500 + /errors/500 + + + java.lang.Exception + /errors/500 + +``` +```nginx +# Nginx - 서버 정보 제거 및 사용자 에러 페이지 +http { + server_tokens off; +} +server { + error_page 400 401 402 405 /custom_4xx.html; + error_page 404 /custom_404.html; + error_page 500 502 503 504 /custom_5xx.html; + location = /custom_404.html { root /var/www/html; internal; } + location = /custom_4xx.html { root /var/www/html; internal; } + location = /custom_5xx.html { root /var/www/html; internal; } +} +``` + +--- + +## 5. 정보 누출 (IL) +**조치 항목:** +1. robots.txt, web.config, nginx.conf로 검색 차단 디렉터리/확장자 지정 +2. 백업 파일 삭제 (*.bak, *.backup, *.org, *.old, *.zip, *.log, *.sql, *.tmp, *.temp) +3. 초기 페이지/디렉터리/배너 삭제 +4. 개인정보 마스킹 처리 (홍\*동, 901231-1\*\*\*\*\*\*, 010-1234-\*\*\*\* 등) +5. 개발 중 주석/디버그 정보 제거 + +--- + +## 6. 크로스사이트 스크립트 - XSS (XS) + +### 취약 패턴 +```javascript +// JavaScript - innerHTML 사용 (취약) +document.getElementById('output').innerHTML = userInput; +// document.write(userInput); // 취약 +``` + +### 안전한 구현 - HTML Entity 변환 (Java) +```java +public static String sanitizeInput(String input) { + if (input == null) return null; + return input.replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll("\"", """) + .replaceAll("'", "'"); +} +``` + +### 안전한 구현 - HTML Entity 변환 (PHP) +```php +function escapeHtml($input) { + return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { + $escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); + $additionalEscapes = [ + '\\' => '\', + '(' => '(', + ')' => ')', + '#' => '#' + ]; + return strtr($escaped, $additionalEscapes); +} +``` + +### 특수문자 필터링 대상 +| 변경 전 | 변경 후 | +|---------|---------| +| `<` | `<` | +| `>` | `>` | +| `"` | `"` | +| `(` | `(` | +| `)` | `)` | +| `#` | `#` | +| `&` | `&` | + +### 쿠키 보안 설정 +``` +Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict +``` + +--- + +## 7. 크로스사이트 요청 위조 - CSRF (CF) + +### 안전한 구현 - CSRF Token (Java/Spring) +```java +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + String csrfToken = generateCsrfToken(); + session.setAttribute("csrfToken", csrfToken); + model.addAttribute("csrfToken", csrfToken); + return "index"; +} + +// CSRF Token 생성 함수 +private String generateCsrfToken() { + SecureRandom secureRandom = new SecureRandom(); + byte[] token = new byte[16]; + secureRandom.nextBytes(token); + return Base64.getUrlEncoder().encodeToString(token); +} + +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, + @RequestParam("csrfToken") String csrfToken, + HttpServletRequest request, Model model) { + HttpSession session = request.getSession(); + String sessionToken = (String) session.getAttribute("csrfToken"); + if (sessionToken == null || !sessionToken.equals(csrfToken)) { + throw new IllegalStateException("Invalid CSRF token"); + } + String sanitizedInput = sanitizeInput(input); + inputs.add(sanitizedInput); + return "index"; +} +``` + +### HTML 폼에 CSRF Token 포함 +```html +
+ + + + +
+``` + +### 추가 방어 조치 +1. Referer/Origin 헤더 검증으로 외부 도메인 요청 차단 +2. SameSite 쿠키 옵션 적용 +3. HTTPS 환경에서 Secure, HttpOnly 속성 적용 + +--- + +## 8. 서버사이드 요청 위조 - SSRF (SF) + +### 안전한 구현 - URL 화이트리스트 (Java) +```java +private final List allowedDomains = Arrays.asList("example.com"); +private final Map> allowedIPsAndPorts = new HashMap<>(); + +public UrlValidator() { + allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); + allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} + +public boolean isUrlAllowed(String urlString) { + try { + URL url = new URL(urlString); + String protocol = url.getProtocol(); + // HTTP와 HTTPS만 허용 + if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { + return false; + } + String host = url.getHost(); + int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); + if (allowedDomains.contains(host)) return true; + if (allowedIPsAndPorts.containsKey(host)) { + return allowedIPsAndPorts.get(host).contains(port); + } + return false; + } catch (Exception e) { + return false; + } +} +``` + +### 안전한 구현 - URL 화이트리스트 (PHP) +```php +function isUrlAllowed($url) { + $allowedDomains = ['example.com', 'api.example.com']; + $allowedIPsAndPorts = [ + '192.168.10.10' => [80, 443, 8000], + '10.0.0.1' => [80, 443] + ]; + $parsedUrl = parse_url($url); + if (!$parsedUrl || !isset($parsedUrl['host'])) return false; + + $host = $parsedUrl['host']; + $port = isset($parsedUrl['port']) ? $parsedUrl['port'] + : ($parsedUrl['scheme'] === 'https' ? 443 : 80); + if (in_array($host, $allowedDomains, true)) return true; + if (filter_var($host, FILTER_VALIDATE_IP)) { + if (array_key_exists($host, $allowedIPsAndPorts)) { + return in_array($port, $allowedIPsAndPorts[$host], true); + } + } + return false; +} +``` + +### PHP 설정 강화 +```ini +; php.ini - 원격 URL 접근 차단 +allow_url_fopen=Off +allow_url_include=Off +``` + +### 추가 방어 조치 +1. 내부 네트워크 대역 및 관리용 포트 요청 차단 +2. http, https 외 프로토콜(file://, gopher://, data://) 차단 +3. 에러 발생 시 응답값 노출 금지 +4. 애플리케이션 서버와 내부 시스템 간 네트워크 분리 + +--- + +## 9. 약한 비밀번호 정책 (BF) +**비밀번호 복잡성 검증 (JavaScript):** +```javascript +function isPasswordStrong(password) { + const minLength = 8; + const hasUpperCase = /[A-Z]/.test(password); + const hasLowerCase = /[a-z]/.test(password); + const hasNumber = /[0-9]/.test(password); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); + return password.length >= minLength + && hasUpperCase && hasLowerCase + && hasNumber && hasSpecialChar; +} +``` +**취약 ID 예시:** admin, administrator, manager, guest, tomcat, root, user +**취약 비밀번호 예시:** abcd, 1234, 1111, test, password, public, 빈 비밀번호, ID와 동일 + +--- + +## 10. 불충분한 인증 절차 (IA) + +### 안전한 구현 - 재인증 로직 (Java) +```java +// 중요 페이지 접근 시 세션 기반 인증 검증 +public String editProfile(HttpSession session, Model model) { + User user = (User) session.getAttribute("user"); + Boolean isVerified = (Boolean) session.getAttribute("isVerified"); + if (user == null || isVerified == null || !isVerified) { + return "redirect:/user/authenticate"; + } + model.addAttribute("user", user); + return "edit_profile"; +} + +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { + if (input.equals(code)) { + session.setAttribute("isVerified", true); + return "redirect:/user/edit_profile"; + } else { + return "redirect:/user/authenticate?error=true"; + } +} +``` + +### 안전한 구현 - 접근 통제 공통 모듈 (Java) +```java +public class AccessControl { + public static boolean isAuthenticated(HttpSession session) { + return session.getAttribute("user") != null; + } + public static boolean isVerified(HttpSession session) { + return Boolean.TRUE.equals(session.getAttribute("isVerified")); + } +} +``` + +--- + +## 11. 불충분한 권한 검증 (IN) + +### 안전한 구현 - 서버 사이드 세션 검증 (Java) +```java +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { + User currentUser = (User) session.getAttribute("currentUser"); + if (currentUser == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); + } + Inquiry inquiry = inquiryService.findInquiryById(id); + if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); + } + model.addAttribute("inquiry", inquiry); + return "inquiry_detail"; +} +``` + +--- + +## 12. 취약한 비밀번호 복구 절차 (PR) + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (Java) +```java +private static final String CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +private static final int PASSWORD_LENGTH = 12; + +private String generateTemporaryPassword() { + SecureRandom secureRandom = new SecureRandom(); + StringBuilder password = new StringBuilder(PASSWORD_LENGTH); + for (int i = 0; i < PASSWORD_LENGTH; i++) { + int randomIndex = secureRandom.nextInt(CHARACTERS.length()); + password.append(CHARACTERS.charAt(randomIndex)); + } + return password.toString(); +} +``` + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (PHP) +```php +function generateRandomPassword($length = 12) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; + $charactersLength = strlen($characters); + $randomPassword = ''; + for ($i = 0; $i < $length; $i++) { + $randomPassword .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomPassword; +} +``` + +--- + +## 13. 프로세스 검증 누락 (PV) + +### 안전한 구현 - 세션 기반 접근 통제 (Java/Spring) +```java +// 인터셉터 설정 - 비공개/공개 페이지 구분 +public class SessionConfig implements WebMvcConfigurer { + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SessionInterceptor()) + .addPathPatterns("/home", "/board/**") + .excludePathPatterns("/login", "/register", "/error"); + } +} + +public class SessionInterceptor implements HandlerInterceptor { + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + return true; + } +} +``` + +### 안전한 구현 - 플로우 제어 (PHP) +```php +session_start(); +if ($step_completed) { + $_SESSION['step1_completed'] = true; + header('Location: step2.php'); + exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { + header('Location: step1.php'); // 1단계 미완료 시 리다이렉트 + exit; +} +``` + +--- + +## 14. 악성 파일 업로드 (FU) + +### 안전한 구현 - 파일 업로드 보안 (Java) +```java +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of( + "image/jpeg", "image/png", "application/pdf", "text/plain"); + +// 파일명 정규화 +private static String normalizeFilename(String filename) { + if (filename == null) return null; + String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); + name = Normalizer.normalize(name, Normalizer.Form.NFC); + name = name.replace("\0", ""); + name = name.replaceAll("[<>:\"/\\\\|?*]", ""); + name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); + return name; +} + +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { + String safe = normalizeFilename(filename); + int dotCount = safe.length() - safe.replace(".", "").length(); + if (dotCount != 1) return ""; // 이중 확장자 차단 + int idx = safe.lastIndexOf('.'); + return (idx == -1) ? "" : safe.substring(idx + 1).toLowerCase(); +} + +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { + String original = file.getOriginalFilename(); + String ext = getExtension(original); + if (!Arrays.asList(ALLOWED_EXTENSIONS).contains(ext)) { + throw new IOException("허용되지 않은 확장자"); + } + // MIME 시그니처 검증 + Tika tika = new Tika(); + String mime = tika.detect(file.getInputStream()); + if (!ALLOWED_MIME.contains(mime)) { + throw new IOException("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; + Path savePath = Paths.get(uploadDir, newName); + file.transferTo(savePath.toFile()); + return newName; +} +``` + +### 안전한 구현 - 파일 업로드 보안 (PHP) +```php +function normalize_filename($filename) { + $filename = urldecode($filename); + $filename = normalizer_normalize($filename, Normalizer::FORM_C); + $filename = str_replace("\0", "", $filename); + $filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); + $filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); + return $filename; +} + +function is_valid_extension($filename, $allowed_exts) { + $safe = normalize_filename($filename); + if (substr_count($safe, '.') !== 1) return false; // 이중 확장자 차단 + $ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); + return in_array($ext, $allowed_exts, true); +} + +function save_upload($file, $uploadDir) { + $allowed_exts = ['jpg', 'jpeg', 'png', 'pdf', 'txt']; + $allowed_mime = ['image/jpeg', 'image/png', 'application/pdf', 'text/plain']; + + if (!is_valid_extension($file['name'], $allowed_exts)) { + throw new Exception("허용되지 않은 확장자"); + } + $mime = mime_content_type($file['tmp_name']); + if (!in_array($mime, $allowed_mime, true)) { + throw new Exception("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $newName = bin2hex(random_bytes(16)) . '.' . $ext; + $dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; + if (!move_uploaded_file($file['tmp_name'], $dest)) { + throw new Exception("파일 저장 실패"); + } + return $newName; +} +``` + +### 핵심 보안 조치 +1. 확장자 화이트리스트 검증 + MIME 타입 검증 +2. 파일명 난수화 (UUID 등) +3. 업로드 경로를 웹 디렉터리 외부에 배치 +4. 업로드된 파일의 실행 권한 제거 + +--- + +## 15. 파일 다운로드 (FD) + +### 안전한 구현 - 파일명 검증 (Java) +```java +public class FileDownloadUtil { + // 파일명에 영문, 숫자, 일부 특수문자만 허용 + public static boolean isValidFileName(String fileName) { + return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); + } + + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "png"); + + public static boolean isAllowedExtension(String filePath) { + String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + return ALLOWED_EXTENSIONS.contains(extension); + } +} + +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename) throws IOException { + if (!FileDownloadUtil.isValidFileName(filename) + || !FileDownloadUtil.isAllowedExtension(filename)) { + return ResponseEntity.badRequest().build(); + } + // ... 다운로드 로직 +} +``` + +### 안전한 구현 - 경로 정규화 (PHP) +```php +if (isset($_GET['file'])) { + $file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); + $filePath = realpath('../uploads/' . $file); // 경로 정규화 + // 파일 경로가 지정된 디렉터리 내에 있는지 확인 + if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { + downloadFile($filePath); + } else { + echo "잘못된 파일 경로입니다."; + exit; + } +} +``` + +### 우회 공격 대응 +| 인코딩 방식 | 예시 | +|-------------|------| +| URL 인코딩 | `.(%2e)`, `/(%2f)`, `\(%5c)` | +| 더블 URL 인코딩 | `.(%252e)`, `/(%252f)` | +| 16bit 유니코드 | `.(%u002e)`, `/(%u2215)` | +| 특수문자 중첩 | `....//` → `../` | +| 종단 문자 추가 | `[파일명]%00.jpg` | + +--- + +## 16. 불충분한 세션 관리 (IS) + +### 안전한 구현 - 세션 고정 방지 (Java/Spring) +```java +@RequestMapping("/login") +public String login(HttpServletRequest request) { + request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 + return "redirect:/home"; +} + +// Spring Security 설정 +@Override +protected void configure(HttpSecurity http) throws Exception { + http.sessionManagement() + .sessionFixation().migrateSession() + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(1).maxSessionsPreventsLogin(false) + .expiredUrl("/login?expired"); +} +``` + +### 세션 만료 시간 설정 +```xml + + + 60 + +``` +```properties +# Spring Boot application.properties +server.servlet.session.timeout=60m +``` +```php +// PHP - 세션 재생성 및 만료 설정 +session_start(); +session_regenerate_id(true); // 예측 불가능한 세션 ID 생성 +ini_set('session.gc_maxlifetime', 3600); // 60분 +ini_set('session.cookie_lifetime', 3600); +``` + +### JWT 보안 설정 +| 안전한 알고리즘 | 설명 | +|----------------|------| +| HS256~512 | 비밀 키 기반 HMAC 해시 | +| RS256~512 | 비대칭 키 RSA 서명 | +| ES256~512 | 타원 곡선 암호화 서명 | + +| 취약한 알고리즘 | 설명 | +|----------------|------| +| HS1, RS1 | SHA-1 기반 (취약) | +| none | 서명 생략 (위험) | +| plaintext | 평문 서명 (위험) | + +--- + +## 17. 데이터 평문 전송 (SN) +**조치:** +```apache +# Apache - TLSv1.2 이상 사용, SSLv2/v3 비활성화 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +``` +``` +# IIS - 레지스트리에서 SSL 2.0, 3.0 비활성화 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] +"Enabled"=dword:00000000 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] +"Enabled"=dword:00000000 +``` + +--- + +## 18. 쿠키 변조 (CC) + +### 안전한 구현 - AES + HMAC 쿠키 (Java) +```java +public class CookieUtil { + private static final int IV_LEN = 16, HMAC_LEN = 32; + private final byte[] encKey; // AES-256 키 (32 bytes) + private final byte[] hmacKey; // HMAC 키 + + // 보안 쿠키 생성 + public void addSecureCookie(HttpServletResponse resp, String name, + String plaintext, int maxAgeSec) throws Exception { + byte[] iv = new byte[IV_LEN]; + new SecureRandom().nextBytes(iv); + + // AES-256-CBC 암호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, + new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // HMAC 생성 + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); + mac.update(iv); + mac.update(ciphertext); + byte[] hmac = mac.doFinal(); + + // payload = IV + HMAC + 암호문 + byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; + System.arraycopy(iv, 0, payload, 0, iv.length); + System.arraycopy(hmac, 0, payload, iv.length, hmac.length); + System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); + + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); + + // HttpOnly, Secure, SameSite 속성 설정 + String header = String.format( + "%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", + name, encoded, maxAgeSec); + resp.addHeader("Set-Cookie", header); + } +} +``` + +--- + +## 19. 관리자 페이지 노출 (AE) +**조치:** +1. 유추하기 어려운 URL 및 포트로 관리자 페이지 변경 +2. 지정된 IP만 관리자 페이지 접근 허용 +3. 관리자 로그인 시 2차 인증(OTP, VPN, 인증서) 적용 +4. 하위 페이지별 세션 검증 구현 + +--- + +## 20. 자동화 공격 (CC) +**조치:** +1. 로그인 시도, 게시글 등록, SMS 발송 등에 횟수 제한 설정 +2. CAPTCHA 등 일회성 확인 로직 구현 +3. IDS/IPS 시스템으로 대량 패킷 감지 및 차단 +4. 로그인 실패 3~5회 초과 시 계정 잠금 로직 구현 + +--- + +## 21. 불필요한 Method 악용 (WM) + +### 조치 - Apache +```bash +# WebDAV 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs + +# 불필요한 메소드 제한 +# /etc/apache2/apache2.conf + + Dav Off + + Order Allow,Deny + Deny from all + + + +# TRACE 메소드 비활성화 +TraceEnable Off + +# CONNECT 메소드 비활성화 (mod_rewrite) + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} ^CONNECT + RewriteRule .* - [F] + +``` + +### 조치 - Tomcat +```xml + + + readonly + true + + + + +``` + +### 조치 - Nginx +```nginx +# WebDAV 비활성화 - dav_methods 지시어 삭제 +# Nginx는 0.5.17 이후 TRACE를 405로 거부 +# CONNECT 메소드는 기본적으로 미지원 +``` + +### 조치 - IIS +``` +# IIS 6.0 이상: 요청 필터링 > HTTP 동사 > 동사 거부에 TRACE 추가 +# WebDAV 기능 비활성화 확인 +``` diff --git a/skills-ko/kesekit-start-ko/scripts/cii/windows.md b/skills-ko/kesekit-start-ko/scripts/cii/windows.md new file mode 100644 index 0000000..e2970e3 --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/cii/windows.md @@ -0,0 +1,1489 @@ +# Windows 서버 취약점 점검/조치 스크립트 +> KISA 주요정보통신기반시설 기술적 취약점 분석평가 가이드 (W-01 ~ W-64) + +--- + +## 1. 계정 관리 + +### W-01: Administrator 계정 이름 변경 등 보안성 강화 (상) +**점검:** +```powershell +# Administrator(SID-500) 계정명 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select-Object Name, Enabled, SID + +# 로컬 보안 정책에서 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "NewAdministratorName" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# Administrator 계정명을 유추 불가능한 이름으로 변경 +Rename-LocalUser -Name "Administrator" -NewName "yourCustomAdmin" + +# 또는 wmic 사용 +wmic useraccount where "SID like '%-500'" rename "yourCustomAdmin" + +# GPO 방식: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: Administrator 계정 이름 바꾸기" 설정 +``` + +--- + +### W-02: Guest 계정 비활성화 (상) +**점검:** +```powershell +# Guest 계정 활성화 여부 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled + +# net 명령으로 확인 +net user Guest +``` +**조치:** +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" + +# 또는 net 명령 +net user Guest /active:no +``` + +--- + +### W-03: 불필요한 계정 제거 (상) +**점검:** +```powershell +# 전체 로컬 사용자 계정 목록 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Format-Table + +# 장기 미사용 계정 확인 (90일 이상 미로그인) +Get-LocalUser | Where-Object { + $_.Enabled -eq $true -and + $_.LastLogon -lt (Get-Date).AddDays(-90) +} | Select-Object Name, LastLogon +``` +**조치:** +```powershell +# 불필요한 계정 비활성화 +Disable-LocalUser -Name "<불필요한계정명>" + +# 불필요한 계정 삭제 +Remove-LocalUser -Name "<불필요한계정명>" +``` + +--- + +### W-04: 계정 잠금 임계값 설정 (상) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts + +# 상세 확인 (secedit) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutBadCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 임계값 5회로 설정 +net accounts /lockoutthreshold:5 + +# GPO 방식: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 임계값" = 5 +``` + +--- + +### W-05: 해독 가능한 암호화를 사용하여 암호 저장 해제 (상) +**점검:** +```powershell +# 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ClearTextPassword" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "해독 가능한 암호화를 사용하여 암호 저장" = 사용 안 함 +# secedit 인라인 설정 +secedit /export /cfg C:\secpol_tmp.cfg +(Get-Content C:\secpol_tmp.cfg) -replace "ClearTextPassword = 1","ClearTextPassword = 0" | Set-Content C:\secpol_tmp.cfg +secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol_tmp.cfg /areas SECURITYPOLICY +Remove-Item C:\secpol_tmp.cfg -Force +``` + +--- + +### W-06: 관리자 그룹에 최소한의 사용자 포함 (상) +**점검:** +```powershell +# Administrators 그룹 구성원 확인 +Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource + +# net 명령 +net localgroup Administrators +``` +**조치:** +```powershell +# 불필요한 계정을 Administrators 그룹에서 제거 +Remove-LocalGroupMember -Group "Administrators" -Member "<불필요한계정>" + +# 관리 업무용 계정과 일반 업무용 계정을 분리하여 운용 +``` + +--- + +### W-07: Everyone 사용 권한을 익명 사용자에 적용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous +# 값이 0이면 양호 + +# 로컬 보안 정책 내보내기로 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "EveryoneIncludesAnonymous" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: Everyone 사용 권한을 익명 사용자에게 적용" = 사용 안 함 +``` + +--- + +### W-08: 계정 잠금 기간 설정 (중) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts +# "잠금 기간(분)"과 "잠금 관찰 창(분)" 확인 + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutDuration|ResetLockoutCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 기간 60분, 잠금 수 원래대로 설정 기간 60분 +net accounts /lockoutduration:60 +net accounts /lockoutwindow:60 + +# GPO: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 기간" = 60분 +# "다음 시간 후 계정 잠금 수를 원래대로 설정" = 60분 +``` + +--- + +### W-09: 비밀번호 관리 정책 설정 (상) +**점검:** +```powershell +# 암호 정책 확인 +net accounts + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MinimumPasswordLength|PasswordComplexity|MaximumPasswordAge|MinimumPasswordAge|PasswordHistorySize" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 암호 정책 설정 +net accounts /minpwlen:8 /maxpwage:90 /minpwage:1 /uniquepw:4 + +# GPO: 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "암호는 복잡성을 만족해야 함" = 사용 +# "최소 암호 길이" = 8문자 +# "최대 암호 사용 기간" = 90일 +# "최소 암호 사용 기간" = 1일 +# "최근 암호 기억" = 4개 암호 기억됨 +``` + +--- + +### W-10: 마지막 사용자 이름 표시 안 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 마지막 사용자 이름 표시 안 함" = 사용 +``` + +--- + +### W-11: 로컬 로그온 허용 (중) +**점검:** +```powershell +# 로컬 로그온 허용 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeInteractiveLogonRight" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force + +# Administrators, IUSR_ 외 다른 계정이 있으면 취약 +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "로컬 로그온 허용" 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹 제거 + +# ntrights 유틸리티 사용 (Windows Resource Kit) +# ntrights -u "<제거할계정>" -r SeInteractiveLogonRight +``` + +--- + +### W-12: 익명 SID/이름 변환 허용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 (Windows 2003 이상) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LSAAnonymousNameLookup" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: 익명 SID/이름 변환 허용" = 사용 안 함 +``` + +--- + +### W-13: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한" = 사용 +``` + +--- + +### W-14: 원격터미널 접속 가능한 사용자 그룹 제한 (중) +**점검:** +```powershell +# Remote Desktop Users 그룹 구성원 확인 +Get-LocalGroupMember -Group "Remote Desktop Users" | Select-Object Name, ObjectClass + +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +# 0이면 원격 데스크톱 허용 상태 +``` +**조치:** +```powershell +# 관리자 외 별도 원격 접속 계정 생성 +New-LocalUser -Name "rdpUser" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -FullName "RDP 전용 사용자" +Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpUser" + +# 불필요한 계정 제거 +Remove-LocalGroupMember -Group "Remote Desktop Users" -Member "<불필요한계정>" +``` + +--- + +## 2. 서비스 관리 + +### W-15: 사용자 개인키 사용 시 암호 입력 (상) +**점검:** +```powershell +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ForceKeyProtection" C:\secpol_tmp.cfg +# 값이 2이면 양호 (키를 사용할 때마다 암호 입력) +Remove-Item C:\secpol_tmp.cfg -Force + +# 레지스트리 직접 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection +``` +**조치:** +```powershell +# 레지스트리 설정 (2 = 키를 사용할 때마다 암호 매번 입력) +reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection /t REG_DWORD /d 2 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용" +# = "키를 사용할 때마다 암호를 매 번 입력해야 함" +``` + +--- + +### W-16: 공유 권한 및 사용자 그룹 설정 (상) +**점검:** +```powershell +# 공유 폴더 목록 확인 +Get-SmbShare | Select-Object Name, Path, Description | Format-Table + +# 공유 폴더 권한에서 Everyone 확인 +Get-SmbShare | ForEach-Object { + $share = $_.Name + Get-SmbShareAccess -Name $share | Where-Object { $_.AccountName -like "*Everyone*" } | + Select-Object @{N='Share';E={$share}}, AccountName, AccessControlType, AccessRight +} +``` +**조치:** +```powershell +# 공유 폴더에서 Everyone 권한 제거 +Revoke-SmbShareAccess -Name "<공유명>" -AccountName "Everyone" -Force + +# 필요한 계정에 적절한 권한 추가 +Grant-SmbShareAccess -Name "<공유명>" -AccountName "<계정명>" -AccessRight Read -Force +``` + +--- + +### W-17: 하드디스크 기본 공유 제거 (상) +**점검:** +```powershell +# 기본 공유 확인 +net share +Get-SmbShare | Where-Object { $_.Name -match '^\w\$|^ADMIN\$' } | Select-Object Name, Path + +# AutoShareServer 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks 2>$null +``` +**조치:** +```powershell +# 기본 공유 중지 +net share C$ /delete +net share D$ /delete +net share ADMIN$ /delete + +# 재부팅 후 재생성 방지 (레지스트리) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-18: 불필요한 서비스 제거 (상) +**점검:** +```powershell +# 실행 중인 서비스 목록 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType | Format-Table + +# 불필요한 서비스 존재 여부 확인 +$unnecessaryServices = @("Alerter","ClipSrv","Browser","CryptSvc","DHCPClient", + "TrkWks","TrkSvr","ERSvc","HidServ","IMAPICD","Messenger","mnmsrvc", + "WmdmPmSN","Spooler","RemoteRegistry","simptcp","upnphost","WZCSVC") +Get-Service | Where-Object { $unnecessaryServices -contains $_.Name -and $_.Status -eq "Running" } | + Select-Object Name, DisplayName, Status +``` +**조치:** +```powershell +# 불필요한 서비스 중지 및 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 예시: Remote Registry 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled + +# 예시: Print Spooler 비활성화 (프린터 미사용 시) +Stop-Service -Name "Spooler" -Force +Set-Service -Name "Spooler" -StartupType Disabled +``` + +--- + +### W-19: 불필요한 IIS 서비스 구동 점검 (상) +**점검:** +```powershell +# IIS 서비스 상태 확인 +Get-Service -Name "W3SVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "IISADMIN" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# IIS 설치 여부 +Get-WindowsFeature -Name Web-Server 2>$null | Select-Object Name, Installed +``` +**조치:** +```powershell +# IIS 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "W3SVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "W3SVC" -StartupType Disabled -ErrorAction SilentlyContinue +Stop-Service -Name "IISADMIN" -Force -ErrorAction SilentlyContinue +Set-Service -Name "IISADMIN" -StartupType Disabled -ErrorAction SilentlyContinue + +# IIS 기능 제거 +Uninstall-WindowsFeature -Name Web-Server +``` + +--- + +### W-20: NetBIOS 바인딩 서비스 구동 점검 (상) +**점검:** +```powershell +# NetBIOS over TCP/IP 설정 확인 +Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | + Select-Object Description, TcpipNetbiosOptions +# TcpipNetbiosOptions: 0=DHCP기본, 1=사용, 2=사용안함 + +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces" /s /v NetbiosOptions +``` +**조치:** +```powershell +# NetBIOS over TCP/IP 비활성화 (WMI) +$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" +foreach ($adapter in $adapters) { + $adapter.SetTcpipNetbios(2) # 2 = NetBIOS 사용 안 함 +} + +# GUI: 네트워크 연결 > 속성 > TCP/IPv4 > 고급 > WINS 탭 +# "NetBIOS over TCP/IP 사용 안 함" 선택 +``` + +--- + +### W-21: 암호화되지 않는 FTP 서비스 비활성화 (상) +**점검:** +```powershell +# FTP 서비스 상태 확인 +Get-Service -Name "FTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "MSFTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# FTP 서비스 중지 및 비활성화 +Stop-Service -Name "FTPSVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "FTPSVC" -StartupType Disabled -ErrorAction SilentlyContinue + +# SFTP 또는 FTPS 대안 사용 권장 +``` + +--- + +### W-22: FTP 디렉토리 접근권한 설정 (상) +**점검:** +```powershell +# FTP 홈 디렉터리 경로 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/sites/site" -PSPath "IIS:\" -ErrorAction SilentlyContinue + +# FTP 홈 디렉터리 권한 확인 +icacls "C:\inetpub\ftproot" 2>$null +# Everyone 권한이 있으면 취약 +``` +**조치:** +```powershell +# FTP 홈 디렉터리에서 Everyone 권한 제거 +icacls "C:\inetpub\ftproot" /remove Everyone /T + +# 필요한 사용자에게만 권한 부여 +icacls "C:\inetpub\ftproot" /grant "ftpUser:(OI)(CI)RX" +``` + +--- + +### W-23: 공유 서비스에 대한 익명 접근 제한 설정 (상) +**점검:** +```powershell +# FTP 익명 인증 설정 확인 (IIS) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS FTP 익명 인증 비활성화 +Import-Module WebAdministration +Set-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -Value $false + +# 또는 IIS 관리자에서: +# FTP 사이트 > FTP 인증 > 익명 인증 = 사용 안 함 +``` + +--- + +### W-24: FTP 접근 제어 설정 (상) +**점검:** +```powershell +# IIS FTP IP 제한 설정 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/security/ipSecurity" -PSPath "IIS:\Sites\Default FTP Site" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS 관리자에서 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +# 1) 허용 항목 추가 (접속 허용 IP) +# 2) 기능 설정 편집 > 지정되지 않은 클라이언트 액세스 = 거부 + +# PowerShell (IIS 모듈) +Import-Module WebAdministration +# 특정 IP 허용 추가 +Add-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/ipSecurity" -Name "." -Value @{ipAddress="192.168.1.100";allowed="true"} +``` + +--- + +### W-25: DNS Zone Transfer 설정 (상) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 영역 전송 설정 확인 (DNS 서버 설치 시) +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, ZoneType +Get-DnsServerZone -ErrorAction SilentlyContinue | ForEach-Object { + Get-DnsServerZoneTransferPolicy -ZoneName $_.ZoneName -ErrorAction SilentlyContinue +} +``` +**조치:** +```powershell +# DNS 영역 전송을 특정 서버로만 제한 +# dnscmd /zoneresetsecondaries <영역이름> /securens +Set-DnsServerPrimaryZone -Name "<영역이름>" -SecureSecondaries TransferToSecureServers -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-26: RDS(Remote Data Services) 제거 (상) +**점검:** +```powershell +# MSADC 가상 디렉터리 존재 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch" 2>$null +``` +**조치:** +```powershell +# MSADC 가상 디렉터리 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 키 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\RDSServer.DataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\AdvancedDataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\VbBusObj.VbBusObjCls" /f 2>$null + +# 참고: Windows 2008 이상은 해당 없음 +``` + +--- + +### W-27: 최신 Windows OS Build 버전 적용 (상) +**점검:** +```powershell +# Windows 빌드 버전 확인 +[System.Environment]::OSVersion.Version +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").UBR + +# winver 실행 +winver + +# systeminfo로 상세 정보 +systeminfo | Select-String "OS 이름|OS 버전|OS Name|OS Version" +``` +**조치:** +```powershell +# Windows Update 확인 및 설치 +# 자동 업데이트: +# 제어판 > Windows Update + +# PowerShell로 업데이트 확인 (PSWindowsUpdate 모듈) +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot + +# 수동 패치: https://msrc.microsoft.com/update-guide +``` + +--- + +### W-28: 터미널 서비스 암호화 수준 설정 (중) +**점검:** +```powershell +# RDP 암호화 수준 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel +# 2=중간(클라이언트 호환 가능), 3=높음, 4=FIPS + +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MinEncryptionLevel 2>$null +``` +**조치:** +```powershell +# 레지스트리에서 암호화 수준 설정 (2 이상) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 3 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 보안 +# "클라이언트 연결 암호화 수준 설정" = 사용 (높음) +``` + +--- + +### W-29: 불필요한 SNMP 서비스 구동 점검 (중) +**점검:** +```powershell +# SNMP 서비스 상태 확인 +Get-Service -Name "SNMP" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# SNMP 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "SNMP" -Force -ErrorAction SilentlyContinue +Set-Service -Name "SNMP" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-30: SNMP Community String 복잡성 설정 (중) +**점검:** +```powershell +# SNMP Community String 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" 2>$null +# public, private이 있으면 취약 +``` +**조치:** +```powershell +# 기본 Community String 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v public /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v private /f 2>$null + +# 복잡한 Community String 추가 (읽기전용 = 4) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v "C0mpl3x$tr1ng!" /t REG_DWORD /d 4 /f + +# SNMP 서비스 재시작 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-31: SNMP Access Control 설정 (중) +**점검:** +```powershell +# SNMP 허용 호스트 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" 2>$null +# 값이 없으면 모든 호스트 허용 (취약) +``` +**조치:** +```powershell +# 특정 호스트로부터만 SNMP 패킷 수신 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d "192.168.1.100" /f + +# GUI: 서비스 > SNMP Service > 속성 > 보안 탭 +# "다음 호스트로부터 SNMP 패킷 받아들이기" 선택 후 호스트 등록 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-32: DNS 서비스 구동 점검 (중) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 동적 업데이트 설정 확인 +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, DynamicUpdate +``` +**조치:** +```powershell +# DNS 동적 업데이트 비활성화 +Set-DnsServerPrimaryZone -Name "<영역이름>" -DynamicUpdate None -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-33: HTTP/FTP/SMTP 배너 차단 (하) +**점검:** +```powershell +# IIS Server 헤더 확인 (HTTP 응답) +# (Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing).Headers["Server"] + +# IIS X-Powered-By 헤더 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -ErrorAction SilentlyContinue + +# SMTP 배너 확인 +# telnet localhost 25 으로 접속 시 배너 확인 +``` +**조치:** +```powershell +# [HTTP] IIS Server 헤더 제거 - URL Rewrite 모듈 필요 +# 1) URL Rewrite 설치: https://www.iis.net/downloads/microsoft/url-rewrite +# 2) 아웃바운드 규칙 추가: 서버 변수 RESPONSE_SERVER 비우기 + +# [HTTP] X-Powered-By 헤더 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -AtElement @{name="X-Powered-By"} -ErrorAction SilentlyContinue + +# [FTP] 기본 배너 숨기기 +# IIS 관리자 > FTP 사이트 > FTP 메시지 > "기본 배너 숨기기" 체크 + +# [SMTP] 배너 변경 +# cd C:\inetpub\AdminScripts +# cscript adsutil.vbs set smtpsvc/1/connectresponse "Authorized Access Only" +# net stop smtpsvc && net start smtpsvc +``` + +--- + +### W-34: Telnet 서비스 비활성화 (중) +**점검:** +```powershell +# Telnet 서비스 상태 확인 +Get-Service -Name "TlntSvr" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# Telnet 인증 방식 확인 (Windows 2003~2012) +# tlntadmn config 명령으로 확인 +``` +**조치:** +```powershell +# Telnet 서비스 중지 및 비활성화 +Stop-Service -Name "TlntSvr" -Force -ErrorAction SilentlyContinue +Set-Service -Name "TlntSvr" -StartupType Disabled -ErrorAction SilentlyContinue + +# 부득이 사용 시 NTLM 인증만 사용 +# tlntadmn config sec = +NTLM -passwd + +# 참고: Windows 2016 이상에서는 Telnet 서버 제공하지 않음 +``` + +--- + +### W-35: 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 (중) +**점검:** +```powershell +# 시스템 DSN 확인 +Get-OdbcDsn -DsnType System -ErrorAction SilentlyContinue | Select-Object Name, DriverName, Platform + +# 레지스트리에서 ODBC 데이터 소스 확인 +reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" 2>$null +``` +**조치:** +```powershell +# 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType System -ErrorAction SilentlyContinue + +# GUI: 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN +# 불필요한 데이터 소스 선택 후 제거 +``` + +--- + +### W-36: 원격터미널 접속 타임아웃 설정 (중) +**점검:** +```powershell +# RDP 세션 유휴 타임아웃 레지스트리 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime 2>$null +# 밀리초 단위: 1800000 = 30분 + +# 현재 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MaxIdleTime 2>$null +``` +**조치:** +```powershell +# 유휴 세션 타임아웃 30분(1800000ms) 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime /t REG_DWORD /d 1800000 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 세션 시간 제한 +# "활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정" = 사용 (30분) +``` + +--- + +### W-37: 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 (중) +**점검:** +```powershell +# 예약된 작업 목록 확인 +Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} | + Select-Object TaskName, TaskPath, State | + Format-Table -AutoSize + +# 예약된 작업 상세 정보 (실행 명령 포함) +Get-ScheduledTask | ForEach-Object { + $task = $_ + $actions = $task.Actions + foreach ($action in $actions) { + [PSCustomObject]@{ + TaskName = $task.TaskName + Execute = $action.Execute + Arguments = $action.Arguments + State = $task.State + } + } +} | Format-Table -AutoSize + +# schtasks 명령 +schtasks /query /fo LIST /v +``` +**조치:** +```powershell +# 의심스러운 예약 작업 비활성화 +Disable-ScheduledTask -TaskName "<작업이름>" + +# 의심스러운 예약 작업 삭제 +Unregister-ScheduledTask -TaskName "<작업이름>" -Confirm:$false + +# schtasks 명령 +schtasks /delete /tn "<작업이름>" /f +``` + +--- + +## 3. 패치 관리 + +### W-38: 주기적 보안 패치 및 벤더 권고사항 적용 (상) +**점검:** +```powershell +# 설치된 핫픽스 목록 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, InstalledOn, Description -First 20 + +# 시스템 정보에서 KB 목록 +systeminfo | findstr "KB" + +# 마지막 패치 설치 날짜 확인 +(Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).InstalledOn + +# Windows Update 이력 확인 +$session = New-Object -ComObject Microsoft.Update.Session +$searcher = $session.CreateUpdateSearcher() +$history = $searcher.QueryHistory(0, 20) +$history | Select-Object Title, Date, ResultCode | Format-Table +``` +**조치:** +```powershell +# Windows Update 실행 +# 수동: https://msrc.microsoft.com/update-guide +# 자동: 제어판 > Windows Update + +# PowerShell 모듈 사용 +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll +``` + +--- + +### W-39: 백신 프로그램 업데이트 (상) +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntispywareEnabled, AntivirusEnabled, + AntivirusSignatureLastUpdated, AntispywareSignatureLastUpdated + +# 백신 엔진 버전 확인 +Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, AntivirusSignatureVersion + +# 3rd party 백신 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState, pathToSignedProductExe +``` +**조치:** +```powershell +# Windows Defender 정의 업데이트 +Update-MpSignature + +# Windows Defender 수동 빠른 검사 +Start-MpScan -ScanType QuickScan + +# 3rd party 백신의 경우 해당 제조사 업데이트 절차 참조 +``` + +--- + +## 4. 로그 관리 + +### W-40: 정책에 따른 시스템 로깅 설정 (중) +**점검:** +```powershell +# 감사 정책 확인 +auditpol /get /category:* + +# 주요 감사 정책 확인 +auditpol /get /subcategory:"로그온","로그오프","계정 관리","정책 변경","권한 사용","디렉터리 서비스 액세스" +``` +**조치:** +```powershell +# 감사 정책 설정 (KISA 권고 기준) +auditpol /set /subcategory:"계정 관리" /failure:enable +auditpol /set /subcategory:"계정 로그온 이벤트" /success:enable /failure:enable +auditpol /set /subcategory:"권한 사용" /success:enable /failure:enable +auditpol /set /subcategory:"디렉터리 서비스 액세스" /failure:enable +auditpol /set /subcategory:"로그온" /success:enable /failure:enable +auditpol /set /subcategory:"로그오프" /success:enable /failure:enable +auditpol /set /subcategory:"정책 변경" /success:enable /failure:enable + +# GPO: 로컬 보안 정책 > 로컬 정책 > 감사 정책 +``` + +--- + +### W-41: NTP 및 시각 동기화 설정 (중) +**점검:** +```powershell +# NTP 동기화 상태 확인 +w32tm /query /status +w32tm /query /configuration + +# NTP 서버 설정 확인 +w32tm /dumpreg /subkey:parameters + +# 시간 서비스 상태 +Get-Service -Name "W32Time" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Windows Time 서비스 활성화 +Set-Service -Name "W32Time" -StartupType Automatic +Start-Service -Name "W32Time" + +# 내부 NTP 서버와 동기화 설정 +w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.server.ip" /update +w32tm /resync + +# 동기화 시간차 확인 +w32tm /stripchart /dataonly /computer:"ntp.server.ip" +``` + +--- + +### W-42: 이벤트 로그 관리 설정 (하) +**점검:** +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes, OverflowAction, MinimumRetentionDays | Format-Table + +# 레지스트리에서 직접 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System" /v MaxSize +``` +**조치:** +```powershell +# 이벤트 로그 최대 크기 10240KB(10MB) 이상 설정 +Limit-EventLog -LogName Application -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName Security -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName System -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 + +# 레지스트리 직접 설정 (바이트 단위: 10485760 = 10MB) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize /t REG_DWORD /d 10485760 /f +``` + +--- + +### W-43: 이벤트 로그 파일 접근 통제 설정 (중) +**점검:** +```powershell +# 시스템 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\config" +# Everyone 권한이 있으면 취약 + +# IIS 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\LogFiles" 2>$null +``` +**조치:** +```powershell +# 로그 디렉터리에서 Everyone 권한 제거 +icacls "C:\Windows\System32\config" /remove Everyone /T +icacls "C:\Windows\System32\LogFiles" /remove Everyone /T + +# Administrators, SYSTEM만 접근 가능하도록 설정 +``` + +--- + +## 5. 보안 관리 + +### W-44: 원격으로 액세스할 수 있는 레지스트리 경로 (상) +**점검:** +```powershell +# Remote Registry 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Remote Registry 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-45: 백신 프로그램 설치 (상) +**점검:** +```powershell +# Windows Defender 설치 및 활성화 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusEnabled, RealTimeProtectionEnabled + +# 설치된 백신 프로그램 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState + +# 프로그램 목록에서 백신 확인 +Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "antivirus|백신|V3|알약|Kaspersky|Norton|McAfee|Symantec" } | + Select-Object Name, Version +``` +**조치:** +```powershell +# Windows Defender 활성화 (비활성화된 경우) +Set-MpPreference -DisableRealtimeMonitoring $false + +# 백신이 설치되지 않은 경우 조직 정책에 따라 백신 프로그램 설치 +# Windows Defender는 Windows Server 2016 이상 기본 탑재 +Install-WindowsFeature -Name Windows-Defender -ErrorAction SilentlyContinue +``` + +--- + +### W-46: SAM 파일 접근 통제 설정 (상) +**점검:** +```powershell +# SAM 파일 접근 권한 확인 +icacls "C:\Windows\System32\config\SAM" +# Administrator, SYSTEM 외 다른 그룹/사용자 권한이 있으면 취약 +``` +**조치:** +```powershell +# SAM 파일 권한 설정 (Administrator, SYSTEM만 접근) +icacls "C:\Windows\System32\config\SAM" /inheritance:r +icacls "C:\Windows\System32\config\SAM" /grant "BUILTIN\Administrators:(F)" +icacls "C:\Windows\System32\config\SAM" /grant "NT AUTHORITY\SYSTEM:(F)" +``` + +--- + +### W-47: 화면보호기 설정 (하) +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +# ScreenSaveActive=1, ScreenSaveTimeOut<=600(10분), ScreenSaverIsSecure=1 이면 양호 +``` +**조치:** +```powershell +# 화면보호기 활성화 (대기 시간 10분, 암호 사용) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "C:\Windows\System32\scrnsave.scr" /f + +# GPO 일괄 적용: +# 사용자 구성 > 관리 템플릿 > 제어판 > 개인 설정 +# "화면 보호기 사용" = 사용 +# "화면 보호기 시간 제한" = 600초 +# "화면 보호기 암호로 보호" = 사용 +``` + +--- + +### W-48: 로그온하지 않고 시스템 종료 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon +# 값이 0이면 양호 +``` +**조치:** +```powershell +# 로그온 없이 시스템 종료 차단 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 종료: 로그온하지 않고 시스템 종료 허용" = 사용 안 함 +``` + +--- + +### W-49: 원격 시스템에서 강제로 시스템 종료 (상) +**점검:** +```powershell +# 원격 시스템 종료 권한 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeRemoteShutdownPrivilege" C:\secpol_tmp.cfg +# Administrators만 있으면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "원격 시스템에서 강제로 시스템 종료" 정책에 Administrators 외 다른 계정/그룹 제거 +``` + +--- + +### W-50: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail +# 값이 0이면 양호 (사용 안 함), 1이면 취약 + +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "CrashOnAuditFail" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 (사용 안 함) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료" = 사용 안 함 +``` + +--- + +### W-51: SAM 계정과 공유의 익명 열거 허용 안 함 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM +# RestrictAnonymous=1, RestrictAnonymousSAM=1 이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함" = 사용 +# "네트워크 액세스: SAM 계정의 익명 열거 허용 안 함" = 사용 + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-52: Autologon 기능 제어 (상) +**점검:** +```powershell +# AutoAdminLogon 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +# 값이 0이거나 존재하지 않으면 양호 + +# DefaultPassword 존재 여부 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword 2>$null +``` +**조치:** +```powershell +# Autologon 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f + +# DefaultPassword 제거 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f 2>$null +``` + +--- + +### W-53: 이동식 미디어 포맷 및 꺼내기 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD +# 값이 0(Administrators만)이면 양호 +``` +**조치:** +```powershell +# Administrators에게만 이동식 미디어 포맷/꺼내기 허용 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 이동식 미디어 포맷 및 꺼내기 허용" = Administrators +``` + +--- + +### W-54: DoS 공격 방어 레지스트리 설정 (중) +**점검:** +```powershell +# TCP/IP 스택 강화 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand 2>$null +# SynAttackProtect>=1, EnableDeadGWDetect=0, KeepAliveTime=300000, NoNameReleaseOnDemand=1 이면 양호 +``` +**조치:** +```powershell +# DoS 방어 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand /t REG_DWORD /d 1 /f + +# 주의: 잘못된 값 설정 시 OS 재설치 필요할 수 있음 +``` + +--- + +### W-55: 사용자가 프린터 드라이버를 설치할 수 없게 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers 2>$null +# 값이 1이면 양호 (사용자 설치 차단) +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 사용자가 프린터 드라이버를 설치할 수 없게 함" = 사용 +``` + +--- + +### W-56: SMB 세션 중단 관리 설정 (중) +**점검:** +```powershell +# SMB 세션 유휴 시간 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect 2>$null +# 값이 15 이하이면 양호 + +# 로그온 시간 만료 시 연결 끊기 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff 2>$null +# 값이 1이면 양호 +``` +**조치:** +```powershell +# SMB 유휴 세션 타임아웃 15분 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect /t REG_DWORD /d 15 /f + +# 로그온 시간 만료 시 연결 끊기 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기" = 사용 +# "Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간" = 15분 +``` + +--- + +### W-57: 로그온 시 경고 메시지 설정 (하) +**점검:** +```powershell +# 로그온 경고 메시지 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText +# 둘 다 값이 설정되어 있으면 양호 +``` +**조치:** +```powershell +# 로그온 경고 메시지 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption /t REG_SZ /d "경고" /f +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText /t REG_SZ /d "이 시스템은 인가된 사용자만 접근할 수 있습니다. 비인가 접근 시도 시 법적 처벌을 받을 수 있습니다." /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목" = 경고 제목 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트" = 경고 내용 +``` + +--- + +### W-58: 사용자별 홈 디렉터리 권한 설정 (중) +**점검:** +```powershell +# 사용자 홈 디렉터리 권한 확인 +Get-ChildItem "C:\Users" -Directory | ForEach-Object { + $acl = Get-Acl $_.FullName + $everyoneAccess = $acl.Access | Where-Object { $_.IdentityReference -like "*Everyone*" } + if ($everyoneAccess) { + [PSCustomObject]@{ + Directory = $_.Name + Everyone = ($everyoneAccess | ForEach-Object { $_.FileSystemRights }) -join ", " + } + } +} +``` +**조치:** +```powershell +# 홈 디렉터리에서 Everyone 권한 제거 (All Users, Default User 제외) +Get-ChildItem "C:\Users" -Directory | Where-Object { + $_.Name -notin @("All Users","Default User","Default","Public") +} | ForEach-Object { + icacls $_.FullName /remove Everyone /T +} +``` + +--- + +### W-59: LAN Manager 인증 수준 (중) +**점검:** +```powershell +# LAN Manager 인증 수준 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel +# 값이 5이면 양호 (NTLMv2 응답만 보냄, LM 및 NTLM 거부) +# 최소 3 이상 권장 +``` +**조치:** +```powershell +# NTLMv2 응답만 보내도록 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 보안: LAN Manager 인증 수준" = "NTLMv2 응답만 보내기/LM 및 NTLM 거부" +``` + +--- + +### W-60: 보안 채널 데이터 디지털 암호화 또는 서명 (중) +**점검:** +```powershell +# 보안 채널 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel 2>$null +# 세 값 모두 1이면 양호 +``` +**조치:** +```powershell +# 보안 채널 데이터 암호화/서명 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상)" = 사용 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우)" = 사용 +# "도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우)" = 사용 +``` + +--- + +### W-61: 파일 및 디렉토리 보호 (중) +**점검:** +```powershell +# 파일 시스템 유형 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size | Format-Table + +# CMD 확인 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT 파일 시스템을 NTFS로 변환 +# convert <드라이브명>: /fs:ntfs +# 예: convert F: /fs:ntfs + +# 주의: 변환은 비가역적이며 초기 설치 시 NTFS 선택 권장 +# 기존 FAT에서 변환 시 Default ACL이 적용되지 않을 수 있음 +``` + +--- + +### W-62: 시작 프로그램 목록 분석 (중) +**점검:** +```powershell +# 시작 프로그램 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 2>$null + +# 시작 폴더 확인 +Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue +Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue + +# WMI 시작 프로그램 목록 +Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table -AutoSize +``` +**조치:** +```powershell +# 불필요한 시작 프로그램 제거 (레지스트리) +reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f +reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f + +# msconfig 실행 (Windows 2008 이하) +# 시작 프로그램 탭에서 불필요한 항목 체크 해제 +``` + +--- + +### W-63: 도메인 컨트롤러-사용자의 시간 동기화 (중) +**점검:** +```powershell +# Kerberos 최대 허용 오차 확인 (도메인 컨트롤러) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MaxClockSkew" C:\secpol_tmp.cfg +# 값이 5 이하이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force + +# 현재 시간 동기화 상태 +w32tm /query /status +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +# "컴퓨터 시계 동기화 최대 허용 오차" = 5분 + +# 시간 동기화 강제 수행 +w32tm /resync /force +``` + +--- + +### W-64: 윈도우 방화벽 설정 (중) +**점검:** +```powershell +# Windows 방화벽 프로필 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled | Format-Table + +# 방화벽 규칙 요약 +Get-NetFirewallProfile | ForEach-Object { + $profile = $_.Name + $enabled = $_.Enabled + [PSCustomObject]@{ + Profile = $profile + Enabled = $enabled + InboundDefault = $_.DefaultInboundAction + OutboundDefault = $_.DefaultOutboundAction + } +} | Format-Table + +# netsh 명령 +netsh advfirewall show allprofiles +``` +**조치:** +```powershell +# Windows 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True + +# netsh 명령 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정 또는 해제 +# 모든 프로필에 대해 "사용" 설정 +``` diff --git a/skills-ko/kesekit-start-ko/scripts/robot-security/cert-and-protocol.md b/skills-ko/kesekit-start-ko/scripts/robot-security/cert-and-protocol.md new file mode 100644 index 0000000..259a9d3 --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/robot-security/cert-and-protocol.md @@ -0,0 +1,96 @@ +# Certificate & Protocol Security + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: IA-04, ER-01 + +--- + +## 1. OpenSSL Certificate Inspection (IA-04) + +```bash +# 인증서 내용 확인 명령어 +openssl x509 -in server.crt -text -noout +``` + +--- + +## 2. Key File Permission Hardening (IA-04) + +```bash +# 개인키 접근 권한 설정 +chown robot-service:robot-service /etc/robot/keys/device.key +chmod 600 /etc/robot/keys/device.key # 파일 소유자만 접근 가능 +``` + +--- + +## 3. OPC UA Security Configuration (IA-04) + +### 3.1 Certificate Validation + +```ini +# server.conf (OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +### 3.2 Certificate Revocation Check + +```ini +# server.conf (OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +--- + +## 4. TLS Client Certificate Verification - Python (IA-04) + +```python +import ssl, socket + +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 + +with socket.create_connection(("server.com", 443)) as sock: + with context.wrap_socket(sock, server_hostname="server.com") as ssock: + print("TLS Established:", ssock.version()) +``` + +--- + +## 5. Crypto Algorithm Requirements (IA-04) + +| Category | Recommended | Insufficient | +|---|---|---| +| Key algorithm | RSA >= 2048bit or ECC P-256+ | RSA 1024bit or below, ECC P-192 or below | +| Hash algorithm | SHA-256+ (SHA-2/SHA-3 family) | SHA-1, MD5 | +| TLS protocol | TLS 1.2+ (recommended: TLS 1.3) | TLS 1.0 / 1.1 | + +--- + +## 6. Audit Log API Access (ER-01) + +```http +GET /api/audit/logs +Authorization: Bearer + +HTTP/1.1 200 OK +{ + "entries": [...], + "integrity": "sha256:f45a..." +} +``` + +--- + +## 7. Platform-specific Certificate ACL Examples (IA-04) + +| Platform | Certificate Store | +|---|---| +| General server / cloud | DB table | +| OPC UA | /pki/trusted, /pki/rejected folders | +| MQTT mTLS | CA DB, allowed client certificate list | +| Robot PKI | KV DB, HSM integration | diff --git a/skills-ko/kesekit-start-ko/scripts/robot-security/firewall-hardening.md b/skills-ko/kesekit-start-ko/scripts/robot-security/firewall-hardening.md new file mode 100644 index 0000000..8d8820f --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/robot-security/firewall-hardening.md @@ -0,0 +1,106 @@ +# Firewall & Network Hardening + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: DFR-02, RA-01, RA-08 + +--- + +## 1. Host Firewall (iptables) + +### 1.1 MQTT / HTTPS Only (DFR-02 Protocol Filtering) + +```bash +# MQTT 및 HTTPS 외의 포트 차단 +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.2 SSH + HTTPS Only (RA-01 DoS Prevention) + +```bash +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.3 Unnecessary Port Blocking (RA-08 Service Restriction) + +```bash +# 외부 포트 스캔 (TCP 포트 확인) +nmap -sS 192.168.0.10 + +# 불필요한 포트(예: FTP 21, Telnet 23, TFTP 69) 차단 +sudo iptables -A INPUT -p tcp --dport 21 -j DROP +sudo iptables -A INPUT -p tcp --dport 23 -j DROP +sudo iptables -A INPUT -p udp --dport 69 -j DROP +``` + +--- + +## 2. Service Hardening (RA-08) + +```bash +# 현재 활성화된 포트 및 프로세스 확인 +sudo ss -tulnp +sudo netstat -tulnp + +# 서비스 상태 확인 및 비활성화 +sudo systemctl status telnet +sudo systemctl disable telnet +sudo systemctl stop telnet +``` + +--- + +## 3. VLAN Network Segmentation (RA-01 L2) + +Control network and sensor network separation via VLAN. + +```bash +# 제어 망 (VLAN ID 10) +sudo ip link add link eth0 name eth0.10 type vlan id 10 +# 센서 망 (VLAN ID 20) +sudo ip link add link eth0 name eth0.20 type vlan id 20 + +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +``` + +--- + +## 4. sysctl Network Tuning (RA-01) + +```bash +sudo sysctl -w net.core.somaxconn=128 +sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +ulimit -n 1024 +``` + +--- + +## 5. Nginx Rate Limiting (RA-01) + +```nginx +# /etc/nginx/nginx.conf +http { + limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; + server { + listen 443 ssl; + server_name example.com; + location / { + limit_req zone=req_limit_per_ip burst=5 nodelay; + limit_conn conn_limit_per_ip 10; + } + } +} +``` + +--- + +## 6. Suricata IDS Rule (RA-01 L2 DoS Detection) + +```yaml +alert tcp any any -> $HOME_NET any (msg:"TCP SYN Flood"; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +``` diff --git a/skills-ko/kesekit-start-ko/scripts/robot-security/resource-management.md b/skills-ko/kesekit-start-ko/scripts/robot-security/resource-management.md new file mode 100644 index 0000000..fd35dce --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/robot-security/resource-management.md @@ -0,0 +1,96 @@ +# Resource Management & Monitoring + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: RA-02, RA-03 + +--- + +## 1. cgroups - Security Agent Resource Limits (RA-02) + +Restrict CPU and memory usage for security processes so they do not interfere with real-time robot control. + +```bash +# cgroup 생성 (cpu + memory) +sudo cgcreate -g cpu,memory:/robot_security + +# CPU 할당 제한 (20000us = 20% of 1 core at default 100000us period) +echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us + +# 메모리 제한 (256MB) +echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes + +# 실행 중인 보안 에이전트를 cgroup에 할당 +sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +``` + +--- + +## 2. OpenSSL Hardware Acceleration Check (RA-02) + +Offload crypto operations to hardware to reduce CPU overhead. + +```bash +openssl engine -t +# Expected output: +# (dynamic) Dynamic engine loading support +# (rdrand) Intel RDRAND engine +# (aesni) Intel AES-NI engine +``` + +--- + +## 3. logrotate Configuration (RA-02) + +Prevent audit/operational logs from exhausting disk space. + +```bash +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { + size 50M + rotate 5 + compress + missingok + notifempty +} +``` + +--- + +## 4. System Resource Monitoring (RA-03) + +Dashboard or CLI-based monitoring of CPU, memory, disk, and network utilization. The robot system should provide a user interface for operators to view resource status in real-time. + +Key resource metrics to monitor: +- CPU usage per core / per process +- Memory (RSS / swap) usage +- Disk I/O and capacity +- Network interface throughput and error rates + +--- + +## 5. ROS Publisher Rate Limiting (RA-01 L2) + +Limit sensor data publish rate to prevent communication overload. + +```cpp +ros::Publisher pub = nh.advertise("sensor_data", 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { + std_msgs::String msg; + msg.data = "sensor data"; + pub.publish(msg); + loop_rate.sleep(); +} +``` + +--- + +## 6. ROS2 QoS Security Profile (RA-01 L2) + +```yaml +QoSProfile: + reliability: RELIABLE + durability: TRANSIENT_LOCAL + history: KEEP_LAST + depth: 10 +``` diff --git a/skills-ko/kesekit-start-ko/scripts/robot-security/sbom-audit.md b/skills-ko/kesekit-start-ko/scripts/robot-security/sbom-audit.md new file mode 100644 index 0000000..1b1387f --- /dev/null +++ b/skills-ko/kesekit-start-ko/scripts/robot-security/sbom-audit.md @@ -0,0 +1,84 @@ +# SBOM & Supply Chain Audit + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: SC-05 + +--- + +## 1. SBOM Generation with Syft (SC-05) + +Generate a Software Bill of Materials from source code or container images using Anchore Syft. + +```bash +# Syft를 통한 SBOM 생성 (JSON format) +syft <소스코드 경로> -o json > sbom.json +``` + +--- + +## 2. Vulnerability Scanning with Grype (SC-05) + +Scan the generated SBOM for known vulnerabilities (CVEs). + +```bash +# Grype를 통한 취약점 식별 +grype sbom://sbom.json +``` + +--- + +## 3. Package Manager Built-in Audit Commands (SC-05) + +Use built-in security features of each package manager to analyze declared dependencies and automatically scan for known vulnerabilities. + +### Node.js (NPM) + +```bash +npm audit +``` + +### Python (pip) + +```bash +pip-audit +``` + +### Java (Maven) + +```bash +mvn dependency-check:check +``` + +### .NET (NuGet) + +```bash +dotnet list package --vulnerable +``` + +### Rust (Cargo) + +```bash +cargo audit +``` + +--- + +## 4. CI/CD Pipeline Integration (SC-05) + +Integrate vulnerability scanning into CI/CD pipelines (GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins, etc.) to automatically detect vulnerabilities before deployment. + +### Vulnerability Response Record Fields + +| Field | Description | +|---|---| +| CVE ID | 취약점 식별자 | +| 구성요소 | 영향받는 컴포넌트(이름/버전) | +| 기술적 위험 | 공개 PoC/익스플로잇 존재 여부, CVSS 점수 | +| 비즈니스 영향 | 영향을 받는 서비스/데이터/운영 영향 | +| EoS 여부 | 해당 구성요소의 지원상태 | +| 우선 순위 | P0/P1/P2 또는 High/Medium/Low | +| 대응방안 | 패치/업그레이드/가상패치/격리 등 | +| SLA | 목표 기간 | +| 담당자 및 일정 | 책임부서, 담당자, 완료예정일 | +| 검증 방법 | 재스캔, 기능/회귀 테스트 결과 링크 | +| 상태 | 계획/진행/완료/예외(승인) | diff --git a/skills-ko/start/references/ai-security/developer.md b/skills-ko/kesekit-start-ko/templates/ai-security/developer.md similarity index 100% rename from skills-ko/start/references/ai-security/developer.md rename to skills-ko/kesekit-start-ko/templates/ai-security/developer.md diff --git a/skills-ko/kesekit-start-ko/templates/ai-security/user-guide-checklist.md b/skills-ko/kesekit-start-ko/templates/ai-security/user-guide-checklist.md new file mode 100644 index 0000000..903ec01 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/ai-security/user-guide-checklist.md @@ -0,0 +1,13 @@ +# AI 이용자 보안 체크리스트 요약 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +| # | 항목 | 확인 | +|---|------|:----:| +| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | +| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | +| 3 | AI 서비스 이용약관을 확인했는가? | □ | +| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | +| 5 | AI 출력 결과를 검증하고 있는가? | □ | +| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | +| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills-ko/start/references/cii/admin.md b/skills-ko/kesekit-start-ko/templates/cii/admin.md similarity index 100% rename from skills-ko/start/references/cii/admin.md rename to skills-ko/kesekit-start-ko/templates/cii/admin.md diff --git a/skills-ko/fix/references/cii/cloud.md b/skills-ko/kesekit-start-ko/templates/cii/cloud.md similarity index 82% rename from skills-ko/fix/references/cii/cloud.md rename to skills-ko/kesekit-start-ko/templates/cii/cloud.md index ef26ef5..42834e8 100644 --- a/skills-ko/fix/references/cii/cloud.md +++ b/skills-ko/kesekit-start-ko/templates/cii/cloud.md @@ -42,23 +42,4 @@ | CA-18 | 컨테이너/서버리스 보안 설정 | 중 | | CA-19 | 클라우드 서비스 가용성 관리 | 중 | -### 주요 점검 명령어 -```bash -# AWS -aws iam list-users -aws iam get-credential-report -aws ec2 describe-security-groups -aws s3api get-bucket-encryption --bucket -aws cloudtrail describe-trails - -# Azure -az ad user list -az network nsg list -az storage account list - -# GCP -gcloud iam service-accounts list -gcloud compute firewall-rules list -``` - ## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills-ko/start/references/cii/control-system.md b/skills-ko/kesekit-start-ko/templates/cii/control-system.md similarity index 100% rename from skills-ko/start/references/cii/control-system.md rename to skills-ko/kesekit-start-ko/templates/cii/control-system.md diff --git a/skills-ko/check/references/cii/database.md b/skills-ko/kesekit-start-ko/templates/cii/database.md similarity index 82% rename from skills-ko/check/references/cii/database.md rename to skills-ko/kesekit-start-ko/templates/cii/database.md index 67e8efc..d6847e0 100644 --- a/skills-ko/check/references/cii/database.md +++ b/skills-ko/kesekit-start-ko/templates/cii/database.md @@ -17,23 +17,6 @@ | D-08 | 안전한 암호화 알고리즘 사용 | 상 | | D-09 | 로그인 실패 시 잠금정책 설정 | 중 | -### 주요 점검 명령어 -```sql --- Oracle: 계정 확인 -SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; --- Oracle: 비밀번호 변경 -ALTER USER <계정> IDENTIFIED BY <신규비밀번호>; - --- MSSQL: sa 비밀번호 변경 -ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; - --- MySQL: root 비밀번호 변경 -ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; - --- PostgreSQL: 역할 확인 -SELECT rolname, rolsuper FROM pg_roles; -``` - ## 2. 접근 관리 (7항목) | 코드 | 항목 | 중요도 | diff --git a/skills-ko/start/references/cii/mobile.md b/skills-ko/kesekit-start-ko/templates/cii/mobile.md similarity index 100% rename from skills-ko/start/references/cii/mobile.md rename to skills-ko/kesekit-start-ko/templates/cii/mobile.md diff --git a/skills-ko/start/references/cii/network.md b/skills-ko/kesekit-start-ko/templates/cii/network.md similarity index 86% rename from skills-ko/start/references/cii/network.md rename to skills-ko/kesekit-start-ko/templates/cii/network.md index 1f99ce4..e168fb3 100644 --- a/skills-ko/start/references/cii/network.md +++ b/skills-ko/kesekit-start-ko/templates/cii/network.md @@ -66,22 +66,4 @@ | N-37 | pad 차단 | 중 | | N-38 | mask-reply 차단 | 중 | -### 주요 점검 명령어 (Cisco IOS) -``` -! 계정 관리 -show running-config | include username -show running-config | include enable secret - -! 접근 관리 -show running-config | include line vty -show running-config | include access-class - -! SNMP -show running-config | include snmp-server - -! 불필요 서비스 -show running-config | include no service -show ip http server -``` - ## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills-ko/fix/references/cii/pc.md b/skills-ko/kesekit-start-ko/templates/cii/pc.md similarity index 82% rename from skills-ko/fix/references/cii/pc.md rename to skills-ko/kesekit-start-ko/templates/cii/pc.md index c3dd9fc..b5ca66b 100644 --- a/skills-ko/fix/references/cii/pc.md +++ b/skills-ko/kesekit-start-ko/templates/cii/pc.md @@ -41,22 +41,4 @@ | PC-17 | 이동식 미디어 자동실행 방지 | 상 | | PC-18 | 원격 지원 금지 정책 설정 | 중 | -### 주요 점검 명령어 -```powershell -# PC-01: 비밀번호 최대 사용기간 -net accounts | findstr "최대" - -# PC-04: 공유 폴더 -net share - -# PC-13~14: 백신 -Get-MpComputerStatus - -# PC-15: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled - -# PC-16: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -``` - ## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills-ko/start/references/cii/physical.md b/skills-ko/kesekit-start-ko/templates/cii/physical.md similarity index 100% rename from skills-ko/start/references/cii/physical.md rename to skills-ko/kesekit-start-ko/templates/cii/physical.md diff --git a/skills-ko/start/references/cii/security-equip.md b/skills-ko/kesekit-start-ko/templates/cii/security-equip.md similarity index 100% rename from skills-ko/start/references/cii/security-equip.md rename to skills-ko/kesekit-start-ko/templates/cii/security-equip.md diff --git a/skills-ko/start/references/cii/unix.md b/skills-ko/kesekit-start-ko/templates/cii/unix.md similarity index 68% rename from skills-ko/start/references/cii/unix.md rename to skills-ko/kesekit-start-ko/templates/cii/unix.md index b9688e3..969c52f 100644 --- a/skills-ko/start/references/cii/unix.md +++ b/skills-ko/kesekit-start-ko/templates/cii/unix.md @@ -21,35 +21,6 @@ | U-12 | 세션 종료 시간 설정 | 하 | | U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | -### 주요 점검 명령어 -```bash -# U-01: root 원격 접속 제한 -grep -i "PermitRootLogin" /etc/ssh/sshd_config -cat /etc/default/login | grep CONSOLE # Solaris -cat /etc/securetty # Linux - -# U-02: 비밀번호 정책 -cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" -cat /etc/security/pwquality.conf # Linux - -# U-03: 계정 잠금 -cat /etc/pam.d/system-auth | grep pam_tally -cat /etc/security/user | grep loginretries # AIX - -# U-04: shadow 파일 보호 -ls -la /etc/shadow - -# U-05: UID 0 점검 -awk -F: '$3==0 {print $1}' /etc/passwd - -# U-06: su 제한 -cat /etc/pam.d/su | grep pam_wheel -ls -la /usr/bin/su - -# U-12: 세션 타임아웃 -echo $TMOUT -``` - --- ## 2. 파일 및 디렉터리 관리 (20항목) @@ -77,38 +48,6 @@ echo $TMOUT | U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | | U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | -### 주요 점검 명령어 -```bash -# U-14: root PATH -echo $PATH | grep "::" -echo $PATH | grep ":$" - -# U-16~U-22: 주요 파일 권한 -ls -la /etc/passwd /etc/shadow /etc/hosts /etc/services -ls -la /etc/inetd.conf /etc/xinetd.conf /etc/syslog.conf /etc/rsyslog.conf - -# U-23: SUID/SGID -find / -perm -4000 -o -perm -2000 2>/dev/null - -# U-25: world writable -find / -type f -perm -002 2>/dev/null - -# U-26: /dev 점검 -find /dev -type f 2>/dev/null - -# U-27: rhosts -find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null - -# U-28: 접속 제한 -cat /etc/hosts.allow -cat /etc/hosts.deny -iptables -L - -# U-30: umask -umask -grep umask /etc/profile /etc/bashrc -``` - --- ## 3. 서비스 관리 (30항목) @@ -146,32 +85,6 @@ grep umask /etc/profile /etc/bashrc | U-62 | 로그인 시 경고 메시지 설정 | 하 | | U-63 | sudo 명령어 접근 관리 | 중 | -### 주요 점검 명령어 -```bash -# U-34~U-44: 불필요 서비스 점검 -systemctl list-unit-files --state=enabled -chkconfig --list # CentOS 6 -inetadm # Solaris - -# U-39~U-40: NFS -showmount -e -cat /etc/exports -cat /etc/dfs/dfstab # Solaris - -# U-45~U-48: 메일 서비스 -sendmail -d0.1 -bt < /dev/null 2>&1 | grep Version -postconf mail_version -cat /etc/mail/sendmail.cf | grep "O PrivacyOptions" - -# U-49~U-51: DNS -named -v -cat /etc/named.conf | grep "allow-transfer" - -# U-58~U-61: SNMP -cat /etc/snmp/snmpd.conf | grep -i community -ps -ef | grep snmp -``` - --- ## 4. 패치 관리 (1항목) @@ -180,14 +93,6 @@ ps -ef | grep snmp |------|------|:------:| | U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -```bash -# 패치 현황 -uname -a -rpm -qa --last | head -20 # Linux -showrev -p # Solaris -instfix -i | grep ML # AIX -``` - --- ## 5. 로그 관리 (4항목) @@ -198,20 +103,6 @@ instfix -i | grep ML # AIX | U-66 | 정책에 따른 시스템 로깅 설정 | 중 | | U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | -```bash -# U-65: NTP -ntpq -p -cat /etc/ntp.conf -chronyc sources # CentOS 8+ - -# U-66: 로깅 설정 -cat /etc/rsyslog.conf -cat /etc/syslog.conf - -# U-67: 로그 권한 -ls -la /var/log/ -``` - --- ## 판단 기준 diff --git a/skills-ko/start/references/cii/virtualization.md b/skills-ko/kesekit-start-ko/templates/cii/virtualization.md similarity index 100% rename from skills-ko/start/references/cii/virtualization.md rename to skills-ko/kesekit-start-ko/templates/cii/virtualization.md diff --git a/skills-ko/fix/references/cii/web-service.md b/skills-ko/kesekit-start-ko/templates/cii/web-service.md similarity index 78% rename from skills-ko/fix/references/cii/web-service.md rename to skills-ko/kesekit-start-ko/templates/cii/web-service.md index e3f96bd..9f6298a 100644 --- a/skills-ko/fix/references/cii/web-service.md +++ b/skills-ko/kesekit-start-ko/templates/cii/web-service.md @@ -49,26 +49,4 @@ | WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | | WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | -### 주요 점검 명령어 -```bash -# WEB-04: 디렉터리 리스팅 -# Apache -grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" -# Nginx -grep -i "autoindex" /etc/nginx/nginx.conf - -# WEB-09: 프로세스 권한 -ps -ef | grep httpd | grep -v root - -# WEB-16: 헤더 정보 노출 -# Apache: grep "ServerTokens" httpd.conf → Prod 설정 -# Nginx: grep "server_tokens" nginx.conf → off 설정 - -# WEB-18: WebDAV -grep -i "LoadModule.*dav" /etc/httpd/conf/httpd.conf - -# WEB-20: SSL/TLS -grep -i "SSLProtocol\|ssl_protocols" /etc/httpd/conf.d/ssl.conf /etc/nginx/nginx.conf -``` - ## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills-ko/fix/references/cii/webapp.md b/skills-ko/kesekit-start-ko/templates/cii/webapp.md similarity index 71% rename from skills-ko/fix/references/cii/webapp.md rename to skills-ko/kesekit-start-ko/templates/cii/webapp.md index 5a1888d..ca84427 100644 --- a/skills-ko/fix/references/cii/webapp.md +++ b/skills-ko/kesekit-start-ko/templates/cii/webapp.md @@ -44,27 +44,4 @@ | IL | 불필요한 정보 노출 | 중 | | AU | 부적절한 감사 로깅 | 중 | -### 주요 점검 패턴 -``` -# SQL Injection -- 문자열 연결 쿼리: "SELECT * FROM users WHERE id = '" + input -- 안전: PreparedStatement, 매개변수화 쿼리, ORM - -# XSS -- innerHTML, document.write(input), v-html -- 안전: textContent, DOMPurify, 자동 이스케이프 - -# Command Injection -- Runtime.exec(input), subprocess(shell=True) -- 안전: 화이트리스트 검증, execFile - -# CSRF -- POST 요청에 CSRF 토큰 누락 -- 안전: 프레임워크 CSRF 미들웨어 - -# File Upload -- 확장자 미검증, 웹 루트 내 저장 -- 안전: 화이트리스트, 웹 루트 외부 저장, 랜덤 파일명 -``` - ## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills-ko/start/references/cii/windows.md b/skills-ko/kesekit-start-ko/templates/cii/windows.md similarity index 74% rename from skills-ko/start/references/cii/windows.md rename to skills-ko/kesekit-start-ko/templates/cii/windows.md index cef3781..15a5c32 100644 --- a/skills-ko/start/references/cii/windows.md +++ b/skills-ko/kesekit-start-ko/templates/cii/windows.md @@ -21,24 +21,6 @@ | W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | | W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | -### 주요 점검 명령어 -```powershell -# W-01: Administrator 계정명 -Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select Name - -# W-02: Guest 비활성화 -Get-LocalUser -Name "Guest" | Select Enabled - -# W-04: 계정 잠금 -net accounts - -# W-06: 관리자 그룹 -net localgroup Administrators - -# W-09: 패스워드 정책 -net accounts -``` - --- ## 2. 서비스 관리 (23항목) @@ -69,23 +51,6 @@ net accounts | W-36 | 원격터미널 접속 타임아웃 설정 | 중 | | W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | -### 주요 점검 명령어 -```powershell -# W-17: 기본 공유 -net share -Get-SmbShare - -# W-18: 서비스 목록 -Get-Service | Where-Object {$_.Status -eq "Running"} - -# W-19: IIS -Get-Service W3SVC - -# W-29~31: SNMP -Get-Service SNMP -reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" -``` - --- ## 3. 패치 관리 (2항목) @@ -95,15 +60,6 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommuniti | W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | | W-39 | 백신 프로그램 업데이트 | 상 | -```powershell -# W-38: 패치 현황 -Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 10 -systeminfo | findstr "KB" - -# W-39: 백신 -Get-MpComputerStatus # Windows Defender -``` - --- ## 4. 로그 관리 (4항목) @@ -115,17 +71,6 @@ Get-MpComputerStatus # Windows Defender | W-42 | 이벤트 로그 관리 설정 | 하 | | W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | -```powershell -# W-40: 감사 정책 -auditpol /get /category:* - -# W-41: NTP -w32tm /query /status - -# W-42: 이벤트 로그 설정 -Get-EventLog -List -``` - --- ## 5. 보안 관리 (21항목) @@ -154,28 +99,6 @@ Get-EventLog -List | W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | | W-64 | 윈도우 방화벽 설정 | 중 | -### 주요 점검 명령어 -```powershell -# W-44: 원격 레지스트리 -Get-Service RemoteRegistry | Select Status - -# W-46: SAM 파일 -icacls C:\Windows\System32\config\SAM - -# W-47: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure - -# W-52: Autologon -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon - -# W-59: LAN Manager -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel - -# W-64: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled -``` - --- ## 통계 diff --git a/skills-ko/start/references/robot-security/cyber-resilience.md b/skills-ko/kesekit-start-ko/templates/robot-security/cyber-resilience.md similarity index 100% rename from skills-ko/start/references/robot-security/cyber-resilience.md rename to skills-ko/kesekit-start-ko/templates/robot-security/cyber-resilience.md diff --git a/skills-ko/start/references/robot-security/iec62443.md b/skills-ko/kesekit-start-ko/templates/robot-security/iec62443.md similarity index 100% rename from skills-ko/start/references/robot-security/iec62443.md rename to skills-ko/kesekit-start-ko/templates/robot-security/iec62443.md diff --git a/skills-ko/start/references/robot-security/overview.md b/skills-ko/kesekit-start-ko/templates/robot-security/overview.md similarity index 100% rename from skills-ko/start/references/robot-security/overview.md rename to skills-ko/kesekit-start-ko/templates/robot-security/overview.md diff --git a/skills-ko/start/references/robot-security/ssdf.md b/skills-ko/kesekit-start-ko/templates/robot-security/ssdf.md similarity index 100% rename from skills-ko/start/references/robot-security/ssdf.md rename to skills-ko/kesekit-start-ko/templates/robot-security/ssdf.md diff --git a/skills-ko/start/references/robot-security/supply-chain.md b/skills-ko/kesekit-start-ko/templates/robot-security/supply-chain.md similarity index 100% rename from skills-ko/start/references/robot-security/supply-chain.md rename to skills-ko/kesekit-start-ko/templates/robot-security/supply-chain.md diff --git a/skills-ko/start/references/robot-security/wireless.md b/skills-ko/kesekit-start-ko/templates/robot-security/wireless.md similarity index 100% rename from skills-ko/start/references/robot-security/wireless.md rename to skills-ko/kesekit-start-ko/templates/robot-security/wireless.md diff --git a/skills-ko/kesekit-start-ko/templates/secure-coding/javascript.md b/skills-ko/kesekit-start-ko/templates/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/skills-ko/kesekit-start-ko/templates/secure-coding/python.md b/skills-ko/kesekit-start-ko/templates/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/skills-ko/kesekit-start-ko/templates/space-security/access-control.md b/skills-ko/kesekit-start-ko/templates/space-security/access-control.md new file mode 100644 index 0000000..7232d6a --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/space-security/access-control.md @@ -0,0 +1,49 @@ +# Access Control & Authentication Checklist + +> Domains: AC (Access Control, 12 items) + IA (Identification & Authentication, 2 items) + +## AC — Access Control (12 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| AC-01 | Access Control Policy | Restrict access to authorized users/processes/devices only | Access control policy established, authorized entities identified, per-system access rules defined | +| AC-02 | Least Privilege | Grant minimum necessary permissions | Least privilege procedures, management approval, periodic review | +| AC-03 | Privileged Access Use | Restrict and audit privileged account usage | Privileged account types defined/limited, audit logs stored/reviewed | +| AC-04 | Information Flow Control | Control information flow within and between systems | Flow control policy, source/destination identification, change approval | +| AC-05 | Separation of Duties | Prevent authority abuse through role separation | Duty separation policy, critical duties separated, compensating controls | +| AC-06 | Failed Login Attempts | Protect accounts from brute-force attacks | Max attempt limits, auto-lockout policy, alert/notification on failures | +| AC-07 | Session Lock & Termination | Prevent unauthorized access during idle sessions | Auto-lock on inactivity, re-authentication required, session termination conditions | +| AC-08 | Remote Access Control | Prevent unauthorized remote access | Remote access policy, device security check/MFA/encryption, monitoring/logging | +| AC-09 | Wireless Access | Prevent unauthorized wireless connections | Wireless policy, authentication/encryption, unauthorized AP prevention | +| AC-10 | Mobile Device Control | Control mobile device connections | Mobile device policy, data encryption, loss/theft protection | +| AC-11 | External Connection Control | Protect system boundaries from external systems | External systems identified, approved methods only, continuous monitoring | +| AC-12 | Public Information Control | Prevent sensitive information disclosure | Pre-publication review/approval, designated reviewers, periodic content review | + +### AC Protection Measures Summary + +| Category | Measures | +|----------|----------| +| Account Management | 1-person-1-account, default account deletion, immediate revocation on termination, annual full review | +| Authentication | MFA for privileged access, SSH/SFTP/VPN only, 8+ char passwords with 2+ character types | +| Network | ACL-based deny-all, IP/port whitelisting, WPA3/WPA2-Enterprise, WIPS deployment | +| Session | 10-min inactivity lock, screensaver with password, session timeout enforcement | +| Remote Access | 3-step procedure (request/approve/monitor), VPN+MFA, high-risk assets remote-access-denied by default | +| Monitoring | Failed login alerts to SOC, audit log analysis, access log review | + +## IA — Identification & Authentication (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IA-01 | Identification & Authentication | Prevent unauthorized access and credential theft | Unique identifiers for users/processes/devices, password complexity (upper+lower+special+number, 8+ chars), cryptographic protection, reuse prevention | +| IA-02 | Multi-Factor Authentication | Strengthen privileged account authentication, prevent replay attacks | MFA for privileged network access, replay attack prevention (challenge-response/timestamp) | + +### IA Protection Measures + +| Measure | Detail | +|---------|--------| +| Password Policy | Min 8 chars, 3+ character types, 90-day rotation, history check (last 5) | +| MFA Methods | OTP, certificate, biometric — at least 2 factors required | +| Replay Prevention | Challenge-response protocol, timestamp-based token validation | +| Credential Storage | Hashed (SHA-256+), no plaintext storage, encrypted transmission | + +## Total: 14 Items (AC: 12 + IA: 2) diff --git a/skills-ko/kesekit-start-ko/templates/space-security/governance.md b/skills-ko/kesekit-start-ko/templates/space-security/governance.md new file mode 100644 index 0000000..3ff7049 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/space-security/governance.md @@ -0,0 +1,90 @@ +# Governance, Personnel, Physical & Risk Checklist + +> Domains: PS (2) + PE (3) + RA (2) + SG (4) + CP (2) = 13 items + +## PS — Personnel Security (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PS-01 | Personnel Security | Control insider threats, prevent unauthorized personnel access | Background check on hiring, access review/revocation on role change/termination, disciplinary procedures | +| PS-02 | Security Awareness Training | Prevent security incidents, strengthen role-based security competency | Awareness activities, professional training plans, annual execution including contractors | + +### PS Protection Measures + +| Measure | Detail | +|---------|--------| +| Background Check | Resume/education/identity verification before hiring | +| Termination | Immediate access revocation, asset return, NDA enforcement | +| Training | Annual minimum, phishing simulation, role-specific curriculum, contractor inclusion | + +## PE — Physical & Environmental Security (3 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PE-01 | Physical Access Control | Block unauthorized physical access, ensure asset integrity | Entry control/monitoring, visitor escort, access log retention, control device management | +| PE-02 | Alternate Work Site Security | Maintain confidentiality in alternate work environments | Security control standards, work device security, secure remote access | +| PE-03 | Protective Equipment Operation | Ensure physical safety against environmental threats | Equipment inspection, environmental controls (temperature/humidity/fire/water/power) | + +### PE Protection Measures + +| Category | Measures | +|----------|----------| +| Access Zones | Controlled/restricted/reception areas designated, card reader/biometric, CCTV | +| Visitor Policy | Escort required, visitor log, temporary badge | +| Alternate Sites | Home/travel/remote office classification, organization-issued device, VPN+MFA | +| Environmental | UPS/emergency generator/dual power, 10-32C server room, fire detection/suppression, periodic inspection | + +## RA — Risk Assessment & Security Evaluation (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| RA-01 | Risk Assessment | Identify, assess, and manage organizational risks | Risk management framework, periodic assessment (annual+) | +| RA-02 | Security Control Monitoring & Effectiveness | Ensure continuous security control effectiveness | Effectiveness evaluation framework, periodic review/update | + +### RA Protection Measures + +| Measure | Detail | +|---------|--------| +| Assessment Method | Baseline/detailed/combined approach, management/technical/physical/legal domains | +| Frequency | Annual minimum, ad-hoc on major changes | +| Metrics | KPI/security performance indicators: violation rate, infection rate, scanning completion rate | +| Responsibility | Designated monitoring officer, management reporting | + +## SG — Security Governance (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SG-01 | Security Policy Establishment | Ensure policy effectiveness and currency | Top-level policy creation/approval/dissemination, periodic review/update, improvement plans | +| SG-02 | Security Roles & Responsibilities | Clarify security accountability | CISO designation, role/responsibility assignment/review | +| SG-03 | Asset Management | Maintain asset integrity and security posture | Asset identification/inventory/updates, classification/owner assignment | +| SG-04 | Legal Requirements Compliance | Ensure regulatory compliance | Legal requirements identification/integration, independent compliance review | + +### SG Key Regulations + +| Regulation | Relevance | +|-----------|-----------| +| Personal Information Protection Act | Data collected by satellite services | +| ICT Infrastructure Protection Act | CII designation for space systems | +| Radio Waves Act | Satellite frequency management | +| Space Development Promotion Act | Space industry regulations | +| Cloud Computing Act | GSaaS cloud infrastructure | +| NIS2 (EU) | Space as essential service sector | +| CMMC (US) | Defense supply chain requirements | + +## CP — Contingency Planning (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| CP-01 | Contingency Plan | Ensure space system operational continuity | Disaster type identification, impact analysis, critical service identification, recovery procedures | +| CP-02 | Backup & Redundancy Management | Ensure critical information/system availability | Periodic backup, safe storage, regular testing, system redundancy | + +### CP Protection Measures + +| Measure | Detail | +|---------|--------| +| RTO/RPO | Define for each critical service (satellite control, MOC, PCC) | +| Backup Plan | Target/frequency/retention/method defined, backup confidentiality/integrity/availability verified | +| Redundancy | Network/system dual paths, failover testing | +| BCP | Business continuity management system, emergency contact chain, recovery organization | + +## Total: 13 Items (PS: 2 + PE: 3 + RA: 2 + SG: 4 + CP: 2) diff --git a/skills-ko/kesekit-start-ko/templates/space-security/operations.md b/skills-ko/kesekit-start-ko/templates/space-security/operations.md new file mode 100644 index 0000000..d1a2d0d --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/space-security/operations.md @@ -0,0 +1,47 @@ +# Operations & Incident Response Checklist + +> Domains: SO (System/Service Operations Management, 9 items) + IR (Incident Response, 2 items) + +## SO — System/Service Operations Management (9 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SO-01 | Maintenance Control | Control maintenance personnel, tools, and remote access | Work request/approval/logging, NDA, media sanitization, VPN+MFA for remote maintenance | +| SO-02 | System Audit & Log Analysis | Detect unauthorized/abnormal activities, ensure accountability | Audit log generation/retention, tamper protection, restricted admin access, integrated analysis/reporting | +| SO-03 | Time Synchronization | Ensure audit log accuracy and reliability | NTP standard time sync, internal NTP server, periodic verification | +| SO-04 | Portable Storage Security | Protect storage media confidentiality/integrity | Classification marking, encrypted transfer, unauthorized media control, secure disposal | +| SO-05 | Configuration Management | Establish configuration baselines, maintain integrity | HW/SW/FW baseline identification, security configuration documentation, periodic monitoring | +| SO-06 | Security Requirements Definition | Define security requirements from planning phase | Authentication/access control/encryption/logging requirements in RFP, secure coding standards | +| SO-07 | Change Management | Ensure integrity during system/application changes | Change review/approval/recording, pre-change security impact analysis, access restrictions | +| SO-08 | Development Testing & Evaluation | Verify security requirement implementation | Acceptance testing, source code verification, vulnerability scanning in production-equivalent environment | +| SO-09 | Function Minimization & SW Control | Remove unnecessary features, control unauthorized software | Essential functions only, blacklist/whitelist policies, disable DHCP/Print Spooler etc., block P2P/webhard | + +### SO Protection Measures Summary + +| Category | Key Actions | +|----------|-------------| +| Maintenance | Approved personnel only, clean PC with AV scan, media control, session recording | +| Logging | All systems generate audit logs, tamper-proof storage, min 1-year retention, weekly review | +| Media Control | USB port lock, media control solution, encrypted transport, overwrite-based disposal | +| Configuration | Baseline registry/account/network settings, monthly drift detection, rollback capability | +| Secure Development | Security requirements in RFP, secure coding per language (Java/PHP/ASP/C), code review | +| Change Control | Formal approval process, security impact analysis, revision history, pre/post testing | + +## IR — Incident Response (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IR-01 | Incident Handling & Testing | Minimize damage and enable rapid recovery | Incident classification, detection/response/recovery procedures, post-incident review, periodic drills | +| IR-02 | Incident Reporting | Enable consistent response through timely reporting | Internal reporting chain, regulatory notification, stakeholder communication | + +### IR Protection Measures + +| Measure | Detail | +|---------|--------| +| Incident Types | Malware, unauthorized access, service disruption, data breach, physical compromise | +| Response Phases | Preparation > Detection > Investigation > Analysis > Containment > Eradication > Recovery | +| Reporting Timeline | Internal: immediate; KISA: within 24 hours (per ICT Infrastructure Act Art.48-3); NIS2: 24h/72h/1month staged | +| Emergency Contacts | Quarterly review, 24/7 contact chain, regulatory liaison designated | +| Testing | Annual tabletop exercise, biannual red team drill, post-exercise lessons learned | + +## Total: 11 Items (SO: 9 + IR: 2) diff --git a/skills-ko/kesekit-start-ko/templates/space-security/supply-chain.md b/skills-ko/kesekit-start-ko/templates/space-security/supply-chain.md new file mode 100644 index 0000000..750fe6f --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/space-security/supply-chain.md @@ -0,0 +1,47 @@ +# Supply Chain Management Checklist + +> Domain: SM (Supply Chain Management, 4 items) + +## SM — Supply Chain Management (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SM-01 | Supply Chain Protection | Identify and mitigate supply chain risks | Supply chain security policy, vendor selection criteria/contract security requirements, vendor registry updates | +| SM-02 | Pre-Acquisition Evaluation | Prevent vulnerable assets from entering operations | Pre-acquisition/update vulnerability scanning, acceptance testing, counterfeit inspection | +| SM-03 | All-Source Information Use | Achieve software transparency through SBOM | Require SBOM from suppliers, use SBOM for transparency/continuous management | +| SM-04 | Tampering/Counterfeiting Prevention & Detection | Detect and block supply chain tampering | Verify vendor development/distribution integrity, acceptance/operations integrity verification | + +### SM Protection Measures + +| Category | Measures | +|----------|----------| +| Contract Security | Training/incident notification/vulnerability remediation/audit rights/data disposal on termination in contracts | +| SBOM Management | SPDX/CycloneDX standard format, open-source/commercial SW identification, CVE periodic scanning | +| Integrity Verification | Hash value/digital signature verification, SBOM-based impact identification on new vulnerabilities | +| Vendor Management | Periodic vendor security audits, vendor registry maintenance, conditional acceptance criteria | + +## Supply Chain Architecture (3 Zones) + +### Satellite/Launch Vehicle Manufacturer +| Component | Security Focus | +|-----------|---------------| +| SW Development Server | IDE plugin verification, malware scanning | +| Library DB | Open-source library verification, vulnerability scanning | +| Code DB | Source code integrity, access control | +| Manufacturing Systems | Satellite bus, payload, launch vehicle manufacturing integrity | + +### Ground Station Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Control System | Build pipeline security, backdoor prevention | +| SW Development Server | Secure development environment | +| SW Update Server | Update file integrity verification, secure transmission | +| Library/Code DB | Vulnerable open-source blocking, SBOM verification | + +### Satellite Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Application System | Hard-coded credential prevention | +| SW Development Server | Remote work environment security | +| Data Processing System | Maintenance account management | +| Library/Code DB | Auto-build malicious open-source prevention | diff --git a/skills-ko/kesekit-start-ko/templates/space-security/system-security.md b/skills-ko/kesekit-start-ko/templates/space-security/system-security.md new file mode 100644 index 0000000..7297ada --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/space-security/system-security.md @@ -0,0 +1,46 @@ +# System & Communication Security Checklist + +> Domains: SC (System & Communication Security, 7 items) + SI (System & Information Integrity, 4 items) + +## SC — System & Communication Security (7 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SC-01 | Boundary Protection | Block unauthorized communications at boundaries | Network segmentation, DMZ deployment, communication encryption/monitoring, deny-all ACL | +| SC-02 | Security Engineering & Function Separation | Defense-in-depth, eliminate single points of failure | Security engineering principles, admin/user function separation, Secure by Design | +| SC-03 | Stored & Transmitted Information Security | Protect command/telemetry/log confidentiality and integrity | Storage encryption, uplink/downlink encryption, shared resource protection | +| SC-04 | Communication Security | Establish/maintain/terminate secure sessions | Default deny policy, authenticated/integrity-checked channels, session timeout | +| SC-05 | Encryption | Apply cryptographic algorithms and manage keys | Approved algorithms, key lifecycle management (create/distribute/store/retire) | +| SC-06 | Collaborative Computing Devices | Prevent remote camera/mic activation, prevent leaks | Device inventory, remote activation blocked, LED indicator required | +| SC-07 | Mobile Code & VoIP Control | Prevent malicious code execution and unauthorized VoIP | Mobile code execution control, VoIP usage restriction, monitoring | + +### SC Protection Measures + +| Category | Measures | +|----------|----------| +| Network Segmentation | Physical/logical separation, DMZ for public servers, satellite-control/operations/internet isolation | +| Encryption Standards | AES-256/ARIA-256, TLS 1.2+, IPsec VPN, CCSDS 352.0-B-2 for space systems | +| Integrity Verification | Digital signatures, HMAC, memory/buffer initialization | +| Session Management | mTLS, split-tunneling blocked, session ID rotation, 2-30 min timeout | +| Cryptographic Keys | AES-256, SHA-256+, RSA-4096+; PROHIBIT TDEA/MD5/SHA-1; full key lifecycle management | +| Code Control | ActiveX/Java Runtime disabled, script whitelisting, signed code only, SRTP for VoIP | + +## SI — System & Information Integrity (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SI-01 | Vulnerability Scanning & Flaw Remediation | Identify and fix system/application vulnerabilities | Periodic scanning, immediate scan on new vulnerabilities, flaw identification/remediation/reporting | +| SI-02 | Malicious Code Prevention | Prevent virus/worm/ransomware infiltration | Anti-malware on all systems, periodic/real-time scanning, signature updates | +| SI-03 | Security Alerts & Advisories | Monitor and respond to security alerts | Continuous monitoring of KISA/NCSC/CISA/NIST NVD, impact analysis, patch/hardening | +| SI-04 | System & Communication Traffic Monitoring | Detect abnormal traffic in real-time | Monitoring policy, inbound/outbound monitoring, result analysis/response | + +### SI Protection Measures + +| Measure | Detail | +|---------|--------| +| Vulnerability Management | Network/server/security/app/web scanning, CWE/CVE-based, prioritized remediation | +| Anti-Malware | Enterprise AV on all assets, daily+ updates, P2P/webhard blocked, central management | +| Alert Monitoring | RSS/email subscription to KISA/CISA/NVD, internal notification chain, patch within SLA | +| Traffic Monitoring | IDS/IPS at boundaries, access/security/network log integration, automated alerting | + +## Total: 11 Items (SC: 7 + SI: 4) diff --git a/skills-ko/kesekit-start-ko/templates/zero-trust/app-data.md b/skills-ko/kesekit-start-ko/templates/zero-trust/app-data.md new file mode 100644 index 0000000..f8d1195 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/zero-trust/app-data.md @@ -0,0 +1,162 @@ +# Application & Data Checklist + +> Zero Trust Maturity Assessment — Application (AP) & Data (DA) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## AP — 애플리케이션 및 워크로드 (Application) (60 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AP-01 | 리소스 권한 부여 및 통합 | 접근에 대한 사용자/시스템 권한을 수동으로 관리하는가? | Traditional | Critical | +| ZT-AP-02 | 리소스 권한 부여 및 통합 | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | Traditional | Critical | +| ZT-AP-03 | 리소스 권한 부여 및 통합 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | Initial | High | +| ZT-AP-04 | 리소스 권한 부여 및 통합 | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | Initial | High | +| ZT-AP-05 | 리소스 권한 부여 및 통합 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-06 | 리소스 권한 부여 및 통합 | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-07 | 리소스 권한 부여 및 통합 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | Optimal | Low | +| ZT-AP-08 | 리소스 권한 부여 및 통합 | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | Optimal | Low | +| ZT-AP-09 | 리소스 권한 부여 및 통합 | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | Optimal | Low | +| ZT-AP-10 | 리소스 권한 부여 및 통합 | 모든 리소스 권한 부여가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-11 | 지속적인 모니터링 및 진행 중인 승인 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | Traditional | Critical | +| ZT-AP-12 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-AP-13 | 지속적인 모니터링 및 진행 중인 승인 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | Initial | High | +| ZT-AP-14 | 지속적인 모니터링 및 진행 중인 승인 | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | Initial | High | +| ZT-AP-15 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | Advanced | Medium | +| ZT-AP-16 | 지속적인 모니터링 및 진행 중인 승인 | 보안 승인 프로세스를 자동화할 수 있는가? | Advanced | Medium | +| ZT-AP-17 | 지속적인 모니터링 및 진행 중인 승인 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | Optimal | Low | +| ZT-AP-18 | 원격 접속 | VPN을 통해서 외부 접속을 지원하는가? | Traditional | Critical | +| ZT-AP-19 | 원격 접속 | 애플리케이션에 대한 접근제어가 제한적인가? | Traditional | Critical | +| ZT-AP-20 | 원격 접속 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | Initial | High | +| ZT-AP-21 | 원격 접속 | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | Advanced | Medium | +| ZT-AP-22 | 원격 접속 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | Advanced | Medium | +| ZT-AP-23 | 원격 접속 | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | Optimal | Low | +| ZT-AP-24 | 원격 접속 | AI를 활용하여 원격 접속 보안을 고도화 하였는가? | Optimal | Low | +| ZT-AP-25 | 원격 접속 | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | Optimal | Low | +| ZT-AP-26 | 안전한 애플리케이션 배포 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | Traditional | Critical | +| ZT-AP-27 | 안전한 애플리케이션 배포 | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | Traditional | Critical | +| ZT-AP-28 | 안전한 애플리케이션 배포 | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | Traditional | Critical | +| ZT-AP-29 | 안전한 애플리케이션 배포 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | Initial | High | +| ZT-AP-30 | 안전한 애플리케이션 배포 | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | Initial | High | +| ZT-AP-31 | 안전한 애플리케이션 배포 | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | Initial | High | +| ZT-AP-32 | 안전한 애플리케이션 배포 | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | Initial | High | +| ZT-AP-33 | 안전한 애플리케이션 배포 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | Advanced | Medium | +| ZT-AP-34 | 안전한 애플리케이션 배포 | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | Advanced | Medium | +| ZT-AP-35 | 안전한 애플리케이션 배포 | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | Advanced | Medium | +| ZT-AP-36 | 안전한 애플리케이션 배포 | 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | Advanced | Medium | +| ZT-AP-37 | 안전한 애플리케이션 배포 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | Optimal | Low | +| ZT-AP-38 | 안전한 애플리케이션 배포 | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | Optimal | Low | +| ZT-AP-39 | 애플리케이션 인벤토리 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | Traditional | Critical | +| ZT-AP-40 | 애플리케이션 인벤토리 | 애플리케이션 기본 정보를 기록하여 관리하는가? | Traditional | Critical | +| ZT-AP-41 | 애플리케이션 인벤토리 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | Initial | High | +| ZT-AP-42 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가/관리할 수 있는가? | Advanced | Medium | +| ZT-AP-43 | 애플리케이션 인벤토리 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | Optimal | Low | +| ZT-AP-44 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-AP-45 | 보안 소프트웨어 개발 및 통합 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | Traditional | Critical | +| ZT-AP-46 | 보안 소프트웨어 개발 및 통합 | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | Traditional | Critical | +| ZT-AP-47 | 보안 소프트웨어 개발 및 통합 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | Initial | High | +| ZT-AP-48 | 보안 소프트웨어 개발 및 통합 | DevSecOps 문화를 도입하였는가? | Initial | High | +| ZT-AP-49 | 보안 소프트웨어 개발 및 통합 | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | Initial | High | +| ZT-AP-50 | 보안 소프트웨어 개발 및 통합 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | Advanced | Medium | +| ZT-AP-51 | 보안 소프트웨어 개발 및 통합 | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | Advanced | Medium | +| ZT-AP-52 | 보안 소프트웨어 개발 및 통합 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | Optimal | Low | +| ZT-AP-53 | 보안 소프트웨어 개발 및 통합 | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | Optimal | Low | +| ZT-AP-54 | 보안 소프트웨어 개발 및 통합 | 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-55 | 소프트웨어 위험 관리 | 최소한의 위험 요소가 식별되고 문서화 하였는가? | Traditional | Critical | +| ZT-AP-56 | 소프트웨어 위험 관리 | 소프트웨어 위험 관리 계획이 수립되어 있는가? | Traditional | Critical | +| ZT-AP-57 | 소프트웨어 위험 관리 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | Initial | High | +| ZT-AP-58 | 소프트웨어 위험 관리 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | Advanced | Medium | +| ZT-AP-59 | 소프트웨어 위험 관리 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | Optimal | Low | +| ZT-AP-60 | 소프트웨어 위험 관리 | 맞춤형 공격에 대응 가능한가? | Optimal | Low | + +### AP Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 리소스 권한 부여 및 통합 | 수동 권한 관리, 정적 접근제어 | 중앙 집중식 관리 | 컨텍스트 기반 최소 권한, 정밀 관리 | 실시간 분석, 자동 권한 부여/회수, 완전 자동화 | +| 지속적인 모니터링 및 승인 | 수동 모니터링, 수동 이벤트 기록 | 실시간 이벤트 수집/분석, 보안 검토 | AI 분석, 승인 자동화 | 실시간 탐지, 위협 사전 예측 | +| 원격 접속 | VPN 외부 접속, 제한적 접근제어 | 자동 보안 상태 평가 | 실시간 모니터링, 맞춤형 정책 | 동적 보안 정책, AI 고도화, 즉각 차단 | +| 안전한 애플리케이션 배포 | 수동 코드 검토, 배포 절차, 접근제어 | 자동화 파이프라인, CI/CD 취약점 검사, 무결성 검사 | 지속적 모니터링, 정책 자동 검증, 즉각 대응 | 완전 자동 배포, AI 위협 탐지 통합 | +| 애플리케이션 인벤토리 | 수동 목록화, 기본 정보 기록 | 자동 식별/관리 | 보안 상태 평가/관리 | AI 실시간 반영, 보안 시스템 통합 | +| 보안 SW 개발 및 통합 | 보안 코딩 표준, 수동 테스트 | SDLC 통합, DevSecOps, SBOM | 서드파티 자동 검사, 전체 SBOM | 프로세스 격리, 런타임 분석, 완전 자동화 | +| 소프트웨어 위험 관리 | 위험 식별/문서화, 관리 계획 | 위험 평가 프로세스 | 공급망 보안, 전주기 자동화 | AI 예측 분석, 맞춤형 공격 대응 | + +--- + +## DA — 데이터 (Data) (58 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DA-01 | 데이터 카탈로그 위험 정렬 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | Traditional | Critical | +| ZT-DA-02 | 데이터 카탈로그 위험 정렬 | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | Traditional | Critical | +| ZT-DA-03 | 데이터 카탈로그 위험 정렬 | 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | Traditional | Critical | +| ZT-DA-04 | 데이터 카탈로그 위험 정렬 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | Initial | High | +| ZT-DA-05 | 데이터 카탈로그 위험 정렬 | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | Initial | High | +| ZT-DA-06 | 데이터 카탈로그 위험 정렬 | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | Initial | High | +| ZT-DA-07 | 데이터 카탈로그 위험 정렬 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | Advanced | Medium | +| ZT-DA-08 | 데이터 카탈로그 위험 정렬 | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-DA-09 | 데이터 카탈로그 위험 정렬 | 데이터 사용 패턴 분석이 가능한가? | Advanced | Medium | +| ZT-DA-10 | 데이터 카탈로그 위험 정렬 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | Optimal | Low | +| ZT-DA-11 | 데이터 카탈로그 위험 정렬 | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | Optimal | Low | +| ZT-DA-12 | 기업 데이터 거버넌스 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | Traditional | Critical | +| ZT-DA-13 | 기업 데이터 거버넌스 | 데이터 소유자와 관리자를 지정하였는가? | Traditional | Critical | +| ZT-DA-14 | 기업 데이터 거버넌스 | 데이터 거버넌스 프레임워크가 도입되어 있는가? | Traditional | Critical | +| ZT-DA-15 | 기업 데이터 거버넌스 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | Initial | High | +| ZT-DA-16 | 기업 데이터 거버넌스 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | Advanced | Medium | +| ZT-DA-17 | 기업 데이터 거버넌스 | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | Advanced | Medium | +| ZT-DA-18 | 기업 데이터 거버넌스 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | Optimal | Low | +| ZT-DA-19 | 데이터 접근제어 | 데이터 접근 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-20 | 데이터 접근제어 | 데이터 접근권한이 수동으로 부여되는가? | Traditional | Critical | +| ZT-DA-21 | 데이터 접근제어 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-22 | 데이터 접근제어 | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | Initial | High | +| ZT-DA-23 | 데이터 접근제어 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | Advanced | Medium | +| ZT-DA-24 | 데이터 접근제어 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-25 | 데이터 암호화 및 권한 관리 | 데이터를 수동으로 암호화하는가? | Traditional | Critical | +| ZT-DA-26 | 데이터 암호화 및 권한 관리 | 암호화 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-27 | 데이터 암호화 및 권한 관리 | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-28 | 데이터 암호화 및 권한 관리 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | Initial | High | +| ZT-DA-29 | 데이터 암호화 및 권한 관리 | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-30 | 데이터 암호화 및 권한 관리 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | Advanced | Medium | +| ZT-DA-31 | 데이터 암호화 및 권한 관리 | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | Advanced | Medium | +| ZT-DA-32 | 데이터 암호화 및 권한 관리 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-33 | 데이터 암호화 및 권한 관리 | 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | Optimal | Low | +| ZT-DA-34 | 데이터 라벨링 및 태그 지정 | 라벨링 및 태그 지정 지침을 수립하였는가? | Traditional | Critical | +| ZT-DA-35 | 데이터 라벨링 및 태그 지정 | 일관된 데이터 분류 체계가 마련되어 있는가? | Traditional | Critical | +| ZT-DA-36 | 데이터 라벨링 및 태그 지정 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별/분류하는가? | Initial | High | +| ZT-DA-37 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | Initial | High | +| ZT-DA-38 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | Initial | High | +| ZT-DA-39 | 데이터 라벨링 및 태그 지정 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류/식별 가능한가? | Advanced | Medium | +| ZT-DA-40 | 데이터 라벨링 및 태그 지정 | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | Advanced | Medium | +| ZT-DA-41 | 데이터 라벨링 및 태그 지정 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | Optimal | Low | +| ZT-DA-42 | 데이터 라벨링 및 태그 지정 | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | Optimal | Low | +| ZT-DA-43 | 데이터 손실 방지 (DLP) | DLP 정책을 수립하고 수동으로 평가하는가? | Traditional | Critical | +| ZT-DA-44 | 데이터 손실 방지 (DLP) | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | Traditional | Critical | +| ZT-DA-45 | 데이터 손실 방지 (DLP) | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | Initial | High | +| ZT-DA-46 | 데이터 손실 방지 (DLP) | DLP 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-DA-47 | 데이터 손실 방지 (DLP) | DLP 솔루션이 모니터링 모드로 동작하는가? | Initial | High | +| ZT-DA-48 | 데이터 손실 방지 (DLP) | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | Advanced | Medium | +| ZT-DA-49 | 데이터 손실 방지 (DLP) | DLP 솔루션이 방지 모드로 사용되는가? | Advanced | Medium | +| ZT-DA-50 | 데이터 손실 방지 (DLP) | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | Optimal | Low | +| ZT-DA-51 | 데이터 손실 방지 (DLP) | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | Optimal | Low | +| ZT-DA-52 | 데이터 모니터링 및 감지 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | Traditional | Critical | +| ZT-DA-53 | 데이터 모니터링 및 감지 | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-54 | 데이터 모니터링 및 감지 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | Initial | High | +| ZT-DA-55 | 데이터 모니터링 및 감지 | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | Initial | High | +| ZT-DA-56 | 데이터 모니터링 및 감지 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-DA-57 | 데이터 모니터링 및 감지 | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | Advanced | Medium | +| ZT-DA-58 | 데이터 모니터링 및 감지 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | Optimal | Low | + +### DA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 데이터 카탈로그 위험 정렬 | 초기 카탈로그, 수동 분류, 위험 평가 문서화 | 자동 카탈로그, 자동 수집/분류, 기준 마련 | 민감도 분석, 보호 정책, 패턴 분석 | AI 실시간 분석, 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 정책 수립, 소유자 지정, 프레임워크 | 정기적 감사/검토 | 자동화, 실시간 모니터링 | 전체 시스템 통합 관리 | +| 데이터 접근제어 | 접근 정책 수립, 수동 권한 부여 | 중앙 집중식, 최소 권한 확인 | ABAC 컨텍스트 기반 | AI 실시간 권한 조정 | +| 데이터 암호화 및 권한 관리 | 수동 암호화, 정책 수립, 초기 관리 체계 | 자동 암호화, 중앙 집중식 관리 | 고급 암호화, RBAC+ABAC | AI 기반 최적화, 실시간 마스킹 | +| 데이터 라벨링 및 태그 지정 | 지침 수립, 분류 체계 마련 | 수동 라벨링, 특수 라벨, 차등 정책 | 자동 분류, 보안 시스템 연계 | 고급 메타데이터, AI 자동 조정 | +| 데이터 손실 방지 (DLP) | DLP 정책, 범위 지정 | DLP 도입, 중앙 관리, 모니터링 모드 | 전체 도입, 방지 모드 | AI 예측/차단, 자동 정책 최적화 | +| 데이터 모니터링 및 감지 | 수동 모니터링, 프로세스 수립 | 자동 감시, 정책 조정 | 이상 징후 탐지, 보안 시스템 연계 | 지속 평가, 컨텍스트 최소 접근제어 | + +--- + +## Total: 118 Items (AP: 60 + DA: 58) diff --git a/skills-ko/kesekit-start-ko/templates/zero-trust/identity-device.md b/skills-ko/kesekit-start-ko/templates/zero-trust/identity-device.md new file mode 100644 index 0000000..80e1800 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/zero-trust/identity-device.md @@ -0,0 +1,133 @@ +# Identity & Device Checklist + +> Zero Trust Maturity Assessment — Identity (ID) & Device (DV) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## ID — 식별자 및 신원 (Identity) (53 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-ID-01 | 사용자 인벤토리 | 사용자 목록에 대한 문서화가 되어있는가? | Traditional | Critical | +| ZT-ID-02 | 사용자 인벤토리 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | Initial | High | +| ZT-ID-03 | 사용자 인벤토리 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | Advanced | Medium | +| ZT-ID-04 | 사용자 인벤토리 | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | Advanced | Medium | +| ZT-ID-05 | 사용자 인벤토리 | AI 기반 사용자 행동에 따른 관리가 되는가? | Optimal | Low | +| ZT-ID-06 | 사용자 인벤토리 | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | Optimal | Low | +| ZT-ID-07 | ID 연계 및 사용자 자격 증명 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-08 | ID 연계 및 사용자 자격 증명 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | Initial | High | +| ZT-ID-09 | ID 연계 및 사용자 자격 증명 | ID 통합 관리 시스템이 구축되어 있는가? | Advanced | Medium | +| ZT-ID-10 | ID 연계 및 사용자 자격 증명 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | Optimal | Low | +| ZT-ID-11 | 다중인증 (MFA) | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-12 | 다중인증 (MFA) | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | Initial | High | +| ZT-ID-13 | 다중인증 (MFA) | FIDO 기반 인증 기법이 적용되어 있는가? | Initial | High | +| ZT-ID-14 | 다중인증 (MFA) | 상황에 따른 맞춤형 MFA가 지원 가능한가? | Advanced | Medium | +| ZT-ID-15 | 다중인증 (MFA) | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-16 | 다중인증 (MFA) | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | Optimal | Low | +| ZT-ID-17 | 지속 인증 | 세션 기반 인증이 수행되는가? | Traditional | Critical | +| ZT-ID-18 | 지속 인증 | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | Traditional | Critical | +| ZT-ID-19 | 지속 인증 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-20 | 지속 인증 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | Advanced | Medium | +| ZT-ID-21 | 지속 인증 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | Optimal | Low | +| ZT-ID-22 | 통합 ICAM 플랫폼 | ICAM 시스템이 구축되어 있는가? | Traditional | Critical | +| ZT-ID-23 | 통합 ICAM 플랫폼 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | Initial | High | +| ZT-ID-24 | 통합 ICAM 플랫폼 | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | Initial | High | +| ZT-ID-25 | 통합 ICAM 플랫폼 | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | Initial | High | +| ZT-ID-26 | 통합 ICAM 플랫폼 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | Advanced | Medium | +| ZT-ID-27 | 통합 ICAM 플랫폼 | ICAM 플랫폼이 자동화되어 있는가? | Advanced | Medium | +| ZT-ID-28 | 통합 ICAM 플랫폼 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | Optimal | Low | +| ZT-ID-29 | 통합 ICAM 플랫폼 | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | Optimal | Low | +| ZT-ID-30 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-31 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자 행동 패턴이 수동으로 분석되는가? | Traditional | Critical | +| ZT-ID-32 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | Initial | High | +| ZT-ID-33 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 컨텍스트 정보 기반 접근권한이 조정되는가? | Initial | High | +| ZT-ID-34 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | Advanced | Medium | +| ZT-ID-35 | 행동, 컨텍스트 기반 ID 및 생체 인식 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | Optimal | Low | +| ZT-ID-36 | 조건부 사용자 접근 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | Traditional | Critical | +| ZT-ID-37 | 조건부 사용자 접근 | 조건부 접근 정책에 대한 개념을 정의하였는가? | Traditional | Critical | +| ZT-ID-38 | 조건부 사용자 접근 | 시스템 별 각기 다른 접속 관리 기능이 있는가? | Traditional | Critical | +| ZT-ID-39 | 조건부 사용자 접근 | 특정 조건에 따른 사용자 접근제어가 가능한가? | Initial | High | +| ZT-ID-40 | 조건부 사용자 접근 | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | Initial | High | +| ZT-ID-41 | 조건부 사용자 접근 | 세션별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-42 | 조건부 사용자 접근 | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-43 | 조건부 사용자 접근 | 리소스별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-44 | 조건부 사용자 접근 | 동적 접근 정책을 실시간으로 적용 가능한가? | Optimal | Low | +| ZT-ID-45 | 조건부 사용자 접근 | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | Optimal | Low | +| ZT-ID-46 | 최소 권한 접근 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | Traditional | Critical | +| ZT-ID-47 | 최소 권한 접근 | 권한 부여에 대한 절차가 문서화 되어 있는가? | Traditional | Critical | +| ZT-ID-48 | 최소 권한 접근 | 권한 부여 절차가 표준화 되어 있는가? | Initial | High | +| ZT-ID-49 | 최소 권한 접근 | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-50 | 최소 권한 접근 | 자동화된 권한 상승이 가능한가? | Advanced | Medium | +| ZT-ID-51 | 최소 권한 접근 | 권한 관리 정책이 지속적으로 업데이트 되는가? | Advanced | Medium | +| ZT-ID-52 | 최소 권한 접근 | 권한 관리가 동적으로 변경 가능한가? | Optimal | Low | +| ZT-ID-53 | 최소 권한 접근 | 최소 권한 원칙이 실시간으로 조정 가능한가? | Optimal | Low | + +### ID Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 사용자 인벤토리 | 사용자 목록 문서화 | 역할별 상세 인벤토리 | 자동화 관리, 비정상 활동 탐지 | AI 기반 관리, 통합 최적화 | +| ID 연계 및 사용자 자격 증명 | ID 연계 솔루션 적용 | 시스템 간 연동 | 통합 관리 시스템 | 글로벌 수준 연계 | +| 다중인증 (MFA) | 패스워드+SMS/이메일 MFA | 인증 앱/토큰, FIDO | 맞춤형 MFA, 컨텍스트 인증 | 비정상 로그인 실시간 탐지 | +| 지속 인증 | 세션 기반 인증, 상태 모니터링 | 세션 중간 추가 인증 | 동적 인증 기술 | 자동 재인증, 실시간 검증 | +| 통합 ICAM 플랫폼 | ICAM 시스템 구축 | 중앙 관리, 정책 표준화, 위험도 평가 | 시스템 통합 안정화, 자동화 | AI 기반 보안 강화, 실시간 ID 위험 평가 | +| 행동/컨텍스트 기반 ID 및 생체 인식 | 기본 생체 인식, 수동 행동 분석 | 통합 인증, 컨텍스트 접근권한 | 실시간 접근제어 조정 | AI 기반 행동/생체 인식 | +| 조건부 사용자 접근 | 기초 시스템, 개념 정의, 접속 관리 | 조건부 접근제어, 최소 권한 | 세션/리소스별 권한, 다단계 정책 | 동적 정책, AI 실시간 관리 | +| 최소 권한 접근 | 원칙 정의, 절차 문서화 | 표준화, 변경 관리 시스템 | 자동 권한 상승, 정책 업데이트 | 동적 변경, 실시간 조정 | + +--- + +## DV — 기기 및 엔드포인트 (Device) (40 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DV-01 | 기기 감지 및 규정 준수 | 리소스에 연결된 기기를 식별할 수 있는가? | Traditional | Critical | +| ZT-DV-02 | 기기 감지 및 규정 준수 | 수동으로 규정 준수에 대한 확인이 가능한가? | Traditional | Critical | +| ZT-DV-03 | 기기 감지 및 규정 준수 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | Initial | High | +| ZT-DV-04 | 기기 감지 및 규정 준수 | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | Initial | High | +| ZT-DV-05 | 기기 감지 및 규정 준수 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | Advanced | Medium | +| ZT-DV-06 | 기기 감지 및 규정 준수 | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-DV-07 | 기기 감지 및 규정 준수 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | Optimal | Low | +| ZT-DV-08 | 기기 감지 및 규정 준수 | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | Optimal | Low | +| ZT-DV-09 | 실시간 검사를 통한 기기 권한 부여 | 자산 접근 기기에 대한 정보가 수집되는가? | Traditional | Critical | +| ZT-DV-10 | 실시간 검사를 통한 기기 권한 부여 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | Initial | High | +| ZT-DV-11 | 실시간 검사를 통한 기기 권한 부여 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | Advanced | Medium | +| ZT-DV-12 | 실시간 검사를 통한 기기 권한 부여 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | Optimal | Low | +| ZT-DV-13 | 실시간 검사를 통한 기기 권한 부여 | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | Optimal | Low | +| ZT-DV-14 | 기기 인벤토리 | 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | Traditional | Critical | +| ZT-DV-15 | 기기 인벤토리 | 주요 기기에 대한 정보를 수집하고 관리하는가? | Traditional | Critical | +| ZT-DV-16 | 기기 인벤토리 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | Initial | High | +| ZT-DV-17 | 기기 인벤토리 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | Advanced | Medium | +| ZT-DV-18 | 기기 인벤토리 | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | Advanced | Medium | +| ZT-DV-19 | 기기 인벤토리 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | Optimal | Low | +| ZT-DV-20 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | Traditional | Critical | +| ZT-DV-21 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 보안 정책을 설정하였는가? | Traditional | Critical | +| ZT-DV-22 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | Initial | High | +| ZT-DV-23 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기기 상태를 지속적으로 모니터링 하는가? | Initial | High | +| ZT-DV-24 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | Advanced | Medium | +| ZT-DV-25 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | Optimal | Low | +| ZT-DV-26 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | 기본적인 EDR 솔루션을 도입하였는가? | Traditional | Critical | +| ZT-DV-27 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | Initial | High | +| ZT-DV-28 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | XDR 솔루션을 도입하였는가? | Advanced | Medium | +| ZT-DV-29 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | AI 기반 EDR/XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | Optimal | Low | +| ZT-DV-30 | 자산, 취약성 및 패치 관리 자동화 | 자산 및 취약성을 수동으로 평가하는가? | Traditional | Critical | +| ZT-DV-31 | 자산, 취약성 및 패치 관리 자동화 | 주요 자산 및 취약성 목록이 작성되어 있는가? | Traditional | Critical | +| ZT-DV-32 | 자산, 취약성 및 패치 관리 자동화 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | Initial | High | +| ZT-DV-33 | 자산, 취약성 및 패치 관리 자동화 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | Advanced | Medium | +| ZT-DV-34 | 자산, 취약성 및 패치 관리 자동화 | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | Advanced | Medium | +| ZT-DV-35 | 자산, 취약성 및 패치 관리 자동화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | Optimal | Low | +| ZT-DV-36 | 자산, 취약성 및 패치 관리 자동화 | 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | Optimal | Low | + +### DV Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 기기 감지 및 규정 준수 | 기기 식별, 수동 규정 확인 | 실시간 탐지, 비준수 경고 | 자동 교정, 접근권한 연동 | 동적 권한 수정, AI 실시간 평가 | +| 실시간 검사를 통한 기기 권한 부여 | 기기 정보 수집 | 수동 검사 수행 | 자동 평가 및 접근 허용 | 접근권한 조정, 보안 시스템 연동 | +| 기기 인벤토리 | 수동 인벤토리, 정보 수집 | 자동화 기록 | 비정상 기기 탐지, 취약점 파악 | 실시간 모니터링, 예측 분석 | +| 통합 엔드포인트/모바일 기기 관리 | 관리 시스템 도입, 보안 정책 설정 | 중앙 관리, 지속 모니터링 | 중앙 자동 적용 | 통합 관리, 자동 위협 대응 | +| EDR 및 XDR | 기본 EDR 도입 | 실시간 탐지/자동 대응 | XDR 도입 | AI 기반 통합 위협 탐지 | +| 자산/취약성/패치 관리 자동화 | 수동 평가, 목록 작성 | 자동 패치 도입 | 지속적 자동화, 시스템 통합 | 사전 식별, 통합 관리 | + +--- + +## Total: 89 Items (ID: 53 + DV: 36) diff --git a/skills-ko/kesekit-start-ko/templates/zero-trust/network-system.md b/skills-ko/kesekit-start-ko/templates/zero-trust/network-system.md new file mode 100644 index 0000000..89cef54 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/zero-trust/network-system.md @@ -0,0 +1,145 @@ +# Network & System Checklist + +> Zero Trust Maturity Assessment — Network (NW) & System (SY) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## NW — 네트워크 (Network) (54 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-NW-01 | 매크로 세그멘테이션 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-02 | 매크로 세그멘테이션 | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | Traditional | Critical | +| ZT-NW-03 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | Initial | High | +| ZT-NW-04 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | Initial | High | +| ZT-NW-05 | 매크로 세그멘테이션 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | Advanced | Medium | +| ZT-NW-06 | 매크로 세그멘테이션 | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | Advanced | Medium | +| ZT-NW-07 | 매크로 세그멘테이션 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | Optimal | Low | +| ZT-NW-08 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-09 | 마이크로 세그멘테이션 | 수동으로 세그먼트를 구성하는가? | Traditional | Critical | +| ZT-NW-10 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | Initial | High | +| ZT-NW-11 | 마이크로 세그멘테이션 | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지/차단 할 수 있는가? | Initial | High | +| ZT-NW-12 | 마이크로 세그멘테이션 | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | Initial | High | +| ZT-NW-13 | 마이크로 세그멘테이션 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | Advanced | Medium | +| ZT-NW-14 | 마이크로 세그멘테이션 | 애플리케이션 별 격리 메커니즘이 적용되었는가? | Advanced | Medium | +| ZT-NW-15 | 마이크로 세그멘테이션 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | Optimal | Low | +| ZT-NW-16 | 소프트웨어 정의 네트워킹 | 소프트웨어 정의 네트워크가 도입되어 있는가? | Traditional | Critical | +| ZT-NW-17 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | Traditional | Critical | +| ZT-NW-18 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | Initial | High | +| ZT-NW-19 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | Advanced | Medium | +| ZT-NW-20 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | Optimal | Low | +| ZT-NW-21 | 위협 대응 | IDS/IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | Traditional | Critical | +| ZT-NW-22 | 위협 대응 | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | Traditional | Critical | +| ZT-NW-23 | 위협 대응 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | Initial | High | +| ZT-NW-24 | 위협 대응 | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | Initial | High | +| ZT-NW-25 | 위협 대응 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | Advanced | Medium | +| ZT-NW-26 | 위협 대응 | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | Advanced | Medium | +| ZT-NW-27 | 위협 대응 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | Optimal | Low | +| ZT-NW-28 | 위협 대응 | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | Optimal | Low | +| ZT-NW-29 | 트래픽 암호화 | 내/외부 트래픽 일부 암호화가 가능한가? | Traditional | Critical | +| ZT-NW-30 | 트래픽 암호화 | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | Traditional | Critical | +| ZT-NW-31 | 트래픽 암호화 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | Initial | High | +| ZT-NW-32 | 트래픽 암호화 | 데이터 전송 시 암호화를 필수로 하고 있는가? | Initial | High | +| ZT-NW-33 | 트래픽 암호화 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | Advanced | Medium | +| ZT-NW-34 | 트래픽 암호화 | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | Advanced | Medium | +| ZT-NW-35 | 트래픽 암호화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | Optimal | Low | +| ZT-NW-36 | 트래픽 암호화 | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-NW-37 | 데이터 흐름 매핑 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | Traditional | Critical | +| ZT-NW-38 | 데이터 흐름 매핑 | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | Traditional | Critical | +| ZT-NW-39 | 데이터 흐름 매핑 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | Initial | High | +| ZT-NW-40 | 데이터 흐름 매핑 | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | Initial | High | +| ZT-NW-41 | 데이터 흐름 매핑 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | Advanced | Medium | +| ZT-NW-42 | 데이터 흐름 매핑 | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | Advanced | Medium | +| ZT-NW-43 | 데이터 흐름 매핑 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | Optimal | Low | +| ZT-NW-44 | 데이터 흐름 매핑 | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | Optimal | Low | +| ZT-NW-45 | 네트워크 회복성 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | Traditional | Critical | +| ZT-NW-46 | 네트워크 회복성 | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | Traditional | Critical | +| ZT-NW-47 | 네트워크 회복성 | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | Traditional | Critical | +| ZT-NW-48 | 네트워크 회복성 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | Initial | High | +| ZT-NW-49 | 네트워크 회복성 | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | Initial | High | +| ZT-NW-50 | 네트워크 회복성 | 네트워크 이중화 설계가 되어 있는가? | Initial | High | +| ZT-NW-51 | 네트워크 회복성 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | Advanced | Medium | +| ZT-NW-52 | 네트워크 회복성 | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | Advanced | Medium | +| ZT-NW-53 | 네트워크 회복성 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | Optimal | Low | +| ZT-NW-54 | 네트워크 회복성 | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | Optimal | Low | + +### NW Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 매크로 세그멘테이션 | 영역별 세그멘테이션, 트래픽 흐름 기반 구성 | 보안 정책 적용, 비정상 활동 탐지 | 맞춤형 정책, 위협 대응 | AI 기반 관리 | +| 마이크로 세그멘테이션 | 워크로드 기준 세그멘테이션, 수동 구성 | 보안 정책, 워크로드 이동 탐지/차단, 모니터링 | 정책 설정/제어, 격리 메커니즘 | AI 기반 자동 대응 | +| 소프트웨어 정의 네트워킹 | SDN 도입, 기본 구조 설정 | 중앙 관리, 실시간 정책 | 트래픽 관리/보안 확장 | AI 기반 위협 관리/트래픽 예측 | +| 위협 대응 | IDS/IPS 감시, 정적 규칙 관리 | 자동 탐지/대응, 프로파일 관리 | 선제적 대응, 동적 규칙 | 즉각 자동 대응, 동적 트래픽 관리 | +| 트래픽 암호화 | 일부 암호화, SSL/TLS/VPN | 전반 암호화, 전송 필수 암호화 | 저장 데이터 암호화, 고급 키 관리 | 성능 유지 보호, 통합 키 관리 | +| 데이터 흐름 매핑 | 수동 모니터링, 수동 매핑 | 애플리케이션 단위 매핑, 실시간 매핑 | 비정상 이동 탐지, 상관관계 분석 | AI 예측 분석, 동적 우선순위 | +| 네트워크 회복성 | 복구 계획, 백업, 장애 대응 절차 | 다중 경로, Failover, 이중화 | 지속적 서비스, 주기적 테스트 | 중단 없는 운영, 자동화 복구 | + +--- + +## SY — 시스템 (System) (49 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-SY-01 | 접근통제 | 사용자 및 기기에 수동으로 권한을 부여하는가? | Traditional | Critical | +| ZT-SY-02 | 접근통제 | RBAC 기반 접근제어를 수행하는가? | Traditional | Critical | +| ZT-SY-03 | 접근통제 | 권한 관리를 수동으로 수행하는가? | Traditional | Critical | +| ZT-SY-04 | 접근통제 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | Initial | High | +| ZT-SY-05 | 접근통제 | 실시간 접근권한 부여가 가능한가? | Initial | High | +| ZT-SY-06 | 접근통제 | 권한 변경 사항이 자동으로 반영되는가? | Initial | High | +| ZT-SY-07 | 접근통제 | 특정 리소스에 대한 접근 제한/승인 정책이 자동으로 적용 가능한가? | Initial | High | +| ZT-SY-08 | 접근통제 | ABAC 기반 접근제어를 수행하는가? | Advanced | Medium | +| ZT-SY-09 | 접근통제 | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | Advanced | Medium | +| ZT-SY-10 | 접근통제 | 사용자/기기의 상태를 실시간으로 분석하고 실시간/자동으로 권한 조정이 가능한가? | Optimal | Low | +| ZT-SY-11 | 접근통제 | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | Optimal | Low | +| ZT-SY-12 | 접근통제 | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | Optimal | Low | +| ZT-SY-13 | 접근통제 | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | Optimal | Low | +| ZT-SY-14 | PAM | PAM 시스템을 구축하였는가? | Traditional | Critical | +| ZT-SY-15 | PAM | PAM 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-SY-16 | PAM | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | Initial | High | +| ZT-SY-17 | PAM | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | Initial | High | +| ZT-SY-18 | PAM | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | Advanced | Medium | +| ZT-SY-19 | PAM | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | Optimal | Low | +| ZT-SY-20 | 자격 증명 관리 | 자격 증명이 수동으로 관리되는가? | Traditional | Critical | +| ZT-SY-21 | 자격 증명 관리 | 패스워드에 기반한 인증 방식에 의존하는가? | Traditional | Critical | +| ZT-SY-22 | 자격 증명 관리 | 자격 증명 관리가 체계적이지 않고 수동적인가? | Traditional | Critical | +| ZT-SY-23 | 자격 증명 관리 | 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | Initial | High | +| ZT-SY-24 | 자격 증명 관리 | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | Initial | High | +| ZT-SY-25 | 자격 증명 관리 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | Advanced | Medium | +| ZT-SY-26 | 자격 증명 관리 | 자격 증명 관리 시스템을 고도화하여 관리하는가? | Advanced | Medium | +| ZT-SY-27 | 자격 증명 관리 | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | Advanced | Medium | +| ZT-SY-28 | 자격 증명 관리 | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | Advanced | Medium | +| ZT-SY-29 | 자격 증명 관리 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | Optimal | Low | +| ZT-SY-30 | 자격 증명 관리 | 실시간으로 인증 정책 조정이 가능한가? | Optimal | Low | +| ZT-SY-31 | 자격 증명 관리 | 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | Optimal | Low | +| ZT-SY-32 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | Traditional | Critical | +| ZT-SY-33 | 네트워크 세분화 및 그룹 간 이동 | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | Traditional | Critical | +| ZT-SY-34 | 네트워크 세분화 및 그룹 간 이동 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | Initial | High | +| ZT-SY-35 | 네트워크 세분화 및 그룹 간 이동 | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | Initial | High | +| ZT-SY-36 | 네트워크 세분화 및 그룹 간 이동 | 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | Advanced | Medium | +| ZT-SY-37 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | Advanced | Medium | +| ZT-SY-38 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | Advanced | Medium | +| ZT-SY-39 | 네트워크 세분화 및 그룹 간 이동 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | Optimal | Low | +| ZT-SY-40 | 네트워크 세분화 및 그룹 간 이동 | 재인증 없는 그룹 간 이동이 가능한가? | Optimal | Low | +| ZT-SY-41 | 네트워크 세분화 및 그룹 간 이동 | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | Optimal | Low | +| ZT-SY-42 | 시스템 환경에 따른 정책 관리 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | Traditional | Critical | +| ZT-SY-43 | 시스템 환경에 따른 정책 관리 | 수동으로 보안 정책을 유지/관리하고 있는가? | Traditional | Critical | +| ZT-SY-44 | 시스템 환경에 따른 정책 관리 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | Initial | High | +| ZT-SY-45 | 시스템 환경에 따른 정책 관리 | 정책이 자동으로 적용되는가? | Initial | High | +| ZT-SY-46 | 시스템 환경에 따른 정책 관리 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | Advanced | Medium | +| ZT-SY-47 | 시스템 환경에 따른 정책 관리 | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | Advanced | Medium | +| ZT-SY-48 | 시스템 환경에 따른 정책 관리 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | Optimal | Low | +| ZT-SY-49 | 시스템 환경에 따른 정책 관리 | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | Optimal | Low | + +### SY Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 접근통제 | 수동 권한 부여, RBAC | 중앙 집중 권한, 실시간 부여, 자동 반영 | ABAC, 동적 실시간 권한 | 실시간 분석/조정, 신뢰도 재산정, 위험 분석 기반 | +| PAM | PAM 시스템/정책 구축 | 모니터링/제어, 자동 승인 | 비정상 활동 탐지 | AI 기반 위협 탐지/대응 | +| 자격 증명 관리 | 수동 관리, 패스워드 의존 | 중앙 자동화, MFA | 생체 인증, 고도화, 무결성, AI 분석 | 실시간 차단/정책 조정, 자율 운영 | +| 네트워크 세분화 및 그룹 간 이동 | 통제 미흡, 경계형 모델 | 중요도 기반 분리, 이동 제어 | 워크로드별 세분화, 강력한 접근통제, 실시간 검사 | 실시간 분석/제어, 재인증 없는 이동, 자동 정책 | +| 시스템 환경에 따른 정책 관리 | 온프레미스 보안 정책, 수동 관리 | 클라우드 정책, 자동 적용 | 하이브리드 실시간 조정, 동적 변경 | 자율 정책, 완전 자동화 | + +--- + +## Total: 103 Items (NW: 54 + SY: 49) diff --git a/skills-ko/kesekit-start-ko/templates/zero-trust/ot-environment.md b/skills-ko/kesekit-start-ko/templates/zero-trust/ot-environment.md new file mode 100644 index 0000000..0331c34 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/zero-trust/ot-environment.md @@ -0,0 +1,51 @@ +# OT/ICS Zero Trust Environment Checklist + +> Zero Trust Maturity Assessment — OT/ICS (Operational Technology / Industrial Control Systems) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), IEC 62443, NIST SP 800-82 + +## OT/ICS Zero Trust Considerations + +OT/ICS environments require special Zero Trust deployment strategies due to: +- Legacy systems that cannot support modern authentication +- Real-time operational requirements (latency sensitivity) +- Safety-critical functions that must not be disrupted +- Air-gapped or semi-isolated network architectures +- Long equipment lifecycles (15-30 years) + +## OT-ZT Assessment Items + +| ID | Category | Verification | Maturity | Severity | +|----|----------|-------------|----------|----------| +| OT-ZT-01 | Network Segmentation | OT 네트워크와 IT 네트워크가 물리적/논리적으로 분리되어 있는가? | Traditional | Critical | +| OT-ZT-02 | Network Segmentation | DMZ를 통한 OT-IT 간 데이터 교환이 통제되고 있는가? | Traditional | Critical | +| OT-ZT-03 | Network Segmentation | Purdue Model 또는 IEC 62443 zone/conduit 기반 세그멘테이션이 적용되어 있는가? | Initial | High | +| OT-ZT-04 | Network Segmentation | 마이크로 세그멘테이션이 OT 환경 내부에 적용되어 있는가? | Advanced | Medium | +| OT-ZT-05 | Network Segmentation | SDN 기반 동적 세그멘테이션이 OT 환경에 적용 가능한가? | Optimal | Low | +| OT-ZT-06 | Identity & Access | OT 시스템 접근에 대한 사용자 인증이 수행되는가? | Traditional | Critical | +| OT-ZT-07 | Identity & Access | OT 전용 계정 관리 및 최소 권한 원칙이 적용되어 있는가? | Initial | High | +| OT-ZT-08 | Identity & Access | OT 환경에서 MFA가 적용되어 있는가 (물리적 토큰 포함)? | Initial | High | +| OT-ZT-09 | Identity & Access | OT 원격 접속에 대한 별도 인증 및 모니터링이 수행되는가? | Advanced | Medium | +| OT-ZT-10 | Identity & Access | 비정상적인 OT 접근 시도에 대한 실시간 탐지 및 대응이 가능한가? | Optimal | Low | +| OT-ZT-11 | Device Management | OT 자산 인벤토리가 문서화되어 있는가? | Traditional | Critical | +| OT-ZT-12 | Device Management | OT 디바이스 식별 및 분류 체계가 구축되어 있는가? | Initial | High | +| OT-ZT-13 | Device Management | OT 디바이스 보안 상태 자동 모니터링이 가능한가? | Advanced | Medium | +| OT-ZT-14 | Device Management | 레거시 OT 장비에 대한 보안 래퍼/프록시가 적용되어 있는가? | Advanced | Medium | +| OT-ZT-15 | Device Management | AI 기반 OT 자산 관리 및 이상 탐지가 가능한가? | Optimal | Low | +| OT-ZT-16 | Communication Security | OT 프로토콜(Modbus, OPC UA, DNP3 등) 트래픽이 모니터링되는가? | Traditional | Critical | +| OT-ZT-17 | Communication Security | OT 통신에 대한 암호화가 적용되어 있는가 (가능한 경우)? | Initial | High | +| OT-ZT-18 | Communication Security | OT 프로토콜 이상 탐지(DPI) 시스템이 도입되어 있는가? | Advanced | Medium | +| OT-ZT-19 | Communication Security | OT 환경 전용 위협 인텔리전스가 적용되어 있는가? | Optimal | Low | +| OT-ZT-20 | Safety & Availability | ZT 정책 적용 시 안전 기능(Safety Function)에 영향이 없는지 검증되었는가? | Traditional | Critical | +| OT-ZT-21 | Safety & Availability | ZT 정책 실패 시 fail-open/fail-safe 동작이 정의되어 있는가? | Initial | High | +| OT-ZT-22 | Safety & Availability | ZT 구성 변경에 대한 OT 영향도 분석 프로세스가 수립되어 있는가? | Advanced | Medium | +| OT-ZT-23 | Monitoring & Response | OT 환경 전용 SOC/보안 모니터링 체계가 수립되어 있는가? | Initial | High | +| OT-ZT-24 | Monitoring & Response | IT-OT 통합 보안 이벤트 분석이 가능한가? | Advanced | Medium | +| OT-ZT-25 | Monitoring & Response | OT 환경에 대한 자동화된 인시던트 대응이 가능한가? | Optimal | Low | + +## Deployment Strategy for OT + +1. **Phase 1 — Visibility**: Asset discovery, traffic mapping, baseline establishment +2. **Phase 2 — Segmentation**: IT-OT separation, zone/conduit implementation +3. **Phase 3 — Access Control**: Identity-based access, MFA for remote access +4. **Phase 4 — Monitoring**: Continuous monitoring, anomaly detection +5. **Phase 5 — Automation**: Automated response (with safety validation) diff --git a/skills-ko/kesekit-start-ko/templates/zero-trust/overview.md b/skills-ko/kesekit-start-ko/templates/zero-trust/overview.md new file mode 100644 index 0000000..0bdd288 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/zero-trust/overview.md @@ -0,0 +1,69 @@ +# Zero Trust Overview + +> Zero Trust Maturity Assessment — Overview & Assessment Guide +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), NIST SP 800-207, CISA ZT Maturity Model + +## Zero Trust Principles + +- **Never Trust, Always Verify**: Every access request must be authenticated and authorized regardless of network location +- **Assume Breach**: Minimize blast radius through microsegmentation and least-privilege access +- **Verify Explicitly**: Use all available data points (identity, location, device health, service/workload, data classification, anomalies) + +## 8 Core Elements + +| # | Element | Code | Items | +|---|---------|------|:-----:| +| 1 | Identity (식별자 및 신원) | ID | 53 | +| 2 | Device (디바이스 및 엔드포인트) | DV | ~50 | +| 3 | Network (네트워크) | NW | 54 | +| 4 | System (시스템) | SY | ~45 | +| 5 | Application (애플리케이션 및 워크로드) | AP | 60 | +| 6 | Data (데이터) | DA | ~50 | +| 7 | Visibility (가시성 및 분석) | VA | 43 | +| 8 | Automation (자동화 및 오케스트레이션) | AU | ~41 | + +**Total: ~396 items across 4 maturity levels** + +## 4 Maturity Levels + +| Level | Description | Target | +|-------|-------------|--------| +| **Traditional** | Perimeter-based security, manual processes | Baseline awareness | +| **Initial** | Some ZT controls adopted, partial automation | Early adopters | +| **Advanced** | Centralized management, context-aware policies, AI-assisted | Mature organizations | +| **Optimal** | Fully automated, real-time adaptive, AI-driven orchestration | Industry leaders | + +## Assessment Flow + +1. Determine target maturity level based on organizational goals +2. Select relevant core elements based on system context +3. Assess each item at or below the target maturity level +4. Items above target maturity level are informational (not scored) +5. Generate gap analysis comparing current state vs. target + +## Template Files + +| Topic | File | +|-------|------| +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | + +## Reference Files + +| Topic | File | +|-------|------| +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +## Judgment Criteria + +| Judgment | Description | +|----------|-------------| +| Pass (양호) | ZT control properly implemented at target maturity level | +| Partial (부분이행) | Control partially implemented, improvement needed | +| Fail (취약) | Control not implemented or significantly below target | +| N/A (해당없음) | Not applicable to the environment | diff --git a/skills-ko/kesekit-start-ko/templates/zero-trust/visibility-automation.md b/skills-ko/kesekit-start-ko/templates/zero-trust/visibility-automation.md new file mode 100644 index 0000000..7dca723 --- /dev/null +++ b/skills-ko/kesekit-start-ko/templates/zero-trust/visibility-automation.md @@ -0,0 +1,128 @@ +# Visibility & Automation Checklist + +> Zero Trust Maturity Assessment — Visibility (VA) & Automation (AU) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## VA — 가시성 및 분석 (Visibility) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-VA-01 | 모든 관련 활동 기록 | 로그 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-VA-02 | 모든 관련 활동 기록 | 로그 데이터가 특정한 시스템에서만 수집되는가? | Traditional | Critical | +| ZT-VA-03 | 모든 관련 활동 기록 | 다양한 시스템에서 자동으로 로그를 수집하는가? | Initial | High | +| ZT-VA-04 | 모든 관련 활동 기록 | 로그 수집 및 관리가 자동화 되었는가? | Initial | High | +| ZT-VA-05 | 모든 관련 활동 기록 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-VA-06 | 모든 관련 활동 기록 | 로그 기록의 무결성을 보장하는가? | Advanced | Medium | +| ZT-VA-07 | 모든 관련 활동 기록 | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | Advanced | Medium | +| ZT-VA-08 | 모든 관련 활동 기록 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | Optimal | Low | +| ZT-VA-09 | 모든 관련 활동 기록 | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | Optimal | Low | +| ZT-VA-10 | 모든 관련 활동 기록 | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | Optimal | Low | +| ZT-VA-11 | 중앙집중적 보안 정보 및 이벤트 관리 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | Traditional | Critical | +| ZT-VA-12 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템이 도입되었는가? | Initial | High | +| ZT-VA-13 | 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 보안 관리 체계가 구축되었는가? | Initial | High | +| ZT-VA-14 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | Advanced | Medium | +| ZT-VA-15 | 중앙집중적 보안 정보 및 이벤트 관리 | AI 기반으로 보안 이벤트를 분석하는가? | Optimal | Low | +| ZT-VA-16 | 중앙집중적 보안 정보 및 이벤트 관리 | 비정상적인 활동에 대하여 자동 대응이 가능한가? | Optimal | Low | +| ZT-VA-17 | 보안 위협 분석 | 보안 로그 및 데이터를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-18 | 보안 위협 분석 | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-19 | 보안 위협 분석 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | Initial | High | +| ZT-VA-20 | 보안 위협 분석 | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | Initial | High | +| ZT-VA-21 | 보안 위협 분석 | 자동화된 보안 위협 분석 도구를 도입하였는가? | Advanced | Medium | +| ZT-VA-22 | 보안 위협 분석 | 실시간 보안 위협 탐지가 가능한가? | Advanced | Medium | +| ZT-VA-23 | 보안 위협 분석 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | Optimal | Low | +| ZT-VA-24 | 사용자 및 기기 동작 분석 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | Traditional | Critical | +| ZT-VA-25 | 사용자 및 기기 동작 분석 | 비정상 행동을 수동으로 탐지하는가? | Traditional | Critical | +| ZT-VA-26 | 사용자 및 기기 동작 분석 | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | Traditional | Critical | +| ZT-VA-27 | 사용자 및 기기 동작 분석 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | Initial | High | +| ZT-VA-28 | 사용자 및 기기 동작 분석 | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | Initial | High | +| ZT-VA-29 | 사용자 및 기기 동작 분석 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | Advanced | Medium | +| ZT-VA-30 | 사용자 및 기기 동작 분석 | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | Advanced | Medium | +| ZT-VA-31 | 사용자 및 기기 동작 분석 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | Optimal | Low | +| ZT-VA-32 | 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-33 | 위협 인텔리전스 통합 | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | Traditional | Critical | +| ZT-VA-34 | 위협 인텔리전스 통합 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | Initial | High | +| ZT-VA-35 | 위협 인텔리전스 통합 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | Advanced | Medium | +| ZT-VA-36 | 위협 인텔리전스 통합 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | Optimal | Low | +| ZT-VA-37 | 자동화된 동적 정책 | 보안 정책을 수동으로 관리하는가? | Traditional | Critical | +| ZT-VA-38 | 자동화된 동적 정책 | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | Traditional | Critical | +| ZT-VA-39 | 자동화된 동적 정책 | 자동화된 정책 관리 시스템을 도입하였는가? | Initial | High | +| ZT-VA-40 | 자동화된 동적 정책 | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | Initial | High | +| ZT-VA-41 | 자동화된 동적 정책 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | Advanced | Medium | +| ZT-VA-42 | 자동화된 동적 정책 | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | Advanced | Medium | +| ZT-VA-43 | 자동화된 동적 정책 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | Optimal | Low | + +### VA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 모든 관련 활동 기록 | 수동 로그, 특정 시스템 수집 | 자동 로그 수집, 관리 자동화 | 실시간 탐지, 무결성, 예측 분석 | 자율 보안, 정규화, 자동 정책 조정 | +| 중앙집중적 보안 정보/이벤트 관리 | 수동 분석 | SIEM 도입, 중앙 관리 | 보안 도구 연동 종합 분석 | AI 분석, 자동 대응 | +| 보안 위협 분석 | 수동 로그/CVE 수집 | 평가 기준, 자동 경고 | 자동화 분석, 실시간 탐지 | AI 예측 분석 | +| 사용자/기기 동작 분석 | 활동 데이터 수집, 수동 탐지, 패턴 기록 | 자동 분석 도구 도입 | 행동 분석 탐지, AI 실시간 대응 | 자동 정책 조정, 최소 권한 | +| 위협 인텔리전스 통합 | 수동 수집, 수동 연동 | 자동 통합 도구 | 내부 시스템 통합 | AI 기반 시스템 | +| 자동화된 동적 정책 | 수동 관리, 수동 대응 | 자동 정책 관리, 자동 변경 | 실시간 조정, 위협 연계 | AI 자율 정책 조정 | + +--- + +## AU — 자동화 및 통합 (Automation) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AU-01 | 정책 통합 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | Traditional | Critical | +| ZT-AU-02 | 정책 통합 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-AU-03 | 정책 통합 | 정책 변경이 자동으로 이루어지는가? | Initial | High | +| ZT-AU-04 | 정책 통합 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | Advanced | Medium | +| ZT-AU-05 | 정책 통합 | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | Advanced | Medium | +| ZT-AU-06 | 정책 통합 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-07 | 중요 프로세스 자동화 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | Traditional | Critical | +| ZT-AU-08 | 중요 프로세스 자동화 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | Initial | High | +| ZT-AU-09 | 중요 프로세스 자동화 | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | Initial | High | +| ZT-AU-10 | 중요 프로세스 자동화 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | Advanced | Medium | +| ZT-AU-11 | 중요 프로세스 자동화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-12 | 인공지능 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-13 | 인공지능 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | Initial | High | +| ZT-AU-14 | 인공지능 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | Advanced | Medium | +| ZT-AU-15 | 인공지능 | AI가 모든 보안 시스템에 완전히 통합되었는가? | Optimal | Low | +| ZT-AU-16 | 인공지능 | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | Optimal | Low | +| ZT-AU-17 | 보안 통합, 자동화 및 대응 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | Traditional | Critical | +| ZT-AU-18 | 보안 통합, 자동화 및 대응 | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | Traditional | Critical | +| ZT-AU-19 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 도입하였는가? | Initial | High | +| ZT-AU-20 | 보안 통합, 자동화 및 대응 | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | Initial | High | +| ZT-AU-21 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | Advanced | Medium | +| ZT-AU-22 | 보안 통합, 자동화 및 대응 | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | Advanced | Medium | +| ZT-AU-23 | 보안 통합, 자동화 및 대응 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | Optimal | Low | +| ZT-AU-24 | 보안 통합, 자동화 및 대응 | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | Optimal | Low | +| ZT-AU-25 | 데이터 교환 표준화 | 수집된 데이터가 상이한 형식으로 저장되는가? | Traditional | Critical | +| ZT-AU-26 | 데이터 교환 표준화 | 데이터 교환이 비효율적으로 이루어지는가? | Traditional | Critical | +| ZT-AU-27 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-28 | 데이터 교환 표준화 | 데이터 교환 표준을 도입하였는가? | Initial | High | +| ZT-AU-29 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 자동화되었는가? | Initial | High | +| ZT-AU-30 | 데이터 교환 표준화 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | Advanced | Medium | +| ZT-AU-31 | 데이터 교환 표준화 | 여러 보안 도구 간의 상호 운용성이 제공되는가? | Advanced | Medium | +| ZT-AU-32 | 데이터 교환 표준화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | Optimal | Low | +| ZT-AU-33 | 데이터 교환 표준화 | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | Optimal | Low | +| ZT-AU-34 | 데이터 교환 표준화 | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | Optimal | Low | +| ZT-AU-35 | 보안 운영 조정 및 사고 대응 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | Traditional | Critical | +| ZT-AU-36 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 절차가 정형화되어 있지 않는가? | Traditional | Critical | +| ZT-AU-37 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | Initial | High | +| ZT-AU-38 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | Initial | High | +| ZT-AU-39 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | Advanced | Medium | +| ZT-AU-40 | 보안 운영 조정 및 사고 대응 | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | Advanced | Medium | +| ZT-AU-41 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | Optimal | Low | +| ZT-AU-42 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | Optimal | Low | +| ZT-AU-43 | 보안 운영 조정 및 사고 대응 | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | Optimal | Low | + +### AU Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 정책 통합 | 수동 시스템별 변경 | 중앙 관리, 자동 변경 | 실시간 동적 조정, 즉각 수정 | AI 자율 정책 조정 | +| 중요 프로세스 자동화 | 수동 절차 의존 | 자동화 도구, 백업/장애 대응 자동화 | 보안 사고 자동 대응 | 실시간 최적화, 무중단 조정 | +| 인공지능 | 수동 수집/분석/대응 | 기본 AI 도구, 패턴 식별 | AI 고도화, 실시간 탐지/대응 | 완전 통합, 자율 감지/대응/조정 | +| 보안 통합/자동화/대응 | 독립 운영, 수동 대응 | SOAR 도입, 중앙 대응 | SOAR 고도화, 실시간 통합 | 중앙 자동 처리, 자율 통합 | +| 데이터 교환 표준화 | 상이한 형식, 비효율적, 수동 교환 | 표준 도입, 교환 자동화 | 외부 공유, 상호 운용성 | 자율 관리, 일관된 형식, 실시간 교환 | +| 보안 운영 조정/사고 대응 | 수동 소통, 비정형 절차 | 대응 계획, 자동 경고 | 자동 대응, 실시간 조율, 자동 보고 | 사전 예측, 완전 자동화, 실시간 협력 | + +--- + +## Total: 86 Items (VA: 43 + AU: 43) diff --git a/skills-ko/start/SKILL.md b/skills-ko/start/SKILL.md deleted file mode 100644 index 7b8b39c..0000000 --- a/skills-ko/start/SKILL.md +++ /dev/null @@ -1,163 +0,0 @@ ---- -name: start -description: KISA 기반 보안 취약점 분석평가를 수행합니다. 주요정보통신기반시설(CII) 기술/관리/물리 취약점(560항목)과 AI 보안 안내서(개발자/서비스제공자/이용자) 평가를 지원합니다. "보안 점검", "취약점 분석", "기반시설 감사", "KISA 점검", "보안 평가", "AI 보안 점검", "AI 보안 평가" 시 반드시 이 스킬을 사용하세요. ---- - -# KESE 보안 취약점 분석평가 - -KISA 가이드라인에 따른 보안 취약점 분석평가를 수행합니다. 사용자의 환경과 목적에 맞는 가이드라인을 자동으로 선택하여 평가를 진행합니다. - -## 가이드라인 선택 - -사용자에게 어떤 분야의 보안 점검을 원하는지 확인합니다. 명확하지 않으면 아래 목록을 보여주고 선택하게 합니다. - -### 사용 가능한 가이드라인 - -| # | 가이드라인 | 설명 | 항목 수 | -|---|----------|------|:------:| -| 1 | **주요정보통신기반시설(CII)** | 기술적(424)+관리적(127)+물리적(18) 취약점 | ~560 | -| 2 | **AI 보안** | AI 개발자/서비스제공자/이용자 보안 요구사항 | ~54 | -| 3 | **로봇 보안** | 산업용/서비스용/의료용 로봇 보안 체크리스트 (11개 카테고리) | ~103 | - -### 자동 판별 기준 - -- 서버, 네트워크, 데이터베이스, 웹 서비스, 방화벽 등 → **CII** -- AI 모델, LLM, 생성형 AI, 머신러닝, 프롬프트 등 → **AI 보안** -- 로봇, 산업용 로봇, 서비스 로봇, 의료용 로봇, ROS, PLC 등 → **로봇 보안** -- 클라우드, 가상화 → 맥락에 따라 CII 또는 AI 보안 - ---- - -## CII 분기 시 - -`references/cii/` 디렉터리에서 대상 시스템에 해당하는 reference 파일을 읽어 평가를 수행합니다. - -### 1단계: 환경 탐지 - -자동 탐지 또는 사용자 질문으로 대상 시스템을 파악합니다: - -| 시스템 | reference 파일 | 항목 수 | -|--------|---------------|:------:| -| Unix/Linux 서버 | `references/cii/unix.md` | 67 | -| Windows 서버 | `references/cii/windows.md` | 64 | -| 웹 서비스 | `references/cii/web-service.md` | 26 | -| 보안 장비 | `references/cii/security-equip.md` | 23 | -| 네트워크 장비 | `references/cii/network.md` | 38 | -| 제어시스템 | `references/cii/control-system.md` | 46 | -| PC | `references/cii/pc.md` | 18 | -| DBMS | `references/cii/database.md` | 26 | -| 이동통신 | `references/cii/mobile.md` | 4 | -| Web Application | `references/cii/webapp.md` | 21 | -| 가상화 장비 | `references/cii/virtualization.md` | 25 | -| 클라우드 | `references/cii/cloud.md` | 19 | -| 관리적 취약점 | `references/cii/admin.md` | 127 | -| 물리적 취약점 | `references/cii/physical.md` | 18 | - -### 2단계: 취약점 분석 - -해당 reference 파일을 Read로 로드한 후, 각 항목에 대해 점검합니다. - -### 3단계: 보고서 생성 - -``` -reports/kese/ -├── summary.md ← 전체 평가 요약 -├── technical/ ← 시스템별 기술적 취약점 결과 -├── administrative/ ← 관리적 취약점 결과 -└── physical/ ← 물리적 취약점 결과 -``` - -### 판단 기준 - -| 판단 | 설명 | -|------|------| -| 양호 | 보안 설정이 적절히 적용됨 | -| 부분이행 | 일부 구현되었으나 개선 필요 | -| 취약 | 보안 취약점 존재 | -| 해당없음 | 해당 환경에 적용 불가 | - ---- - -## AI 보안 분기 시 - -`references/ai-security/` 디렉터리에서 대상에 해당하는 reference를 읽어 평가를 수행합니다. - -### 1단계: 대상 확인 - -| 대상 | reference 파일 | -|------|---------------| -| 전체 개요 | `references/ai-security/overview.md` | -| AI 개발자 | `references/ai-security/developer.md` | -| AI 서비스 제공자 | `references/ai-security/service-provider.md` | -| AI 이용자 | `references/ai-security/user-guide.md` | - -### 2단계: 생명주기별 평가 - -AI 보안은 6단계 생명주기에 따라 점검합니다: -1. 계획 및 설계 -2. 데이터 수집 및 준비 -3. 모델 개발 -4. 모델 배포 -5. 모니터링 및 유지보수 -6. 파기 - -### 3단계: 보고서 생성 - -``` -reports/ai-security/ -├── summary.md ← 전체 평가 요약 -├── developer.md ← 개발자 보안 검증 결과 -├── service-provider.md ← 서비스 제공자 검증 결과 -└── user-checklist.md ← 이용자 체크리스트 결과 -``` - ---- - -## 로봇 보안 분기 시 - -`references/robot-security/` 디렉터리에서 해당 reference를 읽어 평가를 수행합니다. - -### 1단계: 대상 확인 - -| 대상 | reference 파일 | -|------|---------------| -| 전체 개요 | `references/robot-security/overview.md` | -| SSDF (보안 SW 개발) | `references/robot-security/ssdf.md` | -| 공급망 보안 | `references/robot-security/supply-chain.md` | -| IEC 62443 기반 (IA, UC, SI, DP, DFR, ER, RA) | `references/robot-security/iec62443.md` | -| 사이버 복원력 | `references/robot-security/cyber-resilience.md` | -| 무선 보안 | `references/robot-security/wireless.md` | - -### 2단계: 카테고리별 평가 - -11개 카테고리, 총 ~103개 체크리스트 항목을 점검합니다. - -### 3단계: 보고서 생성 - -``` -reports/robot-security/ -├── summary.md ← 전체 평가 요약 -├── ssdf.md ← SSDF 19항목 결과 -├── supply-chain.md ← 공급망 7항목 결과 -├── iec62443.md ← IEC 62443 50항목 결과 -├── cyber-resilience.md ← 사이버 복원력 13항목 결과 -└── wireless.md ← 무선 보안 14항목 결과 -``` - ---- - -## 우선순위 - -### 긴급 (즉시 조치) -- 계정 관리 취약점, 미패치 취약점, 인젝션, 민감 데이터 미암호화 - -### 높음 (일정 내 조치) -- 설정 취약점, 보안 헤더 누락, 불완전한 로깅 - -### 보통 (개선 권고) -- 하드닝 권고, 문서화 부족 - -## 참고사항 -- 평가 중 파일을 수정하지 마세요 — 읽기 전용입니다 -- 해당 기술이 환경에 없는 경우 해당없음으로 표시하세요 -- 발견된 각 취약점에 대해 구체적인 조치 방안을 제시하세요 diff --git a/skills/check/SKILL.md b/skills/check/SKILL.md deleted file mode 100644 index fb4aa6e..0000000 --- a/skills/check/SKILL.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -name: check -description: Run a pre-deployment security compliance checklist based on KISA guidelines. Supports CII compliance (70 items covering accounts, access control, encryption, logging, hardening) and AI security checklists. Use when "pre-deploy check", "compliance checklist", "deployment ready", "security checklist", "AI security check". ---- - -# KESE Pre-Deployment Security Compliance Checklist - -Run pre-deployment security checks. Auto-selects guideline based on user context. - -## Guideline Selection - -| # | Guideline | Description | -|---|-----------|-------------| -| 1 | **CII Compliance** | 70-item pre-deployment checklist | -| 2 | **AI Security Checklist** | AI developer/provider verification | -| 3 | **Robot Security Checklist** | Robot system 11 categories, 103 items | - -Servers, infrastructure → **CII** / AI models, LLM → **AI Security** - ---- - -## CII Branch - -Load reference files from `references/cii/` based on detected environment. Check categories: Account Security (15), Access Control (15), Encryption (12), Logging (10), Service Hardening (12), Patch Management (6). - -Severity: Critical (deployment blocker) → High → Medium → Low - -## AI Security Branch - -Load from `references/ai-security/`. Check developer (54 items), service provider, or user checklists by lifecycle phase. - ---- - -## Rules -- Never skip Critical severity items -- Provide specific file paths and commands for fixes -- Block deployment if pass rate < 60% diff --git a/skills/check/references/ai-security/user-guide.md b/skills/check/references/ai-security/user-guide.md deleted file mode 100644 index 1c3f1e3..0000000 --- a/skills/check/references/ai-security/user-guide.md +++ /dev/null @@ -1,70 +0,0 @@ -# AI 이용자를 위한 보안 수칙 - -> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 - -## 1. AI 이용자에게 발생할 수 있는 보안 위협 - -### 1.1 챗봇 통한 데이터 유출 -- AI 챗봇 서비스에서 다른 사용자의 개인정보가 노출되는 사례 -- 학습 데이터에 포함된 민감정보가 출력될 가능성 - -### 1.2 AI 음성비서 도청/해킹 -- 스마트 스피커에 레이저/음파를 이용한 명령 주입 -- 백그라운드 실행을 통한 비밀번호 탈취 유도 - -### 1.3 악성 링크/피싱 -- AI가 생성한 정교한 피싱 메시지 -- AI 서비스를 가장한 악성 사이트 - -### 1.4 딥페이크 -- AI 기반 얼굴/음성 합성을 이용한 사기 -- 가짜 영상/음성을 통한 신원 도용 - -### 1.5 안면인식 해킹 -- AI 안면인식 시스템의 우회 공격 -- 적대적 예제를 이용한 인증 우회 - -### 1.6 사이버 테러 -- AI를 악용한 대규모 자동화 공격 -- AI 기반 악성코드 생성 - ---- - -## 2. AI 서비스 이용 보안 수칙 - -### 수칙 1: 안전한 서비스 접근 -- **공식 경로로 다운로드**: 공식 앱 스토어, 공식 웹사이트에서만 AI 서비스 다운로드 -- **강력한 비밀번호 사용**: 영문+숫자+특수문자 조합, 8자 이상 -- **MFA 활성화**: 가능한 경우 다중 인증 설정 -- **공공 네트워크 주의**: 공공 Wi-Fi에서 AI 서비스 이용 시 VPN 사용 권장 -- **이용약관 확인**: AI 서비스의 데이터 수집/활용 정책 확인 - -### 수칙 2: 안전한 서비스 사용 -- **민감정보 입력 금지**: AI 챗봇에 비밀번호, 주민번호, 카드번호 등 입력하지 않기 -- **AI 출력 결과 검증**: AI가 생성한 정보의 정확성을 반드시 확인 -- **의심스러운 결과 신고**: 부적절하거나 유해한 AI 출력 발견 시 서비스 제공자에게 신고 -- **사용 후 데이터 삭제**: AI 서비스 이용 후 대화 기록 등 불필요한 데이터 삭제 -- **주기적 권한 검토**: AI 서비스에 부여한 권한(카메라, 마이크, 위치 등) 주기적 확인 - -### 수칙 3: 딥페이크 대응 -- 영상 통화 시 비정상적 움직임, 음질 이상 주의 -- 금전 요청이나 긴급 상황을 주장하는 연락은 별도 채널로 확인 - -### 수칙 4: AI 음성비서 보안 -- 사용하지 않을 때 마이크 비활성화 -- 음성 구매 기능 비밀번호 설정 -- 정기적으로 음성 기록 검토 및 삭제 - ---- - -## 3. 체크리스트 요약 - -| # | 항목 | 확인 | -|---|------|:----:| -| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | -| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | -| 3 | AI 서비스 이용약관을 확인했는가? | □ | -| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | -| 5 | AI 출력 결과를 검증하고 있는가? | □ | -| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | -| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills/check/references/cii/cloud.md b/skills/check/references/cii/cloud.md deleted file mode 100644 index ef26ef5..0000000 --- a/skills/check/references/cii/cloud.md +++ /dev/null @@ -1,64 +0,0 @@ -# 클라우드 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: AWS, Azure, GCP 등 클라우드 환경 - -## 1. 계정 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-01 | 클라우드 관리 콘솔 기본 계정 변경 | 상 | -| CA-02 | 비밀번호 복잡성 및 MFA 설정 | 상 | -| CA-03 | 불필요한 계정/키 제거 | 상 | -| CA-04 | 루트/관리자 계정 직접 사용 제한 | 상 | - -## 2. 권한 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-05 | IAM 최소 권한 원칙 적용 | 상 | -| CA-06 | 서비스 계정/역할 권한 제한 | 상 | - -## 3. 가상 리소스 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-07 | 보안 그룹/네트워크 ACL 설정 | 상 | -| CA-08 | 스토리지 접근 권한 및 암호화 | 상 | -| CA-09 | 가상 네트워크 분리 (VPC/서브넷) | 상 | -| CA-10 | 미사용 리소스 점검 및 제거 | 중 | - -## 4. 운영 관리 (9항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-11 | 클라우드 감사 로깅 활성화 | 상 | -| CA-12 | 보안 모니터링 및 알림 설정 | 상 | -| CA-13 | 데이터 백업 및 복구 정책 | 상 | -| CA-14 | 보안 패치 및 이미지 관리 | 상 | -| CA-15 | API 키/시크릿 관리 | 상 | -| CA-16 | 전송 중/저장 시 암호화 | 상 | -| CA-17 | 인스턴스 메타데이터 보호 | 중 | -| CA-18 | 컨테이너/서버리스 보안 설정 | 중 | -| CA-19 | 클라우드 서비스 가용성 관리 | 중 | - -### 주요 점검 명령어 -```bash -# AWS -aws iam list-users -aws iam get-credential-report -aws ec2 describe-security-groups -aws s3api get-bucket-encryption --bucket -aws cloudtrail describe-trails - -# Azure -az ad user list -az network nsg list -az storage account list - -# GCP -gcloud iam service-accounts list -gcloud compute firewall-rules list -``` - -## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills/check/references/cii/database.md b/skills/check/references/cii/database.md deleted file mode 100644 index 67e8efc..0000000 --- a/skills/check/references/cii/database.md +++ /dev/null @@ -1,69 +0,0 @@ -# DBMS 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Oracle DB, MSSQL, MySQL, PostgreSQL, Altibase, Tibero, Cubrid - -## 1. 계정 관리 (9항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-01 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | 상 | -| D-02 | 불필요 계정 제거 또는 잠금설정 | 상 | -| D-03 | 비밀번호 사용기간 및 복잡도 설정 | 상 | -| D-04 | 관리자 권한을 필요한 계정/그룹에만 허용 | 상 | -| D-05 | 비밀번호 재사용 제약 설정 | 중 | -| D-06 | DB 사용자 계정 개별 부여 | 중 | -| D-07 | root 권한으로 서비스 구동 제한 | 중 | -| D-08 | 안전한 암호화 알고리즘 사용 | 상 | -| D-09 | 로그인 실패 시 잠금정책 설정 | 중 | - -### 주요 점검 명령어 -```sql --- Oracle: 계정 확인 -SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; --- Oracle: 비밀번호 변경 -ALTER USER <계정> IDENTIFIED BY <신규비밀번호>; - --- MSSQL: sa 비밀번호 변경 -ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; - --- MySQL: root 비밀번호 변경 -ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; - --- PostgreSQL: 역할 확인 -SELECT rolname, rolsuper FROM pg_roles; -``` - -## 2. 접근 관리 (7항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-10 | 원격에서 DB 서버 접속 제한 | 상 | -| D-11 | 비인가 사용자의 시스템 테이블 접근 차단 | 상 | -| D-12 | 안전한 리스너 비밀번호 설정 | 상 | -| D-13 | 불필요한 ODBC/OLE-DB 데이터 소스 제거 | 중 | -| D-14 | 주요 파일 접근 권한 설정 | 중 | -| D-15 | 리스너 로그/trace 파일 변경 제한 | 하 | -| D-16 | Windows 인증 모드 사용 | 하 | - -## 3. 옵션 관리 (8항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-17 | Audit Table 관리자 접근 제한 | 하 | -| D-18 | Role이 Public으로 설정되지 않도록 조정 | 상 | -| D-19 | OS_ROLES 등 원격 인증 FALSE 설정 | 상 | -| D-20 | 인가되지 않은 Object owner 제한 | 하 | -| D-21 | 인가되지 않은 GRANT OPTION 사용 제한 | 중 | -| D-22 | 자원 제한 기능 TRUE 설정 | 하 | -| D-23 | xp_cmdshell 사용 제한 | 상 | -| D-24 | Registry Procedure 권한 제한 | 상 | - -## 4. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| D-26 | 감사 기록 정책 적합 설정 | 상 | - -## 통계: 총 26항목 (상 13, 중 7, 하 6) diff --git a/skills/check/references/cii/network.md b/skills/check/references/cii/network.md deleted file mode 100644 index 1f99ce4..0000000 --- a/skills/check/references/cii/network.md +++ /dev/null @@ -1,87 +0,0 @@ -# 네트워크 장비 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Cisco, Alteon, Passport, Juniper, Piolink 등 - -## 1. 계정 관리 (5항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-01 | 비밀번호 설정 | 상 | -| N-02 | 비밀번호 복잡성 설정 | 상 | -| N-03 | 암호화된 비밀번호 사용 | 상 | -| N-04 | 계정 잠금 임계값 설정 | 상 | -| N-05 | 사용자, 명령어별 권한 수준 설정 | 중 | - -## 2. 접근 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-06 | VTY 접근(ACL) 설정 | 상 | -| N-07 | 세션 종료 시간 설정 | 상 | -| N-08 | VTY 접속 시 안전한 프로토콜 사용 | 중 | -| N-09 | 불필요한 보조 입출력 포트 사용 금지 | 중 | -| N-10 | 로그온 시 경고 메시지 설정 | 중 | -| N-11 | 원격 로그서버 사용 | 중 | - -## 3. 패치 관리 (1항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-12 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | - -## 4. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-13 | 로깅 버퍼 크기 설정 | 중 | -| N-14 | 정책에 따른 로깅 설정 | 중 | -| N-15 | NTP 및 시각 동기화 설정 | 중 | -| N-16 | Timestamp 로그 설정 | 하 | - -## 5. 기능 관리 (22항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-17 | SNMP 서비스 확인 | 상 | -| N-18 | SNMP Community String 복잡성 설정 | 상 | -| N-19 | SNMP ACL 설정 | 상 | -| N-20 | SNMP Community 권한 설정 | 상 | -| N-21 | TFTP 서비스 차단 | 상 | -| N-22 | Spoofing 방지 필터링 적용 | 상 | -| N-23 | DDoS 공격 방어 설정 또는 DDoS 장비 사용 | 상 | -| N-24 | 사용하지 않는 인터페이스 비활성화 | 상 | -| N-25 | TCP Keepalive 서비스 설정 | 중 | -| N-26 | Finger 서비스 차단 | 중 | -| N-27 | 웹 서비스 차단 | 중 | -| N-28 | TCP/UDP small 서비스 차단 | 중 | -| N-29 | Bootp 서비스 차단 | 중 | -| N-30 | CDP 서비스 차단 | 중 | -| N-31 | Directed-broadcast 차단 | 중 | -| N-32 | Source 라우팅 차단 | 중 | -| N-33 | Proxy ARP 차단 | 중 | -| N-34 | ICMP unreachable, Redirect 차단 | 중 | -| N-35 | identd 서비스 차단 | 중 | -| N-36 | Domain Lookup 차단 | 중 | -| N-37 | pad 차단 | 중 | -| N-38 | mask-reply 차단 | 중 | - -### 주요 점검 명령어 (Cisco IOS) -``` -! 계정 관리 -show running-config | include username -show running-config | include enable secret - -! 접근 관리 -show running-config | include line vty -show running-config | include access-class - -! SNMP -show running-config | include snmp-server - -! 불필요 서비스 -show running-config | include no service -show ip http server -``` - -## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills/check/references/cii/pc.md b/skills/check/references/cii/pc.md deleted file mode 100644 index c3dd9fc..0000000 --- a/skills/check/references/cii/pc.md +++ /dev/null @@ -1,62 +0,0 @@ -# PC 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Windows 10, Windows 11 - -## 1. 계정 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-01 | 비밀번호의 주기적 변경 | 상 | -| PC-02 | 비밀번호 관리정책 설정 | 상 | -| PC-03 | 복구 콘솔에서 자동 로그온 금지 설정 | 중 | - -## 2. 서비스 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-04 | 공유 폴더 제거 | 상 | -| PC-05 | 불필요한 서비스 제거 | 상 | -| PC-06 | 비인가 상용 메신저 사용 금지 | 상 | -| PC-07 | 파일 시스템이 NTFS 포맷으로 설정 | 중 | -| PC-08 | 다른 OS로 멀티 부팅 불가 설정 | 중 | -| PC-09 | 브라우저 종료 시 임시 인터넷 파일 삭제 | 하 | - -## 3. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-10 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| PC-11 | 지원 종료되지 않은 Windows OS Build 적용 | 상 | - -## 4. 보안 관리 (7항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-12 | Windows 자동 로그인 점검 | 중 | -| PC-13 | 바이러스 백신 설치 및 주기적 업데이트 | 상 | -| PC-14 | 실시간 감시 기능 활성화 | 상 | -| PC-15 | OS 침입차단 기능 활성화 | 상 | -| PC-16 | 화면보호기 대기 시간 및 암호 보호 설정 | 상 | -| PC-17 | 이동식 미디어 자동실행 방지 | 상 | -| PC-18 | 원격 지원 금지 정책 설정 | 중 | - -### 주요 점검 명령어 -```powershell -# PC-01: 비밀번호 최대 사용기간 -net accounts | findstr "최대" - -# PC-04: 공유 폴더 -net share - -# PC-13~14: 백신 -Get-MpComputerStatus - -# PC-15: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled - -# PC-16: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -``` - -## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills/check/references/cii/unix.md b/skills/check/references/cii/unix.md deleted file mode 100644 index b9688e3..0000000 --- a/skills/check/references/cii/unix.md +++ /dev/null @@ -1,233 +0,0 @@ -# Unix 서버 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: SOLARIS, LINUX, AIX, HP-UX - -## 1. 계정 관리 (13항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-01 | root 계정 원격 접속 제한 | 상 | -| U-02 | 비밀번호 관리정책 설정 | 상 | -| U-03 | 계정 잠금 임계값 설정 | 상 | -| U-04 | 비밀번호 파일 보호 | 상 | -| U-05 | root 이외의 UID가 '0' 금지 | 상 | -| U-06 | 사용자 계정 su 기능 제한 | 상 | -| U-07 | 불필요한 계정 제거 | 하 | -| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | -| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | -| U-10 | 동일한 UID 금지 | 중 | -| U-11 | 사용자 Shell 점검 | 하 | -| U-12 | 세션 종료 시간 설정 | 하 | -| U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | - -### 주요 점검 명령어 -```bash -# U-01: root 원격 접속 제한 -grep -i "PermitRootLogin" /etc/ssh/sshd_config -cat /etc/default/login | grep CONSOLE # Solaris -cat /etc/securetty # Linux - -# U-02: 비밀번호 정책 -cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" -cat /etc/security/pwquality.conf # Linux - -# U-03: 계정 잠금 -cat /etc/pam.d/system-auth | grep pam_tally -cat /etc/security/user | grep loginretries # AIX - -# U-04: shadow 파일 보호 -ls -la /etc/shadow - -# U-05: UID 0 점검 -awk -F: '$3==0 {print $1}' /etc/passwd - -# U-06: su 제한 -cat /etc/pam.d/su | grep pam_wheel -ls -la /usr/bin/su - -# U-12: 세션 타임아웃 -echo $TMOUT -``` - ---- - -## 2. 파일 및 디렉터리 관리 (20항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-14 | root 홈, 패스 디렉터리 권한 및 패스 설정 | 상 | -| U-15 | 파일 및 디렉터리 소유자 설정 | 상 | -| U-16 | /etc/passwd 파일 소유자 및 권한 설정 | 상 | -| U-17 | 시스템 시작 스크립트 권한 설정 | 상 | -| U-18 | /etc/shadow 파일 소유자 및 권한 설정 | 상 | -| U-19 | /etc/hosts 파일 소유자 및 권한 설정 | 상 | -| U-20 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | 상 | -| U-21 | /etc/(r)syslog.conf 파일 소유자 및 권한 설정 | 상 | -| U-22 | /etc/services 파일 소유자 및 권한 설정 | 상 | -| U-23 | SUID, SGID, Sticky bit 설정 파일 점검 | 상 | -| U-24 | 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 | 상 | -| U-25 | world writable 파일 점검 | 상 | -| U-26 | /dev에 존재하지 않는 device 파일 점검 | 상 | -| U-27 | $HOME/.rhosts, hosts.equiv 사용 금지 | 상 | -| U-28 | 접속 IP 및 포트 제한 | 상 | -| U-29 | hosts.lpd 파일 소유자 및 권한 설정 | 하 | -| U-30 | UMASK 설정 관리 | 중 | -| U-31 | 홈 디렉토리 소유자 및 권한 설정 | 중 | -| U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | -| U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | - -### 주요 점검 명령어 -```bash -# U-14: root PATH -echo $PATH | grep "::" -echo $PATH | grep ":$" - -# U-16~U-22: 주요 파일 권한 -ls -la /etc/passwd /etc/shadow /etc/hosts /etc/services -ls -la /etc/inetd.conf /etc/xinetd.conf /etc/syslog.conf /etc/rsyslog.conf - -# U-23: SUID/SGID -find / -perm -4000 -o -perm -2000 2>/dev/null - -# U-25: world writable -find / -type f -perm -002 2>/dev/null - -# U-26: /dev 점검 -find /dev -type f 2>/dev/null - -# U-27: rhosts -find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null - -# U-28: 접속 제한 -cat /etc/hosts.allow -cat /etc/hosts.deny -iptables -L - -# U-30: umask -umask -grep umask /etc/profile /etc/bashrc -``` - ---- - -## 3. 서비스 관리 (30항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-34 | Finger 서비스 비활성화 | 상 | -| U-35 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | -| U-36 | r 계열 서비스 비활성화 | 상 | -| U-37 | crontab 설정파일 권한 설정 | 상 | -| U-38 | DoS 공격에 취약한 서비스 비활성화 | 상 | -| U-39 | 불필요한 NFS 서비스 비활성화 | 상 | -| U-40 | NFS 접근 통제 | 상 | -| U-41 | 불필요한 automountd 제거 | 상 | -| U-42 | 불필요한 RPC 서비스 비활성화 | 상 | -| U-43 | NIS, NIS+ 점검 | 상 | -| U-44 | tftp, talk 서비스 비활성화 | 상 | -| U-45 | 메일 서비스 버전 점검 | 상 | -| U-46 | 일반 사용자의 메일 서비스 실행 방지 | 상 | -| U-47 | 스팸 메일 릴레이 제한 | 상 | -| U-48 | expn, vrfy 명령어 제한 | 중 | -| U-49 | DNS 보안 버전 패치 | 상 | -| U-50 | DNS Zone Transfer 설정 | 상 | -| U-51 | DNS 서비스의 취약한 동적 업데이트 설정 금지 | 중 | -| U-52 | Telnet 서비스 비활성화 | 중 | -| U-53 | FTP 서비스 정보 노출 제한 | 하 | -| U-54 | 암호화되지 않는 FTP 서비스 비활성화 | 중 | -| U-55 | FTP 계정 Shell 제한 | 중 | -| U-56 | FTP 서비스 접근 제어 설정 | 하 | -| U-57 | Ftpusers 파일 설정 | 중 | -| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | -| U-59 | 안전한 SNMP 버전 사용 | 상 | -| U-60 | SNMP Community String 복잡성 설정 | 중 | -| U-61 | SNMP Access Control 설정 | 상 | -| U-62 | 로그인 시 경고 메시지 설정 | 하 | -| U-63 | sudo 명령어 접근 관리 | 중 | - -### 주요 점검 명령어 -```bash -# U-34~U-44: 불필요 서비스 점검 -systemctl list-unit-files --state=enabled -chkconfig --list # CentOS 6 -inetadm # Solaris - -# U-39~U-40: NFS -showmount -e -cat /etc/exports -cat /etc/dfs/dfstab # Solaris - -# U-45~U-48: 메일 서비스 -sendmail -d0.1 -bt < /dev/null 2>&1 | grep Version -postconf mail_version -cat /etc/mail/sendmail.cf | grep "O PrivacyOptions" - -# U-49~U-51: DNS -named -v -cat /etc/named.conf | grep "allow-transfer" - -# U-58~U-61: SNMP -cat /etc/snmp/snmpd.conf | grep -i community -ps -ef | grep snmp -``` - ---- - -## 4. 패치 관리 (1항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | - -```bash -# 패치 현황 -uname -a -rpm -qa --last | head -20 # Linux -showrev -p # Solaris -instfix -i | grep ML # AIX -``` - ---- - -## 5. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-65 | NTP 및 시각 동기화 설정 | 중 | -| U-66 | 정책에 따른 시스템 로깅 설정 | 중 | -| U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | - -```bash -# U-65: NTP -ntpq -p -cat /etc/ntp.conf -chronyc sources # CentOS 8+ - -# U-66: 로깅 설정 -cat /etc/rsyslog.conf -cat /etc/syslog.conf - -# U-67: 로그 권한 -ls -la /var/log/ -``` - ---- - -## 판단 기준 - -| 판단 | 설명 | -|------|------| -| 양호 | 보안 설정이 적절히 적용됨 | -| 취약 | 보안 취약점 존재, 조치 필요 | - -## 통계 - -| 분류 | 항목 수 | 상 | 중 | 하 | -|------|:------:|:--:|:--:|:--:| -| 계정 관리 | 13 | 6 | 4 | 3 | -| 파일/디렉터리 관리 | 20 | 15 | 3 | 2 | -| 서비스 관리 | 30 | 19 | 9 | 2 | -| 패치 관리 | 1 | 1 | 0 | 0 | -| 로그 관리 | 3 | 0 | 3 | 0 | -| **합계** | **67** | **41** | **19** | **7** | diff --git a/skills/check/references/cii/web-service.md b/skills/check/references/cii/web-service.md deleted file mode 100644 index e3f96bd..0000000 --- a/skills/check/references/cii/web-service.md +++ /dev/null @@ -1,74 +0,0 @@ -# 웹 서비스 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Apache, Nginx, IIS, Tomcat, JEUS - -## 1. 계정 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-01 | Default 관리자 계정명 변경 | 상 | -| WEB-02 | 취약한 비밀번호 사용 제한 | 상 | -| WEB-03 | 비밀번호 파일 권한 관리 | 상 | - -## 2. 서비스 관리 (15항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-04 | 웹 서비스 디렉터리 리스팅 방지 설정 | 상 | -| WEB-05 | 지정하지 않은 CGI/ISAPI 실행 제한 | 상 | -| WEB-06 | 웹 서비스 상위 디렉터리 접근 제한 설정 | 상 | -| WEB-07 | 웹 서비스 경로 내 불필요한 파일 제거 | 중 | -| WEB-08 | 웹 서비스 파일 업로드 및 다운로드 용량 제한 | 하 | -| WEB-09 | 웹 서비스 프로세스 권한 제한 | 상 | -| WEB-10 | 불필요한 프록시 설정 제한 | 상 | -| WEB-11 | 웹 서비스 경로 설정 | 중 | -| WEB-12 | 웹 서비스 링크 사용 금지 | 중 | -| WEB-13 | 웹 서비스 설정 파일 노출 제한 | 상 | -| WEB-14 | 웹 서비스 경로 내 파일의 접근 통제 | 상 | -| WEB-15 | 웹 서비스의 불필요한 스크립트 매핑 제거 | 상 | -| WEB-16 | 웹 서비스 헤더 정보 노출 제한 | 중 | -| WEB-17 | 웹 서비스 가상 디렉토리 삭제 | 중 | -| WEB-18 | 웹 서비스 WebDAV 비활성화 | 상 | - -## 3. 보안 설정 (5항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-19 | 웹 서비스 SSI 사용 제한 | 중 | -| WEB-20 | SSL/TLS 활성화 | 상 | -| WEB-21 | HTTP 리디렉션 | 중 | -| WEB-22 | 에러 페이지 관리 | 하 | -| WEB-23 | LDAP 알고리즘 적절하게 구성 | 중 | - -## 4. 패치 및 로그 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-24 | 별도의 업로드 경로 사용 및 권한 설정 | 중 | -| WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | - -### 주요 점검 명령어 -```bash -# WEB-04: 디렉터리 리스팅 -# Apache -grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" -# Nginx -grep -i "autoindex" /etc/nginx/nginx.conf - -# WEB-09: 프로세스 권한 -ps -ef | grep httpd | grep -v root - -# WEB-16: 헤더 정보 노출 -# Apache: grep "ServerTokens" httpd.conf → Prod 설정 -# Nginx: grep "server_tokens" nginx.conf → off 설정 - -# WEB-18: WebDAV -grep -i "LoadModule.*dav" /etc/httpd/conf/httpd.conf - -# WEB-20: SSL/TLS -grep -i "SSLProtocol\|ssl_protocols" /etc/httpd/conf.d/ssl.conf /etc/nginx/nginx.conf -``` - -## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills/check/references/cii/webapp.md b/skills/check/references/cii/webapp.md deleted file mode 100644 index 5a1888d..0000000 --- a/skills/check/references/cii/webapp.md +++ /dev/null @@ -1,70 +0,0 @@ -# Web Application 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: 웹 애플리케이션 소스 코드 및 설정 - -## 1. 입력값 검증 (8항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CI | Command Injection | 상 | -| SI | SQL Injection | 상 | -| XS | Cross-Site Scripting (XSS) | 상 | -| CF | Cross-Site Request Forgery (CSRF) | 상 | -| SF | Server-Side Request Forgery (SSRF) | 상 | -| FU | File Upload 취약점 | 상 | -| FD | File Download 취약점 | 상 | -| DI | 디렉터리 인덱싱 | 중 | - -## 2. 인증/세션 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| BF | Brute Force 공격 | 상 | -| IA | 불충분한 인증 (Insufficient Authentication) | 상 | -| PR | 비밀번호 복구 취약점 | 중 | -| IS | 불충분한 세션 관리 | 상 | -| CC | 세션 고정 (Credential/Session Prediction) | 상 | -| SN | 세션 만료 미설정 | 중 | - -## 3. 접근제어 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| IN | 불충분한 인가 (Insufficient Authorization) | 상 | -| PV | 경로 조작 (Path Traversal) | 상 | -| AE | 관리자 페이지 노출 | 상 | -| WM | HTTP Method 제한 미설정 | 중 | - -## 4. 정보노출 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| EP | 에러 페이지를 통한 정보 노출 | 중 | -| IL | 불필요한 정보 노출 | 중 | -| AU | 부적절한 감사 로깅 | 중 | - -### 주요 점검 패턴 -``` -# SQL Injection -- 문자열 연결 쿼리: "SELECT * FROM users WHERE id = '" + input -- 안전: PreparedStatement, 매개변수화 쿼리, ORM - -# XSS -- innerHTML, document.write(input), v-html -- 안전: textContent, DOMPurify, 자동 이스케이프 - -# Command Injection -- Runtime.exec(input), subprocess(shell=True) -- 안전: 화이트리스트 검증, execFile - -# CSRF -- POST 요청에 CSRF 토큰 누락 -- 안전: 프레임워크 CSRF 미들웨어 - -# File Upload -- 확장자 미검증, 웹 루트 내 저장 -- 안전: 화이트리스트, 웹 루트 외부 저장, 랜덤 파일명 -``` - -## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills/check/references/cii/windows.md b/skills/check/references/cii/windows.md deleted file mode 100644 index cef3781..0000000 --- a/skills/check/references/cii/windows.md +++ /dev/null @@ -1,190 +0,0 @@ -# Windows 서버 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) - -## 1. 계정 관리 (14항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-01 | Administrator 계정 이름 변경 등 보안성 강화 | 상 | -| W-02 | Guest 계정 비활성화 | 상 | -| W-03 | 불필요한 계정 제거 | 상 | -| W-04 | 계정 잠금 임계값 설정 | 상 | -| W-05 | 해독 가능한 암호화를 사용하여 암호 저장 해제 | 상 | -| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | -| W-07 | Everyone 사용 권한을 익명 사용자에게 적용 | 중 | -| W-08 | 계정 잠금 기간 설정 | 중 | -| W-09 | 비밀번호 관리정책 설정 | 상 | -| W-10 | 마지막 사용자 이름 표시 안 함 | 중 | -| W-11 | 로컬 로그온 허용 | 중 | -| W-12 | 익명 SID/이름 변환 허용 해제 | 중 | -| W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | -| W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | - -### 주요 점검 명령어 -```powershell -# W-01: Administrator 계정명 -Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select Name - -# W-02: Guest 비활성화 -Get-LocalUser -Name "Guest" | Select Enabled - -# W-04: 계정 잠금 -net accounts - -# W-06: 관리자 그룹 -net localgroup Administrators - -# W-09: 패스워드 정책 -net accounts -``` - ---- - -## 2. 서비스 관리 (23항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-15 | 사용자 개인키 사용 시 암호 입력 | 상 | -| W-16 | 공유 권한 및 사용자 그룹 설정 | 상 | -| W-17 | 하드디스크 기본 공유 제거 | 상 | -| W-18 | 불필요한 서비스 제거 | 상 | -| W-19 | 불필요한 IIS 서비스 구동 점검 | 상 | -| W-20 | NetBIOS 바인딩 서비스 구동 점검 | 상 | -| W-21 | 암호화되지 않는 FTP 서비스 비활성화 | 상 | -| W-22 | FTP 디렉토리 접근권한 설정 | 상 | -| W-23 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | -| W-24 | FTP 접근 제어 설정 | 상 | -| W-25 | DNS Zone Transfer 설정 | 상 | -| W-26 | RDS(Remote Data Services) 제거 | 상 | -| W-27 | 최신 Windows OS Build 버전 적용 | 상 | -| W-28 | 터미널 서비스 암호화 수준 설정 | 중 | -| W-29 | 불필요한 SNMP 서비스 구동 점검 | 중 | -| W-30 | SNMP Community String 복잡성 설정 | 중 | -| W-31 | SNMP Access Control 설정 | 중 | -| W-32 | DNS 서비스 구동 점검 | 중 | -| W-33 | HTTP/FTP/SMTP 배너 차단 | 하 | -| W-34 | Telnet 서비스 비활성화 | 중 | -| W-35 | 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 | 중 | -| W-36 | 원격터미널 접속 타임아웃 설정 | 중 | -| W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | - -### 주요 점검 명령어 -```powershell -# W-17: 기본 공유 -net share -Get-SmbShare - -# W-18: 서비스 목록 -Get-Service | Where-Object {$_.Status -eq "Running"} - -# W-19: IIS -Get-Service W3SVC - -# W-29~31: SNMP -Get-Service SNMP -reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" -``` - ---- - -## 3. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| W-39 | 백신 프로그램 업데이트 | 상 | - -```powershell -# W-38: 패치 현황 -Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 10 -systeminfo | findstr "KB" - -# W-39: 백신 -Get-MpComputerStatus # Windows Defender -``` - ---- - -## 4. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-40 | 정책에 따른 시스템 로깅 설정 | 중 | -| W-41 | NTP 및 시각 동기화 설정 | 중 | -| W-42 | 이벤트 로그 관리 설정 | 하 | -| W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | - -```powershell -# W-40: 감사 정책 -auditpol /get /category:* - -# W-41: NTP -w32tm /query /status - -# W-42: 이벤트 로그 설정 -Get-EventLog -List -``` - ---- - -## 5. 보안 관리 (21항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-44 | 원격으로 액세스할 수 있는 레지스트리 경로 | 상 | -| W-45 | 백신 프로그램 설치 | 상 | -| W-46 | SAM 파일 접근 통제 설정 | 상 | -| W-47 | 화면보호기 설정 | 상 | -| W-48 | 로그온하지 않고 시스템 종료 허용 | 상 | -| W-49 | 원격 시스템에서 강제로 시스템 종료 | 상 | -| W-50 | 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 | 상 | -| W-51 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | -| W-52 | Autologon 기능 제어 | 상 | -| W-53 | 이동식 미디어 포맷 및 꺼내기 허용 | 상 | -| W-54 | DoS 공격 방어 레지스트리 설정 | 중 | -| W-55 | 사용자가 프린터 드라이버를 설치할 수 없게 함 | 중 | -| W-56 | SMB 세션 중단 관리 설정 | 중 | -| W-57 | 로그온 시 경고 메시지 설정 | 하 | -| W-58 | 사용자별 홈 디렉터리 권한 설정 | 중 | -| W-59 | LAN Manager 인증 수준 | 중 | -| W-60 | 보안 채널 데이터 디지털 암호화 또는 서명 | 중 | -| W-61 | 파일 및 디렉토리 보호 | 중 | -| W-62 | 시작프로그램 목록 분석 | 중 | -| W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | -| W-64 | 윈도우 방화벽 설정 | 중 | - -### 주요 점검 명령어 -```powershell -# W-44: 원격 레지스트리 -Get-Service RemoteRegistry | Select Status - -# W-46: SAM 파일 -icacls C:\Windows\System32\config\SAM - -# W-47: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure - -# W-52: Autologon -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon - -# W-59: LAN Manager -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel - -# W-64: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled -``` - ---- - -## 통계 - -| 분류 | 항목 수 | 상 | 중 | 하 | -|------|:------:|:--:|:--:|:--:| -| 계정 관리 | 14 | 7 | 7 | 0 | -| 서비스 관리 | 23 | 13 | 9 | 1 | -| 패치 관리 | 2 | 2 | 0 | 0 | -| 로그 관리 | 4 | 0 | 3 | 1 | -| 보안 관리 | 21 | 10 | 10 | 1 | -| **합계** | **64** | **32** | **29** | **3** | diff --git a/skills/fix/SKILL.md b/skills/fix/SKILL.md deleted file mode 100644 index 4550ab7..0000000 --- a/skills/fix/SKILL.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: fix -description: Auto-fix security vulnerabilities found in CII and AI systems. Generates hardening scripts for Unix/Linux, Windows, web servers, databases, and AI systems. Applies secure configurations based on KISA guidelines. Use when "fix vulnerabilities", "secure the system", "apply hardening", "server hardening", "AI security fix". ---- - -# KESE Vulnerability Auto-Fix - -Generate and apply fixes based on vulnerability assessment results. Auto-selects guideline. - -## Guideline Selection - -| # | Guideline | Description | -|---|-----------|-------------| -| 1 | **CII Hardening** | Platform-specific hardening scripts | -| 2 | **AI Security Fixes** | AI system security hardening | -| 3 | **Robot Security Fixes** | Robot system hardening (IEC 62443, CRA, RED) | - -## CII Branch - -Load reference from `references/cii/` → generate hardening scripts saved to `scripts/kese-hardening/`. - -## AI Security Branch - -Load from `references/ai-security/` → generate security hardening code for AI pipelines, model security, API protection, LLM guardrails. - -## Notes -- Always backup before applying fixes -- Test in non-production first -- Document all changes for compliance audit diff --git a/skills/fix/references/ai-security/user-guide.md b/skills/fix/references/ai-security/user-guide.md deleted file mode 100644 index 1c3f1e3..0000000 --- a/skills/fix/references/ai-security/user-guide.md +++ /dev/null @@ -1,70 +0,0 @@ -# AI 이용자를 위한 보안 수칙 - -> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 - -## 1. AI 이용자에게 발생할 수 있는 보안 위협 - -### 1.1 챗봇 통한 데이터 유출 -- AI 챗봇 서비스에서 다른 사용자의 개인정보가 노출되는 사례 -- 학습 데이터에 포함된 민감정보가 출력될 가능성 - -### 1.2 AI 음성비서 도청/해킹 -- 스마트 스피커에 레이저/음파를 이용한 명령 주입 -- 백그라운드 실행을 통한 비밀번호 탈취 유도 - -### 1.3 악성 링크/피싱 -- AI가 생성한 정교한 피싱 메시지 -- AI 서비스를 가장한 악성 사이트 - -### 1.4 딥페이크 -- AI 기반 얼굴/음성 합성을 이용한 사기 -- 가짜 영상/음성을 통한 신원 도용 - -### 1.5 안면인식 해킹 -- AI 안면인식 시스템의 우회 공격 -- 적대적 예제를 이용한 인증 우회 - -### 1.6 사이버 테러 -- AI를 악용한 대규모 자동화 공격 -- AI 기반 악성코드 생성 - ---- - -## 2. AI 서비스 이용 보안 수칙 - -### 수칙 1: 안전한 서비스 접근 -- **공식 경로로 다운로드**: 공식 앱 스토어, 공식 웹사이트에서만 AI 서비스 다운로드 -- **강력한 비밀번호 사용**: 영문+숫자+특수문자 조합, 8자 이상 -- **MFA 활성화**: 가능한 경우 다중 인증 설정 -- **공공 네트워크 주의**: 공공 Wi-Fi에서 AI 서비스 이용 시 VPN 사용 권장 -- **이용약관 확인**: AI 서비스의 데이터 수집/활용 정책 확인 - -### 수칙 2: 안전한 서비스 사용 -- **민감정보 입력 금지**: AI 챗봇에 비밀번호, 주민번호, 카드번호 등 입력하지 않기 -- **AI 출력 결과 검증**: AI가 생성한 정보의 정확성을 반드시 확인 -- **의심스러운 결과 신고**: 부적절하거나 유해한 AI 출력 발견 시 서비스 제공자에게 신고 -- **사용 후 데이터 삭제**: AI 서비스 이용 후 대화 기록 등 불필요한 데이터 삭제 -- **주기적 권한 검토**: AI 서비스에 부여한 권한(카메라, 마이크, 위치 등) 주기적 확인 - -### 수칙 3: 딥페이크 대응 -- 영상 통화 시 비정상적 움직임, 음질 이상 주의 -- 금전 요청이나 긴급 상황을 주장하는 연락은 별도 채널로 확인 - -### 수칙 4: AI 음성비서 보안 -- 사용하지 않을 때 마이크 비활성화 -- 음성 구매 기능 비밀번호 설정 -- 정기적으로 음성 기록 검토 및 삭제 - ---- - -## 3. 체크리스트 요약 - -| # | 항목 | 확인 | -|---|------|:----:| -| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | -| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | -| 3 | AI 서비스 이용약관을 확인했는가? | □ | -| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | -| 5 | AI 출력 결과를 검증하고 있는가? | □ | -| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | -| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills/fix/references/cii/cloud.md b/skills/fix/references/cii/cloud.md deleted file mode 100644 index ef26ef5..0000000 --- a/skills/fix/references/cii/cloud.md +++ /dev/null @@ -1,64 +0,0 @@ -# 클라우드 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: AWS, Azure, GCP 등 클라우드 환경 - -## 1. 계정 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-01 | 클라우드 관리 콘솔 기본 계정 변경 | 상 | -| CA-02 | 비밀번호 복잡성 및 MFA 설정 | 상 | -| CA-03 | 불필요한 계정/키 제거 | 상 | -| CA-04 | 루트/관리자 계정 직접 사용 제한 | 상 | - -## 2. 권한 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-05 | IAM 최소 권한 원칙 적용 | 상 | -| CA-06 | 서비스 계정/역할 권한 제한 | 상 | - -## 3. 가상 리소스 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-07 | 보안 그룹/네트워크 ACL 설정 | 상 | -| CA-08 | 스토리지 접근 권한 및 암호화 | 상 | -| CA-09 | 가상 네트워크 분리 (VPC/서브넷) | 상 | -| CA-10 | 미사용 리소스 점검 및 제거 | 중 | - -## 4. 운영 관리 (9항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-11 | 클라우드 감사 로깅 활성화 | 상 | -| CA-12 | 보안 모니터링 및 알림 설정 | 상 | -| CA-13 | 데이터 백업 및 복구 정책 | 상 | -| CA-14 | 보안 패치 및 이미지 관리 | 상 | -| CA-15 | API 키/시크릿 관리 | 상 | -| CA-16 | 전송 중/저장 시 암호화 | 상 | -| CA-17 | 인스턴스 메타데이터 보호 | 중 | -| CA-18 | 컨테이너/서버리스 보안 설정 | 중 | -| CA-19 | 클라우드 서비스 가용성 관리 | 중 | - -### 주요 점검 명령어 -```bash -# AWS -aws iam list-users -aws iam get-credential-report -aws ec2 describe-security-groups -aws s3api get-bucket-encryption --bucket -aws cloudtrail describe-trails - -# Azure -az ad user list -az network nsg list -az storage account list - -# GCP -gcloud iam service-accounts list -gcloud compute firewall-rules list -``` - -## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills/fix/references/cii/database.md b/skills/fix/references/cii/database.md deleted file mode 100644 index 67e8efc..0000000 --- a/skills/fix/references/cii/database.md +++ /dev/null @@ -1,69 +0,0 @@ -# DBMS 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Oracle DB, MSSQL, MySQL, PostgreSQL, Altibase, Tibero, Cubrid - -## 1. 계정 관리 (9항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-01 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | 상 | -| D-02 | 불필요 계정 제거 또는 잠금설정 | 상 | -| D-03 | 비밀번호 사용기간 및 복잡도 설정 | 상 | -| D-04 | 관리자 권한을 필요한 계정/그룹에만 허용 | 상 | -| D-05 | 비밀번호 재사용 제약 설정 | 중 | -| D-06 | DB 사용자 계정 개별 부여 | 중 | -| D-07 | root 권한으로 서비스 구동 제한 | 중 | -| D-08 | 안전한 암호화 알고리즘 사용 | 상 | -| D-09 | 로그인 실패 시 잠금정책 설정 | 중 | - -### 주요 점검 명령어 -```sql --- Oracle: 계정 확인 -SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; --- Oracle: 비밀번호 변경 -ALTER USER <계정> IDENTIFIED BY <신규비밀번호>; - --- MSSQL: sa 비밀번호 변경 -ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; - --- MySQL: root 비밀번호 변경 -ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; - --- PostgreSQL: 역할 확인 -SELECT rolname, rolsuper FROM pg_roles; -``` - -## 2. 접근 관리 (7항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-10 | 원격에서 DB 서버 접속 제한 | 상 | -| D-11 | 비인가 사용자의 시스템 테이블 접근 차단 | 상 | -| D-12 | 안전한 리스너 비밀번호 설정 | 상 | -| D-13 | 불필요한 ODBC/OLE-DB 데이터 소스 제거 | 중 | -| D-14 | 주요 파일 접근 권한 설정 | 중 | -| D-15 | 리스너 로그/trace 파일 변경 제한 | 하 | -| D-16 | Windows 인증 모드 사용 | 하 | - -## 3. 옵션 관리 (8항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-17 | Audit Table 관리자 접근 제한 | 하 | -| D-18 | Role이 Public으로 설정되지 않도록 조정 | 상 | -| D-19 | OS_ROLES 등 원격 인증 FALSE 설정 | 상 | -| D-20 | 인가되지 않은 Object owner 제한 | 하 | -| D-21 | 인가되지 않은 GRANT OPTION 사용 제한 | 중 | -| D-22 | 자원 제한 기능 TRUE 설정 | 하 | -| D-23 | xp_cmdshell 사용 제한 | 상 | -| D-24 | Registry Procedure 권한 제한 | 상 | - -## 4. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| D-26 | 감사 기록 정책 적합 설정 | 상 | - -## 통계: 총 26항목 (상 13, 중 7, 하 6) diff --git a/skills/fix/references/cii/network.md b/skills/fix/references/cii/network.md deleted file mode 100644 index 1f99ce4..0000000 --- a/skills/fix/references/cii/network.md +++ /dev/null @@ -1,87 +0,0 @@ -# 네트워크 장비 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Cisco, Alteon, Passport, Juniper, Piolink 등 - -## 1. 계정 관리 (5항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-01 | 비밀번호 설정 | 상 | -| N-02 | 비밀번호 복잡성 설정 | 상 | -| N-03 | 암호화된 비밀번호 사용 | 상 | -| N-04 | 계정 잠금 임계값 설정 | 상 | -| N-05 | 사용자, 명령어별 권한 수준 설정 | 중 | - -## 2. 접근 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-06 | VTY 접근(ACL) 설정 | 상 | -| N-07 | 세션 종료 시간 설정 | 상 | -| N-08 | VTY 접속 시 안전한 프로토콜 사용 | 중 | -| N-09 | 불필요한 보조 입출력 포트 사용 금지 | 중 | -| N-10 | 로그온 시 경고 메시지 설정 | 중 | -| N-11 | 원격 로그서버 사용 | 중 | - -## 3. 패치 관리 (1항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-12 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | - -## 4. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-13 | 로깅 버퍼 크기 설정 | 중 | -| N-14 | 정책에 따른 로깅 설정 | 중 | -| N-15 | NTP 및 시각 동기화 설정 | 중 | -| N-16 | Timestamp 로그 설정 | 하 | - -## 5. 기능 관리 (22항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-17 | SNMP 서비스 확인 | 상 | -| N-18 | SNMP Community String 복잡성 설정 | 상 | -| N-19 | SNMP ACL 설정 | 상 | -| N-20 | SNMP Community 권한 설정 | 상 | -| N-21 | TFTP 서비스 차단 | 상 | -| N-22 | Spoofing 방지 필터링 적용 | 상 | -| N-23 | DDoS 공격 방어 설정 또는 DDoS 장비 사용 | 상 | -| N-24 | 사용하지 않는 인터페이스 비활성화 | 상 | -| N-25 | TCP Keepalive 서비스 설정 | 중 | -| N-26 | Finger 서비스 차단 | 중 | -| N-27 | 웹 서비스 차단 | 중 | -| N-28 | TCP/UDP small 서비스 차단 | 중 | -| N-29 | Bootp 서비스 차단 | 중 | -| N-30 | CDP 서비스 차단 | 중 | -| N-31 | Directed-broadcast 차단 | 중 | -| N-32 | Source 라우팅 차단 | 중 | -| N-33 | Proxy ARP 차단 | 중 | -| N-34 | ICMP unreachable, Redirect 차단 | 중 | -| N-35 | identd 서비스 차단 | 중 | -| N-36 | Domain Lookup 차단 | 중 | -| N-37 | pad 차단 | 중 | -| N-38 | mask-reply 차단 | 중 | - -### 주요 점검 명령어 (Cisco IOS) -``` -! 계정 관리 -show running-config | include username -show running-config | include enable secret - -! 접근 관리 -show running-config | include line vty -show running-config | include access-class - -! SNMP -show running-config | include snmp-server - -! 불필요 서비스 -show running-config | include no service -show ip http server -``` - -## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills/fix/references/cii/pc.md b/skills/fix/references/cii/pc.md deleted file mode 100644 index c3dd9fc..0000000 --- a/skills/fix/references/cii/pc.md +++ /dev/null @@ -1,62 +0,0 @@ -# PC 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Windows 10, Windows 11 - -## 1. 계정 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-01 | 비밀번호의 주기적 변경 | 상 | -| PC-02 | 비밀번호 관리정책 설정 | 상 | -| PC-03 | 복구 콘솔에서 자동 로그온 금지 설정 | 중 | - -## 2. 서비스 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-04 | 공유 폴더 제거 | 상 | -| PC-05 | 불필요한 서비스 제거 | 상 | -| PC-06 | 비인가 상용 메신저 사용 금지 | 상 | -| PC-07 | 파일 시스템이 NTFS 포맷으로 설정 | 중 | -| PC-08 | 다른 OS로 멀티 부팅 불가 설정 | 중 | -| PC-09 | 브라우저 종료 시 임시 인터넷 파일 삭제 | 하 | - -## 3. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-10 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| PC-11 | 지원 종료되지 않은 Windows OS Build 적용 | 상 | - -## 4. 보안 관리 (7항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-12 | Windows 자동 로그인 점검 | 중 | -| PC-13 | 바이러스 백신 설치 및 주기적 업데이트 | 상 | -| PC-14 | 실시간 감시 기능 활성화 | 상 | -| PC-15 | OS 침입차단 기능 활성화 | 상 | -| PC-16 | 화면보호기 대기 시간 및 암호 보호 설정 | 상 | -| PC-17 | 이동식 미디어 자동실행 방지 | 상 | -| PC-18 | 원격 지원 금지 정책 설정 | 중 | - -### 주요 점검 명령어 -```powershell -# PC-01: 비밀번호 최대 사용기간 -net accounts | findstr "최대" - -# PC-04: 공유 폴더 -net share - -# PC-13~14: 백신 -Get-MpComputerStatus - -# PC-15: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled - -# PC-16: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -``` - -## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills/fix/references/cii/unix.md b/skills/fix/references/cii/unix.md deleted file mode 100644 index b9688e3..0000000 --- a/skills/fix/references/cii/unix.md +++ /dev/null @@ -1,233 +0,0 @@ -# Unix 서버 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: SOLARIS, LINUX, AIX, HP-UX - -## 1. 계정 관리 (13항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-01 | root 계정 원격 접속 제한 | 상 | -| U-02 | 비밀번호 관리정책 설정 | 상 | -| U-03 | 계정 잠금 임계값 설정 | 상 | -| U-04 | 비밀번호 파일 보호 | 상 | -| U-05 | root 이외의 UID가 '0' 금지 | 상 | -| U-06 | 사용자 계정 su 기능 제한 | 상 | -| U-07 | 불필요한 계정 제거 | 하 | -| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | -| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | -| U-10 | 동일한 UID 금지 | 중 | -| U-11 | 사용자 Shell 점검 | 하 | -| U-12 | 세션 종료 시간 설정 | 하 | -| U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | - -### 주요 점검 명령어 -```bash -# U-01: root 원격 접속 제한 -grep -i "PermitRootLogin" /etc/ssh/sshd_config -cat /etc/default/login | grep CONSOLE # Solaris -cat /etc/securetty # Linux - -# U-02: 비밀번호 정책 -cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" -cat /etc/security/pwquality.conf # Linux - -# U-03: 계정 잠금 -cat /etc/pam.d/system-auth | grep pam_tally -cat /etc/security/user | grep loginretries # AIX - -# U-04: shadow 파일 보호 -ls -la /etc/shadow - -# U-05: UID 0 점검 -awk -F: '$3==0 {print $1}' /etc/passwd - -# U-06: su 제한 -cat /etc/pam.d/su | grep pam_wheel -ls -la /usr/bin/su - -# U-12: 세션 타임아웃 -echo $TMOUT -``` - ---- - -## 2. 파일 및 디렉터리 관리 (20항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-14 | root 홈, 패스 디렉터리 권한 및 패스 설정 | 상 | -| U-15 | 파일 및 디렉터리 소유자 설정 | 상 | -| U-16 | /etc/passwd 파일 소유자 및 권한 설정 | 상 | -| U-17 | 시스템 시작 스크립트 권한 설정 | 상 | -| U-18 | /etc/shadow 파일 소유자 및 권한 설정 | 상 | -| U-19 | /etc/hosts 파일 소유자 및 권한 설정 | 상 | -| U-20 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | 상 | -| U-21 | /etc/(r)syslog.conf 파일 소유자 및 권한 설정 | 상 | -| U-22 | /etc/services 파일 소유자 및 권한 설정 | 상 | -| U-23 | SUID, SGID, Sticky bit 설정 파일 점검 | 상 | -| U-24 | 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 | 상 | -| U-25 | world writable 파일 점검 | 상 | -| U-26 | /dev에 존재하지 않는 device 파일 점검 | 상 | -| U-27 | $HOME/.rhosts, hosts.equiv 사용 금지 | 상 | -| U-28 | 접속 IP 및 포트 제한 | 상 | -| U-29 | hosts.lpd 파일 소유자 및 권한 설정 | 하 | -| U-30 | UMASK 설정 관리 | 중 | -| U-31 | 홈 디렉토리 소유자 및 권한 설정 | 중 | -| U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | -| U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | - -### 주요 점검 명령어 -```bash -# U-14: root PATH -echo $PATH | grep "::" -echo $PATH | grep ":$" - -# U-16~U-22: 주요 파일 권한 -ls -la /etc/passwd /etc/shadow /etc/hosts /etc/services -ls -la /etc/inetd.conf /etc/xinetd.conf /etc/syslog.conf /etc/rsyslog.conf - -# U-23: SUID/SGID -find / -perm -4000 -o -perm -2000 2>/dev/null - -# U-25: world writable -find / -type f -perm -002 2>/dev/null - -# U-26: /dev 점검 -find /dev -type f 2>/dev/null - -# U-27: rhosts -find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null - -# U-28: 접속 제한 -cat /etc/hosts.allow -cat /etc/hosts.deny -iptables -L - -# U-30: umask -umask -grep umask /etc/profile /etc/bashrc -``` - ---- - -## 3. 서비스 관리 (30항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-34 | Finger 서비스 비활성화 | 상 | -| U-35 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | -| U-36 | r 계열 서비스 비활성화 | 상 | -| U-37 | crontab 설정파일 권한 설정 | 상 | -| U-38 | DoS 공격에 취약한 서비스 비활성화 | 상 | -| U-39 | 불필요한 NFS 서비스 비활성화 | 상 | -| U-40 | NFS 접근 통제 | 상 | -| U-41 | 불필요한 automountd 제거 | 상 | -| U-42 | 불필요한 RPC 서비스 비활성화 | 상 | -| U-43 | NIS, NIS+ 점검 | 상 | -| U-44 | tftp, talk 서비스 비활성화 | 상 | -| U-45 | 메일 서비스 버전 점검 | 상 | -| U-46 | 일반 사용자의 메일 서비스 실행 방지 | 상 | -| U-47 | 스팸 메일 릴레이 제한 | 상 | -| U-48 | expn, vrfy 명령어 제한 | 중 | -| U-49 | DNS 보안 버전 패치 | 상 | -| U-50 | DNS Zone Transfer 설정 | 상 | -| U-51 | DNS 서비스의 취약한 동적 업데이트 설정 금지 | 중 | -| U-52 | Telnet 서비스 비활성화 | 중 | -| U-53 | FTP 서비스 정보 노출 제한 | 하 | -| U-54 | 암호화되지 않는 FTP 서비스 비활성화 | 중 | -| U-55 | FTP 계정 Shell 제한 | 중 | -| U-56 | FTP 서비스 접근 제어 설정 | 하 | -| U-57 | Ftpusers 파일 설정 | 중 | -| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | -| U-59 | 안전한 SNMP 버전 사용 | 상 | -| U-60 | SNMP Community String 복잡성 설정 | 중 | -| U-61 | SNMP Access Control 설정 | 상 | -| U-62 | 로그인 시 경고 메시지 설정 | 하 | -| U-63 | sudo 명령어 접근 관리 | 중 | - -### 주요 점검 명령어 -```bash -# U-34~U-44: 불필요 서비스 점검 -systemctl list-unit-files --state=enabled -chkconfig --list # CentOS 6 -inetadm # Solaris - -# U-39~U-40: NFS -showmount -e -cat /etc/exports -cat /etc/dfs/dfstab # Solaris - -# U-45~U-48: 메일 서비스 -sendmail -d0.1 -bt < /dev/null 2>&1 | grep Version -postconf mail_version -cat /etc/mail/sendmail.cf | grep "O PrivacyOptions" - -# U-49~U-51: DNS -named -v -cat /etc/named.conf | grep "allow-transfer" - -# U-58~U-61: SNMP -cat /etc/snmp/snmpd.conf | grep -i community -ps -ef | grep snmp -``` - ---- - -## 4. 패치 관리 (1항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | - -```bash -# 패치 현황 -uname -a -rpm -qa --last | head -20 # Linux -showrev -p # Solaris -instfix -i | grep ML # AIX -``` - ---- - -## 5. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-65 | NTP 및 시각 동기화 설정 | 중 | -| U-66 | 정책에 따른 시스템 로깅 설정 | 중 | -| U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | - -```bash -# U-65: NTP -ntpq -p -cat /etc/ntp.conf -chronyc sources # CentOS 8+ - -# U-66: 로깅 설정 -cat /etc/rsyslog.conf -cat /etc/syslog.conf - -# U-67: 로그 권한 -ls -la /var/log/ -``` - ---- - -## 판단 기준 - -| 판단 | 설명 | -|------|------| -| 양호 | 보안 설정이 적절히 적용됨 | -| 취약 | 보안 취약점 존재, 조치 필요 | - -## 통계 - -| 분류 | 항목 수 | 상 | 중 | 하 | -|------|:------:|:--:|:--:|:--:| -| 계정 관리 | 13 | 6 | 4 | 3 | -| 파일/디렉터리 관리 | 20 | 15 | 3 | 2 | -| 서비스 관리 | 30 | 19 | 9 | 2 | -| 패치 관리 | 1 | 1 | 0 | 0 | -| 로그 관리 | 3 | 0 | 3 | 0 | -| **합계** | **67** | **41** | **19** | **7** | diff --git a/skills/fix/references/cii/web-service.md b/skills/fix/references/cii/web-service.md deleted file mode 100644 index e3f96bd..0000000 --- a/skills/fix/references/cii/web-service.md +++ /dev/null @@ -1,74 +0,0 @@ -# 웹 서비스 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Apache, Nginx, IIS, Tomcat, JEUS - -## 1. 계정 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-01 | Default 관리자 계정명 변경 | 상 | -| WEB-02 | 취약한 비밀번호 사용 제한 | 상 | -| WEB-03 | 비밀번호 파일 권한 관리 | 상 | - -## 2. 서비스 관리 (15항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-04 | 웹 서비스 디렉터리 리스팅 방지 설정 | 상 | -| WEB-05 | 지정하지 않은 CGI/ISAPI 실행 제한 | 상 | -| WEB-06 | 웹 서비스 상위 디렉터리 접근 제한 설정 | 상 | -| WEB-07 | 웹 서비스 경로 내 불필요한 파일 제거 | 중 | -| WEB-08 | 웹 서비스 파일 업로드 및 다운로드 용량 제한 | 하 | -| WEB-09 | 웹 서비스 프로세스 권한 제한 | 상 | -| WEB-10 | 불필요한 프록시 설정 제한 | 상 | -| WEB-11 | 웹 서비스 경로 설정 | 중 | -| WEB-12 | 웹 서비스 링크 사용 금지 | 중 | -| WEB-13 | 웹 서비스 설정 파일 노출 제한 | 상 | -| WEB-14 | 웹 서비스 경로 내 파일의 접근 통제 | 상 | -| WEB-15 | 웹 서비스의 불필요한 스크립트 매핑 제거 | 상 | -| WEB-16 | 웹 서비스 헤더 정보 노출 제한 | 중 | -| WEB-17 | 웹 서비스 가상 디렉토리 삭제 | 중 | -| WEB-18 | 웹 서비스 WebDAV 비활성화 | 상 | - -## 3. 보안 설정 (5항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-19 | 웹 서비스 SSI 사용 제한 | 중 | -| WEB-20 | SSL/TLS 활성화 | 상 | -| WEB-21 | HTTP 리디렉션 | 중 | -| WEB-22 | 에러 페이지 관리 | 하 | -| WEB-23 | LDAP 알고리즘 적절하게 구성 | 중 | - -## 4. 패치 및 로그 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-24 | 별도의 업로드 경로 사용 및 권한 설정 | 중 | -| WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | - -### 주요 점검 명령어 -```bash -# WEB-04: 디렉터리 리스팅 -# Apache -grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" -# Nginx -grep -i "autoindex" /etc/nginx/nginx.conf - -# WEB-09: 프로세스 권한 -ps -ef | grep httpd | grep -v root - -# WEB-16: 헤더 정보 노출 -# Apache: grep "ServerTokens" httpd.conf → Prod 설정 -# Nginx: grep "server_tokens" nginx.conf → off 설정 - -# WEB-18: WebDAV -grep -i "LoadModule.*dav" /etc/httpd/conf/httpd.conf - -# WEB-20: SSL/TLS -grep -i "SSLProtocol\|ssl_protocols" /etc/httpd/conf.d/ssl.conf /etc/nginx/nginx.conf -``` - -## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills/fix/references/cii/webapp.md b/skills/fix/references/cii/webapp.md deleted file mode 100644 index 5a1888d..0000000 --- a/skills/fix/references/cii/webapp.md +++ /dev/null @@ -1,70 +0,0 @@ -# Web Application 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: 웹 애플리케이션 소스 코드 및 설정 - -## 1. 입력값 검증 (8항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CI | Command Injection | 상 | -| SI | SQL Injection | 상 | -| XS | Cross-Site Scripting (XSS) | 상 | -| CF | Cross-Site Request Forgery (CSRF) | 상 | -| SF | Server-Side Request Forgery (SSRF) | 상 | -| FU | File Upload 취약점 | 상 | -| FD | File Download 취약점 | 상 | -| DI | 디렉터리 인덱싱 | 중 | - -## 2. 인증/세션 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| BF | Brute Force 공격 | 상 | -| IA | 불충분한 인증 (Insufficient Authentication) | 상 | -| PR | 비밀번호 복구 취약점 | 중 | -| IS | 불충분한 세션 관리 | 상 | -| CC | 세션 고정 (Credential/Session Prediction) | 상 | -| SN | 세션 만료 미설정 | 중 | - -## 3. 접근제어 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| IN | 불충분한 인가 (Insufficient Authorization) | 상 | -| PV | 경로 조작 (Path Traversal) | 상 | -| AE | 관리자 페이지 노출 | 상 | -| WM | HTTP Method 제한 미설정 | 중 | - -## 4. 정보노출 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| EP | 에러 페이지를 통한 정보 노출 | 중 | -| IL | 불필요한 정보 노출 | 중 | -| AU | 부적절한 감사 로깅 | 중 | - -### 주요 점검 패턴 -``` -# SQL Injection -- 문자열 연결 쿼리: "SELECT * FROM users WHERE id = '" + input -- 안전: PreparedStatement, 매개변수화 쿼리, ORM - -# XSS -- innerHTML, document.write(input), v-html -- 안전: textContent, DOMPurify, 자동 이스케이프 - -# Command Injection -- Runtime.exec(input), subprocess(shell=True) -- 안전: 화이트리스트 검증, execFile - -# CSRF -- POST 요청에 CSRF 토큰 누락 -- 안전: 프레임워크 CSRF 미들웨어 - -# File Upload -- 확장자 미검증, 웹 루트 내 저장 -- 안전: 화이트리스트, 웹 루트 외부 저장, 랜덤 파일명 -``` - -## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills/fix/references/cii/windows.md b/skills/fix/references/cii/windows.md deleted file mode 100644 index cef3781..0000000 --- a/skills/fix/references/cii/windows.md +++ /dev/null @@ -1,190 +0,0 @@ -# Windows 서버 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) - -## 1. 계정 관리 (14항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-01 | Administrator 계정 이름 변경 등 보안성 강화 | 상 | -| W-02 | Guest 계정 비활성화 | 상 | -| W-03 | 불필요한 계정 제거 | 상 | -| W-04 | 계정 잠금 임계값 설정 | 상 | -| W-05 | 해독 가능한 암호화를 사용하여 암호 저장 해제 | 상 | -| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | -| W-07 | Everyone 사용 권한을 익명 사용자에게 적용 | 중 | -| W-08 | 계정 잠금 기간 설정 | 중 | -| W-09 | 비밀번호 관리정책 설정 | 상 | -| W-10 | 마지막 사용자 이름 표시 안 함 | 중 | -| W-11 | 로컬 로그온 허용 | 중 | -| W-12 | 익명 SID/이름 변환 허용 해제 | 중 | -| W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | -| W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | - -### 주요 점검 명령어 -```powershell -# W-01: Administrator 계정명 -Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select Name - -# W-02: Guest 비활성화 -Get-LocalUser -Name "Guest" | Select Enabled - -# W-04: 계정 잠금 -net accounts - -# W-06: 관리자 그룹 -net localgroup Administrators - -# W-09: 패스워드 정책 -net accounts -``` - ---- - -## 2. 서비스 관리 (23항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-15 | 사용자 개인키 사용 시 암호 입력 | 상 | -| W-16 | 공유 권한 및 사용자 그룹 설정 | 상 | -| W-17 | 하드디스크 기본 공유 제거 | 상 | -| W-18 | 불필요한 서비스 제거 | 상 | -| W-19 | 불필요한 IIS 서비스 구동 점검 | 상 | -| W-20 | NetBIOS 바인딩 서비스 구동 점검 | 상 | -| W-21 | 암호화되지 않는 FTP 서비스 비활성화 | 상 | -| W-22 | FTP 디렉토리 접근권한 설정 | 상 | -| W-23 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | -| W-24 | FTP 접근 제어 설정 | 상 | -| W-25 | DNS Zone Transfer 설정 | 상 | -| W-26 | RDS(Remote Data Services) 제거 | 상 | -| W-27 | 최신 Windows OS Build 버전 적용 | 상 | -| W-28 | 터미널 서비스 암호화 수준 설정 | 중 | -| W-29 | 불필요한 SNMP 서비스 구동 점검 | 중 | -| W-30 | SNMP Community String 복잡성 설정 | 중 | -| W-31 | SNMP Access Control 설정 | 중 | -| W-32 | DNS 서비스 구동 점검 | 중 | -| W-33 | HTTP/FTP/SMTP 배너 차단 | 하 | -| W-34 | Telnet 서비스 비활성화 | 중 | -| W-35 | 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 | 중 | -| W-36 | 원격터미널 접속 타임아웃 설정 | 중 | -| W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | - -### 주요 점검 명령어 -```powershell -# W-17: 기본 공유 -net share -Get-SmbShare - -# W-18: 서비스 목록 -Get-Service | Where-Object {$_.Status -eq "Running"} - -# W-19: IIS -Get-Service W3SVC - -# W-29~31: SNMP -Get-Service SNMP -reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" -``` - ---- - -## 3. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| W-39 | 백신 프로그램 업데이트 | 상 | - -```powershell -# W-38: 패치 현황 -Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 10 -systeminfo | findstr "KB" - -# W-39: 백신 -Get-MpComputerStatus # Windows Defender -``` - ---- - -## 4. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-40 | 정책에 따른 시스템 로깅 설정 | 중 | -| W-41 | NTP 및 시각 동기화 설정 | 중 | -| W-42 | 이벤트 로그 관리 설정 | 하 | -| W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | - -```powershell -# W-40: 감사 정책 -auditpol /get /category:* - -# W-41: NTP -w32tm /query /status - -# W-42: 이벤트 로그 설정 -Get-EventLog -List -``` - ---- - -## 5. 보안 관리 (21항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-44 | 원격으로 액세스할 수 있는 레지스트리 경로 | 상 | -| W-45 | 백신 프로그램 설치 | 상 | -| W-46 | SAM 파일 접근 통제 설정 | 상 | -| W-47 | 화면보호기 설정 | 상 | -| W-48 | 로그온하지 않고 시스템 종료 허용 | 상 | -| W-49 | 원격 시스템에서 강제로 시스템 종료 | 상 | -| W-50 | 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 | 상 | -| W-51 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | -| W-52 | Autologon 기능 제어 | 상 | -| W-53 | 이동식 미디어 포맷 및 꺼내기 허용 | 상 | -| W-54 | DoS 공격 방어 레지스트리 설정 | 중 | -| W-55 | 사용자가 프린터 드라이버를 설치할 수 없게 함 | 중 | -| W-56 | SMB 세션 중단 관리 설정 | 중 | -| W-57 | 로그온 시 경고 메시지 설정 | 하 | -| W-58 | 사용자별 홈 디렉터리 권한 설정 | 중 | -| W-59 | LAN Manager 인증 수준 | 중 | -| W-60 | 보안 채널 데이터 디지털 암호화 또는 서명 | 중 | -| W-61 | 파일 및 디렉토리 보호 | 중 | -| W-62 | 시작프로그램 목록 분석 | 중 | -| W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | -| W-64 | 윈도우 방화벽 설정 | 중 | - -### 주요 점검 명령어 -```powershell -# W-44: 원격 레지스트리 -Get-Service RemoteRegistry | Select Status - -# W-46: SAM 파일 -icacls C:\Windows\System32\config\SAM - -# W-47: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure - -# W-52: Autologon -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon - -# W-59: LAN Manager -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel - -# W-64: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled -``` - ---- - -## 통계 - -| 분류 | 항목 수 | 상 | 중 | 하 | -|------|:------:|:--:|:--:|:--:| -| 계정 관리 | 14 | 7 | 7 | 0 | -| 서비스 관리 | 23 | 13 | 9 | 1 | -| 패치 관리 | 2 | 2 | 0 | 0 | -| 로그 관리 | 4 | 0 | 3 | 1 | -| 보안 관리 | 21 | 10 | 10 | 1 | -| **합계** | **64** | **32** | **29** | **3** | diff --git a/skills/guide/SKILL.md b/skills/guide/SKILL.md deleted file mode 100644 index 2c87fe6..0000000 --- a/skills/guide/SKILL.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: guide -description: Generate secure coding prompts and guides for AI tools (Claude, ChatGPT, Cursor, Copilot). Creates copy-paste ready prompts for writing secure code following KISA CII guidelines, CWE-mapped patterns, and AI security best practices. Use when "generate security guide", "AI security prompt", "secure coding guide", "safe code request", "AI secure coding". ---- - -# KESE Secure Coding Prompt Generator - -Generate secure coding prompts based on KISA guidelines and international standards (OWASP, CWE). - -## Guideline Selection - -| # | Guideline | Description | -|---|-----------|-------------| -| 1 | **CII Secure Coding** | Traditional vulnerabilities (SQLi, XSS, etc.) | -| 2 | **AI Security Coding** | AI-specific (Prompt Injection, Data Poisoning, etc.) | -| 3 | **Robot Security Coding** | Robot-specific (IEC 62443, firmware, protocols) | - -## CII Branch - -Reference `references/cii/webapp.md` for CWE-based patterns. Generate language-specific prompts (Python, JavaScript, Java, Go, etc.) and function-specific prompts (auth, file upload, API security). - -## AI Security Branch - -Reference `references/ai-security/developer.md` and `references/ai-security/overview.md`. Generate prompts for: Prompt Injection defense, Data Poisoning prevention, Model Extraction protection, LLM security, RAG pipeline security. - -## Usage - -Copy the generated prompt into your AI assistant conversation, then request code. diff --git a/skills/guide/references/ai-security/user-guide.md b/skills/guide/references/ai-security/user-guide.md deleted file mode 100644 index 1c3f1e3..0000000 --- a/skills/guide/references/ai-security/user-guide.md +++ /dev/null @@ -1,70 +0,0 @@ -# AI 이용자를 위한 보안 수칙 - -> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 - -## 1. AI 이용자에게 발생할 수 있는 보안 위협 - -### 1.1 챗봇 통한 데이터 유출 -- AI 챗봇 서비스에서 다른 사용자의 개인정보가 노출되는 사례 -- 학습 데이터에 포함된 민감정보가 출력될 가능성 - -### 1.2 AI 음성비서 도청/해킹 -- 스마트 스피커에 레이저/음파를 이용한 명령 주입 -- 백그라운드 실행을 통한 비밀번호 탈취 유도 - -### 1.3 악성 링크/피싱 -- AI가 생성한 정교한 피싱 메시지 -- AI 서비스를 가장한 악성 사이트 - -### 1.4 딥페이크 -- AI 기반 얼굴/음성 합성을 이용한 사기 -- 가짜 영상/음성을 통한 신원 도용 - -### 1.5 안면인식 해킹 -- AI 안면인식 시스템의 우회 공격 -- 적대적 예제를 이용한 인증 우회 - -### 1.6 사이버 테러 -- AI를 악용한 대규모 자동화 공격 -- AI 기반 악성코드 생성 - ---- - -## 2. AI 서비스 이용 보안 수칙 - -### 수칙 1: 안전한 서비스 접근 -- **공식 경로로 다운로드**: 공식 앱 스토어, 공식 웹사이트에서만 AI 서비스 다운로드 -- **강력한 비밀번호 사용**: 영문+숫자+특수문자 조합, 8자 이상 -- **MFA 활성화**: 가능한 경우 다중 인증 설정 -- **공공 네트워크 주의**: 공공 Wi-Fi에서 AI 서비스 이용 시 VPN 사용 권장 -- **이용약관 확인**: AI 서비스의 데이터 수집/활용 정책 확인 - -### 수칙 2: 안전한 서비스 사용 -- **민감정보 입력 금지**: AI 챗봇에 비밀번호, 주민번호, 카드번호 등 입력하지 않기 -- **AI 출력 결과 검증**: AI가 생성한 정보의 정확성을 반드시 확인 -- **의심스러운 결과 신고**: 부적절하거나 유해한 AI 출력 발견 시 서비스 제공자에게 신고 -- **사용 후 데이터 삭제**: AI 서비스 이용 후 대화 기록 등 불필요한 데이터 삭제 -- **주기적 권한 검토**: AI 서비스에 부여한 권한(카메라, 마이크, 위치 등) 주기적 확인 - -### 수칙 3: 딥페이크 대응 -- 영상 통화 시 비정상적 움직임, 음질 이상 주의 -- 금전 요청이나 긴급 상황을 주장하는 연락은 별도 채널로 확인 - -### 수칙 4: AI 음성비서 보안 -- 사용하지 않을 때 마이크 비활성화 -- 음성 구매 기능 비밀번호 설정 -- 정기적으로 음성 기록 검토 및 삭제 - ---- - -## 3. 체크리스트 요약 - -| # | 항목 | 확인 | -|---|------|:----:| -| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | -| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | -| 3 | AI 서비스 이용약관을 확인했는가? | □ | -| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | -| 5 | AI 출력 결과를 검증하고 있는가? | □ | -| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | -| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills/guide/references/cii/cloud.md b/skills/guide/references/cii/cloud.md deleted file mode 100644 index ef26ef5..0000000 --- a/skills/guide/references/cii/cloud.md +++ /dev/null @@ -1,64 +0,0 @@ -# 클라우드 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: AWS, Azure, GCP 등 클라우드 환경 - -## 1. 계정 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-01 | 클라우드 관리 콘솔 기본 계정 변경 | 상 | -| CA-02 | 비밀번호 복잡성 및 MFA 설정 | 상 | -| CA-03 | 불필요한 계정/키 제거 | 상 | -| CA-04 | 루트/관리자 계정 직접 사용 제한 | 상 | - -## 2. 권한 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-05 | IAM 최소 권한 원칙 적용 | 상 | -| CA-06 | 서비스 계정/역할 권한 제한 | 상 | - -## 3. 가상 리소스 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-07 | 보안 그룹/네트워크 ACL 설정 | 상 | -| CA-08 | 스토리지 접근 권한 및 암호화 | 상 | -| CA-09 | 가상 네트워크 분리 (VPC/서브넷) | 상 | -| CA-10 | 미사용 리소스 점검 및 제거 | 중 | - -## 4. 운영 관리 (9항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-11 | 클라우드 감사 로깅 활성화 | 상 | -| CA-12 | 보안 모니터링 및 알림 설정 | 상 | -| CA-13 | 데이터 백업 및 복구 정책 | 상 | -| CA-14 | 보안 패치 및 이미지 관리 | 상 | -| CA-15 | API 키/시크릿 관리 | 상 | -| CA-16 | 전송 중/저장 시 암호화 | 상 | -| CA-17 | 인스턴스 메타데이터 보호 | 중 | -| CA-18 | 컨테이너/서버리스 보안 설정 | 중 | -| CA-19 | 클라우드 서비스 가용성 관리 | 중 | - -### 주요 점검 명령어 -```bash -# AWS -aws iam list-users -aws iam get-credential-report -aws ec2 describe-security-groups -aws s3api get-bucket-encryption --bucket -aws cloudtrail describe-trails - -# Azure -az ad user list -az network nsg list -az storage account list - -# GCP -gcloud iam service-accounts list -gcloud compute firewall-rules list -``` - -## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills/guide/references/cii/database.md b/skills/guide/references/cii/database.md deleted file mode 100644 index 67e8efc..0000000 --- a/skills/guide/references/cii/database.md +++ /dev/null @@ -1,69 +0,0 @@ -# DBMS 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Oracle DB, MSSQL, MySQL, PostgreSQL, Altibase, Tibero, Cubrid - -## 1. 계정 관리 (9항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-01 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | 상 | -| D-02 | 불필요 계정 제거 또는 잠금설정 | 상 | -| D-03 | 비밀번호 사용기간 및 복잡도 설정 | 상 | -| D-04 | 관리자 권한을 필요한 계정/그룹에만 허용 | 상 | -| D-05 | 비밀번호 재사용 제약 설정 | 중 | -| D-06 | DB 사용자 계정 개별 부여 | 중 | -| D-07 | root 권한으로 서비스 구동 제한 | 중 | -| D-08 | 안전한 암호화 알고리즘 사용 | 상 | -| D-09 | 로그인 실패 시 잠금정책 설정 | 중 | - -### 주요 점검 명령어 -```sql --- Oracle: 계정 확인 -SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; --- Oracle: 비밀번호 변경 -ALTER USER <계정> IDENTIFIED BY <신규비밀번호>; - --- MSSQL: sa 비밀번호 변경 -ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; - --- MySQL: root 비밀번호 변경 -ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; - --- PostgreSQL: 역할 확인 -SELECT rolname, rolsuper FROM pg_roles; -``` - -## 2. 접근 관리 (7항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-10 | 원격에서 DB 서버 접속 제한 | 상 | -| D-11 | 비인가 사용자의 시스템 테이블 접근 차단 | 상 | -| D-12 | 안전한 리스너 비밀번호 설정 | 상 | -| D-13 | 불필요한 ODBC/OLE-DB 데이터 소스 제거 | 중 | -| D-14 | 주요 파일 접근 권한 설정 | 중 | -| D-15 | 리스너 로그/trace 파일 변경 제한 | 하 | -| D-16 | Windows 인증 모드 사용 | 하 | - -## 3. 옵션 관리 (8항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-17 | Audit Table 관리자 접근 제한 | 하 | -| D-18 | Role이 Public으로 설정되지 않도록 조정 | 상 | -| D-19 | OS_ROLES 등 원격 인증 FALSE 설정 | 상 | -| D-20 | 인가되지 않은 Object owner 제한 | 하 | -| D-21 | 인가되지 않은 GRANT OPTION 사용 제한 | 중 | -| D-22 | 자원 제한 기능 TRUE 설정 | 하 | -| D-23 | xp_cmdshell 사용 제한 | 상 | -| D-24 | Registry Procedure 권한 제한 | 상 | - -## 4. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| D-26 | 감사 기록 정책 적합 설정 | 상 | - -## 통계: 총 26항목 (상 13, 중 7, 하 6) diff --git a/skills/guide/references/cii/network.md b/skills/guide/references/cii/network.md deleted file mode 100644 index 1f99ce4..0000000 --- a/skills/guide/references/cii/network.md +++ /dev/null @@ -1,87 +0,0 @@ -# 네트워크 장비 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Cisco, Alteon, Passport, Juniper, Piolink 등 - -## 1. 계정 관리 (5항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-01 | 비밀번호 설정 | 상 | -| N-02 | 비밀번호 복잡성 설정 | 상 | -| N-03 | 암호화된 비밀번호 사용 | 상 | -| N-04 | 계정 잠금 임계값 설정 | 상 | -| N-05 | 사용자, 명령어별 권한 수준 설정 | 중 | - -## 2. 접근 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-06 | VTY 접근(ACL) 설정 | 상 | -| N-07 | 세션 종료 시간 설정 | 상 | -| N-08 | VTY 접속 시 안전한 프로토콜 사용 | 중 | -| N-09 | 불필요한 보조 입출력 포트 사용 금지 | 중 | -| N-10 | 로그온 시 경고 메시지 설정 | 중 | -| N-11 | 원격 로그서버 사용 | 중 | - -## 3. 패치 관리 (1항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-12 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | - -## 4. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-13 | 로깅 버퍼 크기 설정 | 중 | -| N-14 | 정책에 따른 로깅 설정 | 중 | -| N-15 | NTP 및 시각 동기화 설정 | 중 | -| N-16 | Timestamp 로그 설정 | 하 | - -## 5. 기능 관리 (22항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-17 | SNMP 서비스 확인 | 상 | -| N-18 | SNMP Community String 복잡성 설정 | 상 | -| N-19 | SNMP ACL 설정 | 상 | -| N-20 | SNMP Community 권한 설정 | 상 | -| N-21 | TFTP 서비스 차단 | 상 | -| N-22 | Spoofing 방지 필터링 적용 | 상 | -| N-23 | DDoS 공격 방어 설정 또는 DDoS 장비 사용 | 상 | -| N-24 | 사용하지 않는 인터페이스 비활성화 | 상 | -| N-25 | TCP Keepalive 서비스 설정 | 중 | -| N-26 | Finger 서비스 차단 | 중 | -| N-27 | 웹 서비스 차단 | 중 | -| N-28 | TCP/UDP small 서비스 차단 | 중 | -| N-29 | Bootp 서비스 차단 | 중 | -| N-30 | CDP 서비스 차단 | 중 | -| N-31 | Directed-broadcast 차단 | 중 | -| N-32 | Source 라우팅 차단 | 중 | -| N-33 | Proxy ARP 차단 | 중 | -| N-34 | ICMP unreachable, Redirect 차단 | 중 | -| N-35 | identd 서비스 차단 | 중 | -| N-36 | Domain Lookup 차단 | 중 | -| N-37 | pad 차단 | 중 | -| N-38 | mask-reply 차단 | 중 | - -### 주요 점검 명령어 (Cisco IOS) -``` -! 계정 관리 -show running-config | include username -show running-config | include enable secret - -! 접근 관리 -show running-config | include line vty -show running-config | include access-class - -! SNMP -show running-config | include snmp-server - -! 불필요 서비스 -show running-config | include no service -show ip http server -``` - -## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills/guide/references/cii/pc.md b/skills/guide/references/cii/pc.md deleted file mode 100644 index c3dd9fc..0000000 --- a/skills/guide/references/cii/pc.md +++ /dev/null @@ -1,62 +0,0 @@ -# PC 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Windows 10, Windows 11 - -## 1. 계정 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-01 | 비밀번호의 주기적 변경 | 상 | -| PC-02 | 비밀번호 관리정책 설정 | 상 | -| PC-03 | 복구 콘솔에서 자동 로그온 금지 설정 | 중 | - -## 2. 서비스 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-04 | 공유 폴더 제거 | 상 | -| PC-05 | 불필요한 서비스 제거 | 상 | -| PC-06 | 비인가 상용 메신저 사용 금지 | 상 | -| PC-07 | 파일 시스템이 NTFS 포맷으로 설정 | 중 | -| PC-08 | 다른 OS로 멀티 부팅 불가 설정 | 중 | -| PC-09 | 브라우저 종료 시 임시 인터넷 파일 삭제 | 하 | - -## 3. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-10 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| PC-11 | 지원 종료되지 않은 Windows OS Build 적용 | 상 | - -## 4. 보안 관리 (7항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-12 | Windows 자동 로그인 점검 | 중 | -| PC-13 | 바이러스 백신 설치 및 주기적 업데이트 | 상 | -| PC-14 | 실시간 감시 기능 활성화 | 상 | -| PC-15 | OS 침입차단 기능 활성화 | 상 | -| PC-16 | 화면보호기 대기 시간 및 암호 보호 설정 | 상 | -| PC-17 | 이동식 미디어 자동실행 방지 | 상 | -| PC-18 | 원격 지원 금지 정책 설정 | 중 | - -### 주요 점검 명령어 -```powershell -# PC-01: 비밀번호 최대 사용기간 -net accounts | findstr "최대" - -# PC-04: 공유 폴더 -net share - -# PC-13~14: 백신 -Get-MpComputerStatus - -# PC-15: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled - -# PC-16: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -``` - -## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills/guide/references/cii/unix.md b/skills/guide/references/cii/unix.md deleted file mode 100644 index b9688e3..0000000 --- a/skills/guide/references/cii/unix.md +++ /dev/null @@ -1,233 +0,0 @@ -# Unix 서버 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: SOLARIS, LINUX, AIX, HP-UX - -## 1. 계정 관리 (13항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-01 | root 계정 원격 접속 제한 | 상 | -| U-02 | 비밀번호 관리정책 설정 | 상 | -| U-03 | 계정 잠금 임계값 설정 | 상 | -| U-04 | 비밀번호 파일 보호 | 상 | -| U-05 | root 이외의 UID가 '0' 금지 | 상 | -| U-06 | 사용자 계정 su 기능 제한 | 상 | -| U-07 | 불필요한 계정 제거 | 하 | -| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | -| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | -| U-10 | 동일한 UID 금지 | 중 | -| U-11 | 사용자 Shell 점검 | 하 | -| U-12 | 세션 종료 시간 설정 | 하 | -| U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | - -### 주요 점검 명령어 -```bash -# U-01: root 원격 접속 제한 -grep -i "PermitRootLogin" /etc/ssh/sshd_config -cat /etc/default/login | grep CONSOLE # Solaris -cat /etc/securetty # Linux - -# U-02: 비밀번호 정책 -cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" -cat /etc/security/pwquality.conf # Linux - -# U-03: 계정 잠금 -cat /etc/pam.d/system-auth | grep pam_tally -cat /etc/security/user | grep loginretries # AIX - -# U-04: shadow 파일 보호 -ls -la /etc/shadow - -# U-05: UID 0 점검 -awk -F: '$3==0 {print $1}' /etc/passwd - -# U-06: su 제한 -cat /etc/pam.d/su | grep pam_wheel -ls -la /usr/bin/su - -# U-12: 세션 타임아웃 -echo $TMOUT -``` - ---- - -## 2. 파일 및 디렉터리 관리 (20항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-14 | root 홈, 패스 디렉터리 권한 및 패스 설정 | 상 | -| U-15 | 파일 및 디렉터리 소유자 설정 | 상 | -| U-16 | /etc/passwd 파일 소유자 및 권한 설정 | 상 | -| U-17 | 시스템 시작 스크립트 권한 설정 | 상 | -| U-18 | /etc/shadow 파일 소유자 및 권한 설정 | 상 | -| U-19 | /etc/hosts 파일 소유자 및 권한 설정 | 상 | -| U-20 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | 상 | -| U-21 | /etc/(r)syslog.conf 파일 소유자 및 권한 설정 | 상 | -| U-22 | /etc/services 파일 소유자 및 권한 설정 | 상 | -| U-23 | SUID, SGID, Sticky bit 설정 파일 점검 | 상 | -| U-24 | 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 | 상 | -| U-25 | world writable 파일 점검 | 상 | -| U-26 | /dev에 존재하지 않는 device 파일 점검 | 상 | -| U-27 | $HOME/.rhosts, hosts.equiv 사용 금지 | 상 | -| U-28 | 접속 IP 및 포트 제한 | 상 | -| U-29 | hosts.lpd 파일 소유자 및 권한 설정 | 하 | -| U-30 | UMASK 설정 관리 | 중 | -| U-31 | 홈 디렉토리 소유자 및 권한 설정 | 중 | -| U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | -| U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | - -### 주요 점검 명령어 -```bash -# U-14: root PATH -echo $PATH | grep "::" -echo $PATH | grep ":$" - -# U-16~U-22: 주요 파일 권한 -ls -la /etc/passwd /etc/shadow /etc/hosts /etc/services -ls -la /etc/inetd.conf /etc/xinetd.conf /etc/syslog.conf /etc/rsyslog.conf - -# U-23: SUID/SGID -find / -perm -4000 -o -perm -2000 2>/dev/null - -# U-25: world writable -find / -type f -perm -002 2>/dev/null - -# U-26: /dev 점검 -find /dev -type f 2>/dev/null - -# U-27: rhosts -find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null - -# U-28: 접속 제한 -cat /etc/hosts.allow -cat /etc/hosts.deny -iptables -L - -# U-30: umask -umask -grep umask /etc/profile /etc/bashrc -``` - ---- - -## 3. 서비스 관리 (30항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-34 | Finger 서비스 비활성화 | 상 | -| U-35 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | -| U-36 | r 계열 서비스 비활성화 | 상 | -| U-37 | crontab 설정파일 권한 설정 | 상 | -| U-38 | DoS 공격에 취약한 서비스 비활성화 | 상 | -| U-39 | 불필요한 NFS 서비스 비활성화 | 상 | -| U-40 | NFS 접근 통제 | 상 | -| U-41 | 불필요한 automountd 제거 | 상 | -| U-42 | 불필요한 RPC 서비스 비활성화 | 상 | -| U-43 | NIS, NIS+ 점검 | 상 | -| U-44 | tftp, talk 서비스 비활성화 | 상 | -| U-45 | 메일 서비스 버전 점검 | 상 | -| U-46 | 일반 사용자의 메일 서비스 실행 방지 | 상 | -| U-47 | 스팸 메일 릴레이 제한 | 상 | -| U-48 | expn, vrfy 명령어 제한 | 중 | -| U-49 | DNS 보안 버전 패치 | 상 | -| U-50 | DNS Zone Transfer 설정 | 상 | -| U-51 | DNS 서비스의 취약한 동적 업데이트 설정 금지 | 중 | -| U-52 | Telnet 서비스 비활성화 | 중 | -| U-53 | FTP 서비스 정보 노출 제한 | 하 | -| U-54 | 암호화되지 않는 FTP 서비스 비활성화 | 중 | -| U-55 | FTP 계정 Shell 제한 | 중 | -| U-56 | FTP 서비스 접근 제어 설정 | 하 | -| U-57 | Ftpusers 파일 설정 | 중 | -| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | -| U-59 | 안전한 SNMP 버전 사용 | 상 | -| U-60 | SNMP Community String 복잡성 설정 | 중 | -| U-61 | SNMP Access Control 설정 | 상 | -| U-62 | 로그인 시 경고 메시지 설정 | 하 | -| U-63 | sudo 명령어 접근 관리 | 중 | - -### 주요 점검 명령어 -```bash -# U-34~U-44: 불필요 서비스 점검 -systemctl list-unit-files --state=enabled -chkconfig --list # CentOS 6 -inetadm # Solaris - -# U-39~U-40: NFS -showmount -e -cat /etc/exports -cat /etc/dfs/dfstab # Solaris - -# U-45~U-48: 메일 서비스 -sendmail -d0.1 -bt < /dev/null 2>&1 | grep Version -postconf mail_version -cat /etc/mail/sendmail.cf | grep "O PrivacyOptions" - -# U-49~U-51: DNS -named -v -cat /etc/named.conf | grep "allow-transfer" - -# U-58~U-61: SNMP -cat /etc/snmp/snmpd.conf | grep -i community -ps -ef | grep snmp -``` - ---- - -## 4. 패치 관리 (1항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | - -```bash -# 패치 현황 -uname -a -rpm -qa --last | head -20 # Linux -showrev -p # Solaris -instfix -i | grep ML # AIX -``` - ---- - -## 5. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-65 | NTP 및 시각 동기화 설정 | 중 | -| U-66 | 정책에 따른 시스템 로깅 설정 | 중 | -| U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | - -```bash -# U-65: NTP -ntpq -p -cat /etc/ntp.conf -chronyc sources # CentOS 8+ - -# U-66: 로깅 설정 -cat /etc/rsyslog.conf -cat /etc/syslog.conf - -# U-67: 로그 권한 -ls -la /var/log/ -``` - ---- - -## 판단 기준 - -| 판단 | 설명 | -|------|------| -| 양호 | 보안 설정이 적절히 적용됨 | -| 취약 | 보안 취약점 존재, 조치 필요 | - -## 통계 - -| 분류 | 항목 수 | 상 | 중 | 하 | -|------|:------:|:--:|:--:|:--:| -| 계정 관리 | 13 | 6 | 4 | 3 | -| 파일/디렉터리 관리 | 20 | 15 | 3 | 2 | -| 서비스 관리 | 30 | 19 | 9 | 2 | -| 패치 관리 | 1 | 1 | 0 | 0 | -| 로그 관리 | 3 | 0 | 3 | 0 | -| **합계** | **67** | **41** | **19** | **7** | diff --git a/skills/guide/references/cii/web-service.md b/skills/guide/references/cii/web-service.md deleted file mode 100644 index e3f96bd..0000000 --- a/skills/guide/references/cii/web-service.md +++ /dev/null @@ -1,74 +0,0 @@ -# 웹 서비스 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Apache, Nginx, IIS, Tomcat, JEUS - -## 1. 계정 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-01 | Default 관리자 계정명 변경 | 상 | -| WEB-02 | 취약한 비밀번호 사용 제한 | 상 | -| WEB-03 | 비밀번호 파일 권한 관리 | 상 | - -## 2. 서비스 관리 (15항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-04 | 웹 서비스 디렉터리 리스팅 방지 설정 | 상 | -| WEB-05 | 지정하지 않은 CGI/ISAPI 실행 제한 | 상 | -| WEB-06 | 웹 서비스 상위 디렉터리 접근 제한 설정 | 상 | -| WEB-07 | 웹 서비스 경로 내 불필요한 파일 제거 | 중 | -| WEB-08 | 웹 서비스 파일 업로드 및 다운로드 용량 제한 | 하 | -| WEB-09 | 웹 서비스 프로세스 권한 제한 | 상 | -| WEB-10 | 불필요한 프록시 설정 제한 | 상 | -| WEB-11 | 웹 서비스 경로 설정 | 중 | -| WEB-12 | 웹 서비스 링크 사용 금지 | 중 | -| WEB-13 | 웹 서비스 설정 파일 노출 제한 | 상 | -| WEB-14 | 웹 서비스 경로 내 파일의 접근 통제 | 상 | -| WEB-15 | 웹 서비스의 불필요한 스크립트 매핑 제거 | 상 | -| WEB-16 | 웹 서비스 헤더 정보 노출 제한 | 중 | -| WEB-17 | 웹 서비스 가상 디렉토리 삭제 | 중 | -| WEB-18 | 웹 서비스 WebDAV 비활성화 | 상 | - -## 3. 보안 설정 (5항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-19 | 웹 서비스 SSI 사용 제한 | 중 | -| WEB-20 | SSL/TLS 활성화 | 상 | -| WEB-21 | HTTP 리디렉션 | 중 | -| WEB-22 | 에러 페이지 관리 | 하 | -| WEB-23 | LDAP 알고리즘 적절하게 구성 | 중 | - -## 4. 패치 및 로그 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-24 | 별도의 업로드 경로 사용 및 권한 설정 | 중 | -| WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | - -### 주요 점검 명령어 -```bash -# WEB-04: 디렉터리 리스팅 -# Apache -grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" -# Nginx -grep -i "autoindex" /etc/nginx/nginx.conf - -# WEB-09: 프로세스 권한 -ps -ef | grep httpd | grep -v root - -# WEB-16: 헤더 정보 노출 -# Apache: grep "ServerTokens" httpd.conf → Prod 설정 -# Nginx: grep "server_tokens" nginx.conf → off 설정 - -# WEB-18: WebDAV -grep -i "LoadModule.*dav" /etc/httpd/conf/httpd.conf - -# WEB-20: SSL/TLS -grep -i "SSLProtocol\|ssl_protocols" /etc/httpd/conf.d/ssl.conf /etc/nginx/nginx.conf -``` - -## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills/guide/references/cii/webapp.md b/skills/guide/references/cii/webapp.md deleted file mode 100644 index 5a1888d..0000000 --- a/skills/guide/references/cii/webapp.md +++ /dev/null @@ -1,70 +0,0 @@ -# Web Application 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: 웹 애플리케이션 소스 코드 및 설정 - -## 1. 입력값 검증 (8항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CI | Command Injection | 상 | -| SI | SQL Injection | 상 | -| XS | Cross-Site Scripting (XSS) | 상 | -| CF | Cross-Site Request Forgery (CSRF) | 상 | -| SF | Server-Side Request Forgery (SSRF) | 상 | -| FU | File Upload 취약점 | 상 | -| FD | File Download 취약점 | 상 | -| DI | 디렉터리 인덱싱 | 중 | - -## 2. 인증/세션 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| BF | Brute Force 공격 | 상 | -| IA | 불충분한 인증 (Insufficient Authentication) | 상 | -| PR | 비밀번호 복구 취약점 | 중 | -| IS | 불충분한 세션 관리 | 상 | -| CC | 세션 고정 (Credential/Session Prediction) | 상 | -| SN | 세션 만료 미설정 | 중 | - -## 3. 접근제어 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| IN | 불충분한 인가 (Insufficient Authorization) | 상 | -| PV | 경로 조작 (Path Traversal) | 상 | -| AE | 관리자 페이지 노출 | 상 | -| WM | HTTP Method 제한 미설정 | 중 | - -## 4. 정보노출 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| EP | 에러 페이지를 통한 정보 노출 | 중 | -| IL | 불필요한 정보 노출 | 중 | -| AU | 부적절한 감사 로깅 | 중 | - -### 주요 점검 패턴 -``` -# SQL Injection -- 문자열 연결 쿼리: "SELECT * FROM users WHERE id = '" + input -- 안전: PreparedStatement, 매개변수화 쿼리, ORM - -# XSS -- innerHTML, document.write(input), v-html -- 안전: textContent, DOMPurify, 자동 이스케이프 - -# Command Injection -- Runtime.exec(input), subprocess(shell=True) -- 안전: 화이트리스트 검증, execFile - -# CSRF -- POST 요청에 CSRF 토큰 누락 -- 안전: 프레임워크 CSRF 미들웨어 - -# File Upload -- 확장자 미검증, 웹 루트 내 저장 -- 안전: 화이트리스트, 웹 루트 외부 저장, 랜덤 파일명 -``` - -## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills/guide/references/cii/windows.md b/skills/guide/references/cii/windows.md deleted file mode 100644 index cef3781..0000000 --- a/skills/guide/references/cii/windows.md +++ /dev/null @@ -1,190 +0,0 @@ -# Windows 서버 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) - -## 1. 계정 관리 (14항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-01 | Administrator 계정 이름 변경 등 보안성 강화 | 상 | -| W-02 | Guest 계정 비활성화 | 상 | -| W-03 | 불필요한 계정 제거 | 상 | -| W-04 | 계정 잠금 임계값 설정 | 상 | -| W-05 | 해독 가능한 암호화를 사용하여 암호 저장 해제 | 상 | -| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | -| W-07 | Everyone 사용 권한을 익명 사용자에게 적용 | 중 | -| W-08 | 계정 잠금 기간 설정 | 중 | -| W-09 | 비밀번호 관리정책 설정 | 상 | -| W-10 | 마지막 사용자 이름 표시 안 함 | 중 | -| W-11 | 로컬 로그온 허용 | 중 | -| W-12 | 익명 SID/이름 변환 허용 해제 | 중 | -| W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | -| W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | - -### 주요 점검 명령어 -```powershell -# W-01: Administrator 계정명 -Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select Name - -# W-02: Guest 비활성화 -Get-LocalUser -Name "Guest" | Select Enabled - -# W-04: 계정 잠금 -net accounts - -# W-06: 관리자 그룹 -net localgroup Administrators - -# W-09: 패스워드 정책 -net accounts -``` - ---- - -## 2. 서비스 관리 (23항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-15 | 사용자 개인키 사용 시 암호 입력 | 상 | -| W-16 | 공유 권한 및 사용자 그룹 설정 | 상 | -| W-17 | 하드디스크 기본 공유 제거 | 상 | -| W-18 | 불필요한 서비스 제거 | 상 | -| W-19 | 불필요한 IIS 서비스 구동 점검 | 상 | -| W-20 | NetBIOS 바인딩 서비스 구동 점검 | 상 | -| W-21 | 암호화되지 않는 FTP 서비스 비활성화 | 상 | -| W-22 | FTP 디렉토리 접근권한 설정 | 상 | -| W-23 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | -| W-24 | FTP 접근 제어 설정 | 상 | -| W-25 | DNS Zone Transfer 설정 | 상 | -| W-26 | RDS(Remote Data Services) 제거 | 상 | -| W-27 | 최신 Windows OS Build 버전 적용 | 상 | -| W-28 | 터미널 서비스 암호화 수준 설정 | 중 | -| W-29 | 불필요한 SNMP 서비스 구동 점검 | 중 | -| W-30 | SNMP Community String 복잡성 설정 | 중 | -| W-31 | SNMP Access Control 설정 | 중 | -| W-32 | DNS 서비스 구동 점검 | 중 | -| W-33 | HTTP/FTP/SMTP 배너 차단 | 하 | -| W-34 | Telnet 서비스 비활성화 | 중 | -| W-35 | 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 | 중 | -| W-36 | 원격터미널 접속 타임아웃 설정 | 중 | -| W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | - -### 주요 점검 명령어 -```powershell -# W-17: 기본 공유 -net share -Get-SmbShare - -# W-18: 서비스 목록 -Get-Service | Where-Object {$_.Status -eq "Running"} - -# W-19: IIS -Get-Service W3SVC - -# W-29~31: SNMP -Get-Service SNMP -reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" -``` - ---- - -## 3. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| W-39 | 백신 프로그램 업데이트 | 상 | - -```powershell -# W-38: 패치 현황 -Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 10 -systeminfo | findstr "KB" - -# W-39: 백신 -Get-MpComputerStatus # Windows Defender -``` - ---- - -## 4. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-40 | 정책에 따른 시스템 로깅 설정 | 중 | -| W-41 | NTP 및 시각 동기화 설정 | 중 | -| W-42 | 이벤트 로그 관리 설정 | 하 | -| W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | - -```powershell -# W-40: 감사 정책 -auditpol /get /category:* - -# W-41: NTP -w32tm /query /status - -# W-42: 이벤트 로그 설정 -Get-EventLog -List -``` - ---- - -## 5. 보안 관리 (21항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-44 | 원격으로 액세스할 수 있는 레지스트리 경로 | 상 | -| W-45 | 백신 프로그램 설치 | 상 | -| W-46 | SAM 파일 접근 통제 설정 | 상 | -| W-47 | 화면보호기 설정 | 상 | -| W-48 | 로그온하지 않고 시스템 종료 허용 | 상 | -| W-49 | 원격 시스템에서 강제로 시스템 종료 | 상 | -| W-50 | 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 | 상 | -| W-51 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | -| W-52 | Autologon 기능 제어 | 상 | -| W-53 | 이동식 미디어 포맷 및 꺼내기 허용 | 상 | -| W-54 | DoS 공격 방어 레지스트리 설정 | 중 | -| W-55 | 사용자가 프린터 드라이버를 설치할 수 없게 함 | 중 | -| W-56 | SMB 세션 중단 관리 설정 | 중 | -| W-57 | 로그온 시 경고 메시지 설정 | 하 | -| W-58 | 사용자별 홈 디렉터리 권한 설정 | 중 | -| W-59 | LAN Manager 인증 수준 | 중 | -| W-60 | 보안 채널 데이터 디지털 암호화 또는 서명 | 중 | -| W-61 | 파일 및 디렉토리 보호 | 중 | -| W-62 | 시작프로그램 목록 분석 | 중 | -| W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | -| W-64 | 윈도우 방화벽 설정 | 중 | - -### 주요 점검 명령어 -```powershell -# W-44: 원격 레지스트리 -Get-Service RemoteRegistry | Select Status - -# W-46: SAM 파일 -icacls C:\Windows\System32\config\SAM - -# W-47: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure - -# W-52: Autologon -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon - -# W-59: LAN Manager -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel - -# W-64: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled -``` - ---- - -## 통계 - -| 분류 | 항목 수 | 상 | 중 | 하 | -|------|:------:|:--:|:--:|:--:| -| 계정 관리 | 14 | 7 | 7 | 0 | -| 서비스 관리 | 23 | 13 | 9 | 1 | -| 패치 관리 | 2 | 2 | 0 | 0 | -| 로그 관리 | 4 | 0 | 3 | 1 | -| 보안 관리 | 21 | 10 | 10 | 1 | -| **합계** | **64** | **32** | **29** | **3** | diff --git a/skills/kesekit-check/SKILL.md b/skills/kesekit-check/SKILL.md new file mode 100644 index 0000000..28b6f23 --- /dev/null +++ b/skills/kesekit-check/SKILL.md @@ -0,0 +1,79 @@ +--- +name: kesekit-check +description: Run a pre-deployment security compliance checklist based on KISA guidelines. Supports CII compliance (70 items), AI security checklists, Robot Security (103 items), and Space Security (12 domains, 53 items). Use when "pre-deploy check", "compliance checklist", "security checklist", "AI security check", "robot security check", "space security check", "satellite compliance", "GSaaS check". +--- + +# KESE Pre-Deployment Security Compliance Checklist + +Run pre-deployment security checks. Auto-selects guideline based on user context. + +## Guideline Selection + +| # | Guideline | Description | +|---|-----------|-------------| +| 1 | **CII Compliance** | 70-item pre-deployment checklist | +| 2 | **AI Security Checklist** | AI developer/provider verification | +| 3 | **Robot Security Checklist** | Robot system 11 categories, 103 items | +| 4 | **Space Security Checklist** | Satellite/GSaaS/supply chain 12 domains, 53 items | +| 5 | **Secure Coding Checklist** | JavaScript/Python code review (7 categories, 46 CWE) | +| 6 | **Zero Trust Checklist** | Zero Trust maturity assessment (8 elements, 4 maturity levels, ~396 items) | + +Servers, infrastructure → **CII** / AI models, LLM → **AI Security** / robots, ROS/ROS2 → **Robot Security** / satellites, ground stations, GSaaS, space supply chain → **Space Security** / JavaScript, Python, web app code → **Secure Coding** +Zero Trust, ZTA, ZTNA, 제로트러스트, 마이크로세그멘테이션, microsegmentation, SDP, SASE, PEP/PDP, never trust always verify → **Zero Trust** + +--- + +## CII Branch + +Load reference files from `templates/cii/` based on detected environment. Check commands available in `scripts/cii/` directory. Check categories: Account Security (15), Access Control (15), Encryption (12), Logging (10), Service Hardening (12), Patch Management (6). + +Severity: Critical (deployment blocker) → High → Medium → Low + +## AI Security Branch + +Load from `references/ai-security/` for overview and guidance, and `templates/ai-security/` for assessment checklists. Check developer (54 items), service provider, or user checklists by lifecycle phase. + +## Robot Security Branch + +Load from `templates/robot-security/`. Start with `overview.md`, then select one or more category references (`ssdf.md`, `supply-chain.md`, `iec62443.md`, `cyber-resilience.md`, `wireless.md`) based on the robot type, interfaces, and regulatory context. + +--- + +## Space Security Branch + +Load from `references/space-security/` for overview and supply chain guidance, and `templates/space-security/` for assessment checklists. Start with `references/space-security/overview.md`, then select domain references based on the space system type (GSaaS, satellite operator, ground station). Check against CMMC/K-RMF/NIS2/ISMS-P standards. + +--- + +## Secure Coding Branch + +Load from `references/secure-coding/overview.md` for category/CWE mapping, then use `templates/secure-coding/javascript.md` or `templates/secure-coding/python.md` for language-specific checklists. Use `references/secure-coding/pseudocode.md` for other languages. + +Priority: Critical (8 items) → High (13 items) → Medium (25 items). Block deployment if any Critical CWE found. + +--- + +## Zero Trust Branch + +Load from `references/zero-trust/` for overview and maturity model, and `templates/zero-trust/` for assessment checklists. Start with `templates/zero-trust/overview.md`, then select element-specific checklists based on system context. If OT/ICS detected, also load `templates/zero-trust/ot-environment.md`. + +| Topic | Reference File | +|-------|---------------| +| Overview | `templates/zero-trust/overview.md` | +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +8 core elements, ~396 items across 4 maturity levels. Standards: KISA ZT Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model. + +--- + +## Rules +- Never skip Critical severity items +- Provide specific file paths and commands for fixes +- Block deployment if pass rate < 60% diff --git a/skills/check/references/ai-security/overview.md b/skills/kesekit-check/references/ai-security/overview.md similarity index 100% rename from skills/check/references/ai-security/overview.md rename to skills/kesekit-check/references/ai-security/overview.md diff --git a/skills/check/references/ai-security/service-provider.md b/skills/kesekit-check/references/ai-security/service-provider.md similarity index 100% rename from skills/check/references/ai-security/service-provider.md rename to skills/kesekit-check/references/ai-security/service-provider.md diff --git a/skills/kesekit-check/references/ai-security/user-guide.md b/skills/kesekit-check/references/ai-security/user-guide.md new file mode 100644 index 0000000..808f78d --- /dev/null +++ b/skills/kesekit-check/references/ai-security/user-guide.md @@ -0,0 +1,58 @@ +# AI 이용자를 위한 보안 수칙 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +## 1. AI 이용자에게 발생할 수 있는 보안 위협 + +### 1.1 챗봇 통한 데이터 유출 +- AI 챗봇 서비스에서 다른 사용자의 개인정보가 노출되는 사례 +- 학습 데이터에 포함된 민감정보가 출력될 가능성 + +### 1.2 AI 음성비서 도청/해킹 +- 스마트 스피커에 레이저/음파를 이용한 명령 주입 +- 백그라운드 실행을 통한 비밀번호 탈취 유도 + +### 1.3 악성 링크/피싱 +- AI가 생성한 정교한 피싱 메시지 +- AI 서비스를 가장한 악성 사이트 + +### 1.4 딥페이크 +- AI 기반 얼굴/음성 합성을 이용한 사기 +- 가짜 영상/음성을 통한 신원 도용 + +### 1.5 안면인식 해킹 +- AI 안면인식 시스템의 우회 공격 +- 적대적 예제를 이용한 인증 우회 + +### 1.6 사이버 테러 +- AI를 악용한 대규모 자동화 공격 +- AI 기반 악성코드 생성 + +--- + +## 2. AI 서비스 이용 보안 수칙 + +### 수칙 1: 안전한 서비스 접근 +- **공식 경로로 다운로드**: 공식 앱 스토어, 공식 웹사이트에서만 AI 서비스 다운로드 +- **강력한 비밀번호 사용**: 영문+숫자+특수문자 조합, 8자 이상 +- **MFA 활성화**: 가능한 경우 다중 인증 설정 +- **공공 네트워크 주의**: 공공 Wi-Fi에서 AI 서비스 이용 시 VPN 사용 권장 +- **이용약관 확인**: AI 서비스의 데이터 수집/활용 정책 확인 + +### 수칙 2: 안전한 서비스 사용 +- **민감정보 입력 금지**: AI 챗봇에 비밀번호, 주민번호, 카드번호 등 입력하지 않기 +- **AI 출력 결과 검증**: AI가 생성한 정보의 정확성을 반드시 확인 +- **의심스러운 결과 신고**: 부적절하거나 유해한 AI 출력 발견 시 서비스 제공자에게 신고 +- **사용 후 데이터 삭제**: AI 서비스 이용 후 대화 기록 등 불필요한 데이터 삭제 +- **주기적 권한 검토**: AI 서비스에 부여한 권한(카메라, 마이크, 위치 등) 주기적 확인 + +### 수칙 3: 딥페이크 대응 +- 영상 통화 시 비정상적 움직임, 음질 이상 주의 +- 금전 요청이나 긴급 상황을 주장하는 연락은 별도 채널로 확인 + +### 수칙 4: AI 음성비서 보안 +- 사용하지 않을 때 마이크 비활성화 +- 음성 구매 기능 비밀번호 설정 +- 정기적으로 음성 기록 검토 및 삭제 + +--- diff --git a/skills/kesekit-check/references/secure-coding/overview.md b/skills/kesekit-check/references/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/skills/kesekit-check/references/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/skills/kesekit-check/references/secure-coding/pseudocode.md b/skills/kesekit-check/references/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/skills/kesekit-check/references/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/skills/kesekit-check/references/space-security/overview.md b/skills/kesekit-check/references/space-security/overview.md new file mode 100644 index 0000000..f31ab87 --- /dev/null +++ b/skills/kesekit-check/references/space-security/overview.md @@ -0,0 +1,82 @@ +# Space Security Overview + +> Source: KISA "Space Security Model" Part1 (2024.12) + Part2 (2025.12) + Explanation Guide (2025.12) + +## 1. Overview + +| Item | Content | +|------|---------| +| Publisher | KISA (Korea Internet & Security Agency) / MSIT | +| Target | Space industry operators, satellite service providers, GSaaS providers, supply chain participants | +| Scope | Space segment, Ground segment, Satellite service segment, GSaaS, Supply chain | +| Standards | CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, NIST CSF, CCSDS | + +## 2. Space Architecture Layers + +| Layer | Components | +|-------|-----------| +| Space Segment | GEO/MEO/LEO satellites, LEO constellations, satellite bus, payload, OBC | +| Ground Segment | Satellite control, payload data processing, antenna, satellite modem, mission control | +| GSaaS | Antenna zone, ground station-cloud zone, reservation/scheduling, API/DB servers | +| Satellite Services | Navigation (GNSS), Communication (VSAT/LEO), Broadcasting | +| Supply Chain | Satellite/launch vehicle manufacturers, ground station operators, satellite operators | + +## 3. Satellite Service Types + +| Service | Description | Key Components | +|---------|-------------|----------------| +| Navigation (GNSS) | Position/navigation/timing via GNSS satellites | Smart ships, autonomous vehicles, UAM | +| Communication | Satellite-based data/voice communication | VSAT, LEO mobile, LEO internet | +| Broadcasting | Satellite TV/radio relay | Broadcasting centers, set-top boxes | +| GSaaS | Ground Station as a Service (cloud-based shared infrastructure) | Shared antennas, cloud scheduling, API | + +## 4. Security Objectives + +| Objective | Description | +|-----------|-------------| +| Confidentiality | Prevent unauthorized access to satellite data and communications | +| Integrity | Prevent unauthorized modification of commands, telemetry, and operational data | +| Availability | Ensure continuous satellite service operation | +| Authentication | Verify identity of users, processes, devices, and satellites | +| Non-repudiation | Ensure accountability for satellite operations | +| Resilience | Maintain operations during and after security incidents | + +## 5. Threat Categories (3 Major Types) + +| Type | Description | Attack Vectors | +|------|-------------|----------------| +| Data Corruption | Unauthorized data modification/deletion | MITM, spoofing, malware, insider threat | +| Service Disruption | Service interruption/degradation | Jamming, DDoS, physical destruction, SW vulnerabilities | +| Information Leakage | Sensitive data exfiltration | Eavesdropping, sniffing, session hijacking, data theft | + +## 6. Checklist Structure (12 Domains, 53 Items) + +| # | Code | Domain | Items | Reference File | +|---|------|--------|:-----:|----------------| +| 1 | AC | Access Control | 12 | `access-control.md` | +| 2 | IA | Identification & Authentication | 2 | `access-control.md` | +| 3 | SC | System & Communication Security | 7 | `system-security.md` | +| 4 | SI | System & Information Integrity | 4 | `system-security.md` | +| 5 | SO | System/Service Operations Management | 9 | `operations.md` | +| 6 | IR | Incident Response | 2 | `operations.md` | +| 7 | PS | Personnel Security | 2 | `governance.md` | +| 8 | PE | Physical & Environmental Security | 3 | `governance.md` | +| 9 | RA | Risk Assessment & Security Evaluation | 2 | `governance.md` | +| 10 | SG | Security Governance | 4 | `governance.md` | +| 11 | CP | Contingency Planning | 2 | `governance.md` | +| 12 | SM | Supply Chain Management | 4 | `supply-chain.md` | + +## 7. Compliance Standards + +| Standard | Description | +|----------|-------------| +| CMMC | Cybersecurity Maturity Model Certification (US DoD, Level 1-3) | +| K-RMF | Korea Risk Management Framework | +| NIS2 | EU Network and Information Security Directive (includes space) | +| ISMS-P | Korea Information Security Management System | +| NIST IR 8401 | Satellite Ground Segment Cybersecurity | +| NIST IR 8270 | Commercial Satellite Operations Cybersecurity | +| NIST CSF | Cybersecurity Framework (Identify/Protect/Detect/Respond/Recover) | +| NIST SP 800-171 | CUI Protection (110 requirements) | +| CCSDS 352.0-B-2 | Space System Cryptographic Algorithm Recommendation | +| ENISA Space Threat Landscape | Space system threat analysis | diff --git a/skills/kesekit-check/references/space-security/supply-chain.md b/skills/kesekit-check/references/space-security/supply-chain.md new file mode 100644 index 0000000..2f66548 --- /dev/null +++ b/skills/kesekit-check/references/space-security/supply-chain.md @@ -0,0 +1,60 @@ +# Supply Chain Threat Scenarios + +> Domain: GSaaS/Supply Chain Threat Scenarios (with code-block illustrations) + +## Threat Scenarios (Supply Chain) + +### Scenario 1: Vulnerable Open-Source Causing Ground Station Failure +``` +Backdoor inserted into open-source community + -> Library used without verification + -> Backdoor enables system takeover + -> Ground station service disruption +``` + +### Scenario 2: Malicious Code in Payload Update File +``` +Developer PC compromised via phishing + -> Ransomware inserted into SW update + -> Update uploaded to satellite without verification + -> Payload malfunction +``` + +### Scenario 3: Tampered IDE Plugin Causing Satellite Malfunction +``` +Malicious code in IDE/CI-CD plugin + -> Firmware developed/loaded without verification + -> Component inspection skipped + -> Satellite bus malfunction +``` + +## GSaaS Threat Scenarios + +### Scenario 1: Satellite Control Hijacking via Weak Authentication +``` +Plaintext communication sniffing + -> IAM credential theft + -> Web shell upload + -> Ground station infiltration + -> Orbit control system takeover + -> Satellite hijacking +``` + +### Scenario 2: Data Tampering via Unauthorized Device Backdoor +``` +No media control + -> USB/single-board-computer backdoor + -> Internal network access + -> Satellite access credential collection + -> Data tampering malware injection +``` + +### Scenario 3: Physical Attack via Drone Disrupting Satellite Communication +``` +Plaintext communication sniffing + -> Antenna location identified + -> Drone with jamming device/explosives + -> Antenna-satellite communication disrupted +``` + +## Total: 4 Checklist Items + 6 Threat Scenarios diff --git a/skills/kesekit-check/references/zero-trust/maturity-model.md b/skills/kesekit-check/references/zero-trust/maturity-model.md new file mode 100644 index 0000000..2f3612d --- /dev/null +++ b/skills/kesekit-check/references/zero-trust/maturity-model.md @@ -0,0 +1,75 @@ +# Zero Trust Maturity Model + +> Reference: KISA 제로트러스트 가이드라인 2.0 (2024.12), CISA Zero Trust Maturity Model v2.0 +> Purpose: Detailed maturity level definitions and scoring guidance + +## Maturity Level Definitions + +### Traditional (전통적) +- Perimeter-based security model (castle-and-moat) +- Manual identity management and access control +- Static, rule-based security policies +- Limited visibility into internal traffic + +### Initial (기본) +- Beginning adoption of ZT principles +- Some automated identity management (SSO, basic MFA) +- Initial network segmentation beyond perimeter +- Centralized logging introduced + +### Advanced (고도화) +- Context-aware, dynamic access policies +- AI-assisted threat detection and response +- Comprehensive microsegmentation +- Real-time monitoring and analytics + +### Optimal (최적화) +- Fully automated, self-adaptive security +- AI-driven orchestration and response +- Predictive threat analysis +- Continuous verification at all layers +- Zero standing privileges + +## Scoring Framework + +### Per-Item Scoring + +| Score | Criteria | +|-------|----------| +| 3 | Fully implemented and operational | +| 2 | Partially implemented, gaps exist | +| 1 | Planned but not yet implemented | +| 0 | Not implemented, no plans | + +### Element Maturity Calculation + +``` +Element Score = (Sum of item scores for target level) / (Max possible score) x 100% + +Maturity Rating: + >= 80% → Mature (at or above target level) + 60-79% → Developing (approaching target level) + 40-59% → Emerging (significant gaps remain) + < 40% → Insufficient (major remediation needed) +``` + +## Cross-Element Dependencies + +| Element | Depends On | +|---------|-----------| +| Identity | — (foundation element) | +| Device | Identity | +| Network | Identity, Device | +| System | Network, Identity | +| Application | Identity, Device, Network | +| Data | Application, Identity | +| Visibility | All elements (observability layer) | +| Automation | Visibility (requires data to automate) | + +## Assessment Prioritization + +1. Start with **Identity** — foundation of all ZT controls +2. Then **Device** — ensure endpoint trust +3. Then **Network** — establish segmentation +4. Then **Application** and **Data** — protect workloads +5. Finally **Visibility** and **Automation** — enable continuous improvement diff --git a/skills/kesekit-check/references/zero-trust/ot-guide.md b/skills/kesekit-check/references/zero-trust/ot-guide.md new file mode 100644 index 0000000..92c0970 --- /dev/null +++ b/skills/kesekit-check/references/zero-trust/ot-guide.md @@ -0,0 +1,128 @@ +# OT/ICS Zero Trust Deployment Guide + +> Reference: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-82 Rev.3, IEC 62443 +> Purpose: Guidance for deploying Zero Trust in OT/ICS environments + +## Why OT/ICS Requires Special ZT Consideration + +Traditional IT Zero Trust assumes: +- Modern endpoints capable of running agents +- Tolerance for additional authentication latency +- Ability to patch and update frequently +- Replaceable infrastructure components + +OT/ICS reality: +- Legacy devices (PLCs, RTUs, HMIs) with 15-30 year lifecycles +- Real-time control loops with microsecond-level latency requirements +- Safety-critical functions where authentication delays can cause harm +- Proprietary protocols (Modbus, DNP3, OPC UA, PROFINET) +- Air-gapped or semi-isolated networks + +## Phased Deployment Approach + +### Phase 1: Visibility & Asset Discovery + +**Objective**: Know what you have before you protect it. + +- Conduct complete OT asset inventory (active + passive discovery) +- Map communication flows between OT devices, IT systems, and external connections +- Identify Purdue Model levels for each asset +- Baseline normal traffic patterns and protocol usage +- Document legacy devices that cannot support modern security controls + +### Phase 2: IT-OT Boundary Segmentation + +**Objective**: Establish strong boundary between IT and OT networks. + +- Deploy industrial DMZ between IT and OT networks +- Implement data diodes or unidirectional gateways for critical flows +- Control all IT-OT data exchange through monitored jump servers +- Establish separate authentication domains for IT and OT + +### Phase 3: OT Internal Segmentation + +**Objective**: Apply zone/conduit model within OT network. + +- Implement IEC 62443 zones and conduits +- Segment by safety level (SL), function, and criticality +- Deploy OT-aware firewalls between zones +- Establish conduit-level access policies + +### Phase 4: Identity & Access Control + +**Objective**: Enforce identity-based access in OT environment. + +- Deploy MFA for all remote OT access (hardware tokens preferred) +- Implement privileged access management (PAM) for OT systems +- Apply least-privilege access for OT operators and engineers +- Manage shared/service accounts with rotation and monitoring +- Use jump servers with session recording for maintenance access + +### Phase 5: Continuous Monitoring + +**Objective**: Maintain visibility and detect anomalies. + +- Deploy OT-specific IDS/IPS (passive monitoring preferred initially) +- Implement Deep Packet Inspection (DPI) for OT protocols +- Integrate OT security events with enterprise SIEM +- Establish OT-specific SOC or extend IT SOC with OT expertise +- Monitor for known OT malware signatures (Triton, Industroyer, etc.) + +### Phase 6: Automated Response (with Safety Validation) + +**Objective**: Enable automated response without compromising safety. + +- Define automated response actions with safety impact assessment +- Implement fail-safe defaults (fail-open for safety-critical, fail-close for non-critical) +- Require human approval for actions affecting safety systems +- Test automated responses in simulation environment before deployment + +## OT-Specific ZT Architecture + +``` +┌────────────────────────────────────────────┐ +│ Enterprise Zone (IT) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ PDP │ │ IdP/ │ │ Enterprise │ │ +│ │ │ │ MFA │ │ SIEM │ │ +│ └────────┘ └────────┘ └────────────┘ │ +└──────────────────┬─────────────────────────┘ + │ Industrial DMZ +┌──────────────────┴─────────────────────────┐ +│ ┌────────────┐ ┌─────────┐ ┌────────┐ │ +│ │ Jump Server│ │ Historian│ │ PEP │ │ +│ │ (PAM) │ │ Mirror │ │ (OT) │ │ +│ └────────────┘ └─────────┘ └────────┘ │ +└──────────────────┬─────────────────────────┘ + │ +┌──────────────────┴─────────────────────────┐ +│ OT Zone (ICS/SCADA) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ HMI │ │ PLC │ │ RTU │ │ +│ │ │ │ │ │ │ │ +│ └────────┘ └────────┘ └────────────┘ │ +│ ┌────────────────────────────────────┐ │ +│ │ OT IDS (Passive Monitoring) │ │ +│ └────────────────────────────────────┘ │ +└────────────────────────────────────────────┘ +``` + +## Legacy Device Handling + +For OT devices that cannot support modern ZT controls: + +1. **Security Wrapper/Proxy**: Place a ZT-capable proxy in front of legacy devices +2. **Network-Level Protection**: Use OT-aware firewalls to enforce access policies +3. **Monitoring**: Deploy passive DPI sensors for visibility without device modification +4. **Compensating Controls**: Document risk acceptance with compensating controls per IEC 62443 + +## Standards Mapping + +| OT-ZT Requirement | IEC 62443 | NIST SP 800-82 | KISA ZT 2.0 | +|-------------------|-----------|----------------|-------------| +| Network Segmentation | Zone/Conduit | Section 5.3 | NW Element | +| Access Control | FR 1 (AC) | Section 6.2 | ID Element | +| Device Management | FR 4 (DC) | Section 6.3 | DV Element | +| Communication Integrity | FR 3 (SI) | Section 5.4 | SY Element | +| Monitoring | FR 6 (RE) | Section 6.6 | VA Element | +| Incident Response | FR 7 (RA) | Section 6.7 | AU Element | diff --git a/skills/kesekit-check/references/zero-trust/overview.md b/skills/kesekit-check/references/zero-trust/overview.md new file mode 100644 index 0000000..38fe30d --- /dev/null +++ b/skills/kesekit-check/references/zero-trust/overview.md @@ -0,0 +1,72 @@ +# Zero Trust Architecture Reference + +> Reference: NIST SP 800-207, KISA 제로트러스트 가이드라인 2.0, CISA Zero Trust Maturity Model +> Purpose: Provide architectural context for Zero Trust maturity assessment + +## Zero Trust Architecture (ZTA) + +### Core Logical Components + +``` +┌─────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ PDP │ │ Policy │ │ Trust Algorithm │ │ +│ │ (Policy │ │ Engine │ │ (Risk Score + │ │ +│ │ Decision │ │ │ │ Context Analysis) │ │ +│ │ Point) │ │ │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ + │ + ┌────┴────┐ + │ PEP │ ← Policy Enforcement Point + │ │ + └────┬────┘ + │ +┌─────────────────────────────────────────────────────────┐ +│ Data Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ Subject │ │ Resource │ │ Enterprise │ │ +│ │ (User/ │→→│ (App/ │ │ Resources │ │ +│ │ Device) │ │ Data) │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### Deployment Models (NIST SP 800-207) + +1. **SDP (Software Defined Perimeter)**: Agent/gateway-based model +2. **Micro-segmentation**: Network-centric approach +3. **Network Infrastructure + SDP**: Hybrid approach + +### KISA Zero Trust Guidelines 2.0 — 8 Elements + +| Element | Korean | Scope | +|---------|--------|-------| +| Identity | 식별자 및 신원 | User identity management, MFA, continuous authentication | +| Device | 디바이스 및 엔드포인트 | Device inventory, health checks, compliance | +| Network | 네트워크 | Macro/micro segmentation, SDN, encrypted traffic | +| System | 시스템 | System hardening, patching, configuration management | +| Application | 애플리케이션 및 워크로드 | Resource authorization, remote access, monitoring | +| Data | 데이터 | Classification, DLP, encryption, access control | +| Visibility | 가시성 및 분석 | Logging, SIEM, threat analysis | +| Automation | 자동화 및 오케스트레이션 | SOAR, automated response, policy orchestration | + +### Related Standards + +| Standard | Organization | Focus | +|----------|-------------|-------| +| NIST SP 800-207 | NIST | ZTA reference architecture | +| CISA Zero Trust Maturity Model | CISA | Federal ZT maturity assessment | +| 제로트러스트 가이드라인 2.0 | KISA | Korean ZT implementation guide | +| NIST SP 800-82 | NIST | OT/ICS security guide | +| IEC 62443 | IEC | Industrial automation security | + +### Key Concepts + +- **PDP (Policy Decision Point)**: Evaluates access requests against policy +- **PEP (Policy Enforcement Point)**: Enforces PDP decisions at the access point +- **SDP (Software Defined Perimeter)**: Creates dynamic, identity-based perimeters +- **SASE (Secure Access Service Edge)**: Cloud-delivered convergence of network and security +- **ZTNA (Zero Trust Network Access)**: Application-level access without VPN +- **Microsegmentation**: Granular network isolation at workload level diff --git a/skills/kesekit-check/scripts/cii/cloud.md b/skills/kesekit-check/scripts/cii/cloud.md new file mode 100644 index 0000000..b5fc514 --- /dev/null +++ b/skills/kesekit-check/scripts/cii/cloud.md @@ -0,0 +1,517 @@ +# 클라우드 점검 스크립트 (CA-01 ~ CA-19) + +## 1. 계정 관리 + +### CA-01: 사용자 계정 관리 +**점검:** +```bash +# AWS: IAM 사용자 목록 및 마지막 로그인 확인 +aws iam list-users --output table +aws iam generate-credential-report +aws iam get-credential-report --output text --query Content | base64 -d + +# Azure: 사용자 목록 확인 +az ad user list --output table +az ad user list --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}" --output table + +# GCP: IAM 사용자 확인 +gcloud iam service-accounts list +gcloud projects get-iam-policy --format=json +``` +**조치:** +```bash +# AWS: 불필요 계정 삭제/비활성화 +aws iam delete-user --user-name <사용자명> +aws iam delete-login-profile --user-name <사용자명> +# 액세스 키 비활성화 +aws iam update-access-key --user-name <사용자명> --access-key-id <키ID> --status Inactive + +# Azure: 불필요 계정 삭제/비활성화 +az ad user update --id <사용자ID> --account-enabled false +az ad user delete --id <사용자ID> + +# GCP: 서비스 계정 삭제/비활성화 +gcloud iam service-accounts disable <서비스계정이메일> +gcloud iam service-accounts delete <서비스계정이메일> +``` + +### CA-02: 사용자 정책 관리 +**점검:** +```bash +# AWS: 사용자별 정책 확인 +aws iam list-attached-user-policies --user-name <사용자명> +aws iam list-user-policies --user-name <사용자명> +aws iam list-groups-for-user --user-name <사용자명> + +# Azure: 역할 할당 확인 +az role assignment list --all --output table + +# GCP: IAM 정책 확인 +gcloud projects get-iam-policy +``` +**조치:** +```bash +# AWS: 불필요 권한 제거, 최소 권한 원칙 적용 +aws iam detach-user-policy --user-name <사용자명> --policy-arn <정책ARN> +# 그룹 기반 권한 관리 +aws iam create-group --group-name <그룹명> +aws iam attach-group-policy --group-name <그룹명> --policy-arn <정책ARN> +aws iam add-user-to-group --user-name <사용자명> --group-name <그룹명> + +# Azure: 역할 할당 변경 +az role assignment delete --assignee <사용자ID> --role <역할명> +az role assignment create --assignee <사용자ID> --role <역할명> --scope <범위> + +# GCP: IAM 바인딩 변경 +gcloud projects remove-iam-policy-binding --member=user:<이메일> --role=<역할> +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=<역할> +``` + +### CA-03: MFA(Multi-Factor Authentication) 설정 +**점검:** +```bash +# AWS: MFA 설정 여부 확인 +aws iam list-virtual-mfa-devices +aws iam list-mfa-devices --user-name <사용자명> +# MFA 미설정 사용자 확인 (credential report 활용) +aws iam get-credential-report --output text --query Content | base64 -d | grep -i "false" + +# Azure: MFA 상태 확인 +az ad user list --query "[].{UPN:userPrincipalName}" --output table +# Azure Portal: Azure AD > 보안 > MFA 에서 확인 + +# GCP: 2단계 인증은 Google Workspace Admin Console에서 확인 +``` +**조치:** +```bash +# AWS: 가상 MFA 디바이스 생성 및 활성화 +aws iam create-virtual-mfa-device --virtual-mfa-device-name <디바이스명> --outfile QRCode.png --bootstrap-method QRCodePNG +aws iam enable-mfa-device --user-name <사용자명> --serial-number --authentication-code1 <코드1> --authentication-code2 <코드2> + +# Azure: 조건부 액세스 정책으로 MFA 강제 (Azure Portal에서 설정) +# Azure AD > 보안 > 조건부 액세스 > 새 정책 > MFA 필수 + +# GCP: Google Workspace Admin Console에서 2단계 인증 강제 +``` + +### CA-04: 클라우드 계정 비밀번호 정책 관리 +**점검:** +```bash +# AWS: 비밀번호 정책 확인 +aws iam get-account-password-policy + +# Azure: 비밀번호 정책 확인 (Azure AD) +az ad group list --output table +# Azure Portal: Azure AD > 보안 > 인증 방법 > 비밀번호 보호 +``` +**조치:** +```bash +# AWS: 비밀번호 정책 설정 +aws iam update-account-password-policy \ + --minimum-password-length 8 \ + --require-symbols \ + --require-numbers \ + --require-uppercase-characters \ + --require-lowercase-characters \ + --max-password-age 90 \ + --password-reuse-prevention 24 \ + --allow-users-to-change-password + +# Azure: Azure AD Portal에서 비밀번호 정책 설정 +# Azure AD > 보안 > 인증 방법 > 비밀번호 보호 > 사용자 지정 금지 비밀번호 목록 +``` + +## 2. 권한 관리 + +### CA-05: 인스턴스 서비스 정책 관리 +**점검:** +```bash +# AWS: EC2 관련 IAM 정책 확인 +aws iam list-policies --query "Policies[?contains(PolicyName,'EC2')]" --output table +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,IamInstanceProfile]" --output table + +# Azure: VM 관련 역할 확인 +az vm list --output table +az role assignment list --query "[?contains(scope,'Microsoft.Compute')]" --output table + +# GCP: Compute Engine IAM 확인 +gcloud compute instances list +``` +**조치:** +```bash +# AWS: 인스턴스 관련 권한 최소화 +# 전용 IAM 역할 생성 후 인스턴스에 할당 +aws iam create-role --role-name <역할명> --assume-role-policy-document file://trust-policy.json +aws iam attach-role-policy --role-name <역할명> --policy-arn <정책ARN> +aws ec2 associate-iam-instance-profile --instance-id <인스턴스ID> --iam-instance-profile Name=<프로필명> + +# Azure: 리소스 그룹 단위 역할 할당 +az role assignment create --assignee <사용자ID> --role "Virtual Machine Contributor" --scope /subscriptions/<구독ID>/resourceGroups/<리소스그룹> + +# GCP: 커스텀 역할 적용 +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=roles/compute.instanceAdmin +``` + +### CA-06: 네트워크 서비스 정책 관리 +**점검:** +```bash +# AWS: VPC/네트워크 관련 정책 확인 +aws ec2 describe-vpcs --output table +aws ec2 describe-security-groups --output table + +# Azure: NSG 확인 +az network nsg list --output table +az network nsg rule list --nsg-name --resource-group <리소스그룹> --output table + +# GCP: 방화벽 규칙 확인 +gcloud compute firewall-rules list +``` +**조치:** +```bash +# AWS: 보안 그룹 규칙 관리 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr <관리자IP>/32 + +# Azure: NSG 규칙 관리 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> +az network nsg rule create --nsg-name --resource-group --name <규칙명> --priority 100 --access Allow --source-address-prefixes --destination-port-ranges 22 + +# GCP: 방화벽 규칙 관리 +gcloud compute firewall-rules delete <규칙명> +gcloud compute firewall-rules create <규칙명> --allow tcp:22 --source-ranges=/32 +``` + +## 3. 가상 리소스 관리 + +### CA-07: VPC 네트워크 서브넷 관리 +**점검:** +```bash +# AWS: 서브넷 구성 확인 (Public/Private 분리 여부) +aws ec2 describe-subnets --output table +aws ec2 describe-route-tables --output table +aws ec2 describe-internet-gateways --output table +aws ec2 describe-nat-gateways --output table + +# Azure: 가상 네트워크 서브넷 확인 +az network vnet list --output table +az network vnet subnet list --vnet-name --resource-group --output table + +# GCP: 서브넷 확인 +gcloud compute networks subnets list +``` +**조치:** +```bash +# Public 서브넷: 인터넷 게이트웨이 할당 +# Private 서브넷: NAT 게이트웨이 할당 +# 서브넷별 네트워크 리소스 별도 설정 + +# AWS: NAT 게이트웨이 생성 (Private 서브넷용) +aws ec2 create-nat-gateway --subnet-id --allocation-id + +# Azure: Private 서브넷에 NSG 적용 +az network vnet subnet update --vnet-name --name <서브넷명> --resource-group --network-security-group +``` + +### CA-08: 가상 네트워크 리소스 관리 +**점검:** +```bash +# AWS: 공인 IP 할당 인스턴스 확인 +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress]" --output table + +# Azure: 공인 IP 확인 +az network public-ip list --output table +az vm list-ip-addresses --output table + +# GCP: 외부 IP 확인 +gcloud compute instances list --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)" +``` +**조치:** +```bash +# AWS: 불필요 공인 IP 해제 +aws ec2 disassociate-address --association-id <연결ID> +aws ec2 release-address --allocation-id <할당ID> + +# Azure: 공인 IP 해제 +az network nic ip-config update --resource-group --nic-name --name --remove publicIpAddress + +# GCP: 외부 IP 제거 +gcloud compute instances delete-access-config <인스턴스명> --access-config-name "External NAT" +``` + +### CA-09: 접근 제어 설정 관리 +**점검:** +```bash +# AWS: 보안 그룹 규칙 확인 (0.0.0.0/0 허용 여부) +aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,Ingress:IpPermissions}" --output json +# 0.0.0.0/0 허용 규칙 필터링 +aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" --output table + +# Azure: NSG 규칙 중 Any 허용 확인 +az network nsg list --query "[].{Name:name,Rules:securityRules[?sourceAddressPrefix=='*']}" --output json + +# GCP: 0.0.0.0/0 허용 방화벽 규칙 확인 +gcloud compute firewall-rules list --filter="sourceRanges=0.0.0.0/0" +``` +**조치:** +```bash +# AWS: 불필요한 0.0.0.0/0 규칙 제거 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port <포트> --cidr 0.0.0.0/0 + +# Azure: 불필요 규칙 삭제 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> + +# GCP: 불필요 방화벽 규칙 삭제 +gcloud compute firewall-rules delete <규칙명> + +# 공통: 관리자 IP 또는 특정 IP에서만 접속 허용 +``` + +### CA-10: 스토리지 리소스 퍼블릭 접근 관리 +**점검:** +```bash +# AWS: S3 버킷 퍼블릭 접근 확인 +aws s3api get-bucket-acl --bucket <버킷명> +aws s3api get-public-access-block --bucket <버킷명> +aws s3api get-bucket-policy --bucket <버킷명> + +# Azure: 스토리지 계정 공개 접근 확인 +az storage account list --query "[].{Name:name,PublicAccess:allowBlobPublicAccess}" --output table + +# GCP: 버킷 IAM 확인 +gsutil iam get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 퍼블릭 접근 차단 +aws s3api put-public-access-block --bucket <버킷명> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true + +# Azure: 스토리지 공개 접근 비활성화 +az storage account update --name <스토리지명> --resource-group --allow-blob-public-access false + +# GCP: 버킷에서 allUsers/allAuthenticatedUsers 제거 +gsutil iam ch -d allUsers gs://<버킷명> +gsutil iam ch -d allAuthenticatedUsers gs://<버킷명> +``` + +## 4. 운영 관리 + +### CA-11: 관계형 데이터베이스 암호화 설정 +**점검:** +```bash +# AWS: RDS 암호화 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Encrypted:StorageEncrypted}" --output table + +# Azure: SQL DB 암호화 확인 +az sql db tde show --server <서버명> --database --resource-group + +# GCP: Cloud SQL 암호화 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.dataDiskEncryptionConfiguration)" +``` +**조치:** +```bash +# AWS: RDS 암호화 활성화 (생성 시 또는 스냅샷 복원) +aws rds create-db-instance --db-instance-identifier --storage-encrypted --kms-key-id ... + +# Azure: TDE 활성화 +az sql db tde set --server <서버명> --database --resource-group --status Enabled + +# GCP: 기본적으로 저장 데이터 암호화 적용됨 (CMEK 설정 가능) +``` + +### CA-12: 통신 구간 암호화 설정 +**점검:** +```bash +# AWS: ELB/ALB SSL 인증서 확인 +aws elbv2 describe-listeners --load-balancer-arn --query "Listeners[*].{Port:Port,Protocol:Protocol,Certs:Certificates}" --output table + +# Azure: Application Gateway SSL 확인 +az network application-gateway ssl-cert list --gateway-name <게이트웨이명> --resource-group + +# 공통: TLS 버전 확인 +openssl s_client -connect <호스트>:443 -tls1_2 +``` +**조치:** +```bash +# 공통 권고사항: +# 서버 원격 접근 시 VPN, SSH 사용 +# TLS v1.2 이상 (TLS v1.3 권장) 사용 +# 블록 암호: SEED, ARIA, AES (키 128bits 이상) +# 공개키 암호: RSA (키 2048bits 이상) +# 해시: SHA-2 이상 +``` + +### CA-13: 클라우드 서비스 사용자 계정 로깅 설정 +**점검:** +```bash +# AWS: CloudTrail 설정 확인 +aws cloudtrail describe-trails --output table +aws cloudtrail get-trail-status --name <트레일명> + +# Azure: Activity Log 확인 +az monitor activity-log list --offset 1h --output table + +# GCP: Cloud Audit Logs 확인 +gcloud logging read "logName:cloudaudit.googleapis.com" --limit 10 +``` +**조치:** +```bash +# AWS: CloudTrail 활성화 +aws cloudtrail create-trail --name <트레일명> --s3-bucket-name <버킷명> --is-multi-region-trail +aws cloudtrail start-logging --name <트레일명> + +# Azure: 진단 설정 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <리소스ID> --logs '[{"category":"AuditEvent","enabled":true}]' --storage-account <스토리지ID> + +# GCP: Audit Log 기본 활성화됨, 추가 설정 시 +gcloud projects get-iam-policy --format=json +``` + +### CA-14: 인스턴스 로깅 설정 +**점검:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 그룹 확인 +aws logs describe-log-groups --output table + +# Azure: VM 진단 설정 확인 +az vm diagnostics get-default-config + +# GCP: Ops Agent 설치 확인 +gcloud compute instances describe <인스턴스명> --format="value(metadata.items)" +``` +**조치:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 전송 +aws ssm send-command --instance-ids <인스턴스ID> --document-name "AWS-ConfigureAWSPackage" --parameters '{"action":["Install"],"name":["AmazonCloudWatchAgent"]}' + +# Azure: VM 진단 확장 설치 +az vm diagnostics set --resource-group --vm-name --settings <설정JSON> + +# GCP: Ops Agent 설치 +gcloud compute ssh <인스턴스명> -- 'curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh && sudo bash add-google-cloud-ops-agent-repo.sh --also-install' +``` + +### CA-15: 관계형 데이터베이스 로깅 설정 +**점검:** +```bash +# AWS: RDS 로깅 파라미터 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Logs:EnabledCloudwatchLogsExports}" --output table + +# Azure: SQL 감사 설정 확인 +az sql server audit-policy show --server <서버명> --resource-group + +# GCP: Cloud SQL 로그 플래그 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.databaseFlags)" +``` +**조치:** +```bash +# AWS: RDS 로그 내보내기 활성화 +aws rds modify-db-instance --db-instance-identifier --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}' + +# Azure: SQL 감사 활성화 +az sql server audit-policy update --server <서버명> --resource-group --state Enabled --storage-account <스토리지명> + +# GCP: Cloud SQL 감사 로그 활성화 +gcloud sql instances patch <인스턴스명> --database-flags=log_output=FILE,general_log=on,slow_query_log=on +``` + +### CA-16: 오브젝트 스토리지 버킷 로깅 설정 +**점검:** +```bash +# AWS: S3 서버 액세스 로깅 확인 +aws s3api get-bucket-logging --bucket <버킷명> + +# Azure: Blob Storage 진단 로그 확인 +az monitor diagnostic-settings list --resource <스토리지리소스ID> + +# GCP: 버킷 로깅 확인 +gsutil logging get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 서버 액세스 로깅 활성화 +aws s3api put-bucket-logging --bucket <버킷명> --bucket-logging-status '{"LoggingEnabled":{"TargetBucket":"<로그버킷>","TargetPrefix":"logs/"}}' + +# Azure: Blob Storage 진단 로그 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <스토리지리소스ID> --logs '[{"category":"StorageRead","enabled":true},{"category":"StorageWrite","enabled":true},{"category":"StorageDelete","enabled":true}]' + +# GCP: 버킷 로깅 활성화 +gsutil logging set on -b gs://<로그버킷> gs://<대상버킷> +``` + +### CA-17: 로그 보관 기간 설정 +**점검:** +```bash +# AWS: CloudWatch Logs 보관 기간 확인 +aws logs describe-log-groups --query "logGroups[*].{Name:logGroupName,Retention:retentionInDays}" --output table +# S3 수명 주기 정책 확인 +aws s3api get-bucket-lifecycle-configuration --bucket <버킷명> + +# Azure: 로그 보관 정책 확인 +az monitor diagnostic-settings list --resource <리소스ID> + +# GCP: 로그 버킷 보관 기간 확인 +gcloud logging buckets describe <버킷명> --location=global +``` +**조치:** +```bash +# AWS: CloudWatch Logs 보관 기간 설정 (예: 365일) +aws logs put-retention-policy --log-group-name <로그그룹명> --retention-in-days 365 + +# Azure: 진단 설정에서 보관 기간 설정 (일반적으로 Azure Portal에서 설정) + +# GCP: 로그 버킷 보관 기간 설정 +gcloud logging buckets update <버킷명> --location=global --retention-days=365 +``` + +### CA-18: 백업 사용 여부 +**점검:** +```bash +# AWS: 백업 설정 확인 +aws backup list-backup-plans --output table +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,BackupRetention:BackupRetentionPeriod}" --output table +aws ec2 describe-snapshots --owner-ids self --output table + +# Azure: 백업 항목 확인 +az backup item list --vault-name <볼트명> --resource-group --output table + +# GCP: 스냅샷 확인 +gcloud compute snapshots list +gcloud sql backups list --instance=<인스턴스명> +``` +**조치:** +```bash +# AWS: 자동 백업 설정 +aws backup create-backup-plan --backup-plan file://backup-plan.json +# RDS 백업 보관 기간 설정 +aws rds modify-db-instance --db-instance-identifier --backup-retention-period 7 + +# Azure: 백업 정책 설정 +az backup protection enable-for-vm --resource-group --vault-name <볼트명> --vm --policy-name <정책명> + +# GCP: 스냅샷 스케줄 생성 +gcloud compute resource-policies create snapshot-schedule <정책명> --region=<리전> --max-retention-days=14 --daily-schedule +``` + +### CA-19: 가상 리소스 이상징후 알림 설정 +**점검:** +```bash +# AWS: CloudWatch 알람 확인 +aws cloudwatch describe-alarms --output table + +# Azure: 경고 규칙 확인 +az monitor metrics alert list --output table + +# GCP: 알림 정책 확인 +gcloud alpha monitoring policies list +``` +**조치:** +```bash +# AWS: CloudWatch 알람 생성 (예: CPU 사용률) +aws cloudwatch put-metric-alarm --alarm-name "HighCPU" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions --dimensions Name=InstanceId,Value=<인스턴스ID> + +# Azure: 메트릭 경고 생성 +az monitor metrics alert create --name "HighCPU" --resource-group --scopes <리소스ID> --condition "avg Percentage CPU > 80" --action <액션그룹ID> + +# GCP: 알림 정책 생성 (gcloud 또는 Cloud Console에서 설정) +# Cloud Console > Monitoring > 알림 > 정책 만들기 > 조건 및 알림 채널(SMS, 이메일) 설정 +``` diff --git a/skills/kesekit-check/scripts/cii/database.md b/skills/kesekit-check/scripts/cii/database.md new file mode 100644 index 0000000..5abb7fb --- /dev/null +++ b/skills/kesekit-check/scripts/cii/database.md @@ -0,0 +1,649 @@ +# DBMS 점검 스크립트 (D-01 ~ D-26) + +## 1. 계정 관리 + +### D-01: 기본 계정의 비밀번호, 정책 등을 변경하여 사용 +**점검:** +```sql +-- Oracle: 기본 계정 사용 여부 및 정책 확인 +SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE account_status = 'OPEN'; + +-- MSSQL: sa 계정 확인 +SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa'; + +-- MySQL: root 계정 확인 +SELECT User, Host FROM mysql.user; +SHOW VARIABLES LIKE 'validate_password%'; + +-- PostgreSQL: 역할 확인 +SELECT rolname, rolsuper FROM pg_roles; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; + +-- Cubrid +SELECT name, password FROM db_user; +SELECT * FROM db_password; +``` +**조치:** +```sql +-- Oracle: 비밀번호 변경 / 잠금 +ALTER USER <기본계정명> IDENTIFIED BY <신규비밀번호>; +ALTER USER <기본계정명> ACCOUNT LOCK; + +-- MSSQL: sa 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; + +-- MySQL 5.7 +UPDATE user SET authentication_string = PASSWORD('신규비밀번호') WHERE User = 'root'; +FLUSH PRIVILEGES; +-- MySQL 8.0 +ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; +FLUSH PRIVILEGES; + +-- Altibase +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- Tibero +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- PostgreSQL +ALTER USER postgres WITH PASSWORD '신규비밀번호'; + +-- Cubrid +ALTER USER "사용자계정명" PASSWORD '신규비밀번호'; +``` + +### D-02: 불필요 계정 제거 또는 잠금설정 +**점검:** +```sql +-- Oracle +SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; + +-- MSSQL +SELECT name, is_disabled FROM sys.server_principals; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM all_users; +SELECT * FROM dba_users; + +-- PostgreSQL +SELECT * FROM pg_roles; +-- 또는 명령어: \du + +-- Cubrid +SELECT name, password FROM db_user; +``` +**조치:** +```sql +-- Oracle +DROP USER [삭제할 계정]; + +-- MSSQL +EXEC sp_droplogin '삭제할 계정'; + +-- MySQL +DROP USER '삭제할 계정'@'호스트명'; +FLUSH PRIVILEGES; + +-- Altibase / Tibero +DROP USER user_name CASCADE; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; + +-- Cubrid +DROP USER [삭제할 계정]; +``` + +### D-03: 비밀번호 사용 기간 및 복잡도 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES WHERE resource_name LIKE 'PASSWORD%'; + +-- MySQL +SHOW VARIABLES LIKE 'validate_password%'; +SHOW VARIABLES LIKE 'default_password_lifetime'; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle: 비밀번호 정책 설정 +ALTER PROFILE <프로파일명> LIMIT + FAILED_LOGIN_ATTEMPTS 3 + PASSWORD_LIFE_TIME 30 + PASSWORD_REUSE_TIME 30 + PASSWORD_VERIFY_FUNCTION verify_function + PASSWORD_GRACE_TIME 5; +ALTER USER <계정명> PROFILE <프로파일명>; + +-- MSSQL: 암호 만료 강제 적용 (SSMS GUI) +-- 보안 > 로그인 > 속성 > "암호 만료 강제 적용" 설정 +-- OS 암호 정책: [로컬 보안 정책] > [암호 정책] > 최대 암호 사용 기간: 60일 + +-- MySQL: 복잡도 정책 +INSTALL COMPONENT 'file://component_validate_password'; +SET GLOBAL validate_password.policy = 'MEDIUM'; +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.mixed_case_count = 1; +SET GLOBAL validate_password.number_count = 1; +SET GLOBAL validate_password.special_char_count = 1; +-- LifeTime 정책 +SET GLOBAL default_password_lifetime = 90; +ALTER USER '<계정명>'@'<호스트>' PASSWORD EXPIRE INTERVAL 91 DAY; + +-- Altibase +ALTER USER 계정명 LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7); + +-- Tibero +CREATE PROFILE prof LIMIT + failed_login_attempts 3 + password_lock_time 1/1440 + password_life_time 90 + password_reuse_time unlimited + password_reuse_max 10 + password_grace_time 10 + password_verify_function verify_function; +``` + +### D-04: 관리자 권한을 필요한 계정에만 허용 +**점검:** +```sql +-- Oracle: SYSDBA 권한 점검 +SELECT username FROM v$pwfile_users WHERE username NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +) AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +-- Admin 부적합 계정 점검 +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ( + 'SYS','SYSTEM','AQ_ADMINISTRATOR_ROLE','DBA','DSYS','BACSYS','SCHEDULER_ADMIN','MSYS' +) AND admin_option = 'YES' AND grantee NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +); + +-- MySQL: SUPER 권한 확인 +SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; + +-- PostgreSQL +SELECT * FROM pg_user; +SELECT username, usesuper FROM pg_shadow; + +-- Cubrid: DBA 권한 사용자 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +REVOKE <권한> FROM <계정명>; +GRANT <권한> ON <테이블명> TO <계정명>; + +-- MSSQL: sysadmin 역할에서 삭제 +EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; + +-- MySQL: SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; + +-- PostgreSQL: 불필요 관리자 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; + +-- Cubrid: DBA 권한 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +``` + +### D-05: 비밀번호 재사용 제약 설정 +**점검:** +```sql +-- Oracle +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' + AND limit IN ('UNLIMITED', 'NULL'); +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' + AND limit IN ('UNLIMITED', 'NULL'); + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; + +-- Altibase +ALTER USER [계정명] LIMIT (PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 10); + +-- Tibero +CREATE PROFILE prof LIMIT + password_reuse_time unlimited + password_reuse_max 10; +``` + +### D-06: DB 사용자 계정 개별 부여 +**점검:** +```sql +-- Oracle +SELECT username FROM dba_users ORDER BY username; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL +SELECT * FROM pg_shadow; + +-- Altibase +SELECT * FROM system_.sys_users_; +``` +**조치:** +```sql +-- Oracle: 공용 계정 삭제 후 개별 계정 생성 +DROP USER '공용계정'; +CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +GRANT connect, resource TO [계정명]; + +-- MSSQL +EXEC sp_droplogin '공용계정'; +CREATE LOGIN '생성계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성계정' FOR LOGIN '생성계정'; + +-- MySQL +DROP USER <계정명>@<호스트>; +CREATE USER '<계정명>'@'<호스트>' IDENTIFIED BY '비밀번호'; +GRANT SELECT, INSERT ON DB이름.테이블명 TO '<계정명>'@'<호스트>'; +FLUSH PRIVILEGES; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' <권한명>; +``` + +### D-07: root 권한으로 서비스 구동 제한 +**점검:** +```bash +# Oracle +ps -ef | grep pmon +ps -ef | grep tnslsnr + +# MySQL +ps -ef | grep mysqld +cat /etc/my.cnf | grep user + +# Altibase +ps -ef | grep altibase | grep -v grep +``` +**조치:** +```bash +# Oracle: oracle 계정으로 전환 후 구동 +su - oracle +lsnrctl start +sqlplus / as sysdba +startup + +# MySQL: my.cnf [mysqld] 섹션에 user 지정 +# vi /etc/my.cnf +# [mysqld] +# user = mysql + +# Altibase: 전용 계정으로 소유자 변경 +chown -R [계정명]:[그룹명] '[Altibase 디렉터리]' +``` + +### D-08: 안전한 암호화 알고리즘 사용 +**점검:** +```sql +-- Oracle: 암호화 알고리즘 확인 +SELECT * FROM v$parameter WHERE name LIKE '%crypto%'; + +-- MySQL +SHOW VARIABLES LIKE '%ssl%'; +``` +**조치:** +```sql +-- 안전한 암호화 알고리즘(AES-256, SHA-256 등) 사용 설정 +-- DBMS별 암호화 설정은 벤더 문서 참조 +``` + +### D-09: 로그인 실패 시 잠금정책 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES + WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS'; + +-- MySQL +SHOW VARIABLES LIKE 'max_connect_errors'; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE <프로파일명> LIMIT FAILED_LOGIN_ATTEMPTS 5; + +-- MySQL +SET GLOBAL max_connect_errors = 5; +``` + +## 2. 접근 관리 + +### D-10: 원격에서 DB 서버 접속 제한 +**점검:** +```sql +-- Oracle: listener.ora에서 접근 IP 제한 확인 +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL: pg_hba.conf 확인 +``` +**조치:** +```sql +-- MySQL: 원격 접속 제한 +-- 특정 IP에서만 접속 가능하도록 계정 생성 +CREATE USER '<계정명>'@'<허용IP>' IDENTIFIED BY '비밀번호'; +-- 모든 호스트 접근 가능 계정 삭제 +DROP USER '<계정명>'@'%'; +FLUSH PRIVILEGES; +``` +```bash +# Oracle: $ORACLE_HOME/network/admin/sqlnet.ora +# tcp.validnode_checking = YES +# tcp.invited_nodes = (허용IP1, 허용IP2) + +# PostgreSQL: pg_hba.conf에서 접근 IP 제한 +# host all all <허용IP>/32 md5 +``` + +### D-11: 시스템 테이블 접근 제한 +**점검:** +```sql +-- Oracle: DBA 이외 시스템 테이블 접근 권한 확인 +SELECT grantee, privilege, table_name FROM dba_tab_privs + WHERE table_name IN (SELECT table_name FROM dba_tables WHERE owner = 'SYS'); +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.<테이블명> FROM <계정명>; +``` + +### D-12: 리스너 비밀번호 설정 +**점검:** +```bash +# Oracle: listener.ora 파일 확인 +cat $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: 리스너 비밀번호 설정 +lsnrctl +LSNRCTL> set current_listener <리스너명> +LSNRCTL> change_password +# Old password: (빈칸) +# New password: <비밀번호> +LSNRCTL> save_config +``` + +### D-13: 불필요한 ODBC/OLE-DB 데이터 소스 제거 +**점검:** +```powershell +# Windows: ODBC 데이터 소스 확인 +Get-OdbcDsn +``` +**조치:** +```powershell +# Windows: 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType "System" +``` + +### D-14: 주요 파일 접근 권한 설정 +**점검:** +```bash +# Oracle +ls -la $ORACLE_HOME/dbs/*.ora +ls -la $ORACLE_HOME/network/admin/*.ora + +# MySQL +ls -la /etc/my.cnf +ls -la /var/lib/mysql/ + +# PostgreSQL +ls -la /var/lib/pgsql/data/pg_hba.conf +ls -la /var/lib/pgsql/data/postgresql.conf +``` +**조치:** +```bash +# Oracle: 640 이하 권한 설정 +chmod 640 $ORACLE_HOME/dbs/*.ora +chmod 640 $ORACLE_HOME/network/admin/*.ora +chown oracle:dba $ORACLE_HOME/dbs/*.ora + +# MySQL +chmod 640 /etc/my.cnf +chown mysql:mysql /etc/my.cnf + +# PostgreSQL +chmod 600 /var/lib/pgsql/data/pg_hba.conf +chown postgres:postgres /var/lib/pgsql/data/pg_hba.conf +``` + +### D-15: 리스너 로그 및 trace 파일 변경 제한 +**점검:** +```bash +# Oracle: listener.ora에서 ADMIN_RESTRICTIONS 확인 +grep ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: listener.ora에 추가 +# ADMIN_RESTRICTIONS_<리스너명> = ON +``` + +### D-16: Windows 인증 모드 사용 +**점검:** +```sql +-- MSSQL: 인증 모드 확인 +SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); +-- 1: Windows 인증 모드, 0: 혼합 모드 +``` +**조치:** +``` +-- MSSQL: SSMS > 서버 속성 > 보안 > "Windows 인증 모드" 선택 +``` + +## 3. 옵션 관리 + +### D-17: Audit Table 접근 제한 +**점검:** +```sql +-- Oracle: Audit 테이블 접근 권한 확인 +SELECT grantee, privilege FROM dba_tab_privs WHERE table_name LIKE '%AUDIT%'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.AUD$ FROM <계정명>; +``` + +### D-18: DBA 계정 Role이 Public으로 설정되지 않도록 조정 +**점검:** +```sql +-- Oracle: PUBLIC에 부여된 권한 확인 +SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'PUBLIC'; +``` +**조치:** +```sql +-- Oracle: PUBLIC에서 불필요 Role/권한 회수 +REVOKE FROM PUBLIC; +REVOKE EXECUTE ON <패키지명> FROM PUBLIC; +``` + +### D-19: OS_ROLES 등 FALSE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER OS_ROLES; +SHOW PARAMETER REMOTE_OS_AUTHENTICATION; +SHOW PARAMETER REMOTE_OS_ROLES; +``` +**조치:** +```sql +-- Oracle: init.ora 또는 spfile 수정 +ALTER SYSTEM SET OS_ROLES = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_AUTHENTICATION = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE; +-- DB 재시작 필요 +``` + +### D-20: 인가되지 않은 Object Owner 제한 +**점검:** +```sql +-- Oracle: Object Owner 확인 +SELECT owner, object_type, count(*) FROM dba_objects GROUP BY owner, object_type ORDER BY owner; +``` +**조치:** +```sql +-- 불필요한 Object Owner의 객체를 적절한 스키마로 이전 또는 삭제 +``` + +### D-21: 인가되지 않은 GRANT OPTION 사용 제한 +**점검:** +```sql +-- Oracle +SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE admin_option = 'YES'; +SELECT grantee, table_name, privilege, grantable FROM dba_tab_privs WHERE grantable = 'YES'; +``` +**조치:** +```sql +-- Oracle: ADMIN OPTION 제거 후 재부여 +REVOKE <권한> FROM <계정명>; +GRANT <권한> TO <계정명>; +``` + +### D-22: 자원 제한 기능 TRUE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER RESOURCE_LIMIT; +``` +**조치:** +```sql +-- Oracle +ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +``` + +### D-23: xp_cmdshell 사용 제한 +**점검:** +```sql +-- MSSQL +EXEC sp_configure 'xp_cmdshell'; +``` +**조치:** +```sql +-- MSSQL: xp_cmdshell 비활성화 +EXEC sp_configure 'show advanced options', 1; +RECONFIGURE; +EXEC sp_configure 'xp_cmdshell', 0; +RECONFIGURE; +``` + +### D-24: Registry Procedure 권한 제한 +**점검:** +```sql +-- MSSQL: 레지스트리 관련 확장 저장 프로시저 확인 +SELECT name FROM sys.objects WHERE name LIKE 'xp_reg%'; +``` +**조치:** +```sql +-- MSSQL: public에서 실행 권한 제거 +DENY EXECUTE ON xp_regread TO public; +DENY EXECUTE ON xp_regwrite TO public; +DENY EXECUTE ON xp_regdeletekey TO public; +DENY EXECUTE ON xp_regdeletevalue TO public; +DENY EXECUTE ON xp_regenumvalues TO public; +``` + +## 4. 패치 관리 + +### D-25: 주기적 보안 패치 및 벤더 권고 사항 적용 +**점검:** +```sql +-- Oracle: 버전 확인 +SELECT * FROM v$version; + +-- MSSQL: 버전 확인 +SELECT @@VERSION; + +-- MySQL: 버전 확인 +SELECT VERSION(); + +-- PostgreSQL: 버전 확인 +SELECT version(); +``` +**조치:** +``` +-- 공통: 벤더 보안 패치 사이트에서 최신 패치 확인 및 적용 +-- Oracle: https://www.oracle.com/security-alerts/ +-- MSSQL: https://learn.microsoft.com/ko-kr/sql/ +-- MySQL: https://dev.mysql.com/downloads/ +-- PostgreSQL: https://www.postgresql.org/support/security/ +``` + +### D-26: 감사 기록 정책 설정 +**점검:** +```sql +-- Oracle: Audit 설정 확인 +SHOW PARAMETER AUDIT_TRAIL; +SELECT * FROM dba_stmt_audit_opts; +SELECT * FROM dba_priv_audit_opts; + +-- MSSQL: 감사 설정 확인 +SELECT * FROM sys.server_audits; + +-- MySQL: 로그 설정 확인 +SHOW VARIABLES LIKE 'general_log%'; +SHOW VARIABLES LIKE 'log_bin%'; + +-- PostgreSQL +SHOW log_statement; +SHOW log_connections; +SHOW log_disconnections; +``` +**조치:** +```sql +-- Oracle: Audit 활성화 +ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE=SPFILE; +AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS; +AUDIT CREATE SESSION; + +-- MySQL: 일반 로그 활성화 +SET GLOBAL general_log = 'ON'; +SET GLOBAL general_log_file = '/var/log/mysql/general.log'; + +-- PostgreSQL: postgresql.conf +-- log_statement = 'all' +-- log_connections = on +-- log_disconnections = on +-- logging_collector = on +``` diff --git a/skills/kesekit-check/scripts/cii/network.md b/skills/kesekit-check/scripts/cii/network.md new file mode 100644 index 0000000..9d0b68d --- /dev/null +++ b/skills/kesekit-check/scripts/cii/network.md @@ -0,0 +1,892 @@ +# 네트워크 장비 점검 스크립트 (N-01 ~ N-38) + +## 1. 계정 관리 + +### N-01: 비밀번호 설정 +**점검:** +``` +! Cisco IOS +Router> enable +Router# show running-config +! VTY, 콘솔, AUX 포트의 login/password 설정 확인 + +! Juniper Junos +user@host> configure +user@host# show + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - enable 비밀번호 +Router(config)# enable secret <비밀번호> +! VTY 비밀번호 +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! 콘솔 비밀번호 +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! AUX 비밀번호 +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> + +! Radware Alteon +Main# /cfg/sys/access/user/admpw +Main# apply +Main# save + +! Juniper Junos +user@host# set system root-authentication plain-test-passwd + +! Piolink PLOS +(config)# password +``` + +### N-02: 비밀번호 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! security passwords min-length 설정 확인 +``` +**조치:** +``` +! Cisco IOS - 비밀번호 최소 길이 설정 +Router(config)# security passwords min-length <길이> +``` + +### N-03: 암호화된 비밀번호 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! enable secret / username secret / service password-encryption 확인 + +! Juniper Junos +user@host# show +! encrypted-password 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# enable secret <비밀번호> +Router(config)# username <사용자> secret <비밀번호> +Router(config)# service password-encryption + +! Juniper Junos +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> +``` + +### N-04: 계정 잠금 임계값 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show login + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! Cisco IOS +Router(config)# login block-for <잠금시간> attempts <실패횟수> within <허용시간> + +! Juniper Junos +[edit system login retry-options] +user@host# set tries-before-disconnect <실패횟수> +user@host# set lockout-period <잠금시간> +``` + +### N-05: 사용자/명령어별 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show privilege + +! Juniper Junos +! [edit system login] 에서 superuser, read-only 클래스 분리 확인 +``` +**조치:** +``` +! Cisco IOS - 사용자별 권한 수준 지정 +Router(config)# username [ID] privilege [1-15] secret [PASS] +! 명령어별 권한 수준 지정 (중요 명령어 레벨 15 적용) +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging + +! Juniper Junos +[edit system login] +login { + class class-name { + allow-commands "regular-expression"; + deny-commands "regular-expression"; + idle-timeout minutes; + permissions [ permissions ]; + } +} + +! Piolink PLOS +! 슈퍼 유저(root)와 일반 유저로 권한 분리 관리 +``` + +## 2. 접근 관리 + +### N-06: VTY 접근(ACL) 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list 및 access-class 설정 확인 + +! Juniper Junos +user@host# show +! firewall filter + 루프백 인터페이스 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty 0 4 +Router(config-line)# access-class in + +! Radware Alteon +# cfg > sys > access > mgmt > add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply > save + +! Juniper Junos +user@host# set policy-options prefix-list +user@host# edit firewall family inet filter +user@host# edit term +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set from protocol tcp +user@host# set from destination-port ssh +user@host# set then discard +! 기본 허용 종료 +user@host# set term then accept +! 루프백에 적용 +user@host# set interfaces lo0 unit 0 family inet filter input + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-07: Session Timeout 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! exec-timeout 설정 확인 +``` +**조치:** +``` +! Cisco IOS (10분 이하 권고, 예: 5분) +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 + +! Radware Alteon +# cfg > sys > idle <분> > apply > save + +! Juniper Junos +[edit login] +user@host# set class <클래스> idle-timeout <분> + +! Piolink PLOS +(config)# terminal timeout <분> +``` + +### N-08: VTY 접속 시 안전한 프로토콜 사용 +**점검:** +``` +! Cisco IOS +Router# show ip ssh +Router# show version + +! Juniper Junos +user@host# set ssh +``` +**조치:** +``` +! Cisco IOS - SSH 설정 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +Router(config)# ip ssh version 2 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh authentication-retries <횟수> +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh + +! Radware Alteon +# cfg > /sys/sshd ena > /sys/sshd on > apply > save + +! Juniper Junos +root# set system services ssh +root# delete system services telnet +root# commit + +! Piolink PLOS +(config-management-access)# ssh status enable +(config-management-access)# telnet status disable +(config-management-access)# apply +``` + +### N-09: 불필요한 보조 입출력 포트 사용 금지 +**점검:** +``` +! Cisco IOS +Router# show running +! 불필요 포트 Up/Down 확인 +``` +**조치:** +``` +! Cisco IOS - AUX 포트 차단 +Router(config)# line aux 0 +Router(config-line)# no password +Router(config-line)# transport input none +Router(config-line)# no exec +Router(config-line)# exec-timeout 0 1 + +! Juniper Junos +[edit system ports] +root# set auxiliary disable +root# commit +``` + +### N-10: 로그인 시 경고 메시지 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! banner 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# banner motd # <경고 문구> # +Router(config)# banner login # <경고 문구> # +Router(config)# banner exec # <경고 문구> # + +! Radware Alteon +# cfg > sys > banner > apply > save + +! Juniper Junos +[edit system login] +message "경고 문구" +``` + +### N-11: 원격로그 서버 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging trap informational +Router(config)# logging +Router(config)# logging facility local6 +Router(config)# logging source-interface serial 0 + +! Radware Alteon +# cfg > sys > /syslog/host > apply > save + +! Juniper Junos +user@host# edit system syslog +user@host# set system syslog file message any error +user@host# set system syslog host any any +user@host# set archive files 5 sizes 5m world-readable + +! Piolink PLOS +# logging server enable +# logging server +``` + +## 3. 패치 관리 + +### N-12: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +``` +! Cisco IOS +Router# show version + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! 공통 +! 1. 하드웨어/소프트웨어/EOL/패치 현황 문서화 +! 2. 벤더 보안 패치 및 권고사항 입수 +! 3. 취약점 영향도/발생 가능성 분석 후 패치 우선순위 결정 +! 4. 테스트베드(GNS3 등)에서 패치 검증 +! 5. 패치 적용 전 이미지/설정 백업 후 적용 +! 벤더별 패치 사이트: +! Cisco: https://software.cisco.com +! Juniper: https://support.juniper.net/support/downloads +! 공통: https://www.krcert.or.kr +``` + +## 4. 로그 관리 + +### N-13: 로깅 버퍼 크기 설정 +**점검:** +``` +! Cisco IOS +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging buffered 16000 +Router(config)# logging buffered informational + +! Piolink PLOS +(config)# logging buffer +(config)# logging priority +``` + +### N-14: 정책에 따른 로깅 설정 +**점검:** +``` +! Cisco IOS +Router# show logging + +! Juniper Junos +user@host# show log messages +``` +**조치:** +``` +! 공통 - 6가지 로깅 방법 활용 +! 1. 콘솔 로깅: 콘솔 포트에서만 확인 +! 2. Buffered 로깅: RAM에 저장 (버퍼 가득 차면 오래된 로그 대체) +! 3. Terminal 로깅: terminal monitor로 VTY에 전송 +! 4. Syslog: 외부 syslog 서버에 저장 +! 5. SNMP traps: 외부 SNMP 서버에 전송 +! 6. ACL 침입 로깅: ACL 룰에 log/log-input 추가 +``` + +### N-15: NTP 및 시각 동기화 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ntp server 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# ntp server + +! Radware Alteon +# cfg > /sys/ntp > on +# prisrvr +# intrval <동기화주기> +# tzone +9:00 +# apply > save + +! Juniper Junos +[edit system ntp] +user@host# set server +user@host# set boot-server +``` + +### N-16: Timestamp 로그 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service timestamps 확인 +``` +**조치:** +``` +! Cisco IOS - UTC 시간 밀리초 단위 +Router(config)# service timestamps log datetime msec show-timezone +! 로컬 시간(KST) 밀리초 단위 +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone +``` + +## 5. 기능 관리 + +### N-17: SNMP 서비스 확인 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show snmp + +! Juniper Junos +user@host# show snmp + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - SNMP 비활성화 +Router(config)# no snmp-server + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: d + +! Juniper Junos +user@host# no set snmp community public +``` + +### N-18: SNMP Community String 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community 설정 확인 (public/private 사용 여부) +``` +**조치:** +``` +! Cisco IOS +Router(config)# snmp-server community <복잡한String> + +! Radware Alteon +# cfg/sys/ssnmp +# rcomm <복잡한String> +# wcomm <복잡한String> +# apply > save + +! Juniper Junos +user@host# set snmp community <복잡한String> authorization read-only + +! Piolink PLOS +switch(config-snmp)# community <복잡한String> +switch(config-snmp)# status enable +switch(config-snmp)# apply +``` + +### N-19: SNMP ACL 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community + ACL 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + +! Juniper Junos +[edit snmp] +user@host# edit client-list +user@host# set default restrict +user@host# set +user@host# up +user@host# edit community +user@host# set client-list-name + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-20: SNMP Community 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community RO/RW 확인 +``` +**조치:** +``` +! Cisco IOS - RO 권한만 설정 +Router(config)# snmp-server community RO + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: r +>> Main# apply + +! Juniper Junos +[edit snmp] +user@host# delete community +user@host# set community authorization read-only +! SNMPv3 그룹 RW 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <모델> security-level <레벨> write-view + +! Piolink PLOS +switch(config-snmp)# policy read-only +switch(config-snmp)# apply +``` + +### N-21: TFTP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tftp +``` + +### N-22: Spoofing 방지 필터링 적용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list deny 설정 확인 + +! Juniper Junos +! Configure/Apply Firewall Filters 확인 +``` +**조치:** +``` +! Cisco IOS - Anti-Spoofing ACL (Extended ACL 100-199) +Router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +Router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +Router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +Router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any +Router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +Router(config)# access-list permit ip any any +Router(config)# interface serial <인터페이스> +Router(config-if)# ip access-group in + +! Juniper Junos +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +[edit firewall family inet filter ] +user@host# set term then accept +user@host# set interfaces <인터페이스> unit <유닛> family inet filter input +``` + +### N-23: DDoS 공격 방어 설정 또는 DDoS 장비 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show configuration +``` +**조치:** +``` +! 공통 - DDoS 방어 3가지 방법 +! 1. ACL: 스푸핑 방지 필터링 사전 적용, 공격 유형별 IP/프로토콜/포트 임시 차단 +! 2. Rate Limiting: UDP, ICMP, TCP SYN 패킷 대역폭 제한 +! 3. TCP Intercept: SYN Flooding 방어 +! - Intercept 모드: 라우터가 SYN-ACK 대신 응답 +! - Watch 모드: SYN 전달 후 30초 미완료 시 RST 전송 +``` + +### N-24: 사용하지 않는 인터페이스 비활성화 +**점검:** +``` +! Cisco IOS +Router# show interface +! Administratively down 확인 + +! Juniper Junos +user@host# show interface terse +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# shutdown + +! Radware Alteon +>> Main# /cfg/port <포트>/dis +>> Main# apply + +! Juniper Junos +[edit interfaces] +user@host# set <인터페이스> disable + +! Piolink PLOS +switch(config)# port <포트> status disable +switch(config)# apply +``` + +### N-25: TCP Keepalive 서비스 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service tcp-keepalives 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# service tcp-keepalives-in +Router(config)# service tcp-keepalives-out +``` + +### N-26: Finger 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip finger + +! Juniper Junos +[edit system services] +user@host# delete finger +user@host# commit +``` + +### N-27: 웹 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip http server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip http server +Router(config)# no ip http secure-server + +! Radware Alteon +>> Main# /cfg/sys/access/https/https dis +>> Main# apply + +! Juniper Junos +user@host# delete system services web-management + +! Piolink PLOS +(config-management-access)# http status disable +(config-management-access)# https status disable +``` + +### N-28: TCP/UDP Small 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +``` + +### N-29: Bootp 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip bootp server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip bootp server +! DHCP 유지하고 BOOTP만 차단 시 +Router(config)# ip dhcp bootp ignore + +! Radware Alteon +>> Main# /cfg/sys/bootp dis +>> Main# apply + +! Juniper Junos +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스> server <주소> +``` + +### N-30: CDP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show cdp +``` +**조치:** +``` +! Cisco IOS - 전체 비활성화 +Router(config)# no cdp run +! 특정 인터페이스 비활성화 +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +``` + +### N-31: Directed-broadcast 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast + +! Radware Alteon +# cfg/l3/frwd > dirbr disable > apply > save + +! Passport +# config vlan ip directed-broadcast > disable +``` + +### N-32: Source Routing 차단 +**점검:** +``` +! Cisco IOS / Juniper Junos +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip source-route + +! Juniper Junos +user@host# set chassis no-source-route +``` + +### N-33: Proxy ARP 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp + +! Juniper Junos +[edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp +``` + +### N-34: ICMP unreachable, redirect 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! 각 인터페이스 no ip unreachables / no ip redirects 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects + +! Juniper Junos - 전체 장비 +[edit system] +user@host# set no-redirects +! 특정 인터페이스 +[edit interfaces] +user@host# set <인터페이스> unit <유닛> family <패밀리> no-redirects +``` + +### N-35: identd 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip identd +``` + +### N-36: Domain Lookup 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip domain lookup +``` + +### N-37: PAD 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service pad +``` + +### N-38: mask-reply 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show ip interface +! "ICMP mask replies are never sent" 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +``` diff --git a/skills/kesekit-check/scripts/cii/pc.md b/skills/kesekit-check/scripts/cii/pc.md new file mode 100644 index 0000000..167c9ca --- /dev/null +++ b/skills/kesekit-check/scripts/cii/pc.md @@ -0,0 +1,348 @@ +# PC 점검 스크립트 (PC-01 ~ PC-18) + +## 1. 계정 관리 + +### PC-01: 비밀번호의 주기적 변경 +**점검:** +```powershell +# 최대 암호 사용 기간 확인 +net accounts | findstr "최대" +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol.cfg +findstr "MaximumPasswordAge" C:\secpol.cfg +findstr "MinimumPasswordAge" C:\secpol.cfg +findstr "PasswordHistorySize" C:\secpol.cfg +``` +**조치:** +```powershell +# 최대 암호 사용 기간 90일 설정 +net accounts /maxpwage:90 +# 최소 암호 사용 기간 1일 +net accounts /minpwage:1 + +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최대 암호 사용 기간": 90일 +# "최소 암호 사용 기간": 1일 +# "최근 암호 기억": 24개 + +# 계정별 비밀번호 기간 설정 +# LUSRMGR.MSC > 사용자 > 계정 속성 > "암호 사용 기간 제한 없음" 해제 +``` + +### PC-02: 비밀번호 관리정책 설정 +**점검:** +```powershell +# 암호 복잡성 및 최소 길이 확인 +net accounts +secedit /export /cfg C:\secpol.cfg +findstr "MinimumPasswordLength" C:\secpol.cfg +findstr "PasswordComplexity" C:\secpol.cfg +``` +**조치:** +```powershell +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최소 암호 길이": 8문자 이상 +# "암호는 복잡성을 만족해야 함": 사용함 + +# 복잡성 기준: 영문 대/소문자, 숫자, 특수문자 중 +# 2종류 조합 시 최소 10자리 이상 +# 3종류 조합 시 최소 8자리 이상 +``` + +### PC-03: 복구 콘솔에서 자동 로그온 금지 +**점검:** +```powershell +# 복구 콘솔 자동 로그온 설정 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "복구 콘솔: 자동 관리 로그온 허용" -> "사용 안 함" + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel /t REG_DWORD /d 0 /f +``` + +## 2. 서비스 관리 + +### PC-04: 공유 폴더 제거 +**점검:** +```powershell +# 공유 폴더 목록 확인 +net share +# 기본 공유 폴더 확인 (C$, D$, Admin$, IPC$) +Get-SmbShare +# AutoShareWks 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks +``` +**조치:** +```powershell +# 기본 공유 폴더 삭제 +net share C$ /delete +net share D$ /delete +net share Admin$ /delete + +# 재부팅 시 자동 공유 방지 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 일반 공유 폴더 삭제 +net share <공유폴더명> /delete + +# 공유 폴더 접근에 "Everyone" 제거 (GUI) +# 컴퓨터 관리 > 공유 폴더 > 공유 > 속성 > 공유 사용 권한 > Everyone 제거 + +# 암호로 보호된 공유 설정 +# 설정 > 네트워크 > 고급 공유 설정 > 모든 네트워크 > "암호로 보호된 공유" 켬 +``` + +### PC-05: 불필요한 서비스 제거 +**점검:** +```powershell +# 실행 중인 서비스 목록 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType +# 특정 불필요 서비스 확인 +Get-Service -Name "RemoteRegistry","Messenger","Clipbook","Alerter" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# 불필요 서비스 중지 및 시작 유형 변경 +# GUI: services.msc > 해당 서비스 > 속성 > 시작 유형: 사용 안 함 + +# PowerShell로 서비스 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 일반적으로 불필요한 서비스 예시: +# Alerter, Clipbook, Computer Browser, DHCP Client (고정IP 사용 시) +# Distributed Link Tracking Client, Error Reporting Service +# Messenger, NetMeeting Remote Desktop Sharing +# Print Spooler (프린터 미사용 시), Remote Registry +# Simple TCP/IP Services, Universal Plug and Play Device Host +``` + +### PC-06: 비인가 상용 메신저 사용 금지 +**점검:** +```powershell +# 설치된 메신저 프로그램 확인 +Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -match "카카오톡|Skype|NateOn|Telegram"} | Select-Object Name +# 실행 중인 메신저 프로세스 확인 +Get-Process | Where-Object {$_.ProcessName -match "kakaotalk|skype|nateon"} | Select-Object ProcessName +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows Messenger +# "Windows Messenger를 실행 허용 안 함": 사용 + +# 상용 메신저 제거 +# 설정 > 앱 > 앱 및 기능 > 해당 메신저 제거 +``` + +### PC-07: 파일 시스템이 NTFS 포맷으로 설정 +**점검:** +```powershell +# 디스크 볼륨 파일 시스템 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size +# 또는 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT32 -> NTFS 변환 (비파괴 변환) +convert C: /fs:ntfs + +# 변환 후 폴더/파일에 적합한 ACL 적용 +# 속성 > 보안 > 편집 > 그룹/계정별 권한 설정 +``` + +### PC-08: 멀티 부팅 방지 +**점검:** +```powershell +# 설치된 OS 확인 +bcdedit /enum +# 또는 +msconfig +# 부팅 탭에서 2개 이상 OS 확인 +``` +**조치:** +```powershell +# msconfig > 부팅 탭 > 사용하지 않는 OS 선택 후 삭제 +# 또는 +bcdedit /delete {identifier} +``` + +### PC-09: 브라우저 종료 시 임시 인터넷 파일 삭제 +**점검:** +```powershell +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 +# > Internet Explorer > 인터넷 제어판 > 고급 페이지 +# "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기": 사용 + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit /t REG_DWORD /d 1 /f +``` + +## 3. 패치 관리 + +### PC-10: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```powershell +# 설치된 HOT FIX 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +# Windows Update 설정 확인 +Get-WindowsUpdateLog +# 자동 업데이트 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" +``` +**조치:** +```powershell +# 설정 > Windows Update > 업데이트 확인 +# PowerShell로 업데이트 확인 및 설치 +Install-Module PSWindowsUpdate -Force +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot +``` + +### PC-11: 지원이 종료되지 않은 Windows OS Build 적용 +**점검:** +```powershell +# 현재 OS 빌드 버전 확인 +[System.Environment]::OSVersion.Version +Get-ComputerInfo | Select-Object WindowsVersion, OsBuildNumber, WindowsProductName +winver +``` +**조치:** +```powershell +# Windows Update를 통한 최신 빌드 적용 +# 설정 > Windows Update > 업데이트 확인 +# 수동 업데이트: https://www.microsoft.com/ko-kr/software-download/ +``` + +## 4. 보안 관리 + +### PC-12: Windows 자동 로그인 점검 +**점검:** +```powershell +# 자동 로그인 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword +``` +**조치:** +```powershell +# 자동 로그인 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +# DefaultPassword 값 삭제 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +``` + +### PC-13: 바이러스 백신 프로그램 설치 및 주기적 업데이트 +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntivirusSignatureLastUpdated, AntispywareEnabled +# 백신 설치 여부 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState +``` +**조치:** +```powershell +# Windows Defender 업데이트 +Update-MpSignature +# 설정 > Windows 보안 > 바이러스 및 위협 방지 > 보호 업데이트 > 업데이트 확인 +``` + +### PC-14: 백신 실시간 감시 기능 활성화 +**점검:** +```powershell +# 실시간 보호 상태 확인 +Get-MpPreference | Select-Object DisableRealtimeMonitoring +Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled +``` +**조치:** +```powershell +# 실시간 보호 활성화 +Set-MpPreference -DisableRealtimeMonitoring $false +# GUI: Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 켬 +``` + +### PC-15: OS에서 제공하는 침입차단 기능 활성화 +**점검:** +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled +netsh advfirewall show allprofiles state +``` +**조치:** +```powershell +# 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True +# 또는 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정/해제 > "사용" 설정 +``` + +### PC-16: 화면보호기 대기 시간 설정 및 재시작 시 암호 보호 +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +``` +**조치:** +```powershell +# 화면보호기 활성화 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +# 대기 시간 설정 (600초 = 10분 이하) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +# 재시작 시 암호 보호 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f + +# GUI: 설정 > 개인설정 > 잠금화면 > 화면보호기 +# 대기: 10분 이하 / "다시 시작 시 로그온 화면 표시" 체크 +``` + +### PC-17: 이동식 미디어 자동 실행 방지 +**점검:** +```powershell +# 자동 실행 정책 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun +# GPO 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoAutorun +``` +**조치:** +```powershell +# 모든 드라이브 자동 실행 끄기 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 자동 실행 정책 +# "자동 실행 끄기": 사용 - 모든 드라이브 + +# 제어판: 하드웨어 및 소리 > 자동 실행 +# "모든 미디어 및 장치에 자동 실행 사용" 체크 해제 +``` + +### PC-18: 원격 지원 금지 +**점검:** +```powershell +# 원격 지원 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +``` +**조치:** +```powershell +# 원격 지원 비활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 0 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 원격 지원 +# "원격 지원 제공 구성": 사용 안 함 + +# 원격 데스크톱 비활성화 (필요 시) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f +``` diff --git a/skills/kesekit-check/scripts/cii/unix.md b/skills/kesekit-check/scripts/cii/unix.md new file mode 100644 index 0000000..6969221 --- /dev/null +++ b/skills/kesekit-check/scripts/cii/unix.md @@ -0,0 +1,1531 @@ +# Unix 서버 점검 및 조치 스크립트 + +## 1. 계정 관리 + +### U-01: root 계정 원격 접속 제한 +**판단기준:** 원격터미널 서비스 사용 시 root 직접 접속을 차단한 경우 양호 +**점검:** +```bash +# SSH root 접속 설정 확인 +grep -i "PermitRootLogin" /etc/ssh/sshd_config + +# Telnet root 접속 설정 확인 (SOLARIS) +grep "CONSOLE" /etc/default/login + +# Telnet pts 설정 확인 (LINUX) +cat /etc/securetty | grep pts + +# Telnet rlogin 설정 확인 (AIX) +grep "rlogin" /etc/security/user +``` +**조치:** +```bash +# SSH - 모든 OS 공통 +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config +systemctl restart sshd + +# Telnet - SOLARIS +# /etc/default/login 파일에 설정 +echo "CONSOLE=/dev/console" >> /etc/default/login + +# Telnet - LINUX (/etc/securetty에서 pts 제거) +sed -i '/^pts\//d' /etc/securetty +# /etc/pam.d/login에 모듈 추가 +# auth required /lib/security/pam_securetty.so + +# Telnet - AIX (/etc/security/user) +chsec -f /etc/security/user -s root -a rlogin=false + +# HP-UX SSH +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /opt/ssh/etc/sshd_config +``` + +### U-02: 비밀번호 관리정책 설정 +**판단기준:** 영문+숫자+특수문자 8자리 이상, 최소사용 1일, 최대사용 90일, 이력 4회 이상 양호 +**점검:** +```bash +# LINUX - 비밀번호 정책 확인 +grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" /etc/login.defs +cat /etc/security/pwquality.conf 2>/dev/null +grep pam_pwquality /etc/pam.d/system-auth 2>/dev/null +grep pam_pwquality /etc/pam.d/common-password 2>/dev/null + +# SOLARIS +cat /etc/default/passwd | grep -E "HISTORY|PASSLENGTH|MINDIGIT|MINUPPER|MINLOWER|MINSPECIAL" + +# AIX +grep -E "minage|maxage|minalpha|minother|minlen|histsize" /etc/security/user +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/login.defs +sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs +sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs + +# LINUX (Redhat) - /etc/security/pwquality.conf +cat > /etc/security/pwquality.conf <<'CONF' +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +CONF + +# SOLARIS - /etc/default/passwd +cat >> /etc/default/passwd <<'CONF' +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO +CONF + +# AIX - /etc/security/user +chsec -f /etc/security/user -s default -a minage=1 +chsec -f /etc/security/user -s default -a maxage=12 +chsec -f /etc/security/user -s default -a minalpha=2 +chsec -f /etc/security/user -s default -a minother=2 +chsec -f /etc/security/user -s default -a minlen=8 +chsec -f /etc/security/user -s default -a histsize=4 + +# HP-UX - /etc/default/security +cat >> /etc/default/security <<'CONF' +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +CONF +``` + +### U-03: 계정 잠금 임계값 설정 +**판단기준:** 계정 잠금 임계값이 10회 이하로 설정된 경우 양호 +**점검:** +```bash +# LINUX - PAM 계정잠금 설정 확인 +grep pam_tally /etc/pam.d/system-auth 2>/dev/null +grep pam_faillock /etc/pam.d/system-auth 2>/dev/null +grep -E "deny|unlock_time" /etc/security/faillock.conf 2>/dev/null +authselect current 2>/dev/null + +# SOLARIS +grep "RETRIES" /etc/default/login +grep "LOCK_AFTER_RETRIES" /etc/security/policy.conf 2>/dev/null + +# AIX +grep "loginretries" /etc/security/user + +# HP-UX +grep "AUTH_MAXTRIES" /etc/default/security 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat - authselect 방식, RHEL 8+) +authselect enable-feature with-faillock +# /etc/security/faillock.conf 수정 +cat >> /etc/security/faillock.conf <<'CONF' +silent +deny = 10 +unlock_time = 120 +CONF + +# LINUX (Redhat - pam_faillock 방식) +# /etc/pam.d/system-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +# /etc/pam.d/password-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# LINUX (Debian - pam_faillock 방식) +# /etc/pam.d/common-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# SOLARIS (5.9+) +# /etc/security/policy.conf +echo "LOCK_AFTER_RETRIES=YES" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/user -s default -a loginretries=10 + +# HP-UX (11.v3+) +echo "AUTH_MAXTRIES=10" >> /etc/default/security +``` + +### U-04: 비밀번호 파일 보호 +**판단기준:** 쉐도우 비밀번호를 사용하거나 비밀번호를 암호화하여 저장하는 경우 양호 +**점검:** +```bash +# /etc/passwd 두 번째 필드가 'x'인지 확인 (x이면 shadow 사용 중) +awk -F: '$2 != "x" {print $1" : 비밀번호 평문 저장 의심"}' /etc/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX - 쉐도우 비밀번호 적용 +pwconv + +# HP-UX - Trusted Mode 전환 +/etc/tsconvert +``` + +### U-05: root 이외의 UID가 '0' 금지 +**판단기준:** root 계정과 동일한 UID(0)를 갖는 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '$3==0 && $1!="root" {print $1" has UID 0"}' /etc/passwd +``` +**조치:** +```bash +# UID 변경 +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-06: 사용자 계정 su 기능 제한 +**판단기준:** su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 양호 +**점검:** +```bash +# wheel 그룹 확인 +grep wheel /etc/group +# su 명령어 권한 확인 +ls -l /usr/bin/su +# PAM 설정 확인 (LINUX) +grep pam_wheel /etc/pam.d/su +``` +**조치:** +```bash +# wheel 그룹 생성 (없는 경우) +groupadd wheel +# su 명령 그룹 변경 및 권한 설정 +chgrp wheel /usr/bin/su +chmod 4750 /usr/bin/su +# 허용 계정 등록 +usermod -G wheel + +# LINUX PAM 설정 - /etc/pam.d/su +# auth required pam_wheel.so use_uid +``` + +### U-07: 불필요한 계정 제거 +**판단기준:** 불필요한 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +# 시스템 계정 확인 +cat /etc/passwd +# 마지막 로그인 기록 확인 +last | head -30 +# 로그인 불가 계정 확인 +awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd +``` +**조치:** +```bash +userdel <사용자_이름> +# AIX의 경우 +# rmuser <사용자_이름> +``` + +### U-08: 관리자 그룹에 최소한의 계정 포함 +**판단기준:** 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 양호 +**점검:** +```bash +grep "^root:" /etc/group +``` +**조치:** +```bash +gpasswd -d <사용자_이름> root +# AIX의 경우 +# chgrpmem -m - <사용자_이름> root +``` + +### U-09: 계정이 존재하지 않는 GID 금지 +**판단기준:** 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 양호 +**점검:** +```bash +# /etc/group과 /etc/passwd 비교 +cat /etc/group +cat /etc/gshadow 2>/dev/null +``` +**조치:** +```bash +groupdel <그룹_이름> +``` + +### U-10: 동일한 UID 금지 +**판단기준:** 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d +# 중복 UID가 있다면 해당 계정 확인 +awk -F: '{uid[$3]=uid[$3]" "$1} END{for(u in uid) if(split(uid[u],a," ")>2) print "UID "u":"uid[u]}' /etc/passwd +``` +**조치:** +```bash +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-11: 사용자 shell 점검 +**판단기준:** 로그인이 필요하지 않은 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +cat /etc/passwd | grep -E "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^games|^gopher" | grep -v admin +``` +**조치:** +```bash +# 불필요한 계정에 nologin 쉘 부여 +usermod -s /bin/false <계정명> +usermod -s /sbin/nologin <계정명> +``` + +### U-12: 세션 종료 시간 설정 +**판단기준:** Session Timeout이 600초(10분) 이하로 설정된 경우 양호 +**점검:** +```bash +echo $TMOUT +grep -i tmout /etc/profile /etc/bashrc 2>/dev/null +grep autologout /etc/csh.cshrc /etc/csh.login 2>/dev/null +``` +**조치:** +```bash +# sh, ksh, bash - /etc/profile에 추가 +echo "TMOUT=600" >> /etc/profile +echo "export TMOUT" >> /etc/profile + +# csh - /etc/csh.cshrc 또는 /etc/csh.login에 추가 +echo "set autologout=10" >> /etc/csh.cshrc +``` + +### U-13: 안전한 비밀번호 암호화 알고리즘 사용 +**판단기준:** SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 양호 ($5=SHA-256, $6=SHA-512) +**점검:** +```bash +# 암호화 알고리즘 확인 ($1=MD5, $5=SHA-256, $6=SHA-512) +awk -F: '$2 ~ /^\$/ {split($2,a,"$"); print $1" -> $"a[2]}' /etc/shadow 2>/dev/null + +# LINUX +grep ENCRYPT_METHOD /etc/login.defs +``` +**조치:** +```bash +# LINUX (Redhat) +sed -i 's/^ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' /etc/login.defs +# /etc/pam.d/system-auth +# password sufficient pam_unix.so sha512 + +# SOLARIS +# /etc/security/policy.conf +echo "CRYPT_DEFAULT=6" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/login.cfg -s usw -a pwd_algorithm=ssha512 + +# HP-UX +echo "CRYPT_DEFAULT=6" >> /etc/default/security +``` + +--- + +## 2. 파일 및 디렉터리 관리 + +### U-14: root 홈, 패스 디렉터리 권한 및 패스 설정 +**판단기준:** PATH 환경변수에 "."이 맨 앞이나 중간에 포함되지 않은 경우 양호 +**점검:** +```bash +echo $PATH | tr ':' '\n' | grep -n "^\.$" +echo $PATH | grep -E "(^\.:|:\.:|:\.$ )" +``` +**조치:** +```bash +# 환경설정 파일에서 PATH 변숫값에서 "." 제거 또는 맨 마지막으로 이동 +# ~/.profile, ~/.bashrc, /etc/profile 등에서 수정 +# 예: PATH=$PATH:$HOME/bin (상대경로 "." 삭제) +``` + +### U-15: 파일 및 디렉터리 소유자 설정 +**판단기준:** 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 양호 +**점검:** +```bash +find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +``` +**조치:** +```bash +# 불필요한 파일 제거 +rm <파일_이름> +rm -r <디렉터리_이름> +# 사용 중인 파일의 소유자 변경 +chown <사용자_이름> <파일명> +chgrp <그룹_이름> <파일명> +``` + +### U-16: /etc/passwd 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/passwd +``` +**조치:** +```bash +chown root /etc/passwd +chmod 644 /etc/passwd +``` + +### U-17: 시스템 시작 스크립트 권한 설정 +**판단기준:** 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +# LINUX (init) +ls -al /etc/rc.d/*/* 2>/dev/null +# LINUX (systemd) +ls -al /etc/systemd/system/* 2>/dev/null +# SOLARIS +ls -al /etc/rc*.d/* 2>/dev/null +``` +**조치:** +```bash +chown root <파일_이름> +chmod o-w <파일_이름> +``` + +### U-18: /etc/shadow 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 400 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/shadow +# AIX +ls -l /etc/security/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX +chown root /etc/shadow +chmod 400 /etc/shadow + +# AIX +chown root /etc/security/passwd +chmod 400 /etc/security/passwd +``` + +### U-19: /etc/hosts 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts +``` +**조치:** +```bash +chown root /etc/hosts +chmod 644 /etc/hosts +``` + +### U-20: /etc/(x)inetd.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/inetd.conf 2>/dev/null +ls -l /etc/xinetd.conf 2>/dev/null +ls -l /etc/xinetd.d/* 2>/dev/null +ls -l /etc/systemd/system.conf 2>/dev/null +``` +**조치:** +```bash +# inetd +chown root /etc/inetd.conf +chmod 600 /etc/inetd.conf + +# xinetd +chown root /etc/xinetd.conf +chmod 600 /etc/xinetd.conf +chown -R root /etc/xinetd.d/ +chmod -R 600 /etc/xinetd.d/ + +# systemd +chown root /etc/systemd/system.conf +chmod 600 /etc/systemd/system.conf +``` + +### U-21: /etc/(r)syslog.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/syslog.conf /etc/rsyslog.conf 2>/dev/null +``` +**조치:** +```bash +chown root /etc/rsyslog.conf +chmod 640 /etc/rsyslog.conf +``` + +### U-22: /etc/services 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/services +``` +**조치:** +```bash +chown root /etc/services +chmod 644 /etc/services +``` + +### U-23: SUID, SGID, Sticky bit 설정 파일 점검 +**판단기준:** 주요 실행 파일의 권한에 불필요한 SUID/SGID가 부여되어 있지 않은 경우 양호 +**점검:** +```bash +find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +``` +**조치:** +```bash +# 불필요한 특수 권한 제거 +chmod -s <파일_이름> + +# 특정 그룹에서만 사용하도록 제한 +chgrp <그룹_이름> +chmod 4750 +``` + +### U-24: 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +**판단기준:** 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정이고, 소유자 외 쓰기 권한이 없는 경우 양호 +**점검:** +```bash +# 각 사용자 홈 디렉터리의 환경변수 파일 확인 +ls -la ~/.profile ~/.kshrc ~/.cshrc ~/.bashrc ~/.bash_profile ~/.login ~/.exrc ~/.netrc 2>/dev/null +``` +**조치:** +```bash +chown <환경변수_파일> +chmod o-w <환경변수_파일> +``` + +### U-25: world writable 파일 점검 +**판단기준:** world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 양호 +**점검:** +```bash +find / -type f -perm -2 -exec ls -l {} \; 2>/dev/null +``` +**조치:** +```bash +# 일반 사용자 쓰기 권한 제거 +chmod o-w <파일_이름> +# 불필요한 파일 제거 +rm <파일_이름> +``` + +### U-26: /dev에 존재하지 않는 device 파일 점검 +**판단기준:** /dev 디렉터리에 존재하지 않는 device 파일을 제거한 경우 양호 +**점검:** +```bash +find /dev -type f -exec ls -l {} \; +``` +**조치:** +```bash +rm <파일_이름> +``` + +### U-27: $HOME/.rhosts, hosts.equiv 사용 금지 +**판단기준:** rlogin/rsh/rexec 미사용 또는 사용 시 소유자 root, 권한 600 이하, "+" 설정 없는 경우 양호 +**점검:** +```bash +find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null +cat /etc/hosts.equiv 2>/dev/null +ls -la /etc/hosts.equiv 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.equiv +chmod 600 /etc/hosts.equiv +chown root $HOME/.rhosts +chmod 600 $HOME/.rhosts +# "+" 옵션 제거 후 허용 호스트 및 계정만 등록 +``` + +### U-28: 접속 IP 및 포트 제한 +**판단기준:** 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 양호 +**점검:** +```bash +# TCP Wrapper +cat /etc/hosts.allow 2>/dev/null +cat /etc/hosts.deny 2>/dev/null + +# iptables +iptables -L 2>/dev/null + +# firewalld +firewall-cmd --list-all 2>/dev/null + +# UFW +ufw status numbered 2>/dev/null +``` +**조치:** +```bash +# TCP Wrapper +echo "ALL:ALL" > /etc/hosts.deny +echo "sshd : <허용_IP>" >> /etc/hosts.allow + +# iptables +iptables -A INPUT -p tcp -s --dport <포트> -j ACCEPT +iptables-save + +# firewalld +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="" port protocol="tcp" port="<포트>" accept' +firewall-cmd --reload + +# UFW +ufw allow from to any port <포트> +ufw reload +``` + +### U-29: hosts.lpd 파일 소유자 및 권한 설정 +**판단기준:** /etc/hosts.lpd 파일이 존재하지 않거나, 소유자 root이고 권한 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts.lpd 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.lpd +chmod 600 /etc/hosts.lpd +``` + +### U-30: UMASK 설정 관리 +**판단기준:** UMASK 값이 022 이상으로 설정된 경우 양호 +**점검:** +```bash +umask +grep -i umask /etc/profile /etc/bashrc /etc/login.defs 2>/dev/null +# SOLARIS +grep UMASK /etc/default/login 2>/dev/null +``` +**조치:** +```bash +# /etc/profile에 추가 +echo "umask 022" >> /etc/profile +echo "export umask" >> /etc/profile + +# LINUX - /etc/login.defs +sed -i 's/^UMASK.*/UMASK 022/' /etc/login.defs + +# SOLARIS - /etc/default/login +echo "UMASK=022" >> /etc/default/login + +# FTP umask 설정 +# vsFTP: vsftpd.conf -> local_umask=022 +# ProFTP: proftpd.conf -> Umask 022 +``` + +### U-31: 홈디렉토리 소유자 및 권한 설정 +**판단기준:** 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +cat /etc/passwd | awk -F: '{print $1" "$6}' | while read user dir; do + ls -ald "$dir" 2>/dev/null +done +``` +**조치:** +```bash +chown <사용자_이름> <홈_디렉터리> +chmod o-w <홈_디렉터리> +``` + +### U-32: 홈 디렉토리로 지정한 디렉토리의 존재 관리 +**판단기준:** 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $1" "$6}' /etc/passwd | while read user dir; do + [ ! -d "$dir" ] && echo "$user : $dir 존재하지 않음" +done +``` +**조치:** +```bash +# 불필요한 계정 삭제 +userdel <사용자_이름> +# 사용중인 계정의 홈 디렉터리 생성 +mkdir -p /home/<사용자_이름> +chown <사용자_이름> /home/<사용자_이름> +``` + +### U-33: 숨겨진 파일 및 디렉토리 검색 및 제거 +**판단기준:** 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 양호 +**점검:** +```bash +find / -type f -name ".*" 2>/dev/null +find / -type d -name ".*" 2>/dev/null +``` +**조치:** +```bash +rm <파일_이름> +rm -r <디렉터리_이름> +``` + +--- + +## 3. 서비스 관리 + +### U-34: Finger 서비스 비활성화 +**판단기준:** Finger 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep finger +# SOLARIS (5.10+) +inetadm | grep finger 2>/dev/null +# inetd +grep finger /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/finger 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop finger.socket 2>/dev/null +systemctl disable finger.socket 2>/dev/null + +# xinetd +# /etc/xinetd.d/finger -> disable = yes +systemctl restart xinetd + +# inetd - finger 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/finger:default +``` + +### U-35: 공유 서비스에 대한 익명 접근 제한 설정 +**판단기준:** 공유 서비스에 대해 익명 접근을 제한한 경우 양호 +**점검:** +```bash +# FTP 익명 계정 확인 +grep -E "^ftp|^anonymous" /etc/passwd + +# vsFTP +grep anonymous_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# ProFTP +sed -n '//,/<\/Anonymous>/p' /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null + +# NFS 익명 접근 +grep -E "anonuid|anongid" /etc/exports 2>/dev/null + +# Samba +grep "guest ok" /etc/samba/smb.conf 2>/dev/null +``` +**조치:** +```bash +# FTP 익명 계정 제거 +userdel ftp +userdel anonymous + +# vsFTP - /etc/vsftpd/vsftpd.conf +# anonymous_enable=NO +systemctl restart vsftpd + +# NFS - /etc/exports에서 anon 옵션 제거 +exportfs -ra + +# Samba - /etc/samba/smb.conf +# guest ok = no +smbcontrol all reload-config +``` + +### U-36: r 계열 서비스 비활성화 +**판단기준:** 불필요한 r 계열 서비스(rlogin, rsh, rexec)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "rlogin|rsh|rexec" +# inetd +grep -E "rlogin|rsh|rexec|shell|login|exec" /etc/inetd.conf 2>/dev/null +# SOLARIS (5.10+) +inetadm | egrep "shell|rlogin|rexec" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop rlogin.socket rsh.socket rexec.socket 2>/dev/null +systemctl disable rlogin.socket rsh.socket rexec.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/login:rlogin +inetadm -d svc:/network/shell:default +inetadm -d svc:/network/rexec:default +``` + +### U-37: crontab 설정파일 권한 설정 미흡 +**판단기준:** crontab/at 명령어 권한 750 이하, cron/at 관련 파일 권한 640 이하인 경우 양호 +**점검:** +```bash +ls -l /usr/bin/crontab +ls -l /usr/bin/at +ls -l /var/spool/cron/ 2>/dev/null +ls -l /var/spool/cron/crontabs/ 2>/dev/null +ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny 2>/dev/null +``` +**조치:** +```bash +# crontab/at 명령어 권한 설정 +chown root /usr/bin/crontab +chmod 750 /usr/bin/crontab +chown root /usr/bin/at +chmod 750 /usr/bin/at + +# cron 관련 파일 권한 설정 +chmod 640 /etc/cron.allow /etc/cron.deny 2>/dev/null +chmod 640 /etc/at.allow /etc/at.deny 2>/dev/null +``` + +### U-38: DoS 공격에 취약한 서비스 비활성화 +**판단기준:** echo, discard, daytime, chargen 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "echo|discard|daytime|chargen" +# inetd +grep -E "echo|discard|daytime|chargen" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep enable | egrep "echo|discard|daytime|chargen" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null +systemctl disable echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬> +``` + +### U-39: 불필요한 NFS 서비스 비활성화 +**판단기준:** 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep nfs +# AIX +ps -ef | grep nfsd +lssrc -a | grep nfs 2>/dev/null +# SOLARIS +inetadm | egrep "nfs|statd|lockd" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop nfs-server +systemctl disable nfs-server + +# SOLARIS +inetadm -d + +# AIX +stopsrc -g nfs + +# HP-UX +# /etc/rc.config.d/nfsconf -> NFS_SERVER=0 +``` + +### U-40: NFS 접근 통제 +**판단기준:** 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX +ls -l /etc/exports +cat /etc/exports +showmount -e 2>/dev/null + +# SOLARIS +ls -l /etc/dfs/dfstab 2>/dev/null +cat /etc/dfs/dfstab 2>/dev/null +``` +**조치:** +```bash +# LINUX +chown root /etc/exports +chmod 644 /etc/exports +# /etc/exports 예시: /home/share host1(ro,root_squash) +exportfs -ra + +# SOLARIS +chown root /etc/dfs/dfstab +chmod 644 /etc/dfs/dfstab +# /etc/dfs/dfstab 예시: share -F nfs -o rw=client1:client2,ro=client1:client2 /export/home +shareall +``` + +### U-41: 불필요한 automountd 제거 +**판단기준:** automountd 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "automount|autofs" +# SOLARIS +svcs -a | grep autofs 2>/dev/null +# AIX +ps -ef | grep automountd +``` +**조치:** +```bash +# LINUX +systemctl stop autofs +systemctl disable autofs + +# SOLARIS +svcadm disable svc:/system/filesystem/autofs:default + +# HP-UX +# /etc/rc.config.d/nfsconf -> AUTOFS=0 +``` + +### U-42: 불필요한 RPC 서비스 비활성화 +**판단기준:** 불필요한 RPC 서비스(rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd 등)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep rpc +# inetd +grep -E "rpc\." /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep rpc | grep enabled | egrep "ttdbserver|rex|rstart|rusers|spray|wall|rquota" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop <서비스명> +systemctl disable <서비스명> + +# inetd - 해당 RPC 서비스 항목 주석 처리 +# SOLARIS +svcadm disable <서비스_데몬> +``` + +### U-43: NIS, NIS+ 점검 +**판단기준:** NIS 서비스가 비활성화되어 있거나, 불가피 시 NIS+ 서비스를 사용하는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated" +# SOLARIS +svcs -a | grep nis 2>/dev/null +# AIX +lssrc -a | grep -E "ypserv|ypbind" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop ypserv ypbind 2>/dev/null +systemctl disable ypserv ypbind 2>/dev/null + +# SOLARIS +svcadm disable + +# HP-UX - /etc/rc.config.d/namesrvs +# NIS_MASTER_SERVER=0 +# NIS_SLAVE_SERVER=0 +# NIS_CLIENT_SERVER=0 +``` + +### U-44: tftp, talk 서비스 비활성화 +**판단기준:** tftp, talk, ntalk 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "tftp|talk|ntalk" +# inetd +grep -E "tftp|talk|ntalk" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | egrep "tftp|talk" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop tftp.socket talk.socket ntalk.socket 2>/dev/null +systemctl disable tftp.socket talk.socket ntalk.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬명> +``` + +### U-45: 메일 서비스 버전 점검 +**판단기준:** 메일 서비스 버전이 최신 버전인 경우 양호 +**점검:** +```bash +# Sendmail +sendmail -d0 -bt < /dev/null 2>&1 | grep Version +# Postfix +postconf mail_version 2>/dev/null +# Exim +exim -bV 2>/dev/null +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop sendmail postfix 2>/dev/null +systemctl disable sendmail postfix 2>/dev/null + +# 사용 시 최신 버전으로 패치 적용 +# Sendmail: http://www.sendmail.org/ +# Postfix: https://www.postfix.org/packages.html +# Exim: https://www.exim.org/ +``` + +### U-46: 일반 사용자의 메일 서비스 실행 방지 +**판단기준:** 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf 2>/dev/null +# Postfix +ls -l /usr/sbin/postsuper 2>/dev/null +# Exim +ls -l /usr/sbin/exiqgrep 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun + +# Postfix +chmod o-x /usr/sbin/postsuper + +# Exim +chmod o-x /usr/sbin/exiqgrep +``` + +### U-47: 스팸 메일 릴레이 제한 +**판단기준:** 릴레이 제한이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep "promiscuous_relay" /etc/mail/sendmail.mc 2>/dev/null +cat /etc/mail/access 2>/dev/null +# Postfix +grep -E "smtpd_recipient_restrictions|mynetworks" /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "relay_from_hosts|hosts =" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.mc에서 promiscuous_relay 제거 +# FEATURE(`promiscuous_relay')dnl 삭제 +m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +# /etc/mail/access에 허용/차단 설정 +makemap hash /etc/mail/access.db < /etc/mail/access +systemctl restart sendmail + +# Postfix - /etc/postfix/main.cf +# mynetworks = <허용할_네트워크> +postfix reload + +# Exim - /etc/exim/exim.conf +# hostlist relay_from_hosts = <허용할_네트워크> +systemctl restart exim +``` + +### U-48: expn, vrfy 명령어 제한 +**판단기준:** noexpn, novrfy 옵션이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf +# Postfix +grep disable_vrfy_command /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "acl_smtp_vrfy|acl_smtp_expn" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +# 또는 PrivacyOptions = restrictqrun, goaway + +# Postfix - /etc/postfix/main.cf +# disable_vrfy_command = yes +postfix reload + +# Exim - acl_smtp_vrfy, acl_smtp_expn 설정 제거/주석 처리 +``` + +### U-49: DNS 보안 버전 패치 +**판단기준:** 주기적으로 패치를 관리하는 경우 양호 +**점검:** +```bash +named -v 2>/dev/null +# LINUX +systemctl list-units --type=service | grep named +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop named +systemctl disable named + +# 사용 시 최신 버전 패치 +# ISC BIND: https://www.isc.org/downloads/ +# 취약점 정보: https://kb.isc.org/v1/docs/en/aa-00913 +``` + +### U-50: DNS ZoneTransfer 설정 +**판단기준:** Zone Transfer를 허가된 사용자에게만 허용한 경우 양호 +**점검:** +```bash +grep allow-transfer /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +grep xfrnets /etc/named.boot /etc/bind/named.boot 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf (또는 /etc/bind/named.conf.options) 수정 +# allow-transfer { <허용할_IP>; }; +systemctl restart named +``` + +### U-51: DNS 서비스의 취약한 동적 업데이트 설정 금지 +**판단기준:** 동적 업데이트 기능이 비활성화되었거나, 적절한 접근통제를 수행하는 경우 양호 +**점검:** +```bash +grep allow-update /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf 수정 +# 불필요 시: allow-update { none; }; +# 필요 시: allow-update { <허용할_IP>; }; +systemctl restart named +``` + +### U-52: Telnet 서비스 비활성화 +**판단기준:** Telnet 프로토콜을 비활성화하고 있는 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=socket | grep telnet +# inetd +grep telnet /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/telnet 2>/dev/null +# SOLARIS +svcs -a | grep telnet 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop telnet.socket +systemctl disable telnet.socket +systemctl start sshd + +# xinetd - /etc/xinetd.d/telnet -> disable = yes +systemctl restart xinetd + +# SOLARIS +svcadm disable svc:/network/telnet:default +svcadm enable ssh +``` + +### U-53: FTP 서비스 정보 노출 제한 +**판단기준:** FTP 접속 배너에 노출되는 정보가 없는 경우 양호 +**점검:** +```bash +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +# ProFTP +grep ServerIdent /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only +systemctl restart vsftpd + +# ProFTP - /etc/proftpd/proftpd.conf +# ServerIdent off +# 또는 ServerIdent on "Authorized access only" +systemctl restart proftpd +``` + +### U-54: 암호화되지 않는 FTP 서비스 비활성화 +**판단기준:** 암호화되지 않은 FTP 서비스가 비활성화된 경우 양호 (SFTP 사용 권고) +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "vsftpd|proftpd" +# inetd +grep "^ftp" /etc/inetd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop vsftpd proftpd 2>/dev/null +systemctl disable vsftpd proftpd 2>/dev/null + +# inetd - ftp 항목 주석 처리 +``` + +### U-55: FTP 계정 shell 제한 +**판단기준:** FTP 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +grep "^ftp" /etc/passwd +``` +**조치:** +```bash +usermod -s /bin/false ftp +# 또는 +usermod -s /sbin/nologin ftp +``` + +### U-56: FTP 서비스 접근 제어 설정 +**판단기준:** 특정 IP주소/호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 양호 +**점검:** +```bash +# ftpusers 파일 +cat /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null +ls -l /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null + +# vsFTP +grep userlist_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +cat /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep UseFtpUsers /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일 권한 설정 +chown root /etc/ftpusers +chmod 640 /etc/ftpusers + +# vsFTP - user_list 방식 +# /etc/vsftpd/vsftpd.conf +# userlist_enable=YES +# userlist_deny=YES (목록 사용자 차단) 또는 NO (목록 사용자만 허용) + +# ProFTP - proftpd.conf 접근제한 +# +# Order Deny,Allow +# AllowUser <사용자> 또는 Allow from +# DenyUser <사용자> 또는 Deny from +# +``` + +### U-57: Ftpusers 파일 설정 (root 계정 접근 제한) +**판단기준:** root 계정 접속을 차단한 경우 양호 +**점검:** +```bash +# ftpusers 파일에 root가 등록되어 있는지 확인 +grep "^root" /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep RootLogin /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일에 root 추가 (주석 해제) +# 해당 파일에서 #root -> root 로 변경 + +# ProFTP - /etc/proftpd/proftpd.conf +# RootLogin off +systemctl restart proftpd +``` + +### U-58: 불필요한 SNMP 서비스 구동 점검 +**판단기준:** SNMP 서비스를 사용하지 않는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep snmpd +# SOLARIS +svcs -a | grep snmp 2>/dev/null +# AIX +lssrc -a | grep snmp 2>/dev/null +# 프로세스 확인 +ps -ef | grep snmp +``` +**조치:** +```bash +# LINUX +systemctl stop snmpd +systemctl disable snmpd + +# SOLARIS (5.10+) +svcadm disable svc:/application/management/snmpd:default + +# AIX +stopsrc -s snmpd +# /etc/rc.tcpip에서 snmpd 주석 처리 +``` + +### U-59: 안전한 SNMP 버전 사용 +**판단기준:** SNMP 서비스를 v3 이상으로 사용하는 경우 양호 +**점검:** +```bash +# SNMPv3 사용 여부 확인 +snmpwalk -v3 -l authPriv -u <사용자> -a SHA -A <인증암호> -x AES -X <암호화암호> <서버IP> 2>/dev/null +grep -E "rouser|rwuser|createUser" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# SNMPv3 사용자 생성 +net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser + +# /etc/snmp/snmpd.conf에 추가 +# createUser myuser SHA myauthpass AES myprivpass +# rouser myuser + +systemctl restart snmpd +``` + +### U-60: SNMP Community String 복잡성 설정 +**판단기준:** Community String이 "public", "private"이 아니고 영숫자 10자리 이상 또는 영숫자+특수문자 8자리 이상인 경우 양호 +**점검:** +```bash +grep -i community /etc/snmp/snmpd.conf 2>/dev/null +# AIX +grep -i community /etc/snmpdv3.conf 2>/dev/null +# HP-UX +grep -i community /etc/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser default <복잡한_String값> +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <복잡한_String값> default +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY <새_String> <새_String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-61: SNMP Access Control 설정 +**판단기준:** SNMP 서비스에 접근 제어 설정이 되어 있는 경우 양호 +**점검:** +```bash +# LINUX (Redhat) +grep "com2sec" /etc/snmp/snmpd.conf 2>/dev/null +# LINUX (Debian) +grep -E "rocommunity|rwcommunity" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser <허용_네트워크> + +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <허용_네트워크> + +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY noAuthNoPriv <허용_IP> <넷마스크> - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-62: 로그인 시 경고 메시지 설정 +**판단기준:** 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 양호 +**점검:** +```bash +# 서버 로그온 배너 +cat /etc/motd 2>/dev/null +cat /etc/issue 2>/dev/null +cat /etc/issue.net 2>/dev/null + +# SSH 배너 +grep "^Banner" /etc/ssh/sshd_config + +# Sendmail +grep SmtpGreetingMessage /etc/mail/sendmail.cf 2>/dev/null + +# Postfix +grep smtpd_banner /etc/postfix/main.cf 2>/dev/null + +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# DNS +grep "version" /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# 서버 경고 메시지 +echo "Authorized access only. All activity is monitored." > /etc/motd +echo "Authorized access only." > /etc/issue +echo "Authorized access only." > /etc/issue.net + +# SSH - /etc/ssh/sshd_config +# Banner /etc/issue.net +systemctl restart sshd + +# Sendmail - /etc/mail/sendmail.cf +# SmtpGreetingMessage=Authorized access only + +# Postfix - /etc/postfix/main.cf +# smtpd_banner = Authorized access only + +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only + +# DNS - /etc/named.conf +# version "Not disclosed"; +``` + +### U-63: sudo 명령어 접근 관리 +**판단기준:** /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 양호 +**점검:** +```bash +ls -l /etc/sudoers +``` +**조치:** +```bash +chown root /etc/sudoers +chmod 640 /etc/sudoers +``` + +--- + +## 4. 패치 관리 + +### U-64: 주기적 보안 패치 및 벤더 권고사항 적용 +**판단기준:** 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있는 경우 양호 +**점검:** +```bash +# OS 및 커널 버전 확인 +uname -a +cat /etc/os-release 2>/dev/null +hostnamectl 2>/dev/null + +# 패치 이력 확인 (LINUX) +rpm -qa --last | head -20 2>/dev/null +apt list --upgradable 2>/dev/null + +# SOLARIS +pkg list -af entire@latest 2>/dev/null + +# AIX +oslevel -s +instfix -i | grep ML 2>/dev/null +instfix -i | grep SP 2>/dev/null + +# HP-UX +swlist -l product 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat/CentOS) +yum update -y +# LINUX (Debian/Ubuntu) +apt update && apt upgrade -y + +# SOLARIS +pkg update --accept + +# AIX - smitty installp를 통한 패치 설치 + +# HP-UX +# swinstall -s /tmp/patch.depot +``` + +--- + +## 5. 로그 관리 + +### U-65: NTP 및 시각 동기화 설정 +**판단기준:** NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 양호 +**점검:** +```bash +# NTP +ntpq -pn 2>/dev/null +cat /etc/ntp.conf 2>/dev/null + +# Chrony (RHEL 8+) +chronyc sources 2>/dev/null +cat /etc/chrony.conf 2>/dev/null +``` +**조치:** +```bash +# NTP - /etc/ntp.conf +# server +systemctl restart ntp 2>/dev/null || systemctl restart ntpd 2>/dev/null + +# Chrony - /etc/chrony.conf +# server +systemctl restart chronyd +``` + +### U-66: 정책에 따른 시스템 로깅 설정 +**판단기준:** 로그 기록 정책이 보안 정책에 따라 수립되어 있으며, 로그를 남기고 있는 경우 양호 +**점검:** +```bash +# LINUX +cat /etc/rsyslog.conf 2>/dev/null +ls /etc/rsyslog.d/ 2>/dev/null + +# SOLARIS +cat /etc/syslog.conf 2>/dev/null + +# AIX +cat /etc/syslog.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX - /etc/rsyslog.conf 권장 설정 +cat >> /etc/rsyslog.conf <<'CONF' +*.info;mail.none;authpriv.none;cron.none /var/log/messages +authpriv.* /var/log/secure +mail.* /var/log/maillog +cron.* /var/log/cron +*.emerg * +CONF +systemctl restart rsyslog + +# SOLARIS - /etc/syslog.conf 권장 설정 +# mail.debug /var/log/mail.log +# *.info /var/log/syslog.log +# *.alert /dev/console +# *.emerg * + +# AIX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/error.log +# mail.info /var/adm/mail.log +# auth.info /var/adm/auth.log +# refresh -s syslogd + +# HP-UX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/syslog/error.log +# mail.info /var/adm/syslog/mail.log +# auth.info /var/adm/syslog/auth.log +``` + +### U-67: 로그 디렉터리 소유자 및 권한 설정 +**판단기준:** 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX, SOLARIS +ls -la /var/log/ +# AIX +ls -la /var/adm/ 2>/dev/null +# HP-UX +ls -la /var/adm/syslog/ 2>/dev/null +``` +**조치:** +```bash +# LINUX, SOLARIS +chown root /var/log/* +chmod 644 /var/log/* + +# AIX +chown root /var/adm/* +chmod 644 /var/adm/* + +# HP-UX +chown root /var/adm/syslog/* +chmod 644 /var/adm/syslog/* +``` diff --git a/skills/kesekit-check/scripts/cii/web-service.md b/skills/kesekit-check/scripts/cii/web-service.md new file mode 100644 index 0000000..d70ca7c --- /dev/null +++ b/skills/kesekit-check/scripts/cii/web-service.md @@ -0,0 +1,725 @@ +# 웹 서비스 점검 스크립트 (WEB-01 ~ WEB-26) + +## 1. 계정 관리 + +### WEB-01: Default 관리자 계정명 변경 +**점검:** +```bash +# Tomcat - 기본 계정명(tomcat, admin) 사용 여부 확인 +grep -i 'username=' /conf/server.xml +# JEUS - Security Domains > Account & Policies > Users에서 기본 계정 확인 +``` +**조치:** +```bash +# Tomcat - 기본 계정명을 유추 불가능한 이름으로 변경 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > ADD +# administrator 대신 유추 불가능한 계정명 입력 후 Administrators 그룹 체크 +./stopServer -host <도메인명>:<포트> +./startDomainAdminServer -host <도메인명>:<포트> +``` + +### WEB-02: 취약한 비밀번호 사용 제한 +**점검:** +```bash +# Tomcat +grep -i 'password=' /conf/server.xml +# 비밀번호 복잡도 기준: 2종류 이상 조합 최소 10자리 또는 3종류 이상 조합 최소 8자리 +# (영문대/소문자, 숫자, 특수문자) +``` +**조치:** +```bash +# Tomcat - 복잡도 만족하는 비밀번호 설정 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > 비밀번호 변경 +# SHA-256 이상 암호화 방식 비밀번호 설정 +``` + +### WEB-03: 비밀번호 파일 권한 관리 +**점검:** +```bash +# Tomcat +ls -al /conf/tomcat-users.xml +# IIS +# %systemroot%\system32\config\SAM 파일 속성 > 보안 확인 +# JEUS +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` +**조치:** +```bash +# Tomcat - 비밀번호 파일 권한 600 이하 설정 +chmod 600 /conf/tomcat-users.xml + +# IIS - SAM 파일 속성 > 보안 > 편집 > Administrators, SYSTEM만 허용 + +# JEUS +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` + +--- + +## 2. 서비스 관리 + +### WEB-04: 디렉터리 리스팅 방지 설정 +**점검:** +```bash +# Apache +grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" +# Nginx +grep -i "autoindex" /etc/nginx/nginx.conf +# Tomcat +grep -i "listings" /conf/web.xml +# JEUS +grep -i "allow-indexing" /WEB-INF/jeus-web-dd.xml +# WebtoB +grep -i "Options" /config/http.m | grep -i "Indexes" +``` +**조치:** +```bash +# Apache - httpd.conf 내 모든 디렉터리에서 Indexes 옵션 제거 +vi /conf/httpd.conf +# +# Options -Indexes (Indexes 삭제 또는 -Indexes 설정) +# +systemctl restart apache2 + +# Tomcat - web.xml 내 listings=false 설정 +vi /conf/web.xml +# +# listings +# false +# + +# Nginx - autoindex off 설정 +vi /conf/nginx.conf +# server { autoindex off; } +systemctl restart nginx + +# IIS - IIS 관리자 > 해당 웹사이트 > 디렉터리 검색 > "사용 안 함" 설정 + +# JEUS +vi /WEB-INF/jeus-web-dd.xml +# false + +# WebtoB +vi /config/http.m +# *NODE +# Options = "-Indexes", +wscfl -I http.m && wsdown && wsboot +``` + +### WEB-05: 지정하지 않은 CGI/ISAPI 실행 제한 +**점검:** +```bash +# Apache +grep -i "LoadModule.*cgi" /conf/httpd.conf +grep -i "ExecCGI" /conf/httpd.conf +# Nginx +grep -i "fastcgi_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - CGI 모듈 비활성화 및 ExecCGI 옵션 제거 +vi /conf/httpd.conf +# #LoadModule cgi_module modules/mod_cgi.so +# #LoadModule cgid_module modules/mod_cgid.so +# +# Options -ExecCGI +# +systemctl restart apache2 + +# Tomcat - web.xml 내 CGI 매핑 비활성화(주석 처리) +# + +# Nginx - fastcgi 설정 주석 처리 +# location ~ \.cgi$ { +# #fastcgi_pass :<포트>; +# #include fastcgi_params; +# } + +# IIS - ISAPI 및 CGI 제한 > 사용하지 않는 CGI/ISAPI 모듈 해제 + +# WebtoB - http.m 내 *SVRGROUP, *SERVER, *URI에서 CGI 설정 주석 처리 +``` + +### WEB-06: 상위 디렉터리 접근 제한 설정 +**점검:** +```bash +# Apache +grep -i "AllowOverride" /conf/httpd.conf +# Tomcat +grep -i "allowLinking" /conf/server.xml +# Nginx +grep -i "auth_basic" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - AllowOverride AuthConfig 설정 + .htaccess 인증 파일 생성 +vi /conf/httpd.conf +# +# AllowOverride AuthConfig +# +htpasswd /.htpasswd [사용자명] +systemctl restart apache2 + +# Tomcat - allowLinking 옵션 제거 +vi /conf/server.xml +# (allowLinking="true" 제거) + +# Nginx - 기본 인증으로 디렉터리 접근 제한 +# location /<접근제한 디렉터리>/ { +# auth_basic "Restricted Content"; +# auth_basic_user_file /etc/nginx/.htpasswd; +# } + +# IIS 7.0+ - web.config 내 enableParentPaths="false" 설정 +# + +# WebtoB - UpperDirRestrict = N 설정 +``` + +### WEB-07: 웹 서비스 경로 내 불필요한 파일 제거 +**점검/조치:** +```bash +# Apache +rm -rf /htdocs/manual +rm -rf /manual + +# Tomcat +rm -rf /webapps/docs/<불필요 파일> +# BUILDING.txt, RELEASE-NOTES.txt 등 매뉴얼 파일 포함 + +# Nginx +rm -rf /html/index.html + +# IIS - 샘플 디렉터리 제거 +# c:\inetpub\iissamples +# c:\winnt\help\iishelp +# c:\program files\common files\system\msadc\sample + +# JEUS +rm -rf /docs/manuals/default/web-manager/<불필요 파일> +rm -rf /samples/<불필요 파일> + +# WebtoB +rm -rf /docs/manuals/<불필요 파일> +rm -rf /samples/<불필요 파일> +``` + +### WEB-08: 파일 업로드 및 다운로드 용량 제한 +**점검:** +```bash +# Apache +grep -i "LimitRequestBody" /conf/httpd.conf +# Tomcat +grep -i "maxPostSize" /conf/server.xml +# Nginx +grep -i "client_max_body_size" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - LimitRequestBody 지시자 설정 (5MB = 5000000) +# +# LimitRequestBody 5000000 +# + +# Tomcat - server.xml 내 maxPostSize 설정 + web.xml 내 multipart-config 설정 +# +# +# 2097152 +# 4194304 +# + +# Nginx - client_max_body_size 설정 +# client_max_body_size 5M; +systemctl restart nginx + +# IIS - web.config 내 maxAllowedContentLength 설정 (기본값 30MB) +# applicationHost.config 내 bufferingLimit(4MB) 및 maxRequestEntityAllowed(0.2MB) 설정 + +# JEUS - web.xml 내 max-file-size 설정 +# 5242880 + +# WebtoB - LimitRequestBody 설정 +# LimitRequestBody = 2048000 +``` + +### WEB-09: 웹 서비스 프로세스 권한 제한 +**점검:** +```bash +# 프로세스 실행 계정 확인 +ps -ef | grep httpd | grep -v root +ps -ef | grep nginx +ps -ef | grep tomcat +ps -ef | grep jeus +``` +**조치:** +```bash +# Apache - www-data 계정으로 실행 +vi /envvars +# export APACHE_RUN_USER=www-data +# export APACHE_RUN_GROUP=www-data +chown -R www-data:www-data /etc/apache2/ /var/www/ /var/log/apache2/ +usermod -s /sbin/nologin www-data +systemctl restart apache2 + +# Tomcat - tomcat 전용 계정으로 실행 +vi /etc/systemd/system/tomcat.service +# [Service] +# User=tomcat +# Group=tomcat +chown -R tomcat:tomcat / +usermod -s /sbin/nologin tomcat +systemctl restart tomcat + +# Nginx - nginx 전용 계정으로 실행 +vi /conf/nginx.conf +# user nginx nginx; +adduser --system --no-create-home --shell /bin/false nginx +groupadd nginx && usermod -aG nginx nginx +systemctl restart nginx + +# IIS - 응용프로그램 풀 ID를 ApplicationPoolIdentity로 설정 + +# JEUS - jeus 전용 계정 생성 후 소유권 변경 +useradd -m jeus +chown -R jeus:jeus / +``` + +### WEB-10: 불필요한 프록시 설정 제한 +**점검:** +```bash +# Apache +grep -i "ProxyPass\|ProxyRequests" /conf/httpd.conf +# Tomcat +grep -i "proxyName\|proxyPort" /conf/server.xml +# Nginx +grep -i "proxy_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - 불필요한 Proxy 설정 제거, ProxyRequests Off 유지 +# +# ProxyRequests Off +# + +# Tomcat - Connector 요소에서 불필요한 proxyName, proxyPort 제거 +# Nginx - 불필요한 proxy_pass 설정 제거 +# IIS - 루트 디렉터리에서 불필요한 Proxy 설정 제거 +# JEUS - web.xml 내 불필요한 ReverseProxy 설정 제거 +# WebtoB - http.m 내 REVERSE_PROXY 설정 제거 +``` + +### WEB-11: 웹 서비스 경로 설정 +**조치:** +```bash +# Apache - DocumentRoot를 별도 경로로 변경 +# DocumentRoot [별도의 경로] + +# Tomcat - docBase를 별도 경로로 변경 +# + +# Nginx - root를 별도 경로로 변경 +# root [별도의 경로]; + +# IIS - 사이트 편집 > 실제 경로를 별도 경로로 변경 +# JEUS - Docroot = "[별도의 경로]" +# WebtoB - DOCROOT="[별도의 경로]" +``` + +### WEB-12: 웹 서비스 링크 사용 금지 +**조치:** +```bash +# Apache - FollowSymLinks 옵션 제거 +vi /conf/httpd.conf +# +# Options -FollowSymLinks +# + +# Tomcat - allowLinking 옵션 제거 (기본값: false) +# Nginx - disable_symlinks on 설정 +# location / { disable_symlinks on; } + +# IIS - 홈 디렉터리 내 바로가기 파일 제거 +# JEUS - jeus-web-dd.xml 내 alias 요소 제거 +# WebtoB - http.m 내 ALIAS 절 불필요 설정 제거 +``` + +### WEB-13: 웹 서비스 설정 파일 노출 제한 +**조치:** +```bash +# Tomcat - 불필요한 DB 연결 리소스 설정 제거 후 접근 권한 설정 +chmod 600 /conf/server.xml + +# IIS - 처리기 매핑에서 *.asa/*.asax 항목 제거 +# 요청 필터링에서 "파일 이름 확장명 거부"에 등록 + +# JEUS - domain.xml 내 불필요한 DB 연결 리소스 제거 +chmod 600 /conf/domain.xml +``` + +### WEB-14: 웹 서비스 경로 내 파일의 접근 통제 +**조치:** +```bash +# Apache +chown -R www-data:www-data /conf/apache2.conf +chmod -R 750 /conf/apache2.conf + +# Tomcat +chown -R tomcat:tomcat /conf/web.xml +chmod -R 750 /conf/web.xml + +# Nginx +chown -R nginx:nginx /conf/nginx.conf +chmod -R 750 /conf/nginx.conf + +# IIS - web.config > 속성 > 보안 > 불필요 권한 제거 + +# JEUS +chown -R jeus:jeus /config/security/SYSTEM_DOMAIN/accounts.xml +chmod -R 750 /config/security/SYSTEM_DOMAIN/accounts.xml + +# WebtoB +chown -R webtob:webtob /config/http.m +chmod -R 750 /config/http.m +``` + +### WEB-15: 불필요한 스크립트 매핑 제거 +**점검:** +```bash +# Tomcat - 불필요한 servlet-mapping 확인 +grep -A2 "servlet-mapping" /conf/web.xml +# IIS - 처리기 매핑에서 취약한 확장자 확인 +# (.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +``` +**조치:** +```bash +# Tomcat - 불필요한 servlet-mapping 제거 +# IIS - 처리기 매핑에서 미사용 확장자 매핑 제거 +# JEUS - web.xml 내 불필요한 제거 +``` + +### WEB-16: 웹 서비스 헤더 정보 노출 제한 +**점검:** +```bash +# Apache +grep -i "ServerTokens\|ServerSignature" /conf/httpd.conf +# Nginx +grep -i "server_tokens" /conf/nginx.conf +# WebtoB +grep -i "ServerTokens" /config/http.m +``` +**조치:** +```bash +# Apache - ServerTokens Prod, ServerSignature Off 설정 +vi /conf/httpd.conf +# ServerTokens Prod +# ServerSignature Off + +# Tomcat - server.xml 내 server 값을 임의 정보로 변경 +# +# + ErrorReportValve에 showServerInfo="false" 추가 +# + +# Nginx +# server_tokens off; + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS 7 이전 - JEUSMain.xml 내 command-option 추가 +# -Djeus.servlet.response.header.serverInfo=false +# JEUS 7 - domain.xml 내 response-header 설정 + +# WebtoB +# ServerTokens ProductOnly +# ServerSignature off +``` + +### WEB-17: 웹 서비스 가상 디렉터리 삭제 +**점검/조치:** +```bash +# Apache - 불필요한 Alias 지시자 확인 후 제거 +grep -i "Alias" /conf/httpd.conf + +# Tomcat - Context path 속성값 확인 후 불필요 제거 +grep -i "Context path" /conf/server.xml + +# Nginx - 불필요한 alias 지시자 제거 +grep -i "alias" /conf/nginx.conf + +# WebtoB - NODE절의 불필요한 Alias 설정 삭제 +grep -i "ALIAS" /config/http.m +``` + +### WEB-18: WebDAV 비활성화 +**점검:** +```bash +# Apache +grep -i "Dav On" /conf/httpd.conf +grep -i "LoadModule.*dav" /conf/httpd.conf +# Nginx +grep -i "dav_methods" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - WebDAV 비활성화 +vi /conf/httpd.conf +# +# Dav Off +# +systemctl restart apache2 + +# Nginx - dav_methods 설정 주석 처리 또는 제거 +systemctl restart nginx + +# IIS - ISAPI 및 CGI 제한 > WebDAV 항목 > 확장 경로 실행 허용 체크 해제 + +# WebtoB - VHOST 절에서 PUT, DELETE, MKCOL, COPY, MOVE 메소드 제거 +``` + +--- + +## 3. 보안 설정 + +### WEB-19: SSI(Server Side Includes) 사용 제한 +**점검:** +```bash +# Apache +grep -i "Includes" /conf/httpd.conf +# Tomcat +grep -i "SSIServlet\|SSIFilter" /conf/web.xml +# Nginx +grep -i "ssi on" /conf/nginx.conf +# WebtoB +grep -i "SSI" /config/http.m +``` +**조치:** +```bash +# Apache - Options Includes 제거 +# Options (Includes 삭제) + +# Tomcat - SSI 서블릿/필터 설정 주석 처리 또는 삭제 +# Nginx - ssi off; 설정 +# IIS - 처리기 매핑에서 .shtml, .shtm, .stm 확장자 매핑 제거 +# WebtoB - *SVRGROUP, *SERVER에서 SSI 관련 설정 삭제 +``` + +### WEB-20: SSL/TLS 활성화 +**점검:** +```bash +# Apache +apache2ctl -M | grep ssl +# Nginx +grep -i "ssl_protocols" /conf/nginx.conf +# WebtoB +grep -i "SSLFLAG\|SSLNAME" /config/http.m +``` +**조치:** +```bash +# Apache - SSL 모듈 활성화 및 인증서 설정 +vi /sites-available/default-ssl.conf +# +# SSLEngine on +# SSLCertificateFile /path/to/cert.crt +# SSLCertificateKeyFile /path/to/privkey.key +# +a2ensite default-ssl +systemctl restart apache2 + +# Nginx - SSL 인증서 설정 +# server { +# listen 443 ssl; +# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; +# ssl_protocols TLSv1.2 TLSv1.3; +# ssl_prefer_server_ciphers on; +# } +systemctl restart nginx + +# IIS - SSL 인증서 바인딩 설정 (IIS 관리자 > 사이트 바인딩 > https 추가) + +# WebtoB - http.m 내 SSLFLAG = Y, SSLNAME 설정 +# *SSL 절에 인증서 경로 설정 +# Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3" +``` + +### WEB-21: HTTP 리디렉션 +**조치:** +```bash +# Apache - HTTP → HTTPS 리디렉션 설정 +# +# RewriteEngine On +# RewriteCond %{HTTPS} off +# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# + +# Nginx +# server { +# listen 80; +# return 301 https://$host$request_uri; +# } + +# IIS - 사이트 바인딩 종류를 HTTPS로 설정 + +# WebtoB - URLRewrite = Y 설정 +# RewriteCond %{HTTPS} off +# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +``` + +### WEB-22: 에러 페이지 관리 +**조치:** +```bash +# Apache - 에러 코드별 일원화된 에러 페이지 설정 +vi /sites-available/000-default.conf +# ErrorDocument 400 /error.html +# ErrorDocument 401 /error.html +# ErrorDocument 403 /error.html +# ErrorDocument 404 /error.html +# ErrorDocument 500 /error.html +systemctl restart apache2 + +# Tomcat - web.xml 내 에러 페이지 설정 +# +# 404 +# /error/404.html +# + +# Nginx +# error_page 404 /404.html; +# error_page 500 502 503 504 /50x.html; +# location = /404.html { root html; internal; } + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS - web.xml 내 에러 메시지 설정 +# WebtoB - *ERRORDOCUMENT 절에 에러 페이지 설정 +# 503 status = 503, url = "/503.html" +``` + +### WEB-23: LDAP 알고리즘 적절하게 구성 +**점검:** +```bash +# Tomcat - 비밀번호 다이제스트 알고리즘 확인 +grep 'digest=' /conf/server.xml +``` +**조치:** +```bash +# Tomcat - SHA-256 이상 알고리즘 설정 +vi /conf/server.xml +# digest="SHA-256" +systemctl restart tomcat +``` + +--- + +## 4. 패치 및 로그 관리 + +### WEB-24: 별도의 업로드 경로 사용 및 권한 설정 +**조치:** +```bash +# Apache - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +# apache2.conf 내 업로드 디렉터리 접근 제한 +# +# Require all denied +# + +# Tomcat - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ + +# Nginx - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ + +# IIS - 웹 서비스 외부에 업로드 디렉터리 생성, IIS 구동 계정에 쓰기 권한 부여 + +# JEUS - 업로드 디렉터리 권한 설정 +chmod 750 +chown jeus:jeus + +# WebtoB - 업로드 디렉터리 권한 설정 +chmod 750 +chown tmax:tmax +``` + +### WEB-25: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```bash +# Apache +/bin/httpd -v + +# Tomcat +cd /lib && java -cp catalina.jar org.apache.catalina.util.ServerInfo + +# Nginx +/sbin/nginx -v + +# IIS +reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v VersionString + +# JEUS +jeusadmin -version + +# WebtoB +wscfl -version +``` +**참고 사이트:** +- Apache: http://httpd.apache.org/download.cgi +- Tomcat: https://tomcat.apache.org/ +- Nginx: https://nginx.org/en/download.html +- IIS: https://www.iis.net/downloads/microsoft +- JEUS/WebtoB: https://technet.tmaxsoft.com/ + +### WEB-26: 로그 디렉터리 및 파일 권한 설정 +**점검:** +```bash +# Apache +ls -al / +# Tomcat +ls -al /logs/ +# Nginx +ls -al /var/log/nginx/ +# JEUS +ls -al /domains/jeus_domain/servers/sample/logs/ +# WebtoB +ls -al /log/ +``` +**조치:** +```bash +# Apache +chmod o-rwx /* + +# Tomcat +chmod o-rwx /logs/* + +# Nginx +chmod o-rwx /var/log/nginx/* + +# IIS - C:\Windows\System32\config 속성 > 보안 > Everyone 권한 제거 +# C:\Windows\System32\LogFiles에서도 동일 조치 + +# JEUS - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /domains/jeus_domain/servers/sample/logs +chmod 640 /domains/jeus_domain/servers/sample/logs/* + +# WebtoB - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /log/ +chmod 640 /log/* +``` diff --git a/skills/kesekit-check/scripts/cii/webapp.md b/skills/kesekit-check/scripts/cii/webapp.md new file mode 100644 index 0000000..83e1041 --- /dev/null +++ b/skills/kesekit-check/scripts/cii/webapp.md @@ -0,0 +1,880 @@ +# Web Application 점검 스크립트 + +## 1. SSTI (Server Side Template Injection) +**취약 패턴:** +```python +# Python (Jinja2) - 사용자 입력을 직접 템플릿에 삽입 +template = param # 사용자 입력이 직접 템플릿으로 사용됨 +return render_template_string(template) +``` +**안전한 구현:** +```python +# Python (Jinja2) - 사용자 입력을 템플릿 변수로 전달 +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +``` + +--- + +## 2. SQL Injection (SI) + +### 취약 패턴 +```java +// Java - 문자열 연결 방식 쿼리 (취약) +String sql = "SELECT * FROM users WHERE username = '" + userInput + "'"; +Statement stmt = connection.createStatement(); +ResultSet rs = stmt.executeQuery(sql); +``` + +### 안전한 구현 - PreparedStatement (Java) +```java +// Java - PreparedStatement 사용 +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +ResultSet resultSet = preparedStatement.executeQuery(); +``` + +### 안전한 구현 - ORM (JPA/Hibernate) +```java +// Java - JPQL 파라미터 바인딩 +public class ItemService { + @PersistenceContext + private EntityManager em; + public List findItemsByUserInput(String userInput) { + String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; + Query query = em.createQuery(jpql, Item.class); + query.setParameter("userInput", userInput); + return query.getResultList(); + } +} +``` + +### 안전한 구현 - MyBatis 파라미터 바인딩 +```xml + + + INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) + VALUES (#{num}, #{name}, #{age}, #{grade}) + + + DELETE FROM STUDENTS WHERE NUM = #{num} + +``` + +### 안전한 구현 - SQL 키워드 필터링 (Java) +```java +public static String sanitize(String input) { + if (input == null) return null; + String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; + String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; + Pattern regex = Pattern.compile(pattern + "|--"); + Matcher matcher = regex.matcher(input); + return matcher.replaceAll(" "); +} +``` + +### 안전한 구현 - PreparedStatement (PHP) +```php +// PHP - PDO PreparedStatement +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +``` + +### 안전한 구현 - 예외 처리 +```java +// Java - 적절한 예외 처리 (에러 메시지 노출 방지) +try { + // 데이터베이스 작업 +} catch (SQLException e) { + e.printStackTrace(); // 로그에만 기록 + System.out.println("An error occurred. Please try again later."); // 사용자에게 일반 메시지 +} +``` +```php +// PHP - PDO 예외 처리 +try { + // 데이터베이스 작업 +} catch (PDOException $e) { + error_log($e->getMessage()); + echo 'SQL Exception'; // 상세 에러 노출 금지 +} +``` + +### 특수문자 필터링 대상 +| 문자 | 설명 | +|------|------| +| `'` | 문자 데이터 구분 기호 | +| `;` | 쿼리 구분 기호 | +| `--`, `#` | 라인 주석 구분 기호 | +| `/* */` | 블록 주석 | + +--- + +## 3. 디렉터리 인덱싱 (DI) +**조치:** +```apache +# Apache - Indexes 옵션 제거 + + Options FollowSymLinks # Indexes 제거 + +``` +```xml + + + listings + false + +``` +```nginx +# Nginx +server { + location / { + autoindex off; + } +} +``` + +--- + +## 4. 에러 페이지 적용 미흡 (EP) +**조치:** +```apache +# Apache - 서버 정보 노출 제거 및 사용자 에러 페이지 정의 +ServerTokens Prod +ServerSignature Off +ErrorDocument 404 /main/error.html +ErrorDocument 405 /main/error.html +``` +```xml + + + + +``` +```xml + + + 404 + /errors/404 + + + 500 + /errors/500 + + + java.lang.Exception + /errors/500 + +``` +```nginx +# Nginx - 서버 정보 제거 및 사용자 에러 페이지 +http { + server_tokens off; +} +server { + error_page 400 401 402 405 /custom_4xx.html; + error_page 404 /custom_404.html; + error_page 500 502 503 504 /custom_5xx.html; + location = /custom_404.html { root /var/www/html; internal; } + location = /custom_4xx.html { root /var/www/html; internal; } + location = /custom_5xx.html { root /var/www/html; internal; } +} +``` + +--- + +## 5. 정보 누출 (IL) +**조치 항목:** +1. robots.txt, web.config, nginx.conf로 검색 차단 디렉터리/확장자 지정 +2. 백업 파일 삭제 (*.bak, *.backup, *.org, *.old, *.zip, *.log, *.sql, *.tmp, *.temp) +3. 초기 페이지/디렉터리/배너 삭제 +4. 개인정보 마스킹 처리 (홍\*동, 901231-1\*\*\*\*\*\*, 010-1234-\*\*\*\* 등) +5. 개발 중 주석/디버그 정보 제거 + +--- + +## 6. 크로스사이트 스크립트 - XSS (XS) + +### 취약 패턴 +```javascript +// JavaScript - innerHTML 사용 (취약) +document.getElementById('output').innerHTML = userInput; +// document.write(userInput); // 취약 +``` + +### 안전한 구현 - HTML Entity 변환 (Java) +```java +public static String sanitizeInput(String input) { + if (input == null) return null; + return input.replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll("\"", """) + .replaceAll("'", "'"); +} +``` + +### 안전한 구현 - HTML Entity 변환 (PHP) +```php +function escapeHtml($input) { + return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { + $escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); + $additionalEscapes = [ + '\\' => '\', + '(' => '(', + ')' => ')', + '#' => '#' + ]; + return strtr($escaped, $additionalEscapes); +} +``` + +### 특수문자 필터링 대상 +| 변경 전 | 변경 후 | +|---------|---------| +| `<` | `<` | +| `>` | `>` | +| `"` | `"` | +| `(` | `(` | +| `)` | `)` | +| `#` | `#` | +| `&` | `&` | + +### 쿠키 보안 설정 +``` +Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict +``` + +--- + +## 7. 크로스사이트 요청 위조 - CSRF (CF) + +### 안전한 구현 - CSRF Token (Java/Spring) +```java +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + String csrfToken = generateCsrfToken(); + session.setAttribute("csrfToken", csrfToken); + model.addAttribute("csrfToken", csrfToken); + return "index"; +} + +// CSRF Token 생성 함수 +private String generateCsrfToken() { + SecureRandom secureRandom = new SecureRandom(); + byte[] token = new byte[16]; + secureRandom.nextBytes(token); + return Base64.getUrlEncoder().encodeToString(token); +} + +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, + @RequestParam("csrfToken") String csrfToken, + HttpServletRequest request, Model model) { + HttpSession session = request.getSession(); + String sessionToken = (String) session.getAttribute("csrfToken"); + if (sessionToken == null || !sessionToken.equals(csrfToken)) { + throw new IllegalStateException("Invalid CSRF token"); + } + String sanitizedInput = sanitizeInput(input); + inputs.add(sanitizedInput); + return "index"; +} +``` + +### HTML 폼에 CSRF Token 포함 +```html +
+ + + + +
+``` + +### 추가 방어 조치 +1. Referer/Origin 헤더 검증으로 외부 도메인 요청 차단 +2. SameSite 쿠키 옵션 적용 +3. HTTPS 환경에서 Secure, HttpOnly 속성 적용 + +--- + +## 8. 서버사이드 요청 위조 - SSRF (SF) + +### 안전한 구현 - URL 화이트리스트 (Java) +```java +private final List allowedDomains = Arrays.asList("example.com"); +private final Map> allowedIPsAndPorts = new HashMap<>(); + +public UrlValidator() { + allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); + allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} + +public boolean isUrlAllowed(String urlString) { + try { + URL url = new URL(urlString); + String protocol = url.getProtocol(); + // HTTP와 HTTPS만 허용 + if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { + return false; + } + String host = url.getHost(); + int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); + if (allowedDomains.contains(host)) return true; + if (allowedIPsAndPorts.containsKey(host)) { + return allowedIPsAndPorts.get(host).contains(port); + } + return false; + } catch (Exception e) { + return false; + } +} +``` + +### 안전한 구현 - URL 화이트리스트 (PHP) +```php +function isUrlAllowed($url) { + $allowedDomains = ['example.com', 'api.example.com']; + $allowedIPsAndPorts = [ + '192.168.10.10' => [80, 443, 8000], + '10.0.0.1' => [80, 443] + ]; + $parsedUrl = parse_url($url); + if (!$parsedUrl || !isset($parsedUrl['host'])) return false; + + $host = $parsedUrl['host']; + $port = isset($parsedUrl['port']) ? $parsedUrl['port'] + : ($parsedUrl['scheme'] === 'https' ? 443 : 80); + if (in_array($host, $allowedDomains, true)) return true; + if (filter_var($host, FILTER_VALIDATE_IP)) { + if (array_key_exists($host, $allowedIPsAndPorts)) { + return in_array($port, $allowedIPsAndPorts[$host], true); + } + } + return false; +} +``` + +### PHP 설정 강화 +```ini +; php.ini - 원격 URL 접근 차단 +allow_url_fopen=Off +allow_url_include=Off +``` + +### 추가 방어 조치 +1. 내부 네트워크 대역 및 관리용 포트 요청 차단 +2. http, https 외 프로토콜(file://, gopher://, data://) 차단 +3. 에러 발생 시 응답값 노출 금지 +4. 애플리케이션 서버와 내부 시스템 간 네트워크 분리 + +--- + +## 9. 약한 비밀번호 정책 (BF) +**비밀번호 복잡성 검증 (JavaScript):** +```javascript +function isPasswordStrong(password) { + const minLength = 8; + const hasUpperCase = /[A-Z]/.test(password); + const hasLowerCase = /[a-z]/.test(password); + const hasNumber = /[0-9]/.test(password); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); + return password.length >= minLength + && hasUpperCase && hasLowerCase + && hasNumber && hasSpecialChar; +} +``` +**취약 ID 예시:** admin, administrator, manager, guest, tomcat, root, user +**취약 비밀번호 예시:** abcd, 1234, 1111, test, password, public, 빈 비밀번호, ID와 동일 + +--- + +## 10. 불충분한 인증 절차 (IA) + +### 안전한 구현 - 재인증 로직 (Java) +```java +// 중요 페이지 접근 시 세션 기반 인증 검증 +public String editProfile(HttpSession session, Model model) { + User user = (User) session.getAttribute("user"); + Boolean isVerified = (Boolean) session.getAttribute("isVerified"); + if (user == null || isVerified == null || !isVerified) { + return "redirect:/user/authenticate"; + } + model.addAttribute("user", user); + return "edit_profile"; +} + +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { + if (input.equals(code)) { + session.setAttribute("isVerified", true); + return "redirect:/user/edit_profile"; + } else { + return "redirect:/user/authenticate?error=true"; + } +} +``` + +### 안전한 구현 - 접근 통제 공통 모듈 (Java) +```java +public class AccessControl { + public static boolean isAuthenticated(HttpSession session) { + return session.getAttribute("user") != null; + } + public static boolean isVerified(HttpSession session) { + return Boolean.TRUE.equals(session.getAttribute("isVerified")); + } +} +``` + +--- + +## 11. 불충분한 권한 검증 (IN) + +### 안전한 구현 - 서버 사이드 세션 검증 (Java) +```java +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { + User currentUser = (User) session.getAttribute("currentUser"); + if (currentUser == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); + } + Inquiry inquiry = inquiryService.findInquiryById(id); + if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); + } + model.addAttribute("inquiry", inquiry); + return "inquiry_detail"; +} +``` + +--- + +## 12. 취약한 비밀번호 복구 절차 (PR) + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (Java) +```java +private static final String CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +private static final int PASSWORD_LENGTH = 12; + +private String generateTemporaryPassword() { + SecureRandom secureRandom = new SecureRandom(); + StringBuilder password = new StringBuilder(PASSWORD_LENGTH); + for (int i = 0; i < PASSWORD_LENGTH; i++) { + int randomIndex = secureRandom.nextInt(CHARACTERS.length()); + password.append(CHARACTERS.charAt(randomIndex)); + } + return password.toString(); +} +``` + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (PHP) +```php +function generateRandomPassword($length = 12) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; + $charactersLength = strlen($characters); + $randomPassword = ''; + for ($i = 0; $i < $length; $i++) { + $randomPassword .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomPassword; +} +``` + +--- + +## 13. 프로세스 검증 누락 (PV) + +### 안전한 구현 - 세션 기반 접근 통제 (Java/Spring) +```java +// 인터셉터 설정 - 비공개/공개 페이지 구분 +public class SessionConfig implements WebMvcConfigurer { + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SessionInterceptor()) + .addPathPatterns("/home", "/board/**") + .excludePathPatterns("/login", "/register", "/error"); + } +} + +public class SessionInterceptor implements HandlerInterceptor { + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + return true; + } +} +``` + +### 안전한 구현 - 플로우 제어 (PHP) +```php +session_start(); +if ($step_completed) { + $_SESSION['step1_completed'] = true; + header('Location: step2.php'); + exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { + header('Location: step1.php'); // 1단계 미완료 시 리다이렉트 + exit; +} +``` + +--- + +## 14. 악성 파일 업로드 (FU) + +### 안전한 구현 - 파일 업로드 보안 (Java) +```java +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of( + "image/jpeg", "image/png", "application/pdf", "text/plain"); + +// 파일명 정규화 +private static String normalizeFilename(String filename) { + if (filename == null) return null; + String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); + name = Normalizer.normalize(name, Normalizer.Form.NFC); + name = name.replace("\0", ""); + name = name.replaceAll("[<>:\"/\\\\|?*]", ""); + name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); + return name; +} + +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { + String safe = normalizeFilename(filename); + int dotCount = safe.length() - safe.replace(".", "").length(); + if (dotCount != 1) return ""; // 이중 확장자 차단 + int idx = safe.lastIndexOf('.'); + return (idx == -1) ? "" : safe.substring(idx + 1).toLowerCase(); +} + +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { + String original = file.getOriginalFilename(); + String ext = getExtension(original); + if (!Arrays.asList(ALLOWED_EXTENSIONS).contains(ext)) { + throw new IOException("허용되지 않은 확장자"); + } + // MIME 시그니처 검증 + Tika tika = new Tika(); + String mime = tika.detect(file.getInputStream()); + if (!ALLOWED_MIME.contains(mime)) { + throw new IOException("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; + Path savePath = Paths.get(uploadDir, newName); + file.transferTo(savePath.toFile()); + return newName; +} +``` + +### 안전한 구현 - 파일 업로드 보안 (PHP) +```php +function normalize_filename($filename) { + $filename = urldecode($filename); + $filename = normalizer_normalize($filename, Normalizer::FORM_C); + $filename = str_replace("\0", "", $filename); + $filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); + $filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); + return $filename; +} + +function is_valid_extension($filename, $allowed_exts) { + $safe = normalize_filename($filename); + if (substr_count($safe, '.') !== 1) return false; // 이중 확장자 차단 + $ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); + return in_array($ext, $allowed_exts, true); +} + +function save_upload($file, $uploadDir) { + $allowed_exts = ['jpg', 'jpeg', 'png', 'pdf', 'txt']; + $allowed_mime = ['image/jpeg', 'image/png', 'application/pdf', 'text/plain']; + + if (!is_valid_extension($file['name'], $allowed_exts)) { + throw new Exception("허용되지 않은 확장자"); + } + $mime = mime_content_type($file['tmp_name']); + if (!in_array($mime, $allowed_mime, true)) { + throw new Exception("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $newName = bin2hex(random_bytes(16)) . '.' . $ext; + $dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; + if (!move_uploaded_file($file['tmp_name'], $dest)) { + throw new Exception("파일 저장 실패"); + } + return $newName; +} +``` + +### 핵심 보안 조치 +1. 확장자 화이트리스트 검증 + MIME 타입 검증 +2. 파일명 난수화 (UUID 등) +3. 업로드 경로를 웹 디렉터리 외부에 배치 +4. 업로드된 파일의 실행 권한 제거 + +--- + +## 15. 파일 다운로드 (FD) + +### 안전한 구현 - 파일명 검증 (Java) +```java +public class FileDownloadUtil { + // 파일명에 영문, 숫자, 일부 특수문자만 허용 + public static boolean isValidFileName(String fileName) { + return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); + } + + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "png"); + + public static boolean isAllowedExtension(String filePath) { + String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + return ALLOWED_EXTENSIONS.contains(extension); + } +} + +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename) throws IOException { + if (!FileDownloadUtil.isValidFileName(filename) + || !FileDownloadUtil.isAllowedExtension(filename)) { + return ResponseEntity.badRequest().build(); + } + // ... 다운로드 로직 +} +``` + +### 안전한 구현 - 경로 정규화 (PHP) +```php +if (isset($_GET['file'])) { + $file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); + $filePath = realpath('../uploads/' . $file); // 경로 정규화 + // 파일 경로가 지정된 디렉터리 내에 있는지 확인 + if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { + downloadFile($filePath); + } else { + echo "잘못된 파일 경로입니다."; + exit; + } +} +``` + +### 우회 공격 대응 +| 인코딩 방식 | 예시 | +|-------------|------| +| URL 인코딩 | `.(%2e)`, `/(%2f)`, `\(%5c)` | +| 더블 URL 인코딩 | `.(%252e)`, `/(%252f)` | +| 16bit 유니코드 | `.(%u002e)`, `/(%u2215)` | +| 특수문자 중첩 | `....//` → `../` | +| 종단 문자 추가 | `[파일명]%00.jpg` | + +--- + +## 16. 불충분한 세션 관리 (IS) + +### 안전한 구현 - 세션 고정 방지 (Java/Spring) +```java +@RequestMapping("/login") +public String login(HttpServletRequest request) { + request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 + return "redirect:/home"; +} + +// Spring Security 설정 +@Override +protected void configure(HttpSecurity http) throws Exception { + http.sessionManagement() + .sessionFixation().migrateSession() + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(1).maxSessionsPreventsLogin(false) + .expiredUrl("/login?expired"); +} +``` + +### 세션 만료 시간 설정 +```xml + + + 60 + +``` +```properties +# Spring Boot application.properties +server.servlet.session.timeout=60m +``` +```php +// PHP - 세션 재생성 및 만료 설정 +session_start(); +session_regenerate_id(true); // 예측 불가능한 세션 ID 생성 +ini_set('session.gc_maxlifetime', 3600); // 60분 +ini_set('session.cookie_lifetime', 3600); +``` + +### JWT 보안 설정 +| 안전한 알고리즘 | 설명 | +|----------------|------| +| HS256~512 | 비밀 키 기반 HMAC 해시 | +| RS256~512 | 비대칭 키 RSA 서명 | +| ES256~512 | 타원 곡선 암호화 서명 | + +| 취약한 알고리즘 | 설명 | +|----------------|------| +| HS1, RS1 | SHA-1 기반 (취약) | +| none | 서명 생략 (위험) | +| plaintext | 평문 서명 (위험) | + +--- + +## 17. 데이터 평문 전송 (SN) +**조치:** +```apache +# Apache - TLSv1.2 이상 사용, SSLv2/v3 비활성화 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +``` +``` +# IIS - 레지스트리에서 SSL 2.0, 3.0 비활성화 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] +"Enabled"=dword:00000000 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] +"Enabled"=dword:00000000 +``` + +--- + +## 18. 쿠키 변조 (CC) + +### 안전한 구현 - AES + HMAC 쿠키 (Java) +```java +public class CookieUtil { + private static final int IV_LEN = 16, HMAC_LEN = 32; + private final byte[] encKey; // AES-256 키 (32 bytes) + private final byte[] hmacKey; // HMAC 키 + + // 보안 쿠키 생성 + public void addSecureCookie(HttpServletResponse resp, String name, + String plaintext, int maxAgeSec) throws Exception { + byte[] iv = new byte[IV_LEN]; + new SecureRandom().nextBytes(iv); + + // AES-256-CBC 암호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, + new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // HMAC 생성 + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); + mac.update(iv); + mac.update(ciphertext); + byte[] hmac = mac.doFinal(); + + // payload = IV + HMAC + 암호문 + byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; + System.arraycopy(iv, 0, payload, 0, iv.length); + System.arraycopy(hmac, 0, payload, iv.length, hmac.length); + System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); + + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); + + // HttpOnly, Secure, SameSite 속성 설정 + String header = String.format( + "%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", + name, encoded, maxAgeSec); + resp.addHeader("Set-Cookie", header); + } +} +``` + +--- + +## 19. 관리자 페이지 노출 (AE) +**조치:** +1. 유추하기 어려운 URL 및 포트로 관리자 페이지 변경 +2. 지정된 IP만 관리자 페이지 접근 허용 +3. 관리자 로그인 시 2차 인증(OTP, VPN, 인증서) 적용 +4. 하위 페이지별 세션 검증 구현 + +--- + +## 20. 자동화 공격 (CC) +**조치:** +1. 로그인 시도, 게시글 등록, SMS 발송 등에 횟수 제한 설정 +2. CAPTCHA 등 일회성 확인 로직 구현 +3. IDS/IPS 시스템으로 대량 패킷 감지 및 차단 +4. 로그인 실패 3~5회 초과 시 계정 잠금 로직 구현 + +--- + +## 21. 불필요한 Method 악용 (WM) + +### 조치 - Apache +```bash +# WebDAV 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs + +# 불필요한 메소드 제한 +# /etc/apache2/apache2.conf + + Dav Off + + Order Allow,Deny + Deny from all + + + +# TRACE 메소드 비활성화 +TraceEnable Off + +# CONNECT 메소드 비활성화 (mod_rewrite) + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} ^CONNECT + RewriteRule .* - [F] + +``` + +### 조치 - Tomcat +```xml + + + readonly + true + + + + +``` + +### 조치 - Nginx +```nginx +# WebDAV 비활성화 - dav_methods 지시어 삭제 +# Nginx는 0.5.17 이후 TRACE를 405로 거부 +# CONNECT 메소드는 기본적으로 미지원 +``` + +### 조치 - IIS +``` +# IIS 6.0 이상: 요청 필터링 > HTTP 동사 > 동사 거부에 TRACE 추가 +# WebDAV 기능 비활성화 확인 +``` diff --git a/skills/kesekit-check/scripts/cii/windows.md b/skills/kesekit-check/scripts/cii/windows.md new file mode 100644 index 0000000..e2970e3 --- /dev/null +++ b/skills/kesekit-check/scripts/cii/windows.md @@ -0,0 +1,1489 @@ +# Windows 서버 취약점 점검/조치 스크립트 +> KISA 주요정보통신기반시설 기술적 취약점 분석평가 가이드 (W-01 ~ W-64) + +--- + +## 1. 계정 관리 + +### W-01: Administrator 계정 이름 변경 등 보안성 강화 (상) +**점검:** +```powershell +# Administrator(SID-500) 계정명 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select-Object Name, Enabled, SID + +# 로컬 보안 정책에서 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "NewAdministratorName" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# Administrator 계정명을 유추 불가능한 이름으로 변경 +Rename-LocalUser -Name "Administrator" -NewName "yourCustomAdmin" + +# 또는 wmic 사용 +wmic useraccount where "SID like '%-500'" rename "yourCustomAdmin" + +# GPO 방식: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: Administrator 계정 이름 바꾸기" 설정 +``` + +--- + +### W-02: Guest 계정 비활성화 (상) +**점검:** +```powershell +# Guest 계정 활성화 여부 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled + +# net 명령으로 확인 +net user Guest +``` +**조치:** +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" + +# 또는 net 명령 +net user Guest /active:no +``` + +--- + +### W-03: 불필요한 계정 제거 (상) +**점검:** +```powershell +# 전체 로컬 사용자 계정 목록 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Format-Table + +# 장기 미사용 계정 확인 (90일 이상 미로그인) +Get-LocalUser | Where-Object { + $_.Enabled -eq $true -and + $_.LastLogon -lt (Get-Date).AddDays(-90) +} | Select-Object Name, LastLogon +``` +**조치:** +```powershell +# 불필요한 계정 비활성화 +Disable-LocalUser -Name "<불필요한계정명>" + +# 불필요한 계정 삭제 +Remove-LocalUser -Name "<불필요한계정명>" +``` + +--- + +### W-04: 계정 잠금 임계값 설정 (상) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts + +# 상세 확인 (secedit) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutBadCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 임계값 5회로 설정 +net accounts /lockoutthreshold:5 + +# GPO 방식: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 임계값" = 5 +``` + +--- + +### W-05: 해독 가능한 암호화를 사용하여 암호 저장 해제 (상) +**점검:** +```powershell +# 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ClearTextPassword" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "해독 가능한 암호화를 사용하여 암호 저장" = 사용 안 함 +# secedit 인라인 설정 +secedit /export /cfg C:\secpol_tmp.cfg +(Get-Content C:\secpol_tmp.cfg) -replace "ClearTextPassword = 1","ClearTextPassword = 0" | Set-Content C:\secpol_tmp.cfg +secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol_tmp.cfg /areas SECURITYPOLICY +Remove-Item C:\secpol_tmp.cfg -Force +``` + +--- + +### W-06: 관리자 그룹에 최소한의 사용자 포함 (상) +**점검:** +```powershell +# Administrators 그룹 구성원 확인 +Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource + +# net 명령 +net localgroup Administrators +``` +**조치:** +```powershell +# 불필요한 계정을 Administrators 그룹에서 제거 +Remove-LocalGroupMember -Group "Administrators" -Member "<불필요한계정>" + +# 관리 업무용 계정과 일반 업무용 계정을 분리하여 운용 +``` + +--- + +### W-07: Everyone 사용 권한을 익명 사용자에 적용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous +# 값이 0이면 양호 + +# 로컬 보안 정책 내보내기로 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "EveryoneIncludesAnonymous" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: Everyone 사용 권한을 익명 사용자에게 적용" = 사용 안 함 +``` + +--- + +### W-08: 계정 잠금 기간 설정 (중) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts +# "잠금 기간(분)"과 "잠금 관찰 창(분)" 확인 + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutDuration|ResetLockoutCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 기간 60분, 잠금 수 원래대로 설정 기간 60분 +net accounts /lockoutduration:60 +net accounts /lockoutwindow:60 + +# GPO: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 기간" = 60분 +# "다음 시간 후 계정 잠금 수를 원래대로 설정" = 60분 +``` + +--- + +### W-09: 비밀번호 관리 정책 설정 (상) +**점검:** +```powershell +# 암호 정책 확인 +net accounts + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MinimumPasswordLength|PasswordComplexity|MaximumPasswordAge|MinimumPasswordAge|PasswordHistorySize" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 암호 정책 설정 +net accounts /minpwlen:8 /maxpwage:90 /minpwage:1 /uniquepw:4 + +# GPO: 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "암호는 복잡성을 만족해야 함" = 사용 +# "최소 암호 길이" = 8문자 +# "최대 암호 사용 기간" = 90일 +# "최소 암호 사용 기간" = 1일 +# "최근 암호 기억" = 4개 암호 기억됨 +``` + +--- + +### W-10: 마지막 사용자 이름 표시 안 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 마지막 사용자 이름 표시 안 함" = 사용 +``` + +--- + +### W-11: 로컬 로그온 허용 (중) +**점검:** +```powershell +# 로컬 로그온 허용 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeInteractiveLogonRight" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force + +# Administrators, IUSR_ 외 다른 계정이 있으면 취약 +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "로컬 로그온 허용" 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹 제거 + +# ntrights 유틸리티 사용 (Windows Resource Kit) +# ntrights -u "<제거할계정>" -r SeInteractiveLogonRight +``` + +--- + +### W-12: 익명 SID/이름 변환 허용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 (Windows 2003 이상) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LSAAnonymousNameLookup" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: 익명 SID/이름 변환 허용" = 사용 안 함 +``` + +--- + +### W-13: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한" = 사용 +``` + +--- + +### W-14: 원격터미널 접속 가능한 사용자 그룹 제한 (중) +**점검:** +```powershell +# Remote Desktop Users 그룹 구성원 확인 +Get-LocalGroupMember -Group "Remote Desktop Users" | Select-Object Name, ObjectClass + +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +# 0이면 원격 데스크톱 허용 상태 +``` +**조치:** +```powershell +# 관리자 외 별도 원격 접속 계정 생성 +New-LocalUser -Name "rdpUser" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -FullName "RDP 전용 사용자" +Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpUser" + +# 불필요한 계정 제거 +Remove-LocalGroupMember -Group "Remote Desktop Users" -Member "<불필요한계정>" +``` + +--- + +## 2. 서비스 관리 + +### W-15: 사용자 개인키 사용 시 암호 입력 (상) +**점검:** +```powershell +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ForceKeyProtection" C:\secpol_tmp.cfg +# 값이 2이면 양호 (키를 사용할 때마다 암호 입력) +Remove-Item C:\secpol_tmp.cfg -Force + +# 레지스트리 직접 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection +``` +**조치:** +```powershell +# 레지스트리 설정 (2 = 키를 사용할 때마다 암호 매번 입력) +reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection /t REG_DWORD /d 2 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용" +# = "키를 사용할 때마다 암호를 매 번 입력해야 함" +``` + +--- + +### W-16: 공유 권한 및 사용자 그룹 설정 (상) +**점검:** +```powershell +# 공유 폴더 목록 확인 +Get-SmbShare | Select-Object Name, Path, Description | Format-Table + +# 공유 폴더 권한에서 Everyone 확인 +Get-SmbShare | ForEach-Object { + $share = $_.Name + Get-SmbShareAccess -Name $share | Where-Object { $_.AccountName -like "*Everyone*" } | + Select-Object @{N='Share';E={$share}}, AccountName, AccessControlType, AccessRight +} +``` +**조치:** +```powershell +# 공유 폴더에서 Everyone 권한 제거 +Revoke-SmbShareAccess -Name "<공유명>" -AccountName "Everyone" -Force + +# 필요한 계정에 적절한 권한 추가 +Grant-SmbShareAccess -Name "<공유명>" -AccountName "<계정명>" -AccessRight Read -Force +``` + +--- + +### W-17: 하드디스크 기본 공유 제거 (상) +**점검:** +```powershell +# 기본 공유 확인 +net share +Get-SmbShare | Where-Object { $_.Name -match '^\w\$|^ADMIN\$' } | Select-Object Name, Path + +# AutoShareServer 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks 2>$null +``` +**조치:** +```powershell +# 기본 공유 중지 +net share C$ /delete +net share D$ /delete +net share ADMIN$ /delete + +# 재부팅 후 재생성 방지 (레지스트리) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-18: 불필요한 서비스 제거 (상) +**점검:** +```powershell +# 실행 중인 서비스 목록 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType | Format-Table + +# 불필요한 서비스 존재 여부 확인 +$unnecessaryServices = @("Alerter","ClipSrv","Browser","CryptSvc","DHCPClient", + "TrkWks","TrkSvr","ERSvc","HidServ","IMAPICD","Messenger","mnmsrvc", + "WmdmPmSN","Spooler","RemoteRegistry","simptcp","upnphost","WZCSVC") +Get-Service | Where-Object { $unnecessaryServices -contains $_.Name -and $_.Status -eq "Running" } | + Select-Object Name, DisplayName, Status +``` +**조치:** +```powershell +# 불필요한 서비스 중지 및 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 예시: Remote Registry 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled + +# 예시: Print Spooler 비활성화 (프린터 미사용 시) +Stop-Service -Name "Spooler" -Force +Set-Service -Name "Spooler" -StartupType Disabled +``` + +--- + +### W-19: 불필요한 IIS 서비스 구동 점검 (상) +**점검:** +```powershell +# IIS 서비스 상태 확인 +Get-Service -Name "W3SVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "IISADMIN" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# IIS 설치 여부 +Get-WindowsFeature -Name Web-Server 2>$null | Select-Object Name, Installed +``` +**조치:** +```powershell +# IIS 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "W3SVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "W3SVC" -StartupType Disabled -ErrorAction SilentlyContinue +Stop-Service -Name "IISADMIN" -Force -ErrorAction SilentlyContinue +Set-Service -Name "IISADMIN" -StartupType Disabled -ErrorAction SilentlyContinue + +# IIS 기능 제거 +Uninstall-WindowsFeature -Name Web-Server +``` + +--- + +### W-20: NetBIOS 바인딩 서비스 구동 점검 (상) +**점검:** +```powershell +# NetBIOS over TCP/IP 설정 확인 +Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | + Select-Object Description, TcpipNetbiosOptions +# TcpipNetbiosOptions: 0=DHCP기본, 1=사용, 2=사용안함 + +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces" /s /v NetbiosOptions +``` +**조치:** +```powershell +# NetBIOS over TCP/IP 비활성화 (WMI) +$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" +foreach ($adapter in $adapters) { + $adapter.SetTcpipNetbios(2) # 2 = NetBIOS 사용 안 함 +} + +# GUI: 네트워크 연결 > 속성 > TCP/IPv4 > 고급 > WINS 탭 +# "NetBIOS over TCP/IP 사용 안 함" 선택 +``` + +--- + +### W-21: 암호화되지 않는 FTP 서비스 비활성화 (상) +**점검:** +```powershell +# FTP 서비스 상태 확인 +Get-Service -Name "FTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "MSFTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# FTP 서비스 중지 및 비활성화 +Stop-Service -Name "FTPSVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "FTPSVC" -StartupType Disabled -ErrorAction SilentlyContinue + +# SFTP 또는 FTPS 대안 사용 권장 +``` + +--- + +### W-22: FTP 디렉토리 접근권한 설정 (상) +**점검:** +```powershell +# FTP 홈 디렉터리 경로 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/sites/site" -PSPath "IIS:\" -ErrorAction SilentlyContinue + +# FTP 홈 디렉터리 권한 확인 +icacls "C:\inetpub\ftproot" 2>$null +# Everyone 권한이 있으면 취약 +``` +**조치:** +```powershell +# FTP 홈 디렉터리에서 Everyone 권한 제거 +icacls "C:\inetpub\ftproot" /remove Everyone /T + +# 필요한 사용자에게만 권한 부여 +icacls "C:\inetpub\ftproot" /grant "ftpUser:(OI)(CI)RX" +``` + +--- + +### W-23: 공유 서비스에 대한 익명 접근 제한 설정 (상) +**점검:** +```powershell +# FTP 익명 인증 설정 확인 (IIS) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS FTP 익명 인증 비활성화 +Import-Module WebAdministration +Set-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -Value $false + +# 또는 IIS 관리자에서: +# FTP 사이트 > FTP 인증 > 익명 인증 = 사용 안 함 +``` + +--- + +### W-24: FTP 접근 제어 설정 (상) +**점검:** +```powershell +# IIS FTP IP 제한 설정 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/security/ipSecurity" -PSPath "IIS:\Sites\Default FTP Site" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS 관리자에서 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +# 1) 허용 항목 추가 (접속 허용 IP) +# 2) 기능 설정 편집 > 지정되지 않은 클라이언트 액세스 = 거부 + +# PowerShell (IIS 모듈) +Import-Module WebAdministration +# 특정 IP 허용 추가 +Add-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/ipSecurity" -Name "." -Value @{ipAddress="192.168.1.100";allowed="true"} +``` + +--- + +### W-25: DNS Zone Transfer 설정 (상) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 영역 전송 설정 확인 (DNS 서버 설치 시) +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, ZoneType +Get-DnsServerZone -ErrorAction SilentlyContinue | ForEach-Object { + Get-DnsServerZoneTransferPolicy -ZoneName $_.ZoneName -ErrorAction SilentlyContinue +} +``` +**조치:** +```powershell +# DNS 영역 전송을 특정 서버로만 제한 +# dnscmd /zoneresetsecondaries <영역이름> /securens +Set-DnsServerPrimaryZone -Name "<영역이름>" -SecureSecondaries TransferToSecureServers -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-26: RDS(Remote Data Services) 제거 (상) +**점검:** +```powershell +# MSADC 가상 디렉터리 존재 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch" 2>$null +``` +**조치:** +```powershell +# MSADC 가상 디렉터리 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 키 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\RDSServer.DataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\AdvancedDataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\VbBusObj.VbBusObjCls" /f 2>$null + +# 참고: Windows 2008 이상은 해당 없음 +``` + +--- + +### W-27: 최신 Windows OS Build 버전 적용 (상) +**점검:** +```powershell +# Windows 빌드 버전 확인 +[System.Environment]::OSVersion.Version +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").UBR + +# winver 실행 +winver + +# systeminfo로 상세 정보 +systeminfo | Select-String "OS 이름|OS 버전|OS Name|OS Version" +``` +**조치:** +```powershell +# Windows Update 확인 및 설치 +# 자동 업데이트: +# 제어판 > Windows Update + +# PowerShell로 업데이트 확인 (PSWindowsUpdate 모듈) +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot + +# 수동 패치: https://msrc.microsoft.com/update-guide +``` + +--- + +### W-28: 터미널 서비스 암호화 수준 설정 (중) +**점검:** +```powershell +# RDP 암호화 수준 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel +# 2=중간(클라이언트 호환 가능), 3=높음, 4=FIPS + +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MinEncryptionLevel 2>$null +``` +**조치:** +```powershell +# 레지스트리에서 암호화 수준 설정 (2 이상) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 3 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 보안 +# "클라이언트 연결 암호화 수준 설정" = 사용 (높음) +``` + +--- + +### W-29: 불필요한 SNMP 서비스 구동 점검 (중) +**점검:** +```powershell +# SNMP 서비스 상태 확인 +Get-Service -Name "SNMP" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# SNMP 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "SNMP" -Force -ErrorAction SilentlyContinue +Set-Service -Name "SNMP" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-30: SNMP Community String 복잡성 설정 (중) +**점검:** +```powershell +# SNMP Community String 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" 2>$null +# public, private이 있으면 취약 +``` +**조치:** +```powershell +# 기본 Community String 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v public /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v private /f 2>$null + +# 복잡한 Community String 추가 (읽기전용 = 4) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v "C0mpl3x$tr1ng!" /t REG_DWORD /d 4 /f + +# SNMP 서비스 재시작 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-31: SNMP Access Control 설정 (중) +**점검:** +```powershell +# SNMP 허용 호스트 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" 2>$null +# 값이 없으면 모든 호스트 허용 (취약) +``` +**조치:** +```powershell +# 특정 호스트로부터만 SNMP 패킷 수신 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d "192.168.1.100" /f + +# GUI: 서비스 > SNMP Service > 속성 > 보안 탭 +# "다음 호스트로부터 SNMP 패킷 받아들이기" 선택 후 호스트 등록 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-32: DNS 서비스 구동 점검 (중) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 동적 업데이트 설정 확인 +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, DynamicUpdate +``` +**조치:** +```powershell +# DNS 동적 업데이트 비활성화 +Set-DnsServerPrimaryZone -Name "<영역이름>" -DynamicUpdate None -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-33: HTTP/FTP/SMTP 배너 차단 (하) +**점검:** +```powershell +# IIS Server 헤더 확인 (HTTP 응답) +# (Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing).Headers["Server"] + +# IIS X-Powered-By 헤더 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -ErrorAction SilentlyContinue + +# SMTP 배너 확인 +# telnet localhost 25 으로 접속 시 배너 확인 +``` +**조치:** +```powershell +# [HTTP] IIS Server 헤더 제거 - URL Rewrite 모듈 필요 +# 1) URL Rewrite 설치: https://www.iis.net/downloads/microsoft/url-rewrite +# 2) 아웃바운드 규칙 추가: 서버 변수 RESPONSE_SERVER 비우기 + +# [HTTP] X-Powered-By 헤더 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -AtElement @{name="X-Powered-By"} -ErrorAction SilentlyContinue + +# [FTP] 기본 배너 숨기기 +# IIS 관리자 > FTP 사이트 > FTP 메시지 > "기본 배너 숨기기" 체크 + +# [SMTP] 배너 변경 +# cd C:\inetpub\AdminScripts +# cscript adsutil.vbs set smtpsvc/1/connectresponse "Authorized Access Only" +# net stop smtpsvc && net start smtpsvc +``` + +--- + +### W-34: Telnet 서비스 비활성화 (중) +**점검:** +```powershell +# Telnet 서비스 상태 확인 +Get-Service -Name "TlntSvr" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# Telnet 인증 방식 확인 (Windows 2003~2012) +# tlntadmn config 명령으로 확인 +``` +**조치:** +```powershell +# Telnet 서비스 중지 및 비활성화 +Stop-Service -Name "TlntSvr" -Force -ErrorAction SilentlyContinue +Set-Service -Name "TlntSvr" -StartupType Disabled -ErrorAction SilentlyContinue + +# 부득이 사용 시 NTLM 인증만 사용 +# tlntadmn config sec = +NTLM -passwd + +# 참고: Windows 2016 이상에서는 Telnet 서버 제공하지 않음 +``` + +--- + +### W-35: 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 (중) +**점검:** +```powershell +# 시스템 DSN 확인 +Get-OdbcDsn -DsnType System -ErrorAction SilentlyContinue | Select-Object Name, DriverName, Platform + +# 레지스트리에서 ODBC 데이터 소스 확인 +reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" 2>$null +``` +**조치:** +```powershell +# 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType System -ErrorAction SilentlyContinue + +# GUI: 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN +# 불필요한 데이터 소스 선택 후 제거 +``` + +--- + +### W-36: 원격터미널 접속 타임아웃 설정 (중) +**점검:** +```powershell +# RDP 세션 유휴 타임아웃 레지스트리 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime 2>$null +# 밀리초 단위: 1800000 = 30분 + +# 현재 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MaxIdleTime 2>$null +``` +**조치:** +```powershell +# 유휴 세션 타임아웃 30분(1800000ms) 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime /t REG_DWORD /d 1800000 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 세션 시간 제한 +# "활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정" = 사용 (30분) +``` + +--- + +### W-37: 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 (중) +**점검:** +```powershell +# 예약된 작업 목록 확인 +Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} | + Select-Object TaskName, TaskPath, State | + Format-Table -AutoSize + +# 예약된 작업 상세 정보 (실행 명령 포함) +Get-ScheduledTask | ForEach-Object { + $task = $_ + $actions = $task.Actions + foreach ($action in $actions) { + [PSCustomObject]@{ + TaskName = $task.TaskName + Execute = $action.Execute + Arguments = $action.Arguments + State = $task.State + } + } +} | Format-Table -AutoSize + +# schtasks 명령 +schtasks /query /fo LIST /v +``` +**조치:** +```powershell +# 의심스러운 예약 작업 비활성화 +Disable-ScheduledTask -TaskName "<작업이름>" + +# 의심스러운 예약 작업 삭제 +Unregister-ScheduledTask -TaskName "<작업이름>" -Confirm:$false + +# schtasks 명령 +schtasks /delete /tn "<작업이름>" /f +``` + +--- + +## 3. 패치 관리 + +### W-38: 주기적 보안 패치 및 벤더 권고사항 적용 (상) +**점검:** +```powershell +# 설치된 핫픽스 목록 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, InstalledOn, Description -First 20 + +# 시스템 정보에서 KB 목록 +systeminfo | findstr "KB" + +# 마지막 패치 설치 날짜 확인 +(Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).InstalledOn + +# Windows Update 이력 확인 +$session = New-Object -ComObject Microsoft.Update.Session +$searcher = $session.CreateUpdateSearcher() +$history = $searcher.QueryHistory(0, 20) +$history | Select-Object Title, Date, ResultCode | Format-Table +``` +**조치:** +```powershell +# Windows Update 실행 +# 수동: https://msrc.microsoft.com/update-guide +# 자동: 제어판 > Windows Update + +# PowerShell 모듈 사용 +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll +``` + +--- + +### W-39: 백신 프로그램 업데이트 (상) +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntispywareEnabled, AntivirusEnabled, + AntivirusSignatureLastUpdated, AntispywareSignatureLastUpdated + +# 백신 엔진 버전 확인 +Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, AntivirusSignatureVersion + +# 3rd party 백신 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState, pathToSignedProductExe +``` +**조치:** +```powershell +# Windows Defender 정의 업데이트 +Update-MpSignature + +# Windows Defender 수동 빠른 검사 +Start-MpScan -ScanType QuickScan + +# 3rd party 백신의 경우 해당 제조사 업데이트 절차 참조 +``` + +--- + +## 4. 로그 관리 + +### W-40: 정책에 따른 시스템 로깅 설정 (중) +**점검:** +```powershell +# 감사 정책 확인 +auditpol /get /category:* + +# 주요 감사 정책 확인 +auditpol /get /subcategory:"로그온","로그오프","계정 관리","정책 변경","권한 사용","디렉터리 서비스 액세스" +``` +**조치:** +```powershell +# 감사 정책 설정 (KISA 권고 기준) +auditpol /set /subcategory:"계정 관리" /failure:enable +auditpol /set /subcategory:"계정 로그온 이벤트" /success:enable /failure:enable +auditpol /set /subcategory:"권한 사용" /success:enable /failure:enable +auditpol /set /subcategory:"디렉터리 서비스 액세스" /failure:enable +auditpol /set /subcategory:"로그온" /success:enable /failure:enable +auditpol /set /subcategory:"로그오프" /success:enable /failure:enable +auditpol /set /subcategory:"정책 변경" /success:enable /failure:enable + +# GPO: 로컬 보안 정책 > 로컬 정책 > 감사 정책 +``` + +--- + +### W-41: NTP 및 시각 동기화 설정 (중) +**점검:** +```powershell +# NTP 동기화 상태 확인 +w32tm /query /status +w32tm /query /configuration + +# NTP 서버 설정 확인 +w32tm /dumpreg /subkey:parameters + +# 시간 서비스 상태 +Get-Service -Name "W32Time" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Windows Time 서비스 활성화 +Set-Service -Name "W32Time" -StartupType Automatic +Start-Service -Name "W32Time" + +# 내부 NTP 서버와 동기화 설정 +w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.server.ip" /update +w32tm /resync + +# 동기화 시간차 확인 +w32tm /stripchart /dataonly /computer:"ntp.server.ip" +``` + +--- + +### W-42: 이벤트 로그 관리 설정 (하) +**점검:** +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes, OverflowAction, MinimumRetentionDays | Format-Table + +# 레지스트리에서 직접 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System" /v MaxSize +``` +**조치:** +```powershell +# 이벤트 로그 최대 크기 10240KB(10MB) 이상 설정 +Limit-EventLog -LogName Application -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName Security -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName System -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 + +# 레지스트리 직접 설정 (바이트 단위: 10485760 = 10MB) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize /t REG_DWORD /d 10485760 /f +``` + +--- + +### W-43: 이벤트 로그 파일 접근 통제 설정 (중) +**점검:** +```powershell +# 시스템 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\config" +# Everyone 권한이 있으면 취약 + +# IIS 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\LogFiles" 2>$null +``` +**조치:** +```powershell +# 로그 디렉터리에서 Everyone 권한 제거 +icacls "C:\Windows\System32\config" /remove Everyone /T +icacls "C:\Windows\System32\LogFiles" /remove Everyone /T + +# Administrators, SYSTEM만 접근 가능하도록 설정 +``` + +--- + +## 5. 보안 관리 + +### W-44: 원격으로 액세스할 수 있는 레지스트리 경로 (상) +**점검:** +```powershell +# Remote Registry 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Remote Registry 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-45: 백신 프로그램 설치 (상) +**점검:** +```powershell +# Windows Defender 설치 및 활성화 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusEnabled, RealTimeProtectionEnabled + +# 설치된 백신 프로그램 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState + +# 프로그램 목록에서 백신 확인 +Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "antivirus|백신|V3|알약|Kaspersky|Norton|McAfee|Symantec" } | + Select-Object Name, Version +``` +**조치:** +```powershell +# Windows Defender 활성화 (비활성화된 경우) +Set-MpPreference -DisableRealtimeMonitoring $false + +# 백신이 설치되지 않은 경우 조직 정책에 따라 백신 프로그램 설치 +# Windows Defender는 Windows Server 2016 이상 기본 탑재 +Install-WindowsFeature -Name Windows-Defender -ErrorAction SilentlyContinue +``` + +--- + +### W-46: SAM 파일 접근 통제 설정 (상) +**점검:** +```powershell +# SAM 파일 접근 권한 확인 +icacls "C:\Windows\System32\config\SAM" +# Administrator, SYSTEM 외 다른 그룹/사용자 권한이 있으면 취약 +``` +**조치:** +```powershell +# SAM 파일 권한 설정 (Administrator, SYSTEM만 접근) +icacls "C:\Windows\System32\config\SAM" /inheritance:r +icacls "C:\Windows\System32\config\SAM" /grant "BUILTIN\Administrators:(F)" +icacls "C:\Windows\System32\config\SAM" /grant "NT AUTHORITY\SYSTEM:(F)" +``` + +--- + +### W-47: 화면보호기 설정 (하) +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +# ScreenSaveActive=1, ScreenSaveTimeOut<=600(10분), ScreenSaverIsSecure=1 이면 양호 +``` +**조치:** +```powershell +# 화면보호기 활성화 (대기 시간 10분, 암호 사용) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "C:\Windows\System32\scrnsave.scr" /f + +# GPO 일괄 적용: +# 사용자 구성 > 관리 템플릿 > 제어판 > 개인 설정 +# "화면 보호기 사용" = 사용 +# "화면 보호기 시간 제한" = 600초 +# "화면 보호기 암호로 보호" = 사용 +``` + +--- + +### W-48: 로그온하지 않고 시스템 종료 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon +# 값이 0이면 양호 +``` +**조치:** +```powershell +# 로그온 없이 시스템 종료 차단 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 종료: 로그온하지 않고 시스템 종료 허용" = 사용 안 함 +``` + +--- + +### W-49: 원격 시스템에서 강제로 시스템 종료 (상) +**점검:** +```powershell +# 원격 시스템 종료 권한 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeRemoteShutdownPrivilege" C:\secpol_tmp.cfg +# Administrators만 있으면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "원격 시스템에서 강제로 시스템 종료" 정책에 Administrators 외 다른 계정/그룹 제거 +``` + +--- + +### W-50: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail +# 값이 0이면 양호 (사용 안 함), 1이면 취약 + +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "CrashOnAuditFail" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 (사용 안 함) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료" = 사용 안 함 +``` + +--- + +### W-51: SAM 계정과 공유의 익명 열거 허용 안 함 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM +# RestrictAnonymous=1, RestrictAnonymousSAM=1 이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함" = 사용 +# "네트워크 액세스: SAM 계정의 익명 열거 허용 안 함" = 사용 + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-52: Autologon 기능 제어 (상) +**점검:** +```powershell +# AutoAdminLogon 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +# 값이 0이거나 존재하지 않으면 양호 + +# DefaultPassword 존재 여부 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword 2>$null +``` +**조치:** +```powershell +# Autologon 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f + +# DefaultPassword 제거 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f 2>$null +``` + +--- + +### W-53: 이동식 미디어 포맷 및 꺼내기 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD +# 값이 0(Administrators만)이면 양호 +``` +**조치:** +```powershell +# Administrators에게만 이동식 미디어 포맷/꺼내기 허용 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 이동식 미디어 포맷 및 꺼내기 허용" = Administrators +``` + +--- + +### W-54: DoS 공격 방어 레지스트리 설정 (중) +**점검:** +```powershell +# TCP/IP 스택 강화 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand 2>$null +# SynAttackProtect>=1, EnableDeadGWDetect=0, KeepAliveTime=300000, NoNameReleaseOnDemand=1 이면 양호 +``` +**조치:** +```powershell +# DoS 방어 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand /t REG_DWORD /d 1 /f + +# 주의: 잘못된 값 설정 시 OS 재설치 필요할 수 있음 +``` + +--- + +### W-55: 사용자가 프린터 드라이버를 설치할 수 없게 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers 2>$null +# 값이 1이면 양호 (사용자 설치 차단) +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 사용자가 프린터 드라이버를 설치할 수 없게 함" = 사용 +``` + +--- + +### W-56: SMB 세션 중단 관리 설정 (중) +**점검:** +```powershell +# SMB 세션 유휴 시간 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect 2>$null +# 값이 15 이하이면 양호 + +# 로그온 시간 만료 시 연결 끊기 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff 2>$null +# 값이 1이면 양호 +``` +**조치:** +```powershell +# SMB 유휴 세션 타임아웃 15분 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect /t REG_DWORD /d 15 /f + +# 로그온 시간 만료 시 연결 끊기 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기" = 사용 +# "Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간" = 15분 +``` + +--- + +### W-57: 로그온 시 경고 메시지 설정 (하) +**점검:** +```powershell +# 로그온 경고 메시지 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText +# 둘 다 값이 설정되어 있으면 양호 +``` +**조치:** +```powershell +# 로그온 경고 메시지 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption /t REG_SZ /d "경고" /f +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText /t REG_SZ /d "이 시스템은 인가된 사용자만 접근할 수 있습니다. 비인가 접근 시도 시 법적 처벌을 받을 수 있습니다." /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목" = 경고 제목 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트" = 경고 내용 +``` + +--- + +### W-58: 사용자별 홈 디렉터리 권한 설정 (중) +**점검:** +```powershell +# 사용자 홈 디렉터리 권한 확인 +Get-ChildItem "C:\Users" -Directory | ForEach-Object { + $acl = Get-Acl $_.FullName + $everyoneAccess = $acl.Access | Where-Object { $_.IdentityReference -like "*Everyone*" } + if ($everyoneAccess) { + [PSCustomObject]@{ + Directory = $_.Name + Everyone = ($everyoneAccess | ForEach-Object { $_.FileSystemRights }) -join ", " + } + } +} +``` +**조치:** +```powershell +# 홈 디렉터리에서 Everyone 권한 제거 (All Users, Default User 제외) +Get-ChildItem "C:\Users" -Directory | Where-Object { + $_.Name -notin @("All Users","Default User","Default","Public") +} | ForEach-Object { + icacls $_.FullName /remove Everyone /T +} +``` + +--- + +### W-59: LAN Manager 인증 수준 (중) +**점검:** +```powershell +# LAN Manager 인증 수준 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel +# 값이 5이면 양호 (NTLMv2 응답만 보냄, LM 및 NTLM 거부) +# 최소 3 이상 권장 +``` +**조치:** +```powershell +# NTLMv2 응답만 보내도록 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 보안: LAN Manager 인증 수준" = "NTLMv2 응답만 보내기/LM 및 NTLM 거부" +``` + +--- + +### W-60: 보안 채널 데이터 디지털 암호화 또는 서명 (중) +**점검:** +```powershell +# 보안 채널 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel 2>$null +# 세 값 모두 1이면 양호 +``` +**조치:** +```powershell +# 보안 채널 데이터 암호화/서명 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상)" = 사용 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우)" = 사용 +# "도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우)" = 사용 +``` + +--- + +### W-61: 파일 및 디렉토리 보호 (중) +**점검:** +```powershell +# 파일 시스템 유형 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size | Format-Table + +# CMD 확인 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT 파일 시스템을 NTFS로 변환 +# convert <드라이브명>: /fs:ntfs +# 예: convert F: /fs:ntfs + +# 주의: 변환은 비가역적이며 초기 설치 시 NTFS 선택 권장 +# 기존 FAT에서 변환 시 Default ACL이 적용되지 않을 수 있음 +``` + +--- + +### W-62: 시작 프로그램 목록 분석 (중) +**점검:** +```powershell +# 시작 프로그램 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 2>$null + +# 시작 폴더 확인 +Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue +Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue + +# WMI 시작 프로그램 목록 +Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table -AutoSize +``` +**조치:** +```powershell +# 불필요한 시작 프로그램 제거 (레지스트리) +reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f +reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f + +# msconfig 실행 (Windows 2008 이하) +# 시작 프로그램 탭에서 불필요한 항목 체크 해제 +``` + +--- + +### W-63: 도메인 컨트롤러-사용자의 시간 동기화 (중) +**점검:** +```powershell +# Kerberos 최대 허용 오차 확인 (도메인 컨트롤러) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MaxClockSkew" C:\secpol_tmp.cfg +# 값이 5 이하이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force + +# 현재 시간 동기화 상태 +w32tm /query /status +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +# "컴퓨터 시계 동기화 최대 허용 오차" = 5분 + +# 시간 동기화 강제 수행 +w32tm /resync /force +``` + +--- + +### W-64: 윈도우 방화벽 설정 (중) +**점검:** +```powershell +# Windows 방화벽 프로필 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled | Format-Table + +# 방화벽 규칙 요약 +Get-NetFirewallProfile | ForEach-Object { + $profile = $_.Name + $enabled = $_.Enabled + [PSCustomObject]@{ + Profile = $profile + Enabled = $enabled + InboundDefault = $_.DefaultInboundAction + OutboundDefault = $_.DefaultOutboundAction + } +} | Format-Table + +# netsh 명령 +netsh advfirewall show allprofiles +``` +**조치:** +```powershell +# Windows 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True + +# netsh 명령 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정 또는 해제 +# 모든 프로필에 대해 "사용" 설정 +``` diff --git a/skills/kesekit-check/scripts/robot-security/cert-and-protocol.md b/skills/kesekit-check/scripts/robot-security/cert-and-protocol.md new file mode 100644 index 0000000..259a9d3 --- /dev/null +++ b/skills/kesekit-check/scripts/robot-security/cert-and-protocol.md @@ -0,0 +1,96 @@ +# Certificate & Protocol Security + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: IA-04, ER-01 + +--- + +## 1. OpenSSL Certificate Inspection (IA-04) + +```bash +# 인증서 내용 확인 명령어 +openssl x509 -in server.crt -text -noout +``` + +--- + +## 2. Key File Permission Hardening (IA-04) + +```bash +# 개인키 접근 권한 설정 +chown robot-service:robot-service /etc/robot/keys/device.key +chmod 600 /etc/robot/keys/device.key # 파일 소유자만 접근 가능 +``` + +--- + +## 3. OPC UA Security Configuration (IA-04) + +### 3.1 Certificate Validation + +```ini +# server.conf (OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +### 3.2 Certificate Revocation Check + +```ini +# server.conf (OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +--- + +## 4. TLS Client Certificate Verification - Python (IA-04) + +```python +import ssl, socket + +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 + +with socket.create_connection(("server.com", 443)) as sock: + with context.wrap_socket(sock, server_hostname="server.com") as ssock: + print("TLS Established:", ssock.version()) +``` + +--- + +## 5. Crypto Algorithm Requirements (IA-04) + +| Category | Recommended | Insufficient | +|---|---|---| +| Key algorithm | RSA >= 2048bit or ECC P-256+ | RSA 1024bit or below, ECC P-192 or below | +| Hash algorithm | SHA-256+ (SHA-2/SHA-3 family) | SHA-1, MD5 | +| TLS protocol | TLS 1.2+ (recommended: TLS 1.3) | TLS 1.0 / 1.1 | + +--- + +## 6. Audit Log API Access (ER-01) + +```http +GET /api/audit/logs +Authorization: Bearer + +HTTP/1.1 200 OK +{ + "entries": [...], + "integrity": "sha256:f45a..." +} +``` + +--- + +## 7. Platform-specific Certificate ACL Examples (IA-04) + +| Platform | Certificate Store | +|---|---| +| General server / cloud | DB table | +| OPC UA | /pki/trusted, /pki/rejected folders | +| MQTT mTLS | CA DB, allowed client certificate list | +| Robot PKI | KV DB, HSM integration | diff --git a/skills/kesekit-check/scripts/robot-security/firewall-hardening.md b/skills/kesekit-check/scripts/robot-security/firewall-hardening.md new file mode 100644 index 0000000..8d8820f --- /dev/null +++ b/skills/kesekit-check/scripts/robot-security/firewall-hardening.md @@ -0,0 +1,106 @@ +# Firewall & Network Hardening + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: DFR-02, RA-01, RA-08 + +--- + +## 1. Host Firewall (iptables) + +### 1.1 MQTT / HTTPS Only (DFR-02 Protocol Filtering) + +```bash +# MQTT 및 HTTPS 외의 포트 차단 +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.2 SSH + HTTPS Only (RA-01 DoS Prevention) + +```bash +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.3 Unnecessary Port Blocking (RA-08 Service Restriction) + +```bash +# 외부 포트 스캔 (TCP 포트 확인) +nmap -sS 192.168.0.10 + +# 불필요한 포트(예: FTP 21, Telnet 23, TFTP 69) 차단 +sudo iptables -A INPUT -p tcp --dport 21 -j DROP +sudo iptables -A INPUT -p tcp --dport 23 -j DROP +sudo iptables -A INPUT -p udp --dport 69 -j DROP +``` + +--- + +## 2. Service Hardening (RA-08) + +```bash +# 현재 활성화된 포트 및 프로세스 확인 +sudo ss -tulnp +sudo netstat -tulnp + +# 서비스 상태 확인 및 비활성화 +sudo systemctl status telnet +sudo systemctl disable telnet +sudo systemctl stop telnet +``` + +--- + +## 3. VLAN Network Segmentation (RA-01 L2) + +Control network and sensor network separation via VLAN. + +```bash +# 제어 망 (VLAN ID 10) +sudo ip link add link eth0 name eth0.10 type vlan id 10 +# 센서 망 (VLAN ID 20) +sudo ip link add link eth0 name eth0.20 type vlan id 20 + +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +``` + +--- + +## 4. sysctl Network Tuning (RA-01) + +```bash +sudo sysctl -w net.core.somaxconn=128 +sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +ulimit -n 1024 +``` + +--- + +## 5. Nginx Rate Limiting (RA-01) + +```nginx +# /etc/nginx/nginx.conf +http { + limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; + server { + listen 443 ssl; + server_name example.com; + location / { + limit_req zone=req_limit_per_ip burst=5 nodelay; + limit_conn conn_limit_per_ip 10; + } + } +} +``` + +--- + +## 6. Suricata IDS Rule (RA-01 L2 DoS Detection) + +```yaml +alert tcp any any -> $HOME_NET any (msg:"TCP SYN Flood"; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +``` diff --git a/skills/kesekit-check/scripts/robot-security/resource-management.md b/skills/kesekit-check/scripts/robot-security/resource-management.md new file mode 100644 index 0000000..fd35dce --- /dev/null +++ b/skills/kesekit-check/scripts/robot-security/resource-management.md @@ -0,0 +1,96 @@ +# Resource Management & Monitoring + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: RA-02, RA-03 + +--- + +## 1. cgroups - Security Agent Resource Limits (RA-02) + +Restrict CPU and memory usage for security processes so they do not interfere with real-time robot control. + +```bash +# cgroup 생성 (cpu + memory) +sudo cgcreate -g cpu,memory:/robot_security + +# CPU 할당 제한 (20000us = 20% of 1 core at default 100000us period) +echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us + +# 메모리 제한 (256MB) +echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes + +# 실행 중인 보안 에이전트를 cgroup에 할당 +sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +``` + +--- + +## 2. OpenSSL Hardware Acceleration Check (RA-02) + +Offload crypto operations to hardware to reduce CPU overhead. + +```bash +openssl engine -t +# Expected output: +# (dynamic) Dynamic engine loading support +# (rdrand) Intel RDRAND engine +# (aesni) Intel AES-NI engine +``` + +--- + +## 3. logrotate Configuration (RA-02) + +Prevent audit/operational logs from exhausting disk space. + +```bash +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { + size 50M + rotate 5 + compress + missingok + notifempty +} +``` + +--- + +## 4. System Resource Monitoring (RA-03) + +Dashboard or CLI-based monitoring of CPU, memory, disk, and network utilization. The robot system should provide a user interface for operators to view resource status in real-time. + +Key resource metrics to monitor: +- CPU usage per core / per process +- Memory (RSS / swap) usage +- Disk I/O and capacity +- Network interface throughput and error rates + +--- + +## 5. ROS Publisher Rate Limiting (RA-01 L2) + +Limit sensor data publish rate to prevent communication overload. + +```cpp +ros::Publisher pub = nh.advertise("sensor_data", 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { + std_msgs::String msg; + msg.data = "sensor data"; + pub.publish(msg); + loop_rate.sleep(); +} +``` + +--- + +## 6. ROS2 QoS Security Profile (RA-01 L2) + +```yaml +QoSProfile: + reliability: RELIABLE + durability: TRANSIENT_LOCAL + history: KEEP_LAST + depth: 10 +``` diff --git a/skills/kesekit-check/scripts/robot-security/sbom-audit.md b/skills/kesekit-check/scripts/robot-security/sbom-audit.md new file mode 100644 index 0000000..1b1387f --- /dev/null +++ b/skills/kesekit-check/scripts/robot-security/sbom-audit.md @@ -0,0 +1,84 @@ +# SBOM & Supply Chain Audit + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: SC-05 + +--- + +## 1. SBOM Generation with Syft (SC-05) + +Generate a Software Bill of Materials from source code or container images using Anchore Syft. + +```bash +# Syft를 통한 SBOM 생성 (JSON format) +syft <소스코드 경로> -o json > sbom.json +``` + +--- + +## 2. Vulnerability Scanning with Grype (SC-05) + +Scan the generated SBOM for known vulnerabilities (CVEs). + +```bash +# Grype를 통한 취약점 식별 +grype sbom://sbom.json +``` + +--- + +## 3. Package Manager Built-in Audit Commands (SC-05) + +Use built-in security features of each package manager to analyze declared dependencies and automatically scan for known vulnerabilities. + +### Node.js (NPM) + +```bash +npm audit +``` + +### Python (pip) + +```bash +pip-audit +``` + +### Java (Maven) + +```bash +mvn dependency-check:check +``` + +### .NET (NuGet) + +```bash +dotnet list package --vulnerable +``` + +### Rust (Cargo) + +```bash +cargo audit +``` + +--- + +## 4. CI/CD Pipeline Integration (SC-05) + +Integrate vulnerability scanning into CI/CD pipelines (GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins, etc.) to automatically detect vulnerabilities before deployment. + +### Vulnerability Response Record Fields + +| Field | Description | +|---|---| +| CVE ID | 취약점 식별자 | +| 구성요소 | 영향받는 컴포넌트(이름/버전) | +| 기술적 위험 | 공개 PoC/익스플로잇 존재 여부, CVSS 점수 | +| 비즈니스 영향 | 영향을 받는 서비스/데이터/운영 영향 | +| EoS 여부 | 해당 구성요소의 지원상태 | +| 우선 순위 | P0/P1/P2 또는 High/Medium/Low | +| 대응방안 | 패치/업그레이드/가상패치/격리 등 | +| SLA | 목표 기간 | +| 담당자 및 일정 | 책임부서, 담당자, 완료예정일 | +| 검증 방법 | 재스캔, 기능/회귀 테스트 결과 링크 | +| 상태 | 계획/진행/완료/예외(승인) | diff --git a/skills/check/references/ai-security/developer.md b/skills/kesekit-check/templates/ai-security/developer.md similarity index 100% rename from skills/check/references/ai-security/developer.md rename to skills/kesekit-check/templates/ai-security/developer.md diff --git a/skills/kesekit-check/templates/ai-security/user-guide-checklist.md b/skills/kesekit-check/templates/ai-security/user-guide-checklist.md new file mode 100644 index 0000000..903ec01 --- /dev/null +++ b/skills/kesekit-check/templates/ai-security/user-guide-checklist.md @@ -0,0 +1,13 @@ +# AI 이용자 보안 체크리스트 요약 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +| # | 항목 | 확인 | +|---|------|:----:| +| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | +| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | +| 3 | AI 서비스 이용약관을 확인했는가? | □ | +| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | +| 5 | AI 출력 결과를 검증하고 있는가? | □ | +| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | +| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills/check/references/cii/admin.md b/skills/kesekit-check/templates/cii/admin.md similarity index 100% rename from skills/check/references/cii/admin.md rename to skills/kesekit-check/templates/cii/admin.md diff --git a/skills/kesekit-check/templates/cii/cloud.md b/skills/kesekit-check/templates/cii/cloud.md new file mode 100644 index 0000000..42834e8 --- /dev/null +++ b/skills/kesekit-check/templates/cii/cloud.md @@ -0,0 +1,45 @@ +# 클라우드 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: AWS, Azure, GCP 등 클라우드 환경 + +## 1. 계정 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-01 | 클라우드 관리 콘솔 기본 계정 변경 | 상 | +| CA-02 | 비밀번호 복잡성 및 MFA 설정 | 상 | +| CA-03 | 불필요한 계정/키 제거 | 상 | +| CA-04 | 루트/관리자 계정 직접 사용 제한 | 상 | + +## 2. 권한 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-05 | IAM 최소 권한 원칙 적용 | 상 | +| CA-06 | 서비스 계정/역할 권한 제한 | 상 | + +## 3. 가상 리소스 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-07 | 보안 그룹/네트워크 ACL 설정 | 상 | +| CA-08 | 스토리지 접근 권한 및 암호화 | 상 | +| CA-09 | 가상 네트워크 분리 (VPC/서브넷) | 상 | +| CA-10 | 미사용 리소스 점검 및 제거 | 중 | + +## 4. 운영 관리 (9항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-11 | 클라우드 감사 로깅 활성화 | 상 | +| CA-12 | 보안 모니터링 및 알림 설정 | 상 | +| CA-13 | 데이터 백업 및 복구 정책 | 상 | +| CA-14 | 보안 패치 및 이미지 관리 | 상 | +| CA-15 | API 키/시크릿 관리 | 상 | +| CA-16 | 전송 중/저장 시 암호화 | 상 | +| CA-17 | 인스턴스 메타데이터 보호 | 중 | +| CA-18 | 컨테이너/서버리스 보안 설정 | 중 | +| CA-19 | 클라우드 서비스 가용성 관리 | 중 | + +## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills/check/references/cii/control-system.md b/skills/kesekit-check/templates/cii/control-system.md similarity index 100% rename from skills/check/references/cii/control-system.md rename to skills/kesekit-check/templates/cii/control-system.md diff --git a/skills/kesekit-check/templates/cii/database.md b/skills/kesekit-check/templates/cii/database.md new file mode 100644 index 0000000..d6847e0 --- /dev/null +++ b/skills/kesekit-check/templates/cii/database.md @@ -0,0 +1,52 @@ +# DBMS 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Oracle DB, MSSQL, MySQL, PostgreSQL, Altibase, Tibero, Cubrid + +## 1. 계정 관리 (9항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-01 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | 상 | +| D-02 | 불필요 계정 제거 또는 잠금설정 | 상 | +| D-03 | 비밀번호 사용기간 및 복잡도 설정 | 상 | +| D-04 | 관리자 권한을 필요한 계정/그룹에만 허용 | 상 | +| D-05 | 비밀번호 재사용 제약 설정 | 중 | +| D-06 | DB 사용자 계정 개별 부여 | 중 | +| D-07 | root 권한으로 서비스 구동 제한 | 중 | +| D-08 | 안전한 암호화 알고리즘 사용 | 상 | +| D-09 | 로그인 실패 시 잠금정책 설정 | 중 | + +## 2. 접근 관리 (7항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-10 | 원격에서 DB 서버 접속 제한 | 상 | +| D-11 | 비인가 사용자의 시스템 테이블 접근 차단 | 상 | +| D-12 | 안전한 리스너 비밀번호 설정 | 상 | +| D-13 | 불필요한 ODBC/OLE-DB 데이터 소스 제거 | 중 | +| D-14 | 주요 파일 접근 권한 설정 | 중 | +| D-15 | 리스너 로그/trace 파일 변경 제한 | 하 | +| D-16 | Windows 인증 모드 사용 | 하 | + +## 3. 옵션 관리 (8항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-17 | Audit Table 관리자 접근 제한 | 하 | +| D-18 | Role이 Public으로 설정되지 않도록 조정 | 상 | +| D-19 | OS_ROLES 등 원격 인증 FALSE 설정 | 상 | +| D-20 | 인가되지 않은 Object owner 제한 | 하 | +| D-21 | 인가되지 않은 GRANT OPTION 사용 제한 | 중 | +| D-22 | 자원 제한 기능 TRUE 설정 | 하 | +| D-23 | xp_cmdshell 사용 제한 | 상 | +| D-24 | Registry Procedure 권한 제한 | 상 | + +## 4. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| D-26 | 감사 기록 정책 적합 설정 | 상 | + +## 통계: 총 26항목 (상 13, 중 7, 하 6) diff --git a/skills/check/references/cii/mobile.md b/skills/kesekit-check/templates/cii/mobile.md similarity index 100% rename from skills/check/references/cii/mobile.md rename to skills/kesekit-check/templates/cii/mobile.md diff --git a/skills/kesekit-check/templates/cii/network.md b/skills/kesekit-check/templates/cii/network.md new file mode 100644 index 0000000..e168fb3 --- /dev/null +++ b/skills/kesekit-check/templates/cii/network.md @@ -0,0 +1,69 @@ +# 네트워크 장비 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Cisco, Alteon, Passport, Juniper, Piolink 등 + +## 1. 계정 관리 (5항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-01 | 비밀번호 설정 | 상 | +| N-02 | 비밀번호 복잡성 설정 | 상 | +| N-03 | 암호화된 비밀번호 사용 | 상 | +| N-04 | 계정 잠금 임계값 설정 | 상 | +| N-05 | 사용자, 명령어별 권한 수준 설정 | 중 | + +## 2. 접근 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-06 | VTY 접근(ACL) 설정 | 상 | +| N-07 | 세션 종료 시간 설정 | 상 | +| N-08 | VTY 접속 시 안전한 프로토콜 사용 | 중 | +| N-09 | 불필요한 보조 입출력 포트 사용 금지 | 중 | +| N-10 | 로그온 시 경고 메시지 설정 | 중 | +| N-11 | 원격 로그서버 사용 | 중 | + +## 3. 패치 관리 (1항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-12 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | + +## 4. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-13 | 로깅 버퍼 크기 설정 | 중 | +| N-14 | 정책에 따른 로깅 설정 | 중 | +| N-15 | NTP 및 시각 동기화 설정 | 중 | +| N-16 | Timestamp 로그 설정 | 하 | + +## 5. 기능 관리 (22항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-17 | SNMP 서비스 확인 | 상 | +| N-18 | SNMP Community String 복잡성 설정 | 상 | +| N-19 | SNMP ACL 설정 | 상 | +| N-20 | SNMP Community 권한 설정 | 상 | +| N-21 | TFTP 서비스 차단 | 상 | +| N-22 | Spoofing 방지 필터링 적용 | 상 | +| N-23 | DDoS 공격 방어 설정 또는 DDoS 장비 사용 | 상 | +| N-24 | 사용하지 않는 인터페이스 비활성화 | 상 | +| N-25 | TCP Keepalive 서비스 설정 | 중 | +| N-26 | Finger 서비스 차단 | 중 | +| N-27 | 웹 서비스 차단 | 중 | +| N-28 | TCP/UDP small 서비스 차단 | 중 | +| N-29 | Bootp 서비스 차단 | 중 | +| N-30 | CDP 서비스 차단 | 중 | +| N-31 | Directed-broadcast 차단 | 중 | +| N-32 | Source 라우팅 차단 | 중 | +| N-33 | Proxy ARP 차단 | 중 | +| N-34 | ICMP unreachable, Redirect 차단 | 중 | +| N-35 | identd 서비스 차단 | 중 | +| N-36 | Domain Lookup 차단 | 중 | +| N-37 | pad 차단 | 중 | +| N-38 | mask-reply 차단 | 중 | + +## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills/kesekit-check/templates/cii/pc.md b/skills/kesekit-check/templates/cii/pc.md new file mode 100644 index 0000000..b5ca66b --- /dev/null +++ b/skills/kesekit-check/templates/cii/pc.md @@ -0,0 +1,44 @@ +# PC 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Windows 10, Windows 11 + +## 1. 계정 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-01 | 비밀번호의 주기적 변경 | 상 | +| PC-02 | 비밀번호 관리정책 설정 | 상 | +| PC-03 | 복구 콘솔에서 자동 로그온 금지 설정 | 중 | + +## 2. 서비스 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-04 | 공유 폴더 제거 | 상 | +| PC-05 | 불필요한 서비스 제거 | 상 | +| PC-06 | 비인가 상용 메신저 사용 금지 | 상 | +| PC-07 | 파일 시스템이 NTFS 포맷으로 설정 | 중 | +| PC-08 | 다른 OS로 멀티 부팅 불가 설정 | 중 | +| PC-09 | 브라우저 종료 시 임시 인터넷 파일 삭제 | 하 | + +## 3. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-10 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| PC-11 | 지원 종료되지 않은 Windows OS Build 적용 | 상 | + +## 4. 보안 관리 (7항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-12 | Windows 자동 로그인 점검 | 중 | +| PC-13 | 바이러스 백신 설치 및 주기적 업데이트 | 상 | +| PC-14 | 실시간 감시 기능 활성화 | 상 | +| PC-15 | OS 침입차단 기능 활성화 | 상 | +| PC-16 | 화면보호기 대기 시간 및 암호 보호 설정 | 상 | +| PC-17 | 이동식 미디어 자동실행 방지 | 상 | +| PC-18 | 원격 지원 금지 정책 설정 | 중 | + +## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills/check/references/cii/physical.md b/skills/kesekit-check/templates/cii/physical.md similarity index 100% rename from skills/check/references/cii/physical.md rename to skills/kesekit-check/templates/cii/physical.md diff --git a/skills/check/references/cii/security-equip.md b/skills/kesekit-check/templates/cii/security-equip.md similarity index 100% rename from skills/check/references/cii/security-equip.md rename to skills/kesekit-check/templates/cii/security-equip.md diff --git a/skills/kesekit-check/templates/cii/unix.md b/skills/kesekit-check/templates/cii/unix.md new file mode 100644 index 0000000..969c52f --- /dev/null +++ b/skills/kesekit-check/templates/cii/unix.md @@ -0,0 +1,124 @@ +# Unix 서버 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: SOLARIS, LINUX, AIX, HP-UX + +## 1. 계정 관리 (13항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-01 | root 계정 원격 접속 제한 | 상 | +| U-02 | 비밀번호 관리정책 설정 | 상 | +| U-03 | 계정 잠금 임계값 설정 | 상 | +| U-04 | 비밀번호 파일 보호 | 상 | +| U-05 | root 이외의 UID가 '0' 금지 | 상 | +| U-06 | 사용자 계정 su 기능 제한 | 상 | +| U-07 | 불필요한 계정 제거 | 하 | +| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | +| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | +| U-10 | 동일한 UID 금지 | 중 | +| U-11 | 사용자 Shell 점검 | 하 | +| U-12 | 세션 종료 시간 설정 | 하 | +| U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | + +--- + +## 2. 파일 및 디렉터리 관리 (20항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-14 | root 홈, 패스 디렉터리 권한 및 패스 설정 | 상 | +| U-15 | 파일 및 디렉터리 소유자 설정 | 상 | +| U-16 | /etc/passwd 파일 소유자 및 권한 설정 | 상 | +| U-17 | 시스템 시작 스크립트 권한 설정 | 상 | +| U-18 | /etc/shadow 파일 소유자 및 권한 설정 | 상 | +| U-19 | /etc/hosts 파일 소유자 및 권한 설정 | 상 | +| U-20 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | 상 | +| U-21 | /etc/(r)syslog.conf 파일 소유자 및 권한 설정 | 상 | +| U-22 | /etc/services 파일 소유자 및 권한 설정 | 상 | +| U-23 | SUID, SGID, Sticky bit 설정 파일 점검 | 상 | +| U-24 | 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 | 상 | +| U-25 | world writable 파일 점검 | 상 | +| U-26 | /dev에 존재하지 않는 device 파일 점검 | 상 | +| U-27 | $HOME/.rhosts, hosts.equiv 사용 금지 | 상 | +| U-28 | 접속 IP 및 포트 제한 | 상 | +| U-29 | hosts.lpd 파일 소유자 및 권한 설정 | 하 | +| U-30 | UMASK 설정 관리 | 중 | +| U-31 | 홈 디렉토리 소유자 및 권한 설정 | 중 | +| U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | +| U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | + +--- + +## 3. 서비스 관리 (30항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-34 | Finger 서비스 비활성화 | 상 | +| U-35 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | +| U-36 | r 계열 서비스 비활성화 | 상 | +| U-37 | crontab 설정파일 권한 설정 | 상 | +| U-38 | DoS 공격에 취약한 서비스 비활성화 | 상 | +| U-39 | 불필요한 NFS 서비스 비활성화 | 상 | +| U-40 | NFS 접근 통제 | 상 | +| U-41 | 불필요한 automountd 제거 | 상 | +| U-42 | 불필요한 RPC 서비스 비활성화 | 상 | +| U-43 | NIS, NIS+ 점검 | 상 | +| U-44 | tftp, talk 서비스 비활성화 | 상 | +| U-45 | 메일 서비스 버전 점검 | 상 | +| U-46 | 일반 사용자의 메일 서비스 실행 방지 | 상 | +| U-47 | 스팸 메일 릴레이 제한 | 상 | +| U-48 | expn, vrfy 명령어 제한 | 중 | +| U-49 | DNS 보안 버전 패치 | 상 | +| U-50 | DNS Zone Transfer 설정 | 상 | +| U-51 | DNS 서비스의 취약한 동적 업데이트 설정 금지 | 중 | +| U-52 | Telnet 서비스 비활성화 | 중 | +| U-53 | FTP 서비스 정보 노출 제한 | 하 | +| U-54 | 암호화되지 않는 FTP 서비스 비활성화 | 중 | +| U-55 | FTP 계정 Shell 제한 | 중 | +| U-56 | FTP 서비스 접근 제어 설정 | 하 | +| U-57 | Ftpusers 파일 설정 | 중 | +| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| U-59 | 안전한 SNMP 버전 사용 | 상 | +| U-60 | SNMP Community String 복잡성 설정 | 중 | +| U-61 | SNMP Access Control 설정 | 상 | +| U-62 | 로그인 시 경고 메시지 설정 | 하 | +| U-63 | sudo 명령어 접근 관리 | 중 | + +--- + +## 4. 패치 관리 (1항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | + +--- + +## 5. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-65 | NTP 및 시각 동기화 설정 | 중 | +| U-66 | 정책에 따른 시스템 로깅 설정 | 중 | +| U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | + +--- + +## 판단 기준 + +| 판단 | 설명 | +|------|------| +| 양호 | 보안 설정이 적절히 적용됨 | +| 취약 | 보안 취약점 존재, 조치 필요 | + +## 통계 + +| 분류 | 항목 수 | 상 | 중 | 하 | +|------|:------:|:--:|:--:|:--:| +| 계정 관리 | 13 | 6 | 4 | 3 | +| 파일/디렉터리 관리 | 20 | 15 | 3 | 2 | +| 서비스 관리 | 30 | 19 | 9 | 2 | +| 패치 관리 | 1 | 1 | 0 | 0 | +| 로그 관리 | 3 | 0 | 3 | 0 | +| **합계** | **67** | **41** | **19** | **7** | diff --git a/skills/check/references/cii/virtualization.md b/skills/kesekit-check/templates/cii/virtualization.md similarity index 100% rename from skills/check/references/cii/virtualization.md rename to skills/kesekit-check/templates/cii/virtualization.md diff --git a/skills/kesekit-check/templates/cii/web-service.md b/skills/kesekit-check/templates/cii/web-service.md new file mode 100644 index 0000000..9f6298a --- /dev/null +++ b/skills/kesekit-check/templates/cii/web-service.md @@ -0,0 +1,52 @@ +# 웹 서비스 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Apache, Nginx, IIS, Tomcat, JEUS + +## 1. 계정 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-01 | Default 관리자 계정명 변경 | 상 | +| WEB-02 | 취약한 비밀번호 사용 제한 | 상 | +| WEB-03 | 비밀번호 파일 권한 관리 | 상 | + +## 2. 서비스 관리 (15항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-04 | 웹 서비스 디렉터리 리스팅 방지 설정 | 상 | +| WEB-05 | 지정하지 않은 CGI/ISAPI 실행 제한 | 상 | +| WEB-06 | 웹 서비스 상위 디렉터리 접근 제한 설정 | 상 | +| WEB-07 | 웹 서비스 경로 내 불필요한 파일 제거 | 중 | +| WEB-08 | 웹 서비스 파일 업로드 및 다운로드 용량 제한 | 하 | +| WEB-09 | 웹 서비스 프로세스 권한 제한 | 상 | +| WEB-10 | 불필요한 프록시 설정 제한 | 상 | +| WEB-11 | 웹 서비스 경로 설정 | 중 | +| WEB-12 | 웹 서비스 링크 사용 금지 | 중 | +| WEB-13 | 웹 서비스 설정 파일 노출 제한 | 상 | +| WEB-14 | 웹 서비스 경로 내 파일의 접근 통제 | 상 | +| WEB-15 | 웹 서비스의 불필요한 스크립트 매핑 제거 | 상 | +| WEB-16 | 웹 서비스 헤더 정보 노출 제한 | 중 | +| WEB-17 | 웹 서비스 가상 디렉토리 삭제 | 중 | +| WEB-18 | 웹 서비스 WebDAV 비활성화 | 상 | + +## 3. 보안 설정 (5항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-19 | 웹 서비스 SSI 사용 제한 | 중 | +| WEB-20 | SSL/TLS 활성화 | 상 | +| WEB-21 | HTTP 리디렉션 | 중 | +| WEB-22 | 에러 페이지 관리 | 하 | +| WEB-23 | LDAP 알고리즘 적절하게 구성 | 중 | + +## 4. 패치 및 로그 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-24 | 별도의 업로드 경로 사용 및 권한 설정 | 중 | +| WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | + +## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills/kesekit-check/templates/cii/webapp.md b/skills/kesekit-check/templates/cii/webapp.md new file mode 100644 index 0000000..ca84427 --- /dev/null +++ b/skills/kesekit-check/templates/cii/webapp.md @@ -0,0 +1,47 @@ +# Web Application 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: 웹 애플리케이션 소스 코드 및 설정 + +## 1. 입력값 검증 (8항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CI | Command Injection | 상 | +| SI | SQL Injection | 상 | +| XS | Cross-Site Scripting (XSS) | 상 | +| CF | Cross-Site Request Forgery (CSRF) | 상 | +| SF | Server-Side Request Forgery (SSRF) | 상 | +| FU | File Upload 취약점 | 상 | +| FD | File Download 취약점 | 상 | +| DI | 디렉터리 인덱싱 | 중 | + +## 2. 인증/세션 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| BF | Brute Force 공격 | 상 | +| IA | 불충분한 인증 (Insufficient Authentication) | 상 | +| PR | 비밀번호 복구 취약점 | 중 | +| IS | 불충분한 세션 관리 | 상 | +| CC | 세션 고정 (Credential/Session Prediction) | 상 | +| SN | 세션 만료 미설정 | 중 | + +## 3. 접근제어 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| IN | 불충분한 인가 (Insufficient Authorization) | 상 | +| PV | 경로 조작 (Path Traversal) | 상 | +| AE | 관리자 페이지 노출 | 상 | +| WM | HTTP Method 제한 미설정 | 중 | + +## 4. 정보노출 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| EP | 에러 페이지를 통한 정보 노출 | 중 | +| IL | 불필요한 정보 노출 | 중 | +| AU | 부적절한 감사 로깅 | 중 | + +## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills/kesekit-check/templates/cii/windows.md b/skills/kesekit-check/templates/cii/windows.md new file mode 100644 index 0000000..15a5c32 --- /dev/null +++ b/skills/kesekit-check/templates/cii/windows.md @@ -0,0 +1,113 @@ +# Windows 서버 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) + +## 1. 계정 관리 (14항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-01 | Administrator 계정 이름 변경 등 보안성 강화 | 상 | +| W-02 | Guest 계정 비활성화 | 상 | +| W-03 | 불필요한 계정 제거 | 상 | +| W-04 | 계정 잠금 임계값 설정 | 상 | +| W-05 | 해독 가능한 암호화를 사용하여 암호 저장 해제 | 상 | +| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | +| W-07 | Everyone 사용 권한을 익명 사용자에게 적용 | 중 | +| W-08 | 계정 잠금 기간 설정 | 중 | +| W-09 | 비밀번호 관리정책 설정 | 상 | +| W-10 | 마지막 사용자 이름 표시 안 함 | 중 | +| W-11 | 로컬 로그온 허용 | 중 | +| W-12 | 익명 SID/이름 변환 허용 해제 | 중 | +| W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | +| W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | + +--- + +## 2. 서비스 관리 (23항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-15 | 사용자 개인키 사용 시 암호 입력 | 상 | +| W-16 | 공유 권한 및 사용자 그룹 설정 | 상 | +| W-17 | 하드디스크 기본 공유 제거 | 상 | +| W-18 | 불필요한 서비스 제거 | 상 | +| W-19 | 불필요한 IIS 서비스 구동 점검 | 상 | +| W-20 | NetBIOS 바인딩 서비스 구동 점검 | 상 | +| W-21 | 암호화되지 않는 FTP 서비스 비활성화 | 상 | +| W-22 | FTP 디렉토리 접근권한 설정 | 상 | +| W-23 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | +| W-24 | FTP 접근 제어 설정 | 상 | +| W-25 | DNS Zone Transfer 설정 | 상 | +| W-26 | RDS(Remote Data Services) 제거 | 상 | +| W-27 | 최신 Windows OS Build 버전 적용 | 상 | +| W-28 | 터미널 서비스 암호화 수준 설정 | 중 | +| W-29 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| W-30 | SNMP Community String 복잡성 설정 | 중 | +| W-31 | SNMP Access Control 설정 | 중 | +| W-32 | DNS 서비스 구동 점검 | 중 | +| W-33 | HTTP/FTP/SMTP 배너 차단 | 하 | +| W-34 | Telnet 서비스 비활성화 | 중 | +| W-35 | 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 | 중 | +| W-36 | 원격터미널 접속 타임아웃 설정 | 중 | +| W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | + +--- + +## 3. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| W-39 | 백신 프로그램 업데이트 | 상 | + +--- + +## 4. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-40 | 정책에 따른 시스템 로깅 설정 | 중 | +| W-41 | NTP 및 시각 동기화 설정 | 중 | +| W-42 | 이벤트 로그 관리 설정 | 하 | +| W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | + +--- + +## 5. 보안 관리 (21항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-44 | 원격으로 액세스할 수 있는 레지스트리 경로 | 상 | +| W-45 | 백신 프로그램 설치 | 상 | +| W-46 | SAM 파일 접근 통제 설정 | 상 | +| W-47 | 화면보호기 설정 | 상 | +| W-48 | 로그온하지 않고 시스템 종료 허용 | 상 | +| W-49 | 원격 시스템에서 강제로 시스템 종료 | 상 | +| W-50 | 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 | 상 | +| W-51 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | +| W-52 | Autologon 기능 제어 | 상 | +| W-53 | 이동식 미디어 포맷 및 꺼내기 허용 | 상 | +| W-54 | DoS 공격 방어 레지스트리 설정 | 중 | +| W-55 | 사용자가 프린터 드라이버를 설치할 수 없게 함 | 중 | +| W-56 | SMB 세션 중단 관리 설정 | 중 | +| W-57 | 로그온 시 경고 메시지 설정 | 하 | +| W-58 | 사용자별 홈 디렉터리 권한 설정 | 중 | +| W-59 | LAN Manager 인증 수준 | 중 | +| W-60 | 보안 채널 데이터 디지털 암호화 또는 서명 | 중 | +| W-61 | 파일 및 디렉토리 보호 | 중 | +| W-62 | 시작프로그램 목록 분석 | 중 | +| W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | +| W-64 | 윈도우 방화벽 설정 | 중 | + +--- + +## 통계 + +| 분류 | 항목 수 | 상 | 중 | 하 | +|------|:------:|:--:|:--:|:--:| +| 계정 관리 | 14 | 7 | 7 | 0 | +| 서비스 관리 | 23 | 13 | 9 | 1 | +| 패치 관리 | 2 | 2 | 0 | 0 | +| 로그 관리 | 4 | 0 | 3 | 1 | +| 보안 관리 | 21 | 10 | 10 | 1 | +| **합계** | **64** | **32** | **29** | **3** | diff --git a/skills/check/references/robot-security/cyber-resilience.md b/skills/kesekit-check/templates/robot-security/cyber-resilience.md similarity index 100% rename from skills/check/references/robot-security/cyber-resilience.md rename to skills/kesekit-check/templates/robot-security/cyber-resilience.md diff --git a/skills/check/references/robot-security/iec62443.md b/skills/kesekit-check/templates/robot-security/iec62443.md similarity index 100% rename from skills/check/references/robot-security/iec62443.md rename to skills/kesekit-check/templates/robot-security/iec62443.md diff --git a/skills/check/references/robot-security/overview.md b/skills/kesekit-check/templates/robot-security/overview.md similarity index 100% rename from skills/check/references/robot-security/overview.md rename to skills/kesekit-check/templates/robot-security/overview.md diff --git a/skills/check/references/robot-security/ssdf.md b/skills/kesekit-check/templates/robot-security/ssdf.md similarity index 100% rename from skills/check/references/robot-security/ssdf.md rename to skills/kesekit-check/templates/robot-security/ssdf.md diff --git a/skills/check/references/robot-security/supply-chain.md b/skills/kesekit-check/templates/robot-security/supply-chain.md similarity index 100% rename from skills/check/references/robot-security/supply-chain.md rename to skills/kesekit-check/templates/robot-security/supply-chain.md diff --git a/skills/check/references/robot-security/wireless.md b/skills/kesekit-check/templates/robot-security/wireless.md similarity index 100% rename from skills/check/references/robot-security/wireless.md rename to skills/kesekit-check/templates/robot-security/wireless.md diff --git a/skills/kesekit-check/templates/secure-coding/javascript.md b/skills/kesekit-check/templates/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/skills/kesekit-check/templates/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/skills/kesekit-check/templates/secure-coding/python.md b/skills/kesekit-check/templates/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/skills/kesekit-check/templates/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/skills/kesekit-check/templates/space-security/access-control.md b/skills/kesekit-check/templates/space-security/access-control.md new file mode 100644 index 0000000..7232d6a --- /dev/null +++ b/skills/kesekit-check/templates/space-security/access-control.md @@ -0,0 +1,49 @@ +# Access Control & Authentication Checklist + +> Domains: AC (Access Control, 12 items) + IA (Identification & Authentication, 2 items) + +## AC — Access Control (12 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| AC-01 | Access Control Policy | Restrict access to authorized users/processes/devices only | Access control policy established, authorized entities identified, per-system access rules defined | +| AC-02 | Least Privilege | Grant minimum necessary permissions | Least privilege procedures, management approval, periodic review | +| AC-03 | Privileged Access Use | Restrict and audit privileged account usage | Privileged account types defined/limited, audit logs stored/reviewed | +| AC-04 | Information Flow Control | Control information flow within and between systems | Flow control policy, source/destination identification, change approval | +| AC-05 | Separation of Duties | Prevent authority abuse through role separation | Duty separation policy, critical duties separated, compensating controls | +| AC-06 | Failed Login Attempts | Protect accounts from brute-force attacks | Max attempt limits, auto-lockout policy, alert/notification on failures | +| AC-07 | Session Lock & Termination | Prevent unauthorized access during idle sessions | Auto-lock on inactivity, re-authentication required, session termination conditions | +| AC-08 | Remote Access Control | Prevent unauthorized remote access | Remote access policy, device security check/MFA/encryption, monitoring/logging | +| AC-09 | Wireless Access | Prevent unauthorized wireless connections | Wireless policy, authentication/encryption, unauthorized AP prevention | +| AC-10 | Mobile Device Control | Control mobile device connections | Mobile device policy, data encryption, loss/theft protection | +| AC-11 | External Connection Control | Protect system boundaries from external systems | External systems identified, approved methods only, continuous monitoring | +| AC-12 | Public Information Control | Prevent sensitive information disclosure | Pre-publication review/approval, designated reviewers, periodic content review | + +### AC Protection Measures Summary + +| Category | Measures | +|----------|----------| +| Account Management | 1-person-1-account, default account deletion, immediate revocation on termination, annual full review | +| Authentication | MFA for privileged access, SSH/SFTP/VPN only, 8+ char passwords with 2+ character types | +| Network | ACL-based deny-all, IP/port whitelisting, WPA3/WPA2-Enterprise, WIPS deployment | +| Session | 10-min inactivity lock, screensaver with password, session timeout enforcement | +| Remote Access | 3-step procedure (request/approve/monitor), VPN+MFA, high-risk assets remote-access-denied by default | +| Monitoring | Failed login alerts to SOC, audit log analysis, access log review | + +## IA — Identification & Authentication (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IA-01 | Identification & Authentication | Prevent unauthorized access and credential theft | Unique identifiers for users/processes/devices, password complexity (upper+lower+special+number, 8+ chars), cryptographic protection, reuse prevention | +| IA-02 | Multi-Factor Authentication | Strengthen privileged account authentication, prevent replay attacks | MFA for privileged network access, replay attack prevention (challenge-response/timestamp) | + +### IA Protection Measures + +| Measure | Detail | +|---------|--------| +| Password Policy | Min 8 chars, 3+ character types, 90-day rotation, history check (last 5) | +| MFA Methods | OTP, certificate, biometric — at least 2 factors required | +| Replay Prevention | Challenge-response protocol, timestamp-based token validation | +| Credential Storage | Hashed (SHA-256+), no plaintext storage, encrypted transmission | + +## Total: 14 Items (AC: 12 + IA: 2) diff --git a/skills/kesekit-check/templates/space-security/governance.md b/skills/kesekit-check/templates/space-security/governance.md new file mode 100644 index 0000000..3ff7049 --- /dev/null +++ b/skills/kesekit-check/templates/space-security/governance.md @@ -0,0 +1,90 @@ +# Governance, Personnel, Physical & Risk Checklist + +> Domains: PS (2) + PE (3) + RA (2) + SG (4) + CP (2) = 13 items + +## PS — Personnel Security (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PS-01 | Personnel Security | Control insider threats, prevent unauthorized personnel access | Background check on hiring, access review/revocation on role change/termination, disciplinary procedures | +| PS-02 | Security Awareness Training | Prevent security incidents, strengthen role-based security competency | Awareness activities, professional training plans, annual execution including contractors | + +### PS Protection Measures + +| Measure | Detail | +|---------|--------| +| Background Check | Resume/education/identity verification before hiring | +| Termination | Immediate access revocation, asset return, NDA enforcement | +| Training | Annual minimum, phishing simulation, role-specific curriculum, contractor inclusion | + +## PE — Physical & Environmental Security (3 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PE-01 | Physical Access Control | Block unauthorized physical access, ensure asset integrity | Entry control/monitoring, visitor escort, access log retention, control device management | +| PE-02 | Alternate Work Site Security | Maintain confidentiality in alternate work environments | Security control standards, work device security, secure remote access | +| PE-03 | Protective Equipment Operation | Ensure physical safety against environmental threats | Equipment inspection, environmental controls (temperature/humidity/fire/water/power) | + +### PE Protection Measures + +| Category | Measures | +|----------|----------| +| Access Zones | Controlled/restricted/reception areas designated, card reader/biometric, CCTV | +| Visitor Policy | Escort required, visitor log, temporary badge | +| Alternate Sites | Home/travel/remote office classification, organization-issued device, VPN+MFA | +| Environmental | UPS/emergency generator/dual power, 10-32C server room, fire detection/suppression, periodic inspection | + +## RA — Risk Assessment & Security Evaluation (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| RA-01 | Risk Assessment | Identify, assess, and manage organizational risks | Risk management framework, periodic assessment (annual+) | +| RA-02 | Security Control Monitoring & Effectiveness | Ensure continuous security control effectiveness | Effectiveness evaluation framework, periodic review/update | + +### RA Protection Measures + +| Measure | Detail | +|---------|--------| +| Assessment Method | Baseline/detailed/combined approach, management/technical/physical/legal domains | +| Frequency | Annual minimum, ad-hoc on major changes | +| Metrics | KPI/security performance indicators: violation rate, infection rate, scanning completion rate | +| Responsibility | Designated monitoring officer, management reporting | + +## SG — Security Governance (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SG-01 | Security Policy Establishment | Ensure policy effectiveness and currency | Top-level policy creation/approval/dissemination, periodic review/update, improvement plans | +| SG-02 | Security Roles & Responsibilities | Clarify security accountability | CISO designation, role/responsibility assignment/review | +| SG-03 | Asset Management | Maintain asset integrity and security posture | Asset identification/inventory/updates, classification/owner assignment | +| SG-04 | Legal Requirements Compliance | Ensure regulatory compliance | Legal requirements identification/integration, independent compliance review | + +### SG Key Regulations + +| Regulation | Relevance | +|-----------|-----------| +| Personal Information Protection Act | Data collected by satellite services | +| ICT Infrastructure Protection Act | CII designation for space systems | +| Radio Waves Act | Satellite frequency management | +| Space Development Promotion Act | Space industry regulations | +| Cloud Computing Act | GSaaS cloud infrastructure | +| NIS2 (EU) | Space as essential service sector | +| CMMC (US) | Defense supply chain requirements | + +## CP — Contingency Planning (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| CP-01 | Contingency Plan | Ensure space system operational continuity | Disaster type identification, impact analysis, critical service identification, recovery procedures | +| CP-02 | Backup & Redundancy Management | Ensure critical information/system availability | Periodic backup, safe storage, regular testing, system redundancy | + +### CP Protection Measures + +| Measure | Detail | +|---------|--------| +| RTO/RPO | Define for each critical service (satellite control, MOC, PCC) | +| Backup Plan | Target/frequency/retention/method defined, backup confidentiality/integrity/availability verified | +| Redundancy | Network/system dual paths, failover testing | +| BCP | Business continuity management system, emergency contact chain, recovery organization | + +## Total: 13 Items (PS: 2 + PE: 3 + RA: 2 + SG: 4 + CP: 2) diff --git a/skills/kesekit-check/templates/space-security/operations.md b/skills/kesekit-check/templates/space-security/operations.md new file mode 100644 index 0000000..d1a2d0d --- /dev/null +++ b/skills/kesekit-check/templates/space-security/operations.md @@ -0,0 +1,47 @@ +# Operations & Incident Response Checklist + +> Domains: SO (System/Service Operations Management, 9 items) + IR (Incident Response, 2 items) + +## SO — System/Service Operations Management (9 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SO-01 | Maintenance Control | Control maintenance personnel, tools, and remote access | Work request/approval/logging, NDA, media sanitization, VPN+MFA for remote maintenance | +| SO-02 | System Audit & Log Analysis | Detect unauthorized/abnormal activities, ensure accountability | Audit log generation/retention, tamper protection, restricted admin access, integrated analysis/reporting | +| SO-03 | Time Synchronization | Ensure audit log accuracy and reliability | NTP standard time sync, internal NTP server, periodic verification | +| SO-04 | Portable Storage Security | Protect storage media confidentiality/integrity | Classification marking, encrypted transfer, unauthorized media control, secure disposal | +| SO-05 | Configuration Management | Establish configuration baselines, maintain integrity | HW/SW/FW baseline identification, security configuration documentation, periodic monitoring | +| SO-06 | Security Requirements Definition | Define security requirements from planning phase | Authentication/access control/encryption/logging requirements in RFP, secure coding standards | +| SO-07 | Change Management | Ensure integrity during system/application changes | Change review/approval/recording, pre-change security impact analysis, access restrictions | +| SO-08 | Development Testing & Evaluation | Verify security requirement implementation | Acceptance testing, source code verification, vulnerability scanning in production-equivalent environment | +| SO-09 | Function Minimization & SW Control | Remove unnecessary features, control unauthorized software | Essential functions only, blacklist/whitelist policies, disable DHCP/Print Spooler etc., block P2P/webhard | + +### SO Protection Measures Summary + +| Category | Key Actions | +|----------|-------------| +| Maintenance | Approved personnel only, clean PC with AV scan, media control, session recording | +| Logging | All systems generate audit logs, tamper-proof storage, min 1-year retention, weekly review | +| Media Control | USB port lock, media control solution, encrypted transport, overwrite-based disposal | +| Configuration | Baseline registry/account/network settings, monthly drift detection, rollback capability | +| Secure Development | Security requirements in RFP, secure coding per language (Java/PHP/ASP/C), code review | +| Change Control | Formal approval process, security impact analysis, revision history, pre/post testing | + +## IR — Incident Response (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IR-01 | Incident Handling & Testing | Minimize damage and enable rapid recovery | Incident classification, detection/response/recovery procedures, post-incident review, periodic drills | +| IR-02 | Incident Reporting | Enable consistent response through timely reporting | Internal reporting chain, regulatory notification, stakeholder communication | + +### IR Protection Measures + +| Measure | Detail | +|---------|--------| +| Incident Types | Malware, unauthorized access, service disruption, data breach, physical compromise | +| Response Phases | Preparation > Detection > Investigation > Analysis > Containment > Eradication > Recovery | +| Reporting Timeline | Internal: immediate; KISA: within 24 hours (per ICT Infrastructure Act Art.48-3); NIS2: 24h/72h/1month staged | +| Emergency Contacts | Quarterly review, 24/7 contact chain, regulatory liaison designated | +| Testing | Annual tabletop exercise, biannual red team drill, post-exercise lessons learned | + +## Total: 11 Items (SO: 9 + IR: 2) diff --git a/skills/kesekit-check/templates/space-security/supply-chain.md b/skills/kesekit-check/templates/space-security/supply-chain.md new file mode 100644 index 0000000..750fe6f --- /dev/null +++ b/skills/kesekit-check/templates/space-security/supply-chain.md @@ -0,0 +1,47 @@ +# Supply Chain Management Checklist + +> Domain: SM (Supply Chain Management, 4 items) + +## SM — Supply Chain Management (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SM-01 | Supply Chain Protection | Identify and mitigate supply chain risks | Supply chain security policy, vendor selection criteria/contract security requirements, vendor registry updates | +| SM-02 | Pre-Acquisition Evaluation | Prevent vulnerable assets from entering operations | Pre-acquisition/update vulnerability scanning, acceptance testing, counterfeit inspection | +| SM-03 | All-Source Information Use | Achieve software transparency through SBOM | Require SBOM from suppliers, use SBOM for transparency/continuous management | +| SM-04 | Tampering/Counterfeiting Prevention & Detection | Detect and block supply chain tampering | Verify vendor development/distribution integrity, acceptance/operations integrity verification | + +### SM Protection Measures + +| Category | Measures | +|----------|----------| +| Contract Security | Training/incident notification/vulnerability remediation/audit rights/data disposal on termination in contracts | +| SBOM Management | SPDX/CycloneDX standard format, open-source/commercial SW identification, CVE periodic scanning | +| Integrity Verification | Hash value/digital signature verification, SBOM-based impact identification on new vulnerabilities | +| Vendor Management | Periodic vendor security audits, vendor registry maintenance, conditional acceptance criteria | + +## Supply Chain Architecture (3 Zones) + +### Satellite/Launch Vehicle Manufacturer +| Component | Security Focus | +|-----------|---------------| +| SW Development Server | IDE plugin verification, malware scanning | +| Library DB | Open-source library verification, vulnerability scanning | +| Code DB | Source code integrity, access control | +| Manufacturing Systems | Satellite bus, payload, launch vehicle manufacturing integrity | + +### Ground Station Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Control System | Build pipeline security, backdoor prevention | +| SW Development Server | Secure development environment | +| SW Update Server | Update file integrity verification, secure transmission | +| Library/Code DB | Vulnerable open-source blocking, SBOM verification | + +### Satellite Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Application System | Hard-coded credential prevention | +| SW Development Server | Remote work environment security | +| Data Processing System | Maintenance account management | +| Library/Code DB | Auto-build malicious open-source prevention | diff --git a/skills/kesekit-check/templates/space-security/system-security.md b/skills/kesekit-check/templates/space-security/system-security.md new file mode 100644 index 0000000..7297ada --- /dev/null +++ b/skills/kesekit-check/templates/space-security/system-security.md @@ -0,0 +1,46 @@ +# System & Communication Security Checklist + +> Domains: SC (System & Communication Security, 7 items) + SI (System & Information Integrity, 4 items) + +## SC — System & Communication Security (7 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SC-01 | Boundary Protection | Block unauthorized communications at boundaries | Network segmentation, DMZ deployment, communication encryption/monitoring, deny-all ACL | +| SC-02 | Security Engineering & Function Separation | Defense-in-depth, eliminate single points of failure | Security engineering principles, admin/user function separation, Secure by Design | +| SC-03 | Stored & Transmitted Information Security | Protect command/telemetry/log confidentiality and integrity | Storage encryption, uplink/downlink encryption, shared resource protection | +| SC-04 | Communication Security | Establish/maintain/terminate secure sessions | Default deny policy, authenticated/integrity-checked channels, session timeout | +| SC-05 | Encryption | Apply cryptographic algorithms and manage keys | Approved algorithms, key lifecycle management (create/distribute/store/retire) | +| SC-06 | Collaborative Computing Devices | Prevent remote camera/mic activation, prevent leaks | Device inventory, remote activation blocked, LED indicator required | +| SC-07 | Mobile Code & VoIP Control | Prevent malicious code execution and unauthorized VoIP | Mobile code execution control, VoIP usage restriction, monitoring | + +### SC Protection Measures + +| Category | Measures | +|----------|----------| +| Network Segmentation | Physical/logical separation, DMZ for public servers, satellite-control/operations/internet isolation | +| Encryption Standards | AES-256/ARIA-256, TLS 1.2+, IPsec VPN, CCSDS 352.0-B-2 for space systems | +| Integrity Verification | Digital signatures, HMAC, memory/buffer initialization | +| Session Management | mTLS, split-tunneling blocked, session ID rotation, 2-30 min timeout | +| Cryptographic Keys | AES-256, SHA-256+, RSA-4096+; PROHIBIT TDEA/MD5/SHA-1; full key lifecycle management | +| Code Control | ActiveX/Java Runtime disabled, script whitelisting, signed code only, SRTP for VoIP | + +## SI — System & Information Integrity (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SI-01 | Vulnerability Scanning & Flaw Remediation | Identify and fix system/application vulnerabilities | Periodic scanning, immediate scan on new vulnerabilities, flaw identification/remediation/reporting | +| SI-02 | Malicious Code Prevention | Prevent virus/worm/ransomware infiltration | Anti-malware on all systems, periodic/real-time scanning, signature updates | +| SI-03 | Security Alerts & Advisories | Monitor and respond to security alerts | Continuous monitoring of KISA/NCSC/CISA/NIST NVD, impact analysis, patch/hardening | +| SI-04 | System & Communication Traffic Monitoring | Detect abnormal traffic in real-time | Monitoring policy, inbound/outbound monitoring, result analysis/response | + +### SI Protection Measures + +| Measure | Detail | +|---------|--------| +| Vulnerability Management | Network/server/security/app/web scanning, CWE/CVE-based, prioritized remediation | +| Anti-Malware | Enterprise AV on all assets, daily+ updates, P2P/webhard blocked, central management | +| Alert Monitoring | RSS/email subscription to KISA/CISA/NVD, internal notification chain, patch within SLA | +| Traffic Monitoring | IDS/IPS at boundaries, access/security/network log integration, automated alerting | + +## Total: 11 Items (SC: 7 + SI: 4) diff --git a/skills/kesekit-check/templates/zero-trust/app-data.md b/skills/kesekit-check/templates/zero-trust/app-data.md new file mode 100644 index 0000000..f8d1195 --- /dev/null +++ b/skills/kesekit-check/templates/zero-trust/app-data.md @@ -0,0 +1,162 @@ +# Application & Data Checklist + +> Zero Trust Maturity Assessment — Application (AP) & Data (DA) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## AP — 애플리케이션 및 워크로드 (Application) (60 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AP-01 | 리소스 권한 부여 및 통합 | 접근에 대한 사용자/시스템 권한을 수동으로 관리하는가? | Traditional | Critical | +| ZT-AP-02 | 리소스 권한 부여 및 통합 | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | Traditional | Critical | +| ZT-AP-03 | 리소스 권한 부여 및 통합 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | Initial | High | +| ZT-AP-04 | 리소스 권한 부여 및 통합 | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | Initial | High | +| ZT-AP-05 | 리소스 권한 부여 및 통합 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-06 | 리소스 권한 부여 및 통합 | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-07 | 리소스 권한 부여 및 통합 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | Optimal | Low | +| ZT-AP-08 | 리소스 권한 부여 및 통합 | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | Optimal | Low | +| ZT-AP-09 | 리소스 권한 부여 및 통합 | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | Optimal | Low | +| ZT-AP-10 | 리소스 권한 부여 및 통합 | 모든 리소스 권한 부여가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-11 | 지속적인 모니터링 및 진행 중인 승인 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | Traditional | Critical | +| ZT-AP-12 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-AP-13 | 지속적인 모니터링 및 진행 중인 승인 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | Initial | High | +| ZT-AP-14 | 지속적인 모니터링 및 진행 중인 승인 | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | Initial | High | +| ZT-AP-15 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | Advanced | Medium | +| ZT-AP-16 | 지속적인 모니터링 및 진행 중인 승인 | 보안 승인 프로세스를 자동화할 수 있는가? | Advanced | Medium | +| ZT-AP-17 | 지속적인 모니터링 및 진행 중인 승인 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | Optimal | Low | +| ZT-AP-18 | 원격 접속 | VPN을 통해서 외부 접속을 지원하는가? | Traditional | Critical | +| ZT-AP-19 | 원격 접속 | 애플리케이션에 대한 접근제어가 제한적인가? | Traditional | Critical | +| ZT-AP-20 | 원격 접속 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | Initial | High | +| ZT-AP-21 | 원격 접속 | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | Advanced | Medium | +| ZT-AP-22 | 원격 접속 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | Advanced | Medium | +| ZT-AP-23 | 원격 접속 | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | Optimal | Low | +| ZT-AP-24 | 원격 접속 | AI를 활용하여 원격 접속 보안을 고도화 하였는가? | Optimal | Low | +| ZT-AP-25 | 원격 접속 | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | Optimal | Low | +| ZT-AP-26 | 안전한 애플리케이션 배포 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | Traditional | Critical | +| ZT-AP-27 | 안전한 애플리케이션 배포 | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | Traditional | Critical | +| ZT-AP-28 | 안전한 애플리케이션 배포 | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | Traditional | Critical | +| ZT-AP-29 | 안전한 애플리케이션 배포 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | Initial | High | +| ZT-AP-30 | 안전한 애플리케이션 배포 | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | Initial | High | +| ZT-AP-31 | 안전한 애플리케이션 배포 | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | Initial | High | +| ZT-AP-32 | 안전한 애플리케이션 배포 | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | Initial | High | +| ZT-AP-33 | 안전한 애플리케이션 배포 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | Advanced | Medium | +| ZT-AP-34 | 안전한 애플리케이션 배포 | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | Advanced | Medium | +| ZT-AP-35 | 안전한 애플리케이션 배포 | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | Advanced | Medium | +| ZT-AP-36 | 안전한 애플리케이션 배포 | 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | Advanced | Medium | +| ZT-AP-37 | 안전한 애플리케이션 배포 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | Optimal | Low | +| ZT-AP-38 | 안전한 애플리케이션 배포 | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | Optimal | Low | +| ZT-AP-39 | 애플리케이션 인벤토리 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | Traditional | Critical | +| ZT-AP-40 | 애플리케이션 인벤토리 | 애플리케이션 기본 정보를 기록하여 관리하는가? | Traditional | Critical | +| ZT-AP-41 | 애플리케이션 인벤토리 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | Initial | High | +| ZT-AP-42 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가/관리할 수 있는가? | Advanced | Medium | +| ZT-AP-43 | 애플리케이션 인벤토리 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | Optimal | Low | +| ZT-AP-44 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-AP-45 | 보안 소프트웨어 개발 및 통합 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | Traditional | Critical | +| ZT-AP-46 | 보안 소프트웨어 개발 및 통합 | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | Traditional | Critical | +| ZT-AP-47 | 보안 소프트웨어 개발 및 통합 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | Initial | High | +| ZT-AP-48 | 보안 소프트웨어 개발 및 통합 | DevSecOps 문화를 도입하였는가? | Initial | High | +| ZT-AP-49 | 보안 소프트웨어 개발 및 통합 | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | Initial | High | +| ZT-AP-50 | 보안 소프트웨어 개발 및 통합 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | Advanced | Medium | +| ZT-AP-51 | 보안 소프트웨어 개발 및 통합 | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | Advanced | Medium | +| ZT-AP-52 | 보안 소프트웨어 개발 및 통합 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | Optimal | Low | +| ZT-AP-53 | 보안 소프트웨어 개발 및 통합 | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | Optimal | Low | +| ZT-AP-54 | 보안 소프트웨어 개발 및 통합 | 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-55 | 소프트웨어 위험 관리 | 최소한의 위험 요소가 식별되고 문서화 하였는가? | Traditional | Critical | +| ZT-AP-56 | 소프트웨어 위험 관리 | 소프트웨어 위험 관리 계획이 수립되어 있는가? | Traditional | Critical | +| ZT-AP-57 | 소프트웨어 위험 관리 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | Initial | High | +| ZT-AP-58 | 소프트웨어 위험 관리 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | Advanced | Medium | +| ZT-AP-59 | 소프트웨어 위험 관리 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | Optimal | Low | +| ZT-AP-60 | 소프트웨어 위험 관리 | 맞춤형 공격에 대응 가능한가? | Optimal | Low | + +### AP Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 리소스 권한 부여 및 통합 | 수동 권한 관리, 정적 접근제어 | 중앙 집중식 관리 | 컨텍스트 기반 최소 권한, 정밀 관리 | 실시간 분석, 자동 권한 부여/회수, 완전 자동화 | +| 지속적인 모니터링 및 승인 | 수동 모니터링, 수동 이벤트 기록 | 실시간 이벤트 수집/분석, 보안 검토 | AI 분석, 승인 자동화 | 실시간 탐지, 위협 사전 예측 | +| 원격 접속 | VPN 외부 접속, 제한적 접근제어 | 자동 보안 상태 평가 | 실시간 모니터링, 맞춤형 정책 | 동적 보안 정책, AI 고도화, 즉각 차단 | +| 안전한 애플리케이션 배포 | 수동 코드 검토, 배포 절차, 접근제어 | 자동화 파이프라인, CI/CD 취약점 검사, 무결성 검사 | 지속적 모니터링, 정책 자동 검증, 즉각 대응 | 완전 자동 배포, AI 위협 탐지 통합 | +| 애플리케이션 인벤토리 | 수동 목록화, 기본 정보 기록 | 자동 식별/관리 | 보안 상태 평가/관리 | AI 실시간 반영, 보안 시스템 통합 | +| 보안 SW 개발 및 통합 | 보안 코딩 표준, 수동 테스트 | SDLC 통합, DevSecOps, SBOM | 서드파티 자동 검사, 전체 SBOM | 프로세스 격리, 런타임 분석, 완전 자동화 | +| 소프트웨어 위험 관리 | 위험 식별/문서화, 관리 계획 | 위험 평가 프로세스 | 공급망 보안, 전주기 자동화 | AI 예측 분석, 맞춤형 공격 대응 | + +--- + +## DA — 데이터 (Data) (58 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DA-01 | 데이터 카탈로그 위험 정렬 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | Traditional | Critical | +| ZT-DA-02 | 데이터 카탈로그 위험 정렬 | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | Traditional | Critical | +| ZT-DA-03 | 데이터 카탈로그 위험 정렬 | 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | Traditional | Critical | +| ZT-DA-04 | 데이터 카탈로그 위험 정렬 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | Initial | High | +| ZT-DA-05 | 데이터 카탈로그 위험 정렬 | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | Initial | High | +| ZT-DA-06 | 데이터 카탈로그 위험 정렬 | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | Initial | High | +| ZT-DA-07 | 데이터 카탈로그 위험 정렬 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | Advanced | Medium | +| ZT-DA-08 | 데이터 카탈로그 위험 정렬 | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-DA-09 | 데이터 카탈로그 위험 정렬 | 데이터 사용 패턴 분석이 가능한가? | Advanced | Medium | +| ZT-DA-10 | 데이터 카탈로그 위험 정렬 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | Optimal | Low | +| ZT-DA-11 | 데이터 카탈로그 위험 정렬 | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | Optimal | Low | +| ZT-DA-12 | 기업 데이터 거버넌스 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | Traditional | Critical | +| ZT-DA-13 | 기업 데이터 거버넌스 | 데이터 소유자와 관리자를 지정하였는가? | Traditional | Critical | +| ZT-DA-14 | 기업 데이터 거버넌스 | 데이터 거버넌스 프레임워크가 도입되어 있는가? | Traditional | Critical | +| ZT-DA-15 | 기업 데이터 거버넌스 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | Initial | High | +| ZT-DA-16 | 기업 데이터 거버넌스 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | Advanced | Medium | +| ZT-DA-17 | 기업 데이터 거버넌스 | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | Advanced | Medium | +| ZT-DA-18 | 기업 데이터 거버넌스 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | Optimal | Low | +| ZT-DA-19 | 데이터 접근제어 | 데이터 접근 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-20 | 데이터 접근제어 | 데이터 접근권한이 수동으로 부여되는가? | Traditional | Critical | +| ZT-DA-21 | 데이터 접근제어 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-22 | 데이터 접근제어 | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | Initial | High | +| ZT-DA-23 | 데이터 접근제어 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | Advanced | Medium | +| ZT-DA-24 | 데이터 접근제어 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-25 | 데이터 암호화 및 권한 관리 | 데이터를 수동으로 암호화하는가? | Traditional | Critical | +| ZT-DA-26 | 데이터 암호화 및 권한 관리 | 암호화 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-27 | 데이터 암호화 및 권한 관리 | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-28 | 데이터 암호화 및 권한 관리 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | Initial | High | +| ZT-DA-29 | 데이터 암호화 및 권한 관리 | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-30 | 데이터 암호화 및 권한 관리 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | Advanced | Medium | +| ZT-DA-31 | 데이터 암호화 및 권한 관리 | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | Advanced | Medium | +| ZT-DA-32 | 데이터 암호화 및 권한 관리 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-33 | 데이터 암호화 및 권한 관리 | 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | Optimal | Low | +| ZT-DA-34 | 데이터 라벨링 및 태그 지정 | 라벨링 및 태그 지정 지침을 수립하였는가? | Traditional | Critical | +| ZT-DA-35 | 데이터 라벨링 및 태그 지정 | 일관된 데이터 분류 체계가 마련되어 있는가? | Traditional | Critical | +| ZT-DA-36 | 데이터 라벨링 및 태그 지정 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별/분류하는가? | Initial | High | +| ZT-DA-37 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | Initial | High | +| ZT-DA-38 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | Initial | High | +| ZT-DA-39 | 데이터 라벨링 및 태그 지정 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류/식별 가능한가? | Advanced | Medium | +| ZT-DA-40 | 데이터 라벨링 및 태그 지정 | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | Advanced | Medium | +| ZT-DA-41 | 데이터 라벨링 및 태그 지정 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | Optimal | Low | +| ZT-DA-42 | 데이터 라벨링 및 태그 지정 | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | Optimal | Low | +| ZT-DA-43 | 데이터 손실 방지 (DLP) | DLP 정책을 수립하고 수동으로 평가하는가? | Traditional | Critical | +| ZT-DA-44 | 데이터 손실 방지 (DLP) | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | Traditional | Critical | +| ZT-DA-45 | 데이터 손실 방지 (DLP) | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | Initial | High | +| ZT-DA-46 | 데이터 손실 방지 (DLP) | DLP 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-DA-47 | 데이터 손실 방지 (DLP) | DLP 솔루션이 모니터링 모드로 동작하는가? | Initial | High | +| ZT-DA-48 | 데이터 손실 방지 (DLP) | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | Advanced | Medium | +| ZT-DA-49 | 데이터 손실 방지 (DLP) | DLP 솔루션이 방지 모드로 사용되는가? | Advanced | Medium | +| ZT-DA-50 | 데이터 손실 방지 (DLP) | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | Optimal | Low | +| ZT-DA-51 | 데이터 손실 방지 (DLP) | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | Optimal | Low | +| ZT-DA-52 | 데이터 모니터링 및 감지 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | Traditional | Critical | +| ZT-DA-53 | 데이터 모니터링 및 감지 | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-54 | 데이터 모니터링 및 감지 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | Initial | High | +| ZT-DA-55 | 데이터 모니터링 및 감지 | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | Initial | High | +| ZT-DA-56 | 데이터 모니터링 및 감지 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-DA-57 | 데이터 모니터링 및 감지 | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | Advanced | Medium | +| ZT-DA-58 | 데이터 모니터링 및 감지 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | Optimal | Low | + +### DA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 데이터 카탈로그 위험 정렬 | 초기 카탈로그, 수동 분류, 위험 평가 문서화 | 자동 카탈로그, 자동 수집/분류, 기준 마련 | 민감도 분석, 보호 정책, 패턴 분석 | AI 실시간 분석, 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 정책 수립, 소유자 지정, 프레임워크 | 정기적 감사/검토 | 자동화, 실시간 모니터링 | 전체 시스템 통합 관리 | +| 데이터 접근제어 | 접근 정책 수립, 수동 권한 부여 | 중앙 집중식, 최소 권한 확인 | ABAC 컨텍스트 기반 | AI 실시간 권한 조정 | +| 데이터 암호화 및 권한 관리 | 수동 암호화, 정책 수립, 초기 관리 체계 | 자동 암호화, 중앙 집중식 관리 | 고급 암호화, RBAC+ABAC | AI 기반 최적화, 실시간 마스킹 | +| 데이터 라벨링 및 태그 지정 | 지침 수립, 분류 체계 마련 | 수동 라벨링, 특수 라벨, 차등 정책 | 자동 분류, 보안 시스템 연계 | 고급 메타데이터, AI 자동 조정 | +| 데이터 손실 방지 (DLP) | DLP 정책, 범위 지정 | DLP 도입, 중앙 관리, 모니터링 모드 | 전체 도입, 방지 모드 | AI 예측/차단, 자동 정책 최적화 | +| 데이터 모니터링 및 감지 | 수동 모니터링, 프로세스 수립 | 자동 감시, 정책 조정 | 이상 징후 탐지, 보안 시스템 연계 | 지속 평가, 컨텍스트 최소 접근제어 | + +--- + +## Total: 118 Items (AP: 60 + DA: 58) diff --git a/skills/kesekit-check/templates/zero-trust/identity-device.md b/skills/kesekit-check/templates/zero-trust/identity-device.md new file mode 100644 index 0000000..80e1800 --- /dev/null +++ b/skills/kesekit-check/templates/zero-trust/identity-device.md @@ -0,0 +1,133 @@ +# Identity & Device Checklist + +> Zero Trust Maturity Assessment — Identity (ID) & Device (DV) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## ID — 식별자 및 신원 (Identity) (53 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-ID-01 | 사용자 인벤토리 | 사용자 목록에 대한 문서화가 되어있는가? | Traditional | Critical | +| ZT-ID-02 | 사용자 인벤토리 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | Initial | High | +| ZT-ID-03 | 사용자 인벤토리 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | Advanced | Medium | +| ZT-ID-04 | 사용자 인벤토리 | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | Advanced | Medium | +| ZT-ID-05 | 사용자 인벤토리 | AI 기반 사용자 행동에 따른 관리가 되는가? | Optimal | Low | +| ZT-ID-06 | 사용자 인벤토리 | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | Optimal | Low | +| ZT-ID-07 | ID 연계 및 사용자 자격 증명 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-08 | ID 연계 및 사용자 자격 증명 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | Initial | High | +| ZT-ID-09 | ID 연계 및 사용자 자격 증명 | ID 통합 관리 시스템이 구축되어 있는가? | Advanced | Medium | +| ZT-ID-10 | ID 연계 및 사용자 자격 증명 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | Optimal | Low | +| ZT-ID-11 | 다중인증 (MFA) | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-12 | 다중인증 (MFA) | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | Initial | High | +| ZT-ID-13 | 다중인증 (MFA) | FIDO 기반 인증 기법이 적용되어 있는가? | Initial | High | +| ZT-ID-14 | 다중인증 (MFA) | 상황에 따른 맞춤형 MFA가 지원 가능한가? | Advanced | Medium | +| ZT-ID-15 | 다중인증 (MFA) | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-16 | 다중인증 (MFA) | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | Optimal | Low | +| ZT-ID-17 | 지속 인증 | 세션 기반 인증이 수행되는가? | Traditional | Critical | +| ZT-ID-18 | 지속 인증 | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | Traditional | Critical | +| ZT-ID-19 | 지속 인증 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-20 | 지속 인증 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | Advanced | Medium | +| ZT-ID-21 | 지속 인증 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | Optimal | Low | +| ZT-ID-22 | 통합 ICAM 플랫폼 | ICAM 시스템이 구축되어 있는가? | Traditional | Critical | +| ZT-ID-23 | 통합 ICAM 플랫폼 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | Initial | High | +| ZT-ID-24 | 통합 ICAM 플랫폼 | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | Initial | High | +| ZT-ID-25 | 통합 ICAM 플랫폼 | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | Initial | High | +| ZT-ID-26 | 통합 ICAM 플랫폼 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | Advanced | Medium | +| ZT-ID-27 | 통합 ICAM 플랫폼 | ICAM 플랫폼이 자동화되어 있는가? | Advanced | Medium | +| ZT-ID-28 | 통합 ICAM 플랫폼 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | Optimal | Low | +| ZT-ID-29 | 통합 ICAM 플랫폼 | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | Optimal | Low | +| ZT-ID-30 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-31 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자 행동 패턴이 수동으로 분석되는가? | Traditional | Critical | +| ZT-ID-32 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | Initial | High | +| ZT-ID-33 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 컨텍스트 정보 기반 접근권한이 조정되는가? | Initial | High | +| ZT-ID-34 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | Advanced | Medium | +| ZT-ID-35 | 행동, 컨텍스트 기반 ID 및 생체 인식 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | Optimal | Low | +| ZT-ID-36 | 조건부 사용자 접근 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | Traditional | Critical | +| ZT-ID-37 | 조건부 사용자 접근 | 조건부 접근 정책에 대한 개념을 정의하였는가? | Traditional | Critical | +| ZT-ID-38 | 조건부 사용자 접근 | 시스템 별 각기 다른 접속 관리 기능이 있는가? | Traditional | Critical | +| ZT-ID-39 | 조건부 사용자 접근 | 특정 조건에 따른 사용자 접근제어가 가능한가? | Initial | High | +| ZT-ID-40 | 조건부 사용자 접근 | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | Initial | High | +| ZT-ID-41 | 조건부 사용자 접근 | 세션별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-42 | 조건부 사용자 접근 | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-43 | 조건부 사용자 접근 | 리소스별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-44 | 조건부 사용자 접근 | 동적 접근 정책을 실시간으로 적용 가능한가? | Optimal | Low | +| ZT-ID-45 | 조건부 사용자 접근 | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | Optimal | Low | +| ZT-ID-46 | 최소 권한 접근 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | Traditional | Critical | +| ZT-ID-47 | 최소 권한 접근 | 권한 부여에 대한 절차가 문서화 되어 있는가? | Traditional | Critical | +| ZT-ID-48 | 최소 권한 접근 | 권한 부여 절차가 표준화 되어 있는가? | Initial | High | +| ZT-ID-49 | 최소 권한 접근 | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-50 | 최소 권한 접근 | 자동화된 권한 상승이 가능한가? | Advanced | Medium | +| ZT-ID-51 | 최소 권한 접근 | 권한 관리 정책이 지속적으로 업데이트 되는가? | Advanced | Medium | +| ZT-ID-52 | 최소 권한 접근 | 권한 관리가 동적으로 변경 가능한가? | Optimal | Low | +| ZT-ID-53 | 최소 권한 접근 | 최소 권한 원칙이 실시간으로 조정 가능한가? | Optimal | Low | + +### ID Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 사용자 인벤토리 | 사용자 목록 문서화 | 역할별 상세 인벤토리 | 자동화 관리, 비정상 활동 탐지 | AI 기반 관리, 통합 최적화 | +| ID 연계 및 사용자 자격 증명 | ID 연계 솔루션 적용 | 시스템 간 연동 | 통합 관리 시스템 | 글로벌 수준 연계 | +| 다중인증 (MFA) | 패스워드+SMS/이메일 MFA | 인증 앱/토큰, FIDO | 맞춤형 MFA, 컨텍스트 인증 | 비정상 로그인 실시간 탐지 | +| 지속 인증 | 세션 기반 인증, 상태 모니터링 | 세션 중간 추가 인증 | 동적 인증 기술 | 자동 재인증, 실시간 검증 | +| 통합 ICAM 플랫폼 | ICAM 시스템 구축 | 중앙 관리, 정책 표준화, 위험도 평가 | 시스템 통합 안정화, 자동화 | AI 기반 보안 강화, 실시간 ID 위험 평가 | +| 행동/컨텍스트 기반 ID 및 생체 인식 | 기본 생체 인식, 수동 행동 분석 | 통합 인증, 컨텍스트 접근권한 | 실시간 접근제어 조정 | AI 기반 행동/생체 인식 | +| 조건부 사용자 접근 | 기초 시스템, 개념 정의, 접속 관리 | 조건부 접근제어, 최소 권한 | 세션/리소스별 권한, 다단계 정책 | 동적 정책, AI 실시간 관리 | +| 최소 권한 접근 | 원칙 정의, 절차 문서화 | 표준화, 변경 관리 시스템 | 자동 권한 상승, 정책 업데이트 | 동적 변경, 실시간 조정 | + +--- + +## DV — 기기 및 엔드포인트 (Device) (40 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DV-01 | 기기 감지 및 규정 준수 | 리소스에 연결된 기기를 식별할 수 있는가? | Traditional | Critical | +| ZT-DV-02 | 기기 감지 및 규정 준수 | 수동으로 규정 준수에 대한 확인이 가능한가? | Traditional | Critical | +| ZT-DV-03 | 기기 감지 및 규정 준수 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | Initial | High | +| ZT-DV-04 | 기기 감지 및 규정 준수 | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | Initial | High | +| ZT-DV-05 | 기기 감지 및 규정 준수 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | Advanced | Medium | +| ZT-DV-06 | 기기 감지 및 규정 준수 | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-DV-07 | 기기 감지 및 규정 준수 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | Optimal | Low | +| ZT-DV-08 | 기기 감지 및 규정 준수 | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | Optimal | Low | +| ZT-DV-09 | 실시간 검사를 통한 기기 권한 부여 | 자산 접근 기기에 대한 정보가 수집되는가? | Traditional | Critical | +| ZT-DV-10 | 실시간 검사를 통한 기기 권한 부여 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | Initial | High | +| ZT-DV-11 | 실시간 검사를 통한 기기 권한 부여 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | Advanced | Medium | +| ZT-DV-12 | 실시간 검사를 통한 기기 권한 부여 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | Optimal | Low | +| ZT-DV-13 | 실시간 검사를 통한 기기 권한 부여 | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | Optimal | Low | +| ZT-DV-14 | 기기 인벤토리 | 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | Traditional | Critical | +| ZT-DV-15 | 기기 인벤토리 | 주요 기기에 대한 정보를 수집하고 관리하는가? | Traditional | Critical | +| ZT-DV-16 | 기기 인벤토리 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | Initial | High | +| ZT-DV-17 | 기기 인벤토리 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | Advanced | Medium | +| ZT-DV-18 | 기기 인벤토리 | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | Advanced | Medium | +| ZT-DV-19 | 기기 인벤토리 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | Optimal | Low | +| ZT-DV-20 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | Traditional | Critical | +| ZT-DV-21 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 보안 정책을 설정하였는가? | Traditional | Critical | +| ZT-DV-22 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | Initial | High | +| ZT-DV-23 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기기 상태를 지속적으로 모니터링 하는가? | Initial | High | +| ZT-DV-24 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | Advanced | Medium | +| ZT-DV-25 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | Optimal | Low | +| ZT-DV-26 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | 기본적인 EDR 솔루션을 도입하였는가? | Traditional | Critical | +| ZT-DV-27 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | Initial | High | +| ZT-DV-28 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | XDR 솔루션을 도입하였는가? | Advanced | Medium | +| ZT-DV-29 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | AI 기반 EDR/XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | Optimal | Low | +| ZT-DV-30 | 자산, 취약성 및 패치 관리 자동화 | 자산 및 취약성을 수동으로 평가하는가? | Traditional | Critical | +| ZT-DV-31 | 자산, 취약성 및 패치 관리 자동화 | 주요 자산 및 취약성 목록이 작성되어 있는가? | Traditional | Critical | +| ZT-DV-32 | 자산, 취약성 및 패치 관리 자동화 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | Initial | High | +| ZT-DV-33 | 자산, 취약성 및 패치 관리 자동화 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | Advanced | Medium | +| ZT-DV-34 | 자산, 취약성 및 패치 관리 자동화 | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | Advanced | Medium | +| ZT-DV-35 | 자산, 취약성 및 패치 관리 자동화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | Optimal | Low | +| ZT-DV-36 | 자산, 취약성 및 패치 관리 자동화 | 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | Optimal | Low | + +### DV Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 기기 감지 및 규정 준수 | 기기 식별, 수동 규정 확인 | 실시간 탐지, 비준수 경고 | 자동 교정, 접근권한 연동 | 동적 권한 수정, AI 실시간 평가 | +| 실시간 검사를 통한 기기 권한 부여 | 기기 정보 수집 | 수동 검사 수행 | 자동 평가 및 접근 허용 | 접근권한 조정, 보안 시스템 연동 | +| 기기 인벤토리 | 수동 인벤토리, 정보 수집 | 자동화 기록 | 비정상 기기 탐지, 취약점 파악 | 실시간 모니터링, 예측 분석 | +| 통합 엔드포인트/모바일 기기 관리 | 관리 시스템 도입, 보안 정책 설정 | 중앙 관리, 지속 모니터링 | 중앙 자동 적용 | 통합 관리, 자동 위협 대응 | +| EDR 및 XDR | 기본 EDR 도입 | 실시간 탐지/자동 대응 | XDR 도입 | AI 기반 통합 위협 탐지 | +| 자산/취약성/패치 관리 자동화 | 수동 평가, 목록 작성 | 자동 패치 도입 | 지속적 자동화, 시스템 통합 | 사전 식별, 통합 관리 | + +--- + +## Total: 89 Items (ID: 53 + DV: 36) diff --git a/skills/kesekit-check/templates/zero-trust/network-system.md b/skills/kesekit-check/templates/zero-trust/network-system.md new file mode 100644 index 0000000..89cef54 --- /dev/null +++ b/skills/kesekit-check/templates/zero-trust/network-system.md @@ -0,0 +1,145 @@ +# Network & System Checklist + +> Zero Trust Maturity Assessment — Network (NW) & System (SY) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## NW — 네트워크 (Network) (54 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-NW-01 | 매크로 세그멘테이션 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-02 | 매크로 세그멘테이션 | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | Traditional | Critical | +| ZT-NW-03 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | Initial | High | +| ZT-NW-04 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | Initial | High | +| ZT-NW-05 | 매크로 세그멘테이션 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | Advanced | Medium | +| ZT-NW-06 | 매크로 세그멘테이션 | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | Advanced | Medium | +| ZT-NW-07 | 매크로 세그멘테이션 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | Optimal | Low | +| ZT-NW-08 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-09 | 마이크로 세그멘테이션 | 수동으로 세그먼트를 구성하는가? | Traditional | Critical | +| ZT-NW-10 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | Initial | High | +| ZT-NW-11 | 마이크로 세그멘테이션 | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지/차단 할 수 있는가? | Initial | High | +| ZT-NW-12 | 마이크로 세그멘테이션 | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | Initial | High | +| ZT-NW-13 | 마이크로 세그멘테이션 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | Advanced | Medium | +| ZT-NW-14 | 마이크로 세그멘테이션 | 애플리케이션 별 격리 메커니즘이 적용되었는가? | Advanced | Medium | +| ZT-NW-15 | 마이크로 세그멘테이션 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | Optimal | Low | +| ZT-NW-16 | 소프트웨어 정의 네트워킹 | 소프트웨어 정의 네트워크가 도입되어 있는가? | Traditional | Critical | +| ZT-NW-17 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | Traditional | Critical | +| ZT-NW-18 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | Initial | High | +| ZT-NW-19 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | Advanced | Medium | +| ZT-NW-20 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | Optimal | Low | +| ZT-NW-21 | 위협 대응 | IDS/IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | Traditional | Critical | +| ZT-NW-22 | 위협 대응 | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | Traditional | Critical | +| ZT-NW-23 | 위협 대응 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | Initial | High | +| ZT-NW-24 | 위협 대응 | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | Initial | High | +| ZT-NW-25 | 위협 대응 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | Advanced | Medium | +| ZT-NW-26 | 위협 대응 | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | Advanced | Medium | +| ZT-NW-27 | 위협 대응 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | Optimal | Low | +| ZT-NW-28 | 위협 대응 | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | Optimal | Low | +| ZT-NW-29 | 트래픽 암호화 | 내/외부 트래픽 일부 암호화가 가능한가? | Traditional | Critical | +| ZT-NW-30 | 트래픽 암호화 | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | Traditional | Critical | +| ZT-NW-31 | 트래픽 암호화 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | Initial | High | +| ZT-NW-32 | 트래픽 암호화 | 데이터 전송 시 암호화를 필수로 하고 있는가? | Initial | High | +| ZT-NW-33 | 트래픽 암호화 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | Advanced | Medium | +| ZT-NW-34 | 트래픽 암호화 | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | Advanced | Medium | +| ZT-NW-35 | 트래픽 암호화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | Optimal | Low | +| ZT-NW-36 | 트래픽 암호화 | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-NW-37 | 데이터 흐름 매핑 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | Traditional | Critical | +| ZT-NW-38 | 데이터 흐름 매핑 | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | Traditional | Critical | +| ZT-NW-39 | 데이터 흐름 매핑 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | Initial | High | +| ZT-NW-40 | 데이터 흐름 매핑 | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | Initial | High | +| ZT-NW-41 | 데이터 흐름 매핑 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | Advanced | Medium | +| ZT-NW-42 | 데이터 흐름 매핑 | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | Advanced | Medium | +| ZT-NW-43 | 데이터 흐름 매핑 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | Optimal | Low | +| ZT-NW-44 | 데이터 흐름 매핑 | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | Optimal | Low | +| ZT-NW-45 | 네트워크 회복성 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | Traditional | Critical | +| ZT-NW-46 | 네트워크 회복성 | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | Traditional | Critical | +| ZT-NW-47 | 네트워크 회복성 | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | Traditional | Critical | +| ZT-NW-48 | 네트워크 회복성 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | Initial | High | +| ZT-NW-49 | 네트워크 회복성 | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | Initial | High | +| ZT-NW-50 | 네트워크 회복성 | 네트워크 이중화 설계가 되어 있는가? | Initial | High | +| ZT-NW-51 | 네트워크 회복성 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | Advanced | Medium | +| ZT-NW-52 | 네트워크 회복성 | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | Advanced | Medium | +| ZT-NW-53 | 네트워크 회복성 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | Optimal | Low | +| ZT-NW-54 | 네트워크 회복성 | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | Optimal | Low | + +### NW Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 매크로 세그멘테이션 | 영역별 세그멘테이션, 트래픽 흐름 기반 구성 | 보안 정책 적용, 비정상 활동 탐지 | 맞춤형 정책, 위협 대응 | AI 기반 관리 | +| 마이크로 세그멘테이션 | 워크로드 기준 세그멘테이션, 수동 구성 | 보안 정책, 워크로드 이동 탐지/차단, 모니터링 | 정책 설정/제어, 격리 메커니즘 | AI 기반 자동 대응 | +| 소프트웨어 정의 네트워킹 | SDN 도입, 기본 구조 설정 | 중앙 관리, 실시간 정책 | 트래픽 관리/보안 확장 | AI 기반 위협 관리/트래픽 예측 | +| 위협 대응 | IDS/IPS 감시, 정적 규칙 관리 | 자동 탐지/대응, 프로파일 관리 | 선제적 대응, 동적 규칙 | 즉각 자동 대응, 동적 트래픽 관리 | +| 트래픽 암호화 | 일부 암호화, SSL/TLS/VPN | 전반 암호화, 전송 필수 암호화 | 저장 데이터 암호화, 고급 키 관리 | 성능 유지 보호, 통합 키 관리 | +| 데이터 흐름 매핑 | 수동 모니터링, 수동 매핑 | 애플리케이션 단위 매핑, 실시간 매핑 | 비정상 이동 탐지, 상관관계 분석 | AI 예측 분석, 동적 우선순위 | +| 네트워크 회복성 | 복구 계획, 백업, 장애 대응 절차 | 다중 경로, Failover, 이중화 | 지속적 서비스, 주기적 테스트 | 중단 없는 운영, 자동화 복구 | + +--- + +## SY — 시스템 (System) (49 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-SY-01 | 접근통제 | 사용자 및 기기에 수동으로 권한을 부여하는가? | Traditional | Critical | +| ZT-SY-02 | 접근통제 | RBAC 기반 접근제어를 수행하는가? | Traditional | Critical | +| ZT-SY-03 | 접근통제 | 권한 관리를 수동으로 수행하는가? | Traditional | Critical | +| ZT-SY-04 | 접근통제 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | Initial | High | +| ZT-SY-05 | 접근통제 | 실시간 접근권한 부여가 가능한가? | Initial | High | +| ZT-SY-06 | 접근통제 | 권한 변경 사항이 자동으로 반영되는가? | Initial | High | +| ZT-SY-07 | 접근통제 | 특정 리소스에 대한 접근 제한/승인 정책이 자동으로 적용 가능한가? | Initial | High | +| ZT-SY-08 | 접근통제 | ABAC 기반 접근제어를 수행하는가? | Advanced | Medium | +| ZT-SY-09 | 접근통제 | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | Advanced | Medium | +| ZT-SY-10 | 접근통제 | 사용자/기기의 상태를 실시간으로 분석하고 실시간/자동으로 권한 조정이 가능한가? | Optimal | Low | +| ZT-SY-11 | 접근통제 | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | Optimal | Low | +| ZT-SY-12 | 접근통제 | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | Optimal | Low | +| ZT-SY-13 | 접근통제 | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | Optimal | Low | +| ZT-SY-14 | PAM | PAM 시스템을 구축하였는가? | Traditional | Critical | +| ZT-SY-15 | PAM | PAM 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-SY-16 | PAM | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | Initial | High | +| ZT-SY-17 | PAM | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | Initial | High | +| ZT-SY-18 | PAM | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | Advanced | Medium | +| ZT-SY-19 | PAM | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | Optimal | Low | +| ZT-SY-20 | 자격 증명 관리 | 자격 증명이 수동으로 관리되는가? | Traditional | Critical | +| ZT-SY-21 | 자격 증명 관리 | 패스워드에 기반한 인증 방식에 의존하는가? | Traditional | Critical | +| ZT-SY-22 | 자격 증명 관리 | 자격 증명 관리가 체계적이지 않고 수동적인가? | Traditional | Critical | +| ZT-SY-23 | 자격 증명 관리 | 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | Initial | High | +| ZT-SY-24 | 자격 증명 관리 | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | Initial | High | +| ZT-SY-25 | 자격 증명 관리 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | Advanced | Medium | +| ZT-SY-26 | 자격 증명 관리 | 자격 증명 관리 시스템을 고도화하여 관리하는가? | Advanced | Medium | +| ZT-SY-27 | 자격 증명 관리 | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | Advanced | Medium | +| ZT-SY-28 | 자격 증명 관리 | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | Advanced | Medium | +| ZT-SY-29 | 자격 증명 관리 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | Optimal | Low | +| ZT-SY-30 | 자격 증명 관리 | 실시간으로 인증 정책 조정이 가능한가? | Optimal | Low | +| ZT-SY-31 | 자격 증명 관리 | 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | Optimal | Low | +| ZT-SY-32 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | Traditional | Critical | +| ZT-SY-33 | 네트워크 세분화 및 그룹 간 이동 | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | Traditional | Critical | +| ZT-SY-34 | 네트워크 세분화 및 그룹 간 이동 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | Initial | High | +| ZT-SY-35 | 네트워크 세분화 및 그룹 간 이동 | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | Initial | High | +| ZT-SY-36 | 네트워크 세분화 및 그룹 간 이동 | 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | Advanced | Medium | +| ZT-SY-37 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | Advanced | Medium | +| ZT-SY-38 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | Advanced | Medium | +| ZT-SY-39 | 네트워크 세분화 및 그룹 간 이동 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | Optimal | Low | +| ZT-SY-40 | 네트워크 세분화 및 그룹 간 이동 | 재인증 없는 그룹 간 이동이 가능한가? | Optimal | Low | +| ZT-SY-41 | 네트워크 세분화 및 그룹 간 이동 | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | Optimal | Low | +| ZT-SY-42 | 시스템 환경에 따른 정책 관리 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | Traditional | Critical | +| ZT-SY-43 | 시스템 환경에 따른 정책 관리 | 수동으로 보안 정책을 유지/관리하고 있는가? | Traditional | Critical | +| ZT-SY-44 | 시스템 환경에 따른 정책 관리 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | Initial | High | +| ZT-SY-45 | 시스템 환경에 따른 정책 관리 | 정책이 자동으로 적용되는가? | Initial | High | +| ZT-SY-46 | 시스템 환경에 따른 정책 관리 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | Advanced | Medium | +| ZT-SY-47 | 시스템 환경에 따른 정책 관리 | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | Advanced | Medium | +| ZT-SY-48 | 시스템 환경에 따른 정책 관리 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | Optimal | Low | +| ZT-SY-49 | 시스템 환경에 따른 정책 관리 | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | Optimal | Low | + +### SY Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 접근통제 | 수동 권한 부여, RBAC | 중앙 집중 권한, 실시간 부여, 자동 반영 | ABAC, 동적 실시간 권한 | 실시간 분석/조정, 신뢰도 재산정, 위험 분석 기반 | +| PAM | PAM 시스템/정책 구축 | 모니터링/제어, 자동 승인 | 비정상 활동 탐지 | AI 기반 위협 탐지/대응 | +| 자격 증명 관리 | 수동 관리, 패스워드 의존 | 중앙 자동화, MFA | 생체 인증, 고도화, 무결성, AI 분석 | 실시간 차단/정책 조정, 자율 운영 | +| 네트워크 세분화 및 그룹 간 이동 | 통제 미흡, 경계형 모델 | 중요도 기반 분리, 이동 제어 | 워크로드별 세분화, 강력한 접근통제, 실시간 검사 | 실시간 분석/제어, 재인증 없는 이동, 자동 정책 | +| 시스템 환경에 따른 정책 관리 | 온프레미스 보안 정책, 수동 관리 | 클라우드 정책, 자동 적용 | 하이브리드 실시간 조정, 동적 변경 | 자율 정책, 완전 자동화 | + +--- + +## Total: 103 Items (NW: 54 + SY: 49) diff --git a/skills/kesekit-check/templates/zero-trust/ot-environment.md b/skills/kesekit-check/templates/zero-trust/ot-environment.md new file mode 100644 index 0000000..0331c34 --- /dev/null +++ b/skills/kesekit-check/templates/zero-trust/ot-environment.md @@ -0,0 +1,51 @@ +# OT/ICS Zero Trust Environment Checklist + +> Zero Trust Maturity Assessment — OT/ICS (Operational Technology / Industrial Control Systems) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), IEC 62443, NIST SP 800-82 + +## OT/ICS Zero Trust Considerations + +OT/ICS environments require special Zero Trust deployment strategies due to: +- Legacy systems that cannot support modern authentication +- Real-time operational requirements (latency sensitivity) +- Safety-critical functions that must not be disrupted +- Air-gapped or semi-isolated network architectures +- Long equipment lifecycles (15-30 years) + +## OT-ZT Assessment Items + +| ID | Category | Verification | Maturity | Severity | +|----|----------|-------------|----------|----------| +| OT-ZT-01 | Network Segmentation | OT 네트워크와 IT 네트워크가 물리적/논리적으로 분리되어 있는가? | Traditional | Critical | +| OT-ZT-02 | Network Segmentation | DMZ를 통한 OT-IT 간 데이터 교환이 통제되고 있는가? | Traditional | Critical | +| OT-ZT-03 | Network Segmentation | Purdue Model 또는 IEC 62443 zone/conduit 기반 세그멘테이션이 적용되어 있는가? | Initial | High | +| OT-ZT-04 | Network Segmentation | 마이크로 세그멘테이션이 OT 환경 내부에 적용되어 있는가? | Advanced | Medium | +| OT-ZT-05 | Network Segmentation | SDN 기반 동적 세그멘테이션이 OT 환경에 적용 가능한가? | Optimal | Low | +| OT-ZT-06 | Identity & Access | OT 시스템 접근에 대한 사용자 인증이 수행되는가? | Traditional | Critical | +| OT-ZT-07 | Identity & Access | OT 전용 계정 관리 및 최소 권한 원칙이 적용되어 있는가? | Initial | High | +| OT-ZT-08 | Identity & Access | OT 환경에서 MFA가 적용되어 있는가 (물리적 토큰 포함)? | Initial | High | +| OT-ZT-09 | Identity & Access | OT 원격 접속에 대한 별도 인증 및 모니터링이 수행되는가? | Advanced | Medium | +| OT-ZT-10 | Identity & Access | 비정상적인 OT 접근 시도에 대한 실시간 탐지 및 대응이 가능한가? | Optimal | Low | +| OT-ZT-11 | Device Management | OT 자산 인벤토리가 문서화되어 있는가? | Traditional | Critical | +| OT-ZT-12 | Device Management | OT 디바이스 식별 및 분류 체계가 구축되어 있는가? | Initial | High | +| OT-ZT-13 | Device Management | OT 디바이스 보안 상태 자동 모니터링이 가능한가? | Advanced | Medium | +| OT-ZT-14 | Device Management | 레거시 OT 장비에 대한 보안 래퍼/프록시가 적용되어 있는가? | Advanced | Medium | +| OT-ZT-15 | Device Management | AI 기반 OT 자산 관리 및 이상 탐지가 가능한가? | Optimal | Low | +| OT-ZT-16 | Communication Security | OT 프로토콜(Modbus, OPC UA, DNP3 등) 트래픽이 모니터링되는가? | Traditional | Critical | +| OT-ZT-17 | Communication Security | OT 통신에 대한 암호화가 적용되어 있는가 (가능한 경우)? | Initial | High | +| OT-ZT-18 | Communication Security | OT 프로토콜 이상 탐지(DPI) 시스템이 도입되어 있는가? | Advanced | Medium | +| OT-ZT-19 | Communication Security | OT 환경 전용 위협 인텔리전스가 적용되어 있는가? | Optimal | Low | +| OT-ZT-20 | Safety & Availability | ZT 정책 적용 시 안전 기능(Safety Function)에 영향이 없는지 검증되었는가? | Traditional | Critical | +| OT-ZT-21 | Safety & Availability | ZT 정책 실패 시 fail-open/fail-safe 동작이 정의되어 있는가? | Initial | High | +| OT-ZT-22 | Safety & Availability | ZT 구성 변경에 대한 OT 영향도 분석 프로세스가 수립되어 있는가? | Advanced | Medium | +| OT-ZT-23 | Monitoring & Response | OT 환경 전용 SOC/보안 모니터링 체계가 수립되어 있는가? | Initial | High | +| OT-ZT-24 | Monitoring & Response | IT-OT 통합 보안 이벤트 분석이 가능한가? | Advanced | Medium | +| OT-ZT-25 | Monitoring & Response | OT 환경에 대한 자동화된 인시던트 대응이 가능한가? | Optimal | Low | + +## Deployment Strategy for OT + +1. **Phase 1 — Visibility**: Asset discovery, traffic mapping, baseline establishment +2. **Phase 2 — Segmentation**: IT-OT separation, zone/conduit implementation +3. **Phase 3 — Access Control**: Identity-based access, MFA for remote access +4. **Phase 4 — Monitoring**: Continuous monitoring, anomaly detection +5. **Phase 5 — Automation**: Automated response (with safety validation) diff --git a/skills/kesekit-check/templates/zero-trust/overview.md b/skills/kesekit-check/templates/zero-trust/overview.md new file mode 100644 index 0000000..0bdd288 --- /dev/null +++ b/skills/kesekit-check/templates/zero-trust/overview.md @@ -0,0 +1,69 @@ +# Zero Trust Overview + +> Zero Trust Maturity Assessment — Overview & Assessment Guide +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), NIST SP 800-207, CISA ZT Maturity Model + +## Zero Trust Principles + +- **Never Trust, Always Verify**: Every access request must be authenticated and authorized regardless of network location +- **Assume Breach**: Minimize blast radius through microsegmentation and least-privilege access +- **Verify Explicitly**: Use all available data points (identity, location, device health, service/workload, data classification, anomalies) + +## 8 Core Elements + +| # | Element | Code | Items | +|---|---------|------|:-----:| +| 1 | Identity (식별자 및 신원) | ID | 53 | +| 2 | Device (디바이스 및 엔드포인트) | DV | ~50 | +| 3 | Network (네트워크) | NW | 54 | +| 4 | System (시스템) | SY | ~45 | +| 5 | Application (애플리케이션 및 워크로드) | AP | 60 | +| 6 | Data (데이터) | DA | ~50 | +| 7 | Visibility (가시성 및 분석) | VA | 43 | +| 8 | Automation (자동화 및 오케스트레이션) | AU | ~41 | + +**Total: ~396 items across 4 maturity levels** + +## 4 Maturity Levels + +| Level | Description | Target | +|-------|-------------|--------| +| **Traditional** | Perimeter-based security, manual processes | Baseline awareness | +| **Initial** | Some ZT controls adopted, partial automation | Early adopters | +| **Advanced** | Centralized management, context-aware policies, AI-assisted | Mature organizations | +| **Optimal** | Fully automated, real-time adaptive, AI-driven orchestration | Industry leaders | + +## Assessment Flow + +1. Determine target maturity level based on organizational goals +2. Select relevant core elements based on system context +3. Assess each item at or below the target maturity level +4. Items above target maturity level are informational (not scored) +5. Generate gap analysis comparing current state vs. target + +## Template Files + +| Topic | File | +|-------|------| +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | + +## Reference Files + +| Topic | File | +|-------|------| +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +## Judgment Criteria + +| Judgment | Description | +|----------|-------------| +| Pass (양호) | ZT control properly implemented at target maturity level | +| Partial (부분이행) | Control partially implemented, improvement needed | +| Fail (취약) | Control not implemented or significantly below target | +| N/A (해당없음) | Not applicable to the environment | diff --git a/skills/kesekit-check/templates/zero-trust/visibility-automation.md b/skills/kesekit-check/templates/zero-trust/visibility-automation.md new file mode 100644 index 0000000..7dca723 --- /dev/null +++ b/skills/kesekit-check/templates/zero-trust/visibility-automation.md @@ -0,0 +1,128 @@ +# Visibility & Automation Checklist + +> Zero Trust Maturity Assessment — Visibility (VA) & Automation (AU) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## VA — 가시성 및 분석 (Visibility) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-VA-01 | 모든 관련 활동 기록 | 로그 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-VA-02 | 모든 관련 활동 기록 | 로그 데이터가 특정한 시스템에서만 수집되는가? | Traditional | Critical | +| ZT-VA-03 | 모든 관련 활동 기록 | 다양한 시스템에서 자동으로 로그를 수집하는가? | Initial | High | +| ZT-VA-04 | 모든 관련 활동 기록 | 로그 수집 및 관리가 자동화 되었는가? | Initial | High | +| ZT-VA-05 | 모든 관련 활동 기록 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-VA-06 | 모든 관련 활동 기록 | 로그 기록의 무결성을 보장하는가? | Advanced | Medium | +| ZT-VA-07 | 모든 관련 활동 기록 | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | Advanced | Medium | +| ZT-VA-08 | 모든 관련 활동 기록 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | Optimal | Low | +| ZT-VA-09 | 모든 관련 활동 기록 | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | Optimal | Low | +| ZT-VA-10 | 모든 관련 활동 기록 | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | Optimal | Low | +| ZT-VA-11 | 중앙집중적 보안 정보 및 이벤트 관리 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | Traditional | Critical | +| ZT-VA-12 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템이 도입되었는가? | Initial | High | +| ZT-VA-13 | 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 보안 관리 체계가 구축되었는가? | Initial | High | +| ZT-VA-14 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | Advanced | Medium | +| ZT-VA-15 | 중앙집중적 보안 정보 및 이벤트 관리 | AI 기반으로 보안 이벤트를 분석하는가? | Optimal | Low | +| ZT-VA-16 | 중앙집중적 보안 정보 및 이벤트 관리 | 비정상적인 활동에 대하여 자동 대응이 가능한가? | Optimal | Low | +| ZT-VA-17 | 보안 위협 분석 | 보안 로그 및 데이터를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-18 | 보안 위협 분석 | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-19 | 보안 위협 분석 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | Initial | High | +| ZT-VA-20 | 보안 위협 분석 | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | Initial | High | +| ZT-VA-21 | 보안 위협 분석 | 자동화된 보안 위협 분석 도구를 도입하였는가? | Advanced | Medium | +| ZT-VA-22 | 보안 위협 분석 | 실시간 보안 위협 탐지가 가능한가? | Advanced | Medium | +| ZT-VA-23 | 보안 위협 분석 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | Optimal | Low | +| ZT-VA-24 | 사용자 및 기기 동작 분석 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | Traditional | Critical | +| ZT-VA-25 | 사용자 및 기기 동작 분석 | 비정상 행동을 수동으로 탐지하는가? | Traditional | Critical | +| ZT-VA-26 | 사용자 및 기기 동작 분석 | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | Traditional | Critical | +| ZT-VA-27 | 사용자 및 기기 동작 분석 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | Initial | High | +| ZT-VA-28 | 사용자 및 기기 동작 분석 | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | Initial | High | +| ZT-VA-29 | 사용자 및 기기 동작 분석 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | Advanced | Medium | +| ZT-VA-30 | 사용자 및 기기 동작 분석 | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | Advanced | Medium | +| ZT-VA-31 | 사용자 및 기기 동작 분석 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | Optimal | Low | +| ZT-VA-32 | 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-33 | 위협 인텔리전스 통합 | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | Traditional | Critical | +| ZT-VA-34 | 위협 인텔리전스 통합 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | Initial | High | +| ZT-VA-35 | 위협 인텔리전스 통합 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | Advanced | Medium | +| ZT-VA-36 | 위협 인텔리전스 통합 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | Optimal | Low | +| ZT-VA-37 | 자동화된 동적 정책 | 보안 정책을 수동으로 관리하는가? | Traditional | Critical | +| ZT-VA-38 | 자동화된 동적 정책 | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | Traditional | Critical | +| ZT-VA-39 | 자동화된 동적 정책 | 자동화된 정책 관리 시스템을 도입하였는가? | Initial | High | +| ZT-VA-40 | 자동화된 동적 정책 | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | Initial | High | +| ZT-VA-41 | 자동화된 동적 정책 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | Advanced | Medium | +| ZT-VA-42 | 자동화된 동적 정책 | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | Advanced | Medium | +| ZT-VA-43 | 자동화된 동적 정책 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | Optimal | Low | + +### VA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 모든 관련 활동 기록 | 수동 로그, 특정 시스템 수집 | 자동 로그 수집, 관리 자동화 | 실시간 탐지, 무결성, 예측 분석 | 자율 보안, 정규화, 자동 정책 조정 | +| 중앙집중적 보안 정보/이벤트 관리 | 수동 분석 | SIEM 도입, 중앙 관리 | 보안 도구 연동 종합 분석 | AI 분석, 자동 대응 | +| 보안 위협 분석 | 수동 로그/CVE 수집 | 평가 기준, 자동 경고 | 자동화 분석, 실시간 탐지 | AI 예측 분석 | +| 사용자/기기 동작 분석 | 활동 데이터 수집, 수동 탐지, 패턴 기록 | 자동 분석 도구 도입 | 행동 분석 탐지, AI 실시간 대응 | 자동 정책 조정, 최소 권한 | +| 위협 인텔리전스 통합 | 수동 수집, 수동 연동 | 자동 통합 도구 | 내부 시스템 통합 | AI 기반 시스템 | +| 자동화된 동적 정책 | 수동 관리, 수동 대응 | 자동 정책 관리, 자동 변경 | 실시간 조정, 위협 연계 | AI 자율 정책 조정 | + +--- + +## AU — 자동화 및 통합 (Automation) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AU-01 | 정책 통합 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | Traditional | Critical | +| ZT-AU-02 | 정책 통합 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-AU-03 | 정책 통합 | 정책 변경이 자동으로 이루어지는가? | Initial | High | +| ZT-AU-04 | 정책 통합 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | Advanced | Medium | +| ZT-AU-05 | 정책 통합 | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | Advanced | Medium | +| ZT-AU-06 | 정책 통합 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-07 | 중요 프로세스 자동화 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | Traditional | Critical | +| ZT-AU-08 | 중요 프로세스 자동화 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | Initial | High | +| ZT-AU-09 | 중요 프로세스 자동화 | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | Initial | High | +| ZT-AU-10 | 중요 프로세스 자동화 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | Advanced | Medium | +| ZT-AU-11 | 중요 프로세스 자동화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-12 | 인공지능 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-13 | 인공지능 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | Initial | High | +| ZT-AU-14 | 인공지능 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | Advanced | Medium | +| ZT-AU-15 | 인공지능 | AI가 모든 보안 시스템에 완전히 통합되었는가? | Optimal | Low | +| ZT-AU-16 | 인공지능 | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | Optimal | Low | +| ZT-AU-17 | 보안 통합, 자동화 및 대응 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | Traditional | Critical | +| ZT-AU-18 | 보안 통합, 자동화 및 대응 | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | Traditional | Critical | +| ZT-AU-19 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 도입하였는가? | Initial | High | +| ZT-AU-20 | 보안 통합, 자동화 및 대응 | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | Initial | High | +| ZT-AU-21 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | Advanced | Medium | +| ZT-AU-22 | 보안 통합, 자동화 및 대응 | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | Advanced | Medium | +| ZT-AU-23 | 보안 통합, 자동화 및 대응 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | Optimal | Low | +| ZT-AU-24 | 보안 통합, 자동화 및 대응 | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | Optimal | Low | +| ZT-AU-25 | 데이터 교환 표준화 | 수집된 데이터가 상이한 형식으로 저장되는가? | Traditional | Critical | +| ZT-AU-26 | 데이터 교환 표준화 | 데이터 교환이 비효율적으로 이루어지는가? | Traditional | Critical | +| ZT-AU-27 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-28 | 데이터 교환 표준화 | 데이터 교환 표준을 도입하였는가? | Initial | High | +| ZT-AU-29 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 자동화되었는가? | Initial | High | +| ZT-AU-30 | 데이터 교환 표준화 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | Advanced | Medium | +| ZT-AU-31 | 데이터 교환 표준화 | 여러 보안 도구 간의 상호 운용성이 제공되는가? | Advanced | Medium | +| ZT-AU-32 | 데이터 교환 표준화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | Optimal | Low | +| ZT-AU-33 | 데이터 교환 표준화 | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | Optimal | Low | +| ZT-AU-34 | 데이터 교환 표준화 | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | Optimal | Low | +| ZT-AU-35 | 보안 운영 조정 및 사고 대응 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | Traditional | Critical | +| ZT-AU-36 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 절차가 정형화되어 있지 않는가? | Traditional | Critical | +| ZT-AU-37 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | Initial | High | +| ZT-AU-38 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | Initial | High | +| ZT-AU-39 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | Advanced | Medium | +| ZT-AU-40 | 보안 운영 조정 및 사고 대응 | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | Advanced | Medium | +| ZT-AU-41 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | Optimal | Low | +| ZT-AU-42 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | Optimal | Low | +| ZT-AU-43 | 보안 운영 조정 및 사고 대응 | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | Optimal | Low | + +### AU Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 정책 통합 | 수동 시스템별 변경 | 중앙 관리, 자동 변경 | 실시간 동적 조정, 즉각 수정 | AI 자율 정책 조정 | +| 중요 프로세스 자동화 | 수동 절차 의존 | 자동화 도구, 백업/장애 대응 자동화 | 보안 사고 자동 대응 | 실시간 최적화, 무중단 조정 | +| 인공지능 | 수동 수집/분석/대응 | 기본 AI 도구, 패턴 식별 | AI 고도화, 실시간 탐지/대응 | 완전 통합, 자율 감지/대응/조정 | +| 보안 통합/자동화/대응 | 독립 운영, 수동 대응 | SOAR 도입, 중앙 대응 | SOAR 고도화, 실시간 통합 | 중앙 자동 처리, 자율 통합 | +| 데이터 교환 표준화 | 상이한 형식, 비효율적, 수동 교환 | 표준 도입, 교환 자동화 | 외부 공유, 상호 운용성 | 자율 관리, 일관된 형식, 실시간 교환 | +| 보안 운영 조정/사고 대응 | 수동 소통, 비정형 절차 | 대응 계획, 자동 경고 | 자동 대응, 실시간 조율, 자동 보고 | 사전 예측, 완전 자동화, 실시간 협력 | + +--- + +## Total: 86 Items (VA: 43 + AU: 43) diff --git a/skills/kesekit-fix/SKILL.md b/skills/kesekit-fix/SKILL.md new file mode 100644 index 0000000..5c6fa24 --- /dev/null +++ b/skills/kesekit-fix/SKILL.md @@ -0,0 +1,68 @@ +--- +name: kesekit-fix +description: Auto-fix security vulnerabilities found in CII, AI, robot, and space systems. Generates hardening scripts for Unix/Linux, Windows, web servers, databases, AI, robot, and space infrastructure (satellite/GSaaS/ground station). Use when "fix vulnerabilities", "apply hardening", "server hardening", "AI security fix", "robot security fix", "space security fix", "satellite hardening", "GSaaS hardening". +--- + +# KESE Vulnerability Auto-Fix + +Generate and apply fixes based on vulnerability assessment results. Auto-selects guideline. + +## Guideline Selection + +| # | Guideline | Description | +|---|-----------|-------------| +| 1 | **CII Hardening** | Platform-specific hardening scripts | +| 2 | **AI Security Fixes** | AI system security hardening | +| 3 | **Robot Security Fixes** | Robot system hardening (IEC 62443, CRA, RED) | +| 4 | **Space Security Fixes** | Space system hardening (CMMC, K-RMF, NIS2, NIST IR 8401) | +| 5 | **Secure Coding Fixes** | Auto-fix vulnerable code patterns (JS/Python, 46 CWE) | +| 6 | **Zero Trust Fixes** | Zero Trust gap remediation (8 elements, 4 maturity levels, ~396 items) | + +Zero Trust, ZTA, ZTNA, 제로트러스트, 마이크로세그멘테이션, microsegmentation, SDP, SASE, PEP/PDP, never trust always verify → **Zero Trust** + +## CII Branch + +Load reference from `templates/cii/` → generate hardening scripts saved to `scripts/kese-hardening/`. Check commands available in `scripts/cii/` directory. + +## AI Security Branch + +Load from `references/ai-security/` for overview and guidance, and `templates/ai-security/` for assessment checklists → generate security hardening code for AI pipelines, model security, API protection, LLM guardrails. + +## Robot Security Branch + +Load from `templates/robot-security/` → generate robot security remediation guidance for secure development, supply chain controls, IEC 62443 controls, cyber resilience planning, and wireless security. + +## Space Security Branch + +Load from `references/space-security/` for overview and supply chain guidance, and `templates/space-security/` for assessment checklists → generate space system hardening guidance. Fix scripts in `scripts/space-security/access-control-fix.md`, `scripts/space-security/system-security-fix.md`, `scripts/space-security/operations-fix.md`. + +## Secure Coding Branch + +Load from `references/secure-coding/pseudocode.md` for UNSAFE→SAFE pattern pairs. Use `templates/secure-coding/javascript.md` or `templates/secure-coding/python.md` for framework-specific fixes. Each item provides the exact code transformation (UNSAFE → SAFE) to apply. + +--- + +## Zero Trust Branch + +Load from `references/zero-trust/` for maturity model and architecture, and `templates/zero-trust/` for element-specific checklists. Generate remediation guidance based on gap analysis between current and target maturity levels. If OT/ICS detected, also load `templates/zero-trust/ot-environment.md` and `references/zero-trust/ot-guide.md`. + +| Topic | Reference File | +|-------|---------------| +| Overview | `templates/zero-trust/overview.md` | +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +8 core elements, ~396 items across 4 maturity levels. Standards: KISA ZT Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model. + +--- + +## Notes +- Always backup before applying fixes +- Test in non-production first +- Document all changes for compliance audit diff --git a/skills/fix/references/ai-security/overview.md b/skills/kesekit-fix/references/ai-security/overview.md similarity index 100% rename from skills/fix/references/ai-security/overview.md rename to skills/kesekit-fix/references/ai-security/overview.md diff --git a/skills/fix/references/ai-security/service-provider.md b/skills/kesekit-fix/references/ai-security/service-provider.md similarity index 100% rename from skills/fix/references/ai-security/service-provider.md rename to skills/kesekit-fix/references/ai-security/service-provider.md diff --git a/skills/kesekit-fix/references/ai-security/user-guide.md b/skills/kesekit-fix/references/ai-security/user-guide.md new file mode 100644 index 0000000..808f78d --- /dev/null +++ b/skills/kesekit-fix/references/ai-security/user-guide.md @@ -0,0 +1,58 @@ +# AI 이용자를 위한 보안 수칙 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +## 1. AI 이용자에게 발생할 수 있는 보안 위협 + +### 1.1 챗봇 통한 데이터 유출 +- AI 챗봇 서비스에서 다른 사용자의 개인정보가 노출되는 사례 +- 학습 데이터에 포함된 민감정보가 출력될 가능성 + +### 1.2 AI 음성비서 도청/해킹 +- 스마트 스피커에 레이저/음파를 이용한 명령 주입 +- 백그라운드 실행을 통한 비밀번호 탈취 유도 + +### 1.3 악성 링크/피싱 +- AI가 생성한 정교한 피싱 메시지 +- AI 서비스를 가장한 악성 사이트 + +### 1.4 딥페이크 +- AI 기반 얼굴/음성 합성을 이용한 사기 +- 가짜 영상/음성을 통한 신원 도용 + +### 1.5 안면인식 해킹 +- AI 안면인식 시스템의 우회 공격 +- 적대적 예제를 이용한 인증 우회 + +### 1.6 사이버 테러 +- AI를 악용한 대규모 자동화 공격 +- AI 기반 악성코드 생성 + +--- + +## 2. AI 서비스 이용 보안 수칙 + +### 수칙 1: 안전한 서비스 접근 +- **공식 경로로 다운로드**: 공식 앱 스토어, 공식 웹사이트에서만 AI 서비스 다운로드 +- **강력한 비밀번호 사용**: 영문+숫자+특수문자 조합, 8자 이상 +- **MFA 활성화**: 가능한 경우 다중 인증 설정 +- **공공 네트워크 주의**: 공공 Wi-Fi에서 AI 서비스 이용 시 VPN 사용 권장 +- **이용약관 확인**: AI 서비스의 데이터 수집/활용 정책 확인 + +### 수칙 2: 안전한 서비스 사용 +- **민감정보 입력 금지**: AI 챗봇에 비밀번호, 주민번호, 카드번호 등 입력하지 않기 +- **AI 출력 결과 검증**: AI가 생성한 정보의 정확성을 반드시 확인 +- **의심스러운 결과 신고**: 부적절하거나 유해한 AI 출력 발견 시 서비스 제공자에게 신고 +- **사용 후 데이터 삭제**: AI 서비스 이용 후 대화 기록 등 불필요한 데이터 삭제 +- **주기적 권한 검토**: AI 서비스에 부여한 권한(카메라, 마이크, 위치 등) 주기적 확인 + +### 수칙 3: 딥페이크 대응 +- 영상 통화 시 비정상적 움직임, 음질 이상 주의 +- 금전 요청이나 긴급 상황을 주장하는 연락은 별도 채널로 확인 + +### 수칙 4: AI 음성비서 보안 +- 사용하지 않을 때 마이크 비활성화 +- 음성 구매 기능 비밀번호 설정 +- 정기적으로 음성 기록 검토 및 삭제 + +--- diff --git a/skills/kesekit-fix/references/secure-coding/overview.md b/skills/kesekit-fix/references/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/skills/kesekit-fix/references/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/skills/kesekit-fix/references/secure-coding/pseudocode.md b/skills/kesekit-fix/references/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/skills/kesekit-fix/references/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/skills/kesekit-fix/references/space-security/overview.md b/skills/kesekit-fix/references/space-security/overview.md new file mode 100644 index 0000000..f31ab87 --- /dev/null +++ b/skills/kesekit-fix/references/space-security/overview.md @@ -0,0 +1,82 @@ +# Space Security Overview + +> Source: KISA "Space Security Model" Part1 (2024.12) + Part2 (2025.12) + Explanation Guide (2025.12) + +## 1. Overview + +| Item | Content | +|------|---------| +| Publisher | KISA (Korea Internet & Security Agency) / MSIT | +| Target | Space industry operators, satellite service providers, GSaaS providers, supply chain participants | +| Scope | Space segment, Ground segment, Satellite service segment, GSaaS, Supply chain | +| Standards | CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, NIST CSF, CCSDS | + +## 2. Space Architecture Layers + +| Layer | Components | +|-------|-----------| +| Space Segment | GEO/MEO/LEO satellites, LEO constellations, satellite bus, payload, OBC | +| Ground Segment | Satellite control, payload data processing, antenna, satellite modem, mission control | +| GSaaS | Antenna zone, ground station-cloud zone, reservation/scheduling, API/DB servers | +| Satellite Services | Navigation (GNSS), Communication (VSAT/LEO), Broadcasting | +| Supply Chain | Satellite/launch vehicle manufacturers, ground station operators, satellite operators | + +## 3. Satellite Service Types + +| Service | Description | Key Components | +|---------|-------------|----------------| +| Navigation (GNSS) | Position/navigation/timing via GNSS satellites | Smart ships, autonomous vehicles, UAM | +| Communication | Satellite-based data/voice communication | VSAT, LEO mobile, LEO internet | +| Broadcasting | Satellite TV/radio relay | Broadcasting centers, set-top boxes | +| GSaaS | Ground Station as a Service (cloud-based shared infrastructure) | Shared antennas, cloud scheduling, API | + +## 4. Security Objectives + +| Objective | Description | +|-----------|-------------| +| Confidentiality | Prevent unauthorized access to satellite data and communications | +| Integrity | Prevent unauthorized modification of commands, telemetry, and operational data | +| Availability | Ensure continuous satellite service operation | +| Authentication | Verify identity of users, processes, devices, and satellites | +| Non-repudiation | Ensure accountability for satellite operations | +| Resilience | Maintain operations during and after security incidents | + +## 5. Threat Categories (3 Major Types) + +| Type | Description | Attack Vectors | +|------|-------------|----------------| +| Data Corruption | Unauthorized data modification/deletion | MITM, spoofing, malware, insider threat | +| Service Disruption | Service interruption/degradation | Jamming, DDoS, physical destruction, SW vulnerabilities | +| Information Leakage | Sensitive data exfiltration | Eavesdropping, sniffing, session hijacking, data theft | + +## 6. Checklist Structure (12 Domains, 53 Items) + +| # | Code | Domain | Items | Reference File | +|---|------|--------|:-----:|----------------| +| 1 | AC | Access Control | 12 | `access-control.md` | +| 2 | IA | Identification & Authentication | 2 | `access-control.md` | +| 3 | SC | System & Communication Security | 7 | `system-security.md` | +| 4 | SI | System & Information Integrity | 4 | `system-security.md` | +| 5 | SO | System/Service Operations Management | 9 | `operations.md` | +| 6 | IR | Incident Response | 2 | `operations.md` | +| 7 | PS | Personnel Security | 2 | `governance.md` | +| 8 | PE | Physical & Environmental Security | 3 | `governance.md` | +| 9 | RA | Risk Assessment & Security Evaluation | 2 | `governance.md` | +| 10 | SG | Security Governance | 4 | `governance.md` | +| 11 | CP | Contingency Planning | 2 | `governance.md` | +| 12 | SM | Supply Chain Management | 4 | `supply-chain.md` | + +## 7. Compliance Standards + +| Standard | Description | +|----------|-------------| +| CMMC | Cybersecurity Maturity Model Certification (US DoD, Level 1-3) | +| K-RMF | Korea Risk Management Framework | +| NIS2 | EU Network and Information Security Directive (includes space) | +| ISMS-P | Korea Information Security Management System | +| NIST IR 8401 | Satellite Ground Segment Cybersecurity | +| NIST IR 8270 | Commercial Satellite Operations Cybersecurity | +| NIST CSF | Cybersecurity Framework (Identify/Protect/Detect/Respond/Recover) | +| NIST SP 800-171 | CUI Protection (110 requirements) | +| CCSDS 352.0-B-2 | Space System Cryptographic Algorithm Recommendation | +| ENISA Space Threat Landscape | Space system threat analysis | diff --git a/skills/kesekit-fix/references/space-security/supply-chain.md b/skills/kesekit-fix/references/space-security/supply-chain.md new file mode 100644 index 0000000..2f66548 --- /dev/null +++ b/skills/kesekit-fix/references/space-security/supply-chain.md @@ -0,0 +1,60 @@ +# Supply Chain Threat Scenarios + +> Domain: GSaaS/Supply Chain Threat Scenarios (with code-block illustrations) + +## Threat Scenarios (Supply Chain) + +### Scenario 1: Vulnerable Open-Source Causing Ground Station Failure +``` +Backdoor inserted into open-source community + -> Library used without verification + -> Backdoor enables system takeover + -> Ground station service disruption +``` + +### Scenario 2: Malicious Code in Payload Update File +``` +Developer PC compromised via phishing + -> Ransomware inserted into SW update + -> Update uploaded to satellite without verification + -> Payload malfunction +``` + +### Scenario 3: Tampered IDE Plugin Causing Satellite Malfunction +``` +Malicious code in IDE/CI-CD plugin + -> Firmware developed/loaded without verification + -> Component inspection skipped + -> Satellite bus malfunction +``` + +## GSaaS Threat Scenarios + +### Scenario 1: Satellite Control Hijacking via Weak Authentication +``` +Plaintext communication sniffing + -> IAM credential theft + -> Web shell upload + -> Ground station infiltration + -> Orbit control system takeover + -> Satellite hijacking +``` + +### Scenario 2: Data Tampering via Unauthorized Device Backdoor +``` +No media control + -> USB/single-board-computer backdoor + -> Internal network access + -> Satellite access credential collection + -> Data tampering malware injection +``` + +### Scenario 3: Physical Attack via Drone Disrupting Satellite Communication +``` +Plaintext communication sniffing + -> Antenna location identified + -> Drone with jamming device/explosives + -> Antenna-satellite communication disrupted +``` + +## Total: 4 Checklist Items + 6 Threat Scenarios diff --git a/skills/kesekit-fix/references/zero-trust/maturity-model.md b/skills/kesekit-fix/references/zero-trust/maturity-model.md new file mode 100644 index 0000000..2f3612d --- /dev/null +++ b/skills/kesekit-fix/references/zero-trust/maturity-model.md @@ -0,0 +1,75 @@ +# Zero Trust Maturity Model + +> Reference: KISA 제로트러스트 가이드라인 2.0 (2024.12), CISA Zero Trust Maturity Model v2.0 +> Purpose: Detailed maturity level definitions and scoring guidance + +## Maturity Level Definitions + +### Traditional (전통적) +- Perimeter-based security model (castle-and-moat) +- Manual identity management and access control +- Static, rule-based security policies +- Limited visibility into internal traffic + +### Initial (기본) +- Beginning adoption of ZT principles +- Some automated identity management (SSO, basic MFA) +- Initial network segmentation beyond perimeter +- Centralized logging introduced + +### Advanced (고도화) +- Context-aware, dynamic access policies +- AI-assisted threat detection and response +- Comprehensive microsegmentation +- Real-time monitoring and analytics + +### Optimal (최적화) +- Fully automated, self-adaptive security +- AI-driven orchestration and response +- Predictive threat analysis +- Continuous verification at all layers +- Zero standing privileges + +## Scoring Framework + +### Per-Item Scoring + +| Score | Criteria | +|-------|----------| +| 3 | Fully implemented and operational | +| 2 | Partially implemented, gaps exist | +| 1 | Planned but not yet implemented | +| 0 | Not implemented, no plans | + +### Element Maturity Calculation + +``` +Element Score = (Sum of item scores for target level) / (Max possible score) x 100% + +Maturity Rating: + >= 80% → Mature (at or above target level) + 60-79% → Developing (approaching target level) + 40-59% → Emerging (significant gaps remain) + < 40% → Insufficient (major remediation needed) +``` + +## Cross-Element Dependencies + +| Element | Depends On | +|---------|-----------| +| Identity | — (foundation element) | +| Device | Identity | +| Network | Identity, Device | +| System | Network, Identity | +| Application | Identity, Device, Network | +| Data | Application, Identity | +| Visibility | All elements (observability layer) | +| Automation | Visibility (requires data to automate) | + +## Assessment Prioritization + +1. Start with **Identity** — foundation of all ZT controls +2. Then **Device** — ensure endpoint trust +3. Then **Network** — establish segmentation +4. Then **Application** and **Data** — protect workloads +5. Finally **Visibility** and **Automation** — enable continuous improvement diff --git a/skills/kesekit-fix/references/zero-trust/ot-guide.md b/skills/kesekit-fix/references/zero-trust/ot-guide.md new file mode 100644 index 0000000..92c0970 --- /dev/null +++ b/skills/kesekit-fix/references/zero-trust/ot-guide.md @@ -0,0 +1,128 @@ +# OT/ICS Zero Trust Deployment Guide + +> Reference: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-82 Rev.3, IEC 62443 +> Purpose: Guidance for deploying Zero Trust in OT/ICS environments + +## Why OT/ICS Requires Special ZT Consideration + +Traditional IT Zero Trust assumes: +- Modern endpoints capable of running agents +- Tolerance for additional authentication latency +- Ability to patch and update frequently +- Replaceable infrastructure components + +OT/ICS reality: +- Legacy devices (PLCs, RTUs, HMIs) with 15-30 year lifecycles +- Real-time control loops with microsecond-level latency requirements +- Safety-critical functions where authentication delays can cause harm +- Proprietary protocols (Modbus, DNP3, OPC UA, PROFINET) +- Air-gapped or semi-isolated networks + +## Phased Deployment Approach + +### Phase 1: Visibility & Asset Discovery + +**Objective**: Know what you have before you protect it. + +- Conduct complete OT asset inventory (active + passive discovery) +- Map communication flows between OT devices, IT systems, and external connections +- Identify Purdue Model levels for each asset +- Baseline normal traffic patterns and protocol usage +- Document legacy devices that cannot support modern security controls + +### Phase 2: IT-OT Boundary Segmentation + +**Objective**: Establish strong boundary between IT and OT networks. + +- Deploy industrial DMZ between IT and OT networks +- Implement data diodes or unidirectional gateways for critical flows +- Control all IT-OT data exchange through monitored jump servers +- Establish separate authentication domains for IT and OT + +### Phase 3: OT Internal Segmentation + +**Objective**: Apply zone/conduit model within OT network. + +- Implement IEC 62443 zones and conduits +- Segment by safety level (SL), function, and criticality +- Deploy OT-aware firewalls between zones +- Establish conduit-level access policies + +### Phase 4: Identity & Access Control + +**Objective**: Enforce identity-based access in OT environment. + +- Deploy MFA for all remote OT access (hardware tokens preferred) +- Implement privileged access management (PAM) for OT systems +- Apply least-privilege access for OT operators and engineers +- Manage shared/service accounts with rotation and monitoring +- Use jump servers with session recording for maintenance access + +### Phase 5: Continuous Monitoring + +**Objective**: Maintain visibility and detect anomalies. + +- Deploy OT-specific IDS/IPS (passive monitoring preferred initially) +- Implement Deep Packet Inspection (DPI) for OT protocols +- Integrate OT security events with enterprise SIEM +- Establish OT-specific SOC or extend IT SOC with OT expertise +- Monitor for known OT malware signatures (Triton, Industroyer, etc.) + +### Phase 6: Automated Response (with Safety Validation) + +**Objective**: Enable automated response without compromising safety. + +- Define automated response actions with safety impact assessment +- Implement fail-safe defaults (fail-open for safety-critical, fail-close for non-critical) +- Require human approval for actions affecting safety systems +- Test automated responses in simulation environment before deployment + +## OT-Specific ZT Architecture + +``` +┌────────────────────────────────────────────┐ +│ Enterprise Zone (IT) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ PDP │ │ IdP/ │ │ Enterprise │ │ +│ │ │ │ MFA │ │ SIEM │ │ +│ └────────┘ └────────┘ └────────────┘ │ +└──────────────────┬─────────────────────────┘ + │ Industrial DMZ +┌──────────────────┴─────────────────────────┐ +│ ┌────────────┐ ┌─────────┐ ┌────────┐ │ +│ │ Jump Server│ │ Historian│ │ PEP │ │ +│ │ (PAM) │ │ Mirror │ │ (OT) │ │ +│ └────────────┘ └─────────┘ └────────┘ │ +└──────────────────┬─────────────────────────┘ + │ +┌──────────────────┴─────────────────────────┐ +│ OT Zone (ICS/SCADA) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ HMI │ │ PLC │ │ RTU │ │ +│ │ │ │ │ │ │ │ +│ └────────┘ └────────┘ └────────────┘ │ +│ ┌────────────────────────────────────┐ │ +│ │ OT IDS (Passive Monitoring) │ │ +│ └────────────────────────────────────┘ │ +└────────────────────────────────────────────┘ +``` + +## Legacy Device Handling + +For OT devices that cannot support modern ZT controls: + +1. **Security Wrapper/Proxy**: Place a ZT-capable proxy in front of legacy devices +2. **Network-Level Protection**: Use OT-aware firewalls to enforce access policies +3. **Monitoring**: Deploy passive DPI sensors for visibility without device modification +4. **Compensating Controls**: Document risk acceptance with compensating controls per IEC 62443 + +## Standards Mapping + +| OT-ZT Requirement | IEC 62443 | NIST SP 800-82 | KISA ZT 2.0 | +|-------------------|-----------|----------------|-------------| +| Network Segmentation | Zone/Conduit | Section 5.3 | NW Element | +| Access Control | FR 1 (AC) | Section 6.2 | ID Element | +| Device Management | FR 4 (DC) | Section 6.3 | DV Element | +| Communication Integrity | FR 3 (SI) | Section 5.4 | SY Element | +| Monitoring | FR 6 (RE) | Section 6.6 | VA Element | +| Incident Response | FR 7 (RA) | Section 6.7 | AU Element | diff --git a/skills/kesekit-fix/references/zero-trust/overview.md b/skills/kesekit-fix/references/zero-trust/overview.md new file mode 100644 index 0000000..38fe30d --- /dev/null +++ b/skills/kesekit-fix/references/zero-trust/overview.md @@ -0,0 +1,72 @@ +# Zero Trust Architecture Reference + +> Reference: NIST SP 800-207, KISA 제로트러스트 가이드라인 2.0, CISA Zero Trust Maturity Model +> Purpose: Provide architectural context for Zero Trust maturity assessment + +## Zero Trust Architecture (ZTA) + +### Core Logical Components + +``` +┌─────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ PDP │ │ Policy │ │ Trust Algorithm │ │ +│ │ (Policy │ │ Engine │ │ (Risk Score + │ │ +│ │ Decision │ │ │ │ Context Analysis) │ │ +│ │ Point) │ │ │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ + │ + ┌────┴────┐ + │ PEP │ ← Policy Enforcement Point + │ │ + └────┬────┘ + │ +┌─────────────────────────────────────────────────────────┐ +│ Data Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ Subject │ │ Resource │ │ Enterprise │ │ +│ │ (User/ │→→│ (App/ │ │ Resources │ │ +│ │ Device) │ │ Data) │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### Deployment Models (NIST SP 800-207) + +1. **SDP (Software Defined Perimeter)**: Agent/gateway-based model +2. **Micro-segmentation**: Network-centric approach +3. **Network Infrastructure + SDP**: Hybrid approach + +### KISA Zero Trust Guidelines 2.0 — 8 Elements + +| Element | Korean | Scope | +|---------|--------|-------| +| Identity | 식별자 및 신원 | User identity management, MFA, continuous authentication | +| Device | 디바이스 및 엔드포인트 | Device inventory, health checks, compliance | +| Network | 네트워크 | Macro/micro segmentation, SDN, encrypted traffic | +| System | 시스템 | System hardening, patching, configuration management | +| Application | 애플리케이션 및 워크로드 | Resource authorization, remote access, monitoring | +| Data | 데이터 | Classification, DLP, encryption, access control | +| Visibility | 가시성 및 분석 | Logging, SIEM, threat analysis | +| Automation | 자동화 및 오케스트레이션 | SOAR, automated response, policy orchestration | + +### Related Standards + +| Standard | Organization | Focus | +|----------|-------------|-------| +| NIST SP 800-207 | NIST | ZTA reference architecture | +| CISA Zero Trust Maturity Model | CISA | Federal ZT maturity assessment | +| 제로트러스트 가이드라인 2.0 | KISA | Korean ZT implementation guide | +| NIST SP 800-82 | NIST | OT/ICS security guide | +| IEC 62443 | IEC | Industrial automation security | + +### Key Concepts + +- **PDP (Policy Decision Point)**: Evaluates access requests against policy +- **PEP (Policy Enforcement Point)**: Enforces PDP decisions at the access point +- **SDP (Software Defined Perimeter)**: Creates dynamic, identity-based perimeters +- **SASE (Secure Access Service Edge)**: Cloud-delivered convergence of network and security +- **ZTNA (Zero Trust Network Access)**: Application-level access without VPN +- **Microsegmentation**: Granular network isolation at workload level diff --git a/skills/kesekit-fix/scripts/cii/cloud.md b/skills/kesekit-fix/scripts/cii/cloud.md new file mode 100644 index 0000000..b5fc514 --- /dev/null +++ b/skills/kesekit-fix/scripts/cii/cloud.md @@ -0,0 +1,517 @@ +# 클라우드 점검 스크립트 (CA-01 ~ CA-19) + +## 1. 계정 관리 + +### CA-01: 사용자 계정 관리 +**점검:** +```bash +# AWS: IAM 사용자 목록 및 마지막 로그인 확인 +aws iam list-users --output table +aws iam generate-credential-report +aws iam get-credential-report --output text --query Content | base64 -d + +# Azure: 사용자 목록 확인 +az ad user list --output table +az ad user list --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}" --output table + +# GCP: IAM 사용자 확인 +gcloud iam service-accounts list +gcloud projects get-iam-policy --format=json +``` +**조치:** +```bash +# AWS: 불필요 계정 삭제/비활성화 +aws iam delete-user --user-name <사용자명> +aws iam delete-login-profile --user-name <사용자명> +# 액세스 키 비활성화 +aws iam update-access-key --user-name <사용자명> --access-key-id <키ID> --status Inactive + +# Azure: 불필요 계정 삭제/비활성화 +az ad user update --id <사용자ID> --account-enabled false +az ad user delete --id <사용자ID> + +# GCP: 서비스 계정 삭제/비활성화 +gcloud iam service-accounts disable <서비스계정이메일> +gcloud iam service-accounts delete <서비스계정이메일> +``` + +### CA-02: 사용자 정책 관리 +**점검:** +```bash +# AWS: 사용자별 정책 확인 +aws iam list-attached-user-policies --user-name <사용자명> +aws iam list-user-policies --user-name <사용자명> +aws iam list-groups-for-user --user-name <사용자명> + +# Azure: 역할 할당 확인 +az role assignment list --all --output table + +# GCP: IAM 정책 확인 +gcloud projects get-iam-policy +``` +**조치:** +```bash +# AWS: 불필요 권한 제거, 최소 권한 원칙 적용 +aws iam detach-user-policy --user-name <사용자명> --policy-arn <정책ARN> +# 그룹 기반 권한 관리 +aws iam create-group --group-name <그룹명> +aws iam attach-group-policy --group-name <그룹명> --policy-arn <정책ARN> +aws iam add-user-to-group --user-name <사용자명> --group-name <그룹명> + +# Azure: 역할 할당 변경 +az role assignment delete --assignee <사용자ID> --role <역할명> +az role assignment create --assignee <사용자ID> --role <역할명> --scope <범위> + +# GCP: IAM 바인딩 변경 +gcloud projects remove-iam-policy-binding --member=user:<이메일> --role=<역할> +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=<역할> +``` + +### CA-03: MFA(Multi-Factor Authentication) 설정 +**점검:** +```bash +# AWS: MFA 설정 여부 확인 +aws iam list-virtual-mfa-devices +aws iam list-mfa-devices --user-name <사용자명> +# MFA 미설정 사용자 확인 (credential report 활용) +aws iam get-credential-report --output text --query Content | base64 -d | grep -i "false" + +# Azure: MFA 상태 확인 +az ad user list --query "[].{UPN:userPrincipalName}" --output table +# Azure Portal: Azure AD > 보안 > MFA 에서 확인 + +# GCP: 2단계 인증은 Google Workspace Admin Console에서 확인 +``` +**조치:** +```bash +# AWS: 가상 MFA 디바이스 생성 및 활성화 +aws iam create-virtual-mfa-device --virtual-mfa-device-name <디바이스명> --outfile QRCode.png --bootstrap-method QRCodePNG +aws iam enable-mfa-device --user-name <사용자명> --serial-number --authentication-code1 <코드1> --authentication-code2 <코드2> + +# Azure: 조건부 액세스 정책으로 MFA 강제 (Azure Portal에서 설정) +# Azure AD > 보안 > 조건부 액세스 > 새 정책 > MFA 필수 + +# GCP: Google Workspace Admin Console에서 2단계 인증 강제 +``` + +### CA-04: 클라우드 계정 비밀번호 정책 관리 +**점검:** +```bash +# AWS: 비밀번호 정책 확인 +aws iam get-account-password-policy + +# Azure: 비밀번호 정책 확인 (Azure AD) +az ad group list --output table +# Azure Portal: Azure AD > 보안 > 인증 방법 > 비밀번호 보호 +``` +**조치:** +```bash +# AWS: 비밀번호 정책 설정 +aws iam update-account-password-policy \ + --minimum-password-length 8 \ + --require-symbols \ + --require-numbers \ + --require-uppercase-characters \ + --require-lowercase-characters \ + --max-password-age 90 \ + --password-reuse-prevention 24 \ + --allow-users-to-change-password + +# Azure: Azure AD Portal에서 비밀번호 정책 설정 +# Azure AD > 보안 > 인증 방법 > 비밀번호 보호 > 사용자 지정 금지 비밀번호 목록 +``` + +## 2. 권한 관리 + +### CA-05: 인스턴스 서비스 정책 관리 +**점검:** +```bash +# AWS: EC2 관련 IAM 정책 확인 +aws iam list-policies --query "Policies[?contains(PolicyName,'EC2')]" --output table +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,IamInstanceProfile]" --output table + +# Azure: VM 관련 역할 확인 +az vm list --output table +az role assignment list --query "[?contains(scope,'Microsoft.Compute')]" --output table + +# GCP: Compute Engine IAM 확인 +gcloud compute instances list +``` +**조치:** +```bash +# AWS: 인스턴스 관련 권한 최소화 +# 전용 IAM 역할 생성 후 인스턴스에 할당 +aws iam create-role --role-name <역할명> --assume-role-policy-document file://trust-policy.json +aws iam attach-role-policy --role-name <역할명> --policy-arn <정책ARN> +aws ec2 associate-iam-instance-profile --instance-id <인스턴스ID> --iam-instance-profile Name=<프로필명> + +# Azure: 리소스 그룹 단위 역할 할당 +az role assignment create --assignee <사용자ID> --role "Virtual Machine Contributor" --scope /subscriptions/<구독ID>/resourceGroups/<리소스그룹> + +# GCP: 커스텀 역할 적용 +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=roles/compute.instanceAdmin +``` + +### CA-06: 네트워크 서비스 정책 관리 +**점검:** +```bash +# AWS: VPC/네트워크 관련 정책 확인 +aws ec2 describe-vpcs --output table +aws ec2 describe-security-groups --output table + +# Azure: NSG 확인 +az network nsg list --output table +az network nsg rule list --nsg-name --resource-group <리소스그룹> --output table + +# GCP: 방화벽 규칙 확인 +gcloud compute firewall-rules list +``` +**조치:** +```bash +# AWS: 보안 그룹 규칙 관리 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr <관리자IP>/32 + +# Azure: NSG 규칙 관리 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> +az network nsg rule create --nsg-name --resource-group --name <규칙명> --priority 100 --access Allow --source-address-prefixes --destination-port-ranges 22 + +# GCP: 방화벽 규칙 관리 +gcloud compute firewall-rules delete <규칙명> +gcloud compute firewall-rules create <규칙명> --allow tcp:22 --source-ranges=/32 +``` + +## 3. 가상 리소스 관리 + +### CA-07: VPC 네트워크 서브넷 관리 +**점검:** +```bash +# AWS: 서브넷 구성 확인 (Public/Private 분리 여부) +aws ec2 describe-subnets --output table +aws ec2 describe-route-tables --output table +aws ec2 describe-internet-gateways --output table +aws ec2 describe-nat-gateways --output table + +# Azure: 가상 네트워크 서브넷 확인 +az network vnet list --output table +az network vnet subnet list --vnet-name --resource-group --output table + +# GCP: 서브넷 확인 +gcloud compute networks subnets list +``` +**조치:** +```bash +# Public 서브넷: 인터넷 게이트웨이 할당 +# Private 서브넷: NAT 게이트웨이 할당 +# 서브넷별 네트워크 리소스 별도 설정 + +# AWS: NAT 게이트웨이 생성 (Private 서브넷용) +aws ec2 create-nat-gateway --subnet-id --allocation-id + +# Azure: Private 서브넷에 NSG 적용 +az network vnet subnet update --vnet-name --name <서브넷명> --resource-group --network-security-group +``` + +### CA-08: 가상 네트워크 리소스 관리 +**점검:** +```bash +# AWS: 공인 IP 할당 인스턴스 확인 +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress]" --output table + +# Azure: 공인 IP 확인 +az network public-ip list --output table +az vm list-ip-addresses --output table + +# GCP: 외부 IP 확인 +gcloud compute instances list --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)" +``` +**조치:** +```bash +# AWS: 불필요 공인 IP 해제 +aws ec2 disassociate-address --association-id <연결ID> +aws ec2 release-address --allocation-id <할당ID> + +# Azure: 공인 IP 해제 +az network nic ip-config update --resource-group --nic-name --name --remove publicIpAddress + +# GCP: 외부 IP 제거 +gcloud compute instances delete-access-config <인스턴스명> --access-config-name "External NAT" +``` + +### CA-09: 접근 제어 설정 관리 +**점검:** +```bash +# AWS: 보안 그룹 규칙 확인 (0.0.0.0/0 허용 여부) +aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,Ingress:IpPermissions}" --output json +# 0.0.0.0/0 허용 규칙 필터링 +aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" --output table + +# Azure: NSG 규칙 중 Any 허용 확인 +az network nsg list --query "[].{Name:name,Rules:securityRules[?sourceAddressPrefix=='*']}" --output json + +# GCP: 0.0.0.0/0 허용 방화벽 규칙 확인 +gcloud compute firewall-rules list --filter="sourceRanges=0.0.0.0/0" +``` +**조치:** +```bash +# AWS: 불필요한 0.0.0.0/0 규칙 제거 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port <포트> --cidr 0.0.0.0/0 + +# Azure: 불필요 규칙 삭제 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> + +# GCP: 불필요 방화벽 규칙 삭제 +gcloud compute firewall-rules delete <규칙명> + +# 공통: 관리자 IP 또는 특정 IP에서만 접속 허용 +``` + +### CA-10: 스토리지 리소스 퍼블릭 접근 관리 +**점검:** +```bash +# AWS: S3 버킷 퍼블릭 접근 확인 +aws s3api get-bucket-acl --bucket <버킷명> +aws s3api get-public-access-block --bucket <버킷명> +aws s3api get-bucket-policy --bucket <버킷명> + +# Azure: 스토리지 계정 공개 접근 확인 +az storage account list --query "[].{Name:name,PublicAccess:allowBlobPublicAccess}" --output table + +# GCP: 버킷 IAM 확인 +gsutil iam get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 퍼블릭 접근 차단 +aws s3api put-public-access-block --bucket <버킷명> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true + +# Azure: 스토리지 공개 접근 비활성화 +az storage account update --name <스토리지명> --resource-group --allow-blob-public-access false + +# GCP: 버킷에서 allUsers/allAuthenticatedUsers 제거 +gsutil iam ch -d allUsers gs://<버킷명> +gsutil iam ch -d allAuthenticatedUsers gs://<버킷명> +``` + +## 4. 운영 관리 + +### CA-11: 관계형 데이터베이스 암호화 설정 +**점검:** +```bash +# AWS: RDS 암호화 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Encrypted:StorageEncrypted}" --output table + +# Azure: SQL DB 암호화 확인 +az sql db tde show --server <서버명> --database --resource-group + +# GCP: Cloud SQL 암호화 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.dataDiskEncryptionConfiguration)" +``` +**조치:** +```bash +# AWS: RDS 암호화 활성화 (생성 시 또는 스냅샷 복원) +aws rds create-db-instance --db-instance-identifier --storage-encrypted --kms-key-id ... + +# Azure: TDE 활성화 +az sql db tde set --server <서버명> --database --resource-group --status Enabled + +# GCP: 기본적으로 저장 데이터 암호화 적용됨 (CMEK 설정 가능) +``` + +### CA-12: 통신 구간 암호화 설정 +**점검:** +```bash +# AWS: ELB/ALB SSL 인증서 확인 +aws elbv2 describe-listeners --load-balancer-arn --query "Listeners[*].{Port:Port,Protocol:Protocol,Certs:Certificates}" --output table + +# Azure: Application Gateway SSL 확인 +az network application-gateway ssl-cert list --gateway-name <게이트웨이명> --resource-group + +# 공통: TLS 버전 확인 +openssl s_client -connect <호스트>:443 -tls1_2 +``` +**조치:** +```bash +# 공통 권고사항: +# 서버 원격 접근 시 VPN, SSH 사용 +# TLS v1.2 이상 (TLS v1.3 권장) 사용 +# 블록 암호: SEED, ARIA, AES (키 128bits 이상) +# 공개키 암호: RSA (키 2048bits 이상) +# 해시: SHA-2 이상 +``` + +### CA-13: 클라우드 서비스 사용자 계정 로깅 설정 +**점검:** +```bash +# AWS: CloudTrail 설정 확인 +aws cloudtrail describe-trails --output table +aws cloudtrail get-trail-status --name <트레일명> + +# Azure: Activity Log 확인 +az monitor activity-log list --offset 1h --output table + +# GCP: Cloud Audit Logs 확인 +gcloud logging read "logName:cloudaudit.googleapis.com" --limit 10 +``` +**조치:** +```bash +# AWS: CloudTrail 활성화 +aws cloudtrail create-trail --name <트레일명> --s3-bucket-name <버킷명> --is-multi-region-trail +aws cloudtrail start-logging --name <트레일명> + +# Azure: 진단 설정 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <리소스ID> --logs '[{"category":"AuditEvent","enabled":true}]' --storage-account <스토리지ID> + +# GCP: Audit Log 기본 활성화됨, 추가 설정 시 +gcloud projects get-iam-policy --format=json +``` + +### CA-14: 인스턴스 로깅 설정 +**점검:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 그룹 확인 +aws logs describe-log-groups --output table + +# Azure: VM 진단 설정 확인 +az vm diagnostics get-default-config + +# GCP: Ops Agent 설치 확인 +gcloud compute instances describe <인스턴스명> --format="value(metadata.items)" +``` +**조치:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 전송 +aws ssm send-command --instance-ids <인스턴스ID> --document-name "AWS-ConfigureAWSPackage" --parameters '{"action":["Install"],"name":["AmazonCloudWatchAgent"]}' + +# Azure: VM 진단 확장 설치 +az vm diagnostics set --resource-group --vm-name --settings <설정JSON> + +# GCP: Ops Agent 설치 +gcloud compute ssh <인스턴스명> -- 'curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh && sudo bash add-google-cloud-ops-agent-repo.sh --also-install' +``` + +### CA-15: 관계형 데이터베이스 로깅 설정 +**점검:** +```bash +# AWS: RDS 로깅 파라미터 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Logs:EnabledCloudwatchLogsExports}" --output table + +# Azure: SQL 감사 설정 확인 +az sql server audit-policy show --server <서버명> --resource-group + +# GCP: Cloud SQL 로그 플래그 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.databaseFlags)" +``` +**조치:** +```bash +# AWS: RDS 로그 내보내기 활성화 +aws rds modify-db-instance --db-instance-identifier --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}' + +# Azure: SQL 감사 활성화 +az sql server audit-policy update --server <서버명> --resource-group --state Enabled --storage-account <스토리지명> + +# GCP: Cloud SQL 감사 로그 활성화 +gcloud sql instances patch <인스턴스명> --database-flags=log_output=FILE,general_log=on,slow_query_log=on +``` + +### CA-16: 오브젝트 스토리지 버킷 로깅 설정 +**점검:** +```bash +# AWS: S3 서버 액세스 로깅 확인 +aws s3api get-bucket-logging --bucket <버킷명> + +# Azure: Blob Storage 진단 로그 확인 +az monitor diagnostic-settings list --resource <스토리지리소스ID> + +# GCP: 버킷 로깅 확인 +gsutil logging get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 서버 액세스 로깅 활성화 +aws s3api put-bucket-logging --bucket <버킷명> --bucket-logging-status '{"LoggingEnabled":{"TargetBucket":"<로그버킷>","TargetPrefix":"logs/"}}' + +# Azure: Blob Storage 진단 로그 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <스토리지리소스ID> --logs '[{"category":"StorageRead","enabled":true},{"category":"StorageWrite","enabled":true},{"category":"StorageDelete","enabled":true}]' + +# GCP: 버킷 로깅 활성화 +gsutil logging set on -b gs://<로그버킷> gs://<대상버킷> +``` + +### CA-17: 로그 보관 기간 설정 +**점검:** +```bash +# AWS: CloudWatch Logs 보관 기간 확인 +aws logs describe-log-groups --query "logGroups[*].{Name:logGroupName,Retention:retentionInDays}" --output table +# S3 수명 주기 정책 확인 +aws s3api get-bucket-lifecycle-configuration --bucket <버킷명> + +# Azure: 로그 보관 정책 확인 +az monitor diagnostic-settings list --resource <리소스ID> + +# GCP: 로그 버킷 보관 기간 확인 +gcloud logging buckets describe <버킷명> --location=global +``` +**조치:** +```bash +# AWS: CloudWatch Logs 보관 기간 설정 (예: 365일) +aws logs put-retention-policy --log-group-name <로그그룹명> --retention-in-days 365 + +# Azure: 진단 설정에서 보관 기간 설정 (일반적으로 Azure Portal에서 설정) + +# GCP: 로그 버킷 보관 기간 설정 +gcloud logging buckets update <버킷명> --location=global --retention-days=365 +``` + +### CA-18: 백업 사용 여부 +**점검:** +```bash +# AWS: 백업 설정 확인 +aws backup list-backup-plans --output table +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,BackupRetention:BackupRetentionPeriod}" --output table +aws ec2 describe-snapshots --owner-ids self --output table + +# Azure: 백업 항목 확인 +az backup item list --vault-name <볼트명> --resource-group --output table + +# GCP: 스냅샷 확인 +gcloud compute snapshots list +gcloud sql backups list --instance=<인스턴스명> +``` +**조치:** +```bash +# AWS: 자동 백업 설정 +aws backup create-backup-plan --backup-plan file://backup-plan.json +# RDS 백업 보관 기간 설정 +aws rds modify-db-instance --db-instance-identifier --backup-retention-period 7 + +# Azure: 백업 정책 설정 +az backup protection enable-for-vm --resource-group --vault-name <볼트명> --vm --policy-name <정책명> + +# GCP: 스냅샷 스케줄 생성 +gcloud compute resource-policies create snapshot-schedule <정책명> --region=<리전> --max-retention-days=14 --daily-schedule +``` + +### CA-19: 가상 리소스 이상징후 알림 설정 +**점검:** +```bash +# AWS: CloudWatch 알람 확인 +aws cloudwatch describe-alarms --output table + +# Azure: 경고 규칙 확인 +az monitor metrics alert list --output table + +# GCP: 알림 정책 확인 +gcloud alpha monitoring policies list +``` +**조치:** +```bash +# AWS: CloudWatch 알람 생성 (예: CPU 사용률) +aws cloudwatch put-metric-alarm --alarm-name "HighCPU" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions --dimensions Name=InstanceId,Value=<인스턴스ID> + +# Azure: 메트릭 경고 생성 +az monitor metrics alert create --name "HighCPU" --resource-group --scopes <리소스ID> --condition "avg Percentage CPU > 80" --action <액션그룹ID> + +# GCP: 알림 정책 생성 (gcloud 또는 Cloud Console에서 설정) +# Cloud Console > Monitoring > 알림 > 정책 만들기 > 조건 및 알림 채널(SMS, 이메일) 설정 +``` diff --git a/skills/kesekit-fix/scripts/cii/database.md b/skills/kesekit-fix/scripts/cii/database.md new file mode 100644 index 0000000..5abb7fb --- /dev/null +++ b/skills/kesekit-fix/scripts/cii/database.md @@ -0,0 +1,649 @@ +# DBMS 점검 스크립트 (D-01 ~ D-26) + +## 1. 계정 관리 + +### D-01: 기본 계정의 비밀번호, 정책 등을 변경하여 사용 +**점검:** +```sql +-- Oracle: 기본 계정 사용 여부 및 정책 확인 +SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE account_status = 'OPEN'; + +-- MSSQL: sa 계정 확인 +SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa'; + +-- MySQL: root 계정 확인 +SELECT User, Host FROM mysql.user; +SHOW VARIABLES LIKE 'validate_password%'; + +-- PostgreSQL: 역할 확인 +SELECT rolname, rolsuper FROM pg_roles; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; + +-- Cubrid +SELECT name, password FROM db_user; +SELECT * FROM db_password; +``` +**조치:** +```sql +-- Oracle: 비밀번호 변경 / 잠금 +ALTER USER <기본계정명> IDENTIFIED BY <신규비밀번호>; +ALTER USER <기본계정명> ACCOUNT LOCK; + +-- MSSQL: sa 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; + +-- MySQL 5.7 +UPDATE user SET authentication_string = PASSWORD('신규비밀번호') WHERE User = 'root'; +FLUSH PRIVILEGES; +-- MySQL 8.0 +ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; +FLUSH PRIVILEGES; + +-- Altibase +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- Tibero +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- PostgreSQL +ALTER USER postgres WITH PASSWORD '신규비밀번호'; + +-- Cubrid +ALTER USER "사용자계정명" PASSWORD '신규비밀번호'; +``` + +### D-02: 불필요 계정 제거 또는 잠금설정 +**점검:** +```sql +-- Oracle +SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; + +-- MSSQL +SELECT name, is_disabled FROM sys.server_principals; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM all_users; +SELECT * FROM dba_users; + +-- PostgreSQL +SELECT * FROM pg_roles; +-- 또는 명령어: \du + +-- Cubrid +SELECT name, password FROM db_user; +``` +**조치:** +```sql +-- Oracle +DROP USER [삭제할 계정]; + +-- MSSQL +EXEC sp_droplogin '삭제할 계정'; + +-- MySQL +DROP USER '삭제할 계정'@'호스트명'; +FLUSH PRIVILEGES; + +-- Altibase / Tibero +DROP USER user_name CASCADE; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; + +-- Cubrid +DROP USER [삭제할 계정]; +``` + +### D-03: 비밀번호 사용 기간 및 복잡도 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES WHERE resource_name LIKE 'PASSWORD%'; + +-- MySQL +SHOW VARIABLES LIKE 'validate_password%'; +SHOW VARIABLES LIKE 'default_password_lifetime'; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle: 비밀번호 정책 설정 +ALTER PROFILE <프로파일명> LIMIT + FAILED_LOGIN_ATTEMPTS 3 + PASSWORD_LIFE_TIME 30 + PASSWORD_REUSE_TIME 30 + PASSWORD_VERIFY_FUNCTION verify_function + PASSWORD_GRACE_TIME 5; +ALTER USER <계정명> PROFILE <프로파일명>; + +-- MSSQL: 암호 만료 강제 적용 (SSMS GUI) +-- 보안 > 로그인 > 속성 > "암호 만료 강제 적용" 설정 +-- OS 암호 정책: [로컬 보안 정책] > [암호 정책] > 최대 암호 사용 기간: 60일 + +-- MySQL: 복잡도 정책 +INSTALL COMPONENT 'file://component_validate_password'; +SET GLOBAL validate_password.policy = 'MEDIUM'; +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.mixed_case_count = 1; +SET GLOBAL validate_password.number_count = 1; +SET GLOBAL validate_password.special_char_count = 1; +-- LifeTime 정책 +SET GLOBAL default_password_lifetime = 90; +ALTER USER '<계정명>'@'<호스트>' PASSWORD EXPIRE INTERVAL 91 DAY; + +-- Altibase +ALTER USER 계정명 LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7); + +-- Tibero +CREATE PROFILE prof LIMIT + failed_login_attempts 3 + password_lock_time 1/1440 + password_life_time 90 + password_reuse_time unlimited + password_reuse_max 10 + password_grace_time 10 + password_verify_function verify_function; +``` + +### D-04: 관리자 권한을 필요한 계정에만 허용 +**점검:** +```sql +-- Oracle: SYSDBA 권한 점검 +SELECT username FROM v$pwfile_users WHERE username NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +) AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +-- Admin 부적합 계정 점검 +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ( + 'SYS','SYSTEM','AQ_ADMINISTRATOR_ROLE','DBA','DSYS','BACSYS','SCHEDULER_ADMIN','MSYS' +) AND admin_option = 'YES' AND grantee NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +); + +-- MySQL: SUPER 권한 확인 +SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; + +-- PostgreSQL +SELECT * FROM pg_user; +SELECT username, usesuper FROM pg_shadow; + +-- Cubrid: DBA 권한 사용자 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +REVOKE <권한> FROM <계정명>; +GRANT <권한> ON <테이블명> TO <계정명>; + +-- MSSQL: sysadmin 역할에서 삭제 +EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; + +-- MySQL: SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; + +-- PostgreSQL: 불필요 관리자 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; + +-- Cubrid: DBA 권한 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +``` + +### D-05: 비밀번호 재사용 제약 설정 +**점검:** +```sql +-- Oracle +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' + AND limit IN ('UNLIMITED', 'NULL'); +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' + AND limit IN ('UNLIMITED', 'NULL'); + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; + +-- Altibase +ALTER USER [계정명] LIMIT (PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 10); + +-- Tibero +CREATE PROFILE prof LIMIT + password_reuse_time unlimited + password_reuse_max 10; +``` + +### D-06: DB 사용자 계정 개별 부여 +**점검:** +```sql +-- Oracle +SELECT username FROM dba_users ORDER BY username; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL +SELECT * FROM pg_shadow; + +-- Altibase +SELECT * FROM system_.sys_users_; +``` +**조치:** +```sql +-- Oracle: 공용 계정 삭제 후 개별 계정 생성 +DROP USER '공용계정'; +CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +GRANT connect, resource TO [계정명]; + +-- MSSQL +EXEC sp_droplogin '공용계정'; +CREATE LOGIN '생성계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성계정' FOR LOGIN '생성계정'; + +-- MySQL +DROP USER <계정명>@<호스트>; +CREATE USER '<계정명>'@'<호스트>' IDENTIFIED BY '비밀번호'; +GRANT SELECT, INSERT ON DB이름.테이블명 TO '<계정명>'@'<호스트>'; +FLUSH PRIVILEGES; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' <권한명>; +``` + +### D-07: root 권한으로 서비스 구동 제한 +**점검:** +```bash +# Oracle +ps -ef | grep pmon +ps -ef | grep tnslsnr + +# MySQL +ps -ef | grep mysqld +cat /etc/my.cnf | grep user + +# Altibase +ps -ef | grep altibase | grep -v grep +``` +**조치:** +```bash +# Oracle: oracle 계정으로 전환 후 구동 +su - oracle +lsnrctl start +sqlplus / as sysdba +startup + +# MySQL: my.cnf [mysqld] 섹션에 user 지정 +# vi /etc/my.cnf +# [mysqld] +# user = mysql + +# Altibase: 전용 계정으로 소유자 변경 +chown -R [계정명]:[그룹명] '[Altibase 디렉터리]' +``` + +### D-08: 안전한 암호화 알고리즘 사용 +**점검:** +```sql +-- Oracle: 암호화 알고리즘 확인 +SELECT * FROM v$parameter WHERE name LIKE '%crypto%'; + +-- MySQL +SHOW VARIABLES LIKE '%ssl%'; +``` +**조치:** +```sql +-- 안전한 암호화 알고리즘(AES-256, SHA-256 등) 사용 설정 +-- DBMS별 암호화 설정은 벤더 문서 참조 +``` + +### D-09: 로그인 실패 시 잠금정책 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES + WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS'; + +-- MySQL +SHOW VARIABLES LIKE 'max_connect_errors'; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE <프로파일명> LIMIT FAILED_LOGIN_ATTEMPTS 5; + +-- MySQL +SET GLOBAL max_connect_errors = 5; +``` + +## 2. 접근 관리 + +### D-10: 원격에서 DB 서버 접속 제한 +**점검:** +```sql +-- Oracle: listener.ora에서 접근 IP 제한 확인 +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL: pg_hba.conf 확인 +``` +**조치:** +```sql +-- MySQL: 원격 접속 제한 +-- 특정 IP에서만 접속 가능하도록 계정 생성 +CREATE USER '<계정명>'@'<허용IP>' IDENTIFIED BY '비밀번호'; +-- 모든 호스트 접근 가능 계정 삭제 +DROP USER '<계정명>'@'%'; +FLUSH PRIVILEGES; +``` +```bash +# Oracle: $ORACLE_HOME/network/admin/sqlnet.ora +# tcp.validnode_checking = YES +# tcp.invited_nodes = (허용IP1, 허용IP2) + +# PostgreSQL: pg_hba.conf에서 접근 IP 제한 +# host all all <허용IP>/32 md5 +``` + +### D-11: 시스템 테이블 접근 제한 +**점검:** +```sql +-- Oracle: DBA 이외 시스템 테이블 접근 권한 확인 +SELECT grantee, privilege, table_name FROM dba_tab_privs + WHERE table_name IN (SELECT table_name FROM dba_tables WHERE owner = 'SYS'); +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.<테이블명> FROM <계정명>; +``` + +### D-12: 리스너 비밀번호 설정 +**점검:** +```bash +# Oracle: listener.ora 파일 확인 +cat $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: 리스너 비밀번호 설정 +lsnrctl +LSNRCTL> set current_listener <리스너명> +LSNRCTL> change_password +# Old password: (빈칸) +# New password: <비밀번호> +LSNRCTL> save_config +``` + +### D-13: 불필요한 ODBC/OLE-DB 데이터 소스 제거 +**점검:** +```powershell +# Windows: ODBC 데이터 소스 확인 +Get-OdbcDsn +``` +**조치:** +```powershell +# Windows: 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType "System" +``` + +### D-14: 주요 파일 접근 권한 설정 +**점검:** +```bash +# Oracle +ls -la $ORACLE_HOME/dbs/*.ora +ls -la $ORACLE_HOME/network/admin/*.ora + +# MySQL +ls -la /etc/my.cnf +ls -la /var/lib/mysql/ + +# PostgreSQL +ls -la /var/lib/pgsql/data/pg_hba.conf +ls -la /var/lib/pgsql/data/postgresql.conf +``` +**조치:** +```bash +# Oracle: 640 이하 권한 설정 +chmod 640 $ORACLE_HOME/dbs/*.ora +chmod 640 $ORACLE_HOME/network/admin/*.ora +chown oracle:dba $ORACLE_HOME/dbs/*.ora + +# MySQL +chmod 640 /etc/my.cnf +chown mysql:mysql /etc/my.cnf + +# PostgreSQL +chmod 600 /var/lib/pgsql/data/pg_hba.conf +chown postgres:postgres /var/lib/pgsql/data/pg_hba.conf +``` + +### D-15: 리스너 로그 및 trace 파일 변경 제한 +**점검:** +```bash +# Oracle: listener.ora에서 ADMIN_RESTRICTIONS 확인 +grep ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: listener.ora에 추가 +# ADMIN_RESTRICTIONS_<리스너명> = ON +``` + +### D-16: Windows 인증 모드 사용 +**점검:** +```sql +-- MSSQL: 인증 모드 확인 +SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); +-- 1: Windows 인증 모드, 0: 혼합 모드 +``` +**조치:** +``` +-- MSSQL: SSMS > 서버 속성 > 보안 > "Windows 인증 모드" 선택 +``` + +## 3. 옵션 관리 + +### D-17: Audit Table 접근 제한 +**점검:** +```sql +-- Oracle: Audit 테이블 접근 권한 확인 +SELECT grantee, privilege FROM dba_tab_privs WHERE table_name LIKE '%AUDIT%'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.AUD$ FROM <계정명>; +``` + +### D-18: DBA 계정 Role이 Public으로 설정되지 않도록 조정 +**점검:** +```sql +-- Oracle: PUBLIC에 부여된 권한 확인 +SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'PUBLIC'; +``` +**조치:** +```sql +-- Oracle: PUBLIC에서 불필요 Role/권한 회수 +REVOKE FROM PUBLIC; +REVOKE EXECUTE ON <패키지명> FROM PUBLIC; +``` + +### D-19: OS_ROLES 등 FALSE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER OS_ROLES; +SHOW PARAMETER REMOTE_OS_AUTHENTICATION; +SHOW PARAMETER REMOTE_OS_ROLES; +``` +**조치:** +```sql +-- Oracle: init.ora 또는 spfile 수정 +ALTER SYSTEM SET OS_ROLES = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_AUTHENTICATION = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE; +-- DB 재시작 필요 +``` + +### D-20: 인가되지 않은 Object Owner 제한 +**점검:** +```sql +-- Oracle: Object Owner 확인 +SELECT owner, object_type, count(*) FROM dba_objects GROUP BY owner, object_type ORDER BY owner; +``` +**조치:** +```sql +-- 불필요한 Object Owner의 객체를 적절한 스키마로 이전 또는 삭제 +``` + +### D-21: 인가되지 않은 GRANT OPTION 사용 제한 +**점검:** +```sql +-- Oracle +SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE admin_option = 'YES'; +SELECT grantee, table_name, privilege, grantable FROM dba_tab_privs WHERE grantable = 'YES'; +``` +**조치:** +```sql +-- Oracle: ADMIN OPTION 제거 후 재부여 +REVOKE <권한> FROM <계정명>; +GRANT <권한> TO <계정명>; +``` + +### D-22: 자원 제한 기능 TRUE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER RESOURCE_LIMIT; +``` +**조치:** +```sql +-- Oracle +ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +``` + +### D-23: xp_cmdshell 사용 제한 +**점검:** +```sql +-- MSSQL +EXEC sp_configure 'xp_cmdshell'; +``` +**조치:** +```sql +-- MSSQL: xp_cmdshell 비활성화 +EXEC sp_configure 'show advanced options', 1; +RECONFIGURE; +EXEC sp_configure 'xp_cmdshell', 0; +RECONFIGURE; +``` + +### D-24: Registry Procedure 권한 제한 +**점검:** +```sql +-- MSSQL: 레지스트리 관련 확장 저장 프로시저 확인 +SELECT name FROM sys.objects WHERE name LIKE 'xp_reg%'; +``` +**조치:** +```sql +-- MSSQL: public에서 실행 권한 제거 +DENY EXECUTE ON xp_regread TO public; +DENY EXECUTE ON xp_regwrite TO public; +DENY EXECUTE ON xp_regdeletekey TO public; +DENY EXECUTE ON xp_regdeletevalue TO public; +DENY EXECUTE ON xp_regenumvalues TO public; +``` + +## 4. 패치 관리 + +### D-25: 주기적 보안 패치 및 벤더 권고 사항 적용 +**점검:** +```sql +-- Oracle: 버전 확인 +SELECT * FROM v$version; + +-- MSSQL: 버전 확인 +SELECT @@VERSION; + +-- MySQL: 버전 확인 +SELECT VERSION(); + +-- PostgreSQL: 버전 확인 +SELECT version(); +``` +**조치:** +``` +-- 공통: 벤더 보안 패치 사이트에서 최신 패치 확인 및 적용 +-- Oracle: https://www.oracle.com/security-alerts/ +-- MSSQL: https://learn.microsoft.com/ko-kr/sql/ +-- MySQL: https://dev.mysql.com/downloads/ +-- PostgreSQL: https://www.postgresql.org/support/security/ +``` + +### D-26: 감사 기록 정책 설정 +**점검:** +```sql +-- Oracle: Audit 설정 확인 +SHOW PARAMETER AUDIT_TRAIL; +SELECT * FROM dba_stmt_audit_opts; +SELECT * FROM dba_priv_audit_opts; + +-- MSSQL: 감사 설정 확인 +SELECT * FROM sys.server_audits; + +-- MySQL: 로그 설정 확인 +SHOW VARIABLES LIKE 'general_log%'; +SHOW VARIABLES LIKE 'log_bin%'; + +-- PostgreSQL +SHOW log_statement; +SHOW log_connections; +SHOW log_disconnections; +``` +**조치:** +```sql +-- Oracle: Audit 활성화 +ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE=SPFILE; +AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS; +AUDIT CREATE SESSION; + +-- MySQL: 일반 로그 활성화 +SET GLOBAL general_log = 'ON'; +SET GLOBAL general_log_file = '/var/log/mysql/general.log'; + +-- PostgreSQL: postgresql.conf +-- log_statement = 'all' +-- log_connections = on +-- log_disconnections = on +-- logging_collector = on +``` diff --git a/skills/kesekit-fix/scripts/cii/network.md b/skills/kesekit-fix/scripts/cii/network.md new file mode 100644 index 0000000..9d0b68d --- /dev/null +++ b/skills/kesekit-fix/scripts/cii/network.md @@ -0,0 +1,892 @@ +# 네트워크 장비 점검 스크립트 (N-01 ~ N-38) + +## 1. 계정 관리 + +### N-01: 비밀번호 설정 +**점검:** +``` +! Cisco IOS +Router> enable +Router# show running-config +! VTY, 콘솔, AUX 포트의 login/password 설정 확인 + +! Juniper Junos +user@host> configure +user@host# show + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - enable 비밀번호 +Router(config)# enable secret <비밀번호> +! VTY 비밀번호 +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! 콘솔 비밀번호 +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! AUX 비밀번호 +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> + +! Radware Alteon +Main# /cfg/sys/access/user/admpw +Main# apply +Main# save + +! Juniper Junos +user@host# set system root-authentication plain-test-passwd + +! Piolink PLOS +(config)# password +``` + +### N-02: 비밀번호 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! security passwords min-length 설정 확인 +``` +**조치:** +``` +! Cisco IOS - 비밀번호 최소 길이 설정 +Router(config)# security passwords min-length <길이> +``` + +### N-03: 암호화된 비밀번호 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! enable secret / username secret / service password-encryption 확인 + +! Juniper Junos +user@host# show +! encrypted-password 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# enable secret <비밀번호> +Router(config)# username <사용자> secret <비밀번호> +Router(config)# service password-encryption + +! Juniper Junos +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> +``` + +### N-04: 계정 잠금 임계값 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show login + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! Cisco IOS +Router(config)# login block-for <잠금시간> attempts <실패횟수> within <허용시간> + +! Juniper Junos +[edit system login retry-options] +user@host# set tries-before-disconnect <실패횟수> +user@host# set lockout-period <잠금시간> +``` + +### N-05: 사용자/명령어별 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show privilege + +! Juniper Junos +! [edit system login] 에서 superuser, read-only 클래스 분리 확인 +``` +**조치:** +``` +! Cisco IOS - 사용자별 권한 수준 지정 +Router(config)# username [ID] privilege [1-15] secret [PASS] +! 명령어별 권한 수준 지정 (중요 명령어 레벨 15 적용) +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging + +! Juniper Junos +[edit system login] +login { + class class-name { + allow-commands "regular-expression"; + deny-commands "regular-expression"; + idle-timeout minutes; + permissions [ permissions ]; + } +} + +! Piolink PLOS +! 슈퍼 유저(root)와 일반 유저로 권한 분리 관리 +``` + +## 2. 접근 관리 + +### N-06: VTY 접근(ACL) 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list 및 access-class 설정 확인 + +! Juniper Junos +user@host# show +! firewall filter + 루프백 인터페이스 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty 0 4 +Router(config-line)# access-class in + +! Radware Alteon +# cfg > sys > access > mgmt > add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply > save + +! Juniper Junos +user@host# set policy-options prefix-list +user@host# edit firewall family inet filter +user@host# edit term +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set from protocol tcp +user@host# set from destination-port ssh +user@host# set then discard +! 기본 허용 종료 +user@host# set term then accept +! 루프백에 적용 +user@host# set interfaces lo0 unit 0 family inet filter input + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-07: Session Timeout 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! exec-timeout 설정 확인 +``` +**조치:** +``` +! Cisco IOS (10분 이하 권고, 예: 5분) +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 + +! Radware Alteon +# cfg > sys > idle <분> > apply > save + +! Juniper Junos +[edit login] +user@host# set class <클래스> idle-timeout <분> + +! Piolink PLOS +(config)# terminal timeout <분> +``` + +### N-08: VTY 접속 시 안전한 프로토콜 사용 +**점검:** +``` +! Cisco IOS +Router# show ip ssh +Router# show version + +! Juniper Junos +user@host# set ssh +``` +**조치:** +``` +! Cisco IOS - SSH 설정 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +Router(config)# ip ssh version 2 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh authentication-retries <횟수> +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh + +! Radware Alteon +# cfg > /sys/sshd ena > /sys/sshd on > apply > save + +! Juniper Junos +root# set system services ssh +root# delete system services telnet +root# commit + +! Piolink PLOS +(config-management-access)# ssh status enable +(config-management-access)# telnet status disable +(config-management-access)# apply +``` + +### N-09: 불필요한 보조 입출력 포트 사용 금지 +**점검:** +``` +! Cisco IOS +Router# show running +! 불필요 포트 Up/Down 확인 +``` +**조치:** +``` +! Cisco IOS - AUX 포트 차단 +Router(config)# line aux 0 +Router(config-line)# no password +Router(config-line)# transport input none +Router(config-line)# no exec +Router(config-line)# exec-timeout 0 1 + +! Juniper Junos +[edit system ports] +root# set auxiliary disable +root# commit +``` + +### N-10: 로그인 시 경고 메시지 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! banner 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# banner motd # <경고 문구> # +Router(config)# banner login # <경고 문구> # +Router(config)# banner exec # <경고 문구> # + +! Radware Alteon +# cfg > sys > banner > apply > save + +! Juniper Junos +[edit system login] +message "경고 문구" +``` + +### N-11: 원격로그 서버 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging trap informational +Router(config)# logging +Router(config)# logging facility local6 +Router(config)# logging source-interface serial 0 + +! Radware Alteon +# cfg > sys > /syslog/host > apply > save + +! Juniper Junos +user@host# edit system syslog +user@host# set system syslog file message any error +user@host# set system syslog host any any +user@host# set archive files 5 sizes 5m world-readable + +! Piolink PLOS +# logging server enable +# logging server +``` + +## 3. 패치 관리 + +### N-12: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +``` +! Cisco IOS +Router# show version + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! 공통 +! 1. 하드웨어/소프트웨어/EOL/패치 현황 문서화 +! 2. 벤더 보안 패치 및 권고사항 입수 +! 3. 취약점 영향도/발생 가능성 분석 후 패치 우선순위 결정 +! 4. 테스트베드(GNS3 등)에서 패치 검증 +! 5. 패치 적용 전 이미지/설정 백업 후 적용 +! 벤더별 패치 사이트: +! Cisco: https://software.cisco.com +! Juniper: https://support.juniper.net/support/downloads +! 공통: https://www.krcert.or.kr +``` + +## 4. 로그 관리 + +### N-13: 로깅 버퍼 크기 설정 +**점검:** +``` +! Cisco IOS +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging buffered 16000 +Router(config)# logging buffered informational + +! Piolink PLOS +(config)# logging buffer +(config)# logging priority +``` + +### N-14: 정책에 따른 로깅 설정 +**점검:** +``` +! Cisco IOS +Router# show logging + +! Juniper Junos +user@host# show log messages +``` +**조치:** +``` +! 공통 - 6가지 로깅 방법 활용 +! 1. 콘솔 로깅: 콘솔 포트에서만 확인 +! 2. Buffered 로깅: RAM에 저장 (버퍼 가득 차면 오래된 로그 대체) +! 3. Terminal 로깅: terminal monitor로 VTY에 전송 +! 4. Syslog: 외부 syslog 서버에 저장 +! 5. SNMP traps: 외부 SNMP 서버에 전송 +! 6. ACL 침입 로깅: ACL 룰에 log/log-input 추가 +``` + +### N-15: NTP 및 시각 동기화 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ntp server 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# ntp server + +! Radware Alteon +# cfg > /sys/ntp > on +# prisrvr +# intrval <동기화주기> +# tzone +9:00 +# apply > save + +! Juniper Junos +[edit system ntp] +user@host# set server +user@host# set boot-server +``` + +### N-16: Timestamp 로그 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service timestamps 확인 +``` +**조치:** +``` +! Cisco IOS - UTC 시간 밀리초 단위 +Router(config)# service timestamps log datetime msec show-timezone +! 로컬 시간(KST) 밀리초 단위 +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone +``` + +## 5. 기능 관리 + +### N-17: SNMP 서비스 확인 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show snmp + +! Juniper Junos +user@host# show snmp + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - SNMP 비활성화 +Router(config)# no snmp-server + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: d + +! Juniper Junos +user@host# no set snmp community public +``` + +### N-18: SNMP Community String 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community 설정 확인 (public/private 사용 여부) +``` +**조치:** +``` +! Cisco IOS +Router(config)# snmp-server community <복잡한String> + +! Radware Alteon +# cfg/sys/ssnmp +# rcomm <복잡한String> +# wcomm <복잡한String> +# apply > save + +! Juniper Junos +user@host# set snmp community <복잡한String> authorization read-only + +! Piolink PLOS +switch(config-snmp)# community <복잡한String> +switch(config-snmp)# status enable +switch(config-snmp)# apply +``` + +### N-19: SNMP ACL 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community + ACL 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + +! Juniper Junos +[edit snmp] +user@host# edit client-list +user@host# set default restrict +user@host# set +user@host# up +user@host# edit community +user@host# set client-list-name + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-20: SNMP Community 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community RO/RW 확인 +``` +**조치:** +``` +! Cisco IOS - RO 권한만 설정 +Router(config)# snmp-server community RO + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: r +>> Main# apply + +! Juniper Junos +[edit snmp] +user@host# delete community +user@host# set community authorization read-only +! SNMPv3 그룹 RW 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <모델> security-level <레벨> write-view + +! Piolink PLOS +switch(config-snmp)# policy read-only +switch(config-snmp)# apply +``` + +### N-21: TFTP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tftp +``` + +### N-22: Spoofing 방지 필터링 적용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list deny 설정 확인 + +! Juniper Junos +! Configure/Apply Firewall Filters 확인 +``` +**조치:** +``` +! Cisco IOS - Anti-Spoofing ACL (Extended ACL 100-199) +Router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +Router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +Router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +Router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any +Router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +Router(config)# access-list permit ip any any +Router(config)# interface serial <인터페이스> +Router(config-if)# ip access-group in + +! Juniper Junos +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +[edit firewall family inet filter ] +user@host# set term then accept +user@host# set interfaces <인터페이스> unit <유닛> family inet filter input +``` + +### N-23: DDoS 공격 방어 설정 또는 DDoS 장비 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show configuration +``` +**조치:** +``` +! 공통 - DDoS 방어 3가지 방법 +! 1. ACL: 스푸핑 방지 필터링 사전 적용, 공격 유형별 IP/프로토콜/포트 임시 차단 +! 2. Rate Limiting: UDP, ICMP, TCP SYN 패킷 대역폭 제한 +! 3. TCP Intercept: SYN Flooding 방어 +! - Intercept 모드: 라우터가 SYN-ACK 대신 응답 +! - Watch 모드: SYN 전달 후 30초 미완료 시 RST 전송 +``` + +### N-24: 사용하지 않는 인터페이스 비활성화 +**점검:** +``` +! Cisco IOS +Router# show interface +! Administratively down 확인 + +! Juniper Junos +user@host# show interface terse +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# shutdown + +! Radware Alteon +>> Main# /cfg/port <포트>/dis +>> Main# apply + +! Juniper Junos +[edit interfaces] +user@host# set <인터페이스> disable + +! Piolink PLOS +switch(config)# port <포트> status disable +switch(config)# apply +``` + +### N-25: TCP Keepalive 서비스 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service tcp-keepalives 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# service tcp-keepalives-in +Router(config)# service tcp-keepalives-out +``` + +### N-26: Finger 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip finger + +! Juniper Junos +[edit system services] +user@host# delete finger +user@host# commit +``` + +### N-27: 웹 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip http server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip http server +Router(config)# no ip http secure-server + +! Radware Alteon +>> Main# /cfg/sys/access/https/https dis +>> Main# apply + +! Juniper Junos +user@host# delete system services web-management + +! Piolink PLOS +(config-management-access)# http status disable +(config-management-access)# https status disable +``` + +### N-28: TCP/UDP Small 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +``` + +### N-29: Bootp 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip bootp server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip bootp server +! DHCP 유지하고 BOOTP만 차단 시 +Router(config)# ip dhcp bootp ignore + +! Radware Alteon +>> Main# /cfg/sys/bootp dis +>> Main# apply + +! Juniper Junos +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스> server <주소> +``` + +### N-30: CDP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show cdp +``` +**조치:** +``` +! Cisco IOS - 전체 비활성화 +Router(config)# no cdp run +! 특정 인터페이스 비활성화 +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +``` + +### N-31: Directed-broadcast 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast + +! Radware Alteon +# cfg/l3/frwd > dirbr disable > apply > save + +! Passport +# config vlan ip directed-broadcast > disable +``` + +### N-32: Source Routing 차단 +**점검:** +``` +! Cisco IOS / Juniper Junos +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip source-route + +! Juniper Junos +user@host# set chassis no-source-route +``` + +### N-33: Proxy ARP 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp + +! Juniper Junos +[edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp +``` + +### N-34: ICMP unreachable, redirect 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! 각 인터페이스 no ip unreachables / no ip redirects 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects + +! Juniper Junos - 전체 장비 +[edit system] +user@host# set no-redirects +! 특정 인터페이스 +[edit interfaces] +user@host# set <인터페이스> unit <유닛> family <패밀리> no-redirects +``` + +### N-35: identd 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip identd +``` + +### N-36: Domain Lookup 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip domain lookup +``` + +### N-37: PAD 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service pad +``` + +### N-38: mask-reply 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show ip interface +! "ICMP mask replies are never sent" 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +``` diff --git a/skills/kesekit-fix/scripts/cii/pc.md b/skills/kesekit-fix/scripts/cii/pc.md new file mode 100644 index 0000000..167c9ca --- /dev/null +++ b/skills/kesekit-fix/scripts/cii/pc.md @@ -0,0 +1,348 @@ +# PC 점검 스크립트 (PC-01 ~ PC-18) + +## 1. 계정 관리 + +### PC-01: 비밀번호의 주기적 변경 +**점검:** +```powershell +# 최대 암호 사용 기간 확인 +net accounts | findstr "최대" +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol.cfg +findstr "MaximumPasswordAge" C:\secpol.cfg +findstr "MinimumPasswordAge" C:\secpol.cfg +findstr "PasswordHistorySize" C:\secpol.cfg +``` +**조치:** +```powershell +# 최대 암호 사용 기간 90일 설정 +net accounts /maxpwage:90 +# 최소 암호 사용 기간 1일 +net accounts /minpwage:1 + +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최대 암호 사용 기간": 90일 +# "최소 암호 사용 기간": 1일 +# "최근 암호 기억": 24개 + +# 계정별 비밀번호 기간 설정 +# LUSRMGR.MSC > 사용자 > 계정 속성 > "암호 사용 기간 제한 없음" 해제 +``` + +### PC-02: 비밀번호 관리정책 설정 +**점검:** +```powershell +# 암호 복잡성 및 최소 길이 확인 +net accounts +secedit /export /cfg C:\secpol.cfg +findstr "MinimumPasswordLength" C:\secpol.cfg +findstr "PasswordComplexity" C:\secpol.cfg +``` +**조치:** +```powershell +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최소 암호 길이": 8문자 이상 +# "암호는 복잡성을 만족해야 함": 사용함 + +# 복잡성 기준: 영문 대/소문자, 숫자, 특수문자 중 +# 2종류 조합 시 최소 10자리 이상 +# 3종류 조합 시 최소 8자리 이상 +``` + +### PC-03: 복구 콘솔에서 자동 로그온 금지 +**점검:** +```powershell +# 복구 콘솔 자동 로그온 설정 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "복구 콘솔: 자동 관리 로그온 허용" -> "사용 안 함" + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel /t REG_DWORD /d 0 /f +``` + +## 2. 서비스 관리 + +### PC-04: 공유 폴더 제거 +**점검:** +```powershell +# 공유 폴더 목록 확인 +net share +# 기본 공유 폴더 확인 (C$, D$, Admin$, IPC$) +Get-SmbShare +# AutoShareWks 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks +``` +**조치:** +```powershell +# 기본 공유 폴더 삭제 +net share C$ /delete +net share D$ /delete +net share Admin$ /delete + +# 재부팅 시 자동 공유 방지 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 일반 공유 폴더 삭제 +net share <공유폴더명> /delete + +# 공유 폴더 접근에 "Everyone" 제거 (GUI) +# 컴퓨터 관리 > 공유 폴더 > 공유 > 속성 > 공유 사용 권한 > Everyone 제거 + +# 암호로 보호된 공유 설정 +# 설정 > 네트워크 > 고급 공유 설정 > 모든 네트워크 > "암호로 보호된 공유" 켬 +``` + +### PC-05: 불필요한 서비스 제거 +**점검:** +```powershell +# 실행 중인 서비스 목록 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType +# 특정 불필요 서비스 확인 +Get-Service -Name "RemoteRegistry","Messenger","Clipbook","Alerter" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# 불필요 서비스 중지 및 시작 유형 변경 +# GUI: services.msc > 해당 서비스 > 속성 > 시작 유형: 사용 안 함 + +# PowerShell로 서비스 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 일반적으로 불필요한 서비스 예시: +# Alerter, Clipbook, Computer Browser, DHCP Client (고정IP 사용 시) +# Distributed Link Tracking Client, Error Reporting Service +# Messenger, NetMeeting Remote Desktop Sharing +# Print Spooler (프린터 미사용 시), Remote Registry +# Simple TCP/IP Services, Universal Plug and Play Device Host +``` + +### PC-06: 비인가 상용 메신저 사용 금지 +**점검:** +```powershell +# 설치된 메신저 프로그램 확인 +Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -match "카카오톡|Skype|NateOn|Telegram"} | Select-Object Name +# 실행 중인 메신저 프로세스 확인 +Get-Process | Where-Object {$_.ProcessName -match "kakaotalk|skype|nateon"} | Select-Object ProcessName +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows Messenger +# "Windows Messenger를 실행 허용 안 함": 사용 + +# 상용 메신저 제거 +# 설정 > 앱 > 앱 및 기능 > 해당 메신저 제거 +``` + +### PC-07: 파일 시스템이 NTFS 포맷으로 설정 +**점검:** +```powershell +# 디스크 볼륨 파일 시스템 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size +# 또는 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT32 -> NTFS 변환 (비파괴 변환) +convert C: /fs:ntfs + +# 변환 후 폴더/파일에 적합한 ACL 적용 +# 속성 > 보안 > 편집 > 그룹/계정별 권한 설정 +``` + +### PC-08: 멀티 부팅 방지 +**점검:** +```powershell +# 설치된 OS 확인 +bcdedit /enum +# 또는 +msconfig +# 부팅 탭에서 2개 이상 OS 확인 +``` +**조치:** +```powershell +# msconfig > 부팅 탭 > 사용하지 않는 OS 선택 후 삭제 +# 또는 +bcdedit /delete {identifier} +``` + +### PC-09: 브라우저 종료 시 임시 인터넷 파일 삭제 +**점검:** +```powershell +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 +# > Internet Explorer > 인터넷 제어판 > 고급 페이지 +# "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기": 사용 + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit /t REG_DWORD /d 1 /f +``` + +## 3. 패치 관리 + +### PC-10: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```powershell +# 설치된 HOT FIX 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +# Windows Update 설정 확인 +Get-WindowsUpdateLog +# 자동 업데이트 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" +``` +**조치:** +```powershell +# 설정 > Windows Update > 업데이트 확인 +# PowerShell로 업데이트 확인 및 설치 +Install-Module PSWindowsUpdate -Force +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot +``` + +### PC-11: 지원이 종료되지 않은 Windows OS Build 적용 +**점검:** +```powershell +# 현재 OS 빌드 버전 확인 +[System.Environment]::OSVersion.Version +Get-ComputerInfo | Select-Object WindowsVersion, OsBuildNumber, WindowsProductName +winver +``` +**조치:** +```powershell +# Windows Update를 통한 최신 빌드 적용 +# 설정 > Windows Update > 업데이트 확인 +# 수동 업데이트: https://www.microsoft.com/ko-kr/software-download/ +``` + +## 4. 보안 관리 + +### PC-12: Windows 자동 로그인 점검 +**점검:** +```powershell +# 자동 로그인 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword +``` +**조치:** +```powershell +# 자동 로그인 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +# DefaultPassword 값 삭제 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +``` + +### PC-13: 바이러스 백신 프로그램 설치 및 주기적 업데이트 +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntivirusSignatureLastUpdated, AntispywareEnabled +# 백신 설치 여부 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState +``` +**조치:** +```powershell +# Windows Defender 업데이트 +Update-MpSignature +# 설정 > Windows 보안 > 바이러스 및 위협 방지 > 보호 업데이트 > 업데이트 확인 +``` + +### PC-14: 백신 실시간 감시 기능 활성화 +**점검:** +```powershell +# 실시간 보호 상태 확인 +Get-MpPreference | Select-Object DisableRealtimeMonitoring +Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled +``` +**조치:** +```powershell +# 실시간 보호 활성화 +Set-MpPreference -DisableRealtimeMonitoring $false +# GUI: Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 켬 +``` + +### PC-15: OS에서 제공하는 침입차단 기능 활성화 +**점검:** +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled +netsh advfirewall show allprofiles state +``` +**조치:** +```powershell +# 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True +# 또는 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정/해제 > "사용" 설정 +``` + +### PC-16: 화면보호기 대기 시간 설정 및 재시작 시 암호 보호 +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +``` +**조치:** +```powershell +# 화면보호기 활성화 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +# 대기 시간 설정 (600초 = 10분 이하) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +# 재시작 시 암호 보호 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f + +# GUI: 설정 > 개인설정 > 잠금화면 > 화면보호기 +# 대기: 10분 이하 / "다시 시작 시 로그온 화면 표시" 체크 +``` + +### PC-17: 이동식 미디어 자동 실행 방지 +**점검:** +```powershell +# 자동 실행 정책 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun +# GPO 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoAutorun +``` +**조치:** +```powershell +# 모든 드라이브 자동 실행 끄기 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 자동 실행 정책 +# "자동 실행 끄기": 사용 - 모든 드라이브 + +# 제어판: 하드웨어 및 소리 > 자동 실행 +# "모든 미디어 및 장치에 자동 실행 사용" 체크 해제 +``` + +### PC-18: 원격 지원 금지 +**점검:** +```powershell +# 원격 지원 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +``` +**조치:** +```powershell +# 원격 지원 비활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 0 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 원격 지원 +# "원격 지원 제공 구성": 사용 안 함 + +# 원격 데스크톱 비활성화 (필요 시) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f +``` diff --git a/skills/kesekit-fix/scripts/cii/unix.md b/skills/kesekit-fix/scripts/cii/unix.md new file mode 100644 index 0000000..6969221 --- /dev/null +++ b/skills/kesekit-fix/scripts/cii/unix.md @@ -0,0 +1,1531 @@ +# Unix 서버 점검 및 조치 스크립트 + +## 1. 계정 관리 + +### U-01: root 계정 원격 접속 제한 +**판단기준:** 원격터미널 서비스 사용 시 root 직접 접속을 차단한 경우 양호 +**점검:** +```bash +# SSH root 접속 설정 확인 +grep -i "PermitRootLogin" /etc/ssh/sshd_config + +# Telnet root 접속 설정 확인 (SOLARIS) +grep "CONSOLE" /etc/default/login + +# Telnet pts 설정 확인 (LINUX) +cat /etc/securetty | grep pts + +# Telnet rlogin 설정 확인 (AIX) +grep "rlogin" /etc/security/user +``` +**조치:** +```bash +# SSH - 모든 OS 공통 +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config +systemctl restart sshd + +# Telnet - SOLARIS +# /etc/default/login 파일에 설정 +echo "CONSOLE=/dev/console" >> /etc/default/login + +# Telnet - LINUX (/etc/securetty에서 pts 제거) +sed -i '/^pts\//d' /etc/securetty +# /etc/pam.d/login에 모듈 추가 +# auth required /lib/security/pam_securetty.so + +# Telnet - AIX (/etc/security/user) +chsec -f /etc/security/user -s root -a rlogin=false + +# HP-UX SSH +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /opt/ssh/etc/sshd_config +``` + +### U-02: 비밀번호 관리정책 설정 +**판단기준:** 영문+숫자+특수문자 8자리 이상, 최소사용 1일, 최대사용 90일, 이력 4회 이상 양호 +**점검:** +```bash +# LINUX - 비밀번호 정책 확인 +grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" /etc/login.defs +cat /etc/security/pwquality.conf 2>/dev/null +grep pam_pwquality /etc/pam.d/system-auth 2>/dev/null +grep pam_pwquality /etc/pam.d/common-password 2>/dev/null + +# SOLARIS +cat /etc/default/passwd | grep -E "HISTORY|PASSLENGTH|MINDIGIT|MINUPPER|MINLOWER|MINSPECIAL" + +# AIX +grep -E "minage|maxage|minalpha|minother|minlen|histsize" /etc/security/user +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/login.defs +sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs +sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs + +# LINUX (Redhat) - /etc/security/pwquality.conf +cat > /etc/security/pwquality.conf <<'CONF' +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +CONF + +# SOLARIS - /etc/default/passwd +cat >> /etc/default/passwd <<'CONF' +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO +CONF + +# AIX - /etc/security/user +chsec -f /etc/security/user -s default -a minage=1 +chsec -f /etc/security/user -s default -a maxage=12 +chsec -f /etc/security/user -s default -a minalpha=2 +chsec -f /etc/security/user -s default -a minother=2 +chsec -f /etc/security/user -s default -a minlen=8 +chsec -f /etc/security/user -s default -a histsize=4 + +# HP-UX - /etc/default/security +cat >> /etc/default/security <<'CONF' +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +CONF +``` + +### U-03: 계정 잠금 임계값 설정 +**판단기준:** 계정 잠금 임계값이 10회 이하로 설정된 경우 양호 +**점검:** +```bash +# LINUX - PAM 계정잠금 설정 확인 +grep pam_tally /etc/pam.d/system-auth 2>/dev/null +grep pam_faillock /etc/pam.d/system-auth 2>/dev/null +grep -E "deny|unlock_time" /etc/security/faillock.conf 2>/dev/null +authselect current 2>/dev/null + +# SOLARIS +grep "RETRIES" /etc/default/login +grep "LOCK_AFTER_RETRIES" /etc/security/policy.conf 2>/dev/null + +# AIX +grep "loginretries" /etc/security/user + +# HP-UX +grep "AUTH_MAXTRIES" /etc/default/security 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat - authselect 방식, RHEL 8+) +authselect enable-feature with-faillock +# /etc/security/faillock.conf 수정 +cat >> /etc/security/faillock.conf <<'CONF' +silent +deny = 10 +unlock_time = 120 +CONF + +# LINUX (Redhat - pam_faillock 방식) +# /etc/pam.d/system-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +# /etc/pam.d/password-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# LINUX (Debian - pam_faillock 방식) +# /etc/pam.d/common-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# SOLARIS (5.9+) +# /etc/security/policy.conf +echo "LOCK_AFTER_RETRIES=YES" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/user -s default -a loginretries=10 + +# HP-UX (11.v3+) +echo "AUTH_MAXTRIES=10" >> /etc/default/security +``` + +### U-04: 비밀번호 파일 보호 +**판단기준:** 쉐도우 비밀번호를 사용하거나 비밀번호를 암호화하여 저장하는 경우 양호 +**점검:** +```bash +# /etc/passwd 두 번째 필드가 'x'인지 확인 (x이면 shadow 사용 중) +awk -F: '$2 != "x" {print $1" : 비밀번호 평문 저장 의심"}' /etc/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX - 쉐도우 비밀번호 적용 +pwconv + +# HP-UX - Trusted Mode 전환 +/etc/tsconvert +``` + +### U-05: root 이외의 UID가 '0' 금지 +**판단기준:** root 계정과 동일한 UID(0)를 갖는 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '$3==0 && $1!="root" {print $1" has UID 0"}' /etc/passwd +``` +**조치:** +```bash +# UID 변경 +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-06: 사용자 계정 su 기능 제한 +**판단기준:** su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 양호 +**점검:** +```bash +# wheel 그룹 확인 +grep wheel /etc/group +# su 명령어 권한 확인 +ls -l /usr/bin/su +# PAM 설정 확인 (LINUX) +grep pam_wheel /etc/pam.d/su +``` +**조치:** +```bash +# wheel 그룹 생성 (없는 경우) +groupadd wheel +# su 명령 그룹 변경 및 권한 설정 +chgrp wheel /usr/bin/su +chmod 4750 /usr/bin/su +# 허용 계정 등록 +usermod -G wheel + +# LINUX PAM 설정 - /etc/pam.d/su +# auth required pam_wheel.so use_uid +``` + +### U-07: 불필요한 계정 제거 +**판단기준:** 불필요한 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +# 시스템 계정 확인 +cat /etc/passwd +# 마지막 로그인 기록 확인 +last | head -30 +# 로그인 불가 계정 확인 +awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd +``` +**조치:** +```bash +userdel <사용자_이름> +# AIX의 경우 +# rmuser <사용자_이름> +``` + +### U-08: 관리자 그룹에 최소한의 계정 포함 +**판단기준:** 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 양호 +**점검:** +```bash +grep "^root:" /etc/group +``` +**조치:** +```bash +gpasswd -d <사용자_이름> root +# AIX의 경우 +# chgrpmem -m - <사용자_이름> root +``` + +### U-09: 계정이 존재하지 않는 GID 금지 +**판단기준:** 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 양호 +**점검:** +```bash +# /etc/group과 /etc/passwd 비교 +cat /etc/group +cat /etc/gshadow 2>/dev/null +``` +**조치:** +```bash +groupdel <그룹_이름> +``` + +### U-10: 동일한 UID 금지 +**판단기준:** 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d +# 중복 UID가 있다면 해당 계정 확인 +awk -F: '{uid[$3]=uid[$3]" "$1} END{for(u in uid) if(split(uid[u],a," ")>2) print "UID "u":"uid[u]}' /etc/passwd +``` +**조치:** +```bash +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-11: 사용자 shell 점검 +**판단기준:** 로그인이 필요하지 않은 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +cat /etc/passwd | grep -E "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^games|^gopher" | grep -v admin +``` +**조치:** +```bash +# 불필요한 계정에 nologin 쉘 부여 +usermod -s /bin/false <계정명> +usermod -s /sbin/nologin <계정명> +``` + +### U-12: 세션 종료 시간 설정 +**판단기준:** Session Timeout이 600초(10분) 이하로 설정된 경우 양호 +**점검:** +```bash +echo $TMOUT +grep -i tmout /etc/profile /etc/bashrc 2>/dev/null +grep autologout /etc/csh.cshrc /etc/csh.login 2>/dev/null +``` +**조치:** +```bash +# sh, ksh, bash - /etc/profile에 추가 +echo "TMOUT=600" >> /etc/profile +echo "export TMOUT" >> /etc/profile + +# csh - /etc/csh.cshrc 또는 /etc/csh.login에 추가 +echo "set autologout=10" >> /etc/csh.cshrc +``` + +### U-13: 안전한 비밀번호 암호화 알고리즘 사용 +**판단기준:** SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 양호 ($5=SHA-256, $6=SHA-512) +**점검:** +```bash +# 암호화 알고리즘 확인 ($1=MD5, $5=SHA-256, $6=SHA-512) +awk -F: '$2 ~ /^\$/ {split($2,a,"$"); print $1" -> $"a[2]}' /etc/shadow 2>/dev/null + +# LINUX +grep ENCRYPT_METHOD /etc/login.defs +``` +**조치:** +```bash +# LINUX (Redhat) +sed -i 's/^ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' /etc/login.defs +# /etc/pam.d/system-auth +# password sufficient pam_unix.so sha512 + +# SOLARIS +# /etc/security/policy.conf +echo "CRYPT_DEFAULT=6" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/login.cfg -s usw -a pwd_algorithm=ssha512 + +# HP-UX +echo "CRYPT_DEFAULT=6" >> /etc/default/security +``` + +--- + +## 2. 파일 및 디렉터리 관리 + +### U-14: root 홈, 패스 디렉터리 권한 및 패스 설정 +**판단기준:** PATH 환경변수에 "."이 맨 앞이나 중간에 포함되지 않은 경우 양호 +**점검:** +```bash +echo $PATH | tr ':' '\n' | grep -n "^\.$" +echo $PATH | grep -E "(^\.:|:\.:|:\.$ )" +``` +**조치:** +```bash +# 환경설정 파일에서 PATH 변숫값에서 "." 제거 또는 맨 마지막으로 이동 +# ~/.profile, ~/.bashrc, /etc/profile 등에서 수정 +# 예: PATH=$PATH:$HOME/bin (상대경로 "." 삭제) +``` + +### U-15: 파일 및 디렉터리 소유자 설정 +**판단기준:** 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 양호 +**점검:** +```bash +find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +``` +**조치:** +```bash +# 불필요한 파일 제거 +rm <파일_이름> +rm -r <디렉터리_이름> +# 사용 중인 파일의 소유자 변경 +chown <사용자_이름> <파일명> +chgrp <그룹_이름> <파일명> +``` + +### U-16: /etc/passwd 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/passwd +``` +**조치:** +```bash +chown root /etc/passwd +chmod 644 /etc/passwd +``` + +### U-17: 시스템 시작 스크립트 권한 설정 +**판단기준:** 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +# LINUX (init) +ls -al /etc/rc.d/*/* 2>/dev/null +# LINUX (systemd) +ls -al /etc/systemd/system/* 2>/dev/null +# SOLARIS +ls -al /etc/rc*.d/* 2>/dev/null +``` +**조치:** +```bash +chown root <파일_이름> +chmod o-w <파일_이름> +``` + +### U-18: /etc/shadow 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 400 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/shadow +# AIX +ls -l /etc/security/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX +chown root /etc/shadow +chmod 400 /etc/shadow + +# AIX +chown root /etc/security/passwd +chmod 400 /etc/security/passwd +``` + +### U-19: /etc/hosts 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts +``` +**조치:** +```bash +chown root /etc/hosts +chmod 644 /etc/hosts +``` + +### U-20: /etc/(x)inetd.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/inetd.conf 2>/dev/null +ls -l /etc/xinetd.conf 2>/dev/null +ls -l /etc/xinetd.d/* 2>/dev/null +ls -l /etc/systemd/system.conf 2>/dev/null +``` +**조치:** +```bash +# inetd +chown root /etc/inetd.conf +chmod 600 /etc/inetd.conf + +# xinetd +chown root /etc/xinetd.conf +chmod 600 /etc/xinetd.conf +chown -R root /etc/xinetd.d/ +chmod -R 600 /etc/xinetd.d/ + +# systemd +chown root /etc/systemd/system.conf +chmod 600 /etc/systemd/system.conf +``` + +### U-21: /etc/(r)syslog.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/syslog.conf /etc/rsyslog.conf 2>/dev/null +``` +**조치:** +```bash +chown root /etc/rsyslog.conf +chmod 640 /etc/rsyslog.conf +``` + +### U-22: /etc/services 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/services +``` +**조치:** +```bash +chown root /etc/services +chmod 644 /etc/services +``` + +### U-23: SUID, SGID, Sticky bit 설정 파일 점검 +**판단기준:** 주요 실행 파일의 권한에 불필요한 SUID/SGID가 부여되어 있지 않은 경우 양호 +**점검:** +```bash +find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +``` +**조치:** +```bash +# 불필요한 특수 권한 제거 +chmod -s <파일_이름> + +# 특정 그룹에서만 사용하도록 제한 +chgrp <그룹_이름> +chmod 4750 +``` + +### U-24: 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +**판단기준:** 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정이고, 소유자 외 쓰기 권한이 없는 경우 양호 +**점검:** +```bash +# 각 사용자 홈 디렉터리의 환경변수 파일 확인 +ls -la ~/.profile ~/.kshrc ~/.cshrc ~/.bashrc ~/.bash_profile ~/.login ~/.exrc ~/.netrc 2>/dev/null +``` +**조치:** +```bash +chown <환경변수_파일> +chmod o-w <환경변수_파일> +``` + +### U-25: world writable 파일 점검 +**판단기준:** world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 양호 +**점검:** +```bash +find / -type f -perm -2 -exec ls -l {} \; 2>/dev/null +``` +**조치:** +```bash +# 일반 사용자 쓰기 권한 제거 +chmod o-w <파일_이름> +# 불필요한 파일 제거 +rm <파일_이름> +``` + +### U-26: /dev에 존재하지 않는 device 파일 점검 +**판단기준:** /dev 디렉터리에 존재하지 않는 device 파일을 제거한 경우 양호 +**점검:** +```bash +find /dev -type f -exec ls -l {} \; +``` +**조치:** +```bash +rm <파일_이름> +``` + +### U-27: $HOME/.rhosts, hosts.equiv 사용 금지 +**판단기준:** rlogin/rsh/rexec 미사용 또는 사용 시 소유자 root, 권한 600 이하, "+" 설정 없는 경우 양호 +**점검:** +```bash +find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null +cat /etc/hosts.equiv 2>/dev/null +ls -la /etc/hosts.equiv 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.equiv +chmod 600 /etc/hosts.equiv +chown root $HOME/.rhosts +chmod 600 $HOME/.rhosts +# "+" 옵션 제거 후 허용 호스트 및 계정만 등록 +``` + +### U-28: 접속 IP 및 포트 제한 +**판단기준:** 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 양호 +**점검:** +```bash +# TCP Wrapper +cat /etc/hosts.allow 2>/dev/null +cat /etc/hosts.deny 2>/dev/null + +# iptables +iptables -L 2>/dev/null + +# firewalld +firewall-cmd --list-all 2>/dev/null + +# UFW +ufw status numbered 2>/dev/null +``` +**조치:** +```bash +# TCP Wrapper +echo "ALL:ALL" > /etc/hosts.deny +echo "sshd : <허용_IP>" >> /etc/hosts.allow + +# iptables +iptables -A INPUT -p tcp -s --dport <포트> -j ACCEPT +iptables-save + +# firewalld +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="" port protocol="tcp" port="<포트>" accept' +firewall-cmd --reload + +# UFW +ufw allow from to any port <포트> +ufw reload +``` + +### U-29: hosts.lpd 파일 소유자 및 권한 설정 +**판단기준:** /etc/hosts.lpd 파일이 존재하지 않거나, 소유자 root이고 권한 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts.lpd 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.lpd +chmod 600 /etc/hosts.lpd +``` + +### U-30: UMASK 설정 관리 +**판단기준:** UMASK 값이 022 이상으로 설정된 경우 양호 +**점검:** +```bash +umask +grep -i umask /etc/profile /etc/bashrc /etc/login.defs 2>/dev/null +# SOLARIS +grep UMASK /etc/default/login 2>/dev/null +``` +**조치:** +```bash +# /etc/profile에 추가 +echo "umask 022" >> /etc/profile +echo "export umask" >> /etc/profile + +# LINUX - /etc/login.defs +sed -i 's/^UMASK.*/UMASK 022/' /etc/login.defs + +# SOLARIS - /etc/default/login +echo "UMASK=022" >> /etc/default/login + +# FTP umask 설정 +# vsFTP: vsftpd.conf -> local_umask=022 +# ProFTP: proftpd.conf -> Umask 022 +``` + +### U-31: 홈디렉토리 소유자 및 권한 설정 +**판단기준:** 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +cat /etc/passwd | awk -F: '{print $1" "$6}' | while read user dir; do + ls -ald "$dir" 2>/dev/null +done +``` +**조치:** +```bash +chown <사용자_이름> <홈_디렉터리> +chmod o-w <홈_디렉터리> +``` + +### U-32: 홈 디렉토리로 지정한 디렉토리의 존재 관리 +**판단기준:** 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $1" "$6}' /etc/passwd | while read user dir; do + [ ! -d "$dir" ] && echo "$user : $dir 존재하지 않음" +done +``` +**조치:** +```bash +# 불필요한 계정 삭제 +userdel <사용자_이름> +# 사용중인 계정의 홈 디렉터리 생성 +mkdir -p /home/<사용자_이름> +chown <사용자_이름> /home/<사용자_이름> +``` + +### U-33: 숨겨진 파일 및 디렉토리 검색 및 제거 +**판단기준:** 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 양호 +**점검:** +```bash +find / -type f -name ".*" 2>/dev/null +find / -type d -name ".*" 2>/dev/null +``` +**조치:** +```bash +rm <파일_이름> +rm -r <디렉터리_이름> +``` + +--- + +## 3. 서비스 관리 + +### U-34: Finger 서비스 비활성화 +**판단기준:** Finger 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep finger +# SOLARIS (5.10+) +inetadm | grep finger 2>/dev/null +# inetd +grep finger /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/finger 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop finger.socket 2>/dev/null +systemctl disable finger.socket 2>/dev/null + +# xinetd +# /etc/xinetd.d/finger -> disable = yes +systemctl restart xinetd + +# inetd - finger 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/finger:default +``` + +### U-35: 공유 서비스에 대한 익명 접근 제한 설정 +**판단기준:** 공유 서비스에 대해 익명 접근을 제한한 경우 양호 +**점검:** +```bash +# FTP 익명 계정 확인 +grep -E "^ftp|^anonymous" /etc/passwd + +# vsFTP +grep anonymous_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# ProFTP +sed -n '//,/<\/Anonymous>/p' /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null + +# NFS 익명 접근 +grep -E "anonuid|anongid" /etc/exports 2>/dev/null + +# Samba +grep "guest ok" /etc/samba/smb.conf 2>/dev/null +``` +**조치:** +```bash +# FTP 익명 계정 제거 +userdel ftp +userdel anonymous + +# vsFTP - /etc/vsftpd/vsftpd.conf +# anonymous_enable=NO +systemctl restart vsftpd + +# NFS - /etc/exports에서 anon 옵션 제거 +exportfs -ra + +# Samba - /etc/samba/smb.conf +# guest ok = no +smbcontrol all reload-config +``` + +### U-36: r 계열 서비스 비활성화 +**판단기준:** 불필요한 r 계열 서비스(rlogin, rsh, rexec)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "rlogin|rsh|rexec" +# inetd +grep -E "rlogin|rsh|rexec|shell|login|exec" /etc/inetd.conf 2>/dev/null +# SOLARIS (5.10+) +inetadm | egrep "shell|rlogin|rexec" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop rlogin.socket rsh.socket rexec.socket 2>/dev/null +systemctl disable rlogin.socket rsh.socket rexec.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/login:rlogin +inetadm -d svc:/network/shell:default +inetadm -d svc:/network/rexec:default +``` + +### U-37: crontab 설정파일 권한 설정 미흡 +**판단기준:** crontab/at 명령어 권한 750 이하, cron/at 관련 파일 권한 640 이하인 경우 양호 +**점검:** +```bash +ls -l /usr/bin/crontab +ls -l /usr/bin/at +ls -l /var/spool/cron/ 2>/dev/null +ls -l /var/spool/cron/crontabs/ 2>/dev/null +ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny 2>/dev/null +``` +**조치:** +```bash +# crontab/at 명령어 권한 설정 +chown root /usr/bin/crontab +chmod 750 /usr/bin/crontab +chown root /usr/bin/at +chmod 750 /usr/bin/at + +# cron 관련 파일 권한 설정 +chmod 640 /etc/cron.allow /etc/cron.deny 2>/dev/null +chmod 640 /etc/at.allow /etc/at.deny 2>/dev/null +``` + +### U-38: DoS 공격에 취약한 서비스 비활성화 +**판단기준:** echo, discard, daytime, chargen 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "echo|discard|daytime|chargen" +# inetd +grep -E "echo|discard|daytime|chargen" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep enable | egrep "echo|discard|daytime|chargen" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null +systemctl disable echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬> +``` + +### U-39: 불필요한 NFS 서비스 비활성화 +**판단기준:** 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep nfs +# AIX +ps -ef | grep nfsd +lssrc -a | grep nfs 2>/dev/null +# SOLARIS +inetadm | egrep "nfs|statd|lockd" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop nfs-server +systemctl disable nfs-server + +# SOLARIS +inetadm -d + +# AIX +stopsrc -g nfs + +# HP-UX +# /etc/rc.config.d/nfsconf -> NFS_SERVER=0 +``` + +### U-40: NFS 접근 통제 +**판단기준:** 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX +ls -l /etc/exports +cat /etc/exports +showmount -e 2>/dev/null + +# SOLARIS +ls -l /etc/dfs/dfstab 2>/dev/null +cat /etc/dfs/dfstab 2>/dev/null +``` +**조치:** +```bash +# LINUX +chown root /etc/exports +chmod 644 /etc/exports +# /etc/exports 예시: /home/share host1(ro,root_squash) +exportfs -ra + +# SOLARIS +chown root /etc/dfs/dfstab +chmod 644 /etc/dfs/dfstab +# /etc/dfs/dfstab 예시: share -F nfs -o rw=client1:client2,ro=client1:client2 /export/home +shareall +``` + +### U-41: 불필요한 automountd 제거 +**판단기준:** automountd 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "automount|autofs" +# SOLARIS +svcs -a | grep autofs 2>/dev/null +# AIX +ps -ef | grep automountd +``` +**조치:** +```bash +# LINUX +systemctl stop autofs +systemctl disable autofs + +# SOLARIS +svcadm disable svc:/system/filesystem/autofs:default + +# HP-UX +# /etc/rc.config.d/nfsconf -> AUTOFS=0 +``` + +### U-42: 불필요한 RPC 서비스 비활성화 +**판단기준:** 불필요한 RPC 서비스(rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd 등)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep rpc +# inetd +grep -E "rpc\." /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep rpc | grep enabled | egrep "ttdbserver|rex|rstart|rusers|spray|wall|rquota" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop <서비스명> +systemctl disable <서비스명> + +# inetd - 해당 RPC 서비스 항목 주석 처리 +# SOLARIS +svcadm disable <서비스_데몬> +``` + +### U-43: NIS, NIS+ 점검 +**판단기준:** NIS 서비스가 비활성화되어 있거나, 불가피 시 NIS+ 서비스를 사용하는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated" +# SOLARIS +svcs -a | grep nis 2>/dev/null +# AIX +lssrc -a | grep -E "ypserv|ypbind" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop ypserv ypbind 2>/dev/null +systemctl disable ypserv ypbind 2>/dev/null + +# SOLARIS +svcadm disable + +# HP-UX - /etc/rc.config.d/namesrvs +# NIS_MASTER_SERVER=0 +# NIS_SLAVE_SERVER=0 +# NIS_CLIENT_SERVER=0 +``` + +### U-44: tftp, talk 서비스 비활성화 +**판단기준:** tftp, talk, ntalk 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "tftp|talk|ntalk" +# inetd +grep -E "tftp|talk|ntalk" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | egrep "tftp|talk" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop tftp.socket talk.socket ntalk.socket 2>/dev/null +systemctl disable tftp.socket talk.socket ntalk.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬명> +``` + +### U-45: 메일 서비스 버전 점검 +**판단기준:** 메일 서비스 버전이 최신 버전인 경우 양호 +**점검:** +```bash +# Sendmail +sendmail -d0 -bt < /dev/null 2>&1 | grep Version +# Postfix +postconf mail_version 2>/dev/null +# Exim +exim -bV 2>/dev/null +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop sendmail postfix 2>/dev/null +systemctl disable sendmail postfix 2>/dev/null + +# 사용 시 최신 버전으로 패치 적용 +# Sendmail: http://www.sendmail.org/ +# Postfix: https://www.postfix.org/packages.html +# Exim: https://www.exim.org/ +``` + +### U-46: 일반 사용자의 메일 서비스 실행 방지 +**판단기준:** 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf 2>/dev/null +# Postfix +ls -l /usr/sbin/postsuper 2>/dev/null +# Exim +ls -l /usr/sbin/exiqgrep 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun + +# Postfix +chmod o-x /usr/sbin/postsuper + +# Exim +chmod o-x /usr/sbin/exiqgrep +``` + +### U-47: 스팸 메일 릴레이 제한 +**판단기준:** 릴레이 제한이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep "promiscuous_relay" /etc/mail/sendmail.mc 2>/dev/null +cat /etc/mail/access 2>/dev/null +# Postfix +grep -E "smtpd_recipient_restrictions|mynetworks" /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "relay_from_hosts|hosts =" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.mc에서 promiscuous_relay 제거 +# FEATURE(`promiscuous_relay')dnl 삭제 +m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +# /etc/mail/access에 허용/차단 설정 +makemap hash /etc/mail/access.db < /etc/mail/access +systemctl restart sendmail + +# Postfix - /etc/postfix/main.cf +# mynetworks = <허용할_네트워크> +postfix reload + +# Exim - /etc/exim/exim.conf +# hostlist relay_from_hosts = <허용할_네트워크> +systemctl restart exim +``` + +### U-48: expn, vrfy 명령어 제한 +**판단기준:** noexpn, novrfy 옵션이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf +# Postfix +grep disable_vrfy_command /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "acl_smtp_vrfy|acl_smtp_expn" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +# 또는 PrivacyOptions = restrictqrun, goaway + +# Postfix - /etc/postfix/main.cf +# disable_vrfy_command = yes +postfix reload + +# Exim - acl_smtp_vrfy, acl_smtp_expn 설정 제거/주석 처리 +``` + +### U-49: DNS 보안 버전 패치 +**판단기준:** 주기적으로 패치를 관리하는 경우 양호 +**점검:** +```bash +named -v 2>/dev/null +# LINUX +systemctl list-units --type=service | grep named +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop named +systemctl disable named + +# 사용 시 최신 버전 패치 +# ISC BIND: https://www.isc.org/downloads/ +# 취약점 정보: https://kb.isc.org/v1/docs/en/aa-00913 +``` + +### U-50: DNS ZoneTransfer 설정 +**판단기준:** Zone Transfer를 허가된 사용자에게만 허용한 경우 양호 +**점검:** +```bash +grep allow-transfer /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +grep xfrnets /etc/named.boot /etc/bind/named.boot 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf (또는 /etc/bind/named.conf.options) 수정 +# allow-transfer { <허용할_IP>; }; +systemctl restart named +``` + +### U-51: DNS 서비스의 취약한 동적 업데이트 설정 금지 +**판단기준:** 동적 업데이트 기능이 비활성화되었거나, 적절한 접근통제를 수행하는 경우 양호 +**점검:** +```bash +grep allow-update /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf 수정 +# 불필요 시: allow-update { none; }; +# 필요 시: allow-update { <허용할_IP>; }; +systemctl restart named +``` + +### U-52: Telnet 서비스 비활성화 +**판단기준:** Telnet 프로토콜을 비활성화하고 있는 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=socket | grep telnet +# inetd +grep telnet /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/telnet 2>/dev/null +# SOLARIS +svcs -a | grep telnet 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop telnet.socket +systemctl disable telnet.socket +systemctl start sshd + +# xinetd - /etc/xinetd.d/telnet -> disable = yes +systemctl restart xinetd + +# SOLARIS +svcadm disable svc:/network/telnet:default +svcadm enable ssh +``` + +### U-53: FTP 서비스 정보 노출 제한 +**판단기준:** FTP 접속 배너에 노출되는 정보가 없는 경우 양호 +**점검:** +```bash +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +# ProFTP +grep ServerIdent /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only +systemctl restart vsftpd + +# ProFTP - /etc/proftpd/proftpd.conf +# ServerIdent off +# 또는 ServerIdent on "Authorized access only" +systemctl restart proftpd +``` + +### U-54: 암호화되지 않는 FTP 서비스 비활성화 +**판단기준:** 암호화되지 않은 FTP 서비스가 비활성화된 경우 양호 (SFTP 사용 권고) +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "vsftpd|proftpd" +# inetd +grep "^ftp" /etc/inetd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop vsftpd proftpd 2>/dev/null +systemctl disable vsftpd proftpd 2>/dev/null + +# inetd - ftp 항목 주석 처리 +``` + +### U-55: FTP 계정 shell 제한 +**판단기준:** FTP 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +grep "^ftp" /etc/passwd +``` +**조치:** +```bash +usermod -s /bin/false ftp +# 또는 +usermod -s /sbin/nologin ftp +``` + +### U-56: FTP 서비스 접근 제어 설정 +**판단기준:** 특정 IP주소/호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 양호 +**점검:** +```bash +# ftpusers 파일 +cat /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null +ls -l /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null + +# vsFTP +grep userlist_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +cat /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep UseFtpUsers /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일 권한 설정 +chown root /etc/ftpusers +chmod 640 /etc/ftpusers + +# vsFTP - user_list 방식 +# /etc/vsftpd/vsftpd.conf +# userlist_enable=YES +# userlist_deny=YES (목록 사용자 차단) 또는 NO (목록 사용자만 허용) + +# ProFTP - proftpd.conf 접근제한 +# +# Order Deny,Allow +# AllowUser <사용자> 또는 Allow from +# DenyUser <사용자> 또는 Deny from +# +``` + +### U-57: Ftpusers 파일 설정 (root 계정 접근 제한) +**판단기준:** root 계정 접속을 차단한 경우 양호 +**점검:** +```bash +# ftpusers 파일에 root가 등록되어 있는지 확인 +grep "^root" /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep RootLogin /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일에 root 추가 (주석 해제) +# 해당 파일에서 #root -> root 로 변경 + +# ProFTP - /etc/proftpd/proftpd.conf +# RootLogin off +systemctl restart proftpd +``` + +### U-58: 불필요한 SNMP 서비스 구동 점검 +**판단기준:** SNMP 서비스를 사용하지 않는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep snmpd +# SOLARIS +svcs -a | grep snmp 2>/dev/null +# AIX +lssrc -a | grep snmp 2>/dev/null +# 프로세스 확인 +ps -ef | grep snmp +``` +**조치:** +```bash +# LINUX +systemctl stop snmpd +systemctl disable snmpd + +# SOLARIS (5.10+) +svcadm disable svc:/application/management/snmpd:default + +# AIX +stopsrc -s snmpd +# /etc/rc.tcpip에서 snmpd 주석 처리 +``` + +### U-59: 안전한 SNMP 버전 사용 +**판단기준:** SNMP 서비스를 v3 이상으로 사용하는 경우 양호 +**점검:** +```bash +# SNMPv3 사용 여부 확인 +snmpwalk -v3 -l authPriv -u <사용자> -a SHA -A <인증암호> -x AES -X <암호화암호> <서버IP> 2>/dev/null +grep -E "rouser|rwuser|createUser" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# SNMPv3 사용자 생성 +net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser + +# /etc/snmp/snmpd.conf에 추가 +# createUser myuser SHA myauthpass AES myprivpass +# rouser myuser + +systemctl restart snmpd +``` + +### U-60: SNMP Community String 복잡성 설정 +**판단기준:** Community String이 "public", "private"이 아니고 영숫자 10자리 이상 또는 영숫자+특수문자 8자리 이상인 경우 양호 +**점검:** +```bash +grep -i community /etc/snmp/snmpd.conf 2>/dev/null +# AIX +grep -i community /etc/snmpdv3.conf 2>/dev/null +# HP-UX +grep -i community /etc/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser default <복잡한_String값> +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <복잡한_String값> default +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY <새_String> <새_String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-61: SNMP Access Control 설정 +**판단기준:** SNMP 서비스에 접근 제어 설정이 되어 있는 경우 양호 +**점검:** +```bash +# LINUX (Redhat) +grep "com2sec" /etc/snmp/snmpd.conf 2>/dev/null +# LINUX (Debian) +grep -E "rocommunity|rwcommunity" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser <허용_네트워크> + +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <허용_네트워크> + +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY noAuthNoPriv <허용_IP> <넷마스크> - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-62: 로그인 시 경고 메시지 설정 +**판단기준:** 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 양호 +**점검:** +```bash +# 서버 로그온 배너 +cat /etc/motd 2>/dev/null +cat /etc/issue 2>/dev/null +cat /etc/issue.net 2>/dev/null + +# SSH 배너 +grep "^Banner" /etc/ssh/sshd_config + +# Sendmail +grep SmtpGreetingMessage /etc/mail/sendmail.cf 2>/dev/null + +# Postfix +grep smtpd_banner /etc/postfix/main.cf 2>/dev/null + +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# DNS +grep "version" /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# 서버 경고 메시지 +echo "Authorized access only. All activity is monitored." > /etc/motd +echo "Authorized access only." > /etc/issue +echo "Authorized access only." > /etc/issue.net + +# SSH - /etc/ssh/sshd_config +# Banner /etc/issue.net +systemctl restart sshd + +# Sendmail - /etc/mail/sendmail.cf +# SmtpGreetingMessage=Authorized access only + +# Postfix - /etc/postfix/main.cf +# smtpd_banner = Authorized access only + +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only + +# DNS - /etc/named.conf +# version "Not disclosed"; +``` + +### U-63: sudo 명령어 접근 관리 +**판단기준:** /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 양호 +**점검:** +```bash +ls -l /etc/sudoers +``` +**조치:** +```bash +chown root /etc/sudoers +chmod 640 /etc/sudoers +``` + +--- + +## 4. 패치 관리 + +### U-64: 주기적 보안 패치 및 벤더 권고사항 적용 +**판단기준:** 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있는 경우 양호 +**점검:** +```bash +# OS 및 커널 버전 확인 +uname -a +cat /etc/os-release 2>/dev/null +hostnamectl 2>/dev/null + +# 패치 이력 확인 (LINUX) +rpm -qa --last | head -20 2>/dev/null +apt list --upgradable 2>/dev/null + +# SOLARIS +pkg list -af entire@latest 2>/dev/null + +# AIX +oslevel -s +instfix -i | grep ML 2>/dev/null +instfix -i | grep SP 2>/dev/null + +# HP-UX +swlist -l product 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat/CentOS) +yum update -y +# LINUX (Debian/Ubuntu) +apt update && apt upgrade -y + +# SOLARIS +pkg update --accept + +# AIX - smitty installp를 통한 패치 설치 + +# HP-UX +# swinstall -s /tmp/patch.depot +``` + +--- + +## 5. 로그 관리 + +### U-65: NTP 및 시각 동기화 설정 +**판단기준:** NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 양호 +**점검:** +```bash +# NTP +ntpq -pn 2>/dev/null +cat /etc/ntp.conf 2>/dev/null + +# Chrony (RHEL 8+) +chronyc sources 2>/dev/null +cat /etc/chrony.conf 2>/dev/null +``` +**조치:** +```bash +# NTP - /etc/ntp.conf +# server +systemctl restart ntp 2>/dev/null || systemctl restart ntpd 2>/dev/null + +# Chrony - /etc/chrony.conf +# server +systemctl restart chronyd +``` + +### U-66: 정책에 따른 시스템 로깅 설정 +**판단기준:** 로그 기록 정책이 보안 정책에 따라 수립되어 있으며, 로그를 남기고 있는 경우 양호 +**점검:** +```bash +# LINUX +cat /etc/rsyslog.conf 2>/dev/null +ls /etc/rsyslog.d/ 2>/dev/null + +# SOLARIS +cat /etc/syslog.conf 2>/dev/null + +# AIX +cat /etc/syslog.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX - /etc/rsyslog.conf 권장 설정 +cat >> /etc/rsyslog.conf <<'CONF' +*.info;mail.none;authpriv.none;cron.none /var/log/messages +authpriv.* /var/log/secure +mail.* /var/log/maillog +cron.* /var/log/cron +*.emerg * +CONF +systemctl restart rsyslog + +# SOLARIS - /etc/syslog.conf 권장 설정 +# mail.debug /var/log/mail.log +# *.info /var/log/syslog.log +# *.alert /dev/console +# *.emerg * + +# AIX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/error.log +# mail.info /var/adm/mail.log +# auth.info /var/adm/auth.log +# refresh -s syslogd + +# HP-UX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/syslog/error.log +# mail.info /var/adm/syslog/mail.log +# auth.info /var/adm/syslog/auth.log +``` + +### U-67: 로그 디렉터리 소유자 및 권한 설정 +**판단기준:** 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX, SOLARIS +ls -la /var/log/ +# AIX +ls -la /var/adm/ 2>/dev/null +# HP-UX +ls -la /var/adm/syslog/ 2>/dev/null +``` +**조치:** +```bash +# LINUX, SOLARIS +chown root /var/log/* +chmod 644 /var/log/* + +# AIX +chown root /var/adm/* +chmod 644 /var/adm/* + +# HP-UX +chown root /var/adm/syslog/* +chmod 644 /var/adm/syslog/* +``` diff --git a/skills/kesekit-fix/scripts/cii/web-service.md b/skills/kesekit-fix/scripts/cii/web-service.md new file mode 100644 index 0000000..d70ca7c --- /dev/null +++ b/skills/kesekit-fix/scripts/cii/web-service.md @@ -0,0 +1,725 @@ +# 웹 서비스 점검 스크립트 (WEB-01 ~ WEB-26) + +## 1. 계정 관리 + +### WEB-01: Default 관리자 계정명 변경 +**점검:** +```bash +# Tomcat - 기본 계정명(tomcat, admin) 사용 여부 확인 +grep -i 'username=' /conf/server.xml +# JEUS - Security Domains > Account & Policies > Users에서 기본 계정 확인 +``` +**조치:** +```bash +# Tomcat - 기본 계정명을 유추 불가능한 이름으로 변경 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > ADD +# administrator 대신 유추 불가능한 계정명 입력 후 Administrators 그룹 체크 +./stopServer -host <도메인명>:<포트> +./startDomainAdminServer -host <도메인명>:<포트> +``` + +### WEB-02: 취약한 비밀번호 사용 제한 +**점검:** +```bash +# Tomcat +grep -i 'password=' /conf/server.xml +# 비밀번호 복잡도 기준: 2종류 이상 조합 최소 10자리 또는 3종류 이상 조합 최소 8자리 +# (영문대/소문자, 숫자, 특수문자) +``` +**조치:** +```bash +# Tomcat - 복잡도 만족하는 비밀번호 설정 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > 비밀번호 변경 +# SHA-256 이상 암호화 방식 비밀번호 설정 +``` + +### WEB-03: 비밀번호 파일 권한 관리 +**점검:** +```bash +# Tomcat +ls -al /conf/tomcat-users.xml +# IIS +# %systemroot%\system32\config\SAM 파일 속성 > 보안 확인 +# JEUS +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` +**조치:** +```bash +# Tomcat - 비밀번호 파일 권한 600 이하 설정 +chmod 600 /conf/tomcat-users.xml + +# IIS - SAM 파일 속성 > 보안 > 편집 > Administrators, SYSTEM만 허용 + +# JEUS +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` + +--- + +## 2. 서비스 관리 + +### WEB-04: 디렉터리 리스팅 방지 설정 +**점검:** +```bash +# Apache +grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" +# Nginx +grep -i "autoindex" /etc/nginx/nginx.conf +# Tomcat +grep -i "listings" /conf/web.xml +# JEUS +grep -i "allow-indexing" /WEB-INF/jeus-web-dd.xml +# WebtoB +grep -i "Options" /config/http.m | grep -i "Indexes" +``` +**조치:** +```bash +# Apache - httpd.conf 내 모든 디렉터리에서 Indexes 옵션 제거 +vi /conf/httpd.conf +# +# Options -Indexes (Indexes 삭제 또는 -Indexes 설정) +# +systemctl restart apache2 + +# Tomcat - web.xml 내 listings=false 설정 +vi /conf/web.xml +# +# listings +# false +# + +# Nginx - autoindex off 설정 +vi /conf/nginx.conf +# server { autoindex off; } +systemctl restart nginx + +# IIS - IIS 관리자 > 해당 웹사이트 > 디렉터리 검색 > "사용 안 함" 설정 + +# JEUS +vi /WEB-INF/jeus-web-dd.xml +# false + +# WebtoB +vi /config/http.m +# *NODE +# Options = "-Indexes", +wscfl -I http.m && wsdown && wsboot +``` + +### WEB-05: 지정하지 않은 CGI/ISAPI 실행 제한 +**점검:** +```bash +# Apache +grep -i "LoadModule.*cgi" /conf/httpd.conf +grep -i "ExecCGI" /conf/httpd.conf +# Nginx +grep -i "fastcgi_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - CGI 모듈 비활성화 및 ExecCGI 옵션 제거 +vi /conf/httpd.conf +# #LoadModule cgi_module modules/mod_cgi.so +# #LoadModule cgid_module modules/mod_cgid.so +# +# Options -ExecCGI +# +systemctl restart apache2 + +# Tomcat - web.xml 내 CGI 매핑 비활성화(주석 처리) +# + +# Nginx - fastcgi 설정 주석 처리 +# location ~ \.cgi$ { +# #fastcgi_pass :<포트>; +# #include fastcgi_params; +# } + +# IIS - ISAPI 및 CGI 제한 > 사용하지 않는 CGI/ISAPI 모듈 해제 + +# WebtoB - http.m 내 *SVRGROUP, *SERVER, *URI에서 CGI 설정 주석 처리 +``` + +### WEB-06: 상위 디렉터리 접근 제한 설정 +**점검:** +```bash +# Apache +grep -i "AllowOverride" /conf/httpd.conf +# Tomcat +grep -i "allowLinking" /conf/server.xml +# Nginx +grep -i "auth_basic" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - AllowOverride AuthConfig 설정 + .htaccess 인증 파일 생성 +vi /conf/httpd.conf +# +# AllowOverride AuthConfig +# +htpasswd /.htpasswd [사용자명] +systemctl restart apache2 + +# Tomcat - allowLinking 옵션 제거 +vi /conf/server.xml +# (allowLinking="true" 제거) + +# Nginx - 기본 인증으로 디렉터리 접근 제한 +# location /<접근제한 디렉터리>/ { +# auth_basic "Restricted Content"; +# auth_basic_user_file /etc/nginx/.htpasswd; +# } + +# IIS 7.0+ - web.config 내 enableParentPaths="false" 설정 +# + +# WebtoB - UpperDirRestrict = N 설정 +``` + +### WEB-07: 웹 서비스 경로 내 불필요한 파일 제거 +**점검/조치:** +```bash +# Apache +rm -rf /htdocs/manual +rm -rf /manual + +# Tomcat +rm -rf /webapps/docs/<불필요 파일> +# BUILDING.txt, RELEASE-NOTES.txt 등 매뉴얼 파일 포함 + +# Nginx +rm -rf /html/index.html + +# IIS - 샘플 디렉터리 제거 +# c:\inetpub\iissamples +# c:\winnt\help\iishelp +# c:\program files\common files\system\msadc\sample + +# JEUS +rm -rf /docs/manuals/default/web-manager/<불필요 파일> +rm -rf /samples/<불필요 파일> + +# WebtoB +rm -rf /docs/manuals/<불필요 파일> +rm -rf /samples/<불필요 파일> +``` + +### WEB-08: 파일 업로드 및 다운로드 용량 제한 +**점검:** +```bash +# Apache +grep -i "LimitRequestBody" /conf/httpd.conf +# Tomcat +grep -i "maxPostSize" /conf/server.xml +# Nginx +grep -i "client_max_body_size" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - LimitRequestBody 지시자 설정 (5MB = 5000000) +# +# LimitRequestBody 5000000 +# + +# Tomcat - server.xml 내 maxPostSize 설정 + web.xml 내 multipart-config 설정 +# +# +# 2097152 +# 4194304 +# + +# Nginx - client_max_body_size 설정 +# client_max_body_size 5M; +systemctl restart nginx + +# IIS - web.config 내 maxAllowedContentLength 설정 (기본값 30MB) +# applicationHost.config 내 bufferingLimit(4MB) 및 maxRequestEntityAllowed(0.2MB) 설정 + +# JEUS - web.xml 내 max-file-size 설정 +# 5242880 + +# WebtoB - LimitRequestBody 설정 +# LimitRequestBody = 2048000 +``` + +### WEB-09: 웹 서비스 프로세스 권한 제한 +**점검:** +```bash +# 프로세스 실행 계정 확인 +ps -ef | grep httpd | grep -v root +ps -ef | grep nginx +ps -ef | grep tomcat +ps -ef | grep jeus +``` +**조치:** +```bash +# Apache - www-data 계정으로 실행 +vi /envvars +# export APACHE_RUN_USER=www-data +# export APACHE_RUN_GROUP=www-data +chown -R www-data:www-data /etc/apache2/ /var/www/ /var/log/apache2/ +usermod -s /sbin/nologin www-data +systemctl restart apache2 + +# Tomcat - tomcat 전용 계정으로 실행 +vi /etc/systemd/system/tomcat.service +# [Service] +# User=tomcat +# Group=tomcat +chown -R tomcat:tomcat / +usermod -s /sbin/nologin tomcat +systemctl restart tomcat + +# Nginx - nginx 전용 계정으로 실행 +vi /conf/nginx.conf +# user nginx nginx; +adduser --system --no-create-home --shell /bin/false nginx +groupadd nginx && usermod -aG nginx nginx +systemctl restart nginx + +# IIS - 응용프로그램 풀 ID를 ApplicationPoolIdentity로 설정 + +# JEUS - jeus 전용 계정 생성 후 소유권 변경 +useradd -m jeus +chown -R jeus:jeus / +``` + +### WEB-10: 불필요한 프록시 설정 제한 +**점검:** +```bash +# Apache +grep -i "ProxyPass\|ProxyRequests" /conf/httpd.conf +# Tomcat +grep -i "proxyName\|proxyPort" /conf/server.xml +# Nginx +grep -i "proxy_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - 불필요한 Proxy 설정 제거, ProxyRequests Off 유지 +# +# ProxyRequests Off +# + +# Tomcat - Connector 요소에서 불필요한 proxyName, proxyPort 제거 +# Nginx - 불필요한 proxy_pass 설정 제거 +# IIS - 루트 디렉터리에서 불필요한 Proxy 설정 제거 +# JEUS - web.xml 내 불필요한 ReverseProxy 설정 제거 +# WebtoB - http.m 내 REVERSE_PROXY 설정 제거 +``` + +### WEB-11: 웹 서비스 경로 설정 +**조치:** +```bash +# Apache - DocumentRoot를 별도 경로로 변경 +# DocumentRoot [별도의 경로] + +# Tomcat - docBase를 별도 경로로 변경 +# + +# Nginx - root를 별도 경로로 변경 +# root [별도의 경로]; + +# IIS - 사이트 편집 > 실제 경로를 별도 경로로 변경 +# JEUS - Docroot = "[별도의 경로]" +# WebtoB - DOCROOT="[별도의 경로]" +``` + +### WEB-12: 웹 서비스 링크 사용 금지 +**조치:** +```bash +# Apache - FollowSymLinks 옵션 제거 +vi /conf/httpd.conf +# +# Options -FollowSymLinks +# + +# Tomcat - allowLinking 옵션 제거 (기본값: false) +# Nginx - disable_symlinks on 설정 +# location / { disable_symlinks on; } + +# IIS - 홈 디렉터리 내 바로가기 파일 제거 +# JEUS - jeus-web-dd.xml 내 alias 요소 제거 +# WebtoB - http.m 내 ALIAS 절 불필요 설정 제거 +``` + +### WEB-13: 웹 서비스 설정 파일 노출 제한 +**조치:** +```bash +# Tomcat - 불필요한 DB 연결 리소스 설정 제거 후 접근 권한 설정 +chmod 600 /conf/server.xml + +# IIS - 처리기 매핑에서 *.asa/*.asax 항목 제거 +# 요청 필터링에서 "파일 이름 확장명 거부"에 등록 + +# JEUS - domain.xml 내 불필요한 DB 연결 리소스 제거 +chmod 600 /conf/domain.xml +``` + +### WEB-14: 웹 서비스 경로 내 파일의 접근 통제 +**조치:** +```bash +# Apache +chown -R www-data:www-data /conf/apache2.conf +chmod -R 750 /conf/apache2.conf + +# Tomcat +chown -R tomcat:tomcat /conf/web.xml +chmod -R 750 /conf/web.xml + +# Nginx +chown -R nginx:nginx /conf/nginx.conf +chmod -R 750 /conf/nginx.conf + +# IIS - web.config > 속성 > 보안 > 불필요 권한 제거 + +# JEUS +chown -R jeus:jeus /config/security/SYSTEM_DOMAIN/accounts.xml +chmod -R 750 /config/security/SYSTEM_DOMAIN/accounts.xml + +# WebtoB +chown -R webtob:webtob /config/http.m +chmod -R 750 /config/http.m +``` + +### WEB-15: 불필요한 스크립트 매핑 제거 +**점검:** +```bash +# Tomcat - 불필요한 servlet-mapping 확인 +grep -A2 "servlet-mapping" /conf/web.xml +# IIS - 처리기 매핑에서 취약한 확장자 확인 +# (.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +``` +**조치:** +```bash +# Tomcat - 불필요한 servlet-mapping 제거 +# IIS - 처리기 매핑에서 미사용 확장자 매핑 제거 +# JEUS - web.xml 내 불필요한 제거 +``` + +### WEB-16: 웹 서비스 헤더 정보 노출 제한 +**점검:** +```bash +# Apache +grep -i "ServerTokens\|ServerSignature" /conf/httpd.conf +# Nginx +grep -i "server_tokens" /conf/nginx.conf +# WebtoB +grep -i "ServerTokens" /config/http.m +``` +**조치:** +```bash +# Apache - ServerTokens Prod, ServerSignature Off 설정 +vi /conf/httpd.conf +# ServerTokens Prod +# ServerSignature Off + +# Tomcat - server.xml 내 server 값을 임의 정보로 변경 +# +# + ErrorReportValve에 showServerInfo="false" 추가 +# + +# Nginx +# server_tokens off; + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS 7 이전 - JEUSMain.xml 내 command-option 추가 +# -Djeus.servlet.response.header.serverInfo=false +# JEUS 7 - domain.xml 내 response-header 설정 + +# WebtoB +# ServerTokens ProductOnly +# ServerSignature off +``` + +### WEB-17: 웹 서비스 가상 디렉터리 삭제 +**점검/조치:** +```bash +# Apache - 불필요한 Alias 지시자 확인 후 제거 +grep -i "Alias" /conf/httpd.conf + +# Tomcat - Context path 속성값 확인 후 불필요 제거 +grep -i "Context path" /conf/server.xml + +# Nginx - 불필요한 alias 지시자 제거 +grep -i "alias" /conf/nginx.conf + +# WebtoB - NODE절의 불필요한 Alias 설정 삭제 +grep -i "ALIAS" /config/http.m +``` + +### WEB-18: WebDAV 비활성화 +**점검:** +```bash +# Apache +grep -i "Dav On" /conf/httpd.conf +grep -i "LoadModule.*dav" /conf/httpd.conf +# Nginx +grep -i "dav_methods" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - WebDAV 비활성화 +vi /conf/httpd.conf +# +# Dav Off +# +systemctl restart apache2 + +# Nginx - dav_methods 설정 주석 처리 또는 제거 +systemctl restart nginx + +# IIS - ISAPI 및 CGI 제한 > WebDAV 항목 > 확장 경로 실행 허용 체크 해제 + +# WebtoB - VHOST 절에서 PUT, DELETE, MKCOL, COPY, MOVE 메소드 제거 +``` + +--- + +## 3. 보안 설정 + +### WEB-19: SSI(Server Side Includes) 사용 제한 +**점검:** +```bash +# Apache +grep -i "Includes" /conf/httpd.conf +# Tomcat +grep -i "SSIServlet\|SSIFilter" /conf/web.xml +# Nginx +grep -i "ssi on" /conf/nginx.conf +# WebtoB +grep -i "SSI" /config/http.m +``` +**조치:** +```bash +# Apache - Options Includes 제거 +# Options (Includes 삭제) + +# Tomcat - SSI 서블릿/필터 설정 주석 처리 또는 삭제 +# Nginx - ssi off; 설정 +# IIS - 처리기 매핑에서 .shtml, .shtm, .stm 확장자 매핑 제거 +# WebtoB - *SVRGROUP, *SERVER에서 SSI 관련 설정 삭제 +``` + +### WEB-20: SSL/TLS 활성화 +**점검:** +```bash +# Apache +apache2ctl -M | grep ssl +# Nginx +grep -i "ssl_protocols" /conf/nginx.conf +# WebtoB +grep -i "SSLFLAG\|SSLNAME" /config/http.m +``` +**조치:** +```bash +# Apache - SSL 모듈 활성화 및 인증서 설정 +vi /sites-available/default-ssl.conf +# +# SSLEngine on +# SSLCertificateFile /path/to/cert.crt +# SSLCertificateKeyFile /path/to/privkey.key +# +a2ensite default-ssl +systemctl restart apache2 + +# Nginx - SSL 인증서 설정 +# server { +# listen 443 ssl; +# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; +# ssl_protocols TLSv1.2 TLSv1.3; +# ssl_prefer_server_ciphers on; +# } +systemctl restart nginx + +# IIS - SSL 인증서 바인딩 설정 (IIS 관리자 > 사이트 바인딩 > https 추가) + +# WebtoB - http.m 내 SSLFLAG = Y, SSLNAME 설정 +# *SSL 절에 인증서 경로 설정 +# Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3" +``` + +### WEB-21: HTTP 리디렉션 +**조치:** +```bash +# Apache - HTTP → HTTPS 리디렉션 설정 +# +# RewriteEngine On +# RewriteCond %{HTTPS} off +# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# + +# Nginx +# server { +# listen 80; +# return 301 https://$host$request_uri; +# } + +# IIS - 사이트 바인딩 종류를 HTTPS로 설정 + +# WebtoB - URLRewrite = Y 설정 +# RewriteCond %{HTTPS} off +# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +``` + +### WEB-22: 에러 페이지 관리 +**조치:** +```bash +# Apache - 에러 코드별 일원화된 에러 페이지 설정 +vi /sites-available/000-default.conf +# ErrorDocument 400 /error.html +# ErrorDocument 401 /error.html +# ErrorDocument 403 /error.html +# ErrorDocument 404 /error.html +# ErrorDocument 500 /error.html +systemctl restart apache2 + +# Tomcat - web.xml 내 에러 페이지 설정 +# +# 404 +# /error/404.html +# + +# Nginx +# error_page 404 /404.html; +# error_page 500 502 503 504 /50x.html; +# location = /404.html { root html; internal; } + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS - web.xml 내 에러 메시지 설정 +# WebtoB - *ERRORDOCUMENT 절에 에러 페이지 설정 +# 503 status = 503, url = "/503.html" +``` + +### WEB-23: LDAP 알고리즘 적절하게 구성 +**점검:** +```bash +# Tomcat - 비밀번호 다이제스트 알고리즘 확인 +grep 'digest=' /conf/server.xml +``` +**조치:** +```bash +# Tomcat - SHA-256 이상 알고리즘 설정 +vi /conf/server.xml +# digest="SHA-256" +systemctl restart tomcat +``` + +--- + +## 4. 패치 및 로그 관리 + +### WEB-24: 별도의 업로드 경로 사용 및 권한 설정 +**조치:** +```bash +# Apache - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +# apache2.conf 내 업로드 디렉터리 접근 제한 +# +# Require all denied +# + +# Tomcat - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ + +# Nginx - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ + +# IIS - 웹 서비스 외부에 업로드 디렉터리 생성, IIS 구동 계정에 쓰기 권한 부여 + +# JEUS - 업로드 디렉터리 권한 설정 +chmod 750 +chown jeus:jeus + +# WebtoB - 업로드 디렉터리 권한 설정 +chmod 750 +chown tmax:tmax +``` + +### WEB-25: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```bash +# Apache +/bin/httpd -v + +# Tomcat +cd /lib && java -cp catalina.jar org.apache.catalina.util.ServerInfo + +# Nginx +/sbin/nginx -v + +# IIS +reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v VersionString + +# JEUS +jeusadmin -version + +# WebtoB +wscfl -version +``` +**참고 사이트:** +- Apache: http://httpd.apache.org/download.cgi +- Tomcat: https://tomcat.apache.org/ +- Nginx: https://nginx.org/en/download.html +- IIS: https://www.iis.net/downloads/microsoft +- JEUS/WebtoB: https://technet.tmaxsoft.com/ + +### WEB-26: 로그 디렉터리 및 파일 권한 설정 +**점검:** +```bash +# Apache +ls -al / +# Tomcat +ls -al /logs/ +# Nginx +ls -al /var/log/nginx/ +# JEUS +ls -al /domains/jeus_domain/servers/sample/logs/ +# WebtoB +ls -al /log/ +``` +**조치:** +```bash +# Apache +chmod o-rwx /* + +# Tomcat +chmod o-rwx /logs/* + +# Nginx +chmod o-rwx /var/log/nginx/* + +# IIS - C:\Windows\System32\config 속성 > 보안 > Everyone 권한 제거 +# C:\Windows\System32\LogFiles에서도 동일 조치 + +# JEUS - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /domains/jeus_domain/servers/sample/logs +chmod 640 /domains/jeus_domain/servers/sample/logs/* + +# WebtoB - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /log/ +chmod 640 /log/* +``` diff --git a/skills/kesekit-fix/scripts/cii/webapp.md b/skills/kesekit-fix/scripts/cii/webapp.md new file mode 100644 index 0000000..83e1041 --- /dev/null +++ b/skills/kesekit-fix/scripts/cii/webapp.md @@ -0,0 +1,880 @@ +# Web Application 점검 스크립트 + +## 1. SSTI (Server Side Template Injection) +**취약 패턴:** +```python +# Python (Jinja2) - 사용자 입력을 직접 템플릿에 삽입 +template = param # 사용자 입력이 직접 템플릿으로 사용됨 +return render_template_string(template) +``` +**안전한 구현:** +```python +# Python (Jinja2) - 사용자 입력을 템플릿 변수로 전달 +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +``` + +--- + +## 2. SQL Injection (SI) + +### 취약 패턴 +```java +// Java - 문자열 연결 방식 쿼리 (취약) +String sql = "SELECT * FROM users WHERE username = '" + userInput + "'"; +Statement stmt = connection.createStatement(); +ResultSet rs = stmt.executeQuery(sql); +``` + +### 안전한 구현 - PreparedStatement (Java) +```java +// Java - PreparedStatement 사용 +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +ResultSet resultSet = preparedStatement.executeQuery(); +``` + +### 안전한 구현 - ORM (JPA/Hibernate) +```java +// Java - JPQL 파라미터 바인딩 +public class ItemService { + @PersistenceContext + private EntityManager em; + public List findItemsByUserInput(String userInput) { + String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; + Query query = em.createQuery(jpql, Item.class); + query.setParameter("userInput", userInput); + return query.getResultList(); + } +} +``` + +### 안전한 구현 - MyBatis 파라미터 바인딩 +```xml + + + INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) + VALUES (#{num}, #{name}, #{age}, #{grade}) + + + DELETE FROM STUDENTS WHERE NUM = #{num} + +``` + +### 안전한 구현 - SQL 키워드 필터링 (Java) +```java +public static String sanitize(String input) { + if (input == null) return null; + String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; + String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; + Pattern regex = Pattern.compile(pattern + "|--"); + Matcher matcher = regex.matcher(input); + return matcher.replaceAll(" "); +} +``` + +### 안전한 구현 - PreparedStatement (PHP) +```php +// PHP - PDO PreparedStatement +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +``` + +### 안전한 구현 - 예외 처리 +```java +// Java - 적절한 예외 처리 (에러 메시지 노출 방지) +try { + // 데이터베이스 작업 +} catch (SQLException e) { + e.printStackTrace(); // 로그에만 기록 + System.out.println("An error occurred. Please try again later."); // 사용자에게 일반 메시지 +} +``` +```php +// PHP - PDO 예외 처리 +try { + // 데이터베이스 작업 +} catch (PDOException $e) { + error_log($e->getMessage()); + echo 'SQL Exception'; // 상세 에러 노출 금지 +} +``` + +### 특수문자 필터링 대상 +| 문자 | 설명 | +|------|------| +| `'` | 문자 데이터 구분 기호 | +| `;` | 쿼리 구분 기호 | +| `--`, `#` | 라인 주석 구분 기호 | +| `/* */` | 블록 주석 | + +--- + +## 3. 디렉터리 인덱싱 (DI) +**조치:** +```apache +# Apache - Indexes 옵션 제거 + + Options FollowSymLinks # Indexes 제거 + +``` +```xml + + + listings + false + +``` +```nginx +# Nginx +server { + location / { + autoindex off; + } +} +``` + +--- + +## 4. 에러 페이지 적용 미흡 (EP) +**조치:** +```apache +# Apache - 서버 정보 노출 제거 및 사용자 에러 페이지 정의 +ServerTokens Prod +ServerSignature Off +ErrorDocument 404 /main/error.html +ErrorDocument 405 /main/error.html +``` +```xml + + + + +``` +```xml + + + 404 + /errors/404 + + + 500 + /errors/500 + + + java.lang.Exception + /errors/500 + +``` +```nginx +# Nginx - 서버 정보 제거 및 사용자 에러 페이지 +http { + server_tokens off; +} +server { + error_page 400 401 402 405 /custom_4xx.html; + error_page 404 /custom_404.html; + error_page 500 502 503 504 /custom_5xx.html; + location = /custom_404.html { root /var/www/html; internal; } + location = /custom_4xx.html { root /var/www/html; internal; } + location = /custom_5xx.html { root /var/www/html; internal; } +} +``` + +--- + +## 5. 정보 누출 (IL) +**조치 항목:** +1. robots.txt, web.config, nginx.conf로 검색 차단 디렉터리/확장자 지정 +2. 백업 파일 삭제 (*.bak, *.backup, *.org, *.old, *.zip, *.log, *.sql, *.tmp, *.temp) +3. 초기 페이지/디렉터리/배너 삭제 +4. 개인정보 마스킹 처리 (홍\*동, 901231-1\*\*\*\*\*\*, 010-1234-\*\*\*\* 등) +5. 개발 중 주석/디버그 정보 제거 + +--- + +## 6. 크로스사이트 스크립트 - XSS (XS) + +### 취약 패턴 +```javascript +// JavaScript - innerHTML 사용 (취약) +document.getElementById('output').innerHTML = userInput; +// document.write(userInput); // 취약 +``` + +### 안전한 구현 - HTML Entity 변환 (Java) +```java +public static String sanitizeInput(String input) { + if (input == null) return null; + return input.replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll("\"", """) + .replaceAll("'", "'"); +} +``` + +### 안전한 구현 - HTML Entity 변환 (PHP) +```php +function escapeHtml($input) { + return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { + $escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); + $additionalEscapes = [ + '\\' => '\', + '(' => '(', + ')' => ')', + '#' => '#' + ]; + return strtr($escaped, $additionalEscapes); +} +``` + +### 특수문자 필터링 대상 +| 변경 전 | 변경 후 | +|---------|---------| +| `<` | `<` | +| `>` | `>` | +| `"` | `"` | +| `(` | `(` | +| `)` | `)` | +| `#` | `#` | +| `&` | `&` | + +### 쿠키 보안 설정 +``` +Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict +``` + +--- + +## 7. 크로스사이트 요청 위조 - CSRF (CF) + +### 안전한 구현 - CSRF Token (Java/Spring) +```java +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + String csrfToken = generateCsrfToken(); + session.setAttribute("csrfToken", csrfToken); + model.addAttribute("csrfToken", csrfToken); + return "index"; +} + +// CSRF Token 생성 함수 +private String generateCsrfToken() { + SecureRandom secureRandom = new SecureRandom(); + byte[] token = new byte[16]; + secureRandom.nextBytes(token); + return Base64.getUrlEncoder().encodeToString(token); +} + +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, + @RequestParam("csrfToken") String csrfToken, + HttpServletRequest request, Model model) { + HttpSession session = request.getSession(); + String sessionToken = (String) session.getAttribute("csrfToken"); + if (sessionToken == null || !sessionToken.equals(csrfToken)) { + throw new IllegalStateException("Invalid CSRF token"); + } + String sanitizedInput = sanitizeInput(input); + inputs.add(sanitizedInput); + return "index"; +} +``` + +### HTML 폼에 CSRF Token 포함 +```html +
+ + + + +
+``` + +### 추가 방어 조치 +1. Referer/Origin 헤더 검증으로 외부 도메인 요청 차단 +2. SameSite 쿠키 옵션 적용 +3. HTTPS 환경에서 Secure, HttpOnly 속성 적용 + +--- + +## 8. 서버사이드 요청 위조 - SSRF (SF) + +### 안전한 구현 - URL 화이트리스트 (Java) +```java +private final List allowedDomains = Arrays.asList("example.com"); +private final Map> allowedIPsAndPorts = new HashMap<>(); + +public UrlValidator() { + allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); + allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} + +public boolean isUrlAllowed(String urlString) { + try { + URL url = new URL(urlString); + String protocol = url.getProtocol(); + // HTTP와 HTTPS만 허용 + if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { + return false; + } + String host = url.getHost(); + int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); + if (allowedDomains.contains(host)) return true; + if (allowedIPsAndPorts.containsKey(host)) { + return allowedIPsAndPorts.get(host).contains(port); + } + return false; + } catch (Exception e) { + return false; + } +} +``` + +### 안전한 구현 - URL 화이트리스트 (PHP) +```php +function isUrlAllowed($url) { + $allowedDomains = ['example.com', 'api.example.com']; + $allowedIPsAndPorts = [ + '192.168.10.10' => [80, 443, 8000], + '10.0.0.1' => [80, 443] + ]; + $parsedUrl = parse_url($url); + if (!$parsedUrl || !isset($parsedUrl['host'])) return false; + + $host = $parsedUrl['host']; + $port = isset($parsedUrl['port']) ? $parsedUrl['port'] + : ($parsedUrl['scheme'] === 'https' ? 443 : 80); + if (in_array($host, $allowedDomains, true)) return true; + if (filter_var($host, FILTER_VALIDATE_IP)) { + if (array_key_exists($host, $allowedIPsAndPorts)) { + return in_array($port, $allowedIPsAndPorts[$host], true); + } + } + return false; +} +``` + +### PHP 설정 강화 +```ini +; php.ini - 원격 URL 접근 차단 +allow_url_fopen=Off +allow_url_include=Off +``` + +### 추가 방어 조치 +1. 내부 네트워크 대역 및 관리용 포트 요청 차단 +2. http, https 외 프로토콜(file://, gopher://, data://) 차단 +3. 에러 발생 시 응답값 노출 금지 +4. 애플리케이션 서버와 내부 시스템 간 네트워크 분리 + +--- + +## 9. 약한 비밀번호 정책 (BF) +**비밀번호 복잡성 검증 (JavaScript):** +```javascript +function isPasswordStrong(password) { + const minLength = 8; + const hasUpperCase = /[A-Z]/.test(password); + const hasLowerCase = /[a-z]/.test(password); + const hasNumber = /[0-9]/.test(password); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); + return password.length >= minLength + && hasUpperCase && hasLowerCase + && hasNumber && hasSpecialChar; +} +``` +**취약 ID 예시:** admin, administrator, manager, guest, tomcat, root, user +**취약 비밀번호 예시:** abcd, 1234, 1111, test, password, public, 빈 비밀번호, ID와 동일 + +--- + +## 10. 불충분한 인증 절차 (IA) + +### 안전한 구현 - 재인증 로직 (Java) +```java +// 중요 페이지 접근 시 세션 기반 인증 검증 +public String editProfile(HttpSession session, Model model) { + User user = (User) session.getAttribute("user"); + Boolean isVerified = (Boolean) session.getAttribute("isVerified"); + if (user == null || isVerified == null || !isVerified) { + return "redirect:/user/authenticate"; + } + model.addAttribute("user", user); + return "edit_profile"; +} + +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { + if (input.equals(code)) { + session.setAttribute("isVerified", true); + return "redirect:/user/edit_profile"; + } else { + return "redirect:/user/authenticate?error=true"; + } +} +``` + +### 안전한 구현 - 접근 통제 공통 모듈 (Java) +```java +public class AccessControl { + public static boolean isAuthenticated(HttpSession session) { + return session.getAttribute("user") != null; + } + public static boolean isVerified(HttpSession session) { + return Boolean.TRUE.equals(session.getAttribute("isVerified")); + } +} +``` + +--- + +## 11. 불충분한 권한 검증 (IN) + +### 안전한 구현 - 서버 사이드 세션 검증 (Java) +```java +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { + User currentUser = (User) session.getAttribute("currentUser"); + if (currentUser == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); + } + Inquiry inquiry = inquiryService.findInquiryById(id); + if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); + } + model.addAttribute("inquiry", inquiry); + return "inquiry_detail"; +} +``` + +--- + +## 12. 취약한 비밀번호 복구 절차 (PR) + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (Java) +```java +private static final String CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +private static final int PASSWORD_LENGTH = 12; + +private String generateTemporaryPassword() { + SecureRandom secureRandom = new SecureRandom(); + StringBuilder password = new StringBuilder(PASSWORD_LENGTH); + for (int i = 0; i < PASSWORD_LENGTH; i++) { + int randomIndex = secureRandom.nextInt(CHARACTERS.length()); + password.append(CHARACTERS.charAt(randomIndex)); + } + return password.toString(); +} +``` + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (PHP) +```php +function generateRandomPassword($length = 12) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; + $charactersLength = strlen($characters); + $randomPassword = ''; + for ($i = 0; $i < $length; $i++) { + $randomPassword .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomPassword; +} +``` + +--- + +## 13. 프로세스 검증 누락 (PV) + +### 안전한 구현 - 세션 기반 접근 통제 (Java/Spring) +```java +// 인터셉터 설정 - 비공개/공개 페이지 구분 +public class SessionConfig implements WebMvcConfigurer { + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SessionInterceptor()) + .addPathPatterns("/home", "/board/**") + .excludePathPatterns("/login", "/register", "/error"); + } +} + +public class SessionInterceptor implements HandlerInterceptor { + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + return true; + } +} +``` + +### 안전한 구현 - 플로우 제어 (PHP) +```php +session_start(); +if ($step_completed) { + $_SESSION['step1_completed'] = true; + header('Location: step2.php'); + exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { + header('Location: step1.php'); // 1단계 미완료 시 리다이렉트 + exit; +} +``` + +--- + +## 14. 악성 파일 업로드 (FU) + +### 안전한 구현 - 파일 업로드 보안 (Java) +```java +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of( + "image/jpeg", "image/png", "application/pdf", "text/plain"); + +// 파일명 정규화 +private static String normalizeFilename(String filename) { + if (filename == null) return null; + String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); + name = Normalizer.normalize(name, Normalizer.Form.NFC); + name = name.replace("\0", ""); + name = name.replaceAll("[<>:\"/\\\\|?*]", ""); + name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); + return name; +} + +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { + String safe = normalizeFilename(filename); + int dotCount = safe.length() - safe.replace(".", "").length(); + if (dotCount != 1) return ""; // 이중 확장자 차단 + int idx = safe.lastIndexOf('.'); + return (idx == -1) ? "" : safe.substring(idx + 1).toLowerCase(); +} + +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { + String original = file.getOriginalFilename(); + String ext = getExtension(original); + if (!Arrays.asList(ALLOWED_EXTENSIONS).contains(ext)) { + throw new IOException("허용되지 않은 확장자"); + } + // MIME 시그니처 검증 + Tika tika = new Tika(); + String mime = tika.detect(file.getInputStream()); + if (!ALLOWED_MIME.contains(mime)) { + throw new IOException("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; + Path savePath = Paths.get(uploadDir, newName); + file.transferTo(savePath.toFile()); + return newName; +} +``` + +### 안전한 구현 - 파일 업로드 보안 (PHP) +```php +function normalize_filename($filename) { + $filename = urldecode($filename); + $filename = normalizer_normalize($filename, Normalizer::FORM_C); + $filename = str_replace("\0", "", $filename); + $filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); + $filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); + return $filename; +} + +function is_valid_extension($filename, $allowed_exts) { + $safe = normalize_filename($filename); + if (substr_count($safe, '.') !== 1) return false; // 이중 확장자 차단 + $ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); + return in_array($ext, $allowed_exts, true); +} + +function save_upload($file, $uploadDir) { + $allowed_exts = ['jpg', 'jpeg', 'png', 'pdf', 'txt']; + $allowed_mime = ['image/jpeg', 'image/png', 'application/pdf', 'text/plain']; + + if (!is_valid_extension($file['name'], $allowed_exts)) { + throw new Exception("허용되지 않은 확장자"); + } + $mime = mime_content_type($file['tmp_name']); + if (!in_array($mime, $allowed_mime, true)) { + throw new Exception("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $newName = bin2hex(random_bytes(16)) . '.' . $ext; + $dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; + if (!move_uploaded_file($file['tmp_name'], $dest)) { + throw new Exception("파일 저장 실패"); + } + return $newName; +} +``` + +### 핵심 보안 조치 +1. 확장자 화이트리스트 검증 + MIME 타입 검증 +2. 파일명 난수화 (UUID 등) +3. 업로드 경로를 웹 디렉터리 외부에 배치 +4. 업로드된 파일의 실행 권한 제거 + +--- + +## 15. 파일 다운로드 (FD) + +### 안전한 구현 - 파일명 검증 (Java) +```java +public class FileDownloadUtil { + // 파일명에 영문, 숫자, 일부 특수문자만 허용 + public static boolean isValidFileName(String fileName) { + return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); + } + + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "png"); + + public static boolean isAllowedExtension(String filePath) { + String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + return ALLOWED_EXTENSIONS.contains(extension); + } +} + +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename) throws IOException { + if (!FileDownloadUtil.isValidFileName(filename) + || !FileDownloadUtil.isAllowedExtension(filename)) { + return ResponseEntity.badRequest().build(); + } + // ... 다운로드 로직 +} +``` + +### 안전한 구현 - 경로 정규화 (PHP) +```php +if (isset($_GET['file'])) { + $file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); + $filePath = realpath('../uploads/' . $file); // 경로 정규화 + // 파일 경로가 지정된 디렉터리 내에 있는지 확인 + if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { + downloadFile($filePath); + } else { + echo "잘못된 파일 경로입니다."; + exit; + } +} +``` + +### 우회 공격 대응 +| 인코딩 방식 | 예시 | +|-------------|------| +| URL 인코딩 | `.(%2e)`, `/(%2f)`, `\(%5c)` | +| 더블 URL 인코딩 | `.(%252e)`, `/(%252f)` | +| 16bit 유니코드 | `.(%u002e)`, `/(%u2215)` | +| 특수문자 중첩 | `....//` → `../` | +| 종단 문자 추가 | `[파일명]%00.jpg` | + +--- + +## 16. 불충분한 세션 관리 (IS) + +### 안전한 구현 - 세션 고정 방지 (Java/Spring) +```java +@RequestMapping("/login") +public String login(HttpServletRequest request) { + request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 + return "redirect:/home"; +} + +// Spring Security 설정 +@Override +protected void configure(HttpSecurity http) throws Exception { + http.sessionManagement() + .sessionFixation().migrateSession() + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(1).maxSessionsPreventsLogin(false) + .expiredUrl("/login?expired"); +} +``` + +### 세션 만료 시간 설정 +```xml + + + 60 + +``` +```properties +# Spring Boot application.properties +server.servlet.session.timeout=60m +``` +```php +// PHP - 세션 재생성 및 만료 설정 +session_start(); +session_regenerate_id(true); // 예측 불가능한 세션 ID 생성 +ini_set('session.gc_maxlifetime', 3600); // 60분 +ini_set('session.cookie_lifetime', 3600); +``` + +### JWT 보안 설정 +| 안전한 알고리즘 | 설명 | +|----------------|------| +| HS256~512 | 비밀 키 기반 HMAC 해시 | +| RS256~512 | 비대칭 키 RSA 서명 | +| ES256~512 | 타원 곡선 암호화 서명 | + +| 취약한 알고리즘 | 설명 | +|----------------|------| +| HS1, RS1 | SHA-1 기반 (취약) | +| none | 서명 생략 (위험) | +| plaintext | 평문 서명 (위험) | + +--- + +## 17. 데이터 평문 전송 (SN) +**조치:** +```apache +# Apache - TLSv1.2 이상 사용, SSLv2/v3 비활성화 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +``` +``` +# IIS - 레지스트리에서 SSL 2.0, 3.0 비활성화 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] +"Enabled"=dword:00000000 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] +"Enabled"=dword:00000000 +``` + +--- + +## 18. 쿠키 변조 (CC) + +### 안전한 구현 - AES + HMAC 쿠키 (Java) +```java +public class CookieUtil { + private static final int IV_LEN = 16, HMAC_LEN = 32; + private final byte[] encKey; // AES-256 키 (32 bytes) + private final byte[] hmacKey; // HMAC 키 + + // 보안 쿠키 생성 + public void addSecureCookie(HttpServletResponse resp, String name, + String plaintext, int maxAgeSec) throws Exception { + byte[] iv = new byte[IV_LEN]; + new SecureRandom().nextBytes(iv); + + // AES-256-CBC 암호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, + new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // HMAC 생성 + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); + mac.update(iv); + mac.update(ciphertext); + byte[] hmac = mac.doFinal(); + + // payload = IV + HMAC + 암호문 + byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; + System.arraycopy(iv, 0, payload, 0, iv.length); + System.arraycopy(hmac, 0, payload, iv.length, hmac.length); + System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); + + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); + + // HttpOnly, Secure, SameSite 속성 설정 + String header = String.format( + "%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", + name, encoded, maxAgeSec); + resp.addHeader("Set-Cookie", header); + } +} +``` + +--- + +## 19. 관리자 페이지 노출 (AE) +**조치:** +1. 유추하기 어려운 URL 및 포트로 관리자 페이지 변경 +2. 지정된 IP만 관리자 페이지 접근 허용 +3. 관리자 로그인 시 2차 인증(OTP, VPN, 인증서) 적용 +4. 하위 페이지별 세션 검증 구현 + +--- + +## 20. 자동화 공격 (CC) +**조치:** +1. 로그인 시도, 게시글 등록, SMS 발송 등에 횟수 제한 설정 +2. CAPTCHA 등 일회성 확인 로직 구현 +3. IDS/IPS 시스템으로 대량 패킷 감지 및 차단 +4. 로그인 실패 3~5회 초과 시 계정 잠금 로직 구현 + +--- + +## 21. 불필요한 Method 악용 (WM) + +### 조치 - Apache +```bash +# WebDAV 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs + +# 불필요한 메소드 제한 +# /etc/apache2/apache2.conf + + Dav Off + + Order Allow,Deny + Deny from all + + + +# TRACE 메소드 비활성화 +TraceEnable Off + +# CONNECT 메소드 비활성화 (mod_rewrite) + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} ^CONNECT + RewriteRule .* - [F] + +``` + +### 조치 - Tomcat +```xml + + + readonly + true + + + + +``` + +### 조치 - Nginx +```nginx +# WebDAV 비활성화 - dav_methods 지시어 삭제 +# Nginx는 0.5.17 이후 TRACE를 405로 거부 +# CONNECT 메소드는 기본적으로 미지원 +``` + +### 조치 - IIS +``` +# IIS 6.0 이상: 요청 필터링 > HTTP 동사 > 동사 거부에 TRACE 추가 +# WebDAV 기능 비활성화 확인 +``` diff --git a/skills/kesekit-fix/scripts/cii/windows.md b/skills/kesekit-fix/scripts/cii/windows.md new file mode 100644 index 0000000..e2970e3 --- /dev/null +++ b/skills/kesekit-fix/scripts/cii/windows.md @@ -0,0 +1,1489 @@ +# Windows 서버 취약점 점검/조치 스크립트 +> KISA 주요정보통신기반시설 기술적 취약점 분석평가 가이드 (W-01 ~ W-64) + +--- + +## 1. 계정 관리 + +### W-01: Administrator 계정 이름 변경 등 보안성 강화 (상) +**점검:** +```powershell +# Administrator(SID-500) 계정명 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select-Object Name, Enabled, SID + +# 로컬 보안 정책에서 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "NewAdministratorName" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# Administrator 계정명을 유추 불가능한 이름으로 변경 +Rename-LocalUser -Name "Administrator" -NewName "yourCustomAdmin" + +# 또는 wmic 사용 +wmic useraccount where "SID like '%-500'" rename "yourCustomAdmin" + +# GPO 방식: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: Administrator 계정 이름 바꾸기" 설정 +``` + +--- + +### W-02: Guest 계정 비활성화 (상) +**점검:** +```powershell +# Guest 계정 활성화 여부 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled + +# net 명령으로 확인 +net user Guest +``` +**조치:** +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" + +# 또는 net 명령 +net user Guest /active:no +``` + +--- + +### W-03: 불필요한 계정 제거 (상) +**점검:** +```powershell +# 전체 로컬 사용자 계정 목록 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Format-Table + +# 장기 미사용 계정 확인 (90일 이상 미로그인) +Get-LocalUser | Where-Object { + $_.Enabled -eq $true -and + $_.LastLogon -lt (Get-Date).AddDays(-90) +} | Select-Object Name, LastLogon +``` +**조치:** +```powershell +# 불필요한 계정 비활성화 +Disable-LocalUser -Name "<불필요한계정명>" + +# 불필요한 계정 삭제 +Remove-LocalUser -Name "<불필요한계정명>" +``` + +--- + +### W-04: 계정 잠금 임계값 설정 (상) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts + +# 상세 확인 (secedit) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutBadCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 임계값 5회로 설정 +net accounts /lockoutthreshold:5 + +# GPO 방식: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 임계값" = 5 +``` + +--- + +### W-05: 해독 가능한 암호화를 사용하여 암호 저장 해제 (상) +**점검:** +```powershell +# 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ClearTextPassword" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "해독 가능한 암호화를 사용하여 암호 저장" = 사용 안 함 +# secedit 인라인 설정 +secedit /export /cfg C:\secpol_tmp.cfg +(Get-Content C:\secpol_tmp.cfg) -replace "ClearTextPassword = 1","ClearTextPassword = 0" | Set-Content C:\secpol_tmp.cfg +secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol_tmp.cfg /areas SECURITYPOLICY +Remove-Item C:\secpol_tmp.cfg -Force +``` + +--- + +### W-06: 관리자 그룹에 최소한의 사용자 포함 (상) +**점검:** +```powershell +# Administrators 그룹 구성원 확인 +Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource + +# net 명령 +net localgroup Administrators +``` +**조치:** +```powershell +# 불필요한 계정을 Administrators 그룹에서 제거 +Remove-LocalGroupMember -Group "Administrators" -Member "<불필요한계정>" + +# 관리 업무용 계정과 일반 업무용 계정을 분리하여 운용 +``` + +--- + +### W-07: Everyone 사용 권한을 익명 사용자에 적용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous +# 값이 0이면 양호 + +# 로컬 보안 정책 내보내기로 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "EveryoneIncludesAnonymous" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: Everyone 사용 권한을 익명 사용자에게 적용" = 사용 안 함 +``` + +--- + +### W-08: 계정 잠금 기간 설정 (중) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts +# "잠금 기간(분)"과 "잠금 관찰 창(분)" 확인 + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutDuration|ResetLockoutCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 기간 60분, 잠금 수 원래대로 설정 기간 60분 +net accounts /lockoutduration:60 +net accounts /lockoutwindow:60 + +# GPO: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 기간" = 60분 +# "다음 시간 후 계정 잠금 수를 원래대로 설정" = 60분 +``` + +--- + +### W-09: 비밀번호 관리 정책 설정 (상) +**점검:** +```powershell +# 암호 정책 확인 +net accounts + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MinimumPasswordLength|PasswordComplexity|MaximumPasswordAge|MinimumPasswordAge|PasswordHistorySize" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 암호 정책 설정 +net accounts /minpwlen:8 /maxpwage:90 /minpwage:1 /uniquepw:4 + +# GPO: 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "암호는 복잡성을 만족해야 함" = 사용 +# "최소 암호 길이" = 8문자 +# "최대 암호 사용 기간" = 90일 +# "최소 암호 사용 기간" = 1일 +# "최근 암호 기억" = 4개 암호 기억됨 +``` + +--- + +### W-10: 마지막 사용자 이름 표시 안 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 마지막 사용자 이름 표시 안 함" = 사용 +``` + +--- + +### W-11: 로컬 로그온 허용 (중) +**점검:** +```powershell +# 로컬 로그온 허용 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeInteractiveLogonRight" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force + +# Administrators, IUSR_ 외 다른 계정이 있으면 취약 +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "로컬 로그온 허용" 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹 제거 + +# ntrights 유틸리티 사용 (Windows Resource Kit) +# ntrights -u "<제거할계정>" -r SeInteractiveLogonRight +``` + +--- + +### W-12: 익명 SID/이름 변환 허용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 (Windows 2003 이상) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LSAAnonymousNameLookup" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: 익명 SID/이름 변환 허용" = 사용 안 함 +``` + +--- + +### W-13: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한" = 사용 +``` + +--- + +### W-14: 원격터미널 접속 가능한 사용자 그룹 제한 (중) +**점검:** +```powershell +# Remote Desktop Users 그룹 구성원 확인 +Get-LocalGroupMember -Group "Remote Desktop Users" | Select-Object Name, ObjectClass + +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +# 0이면 원격 데스크톱 허용 상태 +``` +**조치:** +```powershell +# 관리자 외 별도 원격 접속 계정 생성 +New-LocalUser -Name "rdpUser" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -FullName "RDP 전용 사용자" +Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpUser" + +# 불필요한 계정 제거 +Remove-LocalGroupMember -Group "Remote Desktop Users" -Member "<불필요한계정>" +``` + +--- + +## 2. 서비스 관리 + +### W-15: 사용자 개인키 사용 시 암호 입력 (상) +**점검:** +```powershell +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ForceKeyProtection" C:\secpol_tmp.cfg +# 값이 2이면 양호 (키를 사용할 때마다 암호 입력) +Remove-Item C:\secpol_tmp.cfg -Force + +# 레지스트리 직접 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection +``` +**조치:** +```powershell +# 레지스트리 설정 (2 = 키를 사용할 때마다 암호 매번 입력) +reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection /t REG_DWORD /d 2 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용" +# = "키를 사용할 때마다 암호를 매 번 입력해야 함" +``` + +--- + +### W-16: 공유 권한 및 사용자 그룹 설정 (상) +**점검:** +```powershell +# 공유 폴더 목록 확인 +Get-SmbShare | Select-Object Name, Path, Description | Format-Table + +# 공유 폴더 권한에서 Everyone 확인 +Get-SmbShare | ForEach-Object { + $share = $_.Name + Get-SmbShareAccess -Name $share | Where-Object { $_.AccountName -like "*Everyone*" } | + Select-Object @{N='Share';E={$share}}, AccountName, AccessControlType, AccessRight +} +``` +**조치:** +```powershell +# 공유 폴더에서 Everyone 권한 제거 +Revoke-SmbShareAccess -Name "<공유명>" -AccountName "Everyone" -Force + +# 필요한 계정에 적절한 권한 추가 +Grant-SmbShareAccess -Name "<공유명>" -AccountName "<계정명>" -AccessRight Read -Force +``` + +--- + +### W-17: 하드디스크 기본 공유 제거 (상) +**점검:** +```powershell +# 기본 공유 확인 +net share +Get-SmbShare | Where-Object { $_.Name -match '^\w\$|^ADMIN\$' } | Select-Object Name, Path + +# AutoShareServer 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks 2>$null +``` +**조치:** +```powershell +# 기본 공유 중지 +net share C$ /delete +net share D$ /delete +net share ADMIN$ /delete + +# 재부팅 후 재생성 방지 (레지스트리) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-18: 불필요한 서비스 제거 (상) +**점검:** +```powershell +# 실행 중인 서비스 목록 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType | Format-Table + +# 불필요한 서비스 존재 여부 확인 +$unnecessaryServices = @("Alerter","ClipSrv","Browser","CryptSvc","DHCPClient", + "TrkWks","TrkSvr","ERSvc","HidServ","IMAPICD","Messenger","mnmsrvc", + "WmdmPmSN","Spooler","RemoteRegistry","simptcp","upnphost","WZCSVC") +Get-Service | Where-Object { $unnecessaryServices -contains $_.Name -and $_.Status -eq "Running" } | + Select-Object Name, DisplayName, Status +``` +**조치:** +```powershell +# 불필요한 서비스 중지 및 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 예시: Remote Registry 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled + +# 예시: Print Spooler 비활성화 (프린터 미사용 시) +Stop-Service -Name "Spooler" -Force +Set-Service -Name "Spooler" -StartupType Disabled +``` + +--- + +### W-19: 불필요한 IIS 서비스 구동 점검 (상) +**점검:** +```powershell +# IIS 서비스 상태 확인 +Get-Service -Name "W3SVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "IISADMIN" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# IIS 설치 여부 +Get-WindowsFeature -Name Web-Server 2>$null | Select-Object Name, Installed +``` +**조치:** +```powershell +# IIS 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "W3SVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "W3SVC" -StartupType Disabled -ErrorAction SilentlyContinue +Stop-Service -Name "IISADMIN" -Force -ErrorAction SilentlyContinue +Set-Service -Name "IISADMIN" -StartupType Disabled -ErrorAction SilentlyContinue + +# IIS 기능 제거 +Uninstall-WindowsFeature -Name Web-Server +``` + +--- + +### W-20: NetBIOS 바인딩 서비스 구동 점검 (상) +**점검:** +```powershell +# NetBIOS over TCP/IP 설정 확인 +Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | + Select-Object Description, TcpipNetbiosOptions +# TcpipNetbiosOptions: 0=DHCP기본, 1=사용, 2=사용안함 + +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces" /s /v NetbiosOptions +``` +**조치:** +```powershell +# NetBIOS over TCP/IP 비활성화 (WMI) +$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" +foreach ($adapter in $adapters) { + $adapter.SetTcpipNetbios(2) # 2 = NetBIOS 사용 안 함 +} + +# GUI: 네트워크 연결 > 속성 > TCP/IPv4 > 고급 > WINS 탭 +# "NetBIOS over TCP/IP 사용 안 함" 선택 +``` + +--- + +### W-21: 암호화되지 않는 FTP 서비스 비활성화 (상) +**점검:** +```powershell +# FTP 서비스 상태 확인 +Get-Service -Name "FTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "MSFTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# FTP 서비스 중지 및 비활성화 +Stop-Service -Name "FTPSVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "FTPSVC" -StartupType Disabled -ErrorAction SilentlyContinue + +# SFTP 또는 FTPS 대안 사용 권장 +``` + +--- + +### W-22: FTP 디렉토리 접근권한 설정 (상) +**점검:** +```powershell +# FTP 홈 디렉터리 경로 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/sites/site" -PSPath "IIS:\" -ErrorAction SilentlyContinue + +# FTP 홈 디렉터리 권한 확인 +icacls "C:\inetpub\ftproot" 2>$null +# Everyone 권한이 있으면 취약 +``` +**조치:** +```powershell +# FTP 홈 디렉터리에서 Everyone 권한 제거 +icacls "C:\inetpub\ftproot" /remove Everyone /T + +# 필요한 사용자에게만 권한 부여 +icacls "C:\inetpub\ftproot" /grant "ftpUser:(OI)(CI)RX" +``` + +--- + +### W-23: 공유 서비스에 대한 익명 접근 제한 설정 (상) +**점검:** +```powershell +# FTP 익명 인증 설정 확인 (IIS) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS FTP 익명 인증 비활성화 +Import-Module WebAdministration +Set-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -Value $false + +# 또는 IIS 관리자에서: +# FTP 사이트 > FTP 인증 > 익명 인증 = 사용 안 함 +``` + +--- + +### W-24: FTP 접근 제어 설정 (상) +**점검:** +```powershell +# IIS FTP IP 제한 설정 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/security/ipSecurity" -PSPath "IIS:\Sites\Default FTP Site" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS 관리자에서 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +# 1) 허용 항목 추가 (접속 허용 IP) +# 2) 기능 설정 편집 > 지정되지 않은 클라이언트 액세스 = 거부 + +# PowerShell (IIS 모듈) +Import-Module WebAdministration +# 특정 IP 허용 추가 +Add-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/ipSecurity" -Name "." -Value @{ipAddress="192.168.1.100";allowed="true"} +``` + +--- + +### W-25: DNS Zone Transfer 설정 (상) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 영역 전송 설정 확인 (DNS 서버 설치 시) +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, ZoneType +Get-DnsServerZone -ErrorAction SilentlyContinue | ForEach-Object { + Get-DnsServerZoneTransferPolicy -ZoneName $_.ZoneName -ErrorAction SilentlyContinue +} +``` +**조치:** +```powershell +# DNS 영역 전송을 특정 서버로만 제한 +# dnscmd /zoneresetsecondaries <영역이름> /securens +Set-DnsServerPrimaryZone -Name "<영역이름>" -SecureSecondaries TransferToSecureServers -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-26: RDS(Remote Data Services) 제거 (상) +**점검:** +```powershell +# MSADC 가상 디렉터리 존재 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch" 2>$null +``` +**조치:** +```powershell +# MSADC 가상 디렉터리 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 키 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\RDSServer.DataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\AdvancedDataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\VbBusObj.VbBusObjCls" /f 2>$null + +# 참고: Windows 2008 이상은 해당 없음 +``` + +--- + +### W-27: 최신 Windows OS Build 버전 적용 (상) +**점검:** +```powershell +# Windows 빌드 버전 확인 +[System.Environment]::OSVersion.Version +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").UBR + +# winver 실행 +winver + +# systeminfo로 상세 정보 +systeminfo | Select-String "OS 이름|OS 버전|OS Name|OS Version" +``` +**조치:** +```powershell +# Windows Update 확인 및 설치 +# 자동 업데이트: +# 제어판 > Windows Update + +# PowerShell로 업데이트 확인 (PSWindowsUpdate 모듈) +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot + +# 수동 패치: https://msrc.microsoft.com/update-guide +``` + +--- + +### W-28: 터미널 서비스 암호화 수준 설정 (중) +**점검:** +```powershell +# RDP 암호화 수준 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel +# 2=중간(클라이언트 호환 가능), 3=높음, 4=FIPS + +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MinEncryptionLevel 2>$null +``` +**조치:** +```powershell +# 레지스트리에서 암호화 수준 설정 (2 이상) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 3 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 보안 +# "클라이언트 연결 암호화 수준 설정" = 사용 (높음) +``` + +--- + +### W-29: 불필요한 SNMP 서비스 구동 점검 (중) +**점검:** +```powershell +# SNMP 서비스 상태 확인 +Get-Service -Name "SNMP" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# SNMP 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "SNMP" -Force -ErrorAction SilentlyContinue +Set-Service -Name "SNMP" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-30: SNMP Community String 복잡성 설정 (중) +**점검:** +```powershell +# SNMP Community String 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" 2>$null +# public, private이 있으면 취약 +``` +**조치:** +```powershell +# 기본 Community String 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v public /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v private /f 2>$null + +# 복잡한 Community String 추가 (읽기전용 = 4) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v "C0mpl3x$tr1ng!" /t REG_DWORD /d 4 /f + +# SNMP 서비스 재시작 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-31: SNMP Access Control 설정 (중) +**점검:** +```powershell +# SNMP 허용 호스트 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" 2>$null +# 값이 없으면 모든 호스트 허용 (취약) +``` +**조치:** +```powershell +# 특정 호스트로부터만 SNMP 패킷 수신 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d "192.168.1.100" /f + +# GUI: 서비스 > SNMP Service > 속성 > 보안 탭 +# "다음 호스트로부터 SNMP 패킷 받아들이기" 선택 후 호스트 등록 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-32: DNS 서비스 구동 점검 (중) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 동적 업데이트 설정 확인 +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, DynamicUpdate +``` +**조치:** +```powershell +# DNS 동적 업데이트 비활성화 +Set-DnsServerPrimaryZone -Name "<영역이름>" -DynamicUpdate None -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-33: HTTP/FTP/SMTP 배너 차단 (하) +**점검:** +```powershell +# IIS Server 헤더 확인 (HTTP 응답) +# (Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing).Headers["Server"] + +# IIS X-Powered-By 헤더 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -ErrorAction SilentlyContinue + +# SMTP 배너 확인 +# telnet localhost 25 으로 접속 시 배너 확인 +``` +**조치:** +```powershell +# [HTTP] IIS Server 헤더 제거 - URL Rewrite 모듈 필요 +# 1) URL Rewrite 설치: https://www.iis.net/downloads/microsoft/url-rewrite +# 2) 아웃바운드 규칙 추가: 서버 변수 RESPONSE_SERVER 비우기 + +# [HTTP] X-Powered-By 헤더 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -AtElement @{name="X-Powered-By"} -ErrorAction SilentlyContinue + +# [FTP] 기본 배너 숨기기 +# IIS 관리자 > FTP 사이트 > FTP 메시지 > "기본 배너 숨기기" 체크 + +# [SMTP] 배너 변경 +# cd C:\inetpub\AdminScripts +# cscript adsutil.vbs set smtpsvc/1/connectresponse "Authorized Access Only" +# net stop smtpsvc && net start smtpsvc +``` + +--- + +### W-34: Telnet 서비스 비활성화 (중) +**점검:** +```powershell +# Telnet 서비스 상태 확인 +Get-Service -Name "TlntSvr" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# Telnet 인증 방식 확인 (Windows 2003~2012) +# tlntadmn config 명령으로 확인 +``` +**조치:** +```powershell +# Telnet 서비스 중지 및 비활성화 +Stop-Service -Name "TlntSvr" -Force -ErrorAction SilentlyContinue +Set-Service -Name "TlntSvr" -StartupType Disabled -ErrorAction SilentlyContinue + +# 부득이 사용 시 NTLM 인증만 사용 +# tlntadmn config sec = +NTLM -passwd + +# 참고: Windows 2016 이상에서는 Telnet 서버 제공하지 않음 +``` + +--- + +### W-35: 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 (중) +**점검:** +```powershell +# 시스템 DSN 확인 +Get-OdbcDsn -DsnType System -ErrorAction SilentlyContinue | Select-Object Name, DriverName, Platform + +# 레지스트리에서 ODBC 데이터 소스 확인 +reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" 2>$null +``` +**조치:** +```powershell +# 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType System -ErrorAction SilentlyContinue + +# GUI: 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN +# 불필요한 데이터 소스 선택 후 제거 +``` + +--- + +### W-36: 원격터미널 접속 타임아웃 설정 (중) +**점검:** +```powershell +# RDP 세션 유휴 타임아웃 레지스트리 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime 2>$null +# 밀리초 단위: 1800000 = 30분 + +# 현재 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MaxIdleTime 2>$null +``` +**조치:** +```powershell +# 유휴 세션 타임아웃 30분(1800000ms) 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime /t REG_DWORD /d 1800000 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 세션 시간 제한 +# "활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정" = 사용 (30분) +``` + +--- + +### W-37: 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 (중) +**점검:** +```powershell +# 예약된 작업 목록 확인 +Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} | + Select-Object TaskName, TaskPath, State | + Format-Table -AutoSize + +# 예약된 작업 상세 정보 (실행 명령 포함) +Get-ScheduledTask | ForEach-Object { + $task = $_ + $actions = $task.Actions + foreach ($action in $actions) { + [PSCustomObject]@{ + TaskName = $task.TaskName + Execute = $action.Execute + Arguments = $action.Arguments + State = $task.State + } + } +} | Format-Table -AutoSize + +# schtasks 명령 +schtasks /query /fo LIST /v +``` +**조치:** +```powershell +# 의심스러운 예약 작업 비활성화 +Disable-ScheduledTask -TaskName "<작업이름>" + +# 의심스러운 예약 작업 삭제 +Unregister-ScheduledTask -TaskName "<작업이름>" -Confirm:$false + +# schtasks 명령 +schtasks /delete /tn "<작업이름>" /f +``` + +--- + +## 3. 패치 관리 + +### W-38: 주기적 보안 패치 및 벤더 권고사항 적용 (상) +**점검:** +```powershell +# 설치된 핫픽스 목록 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, InstalledOn, Description -First 20 + +# 시스템 정보에서 KB 목록 +systeminfo | findstr "KB" + +# 마지막 패치 설치 날짜 확인 +(Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).InstalledOn + +# Windows Update 이력 확인 +$session = New-Object -ComObject Microsoft.Update.Session +$searcher = $session.CreateUpdateSearcher() +$history = $searcher.QueryHistory(0, 20) +$history | Select-Object Title, Date, ResultCode | Format-Table +``` +**조치:** +```powershell +# Windows Update 실행 +# 수동: https://msrc.microsoft.com/update-guide +# 자동: 제어판 > Windows Update + +# PowerShell 모듈 사용 +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll +``` + +--- + +### W-39: 백신 프로그램 업데이트 (상) +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntispywareEnabled, AntivirusEnabled, + AntivirusSignatureLastUpdated, AntispywareSignatureLastUpdated + +# 백신 엔진 버전 확인 +Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, AntivirusSignatureVersion + +# 3rd party 백신 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState, pathToSignedProductExe +``` +**조치:** +```powershell +# Windows Defender 정의 업데이트 +Update-MpSignature + +# Windows Defender 수동 빠른 검사 +Start-MpScan -ScanType QuickScan + +# 3rd party 백신의 경우 해당 제조사 업데이트 절차 참조 +``` + +--- + +## 4. 로그 관리 + +### W-40: 정책에 따른 시스템 로깅 설정 (중) +**점검:** +```powershell +# 감사 정책 확인 +auditpol /get /category:* + +# 주요 감사 정책 확인 +auditpol /get /subcategory:"로그온","로그오프","계정 관리","정책 변경","권한 사용","디렉터리 서비스 액세스" +``` +**조치:** +```powershell +# 감사 정책 설정 (KISA 권고 기준) +auditpol /set /subcategory:"계정 관리" /failure:enable +auditpol /set /subcategory:"계정 로그온 이벤트" /success:enable /failure:enable +auditpol /set /subcategory:"권한 사용" /success:enable /failure:enable +auditpol /set /subcategory:"디렉터리 서비스 액세스" /failure:enable +auditpol /set /subcategory:"로그온" /success:enable /failure:enable +auditpol /set /subcategory:"로그오프" /success:enable /failure:enable +auditpol /set /subcategory:"정책 변경" /success:enable /failure:enable + +# GPO: 로컬 보안 정책 > 로컬 정책 > 감사 정책 +``` + +--- + +### W-41: NTP 및 시각 동기화 설정 (중) +**점검:** +```powershell +# NTP 동기화 상태 확인 +w32tm /query /status +w32tm /query /configuration + +# NTP 서버 설정 확인 +w32tm /dumpreg /subkey:parameters + +# 시간 서비스 상태 +Get-Service -Name "W32Time" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Windows Time 서비스 활성화 +Set-Service -Name "W32Time" -StartupType Automatic +Start-Service -Name "W32Time" + +# 내부 NTP 서버와 동기화 설정 +w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.server.ip" /update +w32tm /resync + +# 동기화 시간차 확인 +w32tm /stripchart /dataonly /computer:"ntp.server.ip" +``` + +--- + +### W-42: 이벤트 로그 관리 설정 (하) +**점검:** +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes, OverflowAction, MinimumRetentionDays | Format-Table + +# 레지스트리에서 직접 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System" /v MaxSize +``` +**조치:** +```powershell +# 이벤트 로그 최대 크기 10240KB(10MB) 이상 설정 +Limit-EventLog -LogName Application -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName Security -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName System -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 + +# 레지스트리 직접 설정 (바이트 단위: 10485760 = 10MB) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize /t REG_DWORD /d 10485760 /f +``` + +--- + +### W-43: 이벤트 로그 파일 접근 통제 설정 (중) +**점검:** +```powershell +# 시스템 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\config" +# Everyone 권한이 있으면 취약 + +# IIS 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\LogFiles" 2>$null +``` +**조치:** +```powershell +# 로그 디렉터리에서 Everyone 권한 제거 +icacls "C:\Windows\System32\config" /remove Everyone /T +icacls "C:\Windows\System32\LogFiles" /remove Everyone /T + +# Administrators, SYSTEM만 접근 가능하도록 설정 +``` + +--- + +## 5. 보안 관리 + +### W-44: 원격으로 액세스할 수 있는 레지스트리 경로 (상) +**점검:** +```powershell +# Remote Registry 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Remote Registry 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-45: 백신 프로그램 설치 (상) +**점검:** +```powershell +# Windows Defender 설치 및 활성화 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusEnabled, RealTimeProtectionEnabled + +# 설치된 백신 프로그램 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState + +# 프로그램 목록에서 백신 확인 +Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "antivirus|백신|V3|알약|Kaspersky|Norton|McAfee|Symantec" } | + Select-Object Name, Version +``` +**조치:** +```powershell +# Windows Defender 활성화 (비활성화된 경우) +Set-MpPreference -DisableRealtimeMonitoring $false + +# 백신이 설치되지 않은 경우 조직 정책에 따라 백신 프로그램 설치 +# Windows Defender는 Windows Server 2016 이상 기본 탑재 +Install-WindowsFeature -Name Windows-Defender -ErrorAction SilentlyContinue +``` + +--- + +### W-46: SAM 파일 접근 통제 설정 (상) +**점검:** +```powershell +# SAM 파일 접근 권한 확인 +icacls "C:\Windows\System32\config\SAM" +# Administrator, SYSTEM 외 다른 그룹/사용자 권한이 있으면 취약 +``` +**조치:** +```powershell +# SAM 파일 권한 설정 (Administrator, SYSTEM만 접근) +icacls "C:\Windows\System32\config\SAM" /inheritance:r +icacls "C:\Windows\System32\config\SAM" /grant "BUILTIN\Administrators:(F)" +icacls "C:\Windows\System32\config\SAM" /grant "NT AUTHORITY\SYSTEM:(F)" +``` + +--- + +### W-47: 화면보호기 설정 (하) +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +# ScreenSaveActive=1, ScreenSaveTimeOut<=600(10분), ScreenSaverIsSecure=1 이면 양호 +``` +**조치:** +```powershell +# 화면보호기 활성화 (대기 시간 10분, 암호 사용) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "C:\Windows\System32\scrnsave.scr" /f + +# GPO 일괄 적용: +# 사용자 구성 > 관리 템플릿 > 제어판 > 개인 설정 +# "화면 보호기 사용" = 사용 +# "화면 보호기 시간 제한" = 600초 +# "화면 보호기 암호로 보호" = 사용 +``` + +--- + +### W-48: 로그온하지 않고 시스템 종료 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon +# 값이 0이면 양호 +``` +**조치:** +```powershell +# 로그온 없이 시스템 종료 차단 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 종료: 로그온하지 않고 시스템 종료 허용" = 사용 안 함 +``` + +--- + +### W-49: 원격 시스템에서 강제로 시스템 종료 (상) +**점검:** +```powershell +# 원격 시스템 종료 권한 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeRemoteShutdownPrivilege" C:\secpol_tmp.cfg +# Administrators만 있으면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "원격 시스템에서 강제로 시스템 종료" 정책에 Administrators 외 다른 계정/그룹 제거 +``` + +--- + +### W-50: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail +# 값이 0이면 양호 (사용 안 함), 1이면 취약 + +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "CrashOnAuditFail" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 (사용 안 함) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료" = 사용 안 함 +``` + +--- + +### W-51: SAM 계정과 공유의 익명 열거 허용 안 함 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM +# RestrictAnonymous=1, RestrictAnonymousSAM=1 이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함" = 사용 +# "네트워크 액세스: SAM 계정의 익명 열거 허용 안 함" = 사용 + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-52: Autologon 기능 제어 (상) +**점검:** +```powershell +# AutoAdminLogon 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +# 값이 0이거나 존재하지 않으면 양호 + +# DefaultPassword 존재 여부 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword 2>$null +``` +**조치:** +```powershell +# Autologon 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f + +# DefaultPassword 제거 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f 2>$null +``` + +--- + +### W-53: 이동식 미디어 포맷 및 꺼내기 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD +# 값이 0(Administrators만)이면 양호 +``` +**조치:** +```powershell +# Administrators에게만 이동식 미디어 포맷/꺼내기 허용 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 이동식 미디어 포맷 및 꺼내기 허용" = Administrators +``` + +--- + +### W-54: DoS 공격 방어 레지스트리 설정 (중) +**점검:** +```powershell +# TCP/IP 스택 강화 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand 2>$null +# SynAttackProtect>=1, EnableDeadGWDetect=0, KeepAliveTime=300000, NoNameReleaseOnDemand=1 이면 양호 +``` +**조치:** +```powershell +# DoS 방어 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand /t REG_DWORD /d 1 /f + +# 주의: 잘못된 값 설정 시 OS 재설치 필요할 수 있음 +``` + +--- + +### W-55: 사용자가 프린터 드라이버를 설치할 수 없게 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers 2>$null +# 값이 1이면 양호 (사용자 설치 차단) +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 사용자가 프린터 드라이버를 설치할 수 없게 함" = 사용 +``` + +--- + +### W-56: SMB 세션 중단 관리 설정 (중) +**점검:** +```powershell +# SMB 세션 유휴 시간 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect 2>$null +# 값이 15 이하이면 양호 + +# 로그온 시간 만료 시 연결 끊기 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff 2>$null +# 값이 1이면 양호 +``` +**조치:** +```powershell +# SMB 유휴 세션 타임아웃 15분 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect /t REG_DWORD /d 15 /f + +# 로그온 시간 만료 시 연결 끊기 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기" = 사용 +# "Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간" = 15분 +``` + +--- + +### W-57: 로그온 시 경고 메시지 설정 (하) +**점검:** +```powershell +# 로그온 경고 메시지 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText +# 둘 다 값이 설정되어 있으면 양호 +``` +**조치:** +```powershell +# 로그온 경고 메시지 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption /t REG_SZ /d "경고" /f +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText /t REG_SZ /d "이 시스템은 인가된 사용자만 접근할 수 있습니다. 비인가 접근 시도 시 법적 처벌을 받을 수 있습니다." /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목" = 경고 제목 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트" = 경고 내용 +``` + +--- + +### W-58: 사용자별 홈 디렉터리 권한 설정 (중) +**점검:** +```powershell +# 사용자 홈 디렉터리 권한 확인 +Get-ChildItem "C:\Users" -Directory | ForEach-Object { + $acl = Get-Acl $_.FullName + $everyoneAccess = $acl.Access | Where-Object { $_.IdentityReference -like "*Everyone*" } + if ($everyoneAccess) { + [PSCustomObject]@{ + Directory = $_.Name + Everyone = ($everyoneAccess | ForEach-Object { $_.FileSystemRights }) -join ", " + } + } +} +``` +**조치:** +```powershell +# 홈 디렉터리에서 Everyone 권한 제거 (All Users, Default User 제외) +Get-ChildItem "C:\Users" -Directory | Where-Object { + $_.Name -notin @("All Users","Default User","Default","Public") +} | ForEach-Object { + icacls $_.FullName /remove Everyone /T +} +``` + +--- + +### W-59: LAN Manager 인증 수준 (중) +**점검:** +```powershell +# LAN Manager 인증 수준 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel +# 값이 5이면 양호 (NTLMv2 응답만 보냄, LM 및 NTLM 거부) +# 최소 3 이상 권장 +``` +**조치:** +```powershell +# NTLMv2 응답만 보내도록 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 보안: LAN Manager 인증 수준" = "NTLMv2 응답만 보내기/LM 및 NTLM 거부" +``` + +--- + +### W-60: 보안 채널 데이터 디지털 암호화 또는 서명 (중) +**점검:** +```powershell +# 보안 채널 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel 2>$null +# 세 값 모두 1이면 양호 +``` +**조치:** +```powershell +# 보안 채널 데이터 암호화/서명 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상)" = 사용 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우)" = 사용 +# "도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우)" = 사용 +``` + +--- + +### W-61: 파일 및 디렉토리 보호 (중) +**점검:** +```powershell +# 파일 시스템 유형 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size | Format-Table + +# CMD 확인 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT 파일 시스템을 NTFS로 변환 +# convert <드라이브명>: /fs:ntfs +# 예: convert F: /fs:ntfs + +# 주의: 변환은 비가역적이며 초기 설치 시 NTFS 선택 권장 +# 기존 FAT에서 변환 시 Default ACL이 적용되지 않을 수 있음 +``` + +--- + +### W-62: 시작 프로그램 목록 분석 (중) +**점검:** +```powershell +# 시작 프로그램 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 2>$null + +# 시작 폴더 확인 +Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue +Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue + +# WMI 시작 프로그램 목록 +Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table -AutoSize +``` +**조치:** +```powershell +# 불필요한 시작 프로그램 제거 (레지스트리) +reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f +reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f + +# msconfig 실행 (Windows 2008 이하) +# 시작 프로그램 탭에서 불필요한 항목 체크 해제 +``` + +--- + +### W-63: 도메인 컨트롤러-사용자의 시간 동기화 (중) +**점검:** +```powershell +# Kerberos 최대 허용 오차 확인 (도메인 컨트롤러) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MaxClockSkew" C:\secpol_tmp.cfg +# 값이 5 이하이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force + +# 현재 시간 동기화 상태 +w32tm /query /status +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +# "컴퓨터 시계 동기화 최대 허용 오차" = 5분 + +# 시간 동기화 강제 수행 +w32tm /resync /force +``` + +--- + +### W-64: 윈도우 방화벽 설정 (중) +**점검:** +```powershell +# Windows 방화벽 프로필 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled | Format-Table + +# 방화벽 규칙 요약 +Get-NetFirewallProfile | ForEach-Object { + $profile = $_.Name + $enabled = $_.Enabled + [PSCustomObject]@{ + Profile = $profile + Enabled = $enabled + InboundDefault = $_.DefaultInboundAction + OutboundDefault = $_.DefaultOutboundAction + } +} | Format-Table + +# netsh 명령 +netsh advfirewall show allprofiles +``` +**조치:** +```powershell +# Windows 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True + +# netsh 명령 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정 또는 해제 +# 모든 프로필에 대해 "사용" 설정 +``` diff --git a/skills/kesekit-fix/scripts/robot-security/cert-and-protocol.md b/skills/kesekit-fix/scripts/robot-security/cert-and-protocol.md new file mode 100644 index 0000000..259a9d3 --- /dev/null +++ b/skills/kesekit-fix/scripts/robot-security/cert-and-protocol.md @@ -0,0 +1,96 @@ +# Certificate & Protocol Security + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: IA-04, ER-01 + +--- + +## 1. OpenSSL Certificate Inspection (IA-04) + +```bash +# 인증서 내용 확인 명령어 +openssl x509 -in server.crt -text -noout +``` + +--- + +## 2. Key File Permission Hardening (IA-04) + +```bash +# 개인키 접근 권한 설정 +chown robot-service:robot-service /etc/robot/keys/device.key +chmod 600 /etc/robot/keys/device.key # 파일 소유자만 접근 가능 +``` + +--- + +## 3. OPC UA Security Configuration (IA-04) + +### 3.1 Certificate Validation + +```ini +# server.conf (OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +### 3.2 Certificate Revocation Check + +```ini +# server.conf (OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +--- + +## 4. TLS Client Certificate Verification - Python (IA-04) + +```python +import ssl, socket + +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 + +with socket.create_connection(("server.com", 443)) as sock: + with context.wrap_socket(sock, server_hostname="server.com") as ssock: + print("TLS Established:", ssock.version()) +``` + +--- + +## 5. Crypto Algorithm Requirements (IA-04) + +| Category | Recommended | Insufficient | +|---|---|---| +| Key algorithm | RSA >= 2048bit or ECC P-256+ | RSA 1024bit or below, ECC P-192 or below | +| Hash algorithm | SHA-256+ (SHA-2/SHA-3 family) | SHA-1, MD5 | +| TLS protocol | TLS 1.2+ (recommended: TLS 1.3) | TLS 1.0 / 1.1 | + +--- + +## 6. Audit Log API Access (ER-01) + +```http +GET /api/audit/logs +Authorization: Bearer + +HTTP/1.1 200 OK +{ + "entries": [...], + "integrity": "sha256:f45a..." +} +``` + +--- + +## 7. Platform-specific Certificate ACL Examples (IA-04) + +| Platform | Certificate Store | +|---|---| +| General server / cloud | DB table | +| OPC UA | /pki/trusted, /pki/rejected folders | +| MQTT mTLS | CA DB, allowed client certificate list | +| Robot PKI | KV DB, HSM integration | diff --git a/skills/kesekit-fix/scripts/robot-security/firewall-hardening.md b/skills/kesekit-fix/scripts/robot-security/firewall-hardening.md new file mode 100644 index 0000000..8d8820f --- /dev/null +++ b/skills/kesekit-fix/scripts/robot-security/firewall-hardening.md @@ -0,0 +1,106 @@ +# Firewall & Network Hardening + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: DFR-02, RA-01, RA-08 + +--- + +## 1. Host Firewall (iptables) + +### 1.1 MQTT / HTTPS Only (DFR-02 Protocol Filtering) + +```bash +# MQTT 및 HTTPS 외의 포트 차단 +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.2 SSH + HTTPS Only (RA-01 DoS Prevention) + +```bash +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.3 Unnecessary Port Blocking (RA-08 Service Restriction) + +```bash +# 외부 포트 스캔 (TCP 포트 확인) +nmap -sS 192.168.0.10 + +# 불필요한 포트(예: FTP 21, Telnet 23, TFTP 69) 차단 +sudo iptables -A INPUT -p tcp --dport 21 -j DROP +sudo iptables -A INPUT -p tcp --dport 23 -j DROP +sudo iptables -A INPUT -p udp --dport 69 -j DROP +``` + +--- + +## 2. Service Hardening (RA-08) + +```bash +# 현재 활성화된 포트 및 프로세스 확인 +sudo ss -tulnp +sudo netstat -tulnp + +# 서비스 상태 확인 및 비활성화 +sudo systemctl status telnet +sudo systemctl disable telnet +sudo systemctl stop telnet +``` + +--- + +## 3. VLAN Network Segmentation (RA-01 L2) + +Control network and sensor network separation via VLAN. + +```bash +# 제어 망 (VLAN ID 10) +sudo ip link add link eth0 name eth0.10 type vlan id 10 +# 센서 망 (VLAN ID 20) +sudo ip link add link eth0 name eth0.20 type vlan id 20 + +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +``` + +--- + +## 4. sysctl Network Tuning (RA-01) + +```bash +sudo sysctl -w net.core.somaxconn=128 +sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +ulimit -n 1024 +``` + +--- + +## 5. Nginx Rate Limiting (RA-01) + +```nginx +# /etc/nginx/nginx.conf +http { + limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; + server { + listen 443 ssl; + server_name example.com; + location / { + limit_req zone=req_limit_per_ip burst=5 nodelay; + limit_conn conn_limit_per_ip 10; + } + } +} +``` + +--- + +## 6. Suricata IDS Rule (RA-01 L2 DoS Detection) + +```yaml +alert tcp any any -> $HOME_NET any (msg:"TCP SYN Flood"; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +``` diff --git a/skills/kesekit-fix/scripts/robot-security/resource-management.md b/skills/kesekit-fix/scripts/robot-security/resource-management.md new file mode 100644 index 0000000..fd35dce --- /dev/null +++ b/skills/kesekit-fix/scripts/robot-security/resource-management.md @@ -0,0 +1,96 @@ +# Resource Management & Monitoring + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: RA-02, RA-03 + +--- + +## 1. cgroups - Security Agent Resource Limits (RA-02) + +Restrict CPU and memory usage for security processes so they do not interfere with real-time robot control. + +```bash +# cgroup 생성 (cpu + memory) +sudo cgcreate -g cpu,memory:/robot_security + +# CPU 할당 제한 (20000us = 20% of 1 core at default 100000us period) +echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us + +# 메모리 제한 (256MB) +echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes + +# 실행 중인 보안 에이전트를 cgroup에 할당 +sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +``` + +--- + +## 2. OpenSSL Hardware Acceleration Check (RA-02) + +Offload crypto operations to hardware to reduce CPU overhead. + +```bash +openssl engine -t +# Expected output: +# (dynamic) Dynamic engine loading support +# (rdrand) Intel RDRAND engine +# (aesni) Intel AES-NI engine +``` + +--- + +## 3. logrotate Configuration (RA-02) + +Prevent audit/operational logs from exhausting disk space. + +```bash +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { + size 50M + rotate 5 + compress + missingok + notifempty +} +``` + +--- + +## 4. System Resource Monitoring (RA-03) + +Dashboard or CLI-based monitoring of CPU, memory, disk, and network utilization. The robot system should provide a user interface for operators to view resource status in real-time. + +Key resource metrics to monitor: +- CPU usage per core / per process +- Memory (RSS / swap) usage +- Disk I/O and capacity +- Network interface throughput and error rates + +--- + +## 5. ROS Publisher Rate Limiting (RA-01 L2) + +Limit sensor data publish rate to prevent communication overload. + +```cpp +ros::Publisher pub = nh.advertise("sensor_data", 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { + std_msgs::String msg; + msg.data = "sensor data"; + pub.publish(msg); + loop_rate.sleep(); +} +``` + +--- + +## 6. ROS2 QoS Security Profile (RA-01 L2) + +```yaml +QoSProfile: + reliability: RELIABLE + durability: TRANSIENT_LOCAL + history: KEEP_LAST + depth: 10 +``` diff --git a/skills/kesekit-fix/scripts/robot-security/sbom-audit.md b/skills/kesekit-fix/scripts/robot-security/sbom-audit.md new file mode 100644 index 0000000..1b1387f --- /dev/null +++ b/skills/kesekit-fix/scripts/robot-security/sbom-audit.md @@ -0,0 +1,84 @@ +# SBOM & Supply Chain Audit + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: SC-05 + +--- + +## 1. SBOM Generation with Syft (SC-05) + +Generate a Software Bill of Materials from source code or container images using Anchore Syft. + +```bash +# Syft를 통한 SBOM 생성 (JSON format) +syft <소스코드 경로> -o json > sbom.json +``` + +--- + +## 2. Vulnerability Scanning with Grype (SC-05) + +Scan the generated SBOM for known vulnerabilities (CVEs). + +```bash +# Grype를 통한 취약점 식별 +grype sbom://sbom.json +``` + +--- + +## 3. Package Manager Built-in Audit Commands (SC-05) + +Use built-in security features of each package manager to analyze declared dependencies and automatically scan for known vulnerabilities. + +### Node.js (NPM) + +```bash +npm audit +``` + +### Python (pip) + +```bash +pip-audit +``` + +### Java (Maven) + +```bash +mvn dependency-check:check +``` + +### .NET (NuGet) + +```bash +dotnet list package --vulnerable +``` + +### Rust (Cargo) + +```bash +cargo audit +``` + +--- + +## 4. CI/CD Pipeline Integration (SC-05) + +Integrate vulnerability scanning into CI/CD pipelines (GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins, etc.) to automatically detect vulnerabilities before deployment. + +### Vulnerability Response Record Fields + +| Field | Description | +|---|---| +| CVE ID | 취약점 식별자 | +| 구성요소 | 영향받는 컴포넌트(이름/버전) | +| 기술적 위험 | 공개 PoC/익스플로잇 존재 여부, CVSS 점수 | +| 비즈니스 영향 | 영향을 받는 서비스/데이터/운영 영향 | +| EoS 여부 | 해당 구성요소의 지원상태 | +| 우선 순위 | P0/P1/P2 또는 High/Medium/Low | +| 대응방안 | 패치/업그레이드/가상패치/격리 등 | +| SLA | 목표 기간 | +| 담당자 및 일정 | 책임부서, 담당자, 완료예정일 | +| 검증 방법 | 재스캔, 기능/회귀 테스트 결과 링크 | +| 상태 | 계획/진행/완료/예외(승인) | diff --git a/skills/kesekit-fix/scripts/space-security/access-control-fix.md b/skills/kesekit-fix/scripts/space-security/access-control-fix.md new file mode 100644 index 0000000..6082612 --- /dev/null +++ b/skills/kesekit-fix/scripts/space-security/access-control-fix.md @@ -0,0 +1,248 @@ +# Access Control & Authentication — Fix Scripts + +> Hardening scripts and configurations for AC-01~AC-12, IA-01~IA-02 + +## AC-01: Access Control Policy + +### Network ACL +```bash +# Allow only Jump Server IP for SSH access +iptables -A INPUT -s -p tcp --dport 22 -j ACCEPT +iptables -A INPUT -p tcp --dport 22 -j DROP + +# Block plaintext protocols (Telnet, FTP) +iptables -A INPUT -p tcp --dport 23 -j DROP # Telnet +iptables -A INPUT -p tcp --dport 21 -j DROP # FTP +iptables -A OUTPUT -p tcp --dport 23 -j DROP +iptables -A OUTPUT -p tcp --dport 21 -j DROP +``` + +### Account Cleanup +```bash +# Find and disable default accounts +for user in admin guest test demo; do + id "$user" 2>/dev/null && usermod -L "$user" && echo "Locked: $user" +done + +# List accounts with no password expiry +chage -l | grep "Password expires" + +# Force password change for all users +for user in $(awk -F: '$3>=1000{print $1}' /etc/passwd); do + chage -M 90 "$user" # Max 90 days +done +``` + +### Thresholds +| Item | Value | Standard | +|------|-------|----------| +| Account deletion on termination | Same day | KISA | +| Full access review cycle | Annual (minimum) | CMMC | +| Allowed protocols | SSH, SFTP, VPN only | K-RMF | + +--- + +## AC-03: Privileged Access + +### Linux — SELinux/AppArmor +```bash +# Check SELinux status +getenforce + +# Enable SELinux enforcing mode +setenforce 1 +sed -i 's/SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config + +# Restrict admin to system management paths only (AppArmor) +# /etc/apparmor.d/usr.sbin.admin-profile +# deny /usr/bin/firefox rx, +# deny /usr/bin/chrome rx, +``` + +### Windows — AppLocker +```powershell +# Enable AppLocker via GPO +# Computer Configuration > Windows Settings > Security Settings > Application Control Policies > AppLocker +# Create rule: Allow only management tools (MMC, PowerShell) for admin profiles +# Block all other EXE, DLL for privileged accounts +``` + +### PAM (Privileged Access Management) +```bash +# Restrict admin IP + MAC address access +# /etc/hosts.allow +sshd: 10.0.1.0/24 +# /etc/hosts.deny +sshd: ALL +``` + +--- + +## AC-06: Failed Login Attempts + +### Linux — PAM +```bash +# /etc/pam.d/system-auth (or common-auth) +auth required pam_tally2.so deny=5 unlock_time=1800 onerr=fail + +# Check locked accounts +pam_tally2 --user= + +# Reset failed count +pam_tally2 --user= --reset +``` + +### Windows +``` +secpol.msc → Account Policies → Account Lockout Policy +→ Account lockout threshold: 5 +→ Account lockout duration: 30 minutes +→ Reset account lockout counter after: 30 minutes +``` + +### Thresholds +| Target | Max Attempts | Lockout Duration | Standard | +|--------|:-----------:|:----------------:|----------| +| Server | 3 | 30 min | K-RMF | +| User account | 5 | 15-60 min | CMMC | +| Mobile device | 5-10 (then wipe) | - | KISA | +| Login delay | 5-10 sec after failure | - | Best practice | + +--- + +## AC-07: Session Lock & Termination + +### Linux +```bash +# Auto-logout after 10 min inactivity +echo "TMOUT=600" >> /etc/profile +echo "readonly TMOUT" >> /etc/profile +echo "export TMOUT" >> /etc/profile +``` + +### Windows +``` +# Screen saver with password after 10 min +GPO: User Configuration > Administrative Templates > Control Panel > Personalization +→ Enable screen saver: Enabled +→ Screen saver timeout: 600 seconds +→ Password protect the screen saver: Enabled +``` + +### Web Application (JSP) +```xml + + + 10 + + + + + 600 + +``` + +### Session Timeout by Risk +| Risk Level | Timeout | Example | +|-----------|:-------:|---------| +| Critical functions | 2-5 min | Satellite command, orbit control | +| Standard operations | 10-15 min | Ground station monitoring | +| Low-risk | 15-30 min | Reporting, documentation | +| Exception | No timeout (approved) | 24/7 NOC/SOC dashboards | + +--- + +## AC-08: Remote Access Control + +### VPN + MFA +```bash +# OpenVPN with MFA (TOTP) +# /etc/openvpn/server.conf +plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn +verify-client-cert require + +# Require all traffic through VPN (no split tunneling) +push "redirect-gateway def1" +``` + +--- + +## AC-09: Wireless Access + +### Wi-Fi Hardening +```bash +# hostapd.conf — WPA2-Enterprise +wpa=2 +wpa_key_mgmt=WPA-EAP +rsn_pairwise=CCMP +ieee8021x=1 + +# Hide SSID +ignore_broadcast_ssid=1 + +# MAC filtering +macaddr_acl=1 +accept_mac_file=/etc/hostapd/accept +``` + +### WIPS Deployment +- Deploy Wireless IPS sensors in antenna zones and ground station facilities +- Monitor for rogue APs and unauthorized wireless connections +- Disable unused Bluetooth/Wi-Fi on all operational devices + +--- + +## IA-01: Identification & Authentication + +### Password Policy +```bash +# /etc/security/pwquality.conf +minlen = 8 +minclass = 2 # At least 2 character types +maxrepeat = 3 +dcredit = -1 # Require digit +ucredit = -1 # Require uppercase +lcredit = -1 # Require lowercase +ocredit = -1 # Require special char + +# /etc/login.defs +PASS_MAX_DAYS 90 +PASS_MIN_DAYS 1 +PASS_WARN_AGE 14 +``` + +### Windows +``` +secpol.msc → Account Policies → Password Policy +→ Minimum password length: 8 +→ Password must meet complexity requirements: Enabled +→ Maximum password age: 90 days +→ Enforce password history: 5 passwords remembered +``` + +### Password Storage +- **NEVER** store plaintext or reversibly encrypted passwords +- Use one-way hash: **SHA-256+** with salt +- Transmit via **TLS encrypted channel** only + +--- + +## IA-02: Multi-Factor Authentication + +### MFA Methods (combine 2+) +| Factor | Methods | +|--------|---------| +| Knowledge | Password | +| Possession | PKI certificate, OTP (TOTP 30s/60s), smart card, hardware token | +| Biometric | Fingerprint, iris, face | +| Supplemental | IP address, MAC address, device serial, geolocation | + +### Anti-Replay +``` +# TOTP configuration +- Token validity: 30 or 60 seconds +- Use Kerberos ticket-based authentication +- Include Nonce (random number) per request +- One-time-use tokens (discard after use) +- High-risk accounts: U2F/FIDO2, smart card, OTP hardware token +``` diff --git a/skills/kesekit-fix/scripts/space-security/operations-fix.md b/skills/kesekit-fix/scripts/space-security/operations-fix.md new file mode 100644 index 0000000..11fab62 --- /dev/null +++ b/skills/kesekit-fix/scripts/space-security/operations-fix.md @@ -0,0 +1,174 @@ +# Operations & Incident Response — Fix Scripts + +> Hardening for SO-01~SO-09, IR-01~IR-02 + +## SO-02: Audit Logging + +### Log Types (all required) +| Type | Content | +|------|---------| +| System event | Start/stop, status, error codes | +| Network event | IP assignment, traffic on key segments | +| Security system | Admin access, policy create/change/delete | +| Audit | Login/logout, auth success/failure, file access | + +### Log Protection +```bash +# rsyslog — forward to central SIEM +*.* @@siem-server:514 + +# Append-only log files +chattr +a /var/log/secure +chattr +a /var/log/audit/audit.log + +# Minimum retention: 1 year +``` + +### Tamper-Proof Storage +- CD-ROM, DVD-R, WORM media for critical audit logs +- If writable media: store MAC value / digital signature separately +- Real-time collection to SIEM / central log server + +--- + +## SO-03: Time Synchronization + +### Linux NTP +```bash +# /etc/ntp.conf or /etc/chrony.conf +server iburst +driftfile /var/lib/chrony/drift + +# Verify sync +chronyc tracking +chronyc sources -v +``` + +### Windows NTP +```cmd +REM Check current sync +w32tm /dumpreg /subkey:parameters + +REM Set internal NTP server +w32tm /config /syncfromflags:manual /manualpeerlist: /update + +REM Force resync +w32tm /resync + +REM Check time difference +w32tm /stripchart /dataonly /computer: +``` + +--- + +## SO-04: Portable Storage Security + +### USB Control +```bash +# Disable USB storage (Linux) +echo "install usb-storage /bin/true" >> /etc/modprobe.d/disable-usb.conf +echo "blacklist usb-storage" >> /etc/modprobe.d/disable-usb.conf +``` + +### Secure Disposal Methods +| Method | Description | Recommended | +|--------|-------------|:-----------:| +| Physical destruction | Shredder, melting, incineration | For classified | +| Degausser | Magnetic field erasure | For HDD | +| Overwrite | Random/0/1 values, **3+ passes** | For reusable media | +| Crypto-erase | Encrypt → delete key → overwrite | For SSD | + +### Backup Encryption +| Type | Algorithms | +|------|-----------| +| Symmetric | SEED, ARIA-128/192/256, AES-128/192/256, HIGHT, LEA | +| Asymmetric | RSAES-OAEP | +| Hash | SHA-256/384/512 | + +--- + +## SO-05: Configuration Management + +### Baseline Items +``` +Hardware: Model, serial, firmware version, physical location +Software: OS version, installed packages, patch level +Firmware: Version, checksum, update history +Settings: Registry values, account permissions, file/directory permissions, network config +``` + +### Drift Detection +```bash +# AIDE (Advanced Intrusion Detection Environment) +aide --init +aide --check + +# Monthly baseline comparison +``` + +--- + +## IR-02: Incident Reporting + +### Korea (ICT Infrastructure Protection Act Art.48-3) +``` +Deadline: Within 24 hours of discovery +Contact: + Phone: 118 (24/7) + Online: KrCERT → "침해사고 신고" + Email: certgen@krcert.or.kr +``` + +### EU NIS2 Reporting Timeline +| Stage | Deadline | Content | +|-------|----------|---------| +| Early warning | **24 hours** | Indicate if unlawful/malicious | +| Incident notification | **72 hours** | Initial assessment, IoC | +| Interim report | On CSIRT request | Status update | +| Final report | **1 month** after 72h notification | Root cause, mitigation | + +### NIS2 Significant Incident Criteria +- Direct damage > **EUR 500,000** or **5%** of prior year revenue +- Cloud: service unavailable > **30 minutes** +- Data center: availability limited > **1 hour** + +### NIS2 Penalties +| Entity Type | Maximum Fine | +|-------------|-------------| +| Essential | **2%** annual revenue or **EUR 10,000,000** (whichever higher) | +| Important | **1.4%** annual revenue or **EUR 7,000,000** (whichever higher) | + +### US DFARS 252.204-7012 +- Report within **72 hours** to DC3 DCISE +- Preserve system images and network data for **90 days** +- Require DoD **Medium Assurance Certificate** + +--- + +## Supply Chain Fix — SBOM & Integrity + +### SBOM Standards +``` +Formats: SPDX, CycloneDX +Content: All open-source/commercial SW components, versions, licenses +CVE Scanning: Periodic (at least quarterly) +On new vulnerability: SBOM-based impact identification +``` + +### Integrity Verification +```bash +# Hash verification for SW updates +sha256sum firmware-update.bin > firmware-update.sha256 +sha256sum -c firmware-update.sha256 + +# Digital signature verification +gpg --verify firmware-update.bin.sig firmware-update.bin +``` + +### CI/CD Pipeline Security +- Verify all IDE plugins and CI/CD tools before use +- Scan build artifacts for malware before deployment +- Maintain internal library repository behind firewall +- Block unverified Docker Hub images +- Remove test/debug accounts before production deployment +- Check for hardcoded credentials (MASTER_KEY, API keys, passwords) diff --git a/skills/kesekit-fix/scripts/space-security/system-security-fix.md b/skills/kesekit-fix/scripts/space-security/system-security-fix.md new file mode 100644 index 0000000..1c6687b --- /dev/null +++ b/skills/kesekit-fix/scripts/space-security/system-security-fix.md @@ -0,0 +1,198 @@ +# System & Communication Security — Fix Scripts + +> Hardening for SC-01~SC-07, SI-01~SI-04 + +## SC-01: Boundary Protection + +### Network Segmentation +``` +Zone Layout: +┌──────────────────────────────────────┐ +│ DMZ │ Web Server, Mail │ +├───────────────┼──────────────────────┤ +│ Operations │ Servers, Security │ +├───────────────┼──────────────────────┤ +│ Development │ Dev/Test servers │ +├───────────────┼──────────────────────┤ +│ External │ Contractors, Public │ +└──────────────────────────────────────┘ + +# Firewall default deny +iptables -P INPUT DROP +iptables -P FORWARD DROP +iptables -P OUTPUT DROP +# Then add specific ALLOW rules +``` + +### Satellite Network Isolation +- Physically separate: satellite control network / operations network / internet network +- Use **one-way transfer device** for control → satellite communication path +- VDI virtualization for logical separation where physical not feasible + +--- + +## SC-03: Stored & Transmitted Information Security + +### Encryption Standards +| Use Case | Algorithm | Key Size | Standard | +|----------|-----------|:--------:|----------| +| Data at rest | AES-256 / ARIA-256 | 256-bit | CCSDS mandatory | +| Legacy systems | AES-128 (minimum) | 128-bit | CCSDS allowed | +| Integrity | HMAC-SHA-256 | - | CCSDS | +| Digital signature | RSA-4096+ | 4096-bit | CCSDS recommended | +| Hashing | SHA-256/384/512 | - | All standards | + +### Prohibited Algorithms +``` +BANNED: TDEA (3DES), MD5, SHA-1 (new systems) +``` + +### Korean Domestic Algorithms +``` +Symmetric: SEED, HIGHT, ARIA-128/192/256, LEA-128/192/256 +Public key: RSAES-OAEP (2048-bit minimum) +Hash: SHA-224/256/384/512 +``` + +--- + +## SC-04: Communication Security + +### Firewall Policy +```bash +# Default Deny → Exception Allow +iptables -P INPUT DROP +iptables -P FORWARD DROP + +# Define allowed traffic (Source, Dest, Port, Protocol, Direction) +iptables -A INPUT -s 10.0.1.0/24 -d 10.0.2.0/24 -p tcp --dport 443 -j ACCEPT + +# Block split tunneling on VPN +# OpenVPN: push "redirect-gateway def1" +# Block NAT/port forwarding from external to internal (principle) +``` + +### Session ID Security +| Requirement | Setting | +|-------------|---------| +| Session ID length | Minimum **128 bits** | +| Algorithm | Cryptographically secure PRNG | +| URL exposure | **Prohibited** (no URL rewrite) | +| On login | Destroy old session → issue new ID | +| Timeout (critical) | **2-5 minutes** | +| Timeout (standard) | **15-30 minutes** | + +### TLS Configuration +```bash +# nginx.conf - enforce TLS 1.2+ +ssl_protocols TLSv1.2 TLSv1.3; +ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; +ssl_prefer_server_ciphers on; + +# New systems: TLS 1.3+ recommended +``` + +--- + +## SC-05: Encryption Key Lifecycle + +### Key Management (4 phases) +``` +Phase 1: Preparation → Key generation (secure RNG), distribution +Phase 2: Operation → Active use, rotation schedule +Phase 3: Suspension → Inactive, archived, recoverable +Phase 4: Destruction → Secure deletion, audit trail +``` + +### Rules +- **NEVER** store keys in source code as plaintext +- Minimum access, all access logged +- Use HSM (Hardware Security Module) for critical keys +- Satellite communication keys: follow CCSDS 352.0-B-2 + +--- + +## SC-07: Mobile Code & VoIP + +### Mobile Code Control +```powershell +# Windows - Disable ActiveX, Java Runtime in operational environment +# GPO: Computer Configuration > Administrative Templates > Windows Components > Internet Explorer > Security +# → Disable "Run ActiveX controls and plug-ins": Enabled + +# PowerShell execution logging +Set-ExecutionPolicy AllSigned +# Enable script block logging in GPO +``` + +### VoIP Control +```bash +# Block VoIP protocols by default +iptables -A INPUT -p udp --dport 5060 -j DROP # SIP +iptables -A INPUT -p udp --dport 5004 -j DROP # RTP +iptables -A INPUT -p udp --dport 5005 -j DROP # RTCP + +# If VoIP allowed (internal only): enforce SRTP +``` + +--- + +## SI-01: Vulnerability Scanning + +### Scan Schedule +| Asset Criticality | Frequency | +|-------------------|-----------| +| Critical (satellite control) | Quarterly | +| High (ground station) | Semi-annual | +| Standard | Annual | +| On new vulnerability disclosure | Immediate | + +### Reference Sources +| Source | URL/Description | +|--------|----------------| +| KISA KrCERT/CC | Korean vulnerability alerts | +| NCSC | National cyber threat analysis | +| CISA | US-CERT alerts, ICS advisories | +| NIST NVD | CVE database, CVSS scores | + +--- + +## SI-02: Malicious Code Prevention +```bash +# Auto-update AV signatures (daily minimum) +# Disable USB autorun +echo "install usb-storage /bin/true" >> /etc/modprobe.d/disable-usb.conf + +# Block P2P, webhard applications +iptables -A OUTPUT -p tcp --dport 6881:6889 -j DROP # BitTorrent +``` + +--- + +## GSaaS-Specific Security Solutions + +### Anti-Jamming +| Technique | Description | +|-----------|-------------| +| Frequency Hopping | Rapidly switch frequencies to avoid jamming | +| Spread Spectrum | Spread signal across wide bandwidth | +| LPI Waveform | Low Probability of Intercept | +| Antenna diversity | Redundant antenna systems | +| Frequency diversity | Redundant frequency channels | +| Drone countermeasures | Drone jammer, detection radar | + +### GSaaS Network Architecture +``` +[Satellite] ←→ [Antenna Zone] ←IPSec VPN→ [Ground Station] ←IPSec VPN→ [Cloud] + ↑ + [Satellite Operator] + (SSL VPN + MFA) +``` + +### Security Solutions by Zone +| Zone | Solutions | +|------|----------| +| Communication | Anti-jamming sensors, VPN (IPSec), encryption (asymmetric key exchange + symmetric data) | +| Antenna | Firewall, NAC, IDS/IPS, Anti-DDoS, DLP (media control), whitelist AV, CCTV, access control | +| Ground Station-Cloud | WAF, web shell detection, cloud DLP, DRM, PMS, vulnerability scanner | +| Operator | MFA, server access control, VPN (SSL), UPS/backup power | diff --git a/skills/fix/references/ai-security/developer.md b/skills/kesekit-fix/templates/ai-security/developer.md similarity index 100% rename from skills/fix/references/ai-security/developer.md rename to skills/kesekit-fix/templates/ai-security/developer.md diff --git a/skills/kesekit-fix/templates/ai-security/user-guide-checklist.md b/skills/kesekit-fix/templates/ai-security/user-guide-checklist.md new file mode 100644 index 0000000..903ec01 --- /dev/null +++ b/skills/kesekit-fix/templates/ai-security/user-guide-checklist.md @@ -0,0 +1,13 @@ +# AI 이용자 보안 체크리스트 요약 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +| # | 항목 | 확인 | +|---|------|:----:| +| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | +| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | +| 3 | AI 서비스 이용약관을 확인했는가? | □ | +| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | +| 5 | AI 출력 결과를 검증하고 있는가? | □ | +| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | +| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills/fix/references/cii/admin.md b/skills/kesekit-fix/templates/cii/admin.md similarity index 100% rename from skills/fix/references/cii/admin.md rename to skills/kesekit-fix/templates/cii/admin.md diff --git a/skills/kesekit-fix/templates/cii/cloud.md b/skills/kesekit-fix/templates/cii/cloud.md new file mode 100644 index 0000000..42834e8 --- /dev/null +++ b/skills/kesekit-fix/templates/cii/cloud.md @@ -0,0 +1,45 @@ +# 클라우드 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: AWS, Azure, GCP 등 클라우드 환경 + +## 1. 계정 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-01 | 클라우드 관리 콘솔 기본 계정 변경 | 상 | +| CA-02 | 비밀번호 복잡성 및 MFA 설정 | 상 | +| CA-03 | 불필요한 계정/키 제거 | 상 | +| CA-04 | 루트/관리자 계정 직접 사용 제한 | 상 | + +## 2. 권한 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-05 | IAM 최소 권한 원칙 적용 | 상 | +| CA-06 | 서비스 계정/역할 권한 제한 | 상 | + +## 3. 가상 리소스 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-07 | 보안 그룹/네트워크 ACL 설정 | 상 | +| CA-08 | 스토리지 접근 권한 및 암호화 | 상 | +| CA-09 | 가상 네트워크 분리 (VPC/서브넷) | 상 | +| CA-10 | 미사용 리소스 점검 및 제거 | 중 | + +## 4. 운영 관리 (9항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-11 | 클라우드 감사 로깅 활성화 | 상 | +| CA-12 | 보안 모니터링 및 알림 설정 | 상 | +| CA-13 | 데이터 백업 및 복구 정책 | 상 | +| CA-14 | 보안 패치 및 이미지 관리 | 상 | +| CA-15 | API 키/시크릿 관리 | 상 | +| CA-16 | 전송 중/저장 시 암호화 | 상 | +| CA-17 | 인스턴스 메타데이터 보호 | 중 | +| CA-18 | 컨테이너/서버리스 보안 설정 | 중 | +| CA-19 | 클라우드 서비스 가용성 관리 | 중 | + +## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills/fix/references/cii/control-system.md b/skills/kesekit-fix/templates/cii/control-system.md similarity index 100% rename from skills/fix/references/cii/control-system.md rename to skills/kesekit-fix/templates/cii/control-system.md diff --git a/skills/kesekit-fix/templates/cii/database.md b/skills/kesekit-fix/templates/cii/database.md new file mode 100644 index 0000000..d6847e0 --- /dev/null +++ b/skills/kesekit-fix/templates/cii/database.md @@ -0,0 +1,52 @@ +# DBMS 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Oracle DB, MSSQL, MySQL, PostgreSQL, Altibase, Tibero, Cubrid + +## 1. 계정 관리 (9항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-01 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | 상 | +| D-02 | 불필요 계정 제거 또는 잠금설정 | 상 | +| D-03 | 비밀번호 사용기간 및 복잡도 설정 | 상 | +| D-04 | 관리자 권한을 필요한 계정/그룹에만 허용 | 상 | +| D-05 | 비밀번호 재사용 제약 설정 | 중 | +| D-06 | DB 사용자 계정 개별 부여 | 중 | +| D-07 | root 권한으로 서비스 구동 제한 | 중 | +| D-08 | 안전한 암호화 알고리즘 사용 | 상 | +| D-09 | 로그인 실패 시 잠금정책 설정 | 중 | + +## 2. 접근 관리 (7항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-10 | 원격에서 DB 서버 접속 제한 | 상 | +| D-11 | 비인가 사용자의 시스템 테이블 접근 차단 | 상 | +| D-12 | 안전한 리스너 비밀번호 설정 | 상 | +| D-13 | 불필요한 ODBC/OLE-DB 데이터 소스 제거 | 중 | +| D-14 | 주요 파일 접근 권한 설정 | 중 | +| D-15 | 리스너 로그/trace 파일 변경 제한 | 하 | +| D-16 | Windows 인증 모드 사용 | 하 | + +## 3. 옵션 관리 (8항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-17 | Audit Table 관리자 접근 제한 | 하 | +| D-18 | Role이 Public으로 설정되지 않도록 조정 | 상 | +| D-19 | OS_ROLES 등 원격 인증 FALSE 설정 | 상 | +| D-20 | 인가되지 않은 Object owner 제한 | 하 | +| D-21 | 인가되지 않은 GRANT OPTION 사용 제한 | 중 | +| D-22 | 자원 제한 기능 TRUE 설정 | 하 | +| D-23 | xp_cmdshell 사용 제한 | 상 | +| D-24 | Registry Procedure 권한 제한 | 상 | + +## 4. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| D-26 | 감사 기록 정책 적합 설정 | 상 | + +## 통계: 총 26항목 (상 13, 중 7, 하 6) diff --git a/skills/fix/references/cii/mobile.md b/skills/kesekit-fix/templates/cii/mobile.md similarity index 100% rename from skills/fix/references/cii/mobile.md rename to skills/kesekit-fix/templates/cii/mobile.md diff --git a/skills/kesekit-fix/templates/cii/network.md b/skills/kesekit-fix/templates/cii/network.md new file mode 100644 index 0000000..e168fb3 --- /dev/null +++ b/skills/kesekit-fix/templates/cii/network.md @@ -0,0 +1,69 @@ +# 네트워크 장비 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Cisco, Alteon, Passport, Juniper, Piolink 등 + +## 1. 계정 관리 (5항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-01 | 비밀번호 설정 | 상 | +| N-02 | 비밀번호 복잡성 설정 | 상 | +| N-03 | 암호화된 비밀번호 사용 | 상 | +| N-04 | 계정 잠금 임계값 설정 | 상 | +| N-05 | 사용자, 명령어별 권한 수준 설정 | 중 | + +## 2. 접근 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-06 | VTY 접근(ACL) 설정 | 상 | +| N-07 | 세션 종료 시간 설정 | 상 | +| N-08 | VTY 접속 시 안전한 프로토콜 사용 | 중 | +| N-09 | 불필요한 보조 입출력 포트 사용 금지 | 중 | +| N-10 | 로그온 시 경고 메시지 설정 | 중 | +| N-11 | 원격 로그서버 사용 | 중 | + +## 3. 패치 관리 (1항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-12 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | + +## 4. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-13 | 로깅 버퍼 크기 설정 | 중 | +| N-14 | 정책에 따른 로깅 설정 | 중 | +| N-15 | NTP 및 시각 동기화 설정 | 중 | +| N-16 | Timestamp 로그 설정 | 하 | + +## 5. 기능 관리 (22항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-17 | SNMP 서비스 확인 | 상 | +| N-18 | SNMP Community String 복잡성 설정 | 상 | +| N-19 | SNMP ACL 설정 | 상 | +| N-20 | SNMP Community 권한 설정 | 상 | +| N-21 | TFTP 서비스 차단 | 상 | +| N-22 | Spoofing 방지 필터링 적용 | 상 | +| N-23 | DDoS 공격 방어 설정 또는 DDoS 장비 사용 | 상 | +| N-24 | 사용하지 않는 인터페이스 비활성화 | 상 | +| N-25 | TCP Keepalive 서비스 설정 | 중 | +| N-26 | Finger 서비스 차단 | 중 | +| N-27 | 웹 서비스 차단 | 중 | +| N-28 | TCP/UDP small 서비스 차단 | 중 | +| N-29 | Bootp 서비스 차단 | 중 | +| N-30 | CDP 서비스 차단 | 중 | +| N-31 | Directed-broadcast 차단 | 중 | +| N-32 | Source 라우팅 차단 | 중 | +| N-33 | Proxy ARP 차단 | 중 | +| N-34 | ICMP unreachable, Redirect 차단 | 중 | +| N-35 | identd 서비스 차단 | 중 | +| N-36 | Domain Lookup 차단 | 중 | +| N-37 | pad 차단 | 중 | +| N-38 | mask-reply 차단 | 중 | + +## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills/kesekit-fix/templates/cii/pc.md b/skills/kesekit-fix/templates/cii/pc.md new file mode 100644 index 0000000..b5ca66b --- /dev/null +++ b/skills/kesekit-fix/templates/cii/pc.md @@ -0,0 +1,44 @@ +# PC 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Windows 10, Windows 11 + +## 1. 계정 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-01 | 비밀번호의 주기적 변경 | 상 | +| PC-02 | 비밀번호 관리정책 설정 | 상 | +| PC-03 | 복구 콘솔에서 자동 로그온 금지 설정 | 중 | + +## 2. 서비스 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-04 | 공유 폴더 제거 | 상 | +| PC-05 | 불필요한 서비스 제거 | 상 | +| PC-06 | 비인가 상용 메신저 사용 금지 | 상 | +| PC-07 | 파일 시스템이 NTFS 포맷으로 설정 | 중 | +| PC-08 | 다른 OS로 멀티 부팅 불가 설정 | 중 | +| PC-09 | 브라우저 종료 시 임시 인터넷 파일 삭제 | 하 | + +## 3. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-10 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| PC-11 | 지원 종료되지 않은 Windows OS Build 적용 | 상 | + +## 4. 보안 관리 (7항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-12 | Windows 자동 로그인 점검 | 중 | +| PC-13 | 바이러스 백신 설치 및 주기적 업데이트 | 상 | +| PC-14 | 실시간 감시 기능 활성화 | 상 | +| PC-15 | OS 침입차단 기능 활성화 | 상 | +| PC-16 | 화면보호기 대기 시간 및 암호 보호 설정 | 상 | +| PC-17 | 이동식 미디어 자동실행 방지 | 상 | +| PC-18 | 원격 지원 금지 정책 설정 | 중 | + +## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills/fix/references/cii/physical.md b/skills/kesekit-fix/templates/cii/physical.md similarity index 100% rename from skills/fix/references/cii/physical.md rename to skills/kesekit-fix/templates/cii/physical.md diff --git a/skills/fix/references/cii/security-equip.md b/skills/kesekit-fix/templates/cii/security-equip.md similarity index 100% rename from skills/fix/references/cii/security-equip.md rename to skills/kesekit-fix/templates/cii/security-equip.md diff --git a/skills/kesekit-fix/templates/cii/unix.md b/skills/kesekit-fix/templates/cii/unix.md new file mode 100644 index 0000000..969c52f --- /dev/null +++ b/skills/kesekit-fix/templates/cii/unix.md @@ -0,0 +1,124 @@ +# Unix 서버 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: SOLARIS, LINUX, AIX, HP-UX + +## 1. 계정 관리 (13항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-01 | root 계정 원격 접속 제한 | 상 | +| U-02 | 비밀번호 관리정책 설정 | 상 | +| U-03 | 계정 잠금 임계값 설정 | 상 | +| U-04 | 비밀번호 파일 보호 | 상 | +| U-05 | root 이외의 UID가 '0' 금지 | 상 | +| U-06 | 사용자 계정 su 기능 제한 | 상 | +| U-07 | 불필요한 계정 제거 | 하 | +| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | +| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | +| U-10 | 동일한 UID 금지 | 중 | +| U-11 | 사용자 Shell 점검 | 하 | +| U-12 | 세션 종료 시간 설정 | 하 | +| U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | + +--- + +## 2. 파일 및 디렉터리 관리 (20항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-14 | root 홈, 패스 디렉터리 권한 및 패스 설정 | 상 | +| U-15 | 파일 및 디렉터리 소유자 설정 | 상 | +| U-16 | /etc/passwd 파일 소유자 및 권한 설정 | 상 | +| U-17 | 시스템 시작 스크립트 권한 설정 | 상 | +| U-18 | /etc/shadow 파일 소유자 및 권한 설정 | 상 | +| U-19 | /etc/hosts 파일 소유자 및 권한 설정 | 상 | +| U-20 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | 상 | +| U-21 | /etc/(r)syslog.conf 파일 소유자 및 권한 설정 | 상 | +| U-22 | /etc/services 파일 소유자 및 권한 설정 | 상 | +| U-23 | SUID, SGID, Sticky bit 설정 파일 점검 | 상 | +| U-24 | 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 | 상 | +| U-25 | world writable 파일 점검 | 상 | +| U-26 | /dev에 존재하지 않는 device 파일 점검 | 상 | +| U-27 | $HOME/.rhosts, hosts.equiv 사용 금지 | 상 | +| U-28 | 접속 IP 및 포트 제한 | 상 | +| U-29 | hosts.lpd 파일 소유자 및 권한 설정 | 하 | +| U-30 | UMASK 설정 관리 | 중 | +| U-31 | 홈 디렉토리 소유자 및 권한 설정 | 중 | +| U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | +| U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | + +--- + +## 3. 서비스 관리 (30항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-34 | Finger 서비스 비활성화 | 상 | +| U-35 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | +| U-36 | r 계열 서비스 비활성화 | 상 | +| U-37 | crontab 설정파일 권한 설정 | 상 | +| U-38 | DoS 공격에 취약한 서비스 비활성화 | 상 | +| U-39 | 불필요한 NFS 서비스 비활성화 | 상 | +| U-40 | NFS 접근 통제 | 상 | +| U-41 | 불필요한 automountd 제거 | 상 | +| U-42 | 불필요한 RPC 서비스 비활성화 | 상 | +| U-43 | NIS, NIS+ 점검 | 상 | +| U-44 | tftp, talk 서비스 비활성화 | 상 | +| U-45 | 메일 서비스 버전 점검 | 상 | +| U-46 | 일반 사용자의 메일 서비스 실행 방지 | 상 | +| U-47 | 스팸 메일 릴레이 제한 | 상 | +| U-48 | expn, vrfy 명령어 제한 | 중 | +| U-49 | DNS 보안 버전 패치 | 상 | +| U-50 | DNS Zone Transfer 설정 | 상 | +| U-51 | DNS 서비스의 취약한 동적 업데이트 설정 금지 | 중 | +| U-52 | Telnet 서비스 비활성화 | 중 | +| U-53 | FTP 서비스 정보 노출 제한 | 하 | +| U-54 | 암호화되지 않는 FTP 서비스 비활성화 | 중 | +| U-55 | FTP 계정 Shell 제한 | 중 | +| U-56 | FTP 서비스 접근 제어 설정 | 하 | +| U-57 | Ftpusers 파일 설정 | 중 | +| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| U-59 | 안전한 SNMP 버전 사용 | 상 | +| U-60 | SNMP Community String 복잡성 설정 | 중 | +| U-61 | SNMP Access Control 설정 | 상 | +| U-62 | 로그인 시 경고 메시지 설정 | 하 | +| U-63 | sudo 명령어 접근 관리 | 중 | + +--- + +## 4. 패치 관리 (1항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | + +--- + +## 5. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-65 | NTP 및 시각 동기화 설정 | 중 | +| U-66 | 정책에 따른 시스템 로깅 설정 | 중 | +| U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | + +--- + +## 판단 기준 + +| 판단 | 설명 | +|------|------| +| 양호 | 보안 설정이 적절히 적용됨 | +| 취약 | 보안 취약점 존재, 조치 필요 | + +## 통계 + +| 분류 | 항목 수 | 상 | 중 | 하 | +|------|:------:|:--:|:--:|:--:| +| 계정 관리 | 13 | 6 | 4 | 3 | +| 파일/디렉터리 관리 | 20 | 15 | 3 | 2 | +| 서비스 관리 | 30 | 19 | 9 | 2 | +| 패치 관리 | 1 | 1 | 0 | 0 | +| 로그 관리 | 3 | 0 | 3 | 0 | +| **합계** | **67** | **41** | **19** | **7** | diff --git a/skills/fix/references/cii/virtualization.md b/skills/kesekit-fix/templates/cii/virtualization.md similarity index 100% rename from skills/fix/references/cii/virtualization.md rename to skills/kesekit-fix/templates/cii/virtualization.md diff --git a/skills/kesekit-fix/templates/cii/web-service.md b/skills/kesekit-fix/templates/cii/web-service.md new file mode 100644 index 0000000..9f6298a --- /dev/null +++ b/skills/kesekit-fix/templates/cii/web-service.md @@ -0,0 +1,52 @@ +# 웹 서비스 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Apache, Nginx, IIS, Tomcat, JEUS + +## 1. 계정 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-01 | Default 관리자 계정명 변경 | 상 | +| WEB-02 | 취약한 비밀번호 사용 제한 | 상 | +| WEB-03 | 비밀번호 파일 권한 관리 | 상 | + +## 2. 서비스 관리 (15항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-04 | 웹 서비스 디렉터리 리스팅 방지 설정 | 상 | +| WEB-05 | 지정하지 않은 CGI/ISAPI 실행 제한 | 상 | +| WEB-06 | 웹 서비스 상위 디렉터리 접근 제한 설정 | 상 | +| WEB-07 | 웹 서비스 경로 내 불필요한 파일 제거 | 중 | +| WEB-08 | 웹 서비스 파일 업로드 및 다운로드 용량 제한 | 하 | +| WEB-09 | 웹 서비스 프로세스 권한 제한 | 상 | +| WEB-10 | 불필요한 프록시 설정 제한 | 상 | +| WEB-11 | 웹 서비스 경로 설정 | 중 | +| WEB-12 | 웹 서비스 링크 사용 금지 | 중 | +| WEB-13 | 웹 서비스 설정 파일 노출 제한 | 상 | +| WEB-14 | 웹 서비스 경로 내 파일의 접근 통제 | 상 | +| WEB-15 | 웹 서비스의 불필요한 스크립트 매핑 제거 | 상 | +| WEB-16 | 웹 서비스 헤더 정보 노출 제한 | 중 | +| WEB-17 | 웹 서비스 가상 디렉토리 삭제 | 중 | +| WEB-18 | 웹 서비스 WebDAV 비활성화 | 상 | + +## 3. 보안 설정 (5항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-19 | 웹 서비스 SSI 사용 제한 | 중 | +| WEB-20 | SSL/TLS 활성화 | 상 | +| WEB-21 | HTTP 리디렉션 | 중 | +| WEB-22 | 에러 페이지 관리 | 하 | +| WEB-23 | LDAP 알고리즘 적절하게 구성 | 중 | + +## 4. 패치 및 로그 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-24 | 별도의 업로드 경로 사용 및 권한 설정 | 중 | +| WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | + +## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills/kesekit-fix/templates/cii/webapp.md b/skills/kesekit-fix/templates/cii/webapp.md new file mode 100644 index 0000000..ca84427 --- /dev/null +++ b/skills/kesekit-fix/templates/cii/webapp.md @@ -0,0 +1,47 @@ +# Web Application 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: 웹 애플리케이션 소스 코드 및 설정 + +## 1. 입력값 검증 (8항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CI | Command Injection | 상 | +| SI | SQL Injection | 상 | +| XS | Cross-Site Scripting (XSS) | 상 | +| CF | Cross-Site Request Forgery (CSRF) | 상 | +| SF | Server-Side Request Forgery (SSRF) | 상 | +| FU | File Upload 취약점 | 상 | +| FD | File Download 취약점 | 상 | +| DI | 디렉터리 인덱싱 | 중 | + +## 2. 인증/세션 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| BF | Brute Force 공격 | 상 | +| IA | 불충분한 인증 (Insufficient Authentication) | 상 | +| PR | 비밀번호 복구 취약점 | 중 | +| IS | 불충분한 세션 관리 | 상 | +| CC | 세션 고정 (Credential/Session Prediction) | 상 | +| SN | 세션 만료 미설정 | 중 | + +## 3. 접근제어 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| IN | 불충분한 인가 (Insufficient Authorization) | 상 | +| PV | 경로 조작 (Path Traversal) | 상 | +| AE | 관리자 페이지 노출 | 상 | +| WM | HTTP Method 제한 미설정 | 중 | + +## 4. 정보노출 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| EP | 에러 페이지를 통한 정보 노출 | 중 | +| IL | 불필요한 정보 노출 | 중 | +| AU | 부적절한 감사 로깅 | 중 | + +## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills/kesekit-fix/templates/cii/windows.md b/skills/kesekit-fix/templates/cii/windows.md new file mode 100644 index 0000000..15a5c32 --- /dev/null +++ b/skills/kesekit-fix/templates/cii/windows.md @@ -0,0 +1,113 @@ +# Windows 서버 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) + +## 1. 계정 관리 (14항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-01 | Administrator 계정 이름 변경 등 보안성 강화 | 상 | +| W-02 | Guest 계정 비활성화 | 상 | +| W-03 | 불필요한 계정 제거 | 상 | +| W-04 | 계정 잠금 임계값 설정 | 상 | +| W-05 | 해독 가능한 암호화를 사용하여 암호 저장 해제 | 상 | +| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | +| W-07 | Everyone 사용 권한을 익명 사용자에게 적용 | 중 | +| W-08 | 계정 잠금 기간 설정 | 중 | +| W-09 | 비밀번호 관리정책 설정 | 상 | +| W-10 | 마지막 사용자 이름 표시 안 함 | 중 | +| W-11 | 로컬 로그온 허용 | 중 | +| W-12 | 익명 SID/이름 변환 허용 해제 | 중 | +| W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | +| W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | + +--- + +## 2. 서비스 관리 (23항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-15 | 사용자 개인키 사용 시 암호 입력 | 상 | +| W-16 | 공유 권한 및 사용자 그룹 설정 | 상 | +| W-17 | 하드디스크 기본 공유 제거 | 상 | +| W-18 | 불필요한 서비스 제거 | 상 | +| W-19 | 불필요한 IIS 서비스 구동 점검 | 상 | +| W-20 | NetBIOS 바인딩 서비스 구동 점검 | 상 | +| W-21 | 암호화되지 않는 FTP 서비스 비활성화 | 상 | +| W-22 | FTP 디렉토리 접근권한 설정 | 상 | +| W-23 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | +| W-24 | FTP 접근 제어 설정 | 상 | +| W-25 | DNS Zone Transfer 설정 | 상 | +| W-26 | RDS(Remote Data Services) 제거 | 상 | +| W-27 | 최신 Windows OS Build 버전 적용 | 상 | +| W-28 | 터미널 서비스 암호화 수준 설정 | 중 | +| W-29 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| W-30 | SNMP Community String 복잡성 설정 | 중 | +| W-31 | SNMP Access Control 설정 | 중 | +| W-32 | DNS 서비스 구동 점검 | 중 | +| W-33 | HTTP/FTP/SMTP 배너 차단 | 하 | +| W-34 | Telnet 서비스 비활성화 | 중 | +| W-35 | 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 | 중 | +| W-36 | 원격터미널 접속 타임아웃 설정 | 중 | +| W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | + +--- + +## 3. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| W-39 | 백신 프로그램 업데이트 | 상 | + +--- + +## 4. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-40 | 정책에 따른 시스템 로깅 설정 | 중 | +| W-41 | NTP 및 시각 동기화 설정 | 중 | +| W-42 | 이벤트 로그 관리 설정 | 하 | +| W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | + +--- + +## 5. 보안 관리 (21항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-44 | 원격으로 액세스할 수 있는 레지스트리 경로 | 상 | +| W-45 | 백신 프로그램 설치 | 상 | +| W-46 | SAM 파일 접근 통제 설정 | 상 | +| W-47 | 화면보호기 설정 | 상 | +| W-48 | 로그온하지 않고 시스템 종료 허용 | 상 | +| W-49 | 원격 시스템에서 강제로 시스템 종료 | 상 | +| W-50 | 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 | 상 | +| W-51 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | +| W-52 | Autologon 기능 제어 | 상 | +| W-53 | 이동식 미디어 포맷 및 꺼내기 허용 | 상 | +| W-54 | DoS 공격 방어 레지스트리 설정 | 중 | +| W-55 | 사용자가 프린터 드라이버를 설치할 수 없게 함 | 중 | +| W-56 | SMB 세션 중단 관리 설정 | 중 | +| W-57 | 로그온 시 경고 메시지 설정 | 하 | +| W-58 | 사용자별 홈 디렉터리 권한 설정 | 중 | +| W-59 | LAN Manager 인증 수준 | 중 | +| W-60 | 보안 채널 데이터 디지털 암호화 또는 서명 | 중 | +| W-61 | 파일 및 디렉토리 보호 | 중 | +| W-62 | 시작프로그램 목록 분석 | 중 | +| W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | +| W-64 | 윈도우 방화벽 설정 | 중 | + +--- + +## 통계 + +| 분류 | 항목 수 | 상 | 중 | 하 | +|------|:------:|:--:|:--:|:--:| +| 계정 관리 | 14 | 7 | 7 | 0 | +| 서비스 관리 | 23 | 13 | 9 | 1 | +| 패치 관리 | 2 | 2 | 0 | 0 | +| 로그 관리 | 4 | 0 | 3 | 1 | +| 보안 관리 | 21 | 10 | 10 | 1 | +| **합계** | **64** | **32** | **29** | **3** | diff --git a/skills/fix/references/robot-security/cyber-resilience.md b/skills/kesekit-fix/templates/robot-security/cyber-resilience.md similarity index 100% rename from skills/fix/references/robot-security/cyber-resilience.md rename to skills/kesekit-fix/templates/robot-security/cyber-resilience.md diff --git a/skills/fix/references/robot-security/iec62443.md b/skills/kesekit-fix/templates/robot-security/iec62443.md similarity index 100% rename from skills/fix/references/robot-security/iec62443.md rename to skills/kesekit-fix/templates/robot-security/iec62443.md diff --git a/skills/fix/references/robot-security/overview.md b/skills/kesekit-fix/templates/robot-security/overview.md similarity index 100% rename from skills/fix/references/robot-security/overview.md rename to skills/kesekit-fix/templates/robot-security/overview.md diff --git a/skills/fix/references/robot-security/ssdf.md b/skills/kesekit-fix/templates/robot-security/ssdf.md similarity index 100% rename from skills/fix/references/robot-security/ssdf.md rename to skills/kesekit-fix/templates/robot-security/ssdf.md diff --git a/skills/fix/references/robot-security/supply-chain.md b/skills/kesekit-fix/templates/robot-security/supply-chain.md similarity index 100% rename from skills/fix/references/robot-security/supply-chain.md rename to skills/kesekit-fix/templates/robot-security/supply-chain.md diff --git a/skills/fix/references/robot-security/wireless.md b/skills/kesekit-fix/templates/robot-security/wireless.md similarity index 100% rename from skills/fix/references/robot-security/wireless.md rename to skills/kesekit-fix/templates/robot-security/wireless.md diff --git a/skills/kesekit-fix/templates/secure-coding/javascript.md b/skills/kesekit-fix/templates/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/skills/kesekit-fix/templates/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/skills/kesekit-fix/templates/secure-coding/python.md b/skills/kesekit-fix/templates/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/skills/kesekit-fix/templates/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/skills/kesekit-fix/templates/space-security/access-control.md b/skills/kesekit-fix/templates/space-security/access-control.md new file mode 100644 index 0000000..7232d6a --- /dev/null +++ b/skills/kesekit-fix/templates/space-security/access-control.md @@ -0,0 +1,49 @@ +# Access Control & Authentication Checklist + +> Domains: AC (Access Control, 12 items) + IA (Identification & Authentication, 2 items) + +## AC — Access Control (12 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| AC-01 | Access Control Policy | Restrict access to authorized users/processes/devices only | Access control policy established, authorized entities identified, per-system access rules defined | +| AC-02 | Least Privilege | Grant minimum necessary permissions | Least privilege procedures, management approval, periodic review | +| AC-03 | Privileged Access Use | Restrict and audit privileged account usage | Privileged account types defined/limited, audit logs stored/reviewed | +| AC-04 | Information Flow Control | Control information flow within and between systems | Flow control policy, source/destination identification, change approval | +| AC-05 | Separation of Duties | Prevent authority abuse through role separation | Duty separation policy, critical duties separated, compensating controls | +| AC-06 | Failed Login Attempts | Protect accounts from brute-force attacks | Max attempt limits, auto-lockout policy, alert/notification on failures | +| AC-07 | Session Lock & Termination | Prevent unauthorized access during idle sessions | Auto-lock on inactivity, re-authentication required, session termination conditions | +| AC-08 | Remote Access Control | Prevent unauthorized remote access | Remote access policy, device security check/MFA/encryption, monitoring/logging | +| AC-09 | Wireless Access | Prevent unauthorized wireless connections | Wireless policy, authentication/encryption, unauthorized AP prevention | +| AC-10 | Mobile Device Control | Control mobile device connections | Mobile device policy, data encryption, loss/theft protection | +| AC-11 | External Connection Control | Protect system boundaries from external systems | External systems identified, approved methods only, continuous monitoring | +| AC-12 | Public Information Control | Prevent sensitive information disclosure | Pre-publication review/approval, designated reviewers, periodic content review | + +### AC Protection Measures Summary + +| Category | Measures | +|----------|----------| +| Account Management | 1-person-1-account, default account deletion, immediate revocation on termination, annual full review | +| Authentication | MFA for privileged access, SSH/SFTP/VPN only, 8+ char passwords with 2+ character types | +| Network | ACL-based deny-all, IP/port whitelisting, WPA3/WPA2-Enterprise, WIPS deployment | +| Session | 10-min inactivity lock, screensaver with password, session timeout enforcement | +| Remote Access | 3-step procedure (request/approve/monitor), VPN+MFA, high-risk assets remote-access-denied by default | +| Monitoring | Failed login alerts to SOC, audit log analysis, access log review | + +## IA — Identification & Authentication (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IA-01 | Identification & Authentication | Prevent unauthorized access and credential theft | Unique identifiers for users/processes/devices, password complexity (upper+lower+special+number, 8+ chars), cryptographic protection, reuse prevention | +| IA-02 | Multi-Factor Authentication | Strengthen privileged account authentication, prevent replay attacks | MFA for privileged network access, replay attack prevention (challenge-response/timestamp) | + +### IA Protection Measures + +| Measure | Detail | +|---------|--------| +| Password Policy | Min 8 chars, 3+ character types, 90-day rotation, history check (last 5) | +| MFA Methods | OTP, certificate, biometric — at least 2 factors required | +| Replay Prevention | Challenge-response protocol, timestamp-based token validation | +| Credential Storage | Hashed (SHA-256+), no plaintext storage, encrypted transmission | + +## Total: 14 Items (AC: 12 + IA: 2) diff --git a/skills/kesekit-fix/templates/space-security/governance.md b/skills/kesekit-fix/templates/space-security/governance.md new file mode 100644 index 0000000..3ff7049 --- /dev/null +++ b/skills/kesekit-fix/templates/space-security/governance.md @@ -0,0 +1,90 @@ +# Governance, Personnel, Physical & Risk Checklist + +> Domains: PS (2) + PE (3) + RA (2) + SG (4) + CP (2) = 13 items + +## PS — Personnel Security (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PS-01 | Personnel Security | Control insider threats, prevent unauthorized personnel access | Background check on hiring, access review/revocation on role change/termination, disciplinary procedures | +| PS-02 | Security Awareness Training | Prevent security incidents, strengthen role-based security competency | Awareness activities, professional training plans, annual execution including contractors | + +### PS Protection Measures + +| Measure | Detail | +|---------|--------| +| Background Check | Resume/education/identity verification before hiring | +| Termination | Immediate access revocation, asset return, NDA enforcement | +| Training | Annual minimum, phishing simulation, role-specific curriculum, contractor inclusion | + +## PE — Physical & Environmental Security (3 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PE-01 | Physical Access Control | Block unauthorized physical access, ensure asset integrity | Entry control/monitoring, visitor escort, access log retention, control device management | +| PE-02 | Alternate Work Site Security | Maintain confidentiality in alternate work environments | Security control standards, work device security, secure remote access | +| PE-03 | Protective Equipment Operation | Ensure physical safety against environmental threats | Equipment inspection, environmental controls (temperature/humidity/fire/water/power) | + +### PE Protection Measures + +| Category | Measures | +|----------|----------| +| Access Zones | Controlled/restricted/reception areas designated, card reader/biometric, CCTV | +| Visitor Policy | Escort required, visitor log, temporary badge | +| Alternate Sites | Home/travel/remote office classification, organization-issued device, VPN+MFA | +| Environmental | UPS/emergency generator/dual power, 10-32C server room, fire detection/suppression, periodic inspection | + +## RA — Risk Assessment & Security Evaluation (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| RA-01 | Risk Assessment | Identify, assess, and manage organizational risks | Risk management framework, periodic assessment (annual+) | +| RA-02 | Security Control Monitoring & Effectiveness | Ensure continuous security control effectiveness | Effectiveness evaluation framework, periodic review/update | + +### RA Protection Measures + +| Measure | Detail | +|---------|--------| +| Assessment Method | Baseline/detailed/combined approach, management/technical/physical/legal domains | +| Frequency | Annual minimum, ad-hoc on major changes | +| Metrics | KPI/security performance indicators: violation rate, infection rate, scanning completion rate | +| Responsibility | Designated monitoring officer, management reporting | + +## SG — Security Governance (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SG-01 | Security Policy Establishment | Ensure policy effectiveness and currency | Top-level policy creation/approval/dissemination, periodic review/update, improvement plans | +| SG-02 | Security Roles & Responsibilities | Clarify security accountability | CISO designation, role/responsibility assignment/review | +| SG-03 | Asset Management | Maintain asset integrity and security posture | Asset identification/inventory/updates, classification/owner assignment | +| SG-04 | Legal Requirements Compliance | Ensure regulatory compliance | Legal requirements identification/integration, independent compliance review | + +### SG Key Regulations + +| Regulation | Relevance | +|-----------|-----------| +| Personal Information Protection Act | Data collected by satellite services | +| ICT Infrastructure Protection Act | CII designation for space systems | +| Radio Waves Act | Satellite frequency management | +| Space Development Promotion Act | Space industry regulations | +| Cloud Computing Act | GSaaS cloud infrastructure | +| NIS2 (EU) | Space as essential service sector | +| CMMC (US) | Defense supply chain requirements | + +## CP — Contingency Planning (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| CP-01 | Contingency Plan | Ensure space system operational continuity | Disaster type identification, impact analysis, critical service identification, recovery procedures | +| CP-02 | Backup & Redundancy Management | Ensure critical information/system availability | Periodic backup, safe storage, regular testing, system redundancy | + +### CP Protection Measures + +| Measure | Detail | +|---------|--------| +| RTO/RPO | Define for each critical service (satellite control, MOC, PCC) | +| Backup Plan | Target/frequency/retention/method defined, backup confidentiality/integrity/availability verified | +| Redundancy | Network/system dual paths, failover testing | +| BCP | Business continuity management system, emergency contact chain, recovery organization | + +## Total: 13 Items (PS: 2 + PE: 3 + RA: 2 + SG: 4 + CP: 2) diff --git a/skills/kesekit-fix/templates/space-security/operations.md b/skills/kesekit-fix/templates/space-security/operations.md new file mode 100644 index 0000000..d1a2d0d --- /dev/null +++ b/skills/kesekit-fix/templates/space-security/operations.md @@ -0,0 +1,47 @@ +# Operations & Incident Response Checklist + +> Domains: SO (System/Service Operations Management, 9 items) + IR (Incident Response, 2 items) + +## SO — System/Service Operations Management (9 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SO-01 | Maintenance Control | Control maintenance personnel, tools, and remote access | Work request/approval/logging, NDA, media sanitization, VPN+MFA for remote maintenance | +| SO-02 | System Audit & Log Analysis | Detect unauthorized/abnormal activities, ensure accountability | Audit log generation/retention, tamper protection, restricted admin access, integrated analysis/reporting | +| SO-03 | Time Synchronization | Ensure audit log accuracy and reliability | NTP standard time sync, internal NTP server, periodic verification | +| SO-04 | Portable Storage Security | Protect storage media confidentiality/integrity | Classification marking, encrypted transfer, unauthorized media control, secure disposal | +| SO-05 | Configuration Management | Establish configuration baselines, maintain integrity | HW/SW/FW baseline identification, security configuration documentation, periodic monitoring | +| SO-06 | Security Requirements Definition | Define security requirements from planning phase | Authentication/access control/encryption/logging requirements in RFP, secure coding standards | +| SO-07 | Change Management | Ensure integrity during system/application changes | Change review/approval/recording, pre-change security impact analysis, access restrictions | +| SO-08 | Development Testing & Evaluation | Verify security requirement implementation | Acceptance testing, source code verification, vulnerability scanning in production-equivalent environment | +| SO-09 | Function Minimization & SW Control | Remove unnecessary features, control unauthorized software | Essential functions only, blacklist/whitelist policies, disable DHCP/Print Spooler etc., block P2P/webhard | + +### SO Protection Measures Summary + +| Category | Key Actions | +|----------|-------------| +| Maintenance | Approved personnel only, clean PC with AV scan, media control, session recording | +| Logging | All systems generate audit logs, tamper-proof storage, min 1-year retention, weekly review | +| Media Control | USB port lock, media control solution, encrypted transport, overwrite-based disposal | +| Configuration | Baseline registry/account/network settings, monthly drift detection, rollback capability | +| Secure Development | Security requirements in RFP, secure coding per language (Java/PHP/ASP/C), code review | +| Change Control | Formal approval process, security impact analysis, revision history, pre/post testing | + +## IR — Incident Response (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IR-01 | Incident Handling & Testing | Minimize damage and enable rapid recovery | Incident classification, detection/response/recovery procedures, post-incident review, periodic drills | +| IR-02 | Incident Reporting | Enable consistent response through timely reporting | Internal reporting chain, regulatory notification, stakeholder communication | + +### IR Protection Measures + +| Measure | Detail | +|---------|--------| +| Incident Types | Malware, unauthorized access, service disruption, data breach, physical compromise | +| Response Phases | Preparation > Detection > Investigation > Analysis > Containment > Eradication > Recovery | +| Reporting Timeline | Internal: immediate; KISA: within 24 hours (per ICT Infrastructure Act Art.48-3); NIS2: 24h/72h/1month staged | +| Emergency Contacts | Quarterly review, 24/7 contact chain, regulatory liaison designated | +| Testing | Annual tabletop exercise, biannual red team drill, post-exercise lessons learned | + +## Total: 11 Items (SO: 9 + IR: 2) diff --git a/skills/kesekit-fix/templates/space-security/supply-chain.md b/skills/kesekit-fix/templates/space-security/supply-chain.md new file mode 100644 index 0000000..750fe6f --- /dev/null +++ b/skills/kesekit-fix/templates/space-security/supply-chain.md @@ -0,0 +1,47 @@ +# Supply Chain Management Checklist + +> Domain: SM (Supply Chain Management, 4 items) + +## SM — Supply Chain Management (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SM-01 | Supply Chain Protection | Identify and mitigate supply chain risks | Supply chain security policy, vendor selection criteria/contract security requirements, vendor registry updates | +| SM-02 | Pre-Acquisition Evaluation | Prevent vulnerable assets from entering operations | Pre-acquisition/update vulnerability scanning, acceptance testing, counterfeit inspection | +| SM-03 | All-Source Information Use | Achieve software transparency through SBOM | Require SBOM from suppliers, use SBOM for transparency/continuous management | +| SM-04 | Tampering/Counterfeiting Prevention & Detection | Detect and block supply chain tampering | Verify vendor development/distribution integrity, acceptance/operations integrity verification | + +### SM Protection Measures + +| Category | Measures | +|----------|----------| +| Contract Security | Training/incident notification/vulnerability remediation/audit rights/data disposal on termination in contracts | +| SBOM Management | SPDX/CycloneDX standard format, open-source/commercial SW identification, CVE periodic scanning | +| Integrity Verification | Hash value/digital signature verification, SBOM-based impact identification on new vulnerabilities | +| Vendor Management | Periodic vendor security audits, vendor registry maintenance, conditional acceptance criteria | + +## Supply Chain Architecture (3 Zones) + +### Satellite/Launch Vehicle Manufacturer +| Component | Security Focus | +|-----------|---------------| +| SW Development Server | IDE plugin verification, malware scanning | +| Library DB | Open-source library verification, vulnerability scanning | +| Code DB | Source code integrity, access control | +| Manufacturing Systems | Satellite bus, payload, launch vehicle manufacturing integrity | + +### Ground Station Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Control System | Build pipeline security, backdoor prevention | +| SW Development Server | Secure development environment | +| SW Update Server | Update file integrity verification, secure transmission | +| Library/Code DB | Vulnerable open-source blocking, SBOM verification | + +### Satellite Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Application System | Hard-coded credential prevention | +| SW Development Server | Remote work environment security | +| Data Processing System | Maintenance account management | +| Library/Code DB | Auto-build malicious open-source prevention | diff --git a/skills/kesekit-fix/templates/space-security/system-security.md b/skills/kesekit-fix/templates/space-security/system-security.md new file mode 100644 index 0000000..7297ada --- /dev/null +++ b/skills/kesekit-fix/templates/space-security/system-security.md @@ -0,0 +1,46 @@ +# System & Communication Security Checklist + +> Domains: SC (System & Communication Security, 7 items) + SI (System & Information Integrity, 4 items) + +## SC — System & Communication Security (7 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SC-01 | Boundary Protection | Block unauthorized communications at boundaries | Network segmentation, DMZ deployment, communication encryption/monitoring, deny-all ACL | +| SC-02 | Security Engineering & Function Separation | Defense-in-depth, eliminate single points of failure | Security engineering principles, admin/user function separation, Secure by Design | +| SC-03 | Stored & Transmitted Information Security | Protect command/telemetry/log confidentiality and integrity | Storage encryption, uplink/downlink encryption, shared resource protection | +| SC-04 | Communication Security | Establish/maintain/terminate secure sessions | Default deny policy, authenticated/integrity-checked channels, session timeout | +| SC-05 | Encryption | Apply cryptographic algorithms and manage keys | Approved algorithms, key lifecycle management (create/distribute/store/retire) | +| SC-06 | Collaborative Computing Devices | Prevent remote camera/mic activation, prevent leaks | Device inventory, remote activation blocked, LED indicator required | +| SC-07 | Mobile Code & VoIP Control | Prevent malicious code execution and unauthorized VoIP | Mobile code execution control, VoIP usage restriction, monitoring | + +### SC Protection Measures + +| Category | Measures | +|----------|----------| +| Network Segmentation | Physical/logical separation, DMZ for public servers, satellite-control/operations/internet isolation | +| Encryption Standards | AES-256/ARIA-256, TLS 1.2+, IPsec VPN, CCSDS 352.0-B-2 for space systems | +| Integrity Verification | Digital signatures, HMAC, memory/buffer initialization | +| Session Management | mTLS, split-tunneling blocked, session ID rotation, 2-30 min timeout | +| Cryptographic Keys | AES-256, SHA-256+, RSA-4096+; PROHIBIT TDEA/MD5/SHA-1; full key lifecycle management | +| Code Control | ActiveX/Java Runtime disabled, script whitelisting, signed code only, SRTP for VoIP | + +## SI — System & Information Integrity (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SI-01 | Vulnerability Scanning & Flaw Remediation | Identify and fix system/application vulnerabilities | Periodic scanning, immediate scan on new vulnerabilities, flaw identification/remediation/reporting | +| SI-02 | Malicious Code Prevention | Prevent virus/worm/ransomware infiltration | Anti-malware on all systems, periodic/real-time scanning, signature updates | +| SI-03 | Security Alerts & Advisories | Monitor and respond to security alerts | Continuous monitoring of KISA/NCSC/CISA/NIST NVD, impact analysis, patch/hardening | +| SI-04 | System & Communication Traffic Monitoring | Detect abnormal traffic in real-time | Monitoring policy, inbound/outbound monitoring, result analysis/response | + +### SI Protection Measures + +| Measure | Detail | +|---------|--------| +| Vulnerability Management | Network/server/security/app/web scanning, CWE/CVE-based, prioritized remediation | +| Anti-Malware | Enterprise AV on all assets, daily+ updates, P2P/webhard blocked, central management | +| Alert Monitoring | RSS/email subscription to KISA/CISA/NVD, internal notification chain, patch within SLA | +| Traffic Monitoring | IDS/IPS at boundaries, access/security/network log integration, automated alerting | + +## Total: 11 Items (SC: 7 + SI: 4) diff --git a/skills/kesekit-fix/templates/zero-trust/app-data.md b/skills/kesekit-fix/templates/zero-trust/app-data.md new file mode 100644 index 0000000..f8d1195 --- /dev/null +++ b/skills/kesekit-fix/templates/zero-trust/app-data.md @@ -0,0 +1,162 @@ +# Application & Data Checklist + +> Zero Trust Maturity Assessment — Application (AP) & Data (DA) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## AP — 애플리케이션 및 워크로드 (Application) (60 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AP-01 | 리소스 권한 부여 및 통합 | 접근에 대한 사용자/시스템 권한을 수동으로 관리하는가? | Traditional | Critical | +| ZT-AP-02 | 리소스 권한 부여 및 통합 | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | Traditional | Critical | +| ZT-AP-03 | 리소스 권한 부여 및 통합 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | Initial | High | +| ZT-AP-04 | 리소스 권한 부여 및 통합 | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | Initial | High | +| ZT-AP-05 | 리소스 권한 부여 및 통합 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-06 | 리소스 권한 부여 및 통합 | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-07 | 리소스 권한 부여 및 통합 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | Optimal | Low | +| ZT-AP-08 | 리소스 권한 부여 및 통합 | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | Optimal | Low | +| ZT-AP-09 | 리소스 권한 부여 및 통합 | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | Optimal | Low | +| ZT-AP-10 | 리소스 권한 부여 및 통합 | 모든 리소스 권한 부여가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-11 | 지속적인 모니터링 및 진행 중인 승인 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | Traditional | Critical | +| ZT-AP-12 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-AP-13 | 지속적인 모니터링 및 진행 중인 승인 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | Initial | High | +| ZT-AP-14 | 지속적인 모니터링 및 진행 중인 승인 | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | Initial | High | +| ZT-AP-15 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | Advanced | Medium | +| ZT-AP-16 | 지속적인 모니터링 및 진행 중인 승인 | 보안 승인 프로세스를 자동화할 수 있는가? | Advanced | Medium | +| ZT-AP-17 | 지속적인 모니터링 및 진행 중인 승인 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | Optimal | Low | +| ZT-AP-18 | 원격 접속 | VPN을 통해서 외부 접속을 지원하는가? | Traditional | Critical | +| ZT-AP-19 | 원격 접속 | 애플리케이션에 대한 접근제어가 제한적인가? | Traditional | Critical | +| ZT-AP-20 | 원격 접속 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | Initial | High | +| ZT-AP-21 | 원격 접속 | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | Advanced | Medium | +| ZT-AP-22 | 원격 접속 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | Advanced | Medium | +| ZT-AP-23 | 원격 접속 | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | Optimal | Low | +| ZT-AP-24 | 원격 접속 | AI를 활용하여 원격 접속 보안을 고도화 하였는가? | Optimal | Low | +| ZT-AP-25 | 원격 접속 | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | Optimal | Low | +| ZT-AP-26 | 안전한 애플리케이션 배포 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | Traditional | Critical | +| ZT-AP-27 | 안전한 애플리케이션 배포 | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | Traditional | Critical | +| ZT-AP-28 | 안전한 애플리케이션 배포 | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | Traditional | Critical | +| ZT-AP-29 | 안전한 애플리케이션 배포 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | Initial | High | +| ZT-AP-30 | 안전한 애플리케이션 배포 | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | Initial | High | +| ZT-AP-31 | 안전한 애플리케이션 배포 | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | Initial | High | +| ZT-AP-32 | 안전한 애플리케이션 배포 | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | Initial | High | +| ZT-AP-33 | 안전한 애플리케이션 배포 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | Advanced | Medium | +| ZT-AP-34 | 안전한 애플리케이션 배포 | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | Advanced | Medium | +| ZT-AP-35 | 안전한 애플리케이션 배포 | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | Advanced | Medium | +| ZT-AP-36 | 안전한 애플리케이션 배포 | 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | Advanced | Medium | +| ZT-AP-37 | 안전한 애플리케이션 배포 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | Optimal | Low | +| ZT-AP-38 | 안전한 애플리케이션 배포 | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | Optimal | Low | +| ZT-AP-39 | 애플리케이션 인벤토리 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | Traditional | Critical | +| ZT-AP-40 | 애플리케이션 인벤토리 | 애플리케이션 기본 정보를 기록하여 관리하는가? | Traditional | Critical | +| ZT-AP-41 | 애플리케이션 인벤토리 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | Initial | High | +| ZT-AP-42 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가/관리할 수 있는가? | Advanced | Medium | +| ZT-AP-43 | 애플리케이션 인벤토리 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | Optimal | Low | +| ZT-AP-44 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-AP-45 | 보안 소프트웨어 개발 및 통합 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | Traditional | Critical | +| ZT-AP-46 | 보안 소프트웨어 개발 및 통합 | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | Traditional | Critical | +| ZT-AP-47 | 보안 소프트웨어 개발 및 통합 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | Initial | High | +| ZT-AP-48 | 보안 소프트웨어 개발 및 통합 | DevSecOps 문화를 도입하였는가? | Initial | High | +| ZT-AP-49 | 보안 소프트웨어 개발 및 통합 | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | Initial | High | +| ZT-AP-50 | 보안 소프트웨어 개발 및 통합 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | Advanced | Medium | +| ZT-AP-51 | 보안 소프트웨어 개발 및 통합 | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | Advanced | Medium | +| ZT-AP-52 | 보안 소프트웨어 개발 및 통합 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | Optimal | Low | +| ZT-AP-53 | 보안 소프트웨어 개발 및 통합 | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | Optimal | Low | +| ZT-AP-54 | 보안 소프트웨어 개발 및 통합 | 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-55 | 소프트웨어 위험 관리 | 최소한의 위험 요소가 식별되고 문서화 하였는가? | Traditional | Critical | +| ZT-AP-56 | 소프트웨어 위험 관리 | 소프트웨어 위험 관리 계획이 수립되어 있는가? | Traditional | Critical | +| ZT-AP-57 | 소프트웨어 위험 관리 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | Initial | High | +| ZT-AP-58 | 소프트웨어 위험 관리 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | Advanced | Medium | +| ZT-AP-59 | 소프트웨어 위험 관리 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | Optimal | Low | +| ZT-AP-60 | 소프트웨어 위험 관리 | 맞춤형 공격에 대응 가능한가? | Optimal | Low | + +### AP Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 리소스 권한 부여 및 통합 | 수동 권한 관리, 정적 접근제어 | 중앙 집중식 관리 | 컨텍스트 기반 최소 권한, 정밀 관리 | 실시간 분석, 자동 권한 부여/회수, 완전 자동화 | +| 지속적인 모니터링 및 승인 | 수동 모니터링, 수동 이벤트 기록 | 실시간 이벤트 수집/분석, 보안 검토 | AI 분석, 승인 자동화 | 실시간 탐지, 위협 사전 예측 | +| 원격 접속 | VPN 외부 접속, 제한적 접근제어 | 자동 보안 상태 평가 | 실시간 모니터링, 맞춤형 정책 | 동적 보안 정책, AI 고도화, 즉각 차단 | +| 안전한 애플리케이션 배포 | 수동 코드 검토, 배포 절차, 접근제어 | 자동화 파이프라인, CI/CD 취약점 검사, 무결성 검사 | 지속적 모니터링, 정책 자동 검증, 즉각 대응 | 완전 자동 배포, AI 위협 탐지 통합 | +| 애플리케이션 인벤토리 | 수동 목록화, 기본 정보 기록 | 자동 식별/관리 | 보안 상태 평가/관리 | AI 실시간 반영, 보안 시스템 통합 | +| 보안 SW 개발 및 통합 | 보안 코딩 표준, 수동 테스트 | SDLC 통합, DevSecOps, SBOM | 서드파티 자동 검사, 전체 SBOM | 프로세스 격리, 런타임 분석, 완전 자동화 | +| 소프트웨어 위험 관리 | 위험 식별/문서화, 관리 계획 | 위험 평가 프로세스 | 공급망 보안, 전주기 자동화 | AI 예측 분석, 맞춤형 공격 대응 | + +--- + +## DA — 데이터 (Data) (58 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DA-01 | 데이터 카탈로그 위험 정렬 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | Traditional | Critical | +| ZT-DA-02 | 데이터 카탈로그 위험 정렬 | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | Traditional | Critical | +| ZT-DA-03 | 데이터 카탈로그 위험 정렬 | 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | Traditional | Critical | +| ZT-DA-04 | 데이터 카탈로그 위험 정렬 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | Initial | High | +| ZT-DA-05 | 데이터 카탈로그 위험 정렬 | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | Initial | High | +| ZT-DA-06 | 데이터 카탈로그 위험 정렬 | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | Initial | High | +| ZT-DA-07 | 데이터 카탈로그 위험 정렬 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | Advanced | Medium | +| ZT-DA-08 | 데이터 카탈로그 위험 정렬 | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-DA-09 | 데이터 카탈로그 위험 정렬 | 데이터 사용 패턴 분석이 가능한가? | Advanced | Medium | +| ZT-DA-10 | 데이터 카탈로그 위험 정렬 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | Optimal | Low | +| ZT-DA-11 | 데이터 카탈로그 위험 정렬 | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | Optimal | Low | +| ZT-DA-12 | 기업 데이터 거버넌스 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | Traditional | Critical | +| ZT-DA-13 | 기업 데이터 거버넌스 | 데이터 소유자와 관리자를 지정하였는가? | Traditional | Critical | +| ZT-DA-14 | 기업 데이터 거버넌스 | 데이터 거버넌스 프레임워크가 도입되어 있는가? | Traditional | Critical | +| ZT-DA-15 | 기업 데이터 거버넌스 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | Initial | High | +| ZT-DA-16 | 기업 데이터 거버넌스 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | Advanced | Medium | +| ZT-DA-17 | 기업 데이터 거버넌스 | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | Advanced | Medium | +| ZT-DA-18 | 기업 데이터 거버넌스 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | Optimal | Low | +| ZT-DA-19 | 데이터 접근제어 | 데이터 접근 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-20 | 데이터 접근제어 | 데이터 접근권한이 수동으로 부여되는가? | Traditional | Critical | +| ZT-DA-21 | 데이터 접근제어 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-22 | 데이터 접근제어 | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | Initial | High | +| ZT-DA-23 | 데이터 접근제어 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | Advanced | Medium | +| ZT-DA-24 | 데이터 접근제어 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-25 | 데이터 암호화 및 권한 관리 | 데이터를 수동으로 암호화하는가? | Traditional | Critical | +| ZT-DA-26 | 데이터 암호화 및 권한 관리 | 암호화 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-27 | 데이터 암호화 및 권한 관리 | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-28 | 데이터 암호화 및 권한 관리 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | Initial | High | +| ZT-DA-29 | 데이터 암호화 및 권한 관리 | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-30 | 데이터 암호화 및 권한 관리 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | Advanced | Medium | +| ZT-DA-31 | 데이터 암호화 및 권한 관리 | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | Advanced | Medium | +| ZT-DA-32 | 데이터 암호화 및 권한 관리 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-33 | 데이터 암호화 및 권한 관리 | 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | Optimal | Low | +| ZT-DA-34 | 데이터 라벨링 및 태그 지정 | 라벨링 및 태그 지정 지침을 수립하였는가? | Traditional | Critical | +| ZT-DA-35 | 데이터 라벨링 및 태그 지정 | 일관된 데이터 분류 체계가 마련되어 있는가? | Traditional | Critical | +| ZT-DA-36 | 데이터 라벨링 및 태그 지정 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별/분류하는가? | Initial | High | +| ZT-DA-37 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | Initial | High | +| ZT-DA-38 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | Initial | High | +| ZT-DA-39 | 데이터 라벨링 및 태그 지정 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류/식별 가능한가? | Advanced | Medium | +| ZT-DA-40 | 데이터 라벨링 및 태그 지정 | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | Advanced | Medium | +| ZT-DA-41 | 데이터 라벨링 및 태그 지정 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | Optimal | Low | +| ZT-DA-42 | 데이터 라벨링 및 태그 지정 | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | Optimal | Low | +| ZT-DA-43 | 데이터 손실 방지 (DLP) | DLP 정책을 수립하고 수동으로 평가하는가? | Traditional | Critical | +| ZT-DA-44 | 데이터 손실 방지 (DLP) | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | Traditional | Critical | +| ZT-DA-45 | 데이터 손실 방지 (DLP) | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | Initial | High | +| ZT-DA-46 | 데이터 손실 방지 (DLP) | DLP 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-DA-47 | 데이터 손실 방지 (DLP) | DLP 솔루션이 모니터링 모드로 동작하는가? | Initial | High | +| ZT-DA-48 | 데이터 손실 방지 (DLP) | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | Advanced | Medium | +| ZT-DA-49 | 데이터 손실 방지 (DLP) | DLP 솔루션이 방지 모드로 사용되는가? | Advanced | Medium | +| ZT-DA-50 | 데이터 손실 방지 (DLP) | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | Optimal | Low | +| ZT-DA-51 | 데이터 손실 방지 (DLP) | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | Optimal | Low | +| ZT-DA-52 | 데이터 모니터링 및 감지 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | Traditional | Critical | +| ZT-DA-53 | 데이터 모니터링 및 감지 | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-54 | 데이터 모니터링 및 감지 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | Initial | High | +| ZT-DA-55 | 데이터 모니터링 및 감지 | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | Initial | High | +| ZT-DA-56 | 데이터 모니터링 및 감지 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-DA-57 | 데이터 모니터링 및 감지 | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | Advanced | Medium | +| ZT-DA-58 | 데이터 모니터링 및 감지 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | Optimal | Low | + +### DA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 데이터 카탈로그 위험 정렬 | 초기 카탈로그, 수동 분류, 위험 평가 문서화 | 자동 카탈로그, 자동 수집/분류, 기준 마련 | 민감도 분석, 보호 정책, 패턴 분석 | AI 실시간 분석, 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 정책 수립, 소유자 지정, 프레임워크 | 정기적 감사/검토 | 자동화, 실시간 모니터링 | 전체 시스템 통합 관리 | +| 데이터 접근제어 | 접근 정책 수립, 수동 권한 부여 | 중앙 집중식, 최소 권한 확인 | ABAC 컨텍스트 기반 | AI 실시간 권한 조정 | +| 데이터 암호화 및 권한 관리 | 수동 암호화, 정책 수립, 초기 관리 체계 | 자동 암호화, 중앙 집중식 관리 | 고급 암호화, RBAC+ABAC | AI 기반 최적화, 실시간 마스킹 | +| 데이터 라벨링 및 태그 지정 | 지침 수립, 분류 체계 마련 | 수동 라벨링, 특수 라벨, 차등 정책 | 자동 분류, 보안 시스템 연계 | 고급 메타데이터, AI 자동 조정 | +| 데이터 손실 방지 (DLP) | DLP 정책, 범위 지정 | DLP 도입, 중앙 관리, 모니터링 모드 | 전체 도입, 방지 모드 | AI 예측/차단, 자동 정책 최적화 | +| 데이터 모니터링 및 감지 | 수동 모니터링, 프로세스 수립 | 자동 감시, 정책 조정 | 이상 징후 탐지, 보안 시스템 연계 | 지속 평가, 컨텍스트 최소 접근제어 | + +--- + +## Total: 118 Items (AP: 60 + DA: 58) diff --git a/skills/kesekit-fix/templates/zero-trust/identity-device.md b/skills/kesekit-fix/templates/zero-trust/identity-device.md new file mode 100644 index 0000000..80e1800 --- /dev/null +++ b/skills/kesekit-fix/templates/zero-trust/identity-device.md @@ -0,0 +1,133 @@ +# Identity & Device Checklist + +> Zero Trust Maturity Assessment — Identity (ID) & Device (DV) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## ID — 식별자 및 신원 (Identity) (53 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-ID-01 | 사용자 인벤토리 | 사용자 목록에 대한 문서화가 되어있는가? | Traditional | Critical | +| ZT-ID-02 | 사용자 인벤토리 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | Initial | High | +| ZT-ID-03 | 사용자 인벤토리 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | Advanced | Medium | +| ZT-ID-04 | 사용자 인벤토리 | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | Advanced | Medium | +| ZT-ID-05 | 사용자 인벤토리 | AI 기반 사용자 행동에 따른 관리가 되는가? | Optimal | Low | +| ZT-ID-06 | 사용자 인벤토리 | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | Optimal | Low | +| ZT-ID-07 | ID 연계 및 사용자 자격 증명 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-08 | ID 연계 및 사용자 자격 증명 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | Initial | High | +| ZT-ID-09 | ID 연계 및 사용자 자격 증명 | ID 통합 관리 시스템이 구축되어 있는가? | Advanced | Medium | +| ZT-ID-10 | ID 연계 및 사용자 자격 증명 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | Optimal | Low | +| ZT-ID-11 | 다중인증 (MFA) | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-12 | 다중인증 (MFA) | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | Initial | High | +| ZT-ID-13 | 다중인증 (MFA) | FIDO 기반 인증 기법이 적용되어 있는가? | Initial | High | +| ZT-ID-14 | 다중인증 (MFA) | 상황에 따른 맞춤형 MFA가 지원 가능한가? | Advanced | Medium | +| ZT-ID-15 | 다중인증 (MFA) | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-16 | 다중인증 (MFA) | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | Optimal | Low | +| ZT-ID-17 | 지속 인증 | 세션 기반 인증이 수행되는가? | Traditional | Critical | +| ZT-ID-18 | 지속 인증 | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | Traditional | Critical | +| ZT-ID-19 | 지속 인증 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-20 | 지속 인증 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | Advanced | Medium | +| ZT-ID-21 | 지속 인증 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | Optimal | Low | +| ZT-ID-22 | 통합 ICAM 플랫폼 | ICAM 시스템이 구축되어 있는가? | Traditional | Critical | +| ZT-ID-23 | 통합 ICAM 플랫폼 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | Initial | High | +| ZT-ID-24 | 통합 ICAM 플랫폼 | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | Initial | High | +| ZT-ID-25 | 통합 ICAM 플랫폼 | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | Initial | High | +| ZT-ID-26 | 통합 ICAM 플랫폼 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | Advanced | Medium | +| ZT-ID-27 | 통합 ICAM 플랫폼 | ICAM 플랫폼이 자동화되어 있는가? | Advanced | Medium | +| ZT-ID-28 | 통합 ICAM 플랫폼 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | Optimal | Low | +| ZT-ID-29 | 통합 ICAM 플랫폼 | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | Optimal | Low | +| ZT-ID-30 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-31 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자 행동 패턴이 수동으로 분석되는가? | Traditional | Critical | +| ZT-ID-32 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | Initial | High | +| ZT-ID-33 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 컨텍스트 정보 기반 접근권한이 조정되는가? | Initial | High | +| ZT-ID-34 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | Advanced | Medium | +| ZT-ID-35 | 행동, 컨텍스트 기반 ID 및 생체 인식 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | Optimal | Low | +| ZT-ID-36 | 조건부 사용자 접근 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | Traditional | Critical | +| ZT-ID-37 | 조건부 사용자 접근 | 조건부 접근 정책에 대한 개념을 정의하였는가? | Traditional | Critical | +| ZT-ID-38 | 조건부 사용자 접근 | 시스템 별 각기 다른 접속 관리 기능이 있는가? | Traditional | Critical | +| ZT-ID-39 | 조건부 사용자 접근 | 특정 조건에 따른 사용자 접근제어가 가능한가? | Initial | High | +| ZT-ID-40 | 조건부 사용자 접근 | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | Initial | High | +| ZT-ID-41 | 조건부 사용자 접근 | 세션별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-42 | 조건부 사용자 접근 | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-43 | 조건부 사용자 접근 | 리소스별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-44 | 조건부 사용자 접근 | 동적 접근 정책을 실시간으로 적용 가능한가? | Optimal | Low | +| ZT-ID-45 | 조건부 사용자 접근 | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | Optimal | Low | +| ZT-ID-46 | 최소 권한 접근 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | Traditional | Critical | +| ZT-ID-47 | 최소 권한 접근 | 권한 부여에 대한 절차가 문서화 되어 있는가? | Traditional | Critical | +| ZT-ID-48 | 최소 권한 접근 | 권한 부여 절차가 표준화 되어 있는가? | Initial | High | +| ZT-ID-49 | 최소 권한 접근 | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-50 | 최소 권한 접근 | 자동화된 권한 상승이 가능한가? | Advanced | Medium | +| ZT-ID-51 | 최소 권한 접근 | 권한 관리 정책이 지속적으로 업데이트 되는가? | Advanced | Medium | +| ZT-ID-52 | 최소 권한 접근 | 권한 관리가 동적으로 변경 가능한가? | Optimal | Low | +| ZT-ID-53 | 최소 권한 접근 | 최소 권한 원칙이 실시간으로 조정 가능한가? | Optimal | Low | + +### ID Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 사용자 인벤토리 | 사용자 목록 문서화 | 역할별 상세 인벤토리 | 자동화 관리, 비정상 활동 탐지 | AI 기반 관리, 통합 최적화 | +| ID 연계 및 사용자 자격 증명 | ID 연계 솔루션 적용 | 시스템 간 연동 | 통합 관리 시스템 | 글로벌 수준 연계 | +| 다중인증 (MFA) | 패스워드+SMS/이메일 MFA | 인증 앱/토큰, FIDO | 맞춤형 MFA, 컨텍스트 인증 | 비정상 로그인 실시간 탐지 | +| 지속 인증 | 세션 기반 인증, 상태 모니터링 | 세션 중간 추가 인증 | 동적 인증 기술 | 자동 재인증, 실시간 검증 | +| 통합 ICAM 플랫폼 | ICAM 시스템 구축 | 중앙 관리, 정책 표준화, 위험도 평가 | 시스템 통합 안정화, 자동화 | AI 기반 보안 강화, 실시간 ID 위험 평가 | +| 행동/컨텍스트 기반 ID 및 생체 인식 | 기본 생체 인식, 수동 행동 분석 | 통합 인증, 컨텍스트 접근권한 | 실시간 접근제어 조정 | AI 기반 행동/생체 인식 | +| 조건부 사용자 접근 | 기초 시스템, 개념 정의, 접속 관리 | 조건부 접근제어, 최소 권한 | 세션/리소스별 권한, 다단계 정책 | 동적 정책, AI 실시간 관리 | +| 최소 권한 접근 | 원칙 정의, 절차 문서화 | 표준화, 변경 관리 시스템 | 자동 권한 상승, 정책 업데이트 | 동적 변경, 실시간 조정 | + +--- + +## DV — 기기 및 엔드포인트 (Device) (40 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DV-01 | 기기 감지 및 규정 준수 | 리소스에 연결된 기기를 식별할 수 있는가? | Traditional | Critical | +| ZT-DV-02 | 기기 감지 및 규정 준수 | 수동으로 규정 준수에 대한 확인이 가능한가? | Traditional | Critical | +| ZT-DV-03 | 기기 감지 및 규정 준수 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | Initial | High | +| ZT-DV-04 | 기기 감지 및 규정 준수 | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | Initial | High | +| ZT-DV-05 | 기기 감지 및 규정 준수 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | Advanced | Medium | +| ZT-DV-06 | 기기 감지 및 규정 준수 | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-DV-07 | 기기 감지 및 규정 준수 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | Optimal | Low | +| ZT-DV-08 | 기기 감지 및 규정 준수 | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | Optimal | Low | +| ZT-DV-09 | 실시간 검사를 통한 기기 권한 부여 | 자산 접근 기기에 대한 정보가 수집되는가? | Traditional | Critical | +| ZT-DV-10 | 실시간 검사를 통한 기기 권한 부여 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | Initial | High | +| ZT-DV-11 | 실시간 검사를 통한 기기 권한 부여 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | Advanced | Medium | +| ZT-DV-12 | 실시간 검사를 통한 기기 권한 부여 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | Optimal | Low | +| ZT-DV-13 | 실시간 검사를 통한 기기 권한 부여 | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | Optimal | Low | +| ZT-DV-14 | 기기 인벤토리 | 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | Traditional | Critical | +| ZT-DV-15 | 기기 인벤토리 | 주요 기기에 대한 정보를 수집하고 관리하는가? | Traditional | Critical | +| ZT-DV-16 | 기기 인벤토리 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | Initial | High | +| ZT-DV-17 | 기기 인벤토리 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | Advanced | Medium | +| ZT-DV-18 | 기기 인벤토리 | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | Advanced | Medium | +| ZT-DV-19 | 기기 인벤토리 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | Optimal | Low | +| ZT-DV-20 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | Traditional | Critical | +| ZT-DV-21 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 보안 정책을 설정하였는가? | Traditional | Critical | +| ZT-DV-22 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | Initial | High | +| ZT-DV-23 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기기 상태를 지속적으로 모니터링 하는가? | Initial | High | +| ZT-DV-24 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | Advanced | Medium | +| ZT-DV-25 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | Optimal | Low | +| ZT-DV-26 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | 기본적인 EDR 솔루션을 도입하였는가? | Traditional | Critical | +| ZT-DV-27 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | Initial | High | +| ZT-DV-28 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | XDR 솔루션을 도입하였는가? | Advanced | Medium | +| ZT-DV-29 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | AI 기반 EDR/XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | Optimal | Low | +| ZT-DV-30 | 자산, 취약성 및 패치 관리 자동화 | 자산 및 취약성을 수동으로 평가하는가? | Traditional | Critical | +| ZT-DV-31 | 자산, 취약성 및 패치 관리 자동화 | 주요 자산 및 취약성 목록이 작성되어 있는가? | Traditional | Critical | +| ZT-DV-32 | 자산, 취약성 및 패치 관리 자동화 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | Initial | High | +| ZT-DV-33 | 자산, 취약성 및 패치 관리 자동화 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | Advanced | Medium | +| ZT-DV-34 | 자산, 취약성 및 패치 관리 자동화 | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | Advanced | Medium | +| ZT-DV-35 | 자산, 취약성 및 패치 관리 자동화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | Optimal | Low | +| ZT-DV-36 | 자산, 취약성 및 패치 관리 자동화 | 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | Optimal | Low | + +### DV Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 기기 감지 및 규정 준수 | 기기 식별, 수동 규정 확인 | 실시간 탐지, 비준수 경고 | 자동 교정, 접근권한 연동 | 동적 권한 수정, AI 실시간 평가 | +| 실시간 검사를 통한 기기 권한 부여 | 기기 정보 수집 | 수동 검사 수행 | 자동 평가 및 접근 허용 | 접근권한 조정, 보안 시스템 연동 | +| 기기 인벤토리 | 수동 인벤토리, 정보 수집 | 자동화 기록 | 비정상 기기 탐지, 취약점 파악 | 실시간 모니터링, 예측 분석 | +| 통합 엔드포인트/모바일 기기 관리 | 관리 시스템 도입, 보안 정책 설정 | 중앙 관리, 지속 모니터링 | 중앙 자동 적용 | 통합 관리, 자동 위협 대응 | +| EDR 및 XDR | 기본 EDR 도입 | 실시간 탐지/자동 대응 | XDR 도입 | AI 기반 통합 위협 탐지 | +| 자산/취약성/패치 관리 자동화 | 수동 평가, 목록 작성 | 자동 패치 도입 | 지속적 자동화, 시스템 통합 | 사전 식별, 통합 관리 | + +--- + +## Total: 89 Items (ID: 53 + DV: 36) diff --git a/skills/kesekit-fix/templates/zero-trust/network-system.md b/skills/kesekit-fix/templates/zero-trust/network-system.md new file mode 100644 index 0000000..89cef54 --- /dev/null +++ b/skills/kesekit-fix/templates/zero-trust/network-system.md @@ -0,0 +1,145 @@ +# Network & System Checklist + +> Zero Trust Maturity Assessment — Network (NW) & System (SY) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## NW — 네트워크 (Network) (54 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-NW-01 | 매크로 세그멘테이션 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-02 | 매크로 세그멘테이션 | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | Traditional | Critical | +| ZT-NW-03 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | Initial | High | +| ZT-NW-04 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | Initial | High | +| ZT-NW-05 | 매크로 세그멘테이션 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | Advanced | Medium | +| ZT-NW-06 | 매크로 세그멘테이션 | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | Advanced | Medium | +| ZT-NW-07 | 매크로 세그멘테이션 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | Optimal | Low | +| ZT-NW-08 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-09 | 마이크로 세그멘테이션 | 수동으로 세그먼트를 구성하는가? | Traditional | Critical | +| ZT-NW-10 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | Initial | High | +| ZT-NW-11 | 마이크로 세그멘테이션 | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지/차단 할 수 있는가? | Initial | High | +| ZT-NW-12 | 마이크로 세그멘테이션 | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | Initial | High | +| ZT-NW-13 | 마이크로 세그멘테이션 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | Advanced | Medium | +| ZT-NW-14 | 마이크로 세그멘테이션 | 애플리케이션 별 격리 메커니즘이 적용되었는가? | Advanced | Medium | +| ZT-NW-15 | 마이크로 세그멘테이션 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | Optimal | Low | +| ZT-NW-16 | 소프트웨어 정의 네트워킹 | 소프트웨어 정의 네트워크가 도입되어 있는가? | Traditional | Critical | +| ZT-NW-17 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | Traditional | Critical | +| ZT-NW-18 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | Initial | High | +| ZT-NW-19 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | Advanced | Medium | +| ZT-NW-20 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | Optimal | Low | +| ZT-NW-21 | 위협 대응 | IDS/IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | Traditional | Critical | +| ZT-NW-22 | 위협 대응 | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | Traditional | Critical | +| ZT-NW-23 | 위협 대응 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | Initial | High | +| ZT-NW-24 | 위협 대응 | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | Initial | High | +| ZT-NW-25 | 위협 대응 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | Advanced | Medium | +| ZT-NW-26 | 위협 대응 | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | Advanced | Medium | +| ZT-NW-27 | 위협 대응 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | Optimal | Low | +| ZT-NW-28 | 위협 대응 | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | Optimal | Low | +| ZT-NW-29 | 트래픽 암호화 | 내/외부 트래픽 일부 암호화가 가능한가? | Traditional | Critical | +| ZT-NW-30 | 트래픽 암호화 | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | Traditional | Critical | +| ZT-NW-31 | 트래픽 암호화 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | Initial | High | +| ZT-NW-32 | 트래픽 암호화 | 데이터 전송 시 암호화를 필수로 하고 있는가? | Initial | High | +| ZT-NW-33 | 트래픽 암호화 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | Advanced | Medium | +| ZT-NW-34 | 트래픽 암호화 | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | Advanced | Medium | +| ZT-NW-35 | 트래픽 암호화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | Optimal | Low | +| ZT-NW-36 | 트래픽 암호화 | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-NW-37 | 데이터 흐름 매핑 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | Traditional | Critical | +| ZT-NW-38 | 데이터 흐름 매핑 | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | Traditional | Critical | +| ZT-NW-39 | 데이터 흐름 매핑 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | Initial | High | +| ZT-NW-40 | 데이터 흐름 매핑 | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | Initial | High | +| ZT-NW-41 | 데이터 흐름 매핑 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | Advanced | Medium | +| ZT-NW-42 | 데이터 흐름 매핑 | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | Advanced | Medium | +| ZT-NW-43 | 데이터 흐름 매핑 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | Optimal | Low | +| ZT-NW-44 | 데이터 흐름 매핑 | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | Optimal | Low | +| ZT-NW-45 | 네트워크 회복성 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | Traditional | Critical | +| ZT-NW-46 | 네트워크 회복성 | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | Traditional | Critical | +| ZT-NW-47 | 네트워크 회복성 | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | Traditional | Critical | +| ZT-NW-48 | 네트워크 회복성 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | Initial | High | +| ZT-NW-49 | 네트워크 회복성 | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | Initial | High | +| ZT-NW-50 | 네트워크 회복성 | 네트워크 이중화 설계가 되어 있는가? | Initial | High | +| ZT-NW-51 | 네트워크 회복성 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | Advanced | Medium | +| ZT-NW-52 | 네트워크 회복성 | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | Advanced | Medium | +| ZT-NW-53 | 네트워크 회복성 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | Optimal | Low | +| ZT-NW-54 | 네트워크 회복성 | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | Optimal | Low | + +### NW Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 매크로 세그멘테이션 | 영역별 세그멘테이션, 트래픽 흐름 기반 구성 | 보안 정책 적용, 비정상 활동 탐지 | 맞춤형 정책, 위협 대응 | AI 기반 관리 | +| 마이크로 세그멘테이션 | 워크로드 기준 세그멘테이션, 수동 구성 | 보안 정책, 워크로드 이동 탐지/차단, 모니터링 | 정책 설정/제어, 격리 메커니즘 | AI 기반 자동 대응 | +| 소프트웨어 정의 네트워킹 | SDN 도입, 기본 구조 설정 | 중앙 관리, 실시간 정책 | 트래픽 관리/보안 확장 | AI 기반 위협 관리/트래픽 예측 | +| 위협 대응 | IDS/IPS 감시, 정적 규칙 관리 | 자동 탐지/대응, 프로파일 관리 | 선제적 대응, 동적 규칙 | 즉각 자동 대응, 동적 트래픽 관리 | +| 트래픽 암호화 | 일부 암호화, SSL/TLS/VPN | 전반 암호화, 전송 필수 암호화 | 저장 데이터 암호화, 고급 키 관리 | 성능 유지 보호, 통합 키 관리 | +| 데이터 흐름 매핑 | 수동 모니터링, 수동 매핑 | 애플리케이션 단위 매핑, 실시간 매핑 | 비정상 이동 탐지, 상관관계 분석 | AI 예측 분석, 동적 우선순위 | +| 네트워크 회복성 | 복구 계획, 백업, 장애 대응 절차 | 다중 경로, Failover, 이중화 | 지속적 서비스, 주기적 테스트 | 중단 없는 운영, 자동화 복구 | + +--- + +## SY — 시스템 (System) (49 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-SY-01 | 접근통제 | 사용자 및 기기에 수동으로 권한을 부여하는가? | Traditional | Critical | +| ZT-SY-02 | 접근통제 | RBAC 기반 접근제어를 수행하는가? | Traditional | Critical | +| ZT-SY-03 | 접근통제 | 권한 관리를 수동으로 수행하는가? | Traditional | Critical | +| ZT-SY-04 | 접근통제 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | Initial | High | +| ZT-SY-05 | 접근통제 | 실시간 접근권한 부여가 가능한가? | Initial | High | +| ZT-SY-06 | 접근통제 | 권한 변경 사항이 자동으로 반영되는가? | Initial | High | +| ZT-SY-07 | 접근통제 | 특정 리소스에 대한 접근 제한/승인 정책이 자동으로 적용 가능한가? | Initial | High | +| ZT-SY-08 | 접근통제 | ABAC 기반 접근제어를 수행하는가? | Advanced | Medium | +| ZT-SY-09 | 접근통제 | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | Advanced | Medium | +| ZT-SY-10 | 접근통제 | 사용자/기기의 상태를 실시간으로 분석하고 실시간/자동으로 권한 조정이 가능한가? | Optimal | Low | +| ZT-SY-11 | 접근통제 | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | Optimal | Low | +| ZT-SY-12 | 접근통제 | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | Optimal | Low | +| ZT-SY-13 | 접근통제 | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | Optimal | Low | +| ZT-SY-14 | PAM | PAM 시스템을 구축하였는가? | Traditional | Critical | +| ZT-SY-15 | PAM | PAM 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-SY-16 | PAM | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | Initial | High | +| ZT-SY-17 | PAM | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | Initial | High | +| ZT-SY-18 | PAM | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | Advanced | Medium | +| ZT-SY-19 | PAM | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | Optimal | Low | +| ZT-SY-20 | 자격 증명 관리 | 자격 증명이 수동으로 관리되는가? | Traditional | Critical | +| ZT-SY-21 | 자격 증명 관리 | 패스워드에 기반한 인증 방식에 의존하는가? | Traditional | Critical | +| ZT-SY-22 | 자격 증명 관리 | 자격 증명 관리가 체계적이지 않고 수동적인가? | Traditional | Critical | +| ZT-SY-23 | 자격 증명 관리 | 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | Initial | High | +| ZT-SY-24 | 자격 증명 관리 | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | Initial | High | +| ZT-SY-25 | 자격 증명 관리 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | Advanced | Medium | +| ZT-SY-26 | 자격 증명 관리 | 자격 증명 관리 시스템을 고도화하여 관리하는가? | Advanced | Medium | +| ZT-SY-27 | 자격 증명 관리 | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | Advanced | Medium | +| ZT-SY-28 | 자격 증명 관리 | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | Advanced | Medium | +| ZT-SY-29 | 자격 증명 관리 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | Optimal | Low | +| ZT-SY-30 | 자격 증명 관리 | 실시간으로 인증 정책 조정이 가능한가? | Optimal | Low | +| ZT-SY-31 | 자격 증명 관리 | 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | Optimal | Low | +| ZT-SY-32 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | Traditional | Critical | +| ZT-SY-33 | 네트워크 세분화 및 그룹 간 이동 | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | Traditional | Critical | +| ZT-SY-34 | 네트워크 세분화 및 그룹 간 이동 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | Initial | High | +| ZT-SY-35 | 네트워크 세분화 및 그룹 간 이동 | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | Initial | High | +| ZT-SY-36 | 네트워크 세분화 및 그룹 간 이동 | 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | Advanced | Medium | +| ZT-SY-37 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | Advanced | Medium | +| ZT-SY-38 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | Advanced | Medium | +| ZT-SY-39 | 네트워크 세분화 및 그룹 간 이동 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | Optimal | Low | +| ZT-SY-40 | 네트워크 세분화 및 그룹 간 이동 | 재인증 없는 그룹 간 이동이 가능한가? | Optimal | Low | +| ZT-SY-41 | 네트워크 세분화 및 그룹 간 이동 | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | Optimal | Low | +| ZT-SY-42 | 시스템 환경에 따른 정책 관리 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | Traditional | Critical | +| ZT-SY-43 | 시스템 환경에 따른 정책 관리 | 수동으로 보안 정책을 유지/관리하고 있는가? | Traditional | Critical | +| ZT-SY-44 | 시스템 환경에 따른 정책 관리 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | Initial | High | +| ZT-SY-45 | 시스템 환경에 따른 정책 관리 | 정책이 자동으로 적용되는가? | Initial | High | +| ZT-SY-46 | 시스템 환경에 따른 정책 관리 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | Advanced | Medium | +| ZT-SY-47 | 시스템 환경에 따른 정책 관리 | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | Advanced | Medium | +| ZT-SY-48 | 시스템 환경에 따른 정책 관리 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | Optimal | Low | +| ZT-SY-49 | 시스템 환경에 따른 정책 관리 | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | Optimal | Low | + +### SY Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 접근통제 | 수동 권한 부여, RBAC | 중앙 집중 권한, 실시간 부여, 자동 반영 | ABAC, 동적 실시간 권한 | 실시간 분석/조정, 신뢰도 재산정, 위험 분석 기반 | +| PAM | PAM 시스템/정책 구축 | 모니터링/제어, 자동 승인 | 비정상 활동 탐지 | AI 기반 위협 탐지/대응 | +| 자격 증명 관리 | 수동 관리, 패스워드 의존 | 중앙 자동화, MFA | 생체 인증, 고도화, 무결성, AI 분석 | 실시간 차단/정책 조정, 자율 운영 | +| 네트워크 세분화 및 그룹 간 이동 | 통제 미흡, 경계형 모델 | 중요도 기반 분리, 이동 제어 | 워크로드별 세분화, 강력한 접근통제, 실시간 검사 | 실시간 분석/제어, 재인증 없는 이동, 자동 정책 | +| 시스템 환경에 따른 정책 관리 | 온프레미스 보안 정책, 수동 관리 | 클라우드 정책, 자동 적용 | 하이브리드 실시간 조정, 동적 변경 | 자율 정책, 완전 자동화 | + +--- + +## Total: 103 Items (NW: 54 + SY: 49) diff --git a/skills/kesekit-fix/templates/zero-trust/ot-environment.md b/skills/kesekit-fix/templates/zero-trust/ot-environment.md new file mode 100644 index 0000000..0331c34 --- /dev/null +++ b/skills/kesekit-fix/templates/zero-trust/ot-environment.md @@ -0,0 +1,51 @@ +# OT/ICS Zero Trust Environment Checklist + +> Zero Trust Maturity Assessment — OT/ICS (Operational Technology / Industrial Control Systems) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), IEC 62443, NIST SP 800-82 + +## OT/ICS Zero Trust Considerations + +OT/ICS environments require special Zero Trust deployment strategies due to: +- Legacy systems that cannot support modern authentication +- Real-time operational requirements (latency sensitivity) +- Safety-critical functions that must not be disrupted +- Air-gapped or semi-isolated network architectures +- Long equipment lifecycles (15-30 years) + +## OT-ZT Assessment Items + +| ID | Category | Verification | Maturity | Severity | +|----|----------|-------------|----------|----------| +| OT-ZT-01 | Network Segmentation | OT 네트워크와 IT 네트워크가 물리적/논리적으로 분리되어 있는가? | Traditional | Critical | +| OT-ZT-02 | Network Segmentation | DMZ를 통한 OT-IT 간 데이터 교환이 통제되고 있는가? | Traditional | Critical | +| OT-ZT-03 | Network Segmentation | Purdue Model 또는 IEC 62443 zone/conduit 기반 세그멘테이션이 적용되어 있는가? | Initial | High | +| OT-ZT-04 | Network Segmentation | 마이크로 세그멘테이션이 OT 환경 내부에 적용되어 있는가? | Advanced | Medium | +| OT-ZT-05 | Network Segmentation | SDN 기반 동적 세그멘테이션이 OT 환경에 적용 가능한가? | Optimal | Low | +| OT-ZT-06 | Identity & Access | OT 시스템 접근에 대한 사용자 인증이 수행되는가? | Traditional | Critical | +| OT-ZT-07 | Identity & Access | OT 전용 계정 관리 및 최소 권한 원칙이 적용되어 있는가? | Initial | High | +| OT-ZT-08 | Identity & Access | OT 환경에서 MFA가 적용되어 있는가 (물리적 토큰 포함)? | Initial | High | +| OT-ZT-09 | Identity & Access | OT 원격 접속에 대한 별도 인증 및 모니터링이 수행되는가? | Advanced | Medium | +| OT-ZT-10 | Identity & Access | 비정상적인 OT 접근 시도에 대한 실시간 탐지 및 대응이 가능한가? | Optimal | Low | +| OT-ZT-11 | Device Management | OT 자산 인벤토리가 문서화되어 있는가? | Traditional | Critical | +| OT-ZT-12 | Device Management | OT 디바이스 식별 및 분류 체계가 구축되어 있는가? | Initial | High | +| OT-ZT-13 | Device Management | OT 디바이스 보안 상태 자동 모니터링이 가능한가? | Advanced | Medium | +| OT-ZT-14 | Device Management | 레거시 OT 장비에 대한 보안 래퍼/프록시가 적용되어 있는가? | Advanced | Medium | +| OT-ZT-15 | Device Management | AI 기반 OT 자산 관리 및 이상 탐지가 가능한가? | Optimal | Low | +| OT-ZT-16 | Communication Security | OT 프로토콜(Modbus, OPC UA, DNP3 등) 트래픽이 모니터링되는가? | Traditional | Critical | +| OT-ZT-17 | Communication Security | OT 통신에 대한 암호화가 적용되어 있는가 (가능한 경우)? | Initial | High | +| OT-ZT-18 | Communication Security | OT 프로토콜 이상 탐지(DPI) 시스템이 도입되어 있는가? | Advanced | Medium | +| OT-ZT-19 | Communication Security | OT 환경 전용 위협 인텔리전스가 적용되어 있는가? | Optimal | Low | +| OT-ZT-20 | Safety & Availability | ZT 정책 적용 시 안전 기능(Safety Function)에 영향이 없는지 검증되었는가? | Traditional | Critical | +| OT-ZT-21 | Safety & Availability | ZT 정책 실패 시 fail-open/fail-safe 동작이 정의되어 있는가? | Initial | High | +| OT-ZT-22 | Safety & Availability | ZT 구성 변경에 대한 OT 영향도 분석 프로세스가 수립되어 있는가? | Advanced | Medium | +| OT-ZT-23 | Monitoring & Response | OT 환경 전용 SOC/보안 모니터링 체계가 수립되어 있는가? | Initial | High | +| OT-ZT-24 | Monitoring & Response | IT-OT 통합 보안 이벤트 분석이 가능한가? | Advanced | Medium | +| OT-ZT-25 | Monitoring & Response | OT 환경에 대한 자동화된 인시던트 대응이 가능한가? | Optimal | Low | + +## Deployment Strategy for OT + +1. **Phase 1 — Visibility**: Asset discovery, traffic mapping, baseline establishment +2. **Phase 2 — Segmentation**: IT-OT separation, zone/conduit implementation +3. **Phase 3 — Access Control**: Identity-based access, MFA for remote access +4. **Phase 4 — Monitoring**: Continuous monitoring, anomaly detection +5. **Phase 5 — Automation**: Automated response (with safety validation) diff --git a/skills/kesekit-fix/templates/zero-trust/overview.md b/skills/kesekit-fix/templates/zero-trust/overview.md new file mode 100644 index 0000000..0bdd288 --- /dev/null +++ b/skills/kesekit-fix/templates/zero-trust/overview.md @@ -0,0 +1,69 @@ +# Zero Trust Overview + +> Zero Trust Maturity Assessment — Overview & Assessment Guide +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), NIST SP 800-207, CISA ZT Maturity Model + +## Zero Trust Principles + +- **Never Trust, Always Verify**: Every access request must be authenticated and authorized regardless of network location +- **Assume Breach**: Minimize blast radius through microsegmentation and least-privilege access +- **Verify Explicitly**: Use all available data points (identity, location, device health, service/workload, data classification, anomalies) + +## 8 Core Elements + +| # | Element | Code | Items | +|---|---------|------|:-----:| +| 1 | Identity (식별자 및 신원) | ID | 53 | +| 2 | Device (디바이스 및 엔드포인트) | DV | ~50 | +| 3 | Network (네트워크) | NW | 54 | +| 4 | System (시스템) | SY | ~45 | +| 5 | Application (애플리케이션 및 워크로드) | AP | 60 | +| 6 | Data (데이터) | DA | ~50 | +| 7 | Visibility (가시성 및 분석) | VA | 43 | +| 8 | Automation (자동화 및 오케스트레이션) | AU | ~41 | + +**Total: ~396 items across 4 maturity levels** + +## 4 Maturity Levels + +| Level | Description | Target | +|-------|-------------|--------| +| **Traditional** | Perimeter-based security, manual processes | Baseline awareness | +| **Initial** | Some ZT controls adopted, partial automation | Early adopters | +| **Advanced** | Centralized management, context-aware policies, AI-assisted | Mature organizations | +| **Optimal** | Fully automated, real-time adaptive, AI-driven orchestration | Industry leaders | + +## Assessment Flow + +1. Determine target maturity level based on organizational goals +2. Select relevant core elements based on system context +3. Assess each item at or below the target maturity level +4. Items above target maturity level are informational (not scored) +5. Generate gap analysis comparing current state vs. target + +## Template Files + +| Topic | File | +|-------|------| +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | + +## Reference Files + +| Topic | File | +|-------|------| +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +## Judgment Criteria + +| Judgment | Description | +|----------|-------------| +| Pass (양호) | ZT control properly implemented at target maturity level | +| Partial (부분이행) | Control partially implemented, improvement needed | +| Fail (취약) | Control not implemented or significantly below target | +| N/A (해당없음) | Not applicable to the environment | diff --git a/skills/kesekit-fix/templates/zero-trust/visibility-automation.md b/skills/kesekit-fix/templates/zero-trust/visibility-automation.md new file mode 100644 index 0000000..7dca723 --- /dev/null +++ b/skills/kesekit-fix/templates/zero-trust/visibility-automation.md @@ -0,0 +1,128 @@ +# Visibility & Automation Checklist + +> Zero Trust Maturity Assessment — Visibility (VA) & Automation (AU) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## VA — 가시성 및 분석 (Visibility) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-VA-01 | 모든 관련 활동 기록 | 로그 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-VA-02 | 모든 관련 활동 기록 | 로그 데이터가 특정한 시스템에서만 수집되는가? | Traditional | Critical | +| ZT-VA-03 | 모든 관련 활동 기록 | 다양한 시스템에서 자동으로 로그를 수집하는가? | Initial | High | +| ZT-VA-04 | 모든 관련 활동 기록 | 로그 수집 및 관리가 자동화 되었는가? | Initial | High | +| ZT-VA-05 | 모든 관련 활동 기록 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-VA-06 | 모든 관련 활동 기록 | 로그 기록의 무결성을 보장하는가? | Advanced | Medium | +| ZT-VA-07 | 모든 관련 활동 기록 | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | Advanced | Medium | +| ZT-VA-08 | 모든 관련 활동 기록 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | Optimal | Low | +| ZT-VA-09 | 모든 관련 활동 기록 | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | Optimal | Low | +| ZT-VA-10 | 모든 관련 활동 기록 | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | Optimal | Low | +| ZT-VA-11 | 중앙집중적 보안 정보 및 이벤트 관리 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | Traditional | Critical | +| ZT-VA-12 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템이 도입되었는가? | Initial | High | +| ZT-VA-13 | 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 보안 관리 체계가 구축되었는가? | Initial | High | +| ZT-VA-14 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | Advanced | Medium | +| ZT-VA-15 | 중앙집중적 보안 정보 및 이벤트 관리 | AI 기반으로 보안 이벤트를 분석하는가? | Optimal | Low | +| ZT-VA-16 | 중앙집중적 보안 정보 및 이벤트 관리 | 비정상적인 활동에 대하여 자동 대응이 가능한가? | Optimal | Low | +| ZT-VA-17 | 보안 위협 분석 | 보안 로그 및 데이터를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-18 | 보안 위협 분석 | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-19 | 보안 위협 분석 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | Initial | High | +| ZT-VA-20 | 보안 위협 분석 | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | Initial | High | +| ZT-VA-21 | 보안 위협 분석 | 자동화된 보안 위협 분석 도구를 도입하였는가? | Advanced | Medium | +| ZT-VA-22 | 보안 위협 분석 | 실시간 보안 위협 탐지가 가능한가? | Advanced | Medium | +| ZT-VA-23 | 보안 위협 분석 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | Optimal | Low | +| ZT-VA-24 | 사용자 및 기기 동작 분석 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | Traditional | Critical | +| ZT-VA-25 | 사용자 및 기기 동작 분석 | 비정상 행동을 수동으로 탐지하는가? | Traditional | Critical | +| ZT-VA-26 | 사용자 및 기기 동작 분석 | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | Traditional | Critical | +| ZT-VA-27 | 사용자 및 기기 동작 분석 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | Initial | High | +| ZT-VA-28 | 사용자 및 기기 동작 분석 | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | Initial | High | +| ZT-VA-29 | 사용자 및 기기 동작 분석 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | Advanced | Medium | +| ZT-VA-30 | 사용자 및 기기 동작 분석 | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | Advanced | Medium | +| ZT-VA-31 | 사용자 및 기기 동작 분석 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | Optimal | Low | +| ZT-VA-32 | 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-33 | 위협 인텔리전스 통합 | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | Traditional | Critical | +| ZT-VA-34 | 위협 인텔리전스 통합 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | Initial | High | +| ZT-VA-35 | 위협 인텔리전스 통합 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | Advanced | Medium | +| ZT-VA-36 | 위협 인텔리전스 통합 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | Optimal | Low | +| ZT-VA-37 | 자동화된 동적 정책 | 보안 정책을 수동으로 관리하는가? | Traditional | Critical | +| ZT-VA-38 | 자동화된 동적 정책 | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | Traditional | Critical | +| ZT-VA-39 | 자동화된 동적 정책 | 자동화된 정책 관리 시스템을 도입하였는가? | Initial | High | +| ZT-VA-40 | 자동화된 동적 정책 | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | Initial | High | +| ZT-VA-41 | 자동화된 동적 정책 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | Advanced | Medium | +| ZT-VA-42 | 자동화된 동적 정책 | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | Advanced | Medium | +| ZT-VA-43 | 자동화된 동적 정책 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | Optimal | Low | + +### VA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 모든 관련 활동 기록 | 수동 로그, 특정 시스템 수집 | 자동 로그 수집, 관리 자동화 | 실시간 탐지, 무결성, 예측 분석 | 자율 보안, 정규화, 자동 정책 조정 | +| 중앙집중적 보안 정보/이벤트 관리 | 수동 분석 | SIEM 도입, 중앙 관리 | 보안 도구 연동 종합 분석 | AI 분석, 자동 대응 | +| 보안 위협 분석 | 수동 로그/CVE 수집 | 평가 기준, 자동 경고 | 자동화 분석, 실시간 탐지 | AI 예측 분석 | +| 사용자/기기 동작 분석 | 활동 데이터 수집, 수동 탐지, 패턴 기록 | 자동 분석 도구 도입 | 행동 분석 탐지, AI 실시간 대응 | 자동 정책 조정, 최소 권한 | +| 위협 인텔리전스 통합 | 수동 수집, 수동 연동 | 자동 통합 도구 | 내부 시스템 통합 | AI 기반 시스템 | +| 자동화된 동적 정책 | 수동 관리, 수동 대응 | 자동 정책 관리, 자동 변경 | 실시간 조정, 위협 연계 | AI 자율 정책 조정 | + +--- + +## AU — 자동화 및 통합 (Automation) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AU-01 | 정책 통합 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | Traditional | Critical | +| ZT-AU-02 | 정책 통합 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-AU-03 | 정책 통합 | 정책 변경이 자동으로 이루어지는가? | Initial | High | +| ZT-AU-04 | 정책 통합 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | Advanced | Medium | +| ZT-AU-05 | 정책 통합 | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | Advanced | Medium | +| ZT-AU-06 | 정책 통합 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-07 | 중요 프로세스 자동화 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | Traditional | Critical | +| ZT-AU-08 | 중요 프로세스 자동화 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | Initial | High | +| ZT-AU-09 | 중요 프로세스 자동화 | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | Initial | High | +| ZT-AU-10 | 중요 프로세스 자동화 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | Advanced | Medium | +| ZT-AU-11 | 중요 프로세스 자동화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-12 | 인공지능 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-13 | 인공지능 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | Initial | High | +| ZT-AU-14 | 인공지능 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | Advanced | Medium | +| ZT-AU-15 | 인공지능 | AI가 모든 보안 시스템에 완전히 통합되었는가? | Optimal | Low | +| ZT-AU-16 | 인공지능 | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | Optimal | Low | +| ZT-AU-17 | 보안 통합, 자동화 및 대응 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | Traditional | Critical | +| ZT-AU-18 | 보안 통합, 자동화 및 대응 | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | Traditional | Critical | +| ZT-AU-19 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 도입하였는가? | Initial | High | +| ZT-AU-20 | 보안 통합, 자동화 및 대응 | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | Initial | High | +| ZT-AU-21 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | Advanced | Medium | +| ZT-AU-22 | 보안 통합, 자동화 및 대응 | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | Advanced | Medium | +| ZT-AU-23 | 보안 통합, 자동화 및 대응 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | Optimal | Low | +| ZT-AU-24 | 보안 통합, 자동화 및 대응 | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | Optimal | Low | +| ZT-AU-25 | 데이터 교환 표준화 | 수집된 데이터가 상이한 형식으로 저장되는가? | Traditional | Critical | +| ZT-AU-26 | 데이터 교환 표준화 | 데이터 교환이 비효율적으로 이루어지는가? | Traditional | Critical | +| ZT-AU-27 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-28 | 데이터 교환 표준화 | 데이터 교환 표준을 도입하였는가? | Initial | High | +| ZT-AU-29 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 자동화되었는가? | Initial | High | +| ZT-AU-30 | 데이터 교환 표준화 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | Advanced | Medium | +| ZT-AU-31 | 데이터 교환 표준화 | 여러 보안 도구 간의 상호 운용성이 제공되는가? | Advanced | Medium | +| ZT-AU-32 | 데이터 교환 표준화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | Optimal | Low | +| ZT-AU-33 | 데이터 교환 표준화 | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | Optimal | Low | +| ZT-AU-34 | 데이터 교환 표준화 | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | Optimal | Low | +| ZT-AU-35 | 보안 운영 조정 및 사고 대응 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | Traditional | Critical | +| ZT-AU-36 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 절차가 정형화되어 있지 않는가? | Traditional | Critical | +| ZT-AU-37 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | Initial | High | +| ZT-AU-38 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | Initial | High | +| ZT-AU-39 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | Advanced | Medium | +| ZT-AU-40 | 보안 운영 조정 및 사고 대응 | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | Advanced | Medium | +| ZT-AU-41 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | Optimal | Low | +| ZT-AU-42 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | Optimal | Low | +| ZT-AU-43 | 보안 운영 조정 및 사고 대응 | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | Optimal | Low | + +### AU Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 정책 통합 | 수동 시스템별 변경 | 중앙 관리, 자동 변경 | 실시간 동적 조정, 즉각 수정 | AI 자율 정책 조정 | +| 중요 프로세스 자동화 | 수동 절차 의존 | 자동화 도구, 백업/장애 대응 자동화 | 보안 사고 자동 대응 | 실시간 최적화, 무중단 조정 | +| 인공지능 | 수동 수집/분석/대응 | 기본 AI 도구, 패턴 식별 | AI 고도화, 실시간 탐지/대응 | 완전 통합, 자율 감지/대응/조정 | +| 보안 통합/자동화/대응 | 독립 운영, 수동 대응 | SOAR 도입, 중앙 대응 | SOAR 고도화, 실시간 통합 | 중앙 자동 처리, 자율 통합 | +| 데이터 교환 표준화 | 상이한 형식, 비효율적, 수동 교환 | 표준 도입, 교환 자동화 | 외부 공유, 상호 운용성 | 자율 관리, 일관된 형식, 실시간 교환 | +| 보안 운영 조정/사고 대응 | 수동 소통, 비정형 절차 | 대응 계획, 자동 경고 | 자동 대응, 실시간 조율, 자동 보고 | 사전 예측, 완전 자동화, 실시간 협력 | + +--- + +## Total: 86 Items (VA: 43 + AU: 43) diff --git a/skills/kesekit-guide/SKILL.md b/skills/kesekit-guide/SKILL.md new file mode 100644 index 0000000..0958db0 --- /dev/null +++ b/skills/kesekit-guide/SKILL.md @@ -0,0 +1,71 @@ +--- +name: kesekit-guide +description: Generate secure coding prompts and guides for AI tools (Claude, ChatGPT, Cursor, Copilot). Creates copy-paste ready prompts for KISA CII, AI security, robot security, and space security (CCSDS, satellite protocols, GSaaS, supply chain). Use when "security guide", "secure coding guide", "AI secure coding", "robot secure coding", "space secure coding", "satellite security guide". +--- + +# KESE Secure Coding Prompt Generator + +Generate secure coding prompts based on KISA guidelines and international standards (OWASP, CWE). + +## Guideline Selection + +| # | Guideline | Description | +|---|-----------|-------------| +| 1 | **CII Secure Coding** | Traditional vulnerabilities (SQLi, XSS, etc.) | +| 2 | **AI Security Coding** | AI-specific (Prompt Injection, Data Poisoning, etc.) | +| 3 | **Robot Security Coding** | Robot-specific (IEC 62443, firmware, protocols) | +| 4 | **Space Security Coding** | Space-specific (CCSDS, satellite protocols, GSaaS, supply chain) | +| 5 | **Secure Coding (Language)** | Language-specific secure coding (JS, Python, pseudo code) | +| 6 | **Zero Trust Guide** | Zero Trust architecture and maturity assessment guide (8 elements, ~396 items) | + +Zero Trust, ZTA, ZTNA, 제로트러스트, 마이크로세그멘테이션, microsegmentation, SDP, SASE, PEP/PDP, never trust always verify → **Zero Trust** + +## CII Branch + +Reference `templates/cii/webapp.md` for CWE-based patterns. Check commands available in `scripts/cii/` directory. Generate language-specific prompts (Python, JavaScript, Java, Go, etc.) and function-specific prompts (auth, file upload, API security). + +## AI Security Branch + +Reference `templates/ai-security/developer.md` and `references/ai-security/overview.md`. Generate prompts for: Prompt Injection defense, Data Poisoning prevention, Model Extraction protection, LLM security, RAG pipeline security. + +## Robot Security Branch + +Reference `templates/robot-security/overview.md` first, then use `ssdf.md`, `supply-chain.md`, `iec62443.md`, `cyber-resilience.md`, or `wireless.md` from `templates/robot-security/` depending on whether the user needs prompts for firmware, ROS/ROS2 nodes, robot APIs, field protocols, supply chain controls, or wireless interfaces. + +## Space Security Branch + +Reference `references/space-security/overview.md` first, then use domain-specific files from `templates/space-security/` for satellite communication encryption, ground station access control, GSaaS API security, and `references/space-security/supply-chain.md` for SBOM, anti-jamming/anti-spoofing, or CMMC/NIS2/K-RMF compliance. + +## Secure Coding (Language) Branch + +Reference `references/secure-coding/overview.md` for 7 categories and 49 CWE mappings. Use `references/secure-coding/pseudocode.md` for language-agnostic patterns (46 items, UNSAFE/SAFE pairs). For language-specific prompts, use `templates/secure-coding/javascript.md` (Express.js, Sequelize, Node.js) or `templates/secure-coding/python.md` (Django, Flask, SQLAlchemy). + +### Auto-detection +- JavaScript, Node.js, Express, React, Vue → `templates/secure-coding/javascript.md` +- Python, Django, Flask, FastAPI → `templates/secure-coding/python.md` +- Other languages (Go, Java, Rust, C#) → `references/secure-coding/pseudocode.md` (AI adapts patterns) +- General / language-agnostic → `references/secure-coding/pseudocode.md` + +## Zero Trust Branch + +Reference `references/zero-trust/overview.md` for ZT architecture and `references/zero-trust/maturity-model.md` for maturity definitions. Use `templates/zero-trust/overview.md` for assessment guide. Generate ZT implementation prompts based on element-specific templates. For OT/ICS environments, reference `templates/zero-trust/ot-environment.md` and `references/zero-trust/ot-guide.md`. + +| Topic | Reference File | +|-------|---------------| +| Overview | `templates/zero-trust/overview.md` | +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +8 core elements, ~396 items across 4 maturity levels. Standards: KISA ZT Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model. + +--- + +## Usage + +Copy the generated prompt into your AI assistant conversation, then request code. diff --git a/skills/guide/references/ai-security/overview.md b/skills/kesekit-guide/references/ai-security/overview.md similarity index 100% rename from skills/guide/references/ai-security/overview.md rename to skills/kesekit-guide/references/ai-security/overview.md diff --git a/skills/guide/references/ai-security/service-provider.md b/skills/kesekit-guide/references/ai-security/service-provider.md similarity index 100% rename from skills/guide/references/ai-security/service-provider.md rename to skills/kesekit-guide/references/ai-security/service-provider.md diff --git a/skills/kesekit-guide/references/ai-security/user-guide.md b/skills/kesekit-guide/references/ai-security/user-guide.md new file mode 100644 index 0000000..808f78d --- /dev/null +++ b/skills/kesekit-guide/references/ai-security/user-guide.md @@ -0,0 +1,58 @@ +# AI 이용자를 위한 보안 수칙 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +## 1. AI 이용자에게 발생할 수 있는 보안 위협 + +### 1.1 챗봇 통한 데이터 유출 +- AI 챗봇 서비스에서 다른 사용자의 개인정보가 노출되는 사례 +- 학습 데이터에 포함된 민감정보가 출력될 가능성 + +### 1.2 AI 음성비서 도청/해킹 +- 스마트 스피커에 레이저/음파를 이용한 명령 주입 +- 백그라운드 실행을 통한 비밀번호 탈취 유도 + +### 1.3 악성 링크/피싱 +- AI가 생성한 정교한 피싱 메시지 +- AI 서비스를 가장한 악성 사이트 + +### 1.4 딥페이크 +- AI 기반 얼굴/음성 합성을 이용한 사기 +- 가짜 영상/음성을 통한 신원 도용 + +### 1.5 안면인식 해킹 +- AI 안면인식 시스템의 우회 공격 +- 적대적 예제를 이용한 인증 우회 + +### 1.6 사이버 테러 +- AI를 악용한 대규모 자동화 공격 +- AI 기반 악성코드 생성 + +--- + +## 2. AI 서비스 이용 보안 수칙 + +### 수칙 1: 안전한 서비스 접근 +- **공식 경로로 다운로드**: 공식 앱 스토어, 공식 웹사이트에서만 AI 서비스 다운로드 +- **강력한 비밀번호 사용**: 영문+숫자+특수문자 조합, 8자 이상 +- **MFA 활성화**: 가능한 경우 다중 인증 설정 +- **공공 네트워크 주의**: 공공 Wi-Fi에서 AI 서비스 이용 시 VPN 사용 권장 +- **이용약관 확인**: AI 서비스의 데이터 수집/활용 정책 확인 + +### 수칙 2: 안전한 서비스 사용 +- **민감정보 입력 금지**: AI 챗봇에 비밀번호, 주민번호, 카드번호 등 입력하지 않기 +- **AI 출력 결과 검증**: AI가 생성한 정보의 정확성을 반드시 확인 +- **의심스러운 결과 신고**: 부적절하거나 유해한 AI 출력 발견 시 서비스 제공자에게 신고 +- **사용 후 데이터 삭제**: AI 서비스 이용 후 대화 기록 등 불필요한 데이터 삭제 +- **주기적 권한 검토**: AI 서비스에 부여한 권한(카메라, 마이크, 위치 등) 주기적 확인 + +### 수칙 3: 딥페이크 대응 +- 영상 통화 시 비정상적 움직임, 음질 이상 주의 +- 금전 요청이나 긴급 상황을 주장하는 연락은 별도 채널로 확인 + +### 수칙 4: AI 음성비서 보안 +- 사용하지 않을 때 마이크 비활성화 +- 음성 구매 기능 비밀번호 설정 +- 정기적으로 음성 기록 검토 및 삭제 + +--- diff --git a/skills/kesekit-guide/references/secure-coding/overview.md b/skills/kesekit-guide/references/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/skills/kesekit-guide/references/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/skills/kesekit-guide/references/secure-coding/pseudocode.md b/skills/kesekit-guide/references/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/skills/kesekit-guide/references/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/skills/kesekit-guide/references/space-security/overview.md b/skills/kesekit-guide/references/space-security/overview.md new file mode 100644 index 0000000..f31ab87 --- /dev/null +++ b/skills/kesekit-guide/references/space-security/overview.md @@ -0,0 +1,82 @@ +# Space Security Overview + +> Source: KISA "Space Security Model" Part1 (2024.12) + Part2 (2025.12) + Explanation Guide (2025.12) + +## 1. Overview + +| Item | Content | +|------|---------| +| Publisher | KISA (Korea Internet & Security Agency) / MSIT | +| Target | Space industry operators, satellite service providers, GSaaS providers, supply chain participants | +| Scope | Space segment, Ground segment, Satellite service segment, GSaaS, Supply chain | +| Standards | CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, NIST CSF, CCSDS | + +## 2. Space Architecture Layers + +| Layer | Components | +|-------|-----------| +| Space Segment | GEO/MEO/LEO satellites, LEO constellations, satellite bus, payload, OBC | +| Ground Segment | Satellite control, payload data processing, antenna, satellite modem, mission control | +| GSaaS | Antenna zone, ground station-cloud zone, reservation/scheduling, API/DB servers | +| Satellite Services | Navigation (GNSS), Communication (VSAT/LEO), Broadcasting | +| Supply Chain | Satellite/launch vehicle manufacturers, ground station operators, satellite operators | + +## 3. Satellite Service Types + +| Service | Description | Key Components | +|---------|-------------|----------------| +| Navigation (GNSS) | Position/navigation/timing via GNSS satellites | Smart ships, autonomous vehicles, UAM | +| Communication | Satellite-based data/voice communication | VSAT, LEO mobile, LEO internet | +| Broadcasting | Satellite TV/radio relay | Broadcasting centers, set-top boxes | +| GSaaS | Ground Station as a Service (cloud-based shared infrastructure) | Shared antennas, cloud scheduling, API | + +## 4. Security Objectives + +| Objective | Description | +|-----------|-------------| +| Confidentiality | Prevent unauthorized access to satellite data and communications | +| Integrity | Prevent unauthorized modification of commands, telemetry, and operational data | +| Availability | Ensure continuous satellite service operation | +| Authentication | Verify identity of users, processes, devices, and satellites | +| Non-repudiation | Ensure accountability for satellite operations | +| Resilience | Maintain operations during and after security incidents | + +## 5. Threat Categories (3 Major Types) + +| Type | Description | Attack Vectors | +|------|-------------|----------------| +| Data Corruption | Unauthorized data modification/deletion | MITM, spoofing, malware, insider threat | +| Service Disruption | Service interruption/degradation | Jamming, DDoS, physical destruction, SW vulnerabilities | +| Information Leakage | Sensitive data exfiltration | Eavesdropping, sniffing, session hijacking, data theft | + +## 6. Checklist Structure (12 Domains, 53 Items) + +| # | Code | Domain | Items | Reference File | +|---|------|--------|:-----:|----------------| +| 1 | AC | Access Control | 12 | `access-control.md` | +| 2 | IA | Identification & Authentication | 2 | `access-control.md` | +| 3 | SC | System & Communication Security | 7 | `system-security.md` | +| 4 | SI | System & Information Integrity | 4 | `system-security.md` | +| 5 | SO | System/Service Operations Management | 9 | `operations.md` | +| 6 | IR | Incident Response | 2 | `operations.md` | +| 7 | PS | Personnel Security | 2 | `governance.md` | +| 8 | PE | Physical & Environmental Security | 3 | `governance.md` | +| 9 | RA | Risk Assessment & Security Evaluation | 2 | `governance.md` | +| 10 | SG | Security Governance | 4 | `governance.md` | +| 11 | CP | Contingency Planning | 2 | `governance.md` | +| 12 | SM | Supply Chain Management | 4 | `supply-chain.md` | + +## 7. Compliance Standards + +| Standard | Description | +|----------|-------------| +| CMMC | Cybersecurity Maturity Model Certification (US DoD, Level 1-3) | +| K-RMF | Korea Risk Management Framework | +| NIS2 | EU Network and Information Security Directive (includes space) | +| ISMS-P | Korea Information Security Management System | +| NIST IR 8401 | Satellite Ground Segment Cybersecurity | +| NIST IR 8270 | Commercial Satellite Operations Cybersecurity | +| NIST CSF | Cybersecurity Framework (Identify/Protect/Detect/Respond/Recover) | +| NIST SP 800-171 | CUI Protection (110 requirements) | +| CCSDS 352.0-B-2 | Space System Cryptographic Algorithm Recommendation | +| ENISA Space Threat Landscape | Space system threat analysis | diff --git a/skills/kesekit-guide/references/space-security/supply-chain.md b/skills/kesekit-guide/references/space-security/supply-chain.md new file mode 100644 index 0000000..2f66548 --- /dev/null +++ b/skills/kesekit-guide/references/space-security/supply-chain.md @@ -0,0 +1,60 @@ +# Supply Chain Threat Scenarios + +> Domain: GSaaS/Supply Chain Threat Scenarios (with code-block illustrations) + +## Threat Scenarios (Supply Chain) + +### Scenario 1: Vulnerable Open-Source Causing Ground Station Failure +``` +Backdoor inserted into open-source community + -> Library used without verification + -> Backdoor enables system takeover + -> Ground station service disruption +``` + +### Scenario 2: Malicious Code in Payload Update File +``` +Developer PC compromised via phishing + -> Ransomware inserted into SW update + -> Update uploaded to satellite without verification + -> Payload malfunction +``` + +### Scenario 3: Tampered IDE Plugin Causing Satellite Malfunction +``` +Malicious code in IDE/CI-CD plugin + -> Firmware developed/loaded without verification + -> Component inspection skipped + -> Satellite bus malfunction +``` + +## GSaaS Threat Scenarios + +### Scenario 1: Satellite Control Hijacking via Weak Authentication +``` +Plaintext communication sniffing + -> IAM credential theft + -> Web shell upload + -> Ground station infiltration + -> Orbit control system takeover + -> Satellite hijacking +``` + +### Scenario 2: Data Tampering via Unauthorized Device Backdoor +``` +No media control + -> USB/single-board-computer backdoor + -> Internal network access + -> Satellite access credential collection + -> Data tampering malware injection +``` + +### Scenario 3: Physical Attack via Drone Disrupting Satellite Communication +``` +Plaintext communication sniffing + -> Antenna location identified + -> Drone with jamming device/explosives + -> Antenna-satellite communication disrupted +``` + +## Total: 4 Checklist Items + 6 Threat Scenarios diff --git a/skills/kesekit-guide/references/zero-trust/maturity-model.md b/skills/kesekit-guide/references/zero-trust/maturity-model.md new file mode 100644 index 0000000..2f3612d --- /dev/null +++ b/skills/kesekit-guide/references/zero-trust/maturity-model.md @@ -0,0 +1,75 @@ +# Zero Trust Maturity Model + +> Reference: KISA 제로트러스트 가이드라인 2.0 (2024.12), CISA Zero Trust Maturity Model v2.0 +> Purpose: Detailed maturity level definitions and scoring guidance + +## Maturity Level Definitions + +### Traditional (전통적) +- Perimeter-based security model (castle-and-moat) +- Manual identity management and access control +- Static, rule-based security policies +- Limited visibility into internal traffic + +### Initial (기본) +- Beginning adoption of ZT principles +- Some automated identity management (SSO, basic MFA) +- Initial network segmentation beyond perimeter +- Centralized logging introduced + +### Advanced (고도화) +- Context-aware, dynamic access policies +- AI-assisted threat detection and response +- Comprehensive microsegmentation +- Real-time monitoring and analytics + +### Optimal (최적화) +- Fully automated, self-adaptive security +- AI-driven orchestration and response +- Predictive threat analysis +- Continuous verification at all layers +- Zero standing privileges + +## Scoring Framework + +### Per-Item Scoring + +| Score | Criteria | +|-------|----------| +| 3 | Fully implemented and operational | +| 2 | Partially implemented, gaps exist | +| 1 | Planned but not yet implemented | +| 0 | Not implemented, no plans | + +### Element Maturity Calculation + +``` +Element Score = (Sum of item scores for target level) / (Max possible score) x 100% + +Maturity Rating: + >= 80% → Mature (at or above target level) + 60-79% → Developing (approaching target level) + 40-59% → Emerging (significant gaps remain) + < 40% → Insufficient (major remediation needed) +``` + +## Cross-Element Dependencies + +| Element | Depends On | +|---------|-----------| +| Identity | — (foundation element) | +| Device | Identity | +| Network | Identity, Device | +| System | Network, Identity | +| Application | Identity, Device, Network | +| Data | Application, Identity | +| Visibility | All elements (observability layer) | +| Automation | Visibility (requires data to automate) | + +## Assessment Prioritization + +1. Start with **Identity** — foundation of all ZT controls +2. Then **Device** — ensure endpoint trust +3. Then **Network** — establish segmentation +4. Then **Application** and **Data** — protect workloads +5. Finally **Visibility** and **Automation** — enable continuous improvement diff --git a/skills/kesekit-guide/references/zero-trust/ot-guide.md b/skills/kesekit-guide/references/zero-trust/ot-guide.md new file mode 100644 index 0000000..92c0970 --- /dev/null +++ b/skills/kesekit-guide/references/zero-trust/ot-guide.md @@ -0,0 +1,128 @@ +# OT/ICS Zero Trust Deployment Guide + +> Reference: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-82 Rev.3, IEC 62443 +> Purpose: Guidance for deploying Zero Trust in OT/ICS environments + +## Why OT/ICS Requires Special ZT Consideration + +Traditional IT Zero Trust assumes: +- Modern endpoints capable of running agents +- Tolerance for additional authentication latency +- Ability to patch and update frequently +- Replaceable infrastructure components + +OT/ICS reality: +- Legacy devices (PLCs, RTUs, HMIs) with 15-30 year lifecycles +- Real-time control loops with microsecond-level latency requirements +- Safety-critical functions where authentication delays can cause harm +- Proprietary protocols (Modbus, DNP3, OPC UA, PROFINET) +- Air-gapped or semi-isolated networks + +## Phased Deployment Approach + +### Phase 1: Visibility & Asset Discovery + +**Objective**: Know what you have before you protect it. + +- Conduct complete OT asset inventory (active + passive discovery) +- Map communication flows between OT devices, IT systems, and external connections +- Identify Purdue Model levels for each asset +- Baseline normal traffic patterns and protocol usage +- Document legacy devices that cannot support modern security controls + +### Phase 2: IT-OT Boundary Segmentation + +**Objective**: Establish strong boundary between IT and OT networks. + +- Deploy industrial DMZ between IT and OT networks +- Implement data diodes or unidirectional gateways for critical flows +- Control all IT-OT data exchange through monitored jump servers +- Establish separate authentication domains for IT and OT + +### Phase 3: OT Internal Segmentation + +**Objective**: Apply zone/conduit model within OT network. + +- Implement IEC 62443 zones and conduits +- Segment by safety level (SL), function, and criticality +- Deploy OT-aware firewalls between zones +- Establish conduit-level access policies + +### Phase 4: Identity & Access Control + +**Objective**: Enforce identity-based access in OT environment. + +- Deploy MFA for all remote OT access (hardware tokens preferred) +- Implement privileged access management (PAM) for OT systems +- Apply least-privilege access for OT operators and engineers +- Manage shared/service accounts with rotation and monitoring +- Use jump servers with session recording for maintenance access + +### Phase 5: Continuous Monitoring + +**Objective**: Maintain visibility and detect anomalies. + +- Deploy OT-specific IDS/IPS (passive monitoring preferred initially) +- Implement Deep Packet Inspection (DPI) for OT protocols +- Integrate OT security events with enterprise SIEM +- Establish OT-specific SOC or extend IT SOC with OT expertise +- Monitor for known OT malware signatures (Triton, Industroyer, etc.) + +### Phase 6: Automated Response (with Safety Validation) + +**Objective**: Enable automated response without compromising safety. + +- Define automated response actions with safety impact assessment +- Implement fail-safe defaults (fail-open for safety-critical, fail-close for non-critical) +- Require human approval for actions affecting safety systems +- Test automated responses in simulation environment before deployment + +## OT-Specific ZT Architecture + +``` +┌────────────────────────────────────────────┐ +│ Enterprise Zone (IT) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ PDP │ │ IdP/ │ │ Enterprise │ │ +│ │ │ │ MFA │ │ SIEM │ │ +│ └────────┘ └────────┘ └────────────┘ │ +└──────────────────┬─────────────────────────┘ + │ Industrial DMZ +┌──────────────────┴─────────────────────────┐ +│ ┌────────────┐ ┌─────────┐ ┌────────┐ │ +│ │ Jump Server│ │ Historian│ │ PEP │ │ +│ │ (PAM) │ │ Mirror │ │ (OT) │ │ +│ └────────────┘ └─────────┘ └────────┘ │ +└──────────────────┬─────────────────────────┘ + │ +┌──────────────────┴─────────────────────────┐ +│ OT Zone (ICS/SCADA) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ HMI │ │ PLC │ │ RTU │ │ +│ │ │ │ │ │ │ │ +│ └────────┘ └────────┘ └────────────┘ │ +│ ┌────────────────────────────────────┐ │ +│ │ OT IDS (Passive Monitoring) │ │ +│ └────────────────────────────────────┘ │ +└────────────────────────────────────────────┘ +``` + +## Legacy Device Handling + +For OT devices that cannot support modern ZT controls: + +1. **Security Wrapper/Proxy**: Place a ZT-capable proxy in front of legacy devices +2. **Network-Level Protection**: Use OT-aware firewalls to enforce access policies +3. **Monitoring**: Deploy passive DPI sensors for visibility without device modification +4. **Compensating Controls**: Document risk acceptance with compensating controls per IEC 62443 + +## Standards Mapping + +| OT-ZT Requirement | IEC 62443 | NIST SP 800-82 | KISA ZT 2.0 | +|-------------------|-----------|----------------|-------------| +| Network Segmentation | Zone/Conduit | Section 5.3 | NW Element | +| Access Control | FR 1 (AC) | Section 6.2 | ID Element | +| Device Management | FR 4 (DC) | Section 6.3 | DV Element | +| Communication Integrity | FR 3 (SI) | Section 5.4 | SY Element | +| Monitoring | FR 6 (RE) | Section 6.6 | VA Element | +| Incident Response | FR 7 (RA) | Section 6.7 | AU Element | diff --git a/skills/kesekit-guide/references/zero-trust/overview.md b/skills/kesekit-guide/references/zero-trust/overview.md new file mode 100644 index 0000000..38fe30d --- /dev/null +++ b/skills/kesekit-guide/references/zero-trust/overview.md @@ -0,0 +1,72 @@ +# Zero Trust Architecture Reference + +> Reference: NIST SP 800-207, KISA 제로트러스트 가이드라인 2.0, CISA Zero Trust Maturity Model +> Purpose: Provide architectural context for Zero Trust maturity assessment + +## Zero Trust Architecture (ZTA) + +### Core Logical Components + +``` +┌─────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ PDP │ │ Policy │ │ Trust Algorithm │ │ +│ │ (Policy │ │ Engine │ │ (Risk Score + │ │ +│ │ Decision │ │ │ │ Context Analysis) │ │ +│ │ Point) │ │ │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ + │ + ┌────┴────┐ + │ PEP │ ← Policy Enforcement Point + │ │ + └────┬────┘ + │ +┌─────────────────────────────────────────────────────────┐ +│ Data Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ Subject │ │ Resource │ │ Enterprise │ │ +│ │ (User/ │→→│ (App/ │ │ Resources │ │ +│ │ Device) │ │ Data) │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### Deployment Models (NIST SP 800-207) + +1. **SDP (Software Defined Perimeter)**: Agent/gateway-based model +2. **Micro-segmentation**: Network-centric approach +3. **Network Infrastructure + SDP**: Hybrid approach + +### KISA Zero Trust Guidelines 2.0 — 8 Elements + +| Element | Korean | Scope | +|---------|--------|-------| +| Identity | 식별자 및 신원 | User identity management, MFA, continuous authentication | +| Device | 디바이스 및 엔드포인트 | Device inventory, health checks, compliance | +| Network | 네트워크 | Macro/micro segmentation, SDN, encrypted traffic | +| System | 시스템 | System hardening, patching, configuration management | +| Application | 애플리케이션 및 워크로드 | Resource authorization, remote access, monitoring | +| Data | 데이터 | Classification, DLP, encryption, access control | +| Visibility | 가시성 및 분석 | Logging, SIEM, threat analysis | +| Automation | 자동화 및 오케스트레이션 | SOAR, automated response, policy orchestration | + +### Related Standards + +| Standard | Organization | Focus | +|----------|-------------|-------| +| NIST SP 800-207 | NIST | ZTA reference architecture | +| CISA Zero Trust Maturity Model | CISA | Federal ZT maturity assessment | +| 제로트러스트 가이드라인 2.0 | KISA | Korean ZT implementation guide | +| NIST SP 800-82 | NIST | OT/ICS security guide | +| IEC 62443 | IEC | Industrial automation security | + +### Key Concepts + +- **PDP (Policy Decision Point)**: Evaluates access requests against policy +- **PEP (Policy Enforcement Point)**: Enforces PDP decisions at the access point +- **SDP (Software Defined Perimeter)**: Creates dynamic, identity-based perimeters +- **SASE (Secure Access Service Edge)**: Cloud-delivered convergence of network and security +- **ZTNA (Zero Trust Network Access)**: Application-level access without VPN +- **Microsegmentation**: Granular network isolation at workload level diff --git a/skills/kesekit-guide/scripts/cii/cloud.md b/skills/kesekit-guide/scripts/cii/cloud.md new file mode 100644 index 0000000..b5fc514 --- /dev/null +++ b/skills/kesekit-guide/scripts/cii/cloud.md @@ -0,0 +1,517 @@ +# 클라우드 점검 스크립트 (CA-01 ~ CA-19) + +## 1. 계정 관리 + +### CA-01: 사용자 계정 관리 +**점검:** +```bash +# AWS: IAM 사용자 목록 및 마지막 로그인 확인 +aws iam list-users --output table +aws iam generate-credential-report +aws iam get-credential-report --output text --query Content | base64 -d + +# Azure: 사용자 목록 확인 +az ad user list --output table +az ad user list --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}" --output table + +# GCP: IAM 사용자 확인 +gcloud iam service-accounts list +gcloud projects get-iam-policy --format=json +``` +**조치:** +```bash +# AWS: 불필요 계정 삭제/비활성화 +aws iam delete-user --user-name <사용자명> +aws iam delete-login-profile --user-name <사용자명> +# 액세스 키 비활성화 +aws iam update-access-key --user-name <사용자명> --access-key-id <키ID> --status Inactive + +# Azure: 불필요 계정 삭제/비활성화 +az ad user update --id <사용자ID> --account-enabled false +az ad user delete --id <사용자ID> + +# GCP: 서비스 계정 삭제/비활성화 +gcloud iam service-accounts disable <서비스계정이메일> +gcloud iam service-accounts delete <서비스계정이메일> +``` + +### CA-02: 사용자 정책 관리 +**점검:** +```bash +# AWS: 사용자별 정책 확인 +aws iam list-attached-user-policies --user-name <사용자명> +aws iam list-user-policies --user-name <사용자명> +aws iam list-groups-for-user --user-name <사용자명> + +# Azure: 역할 할당 확인 +az role assignment list --all --output table + +# GCP: IAM 정책 확인 +gcloud projects get-iam-policy +``` +**조치:** +```bash +# AWS: 불필요 권한 제거, 최소 권한 원칙 적용 +aws iam detach-user-policy --user-name <사용자명> --policy-arn <정책ARN> +# 그룹 기반 권한 관리 +aws iam create-group --group-name <그룹명> +aws iam attach-group-policy --group-name <그룹명> --policy-arn <정책ARN> +aws iam add-user-to-group --user-name <사용자명> --group-name <그룹명> + +# Azure: 역할 할당 변경 +az role assignment delete --assignee <사용자ID> --role <역할명> +az role assignment create --assignee <사용자ID> --role <역할명> --scope <범위> + +# GCP: IAM 바인딩 변경 +gcloud projects remove-iam-policy-binding --member=user:<이메일> --role=<역할> +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=<역할> +``` + +### CA-03: MFA(Multi-Factor Authentication) 설정 +**점검:** +```bash +# AWS: MFA 설정 여부 확인 +aws iam list-virtual-mfa-devices +aws iam list-mfa-devices --user-name <사용자명> +# MFA 미설정 사용자 확인 (credential report 활용) +aws iam get-credential-report --output text --query Content | base64 -d | grep -i "false" + +# Azure: MFA 상태 확인 +az ad user list --query "[].{UPN:userPrincipalName}" --output table +# Azure Portal: Azure AD > 보안 > MFA 에서 확인 + +# GCP: 2단계 인증은 Google Workspace Admin Console에서 확인 +``` +**조치:** +```bash +# AWS: 가상 MFA 디바이스 생성 및 활성화 +aws iam create-virtual-mfa-device --virtual-mfa-device-name <디바이스명> --outfile QRCode.png --bootstrap-method QRCodePNG +aws iam enable-mfa-device --user-name <사용자명> --serial-number --authentication-code1 <코드1> --authentication-code2 <코드2> + +# Azure: 조건부 액세스 정책으로 MFA 강제 (Azure Portal에서 설정) +# Azure AD > 보안 > 조건부 액세스 > 새 정책 > MFA 필수 + +# GCP: Google Workspace Admin Console에서 2단계 인증 강제 +``` + +### CA-04: 클라우드 계정 비밀번호 정책 관리 +**점검:** +```bash +# AWS: 비밀번호 정책 확인 +aws iam get-account-password-policy + +# Azure: 비밀번호 정책 확인 (Azure AD) +az ad group list --output table +# Azure Portal: Azure AD > 보안 > 인증 방법 > 비밀번호 보호 +``` +**조치:** +```bash +# AWS: 비밀번호 정책 설정 +aws iam update-account-password-policy \ + --minimum-password-length 8 \ + --require-symbols \ + --require-numbers \ + --require-uppercase-characters \ + --require-lowercase-characters \ + --max-password-age 90 \ + --password-reuse-prevention 24 \ + --allow-users-to-change-password + +# Azure: Azure AD Portal에서 비밀번호 정책 설정 +# Azure AD > 보안 > 인증 방법 > 비밀번호 보호 > 사용자 지정 금지 비밀번호 목록 +``` + +## 2. 권한 관리 + +### CA-05: 인스턴스 서비스 정책 관리 +**점검:** +```bash +# AWS: EC2 관련 IAM 정책 확인 +aws iam list-policies --query "Policies[?contains(PolicyName,'EC2')]" --output table +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,IamInstanceProfile]" --output table + +# Azure: VM 관련 역할 확인 +az vm list --output table +az role assignment list --query "[?contains(scope,'Microsoft.Compute')]" --output table + +# GCP: Compute Engine IAM 확인 +gcloud compute instances list +``` +**조치:** +```bash +# AWS: 인스턴스 관련 권한 최소화 +# 전용 IAM 역할 생성 후 인스턴스에 할당 +aws iam create-role --role-name <역할명> --assume-role-policy-document file://trust-policy.json +aws iam attach-role-policy --role-name <역할명> --policy-arn <정책ARN> +aws ec2 associate-iam-instance-profile --instance-id <인스턴스ID> --iam-instance-profile Name=<프로필명> + +# Azure: 리소스 그룹 단위 역할 할당 +az role assignment create --assignee <사용자ID> --role "Virtual Machine Contributor" --scope /subscriptions/<구독ID>/resourceGroups/<리소스그룹> + +# GCP: 커스텀 역할 적용 +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=roles/compute.instanceAdmin +``` + +### CA-06: 네트워크 서비스 정책 관리 +**점검:** +```bash +# AWS: VPC/네트워크 관련 정책 확인 +aws ec2 describe-vpcs --output table +aws ec2 describe-security-groups --output table + +# Azure: NSG 확인 +az network nsg list --output table +az network nsg rule list --nsg-name --resource-group <리소스그룹> --output table + +# GCP: 방화벽 규칙 확인 +gcloud compute firewall-rules list +``` +**조치:** +```bash +# AWS: 보안 그룹 규칙 관리 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr <관리자IP>/32 + +# Azure: NSG 규칙 관리 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> +az network nsg rule create --nsg-name --resource-group --name <규칙명> --priority 100 --access Allow --source-address-prefixes --destination-port-ranges 22 + +# GCP: 방화벽 규칙 관리 +gcloud compute firewall-rules delete <규칙명> +gcloud compute firewall-rules create <규칙명> --allow tcp:22 --source-ranges=/32 +``` + +## 3. 가상 리소스 관리 + +### CA-07: VPC 네트워크 서브넷 관리 +**점검:** +```bash +# AWS: 서브넷 구성 확인 (Public/Private 분리 여부) +aws ec2 describe-subnets --output table +aws ec2 describe-route-tables --output table +aws ec2 describe-internet-gateways --output table +aws ec2 describe-nat-gateways --output table + +# Azure: 가상 네트워크 서브넷 확인 +az network vnet list --output table +az network vnet subnet list --vnet-name --resource-group --output table + +# GCP: 서브넷 확인 +gcloud compute networks subnets list +``` +**조치:** +```bash +# Public 서브넷: 인터넷 게이트웨이 할당 +# Private 서브넷: NAT 게이트웨이 할당 +# 서브넷별 네트워크 리소스 별도 설정 + +# AWS: NAT 게이트웨이 생성 (Private 서브넷용) +aws ec2 create-nat-gateway --subnet-id --allocation-id + +# Azure: Private 서브넷에 NSG 적용 +az network vnet subnet update --vnet-name --name <서브넷명> --resource-group --network-security-group +``` + +### CA-08: 가상 네트워크 리소스 관리 +**점검:** +```bash +# AWS: 공인 IP 할당 인스턴스 확인 +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress]" --output table + +# Azure: 공인 IP 확인 +az network public-ip list --output table +az vm list-ip-addresses --output table + +# GCP: 외부 IP 확인 +gcloud compute instances list --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)" +``` +**조치:** +```bash +# AWS: 불필요 공인 IP 해제 +aws ec2 disassociate-address --association-id <연결ID> +aws ec2 release-address --allocation-id <할당ID> + +# Azure: 공인 IP 해제 +az network nic ip-config update --resource-group --nic-name --name --remove publicIpAddress + +# GCP: 외부 IP 제거 +gcloud compute instances delete-access-config <인스턴스명> --access-config-name "External NAT" +``` + +### CA-09: 접근 제어 설정 관리 +**점검:** +```bash +# AWS: 보안 그룹 규칙 확인 (0.0.0.0/0 허용 여부) +aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,Ingress:IpPermissions}" --output json +# 0.0.0.0/0 허용 규칙 필터링 +aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" --output table + +# Azure: NSG 규칙 중 Any 허용 확인 +az network nsg list --query "[].{Name:name,Rules:securityRules[?sourceAddressPrefix=='*']}" --output json + +# GCP: 0.0.0.0/0 허용 방화벽 규칙 확인 +gcloud compute firewall-rules list --filter="sourceRanges=0.0.0.0/0" +``` +**조치:** +```bash +# AWS: 불필요한 0.0.0.0/0 규칙 제거 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port <포트> --cidr 0.0.0.0/0 + +# Azure: 불필요 규칙 삭제 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> + +# GCP: 불필요 방화벽 규칙 삭제 +gcloud compute firewall-rules delete <규칙명> + +# 공통: 관리자 IP 또는 특정 IP에서만 접속 허용 +``` + +### CA-10: 스토리지 리소스 퍼블릭 접근 관리 +**점검:** +```bash +# AWS: S3 버킷 퍼블릭 접근 확인 +aws s3api get-bucket-acl --bucket <버킷명> +aws s3api get-public-access-block --bucket <버킷명> +aws s3api get-bucket-policy --bucket <버킷명> + +# Azure: 스토리지 계정 공개 접근 확인 +az storage account list --query "[].{Name:name,PublicAccess:allowBlobPublicAccess}" --output table + +# GCP: 버킷 IAM 확인 +gsutil iam get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 퍼블릭 접근 차단 +aws s3api put-public-access-block --bucket <버킷명> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true + +# Azure: 스토리지 공개 접근 비활성화 +az storage account update --name <스토리지명> --resource-group --allow-blob-public-access false + +# GCP: 버킷에서 allUsers/allAuthenticatedUsers 제거 +gsutil iam ch -d allUsers gs://<버킷명> +gsutil iam ch -d allAuthenticatedUsers gs://<버킷명> +``` + +## 4. 운영 관리 + +### CA-11: 관계형 데이터베이스 암호화 설정 +**점검:** +```bash +# AWS: RDS 암호화 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Encrypted:StorageEncrypted}" --output table + +# Azure: SQL DB 암호화 확인 +az sql db tde show --server <서버명> --database --resource-group + +# GCP: Cloud SQL 암호화 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.dataDiskEncryptionConfiguration)" +``` +**조치:** +```bash +# AWS: RDS 암호화 활성화 (생성 시 또는 스냅샷 복원) +aws rds create-db-instance --db-instance-identifier --storage-encrypted --kms-key-id ... + +# Azure: TDE 활성화 +az sql db tde set --server <서버명> --database --resource-group --status Enabled + +# GCP: 기본적으로 저장 데이터 암호화 적용됨 (CMEK 설정 가능) +``` + +### CA-12: 통신 구간 암호화 설정 +**점검:** +```bash +# AWS: ELB/ALB SSL 인증서 확인 +aws elbv2 describe-listeners --load-balancer-arn --query "Listeners[*].{Port:Port,Protocol:Protocol,Certs:Certificates}" --output table + +# Azure: Application Gateway SSL 확인 +az network application-gateway ssl-cert list --gateway-name <게이트웨이명> --resource-group + +# 공통: TLS 버전 확인 +openssl s_client -connect <호스트>:443 -tls1_2 +``` +**조치:** +```bash +# 공통 권고사항: +# 서버 원격 접근 시 VPN, SSH 사용 +# TLS v1.2 이상 (TLS v1.3 권장) 사용 +# 블록 암호: SEED, ARIA, AES (키 128bits 이상) +# 공개키 암호: RSA (키 2048bits 이상) +# 해시: SHA-2 이상 +``` + +### CA-13: 클라우드 서비스 사용자 계정 로깅 설정 +**점검:** +```bash +# AWS: CloudTrail 설정 확인 +aws cloudtrail describe-trails --output table +aws cloudtrail get-trail-status --name <트레일명> + +# Azure: Activity Log 확인 +az monitor activity-log list --offset 1h --output table + +# GCP: Cloud Audit Logs 확인 +gcloud logging read "logName:cloudaudit.googleapis.com" --limit 10 +``` +**조치:** +```bash +# AWS: CloudTrail 활성화 +aws cloudtrail create-trail --name <트레일명> --s3-bucket-name <버킷명> --is-multi-region-trail +aws cloudtrail start-logging --name <트레일명> + +# Azure: 진단 설정 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <리소스ID> --logs '[{"category":"AuditEvent","enabled":true}]' --storage-account <스토리지ID> + +# GCP: Audit Log 기본 활성화됨, 추가 설정 시 +gcloud projects get-iam-policy --format=json +``` + +### CA-14: 인스턴스 로깅 설정 +**점검:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 그룹 확인 +aws logs describe-log-groups --output table + +# Azure: VM 진단 설정 확인 +az vm diagnostics get-default-config + +# GCP: Ops Agent 설치 확인 +gcloud compute instances describe <인스턴스명> --format="value(metadata.items)" +``` +**조치:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 전송 +aws ssm send-command --instance-ids <인스턴스ID> --document-name "AWS-ConfigureAWSPackage" --parameters '{"action":["Install"],"name":["AmazonCloudWatchAgent"]}' + +# Azure: VM 진단 확장 설치 +az vm diagnostics set --resource-group --vm-name --settings <설정JSON> + +# GCP: Ops Agent 설치 +gcloud compute ssh <인스턴스명> -- 'curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh && sudo bash add-google-cloud-ops-agent-repo.sh --also-install' +``` + +### CA-15: 관계형 데이터베이스 로깅 설정 +**점검:** +```bash +# AWS: RDS 로깅 파라미터 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Logs:EnabledCloudwatchLogsExports}" --output table + +# Azure: SQL 감사 설정 확인 +az sql server audit-policy show --server <서버명> --resource-group + +# GCP: Cloud SQL 로그 플래그 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.databaseFlags)" +``` +**조치:** +```bash +# AWS: RDS 로그 내보내기 활성화 +aws rds modify-db-instance --db-instance-identifier --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}' + +# Azure: SQL 감사 활성화 +az sql server audit-policy update --server <서버명> --resource-group --state Enabled --storage-account <스토리지명> + +# GCP: Cloud SQL 감사 로그 활성화 +gcloud sql instances patch <인스턴스명> --database-flags=log_output=FILE,general_log=on,slow_query_log=on +``` + +### CA-16: 오브젝트 스토리지 버킷 로깅 설정 +**점검:** +```bash +# AWS: S3 서버 액세스 로깅 확인 +aws s3api get-bucket-logging --bucket <버킷명> + +# Azure: Blob Storage 진단 로그 확인 +az monitor diagnostic-settings list --resource <스토리지리소스ID> + +# GCP: 버킷 로깅 확인 +gsutil logging get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 서버 액세스 로깅 활성화 +aws s3api put-bucket-logging --bucket <버킷명> --bucket-logging-status '{"LoggingEnabled":{"TargetBucket":"<로그버킷>","TargetPrefix":"logs/"}}' + +# Azure: Blob Storage 진단 로그 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <스토리지리소스ID> --logs '[{"category":"StorageRead","enabled":true},{"category":"StorageWrite","enabled":true},{"category":"StorageDelete","enabled":true}]' + +# GCP: 버킷 로깅 활성화 +gsutil logging set on -b gs://<로그버킷> gs://<대상버킷> +``` + +### CA-17: 로그 보관 기간 설정 +**점검:** +```bash +# AWS: CloudWatch Logs 보관 기간 확인 +aws logs describe-log-groups --query "logGroups[*].{Name:logGroupName,Retention:retentionInDays}" --output table +# S3 수명 주기 정책 확인 +aws s3api get-bucket-lifecycle-configuration --bucket <버킷명> + +# Azure: 로그 보관 정책 확인 +az monitor diagnostic-settings list --resource <리소스ID> + +# GCP: 로그 버킷 보관 기간 확인 +gcloud logging buckets describe <버킷명> --location=global +``` +**조치:** +```bash +# AWS: CloudWatch Logs 보관 기간 설정 (예: 365일) +aws logs put-retention-policy --log-group-name <로그그룹명> --retention-in-days 365 + +# Azure: 진단 설정에서 보관 기간 설정 (일반적으로 Azure Portal에서 설정) + +# GCP: 로그 버킷 보관 기간 설정 +gcloud logging buckets update <버킷명> --location=global --retention-days=365 +``` + +### CA-18: 백업 사용 여부 +**점검:** +```bash +# AWS: 백업 설정 확인 +aws backup list-backup-plans --output table +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,BackupRetention:BackupRetentionPeriod}" --output table +aws ec2 describe-snapshots --owner-ids self --output table + +# Azure: 백업 항목 확인 +az backup item list --vault-name <볼트명> --resource-group --output table + +# GCP: 스냅샷 확인 +gcloud compute snapshots list +gcloud sql backups list --instance=<인스턴스명> +``` +**조치:** +```bash +# AWS: 자동 백업 설정 +aws backup create-backup-plan --backup-plan file://backup-plan.json +# RDS 백업 보관 기간 설정 +aws rds modify-db-instance --db-instance-identifier --backup-retention-period 7 + +# Azure: 백업 정책 설정 +az backup protection enable-for-vm --resource-group --vault-name <볼트명> --vm --policy-name <정책명> + +# GCP: 스냅샷 스케줄 생성 +gcloud compute resource-policies create snapshot-schedule <정책명> --region=<리전> --max-retention-days=14 --daily-schedule +``` + +### CA-19: 가상 리소스 이상징후 알림 설정 +**점검:** +```bash +# AWS: CloudWatch 알람 확인 +aws cloudwatch describe-alarms --output table + +# Azure: 경고 규칙 확인 +az monitor metrics alert list --output table + +# GCP: 알림 정책 확인 +gcloud alpha monitoring policies list +``` +**조치:** +```bash +# AWS: CloudWatch 알람 생성 (예: CPU 사용률) +aws cloudwatch put-metric-alarm --alarm-name "HighCPU" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions --dimensions Name=InstanceId,Value=<인스턴스ID> + +# Azure: 메트릭 경고 생성 +az monitor metrics alert create --name "HighCPU" --resource-group --scopes <리소스ID> --condition "avg Percentage CPU > 80" --action <액션그룹ID> + +# GCP: 알림 정책 생성 (gcloud 또는 Cloud Console에서 설정) +# Cloud Console > Monitoring > 알림 > 정책 만들기 > 조건 및 알림 채널(SMS, 이메일) 설정 +``` diff --git a/skills/kesekit-guide/scripts/cii/database.md b/skills/kesekit-guide/scripts/cii/database.md new file mode 100644 index 0000000..5abb7fb --- /dev/null +++ b/skills/kesekit-guide/scripts/cii/database.md @@ -0,0 +1,649 @@ +# DBMS 점검 스크립트 (D-01 ~ D-26) + +## 1. 계정 관리 + +### D-01: 기본 계정의 비밀번호, 정책 등을 변경하여 사용 +**점검:** +```sql +-- Oracle: 기본 계정 사용 여부 및 정책 확인 +SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE account_status = 'OPEN'; + +-- MSSQL: sa 계정 확인 +SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa'; + +-- MySQL: root 계정 확인 +SELECT User, Host FROM mysql.user; +SHOW VARIABLES LIKE 'validate_password%'; + +-- PostgreSQL: 역할 확인 +SELECT rolname, rolsuper FROM pg_roles; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; + +-- Cubrid +SELECT name, password FROM db_user; +SELECT * FROM db_password; +``` +**조치:** +```sql +-- Oracle: 비밀번호 변경 / 잠금 +ALTER USER <기본계정명> IDENTIFIED BY <신규비밀번호>; +ALTER USER <기본계정명> ACCOUNT LOCK; + +-- MSSQL: sa 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; + +-- MySQL 5.7 +UPDATE user SET authentication_string = PASSWORD('신규비밀번호') WHERE User = 'root'; +FLUSH PRIVILEGES; +-- MySQL 8.0 +ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; +FLUSH PRIVILEGES; + +-- Altibase +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- Tibero +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- PostgreSQL +ALTER USER postgres WITH PASSWORD '신규비밀번호'; + +-- Cubrid +ALTER USER "사용자계정명" PASSWORD '신규비밀번호'; +``` + +### D-02: 불필요 계정 제거 또는 잠금설정 +**점검:** +```sql +-- Oracle +SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; + +-- MSSQL +SELECT name, is_disabled FROM sys.server_principals; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM all_users; +SELECT * FROM dba_users; + +-- PostgreSQL +SELECT * FROM pg_roles; +-- 또는 명령어: \du + +-- Cubrid +SELECT name, password FROM db_user; +``` +**조치:** +```sql +-- Oracle +DROP USER [삭제할 계정]; + +-- MSSQL +EXEC sp_droplogin '삭제할 계정'; + +-- MySQL +DROP USER '삭제할 계정'@'호스트명'; +FLUSH PRIVILEGES; + +-- Altibase / Tibero +DROP USER user_name CASCADE; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; + +-- Cubrid +DROP USER [삭제할 계정]; +``` + +### D-03: 비밀번호 사용 기간 및 복잡도 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES WHERE resource_name LIKE 'PASSWORD%'; + +-- MySQL +SHOW VARIABLES LIKE 'validate_password%'; +SHOW VARIABLES LIKE 'default_password_lifetime'; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle: 비밀번호 정책 설정 +ALTER PROFILE <프로파일명> LIMIT + FAILED_LOGIN_ATTEMPTS 3 + PASSWORD_LIFE_TIME 30 + PASSWORD_REUSE_TIME 30 + PASSWORD_VERIFY_FUNCTION verify_function + PASSWORD_GRACE_TIME 5; +ALTER USER <계정명> PROFILE <프로파일명>; + +-- MSSQL: 암호 만료 강제 적용 (SSMS GUI) +-- 보안 > 로그인 > 속성 > "암호 만료 강제 적용" 설정 +-- OS 암호 정책: [로컬 보안 정책] > [암호 정책] > 최대 암호 사용 기간: 60일 + +-- MySQL: 복잡도 정책 +INSTALL COMPONENT 'file://component_validate_password'; +SET GLOBAL validate_password.policy = 'MEDIUM'; +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.mixed_case_count = 1; +SET GLOBAL validate_password.number_count = 1; +SET GLOBAL validate_password.special_char_count = 1; +-- LifeTime 정책 +SET GLOBAL default_password_lifetime = 90; +ALTER USER '<계정명>'@'<호스트>' PASSWORD EXPIRE INTERVAL 91 DAY; + +-- Altibase +ALTER USER 계정명 LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7); + +-- Tibero +CREATE PROFILE prof LIMIT + failed_login_attempts 3 + password_lock_time 1/1440 + password_life_time 90 + password_reuse_time unlimited + password_reuse_max 10 + password_grace_time 10 + password_verify_function verify_function; +``` + +### D-04: 관리자 권한을 필요한 계정에만 허용 +**점검:** +```sql +-- Oracle: SYSDBA 권한 점검 +SELECT username FROM v$pwfile_users WHERE username NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +) AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +-- Admin 부적합 계정 점검 +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ( + 'SYS','SYSTEM','AQ_ADMINISTRATOR_ROLE','DBA','DSYS','BACSYS','SCHEDULER_ADMIN','MSYS' +) AND admin_option = 'YES' AND grantee NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +); + +-- MySQL: SUPER 권한 확인 +SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; + +-- PostgreSQL +SELECT * FROM pg_user; +SELECT username, usesuper FROM pg_shadow; + +-- Cubrid: DBA 권한 사용자 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +REVOKE <권한> FROM <계정명>; +GRANT <권한> ON <테이블명> TO <계정명>; + +-- MSSQL: sysadmin 역할에서 삭제 +EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; + +-- MySQL: SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; + +-- PostgreSQL: 불필요 관리자 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; + +-- Cubrid: DBA 권한 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +``` + +### D-05: 비밀번호 재사용 제약 설정 +**점검:** +```sql +-- Oracle +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' + AND limit IN ('UNLIMITED', 'NULL'); +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' + AND limit IN ('UNLIMITED', 'NULL'); + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; + +-- Altibase +ALTER USER [계정명] LIMIT (PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 10); + +-- Tibero +CREATE PROFILE prof LIMIT + password_reuse_time unlimited + password_reuse_max 10; +``` + +### D-06: DB 사용자 계정 개별 부여 +**점검:** +```sql +-- Oracle +SELECT username FROM dba_users ORDER BY username; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL +SELECT * FROM pg_shadow; + +-- Altibase +SELECT * FROM system_.sys_users_; +``` +**조치:** +```sql +-- Oracle: 공용 계정 삭제 후 개별 계정 생성 +DROP USER '공용계정'; +CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +GRANT connect, resource TO [계정명]; + +-- MSSQL +EXEC sp_droplogin '공용계정'; +CREATE LOGIN '생성계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성계정' FOR LOGIN '생성계정'; + +-- MySQL +DROP USER <계정명>@<호스트>; +CREATE USER '<계정명>'@'<호스트>' IDENTIFIED BY '비밀번호'; +GRANT SELECT, INSERT ON DB이름.테이블명 TO '<계정명>'@'<호스트>'; +FLUSH PRIVILEGES; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' <권한명>; +``` + +### D-07: root 권한으로 서비스 구동 제한 +**점검:** +```bash +# Oracle +ps -ef | grep pmon +ps -ef | grep tnslsnr + +# MySQL +ps -ef | grep mysqld +cat /etc/my.cnf | grep user + +# Altibase +ps -ef | grep altibase | grep -v grep +``` +**조치:** +```bash +# Oracle: oracle 계정으로 전환 후 구동 +su - oracle +lsnrctl start +sqlplus / as sysdba +startup + +# MySQL: my.cnf [mysqld] 섹션에 user 지정 +# vi /etc/my.cnf +# [mysqld] +# user = mysql + +# Altibase: 전용 계정으로 소유자 변경 +chown -R [계정명]:[그룹명] '[Altibase 디렉터리]' +``` + +### D-08: 안전한 암호화 알고리즘 사용 +**점검:** +```sql +-- Oracle: 암호화 알고리즘 확인 +SELECT * FROM v$parameter WHERE name LIKE '%crypto%'; + +-- MySQL +SHOW VARIABLES LIKE '%ssl%'; +``` +**조치:** +```sql +-- 안전한 암호화 알고리즘(AES-256, SHA-256 등) 사용 설정 +-- DBMS별 암호화 설정은 벤더 문서 참조 +``` + +### D-09: 로그인 실패 시 잠금정책 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES + WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS'; + +-- MySQL +SHOW VARIABLES LIKE 'max_connect_errors'; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE <프로파일명> LIMIT FAILED_LOGIN_ATTEMPTS 5; + +-- MySQL +SET GLOBAL max_connect_errors = 5; +``` + +## 2. 접근 관리 + +### D-10: 원격에서 DB 서버 접속 제한 +**점검:** +```sql +-- Oracle: listener.ora에서 접근 IP 제한 확인 +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL: pg_hba.conf 확인 +``` +**조치:** +```sql +-- MySQL: 원격 접속 제한 +-- 특정 IP에서만 접속 가능하도록 계정 생성 +CREATE USER '<계정명>'@'<허용IP>' IDENTIFIED BY '비밀번호'; +-- 모든 호스트 접근 가능 계정 삭제 +DROP USER '<계정명>'@'%'; +FLUSH PRIVILEGES; +``` +```bash +# Oracle: $ORACLE_HOME/network/admin/sqlnet.ora +# tcp.validnode_checking = YES +# tcp.invited_nodes = (허용IP1, 허용IP2) + +# PostgreSQL: pg_hba.conf에서 접근 IP 제한 +# host all all <허용IP>/32 md5 +``` + +### D-11: 시스템 테이블 접근 제한 +**점검:** +```sql +-- Oracle: DBA 이외 시스템 테이블 접근 권한 확인 +SELECT grantee, privilege, table_name FROM dba_tab_privs + WHERE table_name IN (SELECT table_name FROM dba_tables WHERE owner = 'SYS'); +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.<테이블명> FROM <계정명>; +``` + +### D-12: 리스너 비밀번호 설정 +**점검:** +```bash +# Oracle: listener.ora 파일 확인 +cat $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: 리스너 비밀번호 설정 +lsnrctl +LSNRCTL> set current_listener <리스너명> +LSNRCTL> change_password +# Old password: (빈칸) +# New password: <비밀번호> +LSNRCTL> save_config +``` + +### D-13: 불필요한 ODBC/OLE-DB 데이터 소스 제거 +**점검:** +```powershell +# Windows: ODBC 데이터 소스 확인 +Get-OdbcDsn +``` +**조치:** +```powershell +# Windows: 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType "System" +``` + +### D-14: 주요 파일 접근 권한 설정 +**점검:** +```bash +# Oracle +ls -la $ORACLE_HOME/dbs/*.ora +ls -la $ORACLE_HOME/network/admin/*.ora + +# MySQL +ls -la /etc/my.cnf +ls -la /var/lib/mysql/ + +# PostgreSQL +ls -la /var/lib/pgsql/data/pg_hba.conf +ls -la /var/lib/pgsql/data/postgresql.conf +``` +**조치:** +```bash +# Oracle: 640 이하 권한 설정 +chmod 640 $ORACLE_HOME/dbs/*.ora +chmod 640 $ORACLE_HOME/network/admin/*.ora +chown oracle:dba $ORACLE_HOME/dbs/*.ora + +# MySQL +chmod 640 /etc/my.cnf +chown mysql:mysql /etc/my.cnf + +# PostgreSQL +chmod 600 /var/lib/pgsql/data/pg_hba.conf +chown postgres:postgres /var/lib/pgsql/data/pg_hba.conf +``` + +### D-15: 리스너 로그 및 trace 파일 변경 제한 +**점검:** +```bash +# Oracle: listener.ora에서 ADMIN_RESTRICTIONS 확인 +grep ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: listener.ora에 추가 +# ADMIN_RESTRICTIONS_<리스너명> = ON +``` + +### D-16: Windows 인증 모드 사용 +**점검:** +```sql +-- MSSQL: 인증 모드 확인 +SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); +-- 1: Windows 인증 모드, 0: 혼합 모드 +``` +**조치:** +``` +-- MSSQL: SSMS > 서버 속성 > 보안 > "Windows 인증 모드" 선택 +``` + +## 3. 옵션 관리 + +### D-17: Audit Table 접근 제한 +**점검:** +```sql +-- Oracle: Audit 테이블 접근 권한 확인 +SELECT grantee, privilege FROM dba_tab_privs WHERE table_name LIKE '%AUDIT%'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.AUD$ FROM <계정명>; +``` + +### D-18: DBA 계정 Role이 Public으로 설정되지 않도록 조정 +**점검:** +```sql +-- Oracle: PUBLIC에 부여된 권한 확인 +SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'PUBLIC'; +``` +**조치:** +```sql +-- Oracle: PUBLIC에서 불필요 Role/권한 회수 +REVOKE FROM PUBLIC; +REVOKE EXECUTE ON <패키지명> FROM PUBLIC; +``` + +### D-19: OS_ROLES 등 FALSE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER OS_ROLES; +SHOW PARAMETER REMOTE_OS_AUTHENTICATION; +SHOW PARAMETER REMOTE_OS_ROLES; +``` +**조치:** +```sql +-- Oracle: init.ora 또는 spfile 수정 +ALTER SYSTEM SET OS_ROLES = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_AUTHENTICATION = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE; +-- DB 재시작 필요 +``` + +### D-20: 인가되지 않은 Object Owner 제한 +**점검:** +```sql +-- Oracle: Object Owner 확인 +SELECT owner, object_type, count(*) FROM dba_objects GROUP BY owner, object_type ORDER BY owner; +``` +**조치:** +```sql +-- 불필요한 Object Owner의 객체를 적절한 스키마로 이전 또는 삭제 +``` + +### D-21: 인가되지 않은 GRANT OPTION 사용 제한 +**점검:** +```sql +-- Oracle +SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE admin_option = 'YES'; +SELECT grantee, table_name, privilege, grantable FROM dba_tab_privs WHERE grantable = 'YES'; +``` +**조치:** +```sql +-- Oracle: ADMIN OPTION 제거 후 재부여 +REVOKE <권한> FROM <계정명>; +GRANT <권한> TO <계정명>; +``` + +### D-22: 자원 제한 기능 TRUE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER RESOURCE_LIMIT; +``` +**조치:** +```sql +-- Oracle +ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +``` + +### D-23: xp_cmdshell 사용 제한 +**점검:** +```sql +-- MSSQL +EXEC sp_configure 'xp_cmdshell'; +``` +**조치:** +```sql +-- MSSQL: xp_cmdshell 비활성화 +EXEC sp_configure 'show advanced options', 1; +RECONFIGURE; +EXEC sp_configure 'xp_cmdshell', 0; +RECONFIGURE; +``` + +### D-24: Registry Procedure 권한 제한 +**점검:** +```sql +-- MSSQL: 레지스트리 관련 확장 저장 프로시저 확인 +SELECT name FROM sys.objects WHERE name LIKE 'xp_reg%'; +``` +**조치:** +```sql +-- MSSQL: public에서 실행 권한 제거 +DENY EXECUTE ON xp_regread TO public; +DENY EXECUTE ON xp_regwrite TO public; +DENY EXECUTE ON xp_regdeletekey TO public; +DENY EXECUTE ON xp_regdeletevalue TO public; +DENY EXECUTE ON xp_regenumvalues TO public; +``` + +## 4. 패치 관리 + +### D-25: 주기적 보안 패치 및 벤더 권고 사항 적용 +**점검:** +```sql +-- Oracle: 버전 확인 +SELECT * FROM v$version; + +-- MSSQL: 버전 확인 +SELECT @@VERSION; + +-- MySQL: 버전 확인 +SELECT VERSION(); + +-- PostgreSQL: 버전 확인 +SELECT version(); +``` +**조치:** +``` +-- 공통: 벤더 보안 패치 사이트에서 최신 패치 확인 및 적용 +-- Oracle: https://www.oracle.com/security-alerts/ +-- MSSQL: https://learn.microsoft.com/ko-kr/sql/ +-- MySQL: https://dev.mysql.com/downloads/ +-- PostgreSQL: https://www.postgresql.org/support/security/ +``` + +### D-26: 감사 기록 정책 설정 +**점검:** +```sql +-- Oracle: Audit 설정 확인 +SHOW PARAMETER AUDIT_TRAIL; +SELECT * FROM dba_stmt_audit_opts; +SELECT * FROM dba_priv_audit_opts; + +-- MSSQL: 감사 설정 확인 +SELECT * FROM sys.server_audits; + +-- MySQL: 로그 설정 확인 +SHOW VARIABLES LIKE 'general_log%'; +SHOW VARIABLES LIKE 'log_bin%'; + +-- PostgreSQL +SHOW log_statement; +SHOW log_connections; +SHOW log_disconnections; +``` +**조치:** +```sql +-- Oracle: Audit 활성화 +ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE=SPFILE; +AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS; +AUDIT CREATE SESSION; + +-- MySQL: 일반 로그 활성화 +SET GLOBAL general_log = 'ON'; +SET GLOBAL general_log_file = '/var/log/mysql/general.log'; + +-- PostgreSQL: postgresql.conf +-- log_statement = 'all' +-- log_connections = on +-- log_disconnections = on +-- logging_collector = on +``` diff --git a/skills/kesekit-guide/scripts/cii/network.md b/skills/kesekit-guide/scripts/cii/network.md new file mode 100644 index 0000000..9d0b68d --- /dev/null +++ b/skills/kesekit-guide/scripts/cii/network.md @@ -0,0 +1,892 @@ +# 네트워크 장비 점검 스크립트 (N-01 ~ N-38) + +## 1. 계정 관리 + +### N-01: 비밀번호 설정 +**점검:** +``` +! Cisco IOS +Router> enable +Router# show running-config +! VTY, 콘솔, AUX 포트의 login/password 설정 확인 + +! Juniper Junos +user@host> configure +user@host# show + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - enable 비밀번호 +Router(config)# enable secret <비밀번호> +! VTY 비밀번호 +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! 콘솔 비밀번호 +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! AUX 비밀번호 +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> + +! Radware Alteon +Main# /cfg/sys/access/user/admpw +Main# apply +Main# save + +! Juniper Junos +user@host# set system root-authentication plain-test-passwd + +! Piolink PLOS +(config)# password +``` + +### N-02: 비밀번호 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! security passwords min-length 설정 확인 +``` +**조치:** +``` +! Cisco IOS - 비밀번호 최소 길이 설정 +Router(config)# security passwords min-length <길이> +``` + +### N-03: 암호화된 비밀번호 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! enable secret / username secret / service password-encryption 확인 + +! Juniper Junos +user@host# show +! encrypted-password 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# enable secret <비밀번호> +Router(config)# username <사용자> secret <비밀번호> +Router(config)# service password-encryption + +! Juniper Junos +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> +``` + +### N-04: 계정 잠금 임계값 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show login + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! Cisco IOS +Router(config)# login block-for <잠금시간> attempts <실패횟수> within <허용시간> + +! Juniper Junos +[edit system login retry-options] +user@host# set tries-before-disconnect <실패횟수> +user@host# set lockout-period <잠금시간> +``` + +### N-05: 사용자/명령어별 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show privilege + +! Juniper Junos +! [edit system login] 에서 superuser, read-only 클래스 분리 확인 +``` +**조치:** +``` +! Cisco IOS - 사용자별 권한 수준 지정 +Router(config)# username [ID] privilege [1-15] secret [PASS] +! 명령어별 권한 수준 지정 (중요 명령어 레벨 15 적용) +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging + +! Juniper Junos +[edit system login] +login { + class class-name { + allow-commands "regular-expression"; + deny-commands "regular-expression"; + idle-timeout minutes; + permissions [ permissions ]; + } +} + +! Piolink PLOS +! 슈퍼 유저(root)와 일반 유저로 권한 분리 관리 +``` + +## 2. 접근 관리 + +### N-06: VTY 접근(ACL) 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list 및 access-class 설정 확인 + +! Juniper Junos +user@host# show +! firewall filter + 루프백 인터페이스 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty 0 4 +Router(config-line)# access-class in + +! Radware Alteon +# cfg > sys > access > mgmt > add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply > save + +! Juniper Junos +user@host# set policy-options prefix-list +user@host# edit firewall family inet filter +user@host# edit term +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set from protocol tcp +user@host# set from destination-port ssh +user@host# set then discard +! 기본 허용 종료 +user@host# set term then accept +! 루프백에 적용 +user@host# set interfaces lo0 unit 0 family inet filter input + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-07: Session Timeout 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! exec-timeout 설정 확인 +``` +**조치:** +``` +! Cisco IOS (10분 이하 권고, 예: 5분) +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 + +! Radware Alteon +# cfg > sys > idle <분> > apply > save + +! Juniper Junos +[edit login] +user@host# set class <클래스> idle-timeout <분> + +! Piolink PLOS +(config)# terminal timeout <분> +``` + +### N-08: VTY 접속 시 안전한 프로토콜 사용 +**점검:** +``` +! Cisco IOS +Router# show ip ssh +Router# show version + +! Juniper Junos +user@host# set ssh +``` +**조치:** +``` +! Cisco IOS - SSH 설정 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +Router(config)# ip ssh version 2 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh authentication-retries <횟수> +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh + +! Radware Alteon +# cfg > /sys/sshd ena > /sys/sshd on > apply > save + +! Juniper Junos +root# set system services ssh +root# delete system services telnet +root# commit + +! Piolink PLOS +(config-management-access)# ssh status enable +(config-management-access)# telnet status disable +(config-management-access)# apply +``` + +### N-09: 불필요한 보조 입출력 포트 사용 금지 +**점검:** +``` +! Cisco IOS +Router# show running +! 불필요 포트 Up/Down 확인 +``` +**조치:** +``` +! Cisco IOS - AUX 포트 차단 +Router(config)# line aux 0 +Router(config-line)# no password +Router(config-line)# transport input none +Router(config-line)# no exec +Router(config-line)# exec-timeout 0 1 + +! Juniper Junos +[edit system ports] +root# set auxiliary disable +root# commit +``` + +### N-10: 로그인 시 경고 메시지 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! banner 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# banner motd # <경고 문구> # +Router(config)# banner login # <경고 문구> # +Router(config)# banner exec # <경고 문구> # + +! Radware Alteon +# cfg > sys > banner > apply > save + +! Juniper Junos +[edit system login] +message "경고 문구" +``` + +### N-11: 원격로그 서버 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging trap informational +Router(config)# logging +Router(config)# logging facility local6 +Router(config)# logging source-interface serial 0 + +! Radware Alteon +# cfg > sys > /syslog/host > apply > save + +! Juniper Junos +user@host# edit system syslog +user@host# set system syslog file message any error +user@host# set system syslog host any any +user@host# set archive files 5 sizes 5m world-readable + +! Piolink PLOS +# logging server enable +# logging server +``` + +## 3. 패치 관리 + +### N-12: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +``` +! Cisco IOS +Router# show version + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! 공통 +! 1. 하드웨어/소프트웨어/EOL/패치 현황 문서화 +! 2. 벤더 보안 패치 및 권고사항 입수 +! 3. 취약점 영향도/발생 가능성 분석 후 패치 우선순위 결정 +! 4. 테스트베드(GNS3 등)에서 패치 검증 +! 5. 패치 적용 전 이미지/설정 백업 후 적용 +! 벤더별 패치 사이트: +! Cisco: https://software.cisco.com +! Juniper: https://support.juniper.net/support/downloads +! 공통: https://www.krcert.or.kr +``` + +## 4. 로그 관리 + +### N-13: 로깅 버퍼 크기 설정 +**점검:** +``` +! Cisco IOS +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging buffered 16000 +Router(config)# logging buffered informational + +! Piolink PLOS +(config)# logging buffer +(config)# logging priority +``` + +### N-14: 정책에 따른 로깅 설정 +**점검:** +``` +! Cisco IOS +Router# show logging + +! Juniper Junos +user@host# show log messages +``` +**조치:** +``` +! 공통 - 6가지 로깅 방법 활용 +! 1. 콘솔 로깅: 콘솔 포트에서만 확인 +! 2. Buffered 로깅: RAM에 저장 (버퍼 가득 차면 오래된 로그 대체) +! 3. Terminal 로깅: terminal monitor로 VTY에 전송 +! 4. Syslog: 외부 syslog 서버에 저장 +! 5. SNMP traps: 외부 SNMP 서버에 전송 +! 6. ACL 침입 로깅: ACL 룰에 log/log-input 추가 +``` + +### N-15: NTP 및 시각 동기화 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ntp server 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# ntp server + +! Radware Alteon +# cfg > /sys/ntp > on +# prisrvr +# intrval <동기화주기> +# tzone +9:00 +# apply > save + +! Juniper Junos +[edit system ntp] +user@host# set server +user@host# set boot-server +``` + +### N-16: Timestamp 로그 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service timestamps 확인 +``` +**조치:** +``` +! Cisco IOS - UTC 시간 밀리초 단위 +Router(config)# service timestamps log datetime msec show-timezone +! 로컬 시간(KST) 밀리초 단위 +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone +``` + +## 5. 기능 관리 + +### N-17: SNMP 서비스 확인 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show snmp + +! Juniper Junos +user@host# show snmp + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - SNMP 비활성화 +Router(config)# no snmp-server + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: d + +! Juniper Junos +user@host# no set snmp community public +``` + +### N-18: SNMP Community String 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community 설정 확인 (public/private 사용 여부) +``` +**조치:** +``` +! Cisco IOS +Router(config)# snmp-server community <복잡한String> + +! Radware Alteon +# cfg/sys/ssnmp +# rcomm <복잡한String> +# wcomm <복잡한String> +# apply > save + +! Juniper Junos +user@host# set snmp community <복잡한String> authorization read-only + +! Piolink PLOS +switch(config-snmp)# community <복잡한String> +switch(config-snmp)# status enable +switch(config-snmp)# apply +``` + +### N-19: SNMP ACL 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community + ACL 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + +! Juniper Junos +[edit snmp] +user@host# edit client-list +user@host# set default restrict +user@host# set +user@host# up +user@host# edit community +user@host# set client-list-name + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-20: SNMP Community 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community RO/RW 확인 +``` +**조치:** +``` +! Cisco IOS - RO 권한만 설정 +Router(config)# snmp-server community RO + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: r +>> Main# apply + +! Juniper Junos +[edit snmp] +user@host# delete community +user@host# set community authorization read-only +! SNMPv3 그룹 RW 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <모델> security-level <레벨> write-view + +! Piolink PLOS +switch(config-snmp)# policy read-only +switch(config-snmp)# apply +``` + +### N-21: TFTP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tftp +``` + +### N-22: Spoofing 방지 필터링 적용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list deny 설정 확인 + +! Juniper Junos +! Configure/Apply Firewall Filters 확인 +``` +**조치:** +``` +! Cisco IOS - Anti-Spoofing ACL (Extended ACL 100-199) +Router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +Router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +Router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +Router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any +Router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +Router(config)# access-list permit ip any any +Router(config)# interface serial <인터페이스> +Router(config-if)# ip access-group in + +! Juniper Junos +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +[edit firewall family inet filter ] +user@host# set term then accept +user@host# set interfaces <인터페이스> unit <유닛> family inet filter input +``` + +### N-23: DDoS 공격 방어 설정 또는 DDoS 장비 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show configuration +``` +**조치:** +``` +! 공통 - DDoS 방어 3가지 방법 +! 1. ACL: 스푸핑 방지 필터링 사전 적용, 공격 유형별 IP/프로토콜/포트 임시 차단 +! 2. Rate Limiting: UDP, ICMP, TCP SYN 패킷 대역폭 제한 +! 3. TCP Intercept: SYN Flooding 방어 +! - Intercept 모드: 라우터가 SYN-ACK 대신 응답 +! - Watch 모드: SYN 전달 후 30초 미완료 시 RST 전송 +``` + +### N-24: 사용하지 않는 인터페이스 비활성화 +**점검:** +``` +! Cisco IOS +Router# show interface +! Administratively down 확인 + +! Juniper Junos +user@host# show interface terse +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# shutdown + +! Radware Alteon +>> Main# /cfg/port <포트>/dis +>> Main# apply + +! Juniper Junos +[edit interfaces] +user@host# set <인터페이스> disable + +! Piolink PLOS +switch(config)# port <포트> status disable +switch(config)# apply +``` + +### N-25: TCP Keepalive 서비스 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service tcp-keepalives 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# service tcp-keepalives-in +Router(config)# service tcp-keepalives-out +``` + +### N-26: Finger 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip finger + +! Juniper Junos +[edit system services] +user@host# delete finger +user@host# commit +``` + +### N-27: 웹 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip http server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip http server +Router(config)# no ip http secure-server + +! Radware Alteon +>> Main# /cfg/sys/access/https/https dis +>> Main# apply + +! Juniper Junos +user@host# delete system services web-management + +! Piolink PLOS +(config-management-access)# http status disable +(config-management-access)# https status disable +``` + +### N-28: TCP/UDP Small 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +``` + +### N-29: Bootp 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip bootp server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip bootp server +! DHCP 유지하고 BOOTP만 차단 시 +Router(config)# ip dhcp bootp ignore + +! Radware Alteon +>> Main# /cfg/sys/bootp dis +>> Main# apply + +! Juniper Junos +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스> server <주소> +``` + +### N-30: CDP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show cdp +``` +**조치:** +``` +! Cisco IOS - 전체 비활성화 +Router(config)# no cdp run +! 특정 인터페이스 비활성화 +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +``` + +### N-31: Directed-broadcast 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast + +! Radware Alteon +# cfg/l3/frwd > dirbr disable > apply > save + +! Passport +# config vlan ip directed-broadcast > disable +``` + +### N-32: Source Routing 차단 +**점검:** +``` +! Cisco IOS / Juniper Junos +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip source-route + +! Juniper Junos +user@host# set chassis no-source-route +``` + +### N-33: Proxy ARP 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp + +! Juniper Junos +[edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp +``` + +### N-34: ICMP unreachable, redirect 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! 각 인터페이스 no ip unreachables / no ip redirects 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects + +! Juniper Junos - 전체 장비 +[edit system] +user@host# set no-redirects +! 특정 인터페이스 +[edit interfaces] +user@host# set <인터페이스> unit <유닛> family <패밀리> no-redirects +``` + +### N-35: identd 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip identd +``` + +### N-36: Domain Lookup 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip domain lookup +``` + +### N-37: PAD 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service pad +``` + +### N-38: mask-reply 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show ip interface +! "ICMP mask replies are never sent" 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +``` diff --git a/skills/kesekit-guide/scripts/cii/pc.md b/skills/kesekit-guide/scripts/cii/pc.md new file mode 100644 index 0000000..167c9ca --- /dev/null +++ b/skills/kesekit-guide/scripts/cii/pc.md @@ -0,0 +1,348 @@ +# PC 점검 스크립트 (PC-01 ~ PC-18) + +## 1. 계정 관리 + +### PC-01: 비밀번호의 주기적 변경 +**점검:** +```powershell +# 최대 암호 사용 기간 확인 +net accounts | findstr "최대" +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol.cfg +findstr "MaximumPasswordAge" C:\secpol.cfg +findstr "MinimumPasswordAge" C:\secpol.cfg +findstr "PasswordHistorySize" C:\secpol.cfg +``` +**조치:** +```powershell +# 최대 암호 사용 기간 90일 설정 +net accounts /maxpwage:90 +# 최소 암호 사용 기간 1일 +net accounts /minpwage:1 + +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최대 암호 사용 기간": 90일 +# "최소 암호 사용 기간": 1일 +# "최근 암호 기억": 24개 + +# 계정별 비밀번호 기간 설정 +# LUSRMGR.MSC > 사용자 > 계정 속성 > "암호 사용 기간 제한 없음" 해제 +``` + +### PC-02: 비밀번호 관리정책 설정 +**점검:** +```powershell +# 암호 복잡성 및 최소 길이 확인 +net accounts +secedit /export /cfg C:\secpol.cfg +findstr "MinimumPasswordLength" C:\secpol.cfg +findstr "PasswordComplexity" C:\secpol.cfg +``` +**조치:** +```powershell +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최소 암호 길이": 8문자 이상 +# "암호는 복잡성을 만족해야 함": 사용함 + +# 복잡성 기준: 영문 대/소문자, 숫자, 특수문자 중 +# 2종류 조합 시 최소 10자리 이상 +# 3종류 조합 시 최소 8자리 이상 +``` + +### PC-03: 복구 콘솔에서 자동 로그온 금지 +**점검:** +```powershell +# 복구 콘솔 자동 로그온 설정 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "복구 콘솔: 자동 관리 로그온 허용" -> "사용 안 함" + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel /t REG_DWORD /d 0 /f +``` + +## 2. 서비스 관리 + +### PC-04: 공유 폴더 제거 +**점검:** +```powershell +# 공유 폴더 목록 확인 +net share +# 기본 공유 폴더 확인 (C$, D$, Admin$, IPC$) +Get-SmbShare +# AutoShareWks 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks +``` +**조치:** +```powershell +# 기본 공유 폴더 삭제 +net share C$ /delete +net share D$ /delete +net share Admin$ /delete + +# 재부팅 시 자동 공유 방지 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 일반 공유 폴더 삭제 +net share <공유폴더명> /delete + +# 공유 폴더 접근에 "Everyone" 제거 (GUI) +# 컴퓨터 관리 > 공유 폴더 > 공유 > 속성 > 공유 사용 권한 > Everyone 제거 + +# 암호로 보호된 공유 설정 +# 설정 > 네트워크 > 고급 공유 설정 > 모든 네트워크 > "암호로 보호된 공유" 켬 +``` + +### PC-05: 불필요한 서비스 제거 +**점검:** +```powershell +# 실행 중인 서비스 목록 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType +# 특정 불필요 서비스 확인 +Get-Service -Name "RemoteRegistry","Messenger","Clipbook","Alerter" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# 불필요 서비스 중지 및 시작 유형 변경 +# GUI: services.msc > 해당 서비스 > 속성 > 시작 유형: 사용 안 함 + +# PowerShell로 서비스 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 일반적으로 불필요한 서비스 예시: +# Alerter, Clipbook, Computer Browser, DHCP Client (고정IP 사용 시) +# Distributed Link Tracking Client, Error Reporting Service +# Messenger, NetMeeting Remote Desktop Sharing +# Print Spooler (프린터 미사용 시), Remote Registry +# Simple TCP/IP Services, Universal Plug and Play Device Host +``` + +### PC-06: 비인가 상용 메신저 사용 금지 +**점검:** +```powershell +# 설치된 메신저 프로그램 확인 +Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -match "카카오톡|Skype|NateOn|Telegram"} | Select-Object Name +# 실행 중인 메신저 프로세스 확인 +Get-Process | Where-Object {$_.ProcessName -match "kakaotalk|skype|nateon"} | Select-Object ProcessName +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows Messenger +# "Windows Messenger를 실행 허용 안 함": 사용 + +# 상용 메신저 제거 +# 설정 > 앱 > 앱 및 기능 > 해당 메신저 제거 +``` + +### PC-07: 파일 시스템이 NTFS 포맷으로 설정 +**점검:** +```powershell +# 디스크 볼륨 파일 시스템 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size +# 또는 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT32 -> NTFS 변환 (비파괴 변환) +convert C: /fs:ntfs + +# 변환 후 폴더/파일에 적합한 ACL 적용 +# 속성 > 보안 > 편집 > 그룹/계정별 권한 설정 +``` + +### PC-08: 멀티 부팅 방지 +**점검:** +```powershell +# 설치된 OS 확인 +bcdedit /enum +# 또는 +msconfig +# 부팅 탭에서 2개 이상 OS 확인 +``` +**조치:** +```powershell +# msconfig > 부팅 탭 > 사용하지 않는 OS 선택 후 삭제 +# 또는 +bcdedit /delete {identifier} +``` + +### PC-09: 브라우저 종료 시 임시 인터넷 파일 삭제 +**점검:** +```powershell +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 +# > Internet Explorer > 인터넷 제어판 > 고급 페이지 +# "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기": 사용 + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit /t REG_DWORD /d 1 /f +``` + +## 3. 패치 관리 + +### PC-10: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```powershell +# 설치된 HOT FIX 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +# Windows Update 설정 확인 +Get-WindowsUpdateLog +# 자동 업데이트 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" +``` +**조치:** +```powershell +# 설정 > Windows Update > 업데이트 확인 +# PowerShell로 업데이트 확인 및 설치 +Install-Module PSWindowsUpdate -Force +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot +``` + +### PC-11: 지원이 종료되지 않은 Windows OS Build 적용 +**점검:** +```powershell +# 현재 OS 빌드 버전 확인 +[System.Environment]::OSVersion.Version +Get-ComputerInfo | Select-Object WindowsVersion, OsBuildNumber, WindowsProductName +winver +``` +**조치:** +```powershell +# Windows Update를 통한 최신 빌드 적용 +# 설정 > Windows Update > 업데이트 확인 +# 수동 업데이트: https://www.microsoft.com/ko-kr/software-download/ +``` + +## 4. 보안 관리 + +### PC-12: Windows 자동 로그인 점검 +**점검:** +```powershell +# 자동 로그인 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword +``` +**조치:** +```powershell +# 자동 로그인 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +# DefaultPassword 값 삭제 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +``` + +### PC-13: 바이러스 백신 프로그램 설치 및 주기적 업데이트 +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntivirusSignatureLastUpdated, AntispywareEnabled +# 백신 설치 여부 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState +``` +**조치:** +```powershell +# Windows Defender 업데이트 +Update-MpSignature +# 설정 > Windows 보안 > 바이러스 및 위협 방지 > 보호 업데이트 > 업데이트 확인 +``` + +### PC-14: 백신 실시간 감시 기능 활성화 +**점검:** +```powershell +# 실시간 보호 상태 확인 +Get-MpPreference | Select-Object DisableRealtimeMonitoring +Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled +``` +**조치:** +```powershell +# 실시간 보호 활성화 +Set-MpPreference -DisableRealtimeMonitoring $false +# GUI: Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 켬 +``` + +### PC-15: OS에서 제공하는 침입차단 기능 활성화 +**점검:** +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled +netsh advfirewall show allprofiles state +``` +**조치:** +```powershell +# 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True +# 또는 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정/해제 > "사용" 설정 +``` + +### PC-16: 화면보호기 대기 시간 설정 및 재시작 시 암호 보호 +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +``` +**조치:** +```powershell +# 화면보호기 활성화 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +# 대기 시간 설정 (600초 = 10분 이하) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +# 재시작 시 암호 보호 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f + +# GUI: 설정 > 개인설정 > 잠금화면 > 화면보호기 +# 대기: 10분 이하 / "다시 시작 시 로그온 화면 표시" 체크 +``` + +### PC-17: 이동식 미디어 자동 실행 방지 +**점검:** +```powershell +# 자동 실행 정책 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun +# GPO 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoAutorun +``` +**조치:** +```powershell +# 모든 드라이브 자동 실행 끄기 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 자동 실행 정책 +# "자동 실행 끄기": 사용 - 모든 드라이브 + +# 제어판: 하드웨어 및 소리 > 자동 실행 +# "모든 미디어 및 장치에 자동 실행 사용" 체크 해제 +``` + +### PC-18: 원격 지원 금지 +**점검:** +```powershell +# 원격 지원 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +``` +**조치:** +```powershell +# 원격 지원 비활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 0 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 원격 지원 +# "원격 지원 제공 구성": 사용 안 함 + +# 원격 데스크톱 비활성화 (필요 시) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f +``` diff --git a/skills/kesekit-guide/scripts/cii/unix.md b/skills/kesekit-guide/scripts/cii/unix.md new file mode 100644 index 0000000..6969221 --- /dev/null +++ b/skills/kesekit-guide/scripts/cii/unix.md @@ -0,0 +1,1531 @@ +# Unix 서버 점검 및 조치 스크립트 + +## 1. 계정 관리 + +### U-01: root 계정 원격 접속 제한 +**판단기준:** 원격터미널 서비스 사용 시 root 직접 접속을 차단한 경우 양호 +**점검:** +```bash +# SSH root 접속 설정 확인 +grep -i "PermitRootLogin" /etc/ssh/sshd_config + +# Telnet root 접속 설정 확인 (SOLARIS) +grep "CONSOLE" /etc/default/login + +# Telnet pts 설정 확인 (LINUX) +cat /etc/securetty | grep pts + +# Telnet rlogin 설정 확인 (AIX) +grep "rlogin" /etc/security/user +``` +**조치:** +```bash +# SSH - 모든 OS 공통 +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config +systemctl restart sshd + +# Telnet - SOLARIS +# /etc/default/login 파일에 설정 +echo "CONSOLE=/dev/console" >> /etc/default/login + +# Telnet - LINUX (/etc/securetty에서 pts 제거) +sed -i '/^pts\//d' /etc/securetty +# /etc/pam.d/login에 모듈 추가 +# auth required /lib/security/pam_securetty.so + +# Telnet - AIX (/etc/security/user) +chsec -f /etc/security/user -s root -a rlogin=false + +# HP-UX SSH +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /opt/ssh/etc/sshd_config +``` + +### U-02: 비밀번호 관리정책 설정 +**판단기준:** 영문+숫자+특수문자 8자리 이상, 최소사용 1일, 최대사용 90일, 이력 4회 이상 양호 +**점검:** +```bash +# LINUX - 비밀번호 정책 확인 +grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" /etc/login.defs +cat /etc/security/pwquality.conf 2>/dev/null +grep pam_pwquality /etc/pam.d/system-auth 2>/dev/null +grep pam_pwquality /etc/pam.d/common-password 2>/dev/null + +# SOLARIS +cat /etc/default/passwd | grep -E "HISTORY|PASSLENGTH|MINDIGIT|MINUPPER|MINLOWER|MINSPECIAL" + +# AIX +grep -E "minage|maxage|minalpha|minother|minlen|histsize" /etc/security/user +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/login.defs +sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs +sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs + +# LINUX (Redhat) - /etc/security/pwquality.conf +cat > /etc/security/pwquality.conf <<'CONF' +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +CONF + +# SOLARIS - /etc/default/passwd +cat >> /etc/default/passwd <<'CONF' +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO +CONF + +# AIX - /etc/security/user +chsec -f /etc/security/user -s default -a minage=1 +chsec -f /etc/security/user -s default -a maxage=12 +chsec -f /etc/security/user -s default -a minalpha=2 +chsec -f /etc/security/user -s default -a minother=2 +chsec -f /etc/security/user -s default -a minlen=8 +chsec -f /etc/security/user -s default -a histsize=4 + +# HP-UX - /etc/default/security +cat >> /etc/default/security <<'CONF' +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +CONF +``` + +### U-03: 계정 잠금 임계값 설정 +**판단기준:** 계정 잠금 임계값이 10회 이하로 설정된 경우 양호 +**점검:** +```bash +# LINUX - PAM 계정잠금 설정 확인 +grep pam_tally /etc/pam.d/system-auth 2>/dev/null +grep pam_faillock /etc/pam.d/system-auth 2>/dev/null +grep -E "deny|unlock_time" /etc/security/faillock.conf 2>/dev/null +authselect current 2>/dev/null + +# SOLARIS +grep "RETRIES" /etc/default/login +grep "LOCK_AFTER_RETRIES" /etc/security/policy.conf 2>/dev/null + +# AIX +grep "loginretries" /etc/security/user + +# HP-UX +grep "AUTH_MAXTRIES" /etc/default/security 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat - authselect 방식, RHEL 8+) +authselect enable-feature with-faillock +# /etc/security/faillock.conf 수정 +cat >> /etc/security/faillock.conf <<'CONF' +silent +deny = 10 +unlock_time = 120 +CONF + +# LINUX (Redhat - pam_faillock 방식) +# /etc/pam.d/system-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +# /etc/pam.d/password-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# LINUX (Debian - pam_faillock 방식) +# /etc/pam.d/common-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# SOLARIS (5.9+) +# /etc/security/policy.conf +echo "LOCK_AFTER_RETRIES=YES" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/user -s default -a loginretries=10 + +# HP-UX (11.v3+) +echo "AUTH_MAXTRIES=10" >> /etc/default/security +``` + +### U-04: 비밀번호 파일 보호 +**판단기준:** 쉐도우 비밀번호를 사용하거나 비밀번호를 암호화하여 저장하는 경우 양호 +**점검:** +```bash +# /etc/passwd 두 번째 필드가 'x'인지 확인 (x이면 shadow 사용 중) +awk -F: '$2 != "x" {print $1" : 비밀번호 평문 저장 의심"}' /etc/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX - 쉐도우 비밀번호 적용 +pwconv + +# HP-UX - Trusted Mode 전환 +/etc/tsconvert +``` + +### U-05: root 이외의 UID가 '0' 금지 +**판단기준:** root 계정과 동일한 UID(0)를 갖는 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '$3==0 && $1!="root" {print $1" has UID 0"}' /etc/passwd +``` +**조치:** +```bash +# UID 변경 +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-06: 사용자 계정 su 기능 제한 +**판단기준:** su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 양호 +**점검:** +```bash +# wheel 그룹 확인 +grep wheel /etc/group +# su 명령어 권한 확인 +ls -l /usr/bin/su +# PAM 설정 확인 (LINUX) +grep pam_wheel /etc/pam.d/su +``` +**조치:** +```bash +# wheel 그룹 생성 (없는 경우) +groupadd wheel +# su 명령 그룹 변경 및 권한 설정 +chgrp wheel /usr/bin/su +chmod 4750 /usr/bin/su +# 허용 계정 등록 +usermod -G wheel + +# LINUX PAM 설정 - /etc/pam.d/su +# auth required pam_wheel.so use_uid +``` + +### U-07: 불필요한 계정 제거 +**판단기준:** 불필요한 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +# 시스템 계정 확인 +cat /etc/passwd +# 마지막 로그인 기록 확인 +last | head -30 +# 로그인 불가 계정 확인 +awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd +``` +**조치:** +```bash +userdel <사용자_이름> +# AIX의 경우 +# rmuser <사용자_이름> +``` + +### U-08: 관리자 그룹에 최소한의 계정 포함 +**판단기준:** 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 양호 +**점검:** +```bash +grep "^root:" /etc/group +``` +**조치:** +```bash +gpasswd -d <사용자_이름> root +# AIX의 경우 +# chgrpmem -m - <사용자_이름> root +``` + +### U-09: 계정이 존재하지 않는 GID 금지 +**판단기준:** 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 양호 +**점검:** +```bash +# /etc/group과 /etc/passwd 비교 +cat /etc/group +cat /etc/gshadow 2>/dev/null +``` +**조치:** +```bash +groupdel <그룹_이름> +``` + +### U-10: 동일한 UID 금지 +**판단기준:** 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d +# 중복 UID가 있다면 해당 계정 확인 +awk -F: '{uid[$3]=uid[$3]" "$1} END{for(u in uid) if(split(uid[u],a," ")>2) print "UID "u":"uid[u]}' /etc/passwd +``` +**조치:** +```bash +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-11: 사용자 shell 점검 +**판단기준:** 로그인이 필요하지 않은 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +cat /etc/passwd | grep -E "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^games|^gopher" | grep -v admin +``` +**조치:** +```bash +# 불필요한 계정에 nologin 쉘 부여 +usermod -s /bin/false <계정명> +usermod -s /sbin/nologin <계정명> +``` + +### U-12: 세션 종료 시간 설정 +**판단기준:** Session Timeout이 600초(10분) 이하로 설정된 경우 양호 +**점검:** +```bash +echo $TMOUT +grep -i tmout /etc/profile /etc/bashrc 2>/dev/null +grep autologout /etc/csh.cshrc /etc/csh.login 2>/dev/null +``` +**조치:** +```bash +# sh, ksh, bash - /etc/profile에 추가 +echo "TMOUT=600" >> /etc/profile +echo "export TMOUT" >> /etc/profile + +# csh - /etc/csh.cshrc 또는 /etc/csh.login에 추가 +echo "set autologout=10" >> /etc/csh.cshrc +``` + +### U-13: 안전한 비밀번호 암호화 알고리즘 사용 +**판단기준:** SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 양호 ($5=SHA-256, $6=SHA-512) +**점검:** +```bash +# 암호화 알고리즘 확인 ($1=MD5, $5=SHA-256, $6=SHA-512) +awk -F: '$2 ~ /^\$/ {split($2,a,"$"); print $1" -> $"a[2]}' /etc/shadow 2>/dev/null + +# LINUX +grep ENCRYPT_METHOD /etc/login.defs +``` +**조치:** +```bash +# LINUX (Redhat) +sed -i 's/^ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' /etc/login.defs +# /etc/pam.d/system-auth +# password sufficient pam_unix.so sha512 + +# SOLARIS +# /etc/security/policy.conf +echo "CRYPT_DEFAULT=6" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/login.cfg -s usw -a pwd_algorithm=ssha512 + +# HP-UX +echo "CRYPT_DEFAULT=6" >> /etc/default/security +``` + +--- + +## 2. 파일 및 디렉터리 관리 + +### U-14: root 홈, 패스 디렉터리 권한 및 패스 설정 +**판단기준:** PATH 환경변수에 "."이 맨 앞이나 중간에 포함되지 않은 경우 양호 +**점검:** +```bash +echo $PATH | tr ':' '\n' | grep -n "^\.$" +echo $PATH | grep -E "(^\.:|:\.:|:\.$ )" +``` +**조치:** +```bash +# 환경설정 파일에서 PATH 변숫값에서 "." 제거 또는 맨 마지막으로 이동 +# ~/.profile, ~/.bashrc, /etc/profile 등에서 수정 +# 예: PATH=$PATH:$HOME/bin (상대경로 "." 삭제) +``` + +### U-15: 파일 및 디렉터리 소유자 설정 +**판단기준:** 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 양호 +**점검:** +```bash +find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +``` +**조치:** +```bash +# 불필요한 파일 제거 +rm <파일_이름> +rm -r <디렉터리_이름> +# 사용 중인 파일의 소유자 변경 +chown <사용자_이름> <파일명> +chgrp <그룹_이름> <파일명> +``` + +### U-16: /etc/passwd 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/passwd +``` +**조치:** +```bash +chown root /etc/passwd +chmod 644 /etc/passwd +``` + +### U-17: 시스템 시작 스크립트 권한 설정 +**판단기준:** 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +# LINUX (init) +ls -al /etc/rc.d/*/* 2>/dev/null +# LINUX (systemd) +ls -al /etc/systemd/system/* 2>/dev/null +# SOLARIS +ls -al /etc/rc*.d/* 2>/dev/null +``` +**조치:** +```bash +chown root <파일_이름> +chmod o-w <파일_이름> +``` + +### U-18: /etc/shadow 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 400 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/shadow +# AIX +ls -l /etc/security/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX +chown root /etc/shadow +chmod 400 /etc/shadow + +# AIX +chown root /etc/security/passwd +chmod 400 /etc/security/passwd +``` + +### U-19: /etc/hosts 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts +``` +**조치:** +```bash +chown root /etc/hosts +chmod 644 /etc/hosts +``` + +### U-20: /etc/(x)inetd.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/inetd.conf 2>/dev/null +ls -l /etc/xinetd.conf 2>/dev/null +ls -l /etc/xinetd.d/* 2>/dev/null +ls -l /etc/systemd/system.conf 2>/dev/null +``` +**조치:** +```bash +# inetd +chown root /etc/inetd.conf +chmod 600 /etc/inetd.conf + +# xinetd +chown root /etc/xinetd.conf +chmod 600 /etc/xinetd.conf +chown -R root /etc/xinetd.d/ +chmod -R 600 /etc/xinetd.d/ + +# systemd +chown root /etc/systemd/system.conf +chmod 600 /etc/systemd/system.conf +``` + +### U-21: /etc/(r)syslog.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/syslog.conf /etc/rsyslog.conf 2>/dev/null +``` +**조치:** +```bash +chown root /etc/rsyslog.conf +chmod 640 /etc/rsyslog.conf +``` + +### U-22: /etc/services 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/services +``` +**조치:** +```bash +chown root /etc/services +chmod 644 /etc/services +``` + +### U-23: SUID, SGID, Sticky bit 설정 파일 점검 +**판단기준:** 주요 실행 파일의 권한에 불필요한 SUID/SGID가 부여되어 있지 않은 경우 양호 +**점검:** +```bash +find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +``` +**조치:** +```bash +# 불필요한 특수 권한 제거 +chmod -s <파일_이름> + +# 특정 그룹에서만 사용하도록 제한 +chgrp <그룹_이름> +chmod 4750 +``` + +### U-24: 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +**판단기준:** 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정이고, 소유자 외 쓰기 권한이 없는 경우 양호 +**점검:** +```bash +# 각 사용자 홈 디렉터리의 환경변수 파일 확인 +ls -la ~/.profile ~/.kshrc ~/.cshrc ~/.bashrc ~/.bash_profile ~/.login ~/.exrc ~/.netrc 2>/dev/null +``` +**조치:** +```bash +chown <환경변수_파일> +chmod o-w <환경변수_파일> +``` + +### U-25: world writable 파일 점검 +**판단기준:** world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 양호 +**점검:** +```bash +find / -type f -perm -2 -exec ls -l {} \; 2>/dev/null +``` +**조치:** +```bash +# 일반 사용자 쓰기 권한 제거 +chmod o-w <파일_이름> +# 불필요한 파일 제거 +rm <파일_이름> +``` + +### U-26: /dev에 존재하지 않는 device 파일 점검 +**판단기준:** /dev 디렉터리에 존재하지 않는 device 파일을 제거한 경우 양호 +**점검:** +```bash +find /dev -type f -exec ls -l {} \; +``` +**조치:** +```bash +rm <파일_이름> +``` + +### U-27: $HOME/.rhosts, hosts.equiv 사용 금지 +**판단기준:** rlogin/rsh/rexec 미사용 또는 사용 시 소유자 root, 권한 600 이하, "+" 설정 없는 경우 양호 +**점검:** +```bash +find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null +cat /etc/hosts.equiv 2>/dev/null +ls -la /etc/hosts.equiv 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.equiv +chmod 600 /etc/hosts.equiv +chown root $HOME/.rhosts +chmod 600 $HOME/.rhosts +# "+" 옵션 제거 후 허용 호스트 및 계정만 등록 +``` + +### U-28: 접속 IP 및 포트 제한 +**판단기준:** 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 양호 +**점검:** +```bash +# TCP Wrapper +cat /etc/hosts.allow 2>/dev/null +cat /etc/hosts.deny 2>/dev/null + +# iptables +iptables -L 2>/dev/null + +# firewalld +firewall-cmd --list-all 2>/dev/null + +# UFW +ufw status numbered 2>/dev/null +``` +**조치:** +```bash +# TCP Wrapper +echo "ALL:ALL" > /etc/hosts.deny +echo "sshd : <허용_IP>" >> /etc/hosts.allow + +# iptables +iptables -A INPUT -p tcp -s --dport <포트> -j ACCEPT +iptables-save + +# firewalld +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="" port protocol="tcp" port="<포트>" accept' +firewall-cmd --reload + +# UFW +ufw allow from to any port <포트> +ufw reload +``` + +### U-29: hosts.lpd 파일 소유자 및 권한 설정 +**판단기준:** /etc/hosts.lpd 파일이 존재하지 않거나, 소유자 root이고 권한 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts.lpd 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.lpd +chmod 600 /etc/hosts.lpd +``` + +### U-30: UMASK 설정 관리 +**판단기준:** UMASK 값이 022 이상으로 설정된 경우 양호 +**점검:** +```bash +umask +grep -i umask /etc/profile /etc/bashrc /etc/login.defs 2>/dev/null +# SOLARIS +grep UMASK /etc/default/login 2>/dev/null +``` +**조치:** +```bash +# /etc/profile에 추가 +echo "umask 022" >> /etc/profile +echo "export umask" >> /etc/profile + +# LINUX - /etc/login.defs +sed -i 's/^UMASK.*/UMASK 022/' /etc/login.defs + +# SOLARIS - /etc/default/login +echo "UMASK=022" >> /etc/default/login + +# FTP umask 설정 +# vsFTP: vsftpd.conf -> local_umask=022 +# ProFTP: proftpd.conf -> Umask 022 +``` + +### U-31: 홈디렉토리 소유자 및 권한 설정 +**판단기준:** 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +cat /etc/passwd | awk -F: '{print $1" "$6}' | while read user dir; do + ls -ald "$dir" 2>/dev/null +done +``` +**조치:** +```bash +chown <사용자_이름> <홈_디렉터리> +chmod o-w <홈_디렉터리> +``` + +### U-32: 홈 디렉토리로 지정한 디렉토리의 존재 관리 +**판단기준:** 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $1" "$6}' /etc/passwd | while read user dir; do + [ ! -d "$dir" ] && echo "$user : $dir 존재하지 않음" +done +``` +**조치:** +```bash +# 불필요한 계정 삭제 +userdel <사용자_이름> +# 사용중인 계정의 홈 디렉터리 생성 +mkdir -p /home/<사용자_이름> +chown <사용자_이름> /home/<사용자_이름> +``` + +### U-33: 숨겨진 파일 및 디렉토리 검색 및 제거 +**판단기준:** 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 양호 +**점검:** +```bash +find / -type f -name ".*" 2>/dev/null +find / -type d -name ".*" 2>/dev/null +``` +**조치:** +```bash +rm <파일_이름> +rm -r <디렉터리_이름> +``` + +--- + +## 3. 서비스 관리 + +### U-34: Finger 서비스 비활성화 +**판단기준:** Finger 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep finger +# SOLARIS (5.10+) +inetadm | grep finger 2>/dev/null +# inetd +grep finger /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/finger 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop finger.socket 2>/dev/null +systemctl disable finger.socket 2>/dev/null + +# xinetd +# /etc/xinetd.d/finger -> disable = yes +systemctl restart xinetd + +# inetd - finger 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/finger:default +``` + +### U-35: 공유 서비스에 대한 익명 접근 제한 설정 +**판단기준:** 공유 서비스에 대해 익명 접근을 제한한 경우 양호 +**점검:** +```bash +# FTP 익명 계정 확인 +grep -E "^ftp|^anonymous" /etc/passwd + +# vsFTP +grep anonymous_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# ProFTP +sed -n '//,/<\/Anonymous>/p' /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null + +# NFS 익명 접근 +grep -E "anonuid|anongid" /etc/exports 2>/dev/null + +# Samba +grep "guest ok" /etc/samba/smb.conf 2>/dev/null +``` +**조치:** +```bash +# FTP 익명 계정 제거 +userdel ftp +userdel anonymous + +# vsFTP - /etc/vsftpd/vsftpd.conf +# anonymous_enable=NO +systemctl restart vsftpd + +# NFS - /etc/exports에서 anon 옵션 제거 +exportfs -ra + +# Samba - /etc/samba/smb.conf +# guest ok = no +smbcontrol all reload-config +``` + +### U-36: r 계열 서비스 비활성화 +**판단기준:** 불필요한 r 계열 서비스(rlogin, rsh, rexec)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "rlogin|rsh|rexec" +# inetd +grep -E "rlogin|rsh|rexec|shell|login|exec" /etc/inetd.conf 2>/dev/null +# SOLARIS (5.10+) +inetadm | egrep "shell|rlogin|rexec" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop rlogin.socket rsh.socket rexec.socket 2>/dev/null +systemctl disable rlogin.socket rsh.socket rexec.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/login:rlogin +inetadm -d svc:/network/shell:default +inetadm -d svc:/network/rexec:default +``` + +### U-37: crontab 설정파일 권한 설정 미흡 +**판단기준:** crontab/at 명령어 권한 750 이하, cron/at 관련 파일 권한 640 이하인 경우 양호 +**점검:** +```bash +ls -l /usr/bin/crontab +ls -l /usr/bin/at +ls -l /var/spool/cron/ 2>/dev/null +ls -l /var/spool/cron/crontabs/ 2>/dev/null +ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny 2>/dev/null +``` +**조치:** +```bash +# crontab/at 명령어 권한 설정 +chown root /usr/bin/crontab +chmod 750 /usr/bin/crontab +chown root /usr/bin/at +chmod 750 /usr/bin/at + +# cron 관련 파일 권한 설정 +chmod 640 /etc/cron.allow /etc/cron.deny 2>/dev/null +chmod 640 /etc/at.allow /etc/at.deny 2>/dev/null +``` + +### U-38: DoS 공격에 취약한 서비스 비활성화 +**판단기준:** echo, discard, daytime, chargen 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "echo|discard|daytime|chargen" +# inetd +grep -E "echo|discard|daytime|chargen" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep enable | egrep "echo|discard|daytime|chargen" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null +systemctl disable echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬> +``` + +### U-39: 불필요한 NFS 서비스 비활성화 +**판단기준:** 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep nfs +# AIX +ps -ef | grep nfsd +lssrc -a | grep nfs 2>/dev/null +# SOLARIS +inetadm | egrep "nfs|statd|lockd" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop nfs-server +systemctl disable nfs-server + +# SOLARIS +inetadm -d + +# AIX +stopsrc -g nfs + +# HP-UX +# /etc/rc.config.d/nfsconf -> NFS_SERVER=0 +``` + +### U-40: NFS 접근 통제 +**판단기준:** 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX +ls -l /etc/exports +cat /etc/exports +showmount -e 2>/dev/null + +# SOLARIS +ls -l /etc/dfs/dfstab 2>/dev/null +cat /etc/dfs/dfstab 2>/dev/null +``` +**조치:** +```bash +# LINUX +chown root /etc/exports +chmod 644 /etc/exports +# /etc/exports 예시: /home/share host1(ro,root_squash) +exportfs -ra + +# SOLARIS +chown root /etc/dfs/dfstab +chmod 644 /etc/dfs/dfstab +# /etc/dfs/dfstab 예시: share -F nfs -o rw=client1:client2,ro=client1:client2 /export/home +shareall +``` + +### U-41: 불필요한 automountd 제거 +**판단기준:** automountd 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "automount|autofs" +# SOLARIS +svcs -a | grep autofs 2>/dev/null +# AIX +ps -ef | grep automountd +``` +**조치:** +```bash +# LINUX +systemctl stop autofs +systemctl disable autofs + +# SOLARIS +svcadm disable svc:/system/filesystem/autofs:default + +# HP-UX +# /etc/rc.config.d/nfsconf -> AUTOFS=0 +``` + +### U-42: 불필요한 RPC 서비스 비활성화 +**판단기준:** 불필요한 RPC 서비스(rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd 등)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep rpc +# inetd +grep -E "rpc\." /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep rpc | grep enabled | egrep "ttdbserver|rex|rstart|rusers|spray|wall|rquota" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop <서비스명> +systemctl disable <서비스명> + +# inetd - 해당 RPC 서비스 항목 주석 처리 +# SOLARIS +svcadm disable <서비스_데몬> +``` + +### U-43: NIS, NIS+ 점검 +**판단기준:** NIS 서비스가 비활성화되어 있거나, 불가피 시 NIS+ 서비스를 사용하는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated" +# SOLARIS +svcs -a | grep nis 2>/dev/null +# AIX +lssrc -a | grep -E "ypserv|ypbind" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop ypserv ypbind 2>/dev/null +systemctl disable ypserv ypbind 2>/dev/null + +# SOLARIS +svcadm disable + +# HP-UX - /etc/rc.config.d/namesrvs +# NIS_MASTER_SERVER=0 +# NIS_SLAVE_SERVER=0 +# NIS_CLIENT_SERVER=0 +``` + +### U-44: tftp, talk 서비스 비활성화 +**판단기준:** tftp, talk, ntalk 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "tftp|talk|ntalk" +# inetd +grep -E "tftp|talk|ntalk" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | egrep "tftp|talk" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop tftp.socket talk.socket ntalk.socket 2>/dev/null +systemctl disable tftp.socket talk.socket ntalk.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬명> +``` + +### U-45: 메일 서비스 버전 점검 +**판단기준:** 메일 서비스 버전이 최신 버전인 경우 양호 +**점검:** +```bash +# Sendmail +sendmail -d0 -bt < /dev/null 2>&1 | grep Version +# Postfix +postconf mail_version 2>/dev/null +# Exim +exim -bV 2>/dev/null +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop sendmail postfix 2>/dev/null +systemctl disable sendmail postfix 2>/dev/null + +# 사용 시 최신 버전으로 패치 적용 +# Sendmail: http://www.sendmail.org/ +# Postfix: https://www.postfix.org/packages.html +# Exim: https://www.exim.org/ +``` + +### U-46: 일반 사용자의 메일 서비스 실행 방지 +**판단기준:** 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf 2>/dev/null +# Postfix +ls -l /usr/sbin/postsuper 2>/dev/null +# Exim +ls -l /usr/sbin/exiqgrep 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun + +# Postfix +chmod o-x /usr/sbin/postsuper + +# Exim +chmod o-x /usr/sbin/exiqgrep +``` + +### U-47: 스팸 메일 릴레이 제한 +**판단기준:** 릴레이 제한이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep "promiscuous_relay" /etc/mail/sendmail.mc 2>/dev/null +cat /etc/mail/access 2>/dev/null +# Postfix +grep -E "smtpd_recipient_restrictions|mynetworks" /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "relay_from_hosts|hosts =" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.mc에서 promiscuous_relay 제거 +# FEATURE(`promiscuous_relay')dnl 삭제 +m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +# /etc/mail/access에 허용/차단 설정 +makemap hash /etc/mail/access.db < /etc/mail/access +systemctl restart sendmail + +# Postfix - /etc/postfix/main.cf +# mynetworks = <허용할_네트워크> +postfix reload + +# Exim - /etc/exim/exim.conf +# hostlist relay_from_hosts = <허용할_네트워크> +systemctl restart exim +``` + +### U-48: expn, vrfy 명령어 제한 +**판단기준:** noexpn, novrfy 옵션이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf +# Postfix +grep disable_vrfy_command /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "acl_smtp_vrfy|acl_smtp_expn" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +# 또는 PrivacyOptions = restrictqrun, goaway + +# Postfix - /etc/postfix/main.cf +# disable_vrfy_command = yes +postfix reload + +# Exim - acl_smtp_vrfy, acl_smtp_expn 설정 제거/주석 처리 +``` + +### U-49: DNS 보안 버전 패치 +**판단기준:** 주기적으로 패치를 관리하는 경우 양호 +**점검:** +```bash +named -v 2>/dev/null +# LINUX +systemctl list-units --type=service | grep named +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop named +systemctl disable named + +# 사용 시 최신 버전 패치 +# ISC BIND: https://www.isc.org/downloads/ +# 취약점 정보: https://kb.isc.org/v1/docs/en/aa-00913 +``` + +### U-50: DNS ZoneTransfer 설정 +**판단기준:** Zone Transfer를 허가된 사용자에게만 허용한 경우 양호 +**점검:** +```bash +grep allow-transfer /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +grep xfrnets /etc/named.boot /etc/bind/named.boot 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf (또는 /etc/bind/named.conf.options) 수정 +# allow-transfer { <허용할_IP>; }; +systemctl restart named +``` + +### U-51: DNS 서비스의 취약한 동적 업데이트 설정 금지 +**판단기준:** 동적 업데이트 기능이 비활성화되었거나, 적절한 접근통제를 수행하는 경우 양호 +**점검:** +```bash +grep allow-update /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf 수정 +# 불필요 시: allow-update { none; }; +# 필요 시: allow-update { <허용할_IP>; }; +systemctl restart named +``` + +### U-52: Telnet 서비스 비활성화 +**판단기준:** Telnet 프로토콜을 비활성화하고 있는 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=socket | grep telnet +# inetd +grep telnet /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/telnet 2>/dev/null +# SOLARIS +svcs -a | grep telnet 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop telnet.socket +systemctl disable telnet.socket +systemctl start sshd + +# xinetd - /etc/xinetd.d/telnet -> disable = yes +systemctl restart xinetd + +# SOLARIS +svcadm disable svc:/network/telnet:default +svcadm enable ssh +``` + +### U-53: FTP 서비스 정보 노출 제한 +**판단기준:** FTP 접속 배너에 노출되는 정보가 없는 경우 양호 +**점검:** +```bash +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +# ProFTP +grep ServerIdent /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only +systemctl restart vsftpd + +# ProFTP - /etc/proftpd/proftpd.conf +# ServerIdent off +# 또는 ServerIdent on "Authorized access only" +systemctl restart proftpd +``` + +### U-54: 암호화되지 않는 FTP 서비스 비활성화 +**판단기준:** 암호화되지 않은 FTP 서비스가 비활성화된 경우 양호 (SFTP 사용 권고) +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "vsftpd|proftpd" +# inetd +grep "^ftp" /etc/inetd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop vsftpd proftpd 2>/dev/null +systemctl disable vsftpd proftpd 2>/dev/null + +# inetd - ftp 항목 주석 처리 +``` + +### U-55: FTP 계정 shell 제한 +**판단기준:** FTP 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +grep "^ftp" /etc/passwd +``` +**조치:** +```bash +usermod -s /bin/false ftp +# 또는 +usermod -s /sbin/nologin ftp +``` + +### U-56: FTP 서비스 접근 제어 설정 +**판단기준:** 특정 IP주소/호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 양호 +**점검:** +```bash +# ftpusers 파일 +cat /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null +ls -l /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null + +# vsFTP +grep userlist_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +cat /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep UseFtpUsers /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일 권한 설정 +chown root /etc/ftpusers +chmod 640 /etc/ftpusers + +# vsFTP - user_list 방식 +# /etc/vsftpd/vsftpd.conf +# userlist_enable=YES +# userlist_deny=YES (목록 사용자 차단) 또는 NO (목록 사용자만 허용) + +# ProFTP - proftpd.conf 접근제한 +# +# Order Deny,Allow +# AllowUser <사용자> 또는 Allow from +# DenyUser <사용자> 또는 Deny from +# +``` + +### U-57: Ftpusers 파일 설정 (root 계정 접근 제한) +**판단기준:** root 계정 접속을 차단한 경우 양호 +**점검:** +```bash +# ftpusers 파일에 root가 등록되어 있는지 확인 +grep "^root" /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep RootLogin /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일에 root 추가 (주석 해제) +# 해당 파일에서 #root -> root 로 변경 + +# ProFTP - /etc/proftpd/proftpd.conf +# RootLogin off +systemctl restart proftpd +``` + +### U-58: 불필요한 SNMP 서비스 구동 점검 +**판단기준:** SNMP 서비스를 사용하지 않는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep snmpd +# SOLARIS +svcs -a | grep snmp 2>/dev/null +# AIX +lssrc -a | grep snmp 2>/dev/null +# 프로세스 확인 +ps -ef | grep snmp +``` +**조치:** +```bash +# LINUX +systemctl stop snmpd +systemctl disable snmpd + +# SOLARIS (5.10+) +svcadm disable svc:/application/management/snmpd:default + +# AIX +stopsrc -s snmpd +# /etc/rc.tcpip에서 snmpd 주석 처리 +``` + +### U-59: 안전한 SNMP 버전 사용 +**판단기준:** SNMP 서비스를 v3 이상으로 사용하는 경우 양호 +**점검:** +```bash +# SNMPv3 사용 여부 확인 +snmpwalk -v3 -l authPriv -u <사용자> -a SHA -A <인증암호> -x AES -X <암호화암호> <서버IP> 2>/dev/null +grep -E "rouser|rwuser|createUser" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# SNMPv3 사용자 생성 +net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser + +# /etc/snmp/snmpd.conf에 추가 +# createUser myuser SHA myauthpass AES myprivpass +# rouser myuser + +systemctl restart snmpd +``` + +### U-60: SNMP Community String 복잡성 설정 +**판단기준:** Community String이 "public", "private"이 아니고 영숫자 10자리 이상 또는 영숫자+특수문자 8자리 이상인 경우 양호 +**점검:** +```bash +grep -i community /etc/snmp/snmpd.conf 2>/dev/null +# AIX +grep -i community /etc/snmpdv3.conf 2>/dev/null +# HP-UX +grep -i community /etc/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser default <복잡한_String값> +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <복잡한_String값> default +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY <새_String> <새_String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-61: SNMP Access Control 설정 +**판단기준:** SNMP 서비스에 접근 제어 설정이 되어 있는 경우 양호 +**점검:** +```bash +# LINUX (Redhat) +grep "com2sec" /etc/snmp/snmpd.conf 2>/dev/null +# LINUX (Debian) +grep -E "rocommunity|rwcommunity" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser <허용_네트워크> + +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <허용_네트워크> + +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY noAuthNoPriv <허용_IP> <넷마스크> - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-62: 로그인 시 경고 메시지 설정 +**판단기준:** 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 양호 +**점검:** +```bash +# 서버 로그온 배너 +cat /etc/motd 2>/dev/null +cat /etc/issue 2>/dev/null +cat /etc/issue.net 2>/dev/null + +# SSH 배너 +grep "^Banner" /etc/ssh/sshd_config + +# Sendmail +grep SmtpGreetingMessage /etc/mail/sendmail.cf 2>/dev/null + +# Postfix +grep smtpd_banner /etc/postfix/main.cf 2>/dev/null + +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# DNS +grep "version" /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# 서버 경고 메시지 +echo "Authorized access only. All activity is monitored." > /etc/motd +echo "Authorized access only." > /etc/issue +echo "Authorized access only." > /etc/issue.net + +# SSH - /etc/ssh/sshd_config +# Banner /etc/issue.net +systemctl restart sshd + +# Sendmail - /etc/mail/sendmail.cf +# SmtpGreetingMessage=Authorized access only + +# Postfix - /etc/postfix/main.cf +# smtpd_banner = Authorized access only + +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only + +# DNS - /etc/named.conf +# version "Not disclosed"; +``` + +### U-63: sudo 명령어 접근 관리 +**판단기준:** /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 양호 +**점검:** +```bash +ls -l /etc/sudoers +``` +**조치:** +```bash +chown root /etc/sudoers +chmod 640 /etc/sudoers +``` + +--- + +## 4. 패치 관리 + +### U-64: 주기적 보안 패치 및 벤더 권고사항 적용 +**판단기준:** 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있는 경우 양호 +**점검:** +```bash +# OS 및 커널 버전 확인 +uname -a +cat /etc/os-release 2>/dev/null +hostnamectl 2>/dev/null + +# 패치 이력 확인 (LINUX) +rpm -qa --last | head -20 2>/dev/null +apt list --upgradable 2>/dev/null + +# SOLARIS +pkg list -af entire@latest 2>/dev/null + +# AIX +oslevel -s +instfix -i | grep ML 2>/dev/null +instfix -i | grep SP 2>/dev/null + +# HP-UX +swlist -l product 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat/CentOS) +yum update -y +# LINUX (Debian/Ubuntu) +apt update && apt upgrade -y + +# SOLARIS +pkg update --accept + +# AIX - smitty installp를 통한 패치 설치 + +# HP-UX +# swinstall -s /tmp/patch.depot +``` + +--- + +## 5. 로그 관리 + +### U-65: NTP 및 시각 동기화 설정 +**판단기준:** NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 양호 +**점검:** +```bash +# NTP +ntpq -pn 2>/dev/null +cat /etc/ntp.conf 2>/dev/null + +# Chrony (RHEL 8+) +chronyc sources 2>/dev/null +cat /etc/chrony.conf 2>/dev/null +``` +**조치:** +```bash +# NTP - /etc/ntp.conf +# server +systemctl restart ntp 2>/dev/null || systemctl restart ntpd 2>/dev/null + +# Chrony - /etc/chrony.conf +# server +systemctl restart chronyd +``` + +### U-66: 정책에 따른 시스템 로깅 설정 +**판단기준:** 로그 기록 정책이 보안 정책에 따라 수립되어 있으며, 로그를 남기고 있는 경우 양호 +**점검:** +```bash +# LINUX +cat /etc/rsyslog.conf 2>/dev/null +ls /etc/rsyslog.d/ 2>/dev/null + +# SOLARIS +cat /etc/syslog.conf 2>/dev/null + +# AIX +cat /etc/syslog.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX - /etc/rsyslog.conf 권장 설정 +cat >> /etc/rsyslog.conf <<'CONF' +*.info;mail.none;authpriv.none;cron.none /var/log/messages +authpriv.* /var/log/secure +mail.* /var/log/maillog +cron.* /var/log/cron +*.emerg * +CONF +systemctl restart rsyslog + +# SOLARIS - /etc/syslog.conf 권장 설정 +# mail.debug /var/log/mail.log +# *.info /var/log/syslog.log +# *.alert /dev/console +# *.emerg * + +# AIX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/error.log +# mail.info /var/adm/mail.log +# auth.info /var/adm/auth.log +# refresh -s syslogd + +# HP-UX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/syslog/error.log +# mail.info /var/adm/syslog/mail.log +# auth.info /var/adm/syslog/auth.log +``` + +### U-67: 로그 디렉터리 소유자 및 권한 설정 +**판단기준:** 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX, SOLARIS +ls -la /var/log/ +# AIX +ls -la /var/adm/ 2>/dev/null +# HP-UX +ls -la /var/adm/syslog/ 2>/dev/null +``` +**조치:** +```bash +# LINUX, SOLARIS +chown root /var/log/* +chmod 644 /var/log/* + +# AIX +chown root /var/adm/* +chmod 644 /var/adm/* + +# HP-UX +chown root /var/adm/syslog/* +chmod 644 /var/adm/syslog/* +``` diff --git a/skills/kesekit-guide/scripts/cii/web-service.md b/skills/kesekit-guide/scripts/cii/web-service.md new file mode 100644 index 0000000..d70ca7c --- /dev/null +++ b/skills/kesekit-guide/scripts/cii/web-service.md @@ -0,0 +1,725 @@ +# 웹 서비스 점검 스크립트 (WEB-01 ~ WEB-26) + +## 1. 계정 관리 + +### WEB-01: Default 관리자 계정명 변경 +**점검:** +```bash +# Tomcat - 기본 계정명(tomcat, admin) 사용 여부 확인 +grep -i 'username=' /conf/server.xml +# JEUS - Security Domains > Account & Policies > Users에서 기본 계정 확인 +``` +**조치:** +```bash +# Tomcat - 기본 계정명을 유추 불가능한 이름으로 변경 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > ADD +# administrator 대신 유추 불가능한 계정명 입력 후 Administrators 그룹 체크 +./stopServer -host <도메인명>:<포트> +./startDomainAdminServer -host <도메인명>:<포트> +``` + +### WEB-02: 취약한 비밀번호 사용 제한 +**점검:** +```bash +# Tomcat +grep -i 'password=' /conf/server.xml +# 비밀번호 복잡도 기준: 2종류 이상 조합 최소 10자리 또는 3종류 이상 조합 최소 8자리 +# (영문대/소문자, 숫자, 특수문자) +``` +**조치:** +```bash +# Tomcat - 복잡도 만족하는 비밀번호 설정 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > 비밀번호 변경 +# SHA-256 이상 암호화 방식 비밀번호 설정 +``` + +### WEB-03: 비밀번호 파일 권한 관리 +**점검:** +```bash +# Tomcat +ls -al /conf/tomcat-users.xml +# IIS +# %systemroot%\system32\config\SAM 파일 속성 > 보안 확인 +# JEUS +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` +**조치:** +```bash +# Tomcat - 비밀번호 파일 권한 600 이하 설정 +chmod 600 /conf/tomcat-users.xml + +# IIS - SAM 파일 속성 > 보안 > 편집 > Administrators, SYSTEM만 허용 + +# JEUS +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` + +--- + +## 2. 서비스 관리 + +### WEB-04: 디렉터리 리스팅 방지 설정 +**점검:** +```bash +# Apache +grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" +# Nginx +grep -i "autoindex" /etc/nginx/nginx.conf +# Tomcat +grep -i "listings" /conf/web.xml +# JEUS +grep -i "allow-indexing" /WEB-INF/jeus-web-dd.xml +# WebtoB +grep -i "Options" /config/http.m | grep -i "Indexes" +``` +**조치:** +```bash +# Apache - httpd.conf 내 모든 디렉터리에서 Indexes 옵션 제거 +vi /conf/httpd.conf +# +# Options -Indexes (Indexes 삭제 또는 -Indexes 설정) +# +systemctl restart apache2 + +# Tomcat - web.xml 내 listings=false 설정 +vi /conf/web.xml +# +# listings +# false +# + +# Nginx - autoindex off 설정 +vi /conf/nginx.conf +# server { autoindex off; } +systemctl restart nginx + +# IIS - IIS 관리자 > 해당 웹사이트 > 디렉터리 검색 > "사용 안 함" 설정 + +# JEUS +vi /WEB-INF/jeus-web-dd.xml +# false + +# WebtoB +vi /config/http.m +# *NODE +# Options = "-Indexes", +wscfl -I http.m && wsdown && wsboot +``` + +### WEB-05: 지정하지 않은 CGI/ISAPI 실행 제한 +**점검:** +```bash +# Apache +grep -i "LoadModule.*cgi" /conf/httpd.conf +grep -i "ExecCGI" /conf/httpd.conf +# Nginx +grep -i "fastcgi_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - CGI 모듈 비활성화 및 ExecCGI 옵션 제거 +vi /conf/httpd.conf +# #LoadModule cgi_module modules/mod_cgi.so +# #LoadModule cgid_module modules/mod_cgid.so +# +# Options -ExecCGI +# +systemctl restart apache2 + +# Tomcat - web.xml 내 CGI 매핑 비활성화(주석 처리) +# + +# Nginx - fastcgi 설정 주석 처리 +# location ~ \.cgi$ { +# #fastcgi_pass :<포트>; +# #include fastcgi_params; +# } + +# IIS - ISAPI 및 CGI 제한 > 사용하지 않는 CGI/ISAPI 모듈 해제 + +# WebtoB - http.m 내 *SVRGROUP, *SERVER, *URI에서 CGI 설정 주석 처리 +``` + +### WEB-06: 상위 디렉터리 접근 제한 설정 +**점검:** +```bash +# Apache +grep -i "AllowOverride" /conf/httpd.conf +# Tomcat +grep -i "allowLinking" /conf/server.xml +# Nginx +grep -i "auth_basic" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - AllowOverride AuthConfig 설정 + .htaccess 인증 파일 생성 +vi /conf/httpd.conf +# +# AllowOverride AuthConfig +# +htpasswd /.htpasswd [사용자명] +systemctl restart apache2 + +# Tomcat - allowLinking 옵션 제거 +vi /conf/server.xml +# (allowLinking="true" 제거) + +# Nginx - 기본 인증으로 디렉터리 접근 제한 +# location /<접근제한 디렉터리>/ { +# auth_basic "Restricted Content"; +# auth_basic_user_file /etc/nginx/.htpasswd; +# } + +# IIS 7.0+ - web.config 내 enableParentPaths="false" 설정 +# + +# WebtoB - UpperDirRestrict = N 설정 +``` + +### WEB-07: 웹 서비스 경로 내 불필요한 파일 제거 +**점검/조치:** +```bash +# Apache +rm -rf /htdocs/manual +rm -rf /manual + +# Tomcat +rm -rf /webapps/docs/<불필요 파일> +# BUILDING.txt, RELEASE-NOTES.txt 등 매뉴얼 파일 포함 + +# Nginx +rm -rf /html/index.html + +# IIS - 샘플 디렉터리 제거 +# c:\inetpub\iissamples +# c:\winnt\help\iishelp +# c:\program files\common files\system\msadc\sample + +# JEUS +rm -rf /docs/manuals/default/web-manager/<불필요 파일> +rm -rf /samples/<불필요 파일> + +# WebtoB +rm -rf /docs/manuals/<불필요 파일> +rm -rf /samples/<불필요 파일> +``` + +### WEB-08: 파일 업로드 및 다운로드 용량 제한 +**점검:** +```bash +# Apache +grep -i "LimitRequestBody" /conf/httpd.conf +# Tomcat +grep -i "maxPostSize" /conf/server.xml +# Nginx +grep -i "client_max_body_size" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - LimitRequestBody 지시자 설정 (5MB = 5000000) +# +# LimitRequestBody 5000000 +# + +# Tomcat - server.xml 내 maxPostSize 설정 + web.xml 내 multipart-config 설정 +# +# +# 2097152 +# 4194304 +# + +# Nginx - client_max_body_size 설정 +# client_max_body_size 5M; +systemctl restart nginx + +# IIS - web.config 내 maxAllowedContentLength 설정 (기본값 30MB) +# applicationHost.config 내 bufferingLimit(4MB) 및 maxRequestEntityAllowed(0.2MB) 설정 + +# JEUS - web.xml 내 max-file-size 설정 +# 5242880 + +# WebtoB - LimitRequestBody 설정 +# LimitRequestBody = 2048000 +``` + +### WEB-09: 웹 서비스 프로세스 권한 제한 +**점검:** +```bash +# 프로세스 실행 계정 확인 +ps -ef | grep httpd | grep -v root +ps -ef | grep nginx +ps -ef | grep tomcat +ps -ef | grep jeus +``` +**조치:** +```bash +# Apache - www-data 계정으로 실행 +vi /envvars +# export APACHE_RUN_USER=www-data +# export APACHE_RUN_GROUP=www-data +chown -R www-data:www-data /etc/apache2/ /var/www/ /var/log/apache2/ +usermod -s /sbin/nologin www-data +systemctl restart apache2 + +# Tomcat - tomcat 전용 계정으로 실행 +vi /etc/systemd/system/tomcat.service +# [Service] +# User=tomcat +# Group=tomcat +chown -R tomcat:tomcat / +usermod -s /sbin/nologin tomcat +systemctl restart tomcat + +# Nginx - nginx 전용 계정으로 실행 +vi /conf/nginx.conf +# user nginx nginx; +adduser --system --no-create-home --shell /bin/false nginx +groupadd nginx && usermod -aG nginx nginx +systemctl restart nginx + +# IIS - 응용프로그램 풀 ID를 ApplicationPoolIdentity로 설정 + +# JEUS - jeus 전용 계정 생성 후 소유권 변경 +useradd -m jeus +chown -R jeus:jeus / +``` + +### WEB-10: 불필요한 프록시 설정 제한 +**점검:** +```bash +# Apache +grep -i "ProxyPass\|ProxyRequests" /conf/httpd.conf +# Tomcat +grep -i "proxyName\|proxyPort" /conf/server.xml +# Nginx +grep -i "proxy_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - 불필요한 Proxy 설정 제거, ProxyRequests Off 유지 +# +# ProxyRequests Off +# + +# Tomcat - Connector 요소에서 불필요한 proxyName, proxyPort 제거 +# Nginx - 불필요한 proxy_pass 설정 제거 +# IIS - 루트 디렉터리에서 불필요한 Proxy 설정 제거 +# JEUS - web.xml 내 불필요한 ReverseProxy 설정 제거 +# WebtoB - http.m 내 REVERSE_PROXY 설정 제거 +``` + +### WEB-11: 웹 서비스 경로 설정 +**조치:** +```bash +# Apache - DocumentRoot를 별도 경로로 변경 +# DocumentRoot [별도의 경로] + +# Tomcat - docBase를 별도 경로로 변경 +# + +# Nginx - root를 별도 경로로 변경 +# root [별도의 경로]; + +# IIS - 사이트 편집 > 실제 경로를 별도 경로로 변경 +# JEUS - Docroot = "[별도의 경로]" +# WebtoB - DOCROOT="[별도의 경로]" +``` + +### WEB-12: 웹 서비스 링크 사용 금지 +**조치:** +```bash +# Apache - FollowSymLinks 옵션 제거 +vi /conf/httpd.conf +# +# Options -FollowSymLinks +# + +# Tomcat - allowLinking 옵션 제거 (기본값: false) +# Nginx - disable_symlinks on 설정 +# location / { disable_symlinks on; } + +# IIS - 홈 디렉터리 내 바로가기 파일 제거 +# JEUS - jeus-web-dd.xml 내 alias 요소 제거 +# WebtoB - http.m 내 ALIAS 절 불필요 설정 제거 +``` + +### WEB-13: 웹 서비스 설정 파일 노출 제한 +**조치:** +```bash +# Tomcat - 불필요한 DB 연결 리소스 설정 제거 후 접근 권한 설정 +chmod 600 /conf/server.xml + +# IIS - 처리기 매핑에서 *.asa/*.asax 항목 제거 +# 요청 필터링에서 "파일 이름 확장명 거부"에 등록 + +# JEUS - domain.xml 내 불필요한 DB 연결 리소스 제거 +chmod 600 /conf/domain.xml +``` + +### WEB-14: 웹 서비스 경로 내 파일의 접근 통제 +**조치:** +```bash +# Apache +chown -R www-data:www-data /conf/apache2.conf +chmod -R 750 /conf/apache2.conf + +# Tomcat +chown -R tomcat:tomcat /conf/web.xml +chmod -R 750 /conf/web.xml + +# Nginx +chown -R nginx:nginx /conf/nginx.conf +chmod -R 750 /conf/nginx.conf + +# IIS - web.config > 속성 > 보안 > 불필요 권한 제거 + +# JEUS +chown -R jeus:jeus /config/security/SYSTEM_DOMAIN/accounts.xml +chmod -R 750 /config/security/SYSTEM_DOMAIN/accounts.xml + +# WebtoB +chown -R webtob:webtob /config/http.m +chmod -R 750 /config/http.m +``` + +### WEB-15: 불필요한 스크립트 매핑 제거 +**점검:** +```bash +# Tomcat - 불필요한 servlet-mapping 확인 +grep -A2 "servlet-mapping" /conf/web.xml +# IIS - 처리기 매핑에서 취약한 확장자 확인 +# (.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +``` +**조치:** +```bash +# Tomcat - 불필요한 servlet-mapping 제거 +# IIS - 처리기 매핑에서 미사용 확장자 매핑 제거 +# JEUS - web.xml 내 불필요한 제거 +``` + +### WEB-16: 웹 서비스 헤더 정보 노출 제한 +**점검:** +```bash +# Apache +grep -i "ServerTokens\|ServerSignature" /conf/httpd.conf +# Nginx +grep -i "server_tokens" /conf/nginx.conf +# WebtoB +grep -i "ServerTokens" /config/http.m +``` +**조치:** +```bash +# Apache - ServerTokens Prod, ServerSignature Off 설정 +vi /conf/httpd.conf +# ServerTokens Prod +# ServerSignature Off + +# Tomcat - server.xml 내 server 값을 임의 정보로 변경 +# +# + ErrorReportValve에 showServerInfo="false" 추가 +# + +# Nginx +# server_tokens off; + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS 7 이전 - JEUSMain.xml 내 command-option 추가 +# -Djeus.servlet.response.header.serverInfo=false +# JEUS 7 - domain.xml 내 response-header 설정 + +# WebtoB +# ServerTokens ProductOnly +# ServerSignature off +``` + +### WEB-17: 웹 서비스 가상 디렉터리 삭제 +**점검/조치:** +```bash +# Apache - 불필요한 Alias 지시자 확인 후 제거 +grep -i "Alias" /conf/httpd.conf + +# Tomcat - Context path 속성값 확인 후 불필요 제거 +grep -i "Context path" /conf/server.xml + +# Nginx - 불필요한 alias 지시자 제거 +grep -i "alias" /conf/nginx.conf + +# WebtoB - NODE절의 불필요한 Alias 설정 삭제 +grep -i "ALIAS" /config/http.m +``` + +### WEB-18: WebDAV 비활성화 +**점검:** +```bash +# Apache +grep -i "Dav On" /conf/httpd.conf +grep -i "LoadModule.*dav" /conf/httpd.conf +# Nginx +grep -i "dav_methods" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - WebDAV 비활성화 +vi /conf/httpd.conf +# +# Dav Off +# +systemctl restart apache2 + +# Nginx - dav_methods 설정 주석 처리 또는 제거 +systemctl restart nginx + +# IIS - ISAPI 및 CGI 제한 > WebDAV 항목 > 확장 경로 실행 허용 체크 해제 + +# WebtoB - VHOST 절에서 PUT, DELETE, MKCOL, COPY, MOVE 메소드 제거 +``` + +--- + +## 3. 보안 설정 + +### WEB-19: SSI(Server Side Includes) 사용 제한 +**점검:** +```bash +# Apache +grep -i "Includes" /conf/httpd.conf +# Tomcat +grep -i "SSIServlet\|SSIFilter" /conf/web.xml +# Nginx +grep -i "ssi on" /conf/nginx.conf +# WebtoB +grep -i "SSI" /config/http.m +``` +**조치:** +```bash +# Apache - Options Includes 제거 +# Options (Includes 삭제) + +# Tomcat - SSI 서블릿/필터 설정 주석 처리 또는 삭제 +# Nginx - ssi off; 설정 +# IIS - 처리기 매핑에서 .shtml, .shtm, .stm 확장자 매핑 제거 +# WebtoB - *SVRGROUP, *SERVER에서 SSI 관련 설정 삭제 +``` + +### WEB-20: SSL/TLS 활성화 +**점검:** +```bash +# Apache +apache2ctl -M | grep ssl +# Nginx +grep -i "ssl_protocols" /conf/nginx.conf +# WebtoB +grep -i "SSLFLAG\|SSLNAME" /config/http.m +``` +**조치:** +```bash +# Apache - SSL 모듈 활성화 및 인증서 설정 +vi /sites-available/default-ssl.conf +# +# SSLEngine on +# SSLCertificateFile /path/to/cert.crt +# SSLCertificateKeyFile /path/to/privkey.key +# +a2ensite default-ssl +systemctl restart apache2 + +# Nginx - SSL 인증서 설정 +# server { +# listen 443 ssl; +# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; +# ssl_protocols TLSv1.2 TLSv1.3; +# ssl_prefer_server_ciphers on; +# } +systemctl restart nginx + +# IIS - SSL 인증서 바인딩 설정 (IIS 관리자 > 사이트 바인딩 > https 추가) + +# WebtoB - http.m 내 SSLFLAG = Y, SSLNAME 설정 +# *SSL 절에 인증서 경로 설정 +# Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3" +``` + +### WEB-21: HTTP 리디렉션 +**조치:** +```bash +# Apache - HTTP → HTTPS 리디렉션 설정 +# +# RewriteEngine On +# RewriteCond %{HTTPS} off +# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# + +# Nginx +# server { +# listen 80; +# return 301 https://$host$request_uri; +# } + +# IIS - 사이트 바인딩 종류를 HTTPS로 설정 + +# WebtoB - URLRewrite = Y 설정 +# RewriteCond %{HTTPS} off +# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +``` + +### WEB-22: 에러 페이지 관리 +**조치:** +```bash +# Apache - 에러 코드별 일원화된 에러 페이지 설정 +vi /sites-available/000-default.conf +# ErrorDocument 400 /error.html +# ErrorDocument 401 /error.html +# ErrorDocument 403 /error.html +# ErrorDocument 404 /error.html +# ErrorDocument 500 /error.html +systemctl restart apache2 + +# Tomcat - web.xml 내 에러 페이지 설정 +# +# 404 +# /error/404.html +# + +# Nginx +# error_page 404 /404.html; +# error_page 500 502 503 504 /50x.html; +# location = /404.html { root html; internal; } + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS - web.xml 내 에러 메시지 설정 +# WebtoB - *ERRORDOCUMENT 절에 에러 페이지 설정 +# 503 status = 503, url = "/503.html" +``` + +### WEB-23: LDAP 알고리즘 적절하게 구성 +**점검:** +```bash +# Tomcat - 비밀번호 다이제스트 알고리즘 확인 +grep 'digest=' /conf/server.xml +``` +**조치:** +```bash +# Tomcat - SHA-256 이상 알고리즘 설정 +vi /conf/server.xml +# digest="SHA-256" +systemctl restart tomcat +``` + +--- + +## 4. 패치 및 로그 관리 + +### WEB-24: 별도의 업로드 경로 사용 및 권한 설정 +**조치:** +```bash +# Apache - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +# apache2.conf 내 업로드 디렉터리 접근 제한 +# +# Require all denied +# + +# Tomcat - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ + +# Nginx - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ + +# IIS - 웹 서비스 외부에 업로드 디렉터리 생성, IIS 구동 계정에 쓰기 권한 부여 + +# JEUS - 업로드 디렉터리 권한 설정 +chmod 750 +chown jeus:jeus + +# WebtoB - 업로드 디렉터리 권한 설정 +chmod 750 +chown tmax:tmax +``` + +### WEB-25: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```bash +# Apache +/bin/httpd -v + +# Tomcat +cd /lib && java -cp catalina.jar org.apache.catalina.util.ServerInfo + +# Nginx +/sbin/nginx -v + +# IIS +reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v VersionString + +# JEUS +jeusadmin -version + +# WebtoB +wscfl -version +``` +**참고 사이트:** +- Apache: http://httpd.apache.org/download.cgi +- Tomcat: https://tomcat.apache.org/ +- Nginx: https://nginx.org/en/download.html +- IIS: https://www.iis.net/downloads/microsoft +- JEUS/WebtoB: https://technet.tmaxsoft.com/ + +### WEB-26: 로그 디렉터리 및 파일 권한 설정 +**점검:** +```bash +# Apache +ls -al / +# Tomcat +ls -al /logs/ +# Nginx +ls -al /var/log/nginx/ +# JEUS +ls -al /domains/jeus_domain/servers/sample/logs/ +# WebtoB +ls -al /log/ +``` +**조치:** +```bash +# Apache +chmod o-rwx /* + +# Tomcat +chmod o-rwx /logs/* + +# Nginx +chmod o-rwx /var/log/nginx/* + +# IIS - C:\Windows\System32\config 속성 > 보안 > Everyone 권한 제거 +# C:\Windows\System32\LogFiles에서도 동일 조치 + +# JEUS - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /domains/jeus_domain/servers/sample/logs +chmod 640 /domains/jeus_domain/servers/sample/logs/* + +# WebtoB - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /log/ +chmod 640 /log/* +``` diff --git a/skills/kesekit-guide/scripts/cii/webapp.md b/skills/kesekit-guide/scripts/cii/webapp.md new file mode 100644 index 0000000..83e1041 --- /dev/null +++ b/skills/kesekit-guide/scripts/cii/webapp.md @@ -0,0 +1,880 @@ +# Web Application 점검 스크립트 + +## 1. SSTI (Server Side Template Injection) +**취약 패턴:** +```python +# Python (Jinja2) - 사용자 입력을 직접 템플릿에 삽입 +template = param # 사용자 입력이 직접 템플릿으로 사용됨 +return render_template_string(template) +``` +**안전한 구현:** +```python +# Python (Jinja2) - 사용자 입력을 템플릿 변수로 전달 +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +``` + +--- + +## 2. SQL Injection (SI) + +### 취약 패턴 +```java +// Java - 문자열 연결 방식 쿼리 (취약) +String sql = "SELECT * FROM users WHERE username = '" + userInput + "'"; +Statement stmt = connection.createStatement(); +ResultSet rs = stmt.executeQuery(sql); +``` + +### 안전한 구현 - PreparedStatement (Java) +```java +// Java - PreparedStatement 사용 +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +ResultSet resultSet = preparedStatement.executeQuery(); +``` + +### 안전한 구현 - ORM (JPA/Hibernate) +```java +// Java - JPQL 파라미터 바인딩 +public class ItemService { + @PersistenceContext + private EntityManager em; + public List findItemsByUserInput(String userInput) { + String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; + Query query = em.createQuery(jpql, Item.class); + query.setParameter("userInput", userInput); + return query.getResultList(); + } +} +``` + +### 안전한 구현 - MyBatis 파라미터 바인딩 +```xml + + + INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) + VALUES (#{num}, #{name}, #{age}, #{grade}) + + + DELETE FROM STUDENTS WHERE NUM = #{num} + +``` + +### 안전한 구현 - SQL 키워드 필터링 (Java) +```java +public static String sanitize(String input) { + if (input == null) return null; + String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; + String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; + Pattern regex = Pattern.compile(pattern + "|--"); + Matcher matcher = regex.matcher(input); + return matcher.replaceAll(" "); +} +``` + +### 안전한 구현 - PreparedStatement (PHP) +```php +// PHP - PDO PreparedStatement +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +``` + +### 안전한 구현 - 예외 처리 +```java +// Java - 적절한 예외 처리 (에러 메시지 노출 방지) +try { + // 데이터베이스 작업 +} catch (SQLException e) { + e.printStackTrace(); // 로그에만 기록 + System.out.println("An error occurred. Please try again later."); // 사용자에게 일반 메시지 +} +``` +```php +// PHP - PDO 예외 처리 +try { + // 데이터베이스 작업 +} catch (PDOException $e) { + error_log($e->getMessage()); + echo 'SQL Exception'; // 상세 에러 노출 금지 +} +``` + +### 특수문자 필터링 대상 +| 문자 | 설명 | +|------|------| +| `'` | 문자 데이터 구분 기호 | +| `;` | 쿼리 구분 기호 | +| `--`, `#` | 라인 주석 구분 기호 | +| `/* */` | 블록 주석 | + +--- + +## 3. 디렉터리 인덱싱 (DI) +**조치:** +```apache +# Apache - Indexes 옵션 제거 + + Options FollowSymLinks # Indexes 제거 + +``` +```xml + + + listings + false + +``` +```nginx +# Nginx +server { + location / { + autoindex off; + } +} +``` + +--- + +## 4. 에러 페이지 적용 미흡 (EP) +**조치:** +```apache +# Apache - 서버 정보 노출 제거 및 사용자 에러 페이지 정의 +ServerTokens Prod +ServerSignature Off +ErrorDocument 404 /main/error.html +ErrorDocument 405 /main/error.html +``` +```xml + + + + +``` +```xml + + + 404 + /errors/404 + + + 500 + /errors/500 + + + java.lang.Exception + /errors/500 + +``` +```nginx +# Nginx - 서버 정보 제거 및 사용자 에러 페이지 +http { + server_tokens off; +} +server { + error_page 400 401 402 405 /custom_4xx.html; + error_page 404 /custom_404.html; + error_page 500 502 503 504 /custom_5xx.html; + location = /custom_404.html { root /var/www/html; internal; } + location = /custom_4xx.html { root /var/www/html; internal; } + location = /custom_5xx.html { root /var/www/html; internal; } +} +``` + +--- + +## 5. 정보 누출 (IL) +**조치 항목:** +1. robots.txt, web.config, nginx.conf로 검색 차단 디렉터리/확장자 지정 +2. 백업 파일 삭제 (*.bak, *.backup, *.org, *.old, *.zip, *.log, *.sql, *.tmp, *.temp) +3. 초기 페이지/디렉터리/배너 삭제 +4. 개인정보 마스킹 처리 (홍\*동, 901231-1\*\*\*\*\*\*, 010-1234-\*\*\*\* 등) +5. 개발 중 주석/디버그 정보 제거 + +--- + +## 6. 크로스사이트 스크립트 - XSS (XS) + +### 취약 패턴 +```javascript +// JavaScript - innerHTML 사용 (취약) +document.getElementById('output').innerHTML = userInput; +// document.write(userInput); // 취약 +``` + +### 안전한 구현 - HTML Entity 변환 (Java) +```java +public static String sanitizeInput(String input) { + if (input == null) return null; + return input.replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll("\"", """) + .replaceAll("'", "'"); +} +``` + +### 안전한 구현 - HTML Entity 변환 (PHP) +```php +function escapeHtml($input) { + return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { + $escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); + $additionalEscapes = [ + '\\' => '\', + '(' => '(', + ')' => ')', + '#' => '#' + ]; + return strtr($escaped, $additionalEscapes); +} +``` + +### 특수문자 필터링 대상 +| 변경 전 | 변경 후 | +|---------|---------| +| `<` | `<` | +| `>` | `>` | +| `"` | `"` | +| `(` | `(` | +| `)` | `)` | +| `#` | `#` | +| `&` | `&` | + +### 쿠키 보안 설정 +``` +Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict +``` + +--- + +## 7. 크로스사이트 요청 위조 - CSRF (CF) + +### 안전한 구현 - CSRF Token (Java/Spring) +```java +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + String csrfToken = generateCsrfToken(); + session.setAttribute("csrfToken", csrfToken); + model.addAttribute("csrfToken", csrfToken); + return "index"; +} + +// CSRF Token 생성 함수 +private String generateCsrfToken() { + SecureRandom secureRandom = new SecureRandom(); + byte[] token = new byte[16]; + secureRandom.nextBytes(token); + return Base64.getUrlEncoder().encodeToString(token); +} + +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, + @RequestParam("csrfToken") String csrfToken, + HttpServletRequest request, Model model) { + HttpSession session = request.getSession(); + String sessionToken = (String) session.getAttribute("csrfToken"); + if (sessionToken == null || !sessionToken.equals(csrfToken)) { + throw new IllegalStateException("Invalid CSRF token"); + } + String sanitizedInput = sanitizeInput(input); + inputs.add(sanitizedInput); + return "index"; +} +``` + +### HTML 폼에 CSRF Token 포함 +```html +
+ + + + +
+``` + +### 추가 방어 조치 +1. Referer/Origin 헤더 검증으로 외부 도메인 요청 차단 +2. SameSite 쿠키 옵션 적용 +3. HTTPS 환경에서 Secure, HttpOnly 속성 적용 + +--- + +## 8. 서버사이드 요청 위조 - SSRF (SF) + +### 안전한 구현 - URL 화이트리스트 (Java) +```java +private final List allowedDomains = Arrays.asList("example.com"); +private final Map> allowedIPsAndPorts = new HashMap<>(); + +public UrlValidator() { + allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); + allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} + +public boolean isUrlAllowed(String urlString) { + try { + URL url = new URL(urlString); + String protocol = url.getProtocol(); + // HTTP와 HTTPS만 허용 + if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { + return false; + } + String host = url.getHost(); + int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); + if (allowedDomains.contains(host)) return true; + if (allowedIPsAndPorts.containsKey(host)) { + return allowedIPsAndPorts.get(host).contains(port); + } + return false; + } catch (Exception e) { + return false; + } +} +``` + +### 안전한 구현 - URL 화이트리스트 (PHP) +```php +function isUrlAllowed($url) { + $allowedDomains = ['example.com', 'api.example.com']; + $allowedIPsAndPorts = [ + '192.168.10.10' => [80, 443, 8000], + '10.0.0.1' => [80, 443] + ]; + $parsedUrl = parse_url($url); + if (!$parsedUrl || !isset($parsedUrl['host'])) return false; + + $host = $parsedUrl['host']; + $port = isset($parsedUrl['port']) ? $parsedUrl['port'] + : ($parsedUrl['scheme'] === 'https' ? 443 : 80); + if (in_array($host, $allowedDomains, true)) return true; + if (filter_var($host, FILTER_VALIDATE_IP)) { + if (array_key_exists($host, $allowedIPsAndPorts)) { + return in_array($port, $allowedIPsAndPorts[$host], true); + } + } + return false; +} +``` + +### PHP 설정 강화 +```ini +; php.ini - 원격 URL 접근 차단 +allow_url_fopen=Off +allow_url_include=Off +``` + +### 추가 방어 조치 +1. 내부 네트워크 대역 및 관리용 포트 요청 차단 +2. http, https 외 프로토콜(file://, gopher://, data://) 차단 +3. 에러 발생 시 응답값 노출 금지 +4. 애플리케이션 서버와 내부 시스템 간 네트워크 분리 + +--- + +## 9. 약한 비밀번호 정책 (BF) +**비밀번호 복잡성 검증 (JavaScript):** +```javascript +function isPasswordStrong(password) { + const minLength = 8; + const hasUpperCase = /[A-Z]/.test(password); + const hasLowerCase = /[a-z]/.test(password); + const hasNumber = /[0-9]/.test(password); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); + return password.length >= minLength + && hasUpperCase && hasLowerCase + && hasNumber && hasSpecialChar; +} +``` +**취약 ID 예시:** admin, administrator, manager, guest, tomcat, root, user +**취약 비밀번호 예시:** abcd, 1234, 1111, test, password, public, 빈 비밀번호, ID와 동일 + +--- + +## 10. 불충분한 인증 절차 (IA) + +### 안전한 구현 - 재인증 로직 (Java) +```java +// 중요 페이지 접근 시 세션 기반 인증 검증 +public String editProfile(HttpSession session, Model model) { + User user = (User) session.getAttribute("user"); + Boolean isVerified = (Boolean) session.getAttribute("isVerified"); + if (user == null || isVerified == null || !isVerified) { + return "redirect:/user/authenticate"; + } + model.addAttribute("user", user); + return "edit_profile"; +} + +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { + if (input.equals(code)) { + session.setAttribute("isVerified", true); + return "redirect:/user/edit_profile"; + } else { + return "redirect:/user/authenticate?error=true"; + } +} +``` + +### 안전한 구현 - 접근 통제 공통 모듈 (Java) +```java +public class AccessControl { + public static boolean isAuthenticated(HttpSession session) { + return session.getAttribute("user") != null; + } + public static boolean isVerified(HttpSession session) { + return Boolean.TRUE.equals(session.getAttribute("isVerified")); + } +} +``` + +--- + +## 11. 불충분한 권한 검증 (IN) + +### 안전한 구현 - 서버 사이드 세션 검증 (Java) +```java +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { + User currentUser = (User) session.getAttribute("currentUser"); + if (currentUser == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); + } + Inquiry inquiry = inquiryService.findInquiryById(id); + if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); + } + model.addAttribute("inquiry", inquiry); + return "inquiry_detail"; +} +``` + +--- + +## 12. 취약한 비밀번호 복구 절차 (PR) + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (Java) +```java +private static final String CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +private static final int PASSWORD_LENGTH = 12; + +private String generateTemporaryPassword() { + SecureRandom secureRandom = new SecureRandom(); + StringBuilder password = new StringBuilder(PASSWORD_LENGTH); + for (int i = 0; i < PASSWORD_LENGTH; i++) { + int randomIndex = secureRandom.nextInt(CHARACTERS.length()); + password.append(CHARACTERS.charAt(randomIndex)); + } + return password.toString(); +} +``` + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (PHP) +```php +function generateRandomPassword($length = 12) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; + $charactersLength = strlen($characters); + $randomPassword = ''; + for ($i = 0; $i < $length; $i++) { + $randomPassword .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomPassword; +} +``` + +--- + +## 13. 프로세스 검증 누락 (PV) + +### 안전한 구현 - 세션 기반 접근 통제 (Java/Spring) +```java +// 인터셉터 설정 - 비공개/공개 페이지 구분 +public class SessionConfig implements WebMvcConfigurer { + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SessionInterceptor()) + .addPathPatterns("/home", "/board/**") + .excludePathPatterns("/login", "/register", "/error"); + } +} + +public class SessionInterceptor implements HandlerInterceptor { + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + return true; + } +} +``` + +### 안전한 구현 - 플로우 제어 (PHP) +```php +session_start(); +if ($step_completed) { + $_SESSION['step1_completed'] = true; + header('Location: step2.php'); + exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { + header('Location: step1.php'); // 1단계 미완료 시 리다이렉트 + exit; +} +``` + +--- + +## 14. 악성 파일 업로드 (FU) + +### 안전한 구현 - 파일 업로드 보안 (Java) +```java +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of( + "image/jpeg", "image/png", "application/pdf", "text/plain"); + +// 파일명 정규화 +private static String normalizeFilename(String filename) { + if (filename == null) return null; + String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); + name = Normalizer.normalize(name, Normalizer.Form.NFC); + name = name.replace("\0", ""); + name = name.replaceAll("[<>:\"/\\\\|?*]", ""); + name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); + return name; +} + +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { + String safe = normalizeFilename(filename); + int dotCount = safe.length() - safe.replace(".", "").length(); + if (dotCount != 1) return ""; // 이중 확장자 차단 + int idx = safe.lastIndexOf('.'); + return (idx == -1) ? "" : safe.substring(idx + 1).toLowerCase(); +} + +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { + String original = file.getOriginalFilename(); + String ext = getExtension(original); + if (!Arrays.asList(ALLOWED_EXTENSIONS).contains(ext)) { + throw new IOException("허용되지 않은 확장자"); + } + // MIME 시그니처 검증 + Tika tika = new Tika(); + String mime = tika.detect(file.getInputStream()); + if (!ALLOWED_MIME.contains(mime)) { + throw new IOException("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; + Path savePath = Paths.get(uploadDir, newName); + file.transferTo(savePath.toFile()); + return newName; +} +``` + +### 안전한 구현 - 파일 업로드 보안 (PHP) +```php +function normalize_filename($filename) { + $filename = urldecode($filename); + $filename = normalizer_normalize($filename, Normalizer::FORM_C); + $filename = str_replace("\0", "", $filename); + $filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); + $filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); + return $filename; +} + +function is_valid_extension($filename, $allowed_exts) { + $safe = normalize_filename($filename); + if (substr_count($safe, '.') !== 1) return false; // 이중 확장자 차단 + $ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); + return in_array($ext, $allowed_exts, true); +} + +function save_upload($file, $uploadDir) { + $allowed_exts = ['jpg', 'jpeg', 'png', 'pdf', 'txt']; + $allowed_mime = ['image/jpeg', 'image/png', 'application/pdf', 'text/plain']; + + if (!is_valid_extension($file['name'], $allowed_exts)) { + throw new Exception("허용되지 않은 확장자"); + } + $mime = mime_content_type($file['tmp_name']); + if (!in_array($mime, $allowed_mime, true)) { + throw new Exception("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $newName = bin2hex(random_bytes(16)) . '.' . $ext; + $dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; + if (!move_uploaded_file($file['tmp_name'], $dest)) { + throw new Exception("파일 저장 실패"); + } + return $newName; +} +``` + +### 핵심 보안 조치 +1. 확장자 화이트리스트 검증 + MIME 타입 검증 +2. 파일명 난수화 (UUID 등) +3. 업로드 경로를 웹 디렉터리 외부에 배치 +4. 업로드된 파일의 실행 권한 제거 + +--- + +## 15. 파일 다운로드 (FD) + +### 안전한 구현 - 파일명 검증 (Java) +```java +public class FileDownloadUtil { + // 파일명에 영문, 숫자, 일부 특수문자만 허용 + public static boolean isValidFileName(String fileName) { + return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); + } + + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "png"); + + public static boolean isAllowedExtension(String filePath) { + String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + return ALLOWED_EXTENSIONS.contains(extension); + } +} + +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename) throws IOException { + if (!FileDownloadUtil.isValidFileName(filename) + || !FileDownloadUtil.isAllowedExtension(filename)) { + return ResponseEntity.badRequest().build(); + } + // ... 다운로드 로직 +} +``` + +### 안전한 구현 - 경로 정규화 (PHP) +```php +if (isset($_GET['file'])) { + $file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); + $filePath = realpath('../uploads/' . $file); // 경로 정규화 + // 파일 경로가 지정된 디렉터리 내에 있는지 확인 + if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { + downloadFile($filePath); + } else { + echo "잘못된 파일 경로입니다."; + exit; + } +} +``` + +### 우회 공격 대응 +| 인코딩 방식 | 예시 | +|-------------|------| +| URL 인코딩 | `.(%2e)`, `/(%2f)`, `\(%5c)` | +| 더블 URL 인코딩 | `.(%252e)`, `/(%252f)` | +| 16bit 유니코드 | `.(%u002e)`, `/(%u2215)` | +| 특수문자 중첩 | `....//` → `../` | +| 종단 문자 추가 | `[파일명]%00.jpg` | + +--- + +## 16. 불충분한 세션 관리 (IS) + +### 안전한 구현 - 세션 고정 방지 (Java/Spring) +```java +@RequestMapping("/login") +public String login(HttpServletRequest request) { + request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 + return "redirect:/home"; +} + +// Spring Security 설정 +@Override +protected void configure(HttpSecurity http) throws Exception { + http.sessionManagement() + .sessionFixation().migrateSession() + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(1).maxSessionsPreventsLogin(false) + .expiredUrl("/login?expired"); +} +``` + +### 세션 만료 시간 설정 +```xml + + + 60 + +``` +```properties +# Spring Boot application.properties +server.servlet.session.timeout=60m +``` +```php +// PHP - 세션 재생성 및 만료 설정 +session_start(); +session_regenerate_id(true); // 예측 불가능한 세션 ID 생성 +ini_set('session.gc_maxlifetime', 3600); // 60분 +ini_set('session.cookie_lifetime', 3600); +``` + +### JWT 보안 설정 +| 안전한 알고리즘 | 설명 | +|----------------|------| +| HS256~512 | 비밀 키 기반 HMAC 해시 | +| RS256~512 | 비대칭 키 RSA 서명 | +| ES256~512 | 타원 곡선 암호화 서명 | + +| 취약한 알고리즘 | 설명 | +|----------------|------| +| HS1, RS1 | SHA-1 기반 (취약) | +| none | 서명 생략 (위험) | +| plaintext | 평문 서명 (위험) | + +--- + +## 17. 데이터 평문 전송 (SN) +**조치:** +```apache +# Apache - TLSv1.2 이상 사용, SSLv2/v3 비활성화 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +``` +``` +# IIS - 레지스트리에서 SSL 2.0, 3.0 비활성화 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] +"Enabled"=dword:00000000 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] +"Enabled"=dword:00000000 +``` + +--- + +## 18. 쿠키 변조 (CC) + +### 안전한 구현 - AES + HMAC 쿠키 (Java) +```java +public class CookieUtil { + private static final int IV_LEN = 16, HMAC_LEN = 32; + private final byte[] encKey; // AES-256 키 (32 bytes) + private final byte[] hmacKey; // HMAC 키 + + // 보안 쿠키 생성 + public void addSecureCookie(HttpServletResponse resp, String name, + String plaintext, int maxAgeSec) throws Exception { + byte[] iv = new byte[IV_LEN]; + new SecureRandom().nextBytes(iv); + + // AES-256-CBC 암호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, + new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // HMAC 생성 + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); + mac.update(iv); + mac.update(ciphertext); + byte[] hmac = mac.doFinal(); + + // payload = IV + HMAC + 암호문 + byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; + System.arraycopy(iv, 0, payload, 0, iv.length); + System.arraycopy(hmac, 0, payload, iv.length, hmac.length); + System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); + + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); + + // HttpOnly, Secure, SameSite 속성 설정 + String header = String.format( + "%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", + name, encoded, maxAgeSec); + resp.addHeader("Set-Cookie", header); + } +} +``` + +--- + +## 19. 관리자 페이지 노출 (AE) +**조치:** +1. 유추하기 어려운 URL 및 포트로 관리자 페이지 변경 +2. 지정된 IP만 관리자 페이지 접근 허용 +3. 관리자 로그인 시 2차 인증(OTP, VPN, 인증서) 적용 +4. 하위 페이지별 세션 검증 구현 + +--- + +## 20. 자동화 공격 (CC) +**조치:** +1. 로그인 시도, 게시글 등록, SMS 발송 등에 횟수 제한 설정 +2. CAPTCHA 등 일회성 확인 로직 구현 +3. IDS/IPS 시스템으로 대량 패킷 감지 및 차단 +4. 로그인 실패 3~5회 초과 시 계정 잠금 로직 구현 + +--- + +## 21. 불필요한 Method 악용 (WM) + +### 조치 - Apache +```bash +# WebDAV 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs + +# 불필요한 메소드 제한 +# /etc/apache2/apache2.conf + + Dav Off + + Order Allow,Deny + Deny from all + + + +# TRACE 메소드 비활성화 +TraceEnable Off + +# CONNECT 메소드 비활성화 (mod_rewrite) + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} ^CONNECT + RewriteRule .* - [F] + +``` + +### 조치 - Tomcat +```xml + + + readonly + true + + + + +``` + +### 조치 - Nginx +```nginx +# WebDAV 비활성화 - dav_methods 지시어 삭제 +# Nginx는 0.5.17 이후 TRACE를 405로 거부 +# CONNECT 메소드는 기본적으로 미지원 +``` + +### 조치 - IIS +``` +# IIS 6.0 이상: 요청 필터링 > HTTP 동사 > 동사 거부에 TRACE 추가 +# WebDAV 기능 비활성화 확인 +``` diff --git a/skills/kesekit-guide/scripts/cii/windows.md b/skills/kesekit-guide/scripts/cii/windows.md new file mode 100644 index 0000000..e2970e3 --- /dev/null +++ b/skills/kesekit-guide/scripts/cii/windows.md @@ -0,0 +1,1489 @@ +# Windows 서버 취약점 점검/조치 스크립트 +> KISA 주요정보통신기반시설 기술적 취약점 분석평가 가이드 (W-01 ~ W-64) + +--- + +## 1. 계정 관리 + +### W-01: Administrator 계정 이름 변경 등 보안성 강화 (상) +**점검:** +```powershell +# Administrator(SID-500) 계정명 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select-Object Name, Enabled, SID + +# 로컬 보안 정책에서 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "NewAdministratorName" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# Administrator 계정명을 유추 불가능한 이름으로 변경 +Rename-LocalUser -Name "Administrator" -NewName "yourCustomAdmin" + +# 또는 wmic 사용 +wmic useraccount where "SID like '%-500'" rename "yourCustomAdmin" + +# GPO 방식: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: Administrator 계정 이름 바꾸기" 설정 +``` + +--- + +### W-02: Guest 계정 비활성화 (상) +**점검:** +```powershell +# Guest 계정 활성화 여부 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled + +# net 명령으로 확인 +net user Guest +``` +**조치:** +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" + +# 또는 net 명령 +net user Guest /active:no +``` + +--- + +### W-03: 불필요한 계정 제거 (상) +**점검:** +```powershell +# 전체 로컬 사용자 계정 목록 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Format-Table + +# 장기 미사용 계정 확인 (90일 이상 미로그인) +Get-LocalUser | Where-Object { + $_.Enabled -eq $true -and + $_.LastLogon -lt (Get-Date).AddDays(-90) +} | Select-Object Name, LastLogon +``` +**조치:** +```powershell +# 불필요한 계정 비활성화 +Disable-LocalUser -Name "<불필요한계정명>" + +# 불필요한 계정 삭제 +Remove-LocalUser -Name "<불필요한계정명>" +``` + +--- + +### W-04: 계정 잠금 임계값 설정 (상) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts + +# 상세 확인 (secedit) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutBadCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 임계값 5회로 설정 +net accounts /lockoutthreshold:5 + +# GPO 방식: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 임계값" = 5 +``` + +--- + +### W-05: 해독 가능한 암호화를 사용하여 암호 저장 해제 (상) +**점검:** +```powershell +# 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ClearTextPassword" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "해독 가능한 암호화를 사용하여 암호 저장" = 사용 안 함 +# secedit 인라인 설정 +secedit /export /cfg C:\secpol_tmp.cfg +(Get-Content C:\secpol_tmp.cfg) -replace "ClearTextPassword = 1","ClearTextPassword = 0" | Set-Content C:\secpol_tmp.cfg +secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol_tmp.cfg /areas SECURITYPOLICY +Remove-Item C:\secpol_tmp.cfg -Force +``` + +--- + +### W-06: 관리자 그룹에 최소한의 사용자 포함 (상) +**점검:** +```powershell +# Administrators 그룹 구성원 확인 +Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource + +# net 명령 +net localgroup Administrators +``` +**조치:** +```powershell +# 불필요한 계정을 Administrators 그룹에서 제거 +Remove-LocalGroupMember -Group "Administrators" -Member "<불필요한계정>" + +# 관리 업무용 계정과 일반 업무용 계정을 분리하여 운용 +``` + +--- + +### W-07: Everyone 사용 권한을 익명 사용자에 적용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous +# 값이 0이면 양호 + +# 로컬 보안 정책 내보내기로 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "EveryoneIncludesAnonymous" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: Everyone 사용 권한을 익명 사용자에게 적용" = 사용 안 함 +``` + +--- + +### W-08: 계정 잠금 기간 설정 (중) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts +# "잠금 기간(분)"과 "잠금 관찰 창(분)" 확인 + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutDuration|ResetLockoutCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 기간 60분, 잠금 수 원래대로 설정 기간 60분 +net accounts /lockoutduration:60 +net accounts /lockoutwindow:60 + +# GPO: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 기간" = 60분 +# "다음 시간 후 계정 잠금 수를 원래대로 설정" = 60분 +``` + +--- + +### W-09: 비밀번호 관리 정책 설정 (상) +**점검:** +```powershell +# 암호 정책 확인 +net accounts + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MinimumPasswordLength|PasswordComplexity|MaximumPasswordAge|MinimumPasswordAge|PasswordHistorySize" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 암호 정책 설정 +net accounts /minpwlen:8 /maxpwage:90 /minpwage:1 /uniquepw:4 + +# GPO: 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "암호는 복잡성을 만족해야 함" = 사용 +# "최소 암호 길이" = 8문자 +# "최대 암호 사용 기간" = 90일 +# "최소 암호 사용 기간" = 1일 +# "최근 암호 기억" = 4개 암호 기억됨 +``` + +--- + +### W-10: 마지막 사용자 이름 표시 안 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 마지막 사용자 이름 표시 안 함" = 사용 +``` + +--- + +### W-11: 로컬 로그온 허용 (중) +**점검:** +```powershell +# 로컬 로그온 허용 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeInteractiveLogonRight" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force + +# Administrators, IUSR_ 외 다른 계정이 있으면 취약 +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "로컬 로그온 허용" 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹 제거 + +# ntrights 유틸리티 사용 (Windows Resource Kit) +# ntrights -u "<제거할계정>" -r SeInteractiveLogonRight +``` + +--- + +### W-12: 익명 SID/이름 변환 허용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 (Windows 2003 이상) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LSAAnonymousNameLookup" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: 익명 SID/이름 변환 허용" = 사용 안 함 +``` + +--- + +### W-13: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한" = 사용 +``` + +--- + +### W-14: 원격터미널 접속 가능한 사용자 그룹 제한 (중) +**점검:** +```powershell +# Remote Desktop Users 그룹 구성원 확인 +Get-LocalGroupMember -Group "Remote Desktop Users" | Select-Object Name, ObjectClass + +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +# 0이면 원격 데스크톱 허용 상태 +``` +**조치:** +```powershell +# 관리자 외 별도 원격 접속 계정 생성 +New-LocalUser -Name "rdpUser" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -FullName "RDP 전용 사용자" +Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpUser" + +# 불필요한 계정 제거 +Remove-LocalGroupMember -Group "Remote Desktop Users" -Member "<불필요한계정>" +``` + +--- + +## 2. 서비스 관리 + +### W-15: 사용자 개인키 사용 시 암호 입력 (상) +**점검:** +```powershell +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ForceKeyProtection" C:\secpol_tmp.cfg +# 값이 2이면 양호 (키를 사용할 때마다 암호 입력) +Remove-Item C:\secpol_tmp.cfg -Force + +# 레지스트리 직접 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection +``` +**조치:** +```powershell +# 레지스트리 설정 (2 = 키를 사용할 때마다 암호 매번 입력) +reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection /t REG_DWORD /d 2 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용" +# = "키를 사용할 때마다 암호를 매 번 입력해야 함" +``` + +--- + +### W-16: 공유 권한 및 사용자 그룹 설정 (상) +**점검:** +```powershell +# 공유 폴더 목록 확인 +Get-SmbShare | Select-Object Name, Path, Description | Format-Table + +# 공유 폴더 권한에서 Everyone 확인 +Get-SmbShare | ForEach-Object { + $share = $_.Name + Get-SmbShareAccess -Name $share | Where-Object { $_.AccountName -like "*Everyone*" } | + Select-Object @{N='Share';E={$share}}, AccountName, AccessControlType, AccessRight +} +``` +**조치:** +```powershell +# 공유 폴더에서 Everyone 권한 제거 +Revoke-SmbShareAccess -Name "<공유명>" -AccountName "Everyone" -Force + +# 필요한 계정에 적절한 권한 추가 +Grant-SmbShareAccess -Name "<공유명>" -AccountName "<계정명>" -AccessRight Read -Force +``` + +--- + +### W-17: 하드디스크 기본 공유 제거 (상) +**점검:** +```powershell +# 기본 공유 확인 +net share +Get-SmbShare | Where-Object { $_.Name -match '^\w\$|^ADMIN\$' } | Select-Object Name, Path + +# AutoShareServer 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks 2>$null +``` +**조치:** +```powershell +# 기본 공유 중지 +net share C$ /delete +net share D$ /delete +net share ADMIN$ /delete + +# 재부팅 후 재생성 방지 (레지스트리) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-18: 불필요한 서비스 제거 (상) +**점검:** +```powershell +# 실행 중인 서비스 목록 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType | Format-Table + +# 불필요한 서비스 존재 여부 확인 +$unnecessaryServices = @("Alerter","ClipSrv","Browser","CryptSvc","DHCPClient", + "TrkWks","TrkSvr","ERSvc","HidServ","IMAPICD","Messenger","mnmsrvc", + "WmdmPmSN","Spooler","RemoteRegistry","simptcp","upnphost","WZCSVC") +Get-Service | Where-Object { $unnecessaryServices -contains $_.Name -and $_.Status -eq "Running" } | + Select-Object Name, DisplayName, Status +``` +**조치:** +```powershell +# 불필요한 서비스 중지 및 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 예시: Remote Registry 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled + +# 예시: Print Spooler 비활성화 (프린터 미사용 시) +Stop-Service -Name "Spooler" -Force +Set-Service -Name "Spooler" -StartupType Disabled +``` + +--- + +### W-19: 불필요한 IIS 서비스 구동 점검 (상) +**점검:** +```powershell +# IIS 서비스 상태 확인 +Get-Service -Name "W3SVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "IISADMIN" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# IIS 설치 여부 +Get-WindowsFeature -Name Web-Server 2>$null | Select-Object Name, Installed +``` +**조치:** +```powershell +# IIS 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "W3SVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "W3SVC" -StartupType Disabled -ErrorAction SilentlyContinue +Stop-Service -Name "IISADMIN" -Force -ErrorAction SilentlyContinue +Set-Service -Name "IISADMIN" -StartupType Disabled -ErrorAction SilentlyContinue + +# IIS 기능 제거 +Uninstall-WindowsFeature -Name Web-Server +``` + +--- + +### W-20: NetBIOS 바인딩 서비스 구동 점검 (상) +**점검:** +```powershell +# NetBIOS over TCP/IP 설정 확인 +Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | + Select-Object Description, TcpipNetbiosOptions +# TcpipNetbiosOptions: 0=DHCP기본, 1=사용, 2=사용안함 + +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces" /s /v NetbiosOptions +``` +**조치:** +```powershell +# NetBIOS over TCP/IP 비활성화 (WMI) +$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" +foreach ($adapter in $adapters) { + $adapter.SetTcpipNetbios(2) # 2 = NetBIOS 사용 안 함 +} + +# GUI: 네트워크 연결 > 속성 > TCP/IPv4 > 고급 > WINS 탭 +# "NetBIOS over TCP/IP 사용 안 함" 선택 +``` + +--- + +### W-21: 암호화되지 않는 FTP 서비스 비활성화 (상) +**점검:** +```powershell +# FTP 서비스 상태 확인 +Get-Service -Name "FTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "MSFTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# FTP 서비스 중지 및 비활성화 +Stop-Service -Name "FTPSVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "FTPSVC" -StartupType Disabled -ErrorAction SilentlyContinue + +# SFTP 또는 FTPS 대안 사용 권장 +``` + +--- + +### W-22: FTP 디렉토리 접근권한 설정 (상) +**점검:** +```powershell +# FTP 홈 디렉터리 경로 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/sites/site" -PSPath "IIS:\" -ErrorAction SilentlyContinue + +# FTP 홈 디렉터리 권한 확인 +icacls "C:\inetpub\ftproot" 2>$null +# Everyone 권한이 있으면 취약 +``` +**조치:** +```powershell +# FTP 홈 디렉터리에서 Everyone 권한 제거 +icacls "C:\inetpub\ftproot" /remove Everyone /T + +# 필요한 사용자에게만 권한 부여 +icacls "C:\inetpub\ftproot" /grant "ftpUser:(OI)(CI)RX" +``` + +--- + +### W-23: 공유 서비스에 대한 익명 접근 제한 설정 (상) +**점검:** +```powershell +# FTP 익명 인증 설정 확인 (IIS) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS FTP 익명 인증 비활성화 +Import-Module WebAdministration +Set-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -Value $false + +# 또는 IIS 관리자에서: +# FTP 사이트 > FTP 인증 > 익명 인증 = 사용 안 함 +``` + +--- + +### W-24: FTP 접근 제어 설정 (상) +**점검:** +```powershell +# IIS FTP IP 제한 설정 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/security/ipSecurity" -PSPath "IIS:\Sites\Default FTP Site" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS 관리자에서 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +# 1) 허용 항목 추가 (접속 허용 IP) +# 2) 기능 설정 편집 > 지정되지 않은 클라이언트 액세스 = 거부 + +# PowerShell (IIS 모듈) +Import-Module WebAdministration +# 특정 IP 허용 추가 +Add-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/ipSecurity" -Name "." -Value @{ipAddress="192.168.1.100";allowed="true"} +``` + +--- + +### W-25: DNS Zone Transfer 설정 (상) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 영역 전송 설정 확인 (DNS 서버 설치 시) +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, ZoneType +Get-DnsServerZone -ErrorAction SilentlyContinue | ForEach-Object { + Get-DnsServerZoneTransferPolicy -ZoneName $_.ZoneName -ErrorAction SilentlyContinue +} +``` +**조치:** +```powershell +# DNS 영역 전송을 특정 서버로만 제한 +# dnscmd /zoneresetsecondaries <영역이름> /securens +Set-DnsServerPrimaryZone -Name "<영역이름>" -SecureSecondaries TransferToSecureServers -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-26: RDS(Remote Data Services) 제거 (상) +**점검:** +```powershell +# MSADC 가상 디렉터리 존재 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch" 2>$null +``` +**조치:** +```powershell +# MSADC 가상 디렉터리 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 키 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\RDSServer.DataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\AdvancedDataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\VbBusObj.VbBusObjCls" /f 2>$null + +# 참고: Windows 2008 이상은 해당 없음 +``` + +--- + +### W-27: 최신 Windows OS Build 버전 적용 (상) +**점검:** +```powershell +# Windows 빌드 버전 확인 +[System.Environment]::OSVersion.Version +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").UBR + +# winver 실행 +winver + +# systeminfo로 상세 정보 +systeminfo | Select-String "OS 이름|OS 버전|OS Name|OS Version" +``` +**조치:** +```powershell +# Windows Update 확인 및 설치 +# 자동 업데이트: +# 제어판 > Windows Update + +# PowerShell로 업데이트 확인 (PSWindowsUpdate 모듈) +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot + +# 수동 패치: https://msrc.microsoft.com/update-guide +``` + +--- + +### W-28: 터미널 서비스 암호화 수준 설정 (중) +**점검:** +```powershell +# RDP 암호화 수준 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel +# 2=중간(클라이언트 호환 가능), 3=높음, 4=FIPS + +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MinEncryptionLevel 2>$null +``` +**조치:** +```powershell +# 레지스트리에서 암호화 수준 설정 (2 이상) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 3 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 보안 +# "클라이언트 연결 암호화 수준 설정" = 사용 (높음) +``` + +--- + +### W-29: 불필요한 SNMP 서비스 구동 점검 (중) +**점검:** +```powershell +# SNMP 서비스 상태 확인 +Get-Service -Name "SNMP" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# SNMP 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "SNMP" -Force -ErrorAction SilentlyContinue +Set-Service -Name "SNMP" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-30: SNMP Community String 복잡성 설정 (중) +**점검:** +```powershell +# SNMP Community String 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" 2>$null +# public, private이 있으면 취약 +``` +**조치:** +```powershell +# 기본 Community String 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v public /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v private /f 2>$null + +# 복잡한 Community String 추가 (읽기전용 = 4) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v "C0mpl3x$tr1ng!" /t REG_DWORD /d 4 /f + +# SNMP 서비스 재시작 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-31: SNMP Access Control 설정 (중) +**점검:** +```powershell +# SNMP 허용 호스트 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" 2>$null +# 값이 없으면 모든 호스트 허용 (취약) +``` +**조치:** +```powershell +# 특정 호스트로부터만 SNMP 패킷 수신 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d "192.168.1.100" /f + +# GUI: 서비스 > SNMP Service > 속성 > 보안 탭 +# "다음 호스트로부터 SNMP 패킷 받아들이기" 선택 후 호스트 등록 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-32: DNS 서비스 구동 점검 (중) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 동적 업데이트 설정 확인 +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, DynamicUpdate +``` +**조치:** +```powershell +# DNS 동적 업데이트 비활성화 +Set-DnsServerPrimaryZone -Name "<영역이름>" -DynamicUpdate None -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-33: HTTP/FTP/SMTP 배너 차단 (하) +**점검:** +```powershell +# IIS Server 헤더 확인 (HTTP 응답) +# (Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing).Headers["Server"] + +# IIS X-Powered-By 헤더 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -ErrorAction SilentlyContinue + +# SMTP 배너 확인 +# telnet localhost 25 으로 접속 시 배너 확인 +``` +**조치:** +```powershell +# [HTTP] IIS Server 헤더 제거 - URL Rewrite 모듈 필요 +# 1) URL Rewrite 설치: https://www.iis.net/downloads/microsoft/url-rewrite +# 2) 아웃바운드 규칙 추가: 서버 변수 RESPONSE_SERVER 비우기 + +# [HTTP] X-Powered-By 헤더 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -AtElement @{name="X-Powered-By"} -ErrorAction SilentlyContinue + +# [FTP] 기본 배너 숨기기 +# IIS 관리자 > FTP 사이트 > FTP 메시지 > "기본 배너 숨기기" 체크 + +# [SMTP] 배너 변경 +# cd C:\inetpub\AdminScripts +# cscript adsutil.vbs set smtpsvc/1/connectresponse "Authorized Access Only" +# net stop smtpsvc && net start smtpsvc +``` + +--- + +### W-34: Telnet 서비스 비활성화 (중) +**점검:** +```powershell +# Telnet 서비스 상태 확인 +Get-Service -Name "TlntSvr" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# Telnet 인증 방식 확인 (Windows 2003~2012) +# tlntadmn config 명령으로 확인 +``` +**조치:** +```powershell +# Telnet 서비스 중지 및 비활성화 +Stop-Service -Name "TlntSvr" -Force -ErrorAction SilentlyContinue +Set-Service -Name "TlntSvr" -StartupType Disabled -ErrorAction SilentlyContinue + +# 부득이 사용 시 NTLM 인증만 사용 +# tlntadmn config sec = +NTLM -passwd + +# 참고: Windows 2016 이상에서는 Telnet 서버 제공하지 않음 +``` + +--- + +### W-35: 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 (중) +**점검:** +```powershell +# 시스템 DSN 확인 +Get-OdbcDsn -DsnType System -ErrorAction SilentlyContinue | Select-Object Name, DriverName, Platform + +# 레지스트리에서 ODBC 데이터 소스 확인 +reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" 2>$null +``` +**조치:** +```powershell +# 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType System -ErrorAction SilentlyContinue + +# GUI: 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN +# 불필요한 데이터 소스 선택 후 제거 +``` + +--- + +### W-36: 원격터미널 접속 타임아웃 설정 (중) +**점검:** +```powershell +# RDP 세션 유휴 타임아웃 레지스트리 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime 2>$null +# 밀리초 단위: 1800000 = 30분 + +# 현재 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MaxIdleTime 2>$null +``` +**조치:** +```powershell +# 유휴 세션 타임아웃 30분(1800000ms) 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime /t REG_DWORD /d 1800000 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 세션 시간 제한 +# "활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정" = 사용 (30분) +``` + +--- + +### W-37: 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 (중) +**점검:** +```powershell +# 예약된 작업 목록 확인 +Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} | + Select-Object TaskName, TaskPath, State | + Format-Table -AutoSize + +# 예약된 작업 상세 정보 (실행 명령 포함) +Get-ScheduledTask | ForEach-Object { + $task = $_ + $actions = $task.Actions + foreach ($action in $actions) { + [PSCustomObject]@{ + TaskName = $task.TaskName + Execute = $action.Execute + Arguments = $action.Arguments + State = $task.State + } + } +} | Format-Table -AutoSize + +# schtasks 명령 +schtasks /query /fo LIST /v +``` +**조치:** +```powershell +# 의심스러운 예약 작업 비활성화 +Disable-ScheduledTask -TaskName "<작업이름>" + +# 의심스러운 예약 작업 삭제 +Unregister-ScheduledTask -TaskName "<작업이름>" -Confirm:$false + +# schtasks 명령 +schtasks /delete /tn "<작업이름>" /f +``` + +--- + +## 3. 패치 관리 + +### W-38: 주기적 보안 패치 및 벤더 권고사항 적용 (상) +**점검:** +```powershell +# 설치된 핫픽스 목록 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, InstalledOn, Description -First 20 + +# 시스템 정보에서 KB 목록 +systeminfo | findstr "KB" + +# 마지막 패치 설치 날짜 확인 +(Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).InstalledOn + +# Windows Update 이력 확인 +$session = New-Object -ComObject Microsoft.Update.Session +$searcher = $session.CreateUpdateSearcher() +$history = $searcher.QueryHistory(0, 20) +$history | Select-Object Title, Date, ResultCode | Format-Table +``` +**조치:** +```powershell +# Windows Update 실행 +# 수동: https://msrc.microsoft.com/update-guide +# 자동: 제어판 > Windows Update + +# PowerShell 모듈 사용 +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll +``` + +--- + +### W-39: 백신 프로그램 업데이트 (상) +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntispywareEnabled, AntivirusEnabled, + AntivirusSignatureLastUpdated, AntispywareSignatureLastUpdated + +# 백신 엔진 버전 확인 +Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, AntivirusSignatureVersion + +# 3rd party 백신 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState, pathToSignedProductExe +``` +**조치:** +```powershell +# Windows Defender 정의 업데이트 +Update-MpSignature + +# Windows Defender 수동 빠른 검사 +Start-MpScan -ScanType QuickScan + +# 3rd party 백신의 경우 해당 제조사 업데이트 절차 참조 +``` + +--- + +## 4. 로그 관리 + +### W-40: 정책에 따른 시스템 로깅 설정 (중) +**점검:** +```powershell +# 감사 정책 확인 +auditpol /get /category:* + +# 주요 감사 정책 확인 +auditpol /get /subcategory:"로그온","로그오프","계정 관리","정책 변경","권한 사용","디렉터리 서비스 액세스" +``` +**조치:** +```powershell +# 감사 정책 설정 (KISA 권고 기준) +auditpol /set /subcategory:"계정 관리" /failure:enable +auditpol /set /subcategory:"계정 로그온 이벤트" /success:enable /failure:enable +auditpol /set /subcategory:"권한 사용" /success:enable /failure:enable +auditpol /set /subcategory:"디렉터리 서비스 액세스" /failure:enable +auditpol /set /subcategory:"로그온" /success:enable /failure:enable +auditpol /set /subcategory:"로그오프" /success:enable /failure:enable +auditpol /set /subcategory:"정책 변경" /success:enable /failure:enable + +# GPO: 로컬 보안 정책 > 로컬 정책 > 감사 정책 +``` + +--- + +### W-41: NTP 및 시각 동기화 설정 (중) +**점검:** +```powershell +# NTP 동기화 상태 확인 +w32tm /query /status +w32tm /query /configuration + +# NTP 서버 설정 확인 +w32tm /dumpreg /subkey:parameters + +# 시간 서비스 상태 +Get-Service -Name "W32Time" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Windows Time 서비스 활성화 +Set-Service -Name "W32Time" -StartupType Automatic +Start-Service -Name "W32Time" + +# 내부 NTP 서버와 동기화 설정 +w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.server.ip" /update +w32tm /resync + +# 동기화 시간차 확인 +w32tm /stripchart /dataonly /computer:"ntp.server.ip" +``` + +--- + +### W-42: 이벤트 로그 관리 설정 (하) +**점검:** +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes, OverflowAction, MinimumRetentionDays | Format-Table + +# 레지스트리에서 직접 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System" /v MaxSize +``` +**조치:** +```powershell +# 이벤트 로그 최대 크기 10240KB(10MB) 이상 설정 +Limit-EventLog -LogName Application -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName Security -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName System -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 + +# 레지스트리 직접 설정 (바이트 단위: 10485760 = 10MB) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize /t REG_DWORD /d 10485760 /f +``` + +--- + +### W-43: 이벤트 로그 파일 접근 통제 설정 (중) +**점검:** +```powershell +# 시스템 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\config" +# Everyone 권한이 있으면 취약 + +# IIS 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\LogFiles" 2>$null +``` +**조치:** +```powershell +# 로그 디렉터리에서 Everyone 권한 제거 +icacls "C:\Windows\System32\config" /remove Everyone /T +icacls "C:\Windows\System32\LogFiles" /remove Everyone /T + +# Administrators, SYSTEM만 접근 가능하도록 설정 +``` + +--- + +## 5. 보안 관리 + +### W-44: 원격으로 액세스할 수 있는 레지스트리 경로 (상) +**점검:** +```powershell +# Remote Registry 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Remote Registry 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-45: 백신 프로그램 설치 (상) +**점검:** +```powershell +# Windows Defender 설치 및 활성화 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusEnabled, RealTimeProtectionEnabled + +# 설치된 백신 프로그램 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState + +# 프로그램 목록에서 백신 확인 +Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "antivirus|백신|V3|알약|Kaspersky|Norton|McAfee|Symantec" } | + Select-Object Name, Version +``` +**조치:** +```powershell +# Windows Defender 활성화 (비활성화된 경우) +Set-MpPreference -DisableRealtimeMonitoring $false + +# 백신이 설치되지 않은 경우 조직 정책에 따라 백신 프로그램 설치 +# Windows Defender는 Windows Server 2016 이상 기본 탑재 +Install-WindowsFeature -Name Windows-Defender -ErrorAction SilentlyContinue +``` + +--- + +### W-46: SAM 파일 접근 통제 설정 (상) +**점검:** +```powershell +# SAM 파일 접근 권한 확인 +icacls "C:\Windows\System32\config\SAM" +# Administrator, SYSTEM 외 다른 그룹/사용자 권한이 있으면 취약 +``` +**조치:** +```powershell +# SAM 파일 권한 설정 (Administrator, SYSTEM만 접근) +icacls "C:\Windows\System32\config\SAM" /inheritance:r +icacls "C:\Windows\System32\config\SAM" /grant "BUILTIN\Administrators:(F)" +icacls "C:\Windows\System32\config\SAM" /grant "NT AUTHORITY\SYSTEM:(F)" +``` + +--- + +### W-47: 화면보호기 설정 (하) +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +# ScreenSaveActive=1, ScreenSaveTimeOut<=600(10분), ScreenSaverIsSecure=1 이면 양호 +``` +**조치:** +```powershell +# 화면보호기 활성화 (대기 시간 10분, 암호 사용) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "C:\Windows\System32\scrnsave.scr" /f + +# GPO 일괄 적용: +# 사용자 구성 > 관리 템플릿 > 제어판 > 개인 설정 +# "화면 보호기 사용" = 사용 +# "화면 보호기 시간 제한" = 600초 +# "화면 보호기 암호로 보호" = 사용 +``` + +--- + +### W-48: 로그온하지 않고 시스템 종료 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon +# 값이 0이면 양호 +``` +**조치:** +```powershell +# 로그온 없이 시스템 종료 차단 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 종료: 로그온하지 않고 시스템 종료 허용" = 사용 안 함 +``` + +--- + +### W-49: 원격 시스템에서 강제로 시스템 종료 (상) +**점검:** +```powershell +# 원격 시스템 종료 권한 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeRemoteShutdownPrivilege" C:\secpol_tmp.cfg +# Administrators만 있으면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "원격 시스템에서 강제로 시스템 종료" 정책에 Administrators 외 다른 계정/그룹 제거 +``` + +--- + +### W-50: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail +# 값이 0이면 양호 (사용 안 함), 1이면 취약 + +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "CrashOnAuditFail" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 (사용 안 함) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료" = 사용 안 함 +``` + +--- + +### W-51: SAM 계정과 공유의 익명 열거 허용 안 함 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM +# RestrictAnonymous=1, RestrictAnonymousSAM=1 이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함" = 사용 +# "네트워크 액세스: SAM 계정의 익명 열거 허용 안 함" = 사용 + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-52: Autologon 기능 제어 (상) +**점검:** +```powershell +# AutoAdminLogon 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +# 값이 0이거나 존재하지 않으면 양호 + +# DefaultPassword 존재 여부 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword 2>$null +``` +**조치:** +```powershell +# Autologon 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f + +# DefaultPassword 제거 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f 2>$null +``` + +--- + +### W-53: 이동식 미디어 포맷 및 꺼내기 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD +# 값이 0(Administrators만)이면 양호 +``` +**조치:** +```powershell +# Administrators에게만 이동식 미디어 포맷/꺼내기 허용 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 이동식 미디어 포맷 및 꺼내기 허용" = Administrators +``` + +--- + +### W-54: DoS 공격 방어 레지스트리 설정 (중) +**점검:** +```powershell +# TCP/IP 스택 강화 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand 2>$null +# SynAttackProtect>=1, EnableDeadGWDetect=0, KeepAliveTime=300000, NoNameReleaseOnDemand=1 이면 양호 +``` +**조치:** +```powershell +# DoS 방어 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand /t REG_DWORD /d 1 /f + +# 주의: 잘못된 값 설정 시 OS 재설치 필요할 수 있음 +``` + +--- + +### W-55: 사용자가 프린터 드라이버를 설치할 수 없게 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers 2>$null +# 값이 1이면 양호 (사용자 설치 차단) +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 사용자가 프린터 드라이버를 설치할 수 없게 함" = 사용 +``` + +--- + +### W-56: SMB 세션 중단 관리 설정 (중) +**점검:** +```powershell +# SMB 세션 유휴 시간 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect 2>$null +# 값이 15 이하이면 양호 + +# 로그온 시간 만료 시 연결 끊기 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff 2>$null +# 값이 1이면 양호 +``` +**조치:** +```powershell +# SMB 유휴 세션 타임아웃 15분 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect /t REG_DWORD /d 15 /f + +# 로그온 시간 만료 시 연결 끊기 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기" = 사용 +# "Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간" = 15분 +``` + +--- + +### W-57: 로그온 시 경고 메시지 설정 (하) +**점검:** +```powershell +# 로그온 경고 메시지 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText +# 둘 다 값이 설정되어 있으면 양호 +``` +**조치:** +```powershell +# 로그온 경고 메시지 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption /t REG_SZ /d "경고" /f +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText /t REG_SZ /d "이 시스템은 인가된 사용자만 접근할 수 있습니다. 비인가 접근 시도 시 법적 처벌을 받을 수 있습니다." /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목" = 경고 제목 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트" = 경고 내용 +``` + +--- + +### W-58: 사용자별 홈 디렉터리 권한 설정 (중) +**점검:** +```powershell +# 사용자 홈 디렉터리 권한 확인 +Get-ChildItem "C:\Users" -Directory | ForEach-Object { + $acl = Get-Acl $_.FullName + $everyoneAccess = $acl.Access | Where-Object { $_.IdentityReference -like "*Everyone*" } + if ($everyoneAccess) { + [PSCustomObject]@{ + Directory = $_.Name + Everyone = ($everyoneAccess | ForEach-Object { $_.FileSystemRights }) -join ", " + } + } +} +``` +**조치:** +```powershell +# 홈 디렉터리에서 Everyone 권한 제거 (All Users, Default User 제외) +Get-ChildItem "C:\Users" -Directory | Where-Object { + $_.Name -notin @("All Users","Default User","Default","Public") +} | ForEach-Object { + icacls $_.FullName /remove Everyone /T +} +``` + +--- + +### W-59: LAN Manager 인증 수준 (중) +**점검:** +```powershell +# LAN Manager 인증 수준 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel +# 값이 5이면 양호 (NTLMv2 응답만 보냄, LM 및 NTLM 거부) +# 최소 3 이상 권장 +``` +**조치:** +```powershell +# NTLMv2 응답만 보내도록 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 보안: LAN Manager 인증 수준" = "NTLMv2 응답만 보내기/LM 및 NTLM 거부" +``` + +--- + +### W-60: 보안 채널 데이터 디지털 암호화 또는 서명 (중) +**점검:** +```powershell +# 보안 채널 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel 2>$null +# 세 값 모두 1이면 양호 +``` +**조치:** +```powershell +# 보안 채널 데이터 암호화/서명 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상)" = 사용 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우)" = 사용 +# "도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우)" = 사용 +``` + +--- + +### W-61: 파일 및 디렉토리 보호 (중) +**점검:** +```powershell +# 파일 시스템 유형 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size | Format-Table + +# CMD 확인 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT 파일 시스템을 NTFS로 변환 +# convert <드라이브명>: /fs:ntfs +# 예: convert F: /fs:ntfs + +# 주의: 변환은 비가역적이며 초기 설치 시 NTFS 선택 권장 +# 기존 FAT에서 변환 시 Default ACL이 적용되지 않을 수 있음 +``` + +--- + +### W-62: 시작 프로그램 목록 분석 (중) +**점검:** +```powershell +# 시작 프로그램 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 2>$null + +# 시작 폴더 확인 +Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue +Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue + +# WMI 시작 프로그램 목록 +Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table -AutoSize +``` +**조치:** +```powershell +# 불필요한 시작 프로그램 제거 (레지스트리) +reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f +reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f + +# msconfig 실행 (Windows 2008 이하) +# 시작 프로그램 탭에서 불필요한 항목 체크 해제 +``` + +--- + +### W-63: 도메인 컨트롤러-사용자의 시간 동기화 (중) +**점검:** +```powershell +# Kerberos 최대 허용 오차 확인 (도메인 컨트롤러) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MaxClockSkew" C:\secpol_tmp.cfg +# 값이 5 이하이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force + +# 현재 시간 동기화 상태 +w32tm /query /status +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +# "컴퓨터 시계 동기화 최대 허용 오차" = 5분 + +# 시간 동기화 강제 수행 +w32tm /resync /force +``` + +--- + +### W-64: 윈도우 방화벽 설정 (중) +**점검:** +```powershell +# Windows 방화벽 프로필 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled | Format-Table + +# 방화벽 규칙 요약 +Get-NetFirewallProfile | ForEach-Object { + $profile = $_.Name + $enabled = $_.Enabled + [PSCustomObject]@{ + Profile = $profile + Enabled = $enabled + InboundDefault = $_.DefaultInboundAction + OutboundDefault = $_.DefaultOutboundAction + } +} | Format-Table + +# netsh 명령 +netsh advfirewall show allprofiles +``` +**조치:** +```powershell +# Windows 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True + +# netsh 명령 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정 또는 해제 +# 모든 프로필에 대해 "사용" 설정 +``` diff --git a/skills/kesekit-guide/scripts/robot-security/cert-and-protocol.md b/skills/kesekit-guide/scripts/robot-security/cert-and-protocol.md new file mode 100644 index 0000000..259a9d3 --- /dev/null +++ b/skills/kesekit-guide/scripts/robot-security/cert-and-protocol.md @@ -0,0 +1,96 @@ +# Certificate & Protocol Security + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: IA-04, ER-01 + +--- + +## 1. OpenSSL Certificate Inspection (IA-04) + +```bash +# 인증서 내용 확인 명령어 +openssl x509 -in server.crt -text -noout +``` + +--- + +## 2. Key File Permission Hardening (IA-04) + +```bash +# 개인키 접근 권한 설정 +chown robot-service:robot-service /etc/robot/keys/device.key +chmod 600 /etc/robot/keys/device.key # 파일 소유자만 접근 가능 +``` + +--- + +## 3. OPC UA Security Configuration (IA-04) + +### 3.1 Certificate Validation + +```ini +# server.conf (OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +### 3.2 Certificate Revocation Check + +```ini +# server.conf (OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +--- + +## 4. TLS Client Certificate Verification - Python (IA-04) + +```python +import ssl, socket + +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 + +with socket.create_connection(("server.com", 443)) as sock: + with context.wrap_socket(sock, server_hostname="server.com") as ssock: + print("TLS Established:", ssock.version()) +``` + +--- + +## 5. Crypto Algorithm Requirements (IA-04) + +| Category | Recommended | Insufficient | +|---|---|---| +| Key algorithm | RSA >= 2048bit or ECC P-256+ | RSA 1024bit or below, ECC P-192 or below | +| Hash algorithm | SHA-256+ (SHA-2/SHA-3 family) | SHA-1, MD5 | +| TLS protocol | TLS 1.2+ (recommended: TLS 1.3) | TLS 1.0 / 1.1 | + +--- + +## 6. Audit Log API Access (ER-01) + +```http +GET /api/audit/logs +Authorization: Bearer + +HTTP/1.1 200 OK +{ + "entries": [...], + "integrity": "sha256:f45a..." +} +``` + +--- + +## 7. Platform-specific Certificate ACL Examples (IA-04) + +| Platform | Certificate Store | +|---|---| +| General server / cloud | DB table | +| OPC UA | /pki/trusted, /pki/rejected folders | +| MQTT mTLS | CA DB, allowed client certificate list | +| Robot PKI | KV DB, HSM integration | diff --git a/skills/kesekit-guide/scripts/robot-security/firewall-hardening.md b/skills/kesekit-guide/scripts/robot-security/firewall-hardening.md new file mode 100644 index 0000000..8d8820f --- /dev/null +++ b/skills/kesekit-guide/scripts/robot-security/firewall-hardening.md @@ -0,0 +1,106 @@ +# Firewall & Network Hardening + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: DFR-02, RA-01, RA-08 + +--- + +## 1. Host Firewall (iptables) + +### 1.1 MQTT / HTTPS Only (DFR-02 Protocol Filtering) + +```bash +# MQTT 및 HTTPS 외의 포트 차단 +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.2 SSH + HTTPS Only (RA-01 DoS Prevention) + +```bash +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.3 Unnecessary Port Blocking (RA-08 Service Restriction) + +```bash +# 외부 포트 스캔 (TCP 포트 확인) +nmap -sS 192.168.0.10 + +# 불필요한 포트(예: FTP 21, Telnet 23, TFTP 69) 차단 +sudo iptables -A INPUT -p tcp --dport 21 -j DROP +sudo iptables -A INPUT -p tcp --dport 23 -j DROP +sudo iptables -A INPUT -p udp --dport 69 -j DROP +``` + +--- + +## 2. Service Hardening (RA-08) + +```bash +# 현재 활성화된 포트 및 프로세스 확인 +sudo ss -tulnp +sudo netstat -tulnp + +# 서비스 상태 확인 및 비활성화 +sudo systemctl status telnet +sudo systemctl disable telnet +sudo systemctl stop telnet +``` + +--- + +## 3. VLAN Network Segmentation (RA-01 L2) + +Control network and sensor network separation via VLAN. + +```bash +# 제어 망 (VLAN ID 10) +sudo ip link add link eth0 name eth0.10 type vlan id 10 +# 센서 망 (VLAN ID 20) +sudo ip link add link eth0 name eth0.20 type vlan id 20 + +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +``` + +--- + +## 4. sysctl Network Tuning (RA-01) + +```bash +sudo sysctl -w net.core.somaxconn=128 +sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +ulimit -n 1024 +``` + +--- + +## 5. Nginx Rate Limiting (RA-01) + +```nginx +# /etc/nginx/nginx.conf +http { + limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; + server { + listen 443 ssl; + server_name example.com; + location / { + limit_req zone=req_limit_per_ip burst=5 nodelay; + limit_conn conn_limit_per_ip 10; + } + } +} +``` + +--- + +## 6. Suricata IDS Rule (RA-01 L2 DoS Detection) + +```yaml +alert tcp any any -> $HOME_NET any (msg:"TCP SYN Flood"; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +``` diff --git a/skills/kesekit-guide/scripts/robot-security/resource-management.md b/skills/kesekit-guide/scripts/robot-security/resource-management.md new file mode 100644 index 0000000..fd35dce --- /dev/null +++ b/skills/kesekit-guide/scripts/robot-security/resource-management.md @@ -0,0 +1,96 @@ +# Resource Management & Monitoring + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: RA-02, RA-03 + +--- + +## 1. cgroups - Security Agent Resource Limits (RA-02) + +Restrict CPU and memory usage for security processes so they do not interfere with real-time robot control. + +```bash +# cgroup 생성 (cpu + memory) +sudo cgcreate -g cpu,memory:/robot_security + +# CPU 할당 제한 (20000us = 20% of 1 core at default 100000us period) +echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us + +# 메모리 제한 (256MB) +echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes + +# 실행 중인 보안 에이전트를 cgroup에 할당 +sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +``` + +--- + +## 2. OpenSSL Hardware Acceleration Check (RA-02) + +Offload crypto operations to hardware to reduce CPU overhead. + +```bash +openssl engine -t +# Expected output: +# (dynamic) Dynamic engine loading support +# (rdrand) Intel RDRAND engine +# (aesni) Intel AES-NI engine +``` + +--- + +## 3. logrotate Configuration (RA-02) + +Prevent audit/operational logs from exhausting disk space. + +```bash +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { + size 50M + rotate 5 + compress + missingok + notifempty +} +``` + +--- + +## 4. System Resource Monitoring (RA-03) + +Dashboard or CLI-based monitoring of CPU, memory, disk, and network utilization. The robot system should provide a user interface for operators to view resource status in real-time. + +Key resource metrics to monitor: +- CPU usage per core / per process +- Memory (RSS / swap) usage +- Disk I/O and capacity +- Network interface throughput and error rates + +--- + +## 5. ROS Publisher Rate Limiting (RA-01 L2) + +Limit sensor data publish rate to prevent communication overload. + +```cpp +ros::Publisher pub = nh.advertise("sensor_data", 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { + std_msgs::String msg; + msg.data = "sensor data"; + pub.publish(msg); + loop_rate.sleep(); +} +``` + +--- + +## 6. ROS2 QoS Security Profile (RA-01 L2) + +```yaml +QoSProfile: + reliability: RELIABLE + durability: TRANSIENT_LOCAL + history: KEEP_LAST + depth: 10 +``` diff --git a/skills/kesekit-guide/scripts/robot-security/sbom-audit.md b/skills/kesekit-guide/scripts/robot-security/sbom-audit.md new file mode 100644 index 0000000..1b1387f --- /dev/null +++ b/skills/kesekit-guide/scripts/robot-security/sbom-audit.md @@ -0,0 +1,84 @@ +# SBOM & Supply Chain Audit + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: SC-05 + +--- + +## 1. SBOM Generation with Syft (SC-05) + +Generate a Software Bill of Materials from source code or container images using Anchore Syft. + +```bash +# Syft를 통한 SBOM 생성 (JSON format) +syft <소스코드 경로> -o json > sbom.json +``` + +--- + +## 2. Vulnerability Scanning with Grype (SC-05) + +Scan the generated SBOM for known vulnerabilities (CVEs). + +```bash +# Grype를 통한 취약점 식별 +grype sbom://sbom.json +``` + +--- + +## 3. Package Manager Built-in Audit Commands (SC-05) + +Use built-in security features of each package manager to analyze declared dependencies and automatically scan for known vulnerabilities. + +### Node.js (NPM) + +```bash +npm audit +``` + +### Python (pip) + +```bash +pip-audit +``` + +### Java (Maven) + +```bash +mvn dependency-check:check +``` + +### .NET (NuGet) + +```bash +dotnet list package --vulnerable +``` + +### Rust (Cargo) + +```bash +cargo audit +``` + +--- + +## 4. CI/CD Pipeline Integration (SC-05) + +Integrate vulnerability scanning into CI/CD pipelines (GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins, etc.) to automatically detect vulnerabilities before deployment. + +### Vulnerability Response Record Fields + +| Field | Description | +|---|---| +| CVE ID | 취약점 식별자 | +| 구성요소 | 영향받는 컴포넌트(이름/버전) | +| 기술적 위험 | 공개 PoC/익스플로잇 존재 여부, CVSS 점수 | +| 비즈니스 영향 | 영향을 받는 서비스/데이터/운영 영향 | +| EoS 여부 | 해당 구성요소의 지원상태 | +| 우선 순위 | P0/P1/P2 또는 High/Medium/Low | +| 대응방안 | 패치/업그레이드/가상패치/격리 등 | +| SLA | 목표 기간 | +| 담당자 및 일정 | 책임부서, 담당자, 완료예정일 | +| 검증 방법 | 재스캔, 기능/회귀 테스트 결과 링크 | +| 상태 | 계획/진행/완료/예외(승인) | diff --git a/skills/guide/references/ai-security/developer.md b/skills/kesekit-guide/templates/ai-security/developer.md similarity index 100% rename from skills/guide/references/ai-security/developer.md rename to skills/kesekit-guide/templates/ai-security/developer.md diff --git a/skills/kesekit-guide/templates/ai-security/user-guide-checklist.md b/skills/kesekit-guide/templates/ai-security/user-guide-checklist.md new file mode 100644 index 0000000..903ec01 --- /dev/null +++ b/skills/kesekit-guide/templates/ai-security/user-guide-checklist.md @@ -0,0 +1,13 @@ +# AI 이용자 보안 체크리스트 요약 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +| # | 항목 | 확인 | +|---|------|:----:| +| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | +| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | +| 3 | AI 서비스 이용약관을 확인했는가? | □ | +| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | +| 5 | AI 출력 결과를 검증하고 있는가? | □ | +| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | +| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills/guide/references/cii/admin.md b/skills/kesekit-guide/templates/cii/admin.md similarity index 100% rename from skills/guide/references/cii/admin.md rename to skills/kesekit-guide/templates/cii/admin.md diff --git a/skills/kesekit-guide/templates/cii/cloud.md b/skills/kesekit-guide/templates/cii/cloud.md new file mode 100644 index 0000000..42834e8 --- /dev/null +++ b/skills/kesekit-guide/templates/cii/cloud.md @@ -0,0 +1,45 @@ +# 클라우드 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: AWS, Azure, GCP 등 클라우드 환경 + +## 1. 계정 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-01 | 클라우드 관리 콘솔 기본 계정 변경 | 상 | +| CA-02 | 비밀번호 복잡성 및 MFA 설정 | 상 | +| CA-03 | 불필요한 계정/키 제거 | 상 | +| CA-04 | 루트/관리자 계정 직접 사용 제한 | 상 | + +## 2. 권한 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-05 | IAM 최소 권한 원칙 적용 | 상 | +| CA-06 | 서비스 계정/역할 권한 제한 | 상 | + +## 3. 가상 리소스 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-07 | 보안 그룹/네트워크 ACL 설정 | 상 | +| CA-08 | 스토리지 접근 권한 및 암호화 | 상 | +| CA-09 | 가상 네트워크 분리 (VPC/서브넷) | 상 | +| CA-10 | 미사용 리소스 점검 및 제거 | 중 | + +## 4. 운영 관리 (9항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-11 | 클라우드 감사 로깅 활성화 | 상 | +| CA-12 | 보안 모니터링 및 알림 설정 | 상 | +| CA-13 | 데이터 백업 및 복구 정책 | 상 | +| CA-14 | 보안 패치 및 이미지 관리 | 상 | +| CA-15 | API 키/시크릿 관리 | 상 | +| CA-16 | 전송 중/저장 시 암호화 | 상 | +| CA-17 | 인스턴스 메타데이터 보호 | 중 | +| CA-18 | 컨테이너/서버리스 보안 설정 | 중 | +| CA-19 | 클라우드 서비스 가용성 관리 | 중 | + +## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills/guide/references/cii/control-system.md b/skills/kesekit-guide/templates/cii/control-system.md similarity index 100% rename from skills/guide/references/cii/control-system.md rename to skills/kesekit-guide/templates/cii/control-system.md diff --git a/skills/kesekit-guide/templates/cii/database.md b/skills/kesekit-guide/templates/cii/database.md new file mode 100644 index 0000000..d6847e0 --- /dev/null +++ b/skills/kesekit-guide/templates/cii/database.md @@ -0,0 +1,52 @@ +# DBMS 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Oracle DB, MSSQL, MySQL, PostgreSQL, Altibase, Tibero, Cubrid + +## 1. 계정 관리 (9항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-01 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | 상 | +| D-02 | 불필요 계정 제거 또는 잠금설정 | 상 | +| D-03 | 비밀번호 사용기간 및 복잡도 설정 | 상 | +| D-04 | 관리자 권한을 필요한 계정/그룹에만 허용 | 상 | +| D-05 | 비밀번호 재사용 제약 설정 | 중 | +| D-06 | DB 사용자 계정 개별 부여 | 중 | +| D-07 | root 권한으로 서비스 구동 제한 | 중 | +| D-08 | 안전한 암호화 알고리즘 사용 | 상 | +| D-09 | 로그인 실패 시 잠금정책 설정 | 중 | + +## 2. 접근 관리 (7항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-10 | 원격에서 DB 서버 접속 제한 | 상 | +| D-11 | 비인가 사용자의 시스템 테이블 접근 차단 | 상 | +| D-12 | 안전한 리스너 비밀번호 설정 | 상 | +| D-13 | 불필요한 ODBC/OLE-DB 데이터 소스 제거 | 중 | +| D-14 | 주요 파일 접근 권한 설정 | 중 | +| D-15 | 리스너 로그/trace 파일 변경 제한 | 하 | +| D-16 | Windows 인증 모드 사용 | 하 | + +## 3. 옵션 관리 (8항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-17 | Audit Table 관리자 접근 제한 | 하 | +| D-18 | Role이 Public으로 설정되지 않도록 조정 | 상 | +| D-19 | OS_ROLES 등 원격 인증 FALSE 설정 | 상 | +| D-20 | 인가되지 않은 Object owner 제한 | 하 | +| D-21 | 인가되지 않은 GRANT OPTION 사용 제한 | 중 | +| D-22 | 자원 제한 기능 TRUE 설정 | 하 | +| D-23 | xp_cmdshell 사용 제한 | 상 | +| D-24 | Registry Procedure 권한 제한 | 상 | + +## 4. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| D-26 | 감사 기록 정책 적합 설정 | 상 | + +## 통계: 총 26항목 (상 13, 중 7, 하 6) diff --git a/skills/guide/references/cii/mobile.md b/skills/kesekit-guide/templates/cii/mobile.md similarity index 100% rename from skills/guide/references/cii/mobile.md rename to skills/kesekit-guide/templates/cii/mobile.md diff --git a/skills/kesekit-guide/templates/cii/network.md b/skills/kesekit-guide/templates/cii/network.md new file mode 100644 index 0000000..e168fb3 --- /dev/null +++ b/skills/kesekit-guide/templates/cii/network.md @@ -0,0 +1,69 @@ +# 네트워크 장비 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Cisco, Alteon, Passport, Juniper, Piolink 등 + +## 1. 계정 관리 (5항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-01 | 비밀번호 설정 | 상 | +| N-02 | 비밀번호 복잡성 설정 | 상 | +| N-03 | 암호화된 비밀번호 사용 | 상 | +| N-04 | 계정 잠금 임계값 설정 | 상 | +| N-05 | 사용자, 명령어별 권한 수준 설정 | 중 | + +## 2. 접근 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-06 | VTY 접근(ACL) 설정 | 상 | +| N-07 | 세션 종료 시간 설정 | 상 | +| N-08 | VTY 접속 시 안전한 프로토콜 사용 | 중 | +| N-09 | 불필요한 보조 입출력 포트 사용 금지 | 중 | +| N-10 | 로그온 시 경고 메시지 설정 | 중 | +| N-11 | 원격 로그서버 사용 | 중 | + +## 3. 패치 관리 (1항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-12 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | + +## 4. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-13 | 로깅 버퍼 크기 설정 | 중 | +| N-14 | 정책에 따른 로깅 설정 | 중 | +| N-15 | NTP 및 시각 동기화 설정 | 중 | +| N-16 | Timestamp 로그 설정 | 하 | + +## 5. 기능 관리 (22항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-17 | SNMP 서비스 확인 | 상 | +| N-18 | SNMP Community String 복잡성 설정 | 상 | +| N-19 | SNMP ACL 설정 | 상 | +| N-20 | SNMP Community 권한 설정 | 상 | +| N-21 | TFTP 서비스 차단 | 상 | +| N-22 | Spoofing 방지 필터링 적용 | 상 | +| N-23 | DDoS 공격 방어 설정 또는 DDoS 장비 사용 | 상 | +| N-24 | 사용하지 않는 인터페이스 비활성화 | 상 | +| N-25 | TCP Keepalive 서비스 설정 | 중 | +| N-26 | Finger 서비스 차단 | 중 | +| N-27 | 웹 서비스 차단 | 중 | +| N-28 | TCP/UDP small 서비스 차단 | 중 | +| N-29 | Bootp 서비스 차단 | 중 | +| N-30 | CDP 서비스 차단 | 중 | +| N-31 | Directed-broadcast 차단 | 중 | +| N-32 | Source 라우팅 차단 | 중 | +| N-33 | Proxy ARP 차단 | 중 | +| N-34 | ICMP unreachable, Redirect 차단 | 중 | +| N-35 | identd 서비스 차단 | 중 | +| N-36 | Domain Lookup 차단 | 중 | +| N-37 | pad 차단 | 중 | +| N-38 | mask-reply 차단 | 중 | + +## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills/kesekit-guide/templates/cii/pc.md b/skills/kesekit-guide/templates/cii/pc.md new file mode 100644 index 0000000..b5ca66b --- /dev/null +++ b/skills/kesekit-guide/templates/cii/pc.md @@ -0,0 +1,44 @@ +# PC 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Windows 10, Windows 11 + +## 1. 계정 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-01 | 비밀번호의 주기적 변경 | 상 | +| PC-02 | 비밀번호 관리정책 설정 | 상 | +| PC-03 | 복구 콘솔에서 자동 로그온 금지 설정 | 중 | + +## 2. 서비스 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-04 | 공유 폴더 제거 | 상 | +| PC-05 | 불필요한 서비스 제거 | 상 | +| PC-06 | 비인가 상용 메신저 사용 금지 | 상 | +| PC-07 | 파일 시스템이 NTFS 포맷으로 설정 | 중 | +| PC-08 | 다른 OS로 멀티 부팅 불가 설정 | 중 | +| PC-09 | 브라우저 종료 시 임시 인터넷 파일 삭제 | 하 | + +## 3. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-10 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| PC-11 | 지원 종료되지 않은 Windows OS Build 적용 | 상 | + +## 4. 보안 관리 (7항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-12 | Windows 자동 로그인 점검 | 중 | +| PC-13 | 바이러스 백신 설치 및 주기적 업데이트 | 상 | +| PC-14 | 실시간 감시 기능 활성화 | 상 | +| PC-15 | OS 침입차단 기능 활성화 | 상 | +| PC-16 | 화면보호기 대기 시간 및 암호 보호 설정 | 상 | +| PC-17 | 이동식 미디어 자동실행 방지 | 상 | +| PC-18 | 원격 지원 금지 정책 설정 | 중 | + +## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills/guide/references/cii/physical.md b/skills/kesekit-guide/templates/cii/physical.md similarity index 100% rename from skills/guide/references/cii/physical.md rename to skills/kesekit-guide/templates/cii/physical.md diff --git a/skills/guide/references/cii/security-equip.md b/skills/kesekit-guide/templates/cii/security-equip.md similarity index 100% rename from skills/guide/references/cii/security-equip.md rename to skills/kesekit-guide/templates/cii/security-equip.md diff --git a/skills/kesekit-guide/templates/cii/unix.md b/skills/kesekit-guide/templates/cii/unix.md new file mode 100644 index 0000000..969c52f --- /dev/null +++ b/skills/kesekit-guide/templates/cii/unix.md @@ -0,0 +1,124 @@ +# Unix 서버 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: SOLARIS, LINUX, AIX, HP-UX + +## 1. 계정 관리 (13항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-01 | root 계정 원격 접속 제한 | 상 | +| U-02 | 비밀번호 관리정책 설정 | 상 | +| U-03 | 계정 잠금 임계값 설정 | 상 | +| U-04 | 비밀번호 파일 보호 | 상 | +| U-05 | root 이외의 UID가 '0' 금지 | 상 | +| U-06 | 사용자 계정 su 기능 제한 | 상 | +| U-07 | 불필요한 계정 제거 | 하 | +| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | +| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | +| U-10 | 동일한 UID 금지 | 중 | +| U-11 | 사용자 Shell 점검 | 하 | +| U-12 | 세션 종료 시간 설정 | 하 | +| U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | + +--- + +## 2. 파일 및 디렉터리 관리 (20항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-14 | root 홈, 패스 디렉터리 권한 및 패스 설정 | 상 | +| U-15 | 파일 및 디렉터리 소유자 설정 | 상 | +| U-16 | /etc/passwd 파일 소유자 및 권한 설정 | 상 | +| U-17 | 시스템 시작 스크립트 권한 설정 | 상 | +| U-18 | /etc/shadow 파일 소유자 및 권한 설정 | 상 | +| U-19 | /etc/hosts 파일 소유자 및 권한 설정 | 상 | +| U-20 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | 상 | +| U-21 | /etc/(r)syslog.conf 파일 소유자 및 권한 설정 | 상 | +| U-22 | /etc/services 파일 소유자 및 권한 설정 | 상 | +| U-23 | SUID, SGID, Sticky bit 설정 파일 점검 | 상 | +| U-24 | 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 | 상 | +| U-25 | world writable 파일 점검 | 상 | +| U-26 | /dev에 존재하지 않는 device 파일 점검 | 상 | +| U-27 | $HOME/.rhosts, hosts.equiv 사용 금지 | 상 | +| U-28 | 접속 IP 및 포트 제한 | 상 | +| U-29 | hosts.lpd 파일 소유자 및 권한 설정 | 하 | +| U-30 | UMASK 설정 관리 | 중 | +| U-31 | 홈 디렉토리 소유자 및 권한 설정 | 중 | +| U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | +| U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | + +--- + +## 3. 서비스 관리 (30항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-34 | Finger 서비스 비활성화 | 상 | +| U-35 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | +| U-36 | r 계열 서비스 비활성화 | 상 | +| U-37 | crontab 설정파일 권한 설정 | 상 | +| U-38 | DoS 공격에 취약한 서비스 비활성화 | 상 | +| U-39 | 불필요한 NFS 서비스 비활성화 | 상 | +| U-40 | NFS 접근 통제 | 상 | +| U-41 | 불필요한 automountd 제거 | 상 | +| U-42 | 불필요한 RPC 서비스 비활성화 | 상 | +| U-43 | NIS, NIS+ 점검 | 상 | +| U-44 | tftp, talk 서비스 비활성화 | 상 | +| U-45 | 메일 서비스 버전 점검 | 상 | +| U-46 | 일반 사용자의 메일 서비스 실행 방지 | 상 | +| U-47 | 스팸 메일 릴레이 제한 | 상 | +| U-48 | expn, vrfy 명령어 제한 | 중 | +| U-49 | DNS 보안 버전 패치 | 상 | +| U-50 | DNS Zone Transfer 설정 | 상 | +| U-51 | DNS 서비스의 취약한 동적 업데이트 설정 금지 | 중 | +| U-52 | Telnet 서비스 비활성화 | 중 | +| U-53 | FTP 서비스 정보 노출 제한 | 하 | +| U-54 | 암호화되지 않는 FTP 서비스 비활성화 | 중 | +| U-55 | FTP 계정 Shell 제한 | 중 | +| U-56 | FTP 서비스 접근 제어 설정 | 하 | +| U-57 | Ftpusers 파일 설정 | 중 | +| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| U-59 | 안전한 SNMP 버전 사용 | 상 | +| U-60 | SNMP Community String 복잡성 설정 | 중 | +| U-61 | SNMP Access Control 설정 | 상 | +| U-62 | 로그인 시 경고 메시지 설정 | 하 | +| U-63 | sudo 명령어 접근 관리 | 중 | + +--- + +## 4. 패치 관리 (1항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | + +--- + +## 5. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-65 | NTP 및 시각 동기화 설정 | 중 | +| U-66 | 정책에 따른 시스템 로깅 설정 | 중 | +| U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | + +--- + +## 판단 기준 + +| 판단 | 설명 | +|------|------| +| 양호 | 보안 설정이 적절히 적용됨 | +| 취약 | 보안 취약점 존재, 조치 필요 | + +## 통계 + +| 분류 | 항목 수 | 상 | 중 | 하 | +|------|:------:|:--:|:--:|:--:| +| 계정 관리 | 13 | 6 | 4 | 3 | +| 파일/디렉터리 관리 | 20 | 15 | 3 | 2 | +| 서비스 관리 | 30 | 19 | 9 | 2 | +| 패치 관리 | 1 | 1 | 0 | 0 | +| 로그 관리 | 3 | 0 | 3 | 0 | +| **합계** | **67** | **41** | **19** | **7** | diff --git a/skills/guide/references/cii/virtualization.md b/skills/kesekit-guide/templates/cii/virtualization.md similarity index 100% rename from skills/guide/references/cii/virtualization.md rename to skills/kesekit-guide/templates/cii/virtualization.md diff --git a/skills/kesekit-guide/templates/cii/web-service.md b/skills/kesekit-guide/templates/cii/web-service.md new file mode 100644 index 0000000..9f6298a --- /dev/null +++ b/skills/kesekit-guide/templates/cii/web-service.md @@ -0,0 +1,52 @@ +# 웹 서비스 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Apache, Nginx, IIS, Tomcat, JEUS + +## 1. 계정 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-01 | Default 관리자 계정명 변경 | 상 | +| WEB-02 | 취약한 비밀번호 사용 제한 | 상 | +| WEB-03 | 비밀번호 파일 권한 관리 | 상 | + +## 2. 서비스 관리 (15항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-04 | 웹 서비스 디렉터리 리스팅 방지 설정 | 상 | +| WEB-05 | 지정하지 않은 CGI/ISAPI 실행 제한 | 상 | +| WEB-06 | 웹 서비스 상위 디렉터리 접근 제한 설정 | 상 | +| WEB-07 | 웹 서비스 경로 내 불필요한 파일 제거 | 중 | +| WEB-08 | 웹 서비스 파일 업로드 및 다운로드 용량 제한 | 하 | +| WEB-09 | 웹 서비스 프로세스 권한 제한 | 상 | +| WEB-10 | 불필요한 프록시 설정 제한 | 상 | +| WEB-11 | 웹 서비스 경로 설정 | 중 | +| WEB-12 | 웹 서비스 링크 사용 금지 | 중 | +| WEB-13 | 웹 서비스 설정 파일 노출 제한 | 상 | +| WEB-14 | 웹 서비스 경로 내 파일의 접근 통제 | 상 | +| WEB-15 | 웹 서비스의 불필요한 스크립트 매핑 제거 | 상 | +| WEB-16 | 웹 서비스 헤더 정보 노출 제한 | 중 | +| WEB-17 | 웹 서비스 가상 디렉토리 삭제 | 중 | +| WEB-18 | 웹 서비스 WebDAV 비활성화 | 상 | + +## 3. 보안 설정 (5항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-19 | 웹 서비스 SSI 사용 제한 | 중 | +| WEB-20 | SSL/TLS 활성화 | 상 | +| WEB-21 | HTTP 리디렉션 | 중 | +| WEB-22 | 에러 페이지 관리 | 하 | +| WEB-23 | LDAP 알고리즘 적절하게 구성 | 중 | + +## 4. 패치 및 로그 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-24 | 별도의 업로드 경로 사용 및 권한 설정 | 중 | +| WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | + +## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills/kesekit-guide/templates/cii/webapp.md b/skills/kesekit-guide/templates/cii/webapp.md new file mode 100644 index 0000000..ca84427 --- /dev/null +++ b/skills/kesekit-guide/templates/cii/webapp.md @@ -0,0 +1,47 @@ +# Web Application 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: 웹 애플리케이션 소스 코드 및 설정 + +## 1. 입력값 검증 (8항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CI | Command Injection | 상 | +| SI | SQL Injection | 상 | +| XS | Cross-Site Scripting (XSS) | 상 | +| CF | Cross-Site Request Forgery (CSRF) | 상 | +| SF | Server-Side Request Forgery (SSRF) | 상 | +| FU | File Upload 취약점 | 상 | +| FD | File Download 취약점 | 상 | +| DI | 디렉터리 인덱싱 | 중 | + +## 2. 인증/세션 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| BF | Brute Force 공격 | 상 | +| IA | 불충분한 인증 (Insufficient Authentication) | 상 | +| PR | 비밀번호 복구 취약점 | 중 | +| IS | 불충분한 세션 관리 | 상 | +| CC | 세션 고정 (Credential/Session Prediction) | 상 | +| SN | 세션 만료 미설정 | 중 | + +## 3. 접근제어 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| IN | 불충분한 인가 (Insufficient Authorization) | 상 | +| PV | 경로 조작 (Path Traversal) | 상 | +| AE | 관리자 페이지 노출 | 상 | +| WM | HTTP Method 제한 미설정 | 중 | + +## 4. 정보노출 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| EP | 에러 페이지를 통한 정보 노출 | 중 | +| IL | 불필요한 정보 노출 | 중 | +| AU | 부적절한 감사 로깅 | 중 | + +## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills/kesekit-guide/templates/cii/windows.md b/skills/kesekit-guide/templates/cii/windows.md new file mode 100644 index 0000000..15a5c32 --- /dev/null +++ b/skills/kesekit-guide/templates/cii/windows.md @@ -0,0 +1,113 @@ +# Windows 서버 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) + +## 1. 계정 관리 (14항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-01 | Administrator 계정 이름 변경 등 보안성 강화 | 상 | +| W-02 | Guest 계정 비활성화 | 상 | +| W-03 | 불필요한 계정 제거 | 상 | +| W-04 | 계정 잠금 임계값 설정 | 상 | +| W-05 | 해독 가능한 암호화를 사용하여 암호 저장 해제 | 상 | +| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | +| W-07 | Everyone 사용 권한을 익명 사용자에게 적용 | 중 | +| W-08 | 계정 잠금 기간 설정 | 중 | +| W-09 | 비밀번호 관리정책 설정 | 상 | +| W-10 | 마지막 사용자 이름 표시 안 함 | 중 | +| W-11 | 로컬 로그온 허용 | 중 | +| W-12 | 익명 SID/이름 변환 허용 해제 | 중 | +| W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | +| W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | + +--- + +## 2. 서비스 관리 (23항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-15 | 사용자 개인키 사용 시 암호 입력 | 상 | +| W-16 | 공유 권한 및 사용자 그룹 설정 | 상 | +| W-17 | 하드디스크 기본 공유 제거 | 상 | +| W-18 | 불필요한 서비스 제거 | 상 | +| W-19 | 불필요한 IIS 서비스 구동 점검 | 상 | +| W-20 | NetBIOS 바인딩 서비스 구동 점검 | 상 | +| W-21 | 암호화되지 않는 FTP 서비스 비활성화 | 상 | +| W-22 | FTP 디렉토리 접근권한 설정 | 상 | +| W-23 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | +| W-24 | FTP 접근 제어 설정 | 상 | +| W-25 | DNS Zone Transfer 설정 | 상 | +| W-26 | RDS(Remote Data Services) 제거 | 상 | +| W-27 | 최신 Windows OS Build 버전 적용 | 상 | +| W-28 | 터미널 서비스 암호화 수준 설정 | 중 | +| W-29 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| W-30 | SNMP Community String 복잡성 설정 | 중 | +| W-31 | SNMP Access Control 설정 | 중 | +| W-32 | DNS 서비스 구동 점검 | 중 | +| W-33 | HTTP/FTP/SMTP 배너 차단 | 하 | +| W-34 | Telnet 서비스 비활성화 | 중 | +| W-35 | 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 | 중 | +| W-36 | 원격터미널 접속 타임아웃 설정 | 중 | +| W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | + +--- + +## 3. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| W-39 | 백신 프로그램 업데이트 | 상 | + +--- + +## 4. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-40 | 정책에 따른 시스템 로깅 설정 | 중 | +| W-41 | NTP 및 시각 동기화 설정 | 중 | +| W-42 | 이벤트 로그 관리 설정 | 하 | +| W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | + +--- + +## 5. 보안 관리 (21항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-44 | 원격으로 액세스할 수 있는 레지스트리 경로 | 상 | +| W-45 | 백신 프로그램 설치 | 상 | +| W-46 | SAM 파일 접근 통제 설정 | 상 | +| W-47 | 화면보호기 설정 | 상 | +| W-48 | 로그온하지 않고 시스템 종료 허용 | 상 | +| W-49 | 원격 시스템에서 강제로 시스템 종료 | 상 | +| W-50 | 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 | 상 | +| W-51 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | +| W-52 | Autologon 기능 제어 | 상 | +| W-53 | 이동식 미디어 포맷 및 꺼내기 허용 | 상 | +| W-54 | DoS 공격 방어 레지스트리 설정 | 중 | +| W-55 | 사용자가 프린터 드라이버를 설치할 수 없게 함 | 중 | +| W-56 | SMB 세션 중단 관리 설정 | 중 | +| W-57 | 로그온 시 경고 메시지 설정 | 하 | +| W-58 | 사용자별 홈 디렉터리 권한 설정 | 중 | +| W-59 | LAN Manager 인증 수준 | 중 | +| W-60 | 보안 채널 데이터 디지털 암호화 또는 서명 | 중 | +| W-61 | 파일 및 디렉토리 보호 | 중 | +| W-62 | 시작프로그램 목록 분석 | 중 | +| W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | +| W-64 | 윈도우 방화벽 설정 | 중 | + +--- + +## 통계 + +| 분류 | 항목 수 | 상 | 중 | 하 | +|------|:------:|:--:|:--:|:--:| +| 계정 관리 | 14 | 7 | 7 | 0 | +| 서비스 관리 | 23 | 13 | 9 | 1 | +| 패치 관리 | 2 | 2 | 0 | 0 | +| 로그 관리 | 4 | 0 | 3 | 1 | +| 보안 관리 | 21 | 10 | 10 | 1 | +| **합계** | **64** | **32** | **29** | **3** | diff --git a/skills/guide/references/robot-security/cyber-resilience.md b/skills/kesekit-guide/templates/robot-security/cyber-resilience.md similarity index 100% rename from skills/guide/references/robot-security/cyber-resilience.md rename to skills/kesekit-guide/templates/robot-security/cyber-resilience.md diff --git a/skills/guide/references/robot-security/iec62443.md b/skills/kesekit-guide/templates/robot-security/iec62443.md similarity index 100% rename from skills/guide/references/robot-security/iec62443.md rename to skills/kesekit-guide/templates/robot-security/iec62443.md diff --git a/skills/guide/references/robot-security/overview.md b/skills/kesekit-guide/templates/robot-security/overview.md similarity index 100% rename from skills/guide/references/robot-security/overview.md rename to skills/kesekit-guide/templates/robot-security/overview.md diff --git a/skills/guide/references/robot-security/ssdf.md b/skills/kesekit-guide/templates/robot-security/ssdf.md similarity index 100% rename from skills/guide/references/robot-security/ssdf.md rename to skills/kesekit-guide/templates/robot-security/ssdf.md diff --git a/skills/guide/references/robot-security/supply-chain.md b/skills/kesekit-guide/templates/robot-security/supply-chain.md similarity index 100% rename from skills/guide/references/robot-security/supply-chain.md rename to skills/kesekit-guide/templates/robot-security/supply-chain.md diff --git a/skills/guide/references/robot-security/wireless.md b/skills/kesekit-guide/templates/robot-security/wireless.md similarity index 100% rename from skills/guide/references/robot-security/wireless.md rename to skills/kesekit-guide/templates/robot-security/wireless.md diff --git a/skills/kesekit-guide/templates/secure-coding/javascript.md b/skills/kesekit-guide/templates/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/skills/kesekit-guide/templates/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/skills/kesekit-guide/templates/secure-coding/python.md b/skills/kesekit-guide/templates/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/skills/kesekit-guide/templates/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/skills/kesekit-guide/templates/space-security/access-control.md b/skills/kesekit-guide/templates/space-security/access-control.md new file mode 100644 index 0000000..7232d6a --- /dev/null +++ b/skills/kesekit-guide/templates/space-security/access-control.md @@ -0,0 +1,49 @@ +# Access Control & Authentication Checklist + +> Domains: AC (Access Control, 12 items) + IA (Identification & Authentication, 2 items) + +## AC — Access Control (12 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| AC-01 | Access Control Policy | Restrict access to authorized users/processes/devices only | Access control policy established, authorized entities identified, per-system access rules defined | +| AC-02 | Least Privilege | Grant minimum necessary permissions | Least privilege procedures, management approval, periodic review | +| AC-03 | Privileged Access Use | Restrict and audit privileged account usage | Privileged account types defined/limited, audit logs stored/reviewed | +| AC-04 | Information Flow Control | Control information flow within and between systems | Flow control policy, source/destination identification, change approval | +| AC-05 | Separation of Duties | Prevent authority abuse through role separation | Duty separation policy, critical duties separated, compensating controls | +| AC-06 | Failed Login Attempts | Protect accounts from brute-force attacks | Max attempt limits, auto-lockout policy, alert/notification on failures | +| AC-07 | Session Lock & Termination | Prevent unauthorized access during idle sessions | Auto-lock on inactivity, re-authentication required, session termination conditions | +| AC-08 | Remote Access Control | Prevent unauthorized remote access | Remote access policy, device security check/MFA/encryption, monitoring/logging | +| AC-09 | Wireless Access | Prevent unauthorized wireless connections | Wireless policy, authentication/encryption, unauthorized AP prevention | +| AC-10 | Mobile Device Control | Control mobile device connections | Mobile device policy, data encryption, loss/theft protection | +| AC-11 | External Connection Control | Protect system boundaries from external systems | External systems identified, approved methods only, continuous monitoring | +| AC-12 | Public Information Control | Prevent sensitive information disclosure | Pre-publication review/approval, designated reviewers, periodic content review | + +### AC Protection Measures Summary + +| Category | Measures | +|----------|----------| +| Account Management | 1-person-1-account, default account deletion, immediate revocation on termination, annual full review | +| Authentication | MFA for privileged access, SSH/SFTP/VPN only, 8+ char passwords with 2+ character types | +| Network | ACL-based deny-all, IP/port whitelisting, WPA3/WPA2-Enterprise, WIPS deployment | +| Session | 10-min inactivity lock, screensaver with password, session timeout enforcement | +| Remote Access | 3-step procedure (request/approve/monitor), VPN+MFA, high-risk assets remote-access-denied by default | +| Monitoring | Failed login alerts to SOC, audit log analysis, access log review | + +## IA — Identification & Authentication (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IA-01 | Identification & Authentication | Prevent unauthorized access and credential theft | Unique identifiers for users/processes/devices, password complexity (upper+lower+special+number, 8+ chars), cryptographic protection, reuse prevention | +| IA-02 | Multi-Factor Authentication | Strengthen privileged account authentication, prevent replay attacks | MFA for privileged network access, replay attack prevention (challenge-response/timestamp) | + +### IA Protection Measures + +| Measure | Detail | +|---------|--------| +| Password Policy | Min 8 chars, 3+ character types, 90-day rotation, history check (last 5) | +| MFA Methods | OTP, certificate, biometric — at least 2 factors required | +| Replay Prevention | Challenge-response protocol, timestamp-based token validation | +| Credential Storage | Hashed (SHA-256+), no plaintext storage, encrypted transmission | + +## Total: 14 Items (AC: 12 + IA: 2) diff --git a/skills/kesekit-guide/templates/space-security/governance.md b/skills/kesekit-guide/templates/space-security/governance.md new file mode 100644 index 0000000..3ff7049 --- /dev/null +++ b/skills/kesekit-guide/templates/space-security/governance.md @@ -0,0 +1,90 @@ +# Governance, Personnel, Physical & Risk Checklist + +> Domains: PS (2) + PE (3) + RA (2) + SG (4) + CP (2) = 13 items + +## PS — Personnel Security (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PS-01 | Personnel Security | Control insider threats, prevent unauthorized personnel access | Background check on hiring, access review/revocation on role change/termination, disciplinary procedures | +| PS-02 | Security Awareness Training | Prevent security incidents, strengthen role-based security competency | Awareness activities, professional training plans, annual execution including contractors | + +### PS Protection Measures + +| Measure | Detail | +|---------|--------| +| Background Check | Resume/education/identity verification before hiring | +| Termination | Immediate access revocation, asset return, NDA enforcement | +| Training | Annual minimum, phishing simulation, role-specific curriculum, contractor inclusion | + +## PE — Physical & Environmental Security (3 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PE-01 | Physical Access Control | Block unauthorized physical access, ensure asset integrity | Entry control/monitoring, visitor escort, access log retention, control device management | +| PE-02 | Alternate Work Site Security | Maintain confidentiality in alternate work environments | Security control standards, work device security, secure remote access | +| PE-03 | Protective Equipment Operation | Ensure physical safety against environmental threats | Equipment inspection, environmental controls (temperature/humidity/fire/water/power) | + +### PE Protection Measures + +| Category | Measures | +|----------|----------| +| Access Zones | Controlled/restricted/reception areas designated, card reader/biometric, CCTV | +| Visitor Policy | Escort required, visitor log, temporary badge | +| Alternate Sites | Home/travel/remote office classification, organization-issued device, VPN+MFA | +| Environmental | UPS/emergency generator/dual power, 10-32C server room, fire detection/suppression, periodic inspection | + +## RA — Risk Assessment & Security Evaluation (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| RA-01 | Risk Assessment | Identify, assess, and manage organizational risks | Risk management framework, periodic assessment (annual+) | +| RA-02 | Security Control Monitoring & Effectiveness | Ensure continuous security control effectiveness | Effectiveness evaluation framework, periodic review/update | + +### RA Protection Measures + +| Measure | Detail | +|---------|--------| +| Assessment Method | Baseline/detailed/combined approach, management/technical/physical/legal domains | +| Frequency | Annual minimum, ad-hoc on major changes | +| Metrics | KPI/security performance indicators: violation rate, infection rate, scanning completion rate | +| Responsibility | Designated monitoring officer, management reporting | + +## SG — Security Governance (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SG-01 | Security Policy Establishment | Ensure policy effectiveness and currency | Top-level policy creation/approval/dissemination, periodic review/update, improvement plans | +| SG-02 | Security Roles & Responsibilities | Clarify security accountability | CISO designation, role/responsibility assignment/review | +| SG-03 | Asset Management | Maintain asset integrity and security posture | Asset identification/inventory/updates, classification/owner assignment | +| SG-04 | Legal Requirements Compliance | Ensure regulatory compliance | Legal requirements identification/integration, independent compliance review | + +### SG Key Regulations + +| Regulation | Relevance | +|-----------|-----------| +| Personal Information Protection Act | Data collected by satellite services | +| ICT Infrastructure Protection Act | CII designation for space systems | +| Radio Waves Act | Satellite frequency management | +| Space Development Promotion Act | Space industry regulations | +| Cloud Computing Act | GSaaS cloud infrastructure | +| NIS2 (EU) | Space as essential service sector | +| CMMC (US) | Defense supply chain requirements | + +## CP — Contingency Planning (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| CP-01 | Contingency Plan | Ensure space system operational continuity | Disaster type identification, impact analysis, critical service identification, recovery procedures | +| CP-02 | Backup & Redundancy Management | Ensure critical information/system availability | Periodic backup, safe storage, regular testing, system redundancy | + +### CP Protection Measures + +| Measure | Detail | +|---------|--------| +| RTO/RPO | Define for each critical service (satellite control, MOC, PCC) | +| Backup Plan | Target/frequency/retention/method defined, backup confidentiality/integrity/availability verified | +| Redundancy | Network/system dual paths, failover testing | +| BCP | Business continuity management system, emergency contact chain, recovery organization | + +## Total: 13 Items (PS: 2 + PE: 3 + RA: 2 + SG: 4 + CP: 2) diff --git a/skills/kesekit-guide/templates/space-security/operations.md b/skills/kesekit-guide/templates/space-security/operations.md new file mode 100644 index 0000000..d1a2d0d --- /dev/null +++ b/skills/kesekit-guide/templates/space-security/operations.md @@ -0,0 +1,47 @@ +# Operations & Incident Response Checklist + +> Domains: SO (System/Service Operations Management, 9 items) + IR (Incident Response, 2 items) + +## SO — System/Service Operations Management (9 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SO-01 | Maintenance Control | Control maintenance personnel, tools, and remote access | Work request/approval/logging, NDA, media sanitization, VPN+MFA for remote maintenance | +| SO-02 | System Audit & Log Analysis | Detect unauthorized/abnormal activities, ensure accountability | Audit log generation/retention, tamper protection, restricted admin access, integrated analysis/reporting | +| SO-03 | Time Synchronization | Ensure audit log accuracy and reliability | NTP standard time sync, internal NTP server, periodic verification | +| SO-04 | Portable Storage Security | Protect storage media confidentiality/integrity | Classification marking, encrypted transfer, unauthorized media control, secure disposal | +| SO-05 | Configuration Management | Establish configuration baselines, maintain integrity | HW/SW/FW baseline identification, security configuration documentation, periodic monitoring | +| SO-06 | Security Requirements Definition | Define security requirements from planning phase | Authentication/access control/encryption/logging requirements in RFP, secure coding standards | +| SO-07 | Change Management | Ensure integrity during system/application changes | Change review/approval/recording, pre-change security impact analysis, access restrictions | +| SO-08 | Development Testing & Evaluation | Verify security requirement implementation | Acceptance testing, source code verification, vulnerability scanning in production-equivalent environment | +| SO-09 | Function Minimization & SW Control | Remove unnecessary features, control unauthorized software | Essential functions only, blacklist/whitelist policies, disable DHCP/Print Spooler etc., block P2P/webhard | + +### SO Protection Measures Summary + +| Category | Key Actions | +|----------|-------------| +| Maintenance | Approved personnel only, clean PC with AV scan, media control, session recording | +| Logging | All systems generate audit logs, tamper-proof storage, min 1-year retention, weekly review | +| Media Control | USB port lock, media control solution, encrypted transport, overwrite-based disposal | +| Configuration | Baseline registry/account/network settings, monthly drift detection, rollback capability | +| Secure Development | Security requirements in RFP, secure coding per language (Java/PHP/ASP/C), code review | +| Change Control | Formal approval process, security impact analysis, revision history, pre/post testing | + +## IR — Incident Response (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IR-01 | Incident Handling & Testing | Minimize damage and enable rapid recovery | Incident classification, detection/response/recovery procedures, post-incident review, periodic drills | +| IR-02 | Incident Reporting | Enable consistent response through timely reporting | Internal reporting chain, regulatory notification, stakeholder communication | + +### IR Protection Measures + +| Measure | Detail | +|---------|--------| +| Incident Types | Malware, unauthorized access, service disruption, data breach, physical compromise | +| Response Phases | Preparation > Detection > Investigation > Analysis > Containment > Eradication > Recovery | +| Reporting Timeline | Internal: immediate; KISA: within 24 hours (per ICT Infrastructure Act Art.48-3); NIS2: 24h/72h/1month staged | +| Emergency Contacts | Quarterly review, 24/7 contact chain, regulatory liaison designated | +| Testing | Annual tabletop exercise, biannual red team drill, post-exercise lessons learned | + +## Total: 11 Items (SO: 9 + IR: 2) diff --git a/skills/kesekit-guide/templates/space-security/supply-chain.md b/skills/kesekit-guide/templates/space-security/supply-chain.md new file mode 100644 index 0000000..750fe6f --- /dev/null +++ b/skills/kesekit-guide/templates/space-security/supply-chain.md @@ -0,0 +1,47 @@ +# Supply Chain Management Checklist + +> Domain: SM (Supply Chain Management, 4 items) + +## SM — Supply Chain Management (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SM-01 | Supply Chain Protection | Identify and mitigate supply chain risks | Supply chain security policy, vendor selection criteria/contract security requirements, vendor registry updates | +| SM-02 | Pre-Acquisition Evaluation | Prevent vulnerable assets from entering operations | Pre-acquisition/update vulnerability scanning, acceptance testing, counterfeit inspection | +| SM-03 | All-Source Information Use | Achieve software transparency through SBOM | Require SBOM from suppliers, use SBOM for transparency/continuous management | +| SM-04 | Tampering/Counterfeiting Prevention & Detection | Detect and block supply chain tampering | Verify vendor development/distribution integrity, acceptance/operations integrity verification | + +### SM Protection Measures + +| Category | Measures | +|----------|----------| +| Contract Security | Training/incident notification/vulnerability remediation/audit rights/data disposal on termination in contracts | +| SBOM Management | SPDX/CycloneDX standard format, open-source/commercial SW identification, CVE periodic scanning | +| Integrity Verification | Hash value/digital signature verification, SBOM-based impact identification on new vulnerabilities | +| Vendor Management | Periodic vendor security audits, vendor registry maintenance, conditional acceptance criteria | + +## Supply Chain Architecture (3 Zones) + +### Satellite/Launch Vehicle Manufacturer +| Component | Security Focus | +|-----------|---------------| +| SW Development Server | IDE plugin verification, malware scanning | +| Library DB | Open-source library verification, vulnerability scanning | +| Code DB | Source code integrity, access control | +| Manufacturing Systems | Satellite bus, payload, launch vehicle manufacturing integrity | + +### Ground Station Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Control System | Build pipeline security, backdoor prevention | +| SW Development Server | Secure development environment | +| SW Update Server | Update file integrity verification, secure transmission | +| Library/Code DB | Vulnerable open-source blocking, SBOM verification | + +### Satellite Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Application System | Hard-coded credential prevention | +| SW Development Server | Remote work environment security | +| Data Processing System | Maintenance account management | +| Library/Code DB | Auto-build malicious open-source prevention | diff --git a/skills/kesekit-guide/templates/space-security/system-security.md b/skills/kesekit-guide/templates/space-security/system-security.md new file mode 100644 index 0000000..7297ada --- /dev/null +++ b/skills/kesekit-guide/templates/space-security/system-security.md @@ -0,0 +1,46 @@ +# System & Communication Security Checklist + +> Domains: SC (System & Communication Security, 7 items) + SI (System & Information Integrity, 4 items) + +## SC — System & Communication Security (7 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SC-01 | Boundary Protection | Block unauthorized communications at boundaries | Network segmentation, DMZ deployment, communication encryption/monitoring, deny-all ACL | +| SC-02 | Security Engineering & Function Separation | Defense-in-depth, eliminate single points of failure | Security engineering principles, admin/user function separation, Secure by Design | +| SC-03 | Stored & Transmitted Information Security | Protect command/telemetry/log confidentiality and integrity | Storage encryption, uplink/downlink encryption, shared resource protection | +| SC-04 | Communication Security | Establish/maintain/terminate secure sessions | Default deny policy, authenticated/integrity-checked channels, session timeout | +| SC-05 | Encryption | Apply cryptographic algorithms and manage keys | Approved algorithms, key lifecycle management (create/distribute/store/retire) | +| SC-06 | Collaborative Computing Devices | Prevent remote camera/mic activation, prevent leaks | Device inventory, remote activation blocked, LED indicator required | +| SC-07 | Mobile Code & VoIP Control | Prevent malicious code execution and unauthorized VoIP | Mobile code execution control, VoIP usage restriction, monitoring | + +### SC Protection Measures + +| Category | Measures | +|----------|----------| +| Network Segmentation | Physical/logical separation, DMZ for public servers, satellite-control/operations/internet isolation | +| Encryption Standards | AES-256/ARIA-256, TLS 1.2+, IPsec VPN, CCSDS 352.0-B-2 for space systems | +| Integrity Verification | Digital signatures, HMAC, memory/buffer initialization | +| Session Management | mTLS, split-tunneling blocked, session ID rotation, 2-30 min timeout | +| Cryptographic Keys | AES-256, SHA-256+, RSA-4096+; PROHIBIT TDEA/MD5/SHA-1; full key lifecycle management | +| Code Control | ActiveX/Java Runtime disabled, script whitelisting, signed code only, SRTP for VoIP | + +## SI — System & Information Integrity (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SI-01 | Vulnerability Scanning & Flaw Remediation | Identify and fix system/application vulnerabilities | Periodic scanning, immediate scan on new vulnerabilities, flaw identification/remediation/reporting | +| SI-02 | Malicious Code Prevention | Prevent virus/worm/ransomware infiltration | Anti-malware on all systems, periodic/real-time scanning, signature updates | +| SI-03 | Security Alerts & Advisories | Monitor and respond to security alerts | Continuous monitoring of KISA/NCSC/CISA/NIST NVD, impact analysis, patch/hardening | +| SI-04 | System & Communication Traffic Monitoring | Detect abnormal traffic in real-time | Monitoring policy, inbound/outbound monitoring, result analysis/response | + +### SI Protection Measures + +| Measure | Detail | +|---------|--------| +| Vulnerability Management | Network/server/security/app/web scanning, CWE/CVE-based, prioritized remediation | +| Anti-Malware | Enterprise AV on all assets, daily+ updates, P2P/webhard blocked, central management | +| Alert Monitoring | RSS/email subscription to KISA/CISA/NVD, internal notification chain, patch within SLA | +| Traffic Monitoring | IDS/IPS at boundaries, access/security/network log integration, automated alerting | + +## Total: 11 Items (SC: 7 + SI: 4) diff --git a/skills/kesekit-guide/templates/zero-trust/app-data.md b/skills/kesekit-guide/templates/zero-trust/app-data.md new file mode 100644 index 0000000..f8d1195 --- /dev/null +++ b/skills/kesekit-guide/templates/zero-trust/app-data.md @@ -0,0 +1,162 @@ +# Application & Data Checklist + +> Zero Trust Maturity Assessment — Application (AP) & Data (DA) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## AP — 애플리케이션 및 워크로드 (Application) (60 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AP-01 | 리소스 권한 부여 및 통합 | 접근에 대한 사용자/시스템 권한을 수동으로 관리하는가? | Traditional | Critical | +| ZT-AP-02 | 리소스 권한 부여 및 통합 | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | Traditional | Critical | +| ZT-AP-03 | 리소스 권한 부여 및 통합 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | Initial | High | +| ZT-AP-04 | 리소스 권한 부여 및 통합 | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | Initial | High | +| ZT-AP-05 | 리소스 권한 부여 및 통합 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-06 | 리소스 권한 부여 및 통합 | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-07 | 리소스 권한 부여 및 통합 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | Optimal | Low | +| ZT-AP-08 | 리소스 권한 부여 및 통합 | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | Optimal | Low | +| ZT-AP-09 | 리소스 권한 부여 및 통합 | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | Optimal | Low | +| ZT-AP-10 | 리소스 권한 부여 및 통합 | 모든 리소스 권한 부여가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-11 | 지속적인 모니터링 및 진행 중인 승인 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | Traditional | Critical | +| ZT-AP-12 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-AP-13 | 지속적인 모니터링 및 진행 중인 승인 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | Initial | High | +| ZT-AP-14 | 지속적인 모니터링 및 진행 중인 승인 | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | Initial | High | +| ZT-AP-15 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | Advanced | Medium | +| ZT-AP-16 | 지속적인 모니터링 및 진행 중인 승인 | 보안 승인 프로세스를 자동화할 수 있는가? | Advanced | Medium | +| ZT-AP-17 | 지속적인 모니터링 및 진행 중인 승인 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | Optimal | Low | +| ZT-AP-18 | 원격 접속 | VPN을 통해서 외부 접속을 지원하는가? | Traditional | Critical | +| ZT-AP-19 | 원격 접속 | 애플리케이션에 대한 접근제어가 제한적인가? | Traditional | Critical | +| ZT-AP-20 | 원격 접속 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | Initial | High | +| ZT-AP-21 | 원격 접속 | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | Advanced | Medium | +| ZT-AP-22 | 원격 접속 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | Advanced | Medium | +| ZT-AP-23 | 원격 접속 | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | Optimal | Low | +| ZT-AP-24 | 원격 접속 | AI를 활용하여 원격 접속 보안을 고도화 하였는가? | Optimal | Low | +| ZT-AP-25 | 원격 접속 | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | Optimal | Low | +| ZT-AP-26 | 안전한 애플리케이션 배포 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | Traditional | Critical | +| ZT-AP-27 | 안전한 애플리케이션 배포 | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | Traditional | Critical | +| ZT-AP-28 | 안전한 애플리케이션 배포 | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | Traditional | Critical | +| ZT-AP-29 | 안전한 애플리케이션 배포 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | Initial | High | +| ZT-AP-30 | 안전한 애플리케이션 배포 | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | Initial | High | +| ZT-AP-31 | 안전한 애플리케이션 배포 | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | Initial | High | +| ZT-AP-32 | 안전한 애플리케이션 배포 | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | Initial | High | +| ZT-AP-33 | 안전한 애플리케이션 배포 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | Advanced | Medium | +| ZT-AP-34 | 안전한 애플리케이션 배포 | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | Advanced | Medium | +| ZT-AP-35 | 안전한 애플리케이션 배포 | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | Advanced | Medium | +| ZT-AP-36 | 안전한 애플리케이션 배포 | 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | Advanced | Medium | +| ZT-AP-37 | 안전한 애플리케이션 배포 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | Optimal | Low | +| ZT-AP-38 | 안전한 애플리케이션 배포 | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | Optimal | Low | +| ZT-AP-39 | 애플리케이션 인벤토리 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | Traditional | Critical | +| ZT-AP-40 | 애플리케이션 인벤토리 | 애플리케이션 기본 정보를 기록하여 관리하는가? | Traditional | Critical | +| ZT-AP-41 | 애플리케이션 인벤토리 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | Initial | High | +| ZT-AP-42 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가/관리할 수 있는가? | Advanced | Medium | +| ZT-AP-43 | 애플리케이션 인벤토리 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | Optimal | Low | +| ZT-AP-44 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-AP-45 | 보안 소프트웨어 개발 및 통합 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | Traditional | Critical | +| ZT-AP-46 | 보안 소프트웨어 개발 및 통합 | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | Traditional | Critical | +| ZT-AP-47 | 보안 소프트웨어 개발 및 통합 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | Initial | High | +| ZT-AP-48 | 보안 소프트웨어 개발 및 통합 | DevSecOps 문화를 도입하였는가? | Initial | High | +| ZT-AP-49 | 보안 소프트웨어 개발 및 통합 | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | Initial | High | +| ZT-AP-50 | 보안 소프트웨어 개발 및 통합 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | Advanced | Medium | +| ZT-AP-51 | 보안 소프트웨어 개발 및 통합 | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | Advanced | Medium | +| ZT-AP-52 | 보안 소프트웨어 개발 및 통합 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | Optimal | Low | +| ZT-AP-53 | 보안 소프트웨어 개발 및 통합 | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | Optimal | Low | +| ZT-AP-54 | 보안 소프트웨어 개발 및 통합 | 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-55 | 소프트웨어 위험 관리 | 최소한의 위험 요소가 식별되고 문서화 하였는가? | Traditional | Critical | +| ZT-AP-56 | 소프트웨어 위험 관리 | 소프트웨어 위험 관리 계획이 수립되어 있는가? | Traditional | Critical | +| ZT-AP-57 | 소프트웨어 위험 관리 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | Initial | High | +| ZT-AP-58 | 소프트웨어 위험 관리 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | Advanced | Medium | +| ZT-AP-59 | 소프트웨어 위험 관리 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | Optimal | Low | +| ZT-AP-60 | 소프트웨어 위험 관리 | 맞춤형 공격에 대응 가능한가? | Optimal | Low | + +### AP Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 리소스 권한 부여 및 통합 | 수동 권한 관리, 정적 접근제어 | 중앙 집중식 관리 | 컨텍스트 기반 최소 권한, 정밀 관리 | 실시간 분석, 자동 권한 부여/회수, 완전 자동화 | +| 지속적인 모니터링 및 승인 | 수동 모니터링, 수동 이벤트 기록 | 실시간 이벤트 수집/분석, 보안 검토 | AI 분석, 승인 자동화 | 실시간 탐지, 위협 사전 예측 | +| 원격 접속 | VPN 외부 접속, 제한적 접근제어 | 자동 보안 상태 평가 | 실시간 모니터링, 맞춤형 정책 | 동적 보안 정책, AI 고도화, 즉각 차단 | +| 안전한 애플리케이션 배포 | 수동 코드 검토, 배포 절차, 접근제어 | 자동화 파이프라인, CI/CD 취약점 검사, 무결성 검사 | 지속적 모니터링, 정책 자동 검증, 즉각 대응 | 완전 자동 배포, AI 위협 탐지 통합 | +| 애플리케이션 인벤토리 | 수동 목록화, 기본 정보 기록 | 자동 식별/관리 | 보안 상태 평가/관리 | AI 실시간 반영, 보안 시스템 통합 | +| 보안 SW 개발 및 통합 | 보안 코딩 표준, 수동 테스트 | SDLC 통합, DevSecOps, SBOM | 서드파티 자동 검사, 전체 SBOM | 프로세스 격리, 런타임 분석, 완전 자동화 | +| 소프트웨어 위험 관리 | 위험 식별/문서화, 관리 계획 | 위험 평가 프로세스 | 공급망 보안, 전주기 자동화 | AI 예측 분석, 맞춤형 공격 대응 | + +--- + +## DA — 데이터 (Data) (58 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DA-01 | 데이터 카탈로그 위험 정렬 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | Traditional | Critical | +| ZT-DA-02 | 데이터 카탈로그 위험 정렬 | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | Traditional | Critical | +| ZT-DA-03 | 데이터 카탈로그 위험 정렬 | 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | Traditional | Critical | +| ZT-DA-04 | 데이터 카탈로그 위험 정렬 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | Initial | High | +| ZT-DA-05 | 데이터 카탈로그 위험 정렬 | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | Initial | High | +| ZT-DA-06 | 데이터 카탈로그 위험 정렬 | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | Initial | High | +| ZT-DA-07 | 데이터 카탈로그 위험 정렬 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | Advanced | Medium | +| ZT-DA-08 | 데이터 카탈로그 위험 정렬 | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-DA-09 | 데이터 카탈로그 위험 정렬 | 데이터 사용 패턴 분석이 가능한가? | Advanced | Medium | +| ZT-DA-10 | 데이터 카탈로그 위험 정렬 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | Optimal | Low | +| ZT-DA-11 | 데이터 카탈로그 위험 정렬 | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | Optimal | Low | +| ZT-DA-12 | 기업 데이터 거버넌스 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | Traditional | Critical | +| ZT-DA-13 | 기업 데이터 거버넌스 | 데이터 소유자와 관리자를 지정하였는가? | Traditional | Critical | +| ZT-DA-14 | 기업 데이터 거버넌스 | 데이터 거버넌스 프레임워크가 도입되어 있는가? | Traditional | Critical | +| ZT-DA-15 | 기업 데이터 거버넌스 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | Initial | High | +| ZT-DA-16 | 기업 데이터 거버넌스 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | Advanced | Medium | +| ZT-DA-17 | 기업 데이터 거버넌스 | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | Advanced | Medium | +| ZT-DA-18 | 기업 데이터 거버넌스 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | Optimal | Low | +| ZT-DA-19 | 데이터 접근제어 | 데이터 접근 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-20 | 데이터 접근제어 | 데이터 접근권한이 수동으로 부여되는가? | Traditional | Critical | +| ZT-DA-21 | 데이터 접근제어 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-22 | 데이터 접근제어 | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | Initial | High | +| ZT-DA-23 | 데이터 접근제어 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | Advanced | Medium | +| ZT-DA-24 | 데이터 접근제어 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-25 | 데이터 암호화 및 권한 관리 | 데이터를 수동으로 암호화하는가? | Traditional | Critical | +| ZT-DA-26 | 데이터 암호화 및 권한 관리 | 암호화 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-27 | 데이터 암호화 및 권한 관리 | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-28 | 데이터 암호화 및 권한 관리 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | Initial | High | +| ZT-DA-29 | 데이터 암호화 및 권한 관리 | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-30 | 데이터 암호화 및 권한 관리 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | Advanced | Medium | +| ZT-DA-31 | 데이터 암호화 및 권한 관리 | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | Advanced | Medium | +| ZT-DA-32 | 데이터 암호화 및 권한 관리 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-33 | 데이터 암호화 및 권한 관리 | 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | Optimal | Low | +| ZT-DA-34 | 데이터 라벨링 및 태그 지정 | 라벨링 및 태그 지정 지침을 수립하였는가? | Traditional | Critical | +| ZT-DA-35 | 데이터 라벨링 및 태그 지정 | 일관된 데이터 분류 체계가 마련되어 있는가? | Traditional | Critical | +| ZT-DA-36 | 데이터 라벨링 및 태그 지정 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별/분류하는가? | Initial | High | +| ZT-DA-37 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | Initial | High | +| ZT-DA-38 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | Initial | High | +| ZT-DA-39 | 데이터 라벨링 및 태그 지정 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류/식별 가능한가? | Advanced | Medium | +| ZT-DA-40 | 데이터 라벨링 및 태그 지정 | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | Advanced | Medium | +| ZT-DA-41 | 데이터 라벨링 및 태그 지정 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | Optimal | Low | +| ZT-DA-42 | 데이터 라벨링 및 태그 지정 | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | Optimal | Low | +| ZT-DA-43 | 데이터 손실 방지 (DLP) | DLP 정책을 수립하고 수동으로 평가하는가? | Traditional | Critical | +| ZT-DA-44 | 데이터 손실 방지 (DLP) | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | Traditional | Critical | +| ZT-DA-45 | 데이터 손실 방지 (DLP) | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | Initial | High | +| ZT-DA-46 | 데이터 손실 방지 (DLP) | DLP 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-DA-47 | 데이터 손실 방지 (DLP) | DLP 솔루션이 모니터링 모드로 동작하는가? | Initial | High | +| ZT-DA-48 | 데이터 손실 방지 (DLP) | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | Advanced | Medium | +| ZT-DA-49 | 데이터 손실 방지 (DLP) | DLP 솔루션이 방지 모드로 사용되는가? | Advanced | Medium | +| ZT-DA-50 | 데이터 손실 방지 (DLP) | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | Optimal | Low | +| ZT-DA-51 | 데이터 손실 방지 (DLP) | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | Optimal | Low | +| ZT-DA-52 | 데이터 모니터링 및 감지 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | Traditional | Critical | +| ZT-DA-53 | 데이터 모니터링 및 감지 | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-54 | 데이터 모니터링 및 감지 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | Initial | High | +| ZT-DA-55 | 데이터 모니터링 및 감지 | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | Initial | High | +| ZT-DA-56 | 데이터 모니터링 및 감지 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-DA-57 | 데이터 모니터링 및 감지 | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | Advanced | Medium | +| ZT-DA-58 | 데이터 모니터링 및 감지 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | Optimal | Low | + +### DA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 데이터 카탈로그 위험 정렬 | 초기 카탈로그, 수동 분류, 위험 평가 문서화 | 자동 카탈로그, 자동 수집/분류, 기준 마련 | 민감도 분석, 보호 정책, 패턴 분석 | AI 실시간 분석, 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 정책 수립, 소유자 지정, 프레임워크 | 정기적 감사/검토 | 자동화, 실시간 모니터링 | 전체 시스템 통합 관리 | +| 데이터 접근제어 | 접근 정책 수립, 수동 권한 부여 | 중앙 집중식, 최소 권한 확인 | ABAC 컨텍스트 기반 | AI 실시간 권한 조정 | +| 데이터 암호화 및 권한 관리 | 수동 암호화, 정책 수립, 초기 관리 체계 | 자동 암호화, 중앙 집중식 관리 | 고급 암호화, RBAC+ABAC | AI 기반 최적화, 실시간 마스킹 | +| 데이터 라벨링 및 태그 지정 | 지침 수립, 분류 체계 마련 | 수동 라벨링, 특수 라벨, 차등 정책 | 자동 분류, 보안 시스템 연계 | 고급 메타데이터, AI 자동 조정 | +| 데이터 손실 방지 (DLP) | DLP 정책, 범위 지정 | DLP 도입, 중앙 관리, 모니터링 모드 | 전체 도입, 방지 모드 | AI 예측/차단, 자동 정책 최적화 | +| 데이터 모니터링 및 감지 | 수동 모니터링, 프로세스 수립 | 자동 감시, 정책 조정 | 이상 징후 탐지, 보안 시스템 연계 | 지속 평가, 컨텍스트 최소 접근제어 | + +--- + +## Total: 118 Items (AP: 60 + DA: 58) diff --git a/skills/kesekit-guide/templates/zero-trust/identity-device.md b/skills/kesekit-guide/templates/zero-trust/identity-device.md new file mode 100644 index 0000000..80e1800 --- /dev/null +++ b/skills/kesekit-guide/templates/zero-trust/identity-device.md @@ -0,0 +1,133 @@ +# Identity & Device Checklist + +> Zero Trust Maturity Assessment — Identity (ID) & Device (DV) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## ID — 식별자 및 신원 (Identity) (53 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-ID-01 | 사용자 인벤토리 | 사용자 목록에 대한 문서화가 되어있는가? | Traditional | Critical | +| ZT-ID-02 | 사용자 인벤토리 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | Initial | High | +| ZT-ID-03 | 사용자 인벤토리 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | Advanced | Medium | +| ZT-ID-04 | 사용자 인벤토리 | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | Advanced | Medium | +| ZT-ID-05 | 사용자 인벤토리 | AI 기반 사용자 행동에 따른 관리가 되는가? | Optimal | Low | +| ZT-ID-06 | 사용자 인벤토리 | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | Optimal | Low | +| ZT-ID-07 | ID 연계 및 사용자 자격 증명 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-08 | ID 연계 및 사용자 자격 증명 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | Initial | High | +| ZT-ID-09 | ID 연계 및 사용자 자격 증명 | ID 통합 관리 시스템이 구축되어 있는가? | Advanced | Medium | +| ZT-ID-10 | ID 연계 및 사용자 자격 증명 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | Optimal | Low | +| ZT-ID-11 | 다중인증 (MFA) | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-12 | 다중인증 (MFA) | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | Initial | High | +| ZT-ID-13 | 다중인증 (MFA) | FIDO 기반 인증 기법이 적용되어 있는가? | Initial | High | +| ZT-ID-14 | 다중인증 (MFA) | 상황에 따른 맞춤형 MFA가 지원 가능한가? | Advanced | Medium | +| ZT-ID-15 | 다중인증 (MFA) | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-16 | 다중인증 (MFA) | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | Optimal | Low | +| ZT-ID-17 | 지속 인증 | 세션 기반 인증이 수행되는가? | Traditional | Critical | +| ZT-ID-18 | 지속 인증 | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | Traditional | Critical | +| ZT-ID-19 | 지속 인증 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-20 | 지속 인증 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | Advanced | Medium | +| ZT-ID-21 | 지속 인증 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | Optimal | Low | +| ZT-ID-22 | 통합 ICAM 플랫폼 | ICAM 시스템이 구축되어 있는가? | Traditional | Critical | +| ZT-ID-23 | 통합 ICAM 플랫폼 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | Initial | High | +| ZT-ID-24 | 통합 ICAM 플랫폼 | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | Initial | High | +| ZT-ID-25 | 통합 ICAM 플랫폼 | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | Initial | High | +| ZT-ID-26 | 통합 ICAM 플랫폼 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | Advanced | Medium | +| ZT-ID-27 | 통합 ICAM 플랫폼 | ICAM 플랫폼이 자동화되어 있는가? | Advanced | Medium | +| ZT-ID-28 | 통합 ICAM 플랫폼 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | Optimal | Low | +| ZT-ID-29 | 통합 ICAM 플랫폼 | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | Optimal | Low | +| ZT-ID-30 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-31 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자 행동 패턴이 수동으로 분석되는가? | Traditional | Critical | +| ZT-ID-32 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | Initial | High | +| ZT-ID-33 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 컨텍스트 정보 기반 접근권한이 조정되는가? | Initial | High | +| ZT-ID-34 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | Advanced | Medium | +| ZT-ID-35 | 행동, 컨텍스트 기반 ID 및 생체 인식 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | Optimal | Low | +| ZT-ID-36 | 조건부 사용자 접근 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | Traditional | Critical | +| ZT-ID-37 | 조건부 사용자 접근 | 조건부 접근 정책에 대한 개념을 정의하였는가? | Traditional | Critical | +| ZT-ID-38 | 조건부 사용자 접근 | 시스템 별 각기 다른 접속 관리 기능이 있는가? | Traditional | Critical | +| ZT-ID-39 | 조건부 사용자 접근 | 특정 조건에 따른 사용자 접근제어가 가능한가? | Initial | High | +| ZT-ID-40 | 조건부 사용자 접근 | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | Initial | High | +| ZT-ID-41 | 조건부 사용자 접근 | 세션별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-42 | 조건부 사용자 접근 | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-43 | 조건부 사용자 접근 | 리소스별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-44 | 조건부 사용자 접근 | 동적 접근 정책을 실시간으로 적용 가능한가? | Optimal | Low | +| ZT-ID-45 | 조건부 사용자 접근 | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | Optimal | Low | +| ZT-ID-46 | 최소 권한 접근 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | Traditional | Critical | +| ZT-ID-47 | 최소 권한 접근 | 권한 부여에 대한 절차가 문서화 되어 있는가? | Traditional | Critical | +| ZT-ID-48 | 최소 권한 접근 | 권한 부여 절차가 표준화 되어 있는가? | Initial | High | +| ZT-ID-49 | 최소 권한 접근 | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-50 | 최소 권한 접근 | 자동화된 권한 상승이 가능한가? | Advanced | Medium | +| ZT-ID-51 | 최소 권한 접근 | 권한 관리 정책이 지속적으로 업데이트 되는가? | Advanced | Medium | +| ZT-ID-52 | 최소 권한 접근 | 권한 관리가 동적으로 변경 가능한가? | Optimal | Low | +| ZT-ID-53 | 최소 권한 접근 | 최소 권한 원칙이 실시간으로 조정 가능한가? | Optimal | Low | + +### ID Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 사용자 인벤토리 | 사용자 목록 문서화 | 역할별 상세 인벤토리 | 자동화 관리, 비정상 활동 탐지 | AI 기반 관리, 통합 최적화 | +| ID 연계 및 사용자 자격 증명 | ID 연계 솔루션 적용 | 시스템 간 연동 | 통합 관리 시스템 | 글로벌 수준 연계 | +| 다중인증 (MFA) | 패스워드+SMS/이메일 MFA | 인증 앱/토큰, FIDO | 맞춤형 MFA, 컨텍스트 인증 | 비정상 로그인 실시간 탐지 | +| 지속 인증 | 세션 기반 인증, 상태 모니터링 | 세션 중간 추가 인증 | 동적 인증 기술 | 자동 재인증, 실시간 검증 | +| 통합 ICAM 플랫폼 | ICAM 시스템 구축 | 중앙 관리, 정책 표준화, 위험도 평가 | 시스템 통합 안정화, 자동화 | AI 기반 보안 강화, 실시간 ID 위험 평가 | +| 행동/컨텍스트 기반 ID 및 생체 인식 | 기본 생체 인식, 수동 행동 분석 | 통합 인증, 컨텍스트 접근권한 | 실시간 접근제어 조정 | AI 기반 행동/생체 인식 | +| 조건부 사용자 접근 | 기초 시스템, 개념 정의, 접속 관리 | 조건부 접근제어, 최소 권한 | 세션/리소스별 권한, 다단계 정책 | 동적 정책, AI 실시간 관리 | +| 최소 권한 접근 | 원칙 정의, 절차 문서화 | 표준화, 변경 관리 시스템 | 자동 권한 상승, 정책 업데이트 | 동적 변경, 실시간 조정 | + +--- + +## DV — 기기 및 엔드포인트 (Device) (40 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DV-01 | 기기 감지 및 규정 준수 | 리소스에 연결된 기기를 식별할 수 있는가? | Traditional | Critical | +| ZT-DV-02 | 기기 감지 및 규정 준수 | 수동으로 규정 준수에 대한 확인이 가능한가? | Traditional | Critical | +| ZT-DV-03 | 기기 감지 및 규정 준수 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | Initial | High | +| ZT-DV-04 | 기기 감지 및 규정 준수 | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | Initial | High | +| ZT-DV-05 | 기기 감지 및 규정 준수 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | Advanced | Medium | +| ZT-DV-06 | 기기 감지 및 규정 준수 | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-DV-07 | 기기 감지 및 규정 준수 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | Optimal | Low | +| ZT-DV-08 | 기기 감지 및 규정 준수 | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | Optimal | Low | +| ZT-DV-09 | 실시간 검사를 통한 기기 권한 부여 | 자산 접근 기기에 대한 정보가 수집되는가? | Traditional | Critical | +| ZT-DV-10 | 실시간 검사를 통한 기기 권한 부여 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | Initial | High | +| ZT-DV-11 | 실시간 검사를 통한 기기 권한 부여 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | Advanced | Medium | +| ZT-DV-12 | 실시간 검사를 통한 기기 권한 부여 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | Optimal | Low | +| ZT-DV-13 | 실시간 검사를 통한 기기 권한 부여 | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | Optimal | Low | +| ZT-DV-14 | 기기 인벤토리 | 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | Traditional | Critical | +| ZT-DV-15 | 기기 인벤토리 | 주요 기기에 대한 정보를 수집하고 관리하는가? | Traditional | Critical | +| ZT-DV-16 | 기기 인벤토리 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | Initial | High | +| ZT-DV-17 | 기기 인벤토리 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | Advanced | Medium | +| ZT-DV-18 | 기기 인벤토리 | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | Advanced | Medium | +| ZT-DV-19 | 기기 인벤토리 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | Optimal | Low | +| ZT-DV-20 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | Traditional | Critical | +| ZT-DV-21 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 보안 정책을 설정하였는가? | Traditional | Critical | +| ZT-DV-22 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | Initial | High | +| ZT-DV-23 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기기 상태를 지속적으로 모니터링 하는가? | Initial | High | +| ZT-DV-24 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | Advanced | Medium | +| ZT-DV-25 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | Optimal | Low | +| ZT-DV-26 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | 기본적인 EDR 솔루션을 도입하였는가? | Traditional | Critical | +| ZT-DV-27 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | Initial | High | +| ZT-DV-28 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | XDR 솔루션을 도입하였는가? | Advanced | Medium | +| ZT-DV-29 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | AI 기반 EDR/XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | Optimal | Low | +| ZT-DV-30 | 자산, 취약성 및 패치 관리 자동화 | 자산 및 취약성을 수동으로 평가하는가? | Traditional | Critical | +| ZT-DV-31 | 자산, 취약성 및 패치 관리 자동화 | 주요 자산 및 취약성 목록이 작성되어 있는가? | Traditional | Critical | +| ZT-DV-32 | 자산, 취약성 및 패치 관리 자동화 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | Initial | High | +| ZT-DV-33 | 자산, 취약성 및 패치 관리 자동화 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | Advanced | Medium | +| ZT-DV-34 | 자산, 취약성 및 패치 관리 자동화 | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | Advanced | Medium | +| ZT-DV-35 | 자산, 취약성 및 패치 관리 자동화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | Optimal | Low | +| ZT-DV-36 | 자산, 취약성 및 패치 관리 자동화 | 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | Optimal | Low | + +### DV Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 기기 감지 및 규정 준수 | 기기 식별, 수동 규정 확인 | 실시간 탐지, 비준수 경고 | 자동 교정, 접근권한 연동 | 동적 권한 수정, AI 실시간 평가 | +| 실시간 검사를 통한 기기 권한 부여 | 기기 정보 수집 | 수동 검사 수행 | 자동 평가 및 접근 허용 | 접근권한 조정, 보안 시스템 연동 | +| 기기 인벤토리 | 수동 인벤토리, 정보 수집 | 자동화 기록 | 비정상 기기 탐지, 취약점 파악 | 실시간 모니터링, 예측 분석 | +| 통합 엔드포인트/모바일 기기 관리 | 관리 시스템 도입, 보안 정책 설정 | 중앙 관리, 지속 모니터링 | 중앙 자동 적용 | 통합 관리, 자동 위협 대응 | +| EDR 및 XDR | 기본 EDR 도입 | 실시간 탐지/자동 대응 | XDR 도입 | AI 기반 통합 위협 탐지 | +| 자산/취약성/패치 관리 자동화 | 수동 평가, 목록 작성 | 자동 패치 도입 | 지속적 자동화, 시스템 통합 | 사전 식별, 통합 관리 | + +--- + +## Total: 89 Items (ID: 53 + DV: 36) diff --git a/skills/kesekit-guide/templates/zero-trust/network-system.md b/skills/kesekit-guide/templates/zero-trust/network-system.md new file mode 100644 index 0000000..89cef54 --- /dev/null +++ b/skills/kesekit-guide/templates/zero-trust/network-system.md @@ -0,0 +1,145 @@ +# Network & System Checklist + +> Zero Trust Maturity Assessment — Network (NW) & System (SY) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## NW — 네트워크 (Network) (54 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-NW-01 | 매크로 세그멘테이션 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-02 | 매크로 세그멘테이션 | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | Traditional | Critical | +| ZT-NW-03 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | Initial | High | +| ZT-NW-04 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | Initial | High | +| ZT-NW-05 | 매크로 세그멘테이션 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | Advanced | Medium | +| ZT-NW-06 | 매크로 세그멘테이션 | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | Advanced | Medium | +| ZT-NW-07 | 매크로 세그멘테이션 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | Optimal | Low | +| ZT-NW-08 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-09 | 마이크로 세그멘테이션 | 수동으로 세그먼트를 구성하는가? | Traditional | Critical | +| ZT-NW-10 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | Initial | High | +| ZT-NW-11 | 마이크로 세그멘테이션 | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지/차단 할 수 있는가? | Initial | High | +| ZT-NW-12 | 마이크로 세그멘테이션 | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | Initial | High | +| ZT-NW-13 | 마이크로 세그멘테이션 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | Advanced | Medium | +| ZT-NW-14 | 마이크로 세그멘테이션 | 애플리케이션 별 격리 메커니즘이 적용되었는가? | Advanced | Medium | +| ZT-NW-15 | 마이크로 세그멘테이션 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | Optimal | Low | +| ZT-NW-16 | 소프트웨어 정의 네트워킹 | 소프트웨어 정의 네트워크가 도입되어 있는가? | Traditional | Critical | +| ZT-NW-17 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | Traditional | Critical | +| ZT-NW-18 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | Initial | High | +| ZT-NW-19 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | Advanced | Medium | +| ZT-NW-20 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | Optimal | Low | +| ZT-NW-21 | 위협 대응 | IDS/IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | Traditional | Critical | +| ZT-NW-22 | 위협 대응 | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | Traditional | Critical | +| ZT-NW-23 | 위협 대응 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | Initial | High | +| ZT-NW-24 | 위협 대응 | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | Initial | High | +| ZT-NW-25 | 위협 대응 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | Advanced | Medium | +| ZT-NW-26 | 위협 대응 | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | Advanced | Medium | +| ZT-NW-27 | 위협 대응 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | Optimal | Low | +| ZT-NW-28 | 위협 대응 | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | Optimal | Low | +| ZT-NW-29 | 트래픽 암호화 | 내/외부 트래픽 일부 암호화가 가능한가? | Traditional | Critical | +| ZT-NW-30 | 트래픽 암호화 | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | Traditional | Critical | +| ZT-NW-31 | 트래픽 암호화 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | Initial | High | +| ZT-NW-32 | 트래픽 암호화 | 데이터 전송 시 암호화를 필수로 하고 있는가? | Initial | High | +| ZT-NW-33 | 트래픽 암호화 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | Advanced | Medium | +| ZT-NW-34 | 트래픽 암호화 | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | Advanced | Medium | +| ZT-NW-35 | 트래픽 암호화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | Optimal | Low | +| ZT-NW-36 | 트래픽 암호화 | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-NW-37 | 데이터 흐름 매핑 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | Traditional | Critical | +| ZT-NW-38 | 데이터 흐름 매핑 | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | Traditional | Critical | +| ZT-NW-39 | 데이터 흐름 매핑 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | Initial | High | +| ZT-NW-40 | 데이터 흐름 매핑 | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | Initial | High | +| ZT-NW-41 | 데이터 흐름 매핑 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | Advanced | Medium | +| ZT-NW-42 | 데이터 흐름 매핑 | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | Advanced | Medium | +| ZT-NW-43 | 데이터 흐름 매핑 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | Optimal | Low | +| ZT-NW-44 | 데이터 흐름 매핑 | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | Optimal | Low | +| ZT-NW-45 | 네트워크 회복성 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | Traditional | Critical | +| ZT-NW-46 | 네트워크 회복성 | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | Traditional | Critical | +| ZT-NW-47 | 네트워크 회복성 | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | Traditional | Critical | +| ZT-NW-48 | 네트워크 회복성 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | Initial | High | +| ZT-NW-49 | 네트워크 회복성 | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | Initial | High | +| ZT-NW-50 | 네트워크 회복성 | 네트워크 이중화 설계가 되어 있는가? | Initial | High | +| ZT-NW-51 | 네트워크 회복성 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | Advanced | Medium | +| ZT-NW-52 | 네트워크 회복성 | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | Advanced | Medium | +| ZT-NW-53 | 네트워크 회복성 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | Optimal | Low | +| ZT-NW-54 | 네트워크 회복성 | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | Optimal | Low | + +### NW Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 매크로 세그멘테이션 | 영역별 세그멘테이션, 트래픽 흐름 기반 구성 | 보안 정책 적용, 비정상 활동 탐지 | 맞춤형 정책, 위협 대응 | AI 기반 관리 | +| 마이크로 세그멘테이션 | 워크로드 기준 세그멘테이션, 수동 구성 | 보안 정책, 워크로드 이동 탐지/차단, 모니터링 | 정책 설정/제어, 격리 메커니즘 | AI 기반 자동 대응 | +| 소프트웨어 정의 네트워킹 | SDN 도입, 기본 구조 설정 | 중앙 관리, 실시간 정책 | 트래픽 관리/보안 확장 | AI 기반 위협 관리/트래픽 예측 | +| 위협 대응 | IDS/IPS 감시, 정적 규칙 관리 | 자동 탐지/대응, 프로파일 관리 | 선제적 대응, 동적 규칙 | 즉각 자동 대응, 동적 트래픽 관리 | +| 트래픽 암호화 | 일부 암호화, SSL/TLS/VPN | 전반 암호화, 전송 필수 암호화 | 저장 데이터 암호화, 고급 키 관리 | 성능 유지 보호, 통합 키 관리 | +| 데이터 흐름 매핑 | 수동 모니터링, 수동 매핑 | 애플리케이션 단위 매핑, 실시간 매핑 | 비정상 이동 탐지, 상관관계 분석 | AI 예측 분석, 동적 우선순위 | +| 네트워크 회복성 | 복구 계획, 백업, 장애 대응 절차 | 다중 경로, Failover, 이중화 | 지속적 서비스, 주기적 테스트 | 중단 없는 운영, 자동화 복구 | + +--- + +## SY — 시스템 (System) (49 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-SY-01 | 접근통제 | 사용자 및 기기에 수동으로 권한을 부여하는가? | Traditional | Critical | +| ZT-SY-02 | 접근통제 | RBAC 기반 접근제어를 수행하는가? | Traditional | Critical | +| ZT-SY-03 | 접근통제 | 권한 관리를 수동으로 수행하는가? | Traditional | Critical | +| ZT-SY-04 | 접근통제 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | Initial | High | +| ZT-SY-05 | 접근통제 | 실시간 접근권한 부여가 가능한가? | Initial | High | +| ZT-SY-06 | 접근통제 | 권한 변경 사항이 자동으로 반영되는가? | Initial | High | +| ZT-SY-07 | 접근통제 | 특정 리소스에 대한 접근 제한/승인 정책이 자동으로 적용 가능한가? | Initial | High | +| ZT-SY-08 | 접근통제 | ABAC 기반 접근제어를 수행하는가? | Advanced | Medium | +| ZT-SY-09 | 접근통제 | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | Advanced | Medium | +| ZT-SY-10 | 접근통제 | 사용자/기기의 상태를 실시간으로 분석하고 실시간/자동으로 권한 조정이 가능한가? | Optimal | Low | +| ZT-SY-11 | 접근통제 | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | Optimal | Low | +| ZT-SY-12 | 접근통제 | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | Optimal | Low | +| ZT-SY-13 | 접근통제 | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | Optimal | Low | +| ZT-SY-14 | PAM | PAM 시스템을 구축하였는가? | Traditional | Critical | +| ZT-SY-15 | PAM | PAM 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-SY-16 | PAM | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | Initial | High | +| ZT-SY-17 | PAM | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | Initial | High | +| ZT-SY-18 | PAM | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | Advanced | Medium | +| ZT-SY-19 | PAM | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | Optimal | Low | +| ZT-SY-20 | 자격 증명 관리 | 자격 증명이 수동으로 관리되는가? | Traditional | Critical | +| ZT-SY-21 | 자격 증명 관리 | 패스워드에 기반한 인증 방식에 의존하는가? | Traditional | Critical | +| ZT-SY-22 | 자격 증명 관리 | 자격 증명 관리가 체계적이지 않고 수동적인가? | Traditional | Critical | +| ZT-SY-23 | 자격 증명 관리 | 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | Initial | High | +| ZT-SY-24 | 자격 증명 관리 | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | Initial | High | +| ZT-SY-25 | 자격 증명 관리 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | Advanced | Medium | +| ZT-SY-26 | 자격 증명 관리 | 자격 증명 관리 시스템을 고도화하여 관리하는가? | Advanced | Medium | +| ZT-SY-27 | 자격 증명 관리 | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | Advanced | Medium | +| ZT-SY-28 | 자격 증명 관리 | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | Advanced | Medium | +| ZT-SY-29 | 자격 증명 관리 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | Optimal | Low | +| ZT-SY-30 | 자격 증명 관리 | 실시간으로 인증 정책 조정이 가능한가? | Optimal | Low | +| ZT-SY-31 | 자격 증명 관리 | 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | Optimal | Low | +| ZT-SY-32 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | Traditional | Critical | +| ZT-SY-33 | 네트워크 세분화 및 그룹 간 이동 | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | Traditional | Critical | +| ZT-SY-34 | 네트워크 세분화 및 그룹 간 이동 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | Initial | High | +| ZT-SY-35 | 네트워크 세분화 및 그룹 간 이동 | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | Initial | High | +| ZT-SY-36 | 네트워크 세분화 및 그룹 간 이동 | 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | Advanced | Medium | +| ZT-SY-37 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | Advanced | Medium | +| ZT-SY-38 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | Advanced | Medium | +| ZT-SY-39 | 네트워크 세분화 및 그룹 간 이동 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | Optimal | Low | +| ZT-SY-40 | 네트워크 세분화 및 그룹 간 이동 | 재인증 없는 그룹 간 이동이 가능한가? | Optimal | Low | +| ZT-SY-41 | 네트워크 세분화 및 그룹 간 이동 | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | Optimal | Low | +| ZT-SY-42 | 시스템 환경에 따른 정책 관리 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | Traditional | Critical | +| ZT-SY-43 | 시스템 환경에 따른 정책 관리 | 수동으로 보안 정책을 유지/관리하고 있는가? | Traditional | Critical | +| ZT-SY-44 | 시스템 환경에 따른 정책 관리 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | Initial | High | +| ZT-SY-45 | 시스템 환경에 따른 정책 관리 | 정책이 자동으로 적용되는가? | Initial | High | +| ZT-SY-46 | 시스템 환경에 따른 정책 관리 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | Advanced | Medium | +| ZT-SY-47 | 시스템 환경에 따른 정책 관리 | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | Advanced | Medium | +| ZT-SY-48 | 시스템 환경에 따른 정책 관리 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | Optimal | Low | +| ZT-SY-49 | 시스템 환경에 따른 정책 관리 | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | Optimal | Low | + +### SY Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 접근통제 | 수동 권한 부여, RBAC | 중앙 집중 권한, 실시간 부여, 자동 반영 | ABAC, 동적 실시간 권한 | 실시간 분석/조정, 신뢰도 재산정, 위험 분석 기반 | +| PAM | PAM 시스템/정책 구축 | 모니터링/제어, 자동 승인 | 비정상 활동 탐지 | AI 기반 위협 탐지/대응 | +| 자격 증명 관리 | 수동 관리, 패스워드 의존 | 중앙 자동화, MFA | 생체 인증, 고도화, 무결성, AI 분석 | 실시간 차단/정책 조정, 자율 운영 | +| 네트워크 세분화 및 그룹 간 이동 | 통제 미흡, 경계형 모델 | 중요도 기반 분리, 이동 제어 | 워크로드별 세분화, 강력한 접근통제, 실시간 검사 | 실시간 분석/제어, 재인증 없는 이동, 자동 정책 | +| 시스템 환경에 따른 정책 관리 | 온프레미스 보안 정책, 수동 관리 | 클라우드 정책, 자동 적용 | 하이브리드 실시간 조정, 동적 변경 | 자율 정책, 완전 자동화 | + +--- + +## Total: 103 Items (NW: 54 + SY: 49) diff --git a/skills/kesekit-guide/templates/zero-trust/ot-environment.md b/skills/kesekit-guide/templates/zero-trust/ot-environment.md new file mode 100644 index 0000000..0331c34 --- /dev/null +++ b/skills/kesekit-guide/templates/zero-trust/ot-environment.md @@ -0,0 +1,51 @@ +# OT/ICS Zero Trust Environment Checklist + +> Zero Trust Maturity Assessment — OT/ICS (Operational Technology / Industrial Control Systems) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), IEC 62443, NIST SP 800-82 + +## OT/ICS Zero Trust Considerations + +OT/ICS environments require special Zero Trust deployment strategies due to: +- Legacy systems that cannot support modern authentication +- Real-time operational requirements (latency sensitivity) +- Safety-critical functions that must not be disrupted +- Air-gapped or semi-isolated network architectures +- Long equipment lifecycles (15-30 years) + +## OT-ZT Assessment Items + +| ID | Category | Verification | Maturity | Severity | +|----|----------|-------------|----------|----------| +| OT-ZT-01 | Network Segmentation | OT 네트워크와 IT 네트워크가 물리적/논리적으로 분리되어 있는가? | Traditional | Critical | +| OT-ZT-02 | Network Segmentation | DMZ를 통한 OT-IT 간 데이터 교환이 통제되고 있는가? | Traditional | Critical | +| OT-ZT-03 | Network Segmentation | Purdue Model 또는 IEC 62443 zone/conduit 기반 세그멘테이션이 적용되어 있는가? | Initial | High | +| OT-ZT-04 | Network Segmentation | 마이크로 세그멘테이션이 OT 환경 내부에 적용되어 있는가? | Advanced | Medium | +| OT-ZT-05 | Network Segmentation | SDN 기반 동적 세그멘테이션이 OT 환경에 적용 가능한가? | Optimal | Low | +| OT-ZT-06 | Identity & Access | OT 시스템 접근에 대한 사용자 인증이 수행되는가? | Traditional | Critical | +| OT-ZT-07 | Identity & Access | OT 전용 계정 관리 및 최소 권한 원칙이 적용되어 있는가? | Initial | High | +| OT-ZT-08 | Identity & Access | OT 환경에서 MFA가 적용되어 있는가 (물리적 토큰 포함)? | Initial | High | +| OT-ZT-09 | Identity & Access | OT 원격 접속에 대한 별도 인증 및 모니터링이 수행되는가? | Advanced | Medium | +| OT-ZT-10 | Identity & Access | 비정상적인 OT 접근 시도에 대한 실시간 탐지 및 대응이 가능한가? | Optimal | Low | +| OT-ZT-11 | Device Management | OT 자산 인벤토리가 문서화되어 있는가? | Traditional | Critical | +| OT-ZT-12 | Device Management | OT 디바이스 식별 및 분류 체계가 구축되어 있는가? | Initial | High | +| OT-ZT-13 | Device Management | OT 디바이스 보안 상태 자동 모니터링이 가능한가? | Advanced | Medium | +| OT-ZT-14 | Device Management | 레거시 OT 장비에 대한 보안 래퍼/프록시가 적용되어 있는가? | Advanced | Medium | +| OT-ZT-15 | Device Management | AI 기반 OT 자산 관리 및 이상 탐지가 가능한가? | Optimal | Low | +| OT-ZT-16 | Communication Security | OT 프로토콜(Modbus, OPC UA, DNP3 등) 트래픽이 모니터링되는가? | Traditional | Critical | +| OT-ZT-17 | Communication Security | OT 통신에 대한 암호화가 적용되어 있는가 (가능한 경우)? | Initial | High | +| OT-ZT-18 | Communication Security | OT 프로토콜 이상 탐지(DPI) 시스템이 도입되어 있는가? | Advanced | Medium | +| OT-ZT-19 | Communication Security | OT 환경 전용 위협 인텔리전스가 적용되어 있는가? | Optimal | Low | +| OT-ZT-20 | Safety & Availability | ZT 정책 적용 시 안전 기능(Safety Function)에 영향이 없는지 검증되었는가? | Traditional | Critical | +| OT-ZT-21 | Safety & Availability | ZT 정책 실패 시 fail-open/fail-safe 동작이 정의되어 있는가? | Initial | High | +| OT-ZT-22 | Safety & Availability | ZT 구성 변경에 대한 OT 영향도 분석 프로세스가 수립되어 있는가? | Advanced | Medium | +| OT-ZT-23 | Monitoring & Response | OT 환경 전용 SOC/보안 모니터링 체계가 수립되어 있는가? | Initial | High | +| OT-ZT-24 | Monitoring & Response | IT-OT 통합 보안 이벤트 분석이 가능한가? | Advanced | Medium | +| OT-ZT-25 | Monitoring & Response | OT 환경에 대한 자동화된 인시던트 대응이 가능한가? | Optimal | Low | + +## Deployment Strategy for OT + +1. **Phase 1 — Visibility**: Asset discovery, traffic mapping, baseline establishment +2. **Phase 2 — Segmentation**: IT-OT separation, zone/conduit implementation +3. **Phase 3 — Access Control**: Identity-based access, MFA for remote access +4. **Phase 4 — Monitoring**: Continuous monitoring, anomaly detection +5. **Phase 5 — Automation**: Automated response (with safety validation) diff --git a/skills/kesekit-guide/templates/zero-trust/overview.md b/skills/kesekit-guide/templates/zero-trust/overview.md new file mode 100644 index 0000000..0bdd288 --- /dev/null +++ b/skills/kesekit-guide/templates/zero-trust/overview.md @@ -0,0 +1,69 @@ +# Zero Trust Overview + +> Zero Trust Maturity Assessment — Overview & Assessment Guide +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), NIST SP 800-207, CISA ZT Maturity Model + +## Zero Trust Principles + +- **Never Trust, Always Verify**: Every access request must be authenticated and authorized regardless of network location +- **Assume Breach**: Minimize blast radius through microsegmentation and least-privilege access +- **Verify Explicitly**: Use all available data points (identity, location, device health, service/workload, data classification, anomalies) + +## 8 Core Elements + +| # | Element | Code | Items | +|---|---------|------|:-----:| +| 1 | Identity (식별자 및 신원) | ID | 53 | +| 2 | Device (디바이스 및 엔드포인트) | DV | ~50 | +| 3 | Network (네트워크) | NW | 54 | +| 4 | System (시스템) | SY | ~45 | +| 5 | Application (애플리케이션 및 워크로드) | AP | 60 | +| 6 | Data (데이터) | DA | ~50 | +| 7 | Visibility (가시성 및 분석) | VA | 43 | +| 8 | Automation (자동화 및 오케스트레이션) | AU | ~41 | + +**Total: ~396 items across 4 maturity levels** + +## 4 Maturity Levels + +| Level | Description | Target | +|-------|-------------|--------| +| **Traditional** | Perimeter-based security, manual processes | Baseline awareness | +| **Initial** | Some ZT controls adopted, partial automation | Early adopters | +| **Advanced** | Centralized management, context-aware policies, AI-assisted | Mature organizations | +| **Optimal** | Fully automated, real-time adaptive, AI-driven orchestration | Industry leaders | + +## Assessment Flow + +1. Determine target maturity level based on organizational goals +2. Select relevant core elements based on system context +3. Assess each item at or below the target maturity level +4. Items above target maturity level are informational (not scored) +5. Generate gap analysis comparing current state vs. target + +## Template Files + +| Topic | File | +|-------|------| +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | + +## Reference Files + +| Topic | File | +|-------|------| +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +## Judgment Criteria + +| Judgment | Description | +|----------|-------------| +| Pass (양호) | ZT control properly implemented at target maturity level | +| Partial (부분이행) | Control partially implemented, improvement needed | +| Fail (취약) | Control not implemented or significantly below target | +| N/A (해당없음) | Not applicable to the environment | diff --git a/skills/kesekit-guide/templates/zero-trust/visibility-automation.md b/skills/kesekit-guide/templates/zero-trust/visibility-automation.md new file mode 100644 index 0000000..7dca723 --- /dev/null +++ b/skills/kesekit-guide/templates/zero-trust/visibility-automation.md @@ -0,0 +1,128 @@ +# Visibility & Automation Checklist + +> Zero Trust Maturity Assessment — Visibility (VA) & Automation (AU) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## VA — 가시성 및 분석 (Visibility) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-VA-01 | 모든 관련 활동 기록 | 로그 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-VA-02 | 모든 관련 활동 기록 | 로그 데이터가 특정한 시스템에서만 수집되는가? | Traditional | Critical | +| ZT-VA-03 | 모든 관련 활동 기록 | 다양한 시스템에서 자동으로 로그를 수집하는가? | Initial | High | +| ZT-VA-04 | 모든 관련 활동 기록 | 로그 수집 및 관리가 자동화 되었는가? | Initial | High | +| ZT-VA-05 | 모든 관련 활동 기록 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-VA-06 | 모든 관련 활동 기록 | 로그 기록의 무결성을 보장하는가? | Advanced | Medium | +| ZT-VA-07 | 모든 관련 활동 기록 | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | Advanced | Medium | +| ZT-VA-08 | 모든 관련 활동 기록 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | Optimal | Low | +| ZT-VA-09 | 모든 관련 활동 기록 | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | Optimal | Low | +| ZT-VA-10 | 모든 관련 활동 기록 | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | Optimal | Low | +| ZT-VA-11 | 중앙집중적 보안 정보 및 이벤트 관리 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | Traditional | Critical | +| ZT-VA-12 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템이 도입되었는가? | Initial | High | +| ZT-VA-13 | 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 보안 관리 체계가 구축되었는가? | Initial | High | +| ZT-VA-14 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | Advanced | Medium | +| ZT-VA-15 | 중앙집중적 보안 정보 및 이벤트 관리 | AI 기반으로 보안 이벤트를 분석하는가? | Optimal | Low | +| ZT-VA-16 | 중앙집중적 보안 정보 및 이벤트 관리 | 비정상적인 활동에 대하여 자동 대응이 가능한가? | Optimal | Low | +| ZT-VA-17 | 보안 위협 분석 | 보안 로그 및 데이터를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-18 | 보안 위협 분석 | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-19 | 보안 위협 분석 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | Initial | High | +| ZT-VA-20 | 보안 위협 분석 | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | Initial | High | +| ZT-VA-21 | 보안 위협 분석 | 자동화된 보안 위협 분석 도구를 도입하였는가? | Advanced | Medium | +| ZT-VA-22 | 보안 위협 분석 | 실시간 보안 위협 탐지가 가능한가? | Advanced | Medium | +| ZT-VA-23 | 보안 위협 분석 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | Optimal | Low | +| ZT-VA-24 | 사용자 및 기기 동작 분석 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | Traditional | Critical | +| ZT-VA-25 | 사용자 및 기기 동작 분석 | 비정상 행동을 수동으로 탐지하는가? | Traditional | Critical | +| ZT-VA-26 | 사용자 및 기기 동작 분석 | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | Traditional | Critical | +| ZT-VA-27 | 사용자 및 기기 동작 분석 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | Initial | High | +| ZT-VA-28 | 사용자 및 기기 동작 분석 | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | Initial | High | +| ZT-VA-29 | 사용자 및 기기 동작 분석 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | Advanced | Medium | +| ZT-VA-30 | 사용자 및 기기 동작 분석 | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | Advanced | Medium | +| ZT-VA-31 | 사용자 및 기기 동작 분석 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | Optimal | Low | +| ZT-VA-32 | 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-33 | 위협 인텔리전스 통합 | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | Traditional | Critical | +| ZT-VA-34 | 위협 인텔리전스 통합 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | Initial | High | +| ZT-VA-35 | 위협 인텔리전스 통합 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | Advanced | Medium | +| ZT-VA-36 | 위협 인텔리전스 통합 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | Optimal | Low | +| ZT-VA-37 | 자동화된 동적 정책 | 보안 정책을 수동으로 관리하는가? | Traditional | Critical | +| ZT-VA-38 | 자동화된 동적 정책 | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | Traditional | Critical | +| ZT-VA-39 | 자동화된 동적 정책 | 자동화된 정책 관리 시스템을 도입하였는가? | Initial | High | +| ZT-VA-40 | 자동화된 동적 정책 | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | Initial | High | +| ZT-VA-41 | 자동화된 동적 정책 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | Advanced | Medium | +| ZT-VA-42 | 자동화된 동적 정책 | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | Advanced | Medium | +| ZT-VA-43 | 자동화된 동적 정책 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | Optimal | Low | + +### VA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 모든 관련 활동 기록 | 수동 로그, 특정 시스템 수집 | 자동 로그 수집, 관리 자동화 | 실시간 탐지, 무결성, 예측 분석 | 자율 보안, 정규화, 자동 정책 조정 | +| 중앙집중적 보안 정보/이벤트 관리 | 수동 분석 | SIEM 도입, 중앙 관리 | 보안 도구 연동 종합 분석 | AI 분석, 자동 대응 | +| 보안 위협 분석 | 수동 로그/CVE 수집 | 평가 기준, 자동 경고 | 자동화 분석, 실시간 탐지 | AI 예측 분석 | +| 사용자/기기 동작 분석 | 활동 데이터 수집, 수동 탐지, 패턴 기록 | 자동 분석 도구 도입 | 행동 분석 탐지, AI 실시간 대응 | 자동 정책 조정, 최소 권한 | +| 위협 인텔리전스 통합 | 수동 수집, 수동 연동 | 자동 통합 도구 | 내부 시스템 통합 | AI 기반 시스템 | +| 자동화된 동적 정책 | 수동 관리, 수동 대응 | 자동 정책 관리, 자동 변경 | 실시간 조정, 위협 연계 | AI 자율 정책 조정 | + +--- + +## AU — 자동화 및 통합 (Automation) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AU-01 | 정책 통합 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | Traditional | Critical | +| ZT-AU-02 | 정책 통합 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-AU-03 | 정책 통합 | 정책 변경이 자동으로 이루어지는가? | Initial | High | +| ZT-AU-04 | 정책 통합 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | Advanced | Medium | +| ZT-AU-05 | 정책 통합 | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | Advanced | Medium | +| ZT-AU-06 | 정책 통합 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-07 | 중요 프로세스 자동화 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | Traditional | Critical | +| ZT-AU-08 | 중요 프로세스 자동화 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | Initial | High | +| ZT-AU-09 | 중요 프로세스 자동화 | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | Initial | High | +| ZT-AU-10 | 중요 프로세스 자동화 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | Advanced | Medium | +| ZT-AU-11 | 중요 프로세스 자동화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-12 | 인공지능 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-13 | 인공지능 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | Initial | High | +| ZT-AU-14 | 인공지능 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | Advanced | Medium | +| ZT-AU-15 | 인공지능 | AI가 모든 보안 시스템에 완전히 통합되었는가? | Optimal | Low | +| ZT-AU-16 | 인공지능 | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | Optimal | Low | +| ZT-AU-17 | 보안 통합, 자동화 및 대응 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | Traditional | Critical | +| ZT-AU-18 | 보안 통합, 자동화 및 대응 | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | Traditional | Critical | +| ZT-AU-19 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 도입하였는가? | Initial | High | +| ZT-AU-20 | 보안 통합, 자동화 및 대응 | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | Initial | High | +| ZT-AU-21 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | Advanced | Medium | +| ZT-AU-22 | 보안 통합, 자동화 및 대응 | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | Advanced | Medium | +| ZT-AU-23 | 보안 통합, 자동화 및 대응 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | Optimal | Low | +| ZT-AU-24 | 보안 통합, 자동화 및 대응 | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | Optimal | Low | +| ZT-AU-25 | 데이터 교환 표준화 | 수집된 데이터가 상이한 형식으로 저장되는가? | Traditional | Critical | +| ZT-AU-26 | 데이터 교환 표준화 | 데이터 교환이 비효율적으로 이루어지는가? | Traditional | Critical | +| ZT-AU-27 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-28 | 데이터 교환 표준화 | 데이터 교환 표준을 도입하였는가? | Initial | High | +| ZT-AU-29 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 자동화되었는가? | Initial | High | +| ZT-AU-30 | 데이터 교환 표준화 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | Advanced | Medium | +| ZT-AU-31 | 데이터 교환 표준화 | 여러 보안 도구 간의 상호 운용성이 제공되는가? | Advanced | Medium | +| ZT-AU-32 | 데이터 교환 표준화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | Optimal | Low | +| ZT-AU-33 | 데이터 교환 표준화 | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | Optimal | Low | +| ZT-AU-34 | 데이터 교환 표준화 | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | Optimal | Low | +| ZT-AU-35 | 보안 운영 조정 및 사고 대응 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | Traditional | Critical | +| ZT-AU-36 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 절차가 정형화되어 있지 않는가? | Traditional | Critical | +| ZT-AU-37 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | Initial | High | +| ZT-AU-38 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | Initial | High | +| ZT-AU-39 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | Advanced | Medium | +| ZT-AU-40 | 보안 운영 조정 및 사고 대응 | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | Advanced | Medium | +| ZT-AU-41 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | Optimal | Low | +| ZT-AU-42 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | Optimal | Low | +| ZT-AU-43 | 보안 운영 조정 및 사고 대응 | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | Optimal | Low | + +### AU Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 정책 통합 | 수동 시스템별 변경 | 중앙 관리, 자동 변경 | 실시간 동적 조정, 즉각 수정 | AI 자율 정책 조정 | +| 중요 프로세스 자동화 | 수동 절차 의존 | 자동화 도구, 백업/장애 대응 자동화 | 보안 사고 자동 대응 | 실시간 최적화, 무중단 조정 | +| 인공지능 | 수동 수집/분석/대응 | 기본 AI 도구, 패턴 식별 | AI 고도화, 실시간 탐지/대응 | 완전 통합, 자율 감지/대응/조정 | +| 보안 통합/자동화/대응 | 독립 운영, 수동 대응 | SOAR 도입, 중앙 대응 | SOAR 고도화, 실시간 통합 | 중앙 자동 처리, 자율 통합 | +| 데이터 교환 표준화 | 상이한 형식, 비효율적, 수동 교환 | 표준 도입, 교환 자동화 | 외부 공유, 상호 운용성 | 자율 관리, 일관된 형식, 실시간 교환 | +| 보안 운영 조정/사고 대응 | 수동 소통, 비정형 절차 | 대응 계획, 자동 경고 | 자동 대응, 실시간 조율, 자동 보고 | 사전 예측, 완전 자동화, 실시간 협력 | + +--- + +## Total: 86 Items (VA: 43 + AU: 43) diff --git a/skills/kesekit-start/SKILL.md b/skills/kesekit-start/SKILL.md new file mode 100644 index 0000000..5ef24c5 --- /dev/null +++ b/skills/kesekit-start/SKILL.md @@ -0,0 +1,160 @@ +--- +name: kesekit-start +description: Run a security vulnerability assessment based on KISA guidelines. Supports CII (560+ items), AI Security Guide, Robot Security (103 items), Space Security (satellite/GSaaS/supply chain, 12 domains, 53 items), and Zero Trust (~396 items). Use when "security assessment", "vulnerability scan", "CII audit", "KISA assessment", "AI security", "robot security", "space security", "satellite security", "GSaaS security", "zero trust", "ZTA", "ZTNA". +--- + +# KESE Security Vulnerability Assessment + +Perform comprehensive security vulnerability assessment based on KISA guidelines. Automatically selects the appropriate guideline based on user context. + +## Guideline Selection + +| # | Guideline | Description | Items | +|---|-----------|-------------|:-----:| +| 1 | **CII (Critical Information Infrastructure)** | Technical(424)+Administrative(127)+Physical(18) | ~560 | +| 2 | **AI Security** | AI Developer/Service Provider/User requirements | ~54 | +| 3 | **Robot Security** | Industrial/Service/Medical robot checklist (11 categories) | ~103 | +| 4 | **Space Security** | Satellite/GSaaS/Supply chain checklist (12 domains) | 53 | +| 5 | **Secure Coding** | JavaScript/Python secure coding (7 categories, 46 CWE) | 46 | +| 6 | **Zero Trust** | Zero Trust maturity assessment (8 elements, 4 maturity levels) | ~396 | + +### Auto-detection +- Servers, networks, databases, web services, firewalls → **CII** +- AI models, LLM, generative AI, machine learning, prompts → **AI Security** +- Robots, industrial robots, service robots, medical robots, ROS/ROS2, PLC-linked robot systems → **Robot Security** +- Satellites, ground stations, GSaaS, space systems, GNSS, VSAT, LEO constellation, space supply chain → **Space Security** +- JavaScript, Python, web application code, secure coding, CWE, OWASP → **Secure Coding** +- Zero Trust, ZTA, ZTNA, 제로트러스트, 마이크로세그멘테이션, microsegmentation, SDP, SASE, PEP/PDP, never trust always verify → **Zero Trust** + +--- + +## CII Branch + +Read the appropriate reference file from `templates/cii/` based on the target system. + +| System | Reference File | Items | +|--------|---------------|:-----:| +| Unix/Linux | `templates/cii/unix.md` | 67 | +| Windows Server | `templates/cii/windows.md` | 64 | +| Web Service | `templates/cii/web-service.md` | 26 | +| Security Equipment | `templates/cii/security-equip.md` | 23 | +| Network Equipment | `templates/cii/network.md` | 38 | +| Control System | `templates/cii/control-system.md` | 46 | +| PC | `templates/cii/pc.md` | 18 | +| DBMS | `templates/cii/database.md` | 26 | +| Mobile | `templates/cii/mobile.md` | 4 | +| Web Application | `templates/cii/webapp.md` | 21 | +| Virtualization | `templates/cii/virtualization.md` | 25 | +| Cloud | `templates/cii/cloud.md` | 19 | +| Administrative | `templates/cii/admin.md` | 127 | +| Physical | `templates/cii/physical.md` | 18 | + +Check commands available in `scripts/cii/` directory. + +### Judgment Criteria +- **Pass**: Security settings properly applied +- **Partial**: Partially implemented, improvement needed +- **Fail**: Vulnerability exists +- **N/A**: Not applicable to the environment + +--- + +## AI Security Branch + +Read from `references/ai-security/` for overview and guidance, and `templates/ai-security/` for assessment checklists. + +| Target | Reference File | +|--------|---------------| +| Overview | `references/ai-security/overview.md` | +| AI Developer | `templates/ai-security/developer.md` | +| Service Provider | `references/ai-security/service-provider.md` | +| User | `references/ai-security/user-guide.md` | + +6-stage lifecycle: Planning → Data → Model Dev → Deploy → Monitoring → Decommission + +--- + +## Robot Security Branch + +Read from `templates/robot-security/` based on the target robot system or concern. + +| Topic | Reference File | +|-------|---------------| +| Overview | `templates/robot-security/overview.md` | +| SSDF / secure software development | `templates/robot-security/ssdf.md` | +| Supply chain security | `templates/robot-security/supply-chain.md` | +| IEC 62443 controls (IA, UC, SI, DP, DFR, ER, RA) | `templates/robot-security/iec62443.md` | +| Cyber resilience | `templates/robot-security/cyber-resilience.md` | +| Wireless security | `templates/robot-security/wireless.md` | + +Assess the relevant categories for industrial, service, or medical robots and generate a dedicated `reports/robot-security/` summary when robot security is selected. + +--- + +## Space Security Branch + +Read from `references/space-security/` for overview and supply chain guidance, and `templates/space-security/` for assessment checklists. + +| Topic | Reference File | +|-------|---------------| +| Overview | `references/space-security/overview.md` | +| Access Control & Authentication (AC, IA) | `templates/space-security/access-control.md` | +| System & Communication Security (SC, SI) | `templates/space-security/system-security.md` | +| Operations & Incident Response (SO, IR) | `templates/space-security/operations.md` | +| Governance, Personnel, Physical, Risk, Contingency (PS, PE, RA, SG, CP) | `templates/space-security/governance.md` | +| Supply Chain Management (SM) + Threat Scenarios | `references/space-security/supply-chain.md` | + +12 domains, 53 items. Standards: CMMC, K-RMF, NIS2, ISMS-P. Generate reports in `reports/space-security/`. + +--- + +## Secure Coding Branch + +Read from `references/secure-coding/` for overview and pseudo code patterns, and `templates/secure-coding/` for language-specific assessment. + +| Topic | Reference File | +|-------|---------------| +| Overview (7 categories, 49 CWE) | `references/secure-coding/overview.md` | +| Pseudo Code (46 items, language-agnostic) | `references/secure-coding/pseudocode.md` | +| JavaScript (Express.js, Node.js, Sequelize) | `templates/secure-coding/javascript.md` | +| Python (Django, Flask, SQLAlchemy) | `templates/secure-coding/python.md` | + +### Judgment Criteria +- **Pass**: Secure coding pattern applied correctly +- **Partial**: Pattern partially applied, improvement needed +- **Fail**: Vulnerable pattern detected (UNSAFE code present) +- **N/A**: Not applicable to the codebase + +--- + +## Zero Trust Branch + +Read from `references/zero-trust/` for overview and maturity model, and `templates/zero-trust/` for assessment checklists. + +| Topic | Reference File | +|-------|---------------| +| Overview | `templates/zero-trust/overview.md` | +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +8 core elements, ~396 items across 4 maturity levels. Standards: KISA ZT Guideline 2.0, NIST SP 800-207, CISA ZT Maturity Model. + +### Assessment Flow +1. Determine target maturity level (Traditional/Initial/Advanced/Optimal) +2. Select relevant core elements based on system context +3. If OT/ICS detected, also load `ot-environment.md` +4. Assess items at or below target maturity level +5. Generate gap analysis report + +--- + +## Notes +- Do not modify files during assessment — read-only +- Mark N/A for technologies not present +- Provide specific remediation for each finding diff --git a/skills/start/references/ai-security/overview.md b/skills/kesekit-start/references/ai-security/overview.md similarity index 100% rename from skills/start/references/ai-security/overview.md rename to skills/kesekit-start/references/ai-security/overview.md diff --git a/skills/start/references/ai-security/service-provider.md b/skills/kesekit-start/references/ai-security/service-provider.md similarity index 100% rename from skills/start/references/ai-security/service-provider.md rename to skills/kesekit-start/references/ai-security/service-provider.md diff --git a/skills/kesekit-start/references/ai-security/user-guide.md b/skills/kesekit-start/references/ai-security/user-guide.md new file mode 100644 index 0000000..808f78d --- /dev/null +++ b/skills/kesekit-start/references/ai-security/user-guide.md @@ -0,0 +1,58 @@ +# AI 이용자를 위한 보안 수칙 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +## 1. AI 이용자에게 발생할 수 있는 보안 위협 + +### 1.1 챗봇 통한 데이터 유출 +- AI 챗봇 서비스에서 다른 사용자의 개인정보가 노출되는 사례 +- 학습 데이터에 포함된 민감정보가 출력될 가능성 + +### 1.2 AI 음성비서 도청/해킹 +- 스마트 스피커에 레이저/음파를 이용한 명령 주입 +- 백그라운드 실행을 통한 비밀번호 탈취 유도 + +### 1.3 악성 링크/피싱 +- AI가 생성한 정교한 피싱 메시지 +- AI 서비스를 가장한 악성 사이트 + +### 1.4 딥페이크 +- AI 기반 얼굴/음성 합성을 이용한 사기 +- 가짜 영상/음성을 통한 신원 도용 + +### 1.5 안면인식 해킹 +- AI 안면인식 시스템의 우회 공격 +- 적대적 예제를 이용한 인증 우회 + +### 1.6 사이버 테러 +- AI를 악용한 대규모 자동화 공격 +- AI 기반 악성코드 생성 + +--- + +## 2. AI 서비스 이용 보안 수칙 + +### 수칙 1: 안전한 서비스 접근 +- **공식 경로로 다운로드**: 공식 앱 스토어, 공식 웹사이트에서만 AI 서비스 다운로드 +- **강력한 비밀번호 사용**: 영문+숫자+특수문자 조합, 8자 이상 +- **MFA 활성화**: 가능한 경우 다중 인증 설정 +- **공공 네트워크 주의**: 공공 Wi-Fi에서 AI 서비스 이용 시 VPN 사용 권장 +- **이용약관 확인**: AI 서비스의 데이터 수집/활용 정책 확인 + +### 수칙 2: 안전한 서비스 사용 +- **민감정보 입력 금지**: AI 챗봇에 비밀번호, 주민번호, 카드번호 등 입력하지 않기 +- **AI 출력 결과 검증**: AI가 생성한 정보의 정확성을 반드시 확인 +- **의심스러운 결과 신고**: 부적절하거나 유해한 AI 출력 발견 시 서비스 제공자에게 신고 +- **사용 후 데이터 삭제**: AI 서비스 이용 후 대화 기록 등 불필요한 데이터 삭제 +- **주기적 권한 검토**: AI 서비스에 부여한 권한(카메라, 마이크, 위치 등) 주기적 확인 + +### 수칙 3: 딥페이크 대응 +- 영상 통화 시 비정상적 움직임, 음질 이상 주의 +- 금전 요청이나 긴급 상황을 주장하는 연락은 별도 채널로 확인 + +### 수칙 4: AI 음성비서 보안 +- 사용하지 않을 때 마이크 비활성화 +- 음성 구매 기능 비밀번호 설정 +- 정기적으로 음성 기록 검토 및 삭제 + +--- diff --git a/skills/kesekit-start/references/secure-coding/overview.md b/skills/kesekit-start/references/secure-coding/overview.md new file mode 100644 index 0000000..dfb51ef --- /dev/null +++ b/skills/kesekit-start/references/secure-coding/overview.md @@ -0,0 +1,115 @@ +# Secure Coding Guide — Overview + +KISA 시큐어코딩 가이드 기반 보안약점 분류 체계입니다. 언어에 무관하게 적용 가능한 7개 카테고리, 49개 고유 CWE 매핑을 제공합니다. + +## 7 Categories + +| # | Category | Description | Items | CWE Count | +|---|----------|-------------|:-----:|:---------:| +| 1 | **Input Data Validation** | 외부 입력값의 검증 및 필터링 | 16 | 18 | +| 2 | **Security Features** | 인증, 암호화, 접근제어 등 보안 기능 | 16 | 16 | +| 3 | **Time and State** | 동시성, 경쟁조건, 무한루프 | 2 | 3 | +| 4 | **Error Handling** | 에러 메시지 노출, 예외 처리 | 3 | 3 | +| 5 | **Code Quality** | 널 포인터, 자원 해제, 역직렬화 | 3 | 3 | +| 6 | **Encapsulation** | 세션 데이터 보호, 디버그 코드, 접근 제어 | 4 | 5 | +| 7 | **API Misuse** | DNS 의존, 취약 API 사용 | 2 | 1 | +| | **Total** | | **46** | **49** | + +## CWE Mapping Table + +### 1. Input Data Validation (입력데이터 검증 및 표현) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | SQL Injection | CWE-89 | O | O | Critical | +| 2 | Code Injection | CWE-94, 95 | O | O | Critical | +| 3 | Path Traversal / Resource Injection | CWE-22, 99 | O | O | High | +| 4 | Cross-Site Scripting (XSS) | CWE-79 | O | O | Critical | +| 5 | OS Command Injection | CWE-78 | O | O | Critical | +| 6 | Unrestricted File Upload | CWE-434 | O | O | High | +| 7 | Open Redirect | CWE-601 | O | O | Medium | +| 8 | XML External Entity (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML Injection | CWE-643 | O | O | Medium | +| 10 | LDAP Injection | CWE-90 | O | O | Medium | +| 11 | Cross-Site Request Forgery (CSRF) | CWE-352 | O | O | High | +| 12 | Server-Side Request Forgery (SSRF) | CWE-918 | O | O | High | +| 13 | Untrusted Input for Security Decision | CWE-807 | O | O | Medium | +| 14 | HTTP Response Splitting | CWE-113 | - | O | Medium | +| 15 | Integer Overflow | CWE-190 | - | O | Medium | +| 16 | Format String Injection | CWE-134 | - | O | Medium | + +### 2. Security Features (보안기능) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Missing Authentication | CWE-306 | O | O | Critical | +| 2 | Improper Authorization | CWE-285 | O | O | Critical | +| 3 | Incorrect Permission Assignment | CWE-732 | O | O | High | +| 4 | Broken Crypto Algorithm | CWE-327 | O | O | High | +| 5 | Cleartext Storage / Transmission | CWE-312, 319 | O | O | High | +| 6 | Hard-coded Credentials | CWE-259, 321 | O | O | Critical | +| 7 | Inadequate Key Size | CWE-326 | O | O | Medium | +| 8 | Insufficient Randomness | CWE-330 | O | O | High | +| 9 | Weak Password Requirements | CWE-521 | O | O | Medium | +| 10 | Improper Signature Verification | CWE-347 | O | O | High | +| 11 | Improper Certificate Validation | CWE-295 | O | O | High | +| 12 | Sensitive Info in Persistent Cookie | CWE-539 | O | O | Medium | +| 13 | Sensitive Info in Comments | CWE-615 | O | O | Medium | +| 14 | Unsalted One-Way Hash | CWE-759 | O | O | Medium | +| 15 | Download Without Integrity Check | CWE-494 | O | O | Medium | +| 16 | Missing Brute Force Protection | CWE-307 | O | O | High | + +### 3. Time and State (시간 및 상태) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | TOCTOU Race Condition | CWE-367 | - | O | Medium | +| 2 | Infinite Loop / Uncontrolled Recursion | CWE-835, 674 | O | O | Medium | + +### 4. Error Handling (에러처리) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Error Message Information Exposure | CWE-209 | O | O | Medium | +| 2 | Error Condition Without Action | CWE-390 | O | O | Medium | +| 3 | Improper Exception Handling | CWE-754 | O | O | Medium | + +### 5. Code Quality (코드오류) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | NULL Pointer Dereference | CWE-476 | O | O | Medium | +| 2 | Improper Resource Shutdown | CWE-404 | O | O | Medium | +| 3 | Deserialization of Untrusted Data | CWE-502 | O | O | Critical | + +### 6. Encapsulation (캡슐화) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Data Leak Between Sessions | CWE-488, 543 | O | O | High | +| 2 | Active Debug Code | CWE-489 | O | O | Medium | +| 3 | Private Data Returned from Public Method | CWE-495 | O | O | Medium | +| 4 | Public Data Assigned to Private Field | CWE-496 | O | O | Medium | + +### 7. API Misuse (API 오용) + +| # | Weakness | CWE | JS | Py | Priority | +|---|----------|-----|:--:|:--:|:--------:| +| 1 | Reliance on DNS Lookup | CWE-350 | O | O | Medium | +| 2 | Use of Vulnerable API | - | O | O | Medium | + +## Language Coverage + +| Language | Source | Items | Frameworks | +|----------|--------|:-----:|------------| +| **Pseudo Code** | JS+Py merged | 46 | Language-agnostic patterns | +| JavaScript | ref-011 (KISA 2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | ref-012 (KISA 2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | + +## Priority Legend + +| Level | Description | Action | +|-------|-------------|--------| +| **Critical** | 원격 코드 실행, 인증 우회, 데이터 유출 가능 | 즉시 수정 | +| **High** | 중요 정보 노출, 권한 상승 가능 | 배포 전 수정 | +| **Medium** | 제한적 영향, 특정 조건에서 악용 가능 | 계획 수정 | diff --git a/skills/kesekit-start/references/secure-coding/pseudocode.md b/skills/kesekit-start/references/secure-coding/pseudocode.md new file mode 100644 index 0000000..290c379 --- /dev/null +++ b/skills/kesekit-start/references/secure-coding/pseudocode.md @@ -0,0 +1,931 @@ +# Secure Coding Guide — Pseudo Code + +KISA 시큐어코딩 가이드(JavaScript/Python) 기반, 언어에 무관한 범용 보안약점 패턴입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +> **WARNING** eval(), exec(), Function() 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +> **TIP** 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. 클라이언트와 서버 양쪽 모두 적용해야 합니다. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +> **TIP** SameSite 쿠키 속성을 Strict 또는 Lax로 설정하면 추가 방어가 됩니다. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +정수 연산 결과가 표현 범위를 초과하면 예상치 못한 동작이 발생합니다. + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 메모리 정보 유출이 가능합니다. + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +> **WARNING** Python의 pickle, JS의 node-serialize는 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +> **TIP** 사용 중인 라이브러리의 보안 권고(advisory)를 정기적으로 확인하세요. diff --git a/skills/kesekit-start/references/space-security/overview.md b/skills/kesekit-start/references/space-security/overview.md new file mode 100644 index 0000000..f31ab87 --- /dev/null +++ b/skills/kesekit-start/references/space-security/overview.md @@ -0,0 +1,82 @@ +# Space Security Overview + +> Source: KISA "Space Security Model" Part1 (2024.12) + Part2 (2025.12) + Explanation Guide (2025.12) + +## 1. Overview + +| Item | Content | +|------|---------| +| Publisher | KISA (Korea Internet & Security Agency) / MSIT | +| Target | Space industry operators, satellite service providers, GSaaS providers, supply chain participants | +| Scope | Space segment, Ground segment, Satellite service segment, GSaaS, Supply chain | +| Standards | CMMC, K-RMF, NIS2, ISMS-P, NIST IR 8401/8270, NIST CSF, CCSDS | + +## 2. Space Architecture Layers + +| Layer | Components | +|-------|-----------| +| Space Segment | GEO/MEO/LEO satellites, LEO constellations, satellite bus, payload, OBC | +| Ground Segment | Satellite control, payload data processing, antenna, satellite modem, mission control | +| GSaaS | Antenna zone, ground station-cloud zone, reservation/scheduling, API/DB servers | +| Satellite Services | Navigation (GNSS), Communication (VSAT/LEO), Broadcasting | +| Supply Chain | Satellite/launch vehicle manufacturers, ground station operators, satellite operators | + +## 3. Satellite Service Types + +| Service | Description | Key Components | +|---------|-------------|----------------| +| Navigation (GNSS) | Position/navigation/timing via GNSS satellites | Smart ships, autonomous vehicles, UAM | +| Communication | Satellite-based data/voice communication | VSAT, LEO mobile, LEO internet | +| Broadcasting | Satellite TV/radio relay | Broadcasting centers, set-top boxes | +| GSaaS | Ground Station as a Service (cloud-based shared infrastructure) | Shared antennas, cloud scheduling, API | + +## 4. Security Objectives + +| Objective | Description | +|-----------|-------------| +| Confidentiality | Prevent unauthorized access to satellite data and communications | +| Integrity | Prevent unauthorized modification of commands, telemetry, and operational data | +| Availability | Ensure continuous satellite service operation | +| Authentication | Verify identity of users, processes, devices, and satellites | +| Non-repudiation | Ensure accountability for satellite operations | +| Resilience | Maintain operations during and after security incidents | + +## 5. Threat Categories (3 Major Types) + +| Type | Description | Attack Vectors | +|------|-------------|----------------| +| Data Corruption | Unauthorized data modification/deletion | MITM, spoofing, malware, insider threat | +| Service Disruption | Service interruption/degradation | Jamming, DDoS, physical destruction, SW vulnerabilities | +| Information Leakage | Sensitive data exfiltration | Eavesdropping, sniffing, session hijacking, data theft | + +## 6. Checklist Structure (12 Domains, 53 Items) + +| # | Code | Domain | Items | Reference File | +|---|------|--------|:-----:|----------------| +| 1 | AC | Access Control | 12 | `access-control.md` | +| 2 | IA | Identification & Authentication | 2 | `access-control.md` | +| 3 | SC | System & Communication Security | 7 | `system-security.md` | +| 4 | SI | System & Information Integrity | 4 | `system-security.md` | +| 5 | SO | System/Service Operations Management | 9 | `operations.md` | +| 6 | IR | Incident Response | 2 | `operations.md` | +| 7 | PS | Personnel Security | 2 | `governance.md` | +| 8 | PE | Physical & Environmental Security | 3 | `governance.md` | +| 9 | RA | Risk Assessment & Security Evaluation | 2 | `governance.md` | +| 10 | SG | Security Governance | 4 | `governance.md` | +| 11 | CP | Contingency Planning | 2 | `governance.md` | +| 12 | SM | Supply Chain Management | 4 | `supply-chain.md` | + +## 7. Compliance Standards + +| Standard | Description | +|----------|-------------| +| CMMC | Cybersecurity Maturity Model Certification (US DoD, Level 1-3) | +| K-RMF | Korea Risk Management Framework | +| NIS2 | EU Network and Information Security Directive (includes space) | +| ISMS-P | Korea Information Security Management System | +| NIST IR 8401 | Satellite Ground Segment Cybersecurity | +| NIST IR 8270 | Commercial Satellite Operations Cybersecurity | +| NIST CSF | Cybersecurity Framework (Identify/Protect/Detect/Respond/Recover) | +| NIST SP 800-171 | CUI Protection (110 requirements) | +| CCSDS 352.0-B-2 | Space System Cryptographic Algorithm Recommendation | +| ENISA Space Threat Landscape | Space system threat analysis | diff --git a/skills/kesekit-start/references/space-security/supply-chain.md b/skills/kesekit-start/references/space-security/supply-chain.md new file mode 100644 index 0000000..2f66548 --- /dev/null +++ b/skills/kesekit-start/references/space-security/supply-chain.md @@ -0,0 +1,60 @@ +# Supply Chain Threat Scenarios + +> Domain: GSaaS/Supply Chain Threat Scenarios (with code-block illustrations) + +## Threat Scenarios (Supply Chain) + +### Scenario 1: Vulnerable Open-Source Causing Ground Station Failure +``` +Backdoor inserted into open-source community + -> Library used without verification + -> Backdoor enables system takeover + -> Ground station service disruption +``` + +### Scenario 2: Malicious Code in Payload Update File +``` +Developer PC compromised via phishing + -> Ransomware inserted into SW update + -> Update uploaded to satellite without verification + -> Payload malfunction +``` + +### Scenario 3: Tampered IDE Plugin Causing Satellite Malfunction +``` +Malicious code in IDE/CI-CD plugin + -> Firmware developed/loaded without verification + -> Component inspection skipped + -> Satellite bus malfunction +``` + +## GSaaS Threat Scenarios + +### Scenario 1: Satellite Control Hijacking via Weak Authentication +``` +Plaintext communication sniffing + -> IAM credential theft + -> Web shell upload + -> Ground station infiltration + -> Orbit control system takeover + -> Satellite hijacking +``` + +### Scenario 2: Data Tampering via Unauthorized Device Backdoor +``` +No media control + -> USB/single-board-computer backdoor + -> Internal network access + -> Satellite access credential collection + -> Data tampering malware injection +``` + +### Scenario 3: Physical Attack via Drone Disrupting Satellite Communication +``` +Plaintext communication sniffing + -> Antenna location identified + -> Drone with jamming device/explosives + -> Antenna-satellite communication disrupted +``` + +## Total: 4 Checklist Items + 6 Threat Scenarios diff --git a/skills/kesekit-start/references/zero-trust/maturity-model.md b/skills/kesekit-start/references/zero-trust/maturity-model.md new file mode 100644 index 0000000..2f3612d --- /dev/null +++ b/skills/kesekit-start/references/zero-trust/maturity-model.md @@ -0,0 +1,75 @@ +# Zero Trust Maturity Model + +> Reference: KISA 제로트러스트 가이드라인 2.0 (2024.12), CISA Zero Trust Maturity Model v2.0 +> Purpose: Detailed maturity level definitions and scoring guidance + +## Maturity Level Definitions + +### Traditional (전통적) +- Perimeter-based security model (castle-and-moat) +- Manual identity management and access control +- Static, rule-based security policies +- Limited visibility into internal traffic + +### Initial (기본) +- Beginning adoption of ZT principles +- Some automated identity management (SSO, basic MFA) +- Initial network segmentation beyond perimeter +- Centralized logging introduced + +### Advanced (고도화) +- Context-aware, dynamic access policies +- AI-assisted threat detection and response +- Comprehensive microsegmentation +- Real-time monitoring and analytics + +### Optimal (최적화) +- Fully automated, self-adaptive security +- AI-driven orchestration and response +- Predictive threat analysis +- Continuous verification at all layers +- Zero standing privileges + +## Scoring Framework + +### Per-Item Scoring + +| Score | Criteria | +|-------|----------| +| 3 | Fully implemented and operational | +| 2 | Partially implemented, gaps exist | +| 1 | Planned but not yet implemented | +| 0 | Not implemented, no plans | + +### Element Maturity Calculation + +``` +Element Score = (Sum of item scores for target level) / (Max possible score) x 100% + +Maturity Rating: + >= 80% → Mature (at or above target level) + 60-79% → Developing (approaching target level) + 40-59% → Emerging (significant gaps remain) + < 40% → Insufficient (major remediation needed) +``` + +## Cross-Element Dependencies + +| Element | Depends On | +|---------|-----------| +| Identity | — (foundation element) | +| Device | Identity | +| Network | Identity, Device | +| System | Network, Identity | +| Application | Identity, Device, Network | +| Data | Application, Identity | +| Visibility | All elements (observability layer) | +| Automation | Visibility (requires data to automate) | + +## Assessment Prioritization + +1. Start with **Identity** — foundation of all ZT controls +2. Then **Device** — ensure endpoint trust +3. Then **Network** — establish segmentation +4. Then **Application** and **Data** — protect workloads +5. Finally **Visibility** and **Automation** — enable continuous improvement diff --git a/skills/kesekit-start/references/zero-trust/ot-guide.md b/skills/kesekit-start/references/zero-trust/ot-guide.md new file mode 100644 index 0000000..92c0970 --- /dev/null +++ b/skills/kesekit-start/references/zero-trust/ot-guide.md @@ -0,0 +1,128 @@ +# OT/ICS Zero Trust Deployment Guide + +> Reference: KISA 제로트러스트 가이드라인 2.0, NIST SP 800-82 Rev.3, IEC 62443 +> Purpose: Guidance for deploying Zero Trust in OT/ICS environments + +## Why OT/ICS Requires Special ZT Consideration + +Traditional IT Zero Trust assumes: +- Modern endpoints capable of running agents +- Tolerance for additional authentication latency +- Ability to patch and update frequently +- Replaceable infrastructure components + +OT/ICS reality: +- Legacy devices (PLCs, RTUs, HMIs) with 15-30 year lifecycles +- Real-time control loops with microsecond-level latency requirements +- Safety-critical functions where authentication delays can cause harm +- Proprietary protocols (Modbus, DNP3, OPC UA, PROFINET) +- Air-gapped or semi-isolated networks + +## Phased Deployment Approach + +### Phase 1: Visibility & Asset Discovery + +**Objective**: Know what you have before you protect it. + +- Conduct complete OT asset inventory (active + passive discovery) +- Map communication flows between OT devices, IT systems, and external connections +- Identify Purdue Model levels for each asset +- Baseline normal traffic patterns and protocol usage +- Document legacy devices that cannot support modern security controls + +### Phase 2: IT-OT Boundary Segmentation + +**Objective**: Establish strong boundary between IT and OT networks. + +- Deploy industrial DMZ between IT and OT networks +- Implement data diodes or unidirectional gateways for critical flows +- Control all IT-OT data exchange through monitored jump servers +- Establish separate authentication domains for IT and OT + +### Phase 3: OT Internal Segmentation + +**Objective**: Apply zone/conduit model within OT network. + +- Implement IEC 62443 zones and conduits +- Segment by safety level (SL), function, and criticality +- Deploy OT-aware firewalls between zones +- Establish conduit-level access policies + +### Phase 4: Identity & Access Control + +**Objective**: Enforce identity-based access in OT environment. + +- Deploy MFA for all remote OT access (hardware tokens preferred) +- Implement privileged access management (PAM) for OT systems +- Apply least-privilege access for OT operators and engineers +- Manage shared/service accounts with rotation and monitoring +- Use jump servers with session recording for maintenance access + +### Phase 5: Continuous Monitoring + +**Objective**: Maintain visibility and detect anomalies. + +- Deploy OT-specific IDS/IPS (passive monitoring preferred initially) +- Implement Deep Packet Inspection (DPI) for OT protocols +- Integrate OT security events with enterprise SIEM +- Establish OT-specific SOC or extend IT SOC with OT expertise +- Monitor for known OT malware signatures (Triton, Industroyer, etc.) + +### Phase 6: Automated Response (with Safety Validation) + +**Objective**: Enable automated response without compromising safety. + +- Define automated response actions with safety impact assessment +- Implement fail-safe defaults (fail-open for safety-critical, fail-close for non-critical) +- Require human approval for actions affecting safety systems +- Test automated responses in simulation environment before deployment + +## OT-Specific ZT Architecture + +``` +┌────────────────────────────────────────────┐ +│ Enterprise Zone (IT) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ PDP │ │ IdP/ │ │ Enterprise │ │ +│ │ │ │ MFA │ │ SIEM │ │ +│ └────────┘ └────────┘ └────────────┘ │ +└──────────────────┬─────────────────────────┘ + │ Industrial DMZ +┌──────────────────┴─────────────────────────┐ +│ ┌────────────┐ ┌─────────┐ ┌────────┐ │ +│ │ Jump Server│ │ Historian│ │ PEP │ │ +│ │ (PAM) │ │ Mirror │ │ (OT) │ │ +│ └────────────┘ └─────────┘ └────────┘ │ +└──────────────────┬─────────────────────────┘ + │ +┌──────────────────┴─────────────────────────┐ +│ OT Zone (ICS/SCADA) │ +│ ┌────────┐ ┌────────┐ ┌────────────┐ │ +│ │ HMI │ │ PLC │ │ RTU │ │ +│ │ │ │ │ │ │ │ +│ └────────┘ └────────┘ └────────────┘ │ +│ ┌────────────────────────────────────┐ │ +│ │ OT IDS (Passive Monitoring) │ │ +│ └────────────────────────────────────┘ │ +└────────────────────────────────────────────┘ +``` + +## Legacy Device Handling + +For OT devices that cannot support modern ZT controls: + +1. **Security Wrapper/Proxy**: Place a ZT-capable proxy in front of legacy devices +2. **Network-Level Protection**: Use OT-aware firewalls to enforce access policies +3. **Monitoring**: Deploy passive DPI sensors for visibility without device modification +4. **Compensating Controls**: Document risk acceptance with compensating controls per IEC 62443 + +## Standards Mapping + +| OT-ZT Requirement | IEC 62443 | NIST SP 800-82 | KISA ZT 2.0 | +|-------------------|-----------|----------------|-------------| +| Network Segmentation | Zone/Conduit | Section 5.3 | NW Element | +| Access Control | FR 1 (AC) | Section 6.2 | ID Element | +| Device Management | FR 4 (DC) | Section 6.3 | DV Element | +| Communication Integrity | FR 3 (SI) | Section 5.4 | SY Element | +| Monitoring | FR 6 (RE) | Section 6.6 | VA Element | +| Incident Response | FR 7 (RA) | Section 6.7 | AU Element | diff --git a/skills/kesekit-start/references/zero-trust/overview.md b/skills/kesekit-start/references/zero-trust/overview.md new file mode 100644 index 0000000..38fe30d --- /dev/null +++ b/skills/kesekit-start/references/zero-trust/overview.md @@ -0,0 +1,72 @@ +# Zero Trust Architecture Reference + +> Reference: NIST SP 800-207, KISA 제로트러스트 가이드라인 2.0, CISA Zero Trust Maturity Model +> Purpose: Provide architectural context for Zero Trust maturity assessment + +## Zero Trust Architecture (ZTA) + +### Core Logical Components + +``` +┌─────────────────────────────────────────────────────────┐ +│ Control Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ PDP │ │ Policy │ │ Trust Algorithm │ │ +│ │ (Policy │ │ Engine │ │ (Risk Score + │ │ +│ │ Decision │ │ │ │ Context Analysis) │ │ +│ │ Point) │ │ │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ + │ + ┌────┴────┐ + │ PEP │ ← Policy Enforcement Point + │ │ + └────┬────┘ + │ +┌─────────────────────────────────────────────────────────┐ +│ Data Plane │ +│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ +│ │ Subject │ │ Resource │ │ Enterprise │ │ +│ │ (User/ │→→│ (App/ │ │ Resources │ │ +│ │ Device) │ │ Data) │ │ │ │ +│ └──────────┘ └──────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### Deployment Models (NIST SP 800-207) + +1. **SDP (Software Defined Perimeter)**: Agent/gateway-based model +2. **Micro-segmentation**: Network-centric approach +3. **Network Infrastructure + SDP**: Hybrid approach + +### KISA Zero Trust Guidelines 2.0 — 8 Elements + +| Element | Korean | Scope | +|---------|--------|-------| +| Identity | 식별자 및 신원 | User identity management, MFA, continuous authentication | +| Device | 디바이스 및 엔드포인트 | Device inventory, health checks, compliance | +| Network | 네트워크 | Macro/micro segmentation, SDN, encrypted traffic | +| System | 시스템 | System hardening, patching, configuration management | +| Application | 애플리케이션 및 워크로드 | Resource authorization, remote access, monitoring | +| Data | 데이터 | Classification, DLP, encryption, access control | +| Visibility | 가시성 및 분석 | Logging, SIEM, threat analysis | +| Automation | 자동화 및 오케스트레이션 | SOAR, automated response, policy orchestration | + +### Related Standards + +| Standard | Organization | Focus | +|----------|-------------|-------| +| NIST SP 800-207 | NIST | ZTA reference architecture | +| CISA Zero Trust Maturity Model | CISA | Federal ZT maturity assessment | +| 제로트러스트 가이드라인 2.0 | KISA | Korean ZT implementation guide | +| NIST SP 800-82 | NIST | OT/ICS security guide | +| IEC 62443 | IEC | Industrial automation security | + +### Key Concepts + +- **PDP (Policy Decision Point)**: Evaluates access requests against policy +- **PEP (Policy Enforcement Point)**: Enforces PDP decisions at the access point +- **SDP (Software Defined Perimeter)**: Creates dynamic, identity-based perimeters +- **SASE (Secure Access Service Edge)**: Cloud-delivered convergence of network and security +- **ZTNA (Zero Trust Network Access)**: Application-level access without VPN +- **Microsegmentation**: Granular network isolation at workload level diff --git a/skills/kesekit-start/scripts/cii/cloud.md b/skills/kesekit-start/scripts/cii/cloud.md new file mode 100644 index 0000000..b5fc514 --- /dev/null +++ b/skills/kesekit-start/scripts/cii/cloud.md @@ -0,0 +1,517 @@ +# 클라우드 점검 스크립트 (CA-01 ~ CA-19) + +## 1. 계정 관리 + +### CA-01: 사용자 계정 관리 +**점검:** +```bash +# AWS: IAM 사용자 목록 및 마지막 로그인 확인 +aws iam list-users --output table +aws iam generate-credential-report +aws iam get-credential-report --output text --query Content | base64 -d + +# Azure: 사용자 목록 확인 +az ad user list --output table +az ad user list --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}" --output table + +# GCP: IAM 사용자 확인 +gcloud iam service-accounts list +gcloud projects get-iam-policy --format=json +``` +**조치:** +```bash +# AWS: 불필요 계정 삭제/비활성화 +aws iam delete-user --user-name <사용자명> +aws iam delete-login-profile --user-name <사용자명> +# 액세스 키 비활성화 +aws iam update-access-key --user-name <사용자명> --access-key-id <키ID> --status Inactive + +# Azure: 불필요 계정 삭제/비활성화 +az ad user update --id <사용자ID> --account-enabled false +az ad user delete --id <사용자ID> + +# GCP: 서비스 계정 삭제/비활성화 +gcloud iam service-accounts disable <서비스계정이메일> +gcloud iam service-accounts delete <서비스계정이메일> +``` + +### CA-02: 사용자 정책 관리 +**점검:** +```bash +# AWS: 사용자별 정책 확인 +aws iam list-attached-user-policies --user-name <사용자명> +aws iam list-user-policies --user-name <사용자명> +aws iam list-groups-for-user --user-name <사용자명> + +# Azure: 역할 할당 확인 +az role assignment list --all --output table + +# GCP: IAM 정책 확인 +gcloud projects get-iam-policy +``` +**조치:** +```bash +# AWS: 불필요 권한 제거, 최소 권한 원칙 적용 +aws iam detach-user-policy --user-name <사용자명> --policy-arn <정책ARN> +# 그룹 기반 권한 관리 +aws iam create-group --group-name <그룹명> +aws iam attach-group-policy --group-name <그룹명> --policy-arn <정책ARN> +aws iam add-user-to-group --user-name <사용자명> --group-name <그룹명> + +# Azure: 역할 할당 변경 +az role assignment delete --assignee <사용자ID> --role <역할명> +az role assignment create --assignee <사용자ID> --role <역할명> --scope <범위> + +# GCP: IAM 바인딩 변경 +gcloud projects remove-iam-policy-binding --member=user:<이메일> --role=<역할> +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=<역할> +``` + +### CA-03: MFA(Multi-Factor Authentication) 설정 +**점검:** +```bash +# AWS: MFA 설정 여부 확인 +aws iam list-virtual-mfa-devices +aws iam list-mfa-devices --user-name <사용자명> +# MFA 미설정 사용자 확인 (credential report 활용) +aws iam get-credential-report --output text --query Content | base64 -d | grep -i "false" + +# Azure: MFA 상태 확인 +az ad user list --query "[].{UPN:userPrincipalName}" --output table +# Azure Portal: Azure AD > 보안 > MFA 에서 확인 + +# GCP: 2단계 인증은 Google Workspace Admin Console에서 확인 +``` +**조치:** +```bash +# AWS: 가상 MFA 디바이스 생성 및 활성화 +aws iam create-virtual-mfa-device --virtual-mfa-device-name <디바이스명> --outfile QRCode.png --bootstrap-method QRCodePNG +aws iam enable-mfa-device --user-name <사용자명> --serial-number --authentication-code1 <코드1> --authentication-code2 <코드2> + +# Azure: 조건부 액세스 정책으로 MFA 강제 (Azure Portal에서 설정) +# Azure AD > 보안 > 조건부 액세스 > 새 정책 > MFA 필수 + +# GCP: Google Workspace Admin Console에서 2단계 인증 강제 +``` + +### CA-04: 클라우드 계정 비밀번호 정책 관리 +**점검:** +```bash +# AWS: 비밀번호 정책 확인 +aws iam get-account-password-policy + +# Azure: 비밀번호 정책 확인 (Azure AD) +az ad group list --output table +# Azure Portal: Azure AD > 보안 > 인증 방법 > 비밀번호 보호 +``` +**조치:** +```bash +# AWS: 비밀번호 정책 설정 +aws iam update-account-password-policy \ + --minimum-password-length 8 \ + --require-symbols \ + --require-numbers \ + --require-uppercase-characters \ + --require-lowercase-characters \ + --max-password-age 90 \ + --password-reuse-prevention 24 \ + --allow-users-to-change-password + +# Azure: Azure AD Portal에서 비밀번호 정책 설정 +# Azure AD > 보안 > 인증 방법 > 비밀번호 보호 > 사용자 지정 금지 비밀번호 목록 +``` + +## 2. 권한 관리 + +### CA-05: 인스턴스 서비스 정책 관리 +**점검:** +```bash +# AWS: EC2 관련 IAM 정책 확인 +aws iam list-policies --query "Policies[?contains(PolicyName,'EC2')]" --output table +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,IamInstanceProfile]" --output table + +# Azure: VM 관련 역할 확인 +az vm list --output table +az role assignment list --query "[?contains(scope,'Microsoft.Compute')]" --output table + +# GCP: Compute Engine IAM 확인 +gcloud compute instances list +``` +**조치:** +```bash +# AWS: 인스턴스 관련 권한 최소화 +# 전용 IAM 역할 생성 후 인스턴스에 할당 +aws iam create-role --role-name <역할명> --assume-role-policy-document file://trust-policy.json +aws iam attach-role-policy --role-name <역할명> --policy-arn <정책ARN> +aws ec2 associate-iam-instance-profile --instance-id <인스턴스ID> --iam-instance-profile Name=<프로필명> + +# Azure: 리소스 그룹 단위 역할 할당 +az role assignment create --assignee <사용자ID> --role "Virtual Machine Contributor" --scope /subscriptions/<구독ID>/resourceGroups/<리소스그룹> + +# GCP: 커스텀 역할 적용 +gcloud projects add-iam-policy-binding --member=user:<이메일> --role=roles/compute.instanceAdmin +``` + +### CA-06: 네트워크 서비스 정책 관리 +**점검:** +```bash +# AWS: VPC/네트워크 관련 정책 확인 +aws ec2 describe-vpcs --output table +aws ec2 describe-security-groups --output table + +# Azure: NSG 확인 +az network nsg list --output table +az network nsg rule list --nsg-name --resource-group <리소스그룹> --output table + +# GCP: 방화벽 규칙 확인 +gcloud compute firewall-rules list +``` +**조치:** +```bash +# AWS: 보안 그룹 규칙 관리 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr <관리자IP>/32 + +# Azure: NSG 규칙 관리 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> +az network nsg rule create --nsg-name --resource-group --name <규칙명> --priority 100 --access Allow --source-address-prefixes --destination-port-ranges 22 + +# GCP: 방화벽 규칙 관리 +gcloud compute firewall-rules delete <규칙명> +gcloud compute firewall-rules create <규칙명> --allow tcp:22 --source-ranges=/32 +``` + +## 3. 가상 리소스 관리 + +### CA-07: VPC 네트워크 서브넷 관리 +**점검:** +```bash +# AWS: 서브넷 구성 확인 (Public/Private 분리 여부) +aws ec2 describe-subnets --output table +aws ec2 describe-route-tables --output table +aws ec2 describe-internet-gateways --output table +aws ec2 describe-nat-gateways --output table + +# Azure: 가상 네트워크 서브넷 확인 +az network vnet list --output table +az network vnet subnet list --vnet-name --resource-group --output table + +# GCP: 서브넷 확인 +gcloud compute networks subnets list +``` +**조치:** +```bash +# Public 서브넷: 인터넷 게이트웨이 할당 +# Private 서브넷: NAT 게이트웨이 할당 +# 서브넷별 네트워크 리소스 별도 설정 + +# AWS: NAT 게이트웨이 생성 (Private 서브넷용) +aws ec2 create-nat-gateway --subnet-id --allocation-id + +# Azure: Private 서브넷에 NSG 적용 +az network vnet subnet update --vnet-name --name <서브넷명> --resource-group --network-security-group +``` + +### CA-08: 가상 네트워크 리소스 관리 +**점검:** +```bash +# AWS: 공인 IP 할당 인스턴스 확인 +aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,PrivateIpAddress]" --output table + +# Azure: 공인 IP 확인 +az network public-ip list --output table +az vm list-ip-addresses --output table + +# GCP: 외부 IP 확인 +gcloud compute instances list --format="table(name,networkInterfaces[0].accessConfigs[0].natIP)" +``` +**조치:** +```bash +# AWS: 불필요 공인 IP 해제 +aws ec2 disassociate-address --association-id <연결ID> +aws ec2 release-address --allocation-id <할당ID> + +# Azure: 공인 IP 해제 +az network nic ip-config update --resource-group --nic-name --name --remove publicIpAddress + +# GCP: 외부 IP 제거 +gcloud compute instances delete-access-config <인스턴스명> --access-config-name "External NAT" +``` + +### CA-09: 접근 제어 설정 관리 +**점검:** +```bash +# AWS: 보안 그룹 규칙 확인 (0.0.0.0/0 허용 여부) +aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,Ingress:IpPermissions}" --output json +# 0.0.0.0/0 허용 규칙 필터링 +aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" --output table + +# Azure: NSG 규칙 중 Any 허용 확인 +az network nsg list --query "[].{Name:name,Rules:securityRules[?sourceAddressPrefix=='*']}" --output json + +# GCP: 0.0.0.0/0 허용 방화벽 규칙 확인 +gcloud compute firewall-rules list --filter="sourceRanges=0.0.0.0/0" +``` +**조치:** +```bash +# AWS: 불필요한 0.0.0.0/0 규칙 제거 +aws ec2 revoke-security-group-ingress --group-id --protocol tcp --port <포트> --cidr 0.0.0.0/0 + +# Azure: 불필요 규칙 삭제 +az network nsg rule delete --nsg-name --resource-group --name <규칙명> + +# GCP: 불필요 방화벽 규칙 삭제 +gcloud compute firewall-rules delete <규칙명> + +# 공통: 관리자 IP 또는 특정 IP에서만 접속 허용 +``` + +### CA-10: 스토리지 리소스 퍼블릭 접근 관리 +**점검:** +```bash +# AWS: S3 버킷 퍼블릭 접근 확인 +aws s3api get-bucket-acl --bucket <버킷명> +aws s3api get-public-access-block --bucket <버킷명> +aws s3api get-bucket-policy --bucket <버킷명> + +# Azure: 스토리지 계정 공개 접근 확인 +az storage account list --query "[].{Name:name,PublicAccess:allowBlobPublicAccess}" --output table + +# GCP: 버킷 IAM 확인 +gsutil iam get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 퍼블릭 접근 차단 +aws s3api put-public-access-block --bucket <버킷명> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true + +# Azure: 스토리지 공개 접근 비활성화 +az storage account update --name <스토리지명> --resource-group --allow-blob-public-access false + +# GCP: 버킷에서 allUsers/allAuthenticatedUsers 제거 +gsutil iam ch -d allUsers gs://<버킷명> +gsutil iam ch -d allAuthenticatedUsers gs://<버킷명> +``` + +## 4. 운영 관리 + +### CA-11: 관계형 데이터베이스 암호화 설정 +**점검:** +```bash +# AWS: RDS 암호화 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Encrypted:StorageEncrypted}" --output table + +# Azure: SQL DB 암호화 확인 +az sql db tde show --server <서버명> --database --resource-group + +# GCP: Cloud SQL 암호화 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.dataDiskEncryptionConfiguration)" +``` +**조치:** +```bash +# AWS: RDS 암호화 활성화 (생성 시 또는 스냅샷 복원) +aws rds create-db-instance --db-instance-identifier --storage-encrypted --kms-key-id ... + +# Azure: TDE 활성화 +az sql db tde set --server <서버명> --database --resource-group --status Enabled + +# GCP: 기본적으로 저장 데이터 암호화 적용됨 (CMEK 설정 가능) +``` + +### CA-12: 통신 구간 암호화 설정 +**점검:** +```bash +# AWS: ELB/ALB SSL 인증서 확인 +aws elbv2 describe-listeners --load-balancer-arn --query "Listeners[*].{Port:Port,Protocol:Protocol,Certs:Certificates}" --output table + +# Azure: Application Gateway SSL 확인 +az network application-gateway ssl-cert list --gateway-name <게이트웨이명> --resource-group + +# 공통: TLS 버전 확인 +openssl s_client -connect <호스트>:443 -tls1_2 +``` +**조치:** +```bash +# 공통 권고사항: +# 서버 원격 접근 시 VPN, SSH 사용 +# TLS v1.2 이상 (TLS v1.3 권장) 사용 +# 블록 암호: SEED, ARIA, AES (키 128bits 이상) +# 공개키 암호: RSA (키 2048bits 이상) +# 해시: SHA-2 이상 +``` + +### CA-13: 클라우드 서비스 사용자 계정 로깅 설정 +**점검:** +```bash +# AWS: CloudTrail 설정 확인 +aws cloudtrail describe-trails --output table +aws cloudtrail get-trail-status --name <트레일명> + +# Azure: Activity Log 확인 +az monitor activity-log list --offset 1h --output table + +# GCP: Cloud Audit Logs 확인 +gcloud logging read "logName:cloudaudit.googleapis.com" --limit 10 +``` +**조치:** +```bash +# AWS: CloudTrail 활성화 +aws cloudtrail create-trail --name <트레일명> --s3-bucket-name <버킷명> --is-multi-region-trail +aws cloudtrail start-logging --name <트레일명> + +# Azure: 진단 설정 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <리소스ID> --logs '[{"category":"AuditEvent","enabled":true}]' --storage-account <스토리지ID> + +# GCP: Audit Log 기본 활성화됨, 추가 설정 시 +gcloud projects get-iam-policy --format=json +``` + +### CA-14: 인스턴스 로깅 설정 +**점검:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 그룹 확인 +aws logs describe-log-groups --output table + +# Azure: VM 진단 설정 확인 +az vm diagnostics get-default-config + +# GCP: Ops Agent 설치 확인 +gcloud compute instances describe <인스턴스명> --format="value(metadata.items)" +``` +**조치:** +```bash +# AWS: CloudWatch 에이전트 설치 및 로그 전송 +aws ssm send-command --instance-ids <인스턴스ID> --document-name "AWS-ConfigureAWSPackage" --parameters '{"action":["Install"],"name":["AmazonCloudWatchAgent"]}' + +# Azure: VM 진단 확장 설치 +az vm diagnostics set --resource-group --vm-name --settings <설정JSON> + +# GCP: Ops Agent 설치 +gcloud compute ssh <인스턴스명> -- 'curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh && sudo bash add-google-cloud-ops-agent-repo.sh --also-install' +``` + +### CA-15: 관계형 데이터베이스 로깅 설정 +**점검:** +```bash +# AWS: RDS 로깅 파라미터 확인 +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,Logs:EnabledCloudwatchLogsExports}" --output table + +# Azure: SQL 감사 설정 확인 +az sql server audit-policy show --server <서버명> --resource-group + +# GCP: Cloud SQL 로그 플래그 확인 +gcloud sql instances describe <인스턴스명> --format="value(settings.databaseFlags)" +``` +**조치:** +```bash +# AWS: RDS 로그 내보내기 활성화 +aws rds modify-db-instance --db-instance-identifier --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}' + +# Azure: SQL 감사 활성화 +az sql server audit-policy update --server <서버명> --resource-group --state Enabled --storage-account <스토리지명> + +# GCP: Cloud SQL 감사 로그 활성화 +gcloud sql instances patch <인스턴스명> --database-flags=log_output=FILE,general_log=on,slow_query_log=on +``` + +### CA-16: 오브젝트 스토리지 버킷 로깅 설정 +**점검:** +```bash +# AWS: S3 서버 액세스 로깅 확인 +aws s3api get-bucket-logging --bucket <버킷명> + +# Azure: Blob Storage 진단 로그 확인 +az monitor diagnostic-settings list --resource <스토리지리소스ID> + +# GCP: 버킷 로깅 확인 +gsutil logging get gs://<버킷명> +``` +**조치:** +```bash +# AWS: S3 서버 액세스 로깅 활성화 +aws s3api put-bucket-logging --bucket <버킷명> --bucket-logging-status '{"LoggingEnabled":{"TargetBucket":"<로그버킷>","TargetPrefix":"logs/"}}' + +# Azure: Blob Storage 진단 로그 활성화 +az monitor diagnostic-settings create --name <설정명> --resource <스토리지리소스ID> --logs '[{"category":"StorageRead","enabled":true},{"category":"StorageWrite","enabled":true},{"category":"StorageDelete","enabled":true}]' + +# GCP: 버킷 로깅 활성화 +gsutil logging set on -b gs://<로그버킷> gs://<대상버킷> +``` + +### CA-17: 로그 보관 기간 설정 +**점검:** +```bash +# AWS: CloudWatch Logs 보관 기간 확인 +aws logs describe-log-groups --query "logGroups[*].{Name:logGroupName,Retention:retentionInDays}" --output table +# S3 수명 주기 정책 확인 +aws s3api get-bucket-lifecycle-configuration --bucket <버킷명> + +# Azure: 로그 보관 정책 확인 +az monitor diagnostic-settings list --resource <리소스ID> + +# GCP: 로그 버킷 보관 기간 확인 +gcloud logging buckets describe <버킷명> --location=global +``` +**조치:** +```bash +# AWS: CloudWatch Logs 보관 기간 설정 (예: 365일) +aws logs put-retention-policy --log-group-name <로그그룹명> --retention-in-days 365 + +# Azure: 진단 설정에서 보관 기간 설정 (일반적으로 Azure Portal에서 설정) + +# GCP: 로그 버킷 보관 기간 설정 +gcloud logging buckets update <버킷명> --location=global --retention-days=365 +``` + +### CA-18: 백업 사용 여부 +**점검:** +```bash +# AWS: 백업 설정 확인 +aws backup list-backup-plans --output table +aws rds describe-db-instances --query "DBInstances[*].{ID:DBInstanceIdentifier,BackupRetention:BackupRetentionPeriod}" --output table +aws ec2 describe-snapshots --owner-ids self --output table + +# Azure: 백업 항목 확인 +az backup item list --vault-name <볼트명> --resource-group --output table + +# GCP: 스냅샷 확인 +gcloud compute snapshots list +gcloud sql backups list --instance=<인스턴스명> +``` +**조치:** +```bash +# AWS: 자동 백업 설정 +aws backup create-backup-plan --backup-plan file://backup-plan.json +# RDS 백업 보관 기간 설정 +aws rds modify-db-instance --db-instance-identifier --backup-retention-period 7 + +# Azure: 백업 정책 설정 +az backup protection enable-for-vm --resource-group --vault-name <볼트명> --vm --policy-name <정책명> + +# GCP: 스냅샷 스케줄 생성 +gcloud compute resource-policies create snapshot-schedule <정책명> --region=<리전> --max-retention-days=14 --daily-schedule +``` + +### CA-19: 가상 리소스 이상징후 알림 설정 +**점검:** +```bash +# AWS: CloudWatch 알람 확인 +aws cloudwatch describe-alarms --output table + +# Azure: 경고 규칙 확인 +az monitor metrics alert list --output table + +# GCP: 알림 정책 확인 +gcloud alpha monitoring policies list +``` +**조치:** +```bash +# AWS: CloudWatch 알람 생성 (예: CPU 사용률) +aws cloudwatch put-metric-alarm --alarm-name "HighCPU" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions --dimensions Name=InstanceId,Value=<인스턴스ID> + +# Azure: 메트릭 경고 생성 +az monitor metrics alert create --name "HighCPU" --resource-group --scopes <리소스ID> --condition "avg Percentage CPU > 80" --action <액션그룹ID> + +# GCP: 알림 정책 생성 (gcloud 또는 Cloud Console에서 설정) +# Cloud Console > Monitoring > 알림 > 정책 만들기 > 조건 및 알림 채널(SMS, 이메일) 설정 +``` diff --git a/skills/kesekit-start/scripts/cii/database.md b/skills/kesekit-start/scripts/cii/database.md new file mode 100644 index 0000000..5abb7fb --- /dev/null +++ b/skills/kesekit-start/scripts/cii/database.md @@ -0,0 +1,649 @@ +# DBMS 점검 스크립트 (D-01 ~ D-26) + +## 1. 계정 관리 + +### D-01: 기본 계정의 비밀번호, 정책 등을 변경하여 사용 +**점검:** +```sql +-- Oracle: 기본 계정 사용 여부 및 정책 확인 +SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE account_status = 'OPEN'; + +-- MSSQL: sa 계정 확인 +SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa'; + +-- MySQL: root 계정 확인 +SELECT User, Host FROM mysql.user; +SHOW VARIABLES LIKE 'validate_password%'; + +-- PostgreSQL: 역할 확인 +SELECT rolname, rolsuper FROM pg_roles; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; + +-- Cubrid +SELECT name, password FROM db_user; +SELECT * FROM db_password; +``` +**조치:** +```sql +-- Oracle: 비밀번호 변경 / 잠금 +ALTER USER <기본계정명> IDENTIFIED BY <신규비밀번호>; +ALTER USER <기본계정명> ACCOUNT LOCK; + +-- MSSQL: sa 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; + +-- MySQL 5.7 +UPDATE user SET authentication_string = PASSWORD('신규비밀번호') WHERE User = 'root'; +FLUSH PRIVILEGES; +-- MySQL 8.0 +ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; +FLUSH PRIVILEGES; + +-- Altibase +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- Tibero +ALTER USER sys IDENTIFIED BY [신규비밀번호]; + +-- PostgreSQL +ALTER USER postgres WITH PASSWORD '신규비밀번호'; + +-- Cubrid +ALTER USER "사용자계정명" PASSWORD '신규비밀번호'; +``` + +### D-02: 불필요 계정 제거 또는 잠금설정 +**점검:** +```sql +-- Oracle +SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; + +-- MSSQL +SELECT name, is_disabled FROM sys.server_principals; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM all_users; +SELECT * FROM dba_users; + +-- PostgreSQL +SELECT * FROM pg_roles; +-- 또는 명령어: \du + +-- Cubrid +SELECT name, password FROM db_user; +``` +**조치:** +```sql +-- Oracle +DROP USER [삭제할 계정]; + +-- MSSQL +EXEC sp_droplogin '삭제할 계정'; + +-- MySQL +DROP USER '삭제할 계정'@'호스트명'; +FLUSH PRIVILEGES; + +-- Altibase / Tibero +DROP USER user_name CASCADE; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; + +-- Cubrid +DROP USER [삭제할 계정]; +``` + +### D-03: 비밀번호 사용 기간 및 복잡도 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES WHERE resource_name LIKE 'PASSWORD%'; + +-- MySQL +SHOW VARIABLES LIKE 'validate_password%'; +SHOW VARIABLES LIKE 'default_password_lifetime'; + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_users; +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle: 비밀번호 정책 설정 +ALTER PROFILE <프로파일명> LIMIT + FAILED_LOGIN_ATTEMPTS 3 + PASSWORD_LIFE_TIME 30 + PASSWORD_REUSE_TIME 30 + PASSWORD_VERIFY_FUNCTION verify_function + PASSWORD_GRACE_TIME 5; +ALTER USER <계정명> PROFILE <프로파일명>; + +-- MSSQL: 암호 만료 강제 적용 (SSMS GUI) +-- 보안 > 로그인 > 속성 > "암호 만료 강제 적용" 설정 +-- OS 암호 정책: [로컬 보안 정책] > [암호 정책] > 최대 암호 사용 기간: 60일 + +-- MySQL: 복잡도 정책 +INSTALL COMPONENT 'file://component_validate_password'; +SET GLOBAL validate_password.policy = 'MEDIUM'; +SET GLOBAL validate_password.length = 8; +SET GLOBAL validate_password.mixed_case_count = 1; +SET GLOBAL validate_password.number_count = 1; +SET GLOBAL validate_password.special_char_count = 1; +-- LifeTime 정책 +SET GLOBAL default_password_lifetime = 90; +ALTER USER '<계정명>'@'<호스트>' PASSWORD EXPIRE INTERVAL 91 DAY; + +-- Altibase +ALTER USER 계정명 LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIME 7); + +-- Tibero +CREATE PROFILE prof LIMIT + failed_login_attempts 3 + password_lock_time 1/1440 + password_life_time 90 + password_reuse_time unlimited + password_reuse_max 10 + password_grace_time 10 + password_verify_function verify_function; +``` + +### D-04: 관리자 권한을 필요한 계정에만 허용 +**점검:** +```sql +-- Oracle: SYSDBA 권한 점검 +SELECT username FROM v$pwfile_users WHERE username NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +) AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +-- Admin 부적합 계정 점검 +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ( + 'SYS','SYSTEM','AQ_ADMINISTRATOR_ROLE','DBA','DSYS','BACSYS','SCHEDULER_ADMIN','MSYS' +) AND admin_option = 'YES' AND grantee NOT IN ( + SELECT grantee FROM dba_role_privs WHERE granted_role='DBA' +); + +-- MySQL: SUPER 권한 확인 +SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER'; + +-- PostgreSQL +SELECT * FROM pg_user; +SELECT username, usesuper FROM pg_shadow; + +-- Cubrid: DBA 권한 사용자 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +REVOKE <권한> FROM <계정명>; +GRANT <권한> ON <테이블명> TO <계정명>; + +-- MSSQL: sysadmin 역할에서 삭제 +EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; + +-- MySQL: SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; + +-- PostgreSQL: 불필요 관리자 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; + +-- Cubrid: DBA 권한 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +``` + +### D-05: 비밀번호 재사용 제약 설정 +**점검:** +```sql +-- Oracle +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' + AND limit IN ('UNLIMITED', 'NULL'); +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' + AND limit IN ('UNLIMITED', 'NULL'); + +-- Altibase +SELECT * FROM system_.sys_users_; + +-- Tibero +SELECT * FROM dba_profiles; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; + +-- Altibase +ALTER USER [계정명] LIMIT (PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 10); + +-- Tibero +CREATE PROFILE prof LIMIT + password_reuse_time unlimited + password_reuse_max 10; +``` + +### D-06: DB 사용자 계정 개별 부여 +**점검:** +```sql +-- Oracle +SELECT username FROM dba_users ORDER BY username; + +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL +SELECT * FROM pg_shadow; + +-- Altibase +SELECT * FROM system_.sys_users_; +``` +**조치:** +```sql +-- Oracle: 공용 계정 삭제 후 개별 계정 생성 +DROP USER '공용계정'; +CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +GRANT connect, resource TO [계정명]; + +-- MSSQL +EXEC sp_droplogin '공용계정'; +CREATE LOGIN '생성계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성계정' FOR LOGIN '생성계정'; + +-- MySQL +DROP USER <계정명>@<호스트>; +CREATE USER '<계정명>'@'<호스트>' IDENTIFIED BY '비밀번호'; +GRANT SELECT, INSERT ON DB이름.테이블명 TO '<계정명>'@'<호스트>'; +FLUSH PRIVILEGES; + +-- PostgreSQL +DROP ROLE '삭제할 계정'; +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' <권한명>; +``` + +### D-07: root 권한으로 서비스 구동 제한 +**점검:** +```bash +# Oracle +ps -ef | grep pmon +ps -ef | grep tnslsnr + +# MySQL +ps -ef | grep mysqld +cat /etc/my.cnf | grep user + +# Altibase +ps -ef | grep altibase | grep -v grep +``` +**조치:** +```bash +# Oracle: oracle 계정으로 전환 후 구동 +su - oracle +lsnrctl start +sqlplus / as sysdba +startup + +# MySQL: my.cnf [mysqld] 섹션에 user 지정 +# vi /etc/my.cnf +# [mysqld] +# user = mysql + +# Altibase: 전용 계정으로 소유자 변경 +chown -R [계정명]:[그룹명] '[Altibase 디렉터리]' +``` + +### D-08: 안전한 암호화 알고리즘 사용 +**점검:** +```sql +-- Oracle: 암호화 알고리즘 확인 +SELECT * FROM v$parameter WHERE name LIKE '%crypto%'; + +-- MySQL +SHOW VARIABLES LIKE '%ssl%'; +``` +**조치:** +```sql +-- 안전한 암호화 알고리즘(AES-256, SHA-256 등) 사용 설정 +-- DBMS별 암호화 설정은 벤더 문서 참조 +``` + +### D-09: 로그인 실패 시 잠금정책 설정 +**점검:** +```sql +-- Oracle +SELECT profile, resource_name, limit FROM DBA_PROFILES + WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS'; + +-- MySQL +SHOW VARIABLES LIKE 'max_connect_errors'; +``` +**조치:** +```sql +-- Oracle +ALTER PROFILE <프로파일명> LIMIT FAILED_LOGIN_ATTEMPTS 5; + +-- MySQL +SET GLOBAL max_connect_errors = 5; +``` + +## 2. 접근 관리 + +### D-10: 원격에서 DB 서버 접속 제한 +**점검:** +```sql +-- Oracle: listener.ora에서 접근 IP 제한 확인 +-- MySQL +SELECT User, Host FROM mysql.user; + +-- PostgreSQL: pg_hba.conf 확인 +``` +**조치:** +```sql +-- MySQL: 원격 접속 제한 +-- 특정 IP에서만 접속 가능하도록 계정 생성 +CREATE USER '<계정명>'@'<허용IP>' IDENTIFIED BY '비밀번호'; +-- 모든 호스트 접근 가능 계정 삭제 +DROP USER '<계정명>'@'%'; +FLUSH PRIVILEGES; +``` +```bash +# Oracle: $ORACLE_HOME/network/admin/sqlnet.ora +# tcp.validnode_checking = YES +# tcp.invited_nodes = (허용IP1, 허용IP2) + +# PostgreSQL: pg_hba.conf에서 접근 IP 제한 +# host all all <허용IP>/32 md5 +``` + +### D-11: 시스템 테이블 접근 제한 +**점검:** +```sql +-- Oracle: DBA 이외 시스템 테이블 접근 권한 확인 +SELECT grantee, privilege, table_name FROM dba_tab_privs + WHERE table_name IN (SELECT table_name FROM dba_tables WHERE owner = 'SYS'); +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.<테이블명> FROM <계정명>; +``` + +### D-12: 리스너 비밀번호 설정 +**점검:** +```bash +# Oracle: listener.ora 파일 확인 +cat $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: 리스너 비밀번호 설정 +lsnrctl +LSNRCTL> set current_listener <리스너명> +LSNRCTL> change_password +# Old password: (빈칸) +# New password: <비밀번호> +LSNRCTL> save_config +``` + +### D-13: 불필요한 ODBC/OLE-DB 데이터 소스 제거 +**점검:** +```powershell +# Windows: ODBC 데이터 소스 확인 +Get-OdbcDsn +``` +**조치:** +```powershell +# Windows: 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType "System" +``` + +### D-14: 주요 파일 접근 권한 설정 +**점검:** +```bash +# Oracle +ls -la $ORACLE_HOME/dbs/*.ora +ls -la $ORACLE_HOME/network/admin/*.ora + +# MySQL +ls -la /etc/my.cnf +ls -la /var/lib/mysql/ + +# PostgreSQL +ls -la /var/lib/pgsql/data/pg_hba.conf +ls -la /var/lib/pgsql/data/postgresql.conf +``` +**조치:** +```bash +# Oracle: 640 이하 권한 설정 +chmod 640 $ORACLE_HOME/dbs/*.ora +chmod 640 $ORACLE_HOME/network/admin/*.ora +chown oracle:dba $ORACLE_HOME/dbs/*.ora + +# MySQL +chmod 640 /etc/my.cnf +chown mysql:mysql /etc/my.cnf + +# PostgreSQL +chmod 600 /var/lib/pgsql/data/pg_hba.conf +chown postgres:postgres /var/lib/pgsql/data/pg_hba.conf +``` + +### D-15: 리스너 로그 및 trace 파일 변경 제한 +**점검:** +```bash +# Oracle: listener.ora에서 ADMIN_RESTRICTIONS 확인 +grep ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora +``` +**조치:** +```bash +# Oracle: listener.ora에 추가 +# ADMIN_RESTRICTIONS_<리스너명> = ON +``` + +### D-16: Windows 인증 모드 사용 +**점검:** +```sql +-- MSSQL: 인증 모드 확인 +SELECT SERVERPROPERTY('IsIntegratedSecurityOnly'); +-- 1: Windows 인증 모드, 0: 혼합 모드 +``` +**조치:** +``` +-- MSSQL: SSMS > 서버 속성 > 보안 > "Windows 인증 모드" 선택 +``` + +## 3. 옵션 관리 + +### D-17: Audit Table 접근 제한 +**점검:** +```sql +-- Oracle: Audit 테이블 접근 권한 확인 +SELECT grantee, privilege FROM dba_tab_privs WHERE table_name LIKE '%AUDIT%'; +``` +**조치:** +```sql +-- Oracle: 불필요 권한 회수 +REVOKE SELECT ON SYS.AUD$ FROM <계정명>; +``` + +### D-18: DBA 계정 Role이 Public으로 설정되지 않도록 조정 +**점검:** +```sql +-- Oracle: PUBLIC에 부여된 권한 확인 +SELECT grantee, granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'PUBLIC'; +``` +**조치:** +```sql +-- Oracle: PUBLIC에서 불필요 Role/권한 회수 +REVOKE FROM PUBLIC; +REVOKE EXECUTE ON <패키지명> FROM PUBLIC; +``` + +### D-19: OS_ROLES 등 FALSE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER OS_ROLES; +SHOW PARAMETER REMOTE_OS_AUTHENTICATION; +SHOW PARAMETER REMOTE_OS_ROLES; +``` +**조치:** +```sql +-- Oracle: init.ora 또는 spfile 수정 +ALTER SYSTEM SET OS_ROLES = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_AUTHENTICATION = FALSE SCOPE=SPFILE; +ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE; +-- DB 재시작 필요 +``` + +### D-20: 인가되지 않은 Object Owner 제한 +**점검:** +```sql +-- Oracle: Object Owner 확인 +SELECT owner, object_type, count(*) FROM dba_objects GROUP BY owner, object_type ORDER BY owner; +``` +**조치:** +```sql +-- 불필요한 Object Owner의 객체를 적절한 스키마로 이전 또는 삭제 +``` + +### D-21: 인가되지 않은 GRANT OPTION 사용 제한 +**점검:** +```sql +-- Oracle +SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE admin_option = 'YES'; +SELECT grantee, table_name, privilege, grantable FROM dba_tab_privs WHERE grantable = 'YES'; +``` +**조치:** +```sql +-- Oracle: ADMIN OPTION 제거 후 재부여 +REVOKE <권한> FROM <계정명>; +GRANT <권한> TO <계정명>; +``` + +### D-22: 자원 제한 기능 TRUE 설정 +**점검:** +```sql +-- Oracle +SHOW PARAMETER RESOURCE_LIMIT; +``` +**조치:** +```sql +-- Oracle +ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +``` + +### D-23: xp_cmdshell 사용 제한 +**점검:** +```sql +-- MSSQL +EXEC sp_configure 'xp_cmdshell'; +``` +**조치:** +```sql +-- MSSQL: xp_cmdshell 비활성화 +EXEC sp_configure 'show advanced options', 1; +RECONFIGURE; +EXEC sp_configure 'xp_cmdshell', 0; +RECONFIGURE; +``` + +### D-24: Registry Procedure 권한 제한 +**점검:** +```sql +-- MSSQL: 레지스트리 관련 확장 저장 프로시저 확인 +SELECT name FROM sys.objects WHERE name LIKE 'xp_reg%'; +``` +**조치:** +```sql +-- MSSQL: public에서 실행 권한 제거 +DENY EXECUTE ON xp_regread TO public; +DENY EXECUTE ON xp_regwrite TO public; +DENY EXECUTE ON xp_regdeletekey TO public; +DENY EXECUTE ON xp_regdeletevalue TO public; +DENY EXECUTE ON xp_regenumvalues TO public; +``` + +## 4. 패치 관리 + +### D-25: 주기적 보안 패치 및 벤더 권고 사항 적용 +**점검:** +```sql +-- Oracle: 버전 확인 +SELECT * FROM v$version; + +-- MSSQL: 버전 확인 +SELECT @@VERSION; + +-- MySQL: 버전 확인 +SELECT VERSION(); + +-- PostgreSQL: 버전 확인 +SELECT version(); +``` +**조치:** +``` +-- 공통: 벤더 보안 패치 사이트에서 최신 패치 확인 및 적용 +-- Oracle: https://www.oracle.com/security-alerts/ +-- MSSQL: https://learn.microsoft.com/ko-kr/sql/ +-- MySQL: https://dev.mysql.com/downloads/ +-- PostgreSQL: https://www.postgresql.org/support/security/ +``` + +### D-26: 감사 기록 정책 설정 +**점검:** +```sql +-- Oracle: Audit 설정 확인 +SHOW PARAMETER AUDIT_TRAIL; +SELECT * FROM dba_stmt_audit_opts; +SELECT * FROM dba_priv_audit_opts; + +-- MSSQL: 감사 설정 확인 +SELECT * FROM sys.server_audits; + +-- MySQL: 로그 설정 확인 +SHOW VARIABLES LIKE 'general_log%'; +SHOW VARIABLES LIKE 'log_bin%'; + +-- PostgreSQL +SHOW log_statement; +SHOW log_connections; +SHOW log_disconnections; +``` +**조치:** +```sql +-- Oracle: Audit 활성화 +ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE=SPFILE; +AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS; +AUDIT CREATE SESSION; + +-- MySQL: 일반 로그 활성화 +SET GLOBAL general_log = 'ON'; +SET GLOBAL general_log_file = '/var/log/mysql/general.log'; + +-- PostgreSQL: postgresql.conf +-- log_statement = 'all' +-- log_connections = on +-- log_disconnections = on +-- logging_collector = on +``` diff --git a/skills/kesekit-start/scripts/cii/network.md b/skills/kesekit-start/scripts/cii/network.md new file mode 100644 index 0000000..9d0b68d --- /dev/null +++ b/skills/kesekit-start/scripts/cii/network.md @@ -0,0 +1,892 @@ +# 네트워크 장비 점검 스크립트 (N-01 ~ N-38) + +## 1. 계정 관리 + +### N-01: 비밀번호 설정 +**점검:** +``` +! Cisco IOS +Router> enable +Router# show running-config +! VTY, 콘솔, AUX 포트의 login/password 설정 확인 + +! Juniper Junos +user@host> configure +user@host# show + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - enable 비밀번호 +Router(config)# enable secret <비밀번호> +! VTY 비밀번호 +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! 콘솔 비밀번호 +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +! AUX 비밀번호 +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> + +! Radware Alteon +Main# /cfg/sys/access/user/admpw +Main# apply +Main# save + +! Juniper Junos +user@host# set system root-authentication plain-test-passwd + +! Piolink PLOS +(config)# password +``` + +### N-02: 비밀번호 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! security passwords min-length 설정 확인 +``` +**조치:** +``` +! Cisco IOS - 비밀번호 최소 길이 설정 +Router(config)# security passwords min-length <길이> +``` + +### N-03: 암호화된 비밀번호 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! enable secret / username secret / service password-encryption 확인 + +! Juniper Junos +user@host# show +! encrypted-password 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# enable secret <비밀번호> +Router(config)# username <사용자> secret <비밀번호> +Router(config)# service password-encryption + +! Juniper Junos +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> +``` + +### N-04: 계정 잠금 임계값 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show login + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! Cisco IOS +Router(config)# login block-for <잠금시간> attempts <실패횟수> within <허용시간> + +! Juniper Junos +[edit system login retry-options] +user@host# set tries-before-disconnect <실패횟수> +user@host# set lockout-period <잠금시간> +``` + +### N-05: 사용자/명령어별 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show privilege + +! Juniper Junos +! [edit system login] 에서 superuser, read-only 클래스 분리 확인 +``` +**조치:** +``` +! Cisco IOS - 사용자별 권한 수준 지정 +Router(config)# username [ID] privilege [1-15] secret [PASS] +! 명령어별 권한 수준 지정 (중요 명령어 레벨 15 적용) +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging + +! Juniper Junos +[edit system login] +login { + class class-name { + allow-commands "regular-expression"; + deny-commands "regular-expression"; + idle-timeout minutes; + permissions [ permissions ]; + } +} + +! Piolink PLOS +! 슈퍼 유저(root)와 일반 유저로 권한 분리 관리 +``` + +## 2. 접근 관리 + +### N-06: VTY 접근(ACL) 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list 및 access-class 설정 확인 + +! Juniper Junos +user@host# show +! firewall filter + 루프백 인터페이스 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty 0 4 +Router(config-line)# access-class in + +! Radware Alteon +# cfg > sys > access > mgmt > add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply > save + +! Juniper Junos +user@host# set policy-options prefix-list +user@host# edit firewall family inet filter +user@host# edit term +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set from protocol tcp +user@host# set from destination-port ssh +user@host# set then discard +! 기본 허용 종료 +user@host# set term then accept +! 루프백에 적용 +user@host# set interfaces lo0 unit 0 family inet filter input + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-07: Session Timeout 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! exec-timeout 설정 확인 +``` +**조치:** +``` +! Cisco IOS (10분 이하 권고, 예: 5분) +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 + +! Radware Alteon +# cfg > sys > idle <분> > apply > save + +! Juniper Junos +[edit login] +user@host# set class <클래스> idle-timeout <분> + +! Piolink PLOS +(config)# terminal timeout <분> +``` + +### N-08: VTY 접속 시 안전한 프로토콜 사용 +**점검:** +``` +! Cisco IOS +Router# show ip ssh +Router# show version + +! Juniper Junos +user@host# set ssh +``` +**조치:** +``` +! Cisco IOS - SSH 설정 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +Router(config)# ip ssh version 2 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh authentication-retries <횟수> +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh + +! Radware Alteon +# cfg > /sys/sshd ena > /sys/sshd on > apply > save + +! Juniper Junos +root# set system services ssh +root# delete system services telnet +root# commit + +! Piolink PLOS +(config-management-access)# ssh status enable +(config-management-access)# telnet status disable +(config-management-access)# apply +``` + +### N-09: 불필요한 보조 입출력 포트 사용 금지 +**점검:** +``` +! Cisco IOS +Router# show running +! 불필요 포트 Up/Down 확인 +``` +**조치:** +``` +! Cisco IOS - AUX 포트 차단 +Router(config)# line aux 0 +Router(config-line)# no password +Router(config-line)# transport input none +Router(config-line)# no exec +Router(config-line)# exec-timeout 0 1 + +! Juniper Junos +[edit system ports] +root# set auxiliary disable +root# commit +``` + +### N-10: 로그인 시 경고 메시지 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! banner 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# banner motd # <경고 문구> # +Router(config)# banner login # <경고 문구> # +Router(config)# banner exec # <경고 문구> # + +! Radware Alteon +# cfg > sys > banner > apply > save + +! Juniper Junos +[edit system login] +message "경고 문구" +``` + +### N-11: 원격로그 서버 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging trap informational +Router(config)# logging +Router(config)# logging facility local6 +Router(config)# logging source-interface serial 0 + +! Radware Alteon +# cfg > sys > /syslog/host > apply > save + +! Juniper Junos +user@host# edit system syslog +user@host# set system syslog file message any error +user@host# set system syslog host any any +user@host# set archive files 5 sizes 5m world-readable + +! Piolink PLOS +# logging server enable +# logging server +``` + +## 3. 패치 관리 + +### N-12: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +``` +! Cisco IOS +Router# show version + +! Juniper Junos +user@host# show version +``` +**조치:** +``` +! 공통 +! 1. 하드웨어/소프트웨어/EOL/패치 현황 문서화 +! 2. 벤더 보안 패치 및 권고사항 입수 +! 3. 취약점 영향도/발생 가능성 분석 후 패치 우선순위 결정 +! 4. 테스트베드(GNS3 등)에서 패치 검증 +! 5. 패치 적용 전 이미지/설정 백업 후 적용 +! 벤더별 패치 사이트: +! Cisco: https://software.cisco.com +! Juniper: https://support.juniper.net/support/downloads +! 공통: https://www.krcert.or.kr +``` + +## 4. 로그 관리 + +### N-13: 로깅 버퍼 크기 설정 +**점검:** +``` +! Cisco IOS +Router# show logging +``` +**조치:** +``` +! Cisco IOS +Router(config)# logging on +Router(config)# logging buffered 16000 +Router(config)# logging buffered informational + +! Piolink PLOS +(config)# logging buffer +(config)# logging priority +``` + +### N-14: 정책에 따른 로깅 설정 +**점검:** +``` +! Cisco IOS +Router# show logging + +! Juniper Junos +user@host# show log messages +``` +**조치:** +``` +! 공통 - 6가지 로깅 방법 활용 +! 1. 콘솔 로깅: 콘솔 포트에서만 확인 +! 2. Buffered 로깅: RAM에 저장 (버퍼 가득 차면 오래된 로그 대체) +! 3. Terminal 로깅: terminal monitor로 VTY에 전송 +! 4. Syslog: 외부 syslog 서버에 저장 +! 5. SNMP traps: 외부 SNMP 서버에 전송 +! 6. ACL 침입 로깅: ACL 룰에 log/log-input 추가 +``` + +### N-15: NTP 및 시각 동기화 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ntp server 설정 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# ntp server + +! Radware Alteon +# cfg > /sys/ntp > on +# prisrvr +# intrval <동기화주기> +# tzone +9:00 +# apply > save + +! Juniper Junos +[edit system ntp] +user@host# set server +user@host# set boot-server +``` + +### N-16: Timestamp 로그 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service timestamps 확인 +``` +**조치:** +``` +! Cisco IOS - UTC 시간 밀리초 단위 +Router(config)# service timestamps log datetime msec show-timezone +! 로컬 시간(KST) 밀리초 단위 +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone +``` + +## 5. 기능 관리 + +### N-17: SNMP 서비스 확인 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show snmp + +! Juniper Junos +user@host# show snmp + +! Piolink PLOS +switch# show running-config +``` +**조치:** +``` +! Cisco IOS - SNMP 비활성화 +Router(config)# no snmp-server + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: d + +! Juniper Junos +user@host# no set snmp community public +``` + +### N-18: SNMP Community String 복잡성 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community 설정 확인 (public/private 사용 여부) +``` +**조치:** +``` +! Cisco IOS +Router(config)# snmp-server community <복잡한String> + +! Radware Alteon +# cfg/sys/ssnmp +# rcomm <복잡한String> +# wcomm <복잡한String> +# apply > save + +! Juniper Junos +user@host# set snmp community <복잡한String> authorization read-only + +! Piolink PLOS +switch(config-snmp)# community <복잡한String> +switch(config-snmp)# status enable +switch(config-snmp)# apply +``` + +### N-19: SNMP ACL 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community + ACL 적용 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + +! Juniper Junos +[edit snmp] +user@host# edit client-list +user@host# set default restrict +user@host# set +user@host# up +user@host# edit community +user@host# set client-list-name + +! Piolink PLOS +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +(config-security-system-access)# default-policy deny +``` + +### N-20: SNMP Community 권한 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! snmp-server community RO/RW 확인 +``` +**조치:** +``` +! Cisco IOS - RO 권한만 설정 +Router(config)# snmp-server community RO + +! Radware Alteon +>> Main# /cfg/sys/access/snmp +Enter new SNMP access [d/r/w]: r +>> Main# apply + +! Juniper Junos +[edit snmp] +user@host# delete community +user@host# set community authorization read-only +! SNMPv3 그룹 RW 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <모델> security-level <레벨> write-view + +! Piolink PLOS +switch(config-snmp)# policy read-only +switch(config-snmp)# apply +``` + +### N-21: TFTP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tftp +``` + +### N-22: Spoofing 방지 필터링 적용 +**점검:** +``` +! Cisco IOS +Router# show running-config +! access-list deny 설정 확인 + +! Juniper Junos +! Configure/Apply Firewall Filters 확인 +``` +**조치:** +``` +! Cisco IOS - Anti-Spoofing ACL (Extended ACL 100-199) +Router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +Router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +Router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +Router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +Router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any +Router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +Router(config)# access-list permit ip any any +Router(config)# interface serial <인터페이스> +Router(config-if)# ip access-group in + +! Juniper Junos +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +[edit firewall family inet filter ] +user@host# set term then accept +user@host# set interfaces <인터페이스> unit <유닛> family inet filter input +``` + +### N-23: DDoS 공격 방어 설정 또는 DDoS 장비 사용 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show configuration +``` +**조치:** +``` +! 공통 - DDoS 방어 3가지 방법 +! 1. ACL: 스푸핑 방지 필터링 사전 적용, 공격 유형별 IP/프로토콜/포트 임시 차단 +! 2. Rate Limiting: UDP, ICMP, TCP SYN 패킷 대역폭 제한 +! 3. TCP Intercept: SYN Flooding 방어 +! - Intercept 모드: 라우터가 SYN-ACK 대신 응답 +! - Watch 모드: SYN 전달 후 30초 미완료 시 RST 전송 +``` + +### N-24: 사용하지 않는 인터페이스 비활성화 +**점검:** +``` +! Cisco IOS +Router# show interface +! Administratively down 확인 + +! Juniper Junos +user@host# show interface terse +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# shutdown + +! Radware Alteon +>> Main# /cfg/port <포트>/dis +>> Main# apply + +! Juniper Junos +[edit interfaces] +user@host# set <인터페이스> disable + +! Piolink PLOS +switch(config)# port <포트> status disable +switch(config)# apply +``` + +### N-25: TCP Keepalive 서비스 설정 +**점검:** +``` +! Cisco IOS +Router# show running-config +! service tcp-keepalives 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# service tcp-keepalives-in +Router(config)# service tcp-keepalives-out +``` + +### N-26: Finger 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip finger + +! Juniper Junos +[edit system services] +user@host# delete finger +user@host# commit +``` + +### N-27: 웹 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip http server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip http server +Router(config)# no ip http secure-server + +! Radware Alteon +>> Main# /cfg/sys/access/https/https dis +>> Main# apply + +! Juniper Junos +user@host# delete system services web-management + +! Piolink PLOS +(config-management-access)# http status disable +(config-management-access)# https status disable +``` + +### N-28: TCP/UDP Small 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +``` + +### N-29: Bootp 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! ip bootp server 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip bootp server +! DHCP 유지하고 BOOTP만 차단 시 +Router(config)# ip dhcp bootp ignore + +! Radware Alteon +>> Main# /cfg/sys/bootp dis +>> Main# apply + +! Juniper Junos +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스> server <주소> +``` + +### N-30: CDP 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show cdp +``` +**조치:** +``` +! Cisco IOS - 전체 비활성화 +Router(config)# no cdp run +! 특정 인터페이스 비활성화 +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +``` + +### N-31: Directed-broadcast 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast + +! Radware Alteon +# cfg/l3/frwd > dirbr disable > apply > save + +! Passport +# config vlan ip directed-broadcast > disable +``` + +### N-32: Source Routing 차단 +**점검:** +``` +! Cisco IOS / Juniper Junos +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip source-route + +! Juniper Junos +user@host# set chassis no-source-route +``` + +### N-33: Proxy ARP 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config + +! Juniper Junos +user@host# show +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp + +! Juniper Junos +[edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp +``` + +### N-34: ICMP unreachable, redirect 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +! 각 인터페이스 no ip unreachables / no ip redirects 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects + +! Juniper Junos - 전체 장비 +[edit system] +user@host# set no-redirects +! 특정 인터페이스 +[edit interfaces] +user@host# set <인터페이스> unit <유닛> family <패밀리> no-redirects +``` + +### N-35: identd 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip identd +``` + +### N-36: Domain Lookup 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no ip domain lookup +``` + +### N-37: PAD 서비스 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +``` +**조치:** +``` +! Cisco IOS +Router(config)# no service pad +``` + +### N-38: mask-reply 차단 +**점검:** +``` +! Cisco IOS +Router# show running-config +Router# show ip interface +! "ICMP mask replies are never sent" 확인 +``` +**조치:** +``` +! Cisco IOS +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +``` diff --git a/skills/kesekit-start/scripts/cii/pc.md b/skills/kesekit-start/scripts/cii/pc.md new file mode 100644 index 0000000..167c9ca --- /dev/null +++ b/skills/kesekit-start/scripts/cii/pc.md @@ -0,0 +1,348 @@ +# PC 점검 스크립트 (PC-01 ~ PC-18) + +## 1. 계정 관리 + +### PC-01: 비밀번호의 주기적 변경 +**점검:** +```powershell +# 최대 암호 사용 기간 확인 +net accounts | findstr "최대" +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol.cfg +findstr "MaximumPasswordAge" C:\secpol.cfg +findstr "MinimumPasswordAge" C:\secpol.cfg +findstr "PasswordHistorySize" C:\secpol.cfg +``` +**조치:** +```powershell +# 최대 암호 사용 기간 90일 설정 +net accounts /maxpwage:90 +# 최소 암호 사용 기간 1일 +net accounts /minpwage:1 + +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최대 암호 사용 기간": 90일 +# "최소 암호 사용 기간": 1일 +# "최근 암호 기억": 24개 + +# 계정별 비밀번호 기간 설정 +# LUSRMGR.MSC > 사용자 > 계정 속성 > "암호 사용 기간 제한 없음" 해제 +``` + +### PC-02: 비밀번호 관리정책 설정 +**점검:** +```powershell +# 암호 복잡성 및 최소 길이 확인 +net accounts +secedit /export /cfg C:\secpol.cfg +findstr "MinimumPasswordLength" C:\secpol.cfg +findstr "PasswordComplexity" C:\secpol.cfg +``` +**조치:** +```powershell +# GPO: 시작 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "최소 암호 길이": 8문자 이상 +# "암호는 복잡성을 만족해야 함": 사용함 + +# 복잡성 기준: 영문 대/소문자, 숫자, 특수문자 중 +# 2종류 조합 시 최소 10자리 이상 +# 3종류 조합 시 최소 8자리 이상 +``` + +### PC-03: 복구 콘솔에서 자동 로그온 금지 +**점검:** +```powershell +# 복구 콘솔 자동 로그온 설정 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "복구 콘솔: 자동 관리 로그온 허용" -> "사용 안 함" + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole" /v SecurityLevel /t REG_DWORD /d 0 /f +``` + +## 2. 서비스 관리 + +### PC-04: 공유 폴더 제거 +**점검:** +```powershell +# 공유 폴더 목록 확인 +net share +# 기본 공유 폴더 확인 (C$, D$, Admin$, IPC$) +Get-SmbShare +# AutoShareWks 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks +``` +**조치:** +```powershell +# 기본 공유 폴더 삭제 +net share C$ /delete +net share D$ /delete +net share Admin$ /delete + +# 재부팅 시 자동 공유 방지 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 일반 공유 폴더 삭제 +net share <공유폴더명> /delete + +# 공유 폴더 접근에 "Everyone" 제거 (GUI) +# 컴퓨터 관리 > 공유 폴더 > 공유 > 속성 > 공유 사용 권한 > Everyone 제거 + +# 암호로 보호된 공유 설정 +# 설정 > 네트워크 > 고급 공유 설정 > 모든 네트워크 > "암호로 보호된 공유" 켬 +``` + +### PC-05: 불필요한 서비스 제거 +**점검:** +```powershell +# 실행 중인 서비스 목록 확인 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType +# 특정 불필요 서비스 확인 +Get-Service -Name "RemoteRegistry","Messenger","Clipbook","Alerter" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# 불필요 서비스 중지 및 시작 유형 변경 +# GUI: services.msc > 해당 서비스 > 속성 > 시작 유형: 사용 안 함 + +# PowerShell로 서비스 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 일반적으로 불필요한 서비스 예시: +# Alerter, Clipbook, Computer Browser, DHCP Client (고정IP 사용 시) +# Distributed Link Tracking Client, Error Reporting Service +# Messenger, NetMeeting Remote Desktop Sharing +# Print Spooler (프린터 미사용 시), Remote Registry +# Simple TCP/IP Services, Universal Plug and Play Device Host +``` + +### PC-06: 비인가 상용 메신저 사용 금지 +**점검:** +```powershell +# 설치된 메신저 프로그램 확인 +Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -match "카카오톡|Skype|NateOn|Telegram"} | Select-Object Name +# 실행 중인 메신저 프로세스 확인 +Get-Process | Where-Object {$_.ProcessName -match "kakaotalk|skype|nateon"} | Select-Object ProcessName +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows Messenger +# "Windows Messenger를 실행 허용 안 함": 사용 + +# 상용 메신저 제거 +# 설정 > 앱 > 앱 및 기능 > 해당 메신저 제거 +``` + +### PC-07: 파일 시스템이 NTFS 포맷으로 설정 +**점검:** +```powershell +# 디스크 볼륨 파일 시스템 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size +# 또는 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT32 -> NTFS 변환 (비파괴 변환) +convert C: /fs:ntfs + +# 변환 후 폴더/파일에 적합한 ACL 적용 +# 속성 > 보안 > 편집 > 그룹/계정별 권한 설정 +``` + +### PC-08: 멀티 부팅 방지 +**점검:** +```powershell +# 설치된 OS 확인 +bcdedit /enum +# 또는 +msconfig +# 부팅 탭에서 2개 이상 OS 확인 +``` +**조치:** +```powershell +# msconfig > 부팅 탭 > 사용하지 않는 OS 선택 후 삭제 +# 또는 +bcdedit /delete {identifier} +``` + +### PC-09: 브라우저 종료 시 임시 인터넷 파일 삭제 +**점검:** +```powershell +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit +``` +**조치:** +```powershell +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 +# > Internet Explorer > 인터넷 제어판 > 고급 페이지 +# "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기": 사용 + +# 레지스트리 직접 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy" /v ClearBrowsingHistoryOnExit /t REG_DWORD /d 1 /f +``` + +## 3. 패치 관리 + +### PC-10: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```powershell +# 설치된 HOT FIX 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 +# Windows Update 설정 확인 +Get-WindowsUpdateLog +# 자동 업데이트 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" +``` +**조치:** +```powershell +# 설정 > Windows Update > 업데이트 확인 +# PowerShell로 업데이트 확인 및 설치 +Install-Module PSWindowsUpdate -Force +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot +``` + +### PC-11: 지원이 종료되지 않은 Windows OS Build 적용 +**점검:** +```powershell +# 현재 OS 빌드 버전 확인 +[System.Environment]::OSVersion.Version +Get-ComputerInfo | Select-Object WindowsVersion, OsBuildNumber, WindowsProductName +winver +``` +**조치:** +```powershell +# Windows Update를 통한 최신 빌드 적용 +# 설정 > Windows Update > 업데이트 확인 +# 수동 업데이트: https://www.microsoft.com/ko-kr/software-download/ +``` + +## 4. 보안 관리 + +### PC-12: Windows 자동 로그인 점검 +**점검:** +```powershell +# 자동 로그인 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword +``` +**조치:** +```powershell +# 자동 로그인 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +# DefaultPassword 값 삭제 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +``` + +### PC-13: 바이러스 백신 프로그램 설치 및 주기적 업데이트 +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AntivirusEnabled, AntivirusSignatureLastUpdated, AntispywareEnabled +# 백신 설치 여부 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState +``` +**조치:** +```powershell +# Windows Defender 업데이트 +Update-MpSignature +# 설정 > Windows 보안 > 바이러스 및 위협 방지 > 보호 업데이트 > 업데이트 확인 +``` + +### PC-14: 백신 실시간 감시 기능 활성화 +**점검:** +```powershell +# 실시간 보호 상태 확인 +Get-MpPreference | Select-Object DisableRealtimeMonitoring +Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled +``` +**조치:** +```powershell +# 실시간 보호 활성화 +Set-MpPreference -DisableRealtimeMonitoring $false +# GUI: Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 켬 +``` + +### PC-15: OS에서 제공하는 침입차단 기능 활성화 +**점검:** +```powershell +# 방화벽 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled +netsh advfirewall show allprofiles state +``` +**조치:** +```powershell +# 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True +# 또는 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정/해제 > "사용" 설정 +``` + +### PC-16: 화면보호기 대기 시간 설정 및 재시작 시 암호 보호 +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +``` +**조치:** +```powershell +# 화면보호기 활성화 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +# 대기 시간 설정 (600초 = 10분 이하) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +# 재시작 시 암호 보호 +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f + +# GUI: 설정 > 개인설정 > 잠금화면 > 화면보호기 +# 대기: 10분 이하 / "다시 시작 시 로그온 화면 표시" 체크 +``` + +### PC-17: 이동식 미디어 자동 실행 방지 +**점검:** +```powershell +# 자동 실행 정책 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun +# GPO 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v NoAutorun +``` +**조치:** +```powershell +# 모든 드라이브 자동 실행 끄기 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 자동 실행 정책 +# "자동 실행 끄기": 사용 - 모든 드라이브 + +# 제어판: 하드웨어 및 소리 > 자동 실행 +# "모든 미디어 및 장치에 자동 실행 사용" 체크 해제 +``` + +### PC-18: 원격 지원 금지 +**점검:** +```powershell +# 원격 지원 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +``` +**조치:** +```powershell +# 원격 지원 비활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 0 /f + +# GPO: gpedit.msc > 컴퓨터 구성 > 관리 템플릿 > 시스템 > 원격 지원 +# "원격 지원 제공 구성": 사용 안 함 + +# 원격 데스크톱 비활성화 (필요 시) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f +``` diff --git a/skills/kesekit-start/scripts/cii/unix.md b/skills/kesekit-start/scripts/cii/unix.md new file mode 100644 index 0000000..6969221 --- /dev/null +++ b/skills/kesekit-start/scripts/cii/unix.md @@ -0,0 +1,1531 @@ +# Unix 서버 점검 및 조치 스크립트 + +## 1. 계정 관리 + +### U-01: root 계정 원격 접속 제한 +**판단기준:** 원격터미널 서비스 사용 시 root 직접 접속을 차단한 경우 양호 +**점검:** +```bash +# SSH root 접속 설정 확인 +grep -i "PermitRootLogin" /etc/ssh/sshd_config + +# Telnet root 접속 설정 확인 (SOLARIS) +grep "CONSOLE" /etc/default/login + +# Telnet pts 설정 확인 (LINUX) +cat /etc/securetty | grep pts + +# Telnet rlogin 설정 확인 (AIX) +grep "rlogin" /etc/security/user +``` +**조치:** +```bash +# SSH - 모든 OS 공통 +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config +systemctl restart sshd + +# Telnet - SOLARIS +# /etc/default/login 파일에 설정 +echo "CONSOLE=/dev/console" >> /etc/default/login + +# Telnet - LINUX (/etc/securetty에서 pts 제거) +sed -i '/^pts\//d' /etc/securetty +# /etc/pam.d/login에 모듈 추가 +# auth required /lib/security/pam_securetty.so + +# Telnet - AIX (/etc/security/user) +chsec -f /etc/security/user -s root -a rlogin=false + +# HP-UX SSH +sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /opt/ssh/etc/sshd_config +``` + +### U-02: 비밀번호 관리정책 설정 +**판단기준:** 영문+숫자+특수문자 8자리 이상, 최소사용 1일, 최대사용 90일, 이력 4회 이상 양호 +**점검:** +```bash +# LINUX - 비밀번호 정책 확인 +grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" /etc/login.defs +cat /etc/security/pwquality.conf 2>/dev/null +grep pam_pwquality /etc/pam.d/system-auth 2>/dev/null +grep pam_pwquality /etc/pam.d/common-password 2>/dev/null + +# SOLARIS +cat /etc/default/passwd | grep -E "HISTORY|PASSLENGTH|MINDIGIT|MINUPPER|MINLOWER|MINSPECIAL" + +# AIX +grep -E "minage|maxage|minalpha|minother|minlen|histsize" /etc/security/user +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/login.defs +sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs +sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs + +# LINUX (Redhat) - /etc/security/pwquality.conf +cat > /etc/security/pwquality.conf <<'CONF' +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +CONF + +# SOLARIS - /etc/default/passwd +cat >> /etc/default/passwd <<'CONF' +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO +CONF + +# AIX - /etc/security/user +chsec -f /etc/security/user -s default -a minage=1 +chsec -f /etc/security/user -s default -a maxage=12 +chsec -f /etc/security/user -s default -a minalpha=2 +chsec -f /etc/security/user -s default -a minother=2 +chsec -f /etc/security/user -s default -a minlen=8 +chsec -f /etc/security/user -s default -a histsize=4 + +# HP-UX - /etc/default/security +cat >> /etc/default/security <<'CONF' +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +CONF +``` + +### U-03: 계정 잠금 임계값 설정 +**판단기준:** 계정 잠금 임계값이 10회 이하로 설정된 경우 양호 +**점검:** +```bash +# LINUX - PAM 계정잠금 설정 확인 +grep pam_tally /etc/pam.d/system-auth 2>/dev/null +grep pam_faillock /etc/pam.d/system-auth 2>/dev/null +grep -E "deny|unlock_time" /etc/security/faillock.conf 2>/dev/null +authselect current 2>/dev/null + +# SOLARIS +grep "RETRIES" /etc/default/login +grep "LOCK_AFTER_RETRIES" /etc/security/policy.conf 2>/dev/null + +# AIX +grep "loginretries" /etc/security/user + +# HP-UX +grep "AUTH_MAXTRIES" /etc/default/security 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat - authselect 방식, RHEL 8+) +authselect enable-feature with-faillock +# /etc/security/faillock.conf 수정 +cat >> /etc/security/faillock.conf <<'CONF' +silent +deny = 10 +unlock_time = 120 +CONF + +# LINUX (Redhat - pam_faillock 방식) +# /etc/pam.d/system-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +# /etc/pam.d/password-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# LINUX (Debian - pam_faillock 방식) +# /etc/pam.d/common-auth에 추가 +# auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 + +# SOLARIS (5.9+) +# /etc/security/policy.conf +echo "LOCK_AFTER_RETRIES=YES" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/user -s default -a loginretries=10 + +# HP-UX (11.v3+) +echo "AUTH_MAXTRIES=10" >> /etc/default/security +``` + +### U-04: 비밀번호 파일 보호 +**판단기준:** 쉐도우 비밀번호를 사용하거나 비밀번호를 암호화하여 저장하는 경우 양호 +**점검:** +```bash +# /etc/passwd 두 번째 필드가 'x'인지 확인 (x이면 shadow 사용 중) +awk -F: '$2 != "x" {print $1" : 비밀번호 평문 저장 의심"}' /etc/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX - 쉐도우 비밀번호 적용 +pwconv + +# HP-UX - Trusted Mode 전환 +/etc/tsconvert +``` + +### U-05: root 이외의 UID가 '0' 금지 +**판단기준:** root 계정과 동일한 UID(0)를 갖는 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '$3==0 && $1!="root" {print $1" has UID 0"}' /etc/passwd +``` +**조치:** +```bash +# UID 변경 +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-06: 사용자 계정 su 기능 제한 +**판단기준:** su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 양호 +**점검:** +```bash +# wheel 그룹 확인 +grep wheel /etc/group +# su 명령어 권한 확인 +ls -l /usr/bin/su +# PAM 설정 확인 (LINUX) +grep pam_wheel /etc/pam.d/su +``` +**조치:** +```bash +# wheel 그룹 생성 (없는 경우) +groupadd wheel +# su 명령 그룹 변경 및 권한 설정 +chgrp wheel /usr/bin/su +chmod 4750 /usr/bin/su +# 허용 계정 등록 +usermod -G wheel + +# LINUX PAM 설정 - /etc/pam.d/su +# auth required pam_wheel.so use_uid +``` + +### U-07: 불필요한 계정 제거 +**판단기준:** 불필요한 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +# 시스템 계정 확인 +cat /etc/passwd +# 마지막 로그인 기록 확인 +last | head -30 +# 로그인 불가 계정 확인 +awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd +``` +**조치:** +```bash +userdel <사용자_이름> +# AIX의 경우 +# rmuser <사용자_이름> +``` + +### U-08: 관리자 그룹에 최소한의 계정 포함 +**판단기준:** 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 양호 +**점검:** +```bash +grep "^root:" /etc/group +``` +**조치:** +```bash +gpasswd -d <사용자_이름> root +# AIX의 경우 +# chgrpmem -m - <사용자_이름> root +``` + +### U-09: 계정이 존재하지 않는 GID 금지 +**판단기준:** 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 양호 +**점검:** +```bash +# /etc/group과 /etc/passwd 비교 +cat /etc/group +cat /etc/gshadow 2>/dev/null +``` +**조치:** +```bash +groupdel <그룹_이름> +``` + +### U-10: 동일한 UID 금지 +**판단기준:** 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d +# 중복 UID가 있다면 해당 계정 확인 +awk -F: '{uid[$3]=uid[$3]" "$1} END{for(u in uid) if(split(uid[u],a," ")>2) print "UID "u":"uid[u]}' /etc/passwd +``` +**조치:** +```bash +usermod -u <변경할_UID> <사용자_이름> +# AIX의 경우 +# chuser id=<변경할_UID> <사용자_이름> +``` + +### U-11: 사용자 shell 점검 +**판단기준:** 로그인이 필요하지 않은 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +cat /etc/passwd | grep -E "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^games|^gopher" | grep -v admin +``` +**조치:** +```bash +# 불필요한 계정에 nologin 쉘 부여 +usermod -s /bin/false <계정명> +usermod -s /sbin/nologin <계정명> +``` + +### U-12: 세션 종료 시간 설정 +**판단기준:** Session Timeout이 600초(10분) 이하로 설정된 경우 양호 +**점검:** +```bash +echo $TMOUT +grep -i tmout /etc/profile /etc/bashrc 2>/dev/null +grep autologout /etc/csh.cshrc /etc/csh.login 2>/dev/null +``` +**조치:** +```bash +# sh, ksh, bash - /etc/profile에 추가 +echo "TMOUT=600" >> /etc/profile +echo "export TMOUT" >> /etc/profile + +# csh - /etc/csh.cshrc 또는 /etc/csh.login에 추가 +echo "set autologout=10" >> /etc/csh.cshrc +``` + +### U-13: 안전한 비밀번호 암호화 알고리즘 사용 +**판단기준:** SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 양호 ($5=SHA-256, $6=SHA-512) +**점검:** +```bash +# 암호화 알고리즘 확인 ($1=MD5, $5=SHA-256, $6=SHA-512) +awk -F: '$2 ~ /^\$/ {split($2,a,"$"); print $1" -> $"a[2]}' /etc/shadow 2>/dev/null + +# LINUX +grep ENCRYPT_METHOD /etc/login.defs +``` +**조치:** +```bash +# LINUX (Redhat) +sed -i 's/^ENCRYPT_METHOD.*/ENCRYPT_METHOD SHA512/' /etc/login.defs +# /etc/pam.d/system-auth +# password sufficient pam_unix.so sha512 + +# SOLARIS +# /etc/security/policy.conf +echo "CRYPT_DEFAULT=6" >> /etc/security/policy.conf + +# AIX +chsec -f /etc/security/login.cfg -s usw -a pwd_algorithm=ssha512 + +# HP-UX +echo "CRYPT_DEFAULT=6" >> /etc/default/security +``` + +--- + +## 2. 파일 및 디렉터리 관리 + +### U-14: root 홈, 패스 디렉터리 권한 및 패스 설정 +**판단기준:** PATH 환경변수에 "."이 맨 앞이나 중간에 포함되지 않은 경우 양호 +**점검:** +```bash +echo $PATH | tr ':' '\n' | grep -n "^\.$" +echo $PATH | grep -E "(^\.:|:\.:|:\.$ )" +``` +**조치:** +```bash +# 환경설정 파일에서 PATH 변숫값에서 "." 제거 또는 맨 마지막으로 이동 +# ~/.profile, ~/.bashrc, /etc/profile 등에서 수정 +# 예: PATH=$PATH:$HOME/bin (상대경로 "." 삭제) +``` + +### U-15: 파일 및 디렉터리 소유자 설정 +**판단기준:** 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 양호 +**점검:** +```bash +find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +``` +**조치:** +```bash +# 불필요한 파일 제거 +rm <파일_이름> +rm -r <디렉터리_이름> +# 사용 중인 파일의 소유자 변경 +chown <사용자_이름> <파일명> +chgrp <그룹_이름> <파일명> +``` + +### U-16: /etc/passwd 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/passwd +``` +**조치:** +```bash +chown root /etc/passwd +chmod 644 /etc/passwd +``` + +### U-17: 시스템 시작 스크립트 권한 설정 +**판단기준:** 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +# LINUX (init) +ls -al /etc/rc.d/*/* 2>/dev/null +# LINUX (systemd) +ls -al /etc/systemd/system/* 2>/dev/null +# SOLARIS +ls -al /etc/rc*.d/* 2>/dev/null +``` +**조치:** +```bash +chown root <파일_이름> +chmod o-w <파일_이름> +``` + +### U-18: /etc/shadow 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 400 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/shadow +# AIX +ls -l /etc/security/passwd +``` +**조치:** +```bash +# SOLARIS, LINUX +chown root /etc/shadow +chmod 400 /etc/shadow + +# AIX +chown root /etc/security/passwd +chmod 400 /etc/security/passwd +``` + +### U-19: /etc/hosts 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts +``` +**조치:** +```bash +chown root /etc/hosts +chmod 644 /etc/hosts +``` + +### U-20: /etc/(x)inetd.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root이고, 권한이 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/inetd.conf 2>/dev/null +ls -l /etc/xinetd.conf 2>/dev/null +ls -l /etc/xinetd.d/* 2>/dev/null +ls -l /etc/systemd/system.conf 2>/dev/null +``` +**조치:** +```bash +# inetd +chown root /etc/inetd.conf +chmod 600 /etc/inetd.conf + +# xinetd +chown root /etc/xinetd.conf +chmod 600 /etc/xinetd.conf +chown -R root /etc/xinetd.d/ +chmod -R 600 /etc/xinetd.d/ + +# systemd +chown root /etc/systemd/system.conf +chmod 600 /etc/systemd/system.conf +``` + +### U-21: /etc/(r)syslog.conf 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/syslog.conf /etc/rsyslog.conf 2>/dev/null +``` +**조치:** +```bash +chown root /etc/rsyslog.conf +chmod 640 /etc/rsyslog.conf +``` + +### U-22: /etc/services 파일 소유자 및 권한 설정 +**판단기준:** 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/services +``` +**조치:** +```bash +chown root /etc/services +chmod 644 /etc/services +``` + +### U-23: SUID, SGID, Sticky bit 설정 파일 점검 +**판단기준:** 주요 실행 파일의 권한에 불필요한 SUID/SGID가 부여되어 있지 않은 경우 양호 +**점검:** +```bash +find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +``` +**조치:** +```bash +# 불필요한 특수 권한 제거 +chmod -s <파일_이름> + +# 특정 그룹에서만 사용하도록 제한 +chgrp <그룹_이름> +chmod 4750 +``` + +### U-24: 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +**판단기준:** 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정이고, 소유자 외 쓰기 권한이 없는 경우 양호 +**점검:** +```bash +# 각 사용자 홈 디렉터리의 환경변수 파일 확인 +ls -la ~/.profile ~/.kshrc ~/.cshrc ~/.bashrc ~/.bash_profile ~/.login ~/.exrc ~/.netrc 2>/dev/null +``` +**조치:** +```bash +chown <환경변수_파일> +chmod o-w <환경변수_파일> +``` + +### U-25: world writable 파일 점검 +**판단기준:** world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 양호 +**점검:** +```bash +find / -type f -perm -2 -exec ls -l {} \; 2>/dev/null +``` +**조치:** +```bash +# 일반 사용자 쓰기 권한 제거 +chmod o-w <파일_이름> +# 불필요한 파일 제거 +rm <파일_이름> +``` + +### U-26: /dev에 존재하지 않는 device 파일 점검 +**판단기준:** /dev 디렉터리에 존재하지 않는 device 파일을 제거한 경우 양호 +**점검:** +```bash +find /dev -type f -exec ls -l {} \; +``` +**조치:** +```bash +rm <파일_이름> +``` + +### U-27: $HOME/.rhosts, hosts.equiv 사용 금지 +**판단기준:** rlogin/rsh/rexec 미사용 또는 사용 시 소유자 root, 권한 600 이하, "+" 설정 없는 경우 양호 +**점검:** +```bash +find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null +cat /etc/hosts.equiv 2>/dev/null +ls -la /etc/hosts.equiv 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.equiv +chmod 600 /etc/hosts.equiv +chown root $HOME/.rhosts +chmod 600 $HOME/.rhosts +# "+" 옵션 제거 후 허용 호스트 및 계정만 등록 +``` + +### U-28: 접속 IP 및 포트 제한 +**판단기준:** 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 양호 +**점검:** +```bash +# TCP Wrapper +cat /etc/hosts.allow 2>/dev/null +cat /etc/hosts.deny 2>/dev/null + +# iptables +iptables -L 2>/dev/null + +# firewalld +firewall-cmd --list-all 2>/dev/null + +# UFW +ufw status numbered 2>/dev/null +``` +**조치:** +```bash +# TCP Wrapper +echo "ALL:ALL" > /etc/hosts.deny +echo "sshd : <허용_IP>" >> /etc/hosts.allow + +# iptables +iptables -A INPUT -p tcp -s --dport <포트> -j ACCEPT +iptables-save + +# firewalld +firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="" port protocol="tcp" port="<포트>" accept' +firewall-cmd --reload + +# UFW +ufw allow from to any port <포트> +ufw reload +``` + +### U-29: hosts.lpd 파일 소유자 및 권한 설정 +**판단기준:** /etc/hosts.lpd 파일이 존재하지 않거나, 소유자 root이고 권한 600 이하인 경우 양호 +**점검:** +```bash +ls -l /etc/hosts.lpd 2>/dev/null +``` +**조치:** +```bash +chown root /etc/hosts.lpd +chmod 600 /etc/hosts.lpd +``` + +### U-30: UMASK 설정 관리 +**판단기준:** UMASK 값이 022 이상으로 설정된 경우 양호 +**점검:** +```bash +umask +grep -i umask /etc/profile /etc/bashrc /etc/login.defs 2>/dev/null +# SOLARIS +grep UMASK /etc/default/login 2>/dev/null +``` +**조치:** +```bash +# /etc/profile에 추가 +echo "umask 022" >> /etc/profile +echo "export umask" >> /etc/profile + +# LINUX - /etc/login.defs +sed -i 's/^UMASK.*/UMASK 022/' /etc/login.defs + +# SOLARIS - /etc/default/login +echo "UMASK=022" >> /etc/default/login + +# FTP umask 설정 +# vsFTP: vsftpd.conf -> local_umask=022 +# ProFTP: proftpd.conf -> Umask 022 +``` + +### U-31: 홈디렉토리 소유자 및 권한 설정 +**판단기준:** 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 양호 +**점검:** +```bash +cat /etc/passwd | awk -F: '{print $1" "$6}' | while read user dir; do + ls -ald "$dir" 2>/dev/null +done +``` +**조치:** +```bash +chown <사용자_이름> <홈_디렉터리> +chmod o-w <홈_디렉터리> +``` + +### U-32: 홈 디렉토리로 지정한 디렉토리의 존재 관리 +**판단기준:** 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 양호 +**점검:** +```bash +awk -F: '{print $1" "$6}' /etc/passwd | while read user dir; do + [ ! -d "$dir" ] && echo "$user : $dir 존재하지 않음" +done +``` +**조치:** +```bash +# 불필요한 계정 삭제 +userdel <사용자_이름> +# 사용중인 계정의 홈 디렉터리 생성 +mkdir -p /home/<사용자_이름> +chown <사용자_이름> /home/<사용자_이름> +``` + +### U-33: 숨겨진 파일 및 디렉토리 검색 및 제거 +**판단기준:** 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 양호 +**점검:** +```bash +find / -type f -name ".*" 2>/dev/null +find / -type d -name ".*" 2>/dev/null +``` +**조치:** +```bash +rm <파일_이름> +rm -r <디렉터리_이름> +``` + +--- + +## 3. 서비스 관리 + +### U-34: Finger 서비스 비활성화 +**판단기준:** Finger 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep finger +# SOLARIS (5.10+) +inetadm | grep finger 2>/dev/null +# inetd +grep finger /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/finger 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop finger.socket 2>/dev/null +systemctl disable finger.socket 2>/dev/null + +# xinetd +# /etc/xinetd.d/finger -> disable = yes +systemctl restart xinetd + +# inetd - finger 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/finger:default +``` + +### U-35: 공유 서비스에 대한 익명 접근 제한 설정 +**판단기준:** 공유 서비스에 대해 익명 접근을 제한한 경우 양호 +**점검:** +```bash +# FTP 익명 계정 확인 +grep -E "^ftp|^anonymous" /etc/passwd + +# vsFTP +grep anonymous_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# ProFTP +sed -n '//,/<\/Anonymous>/p' /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null + +# NFS 익명 접근 +grep -E "anonuid|anongid" /etc/exports 2>/dev/null + +# Samba +grep "guest ok" /etc/samba/smb.conf 2>/dev/null +``` +**조치:** +```bash +# FTP 익명 계정 제거 +userdel ftp +userdel anonymous + +# vsFTP - /etc/vsftpd/vsftpd.conf +# anonymous_enable=NO +systemctl restart vsftpd + +# NFS - /etc/exports에서 anon 옵션 제거 +exportfs -ra + +# Samba - /etc/samba/smb.conf +# guest ok = no +smbcontrol all reload-config +``` + +### U-36: r 계열 서비스 비활성화 +**판단기준:** 불필요한 r 계열 서비스(rlogin, rsh, rexec)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "rlogin|rsh|rexec" +# inetd +grep -E "rlogin|rsh|rexec|shell|login|exec" /etc/inetd.conf 2>/dev/null +# SOLARIS (5.10+) +inetadm | egrep "shell|rlogin|rexec" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop rlogin.socket rsh.socket rexec.socket 2>/dev/null +systemctl disable rlogin.socket rsh.socket rexec.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS (5.10+) +inetadm -d svc:/network/login:rlogin +inetadm -d svc:/network/shell:default +inetadm -d svc:/network/rexec:default +``` + +### U-37: crontab 설정파일 권한 설정 미흡 +**판단기준:** crontab/at 명령어 권한 750 이하, cron/at 관련 파일 권한 640 이하인 경우 양호 +**점검:** +```bash +ls -l /usr/bin/crontab +ls -l /usr/bin/at +ls -l /var/spool/cron/ 2>/dev/null +ls -l /var/spool/cron/crontabs/ 2>/dev/null +ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny 2>/dev/null +``` +**조치:** +```bash +# crontab/at 명령어 권한 설정 +chown root /usr/bin/crontab +chmod 750 /usr/bin/crontab +chown root /usr/bin/at +chmod 750 /usr/bin/at + +# cron 관련 파일 권한 설정 +chmod 640 /etc/cron.allow /etc/cron.deny 2>/dev/null +chmod 640 /etc/at.allow /etc/at.deny 2>/dev/null +``` + +### U-38: DoS 공격에 취약한 서비스 비활성화 +**판단기준:** echo, discard, daytime, chargen 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "echo|discard|daytime|chargen" +# inetd +grep -E "echo|discard|daytime|chargen" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep enable | egrep "echo|discard|daytime|chargen" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null +systemctl disable echo.socket discard.socket daytime.socket chargen.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬> +``` + +### U-39: 불필요한 NFS 서비스 비활성화 +**판단기준:** 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep nfs +# AIX +ps -ef | grep nfsd +lssrc -a | grep nfs 2>/dev/null +# SOLARIS +inetadm | egrep "nfs|statd|lockd" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop nfs-server +systemctl disable nfs-server + +# SOLARIS +inetadm -d + +# AIX +stopsrc -g nfs + +# HP-UX +# /etc/rc.config.d/nfsconf -> NFS_SERVER=0 +``` + +### U-40: NFS 접근 통제 +**판단기준:** 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX +ls -l /etc/exports +cat /etc/exports +showmount -e 2>/dev/null + +# SOLARIS +ls -l /etc/dfs/dfstab 2>/dev/null +cat /etc/dfs/dfstab 2>/dev/null +``` +**조치:** +```bash +# LINUX +chown root /etc/exports +chmod 644 /etc/exports +# /etc/exports 예시: /home/share host1(ro,root_squash) +exportfs -ra + +# SOLARIS +chown root /etc/dfs/dfstab +chmod 644 /etc/dfs/dfstab +# /etc/dfs/dfstab 예시: share -F nfs -o rw=client1:client2,ro=client1:client2 /export/home +shareall +``` + +### U-41: 불필요한 automountd 제거 +**판단기준:** automountd 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "automount|autofs" +# SOLARIS +svcs -a | grep autofs 2>/dev/null +# AIX +ps -ef | grep automountd +``` +**조치:** +```bash +# LINUX +systemctl stop autofs +systemctl disable autofs + +# SOLARIS +svcadm disable svc:/system/filesystem/autofs:default + +# HP-UX +# /etc/rc.config.d/nfsconf -> AUTOFS=0 +``` + +### U-42: 불필요한 RPC 서비스 비활성화 +**판단기준:** 불필요한 RPC 서비스(rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd 등)가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep rpc +# inetd +grep -E "rpc\." /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | grep rpc | grep enabled | egrep "ttdbserver|rex|rstart|rusers|spray|wall|rquota" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop <서비스명> +systemctl disable <서비스명> + +# inetd - 해당 RPC 서비스 항목 주석 처리 +# SOLARIS +svcadm disable <서비스_데몬> +``` + +### U-43: NIS, NIS+ 점검 +**판단기준:** NIS 서비스가 비활성화되어 있거나, 불가피 시 NIS+ 서비스를 사용하는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated" +# SOLARIS +svcs -a | grep nis 2>/dev/null +# AIX +lssrc -a | grep -E "ypserv|ypbind" 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop ypserv ypbind 2>/dev/null +systemctl disable ypserv ypbind 2>/dev/null + +# SOLARIS +svcadm disable + +# HP-UX - /etc/rc.config.d/namesrvs +# NIS_MASTER_SERVER=0 +# NIS_SLAVE_SERVER=0 +# NIS_CLIENT_SERVER=0 +``` + +### U-44: tftp, talk 서비스 비활성화 +**판단기준:** tftp, talk, ntalk 서비스가 비활성화된 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=service | grep -E "tftp|talk|ntalk" +# inetd +grep -E "tftp|talk|ntalk" /etc/inetd.conf 2>/dev/null +# SOLARIS +inetadm | egrep "tftp|talk" 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop tftp.socket talk.socket ntalk.socket 2>/dev/null +systemctl disable tftp.socket talk.socket ntalk.socket 2>/dev/null + +# inetd - 해당 서비스 항목 주석 처리 +# SOLARIS +inetadm -d <서비스_데몬명> +``` + +### U-45: 메일 서비스 버전 점검 +**판단기준:** 메일 서비스 버전이 최신 버전인 경우 양호 +**점검:** +```bash +# Sendmail +sendmail -d0 -bt < /dev/null 2>&1 | grep Version +# Postfix +postconf mail_version 2>/dev/null +# Exim +exim -bV 2>/dev/null +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop sendmail postfix 2>/dev/null +systemctl disable sendmail postfix 2>/dev/null + +# 사용 시 최신 버전으로 패치 적용 +# Sendmail: http://www.sendmail.org/ +# Postfix: https://www.postfix.org/packages.html +# Exim: https://www.exim.org/ +``` + +### U-46: 일반 사용자의 메일 서비스 실행 방지 +**판단기준:** 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf 2>/dev/null +# Postfix +ls -l /usr/sbin/postsuper 2>/dev/null +# Exim +ls -l /usr/sbin/exiqgrep 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun + +# Postfix +chmod o-x /usr/sbin/postsuper + +# Exim +chmod o-x /usr/sbin/exiqgrep +``` + +### U-47: 스팸 메일 릴레이 제한 +**판단기준:** 릴레이 제한이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep "promiscuous_relay" /etc/mail/sendmail.mc 2>/dev/null +cat /etc/mail/access 2>/dev/null +# Postfix +grep -E "smtpd_recipient_restrictions|mynetworks" /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "relay_from_hosts|hosts =" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.mc에서 promiscuous_relay 제거 +# FEATURE(`promiscuous_relay')dnl 삭제 +m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +# /etc/mail/access에 허용/차단 설정 +makemap hash /etc/mail/access.db < /etc/mail/access +systemctl restart sendmail + +# Postfix - /etc/postfix/main.cf +# mynetworks = <허용할_네트워크> +postfix reload + +# Exim - /etc/exim/exim.conf +# hostlist relay_from_hosts = <허용할_네트워크> +systemctl restart exim +``` + +### U-48: expn, vrfy 명령어 제한 +**판단기준:** noexpn, novrfy 옵션이 설정된 경우 양호 +**점검:** +```bash +# Sendmail +grep PrivacyOptions /etc/mail/sendmail.cf +# Postfix +grep disable_vrfy_command /etc/postfix/main.cf 2>/dev/null +# Exim +grep -E "acl_smtp_vrfy|acl_smtp_expn" /etc/exim/exim.conf /etc/exim4/exim4.conf 2>/dev/null +``` +**조치:** +```bash +# Sendmail - /etc/mail/sendmail.cf +# PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +# 또는 PrivacyOptions = restrictqrun, goaway + +# Postfix - /etc/postfix/main.cf +# disable_vrfy_command = yes +postfix reload + +# Exim - acl_smtp_vrfy, acl_smtp_expn 설정 제거/주석 처리 +``` + +### U-49: DNS 보안 버전 패치 +**판단기준:** 주기적으로 패치를 관리하는 경우 양호 +**점검:** +```bash +named -v 2>/dev/null +# LINUX +systemctl list-units --type=service | grep named +``` +**조치:** +```bash +# 미사용 시 비활성화 +systemctl stop named +systemctl disable named + +# 사용 시 최신 버전 패치 +# ISC BIND: https://www.isc.org/downloads/ +# 취약점 정보: https://kb.isc.org/v1/docs/en/aa-00913 +``` + +### U-50: DNS ZoneTransfer 설정 +**판단기준:** Zone Transfer를 허가된 사용자에게만 허용한 경우 양호 +**점검:** +```bash +grep allow-transfer /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +grep xfrnets /etc/named.boot /etc/bind/named.boot 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf (또는 /etc/bind/named.conf.options) 수정 +# allow-transfer { <허용할_IP>; }; +systemctl restart named +``` + +### U-51: DNS 서비스의 취약한 동적 업데이트 설정 금지 +**판단기준:** 동적 업데이트 기능이 비활성화되었거나, 적절한 접근통제를 수행하는 경우 양호 +**점검:** +```bash +grep allow-update /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# /etc/named.conf 수정 +# 불필요 시: allow-update { none; }; +# 필요 시: allow-update { <허용할_IP>; }; +systemctl restart named +``` + +### U-52: Telnet 서비스 비활성화 +**판단기준:** Telnet 프로토콜을 비활성화하고 있는 경우 양호 +**점검:** +```bash +# LINUX (systemd) +systemctl list-units --type=socket | grep telnet +# inetd +grep telnet /etc/inetd.conf 2>/dev/null +# xinetd +cat /etc/xinetd.d/telnet 2>/dev/null +# SOLARIS +svcs -a | grep telnet 2>/dev/null +``` +**조치:** +```bash +# LINUX (systemd) +systemctl stop telnet.socket +systemctl disable telnet.socket +systemctl start sshd + +# xinetd - /etc/xinetd.d/telnet -> disable = yes +systemctl restart xinetd + +# SOLARIS +svcadm disable svc:/network/telnet:default +svcadm enable ssh +``` + +### U-53: FTP 서비스 정보 노출 제한 +**판단기준:** FTP 접속 배너에 노출되는 정보가 없는 경우 양호 +**점검:** +```bash +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +# ProFTP +grep ServerIdent /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only +systemctl restart vsftpd + +# ProFTP - /etc/proftpd/proftpd.conf +# ServerIdent off +# 또는 ServerIdent on "Authorized access only" +systemctl restart proftpd +``` + +### U-54: 암호화되지 않는 FTP 서비스 비활성화 +**판단기준:** 암호화되지 않은 FTP 서비스가 비활성화된 경우 양호 (SFTP 사용 권고) +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep -E "vsftpd|proftpd" +# inetd +grep "^ftp" /etc/inetd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX +systemctl stop vsftpd proftpd 2>/dev/null +systemctl disable vsftpd proftpd 2>/dev/null + +# inetd - ftp 항목 주석 처리 +``` + +### U-55: FTP 계정 shell 제한 +**판단기준:** FTP 계정에 /bin/false 또는 /sbin/nologin 쉘이 부여된 경우 양호 +**점검:** +```bash +grep "^ftp" /etc/passwd +``` +**조치:** +```bash +usermod -s /bin/false ftp +# 또는 +usermod -s /sbin/nologin ftp +``` + +### U-56: FTP 서비스 접근 제어 설정 +**판단기준:** 특정 IP주소/호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 양호 +**점검:** +```bash +# ftpusers 파일 +cat /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null +ls -l /etc/ftpusers /etc/ftpd/ftpusers 2>/dev/null + +# vsFTP +grep userlist_enable /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null +cat /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep UseFtpUsers /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일 권한 설정 +chown root /etc/ftpusers +chmod 640 /etc/ftpusers + +# vsFTP - user_list 방식 +# /etc/vsftpd/vsftpd.conf +# userlist_enable=YES +# userlist_deny=YES (목록 사용자 차단) 또는 NO (목록 사용자만 허용) + +# ProFTP - proftpd.conf 접근제한 +# +# Order Deny,Allow +# AllowUser <사용자> 또는 Allow from +# DenyUser <사용자> 또는 Deny from +# +``` + +### U-57: Ftpusers 파일 설정 (root 계정 접근 제한) +**판단기준:** root 계정 접속을 차단한 경우 양호 +**점검:** +```bash +# ftpusers 파일에 root가 등록되어 있는지 확인 +grep "^root" /etc/ftpusers /etc/ftpd/ftpusers /etc/vsftpd/ftpusers /etc/vsftpd/user_list 2>/dev/null + +# ProFTP +grep RootLogin /etc/proftpd.conf /etc/proftpd/proftpd.conf 2>/dev/null +``` +**조치:** +```bash +# ftpusers 파일에 root 추가 (주석 해제) +# 해당 파일에서 #root -> root 로 변경 + +# ProFTP - /etc/proftpd/proftpd.conf +# RootLogin off +systemctl restart proftpd +``` + +### U-58: 불필요한 SNMP 서비스 구동 점검 +**판단기준:** SNMP 서비스를 사용하지 않는 경우 양호 +**점검:** +```bash +# LINUX +systemctl list-units --type=service | grep snmpd +# SOLARIS +svcs -a | grep snmp 2>/dev/null +# AIX +lssrc -a | grep snmp 2>/dev/null +# 프로세스 확인 +ps -ef | grep snmp +``` +**조치:** +```bash +# LINUX +systemctl stop snmpd +systemctl disable snmpd + +# SOLARIS (5.10+) +svcadm disable svc:/application/management/snmpd:default + +# AIX +stopsrc -s snmpd +# /etc/rc.tcpip에서 snmpd 주석 처리 +``` + +### U-59: 안전한 SNMP 버전 사용 +**판단기준:** SNMP 서비스를 v3 이상으로 사용하는 경우 양호 +**점검:** +```bash +# SNMPv3 사용 여부 확인 +snmpwalk -v3 -l authPriv -u <사용자> -a SHA -A <인증암호> -x AES -X <암호화암호> <서버IP> 2>/dev/null +grep -E "rouser|rwuser|createUser" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# SNMPv3 사용자 생성 +net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser + +# /etc/snmp/snmpd.conf에 추가 +# createUser myuser SHA myauthpass AES myprivpass +# rouser myuser + +systemctl restart snmpd +``` + +### U-60: SNMP Community String 복잡성 설정 +**판단기준:** Community String이 "public", "private"이 아니고 영숫자 10자리 이상 또는 영숫자+특수문자 8자리 이상인 경우 양호 +**점검:** +```bash +grep -i community /etc/snmp/snmpd.conf 2>/dev/null +# AIX +grep -i community /etc/snmpdv3.conf 2>/dev/null +# HP-UX +grep -i community /etc/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser default <복잡한_String값> +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <복잡한_String값> default +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY <새_String> <새_String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-61: SNMP Access Control 설정 +**판단기준:** SNMP 서비스에 접근 제어 설정이 되어 있는 경우 양호 +**점검:** +```bash +# LINUX (Redhat) +grep "com2sec" /etc/snmp/snmpd.conf 2>/dev/null +# LINUX (Debian) +grep -E "rocommunity|rwcommunity" /etc/snmp/snmpd.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat) - /etc/snmp/snmpd.conf +# com2sec notConfigUser <허용_네트워크> + +# LINUX (Debian) - /etc/snmp/snmpd.conf +# rocommunity <허용_네트워크> + +systemctl restart snmpd + +# AIX - /etc/snmpdv3.conf +# COMMUNITY noAuthNoPriv <허용_IP> <넷마스크> - +stopsrc -s snmpd && startsrc -s snmpd +``` + +### U-62: 로그인 시 경고 메시지 설정 +**판단기준:** 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 양호 +**점검:** +```bash +# 서버 로그온 배너 +cat /etc/motd 2>/dev/null +cat /etc/issue 2>/dev/null +cat /etc/issue.net 2>/dev/null + +# SSH 배너 +grep "^Banner" /etc/ssh/sshd_config + +# Sendmail +grep SmtpGreetingMessage /etc/mail/sendmail.cf 2>/dev/null + +# Postfix +grep smtpd_banner /etc/postfix/main.cf 2>/dev/null + +# vsFTP +grep ftpd_banner /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf 2>/dev/null + +# DNS +grep "version" /etc/named.conf /etc/bind/named.conf.options 2>/dev/null +``` +**조치:** +```bash +# 서버 경고 메시지 +echo "Authorized access only. All activity is monitored." > /etc/motd +echo "Authorized access only." > /etc/issue +echo "Authorized access only." > /etc/issue.net + +# SSH - /etc/ssh/sshd_config +# Banner /etc/issue.net +systemctl restart sshd + +# Sendmail - /etc/mail/sendmail.cf +# SmtpGreetingMessage=Authorized access only + +# Postfix - /etc/postfix/main.cf +# smtpd_banner = Authorized access only + +# vsFTP - /etc/vsftpd/vsftpd.conf +# ftpd_banner=Authorized access only + +# DNS - /etc/named.conf +# version "Not disclosed"; +``` + +### U-63: sudo 명령어 접근 관리 +**판단기준:** /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 양호 +**점검:** +```bash +ls -l /etc/sudoers +``` +**조치:** +```bash +chown root /etc/sudoers +chmod 640 /etc/sudoers +``` + +--- + +## 4. 패치 관리 + +### U-64: 주기적 보안 패치 및 벤더 권고사항 적용 +**판단기준:** 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있는 경우 양호 +**점검:** +```bash +# OS 및 커널 버전 확인 +uname -a +cat /etc/os-release 2>/dev/null +hostnamectl 2>/dev/null + +# 패치 이력 확인 (LINUX) +rpm -qa --last | head -20 2>/dev/null +apt list --upgradable 2>/dev/null + +# SOLARIS +pkg list -af entire@latest 2>/dev/null + +# AIX +oslevel -s +instfix -i | grep ML 2>/dev/null +instfix -i | grep SP 2>/dev/null + +# HP-UX +swlist -l product 2>/dev/null +``` +**조치:** +```bash +# LINUX (Redhat/CentOS) +yum update -y +# LINUX (Debian/Ubuntu) +apt update && apt upgrade -y + +# SOLARIS +pkg update --accept + +# AIX - smitty installp를 통한 패치 설치 + +# HP-UX +# swinstall -s /tmp/patch.depot +``` + +--- + +## 5. 로그 관리 + +### U-65: NTP 및 시각 동기화 설정 +**판단기준:** NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 양호 +**점검:** +```bash +# NTP +ntpq -pn 2>/dev/null +cat /etc/ntp.conf 2>/dev/null + +# Chrony (RHEL 8+) +chronyc sources 2>/dev/null +cat /etc/chrony.conf 2>/dev/null +``` +**조치:** +```bash +# NTP - /etc/ntp.conf +# server +systemctl restart ntp 2>/dev/null || systemctl restart ntpd 2>/dev/null + +# Chrony - /etc/chrony.conf +# server +systemctl restart chronyd +``` + +### U-66: 정책에 따른 시스템 로깅 설정 +**판단기준:** 로그 기록 정책이 보안 정책에 따라 수립되어 있으며, 로그를 남기고 있는 경우 양호 +**점검:** +```bash +# LINUX +cat /etc/rsyslog.conf 2>/dev/null +ls /etc/rsyslog.d/ 2>/dev/null + +# SOLARIS +cat /etc/syslog.conf 2>/dev/null + +# AIX +cat /etc/syslog.conf 2>/dev/null +``` +**조치:** +```bash +# LINUX - /etc/rsyslog.conf 권장 설정 +cat >> /etc/rsyslog.conf <<'CONF' +*.info;mail.none;authpriv.none;cron.none /var/log/messages +authpriv.* /var/log/secure +mail.* /var/log/maillog +cron.* /var/log/cron +*.emerg * +CONF +systemctl restart rsyslog + +# SOLARIS - /etc/syslog.conf 권장 설정 +# mail.debug /var/log/mail.log +# *.info /var/log/syslog.log +# *.alert /dev/console +# *.emerg * + +# AIX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/error.log +# mail.info /var/adm/mail.log +# auth.info /var/adm/auth.log +# refresh -s syslogd + +# HP-UX - /etc/syslog.conf 권장 설정 +# *.emerg * +# *.alert /dev/console +# *.err /var/adm/syslog/error.log +# mail.info /var/adm/syslog/mail.log +# auth.info /var/adm/syslog/auth.log +``` + +### U-67: 로그 디렉터리 소유자 및 권한 설정 +**판단기준:** 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 양호 +**점검:** +```bash +# LINUX, SOLARIS +ls -la /var/log/ +# AIX +ls -la /var/adm/ 2>/dev/null +# HP-UX +ls -la /var/adm/syslog/ 2>/dev/null +``` +**조치:** +```bash +# LINUX, SOLARIS +chown root /var/log/* +chmod 644 /var/log/* + +# AIX +chown root /var/adm/* +chmod 644 /var/adm/* + +# HP-UX +chown root /var/adm/syslog/* +chmod 644 /var/adm/syslog/* +``` diff --git a/skills/kesekit-start/scripts/cii/web-service.md b/skills/kesekit-start/scripts/cii/web-service.md new file mode 100644 index 0000000..d70ca7c --- /dev/null +++ b/skills/kesekit-start/scripts/cii/web-service.md @@ -0,0 +1,725 @@ +# 웹 서비스 점검 스크립트 (WEB-01 ~ WEB-26) + +## 1. 계정 관리 + +### WEB-01: Default 관리자 계정명 변경 +**점검:** +```bash +# Tomcat - 기본 계정명(tomcat, admin) 사용 여부 확인 +grep -i 'username=' /conf/server.xml +# JEUS - Security Domains > Account & Policies > Users에서 기본 계정 확인 +``` +**조치:** +```bash +# Tomcat - 기본 계정명을 유추 불가능한 이름으로 변경 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > ADD +# administrator 대신 유추 불가능한 계정명 입력 후 Administrators 그룹 체크 +./stopServer -host <도메인명>:<포트> +./startDomainAdminServer -host <도메인명>:<포트> +``` + +### WEB-02: 취약한 비밀번호 사용 제한 +**점검:** +```bash +# Tomcat +grep -i 'password=' /conf/server.xml +# 비밀번호 복잡도 기준: 2종류 이상 조합 최소 10자리 또는 3종류 이상 조합 최소 8자리 +# (영문대/소문자, 숫자, 특수문자) +``` +**조치:** +```bash +# Tomcat - 복잡도 만족하는 비밀번호 설정 +vi /conf/server.xml +# +systemctl restart tomcat + +# JEUS - Lock & EDIT > Security > Security Domains > Users > 비밀번호 변경 +# SHA-256 이상 암호화 방식 비밀번호 설정 +``` + +### WEB-03: 비밀번호 파일 권한 관리 +**점검:** +```bash +# Tomcat +ls -al /conf/tomcat-users.xml +# IIS +# %systemroot%\system32\config\SAM 파일 속성 > 보안 확인 +# JEUS +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +ls -al /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` +**조치:** +```bash +# Tomcat - 비밀번호 파일 권한 600 이하 설정 +chmod 600 /conf/tomcat-users.xml + +# IIS - SAM 파일 속성 > 보안 > 편집 > Administrators, SYSTEM만 허용 + +# JEUS +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +chmod 600 /jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +``` + +--- + +## 2. 서비스 관리 + +### WEB-04: 디렉터리 리스팅 방지 설정 +**점검:** +```bash +# Apache +grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" +# Nginx +grep -i "autoindex" /etc/nginx/nginx.conf +# Tomcat +grep -i "listings" /conf/web.xml +# JEUS +grep -i "allow-indexing" /WEB-INF/jeus-web-dd.xml +# WebtoB +grep -i "Options" /config/http.m | grep -i "Indexes" +``` +**조치:** +```bash +# Apache - httpd.conf 내 모든 디렉터리에서 Indexes 옵션 제거 +vi /conf/httpd.conf +# +# Options -Indexes (Indexes 삭제 또는 -Indexes 설정) +# +systemctl restart apache2 + +# Tomcat - web.xml 내 listings=false 설정 +vi /conf/web.xml +# +# listings +# false +# + +# Nginx - autoindex off 설정 +vi /conf/nginx.conf +# server { autoindex off; } +systemctl restart nginx + +# IIS - IIS 관리자 > 해당 웹사이트 > 디렉터리 검색 > "사용 안 함" 설정 + +# JEUS +vi /WEB-INF/jeus-web-dd.xml +# false + +# WebtoB +vi /config/http.m +# *NODE +# Options = "-Indexes", +wscfl -I http.m && wsdown && wsboot +``` + +### WEB-05: 지정하지 않은 CGI/ISAPI 실행 제한 +**점검:** +```bash +# Apache +grep -i "LoadModule.*cgi" /conf/httpd.conf +grep -i "ExecCGI" /conf/httpd.conf +# Nginx +grep -i "fastcgi_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - CGI 모듈 비활성화 및 ExecCGI 옵션 제거 +vi /conf/httpd.conf +# #LoadModule cgi_module modules/mod_cgi.so +# #LoadModule cgid_module modules/mod_cgid.so +# +# Options -ExecCGI +# +systemctl restart apache2 + +# Tomcat - web.xml 내 CGI 매핑 비활성화(주석 처리) +# + +# Nginx - fastcgi 설정 주석 처리 +# location ~ \.cgi$ { +# #fastcgi_pass :<포트>; +# #include fastcgi_params; +# } + +# IIS - ISAPI 및 CGI 제한 > 사용하지 않는 CGI/ISAPI 모듈 해제 + +# WebtoB - http.m 내 *SVRGROUP, *SERVER, *URI에서 CGI 설정 주석 처리 +``` + +### WEB-06: 상위 디렉터리 접근 제한 설정 +**점검:** +```bash +# Apache +grep -i "AllowOverride" /conf/httpd.conf +# Tomcat +grep -i "allowLinking" /conf/server.xml +# Nginx +grep -i "auth_basic" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - AllowOverride AuthConfig 설정 + .htaccess 인증 파일 생성 +vi /conf/httpd.conf +# +# AllowOverride AuthConfig +# +htpasswd /.htpasswd [사용자명] +systemctl restart apache2 + +# Tomcat - allowLinking 옵션 제거 +vi /conf/server.xml +# (allowLinking="true" 제거) + +# Nginx - 기본 인증으로 디렉터리 접근 제한 +# location /<접근제한 디렉터리>/ { +# auth_basic "Restricted Content"; +# auth_basic_user_file /etc/nginx/.htpasswd; +# } + +# IIS 7.0+ - web.config 내 enableParentPaths="false" 설정 +# + +# WebtoB - UpperDirRestrict = N 설정 +``` + +### WEB-07: 웹 서비스 경로 내 불필요한 파일 제거 +**점검/조치:** +```bash +# Apache +rm -rf /htdocs/manual +rm -rf /manual + +# Tomcat +rm -rf /webapps/docs/<불필요 파일> +# BUILDING.txt, RELEASE-NOTES.txt 등 매뉴얼 파일 포함 + +# Nginx +rm -rf /html/index.html + +# IIS - 샘플 디렉터리 제거 +# c:\inetpub\iissamples +# c:\winnt\help\iishelp +# c:\program files\common files\system\msadc\sample + +# JEUS +rm -rf /docs/manuals/default/web-manager/<불필요 파일> +rm -rf /samples/<불필요 파일> + +# WebtoB +rm -rf /docs/manuals/<불필요 파일> +rm -rf /samples/<불필요 파일> +``` + +### WEB-08: 파일 업로드 및 다운로드 용량 제한 +**점검:** +```bash +# Apache +grep -i "LimitRequestBody" /conf/httpd.conf +# Tomcat +grep -i "maxPostSize" /conf/server.xml +# Nginx +grep -i "client_max_body_size" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - LimitRequestBody 지시자 설정 (5MB = 5000000) +# +# LimitRequestBody 5000000 +# + +# Tomcat - server.xml 내 maxPostSize 설정 + web.xml 내 multipart-config 설정 +# +# +# 2097152 +# 4194304 +# + +# Nginx - client_max_body_size 설정 +# client_max_body_size 5M; +systemctl restart nginx + +# IIS - web.config 내 maxAllowedContentLength 설정 (기본값 30MB) +# applicationHost.config 내 bufferingLimit(4MB) 및 maxRequestEntityAllowed(0.2MB) 설정 + +# JEUS - web.xml 내 max-file-size 설정 +# 5242880 + +# WebtoB - LimitRequestBody 설정 +# LimitRequestBody = 2048000 +``` + +### WEB-09: 웹 서비스 프로세스 권한 제한 +**점검:** +```bash +# 프로세스 실행 계정 확인 +ps -ef | grep httpd | grep -v root +ps -ef | grep nginx +ps -ef | grep tomcat +ps -ef | grep jeus +``` +**조치:** +```bash +# Apache - www-data 계정으로 실행 +vi /envvars +# export APACHE_RUN_USER=www-data +# export APACHE_RUN_GROUP=www-data +chown -R www-data:www-data /etc/apache2/ /var/www/ /var/log/apache2/ +usermod -s /sbin/nologin www-data +systemctl restart apache2 + +# Tomcat - tomcat 전용 계정으로 실행 +vi /etc/systemd/system/tomcat.service +# [Service] +# User=tomcat +# Group=tomcat +chown -R tomcat:tomcat / +usermod -s /sbin/nologin tomcat +systemctl restart tomcat + +# Nginx - nginx 전용 계정으로 실행 +vi /conf/nginx.conf +# user nginx nginx; +adduser --system --no-create-home --shell /bin/false nginx +groupadd nginx && usermod -aG nginx nginx +systemctl restart nginx + +# IIS - 응용프로그램 풀 ID를 ApplicationPoolIdentity로 설정 + +# JEUS - jeus 전용 계정 생성 후 소유권 변경 +useradd -m jeus +chown -R jeus:jeus / +``` + +### WEB-10: 불필요한 프록시 설정 제한 +**점검:** +```bash +# Apache +grep -i "ProxyPass\|ProxyRequests" /conf/httpd.conf +# Tomcat +grep -i "proxyName\|proxyPort" /conf/server.xml +# Nginx +grep -i "proxy_pass" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - 불필요한 Proxy 설정 제거, ProxyRequests Off 유지 +# +# ProxyRequests Off +# + +# Tomcat - Connector 요소에서 불필요한 proxyName, proxyPort 제거 +# Nginx - 불필요한 proxy_pass 설정 제거 +# IIS - 루트 디렉터리에서 불필요한 Proxy 설정 제거 +# JEUS - web.xml 내 불필요한 ReverseProxy 설정 제거 +# WebtoB - http.m 내 REVERSE_PROXY 설정 제거 +``` + +### WEB-11: 웹 서비스 경로 설정 +**조치:** +```bash +# Apache - DocumentRoot를 별도 경로로 변경 +# DocumentRoot [별도의 경로] + +# Tomcat - docBase를 별도 경로로 변경 +# + +# Nginx - root를 별도 경로로 변경 +# root [별도의 경로]; + +# IIS - 사이트 편집 > 실제 경로를 별도 경로로 변경 +# JEUS - Docroot = "[별도의 경로]" +# WebtoB - DOCROOT="[별도의 경로]" +``` + +### WEB-12: 웹 서비스 링크 사용 금지 +**조치:** +```bash +# Apache - FollowSymLinks 옵션 제거 +vi /conf/httpd.conf +# +# Options -FollowSymLinks +# + +# Tomcat - allowLinking 옵션 제거 (기본값: false) +# Nginx - disable_symlinks on 설정 +# location / { disable_symlinks on; } + +# IIS - 홈 디렉터리 내 바로가기 파일 제거 +# JEUS - jeus-web-dd.xml 내 alias 요소 제거 +# WebtoB - http.m 내 ALIAS 절 불필요 설정 제거 +``` + +### WEB-13: 웹 서비스 설정 파일 노출 제한 +**조치:** +```bash +# Tomcat - 불필요한 DB 연결 리소스 설정 제거 후 접근 권한 설정 +chmod 600 /conf/server.xml + +# IIS - 처리기 매핑에서 *.asa/*.asax 항목 제거 +# 요청 필터링에서 "파일 이름 확장명 거부"에 등록 + +# JEUS - domain.xml 내 불필요한 DB 연결 리소스 제거 +chmod 600 /conf/domain.xml +``` + +### WEB-14: 웹 서비스 경로 내 파일의 접근 통제 +**조치:** +```bash +# Apache +chown -R www-data:www-data /conf/apache2.conf +chmod -R 750 /conf/apache2.conf + +# Tomcat +chown -R tomcat:tomcat /conf/web.xml +chmod -R 750 /conf/web.xml + +# Nginx +chown -R nginx:nginx /conf/nginx.conf +chmod -R 750 /conf/nginx.conf + +# IIS - web.config > 속성 > 보안 > 불필요 권한 제거 + +# JEUS +chown -R jeus:jeus /config/security/SYSTEM_DOMAIN/accounts.xml +chmod -R 750 /config/security/SYSTEM_DOMAIN/accounts.xml + +# WebtoB +chown -R webtob:webtob /config/http.m +chmod -R 750 /config/http.m +``` + +### WEB-15: 불필요한 스크립트 매핑 제거 +**점검:** +```bash +# Tomcat - 불필요한 servlet-mapping 확인 +grep -A2 "servlet-mapping" /conf/web.xml +# IIS - 처리기 매핑에서 취약한 확장자 확인 +# (.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +``` +**조치:** +```bash +# Tomcat - 불필요한 servlet-mapping 제거 +# IIS - 처리기 매핑에서 미사용 확장자 매핑 제거 +# JEUS - web.xml 내 불필요한 제거 +``` + +### WEB-16: 웹 서비스 헤더 정보 노출 제한 +**점검:** +```bash +# Apache +grep -i "ServerTokens\|ServerSignature" /conf/httpd.conf +# Nginx +grep -i "server_tokens" /conf/nginx.conf +# WebtoB +grep -i "ServerTokens" /config/http.m +``` +**조치:** +```bash +# Apache - ServerTokens Prod, ServerSignature Off 설정 +vi /conf/httpd.conf +# ServerTokens Prod +# ServerSignature Off + +# Tomcat - server.xml 내 server 값을 임의 정보로 변경 +# +# + ErrorReportValve에 showServerInfo="false" 추가 +# + +# Nginx +# server_tokens off; + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS 7 이전 - JEUSMain.xml 내 command-option 추가 +# -Djeus.servlet.response.header.serverInfo=false +# JEUS 7 - domain.xml 내 response-header 설정 + +# WebtoB +# ServerTokens ProductOnly +# ServerSignature off +``` + +### WEB-17: 웹 서비스 가상 디렉터리 삭제 +**점검/조치:** +```bash +# Apache - 불필요한 Alias 지시자 확인 후 제거 +grep -i "Alias" /conf/httpd.conf + +# Tomcat - Context path 속성값 확인 후 불필요 제거 +grep -i "Context path" /conf/server.xml + +# Nginx - 불필요한 alias 지시자 제거 +grep -i "alias" /conf/nginx.conf + +# WebtoB - NODE절의 불필요한 Alias 설정 삭제 +grep -i "ALIAS" /config/http.m +``` + +### WEB-18: WebDAV 비활성화 +**점검:** +```bash +# Apache +grep -i "Dav On" /conf/httpd.conf +grep -i "LoadModule.*dav" /conf/httpd.conf +# Nginx +grep -i "dav_methods" /conf/nginx.conf +``` +**조치:** +```bash +# Apache - WebDAV 비활성화 +vi /conf/httpd.conf +# +# Dav Off +# +systemctl restart apache2 + +# Nginx - dav_methods 설정 주석 처리 또는 제거 +systemctl restart nginx + +# IIS - ISAPI 및 CGI 제한 > WebDAV 항목 > 확장 경로 실행 허용 체크 해제 + +# WebtoB - VHOST 절에서 PUT, DELETE, MKCOL, COPY, MOVE 메소드 제거 +``` + +--- + +## 3. 보안 설정 + +### WEB-19: SSI(Server Side Includes) 사용 제한 +**점검:** +```bash +# Apache +grep -i "Includes" /conf/httpd.conf +# Tomcat +grep -i "SSIServlet\|SSIFilter" /conf/web.xml +# Nginx +grep -i "ssi on" /conf/nginx.conf +# WebtoB +grep -i "SSI" /config/http.m +``` +**조치:** +```bash +# Apache - Options Includes 제거 +# Options (Includes 삭제) + +# Tomcat - SSI 서블릿/필터 설정 주석 처리 또는 삭제 +# Nginx - ssi off; 설정 +# IIS - 처리기 매핑에서 .shtml, .shtm, .stm 확장자 매핑 제거 +# WebtoB - *SVRGROUP, *SERVER에서 SSI 관련 설정 삭제 +``` + +### WEB-20: SSL/TLS 활성화 +**점검:** +```bash +# Apache +apache2ctl -M | grep ssl +# Nginx +grep -i "ssl_protocols" /conf/nginx.conf +# WebtoB +grep -i "SSLFLAG\|SSLNAME" /config/http.m +``` +**조치:** +```bash +# Apache - SSL 모듈 활성화 및 인증서 설정 +vi /sites-available/default-ssl.conf +# +# SSLEngine on +# SSLCertificateFile /path/to/cert.crt +# SSLCertificateKeyFile /path/to/privkey.key +# +a2ensite default-ssl +systemctl restart apache2 + +# Nginx - SSL 인증서 설정 +# server { +# listen 443 ssl; +# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; +# ssl_protocols TLSv1.2 TLSv1.3; +# ssl_prefer_server_ciphers on; +# } +systemctl restart nginx + +# IIS - SSL 인증서 바인딩 설정 (IIS 관리자 > 사이트 바인딩 > https 추가) + +# WebtoB - http.m 내 SSLFLAG = Y, SSLNAME 설정 +# *SSL 절에 인증서 경로 설정 +# Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3" +``` + +### WEB-21: HTTP 리디렉션 +**조치:** +```bash +# Apache - HTTP → HTTPS 리디렉션 설정 +# +# RewriteEngine On +# RewriteCond %{HTTPS} off +# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +# + +# Nginx +# server { +# listen 80; +# return 301 https://$host$request_uri; +# } + +# IIS - 사이트 바인딩 종류를 HTTPS로 설정 + +# WebtoB - URLRewrite = Y 설정 +# RewriteCond %{HTTPS} off +# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +``` + +### WEB-22: 에러 페이지 관리 +**조치:** +```bash +# Apache - 에러 코드별 일원화된 에러 페이지 설정 +vi /sites-available/000-default.conf +# ErrorDocument 400 /error.html +# ErrorDocument 401 /error.html +# ErrorDocument 403 /error.html +# ErrorDocument 404 /error.html +# ErrorDocument 500 /error.html +systemctl restart apache2 + +# Tomcat - web.xml 내 에러 페이지 설정 +# +# 404 +# /error/404.html +# + +# Nginx +# error_page 404 /404.html; +# error_page 500 502 503 504 /50x.html; +# location = /404.html { root html; internal; } + +# IIS - 오류 페이지 > 기능 설정 편집 > "사용자 지정 오류 페이지" 설정 + +# JEUS - web.xml 내 에러 메시지 설정 +# WebtoB - *ERRORDOCUMENT 절에 에러 페이지 설정 +# 503 status = 503, url = "/503.html" +``` + +### WEB-23: LDAP 알고리즘 적절하게 구성 +**점검:** +```bash +# Tomcat - 비밀번호 다이제스트 알고리즘 확인 +grep 'digest=' /conf/server.xml +``` +**조치:** +```bash +# Tomcat - SHA-256 이상 알고리즘 설정 +vi /conf/server.xml +# digest="SHA-256" +systemctl restart tomcat +``` + +--- + +## 4. 패치 및 로그 관리 + +### WEB-24: 별도의 업로드 경로 사용 및 권한 설정 +**조치:** +```bash +# Apache - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +# apache2.conf 내 업로드 디렉터리 접근 제한 +# +# Require all denied +# + +# Tomcat - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ + +# Nginx - 별도 업로드 경로 생성 및 권한 설정 +mkdir /var/www/html/uploads +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ + +# IIS - 웹 서비스 외부에 업로드 디렉터리 생성, IIS 구동 계정에 쓰기 권한 부여 + +# JEUS - 업로드 디렉터리 권한 설정 +chmod 750 +chown jeus:jeus + +# WebtoB - 업로드 디렉터리 권한 설정 +chmod 750 +chown tmax:tmax +``` + +### WEB-25: 주기적 보안 패치 및 벤더 권고사항 적용 +**점검:** +```bash +# Apache +/bin/httpd -v + +# Tomcat +cd /lib && java -cp catalina.jar org.apache.catalina.util.ServerInfo + +# Nginx +/sbin/nginx -v + +# IIS +reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v VersionString + +# JEUS +jeusadmin -version + +# WebtoB +wscfl -version +``` +**참고 사이트:** +- Apache: http://httpd.apache.org/download.cgi +- Tomcat: https://tomcat.apache.org/ +- Nginx: https://nginx.org/en/download.html +- IIS: https://www.iis.net/downloads/microsoft +- JEUS/WebtoB: https://technet.tmaxsoft.com/ + +### WEB-26: 로그 디렉터리 및 파일 권한 설정 +**점검:** +```bash +# Apache +ls -al / +# Tomcat +ls -al /logs/ +# Nginx +ls -al /var/log/nginx/ +# JEUS +ls -al /domains/jeus_domain/servers/sample/logs/ +# WebtoB +ls -al /log/ +``` +**조치:** +```bash +# Apache +chmod o-rwx /* + +# Tomcat +chmod o-rwx /logs/* + +# Nginx +chmod o-rwx /var/log/nginx/* + +# IIS - C:\Windows\System32\config 속성 > 보안 > Everyone 권한 제거 +# C:\Windows\System32\LogFiles에서도 동일 조치 + +# JEUS - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /domains/jeus_domain/servers/sample/logs +chmod 640 /domains/jeus_domain/servers/sample/logs/* + +# WebtoB - 로그 디렉터리 750, 로그 파일 640 +chmod 750 /log/ +chmod 640 /log/* +``` diff --git a/skills/kesekit-start/scripts/cii/webapp.md b/skills/kesekit-start/scripts/cii/webapp.md new file mode 100644 index 0000000..83e1041 --- /dev/null +++ b/skills/kesekit-start/scripts/cii/webapp.md @@ -0,0 +1,880 @@ +# Web Application 점검 스크립트 + +## 1. SSTI (Server Side Template Injection) +**취약 패턴:** +```python +# Python (Jinja2) - 사용자 입력을 직접 템플릿에 삽입 +template = param # 사용자 입력이 직접 템플릿으로 사용됨 +return render_template_string(template) +``` +**안전한 구현:** +```python +# Python (Jinja2) - 사용자 입력을 템플릿 변수로 전달 +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +``` + +--- + +## 2. SQL Injection (SI) + +### 취약 패턴 +```java +// Java - 문자열 연결 방식 쿼리 (취약) +String sql = "SELECT * FROM users WHERE username = '" + userInput + "'"; +Statement stmt = connection.createStatement(); +ResultSet rs = stmt.executeQuery(sql); +``` + +### 안전한 구현 - PreparedStatement (Java) +```java +// Java - PreparedStatement 사용 +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +ResultSet resultSet = preparedStatement.executeQuery(); +``` + +### 안전한 구현 - ORM (JPA/Hibernate) +```java +// Java - JPQL 파라미터 바인딩 +public class ItemService { + @PersistenceContext + private EntityManager em; + public List findItemsByUserInput(String userInput) { + String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; + Query query = em.createQuery(jpql, Item.class); + query.setParameter("userInput", userInput); + return query.getResultList(); + } +} +``` + +### 안전한 구현 - MyBatis 파라미터 바인딩 +```xml + + + INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) + VALUES (#{num}, #{name}, #{age}, #{grade}) + + + DELETE FROM STUDENTS WHERE NUM = #{num} + +``` + +### 안전한 구현 - SQL 키워드 필터링 (Java) +```java +public static String sanitize(String input) { + if (input == null) return null; + String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; + String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; + Pattern regex = Pattern.compile(pattern + "|--"); + Matcher matcher = regex.matcher(input); + return matcher.replaceAll(" "); +} +``` + +### 안전한 구현 - PreparedStatement (PHP) +```php +// PHP - PDO PreparedStatement +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +``` + +### 안전한 구현 - 예외 처리 +```java +// Java - 적절한 예외 처리 (에러 메시지 노출 방지) +try { + // 데이터베이스 작업 +} catch (SQLException e) { + e.printStackTrace(); // 로그에만 기록 + System.out.println("An error occurred. Please try again later."); // 사용자에게 일반 메시지 +} +``` +```php +// PHP - PDO 예외 처리 +try { + // 데이터베이스 작업 +} catch (PDOException $e) { + error_log($e->getMessage()); + echo 'SQL Exception'; // 상세 에러 노출 금지 +} +``` + +### 특수문자 필터링 대상 +| 문자 | 설명 | +|------|------| +| `'` | 문자 데이터 구분 기호 | +| `;` | 쿼리 구분 기호 | +| `--`, `#` | 라인 주석 구분 기호 | +| `/* */` | 블록 주석 | + +--- + +## 3. 디렉터리 인덱싱 (DI) +**조치:** +```apache +# Apache - Indexes 옵션 제거 + + Options FollowSymLinks # Indexes 제거 + +``` +```xml + + + listings + false + +``` +```nginx +# Nginx +server { + location / { + autoindex off; + } +} +``` + +--- + +## 4. 에러 페이지 적용 미흡 (EP) +**조치:** +```apache +# Apache - 서버 정보 노출 제거 및 사용자 에러 페이지 정의 +ServerTokens Prod +ServerSignature Off +ErrorDocument 404 /main/error.html +ErrorDocument 405 /main/error.html +``` +```xml + + + + +``` +```xml + + + 404 + /errors/404 + + + 500 + /errors/500 + + + java.lang.Exception + /errors/500 + +``` +```nginx +# Nginx - 서버 정보 제거 및 사용자 에러 페이지 +http { + server_tokens off; +} +server { + error_page 400 401 402 405 /custom_4xx.html; + error_page 404 /custom_404.html; + error_page 500 502 503 504 /custom_5xx.html; + location = /custom_404.html { root /var/www/html; internal; } + location = /custom_4xx.html { root /var/www/html; internal; } + location = /custom_5xx.html { root /var/www/html; internal; } +} +``` + +--- + +## 5. 정보 누출 (IL) +**조치 항목:** +1. robots.txt, web.config, nginx.conf로 검색 차단 디렉터리/확장자 지정 +2. 백업 파일 삭제 (*.bak, *.backup, *.org, *.old, *.zip, *.log, *.sql, *.tmp, *.temp) +3. 초기 페이지/디렉터리/배너 삭제 +4. 개인정보 마스킹 처리 (홍\*동, 901231-1\*\*\*\*\*\*, 010-1234-\*\*\*\* 등) +5. 개발 중 주석/디버그 정보 제거 + +--- + +## 6. 크로스사이트 스크립트 - XSS (XS) + +### 취약 패턴 +```javascript +// JavaScript - innerHTML 사용 (취약) +document.getElementById('output').innerHTML = userInput; +// document.write(userInput); // 취약 +``` + +### 안전한 구현 - HTML Entity 변환 (Java) +```java +public static String sanitizeInput(String input) { + if (input == null) return null; + return input.replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll("\"", """) + .replaceAll("'", "'"); +} +``` + +### 안전한 구현 - HTML Entity 변환 (PHP) +```php +function escapeHtml($input) { + return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { + $escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); + $additionalEscapes = [ + '\\' => '\', + '(' => '(', + ')' => ')', + '#' => '#' + ]; + return strtr($escaped, $additionalEscapes); +} +``` + +### 특수문자 필터링 대상 +| 변경 전 | 변경 후 | +|---------|---------| +| `<` | `<` | +| `>` | `>` | +| `"` | `"` | +| `(` | `(` | +| `)` | `)` | +| `#` | `#` | +| `&` | `&` | + +### 쿠키 보안 설정 +``` +Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict +``` + +--- + +## 7. 크로스사이트 요청 위조 - CSRF (CF) + +### 안전한 구현 - CSRF Token (Java/Spring) +```java +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + HttpSession session = request.getSession(); + String csrfToken = generateCsrfToken(); + session.setAttribute("csrfToken", csrfToken); + model.addAttribute("csrfToken", csrfToken); + return "index"; +} + +// CSRF Token 생성 함수 +private String generateCsrfToken() { + SecureRandom secureRandom = new SecureRandom(); + byte[] token = new byte[16]; + secureRandom.nextBytes(token); + return Base64.getUrlEncoder().encodeToString(token); +} + +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, + @RequestParam("csrfToken") String csrfToken, + HttpServletRequest request, Model model) { + HttpSession session = request.getSession(); + String sessionToken = (String) session.getAttribute("csrfToken"); + if (sessionToken == null || !sessionToken.equals(csrfToken)) { + throw new IllegalStateException("Invalid CSRF token"); + } + String sanitizedInput = sanitizeInput(input); + inputs.add(sanitizedInput); + return "index"; +} +``` + +### HTML 폼에 CSRF Token 포함 +```html +
+ + + + +
+``` + +### 추가 방어 조치 +1. Referer/Origin 헤더 검증으로 외부 도메인 요청 차단 +2. SameSite 쿠키 옵션 적용 +3. HTTPS 환경에서 Secure, HttpOnly 속성 적용 + +--- + +## 8. 서버사이드 요청 위조 - SSRF (SF) + +### 안전한 구현 - URL 화이트리스트 (Java) +```java +private final List allowedDomains = Arrays.asList("example.com"); +private final Map> allowedIPsAndPorts = new HashMap<>(); + +public UrlValidator() { + allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); + allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} + +public boolean isUrlAllowed(String urlString) { + try { + URL url = new URL(urlString); + String protocol = url.getProtocol(); + // HTTP와 HTTPS만 허용 + if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { + return false; + } + String host = url.getHost(); + int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); + if (allowedDomains.contains(host)) return true; + if (allowedIPsAndPorts.containsKey(host)) { + return allowedIPsAndPorts.get(host).contains(port); + } + return false; + } catch (Exception e) { + return false; + } +} +``` + +### 안전한 구현 - URL 화이트리스트 (PHP) +```php +function isUrlAllowed($url) { + $allowedDomains = ['example.com', 'api.example.com']; + $allowedIPsAndPorts = [ + '192.168.10.10' => [80, 443, 8000], + '10.0.0.1' => [80, 443] + ]; + $parsedUrl = parse_url($url); + if (!$parsedUrl || !isset($parsedUrl['host'])) return false; + + $host = $parsedUrl['host']; + $port = isset($parsedUrl['port']) ? $parsedUrl['port'] + : ($parsedUrl['scheme'] === 'https' ? 443 : 80); + if (in_array($host, $allowedDomains, true)) return true; + if (filter_var($host, FILTER_VALIDATE_IP)) { + if (array_key_exists($host, $allowedIPsAndPorts)) { + return in_array($port, $allowedIPsAndPorts[$host], true); + } + } + return false; +} +``` + +### PHP 설정 강화 +```ini +; php.ini - 원격 URL 접근 차단 +allow_url_fopen=Off +allow_url_include=Off +``` + +### 추가 방어 조치 +1. 내부 네트워크 대역 및 관리용 포트 요청 차단 +2. http, https 외 프로토콜(file://, gopher://, data://) 차단 +3. 에러 발생 시 응답값 노출 금지 +4. 애플리케이션 서버와 내부 시스템 간 네트워크 분리 + +--- + +## 9. 약한 비밀번호 정책 (BF) +**비밀번호 복잡성 검증 (JavaScript):** +```javascript +function isPasswordStrong(password) { + const minLength = 8; + const hasUpperCase = /[A-Z]/.test(password); + const hasLowerCase = /[a-z]/.test(password); + const hasNumber = /[0-9]/.test(password); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); + return password.length >= minLength + && hasUpperCase && hasLowerCase + && hasNumber && hasSpecialChar; +} +``` +**취약 ID 예시:** admin, administrator, manager, guest, tomcat, root, user +**취약 비밀번호 예시:** abcd, 1234, 1111, test, password, public, 빈 비밀번호, ID와 동일 + +--- + +## 10. 불충분한 인증 절차 (IA) + +### 안전한 구현 - 재인증 로직 (Java) +```java +// 중요 페이지 접근 시 세션 기반 인증 검증 +public String editProfile(HttpSession session, Model model) { + User user = (User) session.getAttribute("user"); + Boolean isVerified = (Boolean) session.getAttribute("isVerified"); + if (user == null || isVerified == null || !isVerified) { + return "redirect:/user/authenticate"; + } + model.addAttribute("user", user); + return "edit_profile"; +} + +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { + if (input.equals(code)) { + session.setAttribute("isVerified", true); + return "redirect:/user/edit_profile"; + } else { + return "redirect:/user/authenticate?error=true"; + } +} +``` + +### 안전한 구현 - 접근 통제 공통 모듈 (Java) +```java +public class AccessControl { + public static boolean isAuthenticated(HttpSession session) { + return session.getAttribute("user") != null; + } + public static boolean isVerified(HttpSession session) { + return Boolean.TRUE.equals(session.getAttribute("isVerified")); + } +} +``` + +--- + +## 11. 불충분한 권한 검증 (IN) + +### 안전한 구현 - 서버 사이드 세션 검증 (Java) +```java +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { + User currentUser = (User) session.getAttribute("currentUser"); + if (currentUser == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); + } + Inquiry inquiry = inquiryService.findInquiryById(id); + if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); + } + model.addAttribute("inquiry", inquiry); + return "inquiry_detail"; +} +``` + +--- + +## 12. 취약한 비밀번호 복구 절차 (PR) + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (Java) +```java +private static final String CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +private static final int PASSWORD_LENGTH = 12; + +private String generateTemporaryPassword() { + SecureRandom secureRandom = new SecureRandom(); + StringBuilder password = new StringBuilder(PASSWORD_LENGTH); + for (int i = 0; i < PASSWORD_LENGTH; i++) { + int randomIndex = secureRandom.nextInt(CHARACTERS.length()); + password.append(CHARACTERS.charAt(randomIndex)); + } + return password.toString(); +} +``` + +### 안전한 구현 - 안전한 임시 비밀번호 생성 (PHP) +```php +function generateRandomPassword($length = 12) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; + $charactersLength = strlen($characters); + $randomPassword = ''; + for ($i = 0; $i < $length; $i++) { + $randomPassword .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomPassword; +} +``` + +--- + +## 13. 프로세스 검증 누락 (PV) + +### 안전한 구현 - 세션 기반 접근 통제 (Java/Spring) +```java +// 인터셉터 설정 - 비공개/공개 페이지 구분 +public class SessionConfig implements WebMvcConfigurer { + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SessionInterceptor()) + .addPathPatterns("/home", "/board/**") + .excludePathPatterns("/login", "/register", "/error"); + } +} + +public class SessionInterceptor implements HandlerInterceptor { + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return false; + } + return true; + } +} +``` + +### 안전한 구현 - 플로우 제어 (PHP) +```php +session_start(); +if ($step_completed) { + $_SESSION['step1_completed'] = true; + header('Location: step2.php'); + exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { + header('Location: step1.php'); // 1단계 미완료 시 리다이렉트 + exit; +} +``` + +--- + +## 14. 악성 파일 업로드 (FU) + +### 안전한 구현 - 파일 업로드 보안 (Java) +```java +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of( + "image/jpeg", "image/png", "application/pdf", "text/plain"); + +// 파일명 정규화 +private static String normalizeFilename(String filename) { + if (filename == null) return null; + String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); + name = Normalizer.normalize(name, Normalizer.Form.NFC); + name = name.replace("\0", ""); + name = name.replaceAll("[<>:\"/\\\\|?*]", ""); + name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); + return name; +} + +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { + String safe = normalizeFilename(filename); + int dotCount = safe.length() - safe.replace(".", "").length(); + if (dotCount != 1) return ""; // 이중 확장자 차단 + int idx = safe.lastIndexOf('.'); + return (idx == -1) ? "" : safe.substring(idx + 1).toLowerCase(); +} + +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { + String original = file.getOriginalFilename(); + String ext = getExtension(original); + if (!Arrays.asList(ALLOWED_EXTENSIONS).contains(ext)) { + throw new IOException("허용되지 않은 확장자"); + } + // MIME 시그니처 검증 + Tika tika = new Tika(); + String mime = tika.detect(file.getInputStream()); + if (!ALLOWED_MIME.contains(mime)) { + throw new IOException("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; + Path savePath = Paths.get(uploadDir, newName); + file.transferTo(savePath.toFile()); + return newName; +} +``` + +### 안전한 구현 - 파일 업로드 보안 (PHP) +```php +function normalize_filename($filename) { + $filename = urldecode($filename); + $filename = normalizer_normalize($filename, Normalizer::FORM_C); + $filename = str_replace("\0", "", $filename); + $filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); + $filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); + return $filename; +} + +function is_valid_extension($filename, $allowed_exts) { + $safe = normalize_filename($filename); + if (substr_count($safe, '.') !== 1) return false; // 이중 확장자 차단 + $ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); + return in_array($ext, $allowed_exts, true); +} + +function save_upload($file, $uploadDir) { + $allowed_exts = ['jpg', 'jpeg', 'png', 'pdf', 'txt']; + $allowed_mime = ['image/jpeg', 'image/png', 'application/pdf', 'text/plain']; + + if (!is_valid_extension($file['name'], $allowed_exts)) { + throw new Exception("허용되지 않은 확장자"); + } + $mime = mime_content_type($file['tmp_name']); + if (!in_array($mime, $allowed_mime, true)) { + throw new Exception("허용되지 않은 파일 유형"); + } + // 파일명 난수화 + $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $newName = bin2hex(random_bytes(16)) . '.' . $ext; + $dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; + if (!move_uploaded_file($file['tmp_name'], $dest)) { + throw new Exception("파일 저장 실패"); + } + return $newName; +} +``` + +### 핵심 보안 조치 +1. 확장자 화이트리스트 검증 + MIME 타입 검증 +2. 파일명 난수화 (UUID 등) +3. 업로드 경로를 웹 디렉터리 외부에 배치 +4. 업로드된 파일의 실행 권한 제거 + +--- + +## 15. 파일 다운로드 (FD) + +### 안전한 구현 - 파일명 검증 (Java) +```java +public class FileDownloadUtil { + // 파일명에 영문, 숫자, 일부 특수문자만 허용 + public static boolean isValidFileName(String fileName) { + return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); + } + + private static final Set ALLOWED_EXTENSIONS = Set.of("jpg", "png"); + + public static boolean isAllowedExtension(String filePath) { + String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); + return ALLOWED_EXTENSIONS.contains(extension); + } +} + +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename) throws IOException { + if (!FileDownloadUtil.isValidFileName(filename) + || !FileDownloadUtil.isAllowedExtension(filename)) { + return ResponseEntity.badRequest().build(); + } + // ... 다운로드 로직 +} +``` + +### 안전한 구현 - 경로 정규화 (PHP) +```php +if (isset($_GET['file'])) { + $file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); + $filePath = realpath('../uploads/' . $file); // 경로 정규화 + // 파일 경로가 지정된 디렉터리 내에 있는지 확인 + if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { + downloadFile($filePath); + } else { + echo "잘못된 파일 경로입니다."; + exit; + } +} +``` + +### 우회 공격 대응 +| 인코딩 방식 | 예시 | +|-------------|------| +| URL 인코딩 | `.(%2e)`, `/(%2f)`, `\(%5c)` | +| 더블 URL 인코딩 | `.(%252e)`, `/(%252f)` | +| 16bit 유니코드 | `.(%u002e)`, `/(%u2215)` | +| 특수문자 중첩 | `....//` → `../` | +| 종단 문자 추가 | `[파일명]%00.jpg` | + +--- + +## 16. 불충분한 세션 관리 (IS) + +### 안전한 구현 - 세션 고정 방지 (Java/Spring) +```java +@RequestMapping("/login") +public String login(HttpServletRequest request) { + request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 + return "redirect:/home"; +} + +// Spring Security 설정 +@Override +protected void configure(HttpSecurity http) throws Exception { + http.sessionManagement() + .sessionFixation().migrateSession() + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(1).maxSessionsPreventsLogin(false) + .expiredUrl("/login?expired"); +} +``` + +### 세션 만료 시간 설정 +```xml + + + 60 + +``` +```properties +# Spring Boot application.properties +server.servlet.session.timeout=60m +``` +```php +// PHP - 세션 재생성 및 만료 설정 +session_start(); +session_regenerate_id(true); // 예측 불가능한 세션 ID 생성 +ini_set('session.gc_maxlifetime', 3600); // 60분 +ini_set('session.cookie_lifetime', 3600); +``` + +### JWT 보안 설정 +| 안전한 알고리즘 | 설명 | +|----------------|------| +| HS256~512 | 비밀 키 기반 HMAC 해시 | +| RS256~512 | 비대칭 키 RSA 서명 | +| ES256~512 | 타원 곡선 암호화 서명 | + +| 취약한 알고리즘 | 설명 | +|----------------|------| +| HS1, RS1 | SHA-1 기반 (취약) | +| none | 서명 생략 (위험) | +| plaintext | 평문 서명 (위험) | + +--- + +## 17. 데이터 평문 전송 (SN) +**조치:** +```apache +# Apache - TLSv1.2 이상 사용, SSLv2/v3 비활성화 +SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +``` +``` +# IIS - 레지스트리에서 SSL 2.0, 3.0 비활성화 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server] +"Enabled"=dword:00000000 +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server] +"Enabled"=dword:00000000 +``` + +--- + +## 18. 쿠키 변조 (CC) + +### 안전한 구현 - AES + HMAC 쿠키 (Java) +```java +public class CookieUtil { + private static final int IV_LEN = 16, HMAC_LEN = 32; + private final byte[] encKey; // AES-256 키 (32 bytes) + private final byte[] hmacKey; // HMAC 키 + + // 보안 쿠키 생성 + public void addSecureCookie(HttpServletResponse resp, String name, + String plaintext, int maxAgeSec) throws Exception { + byte[] iv = new byte[IV_LEN]; + new SecureRandom().nextBytes(iv); + + // AES-256-CBC 암호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, + new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // HMAC 생성 + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); + mac.update(iv); + mac.update(ciphertext); + byte[] hmac = mac.doFinal(); + + // payload = IV + HMAC + 암호문 + byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; + System.arraycopy(iv, 0, payload, 0, iv.length); + System.arraycopy(hmac, 0, payload, iv.length, hmac.length); + System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); + + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); + + // HttpOnly, Secure, SameSite 속성 설정 + String header = String.format( + "%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", + name, encoded, maxAgeSec); + resp.addHeader("Set-Cookie", header); + } +} +``` + +--- + +## 19. 관리자 페이지 노출 (AE) +**조치:** +1. 유추하기 어려운 URL 및 포트로 관리자 페이지 변경 +2. 지정된 IP만 관리자 페이지 접근 허용 +3. 관리자 로그인 시 2차 인증(OTP, VPN, 인증서) 적용 +4. 하위 페이지별 세션 검증 구현 + +--- + +## 20. 자동화 공격 (CC) +**조치:** +1. 로그인 시도, 게시글 등록, SMS 발송 등에 횟수 제한 설정 +2. CAPTCHA 등 일회성 확인 로직 구현 +3. IDS/IPS 시스템으로 대량 패킷 감지 및 차단 +4. 로그인 실패 3~5회 초과 시 계정 잠금 로직 구현 + +--- + +## 21. 불필요한 Method 악용 (WM) + +### 조치 - Apache +```bash +# WebDAV 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs + +# 불필요한 메소드 제한 +# /etc/apache2/apache2.conf + + Dav Off + + Order Allow,Deny + Deny from all + + + +# TRACE 메소드 비활성화 +TraceEnable Off + +# CONNECT 메소드 비활성화 (mod_rewrite) + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} ^CONNECT + RewriteRule .* - [F] + +``` + +### 조치 - Tomcat +```xml + + + readonly + true + + + + +``` + +### 조치 - Nginx +```nginx +# WebDAV 비활성화 - dav_methods 지시어 삭제 +# Nginx는 0.5.17 이후 TRACE를 405로 거부 +# CONNECT 메소드는 기본적으로 미지원 +``` + +### 조치 - IIS +``` +# IIS 6.0 이상: 요청 필터링 > HTTP 동사 > 동사 거부에 TRACE 추가 +# WebDAV 기능 비활성화 확인 +``` diff --git a/skills/kesekit-start/scripts/cii/windows.md b/skills/kesekit-start/scripts/cii/windows.md new file mode 100644 index 0000000..e2970e3 --- /dev/null +++ b/skills/kesekit-start/scripts/cii/windows.md @@ -0,0 +1,1489 @@ +# Windows 서버 취약점 점검/조치 스크립트 +> KISA 주요정보통신기반시설 기술적 취약점 분석평가 가이드 (W-01 ~ W-64) + +--- + +## 1. 계정 관리 + +### W-01: Administrator 계정 이름 변경 등 보안성 강화 (상) +**점검:** +```powershell +# Administrator(SID-500) 계정명 확인 +Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select-Object Name, Enabled, SID + +# 로컬 보안 정책에서 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "NewAdministratorName" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# Administrator 계정명을 유추 불가능한 이름으로 변경 +Rename-LocalUser -Name "Administrator" -NewName "yourCustomAdmin" + +# 또는 wmic 사용 +wmic useraccount where "SID like '%-500'" rename "yourCustomAdmin" + +# GPO 방식: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: Administrator 계정 이름 바꾸기" 설정 +``` + +--- + +### W-02: Guest 계정 비활성화 (상) +**점검:** +```powershell +# Guest 계정 활성화 여부 확인 +Get-LocalUser -Name "Guest" | Select-Object Name, Enabled + +# net 명령으로 확인 +net user Guest +``` +**조치:** +```powershell +# Guest 계정 비활성화 +Disable-LocalUser -Name "Guest" + +# 또는 net 명령 +net user Guest /active:no +``` + +--- + +### W-03: 불필요한 계정 제거 (상) +**점검:** +```powershell +# 전체 로컬 사용자 계정 목록 확인 +Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Format-Table + +# 장기 미사용 계정 확인 (90일 이상 미로그인) +Get-LocalUser | Where-Object { + $_.Enabled -eq $true -and + $_.LastLogon -lt (Get-Date).AddDays(-90) +} | Select-Object Name, LastLogon +``` +**조치:** +```powershell +# 불필요한 계정 비활성화 +Disable-LocalUser -Name "<불필요한계정명>" + +# 불필요한 계정 삭제 +Remove-LocalUser -Name "<불필요한계정명>" +``` + +--- + +### W-04: 계정 잠금 임계값 설정 (상) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts + +# 상세 확인 (secedit) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutBadCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 임계값 5회로 설정 +net accounts /lockoutthreshold:5 + +# GPO 방식: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 임계값" = 5 +``` + +--- + +### W-05: 해독 가능한 암호화를 사용하여 암호 저장 해제 (상) +**점검:** +```powershell +# 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ClearTextPassword" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "해독 가능한 암호화를 사용하여 암호 저장" = 사용 안 함 +# secedit 인라인 설정 +secedit /export /cfg C:\secpol_tmp.cfg +(Get-Content C:\secpol_tmp.cfg) -replace "ClearTextPassword = 1","ClearTextPassword = 0" | Set-Content C:\secpol_tmp.cfg +secedit /configure /db C:\Windows\security\local.sdb /cfg C:\secpol_tmp.cfg /areas SECURITYPOLICY +Remove-Item C:\secpol_tmp.cfg -Force +``` + +--- + +### W-06: 관리자 그룹에 최소한의 사용자 포함 (상) +**점검:** +```powershell +# Administrators 그룹 구성원 확인 +Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource + +# net 명령 +net localgroup Administrators +``` +**조치:** +```powershell +# 불필요한 계정을 Administrators 그룹에서 제거 +Remove-LocalGroupMember -Group "Administrators" -Member "<불필요한계정>" + +# 관리 업무용 계정과 일반 업무용 계정을 분리하여 운용 +``` + +--- + +### W-07: Everyone 사용 권한을 익명 사용자에 적용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous +# 값이 0이면 양호 + +# 로컬 보안 정책 내보내기로 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "EveryoneIncludesAnonymous" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: Everyone 사용 권한을 익명 사용자에게 적용" = 사용 안 함 +``` + +--- + +### W-08: 계정 잠금 기간 설정 (중) +**점검:** +```powershell +# 계정 잠금 정책 확인 +net accounts +# "잠금 기간(분)"과 "잠금 관찰 창(분)" 확인 + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LockoutDuration|ResetLockoutCount" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 계정 잠금 기간 60분, 잠금 수 원래대로 설정 기간 60분 +net accounts /lockoutduration:60 +net accounts /lockoutwindow:60 + +# GPO: 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +# "계정 잠금 기간" = 60분 +# "다음 시간 후 계정 잠금 수를 원래대로 설정" = 60분 +``` + +--- + +### W-09: 비밀번호 관리 정책 설정 (상) +**점검:** +```powershell +# 암호 정책 확인 +net accounts + +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MinimumPasswordLength|PasswordComplexity|MaximumPasswordAge|MinimumPasswordAge|PasswordHistorySize" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 암호 정책 설정 +net accounts /minpwlen:8 /maxpwage:90 /minpwage:1 /uniquepw:4 + +# GPO: 로컬 보안 정책 > 계정 정책 > 암호 정책 +# "암호는 복잡성을 만족해야 함" = 사용 +# "최소 암호 길이" = 8문자 +# "최대 암호 사용 기간" = 90일 +# "최소 암호 사용 기간" = 1일 +# "최근 암호 기억" = 4개 암호 기억됨 +``` + +--- + +### W-10: 마지막 사용자 이름 표시 안 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DontDisplayLastUserName /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 마지막 사용자 이름 표시 안 함" = 사용 +``` + +--- + +### W-11: 로컬 로그온 허용 (중) +**점검:** +```powershell +# 로컬 로그온 허용 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeInteractiveLogonRight" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force + +# Administrators, IUSR_ 외 다른 계정이 있으면 취약 +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "로컬 로그온 허용" 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹 제거 + +# ntrights 유틸리티 사용 (Windows Resource Kit) +# ntrights -u "<제거할계정>" -r SeInteractiveLogonRight +``` + +--- + +### W-12: 익명 SID/이름 변환 허용 해제 (중) +**점검:** +```powershell +# 레지스트리 확인 (Windows 2003 이상) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "LSAAnonymousNameLookup" C:\secpol_tmp.cfg +# 값이 0이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: 익명 SID/이름 변환 허용" = 사용 안 함 +``` + +--- + +### W-13: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse +# 값이 1이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한" = 사용 +``` + +--- + +### W-14: 원격터미널 접속 가능한 사용자 그룹 제한 (중) +**점검:** +```powershell +# Remote Desktop Users 그룹 구성원 확인 +Get-LocalGroupMember -Group "Remote Desktop Users" | Select-Object Name, ObjectClass + +# 원격 데스크톱 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections +# 0이면 원격 데스크톱 허용 상태 +``` +**조치:** +```powershell +# 관리자 외 별도 원격 접속 계정 생성 +New-LocalUser -Name "rdpUser" -Password (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -FullName "RDP 전용 사용자" +Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpUser" + +# 불필요한 계정 제거 +Remove-LocalGroupMember -Group "Remote Desktop Users" -Member "<불필요한계정>" +``` + +--- + +## 2. 서비스 관리 + +### W-15: 사용자 개인키 사용 시 암호 입력 (상) +**점검:** +```powershell +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "ForceKeyProtection" C:\secpol_tmp.cfg +# 값이 2이면 양호 (키를 사용할 때마다 암호 입력) +Remove-Item C:\secpol_tmp.cfg -Force + +# 레지스트리 직접 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection +``` +**조치:** +```powershell +# 레지스트리 설정 (2 = 키를 사용할 때마다 암호 매번 입력) +reg add "HKLM\SOFTWARE\Policies\Microsoft\Cryptography" /v ForceKeyProtection /t REG_DWORD /d 2 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용" +# = "키를 사용할 때마다 암호를 매 번 입력해야 함" +``` + +--- + +### W-16: 공유 권한 및 사용자 그룹 설정 (상) +**점검:** +```powershell +# 공유 폴더 목록 확인 +Get-SmbShare | Select-Object Name, Path, Description | Format-Table + +# 공유 폴더 권한에서 Everyone 확인 +Get-SmbShare | ForEach-Object { + $share = $_.Name + Get-SmbShareAccess -Name $share | Where-Object { $_.AccountName -like "*Everyone*" } | + Select-Object @{N='Share';E={$share}}, AccountName, AccessControlType, AccessRight +} +``` +**조치:** +```powershell +# 공유 폴더에서 Everyone 권한 제거 +Revoke-SmbShareAccess -Name "<공유명>" -AccountName "Everyone" -Force + +# 필요한 계정에 적절한 권한 추가 +Grant-SmbShareAccess -Name "<공유명>" -AccountName "<계정명>" -AccessRight Read -Force +``` + +--- + +### W-17: 하드디스크 기본 공유 제거 (상) +**점검:** +```powershell +# 기본 공유 확인 +net share +Get-SmbShare | Where-Object { $_.Name -match '^\w\$|^ADMIN\$' } | Select-Object Name, Path + +# AutoShareServer 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks 2>$null +``` +**조치:** +```powershell +# 기본 공유 중지 +net share C$ /delete +net share D$ /delete +net share ADMIN$ /delete + +# 재부팅 후 재생성 방지 (레지스트리) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareWks /t REG_DWORD /d 0 /f + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-18: 불필요한 서비스 제거 (상) +**점검:** +```powershell +# 실행 중인 서비스 목록 +Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, DisplayName, StartType | Format-Table + +# 불필요한 서비스 존재 여부 확인 +$unnecessaryServices = @("Alerter","ClipSrv","Browser","CryptSvc","DHCPClient", + "TrkWks","TrkSvr","ERSvc","HidServ","IMAPICD","Messenger","mnmsrvc", + "WmdmPmSN","Spooler","RemoteRegistry","simptcp","upnphost","WZCSVC") +Get-Service | Where-Object { $unnecessaryServices -contains $_.Name -and $_.Status -eq "Running" } | + Select-Object Name, DisplayName, Status +``` +**조치:** +```powershell +# 불필요한 서비스 중지 및 비활성화 +Stop-Service -Name "<서비스명>" -Force +Set-Service -Name "<서비스명>" -StartupType Disabled + +# 예시: Remote Registry 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled + +# 예시: Print Spooler 비활성화 (프린터 미사용 시) +Stop-Service -Name "Spooler" -Force +Set-Service -Name "Spooler" -StartupType Disabled +``` + +--- + +### W-19: 불필요한 IIS 서비스 구동 점검 (상) +**점검:** +```powershell +# IIS 서비스 상태 확인 +Get-Service -Name "W3SVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "IISADMIN" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# IIS 설치 여부 +Get-WindowsFeature -Name Web-Server 2>$null | Select-Object Name, Installed +``` +**조치:** +```powershell +# IIS 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "W3SVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "W3SVC" -StartupType Disabled -ErrorAction SilentlyContinue +Stop-Service -Name "IISADMIN" -Force -ErrorAction SilentlyContinue +Set-Service -Name "IISADMIN" -StartupType Disabled -ErrorAction SilentlyContinue + +# IIS 기능 제거 +Uninstall-WindowsFeature -Name Web-Server +``` + +--- + +### W-20: NetBIOS 바인딩 서비스 구동 점검 (상) +**점검:** +```powershell +# NetBIOS over TCP/IP 설정 확인 +Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | + Select-Object Description, TcpipNetbiosOptions +# TcpipNetbiosOptions: 0=DHCP기본, 1=사용, 2=사용안함 + +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces" /s /v NetbiosOptions +``` +**조치:** +```powershell +# NetBIOS over TCP/IP 비활성화 (WMI) +$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" +foreach ($adapter in $adapters) { + $adapter.SetTcpipNetbios(2) # 2 = NetBIOS 사용 안 함 +} + +# GUI: 네트워크 연결 > 속성 > TCP/IPv4 > 고급 > WINS 탭 +# "NetBIOS over TCP/IP 사용 안 함" 선택 +``` + +--- + +### W-21: 암호화되지 않는 FTP 서비스 비활성화 (상) +**점검:** +```powershell +# FTP 서비스 상태 확인 +Get-Service -Name "FTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +Get-Service -Name "MSFTPSVC" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# FTP 서비스 중지 및 비활성화 +Stop-Service -Name "FTPSVC" -Force -ErrorAction SilentlyContinue +Set-Service -Name "FTPSVC" -StartupType Disabled -ErrorAction SilentlyContinue + +# SFTP 또는 FTPS 대안 사용 권장 +``` + +--- + +### W-22: FTP 디렉토리 접근권한 설정 (상) +**점검:** +```powershell +# FTP 홈 디렉터리 경로 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/sites/site" -PSPath "IIS:\" -ErrorAction SilentlyContinue + +# FTP 홈 디렉터리 권한 확인 +icacls "C:\inetpub\ftproot" 2>$null +# Everyone 권한이 있으면 취약 +``` +**조치:** +```powershell +# FTP 홈 디렉터리에서 Everyone 권한 제거 +icacls "C:\inetpub\ftproot" /remove Everyone /T + +# 필요한 사용자에게만 권한 부여 +icacls "C:\inetpub\ftproot" /grant "ftpUser:(OI)(CI)RX" +``` + +--- + +### W-23: 공유 서비스에 대한 익명 접근 제한 설정 (상) +**점검:** +```powershell +# FTP 익명 인증 설정 확인 (IIS) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS FTP 익명 인증 비활성화 +Import-Module WebAdministration +Set-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/authentication/anonymousAuthentication" -Name "enabled" -Value $false + +# 또는 IIS 관리자에서: +# FTP 사이트 > FTP 인증 > 익명 인증 = 사용 안 함 +``` + +--- + +### W-24: FTP 접근 제어 설정 (상) +**점검:** +```powershell +# IIS FTP IP 제한 설정 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfiguration -Filter "/system.ftpServer/security/ipSecurity" -PSPath "IIS:\Sites\Default FTP Site" -ErrorAction SilentlyContinue +``` +**조치:** +```powershell +# IIS 관리자에서 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +# 1) 허용 항목 추가 (접속 허용 IP) +# 2) 기능 설정 편집 > 지정되지 않은 클라이언트 액세스 = 거부 + +# PowerShell (IIS 모듈) +Import-Module WebAdministration +# 특정 IP 허용 추가 +Add-WebConfigurationProperty -PSPath "IIS:\Sites\Default FTP Site" -Filter "/system.ftpServer/security/ipSecurity" -Name "." -Value @{ipAddress="192.168.1.100";allowed="true"} +``` + +--- + +### W-25: DNS Zone Transfer 설정 (상) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 영역 전송 설정 확인 (DNS 서버 설치 시) +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, ZoneType +Get-DnsServerZone -ErrorAction SilentlyContinue | ForEach-Object { + Get-DnsServerZoneTransferPolicy -ZoneName $_.ZoneName -ErrorAction SilentlyContinue +} +``` +**조치:** +```powershell +# DNS 영역 전송을 특정 서버로만 제한 +# dnscmd /zoneresetsecondaries <영역이름> /securens +Set-DnsServerPrimaryZone -Name "<영역이름>" -SecureSecondaries TransferToSecureServers -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-26: RDS(Remote Data Services) 제거 (상) +**점검:** +```powershell +# MSADC 가상 디렉터리 존재 확인 (IIS 기반) +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch" 2>$null +``` +**조치:** +```powershell +# MSADC 가상 디렉터리 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebVirtualDirectory -Site "Default Web Site" -Name "MSADC" -ErrorAction SilentlyContinue + +# RDS 관련 레지스트리 키 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\RDSServer.DataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\AdvancedDataFactory" /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\VbBusObj.VbBusObjCls" /f 2>$null + +# 참고: Windows 2008 이상은 해당 없음 +``` + +--- + +### W-27: 최신 Windows OS Build 버전 적용 (상) +**점검:** +```powershell +# Windows 빌드 버전 확인 +[System.Environment]::OSVersion.Version +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").CurrentBuild +(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").UBR + +# winver 실행 +winver + +# systeminfo로 상세 정보 +systeminfo | Select-String "OS 이름|OS 버전|OS Name|OS Version" +``` +**조치:** +```powershell +# Windows Update 확인 및 설치 +# 자동 업데이트: +# 제어판 > Windows Update + +# PowerShell로 업데이트 확인 (PSWindowsUpdate 모듈) +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll -AutoReboot + +# 수동 패치: https://msrc.microsoft.com/update-guide +``` + +--- + +### W-28: 터미널 서비스 암호화 수준 설정 (중) +**점검:** +```powershell +# RDP 암호화 수준 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel +# 2=중간(클라이언트 호환 가능), 3=높음, 4=FIPS + +# GPO 설정 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MinEncryptionLevel 2>$null +``` +**조치:** +```powershell +# 레지스트리에서 암호화 수준 설정 (2 이상) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 3 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 보안 +# "클라이언트 연결 암호화 수준 설정" = 사용 (높음) +``` + +--- + +### W-29: 불필요한 SNMP 서비스 구동 점검 (중) +**점검:** +```powershell +# SNMP 서비스 상태 확인 +Get-Service -Name "SNMP" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# SNMP 서비스 중지 및 비활성화 (불필요 시) +Stop-Service -Name "SNMP" -Force -ErrorAction SilentlyContinue +Set-Service -Name "SNMP" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-30: SNMP Community String 복잡성 설정 (중) +**점검:** +```powershell +# SNMP Community String 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" 2>$null +# public, private이 있으면 취약 +``` +**조치:** +```powershell +# 기본 Community String 제거 +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v public /f 2>$null +reg delete "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v private /f 2>$null + +# 복잡한 Community String 추가 (읽기전용 = 4) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" /v "C0mpl3x$tr1ng!" /t REG_DWORD /d 4 /f + +# SNMP 서비스 재시작 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-31: SNMP Access Control 설정 (중) +**점검:** +```powershell +# SNMP 허용 호스트 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" 2>$null +# 값이 없으면 모든 호스트 허용 (취약) +``` +**조치:** +```powershell +# 특정 호스트로부터만 SNMP 패킷 수신 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d "192.168.1.100" /f + +# GUI: 서비스 > SNMP Service > 속성 > 보안 탭 +# "다음 호스트로부터 SNMP 패킷 받아들이기" 선택 후 호스트 등록 +Restart-Service -Name "SNMP" -ErrorAction SilentlyContinue +``` + +--- + +### W-32: DNS 서비스 구동 점검 (중) +**점검:** +```powershell +# DNS 서비스 상태 확인 +Get-Service -Name "DNS" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# DNS 동적 업데이트 설정 확인 +Get-DnsServerZone -ErrorAction SilentlyContinue | Select-Object ZoneName, DynamicUpdate +``` +**조치:** +```powershell +# DNS 동적 업데이트 비활성화 +Set-DnsServerPrimaryZone -Name "<영역이름>" -DynamicUpdate None -ErrorAction SilentlyContinue + +# 불필요 시 DNS 서비스 중지 +Stop-Service -Name "DNS" -Force -ErrorAction SilentlyContinue +Set-Service -Name "DNS" -StartupType Disabled -ErrorAction SilentlyContinue +``` + +--- + +### W-33: HTTP/FTP/SMTP 배너 차단 (하) +**점검:** +```powershell +# IIS Server 헤더 확인 (HTTP 응답) +# (Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing).Headers["Server"] + +# IIS X-Powered-By 헤더 확인 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Get-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -ErrorAction SilentlyContinue + +# SMTP 배너 확인 +# telnet localhost 25 으로 접속 시 배너 확인 +``` +**조치:** +```powershell +# [HTTP] IIS Server 헤더 제거 - URL Rewrite 모듈 필요 +# 1) URL Rewrite 설치: https://www.iis.net/downloads/microsoft/url-rewrite +# 2) 아웃바운드 규칙 추가: 서버 변수 RESPONSE_SERVER 비우기 + +# [HTTP] X-Powered-By 헤더 제거 +Import-Module WebAdministration -ErrorAction SilentlyContinue +Remove-WebConfigurationProperty -PSPath "IIS:\Sites\Default Web Site" -Filter "system.webServer/httpProtocol/customHeaders" -Name "." -AtElement @{name="X-Powered-By"} -ErrorAction SilentlyContinue + +# [FTP] 기본 배너 숨기기 +# IIS 관리자 > FTP 사이트 > FTP 메시지 > "기본 배너 숨기기" 체크 + +# [SMTP] 배너 변경 +# cd C:\inetpub\AdminScripts +# cscript adsutil.vbs set smtpsvc/1/connectresponse "Authorized Access Only" +# net stop smtpsvc && net start smtpsvc +``` + +--- + +### W-34: Telnet 서비스 비활성화 (중) +**점검:** +```powershell +# Telnet 서비스 상태 확인 +Get-Service -Name "TlntSvr" -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType + +# Telnet 인증 방식 확인 (Windows 2003~2012) +# tlntadmn config 명령으로 확인 +``` +**조치:** +```powershell +# Telnet 서비스 중지 및 비활성화 +Stop-Service -Name "TlntSvr" -Force -ErrorAction SilentlyContinue +Set-Service -Name "TlntSvr" -StartupType Disabled -ErrorAction SilentlyContinue + +# 부득이 사용 시 NTLM 인증만 사용 +# tlntadmn config sec = +NTLM -passwd + +# 참고: Windows 2016 이상에서는 Telnet 서버 제공하지 않음 +``` + +--- + +### W-35: 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 (중) +**점검:** +```powershell +# 시스템 DSN 확인 +Get-OdbcDsn -DsnType System -ErrorAction SilentlyContinue | Select-Object Name, DriverName, Platform + +# 레지스트리에서 ODBC 데이터 소스 확인 +reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" 2>$null +``` +**조치:** +```powershell +# 불필요한 ODBC 데이터 소스 제거 +Remove-OdbcDsn -Name "<데이터소스명>" -DsnType System -ErrorAction SilentlyContinue + +# GUI: 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN +# 불필요한 데이터 소스 선택 후 제거 +``` + +--- + +### W-36: 원격터미널 접속 타임아웃 설정 (중) +**점검:** +```powershell +# RDP 세션 유휴 타임아웃 레지스트리 확인 +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime 2>$null +# 밀리초 단위: 1800000 = 30분 + +# 현재 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MaxIdleTime 2>$null +``` +**조치:** +```powershell +# 유휴 세션 타임아웃 30분(1800000ms) 설정 +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxIdleTime /t REG_DWORD /d 1800000 /f + +# GPO: 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 원격 데스크톱 서비스 +# > 원격 데스크톱 세션 호스트 > 세션 시간 제한 +# "활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정" = 사용 (30분) +``` + +--- + +### W-37: 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 (중) +**점검:** +```powershell +# 예약된 작업 목록 확인 +Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} | + Select-Object TaskName, TaskPath, State | + Format-Table -AutoSize + +# 예약된 작업 상세 정보 (실행 명령 포함) +Get-ScheduledTask | ForEach-Object { + $task = $_ + $actions = $task.Actions + foreach ($action in $actions) { + [PSCustomObject]@{ + TaskName = $task.TaskName + Execute = $action.Execute + Arguments = $action.Arguments + State = $task.State + } + } +} | Format-Table -AutoSize + +# schtasks 명령 +schtasks /query /fo LIST /v +``` +**조치:** +```powershell +# 의심스러운 예약 작업 비활성화 +Disable-ScheduledTask -TaskName "<작업이름>" + +# 의심스러운 예약 작업 삭제 +Unregister-ScheduledTask -TaskName "<작업이름>" -Confirm:$false + +# schtasks 명령 +schtasks /delete /tn "<작업이름>" /f +``` + +--- + +## 3. 패치 관리 + +### W-38: 주기적 보안 패치 및 벤더 권고사항 적용 (상) +**점검:** +```powershell +# 설치된 핫픽스 목록 확인 +Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, InstalledOn, Description -First 20 + +# 시스템 정보에서 KB 목록 +systeminfo | findstr "KB" + +# 마지막 패치 설치 날짜 확인 +(Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).InstalledOn + +# Windows Update 이력 확인 +$session = New-Object -ComObject Microsoft.Update.Session +$searcher = $session.CreateUpdateSearcher() +$history = $searcher.QueryHistory(0, 20) +$history | Select-Object Title, Date, ResultCode | Format-Table +``` +**조치:** +```powershell +# Windows Update 실행 +# 수동: https://msrc.microsoft.com/update-guide +# 자동: 제어판 > Windows Update + +# PowerShell 모듈 사용 +Install-Module PSWindowsUpdate -Force -ErrorAction SilentlyContinue +Get-WindowsUpdate +Install-WindowsUpdate -AcceptAll +``` + +--- + +### W-39: 백신 프로그램 업데이트 (상) +**점검:** +```powershell +# Windows Defender 상태 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntispywareEnabled, AntivirusEnabled, + AntivirusSignatureLastUpdated, AntispywareSignatureLastUpdated + +# 백신 엔진 버전 확인 +Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, AntivirusSignatureVersion + +# 3rd party 백신 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState, pathToSignedProductExe +``` +**조치:** +```powershell +# Windows Defender 정의 업데이트 +Update-MpSignature + +# Windows Defender 수동 빠른 검사 +Start-MpScan -ScanType QuickScan + +# 3rd party 백신의 경우 해당 제조사 업데이트 절차 참조 +``` + +--- + +## 4. 로그 관리 + +### W-40: 정책에 따른 시스템 로깅 설정 (중) +**점검:** +```powershell +# 감사 정책 확인 +auditpol /get /category:* + +# 주요 감사 정책 확인 +auditpol /get /subcategory:"로그온","로그오프","계정 관리","정책 변경","권한 사용","디렉터리 서비스 액세스" +``` +**조치:** +```powershell +# 감사 정책 설정 (KISA 권고 기준) +auditpol /set /subcategory:"계정 관리" /failure:enable +auditpol /set /subcategory:"계정 로그온 이벤트" /success:enable /failure:enable +auditpol /set /subcategory:"권한 사용" /success:enable /failure:enable +auditpol /set /subcategory:"디렉터리 서비스 액세스" /failure:enable +auditpol /set /subcategory:"로그온" /success:enable /failure:enable +auditpol /set /subcategory:"로그오프" /success:enable /failure:enable +auditpol /set /subcategory:"정책 변경" /success:enable /failure:enable + +# GPO: 로컬 보안 정책 > 로컬 정책 > 감사 정책 +``` + +--- + +### W-41: NTP 및 시각 동기화 설정 (중) +**점검:** +```powershell +# NTP 동기화 상태 확인 +w32tm /query /status +w32tm /query /configuration + +# NTP 서버 설정 확인 +w32tm /dumpreg /subkey:parameters + +# 시간 서비스 상태 +Get-Service -Name "W32Time" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Windows Time 서비스 활성화 +Set-Service -Name "W32Time" -StartupType Automatic +Start-Service -Name "W32Time" + +# 내부 NTP 서버와 동기화 설정 +w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.server.ip" /update +w32tm /resync + +# 동기화 시간차 확인 +w32tm /stripchart /dataonly /computer:"ntp.server.ip" +``` + +--- + +### W-42: 이벤트 로그 관리 설정 (하) +**점검:** +```powershell +# 이벤트 로그 설정 확인 +Get-EventLog -List | Select-Object Log, MaximumKilobytes, OverflowAction, MinimumRetentionDays | Format-Table + +# 레지스트리에서 직접 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize +reg query "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System" /v MaxSize +``` +**조치:** +```powershell +# 이벤트 로그 최대 크기 10240KB(10MB) 이상 설정 +Limit-EventLog -LogName Application -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName Security -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 +Limit-EventLog -LogName System -MaximumSize 10240KB -OverflowAction OverwriteOlder -RetentionDays 90 + +# 레지스트리 직접 설정 (바이트 단위: 10485760 = 10MB) +reg add "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security" /v MaxSize /t REG_DWORD /d 10485760 /f +``` + +--- + +### W-43: 이벤트 로그 파일 접근 통제 설정 (중) +**점검:** +```powershell +# 시스템 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\config" +# Everyone 권한이 있으면 취약 + +# IIS 로그 디렉터리 권한 확인 +icacls "%SystemRoot%\System32\LogFiles" 2>$null +``` +**조치:** +```powershell +# 로그 디렉터리에서 Everyone 권한 제거 +icacls "C:\Windows\System32\config" /remove Everyone /T +icacls "C:\Windows\System32\LogFiles" /remove Everyone /T + +# Administrators, SYSTEM만 접근 가능하도록 설정 +``` + +--- + +## 5. 보안 관리 + +### W-44: 원격으로 액세스할 수 있는 레지스트리 경로 (상) +**점검:** +```powershell +# Remote Registry 서비스 상태 확인 +Get-Service -Name "RemoteRegistry" | Select-Object Name, Status, StartType +``` +**조치:** +```powershell +# Remote Registry 서비스 중지 및 비활성화 +Stop-Service -Name "RemoteRegistry" -Force +Set-Service -Name "RemoteRegistry" -StartupType Disabled +``` + +--- + +### W-45: 백신 프로그램 설치 (상) +**점검:** +```powershell +# Windows Defender 설치 및 활성화 확인 +Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusEnabled, RealTimeProtectionEnabled + +# 설치된 백신 프로그램 확인 +Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue | + Select-Object displayName, productState + +# 프로그램 목록에서 백신 확인 +Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match "antivirus|백신|V3|알약|Kaspersky|Norton|McAfee|Symantec" } | + Select-Object Name, Version +``` +**조치:** +```powershell +# Windows Defender 활성화 (비활성화된 경우) +Set-MpPreference -DisableRealtimeMonitoring $false + +# 백신이 설치되지 않은 경우 조직 정책에 따라 백신 프로그램 설치 +# Windows Defender는 Windows Server 2016 이상 기본 탑재 +Install-WindowsFeature -Name Windows-Defender -ErrorAction SilentlyContinue +``` + +--- + +### W-46: SAM 파일 접근 통제 설정 (상) +**점검:** +```powershell +# SAM 파일 접근 권한 확인 +icacls "C:\Windows\System32\config\SAM" +# Administrator, SYSTEM 외 다른 그룹/사용자 권한이 있으면 취약 +``` +**조치:** +```powershell +# SAM 파일 권한 설정 (Administrator, SYSTEM만 접근) +icacls "C:\Windows\System32\config\SAM" /inheritance:r +icacls "C:\Windows\System32\config\SAM" /grant "BUILTIN\Administrators:(F)" +icacls "C:\Windows\System32\config\SAM" /grant "NT AUTHORITY\SYSTEM:(F)" +``` + +--- + +### W-47: 화면보호기 설정 (하) +**점검:** +```powershell +# 화면보호기 설정 확인 +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive +reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut +reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure +# ScreenSaveActive=1, ScreenSaveTimeOut<=600(10분), ScreenSaverIsSecure=1 이면 양호 +``` +**조치:** +```powershell +# 화면보호기 활성화 (대기 시간 10분, 암호 사용) +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 600 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f +reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "C:\Windows\System32\scrnsave.scr" /f + +# GPO 일괄 적용: +# 사용자 구성 > 관리 템플릿 > 제어판 > 개인 설정 +# "화면 보호기 사용" = 사용 +# "화면 보호기 시간 제한" = 600초 +# "화면 보호기 암호로 보호" = 사용 +``` + +--- + +### W-48: 로그온하지 않고 시스템 종료 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon +# 값이 0이면 양호 +``` +**조치:** +```powershell +# 로그온 없이 시스템 종료 차단 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v ShutdownWithoutLogon /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "시스템 종료: 로그온하지 않고 시스템 종료 허용" = 사용 안 함 +``` + +--- + +### W-49: 원격 시스템에서 강제로 시스템 종료 (상) +**점검:** +```powershell +# 원격 시스템 종료 권한 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "SeRemoteShutdownPrivilege" C:\secpol_tmp.cfg +# Administrators만 있으면 양호 +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +# "원격 시스템에서 강제로 시스템 종료" 정책에 Administrators 외 다른 계정/그룹 제거 +``` + +--- + +### W-50: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail +# 값이 0이면 양호 (사용 안 함), 1이면 취약 + +# 로컬 보안 정책 확인 +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "CrashOnAuditFail" C:\secpol_tmp.cfg +Remove-Item C:\secpol_tmp.cfg -Force +``` +**조치:** +```powershell +# 레지스트리 설정 (사용 안 함) +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v CrashOnAuditFail /t REG_DWORD /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "감사: 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료" = 사용 안 함 +``` + +--- + +### W-51: SAM 계정과 공유의 익명 열거 허용 안 함 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM +# RestrictAnonymous=1, RestrictAnonymousSAM=1 이면 양호 +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함" = 사용 +# "네트워크 액세스: SAM 계정의 익명 열거 허용 안 함" = 사용 + +# 참고: 방화벽에서 135~139(TCP/UDP) 포트 차단 권장 +``` + +--- + +### W-52: Autologon 기능 제어 (상) +**점검:** +```powershell +# AutoAdminLogon 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon +# 값이 0이거나 존재하지 않으면 양호 + +# DefaultPassword 존재 여부 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword 2>$null +``` +**조치:** +```powershell +# Autologon 비활성화 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f + +# DefaultPassword 제거 +reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f 2>$null +``` + +--- + +### W-53: 이동식 미디어 포맷 및 꺼내기 허용 (상) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD +# 값이 0(Administrators만)이면 양호 +``` +**조치:** +```powershell +# Administrators에게만 이동식 미디어 포맷/꺼내기 허용 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllocateDASD /t REG_SZ /d 0 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 이동식 미디어 포맷 및 꺼내기 허용" = Administrators +``` + +--- + +### W-54: DoS 공격 방어 레지스트리 설정 (중) +**점검:** +```powershell +# TCP/IP 스택 강화 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand 2>$null +# SynAttackProtect>=1, EnableDeadGWDetect=0, KeepAliveTime=300000, NoNameReleaseOnDemand=1 이면 양호 +``` +**조치:** +```powershell +# DoS 방어 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableDeadGWDetect /t REG_DWORD /d 0 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v NoNameReleaseOnDemand /t REG_DWORD /d 1 /f + +# 주의: 잘못된 값 설정 시 OS 재설치 필요할 수 있음 +``` + +--- + +### W-55: 사용자가 프린터 드라이버를 설치할 수 없게 함 (중) +**점검:** +```powershell +# 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers 2>$null +# 값이 1이면 양호 (사용자 설치 차단) +``` +**조치:** +```powershell +# 레지스트리 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers" /v AddPrinterDrivers /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "장치: 사용자가 프린터 드라이버를 설치할 수 없게 함" = 사용 +``` + +--- + +### W-56: SMB 세션 중단 관리 설정 (중) +**점검:** +```powershell +# SMB 세션 유휴 시간 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect 2>$null +# 값이 15 이하이면 양호 + +# 로그온 시간 만료 시 연결 끊기 설정 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff 2>$null +# 값이 1이면 양호 +``` +**조치:** +```powershell +# SMB 유휴 세션 타임아웃 15분 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoDisconnect /t REG_DWORD /d 15 /f + +# 로그온 시간 만료 시 연결 끊기 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v EnableForcedLogoff /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기" = 사용 +# "Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간" = 15분 +``` + +--- + +### W-57: 로그온 시 경고 메시지 설정 (하) +**점검:** +```powershell +# 로그온 경고 메시지 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText +# 둘 다 값이 설정되어 있으면 양호 +``` +**조치:** +```powershell +# 로그온 경고 메시지 설정 +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeCaption /t REG_SZ /d "경고" /f +reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LegalNoticeText /t REG_SZ /d "이 시스템은 인가된 사용자만 접근할 수 있습니다. 비인가 접근 시도 시 법적 처벌을 받을 수 있습니다." /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목" = 경고 제목 +# "대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트" = 경고 내용 +``` + +--- + +### W-58: 사용자별 홈 디렉터리 권한 설정 (중) +**점검:** +```powershell +# 사용자 홈 디렉터리 권한 확인 +Get-ChildItem "C:\Users" -Directory | ForEach-Object { + $acl = Get-Acl $_.FullName + $everyoneAccess = $acl.Access | Where-Object { $_.IdentityReference -like "*Everyone*" } + if ($everyoneAccess) { + [PSCustomObject]@{ + Directory = $_.Name + Everyone = ($everyoneAccess | ForEach-Object { $_.FileSystemRights }) -join ", " + } + } +} +``` +**조치:** +```powershell +# 홈 디렉터리에서 Everyone 권한 제거 (All Users, Default User 제외) +Get-ChildItem "C:\Users" -Directory | Where-Object { + $_.Name -notin @("All Users","Default User","Default","Public") +} | ForEach-Object { + icacls $_.FullName /remove Everyone /T +} +``` + +--- + +### W-59: LAN Manager 인증 수준 (중) +**점검:** +```powershell +# LAN Manager 인증 수준 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel +# 값이 5이면 양호 (NTLMv2 응답만 보냄, LM 및 NTLM 거부) +# 최소 3 이상 권장 +``` +**조치:** +```powershell +# NTLMv2 응답만 보내도록 설정 +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "네트워크 보안: LAN Manager 인증 수준" = "NTLMv2 응답만 보내기/LM 및 NTLM 거부" +``` + +--- + +### W-60: 보안 채널 데이터 디지털 암호화 또는 서명 (중) +**점검:** +```powershell +# 보안 채널 관련 레지스트리 확인 +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel 2>$null +reg query "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel 2>$null +# 세 값 모두 1이면 양호 +``` +**조치:** +```powershell +# 보안 채널 데이터 암호화/서명 활성화 +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v RequireSignOrSeal /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SealSecureChannel /t REG_DWORD /d 1 /f +reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v SignSecureChannel /t REG_DWORD /d 1 /f + +# GPO: 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상)" = 사용 +# "도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우)" = 사용 +# "도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우)" = 사용 +``` + +--- + +### W-61: 파일 및 디렉토리 보호 (중) +**점검:** +```powershell +# 파일 시스템 유형 확인 +Get-Volume | Select-Object DriveLetter, FileSystemType, Size | Format-Table + +# CMD 확인 +fsutil fsinfo volumeinfo C: +``` +**조치:** +```powershell +# FAT 파일 시스템을 NTFS로 변환 +# convert <드라이브명>: /fs:ntfs +# 예: convert F: /fs:ntfs + +# 주의: 변환은 비가역적이며 초기 설치 시 NTFS 선택 권장 +# 기존 FAT에서 변환 시 Default ACL이 적용되지 않을 수 있음 +``` + +--- + +### W-62: 시작 프로그램 목록 분석 (중) +**점검:** +```powershell +# 시작 프로그램 레지스트리 확인 +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" +reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" 2>$null + +# 시작 폴더 확인 +Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue +Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -ErrorAction SilentlyContinue + +# WMI 시작 프로그램 목록 +Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location | Format-Table -AutoSize +``` +**조치:** +```powershell +# 불필요한 시작 프로그램 제거 (레지스트리) +reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f +reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "<프로그램명>" /f + +# msconfig 실행 (Windows 2008 이하) +# 시작 프로그램 탭에서 불필요한 항목 체크 해제 +``` + +--- + +### W-63: 도메인 컨트롤러-사용자의 시간 동기화 (중) +**점검:** +```powershell +# Kerberos 최대 허용 오차 확인 (도메인 컨트롤러) +secedit /export /cfg C:\secpol_tmp.cfg +Select-String "MaxClockSkew" C:\secpol_tmp.cfg +# 값이 5 이하이면 양호 +Remove-Item C:\secpol_tmp.cfg -Force + +# 현재 시간 동기화 상태 +w32tm /query /status +``` +**조치:** +```powershell +# GPO: 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +# "컴퓨터 시계 동기화 최대 허용 오차" = 5분 + +# 시간 동기화 강제 수행 +w32tm /resync /force +``` + +--- + +### W-64: 윈도우 방화벽 설정 (중) +**점검:** +```powershell +# Windows 방화벽 프로필 상태 확인 +Get-NetFirewallProfile | Select-Object Name, Enabled | Format-Table + +# 방화벽 규칙 요약 +Get-NetFirewallProfile | ForEach-Object { + $profile = $_.Name + $enabled = $_.Enabled + [PSCustomObject]@{ + Profile = $profile + Enabled = $enabled + InboundDefault = $_.DefaultInboundAction + OutboundDefault = $_.DefaultOutboundAction + } +} | Format-Table + +# netsh 명령 +netsh advfirewall show allprofiles +``` +**조치:** +```powershell +# Windows 방화벽 활성화 (모든 프로필) +Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True + +# netsh 명령 +netsh advfirewall set allprofiles state on + +# GUI: 제어판 > Windows Defender 방화벽 > 설정 또는 해제 +# 모든 프로필에 대해 "사용" 설정 +``` diff --git a/skills/kesekit-start/scripts/robot-security/cert-and-protocol.md b/skills/kesekit-start/scripts/robot-security/cert-and-protocol.md new file mode 100644 index 0000000..259a9d3 --- /dev/null +++ b/skills/kesekit-start/scripts/robot-security/cert-and-protocol.md @@ -0,0 +1,96 @@ +# Certificate & Protocol Security + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: IA-04, ER-01 + +--- + +## 1. OpenSSL Certificate Inspection (IA-04) + +```bash +# 인증서 내용 확인 명령어 +openssl x509 -in server.crt -text -noout +``` + +--- + +## 2. Key File Permission Hardening (IA-04) + +```bash +# 개인키 접근 권한 설정 +chown robot-service:robot-service /etc/robot/keys/device.key +chmod 600 /etc/robot/keys/device.key # 파일 소유자만 접근 가능 +``` + +--- + +## 3. OPC UA Security Configuration (IA-04) + +### 3.1 Certificate Validation + +```ini +# server.conf (OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +### 3.2 Certificate Revocation Check + +```ini +# server.conf (OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +``` + +--- + +## 4. TLS Client Certificate Verification - Python (IA-04) + +```python +import ssl, socket + +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 + +with socket.create_connection(("server.com", 443)) as sock: + with context.wrap_socket(sock, server_hostname="server.com") as ssock: + print("TLS Established:", ssock.version()) +``` + +--- + +## 5. Crypto Algorithm Requirements (IA-04) + +| Category | Recommended | Insufficient | +|---|---|---| +| Key algorithm | RSA >= 2048bit or ECC P-256+ | RSA 1024bit or below, ECC P-192 or below | +| Hash algorithm | SHA-256+ (SHA-2/SHA-3 family) | SHA-1, MD5 | +| TLS protocol | TLS 1.2+ (recommended: TLS 1.3) | TLS 1.0 / 1.1 | + +--- + +## 6. Audit Log API Access (ER-01) + +```http +GET /api/audit/logs +Authorization: Bearer + +HTTP/1.1 200 OK +{ + "entries": [...], + "integrity": "sha256:f45a..." +} +``` + +--- + +## 7. Platform-specific Certificate ACL Examples (IA-04) + +| Platform | Certificate Store | +|---|---| +| General server / cloud | DB table | +| OPC UA | /pki/trusted, /pki/rejected folders | +| MQTT mTLS | CA DB, allowed client certificate list | +| Robot PKI | KV DB, HSM integration | diff --git a/skills/kesekit-start/scripts/robot-security/firewall-hardening.md b/skills/kesekit-start/scripts/robot-security/firewall-hardening.md new file mode 100644 index 0000000..8d8820f --- /dev/null +++ b/skills/kesekit-start/scripts/robot-security/firewall-hardening.md @@ -0,0 +1,106 @@ +# Firewall & Network Hardening + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: DFR-02, RA-01, RA-08 + +--- + +## 1. Host Firewall (iptables) + +### 1.1 MQTT / HTTPS Only (DFR-02 Protocol Filtering) + +```bash +# MQTT 및 HTTPS 외의 포트 차단 +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.2 SSH + HTTPS Only (RA-01 DoS Prevention) + +```bash +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +sudo iptables -A INPUT -j DROP +``` + +### 1.3 Unnecessary Port Blocking (RA-08 Service Restriction) + +```bash +# 외부 포트 스캔 (TCP 포트 확인) +nmap -sS 192.168.0.10 + +# 불필요한 포트(예: FTP 21, Telnet 23, TFTP 69) 차단 +sudo iptables -A INPUT -p tcp --dport 21 -j DROP +sudo iptables -A INPUT -p tcp --dport 23 -j DROP +sudo iptables -A INPUT -p udp --dport 69 -j DROP +``` + +--- + +## 2. Service Hardening (RA-08) + +```bash +# 현재 활성화된 포트 및 프로세스 확인 +sudo ss -tulnp +sudo netstat -tulnp + +# 서비스 상태 확인 및 비활성화 +sudo systemctl status telnet +sudo systemctl disable telnet +sudo systemctl stop telnet +``` + +--- + +## 3. VLAN Network Segmentation (RA-01 L2) + +Control network and sensor network separation via VLAN. + +```bash +# 제어 망 (VLAN ID 10) +sudo ip link add link eth0 name eth0.10 type vlan id 10 +# 센서 망 (VLAN ID 20) +sudo ip link add link eth0 name eth0.20 type vlan id 20 + +sudo ip link set eth0.10 up +sudo ip link set eth0.20 up +``` + +--- + +## 4. sysctl Network Tuning (RA-01) + +```bash +sudo sysctl -w net.core.somaxconn=128 +sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +ulimit -n 1024 +``` + +--- + +## 5. Nginx Rate Limiting (RA-01) + +```nginx +# /etc/nginx/nginx.conf +http { + limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; + server { + listen 443 ssl; + server_name example.com; + location / { + limit_req zone=req_limit_per_ip burst=5 nodelay; + limit_conn conn_limit_per_ip 10; + } + } +} +``` + +--- + +## 6. Suricata IDS Rule (RA-01 L2 DoS Detection) + +```yaml +alert tcp any any -> $HOME_NET any (msg:"TCP SYN Flood"; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +``` diff --git a/skills/kesekit-start/scripts/robot-security/resource-management.md b/skills/kesekit-start/scripts/robot-security/resource-management.md new file mode 100644 index 0000000..fd35dce --- /dev/null +++ b/skills/kesekit-start/scripts/robot-security/resource-management.md @@ -0,0 +1,96 @@ +# Resource Management & Monitoring + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: RA-02, RA-03 + +--- + +## 1. cgroups - Security Agent Resource Limits (RA-02) + +Restrict CPU and memory usage for security processes so they do not interfere with real-time robot control. + +```bash +# cgroup 생성 (cpu + memory) +sudo cgcreate -g cpu,memory:/robot_security + +# CPU 할당 제한 (20000us = 20% of 1 core at default 100000us period) +echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us + +# 메모리 제한 (256MB) +echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes + +# 실행 중인 보안 에이전트를 cgroup에 할당 +sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +``` + +--- + +## 2. OpenSSL Hardware Acceleration Check (RA-02) + +Offload crypto operations to hardware to reduce CPU overhead. + +```bash +openssl engine -t +# Expected output: +# (dynamic) Dynamic engine loading support +# (rdrand) Intel RDRAND engine +# (aesni) Intel AES-NI engine +``` + +--- + +## 3. logrotate Configuration (RA-02) + +Prevent audit/operational logs from exhausting disk space. + +```bash +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { + size 50M + rotate 5 + compress + missingok + notifempty +} +``` + +--- + +## 4. System Resource Monitoring (RA-03) + +Dashboard or CLI-based monitoring of CPU, memory, disk, and network utilization. The robot system should provide a user interface for operators to view resource status in real-time. + +Key resource metrics to monitor: +- CPU usage per core / per process +- Memory (RSS / swap) usage +- Disk I/O and capacity +- Network interface throughput and error rates + +--- + +## 5. ROS Publisher Rate Limiting (RA-01 L2) + +Limit sensor data publish rate to prevent communication overload. + +```cpp +ros::Publisher pub = nh.advertise("sensor_data", 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { + std_msgs::String msg; + msg.data = "sensor data"; + pub.publish(msg); + loop_rate.sleep(); +} +``` + +--- + +## 6. ROS2 QoS Security Profile (RA-01 L2) + +```yaml +QoSProfile: + reliability: RELIABLE + durability: TRANSIENT_LOCAL + history: KEEP_LAST + depth: 10 +``` diff --git a/skills/kesekit-start/scripts/robot-security/sbom-audit.md b/skills/kesekit-start/scripts/robot-security/sbom-audit.md new file mode 100644 index 0000000..1b1387f --- /dev/null +++ b/skills/kesekit-start/scripts/robot-security/sbom-audit.md @@ -0,0 +1,84 @@ +# SBOM & Supply Chain Audit + +> Source: 로봇 보안취약점 점검 체크리스트 해설서 (KISA) +> Checklist refs: SC-05 + +--- + +## 1. SBOM Generation with Syft (SC-05) + +Generate a Software Bill of Materials from source code or container images using Anchore Syft. + +```bash +# Syft를 통한 SBOM 생성 (JSON format) +syft <소스코드 경로> -o json > sbom.json +``` + +--- + +## 2. Vulnerability Scanning with Grype (SC-05) + +Scan the generated SBOM for known vulnerabilities (CVEs). + +```bash +# Grype를 통한 취약점 식별 +grype sbom://sbom.json +``` + +--- + +## 3. Package Manager Built-in Audit Commands (SC-05) + +Use built-in security features of each package manager to analyze declared dependencies and automatically scan for known vulnerabilities. + +### Node.js (NPM) + +```bash +npm audit +``` + +### Python (pip) + +```bash +pip-audit +``` + +### Java (Maven) + +```bash +mvn dependency-check:check +``` + +### .NET (NuGet) + +```bash +dotnet list package --vulnerable +``` + +### Rust (Cargo) + +```bash +cargo audit +``` + +--- + +## 4. CI/CD Pipeline Integration (SC-05) + +Integrate vulnerability scanning into CI/CD pipelines (GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins, etc.) to automatically detect vulnerabilities before deployment. + +### Vulnerability Response Record Fields + +| Field | Description | +|---|---| +| CVE ID | 취약점 식별자 | +| 구성요소 | 영향받는 컴포넌트(이름/버전) | +| 기술적 위험 | 공개 PoC/익스플로잇 존재 여부, CVSS 점수 | +| 비즈니스 영향 | 영향을 받는 서비스/데이터/운영 영향 | +| EoS 여부 | 해당 구성요소의 지원상태 | +| 우선 순위 | P0/P1/P2 또는 High/Medium/Low | +| 대응방안 | 패치/업그레이드/가상패치/격리 등 | +| SLA | 목표 기간 | +| 담당자 및 일정 | 책임부서, 담당자, 완료예정일 | +| 검증 방법 | 재스캔, 기능/회귀 테스트 결과 링크 | +| 상태 | 계획/진행/완료/예외(승인) | diff --git a/skills/start/references/ai-security/developer.md b/skills/kesekit-start/templates/ai-security/developer.md similarity index 100% rename from skills/start/references/ai-security/developer.md rename to skills/kesekit-start/templates/ai-security/developer.md diff --git a/skills/kesekit-start/templates/ai-security/user-guide-checklist.md b/skills/kesekit-start/templates/ai-security/user-guide-checklist.md new file mode 100644 index 0000000..903ec01 --- /dev/null +++ b/skills/kesekit-start/templates/ai-security/user-guide-checklist.md @@ -0,0 +1,13 @@ +# AI 이용자 보안 체크리스트 요약 + +> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 + +| # | 항목 | 확인 | +|---|------|:----:| +| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | +| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | +| 3 | AI 서비스 이용약관을 확인했는가? | □ | +| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | +| 5 | AI 출력 결과를 검증하고 있는가? | □ | +| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | +| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills/start/references/cii/admin.md b/skills/kesekit-start/templates/cii/admin.md similarity index 100% rename from skills/start/references/cii/admin.md rename to skills/kesekit-start/templates/cii/admin.md diff --git a/skills/kesekit-start/templates/cii/cloud.md b/skills/kesekit-start/templates/cii/cloud.md new file mode 100644 index 0000000..42834e8 --- /dev/null +++ b/skills/kesekit-start/templates/cii/cloud.md @@ -0,0 +1,45 @@ +# 클라우드 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: AWS, Azure, GCP 등 클라우드 환경 + +## 1. 계정 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-01 | 클라우드 관리 콘솔 기본 계정 변경 | 상 | +| CA-02 | 비밀번호 복잡성 및 MFA 설정 | 상 | +| CA-03 | 불필요한 계정/키 제거 | 상 | +| CA-04 | 루트/관리자 계정 직접 사용 제한 | 상 | + +## 2. 권한 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-05 | IAM 최소 권한 원칙 적용 | 상 | +| CA-06 | 서비스 계정/역할 권한 제한 | 상 | + +## 3. 가상 리소스 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-07 | 보안 그룹/네트워크 ACL 설정 | 상 | +| CA-08 | 스토리지 접근 권한 및 암호화 | 상 | +| CA-09 | 가상 네트워크 분리 (VPC/서브넷) | 상 | +| CA-10 | 미사용 리소스 점검 및 제거 | 중 | + +## 4. 운영 관리 (9항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CA-11 | 클라우드 감사 로깅 활성화 | 상 | +| CA-12 | 보안 모니터링 및 알림 설정 | 상 | +| CA-13 | 데이터 백업 및 복구 정책 | 상 | +| CA-14 | 보안 패치 및 이미지 관리 | 상 | +| CA-15 | API 키/시크릿 관리 | 상 | +| CA-16 | 전송 중/저장 시 암호화 | 상 | +| CA-17 | 인스턴스 메타데이터 보호 | 중 | +| CA-18 | 컨테이너/서버리스 보안 설정 | 중 | +| CA-19 | 클라우드 서비스 가용성 관리 | 중 | + +## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills/start/references/cii/control-system.md b/skills/kesekit-start/templates/cii/control-system.md similarity index 100% rename from skills/start/references/cii/control-system.md rename to skills/kesekit-start/templates/cii/control-system.md diff --git a/skills/kesekit-start/templates/cii/database.md b/skills/kesekit-start/templates/cii/database.md new file mode 100644 index 0000000..d6847e0 --- /dev/null +++ b/skills/kesekit-start/templates/cii/database.md @@ -0,0 +1,52 @@ +# DBMS 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Oracle DB, MSSQL, MySQL, PostgreSQL, Altibase, Tibero, Cubrid + +## 1. 계정 관리 (9항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-01 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | 상 | +| D-02 | 불필요 계정 제거 또는 잠금설정 | 상 | +| D-03 | 비밀번호 사용기간 및 복잡도 설정 | 상 | +| D-04 | 관리자 권한을 필요한 계정/그룹에만 허용 | 상 | +| D-05 | 비밀번호 재사용 제약 설정 | 중 | +| D-06 | DB 사용자 계정 개별 부여 | 중 | +| D-07 | root 권한으로 서비스 구동 제한 | 중 | +| D-08 | 안전한 암호화 알고리즘 사용 | 상 | +| D-09 | 로그인 실패 시 잠금정책 설정 | 중 | + +## 2. 접근 관리 (7항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-10 | 원격에서 DB 서버 접속 제한 | 상 | +| D-11 | 비인가 사용자의 시스템 테이블 접근 차단 | 상 | +| D-12 | 안전한 리스너 비밀번호 설정 | 상 | +| D-13 | 불필요한 ODBC/OLE-DB 데이터 소스 제거 | 중 | +| D-14 | 주요 파일 접근 권한 설정 | 중 | +| D-15 | 리스너 로그/trace 파일 변경 제한 | 하 | +| D-16 | Windows 인증 모드 사용 | 하 | + +## 3. 옵션 관리 (8항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-17 | Audit Table 관리자 접근 제한 | 하 | +| D-18 | Role이 Public으로 설정되지 않도록 조정 | 상 | +| D-19 | OS_ROLES 등 원격 인증 FALSE 설정 | 상 | +| D-20 | 인가되지 않은 Object owner 제한 | 하 | +| D-21 | 인가되지 않은 GRANT OPTION 사용 제한 | 중 | +| D-22 | 자원 제한 기능 TRUE 설정 | 하 | +| D-23 | xp_cmdshell 사용 제한 | 상 | +| D-24 | Registry Procedure 권한 제한 | 상 | + +## 4. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| D-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| D-26 | 감사 기록 정책 적합 설정 | 상 | + +## 통계: 총 26항목 (상 13, 중 7, 하 6) diff --git a/skills/start/references/cii/mobile.md b/skills/kesekit-start/templates/cii/mobile.md similarity index 100% rename from skills/start/references/cii/mobile.md rename to skills/kesekit-start/templates/cii/mobile.md diff --git a/skills/kesekit-start/templates/cii/network.md b/skills/kesekit-start/templates/cii/network.md new file mode 100644 index 0000000..e168fb3 --- /dev/null +++ b/skills/kesekit-start/templates/cii/network.md @@ -0,0 +1,69 @@ +# 네트워크 장비 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Cisco, Alteon, Passport, Juniper, Piolink 등 + +## 1. 계정 관리 (5항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-01 | 비밀번호 설정 | 상 | +| N-02 | 비밀번호 복잡성 설정 | 상 | +| N-03 | 암호화된 비밀번호 사용 | 상 | +| N-04 | 계정 잠금 임계값 설정 | 상 | +| N-05 | 사용자, 명령어별 권한 수준 설정 | 중 | + +## 2. 접근 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-06 | VTY 접근(ACL) 설정 | 상 | +| N-07 | 세션 종료 시간 설정 | 상 | +| N-08 | VTY 접속 시 안전한 프로토콜 사용 | 중 | +| N-09 | 불필요한 보조 입출력 포트 사용 금지 | 중 | +| N-10 | 로그온 시 경고 메시지 설정 | 중 | +| N-11 | 원격 로그서버 사용 | 중 | + +## 3. 패치 관리 (1항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-12 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | + +## 4. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-13 | 로깅 버퍼 크기 설정 | 중 | +| N-14 | 정책에 따른 로깅 설정 | 중 | +| N-15 | NTP 및 시각 동기화 설정 | 중 | +| N-16 | Timestamp 로그 설정 | 하 | + +## 5. 기능 관리 (22항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| N-17 | SNMP 서비스 확인 | 상 | +| N-18 | SNMP Community String 복잡성 설정 | 상 | +| N-19 | SNMP ACL 설정 | 상 | +| N-20 | SNMP Community 권한 설정 | 상 | +| N-21 | TFTP 서비스 차단 | 상 | +| N-22 | Spoofing 방지 필터링 적용 | 상 | +| N-23 | DDoS 공격 방어 설정 또는 DDoS 장비 사용 | 상 | +| N-24 | 사용하지 않는 인터페이스 비활성화 | 상 | +| N-25 | TCP Keepalive 서비스 설정 | 중 | +| N-26 | Finger 서비스 차단 | 중 | +| N-27 | 웹 서비스 차단 | 중 | +| N-28 | TCP/UDP small 서비스 차단 | 중 | +| N-29 | Bootp 서비스 차단 | 중 | +| N-30 | CDP 서비스 차단 | 중 | +| N-31 | Directed-broadcast 차단 | 중 | +| N-32 | Source 라우팅 차단 | 중 | +| N-33 | Proxy ARP 차단 | 중 | +| N-34 | ICMP unreachable, Redirect 차단 | 중 | +| N-35 | identd 서비스 차단 | 중 | +| N-36 | Domain Lookup 차단 | 중 | +| N-37 | pad 차단 | 중 | +| N-38 | mask-reply 차단 | 중 | + +## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills/kesekit-start/templates/cii/pc.md b/skills/kesekit-start/templates/cii/pc.md new file mode 100644 index 0000000..b5ca66b --- /dev/null +++ b/skills/kesekit-start/templates/cii/pc.md @@ -0,0 +1,44 @@ +# PC 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Windows 10, Windows 11 + +## 1. 계정 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-01 | 비밀번호의 주기적 변경 | 상 | +| PC-02 | 비밀번호 관리정책 설정 | 상 | +| PC-03 | 복구 콘솔에서 자동 로그온 금지 설정 | 중 | + +## 2. 서비스 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-04 | 공유 폴더 제거 | 상 | +| PC-05 | 불필요한 서비스 제거 | 상 | +| PC-06 | 비인가 상용 메신저 사용 금지 | 상 | +| PC-07 | 파일 시스템이 NTFS 포맷으로 설정 | 중 | +| PC-08 | 다른 OS로 멀티 부팅 불가 설정 | 중 | +| PC-09 | 브라우저 종료 시 임시 인터넷 파일 삭제 | 하 | + +## 3. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-10 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| PC-11 | 지원 종료되지 않은 Windows OS Build 적용 | 상 | + +## 4. 보안 관리 (7항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| PC-12 | Windows 자동 로그인 점검 | 중 | +| PC-13 | 바이러스 백신 설치 및 주기적 업데이트 | 상 | +| PC-14 | 실시간 감시 기능 활성화 | 상 | +| PC-15 | OS 침입차단 기능 활성화 | 상 | +| PC-16 | 화면보호기 대기 시간 및 암호 보호 설정 | 상 | +| PC-17 | 이동식 미디어 자동실행 방지 | 상 | +| PC-18 | 원격 지원 금지 정책 설정 | 중 | + +## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills/start/references/cii/physical.md b/skills/kesekit-start/templates/cii/physical.md similarity index 100% rename from skills/start/references/cii/physical.md rename to skills/kesekit-start/templates/cii/physical.md diff --git a/skills/start/references/cii/security-equip.md b/skills/kesekit-start/templates/cii/security-equip.md similarity index 100% rename from skills/start/references/cii/security-equip.md rename to skills/kesekit-start/templates/cii/security-equip.md diff --git a/skills/kesekit-start/templates/cii/unix.md b/skills/kesekit-start/templates/cii/unix.md new file mode 100644 index 0000000..969c52f --- /dev/null +++ b/skills/kesekit-start/templates/cii/unix.md @@ -0,0 +1,124 @@ +# Unix 서버 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: SOLARIS, LINUX, AIX, HP-UX + +## 1. 계정 관리 (13항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-01 | root 계정 원격 접속 제한 | 상 | +| U-02 | 비밀번호 관리정책 설정 | 상 | +| U-03 | 계정 잠금 임계값 설정 | 상 | +| U-04 | 비밀번호 파일 보호 | 상 | +| U-05 | root 이외의 UID가 '0' 금지 | 상 | +| U-06 | 사용자 계정 su 기능 제한 | 상 | +| U-07 | 불필요한 계정 제거 | 하 | +| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | +| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | +| U-10 | 동일한 UID 금지 | 중 | +| U-11 | 사용자 Shell 점검 | 하 | +| U-12 | 세션 종료 시간 설정 | 하 | +| U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | + +--- + +## 2. 파일 및 디렉터리 관리 (20항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-14 | root 홈, 패스 디렉터리 권한 및 패스 설정 | 상 | +| U-15 | 파일 및 디렉터리 소유자 설정 | 상 | +| U-16 | /etc/passwd 파일 소유자 및 권한 설정 | 상 | +| U-17 | 시스템 시작 스크립트 권한 설정 | 상 | +| U-18 | /etc/shadow 파일 소유자 및 권한 설정 | 상 | +| U-19 | /etc/hosts 파일 소유자 및 권한 설정 | 상 | +| U-20 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | 상 | +| U-21 | /etc/(r)syslog.conf 파일 소유자 및 권한 설정 | 상 | +| U-22 | /etc/services 파일 소유자 및 권한 설정 | 상 | +| U-23 | SUID, SGID, Sticky bit 설정 파일 점검 | 상 | +| U-24 | 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 | 상 | +| U-25 | world writable 파일 점검 | 상 | +| U-26 | /dev에 존재하지 않는 device 파일 점검 | 상 | +| U-27 | $HOME/.rhosts, hosts.equiv 사용 금지 | 상 | +| U-28 | 접속 IP 및 포트 제한 | 상 | +| U-29 | hosts.lpd 파일 소유자 및 권한 설정 | 하 | +| U-30 | UMASK 설정 관리 | 중 | +| U-31 | 홈 디렉토리 소유자 및 권한 설정 | 중 | +| U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | +| U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | + +--- + +## 3. 서비스 관리 (30항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-34 | Finger 서비스 비활성화 | 상 | +| U-35 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | +| U-36 | r 계열 서비스 비활성화 | 상 | +| U-37 | crontab 설정파일 권한 설정 | 상 | +| U-38 | DoS 공격에 취약한 서비스 비활성화 | 상 | +| U-39 | 불필요한 NFS 서비스 비활성화 | 상 | +| U-40 | NFS 접근 통제 | 상 | +| U-41 | 불필요한 automountd 제거 | 상 | +| U-42 | 불필요한 RPC 서비스 비활성화 | 상 | +| U-43 | NIS, NIS+ 점검 | 상 | +| U-44 | tftp, talk 서비스 비활성화 | 상 | +| U-45 | 메일 서비스 버전 점검 | 상 | +| U-46 | 일반 사용자의 메일 서비스 실행 방지 | 상 | +| U-47 | 스팸 메일 릴레이 제한 | 상 | +| U-48 | expn, vrfy 명령어 제한 | 중 | +| U-49 | DNS 보안 버전 패치 | 상 | +| U-50 | DNS Zone Transfer 설정 | 상 | +| U-51 | DNS 서비스의 취약한 동적 업데이트 설정 금지 | 중 | +| U-52 | Telnet 서비스 비활성화 | 중 | +| U-53 | FTP 서비스 정보 노출 제한 | 하 | +| U-54 | 암호화되지 않는 FTP 서비스 비활성화 | 중 | +| U-55 | FTP 계정 Shell 제한 | 중 | +| U-56 | FTP 서비스 접근 제어 설정 | 하 | +| U-57 | Ftpusers 파일 설정 | 중 | +| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| U-59 | 안전한 SNMP 버전 사용 | 상 | +| U-60 | SNMP Community String 복잡성 설정 | 중 | +| U-61 | SNMP Access Control 설정 | 상 | +| U-62 | 로그인 시 경고 메시지 설정 | 하 | +| U-63 | sudo 명령어 접근 관리 | 중 | + +--- + +## 4. 패치 관리 (1항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | + +--- + +## 5. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| U-65 | NTP 및 시각 동기화 설정 | 중 | +| U-66 | 정책에 따른 시스템 로깅 설정 | 중 | +| U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | + +--- + +## 판단 기준 + +| 판단 | 설명 | +|------|------| +| 양호 | 보안 설정이 적절히 적용됨 | +| 취약 | 보안 취약점 존재, 조치 필요 | + +## 통계 + +| 분류 | 항목 수 | 상 | 중 | 하 | +|------|:------:|:--:|:--:|:--:| +| 계정 관리 | 13 | 6 | 4 | 3 | +| 파일/디렉터리 관리 | 20 | 15 | 3 | 2 | +| 서비스 관리 | 30 | 19 | 9 | 2 | +| 패치 관리 | 1 | 1 | 0 | 0 | +| 로그 관리 | 3 | 0 | 3 | 0 | +| **합계** | **67** | **41** | **19** | **7** | diff --git a/skills/start/references/cii/virtualization.md b/skills/kesekit-start/templates/cii/virtualization.md similarity index 100% rename from skills/start/references/cii/virtualization.md rename to skills/kesekit-start/templates/cii/virtualization.md diff --git a/skills/kesekit-start/templates/cii/web-service.md b/skills/kesekit-start/templates/cii/web-service.md new file mode 100644 index 0000000..9f6298a --- /dev/null +++ b/skills/kesekit-start/templates/cii/web-service.md @@ -0,0 +1,52 @@ +# 웹 서비스 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: Apache, Nginx, IIS, Tomcat, JEUS + +## 1. 계정 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-01 | Default 관리자 계정명 변경 | 상 | +| WEB-02 | 취약한 비밀번호 사용 제한 | 상 | +| WEB-03 | 비밀번호 파일 권한 관리 | 상 | + +## 2. 서비스 관리 (15항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-04 | 웹 서비스 디렉터리 리스팅 방지 설정 | 상 | +| WEB-05 | 지정하지 않은 CGI/ISAPI 실행 제한 | 상 | +| WEB-06 | 웹 서비스 상위 디렉터리 접근 제한 설정 | 상 | +| WEB-07 | 웹 서비스 경로 내 불필요한 파일 제거 | 중 | +| WEB-08 | 웹 서비스 파일 업로드 및 다운로드 용량 제한 | 하 | +| WEB-09 | 웹 서비스 프로세스 권한 제한 | 상 | +| WEB-10 | 불필요한 프록시 설정 제한 | 상 | +| WEB-11 | 웹 서비스 경로 설정 | 중 | +| WEB-12 | 웹 서비스 링크 사용 금지 | 중 | +| WEB-13 | 웹 서비스 설정 파일 노출 제한 | 상 | +| WEB-14 | 웹 서비스 경로 내 파일의 접근 통제 | 상 | +| WEB-15 | 웹 서비스의 불필요한 스크립트 매핑 제거 | 상 | +| WEB-16 | 웹 서비스 헤더 정보 노출 제한 | 중 | +| WEB-17 | 웹 서비스 가상 디렉토리 삭제 | 중 | +| WEB-18 | 웹 서비스 WebDAV 비활성화 | 상 | + +## 3. 보안 설정 (5항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-19 | 웹 서비스 SSI 사용 제한 | 중 | +| WEB-20 | SSL/TLS 활성화 | 상 | +| WEB-21 | HTTP 리디렉션 | 중 | +| WEB-22 | 에러 페이지 관리 | 하 | +| WEB-23 | LDAP 알고리즘 적절하게 구성 | 중 | + +## 4. 패치 및 로그 관리 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| WEB-24 | 별도의 업로드 경로 사용 및 권한 설정 | 중 | +| WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | + +## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills/kesekit-start/templates/cii/webapp.md b/skills/kesekit-start/templates/cii/webapp.md new file mode 100644 index 0000000..ca84427 --- /dev/null +++ b/skills/kesekit-start/templates/cii/webapp.md @@ -0,0 +1,47 @@ +# Web Application 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) +> 대상: 웹 애플리케이션 소스 코드 및 설정 + +## 1. 입력값 검증 (8항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| CI | Command Injection | 상 | +| SI | SQL Injection | 상 | +| XS | Cross-Site Scripting (XSS) | 상 | +| CF | Cross-Site Request Forgery (CSRF) | 상 | +| SF | Server-Side Request Forgery (SSRF) | 상 | +| FU | File Upload 취약점 | 상 | +| FD | File Download 취약점 | 상 | +| DI | 디렉터리 인덱싱 | 중 | + +## 2. 인증/세션 관리 (6항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| BF | Brute Force 공격 | 상 | +| IA | 불충분한 인증 (Insufficient Authentication) | 상 | +| PR | 비밀번호 복구 취약점 | 중 | +| IS | 불충분한 세션 관리 | 상 | +| CC | 세션 고정 (Credential/Session Prediction) | 상 | +| SN | 세션 만료 미설정 | 중 | + +## 3. 접근제어 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| IN | 불충분한 인가 (Insufficient Authorization) | 상 | +| PV | 경로 조작 (Path Traversal) | 상 | +| AE | 관리자 페이지 노출 | 상 | +| WM | HTTP Method 제한 미설정 | 중 | + +## 4. 정보노출 (3항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| EP | 에러 페이지를 통한 정보 노출 | 중 | +| IL | 불필요한 정보 노출 | 중 | +| AU | 부적절한 감사 로깅 | 중 | + +## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills/kesekit-start/templates/cii/windows.md b/skills/kesekit-start/templates/cii/windows.md new file mode 100644 index 0000000..15a5c32 --- /dev/null +++ b/skills/kesekit-start/templates/cii/windows.md @@ -0,0 +1,113 @@ +# Windows 서버 취약점 분석·평가 항목 + +> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) + +## 1. 계정 관리 (14항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-01 | Administrator 계정 이름 변경 등 보안성 강화 | 상 | +| W-02 | Guest 계정 비활성화 | 상 | +| W-03 | 불필요한 계정 제거 | 상 | +| W-04 | 계정 잠금 임계값 설정 | 상 | +| W-05 | 해독 가능한 암호화를 사용하여 암호 저장 해제 | 상 | +| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | +| W-07 | Everyone 사용 권한을 익명 사용자에게 적용 | 중 | +| W-08 | 계정 잠금 기간 설정 | 중 | +| W-09 | 비밀번호 관리정책 설정 | 상 | +| W-10 | 마지막 사용자 이름 표시 안 함 | 중 | +| W-11 | 로컬 로그온 허용 | 중 | +| W-12 | 익명 SID/이름 변환 허용 해제 | 중 | +| W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | +| W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | + +--- + +## 2. 서비스 관리 (23항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-15 | 사용자 개인키 사용 시 암호 입력 | 상 | +| W-16 | 공유 권한 및 사용자 그룹 설정 | 상 | +| W-17 | 하드디스크 기본 공유 제거 | 상 | +| W-18 | 불필요한 서비스 제거 | 상 | +| W-19 | 불필요한 IIS 서비스 구동 점검 | 상 | +| W-20 | NetBIOS 바인딩 서비스 구동 점검 | 상 | +| W-21 | 암호화되지 않는 FTP 서비스 비활성화 | 상 | +| W-22 | FTP 디렉토리 접근권한 설정 | 상 | +| W-23 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | +| W-24 | FTP 접근 제어 설정 | 상 | +| W-25 | DNS Zone Transfer 설정 | 상 | +| W-26 | RDS(Remote Data Services) 제거 | 상 | +| W-27 | 최신 Windows OS Build 버전 적용 | 상 | +| W-28 | 터미널 서비스 암호화 수준 설정 | 중 | +| W-29 | 불필요한 SNMP 서비스 구동 점검 | 중 | +| W-30 | SNMP Community String 복잡성 설정 | 중 | +| W-31 | SNMP Access Control 설정 | 중 | +| W-32 | DNS 서비스 구동 점검 | 중 | +| W-33 | HTTP/FTP/SMTP 배너 차단 | 하 | +| W-34 | Telnet 서비스 비활성화 | 중 | +| W-35 | 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 | 중 | +| W-36 | 원격터미널 접속 타임아웃 설정 | 중 | +| W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | + +--- + +## 3. 패치 관리 (2항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | +| W-39 | 백신 프로그램 업데이트 | 상 | + +--- + +## 4. 로그 관리 (4항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-40 | 정책에 따른 시스템 로깅 설정 | 중 | +| W-41 | NTP 및 시각 동기화 설정 | 중 | +| W-42 | 이벤트 로그 관리 설정 | 하 | +| W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | + +--- + +## 5. 보안 관리 (21항목) + +| 코드 | 항목 | 중요도 | +|------|------|:------:| +| W-44 | 원격으로 액세스할 수 있는 레지스트리 경로 | 상 | +| W-45 | 백신 프로그램 설치 | 상 | +| W-46 | SAM 파일 접근 통제 설정 | 상 | +| W-47 | 화면보호기 설정 | 상 | +| W-48 | 로그온하지 않고 시스템 종료 허용 | 상 | +| W-49 | 원격 시스템에서 강제로 시스템 종료 | 상 | +| W-50 | 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 | 상 | +| W-51 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | +| W-52 | Autologon 기능 제어 | 상 | +| W-53 | 이동식 미디어 포맷 및 꺼내기 허용 | 상 | +| W-54 | DoS 공격 방어 레지스트리 설정 | 중 | +| W-55 | 사용자가 프린터 드라이버를 설치할 수 없게 함 | 중 | +| W-56 | SMB 세션 중단 관리 설정 | 중 | +| W-57 | 로그온 시 경고 메시지 설정 | 하 | +| W-58 | 사용자별 홈 디렉터리 권한 설정 | 중 | +| W-59 | LAN Manager 인증 수준 | 중 | +| W-60 | 보안 채널 데이터 디지털 암호화 또는 서명 | 중 | +| W-61 | 파일 및 디렉토리 보호 | 중 | +| W-62 | 시작프로그램 목록 분석 | 중 | +| W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | +| W-64 | 윈도우 방화벽 설정 | 중 | + +--- + +## 통계 + +| 분류 | 항목 수 | 상 | 중 | 하 | +|------|:------:|:--:|:--:|:--:| +| 계정 관리 | 14 | 7 | 7 | 0 | +| 서비스 관리 | 23 | 13 | 9 | 1 | +| 패치 관리 | 2 | 2 | 0 | 0 | +| 로그 관리 | 4 | 0 | 3 | 1 | +| 보안 관리 | 21 | 10 | 10 | 1 | +| **합계** | **64** | **32** | **29** | **3** | diff --git a/skills/start/references/robot-security/cyber-resilience.md b/skills/kesekit-start/templates/robot-security/cyber-resilience.md similarity index 100% rename from skills/start/references/robot-security/cyber-resilience.md rename to skills/kesekit-start/templates/robot-security/cyber-resilience.md diff --git a/skills/start/references/robot-security/iec62443.md b/skills/kesekit-start/templates/robot-security/iec62443.md similarity index 100% rename from skills/start/references/robot-security/iec62443.md rename to skills/kesekit-start/templates/robot-security/iec62443.md diff --git a/skills/start/references/robot-security/overview.md b/skills/kesekit-start/templates/robot-security/overview.md similarity index 100% rename from skills/start/references/robot-security/overview.md rename to skills/kesekit-start/templates/robot-security/overview.md diff --git a/skills/start/references/robot-security/ssdf.md b/skills/kesekit-start/templates/robot-security/ssdf.md similarity index 100% rename from skills/start/references/robot-security/ssdf.md rename to skills/kesekit-start/templates/robot-security/ssdf.md diff --git a/skills/start/references/robot-security/supply-chain.md b/skills/kesekit-start/templates/robot-security/supply-chain.md similarity index 100% rename from skills/start/references/robot-security/supply-chain.md rename to skills/kesekit-start/templates/robot-security/supply-chain.md diff --git a/skills/start/references/robot-security/wireless.md b/skills/kesekit-start/templates/robot-security/wireless.md similarity index 100% rename from skills/start/references/robot-security/wireless.md rename to skills/kesekit-start/templates/robot-security/wireless.md diff --git a/skills/kesekit-start/templates/secure-coding/javascript.md b/skills/kesekit-start/templates/secure-coding/javascript.md new file mode 100644 index 0000000..761a1ec --- /dev/null +++ b/skills/kesekit-start/templates/secure-coding/javascript.md @@ -0,0 +1,1505 @@ +# Secure Coding Guide — JavaScript + +KISA JavaScript 시큐어코딩 가이드(ref-011, 159p, 42개 항목) 기반, JS 프레임워크별 구현 예시입니다. +Express.js, Sequelize, Mongoose, Node.js crypto, helmet, csurf 등 실무 프레임워크 코드를 사용합니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Express.js + mysql 드라이버** + +```javascript +// UNSAFE — 입력값을 쿼리에 직접 결합 +const mysql = require("mysql"); +const connection = mysql.createConnection(/* ... */); + +router.get("/vuln/email", (req, res) => { + const userInput = req.query.id; + // 사용자 입력값을 검증 없이 쿼리에 삽입 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + connection.query(query, (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); + +// SAFE — 파라미터 바인딩 (? 플레이스홀더) +router.get("/safe/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = ?"; + connection.query(query, [userInput], (err, result) => { + if (err) return res.status(500).send("error"); + return res.send(result); + }); +}); +``` + +**Sequelize ORM** + +```javascript +// UNSAFE — ORM에서 raw query에 입력값 직접 삽입 +const { QueryTypes } = require("sequelize"); + +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); + +// SAFE — 바인딩 변수 사용 ($1 플레이스홀더) +router.get("/safe/orm/email", (req, res) => { + const userInput = req.query.id; + const query = "SELECT email FROM user WHERE user_id = $1"; + sequelize.query(query, { + bind: [userInput], + type: QueryTypes.SELECT, + }) + .then((result) => res.send(result)) + .catch((err) => res.status(500).send("error")); +}); +``` + +**Mongoose (NoSQL Injection 방어)** + +```javascript +// UNSAFE — 쿼리 객체에 외부 입력 직접 전달 (NoSQL Injection) +router.get("/vuln/user", async (req, res) => { + const user = await User.findOne({ username: req.query.username }); + // 공격: ?username[$ne]= → 모든 사용자 조회 + res.json(user); +}); + +// SAFE — mongo-sanitize로 연산자 제거 +const sanitize = require("mongo-sanitize"); + +router.get("/safe/user", async (req, res) => { + const username = sanitize(req.query.username); + const user = await User.findOne({ username }); + res.json(user); +}); +``` + +> **TIP** ORM 사용 시에도 raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, Function 등)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +```javascript +// UNSAFE — 외부 입력값을 eval()에 직접 전달 +router.post("/vuln/calc", (req, res) => { + const data = eval(req.body.data); + return res.send({ data }); +}); + +// SAFE — 화이트리스트 검증 + 안전한 파서 사용 +const { Parser } = require("expr-eval"); +const parser = new Parser(); + +router.post("/safe/calc", (req, res) => { + const input = req.body.expression; + // 영문, 숫자, 기본 연산자만 허용 + if (!/^[0-9a-zA-Z+\-*/.() ]+$/.test(input)) { + return res.status(400).send("Invalid expression"); + } + try { + const result = parser.evaluate(input); + return res.send({ result }); + } catch (e) { + return res.status(400).send("Parse error"); + } +}); +``` + +> **WARNING** `eval()`, `Function()`, `setTimeout(string)`, `setInterval(string)` 등 동적 코드 실행 함수는 절대 외부 입력값과 함께 사용하지 마세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +```javascript +// UNSAFE — 입력값을 경로에 직접 사용 +const path = require("path"); +const fs = require("fs"); + +router.get("/vuln/file", (req, res) => { + const requestFile = req.query.file; + // 공격: file=../../../../etc/passwd + fs.readFile(path.resolve(__dirname, requestFile), "utf8", (err, data) => { + if (err) return res.send("error"); + return res.send(data); + }); +}); + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +const UPLOAD_DIR = path.resolve(__dirname, "uploads"); + +router.get("/safe/file", (req, res) => { + const requestFile = req.query.file; + const fullPath = path.resolve(UPLOAD_DIR, requestFile); + // 정규화된 경로가 허용된 디렉터리 내에 있는지 확인 + if (!fullPath.startsWith(UPLOAD_DIR)) { + return res.status(403).send("Access denied"); + } + fs.readFile(fullPath, "utf8", (err, data) => { + if (err) return res.status(404).send("Not found"); + return res.send(data); + }); +}); +``` + +**소켓 자원 삽입 방어** + +```javascript +// UNSAFE — 외부 입력값으로 소켓 연결 +const io = require("socket.io-client"); + +router.get("/vuln/socket", (req, res) => { + const socket = io(req.query.url); + return res.send("connected"); +}); + +// SAFE — 화이트리스트 기반 연결 +router.get("/safe/socket", (req, res) => { + const whitelist = ["ws://localhost:3000", "ws://127.0.0.1:3000"]; + if (!whitelist.includes(req.query.url)) { + return res.status(400).send("Blocked URL"); + } + const socket = io(req.query.url); + return res.send("connected"); +}); +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Express.js 서버측** + +```javascript +// UNSAFE — 입력값을 HTML에 직접 삽입 +router.get("/vuln/search", (req, res) => { + const query = req.query.q; + res.send(`

Results for: ${query}

`); + // 공격: q= +}); + +// SAFE — HTML 이스케이프 적용 + helmet 헤더 설정 +const helmet = require("helmet"); +const escapeHtml = require("escape-html"); + +app.use(helmet()); // X-XSS-Protection, CSP 등 보안 헤더 자동 설정 + +router.get("/safe/search", (req, res) => { + const query = escapeHtml(req.query.q); + res.send(`

Results for: ${query}

`); +}); +``` + +**클라이언트측 (VanillaJS)** + +```javascript +// UNSAFE — innerHTML로 외부 데이터 직접 삽입 +document.getElementById("output").innerHTML = serverData; + +// SAFE — textContent 사용 (HTML 파싱 방지) +document.getElementById("output").textContent = serverData; +``` + +**React (기본적으로 이스케이프)** + +```javascript +// UNSAFE — dangerouslySetInnerHTML 사용 +function Comment({ body }) { + return
; +} + +// SAFE — React의 기본 이스케이프 활용 +function Comment({ body }) { + return
{body}
; // 자동 이스케이프 +} + +// 부득이한 경우 — DOMPurify로 sanitize 후 사용 +import DOMPurify from "dompurify"; + +function Comment({ body }) { + const clean = DOMPurify.sanitize(body); + return
; +} +``` + +> **TIP** `helmet` 미들웨어로 CSP(Content-Security-Policy) 헤더를 설정하고, 템플릿 엔진의 자동 이스케이프 기능을 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```javascript +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +const { exec } = require("child_process"); + +router.get("/vuln/ping", (req, res) => { + const host = req.query.host; + exec(`ping -c 4 ${host}`, (err, stdout) => { + // 공격: host=127.0.0.1; rm -rf / + res.send(stdout); + }); +}); + +// SAFE — execFile로 인자 배열 전달 (쉘 해석 방지) +const { execFile } = require("child_process"); + +router.get("/safe/ping", (req, res) => { + const host = req.query.host; + // 입력값 검증: IP/호스트명 패턴만 허용 + if (!/^[a-zA-Z0-9.\-]+$/.test(host)) { + return res.status(400).send("Invalid host"); + } + execFile("ping", ["-c", "4", host], (err, stdout) => { + if (err) return res.status(500).send("error"); + res.send(stdout); + }); +}); +``` + +> **TIP** `child_process.exec()` 대신 `child_process.execFile()` 또는 `child_process.spawn()`을 사용하면 쉘 해석 없이 명령을 실행합니다. + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```javascript +// UNSAFE — 파일 확장자 검증 없이 저장 +const multer = require("multer"); +const upload = multer({ dest: "uploads/" }); + +router.post("/vuln/upload", upload.single("file"), (req, res) => { + // 원본 파일명 그대로 저장, 확장자 무검증 + const destPath = `uploads/${req.file.originalname}`; + fs.renameSync(req.file.path, destPath); + res.send("Uploaded"); +}); + +// SAFE — 화이트리스트 확장자 + 랜덤 파일명 + 크기 제한 +const path = require("path"); +const crypto = require("crypto"); + +const safeUpload = multer({ + limits: { fileSize: 5 * 1024 * 1024 }, // 5MB 제한 + fileFilter: (req, file, cb) => { + const ALLOWED_EXTS = [".jpg", ".jpeg", ".png", ".pdf", ".docx"]; + const ext = path.extname(file.originalname).toLowerCase(); + if (!ALLOWED_EXTS.includes(ext)) { + return cb(new Error("Disallowed file type"), false); + } + cb(null, true); + }, +}); + +router.post("/safe/upload", safeUpload.single("file"), (req, res) => { + const ext = path.extname(req.file.originalname).toLowerCase(); + const safeName = crypto.randomUUID() + ext; + const destPath = path.join("uploads/", safeName); + fs.renameSync(req.file.path, destPath); + res.send("Uploaded: " + safeName); +}); +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```javascript +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +router.get("/vuln/redirect", (req, res) => { + const next = req.query.next; + res.redirect(next); + // 공격: next=https://evil.com +}); + +// SAFE — 허용된 도메인/경로만 리다이렉트 +router.get("/safe/redirect", (req, res) => { + const next = req.query.next; + const ALLOWED_HOSTS = ["mysite.com", "www.mysite.com"]; + try { + const parsed = new URL(next, `https://${req.hostname}`); + if (!ALLOWED_HOSTS.includes(parsed.hostname)) { + return res.redirect("/"); + } + res.redirect(parsed.href); + } catch { + res.redirect("/"); + } +}); +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```javascript +// UNSAFE — 외부 엔티티 처리 허용 +const libxmljs = require("libxmljs"); + +router.post("/vuln/xml", (req, res) => { + // noent: true → 외부 엔티티 확장 허용 (위험) + const doc = libxmljs.parseXml(req.body, { noent: true }); + res.send(doc.toString()); +}); + +// SAFE — 외부 엔티티 비활성화 +router.post("/safe/xml", (req, res) => { + // noent 옵션을 비활성화 (기본값: false) + const doc = libxmljs.parseXml(req.body, { noent: false, noblanks: true }); + res.send(doc.toString()); +}); + +// 대안 — fast-xml-parser 사용 (DTD/엔티티 미지원으로 안전) +const { XMLParser } = require("fast-xml-parser"); +const parser = new XMLParser(); + +router.post("/safe/xml2", (req, res) => { + const result = parser.parse(req.body); + res.json(result); +}); +``` + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```javascript +// UNSAFE — 입력값을 XPath에 직접 삽입 +const xpath = require("xpath"); +const { DOMParser } = require("xmldom"); + +router.get("/vuln/xpath", (req, res) => { + const username = req.query.user; + const doc = new DOMParser().parseFromString(xmlData); + // 공격: user=' or '1'='1 + const nodes = xpath.select(`//users/user[name='${username}']`, doc); + res.json(nodes); +}); + +// SAFE — 입력값에서 XPath 특수문자 이스케이프 +function escapeXPath(value) { + if (!value.includes("'")) return `'${value}'`; + if (!value.includes('"')) return `"${value}"`; + return "concat(" + value.split("'").map(s => `'${s}'`).join(`,"'"`) + ")"; +} + +router.get("/safe/xpath", (req, res) => { + const username = req.query.user; + // 영숫자만 허용 + if (!/^[a-zA-Z0-9_]+$/.test(username)) { + return res.status(400).send("Invalid input"); + } + const doc = new DOMParser().parseFromString(xmlData); + const nodes = xpath.select(`//users/user[name=${escapeXPath(username)}]`, doc); + res.json(nodes); +}); +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```javascript +// UNSAFE — 입력값을 LDAP 필터에 직접 삽입 +const ldap = require("ldapjs"); +const client = ldap.createClient({ url: "ldap://localhost:389" }); + +router.get("/vuln/ldap", (req, res) => { + const username = req.query.user; + const filter = `(uid=${username})`; + // 공격: user=*)(|(uid=*) → 모든 사용자 조회 + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); + +// SAFE — LDAP 특수문자 이스케이프 +function escapeLDAP(input) { + return input.replace(/[\\*()&|!<>=~]/g, (ch) => { + return "\\" + ch.charCodeAt(0).toString(16).padStart(2, "0"); + }); +} + +router.get("/safe/ldap", (req, res) => { + const username = escapeLDAP(req.query.user); + const filter = `(uid=${username})`; + client.search("dc=example,dc=com", { filter }, (err, result) => { + // ... + }); +}); +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +```javascript +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.post("/vuln/transfer", (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); + +// SAFE — csurf 미들웨어로 CSRF 토큰 검증 +const csrf = require("csurf"); +const csrfProtection = csrf({ cookie: true }); + +// 토큰 발급 (폼 렌더링 시) +router.get("/safe/transfer", csrfProtection, (req, res) => { + res.render("transfer", { csrfToken: req.csrfToken() }); +}); + +// 토큰 검증 (상태 변경 시) +router.post("/safe/transfer", csrfProtection, (req, res) => { + const { amount, to } = req.body; + transferMoney(req.user, to, amount); + res.send("Transferred"); +}); +``` + +> **TIP** SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하면 추가 방어가 됩니다. `csurf`가 deprecated된 경우 `csrf-csrf` 또는 `lusca` 패키지를 사용하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```javascript +// UNSAFE — 입력 URL로 서버가 직접 요청 +const axios = require("axios"); + +router.get("/vuln/fetch", async (req, res) => { + const targetUrl = req.query.url; + // 공격: url=http://169.254.169.254/latest/meta-data/ + const response = await axios.get(targetUrl); + res.send(response.data); +}); + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +const { URL } = require("url"); +const ipaddr = require("ipaddr.js"); +const dns = require("dns").promises; + +async function isPrivateHost(hostname) { + try { + const { address } = await dns.lookup(hostname); + const addr = ipaddr.parse(address); + const range = addr.range(); + return ["private", "loopback", "linkLocal", "uniqueLocal"].includes(range); + } catch { + return true; // DNS 실패 시 차단 + } +} + +router.get("/safe/fetch", async (req, res) => { + try { + const parsed = new URL(req.query.url); + if (!["http:", "https:"].includes(parsed.protocol)) { + return res.status(400).send("Invalid scheme"); + } + if (await isPrivateHost(parsed.hostname)) { + return res.status(403).send("Blocked: internal address"); + } + const response = await axios.get(parsed.href, { timeout: 5000 }); + res.send(response.data); + } catch { + res.status(400).send("Request failed"); + } +}); +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```javascript +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +router.get("/vuln/admin", (req, res) => { + const isAdmin = req.cookies.isAdmin; + if (isAdmin === "true") { + return res.send("Admin Panel"); + } + res.status(403).send("Forbidden"); +}); + +// SAFE — 서버 세션에서 권한 확인 +router.get("/safe/admin", (req, res) => { + const user = req.session.user; + if (!user || user.role !== "admin") { + return res.status(403).send("Forbidden"); + } + res.send("Admin Panel"); +}); +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-15. Integer Overflow (CWE-190) + +> 해당 없음 (Python 고유 항목) + +--- + +### 1-16. Format String Injection (CWE-134) + +> 해당 없음 (Python 고유 항목) + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```javascript +// UNSAFE — 인증 없이 관리 기능 노출 +router.post("/vuln/admin/delete-user", (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); + +// SAFE — 인증 + 인가 미들웨어 적용 +function authRequired(req, res, next) { + if (!req.session || !req.session.user) { + return res.status(401).json({ error: "Authentication required" }); + } + next(); +} + +function adminOnly(req, res, next) { + if (req.session.user.role !== "admin") { + return res.status(403).json({ error: "Forbidden" }); + } + next(); +} + +router.post("/safe/admin/delete-user", authRequired, adminOnly, (req, res) => { + const userId = req.body.id; + User.destroy({ where: { id: userId } }); + res.send("Deleted"); +}); +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```javascript +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.get("/vuln/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + res.json(order); // 다른 사용자의 주문도 열람 가능 +}); + +// SAFE — 요청자와 소유자 일치 확인 +router.get("/safe/orders/:id", authRequired, async (req, res) => { + const order = await Order.findByPk(req.params.id); + if (!order) return res.status(404).json({ error: "Not found" }); + if (order.userId !== req.session.user.id) { + return res.status(403).json({ error: "Forbidden" }); + } + res.json(order); +}); +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```javascript +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +const fs = require("fs"); + +fs.writeFileSync("config/secrets.json", data); +fs.chmodSync("config/secrets.json", 0o777); + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +fs.writeFileSync("config/secrets.json", data, { mode: 0o600 }); +// 또는 +fs.chmodSync("config/secrets.json", 0o600); +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘을 사용하면 암호화된 데이터가 해독될 수 있습니다. + +```javascript +// UNSAFE — 취약한 알고리즘 사용 +const crypto = require("crypto"); + +const hash = crypto.createHash("md5").update(password).digest("hex"); +const cipher = crypto.createCipheriv("des-ecb", key, null); + +// SAFE — 강력한 알고리즘 사용 +const hash = crypto.createHash("sha256").update(data).digest("hex"); + +// AES-256-GCM (인증된 암호화) +const iv = crypto.randomBytes(12); +const cipher = crypto.createCipheriv("aes-256-gcm", key, iv); +let encrypted = cipher.update(plaintext, "utf8", "hex"); +encrypted += cipher.final("hex"); +const authTag = cipher.getAuthTag(); + +// 패스워드는 bcrypt 사용 +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +const isMatch = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +```javascript +// UNSAFE — 평문 저장 및 HTTP 전송 +await User.create({ email, password: plainPassword }); +await axios.post("http://api.example.com/login", { password: plainPassword }); + +// SAFE — 해싱 후 저장, HTTPS 전송 +const bcrypt = require("bcrypt"); +const hashedPassword = await bcrypt.hash(plainPassword, 12); +await User.create({ email, password: hashedPassword }); + +// HTTPS 강제 (helmet HSTS) +const helmet = require("helmet"); +app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true })); + +// HTTP → HTTPS 리다이렉트 +app.use((req, res, next) => { + if (!req.secure) { + return res.redirect(301, `https://${req.hostname}${req.url}`); + } + next(); +}); +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```javascript +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +const DB_PASSWORD = "super_secret_123"; +const JWT_SECRET = "my-jwt-secret-key-12345"; + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +require("dotenv").config(); + +const DB_PASSWORD = process.env.DB_PASSWORD; +const JWT_SECRET = process.env.JWT_SECRET; + +if (!DB_PASSWORD || !JWT_SECRET) { + throw new Error("Required environment variables are not set"); +} +``` + +> **WARNING** `.env` 파일은 반드시 `.gitignore`에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```javascript +// UNSAFE — 짧은 키 사용 +const crypto = require("crypto"); + +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 1024, // 1024비트는 취약 +}); + +// SAFE — 충분한 키 길이 +const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, // 최소 2048, 권장 4096 + publicKeyEncoding: { type: "spki", format: "pem" }, + privateKeyEncoding: { type: "pkcs8", format: "pem" }, +}); + +// AES 키 — 최소 256비트 +const aesKey = crypto.randomBytes(32); // 256비트 +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 일반 난수 생성기를 사용하면 예측 가능합니다. + +```javascript +// UNSAFE — 일반 난수 사용 +const token = Math.random().toString(36).substring(2); +const sessionId = Math.floor(Math.random() * 1000000).toString(); + +// SAFE — 암호학적 보안 난수 사용 +const crypto = require("crypto"); + +const token = crypto.randomBytes(32).toString("hex"); +const sessionId = crypto.randomUUID(); +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```javascript +// UNSAFE — 패스워드 정책 없음 +router.post("/vuln/register", async (req, res) => { + const { username, password } = req.body; + if (password.length > 0) { + await User.create({ username, password }); + res.send("Registered"); + } +}); + +// SAFE — 복잡도 검증 +function validatePassword(password) { + const errors = []; + if (password.length < 8) errors.push("8자 이상 입력하세요"); + if (password.length > 64) errors.push("64자 이하로 입력하세요"); + if (!/[A-Z]/.test(password)) errors.push("대문자를 포함하세요"); + if (!/[a-z]/.test(password)) errors.push("소문자를 포함하세요"); + if (!/[0-9]/.test(password)) errors.push("숫자를 포함하세요"); + if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) errors.push("특수문자를 포함하세요"); + return errors; +} + +router.post("/safe/register", async (req, res) => { + const { username, password } = req.body; + const errors = validatePassword(password); + if (errors.length > 0) { + return res.status(400).json({ errors }); + } + const hashed = await bcrypt.hash(password, 12); + await User.create({ username, password: hashed }); + res.send("Registered"); +}); +``` + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명/JWT를 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```javascript +// UNSAFE — 서명 검증 없이 디코딩만 수행 +const jwt = require("jsonwebtoken"); + +router.get("/vuln/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + const payload = jwt.decode(token); // 서명 검증 안 함 + res.json({ userId: payload.userId }); +}); + +// SAFE — 서명 검증 후 사용 + 알고리즘 고정 +router.get("/safe/profile", (req, res) => { + const token = req.headers.authorization?.split(" ")[1]; + try { + const payload = jwt.verify(token, process.env.JWT_SECRET, { + algorithms: ["HS256"], // 알고리즘 명시 (none 공격 방지) + }); + res.json({ userId: payload.userId }); + } catch (err) { + res.status(401).json({ error: "Invalid token" }); + } +}); +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```javascript +// UNSAFE — 인증서 검증 비활성화 +const https = require("https"); +const axios = require("axios"); + +// 전역 비활성화 (절대 사용 금지) +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +// 또는 요청별 비활성화 +const response = await axios.get("https://api.example.com", { + httpsAgent: new https.Agent({ rejectUnauthorized: false }), +}); + +// SAFE — 인증서 검증 유지 (기본값) +const response = await axios.get("https://api.example.com"); +// rejectUnauthorized 기본값이 true이므로 별도 설정 불필요 +``` + +> **WARNING** 개발 환경에서만 비활성화하고, 프로덕션에서는 절대 비활성화하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```javascript +// UNSAFE — 민감 정보를 쿠키에 저장 +router.post("/vuln/login", (req, res) => { + res.cookie("user_role", "admin"); + res.cookie("user_email", user.email); + res.send("Logged in"); +}); + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +const session = require("express-session"); + +app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: false, + cookie: { + httpOnly: true, // JavaScript에서 접근 불가 + secure: true, // HTTPS에서만 전송 + sameSite: "strict", // CSRF 방어 + maxAge: 3600000, // 1시간 + }, +})); + +router.post("/safe/login", (req, res) => { + req.session.user = { id: user.id, role: user.role }; + res.send("Logged in"); +}); +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```javascript +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef +// admin 계정 비번: admin123! + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +// API Key는 .env 또는 Vault에서 관리 +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```javascript +// UNSAFE — 솔트 없이 해싱 +const crypto = require("crypto"); + +const hashed = crypto.createHash("sha256").update(password).digest("hex"); + +// SAFE — 솔트 적용 (수동) +const salt = crypto.randomBytes(16).toString("hex"); +const hashed = crypto.createHash("sha256").update(salt + password).digest("hex"); +// salt와 hashed를 함께 저장: `${salt}:${hashed}` + +// SAFE — bcrypt 사용 (솔트 내장) +const bcrypt = require("bcrypt"); +const hashed = await bcrypt.hash(password, 12); +// 검증 +const isValid = await bcrypt.compare(inputPassword, hashed); +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```javascript +// UNSAFE — 체크섬 없이 다운로드 +const axios = require("axios"); +const fs = require("fs"); + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +fs.writeFileSync("lib.tar.gz", response.data); + +// SAFE — 해시 검증 후 저장 +const crypto = require("crypto"); + +const EXPECTED_HASH = "a1b2c3d4e5f6..."; // 사전에 알려진 해시 + +const response = await axios.get("https://cdn.example.com/lib.tar.gz", { + responseType: "arraybuffer", +}); +const hash = crypto.createHash("sha256").update(Buffer.from(response.data)).digest("hex"); +if (hash !== EXPECTED_HASH) { + throw new Error("Integrity check failed: hash mismatch"); +} +fs.writeFileSync("lib.tar.gz", response.data); +``` + +> **TIP** `npm install` 시 `package-lock.json`의 integrity 필드가 SRI(Subresource Integrity) 검증을 자동 수행합니다. + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```javascript +// UNSAFE — 시도 횟수 무제한 +router.post("/vuln/login", async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (user && await bcrypt.compare(password, user.password)) { + return res.send("Login success"); + } + res.status(401).send("Invalid credentials"); +}); + +// SAFE — express-rate-limit + 계정 잠금 +const rateLimit = require("express-rate-limit"); + +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15분 + max: 5, // 최대 5회 + message: "Too many login attempts. Please try again after 15 minutes.", + standardHeaders: true, + legacyHeaders: false, +}); + +router.post("/safe/login", loginLimiter, async (req, res) => { + const { username, password } = req.body; + const user = await User.findOne({ where: { username } }); + if (!user) return res.status(401).send("Invalid credentials"); + + if (user.loginAttempts >= 5 && user.lockUntil > Date.now()) { + return res.status(429).send("Account locked. Try again later."); + } + + if (await bcrypt.compare(password, user.password)) { + await user.update({ loginAttempts: 0, lockUntil: null }); + return res.send("Login success"); + } + + await user.update({ + loginAttempts: user.loginAttempts + 1, + lockUntil: user.loginAttempts + 1 >= 5 ? Date.now() + 15 * 60 * 1000 : null, + }); + res.status(401).send("Invalid credentials"); +}); +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) + +> 해당 없음 (Python 고유 항목) + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```javascript +// UNSAFE — 종료 조건 누락 +function processTree(node) { + processTree(node.left); // 종료 조건 없음 → 스택 오버플로우 + processTree(node.right); +} + +// UNSAFE — 외부 입력으로 반복 횟수 결정 +router.post("/vuln/repeat", (req, res) => { + const count = parseInt(req.body.count); + let result = ""; + for (let i = 0; i < count; i++) { // count가 매우 크면 서비스 거부 + result += "x"; + } + res.send(result); +}); + +// SAFE — 종료 조건 + 깊이 제한 +const MAX_DEPTH = 100; + +function processTree(node, depth = 0) { + if (!node || depth > MAX_DEPTH) return; + processTree(node.left, depth + 1); + processTree(node.right, depth + 1); +} + +// SAFE — 반복 횟수 상한 검증 +const MAX_COUNT = 10000; + +router.post("/safe/repeat", (req, res) => { + const count = Math.min(parseInt(req.body.count) || 0, MAX_COUNT); + if (count < 0) return res.status(400).send("Invalid count"); + const result = "x".repeat(count); + res.send(result); +}); +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +```javascript +// UNSAFE — 스택 트레이스를 그대로 반환 +app.use((err, req, res, next) => { + res.status(500).json({ + error: err.message, + stack: err.stack, // 내부 경로/라이브러리 버전 노출 + query: err.sql, // SQL 쿼리 노출 + }); +}); + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +const logger = require("winston"); + +app.use((err, req, res, next) => { + logger.error("Unhandled error", { + message: err.message, + stack: err.stack, + url: req.originalUrl, + method: req.method, + }); + res.status(500).json({ + error: "Internal server error. Please try again later.", + }); +}); + +// 프로덕션 환경에서 Express 기본 에러 페이지 비활성화 +if (process.env.NODE_ENV === "production") { + app.set("env", "production"); // 스택 트레이스 자동 숨김 +} +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시되어 후속 장애가 발생합니다. + +```javascript +// UNSAFE — 예외를 무시 +try { + const config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + // 아무 처리 없음 → config가 undefined인 채로 진행 +} + +// SAFE — 적절한 처리 또는 기본값 적용 +const logger = require("winston"); +const DEFAULT_CONFIG = { port: 3000, debug: false }; + +let config; +try { + config = JSON.parse(fs.readFileSync("config.json", "utf8")); +} catch (err) { + if (err.code === "ENOENT") { + logger.warn("Config file not found, using defaults"); + config = DEFAULT_CONFIG; + } else { + logger.error("Config load failed", { error: err.message }); + throw err; // 복구 불가능한 오류는 재발생 + } +} +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```javascript +// UNSAFE — 모든 예외를 한꺼번에 처리 +router.post("/vuln/process", async (req, res) => { + try { + const data = JSON.parse(req.body.data); + const result = await processData(data); + await saveResult(result); + res.json(result); + } catch (err) { + res.status(500).send("Something went wrong"); + // 입력 오류, 비즈니스 로직 오류, DB 오류를 모두 동일하게 처리 + } +}); + +// SAFE — 예외를 구체적으로 분리 처리 +router.post("/safe/process", async (req, res) => { + let data; + try { + data = JSON.parse(req.body.data); + } catch (err) { + return res.status(400).json({ error: "Invalid JSON format" }); + } + + let result; + try { + result = await processData(data); + } catch (err) { + if (err instanceof ValidationError) { + return res.status(422).json({ error: err.message }); + } + logger.error("Processing failed", { error: err.message }); + return res.status(500).json({ error: "Processing failed" }); + } + + try { + await saveResult(result); + } catch (err) { + logger.error("Save failed", { error: err.message }); + return res.status(500).json({ error: "Save failed" }); + } + + res.json(result); +}); +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +null/undefined 값을 참조하면 프로그램이 비정상 종료됩니다. + +```javascript +// UNSAFE — null 체크 없이 사용 +router.get("/vuln/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + res.json({ name: user.name }); // user가 null이면 TypeError +}); + +// SAFE — null 체크 후 사용 +router.get("/safe/user/:id", async (req, res) => { + const user = await User.findByPk(req.params.id); + if (!user) { + return res.status(404).json({ error: "User not found" }); + } + res.json({ name: user.name }); +}); + +// Optional chaining 활용 +const name = user?.profile?.name ?? "Unknown"; +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스(파일, DB 연결, 소켓)를 해제하지 않으면 리소스 고갈이 발생합니다. + +```javascript +// UNSAFE — 리소스 해제 누락 +const mysql = require("mysql2/promise"); + +router.get("/vuln/data", async (req, res) => { + const connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + // connection.end() 누락 → 커넥션 풀 고갈 + res.json(rows); +}); + +// SAFE — finally로 확실히 해제 +router.get("/safe/data", async (req, res) => { + let connection; + try { + connection = await mysql.createConnection(dbConfig); + const [rows] = await connection.execute("SELECT * FROM data"); + res.json(rows); + } catch (err) { + res.status(500).json({ error: "Database error" }); + } finally { + if (connection) await connection.end(); + } +}); + +// 커넥션 풀 사용 (권장) +const pool = mysql.createPool(dbConfig); + +router.get("/safe/data2", async (req, res) => { + const [rows] = await pool.execute("SELECT * FROM data"); + // 풀이 자동으로 커넥션 반환 관리 + res.json(rows); +}); +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 역직렬화하면 임의 코드가 실행될 수 있습니다. + +```javascript +// UNSAFE — node-serialize로 외부 데이터 역직렬화 +const serialize = require("node-serialize"); + +router.post("/vuln/data", (req, res) => { + const obj = serialize.unserialize(req.body.data); + // node-serialize는 함수 실행 가능 → 원격 코드 실행 (RCE) + res.json(obj); +}); + +// SAFE — JSON.parse()만 사용 (코드 실행 불가) +const Joi = require("joi"); + +const dataSchema = Joi.object({ + name: Joi.string().max(100).required(), + age: Joi.number().integer().min(0).max(150), +}); + +router.post("/safe/data", (req, res) => { + let parsed; + try { + parsed = JSON.parse(req.body.data); + } catch { + return res.status(400).json({ error: "Invalid JSON" }); + } + // 스키마 검증 + const { error, value } = dataSchema.validate(parsed); + if (error) { + return res.status(400).json({ error: error.message }); + } + res.json(value); +}); +``` + +> **WARNING** `node-serialize`, `serialize-javascript`(eval 포함)은 원격 코드 실행이 가능합니다. 외부 입력에 절대 사용하지 마세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +사용자별 데이터가 공유 변수에 저장되면 세션 간 데이터가 유출됩니다. + +```javascript +// UNSAFE — 모듈 수준 변수에 사용자 데이터 저장 +let currentUser = null; // 모든 요청이 공유 + +router.get("/vuln/dashboard", (req, res) => { + currentUser = req.session.user; // 동시 요청 시 덮어씌워짐 + // ... 비동기 작업 후 + res.send(`Hello ${currentUser.name}`); // 다른 사용자 데이터 반환 가능 +}); + +// SAFE — 요청 스코프 변수 사용 +router.get("/safe/dashboard", (req, res) => { + const currentUser = req.session.user; // 요청별 로컬 변수 + res.send(`Hello ${currentUser.name}`); +}); +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +```javascript +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password =", password); +console.log("DEBUG: SQL query =", query); +app.use(require("morgan")("dev")); // 상세 요청 로그 + +// SAFE — 환경 분기 + 구조화된 로거 +const logger = require("winston"); + +// 프로덕션에서는 디버그 로그 비활성화 +const logLevel = process.env.NODE_ENV === "production" ? "warn" : "debug"; +logger.configure({ level: logLevel }); + +// morgan은 프로덕션에서 최소화 +if (process.env.NODE_ENV !== "production") { + app.use(require("morgan")("dev")); +} else { + app.use(require("morgan")("combined", { + stream: { write: (msg) => logger.info(msg.trim()) }, + })); +} +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```javascript +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService { + #users = []; + + getUsers() { + return this.#users; // 외부에서 push/pop 가능 + } +} + +// SAFE — 복사본 반환 +class UserService { + #users = []; + + getUsers() { + return [...this.#users]; // 얕은 복사 + } + + getUsersDeep() { + return structuredClone(this.#users); // 깊은 복사 (Node 17+) + } +} +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```javascript +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = newSettings; // 외부에서 변경 시 내부도 변경 + } +} + +// SAFE — 복사본을 할당 +class Config { + #settings = {}; + + setSettings(newSettings) { + this.#settings = structuredClone(newSettings); + } + + // 또는 Object.freeze로 불변 처리 + setSettingsFrozen(newSettings) { + this.#settings = Object.freeze({ ...newSettings }); + } +} +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```javascript +// UNSAFE — 역방향 DNS로 접근 제어 +const dns = require("dns"); + +router.get("/vuln/internal", (req, res) => { + dns.reverse(req.ip, (err, hostnames) => { + if (hostnames && hostnames.includes("trusted.internal.com")) { + return res.send("Internal data"); + } + res.status(403).send("Forbidden"); + }); +}); + +// SAFE — IP 주소 직접 비교 +const TRUSTED_IPS = ["10.0.1.100", "10.0.1.101", "192.168.1.50"]; + +router.get("/safe/internal", (req, res) => { + const clientIP = req.ip; + if (!TRUSTED_IPS.includes(clientIP)) { + return res.status(403).send("Forbidden"); + } + res.send("Internal data"); +}); +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/함수를 사용하면 보안 위협에 노출됩니다. + +```javascript +// UNSAFE — deprecated 또는 취약 API 사용 +const escaped = escape(userInput); // deprecated +const decoded = unescape(escaped); // deprecated +const buf = new Buffer(data); // deprecated (보안 취약) +const hash = crypto.createHash("md5"); // 취약한 해시 +setTimeout("doSomething()", 1000); // 문자열 인자 → eval과 동일 + +// SAFE — 보안이 강화된 대체 API 사용 +const encoded = encodeURIComponent(userInput); +const decoded = decodeURIComponent(encoded); +const buf = Buffer.from(data); // Buffer.from() 사용 +const hash = crypto.createHash("sha256"); // SHA-256 이상 사용 +setTimeout(doSomething, 1000); // 함수 참조 전달 +``` + +> **TIP** `npm audit`를 정기적으로 실행하여 의존성 패키지의 알려진 취약점을 점검하세요. diff --git a/skills/kesekit-start/templates/secure-coding/python.md b/skills/kesekit-start/templates/secure-coding/python.md new file mode 100644 index 0000000..eb216a3 --- /dev/null +++ b/skills/kesekit-start/templates/secure-coding/python.md @@ -0,0 +1,1893 @@ +# Secure Coding Guide — Python + +KISA Python 시큐어코딩 가이드(ref-012, 176p, 46개 항목) 기반, Python 프레임워크별 구현 예시입니다. +모든 항목은 UNSAFE(취약) / SAFE(안전) 쌍으로 구성됩니다. + +--- + +## 1. Input Data Validation (입력데이터 검증 및 표현) + +### 1-1. SQL Injection (CWE-89) + +외부 입력값을 쿼리 문자열에 직접 삽입하면 공격자가 임의 SQL을 실행할 수 있습니다. + +**Django DB API** + +```python +# UNSAFE — 입력값을 쿼리에 직접 결합 +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = "UPDATE board SET name='" + name + "' WHERE content_id='" + content_id + "'" + curs.execute(sql_query) + connection.commit() + return render(request, '/success.html') +``` + +```python +# SAFE — 파라미터 바인딩 (인자화된 쿼리) +from django.shortcuts import render +from django.db import connection + +def update_board(request): + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + with connection.cursor() as curs: + sql_query = 'UPDATE board SET name=%s WHERE content_id=%s' + curs.execute(sql_query, (name, content_id)) + connection.commit() + return render(request, '/success.html') +``` + +**Django ORM raw()** + +```python +# UNSAFE — raw() 함수에 문자열 결합 쿼리 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = "SELECT * FROM member WHERE name='" + name + "'" + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list': data}) +``` + +```python +# SAFE — raw() 함수에 바인딩 변수 사용 +from app.models import Member + +def member_search(request): + name = request.POST.get('name', '') + query = 'SELECT * FROM member WHERE name=%s' + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list': data}) +``` + +> **TIP** Django querySets, SQLAlchemy ORM은 기본적으로 인자화된 쿼리를 사용합니다. raw query를 쓸 경우 반드시 바인딩 변수를 사용하세요. SQLite에서는 `?` 또는 `:name` Placeholder를 사용합니다. + +--- + +### 1-2. Code Injection (CWE-94, CWE-95) + +동적 코드 실행 함수(eval, exec)에 외부 입력값을 전달하면 임의 코드가 실행됩니다. + +**eval() 사용** + +```python +# UNSAFE — 외부 입력값을 eval()에 직접 전달 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + ret = eval(message) + return render(request, '/success.html', {'data': ret}) +``` + +```python +# SAFE — 입력값을 영문/숫자로 제한하여 검증 +from django.shortcuts import render + +def route(request): + message = request.POST.get('message', '') + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data': ret}) + return render(request, '/error.html') +``` + +**exec() 사용** + +```python +# UNSAFE — exec()에 외부 입력값을 직접 전달 +from django.shortcuts import render + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + exec('{}()'.format(function_name)) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 허용 함수 제한 +from django.shortcuts import render + +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] + +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + return render(request, '/error.html', {'error': '허용되지 않은 함수입니다.'}) +``` + +> **WARNING** eval(), exec() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 마세요. 정규식(re 모듈)이나 str.isalnum() 등으로 입력값을 검증하세요. + +--- + +### 1-3. Path Traversal / Resource Injection (CWE-22, CWE-99) + +파일 경로에 외부 입력값을 직접 사용하면 상위 디렉터리 접근이 가능합니다. + +**경로 조작** + +```python +# UNSAFE — 입력값을 경로에 직접 사용 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + with open(request_file) as f: + data = f.read() + return render(request, '/success.html', {'data': data}) +``` + +```python +# SAFE — 경로 조작 문자열 필터링 +import os +from django.shortcuts import render + +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error': '파일을 열 수 없습니다.'}) + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') + try: + with open(filename + file_ext) as f: + data = f.read() + except Exception: + return render(request, '/error.html', {'error': '파일이 존재하지 않거나 열 수 없습니다.'}) + return render(request, '/success.html', {'data': data}) +``` + +**자원 삽입 (소켓 포트)** + +```python +# UNSAFE — 외부 입력값을 포트 번호로 직접 사용 +import socket +from django.shortcuts import render + +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +```python +# SAFE — 포트 번호를 화이트리스트로 제한 +import socket +from django.shortcuts import render + +ALLOW_PORT = [4000, 6000, 9000] + +def get_info(request): + port = int(request.POST.get('port')) + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error': '소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + return render(request, '/success.html') +``` + +--- + +### 1-4. Cross-Site Scripting — XSS (CWE-79) + +외부 입력값이 HTML 응답에 그대로 포함되면 악성 스크립트가 실행됩니다. + +**Django — mark_safe 오용** + +```python +# UNSAFE — mark_safe로 XSS 보호 정책 무력화 +from django.shortcuts import render +from django.utils.safestring import mark_safe + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + object_link = mark_safe(object_link) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +```python +# SAFE — mark_safe 사용하지 않음 (Django 템플릿 자동 이스케이프 활용) +from django.shortcuts import render + +def profile_link(request): + profile_url = request.POST.get('profile_url') + profile_name = request.POST.get('profile_name') + object_link = '{}'.format(profile_url, profile_name) + return render(request, 'my_profile.html', {'object_link': object_link}) +``` + +**Flask — html.escape 적용** + +```python +# UNSAFE — 입력값을 검증/치환 없이 동적 웹페이지에 사용 +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + return render_template('search.html', search_keyword=search_keyword) +``` + +```python +# SAFE — html.escape로 HTML 엔티티 치환 +import html +from flask import Flask, request, render_template + +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +> **TIP** Django 템플릿에서 `{% autoescape off %}` 또는 `{{ content | safe }}` 사용을 피하세요. Jinja2 템플릿도 자동 이스케이프를 활성화하세요. + +--- + +### 1-5. OS Command Injection (CWE-78) + +시스템 명령어에 외부 입력값을 직접 전달하면 임의 명령 실행이 가능합니다. + +```python +# UNSAFE — os.system에 외부 입력값 직접 전달 +import os +from django.shortcuts import render + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + os.system(app_name_string) + return render(request, '/success.html') +``` + +```python +# SAFE — 화이트리스트로 실행 가능 프로그램 제한 +import os +from django.shortcuts import render + +ALLOW_PROGRAM = ['notepad', 'calc'] + +def execute_command(request): + app_name_string = request.POST.get('app_name', '') + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error': '허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +**subprocess 사용 시** + +```python +# UNSAFE — shell=True로 외부 입력값 포함 명령 실행 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + cmd_str = "cmd /c backuplog.bat " + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +```python +# SAFE — 특수문자 필터링 + shell=False(기본값) + 인자 배열 전달 +import subprocess +from django.shortcuts import render + +def execute_command(request): + date = request.POST.get('date', '') + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, "") + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +--- + +### 1-6. Unrestricted File Upload (CWE-434) + +파일 업로드 시 확장자/크기/내용을 검증하지 않으면 웹셸 등 악성 파일이 업로드됩니다. + +```python +# UNSAFE — 파일 검증 없이 저장 +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +def file_upload(request): + if request.FILES['upload_file']: + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename': filename}) + return render(request, '/error.html', {'error': '파일 업로드 실패'}) +``` + +```python +# SAFE — 파일 개수, 크기, 확장자, Content-Type 검증 +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage + +FILE_COUNT_LIMIT = 5 +FILE_SIZE_LIMIT = 5242880 # 5MB +WHITE_LIST_EXT = ['.jpg', '.jpeg'] + +def file_upload(request): + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + filename_list = [] + for upload_file in request.FILES.values(): + saved = fs.save(upload_file.name, upload_file) + filename_list.append(saved) + return render(request, '/success.html', {'filename_list': filename_list}) +``` + +--- + +### 1-7. Open Redirect (CWE-601) + +리다이렉트 URL을 외부 입력으로 받으면 피싱 사이트로 유도될 수 있습니다. + +```python +# UNSAFE — 입력 URL로 직접 리다이렉트 +from django.shortcuts import redirect + +def redirect_url(request): + url_string = request.POST.get('url', '') + return redirect(url_string) +``` + +```python +# SAFE — 화이트리스트로 허용 URL 제한 +from django.shortcuts import render, redirect + +ALLOW_URL_LIST = [ + '127.0.0.1', + 'https://login.myservice.com', + '/notice', +] + +def redirect_url(request): + url_string = request.POST.get('url', '') + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error': '허용되지 않는 주소입니다.'}) + return redirect(url_string) +``` + +--- + +### 1-8. XML External Entity — XXE (CWE-611) + +XML 파서가 외부 엔티티를 처리하면 서버 파일 읽기, SSRF가 가능합니다. + +```python +# UNSAFE — 외부 엔티티 처리 허용 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, True) # 취약 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +```python +# SAFE — 외부 엔티티 비활성화 +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT + +def get_xml(request): + parser = make_parser() + parser.setFeature(feature_external_ges, False) # 안전 + doc = parseString(request.body.decode('utf-8'), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == "foo": + doc.expandNode(node) + text = node.toxml() +``` + +> **TIP** lxml 라이브러리 사용 시 `XMLParser(resolve_entities=False)` 및 `no_network=True`로 설정하세요. + +--- + +### 1-9. XPath / XML Injection (CWE-643) + +XPath 쿼리에 외부 입력값을 직접 삽입하면 인증 우회 등이 가능합니다. + +```python +# UNSAFE — 외부 입력값을 XPath 쿼리에 직접 결합 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) +``` + +```python +# SAFE — lxml의 XPath 파라미터 바인딩 사용 +from lxml import etree + +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) +``` + +--- + +### 1-10. LDAP Injection (CWE-90) + +LDAP 필터에 외부 입력값을 직접 삽입하면 디렉터리 데이터 유출이 가능합니다. + +```python +# UNSAFE — 입력값을 필터링 없이 LDAP 검색에 사용 +from ldap3 import Connection, Server, ALL + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + search_str = '(&(objectclass=%s))' % search_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +```python +# SAFE — escape_filter_chars로 특수문자 이스케이프 +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars + +def ldap_query(request): + search_keyword = request.POST.get('search_keyword', '') + server = Server('ldap.example.com', get_info=ALL) + conn = Connection(server, user=dn, password=password, auto_bind=True) + escape_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escape_keyword + conn.search('dc=company,dc=com', search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid']) +``` + +--- + +### 1-11. Cross-Site Request Forgery — CSRF (CWE-352) + +상태 변경 요청에 CSRF 토큰이 없으면 사용자 의지와 무관한 요청이 실행됩니다. + +**Django — 미들웨어 설정** + +```python +# UNSAFE — CSRF 미들웨어 비활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', # 주석 처리 = 취약 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +```python +# SAFE — CSRF 미들웨어 활성화 +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', # 활성화 + 'django.contrib.auth.middleware.AuthenticationMiddleware', +] +``` + +**Django — 뷰에서 csrf_exempt 사용 금지** + +```python +# UNSAFE — csrf_exempt 데코레이터로 CSRF 보호 해제 +from django.views.decorators.csrf import csrf_exempt + +@csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +```python +# SAFE — csrf_exempt 제거, 템플릿에 {% csrf_token %} 사용 +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + ret = handle_pay(user_id, pay) + return render(request, '/view_wallet.html', {'wallet': ret}) +``` + +**Flask — CSRFProtect 사용** + +```python +# UNSAFE — CSRF 보호 미설정 +from flask import Flask +app = Flask(__name__) +``` + +```python +# SAFE — Flask-WTF CSRFProtect 적용 +import os +from flask import Flask +from flask_wtf.csrf import CSRFProtect + +app = Flask(__name__) +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') +csrf = CSRFProtect(app) +``` + +> **TIP** Django 템플릿에서는 `{% csrf_token %}`, Flask 템플릿에서는 `{{ csrf_token() }}`을 form 태그 안에 반드시 명시하세요. + +--- + +### 1-12. Server-Side Request Forgery — SSRF (CWE-918) + +서버가 외부 입력 URL로 요청을 보내면 내부 네트워크 접근이 가능합니다. + +```python +# UNSAFE — 사용자 입력 URL로 직접 HTTP 요청 +from django.shortcuts import render +import requests + +def call_third_party_api(request): + addr = request.POST.get('address', '') + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +```python +# SAFE — 화이트리스트 IP 기반 검증 +from django.shortcuts import render +import requests + +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] + +def call_third_party_api(request): + addr = request.POST.get('address', '') + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {'error': '허용되지 않은 서버입니다.'}) + result = requests.get(addr).text + return render(request, '/result.html', {'result': result}) +``` + +--- + +### 1-13. Untrusted Input for Security Decision (CWE-807) + +보안 결정에 클라이언트 조작 가능한 값(쿠키, 히든필드 등)을 사용하면 권한 우회가 가능합니다. + +```python +# UNSAFE — 쿠키에서 권한 정보를 가져와 관리자 판단 +from django.shortcuts import render + +def init_password(request): + role = request.COOKIES['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +```python +# SAFE — 서버 세션에서 권한 확인 +from django.shortcuts import render + +def init_password(request): + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email', '') + if role == 'admin': + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + return render(request, '/failed.html') +``` + +--- + +### 1-14. HTTP Response Splitting (CWE-113) — Python 고유 + +HTTP 응답 헤더에 개행 문자가 포함되면 응답이 분리되어 캐시 오염 등이 가능합니다. + +```python +# UNSAFE — 입력값을 HTTP 응답 헤더에 직접 삽입 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +```python +# SAFE — 헤더 값에서 개행 문자 제거 +from django.http import HttpResponse + +def route(request): + content_type = request.POST.get('content-type') + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +--- + +### 1-15. Integer Overflow (CWE-190) — Python 고유 + +Python 3.x는 기본 int에서 오버플로우가 발생하지 않지만, numpy 등 C 기반 패키지 사용 시 발생합니다. + +```python +# UNSAFE — numpy int64 범위 검증 없이 사용 +import numpy as np + +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + return res +``` + +```python +# SAFE — Python 기본 자료형으로 계산 후 범위 검증 +import numpy as np + +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min + +def handle_data(number, pow): + calculated = number ** pow + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + return -1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +--- + +### 1-16. Format String Injection (CWE-134) — Python 고유 + +포맷 스트링에 외부 입력값을 직접 사용하면 전역 변수 등 내부 정보가 유출됩니다. + +```python +# UNSAFE — 외부 입력값을 포맷 문자열로 직접 사용 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + format_string = request.POST.get('msg_format', '') + # 공격: format_string = "{user.__init__.__globals__[AUTHENTICATE_KEY]}" + message = format_string.format(user=user_info) + return render(request, '/user_page.html', {'message': message}) +``` + +```python +# SAFE — 포맷 지정자를 개발자가 직접 정의 +from django.shortcuts import render + +AUTHENTICATE_KEY = 'Passw0rd' + +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + message = 'user name is {}'.format(user_info.name) + return render(request, '/user_page.html', {'message': message}) +``` + +--- + +## 2. Security Features (보안기능) + +### 2-1. Missing Authentication (CWE-306) + +중요 기능에 인증 검사가 없으면 비인가자가 접근할 수 있습니다. + +```python +# UNSAFE — 현재 패스워드 확인 없이 변경 허용 +from django.shortcuts import render +import hashlib + +def change_password(request): + new_pwd = request.POST.get('new_password', '') + user = request.session['userid'] + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +```python +# SAFE — 현재 패스워드 재인증 후 변경 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +import hashlib + +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password', '') + crnt_pwd = request.POST.get('current_password', '') + user = request.session['userid'] + crnt_h = hashlib.sha256(crnt_pwd.encode()) + old_pwd = get_password_from_db(user) + if old_pwd == crnt_h.hexdigest(): + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + return render(request, '/failed.html', {'error': '패스워드가 일치하지 않습니다'}) +``` + +--- + +### 2-2. Improper Authorization (CWE-285) + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있습니다. + +```python +# UNSAFE — 권한 확인 없이 삭제 수행 +from django.shortcuts import render +from .model import Content + +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html') +``` + +```python +# SAFE — @login_required + @permission_required로 권한 검증 +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content + +@login_required +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + return render(request, '/error.html', {'error': '삭제 실패'}) +``` + +--- + +### 2-3. Incorrect Permission Assignment (CWE-732) + +파일/자원에 과도한 권한을 부여하면 비인가 접근이 가능합니다. + +```python +# UNSAFE — 모든 사용자에게 읽기/쓰기/실행 권한 +import os + +def write_file(): + os.chmod('/root/system_config', 0o777) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +```python +# SAFE — 소유자만 읽기/쓰기/실행, 그룹/기타 접근 차단 +import os + +def write_file(): + os.chmod('/root/system_config', 0o700) + with open('/root/system_config', 'w') as f: + f.write("your config is broken") +``` + +--- + +### 2-4. Broken Crypto Algorithm (CWE-327) + +취약한 암호화 알고리즘(DES, MD5, SHA1)을 사용하면 암호화된 데이터가 해독됩니다. + +**암호화** + +```python +# UNSAFE — 취약한 DES 알고리즘 사용 +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key): + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_des.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — AES-CBC 알고리즘 사용 +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def get_enc_text(plain_text, key, iv): + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +**해시함수** + +```python +# UNSAFE — 취약한 MD5 해시함수 +import hashlib + +def make_md5(plain_text): + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +```python +# SAFE — SHA-256 해시함수 +import hashlib + +def make_sha256(plain_text): + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +--- + +### 2-5. Cleartext Storage / Transmission (CWE-312, CWE-319) + +중요 정보를 평문으로 저장/전송하면 유출 위험이 있습니다. + +**평문 저장** + +```python +# UNSAFE — 패스워드를 평문으로 DB에 저장 +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', password, user_id) + dbconn.commit() +``` + +```python +# SAFE — SHA-256 + 솔트로 해싱 후 저장 +from Crypto.Hash import SHA256 + +def update_pass(dbconn, password, user_id, salt): + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute('UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', (hash_pwd, user_id)) + dbconn.commit() +``` + +**평문 전송** + +```python +# UNSAFE — 패스워드를 암호화 없이 소켓으로 전송 +import socket + +def send_password(password): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(password.encode('utf-8')) +``` + +```python +# SAFE — AES 암호화 후 전송 +import socket +import os +from Crypto.Cipher import AES + +def send_password(password): + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + enc_password = aes.encrypt(password) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect(('127.0.0.1', 65434)) + s.sendall(enc_password.encode('utf-8')) +``` + +--- + +### 2-6. Hard-coded Credentials (CWE-259, CWE-321) + +소스코드에 비밀번호/키를 직접 기재하면 유출 시 즉시 악용됩니다. + +```python +# UNSAFE — 소스코드에 DB 접속 정보 하드코딩 +import pymysql + +def query_execute(query): + dbconn = pymysql.connect( + host='127.0.0.1', port='1234', + user='root', passwd='1234', + db='mydb', charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +```python +# SAFE — 설정 파일에서 암호화된 접속 정보 로드 +import pymysql +import json + +def query_execute(query, config_path): + with open(config_path, 'r') as config: + dbconf = json.load(fp=config) + blockKey = get_decrypt_key(dbconf['blockKey']) + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'], port=dbconf['port'], + user=dbUser, passwd=dbPasswd, + db=dbconf['db_name'], charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +> **WARNING** .env 파일은 반드시 .gitignore에 추가하세요. + +--- + +### 2-7. Inadequate Key Size (CWE-326) + +짧은 키를 사용하면 무차별 대입으로 해독이 가능합니다. + +```python +# UNSAFE — RSA 1024비트, ECC 192비트 사용 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(1024) # 취약 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp192r1') # 취약 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +```python +# SAFE — RSA 2048비트 이상, ECC 224비트 이상 +from Crypto.PublicKey import RSA +from tinyec import registry +import secrets + +def make_rsa_key_pair(): + private_key = RSA.generate(2048) # 안전 + public_key = private_key.publickey() + +def make_ecc(): + ecc_curve = registry.get_curve('secp224r1') # 안전 + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +--- + +### 2-8. Insufficient Randomness (CWE-330) + +보안 목적에 random 모듈을 사용하면 예측 가능합니다. + +```python +# UNSAFE — random 모듈로 OTP/세션키 생성 +import random + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +```python +# SAFE — secrets 모듈로 암호학적 보안 난수 생성 +import secrets + +def get_otp_number(): + random_str = '' + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +**세션 토큰 생성** + +```python +# UNSAFE — random.choice로 세션키 생성 +import random +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +```python +# SAFE — secrets.choice로 세션키 생성 +import secrets +import string + +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + return "".join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +--- + +### 2-9. Weak Password Requirements (CWE-521) + +약한 패스워드 정책은 무차별 대입 공격에 취약합니다. + +```python +# UNSAFE — 패스워드 복잡도 검증 없이 회원가입 +from flask import request +from Models import User, db + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +```python +# SAFE — 패스워드 복잡도 검증 (3종 이상 문자 8자리 또는 10자리 이상) +import re +from flask import request +from Models import User, db + +def check_password(password): + patterns = [ + re.compile(r'^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$'), + re.compile(r'^[A-Za-z\d!@#$%^&*]{10,}$'), + ] + return any(p.match(password) for p in patterns) + +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다", 400) + usertable = User() + usertable.userid = userid + usertable.password = password + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +> **TIP** Django에서는 `AUTH_PASSWORD_VALIDATORS` 설정으로 패스워드 정책을 적용할 수 있습니다. + +--- + +### 2-10. Improper Signature Verification (CWE-347) + +전자서명을 검증하지 않으면 위변조된 데이터를 신뢰하게 됩니다. + +```python +# UNSAFE — 전자서명 검증 없이 데이터 실행 +from Crypto.Cipher import PKCS1_v1_5 + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + eval(origin_python_code) # 서명 검증 없이 실행 +``` + +```python +# SAFE — RSA 전자서명 검증 후 실행 +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 + +def verify_digit_signature(origin_data, origin_signature, client_pub_key): + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) + +def verify_data(request): + encrypted_code = request.POST.get("encrypted_msg", "") + encrypted_sig = request.POST.get("encrypted_sig", "") + with open("/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open("/keys/public_key.out", "rb") as f: + public_key = f.read() + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(secret_key, encrypted_sig) + if verify_digit_signature(origin_python_code, origin_signature, public_key): + eval(origin_python_code) +``` + +--- + +### 2-11. Improper Certificate Validation (CWE-295) + +SSL/TLS 인증서 검증을 비활성화하면 중간자 공격에 노출됩니다. + +```python +# UNSAFE — 인증서 검증 비활성화 (CERT_NONE) +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext() + context.verify_mode = ssl.CERT_NONE # 취약 + with context.wrap_socket(sock) as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +```python +# SAFE — PROTOCOL_TLS_CLIENT로 인증서 검증 활성화 +import ssl +import socket + +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.load_verify_locations('/path/to/CA.pem') + with context.wrap_socket(sock, server_hostname='test-server') as ssock: + ssock.connect(('127.0.0.1', 7917)) +``` + +> **WARNING** requests 라이브러리 사용 시 `verify=False`를 절대 프로덕션에서 사용하지 마세요. + +--- + +### 2-12. Sensitive Info in Persistent Cookie (CWE-539) + +민감 정보를 쿠키에 평문 저장하면 탈취 위험이 있습니다. + +```python +# UNSAFE — 쿠키 만료시간 1년, 보안 옵션 미설정 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +```python +# SAFE — 적절한 만료시간 + secure + httponly 옵션 활성화 +from django.http import HttpResponse + +def remind_user_state(request): + res = HttpResponse() + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +--- + +### 2-13. Sensitive Info in Comments (CWE-615) + +주석에 비밀번호/키를 남기면 소스코드 노출 시 즉시 악용됩니다. + +```python +# UNSAFE — 주석에 인증 정보 기재 +def user_login(id, passwd): + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +```python +# SAFE — 주석에 민감 정보 절대 기재 금지 +def user_login(id, passwd): + # 인증 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) + result = login(id, passwd) + return result +``` + +--- + +### 2-14. Unsalted One-Way Hash (CWE-759) + +솔트 없이 해싱하면 레인보우 테이블 공격에 취약합니다. + +```python +# UNSAFE — 솔트 없이 해싱 +import hashlib + +def get_hash_from_pwd(pw): + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +```python +# SAFE — secrets로 솔트 생성 후 해싱 +import hashlib +import secrets + +def get_hash_from_pwd(pw): + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +--- + +### 2-15. Download Without Integrity Check (CWE-494) + +코드/라이브러리 다운로드 시 무결성을 검증하지 않으면 변조된 파일이 실행됩니다. + +```python +# UNSAFE — 해시 검증 없이 다운로드 +import requests + +def execute_remote_code(): + url = "https://www.somewhere.com/storage/code.py" + file = requests.get(url) + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +```python +# SAFE — 해시 검증 후 저장 +import requests +import hashlib +import configparser + +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read('sample_config.cfg') + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + if sha.hexdigest() != remote_code_hash: + raise Exception('파일이 손상되었습니다.') + with open('save.py', 'wb') as f: + f.write(file.content) +``` + +--- + +### 2-16. Missing Brute Force Protection (CWE-307) + +인증 시도 횟수 제한이 없으면 무차별 대입 공격이 가능합니다. + +```python +# UNSAFE — 시도 횟수 무제한 +import hashlib +from django.shortcuts import render + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state': 'login_success'}) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +```python +# SAFE — 로그인 실패 횟수 제한 + 계정 잠금 +import hashlib +from django.shortcuts import render +from .models import LoginFail + +LOGIN_TRY_LIMIT = 5 + +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode('utf-8')) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state': 'login_success'}) + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + count = login_fail.count + else: + count = 0 + if count >= LOGIN_TRY_LIMIT: + return render(request, '/account_lock.html', {'state': 'account_lock'}) + LoginFail.objects.update_or_create( + user_id=user_id, defaults={"count": count + 1} + ) + return render(request, '/login.html', {'state': 'login_failed'}) +``` + +--- + +## 3. Time and State (시간 및 상태) + +### 3-1. TOCTOU Race Condition (CWE-367) — Python 고유 + +검사 시점과 사용 시점 사이에 상태가 변경되면 보안 검사가 무효화됩니다. + +```python +# UNSAFE — 파일 검사와 사용 사이에 갭 존재 (멀티스레드 환경) +import os +import io +import threading + +def write_shared_file(filename, content): + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +```python +# SAFE — threading.Lock으로 공유 자원 동기화 +import os +import io +import threading + +lock = threading.Lock() + +def write_shared_file(filename, content): + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() + +def start(): + filename = './temp.txt' + content = "start time is now" + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +--- + +### 3-2. Infinite Loop / Uncontrolled Recursion (CWE-835, CWE-674) + +종료 조건이 없는 반복문/재귀는 서비스 거부를 유발합니다. + +```python +# UNSAFE — 재귀 탈출 조건 없음 +def factorial(num): + return num * factorial(num - 1) +``` + +```python +# SAFE — 탈출 조건 명시 +def factorial(num): + if num == 0: + return 1 + return num * factorial(num - 1) +``` + +```python +# SAFE — 재귀 깊이 제한 설정 (과도하게 크게 설정하지 않음) +import sys +sys.setrecursionlimit(1000) +``` + +--- + +## 4. Error Handling (에러처리) + +### 4-1. Error Message Information Exposure (CWE-209) + +상세 에러 메시지가 사용자에게 노출되면 시스템 정보가 유출됩니다. + +**Django 에러 페이지** + +```python +# UNSAFE — 별도 에러 페이지 미설정 (Django 기본 에러 페이지 출력) +# config/urls.py +# (에러 핸들러 미정의) +``` + +```python +# SAFE — 사용자 정의 에러 페이지 설정 +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 + +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500" +``` + +**traceback 노출** + +```python +# UNSAFE — traceback.print_exc()로 스택 정보 노출 +import traceback + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + traceback.print_exc() # 스택 정보 노출 +``` + +```python +# SAFE — 에러 코드와 최소 정보만 로깅 +import logging + +logger = logging.getLogger(__name__) + +def fetch_url(url, useragent): + try: + response = requests.get(url, stream=True, timeout=5, + headers={'User-Agent': useragent}) + except IOError: + logger.error('ERROR-01:통신에러') +``` + +--- + +### 4-2. Error Condition Without Action (CWE-390) + +예외를 포착하고도 아무 처리를 하지 않으면 오류가 무시됩니다. + +```python +# UNSAFE — 예외를 무시 (pass) +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + static_key = {'key': b'0000000000000000', 'iv': b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + pass # 기본 약한 키로 암호화 수행됨 + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +```python +# SAFE — 예외 시 안전한 랜덤 키 생성 +import secrets +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +def encryption(key_id, plain_text): + try: + static_key = static_keys[key_id] + except IndexError: + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'], AES.MODE_CBC, static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +--- + +### 4-3. Improper Exception Handling (CWE-754) + +지나치게 넓은 예외 처리는 예기치 않은 오류를 숨깁니다. + +```python +# UNSAFE — bare except로 모든 예외를 한꺼번에 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except: + print("Unexpected error") +``` + +```python +# SAFE — 예외를 구체적으로 분리 처리 +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +--- + +## 5. Code Quality (코드오류) + +### 5-1. NULL Pointer Dereference (CWE-476) + +Python에서는 None 값 참조 오류로 나타납니다. None 체크 없이 사용하면 비정상 종료됩니다. + +```python +# UNSAFE — None 체크 없이 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename.count('.') > 0: # filename이 None이면 크래시 + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +```python +# SAFE — None 체크 후 사용 +import os +from django.shortcuts import render + +def parse_xml(request): + filename = request.POST.get('filename') + if filename is None or filename.strip() == "": + return render(request, '/error.html', {'error': '파일 이름이 없습니다.'}) + if filename.count('.') > 0: + name, ext = os.path.splitext(filename) + else: + ext = '' +``` + +--- + +### 5-2. Improper Resource Shutdown (CWE-404) + +사용 후 리소스를 해제하지 않으면 리소스 고갈이 발생합니다. + +```python +# UNSAFE — 예외 발생 시 close() 미실행 +def get_config(): + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + f.close() # 예외 시 도달하지 않음 + return lines + except Exception: + return '' +``` + +```python +# SAFE (방법 1) — finally 블록에서 자원 해제 +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + raise Exception("Throwing the exception!") + except Exception: + pass + finally: + f.close() + return lines +``` + +```python +# SAFE (방법 2) — with 문으로 자동 자원 해제 +with open('config.cfg') as f: + print(f.read()) +``` + +--- + +### 5-3. Deserialization of Untrusted Data (CWE-502) + +신뢰할 수 없는 데이터를 pickle로 역직렬화하면 임의 코드가 실행됩니다. + +```python +# UNSAFE — 외부 데이터를 pickle로 직접 역직렬화 +import pickle +from django.shortcuts import render + +def load_user_object(request): + pickled_userinfo = pickle.dumps(request.POST.get('userinfo', '')) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj': user_obj}) +``` + +```python +# SAFE — HMAC으로 데이터 무결성 검증 후 역직렬화 +import hmac +import hashlib +import pickle +from django.shortcuts import render + +def load_user_object(request): + hashed_pickle = request.POST.get("hashed_pickle", "") + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + m.update(pickled_userinfo) + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."}) +``` + +> **WARNING** pickle은 원격 코드 실행이 가능합니다. 가능하면 JSON 등 안전한 포맷을 사용하세요. + +--- + +## 6. Encapsulation (캡슐화) + +### 6-1. Data Leak Between Sessions (CWE-488, CWE-543) + +멀티스레드 환경에서 클래스 변수에 사용자 데이터를 저장하면 세션 간 데이터가 유출됩니다. + +```python +# UNSAFE — 클래스 변수에 사용자 데이터 저장 +from django.shortcuts import render + +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_description(UserDescription.user_name) + return result + + def show_user_profile(self, request): + UserDescription.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +```python +# SAFE — 인스턴스 변수로 사용해 스레드 간 공유 방지 +from django.shortcuts import render + +class UserDescription: + def get_user_profile(self): + result = self.get_user_description(self.user_name) + return result + + def show_user_profile(self, request): + self.user_name = request.POST.get('name', '') + self.user_profile = self.get_user_profile() + return render(request, 'profile.html', {'profile': self.user_profile}) +``` + +--- + +### 6-2. Active Debug Code (CWE-489) + +디버그 코드가 프로덕션에 남으면 시스템 내부 정보가 노출됩니다. + +**Django** + +```python +# UNSAFE — settings.py에 DEBUG = True +DEBUG = True +``` + +```python +# SAFE — 배포 시 DEBUG = False +DEBUG = False +``` + +**Flask** + +```python +# UNSAFE — debug 모드 활성화 +from flask import Flask +app = Flask(__name__) +app.debug = True + +if __name__ == '__main__': + app.run(debug=True) +``` + +```python +# SAFE — debug 모드 비활성화 +from flask import Flask +app = Flask(__name__) +app.debug = False + +if __name__ == '__main__': + app.run(debug=False) +``` + +--- + +### 6-3. Private Data Returned from Public Method (CWE-495) + +내부 배열/객체의 참조를 직접 반환하면 외부에서 수정이 가능합니다. + +```python +# UNSAFE — private 배열의 참조를 직접 반환 +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable # 외부에서 수정 가능 +``` + +```python +# SAFE — 복사본 반환 ([:]로 새 객체 생성) +class UserObj: + __private_variable = [] + + def get_private_member(self): + return self.__private_variable[:] # 복사본 반환 +``` + +--- + +### 6-4. Public Data Assigned to Private Field (CWE-496) + +외부 배열/객체를 내부 필드에 직접 할당하면 외부 변경이 내부에 반영됩니다. + +```python +# UNSAFE — 외부 참조를 private 배열에 직접 할당 +class UserObj: + __private_variable = [] + + def set_private_member(self, input_list): + self.__private_variable = input_list # 외부 참조 공유 +``` + +```python +# SAFE — 복사본을 할당 ([:]로 새 객체 생성) +class UserObj: + def __init__(self): + self.__privateVariable = [] + + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] # 복사본 할당 +``` + +--- + +## 7. API Misuse (API 오용) + +### 7-1. Reliance on DNS Lookup (CWE-350) + +DNS 기반 보안 결정은 DNS 스푸핑으로 우회될 수 있습니다. + +```python +# UNSAFE — 도메인명으로 신뢰 여부 판단 +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + if trusted_host == host_domain_name: + trusted = True + return trusted +``` + +```python +# SAFE — IP 주소로 직접 비교 +import socket + +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7" + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +--- + +### 7-2. Use of Vulnerable API + +취약한 API/패키지를 사용하면 보안 위협에 노출됩니다. + +```python +# UNSAFE — 취약한 버전의 패키지 사용, SBOM 미관리 +# requirements.txt +# urllib3==1.24.1 (CVE가 알려진 취약 버전) +``` + +```python +# SAFE — 취약점이 패치된 최신 버전 사용 + SBOM 관리 +# requirements.txt +# urllib3>=1.26.5 (취약점 패치된 버전) +# +# SBOM을 적용하여 의존 패키지의 보안 이슈를 지속 모니터링합니다. +# - NIST NVD (https://nvd.nist.gov/vuln/search) +# - CVEdetails (https://www.cvedetails.com) +# - pip-audit, safety 등 도구로 정기 검사 +``` + +> **TIP** 사용 중인 패키지의 보안 권고(advisory)를 정기적으로 확인하세요. `pip-audit` 또는 `safety check` 명령으로 취약점을 스캔할 수 있습니다. diff --git a/skills/kesekit-start/templates/space-security/access-control.md b/skills/kesekit-start/templates/space-security/access-control.md new file mode 100644 index 0000000..7232d6a --- /dev/null +++ b/skills/kesekit-start/templates/space-security/access-control.md @@ -0,0 +1,49 @@ +# Access Control & Authentication Checklist + +> Domains: AC (Access Control, 12 items) + IA (Identification & Authentication, 2 items) + +## AC — Access Control (12 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| AC-01 | Access Control Policy | Restrict access to authorized users/processes/devices only | Access control policy established, authorized entities identified, per-system access rules defined | +| AC-02 | Least Privilege | Grant minimum necessary permissions | Least privilege procedures, management approval, periodic review | +| AC-03 | Privileged Access Use | Restrict and audit privileged account usage | Privileged account types defined/limited, audit logs stored/reviewed | +| AC-04 | Information Flow Control | Control information flow within and between systems | Flow control policy, source/destination identification, change approval | +| AC-05 | Separation of Duties | Prevent authority abuse through role separation | Duty separation policy, critical duties separated, compensating controls | +| AC-06 | Failed Login Attempts | Protect accounts from brute-force attacks | Max attempt limits, auto-lockout policy, alert/notification on failures | +| AC-07 | Session Lock & Termination | Prevent unauthorized access during idle sessions | Auto-lock on inactivity, re-authentication required, session termination conditions | +| AC-08 | Remote Access Control | Prevent unauthorized remote access | Remote access policy, device security check/MFA/encryption, monitoring/logging | +| AC-09 | Wireless Access | Prevent unauthorized wireless connections | Wireless policy, authentication/encryption, unauthorized AP prevention | +| AC-10 | Mobile Device Control | Control mobile device connections | Mobile device policy, data encryption, loss/theft protection | +| AC-11 | External Connection Control | Protect system boundaries from external systems | External systems identified, approved methods only, continuous monitoring | +| AC-12 | Public Information Control | Prevent sensitive information disclosure | Pre-publication review/approval, designated reviewers, periodic content review | + +### AC Protection Measures Summary + +| Category | Measures | +|----------|----------| +| Account Management | 1-person-1-account, default account deletion, immediate revocation on termination, annual full review | +| Authentication | MFA for privileged access, SSH/SFTP/VPN only, 8+ char passwords with 2+ character types | +| Network | ACL-based deny-all, IP/port whitelisting, WPA3/WPA2-Enterprise, WIPS deployment | +| Session | 10-min inactivity lock, screensaver with password, session timeout enforcement | +| Remote Access | 3-step procedure (request/approve/monitor), VPN+MFA, high-risk assets remote-access-denied by default | +| Monitoring | Failed login alerts to SOC, audit log analysis, access log review | + +## IA — Identification & Authentication (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IA-01 | Identification & Authentication | Prevent unauthorized access and credential theft | Unique identifiers for users/processes/devices, password complexity (upper+lower+special+number, 8+ chars), cryptographic protection, reuse prevention | +| IA-02 | Multi-Factor Authentication | Strengthen privileged account authentication, prevent replay attacks | MFA for privileged network access, replay attack prevention (challenge-response/timestamp) | + +### IA Protection Measures + +| Measure | Detail | +|---------|--------| +| Password Policy | Min 8 chars, 3+ character types, 90-day rotation, history check (last 5) | +| MFA Methods | OTP, certificate, biometric — at least 2 factors required | +| Replay Prevention | Challenge-response protocol, timestamp-based token validation | +| Credential Storage | Hashed (SHA-256+), no plaintext storage, encrypted transmission | + +## Total: 14 Items (AC: 12 + IA: 2) diff --git a/skills/kesekit-start/templates/space-security/governance.md b/skills/kesekit-start/templates/space-security/governance.md new file mode 100644 index 0000000..3ff7049 --- /dev/null +++ b/skills/kesekit-start/templates/space-security/governance.md @@ -0,0 +1,90 @@ +# Governance, Personnel, Physical & Risk Checklist + +> Domains: PS (2) + PE (3) + RA (2) + SG (4) + CP (2) = 13 items + +## PS — Personnel Security (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PS-01 | Personnel Security | Control insider threats, prevent unauthorized personnel access | Background check on hiring, access review/revocation on role change/termination, disciplinary procedures | +| PS-02 | Security Awareness Training | Prevent security incidents, strengthen role-based security competency | Awareness activities, professional training plans, annual execution including contractors | + +### PS Protection Measures + +| Measure | Detail | +|---------|--------| +| Background Check | Resume/education/identity verification before hiring | +| Termination | Immediate access revocation, asset return, NDA enforcement | +| Training | Annual minimum, phishing simulation, role-specific curriculum, contractor inclusion | + +## PE — Physical & Environmental Security (3 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| PE-01 | Physical Access Control | Block unauthorized physical access, ensure asset integrity | Entry control/monitoring, visitor escort, access log retention, control device management | +| PE-02 | Alternate Work Site Security | Maintain confidentiality in alternate work environments | Security control standards, work device security, secure remote access | +| PE-03 | Protective Equipment Operation | Ensure physical safety against environmental threats | Equipment inspection, environmental controls (temperature/humidity/fire/water/power) | + +### PE Protection Measures + +| Category | Measures | +|----------|----------| +| Access Zones | Controlled/restricted/reception areas designated, card reader/biometric, CCTV | +| Visitor Policy | Escort required, visitor log, temporary badge | +| Alternate Sites | Home/travel/remote office classification, organization-issued device, VPN+MFA | +| Environmental | UPS/emergency generator/dual power, 10-32C server room, fire detection/suppression, periodic inspection | + +## RA — Risk Assessment & Security Evaluation (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| RA-01 | Risk Assessment | Identify, assess, and manage organizational risks | Risk management framework, periodic assessment (annual+) | +| RA-02 | Security Control Monitoring & Effectiveness | Ensure continuous security control effectiveness | Effectiveness evaluation framework, periodic review/update | + +### RA Protection Measures + +| Measure | Detail | +|---------|--------| +| Assessment Method | Baseline/detailed/combined approach, management/technical/physical/legal domains | +| Frequency | Annual minimum, ad-hoc on major changes | +| Metrics | KPI/security performance indicators: violation rate, infection rate, scanning completion rate | +| Responsibility | Designated monitoring officer, management reporting | + +## SG — Security Governance (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SG-01 | Security Policy Establishment | Ensure policy effectiveness and currency | Top-level policy creation/approval/dissemination, periodic review/update, improvement plans | +| SG-02 | Security Roles & Responsibilities | Clarify security accountability | CISO designation, role/responsibility assignment/review | +| SG-03 | Asset Management | Maintain asset integrity and security posture | Asset identification/inventory/updates, classification/owner assignment | +| SG-04 | Legal Requirements Compliance | Ensure regulatory compliance | Legal requirements identification/integration, independent compliance review | + +### SG Key Regulations + +| Regulation | Relevance | +|-----------|-----------| +| Personal Information Protection Act | Data collected by satellite services | +| ICT Infrastructure Protection Act | CII designation for space systems | +| Radio Waves Act | Satellite frequency management | +| Space Development Promotion Act | Space industry regulations | +| Cloud Computing Act | GSaaS cloud infrastructure | +| NIS2 (EU) | Space as essential service sector | +| CMMC (US) | Defense supply chain requirements | + +## CP — Contingency Planning (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| CP-01 | Contingency Plan | Ensure space system operational continuity | Disaster type identification, impact analysis, critical service identification, recovery procedures | +| CP-02 | Backup & Redundancy Management | Ensure critical information/system availability | Periodic backup, safe storage, regular testing, system redundancy | + +### CP Protection Measures + +| Measure | Detail | +|---------|--------| +| RTO/RPO | Define for each critical service (satellite control, MOC, PCC) | +| Backup Plan | Target/frequency/retention/method defined, backup confidentiality/integrity/availability verified | +| Redundancy | Network/system dual paths, failover testing | +| BCP | Business continuity management system, emergency contact chain, recovery organization | + +## Total: 13 Items (PS: 2 + PE: 3 + RA: 2 + SG: 4 + CP: 2) diff --git a/skills/kesekit-start/templates/space-security/operations.md b/skills/kesekit-start/templates/space-security/operations.md new file mode 100644 index 0000000..d1a2d0d --- /dev/null +++ b/skills/kesekit-start/templates/space-security/operations.md @@ -0,0 +1,47 @@ +# Operations & Incident Response Checklist + +> Domains: SO (System/Service Operations Management, 9 items) + IR (Incident Response, 2 items) + +## SO — System/Service Operations Management (9 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SO-01 | Maintenance Control | Control maintenance personnel, tools, and remote access | Work request/approval/logging, NDA, media sanitization, VPN+MFA for remote maintenance | +| SO-02 | System Audit & Log Analysis | Detect unauthorized/abnormal activities, ensure accountability | Audit log generation/retention, tamper protection, restricted admin access, integrated analysis/reporting | +| SO-03 | Time Synchronization | Ensure audit log accuracy and reliability | NTP standard time sync, internal NTP server, periodic verification | +| SO-04 | Portable Storage Security | Protect storage media confidentiality/integrity | Classification marking, encrypted transfer, unauthorized media control, secure disposal | +| SO-05 | Configuration Management | Establish configuration baselines, maintain integrity | HW/SW/FW baseline identification, security configuration documentation, periodic monitoring | +| SO-06 | Security Requirements Definition | Define security requirements from planning phase | Authentication/access control/encryption/logging requirements in RFP, secure coding standards | +| SO-07 | Change Management | Ensure integrity during system/application changes | Change review/approval/recording, pre-change security impact analysis, access restrictions | +| SO-08 | Development Testing & Evaluation | Verify security requirement implementation | Acceptance testing, source code verification, vulnerability scanning in production-equivalent environment | +| SO-09 | Function Minimization & SW Control | Remove unnecessary features, control unauthorized software | Essential functions only, blacklist/whitelist policies, disable DHCP/Print Spooler etc., block P2P/webhard | + +### SO Protection Measures Summary + +| Category | Key Actions | +|----------|-------------| +| Maintenance | Approved personnel only, clean PC with AV scan, media control, session recording | +| Logging | All systems generate audit logs, tamper-proof storage, min 1-year retention, weekly review | +| Media Control | USB port lock, media control solution, encrypted transport, overwrite-based disposal | +| Configuration | Baseline registry/account/network settings, monthly drift detection, rollback capability | +| Secure Development | Security requirements in RFP, secure coding per language (Java/PHP/ASP/C), code review | +| Change Control | Formal approval process, security impact analysis, revision history, pre/post testing | + +## IR — Incident Response (2 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| IR-01 | Incident Handling & Testing | Minimize damage and enable rapid recovery | Incident classification, detection/response/recovery procedures, post-incident review, periodic drills | +| IR-02 | Incident Reporting | Enable consistent response through timely reporting | Internal reporting chain, regulatory notification, stakeholder communication | + +### IR Protection Measures + +| Measure | Detail | +|---------|--------| +| Incident Types | Malware, unauthorized access, service disruption, data breach, physical compromise | +| Response Phases | Preparation > Detection > Investigation > Analysis > Containment > Eradication > Recovery | +| Reporting Timeline | Internal: immediate; KISA: within 24 hours (per ICT Infrastructure Act Art.48-3); NIS2: 24h/72h/1month staged | +| Emergency Contacts | Quarterly review, 24/7 contact chain, regulatory liaison designated | +| Testing | Annual tabletop exercise, biannual red team drill, post-exercise lessons learned | + +## Total: 11 Items (SO: 9 + IR: 2) diff --git a/skills/kesekit-start/templates/space-security/supply-chain.md b/skills/kesekit-start/templates/space-security/supply-chain.md new file mode 100644 index 0000000..750fe6f --- /dev/null +++ b/skills/kesekit-start/templates/space-security/supply-chain.md @@ -0,0 +1,47 @@ +# Supply Chain Management Checklist + +> Domain: SM (Supply Chain Management, 4 items) + +## SM — Supply Chain Management (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SM-01 | Supply Chain Protection | Identify and mitigate supply chain risks | Supply chain security policy, vendor selection criteria/contract security requirements, vendor registry updates | +| SM-02 | Pre-Acquisition Evaluation | Prevent vulnerable assets from entering operations | Pre-acquisition/update vulnerability scanning, acceptance testing, counterfeit inspection | +| SM-03 | All-Source Information Use | Achieve software transparency through SBOM | Require SBOM from suppliers, use SBOM for transparency/continuous management | +| SM-04 | Tampering/Counterfeiting Prevention & Detection | Detect and block supply chain tampering | Verify vendor development/distribution integrity, acceptance/operations integrity verification | + +### SM Protection Measures + +| Category | Measures | +|----------|----------| +| Contract Security | Training/incident notification/vulnerability remediation/audit rights/data disposal on termination in contracts | +| SBOM Management | SPDX/CycloneDX standard format, open-source/commercial SW identification, CVE periodic scanning | +| Integrity Verification | Hash value/digital signature verification, SBOM-based impact identification on new vulnerabilities | +| Vendor Management | Periodic vendor security audits, vendor registry maintenance, conditional acceptance criteria | + +## Supply Chain Architecture (3 Zones) + +### Satellite/Launch Vehicle Manufacturer +| Component | Security Focus | +|-----------|---------------| +| SW Development Server | IDE plugin verification, malware scanning | +| Library DB | Open-source library verification, vulnerability scanning | +| Code DB | Source code integrity, access control | +| Manufacturing Systems | Satellite bus, payload, launch vehicle manufacturing integrity | + +### Ground Station Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Control System | Build pipeline security, backdoor prevention | +| SW Development Server | Secure development environment | +| SW Update Server | Update file integrity verification, secure transmission | +| Library/Code DB | Vulnerable open-source blocking, SBOM verification | + +### Satellite Operator +| Component | Security Focus | +|-----------|---------------| +| Satellite Application System | Hard-coded credential prevention | +| SW Development Server | Remote work environment security | +| Data Processing System | Maintenance account management | +| Library/Code DB | Auto-build malicious open-source prevention | diff --git a/skills/kesekit-start/templates/space-security/system-security.md b/skills/kesekit-start/templates/space-security/system-security.md new file mode 100644 index 0000000..7297ada --- /dev/null +++ b/skills/kesekit-start/templates/space-security/system-security.md @@ -0,0 +1,46 @@ +# System & Communication Security Checklist + +> Domains: SC (System & Communication Security, 7 items) + SI (System & Information Integrity, 4 items) + +## SC — System & Communication Security (7 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SC-01 | Boundary Protection | Block unauthorized communications at boundaries | Network segmentation, DMZ deployment, communication encryption/monitoring, deny-all ACL | +| SC-02 | Security Engineering & Function Separation | Defense-in-depth, eliminate single points of failure | Security engineering principles, admin/user function separation, Secure by Design | +| SC-03 | Stored & Transmitted Information Security | Protect command/telemetry/log confidentiality and integrity | Storage encryption, uplink/downlink encryption, shared resource protection | +| SC-04 | Communication Security | Establish/maintain/terminate secure sessions | Default deny policy, authenticated/integrity-checked channels, session timeout | +| SC-05 | Encryption | Apply cryptographic algorithms and manage keys | Approved algorithms, key lifecycle management (create/distribute/store/retire) | +| SC-06 | Collaborative Computing Devices | Prevent remote camera/mic activation, prevent leaks | Device inventory, remote activation blocked, LED indicator required | +| SC-07 | Mobile Code & VoIP Control | Prevent malicious code execution and unauthorized VoIP | Mobile code execution control, VoIP usage restriction, monitoring | + +### SC Protection Measures + +| Category | Measures | +|----------|----------| +| Network Segmentation | Physical/logical separation, DMZ for public servers, satellite-control/operations/internet isolation | +| Encryption Standards | AES-256/ARIA-256, TLS 1.2+, IPsec VPN, CCSDS 352.0-B-2 for space systems | +| Integrity Verification | Digital signatures, HMAC, memory/buffer initialization | +| Session Management | mTLS, split-tunneling blocked, session ID rotation, 2-30 min timeout | +| Cryptographic Keys | AES-256, SHA-256+, RSA-4096+; PROHIBIT TDEA/MD5/SHA-1; full key lifecycle management | +| Code Control | ActiveX/Java Runtime disabled, script whitelisting, signed code only, SRTP for VoIP | + +## SI — System & Information Integrity (4 Items) + +| ID | Item | Purpose | Key Verification Points | +|----|------|---------|------------------------| +| SI-01 | Vulnerability Scanning & Flaw Remediation | Identify and fix system/application vulnerabilities | Periodic scanning, immediate scan on new vulnerabilities, flaw identification/remediation/reporting | +| SI-02 | Malicious Code Prevention | Prevent virus/worm/ransomware infiltration | Anti-malware on all systems, periodic/real-time scanning, signature updates | +| SI-03 | Security Alerts & Advisories | Monitor and respond to security alerts | Continuous monitoring of KISA/NCSC/CISA/NIST NVD, impact analysis, patch/hardening | +| SI-04 | System & Communication Traffic Monitoring | Detect abnormal traffic in real-time | Monitoring policy, inbound/outbound monitoring, result analysis/response | + +### SI Protection Measures + +| Measure | Detail | +|---------|--------| +| Vulnerability Management | Network/server/security/app/web scanning, CWE/CVE-based, prioritized remediation | +| Anti-Malware | Enterprise AV on all assets, daily+ updates, P2P/webhard blocked, central management | +| Alert Monitoring | RSS/email subscription to KISA/CISA/NVD, internal notification chain, patch within SLA | +| Traffic Monitoring | IDS/IPS at boundaries, access/security/network log integration, automated alerting | + +## Total: 11 Items (SC: 7 + SI: 4) diff --git a/skills/kesekit-start/templates/zero-trust/app-data.md b/skills/kesekit-start/templates/zero-trust/app-data.md new file mode 100644 index 0000000..f8d1195 --- /dev/null +++ b/skills/kesekit-start/templates/zero-trust/app-data.md @@ -0,0 +1,162 @@ +# Application & Data Checklist + +> Zero Trust Maturity Assessment — Application (AP) & Data (DA) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## AP — 애플리케이션 및 워크로드 (Application) (60 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AP-01 | 리소스 권한 부여 및 통합 | 접근에 대한 사용자/시스템 권한을 수동으로 관리하는가? | Traditional | Critical | +| ZT-AP-02 | 리소스 권한 부여 및 통합 | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | Traditional | Critical | +| ZT-AP-03 | 리소스 권한 부여 및 통합 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | Initial | High | +| ZT-AP-04 | 리소스 권한 부여 및 통합 | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | Initial | High | +| ZT-AP-05 | 리소스 권한 부여 및 통합 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-06 | 리소스 권한 부여 및 통합 | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | Advanced | Medium | +| ZT-AP-07 | 리소스 권한 부여 및 통합 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | Optimal | Low | +| ZT-AP-08 | 리소스 권한 부여 및 통합 | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | Optimal | Low | +| ZT-AP-09 | 리소스 권한 부여 및 통합 | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | Optimal | Low | +| ZT-AP-10 | 리소스 권한 부여 및 통합 | 모든 리소스 권한 부여가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-11 | 지속적인 모니터링 및 진행 중인 승인 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | Traditional | Critical | +| ZT-AP-12 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-AP-13 | 지속적인 모니터링 및 진행 중인 승인 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | Initial | High | +| ZT-AP-14 | 지속적인 모니터링 및 진행 중인 승인 | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | Initial | High | +| ZT-AP-15 | 지속적인 모니터링 및 진행 중인 승인 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | Advanced | Medium | +| ZT-AP-16 | 지속적인 모니터링 및 진행 중인 승인 | 보안 승인 프로세스를 자동화할 수 있는가? | Advanced | Medium | +| ZT-AP-17 | 지속적인 모니터링 및 진행 중인 승인 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | Optimal | Low | +| ZT-AP-18 | 원격 접속 | VPN을 통해서 외부 접속을 지원하는가? | Traditional | Critical | +| ZT-AP-19 | 원격 접속 | 애플리케이션에 대한 접근제어가 제한적인가? | Traditional | Critical | +| ZT-AP-20 | 원격 접속 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | Initial | High | +| ZT-AP-21 | 원격 접속 | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | Advanced | Medium | +| ZT-AP-22 | 원격 접속 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | Advanced | Medium | +| ZT-AP-23 | 원격 접속 | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | Optimal | Low | +| ZT-AP-24 | 원격 접속 | AI를 활용하여 원격 접속 보안을 고도화 하였는가? | Optimal | Low | +| ZT-AP-25 | 원격 접속 | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | Optimal | Low | +| ZT-AP-26 | 안전한 애플리케이션 배포 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | Traditional | Critical | +| ZT-AP-27 | 안전한 애플리케이션 배포 | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | Traditional | Critical | +| ZT-AP-28 | 안전한 애플리케이션 배포 | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | Traditional | Critical | +| ZT-AP-29 | 안전한 애플리케이션 배포 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | Initial | High | +| ZT-AP-30 | 안전한 애플리케이션 배포 | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | Initial | High | +| ZT-AP-31 | 안전한 애플리케이션 배포 | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | Initial | High | +| ZT-AP-32 | 안전한 애플리케이션 배포 | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | Initial | High | +| ZT-AP-33 | 안전한 애플리케이션 배포 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | Advanced | Medium | +| ZT-AP-34 | 안전한 애플리케이션 배포 | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | Advanced | Medium | +| ZT-AP-35 | 안전한 애플리케이션 배포 | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | Advanced | Medium | +| ZT-AP-36 | 안전한 애플리케이션 배포 | 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | Advanced | Medium | +| ZT-AP-37 | 안전한 애플리케이션 배포 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | Optimal | Low | +| ZT-AP-38 | 안전한 애플리케이션 배포 | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | Optimal | Low | +| ZT-AP-39 | 애플리케이션 인벤토리 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | Traditional | Critical | +| ZT-AP-40 | 애플리케이션 인벤토리 | 애플리케이션 기본 정보를 기록하여 관리하는가? | Traditional | Critical | +| ZT-AP-41 | 애플리케이션 인벤토리 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | Initial | High | +| ZT-AP-42 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가/관리할 수 있는가? | Advanced | Medium | +| ZT-AP-43 | 애플리케이션 인벤토리 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | Optimal | Low | +| ZT-AP-44 | 애플리케이션 인벤토리 | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-AP-45 | 보안 소프트웨어 개발 및 통합 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | Traditional | Critical | +| ZT-AP-46 | 보안 소프트웨어 개발 및 통합 | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | Traditional | Critical | +| ZT-AP-47 | 보안 소프트웨어 개발 및 통합 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | Initial | High | +| ZT-AP-48 | 보안 소프트웨어 개발 및 통합 | DevSecOps 문화를 도입하였는가? | Initial | High | +| ZT-AP-49 | 보안 소프트웨어 개발 및 통합 | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | Initial | High | +| ZT-AP-50 | 보안 소프트웨어 개발 및 통합 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | Advanced | Medium | +| ZT-AP-51 | 보안 소프트웨어 개발 및 통합 | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | Advanced | Medium | +| ZT-AP-52 | 보안 소프트웨어 개발 및 통합 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | Optimal | Low | +| ZT-AP-53 | 보안 소프트웨어 개발 및 통합 | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | Optimal | Low | +| ZT-AP-54 | 보안 소프트웨어 개발 및 통합 | 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | Optimal | Low | +| ZT-AP-55 | 소프트웨어 위험 관리 | 최소한의 위험 요소가 식별되고 문서화 하였는가? | Traditional | Critical | +| ZT-AP-56 | 소프트웨어 위험 관리 | 소프트웨어 위험 관리 계획이 수립되어 있는가? | Traditional | Critical | +| ZT-AP-57 | 소프트웨어 위험 관리 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | Initial | High | +| ZT-AP-58 | 소프트웨어 위험 관리 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | Advanced | Medium | +| ZT-AP-59 | 소프트웨어 위험 관리 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | Optimal | Low | +| ZT-AP-60 | 소프트웨어 위험 관리 | 맞춤형 공격에 대응 가능한가? | Optimal | Low | + +### AP Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 리소스 권한 부여 및 통합 | 수동 권한 관리, 정적 접근제어 | 중앙 집중식 관리 | 컨텍스트 기반 최소 권한, 정밀 관리 | 실시간 분석, 자동 권한 부여/회수, 완전 자동화 | +| 지속적인 모니터링 및 승인 | 수동 모니터링, 수동 이벤트 기록 | 실시간 이벤트 수집/분석, 보안 검토 | AI 분석, 승인 자동화 | 실시간 탐지, 위협 사전 예측 | +| 원격 접속 | VPN 외부 접속, 제한적 접근제어 | 자동 보안 상태 평가 | 실시간 모니터링, 맞춤형 정책 | 동적 보안 정책, AI 고도화, 즉각 차단 | +| 안전한 애플리케이션 배포 | 수동 코드 검토, 배포 절차, 접근제어 | 자동화 파이프라인, CI/CD 취약점 검사, 무결성 검사 | 지속적 모니터링, 정책 자동 검증, 즉각 대응 | 완전 자동 배포, AI 위협 탐지 통합 | +| 애플리케이션 인벤토리 | 수동 목록화, 기본 정보 기록 | 자동 식별/관리 | 보안 상태 평가/관리 | AI 실시간 반영, 보안 시스템 통합 | +| 보안 SW 개발 및 통합 | 보안 코딩 표준, 수동 테스트 | SDLC 통합, DevSecOps, SBOM | 서드파티 자동 검사, 전체 SBOM | 프로세스 격리, 런타임 분석, 완전 자동화 | +| 소프트웨어 위험 관리 | 위험 식별/문서화, 관리 계획 | 위험 평가 프로세스 | 공급망 보안, 전주기 자동화 | AI 예측 분석, 맞춤형 공격 대응 | + +--- + +## DA — 데이터 (Data) (58 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DA-01 | 데이터 카탈로그 위험 정렬 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | Traditional | Critical | +| ZT-DA-02 | 데이터 카탈로그 위험 정렬 | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | Traditional | Critical | +| ZT-DA-03 | 데이터 카탈로그 위험 정렬 | 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | Traditional | Critical | +| ZT-DA-04 | 데이터 카탈로그 위험 정렬 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | Initial | High | +| ZT-DA-05 | 데이터 카탈로그 위험 정렬 | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | Initial | High | +| ZT-DA-06 | 데이터 카탈로그 위험 정렬 | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | Initial | High | +| ZT-DA-07 | 데이터 카탈로그 위험 정렬 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | Advanced | Medium | +| ZT-DA-08 | 데이터 카탈로그 위험 정렬 | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-DA-09 | 데이터 카탈로그 위험 정렬 | 데이터 사용 패턴 분석이 가능한가? | Advanced | Medium | +| ZT-DA-10 | 데이터 카탈로그 위험 정렬 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | Optimal | Low | +| ZT-DA-11 | 데이터 카탈로그 위험 정렬 | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | Optimal | Low | +| ZT-DA-12 | 기업 데이터 거버넌스 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | Traditional | Critical | +| ZT-DA-13 | 기업 데이터 거버넌스 | 데이터 소유자와 관리자를 지정하였는가? | Traditional | Critical | +| ZT-DA-14 | 기업 데이터 거버넌스 | 데이터 거버넌스 프레임워크가 도입되어 있는가? | Traditional | Critical | +| ZT-DA-15 | 기업 데이터 거버넌스 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | Initial | High | +| ZT-DA-16 | 기업 데이터 거버넌스 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | Advanced | Medium | +| ZT-DA-17 | 기업 데이터 거버넌스 | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | Advanced | Medium | +| ZT-DA-18 | 기업 데이터 거버넌스 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | Optimal | Low | +| ZT-DA-19 | 데이터 접근제어 | 데이터 접근 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-20 | 데이터 접근제어 | 데이터 접근권한이 수동으로 부여되는가? | Traditional | Critical | +| ZT-DA-21 | 데이터 접근제어 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-22 | 데이터 접근제어 | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | Initial | High | +| ZT-DA-23 | 데이터 접근제어 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | Advanced | Medium | +| ZT-DA-24 | 데이터 접근제어 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-25 | 데이터 암호화 및 권한 관리 | 데이터를 수동으로 암호화하는가? | Traditional | Critical | +| ZT-DA-26 | 데이터 암호화 및 권한 관리 | 암호화 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-DA-27 | 데이터 암호화 및 권한 관리 | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-28 | 데이터 암호화 및 권한 관리 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | Initial | High | +| ZT-DA-29 | 데이터 암호화 및 권한 관리 | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-DA-30 | 데이터 암호화 및 권한 관리 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | Advanced | Medium | +| ZT-DA-31 | 데이터 암호화 및 권한 관리 | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | Advanced | Medium | +| ZT-DA-32 | 데이터 암호화 및 권한 관리 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | Optimal | Low | +| ZT-DA-33 | 데이터 암호화 및 권한 관리 | 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | Optimal | Low | +| ZT-DA-34 | 데이터 라벨링 및 태그 지정 | 라벨링 및 태그 지정 지침을 수립하였는가? | Traditional | Critical | +| ZT-DA-35 | 데이터 라벨링 및 태그 지정 | 일관된 데이터 분류 체계가 마련되어 있는가? | Traditional | Critical | +| ZT-DA-36 | 데이터 라벨링 및 태그 지정 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별/분류하는가? | Initial | High | +| ZT-DA-37 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | Initial | High | +| ZT-DA-38 | 데이터 라벨링 및 태그 지정 | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | Initial | High | +| ZT-DA-39 | 데이터 라벨링 및 태그 지정 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류/식별 가능한가? | Advanced | Medium | +| ZT-DA-40 | 데이터 라벨링 및 태그 지정 | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | Advanced | Medium | +| ZT-DA-41 | 데이터 라벨링 및 태그 지정 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | Optimal | Low | +| ZT-DA-42 | 데이터 라벨링 및 태그 지정 | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | Optimal | Low | +| ZT-DA-43 | 데이터 손실 방지 (DLP) | DLP 정책을 수립하고 수동으로 평가하는가? | Traditional | Critical | +| ZT-DA-44 | 데이터 손실 방지 (DLP) | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | Traditional | Critical | +| ZT-DA-45 | 데이터 손실 방지 (DLP) | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | Initial | High | +| ZT-DA-46 | 데이터 손실 방지 (DLP) | DLP 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-DA-47 | 데이터 손실 방지 (DLP) | DLP 솔루션이 모니터링 모드로 동작하는가? | Initial | High | +| ZT-DA-48 | 데이터 손실 방지 (DLP) | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | Advanced | Medium | +| ZT-DA-49 | 데이터 손실 방지 (DLP) | DLP 솔루션이 방지 모드로 사용되는가? | Advanced | Medium | +| ZT-DA-50 | 데이터 손실 방지 (DLP) | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | Optimal | Low | +| ZT-DA-51 | 데이터 손실 방지 (DLP) | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | Optimal | Low | +| ZT-DA-52 | 데이터 모니터링 및 감지 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | Traditional | Critical | +| ZT-DA-53 | 데이터 모니터링 및 감지 | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | Traditional | Critical | +| ZT-DA-54 | 데이터 모니터링 및 감지 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | Initial | High | +| ZT-DA-55 | 데이터 모니터링 및 감지 | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | Initial | High | +| ZT-DA-56 | 데이터 모니터링 및 감지 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-DA-57 | 데이터 모니터링 및 감지 | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | Advanced | Medium | +| ZT-DA-58 | 데이터 모니터링 및 감지 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | Optimal | Low | + +### DA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 데이터 카탈로그 위험 정렬 | 초기 카탈로그, 수동 분류, 위험 평가 문서화 | 자동 카탈로그, 자동 수집/분류, 기준 마련 | 민감도 분석, 보호 정책, 패턴 분석 | AI 실시간 분석, 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 정책 수립, 소유자 지정, 프레임워크 | 정기적 감사/검토 | 자동화, 실시간 모니터링 | 전체 시스템 통합 관리 | +| 데이터 접근제어 | 접근 정책 수립, 수동 권한 부여 | 중앙 집중식, 최소 권한 확인 | ABAC 컨텍스트 기반 | AI 실시간 권한 조정 | +| 데이터 암호화 및 권한 관리 | 수동 암호화, 정책 수립, 초기 관리 체계 | 자동 암호화, 중앙 집중식 관리 | 고급 암호화, RBAC+ABAC | AI 기반 최적화, 실시간 마스킹 | +| 데이터 라벨링 및 태그 지정 | 지침 수립, 분류 체계 마련 | 수동 라벨링, 특수 라벨, 차등 정책 | 자동 분류, 보안 시스템 연계 | 고급 메타데이터, AI 자동 조정 | +| 데이터 손실 방지 (DLP) | DLP 정책, 범위 지정 | DLP 도입, 중앙 관리, 모니터링 모드 | 전체 도입, 방지 모드 | AI 예측/차단, 자동 정책 최적화 | +| 데이터 모니터링 및 감지 | 수동 모니터링, 프로세스 수립 | 자동 감시, 정책 조정 | 이상 징후 탐지, 보안 시스템 연계 | 지속 평가, 컨텍스트 최소 접근제어 | + +--- + +## Total: 118 Items (AP: 60 + DA: 58) diff --git a/skills/kesekit-start/templates/zero-trust/identity-device.md b/skills/kesekit-start/templates/zero-trust/identity-device.md new file mode 100644 index 0000000..80e1800 --- /dev/null +++ b/skills/kesekit-start/templates/zero-trust/identity-device.md @@ -0,0 +1,133 @@ +# Identity & Device Checklist + +> Zero Trust Maturity Assessment — Identity (ID) & Device (DV) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## ID — 식별자 및 신원 (Identity) (53 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-ID-01 | 사용자 인벤토리 | 사용자 목록에 대한 문서화가 되어있는가? | Traditional | Critical | +| ZT-ID-02 | 사용자 인벤토리 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | Initial | High | +| ZT-ID-03 | 사용자 인벤토리 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | Advanced | Medium | +| ZT-ID-04 | 사용자 인벤토리 | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | Advanced | Medium | +| ZT-ID-05 | 사용자 인벤토리 | AI 기반 사용자 행동에 따른 관리가 되는가? | Optimal | Low | +| ZT-ID-06 | 사용자 인벤토리 | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | Optimal | Low | +| ZT-ID-07 | ID 연계 및 사용자 자격 증명 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-08 | ID 연계 및 사용자 자격 증명 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | Initial | High | +| ZT-ID-09 | ID 연계 및 사용자 자격 증명 | ID 통합 관리 시스템이 구축되어 있는가? | Advanced | Medium | +| ZT-ID-10 | ID 연계 및 사용자 자격 증명 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | Optimal | Low | +| ZT-ID-11 | 다중인증 (MFA) | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-12 | 다중인증 (MFA) | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | Initial | High | +| ZT-ID-13 | 다중인증 (MFA) | FIDO 기반 인증 기법이 적용되어 있는가? | Initial | High | +| ZT-ID-14 | 다중인증 (MFA) | 상황에 따른 맞춤형 MFA가 지원 가능한가? | Advanced | Medium | +| ZT-ID-15 | 다중인증 (MFA) | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-16 | 다중인증 (MFA) | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | Optimal | Low | +| ZT-ID-17 | 지속 인증 | 세션 기반 인증이 수행되는가? | Traditional | Critical | +| ZT-ID-18 | 지속 인증 | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | Traditional | Critical | +| ZT-ID-19 | 지속 인증 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-20 | 지속 인증 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | Advanced | Medium | +| ZT-ID-21 | 지속 인증 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | Optimal | Low | +| ZT-ID-22 | 통합 ICAM 플랫폼 | ICAM 시스템이 구축되어 있는가? | Traditional | Critical | +| ZT-ID-23 | 통합 ICAM 플랫폼 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | Initial | High | +| ZT-ID-24 | 통합 ICAM 플랫폼 | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | Initial | High | +| ZT-ID-25 | 통합 ICAM 플랫폼 | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | Initial | High | +| ZT-ID-26 | 통합 ICAM 플랫폼 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | Advanced | Medium | +| ZT-ID-27 | 통합 ICAM 플랫폼 | ICAM 플랫폼이 자동화되어 있는가? | Advanced | Medium | +| ZT-ID-28 | 통합 ICAM 플랫폼 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | Optimal | Low | +| ZT-ID-29 | 통합 ICAM 플랫폼 | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | Optimal | Low | +| ZT-ID-30 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | Traditional | Critical | +| ZT-ID-31 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자 행동 패턴이 수동으로 분석되는가? | Traditional | Critical | +| ZT-ID-32 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | Initial | High | +| ZT-ID-33 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 컨텍스트 정보 기반 접근권한이 조정되는가? | Initial | High | +| ZT-ID-34 | 행동, 컨텍스트 기반 ID 및 생체 인식 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | Advanced | Medium | +| ZT-ID-35 | 행동, 컨텍스트 기반 ID 및 생체 인식 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | Optimal | Low | +| ZT-ID-36 | 조건부 사용자 접근 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | Traditional | Critical | +| ZT-ID-37 | 조건부 사용자 접근 | 조건부 접근 정책에 대한 개념을 정의하였는가? | Traditional | Critical | +| ZT-ID-38 | 조건부 사용자 접근 | 시스템 별 각기 다른 접속 관리 기능이 있는가? | Traditional | Critical | +| ZT-ID-39 | 조건부 사용자 접근 | 특정 조건에 따른 사용자 접근제어가 가능한가? | Initial | High | +| ZT-ID-40 | 조건부 사용자 접근 | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | Initial | High | +| ZT-ID-41 | 조건부 사용자 접근 | 세션별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-42 | 조건부 사용자 접근 | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | Advanced | Medium | +| ZT-ID-43 | 조건부 사용자 접근 | 리소스별 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-ID-44 | 조건부 사용자 접근 | 동적 접근 정책을 실시간으로 적용 가능한가? | Optimal | Low | +| ZT-ID-45 | 조건부 사용자 접근 | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | Optimal | Low | +| ZT-ID-46 | 최소 권한 접근 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | Traditional | Critical | +| ZT-ID-47 | 최소 권한 접근 | 권한 부여에 대한 절차가 문서화 되어 있는가? | Traditional | Critical | +| ZT-ID-48 | 최소 권한 접근 | 권한 부여 절차가 표준화 되어 있는가? | Initial | High | +| ZT-ID-49 | 최소 권한 접근 | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | Initial | High | +| ZT-ID-50 | 최소 권한 접근 | 자동화된 권한 상승이 가능한가? | Advanced | Medium | +| ZT-ID-51 | 최소 권한 접근 | 권한 관리 정책이 지속적으로 업데이트 되는가? | Advanced | Medium | +| ZT-ID-52 | 최소 권한 접근 | 권한 관리가 동적으로 변경 가능한가? | Optimal | Low | +| ZT-ID-53 | 최소 권한 접근 | 최소 권한 원칙이 실시간으로 조정 가능한가? | Optimal | Low | + +### ID Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 사용자 인벤토리 | 사용자 목록 문서화 | 역할별 상세 인벤토리 | 자동화 관리, 비정상 활동 탐지 | AI 기반 관리, 통합 최적화 | +| ID 연계 및 사용자 자격 증명 | ID 연계 솔루션 적용 | 시스템 간 연동 | 통합 관리 시스템 | 글로벌 수준 연계 | +| 다중인증 (MFA) | 패스워드+SMS/이메일 MFA | 인증 앱/토큰, FIDO | 맞춤형 MFA, 컨텍스트 인증 | 비정상 로그인 실시간 탐지 | +| 지속 인증 | 세션 기반 인증, 상태 모니터링 | 세션 중간 추가 인증 | 동적 인증 기술 | 자동 재인증, 실시간 검증 | +| 통합 ICAM 플랫폼 | ICAM 시스템 구축 | 중앙 관리, 정책 표준화, 위험도 평가 | 시스템 통합 안정화, 자동화 | AI 기반 보안 강화, 실시간 ID 위험 평가 | +| 행동/컨텍스트 기반 ID 및 생체 인식 | 기본 생체 인식, 수동 행동 분석 | 통합 인증, 컨텍스트 접근권한 | 실시간 접근제어 조정 | AI 기반 행동/생체 인식 | +| 조건부 사용자 접근 | 기초 시스템, 개념 정의, 접속 관리 | 조건부 접근제어, 최소 권한 | 세션/리소스별 권한, 다단계 정책 | 동적 정책, AI 실시간 관리 | +| 최소 권한 접근 | 원칙 정의, 절차 문서화 | 표준화, 변경 관리 시스템 | 자동 권한 상승, 정책 업데이트 | 동적 변경, 실시간 조정 | + +--- + +## DV — 기기 및 엔드포인트 (Device) (40 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-DV-01 | 기기 감지 및 규정 준수 | 리소스에 연결된 기기를 식별할 수 있는가? | Traditional | Critical | +| ZT-DV-02 | 기기 감지 및 규정 준수 | 수동으로 규정 준수에 대한 확인이 가능한가? | Traditional | Critical | +| ZT-DV-03 | 기기 감지 및 규정 준수 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | Initial | High | +| ZT-DV-04 | 기기 감지 및 규정 준수 | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | Initial | High | +| ZT-DV-05 | 기기 감지 및 규정 준수 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | Advanced | Medium | +| ZT-DV-06 | 기기 감지 및 규정 준수 | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | Advanced | Medium | +| ZT-DV-07 | 기기 감지 및 규정 준수 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | Optimal | Low | +| ZT-DV-08 | 기기 감지 및 규정 준수 | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | Optimal | Low | +| ZT-DV-09 | 실시간 검사를 통한 기기 권한 부여 | 자산 접근 기기에 대한 정보가 수집되는가? | Traditional | Critical | +| ZT-DV-10 | 실시간 검사를 통한 기기 권한 부여 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | Initial | High | +| ZT-DV-11 | 실시간 검사를 통한 기기 권한 부여 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | Advanced | Medium | +| ZT-DV-12 | 실시간 검사를 통한 기기 권한 부여 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | Optimal | Low | +| ZT-DV-13 | 실시간 검사를 통한 기기 권한 부여 | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | Optimal | Low | +| ZT-DV-14 | 기기 인벤토리 | 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | Traditional | Critical | +| ZT-DV-15 | 기기 인벤토리 | 주요 기기에 대한 정보를 수집하고 관리하는가? | Traditional | Critical | +| ZT-DV-16 | 기기 인벤토리 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | Initial | High | +| ZT-DV-17 | 기기 인벤토리 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | Advanced | Medium | +| ZT-DV-18 | 기기 인벤토리 | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | Advanced | Medium | +| ZT-DV-19 | 기기 인벤토리 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | Optimal | Low | +| ZT-DV-20 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | Traditional | Critical | +| ZT-DV-21 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기본적인 보안 정책을 설정하였는가? | Traditional | Critical | +| ZT-DV-22 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | Initial | High | +| ZT-DV-23 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 기기 상태를 지속적으로 모니터링 하는가? | Initial | High | +| ZT-DV-24 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | Advanced | Medium | +| ZT-DV-25 | 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | Optimal | Low | +| ZT-DV-26 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | 기본적인 EDR 솔루션을 도입하였는가? | Traditional | Critical | +| ZT-DV-27 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | Initial | High | +| ZT-DV-28 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | XDR 솔루션을 도입하였는가? | Advanced | Medium | +| ZT-DV-29 | 엔드포인트 및 확장된 탐지/대응 (EDR 및 XDR) | AI 기반 EDR/XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | Optimal | Low | +| ZT-DV-30 | 자산, 취약성 및 패치 관리 자동화 | 자산 및 취약성을 수동으로 평가하는가? | Traditional | Critical | +| ZT-DV-31 | 자산, 취약성 및 패치 관리 자동화 | 주요 자산 및 취약성 목록이 작성되어 있는가? | Traditional | Critical | +| ZT-DV-32 | 자산, 취약성 및 패치 관리 자동화 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | Initial | High | +| ZT-DV-33 | 자산, 취약성 및 패치 관리 자동화 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | Advanced | Medium | +| ZT-DV-34 | 자산, 취약성 및 패치 관리 자동화 | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | Advanced | Medium | +| ZT-DV-35 | 자산, 취약성 및 패치 관리 자동화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | Optimal | Low | +| ZT-DV-36 | 자산, 취약성 및 패치 관리 자동화 | 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | Optimal | Low | + +### DV Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 기기 감지 및 규정 준수 | 기기 식별, 수동 규정 확인 | 실시간 탐지, 비준수 경고 | 자동 교정, 접근권한 연동 | 동적 권한 수정, AI 실시간 평가 | +| 실시간 검사를 통한 기기 권한 부여 | 기기 정보 수집 | 수동 검사 수행 | 자동 평가 및 접근 허용 | 접근권한 조정, 보안 시스템 연동 | +| 기기 인벤토리 | 수동 인벤토리, 정보 수집 | 자동화 기록 | 비정상 기기 탐지, 취약점 파악 | 실시간 모니터링, 예측 분석 | +| 통합 엔드포인트/모바일 기기 관리 | 관리 시스템 도입, 보안 정책 설정 | 중앙 관리, 지속 모니터링 | 중앙 자동 적용 | 통합 관리, 자동 위협 대응 | +| EDR 및 XDR | 기본 EDR 도입 | 실시간 탐지/자동 대응 | XDR 도입 | AI 기반 통합 위협 탐지 | +| 자산/취약성/패치 관리 자동화 | 수동 평가, 목록 작성 | 자동 패치 도입 | 지속적 자동화, 시스템 통합 | 사전 식별, 통합 관리 | + +--- + +## Total: 89 Items (ID: 53 + DV: 36) diff --git a/skills/kesekit-start/templates/zero-trust/network-system.md b/skills/kesekit-start/templates/zero-trust/network-system.md new file mode 100644 index 0000000..89cef54 --- /dev/null +++ b/skills/kesekit-start/templates/zero-trust/network-system.md @@ -0,0 +1,145 @@ +# Network & System Checklist + +> Zero Trust Maturity Assessment — Network (NW) & System (SY) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## NW — 네트워크 (Network) (54 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-NW-01 | 매크로 세그멘테이션 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-02 | 매크로 세그멘테이션 | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | Traditional | Critical | +| ZT-NW-03 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | Initial | High | +| ZT-NW-04 | 매크로 세그멘테이션 | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | Initial | High | +| ZT-NW-05 | 매크로 세그멘테이션 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | Advanced | Medium | +| ZT-NW-06 | 매크로 세그멘테이션 | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | Advanced | Medium | +| ZT-NW-07 | 매크로 세그멘테이션 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | Optimal | Low | +| ZT-NW-08 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | Traditional | Critical | +| ZT-NW-09 | 마이크로 세그멘테이션 | 수동으로 세그먼트를 구성하는가? | Traditional | Critical | +| ZT-NW-10 | 마이크로 세그멘테이션 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | Initial | High | +| ZT-NW-11 | 마이크로 세그멘테이션 | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지/차단 할 수 있는가? | Initial | High | +| ZT-NW-12 | 마이크로 세그멘테이션 | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | Initial | High | +| ZT-NW-13 | 마이크로 세그멘테이션 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | Advanced | Medium | +| ZT-NW-14 | 마이크로 세그멘테이션 | 애플리케이션 별 격리 메커니즘이 적용되었는가? | Advanced | Medium | +| ZT-NW-15 | 마이크로 세그멘테이션 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | Optimal | Low | +| ZT-NW-16 | 소프트웨어 정의 네트워킹 | 소프트웨어 정의 네트워크가 도입되어 있는가? | Traditional | Critical | +| ZT-NW-17 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | Traditional | Critical | +| ZT-NW-18 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | Initial | High | +| ZT-NW-19 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | Advanced | Medium | +| ZT-NW-20 | 소프트웨어 정의 네트워킹 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | Optimal | Low | +| ZT-NW-21 | 위협 대응 | IDS/IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | Traditional | Critical | +| ZT-NW-22 | 위협 대응 | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | Traditional | Critical | +| ZT-NW-23 | 위협 대응 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | Initial | High | +| ZT-NW-24 | 위협 대응 | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | Initial | High | +| ZT-NW-25 | 위협 대응 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | Advanced | Medium | +| ZT-NW-26 | 위협 대응 | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | Advanced | Medium | +| ZT-NW-27 | 위협 대응 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | Optimal | Low | +| ZT-NW-28 | 위협 대응 | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | Optimal | Low | +| ZT-NW-29 | 트래픽 암호화 | 내/외부 트래픽 일부 암호화가 가능한가? | Traditional | Critical | +| ZT-NW-30 | 트래픽 암호화 | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | Traditional | Critical | +| ZT-NW-31 | 트래픽 암호화 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | Initial | High | +| ZT-NW-32 | 트래픽 암호화 | 데이터 전송 시 암호화를 필수로 하고 있는가? | Initial | High | +| ZT-NW-33 | 트래픽 암호화 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | Advanced | Medium | +| ZT-NW-34 | 트래픽 암호화 | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | Advanced | Medium | +| ZT-NW-35 | 트래픽 암호화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | Optimal | Low | +| ZT-NW-36 | 트래픽 암호화 | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | Optimal | Low | +| ZT-NW-37 | 데이터 흐름 매핑 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | Traditional | Critical | +| ZT-NW-38 | 데이터 흐름 매핑 | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | Traditional | Critical | +| ZT-NW-39 | 데이터 흐름 매핑 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | Initial | High | +| ZT-NW-40 | 데이터 흐름 매핑 | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | Initial | High | +| ZT-NW-41 | 데이터 흐름 매핑 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | Advanced | Medium | +| ZT-NW-42 | 데이터 흐름 매핑 | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | Advanced | Medium | +| ZT-NW-43 | 데이터 흐름 매핑 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | Optimal | Low | +| ZT-NW-44 | 데이터 흐름 매핑 | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | Optimal | Low | +| ZT-NW-45 | 네트워크 회복성 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | Traditional | Critical | +| ZT-NW-46 | 네트워크 회복성 | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | Traditional | Critical | +| ZT-NW-47 | 네트워크 회복성 | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | Traditional | Critical | +| ZT-NW-48 | 네트워크 회복성 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | Initial | High | +| ZT-NW-49 | 네트워크 회복성 | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | Initial | High | +| ZT-NW-50 | 네트워크 회복성 | 네트워크 이중화 설계가 되어 있는가? | Initial | High | +| ZT-NW-51 | 네트워크 회복성 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | Advanced | Medium | +| ZT-NW-52 | 네트워크 회복성 | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | Advanced | Medium | +| ZT-NW-53 | 네트워크 회복성 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | Optimal | Low | +| ZT-NW-54 | 네트워크 회복성 | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | Optimal | Low | + +### NW Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 매크로 세그멘테이션 | 영역별 세그멘테이션, 트래픽 흐름 기반 구성 | 보안 정책 적용, 비정상 활동 탐지 | 맞춤형 정책, 위협 대응 | AI 기반 관리 | +| 마이크로 세그멘테이션 | 워크로드 기준 세그멘테이션, 수동 구성 | 보안 정책, 워크로드 이동 탐지/차단, 모니터링 | 정책 설정/제어, 격리 메커니즘 | AI 기반 자동 대응 | +| 소프트웨어 정의 네트워킹 | SDN 도입, 기본 구조 설정 | 중앙 관리, 실시간 정책 | 트래픽 관리/보안 확장 | AI 기반 위협 관리/트래픽 예측 | +| 위협 대응 | IDS/IPS 감시, 정적 규칙 관리 | 자동 탐지/대응, 프로파일 관리 | 선제적 대응, 동적 규칙 | 즉각 자동 대응, 동적 트래픽 관리 | +| 트래픽 암호화 | 일부 암호화, SSL/TLS/VPN | 전반 암호화, 전송 필수 암호화 | 저장 데이터 암호화, 고급 키 관리 | 성능 유지 보호, 통합 키 관리 | +| 데이터 흐름 매핑 | 수동 모니터링, 수동 매핑 | 애플리케이션 단위 매핑, 실시간 매핑 | 비정상 이동 탐지, 상관관계 분석 | AI 예측 분석, 동적 우선순위 | +| 네트워크 회복성 | 복구 계획, 백업, 장애 대응 절차 | 다중 경로, Failover, 이중화 | 지속적 서비스, 주기적 테스트 | 중단 없는 운영, 자동화 복구 | + +--- + +## SY — 시스템 (System) (49 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-SY-01 | 접근통제 | 사용자 및 기기에 수동으로 권한을 부여하는가? | Traditional | Critical | +| ZT-SY-02 | 접근통제 | RBAC 기반 접근제어를 수행하는가? | Traditional | Critical | +| ZT-SY-03 | 접근통제 | 권한 관리를 수동으로 수행하는가? | Traditional | Critical | +| ZT-SY-04 | 접근통제 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | Initial | High | +| ZT-SY-05 | 접근통제 | 실시간 접근권한 부여가 가능한가? | Initial | High | +| ZT-SY-06 | 접근통제 | 권한 변경 사항이 자동으로 반영되는가? | Initial | High | +| ZT-SY-07 | 접근통제 | 특정 리소스에 대한 접근 제한/승인 정책이 자동으로 적용 가능한가? | Initial | High | +| ZT-SY-08 | 접근통제 | ABAC 기반 접근제어를 수행하는가? | Advanced | Medium | +| ZT-SY-09 | 접근통제 | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | Advanced | Medium | +| ZT-SY-10 | 접근통제 | 사용자/기기의 상태를 실시간으로 분석하고 실시간/자동으로 권한 조정이 가능한가? | Optimal | Low | +| ZT-SY-11 | 접근통제 | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | Optimal | Low | +| ZT-SY-12 | 접근통제 | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | Optimal | Low | +| ZT-SY-13 | 접근통제 | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | Optimal | Low | +| ZT-SY-14 | PAM | PAM 시스템을 구축하였는가? | Traditional | Critical | +| ZT-SY-15 | PAM | PAM 정책이 수립되어 있는가? | Traditional | Critical | +| ZT-SY-16 | PAM | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | Initial | High | +| ZT-SY-17 | PAM | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | Initial | High | +| ZT-SY-18 | PAM | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | Advanced | Medium | +| ZT-SY-19 | PAM | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | Optimal | Low | +| ZT-SY-20 | 자격 증명 관리 | 자격 증명이 수동으로 관리되는가? | Traditional | Critical | +| ZT-SY-21 | 자격 증명 관리 | 패스워드에 기반한 인증 방식에 의존하는가? | Traditional | Critical | +| ZT-SY-22 | 자격 증명 관리 | 자격 증명 관리가 체계적이지 않고 수동적인가? | Traditional | Critical | +| ZT-SY-23 | 자격 증명 관리 | 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | Initial | High | +| ZT-SY-24 | 자격 증명 관리 | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | Initial | High | +| ZT-SY-25 | 자격 증명 관리 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | Advanced | Medium | +| ZT-SY-26 | 자격 증명 관리 | 자격 증명 관리 시스템을 고도화하여 관리하는가? | Advanced | Medium | +| ZT-SY-27 | 자격 증명 관리 | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | Advanced | Medium | +| ZT-SY-28 | 자격 증명 관리 | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | Advanced | Medium | +| ZT-SY-29 | 자격 증명 관리 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | Optimal | Low | +| ZT-SY-30 | 자격 증명 관리 | 실시간으로 인증 정책 조정이 가능한가? | Optimal | Low | +| ZT-SY-31 | 자격 증명 관리 | 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | Optimal | Low | +| ZT-SY-32 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | Traditional | Critical | +| ZT-SY-33 | 네트워크 세분화 및 그룹 간 이동 | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | Traditional | Critical | +| ZT-SY-34 | 네트워크 세분화 및 그룹 간 이동 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | Initial | High | +| ZT-SY-35 | 네트워크 세분화 및 그룹 간 이동 | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | Initial | High | +| ZT-SY-36 | 네트워크 세분화 및 그룹 간 이동 | 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | Advanced | Medium | +| ZT-SY-37 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | Advanced | Medium | +| ZT-SY-38 | 네트워크 세분화 및 그룹 간 이동 | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | Advanced | Medium | +| ZT-SY-39 | 네트워크 세분화 및 그룹 간 이동 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | Optimal | Low | +| ZT-SY-40 | 네트워크 세분화 및 그룹 간 이동 | 재인증 없는 그룹 간 이동이 가능한가? | Optimal | Low | +| ZT-SY-41 | 네트워크 세분화 및 그룹 간 이동 | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | Optimal | Low | +| ZT-SY-42 | 시스템 환경에 따른 정책 관리 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | Traditional | Critical | +| ZT-SY-43 | 시스템 환경에 따른 정책 관리 | 수동으로 보안 정책을 유지/관리하고 있는가? | Traditional | Critical | +| ZT-SY-44 | 시스템 환경에 따른 정책 관리 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | Initial | High | +| ZT-SY-45 | 시스템 환경에 따른 정책 관리 | 정책이 자동으로 적용되는가? | Initial | High | +| ZT-SY-46 | 시스템 환경에 따른 정책 관리 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | Advanced | Medium | +| ZT-SY-47 | 시스템 환경에 따른 정책 관리 | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | Advanced | Medium | +| ZT-SY-48 | 시스템 환경에 따른 정책 관리 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | Optimal | Low | +| ZT-SY-49 | 시스템 환경에 따른 정책 관리 | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | Optimal | Low | + +### SY Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 접근통제 | 수동 권한 부여, RBAC | 중앙 집중 권한, 실시간 부여, 자동 반영 | ABAC, 동적 실시간 권한 | 실시간 분석/조정, 신뢰도 재산정, 위험 분석 기반 | +| PAM | PAM 시스템/정책 구축 | 모니터링/제어, 자동 승인 | 비정상 활동 탐지 | AI 기반 위협 탐지/대응 | +| 자격 증명 관리 | 수동 관리, 패스워드 의존 | 중앙 자동화, MFA | 생체 인증, 고도화, 무결성, AI 분석 | 실시간 차단/정책 조정, 자율 운영 | +| 네트워크 세분화 및 그룹 간 이동 | 통제 미흡, 경계형 모델 | 중요도 기반 분리, 이동 제어 | 워크로드별 세분화, 강력한 접근통제, 실시간 검사 | 실시간 분석/제어, 재인증 없는 이동, 자동 정책 | +| 시스템 환경에 따른 정책 관리 | 온프레미스 보안 정책, 수동 관리 | 클라우드 정책, 자동 적용 | 하이브리드 실시간 조정, 동적 변경 | 자율 정책, 완전 자동화 | + +--- + +## Total: 103 Items (NW: 54 + SY: 49) diff --git a/skills/kesekit-start/templates/zero-trust/ot-environment.md b/skills/kesekit-start/templates/zero-trust/ot-environment.md new file mode 100644 index 0000000..0331c34 --- /dev/null +++ b/skills/kesekit-start/templates/zero-trust/ot-environment.md @@ -0,0 +1,51 @@ +# OT/ICS Zero Trust Environment Checklist + +> Zero Trust Maturity Assessment — OT/ICS (Operational Technology / Industrial Control Systems) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), IEC 62443, NIST SP 800-82 + +## OT/ICS Zero Trust Considerations + +OT/ICS environments require special Zero Trust deployment strategies due to: +- Legacy systems that cannot support modern authentication +- Real-time operational requirements (latency sensitivity) +- Safety-critical functions that must not be disrupted +- Air-gapped or semi-isolated network architectures +- Long equipment lifecycles (15-30 years) + +## OT-ZT Assessment Items + +| ID | Category | Verification | Maturity | Severity | +|----|----------|-------------|----------|----------| +| OT-ZT-01 | Network Segmentation | OT 네트워크와 IT 네트워크가 물리적/논리적으로 분리되어 있는가? | Traditional | Critical | +| OT-ZT-02 | Network Segmentation | DMZ를 통한 OT-IT 간 데이터 교환이 통제되고 있는가? | Traditional | Critical | +| OT-ZT-03 | Network Segmentation | Purdue Model 또는 IEC 62443 zone/conduit 기반 세그멘테이션이 적용되어 있는가? | Initial | High | +| OT-ZT-04 | Network Segmentation | 마이크로 세그멘테이션이 OT 환경 내부에 적용되어 있는가? | Advanced | Medium | +| OT-ZT-05 | Network Segmentation | SDN 기반 동적 세그멘테이션이 OT 환경에 적용 가능한가? | Optimal | Low | +| OT-ZT-06 | Identity & Access | OT 시스템 접근에 대한 사용자 인증이 수행되는가? | Traditional | Critical | +| OT-ZT-07 | Identity & Access | OT 전용 계정 관리 및 최소 권한 원칙이 적용되어 있는가? | Initial | High | +| OT-ZT-08 | Identity & Access | OT 환경에서 MFA가 적용되어 있는가 (물리적 토큰 포함)? | Initial | High | +| OT-ZT-09 | Identity & Access | OT 원격 접속에 대한 별도 인증 및 모니터링이 수행되는가? | Advanced | Medium | +| OT-ZT-10 | Identity & Access | 비정상적인 OT 접근 시도에 대한 실시간 탐지 및 대응이 가능한가? | Optimal | Low | +| OT-ZT-11 | Device Management | OT 자산 인벤토리가 문서화되어 있는가? | Traditional | Critical | +| OT-ZT-12 | Device Management | OT 디바이스 식별 및 분류 체계가 구축되어 있는가? | Initial | High | +| OT-ZT-13 | Device Management | OT 디바이스 보안 상태 자동 모니터링이 가능한가? | Advanced | Medium | +| OT-ZT-14 | Device Management | 레거시 OT 장비에 대한 보안 래퍼/프록시가 적용되어 있는가? | Advanced | Medium | +| OT-ZT-15 | Device Management | AI 기반 OT 자산 관리 및 이상 탐지가 가능한가? | Optimal | Low | +| OT-ZT-16 | Communication Security | OT 프로토콜(Modbus, OPC UA, DNP3 등) 트래픽이 모니터링되는가? | Traditional | Critical | +| OT-ZT-17 | Communication Security | OT 통신에 대한 암호화가 적용되어 있는가 (가능한 경우)? | Initial | High | +| OT-ZT-18 | Communication Security | OT 프로토콜 이상 탐지(DPI) 시스템이 도입되어 있는가? | Advanced | Medium | +| OT-ZT-19 | Communication Security | OT 환경 전용 위협 인텔리전스가 적용되어 있는가? | Optimal | Low | +| OT-ZT-20 | Safety & Availability | ZT 정책 적용 시 안전 기능(Safety Function)에 영향이 없는지 검증되었는가? | Traditional | Critical | +| OT-ZT-21 | Safety & Availability | ZT 정책 실패 시 fail-open/fail-safe 동작이 정의되어 있는가? | Initial | High | +| OT-ZT-22 | Safety & Availability | ZT 구성 변경에 대한 OT 영향도 분석 프로세스가 수립되어 있는가? | Advanced | Medium | +| OT-ZT-23 | Monitoring & Response | OT 환경 전용 SOC/보안 모니터링 체계가 수립되어 있는가? | Initial | High | +| OT-ZT-24 | Monitoring & Response | IT-OT 통합 보안 이벤트 분석이 가능한가? | Advanced | Medium | +| OT-ZT-25 | Monitoring & Response | OT 환경에 대한 자동화된 인시던트 대응이 가능한가? | Optimal | Low | + +## Deployment Strategy for OT + +1. **Phase 1 — Visibility**: Asset discovery, traffic mapping, baseline establishment +2. **Phase 2 — Segmentation**: IT-OT separation, zone/conduit implementation +3. **Phase 3 — Access Control**: Identity-based access, MFA for remote access +4. **Phase 4 — Monitoring**: Continuous monitoring, anomaly detection +5. **Phase 5 — Automation**: Automated response (with safety validation) diff --git a/skills/kesekit-start/templates/zero-trust/overview.md b/skills/kesekit-start/templates/zero-trust/overview.md new file mode 100644 index 0000000..0bdd288 --- /dev/null +++ b/skills/kesekit-start/templates/zero-trust/overview.md @@ -0,0 +1,69 @@ +# Zero Trust Overview + +> Zero Trust Maturity Assessment — Overview & Assessment Guide +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12), NIST SP 800-207, CISA ZT Maturity Model + +## Zero Trust Principles + +- **Never Trust, Always Verify**: Every access request must be authenticated and authorized regardless of network location +- **Assume Breach**: Minimize blast radius through microsegmentation and least-privilege access +- **Verify Explicitly**: Use all available data points (identity, location, device health, service/workload, data classification, anomalies) + +## 8 Core Elements + +| # | Element | Code | Items | +|---|---------|------|:-----:| +| 1 | Identity (식별자 및 신원) | ID | 53 | +| 2 | Device (디바이스 및 엔드포인트) | DV | ~50 | +| 3 | Network (네트워크) | NW | 54 | +| 4 | System (시스템) | SY | ~45 | +| 5 | Application (애플리케이션 및 워크로드) | AP | 60 | +| 6 | Data (데이터) | DA | ~50 | +| 7 | Visibility (가시성 및 분석) | VA | 43 | +| 8 | Automation (자동화 및 오케스트레이션) | AU | ~41 | + +**Total: ~396 items across 4 maturity levels** + +## 4 Maturity Levels + +| Level | Description | Target | +|-------|-------------|--------| +| **Traditional** | Perimeter-based security, manual processes | Baseline awareness | +| **Initial** | Some ZT controls adopted, partial automation | Early adopters | +| **Advanced** | Centralized management, context-aware policies, AI-assisted | Mature organizations | +| **Optimal** | Fully automated, real-time adaptive, AI-driven orchestration | Industry leaders | + +## Assessment Flow + +1. Determine target maturity level based on organizational goals +2. Select relevant core elements based on system context +3. Assess each item at or below the target maturity level +4. Items above target maturity level are informational (not scored) +5. Generate gap analysis comparing current state vs. target + +## Template Files + +| Topic | File | +|-------|------| +| Identity & Device | `templates/zero-trust/identity-device.md` | +| Network & System | `templates/zero-trust/network-system.md` | +| Application & Data | `templates/zero-trust/app-data.md` | +| Visibility & Automation | `templates/zero-trust/visibility-automation.md` | +| OT/ICS Environment | `templates/zero-trust/ot-environment.md` | + +## Reference Files + +| Topic | File | +|-------|------| +| ZT Architecture Reference | `references/zero-trust/overview.md` | +| Maturity Model Details | `references/zero-trust/maturity-model.md` | +| OT Deployment Guide | `references/zero-trust/ot-guide.md` | + +## Judgment Criteria + +| Judgment | Description | +|----------|-------------| +| Pass (양호) | ZT control properly implemented at target maturity level | +| Partial (부분이행) | Control partially implemented, improvement needed | +| Fail (취약) | Control not implemented or significantly below target | +| N/A (해당없음) | Not applicable to the environment | diff --git a/skills/kesekit-start/templates/zero-trust/visibility-automation.md b/skills/kesekit-start/templates/zero-trust/visibility-automation.md new file mode 100644 index 0000000..7dca723 --- /dev/null +++ b/skills/kesekit-start/templates/zero-trust/visibility-automation.md @@ -0,0 +1,128 @@ +# Visibility & Automation Checklist + +> Zero Trust Maturity Assessment — Visibility (VA) & Automation (AU) +> Source: 제로트러스트 가이드라인 2.0 (KISA, 2024.12) + +## VA — 가시성 및 분석 (Visibility) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-VA-01 | 모든 관련 활동 기록 | 로그 기록을 수동으로 수행하는가? | Traditional | Critical | +| ZT-VA-02 | 모든 관련 활동 기록 | 로그 데이터가 특정한 시스템에서만 수집되는가? | Traditional | Critical | +| ZT-VA-03 | 모든 관련 활동 기록 | 다양한 시스템에서 자동으로 로그를 수집하는가? | Initial | High | +| ZT-VA-04 | 모든 관련 활동 기록 | 로그 수집 및 관리가 자동화 되었는가? | Initial | High | +| ZT-VA-05 | 모든 관련 활동 기록 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | Advanced | Medium | +| ZT-VA-06 | 모든 관련 활동 기록 | 로그 기록의 무결성을 보장하는가? | Advanced | Medium | +| ZT-VA-07 | 모든 관련 활동 기록 | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | Advanced | Medium | +| ZT-VA-08 | 모든 관련 활동 기록 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | Optimal | Low | +| ZT-VA-09 | 모든 관련 활동 기록 | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | Optimal | Low | +| ZT-VA-10 | 모든 관련 활동 기록 | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | Optimal | Low | +| ZT-VA-11 | 중앙집중적 보안 정보 및 이벤트 관리 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | Traditional | Critical | +| ZT-VA-12 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템이 도입되었는가? | Initial | High | +| ZT-VA-13 | 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 보안 관리 체계가 구축되었는가? | Initial | High | +| ZT-VA-14 | 중앙집중적 보안 정보 및 이벤트 관리 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | Advanced | Medium | +| ZT-VA-15 | 중앙집중적 보안 정보 및 이벤트 관리 | AI 기반으로 보안 이벤트를 분석하는가? | Optimal | Low | +| ZT-VA-16 | 중앙집중적 보안 정보 및 이벤트 관리 | 비정상적인 활동에 대하여 자동 대응이 가능한가? | Optimal | Low | +| ZT-VA-17 | 보안 위협 분석 | 보안 로그 및 데이터를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-18 | 보안 위협 분석 | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-19 | 보안 위협 분석 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | Initial | High | +| ZT-VA-20 | 보안 위협 분석 | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | Initial | High | +| ZT-VA-21 | 보안 위협 분석 | 자동화된 보안 위협 분석 도구를 도입하였는가? | Advanced | Medium | +| ZT-VA-22 | 보안 위협 분석 | 실시간 보안 위협 탐지가 가능한가? | Advanced | Medium | +| ZT-VA-23 | 보안 위협 분석 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | Optimal | Low | +| ZT-VA-24 | 사용자 및 기기 동작 분석 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | Traditional | Critical | +| ZT-VA-25 | 사용자 및 기기 동작 분석 | 비정상 행동을 수동으로 탐지하는가? | Traditional | Critical | +| ZT-VA-26 | 사용자 및 기기 동작 분석 | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | Traditional | Critical | +| ZT-VA-27 | 사용자 및 기기 동작 분석 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | Initial | High | +| ZT-VA-28 | 사용자 및 기기 동작 분석 | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | Initial | High | +| ZT-VA-29 | 사용자 및 기기 동작 분석 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | Advanced | Medium | +| ZT-VA-30 | 사용자 및 기기 동작 분석 | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | Advanced | Medium | +| ZT-VA-31 | 사용자 및 기기 동작 분석 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | Optimal | Low | +| ZT-VA-32 | 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수동으로 수집하는가? | Traditional | Critical | +| ZT-VA-33 | 위협 인텔리전스 통합 | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | Traditional | Critical | +| ZT-VA-34 | 위협 인텔리전스 통합 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | Initial | High | +| ZT-VA-35 | 위협 인텔리전스 통합 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | Advanced | Medium | +| ZT-VA-36 | 위협 인텔리전스 통합 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | Optimal | Low | +| ZT-VA-37 | 자동화된 동적 정책 | 보안 정책을 수동으로 관리하는가? | Traditional | Critical | +| ZT-VA-38 | 자동화된 동적 정책 | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | Traditional | Critical | +| ZT-VA-39 | 자동화된 동적 정책 | 자동화된 정책 관리 시스템을 도입하였는가? | Initial | High | +| ZT-VA-40 | 자동화된 동적 정책 | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | Initial | High | +| ZT-VA-41 | 자동화된 동적 정책 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | Advanced | Medium | +| ZT-VA-42 | 자동화된 동적 정책 | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | Advanced | Medium | +| ZT-VA-43 | 자동화된 동적 정책 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | Optimal | Low | + +### VA Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 모든 관련 활동 기록 | 수동 로그, 특정 시스템 수집 | 자동 로그 수집, 관리 자동화 | 실시간 탐지, 무결성, 예측 분석 | 자율 보안, 정규화, 자동 정책 조정 | +| 중앙집중적 보안 정보/이벤트 관리 | 수동 분석 | SIEM 도입, 중앙 관리 | 보안 도구 연동 종합 분석 | AI 분석, 자동 대응 | +| 보안 위협 분석 | 수동 로그/CVE 수집 | 평가 기준, 자동 경고 | 자동화 분석, 실시간 탐지 | AI 예측 분석 | +| 사용자/기기 동작 분석 | 활동 데이터 수집, 수동 탐지, 패턴 기록 | 자동 분석 도구 도입 | 행동 분석 탐지, AI 실시간 대응 | 자동 정책 조정, 최소 권한 | +| 위협 인텔리전스 통합 | 수동 수집, 수동 연동 | 자동 통합 도구 | 내부 시스템 통합 | AI 기반 시스템 | +| 자동화된 동적 정책 | 수동 관리, 수동 대응 | 자동 정책 관리, 자동 변경 | 실시간 조정, 위협 연계 | AI 자율 정책 조정 | + +--- + +## AU — 자동화 및 통합 (Automation) (43 Items) + +| ID | Sub-capability | Verification | Maturity | Severity | +|----|---------------|-------------|----------|----------| +| ZT-AU-01 | 정책 통합 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | Traditional | Critical | +| ZT-AU-02 | 정책 통합 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | Initial | High | +| ZT-AU-03 | 정책 통합 | 정책 변경이 자동으로 이루어지는가? | Initial | High | +| ZT-AU-04 | 정책 통합 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | Advanced | Medium | +| ZT-AU-05 | 정책 통합 | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | Advanced | Medium | +| ZT-AU-06 | 정책 통합 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-07 | 중요 프로세스 자동화 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | Traditional | Critical | +| ZT-AU-08 | 중요 프로세스 자동화 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | Initial | High | +| ZT-AU-09 | 중요 프로세스 자동화 | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | Initial | High | +| ZT-AU-10 | 중요 프로세스 자동화 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | Advanced | Medium | +| ZT-AU-11 | 중요 프로세스 자동화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | Optimal | Low | +| ZT-AU-12 | 인공지능 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-13 | 인공지능 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | Initial | High | +| ZT-AU-14 | 인공지능 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | Advanced | Medium | +| ZT-AU-15 | 인공지능 | AI가 모든 보안 시스템에 완전히 통합되었는가? | Optimal | Low | +| ZT-AU-16 | 인공지능 | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | Optimal | Low | +| ZT-AU-17 | 보안 통합, 자동화 및 대응 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | Traditional | Critical | +| ZT-AU-18 | 보안 통합, 자동화 및 대응 | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | Traditional | Critical | +| ZT-AU-19 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 도입하였는가? | Initial | High | +| ZT-AU-20 | 보안 통합, 자동화 및 대응 | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | Initial | High | +| ZT-AU-21 | 보안 통합, 자동화 및 대응 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | Advanced | Medium | +| ZT-AU-22 | 보안 통합, 자동화 및 대응 | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | Advanced | Medium | +| ZT-AU-23 | 보안 통합, 자동화 및 대응 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | Optimal | Low | +| ZT-AU-24 | 보안 통합, 자동화 및 대응 | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | Optimal | Low | +| ZT-AU-25 | 데이터 교환 표준화 | 수집된 데이터가 상이한 형식으로 저장되는가? | Traditional | Critical | +| ZT-AU-26 | 데이터 교환 표준화 | 데이터 교환이 비효율적으로 이루어지는가? | Traditional | Critical | +| ZT-AU-27 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | Traditional | Critical | +| ZT-AU-28 | 데이터 교환 표준화 | 데이터 교환 표준을 도입하였는가? | Initial | High | +| ZT-AU-29 | 데이터 교환 표준화 | 보안 시스템 간 데이터 교환이 자동화되었는가? | Initial | High | +| ZT-AU-30 | 데이터 교환 표준화 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | Advanced | Medium | +| ZT-AU-31 | 데이터 교환 표준화 | 여러 보안 도구 간의 상호 운용성이 제공되는가? | Advanced | Medium | +| ZT-AU-32 | 데이터 교환 표준화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | Optimal | Low | +| ZT-AU-33 | 데이터 교환 표준화 | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | Optimal | Low | +| ZT-AU-34 | 데이터 교환 표준화 | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | Optimal | Low | +| ZT-AU-35 | 보안 운영 조정 및 사고 대응 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | Traditional | Critical | +| ZT-AU-36 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 절차가 정형화되어 있지 않는가? | Traditional | Critical | +| ZT-AU-37 | 보안 운영 조정 및 사고 대응 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | Initial | High | +| ZT-AU-38 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | Initial | High | +| ZT-AU-39 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | Advanced | Medium | +| ZT-AU-40 | 보안 운영 조정 및 사고 대응 | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | Advanced | Medium | +| ZT-AU-41 | 보안 운영 조정 및 사고 대응 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | Optimal | Low | +| ZT-AU-42 | 보안 운영 조정 및 사고 대응 | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | Optimal | Low | +| ZT-AU-43 | 보안 운영 조정 및 사고 대응 | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | Optimal | Low | + +### AU Sub-capability Protection Measures Summary + +| Sub-capability | Traditional | Initial | Advanced | Optimal | +|---------------|------------|---------|----------|---------| +| 정책 통합 | 수동 시스템별 변경 | 중앙 관리, 자동 변경 | 실시간 동적 조정, 즉각 수정 | AI 자율 정책 조정 | +| 중요 프로세스 자동화 | 수동 절차 의존 | 자동화 도구, 백업/장애 대응 자동화 | 보안 사고 자동 대응 | 실시간 최적화, 무중단 조정 | +| 인공지능 | 수동 수집/분석/대응 | 기본 AI 도구, 패턴 식별 | AI 고도화, 실시간 탐지/대응 | 완전 통합, 자율 감지/대응/조정 | +| 보안 통합/자동화/대응 | 독립 운영, 수동 대응 | SOAR 도입, 중앙 대응 | SOAR 고도화, 실시간 통합 | 중앙 자동 처리, 자율 통합 | +| 데이터 교환 표준화 | 상이한 형식, 비효율적, 수동 교환 | 표준 도입, 교환 자동화 | 외부 공유, 상호 운용성 | 자율 관리, 일관된 형식, 실시간 교환 | +| 보안 운영 조정/사고 대응 | 수동 소통, 비정형 절차 | 대응 계획, 자동 경고 | 자동 대응, 실시간 조율, 자동 보고 | 사전 예측, 완전 자동화, 실시간 협력 | + +--- + +## Total: 86 Items (VA: 43 + AU: 43) diff --git a/skills/start/SKILL.md b/skills/start/SKILL.md deleted file mode 100644 index a6039f7..0000000 --- a/skills/start/SKILL.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -name: start -description: Run a security vulnerability assessment based on KISA guidelines. Supports CII (Critical Information Infrastructure) with 560+ technical/administrative/physical items, and AI Security Guide (developer/provider/user). Use when "security assessment", "vulnerability scan", "CII audit", "KISA assessment", "AI security assessment", "infrastructure security review". ---- - -# KESE Security Vulnerability Assessment - -Perform comprehensive security vulnerability assessment based on KISA guidelines. Automatically selects the appropriate guideline based on user context. - -## Guideline Selection - -| # | Guideline | Description | Items | -|---|-----------|-------------|:-----:| -| 1 | **CII (Critical Information Infrastructure)** | Technical(424)+Administrative(127)+Physical(18) | ~560 | -| 2 | **AI Security** | AI Developer/Service Provider/User requirements | ~54 | -| 3 | **Robot Security** | Industrial/Service/Medical robot checklist (11 categories) | ~103 | - -### Auto-detection -- Servers, networks, databases, web services, firewalls → **CII** -- AI models, LLM, generative AI, machine learning, prompts → **AI Security** - ---- - -## CII Branch - -Read the appropriate reference file from `references/cii/` based on the target system. - -| System | Reference File | Items | -|--------|---------------|:-----:| -| Unix/Linux | `references/cii/unix.md` | 67 | -| Windows Server | `references/cii/windows.md` | 64 | -| Web Service | `references/cii/web-service.md` | 26 | -| Security Equipment | `references/cii/security-equip.md` | 23 | -| Network Equipment | `references/cii/network.md` | 38 | -| Control System | `references/cii/control-system.md` | 46 | -| PC | `references/cii/pc.md` | 18 | -| DBMS | `references/cii/database.md` | 26 | -| Mobile | `references/cii/mobile.md` | 4 | -| Web Application | `references/cii/webapp.md` | 21 | -| Virtualization | `references/cii/virtualization.md` | 25 | -| Cloud | `references/cii/cloud.md` | 19 | -| Administrative | `references/cii/admin.md` | 127 | -| Physical | `references/cii/physical.md` | 18 | - -### Judgment Criteria -- **Pass**: Security settings properly applied -- **Partial**: Partially implemented, improvement needed -- **Fail**: Vulnerability exists -- **N/A**: Not applicable to the environment - ---- - -## AI Security Branch - -Read from `references/ai-security/` based on target audience. - -| Target | Reference File | -|--------|---------------| -| Overview | `references/ai-security/overview.md` | -| AI Developer | `references/ai-security/developer.md` | -| Service Provider | `references/ai-security/service-provider.md` | -| User | `references/ai-security/user-guide.md` | - -6-stage lifecycle: Planning → Data → Model Dev → Deploy → Monitoring → Decommission - ---- - -## Notes -- Do not modify files during assessment — read-only -- Mark N/A for technologies not present -- Provide specific remediation for each finding diff --git a/skills/start/references/ai-security/user-guide.md b/skills/start/references/ai-security/user-guide.md deleted file mode 100644 index 1c3f1e3..0000000 --- a/skills/start/references/ai-security/user-guide.md +++ /dev/null @@ -1,70 +0,0 @@ -# AI 이용자를 위한 보안 수칙 - -> 출처: 과학기술정보통신부·한국인터넷진흥원 「인공지능(AI) 보안 안내서」 - -## 1. AI 이용자에게 발생할 수 있는 보안 위협 - -### 1.1 챗봇 통한 데이터 유출 -- AI 챗봇 서비스에서 다른 사용자의 개인정보가 노출되는 사례 -- 학습 데이터에 포함된 민감정보가 출력될 가능성 - -### 1.2 AI 음성비서 도청/해킹 -- 스마트 스피커에 레이저/음파를 이용한 명령 주입 -- 백그라운드 실행을 통한 비밀번호 탈취 유도 - -### 1.3 악성 링크/피싱 -- AI가 생성한 정교한 피싱 메시지 -- AI 서비스를 가장한 악성 사이트 - -### 1.4 딥페이크 -- AI 기반 얼굴/음성 합성을 이용한 사기 -- 가짜 영상/음성을 통한 신원 도용 - -### 1.5 안면인식 해킹 -- AI 안면인식 시스템의 우회 공격 -- 적대적 예제를 이용한 인증 우회 - -### 1.6 사이버 테러 -- AI를 악용한 대규모 자동화 공격 -- AI 기반 악성코드 생성 - ---- - -## 2. AI 서비스 이용 보안 수칙 - -### 수칙 1: 안전한 서비스 접근 -- **공식 경로로 다운로드**: 공식 앱 스토어, 공식 웹사이트에서만 AI 서비스 다운로드 -- **강력한 비밀번호 사용**: 영문+숫자+특수문자 조합, 8자 이상 -- **MFA 활성화**: 가능한 경우 다중 인증 설정 -- **공공 네트워크 주의**: 공공 Wi-Fi에서 AI 서비스 이용 시 VPN 사용 권장 -- **이용약관 확인**: AI 서비스의 데이터 수집/활용 정책 확인 - -### 수칙 2: 안전한 서비스 사용 -- **민감정보 입력 금지**: AI 챗봇에 비밀번호, 주민번호, 카드번호 등 입력하지 않기 -- **AI 출력 결과 검증**: AI가 생성한 정보의 정확성을 반드시 확인 -- **의심스러운 결과 신고**: 부적절하거나 유해한 AI 출력 발견 시 서비스 제공자에게 신고 -- **사용 후 데이터 삭제**: AI 서비스 이용 후 대화 기록 등 불필요한 데이터 삭제 -- **주기적 권한 검토**: AI 서비스에 부여한 권한(카메라, 마이크, 위치 등) 주기적 확인 - -### 수칙 3: 딥페이크 대응 -- 영상 통화 시 비정상적 움직임, 음질 이상 주의 -- 금전 요청이나 긴급 상황을 주장하는 연락은 별도 채널로 확인 - -### 수칙 4: AI 음성비서 보안 -- 사용하지 않을 때 마이크 비활성화 -- 음성 구매 기능 비밀번호 설정 -- 정기적으로 음성 기록 검토 및 삭제 - ---- - -## 3. 체크리스트 요약 - -| # | 항목 | 확인 | -|---|------|:----:| -| 1 | AI 서비스를 공식 경로에서 설치했는가? | □ | -| 2 | 강력한 비밀번호와 MFA를 설정했는가? | □ | -| 3 | AI 서비스 이용약관을 확인했는가? | □ | -| 4 | AI에 민감한 개인정보를 입력하지 않았는가? | □ | -| 5 | AI 출력 결과를 검증하고 있는가? | □ | -| 6 | 불필요한 대화 기록/데이터를 삭제했는가? | □ | -| 7 | AI 서비스에 부여한 권한을 검토했는가? | □ | diff --git a/skills/start/references/cii/cloud.md b/skills/start/references/cii/cloud.md deleted file mode 100644 index ef26ef5..0000000 --- a/skills/start/references/cii/cloud.md +++ /dev/null @@ -1,64 +0,0 @@ -# 클라우드 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: AWS, Azure, GCP 등 클라우드 환경 - -## 1. 계정 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-01 | 클라우드 관리 콘솔 기본 계정 변경 | 상 | -| CA-02 | 비밀번호 복잡성 및 MFA 설정 | 상 | -| CA-03 | 불필요한 계정/키 제거 | 상 | -| CA-04 | 루트/관리자 계정 직접 사용 제한 | 상 | - -## 2. 권한 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-05 | IAM 최소 권한 원칙 적용 | 상 | -| CA-06 | 서비스 계정/역할 권한 제한 | 상 | - -## 3. 가상 리소스 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-07 | 보안 그룹/네트워크 ACL 설정 | 상 | -| CA-08 | 스토리지 접근 권한 및 암호화 | 상 | -| CA-09 | 가상 네트워크 분리 (VPC/서브넷) | 상 | -| CA-10 | 미사용 리소스 점검 및 제거 | 중 | - -## 4. 운영 관리 (9항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CA-11 | 클라우드 감사 로깅 활성화 | 상 | -| CA-12 | 보안 모니터링 및 알림 설정 | 상 | -| CA-13 | 데이터 백업 및 복구 정책 | 상 | -| CA-14 | 보안 패치 및 이미지 관리 | 상 | -| CA-15 | API 키/시크릿 관리 | 상 | -| CA-16 | 전송 중/저장 시 암호화 | 상 | -| CA-17 | 인스턴스 메타데이터 보호 | 중 | -| CA-18 | 컨테이너/서버리스 보안 설정 | 중 | -| CA-19 | 클라우드 서비스 가용성 관리 | 중 | - -### 주요 점검 명령어 -```bash -# AWS -aws iam list-users -aws iam get-credential-report -aws ec2 describe-security-groups -aws s3api get-bucket-encryption --bucket -aws cloudtrail describe-trails - -# Azure -az ad user list -az network nsg list -az storage account list - -# GCP -gcloud iam service-accounts list -gcloud compute firewall-rules list -``` - -## 통계: 총 19항목 (상 14, 중 5, 하 0) diff --git a/skills/start/references/cii/database.md b/skills/start/references/cii/database.md deleted file mode 100644 index 67e8efc..0000000 --- a/skills/start/references/cii/database.md +++ /dev/null @@ -1,69 +0,0 @@ -# DBMS 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Oracle DB, MSSQL, MySQL, PostgreSQL, Altibase, Tibero, Cubrid - -## 1. 계정 관리 (9항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-01 | 기본 계정의 비밀번호, 정책 등을 변경하여 사용 | 상 | -| D-02 | 불필요 계정 제거 또는 잠금설정 | 상 | -| D-03 | 비밀번호 사용기간 및 복잡도 설정 | 상 | -| D-04 | 관리자 권한을 필요한 계정/그룹에만 허용 | 상 | -| D-05 | 비밀번호 재사용 제약 설정 | 중 | -| D-06 | DB 사용자 계정 개별 부여 | 중 | -| D-07 | root 권한으로 서비스 구동 제한 | 중 | -| D-08 | 안전한 암호화 알고리즘 사용 | 상 | -| D-09 | 로그인 실패 시 잠금정책 설정 | 중 | - -### 주요 점검 명령어 -```sql --- Oracle: 계정 확인 -SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; --- Oracle: 비밀번호 변경 -ALTER USER <계정> IDENTIFIED BY <신규비밀번호>; - --- MSSQL: sa 비밀번호 변경 -ALTER LOGIN sa WITH PASSWORD = '신규비밀번호'; - --- MySQL: root 비밀번호 변경 -ALTER USER 'root'@'localhost' IDENTIFIED BY '신규비밀번호'; - --- PostgreSQL: 역할 확인 -SELECT rolname, rolsuper FROM pg_roles; -``` - -## 2. 접근 관리 (7항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-10 | 원격에서 DB 서버 접속 제한 | 상 | -| D-11 | 비인가 사용자의 시스템 테이블 접근 차단 | 상 | -| D-12 | 안전한 리스너 비밀번호 설정 | 상 | -| D-13 | 불필요한 ODBC/OLE-DB 데이터 소스 제거 | 중 | -| D-14 | 주요 파일 접근 권한 설정 | 중 | -| D-15 | 리스너 로그/trace 파일 변경 제한 | 하 | -| D-16 | Windows 인증 모드 사용 | 하 | - -## 3. 옵션 관리 (8항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-17 | Audit Table 관리자 접근 제한 | 하 | -| D-18 | Role이 Public으로 설정되지 않도록 조정 | 상 | -| D-19 | OS_ROLES 등 원격 인증 FALSE 설정 | 상 | -| D-20 | 인가되지 않은 Object owner 제한 | 하 | -| D-21 | 인가되지 않은 GRANT OPTION 사용 제한 | 중 | -| D-22 | 자원 제한 기능 TRUE 설정 | 하 | -| D-23 | xp_cmdshell 사용 제한 | 상 | -| D-24 | Registry Procedure 권한 제한 | 상 | - -## 4. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| D-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| D-26 | 감사 기록 정책 적합 설정 | 상 | - -## 통계: 총 26항목 (상 13, 중 7, 하 6) diff --git a/skills/start/references/cii/network.md b/skills/start/references/cii/network.md deleted file mode 100644 index 1f99ce4..0000000 --- a/skills/start/references/cii/network.md +++ /dev/null @@ -1,87 +0,0 @@ -# 네트워크 장비 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Cisco, Alteon, Passport, Juniper, Piolink 등 - -## 1. 계정 관리 (5항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-01 | 비밀번호 설정 | 상 | -| N-02 | 비밀번호 복잡성 설정 | 상 | -| N-03 | 암호화된 비밀번호 사용 | 상 | -| N-04 | 계정 잠금 임계값 설정 | 상 | -| N-05 | 사용자, 명령어별 권한 수준 설정 | 중 | - -## 2. 접근 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-06 | VTY 접근(ACL) 설정 | 상 | -| N-07 | 세션 종료 시간 설정 | 상 | -| N-08 | VTY 접속 시 안전한 프로토콜 사용 | 중 | -| N-09 | 불필요한 보조 입출력 포트 사용 금지 | 중 | -| N-10 | 로그온 시 경고 메시지 설정 | 중 | -| N-11 | 원격 로그서버 사용 | 중 | - -## 3. 패치 관리 (1항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-12 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | - -## 4. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-13 | 로깅 버퍼 크기 설정 | 중 | -| N-14 | 정책에 따른 로깅 설정 | 중 | -| N-15 | NTP 및 시각 동기화 설정 | 중 | -| N-16 | Timestamp 로그 설정 | 하 | - -## 5. 기능 관리 (22항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| N-17 | SNMP 서비스 확인 | 상 | -| N-18 | SNMP Community String 복잡성 설정 | 상 | -| N-19 | SNMP ACL 설정 | 상 | -| N-20 | SNMP Community 권한 설정 | 상 | -| N-21 | TFTP 서비스 차단 | 상 | -| N-22 | Spoofing 방지 필터링 적용 | 상 | -| N-23 | DDoS 공격 방어 설정 또는 DDoS 장비 사용 | 상 | -| N-24 | 사용하지 않는 인터페이스 비활성화 | 상 | -| N-25 | TCP Keepalive 서비스 설정 | 중 | -| N-26 | Finger 서비스 차단 | 중 | -| N-27 | 웹 서비스 차단 | 중 | -| N-28 | TCP/UDP small 서비스 차단 | 중 | -| N-29 | Bootp 서비스 차단 | 중 | -| N-30 | CDP 서비스 차단 | 중 | -| N-31 | Directed-broadcast 차단 | 중 | -| N-32 | Source 라우팅 차단 | 중 | -| N-33 | Proxy ARP 차단 | 중 | -| N-34 | ICMP unreachable, Redirect 차단 | 중 | -| N-35 | identd 서비스 차단 | 중 | -| N-36 | Domain Lookup 차단 | 중 | -| N-37 | pad 차단 | 중 | -| N-38 | mask-reply 차단 | 중 | - -### 주요 점검 명령어 (Cisco IOS) -``` -! 계정 관리 -show running-config | include username -show running-config | include enable secret - -! 접근 관리 -show running-config | include line vty -show running-config | include access-class - -! SNMP -show running-config | include snmp-server - -! 불필요 서비스 -show running-config | include no service -show ip http server -``` - -## 통계: 총 38항목 (상 13, 중 24, 하 1) diff --git a/skills/start/references/cii/pc.md b/skills/start/references/cii/pc.md deleted file mode 100644 index c3dd9fc..0000000 --- a/skills/start/references/cii/pc.md +++ /dev/null @@ -1,62 +0,0 @@ -# PC 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Windows 10, Windows 11 - -## 1. 계정 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-01 | 비밀번호의 주기적 변경 | 상 | -| PC-02 | 비밀번호 관리정책 설정 | 상 | -| PC-03 | 복구 콘솔에서 자동 로그온 금지 설정 | 중 | - -## 2. 서비스 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-04 | 공유 폴더 제거 | 상 | -| PC-05 | 불필요한 서비스 제거 | 상 | -| PC-06 | 비인가 상용 메신저 사용 금지 | 상 | -| PC-07 | 파일 시스템이 NTFS 포맷으로 설정 | 중 | -| PC-08 | 다른 OS로 멀티 부팅 불가 설정 | 중 | -| PC-09 | 브라우저 종료 시 임시 인터넷 파일 삭제 | 하 | - -## 3. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-10 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| PC-11 | 지원 종료되지 않은 Windows OS Build 적용 | 상 | - -## 4. 보안 관리 (7항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| PC-12 | Windows 자동 로그인 점검 | 중 | -| PC-13 | 바이러스 백신 설치 및 주기적 업데이트 | 상 | -| PC-14 | 실시간 감시 기능 활성화 | 상 | -| PC-15 | OS 침입차단 기능 활성화 | 상 | -| PC-16 | 화면보호기 대기 시간 및 암호 보호 설정 | 상 | -| PC-17 | 이동식 미디어 자동실행 방지 | 상 | -| PC-18 | 원격 지원 금지 정책 설정 | 중 | - -### 주요 점검 명령어 -```powershell -# PC-01: 비밀번호 최대 사용기간 -net accounts | findstr "최대" - -# PC-04: 공유 폴더 -net share - -# PC-13~14: 백신 -Get-MpComputerStatus - -# PC-15: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled - -# PC-16: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -``` - -## 통계: 총 18항목 (상 11, 중 5, 하 2) diff --git a/skills/start/references/cii/unix.md b/skills/start/references/cii/unix.md deleted file mode 100644 index b9688e3..0000000 --- a/skills/start/references/cii/unix.md +++ /dev/null @@ -1,233 +0,0 @@ -# Unix 서버 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: SOLARIS, LINUX, AIX, HP-UX - -## 1. 계정 관리 (13항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-01 | root 계정 원격 접속 제한 | 상 | -| U-02 | 비밀번호 관리정책 설정 | 상 | -| U-03 | 계정 잠금 임계값 설정 | 상 | -| U-04 | 비밀번호 파일 보호 | 상 | -| U-05 | root 이외의 UID가 '0' 금지 | 상 | -| U-06 | 사용자 계정 su 기능 제한 | 상 | -| U-07 | 불필요한 계정 제거 | 하 | -| U-08 | 관리자 그룹에 최소한의 계정 포함 | 중 | -| U-09 | 계정이 존재하지 않는 GID 금지 | 하 | -| U-10 | 동일한 UID 금지 | 중 | -| U-11 | 사용자 Shell 점검 | 하 | -| U-12 | 세션 종료 시간 설정 | 하 | -| U-13 | 안전한 비밀번호 암호화 알고리즘 사용 | 중 | - -### 주요 점검 명령어 -```bash -# U-01: root 원격 접속 제한 -grep -i "PermitRootLogin" /etc/ssh/sshd_config -cat /etc/default/login | grep CONSOLE # Solaris -cat /etc/securetty # Linux - -# U-02: 비밀번호 정책 -cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE" -cat /etc/security/pwquality.conf # Linux - -# U-03: 계정 잠금 -cat /etc/pam.d/system-auth | grep pam_tally -cat /etc/security/user | grep loginretries # AIX - -# U-04: shadow 파일 보호 -ls -la /etc/shadow - -# U-05: UID 0 점검 -awk -F: '$3==0 {print $1}' /etc/passwd - -# U-06: su 제한 -cat /etc/pam.d/su | grep pam_wheel -ls -la /usr/bin/su - -# U-12: 세션 타임아웃 -echo $TMOUT -``` - ---- - -## 2. 파일 및 디렉터리 관리 (20항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-14 | root 홈, 패스 디렉터리 권한 및 패스 설정 | 상 | -| U-15 | 파일 및 디렉터리 소유자 설정 | 상 | -| U-16 | /etc/passwd 파일 소유자 및 권한 설정 | 상 | -| U-17 | 시스템 시작 스크립트 권한 설정 | 상 | -| U-18 | /etc/shadow 파일 소유자 및 권한 설정 | 상 | -| U-19 | /etc/hosts 파일 소유자 및 권한 설정 | 상 | -| U-20 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | 상 | -| U-21 | /etc/(r)syslog.conf 파일 소유자 및 권한 설정 | 상 | -| U-22 | /etc/services 파일 소유자 및 권한 설정 | 상 | -| U-23 | SUID, SGID, Sticky bit 설정 파일 점검 | 상 | -| U-24 | 사용자, 시스템 환경변수 파일 소유자 및 권한 설정 | 상 | -| U-25 | world writable 파일 점검 | 상 | -| U-26 | /dev에 존재하지 않는 device 파일 점검 | 상 | -| U-27 | $HOME/.rhosts, hosts.equiv 사용 금지 | 상 | -| U-28 | 접속 IP 및 포트 제한 | 상 | -| U-29 | hosts.lpd 파일 소유자 및 권한 설정 | 하 | -| U-30 | UMASK 설정 관리 | 중 | -| U-31 | 홈 디렉토리 소유자 및 권한 설정 | 중 | -| U-32 | 홈 디렉토리로 지정한 디렉토리의 존재 관리 | 중 | -| U-33 | 숨겨진 파일 및 디렉토리 검색 및 제거 | 하 | - -### 주요 점검 명령어 -```bash -# U-14: root PATH -echo $PATH | grep "::" -echo $PATH | grep ":$" - -# U-16~U-22: 주요 파일 권한 -ls -la /etc/passwd /etc/shadow /etc/hosts /etc/services -ls -la /etc/inetd.conf /etc/xinetd.conf /etc/syslog.conf /etc/rsyslog.conf - -# U-23: SUID/SGID -find / -perm -4000 -o -perm -2000 2>/dev/null - -# U-25: world writable -find / -type f -perm -002 2>/dev/null - -# U-26: /dev 점검 -find /dev -type f 2>/dev/null - -# U-27: rhosts -find / -name ".rhosts" -o -name "hosts.equiv" 2>/dev/null - -# U-28: 접속 제한 -cat /etc/hosts.allow -cat /etc/hosts.deny -iptables -L - -# U-30: umask -umask -grep umask /etc/profile /etc/bashrc -``` - ---- - -## 3. 서비스 관리 (30항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-34 | Finger 서비스 비활성화 | 상 | -| U-35 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | -| U-36 | r 계열 서비스 비활성화 | 상 | -| U-37 | crontab 설정파일 권한 설정 | 상 | -| U-38 | DoS 공격에 취약한 서비스 비활성화 | 상 | -| U-39 | 불필요한 NFS 서비스 비활성화 | 상 | -| U-40 | NFS 접근 통제 | 상 | -| U-41 | 불필요한 automountd 제거 | 상 | -| U-42 | 불필요한 RPC 서비스 비활성화 | 상 | -| U-43 | NIS, NIS+ 점검 | 상 | -| U-44 | tftp, talk 서비스 비활성화 | 상 | -| U-45 | 메일 서비스 버전 점검 | 상 | -| U-46 | 일반 사용자의 메일 서비스 실행 방지 | 상 | -| U-47 | 스팸 메일 릴레이 제한 | 상 | -| U-48 | expn, vrfy 명령어 제한 | 중 | -| U-49 | DNS 보안 버전 패치 | 상 | -| U-50 | DNS Zone Transfer 설정 | 상 | -| U-51 | DNS 서비스의 취약한 동적 업데이트 설정 금지 | 중 | -| U-52 | Telnet 서비스 비활성화 | 중 | -| U-53 | FTP 서비스 정보 노출 제한 | 하 | -| U-54 | 암호화되지 않는 FTP 서비스 비활성화 | 중 | -| U-55 | FTP 계정 Shell 제한 | 중 | -| U-56 | FTP 서비스 접근 제어 설정 | 하 | -| U-57 | Ftpusers 파일 설정 | 중 | -| U-58 | 불필요한 SNMP 서비스 구동 점검 | 중 | -| U-59 | 안전한 SNMP 버전 사용 | 상 | -| U-60 | SNMP Community String 복잡성 설정 | 중 | -| U-61 | SNMP Access Control 설정 | 상 | -| U-62 | 로그인 시 경고 메시지 설정 | 하 | -| U-63 | sudo 명령어 접근 관리 | 중 | - -### 주요 점검 명령어 -```bash -# U-34~U-44: 불필요 서비스 점검 -systemctl list-unit-files --state=enabled -chkconfig --list # CentOS 6 -inetadm # Solaris - -# U-39~U-40: NFS -showmount -e -cat /etc/exports -cat /etc/dfs/dfstab # Solaris - -# U-45~U-48: 메일 서비스 -sendmail -d0.1 -bt < /dev/null 2>&1 | grep Version -postconf mail_version -cat /etc/mail/sendmail.cf | grep "O PrivacyOptions" - -# U-49~U-51: DNS -named -v -cat /etc/named.conf | grep "allow-transfer" - -# U-58~U-61: SNMP -cat /etc/snmp/snmpd.conf | grep -i community -ps -ef | grep snmp -``` - ---- - -## 4. 패치 관리 (1항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-64 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | - -```bash -# 패치 현황 -uname -a -rpm -qa --last | head -20 # Linux -showrev -p # Solaris -instfix -i | grep ML # AIX -``` - ---- - -## 5. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| U-65 | NTP 및 시각 동기화 설정 | 중 | -| U-66 | 정책에 따른 시스템 로깅 설정 | 중 | -| U-67 | 로그 디렉터리 소유자 및 권한 설정 | 중 | - -```bash -# U-65: NTP -ntpq -p -cat /etc/ntp.conf -chronyc sources # CentOS 8+ - -# U-66: 로깅 설정 -cat /etc/rsyslog.conf -cat /etc/syslog.conf - -# U-67: 로그 권한 -ls -la /var/log/ -``` - ---- - -## 판단 기준 - -| 판단 | 설명 | -|------|------| -| 양호 | 보안 설정이 적절히 적용됨 | -| 취약 | 보안 취약점 존재, 조치 필요 | - -## 통계 - -| 분류 | 항목 수 | 상 | 중 | 하 | -|------|:------:|:--:|:--:|:--:| -| 계정 관리 | 13 | 6 | 4 | 3 | -| 파일/디렉터리 관리 | 20 | 15 | 3 | 2 | -| 서비스 관리 | 30 | 19 | 9 | 2 | -| 패치 관리 | 1 | 1 | 0 | 0 | -| 로그 관리 | 3 | 0 | 3 | 0 | -| **합계** | **67** | **41** | **19** | **7** | diff --git a/skills/start/references/cii/web-service.md b/skills/start/references/cii/web-service.md deleted file mode 100644 index e3f96bd..0000000 --- a/skills/start/references/cii/web-service.md +++ /dev/null @@ -1,74 +0,0 @@ -# 웹 서비스 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: Apache, Nginx, IIS, Tomcat, JEUS - -## 1. 계정 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-01 | Default 관리자 계정명 변경 | 상 | -| WEB-02 | 취약한 비밀번호 사용 제한 | 상 | -| WEB-03 | 비밀번호 파일 권한 관리 | 상 | - -## 2. 서비스 관리 (15항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-04 | 웹 서비스 디렉터리 리스팅 방지 설정 | 상 | -| WEB-05 | 지정하지 않은 CGI/ISAPI 실행 제한 | 상 | -| WEB-06 | 웹 서비스 상위 디렉터리 접근 제한 설정 | 상 | -| WEB-07 | 웹 서비스 경로 내 불필요한 파일 제거 | 중 | -| WEB-08 | 웹 서비스 파일 업로드 및 다운로드 용량 제한 | 하 | -| WEB-09 | 웹 서비스 프로세스 권한 제한 | 상 | -| WEB-10 | 불필요한 프록시 설정 제한 | 상 | -| WEB-11 | 웹 서비스 경로 설정 | 중 | -| WEB-12 | 웹 서비스 링크 사용 금지 | 중 | -| WEB-13 | 웹 서비스 설정 파일 노출 제한 | 상 | -| WEB-14 | 웹 서비스 경로 내 파일의 접근 통제 | 상 | -| WEB-15 | 웹 서비스의 불필요한 스크립트 매핑 제거 | 상 | -| WEB-16 | 웹 서비스 헤더 정보 노출 제한 | 중 | -| WEB-17 | 웹 서비스 가상 디렉토리 삭제 | 중 | -| WEB-18 | 웹 서비스 WebDAV 비활성화 | 상 | - -## 3. 보안 설정 (5항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-19 | 웹 서비스 SSI 사용 제한 | 중 | -| WEB-20 | SSL/TLS 활성화 | 상 | -| WEB-21 | HTTP 리디렉션 | 중 | -| WEB-22 | 에러 페이지 관리 | 하 | -| WEB-23 | LDAP 알고리즘 적절하게 구성 | 중 | - -## 4. 패치 및 로그 관리 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| WEB-24 | 별도의 업로드 경로 사용 및 권한 설정 | 중 | -| WEB-25 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| WEB-26 | 로그 디렉터리 및 파일 권한 설정 | 중 | - -### 주요 점검 명령어 -```bash -# WEB-04: 디렉터리 리스팅 -# Apache -grep -i "Options" /etc/httpd/conf/httpd.conf | grep -i "Indexes" -# Nginx -grep -i "autoindex" /etc/nginx/nginx.conf - -# WEB-09: 프로세스 권한 -ps -ef | grep httpd | grep -v root - -# WEB-16: 헤더 정보 노출 -# Apache: grep "ServerTokens" httpd.conf → Prod 설정 -# Nginx: grep "server_tokens" nginx.conf → off 설정 - -# WEB-18: WebDAV -grep -i "LoadModule.*dav" /etc/httpd/conf/httpd.conf - -# WEB-20: SSL/TLS -grep -i "SSLProtocol\|ssl_protocols" /etc/httpd/conf.d/ssl.conf /etc/nginx/nginx.conf -``` - -## 통계: 총 26항목 (상 14, 중 10, 하 2) diff --git a/skills/start/references/cii/webapp.md b/skills/start/references/cii/webapp.md deleted file mode 100644 index 5a1888d..0000000 --- a/skills/start/references/cii/webapp.md +++ /dev/null @@ -1,70 +0,0 @@ -# Web Application 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) -> 대상: 웹 애플리케이션 소스 코드 및 설정 - -## 1. 입력값 검증 (8항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| CI | Command Injection | 상 | -| SI | SQL Injection | 상 | -| XS | Cross-Site Scripting (XSS) | 상 | -| CF | Cross-Site Request Forgery (CSRF) | 상 | -| SF | Server-Side Request Forgery (SSRF) | 상 | -| FU | File Upload 취약점 | 상 | -| FD | File Download 취약점 | 상 | -| DI | 디렉터리 인덱싱 | 중 | - -## 2. 인증/세션 관리 (6항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| BF | Brute Force 공격 | 상 | -| IA | 불충분한 인증 (Insufficient Authentication) | 상 | -| PR | 비밀번호 복구 취약점 | 중 | -| IS | 불충분한 세션 관리 | 상 | -| CC | 세션 고정 (Credential/Session Prediction) | 상 | -| SN | 세션 만료 미설정 | 중 | - -## 3. 접근제어 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| IN | 불충분한 인가 (Insufficient Authorization) | 상 | -| PV | 경로 조작 (Path Traversal) | 상 | -| AE | 관리자 페이지 노출 | 상 | -| WM | HTTP Method 제한 미설정 | 중 | - -## 4. 정보노출 (3항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| EP | 에러 페이지를 통한 정보 노출 | 중 | -| IL | 불필요한 정보 노출 | 중 | -| AU | 부적절한 감사 로깅 | 중 | - -### 주요 점검 패턴 -``` -# SQL Injection -- 문자열 연결 쿼리: "SELECT * FROM users WHERE id = '" + input -- 안전: PreparedStatement, 매개변수화 쿼리, ORM - -# XSS -- innerHTML, document.write(input), v-html -- 안전: textContent, DOMPurify, 자동 이스케이프 - -# Command Injection -- Runtime.exec(input), subprocess(shell=True) -- 안전: 화이트리스트 검증, execFile - -# CSRF -- POST 요청에 CSRF 토큰 누락 -- 안전: 프레임워크 CSRF 미들웨어 - -# File Upload -- 확장자 미검증, 웹 루트 내 저장 -- 안전: 화이트리스트, 웹 루트 외부 저장, 랜덤 파일명 -``` - -## 통계: 총 21항목 (상 14, 중 7, 하 0) diff --git a/skills/start/references/cii/windows.md b/skills/start/references/cii/windows.md deleted file mode 100644 index cef3781..0000000 --- a/skills/start/references/cii/windows.md +++ /dev/null @@ -1,190 +0,0 @@ -# Windows 서버 취약점 분석·평가 항목 - -> KISA 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 (2026) - -## 1. 계정 관리 (14항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-01 | Administrator 계정 이름 변경 등 보안성 강화 | 상 | -| W-02 | Guest 계정 비활성화 | 상 | -| W-03 | 불필요한 계정 제거 | 상 | -| W-04 | 계정 잠금 임계값 설정 | 상 | -| W-05 | 해독 가능한 암호화를 사용하여 암호 저장 해제 | 상 | -| W-06 | 관리자 그룹에 최소한의 사용자 포함 | 상 | -| W-07 | Everyone 사용 권한을 익명 사용자에게 적용 | 중 | -| W-08 | 계정 잠금 기간 설정 | 중 | -| W-09 | 비밀번호 관리정책 설정 | 상 | -| W-10 | 마지막 사용자 이름 표시 안 함 | 중 | -| W-11 | 로컬 로그온 허용 | 중 | -| W-12 | 익명 SID/이름 변환 허용 해제 | 중 | -| W-13 | 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 | 중 | -| W-14 | 원격터미널 접속 가능한 사용자 그룹 제한 | 중 | - -### 주요 점검 명령어 -```powershell -# W-01: Administrator 계정명 -Get-LocalUser | Where-Object {$_.SID -like "*-500"} | Select Name - -# W-02: Guest 비활성화 -Get-LocalUser -Name "Guest" | Select Enabled - -# W-04: 계정 잠금 -net accounts - -# W-06: 관리자 그룹 -net localgroup Administrators - -# W-09: 패스워드 정책 -net accounts -``` - ---- - -## 2. 서비스 관리 (23항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-15 | 사용자 개인키 사용 시 암호 입력 | 상 | -| W-16 | 공유 권한 및 사용자 그룹 설정 | 상 | -| W-17 | 하드디스크 기본 공유 제거 | 상 | -| W-18 | 불필요한 서비스 제거 | 상 | -| W-19 | 불필요한 IIS 서비스 구동 점검 | 상 | -| W-20 | NetBIOS 바인딩 서비스 구동 점검 | 상 | -| W-21 | 암호화되지 않는 FTP 서비스 비활성화 | 상 | -| W-22 | FTP 디렉토리 접근권한 설정 | 상 | -| W-23 | 공유 서비스에 대한 익명 접근 제한 설정 | 상 | -| W-24 | FTP 접근 제어 설정 | 상 | -| W-25 | DNS Zone Transfer 설정 | 상 | -| W-26 | RDS(Remote Data Services) 제거 | 상 | -| W-27 | 최신 Windows OS Build 버전 적용 | 상 | -| W-28 | 터미널 서비스 암호화 수준 설정 | 중 | -| W-29 | 불필요한 SNMP 서비스 구동 점검 | 중 | -| W-30 | SNMP Community String 복잡성 설정 | 중 | -| W-31 | SNMP Access Control 설정 | 중 | -| W-32 | DNS 서비스 구동 점검 | 중 | -| W-33 | HTTP/FTP/SMTP 배너 차단 | 하 | -| W-34 | Telnet 서비스 비활성화 | 중 | -| W-35 | 불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 | 중 | -| W-36 | 원격터미널 접속 타임아웃 설정 | 중 | -| W-37 | 예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 | 중 | - -### 주요 점검 명령어 -```powershell -# W-17: 기본 공유 -net share -Get-SmbShare - -# W-18: 서비스 목록 -Get-Service | Where-Object {$_.Status -eq "Running"} - -# W-19: IIS -Get-Service W3SVC - -# W-29~31: SNMP -Get-Service SNMP -reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" -``` - ---- - -## 3. 패치 관리 (2항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-38 | 주기적 보안 패치 및 벤더 권고사항 적용 | 상 | -| W-39 | 백신 프로그램 업데이트 | 상 | - -```powershell -# W-38: 패치 현황 -Get-HotFix | Sort-Object InstalledOn -Descending | Select -First 10 -systeminfo | findstr "KB" - -# W-39: 백신 -Get-MpComputerStatus # Windows Defender -``` - ---- - -## 4. 로그 관리 (4항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-40 | 정책에 따른 시스템 로깅 설정 | 중 | -| W-41 | NTP 및 시각 동기화 설정 | 중 | -| W-42 | 이벤트 로그 관리 설정 | 하 | -| W-43 | 이벤트 로그 파일 접근 통제 설정 | 중 | - -```powershell -# W-40: 감사 정책 -auditpol /get /category:* - -# W-41: NTP -w32tm /query /status - -# W-42: 이벤트 로그 설정 -Get-EventLog -List -``` - ---- - -## 5. 보안 관리 (21항목) - -| 코드 | 항목 | 중요도 | -|------|------|:------:| -| W-44 | 원격으로 액세스할 수 있는 레지스트리 경로 | 상 | -| W-45 | 백신 프로그램 설치 | 상 | -| W-46 | SAM 파일 접근 통제 설정 | 상 | -| W-47 | 화면보호기 설정 | 상 | -| W-48 | 로그온하지 않고 시스템 종료 허용 | 상 | -| W-49 | 원격 시스템에서 강제로 시스템 종료 | 상 | -| W-50 | 보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 | 상 | -| W-51 | SAM 계정과 공유의 익명 열거 허용 안 함 | 상 | -| W-52 | Autologon 기능 제어 | 상 | -| W-53 | 이동식 미디어 포맷 및 꺼내기 허용 | 상 | -| W-54 | DoS 공격 방어 레지스트리 설정 | 중 | -| W-55 | 사용자가 프린터 드라이버를 설치할 수 없게 함 | 중 | -| W-56 | SMB 세션 중단 관리 설정 | 중 | -| W-57 | 로그온 시 경고 메시지 설정 | 하 | -| W-58 | 사용자별 홈 디렉터리 권한 설정 | 중 | -| W-59 | LAN Manager 인증 수준 | 중 | -| W-60 | 보안 채널 데이터 디지털 암호화 또는 서명 | 중 | -| W-61 | 파일 및 디렉토리 보호 | 중 | -| W-62 | 시작프로그램 목록 분석 | 중 | -| W-63 | 도메인 컨트롤러-사용자의 시간 동기화 | 중 | -| W-64 | 윈도우 방화벽 설정 | 중 | - -### 주요 점검 명령어 -```powershell -# W-44: 원격 레지스트리 -Get-Service RemoteRegistry | Select Status - -# W-46: SAM 파일 -icacls C:\Windows\System32\config\SAM - -# W-47: 화면보호기 -reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut -reg query "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure - -# W-52: Autologon -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon - -# W-59: LAN Manager -reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel - -# W-64: 방화벽 -Get-NetFirewallProfile | Select Name, Enabled -``` - ---- - -## 통계 - -| 분류 | 항목 수 | 상 | 중 | 하 | -|------|:------:|:--:|:--:|:--:| -| 계정 관리 | 14 | 7 | 7 | 0 | -| 서비스 관리 | 23 | 13 | 9 | 1 | -| 패치 관리 | 2 | 2 | 0 | 0 | -| 로그 관리 | 4 | 0 | 3 | 1 | -| 보안 관리 | 21 | 10 | 10 | 1 | -| **합계** | **64** | **32** | **29** | **3** | diff --git a/temp/img.png b/temp/img.png new file mode 100644 index 0000000..d0a3468 Binary files /dev/null and b/temp/img.png differ diff --git a/temp/img_1.png b/temp/img_1.png new file mode 100644 index 0000000..3ad52c1 Binary files /dev/null and b/temp/img_1.png differ diff --git "a/\353\254\270\354\204\234/Javascript_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234(2023\353\205\204_\352\260\234\354\240\225\353\263\270).pdf" "b/\353\254\270\354\204\234/Javascript_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234(2023\353\205\204_\352\260\234\354\240\225\353\263\270).pdf" new file mode 100644 index 0000000..8b52e2f Binary files /dev/null and "b/\353\254\270\354\204\234/Javascript_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234(2023\353\205\204_\352\260\234\354\240\225\353\263\270).pdf" differ diff --git "a/\353\254\270\354\204\234/Javascript_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" "b/\353\254\270\354\204\234/Javascript_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" new file mode 100644 index 0000000..fb3ab3c --- /dev/null +++ "b/\353\254\270\354\204\234/Javascript_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" @@ -0,0 +1,3381 @@ +# Javascript 시큐어코딩 가이드 (2023년 개정본) + +> **발행기관**: KISA (한국인터넷진흥원) +> **연도**: 2023 +> **원본**: 159페이지 +> **항목 수**: 42개 (7개 카테고리) + +--- + +## 목차 + +- [제1장 개요](#제1장-개요) + - [제1절 배경](#제1절-배경) + - [제2절 왜 자바스크립트인가](#제2절-왜-자바스크립트인가) + - [제3절 가이드 목적 및 구성](#제3절-가이드-목적-및-구성) +- [제2장 시큐어코딩 가이드](#제2장-시큐어코딩-가이드) + - [제1절 입력데이터 검증 및 표현](#제1절-입력데이터-검증-및-표현) + - [제2절 보안기능](#제2절-보안기능) + - [제3절 시간 및 상태](#제3절-시간-및-상태) + - [제4절 에러처리](#제4절-에러처리) + - [제5절 코드오류](#제5절-코드오류) + - [제6절 캡슐화](#제6절-캡슐화) + - [제7절 API 오용](#제7절-api-오용) +- [제3장 부록](#제3장-부록) + - [제1절 구현단계 보안약점 제거 기준](#제1절-구현단계-보안약점-제거-기준) + - [제2절 용어정리](#제2절-용어정리) + +--- + +# 제1장 개요 + +## 제1절 배경 + +빠른 실행과 반짝이는 서비스를 앞세운 스타트업들의 성장은 IT 생태계 전반에 큰 영향을 미쳤다. 체계적이고 큰 규모의 프로젝트를 중심으로 자리 잡았던 소프트웨어 개발 문화도 빠른 제품 개발과 고객의 요구사항 대응을 위해 더욱 가볍고 효율적인 방법을 모색하고 지속적으로 진화하고 있다. 이러한 변화의 흐름의 중심에는 웹 기술의 발전이 큰 부분을 차지한다. 웹은 컴파일 기반의 여타 제품들에 비해 빠르고 가볍게 개발이 가능하며, 별도의 배포 및 설치 없이도 고객의 PC 또는 스마트폰으로 서비스 제공이 가능하다. + +컴퓨터 하드웨어와 브라우저 성능이 뒷받침되지 않았던 상황에서, 초창기 웹 서비스는 웹 서버를 중심으로 동작했으며 클라이언트는 단순히 필요한 정보를 요청하고 응답을 화면에 보여주는 수준에 그쳤다. 하지만 하드웨어 성능의 비약적인 발전과 더불어 웹 생태계를 구성하는 엔진이 고도화되면서 클라이언트의 비중도 함께 커지게 되었다. Angular.js, ReactJS와 같은 프레임워크의 등장으로 변화는 더욱 가속화 되었으며 하이브리드 웹, 프로그래시브 웹 앱(PWA)의 등장으로 모바일 앱의 영역까지 확장되었다. + +별도의 독립 파일 또는 패키지 형태로 배포되고 관리되는 일반적인 소프트웨어와 달리 웹은 브라우저라는 특수한 환경 위에서 동작하는 구조로, 사용자와 맞닿아 있는 인터페이스와 서비스의 핵심 데이터를 제공하는 서버 사이의 거리가 매우 멀고 동시에 많은 사용자들이 이용한다는 특성을 가진다. 즉, 개발자가 작성한 코드의 많은 부분이 사용자에게 노출되어야 하고 사용자가 제공하고 요청하는 정보가 서버를 오가기까지 많은 신뢰할 수 없는 구간들을 거쳐야 하는 위험성을 가진다. + +초기 웹 서비스는 클라이언트의 비중이 그리 높지 않았으며 서버의 핵심 자원을 안전하게 보호하는 것에 초점이 맞춰졌다. 하지만 웹 생태계가 거대해지고 복잡해지면서 클라이언트의 역할 또한 커지고 있으며, 안전한 서비스 제공을 위해 고려해야 할 위협 요소도 증가·분산되어 위협에 대응하는 것이 더욱 어려워졌다. 지속 가능한 서비스 안정성 및 보안성 보장을 위해선 개발 단계부터 보안을 적용하는 것을 고려해야 한다. + +소프트웨어 개발보안은 보안 위협에 대응할 수 있는 소프트웨어를 개발하기 위한 일련의 보안 활동으로, 소프트웨어 개발 생명주기(SDLC)의 각 단계별로 요구되는 보안활동을 수행하는 것을 의미한다. NIST에서 공개한 자료에 따르면, 서비스 배포 이후 버그를 수정하는 비용이 설계 단계에서의 버그 수정에 비해 약 30배에 가까운 비용이 소요된다. 여기에 보안 사고로 인한 손실까지 감안하면 초기 단계의 개발보안 적용은 더 큰 손실을 미연에 방지하는 가장 효율적인 보안 대책이라고 볼 수 있다. + +소프트웨어 개발보안의 중요성을 이해하고 체계화한 미국의 경우 국토안보부(DHS)를 중심으로 시큐어코딩을 포함한 소프트웨어(SW) 개발 전 과정(설계, 구현, 시험 등)에 대한 보안활동 연구를 활발히 진행하고 있으며, 이는 2011년 발표한 "안전한 사이버 미래를 위한 청사진(Blueprint for a Secure Cyber Future)"에 자세히 언급되어 있다. + +국내의 경우 2009년도부터 전자정부 서비스를 중심으로 공공영역에서의 소프트웨어 개발보안 연구 및 정책이 본격적으로 추진되기 시작했다. 2020년 12월 10일에 소프트웨어진흥법 개정법이 시행됨에 따라 민간분야에서의 소프트웨어 개발보안 영역이 확대되었다. 과학기술정보통신부는 정보보호 패러다임 변화에 대응하고 안전하고 신뢰할 수 있는 디지털 안심 국가 실현을 목표로 2021년부터 중소기업 SW 보안약점 진단, 민간 특화 개발보안 가이드 보급, 개발보안 교육 등을 통해 민간 분야의 안전한 디지털 전환을 지원하고 있다. 2022년 2월에는 민간 분야에서 가장 많이 사용되는 파이썬 언어에 대한 시큐어코딩 가이드라인을 공개한 바 있다. + +> 1) 출처: NIST(National Institute of Standards and Technology) + +## 제2절 왜 자바스크립트인가 + +자바스크립트(Javascript)는 대화형 웹페이지 개발을 위해 만들어진 스크립트 기반 프로그래밍 언어로, 1995년 브랜담 엘크(Brendam Elch)가 넷스케이프 2 브라우저에 사용하기 위해 개발했다. 1997년도에 처음으로 언어 표준인 ECMA-262가 공개되었고 2022년 6월 기준 13번째 버전인 ECMAScript 2022(ES13) 버전이 공개됐다. 초기 자바스크립트는 C, Java와 같이 독립적인 애플리케이션 개발이 가능한 수준의 언어라기보다 웹 상의 데이터 표현을 위한 하나의 규격에 가까웠다. 또한 자바스크립트는 브라우저 내에 탑재된 인터프리터에 종속되어 있어 확장성에도 제약이 따랐다. 하지만 지속적인 엔진 개선 및 표준화를 거치면서 현재는 명실상부 개발자들에게 가장 많은 사랑을 받는 언어 중 하나로 성장했다. + +2009년 5월에는 오픈소스 자바스크립트 엔진인 크롬 V8에 비동기 이벤트 처리 라이브러리인 libuv를 결합한 NodeJS 플랫폼이 공개되면서 자바스크립트의 브라우저 종속성 문제가 해결되었고, 독립적인 애플리케이션으로서의 면모를 갖추게 되었다. 언어 자체의 유연함에 확장성까지 더해지면서 많은 개발자들이 자바스크립트 기반 플랫폼을 개발하기 시작했고 하나의 언어로 풀스택(full-stack) 개발까지 가능한 단계까지 발전했다. 이제 자바스크립트 언어 하나만으로도 클라이언트 프로그램, 애플리케이션 서버, 모바일 앱, 임베디드 프로그램까지 개발이 가능하다. + +글로벌 언어 트렌드에서도 자바스크립트의 인기를 확인할 수 있다. 구글 검색량을 기반으로 프로그래밍 언어 트렌드를 집계하는 PYPL에서는 Python, Java에 이어 3위를 차지했고, 전 세계 개발자들의 사랑을 받고 있는 대표적 플랫폼인 스택 오버플로우에서는 자바스크립트가 지난 9년 동안 가장 많이 사용되는 언어로 선정된 바 있다. + +![스택 오버플로우 언어 사용 통계](figures/javascript/stackoverflow-chart_00.png) + +> 2) https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language-prof + +언어 자체가 급격한 성장을 겪으면서 그만큼 더 높은 보안 위협에 노출되는 위험도 뒤따랐다. 대표적인 공개 취약점 데이터베이스인 CVE 통계치를 살펴보면 자바스크립트가 본격적으로 독립적인 언어의 모습을 갖추기 시작한 2015년경부터 자바스크립트 엔진에서 많은 보안 취약점이 발견되기 시작했고 해마다 그 수준이 증가하고 있는 추세임을 확인 가능하다. 활용도가 높아지는 만큼 고려해야 할 보안적인 요소도 더욱 많아졌다고 볼 수 있다. + +![자바스크립트 보안 취약점 통계](figures/javascript/security-stats_01.png) + +![자바스크립트 CVE 연도별 추이](figures/javascript/security-stats_02.png) + +## 제3절 가이드 목적 및 구성 + +본 가이드는 소프트웨어 구현 단계에서 발생 가능한 보안약점 제거 기준을 토대로 안전한 자바스크립트 개발을 위한 가이드 및 지침을 제공한다. 언어 엔진 자체의 취약점은 가이드 범위에 포함하지 않으며, 개발자가 통제 가능한 영역 내에서 안전한 코드 작성을 돕는 것을 목표로 한다. + +대부분 보안약점 항목은 웹 애플리케이션을 타겟으로 하고 있으며, 자바스크립트로 클라이언트측과 서버측 모두 개발이 가능한 점을 고려해 최대한 풀스택 상황에서의 보안 가이드를 모두 제시하는 것을 목표로 한다. 기본적으로 순수 자바스크립트 언어 예시를 제공하며, 해당되는 경우 클라이언트 측 코드 예시는 ReactJS를, 서버 측 코드 예시는 NodeJS 기반 ExpressJS 예시 코드를 포함했다. 기본적으로 클라이언트 측 코드는 공격자가 충분한 리소스만 투입한다면 분석 및 변조가 가능하므로, 안전한 클라이언트 측 코드가 제시된 항목의 경우에도 반드시 서버측 보안 기능을 반드시 적용해야 함을 주의해야 한다. + +**구성** + +- (1장) 자바스크립트 개발보안 가이드 개발 배경 및 목적 +- (2장) 자바스크립트 언어 기반 구현단계 보안약점 제거 기준 설명 + - 구현단계 보안약점 제거 기준 항목(49개) 중 42개에 대해 소개 + +| 유형 | 주요 내용 | +|------|-----------| +| 입력데이터 검증 및 표현 | SQL 삽입, 코드 삽입, 경로 조작 및 자원 삽입 등 13개 항목 ※ (4개 항목 제외) (정수형/메모리 버퍼) 오버플로우, HTTP 응답분할, 포맷 스트링 삽입 | +| 보안기능 | 적절한 인증 없는 중요 기능 허용, 부적절한 인가 등 16개 항목 | +| 시간 및 상태 | 종료되지 않는 반복문 또는 재귀함수 1개 항목 ※ (1개 항목 제외) 경쟁조건: 검사 시점과 사용 시점(TOCTOU) | +| 에러처리 | 오류 메시지 정보노출, 오류상황 대응 부재 등 3개 항목 | +| 코드오류 | Null Pointer 역참조, 부적절한 자원 해제 등 3개 항목 ※ (2개 항목 제외) 해제된 자원 사용, 초기화되지 않은 변수 사용 | +| 캡슐화 | 잘못된 세션에 의한 데이터 정보노출 등 4개 항목 | +| API 오용 | DNS lookup에 의한 보안결정 2개 항목 | + +- (3장) 구현단계 보안약점 제거 기준 및 용어 설명 + +--- + +# 제2장 시큐어코딩 가이드 + +## 제1절 입력데이터 검증 및 표현 + +프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정, 일관되지 않은 언어셋 사용 등으로 인해 발생되는 보안약점으로 SQL 삽입, 크로스사이트 스크립트(XSS) 등의 공격을 유발할 수 있다. + +### 1. SQL 삽입 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![SQL 삽입 공격 흐름](figures/javascript/sql-injection_03.png) + +![SQL 삽입 공격 예시](figures/javascript/sql-injection_04.png) + +데이터베이스(DB)와 연동된 웹 응용프로그램에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우 공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안약점을 말한다. 취약한 웹 응용프로그램에서는 사용자로부터 입력된 값을 검증 없이 넘겨받아 동적쿼리(Dynamic Query)를 생성하기 때문에 개발자가 의도하지 않은 쿼리가 실행되어 정보유출에 악용될 수 있다. + +자바스크립트에서는 관계형 데이터베이스, NoSQL 등 다양한 유형의 데이터베이스 시스템과 상호작용할 수 있는 라이브러리를 제공하며 크게 세 가지 유형의 방식을 사용할 수 있다. + +- 데이터베이스 드라이버 : 클라이언트와 커넥터를 사용해 데이터베이스와 직접 상호작용 ex) mysql +- 쿼리 빌더(Query builder) : 데이터베이스 클라이언트보다 한 단계 높은 계층에서 동작하며, 자바스크립트 코드로 쿼리 데이터를 생성하고 데이터베이스와 상호작용 할 수 있음 ex) Knex.js +- ORM(Object Relational Mapping) : 개발자가 데이터베이스를 추상화된 객체 형식으로 다룰 수 있게 해주는 데이터베이스 툴킷 ex) Sequelize + +데이터베이스 드라이버를 사용할 경우 개발자가 직접 쿼리 문자열을 정의하고 그 결과를 그대로 데이터베이스에 질의하게 되는데, 이 경우 검증되지 않은 외부 입력값으로 인한 SQL 삽입 공격이 발생할 수 있다. ORM을 사용하는 경우에도 복잡한 조건의 쿼리문 생성 어려움, 성능 저하 등의 이유로 ORM에서 지원하는 원시 쿼리 기능을 사용하면 공격에 취약해질 수 있다. SQL 인젝션 공격은 데이터베이스와 직접 상호작용하는 서버 측 코드에서만 발생할 수 있다. + +#### 나. 안전한 코딩기법 + +사용자 입력값으로 쿼리를 생성하는 경우 쿼리 빌더를 사용해 SQL 인젝션 공격을 방어할 수 있다. 입력값 검증은 사용자가 전달한 값이 쿼리문 구성에 필요한 정보를 가지는지 검증하는 화이트리스트 기반 방식으로 구현이 간단하지만, 특수 문자를 필요로 하는 상황이나 복잡한 동적 쿼리의 경우 데이터베이스 구조에 따라 필터링 규칙을 조금씩 변형해야 하며 부득이한 경우 공격에 사용되는 문자를 필터링해서는 안 되는 경우가 발생할 수 있다. + +데이터베이스 드라이버를 사용하거나 ORM에서 지원하는 원시 쿼리기능 사용 시 인자화된 쿼리를 통해 외부 입력값을 바인딩해서 사용하면 SQL 삽입 공격으로부터 안전하게 보호할 수 있다. 인자화된 쿼리는 사용자가 전달한 입력값을 그대로 쿼리 문자열로 만들지 않고 DB API에서 제공하는 기능을 사용해 쿼리 내에 사용자 입력값을 구성하는 방법을 의미한다. 인자화된 쿼리를 사용하면 사용자가 전달한 값을 그대로 쿼리에 사용하지 않고 미리 컴파일 된 쿼리 템플릿에 값을 삽입하는 방법을 사용해 입력값으로 인한 쿼리 조작이 불가능하게 된다. + +#### 다. 코드예제 + +**가) 데이터베이스 드라이버 사용 예제** + +다음은 사용자 입력값을 받아 원시 쿼리를 구성해 처리 하는 안전하지 않은 코드 예시를 보여 준다. 클라이언트에서 GET 요청의 인자로 전달된 id 값을 검증 없이 그대로 쿼리에 삽입하므로 공격자가 정상적인 정수형 id 값 대신 `'1 UNION SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = database();'` 와 같은 공격문을 전달할 경우 데이터베이스 내의 모든 테이블 이름이 조회되고 이는 곧 공격자가 원하는 모든 쿼리를 실행 가능하다는 의미로 해석될 수 있다. + +**안전하지 않은 코드** + +```javascript +const mysql = require("mysql"); +// 커넥션 초기화 옵션은 생략함 +const connection = mysql.createConnection(...); +router.get("/vuln/email", (req, res) => { + const con = connection; + const userInput = req.query.id; + // 사용자로부터 입력받은 값을 검증 없이 그대로 쿼리에 사용 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + con.query(query, + (err, result) => { + if (err) console.log(err); + return res.send(result); + } + ); +}); +``` + +데이터베이스 라이브러리가 인자화된 쿼리 기능을 지원할 경우 해당 기능을 사용해 쿼리를 생성해야 한다. mysql 라이브러리에서는 인자화된 쿼리 기능은 제공하지 않지만 '?' 형식으로 유사한 기능을 구현할 수 있다. 다음은 위 코드를 안전한 코드로 변환한 예시를 보여준다. + +**안전한 코드** + +```javascript +const mysql = require("mysql"); +... +router.get("/patched/email", (req, res) => { + const con = connection; + const userInput = req.query.id; + const query = 'SELECT email FROM user WHERE user_id = ?'; + // 쿼리 함수에 사용자 입력값을 매개변수 형태로 전달, 이렇게 작성하면 사용자 입력값에 + // escape 처리를 한 것과 동일한 결과가 실행 + con.query(query, userInput, + (err, result) => { + if (err) console.log(err); + return res.send(result); + } + ); +}); +``` + +**나) ORM 사용 예제** + +ExpressJS에서 가장 일반적으로 사용하는 ORM 라이브러리인 Sequealize에서는 쿼리 인자화를 사용해 쿼리를 구성하기 때문에 SQL 삽입 공격으로부터 안전하다. 부득이하게 원시 SQL 또는 사용자 정의 SQL을 사용할 경우에도 외부 입력값을 인자화된 쿼리의 바인딩 변수로 사용하면 된다. + +다음 코드는 ORM에서 지원하는 인자화된 쿼리 기능을 사용하지 않고 사용자 입력값을 그대로 쿼리에 삽입해 사용하는 예시를 보여 준다. 취약점 발생 원인과 가능한 공격 범위는 앞서 살펴본 mysql 취약 코드 예시와 동일하다. + +**안전하지 않은 코드** + +```javascript +const mysql = require("mysql"); +const Sequelize = require("sequelize"); +const { QueryTypes } = require("sequelize"); +// 커넥션 및 ORM 초기화 옵션은 생략함 +const connection = mysql.createConnection(...); +const sequelize = new Sequelize(...); +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + // 사용자로부터 입력받은 값을 검증 없이 그대로 쿼리에 사용 + const query = `SELECT email FROM user WHERE user_id = ${userInput}`; + sequelize.query(query, { type: QueryTypes.SELECT }) + .then((result) => { + return res.send(result); + }).catch((err) => { + console.log(err); + }); +}); +``` + +다음 코드에서는 원시 코드 실행 시에도 인자화된 쿼리와 인자를 바인딩 후 사용하는 안전한 예시를 보여 준다. 쿼리에 삽입할 값은 $number로 구분한다(예를 들어, 쿼리 구성에 사용하는 사용자 입력값이 두 개인 경우 각각 $1, $2 지시어 사용). + +**안전한 코드** + +```javascript +.... +router.get("/vuln/orm/email", (req, res) => { + const userInput = req.query.id; + // 쿼리 내에서 바인딩이 필요한 부분을 $number로 표기 + const query = `SELECT email FROM user WHERE user_id = $1`; + // 인자화된 쿼리 기능을 통해 쿼리를 생성 및 실행 + sequelize.query(query, + { + bind: [userInput], + type: QueryTypes.SELECT + }) + .then((result) => { + return res.send(result); + }).catch((err) => { + console.log(err); + }); +}); +``` + +#### 라. 참고자료 + +- [CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection'), MITRE](https://cwe.mitre.org/data/definitions/89.html) +- [SQL Injection Prevention Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html) +- [The Javascript Guide: Web Application Secure Coding Practices](https://github.com/Checkmarx/JS-SCP/blob/master/dist/js-webapp-scp.pdf) +- [JavaScript Secure Coding Standard - Ministry of Transport and Communications](https://compliance.qcert.org/sites/default/files/library/2018-10/MOTC-CIPD_JavaScript_Coding_Standard(US).pdf) +- [Raw Queries, Sequelize](https://sequelize.org/docs/v6/core-concepts/raw-queries/) +- [mysql, npm](https://www.npmjs.com/package/mysql) +- [SQL Expression Language Tutorial, SQLAlchemy](https://docs.sqlalchemy.org/en/14/core/tutorial.html#using-textual-sql) + +--- + +### 2. 코드 삽입 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![코드 삽입 공격 개요](figures/javascript/code-injection_05.png) + +![코드 삽입 공격 예시](figures/javascript/code-injection_06.png) + +공격자가 소프트웨어의 의도된 동작을 변경하도록 임의 코드를 삽입해 소프트웨어가 비정상적으로 동작하도록 하는 보안약점을 말한다. 코드 삽입은 프로그래밍 언어 자체의 기능에 한해 이뤄진다는 점에서 운영체제 명령어 삽입과 다르다. 프로그램에서 사용자의 입력값 내에 코드가 포함되는 것을 허용할 경우 공격자는 개발자가 의도하지 않은 코드를 실행해 권한을 탈취하거나 인증 우회, 시스템 명령어 실행 등으로 이어질 수 있다. + +자바스크립트에서 코드 삽입 공격을 유발할 수 있는 함수로는 eval(), setTimeOut(), setInterval() 등이 있다. 해당 함수의 인자를 면밀히 검증하지 않는 경우 공격자가 전달한 코드가 그대로 실행될 수 있다. 브라우저 위에서 동작하는 클라이언트측 환경에서는 주요 자원을 포함하는 서버와 달리 코드 삽입 자체만으로는 위협이 되지 않는다. + +#### 나. 안전한 코딩기법 + +동적 코드를 실행할 수 있는 함수를 사용하지 않는다. 필요 시 실행 가능한 동적 코드를 입력값으로 받지 않도록 외부 입력값에 대해 화이트리스트 기반 검증을 수행해야 한다. 유효한 문자만 포함하도록 동적 코드에 사용되는 사용자 입력값을 필터링 하는 방법도 있다. 또한, 데이터와 명령어를 엄격히 분리해 처리하는 별도의 로직을 구현할 수도 있다. + +#### 다. 코드예제 + +다음은 안전하지 않은 코드로 eval()을 사용해 사용자로부터 입력받은 값을 실행하여 결과를 반환 하는 예제다. 외부로부터 입력 받은 값을 아무런 검증 없이 eval() 함수의 인자로 사용하고 있다. 외부 입력값을 검증 없이 사용할 경우 공격자는 자바스크립트 코드를 통해 악성 기능 실행을 위한 라이브러리 로드 및 원격 대화형 쉘 등을 실행할 수도 있다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +router.post("/vuln/server", (req, res) => { + // 사용자로부터 전달 받은 값을 그대로 eval 함수의 인자로 전달 + const data = eval(req.body.data); + return res.send({ data }); +}); +``` + +다음은 안전한 코드로 변환한 예제를 보여 준다. 외부 입력값 내에 포함된 특수문자 등을 필터링 하는 사전 검증 코드를 추가하면 코드 삽입 공격 위험을 완화할 수 있다. 만약 부득이하게 클라이언트 요청으로 코드 실행을 해야 하는 경우 화이트리스트 기반 필터링을 통해 실행이 허용된 명령어가 포함된 입력값만 함수의 인자로 전달해야 한다. + +**안전한 코드** + +```javascript +const express = require('express'); +function alphanumeric(input_text) { + // 정규표현식 기반 문자열 검사 + const letterNumber = /^[0-9a-zA-Z]+$/; + if (input_text.match(letterNumber)) { + return true; + } else { + return false; + } +} + +router.post("/patched/server", (req, res) => { + let ret = null; + const { data } = req.body; + // 사용자 입력을 영문, 숫자로 제한하며, 만약 입력값 내에 특수문자가 포함되어 + // 있을 경우 에러 메시지를 반환 + if (alphanumeric(data)) { + ret = eval(data); + } else { + ret = 'error'; + } + return res.send({ ret }); +}); +``` + +#### 라. 참고자료 + +- [CWE-94: Improper Control of Generation of Code ('Code Injection'), MITRE](https://cwe.mitre.org/data/definitions/94.html) +- [CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection'), MITRE](https://cwe.mitre.org/data/definitions/95.html) +- [Code Injection, OWASP](https://owasp.org/www-community/attacks/Code_Injection) +- [JavaScript: HTML Form - checking for numbers and letters](https://www.w3resource.com/javascript/form/letters-numbers-field.php) +- [The Javascript Guide: Web Application Secure Coding Practices](https://github.com/Checkmarx/JS-SCP/blob/master/dist/js-webapp-scp.pdf) +- [NodeJs-Secure Code wiki](https://securecode.wiki/docs/lang/nodejs/) + +--- + +### 3. 경로 조작 및 자원 삽입 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![경로 조작 및 자원 삽입 개요](figures/javascript/path-traversal_07.png) + +검증되지 않은 외부 입력값을 통해 파일 및 서버 등 시스템 자원(파일, 소켓의 포트 등)에 대한 접근 혹은 식별을 허용할 경우 입력값 조작으로 시스템이 보호하는 자원에 임의로 접근할 수 있는 보안약점이다. 경로조작 및 자원삽입 약점을 이용해 공격자는 자원 수정·삭제, 시스템 정보누출, 시스템 자원 간 충돌로 인한 서비스 장애 등을 유발시킬 수 있다. 또한 경로 조작 및 자원 삽입을 통해서 공격자가 허용되지 않은 권한을 획득해 설정 파일을 변경하거나 실행시킬 수 있다. + +기본적으로, 클라이언트측 자바스크립트에서는 외부 입력값을 기반으로 하는 호스트 시스템의 프로세스 제어, 파이프 상호작용, 소켓 연결 등을 특별한 경우가 아니면 거의 사용하지 않으며, 사용하는 경우라도 코드 실행 위치가 사용자 시스템이므로 경로 조작이나 자원 삽입과 같은 위협이 큰 의미를 가지지 못한다. NodeJS 기반 서버 프로그램의 경우 fs 및 socket.io 라이브러리를 통해 프로세스 및 소켓 연결을 제어할 수 있다. + +#### 나. 안전한 코딩기법 + +외부로부터 받은 입력값을 자원(파일, 소켓의 포트 등)의 식별자로 사용하는 경우 적절한 검증을 거치도록 하거나 사전에 정의된 리스트에 포함된 식별자만 사용하도록 해야 한다. 특히, 외부의 입력이 파일명인 경우에는 필터를 적용해 경로순회(directory traversal) 공격의 위험이 있는 문자( /, \, .. 등)를 제거해야 한다. + +#### 다. 코드예제 + +**가) 경로 조작 예제** + +다음은 외부 입력값으로 파일 경로 등을 입력받아 파일을 여는 예시를 보여 준다. 만약 공격자가 `'../../../../etc/passwd'` 와 같은 값을 전달하면 사용자 계정 및 패스워드 정보가 담긴 파일의 내용이 클라이언트 측에 표시되어 의도치 않은 시스템 정보노출 문제가 발생한다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const path = require('path'); +router.get("/vuln/file", (req, res) => { + // 외부 입력값으로부터 파일명을 입력 받음 + const requestFile = req.query.file; + // 입력값을 검증 없이 파일 처리에 사용 + fs.readFile(path.resolve(__dirname, requestFile), 'utf8', function(err, data) { + if (err) { + return res.send('error'); + } + return res.send(data); + }) +}); +``` + +외부 입력값에서 경로 조작 문자열( /, \, .. 등)을 제거한 후 파일의 경로 설정에 사용하면 코드를 안전하게 만들 수 있다. + +**안전한 코드** + +```javascript +const express = require('express'); +const path = require('path'); +router.get("/patched/file", (req, res) => { + const requestFile = req.query.file; + // 정규표현식을 사용해 사용자 입력값을 필터링 + const filtered = requestFile.replace(/[.\\\/]/gi, ''); + fs.readFile(filtered, 'utf8', function(err, data) { + if (err) { + return res.send('error'); + } + return res.send(data); + }) +}); +``` + +**나) 자원 삽입 예제** + +다음은 안전하지 않은 코드 예시로, 외부 입력을 소켓 연결 주소로 그대로 사용하고 있다. 외부 입력값을 검증 없이 사용할 경우 기존 자원과의 충돌로 의도치 않은 에러가 발생할 수 있다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const io = require("socket.io"); +router.get("/vuln/socket", (req, res) => { + try { + // 외부로부터 입력받은 검증되지 않은 주소를 이용하여 + // 소켓을 바인딩 하여 사용하고 있어 안전하지 않음 + const socket = io(req.query.url); + return res.send(socket); + } catch (err) { + return res.send("[error] fail to connect"); + } +}); +``` + +다음은 안전한 예제를 보여 준다. 내부 자원에 접근 시 외부에서 입력 받은 값을 소켓 연결 주소와 같은 식별자로 그대로 사용하는 것은 바람직하지 않으며, 꼭 필요한 경우엔 허용 가능한 목록을 설정한 후 목록 내에 포함된 주소만 연결을 허용하도록 코드를 작성해야 한다. + +**안전한 코드** + +```javascript +const express = require('express'); +const io = require("socket.io"); +router.get("/patched/socket", (req, res) => { + // 화이트리스트 내에 속하는 주소만 허용 + const whitelist = ["ws://localhost", "ws://127.0.0.1"]; + if (whitelist.indexOf(req.query.url) < 0) { + return res.send("wrong url"); + } + try { + const socket = io(req.query.url); + return res.send(socket); + } catch (err) { + return res.send("[error] fail to connect"); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal'), MITRE](https://cwe.mitre.org/data/definitions/22.html) +- [CWE-99: Improper Control of Resource Identifiers ('Resource Injection'), MITRE](https://cwe.mitre.org/data/definitions/99.html) +- [Path Traversal, OWASP](https://owasp.org/www-community/attacks/Path_Traversal) +- [Resource Injection, OWASP](https://owasp.org/www-community/attacks/Resource_Injection) +- [Fortify Taxonomy: Software Security Errors](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.resource_injection#JavaScript%2FTypeScript) +- [socket.io](https://socket.io/docs/v4/) + +--- + +### 4. 크로스사이트 스크립트(XSS) + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![XSS 공격 개요](figures/javascript/xss_08.png) + +![XSS Stored 공격 흐름](figures/javascript/xss_09.png) + +![XSS Reflected 공격 흐름](figures/javascript/xss_10.png) + +![XSS DOM 기반 공격 흐름](figures/javascript/xss_11.png) + +![XSS 공격 예시 1](figures/javascript/xss_12.png) + +![XSS 공격 예시 2](figures/javascript/xss_13.png) + +크로스사이트 스크립트 공격(Cross-site scripting Attacks)은 웹사이트에 악성코드를 삽입하는 공격 방법이다. 공격자는 대상 웹 응용프로그램의 결함을 이용해 악성코드(일반적으로 클라이언트 측 자바스크립트 사용)를 사용자에게 보낸다. XSS 공격은 일반적으로 애플리케이션 호스트 자체보다 사용자를 목표로 삼는다. + +XSS는 공격자가 웹 응용프로그램을 속여 브라우저에서 실행될 수 있는 형식의 데이터(코드)를 다른 사용자에게 전달할 때 발생한다. 공격자가 임의로 구성한 기본 웹 코드 외에도 악성코드 다운로드, 플러그인 또는 미디어 콘텐츠를 이용할 수도 있다. 사용자가 폼 양식에 입력한 데이터 또는 서버에서 클라이언트 단말(브라우저) 전달된 데이터가 적절한 검증 없이 사용자에게 표시되도록 허용되는 경우 발생한다. + +XSS 공격에는 크게 세 가지 유형의 방식이 있다. + +- **유형 1 : Reflective XSS (or Non-persistent XSS)** + - Reflective XSS는 공격 코드를 사용자의 HTTP 요청에 삽입한 후 해당 공격 코드를 서버 응답 내용에 그대로 반사(Reflected)시켜 브라우저에서 실행하는 공격 기법이다. Reflective XSS 공격을 수행하려면 사용자로 하여금 공격자가 만든 서버로 데이터를 보내도록 해야 한다. 이 방법은 보통 악의적으로 제작된 링크를 사용자가 클릭하도록 유도하는 방식을 수반한다. 공격자는 피해자가 취약한 사이트를 참조하는 URL을 방문하도록 유도하고 피해자가 링크를 방문하면 스크립트가 피해자의 브라우저에서 자동으로 실행된다. 대부분의 경우 Reflective XSS 공격 메커니즘은 공개 게시판, 피싱(Phishing) 이메일, 단축 URL 또는 실제와 유사한 URL을 사용한다. + +- **유형 2 : Persistent XSS (or Stored XSS)** + - Persistent XSS는 신뢰할 수 없거나 확인되지 않은 사용자 입력(코드)이 서버에 저장되고, 이 데이터가 다른 사용자들에게 전달될 때 발생한다. Persistent XSS는 게시글 및 댓글 또는 방문자 로그 기능에서 발생할 수 있다. 해당 기능을 통해 공격자의 악성 콘텐츠를 다른 사용자들이 열람할 수 있다. 소셜 미디어 사이트 및 회원 그룹에서 흔히 볼 수 있는 것과 같이 공개적으로 표시되는 프로필 페이지는 Persistent XSS의 대표적인 공격 대상 중 하나다. 공격자는 프로필 입력 폼에 악성 스크립트를 주입해 다른 사용자가 프로필을 방문하면 브라우저에서 자동으로 코드가 실행되도록 할 수 있다. + +- **유형 3 : DOM XSS (or Client-Side XSS)** + - DOM XSS은 웹 페이지에 있는 사용자 입력값을 적절하게 처리하기 위한 자바스크립트의 검증 로직을 무효화 하는 것을 목표로 한다. 공격 스크립트가 포함된 악성 URL을 통해 전달된다는 관점에서 Reflective XSS와 유사하다고 볼 수 있다. 그러나 신뢰할 수 있는 사이트의 HTTP 응답에 페이로드를 포함하는 대신 DOM 또는 문서 개체 모델을 수정해 브라우저와 독립적인 공격을 실행한다는 점에서 차이가 있다. + - 공격자는 DOM XSS 공격을 통해 세션 및 개인 정보를 포함한 쿠키 데이터를 피해자의 컴퓨터에서 공격자 시스템으로 전송할 수 있다. 이 정보를 사용해 특정 웹사이트에 악의적인 요청을 보낼 수 있으며 피해자가 해당 사이트를 관리 할 수 있는 관리자 권한이 있는 경우 심각한 위협을 초래할 수도 있다. 또한 신뢰할 수 있는 웹 사이트를 모방하고 피해자가 암호를 입력하도록 속여 공격자가 해당 웹 사이트에서 피해자의 계정을 손상시키는 피싱(Phishing) 공격으로도 이어질 수 있다. + +웹 서비스 개발에 사용되는 다른 언어와 달리 자바스크립트는 클라이언트측 코드와 서버측 코드 모두 개발이 가능한 언어로, XSS 공격 예방을 위해 클라이언트와 서버 양쪽 모두를 고려해야 한다. 서버가 생성한 HTML 응답 데이터 내에 신뢰할 수 없는 데이터가 포함되거나 위험한 자바스크립트 호출을 통해 DOM을 업데이트 하는데 사용되는 입력값이 전달될 경우 XSS 공격이 발생하게 된다. + +#### 나. 안전한 코딩기법 + +외부 입력값 또는 출력값에 스크립트가 삽입되지 못하도록 문자열 치환 함수를 사용하여 `&<>*'/()` 등을 `& < > " ' / ( )`로 치환하거나 자바스크립트 라이브러리에서 제공하는 escape 기능을 사용해 문자열을 변환해야 한다. 자바스크립트에서 기본적으로 제공하는 escape() 함수는 deprecated되어 더 이상 사용을 권장하지 않고 있으며, 그 대신 encodeURI() 또는 encodeURIComponent() 함수를 사용하면 된다. HTML 태그를 허용해야 하는 게시판에서는 허용할 HTML 태그들을 화이트리스트로 만들어 해당 태그만 지원하도록 한다. + +XSS 방어 코드는 클라이언트측과 서버측에 모두 적용해야 한다. 물론 클라이언트측 코드는 공격자가 중간에 가로채 변조하거나 코드를 수정할 수 있지만 서버로 데이터가 넘어가기 전 1차적인 방어선 역할을 해줄 수 있다. 클라이언트측 코드를 조작하더라도 서버에서 사용자 입력값을 검증하면 XSS 공격을 예방할 수 있다. 마지막으로 서버로부터 가져온 데이터를 클라이언트측에서 다시 사용자에게 보여줄 때 코드가 포함된 내용일 경우에도 공격에 사용되는 문자열을 필터링해야 한다. + +#### 다. 코드예제 + +**가) 클라이언트측 VanillaJS 예제** + +클라이언트측 코드 내에 사용자가 전달한 입력값을 코드 실행의 일부분으로 사용하거나 사용자가 작성한 텍스트 내부의 스크립트 코드를 실행할 수 있는 기능이 제공될 경우 XSS 공격이 발생할 수 있다. 다음 예제는 사용자가 폼 또는 에디터로 작성한 내용을 서버에 저장하고 저장된 내용을 다시 서버로부터 받아와 DOM에 출력하는 예시를 보여 준다. 이 때, 서버로부터 받은 데이터를 검증 없이 그대로 사용할 경우 악성 스크립트가 실행될 수 있다. + +**안전하지 않은 코드** + +```html + + + + + +``` + +자바스크립트에서는 encodeURI(), encodeURIComponent() 함수를 통해 이스케이프 기능을 제공한다. 외부로부터 받은 데이터를 사용해 DOM에 변화를 주는 코드가 실행되기 전에 입력값을 이스케이프 해주면 XSS 공격을 막을 수 있다. 이스케이프 후 decodeURI() 함수를 호출해야 스크립트 실행 방지와 함께 원하는 결과를 DOM에 출력할 수 있다. + +**안전한 코드 1 (내장함수 사용)** + +```html + + + + + +``` + +encodeURIComponent 함수는 내장 함수로 사용이 쉽고 가볍다는 장점이 있지만 모든 XSS 공격 패턴에 대응할 수는 없다. 따라서 XSS 검증을 위한 별도의 필터링 함수를 구현하거나 개발자 커뮤니티에서 널리 사용되고 안정적이며 지속적으로 관리되고 있는 라이브러리를 사용해 문자열을 변환해야 한다. 아래 예시는 xss-filters 라이브러리를 활용한 필터링 사례를 보여 준다. + +**안전한 코드 2 (라이브러리 사용)** + +```html + + + + + + + + +``` + +**나) 클라이언트측 ReactJS 예제** + +ReactJS에서는 JSX(타입스크립트에서는 TSX) 확장자를 가지는 리액트 엘리먼트를 통해 코드를 처리한다. 기본적으로 React DOM은 JSX 렌더링 전에 코드 내의 모든 값을 이스케이프 처리한다. 다시 말해서 리액트 애플리케이션 내에서 명시적으로 악성 스크립트를 주입하는 것은 불가능하다. ReactJS에서 강제하는 규칙을 따르는 것만으로도 클라이언트측 XSS 공격을 방어할 수 있다. + +하지만 ReactJS는 HTML 입력값을 그대로 렌더링할 수 있는 dangerouslySetInnerHTML 함수를 제공한다. 만약 개발자가 사용자 게시글 표현 등을 위해 이 함수를 사용할 경우 XSS 공격에 노출될 수 있다. + +**안전하지 않은 코드** + +```javascript +function possibleXSS() { + return { + __html: + ' + ', + }; + } + +const App = ( ) => ( + // XSS에 취약한 함수를 사용해 HTML 코드 데이터를 렌더링 +
+); +ReactDOM.render(, document.getElementById("root")); +``` + +가급적이면 dangerouslySetInnerHTML 함수를 사용하지 않는 것이 좋겠지만 서비스 개발을 위해 부득이하게 사용이 필요한 경우 HTML 및 자바스크립트 코드를 직접 이스케이프 처리하는 컴포넌트를 별도로 개발하거나 dompurify와 같이 이스케이프 기능을 제공하는 라이브러리를 사용해 문자열 처리 후 사용해야 한다. + +**안전한 코드** + +```javascript + +... +function possibleXSS() { + return { + __html: + // dompurify 라이브러리를 사용해 입력값을 이스케이프 처리 + DOMPurify.sanitize(''), + }; +} +const App = ( ) => ( +
+); +ReactDOM.render(, document.getElementById("root")); +``` + +**다) 서버측 ExpressJS 예제** + +클라이언트측에서 사용자 입력값을 검증 및 이스케이프 처리했다고 하더라도 반드시 서버측에서도 검증 코드를 추가해야 한다. 게시판, 고객 문의와 같이 사용자로부터 다양한 형식의 데이터를 입력받아야 하는 경우 사용자가 입력한 텍스트뿐만 아니라 텍스트를 둘러싸고 있는 HTML 및 자바스크립트 코드도 함께 서버에 저장하게 된다. 이 때 사용자가 입력한 데이터를 서버측에서 검증 없이 데이터베이스에 저장할 경우 해당 게시글 또는 문의글을 열람하는 모든 사용자의 시스템에서 악성 스크립트가 실행될 수 있다. 다음은 사용자로부터 검색 대상을 전달받아 그 결과를 반환하는 취약한 예시를 보여 준다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +router.get("/vuln/search", (req, res) => { + // 사용자로부터 전달 받은 쿼리 데이터로 데이터 조회 + const results = selectFromDB(req.query.q); + if (results.length === 0) { + // 검색 결과가 발견되지 않을 경우, '요청한 값'을 찾지 못했다는 메시지를 반환하는데, + // 이 때 정상적인 질의문이 아닌 악성 스크립트가 포함된 데이터를 입력 받은 경우라면 + // 클라이언트측에서 악성 스크립트가 실행될 수 있음 + return res.send('

No results found for "' + req.query.q + '"

'); + } +... +}); +``` + +서버측에서 XSS 공격을 방어하는 방법은 클라이언트측과 동일하다. 사용자 입력값에 HTML 및 자바스크립트 코드가 포함되는 경우 XSS 공격에 사용되는 패턴을 필터링하는 별도의 함수를 구현하거나 라이브러리를 사용해 안전하게 처리한 후 데이터베이스에 저장하거나 사용자에게 다시 반환해 주어야 한다. + +**안전한 코드** + +```javascript +const express = require('express'); +const xssFilters = require("xss-filters"); +... +router.get("/patched/search", (req, res) => { + const unsafeFirstname = req.query.q; + // xss-filters 라이브러리를 사용해 사용자 입력값을 이스케이프 처리 + const safeFirstname = xssFilters.inHTMLData(unsafeFirstname); + const results = selectFromDB(safeFirstname); + + if (results.length === 0) { + res.send(util.format("

Hello %s

", safeFirstname)); + } +... +}); +``` + +#### 라. 참고자료 + +- [CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'), MITRE](https://cwe.mitre.org/data/definitions/79.html) +- [Cross Site Scripting (XSS), OWASP](https://owasp.org/www-community/attacks/xss/) +- [encodeURIComponent, mdn web docs](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) +- [The Javascript Guide: Web Application Secure Coding Practices](https://github.com/Checkmarx/JS-SCP/blob/master/dist/js-webapp-scp.pdf) +- [NodeJs-Secure Code wiki](https://securecode.wiki/docs/lang/nodejs/) + +--- + +### 5. 운영체제 명령어 삽입 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![운영체제 명령어 삽입 공격 개요](figures/javascript/os-command-injection_14.png) + +![운영체제 명령어 삽입 공격 예시](figures/javascript/os-command-injection_15.png) + +적절한 검증 절차를 거치지 않은 사용자 입력값이 운영체제 명령어의 일부 또는 전부로 구성되어 실행되는 경우 의도하지 않은 시스템 명령어가 실행돼 부적절하게 권한이 변경되거나 시스템 동작 및 운영에 악영향을 미칠 수 있다. + +명령어 라인의 파라미터나 스트림 입력 등 외부 입력을 사용해 시스템 명령어를 생성 하는 프로그램을 많이 찾아볼 수 있다. 이 경우 프로그램 외부로부터 받은 입력 문자열은 기본적으로 신뢰할 수 없기 때문에 적절한 처리를 해주지 않으면 공격으로 이어질 수 있다. + +NodeJS에서는 child_process 라이브러리를 사용해 코드 내부에서 시스템 명령어를 실행할 수 있다. 만약 시스템 명령어 실행 함수에 사용자가 입력한 값을 전달할 수 있고 그 값이 적절히 검증되지 않을 경우 패스워드 파일 조회, 시스템 프로세스 강제 종료 등 의도하지 않은 악의적인 명령어 실행으로 이어질 수 있다. + +#### 나. 안전한 코딩기법 + +외부 입력값 내에 시스템 명령어를 포함하는 경우 `|, ;, &, :, >, <, \`(backtick), \, !` 과 같이 멀티라인 및 리다이렉트 문자 등을 필터링 하고 명령을 수행할 파일명과 옵션을 제한해 인자로만 사용될 수 있도록 해야 한다. 외부 입력에 따라 명령어를 생성하거나 선택이 필요한 경우에는 명령어 생성에 필요한 값들을 미리 지정해 놓고 사용해야 한다. + +#### 다. 코드예제 + +다음 예제는 사용자에게 특정 경로의 파일 목록을 제공하는 프로그램 예시를 보여 준다. 만약 경로값 안에 파이프라인 명령어가 포함될 경우 악의적인 명령어가 실행될 수 있다 (ex: `/vuln?path=/usr/app | cat /etc/passwd`). + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const child_process = require("child_process"); +router.get("/vuln", (req, res) => { + // 사용자가 입력한 명령어 인자값을 검증 없이 사용해 의도치 않은 추가 명령어 실행 가능 + child_process.exec("ls -l " + req.query.path, function (err, data) { + return res.send(data); + }); +}); +``` + +임의의 명령어 실행을 예방하려면 사용자가 입력한 값의 패턴을 검사해 허가되지 않은 패턴이 포함될 경우 기능을 실행하지 않거나 사용자 입력값 전체를 실행하고자 하는 명령어(예를 들어, 위 코드에서는 /bin/ls)의 인자로 간주해 사용하는 방법이 있다. + +**안전한 코드** + +```javascript +const express = require('express'); +const child_process = require("child_process"); +router.get("/patched", (req, res) => { + const inputPath = req.query.path; + const regPath = /^(\/[\w^]+)+\/?$/; + // 첫 번째 방법, 사용자 입력값 필터링 - 리눅스 경로 지정에 필요한 문자만 허용 + if (!inputPath.match(regPath)) { + return res.send('not valid path'); + } + // 두 번째 방법, 사용자 입력값이 명령어의 인자로만 사용되도록 하는 함수 사용 + child_process.execFile( + "/bin/ls", ["-l", inputPath], + function (err, data) { + if (err) { + return res.send('not valid path'); + } else { + return res.send(data); + } + } + ); +}); +``` + +#### 라. 참고자료 + +- [CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection'), MITRE](https://cwe.mitre.org/data/definitions/78.html) +- [Command Injection, OWASP](https://owasp.org/www-community/attacks/Command_Injection) +- [OS Command Injection Defense Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html) +- [NodeJs-Secure Code wiki](https://securecode.wiki/docs/lang/nodejs/) +- [Child process, NodeJS](https://nodejs.org/api/child_process.html) + +--- + +### 6. 위험한 형식 파일 업로드 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![위험한 형식 파일 업로드 공격 개요](figures/javascript/file-upload_16.png) + +![위험한 형식 파일 업로드 공격 예시](figures/javascript/file-upload_17.png) + +서버 측에서 실행 가능한 스크립트 파일(asp, jsp, php, sh 파일 등)이 업로드 가능하고 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우 시스템 내부 명령어를 실행하거나 외부와 연결해 시스템을 제어할 수 있는 보안약점이다. 서버 사이드 언어(ASP, JSP, PHP)와 달리 NodeJS에서는 파일 업로드가 성공했다고 하더라도 설정파일 수정 및 반영과 같이 파일 실행을 위해 거쳐야 할 추가 작업들로 인해 웹쉘 공격이 그리 간단하지 않다. 가능성이 낮을 뿐 NodeJS를 기반으로 하는 서버 또한 업로드 공격에 취약하므로 이에 대비가 필요하다. + +#### 나. 안전한 코딩기법 + +파일 업로드 공격을 방지하기 위해서 특정 파일 유형만 허용하도록 화이트리스트 방식으로 파일 유형을 제한해야 한다. 이때 파일의 확장자 및 업로드 된 파일의 Content-Type도 함께 확인해야 한다. 또한 파일 크기 및 파일 개수를 제한하여 시스템 자원 고갈 등으로 서비스 거부 공격이 발생하지 않도록 제한해야 한다. 업로드 된 파일을 웹 루트 폴더 외부에 저장해 공격자가 URL을 통해 파일을 실행할 수 없도록 해야 하며, 가능하면 업로드 된 파일의 이름은 공격자가 추측할 수 없는 무작위한 이름으로 변경 후 저장하는 것이 안전하다. 또한 업로드 된 파일을 저장할 경우에는 최소 권한만 부여하는 것이 안전하고 실행 여부를 확인하여 실행 권한을 삭제해야 한다. + +#### 다. 코드예제 + +업로드 대상 파일 개수, 크기, 확장자 등의 유효성 검사를 하지 않고 파일 시스템에 그대로 저장할 경우 공격자에 의해 악성코드, 쉘코드 등 위험한 형식의 파일이 시스템에 업로드 될 수 있다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +router.post("/vuln", (req, res) => { + const file = req.files.products; + const fileName = file.name; + + // 업로드 한 파일 타입 검증 부재로 악성 스크립트 파일 업로드 가능 + file.mv("/usr/app/temp/" + fileName, (err) => { + if (err) return res.send(err); + res.send("upload success"); + }); +}); +``` + +아래 코드는 업로드 하는 파일의 개수, 크기, 파일 확장자 등을 검사해 업로드를 제한하고 있다. 파일 타입 확인은 MIME 타입을 확인하는 과정으로 파일 이름에서 확장자만 검사할 경우 변조된 확장자를 통해 업로드 제한을 회피할 수 있어 파일 자체의 시그니처를 확인하는 과정을 보여 준다. + +**안전한 코드** + +```javascript +const express = require('express'); +router.post("/patched", (req, res) => { + const allowedMimeTypes = ["image/png", "image/jpeg"]; + const allowedSize = 5242880; + const file = req.files.products; + const fileName = file.name; + // 업로드 한 파일 타입 검증을 통해 악성 스크립트 파일 업로드 방지 + if (allowedMimeTypes.indexOf(file.mimetype) < 0) { + res.send("file type not allowed"); + } else { + file.mv("/usr/app/temp/" + fileName, (err) => { + if (err) return res.send(err); + res.send("upload success"); + }); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-434: Unrestricted Upload of File with Dangerous Type, MITRE](https://cwe.mitre.org/data/definitions/434.html) +- [Unrestricted File Upload, OWASP](https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload) +- [express-fileupload, npm](https://www.npmjs.com/package/express-fileupload) +- [NodeJs-Secure Code wiki](https://securecode.wiki/docs/lang/nodejs/) +- [The Javascript Guide: Web Application Secure Coding Practices](https://github.com/Checkmarx/JS-SCP/blob/master/dist/js-webapp-scp.pdf) + +--- + +### 7. 신뢰되지 않은 URL주소로 자동접속 연결 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![신뢰되지 않은 URL 자동접속 연결 개요](figures/javascript/open-redirect_18.png) + +![신뢰되지 않은 URL 자동접속 연결 예시](figures/javascript/open-redirect_19.png) + +사용자가 입력하는 값을 외부 사이트 주소로 사용해 해당 사이트로 자동 접속하는 서버 프로그램은 피싱(Phishing) 공격에 노출되는 취약점을 가진다. 클라이언트에서 전송된 URL 주소로 연결하기 때문에 안전하다고 생각할 수 있으나 공격자는 정상적인 폼 요청을 변조해 사용자가 위험한 URL로 접속할 수 있도록 공격할 수 있다. + +#### 나. 안전한 코딩기법 + +리다이렉션을 허용하는 모든 URL을 서버 측 화이트리스트로 관리하고 사용자 입력값을 리다이렉트 할 URL이 존재하는지 검증해야 한다. + +만약 사용자 입력값이 화이트리스트로 관리가 불가능하고 리다이렉션 URL의 인자 값으로 사용되어야만 하는 경우는 모든 리다이렉션에서 프로토콜과 host 정보가 들어가지 않는 상대 URL(relative URL)을 사용 및 검증해야 한다. 또는 절대 URL(absolute URL)을 사용할 경우 리다이렉션을 실행하기 전에 사용자 입력 URL이 `https://myhompage.com/` 처럼 정상 서비스 중인 URL로 시작하는지 확인해야 한다. + +#### 다. 코드예제 + +ExpressJS에서는 redirect() 함수를 사용해 사용자 요청을 다른 페이지로 리다이렉트할 수 있다. 다음은 사용자로부터 입력받은 url 주소를 검증 없이 redirect 함수의 인자로 사용해 의도하지 않은 사이트로 접근하도록 하거나 피싱(Phishing)공격에 노출되는 예시를 보여 준다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +router.get("/vuln", (req, res) => { + const url = req.query.url; + // 사용자가 전달한 URL 주소를 검증 없이 그대로 리다이렉트 처리 + res.redirect(url); +}); +``` + +다음은 안전한 코드 예제로 사용자로부터 주소를 입력받아 리다이렉트하고 있는 코드로 위험한 도메인이 포함될 수 있기 때문에 화이트리스트로 사전에 정의된 안전한 웹사이트에 한하여 리다이렉트 할 수 있도록 한다. + +**안전한 코드** + +```javascript +const express = require('express'); +router.get("/patched", (req, res) => { + const whitelist = ["http://safe-site.com", "https://www.example.com"]; + const url = req.query.url; + + // 화이트리스트에 포함된 주소가 아니라면 리다이렉트 없이 에러 반환 + if (whitelist.indexOf(url) < 0) { + res.send("wrong url"); + } else { + res.redirect(url); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-601: URL Redirection to Untrusted Site ('Open Redirect'), MITRE](https://cwe.mitre.org/data/definitions/601.html) +- [Unvalidated Redirects and Forwards Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) +- [JavaScript Secure Coding Standard - Ministry of Transport and Communications](https://compliance.qcert.org/sites/default/files/library/2018-10/MOTC-CIPD_JavaScript_Coding_Standard(US).pdf) +- [express Documentation - StrongLoop, IBM](https://devdocs.io/express/index#res.redirect) + +--- + +### 8. 부적절한 XML 외부 개체 참조 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![XML 외부 개체 참조 공격 개요](figures/javascript/xxe_20.png) + +![XML 외부 개체 참조 공격 예시](figures/javascript/xxe_21.png) + +XML 문서에는 DTD(Document Type Definition)를 포함할 수 있으며 DTD는 XML 엔티티(entity)를 정의한다. 부적절한 XML 외부개체 참조 보안약점은 서버에서 XML 외부 엔티티를 처리할 수 있도록 설정된 경우에 발생할 수 있다. 취약한 XML parser가 외부값을 참조하는 XML을 처리할 때 공격자가 삽입한 공격 구문이 동작되어 서버 파일 접근, 불필요한 자원 사용, 인증 우회, 정보 노출 등이 발생할 수 있다. + +NodeJS에서는 내장 XML 파싱 엔진을 지원하지 않으며, 별도의 라이브러리를 사용해야 한다. 어떠한 라이브러리를 사용해도 무방하지만 반드시 외부 엔티티 파싱 기능을 비활성화 하는 옵션을 설정해 주어야 한다. + +#### 나. 안전한 코딩기법 + +로컬 정적 DTD를 사용하도록 설정하고 외부에서 전송된 XML 문서에 포함된 DTD를 완전하게 비활성화해야 한다. 비활성화를 할 수 없는 경우에는 외부 엔티티 및 외부 문서 유형 선언을 각 파서에 맞는 고유한 방식으로 비활성화 한다. 외부 라이브러리를 사용할 경우 기본적으로 외부 엔티티에 대한 구문 분석 기능을 제공하는지 확인하고, 제공이 되는 경우 해당 기능을 비활성화 할 수 있는 방법을 확인해 외부 엔티티 구문 분석 기능을 비활성화 한다. + +#### 다. 코드예제 + +다음 예제는 XML 소스를 읽어와 분석하는 코드를 보여 준다. 공격자는 아래와 같이 XML 외부 엔티티를 참조하는 xxe.xml 데이터를 전송하고 서버에서 해당 데이터 파싱 시 /etc/passwd 파일 내용이 사용자에게 전달될 수 있다. + +```xml + + + +]> +&xxe1; +``` + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const libxmljs = require("libxmljs"); +router.post("/vuln", (req, res) => { + if (req.files.products && req.files.products.mimetype == "application/xml") { + const products = libxmljs.parseXmlString( + req.files.products.data.toString("utf8"), + // 외부 엔티티 파싱 허용 설정(미설정 시 기본값은 false) + { noent: true } + ); + return res.send(products.get("//foo").text()); + } + return res.send("fail"); +}); +``` + +libxmljs 라이브러리에서는 기본적으로 외부 엔티티 파싱 기능이 비활성화 되어 있지만 명시적으로 비활성 선언을 해주는 것이 좋다. + +**안전한 코드** + +```javascript +const express = require('express'); +const libxmljs = require("libxmljs"); +router.post("/patched", (req, res) => { + if (req.files.products && req.files.products.mimetype == "application/xml") { + const products = libxmljs.parseXmlString( + req.files.products.data.toString("utf8"), + // 외부 엔티티 파싱을 허용하지 않도록 설정 + // 미설정 시 기본값은 false이지만, 명시적으로 선언을 해 주는 것이 좋음 + { noent: false } + ); + return res.send(products.get("//foo").text()); + } + return res.send("fail"); +}); +``` + +#### 라. 참고자료 + +- [CWE-611: Improper Restriction of XML External Entity Reference, MITRE](https://cwe.mitre.org/data/definitions/611.html) +- [XML External Entity (XXE) Processing, OWASP](https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Processing) +- [XML External Entity Prevention Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html) +- [JavaScript Secure Coding Standard - Ministry of Transport and Communications](https://compliance.qcert.org/sites/default/files/library/2018-10/MOTC-CIPD_JavaScript_Coding_Standard(US).pdf) +- [NodeJs-Secure Code wiki](https://securecode.wiki/docs/lang/nodejs/) +- [Sonar Rules](https://rules.sonarsource.com/javascript/RSPEC-2755) + +--- + +### 9. XML 삽입 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +검증되지 않은 외부 입력값이 XQuery 또는 XPath 쿼리문을 생성하는 문자열로 사용되어 공격자가 쿼리문의 구조를 임의로 변경하고 임의의 쿼리를 실행해 허가되지 않은 데이터를 열람하거나 인증절차를 우회할 수 있는 보안약점이다. + +#### 나. 안전한 코딩기법 + +XQuery 또는 XPath 쿼리에 사용되는 외부 입력 데이터에 대하여 특수문자 및 쿼리 예약어를 필터링 하고 인자화된 쿼리문을 지원하는 XQuery를 사용해야 한다. + +#### 다. 코드예제 + +다음은 자바스크립트 xpath 패키지를 사용해 XML 데이터를 처리하는 예시를 보여 준다. 사용자 이름과 패스워드가 XML 내의 값과 일치할 경우 사용자 홈 디렉터리를 반환하는 예시로, 인자화된 쿼리문을 사용하지 않고 XPath 쿼리문을 생성하고 있어 공격자가 요청문을 조작해 패스워드 검증 로직을 우회할 수 있다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const xpath = require('xpath'); +const dom = require('xmldom').DOMParser; +const xml = ` + + john + abracadabra + /home/john + + + cbc + 1mgr8 + /home/cbc + + `; +router.get("/vuln", (req, res) => { + const userName = req.query.userName; + const userPass = req.query.userPass; + const doc = new dom().parseFromString(xml); + // 조작된 입력값(/vuln?userName=john' or ''='&userPass="' or ''='")을 통해 + // 패스워드 검사 로직을 우회할 수 있음 + const badXPathExpr = "//users/user[login/text()='" + userName + + "' and password/text() = '" + userPass + "']/home_dir/text()"; + const selected = xpath.select(badXPathExpr, doc); + try { + const userPath = selected[0].toString(); + return res.send(`userPath = ${userPath}`); + } catch { + return res.send('not found'); + } +}); +``` + +xpath에서는 parse 및 select 함수를 사용해 인자화된 쿼리를 생성하고 쿼리문에 필요한 변수값을 전달할 수 있다. 만약 xpath가 아닌 다른 패키지를 사용할 경우 반드시 인자화된 쿼리를 지원하는지 확인해야 한다. 다음은 인자화된 쿼리를 통해 사용자가 조작한 입력값이 실행되지 않도록 하는 안전한 예시를 보여 준다. + +**안전한 코드** + +```javascript +const express = require('express'); +const xpath = require('xpath'); +const dom = require('xmldom').DOMParser; +const xml = ` + ... + `; + +router.get("/patched", (req, res) => { + const userName = req.query.userName; + const userPass = req.query.userPass; + const doc = new dom().parseFromString(xml); + // 인자화된 쿼리 생성 + const goodXPathExpr = xpath.parse("//users/user[login/text()=$userName and password/text() + =$userPass]/home_dir/text()"); + // 쿼리문에 변수값 전달 및 XML 조회 + const selected = goodXPathExpr.select({ + node: doc, + variables: { userName: userName, userPass: userPass } + }); + try { + const userPath = selected[0].toString(); + return res.send(`userPath = ${userPath}`); + } catch { + return res.send('not found'); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-643: Improper Neutralization of Data within XPath Expressions ('XPath Injection'), MITRE](https://cwe.mitre.org/data/definitions/643.html) +- [XPATH Injection, OWASP](https://owasp.org/www-community/attacks/XPATH_Injection) + +--- + +### 10. LDAP 삽입 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![LDAP 삽입 공격 개요](figures/javascript/ldap-injection_22.png) + +외부 입력값을 적절한 처리 없이 LDAP 쿼리문이나 결과의 일부로 사용하는 경우, LDAP 쿼리문이 실행될 때 공격자는 LDAP 쿼리문의 내용을 마음대로 변경할 수 있다. 이로 인해 프로세스가 명령을 실행한 컴포넌트와 동일한 권한(Permission)을 가지고 동작하게 된다. 자바스크립트에서는 LDAP 데이터 처리를 위한 다양한 패키지가 존재하며, 그 중 ldapjs가 가장 사용자들이 선호하는 패키지로 알려져 있다. + +#### 나. 안전한 코딩기법 + +다른 삽입 공격들과 마찬가지로 LDAP 삽입에 대한 기본적인 방어 방법은 적절한 유효성 검사를 적용하는 것이다. + +- 올바른 인코딩(Encoding) 함수를 사용해 모든 변수 이스케이프 처리 +- 화이트리스트 방식의 입력값 유효성 검사 +- 사용자 패스워드와 같은 민감한 정보가 포함된 필드 인덱싱 +- LDAP 바인딩 계정에 할당된 권한 최소화 + +#### 다. 코드예제 + +사용자의 입력을 그대로 LDAP 질의문에 사용하고 있으며 이 경우 권한 상승 등의 공격에 노출될 수 있다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const ldap = require('ldapjs'); +const config = { + url: 'ldap://ldap.forumsys.com', + base: 'dc=example,dc=com', + dn: 'cn=read-only-admin,dc=example,dc=com', + secret: 'd0accf0ac0dfb0d0fd...', +}; +async function searchLDAP (search) { +... +} +router.get("/vuln", async (req, res) => { + // 사용자의 입력을 그대로 LDAP 질의문으로 사용해 권한 상승 등의 공격에 노출 + const search = req.query.search; + const result = await searchLDAP(search); + return res.send(result); +}); +``` + +사용자의 입력 중 LDAP 질의문에 사용될 변수를 이스케이프 하여 질의문 실행 시 공격에 노출되는 것을 예방할 수 있다. ldapjs 패키지에서는 사용자 입력값을 이스케이핑 할 수 있는 parseFilter 함수를 제공한다. + +**안전한 코드** + +```javascript +const express = require('express'); +const ldap = require('ldapjs'); +const parseFilter = require('ldapjs').parseFilter; +const config = { + url: 'ldap://ldap.forumsys.com', + base: 'dc=example,dc=com', + dn: 'cn=read-only-admin,dc=example,dc=com', + secret: 'd0accf0ac0dfb0d0fd...', +}; +async function searchLDAP (search) { +... +} +router.get("/patched", async (req, res) => { + let search; + // 사용자의 입력에 필터링을 적용해 공격에 사용될 수 있는 문자 발견 시 + // 사용자에게 잘못된 요청값임을 알리고, 질의문을 요청하지 않음 + try { + search = parseFilter(req.query.search); + } catch { + return res.send('잘못된 요청값입니다.'); + } + const result = await searchLDAP(search); + return res.send(result); +}); +``` + +**참고: 자바스크립트 기반 LDAP 데이터 처리 함수** + +```javascript +// (참고) ldapjs 패키지를 사용해 ldap 데이터를 처리하는 코드 예시로, 앞서 제시한 두 코드에서 +// 생략된 searchLDAP 함수의 전체 코드 +const ldap = require('ldapjs'); +const config = { + url: 'ldap://ldap.forumsys.com', + base: 'dc=example,dc=com', + dn: 'cn=read-only-admin,dc=example,dc=com', + password: 'password', +}; +async function searchLDAP (search) { + const opts = { + filter: `(&(objectClass=${search}))`, + attributes: ['sn', 'cn', 'mail', 'telephonenumber', 'uid'], + scope: 'sub', + }; + const users = []; + const client = ldap.createClient({ url: config.url }); + return new Promise((resolve, reject) => { + client.bind(config.dn, config.password, (err) => { + if (err) { + console.log('LDAP bind error - ', err); + } else { + client.search(config.base, opts, (err, res) => { + res.on('searchEntry', (entry) => { + users.push(entry.object); + }); + ... + res.on('end', (result) => { + console.log('status: ' + result.status); + resolve(users); + }); + }); + } + }); + }); +} +``` + +#### 라. 참고자료 + +- [CWE-90: Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection'), MITRE](https://cwe.mitre.org/data/definitions/90.html) +- [LDAP Injection Prevention Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/LDAP_Injection_Prevention_Cheat_Sheet.html) +- [ldapjs Filters API](http://ldapjs.org/filters.html) + +--- + +### 11. 크로스사이트 요청 위조(CSRF) + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![CSRF 공격 개요](figures/javascript/csrf_23.png) + +![CSRF 공격 흐름](figures/javascript/csrf_24.png) + +특정 웹사이트에 대해 사용자가 인지하지 못한 상황에서 사용자의 의도와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 요청하게 하는 공격을 말한다. 웹 응용프로그램이 사용자로부터 받은 요청이 해당 사용자가 의도한 대로 작성되고 전송된 것인지 확인하지 않는 경우 발생 가능하다. 특히 사용자가 관리자 권한을 가지는 경우 사용자 권한관리, 게시물 삭제, 사용자 등록 등 관리자 권한으로만 수행 가능한 기능을 공격자의 의도대로 실행시킬 수 있게 된다. 공격자는 사용자가 인증한 세션이 특정 동작을 수행해도 계속 유지되어 정상적인 요청과 비정상적인 요청을 구분하지 못하는 점을 악용한다. + +자바스크립트의 대표적인 웹 애플리케이션 프레임워크인 ExpressJS에서는 기본적으로 CSRF 토큰 기능을 지원하지 않으며, csurf와 같은 별도의 패키지를 사용해 CSRF 토큰을 적용할 수 있다. csurf는 많은 시큐어 코딩 문서 및 가이드에서 CSRF 공격 대응에 사용 가능한 것으로 알려져 있다. 초기에는 안전한 것으로 알려졌으나 해당 패키지 적용만으로 대응이 어려운 다양한 유형의 보안 취약점 발견 및 구현 자체의 제약(취약한 해쉬함수 사용)으로 인해 공식 리파지토리에서는 더 이상 유지되지 않은 deprecated 패키지로 공지되어 있다. + +비록 패키지 자체만으로 완전한 CSRF 공격 대응이 불가능하다는 단점이 있지만, 이를 대체할 수 있는 것으로 검증된 패키지가 아직까지 등장하지 않았고 추가 옵션 적용을 통해 보안성을 강화할 수 있다. 토큰 값 세션 저장, 토큰 헤더 키 추가와 같은 방법을 사용 가능하다. + +#### 나. 안전한 코딩기법 + +해당 요청이 정상적인 사용자가 절차에 따라 요청한 것인지 구분하기 위해 세션별로 CSRF 토큰을 생성하여 세션에 저장하고 사용자가 작업 페이지를 요청할 때마다 hidden 값으로 클라이언트에게 토큰을 전달한 뒤, 해당 클라이언트의 데이터 처리 요청 시 전달되는 CSRF 토큰값을 체크하여 요청의 유효성을 검사하도록 한다. + +#### 다. 코드예제 + +템플릿 엔진을 사용해 클라이언트측 코드를 렌더링 할 경우, 서버로 데이터를 전송하거나 기능을 호출하는 부분에 csrf 토큰을 포함하지 않을 경우 CSRF 공격에 취약하다. + +**안전하지 않은 코드** (클라이언트) + +```html + +... + +
+ +
+ Your Profile: + +

+ +

+ +
+
+ + +``` + +다음은 CSRF 토큰 처리가 없는 서버측 라우터 예시를 보여 준다. 만약 공격자가 사용자 업데이트 페이지를 모방해 사용자가 해당 페이지를 통해 서버로 업데이트 요청을 보내도록 할 경우 서버는 정상적인 세션을 가지는 클라이언트의 요청을 아무런 검증 없이 실행하게 된다. + +**안전하지 않은 코드** (서버) + +```javascript +const express = require('express'); +router.post("/api/vuln", (req, res) => { + const userName = req.body.username; + const userEmail = req.body.useremail; + // 사용자 업데이트 요청이 정상 사용자로부터 온 것이라고 간주하고, + // 사용자로부터 받은 값을 그대로 내부 함수에 전달 + if (update_user(userName, userEmail)) { + return res.send('update completed'); + } else { + return res.send('update error'); + } +}); +``` + +다음은 csurf 패키지를 사용해 CSRF 공격에 대응하는 예시를 보여 준다. 앞서 설명한 것처럼, csurf를 포함해 어떠한 패키지를 사용하더라도 다양한 변종 CSRF 패턴을 모두 방어하는 것은 불가능하다. 다만 다음 예시에서 보는 것처럼 csurf 기능의 한계를 인지한 상태에서 세션에 정보 저장, 토큰 접두어 사용 등의 부가적인 보안 대책을 적용해 방어 수준을 높일 수 있다. + +**안전한 코드** (서버) + +```javascript +const csrf = require('csurf'); +const express = require('express'); +const session = require("express-session"); +const app = express(); +// 토큰을 쿠키가 아닌 세션에 저장 +app.use(session({ + secret: process.env.COOKIE_SECRET, + cookie: { path: '/', secure: true, httpOnly: true, sameSite: 'strict' }, + saveUninitialized: false, + resave: false +})); +// CSRF 토큰 이름 앞에 __Host- 접두어 추가 +const csrfProtection = csrf({ + key: '__Host-token', +}); +// 클라이언트측 프레임워크(ReactJS)를 위한 토큰 값 제공 +router.get("/getCSRFToken", csrfProtection, (req, res) => { + res.json({ csrfToken: req.csrfToken() }); +}); +// 템플릿 페이지를위한 토큰 값 제공 +router.get("/page", csrfProtection, (req, res) => { + res.render('csrf', { csrfToken: req.csrfToken() }); +}); +// 라우터 데이터 처리 전 클라이언트의 csrf 토큰을 검사 +router.post("/api/patched", csrfProtection, (req, res) => { + const userName = req.body.username; + const userEmail = req.body.useremail; + if (update_user(userName, userEmail)) { + return res.send('update completed'); + } else { + return res.send('update error'); + } +}); +``` + +클라이언트측 코드 내의 form action 또는 axios와 같은 서버 기능 호출 부분에도 csrf 토큰을 추가해야 한다. 템플릿 엔진에서 폼 형태로 데이터를 전달하는 경우 hidden 필드에 토큰 값을 할당하면 된다. + +**안전한 코드** (템플릿 클라이언트) + +```html +... +
+ + +
+ Your Profile: + +

+ +

+ +
+
+... +``` + +클라이언트측에서 렌더링을 처리하는 ReactJS의 경우 서버 기능 호출 전 서버로부터 토큰을 받아와 요청 헤더 내에 삽입해야 한다. + +**안전한 코드** (ReactJS 클라이언트) + +```javascript +const App = () => { + const getData = async () => { + // 서버에 기능 호출 전 먼저 CSRF 토큰을 받아와 헤더에 저장 + const response = await axios.get('getCSRFToken'); + axios.defaults.headers.post['X-CSRF-Token'] = response.data.csrfToken; + // CSRF 토큰이 설정된 상태에서 서버 기능 호출 + const res = await axios.post('api/patched', { + username: 'hello_user', + useremail: 'test@email.com', + }); + document.write(res.data); + }; + React.useEffect(() => { getData(); }, []); + return
react-test
; +}; +ReactDOM.render(, document.getElementById("root")); +``` + +#### 라. 참고자료 + +- [CWE-352: Cross-Site Request Forgery (CSRF), MITRE](https://cwe.mitre.org/data/definitions/352.html) +- [Cross Site Request Forgery (CSRF), OWASP](https://owasp.org/www-community/attacks/csrf) +- [Cross-Site Request Forgery Prevention Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html) +- [NodeJS Secure Code Wiki - Payatu](https://securecode.wiki/docs/lang/nodejs) +- [Disabling CSR protections is security-sensitive](https://rules.sonarsource.com/javascript/RSPEC-4502) + +--- + +### 12. 서버사이드 요청 위조 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![서버사이드 요청 위조(SSRF) 공격 개요](figures/javascript/ssrf_25.png) + +![서버사이드 요청 위조(SSRF) 공격 예시](figures/javascript/ssrf_26.png) + +적절한 검증 절차를 거치지 않은 사용자 입력값을 내부 서버간의 요청에 사용해 악의적인 행위가 발생할 수 있는 보안약점이다. 외부에 노출된 웹 서버가 취약한 애플리케이션을 포함하는 경우 공격자는 URL 또는 요청문을 위조해 접근통제를 우회하는 방식으로 비정상적인 동작을 유도하거나 신뢰된 네트워크에 있는 데이터를 획득할 수 있다. + +#### 나. 안전한 코딩기법 + +식별 가능한 범위 내에서 사용자의 입력값을 다른 시스템의 서비스 호출에 사용하는 경우 사용자의 입력값을 화이트리스트 방식으로 필터링한다. + +부득이하게 사용자가 지정하는 무작위의 URL을 받아들여야 하는 경우라면 내부 URL을 블랙리스트로 지정하여 필터링 한다. 또한 동일한 내부 네트워크에 있더라도 기기 인증, 접근권한을 확인하여 요청이 이루어질 수 있도록 한다. + +#### 다. 코드예제 + +**참고 : 삽입 코드의 예** + +| 설명 | 삽입 코드의 예 | +|------|---------------| +| 내부망 중요 정보 획득 | `http://sample_site.com/connect?url=http://192.168.0.45/member/list.json` | +| 외부 접근 차단된 admin 페이지 접근 | `http://sample_site.com/connect?url=http://192.168.0.45/admin` | +| 도메인 체크를 우회하여 중요 정보 획득 | `http://sample_site.com/connect?url=http://sample_site.com:x@192.168.0.45/member/list.json` | +| 단축 URL을 이용한 Filter 우회 | `http://sample_site.com/connect?url=http://bit.ly/sdjk3kjhkl3` | +| 도메인을 사설IP로 설정해 중요정보 획득 | `http://sample_site.com/connect?url=http://192.168.0.45/member/list.json` | +| 서버 내 파일 열람 | `http://sample_site.com/connect?url=file:///etc/passwd` | + +다음 예제는 안전하지 않은 코드를 보여 준다. 사용자로부터 입력된 URL 주소를 검증 없이 사용하면 의도하지 않은 다른 서버의 자원에 접근할 수 있게 된다. + +**안전하지 않은 코드** + +```javascript +const request = require('request'); +const express = require('express'); +router.get("/vuln", async (req, res) => { + const url = req.query.url; + // 사용자가 입력한 주소를 검증하지 않고 HTTP 요청을 보낸 후 + // 그 응답을 그대로 사용자에게 전달 + await request(url, (err, response) => { + const resData = response.body; + return res.send(resData); + }); +}); +``` + +다음과 같이 안전한 코드를 작성하면 사전에 정의된 서버 목록에서 정의하고 매칭되는 URL만 사용할 수 있으므로 URL 값을 임의로 조작할 수 없다. + +**안전한 코드** + +```javascript +const request = require('request'); +const express = require('express'); +router.get("/patched", async (req, res) => { + const url = req.query.url; + const whiteList = [ 'www.example.com', 'www.safe.com']; + + // 사용자가 입력한 URL을 화이트리스트로 검증한 후 그 결과를 반환하여 + // 검증되지 않은 주소로 요청을 보내지 않도록 제한 + if (whiteList.includes(url)) { + await request(url, (err, response) => { + const resData = response.body; + return res.send(resData); + }); + } else { + return res.send('잘못된 요청입니다'); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-918: Server-Side Request Forgery (SSRF), MITRE](https://cwe.mitre.org/data/definitions/918.html) +- [Server Side Request Forgery, OWASP](https://owasp.org/www-community/attacks/Server_Side_Request_Forgery) +- [Server-Side Request Forgery Prevention Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html) + +--- + +### 13. 보안기능 결정에 사용되는 부적절한 입력값 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![부적절한 입력값에 의한 보안기능 결정 개요](figures/javascript/untrusted-input_27.png) + +![부적절한 입력값에 의한 보안기능 결정 예시](figures/javascript/untrusted-input_28.png) + +응용 프로그램이 외부 입력값에 대한 신뢰를 전제로 보호 메커니즘을 사용하는 경우 공격자가 입력값을 조작할 수 있다면 보호 메커니즘(인증, 인가 등)을 우회할 수 있게 된다. + +흔히 쿠키, 환경변수 또는 히든필드와 같은 입력값이 조작될 수 없다고 가정하지만 공격자는 다양한 방법을 통해 이러한 입력값들을 변경할 수 있고 조작된 내용은 탐지되지 않을 수 있다. 인증이나 인가와 같은 보안 결정이 이런 입력값(쿠키, 환경변수, 히든필드 등)에 기반을 두어 수행되는 경우 공격자는 입력값을 조작해 응용프로그램의 보안을 우회할 수 있다. 따라서 인증, 인가 등과 같은 보안기능 결정 과정에서 공격자가 데이터를 임의로 변경할 수 없도록 충분한 암호화, 무결성 체크를 수행하고 이와 같은 메커니즘이 없는 경우엔 외부 사용자에 의한 입력값을 신뢰해서는 안 된다. + +#### 나. 안전한 코딩기법 + +상태 정보나 민감한 데이터 특히 사용자 세션 정보와 같은 중요 정보는 서버에 저장하고 보안확인 절차도 서버에서 실행한다. 또한, 인증 절차가 여러 단계인 경우 각 단계의 인증 절차가 진행될 때마다 서버에서는 각 단계별 인증값이 변조되지 않았는지 검증하여야 한다. + +이와 같이 보안설계 관점에서 신뢰할 수 없는 입력값이 응용 프로그램 내부로 들어올 수 있는 지점을 검토하고, 민감한 보안 기능 결정에 사용되는 입력값을 식별해 입력값에 대한 의존성을 없애는 구조로 변경 가능한지 분석한다. + +#### 다. 코드예제 + +다음은 안전하지 않은 코드로 쿠키에 저장된 권한 등급을 가져와 관리자인지 확인 후에 사용자의 패스워드를 초기화 하고 메일을 보내는 예제다. 쿠키에서 등급을 가져와 관리자 여부를 확인한다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +router.get("/admin", (req, res) => { + // 쿠키에서 권한 정보를 가져옴 + const role = req.cookies.role; + if (role === "admin") { + // 쿠키에서 가져온 권한 정보로 관리자 페이지 접속 처리 + return res.render('admin'. { title: '관리자 페이지' } )); + } else { + return res.send("사용 권한이 없습니다."); + } +}); +``` + +중요 기능 수행을 결정하는 데이터는 위변조 가능성이 높은 쿠키보다 세션에 저장하도록 한다. + +**안전한 코드** + +```javascript +const express = require('express'); +const session = require("express-session"); +app.use(session({ + secret: 'test', + resave: true, + saveUninitialized: true, + store: new MemoryStore({checkPeriod: 60 * 60 * 1000}) +})); +router.get("/patched", (req, res) => { + // 세션에서 권한 정보를 가져옴 + const role = req.session.role; + if (role === "admin") { + // 세션에서 가져온 권한 정보로 관리자 페이지 접속 처리 + return res.render('admin'. { title: '관리자 페이지' } )); + } else { + return res.send("사용 권한이 없습니다."); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-807: Reliance on Untrusted Inputs in a Security Decision, MITRE](https://cwe.mitre.org/data/definitions/807.html) +- [express-session, npm](https://www.npmjs.com/package/express-session) + +--- + +## 제2절 보안기능 + +보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점에는 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 있다. + +### 1. 적절한 인증 없는 중요 기능 허용 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![적절한 인증 없는 중요 기능 허용 개요](figures/javascript/missing-auth_29.png) + +서버측에서는 NodeJS에서 제공되는 기본 기능을 사용해 인증 기능을 구현할 수도 있으며 ExpressJS나 nest.js와 같은 대표적인 서버 프레임워크에서 제공하는 기능을 사용하는 방법도 있다. 클라이언트측에서도 다양한 라이브러리를 사용해 인증 기능을 구현할 수 있지만 궁극적으로는 서버측에서 안전한 인증이 지원되지 않으면 보안 문제가 발생할 수 있다. + +#### 나. 안전한 코딩기법 + +클라이언트의 보안 검사를 우회하여 서버에 접근하지 못하도록 설계하고 중요한 정보가 있는 페이지는 재인증을 적용한다. 또한 안전하다고 검증된 라이브러리나 프레임워크를 사용해야 한다. + +#### 다. 코드예제 + +다음은 패스워드 수정 시 수정을 요청한 패스워드와 DB에 저장된 사용자 패스워드 일치 여부를 확인하지 않고 처리하고 있으며 패스워드의 재확인 절차도 생략되어 취약한 코드 예시를 보여 준다. + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const crypto = require("crypto"); +router.post("/vuln", (req, res) => { + const newPassword = req.body.newPassword; + const user = req.session.userid; + const hs = crypto.createHash("sha256") + const newHashPassword = hs.update(newPassword).digest("base64"); + // 현재 패스워드와 일치 여부를 확인하지 않고 업데이트 + updatePasswordFromDB(user, newHashPassword); + return res.send({message: "패스워드가 변경되었습니다.", userId, password, hashPassword}); +}); +``` + +DB에 저장된 사용자 패스워드와 변경을 요청한 패스워드의 일치 여부를 확인하고 변경 요청한 패스워드와 재확인 패스워드가 일치하는지 확인 후 DB의 패스워드를 수정해 안전하게 코드를 적용할 수 있다. + +**안전한 코드** + +```javascript +const express = require('express'); +const crypto = require("crypto"); +router.post("/patched", (req, res) => { + const newPassword = req.body.newPassword; + const user = req.session.userid; + const oldPassword = getPasswordFromDB(user); + const salt = crypto.randomBytes(16).toString('hex'); + const hs = crypto.createHash("sha256") + const currentPassword = req.body.currentPassword; + const currentHashPassword = hs.update(currentPassword + salt).digest("base64"); + + // 현재 패스워드 확인 후 사용자 정보 업데이트 + if (currentHashPassword === oldPassword) { + const newHashPassword = hs.update(newPassword + salt).digest("base64"); + updatePasswordFromDB(user, newHashPassword); + return res.send({ message: "패스워드가 변경되었습니다." }); + } else { + return res.send({ message: "패스워드가 일치하지 않습니다." }); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-306: Missing Authentication for Critical Function, MITRE](https://cwe.mitre.org/data/definitions/306.html) +- [Access Control, OWASP](https://www.owasp.org/index.php/Access_Control_Cheat_Sheet) + +--- + +이 문서는 분량 제한으로 인해 이하 항목(제2절 2~16항, 제3~7절, 제3장 부록)의 상세 내용은 원본 문서를 참조하시기 바랍니다. 아래에 나머지 전체 항목을 계속 수록합니다. + +--- + +### 2. 부적절한 인가 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![부적절한 인가 개요](figures/javascript/improper-auth_30.png) + +![부적절한 인가 예시](figures/javascript/improper-auth_31.png) + +사용자가 접근 가능한 모든 실행 경로에 대해서 접근 제어를 정확히 처리하지 않거나 불완전하게 검사하는 경우 공격자는 접근 가능한 실행경로를 통해 정보를 유출할 수 있다. + +#### 나. 안전한 코딩기법 + +응용 프로그램이 제공하는 정보와 기능이 가지는 역할에 맞게 분리 개발함으로써 공격자에게 노출되는 공격 노출면(Attack Surface)을 최소화하고 사용자의 권한에 따른 ACL(Access Control List)을 관리한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +function deleteContentFromDB(contentId) { + ... +} +router.delete("/vuln", (req, res) => { + const contentId = req.body.contentId; + // 작업 요청을 하는 사용자의 권한 확인 없이 삭제 작업 수행 + deleteContentFromDB(contentId); + return res.send("삭제가 완료되었습니다."); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +function deleteContentFromDB(contentId) { ... } +router.delete("/patched", (req, res) => { + const contentId = req.body.contentId; + const role = req.session.role; + // 삭제 기능을 수행할 권한이 있는 경우에만 삭제 작업 수행 + if (role === "admin") { + deleteContentFromDB(contentId); + return res.send("삭제가 완료되었습니다."); + } else { + return res.send("권한이 없습니다."); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-285: Improper Authorization, MITRE](https://cwe.mitre.org/data/definitions/285.html) +- [Authorization, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html) + +--- + +### 3. 중요한 자원에 대한 잘못된 권한 설정 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![잘못된 권한 설정 개요](figures/javascript/permission_32.png) + +응용프로그램이 중요한 보안관련 자원에 대해 읽기 또는 수정하기 권한을 의도하지 않게 허가할 경우 권한을 갖지 않은 사용자가 해당 자원을 사용하게 된다. NodeJS에서는 fs.chmodSync 함수를 사용해 파일 생성, 수정 및 읽기 권한을 설정할 수 있다. + +#### 나. 안전한 코딩기법 + +설정 파일, 실행 파일, 라이브러리 등은 관리자에 의해서만 읽고 쓰기가 가능하도록 설정하고 설정 파일과 같이 중요한 자원을 사용하는 경우 허가 받지 않은 사용자가 중요한 자원에 접근 가능한지 검사한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const fs = require("fs"); +function writeFile() { + // 모든 사용자가 읽기, 쓰기, 실행 권한을 가지게 됨 + fs.chmodSync("/root/system config", 0o777); + fs.open("/root/system_config", "w", function(err,fd) { + if (err) throw err; + }); + fs.writeFile("/root/system_config", "your config is broken", function(err) { + if (err) throw err; + console.log('write end'); + }); +} +``` + +**안전한 코드** + +```javascript +const fs = require("fs"); +function writeFile() { + // 소유자 이외에는 권한을 가지지 않음 + fs.chmodSync("/root/system_config", 0o700); + fs.open("/root/system_config", "w", function(err,fd) { + if (err) throw err; + }); + fs.writeFile("/root/system_config", "your config is broken", function(err) { + if (err) throw err; + console.log('write end'); + }) +} +``` + +#### 라. 참고자료 + +- [CWE-732: Incorrect Permission Assignment for Critical Resource, MITRE](https://cwe.mitre.org/data/definitions/732.html) +- [File System, NodeJS](https://nodejs.org/api/fs.html#file-system) + +--- + +### 4. 취약한 암호화 알고리즘 사용 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![취약한 암호화 알고리즘 사용 개요](figures/javascript/broken-crypto_33.png) + +정보보호 측면에서 취약하거나 위험한 암호화 알고리즘을 사용해서는 안 된다. RC2, RC4, RC5, RC6, MD4, MD5, SHA1, DES 알고리즘이 취약한 알고리즘에 해당된다. + +#### 나. 안전한 코딩기법 + +학계 및 업계에서 이미 검증된 표준화된 알고리즘을 사용해야 한다. 기존에 취약하다고 알려진 DES, RC5 등의 암호알고리즘을 대신하여 3TDEA, AES, SEED 등의 안전한 암호알고리즘으로 대체하여 사용한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** (암호화) + +```javascript +const crypto = require("crypto"); +function getEncText(plainText, key) { + // 취약한 알고리즘인 DES를 사용하여 안전하지 않음 + const cipherDes = crypto.createCipheriv('des-ecb', key, ''); + const encryptedData = cipherDes.update(plainText, 'utf8', 'base64'); + const finalEnctypedData = cipherDes.final('base64'); + return encryptedData + finalEnctypedData; +} +``` + +**안전한 코드** (암호화) + +```javascript +const crypto = require("crypto"); +function getEncText(plainText, key, iv) { + // 권장 알고리즘인 AES를 사용하여 안전함 + const cipherAes = crypto.createCipheriv('aes-256-cbc', key, iv); + const encryptedData = cipherAes.update(plainText, 'utf8', 'base64'); + const finalEnctypedData = cipherAes.final('base64'); + return encryptedData + finalEnctypedData; +} +``` + +**안전하지 않은 코드** (해쉬) + +```javascript +const crypto = require("crypto"); +function makeMd5(plainText) { + // 취약한 md5 해쉬함수 사용 + const hashText = crypto.createHash('md5').update(plainText).digest("hex"); + return hashText; +} +``` + +**안전한 코드** (해쉬) + +```javascript +const crypto = require("crypto"); +function makeSha256(plainText) { + const salt = crypto.randomBytes(16).toString('hex'); + // 안전한 sha-256 해쉬함수 사용 + const hashText = crypto.createHash('sha256').update(plainText + salt).digest("hex"); + return hashText; +} +``` + +#### 라. 참고자료 + +- [CWE-327: Use of a Broken or Risky Cryptographic Algorithm, MITRE](https://cwe.mitre.org/data/definitions/327.html) +- [Approved Security functions FIPS 140 Annex a, NIST](http://csrc.nist.gov/publications/fips/fips140-2/fips1402annexa.pdf) +- [Crypto, NodeJS](https://nodejs.org/api/crypto.html) + +--- + +### 5. 암호화되지 않은 중요정보 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![암호화되지 않은 중요정보 개요](figures/javascript/cleartext_34.png) + +사용자 또는 시스템의 중요 정보가 포함된 데이터를 평문으로 송·수신 또는 저장 시 인가되지 않은 사용자에게 민감한 정보가 노출될 수 있다. + +#### 나. 안전한 코딩기법 + +중요정보를 저장하거나 통신채널로 전송할 때는 반드시 암호화 과정을 거쳐야 하며 가능하다면 SSL 또는 HTTPS 등과 같은 보안 채널을 사용해야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** (평문저장) + +```javascript +function updatePass(dbconn, password, user_id) { + // 암호화되지 않은 비밀번호를 DB에 저장하는 경우 위험함 + const sql = 'UPDATE user SET password=? WHERE user_id=?'; + const params = [password, user_id]; + dbconn.query(sql, params, function(err, rows, fields){ + if (err) console.log(err); + }) +} +``` + +**안전한 코드** (평문저장) + +```javascript +const crypto = require("crypto"); +function updatePass(dbconn, password, user_id, salt) { + // 단방향 암호화를 이용하여 비밀번호를 암호화 + const sql = 'UPDATE user SET password=? WHERE user_id=?'; + const hashPw = crypto.createHash('sha256').update(password + salt, 'utf-8').digest('hex'); + const params = [hashPw, user_id]; + dbconn.query(sql, params, function(err, rows, fields){ + if (err) console.log(err); + }) +} +``` + +**안전하지 않은 코드** (평문전송) + +```javascript +const { io } = require("socket.io-client"); +const socket = io("http://localhost:3000"); +function sendPassword(password) { + // 패스워드를 암호화 하지 않고 전송하여 안전하지 않음 + socket.emit("password", password); +} +socket.on("password", function(data) { + if (data === 'success') { + console.log("\nSuccess to send a message to a server \n") + } +}); +``` + +**안전한 코드** (평문전송) + +```javascript +const { io } = require("socket.io-client"); +const crypto = require("crypto"); +const socket = io("http://localhost:3000"); +const PASSWORD = getPassword(); +function aesEncrypt(plainText) { + const key = getCryptKey(); + const iv = getCryptIV(); + const cipherAes = crypto.createCipheriv('aes-256-cbc', key, iv); + const encryptedData = cipherAes.update(plainText, 'utf8', 'base64'); + const finalEncryptedData = cipherAes.final('base64'); + return encryptedData + finalEncryptedData; +} +function sendPassword(password) { + // 패스워드 등 중요정보는 암호화하여 전송하는 것이 안전함 + const encPassword = aesEncrypt(password); + socket.emit("password", encPassword); +} +socket.on("password", function(data) { + if (data === 'success') { + console.log("\nSuccess to send a message to a server \n") + } +}); +``` + +#### 라. 참고자료 + +- [CWE-312: Cleartext Storage of Sensitive Information, MITRE](https://cwe.mitre.org/data/definitions/312.html) +- [CWE-319: Cleartext Transmission of Sensitive Information, MITRE](https://cwe.mitre.org/data/definitions/319.html) +- [Password Plaintext Storage, OWASP](https://owasp.org/www-community/vulnerabilities/Password_Plaintext_Storage) + +--- + +### 6. 하드코드된 중요정보 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![하드코드된 중요정보 개요](figures/javascript/hardcoded-creds_35.png) + +프로그램 코드 내부에 하드코드된 패스워드를 포함하고, 이를 이용해 내부 인증에 사용하거나 외부 컴포넌트와 통신을 하는 경우 관리자의 정보가 노출될 수 있어 위험하다. 또한 하드코드된 암호화 키를 사용해 암호화를 수행하면 암호화된 정보가 유출될 가능성이 높아진다. + +#### 나. 안전한 코딩기법 + +패스워드는 암호화 후 별도의 파일에 저장하여 사용한다. 또한 중요 정보 암호화 시 상수가 아닌 암호화 키를 사용하도록 하며 암호화가 잘 되었더라도 코드 내부에 상수 형태의 암호화 키를 주석으로 달거나 저장하지 않도록 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const mysql = require("mysql"); +const crypto = require("crypto"); +const dbQuery = "SELECT email, name FROM user WHERE name = 'test'"; +router.get("/vuln", (req, res) => { + // 데이터베이스 연결에 필요한 인증 정보가 평문으로 하드코딩되어 있음 + const connection = mysql.createConnection({ + host: 'localhost', + user: 'root', + password: 'root1234', + database: 'javascript', + port: 3306, + }); + connection.query( + dbQuery, (err, result) => { + if (err) return res.send(err); + return res.send(result); + }) +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const mysql = require("mysql"); +const crypto = require("crypto"); +const dbQuery = "SELECT email, name FROM user WHERE name = 'test'"; +const key = getCryptKey(); // 32bytes +const iv = getCryptIV(); // 16bytes +router.get("/patched", (req, res) => { + // 설정파일에 암호화 되어 있는 user, password 정보를 가져와 복호화 한 후 사용 + const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv); + const user = decipher.update(process.env.USER, 'base64', 'utf8') + decipher.final('utf8'); + const decipher2 = crypto.createDecipheriv('aes-256-cbc', key, iv); + const password = decipher2.update(process.env.PASSWORD, 'base64', 'utf8') + decipher2.final('utf8'); + // DB 연결 정보도 설정파일에서 가져와 사용 + const connection = mysql.createConnection({ + host: process.env.DB_HOST, + user: user, + password: password, + database: process.env.DB_NAME, + port: process.env.PORT, + }); + ... +``` + +#### 라. 참고자료 + +- [CWE-259: Use of Hard-coded Password, MITRE](https://cwe.mitre.org/data/definitions/259.html) +- [CWE-321: Use of Hard-coded Cryptographic Key, MITRE](https://cwe.mitre.org/data/definitions/321.html) +- [Use of hard-coded password, OWASP](https://owasp.org/www-community/vulnerabilities/Use_of_hard-coded_password) +- [Hard-coded credentials are security-sensitive, sona-rules](https://rules.sonarsource.com/javascript/RSPEC-2068) + +--- + +### 7. 충분하지 않은 키 길이 사용 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![충분하지 않은 키 길이 사용 개요](figures/javascript/key-length_36.png) + +![충분하지 않은 키 길이 사용 예시](figures/javascript/key-length_37.png) + +짧은 길이의 키를 사용하는 것은 암호화 알고리즘을 취약하게 만들 수 있다. 검증된 암호화 알고리즘을 사용하더라도 키 길이가 충분히 길지 않으면 짧은 시간 안에 키를 찾아낼 수 있다. + +#### 나. 안전한 코딩기법 + +RSA 알고리즘은 적어도 2,048 비트 이상의 길이를 가진 키와 함께 사용해야 하고 대칭 암호화 알고리즘의 경우에는 적어도 보안 강도 112비트 이상을 지원하는 알고리즘을 사용해야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const crypto = require("crypto"); +function vulnMakeRsaKeyPair() { + // RSA키 길이를 1024 비트로 설정하는 경우 안전하지 않음 + const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', + { + modulusLength: 1024, + publicKeyEncoding: { type: "spki", format: 'pem' }, + privateKeyEncoding: { type: "pkcs8", format: 'pem' } + }); + return { PRIVATE: publicKey, PUBLIC: privateKey } +} +function vulnMakeEcc() { + // ECC 키 길이가 224비트 이하이면 안전하지 않음 + const { publicKey, privateKey } = crypto.generateKeyPairSync('ec', { + namedCurve: 'secp192k1', + publicKeyEncoding: { type: 'spki', format: 'der' }, + privateKeyEncoding: { type: 'pkcs8', format: 'der' } + }); + return { PRIVATE: publicKey.toString('hex'), PUBLIC: privateKey.toString('hex') } +} +``` + +**안전한 코드** + +```javascript +const crypto = require("crypto"); +function vulnMakeRsaKeyPair() { + // RSA키 길이를 2048 비트로 설정해 안전함 + const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', + { + modulusLength: 2048, + publicKeyEncoding: { type: "spki", format: 'pem' }, + privateKeyEncoding: { type: "pkcs8", format: 'pem' } + }); + return { PRIVATE: publicKey, PUBLIC: privateKey } +} +function vulnMakeEcc() { + // ECC 키 길이를 256 비트로 설정해 안전함 + const { publicKey, privateKey } = crypto.generateKeyPairSync('ec', { + namedCurve: 'secp256k1', + publicKeyEncoding: { type: 'spki', format: 'der' }, + privateKeyEncoding: { type: 'pkcs8', format: 'der' } + }); + return { PRIVATE: publicKey.toString('hex'), PUBLIC: privateKey.toString('hex') } +} +``` + +#### 라. 참고자료 + +- [CWE-326: Inadequate Encryption Strength, MITRE](https://cwe.mitre.org/data/definitions/326.html) +- [암호 알고리즘 및 키 길이 이용 안내서, KISA](https://www.kisa.or.kr/2060305/form?postSeq=5&lang_type=KO#fnPostAttachDownload) + +--- + +### 8. 적절하지 않은 난수 값 사용 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![적절하지 않은 난수 값 사용 개요](figures/javascript/randomness_38.png) + +예측 불가능한 숫자가 필요한 상황에서 예측 가능한 난수를 사용한다면 공격자가 생성되는 다음 숫자를 예상해 시스템을 공격할 수 있다. + +#### 나. 안전한 코딩기법 + +NodeJS 엔진에서는 crypto.getRandomBytes를 사용해 암호학적으로 안전한 의사 난수 바이트를 생성할 수 있다. 브라우저에서는 RandomSource.getRandomValues를 사용한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +function getOtpNumber() { + let randomStr = ''; + // Math.random 라이브러리는 보안기능에 사용하면 위험함 + for (let i = 0; i < 6; i++) { + randomStr += String(Math.floor(Math.random() * 10)) + } + return randomStr; +} +``` + +**안전한 코드** + +```javascript +const crypto = require("crypto"); +function getOtpNumber() { + // 보안기능에 적합한 난수 생성용 crypto 라이브러리 사용 + const array = new Uint32Array(1); + // 브라우저에서는 crypto 대신에 window.crypto를 사용 + const randomStr = crypto.getRandomValues(array); + let result; + for (let i = 0; i < randomStr.length; i++) { + result = array[i]; + } + return String(result).substring(0, 6); +} +``` + +#### 라. 참고자료 + +- [CWE-330: Use of Insufficiently Random Values, MITRE](https://cwe.mitre.org/data/definitions/330.html) +- [Insecure Randomness, OWASP](https://owasp.org/www-community/vulnerabilities/Insecure_Randomness) + +--- + +### 9. 취약한 패스워드 허용 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![취약한 패스워드 허용 개요](figures/javascript/weak-password_39.png) + +강한 패스워드 조합 규칙을 사용하도록 강제하지 않으면 패스워드 공격으로부터 사용자 계정이 위험에 빠질 수 있다. + +#### 나. 안전한 코딩기법 + +패스워드 생성 시 강한 조건 검증을 수행한다. 패스워드는 숫자와 영문자, 특수문자 등을 혼합하여 사용하고 주기적으로 변경하여 사용하도록 해야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const mysql = require("mysql"); +const connection = mysql.createConnection( ... ); + +router.post("/vuln", (req, res) => { + const con = connection; + const { email, password, name } = req.body; + // 패스워드 생성 규칙 검증 없이 회원 가입 처리 + con.query( + "INSERT INTO user (email, password, name) VALUES (?, ?, ?)", + [email, password, name], + (err, result) => { + if (err) return res.send(err); + return res.send("회원가입 성공"); + }); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const mysql = require("mysql"); +const connection = mysql.createConnection(...); + +router.post("/patched", (req, res) => { + const con = connection; + const { email, password, name } = req.body; + function checkPassword(password) { + // 2종 이상 문자로 구성된 8자리 이상 비밀번호 검사 정규식 + const pt1 = /^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$/; + const pt2 = /^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$/; + const pt3 = /^(?=.*[A-Z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/; + const pt4 = /^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$/; + const pt5 = /^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/; + const pt6 = /^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/; + // 문자 구성 상관없이 10자리 이상 비밀번호 검사 정규식 + const pt7 = /^[A-Za-z\d!@#$%^&*]{10,}$/; + for (let pt of [pt1, pt2, pt3, pt4, pt5, pt6, pt7]) { + if (pt.test(password)) return true; + } + return false; + } + if (checkPassword(password)) { + con.query( + "INSERT INTO user (email, password, name) VALUES (?, ?, ?)", + [email, password, name], + (err, result) => { + if (err) return res.send(err); + return res.send("회원가입 성공"); + } + ); + } else { + return res.send("비밀번호는 영문 대문자, 소문자, 숫자, 특수문자 조합 중 2가지 이상 8자리이거나 문자 구성 상관없이 10자리 이상이어야 합니다."); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-521: Weak Password Requirements, MITRE](https://cwe.mitre.org/data/definitions/521.html) +- [Authentication Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html) + +--- + +### 10. 부적절한 전자서명 확인 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![부적절한 전자서명 확인 개요](figures/javascript/signature_40.png) + +![부적절한 전자서명 확인 흐름](figures/javascript/signature_41.png) + +![부적절한 전자서명 확인 예시](figures/javascript/signature_42.png) + +프로그램, 라이브러리, 코드의 전자서명에 대한 유효성 검증이 적절하지 않아 공격자의 악의적인 코드가 실행 가능한 보안약점이다. 데이터 전송 또는 다운로드 시 함께 전달되는 전자서명은 원문 데이터의 암호화된 해쉬 값으로, 수신측에서 이 서명을 검증해 데이터 변조 여부를 확인할 수 있다. + +#### 나. 안전한 코딩기법 + +주요 데이터 전송 또는 다운로드 시 데이터에 대한 전자서명을 함께 전송하고 수신측에서는 전달 받은 전자서명을 검증해 파일의 변조 여부를 확인해야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const crypto = require("crypto"); +const fs = require('fs'); + +router.post("/vuln", (req, res) => { + // 클라이언트로부터 전달받은 데이터(전자서명을 수신 처리 하지 않음) + const { encrypted_msg } = req.body; + let secret_key; + fs.readFile('/keys/secret_key.out', 'utf8', (err, data) => { + if (err) { console.error(err); return; } + secret_key = data; + } + const decrypted = decrypt_with_symmetric_key(encrypted_msg, secret_key); + // 클라이언트로부터 전달 받은 코드 실행 + eval(decrypted); + res.send('요청한 코드를 실행했습니다'); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const crypto = require("crypto"); +router.post("/patched", (req, res) => { + const { encrypted_msg, encrypted_sig, client_pub_key } = req.body; + let secret_key; + fs.readFile('/keys/secret_key.out', 'utf8', (err, data) => { + if (err) { console.error(err); return; } + secret_key = data; + } + // 대칭키로 클라이언트 데이터 및 전자서명 복호화 + const decrypted_msg = decrypt_with_symmetric_key(encrypted_msg); + const decrypted_sig = decrypt_with_symmetric_key(encrypted_sig); + // 전자서명 검증에 통과한 경우에만 데이터 실행 + if (verify_digit_signature(decrypted_msg, decrypted_sig, client_pub_key)) { + eval(decrypted_msg); + res.send('요청한 코드를 실행했습니다'); + } else { + res.send('[!] 에러 - 서명이 올바르지 않습니다.'); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-347: Improper Verification of Cryptographic Signature, MITRE](https://cwe.mitre.org/data/definitions/347.html) +- [Class: verify, NodeJS](https://nodejs.org/api/crypto.html#class-verify) + +--- + +### 11. 부적절한 인증서 유효성 검증 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![부적절한 인증서 유효성 검증 개요](figures/javascript/certificate_43.png) + +![부적절한 인증서 유효성 검증 예시](figures/javascript/certificate_44.png) + +인증서가 유효하지 않거나 악성인 경우 공격자가 호스트와 클라이언트 사이의 통신 구간을 가로채 신뢰하는 엔티티인 것처럼 속일 수 있다. + +#### 나. 안전한 코딩기법 + +데이터 통신에 인증서를 사용하는 경우 송신측에서 전달한 인증서가 유효한지 검증한 후 데이터를 송수신해야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const https = require('https'); +const getServer = () => { + const options = { + hostname: "dangerous.website", + port: 443, + method: "GET", + path: "/", + // 유효하지 않은 인증서를 가지고 있어도 무시하는 옵션으로 안전하지 않음 + rejectUnauthorized: false + }; + https.request(options, (response) => { + console.log('response - ', response.statusCode); + }); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const https = require('https'); +const getServer = () => { + const options = { + hostname: "dangerous.website", + port: 443, + method: "GET", + path: "/", + // 유효하지 않은 인증서 발견 시 예외 발생 + rejectUnauthorized: true + }; + const hreq = https.request(options, (response) => { + console.log('response - ', response.statusCode); + }); + hreq.on('error', (e) => { + console.error('에러발생 - ', e); + }); +}); +``` + +#### 라. 참고자료 + +- [CWE-295: Improper Certificate Validation, MITRE](https://cwe.mitre.org/data/definitions/295.html) +- [https, NodeJS](https://nodejs.org/api/https.html#httpsrequestoptions-callback) + +--- + +### 12. 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![쿠키를 통한 정보 노출 개요](figures/javascript/cookie-exposure_45.png) + +![쿠키를 통한 정보 노출 예시](figures/javascript/cookie-exposure_46.png) + +영속적인 쿠키(Persistent Cookie)에 개인정보, 인증 정보 등이 저장된다면 공격자는 쿠키에 접근할 수 있는 보다 많은 기회를 가지게 된다. + +#### 나. 안전한 코딩기법 + +쿠키의 만료시간은 세션 지속 시간을 고려하여 최소한으로 설정하고 영속적인 쿠키에는 중요 정보가 포함되지 않도록 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +router.get("/vuln", (req, res) => { + // 쿠키의 만료 시간을 1년으로 과도하게 길게 설정하고 있어 안전하지 않다 + res.cookie('rememberme', '1', { + expires: new Date(Date.now() + 365*24*60*60*1000) + }); + return res.send("쿠키 발급 완료"); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +router.get("/patched", (req, res) => { + // 쿠키의 만료 시간을 적절하게 부여하고 secure 옵션을 활성화 + res.cookie('rememberme', '1', { + expires: new Date(Date.now() + 60*60*1000), + secure: true, + httpOnly: true + }); + return res.send("쿠키 발급 완료"); +}); +``` + +#### 라. 참고자료 + +- [CWE-539: Use of Persistent Cookies Containing Sensitive Information, MITRE](https://cwe.mitre.org/data/definitions/539.html) + +--- + +### 13. 주석문 안에 포함된 시스템 주요정보 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![주석문 안에 포함된 시스템 주요정보 개요](figures/javascript/comment-info_47.png) + +소프트웨어 개발자가 편의를 위해서 주석문에 패스워드를 적어둔 경우 공격자가 소스코드에 접근할 수 있다면 시스템에 손쉽게 침입할 수 있다. + +#### 나. 안전한 코딩기법 + +주석에는 아이디, 패스워드 등 보안과 관련된 내용을 기입하지 않는다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +router.post("/vuln", (req, res) => { + // 주석문에 포함된 중요 시스템의 인증 정보 + // id = admin + // password = 1234 + const result = login(req.body.id, req.body.password); + return res.send(result); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +router.post("/vuln", (req, res) => { + // 주석문에 포함된 민감한 정보는 삭제 + const result = login(req.body.id, req.body.password); + return res.send(result); +}); +``` + +#### 라. 참고자료 + +- [CWE-615: Inclusion of Sensitive Information in Source Code Comments, MITRE](https://cwe.mitre.org/data/definitions/615.html) + +--- + +### 14. 솔트 없이 일방향 해쉬 함수 사용 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![솔트 없이 일방향 해쉬 함수 사용 개요](figures/javascript/unsalted-hash_48.png) + +중요정보를 솔트(Salt)없이 일방향 해쉬 함수를 사용해 저장한다면 공격자는 미리 계산된 레인보우 테이블을 이용해 해쉬값을 알아낼 수 있다. + +#### 나. 안전한 코딩기법 + +솔트값은 사용자별로 유일하게 생성해야 하며, 이를 위해 사용자별 솔트 값을 별도로 저장하는 과정이 필요하다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const crypto = require("crypto"); +function getHashFromPwd(pw) { + // salt가 없이 생성된 해쉬값은 강도가 약해 취약 + const hash = crypto.createHash('sha256').update(pw).digest('hex'); + return hash; +} +``` + +**안전한 코드** + +```javascript +const crypto = require("crypto"); +function getHashFromPwd(pw) { + // 솔트 값을 사용하면 길이가 짧은 패스워드로도 고강도의 해쉬를 생성할 수 있음 + const salt = crypto.randomBytes(16).toString('hex'); + const hash = crypto.createHash('sha256').update(pw + salt).digest('hex'); + return { hash, salt }; +} +``` + +#### 라. 참고자료 + +- [CWE-759: Use of a One-Way Hash without a Salt, MITRE](https://cwe.mitre.org/data/definitions/759.html) +- [Password Storage Cheat Sheet - Salting, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#salting) + +--- + +### 15. 무결성 검사없는 코드 다운로드 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![무결성 검사없는 코드 다운로드 개요](figures/javascript/integrity-check_49.png) + +원격지에 위치한 소스코드 또는 실행 파일을 무결성 검사 없이 다운로드 후 이를 실행하는 프로그램은 DNS 스푸핑(Spoofing) 또는 전송 시의 코드 변조 등의 방법을 이용해 공격자가 악의적인 코드를 실행하는 위협에 노출시킬 수 있다. + +#### 나. 안전한 코딩기법 + +소스코드는 신뢰할 수 있는 사이트에서만 다운로드해야 하고 파일의 인증서 또는 해쉬값을 검사해 변조되지 않은 파일인지 확인하여야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const fs = require("fs"); +const http = require("http"); +router.get("/vuln", (req, res) => { + const url = "https://www.somewhere.com/storage/code.js"; + http.get(url, (res) => { + const path = "./temp/sample1.js" + const writeStream = fs.createWriteStream(path); + res.pipe(writeStream); + writeStream.on("finish", () => { writeStream.close(); }); + }); + // 무결성 검증 없이 파일 사용 + fs.readFile("./temp/sample1.js", "utf8", function (err, buf) { + res.end(buf); + }) +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const fs = require("fs"); +const http = require("http"); +const crypto = require("crypto"); +router.get("/patched", async (req, res) => { + const url = "https://www.somewhere.com/storage/code.js"; + const codeHash = req.body.codeHash; + http.get(url, (res) => { + const path = "./temp/sample1.js" + const writeStream = fs.createWriteStream(path); + res.pipe(writeStream); + writeStream.on("finish", () => { writeStream.close(); }); + }); + const hash = crypto.createHash('sha256'); + const input = fs.createReadStream("./temp/sample1.js"); + let promise = new Promise ((resolve, reject) => { + input.on("readable", () => { + const data = input.read(); + if (data) { hash.update(data); } + else { resolve(); } + }) + }); + await promise; + const fileHash = hash.digest('hex'); + // 무결성 검증에 통과할 경우에만 파일 사용 + if (fileHash === codeHash) { + fs.readFile("./temp/sample1.js", "utf8", function (err, buf) { + res.end(buf); + }) + } else { + return res.send("파일이 손상되었습니다.") + } +}); +``` + +#### 라. 참고자료 + +- [CWE-494: Download of Code Without Integrity Check, MITRE](https://cwe.mitre.org/data/definitions/494.html) + +--- + +### 16. 반복된 인증시도 제한 기능 부재 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![반복된 인증시도 제한 기능 부재 개요](figures/javascript/brute-force_50.png) + +![반복된 인증시도 제한 기능 부재 예시](figures/javascript/brute-force_51.png) + +일정 시간 내에 여러 번의 인증 시도 시 계정 잠금 또는 추가 인증 방법 등의 충분한 조치가 수행되지 않는 경우 공격자는 무차별 대입(brute-force)하여 로그인 성공 및 권한 획득이 가능하다. + +#### 나. 안전한 코딩기법 + +최대 인증시도 횟수를 적절한 횟수로 제한하고 설정된 인증 실패 횟수를 초과할 경우 계정을 잠금 하거나 추가적인 인증 과정을 거쳐서 시스템에 접근이 가능하도록 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const crypto = require('crypto'); +router.post("/vuln", (req, res) => { + const id = req.body.id; + const password = req.body.password; + const hashPassword = crypto.createHash("sha512").update(password).digest("base64"); + const currentHashPassword = getUserPasswordFromDB(id); + + // 인증 시도에 따른 제한이 없어 반복적인 인증 시도가 가능 + if (hashPassword === currentHashPassword) { + return res.send("login success"); + } else { + return res.send("login fail") + } +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const crypto = require('crypto'); +const LOGIN_TRY_LIMIT = 5; +router.post("/patched", (req, res) => { + const id = req.body.id; + const password = req.body.password; + // 로그인 실패기록 가져오기 + const loginFailCount = getUserLoginFailCount(id); + // 로그인 실패횟수 초과로 인해 잠금된 계정에 대한 인증 시도 제한 + if (loginFailCount >= LOGIN_TRY_LIMIT) { + return res.send("account lock(too many failed)") + } + // 해시 생성시 솔트를 사용하는 것이 안전하나, 코드의 복잡성을 피하기 위해 생략 + const hashPassword = crypto.createHash("sha512").update(password).digest("base64"); + const currentHashPassword = getUserPasswordFromDB(id); + if (hashPassword === currentHashPassword) { + deleteUserLoginFailCount(id); + return res.send("login success"); + } else { + updateUserLoginFailCount(id); + return res.send("login fail") + } +}); +``` + +#### 라. 참고자료 + +- [CWE-307: Improper Restriction of Excessive Authentication Attempts, MITRE](https://cwe.mitre.org/data/definitions/307.html) +- [Blocking Brute Force Attacks, OWASP](https://owasp.org/www-community/controls/Blocking_Brute_Force_Attacks) + +--- + +## 제3절 시간 및 상태 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +동시 또는 거의 동시에 여러 코드 수행을 지원하는 병렬 시스템이나 하나 이상의 프로세스가 동작되는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안약점이다. + +### 1. 종료되지 않는 반복문 또는 재귀 함수 + +#### 가. 개요 + +![종료되지 않는 반복문 또는 재귀 함수 개요](figures/javascript/infinite-loop_52.png) + +![종료되지 않는 반복문 또는 재귀 함수 예시](figures/javascript/infinite-loop_53.png) + +재귀 함수의 순환 횟수를 제어하지 못해 할당된 메모리나 프로그램 스택 등의 자원을 과도하게 초과해 사용하면 위험하다. 대부분의 경우 기본 케이스(Base Case)가 정의되어 있지 않은 재귀 함수는 무한 루프에 빠져들게 되고 자원고갈을 유발한다. + +#### 나. 안전한 코딩기법 + +모든 재귀 호출 시 호출 횟수를 제한하거나 재귀 함수 종료 조건을 명확히 정의해 호출을 제어해야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +function factorial(x) { + // 재귀함수 탈출조건을 설정하지 않아 동작 중 에러 발생 + return x * factorial(x - 1); +} +``` + +**안전한 코드** + +```javascript +function factorial(x) { + // 재귀함수 사용 시에는 탈출 조건을 명시해야 한다 + if ( x === 0 ) { + return; + } + else { + return x * factorial(x - 1); + } +} +``` + +#### 라. 참고자료 + +- [CWE-674: Uncontrolled Recursion, MITRE](https://cwe.mitre.org/data/definitions/674.html) +- [CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop'), MITRE](https://cwe.mitre.org/data/definitions/835.html) + +--- + +## 제4절 에러처리 + +에러를 처리하지 않거나, 불충분하게 처리하여 에러 정보에 중요정보(시스템 내부정보 등)가 포함될 때 발생할 수 있는 보안약점이다. + +### 1. 오류 메시지 정보노출 + +> VanillaJS: - / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![오류 메시지 정보노출 개요](figures/javascript/error-info_54.png) + +![오류 메시지 정보노출 예시](figures/javascript/error-info_55.png) + +응용 프로그램이 실행환경, 사용자 등 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성해 외부에 제공하는 경우 공격자의 악성 행위로 이어질 수 있다. + +#### 나. 안전한 코딩기법 + +오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만 포함하도록 한다. Express 프레임워크에서는 미들웨어 방식으로 에러 페이지 핸들러를 정의할 수 있다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const fs = require("fs"); +router.get("/vuln", (req, res) => { + const filePath = "./file/secret/password"; + fs.readFile(filePath, (err, data) => { + if (err) { + // 서버 내부에서 발생한 에러 메시지를 그대로 사용자에 전달해 주요 정보 노출 위험 + return res.status(500).send(err); + } else { + return res.send(data); + } + }) +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const fs = require("fs"); +router.get("/vuln", (req, res) => { + const filePath = "./file/secret/password"; + fs.readFile(filePath, (err, data) => { + if (err) { + // 에러 내용을 그대로 전달하지 않고 필터링 처리 + return res.status(500).send({ message: "잘못된 요청입니다" }); + } else { + return res.send(data); + } + }) +}); +``` + +**안전한 코드** (errorHandler 미들웨어) + +```javascript +const express = require("express"); +const app = express(); +app.use(clientErrorHandler); +app.use(errorHandler); +function clientErrorHandler (err, req, res, next) { + if (req.xhr) { + res.status(500).send({ error: 'Something failed!' }); + } else { + next(err); + } +} +function errorHandler (err, req, res, next) { + if (err.name = "ValidError") { + res.status(400) + res.render('400error', { error: err }) + } else if (err.name = "AuthError") { + res.status(401) + res.render('401error', { error: err }) + } else if (err.name = "ForbiddenError") { + res.status(403) + res.render('403error', { error: err }) + } else if (err.name = "DBError") { + res.status(500) + res.render('500error', { error: err }) + } +} +``` + +#### 라. 참고자료 + +- [CWE-209: Generation of Error Message Containing Sensitive Information, MITRE](https://cwe.mitre.org/data/definitions/209.html) +- [Improper Error Handling, OWASP](https://owasp.org/www-community/Improper_Error_Handling) + +--- + +### 2. 오류상황 대응 부재 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![오류상황 대응 부재 개요](figures/javascript/error-handling_56.png) + +오류가 발생할 수 있는 부분을 확인하였으나 이러한 오류에 대해 예외 처리를 하지 않을 경우 공격자는 오류 상황을 악용해 개발자가 의도하지 않은 방향으로 프로그램이 동작하도록 할 수 있다. + +#### 나. 안전한 코딩기법 + +오류가 발생할 수 있는 부분에 대하여 제어문(try-catch)을 사용해 적절하게 예외 처리 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const crypto = require("crypto"); +const staticKeys = [ + { "key" : "a6823ecf34012b1ca5ca7889f4eabb51", "iv" : "e79ce03b4563647a" }, + { "key" : "9e7c30e899f296a1daca7d9a0f92e71c", "iv" : "ab39941053fb5f6a" } + ]; +router.post("/vuln", (req, res) => { + let statickKey = { "key" : "00000000000000000000000000000000", "iv" : "0000000000000000" }; + const inputText = req.body.text; + const keyId = req.body.id; + try { + staticKey.key = staticKeys[keyId].key; + staticKey.iv = staticKeys[keyId].iv; + } catch (err) { + // key 선택 중 오류 발생 시 기본으로 설정된 암호화 키인 + // '0000000000000000' 으로 암호화가 수행됨 + console.log(err); + } + const cipher = crypto.createCipheriv('aes-256-cbc', statickKey.key, statickKey.iv); + const encryptedText = cipher.update(inputText, 'utf8', 'base64') + cipher.final('base64'); + return res.send(encryptedText); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const crypto = require("crypto"); +const staticKeys = [ + { "key" : "a6823ecf34012b1ca5ca7889f4eabb51", "iv" : "e79ce03b4563647a" }, + { "key" : "9e7c30e899f296a1daca7d9a0f92e71c", "iv" : "ab39941053fb5f6a" } + ]; +router.post("/vuln", (req, res) => { + let statickKey = { "key" : "00000000000000000000000000000000", "iv" : "0000000000000000" }; + const inputText = req.body.text; + const keyId = req.body.id; + try { + staticKey.key = staticKeys[keyId].key; + staticKey.iv = staticKeys[keyId].iv; + } catch (err) { + // 키 선택 중 오류 발생 시 랜덤으로 암호화 키를 생성하도록 설정 + staticKey.key = crypto.randomBytes(16).toString('hex'); + staticKey.iv = crypto.randomBytes(8).toString('hex'); + } + const cipher = crypto.createCipheriv('aes-256-cbc', statickKey.key, statickKey.iv); + const encryptedText = cipher.update(inputText, 'utf8', 'base64') + cipher.final('base64'); + return res.send(encryptedText); +}); +``` + +#### 라. 참고자료 + +- [CWE-390: Detection of Error Condition Without Action, MITRE](https://cwe.mitre.org/data/definitions/390.html) + +--- + +### 3. 부적절한 예외 처리 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +프로그램 수행 중에 함수의 결과 값에 대한 적절한 처리 또는 예외 상황에 대한 조건을 적절하게 검사 하지 않을 경우 예기치 않은 문제를 야기할 수 있다. + +#### 나. 안전한 코딩기법 + +값을 반환하는 모든 함수의 결과값을 검사해야 한다. 예외 처리를 사용하는 경우에 광범위한 예외 처리 대신 구체적인 예외 처리를 수행한다. + +#### 다. 코드예제 + +안전하지 않은 코드에서는 서로 다른 예외 상황에서도 동일한 에러 메시지만 출력하고, 안전한 코드에서는 발생 가능한 예외를 세분화한 후 예외상황에 따라 적합한 처리를 수행한다. 클라이언트에는 에러 발생 여부만 전달하고 상세 내용은 서버 로그에 기록한다. + +#### 라. 참고자료 + +- [CWE-754: Improper Check for Unusual or Exceptional Conditions, MITRE](https://cwe.mitre.org/data/definitions/754.html) + +--- + +## 제5절 코드오류 + +타입 변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안약점이다. + +### 1. Null Pointer 역참조 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![Null Pointer 역참조 개요](figures/javascript/null-pointer_57.png) + +자바스크립트에서는 Null pointer dereference가 발생하지 않는다. 정의되지 않은 변수는 undefined로, null 개체는 null 값을 가지며 '정의되지 않음'과 '없음'을 다르게 처리한다. + +#### 나. 안전한 코딩기법 + +undefined 또는 null이 될 수 있는 데이터를 참조하기 전에 해당 데이터의 값을 정확히 검사하여 시스템 오류를 줄일 수 있다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +router.get("/vuln", (req, res) => { + const id = req.query.id; + // 사용자가 id 값을 전달하지 않을 경우(undefined) 에러 발생 + return res.send("length = " + id.length); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +router.get("/patched", (req, res) => { + const id = req.query.id; + if (id === undefined) { + // id 값이 전달되지 않을 경우 사용자에게 요구하는 예외 코드 추가 + return res.send("id is required"); + } else { + return res.send("length = " + id.length); + } +}); +``` + +#### 라. 참고자료 + +- [CWE-476: NULL Pointer Dereference, MITRE](https://cwe.mitre.org/data/definitions/476.html) + +--- + +### 2. 부적절한 자원 해제 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![부적절한 자원 해제 개요](figures/javascript/resource-release_58.png) + +![부적절한 자원 해제 흐름](figures/javascript/resource-release_59.png) + +![부적절한 자원 해제 예시](figures/javascript/resource-release_60.png) + +프로그램의 자원(열려 있는 파일, 힙 메모리, 소켓 등)은 유한한 자원이다. 사용이 끝난 자원을 반환하지 못하는 경우에 문제가 발생할 수 있다. + +#### 나. 안전한 코딩기법 + +자원을 획득하여 사용한 다음에는 반드시 자원을 해제 후 반환한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const fs = require('fs'); +router.get("/vuln", (req, res) => { + const configPath = './config.cfg'; + let fid = null; + let fdata = null; + try { + fid = fs.openSync(configPath, 'r'); + fdata = fs.readFileSync(fid, 'utf8'); + fdata = fs.readFileSync('100', 'utf8'); + // try 절에서 할당된 자원이 반환(close)되기 전에 예외가 발생하면 + // 할당된 자원이 시스템에 바로 반환되지 않음 + fs.close(fid, err => { + if (err) { console.log('error occured while file closing'); } + else { console.log('file closed'); } + }); + } catch (e) { + console.log('error occured!' , e); + } + return res.send(fdata); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const fs = require('fs'); +router.get("/patched", (req, res) => { + const configPath = './config.cfg'; + let fid = null; + let fdata = null; + try { + fid = fs.openSync(configPath, 'r'); + fdata = fs.readFileSync(fid, 'utf8'); + fdata = fs.readFileSync(100, 'utf8'); + } catch (e) { + console.log('error occured!' , e); + // try 절에서 할당된 자원은 finally 절에서 시스템에 반환을 해야 함 + } finally { + fs.close(fid, err => { + if (err) { console.log('error occured while file closing'); } + else { console.log('file closed'); } + }); + } + return res.send(fdata); +}); +``` + +#### 라. 참고자료 + +- [CWE-404: Improper Resource Shutdown or Release, MITRE](https://cwe.mitre.org/data/definitions/404.html) + +--- + +### 3. 신뢰할 수 없는 데이터의 역직렬화 + +> VanillaJS: O / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![신뢰할 수 없는 데이터의 역직렬화 개요](figures/javascript/deserialization_61.png) + +역직렬화(Deserialization)에서 공격자가 전송한 데이터 또는 저장된 스트림을 조작할 수 있는 경우 무결성 침해, 원격 코드 실행, 서비스 거부 공격 등이 발생할 수 있다. + +#### 나. 안전한 코딩기법 + +신뢰할 수 없는 데이터를 역직렬화 하지 않도록 구성한다. 최소한 송신 측에서 서명을 추가하고 수신 측에서 서명을 확인하여 데이터의 무결성을 검증해야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const serializedData = req.query.data; +// 사용자로부터 입력받은 알 수 없는 데이터를 역직렬화 +const user = JSON.parse(serializedData); +return res.send({user: user.user, isAdmin: user.isAdmin}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const crypto = require('crypto'); +const serializedData = req.query.data; +const body = JSON.parse(serializedData); +// 데이터 변조를 확인하기 위한 해시값 +const hashedMac = body.hashed; +const userInfo = JSON.stringify(body.userInfo); +const secretKey = 'secret_key'; +const hmac = crypto.createHmac('sha512', secretKey); +hmac.update(userInfo); +const calculatedHMAC = hmac.digest('hex'); +// 전달받은 해시값과 직렬화 데이터의 해시값을 비교하여 검증 +if (calculatedHMAC === hashedMac) { + const userObj = JSON.parse(userInfo); + return res.send(userObj); +} else { + return res.send('신뢰할 수 없는 데이터입니다.'); +} +``` + +#### 라. 참고자료 + +- [CWE-502: Deserialization of Untrusted Data, MITRE](https://cwe.mitre.org/data/definitions/502.html) +- [Deserialization Cheat Sheet, OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html) + +--- + +## 제6절 캡슐화 + +중요한 데이터 또는 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생하는 보안약점으로 정보노출, 권한 문제 등이 발생할 수 있다. + +### 1. 잘못된 세션에 의한 데이터 정보 노출 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![잘못된 세션에 의한 데이터 정보 노출 개요](figures/javascript/session-leak_62.png) + +![잘못된 세션에 의한 데이터 정보 노출 예시](figures/javascript/session-leak_63.png) + +다중 스레드 환경에서는 싱글톤(Singleton) 객체 필드에 경쟁조건(Race Condition)이 발생할 수 있다. 전역 변수가 포함되지 않도록 코드를 작성해 서로 다른 세션에서 데이터를 공유하지 않도록 해야 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +let instance; +class UserSingleton { + constructor() { + this.userName = 'testUser'; + if (instance) { return instance; } + instance = this; + } + getUserProfile() { return this.userName; } +}; +router.get("/vuln", (req, res) => { + const user = new UserSingleton(); + const profile = user.getUserProfile(); + return res.send(profile); +}); +``` + +**안전한 코드** + +```javascript +class User { + constructor() { this.userName = 'testUser'; } + getUserProfile() { return this.userName; } +}; +router.get("/patched", (req, res) => { + const user = new User(); + const profile = user.getUserProfile(); + return res.send(profile); +}); +``` + +#### 라. 참고자료 + +- [CWE-488: Exposure of Data Element to Wrong Session, MITRE](https://cwe.mitre.org/data/definitions/488.html) + +--- + +### 2. 제거되지 않고 남은 디버그 코드 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +디버깅 목적으로 삽입된 코드는 개발이 완료되면 제거해야 한다. + +#### 다. 코드예제 + +**안전한 코드** (ReactJS) + +```javascript +// 애플리케이션 진입 코드인 Index.js에 다음 코드를 추가 +if (process.env.NODE_ENV === 'production' && typeof window !== 'undefined') { + console.log = () => {}; +} +``` + +**안전한 코드** (ExpressJS) + +```javascript +// 서버 진입 코드인 index.js 내의 서버 구동 부분에 다음 코드 추가 +app.listen(80, () => { + if (!process.env.DEBUG) { + console.log = function(){} + } +}); +``` + +#### 라. 참고자료 + +- [CWE-489: Active Debug Code, MITRE](https://cwe.mitre.org/data/definitions/489.html) + +--- + +### 3. Public 메소드로부터 반환된 Private 배열 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![Public 메소드로부터 반환된 Private 배열 개요](figures/javascript/private-return_64.png) + +public으로 선언된 메소드에서 배열을 반환하면 해당 배열의 참조 객체가 외부에 공개되어 외부에서 배열 수정과 객체 속성 변경이 가능해진다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +class UserObj { + #privArray = []; + // private 배열을 리턴하는 public 메소드를 사용하는 경우 취약 + get_private_member = () => { + return this.#privArray; + } +} +``` + +**안전한 코드** + +```javascript +class UserObj { + #privArray = []; + // private 배열을 반환하는 경우 복사본을 사용 + get_private_member = () => { + const copied = Object.assign([], this.#privArray); + return copied; + } +} +``` + +#### 라. 참고자료 + +- [CWE-495: Private Data Structure Returned From A Public Method, MITRE](https://cwe.mitre.org/data/definitions/495.html) + +--- + +### 4. Private 배열에 Public 데이터 할당 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![Private 배열에 Public 데이터 할당 개요](figures/javascript/public-assign_65.png) + +public으로 선언된 메소드의 인자가 private로 선언된 배열에 저장되면 private 배열을 외부에서 접근하여 변경이 가능해진다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +class UserObj { + #privArray = []; + // private 배열에 외부 값을 바로 대입하는 public 메소드를 사용하는 경우 취약 + set_private_member = (input_list) => { + this.#privArray = input_list; + } +} +``` + +**안전한 코드** + +```javascript +class UserObj2 { + #privArray = []; + // 사용자가 전달한 값을 private가 아닌 public 배열로 저장 + set_private_member = (input_list) => { + this.userInput = input_list; + } +} +``` + +#### 라. 참고자료 + +- [CWE-496: Public Data Assigned to Private Array-Typed Field, MITRE](https://cwe.mitre.org/data/definitions/496.html) + +--- + +## 제7절 API 오용 + +의도된 사용에 반하는 방법으로 API를 사용하거나 보안에 취약한 API를 사용하여 발생할 수 있는 보안약점이다. + +### 1. DNS lookup에 의존한 보안결정 + +> VanillaJS: - / ReactJS: - / ExpressJS: O + +#### 가. 개요 + +![DNS lookup에 의존한 보안결정 개요](figures/javascript/dns-lookup_66.png) + +![DNS lookup에 의존한 보안결정 예시](figures/javascript/dns-lookup_67.png) + +공격자가 DNS 엔트리를 속일 수 있으므로 도메인명에 의존해서 보안결정(인증 및 접근 통제 등)을 하지 않아야 한다. + +#### 나. 안전한 코딩기법 + +보안결정에서 도메인명을 이용한 DNS lookup을 하지 않도록 한다. + +#### 다. 코드예제 + +**안전하지 않은 코드** + +```javascript +const express = require('express'); +const dns = require("dns"); +router.get("/vuln", (req, res) => { + let trusted = false; + const trustedHost = "www.google.com"; + const hostName = req.query.host; + // 공격자에 의해 실행되는 서버의 DNS가 변경될 수 있으므로 안전하지 않음 + if (hostName === trustedHost) { + trusted = true; + } + return res.send({trusted}); +}); +``` + +**안전한 코드** + +```javascript +const express = require('express'); +const dns = require("dns"); +router.get("/patched", async (req, res) => { + let trusted = false; + const trustedHost = "142.250.207.100"; + // 실제 서버의 IP 주소를 비교하여 DNS 변조에 대응 + async function dnsLookup() { + return new Promise((resolve, reject) => { + dns.lookup(req.query.host, 4, (err, address, family) => { + if (err) reject(err); + resolve(address); + }) + }) + } + const hostName = await dnsLookup(); + if (hostName === trustedHost) { + trusted = true; + } + return res.send({trusted}); +}); +``` + +#### 라. 참고자료 + +- [CWE-350: Reliance on Reverse DNS Resolution for a Security-Critical Action, MITRE](https://cwe.mitre.org/data/definitions/350.html) + +--- + +### 2. 취약한 API 사용 + +> VanillaJS: O / ReactJS: O / ExpressJS: O + +#### 가. 개요 + +![취약한 API 사용 개요](figures/javascript/vulnerable-api_68.png) + +자바스크립트는 외부 의존성을 기본으로 하는 생태계를 토대로 한다. 패키지(package)라고 부르는 모듈 집합을 통해 서로 다른 제작자의 작업 결과물을 손쉽게 프로그램에 탑재할 수 있다. 이러한 특성은 잠재적인 보안 위협을 내포하고 있다. + +프로그램 코드에서 외부 패키지 사용 시 보안 문제가 발생하게 되는 원인: +1. 사용자 배포 패키지 내의 결함으로 인한 취약점 +2. 언어 엔진 자체의 결함으로 인한 취약점(기본 제공 패키지) + +#### 나. 안전한 API 선택 + +최초 패키지 사용 시 다음과 같은 내용을 검토해 패키지 사용 여부를 결정한다: + +- **사용 통계** : 얼마나 많은 사람들이 해당 패키지를 다운로드 했고, 선호하고 있는지 +- **이슈 관리** : 지속적으로 발견되는 버그 또는 이슈를 어떻게 처리하고 있는지 +- **마지막 버전** : 코드 유지관리가 잘 되고 있는지 +- **발견된 취약점** : 특정 버전에서 취약점이 발견 되었는지, 결함이 제거된 버전이 공개되어 있는지 + +취약점 검색 사이트: + +| 이름 | 주소 | 설명 | +|------|------|------| +| NIST(National Vulnerability Database) | https://nvd.nist.gov/vuln/search | 미국국립표준기술연구소에서 제공하는 취약점 검색 서비스 | +| CVEdetails | https://www.cvedetails.com | CVE 정보 검색, 통계 확인 등을 제공하는 온라인 서비스 | + +#### 다. 사후 관리 + +![SBOM 기반 취약점 대응 프로세스](figures/javascript/sbom_69.png) + +모든 API는 보안 취약점에서 완전히 자유로울 수 없다. 개발 제품에 오픈소스를 사용하는 경우 SBOM(Software Bill of Material)을 적용해야 한다. SBOM의 필수 구성요소: 공급자 이름, 컴포넌트 이름, 컴포넌트 버전, 컴포넌트 해시, 고유 특성자(UID), 의존 관계, 작성자 + +SBOM이 적용된 취약점 대응 프로세스: + +1. **신규 취약점 발생 인지** : 신규 취약점 모니터링 과정에서 발견된 신규 취약점 위협 정보 입수 +2. **SBOM 목록 탐색** : 운용 중인 제품의 SBOM 목록에 신규 취약점 관련 컴포넌트가 있는지 탐색 +3. **취약점 발생 대응** : 사내 정보 공유, 보안 솔루션 정책 반영, 소스코드 수정/예외처리 +4. **패키지 업데이트** : 취약점 개선 버전을 소프트웨어 패키지에 적용 +5. **SBOM 목록 최신화** : 취약점 개선 버전이 반영된 패키지의 세부 정보를 SBOM 목록에 반영 + +#### 라. 참고자료 + +- [NTIA - SBOM](https://www.ntia.gov/page/software-bill-materials) +- [CISA - SBOM](https://www.cisa.gov/sbom) + +--- + +# 제3장 부록 + +## 제1절 구현단계 보안약점 제거 기준 + +### 1. 입력데이터 검증 및 표현 + +| 번호 | 보안약점 | 설명 | +|------|---------|------| +| 1 | SQL 삽입 | SQL 질의문을 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 질의문이 실행가능한 보안약점 | +| 2 | 코드 삽입 | 프로세스가 외부 입력값을 코드로 해석·실행할 수 있고 검증되지 않은 외부 입력값을 허용한 경우 악의적인 코드가 실행 가능한 보안약점 | +| 3 | 경로 조작 및 자원 삽입 | 시스템 자원 접근경로 또는 자원제어 명령어에 검증되지 않은 외부 입력값을 허용하여 시스템 자원에 무단 접근 및 악의적인 행위가 가능한 보안약점 | +| 4 | 크로스사이트 스크립트 | 사용자 브라우저에 검증되지 않은 외부 입력값을 허용하여 악의적인 스크립트가 실행 가능한 보안약점 | +| 5 | 운영체제 명령어 삽입 | 운영체제 명령어를 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 명령어가 실행 가능한 보안약점 | +| 6 | 위험한 형식 파일 업로드 | 파일의 확장자 등 파일형식에 대한 검증없이 파일 업로드를 허용하여 공격이 가능한 보안약점 | +| 7 | 신뢰되지 않는 URL 주소로 자동접속 연결 | URL 링크 생성에 검증되지 않은 외부 입력값을 허용하여 악의적인 사이트로 자동 접속 가능한 보안약점 | +| 8 | 부적절한 XML 외부 개체 참조 | 임의로 조작된 XML 외부개체에 대한 적절한 검증 없이 참조를 허용하여 공격이 가능한 보안약점 | +| 9 | XML 삽입 | XQuery, XPath 질의문을 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 질의문이 실행 가능한 보안약점 | +| 10 | LDAP 삽입 | LDAP 명령문을 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 명령어가 실행 가능한 보안약점 | +| 11 | 크로스사이트 요청 위조 | 사용자 브라우저에 검증되지 않은 외부 입력값을 허용하여 사용자 본인의 의지와는 무관하게 공격자가 의도한 행위가 실행 가능한 보안약점 | +| 12 | 서버사이드 요청 위조 | 서버 간 처리되는 요청에 검증되지 않은 외부 입력값을 허용하여 공격자가 의도한 서버로 전송하거나 변조하는 보안약점 | +| 13 | HTTP 응답분할 | HTTP 응답헤더에 개행문자가 포함된 검증되지 않은 외부 입력값을 허용하여 악의적인 코드가 실행 가능한 보안약점 | +| 14 | 정수형 오버플로우 | 정수형 변수에 저장된 값이 허용된 정수 값 범위를 벗어나 프로그램이 예기치 않게 동작 가능한 보안약점 | +| 15 | 보안기능 결정에 사용되는 부적절한 입력값 | 보안기능 결정에 검증되지 않은 외부 입력값을 허용하여 보안기능을 우회하는 보안약점 | +| 16 | 메모리 버퍼 오버플로우 | 메모리 버퍼의 경계값을 넘어서 메모리값을 읽거나 저장하여 예기치 않은 결과가 발생하는 보안약점 | +| 17 | 포맷 스트링 삽입 | 포맷 스트링 제어함수에 검증되지 않은 외부 입력값을 허용하여 발생하는 보안약점 | + +### 2. 보안기능 + +| 번호 | 보안약점 | 설명 | +|------|---------|------| +| 1 | 적절한 인증 없는 중요 기능 허용 | 중요정보를 적절한 인증없이 열람(또는 변경) 가능한 보안약점 | +| 2 | 부적절한 인가 | 중요자원에 접근할 때 적절한 제어가 없어 비인가자의 접근이 가능한 보안약점 | +| 3 | 중요한 자원에 대한 잘못된 권한 설정 | 중요자원에 적절한 접근 권한을 부여하지 않아 중요정보가 노출·수정 가능한 보안약점 | +| 4 | 취약한 암호화 알고리즘 사용 | 취약한 암호화 알고리즘을 사용하여 정보가 노출 가능한 보안약점 | +| 5 | 암호화되지 않은 중요정보 | 중요정보 전송/저장 시 암호화 하지 않아 정보가 노출 가능한 보안약점 | +| 6 | 하드코드된 중요정보 | 소스코드에 중요정보를 직접 코딩하여 소스코드 유출 시 중요정보가 노출되는 보안약점 | +| 7 | 충분하지 않은 키 길이 사용 | 암호화 등에 사용되는 키의 길이가 충분하지 않아 기밀성·무결성을 보장할 수 없는 보안약점 | +| 8 | 적절하지 않은 난수 값 사용 | 사용한 난수가 예측 가능하여 공격자가 시스템을 공격 가능한 보안약점 | +| 9 | 취약한 패스워드 허용 | 패스워드 조합규칙 미흡 및 길이가 충분하지 않아 패스워드가 노출 가능한 보안약점 | +| 10 | 부적절한 전자서명 확인 | 전자서명에 대한 유효성 검증이 적절하지 않아 악의적인 코드가 실행 가능한 보안약점 | +| 11 | 부적절한 인증서 유효성 검증 | 인증서에 대한 유효성 검증이 적절하지 않아 발생하는 보안약점 | +| 12 | 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출 | 쿠키를 사용자 하드디스크에 저장하여 중요정보가 노출 가능한 보안약점 | +| 13 | 주석문 안에 포함된 시스템 주요정보 | 소스코드 주석문에 인증정보 등 시스템 주요정보가 포함되어 노출 가능한 보안약점 | +| 14 | 솔트 없이 일방향 해쉬 함수 사용 | 솔트를 사용하지 않고 생성된 해쉬 값으로부터 원본 정보를 복원가능한 보안약점 | +| 15 | 무결성 검사 없는 코드 다운로드 | 소스코드 또는 실행파일을 무결성 검사 없이 다운로드 받아 실행하는 보안약점 | +| 16 | 반복된 인증시도 제한 기능 부재 | 인증 시도 수를 제한하지 않아 공격자가 반복적으로 계정 권한을 획득 가능한 보안약점 | + +### 3. 시간 및 상태 + +| 번호 | 보안약점 | 설명 | +|------|---------|------| +| 1 | 경쟁조건 : 검사 시점과 사용 시점 | 멀티 프로세스 상에서 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안약점 | +| 2 | 종료되지 않는 반복문 또는 재귀함수 | 종료조건 없는 제어문 사용으로 반복문 또는 재귀함수가 무한히 반복되어 발생할 수 있는 보안약점 | + +### 4. 에러처리 + +| 번호 | 보안약점 | 설명 | +|------|---------|------| +| 1 | 오류 메시지 정보노출 | 오류메시지나 스택정보에 시스템 내부구조가 포함되어 민감한 정보가 노출 가능한 보안약점 | +| 2 | 오류상황 대응 부재 | 시스템 오류상황을 처리하지 않아 의도하지 않은 상황이 발생 가능한 보안약점 | +| 3 | 부적절한 예외처리 | 예외사항을 부적절하게 처리하여 의도하지 않은 상황이 발생 가능한 보안약점 | + +### 5. 코드오류 + +| 번호 | 보안약점 | 설명 | +|------|---------|------| +| 1 | Null Pointer 역참조 | 변수의 주소 값이 Null인 객체를 참조하는 보안약점 | +| 2 | 부적절한 자원 해제 | 사용 완료된 자원을 해제하지 않아 자원이 고갈되는 보안약점 | +| 3 | 해제된 자원 사용 | 메모리 등 해제된 자원을 참조하여 예기치 않은 오류가 발생하는 보안약점 | +| 4 | 초기화되지 않은 변수 사용 | 변수를 초기화하지 않고 사용하여 예기치 않은 오류가 발생하는 보안약점 | +| 5 | 신뢰할 수 없는 데이터의 역직렬화 | 악의적인 코드가 삽입·수정된 직렬화 데이터를 적절한 검증 없이 역직렬화하여 발생하는 보안약점 | + +### 6. 캡슐화 + +| 번호 | 보안약점 | 설명 | +|------|---------|------| +| 1 | 잘못된 세션에 의한 데이터 정보노출 | 잘못된 세션에 의해 인가되지 않은 사용자에게 중요정보가 노출 가능한 보안약점 | +| 2 | 제거되지 않고 남은 디버그 코드 | 디버깅을 위한 코드를 제거하지 않아 중요정보가 노출 가능한 보안약점 | +| 3 | Public 메서드로부터 반환된 Private 배열 | Public 메소드에서 Private 배열을 반환하면 외부에서 수정 가능한 보안약점 | +| 4 | Private 배열에 Public 데이터 할당 | Public 데이터가 Private 배열에 저장되면 외부에서 접근하여 수정 가능한 보안약점 | + +### 7. API 오용 + +| 번호 | 보안약점 | 설명 | +|------|---------|------| +| 1 | DNS lookup에 의존한 보안결정 | 도메인명 확인으로 보안결정을 수행할 때 악의적으로 변조된 DNS 정보로 보안위협에 노출되는 보안약점 | +| 2 | 취약한 API 사용 | 취약한 함수를 사용해서 예기치 않은 보안위협에 노출되는 보안약점 | + +--- + +## 제2절 용어정리 + +- **AES(Advanced Encryption Standard)**: 미국 정부 표준으로 지정된 블록 암호 형식으로 이전의 DES를 대체하며, NIST가 2001년 연방 정보처리표준(FIPS 197)으로 발표하였다. +- **DES 알고리즘**: 암호화 키와 복호화키가 같은 대칭키 암호로 64비트의 암호화키를 사용한다. 전수공격(Brute Force)공격에 취약하다. +- **HMAC(Hash-based Message Authentication Code)**: 해쉬 기반 메시지 인증 코드, MD5, SHA-1 등 반복적인 암호화 해쉬 기능을 비밀 공용키와 함께 사용하는 키 기반의 메시지 인증 알고리즘이다. +- **HTTPS**: WWW 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. +- **LDAP(Lightweight Directory Access Protocol)**: TCP/IP 위에서 디렉토리 서비스를 조회하고 수정하는 응용 프로토콜이다. +- **SHA(Secure Hash Algorithm)**: 해쉬알고리즘의 일종으로 MD5의 취약성을 대신하여 사용한다. SHA, SHA-1, SHA-2 등의 다양한 버전이 있다. +- **umask**: 파일 또는 디렉토리의 권한을 설정하기 위한 명령어이다. +- **개인키(Private Key)**: 공개키 기반구조에서 암·복호화를 위해 비밀 메시지를 교환하는 당사자만이 알고 있는 키이다. +- **공개키(Public Key)**: 지정된 인증기관에 의해 제공되는 키값으로서, 개인키와 함께 결합되어 메시지 및 전자서명의 암·복호화에 사용된다. +- **경로순회(directory traversal)**: 상대경로 참조 방식을 이용해 다른 디렉토리의 중요파일에 접근하는 공격방법이다. +- **동적 SQL(Dynamic SQL)**: 프로그램의 조건에 따라 SQL문이 다르게 생성되는 경우, 프로그램 실행 시에 전체 쿼리문이 완성되어 DB에 요청하는 SQL문을 말한다. +- **동적 쿼리(Dynamic Query)**: 컬럼이나 테이블명을 바꿔 SQL 쿼리를 실시간 생성해 DB에 전달하여 처리하는 방식이다. +- **소프트웨어 개발보안**: 소프트웨어 개발과정에서 보안취약점을 최소화하고, 해킹 등 보안위협에 대응할 수 있는 안전한 소프트웨어를 개발하기 위한 일련의 과정이다. +- **소프트웨어 보안약점**: 소프트웨어 결함, 오류 등으로 해킹 등 사이버공격을 유발할 가능성이 있는 잠재적인 보안취약점을 말한다. +- **싱글톤 패턴(Singleton Pattern)**: 하나의 프로그램 내에서 하나의 인스턴스만을 생성해야만 하는 패턴이다. +- **정적 쿼리(Static Query)**: 프로그램 소스코드에 이미 쿼리문이 완성된 형태로 고정되어 있다. +- **해쉬함수**: 주어진 원문에서 고정된 길이의 의사난수를 생성하는 연산기법이다. +- **화이트 리스트(White List)**: 신뢰할 수 있는 사이트나 IP주소 목록을 말한다. +- **파싱(Parsing)**: 일련의 문자열을 의미 있는 token으로 분해하고 Parse tree를 만드는 과정이다. +- **파서(Parser)**: 컴파일러의 일부로 원시 프로그램을 읽어 들여 구문 분석을 행하는 프로그램이다. +- **XML(eXtensible Markup Language)**: W3C에서 개발되었으며, 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고받을 수 있도록 만들어졌다. +- **DTD(Document Type Definition)**: XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의한다. +- **공개 키 인증서(Public Key Certificate)**: 공개키의 소유권을 증명하는데 사용되는 전자 문서이다. +- **솔트(salt)**: 해싱 처리 과정 중 각 패스워드에 추가되는 랜덤으로 생성된 유일한 문자열을 의미한다. diff --git "a/\353\254\270\354\204\234/OT_\355\231\230\352\262\275\354\235\230_\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\240\201\354\232\251_\354\225\210\353\202\264\354\204\234.md" "b/\353\254\270\354\204\234/OT_\355\231\230\352\262\275\354\235\230_\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\240\201\354\232\251_\354\225\210\353\202\264\354\204\234.md" new file mode 100644 index 0000000..ced80b4 --- /dev/null +++ "b/\353\254\270\354\204\234/OT_\355\231\230\352\262\275\354\235\230_\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\240\201\354\232\251_\354\225\210\353\202\264\354\204\234.md" @@ -0,0 +1,2553 @@ +# 251222_OT_환경의_제로트러스트_적용_안내서 (1).pdf + +> Converted: 2026-04-03 02:57 +> Method: authorkit-juice v2 (caption-matched, size-filtered) + +--- + +2025. 12 +OT +Operational +Technology 환경의 +제로트러스트 적용 안내서 + +2025. 12 +OT +Operational +Technology 환경의 +제로트러스트 적용 안내서 + +[OT 대상 사이버 공격의 양상] OT 대상 사이버 공격은 물리적 피해 뿐만 아니라 사회적 혼란을 초래할 +수 있어 국가 지원 해킹조직들이 국가 핵심 인프라 마비를 위해 OT 인프라를 전략적으로 공격하여 국가 +안보에 심각한 영향 +IT 대상 침해사고가 주로 데이터 탈취나 서비스 지연에 그치는 것과 달리, OT를 대상으로 한 사이버 +공격은 설비 오작동, 생산 중단, 정전, 장비 파손 등 물리적 피해로 직결되어 사회 전반에 훨씬 +더 큰 피해 발생 +제조·에너지·교통·발전 등 핵심 인프라 부문에서 스마트팩토리·원격제어·데이터 분석을 위한 관제 +서버 및 클라우드 등 외부 연결성이 증가하면서, 공격 표면이 증가하고 있으며 폐쇄망 중심 보안은 +더 이상 실효성을 갖지 못함 +OT 제어 장치를 직접 감염시키는 등 더욱 정교한 방식의 공격들이 등장하고 있으며, 국가 지원 +해킹조직들은 전력망·원자력·수도·교통과 같은 국가 핵심 인프라를 마비시키고자 함으로써 사실상 +국가 안보에 심각한 영향 +[OT 보안의 특성] 망분리 등 경계 기반 OT 보안 모델 역시 내부 침투 공격에 노출될 수 있으며, 레거시 +장비에 의존하고 가용성과 실시간성을 요구하는 환경의 특성상 취약점 점검 및 보안 기술 적용이 어려움 +망분리로 인터넷 등 외부와 연결이 되어 있지 않아 안전하다는 인식이 있으나, USB를 통한 물리적 +침해, 팀 뷰어 및 소프트웨어 업데이트 등을 통한 내부망 침투 사례 존재 + - Stuxnet은 USB를 통한 물리적 침해를 수행하였고, 미국 올즈마 수도 시설 공격은 팀 뷰어를 통한 내부망 +침투, 후쿠이현 몬주 핵 발전소 공격은 소프트웨어 업데이트를 통하여 내부망 침투 수행 + - 망분리에 의존함으로써 내부망에 들어온 주체를 기본적으로 신뢰하는 구조는, 상대적으로 내부에 대한 +모니터링 및 가시성 확보 등에 소홀하여 내부 침투 대응이 매우 미흡 +가용성과 실시간성을 최우선으로 요구하는 환경의 특성상 취약점 점검·보안 패치·보안 장비 설치조차 +쉽게 적용하기 어려워 이미 알려진 취약점이 장기간 방치되거나 대응이 지연되는 구조적 한계 존재 + - 보안 패치로 인한 시스템 재부팅 시 설정 데이터가 초기화될 수 있고, 아주 작은 확률이지만 시스템 장애가 +발생할 가능성으로 인해 취약점 패치가 지연되거나 아예 방치되는 경우 존재 + - 보안 시스템이 (아주 작은 확률이라도) 정상 패킷을 차단할 경우 OT 시스템에 심각한 장애를 유발할 수 +있어 필터링 기능을 적극적으로 활용하지 못하고, 실시간성 보장을 위해 강한 인증 및 암호화 기술의 적용이 +어려워, 주로 수동적 보안 기법에 의존하는 한계 + - 오래된 PLC/RTU/SCADA 장비 등 OT 시스템은 기본적인 보안 기능조차 탑재되지 않아 외부 공격에 그대로 +노출되거나 제어 명령 위변조, 불법 접근에 취약한 경우가 많으며, IT와 다른 복잡한 구조하에 다양한 장비가 +혼재되어 있어 자산 식별 및 보안 정책의 일관된 적용이 어려움 + +![이미지 p.3](images/p0003_img0.png) + + +[OT 특화 제로트러스트의 필요성] 내부 침투를 가정하는 제로트러스트 전략은 경계기반 보안에 의존하는 +OT 환경에서도 횡적 이동 및 공격 완화에 효과적일 것으로 판단되나 OT 환경이 갖는 특성으로 인하여 +IT와 다른 제로트러스트 전략 필요 +IT 제로트러스트는 리소스·데이터 접근제어를 위한 지속적인 인증 및 동적 검증, 비정상 접근 차단, +보안 패치 등을 통하여 탐지 및 대응을 강화하고 있으나, 이로 인한 지연, 정상 패킷 차단 등이 +발생 +구분 +IT 제로트러스트에서의 가정 +OT 환경의 제약·한계 +목표/우선 순위 +- 보안·기밀성 중심, 일정 수준의 지연·단기 +서비스 중단은 허용 가능 +- 가용성·실시간성 최우선, 제어 신호 지연 시 생산 +중단·안전사고로 직결 +패치·업데이트 +- 정기적 패치·보안 기능 확장을 전제로 안정적 +운영 가능 +- 레거시 시스템으로 인해 패치 지연·적용 제한, +취약점 방치 위험 +네트워크 구조 +- 단일 네트워크·클라우드 중심 접근제어 구조 +- Purdue 모델 기반 계층 구조로 레벨별 자산 특성 +따라 보안 요구 상이 +로그·가시성 +- 표준 프로토콜 기반 중앙 로그·SIEM 분석 +가정 +- 산업용 프로토콜 특성으로 기존 IT 보안 솔루션과 +호환성이 낮아, 네트워크·자산 가시성 확보 제한 +[국내외 OT 특화 제로트러스트 정책] 미국 등 글로벌 주요국은 OT 특화 제로트러스트 전략을 추진하고 +있으나, 국내에는 현재 개념 정립이 이루어지지 않음 +미국 원자력규제위원회(NRC)는 SMR(소형모듈원자로)1) 등 차세대 원자로에 디지털 기술이 도입 +되면서 기존 보안 아키텍처 한계 인식 및 제로트러스트 도입 방안 연구 중에 있으며, 클라우드보안 +협회(CSA)는 중요기반시설 및 ISC 환경에서 제로트러스트 적용 가이드 연구 및 문서 발간 +미 국방부는 OT 환경의 특성을 반영한 제로트러스트 전략을 2025년 11월 발표하였으며 OT를 +운영 계층과 프로세스 제어 계층으로 구분하고 총 105개의 제로트러스트 활동(84개 목표 수준 +활동, 21개 개선 수준 활동)에 대한 결과를 설명 +일본과 싱가포르 등은 OT 보안 규제와 가이드를 강화하여 보안성 향상 +국내 OT 보안은 국가 차원의 공통 지침과 발전·전력·제조 등 산업별 특화 가이드라인을 통해 최소 +보안수준과 현장 적용성을 확보하고 있으나 제로트러스트 전략 적용 및 검증이 이루어지지 않았으며, +상기 해외 사례들은 차후 국내 OT 제로트러스트 로드맵 수립 및 거버넌스 모델 구축에 참조 가능 +1) SMR(Small Modular Reactor, 소형모듈원자로): 소형 원자로를 공장에서 모듈 형태로 제작한 뒤, 현장에서 조립하여 건설 기간과 +비용을 단축하고 안전성과 유연성을 높인 원자로 + +| 구분 | IT 제로트러스트에서의 가정 | OT 환경의 제약·한계 | +| --- | --- | --- | +| 목표/우선 순위 | ∙보안·기밀성 중심, 일정 수준의 지연·단기 서비스 중단은 허용 가능 | ∙가용성·실시간성 최우선, 제어 신호 지연 시 생산 중단·안전사고로 직결 | +| 패치·업데이트 | ∙정기적 패치·보안 기능 확장을 전제로 안정적 운영 가능 | ∙레거시 시스템으로 인해 패치 지연·적용 제한, 취약점 방치 위험 | +| 네트워크 구조 | ∙단일 네트워크·클라우드 중심 접근제어 구조 | ∙Purdue 모델 기반 계층 구조로 레벨별 자산 특성 따라 보안 요구 상이 | +| 로그·가시성 | ∙표준 프로토콜 기반 중앙 로그·SIEM 분석 가정 | ∙산업용 프로토콜 특성으로 기존 IT 보안 솔루션과 호환성이 낮아, 네트워크·자산 가시성 확보 제한 | + + +![이미지 p.4](images/p0004_img1.png) + + +[OT 특화 제로트러스트 적용 방안] 가용성과 실시간성을 중시하는 OT 고유 특성을 고려하여 OT 제로 +트러스트 핵심 원칙, 고려 사항 도출 및 OT망에 적합한 제로트러스트 아키텍처 설계 필요 +OT 특화 제로트러스트를 위한 핵심 원칙으로는 실시간성·가용성 유지, OT 장비의 독립성 유지라는 +OT의 특성과 함께 OT·IT 전역에서의 침해 가정, 지속적 모니터링이라는 제로트러스트 원칙이 +공통적으로 적용되어야 함 +핵심원칙 +설명 +실시간성·가용성 유지 +- 인증·검증 및 소프트웨어 패치 과정에서 지연이나 중단이 발생하지 않도록 안전 장치와 +이중화 구조를 마련해야 함 +OT 장비의 독립성 +유지 +- 현장 장비는 외부 서버나 네트워크 상태와 관계없이 최소한의 정책 판단 능력을 유지하며, +자율적으로 신뢰 결정을 지속할 수 있어야 함 +OT·IT 전역에서의 +침해 가정 +- OT와 IT망 상관없이 공격자가 이미 내부에 있다고 전제하고, 마이크로세그멘테이션·DPI +(Deep Packet Inspection)·이상 행위 기반 탐지 등을 통해 횡적 이동을 차단해야 함 +지속적 모니터링 +- OT 트래픽의 결정적 특성을 활용해 기준선을 마련하고, 이상 징후를 탐지할 수 있는 중앙 +로그 관리·SIEM 체계를 마련해야 함 +IT망과 OT망을 병행 운영하는 조직에서 두 환경에 대한 일치된 보안 정책 제공, 관리 혼선 최소화 +등을 위하여 IT-OT를 동시에 아우르는 제로트러스트 핵심 요소 및 기능 요구사항 정의 필요 +OT 특화 제로트러스트 도입을 위한 기관별 로드맵의 경우 CSA를 참조한 5단계 구조를 적극 고려 + - ① OT 자산 식별 및 보호 대상 정의, ② OT 트래픽 및 운영 흐름 가시화, ③ 제로트러스트 아키텍처 설계, +④ 제로트러스트 정책 수립 및 구현, ⑤ 지속적 모니터링 및 유지관리 + - OT 환경에서 제로트러스트는 일괄 구축이 아닌 보호 대상 소규모 정의 후 점진적·단계적 검증 및 확장을 +통해 안정성과 효율성을 함께 확보해야 함 +[OT 특화 제로트러스트 도입 시사점] OT 보안 강화를 위한 국가 차원의 전략 수립, 제도·정책 고도화, +신기술 기반 대응 역량 강화 필요 +OT 보안은 국가안보 차원에서 접근해야 하며, 환경 변화에 따르는 국가 차원의 OT 제로트러스트 +전략 수립을 통하여 고도화되는 위협에 대응 필요 +미국 등 글로벌 선진국 역시 OT 보안을 위하여 제로트러스트 도입을 천명하고 있는 것과 같이, +국내에서도 기존 제도를 보완함으로써 개별 지침이나 기술이 아닌 운영·정책·관리 체계를 포괄하는 +프레임워크로 동작할 수 있는 제도·정책 마련 및 기술 역량 강화 필요 + +| 핵심원칙 | 설명 | +| --- | --- | +| 실시간성·가용성 유지 | ∙인증·검증 및 소프트웨어 패치 과정에서 지연이나 중단이 발생하지 않도록 안전 장치와 이중화 구조를 마련해야 함 | +| OT 장비의 독립성 유지 | ∙현장 장비는 외부 서버나 네트워크 상태와 관계없이 최소한의 정책 판단 능력을 유지하며, 자율적으로 신뢰 결정을 지속할 수 있어야 함 | +| OT·IT 전역에서의 침해 가정 | ∙OT와 IT망 상관없이 공격자가 이미 내부에 있다고 전제하고, 마이크로세그멘테이션·DPI (Deep Packet Inspection)·이상 행위 기반 탐지 등을 통해 횡적 이동을 차단해야 함 | +| 지속적 모니터링 | ∙OT 트래픽의 결정적 특성을 활용해 기준선을 마련하고, 이상 징후를 탐지할 수 있는 중앙 로그 관리·SIEM 체계를 마련해야 함 | + + +![이미지 p.5](images/p0005_img3.png) + + +![이미지 p.6](images/p0006_img0.png) + + +![이미지 p.7](images/p0007_img0.png) + + +서론 +1-1 문서 발간 배경················································································· 8 +1-2 문서 발간 목적················································································· 9 +1-3 문서 구성························································································· 9 +OT 및 제로트러스트 개요 +2-1 OT(운영 기술) ··············································································· 10 +2-2 제로트러스트(Zero Trust) ···························································· 15 +OT 특화 제로트러스트(OT ZT)의 필요성 +3-1 OT 위협 사례················································································ 20 +3-2 OT 환경 특성 및 고유 취약점························································ 25 + +### 3-3 OT 환경에서의 제로트러스트 필요성············································ 28 + +국내외 OT 특화 제로트러스트 정책 동향 및 적용 사례 +4-1 해외 동향······················································································· 31 +4-2 국내 동향······················································································· 45 +OT 특화 제로트러스트 적용 방안 +5-1 OT ZT 핵심 원칙 및 고려 사항······················································ 49 +5-2 OT ZT 적용 방안··········································································· 50 +5-3 OT ZT 도입 로드맵······································································· 54 +결론 +용어 정의································································································ 61 +참고문헌································································································· 63 + +![이미지 p.8](images/p0008_img0.png) + + +![이미지 p.8](images/p0008_img1.png) + + +![이미지 p.8](images/p0008_img2.png) + + +![이미지 p.8](images/p0008_img3.png) + + +![이미지 p.8](images/p0008_img4.png) + + +![이미지 p.8](images/p0008_img5.png) + + +![이미지 p.8](images/p0008_img6.png) + + +# 제1장 서 론 + +1-1 +문서 발간 배경 +OT(Operational Technology)/ICS(Industrial Control System)는 제조, 에너지, 발전, 운송 등 국가 핵심 +인프라의 안정적 운영을 담당하는 핵심 기술 영역으로, 산업 현장의 설비·공정을 실시간으로 제어하고 운영 +효율을 극대화하는 데 필수적 +최근 산업계 전반에서 디지털 전환(Digital Transformation)과 스마트팩토리, 원격진단 및 유지보수, +원격제어 등 운영 효율성·생산성 향상을 위한 외부 연결이 증가하면서 OT 환경은 더 이상 완전한 폐쇄망 +구조를 유지하기 어려운 상황에 직면 +또한, 기존 망분리 중심 폐쇄망 보안 전략은 공격 경로가 원천 차단될 것이라는 믿음으로 내부 네트워크 +방어 및 가시성에 소홀하게 되어 내부 위협, 공급망 공격 등 내부 침투 공격에 취약할 뿐만 아니라, 원격 +진단·유지보수·제어를 위한 외부 연결이 새로운 침투 경로 역할을 할 가능성이 생기고 있음 +최근 IT 기반 기업·기관 업무망 환경에서는 내부·공급망 위협에 대해 위험을 완화할 수 있는 제로트러스트 +전략이 주목을 끌고 있으며, 많은 곳에서 제로트러스트 전략을 만족하기 위한 최신 보안 기술을 도입하고 +있음 +이에 따라 OT 환경에서도 “신뢰하지 말고, 항상 검증하라(Never Trust, Always Verify)”는 원칙을 +기반으로 하는 제로트러스트(Zero Trust) 보안 모델 적용이 강하게 요구되고 있음 +기존 IT 환경에서 최근 각광받고 있는 제로트러스트 보안 모델을 변형·구성하여 OT 환경에 적합한 제로트러스트 +보안 모델에 대한 가이드 제정 필요 +제로트러스트 보안 모델은 내부에 이미 공격자가 존재할 수 있음을 가정한다는 면에서 기존보다 높은 +수준의 보안 기술을 요구하고 있으나, OT/ICS 환경은 적용 기술(시스템, 통신 방식 등)이 다르고 실시간성· +가용성·제어안정성을 핵심 요구사항으로 둔다는 면에서 IT 환경과 상이하여 기존 제로트러스트 보안 +모델의 직접적 적용에 한계가 있어 OT 특성에 맞춘 변형·보완 필요 +OT/ICS 환경을 위한 보안 책임자 및 실무자는 제로트러스트 보안 모델 구축 방안에 대한 사례, 가이드 +등이 존재하지 않아 도입이 어려움 + +![이미지 p.9](images/p0009_img0.png) + + +![이미지 p.9](images/p0009_img1.png) + + +![이미지 p.9](images/p0009_img2.png) + + +1-2 +문서 발간 목적 +본 문서의 목적은 OT 및 제로트러스트 보안 모델에 대한 기본적인 이해 제고 및 국가 핵심 인프라 보호를 위한 +OT 제로트러스트 적용 전략 제시 +보안 책임자·실무자 뿐만 아니라 보안에 대한 전문성이 부족한 경영진(C레벨) 및 일반 직원들도 OT 보안의 +중요성과 특수성을 이해할 수 있도록 기본 개념 및 기술적 특성 소개·설명 +제로트러스트의 핵심 원리와 아키텍처를 소개하고, 이를 OT 환경에 적용하기 위한 세부 기술 및 단계별 +접근 전략 제시 +국내외 정책·표준 동향과 향후 로드맵 및 시사점을 제시하여, 공공·민간 부문에서의 OT 제로트러스트 +도입·확산을 위한 기반 자료로 활용될 수 있도록 함 +1-3 +문서 구성 +본 문서는 OT 환경에서 제로트러스트 보안 모델을 도입하기 위한 정책적·기술적 방향성을 제시하기 위해 총 +6장으로 구성 +제1장에서는 문서 발간의 배경과 목적 설명 및 OT 제로트러스트 연구 필요성과 본 문서 구성 체계 제시 +제2장은 OT와 IT(Information Technology)의 구조적 차이, 제로트러스트의 핵심 원리 및 아키텍처 +구성 요소 등 OT와 제로트러스트에 대한 개략적인 소개 +제3장에서는 최근 OT 환경을 대상으로 한 사이버 위협 사례를 분석하고, OT 환경 특성 및 고유 취약점으로 +인한 한계를 제시함과 동시에 OT 환경에 특화된 제로트러스트 접근의 필요성 제시 +제4장에서는 미국, 캐나다, 일본 등 주요 국가 및 국내 OT 제로트러스트 정책 동향을 분석하고 적용·실증 +사례 확보의 필요성 언급 +제5장에서는 OT 환경에서의 제로트러스트 적용 방안을 제안하기 위하여, OT 환경에서 제로트러스트를 +구현하기 위한 단계별 접근 전략과 기술 구성 요소, 그리고 Zone-Conduit 모델 기반의 세그멘테이션 +및 접근제어 방안 등을 포함하는 도입 로드맵을 구체적으로 제시 +제6장에서는 본 문서에서 다룬 주요 논의를 종합하여, 향후 OT 제로트러스트 도입·운영을 위한 제도적, +기술적, 조직적 방향성 제언 + +![이미지 p.10](images/p0010_img0.png) + + +# 제2장 OT 및 제로트러스트 개요 + +2-1 +OT(운영 기술) +▶OT는 산업 설비와 공정을 실시간으로 제어·운영하는 기술로, 전력·교통·에너지 등 국가 주요 인프라의 +안정적 운영에 핵심적 역할 수행 +▶OT 환경은 IT 환경과 달리 실시간성, 무중단 가용성, 장기 운용, 전용 프로토콜 등 상이한 기술적 특성을 +지니며, SCADA·DCS·PLC 등으로 구성됨 +▶IEC 62443 등 국제 표준은 OT 보안을 자산·시스템·제품 전주기에서 체계화한 국제 표준으로, Zone-Conduit +모델에 기반한 다계층 보안 통제와 보안 수준 관리 체계를 제시하여 조직의 일관된 보안 운영 지원 +OT는 하드웨어와 소프트웨어를 활용하여 산업용 장비를 제어·운영하는 기술로써 제조, 에너지, 교통, 스마트 +시티 등 다양한 산업에서 활용 +OT는 센서, 제어기, 액추에이터 등과 직접 연결되어 현장의 설비와 공정을 실시간으로 제어·감시하는 +역할 수행 +OT의 대표적 범주에는 산업제어시스템(Industrial Control Systems, ICS), BAS(Building Automation +Systems), ITS(Intelligent Transportation Systems) 등 포함 +OT는 IT와 대비되는 개념으로, OT는 산업 장비와 공정을 직접 제어·운영하는 기술인 반면 IT는 데이터 +처리와 정보 관리에 중점을 둠 +비교 항목 +OT (Operational Technology) +IT (Information Technology) +사고 영향 +사고 발생 시 인명·물리적 피해와 직결 +사고 발생시 경제적 피해 발생 +네트워크 성능 +강한 실시간 요구사항 +전체 성능(throughput)에 초점 +가용성 +무중단 운영되어야 함 +서비스 대부분은 시급성을 가지지 않음 +OS 및 시스템 +다양한 이기종의 HW, SW로 구성(VxWorks 등의 임베디드 OS) +범용 OS 사용(Window, Linux) +운용주기 +장기간의 운용 주기(10~30년)를 가지며 유지보수 어려움 +상대적으로 단기간의 운용 주기를 가짐 +프로토콜 +제어 표준 및 비공개 전용 프로토콜 사용 +범용 프로토콜 사용 +<표 1> 운영기술과 정보기술 차이 +출처) 저자 재구성 + +| 비교 항목 | OT (Operational Technology) | IT (Information Technology) | +| --- | --- | --- | +| 사고 영향 | 사고 발생 시 인명·물리적 피해와 직결 | 사고 발생시 경제적 피해 발생 | +| 네트워크 성능 | 강한 실시간 요구사항 | 전체 성능(throughput)에 초점 | +| 가용성 | 무중단 운영되어야 함 | 서비스 대부분은 시급성을 가지지 않음 | +| OS 및 시스템 | 다양한 이기종의 HW, SW로 구성(VxWorks 등의 임베디드 OS) | 범용 OS 사용(Window, Linux) | +| 운용주기 | 장기간의 운용 주기(10~30년)를 가지며 유지보수 어려움 | 상대적으로 단기간의 운용 주기를 가짐 | +| 프로토콜 | 제어 표준 및 비공개 전용 프로토콜 사용 | 범용 프로토콜 사용 | + + +![이미지 p.11](images/p0011_img0.png) + + +![이미지 p.11](images/p0011_img1.png) + + +![이미지 p.11](images/p0011_img2.png) + + +![이미지 p.11](images/p0011_img3.png) + + +![이미지 p.11](images/p0011_img4.png) + + +![이미지 p.11](images/p0011_img5.png) + + +OT는 물리적 환경과 직접 상호작용하며 상수도, 교통, 전력망, 발전소 등 국가 주요 인프라 운영에 +필수적으로 적용 +분야 +OT 적용 시스템 예시 +전력 및 에너지 +- (한국전력) 송·변전 SCADA 시스템, 배전자동화 시스템, 변전소 집중감시제어 시스템 +- (전력거래소) 전력계통운영시스템, 전력거래시스템 +- (한국수력원자력 및 5개 발전사) 발전소제어시스템 +- (한국가스공사) 천연가스배관망 원격감시제어시스템 +- (대한송유관공사) 송유관 원격감시제어시스템 +수자원 분야 +- (한국수자원공사) 수도통합운영시스템, 발전통합운영시스템, 댐홍수경보시스템 +- (지자체) 정수제어시스템 +철도 분야 +- (한국철도공사) 열차집중제어시스템, 전력계통집중원격감시시스템 +- (서울메트로, 서울도시철도공사) 열차신호 제어시스템 +항공 분야 +- (한국공항공사) 항로관제시스템 +- (인천국제공항공사) 수하물제어시스템, 공항운영정보시스템, 서울접근관제시스템 +교통 분야 +- (한국도로공사) 도로전광표지시스템 +- (경찰청) 교통신호제어시스템 +기타 분야 +- (선박) AIS(선박자동식별시스템), 화물 제어 및 모니터링 시스템, 전자 해도 표시 시스템 등 +- (항만) 항만 자동화 설비 제어시스템, 물류 관리 시스템, 항만 운영 관제 시스템 등 +- (스마트시티) 건물 에너지 관리 시스템 (BEMS), 스마트 가로등 시스템 등 +- (석유·가스) 시추, 정유, 가스 파이프라인 제어시스템 등 +<표 2> 분야별 OT 적용 시스템 예시 +출처) 저자 재구성 +OT는 산업 장비의 제어·운영을 위해 다양한 구성 요소와 외부와 망이 분리되어 있는 네트워크 환경으로 이루어짐 +OT는 SCADA, DCS, PLC, RTU 등 다양한 산업제어시스템으로 구성 + - SCADA(Supervisory Control And Data Acquisition): 광범위하게 분산된 자산을 원격에서 모니터링·제어하기 +위한 시스템으로, 전력 송배전망, 수자원, 가스·오일 유통, 대규모 인프라 관리에 주로 사용. 일부 발전·산업 시설에서는 +SCADA가 보조 감시계층으로 사용되기도 함 + - DCS(Distributed Control System): 여러 위치에 분산된 제어 장치를 중앙 제어실에서 통합 관리하여 전체 +시스템을 모니터링하고 제어하는 시스템 + - PLC(Programmable Logic Controller): 필드 디바이스(센서, 액추에이터 등)와 연결되어 공정을 자동 제어하는 +핵심 제어 장치 +* DCS는 대규모 연속 공정의 중앙 집중적 제어·모니터링에 적합하며, PLC는 장비·설비 단위의 로직 기반 시퀀스 제어나 빠른 +디지털 제어에 주로 사용 + - RTU(Remote Terminal Unit): 현장 계측기에서 수집한 데이터를 SCADA, HMI 등으로 전송하는 장치 + - HMI(Human Machine Interface): 기계가 인간과 통신할 수 있도록 해주는 사용자 인터페이스로 운영자가 시스템 +상태를 직관적으로 확인하고 제어 명령 입력에 사용 + +| 분야 | OT 적용 시스템 예시 | +| --- | --- | +| 전력 및 에너지 | ∙ (한국전력) 송·변전 SCADA 시스템, 배전자동화 시스템, 변전소 집중감시제어 시스템 ∙ (전력거래소) 전력계통운영시스템, 전력거래시스템 ∙ (한국수력원자력 및 5개 발전사) 발전소제어시스템 ∙ (한국가스공사) 천연가스배관망 원격감시제어시스템 ∙ (대한송유관공사) 송유관 원격감시제어시스템 | +| 수자원 분야 | ∙ (한국수자원공사) 수도통합운영시스템, 발전통합운영시스템, 댐홍수경보시스템 ∙ (지자체) 정수제어시스템 | +| 철도 분야 | ∙ (한국철도공사) 열차집중제어시스템, 전력계통집중원격감시시스템 ∙ (서울메트로, 서울도시철도공사) 열차신호 제어시스템 | +| 항공 분야 | ∙ (한국공항공사) 항로관제시스템 ∙ (인천국제공항공사) 수하물제어시스템, 공항운영정보시스템, 서울접근관제시스템 | +| 교통 분야 | ∙ (한국도로공사) 도로전광표지시스템 ∙ (경찰청) 교통신호제어시스템 | +| 기타 분야 | ∙ (선박) AIS(선박자동식별시스템), 화물 제어 및 모니터링 시스템, 전자 해도 표시 시스템 등 ∙ (항만) 항만 자동화 설비 제어시스템, 물류 관리 시스템, 항만 운영 관제 시스템 등 ∙ (스마트시티) 건물 에너지 관리 시스템 (BEMS), 스마트 가로등 시스템 등 ∙ (석유·가스) 시추, 정유, 가스 파이프라인 제어시스템 등 | + + +12 󰠾 OT 환경의 제로트러스트 적용 안내서 + - EWS(Engineering Work Station): PLC와 같은 발전소의 제어시스템을 설계, 구성, 유지보수하는 데 사용하는 +워크스테이션 + - MTU(Master Terminal Unit): 현장(원격) 장치로부터 데이터를 수집하고 제어 명령을 내려보내는 역할을 수행, +다수의 RTU와 연결되어 정보를 수집 + - Historian: 데이터를 장기간 저장하고 분석하기 위한 데이터베이스 시스템 + - Field Device: 센서, 액추에이터, 밸브, 모터, 계측기 등과 같은 현장 장치로써 PLC/RTU에 연결되어 데이터를 +전달하거나 제어 명령을 수행 +<그림 1> OT 환경 내 구성 요소 현황 +출처) 저자 작성 +OT 환경은 일반적으로 IT망(업무망) 환경과 분리되어 있으며 에어갭(Air-Gap)에 기반한 망분리와 +네트워크 세그멘테이션을 통한 내부망으로 구성 + - OT망은 필드 디바이스 망, 제어망으로 구성되며 IT망(업무망)과 물리적·논리적으로 분리되어 외부망 연결을 +최소화하여 보안성을 강화함 + - 망분리는 방화벽, 일방향 자료 전달 장치 등을 사용하여 외부에서 내부의 데이터 유입을 차단 +* 일방향 자료전달 장치는 물리적·논리적으로 한 방향으로만 데이터 전송이 가능하게 하여 내부에서 외부망으로만 데이터를 +전달하는 기술 +전통적으로 OT망은 Purdue 모델을 이용해 Level 0부터 Level 4까지 네트워크 계층을 구분(Level 4: +IT 환경인 업무망, Level 0~Level 3: OT망) + - Level 4: 비즈니스 망으로써 기업의 IT 시스템들이 위치하는 계층, OT망에서 올라온 데이터를 활용하여 경영, +자원 관리 등을 수행함 + - DMZ 망: 비즈니스 망과 OT망 사이에 위치하는 망으로써 데이터 교환 서버, 패치관리 서버, 백신 관리 서버, 가상 +사설망(VPN) 시스템 등이 위치 + - Level 3: 생산 관리, 운영 시스템이 위치하는 계층으로 Historian, MES(Manufacturing Execution System) +등이 존재 + - Level 2: 운영자 인터페이스가 존재하는 계층으로 HMI, SCADA 시스템, EWS 등이 존재하여 실시간 모니터링, +제어, 경보 처리 등 운영자가 개입하는 영역 + +![그림 1> OT 환경 내 구성 요소 현황](images/p0013_img0.png) + + + - Level 1: 센서/액추에이터와 직접 연결된 제어 장치들이 위치하는 계층으로 PLC, RTU와 같은 장치들이 존재 + - Level 0: 실제 산업 현장의 물리적 설비와 프로세스가 위치하는 계층으로 센서, 액추에이터, 모터, 밸브, 펌프 등 +물리적 장치들이 존재 +Purdue 모델*은 IEC 62443 표준에서 산업제어시스템 네트워크 아키텍처 및 보안 영역을 정의하는 개념적 +기반으로 활용 +* Purdue 모델: Purdue 대학에서 1990년대 초 개발한 모델로, ICS 환경을 여러 레벨로 계층화하여 제어 영역과 비즈니스 +네트워크 간의 경계를 명확히 정의하는 산업제어시스템 참조 아키텍처2) + - Purdue 모델은 OT/ICS 구성 요소 간 상호 연결 및 의존성을 계층 구조로 표현하는 참조 모델로 자리 잡음(그림 2 +참조) + - 현재는 다양한 표준과 기관에서 요구되는 환경에 맞게 수정·확장하여 활용되고 있음 +<그림 2> OT 구성 요소 및 네트워크 구조 +출처) IEC 62443-2-1, “Security program requirements for IACS3) asset owners” +2) Garton, David., “Purdue model framework for industrial control systems & cybersecurity segmentation”, US Department of +Energy 14 (2022): 2022-10. +3) IEC 62443에서는 산업제어시스템을 가리키는 용어로 IACS(Industrial Automation and Control Systems)를 사용 + +![그림 2 참조)](images/p0014_img0.png) + + +14 󰠾 OT 환경의 제로트러스트 적용 안내서 +2009년 발간된 「IEC 62443」 표준 시리즈는 ICS·OT 보안을 위한 국제 표준으로, 대부분 국가에서 ICS 및 +OT 환경 보안 지침으로 활용 +자산 소유자·시스템 통합자·제품 공급자가 각각 따라야 할 절차와 기술적 요구사항을 구체적으로 제시하며, +보안 수준(Security Level)과 기본 요구사항(Foundational Requirement)을 통해 전 생명주기 보안을 +체계화함 +네트워크를 Zone–Conduit 모델4)에 따라 구분해 보안 경계를 정의하고, 영역 간 통신 흐름을 통제하여 +침입 확산을 최소화하도록 요구함 +또한, 사용자 인증, 권한 부여, 로그 관리, 데이터 무결성 보장 등 핵심 통제를 규정하여 운영 과정에서 +발생할 수 있는 위협을 다계층적으로 방어하도록 규정 +더불어 조직은 보안 수준(Security Level)을 자산의 중요도와 위협 시나리오에 따라 설정하고, 그에 +맞는 기술적·관리적 조치를 단계적으로 적용함으로써 국제적으로 통용 가능한 보안 역량 확보를 요구 +IEC 62443 표준 시리즈는 특정 조직에 국한되지 않고 제품 개발, 시스템 구축, 운영·유지보수 등 공급망 +전체에 걸쳐 일관된 보안 적용을 보장하는 특징을 가짐 +<그림 3> IEC 62443 표준 시리즈 +출처) 서정택, “OT 사이버보안위협 및 대응방안”, G-PRIVACY 2021 컨퍼런스 +4) 산업제어시스템을 보안 구역(Zone)으로 나누고, 각 구역 간의 통신 경로를 Conduit(통로)으로 정의하여 경계와 제어 지점을 설정하는 모델 + +![그림 3> IEC 62443 표준 시리즈](images/p0015_img1.png) + + +2-2 +제로트러스트(Zero Trust) +▶제로트러스트는 경계기반 보안 모델의 한계점을 보완하기 위해 등장한 현대 보안 패러다임으로, 미국 +주도의 정책·표준을 축으로 발전해 온 개념임 +▶제로트러스트 아키텍처는 논리적으로 PDP/PEP/PIP로 구성되며, 중앙 정책의 일관 집행, 상태 기반의 +지속 검증, 최소 권한 접근을 통해 운영되는 정책 중심 모델임 +▶미국과 한국을 포함한 다수 국가가 제로트러스트 관련 정책을 제도화·시행 중이며, 이는 조직 보안의 핵심 +프레임워크로서 제로트러스트의 전략적 중요성 및 도입 불가피성을 시사 +제로트러스트(Zero Trust)는 ‘아무것도 신뢰하지 말고 항상 검증하라(Never Trust, Always Verify)’라는 +원칙에 따라 네트워크 경계를 신뢰 판단의 전제로 삼지 않고 위치와 관계없이 모든 접근을 지속적으로 검증하며 +최소 권한만 부여하도록 요구하는 보안 패러다임 +기업망을 보호하기 위해 경계를 설정하고 방화벽과 같은 보안 솔루션을 배치하는 전통적 경계 기반 보안 +모델은 내부 리소스 보호에 다음과 같은 한계가 존재함 + - (네트워크 환경 다변화) 기업·기관의 규모 확대로 다양한 네트워크 구성이 도입되고 재택근무 확산으로 외부 접속이 +급증하면서, 비용과 보안 복잡도가 증가 + - (클라우드 활성화) 기존 온프레미스 중심의 기업망은 관리·유지보수 비용 절감, 운영 편의성, 신규 서비스와 AI +기술 도입 등을 이유로 클라우드 환경으로 빠르게 전환되고 있으며, 이 과정에서 기업·기관망은 점점 복잡해지고 +내·외부 경계가 모호해지는 문제가 발생 + - (횡적 이동) 경계 기반 보안 모델은 내부 사용자를 상대적으로 신뢰하는 구조를 가지고 있어 내부망에 침투한 +공격자가 악성 활동을 확산시키는 횡적 이동에 매우 취약한 한계를 보임 +이에 따라 기존 경계 기반 모델의 한계를 극복하기 위해 동적 접근제어, 지속적 검증 및 최소 권한 부여를 +핵심으로 하는 새로운 보안 모델의 필요성이 제기됨 +2010년, Forrester Research의 수석 애널리스트인 John Kindervag는 기존 경계 기반 모델의 위험성을 +지적하며 기업·기관망에서 더 엄격한 접근제어의 필요성을 강조하기 위해 제로트러스트 모델을 제안함 +2014~2015년, 미국 연방정부 인사관리처(OPM)에서 약 2,150만 명의 개인정보가 유출되는 사건이 +발생하였으며, 미 하원 감독개혁위원회는 1년여간의 조사를 거쳐 2016년 발행한 보고서 「The OPM +Breach: How the Government Jeopardized Our National Security for More than a +Generation」에서 처음으로 제로트러스트를 향한 연방 정보보안 강화 노력을 권고함 +2020년, NIST는 「Zero Trust Architecture(SP 800-207)」 발표를 통하여 제로트러스트에 대한 정의, +원칙과 함께 유스케이스, 보안 위협, 전환 단계 등 정의하였으며, 이 문서는 사실상 전 세계적으로 제로 +트러스트의 표준으로 인식되고 있음 + +![이미지 p.16](images/p0016_img0.png) + + +![이미지 p.16](images/p0016_img1.png) + + +![이미지 p.16](images/p0016_img2.png) + + +![이미지 p.16](images/p0016_img3.png) + + +16 󰠾 OT 환경의 제로트러스트 적용 안내서 +2022년, 미 예산관리실(OMB)은 「Moving the U.S. Government Toward Zero Trust Cybersecurity +Principles(M-22-09)」를 발표하면서 연방기관에 2024년까지 제로트러스트 아키텍처 전환을 의무화하고, +신원·기기·네트워크·애플리케이션·데이터 5개 핵심 요소별 목표를 제시함 +2022년, 미 국방부(DoD)는 「DoD Zero Trust Strategy」를 발표하면서, 국방부 전역에서 2027년까지 +Target Level ZT를 구현하고, 2032년까지 Advanced ZT를 구현하는 것을 목표로 하며, 7대 핵심 요소 +기반의 세부 목표와 자원 투입 계획을 수립함 +2023년, CISA는 「Zero Trust Maturity Model 2.0」5)을 발표하면서, 연방기관 중심 성숙도 모델을 +제시했으며, 이 모델은 외부 파트너, 이해 관계자 및 서비스 제공자 등에 제로트러스트가 어떻게 반영 +되어야 할지 고려해야 하는 모델이라고 언급함 +2024년, DoD는 「DoD Zero Trust Overlays」 발표를 통해 NIST SP 800-53 보안 통제를 제로트러스트 +관점에서 재구성하여 국방 분야 시스템 심사·인증 시 적용할 수 있는 구체적 기준을 마련함 +2025년, NIST는 「Implementing a Zero Trust Architecture(SP 1800-35)」 마지막 버전 발표를 +통해 제로트러스트 아키텍처를 실제 환경에 구현하기 위한 참조 설계·기술 구성 요소·테스트 시나리오를 +제공함 +국내 제로트러스트 가이드라인 1.0에서는 기업·기관이 제로트러스트 패러다임을 실질적으로 도입 시 참고할 +수 있는 총 6가지 기본 원리를 정의함 +제로트러스트 가이드라인 1.0은 다음 <표 3>의 제로트러스트 원리에 따라 제로트러스트 아키텍처를 +구성하는 것을 제안 (Forrester, Google 등 기업 보고서, CSA SDP, NIST SP 800-207, DoD 제로 +트러스트 참조 아키텍처 등 참조) +6가지 제로트러스트 기본 원리 +가. 기본 원칙: 모든 종류의 접근에 대해 신뢰하지 않을 것 (명시적인 신뢰 확인 후 리소스 접근 허용) +나. 일관되고 중앙 집중적인 정책 관리 및 접근제어 결정, 실행 필요 +다. 사용자, 기기에 대한 관리 및 강력한 인증 +라. 리소스 분류 및 관리를 통한 세밀한 접근제어 (최소 권한 부여) +마. 논리 경계 생성 및 세션 단위 접근 허용, 통신 보호 기술 적용 +바. 모든 상태에 대한 모니터링, 로그 및 이를 통한 신뢰성 지속적 검증, 제어 +<표 3> 제로트러스트 기본 원리 +출처) 과학기술정보통신부 등, “제로트러스트 가이드라인 1.0” +가. 기본 원칙: 모든 종류의 접근에 대해 신뢰하지 않을 것 + - 모든 리소스 접근은 기본 거부를 원칙으로 하며, 인증을 거친 주체에게만 제한적으로 허용함 + - 인증 후에도 세션 탈취·내부자 공격 가능성이 있으므로 지속 모니터링과 추가 인증·세션 종료 등의 대응이 필요함 +5) 버전 1.0은 2021년에 발표 + +나. 일관되고 중앙 집중적인 정책 관리 및 접근제어 결정, 실행 필요 + - 기업은 리소스 접근에 대해 중앙 집중적이고 일관된 정책 관리·접근제어를 수행해야 하며, 정책 관리 지점이 분산 +되면 신규 주체·리소스 추가 시 일관성 있는 정책 적용이 어려움 + - 접근 결정·실행 지점이 분산되어 있더라도 반드시 중앙 정책에 따라야 하며, 예를 들어 퇴사자의 계정은 모든 리소스 +접근 시도에서 일관되게 거부되어야 함 +다. 사용자, 기기에 대한 관리 및 강력한 인증 + - 사용자는 등록된 기기와 애플리케이션을 통해 기업 리소스에 접근해야 하며, 사용자 식별·인증뿐 아니라 기기 정보와 +보안 상태 관리가 필수적임 + - 등록되지 않았거나 보안 상태가 불확실한 기기는 접속 차단, 접근 범위 제한, 추가 인증 요구 등의 방식으로 통제 +해야 함 +라. 리소스 분류 및 관리를 통한 세밀한 접근제어 (최소 권한 부여) + - 기업 리소스는 데이터, 서비스, 하드웨어, 외부망 등 다양한 계층으로 분류되며, 직급·보안 상태·시간 등 조건에 +따라 차별화된 접근제어 정책이 필요함 + - 제로트러스트 아키텍처 담당자는 리소스를 명확히 분류하고 주체별 요인에 따라 세밀하게 접근을 제어해야 하며, +이를 통해 최소 권한 부여와 횡적 이동 차단이 가능함 +마. 논리 경계 생성 및 세션 단위 접근 허용, 통신 보호 기술 적용 + - 접근 주체는 허용된 범위를 넘어 다른 리소스에 접근할 수 없어야 하며, 이를 위해 소프트웨어 정의 경계 등 논리적 +경계를 적용하고 세션 단위 접근만 허용하여 장시간 접속이나 자동 권한 확장은 지양해야 함 + - 리소스 접근 시에는 네트워크 위치와 무관하게 기밀성과 무결성을 보장하는 보호 기술을 적용하여, 세션 탈취·패킷 +위변조 등 공격 시도에 대비해야 함 +바. 모든 상태에 대한 모니터링, 로그 및 이를 통한 신뢰성 지속적 검증, 제어 + - 모든 상태란 접근 주체, 리소스, 정책 서버의 조건 전반을 포함함. 시간, 위치, 기기 보안 상태, 접속자 수, 데이터 +접근 횟수, 트래픽 양 등이 이에 해당함 + - 이러한 상태 정보를 실시간 모니터링하고 로그로 기록하여 수치적·시각적으로 파악 및 사후 감사가 가능해야 함 +제로트러스트 아키텍처(Zero Trust Architecture)는 제로트러스트 철학을 기반으로 컴포넌트 간 관계와 +워크플로우 설계, 접근 정책을 포함하여 지속적 검증과 최소 권한 원칙을 구현하는 보안 아키텍처 +기업망이 제로트러스트 아키텍처를 실현하기 위해서는 접근 주체가 리소스에 접근하는 것에 대해 +허용/거부 정책을 다루어야 하며 가장 핵심 기능은 접근제어 정책임 +이러한 접근제어 정책이 실현되기 위해 NIST SP 800-207을 참고하여 국내 제로트러스트 가이드라인 +1.0/2.0에서는 제로트러스트 아키텍처 논리 구성 요소를 제시함 + +18 󰠾 OT 환경의 제로트러스트 적용 안내서 +<그림 4> 제로트러스트 아키텍처 보안 모델 및 논리 구성 요소 +출처) 과학기술정보통신부, “제로트러스트 가이드라인 2.0” +제로트러스트 아키텍처 논리 구성 요소는 다음과 같음 + - 정책결정지점(PDP): 정책 엔진(PE)과 정책 관리자(PA)로 구성된 요소로, 접근 주체의 리소스 접근 허용 여부를 +최종 결정해 정책시행지점(PEP)에 전달하는 역할 수행 + - 정책 엔진(PE): 기업망의 정책과 신뢰도 평가를 기반으로 리소스 접근을 최종 허가·거부·취소하며, 정책 관리자가 +이를 실행 + - 정책 관리자(PA): 정책 엔진과 함께 PDP를 구성해 PEP를 통해 세션의 통신 경로를 제어하며, 토큰 발급과 세션 +허용·거부 결정을 수행하되 최종 판단은 정책 엔진에 의존 + - 정책시행지점(PEP): 접근 주체와 리소스 간 연결을 중재·모니터링·종료하는 요소로, 정책 관리자와 통신하며 +정책을 적용하고, 클라이언트 에이전트·게이트웨이·포탈 등 형태로 구현되어 리소스 앞의 문지기 역할 수행 + - 정책정보지점(PIP): 정책 엔진에 제공할 정보를 생성·전달하는 요소로, 기업 내부 시스템뿐 아니라 외부 시스템도 +포함될 수 있으며, 신뢰도 판단에 유용한 정보를 제공하는 모든 시스템 포함 +글로벌 국가(한국, 캐나다, 영국, 일본, 중국 등)들은 미국이 제로트러스트 관련 정책 발표를 시작하면서, 자국 +환경을 고려한 제로트러스트 관련 문서를 발표하고 있음 +각 국가는 「NIST SP 800-207」을 기반으로 자국 환경에 적합한 제로트러스트 개념을 정립하고, 이를 +정부 차원의 정책 문서로 발표하여 확산을 추진함 + +![그림 4> 제로트러스트 아키텍처 보안 모델 및 논리 구성 요소](images/p0019_img1.png) + + +단계 +설명 +대한민국 +- 2023년, 과학기술정보통신부와 한국인터넷진흥원(KISA)은 국내 기관·기업이 제로트러스트 개념을 +도입할 수 있도록 기본 원칙과 참조 모델을 제시한 「제로트러스트 가이드라인 1.0」 발표 +- 2024년, 제로트러스트 도입·운영 단계에서 필요한 구체적 요구사항과 성숙도 평가 모델을 보완해 +공공·민간 전반의 확산을 지원하는 「제로트러스트 가이드라인 2.0」 발표 +캐나다 +- 2022년, 캐나다 정부는 제로트러스트 보안 프레임워크를 개발하기 위한 노력으로 「Zero Trust Security +Model(ITSAP.10.008)」 발표 +영국 +- 2021년, 영국의 국가사이버보안센터(NCSC)는 「Zero trust architecture design principles v1.0」을 +발표하여 제로트러스트 아키텍처 설계 8원칙 제안 +일본 +- 2020년, 일본 CIO는 「정부 시스템에서 제로트러스트 적용을 위한 사고 방식」을 발표하면서 제로트러스트 +개념을 공식적으로 도입하기 시작하였고, 2021년, 디지털청에서 「제로트러스트 네트워크를 달성하기 +위한 정부 직원의 계정과 자산 관리 지침」 발표 +- 2022년, 디지털청에서 「제로트러스트 아키텍처 적용 정책」 발표 +- 이후, 지속적으로 제로트러스트 정책 관련 문서를 발표하면서, 보다 정교한 접근 통제 체계를 도입하기 +위한 기술적 기반을 마련하고 있는 것으로 확인 +중국 +- 2019년, 중국산업정보통신부는 「사이버보안 산업 발전 촉진에 대한 지침」을 발표하면서 네트워크 보안 +핵심 기술 중 하나로 제로트러스트 명시 +- 2021년, 중국전자산업표준화기술협회는 중국 제로트러스트 표준(T/CESA 1165-2021)인 +「제로트러스트 시스템 기술 사양」 초안 공개 +<표 4> 주요국 제로트러스트 정책 현황 +출처) 주요국 자료 재구성 + +| 단계 | 설명 | +| --- | --- | +| 대한민국 | ∙ 2023년, 과학기술정보통신부와 한국인터넷진흥원(KISA)은 국내 기관·기업이 제로트러스트 개념을 도입할 수 있도록 기본 원칙과 참조 모델을 제시한 「제로트러스트 가이드라인 1.0」 발표 ∙ 2024년, 제로트러스트 도입·운영 단계에서 필요한 구체적 요구사항과 성숙도 평가 모델을 보완해 공공·민간 전반의 확산을 지원하는 「제로트러스트 가이드라인 2.0」 발표 | +| 캐나다 | ∙ 2022년, 캐나다 정부는 제로트러스트 보안 프레임워크를 개발하기 위한 노력으로 「Zero Trust Security Model(ITSAP.10.008)」 발표 | +| 영국 | ∙ 2021년, 영국의 국가사이버보안센터(NCSC)는 「Zero trust architecture design principles v1.0」을 발표하여 제로트러스트 아키텍처 설계 8원칙 제안 | +| 일본 | ∙ 2020년, 일본 CIO는 「정부 시스템에서 제로트러스트 적용을 위한 사고 방식」을 발표하면서 제로트러스트 개념을 공식적으로 도입하기 시작하였고, 2021년, 디지털청에서 「제로트러스트 네트워크를 달성하기 위한 정부 직원의 계정과 자산 관리 지침」 발표 ∙ 2022년, 디지털청에서 「제로트러스트 아키텍처 적용 정책」 발표 ∙ 이후, 지속적으로 제로트러스트 정책 관련 문서를 발표하면서, 보다 정교한 접근 통제 체계를 도입하기 위한 기술적 기반을 마련하고 있는 것으로 확인 | +| 중국 | ∙ 2019년, 중국산업정보통신부는 「사이버보안 산업 발전 촉진에 대한 지침」을 발표하면서 네트워크 보안 핵심 기술 중 하나로 제로트러스트 명시 ∙ 2021년, 중국전자산업표준화기술협회는 중국 제로트러스트 표준(T/CESA 1165-2021)인 「제로트러스트 시스템 기술 사양」 초안 공개 | + + +# 제3장 OT 특화 제로트러스트(OT ZT)의 필요성 + +3-1 +OT 위협 사례 +▶OT 대상 사이버 위협은 물리적 피해와 사회적 혼란을 초래하는 고위험 사이버 위협임 +▶보안 성숙도가 낮은 조직일수록 침해사고가 빈번하며, 망분리·세그멘테이션 미흡이 공격 확산의 주요 +원인으로 작용함 +▶국가 지원 해킹조직이 OT 인프라를 전략적으로 공격하며 사이버전 양상이 심화되고 있음 +OT 보안 기업 Fortinet이 발표한 ‘2025 State of Operational Technology and Cybersecurity Report’에 +따르면 전 세계 OT 조직의 절반이 사이버 공격을 경험 +IT 대상 침해사고가 주로 데이터 탈취나 서비스 지연에 그치는 것과 달리, OT를 대상으로 한 사이버 +공격은 설비 오작동, 생산 중단, 정전, 장비 파손 등 물리적 피해로 직결되어 사회 전반에 훨씬 더 큰 +피해를 초래함 +OT를 대상으로 수행되는 사이버 공격은 매년 증가하고 있으며 보안 성숙도 레벨 4에 해당하는 기업의 +65%는 침해를 경험하지 않았다고 응답한 반면, 성숙도 레벨 0~2에 해당하는 기업은 46%만이 침해를 +경험하지 않았다고 응답 + - 보안 성숙도가 높은 기업일수록 사이버 공격 피해가 상대적으로 적은 것으로 분석 + - 낮은 레벨의 조직은 피싱과 같은 기본적인 공격으로도 피해를 입었으며, 레벨 3과 레벨 4 조직은 랜섬웨어·멀웨어 +등 고급 공격에 의한 피해 발생 + - 보안 성숙도는 Level 0~4까지 존재하며, 보안 수준이 낮은 조직은 APT(지능형 지속 위협)나 OT 전용 악성코드 +같은 정교한 위협의 존재를 인지하지 못하는 경우 존재 +수준 +설명 +Level 0 +- OT에 대한 세분화(segmentation)나 가시성이 전혀 없음 +Level 1 +- 가시성과 세분화가 구축됨 +Level 2 +- 접근제어와 프로파일링이 구축됨 +Level 3 +- 행위 기반 예측 기능이 구축됨 +Level 4 +- 오케스트레이션과 자동화를 활용함 +<표 5> OT 보안 성숙도 설명 +출처) Fortinet, “2025 State of Operational Technology and Cybersecurity Report” + +| 수준 | 설명 | +| --- | --- | +| Level 0 | ∙ OT에 대한 세분화(segmentation)나 가시성이 전혀 없음 | +| Level 1 | ∙ 가시성과 세분화가 구축됨 | +| Level 2 | ∙ 접근제어와 프로파일링이 구축됨 | +| Level 3 | ∙ 행위 기반 예측 기능이 구축됨 | +| Level 4 | ∙ 오케스트레이션과 자동화를 활용함 | + + +![이미지 p.21](images/p0021_img0.png) + + +![이미지 p.21](images/p0021_img1.png) + + +<그림 5> OT 보안 성숙도별 사이버 침해사고 비율 +출처) Fortinet, “2025 State of Operational Technology and Cybersecurity Report” +또한 망분리와 네트워크 세그멘테이션이 제대로 구현·운영되지 않을 경우, IT 영역에서 발생한 침해가 +통제 없이 OT 영역으로 확산되어 공격으로 이어짐 +데이터넷 기사에서 인용한 OMDIA(옴디아) 자료에 따르면 OT 조직의 80%가 레벨 3.5(DMZ)에서 보안 +사고 경험 +<그림 6> OT 레벨별 사이버 침해사건 발생 비율 +출처) 데이터넷, “[OT보안②] 사회 전체 피해 입히는 OT 타깃 공격”, 2024.11 + +![그림 5> OT 보안 성숙도별 사이버 침해사고 비율](images/p0022_img0.png) + + +![그림 5> OT 보안 성숙도별 사이버 침해사고 비율](images/p0022_img1.png) + + +22 󰠾 OT 환경의 제로트러스트 적용 안내서 +최근 OT 환경을 대상으로 한 랜섬웨어 공격이 급증하고 있으며, 이는 IT망 침해를 통해 OT 제어·운영 기능을 +마비시키는 파급효과를 발생시킴 +Fortinet의 ‘2024 State of Operational Technology and Cybersecurity Report’에 따르면 사이버 +공격을 받은 OT 조직의 절반이 랜섬웨어 및 와이퍼 공격으로 조사 + - 와이퍼 공격: 공격자가 대상 시스템의 파일·디스크·부트레코드(MBR/GPT 등)를 삭제하거나 손상시켜 데이터를 +복구하기 어렵게 만들고, 시스템의 정상 부팅 및 운영을 불가능하게 만드는 파괴형 악성코드 공격 +OT 환경에서 발생한 침해 사례들은 대부분 내부 폐쇄망 침입을 위해 외부망에서부터 내부 OT망까지 +치밀하게 준비된 APT 공격 + - 랜섬웨어는 망분리 및 네트워크 세그멘테이션 미흡을 틈타 OT 영역까지 확산 +IT망에 대한 랜섬웨어로도 OT 운영에 필요한 물류, 재고, 결제 등 핵심 정보 시스템이 중단되어 OT +시스템들의 운영에 차질이 발생함 + - 즉, OT 제어시스템이 정상이어도 운영 관리가 불가능해 생산 차질, 서비스 중단, 사회적 혼란으로 이어짐 +발생시기 +사례명/대상 +영향 및 피해내용 +2019 +Norsk Hydro +- 전 세계 공장 가동 차질 발생, OT·생산 라인 일시 중단. 피해액 수천만 달러 규모 +- 전세계 알루미늄 가격 상승 (사건 전 대비 1.2%) +2020 +Honda +- 전 세계 공장 11곳의 생산라인 관리 시스템 마비, 일본 공장에서는 완성차 출하가 일시 중단 +2021 +Colonial Pipeline +- 송유관 운영 중단, 미국 동부 연료 공급에 큰 차질. 몸값 약 440만 달러 지불 후 복구 +2022 +Delta Electronics +- 서버 1,500대와 컴퓨터 12,000대 암호화 및 주요 데이터 탈취, 1500만 달러를 요구 +2023 +Dole 식품회사 +- 북미지역의 4개의 가공공장 시스템 중단, 식품 배송 중단으로 인한 2주간 배송 지연 +2023 +나고야항 +- 나고야항 내 5개 컨테이너 터미널의 반입, 반출 작업 정지로 약 2일동안 물류 처리에 차질 발생 +2024 +VARTA 배터리 +제조시설 +- 배터리 생산 시설 5개 운영 중단으로 인한 피해 발생 +2025 +Data I/O +- 반도체 생산 장비 생산/출하 시스템 중단으로 인한 금전적 피해 발생 +<표 6> 연도별 OT 시스템 랜섬웨어 공격 사례 +출처) 뉴스기사 재구성 +최근 OT 대상 랜섬웨어 공격은 OT에 직접적으로 연결되어 있는 원격 접속 계정(RDP·VPN)을 탈취하여 +외부에서 내부 OT망으로 접속하여 랜섬웨어 감염 시도 + - 설비 점검과 유지보수 편의를 이유로 외부 협력업체나 파트너사가 OT망에 원격 접속을 요청 + - OT 보안 전문업체 클래로티(Claroty)에 따르면, 응답자의 79%가 OT 네트워크에 팀뷰어(TeamViewer)·애니 +데스크(AnyDesk) 등 원격 도구를 설치했으며, 이들 중 대부분은 지난 1년간 해당 앱을 통한 침해를 최소 한 차례 +이상 경험한 것으로 조사6) +랜섬웨어는 피싱 이메일을 통해 악성 링크나 첨부파일을 열게 하여 사용자의 계정을 탈취하고, 확보한 +권한을 바탕으로 내부망에 침투해 OT 시스템까지 확산을 시도 +6) 보안뉴스, “OT 환경 노리는 랜섬웨어 공격이 증가하고 있는 가운데, CISO의 할 일은?”, 2024.10 + +| 발생시기 | 사례명/대상 | 영향 및 피해내용 | +| --- | --- | --- | +| 2019 | Norsk Hydro | ∙ 전 세계 공장 가동 차질 발생, OT·생산 라인 일시 중단. 피해액 수천만 달러 규모 ∙ 전세계 알루미늄 가격 상승 (사건 전 대비 1.2%) | +| 2020 | Honda | ∙ 전 세계 공장 11곳의 생산라인 관리 시스템 마비, 일본 공장에서는 완성차 출하가 일시 중단 | +| 2021 | Colonial Pipeline | ∙ 송유관 운영 중단, 미국 동부 연료 공급에 큰 차질. 몸값 약 440만 달러 지불 후 복구 | +| 2022 | Delta Electronics | ∙ 서버 1,500대와 컴퓨터 12,000대 암호화 및 주요 데이터 탈취, 1500만 달러를 요구 | +| 2023 | Dole 식품회사 | ∙ 북미지역의 4개의 가공공장 시스템 중단, 식품 배송 중단으로 인한 2주간 배송 지연 | +| 2023 | 나고야항 | ∙ 나고야항 내 5개 컨테이너 터미널의 반입, 반출 작업 정지로 약 2일동안 물류 처리에 차질 발생 | +| 2024 | VARTA 배터리 제조시설 | ∙ 배터리 생산 시설 5개 운영 중단으로 인한 피해 발생 | +| 2025 | Data I/O | ∙ 반도체 생산 장비 생산/출하 시스템 중단으로 인한 금전적 피해 발생 | + + +OT 환경을 노린 사이버 공격은 물리적 피해와 경제적 손실을 넘어서 국가 기반시설 안정성 및 사회 전반에 큰 +충격을 줄 수 있는 심각한 사이버보안 위험 +원격 진단 등 OT가 IT 시스템과 연결되면서 공격 표면이 확대되고 있으며, 레거시 시스템의 취약점 발견 +및 보안 패치 적용의 어려움으로 위험이 높아지고 있음. 특히 2010년 Stuxnet 사례와 같이 제로데이 +취약점을 악용해 현장 장치를 직접적으로 공격하는 ICS 침투형 악성코드 등 더욱 정교한 공격 방식이 등장 +OT 시설을 직접 공격하여 정보 습득뿐만 아니라 전력망·원자력·수도·교통과 같은 국가 핵심 인프라를 +마비시킴으로써 사실상 국가 안보를 겨냥한 사이버전 양상을 보임. 즉, OT 대상의 실제 공격이 발생할 +경우 국가 기반시설과 사회 기능 전반에 심각한 피해로 이어질 수 있기 때문에 OT 보안 강화가 필수적임 + - 기존 사이버 공격은 회사 내 기밀 자료를 탈취하거나, 전산 시스템을 마비시키는 것이 목표였으나, 최근에는 OT에 +대한 사이버 공격을 통하여 공정에 피해를 주거나 시설 자체를 파괴 + - 과거 큰 전쟁은 포격과 공습으로 시작됐지만 미래의 전쟁은 전력시스템 등 OT 기반 시스템 및 인프라를 마비시키는 +사이버 공격부터 시작될 것으로 예상 +대표적으로 Stuxnet은 원자력시설의 OT망에 침투해 PLC를 변조, 핵시설 원심분리기를 물리적으로 +파괴함으로써 특정 국가의 핵 개발을 저지하고 OT 대상 사이버 공격이 국가 안보와 국제 정세에 직접적인 +영향을 미칠 수 있음을 보여준 사례임 +발생시기 +사례명/대상 +영향 및 피해내용 +2010 +Stuxnet +(이란 나탄즈 핵시설) +- USB 등 외부 매체 통해 폐쇄망 침투 → Siemens PLC 변조 +- 원심분리기 물리적 파괴 → 핵개발 차질, 세계 최초 OT 특화 사이버무기 +- 사이버 공격이 물리적 설비 파괴로 이어질 수 있음을 시사 +2014 +일본 후쿠이현 몬주 핵 +발전소 +- 몬주 핵 발전소 내 reactor 제어실 컴퓨터에서 악성코드 발견 +(42,000개 이상의 문서 도난) +- 작업자가 컴퓨터의 동영상 재생 프로그램 업데이트를 수행한 후 감염 +- 망분리 환경에 대한 공급망 공격 및 SW 취약점 기반 공격 위험성 시사 +2015 +BlackEnergy 3.0 +(우크라이나 전력망) +- 피싱 이메일 통한 악성 매크로 설치 → SCADA 시스템 접근 +- 30만 가구 정전, 약 6시간 이상 전력 공급 중단 +- 사회공학 기반 초기 침투가 실제 OT 제어시스템 임의 조작으로 이어질 수 있음을 +보여주는 사례 +2016 +Industroyer / +CrashOverride +(우크라이나 전력망) +- 변전소에서 사용하는 작업 프로세스 오작동 유발 +- 우크레네르고社 운영의 피브니치나(변전소) 전력망 중단 +- OT 환경 프로토콜 취약점이 직접 악용된 사례로, OT 프로토콜 보안 필요성 시사 +2019 +인도 쿠단쿨람 +원자력발전소 공격 +- 원전 관리 연결망에 악성코드(Dtrack) 감염되어, 원전 1기 중단 +- 내부 데이터 수집과 내부 확산 공격을 통해 원전 중요시스템 접근 시도 +- IT망 침투 이후 장기적 정찰과 내부 확산을 통해 OT 파괴 시도로 이어질 가능성을 +보여주는 사례 +<표 7> 연도별 OT 시스템 대상 주요 사이버 공격 사례 + +| 발생시기 | 사례명/대상 | 영향 및 피해내용 | +| --- | --- | --- | +| 2010 | Stuxnet (이란 나탄즈 핵시설) | ∙ USB 등 외부 매체 통해 폐쇄망 침투 → Siemens PLC 변조 ∙ 원심분리기 물리적 파괴 → 핵개발 차질, 세계 최초 OT 특화 사이버무기 ∙ 사이버 공격이 물리적 설비 파괴로 이어질 수 있음을 시사 | +| 2014 | 일본 후쿠이현 몬주 핵 발전소 | ∙ 몬주 핵 발전소 내 reactor 제어실 컴퓨터에서 악성코드 발견 (42,000개 이상의 문서 도난) ∙ 작업자가 컴퓨터의 동영상 재생 프로그램 업데이트를 수행한 후 감염 ∙ 망분리 환경에 대한 공급망 공격 및 SW 취약점 기반 공격 위험성 시사 | +| 2015 | BlackEnergy 3.0 (우크라이나 전력망) | ∙ 피싱 이메일 통한 악성 매크로 설치 → SCADA 시스템 접근 ∙ 30만 가구 정전, 약 6시간 이상 전력 공급 중단 ∙ 사회공학 기반 초기 침투가 실제 OT 제어시스템 임의 조작으로 이어질 수 있음을 보여주는 사례 | +| 2016 | Industroyer / CrashOverride (우크라이나 전력망) | ∙ 변전소에서 사용하는 작업 프로세스 오작동 유발 ∙ 우크레네르고社 운영의 피브니치나(변전소) 전력망 중단 ∙ OT 환경 프로토콜 취약점이 직접 악용된 사례로, OT 프로토콜 보안 필요성 시사 | +| 2019 | 인도 쿠단쿨람 원자력발전소 공격 | ∙ 원전 관리 연결망에 악성코드(Dtrack) 감염되어, 원전 1기 중단 ∙ 내부 데이터 수집과 내부 확산 공격을 통해 원전 중요시스템 접근 시도 ∙ IT망 침투 이후 장기적 정찰과 내부 확산을 통해 OT 파괴 시도로 이어질 가능성을 보여주는 사례 | + + +24 󰠾 OT 환경의 제로트러스트 적용 안내서 +출처) 뉴스기사 재구성 +OT를 겨냥하는 해킹 단체는 단순한 범죄조직을 넘어, 국가 차원의 지원을 받으며 상대 국가 핵심 인프라를 +직접 타깃으로 삼는 사이버전 양상으로 발전 +OT를 겨냥한 해킹 단체는 조직적으로 움직이며 정교하고 치밀한 공격을 수행하여 상대 국가의 핵심 +인프라를 정밀 타격함으로써 국가 간 사이버전이 현실화됨 +러시아 총참모부 본부 정보국(GRU) 산하 Sandworm 그룹은 BlackEnergy, Industroyer, FrostyGoop +등을 통해 우크라이나 전력망·난방 인프라를 반복적으로 마비 +우크라이나의 블랙잭(BlackJack)이라는 핵티비스트 그룹은 가스, 수도 및 하수도 네트워크의 통신 +시스템을 담당하는 모스크바 시립 조직인 모스콜렉터(Moskollektor)를 공격 +미국과 이스라엘은 공동으로 Stuxnet을 개발해 이란 나탄즈 핵시설의 원심분리기를 물리적으로 파괴, +국가 핵개발을 저지 +중국의 Volt Typhoon 그룹은 미국 전력·수도 OT망에 장기간 은밀히 침투하며, 위기 시 파괴를 노리는 +전략적 활동 수행 +발생시기 +사례명/대상 +영향 및 피해내용 +2021 +Oldsmar 수도 시설 공격 +(미국 플로리다) +- 원격 접속 소프트웨어 TeamViewer 계정 탈취 +- 수산화나트륨(가성소다) 투입량 100배 증가 시도 → 직원이 즉시 발견해 피해 방지 +- 원격접속 계정 탈취만으로 OT 환경에서의 물리적 피해가 발생할 수 있음을 시사 +2023 +국내 스마트팜 설비 +원격 조작 +- 취약한 비밀번호 설정을 활용하여 스마트팜 개폐기 시스템을 원격으로 임의 조작 +- 곡물 투입 원격제어 설비시스템 해킹을 통한 임의 조작 +2024 +Volt Typhoon +(미국 전력·수도 인프라 +침투 시도) +- '볼트 타이푼'(Volt Typhoon)으로 알려진 중국 해커단체가 최소 5년간 항공, 철도, +도로, 해상, 파이프라인, 상하수도 등 미국 주요 인프라를 운영하는 네트워크에 +지속적으로 침투 +2024 +FrostyGoop +(우크라이나 난방 +인프라 공격) +- 모드버스(Modbus) 프로토콜을 악용해 600여 개 건물의 난방·온수 공급을 48시간 +동안 중단시킨 첫 사례 +2025 +이란 국영 선박 해킹 +- 선박에 적용된 소프트웨어 취약점을 기반으로 유조선 39척 및 화물선 25척의 중앙 +통신 시스템 해킹 +- 해킹으로 인해 선박 간 위치 공유 및 연락 불가로 항로이탈, 선박 간 충돌 발생 가능 +2025 +라이세바트넷 댐 해킹 +(노르웨이) +- 해커의 공격으로 인해 수문이 임의 개방되어 4시간 동안 720만 리터의 수자원 방류 + +| 발생시기 | 사례명/대상 | 영향 및 피해내용 | +| --- | --- | --- | +| 2021 | Oldsmar 수도 시설 공격 (미국 플로리다) | ∙ 원격 접속 소프트웨어 TeamViewer 계정 탈취 ∙ 수산화나트륨(가성소다) 투입량 100배 증가 시도 → 직원이 즉시 발견해 피해 방지 ∙ 원격접속 계정 탈취만으로 OT 환경에서의 물리적 피해가 발생할 수 있음을 시사 | +| 2023 | 국내 스마트팜 설비 원격 조작 | ∙ 취약한 비밀번호 설정을 활용하여 스마트팜 개폐기 시스템을 원격으로 임의 조작 ∙ 곡물 투입 원격제어 설비시스템 해킹을 통한 임의 조작 | +| 2024 | Volt Typhoon (미국 전력·수도 인프라 침투 시도) | ∙ '볼트 타이푼'(Volt Typhoon)으로 알려진 중국 해커단체가 최소 5년간 항공, 철도, 도로, 해상, 파이프라인, 상하수도 등 미국 주요 인프라를 운영하는 네트워크에 지속적으로 침투 | +| 2024 | FrostyGoop (우크라이나 난방 인프라 공격) | ∙ 모드버스(Modbus) 프로토콜을 악용해 600여 개 건물의 난방·온수 공급을 48시간 동안 중단시킨 첫 사례 | +| 2025 | 이란 국영 선박 해킹 | ∙ 선박에 적용된 소프트웨어 취약점을 기반으로 유조선 39척 및 화물선 25척의 중앙 통신 시스템 해킹 ∙ 해킹으로 인해 선박 간 위치 공유 및 연락 불가로 항로이탈, 선박 간 충돌 발생 가능 | +| 2025 | 라이세바트넷 댐 해킹 (노르웨이) | ∙ 해커의 공격으로 인해 수문이 임의 개방되어 4시간 동안 720만 리터의 수자원 방류 | + + +3-2 +OT 환경 특성 및 고유 취약점 +▶ OT 환경에서의 보안은 망분리에 과도하게 의존해 내부 신뢰 구조와 외부 접점 관리의 사각지대 존재 +▶ 가용성과 실시간성 우선 구조로 인해 취약점 패치, 암호화, 인증 적용이 제한되어 보안 대응의 어려움 존재 +▶ OT 환경은 자산 가시성이 낮고, 위협 탐지 및 대응이 지연되는 구조적 한계를 가지며, 전용·비공개 프로토콜 +사용으로 범용 IT 보안 솔루션의 적용이 제한됨 +OT 사이버보안의 핵심은 '망분리'에 있었으나, 망분리 환경에서도 외부와의 연결을 100% 차단하는 것이 +어려우며 망분리 기반 OT 망은 안전하다는 인식으로 인해 내부 가시성 확보 및 위협 대응에 소홀 +OT의 망분리로 인터넷과 단절된 환경, 외부와 차단되어 독립적으로 운영되는 시스템과 같이 외부와 +연결이 되어 있지 않으면 안전하다는 인식이 현재까지 널리 퍼져 있음 +하지만 OT를 대상으로 하는 사이버 공격 사례에서 알 수 있듯이 업무에 사용되는 USB, 외주 인력의 +노트북, 유지보수를 위한 원격 접속 기능, 소프트웨어 업데이트를 위한 경로 등 물리적으로 분리되어 +운영된 환경이라도 외부와의 접점이 존재 + - Stuxnet은 USB를 통한 물리적 침투를 수행하였고, 미국 올즈마 수도 시설 공격은 팀 뷰어를 통한 내부망 침투, +후쿠이현 몬주 핵 발전소 공격은 소프트웨어 업데이트를 통하여 내부망 침투 수행 + - 망분리 솔루션으로 외부 접근을 차단하더라도, 업데이트나 유지보수 등 운영 필요성 때문에 OT는 근본적으로 +외부와의 접점에 대한 100% 차단 불가능 +OT 환경은 망분리에 의존해 내부망에 들어온 주체를 기본적으로 신뢰하는 구조를 가지기 때문에 내부자 +위협에 대한 대응이 매우 미흡한 상황 + - 실제로 2024년 내부자 위협(의도하지 않은 사고 및 악의적 행위)은 전년대비 26%에서 50%로 두 배가량 증가 +하였고, 악의적 행위를 포함한 위협은 38%에서 63%로 급증 +OT 시스템은 가용성과 실시간성을 최우선으로 하여 취약점 점검·보안 패치·보안 장비 설치조차 쉽게 적용하기 +어렵고, 이로 인해 알려진 취약점이 장기간 방치되거나 대응이 지연되는 구조적 한계 존재 +패치를 하는 과정에서도 업데이트로 인한 시스템 재부팅 시 설정 데이터가 초기화될 수 있고, 아주 작은 +확률이라도 시스템 장애가 발생할 가능성이 존재하기 때문에 취약점 패치가 지연되거나 아예 방치되는 +경우 존재 +Nmap, Nessus 등 일반적인 보안 스캐너 도구를 사용할 경우에 발생하는 패킷으로 인하여 OT 시스템이 +오작동할 확률이 존재하기 때문에 보안 점검 도구 사용의 어려움 존재 +침입방지시스템을 도입하더라도 아주 작은 확률로 정상 패킷을 차단할 경우에 OT 시스템에 심각한 장애를 +유발할 수 있기 때문에 필터링 기능을 적극적으로 활용하지 못하고 침입탐지시스템 수준에 그치는 +경우가 많음 + +26 󰠾 OT 환경의 제로트러스트 적용 안내서 +또한 OT 시스템은 강한 실시간성 요구 조건 때문에, 인증 및 암호화 기술과 같이 가용성과 실시간성을 +저해할 수 있는 보안 기술을 적용하기 어려움 + - IEC 61850-5(변전소 통신 네트워크 및 시스템-제5부:기능 및 장치 모델을 위한 통신 요구 사항)에 따르면 +변전소 내 메시지 성능 요구사항에서 Trip 명령어는 3ms 이내에 전달되어야 한다고 규정되어 있음 + - 이처럼 강한 실시간성을 요구하는 환경에서 OT 시스템을 대상으로 인증, 암호 적용 등 전송 지연을 증가하는 보안 +기술 적용이 매우 어려움 +Transfer time class +Transfer time [ms] +Application examples: Transfer of +TT0 +>1000 +- Files, events, log contents +TT1 +1000 +- Events, alarms +TT2 +- Operator commands +TT3 +- Slow automatic interactions +TT4 +- Fast automatic interactions +TT5 +- Releases, Status changes +TT6 +- Trips, Blockings +<표 8> 변전소 내 메시지 성능 요구사항 +출처) IEC 61850-5, “Communication requirements for functions and device models” +OT 환경은 여전히 레거시 시스템에 크게 의존하고 있으며, 다양한 장비 및 복잡한 구성으로 인해 전체 시스템 +및 네트워크 현황에 대한 가시성 부족 +OT 환경의 시스템들은 10~30년의 장기간 운용 주기를 가지며, 이로 인하여 OT 환경의 많은 시스템은 +이미 수십년 전에 설계되어 보안이 전혀 고려되지 않은 레거시 시스템으로 구성 + - 과거에 생산되어 운영되는 OT 시스템은 기본적인 보안 기능조차 탑재되지 않아 외부 공격에 그대로 노출되는 +경우가 많으며,오래된 PLC, RTU, SCADA 장비는 암호화·인증 기능이 부족하여, 제어 명령 위변조나 불법 접근에 +취약함 + - IT 시스템과 달리 OT 기기는 장기간 패치나 업데이트 없이 운용되며, 이로 인해 알려진 취약점이 장기간 방치되는 +구조적 한계를 가짐 +OT 환경은 다양한 시스템과 복잡한 네트워크 구조로 인하여 자산현황 및 취약 지점을 명확히 파악하기 +어렵고 보안 사고 발생 시에도 탐지·대응이 지연되는 구조적 한계 존재 + - OT 환경은 네트워크 가시성이 부족하여 공격자가 침투할 수 있는 네트워크 경로를 사전에 차단하기 힘들고, 제한된 +모니터링 체계로 인하여 해킹이 발생해도 몇 주, 심지어 몇 달간 탐지되지 않아 장기간 내부 활동을 허용하는 위험 +존재 + - 제조사별·세대별로 다양한 장비가 혼재되어 있어 보안 정책을 일관되게 적용하기 어렵고 일부 장비는 보안 기능이 +거의 없거나 최신 기술을 지원하지 못하며, 이 같은 복잡성과 불균형은 결국 OT 환경의 사이버보안 공백으로 +이어짐 + +| Transfer time class | Transfer time [ms] | Application examples: Transfer of | +| --- | --- | --- | +| TT0 | >1000 | ∙ Files, events, log contents | +| TT1 | 1000 | ∙ Events, alarms | +| TT2 | 500 | ∙ Operator commands | +| TT3 | 100 | ∙ Slow automatic interactions | +| TT4 | 20 | ∙ Fast automatic interactions | +| TT5 | 10 | ∙ Releases, Status changes | +| TT6 | 3 | ∙ Trips, Blockings | + + + - 전담 보안 인력이 부족하여 보안 전문 지식이 없는 운영 엔지니어가 보안을 겸임하는 경우가 많이 존재하여 사이버 +위협 대응이 미흡하고 사고가 발생했을 때도 초기 대응이 지연되어 피해가 확산될 가능성이 큼 +2023년 10월 26일 개최된 ‘OT & ICS 보안 인사이트 2023’ 참가자 설문조사에서 응답자의 28.6%가 +OT 환경의 가장 시급한 보안 과제로 ‘가시성 확보’를 꼽아 가장 높은 비중을 차지함7) +OT 환경은 제어 표준 및 비공개 전용 프로토콜을 사용하기 때문에 범용 IT 보안 솔루션을 그대로 적용하기 +어려운 구조적 한계를 가짐 +OT 환경은 일반 IT 환경에서 사용되지 않는 독점 프로토콜을 기반으로 운영되기 때문에 전통적인 IT +보안 솔루션과의 호환성이 떨어짐 + - 레거시 시스템과 폐쇄적인 통신 프로토콜이 여전히 널리 사용되고 있어, 자산 검색·관리 기능을 갖춘 기존 IT +솔루션과 연동이 어렵고 그 결과 자산 식별이 불완전해 네트워크 가시성이 저하됨 +방화벽, IDS/IPS, SIEM 등 범용 IT 보안 솔루션은 OT 환경에서 충분히 효과적으로 동작하지 못하며, +OT 특화 프로토콜을 지원하고 DPI(Deep Packet Inspection) 기능을 내재한 전용 보안 솔루션이 +필요함 +7) 데이터넷, “[OT보안2023 설문] OT 조직 56% “OT 보안 계획 아직 없어””, 2023.10 + +![이미지 p.28](images/p0028_img1.png) + + +28 󰠾 OT 환경의 제로트러스트 적용 안내서 +3-3 +OT 환경에서의 제로트러스트 필요성 +▶ 경계기반 보안만으로는 IT에서 OT로의 횡적 이동, 랜섬웨어, 국가기반시설 위협에 대응 한계가 뚜렷하며 +OT 특화 제로트러스트가 필수 전략으로 부상 +▶ IT 중심 제로트러스트는 OT의 지연·가용성 요구, 레거시 장비, 비표준 프로토콜 등 현실 제약으로 적용 +한계가 뚜렷하므로 OT 환경에 특화된 제로트러스트 설계 및 단계적 도입 필요 +Fortinet 보고서에 따르면, 전 세계 OT 조직 절반이 사이버 공격을 경험했으며 이는 경제적 손실을 넘어 국가 +기반시설 안정성과 사회 전반에 중대한 위협이 되고 있음 +최근 OT 공격으로 랜섬웨어가 대표적이며, IT망을 경유하거나 원격 유지보수·외부 협력사 연결 등 외부 +접점을 통해 OT 영역으로 확산되는 특징을 보임 + - 공격자는 피싱 이메일을 통해 초기 침투에 성공하거나 계정을 탈취한 뒤, RDP·VPN 자격증명 및 원격 접속 도구를 +악용해 IT망을 거쳐 폐쇄망 내부 OT 시스템까지 침투함 +원자력시설의 원심분리기를 파괴한 Stuxnet, 미국 루즈벨트 댐 해킹 시도, 폴란드 트램 불법 제어 사례 +등 OT망을 직접 공격하는 사례는 국가 차원의 안보 위협임을 보여줌 +그러나 이러한 위협들은 경계 기반 보안 모델로 대응하기에는 한계를 보이고 있으므로 OT 제로트러스트 +보안 모델의 도입이 핵심 전략으로 요구됨 + - 특히 OT와 IT가 밀접하게 연계되는 환경에서 제로트러스트는 공격자의 횡적 이동을 억제하고, 핵심 시설에 대한 +접근을 정밀하게 제어하는 효과적인 방어체계로 작동할 수 있음 + - 그러나 그동안 연구되어 온 제로트러스트는 IT 환경에 맞추어서 발전되어왔으며, OT 환경에 적용하기 어렵다는 +문제가 있음 +기존 IT 환경 기반 제로트러스트는 가용성·실시간성 중심의 OT 환경에 그대로 적용하기 어려운 구조적 한계를 +가짐 +IT 제로트러스트는 인증·검증 강화로 인한 지연을 허용할 수 있지만, OT 보안은 가용성과 실시간성이 +최우선이므로 동일한 절차를 적용할 경우 제어 명령 지연이나 운영 중단으로 이어질 수 있음 + - IT 환경에서는 사용자 인증·다단계 인증(MFA)·세션 토큰 갱신 과정에서 수 초 수준의 지연이 발생해도 업무 +연속성에 큰 영향을 주지 않음 + - 그러나 OT망에서는 PLC, RTU, DCS 등 제어 장치 간 통신이 수 밀리초(ms) 단위 주기로 이루어지며, 지연이 +발생하면 제어 신호 전달 실패, 공정 제어 오류, 안전 계전기 오동작으로 이어질 수 있음 + +IT 제로트러스트는 정기 패치와 보안 기능 확장을 전제로 하지만, OT망은 레거시 시스템과 보안 기능이 +부족한 장비가 많아 패치 지연·취약점 방치가 빈번하고, 이로 인해 IT 방식의 에이전트·암호화·중앙 인증 +적용이 어렵다는 한계를 가짐 + - IT 환경은 정기적 패치·업데이트를 전제로 하지만, OT 장비는 10~30년의 운용 주기와 24시간 무중단 가동 특성 +때문에 펌웨어 교체나 패치가 지연되거나 불가능한 경우가 많음 + - 또한, 일반적인 보안 스캐너(Nmap, Nessus 등)는 OT 장비 오작동을 유발할 수 있어 점검조차 제한적이어서 +IT 제로트러스트가 가정하는 에이전트 설치·암호화 적용·중앙 인증이 현실적으로 어려울 수도 있음 +IT 환경은 계층적 구조보다 단일 네트워크 기반 접근제어에 익숙하지만, OT 환경은 Purdue 모델과 +같은 계층적 구조에 따라 자산·데이터 흐름이 달라지므로, 동일한 보안 통제를 일괄적으로 적용하기 곤란함 + - IT 환경은 단일 네트워크 또는 클라우드 중심으로 접근제어가 가능하나, OT는 Purdue 모델 기반 계층 구조에 +따라 보안 요구가 크게 달라짐 +IT 제로트러스트는 중앙 집중적 로깅과 분석 도구를 가정하지만, OT망은 독점 프로토콜과 낮은 호환성 +때문에 기존 IT 솔루션으로는 가시성이 부족하며, 내부자 공격에 대한 대비가 미흡할 수밖에 없음 + - IT 제로트러스트는 표준 프로토콜 기반 중앙 로그 관리·SIEM 분석을 전제로 하지만, OT 환경은 Modbus·DNP3· +Profinet 등 산업용 독점 프로토콜을 사용하여 기존 IT 솔루션과 호환성이 낮음 +구분 +IT 제로트러스트에서의 가정 +OT 환경의 제약·한계 +목표/우선 순위 +- 보안·기밀성 중심, 일정 수준의 지연·단기 서비스 +중단은 허용 가능 +- 가용성·실시간성 최우선, 제어 신호 지연 시 생산 +중단·안전사고로 직결 +패치·업데이트 +- 정기적 패치·보안 기능 확장을 전제로 안정적 운영 +가능 +- 레거시 시스템으로 인해 패치 지연·적용 제한, +취약점 방치 위험 +네트워크 구조 +- 단일 네트워크·클라우드 중심 접근제어 구조 +- Purdue 모델 기반 계층 구조로 레벨별 자산 특성에 +따라 보안 요구 상이 +로그·가시성 +- 표준 프로토콜 기반 중앙 로그·SIEM 분석 가정 +- 산업용 프로토콜 특성으로 기존 IT 보안 솔루션과 +호환성이 낮아, 네트워크·자산 가시성 확보 제한 +<표 9> IT 제로트러스트와 OT 환경에서의 제약사항 비교 +출처) 저자 재구성 +OT의 특성을 고려하여, OT 환경에 특화된 맞춤형 제로트러스트 모델 필요 +OT 보안은 가용성과 실시간성을 최우선으로 고려해야 하므로, 보안 통제가 시스템 성능 저하나 지연을 +유발하지 않도록 설계되어야 함 + - 초기에는 보호 대상 범위를 작게 설정하고, 운영 흐름을 가시화하여 지연 요인을 파악하고 안정적인 통제 지점을 +확보해야 함 + - 아키텍처 설계 시 에이전트 적용 가능 구간과 네트워크 기반 제어를 병행하여 불필요한 성능 저하를 줄이고, 기본 +차단 원칙과 보완 절차를 함께 적용해 연속성을 보장해야 함 + +| 구분 | IT 제로트러스트에서의 가정 | OT 환경의 제약·한계 | +| --- | --- | --- | +| 목표/우선 순위 | ∙ 보안·기밀성 중심, 일정 수준의 지연·단기 서비스 중단은 허용 가능 | ∙ 가용성·실시간성 최우선, 제어 신호 지연 시 생산 중단·안전사고로 직결 | +| 패치·업데이트 | ∙ 정기적 패치·보안 기능 확장을 전제로 안정적 운영 가능 | ∙ 레거시 시스템으로 인해 패치 지연·적용 제한, 취약점 방치 위험 | +| 네트워크 구조 | ∙ 단일 네트워크·클라우드 중심 접근제어 구조 | ∙ Purdue 모델 기반 계층 구조로 레벨별 자산 특성에 따라 보안 요구 상이 | +| 로그·가시성 | ∙ 표준 프로토콜 기반 중앙 로그·SIEM 분석 가정 | ∙ 산업용 프로토콜 특성으로 기존 IT 보안 솔루션과 호환성이 낮아, 네트워크·자산 가시성 확보 제한 | + + +30 󰠾 OT 환경의 제로트러스트 적용 안내서 +OT망은 장기간 운용되는 레거시 시스템과 보안 기능이 부족한 장비들로 인해 취약점이 방치되기 쉬우므로, +네트워크 세그멘테이션·OT 특화 보안 솔루션을 활용한 통제가 필요함 + - 패치·보안 기능 구현이 어려운 장비는 자산 식별 및 메타데이터 관리를 통해 네트워크 차원에서 보호할 수 있는 +방안을 모색해야 함 + - 패치 지연에 따른 취약점은 지속적 모니터링·문맥 기반 평가·단방향 게이트웨이 등을 통한 다층 방어로 보완해야 함 +OT 환경에서는 Purdue 모델과 같은 계층적 구조를 고려한 제로트러스트 설계가 필요하며, 해당 모델에서 +각 레벨의 특성과 제약에 따라 정책 집행 방식을 다르게 하고 제로트러스트 구성 요소의 배치 지점을 +고려해야 함 + - 상위 계층(레벨 3~5)은 주로 이더넷 기반 환경으로, 일반 OS에서 동작하는 서버·워크스테이션·애플리케이션이 +포함되므로 보안 에이전트 설치가 가능하고, 사용자·프로세스 단위의 세밀한 정책 통제가 가능함 + - 반면 하위 계층(레벨 0~1)은 시리얼 기반 통신과 전용 펌웨어 장비(PLC, RTU, 센서 등)가 많아 에이전트 설치가 +어렵고, 네트워크 세그멘테이션·화이트리스트 기반 접근제어·산업용 방화벽 등 네트워크 차원의 보완이 필요함 +접근 및 행위 로그를 체계적으로 관리하고 가시성을 향상시켜 내부자 공격에 대한 대비가 필수적임 + - OT 네트워크는 독점 프로토콜 사용으로 인해 기존 IT 보안 솔루션과 호환성이 낮으므로, OT 전용 프로토콜 +센서·DPI 등 OT 특화 기술을 활용해 가시성을 확보해야 함 + - OT 네트워크는 트래픽 패턴이 단순한 경우가 많아 정상 기준선을 설정하기 용이하며, 이를 기반으로 이상 행위를 +조기에 탐지해야 함 + - 이러한 모니터링은 단순한 오탐을 줄이고 대응 속도를 높일 뿐만 아니라, 환경 변화에 맞춰 기준선을 주기적으로 +갱신하는 체계를 마련하여 내부자 공격과 같은 은밀한 위협에도 선제적으로 대응할 수 있어야 함 + - 따라서 제로트러스트 보안 모델을 적용해 사용자의 신원·행위·접근 패턴을 지속적으로 검증하고, 최소 권한 원칙을 +유지하는 정책을 통해 내부자 위협을 사전에 식별하여 횡적 이동을 차단해야 함 + +![이미지 p.31](images/p0031_img0.png) + + +# 제4장 국내외 OT 특화 제로트러스트 + +정책 동향 및 적용 사례 +4-1 +해외 동향 +▶미국 원자력 시설 특화 제로트러스트 정책, DoD의 실증을 통한 OT 특화 제로트러스트 전략, CSA 중요기반 +시설 제로트러스트 가이드라인 등은 국내 OT 제로트러스트 로드맵 수립 등에 활용 가능 +▶일본, 싱가포르 등은 OT 규제·가이드 강화로 보안성 향상을 추진 중이며, 국내도 이에 맞춰 OT 보안 기준· +거버넌스·보고 체계·공급망 보안을 우선 고도화 한 후, 단계적인 OT-제로트러스트 전략 수립 필요 +(미국) 2022년, 미국 원자력규제위원회(Nuclear Regulatory Commission, NRC)는 FFR(Future Focused +Research) 프로그램의 일환으로 원자력시설 제로트러스트 아키텍처 적용 방안 연구 수행 +SMR 및 차세대 원자로에 새로운 디지털 기술이 적극 도입되면서 기존 보안 아키텍처로는 위협에 대응하기 +어려운 점을 계기로 제로트러스트 아키텍처 도입 방안에 대한 연구 시작 +해당 연구는 크게 3가지 업무를 중심으로 연구를 수행하였으며, 각 업무 수행 결과는 기술보고서 +(Technical Letter Report, TLS) 형태로 2022년~2025년 사이에 걸쳐 발표되었음 +발간시기 +업무 +제목 +Task1 +Zero Trust for Operational Technology Literature Review +Task2 +Zero Trust Architectures for Operational Technology at Nuclear Facilities +Task3 +Implementing Zero Trust for Operational Technology at Nuclear Facilities +<표 10> NRC의 제로트러스트 관련 기술보고서 +출처) 저자 재구성 +NRC는 원자력 OT 환경에서 사고·공격 시 직접적으로 SSEP8)기능에 영향을 미치는 요소를 고려하여 +제로트러스트 핵심 요소를 3가지(Device, Network, User) 선정 +8) SSEP(Safety, Security, and Emergency Preparedness): 원자력시설에서 안전, 보안, 비상대응 역량을 통합적으로 관리·평가하기 요소 + +| 발간시기 | 업무 | 제목 | +| --- | --- | --- | +| | Task1 | | +| | Task2 | | +| | Task3 | | + + +![이미지 p.32](images/p0032_img0.png) + + +![이미지 p.32](images/p0032_img1.png) + + +![이미지 p.32](images/p0032_img2.png) + + +![이미지 p.32](images/p0032_img3.png) + + +![이미지 p.32](images/p0032_img4.png) + + +![이미지 p.32](images/p0032_img5.png) + + +32 󰠾 OT 환경의 제로트러스트 적용 안내서 +핵심 요소 +설명 +기기 +(Device) +- 기기 정의는 네트워크 연결 가능한 하드웨어 자산으로 정의(CISA 기준) +- 원자력 발전소(NPP)에서는 SSEP 기능 수행 또는 관련 장치가 필수 식별 대상 +- 자동화 장치처럼 ‘사용자 역할’을 수행하는 디바이스도 포함하며, 원격 기기(드론)도 고려 대상 +사용자 +(User) +- 사용자 정의는 인간 + 비인간 엔티티(NIST SP 800-207 기준) +- 모든 사용자는 식별·인증 필수, 그리고 역할·데이터·애플리케이션과 연계됨 +- NPP 통제구역 내 장치와 연관된 사용자만 제로트러스트 검증 대상 +- 원격 사용자도 포함 가능 +네트워크 +(Network) +- 네트워크도 ID·애플리케이션·데이터·기능을 보유한 엔티티로 간주 +- 물리적 접근 자체도 네트워크의 일부로 포함됨 +- 자동화를 통해 통신 트래픽을 인간 개입 최소화 상태에서 재구성 가능 +<표 11> NRC의 원자력시설 제로트러스트 핵심 요소 +반면, 독립적으로 SSEP 기능을 수행하지 않고 항상 핵심 요소와 연계되어 작동하는 교차 요소로 4가지 +(Identity, Application, Automation, Data) 선정 +교차요소 +설명 +Identity +(신원) +- 인증 및 권한 부여 기반 모든 기기, 사용자, 네트워크는 검증 가능한 신원을 가져야 함 +Application +(애플리케이션) +- 사용자가 사용하는 소프트웨어로, 최소 권한 설정 필요 (공격 표면 최소화) +Automation +(자동화) +- 동적 정책 업데이트 및 실행을 가능하게 하는 핵심 기술 (예: 안전, 보안, 비상 대응 지원) +Data +(데이터) +- 사용자와 장치 간 네트워크를 통해 전송, 상황 인식 및 신뢰 알고리즘 분석에 사용됨 +<표 12> NRC의 원자력시설 제로트러스트 교차 요소 +<그림 7> NRC의 원자력시설 제로트러스트 핵심 요소 및 교차 요소 +출처) U.S.NRC, “Implementing Zero Trust for Operational Technology” + +| 교차요소 | 설명 | +| --- | --- | +| Identity (신원) | ∙ 인증 및 권한 부여 기반 모든 기기, 사용자, 네트워크는 검증 가능한 신원을 가져야 함 | +| Application (애플리케이션) | ∙ 사용자가 사용하는 소프트웨어로, 최소 권한 설정 필요 (공격 표면 최소화) | +| Automation (자동화) | ∙ 동적 정책 업데이트 및 실행을 가능하게 하는 핵심 기술 (예: 안전, 보안, 비상 대응 지원) | +| Data (데이터) | ∙ 사용자와 장치 간 네트워크를 통해 전송, 상황 인식 및 신뢰 알고리즘 분석에 사용됨 | + + +![그림 7> NRC의 원자력시설 제로트러스트 핵심 요소 및 교차 요소](images/p0033_img0.png) + + +NRC는 원자력시설 OT 환경에서의 제로트러스트 핵심 요소 3가지와 NIST SP 800-207에서 제공하는 +논리적 제로트러스트 아키텍처의 데이터/제어 평면과 대응시킴 + - NRC의 제로트러스트 아키텍처는 일반적인 제로트러스트 아키텍처와 유사하게 정책결정지점(PDP), 정책 엔진 +(PE), 정책 관리자(PA), 신뢰도 엔진, 정책 저장소, 정책정보지점(PIP), 정책시행지점(PEP)으로 구성됨 + - 특히, NRC에서는 접근 주체에 대한 신뢰도를 판단할 수 있도록 정보를 제공하는 PIP에 대해 원자력시설에서 얻을 +수 있는 정책정보지점에 대해 제시함 +<그림 8> NRC의 원자력시설 논리적 제로트러스트 아키텍처 +출처) U.S.NRC, “Implementing Zero Trust for Operational Technology” +PIP 요소 +설명 +ICAM +- 사용자 계정, 신원 정보를 생성 및 저장하며, 관리하는 역할을 수행함 +- 여기에는 단순한 사용자 신원 관리뿐 아니라 접근 및 자격증명 관리가 포함되며, 연합 신원(federated +identity)도 이 범주에 속함 +- 즉, 계정 생성부터 자격증명 유지·관리, 신원 연계까지 신원 및 권한 관련 전 과정을 포괄하는 범주 +엔드포인트 +보안 +- 엔드포인트를 공격으로부터 보호하고 관리되는 장치와 관리되지 않는 장치 모두가 네트워크에 미치는 +영향을 차단하는 보안 기술과 솔루션을 의미 +- 여기에는 호스트 기반 방화벽, 악성코드 스캐닝 및 방어 장치, 취약점 및 위협 완화 기법, 그리고 호스트 침입 +방지 활동이 모두 포함됨 +보안 분석 +- 원자력시설에 필요한 모든 위협 인텔리전스 피드와 트래픽/활동 모니터링을 수집하는 기능 +- 통신 경로와 네트워크를 포함해 자산의 현재 상태에 대한 보안 및 행위 분석을 모으고 자산 및 네트워크를 +지속적으로 모니터링하여 위협이나 악의적 활동에 능동적으로 대응할 수 있도록 함 +데이터 보안 +- 원자력시설에서 보호된 자산에 안전하게 접근하기 위한 정책을 포함하며, 데이터가 저장되거나 전송되는 +과정에서 이를 보호하는 수단까지 아우름 +- 즉, 안전한 데이터 접근과 보호를 위한 정책적·기술적 장치 전반을 의미 +<표 13> NRC의 원자력시설 환경에서의 PIP 요소 + +| PIP 요소 | 설명 | +| --- | --- | +| ICAM | ∙ 사용자 계정, 신원 정보를 생성 및 저장하며, 관리하는 역할을 수행함 ∙ 여기에는 단순한 사용자 신원 관리뿐 아니라 접근 및 자격증명 관리가 포함되며, 연합 신원(federated identity)도 이 범주에 속함 ∙ 즉, 계정 생성부터 자격증명 유지·관리, 신원 연계까지 신원 및 권한 관련 전 과정을 포괄하는 범주 | +| 엔드포인트 보안 | ∙ 엔드포인트를 공격으로부터 보호하고 관리되는 장치와 관리되지 않는 장치 모두가 네트워크에 미치는 영향을 차단하는 보안 기술과 솔루션을 의미 ∙ 여기에는 호스트 기반 방화벽, 악성코드 스캐닝 및 방어 장치, 취약점 및 위협 완화 기법, 그리고 호스트 침입 방지 활동이 모두 포함됨 | +| 보안 분석 | ∙ 원자력시설에 필요한 모든 위협 인텔리전스 피드와 트래픽/활동 모니터링을 수집하는 기능 ∙ 통신 경로와 네트워크를 포함해 자산의 현재 상태에 대한 보안 및 행위 분석을 모으고 자산 및 네트워크를 지속적으로 모니터링하여 위협이나 악의적 활동에 능동적으로 대응할 수 있도록 함 | +| 데이터 보안 | ∙ 원자력시설에서 보호된 자산에 안전하게 접근하기 위한 정책을 포함하며, 데이터가 저장되거나 전송되는 과정에서 이를 보호하는 수단까지 아우름 ∙ 즉, 안전한 데이터 접근과 보호를 위한 정책적·기술적 장치 전반을 의미 | + + +![그림 8> NRC의 원자력시설 논리적 제로트러스트 아키텍처](images/p0034_img0.png) + + +34 󰠾 OT 환경의 제로트러스트 적용 안내서 +출처) U.S.NRC, “Implementing Zero Trust for Operational Technology” +NRC는 RG 5.71에서 제시한 아키텍처를 기반으로 논리적 제로트러스트 아키텍처 구성 요소를 어디에, +어떻게 배치할지에 대해 2가지 모델 제안 + - 중앙 집중식 배치 모델: 제로트러스트 아키텍처 구성 요소는 전용 보안 레벨인 Level ZT에 통합되어 있으며, +PEP만 각 보안 레벨에 분산 배치 + - 중앙 집중식 배치 모델은 Level ZT의 PDP가 모든 보안 정책 결정을 맡기 때문에 정책 생성․유지가 단순하며, 전체 +아키텍처에 대해 일관된 보안 태세를 유지할 수 있다는 장점이 있지만 중앙 PDP가 고장나면 전체 시스템에 영향을 +미친다는 단점도 존재 + - 연합형 배치 모델: 각 보안 레벨(0~4)에 독립적인 제로트러스트 아키텍처 구성 요소를 보유하며, 해당 레벨의 +PDP가 정책 결정을 내리면 PEP가 로컬 수준에서 접근제어 + - 연합형 배치 모델은 각 레벨별로 로컬 정책과 데이터에 기반한 통제가 가능하여 레벨별 독립성과 자율성이 커진다는 +장점이 있지만, 전체적인 아키텍처의 상황 인식을 확보하기 위한 별도의 고려가 필요하다는 점을 단점으로 보고 +있음 +<그림 9> NRC의 원자력시설 접근제어 배치 모델 +출처) U.S.NRC, “Implementing Zero Trust for Operational Technology” +PIP 요소 +설명 +리소스 보호 +- 다른 범주에 속하지는 않지만 자원을 보호하기 위한 요소들이 해당 +- 자원 앞단에서 프록시 역할을 하거나, 모니터링과 제어를 통해 자원을 보호하는 구성 요소들이 이 범주에 +포함 +기기/사용자/ +네트워크 +인벤토리 +- 이 항목은 NRC 직원이 추가한 것으로, 해당 장치가 ①안전을 직접 보장하는 장치(Safety), ②안전에 +중요한 영향을 미치는 장치(Important-to-Safety), ③보안을 담당하는 장치(Security) 중 어느 범주에 +속하는지 구분하도록 요구 +- 보호 대상 장치가 맡은 안전·보안 기능을 알아야 취약점 관리나 모니터링 같은 보호 조치를 제대로 적용할 +수 있으며, 이는 결국 “무엇을 보유하고 있는가”라는 질문에 대한 답이 됨 + +![그림 9> NRC의 원자력시설 접근제어 배치 모델](images/p0035_img0.png) + + +NRC는 제로트러스트 아키텍처의 기능에 부합하도록 선정된 NIST SP 800-53 보안 통제를 기반으로, +사이버보안 계획(Cyber Security Plan, CSP)에 반영 가능한 추가 통제 항목 제시 + - 많은 원자력 시설은 자체 조정된 CSP를 운용하며, 이러한 CSP는 「원자력 발전소를 위한 사이버 보안 프로그램 +(NRC RG-5.71)」, 「원자력 발전소 사이버 보안 계획(NEI 08-09)」, 「원자력 발전소 - 계측, 제어 및 전력 시스템 - +보안 제어(IEC 63096)」 등의 지침을 기반으로 구축되어 있음 + - 그러나 현행 CSP는 NIST SP 800-53의 모든 보안 통제를 포함하지 않으며, 제로트러스트 아키텍처 구현에 +요구되는 일부 항목(지속적 검증·마이크로세그멘테이션·정교한 맥락 기반 접근제어 등)이 지침상에 충분히 반영 +되어 있지 않음 + - 이에, NRC는 제로트러스트에 부합하는 보안 통제항목을 도출하고자 하였고, NIST SP 800-53 내 총 13개의 +영역에서 73개의 보안 통제항목을 도출 +제로트러스트 환경에서 리소스 접근을 시도하는 모든 주체(인간·비인간 포함)에 대해 위험 수준을 신뢰 +점수로 수치화하도록 함 + - 신뢰 점수는 과거 행위, 스캔 결과, 장치 상태 등 다양한 속성과 메트릭을 분석하는 신뢰 알고리즘을 통해 산출되며, +신뢰 엔진이 이를 생성·관리함 + - 점수가 높을수록 위험은 감소하고 보안 유지 가능성은 높아지며, 본질적으로 동적 특성을 가져 지속적 검증과 정책 +갱신을 가능하게 함 +<그림 10> NRC 신뢰 점수 계산 방법 예시 +출처) NRC 자료 저자 재구성 +NRC는 제로트러스트 관점에서 접근 주체의 신뢰도를 평가하기 위해 신뢰 속성 제시 + - 신뢰 속성은 사용자·비인간 사용자·자원·네트워크 4가지 범주로 구분되며, 인증 강도·취약점 상태·기기 보안 수준· +자원 중요도·트래픽 이상 행위 등 각 속성을 평가하여 접근 주체의 신뢰도를 판단하는 기준으로 활용됨 + +![그림 10> NRC 신뢰 점수 계산 방법 예시](images/p0036_img0.png) + + +36 󰠾 OT 환경의 제로트러스트 적용 안내서 +<그림 11> NRC의 신뢰 속성 +출처) NRC 자료 저자 재구성 +신기술 도입 시 위험 평가, 정책·절차 개선, 완화 통제 구현, 통제 모니터링으로 4단계 위험 관리 사이클을 +제시하고 있음 +<그림 12> NRC의 신기술 도입을 위한 위험 관리 사이클 +출처) U.S.NRC, “Implementing Zero Trust for Operational Technology” + - 신기술 도입 시에는 기기·네트워크·운영 절차의 취약점과 위험을 분석하고, 수집 데이터의 기밀성·무결성·접근 +제어 확보, 악성코드 삽입 여부 점검 등 새로운 보안 위험 평가가 필요함 + +![그림 11> NRC의 신뢰 속성](images/p0037_img0.png) + + +![그림 11> NRC의 신뢰 속성](images/p0037_img1.png) + + + - 신기술 사용 과정에서 정책적 모호성 보완, 공급망 신뢰성 검증 강화 및 해당 기술이 제로트러스트 아키텍처 어느 +영역에 반영될지를 결정하는 등 보안 정책 및 절차 개선 요구 + - 도입된 보안 대책의 효과성을 점검하고 무선 통신 모니터링 장치 스캔 등, IIoT, 정교화된 점검을 통해 보안 통제 +모니터링을 지속 수행해야 함 +단계 +설명 +Step 1. +새로운 사이버보안 +위험 평가 +- 신기술(드론, AI 등) 도입 시 발생할 수 있는 장비·네트워크·운영 절차의 취약점 평가 +- 드론 수집 데이터는 기밀성·무결성·접근통제 보장이 필요 +- 신규 장비의 접근·구성 관리 취약점, 악성코드 삽입 가능성 점검 +- 새로운 기술이 기존 방어 아키텍처에 미치는 영향 및 ZT 요소(예: 무선/원격 운영) 적용 필요성 검토 +Step 2. +보안 정책 및 절차 +업데이트 +- 신기술 활용 시 기존 정책·절차의 모호성을 보완 +- 공급망 위험 관리 강화: 공급업체의 보안성 검증, 장비의 보안 설계 여부 확인 +- ZTA 적용 시 어떤 기능을 활용할지 정의(예: 무선 침입 탐지 시스템 → PEP·PIP 기능 수행) +- 하드웨어·소프트웨어·펌웨어 공급망 검증 및 보안성 확보 필요 +Step 3. +새로운 완화 통제 적용 +- 파악된 취약점에 대해 데이터·소프트웨어·펌웨어·통신(유·무선) 보호 대책 적용 +- 계정·접근·권한 관리와 암호화 적용, 패치 적용 및 별도 샌드박스에서 사전 테스트 수행 +- 장치 자체 보안이 미흡할 경우, 플랜트 환경* 내 보안 기능으로 보완 가능 +* 신기술 장치 자체에서 보안 통제를 구현하지 못할 경우, 발전소 내부 네트워크나 보안 인프라 차원에서 대신 +보안 기능을 적용한다는 의미 +Step 4. +보안 통제 모니터링 +- 새로 적용한 보안 통제의 효과성을 지속 모니터링해 신규 위험 식별 +- IoT·무선 통신 등 특화된 트래픽 감시 장비, 신기술 장치 스캐닝 도구 활용 +<표 14> NRC의 신기술 도입을 위한 위험 관리 단계 +출처) U.S.NRC, “Implementing Zero Trust for Operational Technology” +본 문서는 SSEP 기능과 원자력시설의 특수한 OT 환경을 고려하여 기기·네트워크·사용자를 중심으로 +한 제로트러스트 아키텍처 적용 방안을 제시한 것이 특징이나, 다음과 같은 한계점 존재 + - 문서에서는 기기·네트워크·사용자 활동에 대한 가시성 확보의 중요성을 언급하고 있으나, 이 외에 가시성에 대한 +언급을 하고 있지 않으며 이를 구현하기 위한 구체적 기술 방안이나 모니터링 체계 또한 제시되지 않음 + - 이러한 한계로 인해 지속적 검증 기반의 제로트러스트 운영체계를 구현하기 어렵고, 특히 본 문서가 원자력시설의 +특수한 OT 환경을 전제로 하고 있어 일반적인 산업 OT 환경에서는 참고는 가능하나 직접적인 적용에는 어려움이 +따를 수 있음 +(미국) 2023년, NIST에서 발표한 「Guide to Operational Technology Security(SP 800-82 r3)」는 OT +환경 보안을 위한 대표적 국제 가이드라인으로, 본 문서에서는 네트워크 보안 영역에서 세분화·격리, 중앙 로 +그 관리, 모니터링 등의 방법을 설명하면서 제로트러스트 아키텍처 명시 +IT와 OT 장비를 관리 권한·신뢰 수준·기능 중요도·데이터 흐름에 따라 구분·세분화하며, Purdue 모델· +ISA-95·IIoT 아키텍처 등을 활용할 수 있음 + - DMZ를 통한 구간 경계 설정이 중요하며, 방화벽·라우터·데이터 다이오드로 구간 간 통신을 제한하고 인가된 흐름만 +허용해야 함 + +| 단계 | 설명 | +| --- | --- | +| Step 1. 새로운 사이버보안 위험 평가 | ∙ 신기술(드론, AI 등) 도입 시 발생할 수 있는 장비·네트워크·운영 절차의 취약점 평가 ∙ 드론 수집 데이터는 기밀성·무결성·접근통제 보장이 필요 ∙ 신규 장비의 접근·구성 관리 취약점, 악성코드 삽입 가능성 점검 ∙ 새로운 기술이 기존 방어 아키텍처에 미치는 영향 및 ZT 요소(예: 무선/원격 운영) 적용 필요성 검토 | +| Step 2. 보안 정책 및 절차 업데이트 | ∙ 신기술 활용 시 기존 정책·절차의 모호성을 보완 ∙ 공급망 위험 관리 강화: 공급업체의 보안성 검증, 장비의 보안 설계 여부 확인 ∙ ZTA 적용 시 어떤 기능을 활용할지 정의(예: 무선 침입 탐지 시스템 → PEP·PIP 기능 수행) ∙ 하드웨어·소프트웨어·펌웨어 공급망 검증 및 보안성 확보 필요 | +| Step 3. 새로운 완화 통제 적용 | ∙ 파악된 취약점에 대해 데이터·소프트웨어·펌웨어·통신(유·무선) 보호 대책 적용 ∙ 계정·접근·권한 관리와 암호화 적용, 패치 적용 및 별도 샌드박스에서 사전 테스트 수행 ∙ 장치 자체 보안이 미흡할 경우, 플랜트 환경* 내 보안 기능으로 보완 가능 * 신기술 장치 자체에서 보안 통제를 구현하지 못할 경우, 발전소 내부 네트워크나 보안 인프라 차원에서 대신 보안 기능을 적용한다는 의미 | +| Step 4. 보안 통제 모니터링 | ∙ 새로 적용한 보안 통제의 효과성을 지속 모니터링해 신규 위험 식별 ∙ IoT·무선 통신 등 특화된 트래픽 감시 장비, 신기술 장치 스캐닝 도구 활용 | + + +38 󰠾 OT 환경의 제로트러스트 적용 안내서 +라우터, 게이트웨이, 방화벽, 서버 등 주요 네트워크·컴퓨팅 장비는 반드시 이벤트 로그를 기록하고, 이를 +중앙 관리 플랫폼에 집약하여 모니터링·경보·사고 대응에 활용해야 함 + - 보존 기간과 저장 용량 정책을 사전에 수립하는 것이 필요 +IDS/IPS, SIEM 등을 통해 트래픽을 분석하고 이상 행위 탐지 + - OT 트래픽은 IT보다 결정적인 요소를 가지고 있어 정상 상태를 기준선으로 삼아 공격 여부를 구분해야 하며, +암호화된 통신에 따른 모니터링 한계도 고려해야 함. + - IDS/IPS는 OT 프로토콜(Modbus, DNP3 등)에 특화된 서명 활용이 가능하나, IPS 자동 대응은 OT 가용성에 +영향을 줄 수 있어 DMZ 등 상위 계층에 배치하는 것이 권장됨 +기존 경계 보안으로는 구간 내 횡적 이동을 막기 어렵기 때문에, 접근 통제를 자원 가까이에 배치하고 +지속적으로 검증하는 ZTA 개념을 적용할 필요가 있음을 제시 + - 다만 PLC, 컨트롤러 등 일부 OT 장비는 ZTA 구현을 지원하지 못할 수 있어, Purdue 모델 3~5계층 등 상위 계층 +장비에 우선 적용하는 방식이 현실적임 + - 성능 저하·지연·단일 장애 지점 문제를 고려해 최적화가 필요하고 OT 환경의 공유 계정 사용은 ZTA 도입의 또 +다른 과제가 될 수 있음 +(미국) 2024년, CSA(Cloud Security Alliance)는 중요기반시설 및 ISC 환경에서 제로트러스트 적용을 위한 +지침을 포함하는 「Zero Trust Guidance for Critical Infrastructure」 문서 발간 +본 문서는 주요 인프라(Critical Infrastructure, CI)에서 직면할 수 있는 위협을 설명하면서, 이러한 +위협에 대해 대응하기 위한 목적으로 제로트러스트 전략 제시 + - 미국 CISA에서 정의한 CI 분야로는 화학(농업, 소비재 등), 상업 시설, 댐, 군/국방 방위산업, 정보기술, 원자로 +원자재/폐기물 등이 있음 + - 대부분의 CI는 레거시 시스템 및 특수한 프로토콜에 의존하고 패치 및 업그레이드가 용이하지 않은 폐쇄형 시스템을 +갖추고 있기 때문에 위협에 노출되면 파급력이 강함 + - 또한, IT와 OT랑 융합되면서 무선통신, SaaS(클라우드), 인터넷 연결 등이 증가하여 하나의 취약점이 여러 분야의 +장애를 초래할 위험이 있음 + - 이에, 제로트러스트 아키텍처를 구현하여 시스템 보안 향상, 제도·법률·컴플라이언스 요건 충족, 사이버 공격 +방어를 동시에 달성하는 것을 목표로 가짐 +본 문서는 IT 환경과 OT 환경 간의 근본적 차이를 체계적으로 비교하고 OT 환경이 지니는 고유한 +특수성을 제시함으로써, 기존 IT 중심의 제로트러스트 모델을 그대로 OT/ICS 환경에 적용하기에는 +한계가 있음을 시사함 + - IT는 기밀성·무결성·가용성을 균형 있게 고려해 설계되는 반면, OT는 기밀성과 무결성보다 지속적이고 안전한 +가용성 유지를 최우선으로 하는 특징을 가짐 + - IT 환경에서는 유지보수나 시스템 변경에 비교적 유연하지만, OT 환경은 짧은 가동 중단조차 허용되지 않으며 +새로운 기술이나 도구를 도입할 때도 안전성과 운영 영향에 대한 충분한 검토가 필요 + + - 또한 OT는 복잡하고 고비용의 시스템으로 구성되어 있어 위협에 즉각 대응하기 어렵고, 독점 프로토콜 사용으로 +인해 정기적 업데이트가 힘듦 + - OT는 시스템 장애가 안전, 건강, 환경, 국가 안보에까지 영향을 미칠 수 있는 위험성을 내포하며, 국가·경제 전반에 +걸친 광범위한 규모의 영향을 발생시킬 수 있음 + - OT는 공공과 민간 소유권이 혼재된 경우가 많아, 시스템 업데이트와 같은 보안 결정 과정에서 이해관계 조정이 +추가적으로 필요하다는 특수성을 지님 + - 이러한 IT와 OT의 차이점 및 OT 환경의 특성으로 인해 OT 환경에 특화된 제로트러스트 아키텍처가 요구되는 +상황임 +본 문서는 제로트러스트 도입을 위한 점진적 접근 방식으로 기어가기(Crawl)-걷기(Walk)-달리기 +(Run) 접근법을 권장 + - Crawl 단계에서는 비교적 위험도가 낮고 영향 범위가 제한적인 보호 표면을 대상으로 제로트러스트 적용 시도 +(테스트) + - Walk 단계는 Crawl 단계에서의 경험을 토대로 점차 보호 표면 적용 범위를 확장함 + - Run 단계에서는 핵심 자산에 제로트러스트를 도입하고, 이를 조직 전반의 보안·운영 프로세스에 완전히 통합하여 +성숙한 제로트러스트 체계를 구축하도록 함 + - 이를 통해 조직은 정책 수립, 기술 배치, 운영 절차 등에서 시행착오를 최소화하며 학습 효과를 축적할 수 있고, +단계적 접근으로 초기 과도한 투자나 운영 충격을 피하면서도 안정적으로 보안 수준을 고도화할 수 있음 +<그림 13> CSA의 OT 환경 제로트러스트 접근법 +출처) CSA, “Zero Trust Guidance for Critical Infrastructure” +본 문서는 OT·ICS 환경에서의 제로트러스트 적용 5단계 프로세스(① 보호 표면 정의 → ② 운영 흐름 +매핑 → ③ 제로트러스트 아키텍처 구축 → ④ 제로트러스트 정책 수립 → ⑤ 지속 모니터링 및 유지관리)를 +제시 + +![그림 13> CSA의 OT 환경 제로트러스트 접근법](images/p0040_img0.png) + + +40 󰠾 OT 환경의 제로트러스트 적용 안내서 + - 이 5단계는 IT 환경에 적용되던 일반적인 제로트러스트 프레임워크를 그대로 모방한 것이 아니라, OT/ICS 환경의 +특수성(안전·가용성 우선, 장기 운용, 레거시 장비 존재)을 반영해 재구성 + - 따라서 단순한 보안 통제가 아니라 운영 안정성과 보안 통합을 동시에 달성하기 위한 절차로 설계 + - 또한 각 단계는 ISA/IEC 62443의 Zone–Conduit 모델과 제로트러스트 원칙을 바탕으로 만들어졌으며, 위협 +기반 사고 관점에서 어떤 자산이 보호 대상인가(Protect Surface) → 어떤 방식으로 연결·작동하는가(Flow +Mapping) → 이를 어떻게 제어·검증할 것인가(Architecture·Policy) → 어떻게 지속적으로 보장할 것인가 +(Monitoring)”라는 논리적 흐름을 따른 구조임 +단계 번호 +프로세스 이름 +설명 +1단계 +보호 표면 정의 +- 중요 자산(데이터·애플리케이션·장비·서비스, DAAS) 식별 및 우선 순위화 +2단계 +운영 흐름 매핑 +- OT 자산 간 제어·프로세스 흐름을 파악하여 위협 확산 경로 차단 +3단계 +ZTA 구축 +- Purdue/Zone–Conduit 모델 기반 세분화 및 경계 설정 +4단계 +ZT 정책 수립 +- 최소 권한, 지속적 검증, 상황 기반 인증 +5단계 +지속 모니터링 및 유지관리 +- SIEM·IDS/IPS 활용, 운영 안정성과 보안 균형 유지 +<표 15> OT·ICS 환경 제로트러스트 적용 5단계 프로세스 +출처) CSA, “Zero Trust Guidance for Critical Infrastructure” +CSA는 자신들이 제시한 5단계 프로세스를 통해 SANS9)의 주요 통제 항목을 강화할 수 있다고 언급 +주요 통제항목 +설명 +CSA 중요기반시설 ZT와의 관계 +ICS 사고 대응 +- 시스템이 계속 작동하면서 공격의 영향을 최소화하고 +운영에 미치는 영향을 줄이기 위한 조치 우선 +- 5단계(지속 모니터링 및 유지관리)의 일부 +방어 가능한 +아키텍처 +- 시스템 설계·구현을 통해 위험을 줄이고 보안 담당자의 +활동을 지원하는 구조 +- 구현 절차의 전 단계에 걸쳐 이루어짐 +가시성과 모니터링 +- 상호연동된 ICS 구성 요소 간 상호작용을 이해하기 위한 +네트워크·로그 모니터링 및 분석 필수 +- 5단계(지속 모니터링 및 유지관리)와 일치 +안전한 원격 접속 +- MFA 적용을 원칙으로 하되 불가능 환경에는 점프호스트 +등 통제 지점 마련, 상황별 원격 연결 차단 가능 구조 설계 +- 구현 절차의 전 단계에 걸쳐 이루어짐 +위험 기반 취약점 +관리 +- 모든 취약점을 동일 처리하지 않고, 조직에 실질적 위험을 +초래하는 취약점에 우선 대응 +- 2단계를 통해 핵심 데이터 흐름에 대한 +포괄적인 이해를 제공함으로써 이를 강화 +<표 16> SANS의 OT/ICS 주요 통제항목 및 CSA 중요기반시설 ZT와의 관계 +(미국) 미 공군 Spangdahlem 기지(독일)는 DoD 내 최초로 ‘Project BlastWave’ 제로트러스트 기반 사이버 +보안 솔루션을 상수·하수 처리시설(독일 Spangdahlem 공군기지)에 도입하여 산업제어시스템의 영구적 +취약점을 보호하는 시범사업을 개시함 +BlastWave의 솔루션은 2017년에 제로트러스트 원칙을 기반으로 ICS와 중요기반시설을 보호하기 위해 +개발되었음 +9) SANS Institute: 1989년에 설립된 세계 최대 규모의 보안 교육 및 연구 기관으로, 매년 수만 명의 보안 전문가를 대상으로 교육 과정을 운영하고 +있으며 보안 통제 가이드라인(SANS Top 20, 현 CIS Controls)을 개발하여 업계에서 기준점으로 활용하고 있음 + +| 단계 번호 | 프로세스 이름 | 설명 | +| --- | --- | --- | +| 1단계 | 보호 표면 정의 | ∙ 중요 자산(데이터·애플리케이션·장비·서비스, DAAS) 식별 및 우선 순위화 | +| 2단계 | 운영 흐름 매핑 | ∙ OT 자산 간 제어·프로세스 흐름을 파악하여 위협 확산 경로 차단 | +| 3단계 | ZTA 구축 | ∙ Purdue/Zone–Conduit 모델 기반 세분화 및 경계 설정 | +| 4단계 | ZT 정책 수립 | ∙ 최소 권한, 지속적 검증, 상황 기반 인증 | +| 5단계 | 지속 모니터링 및 유지관리 | ∙ SIEM·IDS/IPS 활용, 운영 안정성과 보안 균형 유지 | + + +| 주요 통제항목 | 설명 | CSA 중요기반시설 ZT와의 관계 | +| --- | --- | --- | +| ICS 사고 대응 | ∙ 시스템이 계속 작동하면서 공격의 영향을 최소화하고 운영에 미치는 영향을 줄이기 위한 조치 우선 | ∙ 5단계(지속 모니터링 및 유지관리)의 일부 | +| 방어 가능한 아키텍처 | ∙ 시스템 설계·구현을 통해 위험을 줄이고 보안 담당자의 활동을 지원하는 구조 | ∙ 구현 절차의 전 단계에 걸쳐 이루어짐 | +| 가시성과 모니터링 | ∙ 상호연동된 ICS 구성 요소 간 상호작용을 이해하기 위한 네트워크·로그 모니터링 및 분석 필수 | ∙ 5단계(지속 모니터링 및 유지관리)와 일치 | +| 안전한 원격 접속 | ∙ MFA 적용을 원칙으로 하되 불가능 환경에는 점프호스트 등 통제 지점 마련, 상황별 원격 연결 차단 가능 구조 설계 | ∙ 구현 절차의 전 단계에 걸쳐 이루어짐 | +| 위험 기반 취약점 관리 | ∙ 모든 취약점을 동일 처리하지 않고, 조직에 실질적 위험을 초래하는 취약점에 우선 대응 | ∙ 2단계를 통해 핵심 데이터 흐름에 대한 포괄적인 이해를 제공함으로써 이를 강화 | + + +‘Project BlastWave’는 DoD 제로트러스트 관리사무소에서 약 26만 7천 달러를 지원받아 추진되었으며, +2023년 12월 19일부로 시범사업이 시작되었음 +‘Project BlastWave’는 BlastWave 기업을 중심으로 설립된 OTZTA(Operational Technology +Zero Trust Alliance)의 주요 실증 과제로, OT 네트워크 내 제로트러스트 보안 모델을 실제 산업제어 +시스템에 적용·검증한 사례임 +기업명 +역할 +BlastWave +- 제로트러스트 기반 OT 보안 솔루션 제공, 실세계에 기반한 OT 제로트러스트 기능 구현 +Nozomi Networks +- OT/IoT 보안에서 글로벌 리더, 네트워크·엔드포인트 가시성, 위협 탐지 및 AI 기반 분석 제공 +Booz Allen Hamilton +- 미 정부를 대상으로 제로 트러스트 추진, OT 영역까지 확장된 전략 제공 +DarkTrace +- AI 기반 사이버보안 솔루션 제공, 이상 징후 탐지에 강점 +SwimLane +- 보안 자동화 플랫폼 제공, 저코드 방식으로 지속적 컴플라이언스 및 대응 가능 +CloudBees +- DevOps 및 소프트웨어 전달 보안 지원, OT 보안 개발 프로세스 연계 +Fend +- 데이터 다이오드를 통해 OT 시스템을 물리적으로 보호하며 연속적인 데이터 모니터링 가능 +<표 17> OTZTA 소속 기업 및 역할 +출처) OTZTA +ICS 내부의 취약점을 외부에 보이지 않게 은폐하고, 마이크로세그멘테이션과 AI 기반 탐지·차단을 통해 +공격 확산을 방지하는 제로트러스트 보안 기능 제공 +본 시범사업은 군 기지의 물·하수 처리시설을 시작으로, 향후 DoD 전반의 중요 인프라 및 산업제어시스템 +보호 체계로 확산될 전망임 +(미국) 미 국방부(DoD)는 OT 환경의 고가용성·레거시 장비 사용·다양한 산업용 프로토콜 등의 특성, 물리적 +보안 고려사항 등을 반영한 OT 제로트러스트 전략에 대해 2025년 11월 말 발표하고 구체적인 단계별 활동 +정의 +기존 IT 전략과 유사한 틀을 유지하되 단계별 활동 수를 152개(목표 91개, 고급 61개)에서 105개(목표 +84개, 고급 21개)로 축소하여 현실성을 높임 +Purdue 모델, IEC 62443, UFC 4-010-06 등에서 활용하는 전통적인 5계층 구조 대신 추상화된 2계층 +(운영 계층, 프로세스 제어 계층)으로 구분 + - OT 환경에서의 ZT 활동은 고수준의 요구사항에 따라 더 유연하고 동적으로 만들기 위함 + - 엔터프라이즈 IT 계층은 조직의 일반적인 정보 기술 환경을 의미하며, 이메일 서버, 조달 및 자산 관리 서비스, 신원 +인증 서비스 등을 포함 + - 운영 계층은 개념적으로 감시 계층(응용 서비스, 제어 센터 워크스테이션, HMI 등) 및 자동화 계층(컨트롤러, 무선 +게이트웨이 등)의 도구를 포함(Purdue 모델의 4, 5계층) + - 프로세스 제어 계층은 센서, 액추에이터, 모터 및 기타 기계 장비의 로컬 작동을 가능하게 하는 현장 제어장치 및 +시스템으로 구성(Purdue 모델의 0~3 계층) + +| 기업명 | 역할 | +| --- | --- | +| BlastWave | ∙ 제로트러스트 기반 OT 보안 솔루션 제공, 실세계에 기반한 OT 제로트러스트 기능 구현 | +| Nozomi Networks | ∙ OT/IoT 보안에서 글로벌 리더, 네트워크·엔드포인트 가시성, 위협 탐지 및 AI 기반 분석 제공 | +| Booz Allen Hamilton | ∙ 미 정부를 대상으로 제로 트러스트 추진, OT 영역까지 확장된 전략 제공 | +| DarkTrace | ∙ AI 기반 사이버보안 솔루션 제공, 이상 징후 탐지에 강점 | +| SwimLane | ∙ 보안 자동화 플랫폼 제공, 저코드 방식으로 지속적 컴플라이언스 및 대응 가능 | +| CloudBees | ∙ DevOps 및 소프트웨어 전달 보안 지원, OT 보안 개발 프로세스 연계 | +| Fend | ∙ 데이터 다이오드를 통해 OT 시스템을 물리적으로 보호하며 연속적인 데이터 모니터링 가능 | + + +42 󰠾 OT 환경의 제로트러스트 적용 안내서 +<그림 14> 일반적인 음용수 시스템을 위한 엔터프라이즈 IT 및 OT 환경의 구분 +출처) DoD, “Executive Summary: Zero Trust for Operational Technology” +OT 환경이 본질적으로 디지털 환경과 물리적 환경을 통합하는 특성을 가짐에 따라 본 문서는 제로 +트러스트를 위한 물리적 고려사항 및 보안통제 제시 + - IT 환경에서 MFA과 유사한 생체 인식 접근 제어(지문 스캐너, 얼굴 인식 등) 설치, 역할 기반 물리적 접근, IT +환경에서의 방화벽과 유사하게 주변 울타리 및 방벽 설치 등 + - 물리적 보안 통제는 디지털 보안 조치를 대체하는 개념이 아닌 OT ZT를 위한 보완적 요소이며, 효과적인 제로 +트러스트 구현을 가능하게 하여 OT 환경에서의 복원력을 강화할 수 있음 +(미국) Microsoft는 OT 네트워크에 제로트러스트 원칙을 적용하기 위해 명시적 확인·최소 권한·침해 가정의 +3대 원칙을 기반으로, 점프 호스트·네트워크 세분화·상태 기반 접근제어 등을 활용한 현실적 수정 방안을 제안함 +Microsoft는 OT 네트워크에서의 고유한 위험 및 과제 4가지를 선정 + - ① 독점 프로토콜·노후화 장비·제한된 처리능력으로 보안 적용 제약 + - ② 안전·가용성 우선 설계로 정기 점검·패치가 제한적 + - ③ 외부 계약자 원격 접속 등으로 공격 노출 증가 + - ④ 클라우드·IIoT 확산으로 에어갭 모델 붕괴 및 공격 표면 확대 +Microsoft는 위와 같은 OT 네트워크 특성을 반영한 제로트러스트 원칙을 제시함 + - 네트워크–기기 간 모든 연결을 식별·관리해 숨은 종속성과 예기치 않은 중단을 방지하고, 필요한 경우 점프 호스트를 +통해 원격 세션을 제한적으로 허용하며 MFA·권한 관리 등 강력한 인증을 적용 + - 기기·세그먼트 간 통신을 암호화·보호하고, 네트워크를 분할해 측면 이동을 차단하며, ICS 전반의 통신도 소규모 +영역으로 나누어 모니터링과 유지관리의 용이성 확보 + +![그림 14> 일반적인 음용수 시스템을 위한 엔터프라이즈 IT 및 OT 환경의 구분](images/p0043_img1.png) + + + - 기기의 위치·상태·행동 데이터를 기반으로 접근을 제한하고, 최신 상태 유지·분석·자동화된 대응을 통해 보안을 강화 + - 승인된 기기·트래픽 기준을 지속적으로 점검하며, 인력·기기·시스템의 변화에 맞춰 세그먼트와 접근 정책을 주기적으로 +조정 +Microsoft는 자사의 솔루션인 Defender for IoT를 활용하여 OT 네트워크에 제로트러스트 원칙을 +적용하기 위한 구체적 정책과 실행 방안을 제시하고 있음 + - OT 제로트러스트는 상시 모니터링과 가시성 확보가 핵심적이며, IoT 기기의 증가로 인해 이 모니터링 범위가 +OT 외부까지 확대됨 + - Defender for IoT는 OT-IoT 전반의 트래픽과 기기 상태를 통합적으로 모니터링하여 OT 제로트러스트에서 요구되는 +지속적인 검증을 가능하게 함 +<그림 15>는 Microsoft Defender for IoT의 Purdue 모델 기반 배치 구조를 보여줌 + - Microsoft Defender for IoT은 OT 네트워크의 스위치에서 SPAN10)/TAP11) 기반 패시브 트래픽 수집 센서를 +사용하여 Level 1~3 구간의 통신을 모니터링함 + - 수집된 트래픽은 Azure로 전송되어 클라우드 기반 분석 엔진에서 ICS 프로토콜 해석, 자산 식별, 이상 행위 탐지를 +수행 + - 센서는 OT 네트워크 내부에 위치하지만, 보안 분석·경보 처리·대시보드 관리는 Azure Defender for IoT에서 +중앙화된 방식으로 운영됨 + - 이러한 구조는 IT–OT 전반의 트래픽을 통합 모니터링하며, 생산 설비의 제어 명령 흐름을 방해하지 않는 비침투적 +(passive) 보안 감시 모델을 제공함 +<그림 15> Microsoft 사의 Microsoft Defender for IoT 배치 방안 +출처) Microsoft, “Defender for IoT and your network architecture” +10) Switch Port Analyzer의 약어로, 스위치에서 특정 포트의 트래픽을 복제(mirroring)해서 다른 포트로 보내는 기능 +11) Terminal Access Point의 약어로, 물리적으로 케이블 사이에 설치해 트래픽을 하드웨어 수준에서 복제하는 장치 + +![그림 15> 는 Microsoft Defender for IoT의 Purdue 모델 기반 배치 구조를 보여줌](images/p0044_img0.png) + + +![그림 15> 는 Microsoft Defender for IoT의 Purdue 모델 기반 배치 구조를 보여줌](images/p0044_img1.png) + + +44 󰠾 OT 환경의 제로트러스트 적용 안내서 +(EU) NIS2 Directive는 유럽연합(EU)이 제정한 법적 구속력을 갖는 사이버보안 지침(Directive)으로, 중요 +기반시설 및 산업 인프라 전반에 대한 보안 의무를 강화하고 OT/ICS 영역까지 규제 범위를 확장하고 있음 +2016년 NIS Directive(Directive 2016/1148)을 채택하여 유럽 전역의 네트워크 및 정보시스템의 +사이버 보호 기반 마련 +클라우드 서비스, 원격근무, IoT·OT 환경 등 증가하는 사이버 위험 대응을 위해 2022년 12월 NIS2 +Directive(Directive 2022/2555)로 개정됨 +이는 에너지·운송·금융·보건·디지털 인프라 등 산업 전반을 포괄하며 중형·대형 민간·공공기업 및 공급망 +등으로 적용 범위를 확대함 +체계화된 모니터링 및 거버넌스를 포함하여 ICS/OT를 포함한 중요 기반시설의 보안 의무를 강화하고 +있음 + - 사고 발생 시 24시간 내 초기 보고, 72시간 내 상세 보고, 1개월 내 최종 보고 등 보고 체계 강화 + - 경영진의 사이버보안 전략, 위험관리 책임 및 교육·훈련을 의무화하여 보안을 조직 전체의 문제로 인식하도록 함 + - 불이행 시 과징금 부과를 통해 이행 강제성 강조 +2024년 10월부터 EU 국가 대상 적용이 시작되어 2025년 8월 기준, EU 27개 회원국 중 14개국에서 +법제화가 완료되었으며, 계속해서 법제화 진행 중 +EU는 법적 구속력이 강한 규제를 기반으로 OT 보안을 강화하고 있으며, EU 내 사업을 하는 제3국 기업도 +NIS2 준수를 요구받을 수 있음 +(일본) 경제산업성(METI)은 「공장 시스템을 위한 사이버/물리 보안 가이드라인」을 발표하며, 공장 내 다양한 +기기가 네트워크에 연결되는 사례가 증가함에 따라 기업이 마련해야 할 보안 대책 제시 +일본은 디지털청과 경제산업성을 중심으로 스마트팩토리·스마트시티를 아우르는 보안 정책을 마련함 + - 해당 가이드라인은 공급망 전반의 보안 위험, OT-IT 융합 과정에서의 네트워크 확장·외부 연결 증가, 클라우드·IoT +기기 활용에 따른 새로운 위협을 체계적으로 정의하고, 제로트러스트 개념 도입 가능성까지 포함하여 보안 관리 +체계를 구체적으로 제시 + - 특히, 공급업체에도 보안 표준(SEMI E18712) 등)을 요구하여 산업 전반에 보안 요건을 확산하는 정책을 추진 +중이며, 이는 개별 기업 차원을 넘어 국가 차원에서 산업 경쟁력과 보안의 균형을 도모하는 전략으로 평가됨 +(싱가포르) 싱가포르 사이버보안청(CSA)은 「Operational Technology Cybersecurity Masterplan 2024」를 +발표하며, 국가 차원에서 OT 환경 전반의 보안 수준 제고를 추진하고 있음 +이 계획은 CII(Critical Information Infrastructure)를 넘어 비핵심 OT 영역까지 포함해, 산업 전반의 +보안 성숙도를 높이는 것을 목표로 함 +12) 반도체 등 제조 장비에 적용되는 국제 보안 표준 + + - 주요 전략에는 Secure-by-Deployment 원칙(설계→배치→운영 전 과정 보안 내재화), 인력 양성 및 전문 교육 +체계 확립, 위협 정보 공유 및 사고 보고 체계 강화, 공급망 및 비핵심 OT 부문까지 보안 확대 등이 포함되며, 이를 +통해 OT 환경을 IT와 동등한 수준에서 다루면서도 OT 특수성을 반영한 보안 관리 체계를 마련함 + - 특히, 공급업체에도 보안 표준(SEMI E187 등)을 요구하여 산업 전반에 보안 요건을 확산하는 정책을 추진 중이며, +이는 개별 기업 차원을 넘어 국가 차원에서 산업 경쟁력과 보안의 균형을 도모하는 전략으로 평가됨 + - 또한 「Cybersecurity Code of Practice For Critical Information Infrastructure – Second Edition +Revision One(이하, CCoP 2.0)」을 통해 OT를 포함한 기반시설 운영자들에게 최소 보안 요건을 의무화하여, +제도적 강제력을 기반으로 한 체계적인 보안 거버넌스를 확립 +4-2 +국내 동향 +▶ 국내 OT 보안은 국가 차원의 공통 지침과 산업별 특화 가이드라인을 통해 최소 보안수준과 현장 적용성을 +확보하고 있음 +▶ 제로트러스트는 금융·클라우드 등 IT 환경을 중심으로 연구 및 실증사업 진행 중 +▶ 그러나 OT 환경에 특화된 제로트러스트 적용과 검증은 아직 이루어지지 못하고 있으며, 이에 따라 OT 환경 +대상의 제로트러스트 실증 사업 추진이 필요함 +국내 OT 보안은 국가 차원에서 제정된 공통 지침을 기반으로 운영되고 있으며, 주요 기반시설 전반에 최소한의 +보안 기준을 제시하고 각 기관의 관리·운영 체계에 직접 반영되고 있음 +국가정보원의 「국가정보보안기본지침」 제53조의2(제어시스템 보안)는 각급 기관이 OT 및 ICS를 비롯한 +국가 중요 제어시스템을 운영할 때 백신설치, 보안패치 및 침해사고 대응방안 수립 등 보안대책을 마련하고 +업무망과 분리하거나 안전한 연동수단을 적용하도록 규정 + - 기타 제어시스템 보안과 관련한 사항은 국가정보원장이 배포한 「국가·공공기관 제어시스템 보안가이드라인」 +준수 강제 +과학기술정보통신부의 「주요정보통신기반시설 취약점 분석·평가 기준」은 주요정보통신기반시설 내 +정보시스템 및 제어시스템에 대한 400여 개의 보안 점검 항목을 제시하며 각 보안 점검 항목의 만족 요구 + - 관리적 분야, 물리적 분야, 기술적 분야(유닉스, 윈도, 보안 장비, 네트워크 장비, 제어시스템, PC, 데이터베이스, +이동통신, 웹) 별 취약점 분석·평가 기준 제시 + - 계정 관리, 패치 적용, 로그 관리, 접근통제 등 세부 점검 항목을 통해 기반시설 운영기관이 보안수준을 객관적으로 +평가하고 취약점 개선을 체계적으로 수행할 수 있도록 함 + +![이미지 p.46](images/p0046_img0.png) + + +![이미지 p.46](images/p0046_img1.png) + + +![이미지 p.46](images/p0046_img2.png) + + +![이미지 p.46](images/p0046_img3.png) + + +46 󰠾 OT 환경의 제로트러스트 적용 안내서 +한국정보통신기술협회(TTA)의 「산업제어시스템 보안 요구사항(TTAK.KO-12.0307)」은 산업제어시스템 +내 계층별 기술적·관리적 보안 요구사항을 정의하여 산업 전반에서 공통적으로 적용되는 보안 표준 제공 + - 산업제어시스템 내 현장장치 계층, 제어 계층, 운영 계층에 대한 보안 감사, 식별·인증, 접근 통제, 전송/저장 데이터 +보호, 보안 기능 관리, 상태 관리 등 종합적인 보안 요구사항 제시 +구분 +문서명 +요약 +제1부 +개념 및 참조모델 +산업제어시스템 내 각 계층에 적용되는 보안요구사항을 정의하기 위해서 필요한 보안개념 및 +보안참조모델 제시 +제2부 +현장장치 계층 +현장장치 계층에 속하는 구성 요소들을 안전하게 관리 및 운영하는데 필요한 보안요구사항을 정의 +제3부 +제어 계층 +제어 계층에 속하는 구성 요소들을 안전하게 관리 및 운영하는데 필요한 보안요구사항을 정의 +제4부 +운영 계층 +운영 계층에 속하는 구성 요소들을 안전하게 관리 및 운영하는데 필요한 보안요구사항을 정의 +<표 18> 산업제어시스템 보안 요구사항(TTAK.KO-12.0307) 구성 +출처) TTA, “산업제어시스템 보안 요구사항(TTAK.KO-12.0307)” +국내 OT 환경은 산업별 고유한 운영 특성과 위협 요인을 고려하여 마련된 특화 보안 지침을 기반으로 운영되고 +있으며, 이를 통해 각 분야의 핵심 인프라가 직면한 보안 요구사항을 충족하고 있음 +(신재생) 국가정보원의 「국가·공공기관 신재생에너지 보안가이드라인 및 체크리스트」는 신재생에너지 +발전 및 운영 설비의 특수성을 반영하여 사이버보안 위협 대응 방안을 제시하며, 인터넷망과 분리되지 +않은 환경에서 적용 가능한 실질적 보안 대책 제시 +(원자력) 한국원자력통제기술원(KINAC)의 「RS-015(원자력시설의 컴퓨터 및 정보시스템 보안)」는 +원자력시설의 정보시스템 및 제어시스템을 전자적 침해행위로부터 보호하기 위한 보안 심사·검사 및 +이행 기준을 제시 +(해양선박) 한국선급(KR)의 「해상 사이버보안 시스템 지침(2024)」은 선박 및 항만 IT/OT 시스템의 +보안수준을 평가하고 관리하는 체계를 제시하며, 선박 운영과 안전 확보를 위한 단계별 대응방안 제시 +(전력망) 한국정보통신기술협회(TTA)의 「스마트그리드 보안 요구사항(TTAK.KO-12.0182/R1)」은 +지능형 전력망 전 영역의 보안 기준을 정의하여 안정성과 복원력 확보 방안 제시 +(제조) 한국인터넷진흥원(KISA)의 「스마트공장 사이버보안 가이드」는 ICT와 제조설비가 융합된 스마트 +공장의 특성을 고려하여 6개 영역의 보안 요구사항과 세부 점검항목을 제시하며, 현장에서 활용 가능한 +체크리스트 제공 +(교통) 한국인터넷진흥원(KISA)의 「스마트교통 사이버보안 가이드」는 차량·인프라·네트워크가 실시간 +연결되는 스마트교통의 특성을 고려하여, 서비스 구성 요소별 보안 요구사항과 대응방안을 제시하며, +현장에서 활용 가능한 점검 체크리스트 제공 +(에너지) 한국인터넷진흥원(KISA)의 「스마트에너지 사이버보안 가이드」는 AMI, ESS, EMS, EV 충전 +시스템, 셀프주유기·충전기, 댁내 기기 등 주요 구성 요소를 대상으로 보안 요구사항과 대응방안 제시 + +| 구분 | 문서명 | 요약 | +| --- | --- | --- | +| 제1부 | 개념 및 참조모델 | 산업제어시스템 내 각 계층에 적용되는 보안요구사항을 정의하기 위해서 필요한 보안개념 및 보안참조모델 제시 | +| 제2부 | 현장장치 계층 | 현장장치 계층에 속하는 구성 요소들을 안전하게 관리 및 운영하는데 필요한 보안요구사항을 정의 | +| 제3부 | 제어 계층 | 제어 계층에 속하는 구성 요소들을 안전하게 관리 및 운영하는데 필요한 보안요구사항을 정의 | +| 제4부 | 운영 계층 | 운영 계층에 속하는 구성 요소들을 안전하게 관리 및 운영하는데 필요한 보안요구사항을 정의 | + + +산업분류 +보안 지침 +발간/개정일 +주요 내용 +신재생 +국가·공공기관 +신재생에너지 +보안가이드라인 및 +체크리스트 +2025년 +3월 +- 태양광, 풍력, 연료전지 등 보안에 취약한 신재생 에너지 발전설비를 +대상으로 침해사고 예방을 위한 보안패치, 접근통제 등 기술적 보호조치 +적용을 강제 +- 각 신재생에너지 시스템의 특성과 환경을 고려한 세부 보안 점검 +체크리스트 제공을 통한 실효성 확보 +원자력 +원자력시설의 +컴퓨터 및 +정보시스템 보안 +2024년 +12월 +- 원자력시설 내 필수 자산을 식별하고, 물리적·논리적 접근통제를 통해 +제어시스템을 보호하도록 요구 +- 사이버 공격의 예방, 탐지, 대응, 완화 및 복구 단계를 포함하는 심층방호 +보호전략 수립 및 적용을 강제함 +해양선박 +해상 사이버보안 +시스템 지침 +2024년 +6월 +- 선박의 항해, 기관, 화물, 통신 시스템을 대상으로 사이버보안 등급을 +정의하고, 사이버 공격 예방·탐지·대응 절차를 규정 +- 선사 및 항만 운영자가 자체 보안계획을 수립하고, 정기적 모의훈련과 +점검을 실시하도록 강제해 해양선박 보안 국제 표준과 연계된 관리 수준을 +달성하도록 강제 +전력망 +스마트그리드 보안 +요구사항 +2024년 +12월 +- 발전·송전·배전·분산자원·수용가·전기차 충전·시장·운영·서비스 등 9개 +영역별 참조모델을 기반으로 지능형 전력망 전 영역에 대한 보안 요구사항 +제시 +- 접근제어, 인증, 침해 대응, 통신보호 등 10대 분야 100여 개 보안 항목을 +명시해 설계·운영 단계에서 통합적인 보안 관리가 이루어지도록 규정 +제조 +스마트공장 +사이버보안 가이드 +2019년 +12월 +- 접근통제, 데이터 보호, 안전한 상태 유지, 자산 관리 등 각 보안 영역별 +세분화된 요구사항 제시를 통한 스마트공장 내 제어시스템과 생산설비의 +보안 강화 +- 사용자 계정 관리, 권한 분리, 무선 접근 통제, 네트워크 분리, 보안 로그 +관리, 이상 징후 탐지 등 구체적 실행 지침을 포함 +교통 +스마트교통 +사이버보안 가이드 +2018년 +5월 +- 차량 내 ECU, 무선통신(DSRC, LTE/5G), 클라우드 서버, 모바일 단말기 +등으로 구성된 스마트교통 서비스 환경에서 발생 가능한 위협을 식별하고 +대응 방안을 제시 +- 위협 유형은 서비스 거부(DoS), 데이터 위·변조, 중간자 공격, 무단 접근, +악성 프로그램 실행 등으로 분류되며, 이에 대한 인증, 접근통제, 암호화, +로그 관리, OTA 업데이트 검증 등 구체적 대응 방안 제시 +에너지 +스마트에너지 +사이버보안 가이드 +2019년 +12월 +- 에너지 도메인 내 구성 요소에서 발생 가능한 보안위협(예: 스마트미터 +취약점 악용, ESS 제어정보 위·변조, EV 충전 데이터 탈취 등)을 식별하고, +기술적·관리적 보안 요구사항 제시 +- 보안 요구사항은 기밀성, 무결성, 가용성, 부인방지를 기본 원칙으로 하며, +암호화, 접근통제, 로그 관리, 침입 탐지, 안전한 통신 규격 준수 등을 통해 +서비스 안정성과 신뢰성을 확보 +<표 19> 국내 산업별 OT 보안 지침 및 가이드라인 +출처) 국내 산업별 보안 지침 저자 재구성 + +| 산업분류 | 보안 지침 | 발간/개정일 | 주요 내용 | +| --- | --- | --- | --- | +| 신재생 | 국가·공공기관 신재생에너지 보안가이드라인 및 체크리스트 | 2025년 3월 | ∙ 태양광, 풍력, 연료전지 등 보안에 취약한 신재생 에너지 발전설비를 대상으로 침해사고 예방을 위한 보안패치, 접근통제 등 기술적 보호조치 적용을 강제 ∙ 각 신재생에너지 시스템의 특성과 환경을 고려한 세부 보안 점검 체크리스트 제공을 통한 실효성 확보 | +| 원자력 | 원자력시설의 컴퓨터 및 정보시스템 보안 | 2024년 12월 | ∙ 원자력시설 내 필수 자산을 식별하고, 물리적·논리적 접근통제를 통해 제어시스템을 보호하도록 요구 ∙ 사이버 공격의 예방, 탐지, 대응, 완화 및 복구 단계를 포함하는 심층방호 보호전략 수립 및 적용을 강제함 | +| 해양선박 | 해상 사이버보안 시스템 지침 | 2024년 6월 | ∙ 선박의 항해, 기관, 화물, 통신 시스템을 대상으로 사이버보안 등급을 정의하고, 사이버 공격 예방·탐지·대응 절차를 규정 ∙ 선사 및 항만 운영자가 자체 보안계획을 수립하고, 정기적 모의훈련과 점검을 실시하도록 강제해 해양선박 보안 국제 표준과 연계된 관리 수준을 달성하도록 강제 | +| 전력망 | 스마트그리드 보안 요구사항 | 2024년 12월 | ∙ 발전·송전·배전·분산자원·수용가·전기차 충전·시장·운영·서비스 등 9개 영역별 참조모델을 기반으로 지능형 전력망 전 영역에 대한 보안 요구사항 제시 ∙ 접근제어, 인증, 침해 대응, 통신보호 등 10대 분야 100여 개 보안 항목을 명시해 설계·운영 단계에서 통합적인 보안 관리가 이루어지도록 규정 | +| 제조 | 스마트공장 사이버보안 가이드 | 2019년 12월 | ∙ 접근통제, 데이터 보호, 안전한 상태 유지, 자산 관리 등 각 보안 영역별 세분화된 요구사항 제시를 통한 스마트공장 내 제어시스템과 생산설비의 보안 강화 ∙ 사용자 계정 관리, 권한 분리, 무선 접근 통제, 네트워크 분리, 보안 로그 관리, 이상 징후 탐지 등 구체적 실행 지침을 포함 | +| 교통 | 스마트교통 사이버보안 가이드 | 2018년 5월 | ∙ 차량 내 ECU, 무선통신(DSRC, LTE/5G), 클라우드 서버, 모바일 단말기 등으로 구성된 스마트교통 서비스 환경에서 발생 가능한 위협을 식별하고 대응 방안을 제시 ∙ 위협 유형은 서비스 거부(DoS), 데이터 위·변조, 중간자 공격, 무단 접근, 악성 프로그램 실행 등으로 분류되며, 이에 대한 인증, 접근통제, 암호화, 로그 관리, OTA 업데이트 검증 등 구체적 대응 방안 제시 | +| 에너지 | 스마트에너지 사이버보안 가이드 | 2019년 12월 | ∙ 에너지 도메인 내 구성 요소에서 발생 가능한 보안위협(예: 스마트미터 취약점 악용, ESS 제어정보 위·변조, EV 충전 데이터 탈취 등)을 식별하고, 기술적·관리적 보안 요구사항 제시 ∙ 보안 요구사항은 기밀성, 무결성, 가용성, 부인방지를 기본 원칙으로 하며, 암호화, 접근통제, 로그 관리, 침입 탐지, 안전한 통신 규격 준수 등을 통해 서비스 안정성과 신뢰성을 확보 | + + +48 󰠾 OT 환경의 제로트러스트 적용 안내서 +국내 제로트러스트 사업은 표준화된 가이드라인과 IT 중심 시범사업을 기반으로 확산되고 있으나, OT 환경 +대상 제로트러스트 적용 방안 및 실증 연구 필요 +과학기술정보통신부의 「제로트러스트 가이드라인 1.0 및 2.0」은 공공 및 민간기관의 제로트러스트 보안 +모델 도입을 위해 단계별 성숙도 평가, 핵심 기능·세부역량 정의, 조직 내 역할과 도입 준비 방안 등을 +구체적으로 제시 + - 4단계 성숙도 모델과 환경별 적용사례, 침투시험 기반 효과성 분석 등 실무 활용 가능한 내용을 포함 + - 각 기관은 이를 참고해 권한관리·접근제어·연속적 검증 등 제로트러스트 핵심 요소별 보안대책을 마련하고 실환경에 +적용 가능 +과학기술정보통신부와 한국인터넷진흥원(KISA)은 ‘제로트러스트 도입 시범사업’을 통해 금융, 클라우드, +SaaS 등 IT 중심 영역에서 제로트러스트 모델 실증·확산을 지원 + - 총 6개의 선정 과제 수행을 통해 국내 민간기업의 실제 업무환경에 적합한 제로트러스트 보안 모델 개발 및 적용, +지속적인 운영・관리 수행 +번호 +주관기관 +사업명 +SGA솔루션즈 +- 금융 부문 모바일 개발환경 제로 트러스트 보안모델 도입 사업 +프라이빗 테크놀로지 +- 데이터 중심의 제로 트러스트 오버레이 금융망 구축 +이니텍 +- 인공지능(AI) 클라우드 인프라 보호를 위한 제로트러스트 시범사업 +SK쉴더스 +- 서비스형 소프트웨어(SaaS) 환경 저변 확대에 따른 제로트러스트 기반의 보안 실증 사업 +모니터랩 +- 보안 서비스 에지(SSE) 플랫폼 기반 제로트러스트 보안 모델 실증 +이스트시큐리티 +- 제로트러스트 기반 범용 인증(클라우드 및 특수망) 접근제어 시스템 구축 사업 +<표 20> 제로트러스트 도입 시범사업 선정 과제 +출처) 한국인터넷진흥원 보도자료, “KISA, 정보보호 기업과 함께 국민디지털 안전 강화”, 2025.05 +국내에서는 시범사업 및 기업 솔루션 개발을 통한 IT 영역에서의 다양한 제로트러스트 적용사례가 축적 +되고 있으나, 산업제어망 등 OT 환경 특화 제로트러스트 적용·실증 사례가 거의 없어 적용 방안 및 실증 +연구 필요 + - 예: 이스트시큐리티 컨소시엄은 공항철도를 수요기관으로 포함하였으나, 제어망 등 OT 환경이 아닌 5G 특화망 +에서의 인증·접근통제 기술 연구가 주요 목적임 + - 이에 따라 국가 기반시설을 포함하는 OT 환경 보호와 제로트러스트 보안 체계 실효성 검증을 위해 OT 환경 대상 +제로트러스트 적용·실증 시범사업 추진이 필수적임 + +| 번호 | 주관기관 | 사업명 | +| --- | --- | --- | +| 1 | SGA솔루션즈 | ∙ 금융 부문 모바일 개발환경 제로 트러스트 보안모델 도입 사업 | +| 2 | 프라이빗 테크놀로지 | ∙ 데이터 중심의 제로 트러스트 오버레이 금융망 구축 | +| 3 | 이니텍 | ∙ 인공지능(AI) 클라우드 인프라 보호를 위한 제로트러스트 시범사업 | +| 4 | SK쉴더스 | ∙ 서비스형 소프트웨어(SaaS) 환경 저변 확대에 따른 제로트러스트 기반의 보안 실증 사업 | +| 5 | 모니터랩 | ∙ 보안 서비스 에지(SSE) 플랫폼 기반 제로트러스트 보안 모델 실증 | +| 6 | 이스트시큐리티 | ∙ 제로트러스트 기반 범용 인증(클라우드 및 특수망) 접근제어 시스템 구축 사업 | + + +# 제5장 OT 특화 제로트러스트 적용 방안 + +5-1 +OT ZT 핵심 원칙 및 고려 사항 +▶ OT 환경에서의 제로트러스트는 실시간성·가용성 유지와 장비의 자율적 신뢰 판단 구조를 전제로 설계됨 +▶ OT 특화 제로트러스트 핵심 원칙과 고려 사항을 도출하여 OT망에 적합한 제로트러스트 아키텍처 설계가 +필요함 +OT 환경에서 제로트러스트 아키텍처는 단순한 IT 보안 모델의 이식이 아닌, OT 고유 특성을 반영한 원칙 및 +고려 사항 필요 +OT 환경에서는 ①인증·검증 및 패치 과정에서도 지연·중단 없이 동작하도록 안전장치와 이중화를 통해 +실시간성과 가용성을 유지(실시간성·가용성 유지), ②외부 서버·네트워크 상태와 무관하게 현장 OT +장비가 최소한의 정책 판단과 자율적 신뢰 결정을 지속(OT 장비의 독립성 유지), ③공격자 내부 존재를 +전제로 통신을 통제하고(OT·IT 전역에서의 침해 가정), ④결정적 트래픽 특성을 기반으로 지속적으로 +상태를 감시해야 함(지속적 모니터링) +핵심원칙 +설명 +실시간성·가용성 +유지 +- 인증·검증 및 소프트웨어 패치 과정에서 지연이나 중단이 발생하지 않도록 안전 장치와 이중화 구조를 +마련해야 함 +OT 장비의 독립성 +유지 +- 현장 장비는 외부 서버나 네트워크 상태와 관계없이 최소한의 정책 판단 능력을 유지하며, 자율적으로 +신뢰 결정을 지속할 수 있어야 함 +OT·IT 전역에서의 +침해 가정 +- OT와 IT망 상관없이 공격자가 이미 내부에 있다고 전제하고, 마이크로세그멘테이션·DPI(Deep Packet +Inspection)·이상 행위 기반 탐지 등을 통해 횡적 이동을 차단해야 함 +지속적 모니터링 +- OT 트래픽의 결정적 특성을 활용해 기준선을 마련하고, 이상 징후를 탐지할 수 있는 중앙 로그 관리·SIEM +체계를 마련해야 함 +<표 21> OT 특화 제로트러스트 핵심 원칙 +OT 환경에 제로트러스트 적용을 위해서는 ①레거시 장비 제약 ②장비 기능 중심 보안 ③망분리와 접점 +관리 ④문화적 요소 등 여러 가지 OT 환경의 고유한 특성을 고려해야 함 + +| 핵심원칙 | 설명 | +| --- | --- | +| 실시간성·가용성 유지 | ∙ 인증·검증 및 소프트웨어 패치 과정에서 지연이나 중단이 발생하지 않도록 안전 장치와 이중화 구조를 마련해야 함 | +| OT 장비의 독립성 유지 | ∙ 현장 장비는 외부 서버나 네트워크 상태와 관계없이 최소한의 정책 판단 능력을 유지하며, 자율적으로 신뢰 결정을 지속할 수 있어야 함 | +| OT·IT 전역에서의 침해 가정 | ∙ OT와 IT망 상관없이 공격자가 이미 내부에 있다고 전제하고, 마이크로세그멘테이션·DPI(Deep Packet Inspection)·이상 행위 기반 탐지 등을 통해 횡적 이동을 차단해야 함 | +| 지속적 모니터링 | ∙ OT 트래픽의 결정적 특성을 활용해 기준선을 마련하고, 이상 징후를 탐지할 수 있는 중앙 로그 관리·SIEM 체계를 마련해야 함 | + + +![이미지 p.50](images/p0050_img0.png) + + +![이미지 p.50](images/p0050_img1.png) + + +50 󰠾 OT 환경의 제로트러스트 적용 안내서 +고려 사항 +설명 +레거시 장비 제약 +- 암호화·인증 미지원 장비에는 제로트러스트 기능을 직접 적용하기 어렵기 때문에, 상위 계층부터 +단계적으로 확대하거나 게이트웨이 기반 보완 필요 +장비 기능 중심 보안 +- OT 환경에서는 단순한 네트워크 통제로는 이상 행위를 식별하기 어렵기 때문에 장비의 기능 단위별 +정상 동작 범위를 기준으로 신뢰를 판단하는 기능 중심 보안 필요 +망분리와 접점 관리 +- 단순히 네트워크를 분리하는 것만으로는 안전하지 않으며, USB·원격 접속·업데이트 같은 모든 외부 +연결 경로를 통제할 수 있어야 함 +문화적 요소 +- 기술적 통제와 더불어 OT 운영자 및 계약자에 대한 보안 인식 제고, 정책 준수 의무화가 병행되어야 +제로트러스트가 정착 가능 +<표 22> OT 특화 제로트러스트 적용 고려 사항 +5-2 +OT ZT 적용 방안 +▶ Purdue 모델 전 계층(Level 0~4)을 포괄하되, 국내 산업환경에 맞게 「제로트러스트 가이드라인 2.0」의 +6대 핵심 요소를 기반으로 제로트러스트 요구사항을 제시하였으며, 추후 단계별 성숙도 모델로 발전시켜야 함 +OT 환경에서 제로트러스트 아키텍처를 실현하기 위해서는 5.1절에서 제시한 핵심 원칙 및 고려 사항을 기반으로, +실제 운영 단계에서 어떻게 적용하고 성숙도를 높여갈 것인지에 초점을 두어야 함 +(핵심 목표) 운영 중단을 최소화하면서 단계적으로 기능을 도입하고, 기존 망분리·경계 보안을 제로트러스트 +기반 통합 체계로 전환하여 OT 특수성을 고려한 보안·안전·가용성의 균형을 확보하는 것 +(6대 핵심 요소) 「제로트러스트 가이드라인 2.0」에서 제시한 핵심 요소를 기반으로, OT 환경 특성에 +적합한 인증·검증 체계, 보안 장비 배치, 세분화 정책, 접근제어, 데이터 보호 기법 등을 구체화하여 단계별 +성숙도 모델로 발전시킬 필요가 있음 + - 이는 IT망과 OT망을 병행 운영하는 조직에서 두 환경 간의 보안 정책 불일치와 관리 혼선을 최소화하기 위한 접근 +방식으로, 특히 OT망을 중심으로 하되 IT망의 연계 특성을 함께 고려한 통합적 제로트러스트 운영체계 확립을 +목표로 함 + - 특히, IT망을 통해 유입된 랜섬웨어가 OT망으로 확산되는 사례는 IT-OT 경계 구간의 단순 차단만으로는 대응이 +어려우며, 6대 핵심 요소 기반으로 IT-OT를 동시에 아우르는 보안 기능을 적용하여 위험을 조기에 식별하고 피해 +확산 방지 필요 + - 따라서 본 문서에서는 국내 IT 환경에서 지속적으로 활용되고 있는 제로트러스트 6대 핵심 요소와 2대 교차 역량을 +참조하되 OT 환경의 특수성과 운영상의 요구를 함께 반영하여 IT와 OT를 통합적으로 포괄할 수 있는 제로트러스트 +모델을 제시하였으며 그 핵심 구성으로 6대 핵심 요소를 선정함 + +| 고려 사항 | 설명 | +| --- | --- | +| 레거시 장비 제약 | ∙ 암호화·인증 미지원 장비에는 제로트러스트 기능을 직접 적용하기 어렵기 때문에, 상위 계층부터 단계적으로 확대하거나 게이트웨이 기반 보완 필요 | +| 장비 기능 중심 보안 | ∙ OT 환경에서는 단순한 네트워크 통제로는 이상 행위를 식별하기 어렵기 때문에 장비의 기능 단위별 정상 동작 범위를 기준으로 신뢰를 판단하는 기능 중심 보안 필요 | +| 망분리와 접점 관리 | ∙ 단순히 네트워크를 분리하는 것만으로는 안전하지 않으며, USB·원격 접속·업데이트 같은 모든 외부 연결 경로를 통제할 수 있어야 함 | +| 문화적 요소 | ∙ 기술적 통제와 더불어 OT 운영자 및 계약자에 대한 보안 인식 제고, 정책 준수 의무화가 병행되어야 제로트러스트가 정착 가능 | + + +OT망에서는 Purdue 모델의 Level 0~4 전 구간을 아우르는 기술적 요소를 고려해야 하며, 각 계층에 +적용할 수 있는 제로트러스트 기능 요구사항을 다음과 같이 제시 +※ 본 요구사항은 보안성 강화를 위한 핵심 요소별 참고용 제시안으로 절대적인 요구사항은 아니며, 기관의 환경·위험 수준·운영 +여건에 따라 탄력적으로 적용할 수 있어야 함 +핵심 요소 +요구사항 설명 +식별자·신원 +- OT 환경은 유지 보수 인력, 관리자 등 다수의 사용자 계정이 혼재되므로, IT망에서 운영자·관리자 +계정에 대해 조직 차원의 IAM, MFA, 지속인증 등의 기술을 적용해 계정 탈취나 권한 오남용 방지 +(Level 3.5~4) +- OT 환경은 HMI, EWS 등 장비 로컬 로그인, 단순 패스워드 인증 등 제한적·폐쇄형 인증 수단에 +의존하는 경우가 많고, 비밀번호 변경도 특정 상황에서만 수행되는 경우가 많아 인증 강도와 갱신 +주기가 취약해지기 쉬움. 시스템 계정 및 공용 계정을 최소화하고 IAM·MFA 기반의 논리적 인증을 +적용한 통합 인증체계를 단계적으로 도입 (Level 1~3) +기기 및 엔드포인트 +- 원격 접속 단말, 온북 등 IT망에서 OT망으로 접속하는 기기에 대해 PKI 기반 보안 접속 및 EDR 적용 +(Level 3.5~4) +- HMI, 엔지니어링 워크스테이션 등 관리용 장비에는 중앙 집중적인 인증체계를 적용하며, 가용성으로 +인해 인증 수단 적용이 어려운 장비에는 접근 로그 수집 및 AI 기반 이상행위 탐지 기반으로 보안성 강화 +(Level 2~3) +- OT 장비는 가용성과 실시간성을 중시하므로, 펌웨어 무결성 검증 및 서명 기반 업데이트 관리 등 +최소한의 무결성 중심 보호 조치 유지 (Level 1~2) +* Level 0 장비에는 현실적으로 보안 기능을 추가하기 어려움 +네트워크 +- 제어망과 정보망 사이의 시리얼 게이트웨이나 RTU 라우팅 구간은 공격의 이동 통로가 되기 쉬우므로 +중요 구간(Zone)을 세분화하여 매크로세그멘테이션 적용 (Level 0~4) +- 트래픽 패턴 기반 이상행위 탐지 및 DPI 기반 패킷 분석을 통한 프로토콜 오용·비정상 제어 +명령·비인가 데이터 전송 등 사이버 공격 조기 식별 및 대응 체계 강화 (Level 0~4) +시스템 +- SCADA, DCS, SIS 등 핵심 제어시스템을 대상으로 보안 아키텍처 구축 및 관리하고, 제로트러스트 +정책을 이 구조 위에 통합 (Level 1~3) +- 제어시스템은 상시 가동 특성상, 패치 및 취약점 점검은 오버홀(정기 정비) 기간에 계획적으로 수행 +(Level 1~4) +애플리케이션 및 +워크로드 +- 제어 애플리케이션은 프로세스 제어 로직을 직접 다루므로, 제어 애플리케이션 및 운영 SW의 무결성 +보장 (Level 2~3) +- 업데이트·배포 시 SBOM 기반 안전성 확인 및 샌드박스 테스트 등 신뢰성 검증 절차 적용 (Level 3~4) +데이터 +- 제어 명령 데이터 등 OT 환경 중요 정보에 대해서는 접근 권한 최소화 (Level 0~4) +- 로그 및 운영 데이터는 사고 분석·이상 탐지를 위해 중앙집중식으로 수집·보존 (Level 0~4) +<표 23> OT 특화 제로트러스트 핵심 요소별 기능 요구사항 + +| 핵심 요소 | 요구사항 설명 | +| --- | --- | +| 식별자·신원 | ∙ OT 환경은 유지 보수 인력, 관리자 등 다수의 사용자 계정이 혼재되므로, IT망에서 운영자·관리자 계정에 대해 조직 차원의 IAM, MFA, 지속인증 등의 기술을 적용해 계정 탈취나 권한 오남용 방지 (Level 3.5~4) ∙ OT 환경은 HMI, EWS 등 장비 로컬 로그인, 단순 패스워드 인증 등 제한적·폐쇄형 인증 수단에 의존하는 경우가 많고, 비밀번호 변경도 특정 상황에서만 수행되는 경우가 많아 인증 강도와 갱신 주기가 취약해지기 쉬움. 시스템 계정 및 공용 계정을 최소화하고 IAM·MFA 기반의 논리적 인증을 적용한 통합 인증체계를 단계적으로 도입 (Level 1~3) | +| 기기 및 엔드포인트 | ∙ 원격 접속 단말, 온북 등 IT망에서 OT망으로 접속하는 기기에 대해 PKI 기반 보안 접속 및 EDR 적용 (Level 3.5~4) ∙ HMI, 엔지니어링 워크스테이션 등 관리용 장비에는 중앙 집중적인 인증체계를 적용하며, 가용성으로 인해 인증 수단 적용이 어려운 장비에는 접근 로그 수집 및 AI 기반 이상행위 탐지 기반으로 보안성 강화 (Level 2~3) ∙ OT 장비는 가용성과 실시간성을 중시하므로, 펌웨어 무결성 검증 및 서명 기반 업데이트 관리 등 최소한의 무결성 중심 보호 조치 유지 (Level 1~2) * Level 0 장비에는 현실적으로 보안 기능을 추가하기 어려움 | +| 네트워크 | ∙ 제어망과 정보망 사이의 시리얼 게이트웨이나 RTU 라우팅 구간은 공격의 이동 통로가 되기 쉬우므로 중요 구간(Zone)을 세분화하여 매크로세그멘테이션 적용 (Level 0~4) ∙ 트래픽 패턴 기반 이상행위 탐지 및 DPI 기반 패킷 분석을 통한 프로토콜 오용·비정상 제어 명령·비인가 데이터 전송 등 사이버 공격 조기 식별 및 대응 체계 강화 (Level 0~4) | +| 시스템 | ∙ SCADA, DCS, SIS 등 핵심 제어시스템을 대상으로 보안 아키텍처 구축 및 관리하고, 제로트러스트 정책을 이 구조 위에 통합 (Level 1~3) ∙ 제어시스템은 상시 가동 특성상, 패치 및 취약점 점검은 오버홀(정기 정비) 기간에 계획적으로 수행 (Level 1~4) | +| 애플리케이션 및 워크로드 | ∙ 제어 애플리케이션은 프로세스 제어 로직을 직접 다루므로, 제어 애플리케이션 및 운영 SW의 무결성 보장 (Level 2~3) ∙ 업데이트·배포 시 SBOM 기반 안전성 확인 및 샌드박스 테스트 등 신뢰성 검증 절차 적용 (Level 3~4) | +| 데이터 | ∙ 제어 명령 데이터 등 OT 환경 중요 정보에 대해서는 접근 권한 최소화 (Level 0~4) ∙ 로그 및 운영 데이터는 사고 분석·이상 탐지를 위해 중앙집중식으로 수집·보존 (Level 0~4) | + + +52 󰠾 OT 환경의 제로트러스트 적용 안내서 +OT 환경에 제로트러스트 아키텍처를 실질적으로 적용하기 위해서는 적용 시나리오와 접근 주체 및 대상을 +명확히 정의하고, 제로트러스트 아키텍처의 핵심 구성 요소인 정책시행지점(PEP), 정책결정지점(PDP)의 배치 +방안을 설계하는 것이 중요 +OT환경은 Purdue 모델을 기반으로 환경이 구성되어 있기에, 이를 고려하여 제로트러스트 아키텍처 +적용 시나리오를 도출해야 함 +Purdue 모델을 기반으로 PEP, PDP를 배치할 수 있는 여러 가지 시나리오가 도출될 수 있으며, 원격 +사용자가 Purdue 모델 4레벨(IT망)에서 OT망으로 접근하려는 경우와 현장 사용자가 Purdue 모델 +2~3레벨의 OT망의 제어시스템에 직접 접근하려는 경우 등의 시나리오를 고려할 수 있음 + - 아래 제시하는 시나리오는 예시일 뿐이며, OT망 구조·보안정책·운영 방식에 따라 PEP과 PDP의 배치 형태는 +다양하게 설계될 수 있음 +(배치 시나리오 예시 1) Purdue 모델 4레벨(IT망)에서 접근하려는 사용자는 유지보수 인력, 외부접근 +관리자 등이 있을 수 있으며 일반적으로 원격을 통해 OT망 접속 시도 + - IT망에서의 원격 사용자가 OT망에 접속을 하기 위해서는 DMZ망을 통해 원격 접속 인증을 받아야 하나 이는 +일반적인 계정 인증 방식으로 지속적이고 동적인 사용자 접근제어는 하지 않는 구조임 + - 이에, IT망에서 방화벽을 거쳐서 접속을 시도하는 사용자는 ICAM, SDP와 같은 솔루션(PEP)을 통해 접근제어를 +실시하며, 사용자에 대한 신뢰도 평가를 진행하는 PDP는 Level 3.5에 배치될 수 있음 +<그림 16> 제로트러스트 아키텍처 구성 요소 배치 시나리오 예시 1 +출처) 저자 구성 + +![그림 16> 제로트러스트 아키텍처 구성 요소 배치 시나리오 예시 1](images/p0053_img1.png) + + +(배치 시나리오 예시 2) 제어망 내부에서 관리자, 유지보수 인력, 책임자 등과 같은 현장 사용자가 Purdue +모델 2~3레벨에 있는 OT 장비에 직접 접근 시도 + - HMI, SCADA 시스템 등과 같은 OT 장비에 직접 접근 시도하는 사용자는 일반적으로 로컬 계정 혹은 외부 인증 +서버에서 관리하는 계정으로 접근 + - OT 장비들은 제로트러스트 관점에서의 실시간 세션 감시, 지속 인증 등을 위한 기능을 포함하고 있지 않아 별도 +에이전트 혹은 프록시 형태로 구현해야 함. 그러나 일반적으로 OT 장비에는 에이전트를 설치하기가 어렵기 때문에, +상기 기능을 위해서 점프서버와 같이 프록시 역할을 하는 서버가 HMI 장비에 연동되는 구조가 현실적인 선택으로 +보임 + - 이 경우, 점프서버가 HMI의 로그인 이벤트, 세션 상의 사용자 명령 등을 원격 수집하여 해당 정보를 기반으로 +사용자 ID 기반 제로트러스트 정책을 수립하고, 이벤트 모니터링을 통하여 사용자 및 세션 위험도를 평가하며 특정 +위험 명령 시 세션을 직접 제어하는 형태로 제로트러스트 아키텍처를 구축할 수 있음 + - 즉, 점프서버는 HMI 세션에 대한 원격 모니터링 및 PEP 역할을 수행하게 되며 여러 HMI에 대한 세션 모니터링이 +가능하도록 적용한다는 전제하에 3레벨에 구축이 가능하고, PDP는 배치 모델에 따라 3레벨 혹은 3.5레벨 등에 +구축 가능 +<그림 17> 제로트러스트 아키텍처 구성 요소 배치 시나리오 예시 2 +출처) 저자 구성 +그 외 Purdue 모델 0~1레벨의 장비에 제로트러스트 철학을 적용하고자 하는 경우, 현실적으로 레거시 +장비로 인해 보안 기능을 탑재하거나 실시간성․고가용성을 고려해야 하기 때문에 M2M(Machine- +to-Machine) 인증 방식을 적용하는 최소한의 수준으로 접근할 수 있음 + +![그림 17> 제로트러스트 아키텍처 구성 요소 배치 시나리오 예시 2](images/p0054_img0.png) + + +54 󰠾 OT 환경의 제로트러스트 적용 안내서 +5-3 +OT ZT 도입 로드맵 +▶OT 환경에서 제로트러스트는 일괄 구축이 아닌 소규모 보호 대상의 단계적 확장을 통해 안정성과 효율성을 +함께 확보해야 함 +▶DAAS 및 Zone–Conduit 모델을 기반으로 업무영향분석(BIA)에 따라 우선 순위를 설정하고, 실제 환경에 +맞는 정책시행지점(PEP)을 단계적으로 배치하여 정책의 실효성을 확보해야 함 +▶정책 수립·운영 단계에서는 가용성과 안전성을 최우선으로 유지하되, 지속적 가시성과 자동화를 결합한 +피드백 기반 모니터링 체계를 통해 제로트러스트 성숙도를 향상시켜야 함 +CSA의 OT 환경에 맞춘 제로트러스트 도입 5단계 절차를 기반으로 OT/ICS 환경에 제로트러스트를 적용하기 +위한 도입 로드맵을 제시 +CSA의 보고서는 OT 환경 제로트러스트 아키텍처 도입 전략을 Purdue 모델과 IEC 62443의 Zone-Conduit +개념을 고려해서 설계했다는 점에서 현실적인 실행 가능성을 갖춘 참조체계로 평가 +해당 문서에서는 보호 대상을 작게 정의하고 반복적으로 확장하는 점진적 방식을 기본 원칙으로, 초기에는 +제한된 범위에서 효과와 위험을 먼저 검증한 뒤 그 결과를 바탕으로 적용 범위를 단계적으로 넓힘 +<그림 18> OT 환경에 적합한 제로트러스트 도입 로드맵 +출처) 저자 재구성 +1단계: OT 자산 식별 및 보호 대상 정의 +OT 자산 식별 및 보호 대상 정의를 수행하면서, 초기부터 범위를 크게 잡지 않고 작은 보호 대상을 정해 +이를 점증적으로 확장 + - 보유 중인 자산 관련 자료를 통합하여 목록화하고, 단순히 장비·애플리케이션뿐만 아니라 상호 연결, 사용 프로토콜, +인증 방식, 공급망·유지보수 의존성과 같은 메타데이터를 함께 기록 + +![그림 18> OT 환경에 적합한 제로트러스트 도입 로드맵](images/p0055_img5.png) + + + - ISA/IEC 62443의 Zone–Conduit 모델을 이미 운영 중이라면 현행 구역(Zone)을 보호 대상 정의의 출발점으로 +삼고, 각 구역의 보호 대상은 DAAS 요소로 구체화 +요소 +정의 +예시 +데이터 +(Data) +- 산업 공정의 안전성, 신뢰성, 효율성에 직접적인 +영향을 주는 중요한 운영 데이터를 포함 +- 제어 신호 +- 공정 매개변수 +- 운영 이력 데이터, 구성/로직 파일(PLC·DCS) +- 생산·품질·추적 데이터 +- 펌웨어/패치 이미지 +애플리케이션 +(Applications) +- 중요한 비즈니스, 기능적, 운영적 요구사항을 +충족시키는 소프트웨어, 하드웨어, 인프라의 집합 +- 공정 및 생산 애플리케이션 +- 엔지니어링 워크스테이션 도구 +- 접근관리·권한 승인 시스템 +- 원격지원 클라이언트 +- OT 연계 SaaS/PaaS +자산 +(Assets) +- 조직 내에서 데이터를 저장하거나 핵심 기능을 +수행하는 리소스 +- PLC/RTU/DCS/SIS +- 현장 HMI·서버·워크스테이션 +- 산업용 스위치·라우터·무선 AP +- 원격접속 게이트웨이 +서비스 +(Services) +- 정보·운영 프로세스를 지속 제공·관리·보호하는 +기술·업무 기능 +- 원격 모니터링 +- 취약점 관리, 가시성/분석 플랫폼 +- 자동화·오케스트레이션 +- 클라우드 기반 OT 지원 서비스 +<표 24> DAAS 요소 +출처) CSA, “Zero Trust Guidance for Critical Infrastructure” +우선 순위 결정은 위험평가보다 업무영향분석(BIA)을 먼저 적용하여 생산중단, 안전, 규제 준수, 품질에 +대한 파급효과로 가늠 + - 위험도가 낮은 대상을 시범 보호 대상으로 선정하여 초기 적용 후, 결과를 기반으로 정의 범위를 정제하고 점차 +세분화·확대 + - 과정이 진행될수록 정확하고 실시간에 가까운 자동화된 목록으로 운영 +보호 대상 요소별 성숙도 목표를 설정하고, 현재 수준과의 격차 분석을 통해 우선 순위를 설정함으로써 +중단기 계획 수립과 지속적 보안 수준 향상을 달성해야 함 +2단계: OT 트래픽 및 운영 흐름 가시화 +보호 대상 간 실제 통신·업무 흐름을 식별·기록하여 효과적인 제어 지점을 도출하는 단계로, 운영·공정· +제어 흐름을 종합적으로 파악하는 것이 핵심임 +ISA/IEC 62443의 Zone–Conduit 모델을 기반으로 영역 간 통신 경로를 정리하고, 이를 바탕으로 허용 +기준선을 수립하여 제어 지점 후보를 도출해야 함 + +| 요소 | 정의 | 예시 | +| --- | --- | --- | +| 데이터 (Data) | ∙ 산업 공정의 안전성, 신뢰성, 효율성에 직접적인 영향을 주는 중요한 운영 데이터를 포함 | ∙ 제어 신호 ∙ 공정 매개변수 ∙ 운영 이력 데이터, 구성/로직 파일(PLC·DCS) ∙ 생산·품질·추적 데이터 ∙ 펌웨어/패치 이미지 | +| 애플리케이션 (Applications) | ∙ 중요한 비즈니스, 기능적, 운영적 요구사항을 충족시키는 소프트웨어, 하드웨어, 인프라의 집합 | ∙ 공정 및 생산 애플리케이션 ∙ 엔지니어링 워크스테이션 도구 ∙ 접근관리·권한 승인 시스템 ∙ 원격지원 클라이언트 ∙ OT 연계 SaaS/PaaS | +| 자산 (Assets) | ∙ 조직 내에서 데이터를 저장하거나 핵심 기능을 수행하는 리소스 | ∙ PLC/RTU/DCS/SIS ∙ 현장 HMI·서버·워크스테이션 ∙ 산업용 스위치·라우터·무선 AP ∙ 원격접속 게이트웨이 | +| 서비스 (Services) | ∙ 정보·운영 프로세스를 지속 제공·관리·보호하는 기술·업무 기능 | ∙ 원격 모니터링 ∙ 취약점 관리, 가시성/분석 플랫폼 ∙ 자동화·오케스트레이션 ∙ 클라우드 기반 OT 지원 서비스 | + + +56 󰠾 OT 환경의 제로트러스트 적용 안내서 + - 관찰된 트래픽뿐 아니라 정책상 허용되었으나 현재 사용되지 않는 흐름도 포함하여 목록화 + - 각 흐름별로 통신 목적, 데이터 민감도, 프로토콜/포트, 출발·종단 지점, 주기·지연 요구, 보안 적용 현황을 함께 기록 +다만 실제 OT/ICS 현장에서는 Zone–Conduit 매핑만으로는 운영 흐름을 충분히 가시화하기 어렵다는 +한계가 존재함 + - 제어 및 필드 계층(PLC, 센서 등)은 감시 장비나 관리형 스위치가 부재한 경우가 많아 세부 트래픽 수집이 어려움 + - 평면망 구조가 여전히 많아 특정 지점에서 트래픽을 집중적으로 관찰하기 곤란 + - 설비 내부에서만 발생하는 제어 흐름은 외부 장비로 확인 불가 +따라서, 실제 OT/ICS 현장에서는 더 세분화한 구성 요소 정의가 필요하며, 다음과 같은 보안 접근이 +요구됨 + - 설치 가능한 자산에는 가능한 범위 내에서 에이전트 배치 + - 에이전트 설치가 어려운 구간에는 관리형 스위치(SPAN/TAP), 프로토콜 인지형 센서, 전용 모니터링 장비를 활용 + - 전담 인력이 부족한 중소 사업장은 클라우드 연계형 OT 가시성 관리 플랫폼이나 SIEM/SOC 연동 자동화 관제를 +점진적으로 도입할 필요가 있음 +3단계: 제로트러스트 아키텍처 설계 +앞선 두 단계에서 확보한 자산·흐름 정보를 기반으로, 아키텍처 내에서 제로트러스트 정책을 적용할 수 +있는 정책시행지점(PEP)을 식별하는 단계임 + - 최신 OT 환경에서는 소프트웨어 에이전트 기반 PEP 배치가 용이하므로, 엔터프라이즈 IT 네트워크(Purdue 모델 +4레벨 이상), IT–OT 간 DMZ(3.5레벨), OT/ICS 애플리케이션 서버·데이터베이스·엔지니어링 워크스테이션·HMI +등이 위치한 제어/처리 네트워크(2~3레벨)를 중심으로 소프트웨어 기반 PEP 적용이 가능함 + - 반면, Purdue 모델 하위 레벨(0~1레벨)은 PLC, RTU, 센서 등 레거시 장비가 다수 포함되어 소프트웨어 에이전트 +설치가 어렵기 때문에 직접적인 PEP 배치가 제한됨 + - 이 경우 OSI 2~7계층 수준에서 네트워크 인프라 계층을 활용한 정책 시행으로 보완해야 하며, 이는 OT 환경이 +요구하는 고가용성·실시간성을 고려하여 설계되어야 함 + - 특히 소프트웨어 클라이언트를 설치할 수 없는 자산에 대해 OSI 7계층 정책을 적용하려면 트래픽을 프록시 기반으로 +심층 검사할 필요가 있지만, OT/ICS 특수 프로토콜·이기종 장비 구조로 인해 현실적으로 어려움이 있어 라우팅 +규칙 중심의 OSI 3계층 정책 또는 VLAN/VRF 기반 가상 네트워크 분리가 더 실용적인 방식으로 평가됨 +소프트웨어 에이전트를 지원하는 자산은 정책시행지점(PEP)으로 고려할 수 있으며, 이는 다음 영역에 +적용 가능함 + - 엔터프라이즈 IT 네트워크(Purdue 모델 4레벨 이상) + - IT/OT 네트워크 사이의 DMZ(Purdue 모델 3.5레벨) + - OT/ICS 애플리케이션 서버, 데이터베이스, 데이터 저장 서버, HMI, 엔지니어링 워크스테이션이 위치한 제어 +및 처리 네트워크(Purdue 모델 2~3레벨) + +Purdue 모델의 하위 레벨(0~1)과 같이 소프트웨어 에이전트 설치가 불가능한 경우에는 다음과 같이 +네트워크 및 인프라 차원에서 보완할 수 있는 대체 방안이 필요 + - OT/ICS에 적합한 방화벽 기반 정책을 통한 OSI 3계층~7계층 세분화 + - SDN, VRF 등 가상 네트워크 솔루션을 활용한 OSI 3계층~7계층 세분화 + - OT/ICS 라우터 또는 라우팅 스위치를 통한 OSI 2계층~4계층 세분화 + - 특수 LAN 마이크로세그먼트 게이트웨이 도입을 통한 OSI 2계층~3계층 세분화 + - 단방향 게이트웨이 또는 데이터 다이오드 도입을 통한 OSI 1계층~2계층 세분화 +4단계: 제로트러스트 정책 수립 및 구현 +앞선 아키텍처 설계를 기반으로, 실제 접근제어 정책을 개발·적용하는 단계 +OT 환경은 인명 안전과 고가용성이 핵심이므로, 동적 정책 변경 시 세션을 즉시 종료하기보다 운영 +연속성을 보장하는 정교한 제어 필요 + - 경계 구간에서는 화이트리스트 정책을 유지하되, 내부 구간에서는 안전성 확보를 위해 제한적 허용 정책(Approved +Exception)이 병행될 수 있음 +정책 수립의 핵심은 신원과 맥락을 기준으로 한 접근 통제 + - 사용자·장치 신원은 접근 속도와 보안성의 균형을 유지해야 하며, 인증 실패 시 가용성에 미치는 영향을 고려해 +제한 기능 모드, 승인 기반 임시 접근 등 대체 절차를 마련해야 함 +레거시 OT 장비처럼 개별 사용자 추적이 어려운 환경은 보완 통제 필요 + - 구성 관리 도구로 시스템 변경 내역 감시 + - 개인 계정 사용 불가 시 그룹 계정을 사용하되, 주기적 비밀번호 변경·사용 범위 제한 적용 + - 물리적 출입 통제로 시스템 접근을 제한·기록하고, 필요 시 카메라 등 추가 모니터링 수단 운영 + - 외부 접점 구간에서는 보안 장치와 마이크로세그멘테이션을 결합해 방어 체계를 강화하고, 필요 시 물리적·논리적 +보안을 동시 적용 +정책 표현은 Kipling 방법*으로 일관되게 기술하며, 이 방법은 자산별 보안 경계를 정밀하게 설계하기 +위한 정책의 틀 제공 +* 문제 분석 시 6하 원칙을 활용하여 검토하는 기법으로, 국내에서는 보통 ‘5W1H 기법’으로 쓰임 + - 누가(Who): 자산에 접근할 수 있는 인증된 사용자·장치·엔티티 정의 + - 무엇을(What): 접근이 허용된 애플리케이션 및 서비스 명시 + - 언제(When): 접근이 가능한 시간·상황·조건 설정 + - 어디서(Where): 접근이 허용된 서버, 데이터베이스, 네트워크 구간 식별 + - 왜(Why): 접근 요청의 목적·업무 사유 규정 + - 어떻게(How): 접근 시 사용하는 인증 방식, 통신 절차, 암호화 표준 명시 + +58 󰠾 OT 환경의 제로트러스트 적용 안내서 +5단계: 지속적 모니터링 및 유지관리 +이 단계의 목적은 제로트러스트를 상시 운영 체계로 전환하여 이상 징후를 조기에 탐지하고, 변화에 맞춰 +설계·정책을 주기적으로 갱신하는 데 있음 + - 네트워크 트래픽, 사용자 행위, 장치 활동을 준실시간으로 분석해 비정상 패턴을 식별하고, 정기적인 보안 점검과 +침투 테스트로 취약점을 선제적으로 확인 +가시성과 데이터 수집은 수집 지점, 전송 및 저장 방식의 명확한 정의에서 출발 + - 식별된 자산과 데이터 경로를 어떤 방식으로 모니터링할지, 수집 데이터를 어디로 전송·저장할지 계획해야 하며, +일반 IT 도구의 한계를 보완하기 위해 OT 특화 모니터링 도구를 병행 +취약점 관리는 패치 적용이 제한적인 현실을 고려하여, 문맥 기반 평가·모니터링·완화 통제에 초점을 +두어야 함 + - 인증되지 않은 엔티티가 장비 존재 자체를 식별하지 못하도록 네트워크 은닉·세분화·기본 거부 정책 유지 + - 필요 시 단방향 게이트웨이 등 물리적 분리를 병행해 패치 지연에 따른 노출을 최소화 +주기적 재검토를 통해 단계별 산출물을 순환적으로 업데이트 + - 자산 변경 시 1단계 보호표면 정의 갱신 및 승인 절차 연계 + - 접근 요구 변경 시 2단계 운영 흐름 재매핑 + - 기술·시나리오 변화에 따른 3단계 아키텍처, 4단계 정책 문서 갱신 및 공급업체 적합성 재평가 + - 마지막으로 사고 대응·모니터링·취약점 관리 프로세스를 지속 평가·개선하여 운영 품질 유지 + +![이미지 p.59](images/p0059_img1.png) + + +![이미지 p.59](images/p0059_img2.png) + + +# 제6장 결 론 + +OT는 발전소, 원자력 등 국가 핵심 인프라 운영에서 중요한 역할을 하고 있으며 사이버 공격 발생시 대규모 +물리적 피해와 사회적 혼란 가능성이 있어 OT 보안은 국가 안보와 직결됨 +기존 망분리 중심 보안체계는 AI·클라우드 도입, 원격 유지보수 확대 등으로 외부 접점이 늘어나면서 +한계를 드러내고 있으며, IT망 침해가 OT망으로 전이되는 사례 및 OT망에 대한 직접 침투 등 고도화된 +위협에 대응해야 함 +이러한 사례는 OT 보안이 기업의 경영 위험을 넘어 국가 기반시설의 안정적 운영을 위협할 수 있음을 +보여주며, 내부 침투를 가정하여 보안을 강화하는 제로트러스트 철학을 반영한 국가 차원의 OT ZT 전략 +도입 필요 +미국은 OT 보안 관점에서 제로트러스트 적용이 필수적임을 이해하고 일부 도메인에서 도입·구현 가이드를 +마련 중이며, 기업들도 OT 제로트러스트를 위한 기술·솔루션 개발 및 업체 간 협력을 통한 실증 사업 진행 중 +미국은 NIST가 발표한 「Guide to Operational Technology (OT) Security (SP 800-82 r3)」을 통해 +OT 네트워크에서 보안 향상 방안에 대해 제시 + - IT와 OT 장비를 권한·신뢰 수준·기능 중요도·데이터 흐름에 따라 구분·세분화하도록 하고, Purdue 모델·ISA-95· +IIoT 아키텍처 등을 활용할 수 있도록 안내 + - DMZ·방화벽·라우터·데이터 다이오드를 통한 통신 경계 설정 및 IDS/IPS·SIEM·행위 기반 탐지를 통한 이상 징후 +분석 등 실행 방안을 강조 + - 네트워크 보안성을 향상시키기 위해 제로트러스트 보안 아키텍처를 상위 계층(Purdue 모델 Level 3~4) 장비에 +우선 적용하는 등 현실적 적용 방안을 제시 +민간의 경우, ZT에 관한 다양한 가이드 문서를 발간해 온 CSA에서 중요 기반시설을 위한 제로트러스트 +가이던스를 발간 + - 점프 호스트·네트워크 세분화·상태 기반 접근제어 등을 통해 OT 제로트러스트 구현 전략 구체화 + - OT·ICS 환경에서의 제로트러스트 적용을 위한 5단계 절차를 제시하고, 이를 통해 SANS의 주요 통제 항목을 강화할 +수 있음을 강조 + +![이미지 p.60](images/p0060_img0.png) + + +![이미지 p.60](images/p0060_img1.png) + + +60 󰠾 OT 환경의 제로트러스트 적용 안내서 +미 국방부는 볼트 타이푼 등 최신 OT 위협에 대응하기 위한 OT 제로트러스트 전략을 준비하고 있으며, +미 공군의 Spangdahlem 기지에서는 ‘Project BlastWave’를 통해 제로트러스트 기반 OT 보안 솔루션을 +상하수 처리시설에 적용하는 시범사업 수행 + - 기존 IT 환경에서의 ZT 전략과 유사한 틀을 유지하되 가용성을 중시하는 접근법으로 활동 수를 91개에서 35~40개로 +축소하여 현실성을 높임 + - ‘Project BlastWave’는 BlastWave가 주도하는 OTZTA(Operational Technology Zero Trust Alliance)의 +핵심 과제이며, Nozomi Networks, Booz Allen Hamilton, DarkTrace 등 다수의 민간 기업 참여 +EU·일본·싱가포르 등 여러 글로벌 국가들도 ZT를 명시적으로 언급하고 있지 않으나 법·제도적 장치를 통해 +OT 보안을 강화하는 추세 +EU는 「NIS2 Directive」를 통해 에너지·교통·보건 등 핵심 서비스 사업자에 사이버보안 및 위험관리 +의무를 부과, 불이행 시 과징금을 부과하는 강력한 규제 체계를 마련 +일본은 경제산업성(METI)과 디지털청을 중심으로 산업제어시스템 보안 가이드라인을 발간하고, 민간· +지자체에 적용을 확산하여 제도적 기반을 강화 +싱가포르는 「Cybersecurity Act 2018」과 「CCoP 2.0」을 통해 중요 정보통신기반시설 운영자에게 +최소 보안 요건을 준수하도록 규정하고, 법적 근거 하에 정기 감사와 보고 체계를 운영 +한국도 기반시설 보호 제도 보완, 제로트러스트 요소를 반영한 OT 보안 강화 기술·정책·가이드 개발 등을 통하여 +고도화된 공격 대응 역량 확대 필요 +한국도 「주요정보통신기반시설 보호법」을 통해 핵심 인프라 보호를 추진 중이나, 기반시설 지정·보호계획 +수립 중심으로 운영되고 있어 변화하는 OT 위협 환경에 대응하기에는 한계가 있음 +따라서 정부·산업계·학계가 공동으로 OT 환경에서의 이상징후 탐지, 사고 대응, 복원력 강화 등 OT +보안을 위한 기술 연구개발 추진 필요 + - 생성형 AI·클라우드 등 신기술 확산 및 공격 기술의 다변화·고도화에 따라 IT-OT 융합 환경의 공격 표면이 넓어지는 +만큼, 제로트러스트 기반 기술적 대응 역량 확충 필요 +또한 OT 현장에서 보안 아키텍처를 구축하는 과정에서 제로트러스트 철학이 기본적으로 반영될 수 있도록, +OT 내부 공격 대응 시나리오, ZT 도입 절차, 성숙도 모델 및 참조 사례 등을 포함하는 OT 제로트러스트 +가이드 등 정책문서 발간 필요 + - 정부·산업계·학계 간 협력 체계 구축, 표준화된 OT 보안 프레임워크 마련 및 고도화, 제로트러스트 원칙에 부합하는 +가이드 발간 및 보안체계 도입 등을 공동으로 노력해야 함 + +용어 정의 +용어 +정의 +운영 기술 +(OT, Operational +Technology) +물리적 환경과 상호작용하거나 이러한 장치를 관리하는 다양한 프로그래밍 가능한 시스템 및 장치. +이러한 시스템과 장치는 장치, 프로세스 및 이벤트의 모니터링 및/또는 제어를 통해 직접적인 변화를 +감지하거나 유발하며, 이러한 예로는 산업 제어 시스템, 건물 자동화 시스템, 교통 시스템, 물리적 +접근 제어 시스템, 물리적 환경 모니터링 시스템 및 물리적 환경 측정 시스템이 있음 (출처: NIST +SP 800-82r3) +산업 장비, 자산, 공정 및 사건을 직접 모니터링 및/또는 제어함으로써 변화를 감지하거나 유발하는 +하드웨어 및 소프트웨어 (출처: 가트너 IT 용어 사전) +접근 주체 혹은 주체 +(Subject) +사용자와 애플리케이션(혹은 서비스), 기기의 조합이며, 여기에 악의적인 공격자 혹은 불법적인 +애플리케이션, 감염된 기기 등이 포함될 수 있음 (출처: 과기정통부 제로트러스트 가이드라인 1.0) +정책결정지점 +(PDP, Policy Decision +Point) +접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하여 이를 정책시행지점(PEP)에게 +명령하는 논리적 개체로, 정책 엔진(PE)과 정책 관리자(PA)로 구성 (출처: 과기정통부 제로트러스트 +가이드라인 1.0) +정책 관리자 +(PA, Policy +Administrator) +접근 주체와 리소스 사이의 통신 경로를 생성하거나 취소하기 위한 결정을 정책시행지점(PEP)에게 +전달하는 논리 개체 (출처: 과기정통부 제로트러스트 가이드라인 1.0) +정책 엔진 +(PE, Policy Engine) +접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하는 논리적 개체로, 정책정보지점 +(PIP)으로부터 신뢰도를 평가할 수 있는 알고리즘에 대한 입력을 수신하여, 현재 리소스 접근 요청을 +승인하거나 거부 혹은 현재 연결 중인 상태의 접근을 취소할 수 있음 (출처: 과기정통부 제로트러스트 +가이드라인 1.0) +정책시행지점 +(PEP, Policy +Enforcement Point) +접근 주체와 리소스 사이를 연결하고 모니터링하며 최종적으로 연결을 종료하는 논리적 개체로, +PDP의 정책 관리자에게 접근 요청을 전달하고 접근 승인 여부를 전달받아 현재 접근 세션에 직접 +반영 (출처: 과기정통부 제로트러스트 가이드라인 1.0) + +| 용어 | 정의 | +| --- | --- | +| 운영 기술 (OT, Operational Technology) | 물리적 환경과 상호작용하거나 이러한 장치를 관리하는 다양한 프로그래밍 가능한 시스템 및 장치. 이러한 시스템과 장치는 장치, 프로세스 및 이벤트의 모니터링 및/또는 제어를 통해 직접적인 변화를 감지하거나 유발하며, 이러한 예로는 산업 제어 시스템, 건물 자동화 시스템, 교통 시스템, 물리적 접근 제어 시스템, 물리적 환경 모니터링 시스템 및 물리적 환경 측정 시스템이 있음 (출처: NIST SP 800-82r3) 산업 장비, 자산, 공정 및 사건을 직접 모니터링 및/또는 제어함으로써 변화를 감지하거나 유발하는 하드웨어 및 소프트웨어 (출처: 가트너 IT 용어 사전) | +| 접근 주체 혹은 주체 (Subject) | 사용자와 애플리케이션(혹은 서비스), 기기의 조합이며, 여기에 악의적인 공격자 혹은 불법적인 애플리케이션, 감염된 기기 등이 포함될 수 있음 (출처: 과기정통부 제로트러스트 가이드라인 1.0) | +| 정책결정지점 (PDP, Policy Decision Point) | 접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하여 이를 정책시행지점(PEP)에게 명령하는 논리적 개체로, 정책 엔진(PE)과 정책 관리자(PA)로 구성 (출처: 과기정통부 제로트러스트 가이드라인 1.0) | +| 정책 관리자 (PA, Policy Administrator) | 접근 주체와 리소스 사이의 통신 경로를 생성하거나 취소하기 위한 결정을 정책시행지점(PEP)에게 전달하는 논리 개체 (출처: 과기정통부 제로트러스트 가이드라인 1.0) | +| 정책 엔진 (PE, Policy Engine) | 접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하는 논리적 개체로, 정책정보지점 (PIP)으로부터 신뢰도를 평가할 수 있는 알고리즘에 대한 입력을 수신하여, 현재 리소스 접근 요청을 승인하거나 거부 혹은 현재 연결 중인 상태의 접근을 취소할 수 있음 (출처: 과기정통부 제로트러스트 가이드라인 1.0) | +| 정책시행지점 (PEP, Policy Enforcement Point) | 접근 주체와 리소스 사이를 연결하고 모니터링하며 최종적으로 연결을 종료하는 논리적 개체로, PDP의 정책 관리자에게 접근 요청을 전달하고 접근 승인 여부를 전달받아 현재 접근 세션에 직접 반영 (출처: 과기정통부 제로트러스트 가이드라인 1.0) | + + +![이미지 p.62](images/p0062_img0.png) + + +![이미지 p.62](images/p0062_img1.png) + + +62 󰠾 OT 환경의 제로트러스트 적용 안내서 +용어 +정의 +정책정보지점 +(PIP, Policy Information +Point) +정책결정지점이 정책 결정을 내리는 데 활용하기 위해서 수집한 사용자, 기기 관련 정보 및 기타 +정책 관련 정보를 제공하는 논리적 개체로, 이러한 정보에는 기업이 생성하거나 제어하지 않는 외부 +데이터와 기업 내부적으로 생성되는 내부 데이터로 분류할 수 있으며 규제·내부규정, 데이터 접근 +정책, 보안 이벤트, 위협 인텔리전스, 사용자 및 기기 인증 정보, 네트워크 및 시스템 상의 행위 로그 +등을 포함할 수 있음 (출처: 과기정통부 제로트러스트 가이드라인 1.0) +제로트러스트 +(Zero Trust) +위협이 언제 어디서든 발생 가능하다는 인식하에 기업 내부의 네트워크, 시스템 혹은 리소스에 +접근하고자 하는 어떤 사용자·기기에 대해서도 지속 인증, 세밀한 접근제어를 통한 최소 권한 부여 등 +적극적인 신뢰도 평가 없이 접근을 허용하지 않는 보안 모델 및 이를 구현·실체화하기 위한 아이디어의 +집합을 의미 (출처: 과기정통부 제로트러스트 가이드라인 1.0) +제로트러스트 아키텍처 +(Zero Trust Architecture) +제로트러스트의 개념을 활용하여 기업 내부의 네트워크, 시스템 및 리소스를 보호할 수 있는 추상적인 +보안 구조이며 해당 목적을 달성하기 위한 기업망의 구성 요소, 구성 요소 간 인터페이스 정의와 +인증, 접근제어, 보안 모니터링 및 가시화 등 보안 정책을 포함 (출처: 과기정통부 제로트러스트 +가이드라인 1.0) +퍼듀 모델 혹은 퍼듀 +엔터프라이즈 참조 아키텍처 +(Purdue Model or Purdue +Enterprise Reference +Architecture) +Purdue 대학에서 1990년대 초 개발한 모델로, ICS 환경을 여러 레벨로 계층화하여 제어 영역과 +비즈니스 네트워크 간의 경계를 명확히 정의하는 산업제어시스템 참조 아키텍처 (출처: 미 에너지부, +“Purdue model framework for industrial control systems & cybersecurity segmentation”) +구역-통신경로 모델 +(Zone-Conduit Model) +산업제어시스템을 보안 구역(Zone)으로 나누고, 각 구역 간의 통신경로를 Conduit으로 정의하여 +경계와 제어 지점을 설정하는 모델 (자체 정의) +구역 +(Zone) +자산의 중요성, 운영 기능, 물리적/논리적 위치, 필수 접근(예: 최소 권한 원칙)이나 담당 조직과 같은 +기준을 적용하거나 리스크를 적용한 논리적/물리적 자산의 그루핑 (출처: KS X IEC 62443-3-2:2020) +통신경로 +(Conduit) +2개 이상의 구역을 연결하는 공통 보안 요구사항을 공유하는 통신 채널의 논리적 그룹 (출처: KS X +IEC 62443-3-2:2020) +원격 정보 수집 및 +제어 시스템 +(SCADA, Supervisory +Control And Data +Acquisition) +원격지에 설치된 단말에서 데이터를 수집하고 중앙 감시 센터에 전송하여 현장 상황을 온라인으로 +감시 제어하는 시스템. 발전, 송배전 시설, 석유 화학 플랜트, 제철 공정 시설, 공장 자동화 시설 같은 +여러 종류의 원격지 시설 장치를 중앙 집중식으로 감시 제어 (TTA 용어 사전) +광범위하게 분산된 자산을 원격에서 모니터링·제어하기 위한 시스템으로, 전력 송배전망, 수자원, +가스·오일 유통, 대규모 인프라 관리에 주로 사용. 일부 발전·산업 시설에서는 SCADA가 보조 +감시계층으로 사용되기도 함 (자체 정의) + +| 용어 | 정의 | +| --- | --- | +| 정책정보지점 (PIP, Policy Information Point) | 정책결정지점이 정책 결정을 내리는 데 활용하기 위해서 수집한 사용자, 기기 관련 정보 및 기타 정책 관련 정보를 제공하는 논리적 개체로, 이러한 정보에는 기업이 생성하거나 제어하지 않는 외부 데이터와 기업 내부적으로 생성되는 내부 데이터로 분류할 수 있으며 규제·내부규정, 데이터 접근 정책, 보안 이벤트, 위협 인텔리전스, 사용자 및 기기 인증 정보, 네트워크 및 시스템 상의 행위 로그 등을 포함할 수 있음 (출처: 과기정통부 제로트러스트 가이드라인 1.0) | +| 제로트러스트 (Zero Trust) | 위협이 언제 어디서든 발생 가능하다는 인식하에 기업 내부의 네트워크, 시스템 혹은 리소스에 접근하고자 하는 어떤 사용자·기기에 대해서도 지속 인증, 세밀한 접근제어를 통한 최소 권한 부여 등 적극적인 신뢰도 평가 없이 접근을 허용하지 않는 보안 모델 및 이를 구현·실체화하기 위한 아이디어의 집합을 의미 (출처: 과기정통부 제로트러스트 가이드라인 1.0) | +| 제로트러스트 아키텍처 (Zero Trust Architecture) | 제로트러스트의 개념을 활용하여 기업 내부의 네트워크, 시스템 및 리소스를 보호할 수 있는 추상적인 보안 구조이며 해당 목적을 달성하기 위한 기업망의 구성 요소, 구성 요소 간 인터페이스 정의와 인증, 접근제어, 보안 모니터링 및 가시화 등 보안 정책을 포함 (출처: 과기정통부 제로트러스트 가이드라인 1.0) | +| 퍼듀 모델 혹은 퍼듀 엔터프라이즈 참조 아키텍처 (Purdue Model or Purdue Enterprise Reference Architecture) | Purdue 대학에서 1990년대 초 개발한 모델로, ICS 환경을 여러 레벨로 계층화하여 제어 영역과 비즈니스 네트워크 간의 경계를 명확히 정의하는 산업제어시스템 참조 아키텍처 (출처: 미 에너지부, “Purdue model framework for industrial control systems & cybersecurity segmentation”) | +| 구역-통신경로 모델 (Zone-Conduit Model) | 산업제어시스템을 보안 구역(Zone)으로 나누고, 각 구역 간의 통신경로를 Conduit으로 정의하여 경계와 제어 지점을 설정하는 모델 (자체 정의) | +| 구역 (Zone) | 자산의 중요성, 운영 기능, 물리적/논리적 위치, 필수 접근(예: 최소 권한 원칙)이나 담당 조직과 같은 기준을 적용하거나 리스크를 적용한 논리적/물리적 자산의 그루핑 (출처: KS X IEC 62443-3-2:2020) | +| 통신경로 (Conduit) | 2개 이상의 구역을 연결하는 공통 보안 요구사항을 공유하는 통신 채널의 논리적 그룹 (출처: KS X IEC 62443-3-2:2020) | +| 원격 정보 수집 및 제어 시스템 (SCADA, Supervisory Control And Data Acquisition) | 원격지에 설치된 단말에서 데이터를 수집하고 중앙 감시 센터에 전송하여 현장 상황을 온라인으로 감시 제어하는 시스템. 발전, 송배전 시설, 석유 화학 플랜트, 제철 공정 시설, 공장 자동화 시설 같은 여러 종류의 원격지 시설 장치를 중앙 집중식으로 감시 제어 (TTA 용어 사전) 광범위하게 분산된 자산을 원격에서 모니터링·제어하기 위한 시스템으로, 전력 송배전망, 수자원, 가스·오일 유통, 대규모 인프라 관리에 주로 사용. 일부 발전·산업 시설에서는 SCADA가 보조 감시계층으로 사용되기도 함 (자체 정의) | + + +참고문헌 +[1] IEC 61850-5 Edition 2, “Communication networks and systems for power utility automation - +Part 5: Communication requirements for functions and device models”, IEC International Standard, +2013.01. +[2] European Parliament & Council of the European Union, “Directive (EU) 2016/1148 of 6 July 2016 +concerning measures for a high common level of security of network and information systems across +the Union (NIS Directive)”, 2016.07. +[3] 한국정보통신기술협회, “산업제어시스템 보안요구사항 - 제1부: 개념 및 참조모델”, TTAK.KO-12.0307-Part1, +2017.06. +[4] 한국정보통신기술협회, “산업제어시스템 보안요구사항 - 제2부: 현장장치 계층”, TTAK.KO-12.0307-Part2, +2017.06. +[5] 한국정보통신기술협회, “산업제어시스템 보안요구사항 - 제3부: 제어 계층”, TTAK.KO-12.0307-Part3, 2017.06. +[6] 한국정보통신기술협회, “산업제어시스템 보안요구사항 - 제4부: 운영 계층”, TTAK.KO-12.0307-Part4, 2017.06. +[7] 한국인터넷진흥원, “스마트교통 사이버보안 가이드”, 2018.05. +[8] 싱가포르 사이버보안청(CSA), “Cybersecurity Code of Practice for Critical Information Infrastructure”, +2018.07. +[9] Hydeo, “Cyber-attack on Hydro”, 2019.03. +[10] David Garton, "Purdue model framework for industrial control systems & cybersecurity +segmentation." Working document of the NPC Study, US Department of Energy Topic Paper #4-14, +2019.11. +[11] 한국인터넷진흥원, “스마트공장 사이버보안 가이드”, 2019.12. +[12] 한국인터넷진흥원, ”스마트에너지 사이버보안 가이드“, 2019.12. +[13] Zack Whittaker, “Honda global operations halted by ransomware attack”, TechCrunch, 2020.06. +[14] 일본 경제산업성(METI), “공장 시스템을 위한 사이버/물리 보안 가이드라인(Cyber/Physical Security Framework +for Factory Systems)”, 2020.11. +[15] 서정택, “OT 사이버보안위협 및 대응방안”, G-PRIVACY 2021 컨퍼런스 발표자료, 2021.04. +[16] 과학기술정보통신부, “주요정보통신기반시설 취약점 분석·평가 기준”, 2021.12. +[17] Reuters, “Toyota suspends domestic factory operations after suspected cyber attack”, 2022.03. +[18] Keith Stouffer 등, “Guide to Operational Technology (OT) Security”, NIST SP 800-82 Rev. 3, 2022.04. +[19] SEMI, “SEMI E187: Specification for Cybersecurity of Fab Equipment”, 2022.07. +[20] 싱가포르 사이버보안청(CSA), “CYBERSECURITY CODE OF PRACTICE FOR CRITICAL INFORMATION +INFRASTRUCTURE – SECOND EDITION REVISION ONE”, 2022.11. +[21] U.S. NRC, “Zero Trust for Operational Technology Literature Review”, TLR-RES-DE-2023-001, 2022.11. + +![이미지 p.64](images/p0064_img0.png) + + +![이미지 p.64](images/p0064_img1.png) + + +64 󰠾 OT 환경의 제로트러스트 적용 안내서 +[22] European Parliament & Council of the European Union, “Directive (EU) 2022/2555 of 14 December +2022 on measures for a high common level of cybersecurity across the Union, amending Regulation +(EU) No 910/2014 and Directive (EU) 2018/1972, and repealing Directive (EU) 2016/1148 (NIS 2 +Directive)”, 2022.12. +[23] 국가정보원, “국가정보보안기본지침”, 2023.01. +[24] Anna Ribeiro, “Ransomware attack temporarily shuts down Dole production, disrupts food supplies”, +IndustrialCyber, 2023.02. +[25] 박현재, “Colonial Pipeline Ransomware attacker address tracking”, 2023.04. +[26] 과학기술정보통신부 등, “제로트러스트 가이드라인 1.0”, 2023.07. +[27] 데이터넷, “[OT보안2023 설문] OT 조직 56% “OT 보안 계획 아직 없어“, 2023.10. +[28] Jacob Benjamin, “OT Cybersecurity Breach Disrupts Operations at the Port of Nagoya, Japan”, 2023.11. +[29] U.S. NRC, “Zero Trust Architectures for Operational Technology at Nuclear Facilities”, TLR-RES-DE- +2024-001, 2023.11. +[30] 싱가포르 사이버보안청(CSA), “Operational Technology Cybersecurity Masterplan 2024”, 2024.01. +[31] 뉴스1, “中해커 최소 5년간 美인프라 잠입…기밀탈취 대신 '사회혼란' 목적”, 2024.02. +[32] Spangdahlem Air Base Public Affairs, “Spangdahlem AB becomes first DoD installation to implement +BlastWave cyber security solution”, 2024.03. +[33] Fortinet, “2024 State of Operational Technology and Cybersecurity Report”, 2024.06. +[34] 한국선급, “해상 사이버보안 시스템 지침”, 2024.06. +[35] IEC 62443-2-1:2024, ”Security for industrial automation and control systems - Part 2-1: +Security program requirements for IACS asset owners”, IEC International Standard, 2024.08. +[36] CSA, “Zero Trust Guidance for Critical Infrastructure”, 2024.10. +[37] 보안뉴스, “OT 환경 노리는 랜섬웨어 공격이 증가하고 있는 가운데, CISO의 할 일은?”, 2024.10. +[38] 과학기술정보통신부 등, “제로트러스트 가이드라인 2.0”, 2024.12. +[39] 한국정보통신기술협회, “스마트그리드 보안 요구사항”, TTAK.KO-12.0182/R1, 2024.12. +[40] 한국원자력통제기술원, “원자력시설의 컴퓨터 및 정보시스템 보안”, RS-015, 2024.12. +[41] 데이터넷, “[OT보안②] 사회 전체 피해 입히는 OT 타깃 공격”, 2024.11. +[42] U.S. NRC, “Implementing Zero Trust for Operational Technology at Nuclear Facilities”, TLR-RES-DE- +2025-001, 2025.02. +[43] MeriTalk, “DoD’s OT Zero Trust Strategy Under Review, Expected by August”, 2025.03. +[44] 국가정보원, “국가·공공기관 신재생에너지 보안가이드라인 및 체크리스트”, 2025.03. +[45] 한국인터넷진흥원 보도자료, “KISA, 정보보호 기업과 함께 국민 디지털 안전 강화”, 2025.05. +[46] Fortinet, “2025 State of Operational Technology and Cybersecurity Report”, 2025.07. +[47] MeriTalk, “Pentagon to Release Updated Zero Trust Strategy by End of Year”, 2025.09 +[48] Inside Defense, “DIU looking for non-kinetic tech to stop small 'suspect' watercraft in U.S. territorial +waters”, 2025.09. +[49] DoD, “Executive Summary: Zero Trust for Operational Technology”, 2025.11 +[50] Microsoft, “Defender for IoT and your network architecture”, https://learn.microsoft.com/en-us/ +azure/defender-for-iot/organizations/best-practices/understand-network-architecture + +OT +Operational +Technology 환경의 제로트러스트 적용 안내서 +저자 +- 한국인터넷진흥원(KISA) +- 정책연구실 이익섭 실장, 신기술대응팀 이재형 팀장, 이혜진 책임, 이재혁 주임 +- 가천대학교 +- 서정택 교수, 이석준 교수 + +OT +Operational +Technology 환경의 +제로트러스트 적용 안내서 \ No newline at end of file diff --git "a/\353\254\270\354\204\234/OT_\355\231\230\352\262\275\354\235\230_\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\240\201\354\232\251_\354\225\210\353\202\264\354\204\234.pdf" "b/\353\254\270\354\204\234/OT_\355\231\230\352\262\275\354\235\230_\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\240\201\354\232\251_\354\225\210\353\202\264\354\204\234.pdf" new file mode 100644 index 0000000..8030ef6 Binary files /dev/null and "b/\353\254\270\354\204\234/OT_\355\231\230\352\262\275\354\235\230_\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\240\201\354\232\251_\354\225\210\353\202\264\354\204\234.pdf" differ diff --git "a/\353\254\270\354\204\234/Pseudocode_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" "b/\353\254\270\354\204\234/Pseudocode_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" new file mode 100644 index 0000000..bfc7355 --- /dev/null +++ "b/\353\254\270\354\204\234/Pseudocode_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" @@ -0,0 +1,1896 @@ +# 시큐어코딩 가이드 — Pseudo Code (범용) + +> **기반 문서**: KISA JavaScript/Python 시큐어코딩 가이드 (2023년 개정본) +> **목적**: 언어에 무관한 범용 보안약점 패턴 제공 +> **항목 수**: 46개 (7개 카테고리, 49 CWE) +> **활용**: AI 도구(Claude, Cursor, Copilot) 시큐어코딩 프롬프트, 코드 리뷰 기준 + +--- + +## 목차 + +- [1. 입력데이터 검증 및 표현 (Input Data Validation)](#1-입력데이터-검증-및-표현-input-data-validation) — 16개 항목 +- [2. 보안기능 (Security Features)](#2-보안기능-security-features) — 16개 항목 +- [3. 시간 및 상태 (Time and State)](#3-시간-및-상태-time-and-state) — 2개 항목 +- [4. 에러처리 (Error Handling)](#4-에러처리-error-handling) — 3개 항목 +- [5. 코드오류 (Code Quality)](#5-코드오류-code-quality) — 3개 항목 +- [6. 캡슐화 (Encapsulation)](#6-캡슐화-encapsulation) — 4개 항목 +- [7. API 오용 (API Misuse)](#7-api-오용-api-misuse) — 2개 항목 +- [부록 A. CWE 매핑 전체 테이블](#부록-a-cwe-매핑-전체-테이블) +- [부록 B. 카테고리별 우선순위 요약](#부록-b-카테고리별-우선순위-요약) + +--- + +## 1. 입력데이터 검증 및 표현 (Input Data Validation) + +외부로부터 수신하는 모든 입력값(HTTP 파라미터, 파일, URL, XML 등)에 대해 유효성을 검증하고, 안전한 형태로 변환한 후 사용해야 합니다. 이 카테고리는 웹 애플리케이션에서 가장 빈번하게 발생하는 보안약점을 다루며, 원격 코드 실행, 데이터 유출, 서비스 거부 등 치명적 결과로 이어질 수 있습니다. + +--- + +### 1-1. SQL 삽입 (CWE-89) + +#### 가. 개요 + +SQL 삽입(SQL Injection)은 외부 입력값을 SQL 쿼리 문자열에 직접 결합할 때 발생합니다. 공격자가 입력값에 SQL 구문을 삽입하면 인증 우회, 데이터 유출, 데이터 변조, 심지어 운영체제 명령 실행까지 가능합니다. OWASP Top 10에서 지속적으로 상위를 차지하는 대표적인 인젝션 취약점입니다. + +#### 나. 안전한 코딩기법 + +- 모든 SQL 쿼리에 파라미터 바인딩(Parameterized Query)을 사용합니다. +- ORM을 사용하더라도 raw query를 작성할 경우 반드시 바인딩 변수를 적용합니다. +- 입력값에 대해 화이트리스트 기반 검증을 수행하고, SQL 특수문자를 이스케이프합니다. +- 데이터베이스 계정에 최소 권한 원칙을 적용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 입력값을 쿼리에 직접 결합 +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = " + userInput +db.execute(query) + +// SAFE — 파라미터 바인딩 (인자화된 쿼리) +userInput = request.getParameter("id") +query = "SELECT * FROM users WHERE id = ?" +db.execute(query, [userInput]) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Sequelize, Mongoose 등 ORM 사용 시에도 `literal()`, raw query에서 바인딩 필수 | +| Python | O | Django ORM의 `extra()`, `raw()` 및 SQLAlchemy `text()` 사용 시 바인딩 필수 | + +--- + +### 1-2. 코드 삽입 (CWE-94, CWE-95) + +#### 가. 개요 + +동적 코드 실행 함수(eval, exec, Function 생성자 등)에 외부 입력값을 전달하면 공격자가 서버에서 임의 코드를 실행할 수 있습니다. 이 취약점은 원격 코드 실행(RCE)으로 직결되며, 시스템 전체가 장악될 수 있는 가장 위험한 보안약점 중 하나입니다. + +#### 나. 안전한 코딩기법 + +- eval(), exec(), Function() 등 동적 코드 실행 함수는 외부 입력값과 함께 사용하지 않습니다. +- 동적 계산이 필요한 경우 안전한 파서(수식 파서, JSON 파서 등)를 사용합니다. +- 허용된 연산만 화이트리스트로 정의하여 실행합니다. +- 코드 실행이 불가피한 경우 샌드박스 환경에서 격리하여 실행합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 외부 입력값을 동적 코드 실행에 사용 +userInput = request.getParameter("expr") +result = eval(userInput) + +// SAFE — 동적 코드 실행 대신 안전한 파서 사용 +userInput = request.getParameter("expr") +result = safeParser.parse(userInput) +// 또는 허용된 연산만 화이트리스트로 실행 +if userInput in ALLOWED_OPERATIONS: + result = ALLOWED_OPERATIONS[userInput]() +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `eval()`, `Function()`, `setTimeout(string)` 등 문자열 기반 코드 실행 금지 | +| Python | O | `eval()`, `exec()`, `compile()` 및 `__import__()` 동적 호출 금지 | + +--- + +### 1-3. 경로 조작 및 자원 삽입 (CWE-22, CWE-99) + +#### 가. 개요 + +파일 경로에 외부 입력값을 직접 사용하면 `../` 등의 상대 경로를 통해 의도하지 않은 디렉터리에 접근할 수 있습니다. 공격자는 시스템 설정 파일, 인증 정보 파일 등 민감한 자원을 읽거나 덮어쓸 수 있으며, 자원 식별자(포트, IP 등)에 대한 삽입도 동일한 원리로 발생합니다. + +#### 나. 안전한 코딩기법 + +- 파일 경로를 정규화(resolve/normalize)한 후 기본 디렉터리(base path) 내에 위치하는지 검증합니다. +- `../`, `..\\`, `%2e%2e` 등 경로 조작 문자열을 필터링합니다. +- 파일명에 화이트리스트 기반 검증(영숫자, 허용 확장자만)을 적용합니다. +- chroot 또는 컨테이너 격리를 통해 접근 가능 범위를 제한합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 입력값을 경로에 직접 사용 +filename = request.getParameter("file") +content = file.read("/data/uploads/" + filename) +// 공격: filename = "../../etc/passwd" + +// SAFE — 경로 정규화 후 기본 디렉터리 내 위치 검증 +filename = request.getParameter("file") +basePath = resolve("/data/uploads/") +fullPath = resolve(basePath + "/" + filename) +if not fullPath.startsWith(basePath): + return error("Invalid path") +content = file.read(fullPath) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `path.resolve()`, `path.normalize()` 사용 후 `startsWith()` 검증 필수 | +| Python | O | `os.path.realpath()`, `pathlib.resolve()` 사용 후 기본 경로 포함 여부 확인 | + +--- + +### 1-4. 크로스사이트 스크립트 — XSS (CWE-79) + +#### 가. 개요 + +크로스사이트 스크립팅(XSS)은 외부 입력값이 HTML 응답에 이스케이프 없이 포함될 때 발생합니다. 공격자가 악성 JavaScript를 삽입하면 사용자의 세션 쿠키 탈취, 키로깅, 피싱 페이지 표시 등이 가능합니다. 저장형(Stored), 반사형(Reflected), DOM 기반 XSS의 세 가지 유형이 있습니다. + +#### 나. 안전한 코딩기법 + +- 출력 시점에 HTML 엔티티 이스케이프(`<` -> `<`, `>` -> `>`, `"` -> `"` 등)를 적용합니다. +- 템플릿 엔진의 자동 이스케이프 기능을 활성화합니다. +- Content-Security-Policy(CSP) 헤더를 설정하여 인라인 스크립트 실행을 제한합니다. +- 클라이언트와 서버 양쪽 모두에서 입력값 검증과 출력값 이스케이프를 적용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 입력값을 HTML에 직접 삽입 +userInput = request.getParameter("name") +response.write("

Hello " + userInput + "

") +// 공격: name = "" + +// SAFE — HTML 엔티티 이스케이프 적용 +userInput = request.getParameter("name") +safeInput = htmlEscape(userInput) // < → < > → > " → " +response.write("

Hello " + safeInput + "

") +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Express에서 EJS/Pug 등 템플릿 엔진 자동 이스케이프 확인, `innerHTML` 직접 할당 금지 | +| Python | O | Django는 기본 자동 이스케이프, Flask/Jinja2는 `|safe` 필터 사용에 주의 | + +--- + +### 1-5. 운영체제 명령어 삽입 (CWE-78) + +#### 가. 개요 + +시스템 명령어(shell command)에 외부 입력값을 직접 전달하면 공격자가 세미콜론(`;`), 파이프(`|`), 백틱 등의 메타문자를 이용하여 임의 명령을 실행할 수 있습니다. 서버 장악, 데이터 삭제, 악성코드 설치 등 치명적 결과를 초래합니다. + +#### 나. 안전한 코딩기법 + +- 가능한 한 시스템 명령 호출 대신 언어 내장 라이브러리/API를 사용합니다. +- 부득이하게 명령을 실행해야 할 경우 인자를 배열로 전달하여 쉘 해석을 방지합니다. +- 입력값에 대해 화이트리스트 기반 검증을 수행합니다. +- 쉘 메타문자(`;`, `|`, `&`, `$`, 백틱 등)를 필터링합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 입력값을 쉘 명령에 직접 결합 +filename = request.getParameter("file") +os.execute("cat /var/log/" + filename) +// 공격: file = "access.log; rm -rf /" + +// SAFE — 쉘 호출 대신 라이브러리 API 사용 +filename = request.getParameter("file") +if not isValidFilename(filename): + return error("Invalid filename") +content = file.read("/var/log/" + filename) + +// 부득이한 경우: 인자 배열로 전달 (쉘 해석 방지) +process.exec(["cat", "/var/log/" + filename]) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `child_process.exec()` 대신 `execFile()` 또는 `spawn()` 사용, `shell: false` 옵션 적용 | +| Python | O | `os.system()`, `subprocess.call(shell=True)` 금지, `subprocess.run(args_list)` 사용 | + +--- + +### 1-6. 위험한 형식 파일 업로드 (CWE-434) + +#### 가. 개요 + +파일 업로드 시 확장자, 크기, MIME 타입, 파일 내용을 검증하지 않으면 웹셸, 실행 파일, 악성 스크립트 등이 업로드될 수 있습니다. 업로드된 악성 파일이 웹 서버에서 실행되면 서버 전체가 장악됩니다. + +#### 나. 안전한 코딩기법 + +- 허용된 확장자를 화이트리스트로 관리합니다(블랙리스트 방식은 우회 가능). +- 파일명을 랜덤 생성하여 원본 파일명을 사용하지 않습니다. +- 업로드 디렉터리에 실행 권한을 제거합니다. +- 파일 크기 제한을 설정합니다. +- MIME 타입과 매직 바이트(파일 헤더)를 함께 검증합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 파일 확장자 검증 없이 저장 +uploadedFile = request.getFile("attachment") +uploadedFile.saveTo("/uploads/" + uploadedFile.name) + +// SAFE — 화이트리스트 확장자 + 저장 경로 분리 +uploadedFile = request.getFile("attachment") +extension = getExtension(uploadedFile.name).toLowerCase() +if extension not in [".jpg", ".png", ".pdf", ".docx"]: + return error("Disallowed file type") +safeName = generateRandomName() + extension +uploadedFile.saveTo(UPLOAD_DIR + "/" + safeName) +// 업로드 디렉터리는 실행 권한 제거 +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Multer 등 미들웨어에서 `fileFilter`, `limits` 설정 필수 | +| Python | O | Django `FileExtensionValidator`, Flask에서 `secure_filename()` 사용 | + +--- + +### 1-7. 신뢰되지 않은 URL 주소로 자동접속 연결 — Open Redirect (CWE-601) + +#### 가. 개요 + +리다이렉트 URL을 외부 입력으로 받아 검증 없이 사용하면 공격자가 사용자를 피싱 사이트나 악성 사이트로 유도할 수 있습니다. 정상 도메인의 URL로 시작하기 때문에 사용자가 의심하기 어렵습니다. + +#### 나. 안전한 코딩기법 + +- 리다이렉트 URL을 허용된 도메인/경로의 화이트리스트와 대조합니다. +- 상대 경로만 허용하고 절대 URL을 차단합니다. +- 리다이렉트 대상을 인덱스 번호로 관리하여 직접 URL을 받지 않습니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 외부 입력 URL로 직접 리다이렉트 +redirectUrl = request.getParameter("next") +response.redirect(redirectUrl) + +// SAFE — 허용된 도메인/경로만 리다이렉트 +redirectUrl = request.getParameter("next") +if not isInternalUrl(redirectUrl): + redirectUrl = "/default" +response.redirect(redirectUrl) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Express `res.redirect()` 사용 전 URL 검증 필수, `//evil.com` 형태의 프로토콜 상대 URL 주의 | +| Python | O | Django `is_safe_url()` (deprecated), `url_has_allowed_host_and_scheme()` 사용 | + +--- + +### 1-8. 부적절한 XML 외부 개체 참조 — XXE (CWE-611) + +#### 가. 개요 + +XML 파서가 외부 엔티티(External Entity)를 처리하도록 설정되어 있으면, 공격자가 DTD를 통해 서버의 로컬 파일을 읽거나 내부 네트워크에 요청(SSRF)을 보내거나 서비스 거부(Billion Laughs 공격)를 유발할 수 있습니다. + +#### 나. 안전한 코딩기법 + +- XML 파서의 외부 엔티티 처리 기능을 비활성화합니다. +- DTD(Document Type Definition) 처리를 비활성화합니다. +- 가능하면 XML 대신 JSON 등 더 단순한 데이터 형식을 사용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 외부 엔티티 처리 허용 +parser = XMLParser() +doc = parser.parse(request.body) +// 공격: ]> + +// SAFE — 외부 엔티티 비활성화 +parser = XMLParser() +parser.setFeature("EXTERNAL_ENTITIES", false) +parser.setFeature("DTD", false) +doc = parser.parse(request.body) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `libxmljs`는 기본 외부 엔티티 허용, `noent: false` 명시 필요 | +| Python | O | `lxml`의 `resolve_entities=False`, `defusedxml` 라이브러리 사용 권장 | + +--- + +### 1-9. XPath / XML 삽입 (CWE-643) + +#### 가. 개요 + +XPath 쿼리에 외부 입력값을 직접 삽입하면 공격자가 XPath 구문을 조작하여 인증을 우회하거나 XML 문서 전체의 데이터를 추출할 수 있습니다. SQL 삽입과 유사한 원리로 동작합니다. + +#### 나. 안전한 코딩기법 + +- XPath 쿼리에 파라미터 바인딩을 사용합니다. +- 파라미터 바인딩이 불가능한 경우 XPath 특수문자(`'`, `"`, `[`, `]`, `=` 등)를 이스케이프합니다. +- 입력값에 대해 화이트리스트 기반 검증을 수행합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE +username = request.getParameter("user") +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) + +// SAFE — 파라미터 바인딩 또는 입력값 이스케이프 +username = request.getParameter("user") +username = escapeXPathValue(username) +query = "//users/user[name='" + username + "']" +result = xmlDoc.xpath(query) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `xpath` 모듈에서 파라미터 바인딩 미지원 시 수동 이스케이프 필수 | +| Python | O | `lxml.etree.XPath`에서 변수 바인딩 지원, `defusedxml` 병행 사용 권장 | + +--- + +### 1-10. LDAP 삽입 (CWE-90) + +#### 가. 개요 + +LDAP 필터에 외부 입력값을 직접 삽입하면 공격자가 LDAP 쿼리를 조작하여 디렉터리 서비스의 전체 데이터를 조회하거나 인증을 우회할 수 있습니다. 기업 환경에서 Active Directory 등과 연동된 인증 시스템에서 주로 발생합니다. + +#### 나. 안전한 코딩기법 + +- LDAP 특수문자(`*`, `(`, `)`, `\`, NUL 등)를 이스케이프합니다. +- 입력값에 대해 화이트리스트 기반 검증(영숫자만 허용 등)을 수행합니다. +- LDAP 쿼리 구성에 파라미터 바인딩이 가능한 라이브러리를 사용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE +username = request.getParameter("user") +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) + +// SAFE — 특수문자 이스케이프 +username = request.getParameter("user") +username = escapeLDAP(username) // *, (, ), \, NUL 이스케이프 +filter = "(uid=" + username + ")" +results = ldap.search(baseDN, filter) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `ldapjs` 등에서 `filter.escape()` 또는 수동 이스케이프 적용 | +| Python | O | `ldap3` 라이브러리의 `escape_filter_chars()` 사용 | + +--- + +### 1-11. 크로스사이트 요청 위조 — CSRF (CWE-352) + +#### 가. 개요 + +상태 변경(데이터 수정, 삭제, 결제 등) 요청에 CSRF 토큰 검증이 없으면, 공격자가 사용자의 브라우저를 통해 사용자의 의지와 무관한 요청을 실행할 수 있습니다. 사용자가 로그인 상태에서 악성 페이지를 방문하는 것만으로 공격이 성립합니다. + +#### 나. 안전한 코딩기법 + +- 모든 상태 변경 요청에 CSRF 토큰을 포함하고 서버에서 검증합니다. +- SameSite 쿠키 속성을 `Strict` 또는 `Lax`로 설정하여 추가 방어를 적용합니다. +- Referer/Origin 헤더를 검증하여 요청 출처를 확인합니다. +- GET 요청으로 상태 변경을 수행하지 않습니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — CSRF 토큰 없이 상태 변경 +router.POST("/transfer", handler(req): + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) + +// SAFE — CSRF 토큰 검증 +router.POST("/transfer", handler(req): + if not csrfToken.verify(req.getHeader("X-CSRF-Token")): + return error(403, "Invalid CSRF token") + amount = req.getParameter("amount") + toAccount = req.getParameter("to") + transferMoney(req.user, toAccount, amount) +) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Express에서 `csurf` 미들웨어 또는 커스텀 토큰 검증 적용 | +| Python | O | Django는 CSRF 미들웨어 기본 활성화, Flask에서 `Flask-WTF` 사용 | + +--- + +### 1-12. 서버사이드 요청 위조 — SSRF (CWE-918) + +#### 가. 개요 + +서버가 외부 입력으로 받은 URL로 HTTP 요청을 보내면, 공격자가 내부 네트워크의 서비스(메타데이터 서버, 관리 인터페이스 등)에 접근할 수 있습니다. 클라우드 환경에서는 인스턴스 메타데이터 API(169.254.169.254)를 통해 인증 정보가 유출될 수 있어 특히 위험합니다. + +#### 나. 안전한 코딩기법 + +- 요청 대상 URL을 화이트리스트로 관리합니다. +- 내부 IP 대역(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16)을 차단합니다. +- 허용된 프로토콜(http, https)만 허용합니다. +- DNS 재바인딩 공격을 방지하기 위해 요청 전 DNS를 미리 해석하고 IP를 검증합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 입력 URL로 서버가 직접 요청 +targetUrl = request.getParameter("url") +response = http.fetch(targetUrl) +// 공격: url = "http://169.254.169.254/latest/meta-data/" + +// SAFE — URL 화이트리스트 + 내부 IP 차단 +targetUrl = request.getParameter("url") +parsed = parseUrl(targetUrl) +if parsed.host in BLOCKED_HOSTS or isPrivateIP(parsed.host): + return error("Blocked URL") +if parsed.scheme not in ["http", "https"]: + return error("Invalid scheme") +response = http.fetch(targetUrl) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `axios`, `node-fetch` 등에서 요청 전 URL 파싱 및 IP 검증 필수 | +| Python | O | `requests` 라이브러리 사용 시 URL 검증 로직을 별도 구현, `ssrf-guard` 활용 가능 | + +--- + +### 1-13. 보안기능 결정에 사용되는 부적절한 입력값 (CWE-807) + +#### 가. 개요 + +보안 결정(인증, 인가, 접근 제어 등)에 클라이언트가 조작할 수 있는 값(쿠키, 히든 필드, HTTP 헤더 등)을 사용하면 공격자가 해당 값을 변조하여 권한을 우회할 수 있습니다. 클라이언트 측 데이터는 항상 위변조 가능성을 전제해야 합니다. + +#### 나. 안전한 코딩기법 + +- 보안 결정에 필요한 정보는 서버 세션에서 관리합니다. +- 클라이언트로부터 받은 역할, 권한 정보를 신뢰하지 않습니다. +- 중요 값은 서버 측에서 재검증합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 클라이언트 쿠키로 관리자 판단 +isAdmin = request.getCookie("isAdmin") +if isAdmin == "true": + showAdminPanel() + +// SAFE — 서버 세션에서 권한 확인 +user = session.getUser(request.sessionId) +if user.role == "admin": + showAdminPanel() +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Express 세션(`express-session`)에서 역할 관리, 클라이언트 쿠키 값 불신 | +| Python | O | Django `request.user`, Flask `flask-login`의 서버 측 세션 사용 | + +--- + +### 1-14. HTTP 응답분할 (CWE-113) — Python 고유 + +#### 가. 개요 + +HTTP 응답 헤더에 외부 입력값이 개행 문자(`\r\n`)와 함께 삽입되면 HTTP 응답이 분리됩니다. 공격자는 임의의 응답 헤더나 본문을 삽입하여 캐시 오염, 세션 하이재킹, XSS 등을 유발할 수 있습니다. + +#### 나. 안전한 코딩기법 + +- HTTP 헤더 값에서 개행 문자(`\r`, `\n`)를 제거합니다. +- 헤더 값에 대해 화이트리스트 기반 검증을 수행합니다. +- 최신 프레임워크는 대부분 자동으로 개행을 차단하므로 프레임워크 버전을 최신으로 유지합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 입력값을 HTTP 헤더에 직접 삽입 +location = request.getParameter("redirect") +response.setHeader("Location", location) +// 공격: redirect = "http://safe.com\r\nSet-Cookie: session=hijacked" + +// SAFE — 헤더 값에서 개행 문자 제거 +location = request.getParameter("redirect") +location = location.replace("\r", "").replace("\n", "") +response.setHeader("Location", location) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | - | Node.js 최신 버전에서 헤더 개행 자동 차단 (별도 항목 없음) | +| Python | O | Django/Flask 최신 버전은 자동 차단, 직접 응답 생성 시 주의 필요 | + +--- + +### 1-15. 정수형 오버플로우 (CWE-190) — Python 고유 + +#### 가. 개요 + +정수 연산 결과가 해당 자료형의 표현 범위를 초과하면 값이 뒤집히거나 예상치 못한 동작이 발생합니다. 가격 계산, 배열 인덱스, 메모리 할당 크기 등에서 오버플로우가 발생하면 보안 검사 우회나 서비스 거부로 이어질 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 연산 전에 입력값의 범위를 검증합니다. +- 비즈니스 로직에 맞는 최솟값/최댓값 제한을 설정합니다. +- C 확장 모듈이나 외부 라이브러리 호출 시 정수 범위를 확인합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 정수 범위 검증 없이 사용 +quantity = parseInt(request.getParameter("qty")) +totalPrice = quantity * unitPrice +// 공격: qty = 2147483647 → 오버플로우 + +// SAFE — 범위 검증 후 사용 +quantity = parseInt(request.getParameter("qty")) +if quantity < 0 or quantity > MAX_QUANTITY: + return error("Invalid quantity") +totalPrice = quantity * unitPrice +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | - | JS의 Number는 IEEE 754 부동소수점, BigInt 사용 시 주의 (별도 항목 없음) | +| Python | O | Python int는 무한 정밀도이나, C 확장/`ctypes`/`struct` 사용 시 오버플로우 발생 가능 | + +--- + +### 1-16. 포맷 스트링 삽입 (CWE-134) — Python 고유 + +#### 가. 개요 + +포맷 스트링에 외부 입력값을 직접 사용하면 공격자가 포맷 지시자를 삽입하여 메모리 정보를 유출하거나 프로그램 동작을 변조할 수 있습니다. Python의 `format()` 메서드나 f-string에서도 객체의 속성 접근을 통한 정보 유출이 가능합니다. + +#### 나. 안전한 코딩기법 + +- 포맷 스트링과 인자를 분리합니다. +- 외부 입력값을 포맷 스트링 자체로 사용하지 않습니다. +- 로깅 시 `logger.info("%s", user_input)` 형태로 인자를 분리합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 입력값을 포맷 스트링으로 사용 +userInput = request.getParameter("msg") +log(userInput) // Python: userInput.format() 또는 % 연산자 + +// SAFE — 포맷 스트링과 인자를 분리 +userInput = request.getParameter("msg") +log("%s", userInput) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | - | JS에는 C 스타일 포맷 스트링이 없어 해당 취약점 미해당 (별도 항목 없음) | +| Python | O | `str.format()`, `%` 연산자에서 `{0.__class__}` 등 속성 접근 공격 주의 | + +--- + +## 2. 보안기능 (Security Features) + +인증, 인가, 암호화, 키 관리, 세션 관리 등 소프트웨어의 보안 기능과 관련된 보안약점을 다룹니다. 보안 기능이 올바르게 구현되지 않으면 인증 우회, 데이터 유출, 중간자 공격 등이 발생할 수 있습니다. + +--- + +### 2-1. 적절한 인증 없는 중요 기능 허용 (CWE-306) + +#### 가. 개요 + +관리자 기능, 데이터 삭제, 설정 변경 등 중요 기능에 인증 검사가 누락되면 비인가자가 해당 기능에 직접 접근할 수 있습니다. URL을 추측하거나 API 엔드포인트를 직접 호출하는 방식으로 쉽게 악용됩니다. + +#### 나. 안전한 코딩기법 + +- 모든 중요 기능에 인증 미들웨어/데코레이터를 적용합니다. +- 인증 후 추가로 해당 기능에 대한 권한(인가) 검증을 수행합니다. +- 인증이 필요 없는 경로를 화이트리스트로 관리하고, 나머지는 기본적으로 인증을 요구합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 인증 없이 관리 기능 노출 +router.POST("/admin/delete-user", handler(req): + userId = req.getParameter("id") + deleteUser(userId) +) + +// SAFE — 인증 미들웨어 적용 +router.POST("/admin/delete-user", authRequired, handler(req): + if not req.user.hasPermission("admin"): + return error(403) + userId = req.getParameter("id") + deleteUser(userId) +) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Express 미들웨어 체인에서 인증 미들웨어를 라우트 앞에 배치 | +| Python | O | Django `@login_required`, Flask `@login_required` 데코레이터 적용 | + +--- + +### 2-2. 부적절한 인가 (CWE-285) + +#### 가. 개요 + +인증된 사용자라도 권한 검증 없이 타인의 리소스에 접근할 수 있으면 수평적 권한 상승(Horizontal Privilege Escalation)이 발생합니다. 예를 들어, 로그인한 사용자가 URL의 ID 값만 변경하여 다른 사용자의 주문 내역이나 개인정보를 열람할 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 리소스 접근 시 요청자와 소유자의 일치 여부를 반드시 확인합니다. +- 역할 기반 접근 제어(RBAC) 또는 속성 기반 접근 제어(ABAC)를 적용합니다. +- 리소스 조회 쿼리에 현재 사용자 ID를 조건으로 포함합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 소유자 검증 없이 리소스 반환 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + return order +) + +// SAFE — 요청자와 소유자 일치 확인 +router.GET("/orders/:id", handler(req): + order = db.findOrder(req.params.id) + if order.userId != req.user.id: + return error(403, "Forbidden") + return order +) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | ORM 쿼리에 `where: { userId: req.user.id }` 조건 필수 | +| Python | O | Django `get_object_or_404(Model, pk=id, user=request.user)` 패턴 사용 | + +--- + +### 2-3. 중요한 자원에 대한 잘못된 권한 설정 (CWE-732) + +#### 가. 개요 + +파일, 디렉터리, 데이터베이스, API 엔드포인트 등 중요 자원에 과도한 권한을 부여하면 비인가자가 해당 자원에 접근하거나 변조할 수 있습니다. 특히 설정 파일, 키 파일, 로그 파일 등에 0777 등 과도한 권한을 부여하는 것은 위험합니다. + +#### 나. 안전한 코딩기법 + +- 최소 권한 원칙(Principle of Least Privilege)을 적용합니다. +- 중요 파일은 소유자만 읽기/쓰기 가능하도록 설정합니다(0600). +- 디렉터리는 소유자만 접근 가능하도록 설정합니다(0700). + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 모든 사용자에게 읽기/쓰기 권한 +file.setPermissions("/config/secrets.yml", "0777") + +// SAFE — 소유자만 읽기/쓰기, 그룹/기타 접근 차단 +file.setPermissions("/config/secrets.yml", "0600") +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `fs.chmod()`, `fs.writeFile()` 시 `mode` 옵션 명시 | +| Python | O | `os.chmod()`, `open()` 시 파일 모드 명시, `umask` 설정 확인 | + +--- + +### 2-4. 취약한 암호화 알고리즘 사용 (CWE-327) + +#### 가. 개요 + +DES, RC4, MD5, SHA-1 등 이미 취약성이 증명된 암호화/해시 알고리즘을 사용하면 암호화된 데이터가 해독되거나 해시 충돌이 발생할 수 있습니다. 공격자는 비교적 적은 계산 비용으로 데이터를 복호화하거나 위변조할 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 대칭 암호화: AES-256-GCM 이상을 사용합니다. +- 해시: SHA-256 이상을 사용합니다. +- 패스워드 해싱: bcrypt, scrypt, argon2 등 전용 알고리즘을 사용합니다. +- DES, 3DES, RC4, MD5, SHA-1은 사용하지 않습니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 취약한 알고리즘 사용 +encrypted = crypto.encrypt("DES", data, key) +hashed = crypto.hash("MD5", password) +hashed = crypto.hash("SHA1", password) + +// SAFE — 강력한 알고리즘 사용 +encrypted = crypto.encrypt("AES-256-GCM", data, key) +hashed = crypto.hash("SHA-256", password) +// 패스워드는 bcrypt, scrypt, argon2 등 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `crypto.createCipheriv('aes-256-gcm')` 사용, `createCipher()` (deprecated) 금지 | +| Python | O | `cryptography` 라이브러리의 Fernet 또는 AES-GCM 사용, `hashlib.md5()` 보안 용도 금지 | + +--- + +### 2-5. 암호화되지 않은 중요정보 (CWE-312, CWE-319) + +#### 가. 개요 + +비밀번호, 개인정보, 금융정보 등 중요 정보를 평문으로 저장하거나 암호화되지 않은 채널(HTTP)로 전송하면 데이터 유출 위험이 있습니다. 네트워크 스니핑, 데이터베이스 유출 등을 통해 즉시 악용될 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 비밀번호는 bcrypt, argon2 등으로 해싱하여 저장합니다(복호화 불가 방식). +- 중요 데이터는 AES-256 등으로 암호화하여 저장합니다. +- 네트워크 전송 시 반드시 TLS/HTTPS를 사용합니다. +- HSTS 헤더를 설정하여 HTTP 다운그레이드를 방지합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 평문 저장 및 HTTP 전송 +db.save("users", {password: userPassword}) +http.post("http://api.example.com/login", {password: userPassword}) + +// SAFE — 해싱 후 저장, HTTPS 전송 +hashedPassword = bcrypt.hash(userPassword, saltRounds=12) +db.save("users", {password: hashedPassword}) +https.post("https://api.example.com/login", {password: userPassword}) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `bcryptjs` 또는 `argon2` 패키지 사용, Express에서 HTTPS 강제 리다이렉트 설정 | +| Python | O | `bcrypt`, `passlib` 사용, Django `SECURE_SSL_REDIRECT = True` 설정 | + +--- + +### 2-6. 하드코드된 중요정보 (CWE-259, CWE-321) + +#### 가. 개요 + +소스코드에 비밀번호, API 키, 암호화 키 등을 직접 기재하면, 소스코드가 유출되거나 버전 관리 시스템에 기록되어 즉시 악용됩니다. 특히 공개 저장소에 커밋된 비밀키는 자동 스캔 봇에 의해 수 분 내에 탈취될 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 환경변수(`process.env`, `os.environ`)를 통해 비밀정보를 주입합니다. +- AWS Secrets Manager, HashiCorp Vault 등 비밀 관리 도구를 사용합니다. +- `.env` 파일은 반드시 `.gitignore`에 추가합니다. +- CI/CD 파이프라인에서 시크릿 스캐닝을 적용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 소스코드에 비밀번호/키 하드코딩 +DB_PASSWORD = "super_secret_123" +API_KEY = "sk-abcdef1234567890" + +// SAFE — 환경변수 또는 비밀 관리 도구 사용 +DB_PASSWORD = env.get("DB_PASSWORD") +API_KEY = secretManager.get("API_KEY") +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `dotenv` 패키지 사용, `process.env`에서 로드 | +| Python | O | `python-dotenv` 사용, `os.environ.get()` 또는 Django `django-environ` 사용 | + +--- + +### 2-7. 충분하지 않은 키 길이 사용 (CWE-326) + +#### 가. 개요 + +암호화 키의 길이가 짧으면 무차별 대입(Brute Force) 공격으로 키를 추측할 수 있습니다. 컴퓨팅 성능의 향상에 따라 이전에 안전하다고 여겨졌던 키 길이도 현재는 취약할 수 있습니다. + +#### 나. 안전한 코딩기법 + +- RSA: 최소 2048비트, 권장 4096비트를 사용합니다. +- AES: 256비트를 사용합니다. +- ECDSA: 256비트 이상 곡선(P-256 이상)을 사용합니다. +- 1024비트 이하의 RSA 키, 128비트 미만의 대칭키는 사용하지 않습니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 짧은 키 사용 +key = crypto.generateKey("RSA", 1024) +key = crypto.generateKey("AES", 64) + +// SAFE — 충분한 키 길이 +key = crypto.generateKey("RSA", 2048) // 최소 2048, 권장 4096 +key = crypto.generateKey("AES", 256) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `crypto.generateKeyPairSync('rsa', { modulusLength: 2048 })` 사용 | +| Python | O | `cryptography.hazmat.primitives.asymmetric.rsa.generate_private_key(key_size=2048)` | + +--- + +### 2-8. 적절하지 않은 난수 값 사용 (CWE-330) + +#### 가. 개요 + +세션 ID, 토큰, 비밀번호 초기화 링크 등 보안 목적으로 사용하는 값을 일반 난수 생성기(`Math.random()`, `random.random()` 등)로 생성하면 값이 예측 가능합니다. 공격자가 난수를 예측하면 세션 하이재킹, 토큰 위조 등이 가능합니다. + +#### 나. 안전한 코딩기법 + +- 보안 목적의 난수는 반드시 암호학적 보안 난수 생성기(CSPRNG)를 사용합니다. +- JavaScript: `crypto.randomBytes()`, `crypto.getRandomValues()` +- Python: `secrets` 모듈, `os.urandom()` + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 일반 난수 사용 +token = random.nextInt() +sessionId = Math.random().toString() + +// SAFE — 암호학적 보안 난수 사용 +token = crypto.randomBytes(32).toHex() +sessionId = crypto.secureRandom(32) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `crypto.randomBytes()` 또는 `crypto.randomUUID()` 사용, `Math.random()` 보안 용도 금지 | +| Python | O | `secrets.token_hex()`, `secrets.token_urlsafe()` 사용, `random` 모듈 보안 용도 금지 | + +--- + +### 2-9. 취약한 패스워드 허용 (CWE-521) + +#### 가. 개요 + +패스워드 복잡도 정책이 없거나 약하면 무차별 대입(Brute Force), 사전 공격(Dictionary Attack) 등으로 패스워드가 쉽게 추측됩니다. "123456", "password" 등 흔한 패스워드를 허용하면 계정 탈취 위험이 급격히 증가합니다. + +#### 나. 안전한 코딩기법 + +- 최소 8자 이상의 길이를 요구합니다. +- 대문자, 소문자, 숫자, 특수문자 조합을 요구합니다. +- 흔한 패스워드 목록(breached password list)과 대조합니다. +- 패스워드 저장 시 반드시 bcrypt, argon2 등으로 해싱합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 패스워드 정책 없음 +if password.length > 0: + createAccount(username, password) + +// SAFE — 복잡도 검증 +if password.length < 8: + return error("8자 이상 입력하세요") +if not regex.match("[A-Z]", password): + return error("대문자를 포함하세요") +if not regex.match("[0-9]", password): + return error("숫자를 포함하세요") +if not regex.match("[!@#$%]", password): + return error("특수문자를 포함하세요") +createAccount(username, bcrypt.hash(password)) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `zxcvbn` 라이브러리로 강도 측정, 서버 측 검증 필수 (클라이언트 검증만으로 불충분) | +| Python | O | Django `AUTH_PASSWORD_VALIDATORS` 설정, `django.contrib.auth.password_validation` 활용 | + +--- + +### 2-10. 부적절한 전자서명 확인 (CWE-347) + +#### 가. 개요 + +JWT, XML 서명, 코드 서명 등 전자서명을 검증하지 않고 디코딩만 수행하면 공격자가 위변조된 데이터를 신뢰하게 됩니다. 특히 JWT에서 `alg: none` 공격이나 키 혼동 공격을 통해 인증을 우회할 수 있습니다. + +#### 나. 안전한 코딩기법 + +- JWT는 반드시 서명을 검증(`verify`)한 후 페이로드를 사용합니다. +- `algorithms` 옵션을 명시하여 허용 알고리즘을 제한합니다. +- `alg: none`을 허용하지 않습니다. +- 비밀키 관리에 주의하고 주기적으로 키를 교체합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 서명 검증 없이 디코딩만 수행 +payload = jwt.decode(token) // 서명 검증 안 함 +userId = payload.userId + +// SAFE — 서명 검증 후 사용 +payload = jwt.verify(token, SECRET_KEY) +userId = payload.userId +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `jsonwebtoken`의 `jwt.verify()` 사용, `algorithms` 옵션 명시 필수 | +| Python | O | `PyJWT`의 `jwt.decode(token, key, algorithms=["HS256"])` 사용, `options` 설정 확인 | + +--- + +### 2-11. 부적절한 인증서 유효성 검증 (CWE-295) + +#### 가. 개요 + +HTTPS 통신에서 SSL/TLS 인증서 검증을 비활성화하면 중간자 공격(MITM)에 노출됩니다. 공격자가 통신을 가로채 데이터를 도청하거나 변조할 수 있으며, 사용자는 이를 인지할 수 없습니다. + +#### 나. 안전한 코딩기법 + +- 인증서 검증을 비활성화하지 않습니다(프로덕션 환경에서는 절대 금지). +- 자체 서명 인증서가 필요한 경우 CA 번들을 직접 지정합니다. +- 인증서 만료, 호스트명 불일치 등의 경고를 무시하지 않습니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 인증서 검증 비활성화 +http.get("https://api.example.com", {verifySSL: false}) + +// SAFE — 인증서 검증 유지 (기본값) +http.get("https://api.example.com", {verifySSL: true}) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `rejectUnauthorized: false` 설정 금지, `NODE_TLS_REJECT_UNAUTHORIZED=0` 환경변수 사용 금지 | +| Python | O | `requests.get(url, verify=False)` 금지, `urllib3.disable_warnings()` 사용 금지 | + +--- + +### 2-12. 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 (CWE-539) + +#### 가. 개요 + +민감 정보(역할, 인증 토큰, 개인정보 등)를 영속 쿠키에 평문으로 저장하면 브라우저 저장소를 통해 탈취될 수 있습니다. XSS 공격과 결합되면 쿠키에 저장된 모든 정보가 유출됩니다. + +#### 나. 안전한 코딩기법 + +- 쿠키에는 세션 ID만 저장하고 실제 데이터는 서버 세션에 보관합니다. +- 쿠키에 `httpOnly`, `secure`, `sameSite` 속성을 설정합니다. +- 민감 정보는 쿠키에 저장하지 않습니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 민감 정보를 쿠키에 저장 +response.setCookie("user_role", "admin") +response.setCookie("session_data", serializedUserInfo) + +// SAFE — 서버 세션에 저장, 쿠키는 세션 ID만 +response.setCookie("sessionId", secureSessionId, { + httpOnly: true, + secure: true, + sameSite: "Strict" +}) +session.set(secureSessionId, {role: "admin"}) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `express-session`의 `cookie` 옵션에 `httpOnly`, `secure`, `sameSite` 필수 설정 | +| Python | O | Django `SESSION_COOKIE_HTTPONLY`, `SESSION_COOKIE_SECURE`, Flask `session.permanent` 관리 | + +--- + +### 2-13. 주석문 안에 포함된 시스템 주요정보 (CWE-615) + +#### 가. 개요 + +소스코드 주석에 비밀번호, API 키, 내부 서버 정보 등을 기재하면 소스코드 유출, 클라이언트 측 HTML/JS 주석 노출 등을 통해 민감 정보가 유출됩니다. 개발 중 임시로 기재한 정보가 삭제되지 않고 프로덕션에 배포되는 경우가 많습니다. + +#### 나. 안전한 코딩기법 + +- 주석에 비밀번호, API 키, 서버 주소 등 민감 정보를 기재하지 않습니다. +- 접속 정보 등은 환경변수 또는 비밀 관리 도구를 통해 관리합니다. +- 배포 전 코드 리뷰에서 주석 내 민감 정보를 점검합니다. +- 시크릿 스캐닝 도구(GitGuardian, truffleHog 등)를 CI/CD에 적용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE +// TODO: 운영 DB 비밀번호는 "Passw0rd!" 입니다 +// API Key: sk-1234567890abcdef + +// SAFE — 주석에 민감 정보 절대 기재 금지 +// DB 접속 정보는 환경변수에서 로드 (설정 가이드: wiki/db-setup 참조) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | 클라이언트 측 JS 주석은 브라우저에서 직접 열람 가능, 빌드 시 주석 제거 권장 | +| Python | O | docstring에도 민감 정보 기재 금지, `help()` 함수로 노출 가능 | + +--- + +### 2-14. 솔트 없이 일방향 해시 함수 사용 (CWE-759) + +#### 가. 개요 + +패스워드를 솔트(Salt) 없이 해싱하면 동일한 패스워드가 동일한 해시값을 생성합니다. 공격자는 사전에 계산된 레인보우 테이블(Rainbow Table)을 이용하여 해시값으로부터 원래 패스워드를 역추적할 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 각 패스워드마다 고유한 솔트를 생성하여 해싱합니다. +- bcrypt, scrypt, argon2 등 솔트가 내장된 알고리즘을 사용합니다. +- 솔트는 충분한 길이(최소 16바이트)의 암호학적 보안 난수를 사용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 솔트 없이 해싱 +hashed = sha256(password) + +// SAFE — 솔트 적용 +salt = crypto.randomBytes(16) +hashed = sha256(salt + password) +// 또는 bcrypt 등 솔트 내장 알고리즘 사용 +hashed = bcrypt.hash(password, saltRounds=12) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `bcryptjs`는 솔트 자동 생성, `crypto.pbkdf2Sync()` 사용 시 솔트 별도 관리 | +| Python | O | `bcrypt.gensalt()` 자동 생성, `hashlib.pbkdf2_hmac()` 사용 시 솔트 별도 생성 | + +--- + +### 2-15. 무결성 검사 없는 코드 다운로드 (CWE-494) + +#### 가. 개요 + +외부에서 코드, 라이브러리, 바이너리를 다운로드할 때 무결성(해시, 서명)을 검증하지 않으면 변조된 파일이 설치되어 악성코드가 실행될 수 있습니다. 공급망 공격(Supply Chain Attack)의 대표적인 경로입니다. + +#### 나. 안전한 코딩기법 + +- 다운로드한 파일의 해시(SHA-256 이상)를 사전에 알려진 값과 비교합니다. +- 가능하면 디지털 서명을 검증합니다. +- 패키지 매니저의 무결성 검사 기능(npm `integrity`, pip `--require-hashes`)을 활용합니다. +- 신뢰할 수 있는 소스(공식 레지스트리, HTTPS)에서만 다운로드합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 체크섬 없이 다운로드 +binary = http.download("https://cdn.example.com/lib.tar.gz") +install(binary) + +// SAFE — 해시 검증 후 설치 +binary = http.download("https://cdn.example.com/lib.tar.gz") +if sha256(binary) != EXPECTED_HASH: + return error("Integrity check failed") +install(binary) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `package-lock.json`의 `integrity` 필드 확인, `npm audit` 정기 실행 | +| Python | O | `pip install --require-hashes`, `pipenv`/`poetry`의 lock 파일 무결성 확인 | + +--- + +### 2-16. 반복된 인증시도 제한 기능 부재 (CWE-307) + +#### 가. 개요 + +로그인 시도 횟수에 제한이 없으면 공격자가 자동화 도구로 무차별 대입 공격을 수행하여 패스워드를 추측할 수 있습니다. 계정 잠금이나 지연 메커니즘이 없으면 초당 수천 회의 시도가 가능합니다. + +#### 나. 안전한 코딩기법 + +- 일정 횟수(5~10회) 이상 실패 시 계정을 임시 잠금합니다. +- 점진적 지연(Progressive Delay)을 적용합니다. +- IP 기반 또는 계정 기반 Rate Limiting을 적용합니다. +- CAPTCHA를 도입하여 자동화 공격을 방지합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 시도 횟수 무제한 +router.POST("/login", handler(req): + if authenticate(req.username, req.password): + return success() + return error("Invalid credentials") +) + +// SAFE — 시도 횟수 제한 + 잠금 +router.POST("/login", rateLimiter(maxAttempts=5, window=15min), handler(req): + attempts = getLoginAttempts(req.username) + if attempts >= 5: + return error(429, "계정이 잠겼습니다. 15분 후 재시도하세요.") + if authenticate(req.username, req.password): + resetLoginAttempts(req.username) + return success() + incrementLoginAttempts(req.username) + return error("Invalid credentials") +) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `express-rate-limit`, `rate-limiter-flexible` 미들웨어 사용 | +| Python | O | Django `django-axes`, Flask `flask-limiter` 사용 | + +--- + +## 3. 시간 및 상태 (Time and State) + +동시 실행, 경쟁 조건, 무한 루프 등 프로그램의 실행 흐름과 상태 관리에서 발생하는 보안약점을 다룹니다. 멀티스레드/멀티프로세스 환경에서 자원 접근 순서가 보장되지 않으면 보안 검사가 무효화될 수 있습니다. + +--- + +### 3-1. 경쟁조건: 검사시점과 사용시점 — TOCTOU (CWE-367) + +#### 가. 개요 + +리소스의 상태를 검사(Time of Check)한 후 사용(Time of Use)하기까지의 시간 차이에서 상태가 변경되면 보안 검사가 무효화됩니다. 예를 들어 파일 존재 여부를 확인한 후 읽기 전에 해당 파일이 심볼릭 링크로 교체될 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 검사와 사용을 원자적(atomic) 연산으로 수행합니다. +- 파일 핸들 기반으로 작업하여 검사와 사용 사이의 갭을 제거합니다. +- 임시 파일 생성 시 안전한 API(`mkstemp` 등)를 사용합니다. +- 잠금(lock) 메커니즘을 활용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 검사 후 사용 사이에 갭 존재 +if file.exists(path) and file.isReadable(path): + // 이 사이에 파일이 심볼릭 링크로 교체될 수 있음 + content = file.read(path) + +// SAFE — 원자적 연산 또는 파일 핸들 기반 검사 +try: + handle = file.open(path, "r") + content = handle.read() +catch FileNotFoundError: + return error("File not found") +finally: + handle.close() +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | - | Node.js의 비동기 특성상 TOCTOU 발생 가능성이 낮아 별도 항목 없음 | +| Python | O | `os.path.exists()` 후 `open()` 패턴 대신 직접 `open()` 시도 + 예외 처리 | + +--- + +### 3-2. 종료되지 않는 반복문 또는 재귀 함수 (CWE-835, CWE-674) + +#### 가. 개요 + +종료 조건이 누락되거나 도달할 수 없는 반복문/재귀 함수는 CPU와 메모리를 지속적으로 소비하여 서비스 거부(DoS)를 유발합니다. 외부 입력에 따라 반복 횟수가 결정되는 경우 공격자가 의도적으로 무한 루프를 유발할 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 모든 반복문과 재귀 함수에 명확한 종료 조건을 설정합니다. +- 재귀 깊이에 상한을 두어 스택 오버플로우를 방지합니다. +- 반복 횟수의 최댓값을 설정합니다. +- 타임아웃을 적용하여 일정 시간 이상 실행되면 강제 종료합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 종료 조건 누락 +function processTree(node): + processTree(node.left) // 종료 조건 없음 + processTree(node.right) + +// SAFE — 종료 조건 + 깊이 제한 +function processTree(node, depth=0): + if node == null or depth > MAX_DEPTH: + return + processTree(node.left, depth + 1) + processTree(node.right, depth + 1) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Node.js에서 이벤트 루프 블로킹 주의, `setImmediate()`로 분할 처리 고려 | +| Python | O | `sys.setrecursionlimit()` 설정 확인, 깊은 재귀 대신 반복문 변환 권장 | + +--- + +## 4. 에러처리 (Error Handling) + +에러 메시지 노출, 예외 무시, 부적절한 예외 처리 등 오류 상황에서 발생하는 보안약점을 다룹니다. 올바르지 않은 에러 처리는 시스템 정보 유출, 후속 장애 발생, 보안 검사 우회 등으로 이어질 수 있습니다. + +--- + +### 4-1. 오류 메시지 정보노출 (CWE-209) + +#### 가. 개요 + +에러 발생 시 스택 트레이스, SQL 쿼리, 파일 경로, 서버 버전 등 상세 정보가 사용자에게 노출되면 공격자에게 시스템 구조와 취약점 정보를 제공하게 됩니다. 이 정보는 후속 공격(SQL 삽입, 경로 조작 등)을 위한 정찰에 활용됩니다. + +#### 나. 안전한 코딩기법 + +- 사용자에게는 일반적인 오류 메시지만 반환합니다. +- 상세 오류 정보는 서버 측 로그에만 기록합니다. +- 프로덕션 환경에서 디버그 모드를 비활성화합니다. +- 에러 응답에 일관된 형식을 사용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 스택 트레이스를 그대로 반환 +try: + result = db.query(sql) +catch error: + response.send(500, error.stackTrace) + +// SAFE — 일반 메시지만 반환, 상세 로그는 서버에 기록 +try: + result = db.query(sql) +catch error: + logger.error(error.stackTrace) + response.send(500, "서버 오류가 발생했습니다.") +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Express `app.use(errorHandler)` 에서 `stack` 속성 제거, `NODE_ENV=production` 설정 | +| Python | O | Django `DEBUG = False`, Flask `app.debug = False` 프로덕션 필수 설정 | + +--- + +### 4-2. 오류상황 대응 부재 (CWE-390) + +#### 가. 개요 + +예외를 포착한 후 아무런 처리를 하지 않으면(빈 catch 블록) 오류가 무시되어 프로그램이 비정상 상태에서 계속 실행됩니다. 설정 파일 로드 실패, 인증 검증 실패 등이 무시되면 보안 검사가 건너뛰어지는 결과를 초래합니다. + +#### 나. 안전한 코딩기법 + +- 모든 catch 블록에서 최소한 로깅을 수행합니다. +- 복구 가능한 오류는 기본값 적용 또는 재시도를 수행합니다. +- 복구 불가능한 오류는 예외를 재발생(re-throw)시킵니다. +- 빈 catch 블록은 코드 리뷰에서 반드시 지적합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 예외를 무시 +try: + config = file.read("config.yml") +catch error: + pass // 아무 처리 없음 + +// SAFE — 적절한 처리 또는 기본값 적용 +try: + config = file.read("config.yml") +catch FileNotFoundError: + logger.warn("Config not found, using defaults") + config = DEFAULT_CONFIG +catch error: + logger.error("Config load failed: " + error.message) + throw error // 재발생 +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | ESLint `no-empty` 규칙으로 빈 catch 블록 탐지, Promise `.catch()` 누락 주의 | +| Python | O | `except: pass` 패턴 금지, `pylint` / `flake8`으로 빈 except 탐지 | + +--- + +### 4-3. 부적절한 예외 처리 (CWE-754) + +#### 가. 개요 + +지나치게 넓은 예외 처리(catch-all)는 예기치 않은 오류를 숨겨 디버깅을 어렵게 하고 보안 문제를 은폐합니다. 반대로 필요한 예외를 처리하지 않으면 프로그램이 비정상 종료됩니다. 예외는 구체적으로 분리하여 각각 적절히 처리해야 합니다. + +#### 나. 안전한 코딩기법 + +- 예외를 구체적인 타입별로 분리하여 처리합니다. +- 범용 예외(`Exception`, `Error`)는 최상위 핸들러에서만 사용합니다. +- 각 예외 타입에 맞는 복구 전략을 적용합니다. +- 예상치 못한 예외는 로깅 후 안전하게 종료합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 모든 예외를 한꺼번에 처리 +try: + data = parse(input) + result = process(data) + save(result) +catch Exception: + return error("Something went wrong") + +// SAFE — 예외를 구체적으로 분리 처리 +try: + data = parse(input) +catch ParseError as e: + return error("Invalid input format") +try: + result = process(data) + save(result) +catch DatabaseError as e: + logger.error("DB error: " + e.message) + return error("Processing failed") +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `catch(e)` 에서 `e instanceof TypeError` 등으로 구체적 분기, `async/await` 예외 전파 주의 | +| Python | O | `except Exception` 대신 `except (ValueError, KeyError)` 등 구체적 예외 지정 | + +--- + +## 5. 코드오류 (Code Quality) + +null 참조, 자원 미해제, 안전하지 않은 역직렬화 등 코드 품질과 관련된 보안약점을 다룹니다. 코드 오류는 프로그램 비정상 종료, 리소스 고갈, 원격 코드 실행 등의 보안 문제로 이어질 수 있습니다. + +--- + +### 5-1. Null Pointer 역참조 (CWE-476) + +#### 가. 개요 + +null 또는 undefined 값을 참조하면 프로그램이 비정상 종료됩니다. 웹 서비스에서는 서비스 거부(DoS)로 이어지며, 공격자가 의도적으로 null이 반환되는 조건을 유발하여 서비스를 중단시킬 수 있습니다. + +#### 나. 안전한 코딩기법 + +- 외부 입력이나 데이터베이스 조회 결과를 사용하기 전에 null 체크를 수행합니다. +- Optional Chaining(`?.`), Null Coalescing(`??`) 등 안전한 접근 연산자를 활용합니다. +- 함수 반환값의 null 가능성을 문서화하고 호출부에서 처리합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — null 체크 없이 사용 +user = db.findUser(userId) +name = user.name // user가 null이면 크래시 + +// SAFE — null 체크 후 사용 +user = db.findUser(userId) +if user == null: + return error(404, "User not found") +name = user.name +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `?.` (Optional Chaining), `??` (Nullish Coalescing) 활용, TypeScript strict null checks 권장 | +| Python | O | `if obj is None:` 체크, `getattr(obj, 'attr', default)` 안전 접근 패턴 | + +--- + +### 5-2. 부적절한 자원 해제 (CWE-404) + +#### 가. 개요 + +파일 핸들, 데이터베이스 연결, 네트워크 소켓 등의 리소스를 사용 후 해제하지 않으면 리소스 고갈(Resource Exhaustion)이 발생합니다. 커넥션 풀이 고갈되면 서비스 전체가 중단될 수 있으며, 파일 디스크립터 부족은 시스템 전반에 영향을 줍니다. + +#### 나. 안전한 코딩기법 + +- `finally` 블록에서 리소스를 해제합니다. +- 언어별 자동 해제 구문을 사용합니다(Python: `with`, JS: `try-finally`, Java: `try-with-resources`). +- 커넥션 풀을 사용하여 리소스 관리를 자동화합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 리소스 해제 누락 +connection = db.connect() +result = connection.query(sql) +// connection.close() 누락 → 커넥션 풀 고갈 + +// SAFE — finally 또는 컨텍스트 매니저로 확실히 해제 +connection = db.connect() +try: + result = connection.query(sql) +finally: + connection.close() + +// 또는 언어별 자동 해제 구문 사용 +// Python: with db.connect() as conn: +// JS: using 또는 try-finally +// Java: try-with-resources +// C#: using statement +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `try-finally` 패턴 사용, `stream.destroy()`, DB 풀의 `release()` 호출 확인 | +| Python | O | `with` 구문(Context Manager) 사용, `__enter__`/`__exit__` 프로토콜 활용 | + +--- + +### 5-3. 신뢰할 수 없는 데이터의 역직렬화 (CWE-502) + +#### 가. 개요 + +신뢰할 수 없는 출처의 데이터를 역직렬화하면 공격자가 조작된 직렬화 데이터를 통해 임의 코드를 실행할 수 있습니다. Python의 `pickle`, Java의 `ObjectInputStream`, JS의 `node-serialize` 등은 역직렬화 과정에서 코드를 실행할 수 있어 매우 위험합니다. + +#### 나. 안전한 코딩기법 + +- 외부 입력에 대해 `pickle`, `node-serialize` 등 코드 실행 가능한 역직렬화를 사용하지 않습니다. +- JSON 등 코드 실행이 불가능한 데이터 형식을 사용합니다. +- 역직렬화 후 스키마 검증을 수행합니다. +- 부득이하게 역직렬화가 필요한 경우 허용 클래스를 화이트리스트로 제한합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 외부 데이터를 직접 역직렬화 +data = request.body +obj = deserialize(data) // Python: pickle.loads(), JS: node-serialize + +// SAFE — JSON 등 안전한 포맷만 사용 +data = request.body +obj = JSON.parse(data) // 코드 실행 불가능한 포맷 +// 스키마 검증 추가 +if not schema.validate(obj): + return error("Invalid data format") +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `node-serialize` 사용 금지, `JSON.parse()` 사용, 입력 크기 제한 설정 | +| Python | O | `pickle.loads()` 외부 입력에 사용 금지, `json.loads()` 사용, `yaml.safe_load()` 사용 | + +--- + +## 6. 캡슐화 (Encapsulation) + +세션 데이터 보호, 디버그 코드 관리, 내부 데이터 접근 제어 등 정보 은닉과 관련된 보안약점을 다룹니다. 캡슐화가 제대로 이루어지지 않으면 내부 정보가 외부에 노출되거나 의도치 않은 데이터 변조가 발생합니다. + +--- + +### 6-1. 잘못된 세션에 의한 데이터 정보 노출 (CWE-488, CWE-543) + +#### 가. 개요 + +사용자별 데이터를 전역 변수나 정적 변수에 저장하면, 동시 요청 처리 시 다른 사용자의 데이터가 덮어씌워져 데이터가 교차 노출됩니다. 멀티스레드/멀티프로세스 웹 서버 환경에서 특히 위험합니다. + +#### 나. 안전한 코딩기법 + +- 사용자 데이터는 요청(request) 스코프 또는 세션 스코프의 변수에 저장합니다. +- 전역/정적 변수에 사용자별 데이터를 저장하지 않습니다. +- 스레드 로컬 저장소(Thread Local Storage)를 활용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 전역/정적 변수에 사용자 데이터 저장 +global currentUser = null + +handler(req): + currentUser = req.user // 동시 요청 시 다른 사용자 데이터로 덮어씌워짐 + return "Hello " + currentUser.name + +// SAFE — 요청/세션 스코프 변수 사용 +handler(req): + currentUser = req.user // 요청별 로컬 변수 + return "Hello " + currentUser.name +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | Node.js는 단일 스레드이나 모듈 스코프 변수 공유 주의, `AsyncLocalStorage` 활용 | +| Python | O | Flask의 `g` 객체, Django의 `request` 객체 활용, 전역 변수에 사용자 데이터 저장 금지 | + +--- + +### 6-2. 제거되지 않고 남은 디버그 코드 (CWE-489) + +#### 가. 개요 + +개발 중 사용한 디버그 코드(console.log, print, 디버그 모드 활성화 등)가 프로덕션에 남으면 비밀번호, 토큰, 내부 구조 등 민감 정보가 로그를 통해 노출됩니다. 디버그 엔드포인트가 남아 있으면 공격 표면이 확대됩니다. + +#### 나. 안전한 코딩기법 + +- 배포 전 코드 리뷰에서 디버그 코드를 점검합니다. +- 로그 레벨을 환경에 따라 분기합니다(개발: DEBUG, 프로덕션: WARN 이상). +- 린트 규칙(`no-console` 등)을 적용하여 디버그 코드를 탐지합니다. +- 프로덕션 빌드에서 디버그 코드를 자동 제거합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 디버그 코드 잔존 +console.log("DEBUG: user password = " + password) +app.config.DEBUG = true + +// SAFE — 디버그 코드 제거 또는 환경 분기 +if env.isDevelopment(): + logger.debug("User login attempt: " + username) +// 프로덕션에서는 DEBUG 모드 비활성화 +app.config.DEBUG = env.get("DEBUG", false) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | ESLint `no-console` 규칙 적용, webpack/Terser의 `drop_console` 옵션 사용 | +| Python | O | `logging` 모듈 사용, `print()` 대신 `logger.debug()` 사용, 프로덕션 로그 레벨 설정 | + +--- + +### 6-3. Public 메소드로부터 반환된 Private 배열 (CWE-495) + +#### 가. 개요 + +클래스 내부의 배열이나 객체의 참조를 public 메서드에서 직접 반환하면, 외부 코드가 반환된 참조를 통해 내부 데이터를 직접 수정할 수 있습니다. 이로 인해 캡슐화가 깨지고 데이터 무결성이 훼손됩니다. + +#### 나. 안전한 코딩기법 + +- 내부 데이터를 반환할 때 깊은 복사(Deep Copy)를 수행합니다. +- 불변(Immutable) 객체로 래핑하여 반환합니다. +- 방어적 복사(Defensive Copy) 패턴을 적용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 내부 배열의 참조를 직접 반환 +class UserService: + private users = [...] + + function getUsers(): + return this.users // 외부에서 수정 가능 + +// SAFE — 복사본 반환 +class UserService: + private users = [...] + + function getUsers(): + return copy(this.users) // 깊은 복사 +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `structuredClone()`, `JSON.parse(JSON.stringify())`, 스프레드 연산자(`[...arr]`) 사용 | +| Python | O | `copy.deepcopy()`, 리스트 슬라이싱(`list[:]`), `dataclasses.field(default_factory)` 사용 | + +--- + +### 6-4. Private 배열에 Public 데이터 할당 (CWE-496) + +#### 가. 개요 + +외부에서 전달받은 배열이나 객체를 내부 필드에 직접 할당하면, 외부에서 원본 참조를 통해 내부 데이터를 변경할 수 있습니다. 이는 6-3(Private 배열 반환)의 반대 방향 문제입니다. + +#### 나. 안전한 코딩기법 + +- 외부 데이터를 내부에 할당할 때 깊은 복사를 수행합니다. +- setter 메서드에서 방어적 복사를 적용합니다. +- 입력 데이터의 유효성을 검증한 후 복사본을 저장합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 외부 참조를 그대로 내부에 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = newSettings // 외부에서 변경 시 내부도 변경 + +// SAFE — 복사본을 할당 +class Config: + private settings = {} + + function setSettings(newSettings): + this.settings = copy(newSettings) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `structuredClone(newSettings)` 또는 `Object.freeze()` 적용 | +| Python | O | `copy.deepcopy(new_settings)` 사용, `@dataclass(frozen=True)` 불변 객체 활용 | + +--- + +## 7. API 오용 (API Misuse) + +API를 의도와 다르게 사용하거나, 보안상 취약한 API를 사용하여 발생하는 보안약점을 다룹니다. DNS 기반 보안 결정, deprecated/취약 함수 사용 등이 해당됩니다. + +--- + +### 7-1. DNS lookup에 의존한 보안결정 (CWE-350) + +#### 가. 개요 + +접근 제어나 인증에 DNS 역방향 조회 결과(호스트명)를 사용하면, 공격자가 DNS 스푸핑을 통해 보안 검사를 우회할 수 있습니다. DNS 레코드는 공격자가 조작할 수 있으므로 신뢰할 수 없는 정보입니다. + +#### 나. 안전한 코딩기법 + +- 접근 제어에 DNS 호스트명 대신 IP 주소를 직접 사용합니다. +- IP 기반 화이트리스트를 관리합니다. +- 가능하면 인증서 기반 상호 인증(mTLS)을 적용합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — 역방향 DNS로 접근 제어 +hostname = dns.reverseLookup(request.remoteIP) +if hostname == "trusted.internal.com": + allowAccess() + +// SAFE — IP 주소 직접 비교 +clientIP = request.remoteIP +if clientIP in TRUSTED_IP_LIST: + allowAccess() +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `dns.reverse()` 결과를 보안 결정에 사용 금지, `req.ip` 또는 `req.socket.remoteAddress` 사용 | +| Python | O | `socket.gethostbyaddr()` 결과를 보안 결정에 사용 금지, `request.META['REMOTE_ADDR']` 사용 | + +--- + +### 7-2. 취약한 API 사용 + +#### 가. 개요 + +보안 취약점이 알려져 있거나 deprecated된 API/함수를 사용하면 공격자가 해당 취약점을 악용할 수 있습니다. 라이브러리의 구 버전에 존재하는 취약점(CVE)이 패치되지 않은 채 사용되는 경우가 대표적입니다. + +#### 나. 안전한 코딩기법 + +- deprecated된 API를 최신 대체 API로 교체합니다. +- 사용 중인 라이브러리의 보안 권고(Security Advisory)를 정기적으로 확인합니다. +- 의존성 취약점 스캐닝 도구(`npm audit`, `pip-audit`, `safety`)를 CI/CD에 적용합니다. +- 알려진 취약점이 있는 라이브러리 버전을 즉시 업데이트합니다. + +#### 다. 코드예제 + +```pseudo +// UNSAFE — deprecated 또는 취약 API 사용 +result = dangerousFunction(data) // 알려진 취약점 존재 +// 예: strcpy, gets (C), md5 (해싱), http (비암호화) + +// SAFE — 보안이 강화된 대체 API 사용 +result = safeAlternative(data) +// 예: strncpy, fgets (C), sha256/bcrypt (해싱), https (암호화) +``` + +#### 라. 적용 언어 + +| 언어 | 대응 | 주의점 | +|------|:----:|--------| +| JavaScript | O | `npm audit fix`, `npx ncu` (npm-check-updates)로 의존성 관리, Node.js LTS 버전 사용 | +| Python | O | `pip-audit`, `safety check`로 취약 패키지 탐지, `pyup.io` 자동 업데이트 활용 | + +--- + +## 부록 A. CWE 매핑 전체 테이블 + +### 1. 입력데이터 검증 및 표현 + +| # | 보안약점 | CWE | JS | Py | 우선순위 | +|---|---------|-----|:--:|:--:|:-------:| +| 1 | SQL 삽입 | CWE-89 | O | O | Critical | +| 2 | 코드 삽입 | CWE-94, 95 | O | O | Critical | +| 3 | 경로 조작 및 자원 삽입 | CWE-22, 99 | O | O | High | +| 4 | 크로스사이트 스크립트 (XSS) | CWE-79 | O | O | Critical | +| 5 | 운영체제 명령어 삽입 | CWE-78 | O | O | Critical | +| 6 | 위험한 형식 파일 업로드 | CWE-434 | O | O | High | +| 7 | 신뢰되지 않은 URL 주소로 자동접속 연결 | CWE-601 | O | O | Medium | +| 8 | 부적절한 XML 외부 개체 참조 (XXE) | CWE-611 | O | O | High | +| 9 | XPath/XML 삽입 | CWE-643 | O | O | Medium | +| 10 | LDAP 삽입 | CWE-90 | O | O | Medium | +| 11 | 크로스사이트 요청 위조 (CSRF) | CWE-352 | O | O | High | +| 12 | 서버사이드 요청 위조 (SSRF) | CWE-918 | O | O | High | +| 13 | 보안기능 결정에 사용되는 부적절한 입력값 | CWE-807 | O | O | Medium | +| 14 | HTTP 응답분할 | CWE-113 | - | O | Medium | +| 15 | 정수형 오버플로우 | CWE-190 | - | O | Medium | +| 16 | 포맷 스트링 삽입 | CWE-134 | - | O | Medium | + +### 2. 보안기능 + +| # | 보안약점 | CWE | JS | Py | 우선순위 | +|---|---------|-----|:--:|:--:|:-------:| +| 1 | 적절한 인증 없는 중요 기능 허용 | CWE-306 | O | O | Critical | +| 2 | 부적절한 인가 | CWE-285 | O | O | Critical | +| 3 | 중요한 자원에 대한 잘못된 권한 설정 | CWE-732 | O | O | High | +| 4 | 취약한 암호화 알고리즘 사용 | CWE-327 | O | O | High | +| 5 | 암호화되지 않은 중요정보 | CWE-312, 319 | O | O | High | +| 6 | 하드코드된 중요정보 | CWE-259, 321 | O | O | Critical | +| 7 | 충분하지 않은 키 길이 사용 | CWE-326 | O | O | Medium | +| 8 | 적절하지 않은 난수 값 사용 | CWE-330 | O | O | High | +| 9 | 취약한 패스워드 허용 | CWE-521 | O | O | Medium | +| 10 | 부적절한 전자서명 확인 | CWE-347 | O | O | High | +| 11 | 부적절한 인증서 유효성 검증 | CWE-295 | O | O | High | +| 12 | 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 | CWE-539 | O | O | Medium | +| 13 | 주석문 안에 포함된 시스템 주요정보 | CWE-615 | O | O | Medium | +| 14 | 솔트 없이 일방향 해시 함수 사용 | CWE-759 | O | O | Medium | +| 15 | 무결성 검사 없는 코드 다운로드 | CWE-494 | O | O | Medium | +| 16 | 반복된 인증시도 제한 기능 부재 | CWE-307 | O | O | High | + +### 3. 시간 및 상태 + +| # | 보안약점 | CWE | JS | Py | 우선순위 | +|---|---------|-----|:--:|:--:|:-------:| +| 1 | 경쟁조건: 검사시점과 사용시점 (TOCTOU) | CWE-367 | - | O | Medium | +| 2 | 종료되지 않는 반복문 또는 재귀 함수 | CWE-835, 674 | O | O | Medium | + +### 4. 에러처리 + +| # | 보안약점 | CWE | JS | Py | 우선순위 | +|---|---------|-----|:--:|:--:|:-------:| +| 1 | 오류 메시지 정보노출 | CWE-209 | O | O | Medium | +| 2 | 오류상황 대응 부재 | CWE-390 | O | O | Medium | +| 3 | 부적절한 예외 처리 | CWE-754 | O | O | Medium | + +### 5. 코드오류 + +| # | 보안약점 | CWE | JS | Py | 우선순위 | +|---|---------|-----|:--:|:--:|:-------:| +| 1 | Null Pointer 역참조 | CWE-476 | O | O | Medium | +| 2 | 부적절한 자원 해제 | CWE-404 | O | O | Medium | +| 3 | 신뢰할 수 없는 데이터의 역직렬화 | CWE-502 | O | O | Critical | + +### 6. 캡슐화 + +| # | 보안약점 | CWE | JS | Py | 우선순위 | +|---|---------|-----|:--:|:--:|:-------:| +| 1 | 잘못된 세션에 의한 데이터 정보 노출 | CWE-488, 543 | O | O | High | +| 2 | 제거되지 않고 남은 디버그 코드 | CWE-489 | O | O | Medium | +| 3 | Public 메소드로부터 반환된 Private 배열 | CWE-495 | O | O | Medium | +| 4 | Private 배열에 Public 데이터 할당 | CWE-496 | O | O | Medium | + +### 7. API 오용 + +| # | 보안약점 | CWE | JS | Py | 우선순위 | +|---|---------|-----|:--:|:--:|:-------:| +| 1 | DNS lookup에 의존한 보안결정 | CWE-350 | O | O | Medium | +| 2 | 취약한 API 사용 | - | O | O | Medium | + +--- + +## 부록 B. 카테고리별 우선순위 요약 + +| 카테고리 | 항목 수 | Critical | High | Medium | +|---------|:------:|:--------:|:----:|:------:| +| 1. 입력데이터 검증 및 표현 | 16 | 4 | 5 | 7 | +| 2. 보안기능 | 16 | 3 | 7 | 6 | +| 3. 시간 및 상태 | 2 | 0 | 0 | 2 | +| 4. 에러처리 | 3 | 0 | 0 | 3 | +| 5. 코드오류 | 3 | 1 | 0 | 2 | +| 6. 캡슐화 | 4 | 0 | 1 | 3 | +| 7. API 오용 | 2 | 0 | 0 | 2 | +| **합계** | **46** | **8** | **13** | **25** | + +### 우선순위별 대응 기준 + +| 등급 | 설명 | 대응 시점 | +|------|------|----------| +| **Critical** | 원격 코드 실행, 인증 우회, 대규모 데이터 유출이 가능합니다. | 즉시 수정합니다. | +| **High** | 중요 정보 노출, 권한 상승, 서비스 거부가 가능합니다. | 배포 전에 수정합니다. | +| **Medium** | 제한적 영향이며, 특정 조건에서 악용 가능합니다. | 계획을 수립하여 수정합니다. | + +### 언어별 적용 범위 + +| 언어 | 기반 가이드 | 항목 수 | 주요 프레임워크 | +|------|-----------|:------:|--------------| +| JavaScript | KISA JS 시큐어코딩 가이드 (2023) | 42 | Express.js, Sequelize, Mongoose, Node.js crypto | +| Python | KISA Python 시큐어코딩 가이드 (2023) | 46 | Django, Flask, SQLAlchemy, cryptography, hashlib | +| Pseudo Code (본 문서) | JS + Python 통합 | 46 | 언어 무관 범용 패턴 | + +### Python 고유 항목 (4개) + +JavaScript 가이드에는 없고 Python 가이드에만 포함된 항목입니다. + +1. **HTTP 응답분할** (CWE-113) -- Node.js 최신 버전에서 자동 차단 +2. **정수형 오버플로우** (CWE-190) -- Python int는 무한 정밀도이나 C 확장에서 발생 가능 +3. **포맷 스트링 삽입** (CWE-134) -- Python의 `str.format()`, `%` 연산자 고유 취약점 +4. **경쟁조건 TOCTOU** (CWE-367) -- Node.js 비동기 특성상 발생 가능성 낮음 + +--- + +> 본 문서는 KISA(한국인터넷진흥원) JavaScript/Python 시큐어코딩 가이드 (2023년 개정본)를 기반으로 작성되었습니다. 언어별 상세 코드 예시는 원본 가이드를 참조하시기 바랍니다. diff --git "a/\353\254\270\354\204\234/Python_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234(2023\353\205\204_\352\260\234\354\240\225\353\263\270).pdf" "b/\353\254\270\354\204\234/Python_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234(2023\353\205\204_\352\260\234\354\240\225\353\263\270).pdf" new file mode 100644 index 0000000..f1103e9 Binary files /dev/null and "b/\353\254\270\354\204\234/Python_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234(2023\353\205\204_\352\260\234\354\240\225\353\263\270).pdf" differ diff --git "a/\353\254\270\354\204\234/Python_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" "b/\353\254\270\354\204\234/Python_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" new file mode 100644 index 0000000..b6697c7 --- /dev/null +++ "b/\353\254\270\354\204\234/Python_\354\213\234\355\201\220\354\226\264\354\275\224\353\224\251_\352\260\200\354\235\264\353\223\234.md" @@ -0,0 +1,4540 @@ +# Python 시큐어코딩 가이드 (2023년 개정본) + +> **발행기관**: KISA (한국인터넷진흥원) +> **연도**: 2023 +> **원본**: 176페이지 +> **항목 수**: 46개 (7개 카테고리) + +--- + +# 제1장 개요 + +## 제1절 배경 + +![Python 시큐어코딩 가이드 표지](figures/python/misc-p1_00.png) + +![Python 시큐어코딩 가이드 개요](figures/python/misc-p1_01.png) + +인공지능, 블록체인 등 혁신적인 기술을 기반으로 하는 기업들이 기존 비즈니스 시장을 흔들고 새로운 트렌드를 +만들어 가고 있다. 스마트폰은 전 국민의 일상이 되었으며 비대면 시장의 폭발적인 성장으로 모든 정보의 흐름이 +IT 기반 시스템으로 모이고 있다. 정보가 모이는 곳에는 항상 보안 위협이 뒤따르며, 다양한 IT 서비스를 개발 +하는 기업들 또한 이러한 위협에 노출될 수 밖에 없다. 잘 만들어진 소프트웨어는 안정적인 수입과 성장을 견인 +하지만 그렇지 못한 경우 기업의 생존에 위협을 줄 수 있다. +Ponemon Institute의 보고서에 따르면, 60%의 침해사고가 패치되지 않은 알려진 취약점으로 인한 것이 +라고 밝혀졌다1). 특히 사용자 정보를 처리하는 웹 애플리케이션 취약점으로 인해 중요정보가 유출되는 침해사고가 +빈번하게 발생되고 있다. 또한 침해사고 발생 전 까지 취약점이 있다는 사실을 인지하지 못한 기업이 전체의 +62%에 달한다는 분석 결과가 나왔다. 보안 사고의 위험성과 중요성을 인지한 많은 기업들이 침입차단 시스템, +안티 바이러스 제품들을 도입해 보안 수준을 강화하고 있지만, 단순 제품 도입만으로는 소프트웨어에 내재된 +보안 취약점을 악용하는 공격에 대응할 수 없다. +현실적으로 보안 관점에서 완벽한 소프트웨어를 개발하는 것은 불가능하다. 하지만 제품을 설계하고 개발하는 +단계에서부터 보안 위협을 고려하고 분석해 나간다면 소프트웨어에서 발생 가능한 많은 위협을 사전에 차단하거나 +문제 발생 시 빠르게 대응할 수 있다. 간단한 개발 실수도 대형 보안 사고로 이어질 수 있으며, 개발 프로세스 +상에서 보안 취약점을 탐색하고 발견하는 작업이 늦어질수록 수정 비용이 기하급수적으로 증가한다는 연구 결과도 +공개된 바 있다. +1) https://www.servicenow.com/lpayr/ponemon-vulnerability-survey.html + +![탐지시간을 기준으로 한 상대적 수정비용](figures/python/misc-p9_02.png) + +탐지시간을 기준으로 한 상대적 수정비용 +RELATIVE COST TO FIX, BASED ON TIME OF DETECTION +* 출처 : VERACODE – Secure Development Survey: Developer’s Respond To Application Security Trends (2021) +‘소프트웨어 개발보안’은 소프트웨어 개발과정에서 개발자의 실수, 논리적 오류 등으로 인한 보안취약점 및 +약점들을 최소화해 사이버 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안활동을 의미한다. +구체적으로 소프트웨어 개발 생명주기(SDLC, Software Development Life Cycle)의 각 단계별로 요구되는 +보안활동을 통해 안전한 소프트웨어를 만들 수 있도록 해 준다. 개발보안을 적용하면 소프트웨어에 내재하는 +보안약점(weakness)을 초기 단계에서 발견 및 수정할 수 있으며, 이를 통해 소프트웨어 운영 중 발생 가능한 +잠재적인 보안취약점(vulnerability)을 예방할 수 있다. +소프트웨어 개발보안의 중요성을 이해하고 체계화한 미국의 경우 국토안보부(DHS)를 중심으로 시큐어코딩을 +포함한 소프트웨어(SW) 개발 전 과정(설계, 구현, 시험 등)에 대한 보안활동 연구를 활발히 진행하고 있으며, +이는 2011년 발표한 “안전한 사이버 미래를 위한 청사진(Blueprint for a Secure Cyber Future)”에 자세히 +언급되어 있다. +국내의 경우 2009년도부터 전자정부 서비스를 중심으로 공공영역에서의 소프트웨어 개발 보안 연구 및 정책이 +본격적으로 추진되기 시작했다. 2019년 6월에는 소프트웨어 개발 보안의 법적 근거를 담은 소프트웨어진흥법 +개정안이 발의되었고 2020년 12월 10일에 시행됨에 따라 민간분야까지 소프트웨어 개발보안 영역이 확대되었다. +과학기술정보통신부는 정보보호 패러다임 변화에 대응하고 안전하고 신뢰할 수 있는 디지털 안심 국가 실현을 +목표로 2021년부터 중소기업 SW 보안약점 진단, 민간 특화 개발보안 가이드 보급, 개발보안 교육 등을 통해 +민간 분야의 안전한 디지털 전환을 지원하고 있다. + +## 제2절 가이드 목적 및 구성 +빠르게 변화하는 ICT 기술 환경에 발맞추어 민간분야 또한 다양한 분야에 걸쳐 사용되는 언어에 대한 보안 +가이드의 필요성이 높아졌다. 이에 민간에서 가장 많이 활용되고 있는 언어를 조사하여 그 중 선호도가 가장 +높은 파이썬 언어에 대한 시큐어코딩 가이드를 제작하게 되었다. +파이썬은 1991년에 발표된 고급언어로 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타입 +(dynamically typing) 대화형 언어이다. 다양한 플랫폼을 지원하며 라이브러리(모듈)가 풍부하여 대학을 비롯한 +여러 교육 기관, 연구기관 및 산업계에서 활용도가 높아지고 있는 추세다. 최근에는 웹 개발 이외에도 그래픽, +머신러닝 업계에서 선호하는 언어로 C, JAVA를 제치고 선호도 1위에 오르기도 했다. +![TIOBE Programming Community Index](figures/python/tiobe-chart_03.png) + +TIOBE Programming Community Index +* 출처 : TIOBE - 파이썬 Programming Language of the Year (2021.11.) +본 가이드는 파이썬 소프트웨어 개발 시 발생 가능한 보안 위협 최소화를 위해 구현 단계에서 검증해야 하는 +보안약점들에 대한 설명과 안전한 코딩 기법, 관련 코드 예제를 제공해 안전한 소프트웨어 개발에 도움을 주는 +것을 목표로 한다. 파이썬 3.X 버전을 기준으로 작성되었으며, 구현단계 보안약점 제거 기준 항목 중 언어 +특성에 따라 일부 항목은 제외했다. + +구성 +-(1장) 파이썬 개발보안 가이드 개발 배경 및 목적 +-(2장) 파이썬 언어 기반 구현단계 보안약점 제거 기준 설명 +- 구현단계 보안약점 제거 기준 항목(49개) 중 46개에 대해 소개 +유형 +주요 내용 +입력데이터 +검증 및 표현 +-SQL 삽입, 코드 삽입, 경로 조작 및 자원 삽입 등 16개 항목 + ※ (1개 항목 제외) 메모리 버퍼 오버플로우 +보안기능 +-적절한 인증 없는 중요 기능 허용, 부적절한 인가 등 16개 항목 +시간 및 상태 +-경쟁조건, 종료되지 않는 반복문 또는 재귀함수 2개 항목 +에러처리 +-오류 메시지 정보노출, 오류상황 대응 부재 등 3개 항목 +코드오류 +-Null Pointer 역참조, 부적절한 자원 해제 등 3개 항목 +※ (2개 항목 제외) 해제된 자원 사용, 초기화되지 않은 변수 사용 +캡슐화 +-잘못된 세션에 의한 데이터 정보노출 등 4개 항목 +API 오용 +-DNS lookup에 의한 보안결정 2개 항목 +-(3장) 구현단계 보안약점 제거 기준 및 용어 설명 + +PART 제2장 +시큐어코딩 가이드 + +시큐어코딩 +가이드 + +# 제2장 시큐어코딩 가이드 + +## 제1절 입력데이터 검증 및 표현 +프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정, 일관되지 않은 언어셋 +사용 등으로 인해 발생되는 보안약점으로 SQL 삽입, 크로스사이트 스크립트(XSS) 등의 공격을 유발할 수 있다. +### 1. SQL 삽입 +#### 가. 개요 + +![SQL 삽입 공격 흐름](figures/python/sql-injection_04.png) + +데이터베이스(DB)와 연동된 웹 응용프로그램에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우 공격자가 +입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안약점을 말한다. +취약한 웹 응용프로그램에서는 사용자로부터 입력된 값을 검증 없이 넘겨받아 동적쿼리(Dynamic Query)를 +생성하기 때문에 개발자가 의도하지 않은 쿼리가 실행되어 정보유출에 악용될 수 있다. + +파이썬에서는 데이터베이스에 엑세스에 사용되는 다양한 파이썬 모듈간의 일관성을 장려하기 위해 DB-API를 +정의하고 있고 각 데이터베이스마다 별도의 DB 모듈을 이용해 데이터베이스에 엑세스하게 된다. DB-API 외에도 +파이썬에서는 Django, SQLAlchemy, Storm등의 ORM(Object Relational Mapping)을 사용하여 데이터 +베이스에 엑세스할 수 있다. +파이썬에서 지원하는 다양한 ORM을 이용하여 보다 안전하게 DB를 사용할 수 있지만 일부 복잡한 조건의 +쿼리문 생성 어려움, 성능저하 등의 이유로 직접 원시 SQL 실행이 필요한 경우가 있다. ORM 대신 원시 쿼리를 +사용하는 경우 검증되지 않은 외부 입력값으로 인해 SQL 삽입 공격이 발생할 수 있다. +#### 나. 안전한 코딩기법 +DB API 사용 시 인자화된 쿼리2)를 통해 외부 입력값을 바인딩해서 사용하면 SQL 삽입 공격으로부터 안전하게 +보호할 수 있다. +파이썬에서 많이 사용되는 ORM 프레임워크로는 Django의 querySets, SQLAlchemy, Storm등이 있다. +ORM 프레임워크는 기본적으로 모든 쿼리문에 인자화된 쿼리문을 사용하므로 SQL 삽입 공격으로부터 안전하다. +ORM 프레임워크 내에서 원시 SQL을 사용할 경우에도 외부 입력값을 인자화된 쿼리문의 바인딩 변수로 사용 +하면 안전한 코드를 작성할 수 있다. +#### 다. 코드 예제 +**가) DB API 사용 예제** +다음은 MySQL, PostgreSQL의 DB API를 사용해 입력값을 받아 처리 하는 안전하지 않은 코드다. +외부 입력값을 입력 받아 변수 name과 content_id에 할당하고(line 8-9), 이 name과 content_id 값에 대한 +별도의 검증 없이 쿼리문의 인자 값으로 사용하는 단순 문자열 결합을 통해 쿼리를 생성하고 있다(line 12-15). +이 경우 content_id 값으로 ‘a’ or ‘a’ = ‘a와 같은 공격 문자열을 입력하면 조건절이 content_id = ‘a’ or +‘a’ = ‘a’로 바뀌고, 그 결과 board 테이블 전체 레코드의 name 컬럼의 내용이 공격자가 전달한 name의 +값으로 변경된다. +2) 사용자가 전달한 입력값을 그대로 쿼리 문자열로 만들지 않고, DB API에서 제공하는 기능을 사용해 쿼리 +내에 사용자 입력값을 구성하는 방법을 의미 + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +from django.db import connection +def update_board(request): + ...... + dbconn = connection + + with dbconn.cursor() as curs: + # 외부로부터 입력받은 값을 검증 없이 사용할 경우 안전하지 않다 + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + + # 사용자의 검증되지 않은 입력값을 사용해 동적 쿼리문 생성 + sql_query = "update board set name='" + name + "' where content_id='“ + content_id + "'" + # 외부 입력값이 검증 없이 쿼리로 포함되어 안전하지 않다 + curs.execute(sql_query) + dbconn.commit() + return render(request, '/success.html') +``` + +다음은 이를 안전한 코드로 변환한 예시를 보여준다. 앞선 예제와 달리 입력 받은 외부 입력값을 그대로 +사용하지 않고 인자화된 쿼리 생성 후(line 11) execute() 메서드의 두 번째 인자 값으로 이 값을 바인딩 해서 +쿼리문을 실행한다(line 15). 이렇게 매개변수 바인딩을 통해 execute() 함수를 호출하면 공격자가 쿼리를 변조 +하는 값을 삽입하더라도 해당 값이 바인딩된 매개변수의 값으로만 사용되기 때문에 안전하다. + +**안전한 코드** + +```python +from django.shortcuts import render +from django.db import connection +def update_board(request): + ...... + dbconn = connection + with dbconn.cursor() as curs: + name = request.POST.get('name', '') + content_id = request.POST.get('content_id', '') + # 외부 입력값 조작으로부터 안전한 인자화된 쿼리를 생성한다. + sql_query = 'update board set name=%s where content_id=%s' + # 사용자의 입력값이 인자화된 쿼리에 바인딩 후 실행되므로 안전하다. + curs.execute(sql_query, (name, content_id)) + dbconn.commit() + return render(request, '/success.html') +``` + +SQLite DB API 사용 시에도 동일하게 정적인 쿼리문을 사전에 생성하고 사용자 입력을 바인딩하는 방법을 +적용해야 한다. SQLite에서는 인자화된 쿼리를 만들기 위해 “?”를 Placeholder로 사용하거나 “:name”처럼 +Named Placeholder를 사용하는 방법 2가지를 적용 가능하다. +**나) ORM 사용 예제** +Django의 querysets는 쿼리 인자화를 사용해 쿼리를 구성하기 때문에 SQL 삽입 공격으로부터 안전하다. +부득이하게 원시 SQL 또는 사용자 정의 SQL을 사용할 경우에도 외부 입력값을 인자화된 쿼리의 바인딩 변수로 +사용하면 된다. +아래는 Django의 원시 SQL을 사용하는 예시를 보여 준다. Django의 ORM 프레임워크는 원시 SQL 쿼리를 +수행하기 위해 Manager.raw() 기능을 제공한다. 외부로부터 입력받은 외부 입력값(line 6)을 쿼리문 생성에 +문자열 조합으로 사용해 쿼리문을 구성하고 있다(line 11). + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +from app.models import Member +def member_search(request): + name = request.POST.get('name', '') + + # 입력값을 검증 없이 쿼리문 생성에 사용해 안전하지 않다 + query=“select * from member where name=‘” + name + “’” + # 외부 입력값을 검증 없이 사용한 쿼리문을 raw()함수로 실행하면 안전하지 않다 + data = Member.objects.raw(query) + return render(request, '/member_list.html', {'member_list':data}) +``` + +다음 코드에서는 Django에서 원시 코드 실행 시에도 인자화된 쿼리와 params 인수를 raw() 함수의 바인딩 +변수로 사용하는 안전한 예시를 보여 준다. 외부 입력값을 포함하는 쿼리문 생성 자체를 인자화된 쿼리 형식으로 +생성하고(line 10), raw() 메소드에서 두 번째 인자의 바인딩 변수로 사용했다. + +**안전한 코드** + +```python +from django.shortcuts import render +from app.models import Member +def member_search(request): + name = request.POST.get('name', '') + # 외부 입력값을 raw() 함수 실행 시 바인딩 변수로 사용하여 쿼리 구조가 + # 변경되지 않도록 한다.(list 형은 %s, dictionary 형은 %(key)s를 사용) + query='select * from member where name=%s' + # 인자화된 쿼리문을 사용하여 raw() 함수를 호출해 안전하다 + data = Member.objects.raw(query, [name]) + return render(request, '/member_list.html', {'member_list':data}) +``` + +#### 라. 참고자료 +- CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection'), MITRE, +- [https://cwe.mitre.org/data/definitions/89.html](https://cwe.mitre.org/data/definitions/89.html) +- SQL Injection Prevention Cheat Sheet, OWASP +- [https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html) +- Sqlite3 DB-API, Python, Python Software Foundation, +- [https://docs.python.org/ko/3/library/sqlite3.html](https://docs.python.org/ko/3/library/sqlite3.html) +- MySQL, Python Coding Examples, Oracle Corporation +- [https://dev.mysql.com/doc/connector-python/en/connector-python-examples.html](https://dev.mysql.com/doc/connector-python/en/connector-python-examples.html) +- Django QuerySet API reference, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/ref/models/querysets/](https://docs.djangoproject.com/en/3.2/ref/models/querysets/) +- Django Performing raw SQL queries, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/db/sql/](https://docs.djangoproject.com/en/3.2/topics/db/sql/) +- SQL Expression Language Tutorial, SQLAlchemy, +- [https://docs.sqlalchemy.org/en/14/core/tutorial.html#using-textual-sql](https://docs.sqlalchemy.org/en/14/core/tutorial.html#using-textual-sql) + +### 2. 코드 삽입 +#### 가. 개요 + +![코드 삽입 공격 개요](figures/python/code-injection_05.png) + +공격자가 소프트웨어의 의도된 동작을 변경하도록 임의 코드를 삽입해 소프트웨어가 비정상적으로 동작하도록 +하는 보안약점을 말한다. 코드 삽입은 프로그래밍 언어 자체의 기능에 한해 이뤄진다는 점에서 운영체제 명령어 +삽입과 다르다. 프로그램에서 사용자의 입력값 내에 코드가 포함되는 것을 허용할 경우 공격자는 개발자가 의도 +하지 않은 코드를 실행해 권한을 탈취하거나 인증 우회, 시스템 명령어 실행 등을 할 수 있다. +파이썬에서 코드 삽입 공격을 유발할 수 있는 함수로는 eval(), exec() 등이 있다. 해당 함수의 인자를 면밀히 +검증하지 않는 경우 공격자가 전달한 코드가 그대로 실행될 수 있다. +#### 나. 안전한 코딩기법 +동적코드를 실행할 수 있는 함수를 사용하지 않는다. 필요 시, 실행 가능한 동적 코드를 입력값으로 받지 +않도록 외부 입력값에 대해 화이트리스트 기반 검증을 수행해야 한다. 유효한 문자만 포함하도록 동적 코드에 +사용되는 사용자 입력값을 필터링 하는 방법도 있다. +#### 다. 코드예제 +**가) eval()함수 사용 예제** +다음은 안전하지 않은 코드로 eval()을 사용해 사용자로부터 입력받은 값을 실행하여 결과를 반환 하는 예제다. +외부로부터 입력 받은 값을 아무런 검증 없이 eval() 함수의 인자로 사용하고 있다(line 10). + +외부 입력값을 검증 없이 사용할 경우 공격자는 파이썬 코드를 통해 악성 기능 실행을 위한 라이브러리 로드 +및 원격 대화형 쉘 등을 실행할 수도 있다. 예를 들어 공격자가 다음과 같은 코드를 입력할 경우 20초 동안 +응용 프로그램이 sleep 상태에 빠질 수 있다. +예시) “compile(‘for x in range(1):\n import time\n time.sleep(20)’,’a’,’single’)” + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +def route(request): + # 외부에서 입력받은 값을 검증 없이 사용하면 안전하지 않다 + message = request.POST.get('message', '') + + # 외부 입력값을 검증 없이 eval 함수에 전달할 경우 의도하지 않은 코드가 + # 실행될 수 있어 위험하다 + ret = eval(message) + return render(request, '/success.html', {'data':ret}) +``` + +다음은 안전한 코드로 변환한 예제를 보여 준다. 외부 입력값 내에 포함된 (파이썬 코드를 실행할 수 있는) +특수 문자 등을 필터링 하는 사전 검증 코드를 추가하면 코드 삽입 공격 위험을 완화할 수 있다. 아래 코드는 +입력 받은 외부 입력값(line 4)을 eval() 함수의 인자 값으로 사용하기 전에 입력값이 영문과 숫자만으로 입력 +되었는지 검증 후(line 9) 사용하도록 하고 있다. + +**안전한 코드** + +```python +from django.shortcuts import render +def route(request): + message = request.POST.get('message', '') + # 사용자 입력을 영문, 숫자로 제한하며, 만약 입력값 내에 특수문자가 포함되어 + # 있을 경우 에러 메시지를 반환 한다 + if message.isalnum(): + ret = eval(message) + return render(request, '/success.html', {'data':ret}) + + return render(request, '/error.html') +``` + +파이썬은 다양한 String 메소드를 제공하고 있다. 필요한 경우 적절한 메소드를 사용해 외부 입력값에 대한 +검증을 수행해야 한다. 아래는 파이썬에서 제공하는 입력값 검증용 String 메소드 예시를 보여 준다. +-str.isalpha() : 문자열 내의 모든 문자가 알파벳이고, 적어도 하나의 문자가 존재하는 경우 True를 반환 +-str.isdecimal() : 문자열 내의 모든 문자가 십진수 문자이고, 적어도 하나의 문자가 존재하는 경우 True를 반환 +-str.isdigit() : 문자열 내의 모든 문자가 숫자이고, 적어도 하나의 문자가 존재하는 경우 True를 반환, +십진수 문자와 호환되는 위 첨자 숫자와 같은 숫자도 포함. ex) ‘52’ 는 True를 반환 +입력값 검증 시 외부 입력값이 특정 형식을 따라야 하는 경우 정규 표현식을 이용해 검증을 할 수 있다. +파이썬에서는 re 라이브러리를 사용해 정규식 기반 검증이 가능하다. 예를 들어 이메일 형식의 입력만 허용하고 +싶은 경우 다음과 같은 정규식을 사용하면 된다. +ex) prog = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+') +**나) exec()함수 사용 예제** +다음은 exec() 함수를 사용한 안전하지 않은 코드 예제를 보여 준다. 외부 입력값을 검증 없이 exec 함수의 +인자로 사용하고 있다(line 9). 이렇게 되면 중요 데이터 탈취 및 서버의 권한 탈취, 액세스 거부, 심지어 완전한 +호스트 탈취로도 이어질 수 있다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + # 사용자에게 전달받은 함수명을 검증하지 않고 실행 + # 입력값으로 “__import__(‘platform’).system()” 등을 입력 시 + # 시스템 정보 노출 위험이 있다 + exec('{}()'.format(function_name)) + + return render(request, '/success.html') +``` + +다음은 위 코드를 안전하게 변환한 예제다. 우선 외부로부터 입력 받은 문자열 내부에서 발견된 라이브러리 +이름이 사전에 정의한 화이트리스트에 포함되는지 확인하고 리스트에 없는 경우엔 에러 페이지를 반환한다. + +**안전한 코드** + +```python +from django.shortcuts import render +WHITE_LIST = ['get_friends_list', 'get_address', 'get_phone_number'] +def request_rest_api(request): + function_name = request.POST.get('function_name', '') + # 사용 가능한 함수를 화이트리스트 목록 내의 함수로 제한 + if function_name in WHITE_LIST: + exec('{}()'.format(function_name)) + return render(request, '/success.html') + + return render(request, '/error.html', {'error':'허용되지 않은 함수입니다.'}) +``` + +#### 라. 참고자료 +- CWE-94: Improper Control of Generation of Code ('Code Injection'), MITRE, +- [https://cwe.mitre.org/data/definitions/94.html](https://cwe.mitre.org/data/definitions/94.html) +- CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection'), MITRE, +- [https://cwe.mitre.org/data/definitions/95.html](https://cwe.mitre.org/data/definitions/95.html) +- Code Injection, OWASP, +- [https://owasp.org/www-community/attacks/Code_Injection](https://owasp.org/www-community/attacks/Code_Injection) +- Python Built-in Functions - eval(), exec(), compile(), Python Software Foundation, +- [https://docs.python.org/3/library/functions.html#eval](https://docs.python.org/3/library/functions.html#eval) +- [https://docs.python.org/3/library/functions.html#exec](https://docs.python.org/3/library/functions.html#exec) +- [https://docs.python.org/3/library/functions.html#compile](https://docs.python.org/3/library/functions.html#compile) +- Python Built-in Types – isalnum(), Python Software Foundation, +- [https://docs.python.org/3/library/stdtypes.html](https://docs.python.org/3/library/stdtypes.html) +- Reqular expression operations, Python Software Foundation, +- [https://docs.python.org/3/library/re.html#module-re](https://docs.python.org/3/library/re.html#module-re) + +### 3. 경로 조작 및 자원 삽입 +#### 가. 개요 + +![경로 조작 및 자원 삽입 개요](figures/python/path-traversal_06.png) + +검증되지 않은 외부 입력값을 통해 파일 및 서버 등 시스템 자원(파일, 소켓의 포트 등)에 대한 접근 혹은 +식별을 허용할 경우 입력값 조작으로 시스템이 보호하는 자원에 임의로 접근할 수 있는 보안약점이다. 경로조작 +및 자원삽입 약점을 이용해 공격자는 자원 수정·삭제, 시스템 정보누출, 시스템 자원 간 충돌로 인한 서비스 +장애 등을 유발시킬 수 있다. 또한 경로 조작 및 자원 삽입을 통해서 공격자가 허용되지 않은 권한을 획득해 +설정 파일을 변경하거나 실행시킬 수 있다. +파이썬에서는 subprocess.popen()과 같이 프로세스를 여는 함수, os.pipe()처럼 파이프를 여는 함수, +socket 연결 등에서 외부 입력값을 검증 없이 사용할 경우 경로 조작 및 자원 삽입의 취약점이 발생할 수 있다. +#### 나. 안전한 코딩기법 +외부로부터 받은 입력값을 자원(파일, 소켓의 포트 등)의 식별자로 사용하는 경우 적절한 검증을 거치도록 +하거나 사전에 정의된 리스트에 포함된 식별자만 사용하도록 해야 한다. 특히 외부의 입력이 파일명인 경우에는 +필터를 적용해 경로순회(directory traversal) 공격의 위험이 있는 문자( /, \, .. 등)를 제거해야 한다. +#### 다. 코드예제 +**가) 경로 조작 예제** +다음은 외부 입력값으로 파일 경로 등을 입력받아 파일을 여는 예시를 보여 준다. 만약 공격자가 +‘../../../../etc/passwd’ 와 같은 값을 전달하면 사용자 계정 및 패스워드 정보가 담긴 파일의 내용이 클라이언트 +측에 표시되어 의도치 않은 시스템 정보노출 문제가 발생한다. + +**안전하지 않은 코드** + +```python +import os +from django.shortcuts import render +def get_info(request): + # 외부 입력값으로부터 파일명을 입력 받는다 + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error':'파일을 열 수 없습니다.'}) + # 입력값을 검증 없이 파일 처리에 사용했다 + with open(request_file) as f: + data = f.read() + + return render(request, '/success.html', {'data':data}) +``` + +외부 입력값에서 경로 조작 문자열 ( /, \, .. 등)을 제거한 후 파일의 경로 설정에 사용하면 코드를 안전하게 +만들 수 있다. replace 함수 외에도 re.sub, filter 함수를 사용해 특수문자를 필터링 하는 것도 가능하다. + +**안전한 코드** + +```python +import os +from django.shortcuts import render +def get_info(request): + request_file = request.POST.get('request_file') + (filename, file_ext) = os.path.splitext(request_file) + file_ext = file_ext.lower() + # 외부 입력값으로 받은 파일 이름은 검증하여 사용한다. + if file_ext not in ['.txt', '.csv']: + return render(request, '/error.html', {'error':'파일을 열수 없습니다.'}) + # 파일 명에서 경로 조작 문자열을 필터링 한다. + filename = filename.replace('.', '') + filename = filename.replace('/', '') + filename = filename.replace('\\', '') +``` + +**안전한 코드** + +```python + try: + with open(filename + file_ext) as f: + data = f.read() + except: + return render( + request, "/error.html", {"error": "파일이 존재하지 않거나 열 수 없는 파일입니다."} + ) + return render(request, '/success.html', {'data':data}) +``` + +**나) 자원 삽입 예제** +다음은 안전하지 않은 코드로, 외부 입력을 소켓 포트 번호로 그대로 사용하고 있다. 외부 입력값을 +검증 없이 사용할 경우 기존 자원과의 충돌로 의도치 않은 에러가 발생할 수 있다. + +**안전하지 않은 코드** + +```python +import socket +from django.shortcuts import render +def get_info(request): + port = int(request.POST.get('port')) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + # 외부로부터 입력받은 검증되지 않은 포트 번호를 이용하여 + # 소켓을 바인딩하여 사용하고 있어 안전하지 않다 + s.bind(('127.0.0.1', port)) + ... + return render(request, '/success.html') + return render(request, '/error.html', {'error':'소켓연결 실패'}) +``` + +다음은 안전한 예제를 보여 준다. 내부 자원에 접근 시 외부에서 입력 받은 값을 포트 번호와 같은 식별자로 +그대로 사용하는 것은 바람직하지 않으며, 꼭 필요한 경우엔 허용 가능한 목록을 설정한 후 목록 내에 포함된 +포트만 할당되도록 코드를 작성해야 한다. + +**안전한 코드** + +```python +import socket +from django.shortcuts import render +ALLOW_PORT = [4000, 6000, 9000] +def get_info(request): + port = int(request.POST.get('port')) + # 사용 가능한 포트 번호를 화이트리스트 내의 포트로 제한 + if port not in ALLOW_PORT: + return render(request, '/error.html', {'error':'소켓연결 실패'}) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(('127.0.0.1', port)) + ...... + return render(request, '/success.html') +``` + +#### 라. 참고자료 +- CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal'), MITRE, +- [https://cwe.mitre.org/data/definitions/22.html](https://cwe.mitre.org/data/definitions/22.html) +- CWE-99: Improper Control of Resource Identifiers ('Resource Injection'), MITRE, +- [https://cwe.mitre.org/data/definitions/99.html](https://cwe.mitre.org/data/definitions/99.html) +- Path Traversal, OWASP, +- [https://owasp.org/www-community/attacks/Path_Traversal](https://owasp.org/www-community/attacks/Path_Traversal) +- Resource Injection, OWASP, +- [https://owasp.org/www-community/attacks/Resource_Injection](https://owasp.org/www-community/attacks/Resource_Injection) +- File Uploads, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/http/file-uploads/](https://docs.djangoproject.com/en/3.2/topics/http/file-uploads/) +- HTML Helpers, Werkzeug, +- [https://werkzeug.palletsprojects.com/en/2.0.x/utils/#module-werkzeug.utils](https://werkzeug.palletsprojects.com/en/2.0.x/utils/#module-werkzeug.utils) + +### 4. 크로스사이트 스크립트(XSS) +#### 가. 개요 + +![크로스사이트 스크립트 공격 개요](figures/python/xss_07.png) + +![크로스사이트 스크립트 Reflected XSS](figures/python/xss_08.png) + +![크로스사이트 스크립트 Stored XSS](figures/python/xss_09.png) + +![크로스사이트 스크립트 DOM-based XSS](figures/python/xss_10.png) + +크로스사이트 스크립트 공격(Cross-site scripting Attacks)은 웹사이트에 악성 코드를 삽입하는 공격 방법 +이다. 공격자는 대상 웹 응용프로그램의 결함을 이용해 악성코드(일반적으로 클라이언트 측 JavaScript 사용)를 +사용자에게 보낸다. XSS공격은 일반적으로 애플리케이션 호스트 자체보다 사용자를 목표로 삼는다. +XSS는 공격자가 웹 응용프로그램을 속여 브라우저에서 실행될 수 있는 형식의 데이터(코드)를 다른 사용자 +에게 전달할 때 발생한다. 공격자가 임의로 구성한 기본 웹 코드 외에도 악성코드 다운로드, 플러그인 또는 +미디어 콘텐츠를 이용할 수도 있다. 사용자가 폼 양식에 입력한 데이터 또는 서버에서 클라이언트 단말(브라우저) +전달된 데이터가 적절한 검증 없이 사용자에게 표시되도록 허용되는 경우 발생한다. +XSS공격에는 크게 세 가지 유형의 공격방법이 있다. +-유형 1 : Reflective XSS (or Non-persistent XSS) + +- Reflective XSS는 공격 코드를 사용자의 HTTP 요청에 삽입한 후, 해당 공격 코드를 서버 응답 내용에 +그대로 반사 (Reflected)시켜 브라우저에서 실행하는 공격기법이다. Reflective XSS 공격을 수행하려면 +사용자로 하여금 공격자가 만든 서버로 데이터를 보내도록 해야 한다. 이 방법은 보통 악의적으로 제작된 +링크를 사용자가 클릭하도록 유도하는 방식을 수반한다. 공격자는 피해자가 취약한 사이트를 참조하는 +URL을 방문하도록 유도하고, 피해자가 링크를 방문하면 스크립트가 피해자의 브라우저에서 자동으로 실행 +된다. 대부분의 경우 Reflective XSS 공격 메커니즘은 공개 게시판, 피싱(Phishing) 이메일, 단축 URL +또는 실제와 유사한 URL을 사용한다. +-유형 2 : Persistent XSS (or Stored XSS) +- Persistent XSS는 신뢰할 수 없거나 확인되지 않은 사용자 입력(코드)이 서버에 저장되고, 이 데이터가 +다른 사용자들에게 전달될 때 발생한다. Persistent XSS는 게시글 및 댓글 또는 방문자 로그 기능에서 +발생할 수 있다. 해당 기능을 통해 공격자의 악성 콘텐츠를 다른 사용자들이 열람할 수 있다. 소셜 미디어 +사이트 및 회원 그룹에서 흔히 볼 수 있는 것과 같이 공개적으로 표시되는 프로필 페이지는 Persistent +XSS의 대표적인 공격 대상 중 하나다. 공격자는 프로필 입력 폼에 악성 스크립트를 주입해 다른 사용자가 +프로필을 방문하면 브라우저에서 자동으로 코드가 실행되도록 할 수 있다. +-유형 3 : DOM XSS (or Client-Side XSS) +- DOM XSS은 웹 페이지에 있는 사용자 입력값을 적절하게 처리하기 위한 JavaScript의 검증 로직을 무효화 +하는 것을 목표로 한다. 공격 스크립트가 포함된 악성 URL을 통해 전달된다는 관점에서 Reflective XSS와 +유사하다고 볼 수 있다. 그러나 신뢰할 수 있는 사이트의 HTTP 응답에 페이로드를 포함하는 대신 DOM +또는 문서 개체 모델을 수정해 브라우저와 독립적인 공격을 실행한다는 점에서 차이가 있다. + +- 공격자는 DOM XSS 공격을 통해 세션 및 개인 정보를 포함한 쿠키 데이터를 피해자의 컴퓨터에서 공격자 +시스템으로 전송할 수 있다. 이 정보를 사용해 특정 웹사이트에 악의적인 요청을 보낼 수 있으며, 피해자가 +해당 사이트를 관리 할 수 있는 관리자 권한이 있는 경우 심각한 위협을 초래할 수도 있다. 또한 신뢰할 +수 있는 웹 사이트를 모방하고 피해자가 암호를 입력하도록 속여 공격자가 해당 웹 사이트에서 피해자의 +계정을 손상시키는 피싱(Phishing) 공격으로도 이어질 수 있다. +- 파이썬에서 가장 많이 사용하고 있는 Django 프레임워크와 Flask 프레임워크에서는 각각 Django 템플릿과 +Jinja2 템플릿을 사용할 시 XSS 공격에 악용될 수 있는 위험한 HTML 문자들을 HTML 특수문자 (HTML +Entities)로 치환하는 기능을 제공하고 있어 프레임워크에서 제공하는 템플릿을 사용하는 경우 위협을 최소화 +할 수 있다. +#### 나. 안전한 코딩기법 +외부 입력값 또는 출력값에 스크립트가 삽입되지 못하도록 문자열 치환 함수를 사용하여 &<>*‘/() 등을 +& < > " ' / ( )로 치환하거나, html라이브러리의 escape()를 +사용해 문자열을 변환해야 한다. HTML 태그를 허용해야 하는 게시판에서는 허용할 HTML 태그들을 화이트 +리스트로 만들어 해당 태그만 지원하도록 한다. +파이썬에서 가장 많이 사용하는 프레임워크인 Django, Flask 등을 사용하는 경우 외부 입력값에 악의적인 +스크립트가 삽입되지 못하도록 프레임워크 자체에서 XSS 공격에 사용될 수 있는 문자를 HTML 특수문자 +(HTML Entities)로 치환하여 응답 페이지를 생성하므로 XSS 공격으로부터 안전하다. + +프레임워크 자체에서 XSS 공격으로부터 보호해 주는 기능이 있더라도 완전하지 않은 경우도 있고 개발자의 +실수로 보호기능이 무효화 되는 경우가 있으므로 주의를 기울여야 한다. +#### 다. 코드예제 +**가) Django 예제** +Django 프레임워크는 XSS 공격에 대한 보안기능을 내장하고 있지만 유의해야 할 사항이 몇 가지 있다. +Django의 “safestring(django.utils.safestring)”의 기능을 오용할 경우 Django의 XSS 공격에 대한 보호 +정책이 무력화 될 수 있다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +from django.utils.safestring import mark_safe +def profile_link(request): + # 외부 입력값을 검증 없이 HTML 태그 생성의 인자로 사용 + profile_url = request.POST.get('profile_url') + profile_name = requst.POST.get('profile_name') + + object_link = '{}'.format(profile_url, profile_name) + # mark_safe함수는 Django의 XSS escape 정책을 따르지 않는다 + object_link = mark_safe(object_link) + + return render(request, 'my_profile.html',{'object_link':object_link}) +``` + +Django 프레임워크는 템플릿 생성 시 HTML에서 위험한 것으로 간주되는 특수 문자(“<”, “>”, “‘”, “””, +“&”)를 모두 HTML 엔티티로 치환 하지만 mark_safe를 사용할 경우 이 정책을 따르지 않는다. 따라서 +mark_safe 함수를 사용할 경우에는 각별한 주의가 필요하고 신뢰할 수 없는 데이터에 대해서는 mark_safe +함수를 사용하지 않아야 한다. + +**안전한 코드** + +```python +from django.shortcuts import render +def profile_link(request): + # 외부 입력값을 검증 없이 HTML 태그 생성의 인자로 사용 + profile_url = request.POST.get('profile_url') + profile_name = requst.POST.get('profile_name') + + object_link = '{}'.format(profile_url, profile_name) + # 신뢰할 수 없는 데이터에 대해서는 mark_safe 함수를 사용해선 안 된다 + + return render(request, 'my_profile.html',{'object_link':object_link}) +``` + +다음은 또 다른 Django 프레임워크 템플릿 예제를 보여 준다. autoescape 블록 사용 시 설정값을 off로 +할 경우와 개별 변수에 대해서 safe 필터를 사용할 경우 크로스사이트 스크립트 공격에 노출될 수 있다. + +**안전하지 않은 코드** + +```html + + + +
+ {% autoescape off %} + + {{ content }} + {% endautoescape %} +
+
+ + {{ content | safe }} +
+ + +``` + +신뢰할 수 없는 입력값 또는 동적 데이터에 대해서는 autoescape 옵션 값을 on으로 설정해야 하며, safe +필터를 부득이 하게 사용할 경우에는 추가적인 보안대책이 필요하다. + +**안전한 코드** + +```html + + + +
+ {% autoescape on %} + + {{ content }} + {% endautoescape %} +
+
+ + {{ content }} +
+ + +``` + +autoescape 블록을 사용할 경우 많은 주의를 기울여야 한다. autoescape 옵션값을 off로 설정한 템플릿 +페이지를 include 또는 extends하는 템플릿까지 영향이 확장된다. 공통적으로 사용하는 템플릿페이지에 off로 +설정할 경우 템플릿 페이지가 XSS 공격에 노출될 수 있다. +**나) Flask에서의 예제** +사용자의 요청에 포함된 값, DB에 저장된 값 또는 내부의 연산을 통해서 생성된 값을 포함한 데이터를 동적 +웹페이지 생성에 사용하는 경우 XSS 공격이 발생할 가능성이 있어 위험하다. 아래 예제는 Flask 프레임워크를 +사용한 안전하지 않은 사례를 보여 준다. + +**안전하지 않은 코드** + +```python +from flask import Flask, request, render_template +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + # 사용자의 입력을 아무런 검증 또는 치환 없이 동적 웹페이지에 사용하고 있어 + # XSS 공격이 발생할 수 있다 + return render_template('search.html', search_keyword=search_keyword) +``` + +동적 웹 페이지 생성에 사용하는 데이터를 HTML 엔티티 코드 (Entity Code)로 치환하여 안전하게 표현해야 +한다. html.escape 메소드는 문자열의 &, < 및 > 특수문자를 HTML에서 안전한 값으로 변환한다. quote +옵션 값이 True이면 문자 (“)와 (‘)도 변환된다. 에서처럼 따옴표로 구분된 HTML 속성 +(attribute) 값이 들어간 문자열을 포함할 경우에도 사용할 수 있다. + +**안전한 코드** + +```python +import html +from flask import Flask, request, render_template +@app.route('/search', methods=['POST']) +def search(): + search_keyword = request.form.get('search_keyword') + # 동적 웹페이지 생성에 사용되는 데이터는 + # HTML 엔티티코드로 치환하여 표현해야 한다 + escape_keyword = html.escape(search_keyword) + return render_template('search.html', search_keyword=escape_keyword) +``` + +#### 라. 참고자료 +- CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'), MITRE, +- [https://cwe.mitre.org/data/definitions/79.html](https://cwe.mitre.org/data/definitions/79.html) +- Cross Site Scripting (XSS), OWASP, +- [https://owasp.org/www-community/attacks/xss/](https://owasp.org/www-community/attacks/xss/) +- html - HyperText Markup Language support, Python Software Foundation, +- [https://docs.python.org/3/library/html.html](https://docs.python.org/3/library/html.html) +- Flask Security Considerations Cross-Site Scripting (XSS), Flask docs, +- [https://flask-docs-kr.readthedocs.io/ko/latest/security.html](https://flask-docs-kr.readthedocs.io/ko/latest/security.html) +- Django Security in Django Cross site scripting (XSS) protection, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/security/](https://docs.djangoproject.com/en/3.2/topics/security/) + +### 5. 운영체제 명령어 삽입 +#### 가. 개요 + +![운영체제 명령어 삽입 공격 개요](figures/python/os-command-injection_11.png) + +적절한 검증 절차를 거치지 않은 사용자 입력값이 운영체제 명령어의 일부 또는 전부로 구성되어 실행되는 +경우 의도하지 않은 시스템 명령어가 실행돼 부적절하게 권한이 변경되거나 시스템 동작 및 운영에 악영향을 +미칠 수 있다. +명령어 라인의 파라미터나 스트림 입력 등 외부 입력을 사용해 시스템 명령어를 생성 하는 프로그램을 많이 +찾아볼 수 있다. 이 경우 프로그램 외부로부터 받은 입력 문자열은 기본적으로 신뢰할 수 없기 때문에 적절한 +처리를 해주지 않으면 공격으로 이어질 수 있다. +파이썬에서 eval() 함수와 exec() 함수는 내부에서 문자열을 실행하기에 편리하지만, String 형식의 표현된 +식을 인수로 받아 반환하는 eval() 함수와 인수로 받은 문자열을 실행하는 exec()를 같이 사용하면 여러 변수들에 +동적으로 값을 할당해 사용할 수 있어 명령어 삽입(Command Injection) 공격에 취약하다. +#### 나. 안전한 코딩기법 +외부 입력값 내에 시스템 명령어를 포함하는 경우 |, ;, &, :, >, <, `(backtick), \, ! 과 같이 멀티라인 및 +리다이렉트 문자 등을 필터링 하고 명령을 수행할 파일명과 옵션을 제한해 인자로만 사용될 수 있도록 해야 +한다. 외부 입력에 따라 명령어를 생성하거나 선택이 필요한 경우에는 명령어 생성에 필요한 값들을 미리 지정해 +놓고 사용해야 한다. + +#### 다. 코드예제 +다음 예제는 os.system을 이용해 외부로부터 받은 입력값을 통해 프로그램을 실행하며, 외부에서 전달되는 +인자값은 명령어의 생성에 사용된다. 하지만 해당 프로그램에서 실행할 프로그램을 제한하지 않고 있기 때문에 +외부의 공격자는 원하는 모든 프로그램을 실행할 수 있다. + +**안전하지 않은 코드** + +```python +import os +from django.shortcuts import render +def execute_command(request): + app_name_string = request.POST.get('app_name','') + # 입력 파라미터를 제한하지 않아 외부 입력값으로 전달된 + # 모든 프로그램이 실행될 수 있음 + os.system(app_name_string) + return render(request, '/success.html') +``` + +외부에서 입력받은 값이 명령어의 인자로 사용되지 않고 명령어 그 자체로 사용될 경우에는 사전에 화이트 +리스트 파라미터 배열을 정의한 후 외부의 입력에 따라 적절한 파라미터를 선택하도록 하여 외부의 부적절한 +입력이 명령어로 사용되는 것을 금지해야 한다. + +**안전한 코드** + +```python +import os +from django.shortcuts import render +ALLOW_PROGRAM = ['notepad', 'calc'] +def execute_command(request): + app_name_string = request.POST.get('app_name','') + + # 입력받은 파라미터가 허용된 시스템 명령어 목록에 포함되는지 검사 + if app_name_string not in ALLOW_PROGRAM: + return render(request, '/error.html', {'error':'허용되지 않은 프로그램입니다.'}) + os.system(app_name_string) + return render(request, '/success.html') +``` + +다음은 subprocess() 함수를 사용해 별도의 프로세스로 응용 프로그램을 실행하는 안전하지 않은 예제다. +외부 입력값으로 받은 파라미터를 별도의 검증 없이 subprocess의 인자 값으로 사용하고 있다. + +**안전하지 않은 코드** + +```python +import subprocess +from django.shortcuts import render +def execute_command(request): + date = request.POST.get('date','') + # 입력받은 파라미터를 제한하지 않아 전달된 모든 프로그램이 실행될 수 있음 + cmd_str = “cmd /c backuplog.bat ” + date + subprocess.run(cmd_str, shell=True) + return render(request, '/success.html') +``` + +운영체제 명령어 실행 시에는 외부에서 들어오는 값에 의하여 멀티라인을 지원하는 특수문자(|, ;, &, :, `, +\, !)나 파일 리다이렉트 특수문자( >, >> )등을 제거하여 원하지 않는 운영체제 명령어가 실행될 수 없도록 +필터링을 수행한다. +명령어 라인을 구문 분석하고 escape 하는 기능을 제공하는 모듈인 shlex 모듈을 사용해 필터링을 수행할 +수 있다. subprocess의 옵션 값 중 shell를 True로 설정할 경우 중간 프로세스에 의해 명령이 실행되고 파일 +이름, 와일드카드(*), 환경변수 확장 등의 쉘 기능을 검증 없이 실행하게 되므로 shell의 옵션은 삭제해야 한다 +(기본값은 False). + +**안전한 코드** + +```python +import subprocess +from django.shortcuts import render +def execute_command(request): + date = request.POST.get('date','') + # 명령어를 추가로 실행 또는 또 다른 명령이 실행될 수 있는 키워드에 + # 대한 예외처리 + for word in ['|', ';', '&', ':', '>', '<', '`', '\\', '!']: + date = date.replace(word, “”) + # re.sub 함수를 사용해 특수문자를 제거하는 방법도 있다 + # date = re.sub('[|;&:><`\\\!]', '', date) + # shell=True 옵션은 제거 하고 명령과 인자를 배열로 입력 + subprocess.run(["cmd", "/c", "backuplog.bat", date]) + return render(request, '/success.html') +``` + +#### 라. 참고자료 +- CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection'), MITRE, +- [https://cwe.mitre.org/data/definitions/78.html](https://cwe.mitre.org/data/definitions/78.html) +- Command Injection, OWASP +- [https://owasp.org/www-community/attacks/Command_Injection](https://owasp.org/www-community/attacks/Command_Injection) +- OS Command Injection Defense Cheat Sheet, OWASP +- [https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html) +- Miscellaneous operating system interfaces - os.system(), Python Software Foundation +- [https://docs.python.org/3.10/library/os.html?highlight=os%20system#module-os](https://docs.python.org/3.10/library/os.html?highlight=os%20system#module-os) +- Subprocess management, Python Software Foundation, +- [https://docs.python.org/ko/3/library/subprocess.html#security-considerations](https://docs.python.org/ko/3/library/subprocess.html#security-considerations) +- Regular expression operations, Python Software Foundation, +- [https://docs.python.org/3/library/re.html](https://docs.python.org/3/library/re.html) + +### 6. 위험한 형식 파일 업로드 +#### 가. 개요 + +![위험한 형식 파일 업로드 개요](figures/python/file-upload_12.png) + +서버 측에서 실행 가능한 스크립트 파일(asp, jsp, php, sh 파일 등)이 업로드 가능하고 이 파일을 공격자가 +웹을 통해 직접 실행시킬 수 있는 경우 시스템 내부 명령어를 실행하거나 외부와 연결해 시스템을 제어할 수 +있는 보안약점이다. +공격자가 실행 가능한 파일을 서버에 업로드 하면 파이썬에서 String 형식으로 표현된 표현식을 인수로 받아 +반환하는 eval() 함수와 인수로 받은 문자열을 실행하는 exec()를 같이 사용해 여러 변수들을 동적으로 값을 +할당받아 실행될 수 있어 웹쉘(Web Shell) 공격에 취약하다. +#### 나. 안전한 코딩기법 +파일 업로드 공격을 방지하기 위해서 특정 파일 유형만 허용하도록 화이트리스트 방식으로 파일 유형을 제한 +해야 한다. 이때 파일의 확장자 및 업로드 된 파일의 Content-Type도 함께 확인해야 한다. 또한 파일 크기 +및 파일 개수를 제한하여 시스템 자원 고갈 등으로 서비스 거부 공격이 발생하지 않도록 제한해야 한다. 업로드 +된 파일을 웹 루트 폴더 외부에 저장해 공격자가 URL을 통해 파일을 실행할 수 없도록 해야 하며, 가능하면 +업로드 된 파일의 이름은 공격자가 추측할 수 없는 무작위한 이름으로 변경 후 저장하는 것이 안전하다. 또한 +업로드 된 파일을 저장할 경우에는 최소 권한만 부여하는 것이 안전하고 실행 여부를 확인하여 실행 권한을 +삭제해야 한다. + +#### 다. 코드예제 +업로드 대상 파일 개수, 크기, 확장자 등의 유효성 검사를 하지 않고 파일 시스템에 그대로 저장할 경우 +공격자에 의해 악성코드, 쉘코드 등 위험한 형식의 파일이 시스템에 업로드 될 수 있다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage +def file_upload(request): + if request.FILES['upload_file']: + # 사용자가 업로드하는 파일을 검증 없이 저장하고 있어 + # 안전하지 않다 + upload_file = request.FILES['upload_file'] + fs = FileSystemStorage(location='media/screenshot', base_url='media/screenshot') + # 업로드 하는 파일에 대한 크기, 개수, 확장자 등을 검증하지 않음 + filename = fs.save(upload_file.name, upload_file) + return render(request, '/success.html', {'filename':filename}) + return render(request, '/error.html', {'error':'파일 업로드 실패'}) +``` + +아래 코드는 업로드 하는 파일의 개수, 크기, 파일 확장자 등을 검사해 업로드를 제한하고 있다. 파일 타입 +확인은 MIME 타입을 확인하는 과정으로 파일 이름에서 확장자만 검사할 경우 변조된 확장자를 통해 업로드 +제한을 회피할 수 있어 파일자체의 시그니처를 확인하는 과정을 보여 준다. + +**안전한 코드** + +```python +import os +from django.shortcuts import render +from django.core.files.storage import FileSystemStorage +# 업로드 하는 파일 개수, 크기, 확장자 제한 +FILE_COUNT_LIMIT = 5 +# 업로드 하는 파일의 최대 사이즈 제한 예 ) 5MB - 5*1024*1024 +FILE_SIZE_LIMIT = 5242880 +# 허용하는 확장자는 화이트리스트로 관리한다. +WHITE_LIST_EXT = [ + '.jpg', + '.jpeg' +] +``` + +**안전한 코드** + +```python +def file_upload(request): + # 파일 개수 제한 + if len(request.FILES) == 0 or len(request.FILES) > FILE_COUNT_LIMIT: + return render(request, '/error.html', {'error': '파일 개수 초과'}) + for filename, upload_file in request.FILES.items(): + # 파일 타입 체크 + if upload_file.content_type != 'image/jpeg': + return render(request, '/error.html', {'error': '파일 타입 오류'}) + # 파일 크기 제한 + if upload_file.size > FILE_SIZE_LIMIT: + return render(request, '/error.html', {'error': '파일사이즈 오류'}) + # 파일 확장자 검사 + file_name, file_ext = os.path.splitext(upload_file.name) + if file_ext.lower() not in WHITE_LIST_EXT: + return render(request, '/error.html', {'error': '파일 타입 오류'}) + fs = FileSystemStorage(location='media/screenshot', base_url = 'media/screenshot') + for upload_file in request.FILES.values(): + filename = fs.save(upload_file.name, upload_file) + filename_list.append(filename) + return render(request, "/success.html", {"filename_list": filename_list}) +``` + +#### 라. 참고자료 +- CWE-434: Unrestricted Upload of File with Dangerous Type, MITRE, +- [https://cwe.mitre.org/data/definitions/434.html](https://cwe.mitre.org/data/definitions/434.html) +- Unrestricted File Upload, OWASP, +- [https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload](https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload) +- User-uploaded content, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/security/#user-uploaded-content-security](https://docs.djangoproject.com/en/3.2/topics/security/#user-uploaded-content-security) + +### 7. 신뢰되지 않은 URL주소로 자동접속 연결 +#### 가. 개요 + +![신뢰되지 않은 URL 자동접속 연결 개요](figures/python/open-redirect_13.png) + +사용자가 입력하는 값을 외부 사이트 주소로 사용해 해당 사이트로 자동 접속하는 서버 프로그램은 피싱 +(Phishing) 공격에 노출되는 취약점을 가진다. 클라이언트에서 전송된 URL 주소로 연결하기 때문에 안전하다고 +생각할 수 있으나, 공격자는 정상적인 폼 요청을 변조해 사용자가 위험한 URL로 접속할 수 있도록 공격할 수 있다. +파이썬 프레임워크의 redirect 함수를 사용할 때에도 해당 프레임워크 버전에서 알려진 취약점이 있는지 +확인해야 한다. Flask 프레임워크의 Flask-Security-Too 라이브러리의 경우 get_post_logout_redirect 함수와 +get_post_login_redirect 함수가 4.1.0 이전 버전에서 URL 유효성 검사를 우회하고 사용자를 임의의 URL로 +리다이렉션 할 수 있는 취약점이 존재한다. +#### 나. 안전한 코딩기법 +리다이렉션을 허용하는 모든 URL을 서버 측 화이트리스트로 관리하고 사용자 입력값을 리다이렉션 할 +URL이 존재하는지 검증해야 한다. +만약 사용자 입력값이 화이트리스트로 관리가 불가능하고 리다이렉션 URL의 인자 값으로 사용되어야만 하는 +경우는 모든 리다이렉션에서 프로토콜과 host 정보가 들어가지 않는 상대 URL(relative)을 사용 및 검증해야 +한다. 또는 절대 URL(absoute URL)을 사용할 경우 리다이렉션을 실행하기 전에 사용자 입력 URL이 +https://myhompage.com/ 처럼 서비스하고 있는 URL로 시작하는지를 확인해야 한다. + +#### 다. 코드예제 +다음은 안전하지 않은 예제로 사용자로부터 입력받은 URL 주소를 검증 없이 redirect 함수의 인자로 사용 +하고 있다. 이 경우 사용자가 의도하지 않은 사이트로 접근하도록 하거나 피싱(Phishing)공격에 노출될 수 있다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import redirect +def redirect_url(request): + url_string = request.POST.get('url', '') + # 사용자 입력에 포함된 URL 주소로 리다이렉트 하는 경우 + # 피싱 사이트로 접속되는 등 사용자가 피싱 공격에 노출될 수 있다 + return redirect(url_string) +``` + +다음은 안전한 코드 예제로 사용자로부터 주소를 입력받아 리다이렉트하고 있는 코드로 위험한 도메인이 +포함될 수 있기 때문에 화이트리스트로 사전에 정의된 안전한 웹사이트에 한하여 리다이렉트 할 수 있도록 한다. + +**안전한 코드** + +```python +from django.shortcuts import render, redirect +ALLOW_URL_LIST = [ + '127.0.0.1', + '192.168.0.1', + '192.168.0.100', + 'https://login.myservice.com', + '/notice', +] +def redirect_url(request): + url_string = request.POST.get('url', '') + # 이동할 수 있는 URL 범위를 제한하여 + # 위험한 사이트의 접근을 차단하고 있다 + if url_string not in ALLOW_URL_LIST: + return render(request, '/error.html', {'error':'허용되지 않는 주소입니다.'}) + + return redirect(url_string) +``` + +#### 라. 참고자료 +- CWE-601: URL Redirection to Untrusted Site ('Open Redirect'), MITRE, +- [https://cwe.mitre.org/data/definitions/601.html](https://cwe.mitre.org/data/definitions/601.html) +- Unvalidated Redirects and Forwards Cheat Sheet, OWASP +- [https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) +- Django shortcut functions – redirect, Django Sowftware Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/http/shortcuts/](https://docs.djangoproject.com/en/3.2/topics/http/shortcuts/) +- Redirects and Errors, Flask, +- [https://flask.palletsprojects.com/en/2.0.x/quickstart/#redirects-and-errors](https://flask.palletsprojects.com/en/2.0.x/quickstart/#redirects-and-errors) + +### 8. 부적절한 XML 외부 개체 참조 +#### 가. 개요 + +![부적절한 XML 외부 개체 참조 개요](figures/python/xxe_14.png) + +XML 문서에는 DTD(Document Type Definition)를 포함할 수 있으며 DTD는 XML 엔티티(entitiy)를 +정의한다. 부적절한 XML 외부개체 참조 보안약점은 서버에서 XML 외부 엔티티를 처리할 수 있도록 설정된 +경우에 발생할 수 있다. +취약한 XML parser가 외부값을 참조하는 XML을 처리할 때 공격자가 삽입한 공격 구문이 동작되어 서버 +파일 접근, 불필요한 자원 사용, 인증 우회, 정보 노출 등이 발생할 수 있다. +파이썬에서는 간단한 XML 데이터 구문 분석 및 조작에 사용할 수 있는 기본 XML 파서가 제공된다. 이 파서는 +유효성 검사와 같은 고급 XML 기능은 지원하지 않는다. 기본으로 제공되는 XML 파서는 외부 엔티티를 지원 +하지 않지만 다른 유형의 XML 공격에 취약할 수 있다. 기본으로 제공되는 파서의 기능 외에 더 많은 기능이 +필요한 경우에 lxml과 같은 라이브러리를 사용하게 되는데, 이 라이브러리에서는 기본적으로 외부 엔티티의 +구문 분석이 활성화 되어 있다. +#### 나. 안전한 코딩기법 +로컬 정적 DTD를 사용하도록 설정하고 외부에서 전송된 XML 문서에 포함된 DTD를 완전하게 비활성화해야 +한다. 비활성화를 할 수 없는 경우에는 외부 엔티티 및 외부 문서 유형 선언을 각 파서에 맞는 고유한 방식으로 +비활성화 한다. +외부 라이브러리를 사용할 경우 기본적으로 외부 엔티티에 대한 구문 분석 기능을 제공하는지 확인하고 제공이 +되는 경우 해당 기능을 비활성화 할 수 있는 방법을 확인해 외부 엔티티 구문 분석 기능을 비활성화 한다. + +많이 사용하는 XML 파서의 한 종류인 lxml의 경우 외부 엔티티 구문 분석 옵션인 resolve_entities 옵션을 +비활성화 해야 한다. 또한 외부 문서 조회 시 네트워크 액세스를 방지하는 no_network 옵션이 활성화(True) +되어 있는지도 확인해야 한다. +#### 다. 코드예제 +다음 예제는 XML 소스를 읽어와 분석하는 코드다. 공격자는 아래와 같이 XML 외부 엔티티를 참조하는 +xxe.xml 데이터를 전송하고 이를 파싱할 때 /etc/passwd 파일을 참조할 수 있다. + + + + +]> +&xxe1;&xxe2; + +**안전하지 않은 코드** + +```python +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT +from django.shortcuts import render +from .model import comments +def get_xml(request): + if request.method == “GET”: + data = comments.objects.all() + com = data[0].comment + return render(request, '/xml_view.html', {'com':com}) + elif request.method == “POST”: + parser = make_parser() + # 외부 일반 엔티티를 포함하는 설정을 True로 적용할 경우 취약하다 + parser.setFeature(feature_external_ges, True) + doc = parseString(request.body.decode(‘utf-8’), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == “foo”: + doc.expandNode(node) + text = node.toxml() + comments.objects.filter(id=1).update(comment=text) + return render(request, '/xml_view.html') +``` + +만약 sax 패키지를 사용해 XML을 파싱할 경우 외부 엔티티를 처리하는 방식의 옵션(feature_external_ges)을 +False로 설정해야 한다. + +**안전한 코드** + +```python +from xml.sax import make_parser +from xml.sax.handler import feature_external_ges +from xml.dom.pulldom import parseString, START_ELEMENT +from django.shortcuts import render +from .model import comments +def get_xml(request): + if request.method == “GET”: + data = comments.objects.all() + com = data[0].comment + return render(request, '/xml_view.html', {'com':com}) + elif request.method == “POST”: + parser = make_parser() + parser.setFeature(feature_external_ges, False) + doc = parseString(request.body.decode(‘utf-8’), parser=parser) + for event, node in doc: + if event == START_ELEMENT and node.tagName == “foo”: + doc.expandNode(node) + text = node.toxml() + comments.objects.filter(id=1).update(comment=text); + return render(request, '/xml_view.html') +``` + +#### 라. 참고자료 +- CWE-611: Improper Restriction of XML External Entity Reference, MITRE, +- [https://cwe.mitre.org/data/definitions/611.html](https://cwe.mitre.org/data/definitions/611.html) +- XML External Entity (XXE) Processing, OWASP, +https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_ Processing +- XML External Entity Prevention Cheat Sheet, OWASP, +- [https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html) +- XML vulnerabilities, Python Software Foundation, +https://docs.python.org/3/library/xml.html#xml-vulnerabilities +- lxml API, lxml library, +- [https://lxml.de/api/lxml.etree.XMLParser-class.html](https://lxml.de/api/lxml.etree.XMLParser-class.html) +- PyGoat, OWASP, +- [https://github.com/adeyosemanputra/pygoat](https://github.com/adeyosemanputra/pygoat) + +### 9. XML 삽입 +#### 가. 개요 +검증되지 않은 외부 입력값이 XQuery 또는 XPath 쿼리문을 생성하는 문자열로 사용되어 공격자가 쿼리문의 +구조를 임의로 변경하고 임의의 쿼리를 실행해 허가되지 않은 데이터를 열람하거나 인증절차를 우회할 수 있는 +보안약점이다. +#### 나. 안전한 코딩기법 +XQuery 또는 XPath 쿼리에 사용되는 외부 입력 데이터에 대하여 특수문자 및 쿼리 예약어를 필터링 하고 +인자화된 쿼리문을 지원하는 XQuery를 사용해야 한다. +#### 다. 코드예제 +다음 예제는 파이썬에서 XML 데이터를 처리하기 위한 기본 모듈인 xml.etree.ElementTree를 이용하여 +사용자 정보를 가져오는 예제다. xml.etree.ElementTree 모듈은 제한적인 Xpath 기능을 제공하며 Xpath +표현식을 인자화해서 사용하는 방법을 제공하지 않는다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +from lxml import etree +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + # 검증되지 않은 외부 입력값 user_name을 사용한 안전하지 않은 + # 질의문이 query 변수에 저장 + query = "/collection/users/user[@name='" + user_name + "']/home/text()" + elmts = root.xpath(query) + return render(request, 'parse_xml.html', {'xml_element':elmts}) +``` + +파이썬 3.3 이후 보안상의 이유로 금지된 xml.etree.ElementTree 모듈 대신 lxml 라이브러리를 사용하고 +외부 입력값은 인자화해서 사용한다. + +**안전한 코드** + +```python +from django.shortcuts import render +from lxml import etree +def parse_xml(request): + user_name = request.POST.get('user_name', '') + parser = etree.XMLParser(resolve_entities=False) + tree = etree.parse('user.xml', parser) + root = tree.getroot() + # 외부 입력값을 paramname으로 인자화 해서 사용 + query = '/collection/users/user[@name = $paramname]/home/text()' + elmts = root.xpath(query, paramname=user_name) + return render(request, 'parse_xml.html', {'xml_element':elmts}) +``` + +#### 라. 참고자료 +- CWE-643: Improper Neutralization of Data within XPath Expressions ('XPath Injection'), MITRE, +- [https://cwe.mitre.org/data/definitions/643.html](https://cwe.mitre.org/data/definitions/643.html) +- XPATH Injection, OWASP, +- [https://owasp.org/www-community/attacks/XPATH_Injection](https://owasp.org/www-community/attacks/XPATH_Injection) +- XML vulnerabilities, Python Software Foundation, +- [https://docs.python.org/3/library/xml.html#xml-vulnerabilities](https://docs.python.org/3/library/xml.html#xml-vulnerabilities) + +### 10. LDAP 삽입 +#### 가. 개요 + +![LDAP 삽입 공격 개요](figures/python/ldap-injection_15.png) + +외부 입력값을 적절한 처리 없이 LDAP 쿼리문이나 결과의 일부로 사용하는 경우 LDAP 쿼리문이 실행될 때 +공격자는 LDAP 쿼리문의 내용을 마음대로 변경할 수 있다. 이로 인해 프로세스가 명령을 실행한 컴포넌트와 +동일한 권한(Permission)을 가지고 동작하게 된다. +파이썬에는 파이썬-ldap 및 ldap3라는 두 개의 라이브러리가 있다. ldap3가 python-ldap 보다 더 현대적인 +라이브러리다. ldap3 모듈은 파이썬 2.6부터 모든 파이썬 3 버전에 호환된다. ldap3에서는 좀 더 파이썬적인 +방식으로 LDAP서버와 상호 작용할 수 있는 완전한 기능의 추상화 계층이 포함되어 있다. python-ldap은 +OpenLDAP에서 만든 파이썬2의 패키지로 파이썬3에서는 ldap3 라이브러리를 사용하는 것이 권장된다. +#### 나. 안전한 코딩기법 +다른 삽입 공격들과 마찬가지로 LDAP 삽입에 대한 기본적인 방어 방법은 적절한 유효성 검사이다. +-올바른 인코딩(Encoding) 함수를 사용해 모든 변수 이스케이프(Escape) 처리 +-화이트리스트 방식의 입력값 유효성 검사 +-사용자 패스워드와 같은 민감한 정보가 포함된 필드 인덱싱 +-LDAP 바인딩 계정에 할당된 권한 최소화 + +#### 다. 코드예제 +사용자의 입력을 그대로 LDAP 질의문에 사용하고 있으며 이 경우 권한 상승 등의 공격에 노출될 수 있다. + +**안전하지 않은 코드** + +```python +from ldap3 import Connection, Server, ALL +from django.shortcuts import render +config = { + "bind_dn": "cn=read-only-admin,dc=example,dc=com", + "password": "password", +} +def ldap_query(request): + search_keyword = request.POST.get('search_keyword','') + dn = config['bind_dn'] + password = config['password'] + address = 'ldap.badSoruce.com' + server = Server(address, get_info=ALL) + conn = Connection(server, user=dn, password, auto_bind=True ) + # 사용자 입력을 필터링 하지 않는 경우 공격자의 권한 상승으로 + # 이어질 수 있다 + search_str = '(&(objectclass=%s))' % search_keyword + conn.search( + 'dc=company,dc=com', + search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid'], + ) + return render(request, '/ldap_query_response.html', {'ldap':conn.entries}) +``` + +사용자의 입력 중 LDAP 질의문에 사용될 변수를 이스케이프 하여 질의문 실행 시 공격에 노출되는 것을 +예방할 수 있다. + +**안전한 코드** + +```python +from ldap3 import Connection, Server, ALL +from ldap3.utils.conv import escape_filter_chars +from django.shortcuts import render +config = { + "bind_dn": "cn=read-only-admin,dc=example,dc=com", + "password": "password", +} +def ldap_query(request): + search_keyword = request.POST.get('search_keyword','') + dn = config['bind_dn'] + password = config['password'] + address = 'ldap.goodsource.com' + server = Server(address, get_info=ALL) + conn = Connection(server, dn, password, auto_bind=True ) + # 사용자의 입력에 필터링을 적용하여 공격에 사용될 수 있는 문자를 + # 이스케이프하고 있다 + escpae_keyword = escape_filter_chars(search_keyword) + search_str = '(&(objectclass=%s))' % escpae_keyword + conn.search( + 'dc=company,dc=com', + search_str, + attributes=['sn', 'cn', 'address', 'mail', 'mobile', 'uid'], + ) + return render(request, '/ldap_query_response.html', {'ldap':conn.entries}) +``` + +#### 라. 참고자료 +- CWE-90: Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection'), MITRE, +- [https://cwe.mitre.org/data/definitions/90.html](https://cwe.mitre.org/data/definitions/90.html) +- LDAP Injection Prevention Cheat Sheet, OWASP, +https://cheatsheetseries.owasp.org/cheatsheets/LDAP_Injection_Prevention_Cheat_ Sheet.html +- LDAP filter handling, python-ldap project team +- [https://www.python-ldap.org/en/python-ldap-3.3.0/reference/ldap-filter.html](https://www.python-ldap.org/en/python-ldap-3.3.0/reference/ldap-filter.html) + +### 11. 크로스사이트 요청 위조(CSRF) +#### 가. 개요 + +![크로스사이트 요청 위조 공격 개요](figures/python/csrf_16.png) + +특정 웹사이트에 대해 사용자가 인지하지 못한 상황에서 사용자의 의도와는 무관하게 공격자가 의도한 행위 +(수정, 삭제, 등록 등)를 요청하게 하는 공격을 말한다. 웹 응용프로그램이 사용자로부터 받은 요청이 해당 사용자가 +의도한 대로 작성되고 전송된 것인지 확인하지 않는 경우 발생 가능하다. 특히 사용자가 관리자 권한을 가지는 +경우 사용자 권한관리, 게시물 삭제, 사용자 등록 등 관리자 권한으로만 수행 가능한 기능을 공격자의 의도대로 +실행시킬 수 있게 된다. 공격자는 사용자가 인증한 세션이 특정 동작을 수행해도 계속 유지되어 정상적인 요청과 +비정상적인 요청을 구분하지 못하는 점을 악용한다. +파이썬에서 가장 많이 사용하고 있는 Django 프레임워크와 Flask 프레임워크에서는 각각 CSRF(Cross-Site +Request Forgery) 토큰 기능을 지원하고 있으며, Django는 {% csrf token %} 태그를 이용해 CSRF 토큰 +기능 제공하고 Flask에서는 Flask-WTF 확장 라이브러리를 통해 {{form.csrf_token}} 태그를 이용한 CSRF +토큰 기능을 제공해 태그를 사용하는 경우 CSRF 공격에 대비할 수 있다. +#### 나. 안전한 코딩기법 +해당 요청이 정상적인 사용자의 정상적인 절차에 의한 요청인지를 구분하기 위해 세션별로 CSRF 토큰을 +생성하여 세션에 저장하고 사용자가 작업 페이지를 요청할 때마다 hidden 값으로 클라이언트에게 토큰을 전달한 뒤, +해당 클라이언트의 데이터 처리 요청 시 전달되는 CSRF 토큰값을 체크하여 요청의 유효성을 검사하도록 한다. + +Django 프레임워크와 Flask 프레임워크는 미들웨어와 프레임워크에서 기본적으로 CSRF Token을 사용해서 +CSRF 공격으로부터 보호하는 기능을 가지고 있다. 해당 기능을 사용하기 위해 form 태그 내부에 csrf_token을 +사용해야 한다. +#### 다. 코드예제 +**가) Django 프레임워크 사용** +Django 프레임워크에서는 1.2 버전부터 CSRF 취약점을 방지 기능을 기본으로 제공하고 있다. 미들웨어의 +CSRF 옵션을 비활성하거나 템플릿에서 csrf_exempt decorator를 사용하는 경우 CSRF 공격에 노출될 수 있다. +-Django 미들웨어 설정(settings.py) 사례 + +**안전하지 않은 코드** + +```python +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # MIDDLEWARE 목록에서 CSRF 항목을 삭제 또는 주석처리 하면 + # Django 앱에서 CSRF 유효성 검사가 전역적으로 제거된다 + # 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.locale.LocaleMiddleware', + ...... +] +``` + +다음은 Django의 CSRF 기능을 활성화하기 위한 안전한 미들웨어 설정 예제를 보여 준다. 미들웨어의 +CSRF 기능을 주석 또는 삭제 처리하지 않아야 한다. 템플릿 페이지에는 csrf_token을 form 태그 안에 명시 +해야 미들웨어에서 정상적으로 CSRF 기능을 사용할 수 있다. + +**안전한 코드** + +```python +MIDDLEWARE = [ + 'django.contrib.sessions.middleware.SessionMiddleware', + # MIDDLEWARE 목록에서 CSRF 항목을 활성화 한다 + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.locale.LocaleMiddleware', + ...... +] +``` + +-Django 뷰 기능 설정(views.py) 사례 +미들웨어에 CSRF 검증 기능이 활성화 되어 있어도 View에서 CSRF 기능을 해제하는 경우에는 해당 요청에 +대해서 CSRF 검증 기능을 사용하지 않게 된다. 다음은 Function-Based View에서 CSRF 검증 기능을 비활성화 +하는 예제를 보여 준다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +from django.views.decorators.csrf import csrf_exempt +# csrf.exempt 데코레이터로 미들웨어에서 보호되는 CSRF 기능을 해제한다 +@csrf.exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + product_info = request.POST.get('product_info', '') + ret = handle_pay(user_id, pay, product_info) + + return render(request, '/view_wallet.html', {'wallet':ret}) +``` + +Django는 기본적으로 CSRF 기능을 강제하고 있지만, 부득이하게 CSRF 기능을 해제해야 하는 경우는 미들 +웨어의 CSRF 기능을 전역적으로 비활성화 하기 보다는 미들웨어의 CSRF 기능은 활성화 하고 필요한 요청에 +대해서만 csrf_exempt 데코레이터를 사용하여야 하고 이 경우에 크로스사이트 요청 위조의 위협에 노출될 +수 있으므로 주의를 기울여야 한다. + +**안전한 코드** + +```python +from django.shortcuts import render +from django.template import RequestContext +# csrf_exempt 데코레이터를 삭제하거나 주석 처리한다. +# @csrf_exempt +def pay_to_point(request): + user_id = request.POST.get('user_id', '') + pay = request.POST.get('pay', '') + product_info = request.POST.get('product_info', '') + ret = handle_pay(user_id, pay, product_info) + return render(request, '/view_wallet.html', {'wallet':ret}) +``` + +-Django 템플릿 설정 사례 +미들웨어에서 CSRF 기능을 활성화해도 템플릿 페이지에 CSRF 토큰을 명시하지 않을 경우 CSRF 검증 +기능을 사용할 수 없다. + +**안전하지 않은 코드** + +```html + +
+ + + {{form.as_table}} +
+ +
+``` + +미들웨어에서 CSRF 기능을 활성화한 후에 템플릿 페이지에서는 csrf_token 값을 명시하여야만 정상적인 +CSRF 검증 기능을 사용할 수 있다. + +**안전한 코드** + +```html + +
+ {% csrf_token %} + + {{as_table}} +
+ +
+``` + +템플릿 페이지에도 csrf_token 값을 명시해줘야 정상적인 CSRF 검증이 수행된다. +FlaskForm 사용 시에는 {{ form.csrf_token }}을 명시해야 하고 템플릿에 FlaskForm을 사용하지 않을 +경우에는 form 태그 안에 hidden input 값으로 {{ csrf_token }} 값을 명시해야 한다. + +**안전한 코드** + +```html +
+ + + + {{table}} +
+ +
+``` + +#### 라. 참고자료 +- CWE-352: Cross-Site Request Forgery (CSRF), MITRE, +- [https://cwe.mitre.org/data/definitions/352.html](https://cwe.mitre.org/data/definitions/352.html) +- Cross Site Request Forgery (CSRF), OWASP, +- [https://owasp.org/www-community/attacks/csrf](https://owasp.org/www-community/attacks/csrf) +- Cross-Site Request Forgery Prevention Cheat Sheet, OWASP +- [https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html) +- Cross Site Request Forgery protection, Django Software Foundation +- [https://docs.djangoproject.com/en/3.2/ref/csrf/](https://docs.djangoproject.com/en/3.2/ref/csrf/) +- CSRF Protection, WTForms +- [https://flask-wtf.readthedocs.io/en/0.15.x/csrf/](https://flask-wtf.readthedocs.io/en/0.15.x/csrf/) + +### 12. 서버사이드 요청 위조 +#### 가. 개요 + +![서버사이드 요청 위조 공격 개요](figures/python/ssrf_17.png) + +적절한 검증 절차를 거치지 않은 사용자 입력값을 내부 서버간의 요청에 사용해 악의적인 행위가 발생할 수 +있는 보안약점이다. 외부에 노출된 웹 서버가 취약한 애플리케이션을 포함하는 경우 공격자는 URL 또는 요청문을 +위조해 접근통제를 우회하는 방식으로 비정상적인 동작을 유도하거나 신뢰된 네트워크에 있는 데이터를 획득 +할 수 있다. +#### 나. 안전한 코딩기법 +식별 가능한 범위 내에서 사용자의 입력값을 다른 시스템의 서비스 호출에 사용하는 경우, 사용자의 입력값을 +화이트리스트 방식으로 필터링한다. +부득이하게 사용자가 지정하는 무작위의 URL을 받아들여야 하는 경우라면 내부 URL을 블랙리스트로 지정 +하여 필터링 한다. 또한 동일한 내부 네트워크에 있더라도 기기 인증, 접근권한을 확인하여 요청이 이루어질 +수 있도록 한다. + +#### 다. 코드예제 +<참고 : 삽입 코드의 예> +설명 +삽입 코드의 예 +내부망 중요 정보 획득 +- [http://sample_site.com/connect?url=http://192.168.0.45/member/list.json](http://sample_site.com/connect?url=http://192.168.0.45/member/list.json) +외부 접근 차단된 +admin 페이지 접근 +- [http://sample_site.com/connect?url=http://192.168.0.45/admin](http://sample_site.com/connect?url=http://192.168.0.45/admin) +도메인 체크를 우회하여 +중요 정보 획득 +- [http://sample_site.com/connect?url=http://sample_site.com:x@192.168.0.45/member/](http://sample_site.com/connect?url=http://sample_site.com:x@192.168.0.45/member/) +list.json +단축 URL을 이용한 +Filter 우회 +- [http://sample_site.com/connect?url=http://bit.ly/sdjk3kjhkl3](http://sample_site.com/connect?url=http://bit.ly/sdjk3kjhkl3) +도메인을 사설IP로 설정해 +중요정보 획득 +- [http://sample_site.com/connect?url=http://192.168.0.45/member/list.json](http://sample_site.com/connect?url=http://192.168.0.45/member/list.json) +서버내 파일 열람 +- [http://sample_site.com/connect?url=file:///etc/passwd](http://sample_site.com/connect?url=file:///etc/passwd) +다음 예제는 안전하지 않은 코드를 보여 준다. 사용자로부터 입력된 URL 주소를 검증 없이 사용하면 의도하지 +않은 다른 서버의 자원에 접근할 수 있게 된다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +import requests +def call_third_party_api(request): + addr = request.POST.get('address', '') + # 사용자가 입력한 주소를 검증하지 않고 HTTP 요청을 보낸 후 + # 응답을 사용자에게 반환 + result = requests.get(addr).text + return render(request, '/result.html', {'result':result}) +``` + +다음과 같이 안전한 코드를 작성하면 사전에 정의된 서버 목록을 정의하고 매칭되는 URL만 사용할 수 있으므로 +URL 값을 임의로 조작할 수 없다. + +**안전한 코드** + +```python +from django.shortcuts import render +import requests +# 허용하는 도메인을 화이트리스트에 정의할 경우 DNS rebinding 공격 등에 +# 노출될 위험이 있어 신뢰할 수 있는 자원에 대한 IP를 사용해 +# 검증하는 것이 조금 더 안전하다 +ALLOW_SERVER_LIST = [ + 'https://127.0.0.1/latest/', + 'https://192.168.0.1/user_data', + 'https://192.168.0.100/v1/public', +] +def call_third_party_api(request): + addr = request.POST.get('address', '') + # 사용자가 입력한 URL을 화이트리스트로 검증한 후 그 결과를 반환하여 + # 검증되지 않은 주소로 요청을 보내지 않도록 제한한다 + if addr not in ALLOW_SERVER_LIST: + return render(request, '/error.html', {‘error’ = '허용되지 않은 서버입니다.'}) + + result = requests.get(addr).text + return render(request, '/result.html', {'result':result}) +``` + +#### 라. 참고자료 +- CWE-918: Server-Side Request Forgery (SSRF), MITRE +- [https://cwe.mitre.org/data/definitions/918.html](https://cwe.mitre.org/data/definitions/918.html) +- Server Side Request Forgery, OWASP +- [https://owasp.org/www-community/attacks/Server_Side_Request_Forgery](https://owasp.org/www-community/attacks/Server_Side_Request_Forgery) +- Server-Side Request Forgery Prevention Cheat Sheet, OWASP +- [https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html) + +### 13. HTTP 응답분할 +#### 가. 개요 + +![HTTP 응답분할 공격 개요](figures/python/http-splitting_18.png) + +HTTP 요청 내의 파라미터(Parameter)가 HTTP 응답 헤더에 포함되어 사용자에게 다시 전달될 때 입력값에 +CR(Carriage Return)이나 LF(Line Feed)와 같은 개행문자가 존재하면 HTTP 응답이 2개 이상으로 분리될 +수 있다. 이 경우 공격자는 개행문자를 이용해 첫 번째 응답을 종료 시키고 두 번째 응답에 악의적인 코드를 +주입해 XSS 및 캐시훼손(Cache Poisoning) 공격 등을 수행할 수 있다. +파이썬 3.9.5+ 버전에서의 URLValidator에서 HTTP 응답분할 취약점이 보고되기도 했고 해당 라이브러리를 +사용하는 Django버전에도 영향이 있다. HTTP 응답분할 공격으로부터 어플리케이션을 안전하게 지키려면 최신 +버전의 라이브러리, 프레임워크를 사용하고 외부 입력값에 대해서는 철저한 검증 작업을 수행해야 한다. +#### 나. 안전한 코딩기법 +요청 파라미터의 값을 HTTP 응답 헤더(예를 들어, Set-Cookie 등)에 포함시킬 경우 CR(\r), LF(\n)와 +같은 개행문자를 제거해야 한다. 외부 입력값이 헤더, 쿠키, 로그 등에 사용될 경우에는 항상 개행문자를 검증 +하고 가능하다면 헤더에 사용되는 예약어 등을 화이트리스트로 제한해야 한다. + +#### 다. 코드예제 +사용자 요청에 포함된 값을 필터링 및 검증 없이 응답에 사용하는 경우 개행문자로 인해 여러 개의 응답으로 +분할되어 사용자에게 전달될 수 있다. + +**안전하지 않은 코드** + +```python +from django.http import HttpResponse +def route(request): + content_type = request.POST.get('content-type') + # 외부 입력값을 검증 또는 필터링 하지 않고 + # 응답 헤더의 값으로 포함시켜 회신한다 + ...... + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +응답 분할을 예방하기 위해 \r, \n과 같은 문자에 대해 치환 또는 예외처리를 적용해 응답분할이 발생하지 +않도록 예방해야 한다. + +**안전한 코드** + +```python +from django.http import HttpResponse +def route(request): + content_type = request.POST.get('content-type') + # 응답헤더에 포함될 수 있는 외부 입력값 내의 개행 문자를 제거한다 + content_type = content_type.replace('\r', '') + content_type = content_type.replace('\n', '') + ...... + res = HttpResponse() + res['Content-Type'] = content_type + return res +``` + +#### 라. 참고자료 +- CWE-113: Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Response Splitting'), MITRE, +- [https://cwe.mitre.org/data/definitions/113.html](https://cwe.mitre.org/data/definitions/113.html) +- HTTP Response Splitting, OWASP, +- [https://owasp.org/www-community/attacks/HTTP_Response_Splitting](https://owasp.org/www-community/attacks/HTTP_Response_Splitting) +- Django security releases issued, Django Software Foundation, +- [https://www.djangoproject.com/weblog/2021/may/06/security-releases/](https://www.djangoproject.com/weblog/2021/may/06/security-releases/) + +### 14. 정수형 오버플로우 +#### 가. 개요 + +![정수형 오버플로우 개요](figures/python/integer-overflow_19.png) + +정수형 오버플로우는 정수형 크기가 고정된 상태에서 변수가 저장할 수 있는 범위를 넘어선 값을 저장하려 +할 때 실제 저장되는 값이 의도치 않게 아주 작은 수 또는 음수가 되어 프로그램이 예기치 않게 동작하게 되는 +취약점이다. 특히 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용자가 제공하는 입력값을 +사용하고 그 과정에서 정수형 오버플로우가 발생하는 경우 보안상 문제를 유발할 수 있다. +파이썬 2.x에서는 int 타입 변수의 값이 표현 가능한 범위를 넘어서게 되면 자동으로 long으로 타입을 변경해 +범위를 확장한다. 파이썬 3.x에서는 long 타입을 없애고 int 타입만 유지하되, 정수 타입의 자료형에 +‘Arbitrary-precision arithmetic’ 방식을 사용해 오버플로우를 발생하지 않는다. 하지만 파이썬 3.x에서도 +기존의 pydata stack을 사용하는 패키지를 사용할 때는 C언어와 동일하게 정수형 데이터가 처리되므로 오버 +플로우 발생에 유의해야 한다. 이처럼 언어 자체에서는 안정성을 보장하지만 특정 취약점에 취약한 패키지 또는 +라이브러리를 사용하는 것에 주의해야 한다. +#### 나. 안전한 코딩기법 +기본 파이썬 자료형을 사용하지 않고 패키지에서 제공하는 데이터 타입을 사용할 경우 해당 패키지에서 제공 +하는 데이터 타입의 표현 방식과 최대 크기를 반드시 확인해야 한다. numpy에서는 기본적으로 64비트 길이의 +정수형 변수를 사용하며, 변수가 표현할 수 없는 큰 크기의 숫자는 문자열 형식(object)으로 변환하는 기능을 +제공한다. 하지만 64비트를 넘어서는 크기의 숫자는 제대로 처리하지 못한다. 따라서 변수에 값 할당 전에 +반드시 변수의 최소 및 최대값을 확인하고 범위를 넘어서는 값을 할당하지 않는지 테스트해야 한다. + +#### 다. 코드예제 +다음은 거듭제곱을 계산해 그 결과를 반환하는 함수 예시로, 계산 가능한 숫자에 대한 검증이 없어 에러는 +발생하지 않지만 반환값을 처리하는 함수에서 예기치 않은 오류가 발생할 수 있다. + +**안전하지 않은 코드** + +```python +import numpy as np +def handle_data(number, pow): + res = np.power(number, pow, dtype=np.int64) + # 64비트를 넘어서는 숫자와 지수가 입력될 경우 오버플로우가 발생해 결과값이 0이 된다 + return res +``` + +오버플로우 발생을 예방하려면 입력하는 값이 사용하는 데이터 타입의 최소보다 크거나 최대보다 작은지 +확인해야 한다. 만약 위 코드 예시처럼 값을 계산해야 하는 경우 오버플로우가 발생하지 않는 파이썬 기본 자료형에 +계산 결과값을 저장한 후 그 값을 검사해 오버플로우 여부를 확인해야 한다. + +**안전한 코드** + +```python +import numpy as np +MAX_NUMBER = np.iinfo(np.int64).max +MIN_NUMBER = np.iinfo(np.int64).min +def handle_data(number, pow): + + calculated = number ** pow + # 파이썬 기본 자료형으로 큰 수를 계산한 후 이를 검사해 오버플로우 탐지 + if calculated > MAX_NUMBER or calculated < MIN_NUMBER: + # 오버플로우 탐지 시 비정상 종료를 나타내는 –1 값 반환 + return –1 + res = np.power(number, pow, dtype=np.int64) + return res +``` + +#### 라. 참고자료 +- CWE-190: Integer Overflow or Wraparound, MITRE + https://cwe.mitre.org/data/definitions/190.html +- Integer Overflow Error, ZAP, +- [https://www.zaproxy.org/docs/alerts/30003/](https://www.zaproxy.org/docs/alerts/30003/) +- Arbitrary-precision arithmetic, +- [https://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic](https://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic) +- PEP 237 – Unifying Long Integers and Integers, +- [https://peps.python.org/pep-0237/](https://peps.python.org/pep-0237/) +- Numpy Types +- [https://numpy.org/doc/stable/user/basics.types.html?highlight=s](https://numpy.org/doc/stable/user/basics.types.html?highlight=s) + +### 15. 보안기능 결정에 사용되는 부적절한 입력값 +#### 가. 개요 + +![보안기능 결정에 사용되는 부적절한 입력값 개요](figures/python/untrusted-input_20.png) + +응용 프로그램이 외부 입력값에 대한 신뢰를 전제로 보호 메커니즘을 사용하는 경우 공격자가 입력값을 조작 +할 수 있다면 보호 메커니즘을 우회할 수 있게 된다. +개발자들이 흔히 쿠키, 환경변수 또는 히든필드와 같은 입력값이 조작될 수 없다고 가정하지만 공격자는 다양한 +방법을 통해 이러한 입력값들을 변경할 수 있고 조작된 내용은 탐지되지 않을 수 있다. 인증이나 인가와 같은 +보안 결정이 이런 입력값(쿠키, 환경변수, 히든필드 등)에 기반을 두어 수행되는 경우 공격자는 입력값을 조작해 +응용프로그램의 보안을 우회할 수 있다. 따라서 충분한 암호화, 무결성 체크를 수행하고 이와 같은 메커니즘이 +없는 경우엔 외부 사용자에 의한 입력값을 신뢰해서는 안 된다. +파이썬의 Django 프레임워크에서 세션을 관리하는 기능을 제공하고 있으며, 해당 기능 사용 시에는 세션쿠키의 +만료 시점을 설정해 사용할 수 있으며 DRF(Django Rest Framework)에서 제공하는 토큰 및 세션 기능을 +사용해 안전하게 구성할 수 있다. + +#### 나. 안전한 코딩기법 +상태 정보나 민감한 데이터 특히 사용자 세션 정보와 같은 중요 정보는 서버에 저장하고 보안확인 절차도 +서버에서 실행한다. 보안설계 관점에서 신뢰할 수 없는 입력값이 응용 프로그램 내부로 들어올 수 있는 지점을 +검토하고 민감한 보안 기능 실행에 사용되는 입력값을 식별해 입력값에 대한 의존성을 없애는 구조로 변경 +가능한지 분석한다. +#### 다. 코드예제 +다음은 안전하지 않은 코드로 쿠키에 저장된 권한 등급을 가져와 관리자인지 확인 후에 사용자의 패스워드를 +초기화 하고 메일을 보내는 예제다. 쿠키에서 등급을 가져와 관리자 여부를 확인한다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +def init_password(request): + # 쿠키에서 권한 정보를 가져 온다 + role = request.COOKIE['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email','') + # 쿠키에서 가져온 권한이 관리자인지 비교 + if role == 'admin': + # 사용자의 패스워드 초기화 및 메일 발송 처리 + password_init_and_sendmail(request_id, request_mail) + return render(request, '/success.html') + else: + return render(request, '/failed.html') +``` + +중요 기능 수행을 위한 데이터는 위변조 가능성이 높은 쿠키보다 세션에 저장하도록 한다. + +**안전한 코드** + +```python +from django.shortcuts import render +def init_password(request): + # 세션에서 권한 정보를 가져옴 + role = request.session['role'] + request_id = request.POST.get('user_id', '') + request_mail = request.POST.get('user_email','') + # 세션에서 가져온 권한이 관리자인지 비교 + if role == ‘admin’: + # 사용자의 패스워드 초기화 및 메일 발송 처리 + password_init_and_sendmail(request_id, request_mail) + return render(request, '/sucess.html') + else: + return render(request, '/failed.html') +``` + +#### 라. 참고자료 +- CWE-807: Reliance on Untrusted Inputs in a Security Decision, MITRE, +- [https://cwe.mitre.org/data/definitions/807.html](https://cwe.mitre.org/data/definitions/807.html) +- How to use sessions, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/http/sessions/](https://docs.djangoproject.com/en/3.2/topics/http/sessions/) +- Flask Sessions, +- [https://flask-session.readthedocs.io/en/latest/](https://flask-session.readthedocs.io/en/latest/) + +### 16. 포맷 스트링 삽입 +#### 가. 개요 + +![포맷 스트링 삽입 공격 개요](figures/python/format-string_21.png) + +외부로부터 입력된 값을 검증하지 않고 입·출력 함수의 포맷 문자열로 그대로 사용하는 경우 발생할 수 있는 +보안약점이다. 공격자는 포맷 문자열을 이용해 취약한 프로세스를 공격하거나 메모리 내용을 읽고 쓸 수 있다. +이를 통해 취약한 프로세스의 권한을 취득해 임의의 코드를 실행 할 수 있다. +파이썬에서는 문자열의 포맷팅 방법으로 “% formatting”, “str.format”, “f-string” 과 같이 세 가지 문자열 +포맷팅 방식을 제공하고 있다(f-string 은 파이썬 3.6 버전부터 사용 가능하다). 공격자는 포맷 문자열을 이용해 +내부 정보를 문자열로 만들 수 있으며, 이를 그대로 사용하는 경우 중요 정보 유출로 이어질 수 있다. +#### 나. 안전한 코딩기법 +포맷 문자열을 처리하는 함수 사용 시 사용자 입력값을 직접적으로 포맷 문자열로 사용하거나 포맷 문자열 +생성에 포함시키지 않아야 한다. 사용자로부터 입력 받은 데이터를 포맷 문자열로 사용하고자 하는 경우에는 +서식 지정자를 포함하지 않거나 파이썬의 내장함수 또는 내장변수 등이 포함되지 않도록 해야 한다. +#### 다. 코드예제 +아래 예시에서는 외부에서 입력받은 문자열을 바로 포맷스트링으로 사용하고 있는데, 이는 내부 정보가 외부로 +노출될 수 있는 문제를 내포하고 있다. +공격자가 # {user.__init__.__globals__[AUTHENTICATE_KEY]} 형식의 문자열 입력 시 전역 변수에 접근 +하여 AUTHENTICATE_KEY의 값을 탈취 할 수 있다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +``` + +AUTHENTICATE_KEY = 'Passw0rd' +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + + format_string = request.POST.get('msg_format', '') + # 내부의 민감한 정보가 외부로 노출될 수 있다. + # 사용자가 입력한 문자열을 포맷 문자열로 사용하고 있어 안전하지 않다 + message = format_string.format(user=user_info) + + return render(request, '/user_page.html', {'message':message}) +외부에서 입력 받은 문자열은 반드시 포맷 지정자를 이용해 바인딩 후 사용해야 하며 직접적으로 포맷문자열로 +사용해서는 안 된다. + +**안전한 코드** + +```python +from django.shortcuts import render +``` + +AUTHENTICATE_KEY = 'Passw0rd' +def make_user_message(request): + user_info = get_user_info(request.POST.get('user_id', '')) + + # 사용자가 입력한 문자열을 포맷 문자열로 사용하지 않아 안전하다 + message = 'user name is {}'.format(user_info.name) + + return render(request, '/user_page.html', {'message':message}) +#### 라. 참고자료 +- CWE-134: Use of Externally-Controlled Format String, MITRE, +- [https://cwe.mitre.org/data/definitions/134.html](https://cwe.mitre.org/data/definitions/134.html) +- Format string attack, OWASP, +- [https://owasp.org/www-community/attacks/Format_string_attack](https://owasp.org/www-community/attacks/Format_string_attack) +- 파이썬 format, Python Software Foundation, +- [https://docs.python.org/3/library/functions.html#format](https://docs.python.org/3/library/functions.html#format) +- Format String Syntax, Python Software Foundation, +- [https://docs.python.org/3/library/string.html#format-string-syntax](https://docs.python.org/3/library/string.html#format-string-syntax) + +## 제2절 보안기능 +보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점에는 +적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 있다. +### 1. 적절한 인증 없는 중요 기능 허용 +#### 가. 개요 + +![적절한 인증 없는 중요 기능 허용 개요](figures/python/missing-auth_22.png) + +보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점으로 +적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다. +파이썬의 Django 프레임워크에서 django.contrib.auth 앱을 통해 기본적인 인증 로그인 및 로그아웃 기능을 +제공하고 있으며 DRF(Django REST Framework)에서는 토큰 및 세션 인증을 제공하고 있다. +#### 나. 안전한 코딩기법 +클라이언트의 보안 검사를 우회하여 서버에 접근하지 못하도록 설계하고 중요한 정보가 있는 페이지는 재인증을 +적용한다. 또한 안전하다고 검증된 라이브러리나 프레임워크(Django authentication system, Flask-Login 등)를 +사용해야 한다. +#### 다. 코드예제 +다음은 패스워드 수정 시 수정을 요청한 패스워드와 DB에 저장된 사용자 패스워드 일치 여부를 확인하지 +않고 처리하고 있으며 패스워드의 재확인 절차도 생략되어 취약한 코드 예시를 보여 준다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +from re import escape +import hashlib +def change_password(request): + new_pwd = request.POST.get('new_password','') + # 로그인한 사용자 정보 + user = '%s' % escape(request.session['userid']) + # 현재 password와 일치 여부를 확인하지 않고 수정함 + sha = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, sha.hexdigest()) + return render(request, '/success.html') +``` + +DB에 저장된 사용자 패스워드와 변경을 요청한 패스워드의 일치 여부를 확인하고, 변경 요청한 패스워드와 +재확인 패스워드가 일치하는지 확인 후 DB의 패스워드를 수정해 안전하게 코드를 적용할 수 있다. + +**안전한 코드** + +```python +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +from re import escape +import hashlib +# login_required decorator를 사용해 login된 사용자만 접근하도록 처리 +@login_required +def change_password(request): + new_pwd = request.POST.get('new_password','') + crnt_pwd = request.POST.get('current_password','') + # 로그인한 사용자 정보를 세션에서 가져온다. + user = '%s' % escape(request.session['userid']) + crnt_h = hashlib.sha256(crnt_pwd.encode()) + h_pwd = crnt_h.hexdigest() +``` + +**안전한 코드** + +```python + # DB에서 기존 사용자의 Hash된 패스워드 가져오기 + old_pwd = get_password_from_db(user) + # 패스워드를 변경하기 전 사용자에 대한 재인증을 수행한다. + if old_pwd == h_pwd: + new_h = hashlib.sha256(new_pwd.encode()) + update_password_from_db(user, new_h.hexdigest()) + return render(request, '/success.html') + else: + return render(request, ‘failed.html’, {'error': '패스워드가 일치하지 않습니다'}) +``` + +#### 라. 참고자료 +- CWE-306: Missing Authentication for Critical Function, MITRE, +- [https://cwe.mitre.org/data/definitions/306.html](https://cwe.mitre.org/data/definitions/306.html) +- Access Control, OWASP, +- [https://www.owasp.org/index.php/Access_Control_Cheat_Sheet](https://www.owasp.org/index.php/Access_Control_Cheat_Sheet) +- Using the Django authentication system, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/auth/default/](https://docs.djangoproject.com/en/3.2/topics/auth/default/) +- Flask-Security, +- [https://flask-login.readthedocs.io/en/latest/](https://flask-login.readthedocs.io/en/latest/) + +### 2. 부적절한 인가 +#### 가. 개요 + +![부적절한 인가 개요](figures/python/improper-auth_23.png) + +프로그램이 모든 가능한 실행 경로에 대해서 접근 제어를 검사하지 않거나 불완전하게 검사하는 경우 공격자는 +접근 가능한 실행경로를 통해 정보를 유출할 수 있다. +#### 나. 안전한 코딩기법 +응용 프로그램이 제공하는 정보와 기능이 가지는 역할에 맞게 분리 개발함으로써 공격자에게 노출되는 공격 +노출면(Attack Surface)3)을 최소화하고 사용자의 권한에 따른 ACL(Access Control List)을 관리한다. +#### 다. 코드예제 +사용자 입력값에 따라 삭제 작업을 수행하고 있으며 사용자의 권한 확인을 위한 별도의 통제가 적용되지 +않은 예시를 보여 준다. +3) 공격자가 진입 또는 영향을 줄 수 있는 시스템 경계선 지점, 시스템 요소 또는 환경을 의미(https://csrc.nist.g +ov/glossary/term/attack_surface) + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +from .model import Content +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + # 작업 요청을 하는 사용자의 권한 확인 없이 delete를 수행 + if action is not None and action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + else: + return render(request, '/error.html', {'error':'접근 권한이 없습니다.'}) +``` + +세션에 저장된 사용자 정보를 통해 해당 사용자가 수행할 작업에 대한 권한이 있는지 확인한 후 권한이 있는 +경우에만 작업을 수행하도록 해야 한다. + +**안전한 코드** + +```python +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import render +from .model import Content +@login_required + # 해당 기능을 수행할 권한이 있는지 확인 +@permission_required('content.delete', raise_exception=True) +def delete_content(request): + action = request.POST.get('action', '') + content_id = request.POST.get('content_id', '') + if action is not None and action == "delete": + Content.objects.filter(id=content_id).delete() + return render(request, '/success.html') + else: + return render(request, '/error.html', {'error':'삭제 실패'}) +``` + +#### 라. 참고자료 +- CWE-285: Improper Authorization, MITRE, +- [https://cwe.mitre.org/data/definitions/285.html](https://cwe.mitre.org/data/definitions/285.html) +- Access Control, OWASP, +- [https://www.owasp.org/index.php/Access_Control_Cheat_Sheet](https://www.owasp.org/index.php/Access_Control_Cheat_Sheet) +- Using the Django authentication system, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/auth/default/](https://docs.djangoproject.com/en/3.2/topics/auth/default/) + +3. 중요한 자원에 대한 잘못된 권한 설정 +#### 가. 개요 + +![중요한 자원에 대한 잘못된 권한 설정 개요](figures/python/permission_24.png) + +응용프로그램이 중요한 보안관련 자원에 대해 읽기 또는 수정하기 권한을 의도하지 않게 허가할 경우 권한을 +갖지 않은 사용자가 해당 자원을 사용하게 된다. 파이썬에서는 os.fchmod, os.chmod 등의 함수를 통해 파일 +생성, 수정 및 읽기 권한을 설정할 수 있다. +#### 나. 안전한 코딩기법 +설정 파일, 실행 파일, 라이브러리 등은 관리자에 의해서만 읽고 쓰기가 가능하도록 설정하고 설정 파일과 +같이 중요한 자원을 사용하는 경우 허가 받지 않은 사용자가 중요한 자원에 접근 가능한지 검사한다. +#### 다. 코드예제 +다음 예제는 /root/system_config 파일에 대해서 모든 사용자가 읽기, 쓰기, 실행 권한을 가지는 상황을 +보여 준다. + +**안전하지 않은 코드** + +```python +import os +def write_file(): + # 모든 사용자가 읽기, 쓰기, 실행 권한을 가지게 된다. + os.chmod('/root/system_config', 0o777) + with open("/root/system_config", 'w') as f: + f.write("your config is broken") +``` + +주요 파일에 대해서는 최소 권한만 할당해야 한다. 구체적으로 파일의 소유자라고 하더라도 기본적으로 읽기 +권한만 부여해야 하며, 부득이하게 쓰기 권한이 필요한 경우에만 제한적으로 쓰기 권한을 부여해야 한다. + +**안전한 코드** + +```python +import os +def write_file(): + # 소유자 외에는 아무런 권한을 주지 않음. + os.chmod('/root/system_config', 0o700) + with open("/root/system_config", ‘'w') as f: + f.write("your config is broken") +``` + +#### 라. 참고자료 +- CWE-732: Incorrect Permission Assignment for Critical Resource, MITRE, +- [https://cwe.mitre.org/data/definitions/732.html](https://cwe.mitre.org/data/definitions/732.html) +- OS – Miscellaneous operating system interfaces, Python Software Foundation, +- [https://docs.python.org/3/library/os.html](https://docs.python.org/3/library/os.html) + +### 4. 취약한 암호화 알고리즘 사용 +#### 가. 개요 + +![취약한 암호화 알고리즘 사용 개요](figures/python/broken-crypto_25.png) + +개발자들은 환경설정 파일에 저장된 패스워드를 보호하기 위해 간단한 인코딩 함수를 이용해 패스워드를 +감추는 방법을 사용하기도 한다. 하지만 base64와 같은 지나치게 간단한 인코딩 함수로는 패스워드를 제대로 +보호할 수 없다. +정보보호 측면에서 취약하거나 위험한 암호화 알고리즘을 사용해서는 안 된다. 표준화되지 않은 암호화 알고리즘을 +사용하는 것은 공격자가 알고리즘을 분석해 무력화시킬 수 있는 가능성을 높일 수도 있다. 몇몇 오래된 암호화 +알고리즘의 경우는 컴퓨터의 성능이 향상됨에 따라 취약해지기도 해서, 예전에는 해독하는데 몇 십 억년이 걸릴 +것이라고 예상되던 알고리즘이 며칠이나 몇 시간 내에 해독되기도 한다. RC2(ARC2), RC4(ARC4), RC5, +RC6, MD4, MD5, SHA1, DES 알고리즘이 여기에 해당된다. +#### 나. 안전한 코딩기법 +자신만의 암호화 알고리즘을 개발하는 것은 위험하며, 학계 및 업계에서 이미 검증된 표준화된 알고리즘을 +사용해야 한다. 기존에 취약하다고 알려진 DES, RC5 등의 암호알고리즘을 대신하여 3TDEA, AES, SEED +등의 안전한 암호알고리즘으로 대체하여 사용한다. 또한 업무관련 내용, 개인정보 등에 대한 암호 알고리즘 +적용 시 안전한 암호화 알고리즘을 사용해야 한다. + +< 암호알고리즘 검증기준 ver3.0 (암호모듈시험기관) > +분류 +암호 알고리즘 +최소 안전성 수준 +-112비트 +블록암호 +(운영모드) +ARIA +-운영모드 +- 기밀성(ECB, CBC, CFB, OFB, CTR) +- 기밀성/인증(CCM, GCM) +SEED +-운영모드 +- 기밀성(ECB, CBC, CFB, OFB, CTR) +- 기밀성/인증(CCM, GCM) +LEA +-운영모드 +- 기밀성(ECB, CBC, CFB, OFB, CTR) +- 기밀성/인증(CCM, GCM) +HIGHT +-운영모드 +- 기밀성(ECB, CBC, CFB, OFB, CTR) +해시함수 +SHA-2 +-SHA-224/256/384/512 +LSH +-LSH-224/256/384/512/512-224/512-256 +SHA-3 +-SHA-3-224/256/384/512 +메시지 +인증 +해시함수 기반 +-HMAC +블록암호 기반 +-CMAC, GMAC +난수발생기 +해시함수 기반 +-Hash_DRBG, HMAC_DRBG +블록암호 기반 +-CTR_DRBG +공개키 암호 +RSAES +-공개키 길이 : 2048, 3072 +-해시함수 : SHA-224, SHA-256 +전자서명 +RSA-PSS +-공개키 길이 : 2048, 3072 +-해시함수 : SHA-224, SHA-256 +KCDSA +-(공개키 길이, 개인키 길이) : (2048, 224), (2048, 256) +-해시함수 : SHA-224, SHA-256 +EC-KCDSA +-p-224, p-256, B-233, B-283, K-233, K-283 +-해시함수 : SHA-224, SHA-256 +ECDSA +-p-224, p-256, B-233, B-283, K-233, K-283 +-해시함수 : SHA-224, SHA-256 +키 설정 +DH +-(공개키 길이, 개인키 길이) : (2048, 224), (2048, 256) +ECDH +-P-224, P-256, B-233, B-283, K-233, K-283 +키 유도 +KBKDF +-HMAC, CMAC +PBKDF +-HMAC + +#### 다. 코드예제 +다음 예제는 취약한 DES 알고리즘으로 암호화하는 예시다. DES 이외에 2TDEA, Blowfish, ARC2, +ARC4 등의 취약한 알고리즘을 사용해선 안 된다. + +**안전하지 않은 코드** + +```python +import base64 +from Crypto.Cipher import DES +from Crypto.Util.Padding import pad +def get_enc_text(plain_text, key): + # 취약함 암호화 알고리즘인 DES를 사용하여 안전하지 않음 + cipher_des = DES.new(key, DES.MODE_ECB) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + return encrypted_data.decode('ASCII') +``` + +파이썬 2.x 버전에서는 PyCrypto를 사용하면 되지만 파이썬 3.x 버전 환경에서 사용 시 동작을 하지 않는 +경우가 발생하며, 더 이상 유지 관리 되지 않으므로(deprecated) PyCrypto를 개선한 버전인 pycryptodome를 +사용해야 한다. 또한 취약한 DES 알고리즘 대신 안전한 AES 암호화 알고리즘을 사용한다. +블록 암호화에서 운영 모드를 ECB(Electronic Code Block) 모드로 사용할 경우 한 개의 블록만 해독되면 +나머지 블록도 해독이 되는 단점이 있다. CBC(Cipher Block Chaining) 모드는 평문의 각 블록이 XOR 연산을 +통해 이전 암호문과 연산이 되기 때문에 같은 평문이라도 암호문이 서로 다르다. 이러한 특성으로 보안성이 +ECB 모드보다 높다. + +**안전한 코드** + +```python +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad +def get_enc_text(plain_text, key, iv): + # 안전한 알고리즘인 AES 를 사용하여 안전함. + cipher_aes = AES.new(key, AES.MODE_CBC, iv) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text, 32))) + + return encrypted_data.decode('ASCII') +``` + +다음 예제는 취약한 MD5 해시함수를 사용하는 예시다. 암호 알고리즘과 마찬가지로 해시함수도 수학적으로 +취약한 것으로 확인된 MD5와 같은 함수를 사용하면 해시값을 역계산해 평문이 유출될 수 있다. + +**안전하지 않은 코드** + +```python +import hashlib +def make_md5(plain_text): + # 취약한 md5 해시함수 사용 + hash_text = hashlib.md5(plain_text.encode('utf-8')).hexdigest() + + return hash_text +``` + +아래 코드처럼 수학적으로 안전하다고 알려진 sha-256 해시함수 등을 적용해야 한다. + +**안전한 코드** + +```python +import hashlib +def make_sha256(plain_text): + # 안전한 sha-256 해시함수 사용 + hash_text = hashlib.sha256(plain_text.encode('utf-8')).hexdigest() + return hash_text +``` + +#### 라. 참고자료 +- CWE-327: Use of a Broken or Risky Cryptographic Algorithm, MITRE, +- [https://cwe.mitre.org/data/definitions/327.html](https://cwe.mitre.org/data/definitions/327.html) +- Welcome to pyca/cryptography, Cryptography, +- [https://cryptography.io/en/latest/](https://cryptography.io/en/latest/) +- Welcome to PyCryptodome’s documentation, PyCryptodome, +- [https://www.pycryptodome.org/en/latest/](https://www.pycryptodome.org/en/latest/) +- Cryptographic Services, Python Software Foundation, +- [https://docs.python.org/3/library/crypto.html](https://docs.python.org/3/library/crypto.html) + +### 5. 암호화되지 않은 중요정보 +#### 가. 개요 + +![암호화되지 않은 중요정보 개요](figures/python/cleartext_26.png) + +많은 응용 프로그램은 메모리나 디스크 상에서 중요한 정보(개인정보, 인증정보, 금융정보 등)를 처리한다. +이러한 중요 정보가 제대로 보호되지 않을 경우 보안 문제가 발생하거나 데이터의 무결성이 깨질 수 있다. 특히 +사용자 또는 시스템의 중요 정보가 포함된 데이터를 평문으로 송·수신 또는 저장 시 인가되지 않은 사용자에게 +민감한 정보가 노출될 수 있다. +#### 나. 안전한 코딩기법 +개인정보(주민등록번호, 여권번호 등), 금융정보(카드번호, 계좌번호 등), 패스워드 등 중요정보를 저장하거나 +통신채널로 전송할 때는 반드시 암호화 과정을 거쳐야 하며 중요정보를 읽거나 쓸 경우에 권한인증 등을 통해 +적합한 사용자만 중요정보에 접근하도록 해야 한다. +가능하다면 SSL 또는 HTTPS 등과 같은 보안 채널을 사용해야 한다. 보안 채널을 사용하지 않고 브라우저 +쿠키에 중요 데이터를 저장하는 경우 쿠키 객체에 보안속성을 설정해(Ex. secure = True) 중요 정보의 노출을 +방지할 수 있다. +#### 다. 코드예제 +-중요정보 평문저장 +아래 예제는 사용자로부터 전달받은 패스워드 암호화를 누락한 경우이다. + +**안전하지 않은 코드** + +```python +def update_pass(dbconn, password, user_id): + curs = dbconn.cursor() + # 암호화되지 않은 패스워드를 DB에 저장 + curs.execute( + 'UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', + password, + user_id + ) + dbconn.commit() +``` + +아래는 해시 알고리즘을 이용하여 단방향 암호화 이후에 패스워드를 저장하고 있다. 이 때, 해시함수 또한 +SHA256과 같이 안정성이 검증된 알고리즘을 사용해야 한다. + +**안전한 코드** + +```python +from Crypto.Hash import SHA256 +def update_pass(dbconn, password, user_id, salt): + # 단방향 암호화를 이용하여 패스워드를 암호화 + hash_obj = SHA256.new() + hash_obj.update(bytes(password + salt, 'utf-8')) + hash_pwd = hash_obj.hexdigest() + curs = dbconn.cursor() + curs.execute( + 'UPDATE USERS SET PASSWORD=%s WHERE USER_ID=%s', + (hash_pwd, user_id) + ) + dbconn.commit() +``` + +-중요정보 평문전송 +아래 예제는 인자값으로 전달 받은 패스워드를 검증 없이 네트워크를 통해 전송하는 예시를 포함한다. 전달 +받은 패스워드가 암호화가 되어 있지 않을 경우 패킷 스니핑을 통하여 패스워드가 노출될 수 있다. + +**안전하지 않은 코드** + +```python +import socket +HOST = '127.0.0.1' +PORT = 65434 +def send_password(password): + ...... + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect((HOST, PORT)) + # 패스워드를 암호화 하지 않고 전송하여 안전하지 않다. + s.sendall(password.encode('utf-8')) + data = s.recv(1024) + ....... +``` + +아래는 네트워크를 통해 전달되는 패스워드가 노출되지 않도록 암호화하여 전송하는 예시를 보여 준다. + +**안전한 코드** + +```python +import socket +import os +from Crypto.Cipher import AES +HOST = '127.0.0.1' +PORT = 65434 +def send_password(password): + # 문자열로 저장되어 있는 블록키를 로드 + block_key = os.environ.get('BLOCK_KEY') + aes = AEScipher(block_key) + # 패스워드 등 중요 정보는 암호화하여 전송하는 것이 안전하다 + enc_passowrd = aes.encrypt(passowrd) +``` + +**안전한 코드** + +```python + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect((HOST, PORT)) + s.sendall(enc_passowrd.encode('utf-8')) + data = s.recv(1024) + ....... +class AEScipher: + BS = AES.block_size + def __init__(self, s_key): + self.s_key = hashlib.sha256(s_key.encode("utf-8")).digest() + def pad(self, m): + return m + bytes([self.BS - len(m) % self.BS] * (self.BS - len(m) % self.BS)) + def encrypt(self, plain): + plain = self.pad(plain.encode()) + iv = Random.new().read(AES.block_size) + cipher = AES.new(self.s_key, AES.MODE_CBC, iv) + return base64.b64encode(iv + cipher.encrypt(plain)).decode("utf-8") + ...... +``` + +#### 라. 참고자료 +- CWE-312: Cleartext Storage of Sensitive Information, MITRE, +- [https://cwe.mitre.org/data/definitions/312.html](https://cwe.mitre.org/data/definitions/312.html) +- CWE-319: Cleartext Transmission of Sensitive Information, MITRE, +- [https://cwe.mitre.org/data/definitions/319.html](https://cwe.mitre.org/data/definitions/319.html) +- Password Plaintext Storage, OWASP, +- [https://owasp.org/www-community/vulnerabilities/Password_Plaintext_Storage](https://owasp.org/www-community/vulnerabilities/Password_Plaintext_Storage) + +### 6. 하드코드된 중요정보 +#### 가. 개요 + +![하드코드된 중요정보 개요](figures/python/hardcoded-creds_27.png) + +프로그램 코드 내부에 하드코드된 패스워드를 포함하고, 이를 이용해 내부 인증에 사용하거나 외부 컴포넌트와 +통신을 하는 경우 관리자의 정보가 노출될 수 있어 위험하다. 또한 하드코드된 암호화 키를 사용해 암호화를 +수행하면 암호화된 정보가 유출될 가능성이 높아진다. 암호키의 해시를 계산해 저장하더라도 역계산이 가능해 +무차별 공격(Brute-Force)공격에는 취약할 수 있다. +#### 나. 안전한 코딩기법 +패스워드는 암호화 후 별도의 파일에 저장하여 사용한다. 또한 중요 정보 암호화 시 상수가 아닌 암호화 +키를 사용하도록 하며, 암호화가 잘 되었더라도 소스코드 내부에 상수 형태의 암호화 키를 주석으로 달거나 +저장하지 않도록 한다. +#### 다. 코드예제 +소스코드에 패스워드 또는 암호화 키와 같은 중요 정보를 하드코딩 하는 경우 중요 정보가 노출될 수 있어 +위험하다. + +**안전하지 않은 코드** + +```python +import pymysql +def query_execute(query): + # user, passwd가 소스코드에 평문으로 하드코딩되어 있음 + dbconn = pymysql.connect( + host='127.0.0.1', + port='1234', + user='root', + passwd='1234', + db='mydb', + charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +패스워드와 같은 중요 정보는 안전한 암호화 방식으로 암호화 후 별도의 분리된 공간(파일)에 저장해야 하며, +암호화된 정보 사용 시 복호화 과정을 거친 후 사용해야 한다. + +**안전한 코드** + +```python +import pymysql +import json +def query_execute(query, config_path): + with open(config_path, 'r') as config: + # 설정 파일에서 user, passwd를 가져와 사용 + dbconf = json.load(fp=config) + # 암호화되어 있는 블록 암호화 키를 복호화 해서 가져오는 + # 사용자 정의 함수 + blockKey = get_decrypt_key(dbconf['blockKey']) + # 설정 파일에 암호화되어 있는 값을 가져와 복호화한 후에 사용 + dbUser = decrypt(blockKey, dbconf['user']) + dbPasswd = decrypt(blockKey, dbconf['passwd']) + dbconn = pymysql.connect( + host=dbconf['host'] + port=dbconf['port'], + user=dbUser, + passwd=dbPasswd, + db=dbconf['db_name'], + charset='utf8', + ) + curs = dbconn.cursor() + curs.execute(query) + dbconn.commit() + dbconn.close() +``` + +#### 라. 참고자료 +- CWE-259: Use of Hard-coded Password, MITRE, +- [https://cwe.mitre.org/data/definitions/259.html](https://cwe.mitre.org/data/definitions/259.html) +- CWE-321: Use of Hard-coded Cryptographic Key, MITRE, +- [https://cwe.mitre.org/data/definitions/321.html](https://cwe.mitre.org/data/definitions/321.html) +- Use of hard-coded password, OWASP, +- [https://owasp.org/www-community/vulnerabilities/Use_of_hard-coded_password](https://owasp.org/www-community/vulnerabilities/Use_of_hard-coded_password) +- Password Management Hardcoded Password, OWASP, +- [https://owasp.org/www-community/vulnerabilities/Password_Management_Hardcoded_Password](https://owasp.org/www-community/vulnerabilities/Password_Management_Hardcoded_Password) + +### 7. 충분하지 않은 키 길이 사용 +#### 가. 개요 + +![충분하지 않은 키 길이 사용 개요](figures/python/key-length_28.png) + +짧은 길이의 키를 사용하는 것은 암호화 알고리즘을 취약하게 만들 수 있다. 키는 암호화 및 복호화에 사용 +되는데, 검증된 암호화 알고리즘을 사용하더라도 키 길이가 충분히 길지 않으면 짧은 시간 안에 키를 찾아낼 +수 있고 이를 이용해 공격자가 암호화된 데이터나 패스워드를 복호화 할 수 있게 된다. +암호 알고리즘 및 키 길이 선택 시 암호 알고리즘의 안전성 유지기간과 보안강도별 암호 알고리즘 키 길이 +비교표를 기반으로 암호 알고리즘 및 키 길이를 선택해야 한다. +< 보안강도별 암호 알고리즘 비교표 > +보안강도 +대칭키 암호 +알고리즘 +(보안강도) +해시함수 +(보안강도) +공개키 암호 알고리즘 +암호 알고리즘 +안전성 유지기간 +(년도) +인수분해 +(비트) +이산대수 +타원곡선 +암호(비트) +공개키(비트) +개인키(비트) +112 비트 +2048 +2048 +2011년에서 +2030년까지 +128 비트 +3072 +3072 +2030년 이후 +192 비트 +7680 +7680 +256비트 +15360 +15360 + +#### 나. 안전한 코딩기법 +RSA 알고리즘은 적어도 2,048 비트 이상의 길이를 가진 키와 함께 사용해야 하고, 대칭 암호화 알고리즘(Symmetric +Encryption Algorithm)의 경우에는 적어도 128비트 이상의 키를 사용해야 한다(암호 강도 112비트 이상). +#### 다. 코드예제 +보안성이 강한 RSA 알고리즘을 사용하는 경우에도 키 사이즈를 작게 설정하면 프로그램의 보안약점이 될 수 있다. + +**안전하지 않은 코드** + +```python +from Crypto.PublicKey import RSA, DSA, ECC +from tinyec import registry +import secrets +def make_rsa_key_pair(): + # RSA키 길이를 2048 비트 이하로 설정하는 경우 안전하지 않음 + private_key = RSA.generate(1024) + public_key = private_key.publickey() +def make_ecc(): + # ECC의 키 길이를 224비트 이하로 설정하는 경우 안전하지 않음 + ecc_curve = registry.get_curve('secp192r1') + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +RSA, DSA의 경우 키의 길이는 적어도 2048 비트를, ECC의 경우 224 비트 이상으로 설정해야 안전하다. +다음은 tinyec 모듈을 사용하여 ECC 키를 생성한 예제다. + +**안전한 코드** + +```python +from Crypto.PublicKey import RSA, DSA, ECC +from tinyec import registry +import secrets +def make_rsa_key_pair(): + # RSA 키 길이를 2048 비트 이상으로 길게 설정 + private_key = RSA.generate(2048) + public_key = private_key.publickey() +def make_ecc(): + # ECC 키 길이를 224 비트 이상으로 설정 + ecc_curve = registry.get_curve('secp224r1') + private_key = secrets.randbelow(ecc_curve.field.n) + public_key = private_key * ecc_curve.g +``` + +#### 라. 참고자료 +- CWE-326: Inadequate Encryption Strength, MITRE, +- [https://cwe.mitre.org/data/definitions/326.html](https://cwe.mitre.org/data/definitions/326.html) +- FEDERAL INFORMATION PROCESSING STANDARDS PUBLICATION (FIPS PUB 186-4), NIST +- [https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf) +- PyCryptodome-RSA, +- [https://pycryptodome.readthedocs.io/en/latest/src/public_key/rsa.html](https://pycryptodome.readthedocs.io/en/latest/src/public_key/rsa.html) +- 암호 알고리즘 및 키 길이 이용 안내서, KISA, +- [https://www.kisa.or.kr/2060305/form?postSeq=5&lang_type=KO#fnPostAttachDownload](https://www.kisa.or.kr/2060305/form?postSeq=5&lang_type=KO#fnPostAttachDownload) +- DSA, Pycryptodome, +- [https://pycryptodome.readthedocs.io/en/latest/src/public_key/dsa.html](https://pycryptodome.readthedocs.io/en/latest/src/public_key/dsa.html) +- ECC, Pycryptodome, +- [https://pycryptodome.readthedocs.io/en/latest/src/public_key/ecc.html](https://pycryptodome.readthedocs.io/en/latest/src/public_key/ecc.html) + +### 8. 적절하지 않은 난수 값 사용 +#### 가. 개요 + +![적절하지 않은 난수 값 사용 개요](figures/python/randomness_29.png) + +예측 불가능한 숫자가 필요한 상황에서 예측 가능한 난수를 사용한다면 공격자가 생성되는 다음 숫자를 예상해 +시스템을 공격할 수 있다. +#### 나. 안전한 코딩기법 +난수 발생기에서 시드(Seed)를 사용하는 경우에는 고정된 값을 사용하지 않고 예측하기 어려운 방법으로 +생성된 값을 사용한다. +python에서 random 모듈은 주로 보안 목적이 아닌 게임, 퀴즈 및 시뮬레이션을 위해 설계되었다. 세션 +ID, 암호화키 등 주요 보안 기능을 위한 값을 생성하고 주요 보안 기능을 수행하는 경우에는 random 모듈보다 +암호화 목적으로 설계된 secrets 모듈을 사용해야 한다. +secrets 모듈은 python 3.6 이상에서만 사용 가능하며 암호, 계정 인증, 보안 토큰과 같은 데이터를 관리 +하는데 적합한 강력한 난수 생성에 사용할 수 있다. python 3.6 이하에서는 os.urandom(), random.SystemRandom +클래스를 사용하는 것이 안전하다. +#### 다. 코드예제 +random 라이브러리 사용 시에는 반드시 유추하기 어려운 seed 값을 이용하여 난수를 생성해야 하며, 이렇게 +생성된 난수라 하더라도 강도가 낮기 때문에 주요 보안 기능을 위한 난수 이용 시에는 안전하지 않다. 아래는 +안전하지 않은 코드 예제로 고정된 seed 값을 보안이나 암호를 목적으로 사용하는 취약한 random 라이브러리 +적용 사례를 보여 준다. + +**안전하지 않은 코드** + +```python +import random +def get_otp_number(): + random_str = '' + # 시스템 현재 시간 값을 시드로 사용하고 있으며, 주요 보안 기능을 위한 + # 난수로 안전하지 않다 + for i in range(6): + random_str += str(random.randrange(10)) + return random_str +``` + +다음 코드는 secrets 라이브러리를 사용해 6자리의 난수 값을 생성하는 안전한 예제다. + +**안전한 코드** + +```python +import secrets +def get_otp_number(): + random_str = '' + # 보안기능에 적합한 난수 생성용 secrets 라이브러리 사용 + for i in range(6): + random_str += str(secrets.randbelow(10)) + return random_str +``` + +다음은 세션 토큰값을 생성하는 예제로 random 라이브러리를 사용해 안전하지 않다. + +**안전하지 않은 코드** + +```python +import random +import string +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters + string.digits + # random 라이브러리를 보안 기능에 사용하면 위험하다 + return “”.join(random.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +패스워드나 인증정보 및 보안토큰 생성에 사용하는 경우 안전한 secrets 라이브러리로 생성한 난수를 이용 +해야 한다. + +**안전한 코드** + +```python +import secrets +import string +def generate_session_key(): + RANDOM_STRING_CHARS = string.ascii_letters+string.digits + # 보안 기능과 관련된 난수는 secrets 라이브러리를 사용해야 안전하다 + return “”.join(secrets.choice(RANDOM_STRING_CHARS) for i in range(32)) +``` + +#### 라. 참고자료 +- CWE-330: Use of Insufficiently Random Values, MITRE, +- [https://cwe.mitre.org/data/definitions/330.html](https://cwe.mitre.org/data/definitions/330.html) +- Insecure Randomness, OWASP, +- [https://owasp.org/www-community/vulnerabilities/Insecure_Randomness](https://owasp.org/www-community/vulnerabilities/Insecure_Randomness) +- Generate pseudo-random numbers, Python Software Foundation, +- [https://docs.python.org/3/library/random.html](https://docs.python.org/3/library/random.html) +- Generate secure random numbers for managing secrets, Python Software Foundation, +- [https://docs.python.org/3/library/secrets.html](https://docs.python.org/3/library/secrets.html) + +### 9. 취약한 패스워드 허용 +#### 가. 개요 + +![취약한 패스워드 허용 개요](figures/python/weak-password_30.png) + +사용자에게 강한 패스워드 조합규칙을 요구하지 않으면 사용자 계정이 취약하게 된다. 안전한 패스워드를 +생성하기 위해서는 「패스워드 선택 및 이용 안내서」에서 제시하는 패스워드 설정 규칙을 적용해야 한다. +#### 나. 안전한 코딩기법 +패스워드 생성 시 강한 조건 검증을 수행한다. 패스워드(패스워드)는 숫자와 영문자, 특수문자 등을 혼합하여 +사용하고 주기적으로 변경하여 사용하도록 해야 한다. +#### 다. 코드예제 +사용자가 입력한 패스워드에 대한 복잡도 검증 없이 가입 승인 처리를 수행하고 있다. + +**안전하지 않은 코드** + +```python +from flask import request, redirect +from Models import User +from Models import db +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다", 400) + else: + usertable = User() + usertable.userid = userid + usertable.password = password + # 패스워드 생성 규칙을 확인하지 않고 회원 가입 + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +``` + +사용자 계정 보호를 위해 회원가입 시 패스워드 복잡도와 길이를 검증 후 가입 승인처리를 수행해야 한다. +코드 내의 특수문자(‘!@#$%^&*’)는 기업 내부 정책에 따라 변경하여 사용하면 되며, 패스워드를 숫자로만 +10자리로 구성할 경우 취약할 수 있으니 사용자가 안전한 패스워드로 변경할 수 있도록 안내해야 한다. + +**안전한 코드** + +```python +from flask import request, redirect +from Models import User +from Models import db +import re +@app.route('/register', methods=['POST']) +def register(): + userid = request.form.get('userid') + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + if password != confirm_password: + return make_response("패스워드가 일치하지 않습니다.", 400) + + if not check_password(password): + return make_response("패스워드 조합규칙에 맞지 않습니다.", 400) + else: + usertable = User() + usertable.userid = userid + usertable.password = password + + db.session.add(usertable) + db.session.commit() + return make_response("회원가입 성공", 200) +def check_password(password): + # 3종 이상 문자로 구성된 8자리 이상 패스워드 검사 정규식 적용 + PT1 = re.compile('^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$') + PT2 = re.compile('^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$') + PT3 = re.compile('^(?=.*[A-Z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$') + PT4 = re.compile('^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$') + PT5 = re.compile('^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$') + PT6 = re.compile('^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$') + # 문자 구성 상관없이 10자리 이상 패스워드 검사 정규식 + PT7 = re.compile('^[A-Za-z\d!@#$%^&*]{10,}$') + for pattern in [PT1, PT2, PT3, PT4, PT5, PT6, PT7]: + if pattern.match(password): + return True + return False +``` + +-Django 프레임워크의 VALIDATORS 사용 +Django에서는 미들웨어의 AUTH_PASSWORD_VALIDATORS 설정에서 패스워드에 대한 검증을 지원하며, +기본적으로 아래와 같은 검증을 수행한다. +-UserAttributeSimilarityValidator : 패스워드가 사용자의 다른 속성값(이름, 성, 이메일)등과의 유사도 확인 +-MinimumLengthValidator : 패스워드 길이의 최소값 확인(default 8) +-CommonPasswordValidator : 사람들이 가장 많이 사용하는 패스워드 20,000개에 해당하는지 확인 +-NumericPasswordValidator : 패스워드가 숫자로만 구성되어있는지 확인 +기본 Validator 외에 필요한 추가 검증 기준이 있다면 사용자 정의 Validator를 생성한 후 +AUTH_PASSWORD_VALIDATORS에 등록해 적용 가능하다. 아래는 사용자 Validator 정의 예시를 보여 +준다(검증 통과 시 None 반환, 실패 시 ValidationError 발생하도록 구현 필요). + +**안전한 코드** + +```python +import re +from django.core.exceptions import ValidationError +from django.utils.translation import ugettext as _ +class CustomValidator(object): + def validate(self, password, user=None): + # 3종 이상 문자로 구성된 8자리 이상 패스워드 검사 정규식 + PT1 = re.compile('^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$') + PT2 = re.compile('^(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}$') + PT3 = re.compile('^(?=.*[A-Z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$') + PT4 = re.compile('^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$') + PT5 = re.compile('^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$') + PT6 = re.compile('^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$') + # 문자 구성 상관없이 10자리 이상 패스워드 검사 정규식 + PT7 = re.compile('^[A-Za-z\d!@#$%^&*]{10,}$') + for pattern in [PT1, PT2, PT3, PT4, PT5, PT6, PT7]: + if pattern.match(password): + return None + raise ValidationError( + _("패스워드 조합규칙에 적합하지 않습니다.."), + code='improper_password', + ) + def get_help_text(self): + return _( + "패스워드는 영문 대문자, 소문자, 숫자, 특수문자 조합 중 2가지 이상 8자리이거나 문자 구성 + 상관없이 10자리 이상이어야 합니다." + ) +``` + +#### 라. 참고자료 +- CWE-521: Weak Password Requirements, MITRE, +- [https://cwe.mitre.org/data/definitions/521.html](https://cwe.mitre.org/data/definitions/521.html) +- Authentication Cheat Sheet, OWASP, +- [https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html) +- Regular Expression HOWTO, Python Software Foundation, +- [https://docs.python.org/3/howto/regex.html](https://docs.python.org/3/howto/regex.html) +- Password management in Django, Django Software Foundation, +- [https://docs.djangoproject.com/en/4.0/topics/auth/passwords/](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/) + +### 10. 부적절한 전자서명 확인 +#### 가. 개요 + +![부적절한 전자서명 확인 개요](figures/python/signature_31.png) + +프로그램, 라이브러리, 코드의 전자서명에 대한 유효성 검증이 적절하지 않아 공격자의 악의적인 코드가 실행 +가능한 보안약점으로, 클라이언트와 서버 사이의 주요 데이터 전송, 파일 다운로드 시 발생할 수 있다. 데이터 +전송 또는 다운로드 시 함께 전달되는 전자서명은 원문 데이터의 암호화된 해시 값으로, 수신측에서 이 서명을 +검증해 데이터 변조 여부를 확인할 수 있다. 단순히 해시 기반 검증만 사용할 경우 해시 자체를 변조해 악성코드를 +전달할 수 있지만 전자서명을 사용하게 되면 원문 데이터에 대한 해시 자체도 안전하게 보호할 수 있다. +#### 나. 안전한 코딩기법 +주요 데이터 전송 또는 다운로드 시 데이터에 대한 전자서명을 함께 전송하고 수신측에서는 전달 받은 전자 +서명을 검증해 파일의 변조 여부를 확인해야 한다. + +#### 다. 코드예제 +다음은 송신측이 데이터와 함께 전달한 전자서명을 수신측에서 별도로 처리하지 않고 데이터를 그대로 신뢰해 +데이터 내부에 포함된 파이썬 코드가 실행되는 취약한 예시를 보여 준다. + +**안전하지 않은 코드** + +```python +import base64 +from Crypto.PublicKey import RSA +from Crypto.Hash import SHA256 +from Crypto.Signature import PKCS1_v1_5 as SIGNATURE_PKCS1_v1_5 +from Crypto.Cipher import PKCS1_v1_5, AES +from Crypto.Util.Padding import unpad +``` + +... +def verify_data(request): + # 클라이언트로부터 전달받은 데이터(전자서명을 수신 처리 하지 않음) + encrypted_code = request.POST.get("encrypted_msg", "") # 암호화된 파이썬 코드 + # 서버의 대칭키 로드 (송수신측이 대칭키를 이미 공유했다고 가정) + with open(f"{PATH}/keys/secret_key.out", "rb") as f: + secret_key = f.read() + # 대칭키로 클라이언트가 전달한 파이썬 코드 복호화 + # (decrypt_with_symmetric_key 함수는 임의의 함수명으로 세부적인 복호화 과정은 생략함) + origin_python_code = decrypt_with_symmetric_key(secret_key, encrypted_code) + # 클라이언트로부터 전달 받은 파이썬 코드 실행 + eval(origin_python_code) + return render( + request, + "/verify_success.html", + {"result": "파이썬 코드를 실행했습니다."}, + ) +중요한 정보 또는 기능 실행으로 연결되는 데이터를 전달하는 경우 반드시 전자서명을 함께 전송해야 하며, +수신측에서는 전자서명을 확인해 송신측에서 보낸 데이터의 무결성을 검증해야 한다. 만약 송수신 측 언어가 +다른 경우 사용한 암호 라이브러리에 따라 데이터 인코딩 방식에 차이가 있으니 반드시 코드 배포 전 서명 +검증에 필요한 복호화 과정이 정상적으로 잘 처리되는지 검증해야 한다. + +**안전한 코드** + +```python +# 전자서명 검증에 사용한 코드는 의존한 파이썬 패키지 및 송신측 언어에 따라 +# 달라질 수 있으며, 사전에 공유한 공개키로 복호화한 전자서명과 원본 데이터 해시값의 +# 일치 여부를 검사하는 코드를 포함 +def verify_digit_signature ( + origin_data: bytes, origin_signature: bytes, client_pub_key: str ) -> bool: + hashed_data = SHA256.new(origin_data) + signer = SIGNATURE_PKCS1_v1_5.new(RSA.importKey(client_pub_key)) + return signer.verify(hashed_data, base64.b64decode(origin_signature)) +def verify_data(request): + # 클라이언트로부터 전달받은 데이터 + encrypted_code = request.POST.get("encrypted_msg", "") # 암호화된 파이썬 코드 + encrypted_sig = request.POST.get("encrypted_sig", "") # 암호화된 전자서명 + + # 서버의 대칭(비밀)키 및 공개키 로드 + with open(f"/keys/secret_key.out", "rb") as f: + secret_key = f.read() + with open(f"/keys/public_key.out", "rb") as f: + public_key = f.read() + # 대칭키로 파이썬 코드 및 전자서명 복호화 + origin_python_code = decrypt_with_symmetric_key(symmetric_key, encrypted_code) + origin_signature = decrypt_with_symmetric_key(symmetric_key, encrypted_sig) + # 클라이언트의 공개키를 통해 파이썬 코드(원문)와 전자서명을 검증 + verify_result = verify_digit_signature(origin_python_code, origin_signature, client_pub_key) + # 전자서명 검증을 통과했다면 파이썬 코드 실행 + if verify_result: + eval(origin_python_code) + return render(request, "/verify_success.html", + {"result": "전자서명 검증 통과 및 파이썬 코드를 실행했습니다."}, + ) + else: + return render(request, "/verify_failed.html", + {"result": "전자서명 또는 파이썬 코드가 위/변조되었습니다."}, + ) +``` + +#### 라. 참고자료 +- CWE-347: Improper Verification of Cryptographic Signature, MITRE, +- [https://cwe.mitre.org/data/definitions/347.html](https://cwe.mitre.org/data/definitions/347.html) +- Security Consideration for Code Signing, NIST, +- [https://csrc.nist.gov/CSRC/media/Publications/white-paper/2018/01/26/security-considerations-for-code](https://csrc.nist.gov/CSRC/media/Publications/white-paper/2018/01/26/security-considerations-for-code) +-signing/final/documents/security-considerations-for-code-signing.pdf +- Verifying a signature, PyCryptodome. +- [https://www.pycryptodome.org/src/signature/signature?highlight=verify#verifying-a-signature](https://www.pycryptodome.org/src/signature/signature?highlight=verify#verifying-a-signature) + +### 11. 부적절한 인증서 유효성 검증 +#### 가. 개요 + +![부적절한 인증서 유효성 검증 개요](figures/python/certificate_32.png) + +인증서가 유효하지 않거나 악성인 경우 공격자가 호스트와 클라이언트 사이의 통신 구간을 가로채 신뢰하는 +엔티티 인 것처럼 속일 수 있다. 이로 인해 대상 호스트가 신뢰 가능한 것으로 믿고 악성 호스트에 연결하거나 +신뢰된 호스트로부터 전달받은 것처럼 보이는 스푸핑 된(또는 변조된 데이터)를 아무런 의심 없이 수신하는 +상황이 발생할 수 있다. +#### 나. 안전한 코딩기법 +데이터 통신에 인증서를 사용하는 경우 송신측에서 전달한 인증서가 유효한지 검증한 후 데이터를 송수신해야 +한다. 언어에서 기본으로 제공되는 검증 함수가 존재하지 않거나 일반적이지 않은 방식으로 인증서를 생성한 +경우 암호화 패키지를 사용해 별도의 검증 코드를 작성해야 한다. +#### 다. 코드예제 +다음은 SSL 기반 소켓 연결 예시로, 클라이언트 측에서 통신 대상 서버를 인증하지 않고 접속하는 상황을 +보여 준다. 이 경우 서버를 신뢰할 수 없으며 클라이언트 시스템에 영향을 주는 악성 데이터를 수신할 수 있다. + +**안전하지 않은 코드** + +```python +import os +import socket +import ssl +HOST, PORT = "127.0.0.1", 7917 +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + # 보안 정책 수동 설정 + context = ssl.SSLContext() + # SSLContext 생성자를 직접 호출할 때, CERT_NONE이 기본값 + # 상대방을 인증하지 않기 때문에 통신하고자하는 서버의 신뢰성을 보장할 수 없음 + context.verify_mode = ssl.CERT_NONE + with context.wrap_socket(sock) as ssock: + try: + ssock.connect((HOST, PORT)) + ssock.send("Hello I'm a vulnerable client :)".encode("utf-8")) + data = ssock.recv(1024).decode("utf-8") + print(f">> server from ({HOST}, {PORT}): {data}\n") + finally: + ssock.close() +``` + +SSL 연결 시 PROTOCOL_TLS_CLIENT 프로토콜을 추가해 인증서 유효성 검사와 호스트 이름 확인을 +위한 context를 구성하면 verify_mode가 CERT_REQUIRED로 설정되며 서버의 인증서 유효성을 검증할 수 있다. + +**안전한 코드** + +```python +import os +import socket +import ssl +``` + +CURRENT_PATH = os.getcwd() +HOST_NAME = "test-server" +HOST, PORT = "127.0.0.1", 7917 +SERVER_CA_PEM = f"{CURRENT_PATH}/rsa_server/CA.pem" # 서버로부터 전달받은 CA 인증서 +def connect_with_server(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: + # PROTOCOL_TLS_CLIENT 프로토콜을 추가하여 인증서 유효성 검사와 호스트 이름 확인을 위한 + # context를 구성. verify_mode가 CERT_REQUIRED로 설정됨 + # check_hostname이 True로 설정됨 + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + # 서버로부터 전달받은 CA 인증서를 context에 로드 + # CERT_REQUIRED로 인해 필수 + context.load_verify_locations(SERVER_CA_PEM) + # 호스트 이름(HOST_NAME)이 일치하지 않으면 통신 불가 + # 생성된 소켓과 context wrapping 시 server_hostname이 실제 서버에서 + # 등록(server.csr)한 호스트 명과 일치해야 함 + with context.wrap_socket(sock, server_hostname=HOST_NAME) as ssock: + try: + ssock.connect((HOST, PORT)) + ssock.send("Hello I'm a patched client :)".encode("utf-8")) + data = ssock.recv(1024).decode("utf-8") + print(f">> server from ({HOST}, {PORT}): {data}\n") + finally: + ssock.close() + +#### 라. 참고자료 +- CWE-295: Improper Certificate Validation, MITRE, +- [https://cwe.mitre.org/data/definitions/295.html](https://cwe.mitre.org/data/definitions/295.html) +- Identification and Authentication Failures, OWASP, +- [https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/](https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/) +- TLS/SSL Wrapper for Socket Object, Python documentation +- [https://docs.python.org/ko/3/library/ssl.html](https://docs.python.org/ko/3/library/ssl.html) +- Improper Certificate validation, AWS. +- [https://docs.aws.amazon.com/codeguru/detector-library/python/improper-certificate-validation/](https://docs.aws.amazon.com/codeguru/detector-library/python/improper-certificate-validation/) + +### 12. 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 +#### 가. 개요 + +![쿠키를 통한 정보 노출 개요](figures/python/cookie-exposure_33.png) + +대부분의 웹 응용프로그램에서 쿠키는 메모리에 상주하며, 브라우저가 종료되면 사라진다. 개발자가 원하는 +경우, 브라우저 세션에 관계없이 지속적으로 쿠키 값을 저장하도록 설정할 수 있다. 이 경우 정보는 디스크에 +기록되고 다음 브라우저 세션 시작 시 메모리에 로드 된다. 개인정보, 인증 정보 등이 이와 같은 영속적인 쿠키 +(Persistent Cookie)에 저장된다면, 공격자는 쿠키에 접근할 수 있는 보다 많은 기회를 가지게 되며, 이는 +시스템을 취약하게 만든다. +#### 나. 안전한 코딩기법 +쿠키의 만료시간은 세션 지속 시간을 고려하여 최소한으로 설정하고 영속적인 쿠키에는 사용자 권한 등급, +세션 ID 등 중요 정보가 포함되지 않도록 한다. +#### 다. 코드예제 +다음은 쿠키의 만료시간을 과도하게 길게 설정해 사용자 하드 디스크에 저장된 쿠키가 도용되는 상황을 보여 준다. + +**안전하지 않은 코드** + +```python +from django.http import HttpResponse +def remind_user_state(request): + res = HttpResponse() + # 쿠키의 만료시간을 1년으로 과도하게 길게 설정하고 있어 안전하지 않다 + res.set_cookie('rememberme', 1, max_age=60*60*24*365) + return res +``` + +만료 시간은 해당 기능에 맞춰 최소로 설정하고 영속적인 쿠키에는 중요 정보가 포함되지 않도록 한다. 쿠키를 +HTTPS를 통해서만 전송하도록 secure 속성값을 True(기본값은 False)를 사용할 수 있다. 클라이언트 측에서 +JavaScript를 통해 쿠키를 접근하지 못하도록 제한 하고자 할 경우엔 httpOnly 속성을 True(기본값은 False)로 +설정한다. 다음은 쿠키 만료 시간을 1시간으로 설정한 예시다. + +**안전한 코드** + +```python +from django.http import HttpResponse +def remind_user_state(request): + res = HttpResponse() + # 쿠키의 만료시간을 적절하게 부여하고 secure 및 httpOnly 옵션을 활성화 한다. + res.set_cookie('rememberme', 1, max_age=60*60, secure=True, httponly=True) + return res +``` + +Django에서는 settings.py에 아래와 같이 추가해 전역으로 설정할 수 있다. + +**안전한 코드** + +```python +from django.http import HttpResponse +from django.conf.global_settings import ( + SESSION_COOKIE_AGE, + SESSION_COOKIE_HTTPONLY, + SESSION_COOKIE_HTTPONLY, +) +""" +# settings.py +SESSION_COOKIE_AGE = 60 * 60 * 24 * 14 +SESSION_COOKIE_HTTPONLY = True +SESSION_COOKIE_SECURE = True +""" +def remind_user_state(request): + res = HttpResponse() + # 서버 세팅(setting.py)에서 default로 쿠키 옵션을 설정한 상태 + res.set_cookie( + "rememerme", + 1, + max_age=SESSION_COOKIE_AGE, + secure=SESSION_COOKIE_HTTPONLY, + httponly=SESSION_COOKIE_HTTPONLY, + ) + return res +``` + +#### 라. 참고자료 +- CWE-539: Use of Persistent Cookies Containing Sensitive Information, MITRE, +- [https://cwe.mitre.org/data/definitions/539.html](https://cwe.mitre.org/data/definitions/539.html) +- Expire and Max-Age Attributes, OWASP, +https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html +#expire-and-max-age-attributes +- HTTP state management, Python Software Foundation, +- [https://docs.python.org/ko/3/library/http.cookies.html](https://docs.python.org/ko/3/library/http.cookies.html) +- Django set_cookie, Django Software Foundation, +- [https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponse.set_cookie](https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponse.set_cookie) +- Django Settings, Django Software Foundation, +- [https://docs.djangoproject.com/en/4.0/ref/settings/#sessions](https://docs.djangoproject.com/en/4.0/ref/settings/#sessions) + +13. 주석문 안에 포함된 시스템 주요정보 +#### 가. 개요 + +![주석문 안에 포함된 시스템 주요정보 개요](figures/python/comment-info_34.png) + +소프트웨어 개발자가 편의를 위해서 주석문에 패스워드를 적어둔 경우 소프트웨어가 완성된 후에는 그것을 +제거하는 것이 매우 어렵게 된다. 만약 공격자가 소스코드에 접근할 수 있다면 시스템에 손쉽게 침입할 수 있다. +#### 나. 안전한 코딩기법 +주석에는 아이디, 패스워드 등 보안과 관련된 내용을 기입하지 않는다. +#### 다. 코드예제 +편리성을 위해 아이디, 패스워드 등 중요정보를 주석문 안에 작성 후 지우지 않는 경우 정보 노출 보안약점이 +발생한다. + +**안전하지 않은 코드** + +```python +def user_login(id, passwd): + # 주석문에 포함된 중요 시스템의 인증 정보 + # id = admin + # passwd = passw0rd + result = login(id, passwd) + return result +``` + +프로그램 개발 시에 주석문 등에 남겨놓은 사용자 계정이나 패스워드 등의 정보는 개발 완료 후 확실하게 +삭제해야 한다. + +**안전한 코드** + +```python +def user_login(id, passwd): + # 주석문에 포함된 민감한 정보는 삭제 + result = login(id, passwd) + return result +``` + +#### 라. 참고자료 +- CWE-615: Inclusion of Sensitive Information in Source Code Comments, MITRE, +- [https://cwe.mitre.org/data/definitions/615.html](https://cwe.mitre.org/data/definitions/615.html) + +### 14. 솔트 없이 일방향 해시 함수 사용 +#### 가. 개요 + +![솔트 없이 일방향 해시 함수 사용 개요](figures/python/unsalted-hash_35.png) + +패스워드와 같이 중요정보를 저장할 경우 가변 길이 데이터를 고정된 크기의 해시값으로 변환해주는 일방향 +해시함수를 이용해 저장할 수 있다. 만약 중요정보를 솔트(Salt)없이 일방향 해시함수를 사용해 저장한다면 +공격자는 미리 계산된 레인보우 테이블을 이용해 해시값을 알아낼 수 있다. +#### 나. 안전한 코딩기법 +패스워드와 같은 중요 정보를 저장할 경우 임의의 길이인 데이터를 고정된 크기의 해시값으로 변환해주는 +일방향 해시함수를 이용하여 저장한다. 또한 솔트값은 사용자별로 유일하게 생성해야 하며, 이를 위해 사용자별 +솔트 값을 별도로 저장하는 과정이 필요하다. +파이썬에서는 hashlib 라이브러리를 사용해 해시값을 생성할 수 있으며 salt 값은 os.urandom() 등 안전한 +난수 생성 라이브러리를 사용하여 생성해야 한다. +#### 다. 코드예제 +다음은 salt 없이 길이가 짧은 패스워드를 해시 함수에 전달해 원문이 공격자에 의해 쉽게 유추되는 예시를 보여 준다. + +**안전하지 않은 코드** + +```python +import hashlib +def get_hash_from_pwd(pw): + # salt 없이 생성된 해시값은 강도가 약해 취약하다 + h = hashlib.sha256(pw.encode()) + return h.digest() +``` + +짧은 길이의 패스워드로 강도 높은 해시값을 생성하기 위해서는 반드시 솔트 값을 함께 전달해야 한다. + +**안전한 코드** + +```python +import hashlib +import secrets +def get_hash_from_pwd(pw): + # 솔트 값을 사용하면 길이가 짧은 패스워드로도 고강도의 해시를 생성할 수 있다. + # 솔트 값은 사용자별로 유일하게 생성해야 하며, 패스워드와 함께 DB에 저장해야 한다 + salt = secrets.token_hex(32) + h = hashlib.sha256(salt.encode() + pw.encode()) + return h.digest(), salt +``` + +#### 라. 참고자료 +- CWE-759: Use of a One-Way Hash without a Salt, MITRE, +- [https://cwe.mitre.org/data/definitions/759.html](https://cwe.mitre.org/data/definitions/759.html) +- Password Storage Cheat Sheet – Salting, OWASP, +- [https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#salting](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#salting) +- hashlib – Secure hashes and message digests, Python Software Foundation, +- [https://docs.python.org/3/library/hashlib.html](https://docs.python.org/3/library/hashlib.html) +- secrets, Python Software Foundation, +- [https://docs.python.org/ko/3/library/secrets.html#module-secrets](https://docs.python.org/ko/3/library/secrets.html#module-secrets) + +### 15. 무결성 검사없는 코드 다운로드 +#### 가. 개요 + +![무결성 검사없는 코드 다운로드 개요](figures/python/integrity-check_36.png) + +원격지에 위치한 소스코드 또는 실행 파일을 무결성 검사 없이 다운로드 후 이를 실행하는 프로그램이 존재 +한다. 이러한 프로그램은 호스트 서버의 변조, DNS 스푸핑(Spoofing) 또는 전송 시의 코드 변조 등의 방법을 +이용해 공격자가 악의적인 코드를 실행하는 위협에 취약하게 된다. +파일(및 해당 소프트웨어) 무결성을 확인하는 두 가지 주요 방법으로는 암호화 해시 및 디지털 서명이 있다. +무결성을 보장하기 위해 해시를 사용하고 가능하면 적절한 코드 서명 인증서를 사용하고 확인하는 것이 더 +안전하다. +#### 나. 안전한 코딩기법 +DNS 스푸핑(Spoofing)을 방어할 수 있는 DNS lookup을 수행하고 코드 전송 시 신뢰할 수 있는 암호 +기법을 이용해 코드를 암호화한다. 또한 다운로드한 코드는 작업 수행을 위해 필요한 최소한의 권한으로 실행 +하도록 한다. +소스코드는 신뢰할 수 있는 사이트에서만 다운로드해야 하고 파일의 인증서 또는 해시값을 검사해 변조되지 +않은 파일인지 확인하여야 한다. +#### 다. 코드예제 +다음 예제는 requests.get을 통해 원격에서 파일을 다운로드한 뒤 파일에 대한 무결성 검사를 수행하지 않아 +파일 변조 등으로 인한 피해가 발생하는 사례를 보여 준다. 이 경우 공격자가 악의적인 코드를 실행할 수 있다. + +**안전하지 않은 코드** + +```python +import requests +def execute_remote_code(): + # 신뢰할 수 없는 사이트에서 코드를 다운로드 + url = "https://www.somewhere.com/storage/code.py" + # 원격 코드 다운로드 + file = requests.get(url) + remote_code = file.content + file_name = 'save.py' + with open(file_name, 'wb') as f: + f.write(file.content) + ...... +``` + +안전한 코드 실행을 위해 다운로드한 파일과 해당 파일의 해시값 비교 등을 통해 무결성 검사를 거치고 코드를 +실행해야 한다. + +**안전한 코드** + +```python +import requests +import hashlib +import configparser +def execute_remote_code(): + config = configparser.RawConfigParser() + config.read(‘sample_config.cfg’) + url = "https://www.somewhere.com/storage/code.py" + remote_code_hash = config.get('HASH', 'file_hash') + # 원격 코드 다운로드 + file = requests.get(url) + remote_code = file.content + sha = hashlib.sha256() + sha.update(remote_code) + # 다운로드 받은 파일의 해시값 검증 + if sha.hexdigest() != remote_code_hash: + raise Exception(‘파일이 손상되었습니다.’) + file_name = 'save.py' + with open(file_name, 'wb') as f + f.write(file.content) + ...... +``` + +#### 라. 참고자료 +- CWE-494: Download of Code Without Integrity Check, MITRE, +- [https://cwe.mitre.org/data/definitions/494.html](https://cwe.mitre.org/data/definitions/494.html) +- Secure hashes and message digests, Python Software Foundation, +- [https://docs.python.org/3/library/hashlib.html](https://docs.python.org/3/library/hashlib.html) +- Top 25 Series – Download of Code Without Integrity Check, SANS, +- [https://www.sans.org/blog/top-25-series-rank-20-download-of-code-without-integrity-check/](https://www.sans.org/blog/top-25-series-rank-20-download-of-code-without-integrity-check/) + +### 16. 반복된 인증시도 제한 기능 부재 +#### 가. 개요 + +![반복된 인증시도 제한 기능 부재 개요](figures/python/brute-force_37.png) + +일정 시간 내에 여러 번의 인증 시도 시 계정 잠금 또는 추가 인증 방법 등의 충분한 조치가 수행되지 않는 +경우 공격자는 성공할 법한 계정과 패스워드들을 사전(Dictionary)으로 만들고 무차별 대입(brute-force)하여 +로그인 성공 및 권한 획득이 가능하다. +Django는 사용자 인증 요청 횟수를 제어하지 않는다. 인증 시스템에 대한 무차별 대입 공격으로부터 보호하기 +위해 Django 플러그인(django-defender) 또는 웹 서버 모듈을 사용하여 요청을 제한할 수도 있다. +#### 나. 안전한 코딩기법 +최대 인증시도 횟수를 적절한 횟수로 제한하고 설정된 인증 실패 횟수를 초과할 경우 계정을 잠금 하거나 +추가적인 인증 과정을 거쳐서 시스템에 접근이 가능하도록 한다. 코드 상에서 인증시도 횟수를 제한하는 방법 +외에 CAPTCHA나 Two-Factor 인증 방법도 설계 시부터 고려해야 한다. +#### 다. 코드예제 +다음 예제는 사용자 로그인 시도에 대한 횟수를 제한하지 않는 코드를 보여 준다. + +**안전하지 않은 코드** + +```python +import hashlib +from django.shortcuts import render +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode(‘utf-8’)) + hashed_passwd = get_user_pw(user_id) + # 인증 시도에 따른 제한이 없어 반복적인 인증 시도가 가능 + if sha.hexdigest() == hashed_passwd: + return render(request, '/index.html', {'state':'login_success'}) + else: + return render(request, '/login.html', {'state':'login_failed'}) +``` + +다음은 사용자 로그인 시도에 대한 횟수를 제한하여 무차별 공격에 대응하는 방법을 보여 준다. + +**안전한 코드** + +```python +import hashlib +from django.shortcuts import render +from .models import LoginFail +LOGIN_TRY_LIMIT = 5 +def login(request): + user_id = request.POST.get('user_id', '') + user_pw = request.POST.get('user_pw', '') + sha = hashlib.sha256() + sha.update(user_pw.encode(‘utf-8’)) + hashed_passwd = get_user_pw(user_id) + if sha.hexdigest() == hashed_passwd: + # 로그인 성공 시 실패 횟수 삭제 + LoginFail.objects.filter(user_id=user_id).delete() + return render(request, '/index.html', {'state':'login_success'}) +``` + +**안전한 코드** + +```python + # 로그인 실패 기록 가져오기 + if LoginFail.objects.filter(user_id=user_id).exists(): + login_fail = LoginFail.objects.get(user_id=user_id) + COUNT = login_fail.count + else: + COUNT = 0 + if COUNT >= LOGIN_TRY_LIMIT: + # 로그인 실패횟수 초과로 인해 잠금된 계정에 대한 인증 시도 제한 + return render(request, "/account_lock.html", {"state": "account_lock"}) + else: + # 로그인 실패 횟수 DB 기록 + # 첫 시도라면 DB에 insert, + # 실패 기록이 존재한다면 update + LoginFail.objects.update_or_create( + user_id=user_id, + defaults={"count": COUNT + 1}, + ) + return render(request, "/login.html", {"state": "login_failed"}) +``` + +#### 라. 참고자료 +- CWE-307: Improper Restriction of Excessive Authentication Attempts, MITRE, +- [https://cwe.mitre.org/data/definitions/307.html](https://cwe.mitre.org/data/definitions/307.html) +- Blocking Brute Force Attacks, OWASP, +- [https://owasp.org/www-community/controls/Blocking_Brute_Force_Attacks](https://owasp.org/www-community/controls/Blocking_Brute_Force_Attacks) +- additional security topics, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/topics/security/#additional-security-topics](https://docs.djangoproject.com/en/3.2/topics/security/#additional-security-topics) +- Django-defender, +- [https://github.com/jazzband/django-defender](https://github.com/jazzband/django-defender) + +## 제3절 시간 및 상태 +동시 또는 거의 동시에 여러 코드 수행을 지원하는 병렬 시스템이나 하나 이상의 프로세스가 동작되는 환경에서 +시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안약점이다. +### 1. 경쟁조건: 검사시점과 사용시점(TOCTOU) +#### 가. 개요 + +![경쟁조건 TOCTOU 개요](figures/python/toctou_38.png) + +병렬시스템(멀티프로세스로 구현한 응용프로그램)에서는 자원(파일, 소켓 등)을 사용하기에 앞서 자원의 상태를 +검사한다. 하지만 자원을 사용하는 시점과 검사하는 시점이 다르기 때문에 검사하는 시점(Time Of Check)에 +존재하던 자원이 사용하던 시점(Time Of Use)에 사라지는 등 자원의 상태가 변하는 경우가 발생한다. +예를 들어 프로세스 A와 B가 존재하는 병렬시스템 환경에서 프로세스 A는 자원사용(파일 읽기)에 앞서 해당 +자원(파일)의 존재 여부를 검사(TOC) 한다. 이때는 프로세스 B가 해당 자원(파일)을 아직 사용(삭제)하지 않았기 +때문에 프로세스 A는 해당 자원(파일)이 존재한다고 판단한다. 그러나 프로세스 A가 자원 사용(파일읽기)을 +시도하는 시점(TOU)에 해당 자원(파일)은 사용불가능 상태이기 때문에 오류 등이 발생할 수 있다. + +이와 같이 하나의 자원에 대해 동시에 검사시점과 사용시점이 달라 생기는 보안약점으로 인해 동기화 오류뿐만 +아니라 교착상태 등과 같은 문제점이 발생할 수 있다. +파이썬에서는 멀티스레드 환경에서 공유 자원에 여러 쓰레드가 접근하는 것을 막기 위해 Lock 객체를 제공 +한다(자원의 상태를 잠금으로 변경하는 acquire() 메서드와 사용 중인 자원을 해제하는 release() 메서드). +#### 나. 안전한 코딩기법 +변수, 파일과 같은 공유자원을 여러 프로세스가 접근하여 사용할 경우 동기화 구문을 사용하여 한 번에 하나의 +프로세스만 접근 가능하도록 해야 하며 성능에 미치는 영향을 최소화하기 위해 임계영역(critical section) 주변만 +동기화 구문을 사용한다. +파이썬의 Lock 객체 사용 시 lock.acquire()로 자원을 잠그고 lock.release()로 자원을 해제해야 하며 이 +부분을 with 문을 사용해 간단하게 표현할 수 있다. +#### 다. 코드예제 +다음 예제는 공유된 파일을 사용할 때 파일을 불러온 후 실제로 파일을 사용하는 부분이 실행되기 전 짧은 +시간에도 다른 사용자 또는 프로그램에 의해 파일이 사라져 원하는 기능을 실행할 수 없는 경우를 보여 준다. + +**안전하지 않은 코드** + +```python +import os +import io +import datetime +import threading +def write_shared_file(filename, content): + # 멀티스레드 환경에서는 다른 사용자들의 작업에 따라 파일이 사라질 수 + # 있기 때문에 공유 자원에 대해서는 검사와 사용을 동시에 해야 한다. + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() +def start(): + filename = ‘./temp.txt’ + content = f“start time is {datetime.datetime.now()}” + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +다음은 파일 검사 후 파일이 삭제되거나 변동되는 것을 예방하기 위해 lock을 사용하여 각 쓰레드에서 공유 +자원에 접근하는 것을 통제 하는 예제 코드를 보여 준다. lock을 acquire하면 해당 쓰레드만 공유 데이터에 +접근 할 수 있고 lock을 release 해야만 다른 쓰레드에서 공유 데이터에 접근 할 수 있다. + +**안전한 코드** + +```python +import os +import io +import datetime +import threading +lock = threading.Lock() +def write_shared_file(filename, content): + # lock을 이용하여 여러 사용자가 동시에 파일에 접근하지 못하도록 제한 + with lock: + if os.path.isfile(filename) is True: + f = open(filename, 'w') + f.seek(0, io.SEEK_END) + f.write(content) + f.close() +def start(): + filename = ‘./temp.txt’ + content = f“start time is {datetime.datetime.now()}” + my_thread = threading.Thread(target=write_shared_file, args=(filename, content)) + my_thread.start() +``` + +#### 라. 참고자료 +- CWE-367: Time-of-check Time-of-use (TOCTOU) Race Condition, MITRE, +- [https://cwe.mitre.org/data/definitions/367.html](https://cwe.mitre.org/data/definitions/367.html) +- Thread-based parallelism, Python Software Foundation, +- [https://docs.python.org/3/library/threading.html](https://docs.python.org/3/library/threading.html) + +### 2. 종료되지 않는 반복문 또는 재귀 함수 +#### 가. 개요 + +![종료되지 않는 반복문 또는 재귀 함수 개요](figures/python/infinite-loop_39.png) + +재귀 함수의 순환 횟수를 제어하지 못해 할당된 메모리나 프로그램 스택 등의 자원을 개발자가 의도한 범위를 +과도하게 초과해 사용하면 위험하다. 대부분의 경우 기본 케이스(Base Case4))가 정의되어 있지 않은 재귀 +함수는 무한 루프에 빠져들게 되고 자원고갈을 유발함으로써 시스템의 정상적인 서비스를 제공할 수 없게 한다. +파이썬에서는 재귀 함수의 재귀 반복 제한(Recursion Depth Limit)이 적용되어 있어 무한루프가 발생하지 +않으나, setrecursionlimit() 함수를 사용해 임의로 최대 깊이를 변경해 사용하는 경우 재귀 함수 호출 횟수가 +과도하게 많아지지 않도록 주의해야 한다. +#### 나. 안전한 코딩기법 +모든 재귀 호출 시 호출 횟수를 제한하거나 재귀 함수 종료 조건을 명확히 정의해 호출을 제어해야 한다. +파이썬의 recursionlimit 제한은 스택 오버플로우 발생을 막기 위한 방법으로, recursionlimit 값을 과도하게 +큰 값으로 설정하지 않아야 한다. +#### 다. 코드예제 +다음 코드 예시의 factorial 함수는 함수 내부에서 자신을 호출하는 함수로 재귀문을 빠져 나오는 조건을 +정의하고 있지 않아 시스템 장애를 유발할 수 있다. +4) 기본 케이스(Base Case)는 재귀 호출을 하지 않고 반환하는 방법을 의미한다. + +**안전하지 않은 코드** + +```python +def factorial(num): + # 재귀함수 탈출조건을 설정하지 않아 동작 중 에러 발생 + return num * factorial(num – 1) +if __name__ == '__main__': + itr = 5 + result = factorial(itr) + print(str(itr) + ' 팩토리얼 값은 : ' + str(result)) +``` + +특정 조건 또는 횟수에 따라 재귀 코드 실행을 중단해 프로그램이 무한 반복에 빠지지 않도록 한다. + +**안전한 코드** + +```python +def factorial(num): + # 재귀함수 사용 시에는 탈출 조건을 명시해야 한다. + if (num == 0): + return 1 + else: + return num * factorial(num - 1) +if __name__ == '__main__': + itr = 5 + result = factorial(itr) + print(str(itr) + ' 팩토리얼 값은 : ' + str(result)) +``` + +파이썬의 재귀 반복 제한은 기본이 1000으로 설정되어 있다. Anaconda의 경우는 기본 값이 2000이다. +이 값을 과도하게 변경하지 않아야 한다. + +**안전한 코드** + +```python +import sys +sys.setrecursionlimit(1000) +``` + +#### 라. 참고자료 +- CWE-674: Uncontrolled Recursion, MITRE, +- [https://cwe.mitre.org/data/definitions/674.html](https://cwe.mitre.org/data/definitions/674.html) +- CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop'), MITRE, +- [https://cwe.mitre.org/data/definitions/835.html](https://cwe.mitre.org/data/definitions/835.html) +- sys.setrecursionlimit, Python Software Foundation, +- [https://docs.python.org/3/library/sys.html#sys.setrecursionlimit](https://docs.python.org/3/library/sys.html#sys.setrecursionlimit) + +## 제4절 에러처리 +에러를 처리하지 않거나 불충분하게 처리하여 에러 정보에 중요정보(시스템 내부정보 등)가 포함될 때 발생 +할 수 있는 보안약점이다. +### 1. 오류 메시지 정보노출 +#### 가. 개요 + +![오류 메시지 정보노출 개요](figures/python/error-info_40.png) + +응용 프로그램이 실행환경, 사용자 등 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성해 +외부에 제공하는 경우 공격자의 악성 행위로 이어질 수 있다. 예외발생 시 예외 이름이나 추적 메시지 +(traceback)를 출력하는 경우 프로그램 내부 구조를 쉽게 파악할 수 있기 때문이다. +Django 프레임워크와 Flask 프레임워크는 HTTP 오류 코드가 있는 요청을 처리하기 위한 사용자 에러 페이지 +핸들러를 제공한다. +#### 나. 안전한 코딩기법 +오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만 포함하도록 한다. 소스코드에서 예외 상황은 내부적 +으로 처리하고 사용자에게 시스템 내부 정보 등 민감한 정보를 포함하는 오류를 출력하지 않고 미리 정의된 +메시지를 제공하도록 설정한다. +Django 프레임워크에서는 urls.py에 사용자 정의 에러 페이지 핸들러를 정의할 수 있다. + +#### 다. 코드예제 +사용자 요청을 정상적으로 처리할 수 없는 경우 에러 페이지에 디버그 정보 또는 서버의 정보가 노출될 수 +있다. 어플리케이션 배포 시 DEBUG 모드를 True로 설정하고 배포할 경우에 아래와 같이 시스템의 주요 정보가 +노출될 수도 있다. Django는 DEBUG 모드를 False로 배포했을 경우 아래와 같이 사용자 에러 페이지를 설정 +하지 않으면 Django 기본 에러 페이지가 출력된다. + +**안전하지 않은 코드** + +```python +# config/urls.py +# 별도의 에러 페이지를 선언하지 않아 django의 기본 에러 페이지를 출력한다 +``` + +제공되는 에러 페이지 핸들러를 이용해 별도의 에러 페이지를 생성하여 사용자에게 표현하고 서버의 정보노출을 +최소화해야 한다. + +**안전한 코드** + +```python +# config/urls.py +from django.conf.urls import handler400, handler403, handler404, handler500 +# 사용자 정의 에러 페이지를 지정하고 +# views.py에 사용자 정의 에러 페이지에 대한 코드를 구현하여 사용한다 +handler400 = "blog.views.error400" +handler403 = "blog.views.error403" +handler404 = "blog.views.error404" +handler500 = "blog.views.error500“ +``` + +아래는 traceback을 사용하여 에러 스택을 표준 출력으로 표시해 정보가 노출되는 예제를 보여 준다. + +**안전하지 않은 코드** + +```python +import traceback +def fetch_url(url, useragent, referer=None, retries=1, dimension=False): + ...... + try: + response = requests.get( + url, + stream=True, + timeout=5, + headers={ 'User-Agent': useragent, 'Referer': referer }, + ) + ...... + except IOError: + # 에러메시지를 통해 스택 정보가 노출. + traceback.print_exc() +``` + +오류 처리 시 아래와 같이 에러 이름이나 에러 추적 정보가 노출되지 않도록 한다. + +**안전한 코드** + +```python +import logging +def fetch_url(url, useragent, referer=None, retries=1, dimension=False): + ...... + try: + response = requests.get(url, stream=True, timeout=5, headers={ + 'User-Agent': useragent, + 'Referer': referer, + }) +   ...... + except IOError: + # 에러 코드와 정보를 별도로 정의하고 최소 정보만 로깅 + logger.error('ERROR-01:통신에러') +``` + +#### 라. 참고자료 +- CWE-209: Generation of Error Message Containing Sensitive Information, MITRE +- [https://cwe.mitre.org/data/definitions/209.html](https://cwe.mitre.org/data/definitions/209.html) +- Improper Error Handling, OWASP, +- [https://owasp.org/www-community/Improper_Error_Handling](https://owasp.org/www-community/Improper_Error_Handling) +- Errors and Exceptions, Python Software Foundation, +- [https://docs.python.org/3/tutorial/errors.html](https://docs.python.org/3/tutorial/errors.html) +- Django Error views, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/ref/views/#error-views](https://docs.djangoproject.com/en/3.2/ref/views/#error-views) +- Flask Error Handlers, Flask +- [https://flask.palletsprojects.com/en/2.0.x/errorhandling/#error-handlers](https://flask.palletsprojects.com/en/2.0.x/errorhandling/#error-handlers) + +### 2. 오류상황 대응 부재 +#### 가. 개요 + +![오류상황 대응 부재 개요](figures/python/misc-p132_41.png) + +오류가 발생할 수 있는 부분을 확인하였으나 이러한 오류에 대해 예외 처리를 하지 않을 경우 공격자는 오류 +상황을 악용해 개발자가 의도하지 않은 방향으로 프로그램이 동작하도록 할 수 있다. +예외처리는 코드를 견고하게 만들고 프로그램 제어 실패로 인해 의도치 않은 중단으로 이어지는 잠재적인 +오류를 방지하는데 도움이 된다. +#### 나. 안전한 코딩기법 +오류가 발생할 수 있는 부분에 대하여 제어문(try-except)을 사용해 적절하게 예외 처리한다. +#### 다. 코드예제 +다음 예제는 try 블록에서 발생하는 오류를 포착(except)하고 있지만 그 오류에 대해서 아무 조치를 하지 +않는 상황을 보여준다. 아무 조치가 없으므로 프로그램이 계속 실행되기 때문에 개발자가 의도하지 않은 방향 +으로 프로그램이 동작할 수 있다. + +**안전하지 않은 코드** + +```python +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad +static_keys=[ + {'key' : b'\xb9J\xfd\xa9\xd2\xefD\x0b\x7f\xb2\xbcy\x9c\xf7\x9c', + ‘iv' : b'\xf1BZ\x06\x03TP\xd1\x8a\xad"\xdc\xc3\x08\x88\xda'}, + {'key' : b'Z\x01$.:\xd4u3~\xb6TS(\x08\xcc\xfc', + 'iv' : b'\xa1a=:\xba\xfczv]\xca\x83\x9485\x14\x17'}, +] +def encryption(key_id, plain_text): + static_key = {'key':b'0000000000000000', 'iv':b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + # key 선택 중 오류 발생 시 기본으로 설정된 암호화 키인 + # ‘0000000000000000’ 으로 암호화가 수행된다. + pass + cipher_aes = AES.new(static_key['key'],AES.MODE_CBC,static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +예외상황 발생 시에 프로그램이 개발자의 의도와 다르게 동작하지 않도록 반드시 예외 처리 구문을 추가해야 한다. + +**안전한 코드** + +```python +import base64 +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad +static_keys=[ + {'key' : b'\xb9J\xfd\xa9\xd2\xefD\x0b\x7f\xb2\xbcy\x9c\xf7\x9c', + ‘iv' : b'\xf1BZ\x06\x03TP\xd1\x8a\xad"\xdc\xc3\x08\x88\xda'}, + {'key' : b'Z\x01$.:\xd4u3~\xb6TS(\x08\xcc\xfc', + 'iv' : b'\xa1a=:\xba\xfczv]\xca\x83\x9485\x14\x17'}, +] +def encryption(key_id, plain_text): + static_key = {'key':b'0000000000000000', 'iv':b'0000000000000000'} + try: + static_key = static_keys[key_id] + except IndexError: + # key 선택 중 오류 발생 시 랜덤으로 암호화 키를 생성하도록 설정 + static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)} + static_keys.append(static_key) + cipher_aes = AES.new(static_key['key'],AES.MODE_CBC,static_key['iv']) + encrypted_data = base64.b64encode(cipher_aes.encrypt(pad(plain_text.encode(), 32))) + return encrypted_data.decode('ASCII') +``` + +#### 라. 참고자료 +- CWE-390: Detection of Error Condition Without Action, MITRE, +- [https://cwe.mitre.org/data/definitions/390.html](https://cwe.mitre.org/data/definitions/390.html) +- Errors and Exceptions, Python Software Foundation, +- [https://docs.python.org/3/tutorial/errors.html](https://docs.python.org/3/tutorial/errors.html) +- Built-in Exceptions, Python Software Foundation, +- [https://docs.python.org/3/library/exceptions.html](https://docs.python.org/3/library/exceptions.html) + +### 3. 부적절한 예외 처리 +#### 가. 개요 + +![부적절한 예외 처리 개요](figures/python/error-handling_42.png) + +프로그램 수행 중에 함수의 결과 값에 대한 적절한 처리 또는 예외 상황에 대한 조건을 적절하게 검사 하지 +않을 경우 예기치 않은 문제를 야기할 수 있다. +#### 나. 안전한 코딩기법 +값을 반환하는 모든 함수의 결과값을 검사해야 한다. 결과값이 개발자가 의도했던 값인지 검사하고 예외 처리를 +사용하는 경우에 광범위한 예외 처리 대신 구체적인 예외 처리를 수행한다. +#### 다. 코드예제 +다음 예제는 다양한 예외가 발생할 수 있음에도 불구하고 광범위한 예외 처리로 예외상황에 따른 적절한 +조치가 부적절한 사례를 보여 준다. + +**안전하지 않은 코드** + +```python +import sys +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + # 예외처리를 세분화 할 수 있음에도 광범위하게 사용하여 예기치 않은 + # 문제가 발생할 수 있다 + except: + print("Unexpected error ") +``` + +다음은 발생 가능한 예외를 세분화한 후 예외상황에 따라 적합한 처리한 예시를 보여 준다. + +**안전한 코드** + +```python +def get_content(): + try: + f = open('myfile.txt') + s = f.readline() + i = int(s.strip()) + # 발생할 수 있는 오류의 종류와 순서에 맞춰서 예외 처리 한다. + except FileNotFoundError: + print("file is not found") + except OSError: + print("cannot open file") + except ValueError: + print("Could not convert data to an integer.") +``` + +#### 라. 참고자료 +- CWE-754: Improper Check for Unusual or Exceptional Conditions, MITRE, +- [https://cwe.mitre.org/data/definitions/754.html](https://cwe.mitre.org/data/definitions/754.html) +- Errors and Exceptions, Python Software Foundation, +- [https://docs.python.org/3/tutorial/errors.html](https://docs.python.org/3/tutorial/errors.html) +- Built-in Exceptions, Python Software Foundation, +- [https://docs.python.org/3/library/exceptions.html](https://docs.python.org/3/library/exceptions.html) + +## 제5절 코드오류 +타입 변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발 +되는 보안약점이다. +### 1. Null Pointer 역참조 +#### 가. 개요 + +![Null Pointer 역참조 개요](figures/python/null-pointer_43.png) + +널 포인터(Null Pointer) 역참조는 '일반적으로 그 객체가 널(Null)이 될 수 없다'라고 하는 가정을 위반했을 +때 발생한다. 공격자가 의도적으로 널 포인터 역참조를 발생시키는 경우 공격자는 그 결과로 발생하는 예외 +상황을 이용해 추후 공격 계획에 활용할 수 있다. +파이썬에서는 Null pointer dereference가 발생하지 않는다. 파이썬에서는 Null 객체가 사용되지 않으며 +대신 None 키워드를 사용해 null 개체와 변수를 정의 한다. None은 다른 언어의 null과 동일한 기능을 수행 +하지 않으며 None이 0 또는 다른 값을 정의 하진 않는다. +#### 나. 안전한 코딩기법 +None을 반환하는 함수를 사용하면 None과 다른 값(예: 0이나 빈 문자열)이 조건문에서 False로 평가될 +수 있기 때문에 실수하기 쉽다. None이 될 수 있는 데이터를 참조하기 전에 해당 데이터의 값이 None 인지 +검사하여 시스템 오류를 줄일 수 있다. + +#### 다. 코드예제 +파이썬에서는 포인터를 사용하지는 않지만 데이터에 대한 적절한 검사를 수행하지 않을 경우 Null pointer와 +유사한 None 값 참조 오류를 범할 수 있다. + +**안전하지 않은 코드** + +```python +import os +from django.shortcuts import render +from xml.sax import make_parser +from xml.sax.handler import feature_namespaces +def parse_xml(request): + filename = request.POST.get('filename') + # filename의 None 체크를 하지 않아 에러 발생 가능 + if (filename.count('.') > 0): + name, ext = os.path.splitext(filename) + else: + ext = '' + if ext == ".xml": + parser = make_parser() + parser.setFeature(feature_namespaces, True) + handler = Handler() + parser.setContentHandler(handler) + parser.parse(filename) + result = handler.root + return render(request, "/success.html", {"result": result}) +``` + +참조하고자 하는 자원을 호출 시에는 반드시 개체가 None이 아닌지 검증해야 한다. + +**안전한 코드** + +```python +import os +from django.shortcuts import render +from xml.sax import make_parser +from xml.sax.handler import feature_namespaces +def parse_xml(request): + filename = request.POST.get('filename') + # filename이 None 인지 체크 + if filename is None or filename.strip() == "": + return render(request, "/error.html", {"error": "파일 이름이 없습니다."}) + if (filename.count('.') > 0): + name, ext = os.path.splitext(filename) + else: + ext = '' + if ext == ".xml": + parser = make_parser() + parser.setFeature(feature_namespaces, True) + handler = Handler() + parser.setContentHandler(handler) + parser.parse(filename) + result = handler.root + return render(request, "/success.html", {"result": result}) +``` + +#### 라. 참고자료 +- CWE-476: NULL Pointer Dereference, MITRE, +- [https://cwe.mitre.org/data/definitions/476.html](https://cwe.mitre.org/data/definitions/476.html) +- Null Dereference, OWASP, +- [https://owasp.org/www-community/vulnerabilities/Null_Dereference](https://owasp.org/www-community/vulnerabilities/Null_Dereference) +- Built-in Constants, Python Software Foundation, +- [https://docs.python.org/3/library/constants.html?#None](https://docs.python.org/3/library/constants.html?#None) + +### 2. 부적절한 자원 해제 +#### 가. 개요 + +![부적절한 자원 해제 개요](figures/python/resource-release_44.png) + +프로그램의 자원, 예를 들면 열려 있는 파일 식별자(Open File Descriptor), 힙 메모리(Heap Memory), +소켓(Socket) 등은 유한한 자원이다. 이러한 자원을 할당 받아 사용을 마치고 더 이상 사용하지 않는 경우에는 +적절히 반환해야 하는데, 프로그램 오류 또는 에러로 사용이 끝난 자원을 반환하지 못하는 경우에 문제가 발생 +할 수 있다. +#### 나. 안전한 코딩기법 +자원을 획득하여 사용한 다음에는 반드시 자원을 해제 후 반환한다. +#### 다. 코드예제 +다음은 try 구문 내의 코드 실행 중 오류가 발생할 경우 close() 메소드가 실행되지 않아 사용한 자원이 +반환되지 않는 경우를 보여 준다. + +**안전하지 않은 코드** + +```python +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + # 예외 발생 상황 가정 + raise Exception("Throwing the exception!") + # try 절에서 할당한 자원이 반환(close)되기 전에 + # 예외가 발생하면 할당된 자원이 시스템에 반환되지 않음 + f.close() + return lines + except Exception as e: + ... + return '' +``` + +예외 상황이 발생하여 함수가 종료될 때 예외의 발생 여부와 상관없이 항상 실행되는 finally 블록에서 할당 +받은 모든 자원을 반환해야 한다. + +**안전한 코드** + +```python +def get_config(): + lines = None + try: + f = open('config.cfg') + lines = f.readlines() + # 예외 발생 상황 가정 + raise Exception("Throwing the exception!") + except Exception as e: + ... + finally: + # try 절에서 할당한 자원은 + # finally 절에서 시스템에 반환을 해야 한다 + f.close() + return lines +``` + +다른 방법은 with 문을 사용해 파일을 처리하는 방법으로 with 문의 블록이 끝날 때 자동으로 파일 자원을 +반환하는 예시다. 이렇게 작성하면 with문 내의 코드에 예외가 발생하더라도 항상 파일 닫기가 보장된다. + +**안전한 코드** + +```python +# with 절을 빠져나갈 때 f를 시스템에 반환 +with open('config.cfg') as f: + print(f.read()) +``` + +#### 라. 참고자료 +- CWE-404: Improper Resource Shutdown or Release, MITRE, +- [https://cwe.mitre.org/data/definitions/404.html](https://cwe.mitre.org/data/definitions/404.html) +- Unreleased Resource, OWASP, +- [https://owasp.org/www-community/vulnerabilities/Unreleased_Resource](https://owasp.org/www-community/vulnerabilities/Unreleased_Resource) +- The With statement, Python Software Foundation, +- [https://docs.python.org/3/reference/compound_stmts.html#grammar-token-python-grammar-with_stmt](https://docs.python.org/3/reference/compound_stmts.html#grammar-token-python-grammar-with_stmt) + +3. 신뢰할 수 없는 데이터의 역직렬화 +#### 가. 개요 + +![신뢰할 수 없는 데이터의 역직렬화 개요](figures/python/deserialization_45.png) + +직렬화(Serialization)는 프로그램에서 특정 클래스의 현재 인스턴스 상태를 다른 서버로 전달하기 위해 클래스의 +인스턴스 정보를 바이트 스트림으로 복사하는 작업으로, 메모리상에서 실행되고 있는 객체의 상태를 그대로 +복제해 파일로 저장하거나 수신 측에 전달하게 된다. +역직렬화(Deserialization)는 반대 연산으로 바이너리 파일(Binary File) 이나 바이트 스트림(Byte Stream) +으로부터 객체 구조로 복원하는 과정이다. 이 때 송신자가 네트워크를 이용해 직렬화된 정보를 수신자에게 전달 +하는 과정에서 공격자가 전송한 데이터 또는 저장된 스트림을 조작할 수 있는 경우 신뢰할 수 없는 역직렬화로 +인한 무결성 침해, 원격 코드 실행, 서비스 거부 공격 등이 발생 할 수 있는 보안약점이다. +파이썬에서는 pickle 모듈을 통해 직렬화(pickle) 및 역직렬화(unpickle)를 수행할 수 있다. pickle 모듈은 +데이터 변조에 대한 검증 과정이 없기 때문에 임의의 코드를 실행하는 악의적인 pickle 데이터를 구성할 수 있어 +pickle을 사용해 역직렬화 하는 경우 hmac으로 데이터에 서명하거나 json 모듈을 사용하는 것을 고려해야 한다. +#### 나. 안전한 코딩기법 +초기화되지 않은 스택 메모리 영역의 변수는 임의값이라고 생각해서 대수롭지 않게 생각할 수 있으나 사실은 +이전 함수에서 사용되었던 내용을 포함하고 있다. 공격자는 이러한 약점을 사용하여 메모리에 저장되어 있는 +값을 읽거나 특정 코드를 실행할 수 있다. 모든 변수를 사용 전에 반드시 올바른 초기 값을 할당함으로서 이러한 +문제를 예방할 수 있다. + +신뢰할 수 없는 데이터를 역직렬화 하지 않도록 응용 프로그램을 구성한다. 민감 정보 또는 중요 정보 전송 시 +암호화 통신을 적용할 수 없는 경우 최소한 송신 측에서 서명을 추가하고 수신 측에서 서명을 확인하여 데이터의 +무결성을 검증해야 한다. 또는 신뢰할 수 있는 데이터의 식별을 위해 역직렬화 대상의 데이터가 사전에 검증된 +클래스(Class)만을 포함하는지 검증하거나 제한된 실행 권한만으로 역직렬화 코드를 실행해야 한다. +#### 다. 코드예제 +다음 예제는 신뢰할 수 없는 사용자로부터 입력 받은 코드를 역직렬화 하고 있는데, 이와 같은 코드는 개발자가 +의도하지 않은 임의 코드 실행으로 이어질 수 있다. + +**안전하지 않은 코드** + +```python +import pickle +from django.shortcuts import render +def load_user_object(request): + # 사용자로부터 입력받은 알 수 없는 데이터를 역직렬화 + pickled_userinfo = pickle.dump(request.POST.get('userinfo', '')) + # 역직렬화(unpickle) + user_obj = pickle.loads(pickled_userinfo) + return render(request, '/load_user_obj.html', {'obj':user_obj}) +``` + +아래 예제는 사용자로부터 전달받은 데이터를 HMAC을 이용하여 안전한 사용자로부터 온 것인지 검증한 후 +역직렬화 하고 있다. +이 밖에도 역직렬화된 데이터의 특정 부분만 필요로 하는 경우 JSON과 같은 텍스트 형태의 안전한 직렬화 +형식을 사용하는 것이 좋다. + +**안전한 코드** + +```python +import hmac +import hashlib +import pickle +from django.shortcuts import render +def load_user_object(request): + # 데이터 변조를 확인하기 위한 해시값 + hashed_pickle = request.POST.get("hashed_pickle", "") + # 사용자로부터 입력받은 데이터를 직렬화(pickle) + pickled_userinfo = pickle.dumps(request.POST.get("userinfo", "")) + # HMAC 검증을 위한 비밀키는 생성 + m = hmac.new(key="secret_key".encode("utf-8"), digestmod=hashlib.sha512) + # 직렬화된 사용자 입력값을 해싱 + m.update(pickled_userinfo) + # 전달받은 해시값(hashed_pickle)과 직렬화 데이터(userinfo)의 해시값을 비교하여 검증 + if hmac.compare_digest(str(m.digest()), hashed_pickle): + user_obj = pickle.loads(pickled_userinfo) + return render(request, "/load_user_obj.html", {"obj": user_obj}) + else: + return render(request, "/error.html", {"error": "신뢰할 수 없는 데이터입니다."} +``` + +#### 라. 참고자료 +- CWE-502: Deserialization of Untrusted Data, MITRE, +- [https://cwe.mitre.org/data/definitions/502.html](https://cwe.mitre.org/data/definitions/502.html) +- Deserialization Cheat Sheet, OWASP, +- [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html) +- Python object serialization, Python Software Foundation, +- [https://docs.python.org/3/library/pickle.html](https://docs.python.org/3/library/pickle.html) + +## 제6절 캡슐화 +중요한 데이터 또는 기능성을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생하는 보안약점으로 정보노출, +권한 문제 등이 발생할 수 있다. +### 1. 잘못된 세션에 의한 데이터 정보 노출 +#### 가. 개요 + +![잘못된 세션에 의한 데이터 정보 노출 개요](figures/python/session-leak_46.png) + +다중 스레드 환경에서는 싱글톤(Singleton) 객체 필드에 경쟁조건(Race Condition)이 발생할 수 있다. 따라서 +다중 스레드 환경에서는 정보를 저장하는 전역 변수가 포함되지 않도록 코드를 작성해 서로 다른 세션에서 +데이터를 공유하지 않도록 해야 한다. +#### 나. 안전한 코딩기법 +싱글톤 패턴을 사용하는 경우 변수 범위(Scope)에 주의를 기울여야 한다. 특히 다중 스레드 환경에서 클래스 +변수의 값은 하위 메소드와 공유되므로 필요한 경우 인스턴스 변수로 선언하여 사용한다. + +#### 다. 코드예제 +다중 스레드 환경에서 파이썬의 클래스 변수는 스레드 간 서로 공유하게 된다. 클래스 변수에 값을 할당할 +경우 서로 다른 세션 간에 데이터가 공유되어 의도하지 않은 데이터가 전달될 수 있다. + +**안전하지 않은 코드** + +```python +from django.shortcuts import render +class UserDescription: + user_name = '' + + def get_user_profile(self): + result = self.get_user_discription(UserDescription.user_name) + ...... + return result + def show_user_profile(self, request): + # 클래스변수는 다른 세션과 공유되는 값이기 때문에 멀티스레드 + # 환경에서 공유되지 않아야 할 자원을 사용하는 경우 + # 다른 스레드 세션에 의해 데이터가 노출될 수 있다 + UserDescription.user_name = request.POST.get(‘name’, ‘’) + self.user_profile = self.get_user_profile() + + return render(request, 'profile.html', {'profile':self.user_profile}) +``` + +공유가 금지된 변수는 인스턴스 변수로 선언하여 세션 간에 공유되지 않도록 한다. + +**안전한 코드** + +```python +from django.shortcuts import render +class UserDescription: + def get_user_profile(self): + result = self.get_user_discription(self.user_name) + ...... + return result + def show_user_profile(self, name): + # 인스턴스 변수로 사용해 스레드 간 공유되지 않도록 한다 + self.user_name = request.POST.get(‘name’, ‘’) + self.user_profile = self.get_user_profile() + + return render(request, 'profile.html', {'profile':self.user_profile}) +``` + +#### 라. 참고자료 +- CWE-488: Exposure of Data Element to Wrong Session, MITRE, +- [https://cwe.mitre.org/data/definitions/488.html](https://cwe.mitre.org/data/definitions/488.html) +- CWE-543: Use of Singleton Pattern Without Synchronization in a Multithreaded Context, MITRE, +- [https://cwe.mitre.org/data/definitions/543.html](https://cwe.mitre.org/data/definitions/543.html) +- The global statement, Python Software Foundation, +- [https://docs.python.org/3/reference/simple_stmts.html#global](https://docs.python.org/3/reference/simple_stmts.html#global) + +### 2. 제거되지 않고 남은 디버그 코드 +#### 가. 개요 + +![제거되지 않고 남은 디버그 코드 개요 1](figures/python/debug-code_47.png) + +![제거되지 않고 남은 디버그 코드 개요 2](figures/python/debug-code_48.png) + +디버깅 목적으로 삽입된 코드는 개발이 완료되면 제거해야 한다. 디버그 코드는 설정 등의 민감한 정보 또는 +의도하지 않은 시스템 제어로 이어질 수 있는 정보를 담고 있을 수 있다. 만일 디버그 코드가 남겨진 채로 +배포될 경우 공격자가 식별 과정을 우회하거나 의도하지 않은 정보 노출로 이어질 수 있다. +Django 프레임워크, Flask 프레임워크는 전역 수준에서 DEBUG 모드를 설정할 수 있다. DEBUG 모드를 +사용하면 브라우저에서 임의의 파이썬 코드를 실행할 수도 있고 파이썬에서 발생한 모든 오류가 출력되어 정보 +노출의 위험이 있다. 어플리케이션을 배포 전에 반드시 DEBUG 모드를 비활성화 해야 한다. +#### 나. 안전한 코딩기법 +소프트웨어 배포 전 반드시 디버그 코드를 확인 및 삭제한다. Django 프레임워크의 경우 전역 수준에서 +DEBUG 모드를 비활성화 하려면 settings.py 파일에 설정을 하고 Flask 프레임워크는 app_run() 전에 +debug = False로 설정하면 된다. + +#### 다. 코드예제 +다음은 Django의 미들웨어 세팅 파일인 settings.py 파일 예시로, 개발 시 사용된 DEBUG 옵션이 True로 +설정되어 있어 정보 노출의 위험이 있다. +**가) Django 예제** + +**안전하지 않은 코드** + +```python +from django.urls import reverse_lazy +from django.utils.text import format_lazy +DEBUG = True +ROOT_URLCONF = 'test.urls' +SITE_ID = 1 +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': ':memory:', + } +} +``` + +개발이 끝난 소스코드를 배포 및 운영할 경우에는 반드시 DEBUG 옵션을 False로 변경해야 한다. + +**안전한 코드** + +```python +from django.urls import reverse_lazy +from django.utils.text import format_lazy +DEBUG = False +ROOT_URLCONF = 'test.urls' +SITE_ID = 1 +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': ':memory:', + } +} +``` + +**나) Flask 예제** +다음은 Flask의 예제로, debug 모드가 True로 설정되어 정보 노출의 위험이 있다. + +**안전하지 않은 코드** + +```python +from flask import Flask +``` + +app = Flask(__name__) +# 디버그 모드 설정 방법1 +app.debug = True +@app.route('/') +def hello_world(): + return 'Hello World!' +if __name__ == '__main__': + app.run() + # 디버그 모드 설정 방법2 + app.run(debug=True) +마찬가지로 개발이 끝난 소스코드를 배포 및 운영 시 반드시 debug 옵션을 False로 변경해야 한다. + +**안전한 코드** + +```python +from flask import Flask +``` + +app = Flask(__name__) +app.debug = False +@app.route('/') +def hello_world(): + return 'Hello World!' +if __name__ == '__main__': + app.run() + app.run(debug=False) + +#### 라. 참고자료 +- CWE-489: Active Debug Code, MITRE, +- [https://cwe.mitre.org/data/definitions/489.html](https://cwe.mitre.org/data/definitions/489.html) +- Settings, Django Software Foundation, +- [https://docs.djangoproject.com/en/3.2/ref/settings/#debug](https://docs.djangoproject.com/en/3.2/ref/settings/#debug) +- Debug Mode, Flask, +- [https://flask.palletsprojects.com/en/2.0.x/quickstart/#debug-mode](https://flask.palletsprojects.com/en/2.0.x/quickstart/#debug-mode) + +### 3. Public 메소드로부터 반환된 Private 배열 +#### 가. 개요 + +![Public 메소드로부터 반환된 Private 배열 개요](figures/python/private-return_49.png) + +파이썬은 명시적인 private 선언이 없다. 하지만 대부분의 파이썬 코드가 따르는 규칙으로 이름 앞에 밑줄 +(예:__spam)로 시작하면 private 로 처리된다. public으로 선언된 메소드에서 배열을 반환하면 해당 배열의 +참조 객체가 외부에 공개되어 외부에서 배열 수정과 객체 속성 변경이 가능해진다. 이러한 속성은 배열 뿐만 +아니라 변경 가능한(mutable) 모든 객체에 해당된다. +구분 +표시 방법 +public +attribute, method는 기본적으로 public +protect +attribute, method 앞에 _(single underscore)를 붙여서 표시 함. +실제 제약 보다는 관례적임. +private +attribute, method 앞에 __(double underscore)를 붙여서 표시 함. +파이썬은 네임 맹글링(name mangling)으로 private 멤버에 _class__member로 접근은 가능하지만 +바람직하지 않음. +#### 나. 안전한 코딩기법 +private로 선언된 배열을 public으로 선언된 메소드로 반환하지 않도록 한다. private 배열에 대한 복사본을 +반환하도록 하고 배열의 원소에 대해서는 clone() 메소드를 통해 복사된 원소를 저장하도록 해서 private 선언된 +배열과 객체 속성에 대한 의도치 않은 수정을 방지한다. 만약 배열의 원소가 String 타입 등과 같이 변경이 +되지 않는 경우(immutable)에는 private 배열의 복사본을 만들고 이를 반환하도록 작성한다. +#### 다. 코드예제 +다음 예제는 private 변수를 생성하고 이를 반환하는 public 메소드를 사용하는 예시를 보여 준다. 이 경우 +외부에서 클래스 내에 숨겨져 있는 private 배열 값에 접근할 수 있는 문제점이 발생한다. + +**안전하지 않은 코드** + +```python +class UserObj: + __private_variable = [] + def __init__(self): + pass + + # private 배열을 리턴하는 public 메소드를 사용하는 경우 취약함 + def get_private_member(self): + return self.__private_variable +``` + +아래 예제는 내부와 외부의 배열이 서로 참조되는 것을 예방하기 위해 [:]로 새로운 객체를 생성하여 값을 +반환하고 있다. + +**안전한 코드** + +```python +class UserObj: + __private_variable = [] + def __init__(self): + pass + + # private 배열을 반환하는 경우 [:]를 사용하여 외부와 내부의 + # 배열이 서로 참조되지 않도록 해야 한다 + def get_private_member(self): + return self.__private_variable[:] +``` + +#### 라. 참고자료 +- CWE-495: Private Data Structure Returned From A Public Method, MITRE, +- [https://cwe.mitre.org/data/definitions/495.html](https://cwe.mitre.org/data/definitions/495.html) +- Do not return references to private mutable class members, CERT, +- [https://wiki.sei.cmu.edu/confluence/display/java/OBJ05-J.+Do+not+return+references+to+private+mutable](https://wiki.sei.cmu.edu/confluence/display/java/OBJ05-J.+Do+not+return+references+to+private+mutable) ++class+members +- Shallow and deep copy operations, Python Software Foundation, +- [https://docs.python.org/3/library/copy.html](https://docs.python.org/3/library/copy.html) + +### 4. Private 배열에 Public 데이터 할당 +#### 가. 개요 + +![Private 배열에 Public 데이터 할당 개요](figures/python/public-assign_50.png) + +public으로 선언된 메소드의 인자가 private로 선언된 배열에 저장되면 private 배열을 외부에서 접근하여 +배열 수정과 객체 속성 변경이 가능해진다. +#### 나. 안전한 코딩기법 +public으로 선언된 메소드의 인자를 private 로 선언된 배열에 저장하지 않도록 한다. 사용자가 전달한 값으로 +클래스 외부에서 private 값을 변경해서는 안 되며, 필요한 경우 별도의 인스턴스 변수로 정의하거나 의도한 +기능이라면 전달된 값의 정상 여부를 검증한 후 적용해야 한다. +#### 다. 코드예제 +다음 예제는 __를 이용해서 파이썬의 내부 배열을 생성하고 외부 값을 대입하는 public 메소드를 사용하는 +예시를 보여 준다. 이 경우 특정 배열 타입에 따라 외부에서 private 배열을 변조할 수 있는 문제를 내포하고 있다. + +**안전하지 않은 코드** + +```python +class UserObj: + __private_variable = [] + def __init__(self): + pass + # private 배열에 외부 값을 바로 대입하는 public 메소드를 사용하는 + # 경우 취약하다 + def set_private_member(self, input_list): + self.__private_variable = input_list +``` + +아래 예제는 내부와 외부의 배열이 서로 참조되는 것을 예방하기 위해 [:]로 새로운 객체를 생성하여 값을 +대입하고 있다. + +**안전한 코드** + +```python +class UserObj: + def __init__(self): + self.__privateVariable = [] + + # private 배열에 외부 값을 바로 대입하는 경우 [:]를 사용하여 + # 외부와 내부의 배열이 서로 참조되지 않도록 해야 한다 + def set_private_member(self, input_list): + self.__privateVariable = input_list[:] +``` + +#### 라. 참고자료 +- CWE-496: Public Data Assigned to Private Array-Typed Field, MITRE, +- [https://cwe.mitre.org/data/definitions/496.html](https://cwe.mitre.org/data/definitions/496.html) +- Shallow and deep copy operations, Python Software Foundation, +- [https://docs.python.org/3/library/copy.html](https://docs.python.org/3/library/copy.html) +- Private Variables, Python Software Foundation, +- [https://docs.python.org/3/tutorial/classes.html#private-variables](https://docs.python.org/3/tutorial/classes.html#private-variables) + +## 제7절 API 오용 +의도된 사용에 반하는 방법으로 API를 사용하거나 보안에 취약한 API를 사용하여 발생할 수 있는 보안약점이다. +### 1. DNS lookup에 의존한 보안결정 +#### 가. 개요 + +![DNS lookup에 의존한 보안결정 개요](figures/python/dns-lookup_51.png) + +공격자가 DNS 엔트리를 속일 수 있으므로 도메인명에 의존에서 보안결정(인증 및 접근 통제 등)을 하지 +않아야 한다. 만약 로컬 DNS 서버의 캐시가 공격자에 의해 오염된 상황이라면 사용자와 특정 서버 간의 네트워크 +트래픽이 공격자를 경유하도록 할 수도 있다. 또한 공격자가 마치 동일 도메인에 속한 서버인 것처럼 위장 할 +수도 있다. +#### 나. 안전한 코딩기법 +보안결정에서 도메인명을 이용한 DNS lookup을 하지 않도록 한다. + +#### 다. 코드예제 +다음의 예제는 도메인명을 통해 해당 요청을 신뢰할 수 있는지를 검사하는 예시로, 공격자는 DNS 캐쉬 등을 +조작해서 쉽게 이러한 보안 설정을 우회할 수 있다. + +**안전하지 않은 코드** + +```python +def is_trust(host_domain_name): + trusted = False + trusted_host = "trust.example.com" + # 공격자에 의해 실행되는 서버의 DNS가 변경될 수 있으므로 + # 안전하지 않다 + if trusted_host == host_name: + trusted = True + return trusted +``` + +도메인명을 이용한 비교를 하지 말고 IP 주소를 직접 비교하도록 수정해 코드를 안전하게 만들 수 있다. + +**안전한 코드** + +```python +import socket +def is_trust(host_domain_name): + trusted = False + trusted_ip = "192.168.10.7“ + # 실제 서버의 IP 주소를 비교하여 DNS 변조에 대응 + dns_resolved_ip = socket.gethostbyname(host_domain_name) + if trusted_ip == dns_resolved_ip: + trusted = True + return trusted +``` + +#### 라. 참고자료 +- CWE-350: Reliance on Reverse DNS Resolution for a Security-Critical Action, MITRE, +- [https://cwe.mitre.org/data/definitions/350.html](https://cwe.mitre.org/data/definitions/350.html) +- Socket, Python Software Foundation, +- [https://docs.python.org/3/library/socket.htm](https://docs.python.org/3/library/socket.htm) + +### 2. 취약한 API 사용 +#### 가. 개요 + +![취약한 API 사용 개요 1](figures/python/vulnerable-api_52.png) + +![취약한 API 사용 개요 2](figures/python/vulnerable-api_53.png) + +취약한 API는 보안상 금지된 함수이거나 부주의하게 사용될 가능성이 많은 API를 의미한다. 별도의 외부 +의존성 없이 언어 엔진에서 제공하는 기능만으로 큰 규모의 프로그램 제작이 용이한 C/C++과 같은 언어와 +달리, 파이썬은 외부 의존성을 기본으로 하는 생태계를 토대로 한다. 패키지(package)라고 부르는 모듈 집합을 +통해 서로 다른 제작자의 작업 결과물을 손쉽게 프로그램에 탑재하고 활용할 수 있다. 이러한 파이썬의 생태계는 +언어 활용성과 확장성 측면에서 굉장히 큰 이점을 가지고 있으며, 소프트웨어 개발의 접근성을 크게 높여주는데 +기여했다(파이썬 기본 설치 시 제공되는 엔진 코드도 패키지 형태로 코드에서 사용할 수 있다). +하지만 이러한 파이썬 언어의 특성은 잠재적인 보안 위협을 내포하고 있으며 주의하지 않을 경우 소프트웨어에 +심각한 문제를 가져다 줄 수 있다. 파이썬 패키지는 기본적으로 다른 개발자가 작성한 코드로, 의도적인 악성코드를 +포함할 수 있을뿐만 아니라 의도하지 않은 오류 또는 약점으로 인해 또 다른 보안 문제를 야기할 수 있다. +파이썬 패키지 설치에 사용되는 pip 도구는 파이썬 패키지 인덱스(PyPI)에 등록된 파이썬 패키지를 검색 +및 설치하는 도구로, 누구나 여기에 패키지를 등록해 배포할 수 있다. 물론 대부분의 경우 많은 오픈소스 개발자 +들의 피드백과 평점, 그리고 레퍼런스가 쌓인 패키지를 사용하겠지만, 이와는 별개로 그 누구도 패키지 내부에 +취약점이 없다는 보장을 할 수 없다. 안전하지 않은 것으로 알려진 패키지에 대해서는 PyPI에서 따로 그 목록을 +관리하지만, 잘 알려지지 않은 패키지로 인한 위험은 여전히 존재한다. +프로그램 코드에서 외부 패키지 사용 시 보안 문제가 발생하게 되는 원인을 크게 두 가지로 분류할 수 있다. + 첫 번째, 사용자 배포 패키지 내의 결함으로 인한 취약점 + 두 번째, 언어 엔진 자체의 결함으로 인한 취약점(기본 제공 패키지) + +사용자 배포 패키지 내의 결함은 말 그대로 패키지 코드 내에 보안 약점이 존재하는 경우를 의미한다. 많은 +경우 특정 함수의 데이터 처리 로직 문제로 의도된 조작값을 함수에 전달할 경우 보안취약점이 발생하는 방식 +으로 동작하며, 이는 개발자의 개발 방식에도 영향을 주게 된다. 완화 방안으로는 취약한 패키지를 사용하지 +않거나 취약한 버전을 사용하지 않거나, 함수 실행 전후 보호 루틴을 적용해 코드를 보호하는 방법이 있다. +언어 엔진 내부에서도 보안 결함이 지속적으로 발견되고 있다. 엔진 내부 결함은 대부분 개발자의 개발 방식에 +영향을 주지 않으며 취약점과 관련된 로직이 포함된 경우에만 문제가 될 수 있다. 엔진 결함은 해당 취약점이 +개선된 버전으로 Node.js 버전을 업데이트 해서 완화할 수 있다. +#### 나. 안전한 API 선택 +근본적인 대응 방법은 취약한 API를 코드에 사용하지 않는 것이다. 하지만 이는 파이썬 생태계에서는 적용이 +어려운 방법이며, 설령 안전한 것으로 판단된 API라고 하더라도 취약점이 발견되지 않으리라는 보장도 없다. +그렇다고 매번 새로운 패키지를 사용할 때마다 패키지 내에 보안 결함이 있는지 일일이 분석하는 것도 불가능한 +작업이다. 가장 현실적인 방법은 최초 패키지 사용 시 다음과 같은 내용을 검토해 패키지 사용 여부를 결정하는 +것이다. +- 사용 통계 : 얼마나 많은 사람들이 해당 패키지를 다운로드 했고, 선호하고 있는지 +- 이슈 관리 : 지속적으로 발견되는 버그 또는 이슈를 어떻게 처리하고 있는지 +- 마지막 버전 : 코드 유지관리가 잘 되고 있는지 +- 발견된 취약점 : 특정 버전에서 취약점이 발견 되었는지, 그리고 결함이 제거된 버전이 공개되어 있는지 + (프로그램 개발 완료 시점에 한 번 더 체크해 주어야 함) +많은 사람들이 사용하고 지속적인 이슈 관리 및 업데이트를 지원하는 패키지의 경우 상대적으로 보안 문제가 +발생할 확률이 낮으며, 설령 문제가 생겨도 빠르게 처리가 될 것이라고 생각할 수 있다. 이렇듯 가장 중요한 +부분은 패키지 관리 수준으로, 오픈소스의 특성 상 정식 벤더사들의 제품처럼 빠른 패치를 항상 기대할 수 없으며 +사용자 입장에서 이를 한 눈에 판단하기도 어려운 일이다. 참고를 위해 사용하고자 하는 패키지에 취약점이 +존재하는지 검색해 볼 수 있는 사이트를 몇 가지 제시해 본다. + +이름 +주소 +설명 +NIST(National Vulnerability +Database) +- [https://nvd.nist.gov/vuln/search](https://nvd.nist.gov/vuln/search) +미국국립표준기술연구소에서 제공하는 취약점 +검색 서비스 +CVEdetails +- [https://www.cvedetails.com](https://www.cvedetails.com) +CVE 정보 검색, 통계 확인 등을 제공하는 온라인 +서비스 +예를 들어 urllib 패키지를 사용하고 싶을 때 우선 NIST 데이터베이스에 urllib를 검색해 본다. 해당 키워드가 +포함된 취약점 코드 및 설명이 화면에 출력되고 사용하고자 하는 패키지와 일치하는 버전을 찾으면 된다. 만약 +현재 사용 중이거나 사용 예정인 패키지 버전에 영향을 주는 취약점이 발견될 경우 취약점이 패치된 버전을 +프로그램에 적용해야 한다. 만약 아직 보안 패치가 적용된 버전이 공개되지 않은 경우라면 다음 섹션인 ‘사후 +관리’에서 제시하는 방법과 절차에 따라 취약점 악용을 예방해야 한다. +앞서 제시한 방법을 통해 안전한 패키지를 선택할 수는 있지만, 이 과정이 취약점 발생 위협을 완전히 차단해 +주지는 못한다. 오픈소스 생태계는 지속적인 변화와 확장을 태생으로 하고 있으며 지속적인 관심과 체계적인 +관리를 통해 발생 가능한 취약점에 대비하고 대응해야 한다. + +#### 다. 사후 관리 + 모든 API는 보안 취약점에서 완전히 자유로울 수 없다. 안전한 API를 선택했더라도 지속적인 모니터링 및 +관리가 이루어지지 않으면 취약점 공격에 노출될 수 있다. 개발 제품에 오픈소스를 사용하는 경우 SBOM +(Software Bill of Material)을 적용해야 한다. SBOM은 소프트웨어 자제 명세서, 즉 모든 소프트웨어 정보를 +담고 있는 명세서를 의미한다. 물리적인 실체가 있는 제조 상품과 달리, 소프트웨어 공급자가 소프트웨어 전체 +를 모두 직접 개발하지 않으므로 문제 발생 시 이를 신속하게 찾아 해결하는 것이 매우 어렵다. SBOM은 코드 +에 포함된 모든 오픈소스 및 써드 파티 컴포넌트 목록이자 각 항목의 라이선스, 버전, 패치 상태 등을 제공해 +빠른 보안 이슈 및 라이선스 위험에 대응할 수 있게 해 주는 중요한 도구다. +미국 정부 주도 하에 진행된 연구를 토대로 NTIA(미국 전기통신 및 정보청)에서 SBOM 가이드 및 FAQ를 +공개했으며, 해당 가이드에서는 SBOM의 필수 구성요소로 다음과 같은 항목을 제시했다. +- 공급자 이름, 컴포넌트 이름, 컴포넌트 버전, 컴포넌트 해시, 고유 특성자(UID), 의존 관계, 작성자 +쉽게 말해서, 파이썬으로 개발한 소프트웨어에서 의존하는 모든 패키지에 대해 상기 내용을 별도의 자료로 +작성해서 관리해야 한다는 의미와 같다. SBOM 목록 내의 의존 패키지들에 대한 최신 보안 이슈 및 업데이트 +정보를 제공하는 서비스를 이용하거나 주기적인 목록 최신화를 통해 관련 내용을 지속적으로 업데이트 하는 +방법이 있다. 다음은 SBOM이 적용된 취약점 대응 프로세스 예시를 보여 준다. + +![SBOM 기반 취약점 대응 프로세스](figures/python/sbom_54.png) + +1) 신규 취약점 발생 인지 : 신규 취약점 모니터링 과정에서 발견된 신규 취약점 위협 정보 입수 +2) SBOM 목록 탐색 : 조직에서 운용 중인 제품의 SBOM 목록에 신규 취약점 관련 컴포넌트가 있는지 탐색 + +3) 취약점 발생 대응: SBOM 목록 내에 관련 컴포넌트가 존재하는 경우 + (1) 사내 정보 공유 : 취약점이 발생한 (또는 발생할 수 있는) 소프트웨어 관련 담당자에게 취약점 정보 +제공을 통해 상황을 인지시키고 발생 가능한 위험에 대비할 수 있도록 준비 + (2-1) 보안 솔루션 정책 반영 : (침입 탐지 제품을 이용 중인 경우) 제품단에서 취약점 악용 시도 및 공격을 +차단할 수 있도록 패턴 개발 및 반영 + (2-2) 소스코드 수정 / 예외처리 : 취약점이 존재하는 소프트웨어의 소스코드 관리 책임이 조직 내에 있는 +경우 해당 컴포넌트에서 취약점이 발생하지 않도록 또는 취약점 발생을 방지할 수 있는 임시 예외 +코드를 추가하고, 소스코드 관리 책임이 외부 업체 또는 기관에 있는 경우 상황 전파 및 대응 결과 회신 + (3) 패키지 업데이트 : 취약점이 존재하는 컴포넌트를 개발한 개발사 또는 조직에서 공개한 취약점 개선 +버전을 소프트웨어 패키지에 적용(업데이트) +4) SBOM 목록 최신화 : 취약점 개선 버전이 반영된 패키지의 세부 정보를 SBOM 목록에 반영 +소프트웨어 취약점을 완벽히 차단하는 방법은 없다. 특히 오픈소스의 경우 소스코드 내부에 대한 검토가 현실 +적으로 거의 불가능하므로 오픈소스 내의 취약점으로 인한 보안 위협은 특히 추적 및 관리가 어렵다. 따라서 +지속적인 모니터링 및 관리를 통해 소프트웨어를 보호하고 개선해야 한다. +#### 라. 참고자료 +- NTIA - SBOM, +- [https://www.ntia.gov/page/software-bill-materials](https://www.ntia.gov/page/software-bill-materials) +- CISA - SBOM, +- [https://www.cisa.gov/sbom](https://www.cisa.gov/sbom) + +# 제3장 부록 + +## 제1절 구현단계 보안약점 제거 기준 + +![구현단계 보안약점 제거 기준 요약](figures/python/misc-p165_55.png) + +1. 입력데이터 검증 및 표현 +번호 +보안약점 +설명 +SQL 삽입 +SQL 질의문을 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 질의문이 실행가능한 +보안약점 +코드 삽입 +프로세스가 외부 입력값을 코드(명령어)로 해석·실행할 수 있고 프로세스에 검증되지 않은 외부 +입력값을 허용한 경우 악의적인 코드가 실행 가능한 보안약점 +경로 조작 및 자원 삽입시스템 자원 접근경로 또는 자원제어 명령어에 검증되지 않은 외부 입력값을 허용하여 시스템 +자원에 무단 접근 및 악의적인 행위가 가능한 보안약점 +크로스사이트 스크립트사용자 브라우저에 검증되지 않은 외부 입력값을 허용하여 악의적인 스크립트가 실행 가능한 +보안약점 +운영체제 명령어 삽입 +운영체제 명령어를 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 명령어가 실행 +가능한 보안약점 +위험한 형식 파일 업로드파일의 확장자 등 파일형식에 대한 검증없이 파일 업로드를 허용하여 공격이 가능한 보안약점 +신뢰되지 않는 URL +주소로 자동접속 연결 +URL 링크 생성에 검증되지 않은 외부 입력값을 허용하여 악의적인 사이트로 자동 접속 가능한 +보안약점 +부적절한 XML +외부 개체 참조 +임의로 조작된 XML 외부개체에 대한 적절한 검증 없이 참조를 허용하여 공격이 가능한 보안약점 +XML 삽입 +XQuery, XPath 질의문을 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 질의문이 +실행 가능한 보안약점 +LDAP 삽입 +LDAP 명령문을 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 명령어가 실행 +가능한 보안약점 +크로스사이트 요청 위조사용자 브라우저에 검증되지 않은 외부 입력값을 허용하여 사용자 본인의 의지와는 무관하게 +공격자가 의도한 행위가 실행 가능한 보안약점 +서버사이드 요청 위조 +서버 간 처리되는 요청에 검증되지 않은 외부 입력값을 허용하여 공격자가 의도한 서버로 전송 +하거나 변조하는 보안약점 +HTTP 응답분할 +HTTP 응답헤더에 개행문자(CR이나 LF)가 포함된 검증되지 않은 외부 입력값을 허용하여 악의 +적인 코드가 실행 가능한 보안약점 +정수형 오버플로우 +정수형 변수에 저장된 값이 허용된 정수 값 범위를 벗어나 프로그램이 예기치 않게 동작 가능한 +보안약점 + +번호 +보안약점 +설명 +보안기능 결정에 사용 +되는 부적절한 입력값 +보안기능(인증, 권한부여 등) 결정에 검증되지 않은 외부 입력값을 허용하여 보안기능을 우회하는 +보안약점 +메모리 버퍼 오버플로우메모리 버퍼의 경계값을 넘어서 메모리값을 읽거나 저장하여 예기치 않은 결과가 발생하는 보안약점 +포맷 스트링 삽입 +str.format등 포맷 스트링 제어함수에 검증되지 않은 외부 입력값을 허용하여 발생하는 보안약점 +* 포맷 스트링: 입·출력에서 형식이나 형태를 지정해주는 문자열 +2. 보안기능 +번호 +보안약점 +설명 +적절한 인증 없는 +중요 기능 허용 +중요정보(금융정보, 개인정보, 인증정보 등)를 적절한 인증없이 열람(또는 변경) 가능한 +보안약점 +부적절한 인가 +중요자원에 접근할 때 적절한 제어가 없어 비인가자의 접근이 가능한 보안약점 +중요한 자원에 대한 +잘못된 권한 설정 +중요자원에 적절한 접근 권한을 부여하지 않아 중요정보가 노출·수정 가능한 보안약점 +취약한 암호화 +알고리즘 사용 +중요정보 (금융정보, 개인정보, 인증정보 등)의 기밀성을 보장할 수 없는 취약한 암호화 알 +고리즘을 사용하여 정보가 노출 가능한 보안약점 +암호화되지 않은 중요정보 +중요정보(패스워드, 개인정보 등) 전송 시 암호화 또는 안전한 통신채널을 이용하지 않거나, +저장 시 암호화 하지 않아 정보가 노출 가능한 보안약점 +하드코드된 중요정보 +소스코드에 중요정보(패스워드, 암호화키 등)를 직접 코딩하여 소스코드 유출 시 중요정보가 +노출되고 주기적 변경이 어려운 보안약점 +충분하지 않은 키 +길이 사용 +암호화 등에 사용되는 키의 길이가 충분하지 않아 데이터의 기밀성·무결성을 보장할 수 없는 +보안약점 +적절하지 않은 +난수 값 사용 +사용한 난수가 예측 가능하여, 공격자가 다음 난수를 예상해서 시스템을 공격 가능한 보안 +약점 +취약한 패스워드 허용 +패스워드 조합규칙(영문, 숫자, 특수문자 등) 미흡 및 길이가 충분하지 않아 패스워드가 +노출 가능한 보안약점 +부적절한 전자서명 확인 +프로그램, 라이브러리, 코드의 전자서명에 대한 유효성 검증이 적절하지 않아 공격자의 +악의적인 코드가 실행 가능한 보안약점 +부적절한 인증서 +유효성 검증 +인증서에 대한 유효성 검증이 적절하지 않아 발생하는 보안약점 +사용자 하드디스크에 저장되는 +쿠키를 통한 정보노출 +쿠키(세션 ID, 사용자 권한정보 등 중요정보)를 사용자 하드디스크에 저장하여 중요정보가 +노출 가능한 보안약점 +주석문 안에 포함된 +시스템 주요정보 +소스코드 주석문에 인증정보 등 시스템 주요정보가 포함되어 소스코드 노출 시 주요정보도 +노출 가능한 보안약점 +솔트 없이 일방향 +해시 함수 사용 +솔트를 사용하지 않고 생성된 해시 값으로부터 공격자가 미리 계산된 레인보우 테이블을 +이용하여 해시 적용 이전 원본 정보를 복원가능한 보안약점 +*솔트: 해시 적용하기 전 평문인 전송정보에 덧붙인 무의미한 데이터 +무결성 검사 없는 코드 +다운로드 +소스코드 또는 실행파일을 무결성 검사 없이 다운로드 받아 실행하는 경우, 공격자의 악의 +적인 코드가 실행 가능한 보안약점 +반복된 인증시도 +제한 기능 부재 +인증 시도 수를 제한하지 않아 공격자가 반복적으로 임의 값을 입력하여 계정 권한을 획득 +가능한 보안약점 + +3. 시간 및 상태 +번호 +보안약점 +설명 +경쟁조건 : 검사 시점과 +사용 시점 +멀티 프로세스 상에서 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안약점 +종료되지 않는 반복문 +또는 재귀함수 +종료조건 없는 제어문 사용으로 반복문 또는 재귀함수가 무한히 반복되어 발생할 수 있는 보안약점 +4. 에러처리 +번호 +보안약점 +설명 +오류 메시지 정보노출 +오류메시지나 스택정보에 시스템 내부구조가 포함되어 민감한 정보, 디버깅 정보가 노출 가능한 보안약점 +오류상황 대응 부재 +시스템 오류상황을 처리하지 않아 프로그램 실행정지 등 의도하지 않은 상황이 발생 가능한 보안약점 +부적절한 예외처리 +예외사항을 부적절하게 처리하여 의도하지 않은 상황이 발생 가능한 보안약점 +### 5. 코드오류 +번호 +보안약점 +설명 +Null Pointer 역참조 +변수의 주소 값이 Null인 객체를 참조하는 보안약점 +부적절한 자원 해제 +사용 완료된 자원을 해제하지 않아 자원이 고갈되어 새로운 입력을 처리할 수 없는 보안약점 +해제된 자원 사용 +메모리 등 해제된 자원을 참조하여 예기치 않은 오류가 발생하는 보안약점 +초기화되지 않은 +변수 사용 +변수를 초기화하지 않고 사용하여 예기치 않은 오류가 발생하는 보안약점 +신뢰할 수 없는 +데이터의 역직렬화 +악의적인 코드가 삽입·수정된 직렬화 데이터를 적절한 검증 없이 역직렬화하여 발생하는 보안약점 +* 직렬화: 객체를 전송 가능한 데이터형식으로 변환 +* 역직렬화: 직렬화된 데이터를 원래 객체로 복원 +6. 캡슐화 +번호 +보안약점 +설명 +잘못된 세션에 의한 +데이터 정보노출 +잘못된 세션에 의해 인가되지 않은 사용자에게 중요정보가 노출 가능한 보안약점 +제거되지 않고 남은 +디버그 코드 +디버깅을 위한 코드를 제거하지 않아 인가되지 않은 사용자에게 중요정보가 노출 가능한 보안약점 +Public 메서드로부터 +반환된 Private 배열 +Public으로 선언된 메소드에서 Private로 선언된 배열을 반환(return)하면 Private 배열의 주소 +값이 외부에 노출되어 해당 Private 배열값을 외부에서 수정 가능한 보안약점 +Private 배열에 Public +데이터 할당 +Public으로 선언된 데이터 또는 메소드의 인자가 Private로 선언된 배열에 저장되면 Private 배 +열을 외부에서 접근하여 수정 가능한 보안약점 +7. API 오용 +번호 +보안약점 +설명 +DNS lookup에 의존한 +보안결정 +도메인명 확인(DNS lookup)으로 보안결정을 수행할 때 악의적으로 변조된 DNS 정보로 예기치 +않은 보안위협에 노출되는 보안약점 +취약한 API 사용 +취약한 함수를 사용해서 예기치 않은 보안위협에 노출되는 보안약점 + +## 제2절 용어정리 + +![용어정리](figures/python/misc-p175_56.png) + +●Developer Economics State of the Developer Nation, 20th Edition +developernation.net에서 매년 165개국 30,000명 이상의 개발자들을 대상으로 설문조사를 하여 제공하고 있다. 웹, 모바일, +데스크톱, 클라우드, 산업용 IoT, 소비자 전자 제품, 임베디드소프트웨어, AR 및 VR등 다양한 분야의 설문을 실시하고 있다. +●AES(Advanced Encryption Standard) +미국 정부 표준으로 지정된 블록 암호 형식으로 이전의 DES를 대체하며, 미국 표준 기술 연구소 (NIST)가 5년의 표준화 +과정을 거쳐 2001년 11월 26일에 연방 정보처리표준(FIPS 197)으로 발표하였다. +●DES 알고리즘 +DES(Data Encryption Standard)암호는 암호화 키와 복호화키가 같은 대칭키 암호로 64비트의 암호화키를 사용한다. +전수공격(Brute Force)공격에 취약하다. +●HMAC(Hash-based Message Authentication Code) +해시 기반 메시지 인증 코드, MD5, SHA-1 등 반복적인 암호화 해시 기능을 비밀 공용키와 함께 사용하며, 체크섬을 +변경하는 것이 불가능하도록 한 키 기반의 메시지 인증 알고리즘이다. +●HTTPS(Hypertext Transfer Protocol over Secure Socket Layer) +WWW(월드 와이드 웹) 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. +●LDAP(Lightweight Directory Access Protocol) +TCP/IP 위에서 디렉토리 서비스를 조회하고 수정하는 응용 프로토콜이다. +●SHA(Secure Hash Algorithm) +해시알고리즘의 일종으로 MD5의 취약성을 대신하여 사용한다. SHA, SHA‐1, SHA‐2(SHA‐224, SHA‐256, SHA‐384, +SHA‐512) 등의 다양한 버전이 있으며, 암호 프로토콜인 TLS, SSL, PGP, SSH, IPSec 등에 사용된다. +●umask +파일 또는 디렉토리의 권한을 설정하기 위한 명령어이다. +●개인키(Private Key) +공개키 기반구조에서 개인키란 암·복호화를 위해 비밀 메시지를 교환하는 당사자만이 알고 있는 키이다. +●공개키(Public Key) +공개키는 지정된 인증기관에 의해 제공되는 키값으로서, 이 공개키로부터 생성된 개인키와 함께 결합되어, 메시지 및 전자 +서명의 암·복호화에 효과적으로 사용될 수 있다. 공개키를 사용하는 시스템을 공개키 기반구조(Public Key Infrastructure, +PKI)라 한다. +●경로순회(directory traversal) +상대경로 참조 방식(“./”,“../”등)을 이용해 다른 디렉토리의 중요파일에 접근하는 공격방법으로 경로 추적이라고도 한다. + +●동적 SQL(Dynamic SQL) +프로그램의 조건에 따라 SQL문이 다르게 생성되는 경우, 프로그램 실행 시에 전체 쿼리문이 완성되어 DB에 요청하는 +SQL문을 말한다. +●동적 쿼리(Dynamic Query) +컬럼이나 테이블명을 바꿔 SQL 쿼리를 실시간 생성해 DB에 전달하여 처리하는 방식이다. +●소프트웨어 개발보안 +소프트웨어 개발과정에서 개발자 실수, 논리적 오류 등으로 인해 소프트웨어에 내재된 보안취약점을 최소화하는 한편, +해킹 등 보안위협에 대응할 수 있는 안전한 소프트웨어를 개발하기 위한 일련 의 과정을 의미한다. 넓은 의미에서 소프트 +웨어 개발보안은 소프트웨어 생명주기의 각 단계별로 요구되는 보안활동을 모두 포함하며, 좁은 의미로는 SW개발과정에서 +소스코드를 작성하는 구현 단계에서 보안약점을 배제하기 위한 ‘시큐어코딩(Secure Coding)’을 의미한다. +●소프트웨어 보안약점 +소프트웨어 결함, 오류 등으로 해킹 등 사이버공격을 유발할 가능성이 있는 잠재적인 보안취약점을 말한다. +●싱글톤 패턴(Singleton Pattern) +하나의 프로그램 내에서 하나의 인스턴스만을 생성해야만 하는 패턴이다. Connection Pool, Thread Pool과 같이 Pool +형태로 관리되는 클래스의 경우 프로그램 내에서 단 하나의 인스턴트로 관리해야 하는 경우를 말함. 파이썬에서는 객체로 +제공된다. +●정적 쿼리(Static Query) +동적 쿼리와 달리 프로그램 소스코드에 이미 쿼리문이 완성된 형태로 고정되어 있다. +●해시함수 +주어진 원문에서 고정된 길이의 의사난수를 생성하는 연산기법이며, 생성된 값은 ‘해시값’이라고 한다. MD5, SHA, SHA‐1, +SHA‐256 등의 알고리즘이 있다. +●화이트 리스트(White List) +블랙리스트(Black List)의 반대개념으로 신뢰할 수 있는 사이트나 IP주소 목록을 말한다. +●장고 웹 프레임워크(Django Web Framework) +파이썬으로 작성된 오픈 소스 웹 프레임워크로, 모델(Model)-뷰(View)-컨트롤러(Controller)의 MVC패턴을 따르고 있다. +전통적인 MVC 디자인 패턴에서 이야기하는 컨트롤러의 기능을 프레임워크 자체에서 처리하기에 모델(Model), 템플릿 +(Template), 뷰(View)로 분류해 MTV 프레임워크라고 하기도 한다. 컴포넌트 재사용성과 플러그인화 가능성, 빠른 개발 +등을 강조하고 있다. +●플라스크 웹 프레임워크(Flask Web Framework) +파이썬으로 작성된 마이크로 웹 프레임워크의 하나이며, 특별한 도구나 라이브러리가 필요 없기 때문에 마이크로 프레임 +워크라고 부른다. + +●파싱(Parsing) +일련의 문자열을 의미 있는 token(어휘 분석의 단위)으로 분해하고 그것들로 이루어진 Parse tree를 만드는 과정이다. 어떤 +문장을 분석하거나 문법적 관계를 해석하는 행위를 말한다. +●파서(Parser) +컴파일러(compiler)의 일부로 컴파일러나 인터프리터(Interpreter)에서 원시 프로그램을 읽어 들여 그 문장의 구조를 알아 +내는 parsing(구문 분석)을 행하는 프로그램을 말한다. +●XML(eXtensible Markup Language) +W3C에서 개발되었으며, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용된다. 인터넷에 연결된 시스템끼리 데이터를 +쉽게 주고받을 수 있어 HTML의 한계를 극복할 목적으로 만들어졌다. +●DTD(Document Type Definition) +문서 타입 정의(DTD)는 XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의한다. +●Decorator +함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이다. 반복을 줄이고 메소드나 함수의 책임을 확장 +할 수 있으며 재사용이 가능하게 해준다. 파이썬에서 @로 시작하는 구문으로 표시한다. +●공개 키 인증서(Public Key Certificate) +공개키의 소유권을 증명하는데 사용되는 전자 문서이다. 키에대한 정보, 소유자의 신원에 대한 정보, 발급자의 디지털 +서명이 포함되어 있다. +●솔트(salt) +솔트는 해싱 처리 과정 중 각 패스워드에 추가되는 랜덤으로 생성된 유일한 문자열을 의미한다. diff --git "a/\353\254\270\354\204\234/figures/javascript/broken-crypto_33.png" "b/\353\254\270\354\204\234/figures/javascript/broken-crypto_33.png" new file mode 100644 index 0000000..adad0ee Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/broken-crypto_33.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/brute-force_50.png" "b/\353\254\270\354\204\234/figures/javascript/brute-force_50.png" new file mode 100644 index 0000000..5684681 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/brute-force_50.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/brute-force_51.png" "b/\353\254\270\354\204\234/figures/javascript/brute-force_51.png" new file mode 100644 index 0000000..ccf1ca0 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/brute-force_51.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/certificate_43.png" "b/\353\254\270\354\204\234/figures/javascript/certificate_43.png" new file mode 100644 index 0000000..ef0c3be Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/certificate_43.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/certificate_44.png" "b/\353\254\270\354\204\234/figures/javascript/certificate_44.png" new file mode 100644 index 0000000..11517a1 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/certificate_44.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/cleartext_34.png" "b/\353\254\270\354\204\234/figures/javascript/cleartext_34.png" new file mode 100644 index 0000000..72b58ba Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/cleartext_34.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/code-injection_05.png" "b/\353\254\270\354\204\234/figures/javascript/code-injection_05.png" new file mode 100644 index 0000000..47d0834 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/code-injection_05.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/code-injection_06.png" "b/\353\254\270\354\204\234/figures/javascript/code-injection_06.png" new file mode 100644 index 0000000..db9f9aa Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/code-injection_06.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/comment-info_47.png" "b/\353\254\270\354\204\234/figures/javascript/comment-info_47.png" new file mode 100644 index 0000000..f401bf9 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/comment-info_47.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/cookie-exposure_45.png" "b/\353\254\270\354\204\234/figures/javascript/cookie-exposure_45.png" new file mode 100644 index 0000000..86dcf7a Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/cookie-exposure_45.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/cookie-exposure_46.png" "b/\353\254\270\354\204\234/figures/javascript/cookie-exposure_46.png" new file mode 100644 index 0000000..1943f00 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/cookie-exposure_46.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/csrf_23.png" "b/\353\254\270\354\204\234/figures/javascript/csrf_23.png" new file mode 100644 index 0000000..80cb60d Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/csrf_23.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/csrf_24.png" "b/\353\254\270\354\204\234/figures/javascript/csrf_24.png" new file mode 100644 index 0000000..2ad08df Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/csrf_24.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/deserialization_61.png" "b/\353\254\270\354\204\234/figures/javascript/deserialization_61.png" new file mode 100644 index 0000000..3cd3a72 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/deserialization_61.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/dns-lookup_66.png" "b/\353\254\270\354\204\234/figures/javascript/dns-lookup_66.png" new file mode 100644 index 0000000..ce25766 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/dns-lookup_66.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/dns-lookup_67.png" "b/\353\254\270\354\204\234/figures/javascript/dns-lookup_67.png" new file mode 100644 index 0000000..8104448 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/dns-lookup_67.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/error-handling_56.png" "b/\353\254\270\354\204\234/figures/javascript/error-handling_56.png" new file mode 100644 index 0000000..2e55198 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/error-handling_56.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/error-info_54.png" "b/\353\254\270\354\204\234/figures/javascript/error-info_54.png" new file mode 100644 index 0000000..e8044b3 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/error-info_54.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/error-info_55.png" "b/\353\254\270\354\204\234/figures/javascript/error-info_55.png" new file mode 100644 index 0000000..838898c Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/error-info_55.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/file-upload_16.png" "b/\353\254\270\354\204\234/figures/javascript/file-upload_16.png" new file mode 100644 index 0000000..02358ae Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/file-upload_16.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/file-upload_17.png" "b/\353\254\270\354\204\234/figures/javascript/file-upload_17.png" new file mode 100644 index 0000000..426bd1f Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/file-upload_17.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/hardcoded-creds_35.png" "b/\353\254\270\354\204\234/figures/javascript/hardcoded-creds_35.png" new file mode 100644 index 0000000..cb85e02 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/hardcoded-creds_35.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/improper-auth_30.png" "b/\353\254\270\354\204\234/figures/javascript/improper-auth_30.png" new file mode 100644 index 0000000..9b9fccf Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/improper-auth_30.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/improper-auth_31.png" "b/\353\254\270\354\204\234/figures/javascript/improper-auth_31.png" new file mode 100644 index 0000000..ce0fdad Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/improper-auth_31.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/infinite-loop_52.png" "b/\353\254\270\354\204\234/figures/javascript/infinite-loop_52.png" new file mode 100644 index 0000000..c3f564f Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/infinite-loop_52.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/infinite-loop_53.png" "b/\353\254\270\354\204\234/figures/javascript/infinite-loop_53.png" new file mode 100644 index 0000000..7422ceb Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/infinite-loop_53.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/integrity-check_49.png" "b/\353\254\270\354\204\234/figures/javascript/integrity-check_49.png" new file mode 100644 index 0000000..d625800 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/integrity-check_49.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/key-length_36.png" "b/\353\254\270\354\204\234/figures/javascript/key-length_36.png" new file mode 100644 index 0000000..95f8f04 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/key-length_36.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/key-length_37.png" "b/\353\254\270\354\204\234/figures/javascript/key-length_37.png" new file mode 100644 index 0000000..44234d5 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/key-length_37.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/ldap-injection_22.png" "b/\353\254\270\354\204\234/figures/javascript/ldap-injection_22.png" new file mode 100644 index 0000000..f4a44ec Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/ldap-injection_22.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/missing-auth_29.png" "b/\353\254\270\354\204\234/figures/javascript/missing-auth_29.png" new file mode 100644 index 0000000..75462ea Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/missing-auth_29.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/null-pointer_57.png" "b/\353\254\270\354\204\234/figures/javascript/null-pointer_57.png" new file mode 100644 index 0000000..df6e355 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/null-pointer_57.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/open-redirect_18.png" "b/\353\254\270\354\204\234/figures/javascript/open-redirect_18.png" new file mode 100644 index 0000000..9ff2ea2 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/open-redirect_18.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/open-redirect_19.png" "b/\353\254\270\354\204\234/figures/javascript/open-redirect_19.png" new file mode 100644 index 0000000..3262da4 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/open-redirect_19.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/os-command-injection_14.png" "b/\353\254\270\354\204\234/figures/javascript/os-command-injection_14.png" new file mode 100644 index 0000000..422f23e Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/os-command-injection_14.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/os-command-injection_15.png" "b/\353\254\270\354\204\234/figures/javascript/os-command-injection_15.png" new file mode 100644 index 0000000..7201ec4 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/os-command-injection_15.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/path-traversal_07.png" "b/\353\254\270\354\204\234/figures/javascript/path-traversal_07.png" new file mode 100644 index 0000000..0e84dbc Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/path-traversal_07.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/permission_32.png" "b/\353\254\270\354\204\234/figures/javascript/permission_32.png" new file mode 100644 index 0000000..f021cae Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/permission_32.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/private-return_64.png" "b/\353\254\270\354\204\234/figures/javascript/private-return_64.png" new file mode 100644 index 0000000..a10c3af Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/private-return_64.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/public-assign_65.png" "b/\353\254\270\354\204\234/figures/javascript/public-assign_65.png" new file mode 100644 index 0000000..7a9fe96 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/public-assign_65.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/randomness_38.png" "b/\353\254\270\354\204\234/figures/javascript/randomness_38.png" new file mode 100644 index 0000000..30557cf Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/randomness_38.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/resource-release_58.png" "b/\353\254\270\354\204\234/figures/javascript/resource-release_58.png" new file mode 100644 index 0000000..5b4eb60 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/resource-release_58.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/resource-release_59.png" "b/\353\254\270\354\204\234/figures/javascript/resource-release_59.png" new file mode 100644 index 0000000..2d824ea Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/resource-release_59.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/resource-release_60.png" "b/\353\254\270\354\204\234/figures/javascript/resource-release_60.png" new file mode 100644 index 0000000..8e125f1 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/resource-release_60.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/sbom_69.png" "b/\353\254\270\354\204\234/figures/javascript/sbom_69.png" new file mode 100644 index 0000000..d0c5854 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/sbom_69.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/security-stats_01.png" "b/\353\254\270\354\204\234/figures/javascript/security-stats_01.png" new file mode 100644 index 0000000..a9d176c Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/security-stats_01.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/security-stats_02.png" "b/\353\254\270\354\204\234/figures/javascript/security-stats_02.png" new file mode 100644 index 0000000..c395181 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/security-stats_02.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/session-leak_62.png" "b/\353\254\270\354\204\234/figures/javascript/session-leak_62.png" new file mode 100644 index 0000000..ba11e08 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/session-leak_62.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/session-leak_63.png" "b/\353\254\270\354\204\234/figures/javascript/session-leak_63.png" new file mode 100644 index 0000000..61741fb Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/session-leak_63.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/signature_40.png" "b/\353\254\270\354\204\234/figures/javascript/signature_40.png" new file mode 100644 index 0000000..c541930 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/signature_40.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/signature_41.png" "b/\353\254\270\354\204\234/figures/javascript/signature_41.png" new file mode 100644 index 0000000..50ccc3f Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/signature_41.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/signature_42.png" "b/\353\254\270\354\204\234/figures/javascript/signature_42.png" new file mode 100644 index 0000000..ab4e6e1 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/signature_42.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/sql-injection_03.png" "b/\353\254\270\354\204\234/figures/javascript/sql-injection_03.png" new file mode 100644 index 0000000..69d37d2 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/sql-injection_03.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/sql-injection_04.png" "b/\353\254\270\354\204\234/figures/javascript/sql-injection_04.png" new file mode 100644 index 0000000..df6db8a Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/sql-injection_04.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/ssrf_25.png" "b/\353\254\270\354\204\234/figures/javascript/ssrf_25.png" new file mode 100644 index 0000000..7c7681b Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/ssrf_25.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/ssrf_26.png" "b/\353\254\270\354\204\234/figures/javascript/ssrf_26.png" new file mode 100644 index 0000000..da4b8a7 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/ssrf_26.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/stackoverflow-chart_00.png" "b/\353\254\270\354\204\234/figures/javascript/stackoverflow-chart_00.png" new file mode 100644 index 0000000..890d3b1 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/stackoverflow-chart_00.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/unsalted-hash_48.png" "b/\353\254\270\354\204\234/figures/javascript/unsalted-hash_48.png" new file mode 100644 index 0000000..abf7030 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/unsalted-hash_48.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/untrusted-input_27.png" "b/\353\254\270\354\204\234/figures/javascript/untrusted-input_27.png" new file mode 100644 index 0000000..117820e Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/untrusted-input_27.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/untrusted-input_28.png" "b/\353\254\270\354\204\234/figures/javascript/untrusted-input_28.png" new file mode 100644 index 0000000..0e75037 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/untrusted-input_28.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/vulnerable-api_68.png" "b/\353\254\270\354\204\234/figures/javascript/vulnerable-api_68.png" new file mode 100644 index 0000000..f168c5f Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/vulnerable-api_68.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/weak-password_39.png" "b/\353\254\270\354\204\234/figures/javascript/weak-password_39.png" new file mode 100644 index 0000000..9d54b02 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/weak-password_39.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/xss_08.png" "b/\353\254\270\354\204\234/figures/javascript/xss_08.png" new file mode 100644 index 0000000..07e9439 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/xss_08.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/xss_09.png" "b/\353\254\270\354\204\234/figures/javascript/xss_09.png" new file mode 100644 index 0000000..17d32dd Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/xss_09.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/xss_10.png" "b/\353\254\270\354\204\234/figures/javascript/xss_10.png" new file mode 100644 index 0000000..7f71682 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/xss_10.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/xss_11.png" "b/\353\254\270\354\204\234/figures/javascript/xss_11.png" new file mode 100644 index 0000000..158ac3d Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/xss_11.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/xss_12.png" "b/\353\254\270\354\204\234/figures/javascript/xss_12.png" new file mode 100644 index 0000000..5ea07a0 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/xss_12.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/xss_13.png" "b/\353\254\270\354\204\234/figures/javascript/xss_13.png" new file mode 100644 index 0000000..edb55c0 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/xss_13.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/xxe_20.png" "b/\353\254\270\354\204\234/figures/javascript/xxe_20.png" new file mode 100644 index 0000000..a0816fb Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/xxe_20.png" differ diff --git "a/\353\254\270\354\204\234/figures/javascript/xxe_21.png" "b/\353\254\270\354\204\234/figures/javascript/xxe_21.png" new file mode 100644 index 0000000..bf754ab Binary files /dev/null and "b/\353\254\270\354\204\234/figures/javascript/xxe_21.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/broken-crypto_25.png" "b/\353\254\270\354\204\234/figures/python/broken-crypto_25.png" new file mode 100644 index 0000000..8099bf3 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/broken-crypto_25.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/brute-force_37.png" "b/\353\254\270\354\204\234/figures/python/brute-force_37.png" new file mode 100644 index 0000000..ed0db55 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/brute-force_37.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/certificate_32.png" "b/\353\254\270\354\204\234/figures/python/certificate_32.png" new file mode 100644 index 0000000..c3aaf59 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/certificate_32.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/cleartext_26.png" "b/\353\254\270\354\204\234/figures/python/cleartext_26.png" new file mode 100644 index 0000000..9a3dcf4 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/cleartext_26.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/code-injection_05.png" "b/\353\254\270\354\204\234/figures/python/code-injection_05.png" new file mode 100644 index 0000000..7a31694 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/code-injection_05.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/comment-info_34.png" "b/\353\254\270\354\204\234/figures/python/comment-info_34.png" new file mode 100644 index 0000000..3f0077b Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/comment-info_34.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/cookie-exposure_33.png" "b/\353\254\270\354\204\234/figures/python/cookie-exposure_33.png" new file mode 100644 index 0000000..cd36f6c Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/cookie-exposure_33.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/csrf_16.png" "b/\353\254\270\354\204\234/figures/python/csrf_16.png" new file mode 100644 index 0000000..1ef577e Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/csrf_16.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/debug-code_47.png" "b/\353\254\270\354\204\234/figures/python/debug-code_47.png" new file mode 100644 index 0000000..7369e9c Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/debug-code_47.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/debug-code_48.png" "b/\353\254\270\354\204\234/figures/python/debug-code_48.png" new file mode 100644 index 0000000..a61f471 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/debug-code_48.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/deserialization_45.png" "b/\353\254\270\354\204\234/figures/python/deserialization_45.png" new file mode 100644 index 0000000..fede4b7 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/deserialization_45.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/dns-lookup_51.png" "b/\353\254\270\354\204\234/figures/python/dns-lookup_51.png" new file mode 100644 index 0000000..b7e31a9 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/dns-lookup_51.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/error-handling_42.png" "b/\353\254\270\354\204\234/figures/python/error-handling_42.png" new file mode 100644 index 0000000..092acf0 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/error-handling_42.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/error-info_40.png" "b/\353\254\270\354\204\234/figures/python/error-info_40.png" new file mode 100644 index 0000000..c5832eb Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/error-info_40.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/file-upload_12.png" "b/\353\254\270\354\204\234/figures/python/file-upload_12.png" new file mode 100644 index 0000000..d1bb2b5 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/file-upload_12.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/format-string_21.png" "b/\353\254\270\354\204\234/figures/python/format-string_21.png" new file mode 100644 index 0000000..0a97194 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/format-string_21.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/hardcoded-creds_27.png" "b/\353\254\270\354\204\234/figures/python/hardcoded-creds_27.png" new file mode 100644 index 0000000..025e6db Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/hardcoded-creds_27.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/http-splitting_18.png" "b/\353\254\270\354\204\234/figures/python/http-splitting_18.png" new file mode 100644 index 0000000..70679a9 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/http-splitting_18.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/improper-auth_23.png" "b/\353\254\270\354\204\234/figures/python/improper-auth_23.png" new file mode 100644 index 0000000..f1d0ac4 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/improper-auth_23.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/infinite-loop_39.png" "b/\353\254\270\354\204\234/figures/python/infinite-loop_39.png" new file mode 100644 index 0000000..ca96c15 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/infinite-loop_39.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/integer-overflow_19.png" "b/\353\254\270\354\204\234/figures/python/integer-overflow_19.png" new file mode 100644 index 0000000..35d5641 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/integer-overflow_19.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/integrity-check_36.png" "b/\353\254\270\354\204\234/figures/python/integrity-check_36.png" new file mode 100644 index 0000000..8134eca Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/integrity-check_36.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/key-length_28.png" "b/\353\254\270\354\204\234/figures/python/key-length_28.png" new file mode 100644 index 0000000..7a312d4 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/key-length_28.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/ldap-injection_15.png" "b/\353\254\270\354\204\234/figures/python/ldap-injection_15.png" new file mode 100644 index 0000000..974c7cd Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/ldap-injection_15.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/misc-p132_41.png" "b/\353\254\270\354\204\234/figures/python/misc-p132_41.png" new file mode 100644 index 0000000..6da0a96 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/misc-p132_41.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/misc-p165_55.png" "b/\353\254\270\354\204\234/figures/python/misc-p165_55.png" new file mode 100644 index 0000000..f27f832 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/misc-p165_55.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/misc-p175_56.png" "b/\353\254\270\354\204\234/figures/python/misc-p175_56.png" new file mode 100644 index 0000000..c5b54a5 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/misc-p175_56.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/misc-p1_00.png" "b/\353\254\270\354\204\234/figures/python/misc-p1_00.png" new file mode 100644 index 0000000..fa21bda Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/misc-p1_00.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/misc-p1_01.png" "b/\353\254\270\354\204\234/figures/python/misc-p1_01.png" new file mode 100644 index 0000000..6636dfd Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/misc-p1_01.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/misc-p9_02.png" "b/\353\254\270\354\204\234/figures/python/misc-p9_02.png" new file mode 100644 index 0000000..f4f52f9 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/misc-p9_02.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/missing-auth_22.png" "b/\353\254\270\354\204\234/figures/python/missing-auth_22.png" new file mode 100644 index 0000000..8bbdcb6 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/missing-auth_22.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/null-pointer_43.png" "b/\353\254\270\354\204\234/figures/python/null-pointer_43.png" new file mode 100644 index 0000000..f88201d Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/null-pointer_43.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/open-redirect_13.png" "b/\353\254\270\354\204\234/figures/python/open-redirect_13.png" new file mode 100644 index 0000000..bb8c64c Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/open-redirect_13.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/os-command-injection_11.png" "b/\353\254\270\354\204\234/figures/python/os-command-injection_11.png" new file mode 100644 index 0000000..b3e5e27 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/os-command-injection_11.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/path-traversal_06.png" "b/\353\254\270\354\204\234/figures/python/path-traversal_06.png" new file mode 100644 index 0000000..4487ed8 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/path-traversal_06.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/permission_24.png" "b/\353\254\270\354\204\234/figures/python/permission_24.png" new file mode 100644 index 0000000..84c13c8 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/permission_24.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/private-return_49.png" "b/\353\254\270\354\204\234/figures/python/private-return_49.png" new file mode 100644 index 0000000..e704ad9 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/private-return_49.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/public-assign_50.png" "b/\353\254\270\354\204\234/figures/python/public-assign_50.png" new file mode 100644 index 0000000..4ba724f Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/public-assign_50.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/randomness_29.png" "b/\353\254\270\354\204\234/figures/python/randomness_29.png" new file mode 100644 index 0000000..2d1093b Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/randomness_29.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/resource-release_44.png" "b/\353\254\270\354\204\234/figures/python/resource-release_44.png" new file mode 100644 index 0000000..d721022 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/resource-release_44.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/sbom_54.png" "b/\353\254\270\354\204\234/figures/python/sbom_54.png" new file mode 100644 index 0000000..0727b9e Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/sbom_54.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/session-leak_46.png" "b/\353\254\270\354\204\234/figures/python/session-leak_46.png" new file mode 100644 index 0000000..fbda29c Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/session-leak_46.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/signature_31.png" "b/\353\254\270\354\204\234/figures/python/signature_31.png" new file mode 100644 index 0000000..73c6905 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/signature_31.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/sql-injection_04.png" "b/\353\254\270\354\204\234/figures/python/sql-injection_04.png" new file mode 100644 index 0000000..17c028d Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/sql-injection_04.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/ssrf_17.png" "b/\353\254\270\354\204\234/figures/python/ssrf_17.png" new file mode 100644 index 0000000..0e6db56 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/ssrf_17.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/tiobe-chart_03.png" "b/\353\254\270\354\204\234/figures/python/tiobe-chart_03.png" new file mode 100644 index 0000000..e4cf91c Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/tiobe-chart_03.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/toctou_38.png" "b/\353\254\270\354\204\234/figures/python/toctou_38.png" new file mode 100644 index 0000000..176456b Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/toctou_38.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/unsalted-hash_35.png" "b/\353\254\270\354\204\234/figures/python/unsalted-hash_35.png" new file mode 100644 index 0000000..067475f Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/unsalted-hash_35.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/untrusted-input_20.png" "b/\353\254\270\354\204\234/figures/python/untrusted-input_20.png" new file mode 100644 index 0000000..2c0feba Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/untrusted-input_20.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/vulnerable-api_52.png" "b/\353\254\270\354\204\234/figures/python/vulnerable-api_52.png" new file mode 100644 index 0000000..8d7600e Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/vulnerable-api_52.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/vulnerable-api_53.png" "b/\353\254\270\354\204\234/figures/python/vulnerable-api_53.png" new file mode 100644 index 0000000..2b7ea28 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/vulnerable-api_53.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/weak-password_30.png" "b/\353\254\270\354\204\234/figures/python/weak-password_30.png" new file mode 100644 index 0000000..d1dd785 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/weak-password_30.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/xss_07.png" "b/\353\254\270\354\204\234/figures/python/xss_07.png" new file mode 100644 index 0000000..cbcc0d0 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/xss_07.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/xss_08.png" "b/\353\254\270\354\204\234/figures/python/xss_08.png" new file mode 100644 index 0000000..0faa30c Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/xss_08.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/xss_09.png" "b/\353\254\270\354\204\234/figures/python/xss_09.png" new file mode 100644 index 0000000..5c7bfc6 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/xss_09.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/xss_10.png" "b/\353\254\270\354\204\234/figures/python/xss_10.png" new file mode 100644 index 0000000..0816e9a Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/xss_10.png" differ diff --git "a/\353\254\270\354\204\234/figures/python/xxe_14.png" "b/\353\254\270\354\204\234/figures/python/xxe_14.png" new file mode 100644 index 0000000..d6af6f6 Binary files /dev/null and "b/\353\254\270\354\204\234/figures/python/xxe_14.png" differ diff --git "a/\353\254\270\354\204\234/\353\241\234\353\264\207_\353\263\264\354\225\210\353\252\250\353\215\270.md" "b/\353\254\270\354\204\234/\353\241\234\353\264\207_\353\263\264\354\225\210\353\252\250\353\215\270.md" new file mode 100644 index 0000000..8703484 --- /dev/null +++ "b/\353\254\270\354\204\234/\353\241\234\353\264\207_\353\263\264\354\225\210\353\252\250\353\215\270.md" @@ -0,0 +1,10343 @@ +# 로봇 보안모델(고도화).pdf + +> Converted: 2026-03-30 06:41 + + +--- + + + +--- + + + +--- + + + +--- + + + +--- + + + +--- + +6 +개요 +01 +1.1 +배경 +로봇 기술이 제조·의료·물류·서비스 등 다양한 산업 분야로 빠르게 확산되면서 산업용 로봇, 서비스용 +로봇, 의료용 로봇 등 여러가지 유형의 로봇이 일상과 산업 현장에서 다양하게 활용되고 있다. 특히 +사람의 개입이 필수적이었던 작업 환경에도 로봇과 AI를 통합해 실제 물리 세계를 인지하고 이를 +바탕으로 이해·추론·계획·행동까지 자율적으로 수행하는 피지컬 AI(Physical AI) 개념이 대두되면서 +각 산업에서 로봇 활용은 한층 더 가속화될 것으로 전망된다. +이러한 로봇을 대상으로 사이버공격이 발생할 경우, 생산 중단에 따른 경제적 손실, 의료 현장에 +있는 환자의 생명 위협 등 과거 단순한 IT 시스템의 장애와 달리 실제 물리적인 장비의 손상과 인명 +피해로까지 이어질 수 있다. 또한 일상생활에서는 각 가정 내 로봇 기기로 인해 심각한 프라이버시 +침해가 발생할 수도 있다. +현재 로봇만을 대상으로 하는 국내·외 사이버보안 규제는 별도로 마련되어 있지 않지만, 유럽에서는 +무선기기지침(RED, Radio Equipment Directive)을 통해 무선 기능을 포함한 디지털 장비에 +대한 보안요구사항이 의무화되었으며, 북미를 중심으로 산업제어시설, 자동차 산업 등 분야에서도 +사이버보안 규제 및 표준이 강화되는 추세다. 이러한 흐름을 고려할 때 로봇 분야 역시 향후 별도의 보안 +규제 체계가 구축될 가능성이 높으며, 제조사는 증가하는 사이버 위협과 미래 규제 요구에 선제적으로 +대응할 수 있는 보안 체계를 마련해야 한다. +이에 본 문서는 글로벌 사이버보안 규제를 분석하여 로봇 시스템에서 발생할 수 있는 위협을 사전에 +식별하여, 규제 요구사항을 충족할 수 있도록 로봇 제조사 및 운영자가 실질적으로 활용할 수 있는 +가이드를 제공하고자 한다. + + +--- + +7 +01 +02 +03 +04 +05 +1.2 +적용 범위 +본 문서는 로봇의 유형을 로봇 분류에 대한 국제표준(ISO8373)에 따라 산업용 로봇, 서비스용 로봇, +의료용 로봇으로 분류하고, 각 유형별로 보안위협과 보안요구사항을 정의하였으며 적용대상 및 범위는 +아래와 같다. +각 로봇 서비스 유형은 운용 특성에 따라 특화된 보안 요구사항을 가진다. +이를 통해 기본 보안 요구사항과 서비스 유형별 특화 보안 요구사항을 모두 포괄하는 통합 보안 모델을 +제시한다. 본 보안 모델의 적용 범위는 다음과 같다. +적용 대상 +구분 +세부 내용 +로봇 서비스 +산업용 로봇 +제조 공정 자동화 및 생산 라인 운용 +서비스용 로봇 +물류, 청소, 안내 등 상업 및 생활 지원 +의료용 로봇 +수술 보조, 재활 치료, 환자 케어 +구성요소 +로봇 단말 +제어기, 센서, 액추에이터 등 물리적 로봇 시스템 +통신 및 네트워크 +내부 통신 버스, 외부 네트워크 인터페이스 +로봇 소프트웨어 +펌웨어, 운영체제, 응용 프로그램 등 +연계 구성요소 +HMI, 원격 제어 장치, 통합 관제 시스템 등 +구분 +보안의 특성 +산업용 로봇 서비스 +제어 시스템의 안정성 및 안전성이 특히 중요 +서비스용 로봇 서비스 +이동성 및 외부 시스템 연동 보안이 특히 중요 +의료용 로봇 서비스 +데이터 무결성 및 시스템 신뢰성이 특히 중요 +적용 범위 +세부 내용 +로봇 서비스 라이프사이클 +로봇 서비스의 전체 라이프사이클(설계, 개발, 배포, 운용, 폐기) +로봇 연계 구간 +로봇과 연동되는 외부 시스템 간 인터페이스 +보안 영역 +물리적 보안, 네트워크 보안, 데이터 보안, 응용 보안 전 영역 +로봇 보안 모델 적용 대상 +로봇 서비스 별 주요 보안 특성 +로봇 보안 모델 적용 범위 + + +--- + + + +--- + +9 +01 +02 +03 +04 +05 +개요에서는 로봇 보안 모델 수립의 배경 및 필요성을 설명하고, 본 문서의 적용 범위와 구성을 제시한다. + +## 제1장 + +로봇 서비스별 구성에서는 로봇 서비스를 산업용·서비스용·의료용으로 분류한다. 로봇 서비스의 구성요소를 +하드웨어·네트워크·시스템 소프트웨어·응용 소프트웨어의 네 가지 속성으로 정의하고, 식별된 각 서비스의 +구성요소와 속성을 연계하여 보호 대상을 명확히 정의한다. + +## 제2장 + +로봇의 보안 위협에서는 로봇 시스템의 보안 목표를 기존 정보보호 3대 요소(기밀성·무결성·가용성)에 확장하여 +정확성·신뢰성·안전성(로봇 특화)을 포함한 여섯 가지로 정의한다. 하드웨어·네트워크·시스템 소프트웨어· +응용 소프트웨어 속성별로 발생 가능한 보안 위협을 식별하고, 각 로봇 서비스 유형의 구성요소별 상세 위협을 +분석한다. 식별된 위협을 기반으로 실제 발생 가능한 로봇 서비스 보안 위협 시나리오를 제시한다. + +## 제3장 + +보안 아키텍처에서는 식별된 위협에 대응하기 위한 보안 강화 방안을 제시한다. 국내외 규제·표준·가이드라인을 +기반으로 개발한 보안 취약점 점검 체크리스트를 11개 카테고리로 제시하고, 로봇 속성별 보안요구사항과 이를 +충족하기 위한 보안 솔루션 매핑을 정의한다. 아울러 각 로봇 서비스 유형(산업용·서비스용·의료용)의 구성요소별 +상세 보안요구사항을 제공하며, 전체 로봇 서비스 영역을 아우르는 통합 보안 구성도를 통해 체계적인 보안 +아키텍처를 제시한다. + +## 제4장 + +부록에서는 로봇 위협 및 보안 취약점 점검 체크리스트의 기반 근거, 로봇 보안위협 사례, 용어 및 약어 정의, 로봇 +기술 보안수칙 등 본 문서의 실무 적용을 돕기 위한 참고 자료를 수록한다. + +## 제5장 + + + +--- + + + +--- + + + +--- + +12 +로봇 서비스별 구성 +02 +본 장에서는 로봇 서비스의 보안에 대한 체계적인 접근을 위해 로봇 서비스를 유형별로 분류하고, +각 서비스 유형별 구성요소를 정의한다. +본 장의 목표는 로봇 서비스 유형별 특성을 파악하고, 보안 분석의 토대가 되는 로봇 서비스 구성요소 +분류 체계를 확립하는 데 있다. 이를 통해 로봇 서비스의 전체 구조를 정의하고, 각 구성요소에 대한 +보안 분석을 위한 명확한 기준을 제공한다. +2.1 +로봇 서비스 분류 +국제 표준(ISO 8373:2021)에 따라 로봇 서비스를 산업용, 서비스용, 의료용으로 분류하고 각각의 +정의와 특성을 제시한다. 유형별 주요 로봇, 운용 환경, 핵심 기능을 실제 사례와 함께 설명한다. + +### 2.4 로봇 서비스별 구성요소 + +각 서비스별 구성도를 통해 구성요소를 식별하고, 식별된 구성요소에 대한 속성을 매핑한다. + +### 2.2 로봇 서비스 통합 구성도 + +산업용, 서비스용, 의료용 로봇 서비스를 통합한 로봇 서비스 통합 구성도를 제시하고, 구성도를 응용 +서비스 계층, 내부망(기업·병원) 및 인터넷 망, 제어 계층, 제어망, 설비 및 로봇 계층 다섯 개의 계층으로 +분류하여 각 계층의 기능과 역할을 제시한다. +2.3 +로봇 서비스 속성 분류 +미국 연방 정부의 지원을 받는 사이버보안 관련 비영리 연구 조직인 MITRE의 임베디드 장치에 대한 +보안 프레임 워크 (EMB3D – Embedded Device Security) 프레임워크를 기반으로 로봇 서비스 +구성요소를 하드웨어, 네트워크, 시스템 및 응용 S/W 네 개의 속성으로 구분하는 분류 체계를 정의한다. + + +--- + +13 +01 +02 +03 +04 +05 + +#### 2.1.1 산업용 로봇 + +로봇의 용어에 대한 국제표준(ISO 8373:2021)에 따르면 로봇은 "이동, 조작 또는 위치 지정을 +수행하기 위해 일정 수준의 자율성을 갖춘 프로그래밍된 구동 메커니즘"으로 정의된다. +본 절에서는 ISO 8373:2021에서 정의한 로봇 유형 분류를 토대로, 실제 적용되는 서비스 환경과 +주요 보안 특성을 반영하여 로봇 서비스를 산업용 로봇, 서비스용 로봇, 의료용 로봇 세 가지 유형으로 +분류한다. +산업용 로봇은 "산업 자동화 응용 분야에서 사용되는 자동 제어 및 재프로그래밍 가능한 다목적 +조종장치"로 정의되며, 제조 공정 자동화 및 생산 라인 운용을 주목적으로 한다. 이는 고정형 또는 +이동형 플랫폼에 기반하여 3축 이상에서 프로그래밍 가능하며, 제조 환경에서 다양한 작업을 수행한다. +산업용 로봇은 금속 및 식품 가공, 물류 창고 팔레트 작업 등 다양한 분야에서 활용되나, 특히 자동차 및 +전자 산업에서 활용 비중이 가장 높다. 산업용 로봇의 제조·생산 환경 내 주요 활용 사례는 다음과 같다. +2.1 +로봇 서비스 분류 +구분 +설명 +사례 +스폿 용접 / +도장 로봇 +• 자동차 및 자동차 부품 제조와 같은 금속 부품에 +스폿 용접 작업(융접, 압접, 납땜)을 수행하고, 해당 +부위를 도장하는 작업을 수행한다. +• 일정한 품질을 보장하면서 작업자의 유해 환경 +노출을 감소시킨다. +[ 현대로보틱스(국내) ] +팔레타이징/ +디팔레타이징 +로봇 +• 물품을 팔레트에 체계적으로 쌓거나 (팔레타이징) +팔레트에서 꺼내는(디팔레타이징) 작업을 수행한다. +• 물류 창고 및 생산 현장에서 효율적인 물품 관리를 +가능하게 하며 작업 시간을 단축시킨다. +[ 푸른기술(국내) ] +픽앤플레이스 +(Pick & Place) +로봇 +• 특정 위치에서 물품을 집어 다른 위치에 정확하게 +배치하는 작업을 수행한다. +• 전자 부품 조립, 포장 등 반복적인 작업에서 높은 +정확도와 속도를 제공한다. +[ KUKA(독일) ] + + +![이미지 13-0](images/p0013_img0.png) + + +![이미지 13-1](images/p0013_img1.png) + + +![이미지 13-2](images/p0013_img2.png) + + +--- + +14 +휴머노이드 +로봇 +• 인간의 형태를 모방하여 두 발로 이동하고 두 팔을 +조작할 수 있도록 설계된 로봇이다. +• 사람과 협력하는 환경에서 다양한 작업을 수행할 수 +있는 잠재력을 가지고 있다. +[ 유니트리(중국) ] +주요 산업용 로봇 유형 + +#### 2.1.2 + +서비스용 로봇 +서비스 로봇은 "인간과 장비에 유용한 작업을 수행하기 위해 개인적 또는 전문적 용도로 사용되는 로봇" +으로 정의되며, 크게 개인 서비스 로봇과 전문 서비스 로봇으로 분류된다. +개인 서비스 로봇은 주로 비상업적 용도로 사용자의 일상생활을 지원하는 작업을 수행하며, 전문 서비스 +로봇은 특정 분야에서 주어진 기능을 수행한다. 최근에는 초기 도입 비용 절감을 위해 대여 및 구독 +방식으로 로봇 시스템을 제공하는 RaaS(Robotics as a Service) 기반 비즈니스 모델이 확대되고 +있다. +전문 서비스 로봇은 물류·이송, 접객(호텔 및 외식), 전문 청소, 농업, 보안·방범 등 다양한 분야에서 +활용되고 있다. 각 서비스 로봇의 주요 활용 사례는 다음과 같다. +구분 +설명 +사례 +물류 운송용 +자율이동로봇 +(AMR) +• 사람의 개입 없이 자율적으로 이동하며 창고나 공장 +내에서 물품을 운송한다. +• 유연한 경로 설정과 실시간 장애물 회피가 가능하여 +효율적인 물류 자동화를 실현한다. +[ 유진로봇(국내) ] +안내용 로봇 +• 병원, 전시회, 박물관 등에서 방문자에게 정보를 +제공하고 길을 안내하는 로봇. +• 자연어 처리, 터치스크린, 음성 인터페이스로 사용자와 +상호작용한다. +[ 라스테크(국내) ] + + +![이미지 14-0](images/p0014_img0.png) + + +![이미지 14-1](images/p0014_img1.png) + + +![이미지 14-2](images/p0014_img2.png) + + +--- + +15 +01 +02 +03 +04 +05 +경비·감시 로봇 +• 24시간 자율 순찰과 AI 기반 이상 징후 감지로 건물, +주차장, 캠퍼스의 보안을 담당한다. +• 360도 카메라, 열화상 카메라, 자동 충전 기능으로 +지속적인 보안 감시를 수행한다. +[ 도구공간(국내) ] +화재·재난 +대응 로봇 +• 극한의 화재 현장에서 소방대원을 대신하여 고압 +물분사, 위험 물질 처리, 구조 작업을 수행한다. +[ Boston Robotic(미국) ] +특수환경 로봇 +• 원자력 발전소, 광산, 극한 지형 등 인간이 접근하기 +어려운 환경에서 검사, 탐사, 데이터 수집을 수행한다. +• 뛰어난 기동성, 자율주행, 다양한 센서를 갖춘다. +[ 현대 자동차(국내) ] +주요 서비스용 로봇 유형 +의료용 로봇은 "의료 전기 장비 또는 의료 전기 시스템으로 적용되는 로봇"으로 정의되며, 산업용 및 +서비스용 로봇과 구별되는 독립적인 유형으로 분류된다. 이는 주로 수술 보조, 재활 치료, 환자 보살핌 +등 특수 의료 환경에서 환자의 생명 및 안전과 직결되는 임무를 수행한다. 의료용 로봇의 구체적인 활용 +사례는 다음과 같다. +구분 +설명 +사례 +수술용 로봇 +• 의료진을 보조하여 최소 침습 수술을 정밀하게 +수행한다. +• 의사는 원격 조종 콘솔에서 3D 영상을 보면서 로봇 +팔을 조종하여 작은 절개로 복잡한 수술을 안전하고 +정확하게 실시한다. +[ 인튜이티브(미국) ] +병원 물류 이송로봇 +(AMR) +• 병원 내부의 다양한 부서 간 검체, 의약품, 수술 도구, +멸균 물품 등을 운반한다. +[ 유진로봇(국내) ] + +#### 2.1.3 + +의료용 로봇 + + +![이미지 15-0](images/p0015_img0.png) + + +![이미지 15-1](images/p0015_img1.png) + + +![이미지 15-2](images/p0015_img2.png) + + +![이미지 15-3](images/p0015_img3.png) + + +![이미지 15-4](images/p0015_img4.png) + + +--- + +16 +재활 로봇 +• 뇌졸중, 척수손상, 근육질환 등으로 인한 마비 또는 +운동 기능 장애가 있는 환자의 재활을 지원한다. +[코스모로보틱스(국내) ] +주요 의료용 로봇 유형 +로봇 서비스 통합 구성도 +본 절에서는 산업용 로봇, 서비스용 로봇, 의료용 로봇의 실증 사례 및 구현 결과를 분석하여 로봇 +서비스 통합 구성도를 작성하였다. 본 로봇 서비스 통합 구성도는 최상위 응용 서비스 계층에서부터 +최하위 설비 및 로봇 계층까지 다섯 개의 계층으로 정의된다. +계층 +설명 +예시 +응용 서비스 +• 기업 내부 시스템(제조실행, 생산관리, 자원관리 등) +• ERP, WMS, MES, PACS, +EMR/EHR +기업 내부망 및 +인터넷 망 +• 응용 서비스와 제어 계층 간 네트워크 계층 +• 보안요구사항 및 규제에 따른 유연한 망 구성 +• 통신 방식 +- 이더넷, Wi-Fi, 5G/LTE +• 통신 프로토콜 +- MQTT, API, WebSocket + +### 2.2 로봇 서비스 통합 구성도 + + + +![이미지 16-0](images/p0016_img0.png) + + +![이미지 16-1](images/p0016_img1.png) + + +--- + +17 +01 +02 +03 +04 +05 +로봇 서비스 통합 구성도 DFD +다음은 로봇 서비스 구성요소간 통신 데이터 흐름을 다이어그램으로 나타낸 것이다. +제어 계층 +• 로봇의 움직임을 제어하는 계층 +• 로봇 센서로부터 지속적으로 상태 정보를 수집 +• 비상 상황 감지 시 즉시 로봇 중지 +• 로봇 관리 시스템(FMS), 디지털 트윈 S/W +• 다수/이기종 로봇 통합 관제 시스템 +• EWS, SCADA, PLC, RTU, 로봇 +제어반, HMI, 티칭 펜던트, FMS, +태블릿, 수술용 콘솔 +제어망 +• 제어 계층과 설비/로봇 계층 간 네트워크 계층 +• 실시간성 및 신뢰성 제공 +• 통신 방식 +- 산업용 이더넷, 필드버스, Wi-Fi, +2.4/5 GHz 무선, 제조사 전용 +케이블 +• 통신 프로토콜 +- PROFINET/PROFIBUS, +EtherCAT, Modbus TCP/RTU, +DeviceNet, CANopen, OPC UA, +ROS/ROS2 DDS, 제조사 전용 +프로토콜, MQTT +설비/로봇 계층 +• 물리적 작업을 수행하는 로봇 본체 및 주변 설비 +• 제어 계층의 명령을 받아 물리적 작업 수행 +• 로봇 구동부 및 센서, 제조설비 +로봇 서비스 통합 구성도 계층 구분 + + +![이미지 17-0](images/p0017_img0.png) + + +--- + +18 + +#### 2.3.1 하드웨어 + +본 절에서는 로봇 제조사를 대상으로 수행한 취약점 분석 및 보안취약점 점검 체크리스트 실증 결과에 +MITRE의 임베디드 장치에 대한 프레임워크(EMB3D, Embedded Device Security)를 적용하여, +로봇의 공통 속성을 하드웨어·네트워크·시스템 소프트웨어·응용 소프트웨어의 4가지 속성으로 +분류한다. +MITRE EMB3D는 임베디드 시스템과 IoT 디바이스의 보안 위협을 체계적으로 분석하기 위한 +프레임워크로, 로봇 시스템과 같이 물리적 구동부·제어 소프트웨어·네트워크 통신이 복합적으로 연계된 +환경에 적합한 자산 분류 체계를 제공한다. +하드웨어 속성은 로봇 시스템의 물리적 기반을 이루는 구성요소로 로봇 서비스의 특성을 고려하여 +다음과 같이 세부적으로 분류한다. +분류 +설명 +로봇 서비스에서 구성요소 +마이크로 프로세서 +컴퓨터 명령어를 해석하고 시스템의 연산과 제어를 수행 +하는 중앙 처리 장치이다. RTOS·펌웨어를 실행하며, 주변 +장치 제어 및 통신 처리를 담당한다. +• 로봇 제어기의 CPU, +마이크로컨트롤러(MCU) +• PLC/RTU의 프로세서 +• 센서 및 액추에이터 내장 프로세서 +외부 인터페이스 +센서, 액추에이터 등 외부 장치와 저속 직렬 통신을 수행 +하는 인터페이스이다. 하드웨어 간 데이터 교환의 중심 +역할을 한다. +• 센서 인터페이스 칩, 모터 드라이버 +칩 +• 통신 컨트롤러(CAN, EtherCAT, +PROFINET 컨트롤러) +• 내부 데이터 버스(I2C, SPI, PCIe) +내부 인터페이스 +펌웨어 추출, 테스트, 문제 해결을 위해 사용되는 하드웨어 +포트이다. 메모리 접근, 코드 업로드, 실행 제어가 가능하다. +• 디버깅 포트(UART, JTAG, SWD) +• 펌웨어 업데이트 포트 +• 진단 및 유지보수 포트 +메모리 및 저장 +장치 +시스템 펌웨어, 설정 파일, 로그 데이터 등을 저장하는 +비휘발성 메모리 구성요소와 실행 중인 프로세스의 데이 +터를 저장하는 휘발성 메모리를 포함한다. +• 펌웨어 저장용 플래시 메모리, +EEPROM +• 작업 메모리(RAM), 로그 저장 +장치 +• 설정 파일 및 프로그램 저장소, SD +카드, SSD +2.3 +로봇의 공통속성 + + +--- + +19 +01 +02 +03 +04 +05 + +#### 2.3.2 네트워크 + +네트워크 속성은 로봇 시스템 내부 및 외부와 통신을 담당하며 네트워크 장치, 통신 프로토콜, 네트워크 +서비스를 포함하며, 로봇 서비스의 특성을 고려하여 다음과 같이 세부적으로 분류할 수 있다. +분류 +설명 +세부 항목 +원격 네트워크 +서비스 +로봇 시스템이 외부에 제공하는 네트워크 기반 서비스로, +원격 모니터링, 제어, 데이터 전송 등의 기능을 수행한다. +• 웹 서버(HTTP/HTTPS), RESTful +API +• 원격 접속 서비스(SSH, Telnet, +VNC, RDP) +• 데이터 스트리밍 서비스(MQTT, +WebSocket) +• OPC UA 서버, DDS 서비스 +• 파일 전송 서비스(FTP, SFTP) +• 진단 및 모니터링 서비스 +네트워크 메시지 +전달 및 라우팅 기능 +로봇 시스템 내부 또는 외부 네트워크 간 데이터 패킷을 +전달하고 라우팅하는 기능을 수행한다. +• 산업용 이더넷 스위치 +• 라우터 +• 게이트웨이(Modbus/TCP, +PROFINET, EtherCAT) +• 프로토콜 변환기 +• 무선 액세스 포인트(Wi-Fi, 5G/ +LTE) +• 방화벽 및 NAT 장치 +• 네트워크 브리지 및 리피터 +확장 인터페이스 +로봇 시스템과 외부 장치 간의 물리적 연결 인터페이스로, +데이터 전송 및 제어 신호 교환을 담당한다. +• USB 포트, 직렬 통신 포트 +(RS-232/485) +• 이더넷 포트, 필드버스 커넥터 +• 티칭 펜던트 연결 포트, HMI +인터페이스 +하드웨어 속성 분류 +네트워크 속성 분류 + + +--- + +20 + +#### 2.3.3 시스템 소프트웨어 + +시스템 소프트웨어 속성은 로봇의 동작을 제어하고 관리하는 소프트웨어 구성요소를 포함하며 +로봇 서비스의 특성을 고려하여 다음과 같이 세부적으로 분류할 수 있다. +분류 +설명 및 보안 영향 +세부 항목 +부트로더 +시스템 전원 투입 시 하드웨어 초기화를 수행하고 운영체제 +또는 펌웨어를 메모리에 로드하는 소프트웨어이다. 부트로더 +변조는 시스템 전체의 무결성을 손상시킬 수 있다. +• 로봇 제어기 부트로더 +• PLC/RTU 부트로더 +• UEFI/BIOS +• U-Boot, GRUB +디버깅 기능 +소프트웨어 개발, 테스트, 문제 해결을 위한 디버깅 도구 +및 인터페이스이다. 디버깅 기능이 운영 환경에서 활성 +화된 경우 보안 위협이 될 수 있다. +• 진단 모드 및 테스트 모드 +운영체제/커널 +하드웨어 자원을 관리하고 응용 프로그램 실행 환경을 +제공하는 운영체제 및 커널이다. 커널 취약점은 시스템 +전체에 영향을 미칠 수 있다. +• 실시간 운영체제(RTOS: +VxWorks, QNX, FreeRTOS) +• Linux 커널(Ubuntu, Debian, +임베디드 Linux) +• Windows(Windows 10 IoT, +Windows Embedded) +가상화 및 컨테이너 +애플리케이션 격리 및 자원 관리를 위한 가상화 기술 및 +컨테이너 환경이다. 격리 실패 시 다른 환경으로의 공격 +전파가 가능하다. +• Docker, Kubernetes +• LXC/LXD 컨테이너 +• 하이퍼바이저(KVM, Xen, +VMware) +• ROS2의 컨테이너 기반 배포 +펌웨어/소프트웨어 +업데이트 +펌웨어 및 소프트웨어 업데이트 기능의 소프트웨어이다. +업데이트 미지원 시스템은 보안 패치 적용이 불가능하여 +알려진 취약점이 지속적으로 노출되며, 업데이트 지원 +시스템은 업데이트 과정의 보안이 중요하다. +• 미지원 +- 업데이트 불가능한 레거시 펌웨어, +고정형 ROM 기반 시스템, 단종된 +제품의 펌웨어 +• 지원 +- OTA(Over-The-Air) 업데이트, +펌웨어 업데이트 서비스, 패키지 +관리 시스템(apt, yum, pacman), +제조사 업데이트 도구 +시스템 로그 +시스템 이벤트, 오류, 보안 이벤트 등을 기록하는 로그 +시스템이다. 로그는 보안 모니터링 및 사고 분석에 필수 +적이다. +• 시스템 로그 +• 애플리케이션 로그 +• 보안 감사 로그 +• 이벤트 로그 +• 작업 이력 로그 +시스템 소프트웨어 속성 분류 + + +--- + +21 +01 +02 +03 +04 +05 + +#### 2.3.4 응용 소프트웨어 + +응용 소프트웨어 속성은 로봇 서비스에서 특정 작업과 기능을 수행하는 상위 계층 소프트웨어를 +포함하며 로봇 서비스의 특성을 고려하여 다음과 같이 세부적으로 분류할 수 있다. +분류 +설명 +세부 항목 +로봇 애플리케이션 +로봇 시스템에서 특정 작업을 수행하기 위해 실행되는 +애플리케이션 소프트웨어이다. 애플리케이션 취약점은 +시스템 전체의 보안에 영향을 미칠 수 있다. +• 모션 제어 소프트웨어 +• 경로 계획 및 내비게이션 +소프트웨어 +• 비전 처리 및 AI/ML 애플리케이션 +• 데이터 수집 및 분석 소프트웨어 +• 작업 스케줄링 소프트웨어 +사용자 정의 +프로그램 배포기능 +사용자가 작성한 커스텀 프로그램 또는 외부 바이너리를 +로봇 시스템에 배포하고 실행할 수 있는 기능이다. 악성 +프로그램 배포의 위험이 있다. +• 로봇 티칭 프로그램 +• 사용자 정의 스크립트 +• 컴파일된 바이너리 업로드 +• ROS 패키지 배포 +대화형 인터페이스 +사용자가 로봇 시스템과 상호작용하기 위한 애플리케이션, +서비스, 사용자 인터페이스이다. 인증되지 않은 접근 시 +시스템 제어권이 탈취될 수 있다. +• HMI, 티칭 펜던트 인터페이스, +CLI +• 웹 기반 관리 콘솔 +• 모바일 애플리케이션 +• SCADA/DCS 화면 +애플리케이션 로그 +애플리케이션 수준의 이벤트, 작업 수행 내역, 오류 정보를 +기록하는 로그 시스템이다. 작업 추적 및 보안 감사에 활용 +된다. +• 작업 실행 로그 +• 사용자 액션 로그 +• 애플리케이션 오류 로그 +• 성능 모니터링 로그 +• 보안 이벤트 로그 +응용 소프트웨어 속성 분류 + + +--- + +22 + +#### 2.4.1 + +산업용 로봇 +산업용 로봇 서비스는 크게 로봇 제어반, 학습(티칭) 도구, 로봇 본체의 세 가지 핵심 구성요소로 +정의된다. 구성요소 간 연결은 이더넷, 필드버스 프로토콜, 디지털 입출력, 시리얼 신호, 제조사 전용 +케이블 등 다양한 인터페이스를 통해 이루어진다. 이러한 산업용 로봇 서비스는 산업제어시스템(ICS) +설비와 유기적으로 통합되어 전체 생산 라인의 일환으로 운영된다. +산업용 로봇 서비스의 구성도 + +### 2.4 로봇 서비스별 구성요소 + +1) 로봇 제어반 +로봇 제어반은 로봇의 두뇌 역할을 하는 구성요소로, 상위 시스템으로부터 작업 명령을 받아 로봇의 모든 +동작을 실시간으로 제어한다. 하드웨어와 소프트웨어가 결합된 형태로 로봇의 제어 명령을 처리하고 +실행한다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +제어 계층/설비 +및 로봇 계층 +미들웨어 +• 로봇 소프트웨어 개발용 프레임워크(ROS/ROS2 등) +• 모듈화된 컴포넌트 간 통신 +• 하드웨어 추상화, 실시간 통신(DDS), 분산 시스템 지원 +네트워크, +시스템 S/W, +응용 S/W + + +![이미지 22-0](images/p0022_img0.png) + + +--- + +23 +01 +02 +03 +04 +05 +제어 계층/설비 +및 로봇 계층 +API 모듈 +• 외부 시스템과 제어반 간 통신을 위한 인터페이스 +• 상위 시스템(PLC, SCADA, MES) 연동 +• IOCTL, R/W, MMAP 등 고속 데이터 접근 +• 제어 명령 수신 및 처리 +네트워크, +응용 S/W +운영체제 +• 로봇 제어반의 운영체제(RTOS, Linux, Windows, 제조사 +운영체제) +• 시스템 리소스(CPU, 메모리, I/O), 프로세스 관리 +• 로봇 제어, 모션 제어, 센서 데이터 처리 프로세스 실행 +• 실시간 스케줄링 및 메모리 관리 +네트워크, +시스템 S/W +I/O 모듈 +• 로봇 본체 및 외부 장치와의 신호 입출력 담당 +• 디지털 및 아날로그 I/O, 시리얼 통신(GPIO, SPI, I2C) +• 필드버스 프로토콜 인터페이스 +• 서보 드라이브, 센서, 엔드이펙터 등과의 신호 교환 +하드웨어 +메인 보드 +• 로봇 제어반의 중앙처리 및 주요 회로가 탑재된 기판 +• CPU, 메모리, 버스 컨트롤러 등 핵심 하드웨어 통합 +• I/O 모듈, 인터페이스, 서보 드라이브와의 물리적 연결 제공 +하드웨어 +인터페이스 +• 제어반과 외부 장치 간 물리적 연결 인터페이스 +• 이더넷, USB, 직렬 통신 포트 +• 필드버스 커넥터 및 전용 케이블 인터페이스 +• 티칭 펜던트, EWS, 상위 시스템과의 연결 지원 +하드웨어 +서보 +드라이버 +• 로봇 각 관절의 서보 모터를 제어하는 구동 장치 +• 제어반의 명령을 받아 모터에 전력 공급 및 위치 제어 +• 엔코더 피드백 신호 처리 및 실시간 위치 보정 +• 각 축의 정밀한 토크, 속도, 위치 제어 수행 +하드웨어 +로봇 제어반 구성요소 +참고) ROS 기반 로봇 시스템 +일본, 독일 스위스 등 주요 산업용 로봇 제조사는 로봇의 독점 운영 체제를 사용하고 있으나 최근에는 +서비스 로봇 외에도 일부 산업용 로봇(중국 등)은 ROS (Robot Operating System) 미들웨어를 +사용한다.ROS는 로봇 소프트웨어 개발을 위한 오픈소스 프레임워크로, 모듈화된 소프트웨어 컴포넌트 +간 통신, 하드웨어 추상화, 센서/액추에이터 드라이버, 시뮬레이션 도구 등을 제공한다. +ROS 기반 로봇은 노드(Node) 단위로 기능이 분리되어 있으며, 각 노드는 토픽(Topic), 서비스 +(Service), 액션(Action) 등의 통신 방식으로 데이터를 주고받는다. +ROS는 특히 AMR, 협동로봇, 연구개발용 로봇에서 널리 사용되고 있다. 차세대 버전인 ROS2는 +산업 환경의 요구사항을 반영하여 실시간성과 보안이 강화된 DDS(Data Distribution Service) 기반 +통신을 채택했으며, 품질 보장(QoS) 설정, 보안 통신, 실시간 스케줄링 등의 기능을 제공한다. + + +--- + +24 +ROS 통신 구조 +2) 티칭 도구 +티칭 도구는 작업자가 로봇을 프로그래밍하고 조작하기 위한 인터페이스로, 로봇의 동작을 직접 +설정하고 조정한다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +제어 계층 +티칭 펜던트 +• 로봇 제어반에 연결된 휴대용 조작 장치 +• 로봇의 동작 경로 직접 설정, 작업 프로그램 작성 및 +편집 +• 로봇 파라미터 설정 및 수정, 수동 조작 +• 그리퍼 연동, 운전 모드 설정 +• 전용 케이블을 통해 제어반과 연결 +하드웨어, +네트워크, +시스템 S/W, +응용 S/W +EWS +• 대량 데이터의 기술적 계산 및 설계를 위한 엔지니어용 +전용 시스템 +• 로봇 제어 관련 고성능 계산 처리 +• 로봇 시뮬레이션 및 설계를 위한 고해상도 그래픽 +처리 +• 로봇 프로그램 개발 및 테스트 환경 제공 +• 이더넷 기반 프로토콜로 로봇 제어반과 통신 +하드웨어, +네트워크, +시스템 S/W, +응용 S/W +HMI +(Human +Machine +Interface) +• 인간과 기계 사이의 정보 전달 시스템 +• 로봇 작업 공정 데이터를 운영자가 인지할 수 있는 +형태로 표현 +• 제어장치의 작업 공정 상태 감시 +• 로봇 제어시스템 내부 동작 및 설정 확인 환경 제공 +• 터치스크린, 태블릿, PC 소프트웨어 등 다양한 형태 +하드웨어, +네트워크, +시스템 S/W, +응용 S/W +티칭 도구 구성요소 + + +![이미지 24-0](images/p0024_img0.png) + + +--- + +25 +01 +02 +03 +04 +05 +3) 로봇 본체 +로봇 본체는 실제 물리적 작업을 수행하는 기계 구조물로, 제어반의 명령을 받아 정밀한 동작을 +실행한다. 전원 케이블과 피드백 케이블을 통해 제어반과 실시간으로 연결되며, 물리적 충격 및 배선 +변조 등 외부 영향에 가장 민감한 구간이다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +설비 및 로봇 +계층 +구동부 +• 서보 모터: 각 관절의 동작을 담당하며 정밀한 +위치, 속도, 토크 제어 수행 +• 전원 케이블을 통해 서보 드라이브로부터 전력 +공급 +하드웨어 +센서 및 피드백부 +• 엔코더: 각 관절의 정확한 위치 정보 측정 +• 피드백 케이블: 엔코더 신호 및 피드백 신호를 +제어반으로 실시간 전송 +• 위치, 속도, 토크 데이터를 제어반에 전달 +• 일부 로봇은 필드버스 프로토콜(PROFINET, +EtherCAT, DeviceNet 등)을 통해 제어반 및 +주변 설비와 실시간 동기화 통신 수행 +하드웨어, +네트워크 +엔드이펙터 +(End effector) +• 엔드 이펙터: 그리퍼, 용접 토치 등 작업 도구 +• 플랜지 I/O: 엔드 이펙터 제어를 위한 입출력 +인터페이스 +• 디지털 I/O, PWM 신호를 통한 그리퍼 개폐, +용접 토치 점화 등 제어 +하드웨어, +네트워크 +로봇 본체 구성요소 + + +--- + +26 +서비스용 로봇 서비스의 구성도 + +#### 2.4.2 서비스용 로봇 + +서비스용 로봇 서비스는 각 로봇이 클라우드 기반 플랫폼 또는 현장 운영 시스템과 연계되는 구조로 +정의된다. 구성요소 간 연결 인터페이스는 이더넷, 무선 통신(Wi-Fi, 5G/LTE), 시리얼, CAN 버스 등 +다양한 방식을 통해 구현된다. 이러한 서비스용 로봇 구성요소들은 클라우드 기반 로봇 관리 플랫폼 +또는 현장 통합 관제 시스템과 통합되어 전체 서비스 환경의 일환으로 운영된다. +1) 로봇 온보드 +로봇 온보드(On-board)는 AMR(배송·안내·순찰), 로봇 개, 휴머노이드 등 서비스 환경에서 운용되는 +로봇 외형 내부에 탑재되는 구동부, 센서, 메인 보드, 각종 확장 보드 및 통신 인터페이스 등을 통칭한다. +온보드는 상위 시스템으로부터 작업 명령을 수신하고 원격 측정(Telemetry) 정보를 상위로 전송함으로써 +로봇의 동작과 상태에 대한 통합적인 관리 및 모니터링을 지원한다.하드웨어와 소프트웨어가 결합된 +형태의 서비스용 로봇 온보드는 사용자 안전과 서비스 품질 요건을 충족하는 수준으로 서비스 환경을 +인지·판단·제어하며, 공공장소 및 실내외 공간에서 배송·안내·청소·순찰 등의 서비스 작업을 안전하고 +신뢰성 있게 수행하도록 하는 핵심 제어 구성요소로 정의된다. + + +![이미지 26-0](images/p0026_img0.png) + + +--- + +27 +01 +02 +03 +04 +05 +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +설비 및 +로봇 계층 +미들웨어 +• 로봇 소프트웨어 개발용 프레임워크(ROS/ROS2 등) +• 모듈화된 컴포넌트 간 통신 +• 하드웨어 추상화, 실시간 통신(DDS), 분산 시스템 지원 +네트워크, +시스템 S/W, +응용 S/W +API 모듈 +• 외부 시스템과 로봇 온보드 간 통신을 위한 인터페이스 +• 상위 시스템(로봇 서비스 플랫폼, 로봇 운영, 로봇 제어) 연동 +• 제어 명령 수신 및 처리 +네트워크, +응용 S/W +운영체제 +• 로봇 온보드 운영체제(Linux, Windows, 임베디드 리눅스) +• 시스템 리소스(CPU, 메모리, I/O), 프로세스 관리, 메모리 관리 +• 센서, 구동부, 인터페이스 연동 처리 및 장치 드라이버 제공 +• 응용 프로그램/미들웨어 실행 환경 제공 +네트워크, +시스템 S/W +메인 보드 +• 로봇 온보드의 중앙처리 및 주요 회로가 탑재된 기판 +• CPU, 메모리, 버스 컨트롤러 등 핵심 하드웨어 통합 +• 인터페이스, 구동부, 센서와의 물리적 연결 제공 +하드웨어 +안전 보드 및 +PLC +• 로봇과 구동부의 안전 제어를 담당 +• 비상정지 버튼, LiDAR, 카메라, 범퍼 스위치 등 안전 센서 신호 +수집 +• 서보 드라이브, 브레이크에 안전 정지, 속도 제한 신호를 출력해 +위험 상황에서 로봇을 안전 정지 +하드웨어, +네트워크 +온보드 구동부 +• 모터 드라이버, 모터가 결합되어 로봇의 관절 또는 바퀴를 +움직이는 구동 모듈 +• 미들웨어, API 모듈에서 받은 명령에 따라 관절과 바퀴 동작 제어 +• 센서 피드백을 통해 움직임을 보정하고 정지·저속 등 구동 상태 +관리 +하드웨어 +온보드 센서 +• LiDAR, 카메라, IMU, IR 등으로 구성된 환경·자세 인지용 센서 +묶음 +• 주변 장애물, 사람, 지형을 감지하고 형상, 공간 정보를 수집 +• 로봇의 위치, 자세 추정과 경로 계획, 충돌 회피에 필요한 센서 +데이터제공 +하드웨어, +네트워크 +인터페이스 +• 이더넷, 무선 랜, USB, 직렬 통신 포트, 필드버스 커넥터 및 전용 +케이블 등 제공 +하드웨어 +서비스용 로봇 온보드 구성요소 + + +--- + +28 +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +설비 및 +로봇 계층 +셀룰러 라우터 +• 로봇 내부 또는 외부에 탑재된 4G/5G 셀룰러 +네트워크 장치 +• 로봇이 상위 시스템에 연결할 수 있게 하거나 +관리자가 셀룰러 네트워크를 통해 로봇에 원격 +접속하여 모니터링, 디버깅, 유지보수 수행 +하드웨어, +네트워크, +시스템 S/W, +응용 S/W +도킹 스테이션 +• 로봇 자동 충전 및 대기를 위한 충전 스테이션 +• 로봇이 자율적으로 도킹하여 배터리 충전 +• 충전 상태, 배터리 잔량 등 정보를 상위 +시스템으로 전송 +• 충전 완료 후 자동 언도킹 및 작업 복귀 지원 +하드웨어, +네트워크 +페이로드 +• 배송·서빙·이송 서비스를 위한 화물 적재 장치 +• 적재함, 컨테이너, 트레이 등 로봇에 탑재 +• 센서(무게, 개폐 상태)를 통해 적재 여부 및 화물 +상태 감지 +하드웨어 +서비스용 로봇 주변 장치 구성요소 +2) 로봇 주변 장치 +로봇 주변 장치는 로봇 온보드와 연계되어 통신·충전·운반 등 서비스 수행에 필요한 확장 기능을 +제공하는 장치이다. +3) 로봇관제 및 운영(On-Premise) +로봇관제 및 운영(On-Premise)은 다수의 서비스 로봇을 통합 관리하고 최적화된 작업 할당 및 경로 +계획을 수행하며 실시간으로 로봇 상태를 모니터링하여 효율적인 서비스 운영을 지원한다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +제어 계층 +FMS +(Fleet +Management +System) +• 다수의 로봇을 통합 관리(로봇별 작업 할당, +우선순위 조정, 경로 최적화 수행 등)하는 시스템 +• 로봇 간 충돌 회피 및 교통 관리 +• 로봇 상태(배터리, 위치, 작업 진행률) 실시간 +모니터링 +하드웨어, +네트워크, +응용 S/W +디지털 트윈 +• 로봇의 위치, 상태, 센서 데이터를 실시간으로 +동기화하여 가상 환경에서 시각화 +• 시뮬레이션을 통한 작업 계획 검증 및 최적화 +• 이상 징후 예측 및 예방 정비 지원 +하드웨어, +네트워크, +응용 S/W +서비스용 로봇관제 및 운영(On-Premise) 영역 구성요소 + + +--- + +29 +01 +02 +03 +04 +05 +4) 로봇 제어 +로봇 제어 영역은 운영자가 서비스 로봇을 모니터링하고 제어하기 위한 인터페이스 장치로 구성된다. +로봇의 상태 확인, 작업 지시, 원격 조작 등을 수행하며, 로봇 관제 및 운영 영역과 연동되어 효율적인 +로봇 운영을 지원한다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +제어 계층 +워크스테이션 +• 중앙 관제실에 설치되는 데스크톱 PC 또는 +워크스테이션 +• FMS 및 디지털 트윈 시스템 접속 및 제어 +• 작업 할당, 경로 설정, 긴급 정지 등 관리 기능 +수행 +하드웨어, +네트워크, +시스템 S/W +응용 S/W +컨트롤러 +• 로봇 원격 조작을 위한 전용 제어기 +• 조이스틱, 버튼 등을 통해 로봇의 이동, 회전, +속도 제어 +• 자율주행 실패 시 수동 조작 모드로 전환하여 +로봇 구출 +• 위험 상황 발생 시 긴급 정지 기능 제공 +하드웨어, +네트워크, +응용 S/W +태블릿 +• 현장 운영자용 모바일 인터페이스 +• 로봇 상태 확인, 간단한 작업 지시, 로봇 호출 +등 수행 +• 터치스크린 기반 직관적인 UI 제공 +• 현장에서 즉각적인 로봇 제어 및 모니터링 가능 +하드웨어, +네트워크, +응용 S/W +서비스용 로봇 제어 영역 구성요소 +5) 로봇관제 및 운영(Cloud) +로봇관제 및 운영(Cloud) 영역은 서비스 로봇의 원격 관리, 데이터 수집, 소프트웨어 업데이트 등을 +제공하는 클라우드 기반 서비스 플랫폼이다. 다양한 통신 프로토콜과 인터페이스를 제공하여 로봇과 +상위 시스템 간 연동을 지원하며, 로봇 운영 데이터의 수집·분석·관리를 수행한다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +응용 서비스 +계층 +응용프로그램 +인터페이스 +(API) +• HTTP 기반의 RESTful API 인터페이스 +• 로봇 상태 조회, 작업 지시, 설정 변경 등의 기능 +제공 +• 외부 +시스템(ERP, +WMS +등)과의 +연동 +인터페이스 +네트워크, +응용 S/W +메시징서비스 +(MQTT) +• 경량 메시징 프로토콜 기반 실시간 통신 +• 로봇의 센서 데이터, 원격측정(Telemetry) +정보를 실시간으로 클라우드에 전송 +• Pub/Sub 방식으로 다수의 로봇과 효율적인 +통신 +네트워크, +응용 S/W + + +--- + +30 +업데이트 +(OTA) +• 로봇 온보드의 운영체제, 미들웨어, 응용 +프로그램을 원격으로 업데이트 +• 버전 관리, 롤백(Rollback) 기능 지원 +• 다수의 로봇에 대한 일괄 업데이트 지원 +네트워크, +응용 S/W +멀티미디어 +스트리밍 +(WebRTC) +• 로봇에 장착된 카메라 영상을 운영자에게 실시간 +스트리밍 +• 양방향 음성 통신으로 원격 상황 파악 및 안내 +방송 +네트워크, +응용 S/W +FMS +• 로봇관제 및 운영(On-Premise)내 FMS, 디지털 트윈과 동일 요소이므로 +해당 내용 참고 +디지털트윈 +서비스용 로봇관제 및 운영(Cloud) 영역 구성요소 + +#### 2.4.3 + +의료용 로봇 +의료용 로봇 서비스는 각 로봇이 클라우드 또는 병원 내부망과 연계되는 구조를 가지며 구성요소 간 +연결은 이더넷 프로토콜, 시리얼 신호, 영상 신호, 필드버스, 전용 케이블, 무선 통신 등 다양한 방식으로 +이루어진다. 이러한 의료용 로봇의 구성요소들은 병원 내부 정보시스템 또는 클라우드에서 운영되는 +로봇 관리 플랫폼과 통합되어 병원 시스템의 일부로 운영된다. +의료용 로봇 서비스의 구성도 + + +![이미지 30-0](images/p0030_img0.png) + + +--- + +31 +01 +02 +03 +04 +05 +1) 로봇 온보드 +로봇 온보드는 AMR(임상·멸균·약제·검체 이송), 재활 로봇 등 병원 환경에서 운용되는 로봇 외형 +내부에 탑재되는 구동부, 센서, 메인 보드, 각종 확장 보드 및 통신 인터페이스 등을 통칭한다. +온보드는 상위 시스템으로부터 작업 명령을 작업 명령을 수신하고 원격측정 정보를 상위로 전송함으로써 +로봇의 동작과 상태를 통합적으로 관리·감시할 수 있도록 한다. +하드웨어와 소프트웨어가 결합된 형태의 의료용 로봇 온보드는 환자 안전과 의료 규제 요건을 충족하는 +수준으로 의료 환경을 인지·판단·제어하며 로봇이 병원 내 물리 공간에서 요구되는 진료·간호·물류 +작업을 안전하고 신뢰성 있게 수행하도록 하는 핵심 제어 구성요소이다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +설비 및 +로봇 계층 +미들웨어 +• 로봇 소프트웨어 개발용 프레임워크(ROS/ROS2 등) +• 모듈화된 컴포넌트 간 통신 +• 하드웨어 추상화, 실시간 통신(DDS), 분산 시스템 지원 +네트워크, +시스템 S/W, +응용 S/W +API 모듈 +• 외부 시스템과 로봇 온보드 간 통신을 위한 인터페이스 +• 상위 시스템(로봇 플랫폼, 로봇 운영제어, 로봇 관리 플랫폼) 연동 +• 제어 명령 수신 및 처리 +네트워크, +응용 S/W +운영체제 +• 로봇 온보드 운영체제(Linux, Windows, 임베디드 리눅스) +• 시스템 리소스(CPU, 메모리, I/O), 프로세스 관리, 메모리 관리 +• 센서, 구동부, 인터페이스 연동 처리 및 장치 드라이버 제공 +• 응용 프로그램/미들웨어 실행 환경 제공 +네트워크, +시스템 S/W +메인 보드 +• 로봇 온보드의 중앙처리 및 주요 회로가 탑재된 기판 +• CPU, 메모리, 버스 컨트롤러 등 핵심 하드웨어 통합 +• 인터페이스, 구동부, 센서와의 물리적 연결 제공 +하드웨어 +안전 보드 및 +PLC +• 로봇과 구동부의 안전 제어를 담당 +• 비상정지 버튼, LiDAR, 카메라, 범퍼 스위치 등 안전 센서 신호 수집 +• 서보 드라이브, 브레이크에 안전 정지, 속도 제한 신호를 출력해 +위험 상황에서 로봇을 안전 정지 +하드웨어, +네트워크 +온보드 구동부 +• 모터 드라이버, 모터가 결합되어 로봇의 관절 또는 바퀴를 +움직이는 구동 모듈 +• 미들웨어, API 모듈에서 받은 명령에 따라 관절과 바퀴 동작 +제어 +• 센서 피드백을 통해 움직임을 보정하고 정지·저속 등 구동 상태 +관리 +하드웨어 + + +--- + +32 +온보드 센서 +• LiDAR, 카메라, IMU, IR 등으로 구성된 환경· +자세 인지용 센서 묶음 +• 주변 장애물, 사람, 지형을 감지하고 형상, 공간 +정보를 수집 +• 로봇의 위치, 자세 추정과 경로 계획, 충돌 +회피에 필요한 센서 데이터제공 +하드웨어, +네트워크 +인터페이스 +• 이더넷, 무선 랜, USB, 직렬 통신 포트, 필드버스 +커넥터 및 전용 케이블 등 제공 +하드웨어 +의료용 로봇 온보드 구성요소 +2) 수술 로봇 구동부 +수술 로봇의 구동부는 환자의 수술 부위 주변에 배치되며 센서와 서보 드라이브를 통해 로봇 팔을 정밀 +제어하고 내시경 및 다양한 수술 도구를 지지, 구동하여 외과의의 조작에 따라 환자 체내 및 체외에서 +미세한 수술 동작을 수행하는 장치이다. 수술 로봇 구동부는 수술 콘솔의 컨트롤러(Controller) 동작을 +그대로 추종하는 텔레오퍼레이션(Tele-operation)을 기반으로 하되 스케일링, 필터링, 운동 보정 등을 +적용하여 실제 수술 동작으로 변환한다. 또한 내시경 카메라 촬영 데이터와 수술 도구의 사용 횟수 등 +운영 데이터는 수술 타워와 연동되어 병원 내부 정보 시스템(PACS, EMR/EHR, 수술 정보 시스템 등) +으로 전송 및 저장되어 기록 관리와 사후 분석에 활용된다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +설비 및 +로봇 계층 +센서 +• 위치 및 자세 측정용 센서 모듈 +• 모터 및 관절 축 회전을 전기 신호로 변환해 +위치와 속도 피드백 제공 +• 절대 각도와 이중 센서(엔코더, 자기각도 센서) +값을 활용해 위치 오차를 보정하고 고장 감지 및 +안전 정지 지원 +하드웨어 +서보 드라이브 +• 로봇 팔에 설치된 서보 모터를 구동하는 장치 +• 수술 콘솔의 컨트롤러 조작 신호, 명령을 수신해 +모터에 전력을 공급하고 로봇 팔, 수술 도구의 +목표 위치, 자세를 제어 +• 센서 피드백으로 관절, 도구 끝단의 위치 및 속도 +오차를 실시간 보정 +• 각 축의 토크, 속도, 위치를 제어하고 이상 시 +안전 정지 등 보호 기능 수행 +하드웨어 +로봇 팔 +• 센서, 수술 도구, 모터, 브레이크 등이 통합된 +다관절 기계 구조물로 외과의의 조작을 기반으로 +정밀한 수술 동작 수행 +하드웨어 +수술 도구 +• 로봇 팔 끝단에 장착되는 모듈로 수술 종류와 +단계에 따라 탈·부착 +• 집게, 가위 등 미세 절개 등을 수행하는 수술 +기구(Instrument) 지원 +• 3D 카메라로 수술 부위 확대 및 시각화 하는 +내시경(Endoscopy) 지원 +하드웨어 +수술로봇 구동부 구성요소 + + +--- + +33 +01 +02 +03 +04 +05 +3) 수술 타워 +수술 타워는 수술 로봇 구동부와 수술 콘솔을 중계·관리하는 중앙 제어 장치로 RTOS가 구동되는 메인 +보드를 기반으로 한다. 수술 타워는 각종 인터페이스를 통해 로봇 팔 구동부와 콘솔에서 들어오는 제어 +명령, 상태 정보, 영상·센서 데이터를 수집 및 처리하고 연동 모듈을 통해 병원 내부 정보 시스템과의 +통신을 담당한다. 이를 통해 수술용 로봇의 동작 제어, 상태 모니터링, 영상 및 데이터 전송, 안전 관련 +신호 관리 등을 통합적으로 수행하는 허브 역할을 한다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +설비 및 로봇 +계층 +인터페이스 +• 수술 콘솔, 수술 로봇 구동부, 병원 내부 정보 시스템 연동을 위해 +다양한 유선 인터페이스를 제공 +• 수술 로봇 구동부와 EtherCAT, IEEE-1394 등 실시간 필드버스 +포트 지원 +• 수술 콘솔과 전용 고속 링크, 시리얼 통신 포트 지원 +• 영상 신호를 처리해 수술 콘솔의 3D 뷰어 및 수술용 모니터로 분배 +지원 +• 병원 내부 정보 시스템(PACS·EMR 등) 연동용 포트 지원 +하드웨어 +운영체제 +• 타워 운영체제(Linux, Windows, RTOS 등)는 수술 콘솔 입력, UI, +영상 처리, 병원 내부 정보 시스템 연동 등 비실시간 작업이나 수술 +로봇 구동부를 제어하는 실시간 작업을 처리한다. +• 수술 타워와 수술 로봇 구동부(서보 드라이브) 사이의 실시간 모션 제어 +• 센서 피드백을 주기적으로 처리해 축 및 도구 끝단(TCP)의 위치 및 +속도 오차 보정 +• 수술 콘솔의 컨트롤러 입력, UI 이벤트를 수집해 RTOS로 전달 +• 내시경 영상을 수술 콘솔의 3D 뷰어로 전달 +시스템 S/W +메인 보드 +• 수술 타워의 중앙처리 및 주요 회로가 탑재된 기판 +• CPU, 메모리, 버스 컨트롤러 등 핵심 하드웨어 통합 +• 인터페이스를 통한 물리적연결 제공 +하드웨어 +연동 모듈 +• 병원 내부 정보 시스템(PACS·EMR 등)과 외부 의료 시스템에 +연결하는 통신, 연계 전용 모듈 +• 수술 영상, 수술 도구 사용 이력, 상태 정보를 병원 내부 시스템과 +연동해 기록, 조회, 관리 지원 +• 장비 및 원격 진단, 업데이트용 서비스와의 데이터 교환을 관리해 +수술 워크플로와 유지보수를 지원 +네트워크, +응용 S/W +수술 타워 구성요소 + + +--- + +34 +수술 콘솔 구성요소 +4) 수술 콘솔 +수술 콘솔은 의사가 로봇을 조작하는 인간-기계 인터페이스 장치로 HMI, 컨트롤러의 신호를 처리하는 +제어 보드를 기반으로 한다. 수술 콘솔은 컨트롤러(MTM, 풋 페달) 등 입력 장치를 통해 외과의의 +조작 명령을 수집하고 HMI(스테레오 뷰어, 암레스트 UI)를 통해 내시경 영상과 시스템 상태 정보를 +실시간으로 시각화하며 수술 타워와의 통신을 통해 이러한 조작·표시 데이터를 주고받는다. 이를 통해 +수술용 로봇의 자세·도구 동작을 직관적으로 제어하고 수술 진행 상황 및 알람 및 안전 상태를 의사에게 +제공하는 사용자 인터페이스 역할을 수행한다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +제어 계층 +제어보드 +• HMI와 컨트롤러 신호를 수집하고 수술 타워와 통신 +• 마스터 조작기(Master Tool Manipulator, MTM), 풋 페달, UI의 입력 +신호를 수술 타워로 전달 +• 수술 타워에서 수신한 상태, 알람, 모드 정보를 HMI로 전달 +하드웨어 +HMI +• 3D 수술 시야와 시스템 상태를 보여주고 버튼, 패널로 명령을 입력 받는 +사용자 인터페이스 장치 +• 수술 타워에서 전달된 내시경 영상과 상태 정보를 3D 뷰어 및 패널에 +표시 +• 모드 전환, 카메라 제어, 시스템 명령 등의 UI 입력을 제어보드로 전달 +하드웨어 +컨트롤러 +• 손, 발 동작을 로봇 제어 명령으로 변환하는 입력 장치(MTM, 풋 페달) +• MTM 관절 위치, 자세를 측정해 로봇 팔, 수술 도구의 목표 움직임으로 전달 +• 풋 페달의 클러치, 카메라 등 발 동작을 모드, 기능 전환 신호로 제공 +하드웨어 +5) 로봇관제 및 운영(On-Premise) +의료용 AMR의 로봇관제 및 운영(On-Premise)은 서비스 로봇의 로봇관제 및 운영(On-premise) +영역과 동일하므로, 해당 영역의 구성요소에 대한 설명은 서비스 로봇의 로봇관제 및 운영(On- +Premise)을 참조한다. +6) 로봇관제 및 운영(Cloud) +의료용 AMR의 로봇관제 및 운영(Cloud)은 서비스 로봇의 로봇관제 및 운영(Cloud) 영역과 동일하므로, +해당 영역의 구성요소에 대한 설명은 서비스 로봇의 로봇관제 및 운영(Cloud)을 참조한다. + + +--- + +35 +01 +02 +03 +04 +05 +7) 병원 내부 정보 시스템 +병원 내부 정보 시스템은 의료용 로봇이 취득한 의료 데이터(X-ray 사진, 수술 영상, 개인 건강 정보 +(PHI) 등)를 저장·관리·활용하는 영역으로 PACS, EMR/EHR, 의료 디지털 플랫폼으로 구성된다. +이러한 구성요소는 플랫폼 연동 장비, 연동 모듈을 통해 제조사 전용 프로토콜, DICOM, HL7 등을 +사용하여 의료용 로봇과 환자 정보, 수술 정보 등을 상호 교환한다. +계층 +구성요소 +설명 및 주요 기능 +속성 분류 +응용 서비스 +계층 +EMR/EHR +• 환자의 진료·투약·검사·영상·수술 기록 등 의료 정보를 +전산화하여 병원 내·외부에서 통합 관리 +• 진료기록, 과거력, 알레르기, 투약·검사·수술 내역 등을 +구조화해 저장하고 의료진이 진료 시 신속하게 조회·입력· +수정할 수 있도록 지원 +• PACS, 처방시스템, 의료용 로봇, 보험 청구 시스템 등과 +연동해 데이터를 교환하고 경고 알림(중복 처방, 알레르기), +임상 경로 등 의사결정 지원 기능 제공 +하드웨어, +네트워크, +시스템 S/W, +응용 S/W +PACS +• X-ray, CT, MRI, 내시경·수술 영상 등 의료 영상을 디지털 +형태로 저장·조회·전송·보관하는 시스템으로 필름 없이 병원 +내·외부에서 영상 통합 관리 +• 영상 촬영 장비(CT, MRI, 수술 도구 등)에서 생성된 영상을 +DICOM 형식으로 수집·저장하고 진료실·판독실·수술실 +등에서 조회·비교·주석 할 수 있도록 지원 +• 수술 로봇과 연동해 수술 전 영상(CT/MRI, 3D 재구성 영상) +을 타워 측에 제공하고, 수술 중·수술 후 영상 및 수술 기록을 +PACS에 연계 저장하여 재수술 계획, 합병증 추적, 품질 관리 +등에 활용 +하드웨어, +네트워크, +시스템 S/W, +응용 S/W +의료 디지털 +플랫폼 +• 수술 로봇, PACS, EMR/EHR, 병원 내 각종 장비에서 +발생하는 데이터를 통합 수집·분석·시각화 하는 플랫폼 +• PACS, EMR/EHR, 모니터링 장비와의 연동을 통해 수술 +계획 정보, 환자 영상, 수술 로그, 알람·이벤트를 한 곳에서 +통합 관리 수술실 내/외에서 동일한 화면·정보를 조회할 수 +있도록 지원 +하드웨어, +네트워크, +시스템 S/W, +응용 S/W +병원 내부 정보 시스템 구성요소 + + +--- + + + +--- + + + +--- + +38 +로봇의 보안 위협 +03 +본 장에서는 로봇 서비스에 대한 보안 위협을 체계적으로 식별하고 분석한다. 제2장에서 정의한 로봇 +서비스 구성도와 구성요소를 기반으로, 각 로봇 서비스의 구성요소에서 발생 가능한 보안 위협을 +도출한다. 본 장의 구성은 다음과 같다. +본 장의 목표는 로봇 시스템의 확장된 보안 목표를 정립하고, 로봇 서비스 전반에 공통적으로 존재하는 +보안 위협을 식별함과 동시에 서비스 유형별 운용 환경과 특성을 반영한 특화 위협을 도출하는 데 있다. +이를 통해 로봇 시스템의 보안 위협을 포괄적으로 이해하고, 각 서비스 유형에 적합한 보안 대책을 +수립하기 위한 근거를 제공한다. +3.1 +3.2 +3.3 +3.4 +로봇 서비스의 보안 목표 +보안 위협의 유형 +로봇 서비스별 보안 위협 +로봇의 보안 위협 시나리오 +• 로봇 시스템의 보안목표를 IT 시스템의 보안 3요소(CIA:기밀성, 무결성, 가용성)를 확장하여 +정확성·신뢰성·안전성(로봇 특화)을 포함한 6가지로 정의한다. +• IT 시스템과 로봇 서비스의 보안목표 차별적 특성을 비교한다. +• 2장에서 정의한 속성 분류(하드웨어·네트워크·시스템 소프트웨어·응용 소프트웨어)를 기준으로 +보안 위협의 유형을 제시한다. +• 산업용, 서비스용, 의료용 로봇 시스템의 운용 환경과 기술적 특성을 고려하여 각 서비스 +유형별로 특화된 상세한 보안 위협을 식별한다. +• 식별된 위협을 기반으로 실제 발생 가능한 로봇 보안 위협 시나리오를 제시한다. + + +--- + +39 +01 +02 +03 +04 +05 +로봇 서비스는 일반적인 IT 시스템과 달리 데이터 처리뿐 아니라 물리 환경에 직접 영향을 주는 사이버- +물리 시스템(CPS, Cyber-Physical System)이므로, 전통적 보안 목표(C.I.A)에 더해 물리 동작 +품질과 안전 확보가 함께 요구된다. +이에 따라 로봇 서비스에 6가지 보안 목표가 필요한 이유와 보안목표 침해 시 예상 영향을 아래 표에 +요약하였다. +보안목표 구분 +설명 +IT 시스템 +기밀성 +비 인가된 접근으로부터 데이터를 보호하여, 권한이 부여된 사용자만 +특정 정보 및 자원에 접근할 수 있도록 통제해야 한다 +무결성 +비 인가된 수정, 변조, 삭제로부터 데이터를 보호하여 시스템의 신뢰성을 +유지해야 한다 +가용성 +인가된 사용자가 필요한 시점에 시스템 및 데이터에 안정적으로 접근 +로봇 특화 +정확성 +로봇의 목표 위치·자세·속도·힘(토크) 등을 허용 오차 범위 내에서 +수행하도록 제어 성능을 보장한다 +신뢰성 +로봇이 동일 조건에서 예측 가능하고 일관된 동작을 수행, +상태 및 진단 정보가 운영에 활용 가능할 수준으로 유지되도록 한다 +안전성 +로봇이 사람·설비·환경에 위해를 유발하지 않도록 위험을 통제하고, +이상 징후 발생 시 안전정지/안전상태(Fail-safe) 로 전환되도록 한다 +보안목표 +보안목표별 보호 필요성 +기밀성 +로봇의 정보(영상·음성·위치), 동작로그, 공정정보 등 물리 환경 및 운영 정보의 노출을 방지하기 위해 필요 +무결성 +로봇의 센서 데이터, 제어 명령, 작업 프로그램, 안전 설정의 변조 및 재전송으로 인한 오동작 및 사고를 +방지하기 위해 필요 +가용성 +로봇을 통한 작업(공정, 물류 작업 등)의 중단이 공정 전체의 연쇄 안전정지로 확대될 수 있으므로 운영 +연속성과 복구 가능성을 확보하기 위해 필요 +정확성 +로봇의 위치, 속도, 힘(토크) 제어가 허용 오차를 벗어나면 충돌과 제품 품질 저하로 이어질 수 있으므로 +물리 동작의 수행 정확도를 확보하기 위해 필요 +신뢰성 +로봇이 같은 조건과 방식으로 안정적으로 동작하고, 상태·경보·진단 정보를 통해 안전하게 운영할 수 +있도록 위해 필요 +안정성 +물리 동작이 사람, 설비, 환경에 위해를 줄 수 있으므로 이상 상황 발생 시 안전상태로 전환(Fail-Safe) +되도록 보장하기 위해 필요 +로봇 서비스의 6가지 보안목표 +3.1 +로봇 서비스의 보안 목표 +로봇 서비스의 보안목표 보호 필요성 + + +--- + +40 +최종적으로 로봇 서비스의 보안을 위해서 기밀성·무결성·가용성과 정확성·신뢰성·안전성 관점에서의 +물리 동작, 운영 안정성까지 함께 보호해야 한다. 따라서 이후 절에서는 보안목표가 침해되는 관점에서 +로봇 보안 위협을 유형화하고, 로봇 서비스별 주요 보안 위협과 보안 위협 시나리오 그리고 부록을 통해 +과거의 로봇 보안위협 사례까지 제시한다. + + +--- + +41 +01 +02 +03 +04 +05 + +#### 3.2.1 + +하드웨어 보안 위협 유형 + +#### 3.2.2 네트워크 보안 위협 유형 + +하드웨어 보안 위협은 로봇 시스템의 물리적 자산에 대한 위협으로 물리적 접근, 신호 위조, 터미널 접근 +등의 공격을 포함하며, 로봇 시스템의 특성을 고려하여 다음과 같이 위협 유형으로 분류된다. +본 절은 2장에서 정의한 하드웨어, 네트워크, 시스템 소프트웨어, 응용 소프트웨어 4가지 속성에 대한 +보안 위협 유형을 분류하였다. 각 속성 별 보안 위협은 다음과 같다. +네트워크 보안 위협은 로봇 시스템의 네트워크 자산에 대한 위협으로 오동작 및 중단 유발, 서비스 +거부, 네트워크 도청 등의 공격을 포함하며, 로봇 시스템의 특성을 고려하여 다음과 같이 위협 유형으로 +분류된다. +보안 위협 +공격기법 +영향을 받는 +보안 목표 +물리적 훼손 +영역 내 물리적으로 접근하여 로봇 및 장비, 보호영역 훼손 +가용성, 안전성, 신뢰성 +신호 위조 +영역 내 물리적으로 접근하여 로봇 및 장비에 대한 악성 신호 전송 +무결성, 안전성, 정확성 +터미널 접근 +영역 내 물리적으로 접근하여 키보드기반 터미널 접근하여 운영체제에 접근 +기밀성, 무결성, 가용성 +부채널 공격 +영역에서 측정 가능한 전력·전자기·시간 정보 등을 분석하여 로봇 내부의 비밀 +데이터나 연산 값을 간접적으로 유출 +기밀성, 무결성, 신뢰성 +외장 매체를 +통한 데이터 +주입/유출 +영역에서 외부 미디어(USB 등)를 통해 악성 프로그램이나 설정 파일을 +주입하거나 중요 데이터 등을 유출 +기밀성, 무결성, 신뢰성 +저장 장치 정보 +탈취 및 조작 +영역 내 물리적으로 접근하여 펌웨어 덤프 또는 저장 장치 탈취를 통해 중요 +데이터 등을 유출하거나 장치 내 데이터를 임의로 변경 +기밀성, 무결성, 신뢰성 +보안 위협 +공격기법 +영향을 받는 +보안 목표 +오동작 및 중단 +유발 +영역 네트워크에 접근하여 직접 제어 명령을 송신해 로봇 오동작 유발 +무결성, 가용성, 안전성, +정확성, 신뢰성 +서비스 거부 +영역 네트워크에 접근하여 취약한 로봇 시스템으로 조작된 패킷을 전달하여 +서비스 거부 유발 +가용성, 안전성 +하드웨어 위협 유형 +3.2 +보안 위협의 유형 + + +--- + +42 + +#### 3.2.3 시스템 소프트웨어 보안 위협 유형 + +시스템 소프트웨어 보안 위협은 로봇 시스템의 시스템 소프트웨어 자산에 대한 위협으로 취약점 악용, +업데이트 기능 악용 등의 공격을 포함하여, 로봇 시스템의 특성을 고려하여 다음과 같이 위협 유형으로 +분류된다. +보안 위협 +공격기법 +영향을 받는 +보안 목표 +취약점 악용 +알려진 취약점을 스캔·익스플로잇하여 권한 획득 및 +악성코드 전파 +기밀성, 무결성, 가용성 +부트로더 및 초기 +신뢰체계 훼손 +초기 부팅 단계(부트로더·시큐어 부팅·신뢰 루트)를 조작해 +시스템 전체를 악성 상태로 시작 +무결성, 신뢰성, 안전성 +업데이트 기능 악용 +펌웨어 및 소프트웨어의 업데이트 배포, 검증, 설치 절차를 +조작하거나 우회하여 보안성을 약화 +무결성, 신뢰성 +권한 탈취 +커널 취약점·드라이버·운영체제 권한 모델 등을 악용해 +관리자 권한을 획득 +기밀성, 무결성, 가용성 +보호기능 우회 +보호기능을 우회하여 ROP, 메모리 변조, 프로세스 탈취 +등을 수행 +무결성, 안전성, 정확성 +서비스 구성 악용 +운영체제 네트워크 스택 및 시스템 서비스의 오류 또는 +취약한 구성을 이용해 네트워크 및 시스템 기능을 비인가로 +사용 +가용성, 신뢰성 +로그 위·변조 +이벤트/감사 로그를 삭제·변조·위조해 추적성 훼손 +무결성, 신뢰성 +진단 기능 악용 +시스템에 남아 있는 진단 포트·디버깅 모드·테스트 기능을 +악용해 인증을 우회하거나 권한을 획득 +기밀성, 무결성, 안전성 +메시지 재생 공격 +관제용 단말, 메시지 브로커, 라우터로부터 패킷을 수집해 인증 우회 및 +악의적인 명령 수행 +무결성, 기밀성, 안전성 +네트워크 도청 +영역 네트워크에 접근하여 암호화되지 않은 통신을 도청하여 민감한 +데이터 수집 +기밀성 +라우팅 기능 남용 +로봇 내 또는 인프라에 설치된 라우터를 비인가 라우팅이나 정책 우회 +경로로 침해 +기밀성, 무결성, 가용성 +키·증명서 +탈취를 통한 +통신 위조 +제어 및 관리 영역에서 암호키 및 인증서 탈취를 통해 패키지 서명 및 TLS +통신을 위조함으로써 신뢰 체계를 무력화 +기밀성, 무결성, 신뢰성 +네트워크 위협 유형 +시스템 소프트웨어 위협 유형 + + +--- + +43 +01 +02 +03 +04 +05 + +#### 3.2.4 + +응용 소프트웨어 보안 위협 유형 +응용 소프트웨어 보안 위협은 로봇 시스템의 응용 소프트웨어 자산에 대한 위협으로 취약점 악용, +악성코드 유입/감염 등의 공격을 포함하며, 로봇 시스템의 특성을 고려하여 다음과 같이 위협 유형으로 +분류된다. +보안 위협 +공격기법 +영향도 +취약점 악용 +알려진 취약점을 스캔·익스플로잇하여 권한 획득 및 악성코드 +전파 +기밀성, 무결성, 가용성 +작업/동작 설정 악용 +로봇 동작에 대한 설정을 변경하여 안전 설정 범위를 벗어나는 +등 공격자의 의도대로 동작을 유도 +무결성, 안전성, 정확성 +접근 제어 기능 악용 +계정, 인증, 세션 등 접근 관리 요소를 탈취, 우회하여 비인가 +접근에 활용 +기밀성, 무결성 +설정 데이터 변조 +설정 데이터(운영/설정 및 파라미터/네트워크 등)의 값을 +변경·위조하여 시스템 동작을 왜곡 +무결성, 신뢰성, 정확성 +데이터 탈취/변조 +내부 DB에 저장되거나 전송되는 데이터·파일을 비인가 열람, +유출, 변경, 삭제 수행 +기밀성, 무결성 +상태 조회/설정 변조 +로봇의 CPU, Memory, Disk, Time 등 상태 조회/설정을 +조작해 로봇 운영 영향 +가용성, 신뢰성 +업데이트 기능 악용 +업데이트 배포, 검증, 설치 절차를 조작하거나 우회하여 +보안성을 약화 +무결성, 신뢰성 +백업/복원 악용 +백업 및 복원 절차를 조작하여 데이터 유출, 롤백(구버전 강제) +를 유발 +기밀성, 무결성, 가용성 +로그 위·변조 +이벤트/감사 로그를 삭제·변조·위조해 추적성 훼손 +무결성, 신뢰성 +원격지원 기능 악용 +원격지원 기능의 약한 인증 또는 설정 오류를 이용해 원격 +명령·설정을 주입하고 유지보수 로그를 은닉 +기밀성, 무결성, 신뢰성 +악성코드 유입/감염 +악성코드를 감염시켜 프로세스 비정상종료 또는 추가동작 +수행 +무결성, 가용성, 안전성 +라이센스 인증 위조 +라이센스 서버 계정·키를 탈취하거나 서버 가용성을 공격하여 +시뮬레이션·개발 도구의 정품검증을 우회하거나 기능을 차단 +무결성, 가용성 +라이센스 파일 변조로 +인한 무단 소프트웨어 +실행 +라이센스 서버에 접근해 라이센스 파일을 변조하거나 위조 +라이센스를 발급해 시뮬레이션/개발 도구를 악용 +무결성, 신뢰성 +응용 소프트웨어 위협 유형 + + +--- + + + +--- + +45 +01 +02 +03 +04 +05 +제어 계층 / 설비 및 로봇 계층 +구성요소 +속성 +보안 위협 +세부 내용 +미들웨어 +네트워크 +네트워크 도청 +암호화되지 않은 ROS/DDS 노드 간 통신을 도청하여 제어 +명령 및 센서 데이터 탈취 +메시지 재생 +공격 +ROS 토픽 메시지를 수집하여 인증 우회 및 악의적 명령 +재전송 +라우팅 기능 남용 +ROS 마스터 또는 DDS 라우팅을 조작하여 비인가 노드 +통신 +시스템 S/W +취약점 악용 +ROS 패키지 또는 미들웨어 라이브러리의 알려진 취약점을 +통한 권한 획득 +업데이트 기능 악용 +ROS 패키지 업데이트 과정에서 악성 패키지 주입 +응용 S/W +악성코드 유입/감염 +악의적인 ROS 노드를 시스템에 추가하여 데이터 조작 +또는 명령 변조 +라이센스 파일 변조로 인한 +무단 소프트웨어 실행 +ROS 기반 상용 소프트웨어의 라이센스 파일 변조 +API 모듈 +네트워크 +오동작 및 중단 유발 +API를 통해 비정상 제어 명령을 전송하여 로봇 오동작 +유발 +서비스 거부 +대량의 API 요청을 전송하여 제어반의 API 서비스 중단 +네트워크 도청 +API 통신 채널을 도청하여 제어 명령 및 민감 데이터 수집 +응용 S/W +접근 제어 기능 악용 +API 인증 메커니즘의 취약점을 악용하여 비인가 접근 및 +권한 상승 +작업/동작 설정 악용 +API를 통한 악의적 명령 주입으로 로봇 동작 설정 변조 +설정 데이터 변조 +API를 통해 로봇 설정 파라미터 및 운영 데이터 변조 +운영체제 +네트워크 +서비스 거부 +운영체제 네트워크 스택의 취약점을 악용한 서비스 거부 +공격 +시스템 S/W +부트로더 및 +초기 신뢰체계 +훼손 +부트로더를 조작하여 악성 운영체제 또는 펌웨어 로드 +권한 탈취 +커널 취약점을 악용하여 최고 권한 획득 및 악성 드라이버 +설치 +업데이트 기능 악용 +운영체제 패치 및 업데이트 과정에서 악성코드 주입 +보호기능 우회 +ASLR, DEP 등 운영체제 보안 기능을 우회하여 메모리 +조작 +로그 위·변조 +시스템 로그 삭제 또는 변조를 통한 공격 흔적 은폐 +진단 기능 악용 +운영체제에 남아 있는 디버깅 모드 또는 테스트 기능을 +악용 + + +--- + +46 +I/O 모듈 +H/W +신호 위조 +GPIO, SPI, I2C 등의 물리적 포트를 통한 악성 신호 주입 +저장 장치 +정보 탈취 및 조작 +I/O 모듈을 통해 연결된 저장 장치의 데이터 탈취 또는 +조작 +외장 매체를 통한 +데이터 주입/유출 +USB 포트를 통해 악성 프로그램 주입 또는 데이터 유출 +메인 보드 +H/W +물리적 훼손 +메인 보드 물리적 손상을 통한 제어반 기능 마비 +터미널 접근 +JTAG, UART 등 디버깅 포트를 통한 펌웨어 덤프 및 +메모리 접근 +저장 장치 +정보 탈취 및 조작 +메인 보드의 플래시 메모리 또는 EEPROM 탈취를 통한 +펌웨어 및 설정 데이터 유출 +신호 위조 +메인 보드 버스를 통한 악성 신호 주입 +인터페이스 +H/W +터미널 접근 +이더넷, USB, 직렬 통신 포트를 통한 비인가 터미널 접근 +외장 매체를 통한 +데이터 주입/유출 +USB 인터페이스를 통한 중요 데이터 및 설정 파일 유출 +신호 위조 +필드버스 커넥터 또는 전용 케이블 인터페이스를 통한 +악성 신호 주입 +서보 드라이브 +H/W +물리적 훼손 +서보 드라이브 물리적 손상을 통한 모터 제어 불능 +신호 위조 +서보 드라이브에 악성 제어 신호를 주입하여 로봇 관절 +오동작 유발 및 엔코더 피드백 조작 +저장 장치 +정보 탈취 및 조작 +서보 드라이브 펌웨어 및 설정 데이터 탈취 +부채널 공격 +신호 패턴을 분석하여 로봇 내부의 데이터를 유출해 제어 +정확성 및 동작 신뢰성 저하 유발 +로봇 제어반 보안 위협 + + +--- + +47 +01 +02 +03 +04 +05 +2) 티칭 도구 +티칭 도구는 작업자가 로봇을 직접 프로그래밍하고 조작하기 위한 인터페이스로, 로봇 제어반과 +긴밀하게 연결되어 제어 명령, 작업 프로그램, 설정 데이터를 전송한다. 티칭 펜던트, EWS, HMI는 각각 +전용 케이블, 이더넷, 무선 등 다양한 통신 방식으로 제어반과 연결되며, 로봇의 동작 설정, 파라미터 +변경, 프로그램 편집 등 핵심 제어 권한을 보유한다. 물리적 접근이 상대적으로 용이하고 작업자 인증이 +취약한 경우가 많아, 비인가 접근 및 악의적 조작의 위험에 노출될 수 있다. 티칭 도구에서 발생 가능한 +보안 위협은 다음과 같다. +제어 계층 +구성요소 +속성 +보안 위협 +세부 내용 +티칭 펜던트 +H/W +물리적 훼손 +티칭 펜던트 물리적 손상을 통한 로봇 조작 불능 +터미널 접근 +티칭 펜던트를 통한 비인가 터미널 접근 +외장 매체를 통한 +데이터 주입/유출 +티칭 펜던트 USB 포트를 통한 악성 프로그램 주입 또는 +작업 프로그램 유출 +저장 장치 +정보 탈취 및 조작 +티칭 펜던트 내 저장된 로봇 프로그램 및 설정 데이터 탈취 +또는 변조 +네트워크 +오동작 및 중단 유발 +티칭 펜던트를 통해 비정상 제어 명령 전송으로 로봇 오동작 +유발 +티칭 펜던트를 통해 로봇 작업 프로그램 및 파라미터 임의 +변경 +네트워크 도청 +티칭 펜던트와 제어반 간 통신 도청으로 제어 명령 및 작업 +프로그램 탈취 +시스템 +S/W +취약점 악용 +티칭 펜던트 소프트웨어의 알려진 취약점을 통한 권한 획득 +권한 탈취 +티칭 펜던트 운영체제 취약점을 악용하여 관리자 권한 획득 +업데이트 기능 악용 +티칭 펜던트 소프트웨어 업데이트 과정에서 악성코드 주입 +로그 위·변조 +티칭 펜던트의 작업 이력 로그 삭제 또는 변조 +응용 S/W +접근 제어 기능 악용 +티칭 펜던트의 약한 인증을 우회하여 비인가 접근 +작업/동작 설정 악용 +티칭 펜던트를 통해 로봇 동작 프로그램을 악의적으로 +변조하여 안전 설정 범위 벗어남 +설정 데이터 변조 +로봇 파라미터 및 운영 설정 데이터 변조 +데이터 탈취/변조 +티칭 펜던트에 저장된 작업 프로그램 및 설정 데이터 유출 +또는 삭제 +백업/복원 악용 +로봇 프로그램 백업 파일 변조 또는 악성 프로그램으로 복원 + + +--- + +48 +EWS +H/W +물리적 훼손 +EWS 물리적 손상을 통한 로봇 프로그래밍 및 설계 기능 마비 +터미널 접근 +EWS에 물리적으로 접근하여 비인가 터미널 접근 +외장 매체를 통한 +데이터 주입/유출 +USB를 통해 악성 프로그램 주입 또는 로봇 설계 데이터 +유출 +저장 장치 +정보 탈취 및 조작 +EWS 내 저장된 로봇 프로그램, 시뮬레이션 데이터, 설정 +파일 탈취 또는 변조 +네트워크 +오동작 및 중단 유발 +EWS를 통해 제어반에 비정상 제어 명령 전송 +EWS를 통해 로봇 제어 시스템 프로그램 변조 +서비스 거부 +EWS에 대량의 요청을 전송하여 서비스 중단 +네트워크 도청 +EWS와 제어반 간 이더넷 통신 도청으로 로봇 프로그램 및 +설정 데이터 탈취 +시스템 +S/W +취약점 악용 +EWS 운영체제 또는 개발 도구의 알려진 취약점을 통한 +침해 +권한 탈취 +EWS 시스템 권한 획득을 통한 로봇 제어 시스템 전체 접근 +업데이트 기능 악용 +EWS 소프트웨어 업데이트 과정에서 악성코드 주입 +로그 위·변조 +EWS의 작업 로그 및 접근 기록 삭제 또는 변조 +응용 S/W +접근 제어 기능 악용 +EWS의 약한 인증을 우회하여 비인가 접근 +작업/동작 설정 악용 +EWS를 통해 로봇 프로그램 및 PLC 로직 악의적 변조 +설정 데이터 변조 +로봇 시뮬레이션 설정 및 제어 파라미터 변조 +데이터 탈취/변조 +EWS에 저장된 로봇 설계 데이터, 프로그램, 시뮬레이션 +결과 유출 +원격지원 기능 악용 +EWS의 원격 접속 기능을 악용한 비인가 접근 +악성코드 유입/감염 +EWS에 악성코드를 감염시켜 연결된 제어 시스템으로 전파 +라이센스 파일 변조로 인한 +무단 소프트웨어 실행 +로봇 시뮬레이션 및 개발 도구의 라이센스 파일 변조 +HMI +H/W +물리적 훼손 +HMI 화면 또는 장치 물리적 손상을 통한 모니터링 및 제어 불능 +터미널 접근 +HMI 장치에 물리적으로 접근하여 비인가 터미널 접근 +외장 매체를 통한 +데이터 주입/유출 +USB를 통해 악성 프로그램 주입 또는 공정 데이터 유출 + + +--- + +49 +01 +02 +03 +04 +05 +네트워크 +오동작 및 중단 유발 +HMI를 통해 비정상 제어 명령 전송으로 로봇 오동작 유발 +HMI를 통해 로봇 작업 공정 설정 임의 변경 +서비스 거부 +HMI에 대량의 요청을 전송하여 모니터링 및 제어 기능 중단 +네트워크 도청 +HMI와 제어 시스템 간 통신 도청으로 공정 데이터 및 제어 +명령 탈취 +시스템 +S/W +취약점 악용 +HMI 소프트웨어의 알려진 취약점을 통한 침해 +권한 탈취 +HMI 시스템 권한 획득을 통한 제어 시스템 접근 +업데이트 기능 악용 +HMI 소프트웨어 업데이트 과정에서 악성코드 주입 +로그 위·변조 +HMI의 작업 로그 및 접근 기록 삭제 또는 변조 +응용 S/W +접근 제어 기능 악용 +HMI의 약한 인증을 우회하여 비인가 접근 및 조작 +작업/동작 설정 악용 +HMI를 통해 로봇 작업 공정 설정 악의적 변조 +설정 데이터 변조 +HMI 화면 설정 및 공정 파라미터 변조 +데이터 탈취/변조 +HMI에 표시되는 공정 데이터, 생산 정보 유출 +상태 조회/설정 변조 +HMI의 상태 모니터링 기능을 조작하여 잘못된 정보 표시 +원격지원 기능 악용 +HMI의 원격 모니터링 기능을 악용한 비인가 접근 +티칭 도구 보안 위협 +3) 로봇 본체 +로봇 본체는 실제 물리적 작업을 수행하는 최종 실행 장치로, 제어반으로부터 전원 케이블과 피드백 +케이블을 통해 전력과 제어 신호를 받아 정밀한 동작을 실행한다. 생산 현장에 직접 노출되어 있어 +물리적 접근이 가능하며, 케이블 절단, 센서 조작, 엔드 이펙터 변조 등 물리적 공격에 가장 취약한 +구간이다. 또한 필드버스 프로토콜을 통한 네트워크 통신이 이루어지는 경우 네트워크 공격에도 노출될 +수 있다. 로봇 본체에서 발생 가능한 보안 위협은 다음과 같다. + + +--- + +50 +로봇 본체 보안 위협 +설비 및 로봇 계층 +구성요소 +속성 +보안 위협 +세부 내용 +구동부 +H/W +물리적 훼손 +서보 모터 또는 구동부 물리적 손상을 통한 로봇 동작 불능 +신호 위조 +전원 케이블 또는 제어 신호 라인을 조작하여 서보 모터에 +악성 신호 전달 +저장 장치 +정보 탈취 및 조작 +서보 모터 내장 펌웨어 및 설정 데이터 탈취 또는 변조 +부채널 공격 +신호 패턴을 분석하여 로봇 내부의 데이터를 유출해 제어 +정확성 및 동작 신뢰성 저하 유발 +센서 및 +피드백부 +H/W +물리적 훼손 +엔코더 또는 센서 물리적 손상을 통한 피드백 신호 차단 +신호 위조 +피드백 케이블을 조작하여 제어반에 잘못된 위치, 속도, +토크 정보 전달 +저장 장치 +정보 탈취 및 조작 +센서 내장 펌웨어 및 캘리브레이션 데이터 변조 +네트워크 +네트워크 도청 +필드버스 프로토콜 통신을 도청하여 제어 명령 및 센서 +데이터 탈취 +메시지 재생 공격 +필드버스 통신 메시지를 수집하여 악의적 명령 재전송 +오동작 및 중단 유발 +필드버스 네트워크에 접근하여 제어 명령 변조로 로봇 +오동작 유발 +서비스 거부 +필드버스 네트워크에 조작된 패킷을 전송하여 통신 중단 +엔드 이펙터 +H/W +물리적 훼손 +그리퍼, 용접 토치 등 엔드 이펙터 물리적 손상 또는 교체 +신호 위조 +플랜지 I/O를 통한 디지털 I/O 또는 PWM 신호 조작으로 +그리퍼 오작동 또는 용접 토치 오동작 유발 +터미널 접근 +플랜지 I/O 포트를 통한 비인가 접근 +네트워크 +네트워크 도청 +엔드 이펙터 제어 신호 도청으로 작업 패턴 분석 +오동작 및 중단 유발 +플랜지 I/O를 통해 엔드 이펙터 제어 신호 변조로 작업 품질 +저하 또는 안전사고 유발 + + +--- + + + +--- + +52 +메시지 재생 공격 +배송·서빙 로봇 등 제어 신호(이동, 정지, 화물 적재), 작업 +완료 신호 등 ROS2/DDS 토픽 메시지를 수집해 인증 우회 +및 악의적 명령 재전송 +라우팅 기능 남용 +ROS 마스터 설정 또는 DDS 라우팅, 포워딩을 조작해 연동 +장비, FMS 등 허가된 시스템 외의 비인가 노드(공격자 PC +등)가 로봇 미들웨어 통신에 참여 +시스템 S/W +취약점 악용 +ROS 패키지(경로 계획, 내비게이션 등) 또는 통신 미들웨어의 +알려진 취약점을 통한 권한 획득 +업데이트 기능 악용 +ROS 패키지 업데이트 과정에서 악성 패키지 주입 +응용 S/W +악성코드 +유입 및 감염 +악의적인 노드를 추가해 토픽 및 액션을 무단 구독 및 +발행하여 서비스 파라미터와 제어 명령을 조작 및 변조하거나 +악성코드를 다른 노드로 전파 +라이센스 파일 변조로 인한 +무단 소프트웨어 실행 +ROS 기반 상용 소프트웨어(서비스 로봇)의 라이센스 파일 +변조 +API 모듈 +네트워크 +오동작 및 중단 유발 +API를 악용해 서비스 로봇(배송·서빙 로봇 등)에 속도 및 +경로 파라미터를 변경하는 비정상 제어 명령을 전송하여 로봇 +오동작을 유발 +서비스 거부 +대량의 API 요청을 서비스 로봇 제어 API(시작 및 중지, 모드 +변경 등)에 전송하여 응답을 지연 및 중단 +네트워크 도청 +API 통신 채널을 도청하여 제어 명령, 배송 정보, 사용자 정보 +등 민감 데이터를 수집 +응용 S/W +접근 제어 기능 악용 +API 인증 취약점을 악용해 서비스 로봇 제어 및 설정용 API +에 비인가로 접근하거나 운영자, 관리자로 권한 상승 +작업/동작설정 악용 +API를 통해 악의적 명령을 주입해 서비스 로봇의 작업 +프로파일 등 동작 설정을 변조 +설정 데이터 변조 +API를 통해 서비스 로봇의 속도·경로·작업 범위 등 설정 +파라미터와 세션 이력 등 운영 데이터 변조 +운영체제 +네트워크 +서비스 거부 +임베디드 운영체제 및 Linux(Ubuntu) 기반 운영체제 네트워크 +스택 취약점을 악용해 통신 자원을 고갈시켜 네트워크 기능을 +마비 + + +--- + +53 +01 +02 +03 +04 +05 +운영체제 +시스템 S/W +부트로더 및 초기 +신뢰체계 훼손 +부트로더를 조작하여 악성 운영체제 또는 펌웨어 로드 +권한 탈취 +커널 취약점을 악용하여 최고 권한 획득 및 악성 드라이버 설치 +업데이트 기능 악용 +운영체제 패치 및 업데이트 과정에서 악성코드 주입 +로그 위·변조 +시스템 로그 삭제 또는 변조를 통한 공격 흔적 은폐 +진단 기능 악용 +운영체제에 남아 있는 디버깅 모드 또는 테스트 기능을 악용 +메인 보드 +H/W +물리적 훼손 +메인 보드 물리적 손상을 통한 로봇 기능 마비 +터미널 접근 +JTAG, UART 등 디버깅 포트를 통한 펌웨어 덤프 및 메모리 접근 +저장 장치 +정보 탈취 및 조작 +메인 보드의 플래시 메모리 또는 EEPROM 탈취를 통한 펌웨어 및 +설정 데이터 유출 +안전보드 +H/W +물리적 훼손 +안전 입력 배선(비상 정지, 안전 스캐너 등)을 쇼트, 손상시켜 안전 +기능 우회 +신호 위조 +안전 센서의 입력 배선 구간 신호 위조를 통해 안전 기능 우회 +외장 매체를 통한 +데이터 주입/유출 +USB 인터페이스를 통한 안전보드 설정 파일 덮어쓰기를 통해 안전 +기능 우회 또는 설정 파일 유출 +인터페이스 +H/W +터미널 접근 +이더넷, USB, 직렬 통신 포트, 관리자 기능을 통한 비인가 터미널 접근 +외장 매체를 통한 +데이터 주입/유출 +USB 인터페이스를 통한 중요 데이터, 사용자 정보 및 설정 파일 유출 +구동부 +H/W +물리적 훼손 +모터 또는 구동부의 물리적 손상을 통한 로봇 동작 불능 +신호 위조 +전원 케이블 또는 제어 신호 라인을 조작하여 모터에 악성 신호 전달 +저장 장치 +정보 탈취 및 조작 +모터 드라이버의 펌웨어 및 설정 데이터 탈취 또는 변조 +부채널 공격 +신호 패턴을 분석하여 로봇 내부의 데이터를 유출해 제어 정확성 및 +동작 신뢰성 저하 유발 +센서 +H/W +물리적 훼손 +영역 내에 물리적으로 접근하여 센서 모듈을 파손하거나 배선을 +절단·쇼트시켜 센서 기능을 상실 또는 오동작 상태로 변경 +신호 위조 +센서에 반사판 사용, 패턴 이미지(QR 등)를 사용해 안전 영역, +장애물 인식 로직을 우회 +저장 장치 +정보 탈취 및 조작 +센서 내장 펌웨어 및 맵 데이터, 영상, 개인정보 등 중요 데이터를 +유출 +서비스용 로봇 온보드 보안 위협 + + +--- + +54 +2) 로봇 주변 장치 +로봇 주변 장치는 셀룰러 라우터, 도킹 스테이션, 페이로드 등으로 구성되어 로봇 온보드와 외부 +네트워크, 충전 인프라, 화물 적재 시스템을 연결한다. 유선 및 무선 통신을 통해 다양한 데이터를 +주고받으며, 하드웨어와 소프트웨어 계층이 복합적으로 구성되어 있어 여러 경로를 통한 공격에 노출될 +수 있다. 로봇 주변 장치에서 발생 가능한 보안 위협은 다음과 같다. +설비 및 로봇 계층 +구성요소 +속성 +보안 위협 +세부 내용 +셀룰러 +라우터 +H/W +물리적 훼손 +셀룰러 안테나 손상 또는 차단을 통한 원격 통신 두절 +터미널 접근 +물리적 시리얼 포트(UART) 접근을 통한 루트 쉘 획득 +저장 장치 +정보 탈취 및 조작 +UART/JTAG 디버그 포트 접근을 통한 펌웨어 덤프 및 VPN 인증서, +설정 파일 탈취 +네트워크 +네트워크 도청 +암호화되지 않은 응용 계층 통신 스니핑을 통한 제어 명령 및 데이터 탈취 +메시지 재생 공격 +응용 계층 메시지 캡처 후 재전송을 통한 악의적 명령 실행 +키·증명서 탈취를 +통한 통신 위조 +설정 파일에서 VPN 인증서 및 PSK 탈취 후 통신 위조 또는 중간자 +공격 +시스템 S/W +취약점 악용 +라우터 펌웨어의 공개된 CVE 취약점 익스플로잇 +응용 S/W +접근 제어 +기능 악용 +약한 Wi-Fi 패스워드 또는 WPS 취약점을 통한 무단 네트워크 접속 +기본 관리자 계정(admin/admin) 미변경 또는 약한 웹 관리 비밀번호 +사용 +설정 데이터 변조 +웹 인터페이스를 통한 방화벽 규칙, NAT, 포트 포워딩 설정 변조 +원격지원 +기능 악용 +SSH, Telnet, HTTP 원격 관리 기능의 비인가 접속 +취약점 악용 +웹 관리 인터페이스의 명령어 인젝션, CSRF, XSS 취약점 악용 +도킹 +스테이션 +H/W +물리적 훼손 +충전 단자 물리적 손상 또는 전원 케이블 절단을 통한 충전 불능 +네트워크 +네트워크 도청 +도킹 스테이션과 로봇 간 통신(시리얼, 무선) 스니핑을 통한 충전 상태 +정보 탈취 +메시지 재생 공격 +도킹 인증 메시지 캡처 후 재전송을 통한 비인가 로봇 충전 또는 충전 +방해 +페이로드 +H/W +물리적 훼손 +페이로드 적재함 잠금장치 물리적 파손을 통한 화물 탈취 +신호 위조 +무게 센서에 자석 또는 추가 하중 배치를 통한 허위 적재 상태 생성 +개폐 센서 자기장 조작을 통한 잠금 상태 우회 +저장 장치 +정보 탈취 및 조작 +페이로드 제어 보드의 펌웨어 및 센서 캘리브레이션 데이터 변조 +로봇 주변 장치 보안 위협 + + +--- + +55 +01 +02 +03 +04 +05 +3) 로봇관제 및 운영(On-Premise) +로봇관제 및 운영 영역(On-Premise)은 FMS(Fleet Management System)와 디지털 트윈으로 +구성되어 다수의 로봇을 통합 관리하고 실시간 모니터링을 수행한다. 클라우드 또는 현장(On- +Premise) 서버에서 운영되며, 네트워크를 통해 로봇 온보드 및 관리 플랫폼과 연동되어 있어 API 통신 +악용, 데이터 변조, 권한 탈취 등의 위협에 노출될 수 있다. 로봇관제 및 운영 영역(On-Premise)에서 +발생 가능한 보안 위협은 다음과 같다. +제어 계층 +구성요소 +속성 +보안 위협 +세부 내용 +FMS +네트워크 +네트워크 도청 +FMS와 로봇 간 암호화되지 않은 통신 도청을 통한 작업 할당, 경로 +계획, 로봇 상태 정보 탈취 +오동작 및 중단 +FMS API를 통해 잘못된 작업 할당 또는 충돌 경로를 전송하여 +로봇 충돌 유발 +서비스 거부 +FMS 서버에 대량의 API 요청 전송을 통한 서비스 중단 +메시지 재생 공격 +작업 할당 메시지 캡처 후 재전송을 통한 중복 작업 실행 또는 +작업 혼란 +응용 +S/W +접근 제어 기능 악용 +약한 인증 또는 기본 계정 사용으로 인한 FMS 관리 인터페이스 +무단 접근 +API 인증 취약점 악용을 통한 비인가 작업 할당 및 로봇 제어 +취약점 악용 +FMS 웹 인터페이스의 SQL 인젝션, XSS, CSRF 취약점 악용 +작업/동작 설정 악용 +작업 할당 알고리즘 파라미터 변조를 통한 로봇 오동작 또는 +비효율적 운영 +설정 데이터 변조 +로봇 우선순위, 경로 설정, 충돌 회피 파라미터 변조 +데이터 탈취/변조 +FMS 데이터베이스 접근을 통한 로봇 작업 이력, 운영 데이터 +탈취 또는 변조 +디지털 트윈 +네트워크 +네트워크 도청 +디지털 트윈과 로봇 간 실시간 동기화 데이터(센서, 위치, 상태) +스트림 도청 +서비스 거부 +디지털 트윈 서버에 대량의 시뮬레이션 요청 전송을 통한 서비스 +중단 +응용 +S/W +접근 제어 기능 악용 +약한 인증을 통한 디지털 트윈 시뮬레이션 및 모니터링 인터페이스 +무단 접근 +설정 데이터 변조 +디지털 트윈 환경 파라미터(맵, 장애물, 로봇 특성) 변조를 통한 +잘못된 시뮬레이션 결과 생성 +로봇 우선순위, 경로 설정, 충돌 회피 파라미터 변조 +취약점 악용 +시뮬레이션 엔진의 취약점 악용을 통한 서버 권한 획득 +데이터 탈취/변조 +시뮬레이션 데이터 및 예측 알고리즘 모델 탈취 +FMS 데이터베이스 접근을 통한 로봇 작업 이력, 운영 데이터 +탈취 또는 변조 +서비스용 로봇관제 및 운영 영역(On-Premise) 보안 위협 + + +--- + +56 +4) 로봇 제어 +로봇 제어 영역은 워크스테이션, 컨트롤러, 태블릿으로 구성되어 운영자가 로봇을 모니터링하고 +제어한다. 네트워크를 통해 로봇 및 운영 시스템과 연동되며, 하드웨어 및 소프트웨어 계층이 복합적으로 +구성되어 있어 물리적 접근, 인증 우회, 통신 침해 등의 위협에 노출될 수 있다. 로봇 제어 영역에서 발생 +가능한 보안 위협은 다음과 같다. +제어 계층 +구성요소 +속성 +보안 위협 +세부 내용 +워크스테이션 +H/W +물리적 훼손 +워크스테이션 하드웨어 손상을 통한 관제 기능 마비 +터미널 접근 +물리적 접근을 통한 키보드/마우스 조작 및 운영체제 접근 +외장 매체를 통한 +데이터 주입/유출 +USB를 통한 악성코드 주입 또는 로봇 관제 데이터, 설정 파일 유출 +네트워크 +네트워크 도청 +워크스테이션과 FMS/로봇 간 암호화되지 않은 통신 도청을 통한 +제어 명령 및 모니터링 데이터 탈취 +오동작 및 중단 +네트워크를 통해 워크스테이션에 악의적 제어 명령 전송하여 로봇 +오동작 유발 +시스템 +S/W +취약점 악용 +워크스테이션 운영체제(Windows, Linux)의 공개된 CVE 취약점 +익스플로잇 +권한 탈취 +운영체제 권한 상승 취약점을 통한 관리자 권한 획득 +업데이트 기능악용 +운영체제 또는 관제 소프트웨어 업데이트 과정에서 악성코드 주입 +응용 +S/W +접근 제어 +기능 악용 +약한 로그인 패스워드 또는 세션 관리 취약점을 통한 관제 시스템 무단 +접근 +취약점 악용 +관제 소프트웨어의 버퍼 오버플로우, SQL 인젝션 등 취약점 악용 +작업/동작 설정 악용 +관제 인터페이스를 통한 악의적 작업 지시 또는 긴급 정지 명령 전송 +원격지원 기능 악용 +원격 데스크톱(RDP, VNC) 기능의 비인가 접속 +악성코드 +유입/감염 +이메일, 웹, USB를 통한 악성코드 감염으로 제어 명령 조작 또는 +데이터 유출 +컨트롤러 +H/W +물리적 훼손 +컨트롤러 물리적 손상 또는 탈취를 통한 원격 조작 불능 +저장 장치 +정보 탈취 및 조작 +컨트롤러 펌웨어 추출 및 페어링 정보 탈취 +네트워크 +네트워크 도청 +컨트롤러와 로봇 간 무선 통신(Bluetooth, Wi-Fi) 도청을 통한 제어 +명령 탈취 +메시지 재생 공격 +제어 명령 캡처 후 재전송을 통한 로봇 오동작 유발 +응용 +S/W +접근 제어 +기능 악용 +약한 페어링 인증(PIN 4자리 등) 또는 페어링 없이 연결 가능한 설정 +취약점 악용 +컨트롤러 펌웨어의 버퍼 오버플로우 또는 명령어 인젝션 취약점 악용 + + +--- + +57 +01 +02 +03 +04 +05 +태블릿 +H/W +물리적 훼손 +태블릿 분실, 도난을 통한 로봇 제어 권한 탈취 +외장 매체를 통한 +데이터 주입/유출 +USB를 통한 악성 앱 설치 또는 로봇 제어 데이터 유출 +네트워크 +네트워크 도청 +태블릿과 로봇/FMS 간 Wi-Fi 통신 도청을 통한 제어 명령 및 +데이터 탈취 +오동작 및 중단 유발 +네트워크를 통해 태블릿 앱에 악의적 명령 전송하여 로봇 오동작 +유발 +시스템 +S/W +취약점 악용 +태블릿 운영체제(Android, iOS)의 공개된 CVE 취약점 +익스플로잇 +권한 탈취 +루팅(Rooting) 또는 탈옥(Jailbreak)을 통한 시스템 권한 획득 +응용 S/W +접근 제어 기능 악용 +약한 화면 잠금 또는 앱 로그인 패스워드를 통한 무단 접근 +취약점 악용 +로봇 제어 앱의 인증 우회, 세션 하이재킹 취약점 악용 +원격지원 기능 악용 +MDM(Mobile Device Management) 또는 원격 지원 기능의 +비인가 접속 +악성코드 유입/감염 +악성 앱 설치를 통한 로봇 제어 권한 탈취 또는 데이터 유출 +서비스용 로봇 제어 영역 보안 위협 +5) 로봇관제 및 운영(Cloud) +로봇관제 및 운영(Cloud) 영역은 응용프로그램 인터페이스(API), 메시징서비스(MQTT), 업데이트 +(OTA), 멀티미디어스트리밍(WebRTC) 등을 포함하며 로봇의 원격 관리 및 데이터 수집을 수행한다. +인터넷을 통해 로봇 및 외부 시스템과 연동되며, 다양한 통신 프로토콜을 사용하여 API 인증 우회, +메시지 변조, 업데이트 변조, 영상 스트림 도청 등의 위협에 노출될 수 있다. 로봇관제 및 운영(Cloud) +영역에서 발생 가능한 보안 위협은 다음과 같다. +응용 서비스 계층 +구성요소 +속성 +보안 위협 +세부 내용 +응용 +프로그램 +인터페이스 +(API) +네트워크 +네트워크 도청 +HTTPS 미적용 시 HTTP 통신 스니핑을 통한 API 요청/응답 데이터 탈취 +오동작 및 +중단 유발 +API를 통해 로봇에 비정상 제어 명령(속도 초과, 잘못된 경로 등) 전송 +서비스 거부 +API 엔드포인트에 대량의 요청 전송을 통한 서비스 중단 또는 과금 폭탄 +응용 +S/W +접근 제어 +기능 악용 +API 키 하드코딩 또는 GitHub 등 공개 저장소 노출로 인한 비인가 접근 +약한 API 인증(Basic Auth, 짧은 토큰) 또는 토큰 만료 미구현 +취약점 악용 +API의 SQL 인젝션, 명령어 인젝션, IDOR 취약점 악용 +설정 데이터 +변조 +API를 통한 로봇 설정(속도, 경로, 작업 범위) 파라미터 무단 변조 +데이터 +탈취/변조 +API를 통한 로봇 운영 데이터, 센서 데이터, 사용자 정보 무단 조회 또는 +변조 + + +--- + +58 +메시징서비스 +(MQTT) +네트워크 +네트워크 도청 +TLS 미적용 시 MQTT 토픽 메시지 스니핑을 통한 센서 데이터 및 +제어 명령 탈취 +메시지 재생 공격 +MQTT 메시지 캡처 후 재전송을 통한 중복 작업 실행 또는 로봇 +상태 조작 +서비스 거부 +MQTT 브로커에 대량의 메시지 발행을 통한 서비스 중단 +응용 S/W +접근 제어 +기능 악용 +MQTT 브로커 인증 미설정 또는 약한 패스워드 사용 +MQTT 토픽 구독 권한 미설정으로 비인가 토픽 접근 +설정 데이터 변조 +악의적 MQTT 메시지 발행을 통한 로봇 제어 명령 조작 +업데이트 +(OTA) +네트워크 +네트워크 도청 +HTTPS 미적용 시 펌웨어 다운로드 과정에서 업데이트 파일 탈취 +응용 S/W +업데이트 기능 악용 +업데이트 서버 URL 변조를 통한 악성 펌웨어 배포 +펌웨어 서명 검증 미구현으로 인한 변조된 펌웨어 설치 +접근 제어 +기능 악용 +OTA 관리 인터페이스의 약한 인증을 통한 비인가 업데이트 강제 +실행 +취약점 악용 +OTA 에이전트의 버퍼 오버플로우 또는 경로 탐색 취약점 악용 +설정 데이터 변조 +롤백 기능 비활성화 또는 업데이트 정책 변조를 통한 안정성 저하 +멀티 +미디어 +스트리밍 +(WebRTC) +네트워크 +네트워크 도청 +DTLS/SRTP 미적용 시 영상 스트림 스니핑을 통한 카메라 영상 +및 음성 도청 +서비스 거부 +WebRTC 시그널링 서버에 대량의 연결 요청을 통한 서비스 중단 +응용 S/W +접근 제어 +기능 악용 +약한 인증 또는 시그널링 서버 인증 미구현으로 인한 영상 스트림 +무단 접근 +취약점 악용 +WebRTC 라이브러리의 메모리 손상 취약점 악용 +데이터 탈취/변조 +영상 스트림 녹화 및 저장을 통한 프라이버시 침해 +FMS +로봇관제 및 운영(On-Premise)내 FMS, 디지털 트윈과 동일 요소이므로, FMS 및 디지털 트윈의 보안 +위협은 로봇관제 및 운영(On-Premise)의 보안 위협을 참조한다. +디지털 트윈 +서비스용 로봇관제 및 운영(Cloud) 보안 위협 + + +--- + + + +--- + +60 +네트워크 +메시지 재생 공격 +재활 로봇 등 제어 신호(학습, 걷기, 서기), 재활 완료 +신호 등 ROS2/DDS 토픽 메시지를 수집해 인증 우회 및 +악의적 명령 재전송 +라우팅 기능 남용 +ROS 마스터 설정 또는 DDS 라우팅, 포워딩을 조작해 +연동 장비, FMS 등 허가된 시스템 외의 비인가 노드( +공격자 PC 등)가 로봇 미들웨어 통신에 참여 +시스템 S/W +취약점 악용 +ROS 패키지(관절 제어, 모션 계획 등) 또는 통신 미들웨어 +(Cyclone DDS 등)의 알려진 취약점을 통한 권한 획득 +업데이트 기능 악용 +ROS 패키지 업데이트 과정에서 악성 패키지 주입 +응용 S/W +악성코드 유입/감염 +악의적인 노드를 추가해 토픽 및 액션을 무단 구독 +및 발행하여 치료 파라미터와 제어 명령을 조작 및 +변조하거나 악성코드를 다른 노드로 전파 +라이센스 파일 변조로 인한 +무단 소프트웨어 실행 +ROS 기반 상용 소프트웨어(의료용 로봇)의 라이센스 +파일 변조 +API 모듈 +네트워크 +오동작 및 중단 유발 +API를 악용해 의료용 로봇(재활 로봇 등)에 속도 및 힘 +파라미터를 변경하는 비정상 제어 명령을 전송하여 로봇 +오동작을 유발 +서비스 거부 +대량의 API 요청을 의료용 로봇 제어 API(시작 및 중지, +모드 변경 등)에 전송하여 응답을 지연 및 중단 +네트워크 도청 +API 통신 채널을 도청하여 제어 명령, 환자 식별 정보, +치료 파라미터 등 민감 의료 데이터를 수집 +응용 S/W +접근 제어 기능 악용 +API 인증 취약점을 악용해 의료용 로봇 제어 및 설정용 +API에 비인가로 접근하거나 의료진, 관리자로 권한 상승 +작업/동작 설정 악용 +API를 통해 악의적 명령을 주입해 의료용 로봇의 +프로파일 등 동작 설정을 변조 +설정 데이터 변조 +API를 통해 의료용 로봇의 속도·힘·관절 범위 등 설정 +파라미터와 세션 이력 등 운영 데이터 변조 +운영체제 +네트워크 +서비스 거부 +임베디드 운영체제 및 Linux(Ubuntu) 기반 운영체제 +네트워크 스택 취약점을 악용해 통신 자원을 고갈시켜 +네트워크 기능을 마비 +시스템 S/W +부트로더 및 초기 +신뢰체계 훼손 +부트로더를 조작하여 악성 운영체제 또는 펌웨어 로드 +권한 탈취 +커널 취약점을 악용하여 최고 권한 획득 및 악성 드라이버 +설치 +업데이트 기능 악용 +운영체제 패치 및 업데이트 과정에서 악성코드 주입 +로그 위·변조 +시스템 로그 삭제 또는 변조를 통한 공격 흔적 은폐 +진단 기능 악용 +운영체제에 남아 있는 디버깅 모드 또는 테스트 기능을 +악용 +메인 보드 +H/W +물리적 훼손 +메인 보드 물리적 손상을 통한 온보드 기능 마비 +터미널 접근 +JTAG, UART 등 디버깅 포트를 통한 펌웨어 덤프 및 +메모리 접근 +저장 장치 +정보 탈취 및 조작 +메인 보드의 플래시 메모리 또는 EEPROM 탈취를 통한 +펌웨어 및 설정 데이터 유출 + + +--- + +61 +01 +02 +03 +04 +05 +안전보드 +H/W +물리적 훼손 +안전 입력 배선(비상 정지, 안전 스캐너 등)을 쇼트, +손상시켜 안전 기능 우회 +신호 위조 +안전 센서의 입력의 배선 구간 신호 위조를 통해 안전 +기능 우회 +외장 매체를 통한 +데이터 주입/유출 +USB 인터페이스를 통한 안전보드 프로젝트 파일/설정 +덮어쓰기(악성 래더)를 통해 안전 기능 우회 또는 래더, +설정파일을 유출 +인터페이스 +H/W +터미널 접근 +이더넷, USB, 직렬 통신 포트, 관리자 기능을 통한 +비인가 터미널 접근 +외장 매체를 통한 +데이터 주입/유출 +USB 인터페이스를 통한 중요 데이터, 환자 식별 정보 및 +설정 파일 유출 +구동부 +H/W +물리적 훼손 +서보 드라이브 또는 구동부의 물리적 손상을 통한 로봇 +동작 불능 +신호 위조 +전원 케이블 또는 제어 신호 라인을 조작하여 서보모터에 +악성 신호 전달 +저장 장치 +정보 탈취 및 조작 +서보 드라이브의 펌웨어 및 설정 데이터 탈취 또는 변조 +센서 +H/W +물리적 훼손 +영역 내에 물리적으로 접근하여 센서 모듈을 파손하거나 +배선을 절단·쇼트시켜 센서 기능을 상실 또는 오동작 +상태로 변경 +신호 위조 +센서에 반사판 사용, 패턴 이미지(QR 등)를 사용해 안전 +영역, 장애물 인식 로직을 변동 +저장 장치 +정보 탈취 및 조작 +센서 내장 펌웨어 및 맵 데이터, 영상, 환자정보 등 중요 +데이터를 유출 +의료용 로봇 온보드 보안 위협 + + +--- + +62 +2) 수술 로봇 구동부 +수술 로봇 구동부는 환자의 수술 부위 바로 인접한 위치에서 서보 드라이브와 각종 센서를 통해 로봇 +팔과 수술 도구를 정밀 제어하는 장치로 수술 콘솔의 조작 신호를 텔레오퍼레이션 방식으로 추종하고 +스케일링, 필터링, 운동 보정을 거쳐 실제 수술 동작으로 변환한다. 환자 인체에 직접 힘과 움직임을 +가하는 특성상 이 영역이 침해되면 의사가 의도한 동작과 다른 움직임이 환자에게 전달되어 환자 +안전과 수술 결과에 즉각적인 영향을 미칠 수 있다. 이러한 특성으로 인해 수술 로봇 구동부에서는 서보 +드라이브, 모터, 센서 및 관련 제어 회로를 대상으로 한 보안 위협이 발생할 수 있다. +설비, 로봇 계층 +구성요소 +속성 +보안 위협 +세부 내용 +센서 +H/W +물리적 훼손 +엔코더 또는 자기 각도 센서 물리적 손상을 통한 위치 피드백 신호 +차단 +신호 위조 +센서 케이블 조작을 통해 서보 드라이브에 잘못된 위치, 속도, 토크 +정보 전달 +서보 드라이브 +H/W +물리적 훼손 +서보 드라이브 물리적 손상을 통한 로봇 팔 구동 불능 +신호 위조 +전원 케이블 또는 제어 신호 라인 조작을 통한 서보 모터 오동작 +유발 +저장 장치 +정보 탈취 및 조작 +서보 드라이브 펌웨어 및 제어 파라미터(토크, 속도 제한)탈취 또는 +변조 +부채널 공격 +신호 패턴을 분석하여 로봇 내부의 데이터를 유출해 제어 정확성 +및 동작 신뢰성 저하 유발 +로봇 팔 +H/W +물리적 훼손 +로봇 팔 관절부 또는 기계 구조물 물리적 손상을 통한 수술 불능 +신호 위조 +신호 조작을 통한 로봇 팔 예기치 않은 움직임 유발 +수술 도구 +H/W +물리적 훼손 +수술 기구(집게, 가위) 또는 내시경 물리적 손상을 통한 수술 중단 +저장 장치 +정보 탈취 및 조작 +수술 도구 식별 칩(RFID, EEPROM) 정보 변조를 통한 사용 이력 +조작 또는 인증 우회 +신호 위조 +내시경 영상 신호 조작을 통한 왜곡된 수술 시야 제공 +수술 로봇 구동부 보안 위협 + + +--- + +63 +01 +02 +03 +04 +05 +3) 수술 타워 +수술 타워는 인터페이스, 운영체제, 메인 보드, 연동 모듈로 구성되어 수술 로봇 구동부와 수술 콘솔을 +중계하는 중앙 제어 장치이다. 실시간 수술 제어와 병원 정보 시스템 연동을 담당하며, 물리적 접근, +시스템 침해, 통신 차단 등의 위협에 노출될 수 있다. 수술 타워에서 발생 가능한 보안 위협은 다음과 +같다. +설비, 로봇 계층 +구성요소 +속성 +보안 위협 +세부 내용 +인터페이스 +H/W +물리적 훼손 +EtherCAT, IEEE-1394 포트 물리적 손상을 통한 수술 로봇 +구동부와의 통신 차단 +터미널 접근 +관리용 시리얼 포트 또는 이더넷 포트를 통한 수술 타워 시스템 +무단 접근 +외장 매체를 통한 +데이터 주입/유출 +USB 포트를 통한 악성코드 주입 또는 수술 영상, 환자 데이터 +유출 +운영체제 +시스템 +S/W +취약점 악용 +RTOS 또는 Linux/Windows 운영체제의 공개된 CVE 취약점 +익스플로잇 +권한 탈취 +커널 취약점을 통한 루트 권한 획득 및 실시간 제어 시스템 조작 +부트로더 및 초기 +신뢰체계 훼손 +부트로더 변조를 통한 악성 운영체제 로드 +업데이트 기능 악용 +운영체제 업데이트 과정에서 악성코드 주입 +로그 위·변조 +수술 이벤트 로그 삭제 또는 변조를 통한 감사 추적 방해 +진단 기능 악용 +디버깅 모드 악용을 통한 실시간 제어 시스템 접근 +메인 보드 +H/W +물리적 훼손 +메인 보드 물리적 손상을 통한 수술 타워 전체 기능 마비 +터미널 접근 +JTAG, UART 등 디버깅 포트를 통한 펌웨어 덤프 및 메모리 접근 +저장 장치 +정보 탈취 및 조작 +플래시 메모리 또는 EEPROM 탈취를 통한 펌웨어 및 수술 설정 +데이터 유출 +신호 위조 +메인 보드 버스를 통한 악성 신호 주입 +연동 모듈 +네트 +워크 +네트워크 도청 +병원 정보 시스템과의 암호화되지 않은 통신 도청을 통한 환자 +정보 및 수술 데이터 탈취 +메시지 재생 공격 +병원 시스템으로 전송되는 수술 데이터 메시지 캡처 후 재전송 +키·증명서 탈취를 통한 +통신 위조 +병원 시스템 연동 인증서 탈취를 통한 위조 데이터 전송 +응용 +S/W +접근 제어 기능 악용 +병원 시스템 연동 인증 우회를 통한 무단 데이터 접근 +취약점 악용 +연동 모듈 소프트웨어의 버퍼 오버플로우, 인젝션 취약점 악용 +데이터 탈취/변조 +수술 영상, 환자 정보, 수술 도구 사용 이력 무단 수집 또는 변조 +원격지원 기능 악용 +원격 진단 및 업데이트 기능의 비인가 접속을 통한 시스템 제어권 +탈취 +업데이트 기능 악용 +연동 모듈 소프트웨어 업데이트 과정에서 악성코드 주입 +수술 타워 보안 위협 + + +--- + +64 +4) 수술 콘솔 +수술 콘솔은 제어보드, HMI, 컨트롤러로 구성되어 외과의가 수술 로봇을 직접 조작하는 인간-기계 +인터페이스 장치이다. 수술 타워와 실시간 통신을 통해 제어 명령 및 영상 데이터를 주고받으며, 물리적 +접근, 신호 조작, 펌웨어 변조 등의 위협에 노출될 수 있다. +수술 콘솔에서 발생 가능한 보안 위협은 다음과 같다. +제어계층 +구성요소 +속성 +보안 위협 +세부 내용 +제어보드 +H/W +물리적 훼손 +제어보드 물리적 손상을 통한 수술 콘솔 기능 마비 +터미널 접근 +UART, JTAG 등 디버그 포트 접근을 통한 펌웨어 덤프 및 설정 +변조 +저장 장치 +정보 탈취 및 조작 +제어보드 펌웨어 및 캘리브레이션 데이터 탈취 또는 변조 +HMI +H/W +물리적 훼손 +3D 뷰어 또는 조작 패널 물리적 손상을 통한 수술 시야 차단 +저장 장치 +정보 탈취 및 조작 +HMI 펌웨어 변조를 통한 잘못된 시스템 상태 정보 표시 +터미널 접근 +HMI 관리 인터페이스 무단 접근을 통한 디스플레이 설정 변조 +컨트롤러 +H/W +물리적 훼손 +MTM 또는 풋 페달 물리적 손상을 통한 수술 제어 불능 +저장 장치 +정보 탈취 및 조작 +컨트롤러 캘리브레이션 데이터 변조를 통한 입력 오차 발생 +터미널 접근 +컨트롤러 펌웨어 접근을 통한 입력 매핑 설정 변조 +수술 콘솔 보안 위협 +5) 로봇관제 및 운영(On-Premise) +의료용 AMR의 로봇관제 및 운영(On-Premise)은 서비스 로봇의 로봇관제 및 운영(On-premise) +영역과 동일하므로, 해당 영역의 구성요소에 대한 보안 위협은 서비스 로봇의 로봇관제 및 운영(On- +Premise)을 참조한다. +6) 로봇관제 및 운영(Cloud) +의료용 AMR의 로봇관제 및 운영(Cloud)은 서비스 로봇의 로봇관제 및 운영(Cloud) 영역과 동일하므로, +해당 영역의 구성요소에 대한 보안 위협은 서비스 로봇의 로봇관제 및 운영(Cloud)을 참조한다. +7) 병원 내부 정보 시스템 +본 문서는 로봇 서비스 고유의 보안 위협을 중점적으로 다루는 것을 목적으로 하므로, 병원 내부 정보 +시스템 구성요소에 대한 보안 위협 및 대응방안은 KISA 의료기기 보안 시험 해설서, KISA헬스케어 +보안모델을 참조한다. + + +--- + + + +--- + +66 +로봇 동작 변조 시나리오 – 산업용 로봇 +② 티칭 펜던트 인증 우회 +시나리오 +공격자가 약한 인증을 사용하는 티칭 펜던트를 탈취하여 로봇 작업 프로그램과 속도 제한을 변조 +구성요소 +티칭 펜던트 +상세 위협 +접근 제어 +기능 악용 +티칭 펜던트의 약한 인증을 우회하여 비인가 접근 +작업/동작 +설정 악용 +티칭 펜던트를 통해 로봇 동작 프로그램을 악의적으로 변조하여 안전 설정 범위 벗어남 +설정 데이터 +변조 +로봇 파라미터 및 운영 설정 데이터 변조 +③ 변조된 펌웨어 로드 +시나리오 +공격자가 약한 인증을 사용하는 티칭 펜던트를 탈취하여 로봇 작업 프로그램과 속도 제한을 변조 +구성요소 +티칭 펜던트 +상세 위협 +저장 장치 +정보 탈취 및 +조작 +티칭 펜던트 내 저장된 로봇 프로그램 및 설정 데이터 탈취 또는 변조 +백업/복원 +악용 +로봇 프로그램 백업 파일 변조 또는 악성 프로그램으로 복원 +④ 오작동 패킷 전송 +시나리오 +공격자가 보호되지 않은 로봇 셀 네트워크에 접근하여 비정상 제어 명령을 전송하여 로봇 오동작 유발 +구성요소 +API 모듈 +상세 위협 +오동작 및 +중단 유발 +API를 통해 비정상 제어 명령을 전송하여 로봇 오동작 유발 +⑤ 원격 유지보수 접속을 통한 프로그램 변조 +시나리오 +공격자가 EWS의 원격 접속 기능을 악용하여 비인가 접근 후 PLC 로직 또는 로봇 프로그램을 악의적으로 +변조하여 지속적인 오동작 유발 +구성요소 +EWS +상세 위협 +원격지원 +기능 악용 +EWS의 원격 접속 기능을 악용한 비인가 접근 +작업/동작 +설정 악용 +EWS를 통해 로봇 프로그램 및 PLC 로직 악의적 변조 +⑥ 필드버스 프로토콜 통신 변조 +시나리오 +공격자가 필드버스 네트워크에 접근하여 제어 명령을 변조하거나 필드버스 통신 메시지를 수집하여 +악의적 명령 재전송으로 로봇 오동작 유발 +구성요소 +센서 및 피드백부 +상세 위협 +메시지 +재생 공격 +필드버스 통신 메시지를 수집하여 악의적 명령 재전송 +오동작 및 +중단 유발 +필드버스 네트워크에 접근하여 제어 명령 변조로 로봇 오동작 유발 + + +--- + + + +--- + +68 +로봇 동작 변조 시나리오 – 서비스용 로봇 +③ 변조된 펌웨어 로드 +시나리오 +공격자가 로봇관제 및 운영(Cloud) 같은 상위 시스템에 침투하여 변조된 로봇 펌웨어 업데이트를 명령 +구성요소 +로봇관제 및 운영(Cloud), 셀룰러 라우터 +상세 위협 +업데이트 +기능 악용 +로봇관제 및 운영(Cloud)의 원격 업데이트 기능 요청 변조된 로봇 펌웨어를 셀룰러 +라우터를 거쳐 악성 업데이트 수행 +④ 필드버스 프로토콜 통신 변조 +시나리오 +공격자가 필드버스 네트워크에 접근하여 제어 명령을 변조하거나 필드버스 통신 메시지를 수집하여 +악의적 명령 재전송으로 로봇 오동작 유발 +구성요소 +센서 및 구동부 +상세 위협 +메시지 +재생 공격 +필드버스 통신 메시지를 수집하여 악의적 명령 재전송 +오동작 및 +중단 +필드버스 네트워크에 접근하여 제어 명령 변조로 로봇 오동작 유발 +백업/복원 +악용 +FMS 로봇 프로그램 백업 및 업데이트 파일 변조 또는 악성 프로그램으로 복원 +저장 장치 +정보 탈취 및 +조작 +컨트롤러, 태블릿, FMS 내 저장된 로봇 프로그램 및 설정 데이터 탈취 또는 변조 + + +--- + + + +--- + +70 +로봇 동작 변조 시나리오 – 의료용 로봇 +③ 미들웨어를 통한 악성코드 동작 조건 만족 +시나리오 +공격자가 DDS 라우팅/포워딩 설정을 조작해 외부망에 있는 공격자 PC가 미들웨어 통신에 참여할 수 +있도록 한 뒤 전자의무기록(EMR/EHR)에 하드웨어 악성코드 동작용으로 조작된 환자 정보를 전달 +구성요소 +로봇 온보드(의료용 AMR) +상세 위협 +라우팅 기능 +남용 +비인가 노드(공격자 PC)를 미들웨어 통신에 참여시키고 악의적인 환자 식별 정보 +저장 +④ 서보 드라이브 출력 신호 변조 +시나리오 +FPGA(Field-Programmable Gate Array) 메인 보드의 비트스트림이 특정 조건을 만족하면 서보 +드라이브 펄스폭 변조신호(PWM) 출력을 최대치로 올리는 제어 명령 전달되어 환자와 의료진의 생명을 +위협 +구성요소 +수술 로봇 구동부(서보 드라이브) +상세 위협 +신호 위조 +전원 케이블 또는 제어 신호 라인 조작을 통한 오동작 유발 + + +--- + + + +--- + +72 +악성코드 감염 시나리오 – 산업용 로봇 +② 소프트웨어 업데이트 변조 +시나리오 +공격자가 로봇 제어반, 티칭 도구의 소프트웨어 업데이트 과정을 악용하여 악성코드가 포함된 업데이트 +패키지 설치 +구성요소 +티칭 펜던트, EWS, HMI, 미들웨어(ROS), 운영체제 +상세 위협 +업데이트 기능 악용 +티칭 펜던트 소프트웨어 업데이트 과정에서 악성코드 주입 +업데이트 기능 악용 +EWS 소프트웨어 업데이트 과정에서 악성코드 주입 +업데이트 기능 악용 +HMI 소프트웨어 업데이트 과정에서 악성코드 주입 +업데이트 기능 악용 +운영체제 패치 및 업데이트 과정에서 악성코드 주입 +업데이트 기능 악용 +ROS 패키지 업데이트 과정에서 악성 패키지 주입 +③ 취약점 악용을 통한 악성코드 감염 +시나리오 +공격자가 티칭 도구 또는 로봇 제어반의 알려진 취약점을 악용하여 악성코드 설치 및 권한 획득 +구성요소 +티칭 펜던트, EWS, HMI, 미들웨어(ROS) +상세 위협 +취약점 악용 +HMI 소프트웨어의 알려진 취약점을 통한 시스템 장악 +취약점 악용 +ROS 패키지 또는 미들웨어 라이브러리의 알려진 취약점을 통한 권한 획득 +취약점 악용 +EWS 운영체제 또는 개발 도구의 알려진 취약점을 통한 시스템 장악 +취약점 악용 +티칭 펜던트 소프트웨어의 알려진 취약점을 통한 권한 획득 +④ 원격 접속을 통한 악성코드 유입 +시나리오 +공격자가 EWS의 원격 접속 기능을 악용하여 비인가 접근 후 악성코드 설치 및 제어 시스템으로 전파 +구성요소 +EWS +상세 위협 +악성코드 유입/감염 +EWS에 악성코드를 감염시켜 연결된 제어 시스템으로 전파 +원격지원 기능 악용 +EWS의 원격 접속 기능을 악용한 비인가 접근 +⑤ 부트로더 및 펌웨어 변조 +시나리오 +공격자가 로봇 제어반의 부트로더를 조작하거나 펌웨어를 변조하여 악성 운영체제 또는 펌웨어 로드 +구성요소 +운영체제, 서보 드라이브, 메인 보드 +상세 위협 +저장 장치 정보 탈취 +및 조작 +서보 드라이브 펌웨어 및 설정 데이터 탈취 +저장 장치 정보 탈취 +및 조작 +메인 보드의 플래시 메모리 또는 EEPROM 탈취를 통한 펌웨어 및 설정 +데이터 유출 +부트로더 및 초기 +신뢰체계 훼손 +부트로더를 조작하여 악성 운영체제 또는 펌웨어 로드 + + +--- + + + +--- + +74 +③ 취약점 악용을 통한 악성코드 감염 +시나리오 +공격자가 워크스테이션, 태블릿, FMS의 알려진 취약점을 악용하여 악성코드 설치 및 권한 획득 +구성요소 +워크스테이션, 태블릿, FMS +상세 위협 +취약점 악용 +워크스테이션 내장 소프트웨어의 알려진 취약점을 통한 침해 및 권한 획득 +취약점 악용 +태블릿 내장 소프트웨어의 알려진 취약점을 통한 침해 및 권한 획득 +취약점 악용 +FMS 내장 소프트웨어의 알려진 취약점을 통한 침해 및 권한 획득 +취약점 악용 +ROS 패키지 또는 미들웨어 라이브러리의 알려진 취약점을 통한 권한 획득 +악성코드 감염 시나리오 – 서비스용 로봇 +④ 원격 접속을 통한 악성코드 유입 +시나리오 +공격자가 로봇관제 및 운영(Cloud)의 원격 관리 기능을 악용하여 비인가 접근 후 악성코드 설치 및 제어 +시스템으로 전파 +구성요소 +로봇관제 및 운영(Cloud), 셀룰러 라우터 +상세 위협 +악성코드 +유입/감염 +로봇관제 및 운영(Cloud)에 악성코드를 감염시켜 연결된 제어 시스템으로 전파 +원격지원 +기능 악용 +로봇관제 및 운영(Cloud)의 원격 접속 기능을 악용한 비인가 접근 +⑤ 부트로더 및 펌웨어 침해 +시나리오 +공격자가 로봇 구성요소의 부트로더를 조작하거나 펌웨어를 변조하여 악성 운영체제 또는 펌웨어 로드 +구성요소 +운영체제, 온보드 구동부, 메인 보드 +상세 위협 +저장 장치 +정보 탈취 및 +조작 +서보 드라이브 펌웨어 및 설정 데이터 탈취 +저장 장치 +정보 탈취 및 +조작 +온보드 구동부 펌웨어 및 설정 데이터 탈취 +부트로더 및 +초기 신뢰체계 +훼손 +부트로더를 조작하여 악성 운영체제 또는 펌웨어 로드 + + +--- + + + +--- + +76 +악성코드 감염 시나리오 – 의료용 로봇 +② 소프트웨어 업데이트 악용 +시나리오 +공격자가 수술 타워, 재활 로봇, FMS, 플랫폼 연동 장비 등의 소프트웨어 업데이트, 패치 채널을 +탈취하거나 위조하여 정상 업데이트로 위장한 악성 패키지를 배포 및 설치 +구성요소 +수술 타워 운영체제 및 제어 소프트웨어, 로봇 온보드 ROS/미들웨어, FMS 서버 소프트웨어, 플랫폼 +연동 장비 소프트웨어, 연동 모듈 +상세 위협 +업데이트 기능 악용 +수술 타워 OS 및 제어 애플리케이션 업데이트 과정에서 악성코드가 포함된 +패키지 설치 +업데이트 기능 악용 +ROS 패키지, DDS 미들웨어, 의료용 로봇 제어 모듈 업데이트 채널을 +악용해 악성 노드·라이브러리 주입 +업데이트 기능 악용 +FMS·연동 모듈 소프트웨어 업데이트 시 악성 모듈 삽입으로 중앙 플랫폼을 +발판으로 한 대량 감염 +③ 취약점 악용을 통한 악성코드 감염 +시나리오 +공격자가 인터넷·병원망에 노출된 FMS 웹 인터페이스, ROS2/DDS 미들웨어, API 서버, 워크스테이션· +태블릿의 운영체제 및 의료 앱의 취약점을 악용하여 원격 코드 실행(RCE) 권한을 획득하고 악성코드를 +설치한 뒤 다른 의료용 로봇 구성요소로 확산 +구성요소 +로봇 온보드(미들웨어, 시스템 S/W, API 모듈), 워크스테이션, 태블릿, FMS, 연동 모듈 +상세 위협 +취약점 +악용 +ROS 패키지·DDS 미들웨어의 알려진 취약점을 악용해 의료용 로봇 제어 노드 권한 획득 +취약점 +악용 +FMS 웹·API 서버의 SQL 인젝션, XSS, 명령 주입 취약점을 이용해 서버 권한 탈취 및 +악성코드 설치 +취약점 +악용 +워크스테이션·태블릿 운영체제 및 의료 앱의 공개 CVE 취약점을 통한 루트/관리자 권한 +획득 +④ 원격 접속을 통한 악성코드 유입 부트로더 및 펌웨어 변조 +시나리오 +공격자가 공급망 단계 또는 현장 유지보수·업데이트 과정에서 수술 타워 메인 보드, 로봇 온보드, +서보 드라이브, 안전보드(안전 PLC), 센서·수술 도구의 펌웨어와 부트로더를 변조하여, 부팅 시 악성 +운영체제 또는 악성 제어 로직을 로드하도록 만들고, 일반 보안 솔루션으로는 탐지하기 어려운 지속적 +악성코드를 심는다. +구성요소 +수술 타워(메인 보드 및 운영체제), 로봇 온보드(재활 로봇, 의료용 AMR), 서보 드라이브(펌웨어, +파라미터), 안전보드(안전 PLC), 센서 모듈 및 수술 도구 식별 칩 +상세 위협 +부트로더 및 초기 +신뢰체계 훼손 +수술 타워·로봇 온보드 부트로더를 변조해 악성 운영체제·RTOS 로드 +부트로더 및 초기 +신뢰체계 훼손 +보안 부팅 체인을 우회하여 서명되지 않은 악성 펌웨어 실행 +저장 장치 정보 탈취 +및 조작 +메인 보드, 센서·수술 도구의 플래시 메모리 또는 EEPROM을 덤프해 제어 +로직·맵 데이터·환자 정보 유출 +저장 장치 정보 탈취 +및 조작 +서보 드라이브, 안전보드의 토크·속도 제한 파라미터, 안전보드 프로젝트 파일 +(래더·안전 로직)을 변조해 안전 기능 우회 +저장 장치 정보 탈취 +및 조작 +특정 조건(특정 환자 ID등)에서만 동작하는 하드웨어 악성코드 삽입 +저장 장치 정보 탈취 +및 조작 +안전 센서 입력을 조작해 위험한 동작을 허용하거나, 로봇 팔·수술 도구 +움직임에 미세한 편차를 지속적으로 주입 + + +--- + +77 +01 +02 +03 +04 +05 + + +--- + + + +--- + + + +--- + +80 +보안 아키텍처 +04 + +## 3장에서 식별된 로봇 시스템 보안 위협에 체계적으로 대응하기 위해서는 로봇 제조사 및 운영기관이 + +보안 요구사항 준수 여부를 점검할 수 있는 실무 도구가 필요하다. +본 장은 식별된 위협을 두 가지 관점에서 완화하는 방안을 제시한다. 첫째, 글로벌 사이버보안 규제· +표준·가이드라인을 기반으로 개발한 보안 취약점 점검 체크리스트를 통해 국제 규제 준수를 지원한다. +둘째, 로봇 속성별 위협에 대응하는 보안 요구사항을 정의하고 이를 충족하기 위한 보안 솔루션 매핑을 +제시하며, 각 서비스 유형의 특성에 맞는 완화 대책을 제공한다. 마지막으로 로봇 서비스 전 영역을 +아우르는 통합 보안 구성도를 통해 전체적인 보안 아키텍처를 제시한다. +본 장의 구성은 다음과 같다. +4.1 +보안 취약점 점검 체크리스트 +글로벌 사이버보안 규제·표준·가이드라인을 분석하여 도출된 11개 카테고리의 보안요구사항을 +제시한다. + +### 4.4 통합 보안 구성도 + +식별된 위협과 보안요구사항을 기반으로 로봇 서비스 전 영역을 아우르는 통합 보안 구성도를 제공하여 +전체적인 보안 아키텍처를 시각적으로 표현한다. + +### 4.2 보안요구사항 + + +## 3장에서 식별된 로봇 속성(하드웨어·네트워크·시스템 소프트웨어·응용 소프트웨어) 분류를 기준으로 + +보안 위협에 대응하는 보안요구사항을 정의하고, 각 요구사항을 충족하기 위한 보안 솔루션 매핑을 +제시한다. + +### 4.3 서비스별 보안요구사항 + +산업용·서비스용·의료용 로봇 서비스 유형별 특성 및 운영 환경 고려하여 각 서비스 유형의 구성요소별 +상세 보안요구사항을 제시한다. + + +--- + +81 +01 +02 +03 +04 +05 +본 장의 목표는 글로벌 규제·표준을 반영한 실무 활용 가능한 체크리스트를 제공하고, 속성별·서비스별 +체계적인 보안요구사항을 정의하는 데 있다. 또한 로봇 제조사 및 운영기관이 적용 가능한 구체적인 +완화 대책을 제시하며, 통합 보안 아키텍처 관점의 전체 보안 구성 방향을 수립한다. 이를 통해 로봇 +제조사 및 운영기관이 체계적으로 보안요구사항을 점검하고, 서비스 유형별로 요구되는 보안 조치를 +명확히 구현할 수 있도록 지원한다. +해당 카테고리는 안전한 로봇 시스템 내의 소프트웨어 개발을 위한 체크리스트를 정의하였다. +보안 소프트웨어 개발 프레임워크를 적용하여 안전한 소프트웨어 개발을 수행하기 위한 가이드인 NIST +SP 800-218을 차용하였으며, 미국 연방정부에 소프트웨어를 판매하는 소프트웨어 생산자의 경우 +행정 명령에 따라 해당 가이드를 준수하여야 하며 점차 표준화되는 추세이다. +NIST SP 800-218은 안전한 소프트웨어 개발 관행을 다음과 같이 4가지 실천 영역(Practice Group) +으로 분류하였다. +본 절은 식별된 보안 위협과 글로벌 사이버보안 표준, 규제 및 가이드라인을 기반으로 개발한 보안 +취약점 점검 체크리스트를 11개 카테고리로 구분하여 제시하였다. 각 카테고리별 참조 규제 및 표준은 +다음과 같다. +4.1 +보안 취약점 점검 체크리스트 +•  Prepare the Software (PS) : 개발된 소프트웨어를 변조 및 무단 접근으로부터 보호 +•  Prepare the Organization (PO) : 조직이 안전한 소프트웨어 개발을 수행할 수 있도록 준비 +•  Produce Well-Secured Software (PW) : 보안 취약점을 최소화한 소프트웨어 개발 +•  Respond to Vulnerabilities (RV) : 배포된 소프트웨어 취약점을 식별하고 대응 +NIST 800-218 실천 영역 +① 보안 소프트웨어 개발 프레임워크(SSDF, Secure Software Development Framework) + + +--- + +82 +해당 카테고리는 최근 증가하고 있는 소프트웨어 공급망 위협에 대응하기 위하여 로봇 시스템의 공급망 +전반에 적용되는 체크리스트를 정의하였다. +Log4j 취약점과 SolarWinds 공급망 공격 등 대규모 공급망 보안 사건들이 발생하면서, 하나의 +취약점이 수백만 개 소프트웨어에 영향을 미치고 광범위한 피해를 초래할 수 있어 공급망 보안의 +중요성이 인식되기 시작했다. +사이버보안 공급망 위험 관리(C-SCRM, Cybersecurity Supply Chain Risk Management)를 +적용하여 공급망 보안을 강화하기 위한 가이드인 NIST SP 800-161을 참고하였으며, 조직이 공급망 +전체에서 사이버보안 위험을 체계적으로 식별, 평가, 완화할 수 있도록 제시하고 있다. +NIST SP 800-161은 NIST SP 800-53을 보완하는 프레임워크로 기본적인 사이버보안 성숙도를 +달성한 후 공급망 보안을 강화하기 위해 광범위하게 채택되고 있는 추세이다. +해당 카테고리는 산업제어시스템(ICS)의 사이버보안을 위해 고안된 국제 표준인 IEC 62443을 +참고하여 로봇 시스템의 기본적인 보안 요구사항을 정의하였다. +IEC 62443은 산업 통신망의 위험 완화를 목적으로 고안되었으며, 사이버보안에 대한 전체적인 접근 +방식을 제공하는 산업 전반의 선도적인 산업 사이버보안 표준이다. +IEC 62443은 포괄적인 설계 기반 보안 접근 방식으로, 운영 프로세스, 시스템 및 구성요소에 대한 +요구사항을 포함하며, 절차적 조치와 기술적 조치를 모두 정의한다. +② 공급망 보안 +③ 식별 및 인증 +⑦ 데이터 흐름 제한 +⑤ 시스템 무결성 +⑨ 자원 가용성 +④ 사용 통제 +⑧ 이벤트 대응 +⑥ 데이터 보호 +IEC 62443 표준 간 관계성 + + +--- + +83 +01 +02 +03 +04 +05 +IEC 62443-1-1에서 산업제어시스템의 기본 보안 요구사항(FR, Foundational Requirement)을 +다음과 같이 7가지로 분류하였다. +IEC 62443-4-2는 기본 요구사항(CR, Component Requirement)과 강화된 요구사항 +(RE, Requirement Enhancement)을 단계적으로 적용하여 보안 수준(SL, Security Level)을 +1부터 4까지 4단계의 보안수준으로 정의한다. +해당 카테고리는 유럽의 사이버 복원력 법안인 CRA(Cyber Resilience Act)를 참고하여 로봇 +시스템의 침해 후 기능 유지 및 신속 복구를 위한 보안 요구사항을 정의하였다. +최근 사이버 위협이 증가함에 따라 사이버 침해 사고 방지만큼 침해 발생 후 신속하게 시스템을 복구하고 +정상 운영 상태로 복귀할 수 있는 능력, 즉 사이버 복원력의 중요성이 강조되고 있다. 사이버 복원력은 +공격이나 침해로부터 시스템을 보호하는 것뿐만 아니라, 침해 발생 시에도 핵심 운영 기능을 유지하고 +빠르게 복구할 수 있는 종합적인 능력을 의미한다. +CRA는 디지털 제품 및 소프트웨어가 기본적인 사이버보안 요건을 충족하도록 요구하는 규제 법안으로, +2027년 12월에 전면 시행되어 사이버 위협에 대한 보안 인증, 취약점 공개, 보안 업데이트 제공, +SBOM 제출 등을 의무화할 예정이다. +승인되지 않은 장치 또는 정보에 대한 불법적 접근으로부터 보호하기 위한 접근 제어 요구사항 +FR 1 - 식별 및 인증(IA, Identification and Authentication) +통신 채널의 승인되지 않은 변경으로부터 보호하기 위한 데이터 무결성 확보 요구사항 +FR 3 - 시스템 무결성(SI, System Integrity) +승인되지 않은 정보 공개로부터 보호하기 위한 통신 채널의 데이터 흐름 제한 요구사항 +FR 5 - 데이터 흐름 제한(RDF, Restrict Data Flow) +승인되지 않은 장치 작동 또는 정보 사용으로부터 보호하기 위한 사용 통제 요구사항 +FR 2 - 사용 통제(UC, Use Control) +도청으로부터 보호하기 위해 선택된 통신 채널의 데이터 기밀성 확보 요구사항 +FR 4 - 데이터 보호(DC, Data Confidentiality) +보안 위반을 적절한 담당자에게 알리고, 위반의 포렌식 증거를 보고하며, 긴급 상황에서 시기적절한 시정 조치 +를 실시하는 요구사항 +FR 6 - 이벤트 대응(TRE, Timely Response to Event) +서비스 거부 공격으로부터 보호하기 위해 모든 네트워크 자원의 가용성을 확보하는 요구사항 +FR 7 - 자원 가용성(RA, Resource Availability) +⑩ 사이버 복원력 (Cyber Resilience) + + +--- + +84 +해당 카테고리는 유럽 연합(EU)의 무선장비지침(RED, Radio Equipment Directive)을 참고하여 +무선 통신을 수행하는 로봇 시스템에 대한 요구사항을 정의하였다. +RED는 원래 무선 장비의 전자기 적합성(EMC) 및 전파 사용 적합성을 규정하는 지침이었지만, 2024 +년 이후 단계적으로 시행되는 새로운 보안 표준(EN 18031 시리즈)을 통해 무선 장비의 사이버보안을 +의무화하는 규제 프레임워크로 확장되었다. RED의 법적 근거 조항인 Article 3.3(d), (e), (f)를 +활성화함으로써 무선 기능을 가진 장비들이 최소한의 사이버보안 능력을 갖추도록 요구하고 있다. +유럽 연합의 CE 인증 체계에 2025년 8월부터 RED에 대한 적합성 평가가 의무적으로 포함되었다. +이는 유럽 시장에 판매되는 무선 기능을 포함한 모든 장비, 특히 로봇 시스템이 무선 통신을 활용하는 +경우 반드시 RED 규제 요구사항을 충족해야 함을 의미한다. +⑪ 무선 보안 +RED (2014/53/EU)에서 요구하는 유럽에서 판매되는 무선 장비에 대한 일반적인 보안 요구사항 1부로, 인터넷 연결 무선 장비 +대상으로 규정 +EN 18031-1 Common security requirements for radio equipment - Part 1: Internet connected radio equipment +RED (2014/53/EU)에서 요구하는 유럽에서 판매되는 무선 장비에 대한 일반적인 보안 요구사항 2부로, 데이터를 처리하는 무선 +장비, 즉 인터넷 연결 무선 장비, 보육용 무선 장비, 장난감 무선 장비 및 착용형 무선 장비 대상으로 규정 +EN 18031-2 Common security requirements for radio equipment - Part 2: radio equipment processing data, namely +Internet connected radio equipment, childcare radio equipment, toys radio equipment and wearable radio equipment +RED (2014/53/EU)에서 요구하는 유럽에서 판매되는 무선 장비에 대한 일반적인 보안 요구사항 3부로, 가상 화폐 또는 금전적 가치를 +처리하는 인터넷 연결 무선 장비 대상으로 규정 +EN 18031-3 Common security requirements for radio equipment - Part 3: Internet connected radio equipment +processing virtual money or monetary value +이외에도 다음과 같은 국제 표준 및 유럽 규제를 종합적으로 반영하였다. +EU의 기본 사이버보안 법령으로, 제조사가 실제로 적용 가능한 보안 요구사항으로 재구성한 규정이다. 보안 정책 수립, 사이버 위협 +모니터링, 보안 사건 보고 및 대응 체계를 포함한다. +NIS2 (Network and Information Security Directive 2) +산업제어시스템 제품의 보안 개발 프로세스 요구사항을 규정한다. 설계 단계에서부터 보안을 통합하는 Secure Development +Lifecycle(SDLC) 접근방식을 정의하며, 안전한 코딩 관행과 보안 테스트를 포함한다. +IEC 62443-4-1 + + +--- + +85 +01 +02 +03 +04 +05 +SSDF 점검 체크리스트는 로봇 소프트웨어 개발 전 과정에서 보안을 내재화하기 위한 것으로, 안전한 +개발 생애주기(SDLC, Secure Development Life Cycle), 코드 무결성 확보, 취약점 대응 등을 포함 +한다. 개발 단계에서 발생할 수 있는 보안 약점을 사전에 방지하는 것을 목표로 한다. +기계류의 설계 및 운영 단계에서의 안전 요구사항을 규정하는 국제 표준으로, 제5절 사이버 보안에서 로봇 시스템의 보안 지침을 +정의한다. 제어 인터페이스 보안, 통신 채널의 무결성, 비인가 제어 명령으로부터의 보호 등 로봇의 자동화 및 원격 제어에 필요한 사이버 +보안 요구사항을 포함한다. +ISO/IEC 22166-1 +로봇 시스템이 개인정보를 수집·처리하는 경우, 데이터 암호화, 접근 제어, 개인정보 유출 시 신고 의무 등의 보안 조치를 이행해야 한다. +개인정보보호법 + +#### 4.1.1 SSDF 점검 체크리스트 + +번호 +체크리스트 항목 +내용 +SSDF-01 +소프트웨어 개발 +보안 요구사항 정의 +소프트웨어 개발 인프라, 프로세스, 제품, 외부 구성요소 전반에 대해 +보안요구사항을 정의·문서화하고 정기적으로 검토·갱신해야 한다. +SSDF-02 +보안 역할 및 책임 관리 +SDLC 전 단계에서 보안 관련 역할과 책임이 명확히 정의되고 주기적으로 +검토되어야 하며, 해당 역할을 수행할 인력에게 적절한 교육이 제공되어야 +한다. +SSDF-03 +보안 개발 툴 체인 관리 +SDLC 각 단계에서 사용하는 개발 및 보안 툴체인을 정의·통합·운영하여, +자동화된 보안 검증과 감사 추적성을 확보해야 한다. +SSDF-04 +보안 점검 기준 +정의 및 데이터 관리 +소프트웨어 개발 생명주기 전 과정에서 보안 점검 기준을 정의하고, 해당 +기준에 따라 산출되는 보안 점검 결과를 안전하게 수집·보호해야 한다. +SSDF-05 +개발 환경 보호 +소프트웨어 개발, 빌드, 테스트, 배포 등 각 환경 및 모든 환경 구성요소는 +내부·외부 위협으로부터 보호될 수 있도록 강화되어야 한다. +SSDF-06 +코드 무단 접근 및 +변조 방지 +소스 코드, 실행 파일, 구성 스크립트 등 모든 형태의 코드는 무단 접근과 +변조로부터 보호되어야 하며, 권한이 부여된 인원, 도구 및 서비스만 +접근할 수 있도록 최소 권한 원칙이 적용되어야 한다. +SSDF-07 +소프트웨어 배포 +무결성 검증 제공 +소프트웨어를 배포하거나 제공할 때, 수신자가 배포 파일의 무결성을 +검증할 수 있도록 해시값, 전자서명 등 검증 정보를 함께 제공해야 한다. +SSDF-08 +소프트웨어 배포 +보관 및 보호 +소프트웨어 배포 파일과 관련 데이터는 안전하게 보관되어야 하며, 각 +배포에 포함된 구성요소의 출처와 변경 이력을 추적할 수 있도록 관리해야 +한다. +SSDF-09 +보안 설계 및 +위험 완화 체계 수립 +소프트웨어 설계 단계에서 보안요구사항을 반영하고, 위협 모델링 및 위험 +분석을 통해 잠재적 보안 위험을 식별·완화하는 설계 체계를 구축해야 +한다. +SSDF-10 +보안 설계 검토 수행 +소프트웨어 설계가 보안요구사항을 충족하고 식별된 보안 위험을 적절히 +완화하고 있는지를 독립적인 검토자 또는 자동화된 검증 절차를 통해 +점검해야 한다. + + +--- + +86 +SSDF-11 +검증된 라이브러리 재사용 +이미 검증된 보안성이 확보된 외부 또는 내부 소프트웨어 구성요소를 +재사용하여 중복 개발을 줄이고, 새로운 보안 취약점이 도입되는 위험을 +최소화해야 한다. +SSDF-12 +안전한 코딩 가이드 준수 +안전한 코딩 가이드를 준수하여 소스코드의 취약점을 최소화해야 한다. +SSDF-13 +컴파일러 및 +빌드 환경 보안 구성 +컴파일러, 인터프리터, 빌드 도구에 대한 보안 설정을 적용하여 실행 파일 +수준의 보안을 강화해야 한다. +SSDF-14 +코드 검토 및 분석 +코드 리뷰와 정적 분석 절차를 수립하고, 이를 통해 보안 취약점을 식별· +관리해야 한다. +SSDF-15 +실행 코드 테스트 +실행 가능한 코드에 대한 테스트 기준을 정의하고, 정의된 절차에 따라 +테스트를 수행하며 결과를 관리해야 한다. +SSDF-16 +안전한 초기 보안 설정 구성 +소프트웨어 설치 및 초기 구성 시 보안이 강화된 기본 설정을 정의하고, +이를 실제 환경에 적용해 운영 중에도 안전한 보안 상태가 유지되도록 +해야 한다. +SSDF-17 +취약점 식별 및 관리 +로봇 시스템 및 연계 소프트웨어 구성요소에 대한 취약점 정보를 +지속적으로 수집하고, 식별된 취약점의 영향을 검증·분석하며, 공개·대응 +절차를 통해 신속히 조치해야 한다. +SSDF-18 +우선순위 기반 조치 +로봇 시스템에서 식별된 취약점에 대해 위험도를 분석하고, 위험 수준에 +따라 적절한 조치를 계획·이행해야 한다. +SSDF-19 +취약점 근본 원인 분석 +로봇 시스템에서 발생한 취약점의 근본 원인을 분석하고, 동일 유형의 +취약점이 반복되지 않도록 예방 조치와 프로세스 개선을 수행해야 한다. +SSDF 점검 체크리스트 +공급망 보안 점검 체크리스트는 로봇 제품을 구성하는 부품, 펌웨어, 외부 라이브러리 등 전체 공급망 +의 신뢰성을 확보하기 위한 것으로, SBOM 관리, 공급업체 검증, 업데이트 소스 확인 등을 포함한다. +공급망 전 주기에서 발생하는 보안 위험을 방지하는 것을 목표로 한다. + +#### 4.1.2 공급망 보안 점검 체크리스트 + +번호 +체크리스트 항목 +내용 +SC-01 +오픈소스 소프트웨어 +구성요소 관리 +제품에 포함되는 오픈소스 소프트웨어와 외부 라이브러리 등 모든 +구성요소를 식별·관리해야 한다. +SC-02 +EoS 관리 +구성요소는 지원 종료 상태가 아니어야 하며, 도입 시점 기준으로 보안 +패치 및 기술 지원을 유지하기 위해 EoS를 관리해야 한다. +SC-03 +공급업체 보안 역량 평가 +기준 수립 및 적용 +조직은 공급요소의 공급업체를 선정할 때 보안 위험을 최소화하기 위해 +보안 역량 평가 기준을 수립하고 적용해야 한다. +SC-04 +공급망 변경 시 보안 영향 +평가 및 대처 방안 마련 +조직은 공급망이 변경되었을 경우 변경된 공급업체/요소로 인한 보안 +영향을 평가하고 대처할 수 있는 방안을 마련해야 한다. + + +--- + +87 +01 +02 +03 +04 +05 +SC-05 +구성요소 취약점 관리 +각 구성요소의 버전, 라이센스, 패치 상태와 함께 알려진 취약점 정보를 +식별하고 관리해야 한다. +SC-06 +로봇 펌웨어 및 +소프트웨어 업데이트의 +무결성 검증 +조직은 로봇 시스템의 펌웨어 및 소프트웨어 업데이트 과정에서 악성코드 +삽입, 무단 변조 등의 보안 위협을 방지하기 위해 무결성 검증 체계를 +구축해야 한다. +SC-07 +신속한 패치 메커니즘 +공급망 구성요소의 취약점 발견 시 신속한 패치 배포 및 적용 메커니즘을 +구축해야 한다. +공급망 보안 점검 체크리스트 +식별 및 인증 점검 체크리스트는 로봇 시스템 및 구성요소에 접근하는 모든 주체를 정확히 식별하고 인 +증하기 위한 것으로, 사용자 및 장치 인증 절차 강화, 권한 부여 확인 등을 포함한다. 무단 접근을 차단 +하는 것을 목표로 한다. + +#### 4.1.3 식별 및 인증 점검 체크리스트 + +번호 +보안 수준 +체크리스트 항목 +내용 +IA-01 +L1 +사용자 인증 +사용자가 접근 가능한 모든 인터페이스에 대해서 모든 사용자를 +인증하는 기능을 제공해야 한다. +L2 +유일한 사용자 식별 +및 인증 +사용자가 접근 가능한 모든 인터페이스에 대해서 모든 사용자를 +유일하게 식별하고 인증하는 기능을 제공해야 한다. +L4 +다중 사용자 인증 +모든 사용자에 대해 다중 인증 기능을 적용해야 한다. +IA-02 +L2 +장치 인증 +로봇 서비스 구성요소를 식별하고 인증하는 기능을 제공해야 한다. +L3 +유일한 장치 식별 +및 인증 +로봇은 다른 로봇 서비스 구성요소를 유일하게 식별하고 인증하는 +기능을 제공해야 한다. +IA-03 +L1 +사용자 패스워드 강도 +국제적으로 인정된 사용자 패스워드 지침에 따라 사용자 패스워드 +강도를 적용하는 기능을 제공해야 한다. +L3 +이전에 사용된 사용자 +패스워드 사용 제한 +설정에 따라 이전에 사용된 사용자 패스워드를 재사용하지 못하도록 +제한하는 기능을 제공해야 한다. +L4 +사용자 패스워드 +사용기한 제한 +사용자 패스워드의 유효한 사용기간을 제한하는 기능을 제공해야 +한다. +IA-04 +L2 +공개키 인증 +공개키 기반구조(PKI)를 사용하는 경우, PKI를 운영하거나 기존 PKI +에서 공개키 인증서를 얻을 수 있는 기능을 제공해야 한다. +L3 +공개키 인증을 위한 +하드웨어 보안 +하드웨어 보안 메커니즘을 통해 관련 개인키를 보호하는 기능을 +제공해야 한다. +IA-05 +L2 +대칭키 인증 +대칭키를 사용하는 경우, 안전한 키 저장 및 접근 제한, 상호 신뢰 +수립, 안전한 암호 알고리즘 사용 기능을 제공해야 한다. + + +--- + +88 +IA-05 +L3 +대칭키 인증을 +위한 하드웨어 +보안 +하드웨어 보안 메커니즘을 통해 관련 대칭키를 보호하는 기능을 +제공해야 한다. +IA-06 +L1 +인증 정보 노출 방지 +사용자 인증 프로세스 진행 동안에 인증자가 출력장치에 노출되지 +않도록 해야 하고, 인증실패 사유에 대한 피드백 정보가 제공되지 +않아야 한다. +IA-07 +L1 +반복된 로그인 +시도 제한 +모든 사용자(사람, 소프트웨어 프로세스 또는 장치) 인증이 연속적으로 +실패하는 경우 해당 사용자의 로그인 시도를 제한해야 한다. +IA-08 +L1 +시스템 사용 알림 +시스템에 중대한 영향을 줄 수 있는 기능에 대해, 해당 위험성을 +사용자에게 고지해야 한다. +IA-09 +L1 +사용자 계정 관리 +모든 사용자 계정 추가, 수정, 삭제, 활성화 또는 비활성화를 포함하여 +사용자의 모든 계정 관리를 지원하는 기능을 제공해야 한다. +IA-10 +L1 +사용자 식별자 관리 +사용자, 그룹 또는 역할별로 사용자 식별자 관리를 지원하는 기능을 +제공해야 한다. +IA-11 +L1 +사용자 인증자 관리 +사용자 인증자 관리 기능은 인증자 초기화, 디폴트 값 변경, 주기적 +갱신 및 유효성 검사, 저장·사용·전송 중 보호 기능을 제공해야 한다. +L3 +하드웨어 보안을 +통한 인증자 보호 +하드웨어 보안 메커니즘을 통해 관련 인증자를 보호하는 기능을 +제공해야 한다. +식별 및 인증 점검 체크리스트 +접근 통제 점검 체크리스트는 정당한 권한을 가진 사용자만 로봇 기능과 데이터를 사용할 수 있도록 통 +제하기 위한 것으로, 최소 권한 원칙, 역할 기반 접근 통제(RBAC) 등을 포함한다. 비인가된 조작을 방 +지하는 것을 목표로 한다. + +#### 4.1.4 사용 통제 점검 체크리스트 + +번호 +보안 수준 +체크리스트 항목 +내용 +UC-01 +L1 +인간 사용자에 +대한 권한 부여 +업무 분리 및 최소 권한을 지원하고 모든 인터페이스 사용을 통제하기 +위해 인간 사용자에게 할당된 권한을 부여하는 기능을 제공해야 한다. +L2 +모든 사용자에 +대한 권한 부여 +업무 분리 및 최소 권한을 지원하고 모든 인터페이스 사용을 통제하기 +위해 모든 사용자에게 할당된 권한을 부여하는 기능을 제공해야 한다. +L2 +사용자 역할 기반 +권한 부여 +사용자의 역할에 대한 권한 매핑을 정의하고 수정할 수 있는 기능을 +제공해야 한다. +UC-02 +L1 +모바일 코드 사용 +통제 +모바일 코드 기술을 사용하는 경우, 모바일 코드 기술 사용에 관한 +보안정책을 강제하는 기능을 제공해야 한다. +L2 +모바일 코드 +무결성 검사 +모바일 코드 실행을 허용하기 전에 모바일 코드의 무결성을 확인하는 +기능을 제공해야 한다. + + +--- + +89 +01 +02 +03 +04 +05 +UC-03 +L1 +세션 잠금 +로컬 또는 네트워크를 통해 사용자 인터페이스를 제공하는 경우, 세션 +잠금 기능을 사용해야 한다. +UC-04 +L2 +원격 세션 종료 +원격 세션을 지원하는 경우, 설정된 시간 동안 아무런 활동이 없는 +경우 자동으로, 로컬 담당자에 의해 수동으로 또는 세션을 시작한 +사용자에 의해 수동으로 원격 세션을 종료하는 기능을 제공해야 한다. +UC-05 +L3 +동시 세션 제어 +특정한 사용자에 대한 인터페이스별로 동시 세션 수를 제한하는 +기능을 제공해야 한다. +UC-06 +L1 +감사 로그 생성 +보안과 관련된 감사 로그, 개별 감사 로그를 생성하는 기능을 제공해야 +한다. +UC-07 +L1 +감사 로그 저장 용량 +감사 로그 관리를 위해 충분한 감사 로그 저장 용량을 할당해야 하며 +감사 저장 용량에 근접하거나 이를 초과할 경우, 컴포넌트 실패에 +대비하는 기능을 제공해야 한다. +L3 +감사 저장 용량 +임계치 도달 시 경고 +감사 로그 저장소가 최대 임계치에 도달할 경우 경고를 발행하는 +기능을 제공해야 한다. +UC-08 +L1 +감사 처리 실패 대응 +감사 처리 실패 시 필수 서비스 및 기능의 손실을 방지하는 기능 및 +일반적으로 인정되는 업계 관행 및 권장 사항에 따라 감사 처리 실패에 +대응하여 적절한 조치를 지원하는 기능을 제공해야 한다. +UC-09 +L1 +타임 스탬프 +감사 로그 생성에 사용되는 타임스탬프를 제공해야 한다. +L2 +시간 동기화 +내부 시스템 시간을 동기화하는 기능을 제공해야 한다. +L4 +시간 소스 무결성 +보호 +시간 원본 소스는 무단 변경으로부터 보호되어야 하며 변경 시 감사 +이벤트를 생성해야 한다. +UC-10 +L1 +인간 사용자에 대한 +부인 방지 +인간 사용자 인터페이스를 제공하는 경우, 특정 인간 사용자가 특정 +행동을 했는지 여부를 판단하는 기능을 제공해야 한다. +L4 +모든 사용자에 대한 +부인 방지 +특정 사용자가 특정 조치를 취했는지 여부를 판단하는 기능을 제공해야 +한다. +UC-11 +L2 +물리적 진단 및 시험 +인터페이스의 보호 +물리적 진단 및 시험 인터페이스의 인가되지 않은 사용에 대해서 +보호해야 한다. +L3 +물리적 진단 및 +시험 인터페이스의 +능동적 모니터링 +물리적 진단 및 시험 인터페이스에 대한 능동적 모니터링을 제공하고, +이러한 인터페이스에 대한 접근 시도가 탐지될 경우 감사 로그를 +생성해야 한다. +사용 통제 점검 체크리스트 + + +--- + +90 +시스템 무결성 점검 체크리스트는 로봇 시스템의 구성요소와 데이터가 변조되거나 악의적으로 변경되 +지 않도록 보호하기 위한 것으로, 코드 및 펌웨어 무결성 검증, 설정 보호, 승인되지 않은 명령 차단 등 +을 포함한다. 시스템의 무결성을 유지하는 것을 목표로 한다. + +#### 4.1.5 시스템 무결성 점검 체크리스트 + +번호 +보안 수준 +체크리스트 항목 +내용 +SI-01 +L1 +통신 신뢰성 보장 +전송된 정보의 무결성 및 진본성을 보호하는 기능을 제공해야 한다. +SI-02 +L1 +악성코드 보호 +메커니즘 +악성코드나 승인되지 않은 소프트웨어의 영향을 예방, 감지, 보고 및 +완화하기 위한 보호 메커니즘을 제공해야 한다. 또한, 보호 메커니즘을 +업데이트하는 기능을 제공해야 한다. +L2 +악성코드 보호 버전 +보고 +사용 중인 악성코드 보호 소프트웨어 및 파일 버전을 자동으로 +보고해야 한다. +SI-03 +L1 +보안 기능 검증 +보안 기능의 의도된 작동에 대한 검증을 지원하고 무결성이 침해되는 +등의 이상이 발견되면 동작을 중단하거나 안전 모드로 전환하고, 로그 +기록과 함께 관리자 또는 클라우드에 침해 사실을 자동으로 보고해야 +한다. +SI-04 +L1 +소프트웨어 및 +데이터, 장비의 +무결성 +로봇 내부에 저장되는 소프트웨어, 데이터, 장비의 무결성 등은 +무결성을 보장할 수 있는 보호 저장소에 저장되고 해시함수 디지털 +서명 등을 적용해야 한다. 또한 부팅, 정해진 주기별로 상태를 점검해 +무단 변경을 탐지, 기록 및 보고하는 기능을 제공해야 한다. +L2 +무결성 위반 자동 +알림 +운영 중 또는 무결성 점검 과정에서 로봇 시스템의 주요 소프트웨어, +데이터, 장비에 대해 인가되지 않은 변경 시도 탐지 시 관리자 알림, +자동 차단 등의 대응조치를 제공해야 한다. +L3 +소프트웨어 및 +정보의 진본성 점검 +소프트웨어, 구성 및 기타 정보의 진본성 점검을 수행하고, 이런 점검 +결과를 기록하고 보고하는 기능을 제공해야 한다. +SI-05 +L1 +입력값 검증 +제어 입력으로 사용되거나 로봇 서비스의 동작에 직접적인 영향을 +미치는 입력 값의 유효성을 검증해야 한다. +SI-06 +L1 +결정론적 출력 +공격 등으로 인해 정상적인 작동을 유지할 수 없는 경우, 미리 결정된 +상태로 출력을 설정하는 기능을 제공해야 한다. +SI-07 +L1 +오류 처리 +공격자에 의해 악용될 수 있는 정보를 제공하지 않는 방식으로 오류 +조건을 식별하고 처리해야 한다. +SI-08 +L2 +세션의 무결성 보호 +고유한 세션 ID의 안전한 생성 및 검증, 유효하지 않은 세션 ID 거부, +세션 종료 시 세션 ID 무효화 기능과 같은 통신 세션 무결성 보호 +기능을 제공해야 한다. +SI-09 +L2 +감사 관련 정보 +보호 +인가되지 않은 접근, 변경 및 삭제로부터 감사 정보, 감사 로그 및 감사 +도구를 보호해야 한다. +L4 +일회용 기록 매체에 +감사 레코드 기록 +하드웨어 기반 일회용 기록 매체에 감사 레코드를 저장하는 기능을 +제공해야 한다. + + +--- + +91 +01 +02 +03 +04 +05 +SI-10 +L1 +업데이트 지원 검증 +업데이트 및 업그레이드 기능을 지원해야 한다. +L2 +업데이트 파일 +진본성 및 무결성 +검증 +설치 전에 소프트웨어 업데이트 파일의 진본성과 무결성을 검증해야 +한다. +SI-11 +L2 +물리적 변조 방지 및 +탐지 +장치에 인가되지 않은 물리적 접근을 방지하기 위해 변조 방지 및 탐지 +메커니즘을 제공해야 한다. +L3 +변조 시도 통보 +인가되지 않은 물리적 접근 시도 탐지 시 자동으로 통지하는 기능을 +제공해야 한다. +시스템 무결성 점검 체크리스트 +데이터 보호 점검 체크리스트는 로봇이 송수신하는 데이터의 기밀성과 무결성을 보장하기 위한 것으로, +암호화, 키 관리, 민감 데이터 보호 등을 포함한다. 데이터의 도청 및 조작을 방지하는 것을 목표로 한다. +데이터 흐름 제한 점검 체크리스트는 로봇 시스템 내·외부 간 데이터 흐름을 통제하기 위한 것으로, 네 +트워크 분리, 필터링, 최소 데이터 전달 원칙 등을 포함한다. 불필요하거나 위험한 정보의 외부 유출을 +방지하는 것을 목표로 한다. + +#### 4.1.6 데이터 보호 점검 체크리스트 + + +#### 4.1.7 데이터 흐름 제한 점검 체크리스트 + +번호 +보안 수준 +체크리스트 항목 +내용 +DP-01 +L1 +정보의 기밀성 +인가되지 않은 공개를 방지하기 위해 저장소에 저장된 정보와 통신 +채널을 통해 전송되는 정보의 기밀성을 보호하는 기능을 제공해야 +한다. +DP-02 +L2 +데이터 삭제 관리 +활성 서비스가 해제되거나 폐기되는 경우, 명확한 읽기 권한이 +지원되는 모든 정보 비휘발성 저장소에 저장된 정보를 삭제하는 +기능을 제공해야 한다. +DP-03 +L1 +안전한 암호 +메커니즘 사용 +암호화가 필요한 경우 국제적으로 인정된 안전한 암호 메커니즘을 +사용해야 한다. +DP-04 +L1 +개인정보 보호 +개인정보 수집 및 처리 시 개인정보 관련 법적 요구사항을 준수해야 +한다. +번호 +보안 수준 +체크리스트 항목 +내용 +DFR-01 +L1 +네트워크 기능 +지원 +구역과 통신경로의 분할을 위해 운영자가 네트워크 설정을 직접 관리· +설정할 수 있는 기능을 제공해야 한다. +데이터 보호 점검 체크리스트 + + +--- + +92 +데이터 흐름 제한 점검 체크리스트 +DFR-02 +L2 +프로토콜 필터링 +승인된 프로토콜만 허용하고 승인되지 않은 프로토콜의 사용을 +제한하는 기능을 제공해야 한다. +이벤트 대응 점검 체크리스트는 보안 침해 또는 이상 행위 발생 시 이를 식별하고 대응하기 위한 것으 +로, 로그 관리, 경보, 진단, 사고 대응 절차 등을 포함한다. 보안 사고의 탐지 및 포렌식에 필요한 기록 +확보를 목표로 한다. +자원 가용성 점검 체크리스트는 서비스 거부나 시스템 과부하로 인해 로봇 기능이 중단되지 않도록 자 +원을 안정적으로 유지하기 위한 것으로, 성능 보호, 예비 자원 확보, 장애 대비 등을 포함한다. 로봇 시 +스템의 지속적인 가용성 보장을 목표로 한다. + +#### 4.1.8 이벤트 대응 점검 체크리스트 + + +#### 4.1.9 자원 가용성 점검 체크리스트 + +번호 +보안 수준 +체크리스트 항목 +내용 +ER-01 +L1 +감사 로그 접근성 +인가된 사람 및/또는 도구가 읽기-전용으로 감사 로그에 접근할 수 +있는 기능을 제공해야 한다. +L3 +감사 로그에 대한 +프로그래밍 방식 +접근 +API를 사용하여 감사 로그에 대한 프로그래밍 방식의 접근을 제공해야 +한다. +ER-02 +L2 +지속적인 모니터링 +적시에 보안 위반을 탐지하여 보고하기 위해 지속적으로 모니터링할 +수 있는 기능을 제공해야 한다. +ER-03 +L2 +보안 이벤트 알림 +중요 보안 이벤트 발생 시 이메일, SMS, 모바일 앱 푸시 알림, 음성 +경고 등 다양한 채널 또는 화면을 통해 관리자에게 알림을 전송할 수 +있는 기능을 제공해야 한다. +번호 +보안 수준 +체크리스트 항목 +내용 +RA-01 +L1 +서비스 거부 공격 +방지 +외부에서 다수의 연결 시도, 과도한 명령 요청, 대용량 데이터 송신 +등의 공격에 의해 로봇 시스템이 마비되지 않도록 연결 제한, 큐 설정, +프로세스 자원 제한 등을 적용해야 한다. +L2 +통신 부하 방지 +DoS 이벤트로 인한 정보 및/또는 메시지 범람 유형의 영향을 완화하는 +기능 제공해야 한다. +RA-02 +L1 +자원 관리 +자원 고갈을 방지하기 위해 보안 기능의 자원 사용을 제한하는 기능을 +제공해야 한다. +RA-03 +L1 +자원 상태 진단 +CPU, 메모리, 저장소, 통신 채널 등의 사용량 및 상태를 확인할 수 +있어야 한다. +이벤트 대응 점검 체크리스트 + + +--- + +93 +01 +02 +03 +04 +05 +사이버 복원력 점검 체크리스트는 침해 발생 시에도 로봇의 핵심 기능을 유지하고 빠르게 복구할 수 있 +도록 보장하기 위한 것으로, 보안 업데이트, 백업 및 복원, 취약점 관리, 운영 지속성 확보 등을 포함한 +다. 로봇 시스템의 사이버 복원력 강화를 목표로 한다. + +#### 4.1.10 사이버 복원력 점검 체크리스트 + +보안 수준 +체크리스트 항목 +내용 +CR-01 +중요 설정 데이터 정기적 +백업 및 관리 +로봇 시스템의 중요한 설정과 데이터는 주기적으로 백업하고 관리해야 +한다. +CR-02 +백업 데이터 무결성 및 복구 +검증 절차 +로봇 운영의 복구 절차가 문서화되어 있어야 하며, 해당 절차의 +실효성을 확보하기 위해 점검 및 검증을 이행해야 한다. +CR-03 +사이버 침해사고 대비 복구 +절차 문서화 및 테스트 +사이버 침해사고 발생 시를 대비하여 로봇 운영 복구 절차를 문서화하고, +정기적으로 모의 테스트를 실시해야 한다. +CR-04 +복구 목표 시간(RTO) 및 복구 +목표 시점(RPO) 정의 +로봇 시스템 장애 발생 시 복구 목표 시간(RTO)과 복구 목표 시점 +(RPO)을 명확히 정의하여, 신속한 복구가 가능하도록 관리해야 한다. +CR-05 +보안 업데이트 및 패치의 +적시 제공과 적용 +로봇 소프트웨어와 펌웨어에 대한 보안 업데이트 및 패치는 신속하게 +적용될 수 있게끔 제공되어야 한다. +RA-04 +L1 +목록화 기능 지원 +설치된 구성요소들의 현재 목록과 각 컴포넌트의 속성 정보를 보고할 +수 있는 기능을 제공해야 한다. +RA-05 +L1 +시스템 백업 +장치 상태를 보호하기 위해 백업 기능을 지원해야 하며, 백업 +프로세스는 정상적인 로봇 서비스 운영에 영향을 미치지 않아야 한다. +RA-06 +L1 +컴포넌트 복구 및 +재구성 +중단 또는 장애 발생 후 알려진 보안 상태로 복구 및 재구성할 수 있는 +기능을 제공해야 한다. +L2 +복구 전 무결성 +확인 +복구를 시작하기 전에 백업 파일의 무결성을 검증하는 기능을 제공해야 +한다. +RA-07 +L1 +네트워크 및 보안 +구성 설정 +공급자가 제공한 지침에 서술된 권고 네트워크와 보안 구성에 따른 +설정 기능을 제공해야 하며, 현재 적용된 네트워크와 보안 구성 설정에 +대한 인터페이스를 제공해야 한다. +L3 +현재 보안 설정에 +대한 보고서 생성 +현재 배포된 보안 설정을 컴퓨터 판독 가능 형식으로 나열하는 +보고서를 생성하는 기능을 제공해야 한다. +RA-08 +L1 +불필요한 기능, +포트 및 서비스 +제한 +불필요한 기능, 포트, 프로토콜, 서비스의 사용을 비활성화하거나 +제한하는 기능을 제공해야 한다. +자원 가용성 점검 체크리스트 + + +--- + +94 +CR-06 +업데이트 적용 실패 시 롤백 +또는 복구 기능 확보 +로봇 시스템의 보안 업데이트 적용에 실패할 경우, 이전 안정화 +버전으로의 롤백이나 복구가 가능해야 한다. +CR-07 +보안 업데이트 지원 정책 및 +수명주기 명시 +로봇 지원 수명 기간 동안 보안 업데이트 제공 정책을 명확히 수립하고 +운영해야 한다. +CR-08 +보안 취약점 보고·처리 공식 +절차 마련 +외부로부터 보안 취약점 보고를 접수하고 신속하게 처리할 수 있는 +공식 절차가 존재해야 한다. +CR-09 +충분한 로그 확보 및 보안 +이벤트 분석 지원 +로봇 시스템에서 보안 이벤트 발생 시, 원인 분석과 복구를 지원할 수 +있도록 충분한 로그를 확보하고 관리하는 기능을 제공해야 한다. +CR-10 +보안 사고/취약점 기반 보안 +대책 개선 절차 +사고와 취약점 정보를 바탕으로, 보안 대책을 주기적으로 검토하고 +지속적으로 개선해야 한다. +CR-11 +서비스 연속성 및 필수 기능 +유지 +로봇 시스템은 부분적 시스템 장애나 DoS 공격 상황에서도 로봇의 +필수 안전 및 운영 기능이 유지될 수 있도록 설계해야 한다. +CR-12 +비정상 상태에서의 안전 정지 +및 모드 전환 구현 +통신 두절, 센서 오류 등 비정상 상태에서는 로봇 시스템이 자동으로 +안전 정지하거나 안전 모드로 전환될 수 있어야 한다. +CR-13 +사용자 정보 등의 인증 데이터 +보호 +로봇 시스템의 인증, 신원, 액세스 시스템에 사용되는 개인정보 +데이터는 제품과 관련 있을 경우만 저장, 전송, 기타 처리되어야 하며 +무단 액세스 및 기밀성 침해로부터 보호하여야 한다. +사이버 복원력 점검 체크리스트 +무선 보안 점검 체크리스트는 로봇이 사용하는 무선 통신 채널을 보호하고 무선 장비에 대한 최소 보안 +요건을 충족하기 위한 것으로, 무선 인증, 암호화, 무선 프로토콜 보호 등을 포함한다. 무선 통신의 도 +청 및 위조를 방지하는 것을 목표로 한다. + +#### 4.1.11 무선 보안 점검 체크리스트 + +보안 수준 +체크리스트 항목 +내용 +WS-01 +무선 사용자 식별 및 인증 +로봇 시스템의 무선 인터페이스에 접근하는 사용자와 단말수준, 모든 +사용자 수준에 대해 적절한 인증 메커니즘을 사용하여 인증 및 접근 +관리를 수행해야 한다. +WS-02 +인증자 유효성 검증 +인증 메커니즘은 운영 환경에서 이용 가능한 정보를 바탕으로 사용되는 +모든 인증 수단의 관련 속성을 반드시 검증해야 한다. +WS-03 +인증자 변경 +인증 메커니즘은 보안 목표에 위배되지 않는 한 사용자가 사용하는 인증 +수단(비밀번호, 토큰 등)을 변경할 수 있도록 허용해야 한다. +WS-04 +비밀번호 강도 +설정되는 모든 비밀번호는 충분히 안전하고, 고유해야 하며, 기본 +비밀번호는 사용자가 변경하도록 강제하거나 안전하게 관리되어야 +한다. 모든 비밀번호는 NIST SP 800-63B 등 국제 표준의 강도 +요구사항을 준수하여 설정되어야 한다. +WS-05 +무차별 대입 보호 +인증 메커니즘은 무차별 대입 공격에 견딜 수 있도록 설계되어야 한다. +즉, 공격자가 반복적으로 인증을 시도하여 패스워드를 알아내거나 +서비스 거부(DoS) 상태를 유발하지 못하도록 적절한 방어 조치를 +적용해야 한다. + + +--- + +95 +01 +02 +03 +04 +05 +WS-06 +자산 접근 제어 +무선 통신에 참여하는 모든 사용자의 기본 정보 또는 자산에 대한 접근이 +무분별하게 이루어지지 않도록, 인가된 사용자만 접근할 수 있도록 +통제해야 한다. +WS-07 +안전한 데이터 보호 +네트워크 내 민감 정보와 개인정보, 그리고 위·변조 위험이 있는 데이터를 +안전하게 저장·관리하기 위한 보안 저장 메커니즘을 제공해야 한다. +WS-08 +저장 데이터 무결성 검증 +장비는 저장된 보안 자산과 개인 정보 자산의 무결성을 보호하여 데이터 +변조를 방지하고 탐지할 수 있는 기능을 제공해야 한다. +WS-09 +무선 통신 데이터 보호 +무선 네트워크를 통해 송수신되는 데이터가 외부에 노출되어 유출되거나 +도청되지 않도록, 암호화 등 보안 조치를 적용하여 데이터의 기밀성을 +보호해야 한다. +WS-10 +무선 통신 데이터 무결성 검증 +무선 네트워크를 통해 송수신되는 데이터가 전송 중 변조되지 않았음을 +확인할 수 있도록, 해시 값 검증이나 전자서명 등 무결성 검증 메커니즘을 +적용해야 한다. +WS-11 +무선 통신 재전송 공격 방지 +구현 +무선 네트워크로 전송되는 데이터가 이전에 전송된 내용이 재전송 공격에 +악용되지 않도록 보호해야 한다. +WS-12 +업데이트 메커니즘 제공 +보안 및 프라이버시 자산에 영향을 미치는 소프트웨어에 대해 업데이트 +기능을 반드시 제공해야 한다. 특히 인터넷에 연결된 경우에는 자동 또는 +승인 기반 등 다양한 방식으로 업데이트가 이루어질 수 있어야 한다. +WS-13 +무선 네트워크 업데이트 +무결성 및 진본성 검증 +무선 네트워크를 통한 원격 업데이트 시, 자동 또는 수동으로 업데이트되는 +소프트웨어 및 펌웨어의 무결성을 반드시 검증해야 한다. +WS-14 +암호화 적정성 +보안 자산 또는 네트워크 자산을 보호하기 위해 사용하는 암호화 기술이 +최신 보안 모범사례를 따라야 한다. 또한 각 암호화 사용 목적과 예상 +수명을 명확히 문서화하여 체계적인 암호화 정책 관리가 이루어져야 한다. +WS-15 +적절한 암호화 키 사용 +사용하는 모든 기밀 암호키는 최소 112비트 이상의 보안 강도를 가져야 +하며, 암호키 생성 시에는 최신 보안 모범사례를 따라야 한다. +WS-16 +암호화 키 고유성 +사전 설치되는 기밀 암호키는 실질적으로 장비별로 고유하게 관리되어야 +한다. 단, 초기 신뢰 수립이나 특정 기능 수행을 위해 공유 키가 필요한 +경우에는 해당 목적과 보안 조치를 명확히 문서화해야 한다. +WS-17 +로그 생성 +주요 자산과 관련된 내부 보안 활동 및 이벤트에 대해 로그를 반드시 +기록해야 한다. +WS-18 +시간 정보 포함 +장비의 영구 저장소에 저장되는 모든 로그 데이터에는 타임스탬프 등 시간 +관련 정보가 반드시 포함되어야 한다. +WS-19 +최신 소프트웨어 및 하드웨어 +유지 +제품 또는 시스템은 공개적으로 알려진 악용 가능한 취약점이 존재하지 +않도록 소프트웨어와 하드웨어를 최신 상태로 유지해야 하며, 업데이트 +및 패치가 정기적으로 적용되어야 한다. 알려진 취약점이 있는 구성요소는 +즉시 대응이 이루어져야 하며, 위험 수준에 따라 패치 우선순위가 +설정되어야 한다. +WS-20 +네트워크 인터페이스 노출 +최소화 +제품 또는 시스템은 네트워크 인터페이스를 통해 노출되는 서비스를 +최소화해야 한다. 사용 중인 옵션 서비스와 관련된 인터페이스 구성은 +명확히 설정되어야 하며, 노출된 목록은 문서화되어 관리한다. +WS-21 +외부 물리 인터페이스 제한 +제품 또는 시스템은 불필요한 외부 물리 인터페이스가 존재하는 경우 +제거해야 한다. +WS-22 +외부 입력 관리 +시스템은 외부 입력에 대해 적절한 유효성 검사를 수행해야 하며, +입력으로부터 시스템을 보호할 수 있도록 설계되어야 한다. 외부 감지 +센서나 감지 기능이 포함된 경우, 작동 원리와 범위, 연동 방식 등을 명확히 +문서화하여 충분한 정보를 제공해야 한다. +WS-23 +장비 무결성 보장 +물리적 손상, 비인가 변경, 구성요소 교체 등으로부터 장비의 무결성을 +유지할 수 있도록 설계되어야 한다. + + +--- + +96 +본 절은 3장에서 식별된 로봇 속성(하드웨어·네트워크·시스템 소프트웨어·응용 소프트웨어)별 보안 +위협에 대응하기 위한 보안 요구사항 및 보안 솔루션을 정의한다. + +각 속성별 보안 요구사항은 4.1절의 보안 취약점 점검 체크리스트 항목과 매핑 되어 있다. 11개 +카테고리 중 SSDF 점검 체크리스트 항목은 특정 위협의 단일 대응책이 아니라 설계부터 운영까지 +전체 개발 생명주기에 적용되는 개발보안 프로세스 기반 통제이므로, 속성별 보안 요구사항과 직접 +매핑 되지 않고 상위 개발 프로세스 전반에 걸쳐 적용되는 보안 활동으로 이해해야 한다. + +### 4.2 보안 요구사항 + +솔루션 +기능 +수행 방안 +출입 통제 시스템 +중요 구역 출입 제한 +사용자 인증, 출입 로그 기록, 유지보수 인력 권한 분리 +시건 장치 +제어기·캐비닛 물리 보호 +잠금 장치 적용, 비인가 조작 방지 +탬퍼 방지 장치 +개폐·훼손·파손 감지 +장치 설치, 안전정지 연계, 정기 점검 +IoT 보안 게이트웨이 +로봇-클라우드 통신 보호 +단말 인증, 암호화, 악성 트래픽 차단 +암호화 모듈 +데이터 보호 +암호화 연산, 키 관리, 보안 채널 구축 +산업용 보안 스위치 +제어망 안정성 및 보안 +산업 프로토콜 지원, 이중화, 포트 보안 +서버 접근 통제 솔루션 +서버 접근 권한 관리 +계정 관리, 명령어 로그, 비인가 접속 차단 +매체 제어 솔루션 +이동매체 유입 차단 +USB 허용정책, 데이터 유출 방지 +보안 USB +안전한 데이터 이동 +HW 암호화, 무결성 검증, 권한 인증 +포트락 +물리 포트 차단 +USB/포트 잠금, 장비 무단 연결 방지 +산업용 방화벽 +OT 네트워크 보호 +산업 프로토콜 필터링, 트래픽 차단, 망분리 +프로토콜 검증 모듈 +로봇 제어 프로토콜 검증 +메시지 구조 검증, 위변조 탐지 +백업 관리 시스템 +설정/제어 데이터 보호 +안전 저장, 무결성 보장, 백업/복구 +네트워크 접근 통제 +단말 인증 및 접속 통제 +비인가 장비 차단, 단말 보안 등급 관리 +산업용 IDS +네트워크 이상 탐지 +산업 프로토콜 기반 탐지, 제어명령 모니터링 +산업용 IPS +위협 차단 +공격 패턴 차단, 비인가 제어명령 방어 +보안 AP +로봇·AMR 무선 보호 +강력 암호화, 비인가 단말 차단 +보안칩 +키 보안 저장 +인증서·암호키 보관, 고강도 암호 연산 +TPM 내장 보드 +부팅·펌웨어 무결성 보호 +신뢰부팅, 펌웨어 변조 탐지 +패치 관리 솔루션 +취약점 대응 +패치 현황 관리, 자동 배포 +소스코드 진단도구 +개발 보안 강화 +정적 분석, 취약 코드 탐지 +보안인증 컨설팅 +표준 기반 보안 검증 +IEC 62443 등 인증 지원 +DB 접근제어 시스템 +운영 DB 보호 +SQL 접근 통제, 쿼리 로그 +데이터 완전삭제 솔루션 +데이터 폐기 보호 +복구 불가 삭제, 민감정보 보호 +산업용 EDR +제어기/운영 PC 위협 탐지 +행위 기반 탐지, 위협 차단 +백신 +악성코드 방어 +악성코드 탐지/치료, 실시간 감시 +역공학 보호 +제어 로직·SW 보호 +난독화, 디버깅 방지, 펌웨어 보호 +로봇 보안솔루션 구성 + + +--- + +97 +01 +02 +03 +04 +05 +보안 요구사항 +완화 대책 +체크리스트 번호 +(보안 취약점 점검) +보안 솔루션 +장비 무결성 검증 +장비의 물리적 변조·개봉을 변조 감지 +기능으로 보호 +[SI-11] 물리적 변조 방지 및 탐지 +[WS-23] 장비 무결성 보장 +시건 장치, +출입 통제 +시스템, 탬퍼 +(Tampering) +방지 장치 +안전 상태 전환 +(Fail-Safe) +장비의 하드웨어 훼손 시 발생할 수 +있는 비정상 동작을 사전 정의된 안전 +정지 모드로 전환하여 보호 +[CR-12] 비정상 상태에서의 안전 +정지/모드 전환 구현 +- +기능 지속성 확보 +일부 구성요소 손상으로 인한 +기능 중단을 대비하여 복구 절차 수립 +[CR-11] 서비스 연속성 및 필수기능 +유지 +- +장비 간 인증 +비인가 신호 전송을 장비 간 인증으로 +보호 +[IA-01] 사용자 식별 및 인증 +[IA-02] 장치 식별 및 인증 +- +키 관리 강화 +신호 위조 시도를 대칭키·공개키 수명주기 +관리로 보호 +[IA-04] 공개키 관리 +[IA-05] 대칭키 관리 +암호화 모듈 +접근 통제 및 +인증 강화 +비인가자의 터미널 접근을 인증·세션 +통제로 보호 +[IA-01] 사용자 식별 및 인증 +[UC-06] 감사 로그 생성 +- +매체 제어 +악성 파일 주입·데이터 유출을 외부매체 +화이트리스트 및 스캔 정책으로 보호 +[SI-02] 악성코드로부터 보호 +[SI-11] 물리적 변조 방지 및 탐지 +[UC-06] 감사 로그 생성 +매체제어 +솔루션, +보안 USB +물리포트 보호 +비인가 매체 연결을 포트락 및 물리적 +차단 장치로 보호 +[UC-11] 물리적 진단 및 시험 +인터페이스의 통제 +[WS-21] 외부 물리 인터페이스 제한 +포트락, 시건 +장치 +바이너리 +심볼 제거 +역공학 기반 정보 탈취를 바이너리 +심볼 제거로 보호 +[DP-01] 정보의 기밀성 +- +부채널 공격 +저항 패턴 적용 +전력·시간·전자기 패턴으로 내부 +연산 값이 유출되지 않도록, 암호 +연산 및 민감 연산에 난수화, 일정 +시간 알고리즘을 적용 +[UC-11] 물리적 진단 및 시험 +인터페이스의 통제 +보안칩 +전력·전자기 차폐 +장비 외부에서 유출되는 전력·전 자기 +신호를 최소화하도록 차폐 설계 적용 +[UC-11] 물리적 진단 및 시험 +인터페이스의 통제 +- +디스크 암호화 +물리적 저장 장치 탈취로 인한 데이터 +노출을 디스크 암호화로 보호 +[DP-01] 정보의 기밀성 +TPM 내장 +보드, 보안칩 +하드웨어 보안 요구사항 및 보안 솔루션 +로봇의 물리적 구성요소를 보호하기 위한 보안 요구사항으로, 3장에서 식별된 위협에 대응한다. 세부 +보안 요구사항은 다음과 같다. + +#### 4.2.1 + +하드웨어 보안 요구사항 + + +--- + +98 +보안 요구사항 +완화 대책 +체크리스트 번호 +(보안 취약점 점검) +보안 솔루션 +통신 신뢰성 확보 +변조된 데이터 및 통신을 서명 기반 +무결성 검증으로 보호 +[SI-01] 통신 신뢰성 보장 +IoT 보안 +게이트웨이 +패킷 검증 +비정상 명령 프레임 및 데이터 패킷을 +입력값 유효성 검증으로 보호 +[SI-05] 입력값 검증 +[SI-07] 오류 처리 +[WS-22] 외부 입력 관리 +산업용 IPS, +산업용 방화벽, +산업용 IDS, +IoT 보안 +게이트웨이 +서비스 자원 보호 +자원 고갈 및 세션 남용을 요청 제한· +세션 분리로 보호 +[RA-01] 서비스 거부 방지 +산업용 IPS, +산업용 보안 +스위치 +불필요 기능 및 +포트 제한 +비인가 접근 및 오남용을 포트·기능 +차단 및 화이트리스트 정책으로 보호 +[RA-08] 불필요한 기능, 포트 및 +서비스 제한 +[WS-21] 외부 물리 인터페이스 +제한 +산업용 IDS, +산업용 IPS +통신 암호화 +네트워크 구간의 데이터 도청을 +전송구간 암호화(TLS/SSH 등)로 +보호 +[DP-01] 정보의 기밀성 +[DP-03] 안전한 암호 메커니즘 사용 +[WS-14] 암호화 적정성 +[WS-09] 무선 통신 데이터 보호 +보안칩, +보안 AP +세션 무결성 검증 +메시지 재전송 공격을 시퀀스·Nonce +기반 검증으로 보호 +[SI-08] 세션의 무결성 보호 +[WS-11] 무선 통신 재전송 공격 +방지 구현 +- +인증 기반 라우팅 +비인가자의 라우팅 변경을 사용자· +장치 인증 기반 제어로 보호 +[IA-01] 사용자 식별 및 인증 +[IA-02] 장치 식별 및 인증 +[DFR-01] 네트워크 기능 지원 +[DFR-02] 프로토콜 필터링 +산업용 방화벽 +라우팅 내역 관리 +라우팅 조작 및 오남용을 변경 로그 +기록 및 추적 관리로 보호 +[UC-06] 감사 로그 생성 +[WS-17] 로그 생성 +[WS-18] 시간 정보 포함 +- +장치 인증 +비인가 장치의 제어명령 송신을 장치 +인증으로 보호 +[IA-02] 장치 식별 및 인증 +IoT 보안 +게이트웨이 +키 관리 강화 +키·인증서 탈취를 안전한 저장소( +보안칩/TPM)와 주기적 키 교체로 +보호 +[IA-04] 공개키 관리 +[WS-14] 암호화 적정성 +[WS-16] 암호화 키 고유성 +보안칩, +TPM 내장 보드 +인증자 보호 +인증정보 노출을 민감정보 접근제한 +및 즉시 폐기로 보호 +[IA-06] 인증 정보 노출 방지 +[IA-11] 사용자 인증자 관리 +서버 접근 통제 +솔루션, IoT보안 +게이트웨이 +네트워크 보안 요구사항 및 보안 솔루션 +로봇 네트워크 통신을 보호하기 위한 보안 요구사항으로, 3장에서 식별된 네트워크 위협에 대응한다. +세부 보안 요구사항은 다음과 같다. + +#### 4.2.2 네트워크 보안 요구사항 + + + +--- + +99 +01 +02 +03 +04 +05 +보안 요구사항 +완화 대책 +체크리스트 번호 +(보안 취약점 점검) +보안 솔루션 +최소권한 원칙 +계정·서비스 간 측면 +이동 경로를 최소 +권한 구성으로 보호 +[IA-01] 사용자 식별 및 인증 +[IA-09] 사용자 계정 관리 +[IA-10] 사용자 식별자 관리 +[UC-01] 사용자 권한 부여 +서버 접근 +통제 솔루션 +세션 관리 +세션 남용을 세션 +잠금·종료·동시 접속 +제어로 보호 +[UC-03] 세션 잠금 +[UC-04] 원격 세션종료 +[UC-05] 동시 세션제어 +- +침입 탐지 +비정상 로그인 및 +이동 행위를 실시간 +침입 탐지로 보호 +[ER-02] 지속적인 모니터링 +[ER-03] 보안 이벤트 알림 +산업용 IDS +정기 보안 +점검 및 +설정 강화 +취약점 기반 공격을 +정기 스캔· +보안 설정 강화· +불필요 서비스 +비활성화로 보호 +[SI-05] 입력값 검증 +[SI-07] 오류 처리 +[RA-07] 보안 구성 설정 관리 +[RA-08] 불필요한 기능, 포트 및 서비스 제한 +[CR-03] 사이버 침해사고 대비 복구 절차 문서화 및 테스트 +[CR-04] 복구 목표 시간(RTO) 및 복구 목표 시점(RPO) 정의 +[CR-08] 보안 취약점 보고 처리 공식 절차 마련 +[CR-10] 보안 사고/취약점 기반 보안 대책 개선 절차 +[WS-20] 네트워크 인터페이스 노출 최소화 +소스코드 +진단 도구, +산업 EDR, +보안인증 +컨설팅 +구성요소 관리 +오픈소스 및 외부 +모듈 취약점을 +SBOM 기반 +최신화·구성요소 +관리로 보호 +[SC-01] 오픈소스 소프트웨어 구성요소 관리 +[SC-02] EoS 관리 +[SC-03] 공급업체 보안 역량 평가기준 수립 및 적용 +[SC-04] 공급망 변경 시 보안 영향 평가 및 대처 방안 마련 +[SC-05] 구성요소 취약점 관리 +[SC-07] 신속한 패치 메커니즘 +[WS-19] 최신 소프트웨어 및 하드웨어 유지 +소스코드 +진단 도구, +패치 관리 +솔루션 +부트 설정 보호 +부트 이미지 및 +초기 실행 코드 +변조를 무결성 +검증 메커니즘으로 +보호하고 부트 +파라미터 조작을 +설정 잠금으로 보호 +[UC-11] 물리적 진단 및 시험 인터페이스의 통제 +[SI-04] 소프트웨어 및 데이터무결성 검증 +[SI-11] 물리적 변조 방지 및 탐지 +[SC-06] 로봇 펌웨어 및 소프트웨어 업데이트의 무결성 검증 +[SI-04] 소프트웨어 및 데이터 무결성 검증 +TPM 내장 +보드 +운영체제·커널·부트 체인·펌웨어 등 로봇의 핵심 동작을 제어하는 시스템 소프트웨어를 보호하기 위한 +보안 요구사항으로, 3장에서 식별된 시스템 소프트웨어 위협에 대응한다. 세부 보안 요구사항은 다음 +과 같다. + +#### 4.2.3 + +시스템 소프트웨어 보안 요구사항 + + +--- + +100 +업데이트 +검증 +변조된 업데이트 +패키지를 서명 기반 +무결성 검증과 로그 +생성으로 보호 +[SC-06] 로봇 펌웨어 및 소프트웨어 업데이트의 무결성 검증 +[WS-13] 무선 네트워크 업데이트 무결성 및 진본성 검증 +[WS-17] 로그 생성 +[WS-18] 시간 정보 포함 +패치 관리 +솔루션 +안전한 롤백 +패치 실패를 자동 +롤백 및 복구 +기능으로 보호 +[CR-06] 업데이트 적용 실패 시 롤백 또는 복구 기능 확보 +패치 관리 +솔루션 +보안 +업데이트 +정책 +부적절한 업데이트 +관리를 정기 패치 +제공·적용 절차로 +보호 +[SI-10] 업데이트 지원 검증 +[CR-05] 보안 업데이트 및 패치의 적시 제공과 적용 +[WS-12] 업데이트 메커니즘 제공 +패치 관리 +솔루션 +커널 +하드닝 +커널 메모리 공격을 +메모리 보호·주소 +난수화(ASLR) 등 +하드닝으로 보호 +[SI-02] 악성코드로부터 보호 +[SC-05] 구성요소 취약점 관리 +- +서명된 +드라이버만 +허용 +악성 드라이버· +커널 모듈 실행을 +서명 검증 기반 모듈 +제한으로 보호 +[SI-04] 소프트웨어 및 데이터 무결성 검증 +[WS-23] 장비 무결성 보장 +- +프로세스 +무결성 +검증 +실행 중 코드 후킹· +변조를 프로세스 +무결성 검증으로 +보호 +[SI-03] 보안 기능 검증 +[SI-04] 소프트웨어 및 데이터 무결성 검증 +[ER-02] 지속적인 모니터링 +산업용 +EDR +이벤트 분석 +보안 이벤트 누락을 +정기 로그 분석으로 +보호 +[CR-09] 충분한 로그 확보 및 보안 이벤트 분석 지원 +- +감사 로그 +보호 관리 +로그 변조·삭제를 +접근 통제·암호화· +로테이션 정책으로 +보호 +[SI-09] 감사관련 정보 보호 +[UC-06] 감사 로그 생성 +[UC-07] 감사 로그 저장 용량 관리 +[UC-08] 감사 처리 실패 대응 +[UC-09] 시간 통제 +[CR-09] 충분한 로그 확보 및 보안 이벤트 분석 지원 +[WS-18] 시간 정보 포함 +[WS-23] 장비 무결성 보장 +[ER-01] 감사 로그 접근 관리 +백업 관리 +시스템 +진단 기능 +접근 통제 +디버그·진단 +인터페이스 악용을 +인증 기반 접근 +통제로 보호 +[IA-02] 장치 식별 및 인증 +[SI-11] 물리적 변조 방지 및 탐지 +[UC-01] 사용자 권한 부여 +시스템 소프트웨어 보안 요구사항 및 보안 솔루션 + + +--- + +101 +01 +02 +03 +04 +05 +보안 요구사항 +완화 대책 +체크리스트 번호 +(보안 취약점 점검) +보안 솔루션 +정기 보안 +점검 및 설정 +강화 +취약점 기반 +공격을 정기 스캔· +보안 설정 강화· +불필요 기능 +비활성화로 보호 +[SI-05] 입력값 검증 +[SI-07] 오류 처리 +[RA-07] 보안 구성 설정 관리 +[RA-08] 불필요한 기능, 포트 및 서비스 제한 +[WS-20] 네트워크 인터페이스 노출 최소화 +[CR-04] 복구 목표 시간(RTO) 및 복구 목표 시점(RPO) 정의 +[CR-08] 보안 취약점 보고 처리 공식 절차 마련 +[CR-10] 보안 사고/취약점 기반 보안 대책 개선 절차 +소스코드 +진단 도구, +산업 EDR, +보안인증 +컨설팅 +보안 업데이트 +정책 +비적절한 패치 +관리를 정기 +업데이트 정책 +수립으로 보호 +[SI-10] 업데이트 지원 검증 +[CR-05] 보안 업데이트 및 패치의 적시 제공과 적용 +[WS-12] 업데이트 메커니즘 제공 +패치 관리 +솔루션 +공급망 보안 +오픈소스·외부 +모듈 취약점을 +SBOM 관리 및 +최신화로 보호 +[SC-01] 오픈소스 소프트웨어 구성요소 관리 +[SC-02] EoS 관리 +[SC-03] 공급업체 보안 역량 평가 기준 수립 및 적용 +[SC-04] 공급망 변경 시 보안 영향 평가 및 대처 방안 마련 +[SC-05] 구성요소 취약점 관리 +[SC-07] 신속한 패치 메커니즘 +[CR-07] 보안 업데이트 지원 정책 및 수명주기 명시 +[WS-19] 최신 소프트웨어 및 하드웨어 유지 +소스코드 +진단 도구, +패치 관리 +솔루션 +인증 기반 +접근 통제 +비인가 접근 및 +작업 변경을 인증 +기반 접근 제어와 +강력한 인증 정책 +(반복 시도 제한 +등)으로 보호 +[IA-01] 사용자 식별 및 인증 +[IA-02] 장치 식별 및 인증 +[IA-03] 사용자 패스워드 정책 +[IA-06] 인증정보 노출 방지 +[IA-07] 반복된 로그인 시도 제한 +[UC-10] 사용자에 대한 부인 방지 +[CR-13] 사용자 정보 등의 인증 데이터 보호 +[WS-01] 무선 사용자 식별 및 인증 +[WS-02] 인증자 유효성 검증 +[WS-03] 인증자 변경 +[WS-04] 비밀번호 강도 +[WS-05] 무차별 대입 보호 +서버 접근 +통제 솔루션 +세션 관리 +세션 남용을 세션 +잠금·종료·동시 +접속 제어로 보호 +[UC-03] 세션 잠금 +[UC-04] 원격 세션종료 +[UC-05] 동시 세션제어 +- +계정 관리 +휴면 계정 악용을 +계정 점검· +비활성화로 보호 +[IA-09] 사용자 계정 관리 +[IA-10] 사용자 식별자 관리 +[IA-11] 사용자 인증자 관리 +서버 접근 +통제 솔루션 +로봇의 상위 작업을 수행하는 애플리케이션 계층을 보호하기 위한 보안 요구사항으로, 3장에서 식별된 +응용 소프트웨어 위협에 대응한다. 세부 보안 요구사항은 다음과 같다. + +#### 4.2.4 응용 소프트웨어 보안 요구사항 + + + +--- + +102 +권한 기반 +접근 통제 +데이터 설정 및 상태 +정보 조회를 역할 +기반 권한 통제와 +권한 분리로 보호 +[IA-01] 사용자 식별 및 인증 +[UC-01] 사용자 권한 부여 +[SI-03] 보안 기능 검증 +[WS-06] 자산 접근 제어 +서버 +접근 통제 +솔루션, +DB 접근 +제어 시스템 +작업 알림 +작업 이상 행위를 +실시간 모니터링과 +알림으로 보호 +[ER-02] 지속적인 모니터링 +[UC-06] 감사 로그 생성 +[WS-17] 로그 생성 +[WS-18] 시간 정보 포함 +산업용 +방화벽 +이벤트 분석 +이상 행위를 +정기적인 로그 +분석으로 보호 +[CR-09] 충분한 로그 확보 및 보안 이벤트 분석 지원 +- +로그 관리 +로그 변조를 +접근제어·암호화· +로테이션 정책으로 +보호 +[SI-03] 보안 기능 검증 +[SI-07] 오류 처리 +[SI-09] 감사관련 정보 보호 +[UC-06] 감사 로그 생성 +[UC-07] 감사 로그 저장 용량 관리 +[UC-08] 감사 처리 실패 대응 +[UC-09] 시간 통제 +[CR-09] 충분한 로그 확보 및 보안이벤트 분석 지원 +[WS-18] 시간 정보 포함 +[WS-23] 장비 무결성 보장 +백업 관리 +시스템 +로그 +추적성 +접근 및 변경 행위를 +시간정보 포함 로그 +생성으로 보호 +[UC-06] 감사 로그 생성 +[UC-10] 사용자에 대한 부인 방지 +[WS-17] 로그 생성 +[WS-18] 시간 정보 포함 +서버 접근 +통제 솔루션 +입력값 검증 +비정상 파라미터 +입력을 입력값 +검증으로 보호 +[SI-05] 입력값 검증 +- +무결성 검증 +데이터 변조를 +무결성 검증으로 +보호 +[WS-23] 장비 무결성 보장 +[SI-03] 보안 기능 검증 +[SI-04] 소프트웨어 및 데이터 무결성 검증 +[WS-08] 저장 데이터 무결성 검증 +[WS-10] 무선 통신 데이터 무결성검증 +[SC-06] 로봇 펌웨어 및 소프트웨어 업데이트의 무결성 검증 +- +데이터 +암호화 +민감 데이터 노출을 +강력한 암호 +알고리즘 적용으로 +보호 +[DP-01] 정보의 기밀성 +[DP-03] 안전한 암호 메커니즘 사용 +[WS-07] 안전한 데이터 보호 +[WS-14] 암호화 적정성 +- +개인정보 +보호 +개인정보 오남용을 +최소 수집·암호화 +저장·완전 삭제로 +보호 +[DP-04] 개인정보 보호 +데이터 완전 +삭제 솔루션 + + +--- + + + +--- + +104 +산업용 로봇은 장기간 운영, 레거시 프로토콜 사용, 물리적 접근 가능성 등과 같은 고유 특성을 갖기 +때문에, 완화의 측면에서는 이러한 특성을 고려한 보호 통제가 필수적이다. 산업용 로봇 서비스의 각 +구성요소에 대한 보안 요구사항을 다음과 같이 식별할 수 있다. +본 문서는 로봇 시스템 고유의 보안 요구사항을 중점적으로 다루는 것을 목적으로 하므로, 산업제어시스템 +설비에 대한 보안 위협 및 대응방안은 KISA 스마트공장 보안모델을 참조한다. +로봇 제어반에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +1) 산업제어시스템 설비 +2) 로봇 제어반 +구성 +요소 +속성 +보안 위협 +보안 +요구사항 +완화 대책 +보안 솔루션 +미 +들 +웨 +어 +네트 +워크 +네트워크 +도청 +통신 암호화 +네트워크를 통해 송수신되는미들웨어 데이터를 암호화하여 +도청으로부터 보호 +보안칩,보안 AP +메시지 +재생 공격 +세션 +무결성 검증 +메시지 시퀀스·Nonce 기반 검증으로 미들웨어 데이터 +재전송 방지 +- +패킷 검증 +미들웨어 명령 프레임 및 데이터 패킷 유효성 검증 및 +적절한 처리 +산업용 IPS, +산업용 방화벽, +산업용 IDS, IoT +보안 게이트웨이 +라우팅 +기능 남용 +인증 기반 +라우팅 +인증된 사용자·장치만 미들웨어 라우팅 설정 변경 +산업용 방화벽 +라우팅 +내역 관리 +미들웨어 라우팅 변경 및 트래픽 흐름 기록 +- +시스템 +S/W +취약점 악용 +정기 보안 +점검 및 설정 +강화 +미들웨어에서 발생한 비정상입력값 탐지 +소스코드 진단 도구, +산업용 EDR +알려진 취약점에 대해 정기 스캔과 신속한 패치 적용으로 +익스플로잇 차단 +소스코드 진단 도구 +미들웨어 불필요한 서비스 비활성화 및 보안 설정/관리 +보안인증 컨설팅 +발견된 미들웨어의 취약점의 공식 보고 및 개선절차 확립 +- +공급망 보안 +미들웨어 오픈소스 및 외부 모듈의 SBOM 관리 및 최신화 +소스코드 진단 도구, +패치 관리 솔루션 +미들웨어 서비스 수명주기(EoS) 기반으로 취약점 패치 및 +자동 배포 메커니즘 운영 +패치 관리솔루션 +업데이트 +기능 악용 +업데이트 +검증 +미들웨어 서명기반 무결성 검증 및 위변조방지, 관련 로그 +생성을 통한 행위증적 저장 +패치 관리솔루션 +안전한 롤백 +미들웨어 패치 실패 시 자동복구 기능 제공 +패치 관리솔루션 +보안 +업데이트 +정책 +미들웨어 정기적 패치 제공 및 적용 절차 수립 +서버 접근 통제 +솔루션 +응용 +S/W +악성코드 +유입/감염 +로그 추적성 +미들웨어 보안 기능 정상 동작 여부 주기적 확인 및 +부인방지를 위한 미들웨어 관련 행위 +로그 생성 +서버 접근 통제 +솔루션 +악성코드 +검사 +백신, 샌드박스, 파일 무결성 +점검으로 미들웨어의 악성코드탐지 +산업용 EDR, 백신 + + +--- + +105 +01 +02 +03 +04 +05 +라이센스 +파일 +변조로 +인한 무단 +소프트웨어 +실행 +무결성 검증 +실행 전 라이센스 파일의 해시·서명 검증 +- +악성코드 +검사 +위조 파일 통한 미들웨어 악성 행위 탐지 +산업용 EDR, 백신 +로그 추적성 +소프트웨어 실행 관련 미들웨어에 행위 로그 생성 +서버 접근 통제 +솔루션 +A +P +I +모 +듈 +네트 +워크 +오동작 및 +중단 유발 +통신 신뢰성 +확보 +장치 식별 및 인증을 통한 통신 전급제한 및 CRC 확인 +등으로 API 모듈 통신 이상 검출 +IoT 보안 +게이트웨이 +패킷 검증 +API 모듈 명령 프레임 및 데이터 패킷 +유효성 검증 및 적절한 처리 +산업용 IPS, +산업용 방화벽 +서비스 +거부 +서비스 +자원 보호 +연결 요청 제한, 세션 분리 등으로 API 모듈 자원 고갈 +방지 +산업용 IPS, +산업용 보안 +스위치 +불필요 +기능 및 +포트 제한 +API 모듈에 대해 터미널 포트 접근 및 필요하지 않은 +한 터미널 기능 미제공, 사용목적별 화이트리스트 구성 +산업용 IDS, +산업용 IPS +네트워크 +도청 +통신 +암호화 +네트워크를 통해 송수신되는 API 모듈 데이터를 암호화하여 +도청으로부터 보호 +보안칩, +보안 AP +응용 +S/W +접근 제어 +기능 악용 +인증 기반 +접근 통제 +API 모듈 비밀번호 정책 강화, 무차별 대입 방지, 인증자 +주기적 변경 +서버 접근 +통제 솔루션 +세션 관리 +API 모듈 동시 세션 제한, 세션 잠금·종료 기능으로 불법 +세션 차단 +- +계정 관리 +API 모듈 불필요한 계정 주기적점검 및 비활성화 +서버 접근 +통제 솔루션 +로그 추적성 +API 모듈 로그인, 접근, 실패 +이력을 모두 기록하고 시간정보 포함 +서버 접근 +통제 솔루션 +작업/동작 +설정 악용 +인증 기반 +접근 통제 +승인된 사용자만 API 모듈 안전 설정 변경 가능하도록 통제 +서버 접근 +통제 솔루션 +입력값 검증 +설정 값이 안전 범위를 초과하지 않도록 API 모듈 유효성검사 +- +안전 정지 +API 모듈에 대해 잘못된 명령 시 비정상 동작 방지를 위한 +자동 모드 전환 +- +작업 알림 +작업 모니터링 실행 및 결과로그 생성, API 모듈 이상 시 +알림 +산업용 방화벽 +설정 +데이터 +변조 +권한 기반 +접근 통제 +API 모듈 설정 데이터 변경은 관리자 등 특정 권한 +사용자만 수행 가능 +서버 접근통제 +솔루션 +입력값 검증 +API 모듈 운영 파라미터 입력 시 허용 범위 검증 +- +백업 관리 +API 모듈 변경이력 기록, 주기적 백업으로 설정 손상 시 +복원 +백업 관리 시스템 +무결성 검증 +API 모듈 설정 데이터의 변조 탐지 및 보호 +- + + +--- + +106 +운 +영 +체 +제 +네트 +워크 +서비스 +거부 +서비스 자원 +보호 +운영체제 연결 요청 제한, 세션 분리 등으로 자원 고갈 방지 +산업용 IPS, 산업용 +보안 스위치 +불필요 기능 +및 포트 제한 +운영체제 터미널 포트 접근 및 필요하지 않은 한 터미널 +기능 미제공, 사용목적별 화이트리스트 구성 +산업용 IDS, 산업용 +IPS +시스템 +S/W +부트로더 +및 초기 +신뢰체계 +훼손 +부트 설정 +보호 +운영체제 +부팅 +이미지·부트로더의 +서명을 +검증해 +위변조방지 +- +운영체제 펌웨어/커널 로드 전 해시 검증으로 초기 신뢰 +유지 +TPM 내장 보드 +운영체제 부트 파라미터, 디버그 모드, 펌웨어 선택 옵션을 +변경 불가로 잠금 +- +권한 +탈취 +최소권한 +원칙 +운영체제 불필요한 관리자 권한·root 권한 제거로 공격 +표면 제거 +서버 접근통제 +솔루션 +커널 하드닝 +운영체제 메모리 보호·주소 난수화 등으로 권한 상승 공격 +차단 +- +서명된 +드라이버만 +허용 +운영체제 악성 드라이버·커널 모듈 로딩을 원천 차단 +- +업데이트 +기능 악용 +업데이트 +검증 +운영체제 서명기반 무결성 검증 및 위변조방지, 관련 로그 +생성을 통한 행위 증적 저장 +패치 관리솔루션 +안전한 롤백 +운영체제 패치 실패 시 자동 복구 기능 제공 +패치 관리솔루션 +보안 +업데이트 +정책 +운영체제 정기적 패치 제공 및 적용 절차 수립 +패치 관리 솔루션 +보호기능 +우회 +프로세스 +무결성 검증 +운영체제 실행 중 코드 변조· +후킹 여부를 지속 점검 +산업용 EDR +로그 +위·변조 +감사 로그 +보호 관리 +타임스탬프를 포함한 여러 +이벤트, 운영체제 감사 관련 로그 생성 및 저장 수행 +- +운영체제 로그 파일 변조 방지를 위한 접근제어·암호화 적용 +- +로그 포화 방지를 위한 순환/로테이션 정책 수립 +- +이벤트 분석 +충분한 운영체제 로그 확보 및 정기적 분석 수행 +- +진단 기능 +악용 +진단 기능 +접근 통제 +운영체제에 남아 있는 진단관련 개발자·테스트 기능을 +인증기반으로 제한 +- +I +/ +O +모 +듈 +H/W +신호 위조 +장비 간 +인증 +모든 신호 송수신 시 장치·사용자 상호 인증으로 I/O 모듈 +신뢰성 확보 +- +키 관리 +강화 +대칭/공개키 수명주기 및 관리 절차 수립으로 I/O 모듈 +위조 신호 방지 +암호화 모듈 +저장 장치 +정보 탈취 +및 조작 +바이너리 +심볼 제거 +탈취된 바이너리의 역공학을어렵게 하기 위하여 I/O 모듈 +바이너리의 심볼을 제거 +- +디스크 +암호화 +저장 장치 전체에 암호화를적용해 물리적 탈취 시 데이터 +노출 방지 +TPM 내장 +보드, 보안칩 +외장 +매체를 +통한 +데이터 +주입/유출 +매체 제어 +보안 USB 등 허용된 매체만 사용 가능토록 제한하고 모든 +외부매체는 비허용 또는 스캔 후 허용 +매체제어 +솔루션, 보안 USB +물리포트 +보호 +포트락·커넥터 캡 등 I/O 모듈에 간접 영향을 끼칠 수 +있는 물리적 차단 장치 적용 +포트락, +시건 장치 + + +--- + +107 +01 +02 +03 +04 +05 +메 +인 +보 +드 +H/W +물리적 +훼손 +장비 무결성 +검증 +장비 내부의 메인 보드 물리적 변조를 탐지하거나 방지하는 +기능을 적용해, 케이스 개봉· 보드 접근 시 알림 및 복구 +절차 수행 +시건 장치,출입 +통제시스템, 탬퍼 +방지 장치 +안전 상태 +전환(Fail- +Safe) +하드웨어 훼손 시 자동으로 안전모드로 전환되어 메인 보드 +오작동 방지 +- +기능 지속성 +확보 +메인 보드 일부 손상에도 핵심 기능이 유지되도록 예비 장비 +마련과 같은 복구 절차 확보 +- +터미널 +접근 +접근 통제 및 +인증 강화 +메인 보드 관리용 콘솔 접근 시 사용자 인증, 세션 제한 적용 +- +저장 장치 +정보 탈취 +및 조작 +바이너리 +심볼 제거 +탈취된 바이너리의 역공학을어렵게 하기 위하여 메인 보드 +바이너리의 심볼을 제거 +- +디스크 +암호화 +저장 장치 전체에 암호화를 적용해 물리적 탈취 시 메인 +보드 데이터 노출 방지 +TPM 내장보드, +보안칩 +신호 위조 +장비 간 +인증 +모든 신호 송수신 시 장치·사용자 상호 인증으로 메인 +보드 신뢰성 확보 +- +키 관리 +강화 +대칭/공개키 수명주기 및 관리 절차 수립으로 메인 보드 +위조 신호 방지 +암호화 모듈 +인 +터 +페 +이 +스 +H/W +터미널 +접근 +접근 통제 및 +인증 강화 +관리용 콘솔 접근 시 사용자인증, 세션 제한 적용 +- +외장 +매체를 +통한 +데이터 +주입/유출 +매체 제어 +보안 USB 등 허용된 매체만사용 가능토록 제한하고 모든 +외부매체는 비허용 또는 스캔 후 허용 +매체 제어솔루션, +보안 USB +물리포트 +보호 +포트락·커넥터 캡 등 물리적차단 장치 적용 +포트락, 시건 장치 +신호 위조 +장비 간 +인증 +모든 신호 송수신 시 장치·사용자 상호 인증으로 신뢰성 +확보 +- +키 관리 +강화 +대칭/공개키 수명주기 및 관리 절차 수립으로 위조 신호 +방지 +암호화 모듈 +서 +보 +드 +라 +이 +브 +H/W +물리적 +훼손 +장비 무결성 +검증 +장비 내부의 서보 드라이브 물리적 변조를 탐지하거나 +방지하는 기능을 적용해, 케이스 개봉·보드 접근 시 알림 +및 복구 절차 수행 +시건 장치,출입 +통제 시스템, 탬퍼 +방지 장치 +안전 상태 +전환(Fail- +Safe) +서보 드라이브 하드웨어 훼손 시 자동으로 안전모드로 +전환되어 오작동 방지 +- +기능 지속성 +확보 +서보 드라이브 일부 손상에도 핵심 기능이 유지되도록 +예비 장비 마련과 같은 복구 절차 확보 +- +신호 위조 +장비 간 +인증 +모든 신호 송수신 시 장치·사용자 상호 인증으로 서보 +드라이브 신뢰성 확보 +- +키 관리 +강화 +대칭/공개키 수명주기 및 관리 절차 수립으로 서보 +드라이브 위조 신호 방지 +암호화 모듈 +저장 장치 +정보 탈취 +및 조작 +바이너리 +심볼 제거 +탈취된 서보 드라이브 바이너리의 역공학을 어렵게 하기 +위하여 바이너리의 심볼을 제거 +- +디스크 +암호화 +저장 장치 전체에 암호화를 적용해 물리적 탈취 시 데이터 +노출 방지 +TPM 내장보드, +보안칩 +부채널 +공격 +부채널 공격 +저항 패턴 +적용 +서보 드라이브의 민감 연산이 전력·시간·EM 패턴으로 +유출되지 않도록 난수화 및 고정시간 연산을 적용 +보안칩 +전력·전자기 +차폐 +서보 드라이브 외부로 방출되는 전력·전자기 신호를 +최소화하도록 차폐 설계를 적용 +- +로봇 제어반 보안 요구사항 및 보안 솔루션 + + +--- + +108 +티칭 도구에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +3) 티칭 도구 +구성 +요소 +속성 +보안 위협 +보안 +요구사항 +완화 대책 +보안 솔루션 +티 +칭 +팬 +던 +트 +H/W +물리적 +훼손 +장비 무결성 +검증 +티칭 펜던트 내부의 물리적 변조를 탐지하거나 방지하는 +기능을 적용해, 케이스 개봉·보드 접근 시 알림 및 복구 절차 +수행 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +티칭 펜던트 하드웨어 훼손 시 자동으로 안전모드로 +전환되어 오작동 방지 +- +기능 지속성 +확보 +티칭 펜던트 일부 손상에도 핵심 기능이 유지되도록 예비 +장비 마련과 같은 복구 절차 확보 +- +터미널 접근 +접근 통제 및 +인증 강화 +티칭 펜던트 관리용 콘솔 접근 시 사용자 인증, 세션 제한 +적용 +- +외장 매체를 +통한 데이터 +주입/유출 +매체 제어 +티칭 펜던트에서 보안 USB 등 허용된 매체만 사용 가능토록 +제한하고 모든 외부매체는 비허용 또는 스캔 후 허용 +매체 제어솔루션, +보안 USB +물리포트 보호 +포트락·커넥터 캡 등 티칭 펜던트 물리적 차단 장치 적용 +포트락, 시건 장치 +저장 장치 +정보 탈취 +및 조작 +바이너리 심볼 +제거 +탈취된 바이너리의 역공학을 어렵게 하기 위하여 티칭 +펜던트 바이너리의 심볼을 제거 +- +디스크 암호화 +저장 장치 전체에 암호화를 적용해 물리적 탈취 시 티칭 +펜던트 데이터 노출 방지 +TPM 내장보드, +보안칩 +네트 +워크 +오동작 및 +중단 유발 +통신 신뢰성 +확보 +티칭 펜던트 장치 식별 및인증을 토한 통신 전급제한 및 +CRC 확인 등으로 통신 이상 검출 +IoT 보안 게이트웨이 +패킷 검증 +티칭 펜던트 명령 프레임 및 데이터 패킷 유효성 검증 및 +적절한 처리 +산업용 IPS, 산업용 +방화벽 +티칭 펜던트 제어 명령이 정상 범위 내에 있는지 검증하고 +오류 시 안전모드로 전환 +산업용 IDS, IoT +보안 게이트웨이 +장치 인증 +인증된 장치만 티칭 펜던트 제어 명령 송신 허용 +IoT 보안 게이트웨이 +통신 암호화 +TLS/SSH 등으로 티칭 펜던트 제어 명령 구간 암호화 +보안 AP +네트워크 +도청 +통신 암호화 +네트워크를 통해 송수신되는 API 모듈 데이터를 암호화하여 +티칭 펜던트를 도청으로부터 보호 +보안칩, 보안 AP +시스템 +S/W +취약점 +악용 +정기 보안 +점검 및 설정 +강화 +티칭 펜던트에서 발생한 비정상 입력값 탐지 +산업용 EDR +알려진 취약점에 대해 정기 스캔과 신속한 패치 적용으로 +익스플로잇 차단 +소스코드 진단 도구 +불필요한 티칭 펜던트 서비스 비활성화 및 보안 설정/관리 +발견된 티칭 펜던트 취약점의 공식 보고 및 개선절차 확립 +보안인증 컨설팅 +공급망 보안 +티칭 펜던트 오픈소스 및 외부 모듈의 SBOM 관리 및 +최신화 +소스코드 진단 도구, +패치 관리 솔루션 +티칭 펜던트 서비스 수명주기EoS 기반으로 취약점 패치 및 +자동 배포 메커니즘 운영 +패치 관리 솔루션 +권한 +탈취 +최소권한 원칙 +불필요한 관리자 권한·root 권한 제거로 티칭 펜던트 +공격면적감소 +서버 접근통제 +솔루션 +커널 하드닝 +티칭 펜던트 메모리 보호·주소 난수화 등으로 권한상승 +공격차단 +- +서명된 +드라이버 만 +허용 +티칭 펜던트의 악성 드라이버·커널 모듈 로딩을 원천 차단 +- + + +--- + +109 +01 +02 +03 +04 +05 +시스템 +S/W +업데이트 +기능 악용 +업데이트 +검증 +서명기반 티칭 펜던트 무결성 검증 및 위변조방지, 관련 +로그 생성을 통한 행위증적 저장 +패치 관리솔루션 +안전한 롤백 +티칭 펜던트 패치 실패 시자동 복구 기능 제공 +패치 관리솔루션 +보안 +업데이트 +정책 +티칭 펜던트 정기적 패치 제공 및 적용 절차 수립 +패치 관리솔루션 +로그 +위·변조 +감사 로그 +보호 관리 +타임스탬프를 포함한 여러 티칭 펜던트 이벤트, 감사 관련 +로그 생성 및 저장 수행 +- +티칭 펜던트 로그 파일 변조 방지를 위한 접근제어·암호화 +적용, 로그 포화 방지를 위한 순환/로테이션 정책 수립 +이벤트 분석 +충분한 티칭 펜던트 로그 확보 및 정기적 분석 수행 +응용 +S/W +접근 제어 +기능 악용 +인증 기반 +접근 통제 +API 키 기반 인증 및 JWT토큰 기반 세션 관리 +서버 접근통제 +솔루션 +권한 기반 +접근 통제 +사용자 역할별 API 접근 권한 분리 (일반 사용자/운영자/ +관리자) +서버 접근통제 +솔루션 +작업/동작 +설정 악용 +인증 기반 +접근 통제 +승인된 사용자만 티칭 펜던트 안전 설정 변경 가능하도록 +통제 +서버 접근통제 +솔루션 +입력값 검증 +설정값이 티칭 펜던트 안전 범위를 초과하지 않도록 +유효성검사 +- +안전 정지 +잘못된 명령 시 티칭 펜던트 비정상 동작 방지를 위한 자동 +모드 전환 +- +작업 알림 +티칭 펜던트 작업 모니터링 실행 및 결과 로그 생성, 이상 +시 알림 +산업용 방화벽 +설정 데이터 +변조 +권한 기반 +접근 통제 +티칭 펜던트 설정 데이터 변경은 관리자 등 특정 권한 +사용자만 수행 가능 +서버 접근통제 +솔루션 +입력값 검증 +티칭 펜던트 운영 파라미터 입력 시 허용 범위 검증 +- +백업 관리 +티칭 펜던트 변경이력 기록, 주기적 백업으로 설정 손상시 +복원 +백업 관리 시스템 +무결성 검증 +티칭 펜던트 설정 데이터의 변조 탐지 및 보호 +- +데이터 +탈취/변조 +데이터 +암호화 +중요한 티칭 펜던트 데이터에 대한 강력한 암호 알고리즘 +적용 +- +권한 기반 +접근 통제 +티칭 펜던트 민감 데이터 접근 권한 제한 및 감사 로그 생성 +DB 접근 제어 +시스템 +무결성 검증 +티칭 펜던트 데이터 변조 방지용 서명·해시 검증 +- +개인정보 +보호 +티칭 펜던트 개인식별정보처리 시 최소 수집·암호화 저장, +필요시 완전한 삭제 수행 +데이터 완전 삭제 +솔루션 +백업 관리 +주기적 백업 및 복구 테스트로 티칭 펜던트 데이터 유실 +방지 +백업 관리 시스템 +백업/복원 +악용 +무결성 검증 +티칭 펜던트 백업 데이터의 위변조 여부 검증 +- +권한 기반 +접근 통제 +티칭 펜던트 백업 저장소 접근권한 최소화 +서버 접근통제 +솔루션 +로그 추적성 +티칭 펜던트 백업/복원 작업 로그 및 시점 정보 포함 저장 +서버 접근 통제 +솔루션 + + +--- + +110 +E +W +S +H/W +물리적 +훼손 +장비 무결성 +검증 +EWS 장비 내부의 물리적 변조를 탐지하거나 방지하는 +기능을 적용해, 케이스 개봉·보드 접근 시 알림 및 복구 +절차 수행 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +EWS 하드웨어 훼손 시 자동으로 안전모드로 전환되어 +오작동 방지 +- +기능 지속성 +확보 +EWS 일부 손상에도 핵심 기능이 유지되도록 예비 장비 +마련과 같은 복구 절차 확보 +- +터미널 +접근 +접근 통제 +및 인증 +강화 +EWS 관리용 콘솔 접근 시 사용자 인증, 세션 제한 적용 +- +외장 +매체를 +통한 +데이터 +주입/유출 +매체 제어 +EWS에서 보안 USB 등 허용된 매체만 사용 가능토록 +제한하고 모든 외부매체는 비허용 또는 스캔 후 허용 +매체 제어솔루션, +보안 USB +물리포트 +보호 +포트락·커넥터 캡 등 EWS물리적 차단 장치 적용 +포트락, 시건 장치 +저장 장치 +정보 탈취 +및 조작 +바이너리 +심볼 제거 +탈취된 바이너리의 역공학을 어렵게 하기 위하여 EWS +바이너리의 심볼을 제거 +- +디스크 +암호화 +저장 장치 전체에 암호화를 적용해 물리적 탈취 시 EWS +데이터 노출 방지 +TPM 내장보드, +보안칩 +네트 +워크 +오동작 및 +중단 유발 +통신 신뢰성 +확보 +장치 식별 및 인증을 통한통신 전급제한 및 CRC 확인 +등으로 EWS 통신 이상 검출 +IoT 보안 게이트웨이 +패킷 검증 +EWS 명령 프레임 및 데이터 패킷 유효성 검증 및 적절한 +처리 IPS, 산업용 방화벽 +산업용 +IPS, 산업용 방화벽 +EWS 제어 명령이 정상 범위 내에 있는지 검증하고 오류 +시 안전모드로 전환 +산업용 IDS, IoT +보안 게이트웨이 +장치 인증 +인증된 장치만 EWS 제어 명령 송신 허용 +IoT 보안 게이트웨이 +통신 암호화 +TLS/SSH 등으로 EWS 제어 명령 구간 암호화 +보안 AP +서비스 +거부 +서비스 자원 +보호 +연결 요청 제한, 세션 분리 등으로 EWS 자원 고갈 방지 +산업용 IPS, 산업용 +보안 스위치 +불필요 기능 +및 포트 제한 +EWS 터미널 포트 접근 및필요하지 않은 한 터미널 기능 +미제공, 사용목적별 화이트리스트 구성 +산업용 IDS, 산업용 +IPS +네트워크 +도청 +통신 암호화 +네트워크를 통해 송수신되는 API 모듈 데이터를 +암호화하여 EWS를 도청으로부터 보호 +보안칩, 보안 AP +시스템 +S/W +취약점 +악용 +정기 보안 +점검 및 +설정 강화 +발생한 EWS 비정상 입력값 탐지 +산업용 IPS +알려진 취약점에 대해 정기 스캔과 신속한 패치 적용으로 +익스플로잇 차단 +소스코드 진단 도구 +불필요한 EWS 서비스 비활성화 및 보안 설정/관리 +- +발견된 EWS 취약점의 공식 보고 및 개선절차 확립 +보안 인증 컨설팅 +공급망 보안 +EWS에서 사용하는 오픈소스 및 외부 모듈의 SBOM +관리 및 최신화 +소스코드 진단 도구, +패치 관리 솔루션 +서비스 수명주기 EoS 기반으로 EWS 취약점 패치 및 +자동 배포 메커니즘 운영 +패치 관리솔루션 +권한 탈취 +최소권한 원칙 +불필요한 관리자 권한·root 권한 제거로 EWS 공격 면적 감소 +서버 접근 +통제 솔루션 +커널 하드닝 +EWS 메모리 보호·주소 난수화 등으로 권한상승 공격차단 +- +서명된 +드라이버만 +허용 +EWS 악성 드라이버·커널 모듈 로딩을 원천 차단 +- + + +--- + +111 +01 +02 +03 +04 +05 +E +W +S +시스템 +S/W +업데이트 +기능 악용 +업데이트 +검증 +서명기반 EWS 무결성 검증 및 위변조방지, 관련 로그 +생성을 통한 행위 증적 저장 +패치 관리 +솔루션 +안전한 롤백 +EWS 패치 실패 시 자동 복구 기능 제공 +패치 관리 솔루션 +보안 +업데이트 +정책 +정기적 EWS 패치 제공 및 적용 절차 수립 +패치 관리 솔루션 +로그 +위·변조 +감사 로그 +보호 관리 +타임스탬프를 포함한 여러 EWS 이벤트, 감사 관련 로그 +생성 및 저장 수행 +- +EWS 로그 파일 변조 방지를 위한 접근제어·암호화 적용 +- +로그 포화 방지를 위한 순환/로테이션 정책 수립 +- +이벤트 분석 +충분한 EWS 로그 확보 및 정기적 분석 수행 +- +응용 +S/W +접근 제어 +기능 악용 +인증 기반 +접근 통제 +API 키 기반 인증 및 JWT 토큰 기반 세션 관리 +서버 접근통제 +솔루션 +권한 기반 +접근 통제 +사용자 역할별 API 접근 권한 분리 (일반 사용자/ +운영자/관리자) +서버 접근통제 +솔루션 +작업/동작 +설정 악용 +인증 기반 +접근 통제 +승인된 사용자만 EWS 안전 설정 변경 가능하도록 통제 +서버 접근통제 +솔루션, 백업 관리 +시스템 +입력값 검증 +설정값이 EWS 안전 범위를 초과하지 않도록 유효성검사 +- +안전 정지 +잘못된 명령 시 EWS 비정상 동작 방지를 위한 자동 모드 전환 +- +작업 알림 +EWS 작업 모니터링 실행 및 결과 로그 생성, 이상 시 알림 +산업용 방화벽 +설정 +데이터 +변조 +권한 기반 +접근 통제 +EWS 설정 데이터 변경은 관리자 등 특정 권한 사용자만 +수행 가능 +- +입력값 +검증 +파라미터 입력 시 EWS 허용 범위 검증 +- +백업 관리 +EWS 변경이력 기록, 주기적 백업으로 설정 손상시 복원 +백업 관리 시스템 +무결성 +검증 +EWS 설정 데이터의 변조 탐지 및 보호 +- +데이터 +탈취/변조 +데이터 +암호화 +중요한 EWS 데이터에 대한 강력한 암호 알고리즘 적용 +DB 접근 제어 +시스템 +권한 기반 +접근 통제 +민감 EWS 데이터 접근 권한제한 및 감사 로그 생성 +DB 접근 제어 +시스템 +무결성 +검증 +EWS 데이터 변조 방지용 서명·해시 검증 +- +개인정보 +보호 +EWS 개인식별정보 처리 시 최소 수집·암호화 저장, +필요시 완전한 삭제 수행 +데이터 완전 삭제 +솔루션 +백업 관리 +주기적 백업 및 복구 테스트로 EWS 데이터 유실 방지 +백업 관리 시스템 + + +--- + +112 +응용 +S/W +원격지원 +기능 악용 +인증 기반 +접근 통제 +EWS 비밀번호 정책 강화,무차별 대입 방지, 인증자 +주기적 변경 +서버 접근통제 +솔루션 +세션 관리 +EWS 동시 세션 제한, 세션 잠금·종료 기능으로 불법 세션 +차단 +- +계정 관리 +EWS 불필요한 계정 주기적 점검 및 비활성화 +서버 접근통제 +솔루션 +로그 추적성 +EWS 로그인, 접근, 실패 이력을 모두 기록하고 시간정보 +포함 +서버 접근 통제 +솔루션 +악성코드 +유입/감염 +악성코드 +검사 +백신, 샌드박스, 파일 무결성 점검으로 EWS 내부의 +악성코드 탐지 +산업용 EDR, 백신 +라이센스 +파일변조로 +인한 무단 +소프트웨어 +실행 +무결성 검증 +실행 전 EWS 라이센스 파일의 해시·서명 검증 +- +악성코드 +검사 +위조 파일 통한 EWS 악성 행위 탐지 +산업용 EDR, 백신 +로그 추적성 +EWS 소프트웨어 실행 관련 행위 로그 생성 +서버 접근 통제 +솔루션 +H +M +I +H/W +물리적 훼손 +장비 무결성 +검증 +HMI 장비 내부의 물리적 변조를 탐지하거나 방지하는 +기능을 적용해, 케이스 개봉· 보드 접근 시 알림 및 복구 +절차 수행 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +HMI 하드웨어 훼손 시 자동으로 안전모드로 전환되어 +오작동 방지 +- +기능 지속성 +확보 +일부 손상에도 HMI 핵심 기능이 유지되도록 예비 장비 +마련과 같은 복구 절차 확보 +- +터미널 접근 +접근 통제 및 +인증 강화 +HMI 관리용 콘솔 접근 시 사용자 인증, 세션 제한 적용 +- +외장 매체를 +통한 데이터 +주입/유출 +매체 제어 +보안 USB 등 HMI는 허용된 매체만 사용 가능토록 +제한하고 모든 외부매체는 비허용 또는 스캔 후 허용 +매체제어 솔루션, +보안 USB +물리포트 +보호 +HMI에 포트락·커넥터 캡 등 물리적 차단 장치 적용 +포트락, 시건 장치 +네트 +워크 +오동작 및 +중단 유발 +통신 신뢰성 +확보 +HMI 장치 식별 및 인증을 토한 통신 전급제한 및 CRC +확인 등으로 통신 이상 검출 +IoT 보안 게이트웨이 +패킷 검증 +HMI 명령 프레임 및 데이터 패킷 유효성 검증 및 적절한 +처리 +산업용 IPS, 산업용 +방화벽 +HMI 제어 명령이 정상 범위 내에 있는지 검증하고 오류 +시 안전모드로 전환 +산업용 IDS, IoT +보안 게이트웨이 +통신 암호화 +TLS/SSH 등으로 HMI 제어 명령 구간 암호화 +보안 AP +장치 인증 +인증된 장치만 HMI 제어 명령 송신 허용 +IoT 보안 게이트웨이 +서비스 거부 +서비스 자원 +보호 +HMI 연결 요청 제한, 세션 분리 등으로 자원 고갈 방지 +산업용 IPS, 산업용 +보안 스위치 +불필요 기능 +및 포트 제한 +HMI 터미널 포트 접근 및 필요하지 않은 한 터미널 기능 +미제공, 사용목적별 화이트리스트 구성 +산업용 IDS, 산업용 +IPS +네트워크 +도청 +통신 암호화 +네트워크를 통해 송수신되는 API 모듈 데이터를 +암호화하여 HMI 도청으로부터 보호 +보안칩, 보안 AP +시스템 +S/W +취약점 악용 +정기 보안 +점검 및 설정 +강화 +발생한 HMI의 비정상 입력값 탐지 +산업용 EDR +알려진 취약점에 대해 정기 스캔과 신속한 패치 적용으로 +익스플로잇 차단 +소스코드 진단 도구 +HMI의 불필요한 서비스 비활성화 및 보안 설정/관리 +- +발견된 HMI 취약점의 공식 보고 및 개선절차 확립 +보안 인증 컨설팅 + + +--- + +113 +01 +02 +03 +04 +05 +H +M +I +시스템 +S/W +취약점 +악용 +공급망 보안 + +HMI가 사용하는 오픈소스 및 외부 모듈의 SBOM 관리 +및 최신화 +소스코드 진단 도구, +패치 관리 솔루션 +패치 관리 +서비스 수명주기(EoS) 기반으로 HMI 취약점 패치 및 자동 +배포 메커니즘 운영 +패치 관리솔루션 +권한 탈취 +최소권한 +원칙 +불필요한 HMI 관리자 권한·root 권한 제거로 공격면적감소 +서버 접근통제 +솔루션 +커널 하드닝 +HMI 메모리 보호·주소 난수화 등으로 권한상승 공격차단 +- +서명된 +드라이버 +만 허용 +HMI 악성 드라이버·커널 모듈 로딩을 원천 차단 +산업용 IDS +업데이트 +기능 악용 +업데이트 +검증 +서명기반 HMI 무결성 검증 및 위변조방지, 관련 로그 +생성을 통한 행위증적 저장 +패치 관리 솔루션 +안전한 롤백 +HMI 패치 실패 시 자동 복구 기능 제공 +패치 관리 솔루션 +보안 정책 +정기적 HMI 패치 제공 및 적용 절차 수립 +패치 관리 솔루션 +업데이트 +기능 악용 +업데이트 +검증 +서명기반 HMI 무결성 검증 및 위변조방지, 관련 로그 +생성을 통한 행위증적 저장 +패치 관리솔루션 +안전한 롤백 +HMI 패치 실패 시 자동 복구 기능 제공 +패치 관리솔루션 +보안 정책 +정기적 HMI 패치 제공 및 적용 절차 수립 +패치 관리솔루션 +로그 +위·변조 +감사 로그 +보호 관리 +타임스탬프를 포함한 여러 HMI 이벤트, 감사 관련 로그 +생성 및 저장 수행 +백업 관리 시스템 +이벤트 분석 +충분한 HMI 로그 확보 및정기적 분석 수행 +- +감사 로그 +보호 관리 +HMI 로그 파일 변조 방지를 위한 접근제어·암호화 적용 +- +로그 포화 방지를 위한 순환/로테이션 정책 수립 +- +응용 +S/W +접근 제어 +기능 악용 +인증 기반 +접근 통제 +API 키 기반 인증 및 JWT 토큰 기반 세션 관리 +서버 접근통제 +솔루션 +권한 기반 +접근 통제 +사용자 역할별 API 접근 권한 분리 (일반 사용자/운영자/ +관리자) +서버 접근통제 +솔루션 +작업/동작 +설정 악용 +인증 기반 +접근 통제 +승인된 사용자만 HMI 안전 설정 변경 가능하도록 통제 +서버 접근통제 +솔루션 +입력값 검증 +설정값이 HMI 안전 범위를 초과하지 않도록 유효성검사 +- +안전 정지 +잘못된 명령 시 HMI 비정상 동작 방지를 위한 자동 모드 +전환 +- +작업 알림 +HMI 작업 모니터링 실행 및 결과 로그 생성, 이상 시 알림 +산업용 방화벽 +설정 데이터 +변조 +권한 기반 +접근 통제 +HMI 설정 데이터 변경은 관리자 등 특정 권한 사용자만 +수행 가능 +서버 접근 통제 +솔루션 +입력값 검증 +운영 파라미터 입력 시 HMI 허용 범위 검증 +- +백업 관리 +변경이력 기록, 주기적 백업으로 HMI 설정 손상시 복원 +백업 +백업 관리 +시스템 +HMI 설정 데이터의 변조 탐지 및 보호 +산업용 방화벽 +데이터 +탈취/변조 +데이터 +암호화 +중요한 HMI 데이터에 대한 강력한 암호 알고리즘 적용 +- +접근 통제 +민감 HMI 데이터 접근 권한 제한 및 감사 로그 생성 +- +무결성 검증 +HMI 데이터 변조 방지용 서명·해시 검증 +- +개인정보 +보호 +HMI 개인식별정보 처리 시 최소 수집·암호화 저장, +필요시 완전한 삭제 수행 +데이터 완전 삭제 +솔루션 +백업 관리 +주기적 HMI 백업 및 복구 테스트로 데이터 유실 방지 +백업 관리 시스템 + + +--- + +114 +구성 +요소 +속성 +보안 위협 +보안 요구사항 +완화 대책 +보안 솔루션 +구 +동 +부 +H/W +물리적 +훼손 +장비 무결성 검증 +구동부 물리적 변조를 탐지하거나 방지하는 기능을 +적용해, 케이스 개봉·보드 접근 시 알림 및 복구 절차 +수행 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 전환 +(Fail-Safe) +구동부 하드웨어 훼손 시 자동으로 안전모드로 +전환되어 오작동 방지 +- +기능 지속성 +확보 +구동부 일부 손상에도 핵심 기능이 유지되도록 예비 +장비 마련과 같은 복구 절차 확보 +- +신호 위조 +장비 간 인증 +모든 신호 송수신 시 장치·사용자 상호 인증으로 +구동부 신뢰성 확보 +- +키 관리 강화 +대칭/공개키 수명주기 및 관리 절차 수립으로 구동부 +위조 신호 방지 +암호화 모듈 +저장 장치 +정보 탈취 +및 조작 +바이너리 +심볼제거 +탈취된 바이너리의 역공학을 어렵게 하기 위하여 +바이너리의 심볼을 제거 +- +디스크 암호화 +저장 장치 전체에 암호화를 적용해 물리적 탈취 시 +데이터 노출 방지 +TPM 내장보드, +보안칩 +부채널 +공격 +부채널 공격 +저항 패턴 적용 +구동부의 민감 연산이 전력·시간·EM 패턴으로 +유출되지 않도록 난수화 및 고정시간 연산을 적용 +보안칩 +전력·전자기 +차폐 +구동부 +외부로 +방출되는 +전력·전자기 +신호를 +최소화하도록 차폐 설계를 적용 +- +센 +서 +및 +피 +드 +백 +부 +H/W +물리적 훼손 +장비 무결성 검증 +센서 및 피드백부의 물리적 변조를 탐지하거나 +방지하는 기능을 적용해, 케이스 개봉·보드 접근 시 +알림 및 복구 절차 수행 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 전환 +(Fail-Safe) +센서 및 피드백부 하드웨어 훼손 시 자동으로 +안전모드로 전환되어 오작동 방지 +- +상태 조회/ +설정 변조 +인증 기반 +접근 통제 +HMI 장치 상태(CPU, Memory 등) 조회는 인증 사용자에 +한해 허용, 접근 및 행위에 대한 로그생성 +서버 접근통제 +솔루션 +권한 기반 +접근 통제 +HMI 조회와 변경 권한을 구분하고 임의 설정 방지 +- +무결성 검증 +HMI 상태정보 변조 방지를 위한 보호 메커니즘 적용 +- +원격지원 +기능 악용 +인증 기반 +접근 통제 +HMI 비밀번호 정책 강화,무차별 대입 방지, 인증자 주기적 +변경 +서버 접근통제 +솔루션 +세션 관리 +HMI 동시 세션 제한, 세션 잠금·종료 기능으로 불법 세션 +차단 +- +계정 관리 +HMI 불필요한 계정 주기적 점검 및 비활성화 +서버 접근통제 +솔루션 +로그 추적성 +HMI 로그인, 접근, 실패 이력을 모두 기록하고 시간정보 +포함 +서버 접근 통제 +솔루션 +티칭 도구 보안 요구사항 및 보안 솔루션 +로봇 본체에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +4) 로봇 본체 + + +--- + +115 +01 +02 +03 +04 +05 +기능 지속성 +확보 +센서 및 피드백부 일부 손상에도 핵심 기능이 유지되도록 +예비 장비 마련과 같은 복구 절차 확보 +- +신호 위조 +장비 간 인증 +모든 신호 송수신 시 장치·사용자 상호 인증으로 센서 및 +피드백부 신뢰성 확보 +- +키 관리 강화 +대칭/공개키 수명주기 및 관리 절차 수립으로 센서 및 +피드백부 위조 신호 방지 +암호화 모듈 +저장 장치 +정보 탈취 +및 조작 +바이너리 +심볼제거 +탈취된 바이너리의 역공학을 어렵게 하기 위하여 +바이너리의 심볼을 제거 +- +디스크 +암호화 +저장 장치 전체에 암호화를 적용해 물리적 탈취 시 데이터 +노출 방지 +TPM 내장보드, +보안칩 +네트 +워크 +네트워크 +도청 +통신 암호화 +네트워크를 통해 송수신되는 데이터를 암호화하여 +도청으로부터 보호 +보안칩, 보안 AP +메시지 +재생 공격 +세션 무결성 +검증 +메시지 시퀀스·Nonce 기반검증으로 미들웨어 데이터 +재전송 방지 +- +패킷 검증 +미들웨어 명령 프레임 및 데이터 패킷 유효성 검증 및 +적절한 처리 +산업용 IPS, 산업용 +방화벽, 산업용 +IDS, IoT 보안 +게이트웨이 +오동작 및 +중단 유발 +장치 인증 +인증된 장치만 센서 및 피드백부 제어 명령 송신 허용 +IoT 보안 게이트웨이 +패킷 검증 +센서 및 피드백부 제어 명령이 정상 범위 내에 있는지 +검증하고 오류 시 안전모드로 전환 +- +통신 암호화 +TLS/SSH 등으로 센서 및 피드백부 제어 명령 구간 암호화 +보안 AP +서비스 +거부 +서비스 자원 +보호 +연결 요청 제한, 세션 분리 등으로 자원 고갈 방지 +산업용 IPS, 산업용 +보안 스위치 +불필요 기능 +및 포트 +제한 +터미널 포트 접근 및 필요하지 않은 한 터미널 기능 미제공, +사용목적별 화이트리스트 구성 +산업용 IDS, 산업용 +IPS +엔 +드 +이 +펙 +터 +H/W +물리적 +훼손 +장비 무결성 +검증 +엔드 이펙터의 물리적 변조를 탐지하거나 방지하는 기능을 +적용해, 케이스 개봉·보드 접근 시 알림 및 복구 절차 수행 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +엔드 이펙터 하드웨어 훼손 시 자동으로 안전모드로 +전환되어 오작동 방지 +- +기능 지속성 +확보 +엔드 이펙터 일부 손상에도 핵심 기능이 유지되도록 예비 +장비 마련과 같은 복구 절차 확보 +- +신호 위조 +장비 간 인증 +모든 신호 송수신 시 장치·사용자 상호 인증으로 +엔드이펙터 신뢰성확보 +- +키 관리 강화 +대칭/공개키 수명주기 및 관리 절차 수립으로 위조 신호 +방지 +암호화 모듈 +터미널 접근 +접근 통제 및 +인증 강화 +관리용 콘솔 접근 시 사용자 인증, 세션 제한 적용 +- +네트워크 +네트워크 +도청 +통신 암호화 +네트워크를 통해 송수신되는 API 모듈 데이터를 +암호화하여 도청으로부터 보호 +보안칩,보안 AP +오동작 및 +중단 유발 +장치 인증 +인증된 장치만 엔드 이펙터 제어 명령 송신 허용 +IoT 보안 게이트웨이 +입력 값 검증 +엔드 이펙터 제어 명령이 정상 범위 내에 있는지 검증하고 +오류 시 안전모드로 전환 +- +통신 암호화 +TLS/SSH 등으로 제어 명령 구간 암호화 +보안 AP +로봇 본체 보안 요구사항 및 보안 솔루션 + + +--- + + + +--- + +117 +01 +02 +03 +04 +05 +미 +들 +웨 +어 +시스템 +S/W +취약점 악용 +공급망 보안 +ROS 패키지 SBOM 관리 및 오픈소스 라이브러리 +최신화 +소스코드 진단 도구, +패치 관리 솔루션 +ROS 배포판 수명주기 기반 자동 패치 배포 메커니즘 +운영 +패치 관리솔루션 +업데이트 +기능 악용 +업데이트 +검증 +ROS 패키지 서명 기반 무결성 검증 및 설치 로그 생성 +패치 관리솔루션 +안전한 롤백 +패키지 업데이트 실패 시 자동 롤백 기능 제공 +패치 관리솔루션 +응용 +S/W +악성코드 +유입/감염 +악성코드 +검사 +ROS 노드 실행 파일 무결성 검증 및 악성코드 탐지 +산업용 EDR, 백신 +라이선스 +파일 변조로 +인한 무단 +소프트웨어 +실행 +무결성 검증 +상용 ROS 패키지 라이센스 파일 해시/서명 검증 +- +로그 추적성 +소프트웨어 설치 및 실행 관련 행위 로그 생성 +서버 접근 통제 +솔루션 +A +P +I +모 +듈 +네트워크 +오동작 및 +중단 유발 +패킷 검증 +API 요청 파라미터(속도, 경로) 유효성 검증 및 안전 범위 +제한 +산업용 IPS, 산업용 +방화벽, 산업용 +IDS, IoT 보안 +게이트웨이 +서비스 거부 +서비스 자원 +보호 +API 요청 및 동시 연결 수 제한 +산업용 IPS, 산업용 +보안 스위치 +네트워크 +도청 +통신 암호화 +HTTPS/TLS 기반 API 통신암호화로 개인정보 및 제어 +명령 보호 +보안 AP +응용 +S/W +접근 제어 +기능 악용 +인증 기반 +접근 통제 +API 키 기반 인증 및 JWT토큰 기반 세션 관리 +서버 접근통제 +솔루션 +권한 기반 +접근 통제 +사용자 역할별 API 접근 권한 분리 (일반 사용자/운영자/ +관리자) +서버 접근통제 +솔루션 +작업/동작 +설정 악용 +인증 기반 +접근 통제 +작업 설정 변경 시 관리자 권한 인증 강제 +서버 접근통제 +솔루션 +백업 관리 +작업 프로파일 변경 이력 로그 및 백업 관리 +백업 관리 시스템 +설정 데이터 +변조 +권한 기반 +접근 통제 +로봇 설정 데이터 변경 권한을 인증된 관리자로 제한 +서버 접근통제 +솔루션 +무결성 검증 +중요 설정 파라미터 변조 탐지를 위한 무결성 검증 +- +운 +영 +체 +제 +네트워크 +서비스 거부 +서비스 자원 +보호 +네트워크 스택 자원 모니터링 및 과부하 방지 +산업용 IPS, 산업용 +보안 스위치 +시스템 +S/W +부트로더 및 +초기 신뢰 +체계 훼손 +부트 설정 +보호 +부트로더 및 커널 서명 검증으로 무결성 보장 +TPM 내장보드 +부트 단계별 해시 검증을 통한 변조 탐지 +TPM 내장 보드 +권한 탈취 +최소권한 +원칙 +시스템 계정 권한 최소화 및 sudo 사용 제한 +서버 접근 통제 +솔루션 +커널 하드닝 +ASLR, SMEP/SMAP 등 커널 보안 기능 활성화 +- +업데이트 +기능 악용 +업데이트 +검증 +운영체제 패키지 서명 검증 및 무결성 확인 +패치 관리솔루션 +로그 위·변조 +시스템 업데이트 실패 시 자동 복구 기능 +패치 관리솔루션 +로그 위· +변조 +감사 로그 +보호 관리 +시스템 로그 변조 방지 및원격 로그 서버 전송 +- +로그 파일 접근 권한 제한 및 암호화 저장 +- +진단 기능 +악용 +진단 기능 +접근 통제 +디버그 인터페이스 접근 시 강화된 인증 요구 +- + + +--- + +118 +메 +인 +보 +드 +H/W +물리적 훼손 +장비 무결성 +검증 +메인 보드 변조 감지 센서 및 물리적 보호 케이스 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +하드웨어 손상 감지 시 로봇 즉시 안전 정지 +- +터미널 접근 +접근 통제 및 +인증 강화 +UART/JTAG 포트 접근 시 하드웨어 인증 요구 +- +물리포트 +보호 +디버그 포트 물리적 차단 또는 잠금 장치 적용 +포트락, 시건 장치 +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +플래시 메모리 및 EEPROM 데이터 암호화 저장 +TPM 내장보드, +보안칩 +바이너리 +심볼 제거 +펌웨어 리버스 엔지니어링방지를 위한 심볼 제거 +- +안 +전 +보 +드 +H/W +물리적 훼손 +장비 무결성 +검증 +안전 회로 변조 감지 및 이중화 구성 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +일부 안전 센서 손상 시에도 안전 기능 유지 +- +신호 위조 +장비 간 인증 +안전 센서와 안전보드 간 상호 인증 +- +외장 매체를 +통한 데이터 +주입/유출 +매채 제어 +USB 포트 화이트리스트 기반 접근 제어 +매체 제어솔루션, +보안 USB +물리포트 +보호 +USB 포트 물리적 차단 또는 비활성화 +포트락, 시건 장치 +인 +터 +페 +이 +스 +H/W +터미널 접근 +접근 통제 및 +인증 강화 +관리 포트 접근 시 다단계인증 적용 +- +물리포트 +보호 +불필요한 통신 포트 물리적 차단 +포트락, 시건 장치 +외장 매체를 +통한 데이터 +주입/유출 +매체 제어 +USB 장치 화이트리스트 및 자동 스캔 정책 +매체 제어솔루션, +보안 USB +구 +동 +부 +H/W +물리적 훼손 +장비 무결성 +검증 +구동부 물리적 변조 감지 및 보호 커버 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +구동부 이상 감지 시 즉시안전 정지 +- +신호 위조 +장비 간 인증 +제어기와 구동부 간 상호 인증 +- +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +드라이버 설정 데이터 암호화 저장 +TPM 내장보드, +보안칩 +부채널 공격 +부채널 공격 +저항 패턴 +적용 +구동부의 민감 연산이 전력·시간·EM 패턴으로 유출되지 +않도록 난수화 및 고정시간 연산을 적용 +보안칩 +전력·전자기 +차폐 +구동부 외부로 방출되는 전력·전자기 신호를 +최소화하도록 차폐 설계를 적용 +- +물리적 훼손 +장비 무결성 +검증 +센서 변조 감지 및 물리적 보호 하우징 +보안칩 +기능 지속성 +확보 +센서 이중화 구성 및 장애 시 대체 센서 활용 +- + + +--- + +119 +01 +02 +03 +04 +05 +센 +서 +H/W +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +센서 맵 데이터 및 개인정보 암호화 저장 +TPM 내장 보드, +보안칩 +신호 위조 +장비 간 인증 +제어기와 센서 간 상호 인증 +- +구성 +요소 +속성 +보안 위협 +보안 요구사항 +완화 대책 +보안 솔루션 +셀 +룰 +러 +라 +우 +터 +H/W +물리적 훼손 +장비 무결성 +검증 +안테나 물리적 보호 케이스 및 변조 감지 기능 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +백업 통신 채널(Wi-Fi, 이더넷) 및 자동 전환 기능 +제공 +- +터미널 접근 +접근 통제 및 +인증 강화 +UART 포트 접근 시 하드웨어 인증 및 암호화된 +부트로더 적용 +- +물리포트 보호 +UART 포트 물리적 차단 또는 케이스 내부 배치 +포트락, 시건 장치 +저장 장치 +정보 탈취 +및 조작 +디스크 암호화 +펌웨어 및 설정 파일 암호화 저장 +TPM 내장보드, +보안칩 +키 관리 강화 +VPN 인증서를 보안칩/TPM 안전 저장소에 보관 +보안칩, TPM 내장 +보드 +바이너리 심볼 +제거 +펌웨어 리버스 엔지니어링 방지를 위한 심볼 제거 +- +네트워크 +네트워크 +도청 +통신 암호화 +모든 응용 계층 통신에 TLS/VPN 암호화 적용 +보안칩, 보안 AP +메시지 +재생 공격 +세션 무결성 +검증 +메시지 시퀀스 번호, 타임스탬프, Nonce 기반 재생 +방지 +- +키·증명서 +탈취를 +통한 통신 +위조 +키 관리 강화 +정기적 키 교체 및 안전한 키 배포 메커니즘 +보안칩, TPM +내장보드 +인증자 보호 +VPN 인증서 접근 권한 최소화 및 즉시 폐기 정책 +서버 접근통제 +솔루션, IoT 보안 +게이트웨이 +시스템 +S/W +취약점 악용 +정기 보안 점검 +및 설정 강화 +펌웨어 취약점 정기 스캔 및 신속한 보안 패치 적용 +소스코드 진단 도구, +산업용 EDR +공급망 보안 +자동 펌웨어 업데이트 메커니즘 및 보안 패치 배포 +패치 관리 솔루션 +서비스용 로봇 온보드 보안 요구사항 및 보안 솔루션 +로봇 주변 장치에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +2) 로봇 주변 장치 + + +--- + +120 +응용 +S/W +접근 제어 +기능 악용 +인증 기반 +접근 통제 +강력한 Wi-Fi 패스워드 정책 및 WPA3 암호화 적용 +서버 접근통제 +솔루션 +정기 보안 +점검 및 설정 +강화 +WPS 기능 비활성화 및 불필요한 무선 프로토콜 차단 +- +계정 관리 +최초 설정 시 패스워드 변경 강제 및 정기적 변경 정책 +서버 접근통제 +솔루션 +설정 데이터 +변조 +권한 기반 +접근 통제 +네트워크 설정 변경 권한을 관리자로 제한 +서버 접근통제 +솔루션 +백업 관리 +네트워크 설정 변경 이력 로그 및 백업 관리 +백업 관리 시스템 +원격지원 +기능 악용 +인증 기반 +접근 통제 +원격 접속 시 키 기반 인증 및 다단계 인증 적용 +서버 접근통제 +솔루션 +세션 관리 +원격 세션 자동 종료 및 동시 접속 제어 +- +취약점 +악용 +정기 보안 +점검 및 설정 +강화 +웹 인터페이스 보안 스캔 및 취약점 패치 +소스코드 진단 도구, +산업용 EDR +입력값 검증 +웹 폼 입력값 유효성 검증 및 SQL 인젝션 방지 +- +도 +킹 +스 +테 +이 +션 +H/W +물리적 훼손 +장비 무결성 +검증 +충전 단자 보호 커버 및 케이블 보호 덕트 설치 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +충전 단자 이중화 구성 및예비 충전 포트 제공 +- +네트워크 +네트워크 +도청 +통신 암호화 +도킹 스테이션과 로봇 간 통신 암호화 적용 +보안 AP +메시지 재생 +공격 +세션 무결성 +검증 +도킹 인증 시 Nonce 및 타임스탬프 기반 재생 방지 +- +페 +이 +로 +드 +H/W +물리적 훼손 +장비 무결성 +검증 +강화된 잠금 장치 및 변조감지 센서 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +잠금장치 파손 감지 시 즉시 알림 및 로봇 정지 +- +신호 위조 +장비 간 인증 +센서와 제어 보드 간 인증 및 신호 암호화 +- +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +제어 보드 펌웨어 및 설정데이터 암호화 저장 +TPM 내장보드, +보안칩역공학 보호 +로봇 주변 장치 보안 요구사항 및 보안 솔루션 + + +--- + +121 +01 +02 +03 +04 +05 +구성 +요소 +속성 +보안 위협 +보안 요구사항 +완화 대책 +보안 솔루션 +F +M +S +네트워크 +네트워크 +도청 +통신 암호화 +FMS-로봇 간 모든 통신에 TLS/VPN 암호화 적용 +보안칩, 보안 AP +오동작 및 +중단 유발 +패킷 검증 +API 요청 파라미터(경로,작업) 유효성 검증 및 안전 +범위 제한 +산업용 IPS, 산업용 +방화벽 +서비스 거부 +서비스 자원 +보호 +API 요청 제한, 요청 큐 관리 및 부하 분산 +산업용 IPS, 산업용 +보안 스위치 +메시지 +재생 공격 +세션 무결성 +검증 +작업 할당 메시지에 Nonce, 시퀀스 번호 및 +타임스탬프 적용 +- +응용 +S/W +접근 제어 +기능 악용 +인증 기반 접근 +통제 +다단계 인증(MFA) 및 강력한 패스워드 정책 적용 API +키 기반 인증 및 JWT 토큰 관리 +서버 접근통제 +솔루션 +계정 관리 +기본 계정 비활성화 및 정기적인 계정 점검 +서버 접근통제 +솔루션 +권한 기반 접근 +통제 +사용자 역할별 API 접근 권한 분리 및 최소권한 원칙 +서버 접근통제 +솔루션 +취약점 악용 +정기 보안 점검 +및 설정 강화 +웹 애플리케이션 보안 스캔 및 취약점 패치 +소스코드 진단 도구 +공급망 보안 +FMS 소프트웨어 구성요소 SBOM 관리 및 최신화 +소스코드 진단 도구, +패치 관리 솔루션 +작업/동작 +설정 악용 +인증 기반 접근 +통제 +작업 알고리즘 설정 변경 시 관리자 권한 인증 +서버 접근통제 +솔루션 +무결성 검증 +작업 파라미터 변조 탐지를 위한 무결성 검증 +- +설정 데이터 +변조 +권한 기반 접근 +통제 +시스템 설정 변경 권한을 인증된 관리자로 제한 +서버 접근통제 +솔루션 +백업 관리 +설정 변경 이력 로그 및 백업 관리 +백업 관리 시스템 +데이터 +탈취/변조 +데이터 암호화 +데이터베이스 민감 정보 암호화 저장 +- +권한 기반 접근 +통제 +데이터베이스 접근 권한 최소화 및 감사 로그 생성 +DB 접근 제어 +시스템 +개인정보 보호 +개인정보 최소 수집 및 즉시 삭제 정책 적용 +데이터 완전 삭제 +솔루션 +디 +지 +털 +트 +윈 +네트워크 +네트워크 +도청 +통신 암호화 +실시간 데이터 스트림 TLS/DTLS 암호화 적용 +보안칩, 보안 AP +서비스 거부 +서비스 자원 +보호 +시뮬레이션 요청 제한 및 자원 사용량 모니터링 +산업용 IPS, 산업용 +보안 스위치 +응용 +S/W +접근 제어 +기능 악용 +인증 기반 접근 +통제 +시뮬레이션 접근 시 사용자 인증 및 세션 관리 +서버 접근통제 +솔루션 +권한 기반 접근 +통제 +시뮬레이션 조회/실행 권한 분리 및 역할 기반 접근 +제어 +- +서비스용 로봇관제 및 운영(On-Premise) 영역에서 발생 가능한 위협에 대한 보안요구사항은 다음과 +같다. +3) 로봇관제 및 운영(On-Premise) + + +--- + +122 +구성 +요소 +속성 +보안 위협 +보안 요구사항 +완화 대책 +보안 솔루션 +워 +크 +스 +테 +이 +션 +H/W +물리적 훼손 +장비 무결성 +검증 +워크스테이션 물리적 보호 케이스 및 변조 감지 기능 +적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +백업 워크스테이션 구성 및 자동 장애 조치 +- +터미널 접근 +접근 통제 및 +인증 강화 +스크린 세이버 패스워드 및 자동 잠금 기능 활성화 +- +물리적 접근 +통제 +관제실 출입 통제 및 CCTV 모니터링 +출입 통제시스템 +외장 +매체를 통한 +데이터 +주입/유출 +매체 제어 +USB 포트 화이트리스트 및 자동 스캔 정책 +매체제어 솔루션, +보안 USB +물리포트 보호 +불필요한 USB 포트 물리적 차단 또는 비활성화 +포트락, +시건 장치 +응용 +S/W +설정 데이터 +변조 +권한 기반 +접근 통제 +환경 설정 변경 권한을 인증된 관리자로 제한 +서버 접근통제 +솔루션 +로봇 운영 파라미터 변경 권한을 관리자로 제한 +서버 접근통제 +솔루션 +무결성 검증 +시뮬레이션 환경 파라미터무결성 검증 +- +백업 관리 +환경 설정 정기 백업 및 복구 검증 +백업 +관리 시스템 +파라미터 변경 이력 로그 및 백업 관리 +입력값 검증 +파라미터 값 범위 및 일관성 검증 +- +취약점 악용 +정기 보안 +점검 및 +설정 강화 +시뮬레이션 엔진 취약점 스캔 및 패치 관리 +소스코드 진단 도구 +공급망 보안 +시뮬레이션 라이브러리 SBOM 관리 및 최신화 +소스코드 진단 +도구, 패치 관리 +솔루션 +데이터 +탈취/변조 +데이터 +암호화 +시뮬레이션 모델 및 알고리즘 암호화 저장 +- +운영 데이터베이스 민감 정보 암호화 저장 +- +권한 기반 +접근 통제 +핵심 알고리즘 접근 권한 최소화 및 감사 추적 +DB 접근 제어 +시스템 +데이터베이스 접근 권한 최소화 및 감사 로그 생성 +DB 접근 제어 +시스템 +무결성 검증 +예측 모델 변조 방지를 위한 무결성 검증 +- +개인정보 +보호 +개인정보 포함 데이터 최소 수집 및 즉시 삭제 +데이터 완전 삭제 +솔루션 +서비스용 로봇관제 및 운영(On-Premise) 영역 보안 요구사항 및 보안 솔루션 +서비스용 로봇 제어 영역에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +4) 로봇 제어 + + +--- + +123 +01 +02 +03 +04 +05 +워 +크 +스 +테 +이 +션 +네트워크 +네트워크 +도청 +통신 암호화 +모든 네트워크 통신에 TLS/VPN 암호화 적용 +보안칩, 보안 AP +오동작 및 +중단 유발 +패킷 검증 +네트워크를 통한 입력 명령 유효성 검증 +산업용 IPS, +산업용 방화벽 +시스템 +S/W +취약점 악용 +정기 보안 점검 +및 설정 강화 +운영체제 취약점 정기 스캔 및 신속한 패치 적용 +소스코드 진단 도구 +보안 업데이트 +정책 +자동 보안 업데이트 및 패치 배포 메커니즘 +패치 관리솔루션 +권한 탈취 +최소권한 원칙 +사용자 계정 권한 최소화 및 관리자 권한 제한 +서버 접근통제 +솔루션 +커널 하드닝 +운영체제 보안 강화 설정 적용 +- +업데이트 +기능 악용 +업데이트 검증 +소프트웨어 업데이트 서명검증 +패치 관리솔루션 +안전한 롤백 +업데이트 실패 시 자동 복구 기능 +패치 관리솔루션 +응용 +S/W +접근 제어 +기능 악용 +인증 기반 접근 +통제 +다단계 인증 및 강력한 패스워드 정책 적용 +서버 접근통제 +솔루션 +세션 관리 +자동 세션 종료 및 동시 접속 제어 +- +취약점 악용 +정기 보안 점검 +및 설정 강화 +관제 소프트웨어 보안 스캔 및 취약점 패치 +소스코드 진단 도구 +입력값 검증 +관제 인터페이스 입력값 유효성 검증 +- +작업/동작 +설정 악용 +인증 기반 접근 +통제 +중요 작업 실행 시 추가 인증 요구 +서버 접근통제 +솔루션 +작업 알림 +중요 작업 실행 시 실시간알림 및 로그 생성 +산업용 방화벽 +원격지원 +기능 악용 +인증 기반 접근 +통제 +원격 접속 시 키 기반 인증 및 VPN 연결 강제 +서버 접근통제 +솔루션 +세션 관리 +원격 세션 모니터링 및 자동 종료 +- +악성코드 +유입/감염 +악성코드 검사 +백신 소프트웨어 및 EDR 솔루션 운영 +산업용 EDR, 백신 +컨 +트 +롤 +러 +H/W +물리적 훼손 +장비 무결성 +검증 +컨트롤러 물리적 보안 케이스 및 분실 방지 장치 +시건 장치,출입 +통제 시스템, 탬퍼 +방지 장치 +장비 간 인증 +컨트롤러 고유 식별자 기반 인증 +- +저장 장치 +정보 탈취 +및 조작 +디스크 암호화 +컨트롤러 펌웨어 및 페어링 정보 암호화 저장 +TPM 내장보드, +보안칩 +키 관리 강화 +페어링 키 안전 저장소 보관 및 정기 교체 +보안칩, TPM 내장 +보드 +네트워크 +네트워크 +도청 +통신 암호화 +무선 통신 AES 암호화 및 WPA3 적용 +보안 AP +메시지 +재생 공격 +세션 무결성 +검증 +명령 시퀀스 번호 및 타임스탬프 기반 재생 방지 +- +응용 +S/W +접근 제어 +기능 악용 +인증 기반 접근 +통제 +강력한 페어링 인증 및 상호 인증 메커니즘 +서버 접근통제 +솔루션 +등록된 컨트롤러만 연결 허용하는 화이트리스트 +- +취약점 악용 +정기 보안 점검 +및 설정 강화 +펌웨어 취약점 스캔 및 정기 업데이트 +소스코드 진단 도구 +입력값 검증 +컨트롤러 명령 입력값 범위 및 유효성 검증 +- + + +--- + +124 +태 +블 +릿 +H/W +물리적 훼손 +장비 무결성 +검증 +태블릿 원격 잠금 및 데이터 삭제 기능 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +인증 기반 +접근 통제 +생체 인증(지문, 얼굴) 및 강력한 화면 잠금 +서버 접근통제 +솔루션 +외장 매체를 +통한 데이터 +주입/유출 +매체 제어 +USB 연결 제한 및 화이트리스트 정책 +매체 제어솔루션, +보안 USB +네트워크 +네트워크 +도청 +통신 암호화 +Wi-Fi 통신 WPA3 암호화 및 VPN 적용 +보안 AP +오동작 및 +중단 유발 +패킷 검증 +앱 수신 명령 유효성 검증 +산업용 IPS, 산업용 +방화벽 +시스템 +S/W +취약점 악용 +정기 보안 +점검 및 설정 +강화 +운영체제 자동 업데이트 및 보안 패치 적용 +- +공급망 보안 +MDM을 통한 태블릿 보안정책 관리 +소스코드 진단 도구, +패치 관리 솔루션 +권한 탈취 +프로세스 +무결성 검증 +루팅/탈옥 탐지 및 차단 기능 +- +응용 +S/W +접근 제어 +기능 악용 +인증 기반 +접근 통제 +앱 접근 시 생체 인증 및 강력한 패스워드 +- +세션 관리 +앱 비활성 시 자동 잠금 및 세션 종료 +- +취약점 악용 +정기 보안 +점검 및 설정 +강화 +모바일 앱 보안 스캔 및 취약점 패치 +소스코드 진단 도구 +입력값 검증 +앱 입력값 유효성 검증 및 +보안 코딩 +소스코드 진단 도구 +원격지원 +기능 악용 +원격 접근 +관리 +원격 지원 기능 사용 시 사용자 승인 및 로그 기록 +서버 접근통제 +솔루션 +악성코드 +유입/감염 +악성코드 +검사 +원격 지원 기능 사용 시 사용자 승인 및 로그 기록 +산업용 EDR, 백신 +모바일 보안 솔루션 및 앱 검증 기능 공식 앱스토어 +앱만 설치 허용 +- +구성 +요소 +속성 +보안 위협 +보안 요구사항 +완화 대책 +보안 솔루션 +네트워크 +네트워크 +도청 +통신 암호화 +모든 API 통신에 HTTPS/TLS 1.3 암호화 강제 적용 +보안칩, 보안 AP +오동작 및 +중단 유발 +패킷 검증 +API 파라미터 범위 및 유효성 검증 +산업용 IPS, +산업용 방화벽 +서비스 거부 +서비스 자원 +보호 +API 요청 제한 및 요청 큐 관리 +산업용 IPS, +산업용 보안 스위치 +[표 423] 서비스용 로봇 제어 영역 보안 요구사항 및 보안 솔루션 +서비스용 로봇관제 및 운영(Cloud)에서 발생 가능한 위협에 대한 보안요구사항은 다음과 같다. +5) 로봇관제 및 운영(Cloud) + + +--- + +125 +01 +02 +03 +04 +05 +응 +용 +프 +로 +그 +램 +인 +터 +페 +이 +스 +응용 +S/W +접근 제어 +기능 악용 +권한 기반 접근 +통제 +API 키 접근 권한 최소화 및 모니터링 +서버 접근통제 +솔루션 +인증 기반 접근 +통제 +OAuth 2.0/JWT 기반 토큰인증 및 적절한 만료 +시간 설정 +서버 접근통제 +솔루션 +세션 관리 +토큰 갱신 메커니즘 및 블랙리스트 관리 +- +취약점 악용 +정기 보안 점검 +및 설정 강화 +API 보안 스캔 및 취약점 패치 +소스코드 진단 도구 +입력값 검증 +파라미터 및 화이트리스트 검증(sanitization) +산업용 IPS, 산업용 +방화벽 +설정 데이터 +변조 +권한 기반 접근 +통제 +설정 변경 권한을 관리자로 제한 +서버 접근통제 +솔루션 +백업 관리 +시스템 +설정 변경 이력 추적 및 백업 관리 +백업 관리 시스템 +데이터 +탈취/변조 +데이터 암호화 +민감 데이터 암호화 저장 및 전송 +- +권한 기반 접근 +통제 +데이터 접근 권한 최소화 및 감사 로그 +DB 접근 제어 +시스템 +개인정보 보호 +개인정보 최소 수집 및 즉시 삭제 정책 +데이터 완전 삭제 +솔루션 +메 +시 +징 +서 +비 +스 +네트워크 +네트워크 +도청 +통신 암호화 +MQTT over TLS(MQTTS) 암호화 강제 적용 +보안칩, 보안 AP +메시지 재생 +공격 +세션 무결성 +검증 +메시지 시퀀스 번호 및 타임스탬프 기반 재생 방지 +- +서비스 거부 +서비스 자원 +보호 +클라이언트별 메시지 요청 및 큐 크기 제한 +산업용 IPS, 산업용 +보안 스위치 +응용 +S/W +접근 제어 +기능 악용 +인증 기반 접근 +통제 +MQTT 클라이언트 인증서 기반 인증 및 강력한 +패스워드 +서버 접근통제 +솔루션 +권한 기반 접근 +통제 +토픽별 구독/발행 권한 설정 및 ACL 적용 +서버 접근통제 +솔루션 +설정 데이터 +변조 +입력값 검증 +MQTT 메시지 페이로드 유효성 검증 +- +무결성 검증 +메시지 무결성 검증 및 서명 적용 +산업용 IDS, 산업용 +IPS +업 +데 +이 +트 +네트워크 +네트워크 +도청 +통신 암호화 +펌웨어 다운로드 HTTPS 암호화 강제 적용 +보안칩, 보안 AP +응용 +S/W +업데이트 +기능 악용 +업데이트 검증 +업데이트 서버 인증서 고정(Certificate Pinning) +패치 관리솔루션 +펌웨어 디지털 서명 검증 강제 +- +보안 업데이트 +정책 +신뢰할 수 있는 업데이트 서버만 허용 +패치 관리솔루션 +무결성 검증 +펌웨어 해시 검증 및 체크섬 확인 +- +접근 제어 +기능 악용 +인증 기반 접근 +통제 +OTA 관리자 인증 강화 및 다단계 인증 +서버 접근통제 +솔루션 +권한 기반 접근 +통제 +업데이트 권한을 인증된 관리자로 제한 +서버 접근통제 +솔루션 +취약점 악용 +정기 보안 점검 +및 설정 강화 +OTA 에이전트 취약점 스캔 및 패치 +소스코드 진단 도구 +입력값 검증 +업데이트 파일 경로 및 내용 유효성 검증 +- +설정 데이터 +변조 +안전한 롤백 +자동 롤백 기능 강제 활성화 +패치 관리솔루션 +무결성 검증 +업데이트 정책 무결성 검증 및 보호 +- + + +--- + + + +--- + +127 +01 +02 +03 +04 +05 +구성 +요소 +속성 +보안 위협 +보안 요구사항 +완화 대책 +보안 솔루션 +미 +들 +웨 +어 +네트워크 +네트워크 +도청 +통신 암호화 +ROS2/DDS 토픽 통신에 TLS/DTLS 암호화 +적용으로 제어 명령 및 개인정보 보호 +보안칩, 보안 AP +메시지 +재생 공격 +세션 무결성 +검증 +메시지 시퀀스, 타임스탬프, Nonce 기반 검증으로 +토픽 메시지 재전송 방지 +- +패킷 검증 +ROS2/DDS 메시지 프레임 유효성 검증 및 비정상 +명령 차단 +산업용 IPS, 산업용 +방화벽 +라우팅 기능 +남용 +인증 기반 +라우팅 +인증된 노드만 DDS 라우팅 및 포워딩 설정 변경 허용 +산업용 방화벽 +라우팅 내역 +관리 +미들웨어 노드 연결 및 라우팅 변경 이력 로그 기록 +- +시스템 +S/W +취약점 +악용 +정기 보안점검 +및 설정 강화 +ROS 패키지 및 DDS 미들웨어 취약점 스캔 및 신속한 +패치 적용 +소스코드 진단 +도구, 산업용 EDR, +보안인증 컨설팅 +공급망 보안 +ROS 패키지 SBOM 관리 및 오픈소스 라이브러리 +최신화 +소스코드 진단 도구, +패치 관리 솔루션 +ROS 배포판 수명주기 기반 자동 패치 배포 메커니즘 +운영 +패치 관리솔루션 +업데이트 +기능 악용 +업데이트 검증 +ROS 패키지 서명 기반 무결성 검증 및 설치 로그 생성 +패치 관리 +솔루션 +안전한 롤백 +패키지 업데이트 실패 시 자동 롤백 기능 제공 +패치 관리 +솔루션 +응용 +S/W +악성코드 +유입 및 +감염 +악성코드 검사 +ROS 노드 실행 파일 무결성 검증 및 악성코드 탐지 +산업용 EDR, 백신 +라이센스 +파일 변조로 +인한 무단 +소프트웨어 +실행 +무결성 검증 +상용 ROS 패키지 라이센스 파일 해시/서명 검증 +- +로그 추적성 +소프트웨어 설치 및 실행 관련 행위 로그 생성 +서버 접근 통제 +솔루션 +A +P +I +모 +듈 +네트워크 +오동작 및 +중단 유발 +패킷 검증 +API 요청 파라미터(속도, 경로) 유효성 검증 및 안전 +범위 제한 +산업용 IPS, 산업용 +방화벽 +서비스 거부 +서비스 자원 +보호 +API 요청 및 동시 연결 수 제한 +산업용 IPS, 산업용 +보안 스위치 +네트워크 +도청 +통신 암호화 +HTTPS/TLS 기반 API 통신암호화로 개인정보 및 +제어 명령 보호 +보안 AP +응용 +S/W +접근 제어 +기능 악용 +인증 기반 접근 +통제 +API 키 기반 인증 및 JWT토큰 기반 세션 관리 +서버 접근통제 +솔루션 +권한 기반 접근 +통제 +사용자 역할별 API 접근 권한 분리 (일반 사용자/ +운영자 관리자) +서버 접근통제 +솔루션 +작업/동작 +설정 악용 +인증 기반 접근 +통제 +작업 설정 변경 시 관리자권한 인증 강제 +서버 접근통제 +솔루션 +백업 관리 +작업 프로파일 변경 이력 로그 및 백업 관리 +백업 관리 시스템 +의료용 로봇 온보드에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +1) 로봇 온보드 + + +--- + +128 +설정 데이터 +변조 +권한 기반 +접근 통제 +로봇 설정 데이터 변경 권한을 인증된 관리자로 제한 +서버 접근통제 +솔루션 +무결성 검증 +중요 설정 파라미터 변조 탐지를 위한 무결성 검증 +- +운 +영 +체 +제 +네트워크 +서비스 거부 +서비스 자원 +보호 +네트워크 스택 자원 모니터링 및 과부하 방지 +산업용 IPS, 산업용 +보안 스위치 +시스템 +S/W +부트로더 +및 초기 +신뢰체계 +훼손 +부트 설정 +보호 +부트로더 및 커널 서명 검증으로 무결성 보장 +TPM 내장보드 +부트 단계별 해시 검증을 통한 변조 탐지 +TPM 내장 보드 +권한 탈취 +최소권한 +원칙 +시스템 계정 권한 최소화 및 sudo 사용 제한 +서버 접근통제 +솔루션 +커널 하드닝 +ASLR, SMEP/SMAP 등 커널 보안 기능 활성화 +- +업데이트 +기능 악용 +업데이트 +검증 +운영체제 패키지 서명 검증 및 무결성 확인 +패치 관리솔루션 +안전한 롤백 +시스템 업데이트 실패 시 자동 복구 기능 +패치 관리솔루션 +로그 위· +변조 +감사 로그 +보호 관리 +시스템 로그 변조 방지 및원격 로그 서버 전송 +- +로그 파일 접근 권한 제한 및 암호화 저장 +- +진단 기능 +악용 +진단 기능 +접근 통제 +디버그 인터페이스 접근 시 강화된 인증 요구 +- +메 +인 +보 +드 +H/W +물리적 훼손 +장비 무결성 +검증 +메인 보드 변조 감지 센서 및 물리적 보호 케이스 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +하드웨어 손상 감지 시 로봇 즉시 안전 정지 +- +터미널 접근 +접근 통제 및 +인증 강화 +UART/JTAG 포트 접근 시 하드웨어 인증 요구 +- +물리포트 +보호 +디버그 포트 물리적 차단 또는 잠금 장치 적용 +포트락, 시건 장치 +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +플래시 메모리 및 EEPROM 데이터 암호화 저장 +TPM 내장보드, +보안칩 +바이너리 +심볼제거 +펌웨어 리버스 엔지니어링방지를 위한 심볼 제거 +- +안 +전 +보 +드 +H/W +물리적 훼손 +장비 무결성 +검증 +안전 회로 변조 감지 및 이중화 구성 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +일부 안전 센서 손상 시에도 안전 기능 유지 +- +신호 위조 +장비 간 +인증 +안전 센서와 안전보드 간 상호 인증 +- +외장 매체를 +통한 데이터 +주입/유출 +매체 제어 +USB 포트 화이트리스트 기반 접근 제어 +매체 제어솔루션, +보안 USB +물리포트 +보호 +USB 포트 물리적 차단 또는 비활성화 +포트락, 시건 장치 +인 +터 +페 +이 +스 +H/W +터미널 접근 +접근 통제 및 +인증 강화 +관리 포트 접근 시 다단계인증 적용 +- +물리포트 +보호 +불필요한 통신 포트 물리적 차단 +포트락, 시건 장치 +외장 매체를 +통한 데이터 +주입/유출 +매체 제어 +USB 장치 화이트리스트 및 자동 스캔 정책 +매체 제어솔루션, +보안 USB + + +--- + +129 +01 +02 +03 +04 +05 +구성 +요소 +속성 +보안 위협 +보안 요구사항 +완화 대책 +보안 솔루션 +센 +서 +H/W +물리적 훼손 +장비 무결성 +검증 +센서 변조 감지 및 물리적보호 하우징 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +센서 이중화 구성 및 장애 시 대체 센서 활용 +- +신호 위조 +장비 간 인증 +센서와 서보 드라이브 간 상호 인증 +- +서 +보 +드 +라 +이 +브 +H/W +물리적 훼손 +장비 무결성 +검증 +장비 내부의 서보 드라이브 물리적 변조를 탐지하거나 +방지하는 기능을 적용해, 케이스 개봉·보드 접근 시 +알림 및 복구 절차 수행 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 전환 +(Fail-Safe) +서보 드라이브 하드웨어 훼손 시 자동으로 안전모드로 +전환되어 오작동 방지 +- +기능 지속성 +확보 +서보 드라이브 일부 손상에도 핵심 기능이 유지되도록 +예비 장비 마련과 같은 및 복구 절차 확보 +- +신호 위조 +키 관리 강화 +대칭/공개키 수명주기 및 관리 절차 수립으로 서보 +드라이브 위조 신호 방지 +암호화 모듈 +저장 장치 +정보 탈취 +및 조작 +바이너리 +심볼제거 +탈취된 서보 드라이브 바이너리의 역공학을 어렵게 +하기 위하여 바이너리의 심볼을 제거 +- +디스크 암호화 +저장 장치 전체에 암호화를 적용해 물리적 탈취 시 +데이터 노출 방지 +TPM 내장보드, +보안칩 +부채널 공격 +부채널 공격 +저항 패턴 적용 +서보 드라이브의 민감 연산이 전력·시간·EM 패턴으로 +유출되지 않도록 난수화 및 고정시간 연산을 적용 +보안칩 +전력·전자기 +차폐 +서보 드라이브 외부로 방출되는 전력·전자기 신호를 +최소화하도록 차폐 설계를 적용 +- +구 +동 +부 +H/W +물리적 훼손 +장비 무결성 +검증 +구동부 물리적 변조 감지 및 보호 커버 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +안전 상태 +전환(Fail- +Safe) +구동부 이상 감지 시 즉시 안전 정지 +- +신호 위조 +장비 간 인증 +제어기와 구동부 간 상호 인증 +- +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +드라이버 설정 데이터 암호화 저장 +TPM 내장보드, +보안칩 +센 +서 +H/W +물리적 훼손 +장비 무결성 +검증 +센서 변조 감지 및 물리적보호 하우징 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +센서 이중화 구성 및 장애 시 대체 센서 활용 +- +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +센서 맵 데이터 및 개인정보 암호화 저장 +TPM 내장보드, +보안칩 +의료용 로봇 온보드 보안 요구사항 및 보안 솔루션 +수술 로봇 구동부에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +2) 수술 로봇 구동부 + + +--- + +130 +구성 +요소 +속성 +보안 위협 +보안 +요구사항 +완화 대책 +보안 솔루션 +인 +터 +페 +이 +스 +H/W +물리적 훼손 +장비 무결성 +검증 +인터페이스 포트의 변조 여부를 감지하는 포트 상태 +모니터링 및 물리적 보호 커버 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +주요 통신포트는 대체 포트로 장애 시 자동 전환 수행 +- +터미널 접근 +접근 통제 및 +인증 강화 +관리 포트 접근 시 다단계인증 적용 +- +물리포트 +보호 +불필요한 통신 포트 물리적 차단 +포트락, +시건 장치 +외장 매체를 +통한 데이터 +주입/유출 +매체 제어 +USB 장치 화이트리스트 및 자동 스캔 정책 +매체제어 솔루션, +보안 USB +운 +영 +체 +제 +시스템 +S/W +취약점 악용 +정기 +보안점검 및 +설정 강화 +타워 운영체제 구성요소에 대한 취약점 스캔과 의료기기 +운영 일정에 맞춘 주기적 보안 설정 점검 +소스코드 진단 도구 +공급망 보안 +수술 타워 내 영상·제어·연동 모듈의 SBOM 관리 및 +오픈소스 라이브러리 최신화 +소스코드 진단 도구, +패치 관리 솔루션 +실시간 제어 영향 최소화를 위해 승인된 패치만 수술 +비사용 시간대에 안전 배포 메커니즘 운영 +패치 관리솔루션 +권한 탈취 +최소권한 +원칙 +시스템 계정 권한 최소화 및 sudo 사용 제한 +서버 접근 통제 +솔루션 +커널 하드닝 +ASLR, SMEP/SMAP 등 커널 보안 기능 활성화 +- +부트로더 +및 초기 +신뢰체계 +훼손 +부트 설정 +보호 +부트로더 및 커널 서명 검증으로 무결성 보장 +TPM 내장 보드 +부트 단계별 해시 검증을 통한 변조 탐지 +TPM 내장 보드 +업데이트 +기능 악용 +업데이트 +검증 +운영체제 패키지 서명 검증 및 무결성 확인 +패치 관리솔루션 +안전한 롤백 +시스템 업데이트 실패 시 자동 복구 기능 +패치 관리솔루션 +로 +봇 +팔 +H/W +물리적 훼손 +장비 무결성 +검증 +관절·브레이크·링크 변형 감지를 위한 토크/위치 이상 +모니터링 및 변형 시 검증 +시건 장치,출입 통제 +시스템, 탬퍼 방지 장치 +기능 지속성 +확보 +조인트 엔코더 예비 장비 마련, 이상 시 안전 정지 유지 +수행 +- +신호 위조 +장비 간 인증 +로봇 팔과 서보 드라이브 간 상호 인증 +- +수 +술 +도 +구 +H/W +물리적 훼손 +장비 무결성 +검증 +도구 장착부 변위·파손 감지를 위한 장착 상태 및 기구 +하중 모니터링 및 변조 감지 +시건 장치,출입 통제 +시스템, 탬퍼 방지 장치 +기능 지속성 +확보 +도구 식별 센서·사용횟수 카운터 이중 확인으로 오작동 +방지 +- +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +도구 사용이력·내시경 캘리브레이션 데이터 등 +저장데이터의 암호화 +TPM 내장보드, +보안칩 +신호 위조 +장비 간 인증 +수술 도구와 로봇 팔 간 상호 인증 +- +수술 로봇 구동부 보안 요구사항 및 보안 솔루션 +수술 타워에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +3) 수술 타워 + + +--- + +131 +01 +02 +03 +04 +05 +로그 위· +변조 +감사 로그 +보호 관리 +시스템 로그 변조 방지 및 원격 로그 서버 전송 +- +로그 파일 접근 권한 제한 및 암호화 저장 +- +진단 기능 +악용 +진단 기능 +접근 통제 +디버그 인터페이스 접근 시 강화된 인증 요구 +- +메 +인 +보 +드 +H/W +물리적 훼손 +장비 무결성 +검증 +메인 보드 변조 감지 센서 및 물리적 보호 케이스 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +하드웨어 손상 감지 시 로봇 즉시 안전 정지 +- +터미널 접근 +접근 통제 및 +인증 강화 +UART/JTAG 포트 접근 시 하드웨어 인증 요구 +- +물리포트 +보호 +디버그 포트 물리적 차단 또는 잠금 장치 적용 +포트락, 시건 장치 +저장 장치 +정보 탈취 및 +조작 +디스크 +암호화 +플래시 메모리 및 EEPROM 데이터 암호화 저장 +TPM 내장보드, +보안칩 +바이너리 +심볼 제거 +펌웨어 리버스 엔지니어링방지를 위한 심볼 제거 +- +연 +동 +모 +듈 +네트워크 +네트워크 +도청 +통신 암호화 +HTTPS/TLS 기반 API 통신암호화로 개인정보 및 제어 +명령 보호 +보안 AP +메시지 +재생 공격 +세션 무결성 +검증 +수술 영상·상태정보 교환 시 세션 ID·Nonce·타임스탬프 +기반 재전송 방지 +- +키·증명서 +탈취를 통한 +통신 위조 +명령 구조 및 데이터 패킷유효성 검증 및 적절한 처리 +산업용 IPS, 산업용 +방화벽 +키·증명서 +탈취를 통한 +통신 위조 +키 관리 강화 +정기적 키 교체 및 안전한 키 배포 메커니즘 +보안칩, TPM 내장 +보드 +인증자 보호 +연동용 API·DICOM 노드 인증서의 정기 교체 및 안전한 +배포 관리 정책 +서버 접근통제 +솔루션, IoT 보안 +게이트웨이 +응용 S/W +접근 제어 +기능 악용 +인증 기반 +접근 통제 +API 키 기반 인증 및 JWT 토큰 기반 세션 관리 +서버 접근통제 +솔루션 +권한 기반 +접근 통제 +사용자 역할별 API 접근 권한 분리 (일반 사용자/운영자/ +관리자) +서버 접근통제 +솔루션 +취약점 악용 +정기 보안 +점검 및 설정 +강화 +타워 연동 서비스에 대한 취약점 점검과 구성 검증 수행 +소스코드 진단 도구 +공급망 보안 +연동 모듈의 라이브러리·게이트웨이 구성요소 SBOM 관리 +소스코드 진단 도구, +패치 관리 솔루션 +승인된 연동 모듈 패치를 수명주기 기반으로 관리 및 수술 +비가동 시간대에만 적용 +패치 관리솔루션 +데이터 +탈취/변조 +데이터 +암호화 +데이터베이스 민감 정보 암호화 저장 +- +권한 기반 +접근 통제 +데이터베이스 접근 권한 최소화 및 감사 로그 생성 +DB 접근 제어 +시스템 +개인정보 +보호 +개인정보 최소 수집 및 즉시 삭제 정책 적용 +데이터 완전 삭제 +솔루션 +원격지원 +기능 악용 +인증 기반 +접근 통제 +원격 지원 기능 사용 시 사용자 승인 및 로그 기록 +서버 접근통제 +솔루션, 보안 AP +업데이트 +기능 악용 +업데이트 +검증 +운영체제 패키지 서명 검증 및 무결성 확인 +패치 관리솔루션 +안전한 롤백 +시스템 업데이트 실패 시 자동 복구 기능 +패치 관리솔루션 +수술 타워 보안 요구사항 및 보안 솔루션 + + +--- + +132 +수술 콘솔에서 발생 가능한 위협에 대한 보안 요구사항은 다음과 같다. +4) 수술 콘솔 +구성 +요소 +속성 +보안 위협 +보안 +요구사항 +완화 대책 +보안 솔루션 +제 +어 +보 +드 +H/W +물리적 훼손 +장비 무결성 +검증 +제어보드·케이블·입력회로 변조 여부 감지 및 물리적 보호 +커버 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +입력 신호 경로 장애 시 대체 기기 활용 +- +터미널 접근 +접근 통제 및 +인증 강화 +관리 포트 접근 시 다단계 인증 적용 +- +물리포트 +보호 +불필요한 통신 포트 물리적 차단 +포트락, 시건 장치 +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +사용자 설정·운영 로그 등 보드 저장 정보는 암호화 저장 +TPM 내장보드, +보안칩 +H +M +I +H/W +물리적 훼손 +장비 무결성 +검증 +통신 데이터 변조 감지 및물리적 보호 커버 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +관련 신호 경로 장애 시 대체 기기 활용 +- +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +HMI 저장 항목 암호화 저장 +TPM 내장보드, +보안칩 +터미널 접근 +접근 통제 및 +인증 강화 +HMI 내부 유지보수 포트 접근 시 인증 절차 적용 +- +물리포트 +보호 +불필요한 통신 포트 물리적 차단 +포트락, 시건 장치 +컨 +트 +롤 +러 +H/W +물리적 훼손 +장비 무결성 +검증 +조작 데이터 변조 감지 및 물리적 보호 적용 +시건 장치,출입 통제 +시스템, 탬퍼 방지 +장치 +기능 지속성 +확보 +입력 장애 시 대체 컨트롤러 활용 +- +저장 장치 +정보 탈취 +및 조작 +디스크 +암호화 +컨트롤러 데이터 및 개인정보 암호화 저장 +TPM 내장보드, +보안칩 +터미널 접근 +접근 통제 및 +인증 강화 +관리 포트 접근 시 다단계인증 적용 +- +물리포트 +보호 +불필요한 통신 포트 물리적 차단 +포트락, 시건 장치 +수술 콘솔 보안 요구사항 및 보안 솔루션 + + +--- + + + +--- + + + +--- + + + +--- + +136 +부록 +05 +5.1 +로봇 위협과 MITRE의 보안프레임워크 모델(EMB3D) 매핑표 +하드웨어 보안 위협 +보안 위협 +공격기법 +관련기법 매핑(EMB3D) +물리적 대상 훼손 +영역 내 물리적으로 접근하여 로봇 및 장비, 보호영역 훼손 +• TID-105, 110, 118 +신호 위조 +영역 내 물리적으로 접근하여 로봇 및 장비에 대한 조회 및 악성 +신호 전송 +• TID-106, 107, 114 +터미널 접근 +영역 내 물리적으로 접근하여 키보드기반 터미널 접근하여 +운영체제에 접근 +• TID-116, 119 +부채널 공격 +영역에서 측정 가능한 전력·전자기·시간 정보 등을 분석하여 로봇 +내부의 비밀 데이터나 연산 값을 간접적으로 유출 +• TID-101, 102, 103 +외장 매체를 통한 +데이터 주입/유출 +영역에서 외부 미디어(USB 등)를 통해 악성 프로그램이나 +설정파일을 주입하거나 중요 데이터 등을 유출 +• TID-111, 113, 115 +저장 장치 정보 탈취 +및 조작 +영역 내 물리적으로 접근하여 펌웨어 덤프 또는 저장 장치 탈취를 +통해 중요 데이터 등을 유출하거나 장치 내 데이터를 임의로 변경 +• TID-108, 109, 115 +네트워크 보안 위협 +공통 보안 위협 +공격기법 +관련기법 매핑(EMB3D) +오동작 및 중단 유발 +영역 네트워크에 접근하여 직접 제어 명령을 송신해 로봇 오동작 +유발 +• TID-401, 406, 411 +서비스 거부 +영역 네트워크에 접근하여 취약한 로봇 시스템으로 조작된 패킷을 +전달하여 서비스 거부 유발 +• TID-404, 405 +메시지 재생 공격 +관제용 단말, 메시지 브로커, 라우터로부터 패킷을 수집해 인증 +우회 및 악의적인 명령 수행 +• TID-406, 407 +네트워크 도청 +영역 네트워크에 접근하여 암호화되지 않은 통신을 도청하여 +민감한 데이터 수집 +• TID-408, 410, 411 +라우팅 기능 남용 +로봇 내 또는 인프라에 설치된 라우터를 비인가 라우팅이나 정책 +우회 경로로 침해 +• TID-412 +키·증명서 탈취로 +인한통신 위조 +제어 및 관리 영역에서 암호키 및 인증서 탈취를 통해 패키지 서명 +및 TLS 통신을 위조함으로써 신뢰 체계를 무력화 +• TID-408 + + +--- + +137 +01 +02 +03 +04 +05 +시스템 소프트웨어 보안 위협 +공통 보안 위협 +공격기법 +관련기법 매핑(EMB3D) +취약점 악용 +시스템 내 취약한 부분이나 알려진 취약점을 스캔·익스플로잇하여 +권한 획득 및 악성코드 전파 +• TID-203, 204, 210, +221 +부트로더 및 초기 +신뢰체계 훼손 +초기 부팅 단계(부트로더·시큐어 부팅·신뢰 루트)를 조작해 +시스템 전체를 악성 상태로 시작 +• TID-201, 214, 220 +업데이트 기능 악용 +펌웨어 및 소프트웨어의 업데이트와 패치 설치기능에 대한 침해 +• TID-113, 210, 211, +212, 213, 215, 216, +217 +권한 탈취 +커널 취약점·드라이버·운영체제 권한 모델 등을 악용해 관리자 +권한을 획득 +• TID-203, 204, 205, +218, 219 +보호기능 우회 +보호기능을 우회하여 ROP, 메모리 변조, 프로세스 탈취 등을 +수행 +• TID-206, 223 +서비스 사용 침해 +운영체제 네트워크 스택, 시스템 서비스구성 오류 등 내부 자원의 +잘못된 설정을 통해 네트워크 및 시스템 기능의 사용 침해 +• TID-202, 205, 222 +로그 침해 +이벤트/감사 로그에 대해 침해 +• TID-225, 226 +진단 기능 악용 +시스템에 남아 있는 진단 포트·디버깅 모드·테스트 기능을 악용해 +인증을 우회하거나 권한을 획득 +• TID-224 +응용 소프트웨어 보안 위협 +공통 보안 위협 +공격기법 +관련기법 매핑(EMB3D) +취약점 악용 +알려진 취약점을 스캔·익스플로잇하여 권한 획득 및 악성코드 +전파 +• TID-306, 319, 320, +321, 322, 323, 324, +325, 326, 327, 330 +작업/동작 설정 악용 +로봇 동작에 대한 설정을 변경하여 안전 설정 범위를 벗어나는 등 +공격자의 의도대로 동작을 유도 +• TID-305, 309, 326 +접근 제어 기능 악용 +계정, 인증, 세션 등 접근 관리 요소를 탈취, 우회하여 비인가 +접근에 활용 +• TID-310, 311, 312, +313, 314, 315, 317, +328, 329 +설정 데이터 변조 +설정 데이터(운영/설정 및 파라미터/네트워크 등)의 값을 변경· +위조하여 시스템 동작을 왜곡 +• TID-303, 320, 323, +324, 326 +데이터 탈취/변조 +내부 DB에 저장되거나 전송되는 데이터·파일을 비인가 열람, +유출, 변경, 삭제 수행 +• TID-317, 318, 320, +330 +상태 조회/설정 변조 +로봇의 CPU, Memory, Disk, Time 등 상태 조회/설정을 +조작해 로봇 운영 영향 +• TID-303, 310 +업데이트 기능 악용 +업데이트 배포, 검증, 설치 절차를 조작하거나 우회하여 보안성을 +약화 +• TID-301, 302, 303, +316 +백업/복원 악용 +백업 및 복원 절차를 조작하여 데이터 유출, 롤백(구버전 강제)를 +유발 +• TID-301, 302, 308, +309 + + +--- + +138 +로그 위·변조 +이벤트/감사 로그를 삭제·변조·위조해 추적성 훼손 +• TID-308 +원격지원 기능 악용 +원격지원 기능의 약한 인증 또는 설정 오류를 이용해 원격 명령· +설정을 주입하고 유지보수 로그를 은닉 +• TID-310, 311, 316 +악성코드 유입/감염 +악성코드를 감염시켜 프로세스 비정상종료 또는 추가동작 수행 +• TID-301, 302, 304, +308, 309 +라이센스 인증 위조 +라이센스 서버 계정·키를 탈취하거나 서버 가용성을 공격하여 +시뮬레이션·개발 도구의 정품검증을 우회하거나 기능을 차단 +• TID-316, 317, 318 +라이센스 파일 변조로 +인한 무단 소프트웨어 +실행 +라이센스 서버에 접근해 라이센스 파일을 변조하거나 위조 +라이센스를 발급해 시뮬레이션/개발 도구를 침해 +• TID-304, 308, 323 +로봇 위협과 MITRE EMB3D 매핑표 + + +--- + +139 +01 +02 +03 +04 +05 + +### 5.2 보안 취약점 점검 체크리스트와 글로벌 규제 매핑 표 + +번호 +체크리스트 항목 +규제 +표준 +가이드라인 +SSDF 점검 체크리스트 +SSDF-01 +소프트웨어 개발 보안 +요구사항 정의 +IEC 62443-4-1 +SM-1, SM-3, SM- +5, SM-12, SM-13, +SR-3, SR-4 +NIST SP 800-218 PO.1 +ISO 22166-1 4.6, +4.8, 5.1, 7.4절 +SSDF-02 +보안 역할 및 책임 관리 +NIS2 제20조 +IEC 62443-4-1 +SM-2, SM-4 +NIST SP 800-218 PO.2 +SSDF-03 +보안 개발 툴체인 관리 +NIST SP 800-218 PO.3 +SSDF-04 +보안 점검 기준 정의 및 데이터 +관리 +NIST SP 800-218 PO.4 +SSDF-05 +개발 환경 보호 +IEC 62443-4-1 +SM-7 +NIST SP 800-218 PO.5 +SSDF-06 +코드 무단 접근 및 변조 방지 +NIST SP 800-218 PS.1 +SSDF-07 +소프트웨어 배포 무결성 검증 +제공 +IEC 62443-4-1 +SM-6 +NIST SP 800-218 PS.2 +SSDF-08 +소프트웨어 배포 보관 및 보호 +NIST SP 800-218 PS.3 +SSDF-09 +보안 설계 및 위험 완화 체계 +수립 +CRA Part 1.1 +ISO 22166-1 5.1절 +NIST SP 800-218 +PW.1 +IEC 62443-4-1 +SD-1, SR-2 +SSDF-10 +보안 설계 검토 수행 +IEC 62443-4-1 +SD-3, SD-4, SR-5, +SVV-1 +NIST SP 800-218 +PW.2 +SSDF-11 +검증된 라이브러리 재사용 +NIST SP 800-218 +PW.4 +SSDF-12 +안전한 코딩 가이드 준수 +IEC 62443-4-1 +SI-2 +NIST SP 800-218 +PW.5 +SSDF-13 +컴파일러 및 빌드 환경 보안 +구성 +NIST SP 800-218 +PW.6 +SSDF-14 +코드 검토 및 분석 +NIST SP 800-218 +PW.7 +SSDF-15 +실행 코드 테스트 +RED(d,e,f) +GEC-6 +IEC 62443-4-1 +SVV-2, SVV-3, +SVV-4 +NIST SP 800-218 +PW.8 +CRA Part 2.3 +IEC 62443-4-2 +CR3.5 +SSDF-16 +안전한 초기 보안 설정 구성 +IEC 62443-4-1 +SR-1 +NIST SP 800-218 +PW.9 +ISO 22166-1 5.2, +8.3, 8.4절 + + +--- + +140 +공급망 보안 점검 체크리스트 +SC-01 +오픈소스 소프트웨어 구성요소 +관리 +CRA Part 2.1, +Part 2.6 +IEC 62443-4-1 +SM-9, SM-10 +NIST SP 800-218 +PS3.2, PW.4.1, PW.4.2 +RED (d,e,f) +GEC-1 +NIST SP 800-161 SR- +4, CM-8(9) +SC-02 +EoS 관리 +NIST SP 800-218 +PW.4.4. +NIST SP 800-161 +SA-22 +SC-03 +공급업체 보안 역량 평가 기준 +수립 및 적용 +NIST SP 800-218 +PO.1.3. +NIST SP 800-161 SR- +3(2), SR-5, SR-6 +SC-04 +공급망 변경 시 보안 영향 평가 +및 대처 방안 마련 +NIST SP 800-218 +PW.4.4. +NIST SP 800-161 RA- +9, SR-13 +SC-05 +구성요소 취약점 관리 +NIST SP 800-218 +RV1.1. +NIST SP 800-161 SI-2, +SI-4, SI-5 +NIST SP 800-218 +RV1.1. +NIST SP 800-161 +SC-06 +로봇 펌웨어 및 소프트웨어 +업데이트의 무결성 검증 +RED (d, e, f) +SUM-2,RED +(e) CRY-1 +IEC 62443-4-2 +CR 3.10 +NIST SP 800-161 SI-7 +SC-07 +신속한 패치 메커니즘 +IEC 62443-4-1 +SUM-5 +NIST SP 800-161 SI-2 +SSDF-17 +취약점 식별 및 관리 +IEC 62443-4-1 +DM-1, DM-2, +DM-3, DM-4, +DM-5, DM-6, +SM-11 +NIST SP 800-218 RV.1 +SSDF-18 +취약점 평가 및 대응 +NIST SP 800-218 RV.2 +SSDF-19 +취약점 근본 원인 분석 +NIST SP 800-218 RV.3 + + +--- + +141 +01 +02 +03 +04 +05 +식별 및 인증 점검 체크리스트 +IA-01 +사용자 식별 및 인증 +RED (d,e,f) +ACM-1,2, +AUM-1,2 +IEC 62443-4-2 +CR 1.1 +CRA Part +1.2.d +IA-02 +장치 식별 및 인증 +RED (d,e,f) +ACM-1,2, +AUM-1,2 +IEC 62443-4-2 +CR 1.2 +IA-03 +사용자 패스워드 정책 +RED (d,e,f) +ACM-1,2, +AUM- +1,2,5,6 +IEC 62443-4-2 +CR 1.7 +IA-04 +공개키 관리 +RED (d,e,f) +ACM-1,2, +AUM-1,2 +IEC 62443-4-2 +CR 1.8, CR 1.9 +ISO 22166-1 +5.7절 +IA-05 +대칭키 관리 +RED (d,e,f) +ACM-1,2, +AUM-1,2, +CCK-1 +IEC 62443-4-2 +CR 1.14 +IA-06 +인증 정보 노출 방지 +RED (d,e,f) +ACM-1,2, +AUM-1,2,3 +IEC 62443-4-2 +CR 1.10 +IA-07 +반복된 로그인 시도 제한 +RED (d,e,f) +ACM-1,2, +AUM-1,2, 6 +IEC 62443-4-2 +CR 1.11 +ISO 22166-1 5.4 +IA-08 +시스템 사용 알림 +RED (d,e,f) +ACM-1,2, +AUM-1,2 +IEC 62443-4-2 +CR 1.12 +IA-09 +사용자 계정 관리 +RED (d,e,f) +ACM-1,2, +AUM-1,2 +IEC 62443-4-2 +CR 1.3 +IA-10 +사용자 식별자 관리 +RED (d,e,f) +ACM-1,2, +AUM-1,2 +IEC 62443-4-2 +CR 1.4 +IA-11 +사용자 인증자 관리 +RED (d,e,f) +ACM-1,2, +AUM- +1,2,3,4 +IEC 62443-4-2 +CR 1.5 + + +--- + +142 +사용 통제 점검 체크리스트 +UC-01 +사용자 권한 부여 +RED (e) +ACM-3, 4, +5, 6 +IEC 62443-4-2 +CR 2.1 +CRA Part +1.2.j, 1.2.d +ISO 22166-1 5.4 +UC-02 +모바일 코드 통제 +IEC 62443-4-2 +CR 2.4 +UC-03 +세션 잠금 +IEC 62443-4-2 +CR 2.5 +UC-04 +원격 세션 종료 +IEC 62443-4-2 +CR 2.6 +UC-05 +동시 세션 제어 +IEC 62443-4-2 +CR 2.7 +UC-06 +감사 로그 생성 +CRA Part 1.2.l +IEC 62443-4-2 +CR 2.8 +UC-07 +감사 로그 저장 용량 관리 +RED (e,f) +LGM-1,2,3 +IEC 62443-4-2 +CR 2.9 +UC-08 +감사 처리 실패 대응 +RED (e,f) +LGM-2,3 +IEC 62443-4-2 +CR 2.10 +UC-09 +시간 통제 +RED (e,f) +LGM-4 +IEC 62443-4-2 +CR 2.11 +UC-10 +사용자에 대한 부인 방지 +IEC 62443-4-2 +CR 2.12 +UC-11 +물리적 진단 및 시험 +인터페이스의 통제 +CRA Part 1.2.j +IEC 62443-4-2 +CR 2.13 +ISO 22166-1 5.4, +5.6절 +시스템 무결성 점검 체크리스트 +SI-01 +통신 신뢰성 보장 +RED (d, e, +f) SSM-1,2, +SCM-1,2,4 +IEC 62443-4-2 +CR 3.1 +SI-02 +악성코드로부터 보호 +IEC 62443-4-2 +CR 3.2 +SI-03 +보안 기능 검증 +IEC 62443-4-2 +CR 3.3 +SI-04 +소프트웨어 및 데이터 무결성 +검증 +CRA Part 1.2.f, +1.2.l +IEC 62443-4-2 +CR 3.4 +ISO 22166-1 7.4절 +SI-05 +입력값 검증 +RED (d, e, f) +GEC-6 +IEC 62443-4-2 +CR 3.5 +SI-06 +결정론적 출력 +IEC 62443-4-2 +CR 3.6 +SI-07 +오류 처리 +IEC 62443-4-2 +CR 3.7 + + +--- + +143 +01 +02 +03 +04 +05 +SI-08 +세션의 무결성 보호 +RED (d, e, f) +SCM-1,2,4 +IEC 62443-4-2 +CR 3.8 +SI-09 +감사관련 정보 보호 +IEC 62443-4-2 +CR 3.9 +SI-10 +업데이트 지원 검증 +RED (d, e, +f) SUM- +1,2,3RED (e) +CRY-1 +IEC 62443-4-2 +CR 3.10 +SI-11 +물리적 변조 방지 및 탐지 +IEC 62443-4-2 +CR 3.11 +데이터 보호 점검 체크리스트 +DP-01 +정보의 기밀성 +RED (d, e, +f) SSM-1,3, +SCM-1,2,3 +IEC 62443-4-2 +CR 4.1 +CRA Part +1.2.e +CRA Part 1.2.e +DP-02 +데이터 삭제 관리 +RED (e) +[DLM-1] +IEC 62443-4-2 +CR 4.2 +DP-03 +안전한 암호 매커니즘 사용 +RED (d, e, f) +CCK-1,2,3, +CRY-1 +IEC 62443-4-2 +CR 4.3 +NIS2 제 25조 +데이터 흐름 제한 점검 체크리스트 +DFR-01 +네트워크 기능 지원 +IEC 62443-4-2 +CR 5.1 +DFR-02 +프로토콜 필터링 +IEC 62443-4-2 +CR 5.2 +ISO 22166-1 4.4절 +이벤트 대응 점검 체크리스트 +ER-01 +감사 로그 접근 관리 +RED (d, e, f) +NMM-1 +IEC 62443-4-2 +CR 6.1 +ER-02 +지속적인 모니터링 +RED (d, e, f) +NMM-1 +IEC 62443-4-2 +CR 6.2 +ER-03 +보안 이벤트 알림 +RED (d, e, f) +NMM-1 +IEC 62443-4-2 +CR 6.2 +DP-04 +개인정보 보호 +개인정보 보호법 + +## 3장 1절 15조, + +16조, 17조, 18 +조, 20조, 21조, +22조,4장 29조, +30조 +자원 가용성 점검 체크리스트 +RA-01 +서비스 거부 방지 +RED (d) RLM- +1 +IEC 62443-4-2 +CR 7.1 +CRA Part +1.2.h, 1.2.i + + +--- + +144 +RA-02 +자원 관리 +RED (d) RLM- +1 +IEC 62443-4-2 +CR 7.2 +RA-03 +자원 상태 진단 +CRA Part +1.2.h +RA-04 +목록화 기능 지원 +IEC 62443-4-2 +CR 7.8 +RA-05 +시스템 백업 +IEC 62443-4-2 +CR 7.3 +RA-06 +복구 관리 +RED (d) RLM- +1 +IEC 62443-4-2 +CR 7.4 +CRA Part +1.2.k +ISO 22166-1 5.3 +절, 5.7절 +RA-07 +보안 구성 설정 관리 +RED (d, e, f) +GEC-2,4,7,8 +IEC 62443-4-2 +CR 7.6 +RA-08 +불필요한 기능, 포트 및 서비스 +제한 +RED (d, e, f) +GEC-2,3,5 +IEC 62443-4-2 +CR 7.7 +ISO 22166-1 4.4절 +사이버 복원력 점검 체크리스트 +CR-01 +중요 설정/데이터 정기적 백업 +및 관리 +CRA Part 2.3, +1.2.b +CR-02 +백업 데이터 무결성 및 복구 +검증 절차 운영 +CRA Part +1.2.f, 2.3 +CR-03 +사이버 침해사고 대비 복구 +절차 문서화 및 테스트 +CRA Part 2.3 +CR-04 +복구 목표 시간(RTO) 및 복구 +목표 시점(RPO) 정의 +ISO 22166-1 4.7절 +CR-05 +보안 업데이트 및 패치의 적시 +제공과 적용 +CRA Part 1.2.i +CR-06 +업데이트 적용 실패 시 롤백 +또는 복구 기능 확보 +CRA Part +1.2.a, 2.2, +2.7, 2.8 +CR-07 +보안 업데이트 지원 정책 및 +수명주기 명시 +CRA Part 2.2, +2.4 +CR-08 +보안 취약점 보고·처리 공식 +절차 마련 +ISO 22166-1 5.3 +절, 5.7절, 8.3절 +CR-09 +충분한 로그 확보 및 보안 +이벤트 분석 지원 +CRA Part +1.2.c +CR-10 +보안 사고/취약점 기반 보안 +대책 개선 절차 +CRA Part 2.5, +2.6 +CR-11 +서비스 연속성 및 필수 기능 +유지 +CRA Part 1.2.l +CR-12 +비정상 상태에서의 안전 정지/ +모드 전환 구현 +CRA Part 2.1, +2.3 +CR-13 +사용자 정보 등의 인증 데이터 +보호 +CRA Part 1.1, +1.2.h, 1.2.i, +1.2.j, 1.2.k + + +--- + +145 +01 +02 +03 +04 +05 +무선 보안 점검 체크리스트 +WS-01 +무선 사용자 식별, 인증 및 +접근 관리 +RED (d, e, f) +AUM-1,2 +IEC 62443-4-2 +NDR 1.6, CR 2.2 +WS-02 +인증자 유효성 검증 +RED (d, e, f) +AUM-3 +WS-03 +인증자 변경 +RED (d, e, f) +AUM-4 +WS-04 +비밀번호 강도 +RED (d, e, f) +AUM-5 +WS-05 +무차별 대입 보호 +RED (d, e, f) +AUM-6 +WS-06 +자산 접근 제어 +RED (d, e, f) +ACM-1,2 +WS-07 +안전한 데이터 보호 +RED (d, e, f) +SSM-1,3 +WS-08 +저장 데이터 무결성 검증 +RED (d, e, f) +SSM-1,2 +WS-09 +무선 통신 데이터 보호 +RED (d, e, f) +SCM-1,3 +WS-10 +무선 통신 데이터 무결성 검증 +RED (d, e, f) +SCM-1,2 +WS-11 +무선 통신 재전송 공격 방지 +구현 +RED (d, e, f) +SCM-1,4 +WS-12 +업데이트 메커니즘 제공 +RED (d, e, f) +SUM-1,3 +WS-13 +무선 네트워크 업데이트 +무결성 및 진본성 검증 +RED (d, e, f) +SUM-2 +WS-14 +암호화 적정성 +RED (d, e, f) +CRY-1 +WS-15 +적절한 암호화 키 사용 +RED (d, e, f) +CCK-1,2 +WS-16 +암호화 키 고유성 +RED (d, e, f) +CCK-3 +WS-17 +로그 생성 +RED (e, f) +LGM-1,2,3 +WS-18 +시간 정보 포함 +RED (e, f) +LGM-4 +WS-19 +최신 소프트웨어 및 하드웨어 +유지 +RED (d, e, f) +GEC-1 +WS-20 +네트워크 인터페이스 노출 +최소화 +RED (d, e, f) +GEC-2,3,4 +ISO 22166-1 +5.6절 +WS-21 +외부 물리 인터페이스 제한 +RED (d, e, f) +GEC-5 +ISO 22166-1 +5.6절 +WS-22 +외부 입력 관리 +RED (d, e, f) +GEC-6, 7 +WS-23 +장비 무결성 보장 +RED (f) GEC-8 +로봇 보안취약점 점검 체크리스트의 참조 표준 및 규제 매핑 표 + + +--- + +146 +5.3 +로봇 보안위협 사례 +연도 +사례 +설명 +관련 국가/기업/환경 +영향 +보안목표 +2015 +원격수술 로봇 +(Raven II) 해킹 +시연 +공개 프로토콜과 표준 네트워크를 이용해 +원격수술 로봇(Raven II) 공격 시연 +미국 University of +Washington 연구용 로봇 +Raven II +무결성,가용성, +안전성,정확성 +2017 +ABB IRB140 +산업용 로봇 +해킹 시연 +Trend Micro와 Politecnico di Milano +연구팀이 산업용 로봇 제어기를 대상으로 +원격에서 조작하는 PoC 개발 +스위스 ABB IRB140 +산업용 로봇 +무결성,안전성, +신뢰성 +2018 +ROS1 기본 설계 +(무인증 마스터) 악용 +ROS +Master/토픽/서비스가 +무방비로 +노출되면 토픽 하이재킹·명령 주입·센서 값 +위조 가능 +ROS 기반 로봇(연구/현장) +무결성,안정성, +신뢰성,정확성, +기밀성 +2018 +ROS Bridge +Websocket 노출 +악용 +WebSocket 인터페이스 노출 시 원격에서 +토픽 발행/호출로 제어 명령 주입 가능 +ROS(웹 연동 환경) +무결성,안전성, +신뢰성,정확성 +2019 +Universal Robots +협동로봇 랜섬웨어 +시연 +협동로봇 플랫폼인 UR 시리즈를 대상으로 +특화 랜섬웨어(Akerbeltz)를 개발·시연 +덴마크 Universal Robots +기반 협동로봇 환경 +신뢰성 +2019 +산업용 로봇 +컨트롤러 인터넷 +노출 +원격 서비스(FTP/Telnet/웹관리 등) 노출 및 +기본 설정 미흡 시 침투면 급증 +제조망/원격 유지보수 환경 +기밀성,무결성, +가용성,신뢰성 +2020 +Universal Robots +취약 +제어/진단/콘솔/확장(플러그인) 경로의 인증· +권한·통신보호 미흡이 결합되면 상태/공정 +정보 유출, 레지스터·스크립트 실행을 통한 +동작 변조, 서비스 중단으로 확대 +덴마크 Universal Robots +기반 협동로봇 환경 +기밀성,무결성, +가용성,정확성, +신뢰성,안전성 +2020 +MiR AMR 취약점 +웹관리/업데이트/자격증명/서비스 노출 및 +물리 접근 기반 우회가 결합되면 임무·경로 +조작, 운영 중단, 정보 유출, 지속성 확보 및 +안전 사고 위험으로 확대 +덴마크 MiR / 물류·병원· +공장 AMR 환경 +기밀성,무결성, +가용성,신뢰성, +안전성 +2020 +ROS2/DDS +(Navigation 등) +취약점 +미들웨어/노드 결함 및 보안 설정 미흡 시 +충돌/DoS, 토픽 교란, 원격 기능 영향 +ROS2·DDS 기반 로봇 +가용성,무결성, +신뢰성,안전성, +정확성 +2020 +MAVLink 취약점 +인증 없이 명령 스푸핑/재전송이 가능하면 +이동·임무·안전 동작이 탈취 또한 텔레메트리 +및 상태 정보가 암호화 되어있지 않음 +MAVLink 기반 로봇 +무결성,안전성, +정확성,신뢰성, +기밀성 +2020 +xArm 취약점 +인증 없이 수동제어/명령 입력이 가능 및 약한 +인증으로 인한 무차별 대입 후 계정 탈취 가능 +UFACTORY xArm +무결성,안정성, +정확성,신뢰성, +기밀성 +2020 +ABB IRC5 취약점 +프로그램/설정 파일 업·다운로드 경로가 +취약하면 로직 변조 및 비인가 실행 위험과 +연동 채널 인증/계정 관리 미흡 시 공정 +데이터·제어 경로가 공격 표면으로 사용 +ABB IRC5 +무결성,신뢰성, +안전성,정확성, +기밀성 +2020 +KUKA 시뮬레이터 +및 라이선스 서버 +취약점 +엔지니어링 자산·설정 정보가 노출되어 개발/ +운영 체인에 영향을 미칠 수 있으며 도구 및 +서비스 중단으로 개발·배포·운영 연속성 저해 +KUKA 개발 환경 +기밀성,신뢰성, +가용성 +2020 +산업용 프로그래밍 +언어(IRPL) 취약점 +Trend Micro와 Politecnico di Milano +연구팀이 산업용 언어를 통한 악성 코드 +개발하여 산업에 어떤 영향을 끼치는지 분석 +산업용 로봇(KUKA, UR, +ABB 등) +기밀성,신뢰성, +무결성,정확성, +안전성,가용성 +2021 +DDS(OpenDDS 등) +메시지 처리 취약점 +미들웨어 취약점 악용 시 원격 코드 실행/중단 +가능 → 로봇 제어 토픽 전반에 파급 +DDS 기반 로봇 +기밀성,무결성, +가용성,안전성, +신뢰성 + + +--- + +147 +01 +02 +03 +04 +05 +2022 +RoboStudio/ +엔지니어링 도구 +플러그인 취약점 +애드인/확장 기능이 검증 없이 유입되면 개발 +PC·프로젝트·배포물로 인해 악성 행위가능 +ABB RobotStudio 등 EWS +기밀성,무결성, +신뢰성 +2023 +FANUC +ROBOGUIDE +HandlingPRO +취약점 +ROBOGUIDE-HandlingPRO(버전 9 Rev. +ZD 및 이전 버전)에 경로탐색 취약점이 존재 +일본 FANUC +ROBOGUIDE- +HandlingPRO +기밀성,신뢰성 +2024 +Ecovacs Deebot +X2 로봇청소기 해킹 +ABC 연구팀에서 Ecovacs 로봇청소기 +제품군을 대상으로 모듈관련 보안취약점 PoC +를 개발·시연 +중국 Ecovacs Deebot X2 +가정용 로봇청소기 +기밀성,안전성 + + +--- + +148 + +### 5.4 용어 및 약어 + +• 보안 아키텍처 +로봇 시스템이 제공해야 하는 보안 서비스를 정의하고, 각 컴포넌트가 어떤 방식으로 위협에 대응해야 하는지를 기술한 구조적 +계획 +• 스니핑 +통신을 도청하여 정보가 유출되거나 행동 패턴이 분석되는 공격 기법 +• 스푸핑 +신뢰받는 대상으로 가장해 통신·신호·데이터를 위조하는 공격 기법 +• 악성코드 +로봇 제어 소프트웨어, ROS/RTOS, 운영체제 등의 관련 요소를 교란하거나 비정상 동작을 유도하기 위해 제작된 프로그램 +또는 코드 +• 위험 +특정 위협이 특정 취약점을 악용하여 로봇 시스템에 손실을 초래할 가능성 +• 위협 +로봇 시스템에 해를 끼칠 수 있는 상황·행동·이벤트 +• 제어 네트워크 +로봇 컨트롤러, 센서, 엑추에이터 등이 연결되어 제어 명령과 데이터를 주고받는 네트워크 +• 임베디드 장치 +로봇 내부에 탑재되어 특정 기능을 수행하는 전용 장치 +• 제어 장치 +로봇 컨트롤러, RTOS 기반 제어보드, 로봇 제어반 등 로봇 동작을 관리하는 장치 +• 프로토콜 +시스템 간 통신 규약 +• ROS(Robot Operating System) +로봇 개발을 위한 오픈소스 소프트웨어 프레임워크로, 센서·모터 제어와 메시지 통신 제공 +• 산업제어시스템 +산업 공정의 운전 및 제어에 사용되어 로봇·PLC·SCADA 등과 상호작용하는 전체 시스템 + + +--- + +149 +01 +02 +03 +04 +05 +• OPC UA(OPC Unified Architecture) +로봇과 상위 시스템을 안전하게 연결하는 산업용 통신 프로토콜 +• MQTT(Message Queuing Telemetry Transport) +로봇 상태나 센서 정보를 전송하는데 주로 사용되는 경량 메시지 프로토콜 +• Modbus +로봇 주변 장치와 데이터를 주고받는 전통적인 산업통신규약 +• RTOS(Real Time Operating System) +실시간 동작이 필요한 장치에서 사용하는 실시간 운영체제 +• 디지털 트윈 서비스(Digital Twin Service) +로봇과 공정을 가상 모델로 복제해 시뮬레이션·모니터링을 제공하는 서비스 +• ERP(Enterprise Resource Planning) +로봇이 연동될 수 있는 기업 자원·생산 관리를 담당하는 정보 시스템 +• HMI(Human Machine Interface) +작업자가 로봇 상태와 공정 데이터를 확인·조작하는 인터페이스 +• MES(Manufacturing Execution System) +로봇이 참여하는 생산 공정의 실행과 작업 흐름을 관리하는 시스템 +• NAC(Network Access Control) +네트워크에 접속하는 로봇·단말의 보안 상태를 검사하고 허용 여부를 판단하는 솔루션 +• OPC(OLE for Process Control) +각종 장치와 시스템 간 데이터를 교환하기 위한 산업용 통신 표준 +• PACS(Picture Archiving And Communication System) +X-ray, CT, MRI 등 의료 영상을 디지털로 저장·관리하는 병원 내부 정보 시스템 +• WIPS(Wireless Intrusion Prevention System) +무선 네트워크에서 비인가 접속을 탐지하고 차단하는 보안 시스템 +• WMS(Warehouse Management System) +창고에서 로봇이 이송하는 자재·재고를 관리하는 시스템 + + +--- + +150 +• DCS(Distributed Control System) +공정 장비를 분산 방식으로 제어하는 시스템 +• EWS(Engineer Workstation) +로봇 제어 설정을 변경하는 엔지니어용 작업 컴퓨터 +• SCADA(Supervisory Control and Data Acquisition) +공정 설비·로봇의 상태를 원격에서 감시·제어하는 중앙 시스템 +• FMS(Fleet Management System) +복수의 로봇의 위치, 작업 배정, 충전 등을 관리하는 중앙 시스템 +• PLC(Programmable Logic Controller) +로봇 제어반 I/O를 통해 공정 시작·정지 신호를 제어하고 로봇과 설비의 공정을 수행·관리하는 제어 장치 +• 안전 PLC(Safety Programmable Logic Controller) +비상정지, 안전 속도 등 로봇의 안전 기능을 담당하는 인증된 PLC +• 티칭 펜던트(Teach Pendant) +작업자가 로봇 동작을 직접 학습시키거나 제어하는 휴대형 조작 장치 +• RFID(Radio Frequency Identification) +로봇 물류나 자재 추적에 사용되는 무선 식별 기술 +• RTU(Remote Terminal Unit) +원격 센서/기기 상태를 수집·전송하는 장치 +• SDN(Software Defined Networking) +네트워크 흐름을 소프트웨어로 제어하는 방식 +• UTM(Unified Threat Management) +방화벽·VPN·침입차단 등 여러 보안 기능을 통합 제공하는 장비 +• 필드 I/O(Field I/O) +로봇 주변의 센서·엑추에이터와 제어장치를 연결하는 입출력 인터페이스 +• 서보 드라이브(Servo Drive) +서보모터에 전력을 공급하고 제어 명령을 해석해 모터 동작을 조절하는 장치 + + +--- + +151 +01 +02 +03 +04 +05 +• 구동부(Driving System) +로봇 팔·바퀴·리프트 등 로봇의 물리적 움직임을 만들어내는 구동장치 +• 센서(Sensor) +로봇이 주변 환경을 인식하기 위해 사용하는 감지 장치 +• AMR(Autonomous Mobile Robot) +주행 경로를 스스로 판단하여 이동하는 자율이동로봇 +• 엑추에이터(Actuator) +로봇 팔·바퀴·리프트 등 로봇의 물리적 움직임을 만들어내는 구동장치 +• 휴머노이드(Humanoid) +사람의 신체 구조와 움직임을 모방해 설계된 로봇 +• 수술 로봇(Robotic Surgery) +로봇 팔에 수술 도구, 내시경 장치를 장착해 의사 조작 기반으로 정밀, 최소 침습 수술을 수행하도록 설계된 로봇 + + +--- + +152 +5.5 +로봇 서비스의 기본 보안수칙 +로봇 보안모델과 관련한 법률/표준에 기반하여 산출된 보안 요구사항에 기반하여 사용/관리 책임을 +가진 담당자가 보안수준을 증진하기 위해 다음과 같은 기본 보안수칙을 준수하는 방향을 권장한다. +• 조직의 로봇 운영환경에 맞는 보안정책 수립 + +◦운영자·유지보수 담당자·원격 관제 등 역할기반 로봇 제어 권한 구분 정책 + +◦원격 접속, OTA 업데이트, 로봇–FMS 간 통신 정책 + +◦로봇 안전기능(Safety)과 보안(Security) 충돌 방지를 위한 우선순위 규정 +• 모든 임직원 및 외부 작업자에게 로봇보안 정책을 교육·공지 +• 로봇 제조사·정비업체와 보안협약 체결 + +◦펌웨어·OTA 업데이트 시 무결성 검증 및 서명 기반 업데이트 요구 + +◦외부 정비업체의 로봇 컨트롤러 접근 시 사전 승인 및 활동 로그 기록 +• USB, 노트북, 무선 장비와 같은 반입 장비의 악성코드 검증 +• 로봇 소프트웨어 공급망(라이브러리, ROS 패키지, 센서 드라이버 등)에 대한 위협 관리 +• 로봇 제어 시스템은 개인 계정 기반으로 운영 +• 디폴트 계정·패스워드 제거 및 강력 인증 적용 + +◦최소 길이·조합 기준 + +◦로봇 관제 시스템의 자동 로그인 금지 +• 필요 시 로봇 제어 명령에 2단계 인증 적용 +• 로봇 조작 중 비인가 명령 또는 오작동을 방지하기 위한 보호 설정 + +◦로봇 컨트롤러(PLC/RTOS 기반) 메모리 쓰기 차단 + +◦제어 파라미터·경로 파일·작업 레시피 등 민감 파일에 암호화 적용 +• 로봇의 위험 명령 수행 시 관리자 재확인 단계 적용 + +◦긴급정지(E-Stop) 해제, 힘/속도 제한 변경, 작업 구역 이동 및 경로 변경 +로봇 보안정책 및 운영 가이드 수립 +수칙 1. +관련 업체 관리 +수칙 2. +로봇 사용자 계정·인증관리 강화 +수칙 3. +로봇 제어설비·센서·액추에이터 보호 설정 +수칙 4. + + +--- + +153 +01 +02 +03 +04 +05 +• 로봇–FMS–관제 서버 간 통신 경로 암호화 + +◦MQTT, ROS, OPC-UA, Modbus 등 프로토콜별 보안 설정 +• 로봇 제어 네트워크에 접근 가능한 IP·MAC 범위 제한 +• 로봇 Wi-Fi/BLE 통신은 인증키 기반 접근 통제 적용 +• 디버그 포트(JTAG, UART) 차단 또는 인증 기반 사용 제한 +• 로봇 상태(센서 이상, 경로 이상, 통신 지연 등)와 보안 이벤트를 통합 모니터링 +• 주기적인 취약점 점검·로그 분석 수행 + +◦제어 시스템 로그 + +◦원격 접속 이력 + +◦OTA 업데이트 기록 +• 로봇 동작 이상 징후 발생 시 즉시 격리 및 리셋 절차 시행 +• 로봇 컨트롤러, 센서 모듈, 배터리 접근부 등 물리적으로 조작 가능한 부분 잠금·보안 씰 적용 +• 도킹 스테이션·충전 스테이션 물리적 보호 +• 외부인이 접근 가능한 구역의 로봇은 카메라 등 입력센서 변조 방지 절차 적용 +• 로봇 반입·반출 기기는 무선 기능 여부 확인 후 네트워크 격리 처리 +로봇 통신·네트워크 보안 강화 +수칙 5. +로봇 안전 및 상태 모니터링 기반 주기적 점검 +수칙 6. +로봇·설비 자산 및 물리적 접근 통제 +수칙 7. + + +--- + + + +--- + + + +--- + diff --git "a/\353\254\270\354\204\234/\353\241\234\353\264\207_\353\263\264\354\225\210\354\267\250\354\225\275\354\240\220_\354\240\220\352\262\200_\354\262\264\355\201\254\353\246\254\354\212\244\355\212\270_\355\225\264\354\204\244\354\204\234.md" "b/\353\254\270\354\204\234/\353\241\234\353\264\207_\353\263\264\354\225\210\354\267\250\354\225\275\354\240\220_\354\240\220\352\262\200_\354\262\264\355\201\254\353\246\254\354\212\244\355\212\270_\355\225\264\354\204\244\354\204\234.md" new file mode 100644 index 0000000..ce2f243 --- /dev/null +++ "b/\353\254\270\354\204\234/\353\241\234\353\264\207_\353\263\264\354\225\210\354\267\250\354\225\275\354\240\220_\354\240\220\352\262\200_\354\262\264\355\201\254\353\246\254\354\212\244\355\212\270_\355\225\264\354\204\244\354\204\234.md" @@ -0,0 +1,10071 @@ +# 로봇 보안취약점 점검 체크리스트 해설서.pdf + +> Converted: 2026-03-30 06:41 + + +--- + + + +--- + + + +--- + + + +--- + + + +--- + + + +--- + + + +--- + + + +--- + +8 +본 해설서는 로봇 시스템의 보안취약점 점검 체크리스트에 대한 이해와 체크리스트 충족을 위한 상세한 구현 가이드 및 검증 +방안을 제시한다. +01 +개요 +목적 +로봇 시스템의 초기 설계 단계부터 최종 폐기에 이르기까지 모든 라이프사이클 단계에서 보안 +취약점 점검 체크리스트를 활용하여 로봇 시스템의 안전성 보장 +대상 +로봇 시스템 제조사 및 운영자 +적용 +범위 +본 요구사항은 로봇 단일이 아닌 다음 구성요소를 포함한 전체 시스템에 적용된다. +• 로봇 본체 : 제어부, 센서부, 구동부, 시스템 및 응용 소프트웨어 등 +• 지원 인프라 : 도킹 / 충전 스테이션, 네트워크 장비, 전력 공급 설비 +• 사용자 인터페이스 : HMI/조작 콘솔, 모바일 앱, 웹 대시보드 +• 운영 관리 시스템 : 연동 서버, 데이터베이스, 클라우드 플랫폼, 원격 모니터링 및 관리 콘솔 +활용 +방법 +로봇 시스템 제조사 +• 설계 및 개발 단계에서 보안 요구사항을 제품에 반영하여 안전한 로봇 시스템 개발 +• 배포 전 보안 검증을 통해 취약점을 식별하고 개선 +• 운영자에게 적절한 보안 가이드 및 업데이트 정보 제공 +로봇 시스템 운영자 +• 배포된 로봇 시스템에 대한 정기적인 보안 점검 및 패치 적용 +• 운영 및 유지보수 단계에서 보안 요구사항 준수 +• 보안 사고 발생 시 신속한 대응 및 복구 체계 구축 + +### 1.1 개요 + + + +--- + + + +--- + +10 +① 보안 소프트웨어 개발 프레임워크(SSDF, Secure Software Development Framework) +② 공급망 보안 +③ 식별 및 인증 +⑦ 데이터 흐름 제한 +⑤ 시스템 무결성 +⑨ 자원 가용성 +④ 사용 통제 +⑧ 이벤트 대응 +⑥ 데이터 보호 +해당 카테고리는 안전한 로봇 시스템 내의 소프트웨어 개발을 위한 보안 요구사항을 정의하였다. +SSDF를 적용하여 안전한 소프트웨어 개발을 수행하기 위한 가이드인 NIST SP 800-218을 차용하였으며, 미국 +연방정부에 소프트웨어를 판매하는 소프트웨어 생산자의 경우 행정 명령에 따라 해당 가이드를 준수하여야 하며 점차 +표준화되는 추세이다. +NIST SP 800-218은 안전한 소프트웨어 개발 관행을 다음과 같이 4가지 실천 영역(Practice Group)으로 분류하였다. +해당 카테고리는 최근 증가하고 있는 소프트웨어 공급망 위협에 대응하기 위하여 로봇 시스템의 공급망 전반에 +적용되는 보안 요구사항을 정의하였다. +Log4j 취약점과 SolarWinds 공급망 공격 등 대규모 공급망 보안 사건들이 발생하면서, 하나의 취약점이 수백만 개 +소프트웨어에 영향을 미치고 광범위한 피해를 초래할 수 있어 공급망 보안의 중요성이 인식되기 시작했다. +사이버보안 공급망 위험 관리(C-SCRM, Cybersecurity Supply Chain Risk Management)를 적용하여 공급망 +보안을 강화하기 위한 가이드인 NIST SP 800-161을 차용하였으며, 조직이 공급망 전체에서 사이버보안 위험을 +체계적으로 식별, 평가, 완화할 수 있도록 제시하고 있다. +NIST SP 800-161은 NIST SP 800-53을 보완하는 프레임워크로 기본적인 사이버보안 성숙도를 달성한 후 +공급망 보안을 강화하기 위해 광범위하게 채택되고 있는 추세이다. +해당 카테고리는 산업제어시스템(ICS)의 사이버 보안을 위해 고안된 국제 표준인 IEC 62443의 요구사항을 +차용하여 로봇 시스템의 기본적인 보안 요구사항을 정의하였다. +IEC 62443은 산업 통신망의 위험 완화를 목적으로 고안되었으며, 사이버 보안에 대한 전체적인 접근방식을 +제공하는 산업 전반의 선도적인 산업 사이버 보안 표준이다. IEC 62443은 포괄적인 설계 기반 보안 접근 +방식으로, 운영 프로세스, 시스템 및 구성 요소에 대한 요구사항을 포함하며, 절차적 조치와 기술적 조치를 모두 +정의한다. +• Prepare the Software (PS) : 개발된 소프트웨어를 변조 및 무단 접근으로부터 보호 +• Prepare the Organization (PO) : 조직이 안전한 소프트웨어 개발을 수행할 수 있도록 준비 +• Produce Well-Secured Software (PW) : 보안 취약점을 최소화한 소프트웨어 개발 +• Respond to Vulnerabilities (RV) : 배포된 소프트웨어 취약점을 식별하고 대응 +NIST SP 800-218 실천 영역 + + +--- + +01 +02 +03 +11 +IEC 62443 표준 간 관계성 +IEC 62443-1-1 에서 산업제어시스템의 기본 보안 요구사항(FR, Foundational Requirement)을 다음과 같이 7 +가지로 분류하였다. +승인되지 않은 장치 또는 정보에 대한 불법적 접근으로부터 보호하기 위한 접근 제어 요구사항 +FR 1 - 식별 및 인증(IA, Identification and Authentication) +통신 채널의 승인되지 않은 변경으로부터 보호하기 위한 데이터 무결성 확보 요구사항 +FR 3 - 시스템 무결성(SI, System Integrity) +승인되지 않은 정보 공개로부터 보호하기 위한 통신 채널의 데이터 흐름 제한 요구사항 +FR 5 - 데이터 흐름 제한(RDF, Restrict Data Flow) +승인되지 않은 장치 작동 또는 정보 사용으로부터 보호하기 위한 사용 통제 요구사항 +FR 2 - 사용 통제(UC, Use Control) +도청으로부터 보호하기 위해 선택된 통신 채널의 데이터 기밀성 확보 요구사항 +FR 4 - 데이터 보호(DC, Data Confidentiality) +보안 위반을 적절한 담당자에게 알리고, 위반의 포렌식 증거를 보고하며, 긴급 상황에서 시기적절한 시정 조치를 실 +시하는 요구사항 +FR 6 - 이벤트 대응(TRE, Timely Response to Event) +서비스 거부 공격으로부터 보호하기 위해 모든 네트워크 자원의 가용성을 확보하는 요구사항 +FR 7 - 자원 가용성(RA, Resource Availability) + + +--- + +12 +⑩ 사이버 복원력 (Cyber Resilience) +⑪ 무선 보안 +해당 카테고리는 유럽의 사이버 복원력 법안인 CRA(Cyber Resilience Act)를 차용하여 로봇 시스템의 침해 후 기 +능 유지 및 신속 복구를 위한 보안 요구사항을 정의하였다. + +최근 사이버 위협이 증가함에 따라 사이버 침해 사고 방지만큼 침해 발생 후 신속하게 시스템을 복구하고 정상운영 상 +태로 복귀할 수 있는 능력, 즉 사이버 복원력(Cyber Resilience)의 중요성이 강조되고 있다. 사이버 복원력은 공격이 +나 침해로부터 시스템을 보호하는 것뿐만 아니라, 침해 발생 시에도 핵심 운영 기능을 유지하고 빠르게 복구할 수 있 +는 종합적인 능력을 의미한다. + +CRA는 디지털 제품 및 소프트웨어가 기본적인 사이버 보안 요건을 충족하도록 요구하는 규제 법안으로, 2027년 12 +월에 전면 시행되어 사이버 위협에 대한 보안 인증, 취약점 공개, 보안 업데이트 제공, SBOM 제출 등을 의무화할 예 +정이다. +해당 카테고리는 유럽 연합(EU)의 무선장비지침(RED, Radio Equipment Directive)을 차용하여 무선 통신을 수행 +하는 로봇 시스템에 대한 보안 요구사항을 정의하였다. +RED는 원래 무선 장비의 전자기 적합성(EMC) 및 전파 사용 적합성을 규정하는 지침이었지만, 2024년 이후 단계적 +으로 시행되는 새로운 보안 표준(EN 18031 시리즈)을 통해 무선 장비의 사이버 보안을 의무화하는 규제 프레임워크 +로 확장되었다. RED의 법적 근거 조항인 Article 3.3(d), (e), (f)를 활성화함으로써 무선 기능을 가진 장비들이 최소 +한의 사이버 보안 능력을 갖추도록 요구하고 있다. + +유럽 연합의 CE 인증 체계에 2025년 8월부터 RED에 대한 적합성 평가가 의무적으로 포함되었다. 이는 유럽 시장에 +판매되는 무선 기능을 포함한 모든 장비, 특히 로봇 시스템이 무선 통신을 활용하는 경우 반드시 RED 규제 요구사항 +을 충족해야 함을 의미한다. +RED (2014/53/EU)에서 요구하는 유럽에서 판매되는 무선 장비에 대한 일반적인 보안 요구사항 1부로, 인터넷 연결 무선 장비 대상으로 +규정 +EN 18031-1 Common security requirements for radio equipment - Part 1 Internet connected radio equipment +RED (2014/53/EU)에서 요구하는 유럽에서 판매되는 무선 장비에 대한 일반적인 보안 요구사항 2부로, 데이터를 처리하는 무선 장비, +즉 인터넷 연결 무선 장비, 보육용 무선 장비, 장난감 무선 장비 및 착용형 무선 장비 대상으로 규정 +EN 18031-2 Common security requirements for radio equipment - Part 2 radio equipment processing data, namely +Internet connected radio equipment, childcare radio equipment, toys radio equipment and wearable radio equipment +RED (2014/53/EU)에서 요구하는 유럽에서 판매되는 무선 장비에 대한 일반적인 보안 요구사항 3부로, 가상 화폐 또는 금전적 가치를 +처리하는 인터넷 연결 무선 장비 대상으로 규정 +EN 18031-3 Common security requirements for radio equipment - Part 3 Internet connected radio +equipment processing virtual money or monetary value + + +--- + +01 +02 +03 +13 +이외에도 다음과 같은 국제 표준 및 유럽 규제를 종합적으로 반영하였다. +EU의 기본 사이버보안 법령으로, 제조사가 실제로 적용 가능한 보안 요구사항으로 재구성한 규정이다. 보안 정책 수립, 사이버 위협 +모니터링, 보안 사건 보고 및 대응 체계를 포함한다. +NIS2 (Network and Information Security Directive 2) +산업제어시스템 제품의 보안 개발 프로세스 요구사항을 규정한다. 설계 단계에서부터 보안을 통합하는 Secure Development +Lifecycle(SDLC) 접근방식을 정의하며, 안전한 코딩 관행과 보안 테스트를 포함한다. +IEC 62443-4-1 +기계류의 설계 및 운영 단계에서의 안전 요구사항을 규정하는 국제 표준으로, 제5절 사이버 보안에서 로봇 시스템의 보안 지침을 정의한다. +제어 인터페이스 보안, 통신 채널의 무결성, 비인가 제어 명령으로부터의 보호 등 로봇의 자동화 및 원격 제어에 필요한 사이버 보안 +요구사항을 포함한다. +ISO/IEC 22166-1 +로봇 시스템이 개인정보를 수집·처리하는 경우, 데이터 암호화, 접근 제어, 개인정보 유출 시 신고 의무 등의 보안 조치를 이행해야 한다. +개인정보보호법 + + +--- + +14 + +#### 1.2.2 로봇 보안 취약점 점검 체크리스트의 참조 표준 및 규제 + +번호 +체크리스트 항목 +규제 +표준 +가이드라인 +SSDF 점검 체크리스트 +SSDF-01 +소프트웨어 개발 보안 +요구사항 정의 +IEC 62443-4-1 SM-1, +SM-3, SM-5, SM-12, +SM-13, SR-3, SR-4 +NIST SP 800-218 PO.1 +ISO 22166-1 4.6, 4.8, +5.1, 7.4절 +SSDF-02 +보안 역할 및 책임 관리 +NIS2 제20조 +IEC 62443-4-1 SM-2, +SM-4 +NIST SP 800-218 PO.2 +SSDF-03 +보안 개발 툴체인 관리 +NIST SP 800-218 PO.3 +SSDF-04 +보안 점검 기준 정의 및 +데이터 관리 +NIST SP 800-218 PO.4 +SSDF-05 +개발 환경 보호 +IEC 62443-4-1 SM-7 +NIST SP 800-218 PO.5 +SSDF-06 +코드 무단 접근 및 변조 +방지 +NIST SP 800-218 PS.1 +SSDF-07 +소프트웨어 배포 무결성 +검증 제공 +IEC 62443-4-1 SM-6 +NIST SP 800-218 PS.2 +SSDF-08 +소프트웨어 배포 보관 및 +보호 +NIST SP 800-218 PS.3 +SSDF-09 +보안 설계 및 위험 완화 +체계 수립 +CRA Part 1.1 +ISO 22166-1 5.1절 +NIST SP 800-218 PW.1 +IEC 62443-4-1 SD-1, +SR-2 +SSDF-10 +보안 설계 검토 수행 +IEC 62443-4-1 SD-3, +SD-4, SR-5, SVV-1 +NIST SP 800-218 PW.2 +SSDF-11 +검증된 +라이브러리 +재사용 +NIST SP 800-218 PW.4 +SSDF-12 +안전한 코딩 가이드 준수 +IEC 62443-4-1 SI-2 +NIST SP 800-218 PW.5 +SSDF-13 +컴파일러 및 빌드 환경 +보안 구성 +NIST SP 800-218 PW.6 +SSDF-14 +코드 검토 및 분석 +NIST SP 800-218 PW.7 +SSDF-15 +실행 코드 테스트 +RED(d,e,f) GEC-6 +IEC 62443-4-1 SVV-2, +SVV-3, SVV-4 +NIST SP 800-218 PW.8 +CRA Part 2.3 +IEC 62443-4-2 CR3.5 +SSDF-16 +안전한 초기 보안 설정 +구성 +IEC 62443-4-1 SR-1 +NIST SP 800-218 PW.9 +ISO 22166-1 5.2, 8.3, +8.4절 +SSDF-17 +취약점 식별 및 관리 +IEC 62443-4-1 DM-1, +DM-2, DM-3, DM-4, +DM-5, DM-6, SM-11 +NIST SP 800-218 RV.1 +SSDF-18 +취약점 평가 및 대응 +NIST SP 800-218 RV.2 +SSDF-19 +취약점 근본 원인 분석 +NIST SP 800-218 RV.3 + + +--- + +01 +02 +03 +15 +공급망 보안 점검 체크리스트 +SC-01 +오픈소스 +소프트웨어 +구성요소 관리 +CRA Part 2.1, Part +2.6 +IEC 62443-4-1 SM-9, +SM-10 +NIST SP 800-218 PS3.2, +PW.4.1, PW.4.2 +RED (d,e,f) GEC-1 +NIST SP 800-161 SR-4, +CM-8(9) +SC-02 +EoS 관리 +NIST SP 800-218 +PW.4.4. +NIST SP 800-161 SA- +22 +SC-03 +공급업체 보안 역량 평가 +기준 수립 및 적용 +NIST SP 800-218 +PO.1.3. +NIST SP 800-161 SR- +3(2), SR-5, SR-6 +SC-04 +공급망 변경 시 보안 영향 +평가 및 대처 방안 마련 +NIST SP 800-218 +PW.4.4. +NIST SP 800-161 RA-9, +SR-13 +SC-05 +구성요소 취약점 관리 +NIST SP 800-218 +RV1.1. +NIST SP 800-161 SI-2, +SI-4, SI-5 +SC-06 +로봇 펌웨어 및 +소프트웨어 업데이트의 +무결성 검증 +RED (d, e, f) SUM-2, +RED (e) CRY-1 +IEC 62443-4-2 CR 3.10 +NIST SP 800-161 SI-7 +SC-07 +신속한 패치 메커니즘 +IEC 62443-4-1 SUM-5 +NIST SP 800-161 SI-2 +식별 및 인증 점검 체크리스트 +IA-01 +사용자 식별 및 인증 +RED (d,e,f) ACM-1,2, +AUM-1,2 +IEC 62443-4-2 CR 1.1 +CRA Part 1.2.d +IA-02 +장치 식별 및 인증 +RED (d,e,f) ACM-1,2, +AUM-1,2 +IEC 62443-4-2 CR 1.2 +IA-03 +사용자 패스워드 정책 +RED (d,e,f) ACM-1,2, +AUM-1,2,5,6 +IEC 62443-4-2 CR 1.7 +IA-04 +공개키 관리 +RED (d,e,f) ACM-1,2, +AUM-1,2 +IEC 62443-4-2 CR 1.8, +CR 1.9 +ISO 22166-1 5.7절 +IA-05 +대칭키 관리 +RED (d,e,f) ACM-1,2, +AUM-1,2, CCK-1 +IEC 62443-4-2 CR 1.14 +IA-06 +인증 정보 노출 방지 +RED (d,e,f) ACM-1,2, +AUM-1,2,3 +IEC 62443-4-2 CR 1.10 +IA-07 +반복된 로그인 시도 제한 +RED (d,e,f) ACM-1,2, +AUM-1,2, 6 +IEC 62443-4-2 CR 1.11 +ISO 22166-1 5.4 +IA-08 +시스템 사용 알림 +RED (d,e,f) ACM-1,2, +AUM-1,2 +IEC 62443-4-2 CR 1.12 + + +--- + +16 +IA-09 +사용자 계정 관리 +RED (d,e,f) ACM-1,2, +AUM-1,2 +IEC 62443-4-2 CR 1.3 +IA-10 +사용자 식별자 관리 +RED (d,e,f) ACM-1,2, +AUM-1,2 +IEC 62443-4-2 CR 1.4 +IA-11 +사용자 인증자 관리 +RED (d,e,f) ACM-1,2, +AUM-1,2,3,4 +IEC 62443-4-2 CR 1.5 +사용 통제 점검 체크리스트 +UC-01 +사용자 권한 부여 +RED (e) ACM-3, 4, +5, 6 +IEC 62443-4-2 CR 2.1 +CRA Part 1.2.j, 1.2.d +ISO 22166-1 5.4 +UC-02 +모바일 코드 통제 +IEC 62443-4-2 CR 2.4 +UC-03 +세션 잠금 +IEC 62443-4-2 CR 2.5 +UC-04 +원격 세션 종료 +IEC 62443-4-2 CR 2.6 +UC-05 +동시 세션 제어 +IEC 62443-4-2 CR 2.7 +UC-06 +감사 로그 생성 +CRA Part 1.2.l +IEC 62443-4-2 CR 2.8 +UC-07 +감사 로그 저장 용량 관리 +RED (e,f) LGM-1,2,3 +IEC 62443-4-2 CR 2.9 +UC-08 +감사 처리 실패 대응 +RED (e,f) LGM-2,3 +IEC 62443-4-2 CR 2.10 +UC-09 +시간 통제 +RED (e,f) LGM-4 +IEC 62443-4-2 CR 2.11 +UC-10 +사용자에 대한 부인 방지 +IEC 62443-4-2 CR 2.12 +UC-11 +물리적 진단 및 시험 +인터페이스의 통제 +CRA Part 1.2.j +IEC 62443-4-2 CR 2.13 +ISO 22166-1 5.4, 5.6절 +시스템 무결성 점검 체크리스트 +SI-01 +통신 신뢰성 보장 +RED (d, e, f) SSM- +1,2, SCM-1,2,4 +IEC 62443-4-2 CR 3.1 +SI-02 +악성코드로부터 보호 +IEC 62443-4-2 CR 3.2 +SI-03 +보안 기능 검증 +IEC 62443-4-2 CR 3.3 +SI-04 +소프트웨어 및 데이터 +무결성 검증 +CRA Part 1.2.f, 1.2.l +IEC 62443-4-2 CR 3.4 +ISO 22166-1 7.4절 +SI-05 +입력값 검증 +RED (d, e, f) GEC-6 +IEC 62443-4-2 CR 3.5 +SI-06 +결정론적 출력 +IEC 62443-4-2 CR 3.6 +SI-07 +오류 처리 +IEC 62443-4-2 CR 3.7 +SI-08 +세션의 무결성 보호 +RED (d, e, f) SCM- +1,2,4 +IEC 62443-4-2 CR 3.8 +SI-09 +감사관련 정보 보호 +IEC 62443-4-2 CR 3.9 +SI-10 +업데이트 지원 검증 +RED (d, e, f) SUM- +1,2,3 RED (e) CRY-1 +IEC 62443-4-2 CR 3.10 +SI-11 +물리적 변조 방지 및 탐지 +IEC 62443-4-2 CR 3.11 +데이터 보호 점검 체크리스트 +DP-01 +정보의 기밀성 +RED (d, e, f) SSM- +1,3, SCM-1,2,3 +IEC 62443-4-2 CR 4.1 +CRA Part 1.2.e +ISO 22166-1 5.7절 +DP-02 +데이터 삭제 관리 +RED (e) DLM-1 +IEC 62443-4-2 CR 4.2 +DP-03 +안전한 암호 메커니즘 +사용 +RED (d, e, f) CCK- +1,2,3, CRY-1 +IEC 62443-4-2 CR 4.3 +NIS2 제 25조 + + +--- + +01 +02 +03 +17 +DP-04 +개인정보 보호 +개인정보 보호법3장 1절 +15조, 16조, 17조, 18 +조, 20조, 21조, 22조,4 +장 29조, 30조 +데이터 흐름 제한 점검 체크리스트 +DFR-01 +네트워크 기능 지원 +IEC 62443-4-2 CR 5.1 +DFR-02 +프로토콜 필터링 +IEC 62443-4-2 CR 5.2 +ISO 22166-1 4.4절 +이벤트 대응 점검 체크리스트 +ER-01 +감사로그 접근 관리 +RED (d, e, f) NMM-1 +IEC 62443-4-2 CR 6.1 +ER-02 +지속적인 모니터링 +RED (d, e, f) NMM-1 +IEC 62443-4-2 CR 6.2 +ER-03 +보안 이벤트 알림 +RED (d, e, f) NMM-1 +IEC 62443-4-2 CR 6.2 +자원 가용성 점검 체크리스트 +RA-01 +서비스 거부 방지 +RED (d) RLM-1 +IEC 62443-4-2 CR 7.1 +CRA Part 1.2.h, 1.2.i +RA-02 +자원 관리 +RED (d) RLM-1 +IEC 62443-4-2 CR 7.2 +RA-03 +자원 상태 진단 +CRA Part 1.2.h +RA-04 +목록화 기능 지원 +IEC 62443-4-2 CR 7.8 +RA-05 +시스템 백업 +IEC 62443-4-2 CR 7.3 +RA-06 +복구 관리 +RED (d) RLM-1 +IEC 62443-4-2 CR 7.4 +CRA Part 1.2.k +ISO 22166-1 5.3절, 5.7절 +RA-07 +보안 구성 설정 관리 +RED (d, e, f) GEC- +2,4,7,8 +IEC 62443-4-2 CR 7.6 +RA-08 +불필요한 기능, 포트 및 +서비스 제한 +RED (d, e, f) GEC- +2,3,5 +IEC 62443-4-2 CR 7.7 +ISO 22166-1 4.4절 +사이버 복원력 점검 체크리스트 +CR-01 +중요 설정/데이터 정기적 +백업 및 관리 +CRA Part 2.3, 1.2.b +CR-02 +백업 데이터 무결성 및 +복구 검증 절차 운영 +CRA Part 1.2.f, 2.3 +CR-03 +사이버 침해사고 대비 +복구 절차 문서화 및 +테스트 +CRA Part 2.3 +CR-04 +복구 목표 시간(RTO) 및 +복구 목표 시점(RPO) +정의 +ISO 22166-1 4.7절 +CR-05 +보안 업데이트 및 패치의 +적시 제공과 적용 +CRA Part 1.2.i +CR-06 +업데이트 적용 실패 시 +롤백 또는 복구 기능 확보 +CRA Part 1.2.a, 2.2, +2.7, 2.8 +CR-07 +보안 업데이트 지원 정책 +및 수명주기 명시 +CRA Part 2.2, 2.4 + + +--- + +18 +CR-08 +보안 취약점 보고·처리 +공식 절차 마련 +ISO 22166-1 5.3절, 5.7 +절, 8.3절 +CR-09 +충분한 로그 확보 및 보안 +이벤트 분석 지원 +CRA Part 1.2.c +CR-10 +보안 사고/취약점 기반 +보안 대책 개선 절차 +CRA Part 2.5, 2.6 +CR-11 +서비스 연속성 및 필수 +기능 유지 +CRA Part 1.2.l +CR-12 +비정상 상태에서의 안전 +정지/모드 전환 구현 +CRA Part 2.1, 2.3 +CR-13 +사용자 정보 등의 인증 +데이터 보호 +CRA Part 1.1, 1.2.h, +1.2.i, 1.2.j, 1.2.k +무선 보안 점검 체크리스트 +WS-01 +무선 사용자 식별, 인증 및 +접근 관리 +RED (d, e, f) AUM- +1,2 +IEC 62443-4-2 NDR 1.6, +CR 2.2 +WS-02 +인증자 유효성 검증 +RED (d, e, f) AUM-3 +WS-03 +인증자 변경 +RED (d, e, f) AUM-4 +WS-04 +비밀번호 강도 +RED (d, e, f) AUM-5 +WS-05 +무차별 대입 보호 +RED (d, e, f) AUM-6 +WS-06 +자산 접근 제어 +RED (d, e, f) ACM-1,2 +WS-07 +안전한 데이터 보호 +RED (d, e, f) SSM-1,3 +WS-08 +저장 데이터 무결성 검증 +RED (d, e, f) SSM-1,2 +WS-09 +무선 통신 데이터 보호 +RED (d, e, f) SCM-1,3 +WS-10 +무선 통신 데이터 무결성 +검증 +RED (d, e, f) SCM-1,2 +WS-11 +무선 통신 재전송 공격 +방지 구현 +RED (d, e, f) SCM-1,4 +WS-12 +업데이트 메커니즘 제공 +RED (d, e, f) SUM- +1,3 +WS-13 +무선 네트워크 업데이트 +무결성 및 진본성 검증 +RED (d, e, f) SUM-2 +WS-14 +암호화 적정성 +RED (d, e, f) CRY-1 +WS-15 +적절한 암호화 키 사용 +RED (d, e, f) CCK-1,2 +WS-16 +암호화 키 고유성 +RED (d, e, f) CCK-3 +WS-17 +로그 생성 +RED (e, f) LGM-1,2,3 +WS-18 +시간 정보 포함 +RED (e, f) LGM-4 +WS-19 +최신 +소프트웨어 +및 +하드웨어 유지 +RED (d, e, f) GEC-1 +WS-20 +네트워크 +인터페이스 +노출 최소화 +RED (d, e, f) GEC- +2,3,4 +ISO 22166-1 5.6절 +WS-21 +외부 물리 인터페이스 +제한 +RED (d, e, f) GEC-5 +ISO 22166-1 5.6절 + + +--- + +01 +02 +03 +19 +WS-22 +외부 입력 관리 +RED (d, e, f) GEC- +6, 7 +WS-23 +장비 무결성 보장 +RED (f) GEC-8 +로봇 보안 취약점 점검 체크리스트의 참조 표준 및 규제 매핑 표 + + +--- + +20 + +### 1.3 해설서 구성 + +본 해설서는 다음과 같이 보안 요구사항, 목적, 점검 기준, 구현 및 점검 방안으로 구성된다. +보안 +요구사항 +(L1) 사용자 인증|사용자가 접근 가능한 모든 인터페이스에 대해서 모든 사용자를 인증하는 기능을 제공해야 한다. +(L2) 유일한 사용자 식별 및 인증|사용자가 접근 가능한 모든 인터페이스에 대해서 모든 사용자를 유일하게 +식별하고 인증하는 기능을 제공해야 한다. +(L4) 다중 사용자 인증|모든 사용자에 대해 다중 인증 기능을 적용해야 한다. +목적 +모든 접근 인터페이스에서 사용자를 유일하게 식별하고 인증하여 비인가 사용자의 접근 및 오용을 차단하고, +접근 통제의 신뢰성을 보장한다 +점검 기준 +L1.사용자 인증 +L1-1.인간 사용자가 인터페이스 접근 시 사용자 인증 수행 여부 +L2.유일한 사용자 식별 및 인증 +L2-1.각 사용자 유일 식별 여부 +L4.다중 사용자 인증 +L4-1.2개 이상의 인증 수단을 통한 사용자 인증 수행 여부 +구현 및 점검 방안 +L1 +L1-1. 인간 사용자가 인터페이스 접근 시 사용자 인증 수행 여부 +1) 로봇이 제공하는 인터페이스 및 서비스를 식별한다. +‘2.3. 인터페이스 식별’에서 사용자 인증 수행 대상이 되는 서비스를 식별한다. +다음과 같은 유형의 서비스들이 식별될 수 있다. +통신 유형 +통신 인터페이스 +제공 서비스 +무선 +네트워크 +Wi-Fi (AP 모드) +무선 네트워크 접속 제공 +NFC / RFID +사용자 인증 +Wi-Fi (STA 모드) +• HTTP/HTTPS 기반 Web UI +• REST API +• MQTT +• ROS 통신 +• WebSocket +• SSH +• Modbus/TCP +• OPC UA +• 자체 개발 프로토콜 +4G LTE, 5G +유선 +네트워크 +이더넷 + +#### 3.3.1 [IA-01] 사용자 식별 및 인증 + +해설서 예시(IA-01) +1 +2 +3 +4 +5 + + +--- + +01 +02 +03 +21 + +### 1.4 용어 정리 + +해설서 구성 설명 +번호 +구성 요소 +설명 +① +보안 요구사항 명 +•  해당 보안 요구사항의 고유 ID 및 보안 요구사항 명 +② +보안 요구사항 +•  시스템 또는 프로세스가 충족해야할 보안 요구사항을 명확히 기술 +•  보안수준(Security Level): IEC 62443-4-2는 기본 요구사항(CR, Control Requirement)과 +강화된 요구사항(RE, Requirement Enhancement)을 단계적으로 적용하여 SL1부터 SL4 +까지 4단계의 보안수준을 정의한다. 본 해설서는 이를 L1~L4로 표기한다. +•  보안수준이 높을수록 요구되는 보안 요구사항의 강도가 상이하므로, 로봇 시스템의 위험도, +운영 환경, 적용 목적을 고려하여 목표 보안 수준을 결정하고, 그에 부합하는 요구사항을 선택 +하여 적용해야 한다. +③ +목적 +•  요구사항이 필요한 이유와 달성하고자 하는 보안 목적을 설명 +④ +점검 기준 +•  요구사항 충족 여부를 판단하기 위한 구체적인 점검 기준을 제시 +⑤ +구현 및 점검 방안 +•  점검 기준을 실제로 검증 또는 적용할 수 있는 방안을 제시 +•  문서 검토, 기술 테스트, 설정 확인 등 실무 점검 방안을 포함 +SSDL (Secure Software Development Lifecycle) +소프트웨어 개발의 모든 단계(기획, 설계, 개발, 테스트, 배포, 유지보수)에서 보안 요구사항을 정의하고 보안을 체계적으로 적용하는 +개발 생명주기 +SDLC (Software Development Lifecycle) +소프트웨어를 개발하는 전체 생명주기 +SBOM (Software Bill of Materials) +소프트웨어에 포함된 모든 오픈소스, 라이브러리, 의존성 등 구성요소를 목록화하여 관리하는 문서로, 라이선스, 버전, 취약점 정보 포함 +IaC(Infrastructure as Code) +클라우드 인프라(서버, 네트워크, 데이터베이스 등)를 코드로 정의하고 관리하는 방식 +(예: Terraform, Ansible, HelmChart 등의 도구 사용) +CI/CD 파이프라인 +지속적 통합/배포 자동화 파이프라인 +보안 게이트 (Security Gate) +CI/CD 파이프라인에서 보안 검사를 통과해야만 다음 단계로 진행할 수 있도록 하는 체크포인트 +DevSecOps +개발(Development), 보안(Security), 운영(Operations)을 통합하여 전 개발 과정에서 보안을 고려하는 문화와 방식 + + +--- + +22 +SAST (Static Application Security Test) +소스 코드를 실행하지 않고 분석하여 코드 내 보안 취약점, 코딩 오류, 보안 결함을 찾는 정적 분석 방식 +MES (Manufacturing Execution System) +공장의 생산 설비와 공정을 실시간으로 제어하고 모니터링하는 시스템으로, 생산 계획부터 제품 완성까지의 모든 단계를 관리 +DAST (Dynamic Application Security Test) +실행 중인 애플리케이션을 대상으로 공격을 시뮬레이션하여 런타임 취약점과 보안 문제를 찾는 동적 분석 방식 +EWS (Engineering Workstation) +엔지니어가 로봇 소프트웨어를 개발, 디버깅, 테스트하는 전문 컴퓨터 시스템 +IAST (Interaction Application Security Test) +애플리케이션 실행 중 내부 동작을 모니터링하면서 코드 실행 경로와 데이터 흐름을 분석하여 취약점을 찾는 방식 +WMS (Warehouse Management System) +창고의 재고와 물류를 효율적으로 관리하는 시스템으로, 상품 입고부터 출고까지의 모든 과정을 자동화하고 추적 +LoRa (Long Range) +장거리(10km 이상), 저전력 특성을 가진 광역 무선 통신 기술로, IoT 센서와 기기 간 데이터 전송에 사용되는 무선 통신 방식 +CA (Certificate Authority) +디지털 인증서를 발급, 갱신, 폐지하는 신뢰할 수 있는 제3자 기관 +SCA (Software Composition Analysis) +프로젝트의 모든 의존성과 오픈소스 라이브러리를 식별하고, 알려진 취약점(CVE) 데이터베이스와 비교하여 보안 위험을 찾는 분석 방식 +형상 관리 시스템 (Configuration Management System) +소프트웨어, 하드웨어, 문서 등 모든 산출물의 버전, 변경사항, 설정을 체계적으로 관리하고 추적하는 시스템 (예: Github, GitLab) +AP 모드 (Access Point Mode) +무선 접근점으로 작동하여 다른 기기들이 직접 연결할 수 있게 하는 무선 통신 모드 +위협 모델링 (Threat Modeling) +소프트웨어 또는 시스템에 가능한 보안 위협을 식별하고 분석하여 대응 방안을 수립하는 체계적인 프로세스 +STA 모드 (Station Mode) +기존의 무선 공유기(AP)에 연결하여 네트워크에 참여하는 무선 클라이언트 모드 +SLA (Service Level Agreement) +서비스 제공자와 사용자 간의 계약으로, 서비스의 가용성, 성능, 지원 수준을 명시 + + +--- + +01 +02 +03 +23 +CRL (Certificate Revocation List) +더 이상 유효하지 않은 폐지된 디지털 인증서의 목록으로, CA에서 정기적으로 배포 +온프레미스 (On-Premises) +조직이 자체 데이터센터나 사무실에서 직접 시스템을 구축하고 운영하는 방식 +OCSP (Online Certificate Status Protocol) +인증서의 폐지 여부를 실시간으로 조회하는 프로토콜로, CRL보다 최신 정보 제공 +하드닝 (Hardening) +운영 체제, 애플리케이션, 네트워크의 불필요한 기능을 제거하고 보안 설정을 강화하여 공격 표면을 최소화하는 과정 +QoS (Quality of Service) +네트워크 또는 서비스의 품질을 측정하고 관리하는 기준 +CISO (Chief Information Security Officer) +조직의 최고 정보보안 책임자로, 보안 전략 수립 및 조직 전체 보안 관리를 담당하는 경영진 +패스프레이즈 (Passphrase) +여러 단어를 조합하여 만든 길고 복잡한 비밀번호 +아티팩트 +소프트웨어 빌드 결과물로, 배포 가능한 최종 산출물 (예: API 문서, 설명서, 컴파일된 바이너리 등) +EoS (End of Support) +제조사가 제품에 대한 기술 지원, 버그 수정, 보안 패치 제공을 중단하는 공식 시점 +HMAC (Hash-based Message Authentication Code) +비밀키와 해시 함수를 조합하여 메시지의 출처 확인과 무결성을 동시에 검증하는 메시지 인증 코드 +EoL (End of Life) +제조사가 제품에 대한 모든 지원과 개발을 공식적으로 종료하는 시점 +MIC (Message Integrity Code) +메시지가 전송 중 변조되지 않았음을 확인하는 코드로, HMAC 기반으로 계산됨 +모바일 코드 (Mobile Code) +네트워크를 통해 전송되고, 다양한 시스템에서 실행될 수 있는 코드를 의미 (예: 자바 애플릿, 웹 스크립트, 앱 등) +거버넌스 +조직의 정책, 규칙, 절차를 수립하고 준수 여부를 감시하는 조직적 체계 및 의사결정 구조 + + +--- + +24 +ORM (Object-Relational Mapping) +객체 지향 프로그래밍의 객체와 관계형 데이터베이스의 테이블을 자동으로 매핑하는 기술 +WORM (Write Once Read Many) +한 번만 데이터를 쓸 수 있고, 그 이후는 여러 번 읽기만 가능한 저장소 +스택 트레이스 (Stack Trace) +프로그램 오류 발생 시 함수 호출 경로를 순차적으로 보여주는 디버깅 정보 +OTA (Over-The-Air) +네트워크를 통해 로봇에 소프트웨어 업데이트를 원격으로 전달하고 설치하는 방식 +RBAC (Role-Based Access Control) +사용자의 역할(관리자, 개발자, 사용자 등)에 따라 접근 권한을 부여하는 접근 제어 방식 +툴체인 (Toolchain) +소프트웨어 개발에 필요한 여러 도구를 체계적으로 연결한 통합 개발 환경 +Stateless 토큰 +서버에 상태를 저장하지 않고 토큰 자체에 정보를 담아서 검증하는 방식 +회귀 테스트 (Regression Test) +새로운 기능 또는 버그 수정 후 이전에 정상적으로 동작하던 기능이 손상되지 않았는지 확인하는 테스트 +ABAC (Attribute-Based Access Control) +사용자, 자원, 환경 등의 속성을 종합적으로 고려하여 접근 권한을 동적으로 결정하는 접근 제어 방식 +SIEM (Security Information and Event Management) +조직 전체의 보안 이벤트를 수집, 분석, 모니터링하여 보안 위협을 탐지하고 대응하는 시스템 +MFA (Multi-Factor Authentication) +무선 접근점으로 작동하여 다른 기기들이 직접 연결할 수 있게 하는 무선 통신 모드 +SOAR (Security Orchestration Automation and Response) +보안 도구들의 연동과 반복적인 보안 업무를 자동화하고 신속한 대응을 지원하는 플랫폼 +JWT (Json Web Token) +JSON 형식의 클레임(정보)을 담고 서명된 토큰 기반 인증 방식 +CRC (Cyclic Redundancy Check) +데이터 전송 오류를 감지하기 위한 오류 검사 코드로, 의도적 변조보다는 전송 오류 감지에 사용 + + +--- + +01 +02 +03 +25 +IDS (Intrusion Detection System) +네트워크 트래픽을 모니터링하여 침입 시도를 탐지하는 시스템 +A/B 파티션 +부팅 파티션을 2개로 분리하여 새 버전 업데이트 실패 시 이전 버전으로 안전하게 복구할 수 있도록 하는 방식 +IPS (Intrusion Prevention System) +네트워크 트래픽을 모니터링하면서 침입을 탐지하고 자동으로 차단하는 시스템 +CVE (Common Vulnerabilities and Exposures) +알려진 보안 취약점을 등록하고 관리하는 국제 표준 데이터베이스 +Fail-safe 모드 +시스템 오류 발생 시 안전한 상태로 종료되도록 설계된 모드 +RCA (Root Cause Analysis) +보안 사건이나 시스템 장애가 발생한 근본 원인을 체계적으로 분석하는 방법론 +PSIRT (Product Security Incident Response Team) +제조사의 보안 사고 대응팀으로, 취약점 보고 및 보안 패치 배포 담당 +HSM (Hardware Security Module) +암호화 키를 안전하게 보관하고 암호 연산을 수행하는 독립적인 하드웨어 보안 장비 +HMI (Human Machine Interface) +사람과 로봇 또는 기계 간의 상호작용 인터페이스 +QoS (Quality of Service) +네트워크 트래픽의 속도와 품질을 보장하기 위해 특정 데이터에 우선순위를 부여하는 기술 +ACL (Access Control List) +파일, 네트워크 자원 등에 접근할 수 있는 사용자 또는 그룹의 권한을 명시적으로 나열한 목록 +워치독 (Watchdog) +시스템이 무한 루프에 빠지거나 응답 없을 때 자동으로 시스템을 재부팅하는 타이머 +페일오버 (Failover) +주 시스템에 장애 발생 시 자동으로 예비 시스템으로 전환하는 방식 +지수 백오프 (Exponential Backoff) +네트워크 상에서 일시적인 오류가 발생했을 때, 재시도 간격을 점진적으로 늘려가며 재시도를 수행하는 알고리즘 + + +--- + +26 +TPM (Trusted Platform Module) +컴퓨터 또는 기기에 내장되어 암호화 기능과 보안 저장소를 제공하는 칩 +CSPRNG (Cryptographically Secure Pseudo-Random Number Generator) +암호학적으로 안전한 난수 생성기 +VLAN (Virtual LAN) +물리적 네트워크를 논리적으로 분할하여 서로 다른 보안 정책을 적용하는 네트워크 구성 +키 파생 (Key Derivation) +기본 키(마스터 키)에서 여러 개의 세션 키나 다른 목적의 키를 안전하게 유도하는 과정 +PFS (Perfect Forward Secrecy) +장기 비밀키가 노출되어도 과거 통신 내용이 복호화되지 않도록 하는 암호화 기법 +신뢰 앵커 (Trust Anchor) +인증서 검증의 시작점이 되는 신뢰할 수 있는 루트 인증서 +RNG (Random Number Generator) +난수 생성기 +DDS Security 플러그인 +DDS 미들웨어에서 보안 기능을 추가하기 위해 플러그인 형태로 제공되는 모듈 +COTS (Commercial Off-The-Shelf) +이미 개발되어 시판 중인 상용 제품 +PACE (Password Authenticated Connection Establishment) +비밀번호 기반으로 안전하게 연결을 설정하는 프로토콜 +Secure Element +스마트카드, SIM 카드 등에 내장된 보안 칩셋으로, 민감한 정보와 암호화 키를 안전하게 저장 +신뢰 체인 (Trust Chain) +클라이언트 인증서 검증 시 루트 CA부터 중간 CA, 최종 인증서까지 순차적으로 검증하는 경로 +RTC (Real Time Clock) +시스템의 정확한 시간을 유지하는 하드웨어 시계로, 전원이 끊어져도 시간 유지 +PKI (Public Key Infrastructure) +공개키 암호화를 기반으로 사용자 또는 기기의 신원을 확인하고 보안 통신을 제공하는 기반시설 + + +--- + +01 +02 +03 +27 +PBKDF +비밀번호에서 강한 암호화 키를 뽑아내기 위해 반복 연산을 적용하는 키 파생 함수 +SOG-IS +유럽 내 여러 국가의 정보보호 인증기관들이 모여 만든 IT 보안 평가 및 인증 상호인정 협약 + + +--- + + + +--- + + + +--- + +30 +02 +로봇 시스템 내 +보호 자산 식별 + +### 2.1 자산 식별 프로세스 + +로봇 보안 취약점 점검을 수행하기에 앞서, 어떤 자산이 보안 위협으로부터 보호받아야 하는지 파악하기 위해 로봇 +시스템 내 보호해야 할 자산을 식별해야 한다. +로봇 시스템 내 보호해야 할 자산은 크게 네 가지 범주로 구분된다. +로봇 시스템 전체를 구성하는 하드웨어 및 소프트웨어 요소를 의미하며, 손상되거나 조작될 경우 시스템 전체의 +기능을 상실할 수 있다. +① 구성요소 +로봇 시스템 구성요소간 또는 사용자와 상호작용하는 모든 경로를 의미하며, 공격자의 진입점이 될 수 있다. +② 인터페이스 +로봇 시스템 구성 요소가 수행하는 모든 동작과 프로세스를 의미하며, 각 기능에 필요한 권한 제어, 기능 구현 과정에서 +발생할 수 있는 잠재적 취약점, 그리고 구성 요소가 공격자에게 침해되었을 경우 발생할 수 있는 영향을 식별할 수 +있다. +③ 기능 +로봇 시스템 구성 요소가 수집, 처리, 저장하는 모든 정보를 의미하며, 이에 대한 무결성, 기밀성, 가용성이 보장되어야 한다. +④ 데이터 +먼저 로봇 시스템 아키텍처 내에서 모든 구성요소를 식별하여 목록화해야 한다. 다음은 식별될 수 있는 로봇 시스템 +구성 요소의 예시이다. + +### 2.2 구성요소 식별 + +구성 요소 +주요 역할 +예시 +로봇 본체 +할당된 작업을 자율 또는 반자율로 수행하며, 센서로부터 수집한 정보를 +처리하여 액추에이터를 제어함으로써 물리적 동작을 실행하는 핵심 장치 +로봇 팔, 휴머노이드, AMR 등 +로봇 제어 단말 +현장에서 운영자가 로봇을 수동으로 제어하거나 실시간 상태를 +모니터링하며, 로봇의 동작을 즉시 조작할 수 있는 휴대용 운영 장치 +로봇 제어기, 티칭 펜던트, HMI 등 +로봇 관리 서버 +배포된 다수의 로봇을 중앙에서 통합 관리하고, 로봇과 외부 시스템 간의 +데이터 연동을 담당하는 핵심 제어 서버 +FMS 서버, SCADA 등 + + +--- + +01 +02 +03 +31 +데이터 서버 / +클라우드 +로봇 운영 중 생성되는 대량의 데이터를 장기간 저장하고, 이를 분석 및 +최적화에 활용하며 외부 분석 서비스와 연동되는 저장소 +MES, WMS, 로봇 관리 플랫폼 등 +운영자 단말 +원격 위치에서 관리 서버에 접속하여 로봇을 제어하고, 시스템 설정을 +변경하며, 전체 시스템 상태를 모니터링하는 사용자 접근 장치 +태블릿, EWS 등 +통신 유형 +통신 인터페이스 +제공 서비스 +무선 네트워크 +Wi-Fi (AP 모드) +•  무선 네트워크 접속 제공 +LoRa / ZigBee +•  센서 데이터 업링크 +•  저속 제어 명령 +•  노드 상태 보고 +Bluetooth +•  모바일 앱 제어 +NFC / RFID +•  사용자 인증 +•  장치 인증 +레거시 RF +•  간단한 로봇 제어 +Wi-Fi (STA 모드) +•  HTTP/HTTPS 기반 Web UI +•  REST API +•  MQTT +•  ROS 통신 +•  WebSocket +•  SSH +•  Modbus/TCP +•  OPC UA +•  자체 개발 프로토콜 +4G LTE, 5G +유선 네트워크 +이더넷 +물리 인터페이스 +USB +•  이동식 저장 매체 연결 +•  USB 리시버 +디버깅 포트(UART, JTAG) +•  로컬 시리얼 콘솔 접근 +•  펌웨어 덤프 +직렬 통신 +•  센서 및 액추에이터 제어(I2C / SPI) +•  산업용 제어 통신(CAN 버스, Profibus / Profinet) +로봇 시스템 구성요소 예시 +로봇 시스템 내 구성요소간의 통신 인터페이스 및 각 인터페이스에서 제공되는 서비스를 식별한다. 다음은 식별 +가능한 로봇 시스템 구성요소인터페이스의 예시이다. + +### 2.3 인터페이스 식별 + +로봇 시스템 인터페이스 예시 + + +--- + +32 +로봇 시스템 내 구성 요소가 수행하는 주요 기능을 식별한다. 다음은 식별 가능한 기능의 예시이다. + +### 2.4 기능 식별 + +구분 +주요 기능 +설명 +제어 및 운용 기능 +로봇 제어 +주행, 이동, 작업 수행 등 로봇의 물리적 동작을 제어 +원격 제어 / 명령 전송 +관리 서버 또는 원격 운영자 단말에서 로봇으로 제어 명령을 전달 +모니터링 및 관리 +기능 +상태 모니터링 +로봇의 전원 상태, 센서 상태, 오류 등을 실시간으로 확인 +로그 수집 / 분석 +동작 로그, 통신 로그 등을 수집하여 저장 및 분석 +이벤트 / 알람 통보 +이상 동작 또는 오류 발생 시 운영자에게 알림 전송 +업데이트 및 +유지보수 기능 +소프트웨어 / 펌웨어 업데이트 +원격 또는 로컬에서 시스템 소프트웨어를 업데이트 +백업 / 복구 +로봇의 설정, 로그, 데이터 등을 백업하거나 복구 +데이터 관리 기능 +데이터 업로드 / 다운로드 +작업 기록, 센서 데이터 등을 서버 또는 클라우드로 전송하거나 수신 +인증 및 접근 제어 +기능 +사용자 인증 / 권한 관리 +운영자, 관리자, 외부 시스템 등의 인증 및 접근 권한을 검증 +통신 및 연동 기능 +로봇–서버 간 통신 +MQTT, REST, WebSocket 등의 프로토콜을 이용한 양방향 통신 수행 +외부 시스템 연동 +외부 클라우드, OTA 서버, 관리 플랫폼 등과의 연동 지원 +로봇 시스템 기능 예시 + + +--- + +01 +02 +03 +33 +로봇 시스템 내 구성 요소들의 기능에서 수집·처리·저장되는 주요 데이터 항목을 식별한다. 다음은 식별 가능한 +데이터의 예시이다. + +### 2.5 데이터 식별 + +데이터 항목 +설명 +처리 주체 +저장 위치 +로봇 제어 명령 데이터 +이동, 작업 수행 등 로봇의 동작을 제어하기 위한 명령 +제어 단말, +관리 서버 +로봇 본체 메모리 +(임시) +센서 데이터 +센서에서 수집된 환경 인식 및 상황 관련 데이터 +로봇 본체 +로컬 저장소 / 클라우드 +로봇 상태 정보 데이터 +로봇의 전원, 위치, 오류, 네트워크 상태 등 +로봇 본체, +관리 서버 +관리 서버 / DB +운영 로그 / +이벤트 데이터 +로봇 및 서버의 동작 로그, 통신 로그, 접근 로그 등 +로봇 본체, +관리 서버 +관리 서버 / 데이터 +서버 +사용자 인증 정보 +사용자 계정, 비밀번호, 인증 토큰, 접근 권한 +관리 서버 +DB / 암호화 저장소 +업데이트 파일 / 패키지 +소프트웨어 또는 펌웨어 업데이트용 바이너리, +서명 메타데이터 +관리 서버 +데이터 서버 +로컬 저장소 / 배포 +서버 +설정 / +파라미터 데이터 +로봇 동작 파라미터, 네트워크 설정, 제어 임계값 등 +로봇 본체, +관리 서버 +로컬 설정 파일 / DB +학습 데이터 / +분석 결과 +로그 기반의 모델 학습 데이터, 예측 결과 등 +데이터 서버 / +클라우드 +클라우드 저장소 +백업 데이터 +로봇 설정, 로그, 지도, 인증키 등의 백업 파일 +관리 서버, +데이터 서버 +백업 스토리지 +로봇 시스템 데이터 예시 + + +--- + + + +--- + + + +--- + +36 +번호 +체크리스트 항목 +SSDF-01 +소프트웨어 개발 보안 요구사항 정의 +SSDF-02 +보안 역할 및 책임 관리 +SSDF-03 +보안 개발 툴체인 관리 +SSDF-04 +보안 점검 기준 정의 및 데이터 관리 +SSDF-05 +개발 환경 보호 +SSDF-06 +코드 무단 접근 및 변조 방지 +SSDF-07 +소프트웨어 배포 무결성 검증 제공 +SSDF-08 +소프트웨어 배포 보관 및 보호 +SSDF-09 +보안 설계 및 위험 완화 체계 수립 +SSDF-10 +보안 설계 검토 수행 +SSDF-11 +검증된 라이브러리 재사용 +SSDF-12 +안전한 코딩 가이드 준수 +SSDF-13 +컴파일러 및 빌드 환경 보안 구성 +SSDF-14 +코드 검토 및 분석 +SSDF-15 +실행 코드 테스트 +SSDF-16 +안전한 초기 보안 설정 구성 +SSDF-17 +취약점 식별 및 관리 +SSDF-18 +우선순위 기반 취약점 평가 및 대응 조치 +SSDF-19 +취약점 근본 원인 분석 +SSDF 체크리스트 항목 +안전한 로봇 시스템 내의 소프트웨어 개발을 위한 보안 요구사항인 SSDF 체크리스트 항목은 다음과 같다. +3.1 SSDF 점검 체크리스트 +03 +로봇 보안 취약점 점검 체크리스트 +상세 해설 + + +--- + +01 +02 +03 +37 +보안 +요구사항 +소프트웨어 개발 인프라, 프로세스, 제품, 외부 구성요소 전반에 대해 보안 요구사항을 정의·문서화하고 정기적으로 +검토·갱신해야 한다. +목적 +개발 전 과정에서 일관된 보안 기준을 적용하여 보안 취약점과 공급망 위험을 예방한다. +점검 기준 +소프트웨어 개발 보안 요구사항 정의 + +## 1. 개발 인프라 및 프로세스 보안 요구사항 정의 여부 + + +## 2. 제조사 개발 소프트웨어 보안 요구사항 정의 여부 + + +## 3. 외부 및 상용 구성요소 보안 요구사항 정의 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템의 소프트웨어 개발 인프라 및 프로세스에 대한 보안 요구사항이 정의되어 있는지 확인한다. + +•  소프트웨어 개발 인프라 및 프로세스의 보안은 로봇 시스템의 전체 보안 체계의 기초가 되며 보안 위협이 실제 로봇 시스템 +운영 환경까지 확산될 수 있다. +•  보안 요구사항 문서는 제조사의 보안 정책, 표준, 절차서 등과 일관성 있게 연계되어야 하며, 실제 운영환경에 반영 가능한 +수준으로 구체화되어야 한다. +[방안 1] 개발 인프라 및 프로세스에 대한 보안 요구사항 정의 +개발 인프라 및 프로세스에 대하여 정의될 수 있는 보안 요구사항은 다음과 같다. +항목 +보안 요구사항 예시 +개발 서버 보안 +•  개발 서버에 대한 역할별 접근 제어 정책 +•  개발 서버 보안 패치 및 업데이트 절차 +•  개발 서버 접근 로그 기록 및 모니터링 정책 +•  개발 서버 격리 요구사항 +코드 저장소 보안 +•  코드 저장소에 대한 접근 제어 정책 +•  소스코드 변경 이력 추적 및 감시 절차 +•  암호, 인증키, 개인정보 등 민감 정보의 저장 금지 정책 +•  코드 리뷰 및 승인 프로세스 +•  코드 저장소 백업 및 복구 절차 +빌드·배포 환경 보안 +•  CI/CD 파이프라인 보안 요구사항 +•  빌드 산출물의 무결성 검증 절차 +•  배포 전 정적·동적 보안 분석 요구사항 +•  배포 로그 및 감사 기록 보관 정책 +•  배포 승인 및 검증 절차 +개발자 접근 관리 +•  개발자 계정 관리 및 최소 권한 원칙에 따른 권한 분리 정책 +•  개발자 퇴직 시 접근 권한 회수 절차 +•  개발 환경과 운영 환경의 격리 요구사항 +•  개발자 보안 교육 및 역할별 책임 정의 +보안 검증 및 모니터링 +•  정기적인 개발 인프라 보안 감사 및 취약점 평가 계획 +•  개발 인프라 보안 사건 발생 시 대응 절차 +•  개발 환경 보안 상태에 대한 지속적인 모니터링 정책 +개발 인프라 및 프로세스 보안 요구사항 예시 + +#### 3.1.1 [SSDF-01] 소프트웨어 개발 보안 요구사항 정의 + + + +--- + +38 +2 + +## 01. 제조사에서 개발하는 소프트웨어의 보안 설계 및 구현 요구사항이 정의되어 있는지 확인한다. + +•  안전한 설계와 구현 없이는 이후 보안 검증 단계에서 근본적인 취약점을 제거하기 어려우므로, 제조사는 소프트웨어 개발 +시 적용해야 할 보안 코딩 표준, 보안 요구사항을 사전에 명확히 정의하여 개발 조직 전체가 일관되게 따를 수 있도록 정의해 +야 한다. +[방안 1] KISA의 소프트웨어 개발 보안 가이드 (2021.11) +해당 가이드는 20개의 보안 설계 기준 및 시큐어 코딩 가이드를 제공하고 있으며, 보안 요구사항을 정의하는 방안도 제시하고 +있다. +[방안 2] OWASP Cheat Sheet Series Project +OWASP는 다음과 같은 여러 기능에 대한 구현 가이드라인을 제공하고 있다. +KISA 소프트웨어 개발 보안 가이드 (좌) 보안 설계 기준 / (우) 시큐어 코딩 가이드 +OWASP Cheat Sheet Series 웹 페이지 + + +![이미지 38-0](images/p0038_img0.png) + + +![이미지 38-1](images/p0038_img1.png) + + +--- + +01 +02 +03 +39 +3 + +## 01. 외부 또는 상용 소프트웨어 구성요소를 도입하는 경우, 조직의 보안 요구사항이 계약 문서 또는 보안 검증 + +절차에 반영되어 있는지 확인한다. +•  외부 또는 상용 소프트웨어 구성요소(Third-party Library, 프레임워크 등)의 도입은 개발 생산성을 높일 수 있으나, 해당 +요소를 통해 미검증된 보안 취약점이 시스템에 포함될 수 있다. +•  제조사는 외부 소프트웨어 도입 시 보안 요구사항을 사전에 정의하고, 이를 계약 문서나 검증 절차에 반영해야 한다. +[방안 1] 계약 문서에 보안 요구사항 명시 +외부 소프트웨어 도입 시 다음과 같은 보안 요구사항을 계약 문서에 포함시킬 수 있다. +[방안 2] NIST SP 800-53 +NIST SP 800-53은 공급망 위험 관리 공급자 선정, 계약 관리, 보안 요구사항 정의 등을 포함한 공급망 보안 통제 항목 +제공하므로 외부 소프트웨어 검증 기준을 정의하는데 활용될 수 있다. +항목 +내용 +보안 취약점 공개 +•  공급자가 알려진 보안 취약점을 사전에 공개하고 업데이트 일정 제시 +소스코드 검토 +•  필요시 소스코드 공개 및 보안 검토 권리 명시 +라이선스 및 의존성 +•  사용된 오픈소스 라이선스, 의존 라이브러리 목록 제공 +보안 업데이트 정책 +•  취약점 발견 시 패치 제공 및 지원 기간 명시 +감사 및 인증 +•  감사 및 인증보안 감사, 취약점 스캔 결과 제출 요구 +공급자 보안 요구사항 예시 + + +--- + +40 +보안 +요구사항 +SDLC 전 단계에서 보안 관련 역할과 책임이 명확히 정의되고 주기적으로 검토되어야 하며, 해당 역할을 수행할 +인력에게 적절한 교육이 제공되어야 한다. +목적 +조직 내 모든 구성원이 보안 관련 역할과 책임을 명확히 인식하고 수행하도록 하여, 보안이 개발 프로세스 전반에 +일관되게 적용되도록 한다. +점검 기준 +보안 역할 및 책임 관리 + +## 1. 보안 역할 및 책임 정의 여부 + + +## 2. 역할 기반 보안 교육 제공 여부 + + +## 3. 경영진의 보안 개발 참여 및 의사전달 체계 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템의 SDLC에 참여하는 인력의 역할과 책임이 정의 및 문서화되어 있는지 확인한다. + +•  인력의 역할과 책임이 불명확하면 보안 활동 간 중복이나 누락이 발생할 수 있으므로 제조사는 SDLC의 각 단계에서 누가 +어떤 보안 활동을 수행해야 하는지를 명확히 정의하고 문서화하여야 한다. +[방안 1] OWASP SAMM 기술 프레임워크 +OWASP SAMM(Software Assurance Maturity Model)은 소프트웨어 보안을 개선하기 위한 기본 프레임워크로, 제조사가 +보안 성숙도를 평가하고 어떤 보안 활동을 수행해야 하는가를 정의한다. +OWASP SAMM 기술 프레임워크(Skills Framework)는 OWASP SAMM의 각 보안 활동 스트림을 구체적인 책임에 매핑하는 +실행 가이드로 다음과 같이 15개의 직무에 따른 역할을 정의하고 있다. + +#### 3.1.2 [SSDF-02] 보안 역할 및 책임 관리 + +직무 +설명 +예시 역할 +제품 보안전략 수립 +제품 보안 프로그램 구축·확장 +제품 보안 책임자, CISO +조직 보안 전략 수립 +조직 전체 보안 전략 총괄 +CISO, 사업부 정보보안책임자(BISO), 보안 +담당자 +비즈니스 전략 수립 +회사 목표 달성을 위한 고위 의사결정 +경영진(C-level), 사업부장, 부회장(VP) +시스템·기술 아키텍처 +설계 +기술 솔루션이 요구사항에 부합하도록 구조 +설계 +개발 팀장, 기술 팀장 +보안 전파 +팀 내 보안 관행 전파 및 SPOC 역할 +보안 엔지니어 +규제 준수 +법·규제·표준 준수 관리 +법무 담당자 +제품 전략 및 보안 반영 +제품 비전·우선순위 설정과 보안 요구 반영 +제품 소유자, 제품 관리자 +보안 교육 +임직원 대상 보안 교육·훈련 +제품 보안 책임자, 보안 교육 담당자 +개발 기술 리더십 +보안 코드 작성·보안 도구 적용·코드 리뷰 +개발 팀장 +공격적 보안 테스트 +공격 시뮬레이션으로 취약점 발견 +보안 테스터 +방어적 보안 테스트 +위협 인텔·취약점 분석·탐지·대응 +보안 분석가, QA 엔지니어 +공급망 보안 +공급업체 선정·계약·평가 +구매 담당자, 공급망 관리자 +빌드/CI/CD 보안 +빌드·CI/CD 자동화 및 보안 게이트 구축 +DevOps 엔지니어, 빌드 담당자 + + +--- + +01 +02 +03 +41 +[방안 2] CLASP 개발 보안 방법론 +CLASP(Comprehensive, Lightweight Application Security Process)는 SW 개발 보안 방법론으로 7개의 역할을 구분하여 +보안 활동에 관한 지침을 제공하고 있다. +보안 운영 +실시간 탐지·대응·보안 인프라 운영 +보안 엔지니어, 보안 분석가 +시스템·네트워크 +인프라 +하드웨어·OS·네트워크 등 기반 인프라 +운영 +시스템 엔지니어, DevOps 엔지니어 +OWASP SAMM 기술 프레임워크에 정의된 직무에 따른 역할 및 책임 +CLASP에 정의된 역할에 따른 보안 활동 +역할 +보안 활동 +프로젝트 관리자 +(Project Manager) +•  조직 내 보안 인식 향상 +•  조직의 보안 상태 모니터링 +•  비즈니스 지표 정의 및 적용 +요구사항 명세 담당자 +(Requirement +Specifier) +•  보안 관련 비즈니스 요구사항 정의 +•  아키텍처의 보안 요구사항 분석 +•  보안 수준을 재사용 가능한 형태로 문서화 +•  보안 위험 명확화 및 영향 분석 +아키텍트 (Architect) +•  보안 메커니즘이 취약점을 만들지 않도록 보장 +•  보안 기술이 시스템 전체에 적절히 반영되도록 관리 +•  시스템 기반 위협 식별 +•  보안 요구 책임 소재 명확화 +•  테스트 단계에서 요구사항 구현 확인 지원 +설계자 (Designer) +•  보안 요구사항을 충족시킬 기술 판단 및 올바른 사용 방법 이해 +•  보안 결함 분석 및 해결 방안 제안 +•  공격 표면 문서화 +•  타사 소프트웨어 구성요소의 보안 문제 고려 +개발자 (Implementer) +•  보안 요구사항을 코드에 정확히 반영 +•  보안 기능을 사용자가 안전하게 사용할 수 있도록 구현 +테스트 분석가 +(Test Analyst) +•  보안 결함 발견을 위한 관련 위험 이해 +•  보안 결함 확인을 위한 도구 활용 능력 보유 +•  요구사항 테스트, 회귀 테스트 수행 +•  보안 중심 테스트 도구 활용 +보안 감사자(Security +Auditor) +•  프로젝트 문서 정확성 평가 +•  요구사항 적절성 검토 +•  보안 제어 적절성 점검 +•  구현 상태 기반 결함 파악 및 위험 식별 +•  정책 및 규제 준수 여부 평가 +•  코드 검토, 설계 검토 수행 + + +--- + +42 +2 +01. SDLC에 참여하는 인력에게 역할별 보안 교육이 정기적으로 제공되고 있는지 확인한다. +•  로봇 시스템 개발에 참여하는 각 역할별로 필요한 보안 지식과 역량을 파악하여 이에 맞는 교육 프로그램을 제 +공해야 한다. +•  교육 프로그램은 전자 학습(E-Learning), 집합 교육, 워크숍, 외부 교육 등으로 제공될 수 있다. +[방안 1] OWASP SAMM 기술 프레임워크 +“1. 보안 역할 및 책임 정의 여부” 항목에서 언급된 OWASP SAMM 기술 프레임워크 직무에 대하여 다음과 같은 +역량을 명시하고 있다. +[방안 3] RACI 매트릭스 +RACI(Responsible, Accountable, Consulted, Informed) 매트릭스는 로봇 시스템 SDLC의 각 보안 활동별로 +실무 담당자(R), 최종 책임자(A), 조언자(C), 보고 대상자(I)를 명확히 정의하는 도구로, 각 활동마다 역할과 책임을 +명확하게 지정할 수 있다. +RACI 매트릭스 작성 예시 +직무 +필요 역량 +제품 보안 전략 수립 +고수준 SDLC 지식, 보안 프레임워크 선정·적용, 위험 평가 전문성 +조직 보안 전략 수립 +보안 정책 이해, 리스크 관리 전문성, 규제/컴플라이언스 지식 +비즈니스 전략 수립 +비즈니스 감각, 리스크 관리 +시스템·기술 아키텍처 설계 +보안 아키텍처, 보안 표준, 위협 모델링 +보안 전파 +광범위한 고수준의 보안 지식, 교육 및 멘토링, 기술 문서 작성 +규제 준수 +규제 지식, 컴플라이언스 관리 +제품 전략 및 보안 반영 +시장 보안 요구 이해, 제품 아키텍처·보안 기본 이해 +보안 교육 +고수준 보안 지식, 보안 교육 프로그램 개발, 보안 자격증 지식 +개발 기술 리더십 +고급 프로그래밍 숙련, 코드 품질 및 보안 개발 표준, 개발 프레임워크 보안 이해 +공격적 보안 테스트 +모의해킹 도구 지식, 취약점 평가 및 보고, 익스플로잇 기술 +방어적 보안 테스트 +위협 인텔리전스, 모니터링 및 탐지, 사고 대응 +공급망 보안 +보안 표준 지식, 공급망 보안 평가, 공급업체 계약 보안 조항 +빌드/CI/CD 보안 +CI/CD 보안, 인프라 보안, 자동화 보안 스캐닝 및 SBOM 지식 +보안 운영 +사고 대응 전문성, 모니터링·탐지 도구 지식, 네트워크 보안 +시스템·네트워크 인프라 +시스템 및 인프라 보안, 네트워크 설계·관리, 클라우드 보안 +OWASP SAMM 기술 프레임워크에 정의된 직무에 따른 필요 역량 + + +![이미지 42-0](images/p0042_img0.png) + + +--- + +01 +02 +03 +43 + +## 02. 보안 교육에 대한 정량적 지표와 정성적 평가를 통해 교육의 효과를 측정하고 개선하고 있는지 확인한다. + +•  보안 교육의 효과성을 측정하기 위해 활용될 수 있는 지표는 다음과 같다. +3 + +## 01. 경영진이 보안 개발 활동에 공식적으로 참여하거나 승인하는 체계를 갖추고 있는지 확인한다. + +•  경영진의 공식적 참여 및 승인 없이는 보안 활동이 조직의 우선순위에서 후순위로 밀려날 수 있으므로 보안이 조직 전체의 +전략적 과제로 인식되도록 해야 한다. +•  경영진은 사이버보안 정책 및 전략을 승인해야 하며, 정기적으로 검토하고 필요 시 개선해야 한다. +보안 교육 효과 측정 지표 예시 +측정 지표 +평가 방법 +목표값 +교육 이수율 +대상인원 대비 이수인원 비율 +90% 이상 +교육 만족도 +교육 후 설문조사 +3.5점 이상 +역량 평가 +필기시험, 실습과제 +80점 이상 +보안 결함 발견 +개발 단계 발견 비율 +연 5% 증가 +취약점 감소 +프로덕션 취약점 감소 +연 10% 감소 + + +--- + +44 +보안 +요구사항 +SDLC 각 단계에서 사용하는 개발 및 보안 툴체인을 정의·통합·운영하여, 자동화된 보안 검증과 감사 추적성을 +확보해야 한다. +목적 +보안 검증, 빌드, 배포 등 SDLC 단계별로 사용되는 툴체인을 일관되게 구성·운영하여, 보안 프로세스의 자동화와 +재현성을 확보한다. +점검 기준 +보안 개발 툴체인 관리 + +## 1. 보안 툴체인 구성 정의 여부 + + +## 2. 보안 툴체인 운영 및 유지보수 보안성 확보 여부 + + +## 3. 보안 툴체인 감사 로그 및 아티팩트 관리 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템 개발에 사용되는 툴체인의 구성요소가 명확히 정의 및 문서화되어 있으며, 연동 정책이 수립되어 + +있는지 확인한다. +•  SDLC 전 과정에서 일관된 개발·보안 기준을 유지하고 자동화 기반의 품질·보안 확보를 가능하게 하기 위하여 툴체인을 +통합 관리하여야 한다. +[방안 1] OWASP DevSecOps 가이드라인 +OWASP DevSecOps 가이드라인은 안전한 파이프라인 구현을 위한 모범 사례를 제시하고 있으며, 다음과 같은 기본 +단계를 구현하는 것을 권고한다. + +2 + +## 01. 툴체인의 운영 및 유지보수 절차에 대한 보안성이 확보되어 있는지 확인한다. + +•  툴체인의 운영 및 유지보수 과정에서 보안 취약점이 발생할 수 있으므로 제조사는 툴체인 구성요소의 보안 절차를 +수립하여야 한다. +[방안 1] 툴체인 보안 운영 정책 수립 +툴체인 구성 요소의 안전한 운영을 위해 다음과 같은 보안 정책을 수립할 수 있다. + +#### 3.1.3 [SSDF-03] 보안 개발 툴체인 관리 + +OWASP DevSecOps 가이드라인에서 제시된 기본 보안 툴체인 +항목 +내용 +정기적 업데이트 관리 +•  보안 패치 및 업데이트 계획 수립 +•  테스트 환경에서 사전 검증 +•  프로덕션 배포 절차 정의 +•  업데이트 이력 기록 +항목 +내용 +잠재적인 자격 증명 유출을 찾기 위해 Git 저장소를 스캔 +SAST +•  정적 애플리케이션 보안 테스트 +SCA +•  소프트웨어 구성 분석 +IAST +•  대화형 애플리케이션 보안 테스트 +DAST +•  동적 애플리케이션 보안 테스트 +IaC 스캐닝 +•  Terraform, HelmChart 코드를 스캐닝하여 잘못된 구성을 찾음 +인프라 스캐닝 +규정 준수 확인 + + +![이미지 44-0](images/p0044_img0.png) + + +--- + +01 +02 +03 +45 +[방안 2] 툴체인 구성요소보안 관리 +툴체인 구성요소마다 다음과 같은 보안 관리 활동을 수행할 수 있다. +3 + +## 01. 빌드·검증·배포 로그 등 결과물이 무결성 검증 가능한 형태로 저장·관리되고 있는지 확인한다. + +•  빌드·검증·배포 과정의 로그 및 결과물이 변조되지 않고 신뢰성 있게 관리되어야 추적성과 감사 추적(Audit Trail)이 +가능하므로, 제조사는 결과물에 대한 무결성 검증 메커니즘을 구현하여야 한다. +[방안 1] 무결성 검증 체계 수립 +제조사는 빌드·검증·배포 과정의 결과물이 변조되지 않도록 다음과 같은 방법을 통해 무결성 검증 체계를 구축할 수 있다. +접근 제어 +•  툴체인 접근 권한 최소화 +•  사용자 인증 강화(MFA) +•  역할 기반 접근 제어(RBAC) 구현 +•  주기적 권한 검토 +감사 로깅 +•  모든 접근 기록 로깅 +•  변경사항 추적 및 기록 +•  로그 보관 기간 정의 +•  로그 변조 방지 +보안 모니터링 +•  실시간 이상 탐지 +•  보안 사고 대응 절차 +•  정기적 보안 검토 +•  취약점 스캔 실행 +백업 및 복구 +•  정기적 백업 수행 +•  복구 테스트 실행 +•  복구 시간 목표(RTO) 정의 +•  재해 복구 계획 수립 +구성요소 +보안 항목 +버전 관리 시스템(Git) +접근 권한 관리, 커밋 서명 검증, 저장소 감사 로깅 +CI/CD 파이프라인 +파이프라인 구성 정기 검토, 비밀값(DB 연결 정보, API 키, 인증서 등) 안전 관리, 보안/품 +질 정책 실행 여부 확인 +빌드 환경 +격리된 빌드 환경 유지, 의존성 관리(SCA), 악성코드·무결성 스캔 수행 +코드 분석 도구 +규칙(Signatures/Ruleset) 업데이트, 분석 정확도 검증, 결과 검토 및 오탐/미탐 관리 +배포 도구 +배포 권한 관리, 배포 정책 준수 여부 확인, 변경 기록 및 롤백 절차 검토 +항목 +활동 +해시값 검증 +모든 결과물에 해시값 생성 및 저장 +디지털 서명 +결과물에 디지털 서명 적용 및 검증 +접근 제어 +로그 및 결과물 접근 권한 제한 및 이력 기록 +변조 감지 +저장소 읽기 전용 설정 및 정기적 무결성 검사 +보관 기간 +보관 기간 정책 수립 및 운영 +툴체인 보안 정책 예시 +툴체인 보안 관리 활동 예시 +보안 개발 아티팩트 무결성 검증 방법 예시 + + +--- + +46 +보안 +요구사항 +소프트웨어 개발 생명주기 전 과정에서 보안 점검 기준을 정의하고, 해당 기준에 따라 산출되는 보안 점검 결과를 +안전하게 수집·보호해야 한다. +목적 +보안 점검 절차의 일관성과 신뢰성을 확보하여, 개발 과정에서 발생할 수 있는 보안 위험을 체계적으로 관리한다. +점검 기준 +보안 점검 기준 정의 및 데이터 관리 + +## 1. 소프트웨어 보안 점검 기준 정의 및 관리 여부 + + +## 2. 보안 점검 기준 데이터 수집 및 보호 체계 여부 + +구현 및 점검 방안 +1 + +## 01. 제조사가 SDLC 전 단계에서 보안 점검을 위한 기준을 명확히 정의하고 지속적으로 관리하고 있는지 확인한다. + +•  보안 점검 기준이 명확하지 않으면 각 단계별로 보안 활동의 수준이 불일치할 수 있으므로, 제조사는 SDLC 전 단계에서 +수행해야 할 보안 점검 기준을 정량적 지표 또는 정성적 지표로 정의해야 한다. +[방안 1] SDLC 단계별 보안 점검 기준 정의 +제조사는 SDLC 각 단계 별로 다음과 같은 보안 점검 기준을 정의하고 운영할 수 있다. +2 + +## 01. 보안 점검 결과, 취약점 정보, 승인 이력 등 관련 데이터가 수집·보존되고 있는지 확인한다 + +•  보안 점검 관련 데이터가 수집 및 보존되지 않으면 추적성 확보가 불가능하므로, 제조사는 관련 데이터를 +안전하게 수집하고 정책에 따라 보존해야 한다. + +#### 3.1.4 [SSDF-04] 보안 점검 기준 정의 및 데이터 관리 + +단계 +정량적 기준 +정성적 기준 +계획 +•  Security Level(SL) 결정 +•  보안 자원 배분 계획 +•  보안 요구사항 정의 완료 +•  위협 분석 대상 식별 완료 +설계 +•  위협 모델 커버리지 80% 이상 +•  설계 보안 결함 0건 +•  위협 모델링 수행 완료 +•  보안 아키텍처 검토 완료 +개발 +•  코드 정적 분석 커버리지 80% 이상 +•  의존성 취약점 0건 +•  코드 리뷰 100% 완료 +•  보안 코딩 표준 준수 확인 +•  코드 리뷰 의견 반영 확인 +테스트 +•  테스트 커버리지 70% 이상 +•  Critical 취약점 0건 +•  High 취약점 5건 이내 +•  테스트 통과율 100% +•  보안 테스트 계획 수립 완료 +•  취약점 심각도 평가 완료 +•  테스트 결과 검토 완료 +배포 +•  배포 전 보안 검증 100% 완료 +•  배포 위험 평가 완료 +•  배포 승인 획득 +운영 +•  취약점 공개 대응 시간 30일 이내 +•  패치 적용률 90% 이상 +•  보안 모니터링 항시 운영 +•  사고 대응 계획 수립 완료 +SDLC 단계 별 보안 점검 기준 예시 + + +--- + +01 +02 +03 +47 +보안 +요구사항 +소프트웨어 개발, 빌드, 테스트, 배포 등 각 환경 및 모든 환경 구성요소는 내부·외부 위협으로부터 보호될 수 있도록 +강화되어야 한다. +목적 +개발 및 배포 환경의 불필요한 노출과 권한 남용을 방지하여, 내·외부 공격으로부터 소프트웨어 개발 인프라의 +무결성과 안정성을 보장한다. +점검 기준 +개발 환경 보호 + +## 1. 개발 환경 보호 여부 + + +## 2. 개발 엔드포인트 하드닝 여부 + +구현 및 점검 방안 +1 + +## 01. 개발, 빌드, 테스트, 배포 등 각 환경이 보호되고 있는지 확인한다. + +•  다음은 네트워크 환경 분리 및 보호를 위한 구현 방안이다. +2 + +## 01. 개발자 및 운영자가 사용하는 엔드포인트가 하드닝되어 있는지 확인한다. + +•  다음은 개발 엔드포인트 하드닝 방안이다. +[방안 1] NCSC 기기 보안 지침 +NCSC(National Cyber Security Centre)는 영국에서 일반적으로 사용되는 각 플랫폼을 안전하게 구성하는 방법을 자세히 +설명하는 가이드를 관리하며, Android, Chrome OS, iOS, macOS, Windows, Github 등 다양한 플랫폼에 대한 가이드를 +제공한다. + +#### 3.1.5 [SSDF-05] 개발 환경 보호 + +구분 +보안 강화 방안 +VPN +MFA, 강력한 인증, 암호화된 터널 +SSH +키 기반 인증, 포트 변경, 데이터 암호화 +원격 데스크톱(RDP) +MFA, 포트 제한, 암호화, 강력한 비밀번호 +VLAN +DMZ, 내부망, 개발/테스트 환경 분리 +방화벽 +필요한 포트만 개방, 나머지 차단 +L3 게이트웨이 +VLAN 간 통신 제어, 라우팅 관리 +네트워크 분리 +각 네트워크마다 방화벽 규칙 적용 +IDS/IPS +악의적 활동 탐지 및 차단, 실시간 모니터링 +접근 제어 +최소 권한 원칙 적용 +감사 로깅 +접근자 추적, 이상 징후 감지, 사후 분석 +정기적 보안 감사 +취약점 및 위협 확인, 개선 사항 도출 +개발 네트워크 보호 구현 방안 + + +--- + +48 +NCSC 기기 보안 지침(Device security guidance) + + +![이미지 48-0](images/p0048_img0.png) + + +--- + +01 +02 +03 +49 +보안 +요구사항 +소스 코드, 실행 파일, 구성 스크립트 등 모든 형태의 코드는 무단 접근과 변조로부터 보호되어야 하며, 권한이 +부여된 인원, 도구 및 서비스만 접근할 수 있도록 최소 권한 원칙이 적용되어야 한다. +목적 +코드 자산의 무결성과 기밀성을 보장하여, 의도치 않은 수정이나 악의적인 변조로 인한 보안 취약점 발생을 +예방한다. +점검 기준 +코드 무단 접근 및 변조 방지 + +## 1. 코드 접근 통제 적용 여부 + +구현 및 점검 방안 +1 + +## 01. 소스 코드, 실행 코드, 설정 스크립트 등 모든 형태의 코드가 접근 통제 하에 안전하게 저장되어 있는지 + +확인한다. +•  다음은 코드 보호를 위한 구현 방안의 예시이다. +구분 +구현 방안 예시 +접근 통제 +개인 계정 기반 버전 관리 시스템 접근제어 적용 +변경 추적 +버전 관리 시스템 커밋 로그 및 리뷰어 승인 이력 보존 +무결성 보호 +커밋 서명 및 코드 해시 검증 절차 운영 +실행 코드 보호 +빌드 후 바이너리 파일 서명 적용 +구성 스크립트 관리 +IaC파일(Dockerfile, Terraform, Kubernetes YAML 등)에 소스코드와 동일한 수준의 보안 정책 +적용 +코드 보호 구현 방안 예시 + +#### 3.1.6 [SSDF-06] 코드 무단 접근 및 변조 방지 + + + +--- + +50 +보안 +요구사항 +소프트웨어를 배포하거나 제공할 때, 수신자가 배포 파일의 무결성을 검증할 수 있도록 해시값, 전자서명 등 검증 +정보를 함께 제공해야 한다. +목적 +배포 과정에서 악성 변조나 위조된 파일이 설치되는 것을 방지하고, 신뢰 가능한 소프트웨어만 사용자 또는 장비에 +배포되도록 보장한다. +점검 기준 +소프트웨어 배포 무결성 검증 제공 + +## 1. 배포 무결성 검증 정보 제공 여부 + +구현 및 점검 방안 +1 + +## 01. 배포되는 소프트웨어에 대해 무결성 검증 정보가 제공되는지 확인한다 + +•  다음은 배포 무결성 검증을 구현하기 위한 방안의 예시이다. + +#### 3.1.7 [SSDF-07] 소프트웨어 배포 무결성 검증 제공 + +구분 +구현 방안 예시 +해시 제공 +배포 파일별 해시 값을 배포 시 함께 게시 +서명 적용 +코드 서명 인증서 기반 서명 적용 +자동 검증 +배포 스크립트 내 서명 검증 절차 포함 +배포 소프트웨어 무결성 구현 방안 예시 +웹 사이트 내의 배포 파일 해시 값 게시 예시 + + +![이미지 50-0](images/p0050_img0.png) + + +--- + +01 +02 +03 +51 +보안 +요구사항 +소프트웨어 배포 파일과 관련 데이터는 안전하게 보관되어야 하며, 각 배포에 포함된 구성요소의 출처와 변경 이력을 +추적할 수 있도록 관리해야 한다. +목적 +소프트웨어 배포 이후 취약점이 발견되더라도 해당 버전의 구성요소와 변경 내역을 신속히 추적하여 취약점 원인을 +분석하고 재발을 방지한다. +점검 기준 +소프트웨어 배포 파일 보관 및 보호 + +## 1. 배포 파일 및 관련 데이터 보관 및 보호 여부 + + +## 2. 배포 구성요소 출처(SBOM) 관리 여부 + +구현 및 점검 방안 +1 + +## 01. 배포 관련 데이터가 보관되고 있는지 확인한다 + +•  배포 관련 데이터는 다음과 같은 저장소 유형에 보관될 수 있다. + +## 02. 배포 관련 데이터가 안전하게 저장되는지 확인한다. + +•  배포 관련 데이터를 안전하게 보관하기 위한 보호 정책은 다음과 같다. +저장 유형 +예시 +컨테이너 및 아티팩트 +저장소 +Artifactory, Nexus Repository, Harbor, Docker Hub, Quay.io, ECR(AWS Elastic +Container Registry),GCR(Google Container Registry / Artifact Registry) +클라우드 저장소 +S3(AWS Simple Storage Service), Azure Blob Storage,GCS(Google Cloud Storage) +온프레미스 파일 서버 +NAS, SAN, DAS, SFTP +버전 관리 시스템 +Git LFS, GitHub, GitLab, Bitbucket, SourceForge +CDN(Contents +Delivery Network) +콘텐츠 배포 네트워크: 사용자가 파일 다운로드 시 가장 가까운 서버를 통해 빠르게 제공 +공식 소스 저장소 +공식 웹 사이트 또는 소스 저장소 + +#### 3.1.8. [SSDF-08] 소프트웨어 배포 파일 보관 및 보호 + +배포 파일 저장소 유형 +배포 관련 데이터 보관 정책 +정책 +설명 +접근 제어 +역할 기반 접근 제어, 최소 권한 원칙 적용 +암호화 +전송 중 암호화, 저장 시 암호화 +무결성 검증 +해시 값 검증, 디지털 서명, 커밋 서명 +감시 및 로깅 +접근 로그 기록, 변경 이력 추적 +버전 관리 +배포 파일 버전 관리, 변경 이력 보존 +읽기 전용 +배포 후 파일 수정 불가 +읽기 전용 +배포 후 파일 수정 불가 +CDN 작동방식 + + +![이미지 51-0](images/p0051_img0.png) + + +--- + +52 +2 + +## 01. 배포된 소프트웨어의 구성요소 및 출처 정보가 문서화되어 관리되고 있는지 확인한다. + +•  SBOM 형태로 배포에 포함된 모든 구성요소의 버전, 공급자, 라이선스 정보를 관리해야 한다. +•  SBOM은 소프트웨어 변경 시마다 갱신되어야 하며, 변경 이력은 추적 가능해야 한다. + + +--- + +01 +02 +03 +53 +보안 +요구사항 +소프트웨어 설계 단계에서 보안 요구사항을 반영하고, 위협 모델링 및 위험 분석을 통해 잠재적 보안 위험을 식별· +완화하는 설계 체계를 구축해야 한다. +목적 +보안 설계 초기 단계에서 취약점을 예방하고, 운영 중 발생할 수 있는 보안 위협을 최소화하기 위한 구조적 +방어체계를 마련한다. +점검 기준 +보안 설계 및 위험 완화 체계 수립 + +## 1. 위협 모델링 및 보안 위험 분석 수행 여부 + + +## 2. 보안 요구사항·위험·설계 결정 추적 관리 여부 + +구현 및 점검 방안 +1 + +## 01. 배포되는 소프트웨어에 대해 무결성 검증 정보가 제공되는지 확인한다 + +•  Microsoft社는 위협 모델링 프로세스를 보안 개발 생명 주기(SDL)의 핵심 요소로 언급하고 있으며, 4개의 주요 단계로 +구분한다. +Microsoft社에서 정의한 위협 모델링 프로세스 + +#### 3.1.9 [SSDF-09] 보안 설계 및 위험 완화 체계 수립 + +위협 모델링 +프로세스 +검증 +위협열거 +모델 +완화 +단계 +수행 방법 +시스템 모델링 +(Model System) +•  데이터 흐름이 어떻게 이루어지는지 정의 +•  어떠한 구성 요소가 데이터와 상호작용하는지 정의 +•  데이터가 어디에 저장되는지 정의 +위협 열거 +(Enumerate +Threats) +•  시스템에 대한 위협 식별 +•  위협을 개발 결함으로 관리 +•  위협의 우선순위 결정 +완화(Identify +Mitigations) +•  취약점 악용 확률을 줄이기 위한 완화 방안 식별 +•  취약점 악용 영향을 줄이기 위한 완화 방안 식별 +검증(Validate) +•  완화 방안이 위협을 제대로 완화하는지 검증 +위협 모델링 데이터 흐름 다이어그램(DFD) 예시 +위협 모델링 프로세스 + + +![이미지 53-0](images/p0053_img0.png) + + +--- + +54 +•  다음과 같은 위협 모델링 방법론이 존재한다. +[방안 1] STRIDE +STRIDE 방법론은 보안의 세 가지 핵심 요소인 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)에 더해 +인증(Authentication), 부인 방지(Non-Repudiation), 권한부여(Authorization)라는 여섯 가지 정보보호 목표를 중심으로 +하며, 주요 정보보호 목표에 대한 위협인 위장(Spoofing), 변조(Tampering), 부인(Repudiation), 정보 노출(Information +Disclosure), 서비스 거부(Denial of Service), 권한 상승(Elevation of Privilege)을 식별한다. +[방안 2] P.A.S.T.A +P.A.S.T.A(Process for Attack Simulation and Threat Analysis) 방법론은 비즈니스 목표와 기술적 보안을 연계하는 위협 +모델링 방법론이며, 7단계의 구조화된 프로세스를 통해 위협을 식별하고 분석한다. +2 + +## 01. 소프트웨어의 보안 요구사항, 위험 식별 결과, 설계 결정이 추적·관리되고 있는지 확인한다. + +•  제조사는 다음과 같은 방법을 통해 추적성을 확보하고 모니터링할 수 있다. +STRIDE 방법론 +단계 +설명 +위장 +•  다른 사용자·장치로 가장해 접근하는 행위 +변조 +•  데이터나 코드를 무단으로 변경하는 행위 +부인 +•  수행한 행동을 부정해도 증명할 수 없는 상황 +정보 노출 +•  민감한 정보가 비인가자에게 노출되는 상황 +서비스 거부 +•  서비스가 정상적으로 동작하지 못하도록 방해하는 행위 +권한 상승 +•  낮은 권한에서 높은 권한을 탈취해 사용하는 행위 +단계 +절차 +설명 +1단계 +비즈니스 영향 분석 +비즈니스 목표 및 위험 허용 수준 정의 +2단계 +기술 범위 및 자산 정의 +보호 대상 자산 및 기술 범위 결정 +3단계 +애플리케이션 분해 +시스템을 구성 요소별로 분석 +4단계 +위협 분석 +공격 벡터 및 공격 시나리오 식별 +5단계 +취약점 및 약점 분석 +시스템의 보안 결함 발굴 +6단계 +위험 분석 및 영향 모델링 +위협과 취약점의 결합으로 인한 위험 평가 +7단계 +위험 대응 및 완화 +식별된 위험에 대한 대응 방안 수립 +항목 +활동 +요구사항 추적 +매트릭스 +•  각 요구사항이 구현되었는지 추적 +•  다음과 같은 핵심 요소를 포함 +문서화 +•  모든 의사결정 기록 +•  리뷰 결과 및 승인 이력 보존 +•  변경 사항 문서화 +정기적 검토 +•  모든 의사결정 기록 +•  리뷰 결과 및 승인 이력 보존 +요구사항 추적 매트릭스 구성 요소 +소프트웨어 보안 요구사항 및 설계 결과 추적 방법 예시 + + +![이미지 54-0](images/p0054_img0.png) + + +--- + +01 +02 +03 +55 +보안 +요구사항 +소프트웨어 설계가 보안 요구사항을 충족하고 식별된 보안 위험을 적절히 완화하고 있는지를 독립적인 검토자 또는 +자동화된 검증 절차를 통해 점검해야 한다. +목적 +설계 단계에서 정의된 보안 요구사항이 실제 설계 구조에 반영되었는지를 확인하여 운영 중 보안 취약점 발생 +가능성을 사전에 제거한다. +점검 기준 +보안 설계 검토 수행 + +## 1. 보안 설계 검토 절차 운영 여부 + +구현 및 점검 방안 +1 + +## 01. 소프트웨어 설계 산출물이 보안 요구사항 및 위험 정보를 충족하는지 독립적으로 검토하고 있는지 확인한다. + +•  다음은 보안 설계 검토 절차를 운영하기 위한 구현 방안의 예시이다. +보안 설계 검토 수행 방안 + +#### 3.1.10 [SSDF-10] 보안 설계 검토 수행 + +구분 +구현 방안 예시 +독립 검토 체계 +설계 담당 외 보안 검토자 또는 외부 팀이 검토 수행 +자동화 도구 활용 +위협 모델링 도구, 정적 설계 검증 도구 활용 +검토 체크리스트 +보안 요구사항·인증·암호화·로그 관리 등 항목별 검토표 운영 +검토 기록 +설계 검토 결과 및 개선 내역을 추적 관리 시스템에 기록 +재검토 절차 +설계 변경 또는 위험도 재평가 시 재검토 수행 의무화 + + +--- + +56 +보안 +요구사항 +이미 검증된 보안성이 확보된 외부 또는 내부 소프트웨어 구성요소를 재사용하여 중복 개발을 줄이고, 새로운 보안 +취약점이 도입되는 위험을 최소화해야 한다. +목적 +보안이 검증된 구성요소를 재사용하여 개발 효율성을 높이고, 필요한 코드 중복 및 신규 취약점 유입을 방지한다. +점검 기준 +검증된 라이브러리 재사용 + +## 1. 외부 구성요소 확보 또는 내부 공통 보안 모듈 운영 여부 + +구현 및 점검 방안 +1 + +## 01. 상용·오픈소스·서드파티 구성요소 도입 정책이 존재하는지 확인한다. + +•  외부에서 도입한 구성요소에 보안 취약점이나 라이선스 문제가 있으면 전체 소프트웨어의 신뢰성이 저하되므로 제조사는 +도입하는 모든 구성요소를 관리 정책에 따라 검증하고, 전체 구성요소 목록을 투명하게 유지하며, 취약점 발생 시 신속하게 +대응할 수 있도록 체계를 갖춰야 한다. +[방안 1] 구성요소 도입 정책 수립 +제조사는 다음과 같은 정책을 수립하여 구성요소의 도입을 관리할 수 있다. +[방안 2] 허용된 출처 관리 +제조사는 다음과 같이 신뢰할 수 있는 출처만 사용하도록 통제해야 한다. + +## 02. 인증·암호화·로깅 등 공통 보안 기능을 내부 모듈로 관리하는지 확인한다. + +•  제조사는 인증, 암호화, 로깅 등 보안 기능을 공통 모듈로 구축하여 중앙 저장소에서 관리해야 하며, 모든 신규 프로젝트는 +자체 구현 전, 기존 공용 모듈을 먼저 검토하여 우선 적용하도록 의무화해야 한다. +세부 항목 +내용 +도입 기준 정의 +•  상용/오픈소스/서드파티 구분 +•  승인된 라이선스 정의(MIT, Apache 2.0 등) +•  지원 종료(EoL) 일정 확인 +•  보안 업데이트 주기 확인 +출처 관리 +•  공식 레포지토리만 사용(npm, PyPI, Maven Central 등) +•  서명된 패키지 검증 +•  미러 사이트 신뢰성 확인 +도입 절차 +•  도입 전 보안 검토 필수 +•  아키텍처 리뷰 수행 +•  라이선스 검토 +•  취약점 스캔 +승인 프로세스 +•  기술팀, 보안팀, 법무팀 승인 절차 +•  승인 문서 기록 유지 +•  거부된 구성요소 목록 관리 +출처 유형 +관리 방안 +공식 레포지토리 +•  npm, PyPI, Maven Central, RubyGems 등 공식 저장소만 사용 +•  저장소 URL 화이트리스트 관리• 저장소 접근 시 인증서 검증 +서명된 패키지 +•  배포자 서명(GPG 등) 검증 +•  GPG 공개키 신뢰도 확인 +•  서명 검증 실패 시 설치 자동 차단 +미러/캐시 서버 +•  신뢰할 수 있는 공식/기업 미러만 사용 +•  미러 서버 보안 정책 및 운영 현황 확인 +•  원본과 미러의 해시값 비교 및 무결성 검증 +내부 레포지토리 +•  사내 중앙 저장소 운영 +•  보안 스캔된 구성요소만 등록 허용 +•  접근 제어(ACL) 적용 및 감사 로그 기록/모니터링 + +#### 3.1.11. [SSDF-11] 검증된 라이브러리 재사용 + +구성요소 도입 정책 예시 +허용된 출처 관리 방안 + + +--- + +01 +02 +03 +57 +보안 +요구사항 +안전한 코딩 가이드를 준수하여 소스코드의 취약점을 최소화해야 한다. +목적 +보안 취약점이 포함된 소스코드 생성을 방지하고, 개발 단계에서 발생할 수 있는 보안 결함을 최소화한다. +점검 기준 +안전한 코딩 관행 준수 + +## 1. 보안 코딩 표준 준수 여부 + +구현 및 점검 방안 +1 + +## 01. 개발 언어와 환경에 맞는 보안 코딩 가이드가 정의되어 있으며, 개발자가 이를 숙지하고 준수하는지 + +확인한다. +•  제조사는 다음과 같은 보안 코딩 표준 가이드라인을 참고할 수 있다. + +#### 3.1.12. [SSDF-12] 안전한 코딩 가이드 준수 + +표준명 +적용 언어/범위 +OWASP Secure Coding Practices Quick Reference Guide +다언어 (언어비종속) +SEI CERT Coding Standards +C, C++, Java, Android 등 +OWASP Go Secure Coding Practices Guide +Go 언어 +OWASP Python Security +Python 언어 +MISRA C/C++ +임베디드 시스템 (C, C++) +CWE Top 25 Most Dangerous Software Weaknesses +소프트웨어 보안 약점 (다언어) +OWASP JavaScript Security Cheat Sheet +JavaScript 언어 +Microsoft Secure Coding Guidelines +.NET, C# 등 +Google Java Security and Style Guide +Java 언어 +Rust Security Guidelines +Rust 언어 +언어 별 코딩 표준 가이드라인 + + +--- + +58 +보안 +요구사항 +컴파일러, 인터프리터, 빌드 도구에 대한 보안 설정을 적용하여 실행 파일 수준의 보안을 강화해야 한다. +목적 +컴파일 및 빌드 단계에서 잠재적인 취약점을 사전에 제거하여 실행 파일 수준의 보안성을 강화하고, 무결하고 +신뢰할 수 있는 빌드 결과물을 확보하기 위함이다. +점검 기준 +컴파일러 및 빌드 환경 보안 구성 + +## 1. 컴파일러 및 빌드 도구 보안 설정 적용 여부 + +구현 및 점검 방안 +1 + +## 01. 컴파일러, 인터프리터, 빌드 도구의 보안 기능이 활성화되어 있으며, 승인된 설정이 일관되게 적용되는지 + +확인한다. +•  제조사는 최신 버전의 컴파일러, 인터프리터, 빌드 도구가 사용되고 있는지 검토해야 한다. +•  컴파일러의 보안 관련 기능이 활성화되어 있는지 확인한다. 도구 별로 다음과 같은 보안 기능이 제공될 수 있다. +•  Clean Build 정책이 적용되어, 모든 컴파일 경고가 오류로 처리되고 불필요한 예외가 존재하지 않는지 검토한다. + +#### 3.1.13. [SSDF-13] 컴파일러 및 빌드 환경 보안 구성 + +도구 +보안 기능 +GCC (C/C++) +스택 카나리(stack canary), ASLR, PIE, 정수 오버플로우 감지 +Clang (C/C++) +제어 흐름 가드 (Control Flow Guard, CFG), SafeStack, AddressSanitizer +Java Compiler +보안 검사, 보안 관련 경고 활성화 +Python +타입 체킹, 보안 정적분석 +.NET (C#) +코드 분석, Security Rule Set +Node.js +보안 경고, Strict Mode +Maven (Java) +의존성 검사, 보안 플러그인 +Gradle (Java/Kotlin) +의존성 검증, 보안 스캐너 +CMake (C/C++) +컴파일러 보안 옵션 설정 +GNU Make +컴파일러의 보안 옵션 적용 +빌드 도구 별 보안 기능 예시 + + +--- + +01 +02 +03 +59 +보안 +요구사항 +코드 리뷰와 정적 분석 절차를 수립하고, 이를 통해 보안 취약점을 식별·관리해야 한다. +목적 +코드 배포 이전에 취약점을 조기에 식별·수정함으로써 배포 후 악용 가능성을 줄이고, 자동화 도구와 인적 리뷰를 +적절히 조합하여 효율적으로 보안결함을 탐지·관리하기 위함이다. +점검 기준 +코드 검토 및 분석 + +## 1. 코드 리뷰 및 정적분석 도입 여부 + +구현 및 점검 방안 +1 + +## 01. 조직이 코드 검토와 코드 분석 절차를 정의하고, 적용 기준을 명시하고 있는지 확인한다. + +•  제조사는 코드 검토 및 분석 도구의 적용 범위, 수행 주기, 담당자 역할, 분석 절차 등을 명확히 정의해야 한다. +•  다음과 같은 분석 도구가 활용될 수 있다. + +#### 3.1.14. [SSDF-14] 코드 검토 및 분석 + +도구 +분석 대상 +특징 +SAST (정적 분석) +소스 코드 +코드 작성 단계에서 취약점 발견 +DAST (동적 분석) +실행 중인 애플리케이션 +런타임 취약점 발견 +SCA (소프트웨어 구성 분석) +의존성/라이브러리 +오픈소스 취약점 발견 +IAST (상호작용 분석) +런타임 코드 +실행 중 코드 분석 +비밀값 스캐닝 +소스 코드 +하드코딩된 비밀키 감지 +소프트웨어 분석 도구 예시 + + +--- + +60 +보안 +요구사항 +실행 가능한 코드에 대한 테스트 기준을 정의하고, 정의된 절차에 따라 테스트를 수행하며 결과를 관리해야 한다. +목적 +배포 전 실행 수준의 취약점을 찾아 수정해, 배포 후 악용을 방지하고 테스트의 추적성·재현성을 확보한다. +점검 기준 +실행 코드 테스트 + +## 1. 코드 테스트 방법 정의 여부 + +구현 및 점검 방안 +1 + +## 01. 코드에 대해 언제, 무엇을, 어떤 방식으로 테스트할지 기준이 정의되어 있는지 확인한다. + +•  적용 테스트 유형과 수행 주기가 문서화되어 있는지 확인한다. +•  테스트 레벨별(단위/통합/시스템/인수) 기준이 정의되어 있는지 확인한다. +•  테스트 합격 기준이 명확히 제시되어 있는지 확인한다. + +## 02. 정의된 절차에 따라 테스트를 수행하고 결과를 기록·관리하여 보안 이슈가 체계적으로 추적되는지 확인한다. + +•  테스트 계획서 및 테스트 결과 보고서가 보관되어 있는지 확인한다. +•  발견된 이슈가 이슈 관리 시스템에 등록되어 심각도 · 담당자 · 처리 기한이 지정되어 있는지 점검한다. +•  조치 완료 후 재검증 결과가 기록되어 있는지 확인한다. + +#### 3.1.15. [SSDF-15] 실행 코드 테스트 + +테스트 레벨 +시점 +대상 +목표 +단위 테스트 +(Unit Test) +개발 단계 +개별 함수/메서드 +코드 로직 검증 +통합 테스트 +(Integration Test) +개발 완료 후 +모듈 간 상호작용 +인터페이스 동작 검증 +시스템 테스트 +(System Test) +통합 완료 후 +전체 시스템 +요구사항 충족 여부 확인 +인수 테스트 +(Acceptance Test) +배포 전 +전체 시스템 +사용자 요구사항 만족 +소프트웨어 테스트 레벨 + + +--- + +01 +02 +03 +61 +보안 +요구사항 +소프트웨어 설치 및 초기 구성 시 보안이 강화된 기본 설정을 정의하고, 이를 실제 환경에 적용해 운영 중에도 안전한 +보안 상태가 유지되도록 해야 한다. +목적 +보안 기능이 비활성화되거나 취약한 기본 설정으로 배포되는 위험을 방지하고, 시스템·서비스 전반의 보안 수준을 +초기 단계부터 균일하게 확보하기 위함이다. +점검 기준 +안전한 초기 보안 설정 구성 + +## 1. 기본 보안 설정 기준 정의 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템에 적용되는 기본 설정 중 보안에 영향을 주는 항목이 안전하게 정의되어 있는지 확인한다. + +•  로봇 시스템 소프트웨어의 보안 초기 설정이 강화된 형태로 정의되어 있는지 확인해야 한다. 보안에 영향을 주는 설정은 +다음과 같은 카테고리로 분류될 수 있다. +•  이러한 보안 설정이 로봇 시스템 설치 가이드, 유지보수 매뉴얼 등에 명시되어 있어야 한다. + +#### 3.1.16. [SSDF-16] 안전한 초기 보안 설정 구성 + +구분 +설명 +신원, 인증 및 액세스 제어 +사용자 식별, 인증 메커니즘, 권한 관리 +입력 검증 및 인코딩 +외부 입력값 검증, 인젝션 공격 방지 +암호화 +데이터 암호화, 키 관리, 보안 통신 +사용자 및 세션 관리 +세션 생성, 유지, 종료, 타임아웃 관리 +오류 및 예외 처리 +정보 노출 방지, 안전한 오류 메시지 +감사 및 로깅 +보안 이벤트 기록, 접근 로그, 변경 이력 추적 + + +--- + +62 +보안 +요구사항 +로봇 시스템 및 연계 소프트웨어 구성요소에 대한 취약점 정보를 지속적으로 수집하고, 식별된 취약점의 영향을 +검증·분석하며, 공개·대응 절차를 통해 신속히 조치해야 한다. +목적 +취약점을 조기에 발견해 공격에 노출되는 시간을 최소화하고, 신속한 대응과 패치를 통해 시스템의 안정성과 +신뢰성을 높인다. +점검 기준 +취약점 식별 및 관리 + +## 1. 취약점 정보 수집 및 모니터링 여부 + + +## 2. 취약점 검증 및 테스트 수행 여부 + + +## 3. 취약점 공개·대응 절차 운영 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템 내 구성요소와 관련된 취약점 정보를 주기적으로 수집·분석하고 있는지 확인한다. + +•  제조사는 취약점 정보 수집 시 다음과 같은 방법을 사용할 수 있다. +[방안 1] 취약점 정보 모니터링 프로세스 마련 +취약점 데이터베이스, 위협 인텔리전스, 보안 메일링 리스트 등을 정기적으로 모니터링하고, 대부분 API나 이메일 알림을 +지원하므로 이를 활용해 자동화된 취약점 정보 수집 체계를 구축한다. +[방안 2] 취약점 제보 채널 구축 +외부 연구자, 공급업체, 고객 등 다양한 이해관계자가 취약점을 안전하게 보고할 수 있는 공식 제보 채널(웹 기반 취약점 +신고 포털, 전용 이메일, 버그 바운티 프로그램 등)을 마련하고 명확한 보고 가이드를 제공한다. + +#### 3.1.17. [SSDF-17] 취약점 식별 및 관리 + +구분 +주요 소스 예시 +취약점 데이터베이스 +NVD, CVE, CISA known Exploited Vulnerabilities(KEV), KISA 보안공지 +위협 인텔리전스 +MISP, VirusTotal, Treat Connect, OpenCTI, 국내 CTI 제공 업체 +보안 메일링 리스트 +Full Disclosure, CERT, OSS-Security, 각 벤더 보안공지 메일 +취약점 정보 모니터링 방안 예시 +취약점 제보 웹 페이지 예시 + + +![이미지 62-0](images/p0062_img0.png) + + +--- + +01 +02 +03 +63 +2 + +## 01. 식별된 취약점이 실제 로봇 시스템에 어떠한 영향을 미치는지 검증하는 절차가 있는지 확인한다. + +•  취약점 검증 및 테스트 시 다음과 같은 평가 프로세스를 수행할 수 있다. +3 + +## 01. 로봇 시스템 관련 취약점 제보 및 대응 절차가 명확히 정의·운영되고 있는지 확인한다. + +•  취약점 대응 정책 수립 시 다음과 같은 내용이 포함될 수 있다. +항목 +활동 +취약점 분석 +•  취약점의 기술적 특성 파악 +•  악용 난이도 평가 +•  필요한 권한 수준 확인 +•  공격 벡터 분석 +로봇 시스템 영향도 +분석 +•  안전성 영향(인명 피해, 부상 위험 등) +•  기능 영향(기능 상실, 오작동 등) +•  가용성 영향(서비스 중단 시간) +•  데이터 영향(민감 정보 노출 범위) +심각도 평가 +•  CVSS 점수 산출 +•  로봇 시스템 특성 반영(물리적 위험, 실시간성 등) +•  최종 심각도 결정(Critical/High/Medium/Low) +우선순위 결정 +•  심각도 기반 우선순위 설정 +•  실제 악용 가능성 고려 +•  영향받는 사용자/시스템 범위 분석 +항목 +내용 +목표 및 범위 +•  정책의 목적 명시 +•  적용되는 시스템·서비스·제품 범위 정의 +역할 및 책임 +•  취약점 발견·분석·패치·보고 단계별 책임 부서 및 담당자 명확화 +•  의사결정 권한 정의 +•  부서 간 협업 구조 명시 +취약점 보고 및 분석 +프로세스 +•  취약점 접수 경로 정의 +•  위험도 평가 기준 수립 +•  영향도 분석 방법 제시 +•  대응 계획 수립 절차 명시 +•  조치 완료 후 보고 절차 포함 +대외 커뮤니케이션 +•  공지 시점 결정 기준 +•  공지 대상 범위 정의 +•  공지 방식 선택 +•  공지 승인 절차 포함 +패치 프로세스 +•  패치 개발·테스트·배포 절차 정의 +•  위험도 등급별 SLA 대응 시간 설정 +•  패치 적용 후 재검증 절차 운영 +취약점 신고 채널 +•  신고 채널 종류 제공 +•  운영 방식 정의 +•  신고자 보호 방안 포함 +•  신고 가이드 제시 +기록 관리 및 개선 +•  전체 대응 과정 기록 시스템 구축 +•  사후 리뷰 주기 설정 +•  모의 훈련 주기 운영 +•  개선 사항 반영 절차 정의 +취약점 검증 방법 예시 +취약점 관리 정책 구성 내용 예시 + + +--- + +64 +보안 +요구사항 +로봇 시스템에서 식별된 취약점에 대해 위험도를 분석하고, 위험 수준에 따라 적절한 조치를 계획·이행해야 한다. +목적 +취약점의 심각도와 영향 범위를 기반으로 우선순위를 설정하여, 보안 리스크를 최소화하고 조치 자원의 효율적 +배분을 가능하게 하기 위함이다. +점검 기준 +취약점 평가 및 대응 + +## 1. 취약점 위험 평가 수행 여부 + + +## 2. 취약점 대응 및 완화 조치 여부 + +구현 및 점검 방안 +1 + +## 01. 식별된 취약점에 대해 위험 수준을 분석하고, 대응 계획 수립에 필요한 정보를 수집하고 있는지 확인한다. + +•  다음과 같은 취약점 위험 평가 시 다음과 같은 방법론을 활용할 수 있다. +[방안 1] CVSS 4.0 +CVSS 4.0 (Common Vulnerability Scoring System 4.0)은 소프트웨어 취약점의 심각도를 표준화된 방식으로 평가하고 +점수화하는 방법론이다. +CVSS 점수는 0~10의 점수로 표현되며, 점수 범위 별로 심각도 등급(Severity Rating)을 None/Low/Medium/High/ +Critical로 평가한다. + +#### 3.1.18. [SSDF-18] 우선순위 기반 취약점 평가 및 대응 조치 + +항목 +값 +설명 +공격 벡터 +(Attack Vector) +Network (N) +네트워크를 통한 원격 공격 가능 +Adjacent (A) +동일 네트워크/인접한 위치에서만 공격 가능 +Local (L) +로컬 접근 필요 +Physical (P) +물리적 접근 필요 +공격 복잡도 +(Attack Complexity) +Low (L) +공격이 간단하고 안정적 +High (H) +특정 조건 필요 또는 불안정 +필요 권한 +(Privileges Required) +None (N) +권한 필요 없음 +Low (L) +낮은 권한 필요 +High (H) +높은 권한 필요 +사용자 상호작용 +(User Interaction) +None (N) +사용자 상호작용 없이 악용 가능 +Passive (P) +클릭 등 수동적 상호작용 필요 +Active (A) +다운로드·설치 등 능동적 상호작용 필요 +범위 +(Scope) +Unchanged (U) +영향이 취약한 구성요소내에 제한 +Changed (C) +다른 구성 요소까지 영향 확산 +기밀성 영향 +(Confidentiality) +None (N) +정보 노출 없음 +Low (L) +제한적 정보 노출 +High (H) +광범위한 정보 노출 +무결성 영향 +(Integrity) +None (N) +무결성 훼손 없음 +Low (L) +제한적 훼손 +High (H) +광범위한 훼손 +가용성 영향 (Availability) +None (N) +서비스 영향 없음 +Low (L) +부분적 서비스 중단 +High (H) +전체 서비스 중단 +CVSS 4.0 평가 항목 + + +--- + +01 +02 +03 +65 +[방안 2] DREAD +DREAD 방법론은 식별된 위협의 심각도를 평가하기 위한 정량적 평가 모델이며, 다음 여섯 가지 요소를 통해 위협의 +위험도를 계산한다. +•  Damage Potential (피해 가능성): 위협 발생 시 미칠 수 있는 최대 피해 정도 +•  Reproducibility (재현성): 위협을 재현할 수 있는 난이도 +•  Exploitability (악용 용이성): 위협을 악용하기 위한 기술적 난이도 +•  Affected Users (영향받는 사용자): 위협의 영향을 받을 수 있는 사용자의 범위 +•  Discoverability (발견 가능성): 공격자가 위협을 발견할 수 있는 용이성 +각 요소를 1~10점으로 평가하여 위험도 점수를 산출한다. +2 + +## 01. 위험도 평가 결과에 따라 적절한 대응 조치가 수행되고, 그 이력이 관리되고 있는지 확인한다. + +•  다음과 같은 취약점 대응 프로세스를 수립할 수 있다. +순서 +대응 프로세스 +설명 +1 +대응 전략 결정 +•  위험 회피, 위험 완화, 위험 전가, 위험 수용 +2 +우선 순위 지정 +•  위험도 등급 기반으로 우선 순위 지정 +3 +대응 계획 수립 +•  임시 완화책, 영구 해결책, 자동화 계획 등 +4 +커뮤니케이션 및 문서화 +•  보안 권고문 배포, 경영진 및 고객 보고, 기록 관리 등 +5 +사후 검토 +•  대응 완료 후 재발 방지 프로세스 연계 +취약점 대응 프로세스 예시 + + +--- + +66 +보안 +요구사항 +로봇 시스템에서 발생한 취약점의 근본 원인을 분석하고, 동일 유형의 취약점이 반복되지 않도록 예방 조치와 +프로세스 개선을 수행해야 한다. +목적 +취약점 발생의 기술적·관리적 원인을 체계적으로 분석해, 향후 동일 원인으로 인한 재발을 방지하고 전반적인 보안 +품질을 향상하기 위함이다. +점검 기준 +취약점 근본 원인 분석 + +## 1. 취약점 원인 분석 수행 및 재발 방지 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템 내에서 발견된 취약점에 대해 근본 원인 분석이 수행되는지 확인한다. + +•  취약점의 근본 원인 분석 수행 시 다음과 같은 방법론을 적용할 수 있다. +[방안 1] 5 Whys +5 Whys는 문제의 원인을 계속 묻고 답하는 과정을 통해 근본 원인을 파악하는 기법으로, 첫 번째 원인부터 시작하여 “왜?” +라는 질문을 반복하면서 점차 깊은 원인으로 내려가며, 일반적으로 5번의 질문을 통해 근본 원인에 도달한다. +[방안 2] 피쉬본 다이어그램 +피쉬본 다이어그램(Fishbone Diagram)은 물고기 뼈 모양으로 원인을 체계적으로 분류하여 시각화하는 기법이다. 아래 +그림과 같이 맨 우측엔 문제를 작성하고, 여러 카테고리로 원인을 나누어 분석하여 종합적으로 파악할 수 있다. + +#### 3.1.19. [SSDF-19] 취약점 근본 원인 분석 + +5 Whys 예시 +Q1: 왜 인증 우회 취약점이 발생했는가? +A: 세션 토큰 검증 로직이 없었다. +Q2: 왜 세션 토큰 검증 로직을 구현하지 않았는가? +A: 보안 요구사항에 명시되지 않았다. +Q3: 왜 보안 요구사항에 명시되지 않았는가? +A: 보안팀이 설계 단계에 참여하지 않았다. +Q4: 왜 보안팀이 참여하지 않았는가? +A: 개발 프로세스에 보안 리뷰 단계가 없었다. +Q5: 왜 보안 리뷰 단계가 없었는가? +A: 조직이 보안을 개발 프로세스에 통합하지 않았다. (근본 원인) +피쉬본 다이어그램 예시 +문제 +프로세스 +관리 +설계 +사람 +도구 +교육 +원인 +원인 +원인 +원인 +원인 +원인 +원인 +원인 +원인 +원인 +원인 +원인 +원인 +원인 + + +--- + +01 +02 +03 +67 +[방안 3] CWE 매핑 +CWE (Common Weakness Enumeration)는 소프트웨어 약점의 국제 표준 분류체계이다. 식별된 취약점을 CWE 목록과 +매핑함으로써 취약점을 표준화된 분류로 정리하고, 유사 취약점을 식별하며, 장기적 개선 전략을 수립할 수 있다. +•  취약점의 근본 원인 분석 수행 시 다음과 같은 결과가 보고서에 작성될 수 있다. + +## 02. 식별된 취약점과 유사 취약점을 사전 탐지하기 위해 근본 원인 패턴을 식별해 조직 차원의 예방 조치를 + +수행하는지 확인한다. +•  다음은 취약점 재발을 방지하는 실행 지침의 예시이다. +취약점 근본 원인 분석 결과 보고서 구성 예시 +취약점 재발 방지 실행 지침 구성 예시 +CWE 예시 +•  CWE-79: Cross-site Scripting (XSS) +•  CWE-89: SQL Injection +•  CWE-287: Improper Authentication +•  CWE-352: Cross-Site Request Forgery (CSRF) +•  CWE-434: Unrestricted Upload of File with Dangerous Type +내용 +설명 +기본 정보 +•  취약점 고유 식별자 +•  발견 일시 +•  발견 경로영향을 받는 서비스 및 버전 정보 +취약점 세부 정보 +•  취약점 유형 +•  취약점 영향 +•  심각도 +근본 원인 +•  코드 오류뿐 아니라 시스템 구조, 프로세스 관리 미흡 등 근본 요인 중심으로 작성 +탐지 및 대응 타임라인 +•  시간 순서 기록: 취약점 발견, 분석, 임시 조치, 영구 패치 적용까지 단계 별 타임라인 작성 +•  조치 내용: 조치 방법, 담당 팀, 확인 절차 등 상세 기록 +시정 조치 +•  임시 조치 +•  영구 패치 +•  재발 방지 대책 +커뮤니케이션 계획 +•  공지 시점 +•  공지 대상 +•  공지 방식 +•  승인 절차 포함 +구분 +세부 내용 +검증 +•  정적분석, 동적분석, 자동화 테스트, 수동 재현 등으로 취약점의 실제 영향과 재현 +케이스를 확인 +•  재현 케이스는 회귀 테스트로 저장하여 이후 검증에 활용 +사전 제거 +•  이미 확인된 취약점의 유사한 유형이 존재할 가능성이 높은 모듈이나 인터페이스를 +대상으로 선제적 스캔 및 수정 수행 +•  해당 활동을 CI/빌드 파이프라인과 연계해 반복 실행하도록 자동화 +패턴 식별 +•  모든 취약점 RCA 결과를 중앙화된 DB에 저장 +•  동일 원인에서 파생된 여러 취약점 유형을 연결·분석하여 반복 발생 패턴 도출 +조직 내 전파 +•  재발 방지 가이드·모범 사례 문서화 및 정기 리뷰/개발자 교육 실시 +•  도출된 패턴을 규칙, 자동탐지 룰, 회귀 테스트 케이스 등으로 전환해 실무 반영 +프로세스 연계 +•  재현, 사전제거, 패턴식별 결과가 이슈 트래커 목록에 반영되어 우선순위 및 처리 +상태가 관리되는지 확인 + + +--- + +68 +번호 +체크리스트 항목 +SC-01 +오픈소스 소프트웨어 구성요소 관리 +SC-02 +EoS 관리 +SC 03 +공급업체 보안 역량 평가 기준 수립 및 적용 +SC-04 +공급망 변경 시 보안 영향 평가 및 대처 방안 마련 +SC-05 +구성요소 취약점 관리 +SC-06 +로봇 펌웨어 및 소프트웨어 업데이트 무결성 검증 +SC-07 +신속한 패치 메커니즘 +로봇 시스템의 공급망 전반에 적용되는 보안 요구사항인 공급망 보안(Supply-Chain) 체크리스트 항목은 다음과 +같다. + +### 3.2 공급망 보안 점검 체크리스트 + +공급망 보안 체크리스트 항목 + + +--- + +01 +02 +03 +69 +보안 +요구사항 +제품에 포함되는 오픈소스 소프트웨어와 외부 라이브러리 등 모든 구성요소를 식별·관리해야 한다. +목적 +제품 내 포함된 오픈소스 및 외부 라이브러리를 식별·관리함으로써 라이선스 위반, 알려진 취약점, 불필요한 보안 +위험을 사전에 차단한다. +점검 기준 +오픈소스 소프트웨어 구성요소 관리 + +## 1. 제품에 포함된 모든 오픈소스 및 외부 소프트웨어, 라이브러리 목록 문서화 여부 + + +## 2. 최신 버전의 공개/상용 소프트웨어 사용 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템에 포함된 모든 오픈소스, 제3자 소프트웨어, 외부 라이브러리가 식별·목록화되어 문서화되어 + +있는지 확인한다 +•  구성 목록은 SBOM(Software Bill of Materials, 소프트웨어 구성요소 목록) 형식으로 관리하는 것이 권장되며, 변경 +사항이 지속적으로 업데이트 되어야 한다. +① SBOM은 다음과 같은 정보를 포함하여야 한다. +② SBOM은 .json, .xml 형식 등과 같이 기계 판독이 가능한 형식으로 작성되어야 한다. +•  위와 같은 필수 요건을 만족시키는 SBOM 표준 형식은 다음과 같으며, 공식 사이트에서 SBOM 생성 도구를 확인할 수 +있다. +- SDPX (Software Package Data Exchange) +Linux Foundation이 2011년에 개발한 오픈소스 라이선스 및 저작권 정보 교환 표준으로, 라이선스 준수와 저작권 정보 +추적을 주 목적으로 하며 JSON, XML, RDF, Tag-Value 등 다양한 형식을 지원한다. +- CycloneDX +OWASP가 2017년에 개발한 현대적 소프트웨어 공급망 보안 SBOM 표준으로, 보안, 의존성, 취약점 추적을 주 목적으로 +하며 JSON과 XML 형식을 지원한다. + +#### 3.2.1 [SC-01] 오픈소스 소프트웨어 구성요소 관리 + +항목 +설명 +작성자 +SBOM 문서 작성자 +타임스탬프 +SBOM이 마지막으로 업데이트된 날짜와 시간 +공급자 명 +구성요소 공급자의 이름 또는 식별자 +구성요소 명 +구성요소의 이름 또는 식별자 +버전 정보 +구성요소의 버전 정보 +고유 식별자 +구성요소의 고유 식별자 +관계 +SBOM 구성요소 간의 관계 +SBOM 필수 포함 요소 + + +--- + +70 +2 + +## 01. 로봇 시스템에서 사용하는 공개 또는 상용 소프트웨어가 최신 안정화 버전으로 유지되고 있는지 확인한다. + +•  시스템에 포함된 각 구성요소의 버전을 SBOM 또는 구성 목록을 통해 확인하고, 공급자의 최신 배포 버전과 +비교해 보안패치 적용 여부를 점검한다. +•  상용 소프트웨어의 경우 정품 라이선스가 유지되고, 업데이트 계약 또는 기술지원 체계가 유효한지 +확인한다. +•  최신 버전을 사용하기 어렵거나 지원이 종료된 경우, 이에 대한 위험 관리 및 대응책이 명시되어 있어야 +한다. +CycloneDX SBOM 생성 파일 예시(JSON) + + +![이미지 70-0](images/p0070_img0.png) + + +--- + +01 +02 +03 +71 +보안 +요구사항 +구성요소는 지원 종료 상태가 아니어야 하며, 도입 시점 기준으로 보안 패치 및 기술 지원을 유지하기 위해 EoS를 +관리해야 한다. +목적 +지원 종료(EoS)된 소프트웨어나 구성요소 사용을 방지하여, 보안 패치와 기술 지원을 지속적으로 받을 수 있도록 +하고 보안 공백을 예방한다. +점검 기준 +오픈소스 소프트웨어 구성요소 EoS 관리 + +## 1. 모든 구성요소의 EoS 정보 식별 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템을 구성하는 모든 소프트웨어 및 하드웨어 구성요소에 대해 EoS(End of Support, 지원 종료) + +정보를 식별하고 관리하는지 확인한다. +•  SBOM 또는 자산 관리 문서에서 각 구성요소의 공급자, 버전, 지원 종료 예정일을 확인할 수 있어야 한다. +•  공급자가 제공하는 EoS 공지를 모니터링하여 보안 패치 및 업데이트 지원 종료 시점을 주기적으로 점검해야 하며, 미지원 +버전 사용 시 보안 리스크로 분류하여 관리 대상에 포함해야 한다. +02. EoS 구성요소에 대한 대체, 업그레이드, 보안 우회대책 등의 대응 계획이 수립되어 있는지 확인한다. +•  변경된 구성요소에 대한 교체 또는 업그레이드 계획이 수립되어야 하며, 단기적으로 교체가 불가능한 경우 보안 보완조치 +가 마련되어야 한다. +•  EoS 구성요소 대체 계획에는 다음 항목이 포함되어야 한다. + +#### 3.2.2 [SC-02] EoS 관리 + +항목 +설명 +구성요소 정보 +이름, 버전, 공급자 +영향 범위 +해당 구성요소가 사용하는 서비스, 모듈, 장비 +대체 방안 +신규 버전, 타사 제품, 커스텀 모듈 등 +보완 조치 +대체할 수 없을 경우 단기/장기 대응책 +일정 및 책임자 +교체 시기, 담당 부서 및 담당자 +EoS 구성요소 대체 + + +--- + +72 +보안 +요구사항 +조직은 공급요소의 공급업체를 선정할 때 보안 위험을 최소화하기 위해 보안 역량 평가 기준을 수립하고 적용해야 +한다. +목적 +공급업체의 보안 성숙도를 평가하여 신뢰할 수 있는 공급자를 선정함으로써 공급망을 통한 보안 위험 유입 가능성을 +최소화한다. +점검 기준 +공급업체 보안 역량 평가 + +## 1. 보안 평가 기준 존재 여부 + +구현 및 점검 방안 +1 + +## 01. 공급업체의 보안 역량을 평가하기 위한 보안 평가 기준 또는 체크리스트가 존재하는지 확인한다. + +•  조직 내부에 공급망 보안 평가 절차가 문서로 정의되어 있으며, 공식 승인된 형태로 관리되고 있는지 확인한다. +•  평가 기준은 다음과 같은 보안 영역을 포함할 수 있다. + +#### 3.2.3 [SC-03] 공급업체 보안 역량 평가 기준 수립 및 적용 + +구분 +주요 평가 항목 예시 +보안 관리 체계 +보안 정책, 조직 내 역할 및 책임, 교육 체계 +기술적 보안 +보안 코딩, 취약점 점검, 패치 관리 +인적 보안 +보안 교육, 접근 권한 관리, 인력 검증 +사고 대응 +사고 탐지·보고 절차, 재발 방지 대책 +공급망 관리 +SBOM, EoS 구성요소 관리, 하위 공급자 관리 +공급업체 평가 항목 예시 + + +--- + +01 +02 +03 +73 +보안 +요구사항 +조직은 공급망이 변경되었을 경우 변경된 공급업체/요소로 인한 보안 영향을 평가하고 대처할 수 있는 방안을 +마련해야 한다. +목적 +공급망 변경으로 인한 신규 보안 위험을 신속히 파악하고 대응책을 마련해, 서비스 연속성과 보안 수준을 유지한다. +점검 기준 +공급망 변경 영향 평가 및 대응 + +## 1. 변경된 공급업체 보안 평가 수행 여부 + + +## 2. 공급망 변경으로 인한 영향 분석 및 대응 계획 수립 여부 + +구현 및 점검 방안 +1 + +## 01. 공급망 변경으로 인한 영향 분석 및 대응 계획 수립 여부 + +•  제조사 내에 정의된 공급업체 보안 역량 평가 기준에 따른 평가 결과가 문서화되어 있는지 확인한다. +2 + +## 01. 공급망 변경이 시스템 자산, 네트워크 인터페이스, 데이터 흐름에 미친 영향을 분석했는지 확인한다. + +•  변경된 공급자 또는 구성요소로 인해 API, 통신 프로토콜, 네트워크 경로에 변화가 발생했는지 점검한다. +•  공급자 변경 과정에서 새로운 외부 접근 경로, 계정, 인증 정보, 권한이 추가되지 않았는지 확인한다. +•  변경된 자산에 대한 위협 모델링 또는 위험 평가 결과가 갱신되었는지 검토한다. +•  영향 분석 결과가 시스템 보안 설계서, 접근 통제 정책 등에 반영되어 있는지 확인한다. + +#### 3.2.4. [SC-04] 공급망 변경 시 보안 영향 평가 및 대처 방안 마련 + + + +--- + +74 +보안 +요구사항 +각 구성요소의 버전, 라이선스, 패치 상태와 함께 알려진 취약점 정보를 식별하고 관리해야 한다. +목적 +각 구성요소의 버전·라이선스·패치 상태 및 알려진 취약점을 체계적으로 관리하여, 보안 위협 발생을 조기에 +차단한다. +점검 기준 +구성요소 취약점 관리 + +## 1. 구성요소의 알려진 취약점 식별 여부 + + +## 2. 취약점 대응 관리 체계 존재 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템을 구성하는 모든 구성요소에 대한 알려진 취약점을 식별하고 있는지 확인한다. + +•  취약점 식별은 다음과 같은 방안으로 수행될 수 있다. +[방안 1] SBOM 연계 취약점 식별 자동화 도구 +Anchore에서 제공하는 컨테이너 이미지 및 코드 베이스 분석용 오픈소스 도구들을 활용하여 다음과 같이 Syft를 통해 +SBOM을 생성하고, Grype를 통해 생성된 SBOM의 취약점을 자동으로 식별할 수 있다. +[방안 2] 패키지 관리자 내장 기능 +패키지 관리자에 내장된 보안 기능을 통해 프로젝트에 선언된 의존성을 분석하고 알려진 취약점을 자동으로 검사할 수도 +있다. 주요 패키지 관리자 별 명령어는 다음과 같다. + +#### 3.2.5 [SC-05] 구성요소 취약점 관리 + +① Syft를 통한 SBOM 생성 +$ syft <소스코드 경로> -o json > sbom.json +② Grype를 통한 취약점 식별 +$ grype sbom://sbom.json +③ 결과 확인 +자동화 도구를 통해 식별된 알려진 취약점 결과 + + +![이미지 74-0](images/p0074_img0.png) + + +--- + +01 +02 +03 +75 +[방안 3] CI/CD 파이프라인 통합 +CI/CD 파이프라인(Github Actions, GitLab CI/CD, Azure DevOps, Jenkins 등)에 취약점 검사 단계를 통합할 수도 있다. +2 + +## 01. 매핑된 취약점 각각에 대해 해당 시스템에 미치는 영향을 평가하고, 이를 바탕으로 우선순위를 결정하며 + +심각도별 대응 체계가 존재하는지 확인한다. +•  영향평가는 취약점의 기술적 익스플로잇 가능성(공개 PoC/악용 여부), 영향을 받는 서비스/모듈/데이터의 중요도, EoS +상태 등을 고려하여 수행되어야 한다. +•  대응계획이 수립되면 해당 작업은 티켓으로 발행되어 책임자, 일정, 적용 방법, 검증 방법이 기록되어야 한다. +•  권장하는 취약점 대응 기록 항목 예시는 다음과 같다. +필드 +설명 +CVE ID +취약점 식별자 +구성요소 +영향받는 컴포넌트(이름/버전) +기술적 위험 +공개 PoC/익스플로잇 존재 여부, CVSS 점수 +비즈니스 영향 +영향을 받는 서비스·데이터·운영 영향 +EoS 여부 +해당 구성요소의 지원상태 +우선 순위 +P0/P1/P2 또는 High/Medium/Low +대응방안 +패치/업그레이드/가상패치/격리 등 +SLA +목표 기간 +담당자 및 일정 +책임부서, 담당자, 완료예정일 +검증 방법 +재스캔, 기능/회귀 테스트 결과 링크 +상태 +계획/진행/완료/예외(승인) +식별된 알려진 취약점 대응 기록 항목 예시 +Node.js (NPM) +$ npm audit +Python (pip) +$ pip-audit +Java (Maven) +$ mvn dependency-check:check +.NET (Nuget) +$ dotnet list package --vulnerable +Rust (Cargo) +$ cargo audit + + +--- + +76 +보안 +요구사항 +조직은 로봇 시스템의 펌웨어 및 소프트웨어 업데이트 과정에서 악성코드 삽입, 무단 변조 등의 보안 위협을 +방지하기 위해 무결성 검증 체계를 구축해야 한다. +목적 +업데이트 과정에서 악성코드 삽입, 무단 변조 등의 위협을 방지하고, 배포되는 소프트웨어의 신뢰성을 보장한다. +점검 기준 +업데이트 파일 무결성 검증 + +## 1. 업데이트 무결성 검증 여부 + + +## 2. 무결성 검증 실패 시 업데이트 프로세스 중단 및 로깅 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇 시스템에 배포되는 모든 소프트웨어 업데이트가 무결성 검증 절차를 거치는지 확인한다. + +•  업데이트 아티팩트는 디지털 서명 또는 SHA-256 이상 해시로 검증되어야 한다. +•  검증 메타데이터(서명자, 서명 시각, 해시값, 검증 결과 등)는 배포 로그에 기록되어야 한다. +2 + +## 01. 업데이트 무결성 검증이 실패하는 경우 업데이트 설치를 즉시 중단하고, 실패 원인과 메타데이터를 상세히 + +로깅하는지 확인한다. +•  검증 실패 시 설치/업데이트 프로세스는 즉시 중단되어야 하며, 필요 시 이전 안정 버전으로 롤백하거나 차단 상태를 +유지하는 절차가 정의되어야 한다. +•  실패 로그에는 이름, 버전, 배포경로, 검증결과, 검증일시, 검증자, 해시값, 서명자키ID, 오류메시지 등이 포함되어야 한다. + +#### 3.2.6 [SC-06] 로봇 펌웨어 및 소프트웨어 업데이트 무결성 검증 + +펌웨어 검증 로그 예시 + + +![이미지 76-0](images/p0076_img0.png) + + +--- + +01 +02 +03 +77 +보안 +요구사항 +공급망 구성요소의 취약점 발견 시 신속한 패치 배포 및 적용 메커니즘을 구축해야 한다. +목적 +새로운 취약점 발견 시 신속히 패치를 배포 및 적용하여 공격자가 이를 악용할 수 있는 시간을 최소화한다. +점검 기준 +신속한 패치 메커니즘 + +## 1. 신속한 패치 배포 및 적용 절차 존재 여부 + + +## 2. 패치 적용 검증 및 추적 관리 여부 + +구현 및 점검 방안 +1 + +## 01. 공급망 구성요소에서 취약점이 발견될 경우, 보안 패치를 신속하게 배포·적용할 수 있는 절차가 마련되어 + +있는지 확인한다. +•  취약점 발견부터 패치 적용까지의 흐름이 문서화되어 있어야 한다. +•  심각도에 따라 대응 기한이 정의되어 있으며, 긴급 취약점은 즉시 또는 일정 기간 내 대응해야 한다. +•  공급업체로부터 제공되는 패치 정보를 주기적으로 수집하고, 적용 여부를 추적·기록해야 한다. +2 + +## 01. 배포된 패치가 실제 시스템에 정상 적용되었는지 검증하고, 적용 이력 및 결과가 추적 가능한 형태로 + +관리되는지 확인한다. +•  패치 적용 후 정상 동작 여부를 테스트하거나 취약점 재검증을 수행해야 한다. +•  패치 적용 로그에는 구성요소 명, 버전, 패치 일시, 담당자, 검증 결과가 포함되어야 한다. +•  미적용 패치 및 예외 승인 내역은 별도로 관리되어야 한다. + +#### 3.2.7. [SC-07] 신속한 패치 메커니즘 + + + +--- + +78 +번호 +보안 수준 +체크리스트 항목 +IA-01 +L1 +사용자 인증 +L2 +유일한 사용자 식별 및 인증 +L4 +다중 사용자 인증 +IA-02 +L2 +장치 인증 +L3 +유일한 장치 식별 및 인증 +IA-03 +L1 +사용자 패스워드 강도 +L3 +이전에 사용된 사용자 패스워드 사용 제한 +L4 +사용자 패스워드 사용기한 제한 +IA-04 +L2 +공개키 인증 +L3 +공개키 인증을 위한 하드웨어 보안 +IA-05 +L2 +대칭키 인증 +L3 +대칭키 인증을 위한 하드웨어 보안 +IA-06 +L1 +인증 정보 노출 방지 +IA-07 +L1 +반복된 로그인 시도 제한 +IA-08 +L1 +시스템 사용 알림 +IA-09 +L1 +사용자 계정 관리 +IA-10 +L1 +사용자 식별 관리 +IA-11 +L1 +사용자 인증자 관리 +L3 +하드웨어 보안을 통한 인증자 보호 +기기에 대한 접근을 제어하여 무단 접근을 방지하기 위한 식별 및 인증(Identification and Authentication, IA) +체크리스트 항목은 다음과 같다. + +### 3.3 식별 및 인증 점검 체크리스트 + +식별 및 인증 보안 체크리스트 항목 + + +--- + +01 +02 +03 +79 +보안 +요구사항 +(L1) 사용자 인증 - 사용자가 접근 가능한 모든 인터페이스에 대해서 모든 사용자를 인증하는 기능을 제공해야 한다. +(L2) 유일한 사용자 식별 및 인증 - 사용자가 접근 가능한 모든 인터페이스에 대해서 모든 사용자를 유일하게 +식별하고 인증하는 기능을 제공해야 한다. +(L4) 다중 사용자 인증 - 모든 사용자에 대해 다중 인증 기능을 적용해야 한다. +목적 +모든 접근 인터페이스에서 사용자를 유일하게 식별하고 인증하여 비인가 사용자의 접근 및 오용을 차단하고, 접근 +통제의 신뢰성을 보장한다. +점검 기준 +L1. 사용자 인증 +L1-1. 인간 사용자가 인터페이스 접근 시 사용자 인증 수행 여부 +L2. 유일한 사용자 식별 및 인증 +L2-1. 각 사용자 유일 식별 여부 +L4. 다중 사용자 인증 +L4-1. 2개 이상의 인증 수단을 통한 사용자 인증 수행 여부 +구현 및 점검 방안 +L1 +L1-1. 인간 사용자가 인터페이스 접근 시 사용자 인증 수행 여부 + +## 01. 로봇이 제공하는 인터페이스 및 서비스를 식별한다. + +•  “2.3. 인터페이스 식별”에서 사용자 인증 수행 대상이 되는 서비스를 식별한다. 다음과 같은 유형의 서비스들이 식별될 수 +있다. + +## 02. 식별된 서비스에 접근하는 사용자에 대한 인증을 수행하는지 확인한다. + +•  사용자 인증 수행은 다음과 같은 방식으로 수행될 수 있다. + +#### 3.3.1 [IA-01] 사용자 식별 및 인증 + +통신 유형 +통신 인터페이스 +제공 서비스 +무선 네트워크 +Wi-Fi (AP 모드) +•  무선 네트워크 접속 제공 +NFC / RFID +•  사용자 인증 +Wi-Fi (STA 모드) +•  HTTP/HTTPS 기반 Web UI +•  REST API +•  MQTT +•  ROS 통신 +•  WebSocket +•  SSH +•  Modbus/TCP +•  OPC UA +•  자체 개발 프로토콜 +4G LTE, 5G +유선 네트워크 +이더넷 +물리 인터페이스 +디버깅 포트(UART) +•  로컬 시리얼 콘솔 접근 +사용자 인터페이스 예시 +구분 +방식 +자격 증명 기반 인증 +•  ID / 비밀번호 +•  PIN 번호 +암호화 키 기반 인증 +•  공개키 인증 +•  디지털 인증서 + + +--- + +80 +•  해당 항목은 인터페이스 접근 시 사용자 인증 수행 여부에만 초점을 두므로, 사용자 식별 절차는 필수 요건이 아니다. +따라서, 비밀번호 입력과 같은 단일 인증 절차만으로도 요구사항을 충족할 수 있다. +L2 +L2-1. 각 사용자 유일 식별 여부 + +## 01. 인증된 사용자를 고유 식별자를 통해 식별하는지 확인한다. + +•  사용자를 구분하기 위해 다음과 같은 식별자들이 활용될 수 있다. +L4 +L4-1. 2개 이상의 인증 수단을 통한 사용자 인증 수행 여부 + +## 01. 사용자 인증 시 2개 이상의 인증 방법을 사용하는지 확인한다. + +•  OTP, 모바일 앱, 인증서, 생체 인식, PIN 코드, 스마트카드, 보안키 등이 기존 인증 방식과 조합되어 다중 인증(MFA) 수단 +으로 활용될 수 있다. +토큰 기반 인증 +•  세션 / 쿠키 기반 인증 +•  OAuth / JWT 토큰 +외부 연계 인증 +•  SAML / OpenID Connect +물리적 접근 인증 +•  NFC / RFID 카드 인증 +•  보안 토큰 (USB 키, 스마트카드) +임시 인증 / 승인 절차 +•  1회용 접근 토큰, 승인 코드 +다중 요소 인증(MFA) +•  비밀번호 + OTP / 인증 앱 +사용자 인증 방법 예시 +ID 및 패스워드를 통한 인증 예시 +패스워드를 통한 인증 예시 +구분 +예시 +계정 기반 식별자 +사용자 ID, 로그인 계정 명, 이메일 주소 +디지털 인증서 정보 +인증서의 DN(Distinguished Name), 시리얼 번호 +디렉터리 서비스 정보 +LDAP DN, Active Directory SID +하드웨어/토큰 식별자 +보안 토큰 ID, 스마트카드 ID +생체정보 식별자 +지문 ID, 얼굴 인식 템플릿, 홍채 ID +응용 서비스 식별자 +사번, 고객번호, 회원번호 +세션/토큰 기반 식별자 +JWT의 subject, 세션 ID +사용자 식별자 예시 + + +![이미지 80-0](images/p0080_img0.png) + + +![이미지 80-1](images/p0080_img1.png) + + +--- + +01 +02 +03 +81 +보안 +요구사항 +(L2) 장치 인증 - 로봇 서비스 구성요소를 식별하고 인증하는 기능을 제공해야 한다. +(L3) 유일한 장치 식별 및 인증 - 로봇은 다른 로봇 서비스 구성요소를 유일하게 식별하고 인증하는 기능을 제공해야 +한다. +목적 +네트워크에 연결되는 장치(로봇 본체, 제어기, 센서, 게이트웨이 등)를 고유하게 식별하고 인증하여 비인가 장치의 +접속·데이터 위조·중간자 공격 등을 방지하고, 통신 신뢰성을 확보한다. +점검 기준 +L2. 장치 인증 +L2-1. 로봇과 다른 서비스 구성요소 간 인증 수행 여부 +L3. 유일한 장치 식별 및 인증 +L3-1. 각 장치 유일 식별 여부 +구현 및 점검 방안 +L2 +L2-1. 장치가 인터페이스 접근 시 장치 인증 수행 여부 + +## 01. 로봇이 제공하는 인터페이스 및 서비스를 식별한다. + +•  “2.3. 인터페이스 식별”에서 장치 인증 수행 대상이 되는 서비스를 식별한다. 다음과 같은 유형의 서비스들이 식별될 수 있 +다. + +## 02. 식별된 서비스에 접근하는 장치에 대한 인증을 수행하는지 확인한다. + +•  장치 인증 수행은 다음과 같은 방식으로 수행될 수 있다. +•  해당 항목은 인터페이스 접근 시 장치 인증 수행 여부에만 초점을 두므로, 장치 식별 절차는 필수 요건이 아니다. 따라서, 인 +증서 교환이나 키 검증과 같은 단일 인증 절차만으로도 요구사항을 충족할 수 있다. + +#### 3.3.2 [IA-02] 장치 식별 및 인증 + +통신 유형 +통신 인터페이스 +제공 서비스 +무선 네트워크 +LoRa / ZigBee +•  센서 데이터 업링크 +•  저속 제어 명령 +•  노드 상태 보고 +Bluetooth +•  사용자 인증 +레거시 RF +•  간단한 로봇 제어 +NFC / RFID +•  장치 인증 +Wi-Fi (STA 모드) +•  OPC UA / TLS 인증서 기반 +통신 +유선 네트워크 +이더넷 +통신 유형 +통신 인터페이스 +인증서 기반 인증 +•  X.509 인증서 +•  디지털 서명 +암호화 키 기반 인증 +•  대칭 / 세션 키 +•  공개키 기반 인증(PKI) +하드웨어 기반 인증 +•  TPM / Secure Element 내 키 서명 +•  eSIM / 보안 모듈 인증 +물리 인터페이스 기반 인증 +•  NFC / RFID 모듈 상호 인증 +네트워크 기반 인증 +•  MAC 주소 / Device ID 화이트리스트 +클라우드 연계 +•  장치 토큰 +•  JWT +장치 인터페이스 예시 +장치 인증 방법 예시 + + +--- + +82 +L3 +L3-1. 각 장치 유일 식별 여부 + +## 01. 인증된 장치를 고유 식별자를 통해 식별하는지 확인한다. + +•  장치를 구분하기 위해 다음과 같은 식별자들이 활용될 수 있다. +구분 +예시 +하드웨어 기반 식별자 +MAC 주소, CPU 시리얼, 장치 보드 ID, TMP/ECC 키 ID +디지털 인증서 정보 +인증서의 DN(Distinguished Name), 시리얼 번호 +통신 인터페이스 식별자 +LoRa 노드 주소(DevAddr), ZigBee IEEE 주소, Bluetooth BD_ADDR +장치 계정 기반 식별자 +Device ID, Client ID, 장비 등록 계정 명 +보안 모듈 식별자 +Secure Element ID, eSIM ICCID/IMSI, HSM 키 핸들 +응용 서비스 식별자 +로봇 일련번호, 장비 관리용 Asset ID, 클라우드 등록 디바이스 번호 +세션/토큰 기반 식별자 +MQTT Client ID, OPC UA Session ID, JWT Claim 내 device_subject +장치 식별자 예시 + + +--- + +01 +02 +03 +83 +보안 +요구사항 +(L1) 사용자 패스워드 강도 - 국제적으로 인정된 사용자 패스워드 지침에 따라 사용자 패스워드 강도를 적용하는 +기능을 제공해야 한다. 일반적으로 적용해야 하는 최소 요구사항은 다음과 같다. +•  최소길이 8자 이상 +•  영문자(대문자, 소문자), 숫자, 특수문자 중 3가지 이상 필수 조합 +(L3) 이전에 사용된 사용자 패스워드 사용 제한 - 설정에 따라 이전에 사용된 사용자 패스워드를 재사용하지 +못하도록 제한하는 기능을 제공해야 한다. +(L4) 사용자 패스워드 사용기간 제한 - 사용자 패스워드의 유효한 사용기간을 제한하는 기능을 제공해야 한다. +일반적으로 적용해야 하는 최소 요구사항은 다음과 같다. +•  변경주기는 6개월 이내 권고 +목적 +비인가 사용자가 약하거나 반복된 패스워드 사용을 통해 시스템 접근 권한을 획득하지 못하도록, 사용자 인증 +정보의 복잡도와 주기적 변경을 강제함으로써 인증 보안 수준을 유지한다. +점검 기준 +L1. 사용자 패스워드 강도 +L1-1. 국제적으로 인정된 보안 가이드라인에 따른 패스워드 강도 정책 적용 여부 +L3. 이전에 사용된 사용자 패스워드 사용 제한 +L3-1. 이전에 사용된 사용자 패스워드를 사용 제한 여부 +L4. 사용자 패스워드 사용기간 제한 +L4-1. 사용자 패스워드의 사용기간 제한 여부 +구현 및 점검 방안 +L1 +L1-1. 국제적으로 인정된 보안 가이드라인에 따른 패스워드 강도 정책 적용 여부 +01. “3.3.1 사용자 식별 및 인증” 및 “3.3.2 장치 식별 및 인증” 요구사항 점검 후 식별된 인증 방법 중 패스워드 +기반 인증에 대하여 다음과 같이 국제적으로 인정된 보안 가이드라인에 따른 패스워드 강도 정책이 적용되어 +있는지 확인한다. +•  최근 국제 표준의 추세는 단순 복잡도 강제보다는 길이 기반의 패스프레이즈 전략 및 유추·재사용 방지 강화에 중점을 두고 +있으므로, 해당 방향성을 고려한 정책 적용 여부를 함께 확인한다. +[방안 1] NIST SP 800-63B +NIST SP 800-63B는 Memorized Secret(패스워드/PIN 등) 설정 시 다음을 권고하고 있다. +•  사용자가 직접 생성하는 비밀번호는 최소 8자 이상으로 설정 +•  시스템이 자동 생성하는 경우 무작위 값 6자 이상 사용 +[방안 2] OWASP ASVS 4.0 +OWASP ASVS 4.0에서는 다음과 같이 패스워드 강도 기준을 권고하고 있다. +•  최소 길이 8자 이상, 일반적으로 12~15자 이상의 길이를 권장 +•  사용자 불편을 초래하는 복잡도 규칙의 강제보다는 길이 중심 정책을 권장 +•  사전에 기반한 비밀번호, 반복/연속 문자 등 유추 용이한 패턴 사용 금지 +•  비밀번호 재사용 방지를 위한 이전 비밀번호 목록 유지 및 검증 정책 권고 +L3 +L3-1. 이전에 사용된 사용자 패스워드를 사용 제한 여부 + +## 01. 이전에 사용된 사용자 패스워드를 사용하지 못하도록 제한하고 있는지 확인한다. + +[방안 1] CIS +CIS(Center of Internet Security)는 최근 24개의 패스워드를 사용하지 못하도록 할 것을 권장하고 있다. + +#### 3.3.3 [IA-03] 사용자 패스워드 정책 + + + +--- + +84 +L4 +L4-1. 사용자 패스워드의 사용기간 제한 여부 + +## 01. 해당 패스워드에 대한 사용기간을 제한할 수 있는지 확인한다. + +[방안 1] CIS +CIS는 최소 60일마다 패스워드를 정기적으로 변경할 것을 권장하고 있다. +이전에 사용된 사용자 패스워드 제한 예시 +사용자 패스워드 사용기간 제한 예시 + + +![이미지 84-0](images/p0084_img0.png) + + +![이미지 84-1](images/p0084_img1.png) + + +--- + +01 +02 +03 +85 +보안 +요구사항 +(L2) 공개키 인증 - 공개키 기반구조(PKI)를 사용하는 경우, PKI를 운영하거나 기존 PKI에서 공개키 인증서를 얻을 +수 있는 기능을 제공해야 한다. 또한, 공개키 인증 활용 시 하위 기능을 만족해야 한다. +•주어진 인증서의 서명 유효성을 검사하여 인증서를 검증 +•인증서가 발행된 대상과 통신하는 모든 호스트에 대하여 종단 인증서 적용하여 자체 서명 인증서나 인증서 체인 검증 +•주어진 인증서의 폐지 상태를 확인하여 인증서의 유효성을 검사 +•해당 개인키에 대한 사용자(사람, 소프트웨어 프로세스 또는 장치)를 설정 +•인증된 신원을 사용자(사람, 소프트웨어 프로세스 또는 장치)에 매핑 +•공개키 인증에 사용되는 암호키와 알고리즘의 안전성 보장 +(L3) 공개키 인증을 위한 하드웨어 보안 - 하드웨어 보안 메커니즘을 통해 관련 개인키를 보호하는 기능을 제공해야 +한다 +목적 +공개키 기반 인증과 암호화가 안전하게 이루어지도록 키의 생성·배포·저장·폐기를 체계적으로 관리하여 위·변조, +도난, 오용을 방지한다. +점검 기준 +L2. 공개키 인증 기능 관리 +L2-1. 인증서 서명 유효성 검증 여부 +L2-2. 신뢰할 수 있는 종단 인증서 적용 여부 +L2-3. 인증서 폐지 상태 확인 여부 +L2-4. 개인키에 대한 사용자 설정 여부 +L2-5. 인증된 신원과 사용자 매핑 관리 여부 +L2-6. 암호키 및 알고리즘 안정성 보장 여부 +L3. 하드웨어 보안 메커니즘 사용 여부 +L3-1. 하드웨어 보안 메커니즘을 통한 개인키 보호 여부 +구현 및 점검 방안 +L2 +L2-1. 인증서 서명 유효성 검증 여부 +01. “3.3.1 사용자 식별 및 인증” 및 “3.3.2 장치 식별 및 인증” 항목 점검 후 식별된 인증 방법 중 공개키 기반 인증 +(PKI)을 사용하는 서비스를 식별한다. +•  공개키 인증은 다음과 같은 서비스 또는 기능에서 활용될 수 있다. +로봇과 관리 서버 간 보안 통신(TLS/HTTPS/MQTT OPC UA) +장치 간 상호 인증(mTLS) +소프트웨어/펌웨어/백업 데이터 등 무결성 검증 + +## 02. 식별된 서비스에 대하여 제공된 인증서 서명이 유효하게 검증되는지 여부를 확인한다. + +•  TLS, OPC UA, MQTT 보안 설정 또는 애플리케이션 레벨에서 인증서 서명 검증이 자동 또는 수동으로 수행되는지 +확인하며, 검증 기능이 비활성화되어 있거나 verify = false 등 인증서 검증을 우회하는 설정이 적용된 경우 미흡으로 +판단한다. +Python (예: TLS 클라이언트 인증서 검증 수행 증적) +import ssl, socket +context = ssl.create_default_context() +context.verify_mode = ssl.CERT_REQUIRED # 인증서 검증 +context.check_hostname = True # 인증서 CN/SAN 검증 +with socket.create_connection((“server.com”, 443)) as sock: +with context.wrap_socket(sock, server_hostname=”server.com”) as ssock: +print(“TLS Established:”, ssock.version()) + +#### 3.3.4 [IA-04] 공개키 관리 + + + +--- + +86 +L2-2. 신뢰할 수 있는 종단 인증서 적용 여부 + +## 01. 인증서가 신뢰 가능한 CA 기반으로 발급된 종단 인증서인지 확인한다. + +•  다음 사항을 확인하여 종단 인증서가 신뢰 가능한 인증서인지 판단한다. +인증서의 Issuer가 Self-signed가 아닌지 확인하고, 공인 CA 또는 조직에서 운영하는 신뢰할 수 있는 CA가 발급한 +인증서인지 확인한다. +인증서가 체인 검증이 가능한 구조로 구성되어 있으며, 클라이언트가 Root CA만 보유한 상태에서도 검증이 가능한지 +확인한다. +L2-3. 인증서 폐지 상태 확인 여부 + +## 01. 식별된 서비스에 대하여 인증서 폐지 상태를 확인하는 기능이 적용되어 있는지 여부를 점검한다. + +•  CRL(Certificate Revocation List) 또는 OCSP(Online Certificate Status Protocol) 기반 폐지 검증 기능을 사용하여, +폐지된 인증서를 신뢰하지 않도록 차단하는지 확인한다. +•  폐지 상태 확인 기능이 비활성화되어 있거나, CRL/OCSP 설정이 누락된 경우 미흡으로 판단한다. +L2-4. 개인키에 대한 사용자 설정 여부 + +## 01. 사용되는 개인키에 대한 소유자(사용자, 소프트웨어 프로세스 또는 장치) 설정 및 관리가 적절히 수행되는지 + +확인한다. +•  개인키가 인증된 사용자 또는 장치에 적절히 할당되어 있는지 확인하며, 개인키가 공유되거나 무단 사용자에게 노출되는 +경우 미준수로 판단한다. +L2-5. 인증된 신원과 키 매핑 관리 여부 + +## 01. 인증된 신원과 해당 공개키 또는 인증서를 매핑하여 관리하는지 확인한다. + +•  시스템에서 등록된 인증서가 어느 사용자/장치에 속하는지 식별 가능해야 하며, 인증서 또는 키가 회수·폐지될 경우 해당 +매핑도 갱신되는지 확인한다. +•  인증서 기반 접근 제어 목록이 존재하지 않거나, 폐지 후에도 허용되는 경우 미준수로 판단한다. 다음과 같은 접근 제어 +목록이 있을 수 있다. +•  인증서의 주체 정보(CN/SAN), KeyUsage 및 ExtendedKeyUsage 항목이 해당 서비스 목적(TLS Web Server +Authentication 등)에 적합한지 확인한다. +server.conf (예: OPC UA 서버 인증서 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RejectUnknownCertificates = True # 검증 실패 시 차단 +Bash (예: 인증서 내용 확인 명령어) +# openssl x509 -in server.crt -text -noout +server.conf (예: OPC UA 서버 인증서 폐지 검증 활성화 설정) +ValidateCertificates = True # 인증서 검증 수행 +RevocationCheck = True # 인증서 폐지 상태 확인 활성화 +RejectUnknownCertificates = True # 검증 실패 시 차단 +Bash (예: 개인키 접근 권한 설정) +# chown robot-service:robot-service /etc/robot/keys/device.key +# chmod 600 /etc/robot/keys/device.key // 파일 소유자만 접근 가능 + + +--- + +01 +02 +03 +87 +L2-6. 암호키 및 알고리즘 안정성 + +## 01. 인증서 기반 인증에 사용되는 암호 알고리즘, 키 길이 및 해시 알고리즘이 최신 보안 요구사항을 충족하는지 + +확인한다. +•  다음과 같은 암호화 알고리즘 기준을 적용할 수 있다. +L3 +L3-1. 하드웨어 보안 메커니즘을 통한 개인키 보호 여부 + +## 01. 개인키가 하드웨어 기반 보안 메커니즘을 통해 저장·보호되고 있는지 확인한다. + +•  개인키가 일반 파일시스템에 평문으로 저장되거나 하드웨어 또는 보안 전용 저장소에서 보호되지 않는 경우 미흡으로 +판단한다. +•  적용 가능한 하드웨어 보안 수단은 환경에 따라 다음 중 하나 이상일 수 있다. +HSM(Hardware Security Module) +TPM(Trusted Platform Module) +Secure Element / Secure Enclave / TEE(Trusted Execution Environment) +단말/장치 내 전용 키 저장 영역 (예: IoT/로봇 MCU 보안 영역) + +## 02. 개인키가 외부로 추출되지 않도록 설계되어 있는지 확인한다. + +•  개인키가 HSM/TPM 내부에서 생성 및 보관되며, 키 자체가 외부로 유출되지 않는 구조여야 한다. + +## 03. 인증 또는 서명 연산이 하드웨어 내부에서 수행되는지 확인한다. + +•  개인키가 외부로 나오지 않고, 하드웨어 내부에서 암호 연산이 수행되는지 확인한다. +구분 +예시 +일반 서버/클라우드 +DB 테이블 +OPC UA +/pki/trusted, /pki/rejected 폴더 +MQTT mTLS +CA DB, 허용 클라이언트 인증서 목록 +로봇 PKI +KV DB, HSM 연동 +구분 +권고 기준 +미흡 기준 +키 알고리즘 +RSA ≥ 2048bit 또는 ECC P-256 이상 +RSA 1024bit 이하, ECC P-192 이하 +해시 알고리즘 +SHA-256 이상 (SHA-2/SHA-3 계열) +SHA-1, MD5 사용 +TLS 프로토콜 +TLS 1.2 이상(권장: TLS 1.3) +TLS 1.0 / 1.1 사용 +플랫폼 별 인증서 접근 제어 목록 예시 +공개키 인증에 사용되는 알고리즘 보안 기준 예시 + + +--- + +88 +보안 +요구사항 +(L2) 대칭키 인증 - 대칭키를 사용하는 경우, 다음과 같은 기능을 제공해야 한다. +•  대칭키를 사용하여 상호 신뢰 수립 +•  공유 비밀키를 안전하게 저장 +•  공유 비밀키로의 접근 제한 +•  대칭키 인증에 사용되는 암호키와 알고리즘의 안전성 +(L3) 대칭키 인증을 위한 하드웨어 보안 - 하드웨어 보안 메커니즘을 통해 관련 대칭키를 보호하는 기능을 제공해야 +한다. +목적 +안전한 생성·저장·배포·회수·폐기 절차를 통해 키 유출 및 오남용을 방지한다. +점검 기준 +L2. 대칭키 인증 기능 관리 +L2-1. 대칭키를 통한 상호 신뢰 수립 여부 +L2-2. 공유 비밀키 안전 저장 여부 +L2-3. 공유 비밀키 접근 통제 여부 +L2-4. 대칭키 및 알고리즘 안정성 보장 여부 +L3. 하드웨어 보안 메커니즘 사용 여부 +L3-1. 하드웨어 보안 메커니즘을 통한 대칭키 보호 여부 +구현 및 점검 방안 +L2 +L2-1. 대칭키를 통한 상호 신뢰 수립 여부 +01. “3.3.1 사용자 식별 및 인증” 및 “3.3.2 장치 식별 및 인증” 항목 점검 후 식별된 인증 방법 중 대칭키를 +사용하는 서비스를 식별한다. +•  대칭키 인증은 사전에 공유된 비밀키를 이용해 두 주체 간 상호 신뢰를 수립하거나 메시지의 무결을 검증하는 방식으로 활 +용될 수 있다. +•  대칭키 기반 인증은 다음과 같은 서비스 또는 기능에서 사용될 수 있다. +로봇과 제어 서버 간 사전 공유 키를 이용한 통신 세션 인증 +IoT 장치 및 센서 간 메시지 인증 코드(HMAC)를 통한 무결성 검증 +제어 프로토콜에서 PSK(Pre-Shared Key)를 이용한 세션 수립 + +## 02. 통신 또는 데이터 교환 시 대칭키(공유 비밀키) 를 사용하여 양 단말 간 상호 신뢰가 수립되는지 확인한다. + +•  세션 키를 사용한 암호화 통신(AES, HMAC 등)이 구성되어 있으며, 키 교환 및 검증 과정에서 무결성과 인증이 보장되는 +경우 충족으로 판단한다. +•  키가 하드코딩되거나, 평문으로 교환되는 경우 미흡으로 판단한다. +•  TLS, DTLS, MQTT over TLS, OPC UA SecureChannel 등 대칭키 세션을 자동 생성하는 프로토콜 사용 시 준수로 +인정한다. +L2-2. 공유 비밀키 안전 저장 여부 + +## 01. 대칭키가 안전한 저장소에 저장되어 있으며, 평문 노출되지 않는지 확인한다. + +•  TLS 통신에서 사용되는 세션 키(공유 비밀키) 는 메모리 내에서 일시적으로 생성·사용 후 폐기되며, 디스크나 파일로 +저장되지 않기 때문에 자동으로 충족되는 항목이다. +•  반면, PSK나 고정 대칭키를 사용하는 서비스의 경우, 해당 키가 파일로 직접 저장되거나 코드 내부에 포함되어 있으면 +미흡으로 판단한다. +•  대칭키가 암호화된 형태로 별도 Key Store, Vault, HSM, TPM 등 보안 저장소에 보관되는 경우 충족으로 인정한다. + +#### 3.3.5 [IA-05] 대칭키 관리 + + + +--- + +01 +02 +03 +89 +L2-3. 공유 비밀키 접근 통제 여부 + +## 01. 대칭키에 접근 가능한 사용자·프로세스가 최소화되어 있으며, 권한이 엄격히 통제되는지 확인한다. + +•  OS 파일 권한, 역할 기반 제어(RBAC), 키 접근 정책 등을 점검한다. +•  다수 서비스가 동일 키를 공유하거나 백업 시 키가 외부로 노출되는 경우 미흡으로 판단한다. +L2-4. 대칭키 및 알고리즘 안정성 보장 여부 + +## 01. 대칭키 기반 인증·암호화에 사용되는 암호 알고리즘과 키 길이가 최신 보안 요구사항을 충족하는지 + +확인한다. +•  다음과 같은 암호화 알고리즘 기준을 적용할 수 있다. +L3 +L3-1. 하드웨어 보안 메커니즘을 통한 대칭키 보호 여부 + +## 01. 대칭키가 하드웨어 기반 보안 메커니즘을 통해 저장·보호되고 있는지 확인한다. + +•  대칭키가 일반 파일시스템에 평문으로 저장되는 경우 미흡으로 판단한다. +•  적용 가능한 하드웨어 보안 수단은 환경에 따라 다음 중 하나 이상일 수 있다. +HSM +TPM +Secure Element / Secure Enclave / TEE(Trusted Execution Environment) +단말/장치 내 전용 키 저장 영역 + +## 02. 대칭키가 외부로 추출되지 않도록 설계되어 있는지 확인한다. + +•  대칭키가 하드웨어 내부에서 생성 및 관리되며, Export가 제한된 상태여야 한다. +•  외부 백업, 로깅, 디버깅 과정에서 대칭키가 출력되거나 API로 노출되는 경우 미흡으로 판단한다. +•  키 교체 시에도 새 키는 하드웨어 내부에서 생성·갱신되어야 하며, 외부에서 평문 전달되어서는 안 된다. + +## 03. 암호 연산이 하드웨어 내부에서 수행되는지 확인한다. + +•  대칭키가 외부 메모리로 로드되지 않고, HSM·TPM 내부에서 직접 암·복호화, MAC 계산 등의 연산이 수행되는 구조일 +경우 충족으로 인정한다. +구분 +권고 기준 +미흡 기준 +대칭키 +알고리즘 +AES 계열(AES-128 이상, 권장 AES-256) +ChaCha20-Poly1305, GCM/CTR 모드 등 현대 +블록암호 사용 +DES, 3DES, RC4, Blowfish 등 구식 +알고리즘 사용 +키 길이 +AES-128 이상 (권장 AES-256) +64bit 이하 키, 3DES 112bit 이하 등 +무결성 검증 +방식 +HMAC-SHA-256 이상 사용 +HMAC-MD5, HMAC-SHA1 등 취약 +해시 기반 +운영 모드 +GCM, CTR, CCM 등 인증 모드 +ECB 등 패턴 노출 모드 사용 +프로토콜 +적용 +TLS 1.2 이상 또는 ECDHE 기반 세션 키 교환 사용 +TLS 1.0 / 1.1, 정적 PSK만 사용 +키 수명 관리 +세션별 키 사용, 주기적 교체 수행 +동일 키 장기 재사용, 키 갱신 절차 부재 +대칭키 인증에 사용되는 알고리즘 보안 기준 예시 + + +--- + +90 +보안 +요구사항 +(L1) 인증 정보 노출 방지 - 사용자 인증 프로세스 진행 동안에 인증자가 출력장치에 노출되지 않도록 해야 하고, +인증실패 사유에 대한 피드백 정보가 제공되지 않아야 한다. +목적 +인증 정보가 화면이나 로그 등에 노출되지 않도록 하면 어깨너머로 보거나 스크린샷·기록을 통해 비밀번호·토큰 등 +민감정보가 유출되는 것을 방지한다. +점검 기준 +L1. 인증 정보 노출 방지 기능 +L1-1. 패스워드 기반 인증 시, 인증자 입력 값 보호 여부 +L1-2. 2개 이상의 입력 필드 인증 실패 시, 모호한 피드백의 제공 여부 +구현 및 점검 방안 +L1 +L1-1. 패스워드 기반 인증 시, 인증자 입력 값 보호 여부 +01. “3.3.1 사용자 식별 및 인증” 및 “3.3.2 장치 식별 및 인증” 항목 점검 후 식별된 인증 방법 중 패스워드 기반 +인증에 대하여 사용자가 패스워드 기반 인증을 수행할 때 입력되는 인증 값이 화면이나 로그 등 출력장치를 +통해 노출되지 않는지 확인한다. +L1-2. 2개 이상의 입력 필드 인증 실패 시, 모호한 피드백의 제공 여부 + +## 01. 아이디(ID)와 패스워드 등 2개 이상의 입력 항목을 사용하는 인증 과정에서, 어떤 항목이 잘못되었는지에 대한 + +구체적인 피드백을 제공하지 않는지 확인한다. + +#### 3.3.6. [IA-06] 인증 정보 노출 방지 + +인증자 마스킹 예시 +로그인 실패 시 모호한 피드백 제공 예시 + + +![이미지 90-0](images/p0090_img0.png) + + +![이미지 90-1](images/p0090_img1.png) + + +--- + +01 +02 +03 +91 +보안 요구사항 +(L1) 반복된 로그인 시도 제한 - 모든 사용자(사람, 소프트웨어 프로세스 또는 장치) 인증이 연속적으로 실패하는 +경우 해당 사용자의 로그인 시도를 제한해야 한다. +•  모든 사용자에 대해 연속된 로그인 시도 실패 횟수 제한을 강제해야 한다. +•  로그인 실패 횟수 제한 임계치에 도달할 경우, 정해진 시간 동안 또는 관리자가 잠금 해제할 때까지 접근을 +거부해야 한다. 관리자는 타임아웃이 만료되기 전에 잠김 사용자 계정을 잠금 해제할 수도 있다. +목적 +비밀번호 추측이나 자동화된 무차별 대입 공격으로부터 계정을 보호한다. +점검 기준 +L1. 반복된 로그인 시도 제한 +L1-1. 로그인 실패 시도 임계치 초과 시 접근 제한 여부 +L1-2. 관리자 계정이 접근 제한된 사용자 잠금 해제 가능 여부 +구현 및 점검 방안 +L1 +L1-1. 로그인 실패 시도 임계치 초과 시 접근 제한 여부 +01. “3.3.1 사용자 식별 및 인증” 및 “3.3.2 장치 식별 및 인증” 항목 점검 후 식별된 서비스에 대하여 연속된 +로그인 실패 시 접근을 제한하는지 확인한다. +•  로그인 실패 임계치는 설정이 이미 되어 있거나, 권한이 있는 사용자가 설정할 수 있어야 하며, 임계치 초과 시 접근을 +일정 기간 차단하거나 계정을 잠금하는 기능을 제공하는지 확인한다. +•  차단 대상은 IP 또는 사용자 계정이 될 수 있으며, 차단 방식은 단순 지연 또는 완전 차단으로 동작할 수 있다. +•  차단 동작이 로그에 기록되고, 차단 사유를 포함하는지 확인한다. +L1-2. 관리자 계정이 접근 제한된 사용자 잠금 해제 가능 여부 + +## 01. 관리자가 접근 제한된 사용자를 잠금 해제할 수 있는지 확인한다. + +•  관리자가 잠긴 사용자 계정을 조회할 수 있는 기능(관리 UI/API/DB 쿼리 등)이 존재하는지 확인하고, 잠금 해제 시 +로그가 기록되는지 확인한다. + +#### 3.3.7 [IA-07] 반복된 로그인 시도 제한 + + + +--- + +92 +보안 요구사항 +(L1) 시스템 사용 알림 - 시스템에 중대한 영향을 줄 수 있는 기능에 대해, 해당 위험성을 사용자에게 고지해야 +한다. +목적 +시스템 접근 전 사용자에게 보안 정책·접근 통제·무단 사용 금지 등을 명시적으로 고지하여, 불법적·비인가 접근 시 +법적 책임과 보안 인식을 강화한다. +점검 기준 +L1. 시스템 사용 알림 메시지 제공 +L1-1. 기능이 시스템에 끼칠 수 있는 영향에 대한 사용자 고지 여부 +구현 및 점검 방안 +L1 +L1-1. 기능이 시스템에 끼칠 수 있는 영향에 대한 사용자 고지 여부 + +## 01. 시스템 로그인 또는 주요 기능(예: 제어, 파라미터 변경, 설정 수정) 수행 전, 해당 시스템 사용이 미치는 + +보안적·법적 영향에 대해 사용자가 명확히 인지할 수 있도록 고지하는 메시지를 제공하는지 확인한다. +•  고지 메시지는 로그인 화면 상단 배너나 별도의 팝업 창 형태로 노출되어, 사용자가 시스템 사용 전 해당 내용을 명확히 +인지할 수 있도록 제공될 수 있다. + +#### 3.3.8. [IA-08] 시스템 사용 알림 + +로봇 파라미터 변경에 대한 위험 사용자 고지 예시 + + +![이미지 92-0](images/p0092_img0.png) + + +--- + +01 +02 +03 +93 +보안 요구사항 +(L1) 사용자 계정 관리 - 모든 사용자 계정 추가, 수정, 삭제, 활성화 또는 비활성화를 포함하여 사용자의 모든 계정 +관리를 지원하는 기능을 제공해야 한다. +목적 +시스템 내 모든 사용자 계정이 명시적 관리 절차를 통해 생성·변경·삭제되도록 함으로써, 비인가 계정 생성· +유령계정 존재 등을 방지하고 계정 수명 주기 전반의 보안을 유지한다. +점검 기준 +L1. 사용자 계정 관리 +L1-1. 인가된 관리자에 의한 사용자 계정 추가/수정/삭제/활성화/비활성화 기능 제공 여부 +구현 및 점검 방안 +L1 +L1-1. 인가된 관리자에 의한 사용자 계정 추가/수정/삭제/활성화/비활성화 기능 제공 여부 +01. “3.3.1 사용자 식별 및 인증” 및 “3.3.2 장치 식별 및 인증” 항목 점검 후 식별된 서비스가 단일 공용 계정을 +사용하는지 또는 개별 사용자 계정을 구분 및 관리하는 구조인지 확인한다. +•  사용 환경의 특성에 따라 단일 계정만 존재하고 사용자별 계정이 분리되어 있지 않은 경우, 본 요구사항은 적용 대상에서 +제외하거나 일부 충족으로 판단한다. + +## 02. 사용자별 계정이 존재하는 경우 인가된 사용자에 의한 계정의 생성·수정·삭제 및 활성화·비활성화 기능 제공 + +여부를 확인한다 +•  시스템 또는 관리자 콘솔을 통해 계정 관리가 가능해야 하며, 계정 관리 이력은 로그에 기록되어야 한다 +사용자 계정 관리 페이지 예시 + +#### 3.3.9 [IA-09] 사용자 계정 관리 + + + +![이미지 93-0](images/p0093_img0.png) + + +--- + +94 +보안 요구사항 +(L1) 사용자 식별자 관리 - 사용자, 그룹 또는 역할별로 사용자 식별자 관리를 지원하는 기능을 제공해야 한다. +목적 +사용자, 그룹 또는 역할별로 고유한 식별자를 부여·관리함으로써 시스템 접근 주체를 명확히 구분하고, +행위추적성과 책임성을 확보한다. +점검 기준 +L1. 사용자 식별자 관리 기능 +L1-1. 인가된 관리자에 의한 사용자 계정 또는 그룹의 식별자 추가, 수정, 삭제 기능 제공 여부 +구현 및 점검 방안 +L1 +L1-1. 인가된 관리자에 의한 사용자 계정 또는 그룹의 식별자 추가, 수정, 삭제 기능 제공 여부 +01. “3.3.1 사용자 식별 및 인증” 및 “3.3.2 장치 식별 및 인증” 항목 점검 후 식별된 서비스가 단일 공용 계정을 +사용하는지 또는 개별 사용자 계정을 구분 및 관리하는 구조인지 확인한다. +•  단일 계정만 존재하고 사용자별 계정이 분리되어 있지 않은 경우, 본 요구사항은 적용 대상에서 제외하거나 일부 충족으로 +판단한다. + +## 02. 사용자별 계정이 존재하는 경우 인가된 사용자에 의한 식별자의 생성·수정·삭제 기능 제공 여부를 확인한다 + +•  시스템 또는 관리자 콘솔(UI, CLI, API 등)을 통해 식별자 관리가 가능해야 하며, 식별자 관리 이력은 로그에 기록되어야 +한다. +식별자 변경 페이지 예시 + +#### 3.3.10 [IA-10] 사용자 식별자 관리 + + + +![이미지 94-0](images/p0094_img0.png) + + +--- + +01 +02 +03 +95 +보안 요구사항 +(L1) 사용자 인증자 관리 - 다음과 같은 사용자 인증자 관리 기능을 제공해야 한다. +•  인증자 초기화 +•  설치 시에 디폴트 인증자에 대한 변경 +•  주기적인 인증자 변경, 유효성 검사, 새로고침 기능을 지원 +•  인증자 저장, 사용 및 전송 중에 인가되지 않은 노출 또는 변경으로부터 보호 +(L3) 하드웨어 보안을 통한 인증자 보호 - 하드웨어 보안 메커니즘을 통해 관련 인증자를 보호하는 기능을 +제공해야 한다. +목적 +사용자 인증자(비밀번호, 인증키, 토큰 등)의 생성·저장·변경·전송 전 과정에서 보안성을 유지하여 인증 정보의 +유출, 위·변조, 무단 재사용을 방지하고 신뢰할 수 있는 인증 절차를 확보한다. +점검 기준 +L1. 사용자 인증자 관리 +L1-1. 인증자 초기화 +L1-2. 기본 값 변경 여부 +L1-3. 주기적인 인증자 변경 강제 여부 +L1-4. 인증자 보호(저장·사용·전송) 여부 +L3. 하드웨어 보안 메커니즘 사용 +L3-1. 하드웨어 보안 메커니즘을 통한 인증자 보호 여부 +구현 및 점검 방안 +L1 +L1-1. 인증자 초기화 +01. “3.3.1 사용자 식별 및 인증” 및 “3.3.2 장치 식별 및 인증” 항목 점검 후 식별된 서비스에서 사용자 또는 +관리자에 의해 인증자를 초기화할 수 있는 기능이 제공되는지 확인한다. +•  비밀번호 분실, 인증키 손상·노출, 디바이스 분실 등과 같은 상황에서 사용자가 새로운 인증자를 안전하게 발급받을 수 +있어야 한다 +•  초기화된 인증자는 임시 비밀번호 또는 새 토큰 발급 형태로 제공되며, 최초 로그인 시 반드시 사용자 변경을 강제해야 +한다. + +#### 3.3.11 [IA-11] 사용자 인증자 관리 + +인증자 초기화 페이지 예시 + + +![이미지 95-0](images/p0095_img0.png) + + +--- + +96 +L1-2. 기본 값 변경 여부 + +## 01. 설치 또는 초기 설정 시 제공되는 기본 인증자가 존재하는 경우, 사용자가 시스템을 운영하기 전에 반드시 + +초기 변경 절차를 거치도록 강제하는지 확인한다. +•  설치 후 최초 로그인 시 비밀번호 변경 팝업 / 초기화 절차 등이 제공되면 충족으로 판단한다. +L1-3. 주기적인 인증자 변경 강제 여부 + +## 01. 인증자에 대해 주기적인 변경 주기가 정의되어 있는지 확인한다. + +•  인증자 변경 주기 도래 시 사용자에게 갱신 알림 또는 강제 변경 절차가 제공되어야 한다. +L1-4. 인증자 보호(저장·사용·전송) 여부 + +## 01. 인증자가 저장될 때 암호화된 형태로 보관되는지 확인한다. + + +## 02. 인증자 사용 시 평문 값이 로그, 에러 메시지, 네트워크 패킷에 노출되지 않는지 점검한다. + + +## 03. 인증자가 네트워크를 통해 전송될 경우, 반드시 보안 통신 채널을 사용해야 한다. + +L3 +L3-1. 하드웨어 보안 메커니즘을 통한 인증자 보호 여부 + +## 01. 인증자가 하드웨어 기반 보안 메커니즘을 통해 저장·보호되고 있는지 확인한다. + +•  인증자가 일반 파일시스템에 평문으로 저장되거나, 코드에 직접 포함된 경우 미흡으로 판단한다. +•  인증자가 하드웨어 보안 모듈 내부의 보안 저장소 또는 암호화된 스토리지에 저장되는 경우 충족으로 판단한다. +• + +## 02. 인증 또는 서명 연산이 하드웨어 내부에서 수행되어, 인증자 값이 외부로 출력되지 않는지 확인한다. + +•  하드웨어 보안 모듈 내에서 키를 직접 사용하여 서명 또는 복호화 연산을 수행하는 구조인 경우 충족으로 판단한다. + +## 03. 하드웨어 보안 모듈이 물리적 침입 또는 디버깅으로부터 보호되는지 확인한다. + +•  Secure Boot, 암호화 스토리지, 디버그 인터페이스 잠금 등의 기능이 활성화되어 있다면 충족으로 판단한다. +인증자 암호화 저장 예시 + + +![이미지 96-0](images/p0096_img0.png) + + +--- + +01 +02 +03 +97 +번호 +보안 수준 +체크리스트 항목 +UC-01 +L1 +인간 사용자에 대한 권한 부여 +L2 +모든 사용자에 대한 권한 부여 +L2 +사용자 역할 기반 권한 부여 +UC-02 +L1 +모바일 코드 사용 통제 +L2 +모바일 코드 무결성 검사 +UC-03 +L1 +세션 잠금 +UC-04 +L2 +원격 세션 종료 +UC-05 +L3 +동시 세션 제어 +UC-06 +L1 +감사 로그 생성 +UC-07 +L1 +감사 로그 저장 용량 +L3 +감사 저장 용량 임계치 도달 시 경고 +UC-08 +L1 +감사 처리 실패 대응 +UC-09 +L1 +타임 스탬프 +L2 +시간 동기화 +L4 +시간 소스 무결성 보호 +UC-10 +L1 +인간 사용자에 대한 부인 방지 +L4 +모든 사용자에 대한 부인 방지 +UC-11 +L2 +물리적 진단 및 시험 인터페이스의 보호 +L3 +물리적 진단 및 시험 인터페이스의 능동적 모니터링 +로봇 시스템의 사용 권한을 제어하여 무단 작동 및 데이터 사용을 방지하기 위한 사용 통제(Use Control, UC) +체크리스트 항목은 다음과 같다. + +### 3.4 사용 통제 점검 체크리스트 + +사용 통제 체크리스트 항목 + + +--- + +98 +보안 요구사항 +(L1) 인간 사용자에 대한 권한 부여 - 업무 분리 및 최소 권한을 지원하고 모든 인터페이스 사용을 통제하기 위해 +인간 사용자에게 할당된 권한을 부여하는 기능을 제공해야 한다. +(L2) 모든 사용자에 대한 권한 부여 - 업무 분리 및 최소 권한을 지원하고 모든 인터페이스 사용을 통제하기 위해 +모든 사용자(사람, 소프트웨어 프로세스 및 장치)에게 할당된 권한을 부여하는 기능을 제공해야 한다. +(L2) 사용자 역할 기반 권한 부여 - 사용자의 역할에 대한 권한 매핑을 정의하고 수정할 수 있는 기능을 제공해야 +한다. +목적 +사용자와 프로세스, 장치별로 필요한 최소 권한만 부여하여 업무 분리와 접근 통제를 보장하고, 역할 기반 권한 +관리를 통해 비인가 행위나 권한 남용을 방지한다. +점검 기준 +L1. 사용자 권한 부여 +L1-1. 인가된 사용자에 의한 사용자 권한 부여 여부 +L2. 모든 사용자에 대한 권한 부여 +L2-1. 모든 사용자에 대한 권한 부여 여부 +L2. 사용자 역할 기반 권한 부여 +L2-1. 사용자 역할 기반 권한 부여 여부 +구현 및 점검 방안 +L1 +L1-1. 인가된 사용자에 의한 사용자 권한 부여 여부 + +## 01. 사용자 권한이 오직 인가된 사용자에 의해서만 부여·변경되는지 확인한다. + +•  권한 부여·변경 절차는 인증된 관리자 세션에서만 수행되어야 하며, 승인·기록 절차를 포함해야 한다. +•  일반 사용자는 스스로 권한을 상승시키거나 다른 사용자에게 권한을 부여할 수 없어야 한다. +•  권한 부여 내역은 감사 로그에 기록되고, 변경 이력이 추적 가능해야 한다. +•  사용 환경의 특성에 따라 단일 계정만 존재하고 사용자별 계정이 분리되어 있지 않은 경우, 본 요구사항은 적용 대상에서 +제외하거나 일부 충족으로 판단한다. +L2 +L2-1. 모든 사용자에 대한 권한 부여 여부 + +## 01. 유일하게 식별된 사용자(인간 사용자, 소프트웨어 프로세스, 장치)에 대해 명시적으로 권한이 부여되는지 + +확인한다. + +#### 3.4.1 [UC-01] 사용자 권한 부여 + +사용자 권한 부여 페이지 예시 + + +![이미지 98-0](images/p0098_img0.png) + + +--- + +01 +02 +03 +99 +L2-1. 사용자 역할 기반 권한 부여 여부 + +## 01. 시스템이 사용자 역할에 따라 권한을 정의하고 관리할 수 있는 기능을 제공하는지 확인한다. + +•  역할별 접근 범위(읽기, 쓰기, 제어 등)가 사전에 정의되어야 하며, 동일 역할 간 권한이 일관되게 적용되어야 한다. +•  역할 및 권한 매핑은 관리자에 의해서만 수정이 가능해야 한다. +•  역할 기반 권한 제어는 다음과 같은 방식으로 구현될 수 있다. +역할 기반 권한 제어 구현 방식 예시 +그룹 기반 권한 부여 페이지 예시 +구현 방식 +설명 +역할(Role) 기반 +관리자, 개발자, 사용자 등 역할을 정의하고 역할에 권한을 할당하는 방식 +그룹(Group) 기반 +팀·부서별 그룹을 생성하고 그룹 단위로 권한을 일괄 부여하는 방식 +속성(Attribute) 기반 +사용자 속성(부서, 직급, 위치 등)을 조합하여 접근 권한을 결정하는 방식 +정책(Policy) 기반 +조건(IF-THEN) 형태의 정책을 기반으로 접근 권한을 부여하는 방식 + + +![이미지 99-0](images/p0099_img0.png) + + +--- + +100 +보안 +요구사항 +(L1) 모바일 코드 사용 통제 - 모바일 코드 기술을 사용하는 경우, 모바일 코드 기술 사용에 관한 보안정책을 +강제하는 기능을 제공해야 한다. +(L2) 모바일 코드 무결성 검사 - 모바일 코드 실행을 허용하기 전에 모바일 코드의 무결성을 확인하는 기능을 +제공해야 한다. +목적 +모바일 코드가 변조되지 않았음을 검증하여 신뢰할 수 있는 코드만 실행되도록 보장하고 코드 변조를 통한 공격을 +차단한다. +점검 기준 +L1. 모바일 코드 사용 통제 +L1-1. 모바일 코드 사용 통제 여부 +L2. 모바일 코드 무결성 검사 +L2-1. 모바일 코드 무결성 검증 여부 +구현 및 점검 방안 +L1 +L1-1. 모바일 코드 사용 통제 여부 + +## 01. 로봇 시스템이 사용자의 모바일 코드를 실행하는 경우, 해당 코드의 사용이 보안정책에 따라 통제되는지 + +확인한다. +•  인가된 경로에서 제공되는 코드만 실행이 허용되어야 한다. +•  모바일 코드 실행 프로세스에 최소 권한만 부여되어야 하며 시스템 명령 실행, 파일 접근, 네트워크 송수신 등의 위험 권한은 +제한한다. +•  이외의 모바일 코드 보안 정책 예시는 다음과 같다. +L2 +L2-1. 모바일 코드 무결성 검증 여부 + +## 01. 모바일 코드 실행 전에 코드의 진본성과 무결성을 검증하는 기능이 구현되어 있는지 확인한다. + +•  검증은 디지털 서명, 해시, 인증서 검증 등 암호학적 방식으로 수행되어야 한다. +•  실행 전 코드의 해시 값 검증 또는 서명 검증 절차를 거쳐야 하며, 불일치 시 즉시 실행을 차단해야 한다. +•  검증 실패 또는 위·변조 탐지 시, 시스템은 해당 이벤트를 보안 로그에 기록해야 한다. + +#### 3.4.2 [UC-02] 모바일 코드 통제 + +모바일 코드 보안 정책 예시 +구분 +보안 조치 예시 +권한 통제 +모바일 코드 실행 프로세스에 최소 권한만 부여 +격리 실행 +샌드박스, 가상머신, 컨테이너 환경에서 코드 실행 +무결성 검증 +코드 서명 확인, 해시 비교, HMAC 검증 +정책 관리 +허용된 코드 출처만 실행, 정책 변경 시 감사 로그 남김 +실행 차단 +검증 실패 시 자동 차단 및 관리자 경고 발생 + + +--- + +01 +02 +03 +101 +보안 +요구사항 +(L1) 세션 잠금 - 로컬 또는 네트워크를 통해 사용자 인터페이스를 제공하는 경우, 세션 잠금 기능을 사용해야 한다 +목적 +사용자가 시스템을 일정 시간 사용하지 않거나 수동으로 잠글 때 세션을 자동으로 잠가 무단 접근을 방지하고 +물리적 보안을 강화한다. +점검 기준 +L1. 세션 잠금 +L1-1. 사용자 자동·수동 세션 잠금 기능 제공 여부 +구현 및 점검 방안 +L1 +L1-1. 사용자 자동·수동 세션 잠금 기능 제공 여부 + +## 01. 로봇 시스템이 사용자 세션에 대해 자동 및 수동 잠금 기능을 제공하는지 확인한다. + +•  자동 세션 잠금: 지정된 비활성 시간 이상 입력이 없을 경우 자동으로 세션이 잠기며, 재인증 후에만 해제되어야 한다. +•  수동 세션 잠금: 사용자가 임의로 잠금 또는 화면 보호기 기능을 실행할 수 있어야 한다. +•  세션 잠금 상태에서는 모든 제어 명령, 설정 변경, 파일 접근이 차단되어야 하며, 화면에는 민감 정보가 표시되지 않아야 한다. +•  잠금 이벤트(자동 또는 수동 발생 시각, 사용자 ID, 세션 식별자)는 보안 로그에 기록되어야 한다. +•  관리자 정책에 따라 비활성 시간 또는 잠금 해제 절차를 설정할 수 있어야 한다. + +#### 3.4.3 [UC-03] 세션 잠금 + +세션 잠금 정책 설정 페이지 예시 + + +![이미지 101-0](images/p0101_img0.png) + + +--- + +102 +보안 +요구사항 +(L2) 원격 세션 종료 - 원격 세션을 지원하는 경우, 설정된 시간 동안 아무런 활동이 없는 경우 자동으로, 로컬 +담당자에 의해 수동으로 또는 세션을 시작한 사용자(사람, 소프트웨어 프로세스 또는 장치)에 의해 수동으로 원격 +세션을 종료하는 기능을 제공해야 한다. +목적 +원격 접속 세션을 관리자가 강제로 종료할 수 있도록 하여 비인가 접속이나 의심스러운 세션을 즉시 차단하고 보안 +사고를 최소화한다. +점검 기준 +L2. 원격 세션 종료 +L2-1. 원격 세션 종료 기능 제공 여부 +구현 및 점검 방안 +L2 +L2-1. 원격 세션 종료 기능 제공 여부 + +## 01. 로봇 시스템이 활성화된 원격 세션을 관리자가 명시적으로 종료할 수 있는 기능을 제공하는지 확인한다. + +•  관리자는 세션 목록을 조회할 수 있어야 하며, 필요 시 특정 세션을 강제 종료할 수 있어야 한다. +•  세션 종료 이벤트(사용자, 세션 ID, 원격 IP, 종료 사유, 시각 등)는 보안 로그에 기록되어야 한다. + +#### 3.4.4 [UC-04] 원격 세션 종료 + +원격 세션 종료 페이지 예시 + + +![이미지 102-0](images/p0102_img0.png) + + +--- + +01 +02 +03 +103 +보안 +요구사항 +(L3) 동시 세션 제어 - 특정한 사용자(사람, 소프트웨어 프로세스 또는 장치)에 대한 인터페이스별로 동시 세션 수를 +제한하는 기능을 제공해야 한다. +목적 +동일한 사용자 계정으로 동시에 접속할 수 있는 세션 수를 제한하여 계정 공유 및 무단 사용을 방지하고 시스템 +자원을 보호한다. +점검 기준 +L3. 동시 세션 제어 +L3-1. 동시 세션 제어 기능 제공 여부 +구현 및 점검 방안 +L3 +L3-1. 동시 세션 제어 기능 제공 여부 + +## 01. 로봇 시스템이 사용자별 또는 계정별로 동시 세션 수를 제어하거나 제한할 수 있는 기능을 제공하는지 + +확인한다. +•  허용된 세션 수 초과 시 기존 세션을 자동 종료하거나 새로운 로그인을 차단해야 한다. +•  관리자는 세션 동시 접속 정책을 설정할 수 있어야 한다. +•  동시 세션 관리는 다음과 같은 정책을 통해 수행될 수 있다. + +#### 3.4.5 [UC-05] 동시 세션 제어 + +동시 세션 관리 정책 예시 +구분 +보안 조치 예시 +단일 세션 원칙 +동일 계정은 1회만 로그인 가능 +제한적 다중 세션 +계정 로그인 N개까지만 허용 +IP 및 디바이스 기반 제어 +다른 IP나 기기에서의 동시 접속 차단 +보안 이벤트 기반 강제 종료 +세션 하이재킹 의심 시 자동 종료 + + +--- + +104 +보안 +요구사항 +(L1) 감사 로그 생성 - 보안과 관련된 감사 로그, 개별 감사 로그를 생성하는 기능을 제공해야 한다. +•  사용자 로그인/로그아웃, 설정 변경, 백업 및 복구, 장치 시작 및 종료, 무결성 검증 등 +•  개별 감사 로그는 다음과 같은 항목을 포함해야 한다: 타임스탬프, 소스(원본 장치, 소프트웨어 프로세스 또는 인간 사용자 계정), +유형, 이벤트 ID, 이벤트 결과 등 +목적 +시스템 내에서 발생하는 모든 보안 관련 이벤트와 사용자 활동을 기록하여 사고 발생 시 추적 및 분석이 가능하도록 +하고 내부 통제를 강화한다. +점검 기준 +L1. 감사 로그 생성 +L1-1. 주요 보안 이벤트에 대한 감사 로그 자동 생성 여부 +구현 및 점검 방안 +L1 +L1-1. 주요 보안 이벤트에 대한 감사 로그 자동 생성 여부 + +## 01. 로봇 시스템이 주요 보안 이벤트에 대해 감사 로그를 자동으로 생성하는지 확인한다. + +•  감사 로그로 기록되어야 하는 주요 보안 이벤트는 다음과 같다. + +#### 3.4.6 [UC-06] 감사 로그 생성 + +보안 이벤트 예시 +구분 +보안 조치 예시 +사용자 로그인/로그아웃 +•  로그인 성공 및 실패 +•  비밀번호 오류 +•  계정 잠김 +•  로그아웃 수행 +•  세션 타임아웃 발생 +설정 변경 +•  시스템 설정 변경 +•  네트워크 설정 변경 +•  사용자 권한/역할 변경 +•  보안 정책 변경 +•  로그 설정 변경 +백업 및 복구 +•  백업 시작/완료/실패 +•  백업 파일 무결성 검증 결과 +•  복구 시작/완료/실패 +•  복구 실행 사용자/시점 기록 +장치 시작 및 종료 +•  장치(시스템) 부팅 이벤트 +•  서비스/프로세스 시작 +•  서비스/프로세스 종료 +•  비정상 종료(크래시, 강제 종료) +무결성 검증 +•  펌웨어 무결성 검증 시작/결과 +•  소프트웨어 패키지 무결성 검증 결과 +•  설정 파일 해시 검증 결과 +•  무결성 검증 실패 경고 +기타 보안 관련 이벤트 (선택적) +•  비인가 접근 시도 +•  중요 파일 접근 +•  관리자 권한 상승 시도 +•  외부 장치(USB 등) 연결/차단 + + +--- + +01 +02 +03 +105 +•  로그에 필수적으로 포함해야 하는 항목은 다음과 같다. +로그 구성 요소 +구분 +보안 조치 예시 +이벤트 로그 ID +고유 식별자 +타임스탬프 +YYYY-MM-DD hh:mm:ss (UTC 기준 권장) +소스(발생 주체) +사용자 ID, 프로세스 명, 네트워크 인터페이스 등 +로그 유형 +보안, 시스템, 네트워크, 장치, 애플리케이션 등 +이벤트 심각도 수준 +등급별 분류(예: Emergency / Alert / Critical / Error / Warning / Notice / +Informational / Debug) +이벤트 상세 내용 +발생 원인, 대상 자원, 결과, 추가 진단 메시지 +무결성 보호 정보(선택) +서명 또는 해시 값 + + +--- + +106 +보안 +요구사항 +(L1) 감사 로그 저장 용량 - 감사로그 관리를 위해 충분한 감사로그 저장 용량을 할당해야 하며 감사 저장 용량에 +근접하거나 이를 초과할 경우, 컴포넌트 실패에 대비하는 기능을 제공해야 한다. +(L3) 감사 저장 용량 임계치 도달 시 경고 - 감사로그 저장소가 최대 임계치에 도달할 경우 경고를 발행하는 기능을 +제공해야 한다. +목적 +감사 로그를 안전하게 보관할 수 있는 충분한 저장 공간을 확보하여 로그 유실을 방지하고 법적 요구사항을 +준수한다. +점검 기준 +L1. 감사 로그 저장 용량 +L1-1. 감사 로그 저장 용량 적정성 여부 +L3. 감사 저장 용량 임계치 도달 시 경고 +L3-1. 임계치 도달 시 경고 및 알림 여부 +구현 및 점검 방안 +L1 +L1-1. 감사 로그 저장 용량 적정성 여부 + +## 01. 감사 로그가 장기간 보관될 수 있도록 충분한 저장 용량이 확보되어 있는지 확인한다. + +•  충분한 저장 용량을 계산하기 위해 다음과 같이 Palo Alto Networks 社에서 제공하는 로그 용량 계산 공식을 활용할 수 있다. +•  감사 로그 저장 용량이 적절히 지정되어 있거나 다음과 같이 사용자가 지정할 수 있도록 제공할 수도 있다. +L3 +L3-1. 임계치 도달 시 경고 및 알림 여부 + +## 01. 로그 저장소의 사용량이 사전 정의된 임계치에 도달하면 관리자에게 자동 경고가 전송되는지 확인한다. + +•  알림은 대시보드, 콘솔 경고, 이메일, Syslog, SNMP Trap 등으로 구현될 수 있다. +•  감사 로그 임계치는 적절히 지정되어 있거나 다음과 같이 사용자가 지정할 수도 있다. +임계치 도달 경고 페이지 예시 + +#### 3.4.7 [UC-07] 감사 로그 저장 용량 관리 + +로그 용량 계산 공식 예시 +감사 로그 저장용량 설정 페이지 예시 + + +![이미지 106-0](images/p0106_img0.png) + + +![이미지 106-1](images/p0106_img1.png) + + +![이미지 106-2](images/p0106_img2.png) + + +--- + +01 +02 +03 +107 +감사 로그 임계치 설정 예시 + + +![이미지 107-0](images/p0107_img0.png) + + +--- + +108 +보안 +요구사항 +(L1) 감사 처리 실패 대응 - 감사 처리 실패 시 필수 서비스 및 기능의 손실을 방지하는 기능 및 일반적으로 인정되는 +업계 관행 및 권장 사항에 따라 감사 처리 실패에 대응하여 적절한 조치를 지원하는 기능을 제공해야 한다. +목적 +감사 로그 생성이나 처리 과정에서 실패가 발생할 때 적절한 대응 조치를 취하여 감사 추적성을 보장하고 보안 사고 +은닉을 방지한다. +점검 기준 +L1. 감사 처리 실패 대응 +L1-1. 감사 처리 실패 시 서비스 및 로그 보호를 위한 대응 여부 +구현 및 점검 방안 +L1 +L1-1. 감사 처리 실패 시 서비스 및 로그 보호를 위한 대응 여부 + +## 01. 로봇 시스템이 감사 로그 기록 중 오류나 저장 실패가 발생했을 때 서비스 중단 또는 로그 손실을 방지하기 + +위한 대응 기능을 제공하는지 확인한다. +•  로그 저장소 용량 초과, 파일 손상, 쓰기 권한 오류 등의 상황에서도 감사 로그가 누락되지 않도록 다음과 같은 보호 조치를 +수행할 수 있다. +•  감사 처리 실패 및 복구 이력은 보안 로그에 기록되어야 하며, 반복적으로 실패가 발생할 경우 관리자에게 자동 통보되어야 한다. + +#### 3.4.8 [UC-08] 감사 처리 실패 대응 + +감사 처리 실패 시 대응 조치 예시 +구분 +보안 조치 예시 +자동 순환 +저장 공간이 가득 차면 오래된 로그를 자동 압축 및 삭제하여 새 로그 저장 가능 유지 +대체 저장소 전송 +주기적으로 로그를 다른 시스템, 클라우드, 또는 별도 미디어로 전송하여 저장 용량 확보 +로그 아카이빙 +일정 기간 경과한 로그를 압축 형식(gzip, bzip2)으로 변환하여 저장 공간 절감 + + +--- + +01 +02 +03 +109 +보안 +요구사항 +(L1) 타임스탬프 - 감사 로그 생성에 사용되는 타임스탬프를 제공해야 한다. +(L2) 시간 동기화 - 내부 시스템 시간을 동기화하는 기능을 제공해야 한다. +(L4) 시간 소스 무결성 보호 - 시간 원본 소스는 무단 변경으로부터 보호되어야 하며 변경 시 감사 이벤트를 +생성해야 한다. +목적 +모든 시스템 이벤트와 로그에 정확한 시간 정보를 기록하여 사건의 시간적 순서를 파악하고 포렌식 분석의 정확성을 +보장한다. +점검 기준 +L1. 타임스탬프 +L1-1. 감사 로그에 타임스탬프 정보 포함 여부 +L2. 시간 동기화 +L2-1. 내부 시스템 시간 동기화 기능 제공 여부 +L4. 시간 소스 무결성 보호 +L4-1. 시간 소스의 무단 변경 보호 여부 +구현 및 점검 방안 +L1 +L1-1. 감사 로그에 타임스탬프 정보 포함 여부 + +## 01. 로봇 시스템의 로그, 제어 이벤트, 통신 모듈 등이 동일한 기준시각에 따라 동작하도록 시간 동기화 기능이 + +구현되어 있는지 확인한다. +•  로그에는 최소한 다음과 같은 2024-01-15 10:30:45형식이어야 하며, ISO 8601에서 권장하는 형식은 +2024-01-15T10:30:45Z이다. + +#### 3.4.9 [UC-09] 시간 통제 + +L2 +L2-1. 내부 시스템 시간 동기화 기능 제공 여부 + +## 01. 로봇 시스템의 로그, 제어 이벤트, 통신 모듈 등이 동일한 기준시각에 따라 동작하도록 시간 동기화 기능이 + +구현되어 있는지 확인한다. +•  시스템은 내부 및 외부 장치 간 시간 차이를 최소화하기 위해 표준 시간 서버와 주기적으로 동기화해야 한다. +•  네트워크 단절 등으로 외부 동기화가 불가능할 경우, 로컬 클럭 또는 백업 타임 소스를 사용해 기록 시간의 연속성을 유지해야 +한다. +•  동기화 실패나 오차가 발생하면 경고 또는 이벤트 로그가 자동 생성되어야 한다. +L4 +L4-1. 시간 소스의 무단 변경 보호 여부 + +## 01. 시스템의 시간 정보 또는 시간 소스 설정이 인가되지 않은 사용자에 의해 변경되지 않도록 보호되는지 + +확인한다. +•  시간 변경은 관리자 권한에서만 수행되어야 한다. +•  시간 설정 변경 이력은 감사 로그로 기록되어야 하며, 변경 전·후의 시간 값이 모두 남아있어야 한다. +NTP 서버 동기화 설정 페이지 예시 + + +![이미지 109-0](images/p0109_img0.png) + + +--- + +110 +보안 +요구사항 +(L1) 인간 사용자에 대한 부인 방지 - 인간 사용자 인터페이스를 제공하는 경우, 특정 인간 사용자가 특정 행동을 +했는지 여부를 판단하는 기능을 제공해야 한다. +(L4) 모든 사용자에 대한 부인 방지 - 특정 사용자(사람, 소프트웨어 프로세스 또는 장치)가 특정 조치를 취했는지 +여부를 판단하는 기능을 제공해야 한다. +목적 +인간 사용자가 수행한 행위에 대해 사후에 부인할 수 없도록 충분한 증거를 수집하여 책임 추적성을 확보하고 법적 +대응력을 강화한다. +점검 기준 +L1. 인간 사용자에 대한 부인 방지 +L1-1. 인간 사용자 행위에 대한 부인 방지 여부 +L4. 모든 사용자에 대한 부인 방지 +L4-1. 모든 사용자(인간, 프로세스, 장치) 행위에 대한 부인 방지 여부 +구현 및 점검 방안 +L1 +L1-1. 인간 사용자 행위에 대한 부인 방지 여부 + +## 01. 인간 사용자의 주요 행위(로그인, 설정 변경, 명령 수행 등)가 모두 로그로 기록되어 사후에 행위 추적이 + +가능한지 확인한다. +•  로그에는 사용자 ID, 수행 명령, 결과(성공/실패), 타임스탬프 등이 포함되어야 한다. +•  기록된 정보만으로도 “누가, 언제, 무엇을 수행했는지”를 명확히 확인할 수 있어야 하며, 로그 삭제는 관리자만 가능해야 한다. +L4 +L4-1. 모든 사용자(인간, 프로세스, 장치) 행위에 대한 부인 방지 여부 + +## 01. 인간 사용자뿐 아니라 소프트웨어 프로세스 및 장치 간 통신 행위도 로그로 남아, 사후에 모든 주체의 행위가 + +추적 가능한지 확인한다. +•  자동화 프로세스, API 호출, 제어 명령 송수신 등 시스템 내부 행위 역시 로그에 기록되어야 한다. +•  로그에는 행위 주체(프로세스명, 장치 ID 등), 수행 내용, 결과, 시각 정보가 포함되어야 한다. + +#### 3.4.10 [UC-10] 사용자에 대한 부인 방지 + +감사 로그 예시 + + +![이미지 110-0](images/p0110_img0.png) + + +--- + +01 +02 +03 +111 +보안 +요구사항 +(L2) 물리적 진단 및 시험 인터페이스의 보호 - 물리적 진단 및 시험 인터페이스의 인가되지 않은 사용에 대해서 +보호해야 한다. +(L3) 물리적 진단 및 시험 인터페이스의 능동적 모니터링 - 물리적 진단 및 시험 인터페이스에 대한 능동적 모니터링을 +제공하고, 이러한 인터페이스에 대한 접근 시도가 탐지될 경우 감사 로그를 생성해야 한다. +목적 +물리적 접근을 통한 시스템 침해 및 정보 유출을 방지한다. +점검 기준 +L2. 물리적 진단 및 시험 인터페이스의 보호 +L2-1. 물리적 진단·시험 인터페이스의 물리 조치나 접근 통제 여부 +L3. 물리적 진단 및 시험 인터페이스의 능동적 모니터링 +L3-1. 진단·시험 인터페이스 접근 시도 발생 시 감사 로그의 자동 생성 여부 +구현 및 점검 방안 +L2 +L2-1. 물리적 진단·시험 인터페이스의 물리 조치나 접근 통제 여부 + +## 01. 로봇 시스템의 진단·시험용 물리 인터페이스에 대해 물리적 차단 또는 접근 통제가 적용되어 있는지 확인한다. + +•  사용하지 않는 포트는 비활성화 또는 차폐되어야 하며, 접근이 필요한 포트는 잠금 커버, 보안 나사, 봉인 라벨 등으로 보호해야 +한다. +•  유지보수 목적의 인터페이스는 관리자 승인 후에만 사용 가능해야 하며, 접근 시 인증 절차(암호, 인증서, 장치 키 등)가 +적용되어야 한다. +L3 +L3-1. 진단·시험 인터페이스 접근 시도 발생 시 감사 로그의 자동 생성 여부 + +## 01. 물리적 진단·시험 인터페이스에 접근이 발생하거나 연결 시도가 있을 때, 자동으로 감사 로그가 생성되는지 + +확인한다. +•  로그에는 포트 종류, 접근 시각, 장치 식별자, 접근 결과(성공/거부) 등이 포함되어야 한다. + +#### 3.4.11 [UC-11] 물리적 진단 및 시험 인터페이스의 통제 + +구분 +보안 조치 예시 +[보안 나사] +드라이버로 열기 어렵도록 특수 나사 적용 +[봉인 라벨] +제거 시 흔적이 남는 보안 스티커 +[보안 커버] +케이스를 잠그거나 봉인하여 임의 개봉 방지 +[USB 포트 잠금 커버] +포트를 봉인하여 임의 개봉 및 비인가 장치 연결을 방지 +물리 인터페이스 보호 조치 예시 + + +![이미지 111-0](images/p0111_img0.png) + + +![이미지 111-1](images/p0111_img1.png) + + +![이미지 111-2](images/p0111_img2.png) + + +![이미지 111-3](images/p0111_img3.png) + + +--- + +112 +번호 +보안 수준 +체크리스트 항목 +SI-01 +L1 +통신 신뢰성 보장 +SI -02 +L1 +악성코드 보호 메커니즘 +L2 +악성코드 보호 버전 보고 +SI-03 +L1 +보안 기능 검증 +SI-04 +L1 +소프트웨어 및 데이터, 장비의 무결성 +L2 +무결성 위반 자동 알림 +L3 +소프트웨어 및 정보의 진본성 점검 +SI-05 +L1 +입력값 검증 +SI-06 +L1 +결정론적 출력 +SI-07 +L1 +오류 처리 +SI-08 +L2 +세션의 무결성 보호 +SI-09 +L2 +감사 관련 정보 보호 +L4 +일회용 기록 매체에 감사 레코드 기록 +SI-10 +L1 +업데이트 지원 +L2 +업데이트 파일 진본성 및 무결성 검증 +SI-11 +L2 +물리적 변조 방지 및 탐지 +L3 +변조 시도 통보 +시스템 무결성 체크리스트 항목 +로봇 시스템의 사용 권한을 제어하여 무단 작동 및 데이터 사용을 방지하기 위한 시스템 무결성(System Integrity, +SI) 체크리스트 항목은 다음과 같다. + +### 3.5 시스템 무결성 점검 체크리스트 + + + +--- + +01 +02 +03 +113 +보안 +요구사항 +(L1) 통신 신뢰성 보장 - 전송된 정보의 무결성 및 진본성을 보호하는 기능을 제공해야 한다. +목적 +전송 과정에서 데이터의 변조나 위조를 방지하고, 통신 주체의 신뢰성을 확보하여 로봇 시스템 간 안전한 정보 +교환을 보장하기 위함이다. +점검 기준 +L1. 전송되는 정보의 무결성 및 진본성 보호 +L1-1. 정보 전송 시 무결성 및 진본성 보호 기능을 지원하는 보안 통신 메커니즘의 사용 여부 +구현 및 점검 방안 +L1 +L1-1. 정보 전송 시 무결성 및 진본성 보호 기능을 지원하는 보안 통신 메커니즘의 사용 여부 +01. “2.3. 인터페이스 식별”에서 로봇 시스템 구성요소 간 통신 구간을 식별한다. + +## 02. 식별된 통신 구간에 대해 전송 데이터의 변조 및 위조를 방지하기 위한 무결성 검증 메커니즘이 적용되어 + +있는지 확인한다. +•  DTLS, MQTT over TLS, OPC UA SecureChannel 등 무결성 검증 기능이 내장된 프로토콜을 사용하는 경우 충족으로 +판단한다. +•  단순 데이터 암호화만 적용되고 메시지 인증 코드(MAC), 서명(Signature) 등 무결성 확인 절차가 누락된 경우 일부 +충족으로 판단한다. +•  통신 프로토콜 또는 애플리케이션 코드 내에서 무결성 검증을 비활성화하거나 우회하는 설정이 존재하는 경우 미흡으로 +판단한다. + +#### 3.5.1 [SI-01] 통신 신뢰성 보장 + + + +--- + +114 +보안 +요구사항 +(L1) 악성코드 보호 메커니즘 - 악성코드나 승인되지 않은 소프트웨어의 영향을 예방, 감지, 보고 및 완화하기 위한 +보호 메커니즘을 제공해야 한다. 또한, 보호 메커니즘을 업데이트하는 기능을 제공해야 한다. +목적 +로봇 시스템에 악성코드나 승인되지 않은 소프트웨어가 침투하여 동작을 방해하거나 데이터를 손상시키는 것을 +방지하고, 탐지·격리·보고·복구 등의 절차를 통해 시스템의 안정적 운영을 보장하기 위함이다. +점검 기준 +L1. 악성코드 보호 메커니즘 +L1-1. 악성코드 보호 메커니즘의 존재 여부 +L1-2. 악성코드 보호 메커니즘의 업데이트 가능 여부 +L2. 악성코드 보호 버전 보고 +L2-1. 악성코드 보호 메커니즘을 수행하는 소프트웨어 및 파일 버전 정보 확인 여부 +구현 및 점검 방안 +L1 +L1-1. 악성코드 보호 메커니즘의 존재 여부 + +## 01. 로봇 시스템 구성요소에 악성코드 탐지 및 차단 기능이 구현되어 있는지 확인한다. + +•  각 구성요소에 다음과 같이 구현될 수 있으며, 탐지 및 차단 시 로그를 생성하여야 한다. +L1-2. 악성코드 보호 메커니즘의 업데이트 가능 여부 + +## 01. 악성코드 탐지 엔진 또는 서명 데이터베이스가 주기적으로 업데이트 가능한 구조인지 확인한다. + +•  자동 업데이트 기능이 제공되거나 관리자가 수동으로 최신 정의 파일을 반영할 수 있으면 충족으로 판단한다. +•  업데이트 기능이 없거나 고정 버전으로만 동작할 경우 미흡으로 판단한다. +L2 +L2-1. 악성코드 보호 메커니즘을 수행하는 소프트웨어 및 파일 버전 정보 확인 여부 + +## 01. 시스템에서 사용 중인 악성코드 보호 소프트웨어의 제품 명, 엔진 버전, 서명 버전, 검사 일자 등이 자동 또는 + +수동으로 확인가능한지 점검한다. +•  관리 콘솔, 명령 행, 또는 로그를 통해 버전 및 상태 정보를 출력할 수 있으면 충족으로 판단한다. +악성코드 보호 메커니즘 예시 + +#### 3.5.2 [SI-02] 악성코드로부터 보호 + +구분 +예시 솔루션 +운영체제 내장 백신 +•  Windows Defender, Linux Clam AV +전용 보안 솔루션 +•  Endpoint Protection, OT 보안 에이전트, 화이트리스트 기반 실행 제어 +무결성 검증 모듈 +•  SHA-256 해시 기반 파일 서명 검증, 코드 서명 + + +--- + +01 +02 +03 +115 +보안 +요구사항 +(L1) 보안 기능 검증 - 보안기능의 의도된 작동에 대한 검증을 지원하고 무결성이 침해되는 등의 이상이 발견되면 +동작을 중단하거나 안전 모드로 전환하고, 로그 기록과 함께 관리자 또는 클라우드에 침해 사실을 자동으로 +보고해야 한다. +목적 +로봇 시스템의 핵심 보안 기능이 의도된 대로 동작하고 있는지를 지속적으로 검증하여, 무결성 손상이나 이상 징후 +발생 시 즉시 안전 모드로 전환하고 관리자에게 경고함으로써 시스템 피해를 최소화하기 위함이다. +점검 기준 +L1. 보안 기능 검증 +L1-1. 제품의 보안 기능 침해 탐지 시 대응 체계 동작 여부 +구현 및 점검 방안 +L1 +L1-1. 제품의 보안 기능 침해 탐지 시 대응 체계 동작 여부 + +## 01. 로봇 시스템 내 적용된 보안 기능을 식별한다. + +•  대표적인 보안 기능은 다음과 같다. + +## 02. 식별된 보안 기능에 대한 침해 감지 및 대응 체계의 존재 여부를 확인한다. + +•  무결성 검증 실패, 보안 모듈 중단, 설정 변조, 악성코드 감염 등 보안 기능이 의도된 대로 작동하지 않거나 손상된 경우 이를 +탐지할 수 있는지 점검한다. +•  탐지 시 수행되어야 하는 대응은 다음과 같다. +시스템이 안전 모드로 전환되거나 주요 기능 중단 +관리자 또는 클라우드 관제 서버에 이상 보고 +자동 복구 또는 서비스 재시작 절차 수행 + +## 03. 기록 및 보고 여부를 확인한다. + +•  보안 기능 침해 이벤트가 발생하면 로그에 다음 항목이 기록되어야 한다. +탐지 시각, 탐지 모듈 명, 감지 유형, 대응 결과, 보고 여부 +•  관리자 콘솔 또는 클라우드 관제 화면에서 해당 로그가 조회 가능해야 하며, 단순 파일 로그만 존재할 경우 일부 충족, 감지· +보고 기능이 없는 경우 미흡으로 판단한다. +로봇 시스템 보안 기능 예시 + +#### 3.5.3 [SI-03] 보안 기능 검증 + +구분 +보안 기능 예시 +인증 및 접근 제어 +사용자 인증, 장치 인증, 접근 권한 검증 +암호화 통신 +TLS, DTLS, VPN +무결성 검증 +Secure Boot, 코드 서명, 파일 해시 검증 +로그 및 감사 기능 +감사 로그 기록, 접근 로그 관리 +악성코드 보호 +백신, 화이트리스트 실행 제어 +보안 설정 보호 +설정 파일 암호화, 관리자 인증 + + +--- + +116 +보안 +요구사항 +(L1) 소프트웨어 및 데이터, 장비의 무결성 - 로봇 내부에 저장되는 소프트웨어, 데이터, 장비의 무결성 등은 +무결성을 보장할 수 있는 보호 저장소에 저장되고 해시함수 디지털 서명 등을 적용해야 한다. 또한 부팅, 정해진 +주기별로 상태를 점검해 무단 변경을 탐지, 기록 및 보고하는 기능을 제공해야 한다. +(L2) 무결성 위반 자동 알림 - 운영 중 또는 무결성 점검 과정에서 로봇 시스템의 주요 소프트웨어, 데이터, 장비에 +대해 인가되지 않은 변경 시도 탐지 시 관리자 알림, 자동 차단 등의 대응조치를 제공해야 한다. +(L3) 소프트웨어 및 정보의 진본성 점검 - 소프트웨어, 구성 및 기타 정보의 진본성 점검을 수행하고, 이런 점검 +결과를 기록하고 보고하는 기능을 제공해야 한다. +목적 +로봇 시스템의 소프트웨어·데이터·장비가 무단으로 변경되거나 위조되는 것을 방지하고, 무결성 위반 발생 시 즉시 +탐지·기록·보고하여 안전한 동작 상태를 유지하기 위함이다. +점검 기준 +L1. 소프트웨어 및 데이터, 장비의 무결성 +L1-1. 로봇 시스템의 주요 소프트웨어, 데이터, 장비 정보에 대한 무결성 검증 알고리즘의 적용 여부 +L2. 무결성 위반 자동 알림 +L2-1. 로봇 시스템의 주요 소프트웨어, 데이터, 장비에서 인가되지 않은 변경이 탐지될 경우 대응 여부 +L3. 소프트웨어 및 정보의 진본성 점검 +L3-1. 소프트웨어, 구성 및 기타 주요 정보에 대한 진본성 점검 여부 +구현 및 점검 방안 +L1 +L1-1. 로봇 시스템의 주요 소프트웨어, 데이터, 장비 정보에 대한 무결성 검증 알고리즘의 적용 여부 + +## 01. 로봇 시스템 내 무결성 검증 대상을 식별하고 무결성 검증 알고리즘이 적용되어 있는지 확인한다. + +•  무결성 검증은 소프트웨어·데이터·장비 등 자산의 특성에 따라 적용 방식이 다르므로, 각 대상의 유형을 구분해야 한다. +•  식별된 로봇 시스템 내 주요 자산은 유형에 따라 다음과 같은 무결성 검증을 적용할 수 있다. +•  정적 자산은 서명 검증 또는 해시 비교를 통해 직접 무결성 검증을 수행해야 하며, 반정적 및 동적 자산은 변경 이력 관리 및 +접근 제어를 통해 간접적으로 무결성을 보장할 수 있다. +•  또한 부팅하거나 주기적으로, 또는 업데이트 시에 주요 소프트웨어 및 데이터에 대한 해시 값 비교 또는 서명 검증이 +수행되어야 한다. +주요 자산 유형 별 무결성 검증 예시 +주요 로봇 프로그램에 대한 해시 목록 파일 예시 + +#### 3.5.4 [SI-04] 소프트웨어 및 데이터 무결성 검증 + +구분 +예시 +인정 수준 +정적 자산 +실행 파일, 모듈, 펌웨어 이미지 +해시 및 서명 검증 수행 +반 정적 자산 +설정 파일, 파라미터 +접근 제어, 변경 시 로그 기록 +동적 데이터 +운전 기록, 이벤트 로그 +추가 전용 구조, 로그 접근 통제, 로그 무결성 점검 + + +![이미지 116-0](images/p0116_img0.png) + + +--- + +01 +02 +03 +117 +L2 +L2-1. 로봇 시스템의 주요 소프트웨어, 데이터, 장비에서 인가되지 않은 변경이 탐지될 경우 대응 여부 + +## 01. 무결성 위반 탐지 시 대응 절차를 확인한다. + +•  탐지 시 시스템이 다음 조치 중 하나 이상을 수행해야 한다. +안전 모드 전환 또는 기능 제한 +관리자 알림 +변경 파일 격리 또는 자동 복원 조치 +L3 +L3-1. 소프트웨어, 구성 및 기타 주요 정보에 대한 진본성 점검 여부 + +## 01. 진본성 검증 메커니즘의 존재 여부를 확인한다. + +•  로봇 소프트웨어 및 구성 파일이 신뢰할 수 있는 공급자에 의해 서명되었는지 확인한다. +•  설치 또는 업데이트 시 서명 검증 절차가 수행되는지 점검한다. + +## 02. 검증 결과 기록 및 보고 여부를 확인한다. + +•  진본성 검증 결과가 시스템 로그, 관리자 콘솔, 또는 클라우드 관리 화면 등에 기록되어야 한다. +•  검증 실패 시 설치 중단 또는 경고 표시 기능이 있어야 충족으로 판단한다. +파일 변경 탐지 알림 페이지 예시 + + +![이미지 117-0](images/p0117_img0.png) + + +--- + +118 +보안 +요구사항 +(L1) 입력값 검증 - 제어 입력으로 사용되거나 로봇 서비스의 동작에 직접적인 영향을 미치는 입력 값의 유효성을 +검증해야 한다. +목적 +로봇 제어나 서비스 동작에 영향을 주는 입력값의 오류·위조·악의적 조작을 방지하여, 시스템 오동작이나 비정상 +명령 실행으로부터 안전하게 보호한다. +점검 기준 +L1. 입력 값 검증 +L1-1. 식별된 입력 지점에 대한 적절한 입력 값 검증 수행 여부 +구현 및 점검 방안 +L1 +L1-1. 식별된 입력 지점에 대한 적절한 입력 값 검증 수행 여부 + +## 01. 입력 지점을 식별한다. + +•  “2.3. 인터페이스 식별” 결과를 기반으로, 로봇 시스템에서 외부로부터 데이터를 입력받는 모든 경로를 파악한다. +•  주요 입력 지점 예시는 다음과 같다. + +## 02. 입력값 검증이 적용되어 있는지 확인한다. + +•  각 입력 경로에서 값의 형식, 범위, 길이, 허용 문자, 메타문자 사용 여부를 점검한다. +•  입력값 검증이 생략되어 있거나, 단순 Null 체크에 그치는 경우 일부 충족, 전혀 검증이 없는 경우 미흡으로 판단한다. +•  주요 입력 값 검증 항목은 다음과 같다. +주요 입력 지점 예시 +입력 값 검증 방법 예시 +구분 +예시 +사용자 입력 +웹 UI, 터미널 명령, REST API, HMI 조작값 +통신 입력 +MQTT 메시지, Modbus/TCP, OPC UA Write 요청 +파일 입력 +설정 파일(config), 로봇 경로 스크립트, 업데이트 패키지 +센서 및 장치 입력 +센서 측정값, 외부 장비 신호 +구분 +예시 +권장 대응 +허용 문자 및 패턴 +Command/SQL/LDAP +Injection +화이트리스트만 허용, 정규식 검증 +파일 경로 +Path Traversal +경로 정규화, 허용 디렉터리 비교 +타입/길이/범위 검사 +버퍼 오버플로우, 논리 오류 +정적 타입 검사, 최대 길이 제한, 범위 검사 +외부 명령 호출 +Command Injection +시스템 함수에 검증된 값만 전달 +DB 호출 +SQL Injection +Prepared Statement, ORM 파라미터화 사용 +XML 입력 검증 +XXE, XML Injection +외부 엔티티 비활성화, 스키마 검증 +인증 및 권한 연계 검사 +권한 상승, 권한 우회 +서버 측 권한 재검증, 역할 및 권한 매핑 검증 + +#### 3.5.5 [SI-05] 입력값 검증 + + + +--- + +01 +02 +03 +119 + +## 03. 검증 실패 시 처리 동작을 확인한다. + +•  유효하지 않은 입력 발생 시 시스템은 다음과 같은 조치를 수행해야 하며, 입력 값이 그대로 제어 명령이나 내부 함수로 +전달될 경우 미흡으로 판단한다. +예외 처리, 로그 기록 – 민감 정보는 마스킹 후 기록 +사용자 오류 메시지 반환 – 내부 구현 정보를 노출하지 않아야 함 +차단 및 알림 – 반복적인 공격으로 판단되면 차단 및 경보 +Python Pydantic 필드를 통한 입력 값 검증 예시 +ORM 기반 데이터베이스 접근 예시 +입력 값 검증 실패 처리 알림 예시 + + +![이미지 119-0](images/p0119_img0.png) + + +![이미지 119-1](images/p0119_img1.png) + + +![이미지 119-2](images/p0119_img2.png) + + +--- + +120 +보안 +요구사항 +(L1) 결정론적 출력 - 공격 등으로 인해 정상적인 작동을 유지할 수 없는 경우, 미리 결정된 상태로 출력을 설정하는 +기능을 제공해야 한다. +목적 +공격·오류·비정상 상태 발생 시 로봇이 예측 불가능한 동작을 하지 않도록 미리 정의된 안전한 상태로 출력값을 +고정하여 사람·장비·환경의 피해를 최소화한다. +점검 기준 +L1. 결정론적 출력 +L1-1. 시스템이 비정상 상황 발생 시 미리 정의된 안전 상태로 출력 전환 여부 +구현 및 점검 방안 +L1 +L1-1. 시스템이 비정상 상황 발생 시 미리 정의된 안전 상태로 출력 전환 여부 + +## 01. 로봇 시스템이 정상 처리를 수행할 수 없는 상황을 식별한다. + +•  대표적인 비정상 상황 예시는 다음과 같다. + +## 02. 각 비정상 상황에 대해 예측 가능한 결정된 응답 상태가 정의되어 있는지 확인한다. + +•  비정상 상황 별 결정된 응답 상태 예시는 다음과 같다. +로봇 시스템 비정상 상황 예시 +비정상 상황 별 결정된 응답 상태 예시 + +#### 3.5.6 [SI-06] 결정론적 출력 + +구분 +예시 +입력 오류 +파라미터 누락, 형식 불일치, 허용 범위 초과 +통신 오류 +세션 만료, 타임아웃, 패킷 손실 +서버 내부 오류 +예외, Null 참조, 리소스 부족 +보안 이벤트 +인증 실패, 무결성 검증 실패, 비인가 접근 +제어 오류 +센서 이상, 제어 명령 처리 실패, 안전 루프 끊김 +구분 +상황 +결정된 출력 +웹 서버 / REST API +유효하지 않은 입력, 권한 없음 +HTTP 400, 401, 403 등 표준 응답 코드 반환, +내부 스택 트레이스 노출 금지 +API 내부 예외 +Null 예외, DB 연결 실패 +HTTP 500 등 표준 응답 코드 반환 +네트워크 제어 노드 +통신 타임아웃, 신호 손실 +제어 출력 0 또는 안전 모드로 전환 +센서 입력 이상 +범위 초과, NaN 등 +이전 정상 값 유지 또는 안전 상한 값으로 클램핑 +보안 이벤트 +인증 실패, 위조 패킷 탐지 +세션 종료 및 거부 응답 반환, 로깅 및 관리자 알림 +미리 정의된 오류 출력 페이지 예시 + + +![이미지 120-0](images/p0120_img0.png) + + +--- + +01 +02 +03 +121 +보안 +요구사항 +(L1) 오류 처리 - 공격자에 의해 악용될 수 있는 정보를 제공하지 않는 방식으로 오류 조건을 식별하고 처리해야 +한다. +목적 +오류 처리 시 내부 구현·환경·민감정보가 외부에 노출되어 공격자가 시스템 취약점을 악용하지 못하도록, +사용자에게는 최소한의 안전한 오류 정보를 제공하고 내부에는 조사·복구에 필요한 로그를 안전하게 기록하도록 +한다. +점검 기준 +L1. 오류 처리 +L1-1. 오류 메시지 내 민감 정보 포함 여부 +구현 및 점검 방안 +L1 +L1-1. 오류 메시지 내 민감 정보 포함 여부 + +## 01. 로봇 시스템이 외부에 반환하는 오류 메시지를 점검하여, 공격자에게 시스템 구조나 취약점을 유추할 수 있는 + +정보가 포함되어 있지 않은지 확인한다. +•  외부로 반환되는 오류 메시지는 항상 표준 상태 코드와 일반화된 고정 메시지만 포함해야 하며, 비밀번호, 토큰, 세션 ID, +내부 경로, 쿼리문, 스택 트레이스 등 민감 정보는 포함하면 안 된다. +•  내부 로그에는 상세 오류를 보관할 수 있으나, 로그에 저장되는 민감 정보는 반드시 마스킹 또는 해시 처리하고, 로그 접근은 +인가된 사용자에게만 허용해야 한다. +미흡한 오류 처리 페이지 예시 + +#### 3.5.7 [SI-07] 오류 처리 + + + +![이미지 121-0](images/p0121_img0.png) + + +--- + +122 +보안 +요구사항 +(L2) 세션의 무결성 보호 - 다음과 같이 통신 세션 무결성을 보호하는 기능을 제공해야 한다. +•  세션의 무결성을 보호하는 기능을 제공해야 하며, 유효하지 않은 세션 ID의 사용을 거부해야 한다. +•  사용자 로그아웃 또는 기타 세션 종료(브라우저 세션 포함) 시 세션 ID를 무효화하는 기능을 제공해야 한다. +•  각 세션에 대해 고유한 세션 ID를 생성하고 로봇 서비스가 생성한 세션 ID만을 인지하는 기능을 제공해야 한다. +•  일반적으로 허용되는 난수 발생원을 사용하여 고유한 세션 ID를 생성하는 기능을 제공해야 한다. +목적 +서비스가 생성한 고유하고 예측 불가능한 세션 ID만 인정하도록 하여 세션 위조·재생 공격의 가능성을 실질적으로 +차단한다. +점검 기준 +L2. 세션 무결성 +L2-1. 통신 세션의 무결성 보호 여부 +L2-2. 사용자 로그아웃 또는 기타 세션 종료 시 세션 ID 즉시 무효화 여부 +L2-3. 고유한 세션 ID 생성 여부 +L2-4. 세션 ID 예측 불가능 및 복잡도 준수 여부 +구현 및 점검 방안 +L2 +L2-1. 통신 세션의 무결성 보호 여부 + +## 01. 세션의 무결성을 확보하기 위한 검증 기능이 구현되어 있는지 확인한다. + +•  세션 무결성 보호는 다음과 같은 방식 중 하나 이상으로 구현되어야 한다. +HMAC 서명: 서버만이 보유한 비밀키로 세션 값에 서명하여, 클라이언트가 제공한 세션이 정상적으로 발급된 것임을 +검증한다. +서버 저장소 기반 검증: 서버 측 세션 저장소에서 세션 존재 및 상태를 검증하여 비정상 세션 사용을 차단한다. +JWT 또는 디지털 서명 기반 검증: 세션 정보에 암호학적 서명을 부여하여 위조된 토큰 사용을 방지한다. +TLS 통신 보호: 세션 ID 전송 구간을 암호화하여 패킷 가로채기나 변조 위협을 차단한다 +L2-2. 사용자 로그아웃 또는 기타 세션 종료 시 세션 ID 즉시 무효화 여부 + +## 01. 사용자가 명시적으로 로그아웃하거나 세션이 만료 또는 종료될 때, 해당 세션 ID 및 관련 인증 토큰을 서버 + +측에서 즉시 무효화되도록 구현되었는지 확인한다. +•  무효화 방식은 다음과 같은 방법 중 하나 이상을 적용한다. +서버 저장소 사용 시 - 해당 세션 레코드를 삭제하거나 상태를 invalid로 변경하여 재사용 차단 +JWT/Stateless 토큰 사용 시 - 토큰 블랙리스트 또는 refresh-token 정책을 통해 사용기간 만료 후 즉시 차단 +분산 환경 - 세션 무효화 이벤트를 모든 노드에 실시간 전파하여 모든 인스턴스에서 동일하게 무효화 +L2-3. 고유한 세션 ID 생성 여부 + +## 01. 각 세션에 대한 고유한 세션 ID가 생성되는지 확인한다. + +•  세션 발급 과정에서 동일한 ID가 중복 생성되지 않도록 고유성 보장 메커니즘이 적용되어야 한다. 다음과 같은 메커니즘이 +적용될 수 있다. +UUID, 난수 기반 ID 생성 로직 사용 +세션 스토어 내 기존 세션 키 중복 검사 +충돌 시 자동 재생성 로직 적용 +L2-4. 세션 ID 예측 불가능 및 복잡도 준수 여부 + +## 01. 세션 ID가 충분히 예측 불가능한 난수로 생성되는지 확인한다. + +•  세션 ID 생성 시 암호학적 난수 발생원을 사용해야 하며, 시퀀스 번호, 타임스탬프, 사용자 ID 등 예측 가능한 값을 사용하지 +않아야 한다. + +#### 3.5.8 [SI-08] 세션의 무결성 보호 + + + +--- + +01 +02 +03 +123 + +## 02. 세션 ID의 길이와 엔트로피가 충분히 확보되어 있는지 확인한다. + +•  최소 128비트 이상의 난수 강도를 가지며, URL-safe Base64 또는 Hex 인코딩 시 22자 이상 길이로 구성되는 것이 +권장된다. +•  세션 ID는 영문 대소문자·숫자·특수문자를 혼합하여 패턴이나 규칙성이 없어야 한다. + +## 03. 세션 ID에 예측 가능한 정보가 포함되지 않았는지 확인한다. + +•  사용자 정보, 생성 시각, 서버 식별자 등 추론 가능한 값이 포함될 경우 예측 공격에 노출될 수 있다. + + +--- + +124 +보안 +요구사항 +(L2) 감사 관련 정보 보호 - 인가되지 않은 접근, 변경 및 삭제로부터 감사 정보, 감사 로그 및 감사 도구를 보호해야 +한다. +(L4) 일회용 기록 매체에 감사 레코드 기록 - 하드웨어 기반 일회용 기록 매체에 감사 레코드를 저장하는 기능을 제 +공해야 한다. +목적 +감사 로그와 감사 도구를 무단 접근이나 변경으로부터 보호하고, 감사 기록의 무결성과 추적 가능성을 유지하여 +보안 사고 발생 시 신뢰할 수 있는 증거로 활용할 수 있도록 한다. +점검 기준 +L2. 감사관련 정보 보호 +L2-1. 감사 관련 정보 접근 통제 여부 +L4. 일회용 기록 매체에 감사 레코드 기록 +L4-1. 하드웨어 기반 일회용 기록 매체 기록 여부 +구현 및 점검 방안 +L2 +L2-1. 감사 관련 정보 접근 통제 여부 + +## 01. 감사 로그, 감사 설정 파일, 감사 도구에 대한 접근이 인가된 사용자로 제한되어 있는지 확인한다. + +•  감사 정보는 시스템 관리자, 보안 관리자 등 권한이 부여된 계정만 접근 가능해야 하며, 일반 사용자나 애플리케이션 +프로세스는 접근할 수 없어야 한다. +•  접근 통제는 운영체제 수준의 권한 설정 또는 DB 접근 제어 정책으로 구현될 수 있다. +•  원격 접근 경로에 대해서도 동일한 통제가 적용되어야 하며, 접근 시 모든 행위는 감사 로그에 남아야 한다. +L4 +L4-1. 하드웨어 기반 일회용 기록 매체 기록 여부 + +## 01. 감사 로그가 하드웨어 기반의 일회용(Write Once, Read Many; WORM) 기록 매체에 저장되는지 확인한다. + +•  WORM 디스크, 보안 로그 서버, 하드웨어 로그 어플라이언스 등 물리적으로 수정이 불가능한 장치를 사용하여 로그를 +기록해야 한다. +•  감사 기록은 변경이 불가능해야 하며, 필요한 경우 추가 기록만 가능하도록 구성한다. +•  기록된 감사 로그는 주기적으로 보존 상태를 점검하고, 변조 방지를 위해 암호학적 해시 또는 디지털 서명 검증 절차를 +적용한다. + +#### 3.5.9 [SI-09] 감사관련 정보 보호 + + + +--- + +01 +02 +03 +125 +보안 +요구사항 +(L1) 업데이트 지원 - 업데이트 및 업그레이드 기능을 지원해야 한다. +(L2) 업데이트 파일 진본성 및 무결성 검증 - 설치 전에 소프트웨어 업데이트 파일의 진본성과 무결성을 검증해야 한다. +목적 +시스템이 안전하게 최신 상태를 유지하도록 업데이트 기능을 제공하고, 설치 전 파일의 진본성과 무결성을 검증하여 +위조·변조된 소프트웨어가 적용되는 것을 방지한다. +점검 기준 +L1. 업데이트 지원 +L1-1. 시스템의 소프트웨어 업데이트 기능 제공 여부 +L2. 업데이트 파일 진본성 및 무결성 검증 +L2-1. 업데이트 파일 진본성 및 무결성 검증 여부 +구현 및 점검 방안 +L1 +L1-1. 시스템의 소프트웨어 업데이트 기능 제공 여부 + +## 01. 시스템이 소프트웨어 업데이트 및 업그레이드 기능을 제공하는지 확인한다. + +•  업데이트 기능은 관리자 권한을 통해 수행되어야 한다. +•  자동 업데이트, 수동 업데이트, 네트워크 기반(OTA) 업데이트 등 다양한 방식이 지원될 수 있으며, 적용 시 보안 통신을 +사용해야 한다. +L2 +L2-1. 업데이트 파일 진본성 및 무결성 검증 여부 + +## 01. 업데이트 파일 적용 전에 해당 파일의 진본성과 무결성을 검증하는 기능이 구현되어 있는지 확인한다. + +•  서명 기반 검증 방식을 적용하여, 업데이트 파일에 대한 디지털 서명 또는 해시 값을 확인해야 한다. +•  서명 검증 시 제조사 또는 신뢰된 기관의 공개키를 사용하여 위·변조된 파일이 설치되지 않도록 해야 한다. +•  검증 실패 시 업데이트는 중단되어야 하며, 오류 로그 및 경고 메시지를 통해 관리자에게 알림이 제공되어야 한다. + +#### 3.5.10 [SI-10] 업데이트 지원 검증 + +업데이트 페이지 예시 + + +![이미지 125-0](images/p0125_img0.png) + + +--- + +126 +보안 +요구사항 +(L2) 물리적 변조 방지 및 탐지 - 장치에 인가되지 않은 물리적 접근을 방지하기 위해 변조 방지 및 탐지 메커니즘을 +제공해야 한다. +(L3) 변조 시도 통보 - 인가되지 않은 물리적 접근 시도 탐지 시 자동으로 통지하는 기능을 제공해야 한다. +목적 +물리적 접근으로 인한 장치 손상이나 내부 정보 유출을 예방하고, 변조 시도를 즉시 탐지·통보하여 보안 사고를 +조기에 인지하고 대응한다. +점검 기준 +L2. 물리적 변조 방지 및 탐지 +L2-1. 장치에 인가되지 않은 물리적 접근을 방지하기 위한 변조 방지 및 탐지 메커니즘의 존재 여부 +L3. 변조 시도 통보 +L3-1. 변조 시도 또는 비인가 접근 발생 시 대응 여부 +구현 및 점검 방안 +L2 +L2-1. 장치에 인가되지 않은 물리적 접근을 방지하기 위한 변조 방지 및 탐지 메커니즘의 존재 여부 + +## 01. 장치가 비인가자의 물리적 접근을 방지하기 위한 변조 방지 및 변조 탐지 메커니즘을 갖추고 있는지 확인한다. + +•  변조 탐지는 다음과 같은 수단을 통하여 이상 행위를 감지하고 이벤트를 생성하는 기능을 포함해야 한다. +•  감지된 변조 이벤트는 시스템 로그 또는 보안 관리 콘솔에 기록되어야 하며, 재부팅 후에도 삭제되거나 초기화되어서는 안 +된다. +L3 +L3-1. 변조 시도 또는 비인가 접근 발생 시 대응 여부 + +## 01. 장치에서 변조 시도나 비인가 물리적 접근이 탐지될 경우, 이에 대한 대응 동작이 수행되는지 확인한다. + +•  탐지 시 시스템은 다음과 같은 보호 조치를 수행해야 한다. +알림|시각적·청각적 경보 또는 네트워크 기반 관리자 알림을 발생한다. +기능 제한|변조가 확인된 경우, 제어 명령 수행이나 중요 데이터 접근을 일시적으로 제한하거나 시스템을 안전 모드로 +전환한다. +로그 기록|변조 이벤트의 발생 시각, 탐지 센서, 조치 결과 등이 보안 로그에 자동 기록되어야 하며, 로그는 삭제 및 +수정이 불가해야 한다. +연동 대응|보안 관리 시스템과 연동되어 변조 이벤트가 실시간으로 전달될 수 있어야 한다. +•  변조 감지 후 재부팅이나 복구 과정에서 경고 상태가 해제되지 않고, 관리자가 원인을 확인하고 승인하기 전까지는 정상 +동작으로 전환되지 않도록 구성되어야 한다. + +#### 3.5.11 [SI-11] 물리적 변조 방지 및 탐지 + +변조 탐지 방안 예시 +구분 +예시 +하우징 감지 스위치 +외함 열릴 때 즉시 감지 +광센서 기반 개봉 탐지 +전원이 강제로 차단될 때 이벤트 기록 +전원 차단 탐지 회로 +케이스를 잠그거나 봉인하여 임의 개봉 방지 +보안 칩 +내부 회로 침입·전류 탐지 시 데이터 자동 소거 +물리 인터페이스 탐지 +USB, UART, JTAG 등 포트 연결 이벤트 로그 기록 + + +--- + +01 +02 +03 +127 +번호 +보안 수준 +체크리스트 항목 +DP-01 +L1 +정보의 기밀성 +DP-02 +L2 +데이터 삭제 관리 +DP-03 +L1 +안전한 암호 메커니즘 사용 +DP-04 +L1 +개인정보 보호 +데이터 보호 체크리스트 항목 +로봇 시스템의 통신 채널의 데이터 보호를 위한 데이터 보호(Data Protection, DP) 체크리스트 항목은 다음과 같다. + +### 3.6 데이터 보호 점검 체크리스트 + + + +--- + +128 +보안 +요구사항 +(L1) 정보의 기밀성 - 인가되지 않은 공개를 방지하기 위해 저장소에 저장된 정보와 통신 채널을 통해 전송되는 정보 +의 기밀성을 보호하는 기능을 제공해야 한다. +목적 +저장되거나 전송되는 정보가 비인가자에게 노출되지 않도록 보호하여, 로봇 시스템의 기밀 정보 유출 및 통신 +도청을 방지한다. +점검 기준 +L1. 저장 및 송수신 정보 보호 +L1-1. 네트워크를 통해 전송되는 데이터 보호 여부 +L1-2. 시스템에 저장된 주요 데이터 보호 여부 +구현 및 점검 방안 +L1 +L1-1. 네트워크를 통해 전송되는 데이터 보호 여부 +01. “2.3. 인터페이스 식별”에서 로봇 시스템 구성요소 간 통신 구간을 식별한다. + +## 02. 식별된 통신 구간에 대하여 데이터 암호화 전송이 적용되어 있는지 확인한다. + +•  평문으로 전송되는 경우, 중요 데이터(계정 정보, 제어 명령, 인증 토큰 등)가 암호화 또는 난독화되어 송신되는지 검증한다 +L1-2. 시스템에 저장된 주요 데이터 보호 여부 + +## 01. 로봇 시스템 내에서 저장된 주요 데이터를 식별하고, 암호화되어 보호하는지 확인한다. + +•  다음과 같은 데이터 보호 방식이 적용될 수 있다 +구분 +암호화 필요성 +보호 방식 +계정 정보 +필수 +•  비밀번호는 해시로 저장(SHA-256 이상, PBKDF2, bcrypt 등) +인증키 / 비밀키 +/ API 키 / 토큰 +필수 +•  키 저장 시 대칭키 암호화(AES-256 등) +•  하드웨어 보호 +제어 파라미터 +조건부 +•  안전 운영에 직결되는 값은 암호화 또는 무결성 검증 서명 적용 +•  단순 UI 설정값은 권한 제어로 대체 가능 +로그 파일 +조건부 또는 접근 제어 +•  로그 전체는 평문 저장 가능하나, 내부 민감 필드(IP, 사용자 ID 등)는 마 +스킹 또는 암호화 +•  접근 권한 및 변경 통제 필수 +설정 파일 +조건부 +•  인증정보(DB 비밀번호, API 토큰 등)는 암호화 +•  일반 환경설정은 평문 허용, 파일 권한(600) 적용 +중요 데이터 보호 방안 예시 +암호화가 전송된 통신 채널 예시 + +#### 3.6.1 [DP-01] 정보의 기밀성 + + + +![이미지 128-0](images/p0128_img0.png) + + +--- + +01 +02 +03 +129 +보안 +요구사항 +(L2) 데이터 삭제 관리 - 활성 서비스가 해제되거나 폐기되는 경우, 명확한 읽기 권한이 지원되는 모든 정보 비휘발 +성 저장소에 저장된 정보를 삭제하는 기능을 제공해야 한다. +목적 +저장 장치에 남아 있는 민감 데이터의 잔존을 방지하고, 로봇 시스템 해제·폐기 시 비인가자가 저장 정보에 +접근하거나 복구하지 못하도록 보호한다. +점검 기준 +L2. 데이터 삭제 기능 +L2-1. 시스템에 저장된 모든 민감 정보의 안전한 삭제 기능 제공 여부 +구현 및 점검 방안 +L2 +L2-1. 시스템에 저장된 모든 민감 정보의 안전한 삭제 기능 제공 여부 + +## 01. 로봇 시스템에 저장된 민감 정보(계정 정보, 인증키, 사용자 데이터, 로그, 설정 파일 등)가 서비스 비활성화 + +또는 장치 폐기 시 안전하게 삭제되는 기능을 제공하는지 확인한다. +•  삭제는 다음 중 하나 이상의 방식으로 수행될 수 있다 +일괄 삭제 기능을 통한 자동 삭제 +암호화 키 파기를 통한 논리적 데이터 무효화 +삭제 절차 문서화 및 관리자가 수동 수행하는 보안 삭제 프로세스 + +#### 3.6.2 [DP-02] 데이터 삭제 관리 + +데이터 초기화 기능 제공 예시 + + +![이미지 129-0](images/p0129_img0.png) + + +--- + +130 +보안 +요구사항 +(L1) 안전한 암호 메커니즘 사용 - 암호화가 필요한 경우 국제적으로 인정된 안전한 암호 메커니즘을 사용해야 한다. +목적 +국제적으로 검증된 암호 알고리즘과 키 관리 방식을 사용함으로써, 로봇 시스템 내 데이터의 기밀성·무결성을 +안정적으로 보호하고 취약하거나 자체 제작된 암호 방식으로 인한 보안 약점을 방지한다. +점검 기준 +L1. 안전한 암호 메커니즘 사용 +L1-1. 국제적으로 인정된 암호 알고리즘의 사용 여부 +구현 및 점검 방안 +L1 +L1-1. 국제적으로 인정된 암호 알고리즘의 사용 여부 +01. “3.6.1 정보의 기밀성” 항목 점검 과정에서 식별된 암호화 알고리즘 및 키 길이를 식별한다. + +## 02. 식별된 암호화 알고리즘이 국제적으로 인정된 안전한 알고리즘인지 확인한다. + +•  다음과 같은 암호화 알고리즘 기준을 적용할 수 있다. +•  사용된 암호 모듈이 제조사에서 자체 개발되었거나 검증되지 않은 오픈 소스를 사용하는 경우 공인 인증을 받은 모듈인지 +확인한다. + +#### 3.6.3 [DP-03] 안전한 암호 메커니즘 사용 + +구분 +권고 기준 +미흡 기준 +대칭키 +알고리즘 +AES 계열(AES-128 이상, 권장 AES-256), +ChaCha20-Poly1305 등 현대 블록 암호 사용 +DES, 3DES, RC4, Blowfish 등 +구식 알고리즘 사용 +비대칭키 +알고리즘 +RSA ≥ 2048bit 또는 ECC P-256 이상 (권장 +ECC) +RSA 1024bit 이하, ECC P-192 +이하 +해시 / 무결성 +알고리즘 +SHA-256 이상 (SHA-2 / SHA-3 계열), +HMAC-SHA-256 이상 +SHA-1, MD5, HMAC-MD5 등 +취약 해시 사용 +운영 모드 +인증 모드(GCM, CCM, CTR+HMAC 등) 사용 — +패턴 노출 방지 +ECB 등 단순 블록 모드 사용 +통신 프로토콜 +TLS 1.2 이상 (권장 TLS 1.3), ECDHE 등 임시 +세션 키 교환 사용 +TLS 1.0 / 1.1, 평문 통신 또는 정적 +RSA 세션 사용 +프로토콜 적용 +MQTT, OPC UA, HTTPS 등에서 mTLS 또는 +메시지 서명 적용 +verify = false, allow_insecure 등 +검증 우회 설정 +권장 암호화 알고리즘 기준 예시 + + +--- + +01 +02 +03 +131 +보안 +요구사항 +(L1) 개인정보 보호 - 개인정보 수집 및 처리 시 개인정보 관련 법적 요구사항을 준수해야 한다. +목적 +로봇 시스템에서 수집·처리되는 사용자 개인정보의 무단 수집, 오·남용, 유출을 방지하고, 개인정보 관련 법적·규제 +요건(개인정보보호법 등)을 준수한다. +점검 기준 +L1. 개인정보 보호법 준수 +L1-1. 개인정보 수집 시 수집 항목, 이용 목적, 보유 기간 등을 사용자에게 고지 및 동의 수집 여부 +L1-2. 수집된 개인정보의 안전성 확보를 위한 기술적·관리적 조치 시행 여부 +L1-3. 보유기간 경과 또는 처리 목적 달성 시 개인정보 파기 여부 +구현 및 점검 방안 +L1 +L1-1. 개인정보 수집 시 수집 항목, 이용 목적, 보유 기간 등을 사용자에게 고지 및 동의 수집 여부 + +## 01. 로봇 시스템 또는 관리 서버가 사용자로부터 개인정보를 수집하는 경우, 수집 항목, 이용 목적, 보유 기간, 제 + +3자 제공 여부 등을 명확히 고지하고 사용자의 사전 동의를 받는 절차가 마련되어 있는지 확인한다. +•  로봇 시스템에서 처리될 수 있는 개인정보 항목은 다음과 같다. +•  수집된 개인정보 항목은 서비스 UI, 앱 초기 설정 화면, 또는 개인정보 처리방침 등을 통해 사용자가 확인할 수 있어야 +하며, 사용자 동의 없이 개인정보를 수집·활용하는 경우 미흡으로 판단한다. +L1-2. 수집된 개인정보의 안전성 확보를 위한 기술적·관리적 조치 시행 여부 + +## 01. 개인정보 저장 및 전송 구간에서 암호화를 통한 보호 여부를 확인한다. + +•  수집된 개인정보(이름, 계정 ID, 비밀번호, 인증키, 영상·음성 데이터 등)는 저장 시 안전한 암호 알고리즘으로 암호화되어 +전송되어야 한다. +•  네트워크 전송 구간은 TLS 1.2 이상의 암호화 채널을 통해 보호되어야 한다. + +## 02. 저장된 개인정보에 대한 접근 통제 및 권한 분리 조치가 적용되어 있는지 확인한다. + +•  개인정보 접근은 인가된 사용자 및 프로세스에 한정되어야 한다. +개인정보 항목 예시 +사용자 개인정보 수집 및 이용 동의 예시 + +#### 3.6.4 [DP-04] 개인정보 보호 + +구분 +예시 항목 +식별 정보 +사용자 이름, 계정 ID, 이메일, 전화번호 +영상/음성 정보 +카메라 영상, 마이크 음성 데이터 +인증 정보 +비밀번호, 인증 토큰, 공개키 인증서 + + +![이미지 131-0](images/p0131_img0.png) + + +--- + +132 + +## 03. 개인정보 접근 및 처리 이력에 대한 감사 로그가 기록·점검되고 있는지 확인한다. + +•  개인정보에 접근하거나 다운로드, 수정, 삭제한 이력은 로그로 자동 기록되어야 하며, 로그는 읽기 전용으로 관리되어야 +한다. +•  감사 로그는 최소 6개월 이상 보관되고, 주기적으로 보안 담당자가 점검하는 절차가 존재해야 한다. +L1-3. 보유기간 경과 또는 처리 목적 달성 시 개인정보 파기여부 + +## 01. 개인정보 보유 기간이 경과하거나 수집 목적이 달성된 경우, 해당 정보를 지체 없이 안전하게 파기하는 + +절차가 마련되어 있는지 확인한다. +•  파기는 완전 삭제, 복구 불가능한 덮어쓰기, 또는 암호화 키 파기 방식으로 수행되어야 하며, 단순 논리적 삭제(표시만 +변경)는 불충분으로 판단한다. +•  개인정보 파기 내역(대상, 일시, 방법 등)은 별도 로그로 기록되어야 하며,파기 기능이 미제공되거나 수동으로만 수행되는 +경우 일부 충족으로 판단한다. + + +--- + +01 +02 +03 +133 +번호 +보안 수준 +체크리스트 항목 +DFR-01 +L1 +네트워크 기능 지원 +DFR-02 +L2 +프로토콜 필터링 +데이터 흐름 제한 체크리스트 항목 +로봇 시스템의 통신 채널의 데이터 흐름을 제한하여 데이터 유출을 방지하기 위한 데이터 흐름 제한(Data From +Restriction, DFR) 체크리스트 항목은 다음과 같다. + +### 3.7 데이터 흐름 제한 점검 체크리스트 + + + +--- + +134 +보안 +요구사항 +(L1) 네트워크 기능 지원 - 구역과 통신경로의 분할을 위해 운영자가 네트워크 설정을 직접 관리· +설정할 수 있는 기능을 제공해야 한다. +목적 +운영자가 네트워크 구역·통신경로를 직접 분리·제어하여 공격 표면을 축소하고 변경·복구에 신속히 대응할 수 +있도록 한다. +점검 기준 +L1. 네트워크 기능 지원 +L1-1. 사용자가 네트워크 설정을 구성할 수 있는 인터페이스 제공 여부 +구현 및 점검 방안 +L1 +L1-1. 사용자가 네트워크 설정을 구성할 수 있는 인터페이스 제공 여부 + +## 01. 로봇이 제공하는 통신 인터페이스를 식별한다. + +•  “2.3. 인터페이스 식별”에서 식별된 인터페이스 중 제조사에서 사전 구성되어 수정할 수 없도록 고정된 인터페이스(센서/ +액추에이터의 내부 통신, NFC 등)를 제외하고, 일반적으로 사용자가 설정할 수 있는 네트워크 인터페이스 정보는 다음과 +같다. + +## 02. 식별된 통신 인터페이스에 대하여 사용자가 설정 정보를 변경할 수 있도록 하나 이상의 사용자 인터페이스를 + +제공하는지 확인한다. +•  사용자가 설정 정보를 변경하기 위한 인터페이스는 다음과 같이 여러 방식으로 제공될 수 있다. +로봇 시스템 네트워크 설정을 위한 사용자 인터페이스 제공 예시 +로봇과 연결된 HMI(예: 티칭 펜던트) +로봇 관리 프로그램 + +#### 3.7.1 [DFR-01] 네트워크 기능 지원 + +인터페이스 +설정 정보 +AP 모드 +SSID, 비밀번호, 보안 모드(WPA2/WPA3), 채널, 최대 동시 접속 수 등 +STA 모드 +연결할 SSID, 비밀번호, 인증 방식, IP 설정(DHCP 또는 정적 구성) +유선 이더넷 포트 +IP 설정(DHCP 또는 정적 구성) +사용자가 수정 가능한 네트워크 인터페이스 예시 +파일 시스템 터미널 제공(예: SSH, 로컬) +로봇 또는 관리 서버 웹 인터페이스 + + +![이미지 134-0](images/p0134_img0.png) + + +![이미지 134-1](images/p0134_img1.png) + + +![이미지 134-2](images/p0134_img2.png) + + +![이미지 134-3](images/p0134_img3.png) + + +--- + +01 +02 +03 +135 +보안 +요구사항 +(L2) 프로토콜 필터링 - 승인된 프로토콜만 허용하고 승인되지 않은 프로토콜의 사용을 제한하는 기능을 제공해야 +한다. +목적 +승인된 프로토콜만 허용해 비인가 또는 취약한 프로토콜의 사용을 차단하고 최소 통신 원칙을 보장한다. +점검 기준 +L2. 프로토콜 필터링 +L2-1. 운영에 필수적으로 사용되는 서비스 외의 프로토콜을 제한하거나 사용자가 제한할 수 있는 기능을 제공하고 +있는지 여부 +구현 및 점검 방안 +L2 +L2-1. 운영에 필수적으로 사용되는 서비스 외의 프로토콜을 제한하거나 사용자가 제한할 수 있는 기능을 +제공하고 있는지 여부 + +## 01. 로봇이 제공하는 서비스를 식별한다. + +•  “2.3. 인터페이스 식별”에서 식별된 서비스 중 IP 기반 통신을 수행하는 서비스를 식별한다. + +## 02. 식별된 서비스 외의 서비스 접근이 제한되어 있는지 확인한다. + +•  공격자의 사이버 공격 또는 로봇 운영 중 발생할 수 있는 의도치 않은 서비스 노출을 방지하기 위한 것으로, 심층 방어 +원칙에 따라 단일 보안 기능이 실패하더라도 전체 시스템이 보호될 수 있도록 구성해야 한다. 이를 위해 다음과 같은 +방식으로 구현할 수 있다. +[방안 1] 호스트 방화벽 적용 +운영체제 또는 네트워크 구간에서 승인된 서비스 이외의 접근을 제한하기 위해 로컬 방화벽을 활용한다. +[방안 2] 네트워크 보안 정책 설정 기능 제공 +운영자 또는 관리자가 직접 프로토콜이나 IP, MAC 주소 등을 허용 및 차단하는 정책을 설정할 수 있도록 네트워크 보안 +정책 설정 기능을 제공한다. + +#### 3.7.2 [DFR-02] 프로토콜 필터링 + +Bash (예: MQTT 및 HTTPS 외의 포트 차단) +# sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +# sudo iptables -A INPUT -p tcp --dport 1883 -j ACCEPT +# sudo iptables -A INPUT -j DROP +네트워크 보안 정책 설정 기능 제공 예시 + + +![이미지 135-0](images/p0135_img0.png) + + +--- + +136 +번호 +보안 수준 +체크리스트 항목 +ER-01 +L1 +감사 로그 접근성 +L3 +감사 로그에 대한 프로그래밍 방식 접근 +ER-02 +L2 +지속적인 모니터링 +ER-03 +L2 +보안 이벤트 알림 +이벤트 대응 체크리스트 항목 +로봇 시스템 침해에 대하여 관리자에게 알리고 침해에 대한 증거를 수집하기 위한 이벤트 대응(Event Response, +ER) 체크리스트 항목은 다음과 같다. + +### 3.8 이벤트 대응 점검 체크리스트 + + + +--- + +01 +02 +03 +137 +보안 +요구사항 +(L1) 감사 로그 접근성 - 인가된 사람 및/또는 도구가 읽기-전용으로 감사로그에 접근할 수 있는 기능을 제공해야 +한다. +(L3) 감사 로그에 대한 프로그래밍 방식 접근 - API(응용 프로그래밍 인터페이스)를 사용하여 감사로그에 대한 프로 +그래밍 방식의 접근을 제공해야 한다. +목적 +감사로그의 무결성과 증거성을 보전하고, 인가 주체만 안전하게 열람하도록 하며, 상위 시스템과 연동해 수집·분석· +대응을 자동화한다. +점검 기준 +L1. 감사 로그 접근 +L1-1. 감사 로그 읽기 전용 여부 +L1-2. 감사 로그 접근 제한 여부 +L3. 감사 로그에 대한 프로그래밍 방식 접근 +L3-1. API를 통한 감사 로그 읽기 전용 여부 +L3-2. API를 통한 감사 로그 접근 제한 여부 +구현 및 점검 방안 +L1 +L1-1. 감사 로그 읽기 전용 여부 + +## 01. 감사 로그 파일 또는 저장소가 읽기 전용 속성으로 보호되고 있는지 확인한다. + +•  시스템, 장치, 애플리케이션에서 생성된 감사 로그가 수정 또는 덮어쓰기 불가능한 구조로 되어 있어야 한다. +•  로그가 별도 로그 서버로 전송되어 원본이 보호되는 경우 충족으로 판단한다. +L1-2. 감사 로그 접근 제한 여부 + +## 01. 권한이 인가된 관리자 또는 감사 담당자에게만 부여되어 있는지 확인한다. + +•  일반 사용자, 운영 프로세스, 외부 서비스가 감사 로그를 열람·복사·삭제할 수 없어야 한다. +L3 +L3-1. API를 통한 감사 로그 읽기 전용 여부 +01. API를 통해 제공되는 감사 로그가 읽기 전용으로 제공되는지 확인한다. +•  API 요청을 통해 로그 수정·삭제가 불가능하며, 조회 요청 시 로그 서명값 또는 해시값을 함께 반환하여 무결성 검증이 +가능한 구조인 경우 충족으로 판단한다. +L3-2. API를 통한 감사 로그 접근 제한 여부 + +## 01. 감사 로그 조회 API 접근이 인가된 관리자 또는 감사 담당자에게만 허용되는지 확인한다. + +•  로그 조회 API 호출 시 인증 토큰 또는 관리자 세션 검증이 반드시 수행되어야 한다. +•  접근 권한은 최소 권한 원칙에 따라 부여되어야 하며, 로그 API 접근 시 인증자 정보, 접근 시각, IP, API 키 등이 별도 +감사 로그에 기록되어야 한다. + +#### 3.8.1 [ER-01] 감사로그 접근 관리 + +API를 통한 로그 조회 요청 및 응답 예시 +GET /api/audit/logs +Authorization: Bearer +HTTP/1.1 200 OK +{ +“entries”: [...], +“integrity”: “sha256:f45a...” +} + + +--- + +138 +보안 +요구사항 +(L2) 지속적인 모니터링 - 적시에 보안 위반을 탐지하여 보고하기 위해 지속적으로 모니터링할 수 있는 기능을 제공 +해야 한다. +목적 +위협을 실시간으로 조기 탐지하여 경고를 제공하여 피해를 최소화한다. +점검 기준 +L2. 지속적인 모니터링 +L2-1. 보안 위협 모니터링 기능 제공 여부 +구현 및 점검 방안 +L2 +L2-1. 보안 위협 모니터링 기능 제공 여부 + +## 01. 로봇 본체나 관리 서버에서 보안 이벤트 탐지 기능이 탑재되어 있는지 확인한다. + +•  다음과 같은 보안 관련 이벤트가 실시간 또는 주기적으로 수집되어야 한다. +•  해당 요구사항은 상위 시스템과 통합되어 충족될 수 있다. + +#### 3.8.2 [ER-02] 지속적인 모니터링 + +구분 +주요 이벤트 예시 +인증 및 접근 +관련 +•  로그인 실패 / 비인가 사용자 로그인 시도 +•  비정상 세션 유지 또는 토큰 재사용 탐지 +•  관리자 권한 상승 시도 또는 권한 변경 +네트워크 통신 +관련 +•  로봇 제어 포트에 대한 스캔 또는 연결 시도 +•  비인가 IP·MAC 주소로부터의 접근 +•  통신 오류, CRC 불일치, 패킷 위·변조 탐지 +•  TLS/OPC UA 인증서 검증 실패 이벤트 +제어 및 동작 +관련 +•  비인가 제어 명령 수신 +•  정상 범위를 벗어난 파라미터 변경 시도 +•  긴급 정지 또는 오동작 발생 이벤트 +시스템 무결성 및 +파일 관련 +•  펌웨어/소프트웨어 무결성 검증 실패 +•  설정 파일 변경, 로그 삭제, 비정상 프로세스 실행 +•  보안 설정 변경 +자원 및 서비스 +관련 +•  CPU/메모리 과다 사용 +•  네트워크 지연 또는 패킷 드롭 급증 +•  서비스 포트 비정상 종료 또는 재시작 감지 +보안 위협 이벤트 예시 + + +--- + +01 +02 +03 +139 +보안 +요구사항 +(L2) 보안 이벤트 알림 - 중요 보안 이벤트 발생 시 이메일, SMS, 모바일 앱 푸시 알림, 음성 경고 등 다양한 채널 또 +는 화면을 통해 관리자에게 알림을 전송할 수 있는 기능을 제공해야 한다. +목적 +중대한 이벤트를 즉시 인지하고 적정 채널로 통보해 단축 및 대응 시간을 확보한다. +점검 기준 +L2. 보안 이벤트 알림 +L2-1. 보안 위반 징후 발생 시 알림 전송 여부 +구현 및 점검 방안 +L2 +L2-1. 보안 위반 징후 발생 시 알림 전송 여부 +01. “3.8.2 지속적인 모니터링”에서 항목의 보안 관련 이벤트에 대하여 이벤트 발생 시 관리자에게 즉시 알림을 +전송하는 기능을 제공하는지 확인한다. +•  관리자 알림은 하나 이상의 채널(이메일, SMS, 모바일 앱 푸시, HMI/웹 대시보드 경고창, 음성 알림 등)을 통해 전송될 수 +있어야 한다. + +#### 3.8.3 [ER-03] 보안 이벤트 알림 + +대시보드를 통한 보안 이벤트 관리자 알림 예시 + + +![이미지 139-0](images/p0139_img0.png) + + +--- + +140 +번호 +보안 수준 +체크리스트 항목 +RA-01 +L1 +서비스 거부 공격 방지 +L2 +통신 부하 방지 +RA-02 +L1 +자원 관리 +RA-03 +L1 +자원 상태 진단 +RA-04 +L1 +목록화 기능 지원 +RA-05 +L1 +시스템 백업 +RA-06 +L1 +컴포넌트 복구 및 재구성 +L2 +복구 전 무결성 확인 +RA-07 +L1 +네트워크 및 보안 구성 설정 +L3 +현재 보안 설정에 대한 보고서 생성 +RA-08 +L1 +불필요한 기능, 포트 및 서비스 제한 +자원 가용성 체크리스트 항목 +로봇의 자원 가용성을 보장하여 서비스 거부 공격을 방지하기 위한 자원 가용성(Resource Availabililty, RA) +체크리스트 항목은 다음과 같다. + +### 3.9 자원 가용성 점검 체크리스트 + + + +--- + +01 +02 +03 +141 +보안 +요구사항 +(L1) 서비스 거부 공격 방지 - 외부에서 다수의 연결 시도, 과도한 명령 요청, 대용량 데이터 송신 등의 공격에 의해 +로봇 시스템이 마비되지 않도록 연결 제한, 큐 설정, 프로세스 자원 제한 등을 적용해야 한다. +(L2) 통신 부하 관리 - DoS 이벤트로 인한 정보 및/또는 메시지 범람 유형의 영향을 완화하는 기능을 제공해야 한 +다. +목적 +서비스에 대해 발생하는 통신 측면 공격과 영향 이벤트로 인해 로봇 시스템이 마비되지 않게 가용성을 유지한다. +점검 기준 +L1. 서비스 거부 공격 방지 기능 +L1-1. 서비스 거부 공격 방지를 위한 보안 기능 적용 여부 +L2. 통신 부하 관리 여부 +L2-1. 통신 부하를 완화하기 위한 보안 기능 적용 여부 +구현 및 점검 방안 +L1 +L1-1. 서비스 거부 공격 방지를 위한 보안 기능 적용 여부 + +## 01. 네트워크 또는 시스템에서 서비스 거부 공격 탐지 및 차단 기능이 구현되어 있는지 확인한다. + +•  서비스 거부 공격 탐지는 다음과 같은 방안으로 수행될 수 있다. +[방안 1] 요청 속도 및 세션 제한 정책 적용 +서버 또는 애플리케이션 수준에서 IP당 요청 빈도 및 동시 연결 수를 제한한다. +[방안 2] 호스트 방화벽 활용 +승인되지 않은 트래픽을 차단하기 위해 로컬 방화벽을 구성한다. +[방안 3] 커널 레벨 자원 제한 설정 +리눅스 커널 파라미터를 조정하여 TCP 연결 수, 큐 크기, 파일 핸들 수를 제한해 서비스 자원 고갈을 예방한다. + +#### 3.9.1 [RA-01] 서비스 거부 방지 + +Nginx (예: /etc/nginx/nginx.conf) +http { +limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; +server { +listen 443 ssl; +server_name example.com; +location / { +limit_req zone=req_limit_per_ip burst=5 nodelay; +limit_conn conn_limit_per_ip 10; +} +} +} +Bash (예: 호스트 방화벽) +$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT +$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT +$ sudo iptables -A INPUT -j DROP +Bash (예: sysctl 및 ulimit 설정) +$ sudo sysctl -w net.core.somaxconn=128 +$ sudo sysctl -w net.ipv4.tcp_max_syn_backlog=256 +$ ulimit -n 1024 + + +--- + +142 +[방안 4] 비정상 트래픽 탐지 자동화 +DoS 패턴을 감지하는 IPS 룰을 적용해 이상 트래픽 발생 시 자동 차단한다. +해당 요구사항은 상위 시스템과 통합하여 충족될 수 있다. +L2 +L2-1. 통신 부하를 완화하기 위한 보안 기능 적용 여부 + +## 01. 로봇 시스템에서 다수의 센서·액추에이터·제어 모듈 간 통신 부하를 완화하기 위한 보안 기능이 구현되어 + +있는지 확인한다. +•  통신 부하를 완화하기 위한 보안 기능은 다음과 같은 방식으로 구현될 수 있다. +[방안 1] QoS 및 대역폭 제어 정책 적용 +ROS2 또는 DDS 통신에서 QoS 설정을 통해 중요 데이터의 우선 전송 및 트래픽 제어를 수행한다. +[방안 2] 송신 주기 조정 및 버퍼 관리 기능 적용 +로봇 컨트롤러 또는 센서 게이트웨이에서 데이터 송신 주기를 조절하거나, 큐 크기를 제한하여 대용량 통신 트래픽을 +방지한다. +[방안 3] 네트워크 세그먼트 분리 및 부하 분산 구성 +센서망, 제어망, 관리망을 VLAN 또는 물리 인터페이스 단위로 분리해 트래픽을 분산한다. +•  해당 요구사항은 상위 시스템과 통합하여 충족될 수 있다. +YAML (예: Suricata 룰 예시) +alert tcp any any -> $HOME_NET any (msg:”TCP SYN Flood”; flags:S; threshold: type both, track by_src, +count 50, seconds 1; classtype:attempted-dos; sid:100001;) +YAML (예: ROS2 QoS 프로파일 설정) +QoSProfile: +reliability: RELIABLE +durability: TRANSIENT_LOCAL +history: KEEP_LAST +depth: 10 +Bash (예: VLAN 분리) +$ sudo ip link add link eth0 name eth0.10 type vlan id 10 # 제어 망 +$ sudo ip link add link eth0 name eth0.20 type vlan id 20 # 센서 망 +$ sudo ip link set eth0.10 up +$ sudo ip link set eth0.20 up +C++ (예: ROS Publisher 송신 주기 제한) +ros::Publisher pub = nh.advertise(“sensor_data”, 10); +ros::Rate loop_rate(5); // 초당 5회 전송 제한 +while (ros::ok()) { +std_msgs::String msg; +msg.data = “sensor data”; +pub.publish(msg); +loop_rate.sleep(); +} + + +--- + +01 +02 +03 +143 +보안 +요구사항 +(L1) 자원 관리 - 자원 고갈을 방지하기 위해 보안기능의 자원 사용을 제한하는 기능을 제공해야 한다. +목적 +로봇 시스템의 자원을 모니터링하고, 보안기능으로 인해 성능과 용량 등이 과도하게 사용되지 않게 적절한 +자원관리를 수행한다. +점검 기준 +L1. 자원 제한 여부 +L1-1. 보안 기능 사용 자원 제한 여부 +구현 및 점검 방안 +L1 +L1-1. 보안 기능 사용 자원 제한 여부 + +## 01. 로봇 시스템의 보안 기능(암호화, 인증, 로그 기록 등)이 과도한 CPU, 메모리, 네트워크 자원을 점유하지 + +않도록 자원 사용 제한 기능이 구현되어 있는지 확인한다. +[방안 1] 프로세스 및 스레드 자원 제한 설정 +보안 프로세스가 제어 주기나 실시간 동작에 영향을 주지 않도록 CPU·메모리 점유율을 제한한다. +[방안 2] 로그 저장소 용량 제한 및 순환 정책 적용 +감사/운영 로그가 로그 저장소 용량을 초과하지 않도록 로그 순환 정책을 설정한다. +[방안 3] 암호화·인증 모듈 경량화 및 하드웨어 가속 활용 +CPU 부하가 높은 암호 연산은 하드웨어 보안 모듈 또는 암호화 프로세서를 활용한다. + +#### 3.9.2 [RA-02] 자원 관리 + +Bash (예: cgroups 이용한 자원 제한) +$ sudo cgcreate -g cpu,memory:/robot_security +$ echo 20000 | sudo tee /sys/fs/cgroup/cpu/robot_security/cpu.cfs_quota_us +$ echo 256M | sudo tee /sys/fs/cgroup/memory/robot_security/memory.limit_in_bytes +$ sudo cgclassify -g cpu,memory:/robot_security $(pidof security_agent) +Bash (예: OpenSSL 하드웨어 가속 활성화) +$ openssl engine -t +(dynamic) Dynamic engine loading support +(rdrand) Intel RDRAND engine +(aesni) Intel AES-NI engine +Bash (예: logrotate 설정) +# /etc/logrotate.d/robot_security +/var/log/robot/security.log { +size 50M +rotate 5 +compress +missingok +notifempty +} + + +--- + +144 +보안 +요구사항 +(L1) 자원 상태 진단 - CPU, 메모리, 저장소, 통신 채널 등의 사용량 및 상태를 확인할 수 있어야 한다. +목적 +CPU, 메모리, 저장소, 통신 채널 등의 사용량 및 상태를 확인하여 주기적인 자원 상태 진단을 통해 시스템의 +가용성을 유지한다. +점검 기준 +L1. 자원 상태 진단 여부 +L1-1. 자원 상태 조회 디스플레이 제공 여부 +구현 및 점검 방안 +L1 +L1-1. 자원 상태 조회 디스플레이 제공 여부 + +## 01. 로봇의 사용자 인터페이스를 통해 로봇의 주요 자원 상태를 조회하거나 시각화하는 기능이 제공되는지 + +확인한다. +•  다음과 같이 운영자 또는 관리자가 사용자 인터페이스를 통해 자원 상태(CPU, 메모리, 디스크, 네트워크 사용률)를 +실시간으로 확인할 수 있도록 대시보드를 제공해야 한다. + +#### 3.9.3 [RA-03] 자원 상태 진단 + +시스템 자원상태 조회 대시보드 예시 + + +![이미지 144-0](images/p0144_img0.png) + + +--- + +01 +02 +03 +145 +보안 +요구사항 +(L1) 목록화 기능 지원 - 설치된 구성요소들의 현재 목록과 각 컴포넌트의 속성 정보를 보고할 수 있는 기능을 제공 +해야 한다. +목적 +설치된 구성요소들의 현재 목록과 각 컴포넌트의 속성 정보를 확인하여 적절한 자산관리를 수행할 수 있다. +점검 기준 +L1. 목록화 기능 지원 +L1-1. 시스템에 설치된 컴포넌트의 목록 디스플레이 존재 여부 +구현 및 점검 방안 +L1 +L1-1. 시스템에 설치된 컴포넌트의 목록 디스플레이 존재 여부 + +## 01. 로봇은 설치된 구성요소(하드웨어, 소프트웨어, 펌웨어, 라이브러리 등)의 목록과 주요 속성(버전, 제조사, + +상태 등)을 조회할 수 있는 기능이 제공되는지 확인한다. +•  운영자 또는 관리자가 HMI나 웹 대시보드 등의 인터페이스를 통해 설치된 모듈의 목록과 버전을 확인할 수 있도록 해야 +한다. + +#### 3.9.4 [RA-04] 목록화 기능 지원 + +설치된 구성요소 조회 페이지 예시 + + +![이미지 145-0](images/p0145_img0.png) + + +--- + +146 +보안 +요구사항 +(L1) 시스템 백업 - 장치 상태(사용자/시스템 수준 정보)를 보호하기 위해 백업 기능을 지원해야 하며, 백업 +프로세스는 정상적인 로봇 서비스 운영에 영향을 미치지 않아야 한다. +목적 +장치 상태(사용자/시스템 수준 정보)를 보호하기 위해 백업 프로세스를 이용하여 주기적인 상태 저장 및 복원을 +수행한다. +점검 기준 +L1. 컴포넌트 백업 기능 +L1-1. 사용자 및 시스템 설정 정보의 백업 기능 존재 여부 +구현 및 점검 방안 +L1 +L1-1. 사용자 및 시스템 설정 정보의 백업 기능 존재 여부 + +## 01. 로봇의 사용자 인터페이스에서 사용자 및 시스템 설정 구성을 백업할 수 있는 기능이 제공되는지 확인한다. + +•  백업 기능은 운영자 또는 관리자 권한으로만 접근 가능해야 한다. +•  백업 파일은 인간이 읽을 수 있는 구조적 형태로 저장되어야 하며, 프로그램이 직접 읽어 복원할 수 있는 구조화된 형식 +(JSON/XML/YAML/CSV/프로토콜 버퍼 등)이어야 한다. +•  백업 기능은 전체 백업 또는 선택적 백업 형태로 제공될 수 있다. +•  백업된 데이터에 암호화되지 않은 민감 정보나, 구조화되지 않은 임의 형식을 사용할 경우 요구사항 미흡으로 판단한다. +로봇 백업 페이지 에시 + +#### 3.9.5 [RA-05] 시스템 백업 + + + +![이미지 146-0](images/p0146_img0.png) + + +--- + +01 +02 +03 +147 +보안 +요구사항 +(L1) 컴포넌트 복구 및 재구성 - 중단 또는 장애 발생 후 알려진 보안 상태로 복구 및 재구성할 수 있는 기능을 +제공해야 한다. +(L2) 복구 전 무결성 확인 - 복구를 시작하기 전에 백업 파일의 무결성을 검증하는 기능을 제공해야 한다. +목적 +장치 상태를 보호하기 위해 복구 프로세스를 이용하여 주기적인 상태 저장 및 복원을 수행하고, 복구 무결성 검증을 +통해 정상적인 시스템 복구가 수행되게 한다. +점검 기준 +L1. 컴포넌트 복구 기능 +L1-1. 컴포넌트 복구 기능 제공 여부 +L2. 복구 전 무결성 검증 +L2-1. 복구 전 백업 데이터 무결성 검증 여부 +구현 및 점검 방안 +L1 +L1-1. 컴포넌트 복구 기능 제공 여부 + +## 01. 로봇 시스템에서 백업된 컴포넌트를 정상적으로 복구할 수 있는 기능이 제공되는지 확인한다. + +•  복구 기능은 운영자 또는 관리자 권한으로만 접근 가능해야 하며, 시스템이 백업된 데이터를 자동으로 인식하여 설정값을 +재적용할 수 있어야 한다. +•  복구 기능은 전체 복구 또는 선택적 복구 형태로 제공될 수 있으며, 복구 완료 후 결과가 로그에 기록되어야 한다. +L2 +L2-1. 복구 전 백업 데이터 무결성 검증 여부 + +## 01. 로봇 시스템이 백업된 데이터의 무결성을 검증하는 절차를 제공하는지 확인한다. + +•  복구 수행 전 백업 파일의 해시 값 또는 디지털 서명을 검증하여 변조 여부를 판단해야 한다. +•  검증 절차는 자동으로 수행되어야 하며, 검증 실패 시 복구가 중단되고 로그에 기록되어야 한다. +•  무결성 검증에 사용되는 기준 값은 백업 생성 시 함께 저장되어야 하며, 백업 데이터와 별도로 관리되어야 한다. +로봇 복구 페이지 예시 + +#### 3.9.6 [RA-06] 복구 관리 + + + +![이미지 147-0](images/p0147_img0.png) + + +--- + +148 +보안 +요구사항 +(L1) 네트워크 및 보안 구성 설정 - 공급자가 제공한 지침에 서술된 권고 네트워크와 보안 구성에 따른 설정 기능을 +제공해야 하며, 현재 적용된 네트워크와 보안 구성 설정에 대한 인터페이스를 제공해야 한다. +(L3) 현재 보안 설정에 대한 보고서 생성 - 현재 배포된 보안 설정을 컴퓨터 판독 가능 형식으로 나열하는 보고서를 +생성하는 기능을 제공해야 한다. +목적 +네트워크 및 보안 구성 설정 관리 인터페이스를 통해 시스템이 정상적인 보안 구성 하에서 동작하는지 관리하고 +보고서를 생성 및 저장하여 주기적인 검증을 수행한다. +점검 기준 +L1. 네트워크 및 보안 구성 설정 +L1-1. 네트워크 및 보안 구성 설정 제공 여부 +L3. 보안 설정 보고서 생성 기능 +L3-1. 현재 보안 설정에 대한 보고서 생성 +구현 및 점검 방안 +L1 +L1-1. 네트워크 및 보안 구성 설정 제공 여부 + +## 01. 로봇 시스템에서 네트워크 및 보안 구성을 설정하거나 수정할 수 있는 기능이 제공되는지 확인한다. + +•  네트워크 구성(IP, 서브넷, 게이트웨이, DNS, 통신 포트 등)과 보안 구성(인증 정책, 접근제어, 암호화 설정, 방화벽 규칙 +등)을 변경할 수 있는 사용자 인터페이스를 제공해야 한다. +•  설정 인터페이스는 관리자만 접근이 가능해야 한다. +L3 +L3-1. 현재 보안 설정에 대한 보고서 생성 + +## 01. 로봇 시스템이 현재 적용된 보안 설정 정보를 보고서 형태로 생성할 수 있는 기능을 제공하는지 확인한다. + +•  생성된 보고서는 주요 보안 설정 항목과 생성 시점, 생성자 정보 등을 포함해야 한다. +•  보고서는 프로그램이 읽을 수 있는 구조화된 형식이어야 한다. + +#### 3.9.7 [RA-07] 보안 구성 설정 관리 + + + +--- + +01 +02 +03 +149 +보안 +요구사항 +(L1) 불필요한 기능, 포트 및 서비스 제한 - 불필요한 기능, 포트, 프로토콜 및 서비스의 사용을 비활성화하거나 +제한하는 기능을 제공해야 한다. +목적 +불필요한 기능, 포트, 프로토콜 및 서비스의 사용을 비활성화하거나 제한하여 공격표면 확대를 방지한다. +점검 기준 +L1. 불필요한 기능, 포트 및 서비스 제한 여부 +L1-1. 불필요하게 노출된 서비스 존재 여부 +L1-2. 불필요한 서비스 비활성화 기능 제공 여부 +구현 및 점검 방안 +L1 +L1-1. 컴포넌트 복구 기능 제공 여부 + +## 01. 로봇 시스템 또는 관리 네트워크에서 외부에 불필요하게 노출된 서비스가 존재하는지 확인한다. + +•  포트 스캐닝이나 서비스 목록을 확인하여 사용되지 않거나 관리 목적과 무관한 포트, 프로토콜, 서비스가 활성화되어 있는지 +점검한다. +•  시스템 기본 설치 시 포함된 테스트용, 디버깅용, 예비 서비스 등이 운영 환경에 그대로 남아 있지 않은지 확인한다. +•  외부에서 접근 가능한 서비스가 최소화되어 있으며, 운영 목적상 필요한 서비스만 허용되어 있는지 검증한다. +[방안 1] 외부 노출 서비스 점검 및 차단 +불필요하게 외부로 노출된 서비스를 식별하고, 접근제어 정책으로 차단한다. +[방안 2] 내부 서비스 상태 점검 및 관리 +시스템 내부에서 현재 활성화된 서비스 목록을 주기적으로 확인하고, 필요하지 않은 서비스를 비활성화한다. + +#### 3.9.8 [RA-08] 불필요한 기능, 포트 및 서비스 제한 + +Bash (예: nmap을 이용한 포트 점검 및 차단) +# 외부 포트 스캔 (TCP 포트 확인) +$ nmap -sS 192.168.0.10 +# 불필요한 포트(예: 21, 23, 69 등) 차단 +$ sudo iptables -A INPUT -p tcp --dport 21 -j DROP +$ sudo iptables -A INPUT -p tcp --dport 23 -j DROP +$ sudo iptables -A INPUT -p udp --dport 69 -j DROP +Bash (예: 서비스 상태 확인 및 관리) +현재 활성화된 포트 및 프로세스 확인 +$ sudo ss -tulnp +$ sudo netstat -tulnp +# 서비스 상태 확인 및 비활성화 +$ sudo systemctl status telnet +$ sudo systemctl disable telnet +$ sudo systemctl stop telnet +서비스 목록 확인 예시 + + +![이미지 149-0](images/p0149_img0.png) + + +--- + +150 +L1-2. 불필요한 서비스 비활성화 기능 제공 여부 + +## 01. 로봇 시스템에서 사용하지 않는 서비스나 포트를 관리자가 직접 비활성화할 수 있는 기능이 제공되는지 + +확인한다. +•  관리자 권한으로 불필요한 서비스의 활성화/비활성화를 수행할 수 있어야 한다. +•  서비스 상태는 UI 또는 로그를 통해 확인 가능해야 하며, 변경 내역은 감사 로그로 기록되어야 한다. +서비스 관리 제공 페이지 예시 + + +![이미지 150-0](images/p0150_img0.png) + + +--- + +01 +02 +03 +151 +번호 +체크리스트 항목 +CR-01 +중요 설정 데이터 정기적 백업 및 관리 +CR-02 +백업 데이터 무결성 및 복구 검증 절차 +CR-03 +사이버 침해사고 대비 복구 절차 문서화 및 테스트 +CR-04 +복구 목표 시간(RTO) 및 복구 목표 시점(RPO) 정의 +CR-05 +보안 업데이트 및 패치의 적시 제공과 적용 +CR-06 +업데이트 적용 실패 시 롤백 또는 복구 기능 확보 +CR-07 +보안 업데이트 지원 정책 및 수명주기 명시 +CR-08 +보안 취약점 보고·처리 공식 절차 마련 +CR-09 +충분한 로그 확보 및 보안 이벤트 분석 지원 +CR-10 +보안 사고/취약점 기반 보안 대책 개선 절차 +CR-11 +서비스 연속성 및 필수 기능 유지 +CR-12 +비정상 상태에서의 안전 정지/모드 전환 구현 +CR-13 +사용자 정보 등의 인증 데이터 보호 +로봇의 침해 후 기능 유지 및 신속 복구를 수행하기 위한 사이버 복원력(Cyber Resilience, CR) 체크리스트 항목은 +다음과 같다. + +### 3.10 사이버 복원력 보안 요구사항 + +사이버 복원력 체크리스트 항목 + + +--- + +152 +보안 +요구사항 +로봇 시스템의 중요한 설정과 데이터는 주기적으로 백업하고 관리해야 한다. +목적 +로봇 시스템의 중요한 설정과 데이터는 주기적으로 백업하고 관리해 소실시의 복원력을 갖춘다. +점검 기준 +중요 설정/데이터 정기적 백업 및 관리 + +## 1. 주요 설정 및 데이터를 백업하는 기능의 제공 여부 + + +## 2. 백업 접근통제 적용 여부 + +구현 및 점검 방안 +1 + +## 01. 주요 설정 및 데이터를 백업하는 기능의 제공 여부를 확인한다. + +•  주요 설정, 파라미터, 동작 상태, 사용자 정의 값 등 중요 데이터에 대해 백업 기능을 제공하는지 확인한다. +•  제공되는 백업 형태(자동 백업, 수동 백업, 네트워크 백업 등)를 식별하고, 주기적인 백업 시점 및 복구 절차가 존재하는지 +확인한다. +•  백업 데이터의 저장 위치(내부 저장소, 외부 서버, 클라우드 등)를 명시하는지 확인한다. +•  백업 데이터에 대한 무결성 검증 기능이 포함되는지 확인한다. +[방안 1] 백업 및 관리기능 제공방안 +로봇 관리용 서비스에 백업 및 복원 기능을 추가하여 주요 설정값, 파라미터, 사용자 정의 데이터를 안전하게 보존할 수 있도록 +수행한다. 아래와 같은 백업 및 복원 수행방안을 참고하여 기능을 제공할 수 있다. +항목 +기능 +관리자 권한 검증 +•  백업 실행 시 관리자(root) 권한 검증 절차를 필수화 +•  백업 요청·진행·완료 이력의 로그 기록 +최소권한 저장소 보호 +•  백업 데이터 저장소에 최소 권한 원칙 적용 +•  디렉토리 권한·파일 ACL을 통해 접근 권한을 세분화하여 제한 +백업 파일 암호화 저장 +•  백업 파일은 AES 등 표준 암호 알고리즘으로 암호화 저장 +•  해시 기반 무결성 검증을 수행하여 변조 여부 탐지·차단 +외부 백업 연동 시 추가 +인증 +•  네트워크 백업 또는 외부 저장소 연동 시, 2차 인증 또는 API 키·토큰 검증 +•  외부 경로를 통한 비인가 접근 방지 +백업 및 복원 수행방안 +설정 및 데이터 백업 예시 + +#### 3.10.1 [CR-01] 중요 설정/데이터 정기적 백업 및 관리 + + + +![이미지 152-0](images/p0152_img0.png) + + +--- + +01 +02 +03 +153 +2 + +## 01. 백업 접근통제를 수행하는지 확인한다. + +•  백업 절차 수행 시 추가 인증(2차 인증, 관리자 승인 등)이 요구되는지 확인하여 비인가 접근을 방지하는 구조인지 점검한다. +[방안 1] 비인가 접근 방지방안 +백업 수행 기능은 중요 자산에 직접 접근하는 행위이므로, 백업 실행·복구·삭제 등 모든 민감 작업은 아래와 같은 비인가 접근 +방지방안에 기반하여 권한 상승 승인을 요구해야 한다. +•  관리자/2차 인증 기반 작업허용 +•  최소 권한 및 역할 기반 접근 통제 +백업 접근통제_사용자 예시 +백업 접근통제_관리자 예시 + + +![이미지 153-0](images/p0153_img0.png) + + +![이미지 153-1](images/p0153_img1.png) + + +--- + +154 +보안 +요구사항 +로봇 운영의 복구 절차가 문서화되어 있어야 하며, 해당 절차의 실효성을 확보하기 위해 점검 및 검증을 이행해야 +한다. +목적 +로봇 운영의 복구 절차의 문서화와 이에 대한 점검 및 검증을 이행하여 복구절차의 실효성을 확보한다. +점검 기준 +백업 데이터 무결성 검증 + +## 1. 백업 데이터 복구 시 무결성 검증 여부 + + +## 2. 무결성 검증 실패시 별도의 감사 로그 생성 여부 + +구현 및 점검 방안 +1 + +## 01. 백업 데이터 복구 시 무결성 검증 여부를 확인한다. + +•  로봇의 관리 인터페이스, 시스템 설정, 또는 백업 관리 모듈 중 복구 기능을 제공하는 서비스가 존재하는지 확인한다. +•  복구 가능한 데이터의 유형을 식별하고, 복구가 내부 로컬 저장소, 외부 서버 또는 클라우드 백업에서 수행되는지 확인한다. +•  백업 데이터 복구 시 백업 시 생성된 해시, 무결성 체크파일 값을 복구 시점에 비교하는 등의 무결성 검증 메커니즘이 +존재하는지 확인한다. +[방안 1] 무결성 검증 메커니즘 도입 +백업 데이터의 무결성을 보호하고 복구 시 손상이나 변조가 발생할 경우 이를 방지하는 메커니즘을 수행한다. +2 + +## 01. 무결성 실패 시 별도의 감사로그를 생성하는지 확인한다. + +•  데이터가 복구되는 동안, 승인되지 않은 조작·수정·전송 오류 등이 탐지될 경우 감사 로그 또는 경보가 발생하는지 확인한다. +•  무결성 검증 실패 시 해당 복구가 중단되고 원래 상태로 돌아가는지 확인한다. +•  무결성 검증 기능이 내장되어 있지 않은 경우라도 관리자가 주기적으로 복구 절차를 테스트하고 결과를 기록하는 절차가 +있는지 확인한다. +[방안 1] 무결성 실패 시의 방안 +데이터가 복구될 경우, 무결성 실패가 감지된다면 아래 탐지 및 감사로그 복구방안에 기반하여 감사로그를 발생하고 이전 +상태로 복구되어야 한다. +무결성 검증 메커니즘 수행방안 +항목 +내용 +무결성 해시 생성 및 비교 +•  백업 시점에서 파일별 해시(SHA-256 등)를 자동 생성 +•  복구 시 동일 알고리즘으로 비교 수행 +서명 기반 검증 +•  중요 데이터의 경우 .sig, .asc 등 서명 기반 검증을 수행하여 위변조 여부 식별 +검증 실패 처리 +•  검증 실패 시 자동으로 로그 생성 및 관리자 알림 발생 +비인가 조작 보호 +•  승인되지 않은 조작·수정으로부터 복구 데이터·명령·설정·프로그램 보호 +•  손상 발생 시 알림수행 + +#### 3.10.2 [CR-02] 백업 데이터 무결성 및 복구 검증 절차 운영 + +탐지 및 감사로그 복구방안 +항목 +복구방안 +감사로그 생성 +•  데이터 복구 과정에서 승인되지 않은 조작·수정·전송 오류 등 무결성 실패 감지 +•  감지 시 즉시 감사로그 생성 및 관리자 경보 발생 +복구 프로세스 모니터링 +•  복구 과정에서 발생한 오류·변조·권한 상승 시도의 모니터링 및 감사기록 보존 +복구 중단 및 이전 정상 +상태 복원 +•  무결성 검증 실패 시, 복구 절차는 즉시 중단되고 시스템·데이터는 복구 전의 정상 상태 +로 자동 롤백 + + +--- + +01 +02 +03 +155 +백업/복구 수행오류 경보 예시 +복구 정기점검 절차문서 예시 + + +![이미지 155-0](images/p0155_img0.png) + + +![이미지 155-1](images/p0155_img1.png) + + +--- + +156 +보안 +요구사항 +사이버 침해사고 발생 시를 대비하여 로봇 운영 복구 절차를 문서화하고, 정기적으로 모의 테스트를 실시해야 한다. +목적 +로봇 운영 복구 절차의 문서화를 수행하여 이에 대해 정기적인 모의 테스트를 실시하여 사이버 침해사고를 +대비한다. +점검 기준 +사이버 침해사고 대비 복구 절차 문서화 및 테스트 + +## 1. 사이버 침해사고에 대비한 복구 절차의 존재 여부 + +구현 및 점검 방안 +1 + +## 01. 사이버 침해사고 대비 복구 절차가 존재하는지 확인한다. + +•  로봇이 침해사고에 대비한 복구 절차를 보유하고 있는지 확인한다. +•  침해사고 발생 시 식별–격리–복원–검증으로 구성된 복구 시나리오가 최신 절차서로 문서화되어 있으며, 책임자와 역할 +구분이 명확히 정의되어 있어야 한다. +•  복구에 사용되는 백업·재설정·로그 분석 등 주요 도구가 절차서에 포함되어 있고, 해당 절차는 정기적인 모의테스트를 통해 +검증되어야 한다. +•  복구 절차는 표준화된 프로세스에 따라 주기적으로 실행되며 수행 근거자료가 확인 가능하도록 기록·관리되어야 한다. +[방안 1] 침해사고 복구 절차 수행방안 +침해사고 복구 절차는 공식 문서로 정립하고, 시나리오별 복구 흐름과 역할을 명확히 하며 단계별 체크리스트와 필요한 +도구까지 포함해 누락 없이 수행되도록 관리한다. +정기적인 대응 시뮬레이션과 백업 무결성 검증을 통해 절차의 효과성을 점검하고, 그 결과에 따라 복구 절차와 보안정책을 +지속적으로 개선한다. +복구 절차를 가상으로 수행할 경우, 아래와 같은 필수 시뮬레이션 확인사항에 기반하여 수행한다. +•  환경에서 복구 절차, 제어 알고리즘, 인터페이스 복원, 전력 안정성 등을 재현하고 검증 +•  실제 운영환경과 호환되며(센서/엑추에이터 인터페이스, 제어 알고리즘 등) 검증 목적과 한계를 명시 +•  수행 결과에 따라 복구 절차를 개선하는 피드백 루프가 존재하는지 확인 +무결성 검증 메커니즘 수행방안 +항목 +내용 +침해사고 복구절차 +•  식별→격리→복원→검증 단계로 절차 수행 +•  역할·책임(R&R)을 명확히 정의 +복구 절차 문서화 +•  침해사고 복구 절차를 공식 문서화 +•  주요 시나리오별 복구 흐름과 역할 책임 명시 +복구 단계별 체크리스트 +•  복구 단계별 체크리스트(복원, 검증, 로그 분석, 알림, 보고 등)를 작성 +정기적인 모의훈련 +•  정기적인 침해사고 대응 시뮬레이션 수행 +•  정기적인 백업 무결성 검증 수행 +절차 개선 및 보안정책 +•  모의훈련 결과·운영 과정에서 발견된 문제점 개선 +•  관련 보안정책을 주기적으로 개선·갱신 + +#### 3.10.3 [CR-03] 사이버 침해사고 대비 복구 절차 문서화 및 테스트 + + + +--- + +01 +02 +03 +157 +침해사고 복구 절차문서 예시 +책임자 역할 및 구분문서 예시 + + +![이미지 157-0](images/p0157_img0.png) + + +![이미지 157-1](images/p0157_img1.png) + + +--- + +158 +보안 +요구사항 +로봇 시스템 장애 발생 시 복구 목표 시간(RTO)과 복구 목표 시점(RPO)을 명확히 정의하여, 신속한 복구가 +가능하도록 관리해야 한다. +목적 +복구 목표 시간(RTO)과 복구 목표 시점(RPO)을 문서화하여 로봇 시스템에 문제가 발생할 경우 목표 시간과 시점 내 +복구하여 가용성과 데이터를 보호한다. +점검 기준 +복구 목표 시간(RTO) 및 복구 목표 시점(RPO) 정의 +1. RTO, RPO 값의 정의 및 문서화 명시 여부 +구현 및 점검 방안 +1 + +## 01. 복구 목표 시간(RTO), 복구 목표 시점(RPO)에 대한 정의와 문서화가 존재하는지 확인한다. + +•  로봇 시스템은 장애·침해사고·데이터 손상 상황을 대비해 RTO·RPO 등 명확한 복구 목표가 문서화되어 있으며, 복구 +목표를 명시한 문서는 승인 절차를 통해 최신 상태로 유지되어야 한다. +•  복구 절차는 연결된 장치나 네트워크의 전체 가용성에 영향을 주지 않도록 설계되어야 한다. +•  정기적인 복구 테스트를 통해 RTO/RPO 달성 여부를 검증하고 필요한 개선을 수행해야 한다. +[방안 1] 복구 절차 수행방안 +사이버 침해사고에 대비하여 아래와 같은 복구 절차 및 유지관리 수행방안에 기반하여 목표와 절차를 지속적으로 개선한다. +복구목표 +복구 절차 및 유지관리 수행방안 +항목 +내용 +자산별 RTO·RPO 기준 +수립 +•  장애·침해사고·데이터 손상에 대비해 RTO·RPO를 문서화하며, 문서는 승인 절 +차를 통해 최신 상태로 유지 +•  자산별·라인별 RTO·RPO 표를 작성하여 중요도 기반 회복 목표를 정의하고 주 +기적으로 검토 +RTO 달성 아키텍처 설계 +•  이중화, 페일오버 등 복구 구조를 명시하여 RTO 목표를 달성할 수 있도록 설계 +단계적 복원 전략 수립 +•  복구 절차는 네트워크·연결 장치 전체 가용성에 영향을 주지 않도록 단계적 복원 +전략(순차 복원·부분 복원)을 정의 +테스트 기반 검증 및 개선 +•  정기적인 복구 테스트를 통해 RTO·RPO 목표 달성 여부를 측정하고, 결과를 기 +반으로 재정의·개선 +복구 목표 +내용 +RTO (복구 목표시간) +서비스 중단 후 정상 가동까지의 최대 허용 시간 +RPO (복구 목표시점) +복구 시점 기준으로 허용 가능한 데이터 손실 범위 + +#### 3.10.4 [CR-04] 복구 목표 시간(RTO) 및 복구 목표 시점(RPO) 정의 + +RTO, RPO 목표정의 문서 예시 + + +![이미지 158-0](images/p0158_img0.png) + + +--- + +01 +02 +03 +159 +보안 +요구사항 +로봇 소프트웨어와 펌웨어에 대한 보안 업데이트 및 패치는 신속하게 적용될 수 있게끔 제공되어야 한다. +목적 +로봇 소프트웨어와 펌웨어에 대한 보안 업데이트 및 패치 절차를 제공하여 문제 발생시 신속한 해결이 가능하게끔 +적용시킨다. +점검 기준 +취약점 발생 최소화 + +## 1. 업데이트 가능 구조의 해당 여부 + + +## 2. 취약점 발견 시 사용자 또는 시스템에 알리기 위한 적절한 경로의 존재 여부 + + +## 3. 내부 보안 패치 프로세스 존재 여부 + + +## 4. 취약점 대응 이력을 관리하는 프로세스 존재 여부 + +구현 및 점검 방안 +1 + +## 01. 로봇이 업데이트가 가능한 구조에 해당하는지 확인한다. + +•  로봇 및 연결 기기가 펌웨어·소프트웨어 업데이트를 수신·적용할 수 있는 구조인지 확인한다. +[방안 1] 펌웨어·소프트웨어 업데이트 수행방안 +로봇 및 연결 기기가 안전하게 업데이트를 수신·적용할 수 있도록, 업데이트 경로와 적용 절차를 표준화하고 신뢰할 수 있는 +채널을 통해 배포되도록 설계한다. 업데이트 패키지는 무결성·서명 검증을 통과한 경우에만 설치되도록 구성하여 비인가된 +코드나 변조된 소프트웨어가 적용되지 않도록 보호한다. +업데이트 수신·적용 예시 +업데이트 수신·적용 예시 + +#### 3.10.5 [CR-05] 보안 업데이트 및 패치의 적시 제공과 적용 + + + +![이미지 159-0](images/p0159_img0.png) + + +![이미지 159-1](images/p0159_img1.png) + + +--- + +160 +2 + +## 01. 취약점이 발견될 경우 사용자 또는 시스템에 알리기 위한 적절한 경로의 존재 여부를 확인한다. + +•  취약점이 식별될 경우 제조사가 사용자·운영자에게 신속히 통지할 수 있는 공식 채널이 운영되는지 확인한다. +[방안 1] 취약점 알림 채널/경로 +취약점 식별 시 취약점 보고/처리 절차에 기반해 사용자·운영자에게 통지하기 위한 채널/경로를 아래의 예시를 참고하여 +구축 및 운영한다. +취약점 알림 채널/경로 +취약점 이메일 알림 예시 +단계 +필수 취약점 보고/처리 절차 내용 +접수 +•  취약점 발견/접수 상태 +평가 +•  심각도 평가를 통해 접수된 취약점의 상태를 Critical·High·Medium로 분류, 처리 우선 +순위 설정 +•  대응 SLA 지정을 통해 취약점 심각도별 응답/임시완화/정식패치 배포 시간 설정 +패치 +•  티켓과 담당자 할당에 따른 보안 패치 수행 +배포 +•  내부 통보·외부 공지 절차에 따른 대응 +•  공개 일정의 조율 +•  신고자에게 접수 확인·진행상황 통보·종결 통보 +모니터링·사후검토 +•  상태에 대한 모니터링, 사후검토 수행 +취약점 알림 채널/경로 예시 +•  PSIRT 연락처 +•  취약점 접수 포털/이메일 +•  제품 내 관리자 알림 +•  보안 공지 페이지 + + +![이미지 160-0](images/p0160_img0.png) + + +--- + +01 +02 +03 +161 +3 + +## 01. 내부 보안 패치 프로세스(재현, 분석, 수정, 테스트, 배포)의 존재 여부를 확인한다. + +•  초기 배포 시 악용가능한 취약점이 알려지지 않은 상태로 출시하여야 한다. +•  취약점 접수 후 아래와 같은 단계 하에 지체 없이 수행되는 표준화 프로세스가 존재하고 문서화되어 있는지 +검증하며, 각 단계의 책임·산출물이 정의되어 있어야 하며, 테스트·검토는 정기적으로 수행되어야 한다. +•  배포 시 패키지 서명·무결성 검증 및 안전 배포 메커니즘이 적용되어야 한다. +[방안 1] 내부 보안패치 프로세스 방안 +취약점 접수 이후 재현·분석·수정·테스트·배포의 표준화된 패치 프로세스를 운영하며, 패키지 서명과 무결성 +검증을 통해 안전하게 배포되도록 관리한다. +취약점 알림 채널 예시 +내부 보안 패치 프로세스 운영방안 +항목 +내용 +패치 프로세스 +•  취약점 접수 후 재현→분석→수정→테스트→배포까지 이어지는 표준화된 보 +안 패치 프로세스 문서화 +•  책임·산출물·승인 절차의 보안 패치 프로세스 문서화 +•  초기 출시 전 사전 보안 검증 수행 +•  패치 제공 시 배포노트(CVE 영향, 재시작 여부) 제공 +출시 전 보안 취약점 관리 +프로세스 +•  빌드마다 SBOM을 자동으로 생성 +•  SCA(구성요소 CVE) + SAST 자동 실행 및 결과 사용 +•  Critical/High CVE = 0일 때만 배포 통과, Low나 Medium의 경우 수용에 따 +라 한시허용 +보안 및 무결성 보호 +•  패치 SLA를 위험도 기반으로 수립 +•  모든 패치 패키지에 코드 서명·해시 검증 강제 +•  패키지 전송 및 설치 과정에서 안전한 배포 메커니즘(TLS, 무결성 검증, 실패 +시 롤백)을 적용 +사용자 보호 및 투명성 +•  보안 업데이트 무상 정책을 문서·사용자 가이드에 명확히 명시 +•  설치 전 사전 알림 제공 +안전 배포 메커니즘 제공 +•  암호화 전송, 단계적 롤아웃, 자동업데이트 옵션 제공 + + +![이미지 161-0](images/p0161_img0.png) + + +--- + +162 +내부 보안 패치 프로세스를 수행할 시에 각 단계에서 산출되는 산출물은 아래와 같다. +4 + +## 01. 취약점 대응 이력을 관리하는 프로세스의 존재 여부를 확인한다. + +•  발생한 취약점에 대해 대응 이력을 관리하는 프로세스의 존재 여부를 검증한다. +•  취약점 접수부터 종결까지 이력을 체계적으로 관리하는 프로세스가 존재하는지 확인한다. +•  대응 이력 관리의 경우 우선순위·심각도·담당자·SLA·조치내역(패치 버전·배포일 등) 등이 기록되어야 하며, 알림 이력과 +연계되어야 한다. +•  패치는 무료로 배포되고 사용자에게 권고 메시지를 제공하는 절차와의 연계를 수행해야 한다. +[방안 1] 취약점 대응이력 관리 프로세스 방안 +취약점 접수부터 종결까지의 이력을 체계적으로 기록·관리하고, 사용자 알림 및 무료 패치 배포 절차와 연계되는 프로세스를 +아래의 대응 이력 관리 프로세스에 기반하여 운영한다 +보안 패치 프로세스 산출물 +대응이력 관리 프로세스 +필수 산출물 +내용 +원인분석 보고서 +원인분석 및 재현 +패치 산출물 +패치 +검증결과 보고서 +테스트 (회귀·보안·부작용 검증) +배포 산출물 +배포 (서명·해시 적용, 암호화 전송 및 단계적 롤아웃 수행) +상태 +내용 +발견/접수 +취약점을 보고받거나 발견한 상태, 티켓과 담당자 할당 +진행중 +담당 수행자에 의한 취약점 대응 수행 +패치검수 +취약점을 개선한 패치의 동작 검증 +배포/종결 +검증이 완료될 경우, 패치 전달 및 종결 + + +--- + +01 +02 +03 +163 +보안 +요구사항 +로봇 시스템의 보안 업데이트 적용에 실패할 경우, 이전 안정화 버전으로의 롤백이나 복구가 가능해야 한다. +목적 +로봇 시스템의 보안 업데이트 적용에 실패할 경우, 이전 안정화 버전으로의 롤백이나 복구를 통해 시스템 가용성과 +안정성을 확보한다. +점검 기준 +업데이트 실패 시 롤백 또는 복구 기능 확보 + +## 1. 패치 실패 시 안정화 버전 롤백 가능 여부 + +구현 및 점검 방안 +1 + +## 01. 업데이트 실패 시 안정화 버전 롤백/복구 기능의 존재 여부를 확인한다. + +•  로봇에 대해 아래와 같은 경우로 나뉘는 보안 업데이트를 지원하는지 확인한다. +보안 업데이트 자동 적용을 지원하는 경우 (*업데이트 알림 및 일시 연기 옵션 제공) +자동 설치·롤백·복구 동작과 사용자 선택을 제공하는 경우 +•  업데이트 실패 발생 시 시스템이 자동 또는 수동으로 이전 안정화 버전으로 롤백·복구할 수 있는 기술적 메커니즘이 +존재하는지 확인한다. +•  롤백 시 무결성·서명 검증을 통해 악성/변조된 이미지로 되돌아가지 않도록 보호해야 한다. +[방안 1] 업데이트 실패 대응 및 안정화 버전 롤백방안 +로봇 시스템은 보안 업데이트 적용 과정에서 실패가 발생하더라도 서비스 중단을 최소화할 수 있도록 자동·수동 롤백 및 복구 +기능을 제공해야 한다. + +#### 3.10.6 [CR-06] 업데이트 적용 실패 시 롤백 또는 복구 기능 확보 + +업데이트 롤백 안정성 확보 방안 +자동 보안 업데이트 예시 +항목 +내용 +롤백 메커니즘 적용 +•  A/B 파티션 +•  컨테이너 버전 관리 +백업·복구 절차 수행 +•  업데이트 전 사전 백업 수행 +•  필요 시 즉시 복구할 수 있도록 절차 구비 +안정화 버전 별도 관리 +•  이전 정상 버전을 별도로 보존·관리하여 롤백 시 신뢰 가능한 상태로 복원 +정기 복구 테스트 +•  정기적인 롤백/복구 테스트 수행을 통한 실제 동작 가능성을 검증 + + +![이미지 163-0](images/p0163_img0.png) + + +--- + +164 +사용자 선택을 통한 보안 업데이트 예시 + + +![이미지 164-0](images/p0164_img0.png) + + +--- + +01 +02 +03 +165 +보안 +요구사항 +로봇 지원 수명 기간 동안 보안 업데이트 제공 정책을 명확히 수립하고 운영해야 한다. +목적 +로봇 지원 수명 기간 동안 적용되는 보안 업데이트 제공 정책을 운영하여 로봇 운영자/사용자에게 지속적인 패치를 +제공한다. +점검 기준 +보안 업데이트 지원 정책 및 수명주기 명시 + +## 1. 제품 또는 소프트웨어의 보안 업데이트 지원 종료일 명시 여부 + + +## 2. 지원 종료 전까지 취약점에 대한 보안 업데이트 제공 보장 여부 + + +## 3. 보안 업데이트가 있을 경우 사용자 또는 시스템에 알리기 위한 경로 존재 여부 + +구현 및 점검 방안 +1 + +## 01. 제품 또는 소프트웨어의 보안 업데이트 지원 종료일을 명시하는지 확인한다. + +•  상위 구성요소와 하위 라이브러리 수준의 구성요소를 파악하고 CVE, EoL(End Of Life), EoS(End Of Service)에 +도달하는지를 확인하는 정책이 존재하는지 확인한다. +•  보안 업데이트의 지원 기간과 일반 업데이트 지원 기간의 정책 구분여부를 확인한다. +[방안 1] 보안 업데이트 지원 정책 +제품 및 소프트웨어의 구성요소에 대한 EoL/EoS 도달 여부를 주기적으로 점검하고, 보안 업데이트 지원 종료일을 명확히 +문서화하여 사용자에게 제공한다. 정책 문서화 시에는 아래와 같은 필수요소를 포함하여야 한다. +•  구성요소 설명 +•  악용 가능한 취약점이 알려진 상태로 제품이 출하되지 않도록 차단하는 통제방안 +•  CVE·EoL·EoS에 도달하는 구성요소 정보 +•  CVE·EoL·EoS에 도달하는 구성요소에 대한 대응원칙 +•  보안 업데이트 제공시 사용자에게 제공하는 공개정보 +취약점 설명 +해당 제품을 식별할 수 있는 정보 +취약점의 영향 및 심각성 +사용자가 취약점을 해결하는 데 도움이 되는 명확하고 접근 가능한 정보 +*다만 제조업체가 공개로 인한 보안상 위험이 공개 이익보다 크다고 판단할 경우, 사용자에게 패치 적용 기회가 제공된 이 +후 공개지연 +•  제품 수명주기(EoL) 관리 정책 +•  보안 업데이트의 지원 기간 정책 +•  일반 업데이트 지원 기간 정책 + +#### 3.10.7 [CR-07] 보안 업데이트 지원 정책 및 수명주기 명시 + +보안 업데이트 지원 정책문서 예시 + + +![이미지 165-0](images/p0165_img0.png) + + +--- + +166 +2 + +## 01. 지원 종료 전까지 취약점에 대한 보안 업데이트 제공을 보장하는지 확인한다. + +•  로봇의 운영자/사용자에게 하위 정보를 포함한 보안 업데이트 사용자 제공 문서를 제공하는지 확인한다. +[방안 1] 보안 업데이트 사용자 제공 문서 +지원 종료일까지 발견된 취약점에 대해 신속한 보안 업데이트 제공을 보장하며, 로봇 운영자·사용자가 이해할 수 있도록 +아래와 같은 요소를 포함한 보안 업데이트 문서를 제공한다. +사용자 제공 문서에 포함되어야 할 요소는 다음과 같다. +•  제품 식별 정보(모델·버전·모듈 목록) +•  제품 또는 소프트웨어의 보안 업데이트 지원 종료일 +•  제품 지원 종료일 정보 +•  보안 업데이트가 제공되는 기간 동안 사용자에게 어떤 경로로 알림이 제공되는지의 정보 +•  사용자가 취해야 할 조치 +3 + +## 01. 보안 업데이트가 있을 경우 사용자 또는 시스템에 알리기 위한 경로 존재 여부를 확인한다. + +•  로봇의 운영자/사용자에게 하위 정보를 포함한 보안 업데이트 사용자 제공 문서를 제공하는지 확인한다. +[방안 1] 공지 체계 구축방안 +보안 업데이트 발생 시 사용자 또는 시스템에 즉시 통지할 수 있도록 관리자 알림, 제품 내 메시지, 이메일, PSIRT 공지 등 +공식 경로를 운영하며 알림에는 하위 구성요소 정보와 패치 상세 내용을 포함한다. +위와 같은 공지체계 수단의 예시로는 이메일, 웹 사이트, 채널을 들 수 있다. +보안 업데이트 사용자 제공문서 예시 + + +![이미지 166-0](images/p0166_img0.png) + + +--- + +01 +02 +03 +167 +보안 +요구사항 +외부로부터 보안 취약점 보고를 접수하고 신속하게 처리할 수 있는 공식 절차가 존재해야 한다. +목적 +보안 취약점 보고가 접수될 경우 신속히 처리할 수 있는 공식 절차를 규정하여 취약점 악용 및 공격에 이용되지 +않도록 한다. +점검 기준 +보안 취약점 보고·처리 공식 절차 마련 + +## 1. 외부 또는 내부의 취약점 신고 채널 존재 여부 + + +## 2. 신고 접수 후 내부 처리 절차 존재 여부 + +구현 및 점검 방안 +1 + +## 01. 외부 또는 내부의 취약점 신고 채널이 존재하는지 확인한다. + +보안 취약점 보고 및 처리 절차가 존재하는지 확인한다. +•  로봇에 대해 취약점이 발견될 경우의 보고 및 처리 절차가 문서화되어 있는지 확인한다 +•  취약점 접수 시 발생한 대응에 대해서는 상위 대응이력 관리 프로세스에 의거하여 진행한다. +[방안 1] 취약점 신고 채널 및 보고 절차 운영방안 +보안 취약점 신고를 위해 공식 신고 채널을 운영하고, 취약점 보고 및 처리 절차를 문서화하여 일관된 절차에 따라 신고할 수 +있도록 한다. 상세한 수행 방법은 “3.10.5 [CR-05] 보안 업데이트 및 패치의 적시 제공과 적용”에서 제시하는 취약점 신고 +채널 및 보고 절차 방안을 참고한다. +취약점 심각도별 대응시간 목표를 설정하고, 접수 확인부터 패치 배포까지의 단계별 처리 절차 문서화 및 진행 상황 추적 +체계를 구축한다. 상세한 수행 방법은 “3.10.5 [CR-05] 보안 업데이트 및 패치의 적시 제공과 적용”에서 제시하는 취약점 +신고 채널 및 보고 절차 방안을 참고한다. +2 + +## 01. 신고 접수 후 내부 처리 절차 존재 여부를 확인한다. + +•  보안 취약점 제보를 위한 공식 신고 창구나 채널이 존재하는지 검증한다. +•  해당 신고창구와 채널이 상시 운영되는지 확인한다. +[방안 1] 취약점 처리 프로세스 표준화 및 SLA 수립 +취약점 심각도별 대응 시간 목표를 설정하고, 접수 확인부터 패치 배포까지의 단계별 처리 절차 문서화 및 진행 상황 추적 +체계를 구축한다. 상세한 수행 방법은 “2.3. 인터페이스 식별”에서 [CR-05] 보안 업데이트 및 패치의 적시 제공과 적용에서 +제시하는 취약점 신고 채널 및 보고 절차 방안을 참고한다. + +#### 3.10.8 [CR-08] 보안 취약점 보고·처리 공식 절차 마련 + +취약점 공식 채널 예시 + + +![이미지 167-0](images/p0167_img0.png) + + +--- + +168 +취약점 보고 양식 예시 + + +![이미지 168-0](images/p0168_img0.png) + + +--- + +01 +02 +03 +169 +보안 +요구사항 +로봇 시스템에서 보안 이벤트 발생 시, 원인 분석과 복구를 지원할 수 있도록 충분한 로그를 확보하고 관리하는 +기능을 제공해야 한다. +목적 +로봇 시스템에서 보안 이벤트 발생 시, 로그 확보 및 관리 기능을 제공하여 보안 이벤트에 대한 추적과 대책설정을 +지원한다. +점검 기준 +충분한 로그 확보 및 이벤트 분석 지원 + +## 1. 데이터, 서비스 또는 기능에 대한 액세스 또는 수정을 포함한 관련 내부 활동 기록 여부 + + +## 2. 이벤트 로그의 충분한 기간 이상 저장 여부 + +구현 및 점검 방안 +1 + +## 01. 데이터, 서비스 또는 기능에 대한 액세스 또는 수정을 포함한 관련 내부 활동을 기록하는지 확인한다. + +•  인터페이스에 대해 제공되는 모든 서비스 중, 데이터 접근·변경·제어 관련 이벤트가 발생할 수 있는 기능을 목록화하고 +기능별 로그 발생 여부를 확인한다. +•  로그가 단순 동작 이력뿐 아니라 보안 관련 이벤트도 포함하는 로그에 해당하는지 확인한다. +•  발생하는 이벤트 로그가 적절한 구조와 정보를 갖추고 있는지 확인한다. +[방안 1] 로그 확보 및 저장방안 +로봇 시스템에 기본적인 활동 로그 생성 기능을 추가하고 보존 기간을 정책적으로 정의·적용한다. 보안 사고 대응과 추적 +가능성을 확보하기 위해 아래의 로그 운영방안을 참고해서 로그 저장소를 분리하고 장기 보관·무결성 검증 체계를 구비한다. + +#### 3.10.9 [CR-09] 충분한 로그 확보 및 보안 이벤트 분석 지원 + +로그 운영방안 +항목 +내용 +로그 저장소 분리 +•  로그 저장소를 일반 운영 데이터 영역과 분리해 별도 저장소 / 외부 로그 서버에 보관 +순환 삭제 및 아카이브 +•  Log rotation 정책에 따라 오래된 로그를 주기적으로 백업·아카이브하여 서비스 가용성 +영향방지 +시스템 자원 보호 +•  로그 전송·저장을 비동기 구조로 처리하여 메모리·네트워크·CPU 자원점유 최소화 +기본 보안 로그 수집 +•  인증 실패, 접근 거부, 설정 변경, 비정상 명령 시도 등 핵심 활동 로그 수집 +로그 서비스 예시 + + +![이미지 169-0](images/p0169_img0.png) + + +--- + +170 +2 + +## 01. 이벤트 로그가 기간 이상 저장되고 있는가를 확인한다. + +로그가 정책적으로 정의된 최소 보존 기간 동안 안전하게 저장되는지 확인한다. +[방안 1] 로그 최소 보존 기간 준수방안 +로그는 정책적으로 정의된 최소 보존 기간 동안 안전하게 저장되도록 보존 정책을 설정해야 한다. +저장소 사용량 조회 예시 + + +![이미지 170-0](images/p0170_img0.png) + + +--- + +01 +02 +03 +171 +보안 +요구사항 +사고와 취약점 정보를 바탕으로, 보안 대책을 주기적으로 검토하고 지속적으로 개선해야 한다. +목적 +보안 사고와 취약점 정보에 대해 보안 대책을 주기적으로 검토 및 지속적으로 개선하여 향후 비슷한 사고의 +발생방지를 수행한다. +점검 기준 +보안 사고/취약점 기반 보안 대책 개선 절차 + +## 1. 보안 사고, 취약점 발생 또는 정기적인 테스트 수행 및 보안 정책 개선 여부 + +구현 및 점검 방안 +1 + +## 01. 보안 사고, 취약점 발생 또는 정기적인 테스트 수행 및 보안 정책을 개선하는지 여부를 확인한다. + +•  로봇에 대해 침해사고가 발생할 경우를 대비하기 위한 정기적인 취약점 테스트 수행 프로세스가 존재하는지 검증한다. +•  로봇에 대해 침해사고가 발생할 경우의 취약점 관리 프로세스가 존재하는지 검증한다. +[방안 1] 정기적인 취약점 점검 프로세스 방안 +정기 보안 점검 수행 프로세스를 아래의 필수방안들에 기반하여 정의 및 수행하고, 재발 방지를 위한 RCA 절차 기반으로 +대응한다. 대응이 종료되면 위험 등급 별 우선순위 정리 및 보안 조치 문서화를 수행한다. + +#### 3.10.10 [CR-10] 보안 사고/취약점 기반 보안 대책 개선 절차 + +항목 +예시 +자동화 스캔 +•  매주/격주와 같은 특정기간 내내 SCA/SAST 수행 +빌드시 검증 +•  CI/CD 파이프라인 내 자동 SAST/SCA 실행 +침투 테스트 +•  연 1회 이상 +취약점 점검 +•  연 4회 이상 SBOM 작성 *최소한 제품 최상위종속성 포함 +점검 대상 +검증방안 +하드웨어 +•  물리적 접근통제가 준수되고 있는가? +•  하드웨어 구성요소 보안이 준수되고 있는가? +소프트웨어 +•  운영체제 보안이 적절히 준수되고 있는가? +•  응용프로그램 보안이 준수되고 있는가? +•  미들웨어 및 라이브러리 보안이 준수되고 있는가? +•  개발을 수행할 경우 보안 요구사항을 설계에 반영하였으며 개발망과 외부의 네트워크 +분리를 수행하고 있는가? +네트워크 +•  네트워크 구성과 통신 프로토콜 보안을 준수하고 있는가? +•  네트워크 서비스에 대한 보안이 준수하고 있는가? +•  DoS 등의 네트워크 공격에 대한 대응책을 준수하고 있는가? +펌웨어 +•  펌웨어 무결성과 업데이트/롤백 프로세스 보안을 준수하고 있는가? +•  펌웨어 자체 보안(하드코딩, 디버그 포트 등)을 준수하고 있는가? +데이터 +•  저장 데이터에 대한 보안을 준수하고 있는가? +•  전송 데이터에 대한 보안을 준수하고 있는가? +사용자 표면 +•  사용자가 접근하는 인증 메커니즘이 적절하게 설정되어 있는가? +•  사용자 권한 관리가 적절하게 분류되어 있는가? +단계 +검증방안 +문서 검토 +•  취약점 점검 정책 및 절차서 확인 +•  점검 계획서 및 실행 기록 검토 +•  침해사고 대응 매뉴얼 확인, 발행한 취약점 점검 보고서 검토 +수행 검증 +•  정기적인 취약점 점검 수행이력 확인 +•  취약점 조치 완료현황 확인 +•  미조치 취약점에 대한 대응책(수용/전가/보완 등) 및 적용결과 확인 +개선책 설정 +•  미흡한 부분이 존재할 경우 이를 개선하기 위한 대응책 설정 +취약점 점검 프로세스 방안 + + +--- + +172 +보안 +요구사항 +로봇 시스템은 부분적 시스템 장애나 DoS 공격 상황에서도 로봇의 필수 안전 및 운영 기능이 유지될 수 있도록 +설계해야 한다. +목적 +로봇 시스템을 필수 안전 및 운영 기능이 유지될 수 있도록 설계해여 부분적 시스템 장애나 DoS 공격 상황에서 +가용성을 유지시켜 운영자/사용자의 안전을 확보한다. +점검 기준 +서비스 연속성 및 필수 기능 유지 +1. DoS와 같은 공격, 장애상황 예방 및 가용성 유지를 위한 별도 기능 적용 여부 +구현 및 점검 방안 +1 +01. DoS와 같은 공격, 장애상황 예방 및 가용성 유지를 위한 별도 기능을 적용하는지 확인한다. +•  DoS와 같은 공격, 장애상황 예방 및 가용성 유지를 위한 기능이 존재하는지 확인한다. +[방안 1] 서비스 연속성과 기능유지 방안 +DoS 공격이나 장애 상황에서도 로봇 서비스의 가용성을 유지할 수 있도록 서비스 연속성과 기능유지 방안에 기반하여 연속 +운영 기능을 적용해 서비스 중단을 예방한다. +기능유지 방안은 아래와 같은 DoS 방지 검증방안에 기반하여 검증할 수 있다. + +#### 3.10.11 [CR-11] 서비스 연속성 및 필수 기능 유지 + +항목 +내용 +자원 보호 기능 +•  임계치 제한, Rate limiting, QoS 제어 기능 적용 +서비스복구 기능 +•  장애 발생 시 자동 재시작, 프로세스 모니터링, 헬스체크 +장애 격리 기능 +•  프로세스·스레드·컨테이너 단위 격리 구조 적용 +대체 경로/백업 기능 +•  네트워크 또는 로봇 내부 기능의 장애 대비 대체 경로·백업 기능 제공 +항목 +검증방안 +동시 세션 +·연결 제한 +•  기능 존재 여부: 세션 수/동시 연결 수 제한, IP별/토큰별 연결 제한 구현 여부 확인 +•  설정값 검토: 기본값, 최대값, 알림 임계치(예: 동시 연결 80% 초과 시) 확인 +•  검증: 동시 연결 부하 시험(증분 연결 생성)으로 정상 서비스(특히 안전 제어 루프)에 영향 +없는지 확인 +QoS / 트래픽 +우선순위 +•  기능 존재 여부: 트래픽 분류(안전 vs 비안전), 우선 큐(우선순위 큐) 적용 여부 확인 +•  End to End 적용성: 로봇 내부뿐 아니라 게이트웨이/네트워크 스택에서도 QoS가 +유지되는지 확인 +•  검증: 안전 트래픽과 비안전 트래픽을 동시에 발생시켜 안전 트래픽의 지연/손실률이 +허용범위 내인지 측정 +자동 복구 +•  기능 존재 여부: 서비스 프로세스 모니터링(워치독), 프로세스 재시작, 기능별 최소 동작 +모드(예: 수동 제어 허용) 여부 확인 +•  장애 시 우회 경로: 통신 실패 시 대체 통신 채널(예: 유선→무선 우회)이 있는지 확인 +•  검증: 서비스 프로세스 강제 종료, 네트워크 차단 등 시나리오로 자동 복구 동작이 완료되는 +시간 확인 +방화벽·접근 제한 +•  기능 존재 여부: IP 허용 목록, 포트 제한, 관리 인터페이스 접근 제어(관리자 서브넷/관리 +VLAN) 제공 여부 확인 +•  관리 편의성: 허용 IP 추가/제거 절차 및 감사 로그 존재 확인 +•  검증: 허용되지 않은 IP에서 접근 시 차단되는지, 허용 IP는 정상 접속되는지 확인 +리소스 보호·격리 +•  CPU/메모리/디스크/네트워크 대역폭 쿼터 설정 여부 확인 (컨테이너/프로세스 수준) +•  로그·모니터링: 리소스 소모를 긴급 알림으로 연결(예: CPU > 90% 알람) +•  검증: 자원 고갈 시 안전 기능(예: 제어 루프 우선 CPU 할당)이 보장되는지 검증 +서비스 연속성과 기능유지 방안 + + +--- + +01 +02 +03 +173 +외부 영향 최소화 +• 외부 요청 처리로 내부 제어 루프가 차단되지 않도록 비동기/우선 순위 큐 적용 여부 확인 +• 네트워크 기반 DoS 확산 방지(라우터/게이트웨이 레벨의 속도 제한, ACL 등) 확인 +DoS 방지 검증방안 +방화벽 접근제어 예시 +장애 상황 조건과 방안 문서화 예시 + + +![이미지 173-0](images/p0173_img0.png) + + +![이미지 173-1](images/p0173_img1.png) + + +--- + +174 +보안 +요구사항 +통신 두절, 센서 오류 등 비정상 상태에서는 로봇 시스템이 자동으로 안전 정지하거나 안전 모드로 전환될 수 있어야 +한다. +목적 +통신 두절, 센서 오류 등 비정상 상태에서 시스템이 자동으로 안전 정지하거나 안전 모드로 전환되는 기능을 +제공하여 운영자/사용자의 안전을 확보한다. +점검 기준 +비정상 상태에서의 안전 정지/모드 전환 구현 + +## 1. 비정상 상태에서 영향을 감소하기 위한 설계의 개발 및 구현 여부 + + +## 2. 통신 오류 또는 센서 이상 시 자동으로 정지 또는 안전모드 전환 여부 + +구현 및 점검 방안 +1 + +## 01. 비정상 상태 영향 감소 설계의 개발 및 구현 여부를 확인한다. + +•  로봇의 설계상 비정상 상태의 정의, 각 상태별 구현대책의 존재를 확인한다. +•  비정상 작동을 대비한 비상 정지 버튼의 존재를 확인한다. +[방안 1] 비정상 상태 영향 감소 설계 개선 방안 +비상 정지 버튼 외에도 전원 관리 모듈에 자동 복구(워치독 타이머) 기능을 도입한다. 재부팅 절차를 자동화하여 운영자 +개입을 최소화한다. +2 + +## 01. 통신 오류 또는 센서 이상 시 자동으로 정지 또는 안전모드로 전환하는지 확인한다. + +•  실제 비정상 동작 시에 자동으로 정지하거나 안전모드로 전환하는 기능이 존재하는지 확인한다. +[방안 1] 자동 정지/안전모드 전환 개선 방안 +통신 오류·센서 이상 발생 시 안전모드 자동 전환 로직을 추가한다. 예시로 워치독, 자동 안전모드, 전력 차단, 페일오버 등의 +로직이 존재한다. + +#### 3.10.12 [CR-12] 비정상 상태에서의 안전 정지/모드 전환 구현 + +비상정지 버튼 예시 +안전 설계 구성도 예시 +Motor Driver +DRIVING +Signal +E-stop +DCU +PC + + +![이미지 174-0](images/p0174_img0.png) + + +--- + +01 +02 +03 +175 +보안 +요구사항 +로봇 시스템의 인증, 신원, 액세스 시스템에 사용되는 개인정보 데이터는 제품과 관련 있을 경우만 저장, 전송, 기타 +처리되어야 하며 무단 액세스 및 기밀성 침해로부터 보호하여야 한다. +목적 +인증, 신원, 액세스 시스템에 사용되는 개인정보 데이터는 제품과 관련 있을 경우만 저장, 전송, 기타 처리되어야 +하며 무단 액세스 및 기밀성 침해로부터 보호하여 정보 유출을 방지하고 유출 시에도 최소한의 정보만 노출되게 +보호한다. +점검 기준 +사용자 정보 등의 인증 데이터 보호 + +## 1. 인증 정보(ID, 패스워드, 인증 토큰 등) 암호화 저장 및 처리 여부 + + +## 2. 무단 액세스를 차단하기 위한 인증/인가 시스템 구현 여부 + + +## 3. 불필요한 개인정보 미수집 및 수집 목적과 기간 명시 여부 + + +## 4. 목적에 부합하는 최소한의 범위 내 사용자 정보 처리 여부 + + +## 5. 사용자 정보, 데이터, 설정의 저장, 전송 또는 기타 처리되는 과정 상 기밀성 보호 여부 + +구현 및 점검 방안 +1 + +## 01. 인증 정보(ID, 패스워드, 인증 토큰 등) 암호화 저장 및 처리하는지 확인한다. + +•  로봇이 사용자 개인 정보를 수집하는지 확인한다. +•  사용자 개인 정보를 수집 및 저장하는 등의 이용주체에 해당하는지 확인한다. +•  인증 정보는 암호화되어 저장 및 처리되고 있는지 확인한다. +•  모든 인증정보·민감데이터의 경우 충분한 전송 및 저장 보안을 수행하는지 확인한다. +[방안 1] 암호화 저장·처리 방안 +사용자 인증정보와 민감데이터는 아래 중요 데이터 저장/처리 방안에 기반하여 충분한 강도의 암호화로 저장·처리하며, 보호 +채널을 통해 전송해 기밀성을 보장한다. + +#### 3.10.13 [CR-13] 사용자 정보 등의 인증 데이터 보호 + +중요 데이터 저장/처리 방안 +전송 보안 TLS 예시 +항목 +내용 +저장 보안 +•  충분한 수준의 암호화(AES-256 권장) 수행 +•  전용 데이터베이스에 저장 +전송 보안 +•  TLS 1.2 이상(상호 인증 포함) 적용 +•  평문 포트 사용금지 +•  기본 평문통신 프로토콜일 경우, 페이로드 암호화 수행 + + +![이미지 175-0](images/p0175_img0.png) + + +--- + +176 +2 + +## 01. 무단 액세스를 차단하기 위한 인증/인가 시스템이 구현되어 있는지 확인한다. + +•  모든 인터페이스에 대해 인증·신원·액세스 관리 등을 통해 무단 액세스를 차단하는 시스템이 구현되어 있는지 확인한다. +•  무단 액세스 의심 사건이 발생할 경우 상위 증적에 기반하여 침해사고 보고 체계에 따라 윗선에 보고해야 한다. +[방안 1] 무단 액세스 차단 인증/인가 방안 +모든 인터페이스에 최소권한 기반의 인증·인가 체계를 적용하고, 역할·권한 변경·삭제와 같은 권한 변경 이력을 감사로그로 +기록해 무단 액세스를 차단한다. +3 + +## 01. 불필요한 개인정보는 수집되지 않으며, 수집 목적과 기간이 명시되어 있는지 확인한다. + +•  개인정보 수집 영역과 제시정보에 대해 아래와 같이 준수하는지 확인한다. +제품이 의도된 목적과 다른 불필요한 개인정보를 수집 +개인정보 수집에 관한 목적과 기간을 사용자에게 제시 +[방안 1] 불필요한 개인정보 수집 금지 방안 +불필요한 개인정보는 수집하지 않고, 수집 목적·보관 기간을 사용자에게 명확히 고지해 최소정보 원칙을 준수한다. +4 + +## 01. 사용자 정보는 목적에 부합하는 최소한의 범위로만 처리되고 있는지 확인한다. + +•  사용자 정보 데이터의 보관/처리에 대해 최소한으로 처리하는지 확인한다. +[방안 1] 사용자 정보 최소범위 처리 방안 +사용자 정보와 설정은 목적에 필요한 최소 범위로 처리하고, 사용자가 요청하면 저장된 정보를 영구 삭제할 수 있도록 +관리한다. +연결 보안 검증 예시 +사용자 정보 최소범위 처리 방안 +항목 +내용 +최소처리 원칙 +•  사용자 정보를 필요한 최소 범위로만 처리 +사용자 삭제 요청 반영 +•  사용자 요청 시 저장된 데이터·설정을 영구 삭제 +수집 데이터 정책 +•  과도한 정보 보관을 금하고 정책에 따른 저장만 허용 + + +![이미지 176-0](images/p0176_img0.png) + + +--- + +01 +02 +03 +177 +5 + +## 01. 사용자 정보와 데이터, 설정의 저장/전송/처리에 있어 기밀성 보호를 수행하는지 확인한다. + +•  데이터 중 사용자 정보, 데이터, 설정의 경우 저장, 전송 또는 기타 처리되는 과정에서 기밀성이 보호되는지 반드시 +확인한다. +•  레거시나 산업특수 평문 프로토콜을 사용하는 경우 페이로드 레벨 암호화와 재인증/세션 갱신을 도입해 평문 노출을 +제한한다. +[방안 1] 사용자 정보 저장·전송·처리 시 기밀성 보호 방안 +사용자 정보·데이터·설정은 저장·전송·처리 전 구간에서 암호화를 적용해 기밀성을 보호하고, 평문 프로토콜이 필요한 +경우에는 페이로드 암호화와 재인증·세션 갱신을 통해 노출 위험을 최소화한다. +개인정보 수집 적용대상 예시 +개인정보 저장 기간 예시 +사용자 정보 최소범위 처리방안 +항목 +내용 +저장 구간 보호 +•  사용자 정보·데이터·설정을 저장할 때 강력한 암호화(AES-256 등)를 적용 +전송 구간 보호 +•  TLS 1.2 이상을 적용해 전송 과정의 데이터 노출을 방지 +처리 구간 보호 +•  평문 또는 산업용 프로토콜(Modbus, CAN 등)을 사용할 경우 페이로드 암소화, 재인증, 세 +션 갱신을 적용 +기밀성 점검 +•  저장·전송·처리 전체 경로의 보호 상태가 정책대로 유지되는지 주기적으로 점검 + + +![이미지 177-0](images/p0177_img0.png) + + +![이미지 177-1](images/p0177_img1.png) + + +--- + +178 +번호 +체크리스트 항목 +WS-01 +무선 사용자 식별 및 인증 +WS-02 +인증자 유효성 검증 +WS-03 +인증자 변경 +WS-04 +비밀번호 강도 +WS-05 +무차별 대입 보호 +WS-06 +자산 접근 제어 +WS-07 +안전한 데이터 보호 +WS-08 +저장 데이터 무결성 검증 +WS-09 +무선 통신 데이터 보호 +WS-10 +무선 통신 데이터 무결성 검증 +WS-11 +무선 통신 재전송 공격 방지 구현 +WS-12 +업데이트 메커니즘 제공 +WS-13 +무선 네트워크 업데이트 무결성 및 진본성 검증 +WS-14 +암호화 적정성 +WS-15 +적절한 암호화 키 사용 +WS-16 +암호화 키 고유성 +WS-17 +로그 생성 +WS-18 +시간 정보 포함 +WS-19 +최신 소프트웨어 및 하드웨어 유지 +WS-20 +네트워크 인터페이스 노출 최소화 +WS-21 +외부 물리 인터페이스 제한 +WS-22 +외부 입력 관리 +WS-23 +장비 무결성 보장 +무선 보안 체크리스트 항목 +유럽에서 판매되는 무선 장비, 즉 로봇의 무선 보안을 준수하기 위한 통합 무선 보안(Wireless Security, WS) +체크리스트 항목은 다음과 같다. + +### 3.11 무선 보안 점검 체크리스트 + + + +--- + +01 +02 +03 +179 +보안 +요구사항 +로봇 시스템의 무선 인터페이스에 접근하는 사용자와 단말수준, 모든 사용자(사람, 소프트웨어 프로세스 또는 장치) +수준에 대해 적절한 인증 메커니즘을 사용하여 인증 및 접근 관리를 수행해야 한다. +목적 +무선 사용자 식별, 인증 및 접근 관리를 통해 무선 인터페이스와 통신 접근을 관리하여 관련 공격이 발생하지 않게 +방지한다. +점검 기준 +무선 사용자 식별 및 인증 + +## 1. 무선 인터페이스를 통한 접근 시 인증 메커니즘 적용 여부 + + +## 2. 접근한 사용자에 대한 네트워크 모니터링 및 접근 제한 가능 여부 + + +## 3. 무선 인터페이스를 통해 접근한 사용자 유일 식별 여부 + +구현 및 점검 방안 +1 + +## 01. 무선 인터페이스를 통한 접근 시 인증 메커니즘을 적용하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하는 경우, 로봇 시스템 및 연동된 무선 +인터페이스를 통해 접근할 때 사용자 인증을 요구해야 한다. +•  상호작용 가능한 사용자가 접근할 경우, 인증은 접근 제어 매커니즘에 기반하여 지식·소유·고유 기반 인증요소를 기반으로 +식별하여야 한다. +•  단, DHCP, ICMP 등과 같이 인증 없이도 동작해야 하는 프로토콜이거나, 장비의 공개 정보에 접근하는 행위일 경우는 +예외로 한다. +[방안 1] 사용자 인증 방식 +접근 제어 매커니즘에 따라 사용자 접근을 RBAC(역할 기반 접근 제어), ABAC(속성 기반 접근 제어)로 구분할 수 있다. +이러한 접근에 대해 사용되는 인증 방식은 지식, 소유, 고유로 구분할 수 있다. +사용자 인증 방식 +상호작용 가능한 사용자(개체) 구분 +구분 +내용 +인간 사용자 +•  특정 사용자 계정의 소유자, 기기, 또는 서비스와 같은 개별 인간 개체 +그룹 +•  특정 자원에 접근하도록 인가된 그룹의 구성원 +개체 +•  다른 개체로부터 특정 자원 접근 권한을 부여받은 개체 +구분 +내용 +지식 +•  사용자가 기억하여 인증에 사용하는 지식정보 +•  비밀번호, PIN +소유 +•  사용자가 소유하여 인증에 사용하는 데이터정보 +•  개인 키, 인증서, 토큰 +고유 +•  사용자의 신체적 특징으로 인증에 사용하는 고유정보 +•  지문, 얼굴인식 + +#### 3.11.1 [WS-01] 무선 사용자 식별 및 인증 + + + +--- + +180 +지식/소유/고유 인증방식의 수행 예시를 아래와 같이 들 수 있다. +•  사용자 인터페이스에서 PIN 코드를 사용한다. +•  네트워크/사용자 인터페이스의 인증을 수행한다. (비밀번호 기반 등) +•  지문 또는 얼굴인식 같은 생체 인증을 수행한다. +•  신뢰된 인증서에 대응하는 개인 키 검증을 수행한다 +•  장비 온보딩 시 공유된 비밀 기반의 네트워크 신뢰 관계를 구축한다. +2 + +## 01. 접근한 사용자에 대한 네트워크 모니터링 및 접근 제한을 수행하는지 확인한다. + +•  접근하는 사용자 네트워크 동작을 모니터링하거나 접근 제한을 수행가능해야 한다. +•  자체에서 지원하지 않는 경우 로봇 시스템이 방화벽, IDS 등의 네트워크 장비와 통합운영이 가능한지 검증해야 한다. +[방안 1] 네트워크 모니터링 및 접근 제한 +네트워크 활동을 실시간으로 감시하고, 비정상 트래픽 또는 의심 동작이 탐지될 경우 접근을 제한하기 위해 자체 기능을 +제공하거나 방화벽, IDS 등 외부 네트워크 보안 장비와 연동할 수 있다. +네트워크 모니터링 및 접근 제한 기능 +사용자 인증 예시 +사용자 식별 제한 예시 +항목 +기능 +트래픽 관리 +•  애플리케이션 우선 순위 재지정이 가능한 동적 네트워크 규칙 및 구성 +가시성 및 분석 +•  모든 네트워크 트래픽에 대한 가시성 유지 +•  상관관계 분석을 통한 모니터링 +위협 대응 +•  활동 또는 기계학습 기반 트래픽/동작 탐지, 접근제한 +•  방화벽·IDS의 수준에 준하는 탐지, 접근제한 + + +![이미지 180-0](images/p0180_img0.png) + + +![이미지 180-1](images/p0180_img1.png) + + +--- + +01 +02 +03 +181 +3 + +## 01. 무선 인터페이스를 통해 접근한 사용자를 유일 식별할 수 있는지 확인한다. + +•  무선 네트워크에 접근한 사용자를 IP 주소, IPv6 주소 등 유일한 지표에 기반하여 식별할 수 있어야 한다. +[방안 1] 사용자 유일 식별 방식 +무선 인터페이스를 통해 접근한 사용자는 단순 식별 외 유일하게 식별할 수 있다. 적인 사용자 유일 식별 방식의 종류는 다음과 +같다. +•  MAC 주소 +•  IP/IPv6 주소 +•  사용자 계정(802.1X EAP Identity) +•  인증서 지문(Cert Fingerprint) +•  RADIUS Accounting-Session-ID +•  PMKID(특정 단말의 로밍/세션을 고유하게 식별) +위와 같은 사용자 유일 식별 방식은 아래와 같이 사용될 수 있다. +•  WPA2/3-Enterprise(EAP-TLS/PEAP) + RADIUS 인증을 적용해 사용자 ID와 인증서 지문을 RADIUS accounting +로그에 남기고, 해당 로그로 세션 단위의 고유 식별자를 확보한다. +•  DHCP/Syslog/RADIUS/AP 로그를 연동해 MAC·할당된 IP/IPv6·AP BSSID·세션ID를 중앙 DB에서 매칭하여 단일 +사용자 프로파일로 결합·추적한다. + + +--- + +182 + +#### 3.11.2 [WS-02] 인증자 유효성 검증 + +보안 +요구사항 +인증 메커니즘은 운영 환경에서 이용 가능한 정보를 바탕으로 사용되는 모든 인증 수단의 관련 속성을 반드시 +검증해야 한다. +목적 +인증자의 무결성, 유효성, 만료 상태 등을 포함하여 위조되거나 손상된 인증 정보를 통한 무단 접근을 방지한다. +점검 기준 +인증자 유효성 검증 + +## 1. 인증 시 인증자 유효성 검증 여부 + +구현 및 점검 방안 +1 + +## 01. 인증에 사용되는 모든 인증자의 유효성을 검증하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하는 경우, 로봇 시스템 및 연동된 무선 +인터페이스를 통해 접근할 때 사용되는 모든 인증자의 속성을 검증해야 한다. +•  로봇 인터페이스별 인증을 수행할 경우 인증자의 유효함을 충분히 검증하는 방법이 존재해야 한다. +•  위/변조 가능성이 있는 인증수단을 사용할 경우, 인증수단에 대해 반드시 검증 절차(예: PKI 인증서 검증, 만료일·서명 확인 +등)를 수행해야 한다. +[방안 1] 인증자의 유효성 검증 +인증을 수행할 경우 인증자의 유효함을 다음과 같은 인증자 종류별 검사 방안에 기반하여 검증할 수 있다. +인증서의 경우, 각 운영 환경에 따라 다음과 같은 내용을 추가로 검증해야 한다. +인증자 종류별 검증 방안 +운영환경 별 인증서 추가 검증 항목 +항목 +검증방안 +일반 +•  잘못된 인증자가 인증 성공으로 이어지는지 여부 +비밀번호 +•  잘못된 비밀번호로 인증이 성공하는지 여부 +•  네트워크 인터페이스를 통한 인증 중 교환되는 메시지의 기밀성이 보호되지 않는 경우, 이 +전에 성공했던 인증 시도의 재전송 공격이 인증 성공으로 이어지는지 여부 +•  올바른 비밀번호의 일부만으로 인증이 가능한지 여부 +•  다른 사용자 계정이 존재하거나 생성될 수 있는 경우, 다른 계정의 비밀번호로 인증이 가능 +한지 여부 +개인키 +•  신뢰된 인증서에 대한 잘못된 개인 키로 인증이 성공하는지 여부 +•  다른 계정의 신뢰된 인증서에 대한 개인 키로 인증이 가능한지 여부 +구분 +검증대상 +온라인 환경 +•  실시간 폐기 목록(CRL/OCSP) +•  시간 동기화 기능 +오프라인/ +제한 환경 +•  내장 신뢰 목록 +•  사전 검증된 인증서 집합 + + +--- + +01 +02 +03 +183 + +#### 3.11.3 [WS-03] 인증자 변경 + +보안 +요구사항 +인증 메커니즘은 보안 목표에 위배되지 않는 한 사용자가 사용하는 인증 수단(비밀번호, 토큰 등)을 변경할 수 +있도록 허용해야 한다. +목적 +인증자 유출이나 손상 시 신속한 대응을 가능하게 하고, 정기적인 인증자 갱신을 통해 보안 수준을 유지한다. +점검 기준 +사용자 인증자 변경 가능 + +## 1. 인가된 사용자에 의한 사용자 인증자 재설정 기능 제공 여부 + +구현 및 점검 방안 +1 + +## 01. 인가된 사용자에 의한 사용자 인증자 재설정 기능을 제공하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하는 경우, 로봇 시스템 및 연동된 무선 +인터페이스를 통해 접근할 때 보안 수준을 충족하는 사용자 인증자 재설정 기능을 제공해야 한다. +[방안 1] 사용자 인증자 재설정 보안수준 +사용자 인증자 재설정(변경) 기능을 제공할 경우, 다음과 같이 필수 재설정 충족요건에 기반하여 기능을 제공한다. +•  재설정 시 사용자 인증/권한 요구 +•  새로 지정된 인증자 기반 자산 접근권한 부여 +•  만료된 인증자의 접근권한 제거 +•  인증자 변경을 수행해도 운영 중 비정상 종료나 오류 방지 +무선 인터페이스 식별 예시 +인증자 재설정 예시 + + +![이미지 183-0](images/p0183_img0.png) + + +![이미지 183-1](images/p0183_img1.png) + + +--- + +184 +보안 +요구사항 +설정되는 모든 비밀번호는 충분히 안전하고, 고유해야 하며, 기본 비밀번호는 사용자가 변경하도록 강제하거나 +안전하게 관리되어야 한다. 모든 비밀번호는 NIST SP 800-63B 등 국제 표준의 강도 요구사항을 준수하여 +설정되어야 한다. +목적 +설정되는 모든 비밀번호는 충분히 안전하고, 고유해야 하며, 기본 비밀번호는 사용자가 변경하도록 강제하거나 +안전하게 관리되어 계정 인증정보의 탈취를 방지해야 한다. +점검 기준 +비밀번호 강도 + +## 1. 장비에 기본(출고) 비밀번호가 설정된 경우, 각 장비마다 고유한 비밀번호가 적용되고, 비밀번호가 충분한 강도 + +기준을 충족하는지 여부 + +## 2. 최초 사용 전 사용자 본인에 의한 비밀번호 변경 강제 여부 + + +## 3. 적합한 주체만 비밀번호 설정 가능하거나, 비밀번호 강도 기준 충족 여부 + +구현 및 점검 방안 +1 + +## 01. 장비마다 고유한 기본 비밀번호가 적용되고 강도 기준을 충족하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 비밀번호 기능이 존재하는 경우, +비밀번호의 안전한 관리를 수행하여야 한다. +•  식별된 서비스에 기본 비밀번호가 설정되어 있을 경우 기본 비밀번호 충족요건을 충족해야 한다. +[방안 1] 기본 비밀번호 충족사항 +장비별 기본 비밀번호 제공 시, 아래와 같은 기본 비밀번호 충족요건에 의거하여 제공하여야 한다. +•  비밀번호 정책 문서에 기본 비밀번호 관련 내용을 명시하거나 사용자에게 제공 +•  장비별 고유한 기본 비밀번호 제공 +•  문서에 명시된 비밀번호 생성 규칙에 기반하여 기본 비밀번호 구현 +•  기본 비밀번호의 난수기반 생성시 공인 표준 NIST SP 800-90A, NIST SP 800-90B, NIST SP 800-90C, +BSI AIS31에 기반한 생성을 통해 충분한 복잡성 강도 충족 +2 + +## 01. 비밀번호 최초 사용 시 비밀번호 변경 강제를 수행한다. + +•  비밀번호 기능을 최초 사용할 경우, 비밀번호 변경방안에 따라 강제 변경기능을 제공해야 한다. +[방안 1] 최초 비밀번호 변경 강제화 +장비에 설정된 비밀번호는 아래 방안에 따라 비밀번호 강제 변경을 제공한다. +•  설치 후 최초 사용 시, 사용자의 비밀번호 변경 요구 +•  기본 비밀번호로 로그인할 시, 시스템의 비밀번호 변경을 요구 + +#### 3.11.4 [WS-04] 비밀번호 강도 + +최초 비밀번호 변경 예시 + + +![이미지 184-0](images/p0184_img0.png) + + +--- + +01 +02 +03 +185 +3 + +## 01. 비밀번호의 일반적인 보안관리를 수행한다. + +•  로봇 시스템을 사용하는 적합한 주체만 비밀번호 설정이 가능해야 한다. +•  주체에 대한 검증이 없을 경우 최소 비밀번호 강도 기준을 충족해야 한다. +[방안 1] 비밀번호 보안관리 +비밀번호는 변경 시 다음과 같은 최소 비밀번호 강도 기준을 적용한다. +최소 비밀번호 강도 기준과 관련하여 다음과 같은 모범 사례집을 참고할 수 있다. +•  NIST SP 800-63B +•  ISO/IEC EN 27002:2022 +•  ISO/IEC EN 24760 +•  IEC EN 62443-4-2 +•  ETSI EN 303 645 +최소 비밀번호 강도 기준 +비밀번호 변경관리 예시 +항목 +내용 +실시간 강도 +검증 +•  충분한 복잡성(대소문자/숫자/특수문자 조합) 충족 +•  충분한 길이 충족 +변경 제한 +•  사전, 연속 문자 및 키보드 기반 단순한 패턴 차단 +•  개인정보 포함 패턴 차단 +•  최근 비밀번호 재사용 금지 + + +![이미지 185-0](images/p0185_img0.png) + + +--- + +186 +보안 +요구사항 +인증 메커니즘은 무차별 대입 공격에 견딜 수 있도록 설계되어야 한다. 즉, 공격자가 반복적으로 인증을 시도하여 +패스워드를 알아내거나 서비스 거부(DoS) 상태를 유발하지 못하도록 적절한 방어 조치(지연, 계정 잠금, 다중 인증, +암호 강도, 로그인 시도 제한 등)를 적용해야 한다. +목적 +인증 메커니즘을 무차별 대입 공격에 견딜 수 있도록 설계해 공격자의 반복적인 인증을 통한 계정정보 노출과 +서비스 거부 상태를 방지해야 한다. +점검 기준 +무차별 대입 공격 방지 기능 적용 + +## 1. 인증 메커니즘에 대한 무차별 대입 공격 방지 기능 적용 여부 + +구현 및 점검 방안 +1 + +## 01. 인증 메커니즘에 대한 무차별 대입 공격 방지 기능이 존재하는가를 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 인증을 수행할 경우, 인증 +메커니즘에 대한 무차별 대입 공격 방지 기능이 존재해야 한다. +[방안 1] 무차별 대입 공격 방지 +무차별 대입 공격을 방지하기 위해 다음과 같은 무차별 대입 공격 방지기능을 적용할 수 있다. +위의 조치에 따른 무차별 대입 공격 방지기능이 실제 적합하게 구현되었는지의 여부는 아래와 같은 검증방안에 따라 +확인한다. + +#### 3.11.5 [WS-05] 무차별 대입 보호 + +무차별 대입 공격 방지기능 +무차별 대입 공격 방지 검증 +항목 +내용 +인증 실패 +처리 +•  인증 실패 시 시간 지연, 시도 횟수 제한, MFA, 접근 IP 제한 적용 +•  연속된 인증 실패 시 클라이언트 MAC 주소를 일정 시간 동안 차단하여 추가 인증 시도 방지 +구현 +•  단위 시간당 인증 요청 횟수 제한 +•  방어 조치가 정상 사용자 접근을 과도하게 차단하지 않게 균형 조정 +•  인증 실패에 대한 이벤트 및 차단 로그의 이상패턴 탐지 및 대응 +기계간 인증 +추가 보호조치 +•  16자 이상, 높은 복잡도의 장비 간 비밀번호 사용 +•  허용된 IP 주소 목록 기반 접근 제어 +•  비정상적인 시도 발생 시 경고 또는 로그 기록 기능 활성화 +항목 +검증방안 +일반 +•  무차별 대입 공격을 직접 수행하여 장비가 이에 대한 방어 기능을 제공하는지를 확인 +지연 +•  잘못된 인증 정보를 반복적으로 입력하여 장비가 연속된 실패 시도 사이에 지연 시간이 실제로 적용 +되는지를 측정 +횟수 +제한 +•  잘못된 인증 정보를 반복적으로 입력하여 장비가 몇 회 실패 후 추가 시도를 차단하는지를 확인 +복잡도 +•  복잡도 기준을 만족하지 않는 인증 정보를 설정하려 시도 후 무차별 대입 공격을 수행하여 인증 강도 +가 충분한지를 검증 + + +--- + +01 +02 +03 +187 +인증 무차별 대입방지 검증 예시 + + +![이미지 187-0](images/p0187_img0.png) + + +--- + +188 +보안 +요구사항 +무선 통신에 참여하는 모든 사용자의 기본 정보 또는 자산(보안, 네트워크 등)에 대한 접근이 무분별하게 이루어지지 +않도록, 인가된 사용자만 접근할 수 있도록 통제해야 한다. +목적 +무선 통신에 참여하는 모든 사용자의 기본 정보 또는 자산(보안, 네트워크 등)에 대한 접근을 인가된 사용자만 +가능하게 하여 권한 없는 사용자의 시스템 자산 무단 접근 및 중요 정보 유출을 방지한다. +점검 기준 +무선을 통한 자산 접근 제어 메커니즘 적용성 검증 + +## 1. 로봇 시스템의 주요 자산에 접근하는 엔티티의 접근 권한을 관리·제어할 수 있는 접근통제 메커니즘 구축 여부 + +구현 및 점검 방안 +1 + +## 01. 주요 자산에 접근하는 권한을 관리/제어할 수 있는 접근 제어 메커니즘이 존재하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스 영역에 해당하는 장비의 모든 소프트웨어 구성요소에 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 +처리하는 경우, 접근 권한을 관리/제어하는 기능이 존재해야 한다. +[방안 1] 접근 권한 관리/제어 +접근 권한을 관리/제어하는 제어 메커니즘은 보호 대상(보안 자산·네트워크 자산)과 여건을 고려해 적절한 방안을 선택한다. +•  장비의 기술 특성, 사용 환경, 접근 방식 +•  자산 접근에 따른 위험 수준 +•  장비 기능이 허용하는 접근 형태(읽기/쓰기/변경 등) +•  자산 접근에 사용되는 외부 인터페이스 종류(Local, Remote 등) +•  운용 환경의 보호 수준 (물리적/논리적 접근통제 여부) +접근제어 메커니즘이 인증 기반으로 사용될 경우, 아래와 같은 방식으로 구현될 수 있다. +•  특정 사용자, 계정 소유자, 디바이스 또는 서비스가 인증 후 접근 가능 +•  특정 그룹 구성원이 인증 후 접근 가능 +•  다른 엔티티에 의해 위임받은 엔티티 접근 가능 +접근제어의 검증은 다음과 같은 접근제어 검증방안을 통해 검증할 수 있다 + +#### 3.11.6 [WS-06] 자산 접근 제어 + +구분 +검증방안 +일반 +•  자산은 인가된 사용자만 접근가능한지 여부 +•  사용자 권한은 최소 권한 원칙을 준수하는지 여부 +•  접근 제어 관련 설정이나 사용자 권한 변경은 인가된 사용자만 수행 가능한지 여부 +역할 기반 +•  각 사용자에게 권한이 부여된 역할의 할당여부 +•  각 역할은 최소 권한 원칙을 따르는지 여부 +•  자산은 해당 역할을 가진 인가된 사용자만 접근 가능한지 여부 +•  역할 변경은 오직 인가된 사용자만 수행할 수 있는지 여부 +임의 +•  각 사용자에게 식별자와 해당 권한이 부여되어 있는지 여부 +•  각 식별자에 대해 최소 권한 원칙 이 적용되는지 여부 +•  자산은 인가된 식별자(사용자) 만 접근 가능한지 여부 +•  식별자 변경은 인가된 사용자만 수행할 수 있는지 여부 +강제 +•  자산은 운영체제(OS) 또는 시스템 관리자에 의해 부여된 승인을 받은 사용자만 접근 가능한지 +여부 +•  승인 부여는 최소 권한 원칙을 기반으로 하는지 여부 +•  OS 또는 관리자 권한을 변경할 수 있는 행위는 인가된 시스템 관리자만 수행 가능한지 여부 +접근제어 검증 방안 + + +--- + +01 +02 +03 +189 +다음과 같이 로봇 특정 프로토콜별로 접근 제어 정책을 수행할 수 있다. +•  MQTT 사용자 인증 강화를 위해 MQTT 익명 접속 차단, 사용자 인증(아이디 및 패스워드) 도입한다. +•  OS 보안 강화를 위해 SROS(Secure ROS) 사용, ROS 2 마이그레이션을 검토한다. +사용자별 자산 접근제어 예시 + + +![이미지 189-0](images/p0189_img0.png) + + +--- + +190 +보안 +요구사항 +네트워크 내 민감 정보와 개인정보, 그리고 위·변조 위험이 있는 데이터를 안전하게 저장·관리하기 위한 보안 저장 +메커니즘을 제공해야 한다. +목적 +데이터의 기밀성과 무결성을 보장하고, 무단 접근이나 데이터 유출을 방지하기 위한 암호화, 접근 제어, 하드웨어 +보안 모듈 등의 기술적 보호조치를 통해 안전한 데이터 보호를 수행한다. +점검 기준 +보안 저장 메커니즘 적용 + +## 1. 개인정보나 보안 매개변수에 대하여 보안 저장 메커니즘 적용 여부 + +구현 및 점검 방안 +1 + +## 01. 개인정보나 보안 매개변수에 대하여 보안 저장 메커니즘을 적용하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하는 경우 안전한 저장 메커니즘을 +사용하여 기밀성을 준수해야 한다. +사용자 인증을 통해 접근 통제를 수행하는가? +중요 데이터에 대한 암호화를 통해 보안성을 지키는가? +장비 내부에 문서화되지 않은 기밀 보안 매개변수나 기밀 보안 자산 (네트워크/개인정보/금융) 데이터가 존재하지 +않는가? +[방안 1] 안전한 저장 메커니즘 +안전한 저장 메커니즘을 위해 아래와 같은 구현방안을 적용한다. + +#### 3.11.7 [WS-07] 안전한 데이터 보호 + +항목 +내용 +데이터 암호화 +/키 관리체계 구축 +•  개인정보 및 보안 매개변수의 암호화 적용 +•  암호화 키의 안전한 생성, 저장, 로테이션을 위한 키 관리 시스템 구현 +안전 저장 +메커니즘 설계 +데이터의 안전한 저장 메커니즘 +•  기밀성을 보장하기 위한 암호화 +•  무결성과 진위성을 보장하기 위한 전자서명 +•  인증 또는 인가를 통한 접근제어 +•  하드웨어 기반 보호조치 (예: HSM, TPM, Secure Element)를 통한 키·인증정보 보관 +•  물리적 보호조치 (예: 접근 제한, 봉인, 잠금장치) +위험 수준에 따른 보호수준의 설정 +•  자산의 중요도 +•  저장되는 자산의 양 +•  자산을 저장해야 하는 기간 +•  장비의 운용 환경 (실내/야외, 산업용, 이동형 등) +기타 안전 저장방안 +•  접근 통제와 인증·인가 절차 병행을 통해 인가된 엔티티만 자산 접근 가능하도록 구성 +•  이동식 매체(USB, SD 등)는 원칙적으로 자산 저장용으로 사용하지 않으며, 사용 시 물리적 +접근 통제 보호 +기밀 자산 접근 +권한 설정 방안 +기밀 자산 접근권한/제어 설정 +•  기밀 보안 매개변수 및 네트워크 설정 정보의 비인가 접근·복사·이동이 불가능한 권한설정 +•  최소 권한 원칙에 따른 관리하는 데이터 접근 권한 설정 +•  인가된 사용자에게만 관리자 변경·권한 부여 +•  암호화 키·인증정보의 별도의 보호 저장영역 저장 / 일반 파일시스템과의 분리 저장 +•  개인정보 및 보안 매개변수에 대한 암호화 적용 +•  암호화 키의 안전한 생성, 저장, 로테이션을 위한 키 관리 시스템 구현 +•  접근제어 외 물리적 보안조치(예: 잠금, 봉인, 안전한 설치 위치)를 병행을 통한 하드웨어 침 +입·탈취 공격 대비 +보호 정책 설정 +방안 +보호 정책 설정 +•  저장 자산의 위험 수준 평가에 기반한 고위험 자산(예: 인증서, 비밀키, 금융 인증정보 등)의 +암호화 및 하드웨어 보호대상 지정 +안전한 저장 메커니즘 구현방안 + + +--- + +01 +02 +03 +191 +데이터 암호화 설정 예시 + + +![이미지 191-0](images/p0191_img0.png) + + +--- + +192 +보안 +요구사항 +장비는 저장된 보안 자산과 개인 정보 자산의 무결성을 보호하여 데이터 변조를 방지하고 탐지할 수 있는 기능을 +제공해야 한다. +목적 +저장된 보안 자산과 개인 정보 자산의 무결성을 보호해 데이터 변조 및 시스템 무결성 우회와 같은 훼손 위협을 +방지해야 한다. +점검 기준 +데이터 무결성 검증 + +## 1. 주요 자산에 대한 무결성 검증 메커니즘 적용 여부 + +구현 및 점검 방안 +1 + +## 01. 주요 자산에 대한 무결성 검증 메커니즘을 적용하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 저장하는 경우 아래와 같이 안전한 +검증 메커니즘을 사용하여 무결성을 준수해야 한다 +장비 내부의 모든 자산 데이터는 문서화되는가? +주요 자산의 변경시도를 방지하는 무결성 검증 방안이 존재하는가? +[방안 1] 자산 변경방지를 위한 무결성 검증방안 +자산 데이터의 변경시도의 방지를 위해 아래와 같이 무결성 보호를 위한 자산 변경보호 방안을 적용한다. + +#### 3.11.8 [WS-08] 저장 데이터 무결성 검증 + +항목 +내용 +암호기반 보호 +•  데이터 암호화를 통한 기밀성 보장 +•  인증정보(비밀번호, 토큰, 인증서)의 암호화 저장을 통한 기밀성 보장 +•  암호키의 독립된 안전 저장소(HSM, TPM 등) 보관 +•  암호키 관리 정책 문서화 +변경 접근제어 +및 인증기반 +보호 +•  보안 자산 접근 시 사용자 인증 및 권한부여 필수화 +•  최소 권한 원칙에 기반한 접근 권한 제한 +•  디지털 서명 또는 MAC 검증을 통한 데이터 무결성 및 진위성 보장 +•  관리자·사용자·프로세스 단위의 접근 로그를 남겨 이력을 추적한다. +변경 하드웨어 +기반 보호 +•  민감 자산의 물리적 보호 하드웨어(HSM, TPM, 보안 메모리 영역 등)를 활용한 저장 +•  데이터의 불법 복제 방지를 위한 장비의 보드·스토리지 분리 적용 +•  데이터의 불법 복제 방지를 위한 장비의 변조 방지 장치 적용 +변경 물리적 +보호 및 환경적 +통제 +•  장비 자체의 물리적 접근 제한 +•  보안 구역 내에서만 저장 매체(SSD, SD Card, EEPROM 등) 의 물리적 접근 허용 +•  분리 가능한 이동식 저장매체는 임시 이송 목적(예: 키 교환, 데이터 백업)한정 사용 +•  장비 출하 시 포함되지 않는 저장매체는 지속 저장 대상 미간주 +변경 위험 기반 +보호수준 설정 +•  저장 자산의 중요도, 저장 기간, 저장 용량, 운영 환경 등을 고려한 보호 수준(암호화 강도, +무결성 검증 주기, 접근 권한 수준) 차등 적용 +•  불필요하게 높은 보호 수준 방지 +•  환경별 리스크별 최적화 수행 +변경 이벤트 +로깅기능 구현 +•  보안 자산 및 개인정보 자산에 대한 생성·수정·삭제 이벤트 로깅 +자산 변경보호 방안 + + +--- + +01 +02 +03 +193 +저장 데이터에 대해 무결성이 적절하게 보호되는지는 아래와 같은 무결성 검증 방안을 통해 검증한다. +소프트웨어 및 데이터 해시 목록 파일 예시 +무결성 검증방안 +구분 +검증방안 +일반 +•  저장된 보안 자산 또는 네트워크 자산에 대해 비인가된 변경이 불가능하거나, 변경이 발생 +하면 탐지될 수 있는지 확인 +디지털 서명 +•  디지털 서명이 올바르게 구현되었는지 확인 +•  보안 자산 또는 네트워크 자산에 서명할 때 사용되는 비밀키가 도청, 추론, 추출될 수 없도록 +보호되어 있는지 확인 +•  유효하지 않은 서명으로 자산이 변경될 경우, 저장 메커니즘이 이를 탐지할 수 있는지 확인 +접근 제어 +•  저장된 보안 자산에 대한 비인가된 변경이 차단되는지 확인 +OT +•  보안 자산의 변경이 불가능하도록 되어 있는지 확인 +하드웨어 보호 +•  저장된 보안 자산 및 네트워크 자산이 비인가된 변경이 불가능하거나 변경 시 탐지될 수 있 +도록 보호되어 있는지 확인 + + +![이미지 193-0](images/p0193_img0.png) + + +--- + +194 +보안 +요구사항 +무선 네트워크를 통해 송수신되는 데이터가 외부에 노출되어 유출되거나 도청되지 않도록, 암호화 등 보안 조치를 +적용하여 데이터의 기밀성을 보호해야 한다. +목적 +무선 네트워크를 통해 송수신되는 데이터가 외부에 노출되어 유출되거나 도청되지 않도록, 암호화 등 보안 조치를 +통해 기밀성 훼손 및 통신 정보가 노출되는 것을 방지한다. +점검 기준 +무선 통신 데이터 보호 + +## 1. 무선 네트워크를 통해 송수신되는 모든 데이터의 보안 통신 메커니즘 보호 여부 + + +## 2. 무선 통신에 적용되는 암호화 프로토콜의 최신 보안 기준 충족 여부 + +구현 및 점검 방안 +1 + +## 01. 무선 네트워크를 통해 송수신되는 모든 데이터의 보안 통신 메커니즘의 보호를 수행하는지 식별한다. + +•  2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하는 경우 통신 시 보안통신 메커니즘을 +통해 데이터를 보호해야 한다 +[방안 1] 보안 통신 메커니즘 보호방안 +무선 네트워크를 통해 송수신되는 모든 데이터의 보호를 위해 아래와 같이 보안 통신메커니즘의 보호방안을 적용한다. +데이터에 적용되는 보안 통신 메커니즘이 적절한지는 아래와 같은 무선통신 데이터 보호 검증방안을 통해 검증한다. + +#### 3.11.9 [WS-09] 무선 통신 데이터 보호 + +항목 +내용 +안전한 +통신 +프로토콜 +구성 +•  승인된 보안 통신 프로토콜 사용 +•  프로토콜 설정 시 인증, 무결성 보호, 암호화 재전송 방지기능 구현 +•  통신 채널 단위 보호 / Endpoint 간 보호 중, 시스템의 보안 목표에 맞는 수준 선택 +•  통신 파트너 간 초기 신뢰 관계의 인증서 교환, 키 관리 절차, 안전한 초기 페어링 등에 기반한 구 +축 +•  안전하지 않은 프로토콜을 사용할 경우, 사용자에게 경고를 제공하고 보안 연결로 전환하도록 안 +내 +•  사용 중인 통신 프로토콜은 정기적으로 취약점 검토 수행 +암호화 +구성 +•  최신 암호 알고리즘 사용 +•  사용 중인 암호화 모듈은 정기적으로 취약점 검토 수행 +•  장비 간 통신에서 기밀성이 장기 유지되어야 하는 경우, Perfect Forward Secrecy(PFS)지원 암 +호화 방식 사용권장 +환경 기반 +보안 조치 +•  장비가 폐쇄망 / 물리적으로 접근 제한된 환경 내에서만 운영되는 경우, 통신 보안 수준을 환경 위 +험도에 맞춰 설정 +예외 관리 +•  보안 표준을 적용하기 어려운 상호운용성 목적(예: 구형 장비 호환성)에서는 아래와 같은 보완 대 +책 병행가능 +VPN 터널링 또는 별도의 암호화 게이트웨이 적용 +제한된 네트워크 세그먼트(ACL, VLAN 등) 사용 +접근 로깅 및 실시간 모니터링 활성화 +보안 통신 메커니즘 보호방안 + + +--- + +01 +02 +03 +195 +2 + +## 01. 무선 통신에 적용되는 프로토콜이 적합하며 최신 보안 기준을 충족하는지의 여부를 확인한다. + +•  대상 자산이 존재할 경우 아래와 같이 안전한 통신 메커니즘을 사용하여 기밀성을 준수해야 한다. +사용하는 암호화 알고리즘이 최신 보안 기준을 충족하는가? +통신 데이터를 TLS 1.2 /1.3 암호화 알고리즘으로 보호하는가? +[방안 1] 무선 통신 최신 보안기준 +데이터에 대해 TLS 1.2 /1.3 암호화 알고리즘 보호의 수행과 최신 보안 기준을 충족하는 암호화 알고리즘의 사용을 통해 +안전한 통신 메커니즘을 준수한다. +사용하는 암호화 알고리즘이 준수해야 하는 최신 보안 기준은 아래와 같은 내용을 적용한다. +•  국제 표준 기관이 권고하는 최신 암호 알고리즘 권고안 준수 +•  사용 금지(Deprecated)된 알고리즘 사용 금지 +항목 +검증방안 +일반 +•  메시지를 암호화하는 데 사용되는 비밀키가 도청되거나 가로채지지 않는지의 여부 +•  암호화된 메시지의 내용이 도청 또는 노출될 수 없는지의 여부 +메시지 +암호화 +•  메시지 내부의 페이로드를 암호화하는 데 사용되는 키(key)가 노출되지 않는지의 여부 +•  통신 중 전송되는 보안 자산 및 네트워크 자산이 도청될 수 없는지의 여부 +채널 +암호화 +•  통신 채널 내 메시지를 암호화하는 데 사용되는 키가 가로채지 못하도록 보호되어야 하는가의 +여부 +•  통신 중 전송되는 보안 자산 및 네트워크 자산이 도청될 수 없는지의 여부 +무선통신 데이터 보호 검증방안 +무선전송 보안 TLS 예시 + + +![이미지 195-0](images/p0195_img0.png) + + +--- + +196 +보안 +요구사항 +무선 네트워크를 통해 송수신되는 데이터가 전송 중 변조되지 않았음을 확인할 수 있도록, 해시 값 검증이나 +전자서명 등 무결성 검증 메커니즘을 적용해야 한다. +목적 +무선 네트워크를 통해 송수신되는 데이터의 무결성 검증 메커니즘을 통해 네트워크 공격 위협을 방지한다. +점검 기준 +무선 통신 데이터 무결성 검증 + +## 1. 무선 네트워크를 통해 송수신되는 데이터의 무결성을 검증하기 위한 메커니즘 적용 여부 + +구현 및 점검 방안 +1 + +## 01. 무선 네트워크를 통해 송수신되는 데이터의 무결성을 검증하기 위한 메커니즘을 적용하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 외부 객체와 통신할 경우 사용하는 +보안 통신 매커니즘은 아래와 같은 통신 데이터 무결성 검증방안을 충족하여 무결성 침해 방지를 수행해야 한다 +[방안 1] 통신 데이터 무결성 보호방안 +무선 네트워크를 통해 송수신되는 모든 데이터의 보호를 위해 아래와 같이 보안 통신 데이터 무결성 보호방안을 적용한다. +통신 데이터 무결성 보호방안 +해시, MAC 등의 무결성검증 패킷 예시 + +#### 3.11.10 [WS-10] 무선 통신 데이터 무결성 검증 + +항목 +내용 +보안통신 +설계 +•  인증, 무결성 보호, 암호화, 재전송 방지를 조합하여 통신 채널 또는 엔드포인트 간 보호 구성 +보안 +프로토콜 +•  Best Practice 통신 프로토콜 지원 +TLS (Transport Layer Security) +WPA (Wi-Fi Protected Access) +PACE (Password Authenticated Connection Establishment) +AES (Advanced Encryption Standard) +•  프로토콜 구현 정확성을 검증하기 위한 주기적인 취약점 검토 +예외 +적용시 +보완 조치 +•  상호운용성 확보 등으로 인해 보안 수준이 낮은 프로토콜을 사용해야 하는 경우, 다음과 같은 보 +완책 적용 +해당 장비가 인가된 구역 내에서만 동작하고, 외부 접근이 불가능한 경우 +불완전 프로토콜을 VPN(가상 사설망)으로 터널링하여 외부 노출을 방지하는 경우 +•  통신이 불안전한 상태로 수행될 때, 사용자에게 인지시킬 수 있는 경고 / 알림 기능 제공 +•  물리적·논리적 보호조치가 충분하거나, 신뢰된 인증 기반 구조(예: 인증서, 제조사 체인)를 통해 보 +완이 가능한 경우 예외 + + +![이미지 196-0](images/p0196_img0.png) + + +--- + +01 +02 +03 +197 +데이터에 적용되는 보안 통신 메커니즘이 적절한지는 아래와 같은 무선통신 데이터 보호 검증방안을 통해 검증한다. +통신 데이터 무결성 검증 방안 +항목 +검증방안 +일반 +•  인증 및 무결성 보호에 사용되는 비밀 값이 노출되거나 악용되지 않는지 여부 +•  변조된 메시지가 무결한 것으로 허용되지 않는지 여부 +•  비인가된 메시지가 인증된 것으로 허용되지 않는지 여부 +•  채널 기반 통신을 사용하는 경우, 중간자 공격이 성공할 수 없는지의 여부 +비밀 값 +•  생산 과정에서 삽입된 비밀 값이 네트워크 통신 중에 노출되지 않는지 여부 +•  변조된 메시지가 무결한 것으로 허용되지 않는지 여부 +•  비인가된 메시지가 인증된 것으로 허용되지 않는지 여부 +•  채널 기반 통신을 사용하는 경우, 중간자 공격이 성공할 수 없는지의 여부 +통신 +•  통신 메커니즘을 통해 비밀 값이 노출되지 않는지 여부 +•  변조된 메시지가 무결한 것으로 허용되지 않는지 여부 +•  비인가된 메시지가 인증된 것으로 허용되지 않는지 여부 +•  채널 기반 통신을 사용하는 경우, 중간자 공격이 성공할 수 없는지의 여부 +PKI +•  위조된 인증서가 허용되지 않는지 여부 +•  변조된 메시지가 무결한 것으로 허용되지 않는지 여부 +•  비인가된 메시지가 인증된 것으로 허용되지 않는지 여부 +•  채널 기반 통신을 사용하는 경우, 중간자 공격이 성공할 수 없는지의 여부 +서드파티 +•  제3자의 응답이 조작될 수 있는지 여부 +•  변조된 메시지가 무결한 것으로 허용되지 않는지 여부 +•  비인가된 메시지가 인증된 것으로 허용되지 않는지 여부 +•  채널 기반 통신을 사용하는 경우, 중간자 공격이 성공할 수 없는지의 여부 + + +--- + +198 +보안 +요구사항 +무선 네트워크로 전송되는 데이터가 이전에 전송된 내용이 재전송 공격에 악용되지 않도록 보호해야 한다. +목적 +공격자가 정상적인 통신 패킷을 가로채어 나중에 재전송함으로써 인증 우회나 서비스 오용을 시도하는 것을 +방지한다. +점검 기준 +재전송 공격 방지 + +## 1. 무선 네트워크 통신에서 송수신되는 보안·프라이버시 자산에 대해, 재전송 공격 방지 메커니즘의 적용 여부 + +구현 및 점검 방안 +1 + +## 01. 무선 네트워크 통신에서 송수신되는 보안·프라이버시 자산에 대해, 재전송 공격 방지 메커니즘을 적용하는지 + +확인한다. +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 외부 객체와 통신할 경우, 사용하는 +통신 메커니즘은 아래와 같은 재전송 공격 방지 검증방안을 충족하여 재전송 공격 방지를 수행해야 한다. +[방안 1] 재전송 방지 구현방안 +무선 네트워크를 통해 송수신되는 모든 자산의 보호를 위해 아래와 같이 재전송 방지 방안을 적용한다. +•  각 통신 세션의 메시지에 세션 ID와 카운터를 부여하여, 전체 통신 및 개별 메시지의 재전송 차단 +•  타임스탬프 또는 1회용 암호화를 사용하여 반복 전송 방지 누락 +•  가능한 경우 재전송 방지 기능이 내장된 표준 프로토콜(TLS, SSH, IPsec 등) 우선 적용 +•  데이터 요청이 단순 조회 등 수신 측의 상태 변화를 일으키지 않는 경우, 위험 평가 결과에 따라 재전송 방지 기능 적용 생략 +자산에 적용되는 재전송 공격 방지방안이 적절한지는 아래와 같은 재전송 공격 방지 검증방안을 통해 검증한다. +항목 +검증방안 +일반 +•  이미 수락된 메시지의 복제본을 다시 수락하는지 여부 +순서 번호 +•  보안 자산 및 네트워크 자산의 통신 중 중복된 순서 번호를 가진 수신 메시지는 수락되지 않는가의 +여부 +타임스탬프 +•  보안 자산 및 네트워크 자산의 통신 중 비정상적인 타임스탬프를 가진 수신 메시지는 수락되지 않는 +가의 여부 +1회용 +암호키 +•  암호화 키가 가로채지거나 추출될 수 없어야 하는가의 여부 +•  이미 수락된 메시지의 복제본은 다시 수락되지 않는가의 여부 + +#### 3.11.11 [WS-11] 무선 통신 재전송 공격 방지 구현 + +재전송 공격 방지 검증방안 + + +--- + +01 +02 +03 +199 +보안 +요구사항 +보안 및 프라이버시 자산에 영향을 미치는 소프트웨어(펌웨어 포함)에 대해 업데이트 기능을 반드시 제공해야 한다. +특히 인터넷에 연결된 경우에는 자동 또는 승인 기반 등 다양한 방식으로 업데이트가 이루어질 수 있어야 한다. +(안전 상 이유, 불변 소프트웨어, 대체 보호 조치가 있는 경우는 예외) +목적 +보안 및 프라이버시 자산에 영향을 미치는 소프트웨어/펌웨어에 대해 업데이트 기능을 제공하여 소프트웨어 공급망 +위협을 방지한다. +점검 기준 +업데이트 메커니즘 제공 + +## 1. 보안·프라이버시 자산에 영향을 미치는 소프트웨어/펌웨어의 업데이트 가능한 메커니즘 제공 여부 + + +## 2. 기능 안전상 예외에 해당하는 경우, 관련 근거와 대체 보호조치 존재 여부 + + +## 3. 인터넷 연결 시, 하나 이상의 업데이트 방식 제공 여부 + +구현 및 점검 방안 +1 + +## 01. 보안·프라이버시 자산에 영향을 미치는 소프트웨어/펌웨어의 업데이트 가능한 메커니즘을 제공하는지 + +확인한다. +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 이에 영향을 미치는 업데이트 기능을 +제공할 경우, 안전한 업데이트 메커니즘을 제공해야 한다. +•  업데이트 기능은 보안 업데이트가 포함된 소프트웨어에 기반하여 업데이트를 제공해야 하고, 이에 대한 버전정보를 (신규) +업데이트 시마다 제공해야 한다. +[방안 1] 업데이트 메커니즘의 구현 +업데이트 메커니즘은 자동 업데이트, 예약 업데이트, 수동 업데이트 방식으로 구분할 수 있으며 각 사용자의 환경에 따라 이중 +하나의 방식을 제공하거나 선택할 수 있게 제공해야 한다. +업데이트 메커니즘의 상세한 구현은 아래와 같은 상세 구현방안을 통해 수행할 수 있다. 구현을 수행한 후 업데이트 정책, +주기, 절차 및 롤백 방안을 포함한 종합적인 업데이트 관리 가이드를 문서화 관리해야 한다. +항목 +내용 +자동 업데이트 +•  장비에 대한 인적 개입 없이 자동으로 업데이트 수행 +예약 업데이트 +•  사용자 승인 하에 예약된 설치 수행 +수동 업데이트 +•  운영 환경의 안전성 보장 필요 시, 사용자 승인 또는 감독하에 업데이트 수행 + +#### 3.11.12 [WS-12] 업데이트 메커니즘 제공 + +업데이트 메커니즘의 분류 + + +--- + +200 +2 + +## 01. 기능 안전상 예외에 해당하는 경우, 관련 근거와 대체 보호조치가 존재하는지 확인한다. + +•  기능 안전상, 불변 소프트웨어 등 업데이트 기능을 제공하지 않는 예외에 해당해야 한다. +•  업데이트 기능을 제공하지 않을 경우 관련 근거의 문서화와 대체 보호조치를 구현해야 한다. +[방안 1] 예외에 대한 관련 근거와 대체 보호조치 +업데이트를 제공하지 않을 경우의 예외에 대한 근거와 대체 보호조치를 구현한다. +예외 근거의 경우 안전상의 이유, 적용상의 이유, 불변 소프트웨어인 점을 제시할 수 있다. +예외 구성요소에 대한 대체 보호조치 방안은 크게 물리적 격리, 접근 제어, 모니터링 강화 등으로 제시할 수 있다. +불변 소프트웨어 예시 +업데이트 매커니즘의 상세 구현방안 +항목 +내용 +일반 +•  여러 소프트웨어 구성요소가 존재할 경우, 하나의 메커니즘이 복수의 구성요소를 동시에 +관리가능 +•  업데이트 과정 중 이미지 검증 실패 등 오류 발생 시, 롤백 정책을 통해 이전버전 복원 보장 +•  보안 업데이트와 응용 프로그램 업데이트는 분리 가능한 구조로 구현 +•  장비의 전력·자원 제약, 장기간 배터리 구동 등의 환경에서는 장비 교체나 격리를 통해 보안성 +유지 +자동 +업데이트 +•  기기 자체 또는 중앙 관리 시스템에 의해 업데이트 수행될 수 있으며, 사용자는 승인·예약·알림 +수준에서 개입가능 +•  보안 관련 중요 취약점에 대해 업데이트 수행 +•  자동화 수준은 장비 환경에 따라 달라질 수 있으며 다음과 같이 분류가능 +· 완전 자동 업데이트) 장비가 자체 판단으로 업데이트 수행 +· 반자동 업데이트) 사용자 승인 후 수행 +· 스케줄 기반 업데이트) 관리자가 승인한 일정기반 자동수행 +•  안전성, 실시간성, 또는 네트워크 호환성 문제로 인해 완전 자동화가 어려운 경우 사용자 승인 +또는 현장 검증 절차를 추가하여 안전한 업데이트 수행 +예약 +업데이트 +•  일반 기능 업데이트에 대한 승인 기반 업데이트 수행 +수동 +업데이트 +•  사용자 요청에 의한 업데이트 수행 +•  웹이나 특정 인터페이스를 통한 업데이트 파일 업로드 지원 + + +![이미지 200-0](images/p0200_img0.png) + + +--- + +01 +02 +03 +201 +3 + +## 01. 인터넷 연결 시, 하나 이상의 업데이트 방식을 제공하는지 여부를 확인한다. + +•  인터넷과의 연결성이 있을 경우, 자동 업데이트, 사용자 승인 하에 업데이트 설치 예약, 수동 업데이트 중에서 하나 이상의 +업데이트 방식을 제공해야 한다. +[방안 1] 업데이트 제공방안 +인터넷과의 연결성이 있을 경우 자동 업데이트, 사용자 승인 하에 업데이트 설치 예약, 수동 업데이트 중에서 하나 이상의 +업데이트 방식을 제공해야 한다. +이를 위한 업데이트 방식의 선택을 아래와 같이 제공할 수 있다. +자동 업데이트 지원 예시 +수동 업데이트 지원 예시 + + +![이미지 201-0](images/p0201_img0.png) + + +![이미지 201-1](images/p0201_img1.png) + + +--- + +202 +보안 +요구사항 +무선 네트워크를 통한 원격 업데이트 시, 자동 또는 수동으로 업데이트되는 소프트웨어 및 펌웨어의 무결성을 +반드시 검증해야 한다. +목적 +무선 네트워크를 통한 원격 업데이트 시, 자동 또는 수동으로 업데이트되는 소프트웨어 및 펌웨어의 무결성과 +진본성을 검증해 소프트웨어 공급망 위협을 방지한다. +점검 기준 +무선 네트워크 업데이트 무결성 및 진본성 검증 + +## 1. 업데이트 시 설치되는 소프트웨어의 무결성 및 진본성을 검증하는 메커니즘 존재 여부 + + +## 2. 무결성 또는 진본성 검증에 실패한 소프트웨어의 설치를 차단하고 복구하는 기능 존재 여부 + + +## 3. 검증 결과 및 관련 이벤트가 로그로 남고, 필요시 관리자 통보 여부 + +구현 및 점검 방안 +1 + +## 01. 업데이트 시 설치되는 소프트웨어의 무결성 및 진본성을 검증하는 메커니즘이 존재하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 소프트웨어/펌웨어 무선 업데이트 +기능이 존재하는 경우, 기능의 수행 시 무결성 및 진본성을 검증하는 메커니즘이 있는지 확인한다. +[방안 1] 소프트웨어 검증 메커니즘 +아래와 같은 업데이트 무결성 및 진본성을 검증하는 메커니즘에 기반하여 소프트웨어 업데이트를 수행한다. +업데이트 검증 메커니즘이 적절한지는 아래와 같은 무결성 검증방안을 통해 검증한다. +항목 +검증방안 +업데이트 +메커니즘 +•  신뢰 앵커에 기반해 업데이트 파일의 무결성과 인증을 암호학적 검증 +•  장비 자체 또는 신뢰된 외부 장비에서 검증 수행 +•  외부 장비가 검증을 수행하는 경우 검증된 업데이트는 보안 채널을 통해 안전하게 전송 및 설치 +•  보안 채널은 통신 데이터의 기밀성과 무결성을 유지하는 경로로, 인가된 인력에 의한 로컬 설치 절 +차 포함 +관리방안 +•  제조사는 필요 시 공급사 외부의 대체 소프트웨어 설치를 위한 안전한 절차 제공 +•  보안 업데이트 적용 후 초기화 또는 인증정보 재입력이 필요한 경우, 해당 절차를 사용자에게 명확 +히 고지하고 관리 절차 마련 +•  업데이트 과정에서 기밀 암호키가 포함된 경우, 보안 통신 메커니즘을 함께 적용해 키의 노출방 +지 수행 +항목 +검증방안 +일반 +•  무결성이 유효하지 않은 소프트웨어 업데이트가 설치되지 않은가의 여부 +•  인증이 유효하지 않은 소프트웨어 업데이트가 설치되지 않은가의 여부 +서명 +•  서명되지 않은 소프트웨어 업데이트가 설치되지 않음을 확인 +•  변조된 서명이 포함된 소프트웨어 업데이트가 설치되지 않았나의 여부 +•  수정된 업데이트 파일이 원본 서명으로 검증 통과하지 않도록 구현되어 있는가 여부 +•  인가되지 않은 엔티티의 서명을 포함한 소프트웨어 업데이트가 설치되지 않은가의 여부 +보안통신 +•  인가되지 않은 출처의 소프트웨어 업데이트가 설치되지 않은가 확인 +•  보안 통신 채널이 중간자 공격을 통해 인가된 업데이트 출처를 사칭할 수 없음의 확인여부 +•  통신 중 변조된 업데이트 파일이 설치되지 않는가의 여부 +접근제어 +•  원본 업데이트의 해시를 재사용한 변조된 업데이트 파일이 설치되지 않는가의 여부 +•  지원되지 않는 해시 함수로 생성된 해시를 사용하는 업데이트가 설치되지 않는가의 여부 +•  인가되지 않은 엔티티가 제공한 소프트웨어 업데이트가 설치되지 않는가의 여부 + +#### 3.11.13 [WS-13] 무선 네트워크 업데이트 무결성 및 진본성 검증 + +업데이트 메커니즘 수행방안 +업데이트 소프트웨어 검증 방안 + + +--- + +01 +02 +03 +203 +2 + +## 01. 무결성/진본성 검증에 실패한 소프트웨어의 설치를 차단하고 복구하는 기능이 존재하는지 확인한다. + +•  업데이트 시 설치되는 소프트웨어의 무결성 및 진본성을 검증하는 메커니즘에 기반하여 유효한 소프트웨어만 설치되어야 +한다. +•  업데이트 중 무결성/진본성 검증에 실패할 경우 소프트웨어의 설치를 차단하고 복구하는 기능이 존재해야 한다. +[방안 1] 무결성/진본성 검증 실패시 처리방안 +업데이트 대상 소프트웨어 파일의 무결성과 진본성의 검증을 실패할 경우 설치 방지 및 검증 실패화면을 사용자에게 제공하고 +이전 버전 소프트웨어 상태로의 안전한 복귀를 수행해야 한다. +이전 버전 상태의 소프트웨어로 복귀하였을 때에 기존의 데이터와 설정에 오류가 존재하거나 복귀상태에 대한 이상이 +존재해서는 안 된다. +3 + +## 01. 검증 결과 및 관련 이벤트가 로그로 남고, 필요시 관리자 통보를 수행하는지 확인한다. + +•  업데이트의 검증 결과와 관련 이벤트는 아래와 같은 무결성 검증방안 하에 검증되어 로그로 저장되어야 한다. +•  업데이트의 검증 결과와 관련 이벤트에 대한 정보는 필요시 관리자에게 통보되어야 한다. +[방안 1] 관련 이벤트 저장 및 관리자 보고 +업데이트의 검증 결과와 관련 이벤트에 대한 정보는 로그로 저장되어야 하며 필요한 경우 관리자에게 고지되어야 한다. +필요한 상황의 예는 다음과 같이 볼 수 있다. +업데이트 검증이 실패한 경우 +•  무결성 검증 실패, 서명(Signature) 불일치, 체크섬 오류, 패키지의 확실한 변조 +업데이트가 정상적으로 완료되지 않은 경우 +•  설치 중단, 파일 일부만 반영, 롤백 발생, 중간 오류 발생 +업데이트 후 정상 초기동작 검증에서 이상 징후 발생 +•  서비스 재기동 실패, 특정 모듈 비정상, 기능 장애 +업데이트가 보안 패치 또는 중요 기능 패치일 때 +정책적으로 관리자 통보가 요구되는 경우 +검증 실패화면 예시 + + +![이미지 203-0](images/p0203_img0.png) + + +--- + +204 +보안 +요구사항 +보안 자산 또는 네트워크 자산을 보호하기 위해 사용하는 암호화 기술이 최신 보안 모범사례를 따라야 한다. 또한 각 +암호화 사용 목적과 예상 수명을 명확히 문서화하여 체계적인 암호화 정책 관리가 이루어져야 한다. +목적 +보안 자산 또는 네트워크 자산을 보호하기 위해 사용하는 암호화 기술의 경우 국제 표준 기관(NIST, IETF 등)에서 +권장하는 강력한 암호화 알고리즘과 같은 최신 보안 모범사례를 준수하여 암호화 무력화, 데이터노출 및 기밀성 +훼손을 방지한다. +점검 기준 +암호화 알고리즘 적정성 + +## 1. 보호해야 할 자산에 적용된 암호 알고리즘의 Best Practice 준수 여부 + + +## 2. 각 암호화 사용 목적의 명확한 문서화 여부 + + +## 3. 해당 암호화 알고리즘의 예상 수명 동안 사용 가능 여부 + +구현 및 점검 방안 +1 + +## 01. 보호해야 할 자산에 적용된 암호 알고리즘이 Best Practice (최신 보안 모범사례)를 준수하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 암호화 알고리즘이 사용될 경우, +보호 자산에 적용된 알고리즘은 최신 보안 모범사례를 준수해야 한다. +[방안 1] 최신 보안 모범사례 +최신 보안 모범사례란 ISO/IEC 관련 표준, SOG-IS의 “SOGIS agreed Cryptographic Mechanisms”, ETSI TS 119 312, +ENISA 및 NIST SP 800 시리즈, BSI TR-02102-1 등에서 제시하는 권고에 해당한다. 암호화 적정성을 준수하기 위해 이를 +준수해야 한다. +•  WPA2(WPA2-PSK/AES-CCMP) 이상 사용 +•  웹 TLS 1.2 이상만 허용, 서버 설정에서 ssl_protocols 제한 필요 +•  AES-GCM 기반 데이터 암호화 적용 +2 + +## 01. 각 암호화의 사용 목적의 명확한 문서화 여부를 확인한다. + +•  각각의 암호화 알고리즘의 사용 목적은 명확히 문서화되어야 한다. +[방안 1] 암호화 알고리즘의 문서화 방안 +암호화 알고리즘에 대해 사용하는 암호화 알고리즘의 종류, 적용 목적, 사용 대상을 명시한 보안 정책 문서화를 수행한다. +알고리즘 문서화 정리 예시 + +#### 3.11.14 [WS-14] 암호화 적정성 + + + +![이미지 204-0](images/p0204_img0.png) + + +--- + +01 +02 +03 +205 +3 + +## 01. 암호 알고리즘의 예상 사용 수명동안 사용 가능한지 확인한다. + +•  각각의 암호화 알고리즘이 예상 수명 동안 사용 가능해야 한다. +[방안 1] 암호화 알고리즘의 예상수명 확인방안 +암호화 알고리즘에 대해 SOG-IS 등에서 주기적으로 갱신되는 암호 유효기간을 확인하여 암호화 알고리즘 수명 및 폐지 +여부를 주기적으로 확인한다. +상호운용성을 위해 구형 암호가 필요한 경우, 단기적인 허용은 가능하지만 보안 보증 수준이 낮아질 수 있다. 하드웨어 기반 +Root of Trust 등으로 인해 암호화 교체가 불가능한 장비는, 해당 암호 알고리즘의 권장 사용 기간이 장비의 예상 수명보다 +짧지 않도록 보장한다. + + +--- + +206 +보안 +요구사항 +사용하는 모든 기밀 암호키는 최소 112비트 이상의 보안 강도를 가져야 하며, 암호키 생성 시에는 최신 보안 +모범사례를 따라야 한다. +목적 +현재의 컴퓨팅 환경에서 무차별 대입 공격에 견딜 수 있는 충분한 키 길이를 보장하고, 암호학적으로 안전한 +난수 생성기(CSPRNG)를 사용한 키 생성, 적절한 키 수명 관리, 키 용도별 분리 사용 등을 통해 암호화 시스템의 +전반적인 보안성을 확보한다. +점검 기준 +적절한 암호화 키 Best Practice 준수 + +## 1. 암호화 키의 안전한 방식 생성 여부 + + +## 2. 적절한 수명 관리(만료, 삭제) 여부 + + +## 3. 적절한 보안 강도(112bit 이상) 여부 + + +## 4. 용도 별로 1개의 키 사용 여부 + + +## 5. 여러 장비 간 동일 키 복제 여부 + + +## 6. 사용하는 모든 키에 대한 정보 문서화 여부 + +구현 및 점검 방안 +1 + +## 01. 암호화 키가 안전한 방식으로 생성되는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 암호화 알고리즘이 사용될 경우, +적절한 암호화 키를 사용하는지 확인해야 한다. +•  알고리즘이 사용될 경우 보호해야 할 자산에 적용된 암호화 알고리즘은 안전한 방식으로 생성되어야 한다. +[방안 1] 암호화 키 생성방안 +암호화 키는 아래와 같이 안전한 방식을 통해 생성 및 관리한다. +•  신뢰성 있는 RNG(Random Number Generator)를 사용하고, 충분한 엔트로피 보장 +•  키 파생은 검증된 표준 절차(NIST SP 800-108r1, SP 800-132, ISO/IEC 11770 등) 기반 수행 +•  비밀번호 기반 키 파생(PBKDF 등)을 사용하는 경우, 112비트 미만의 강도를 허용할 수 있으나 위험 문서화 및 보안대책 +병행 +•  상호운용성/표준 프로토콜 제약으로 인해 강도 편차가 발생하는 경우, 보호 자산에 미치는 위험 평가 및 기록 +2 + +## 01. 암호화 키가 적절한 수명관리를 사용하는지 확인한다. + +•  각각의 암호화 알고리즘이 사용하는 암호화 키는 적절한 보안 강도(112bit 이상)를 준수해야 한다. +[방안 1] 수명 및 정책관리 방안 +암호화 키는 아래와 같이 수명 및 정책 관리 방안을 통해 관리한다. +•  CCK의 보안 강도는 RNG(난수 발생기)의 엔트로피, 키 길이, 사용 알고리즘에 따라 결정되므로 이 세 요소의 품질 보장 +•  장기 사용되는 CCK는 공격 내성 및 저장 보안성 증진 설계 +•  단기 세션 키는 완전 순방향 보안을 고려하여 세션별 재생성 설계 +•  동일한 CCK를 여러 장비에 복제·재사용하지 않도록 하고, 사용이 종료된 키는 즉시 안전삭제 +•  하나의 CCK는 단일 목적으로만 사용하며, 용도별 분리 원칙 준수. +3 + +## 01. 암호화 키가 적절한 보안 강도를 준수하는지 확인한다. + +•  각각의 암호화 알고리즘이 사용하는 암호화 키는 적절한 수명 관리(만료, 삭제)를 수행해야 한다. +[방안 1] 보안강도 방안 +암호화 키는 보호 대상 자산의 중요도와 위협 수준을 고려하여 적절한 보안 강도를 가진 알고리즘을 선택한다. + +#### 3.11.15 [WS-15] 적절한 암호화 키 사용 + + + +--- + +01 +02 +03 +207 +3 +적절한 보안강도를 가진 알고리즘의 예시는 아래와 같다. +4 + +## 01. 암호화 키가 용도별로 고유한 1개의 키를 사용하는지 확인한다. + +•  각각의 암호화 알고리즘이 사용하는 암호화 키는 용도 별로 고유한 하나의 키에 해당해야 한다. +[방안 1] 용도별 키 사용방안 +암호화 키는 아래와 같은 용도별 키 사용방안을 참고하여 사용 목적에 따라 용도 구분을 적용하고, 동일 키를 복수 목적에 +사용하는 것을 금지한다. +•  데이터 암호화용, 서명용, 무결성 검증용, 키 교환용 등 기능별로 별도 키 사용 +•  세션 암호화 키와 저장용 암호화 키를 구분하여 운용 +•  인증/로그인 관련 키(PBKDF)는 데이터 암호화 키와 혼용 금지 +•  장비 간 통신용 키는 시스템 내부 저장용 키와 분리 +•  관리 키와 서비스 키는 권한 기준으로 분리 관리 +•  공개키 기반구조(PKI) 사용 시, 루트·중간·서버·클라이언트 인증서 키 구분 +5 + +## 01. 장비간 동일한 키를 복제하여 사용하는지 확인한다. + +•  각각의 암호화 알고리즘이 사용하는 암호화 키는 여러 장비 간 동일 키를 복제하여 사용되어서는 안된다. +[방안 1] 동일 키 관리방안 +동일 암호화 키 재사용을 금지하고 확산을 방지하여 키 노출 시의 피해 범위를 최소화한다. +•  동일 암호화 키(CCK)를 여러 장비·다른 시스템에 복제하여 배포하는 것을 금지 +•  어쩔 수 없이 동일 키가 여러 장비에 존재해야 하는 경우, 해당 위험을 문서화하고 보호조치(보안 영역 저장, 접근통제, +HSM 등) 적용 +•  동일 키 재사용 기간 최소화, 주기적 키 롤오버(Key Rotation) 정책 적용 +•  동일 키가 재사용되는 프로토콜 환경에서는 추가적인 안전장치(Nonce 관리, IV 중복 방지, AEAD 사용 등) 적용 +•  동일 키 노출(Potential Leakage) 징후 발생 시 즉시 폐기 및 신규 키 재배포 +•  동일 키의 용도 혼용 방지(Encryption Key ≠ MAC Key) +적절한 보안강도 알고리즘선택 예시 +구분 +알고리즘 +대칭키 암호 +AES-128/192/256 +비대칭키 암호 +RSA-2048/3072, ECC P-256/384 +해시 +SHA-256/384/512 +MAC +HMAC-SHA256 이상 +키 교환 +ECDH(Elliptic Curve Diffie-Hellman) + + +![이미지 207-0](images/p0207_img0.png) + + +--- + +208 +6 + +## 01. 사용하는 모든 키에 대한 문서화를 수행하는지 확인한다. + +모든 암호화 알고리즘이 사용하는 암호화 키에 대한 정보는 문서화되어야 한다. +[방안 1] 암호화 키 문서화 방안 +암호화 알고리즘에 대해 사용하는 암호화 키의 종류, 길이, 수명, 용도를 명시한 보안 정책 문서화를 수행한다. +알고리즘 문서화 정리 예시 + + +![이미지 208-0](images/p0208_img0.png) + + +--- + +01 +02 +03 +209 +보안 +요구사항 +사전 설치되는 기밀 암호키는 실질적으로 장비별로 고유하게 관리되어야 한다. 단, 초기 신뢰 수립이나 특정 기능 +수행을 위해 공유 키가 필요한 경우에는 해당 목적과 보안 조치를 명확히 문서화해야 한다. +목적 +동일한 암호키를 여러 장비에서 공유할 경우 하나의 장비에서 키가 유출되면 전체 시스템의 암호화 보호가 동시에 +무력화될 수 있는 위험을 방지한다. +점검 기준 +암호화 키 고유성 + +## 1. 암호화 키의 장비마다 고유한 값 여부 + + +## 2. 고유하지 않은 경우 초기 신뢰 수립 용이나 특정 기능 수행을 위한 공유 키 값 여부 + +구현 및 점검 방안 +1 + +## 01. 암호화 키의 장비마다 고유한 값을 사용하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 암호화 알고리즘과 사전 설치된 +암호화 키가 존재할 경우 해당 기밀 암호키(CCK)는 장비별로 고유해야 한다. +[방안 1] 암호화 키의 고유성 +암호화 키는 아래와 같은 고유성 관리방안을 통해 설계 및 관리한다. +•  제조 단계에서 장비마다 다른 CCK를 자동 생성하도록 프로세스 설계. +•  CCK는 장비 고유 식별정보(MAC, 모델명 등) 으로부터 단순 유도되지 않도록 설계 +•  난수 기반 CCK 생성 알고리즘을 사용하여 예측 불가능성 확보 +•  장비별 CCK를 안전하게 기록·보관할 수 있는 제조 데이터베이스(보안 영역) 운영 수행 +•  동일 제품군 내에서 CCK가 체계적으로 재사용되지 않음을 주기적 검증 +2 + +## 01. 고유하지 않은 경우 초기 신뢰 수립 용이나 특정 기능 수행을 위한 공유 키 값에 해당하는지 확인한다. + +•  암호화 키가 고유하지 않은 경우 초기 신뢰 수립 용도나 특정기능 수행을 위한 공유 키 값에 해당해야 한다. +[방안 1] 암호화 키의 공유키 여부 +암호화 키는 아래와 같이 공유키 관리방안을 통해 관리한다. +•  초기 신뢰관계 수립(예: 장비 등록, 인증 서버 초기 핸드셰이크) 등 인가된 조건에서만 사용되는 공유 키는 사용 후 폐기 또는 +갱신절차 포함 +•  장비 기능 수행상 필수적인 공유 파라미터(예: 네트워크 장비 설정, 업데이트 검증용 키)는 관리 권한 및 접근 통제 절차 +별도수립 +•  공유 키 사용 시 범위·기간·관리 주체를 명확히 문서화하여 정적 키 남용방지 + +#### 3.11.16 [WS-16] 암호화 키 고유성 + + + +--- + +210 +보안 +요구사항 +주요 자산과 관련된 내부 보안 활동 및 이벤트에 대해 로그를 반드시 기록해야 한다. +목적 +주요 자산과 관련된 내부 보안 활동 및 이벤트에 대한 로그를 기록하여 보안 이벤트 분석 부재 위협을 방지한다. +점검 기준 +로그 메커니즘의 적용 가능성 + +## 1. 개인정보 자산 및 보호와 관련한 내부 이벤트에 대해 로그 메커니즘 적용 여부 + + +## 2. 사용자가 로그에 접근할 경우, 읽기 전용으로만 로그 접근 가능 여부 + + +## 3. 로그 메커니즘은 관련 이벤트에 대한 로그 데이터를 장비의 영구 저장소에 기록하고, 충분한 기간 동안의 + +보관가능 여부 + +## 4. 장비의 영구 저장소에 저장되는 로그 데이터의 충분한 개수 보장 여부 + +구현 및 점검 방안 +1 + +## 01. 개인정보 자산 및 보호와 관련한 내부 이벤트에 대해 로그 메커니즘을 적용하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 개인정보 자산, 금융 자산 중 하나 이상 처리하며 관련 개인정보 자산 및 보호와 관련 내부 이벤트가 +존재할 경우, 로그 메커니즘이 적용되는지 확인한다. +[방안 1] 로그 메커니즘 적용 대상 +로봇 운영 시 발생하는 주요 이벤트(로그인/로그아웃, 설정 변경, 시나리오 실행 /중단, 오류 발생 등)에 대해 감사 로그 생성 +기능을 구현한다. 이벤트/감사 로그에는 사용자 ID, 장비 식별자, 이벤트 시간, 이벤트 정보를 필수 포함한다. +설계 시 로그 목적·대상·보존 기간을 명확히 정의하고, 필요 최소한의 개인정보만 포함 및 로그 파일에 대한 접근 통제, 암호화 +저장, 삭제·변조 탐지 기능을 적용하도록 설계한다. +2 + +## 01. 사용자가 로그에 접근할 경우, 읽기 전용으로만 로그 접근이 가능한지 확인한다. + +•  로그 메커니즘이 적용될 경우 접근 시 읽기 전용으로만 로그 접근이 가능해야 한다. +[방안 1] 읽기전용 로그 체계 +로그 데이터를 읽기 전용으로만 제공한다. 로그 데이터의 무결성을 확보해야 할 경우 각 로그 레코드 또는 로그 블록을 +HMAC 또는 디지털 서명으로 보호하는 로그 서명이나 해시 검증을 적용한다. +읽기전용 로그 예시 + +#### 3.11.17 [WS-17] 로그 생성 + + + +![이미지 210-0](images/p0210_img0.png) + + +--- + +01 +02 +03 +211 +3 + +## 01. 로그 메커니즘은 관련 이벤트에 대한 로그 데이터를 장비의 영구 저장소에 기록하고, 충분한 기간 동안의 + +보관가능한지 확인한다. +•  로그 메커니즘은 가장 최근 발생한 이벤트에 대한 로그 데이터를 장비의 영구 저장소에 저장해야 한다. +•  로그 메커니즘은 충분한 설정기간동안 로그 데이터를 장비의 영구 저장소에 저장해야 한다. +•  단, 관련 로그 데이터가 장비 외부에 저장되는 경우는 예외로 한다. +[방안 1] 로그 기간 보장 +전원 재기동 시에도 로그 손실이 없도록 플래시 메모리 등 영속 저장소에 기록하고, 저장 기간은 정책상 설정한 충분한 기간과 +아래와 같은 근거를 감안하여 설정한다. +•  법/규제 요구사항 +•  사고 대응 및 포렌식 필요성 +•  시스템 수명과 기록 빈도 +•  위험평가 기반의 정책 설정 +4 + +## 01. 장비의 영구 저장소에 저장되는 로그 데이터가 충분한 개수를 보장하는지 확인한다. + +•  로그 메커니즘은 최신 이벤트를 포함한 최소 개수 이상의 최근 로그 데이터를 장비의 영구 저장소에 저장해야 한다. +[방안 1] 로그 개수 보장 +지정 개수 또는 용량 도달 시 가장 오래된 로그부터 교체하여 일정 개수의 최근 이벤트가 항상 남도록 로그 로테이션 정책을 +적용한다. +로그 저장기간의 충분성 예시 +로그데이터의 충분성 예시 + + +![이미지 211-0](images/p0211_img0.png) + + +![이미지 211-1](images/p0211_img1.png) + + +--- + +212 +보안 +요구사항 +장비의 영구 저장소에 저장되는 모든 로그 데이터에는 타임스탬프 등 시간 관련 정보가 반드시 포함되어야 한다. +목적 +장비의 영구 저장소에 저장되는 모든 로그 데이터에는 타임스탬프 등 시간 관련 정보를 포함시켜 타임스탬프 조작 +및 부재 위협을 방지한다. +점검 기준 +영구 저장된 로그 데이터의 시간 정보 + +## 1. 장비의 영구 저장소에 저장되는 모든 로그 데이터 타임스탬프 포함 여부 + + +## 2. 장비의 영구 저장소에 저장되는 모든 로그에 타임스탬프를 포함하지 않으면, 시간 관련 정보 포함 여부 + +구현 및 점검 방안 +1 + +## 01. 장비의 영구 저장소에 저장되는 모든 로그 데이터가 타임스탬프를 포함하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 개인정보 자산, 금융 자산 중 하나 이상 처리하며 운영 중 발생하는 내부 이벤트에 대한 로그 +메커니즘, 감사 로그 메커니즘이 존재할 경우, 로그는 타임스탬프를 포함해야 한다. +장비가 실시간 정보를 사용하는가? +문서상 로그데이터가 발생한다고 명시된 이벤트를 발생시키는가? +[방안 1] 타임스탬프 기반 로그 관리 +장비 내에서 RTC 또는 네트워크 동기화(NTP 등)를 통해 정확한 시간을 유지한다. 이에 따라 발생하는 모든 로그 이벤트에 +정확한 발생 시각(YYYY-MM-DD HH:MM:SS 형식)을 기록한다. +로그 분석 및 상호 장비 간 로그 연동 시에는 동일 시간대를 기준으로 비교할 수 있도록 표준 시간대(UTC 또는 KST 등)로 통일 +저장한다. +2 + +## 01. 장비의 영구 저장소에 저장되는 모든 로그에 타임스탬프를 포함하지 않으면, 시간 관련 정보를 포함하는지 + +확인한다. +•  실시간 정보가 사용 불가능한 상태인 경우, 장비에 보관된 로그데이터는 타임스탬프를 대체할 시간관련 정보를 포함해야 +한다. +[방안 1] 시간정보 미포함 로그 관리 +실시간 시계가 없는 장비의 경우, 아래와 같은 시간정보 미포함 로그 관리방안을 통해 시간정보를 대체 기록한다. + +#### 3.11.18 [WS-18] 시간 정보 포함 + +타임스탬프 포함 로그 예시 + + +![이미지 212-0](images/p0212_img0.png) + + +--- + +01 +02 +03 +213 +•  이벤트 발생 순서(Sequence Number) 또는 시작 후 초단위 경과시간 기반의 로그 순차 기록 +•  로그를 외부 서버(SIEM, 중앙관리 시스템 등)로 전송 시, 수신 측에서 수신 시각을 기준으로 보정기록 +•  장비별 로그 간 시간 또는 발생 순서기반 정렬이 가능하도록 이벤트 순서 정보와 연계 식별자(ID)를 함께 기록 +시간 관련 정보 포함 로그 예시 + + +![이미지 213-0](images/p0213_img0.png) + + +--- + +214 +보안 +요구사항 +제품 또는 시스템은 공개적으로 알려진 악용 가능한 취약점이 존재하지 않도록 소프트웨어와 하드웨어를 최신 +상태로 유지해야 하며, 업데이트 및 패치가 정기적으로 적용되어야 한다. 알려진 취약점이 있는 구성요소는 즉시 +대응이 이루어져야 하며, 위험 수준에 따라 패치 우선순위가 설정되어야 한다. +목적 +제로데이 공격, CVE 기반 취약점 악용 등으로부터 시스템을 보호하고, 체계적인 취약점 관리 프로세스를 통해 보안 +수준을 지속적으로 유지한다. +점검 기준 +공개 가능한 악용가능한 취약점이 없는 최신 소프트웨어 및 하드웨어 + +## 1. 제조사는 장비의 취약점을 아래 사항을 감안한 평가 여부 + +•  자산에 영향을 미치는 공개된 악용 가능한 취약점을 포함하는가? +•  특정 조건에서 취약점이 악용되지 않는 상태인가? +•  허용가능한 수준의 잔여 위험으로 완화 가능한가? +•  위험 기반으로 수용이 승인되는가? + +## 2. 악용될 경우 보안 자산/네트워크 자산/개인정보 자산에 영향을 미치는 공개된 악용 가능한 취약점의 포함 여부 + + +## 3. 위의 사항에 해당되지 않을 경우, 특정 조건에서 취약점이 악용되지 않거나 /허용가능한 수준의 잔여 위험으로 + +완화 가능하거나/위험 기반으로 수용 승인 또는 해당 여부 +구현 및 점검 방안 +1 + +## 01. 제조사가 장비의 취약점을 아래 사항을 감안하여 평가하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상에 영향을 미치는 하드웨어, 소프트웨어 +취약점이 존재하는지 확인한다. +•  식별된 서비스에 아래와 같이 장비 취약점의 평가를 수행하는 적절한 프로세스가 존재해야 한다. +자산에 영향을 미치는 공개된 악용 가능한 취약점을 포함하는가? +특정 조건에서 취약점이 악용되지 않는 상태인가? +허용가능한 수준의 잔여 위험으로 완화 가능한가? +위험 기반으로 수용이 승인되는가? +•  소프트웨어/펌웨어는 악용가능한 취약점이 없도록 패치된 최신 상태로 업데이트 수행가능한 구조에 해당해야 한다. +[방안 1] 위험관리 프로세스 및 문서화 방안 +장비에 포함된 모든 구성요소의 위험관리 프로세스 기반 평가와 위험관리 문서화를 수행한다. 위험관리 프로세스 문서는 +다음과 같은 내용을 포함한다. + +#### 3.11.19 [WS-19] 최신 소프트웨어 및 하드웨어 유지 + +항목 +내용 +자산 식별 +•  각 보안자산/네트워크자산/개인정보자산에 대한 설명 +영향 설명 +•  자산별 영향을 미치는 장비 내 소프트웨어 및 해당버전에 대한 설명 +•  자산별 영향을 미치는 장비의 하드웨어에 대한 설명 +위협 식별 +및 완화 +•  자산에 영향을 미치는 소프트웨어 및 하드웨어의 공개된 악용 가능한 취약점 목록 및 설명 +•  취약점 정보의 출처 +•  해당 취약점이 어떻게 처리되었는지에 대한 정당화 +(취약점을 해결하기 위해 구현된 조치, 취약점이 장비의 특정 조건 하에서는 악용될 수 없는 이유에 대한 설명, +취약점 완화를 위한 조치에 대한 설명, 위험 기반 수용이 이루어진 경우 그에 대한 설명) +위험관리 프로세스 검증방안 + + +--- + +01 +02 +03 +215 +산출된 위협에 대해 CVSS 점수를 매기고, 취약점 위험도 분류 및 패치 우선순위 결정을 수행한다. 이때 Critical(예: 72시간), +High(예: 1주일), Medium(예: 1개월) 등 위험도별 대응 SLA 와 완화방안을 정의하고 준수한다. 이러한 대응 시간은 국제 +표준과 업계 모범사례를 참고해 조직의 자산 중요도·운영 환경·규제 요구사항을 종합해서 결정해야 한다. +취약점 평가 프로세스 – 자산산출 예시 +취약점 평가 프로세스 – DFD산출 예시 +취약점 평가 프로세스 – 위협점수 산출 예시 + + +![이미지 215-0](images/p0215_img0.png) + + +![이미지 215-1](images/p0215_img1.png) + + +--- + +216 +2 + +## 01. 악용될 경우 영향을 미치는 취약점을 포함하는지를 확인한다. + +•  장비의 취약점 중 악용 시 보안 자산/네트워크 자산/개인정보 자산에 영향을 미치는 공개된 취약점을 포함해서는 안 된다. +[방안 1] 공개된 악용가능한 취약점 확인방안 +공개 취약점 데이터베이스(예: NIST NVD, 유럽 국가별 취약점 DB 등)를 정기적으로 확인하여 구성요소의 취약점이 +존재하는지의 여부를 식별한다. 취약점이 존재할 경우, 아래와 같은 관련사항을 감안하여 취약점의 악용가능여부와 우선순위 +결정을 수행한다. +취약점의 존재는 수동으로 정기 확인하여도 되나, CVE 데이터베이스 자동 모니터링 시스템 구축을 통해 시스템 구성요소별 +취약점 영향도를 평가 가능하다. +3 + +## 01. 취약점 영향도 평가를 통해 완화/수용 등의 위험관리를 수행하는지 확인한다. + +•  장비의 취약점 중 악용가능한 취약점이 없을 경우, 취약점과 그로 인해 발생하는 위험에 대해 아래 완화방안 중 적합한 +방안을 적용하여야 한다. +프로세스상 특정 조건에서 취약점이 악용되지 않는 상태인가? +허용가능한 수준의 잔여 위험으로 완화 가능한가? +취약점으로 인해 발생하는 위험의 수용을 승인가능한가? +[방안 1] 공개된 악용가능한 취약점 확인방안 +취약점 영향도 평가를 통해 완화/수용 등의 위험관리를 수행하는지 확인한다. +•  장비의 취약점 중 악용가능한 취약점이 없을 경우, 취약점과 그로 인해 발생하는 위험에 대해 아래 완화방안 중 적합한 +방안을 적용하여야 한다. +프로세스상 특정 조건에서 취약점이 악용되지 않는 상태인가? +허용가능한 수준의 잔여 위험으로 완화 가능한가? +취약점으로 인해 발생하는 위험의 수용을 승인가능한가? +알려진 취약점 포함여부 확인 예시 +취약점 관련사항 +장비의 공격 표면 및 접근 경로(attack surface) +취약점의 공격 코드, PoC, 또는 실제 악용 사례 존재 여부 +장비 내 보안 기능 또는 완화 기제의 존재 여부 +장비의 의도된 기능 및 운용 환경(예: 네트워크 분리, 제한된 사용자 접근 등) +취약점 관련사항 + + +![이미지 216-0](images/p0216_img0.png) + + +--- + +01 +02 +03 +217 +취약점 평가 프로세스 – 완화산출 예시 + + +![이미지 217-0](images/p0217_img0.png) + + +--- + +218 +보안 +요구사항 +제품 또는 시스템은 네트워크 인터페이스를 통해 노출되는 서비스를 최소화해야 한다. 사용 중인 옵션 서비스와 +관련된 인터페이스 구성은 명확히 설정되어야 하며, 노출된 목록은 문서화되어 관리한다. +목적 +제품 또는 시스템은 네트워크 인터페이스를 통해 노출되는 서비스를 최소화하여 공격 표면 증가와 시스템 침투 +위험을 방지한다. +점검 기준 +서비스 노출 제한 + +## 1. 필요한 네트워크 인터페이스 또는 서비스만 존재하며, 옵션 서비스가 존재할 경우 사용자의 해당 옵션 비활성화 + +가능 여부 + +## 2. 노출된 네트워크 인터페이스 및 서비스의 사용자 문서 명시 여부 + +구현 및 점검 방안 +1 + +## 01. 필요한 네트워크 인터페이스 또는 서비스만 존재하며, 옵션 서비스가 존재할 경우 사용자의 해당 옵션 + +비활성화가 가능한지 확인한다. +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 관련해 불필요한 네트워크 +인터페이스 또는 하위 서비스가 존재하는지 확인한다. +•  불필요한 대상이 존재할 경우 아래와 같은 항목들 중 하나에 해당해야 한다. +공장 기본 상태에서 장비가 보안 자산 및 개인정보에 영향을 주는 항목들 (네트워크 인터페이스, 네트워크 인터페이스를 +통해 제공되는 서비스)만 노출하는가? +장비의 기본 동작이나 설정에 필요한 네트워크 인터페이스 또는 서비스만 존재하는 상태인가? +선택적인 네트워크 인터페이스 및 노출된 선택적 서비스가 설정을 통해 구성할 수 있는가? +설정을 통해 구성할 수 있는 경우 권한 있는 사용자가 활성화/비활성화 할 수 있는가? +[방안 1] 최소 노출 수행방안 +구성요소로 존재하는 네트워크 인터페이스 및 서비스의 경우 아래와 같은 최소 노출 수행방안을 감안하여 적용한다. + +#### 3.11.20 [WS-20] 네트워크 인터페이스 노출 최소화 + +항목 +내용 +기본 +최소노출 +수행방안 +•  공장 출하 기본 설정에서 필수적이지 않은 모든 네트워크 인터페이스 및 서비스는 비노출 상태로 +두기 +•  고정 기능 장비는 기능 수행에 필요한 최소한의 인터페이스만 기본 노출 허용 +•  범용 장비는 제조사가 정의한 필수 use-case 범위만 노출 허용 +•  장비가 보안 자산·개인정보에 영향을 주는 정도는 위험기반으로 평가 +•  위험기반으로 평가 시, 영향도가 높으면 기본 비노출로 설정 +•  운영에 필수적이지 않은 관리용 서비스 및 디버깅 인터페이스는 비활성화 또는 로컬 호스트 접근 +으로 제한 +•  사용자가 선택적으로 서비스를 활성화/비활성화할 수 있는 서비스 관리 인터페이스 제공 +•  민감한 관리 서비스에 대한 방화벽 규칙 설정 및 화이트리스트 기반 접근제어 적용 +선택적 +서비스의 +사용자 제어 +및 보호 +•  공장 기본 상태에 포함된 선택적 서비스는 관리자(권한 있는 사용자)가 명시적으로 활성화하도록 +설계 +•  활성/비활성 기능(UI·API)은 강한 인증과 적절한 접근제어로 보호 +•  활성화 또는 설정 변경 시 로그 및 알림을 기록하여 운영자가 변경 사실을 인지하고 감사·추적 +예외· +상호운용성 +관리 및 +사용자 알림 +상호운용성 때문에 불가피하게 약한 프로토콜을 사용해야 하는 경우, 위험 평가와 보완조치를 +문서화 및 적용 +장비가 비안전한 통신을 수행할 때는 사용자 UI에서 명확한 경고/알림 제공 +제조사는 출시 전에 ‘기본 노출 서비스 목록’과 ‘선택적 서비스 보안 설정 절차’를 문서화해 제공 +최소 노출 수행방안 + + +--- + +01 +02 +03 +219 +2 + +## 01. 노출된 네트워크 인터페이스 및 서비스 문서 명시 여부를 확인한다. + +•  불필요한 대상이 노출되어 있을 경우 장비의 사용자 문서에는 아래 내용이 포함되어야 한다. +공장 출하 기본 상태에서 노출되는 모든 네트워크 인터페이스의 설명 +네트워크 인터페이스를 통해 노출되는 모든 서비스의 설명 +[방안 1] 노출 인터페이스 및 서비스 문서화 방안 +사용자에게 장비의 연결성과 잠재 공격 표면에 대한 투명성을 제공하고, 장비 설치·운용 시 네트워크 보안을 적절히 설정할 수 +있도록 도울 수 있도록 노출된 대상 구성요소에 대한 문서화를 수행한다. +문서에는 서비스별 기능 요약, 필요 포트, 보안 기능(암호화 여부, 인증 요건 등)을 명시하여 사용자가 위험도를 자체평가하고 +필요 보완조치를 적용할 수 있게 한다. +노출 네트워크 인터페이스 문서명시 예시 + + +![이미지 219-0](images/p0219_img0.png) + + +--- + +220 +보안 +요구사항 +제품 또는 시스템은 불필요한 외부 물리 인터페이스가 존재하는 경우 제거해야 한다. +목적 +불필요한 외부 물리 인터페이스가 존재하는 경우 제거하여 하드웨어 기반 침해 위협을 방지한다. +점검 기준 +물리 인터페이스 보호 + +## 1. 의도된 기능을 위해 필요한 경우 외부 인터페이스 노출 여부 + + +## 2. 노출된 외부 인터페이스의 물리적 보호/비활성화/차단 여부 + +구현 및 점검 방안 +1 + +## 01. 의도된 기능을 위해 필요한 경우 외부 인터페이스를 노출하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 물리 포트가 존재하는지 확인한다. +•  물리 포트가 존재할 경우 해당 포트가 시스템에 활성화되지 않았거나, 문서화되지 않은 외부에서 연결 가능한 물리 포트에 +해당해서는 안 된다. +[방안 1] 외부 인터페이스의 노출 점검방안 +장비 설계 시 “의도된 사용 목적”과 “운용 환경 조건”에 따라 외부 인터페이스의 필요성을 명시적으로 검증·기록한다. 만약 +인터페이스가 내부 시스템 통신, 사용자 UI, 기계 인터페이스 등 필수 기능 수행에 필요하다면, 최소 한 개 이상의 합리적 사용 +사례에서 그 필요성이 입증되어야 하는지 확인한다. +설계 및 장비의 의도된 기능 수행에 있어 필수적인 외부 인터페이스 외 직접 관련이 없는 외부 포트, 커넥터, 인터페이스는 +제거하거나 비활성화하는지 확인한다. 이때 공장 출하시 디버그 포트(JTAG, UART 등)가 존재한다면, 출하 전 차단 조치를 +하는지 확인한다 +외부 인터페이스가 노출되지 않은 상태에 해당하는 경우는 다음과 같다. +공폐쇄망 운용, 보안 커버, 봉인 등으로 외부 접근이 불가능한 경우, 해당 인터페이스는 “노출되지 않은 상태”로 간주 +외부 인터페이스가 사용자의 환경에서 물리적으로 보호되거나 접근 불가능한 위치에 있다면 “노출되지 않은 상태”로 간주 +2 + +## 01. 노출된 외부 인터페이스의 물리적 보호/비활성화/차단 여부를 확인한다. + +•  노출된 외부 인터페이스는 의도된 기능을 위해 필수적인 대상이어야 한다. +•  필수적인 대상이 아닐 경우, 해당 인터페이스는 아래와 같은 물리적 보호여부나 비활성화 및 차단여부가 적용되어야 한다. +[방안 1] 불필요한 외부 인터페이스의 노출 관리방안 +불필요한 외부 인터페이스가 식별된 경우 아래와 같은 물리적 보호/비활성화/차단 방안을 적용한다. +외부 인터페이스의 노출 관리방안 + +#### 3.11.21 [WS-21] 외부 물리 인터페이스 제한 + +구분 +내용 +[보안 나사] +드라이버로 열기 어렵도록 특수 나사 적용 +[봉인 라벨] +제거 시 흔적이 남는 보안 스티커 +[보안 커버] +케이스를 잠그거나 봉인하여 임의 개봉 방지 +[USB 포트 잠금 커버] +포트를 봉인하여 임의 개봉 및 비인가 장치 연결을 방지 + + +![이미지 220-0](images/p0220_img0.png) + + +![이미지 220-1](images/p0220_img1.png) + + +![이미지 220-2](images/p0220_img2.png) + + +![이미지 220-3](images/p0220_img3.png) + + +--- + +01 +02 +03 +221 +보안 +요구사항 +시스템은 외부 입력에 대해 적절한 유효성 검사를 수행해야 하며, 입력으로부터 시스템을 보호할 수 있도록 +설계되어야 한다. 외부 감지 센서나 감지 기능이 포함된 경우, 작동 원리와 범위, 연동 방식 등을 명확히 문서화하여 +충분한 정보를 제공해야 한다. +목적 +외부 입력에 대해 적절한 유효성 검사를 수행해야 하며, 입력으로부터 시스템을 보호할 수 있도록 설계하여 정보 +노출 보안 위협을 방지한다. +점검 기준 +입력 검증 + +## 1. 외부 인터페이스를 통해 수신된 입력이 보안 자산, 네트워크 자산, 개인정보 자산에 영향을 줄 수 있는 경우, 해당 + +입력의 검증 여부 + +## 2. 장비에 사용자의 개인정보에 관련된 외부 감지 기능이 있는 경우, 사용자가 이를 인지할 수 있도록 해당 기능의 + +문서화 여부 +구현 및 점검 방안 +1 + +## 01. 외부 인터페이스를 통해 수신된 입력이 보안 자산, 네트워크 자산, 개인정보 자산에 영향을 줄 수 있는 경우, + +해당 입력의 검증 여부를 확인한다. +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 네트워크 자산, 개인정보 자산, 금융 자산 중 하나 이상 처리하며 이러한 자산이 외부 인터페이스를 +통해 수신받은 입력의 영향을 받는 대상인지 확인한다. +•  영향을 받을 경우 아래와 같이 외부에서 수신된 입력의 값을 반드시 검증해야 한다. +[방안 1] 외부 입력 검증방안 +입력 데이터가 예상된 구조와 형식에 맞는지 확인한다. 이때 아래와 같은 외부 입력 검증방안을 통해 입력값의 값 타당성을 +검증해야 하는데, 타당하지 않은 경우는 범위를 벗어난 값, 미래 날짜, SQL 인젝션용 특수문자, 음수 오프셋 등에 해당한다. +외부 입력 검증방안 + +#### 3.11.22 [WS-22] 외부 입력 관리 + +항목 +검증방안 +입력 형식 제한 +•  모든 API의 입력값에 대해 길이, 형식, 허용 범위를 명확히 정의하고 검증 로직 추가 +특수문자 +필터링 +•  사용자 입력에서 쉘 명령어나 코드로 해석될 수 있는 특수문자 필터링 +•  경로 입력 시 상대 경로(../) 절대 경로(/) 등의 문자열을 검증하거나 차단하여 Path Traversal +방지 +시스템 함수 +사용 지양 +•  eval, exec, os.system, subprocess.call(shell=True), popen 등 직접 코드 실행/명령 실행 +함수 사용 금지 +•  필수적인 경우 입력값에 대한 화이트리스트 검증 또는 안전한 라이브러리 대체 적용 +파일 업로드 +크기 제한 +•  파일 업로드 시 파일 크기(Content-Length)에 대한 제한을 두어 대용량 파일로 인한 DoS +공격 차단 +•  업로드 파일의 확장자 및 MIME 타입 검증 추가 +항목 +내용 +입력 형식 제한 +•  모든 API의 입력값에 대해 길이, 형식, 허용 범위를 명확히 정의하고 검증 로직 추가 +•  정규표현식 또는 파서를 활용하여 입력값 검증 +•  필터링 및 인코딩을 통해 유효성 확보 강화 +특수문자 +필터링 +•  사용자 입력에서 쉘 명령어나 코드로 해석될 수 있는 특수문자 필터링 +•  경로 입력 시 상대 경로(../) 절대 경로(/) 등의 문자열을 검증하거나 차단하여 Path Traversal +방지 +시스템 함수 +사용 지양 +•  eval, exec, os.system, subprocess.call(shell=True), popen 등 직접 코드 실행/명령 실행 +함수 사용 금지 +•  필수적인 경우 입력값에 대한 화이트리스트 검증 또는 안전한 라이브러리 대체 적용 + + +--- + +222 +2 + +## 01. 장비에 사용자의 개인정보에 관련된 외부 감지 기능이 있는 경우, 사용자가 이를 인지할 수 있도록 해당 + +기능을 문서화하는지 확인한다. +•  식별된 서비스 영역에 사용자의 개인정보에 관련된 외부 감지 기능이 존재하는지 확인한다. +•  존재할 경우 사용자가 이를 인지할 수 있도록 해당 기능의 문서화를 수행 및 제공해야 한다. +[방안 1] 문서에 제조사 책임 기반 정보 제공 +장비에 사용자의 개인정보에 관련된 외부 감지 기능이 존재할 경우 사용자가 인지할 수 있도록 문서화하여 제공한다. +정보로는 입력 가능한 데이터의 종류(영상, 음성, 생체정보 등)와 수집·처리 목적, 작동 조건, 제어 방법에 대한 정보를 +명시한다. +사용자 개인정보 기능 문서화 예시 +필수 외부 입력 검증방안 +파일 업로드 +크기 제한 +•  파일 업로드 시 파일 크기(Content-Length)에 대한 제한을 두어 대용량 파일로 인한 DoS +공격 차단 +•  업로드 파일의 확장자 및 MIME 타입 검증 추가 + + +![이미지 222-0](images/p0222_img0.png) + + +--- + +01 +02 +03 +223 +보안 +요구사항 +물리적 손상, 비인가 변경, 구성요소 교체 등으로부터 장비의 무결성을 유지할 수 있도록 설계되어야 한다. +목적 +물리적 손상, 비인가 변경, 구성요소 교체 등으로부터 장비의 무결성을 유지할 수 있도록 설계하여 무결성 검증 +위협을 방지한다. +점검 기준 +장비 무결성 보장 + +## 1. 주요 소프트웨어에 대한 Secure Boot 적용여부 + +2. Root of Trust가 변경 불가능하거나 변경 가능한 경우 암호학적으로 인증된 절차 변경가능 여부 +구현 및 점검 방안 +1 + +## 01. 주요 소프트웨어에 대한 Secure Boot를 적용하는지 확인한다. + +•  “2.3 인터페이스 식별”의 무선 네트워크 통신유형에 해당하는 통신 인터페이스별 대상 서비스를 식별한다. +•  식별된 서비스에 대해 금융 자산을 처리하며 하위 소프트웨어 구성요소가 존재할 경우 Secure Boot 또는 그에 준하는 부팅 +무결성 보호조치를 적용해야 한다. +[방안 1] 부팅 무결성 보호방안 +UEFI Secure Boot 활성화를 통한 부트로더 및 커널 디지털 서명 검증을 적용한다. +TPM 기반 부트 체인 측정 및 원격 증명 기능을 구현하거나 커널 모듈 서명 검증 및 무결성 확인을 통한 악성 +드라이버 로딩을 방지한다. +2 +01. Root of Trust가 변경 불가능하거나 변경 가능한 경우 암호학적으로 인증된 절차 변경가능한지 확인한다. +•  대상 구성요소가 존재할 경우 Root of Trust가 변경 불가능해야 한다. +•  변경이 가능할 경우, 암호학적으로 인증된 절차에 기반하여 변경 기능을 제공해야 한다. +[방안 1] 암호학적으로 인증된 절차 제공방안 +Root of Trust 또는 보안 핵심 구성요소가 변경 가능한 구조일 경우, 모든 변경·업데이트·복구는 암호학적으로 인증된 승인 +절차를 통해서만 수행한다. 변경 패키지는 서명 검증·버전 검증·무결성 검증을 모두 통과해야 하며, 인증에 실패한 경우 해당 +변경은 거부된다. +인증 실패 또는 변조 징후가 감지되면 장비는 비신뢰 상태로 전환하고 주요 자산 접근을 제한하도록 설계한다. 또한 승인된 +Root of Trust 변경 이후에는 재부팅 과정에서 신뢰 사슬을 재구축하여 시스템의 무결성을 보장한다. +부팅 무결성 적용 예시 + +#### 3.11.23 [WS-23] 장비 무결성 보장 + + + +![이미지 223-0](images/p0223_img0.png) + + +--- + +로봇 보안취약점 점검 체크리스트 + + +--- + diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part1 \354\232\224\354\225\275\353\263\270.pdf" "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part1 \354\232\224\354\225\275\353\263\270.pdf" new file mode 100644 index 0000000..41a0a84 Binary files /dev/null and "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part1 \354\232\224\354\225\275\353\263\270.pdf" differ diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part1.pdf" "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part1.pdf" new file mode 100644 index 0000000..4551b84 Binary files /dev/null and "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part1.pdf" differ diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part2 \354\232\224\354\225\275\353\263\270.pdf" "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part2 \354\232\224\354\225\275\353\263\270.pdf" new file mode 100644 index 0000000..46d6cca Binary files /dev/null and "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part2 \354\232\224\354\225\275\353\263\270.pdf" differ diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part2.pdf" "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part2.pdf" new file mode 100644 index 0000000..534ad4a Binary files /dev/null and "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 Part2.pdf" differ diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 \355\225\264\354\204\244\354\204\234 \353\260\217 \354\202\254\353\241\200\354\247\221.pdf" "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 \355\225\264\354\204\244\354\204\234 \353\260\217 \354\202\254\353\241\200\354\247\221.pdf" new file mode 100644 index 0000000..41ad5e1 Binary files /dev/null and "b/\353\254\270\354\204\234/\354\232\260\354\243\274 \353\263\264\354\225\210\353\252\250\353\215\270 \355\225\264\354\204\244\354\204\234 \353\260\217 \354\202\254\353\241\200\354\247\221.pdf" differ diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part1.md" "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part1.md" new file mode 100644 index 0000000..f51d9c5 --- /dev/null +++ "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part1.md" @@ -0,0 +1,8593 @@ +# 우주 보안모델 Part1.pdf + +> Converted: 2026-04-02 01:22 +> OCR Engine: PaddleOCR (Korean + GPU) + + +--- + +[} +우주 +페모교 +Y +Part +YIAY융룸 +2024 +12 +과학기술정보통신부 +한국인터넷진흥원 +KISK +Ministry of Science and ICT + +--- + +개요 + +## 1. 배경··················································································6 + + +## 2. 범위 및 구성·······································································7 + +가. 범위··············································································7 +나. 구성··············································································8 +우주 아키텍처 + +## 1. 우주 아키텍처 개요··························································· 11 + +가. 우주 영역····································································· 15 +나. 지상국 영역··································································· 18 +다. 위성활용 서비스 영역······················································· 20 + +## 2. 위성활용 서비스 아키텍처·················································· 22 + +가. 위성항법 서비스····························································· 22 +나. 위성통신 서비스····························································· 26 +다. 위성방송 서비스····························································· 37 +우주 보안위협 + +## 1. 우주 보안위협 도출 절차···················································· 43 + + +## 2. 우주 및 지상국 보안위협···················································· 45 + + +## 3. 위성활용 서비스 보안위협·················································· 47 + +가. 위성항법 서비스 보안위협················································· 47 +나. 위성통신 서비스 보안위협················································· 49 +다. 위성방송 서비스 보안위협················································· 55 + +## 4. 우주 보안위협 유형··························································· 57 + +가. 위성 데이터 훼손···························································· 59 +나. 위성 서비스 장애···························································· 60 +다. 우주통신 정보 유출························································· 61 + +## 제1장 + + +## 제2장 + + +## 제3장 + +CONTENTS + +--- + +우주 보안아키텍처 + +## 1. 우주 및 지상국 보안요구사항·············································· 65 + + +## 2. 위성활용 서비스 보안요구사항············································ 69 + +가. 위성항법 서비스 보안요구사항············································ 69 +나. 위성통신 서비스 보안요구사항············································ 72 +다. 위성방송 서비스 보안요구사항············································ 85 + +## 3. 위성활용 서비스 보안아키텍처············································ 89 + +가. 위성항법 서비스 보안아키텍처············································ 89 +나. 위성통신 서비스 보안아키텍처············································ 91 +다. 위성방송 서비스 보안아키텍처············································ 95 +우주 보안아키텍처 활용방안 + +## 1. 보안위협 유형별 활용방안·················································· 99 + +가. 위성항법 서비스 활용방안················································· 99 +나. 스마트선박 위성통신 서비스 활용방안································· 105 +다. 위성방송 서비스 활용방안··············································· 112 + +## 2. 가상 사례기반 활용방안··················································· 118 + + +### 부록 1. 우주 보안 수칙························································ 126 + + +### 부록 2. 우주보안 사고 사례·················································· 128 + + +### 부록 3. 용어 및 약어··························································· 130 + + +## 제4장 + + +## 제5장 + +부록 +우주 보안모델 + +--- + +우주 +페머교 + +--- + + +## 제7장 + +개요 +1배경 +2 + +--- + +6 | 우주 보안모델 + +## 제1장 + +개요 +1 +배경 +국가 미래 신성장 동력으로 우주산업에 대한 관심이 높아지고 있다. 최근 정부가 아닌 민간 우주기업이 +우주산업을 직접 이끌어 우주 생태계가 조성되는 뉴스페이스 시대가 현실화 됨에 따라 미래 우주시장의 +성장 가능성에 주목했기 때문이다. 이처럼 뉴스페이스 시대 우주산업이 글로벌 시장의 미래 먹거리로 +부상하면서, 세계 각국의 정부와 민간기업에서는 우주산업 시대의 유리한 고지를 선점하기 위해 치열한 +노력을 기울이고 있는 중이다. +글로벌 우주 강국 미국은 우주 내 서비스, 조립 및 생산에 대한 국가 전략을 마련하여, 글로벌 우주 +시장의 주도권을 지속 확보하고자 노력하고 있으며, 일본 역시 우주전략기금을 운영하여, 우주 관련 +스타트업 육성 노력을 기울이고 있다. 또한, 스페이스X(Space-X) 등 글로벌 우주기업 역시 저궤도 +소형위성 기반 글로벌 위성통신망을 구축하여 다양한 서비스 제공 움직임을 보이는 등 우주 서비스 주도 +경쟁 역시 심화 중이다. +국내 역시 이러한 글로벌 흐름에 발맞춰 정부차원의 민간주도 우주산업 생태계 조성을 위한 지원 강화 +계획을 마련하여, 민간 우주기업 생태계 조성을 위한 노력을 기울이고 있다. +다만, 민간 우주 서비스가 시장에 등장하고 현실화되는 만큼 이를 대상으로 하는 보안위협 사례 역시 +발생하고 있으나, 우주 서비스에서 발생 가능한 보안위협 대응에 참고할 수 있는 기초자료가 부족해 + +--- + + +## 제1장 개요 | 7 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +민간 우주산업 보안 관계자의 보안 적용에 어려움을 겪고 있다. 이에, 본 문서는 민간 우주산업 보안 +관계자가 우주산업에서 발생가능한 보안위협을 식별하고, 식별된 보안위협에 대응하기 위한 보안 +요구사항, 보안기술, 보안솔루션 등 보안 강화에 참고하고 활용 할 수 있도록 지원하는데 목적이 있다. +그리고 이를 통해 국내 민간 우주 서비스의 안전한 확산을 바탕으로 글로벌 우주 강국으로 도약하는데 +기여하고자 한다. +2 +범위 및 구성 +가. 범위 +본 문서에서 제시하는 보안 대상의 범위로는 우주영역, 지상국 영역, 위성활용 서비스 영역으로 구분· +하여 제시하였다. +우주 영역은 정지궤도(GEO)위성1, 중궤도(MEO)위성2, 저궤도(LEO)위성3 및 위성활용 서비스와 +관련된 저궤도 군집위성4을 범위로 하였다. +지상국 영역은 위성의 동작을 제어하고 관리하는 위성운영 영역과 인공위성에서 수집된 데이터를 분석· +하고 처리하는 페이로드 데이터 이용 영역을 범위로 하였다. +위성활용 서비스 영역은 위성과 연계하여 정보를 수신 또는 서비스를 제공하는 영역으로 크게 위성· +항법, 위성통신, 위성방송 영역으로 구분하여 제시하였다. +1 ‌‌‌정지궤도 (GEO, Geostationary Earth Orbit) 위성 : 지구로부터 약 36,000km의 높이에 위치한 위성으로 지구의 자전과 동기화된 궤도에 위치· +하고 지구와 같은 속도로 공전하는 궤도를 가지고 있음 +2 ‌‌‌중궤도 (MEO, Middle Earth Orbit) 위성 : 정지궤도와 저궤도 중간에 위치한 위성으로 지구로부터 약 2,000km~30,000km 높이 사이에 위치 +3 ‌‌‌저궤도 (LEO, Low Earth Orbit) 위성 : 지구로부터 약 250~2,000km의 높이에 위치한 위성으로 상대적으로 짧은 궤도주기를 가지고 있음 +4 ‌‌‌저궤도 군집위성 (LEO constellation) : 소형위성들이 일정한 간격으로 지구 저궤도를 돌며 동시에 같은 목적의 임무를 수행하는 위성의 집단 + +--- + +8 | 우주 보안모델 +나. 구성 +본 문서는 크게 다섯 부분으로 구성되어 있다. +1 장에서는 우주 보안모델에 대한 개발 배경을 소개하고 본 문서의 목적과 범위를 설명하였다. +2 ‌장에서는 국외 우주 보안가이드 및 보고서를 기반으로 우주 영역, 지상국 영역, 위성활용 서비스 +영역으로 구분한 우주 아키텍처 전반에 대해 설명하였다. 이후, 위성활용 서비스 영역에 대해 +위성항법, 위성통신, 위성방송 서비스 부문으로 구분하여 서비스별 세부 구성요소를 제시한 +아키텍처를 설명하였다. +3 ‌장에서는 우주 영역, 지상국 영역, 위성활용 서비스 영역별로 발생 가능한 보안위협을 도출하여 +제시하였다. +4 ‌장에서는 우주 영역, 지상국 영역, 위성활용 서비스 영역별로 보안위협에 대응하는 보안요구사항, +보안기술, 보안솔루션과 우주 보안아키텍처를 제시하였다. +5 ‌장에서는 우주 보안아키텍처를 쉽게 활용할 수 있도록 위성활용 서비스에서 발생하는 대표 보안위협 +유형에 기반한 활용 방안과 가상 사례기반 활용 방안 등 다양한 활용 방안을 제시하였다. + +--- + + +## 제2장 + +우주 +아키텍처 +1우주 +아키텍처개요 +융률성7 +서비스 +아키텍처 + +--- + +10 | 우주 보안모델 + +## 제2장 + +우주 아키텍처 +본 장에서는 우주 아키텍처에 대해 기술하였다. 우주 아키텍처는 국외 우주 보안가이드 및 보고서 +분석을 기반으로 우주 구성요소를 표현한 것으로 우주 산업 이해관계자가 보호 대상을 식별하는데 활용할 +수 있다. 우주 아키텍처의 내용은 다음과 같이 두 부분으로 기술하였다. +1. ‌우주 아키텍처에서는 NIST IR 82705, NIST IR 83236, NIST IR 84017, CISA recommendations +to Space system Operators for Improving Cybersecurity 및 일본의 민간 우주시스템 사이버보안 +대책 가이드라인을 참조하고, 아키텍처 반영 요건을 분석하여 우주, 지상국, 위성활용 서비스 영역 등 +영역별 대표 구성요소를 정의하였다. +2. ‌위성활용 서비스 아키텍처에서는 위성항법, 위성통신 및 위성방송 부문으로 구분하여, 해당 +서비스를 구성하고 있는 구성요소의 주요 기능을 설명하였다. +5 ‌‌‌NIST IR 8270 (Introduction to Cybersecurity for Commercial Satellite Operations) +6 ‌‌‌NIST IR 8323 (Foundational PNT Profile: Applying the Cybersecurity Framework for the Responsible Use of Positioning, Navigation, +and Timing (PNT) Services) +7 ‌‌‌NIST IR 8401 (Satellite Ground Segment Applying the Cybersecurity Framework to Satellite Command and Control) + +--- + + +## 제2장 우주 아키텍처 | 11 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +1 +우주 아키텍처 개요 +우주 아키텍처는 국외 우주 보안가이드 및 보고서(NIST IR 8270, NIST IR 8323, NIST IR 8401, +CISA recommendations to Space system Operators for Improving Cybersecurity, 일본의 민간 +우주시스템 사이버보안 대책 가이드라인 등)를 참조하여 구성하였다. +우주 아키텍처 수립을 위해 국외 우주 보안가이드 및 보고서에서 참조한 반영 요건은 아래 그림과 같다. +| 그림 1 | 우주 아키텍처 수립 반영 요건 +NIST IR 8270 +• ‌상업용 위성 운용에 대한 사이버보안 프레임워크 (CSF) +적용 방안을 제시한 보고서 +▶ 우주 구조 도출 +• 우주 구조 분류 +• ‌‌우주, 지상국, 위성활용 서비스로 +영역 분류 +▶ 우주 영역별 구성 요소 도출 +• ‌‌영역별 특성 +• ‌‌영역별 구성 요소 +• ‌‌위성활용 서비스 영역의 서비스별 +상세 구성 요소 +▶ 우주 영역간 데이터 흐름 도출 +• ‌‌영역간 연결 시 데이터 흐름 +• ‌‌위성활용 서비스 영역의 서비스별 +데이터 흐름 +※ 사이버보안 프레임워크 (CSF, Cyber Security Framework) : 사이버보안 관련 위험을 관리하기 위한 표준, 지침, 모범 사례로 구성된 프레임워크 +PNT : 위치(Positioning), 항법(Navigation), 시각(Timing) +CISA (Cybersecurity & Infrastructure Security Agency) : 미국의 사이버 보안 및 인프라 보안국 +NIST IR 8401 +• ‌위성운영 지상국에 대한 사이버보안 프레임워크 (CSF) +적용 방안을 제시한 보고서 +NIST IR 8323 +• ‌위치, 항법, 시각(PNT) 위성활용 서비스에 대한 사이버 +보안 프레임워크 (CSF) 적용 방안을 제시한 보고서 +일본 민간 우주시스템 사이버보안 대책 가이드라인 +• ‌민간 우주시스템의 표준 모델 및 사이버보안 대책 수립 +절차에 대한 적용 방안을 제시한 가이드 +CISA Recommendations to Space system +Operators for Improving Cybersecurity +• ‌우주를 구성하는 영역 및 영역별로 존재하는 위협에 대해 +설명하고 위협 감소 방안에 대해 소개하는 문서‌ +우주 아키텍처의 경우, 우주 영역, 지상국 영역, 위성활용 서비스 영역으로 구분하였으며, 국외 우주 +보안가이드 및 보고서와 우주 유관 기관과 기업에 종사하는 전문가의 의견을 반영하여, 주요 구성요소를 +제시하였다. + +--- + +12 | 우주 보안모델 +우주 아키텍처를 표현한 그림은 아래와 같다. +| 그림 2 | 우주 아키텍처 +우주 아키텍처는 고도 범위에 따라 다양한 위성이 위치한 우주 영역과 위성으로부터 페이로드 데이터8 +를 송·수신하고, 위성을 제어하기 위한 시스템으로 구성된 지상국 영역, 위성에 기반한 서비스를 제공하는 +위성활용 서비스 영역으로 구분하였다. +우주에서는 전파를 사용하여 필요한 정보를 송·수신하는 통신방식을 사용하고 있으며, 전파의 속도를 +주파수9로 표현하고 있다. 위성통신에서는 일정 범위의 주파수 대역을 밴드로 표현하여 사용하고 있으며, +주파수 대역에 대한 설명은 아래 표와 같다. +8 ‌‌‌페이로드 데이터(payload data) : 전송되는 데이터 자체를 지칭, 데이터 전송에 따른 제어 및 헤더 데이터는 제외 +9 ‌‌‌주파수 : 전파가 1초 동안에 진동하는 수 + +--- + + +## 제2장 우주 아키텍처 | 13 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +표 1 주파수 대역 +구분 +주요 내용 +L 밴드 (1-2 GHz) +• 1-2 GHz 사이의 주파수를 갖는 전파 대역 +• 위성 통신, 이동통신, 데이터 전송, 위치 추적(GPS) 등에 활용 +S 밴드 (2-4 GHz) +• 2-4 GHz 사이의 주파수를 갖는 전파 대역 +• 위성 통신, 레이더, 기상 관측, 과학 실험 등에 활용 +C 밴드 (4-8 GHz) +• 4-8 GHz 사이의 주파수를 갖는 전파 대역 +• 위성 TV 방송, 레이더, 원격 탐사 등에 활용 +X 밴드 (8-12 GHz) +• 8-12 GHz 사이의 주파수를 갖는 전파 대역 +• 고해상도 데이터 전송과 정교한 레이더 이미징 및 위성 통신, 레이더, 과학 실험 등에 활용 +Ku 밴드 (12-18 GHz) +• 12-18 GHz 사이의 주파수를 갖는 전파 대역 +• 위성 통신, TV 방송, 위성활용 서비스의 사용자 통신에 많이 활용 +Ka 밴드 (26.5-40 GHz) +• 26.5-40 GHz 사이의 주파수를 갖는 전파 대역 +• 위성 통신, 초고속 인터넷, 광대역 데이터 전송 등에 사용되며 지상국과의 통신에 많이 활용 +위성 궤도와 주파수 자원은 사용되는 한정된 자원으로 위성에 기반한 다양한 서비스 제공을 위해 통제 +없이 사용할 경우, 각국의 위성 업무 간의 주파수 간섭 등의 문제가 발생할 수 있기 때문에 ITU10를 통하여 +국제적 관리가 되고 있다. +ITU는 각 주파수 대역 내에서 국가별 또는 위성별로 중복이 발생하지 않게 사용하기 위해 위성통신 +사용을 위한 등록 단계를 진행하고 사용하는 절차를 운영하고 있다. +위성의 내부와 외부에서 사용하는 통신프로토콜은 아래 표와 같다. +표 2 위성 통신프로토콜 +구분 +주요 내용 +위성 +내부 +CAN +(Controller Area Network) +• 위성 내부의 다양한 서브시스템 간 통신을 위한 프로토콜 +MIL-STD-1553 +• 군용 항공기 및 우주선에서 사용되는 표준 데이터 버스 프로토콜 +10 ‌‌‌ITU (국제전기통신연합, International Telecommunication Union) : 유·무선 통신, 전파, 방송, 위성 주파수에 대한 규칙(Regulation) 및 표준 +(Recommendation)을 개발, 보급하는 국제적 조정·협력 기구 + +--- + +14 | 우주 보안모델 +구분 +주요 내용 +위성 +내부 +SpW +(SpaceWire) +• ESA(유럽우주국)에서 개발한 고속 데이터 전송 프로토콜 +RS-422 +• 이종장비 사이에 직렬 통신 방식으로 데이터를 송수신하는 프로토콜 +위성 +외부 +레이저 +(Laser) +• 광(光)을 이용한 장거리, 초고속 데이터 전송 프로토콜 +CCSDS +(Consultative Committee for +Space Data Systems) +• 위성 간 및 위성과 지상국 간 데이터 전송을 위한 국제 표준 프로토콜 +DVB-S/S2 +(Digital Video +Broadcasting-Satellite) +• 위성 TV 및 데이터 방송을 전송하기 위한 프로토콜 +VSAT +(Very Small Aperture Terminal) +• 소형 위성 지상국을 통한 데이터 및 음성 통신을 위한 프로토콜 +TCP/IP +(Transmission Control Protocol/ +Internet Protocol) +• 인터넷 기반의 데이터 전송 프로토콜 +CSP +(Cubesat Space Protocol) +• 소형 위성(CubeSat) 간의 통신을 위한 경량 프로토콜 +DTN +(Delay/Disruption Tolerant +Network) +• ‌통신 노드가 수신 데이터를 일단 저장한 후 인접 노드와의 연결을 확인한 +후 전달하는 '스토어&포워드 (Store & Forward)’ 방식의 통신을 위한 +프로토콜 +앞서 설명한 주파수 대역과 통신프로토콜 사용 현황에 대해 궤도별로 제시하면 아래 표와 같다. +표 3 궤도 유형별 주파수 대역 및 위성 통신프로토콜 +궤도 유형 +고도 범위 +주파수 대역 +주요 용도 +주요 프로토콜 및 표준 +저궤도 +(LEO) +200 - 2,000 +km +L-밴드 +이동통신, GPS, 해상 및 항공 통신 +INMARSAT, Iridium, GPS +S-밴드 +위성 이동통신, 기상 위성, +아마추어 라디오 +DVB-S, BGAN, SBD, +GMR-1, CCSDS +X-밴드 +군사 통신, 레이더 +MIL-STD-188, +NATO STANAG, CCSDS +중궤도 +(MEO) +2,000 - 35,786 +km +L-밴드 +이동통신, GPS, 데이터 중계 +GPS, Galileo, Beidou, CCSDS +S-밴드 +데이터 통신, 기상 위성 +DVB-S, GMR-1, CCSDS + +--- + + +## 제2장 우주 아키텍처 | 15 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +궤도 유형 +고도 범위 +주파수 대역 +주요 용도 +주요 프로토콜 및 표준 +중궤도 +(MEO) +2,000 - 35,786 +km +C-밴드 +위성 TV 방송, 데이터 통신, +원격 탐사 +DVB-S2, VSAT, Intelsat, CCSDS +X-밴드 +군사 통신, 레이더 +MIL-STD-188, +NATO STANAG, CCSDS +정지 +궤도 +(GEO) +35,786 km +(정지궤도) +Ku-밴드 +위성 TV, 인터넷 접속, VSAT +DVB-S2, VSAT, CCSDS +Ka-밴드 +위성 브로드밴드 인터넷, +고속 데이터 전송 +DVB-S2X, VSAT, +Inmarsat Global Xpress, CCSDS +가. 우주 영역 +우주 영역은 우주 공간에 위치하는 자산으로 구성되며, 대표적인 자산으로 인공위성(이하 ‘위성’이라 +함)이 있다. 위성은 위성의 전반적인 구동을 수행하는 본체와 위성의 임무를 수행하는 탑재체로 구분되며, +세부 구성요소를 표현한 아키텍처는 아래 그림과 같다. +| 그림 3 | 위성 아키텍처 + +![이미지 15-0](images/p0015_img0.png) + + +--- + +16 | 우주 보안모델 +본체는 열제어시스템, 전력공급시스템, 위성제어시스템, 궤도제어시스템, 위성내부 버스, 명령 및 +데이터처리시스템, 통신시스템 등으로 구성되고, 탑재체는 위성 본체에 탑재되어 위성에 부여된 임무를 +수행하게 된다. 탑재체의 임무에 따라 위성의 역할이 결정되며, (그림3)에서처럼 페이로드, 페이로드 +데이터처리시스템 및 통신시스템으로 구성되어 있다. +위성 본체와 탑재체의 구성요소에 대한 자세한 설명은 아래 표와 같다. +표 4 위성 아키텍처 구성요소 +구분 +구성요소 +설 명 +본체 +열제어 +시스템 +• ‌위성 내부의 온도 제어시스템 +• ‌주요기능 +- 위성 내부 전자부품들이 작동하는데 필요한 온도를 벗어나지 않도록 제어 +전력공급 +시스템 +• ‌생성된 전력을 위성의 탑재체 및 기타 장비에 대하여 전력을 조절, 분배하고 여분의 전력을 +저장하여 관리하는 시스템 +• ‌주요기능 +- 전력 생성 : 태양광 에너지를 수집하여 전기 에너지로 변환 +- 전력 저장 : 전력을 배터리 시스템에 저장 +- 전력 관리 : 전력이 필요한 각 하위 시스템에 전력을 제공 +- 발열 관리 : 위성 내부의 온도를 유지 +위성제어 +시스템 +• ‌위성의 안정화, 정밀 자세제어, 안테나 지향, 태양전지판 및 추진기 제어 등 위성의 자세와 +궤도를 제어하는 시스템 +• ‌주요기능 +- 자세 결정 : 내장된 센서들을 사용하여 위성의 자세 결정 +- 자세 제어 : 위성의 자세를 원하는 상태로 유지 +- 자세 추적 : 위성의 임무 수행을 위하여 관찰 또는 통신이 가능하도록 위성의 자세를 추적 +- 자세 안정성 : 불안정 요소 제어, 위성 자세를 안정적으로 유지 +궤도제어 +시스템 +• ‌위성의 운영 궤도를 제어하는 시스템 +• ‌주요기능 +- 위성의 궤도를 제어하기 위한 추진기 구동 및 제어 +위성내부 +버스 +• ‌위성 내부의 서브시스템 간 정보 교환을 위한 네트워크 시스템 +• ‌주요기능 +- 위성을 구성하는 열제어, 전력공급, 위성제어, 궤도제어 등의 서브시스템 간 정보의 전송 +명령 및 +데이터처리 +시스템 +• ‌지상국 원격 명령을 수신하고, 명령 인증, 디코딩, 저장, 실행 및 명령을 배포하는 시스템 +• ‌주요기능 +- 위성의 원격 측정 정보를 수집, 형식화, 저장 및 재생하여 지상국으로 전송 +- 위성체 및 탑재체들을 관리 + +--- + + +## 제2장 우주 아키텍처 | 17 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +구분 +구성요소 +설 명 +공통 +통신시스템 +• ‌지상국과 위성 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- 위성이 임무수행을 통하여 얻은 데이터를 지상으로 전송 +- ‌지상국에서 위성에 보내는 위성 운영에 관한 원격명령 및 원격측정 데이터를 수신하여 +명령 및 데이터 처리계에 전송 +탑재체 +페이로드 +• ‌위성에 탑재되어 주요 임무 또는 기능을 수행하는 시스템 주요기능 +- 통신, 탐사, 관측 등의 임무를 수행 +페이로드 데이터 +처리 시스템 +• ‌페이로드(탑재체)에서 전송된 데이터를 처리하는 시스템 주요기능 +- 페이로드가 수행한 임무 데이터를 처리 +위성은 탑재체의 임무에 따라 관측위성, 기상위성, 항법위성, 방송통신위성 등으로 다양하게 구분할 수 +있으며, 운영 궤도별로 정지궤도 위성, 중궤도 위성, 저궤도 위성, 저궤도 군집위성 등으로 분류할 수 있다. +임무별 위성 종류에 대하여 설명하면 아래 표와 같다. +표 5 임무별 위성 종류 +구 분 +설 명 +항법 위성 +(GNSS11) +• ‌글로벌 네비게이션 위성 +• ‌주요기능 +- 지구상의 위치와 항법, 시각 정보를 제공하는 신호 전송 +통신 위성 +• ‌음성, 데이터 및 멀티미디어 전송 등의 통신 서비스를 중계하는 위성 +• ‌주요기능 +- 위성 전화, 광대역 인터넷, 이동통신 등의 통신 중계 +방송 위성 +• ‌지상에서 송출하는 방송을 수신하여 지상으로 중계하는 위성 +• ‌주요기능 +- 지상의 위성방송 송출센터에서 송출하는 방송을 지상으로 중계 +해상조난·안전 위성 +(GMDSS12) +• ‌해상의 조난경보 및 안전정보를 제공하는 위성 +• ‌주요기능 +- 각종 해양 재난·안전 정보를 관련 기관 및 단체 등과 공유 +- 선박 운항 모니터링 및 조난경보의 송신과 수신 +- 수색 및 구조를 위한 국제통신 +- 위치 측정을 위한 신호 발생 +- 해양 안전정보13 통보 +11 ‌‌‌GNSS : Global Navigation Satellite System +12 ‌‌‌GMDSS : Global Maritime Distress and Safety System +13 ‌‌‌해양 안전정보 : 항행 정보, 기상정보 및 기타 긴급정보 등으로 구성 + +--- + +18 | 우주 보안모델 +궤도 유형별 위성에 대하여 설명하면 아래 표와 같다. +표 6 궤도별 위성 종류 +구 분 +설 명 +정지궤도 위성 +• ‌지구로부터 약 36,000km의 높이에 위치한 위성으로 지구의 자전과 동기화된 궤도에 위치하고 +지구와 같은 속도로 공전하는 궤도를 가지고 있음 +중궤도 위성 +• ‌정지궤도와 저궤도 중간에 위치한 위성으로 지구로부터 약 2,000km~36,000km 높이 사이에 위치 +저궤도 위성 +• ‌지구로부터 약 250~2,000km의 높이에 위치한 위성으로 상대적으로 짧은 궤도주기를 가지고 있음 +저궤도 군집위성 +• ‌소형위성들이 일정한 간격으로 지구 저궤도를 돌며 동시에 같은 목적의 임무를 수행하는 위성의 집단 +나. 지상국 영역 +지상국 영역은 위성을 운영 및 제어하기 위한 위성운영 영역과 페이로드에서 데이터를 수신하고 수신한 +데이터를 서비스하기 위한 페이로드 데이터 이용 영역으로 구분된다. 지상국 영역의 세부 구성요소를 +제시하는 아키텍처는 아래 그림과 같다. +| 그림 4 | 지상국 아키텍처 + +--- + + +## 제2장 우주 아키텍처 | 19 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +위성운영 영역은 위성상태모니터링 시스템, 궤도제어시스템, 미션제어 및 운영지원 시스템, 위성제어 +시스템, 긴급대응 및 위기관리 시스템 등으로 구성되고, 페이로드 데이터 이용 영역은 데이터 수신 및 처리 +시스템, DB 분석 및 시각화 시스템, 페이로드 데이터 서비스 시스템, 실험계획 및 제어시스템, 관측요청 +접수 시스템 등으로 구성되어 있다. +(그림4)에 표현된 구성요소를 설명하면 아래 표와 같다. +표 7 지상국 아키텍처 구성요소 +구 분 +구성요소 +설 명 +공통 +위성모뎀 +• ‌지상국 시스템과 안테나 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- 위성운영을 위한 지상국 내부의 각 시스템들로부터 수신한 원격명령을 안테나로 송신 +- 안테나로부터 수신한 원격측정 및 페이로드 데이터를 지상국 내부의 각 관련된 시스템으로 송신 +위성 +운영 +영역 +페이로드 +DB +• ‌탑재체로부터 수신한 데이터를 저장하는 시스템 +• ‌주요기능 +- 원격명령 및 원격측정 등의 위성운영 데이터의 저장 +위성상태 +모니터링 +시스템 +• ‌위성의 운영 상태를 모니터링하는 시스템 +• ‌주요기능 +- 위성 운영 상태 및 이상징후를 지속적으로 감시하고 추적 +위성 +제어시스템 +• ‌지상에서 위성의 자세 유지 및 변경을 제어하는 시스템 +• ‌주요기능 +- 특정 대상 관찰이나 통신 수행 시 위성의 자세 제어 +궤도 +제어시스템 +• ‌지상에서 위성의 궤도를 제어하고 유지하는 시스템 +• ‌주요기능 +- 위성의 속도와 방향을 조절하며 위성의 고도, 경사각 등을 제어 +긴급대응 +및 위기관리 +시스템 +• ‌위성운영 중 발생할 수 있는 긴급 상황이나 위기 시, 대응 시스템 +• ‌주요기능 +- 위험 상황 시, 긴급 대응 +- 위성의 안전과 장비에 대한 위험을 최소화하기 위한 관리 +미션제어 및 +운영지원 +시스템 +• ‌위성의 임무를 관리하고 운영을 지원하는 시스템 +• ‌주요기능 +- 위성 임무 일정 관리, 데이터 수집 및 분석 +페이로드 +데이터이용 +영역 +관측요청 +접수시스템 +• ‌탑재체에서 수행할 사용자의 요청사항을 접수하고 관리하는 시스템 +• ‌주요기능 +- 탑재체 업무 수행 일정 관리 및 고객 요구사항 관리 + +--- + +20 | 우주 보안모델 +구 분 +구성요소 +설 명 +페이로드 +데이터이용 +영역 +데이터 수신 및 +처리시스템 +• ‌위성으로부터 수집된 데이터를 수신하여 처리하는 시스템 +• ‌주요기능 +- 페이로드로부터 수집된 데이터를 해석하고 분석하여 필요한 정보를 생성 +데이터분석 +및 +시각화시스템 +• ‌수집된 데이터를 분석하고 시각적으로 표현하는 운영지원 시스템 +• ‌주요기능 +- ‌페이로드로부터 수집된 데이터를 처리하고 시각화하여 페이로드 데이터 이용 센터의 +운영자들에게 필요한 정보 제공 +실험계획 및 +제어시스템 +• ‌위성에 장착된 실험 장비의 실험계획 및 제어를 담당하는 시스템 +• ‌주요기능 +- 실험 장비의 수행 계획, 제어, 모니터링 및 평가 +페이로드 +데이터서비스 +시스템 +• ‌페이로드 데이터를 사용자에게 제공하는 시스템 +• ‌주요기능 +- 수신한 페이로드 데이터를 편집 및 가공하여 사용자에게 제공 +다. 위성활용 서비스 영역 +위성활용 서비스 영역은 위치정보를 제공해 주는 위성항법 서비스와 통신 및 방송을 중계해주는 +위성방송통신 서비스로 구분된다. +1) 위성항법 서비스 +위성항법 부문의 위성활용 서비스에 대한 설명은 아래 표와 같다. +표 8 위성항법 서비스 +구 분 +설 명 +스마트선박 +• ‌위성으로부터 위치정보를 수신하여 해양에서의 선박 운항에 사용하는 위성항법 서비스 +자율주행차 및 +도심항공모빌리티14 (UAM) +• ‌위성으로부터 위치정보를 수신하여 지상교통 및 항공교통에서의 차량 운행에 사용하는 +위성항법 서비스 +14 ‌‌‌도심항공모빌리티 UAM (Urban Air Mobility) : 저고도 공중에서 비행하여 사람 또는 화물을 운송하는 도시의 단거리 항공 운송 교통수단 + +--- + + +## 제2장 우주 아키텍처 | 21 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +2) 위성통신 서비스 +위성통신 부문의 위성활용 서비스에 대한 설명은 아래 표와 같다. +표 9 위성통신 서비스 +구 분 +설 명 +스마트선박 +• ‌VSAT 위성안테나와 통신위성의 서비스를 활용하여 지상의 인터넷 서비스 사용할 수 있도록 +지원하는 선박의 위성통신 서비스 +저궤도위성 기반 · +이동통신 서비스 +• ‌저궤도 통신위성을 이용하여, 전용 위성모뎀이 탑재된 휴대폰을 사용하거나 스마트폰 사용을 +지원하는 이동통신 서비스 +저궤도위성 기반 · +인터넷 서비스 +• ‌사용자가 위성안테나를 활용하여 저궤도를 공전 중인 군집위성으로 웹사이트 접속 요청을 +보내, 지상의 인터넷 서비스 인프라를 사용할 수 있는 위성 인터넷 서비스 +3) 위성방송 서비스 +위성방송 부문의 위성활용 서비스에 대한 설명은 아래 표와 같다. +표 10 위성방송 서비스 +구 분 +설 명 +위성방송 서비스 +• ‌지상 방송국의 방송서비스를 위성을 활용하여 중계하는 방송 서비스 + +--- + +22 | 우주 보안모델 +2 +위성활용 서비스 아키텍처 +가. 위성항법 서비스 +위성항법 서비스는 항법위성으로부터 위치정보를 수신하여 수신한 위치정보를 해상, 지상 및 항공교통· +에서의 차량 운행에 사용하는 서비스이다. 항법위성에서 지상으로 위치정보를 전송하고, 스마트선박, +자율주행차 및 도심항공모빌리티(UAM)에서 위치정보 수신기를 통해 실시간으로 수신하여 운항에 +사용한다. +위성항법 서비스 아키텍처는 아래 그림과 같다. +| 그림 5 | 위성항법 서비스 아키텍처 +위성항법 서비스 아키텍처의 구성요소로는 항법위성, 위성 정보 송·수신을 지원하는 지상국, 항법위성· +으로부터 항법정보를 수신하여 필요한 정보만 추출하는 항법데이터 수신국, 항법데이터 수신국으로부터 + +![이미지 22-0](images/p0022_img0.png) + + +--- + + +## 제2장 우주 아키텍처 | 23 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +위치정보를 수신하여 위치 보정데이터를 생성하는 항법데이터 중앙처리국, 그리고 위치정보를 이용하는 +스마트선박, 자율주행차 및 도심항공모빌리티(UAM)로 구성된다. 대표적인 구성요소로는 스마트선박의 +GNSS 수신 안테나 및 위성항법시스템, 항법데이터 수신국의 안테나, 위성모뎀, 항법데이터 수집 및 +전달시스템, 라우터, 항법데이터 중앙처리국의 위치정보시스템, 라우터, 자율주행차 및 도심항공모빌리티 +(UAM)의 GPS 수신기, 위치정보데이터 해석기, 지도데이터 저장장치, 네비게이션 등이 포함된다. +위성항법 서비스 구성요소에 대한 설명은 아래 표와 같다. +표 11 위성항법 서비스 아키텍처 구성요소 +구분 +구성요소 +설 명 +항법위성 +안테나 +• ‌항법위성이 지상과 신호를 송·수신하는 장비 +• ‌주요기능 +- 수신안테나 : 지상으로부터 신호를 수신하여 위성의 통신시스템으로 전달 +- 송신안테나 : 통신시스템으로부터 전달받은 신호를 지상으로 전달 +통신시스템 +• ‌위치정보 데이터를 송신안테나로 전달하는 시스템 +• ‌주요기능 +- 위성항법 시스템으로부터 위치정보 데이터 수신 +- 전파의 채널조절 및 출력 증폭 후 송신안테나로 데이터 전송 +위성항법 시스템 +• ‌위치(Positioning), 항법(Navigation), 시각(Timing) 정보를 지상으로 제공하는 시스템 +• ‌주요기능 +- 지상의 모든 객체를 대상으로 통일된 좌표계상에서 신뢰성 있는 절대 위치정보 제공 +지상국 +안테나 +• ‌지상국에서 항법위성으로 신호를 송신하는 장비 +• ‌주요기능 +- 위성모뎀으로부터 수신한 신호를 항법위성으로 전송 +위성모뎀 +• ‌안테나와 지상국 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- ‌지상국의 내부 네트워크로부터 항법위성으로 송신하는 데이터를 지상국 안테나로 +전송 +안테나 +제어시스템 +• ‌위성과의 신호 전달을 원활하게 하기 위하여 지상국에 설치되어 있는 안테나를 제어하는 +시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 + +--- + +24 | 우주 보안모델 +구분 +구성요소 +설 명 +지상국 +관리서버 +• ‌지상국 네트워크를 구성하고 관리하는 네트워크 관리시스템 +• ‌주요 기능 +- 네트워크 단말관리 DB 운영, GUI 기능 제공 +- ‌네트워크 구성 : 단말 및 지상국 구성, 주파수 할당, 위성정보, 사용자 프로토콜 구성, +위성 프로토콜 구성을 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 +라우터 +• ‌네트워크와 네트워크 간의 트래픽을 전송하는 통신 시스템 +• 주요기능 +- 항법데이터 중앙처리국으로부터 수신한 데이터를 위성모뎀으로 전송 +항법 +데이터 +중앙 처리국 +위치정보 +시스템 +• ‌GPS 오차정보를 보정하고 GPS 신호의 이상 여부를 확인하는 보정 정보 및 무결성 +정보를 생성하여 관리하는 시스템 +• ‌주요기능 +- GPS 오차정보 보정 +- 오차정보에 대한 보정정보 및 무결성 정보 생성 +- 생성된 위치정보를 지상국으로 전송 +라우터 +• ‌항법데이터 중앙처리국의 네트워크를 외부 네트워크와 연계해주는 통신 시스템 +• ‌주요기능 +- 경로설정 : 외부 네트워크로 빠른 데이터 전송을 위한 경로 설정 +- 데이터 전송 : 설정한 네트워크 경로의 다음 장비로 데이터를 전송 +- ‌항법데이터 수신국으로부터 수신한 데이터를 항법데이터 중앙처리국의 내부 +네트워크로 전송 +- ‌항법데이터 중앙처리국의 내부 네트워크로부터 수신한 위치정보시스템의 데이터를 +지상국으로 전송 +항법 +데이터 +수신국 +안테나 +• ‌항법위성으로부터 위치정보를 수신하는 장비 +• ‌주요기능 +- 위성으로부터 신호를 수신하여 위성모뎀으로 전달 +위성모뎀 +• ‌안테나와 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- ‌항법데이터 수신국 안테나로부터 데이터를 수신하고, 수신한 데이터를 항법데이터 +수신국의 내부 네트워크로 전송 +안테나 +제어시스템 +• ‌위성과의 신호 전달을 원활하게 하기 위하여 지상국에 설치되어 있는 안테나를 제어하는 +시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 + +--- + + +## 제2장 우주 아키텍처 | 25 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +구분 +구성요소 +설 명 +항법 +데이터 +수신국 +항법데이터 수집 +및 전달 시스템 +• ‌수신한 데이터에서 항법데이터를 추출하여 항법데이터 중앙처리국으로 전송하는 시스템 +• ‌주요기능 +- 항법위성으로부터 위치정보 수신 +- 항법 데이터 추출 +- 항법데이터 중앙처리국으로 항법데이터 전송 +라우터 +• ‌항법데이터 수신국의 네트워크를 외부 네트워크와 연계해주는 통신 시스템 +• ‌주요기능 +- 경로설정 : 외부 네트워크로 빠른 데이터 전송을 위한 경로 설정 +- 데이터 전송 : 설정한 네트워크 경로의 다음 장비로 데이터를 전송 +- ‌항법데이터 수신국의 내부 네트워크로부터 수신한 항법데이터 수집 및 전달 시스템의 +데이터를 항법데이터 중앙처리국 네트워크로 전송 +선박 +GNSS +안테나 +• ‌항법위성으로부터 위치정보 신호를 수신하는 장비 +• ‌주요기능 +- 항법위성에서 전송하는 위치정보 신호를 수신하고, 선박 위성항법시스템으로 전송 +선박 +위성항법 +시스템 +• ‌수신한 선박의 위치정보를 선박 운항에 사용하는 항법 시스템 +• ‌주요기능 +- GNSS 위성모뎀으로부터 데이터 수신 +- 수신한 데이터를 해양에서 선박 운항에 사용 +자율 +주행차 +GPS수신기 +• ‌항법위성으로부터 실시간 위치정보를 수신하는 장비 +• ‌주요기능 +- GPS 신호 포착 및 수신 +위치정보 +데이터 해석기 +• ‌수신한 위치정보의 데이터를 분석하고 해석하는 장치 +• ‌주요기능 +- GPS 신호의 조사 및 탐색 +- 주파수 변환 또는 증폭 +- 거리 및 위치 계산 +지도데이터 +저장장치 +• ‌지도 정보를 사용하기 위한 위치정보 데이터 저장장치 +• ‌주요기능 +- GPS위치정보, 지도, 주소정보, 도로정보 등을 저장 +네비게이션 +• ‌차량 자동 항법 장치로 다양한 차량 내 제어기와 통신하여 위치정보를 지도데이터와 +연동하여 화면에 표출 +• ‌주요기능 +- 경로 탐색(Routing), 안내(Route Guiding), 검색(Search) +- 교통 정보(Traffic Information) + +--- + +26 | 우주 보안모델 +구분 +구성요소 +설 명 +UAM +GPS수신기 +• ‌항법위성으로부터 실시간 위치정보를 수신하는 장비 +• ‌주요기능 +- GPS 신호 포착 및 수신 +위치정보 +데이터 해석기 +• ‌수신한 위치정보의 데이터를 분석하고 해석하는 장치 +• ‌주요기능 +- GPS 신호의 조사 및 탐색 +- 주파수 변환 또는 증폭 +- 거리 및 위치 계산 +지도데이터 +저장장치 +• ‌지도 정보를 사용하기 위한 위치정보 데이터 저장장치 +• ‌주요기능 +- GPS위치정보, 지도, 주소정보, 도로정보 등을 저장 +항공운영/ +제어시스템 +• ‌도심 항공기 운영 및 제어에 필요한 시스템들의 통합 명칭 +• ‌주요기능 및 시스템 +- 버티포트(vertiport) 이착륙 +- 회랑(Corrider) 이동 및 관제시스템 연계 +- 도심 항공 주행 및 비행 관리 +- 엔진 및 전력제어 등의 추진시스템 등 +나. 위성통신 서비스 +위성통신 서비스는 정지궤도 및 저궤도 군집위성의 위성통신 서비스를 이용하여 스마트폰의 이동통신 +사용, 스마트선박과 기업, 가정집 등에서 지상의 인터넷 인프라 사용 등을 지원하는 위성활용 서비스이다. +위성통신 서비스는 스마트선박 위성통신 서비스, 저궤도위성 기반 이동통신 서비스, 저궤도위성 기반 +인터넷 서비스로 분류된다. +1) 스마트선박 위성통신 서비스 +스마트선박에서 위성으로 통신서비스를 요청하면, 위성이 수신한 데이터를 지상국으로 전송하고 +지상국에서는 수신받은 데이터를 지상의 이동통신 및 인터넷 네트워크와 연결하여 요청받은 통신서비스를 +제공한다. + +--- + + +## 제2장 우주 아키텍처 | 27 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +스마트선박 위성통신 서비스 아키텍처는 아래 그림과 같다. +| 그림 6 | 스마트선박 위성통신 서비스 아키텍처 +스마트선박 위성통신 서비스 아키텍처는 통신위성, 위성통신 서비스의 정보 송·수신을 지원하는 +지상국, 스마트선박의 운행을 모니터링하는 선박본사, 선박 본사와의 통신하거나 인터넷을 이용하는 +스마트선박 등으로 구성된다. +대표적인 구성요소로는 정지궤도 통신위성의 안테나 및 통신시스템, 지상국의 안테나, 안테나 제어· +시스템, 관리서버, 라우터, 스마트선박의 선박 운항을 원격으로 관리하는 선박본사, 초소형 위성통신지구국 +(VSAT) 안테나, 위성모뎀 및 관리서버, 선박 운영을 위한 제어시스템 등의 스마트선박 시스템 등이 +포함된다. + +--- + +28 | 우주 보안모델 +스마트선박 위성통신 서비스 구성요소에 대한 설명은 아래 표와 같다. +표 12 스마트선박 위성통신 서비스 구성요소 +구분 +구성요소 +설 명 +통신위성 +안테나 +• ‌통신위성이 지상과 신호를 송·수신하는 장비 +• ‌주요기능 +- 수신안테나 : 지상으로부터 신호를 수신하여 위성의 통신시스템으로 전송 +- 송신안테나 : 통신시스템으로부터 수신한 신호를 지상으로 전송 +통신시스템 +• ‌수신안테나로부터 수신한 데이터를 송신안테나로 전송하는 시스템 +• ‌주요기능 +- 수신안테나로부터 신호를 입력받아 오류검출 및 정정 작업 등을 수행 +- 전파의 채널조절 및 출력 증폭 후 송신안테나로 전송 +선박 +VSAT +안테나 +• ‌선박에서 통신위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 통신위성으로부터 신호를 수신하여 VSAT 위성모뎀으로 전송 +- VSAT 위성모뎀으로부터 수신한 신호를 통신위성으로 전송 +위성모뎀 +• ‌안테나와 선박 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- VSAT 안테나로부터 데이터를 수신하고, 수신한 데이터를 선박의 내부 네트워크로 전송 +- 선박의 내부 네트워크로부터 통신위성으로 송신하는 데이터를 VSAT 안테나로 전송 +안테나제어 +시스템 +• ‌위성과의 신호 전송을 원활하게 하기 위하여 VSAT 안테나를 제어하는 시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 +관리서버 +• ‌VSAT 네트워크를 구성하고 관리하는 네트워크 관리시스템 +• ‌주요 기능 +- 네트워크 단말관리 DB 운영, GUI 기능 제공 +- ‌네트워크 구성 : 단말 및 선박망 구성, 주파수 할당, 위성정보, 사용자 프로토콜 구성, · +위성 프로토콜 구성 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 +스위치 +• ‌선박 내부 네트워크(LAN환경)를 구성하는 통신 장비 +• ‌주요기능 +- VSAT 네트워크와 선박 네트워크 연결 + +--- + + +## 제2장 우주 아키텍처 | 29 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +구분 +구성요소 +설 명 +선박 +업무시스템 +• ‌선박을 운영하는데 필요한 정보를 관리하는 정보처리 시스템들의 통합 명칭 +• ‌주요기능 +- 선박 안전관리 +- 선박 정비 및 자재 관리 +- 선원 인사관리 +- 선박 항해 일정 관리 및 식품 구매 관리 등 +선박 +제어시스템 +• ‌선박 운항에 필요한 제반 장비들을 제어하는 시스템들의 집합 +• ‌주요기능 +- 선박 운항 및 항해통신 장비들의 제어 +- ‌해도정보, 위치정보, 선박 침로·속력·수심 자료 등을 종합하여 시각화 및 관리하는 해상지리 +정보 시스템의 제어 및 운영 +- 전파를 이용한 물체의 감지 또는 레이다를 이용한 거리 측정 +- 선박의 방향 속도 등을 제어 +- 해저 깊이 측정 등 +전력시스템 +• ‌선박 운항에 필요한 전력을 관리하는 시스템 +• ‌주요기능 +- 전력 관련 기기의 제어 상태 및 전력 사용 등에 대한 현황 정보를 관제 시스템에 전송 +- 전력의 사용 상태 감시 +- 전력기기의 이상 유무 체크 및 감시 +- 비상 전력 등 관리 +Wi-Fi +무선AP +• ‌무선으로 네트워크를 사용하도록 모바일 장비와 연결해 주는 통신 시스템 +• ‌주요기능 +- ‌위성통신과 연계하여 선원을 비롯한 선박 탑승자들이 무선으로 외부 지상의 네트워크를 +사용하도록 환경 제공 +- 스마트폰 및 모바일 무선통신 기기의 인터넷 사용 지원 +지상국 +안테나 +• ‌지상국에서 통신위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 위성으로부터 신호를 수신하여 위성모뎀으로 전송 +- 위성모뎀으로부터 전송받은 신호를 위성으로 전송 +위성모뎀 +• ‌안테나와 지상국 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- 지상국 안테나로부터 데이터를 수신하고, 수신한 데이터를 지상국 내부 네트워크로 전송 +- 지상국의 내부 네트워크로부터 통신위성으로 송신하는 데이터를 지상국 안테나로 전송 +안테나제어 +시스템 +• ‌위성과의 신호 전송을 원활하게 하기 위하여 지상국에 설치되어 있는 안테나를 제어하는 시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 + +--- + +30 | 우주 보안모델 +구분 +구성요소 +설 명 +지상국 +관리서버 +• ‌지상국 네트워크를 구성하고 관리하는 네트워크 관리시스템 +• ‌주요 기능 +- 네트워크 단말관리 DB 운영, GUI 기능 제공 +- ‌네트워크 구성 : 단말 및 지상국 구성, 주파수 할당, 위성정보, 사용자 프로토콜 구성, · +위성 프로토콜 구성 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 +라우터 +• ‌네트워크와 네트워크 간의 트래픽을 전송하는 통신 시스템 +• ‌주요기능 +- 경로설정 : 다른 네트워크로 빠른 데이터 전송을 위한 경로 (Route) 설정 +- 데이터 전송 : 설정한 네트워크 경로의 다음 장비로 데이터를 전송 +- 위성모뎀으로부터 수신한 데이터를 지상의 외부 네트워크로 전송 +- 지상의 외부 네트워크로부터 수신한 데이터를 위성모뎀으로 전송 +선박 +본사 +업무용 PC +• ‌선박 본사에서 임직원들이 사용하는 업무용 PC +• ‌주요기능 +- 선박본사 내부의 정보시스템 사용 +- 메일 및 그룹웨어 사용 +- 선박모니터링 시스템 사용 +선박 +모니터링 +시스템 +• ‌운항중이거나 정박중인 자사의 선박에 대한 정보 조회 시스템 +• ‌주요기능 +- 선박 현재 위치 정보 및 운항 관련 정보 조회 +- 선박의 제어 및 전력 등 현황 정보 모니터링 +- 선박의 이상 이벤트 정보 모니터링 +- ‌해양통신위성 서비스 업체에서 제공해 주는 기능을 사용하며 선박 회사별로 사용자 계정을 +할당받아 사용 +라우터 +• ‌선박 본사의 네트워크를 외부 네트워크와 연계해 주는 통신 시스템 +• ‌주요기능 +- 경로설정 : 외부 네트워크로 빠른 데이터 전송을 위한 경로 (Route) 설정 +- 데이터 전송 : 설정한 네트워크 경로의 다음 장비로 데이터를 전송 +- 지상의 외부 네트워크로부터 수신한 데이터를 선박본사 내부 네트워크로 전송 +- 선박본사 내부 네트워크로부터 수신한 데이터를 지상의 외부 네트워크로 전송 + +--- + + +## 제2장 우주 아키텍처 | 31 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +2) 저궤도위성 기반 이동통신 서비스 +저궤도위성 기반 이동통신 서비스는 저궤도 통신위성을 이용하여 전용 위성모뎀이 탑재된 휴대폰 또는 +스마트폰 사용을 지원하는 위성활용 이동통신 서비스이다. 스마트폰 등 이동통신 단말기에서 저궤도· +위성으로 이동통신 서비스를 요청하면, 요청 데이터를 수신한 저궤도위성이 지상국으로 수신한 데이터를 +전송하고, 지상국에서는 수신받은 데이터를 지상의 이동통신 네트워크와 연결한다. +저궤도위성 기반 이동통신 서비스 아키텍처는 저궤도 군집위성, 이동통신 서비스 정보 송·수신을 +지원하는 지상국, 위성 모뎀이 탑재된 스마트폰으로 구성된다. 대표적인 구성요소로는 군집위성의 안테나, +통신시스템, 지상국의 안테나, 안테나 제어시스템, 관리서버, 라우터 등이 포함된다. +저궤도위성 기반 이동통신 서비스의 아키텍처는 아래 그림과 같다. +| 그림 7 | 저궤도위성 기반 이동통신 서비스 아키텍처 + +![이미지 31-0](images/p0031_img0.png) + + +--- + +32 | 우주 보안모델 +저궤도위성 기반 이동통신 서비스 구성요소에 대한 설명은 아래 표와 같다. +표 13 저궤도위성 기반 이동통신 서비스 구성요소 +구분 +구성요소 +설 명 +군집 +위성 +안테나 +• ‌군집위성이 지상과 신호를 송·수신하는 장비 +• ‌주요기능 +- 수신안테나 : 지상으로부터 신호를 수신하여 위성의 통신시스템으로 전송 +- 송신안테나 : 통신시스템으로부터 수신한 신호를 지상으로 전송 +- 위성통신 서비스가 계약된, 이동통신서비스 기업의 스마트폰이 사용하는 주파수 대역 지원 +통신시스템 +• ‌수신안테나로부터 수신한 데이터를 송신안테나로 전송하는 시스템 +• ‌주요기능 +- 수신안테나로부터 신호를 입력받아 오류검출 및 정정 작업 등을 수행 +- 전파의 채널조절 및 출력 증폭 후 송신안테나로 전송 +위성간 +통신 +• ‌레이저 통신으로 위성 간 정보 전달 +• ‌주요기능 +- ‌서비스를 위해 지상국과 통신 필요 시, 위성이 지나가는 위치에 지상국이 존재하지 않으면 +다음 위성으로 정보 전달 +- 지상국 상공을 지나가는 위성이 다른 위성으로부터 전달받은 정보를 지상국으로 전달 +지상국 +안테나 +• ‌지상국에서 군집위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 군집위성으로부터 신호를 수신하여 위성모뎀으로 전송 +- 위성모뎀으로부터 수신한 신호를 군집위성으로 전송 +위성모뎀 +• ‌안테나와 지상국 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- 지상국 안테나로부터 데이터를 수신하고, 수신한 데이터를 지상국 내부 네트워크로 전송 +- 지상국의 내부 네트워크로부터 통신위성으로 송신하는 데이터를 지상국 안테나로 전송 +안테나 제어 +시스템 +• ‌위성과의 신호 전달을 원활하게 하기 위하여 지상국에 설치되어 있는 안테나를 제어하는 시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 +관리서버 +• ‌지상국 네트워크를 구성하고 관리하는 네트워크 관리시스템 +• ‌주요 기능 +- 네트워크 단말관리 DB 운영, GUI 기능 제공 +- ‌네트워크 구성 : 단말 및 지상국 구성, 주파수 할당, 위성정보, 사용자 프로토콜 구성, · +위성 프로토콜 구성 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 + +--- + + +## 제2장 우주 아키텍처 | 33 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +구분 +구성요소 +설 명 +지상국 +라우터 +• ‌네트워크와 네트워크 간의 트래픽을 전달하는 통신 시스템 +• ‌주요기능 +- 경로설정 : 다른 네트워크로 빠른 데이터 전송을 위한 경로 설정 +- 데이터 전달 : 설정한 네트워크 경로의 다음 장비로 데이터를 전달 +- 위성모뎀으로부터 수신한 데이터를 지상의 외부 네트워크로 전송 +- 지상의 외부 네트워크로부터 수신한 데이터를 위성모뎀으로 전송 +스마트폰 +- +• ‌휴대 전화와 컴퓨팅 기능을 하나로 통합한 모바일 컴퓨터 +• ‌주요기능 +- 전화 통화, 문자 등의 모바일 전화기 +- 나침반, GPS, 지도 등의 이용 +- 인터넷을 이용한 데이터 및 음성 통신 +- 통신위성을 이용한 데이터 및 음성 통신 +코어망 +- +• ‌지상의 네트워크 인프라로 대용량, 초고속 전송 기능의 통신시스템을 구성하는 백본망 +• ‌주요기능 +- 이동통신 및 인터넷 서비스 네트워크 +- 통신 데이터를 대용량, 초고속으로 전송 +- 인터넷, 광역 네트워크(WAN) 등의 통합 네트워크 +3) 저궤도위성 기반 인터넷 서비스 +저궤도위성 기반 인터넷 서비스는 저궤도 군집위성의 위성통신 서비스를 이용하여, 지상의 인터넷 +인프라 사용을 지원하는 위성활용 인터넷 서비스이다. 기업과 가정집에서 저궤도 군집위성으로 인터넷 +서비스를 요청하면, 요청 데이터를 수신한 저궤도 군집위성이 지상국으로 수신한 인터넷 서비스 요청을 +전송하고, 지상국에서는 지상의 인터넷과 연계하여 기업과 가정집에 인터넷 서비스를 제공한다. +저궤도위성 기반 인터넷 서비스 아키텍처는 저궤도 군집위성, 인터넷 서비스 정보 송·수신을 지원하는 +지상국, 그리고 인터넷 서비스를 이용하는 기업 및 가정집으로 구성된다. 대표적인 구성요소로는 기업의 +안테나, 라우터, 무선AP, 업무용PC, 기업 업무시스템 등이 포함되고, 가정집의 안테나, Wi-Fi 라우터, +개인용PC 등이 포함된다. + +--- + +34 | 우주 보안모델 +저궤도위성 기반 인터넷 서비스의 아키텍처는 아래 그림과 같다. +| 그림 8 | 저궤도위성 기반 인터넷 서비스 아키텍처 +저궤도위성 기반 인터넷 서비스의 구성요소에 대한 설명은 아래 표와 같다. +표 14 저궤도위성 기반 인터넷 서비스 구성요소 +영역 +구성요소 +설 명 +군집 +위성 +안테나 +• ‌군집위성이 지상과 신호를 송·수신하는 장비 +• ‌주요기능 +- 수신안테나 : 지상으로부터 신호를 수신하여 위성의 통신시스템으로 전송 +- 송신안테나 : 통신시스템으로부터 수신한 신호를 지상으로 전송 +통신시스템 +• ‌수신안테나로부터 수신한 데이터를 송신안테나로 전송하는 시스템 +• ‌주요기능 +- 수신안테나로부터 신호를 입력받아 오류검출 및 정정 작업 등을 수행 +- 전파의 채널조절 및 출력 증폭 후 송신안테나로 전송 + +![이미지 34-0](images/p0034_img0.png) + + +--- + + +## 제2장 우주 아키텍처 | 35 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +영역 +구성요소 +설 명 +군집 +위성 +위성간 +통신 +• ‌레이저 통신으로 위성 간 정보 전송 +• ‌주요기능 +- ‌서비스를 위해 지상국과 통신 필요 시, 위성이 지나가는 위치에 지상국이 존재하지 않으면 +다음 위성으로 정보 전송 +- 지상국 상공을 지나가는 위성이 다른 위성으로부터 전송받은 정보를 지상국으로 전송 +기업 +안테나 +• ‌평판안테나를 주로 사용하며, 기업에서 군집위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 전자식 빔 조향기술로 저궤도 위성을 추적, 위성을 스스로 탐색 +- 내부 반도체 칩으로 신호를 추적하여 전파 방향 조정 +- 군집위성과 라우터 사이에서 데이터 송·수신 +라우터 +• ‌안테나와 기업의 네트워크 사이에서 데이터를 전송하며, 위성 통신을 이용하여 외부 네트워크와 +연계해주는 통신 시스템 +• ‌주요기능 +- 기업의 네트워크를 외부 네트워크와 연계 +- 안테나 및 기업 내부 네트워크 사이에서 데이터 송·수신 +스위치 +• ‌기업의 내부 네트워크(LAN환경)를 구성하는 통신 장비 +• ‌주요기능 +- 업무용PC 및 기업 업무시스템 등을 기업의 내부 네트워크에 연결 +무선AP +• ‌무선으로 네트워크를 사용하도록 모바일 장치와 연결해 주는 통신 시스템 +• ‌주요기능 +- 모바일 무선통신 기기의 기업 내부 네트워크 연결 +업무용 PC +• ‌기업 내에서 임직원들이 사용하는 업무용 PC +• ‌주요기능 +- 기업 내부의 정보시스템 사용 +- 메일 및 그룹웨어 사용 +기업 +업무시스템 +• ‌기업 운영에 필요한 정보를 관리하는 정보처리 시스템들의 통합 명칭 +• ‌주요기능 +- 그룹웨어 및 메일 시스템 +- 전사적자원관리(ERP) 시스템 +- 공급망관리(SCM) 시스템 +- 고객관리(CRM)관리 시스템 등 +가정집 +안테나 +• ‌평판안테나를 주로 사용하며, 가정집에서 군집위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 전자식 빔 조향기술로 저궤도 위성을 추적, 위성을 스스로 탐색 +- 내부 반도체 칩으로 신호를 추적하여 전파 방향 조정 +- 군집 위성과 Wi-Fi 라우터 사이에서 데이터 송·수신 + +--- + +36 | 우주 보안모델 +영역 +구성요소 +설 명 +가정집 +Wi-Fi 라우터 +• ‌안테나와 개인용PC를 연결하고 데이터를 전송하는 통신 시스템 +• ‌주요기능 +- Wi-Fi 무선 및 유선 인터넷 서비스 지원 +- 가정집 네트워크를 외부 네트워크와 연계 +- 안테나 및 가정집 네트워크 사이에서 데이터 송·수신 +개인용 PC +• ‌집에서 개인이 사용하는 PC +• ‌주요기능 +- 저궤도 군집위성과 연계하여 인터넷 사용 +지상국 +안테나 +• ‌지상국에서 군집위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 군집위성으로부터 신호를 수신하여 위성모뎀으로 전송 +- 위성모뎀으로부터 수신한 신호를 군집위성으로 전송 +위성모뎀 +• ‌안테나와 지상국 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- 지상국 안테나로부터 데이터를 수신하고, 수신한 데이터를 지상국 내부 네트워크로 전송 +- 지상국의 내부 네트워크로부터 군집위성으로 송신하는 데이터를 지상국 안테나로 전송 +안테나 +제어시스템 +• ‌위성과의 신호 전송을 원활하게 하기 위하여 지상국에 설치되어 있는 안테나를 제어하는 +시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 +관리서버 +• ‌지상국 네트워크를 구성하고 관리하는 네트워크 관리시스템 +• ‌주요기능 +- 네트워크 단말관리 DB 운영, GUI 기능 제공 +- ‌네트워크 구성 : 단말 및 지상국 구성, 주파수 할당, 위성정보, 사용자 프로토콜 구성, · +위성 프로토콜 구성 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 +라우터 +• ‌네트워크와 네트워크 간의 트래픽을 전송하는 통신 시스템 +• ‌주요기능 +- 경로설정 : 다른 네트워크로 빠른 데이터 전송을 위한 경로 설정 +- 데이터 전송 : 설정한 네트워크 경로의 다음 장비로 데이터를 전송 +- 위성모뎀으로부터 수신한 데이터를 지상의 외부 네트워크로 전송 +- 지상의 외부 네트워크로부터 수신한 데이터를 위성모뎀으로 전송 + +--- + + +## 제2장 우주 아키텍처 | 37 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +다. 위성방송 서비스 +위성방송 서비스는 방송위성의 중계서비스를 이용하여, 지상에서 방송위성으로 송출한 방송콘텐츠를 +지상의 인터넷을 이용하여 시청하는 위성활용 서비스이다. 위성방송 송출센터에서 방송위성으로 방송· +콘텐츠를 송신하면, 방송콘텐츠를 수신한 방송위성이 지상국으로 방송콘텐츠를 전송하고, 지상국에서는 +수신받은 방송콘텐츠를 지상의 인터넷을 통해 사용자에게 전송한다. +위성방송 서비스 아키텍처는 방송위성, 방송콘텐츠 송·수신을 지원하는 지상국과 위성방송송출센터, +그리고 방송콘텐츠를 이용하는 가정집으로 구성된다. 대표적인 구성요소로는 위성방송송출센터의 안테나, +안테나제어시스템, 관리서버, 라우터 등이 포함되고, 가정집의 통신사 모뎀, 셋톱박스, 개인용 PC, TV +등이 포함된다. +위성방송 서비스의 아키텍처는 아래 그림과 같다. +| 그림 9 | 위성방송 서비스 아키텍처 + +--- + +38 | 우주 보안모델 +위성방송 서비스 구성요소에 대한 설명은 아래 표와 같다. +표 15 위성방송 서비스 구성요소 +영역 +구성요소 +설 명 +방송위성 +안테나 +• ‌방송위성이 지상과 신호를 송·수신하는 장비 +• ‌주요기능 +- 수신안테나 : 지상으로부터 신호를 수신하여 위성의 통신시스템으로 전송 +- 송신안테나 : 통신시스템으로부터 수신한 신호를 지상으로 전송 +통신 +시스템 +• ‌수신안테나로부터 수신한 데이터를 송신안테나로 전송하는 시스템 +• ‌주요기능 +- 수신안테나로부터 신호를 입력받아 오류검출 및 정정 작업 등을 수행 +- 전파의 채널조절 및 출력 증폭 후 송신안테나로 전송 +지상국 +안테나 +• ‌지상국에서 방송위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 방송위성으로부터 신호를 수신하여 위성모뎀으로 전송 +위성모뎀 +• ‌안테나와 지상국 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- 지상국 안테나로부터 데이터를 수신하고, 수신한 데이터를 지상국 내부 네트워크로 전송 +- 지상국의 내부 네트워크로부터 방송위성으로 송신하는 데이터를 지상국 안테나로 전송 +안테나 제어 +시스템 +• ‌위성과의 신호 전달을 원활하게 하기 위하여 지상국에 설치되어 있는 안테나를 제어하는 시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 +관리서버 +• ‌지상국 네트워크를 구성하고 관리하기 위한 네트워크 관리시스템 +• ‌주요 기능 +- 네트워크 단말관리 DB 운영, GUI 기능 제공 +- ‌네트워크 구성 : 단말 및 지상국 구성, 주파수 할당, 위성정보, 사용자 프로토콜 구성, 위성 +프로토콜 구성 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 +라우터 +• ‌네트워크와 네트워크 간의 트래픽을 전달하는 통신 시스템 +• ‌주요기능 +- 경로설정 : 다른 네트워크로 빠른 데이터 전송을 위한 경로 설정 +- 데이터 전달 : 설정한 네트워크 경로의 다음 장비로 데이터를 전송 +- 위성모뎀으로부터 수신한 데이터를 지상의 외부 네트워크로 전송 +- 지상의 외부 네트워크로부터 수신한 데이터를 위성모뎀으로 전송 + +--- + + +## 제2장 우주 아키텍처 | 39 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +영역 +구성요소 +설 명 +위성방송 +송출센터 +안테나 +• ‌위성방송송출센터에서 방송위성으로 신호를 송·수신하는 장비 +• ‌주요기능 +- 방송위성으로부터 신호를 수신하여 위성모뎀으로 전송 +- 위성모뎀으로부터 수신한 신호를 방송위성으로 전송 +위성모뎀 +• ‌안테나와 위성방송송출센터 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- ‌위성방송송출센터의 내부 네트워크로부터 방송위성으로 송신하는 데이터를 위성방송· +송출센터 안테나로 전송 +- ‌위성방송송출센터의 내부 네트워크로부터 방송위성으로 송신하는 데이터를 위성방송· +송출센터의 안테나로 전송 +안테나제어 +시스템 +• ‌위성과의 신호 전달을 원활하게 하기 위하여 위성방송송출센터에 설치되어 있는 안테나를 +제어하는 시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 +관리서버 +• ‌위성방송송출센터의 네트워크를 구성하고 관리하기 위한 네트워크 관리시스템 및 방송콘텐츠 +관리 시스템들의 통합 명칭 +• ‌주요기능 +- 네트워크 단말관리 DB 운영, GUI 기능 제공 +- ‌네트워크 구성 : 단말 구성, 주파수 할당, 위성정보, 사용자 프로토콜 구성, 위성 프로토콜 +구성 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 +- 방송콘텐츠 관리 +- 방송송출 관리 및 제어 +라우터 +• ‌위성방송송출센터의 네트워크를 외부 네트워크와 연계해주는 통신 시스템 +• ‌주요기능 +- 지상의 외부 네트워크로부터 수신한 데이터를 위성방송송출센터 내부 네트워크로 전송 +- 외부기관(방송콘텐츠 제작사 등)으로부터 방송콘텐츠 수신 +가정집 +통신사 +모뎀 +• ‌가정집 홈네트워크를 외부 네트워크인 인터넷과 연결해 주는 통신 시스템 +• ‌주요기능 +- 인터넷 서비스 통신사로부터 방송콘텐츠 데이터를 수신하고, 수신한 데이터를 셋톱박스로 전송 + +--- + +영역 +구성요소 +설 명 +가정집 +셋톱박스 +• ‌통신사모뎀으로부터 수신한 방송콘텐츠를 TV 등 디스플레이 장치로 시청할 수 있도록 지원하는 +변환장치 +• ‌주요기능 +- 암호화되어 있는 위성방송 데이터를 영상 데이터로 복호화 +개인용PC +• ‌셋톱박스에서 변환된 방송콘텐츠를 시청할 수 있는 개인용 PC +• ‌주요기능 +- 셋톱박스와 연결된 TV 수신 카드를 사용하여 위성방송 시청 +TV +• ‌셋톱박스에서 변환된 방송콘텐츠를 시청할 수 있도록 해주는 디스플레이 장치 +• ‌주요기능 +- 셋톱박스와 연결하여 위성방송 시청 + +--- + + +## 제3장 + +우주 보안위협 + +## 1. 우주 보안위협 도출 절차 + + +## 2. 우주 및 지상국 보안위협 + + +## 3. 위성활용 서비스 보안위협 + + +## 4. 우주 보안위협 유형 + + +--- + +42 | 우주 보안모델 + +## 제3장 + +우주 보안위협 +본 장에서는 우주 보안위협에 대해 기술하였다. 우주의 위성활용 서비스 아키텍처별로 존재할 수 있는 +보안위협을 세분화하여 살펴보고, 우주 대표 보안위협 유형 세 가지를 선정하여 각 보안위협 유형별로도 +분석하였다. 우주 보안위협 내용은 다음과 같이 네 부분으로 기술하였다. + +## 1. 우주 보안위협 도출 절차에서는 보안위협을 도출하는 절차를 설명하였다. + +2. ‌우주 및 지상국 보안위협에서는 우주 아키텍처에서 표현한 우주 영역과 지상국 영역의 구성요소에서 +발생할 수 있는 보안위협을 도출하였다. + +## 3. 위성활용 서비스 보안위협에서는 각 서비스들별로 존재할 수 있는 보안위협을 도출하였다. + +4. ‌우주 보안위협 유형에서는 우주의 대표적인 보안위협 유형을 선정하고 보안위협 유형에 해당하는 +보안위협을 재정리하여 아키텍처에 표현하였다. + +--- + + +## 제3장 우주 보안위협 | 43 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +1 +우주 보안위협 도출 절차 +우주 보안위협은 보안위협을 정의하고, 공격자가 공격을 시작하는 공격 벡터15와 공격대상, 공격 +시나리오를 정의하는 단계로 도출하였다. 우주 보안위협은 아래 그림과 같이 4단계로 진행하여 도출· +하였으며, 우주 및 지상국, 위성활용 서비스별로 동일하게 적용하였다. +| 그림 10 | 보안위협 도출 절차 +• ‌1단계 : 보안위협 정의 +- 우주 및 지상국, 위성활용 서비스 가용성에 부정적 영향을 줄 수 있는 이벤트 +• ‌2단계 : 공격 벡터 정의 +- 보안위협을 발생시키기 위한 공격의 시작 지점과 경로 정의 +• ‌3단계 : 공격대상 정의 +- 보안위협 피해가 발생하는 주요 자산과 서비스 구간 정의 +• ‌4단계 : 보안위협 주요내용 작성 +- 공격벡터와 공격대상에 따라 발생 가능한 보안위협 시나리오 제시 +공격대상은 우주 및 지상국 구성요소와 위성활용 서비스별 구성요소로서 각 구성요소에 대한 설명은 2 + +### 장의 1. 우주 아키텍처 2. 위성활용 서비스 아키텍처를 참조한다. 공격 벡터 및 주요 발생 요인에 대한 + +내용은 아래 표와 같다. +표 16 공격벡터 및 발생요인 +공격 벡터 +발생요인 +위성 +• ‌위성의 소프트웨어 취약점(CVE)을 이용한 공격이 가능한 경우 +• ‌페이크(fake) 위성 및 단말 등에 의한 공격이 가능한 경우 +• ‌노후 또는 폐기 위성에 의하여 침해사고 발생이 가능한 경우 +• ‌위성의 전원/온도 등 지원설비를 이용하여 장애 발생이 가능한 경우 +• ‌위성 소프트웨어 업데이트 등을 이용한 공격이 가능한 경우 +• ‌개발 단계에 미적용된 보안 요구사항으로 침해가 가능한 경우 +• ‌위성 및 위성관련 시스템 제조·개발 벤더사 등을 이용하여 공격이 가능한 경우 +• ‌위성 기기 조달 및 부품 공급에 의한 공격이 가능한 경우 +15 ‌‌‌공격 벡터 (attack vector) : 공격자가 컴퓨터나 네트워크에 침입하기 위해 사용하는 진입 경로와 방법 + +--- + +44 | 우주 보안모델 +공격 벡터 +발생요인 +위성서비스 +통신구간 +• ‌위성과 지상국간 도청이 가능한 경우 +• ‌위성과 사용자간 정보 가로채기가 가능한 경우 +• ‌재밍이 가능한 경우 +지상국 +• ‌지상국의 소프트웨어 취약점(CVE)을 이용한 공격이 가능한 경우 +• ‌지상국 시스템의 취약점(CCE), 취약한 보안설정(계정, 인증, 권한 등)을 이용한 공격이 가능한 경우 +• ‌암호화 미적용 또는 취약한 암호화 알고리즘을 사용한 경우 +• ‌지상국 통신장비의 구성오류 또는 접근통제 취약 등으로 지상국 내부의 공격이 가능한 경우 +위성서비스 +운영자 및 사용자 +• ‌위성 운영자 실수 등에 의한 경우 +• ‌위성 운영자 및 사용자의 의도적인 권한 탈취로 비인가 작업이 가능한 경우 +• ‌위성 운영자 및 사용자가 의도적으로 중요 정보를 유출하거나 훼손하는 경우 +위성서비스 장비 및 +시설 +• ‌무선망, ISP코어망 등 외부에서 인터넷 경로를 활용하여 위성서비스 장비 침투가 가능한 경우 +• ‌외부에 알려진 정보 또는 서비스를 활용하여 위성서비스 장비 접속이 가능한 경우 +• ‌유지보수를 위한 위성서비스 장비 원격접속 채널로 내부 침투가 가능한 경우 +• ‌장비 및 설비 운영장소에 물리적으로 접근이 가능한 경우 +• ‌물리적으로 접근하여 장비 훼손이 가능한 경우 +• ‌물리적인 접근통제 취약으로 시스템 침해가 가능한 경우 +아래 그림은 보안위협 도출 과정에 대한 예시이다. 본 예시에서는 알려진 보안취약점이라는 보안위협이 +위성서비스 장비 및 시설을 공격벡터로 하여 VSAT 관리서버 대상의 알려진 VSAT 관리 서버 취약점을 +악용해 위성 인터페이스 정보 무단 변경을 유발할 수 있다는 시나리오를 예로 들어 제시하고 있다. +| 그림 11 | 보안위협 도출 예시 +대상 +공격 벡터 +주요내용 +••• +••• +위성 항법시스템 +VSAT 안테나 +안테나제어시스템 +VSAT 관리서버 +GPS 수신기 +지도 데이터 +저장장치 +위치정보 시스템 +보안위협 +세션 하이재킹 +GPS 위장 교란 +재밍 (Jamming) +데이터 변조 +데이터 유출 +••• +악성코드 감염 +알려진 보안 취약점 +시스템 권한탈취 +물리적 손상 +위성 +위성서비스 통신구간 +지상국 +위성서비스 +운영자 및 사용자 +위성서비스 +장비 및 시설 +• ‌VSAT 안테나와 위성 +사이에서 신호 가로채기 및 +도청으로 주요정보 유출 +• ‌공개된 VSAT 취약점을 +활용하여, 관리 서버에 +원격 접속하고 위성 +인터페이스 정보 무단 변경 +• ‌보안 취약점이 있는 부품이 +탑재된 GPS 수신기의 +공급으로 자율주행차의 +위치정보 수신 장애 +• ‌기업과 위성간 송〮수신되는 +위성 신호를 수집 및 +분석하여 기업의 주요정보 +불법 획득 + +--- + + +## 제3장 우주 보안위협 | 45 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +2 +우주 및 지상국 보안위협 +우주 및 지상국 영역은 위성과 지상국간의 통신 구간에서의 보안위협과 위성에 대한 직접적인 공격으로 +발생할 수 있는 보안위협이 존재한다. 위성과 지상국 통신 구간에서의 주요정보 유출, 악성코드 감염 및 +위성 소프트웨어 취약점에 의한 위성 오작동 및 서비스 장애, 지상국을 통한 외부의 공격으로 +위성페이로드 서비스 중단 등의 보안위협이 존재할 수 있다. +우주 및 지상국 영역에서 발생 가능한 보안위협은 아래 표와 같다. +표 17 우주 및 지상국 보안위협 +보안위협 +공격벡터 +대상 +주요 내용 +중간자 공격 +위성 +위성 +운행중인 위성과 충돌시키기 위해, 궤도변경 원격명령을 운영하지 +않는 노후된 위성으로 전송 +소프트웨어 결함 +위성 +위성의 원격 실행 인터페이스를 이용하여, 자세제어 오작동을 +유발하는 악성코드 설치 +소프트웨어 결함 +위성 +위성 시스템 소프트웨어 취약점을 이용하여 버퍼 오버플로를 유발· +시키는 원격명령 전송 +재밍 +(Jamming) +위성서비스 +통신구간 +지상국 +위성안테나 +지상국 위성안테나 재밍 공격으로 위성페이로드 시스템에서 데이터 +수신 장애 +세션 +하이재킹 +위성 ~ 지상국 +위성안테나 구간 +위성에서 지상국으로 전송하는 데이터 가로채기 +세션 +하이재킹 +위성 +위성으로 전송하는 위성제어 신호를 분석 하여, 조작된 위성 오작동 +신호 전송 +재밍 +(Jamming) +저궤도 군집위성 +~ 위성활용 +서비스 단말 구간 +저궤도 군집위성과 위성통신하는 지상설비의 위치 정보를 획득하여 +해당 지역으로 재밍 +세션 하이재킹 +지상국 +위성안테나 +소프트웨어 정의 라디오(SDR) 장치를 활용하여 데이터 분석 후, +위성안테나로 조작된 위성 신호 전송 +알려진 +보안취약점 +지상국 +위성 페이로드 +시스템 +위성페이로드 시스템의 디폴트 계정을 도용하여 접속 후, 페이로드 +데이터 삭제 + +--- + +46 | 우주 보안모델 +보안위협 +공격벡터 +대상 +주요 내용 +비인가 저장 매체 +사용 +지상국 +위성제어 +시스템 +운영자 PC에서 오작동 명령을 전송하는 악성코드가 설치된 비인가 +USB 사용으로, 위성 오작동 +악성코드 감염 +위성활용 서비스 +사용자 단말 +비정상 신호를 송신하는 악성코드가 삽입된 파일 배포로, 감염된 +시스템들이 위성으로 지속적인 비정상 신호 전송 +업데이트 결함 +위성모뎀 +위성모뎀 제작업체의 펌웨어 업데이트로 가장하여 원격 불법 +업데이트를 통해 시스템 파일 삭제 +내부자 위협 +위성서비스 +운영자 및 사용자 +위성 +소프트웨어 정의 라디오(SDR) 비인가 장치와 지상국 단말기로 +위성의 오작동 원격명령 전송 +관리자 계정 도용 +위성제어 +시스템 +내부자가 위성제어시스템에 관리자 공유계정으로 접속하여 원격측정 +DB 정보 불법 유출 +알려진 +보안취약점 +위성서비스 장비 +및 시설 +위성 +페이로드 시스템 +알려진 정보로 위성페이로드 시스템에 불법 접속하고 위성 오작동을 +유도하는 원격명령 전송 +알려진 +보안취약점 +위성 +페이로드 시스템 +유지보수 채널로 위성페이로드 시스템에 침투 후, 페이로드 서비스 +네트워크 정보 훼손 +알려진 +보안취약점 +위성 페이로드 +시스템 +알려진 유지보수 채널을 이용하여, 위성페이로드 시스템에 외이퍼 +(wiper) 악성코드를 전파 +시스템 콘솔 접근 +위성제어 시스템 +시스템 운영실에 불법 출입하여 위성제어시스템 유지보수 콘솔 +접속으로 시스템 설정 정보 변경 +악성코드 감염 +위성제어 +시스템 +메일로 악성코드에 감염된 위성제어시스템에 원격접속하여, 위성의 +궤도 이탈 원격명령 전송 +시스템 +권한 탈취 +위성제어 +시스템 +통신장비 구성오류로 원격격접속 후, 위성제어 시스템 관리자 권한을 +탈취하여, 위성 궤도정보 변경 +물리적 손상 +위성 페이로드 +시스템 +시스템 운영실에 불법 출입하여 위성 페이로드 시스템의 네트워크 +연결 케이블 훼손 + +--- + + +## 제3장 우주 보안위협 | 47 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +3 +위성활용 서비스 보안위협 +가. 위성항법 서비스 보안위협 +위성항법 서비스에서는 항법위성으로 가장하고 UAM에 조작된 위치정보를 송신하여 UAM 주행 오류 +발생, 보안취약점이 있는 부품이 탑재된 GPS 수신기의 공급으로 자율주행차의 위치정보 수신 장애 등 +다양한 보안위협이 존재할 수 있다. +| 그림 12 | 위성항법 서비스 주요 보안위협 +1 +2 +3 +4 +5 +① 항법위성으로 가장하고 UAM에 조작된 위치정보를 송신하여 UAM 주행 오류 발생 +② 보안취약점이 있는 부품이 탑재된 GPS 수신기의 공급으로 자율주행차의 위치정보 수신 장애 +③ 위치정보를 변조하여 선박의 위성항법시스템으로 전송, 변조된 위치정보로 인해 선박의 항로 이탈 +④ 랜섬웨어에 감염된 노트북을 불법 반입 후 내부망에 접속, 네트워크를 통해 위치정보시스템 감염 +⑤ 비인가자가 항법데이터 수신국 안테나에 불법 접근하여 안테나 시설을 훼손하여 위성 통신 중단 + +--- + +48 | 우주 보안모델 +위성항법 서비스에서 발생 가능한 보안위협은 아래 표와 같다. +표 18 위성항법 서비스 보안위협 +보안위협 +공격벡터 +대상 +주요 내용 +재밍 +(Jamming) +위성서비스 +통신구간 +항법위성~지상국 통신구간 +지상국 안테나에 대한 재밍으로, 항법위성으로의 위치정보 보정· +데이터 송신 방해 +데이터 변조 +항법위성 ~ GNSS 안테나 +통신구간 +선박의 항로 이탈을 유도하기 위하여 위치정보를 변조하여 +선박의 위성항법 시스템으로 전송 +재밍 +(Jamming) +항법위성~자율주행차 GPS +수신기 통신구간 +국지적으로 방해전파를 송출하여 해당 지역을 운행하는 자율· +주행차의 위치정보 수신 방해 +세션 +하이재킹 +지상국~ +항법데이터중앙처리국 +통신구간 +지상국으로 전송하는 데이터 가로채기 후, 항법위성으로 송신· +하는 정보 조작으로 항법위성의 위치정보 무단 변경 +GPS위장 +교란 +UAM GPS 수신기 +항법위성으로 가장하고 조작된 위치정보를 송신하여, UAM +GPS가 조작된 위치정보 수신으로 주행 오류 발생 +악성코드 +감염 +지상국 +항법데이터중앙처리국 +위치정보시스템 +비인가자가 출입하여 랜섬웨어에 감염된 노트북을 불법 반입 +후, 네트워크를 통해 위치정보시스템이 감염되어 위치정보 파일 +암호화 +데이터 유출 +지상국/항법데이터 수신국 +관리서버 +지상국/항법데이터 수신국에 노트북을 불법 반입 후, 네트워크를 +통해 시스템의 중요 데이터 유출 +비인가 저장 +매체 사용 +지상국 관리서버 +지상국 관리서버에서 와이퍼(wiper) 악성코드가 담긴 비인가 +USB 사용으로 악성코드에 감염되어, 시스템 파일 삭제 +알려진 +보안취약점 +위성서비스 +장비 및 시설 +지상국 관리서버/ +항법데이터수신국 항법 +데이터수집 및 전달시스템 +유지보수 원격 접속채널로 관리 서버에 불법 접속하여, 항법위성 +인터페이스 정보를 획득 +악성코드 +감염 +항법데이터 중앙처리국 +위치정보시스템 +인터넷에서 백도어가 설치된 업무PC에 비인가자가 접속하고, +취약 계정으로 위치정보시스템에 접속하여, 데이터 훼손 +알려진 +보안취약점 +지상국 관리서버 +알려진 지상국 관리정보를 활용하여 관리서버에 접속하고, +시스템 관리 권한을 탈취하여 네트워크 정보 변경 +서비스 거부 +공격 +지상국 라우터 +포트 스캔 등을 통해 취약 정보를 수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 위성 서비스 장애 +공급망 +보안위협 +자율주행차 GPS 수신기 +보안취약점이 있는 부품이 탑재된 GPS 수신기의 공급으로 +자율주행차의 위치정보 수신 장애 +물리적 손상 +지상국/항법데이터 수신국 +안테나 +비인가자가 지상국 또는 항법데이터 수신국 안테나에 불법 +접근하여 안테나 시설을 훼손하여 위성 통신 중단 + +--- + + +## 제3장 우주 보안위협 | 49 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +나. 위성통신 서비스 보안위협 +위성통신 서비스에는 스마트선박, 기업, 지상국, 가정집 등에 통신위성을 통해 비인가 접속하여 중요 +데이터를 파괴하거나 유출할 수 있는 보안위협, 통신위성과의 통신구간에서 중요데이터를 도청하거나 +변조할 수 있는 보안위협, 그리고 저궤도 군집위성의 라우팅 테이블을 변경하고 수동으로 업데이트를 조작· +하는 등의 보안위협 등이 존재할 수 있다. +대표적인 위성통신 서비스인 스마트선박 위성통신 서비스, 저궤도위성 기반 이동통신 서비스, 저궤도· +위성 기반 인터넷 서비스에서의 보안 위협은 다음과 같다. +1) 스마트선박 위성통신 서비스 보안위협 +스마트선박 위성통신 서비스는 위성통신 구간에서의 도청에 의한 정보유출, 위성통신을 통한 악성코드 +감염, 유지보수 채널 원격접속에 의한 선박 운항정보의 무단 변경, 알려진 VSAT 정보를 활용한 원격접속· +으로 위성 인터페이스 정보 변경 등의 보안 위협이 존재할 수 있다. +| 그림 13 | 스마트선박 위성통신 서비스 주요 보안 위협 +1 +2 +3 +4 +① VSAT 안테나와 위성 사이에서 신호 가로채기 및 도청으로 중요 정보 유출 +② 선원PC가 와이퍼(wiper) 악성코드를 업무시스템에 전파하여 시스템 파일 무단 삭제 +③ 유지보수 비밀 채널로 선박제어시스템에 비인가 원격 접속하여 운항 정보 무단 변경 +④ 공개된 VSAT 관리 서버 취약점을 활용하여 원격 접속하고 위성 인터페이스 정보 무단 변경 + +--- + +50 | 우주 보안모델 +스마트선박 통신위성 서비스에서 발생 가능한 보안위협은 아래 표와 같다. +표 19 스마트선박 위성통신 서비스 보안위협 +보안위협 +공격벡터 +대상 +주요 내용 +세션 하이재킹 +위성서비스 +통신구간 +통신위성 ~ VSAT +안테나 통신구간 +VSAT 안테나와 위성 사이에서 신호 가로채기 및 도청으로 주요· +정보 유출 +재밍 +(Jamming) +VSAT안테나 +VSAT 안테나에 대한 재밍 +데이터 유출 +지상국 +지상국 관리서버 +지상국에 노트북을 불법 반입 후, 네트워크를 통해 관리서버의 중요 +데이터 유출 +비인가 저장 +매체 사용 +지상국 관리서버 +지상국 관리서버에서 와이퍼(wiper) 악성코드가 담긴 비인가 USB +사용으로 악성코드에 감염되어, 시스템 파일 삭제 +악성코드 감염 +위성 서비스 +운영자 및 +사용자 +선박 업무시스템 +선원PC가 메일 수신으로 스파이웨어에 감염으로 인한 업무시스템 +감염으로 주요정보 유출 +악성코드 감염 +선박 업무시스템 +선원PC가 와이퍼(wiper) 악성코드를 업무시스템에 전파하여 +시스템 파일 무단 삭제 +알려진 +보안취약점 +위성서비스 +장비 및 시설 +VSAT 관리서버 +알려진 VSAT 정보로 관리서버에 원격접속 하고 시스템 관리 +권한을 탈취하여 네트워크 정보 무단 변경 +악성코드 감염 +선박 전력시스템 +백도어가 설치된 인터넷 사용 업무PC에 원격접속한 후, 전력· +시스템에 접속하여 시스템 설정 값 변경 +알려진 +보안취약점 +VSAT 관리서버 +알려진 VSAT 관리 서버 취약점을 활용하여 원격 접속하고 위성 +인터페이스 정보 무단 변경 +알려진 +보안취약점 +선박 제어시스템 +유지보수 비밀 채널로 선박제어시스템에 비인가 원격 접속하여 +운항 정보 무단 변경 +악성코드 감염 +선박 업무시스템 +랜섬웨어에 감염된 탑승객 노트북이 Wi-Fi 무선 사용으로, 업무· +시스템이 랜섬웨어에 감염 +소프트웨어 +결함 +선박 +스위치 +하드코딩된 계정으로 관리 서버에 원격 접속 후, 스위치 전용 와이퍼· +(wiper) 악성코드 전파로 네트워크 중단 +서비스 거부 +공격 +지상국 라우터 +포트 스캔 등을 통해 취약 정보를 수집하고, 지상국 대상으로 DDoS· +공격을 진행하여, 지상국의 위성 서비스 장애 +알려진 +보안취약점 +지상국 안테나 +제어시스템 +비인가자가 출입하여 안테나 제어시스템 디폴트 계정으로 접속한 +후, 설정 정보를 무단 변경 +물리적 손상 +VSAT/지상국 +안테나 +VSAT/지상국 안테나 케이블 훼손으로 선박/지상국의 위성통신 +서비스 중단 +물리적 손상 +VSAT 스위치 +VSAT 스위치 케이블을 변경하여 연결하고, 선박제어시스템 +네트워크를 외부에 공개 + +--- + + +## 제3장 우주 보안위협 | 51 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +2) 저궤도위성 기반 이동통신 서비스 보안위협 +저궤도위성 기반 이동통신 서비스는 제작업체로 가장한 불법 펌웨어 업데이트에 의한 위성통신 차단, +악성코드 감염에 의한 지속적인 비정상 신호 전송, 위성에서 지상국으로 전송하는 데이터 도청 등의 +보안위협이 존재할 수 있다. +| 그림 14 | 저궤도위성 기반 이동통신 서비스 주요 보안위협 +1 +2 +3 +① 스마트폰 제작업체의 펌웨어 업데이트를 가장하여 원격 불법 펌웨어 업데이트를 통해 위성통신 서비스 차단 +② 비정상 신호를 송신하는 악성코드가 삽입된 파일을 배포하여, 감염된 스마트폰이 위성으로 지속적인 비정상 신호 전송 +③ 지상설비의 위치 및 위성 신호 정보를 획득하여 위성에서 지상국으로 전송하는 데이터 도청 + +![이미지 51-0](images/p0051_img0.png) + + +--- + +52 | 우주 보안모델 +저궤도위성 기반 이동통신 서비스에서 발생 가능한 보안위협은 아래 표와 같다. +표 20 저궤도위성 기반 이동통신 서비스 보안위협 +보안위협 +공격벡터 +대상 +주요 내용 +공급망 +보안위협 +위성 +지상국 위성모뎀 +특정 위성모뎀 대상으로 제작된 와이퍼(wiper) 악성코드를 통신· +위성을 통해 배포하여, 위성모뎀의 시스템 파일 삭제 +공급망 +보안위협 +군집위성 +비인가 기기를 공급받아 군집위성군에 탑재하고 발사 후, 특정 조건 +성립으로 로직 폭탄이 폭발하여 궤도 이탈 +세션 하이재킹 +위성서비스 +통신구간 +위성 ~ 지상국 +통신구간 +지상설비의 위치 및 위성 신호 정보를 획득하여 위성에서 지상국· +으로 전송하는 데이터 도청 +재밍 +(Jamming) +스마트폰 ~ 위성 +통신구간 +국지적으로 방해전파를 송출하여 해당 지역 스마트폰의 위성통신 +재밍 +세션 하이재킹 +위성 ~ 지상국 +통신구간 +저궤도 군집위성과 위성통신하는 지상설비의 위치 정보를 획득하여 +해당 지역으로 재밍 +알려진 +보안취약점 +지상국 +지상국 라우터 +지상국 라우터 장비의 디폴트 계정을 도용하여 불법 로그인 후, +네트워크 구성정보를 무단으로 변경 +비인가 저장 +매체 사용 +지상국 관리서버 +지상국 관리서버에서 와이퍼(wiper) 악성코드가 담긴 비인가 USB +사용으로 악성코드에 감염되어, 시스템 파일 삭제 +데이터 유출 +지상국 관리서버 +지상국에 노트북을 불법 반입 후, 네트워크를 통해 관리서버의 중요 +데이터를 유출 +내부자 위협 +위성서비스 +운영자 및 +사용자 +지상국 안테나 +제어시스템 +지상국 내부자에 의한 안테나 제어시스템 조작 실수로 위성 통신 +서비스 장애 +관리자 계정 +도용 +지상국 관리서버 +운영자가 관리자 계정을 도용하여 관리서버에 불법 접속하고 +방송위성 운영 주요정보 유출 +관리자 계정 +도용 +군집위성 라우팅 +테이블 +위성 운영자가 관리자 공유계정을 도용하여, 저궤도 군집위성의 +라우팅 테이블을 변경하고, 수동 업데이트 조작 +서비스 거부 +공격 +위성서비스 +장비 및 시설 +지상국 라우터 +포트 스캔 등을 통해 취약 정보를 수집하고, 지상국 대상으로 DDoS· +공격을 진행하여, 지상국의 위성 서비스 장애 +업데이트 결함 +스마트폰 +스마트폰 제작업체의 펌웨어 업데이트를 가장하여 원격 불법 +펌웨어 업데이트를 통해 위성통신 서비스 차단 +악성코드 감염 +스마트폰 +비정상 신호를 송신하는 악성코드가 삽입된 파일을 배포하여, +감염된 스마트폰이 위성으로 지속적인 비정상 신호 전송 +악성코드 감염 +스마트폰 +데이터를 외부로 송신하는 악성코드가 삽입된 파일을 배포하여, +악성코드에 감염된 스마트폰에서 데이터 유출 +알려진 +보안취약점 +지상국 안테나 +제어시스템 +유지보수 엔지니어로 위장 출입하여, 안테나 제어시스템 디폴트 +계정으로 접속한 후, 설정 정보를 무단 변경 + +--- + + +## 제3장 우주 보안위협 | 53 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +3) 저궤도위성 기반 인터넷 서비스 보안위협 +저궤도위성 기반 인터넷 서비스는 기업과 위성간 통신구간을 도청하여 기업의 주요정보 불법 획득, +위성 운영자에 의한 저궤도 군집위성의 라우팅 테이블 변조, 스파이웨어 악성코드가 삽입된 Wi-Fi 라우터 +공급에 의한 위성통신 주요정보 유출 등의 보안위협이 존재할 수 있다. +| 그림 15 | 저궤도위성 기반 인터넷 서비스 주요 보안위협 +1 +2 +3 +① 기업과 위성간 송수신되는 위성 신호를 수집 및 분석하여 기업의 중요정보 불법 획득 +② 위성 운영자가 관리자 공유계정을 도용하여, 저궤도 군집위성의 라우팅 테이블을 변경하고, 수동 업데이트 조작 +③ 스파이웨어 악성코드가 삽입된 Wi-Fi 라우터가 공급되고 가정집에 설치되어, 위성 통신 시 주요 개인정보 유출 + +![이미지 53-0](images/p0053_img0.png) + + +--- + +54 | 우주 보안모델 +저궤도위성 기반 인터넷 서비스에서 발생 가능한 보안위협은 아래 표와 같다. +표 21 저궤도위성 기반 인터넷 서비스 보안위협 +보안위협 +공격벡터 +대상 +주요 내용 +공급망 +보안위협 +위성 +군집위성 +비인가 기기를 공급받아 군집위성군에 탑재하고 발사 후, 특정 조건 +성립으로 로직 폭탄이 폭발하여 궤도 이탈 +세션 하이재킹 +위성서비스 +통신구간 +기업~위성 통신구간 +기업과 위성간 송수신되는 위성 신호를 수집 및 분석하여 기업의 +주요정보 불법 획득 +재밍 +(Jamming) +기업 안테나 +기업의 안테나를 대상으로 재밍 공격을 진행하여 위성 인터넷 +서비스 장애 유발 +데이터 유출 +지상국 +지상국 관리서버 +지상국에 노트북을 불법 반입 후, 네트워크를 통해 관리서버의 중요 +데이터를 유출 +비인가 저장 +매체 사용 +지상국 관리서버 +지상국 관리서버에서 와이퍼(wiper) 악성코드가 담긴 비인가 USB +사용으로 악성코드에 감염되어, 시스템 파일 삭제 +내부자 위협 +위성서비스 +운영자 및 +사용자 +기업 라우터 +운영자가 라우터 설정 시, 실수로 잘못된 구성정보를 입력하여 +위성통신 중단 +관리자 계정 +도용 +군집위성 라우팅 +테이블 +위성 운영자가 관리자 공유계정을 도용하여, 저궤도 군집위성의 +라우팅 테이블을 변경하고, 수동 업데이트 조작 +악성코드 감염 +가정집 개인용PC +메일에 의해 스파이웨어에 감염된 개인PC에서, 주요 정보를 위성 +통신망을 통해 외부로 유출 +네트워크 구성 +오류 +위성서비스 +장비 및 시설 +기업 업무시스템 +라우터 구성정보 오류로, 비인가자가 기업 네트워크에 침투하고, +업무시스템 디폴트 계정으로 접속하여 백도어 설치 +악성코드 감염 +기업 무선AP +무선AP에 불법 접속 후, 위성으로 대용량 데이터를 반복 전송하는 +악성코드를 모든 PC에 감염시켜 위성통신 중단 +악성코드 감염 +기업 업무시스템 +업무PC가 위성 인터넷을 사용하면서 악성코드에 감염되고, +업무시스템을 감염시켜, 시스템 파일 무단 삭제 +악성코드 감염 +기업 업무PC +메일에 의해 백도어가 설치된 업무PC에, 비인가자가 접속하고 +업무시스템 취약점으로 관리자 권한을 획득 후, 주요정보 유출 +공급망 +보안위협 +가정집 Wi-Fi +라우터 +스파이웨어 악성코드가 삽입된 Wi-Fi 라우터가 공급되고 가정집에 +설치되어, 위성 통신 시 주요 개인정보 유출 +알려진 +보안취약점 +지상국 관리서버 +인터넷에서 관리서버 취약점을 활용하여 불법접속 후, 관리서버 +네트워크 정보를 변경하여 위성 통신 중단 +알려진 +보안취약점 +기업 라우터 +유지보수 엔지니어로 위장 출입하여, 기업 라우터 디폴트 계정으로 +접속한 후, 설정 정보를 무단 변경 +서비스 거부 +공격 +지상국 라우터 +포트 스캔 등을 통해 취약 정보를 수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 위성 서비스 장애 +물리적 손상 +기업/ 지상국 안테나 +외부에 설치된 기업/지상국 안테나에 불법 접근하여 안테나를 +훼손하여 위성통신 중단 + +--- + + +## 제3장 우주 보안위협 | 55 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +다. 위성방송 서비스 보안위협 +위성방송 서비스에서는 위성방송 송출센터 유지보수 엔지니어로 위장 출입하고 안테나 제어시스템 +디폴트 계정으로 접속하여 설정 값 변경, 지상국 라우터 장비의 디폴트 계정으로 불법 로그인하여 +네트워크 구성정보 무단 변경 등의 보안위협이 존재할 수 있다. +| 그림 16 | 위성방송 서비스 주요 보안위협 +1 +2 +3 +4 +① 폐기된 방송위성의 정보를 입수하여 페이크(fake) 방송콘텐츠를 송출하고, 지상으로 송신하도록 방송위성 조작 +② 방송위성과 통신하는 위성방송송출센터 주변에서 방해 전파 송출 +③ 위성방송송출센터 유지보수 엔지니어로 위장 출입하여, 안테나 제어시스템 디폴트 계정으로 접속 하여 설정 값 변경 +④ 지상국 라우터 장비의 디폴트 계정을 도용하여 불법 로그인 후, 네트워크 구성정보 무단 변경 + +--- + +56 | 우주 보안모델 +위성방송 서비스에서 발생 가능한 보안위협은 아래 표와 같다. +표 22 위성방송 서비스 보안위협 +보안위협 +공격벡터 +대상 +주요 내용 +폐기 장비 활용 +위성 +방송위성 +폐기된 방송위성의 제어 정보를 입수하여, 방송위성에 저장되어 +있는 주요정보를 불법 획득 +폐기 장비 활용 +방송위성 +폐기된 방송위성의 정보를 입수하여, 페이크(fake) 방송콘텐츠를 +송출하고, 지상으로 송신하도록 방송위성 조작 +재밍 +(Jamming) +위성서비스 +통신구간 +위성방송 송출센터 +~ 방송위성 통신구간 +방송위성과 통신하는 위성방송송출센터 주변에서 방해전파 송출 +세션 하이재킹 +위성통신 송출센터 +~ 지상국 통신구간 +지상설비의 위치 및 위성 신호 정보를 획득하여 위성에서 지상국· +으로 전송하는 데이터 도청 +알려진 +보안취약점 +지상국 +지상국 라우터 +지상국 라우터 장비의 디폴트 계정을 도용하여 불법 로그인 후, +네트워크 구성정보 무단 변경 +비인가 저장 +매체 사용 +위성방송 송출센터 +관리서버 +위성방송송출센터 관리서버에서 와이퍼(wiper) 악성코드가 담긴 +비인가 USB 사용으로, 시스템 파일 삭제 +악성코드 감염 +위성방송 송출센터 +관리서버 +위성방송 송출센터의 관리PC가 메일을 통해 와이퍼(wiper) +악성코드에 감염되어 콘텐츠 관리서버에 전파 및 콘텐츠 파일 삭제 +데이터 유출 +지상국 관리서버 +지상국에 노트북을 불법 반입 후, 네트워크를 통해 관리서버의 중요 +데이터 유출 +내부자 위협 +위성서비스 +운영자 및 +사용자 +위성방송 송출센터 +안테나 제어시스템 +위성방송송출센터의 안테나 제어시스템 운영자의 안테나 조작 +실수로 위성방송 서비스 장애 +내부자 위협 +위성방송 송출센터 +관리서버 +위성방송송출센터의 관리서버 운영자가 악의적으로 방송위성 +운영에 대한 주요정보 유출 +알려진 +보안취약점 +위성서비스 +장비 및 시설 +위성방송 송출센터 +안테나 제어시스템 +위성방송 송출센터 유지보수 엔지니어로 위장 출입하여, 안테나 +제어시스템 디폴트 계정으로 접속하여, 설정값 변경 +서비스 거부 +공격 +지상국 라우터 +포트 스캔 등을 통해 취약 정보를 수집하고, 지상국 대상으로 DDoS· +공격을 진행하여, 지상국의 위성 서비스 장애 +물리적 손상 +위성방송 송출센터/ +지상국 안테나 +안테나 설치 장소에 불법적으로 출입하여 안테나 설비 파손 +물리적 손상 +위성방송 송출센터 +위성모뎀 +비인가자가 위성방송송출센터 통신실에 승인 없이 출입하여, 위성· +모뎀 네트워크 케이블 훼손 + +--- + + +## 제3장 우주 보안위협 | 57 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +4 +우주 보안위협 유형 +우주 보안위협 유형은 NIST IR 8270에서 제시한 보안위협, 일본의 민간 우주시스템 사이버보안 대책 +가이드라인에서 제시한 위험 시나리오 및 위성관련 사고 사례를 분석하여 도출하였다. 보안위협 유형은 +보안위협의 결과로 나타나는 영향을 기준으로 분류하였다. 이를 통해 우주에서 발생 가능한 대표적인 +보안위협 유형으로 ‘위성 데이터 훼손’, ‘위성 서비스 장애’, ‘우주통신 정보 유출’의 세 가지로 정리하였다. +NIST IR 8270의 보안위협 내용은 아래 표와 같다. +표 23 NIST IR 8270 보안위협 유형 매핑 +NIST IR 8270 공격기법 +보안위협 +보안위협 유형 +센서 데이터의 의도적인 재밍 및 스푸핑 +재밍 +위성 서비스 장애 +센서 데이터 가로채기 및 도청 +세션 하이재킹 +우주통신 정보 유출 +센서 시스템의 고의적 손상 +물리적 손상 +위성 서비스 장애, 위성 데이터 훼손 +센서에 대한 서비스 거부 공격 +서비스 거부 공격 +위성 서비스 장애 +의도적인 재밍 및 가이던스 제어 스푸핑 +재밍 +위성 서비스 장애 +가이던스 제어에 대한 하이재킹 및 무단 명령 +세션 하이재킹 +우주통신 정보 유출 +악성 코드 삽입 +악성 코드 감염 +위성 서비스 장애 +가이던스에 대한 서비스 거부 공격 +서비스 거부 공격 +위성 서비스 장애 +일본 ‘민간 우주시스템 사이버보안 대책 가이드라인’에서 제시한 ‘위험 시나리오’의 보안위협16 내용은 +아래 표와 같다. +표 24 일본의 민간 우주시스템 사이버보안 대책 가이드라인 위험 시나리오 및 보안위협 유형 +위험 시나리오의 공격기법 +보안위협 +보안위협 유형 +• ‌직원 단말이 메일에 의해 멀웨어(Malware)에 감염되고, 인터넷을 통한 원격 +액세스로 자세제어 및 미션 기기제어, 위성 본체의 업 링크 데이터를 탈취· +하여, 탈취된 정보를 사용하여 조작된 커맨드를 위성에 전송 +악성코드 감염 +우주통신 정보 유출 +• ‌전자메일에 의한 개발 제조용 단말기가 악성 코드에 감염되어, 업데이트 +프로그램에 악성코드(백도어)가 삽입되고, 위성 프로그램이 업데이트되어, +위성을 원격조작 +악성코드 감염 +위성 서비스 장애 +16 ‌‌‌위험 시나리오의 공격기법 및 보안위협 내용은 원문의 단어나 구문에 얽매이지 않고, 이해하기 쉽도록 전체의 뜻에 맞도록 번역함 + +--- + +58 | 우주 보안모델 +위험 시나리오의 공격기법 +보안위협 +보안위협 유형 +• ‌위성 데이터 서비스 지상국에 무허가 단말기를 설치하여, 인터넷측으로· +부터 내부 침투 공격을 받아, 위성을 운용하는 지상의 인프라 시스템을 +포함한 각종 서버 다운 +비인가 장치 사용 +위성 서비스 장애 +• ‌데이터 접수 서버가 인터넷을 통해 무단으로 접속되어 랜섬웨어에 감염· +되고, 서버 환경의 설정 미흡으로 네트워크 내의 모든 서버 및 단말이 +감염되어 시스템 파일을 삭제 +악성코드 감염 +위성 데이터 훼손 +• ‌원격업무 실시 중, 동료로 가장한 메일에 의해 백도어 맬웨어에 감염되고, +인터넷을 통한 원격 액세스로 위성 제조와 관련된 기업의 주요정보 외부 +유출 +악성코드 감염 +우주통신 정보 유출 +• ‌멀웨어(Malware)에 감염된 허용되지 않은 개인 USB 메모리를 제조 설비 +컨트롤러에 사용하여, 컨트롤러 프로그램 변조 +비인가 저장 매체 사용 +위성 데이터 훼손 +• ‌위성 탑재 기기 조달시, 비인가 기기를 수납받고 군집위성군에 탑재하여 +발사, 발사 후 특정 조건 성립으로 로직 폭탄이 폭발하여 위성 궤도 이탈 +공급망 보안 위협 +위성 서비스 장애 +• ‌공격자가 준비한 통신 장치에 비인가 불법 칩을 부착하여 임의 코드를 +실행할 수 있는 상태로 만들고, 지상국에서 위성으로 조작된 불법 정보를 +전송 +비인가 장치 사용 +위성 데이터 훼손 +• ‌사용자를 향해 평문으로 송신되는 위성의 브로드캐스트 통신을 대상으로, +공개 정보를 이용하여 통신위성의 위치를 특정하고, 공격자가 준비한 +안테나를 사용하여 통신 내용을 가로채고, 가로챈 기밀 정보를 외부로 유출 +세션 하이재킹 +우주통신 정보 유출 +• ‌위성 방송을 위해 송수신하고 있는 전파에 대하여, 방해 전파로 재밍 공격 +재밍 +위성 서비스 장애 +• ‌위성 운영자가 악의적으로 시스템 관리자 계정으로 접속하여, 미션 수행 및 +미션 기기제어 정보를 악용하는 조작된 불법 커맨드를 위성에 송신 +관리자 계정 도용 +위성 서비스 장애 +일본의 ‘민간 우주시스템 사이버보안 대책 가이드라인’의 사고사례에서 보안위협 내용은 아래 표와 +같다. +표 25 일본 사이버보안 대책 가이드라인의 사고사례 보안위협 유형 매핑 +위성 관련 보안사고 공격기법 +년도 +보안위협 +보안위협 유형 +• ‌NASA Terra 위성에 대한 재밍 공격으로 위성제어 불능 +2008 +재밍 +위성 서비스 장애 +• ‌미국 해양대기청(NOAA)의 기상관측 위성 네트워크에 대해 인터넷을 +통한 사이버공격 +2014 +서비스 방해 +위성 서비스 장애 +• ‌국제 회의 Chaos Communication Camp 2015, 시판 안테나 등을 +이용하여 이리듐 통신위성의 페이저 통신데이터를 해석하여 통신· +내용 노출 +2015 +세션 하이재킹 +우주통신 정보 유출 +• ‌직원이 무허가 설치한 Raspberry Pi를 이용하여 나사(NASA) +제트추진연구소(JPL)의 네트워크에 불법 침투하고, 복수의 시스템 간 +이동으로 23개파일, 50MB 데이터 유출 +2018 +비인가 장치 사용 +우주통신 정보 유출 + +--- + + +## 제3장 우주 보안위협 | 59 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +위성 관련 보안사고 공격기법 +년도 +보안위협 +보안위협 유형 +• ‌국제회의 블랙햇(BlackHat), 정지궤도 통신위성에 대해, 시판하는 +안테나를 이용한 전파분석으로 통신내용이 암호화되지 않음을 시연 +- ‌위험물에 관한 정보, 풍력발전소의 관리자 권한 정보, 개인정보· +(여권 번호, 신용카드 데이터 등) 평문 확인 +2020 +세션 하이재킹 +우주통신 정보 유출 +• ‌Viasat사의 통신위성 “KA-SAT” 서비스를 이용하는 특정 통신모뎀이 +와이퍼(wiper) 악성코드 감염으로 위성 접속 불가 +2022 +악성코드 감염 +위성 서비스 장애 +• ‌SpaceX 하청업체 Maximum Industries에 랜섬웨어 공격으로 +SpaceX의 위성에 대한 약 3,000 개의 설계 문서를 유출 +2023 +악성코드 감염 +우주통신 정보 유출 +• ‌러시아의 위성통신 Dozor-Teleport 공격으로 Dozor 사의 지상국 +측 단말기에 악성코드를 감염시키고, 온라인 서비스 중지 및 회사의 +서버에 보관되어 있던 기밀 정보 유출 +2023 +악성코드 감염 +위성 서비스 장애, +우주통신 정보 유출 +가. 위성 데이터 훼손 +위성 데이터 훼손 보안위협은 정당한 권한을 보유하지 않은 비인가자 또는 내부 관련자가 위성 및 +위성활용 서비스와 관련된 시스템과 네트워크, 서비스의 데이터에 대해 변경, 훼손, 삭제 등의 불법적인 +행위를 통하여 서비스에 막대한 피해를 발생시킬 수 있는 보안위협이다. +스마트선박 위성통신 서비스를 대표적인 예시로 선정하여, 위성 데이터 훼손 보안위협을 정리하면 아래 +표와 같다. +표 26 위성 데이터 훼손 보안위협 +서비스 +대상 +보안위협 +스마트선박 +위성통신 서비스 +지상국 +관리서버 +지상국 관리서버에서 와이퍼(wiper) 악성코드가 담긴 비인가 USB 사용으로 악성코드에 +감염되어, 시스템 파일 삭제 +선박 +업무시스템 +선원PC가 와이퍼(wiper) 악성코드를 업무시스템에 전파하여 시스템 파일 무단 삭제 +VSAT +관리서버 +알려진 VSAT 정보로, 관리서버에 원격접속하고 시스템 관리 권한을 탈취하여 +네트워크 정보 무단 변경 +선박 +전력시스템 +백도어가 설치된 인터넷 사용 업무PC에 원격접속한 후, 전력시스템에 접속하여 +시스템 설정 값 변경 +VSAT +관리서버 +알려진 VSAT 관리 서버 취약점을 활용하여 원격 접속하고 위성 인터페이스 정보 · +무단 변경 +선박 +제어시스템 +유지보수 비밀 채널로 선박제어시스템에 비인가 원격 접속하여 운항 정보 무단 변경 +지상국 안테나 +제어시스템 +비인가자가 출입하여 안테나 제어시스템 디폴트 계정으로 접속한 후, 설정 정보를 +무단 변경 + +--- + +60 | 우주 보안모델 +위성 데이터 훼손으로 분류한 보안 위협들을 스마트선박 위성통신 서비스 아키텍처에 표현하면 아래 +그림과 같다. +| 그림 17 | 위성 데이터 훼손 보안위협 +나. 위성 서비스 장애 +위성 서비스 장애 보안위협은 정당한 권한을 보유하지 않은 비인가자 또는 내부 관련자가 불법적인 +행위를 통하여, 위성 및 위성활용 서비스를 정상적으로 사용할 수 없도록 서비스의 중단, 지연 및 훼손 +등을 발생시킬 수 있는 보안위협이다. +위성항법 서비스를 대표적인 예시로 선정하여, 위성 서비스 장애 보안위협을 정리하면 아래 표와 같다. +표 27 위성 서비스 장애 보안위협 +서비스 +대상 +보안위협 +위성항법 +서비스 +항법위성~지상국 통신구간 +지상국 안테나에 대한 재밍으로, 항법위성으로의 위치정보 보정데이터 +송신 방해 +항법위성~자율주행차 GPS +수신기 통신구간 +국지적으로 방해전파를 송출하여 해당 지역을 운행하는 자율주행차의 +위치정보 수신 방해 + +--- + + +## 제3장 우주 보안위협 | 61 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +서비스 +대상 +보안위협 +위성항법 +서비스 +UAM GPS 수신기 +항법위성으로 가장하고 조작된 위치정보를 송신하여, UAM GPS가 +조작된 위치정보 수신으로 주행 오류 발생 +지상국 라우터 +포트 스캔 등을 통해 취약 정보를 수집하고, 지상국 대상으로 DDoS공격을 +진행하여, 지상국의 위성 서비스 장애 +자율주행차 GPS 수신기 +보안취약점이 있는 부품이 탑재된 GPS 수신기의 공급으로 자율주행차의 +위치정보 수신 장애 +지상국/항법데이터 수신국 +안테나 +비인가자가 지상국 또는 항법데이터 수신국 안테나에 불법 접근하여 +안테나 시설을 훼손하여 위성 통신 중단 +위성 서비스 장애로 분류한 보안위협들을 위성항법 서비스 아키텍처에 표현하면 아래 그림과 같다. +| 그림 18 | 위성 서비스 장애 보안위협 +다. 우주통신 정보 유출 +우주통신 정보 유출 보안위협은 정당한 권한을 보유하지 않은 비인가자 또는 시스템 운영자 등의 내부 + +--- + +62 | 우주 보안모델 +직원이 불법적인 행위를 통하여, 위성 및 위성활용 서비스를 이용하는 우주통신 환경에서 주요정보를 +탈취하여 악용할 수 있는 보안위협이다. +위성통신 서비스 중 저궤도위성 기반 인터넷 서비스를 대표적인 예시로 선정하여, 우주통신 정보 유출 +보안위협을 정리하면 아래 표와 같다. +표 28 우주통신 정보 유출 보안위협 +서비스 +대상 +보안위협 +저궤도위성 +기반 인터넷 +서비스 +기업~위성통신구간 +기업과 위성간 송수신되는 위성 신호를 수집 및 분석하여 기업의 주요정보 불법 획득 +지상국 관리서버 +지상국에 노트북을 불법 반입 후, 네트워크를 통해 관리서버의 중요 데이터를 유출 +가정집 개인용PC +메일에 의해 스파이웨어에 감염된 개인PC에서, 주요 정보를 위성 통신망을 통해 +외부로 유출 +기업 +업무시스템 +메일에 의해 백도어가 설치된 업무PC에, 비인가자가 접속하고 업무시스템 취약점· +으로 관리자 권한을 획득 후, 주요정보 유출 +가정집 Wi-Fi 라우터 +스파이웨어 악성코드가 삽입된 Wi-Fi 라우터가 공급되고 가정집에 설치되어, 위성 +통신 시 주요 개인정보 유출 +우주통신 정보 유출로 분류한 보안위협들을 저궤도위성 기반 인터넷 서비스 아키텍처에 표현하면 아래 +그림과 같다. +| 그림 19 | 우주통신 정보 유출 보안위협 + +--- + + +## 제4장 + +우주 보안아키텍처 + +## 1. 우주 및 지상국 보안요구사항 + + +## 2. 위성활용 서비스 보안요구사항 + + +## 3. 위성활용 서비스 보안아키텍처 + + +--- + +64 | 우주 보안모델 + +## 제4장 + +우주 보안아키텍처 +본 장에서는 우주 보안아키텍처에 대해 기술하였다. 우주 보안아키텍처에서는 우주 및 지상국, +위성활용 서비스로 도출한 보안위협을 제거 또는 감소시키기 위해 필요한 보안요구사항과 보안기술, +보안솔루션을 제시하였다. 우주 보안아키텍처의 내용은 다음과 같이 세 부분으로 기술하였다. +1. ‌우주 및 지상국 보안요구사항에서는 우주 및 지상국 보안위협에서 도출한 보안위협에 대응하는 +보안요구사항을 제시하였다. +2. ‌위성활용 서비스 보안요구사항에서는 위성활용 서비스별로 도출한 보안위협에 대응하는 보안요구· +사항을 제시하였다. +3. ‌위성활용 서비스 보안아키텍처에서는 보안요구사항을 기반으로 보안아키텍처 구성 기준과 위성활용 +서비스 보안아키텍처를 제시하였다. +해당 장의 표 구성은 보안위협에 대응하는 보안요구사항과 요구사항을 구현하기 위한 보안기술 그리고 +해당 기술을 포함하고 있는 보안솔루션으로 표현하였다. 그리고 해당 보안기술 및 보안솔루션이 존재하지 +않는 경우 ‘-’로 표현하였다. + +--- + + +## 제4장 우주 보안아키텍처 | 65 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +1 +우주 및 지상국 보안요구사항 +우주 및 지상국은 위성과 지상국 사이의 위성통신 도청 및 재밍, 지상국의 네트워크 및 운영시스템의 +접점을 통한 악성코드 감염으로 인한 위성의 운영 장애, 위성 서비스 장애 등의 보안위협이 존재할 수 +있다. +해당 위협에 대응하기 위한 대표적인 우주 및 지상국의 보안요구사항은 위성통신 서비스 사용 구간의 +암호화, 지상국의 네트워크 및 운영시스템 접점에서의 네트워크 접근통제, 악성코트 탐지 및 차단, 위성 +운영시스템 원격접근 통제 등이 있다. +우주 및 지상국 보안위협 대응에 필요한 보안요구사항, 보안기술, 보안솔루션은 아래 표와 같다. +표 29 우주 및 지상국 보안요구사항, 보안기술, 보안솔루션 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +중간자 공격 +운행중인 위성과 충돌시키기 +위해, 궤도변경 원격명령을 +운영하지 않는 노후된 위성으로 +전송 +ⓐ. ‌노후된 항법위성의 +할동정지, 폐기관리 +ⓑ. ‌위성에서 원격명령 데이터 +수신시 지상국 또는 +수신데이터 인증 +ⓐ. ‌회수 및 폐기 +ⓑ. ‌메시지 인증 +ⓐ. - +ⓑ. - +소프트웨어 +결함 +위성의 원격 실행 인터페이스를 +이용하여, 자세제어 오작동을 +유발하는 악성코드 설치 +ⓐ. ‌지상국의 악성코드 탐지 · +및 차단 +ⓑ. ‌위성 시스템 소프트웨어에 +보안 기능 구현 +ⓐ. ‌악성코드 탐지 +및 차단 +ⓑ. ‌시큐어 코딩 +ⓐ. 백신 +ⓑ. - +소프트웨어 +결함 +위성 시스템 소프트웨어 취약점을 +이용하여 버퍼 오버플로를 +유발시키는 원격명령 전송 +ⓐ. ‌위성 시스템 소프트웨어에 +보안 기능 구현 +ⓐ. 시큐어 코딩 +ⓐ. - +재밍 +(Jamming) +지상국 위성안테나 재밍 공격으로 +위성페이로드 시스템에서 데이터 +수신 장애 +ⓐ. ‌안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +세션 +하이재킹 +위성에서 지상국으로 전송하는 +데이터 가로채기 +ⓐ. ‌위성과 지상국 위성통신 +구간의 가상사설망 구성 +ⓑ. ‌위성과 지상국 위성통신 +구간의 양자내성암호 통신 +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. ‌VPN +ⓑ. ‌양자내성 암호 +시스템 + +--- + +66 | 우주 보안모델 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +세션 +하이재킹 +위성으로 전송하는 위성제어 +신호를 분석 하여, 조작된 위성 +오작동 신호 전송 +ⓐ. ‌위성과 지상국 위성통신 +구간의 가상사설망 구성 +ⓑ. ‌위성과 지상국 위성통신 +구간의 양자내성암호 통신 +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. ‌VPN +ⓑ. ‌양자내성 암호 +시스템 +재밍 +(Jamming) +저궤도 군집위성과 위성통신하는 +지상설비의 위치 정보를 획득하여 +해당 지역으로 재밍 +ⓐ. ‌안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. ‌- +세션 +하이재킹 +소프트웨어 정의 라디오(SDR) +장치를 활용하여 데이터 분석 후, +위성안테나로 조작된 위성 신호 +전송 +ⓐ. ‌위성과 지상국 위성통신 +구간의 가상사설망 구성 +ⓑ. ‌위성과 지상국 위성통신 +구간의 양자내성암호 통신 +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. ‌VPN +ⓑ. ‌양자내성 암호 +시스템 +알려진 +보안취약점 +위성페이로드 시스템의 디폴트 +계정을 도용하여 접속 후, +페이로드 데이터 삭제 +ⓐ. ‌지상국의 시스템 +디폴트계정 삭제 +ⓐ. ‌계정관리 +ⓐ. ‌계정관리 및 +접근통제 +비인가 저장 +매체 사용 +운영자 PC에서 오작동 명령을 +전송하는 악성코드가 설치된 +비인가 USB 사용으로, 위성 +오작동 +ⓐ. ‌지상국의 운영자PC +비인가 이동식 저장매체 +사용 제한 +ⓑ. ‌지상국 악성코드 탐지 및 +차단 +ⓐ. ‌저장장치 +매체제어 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. ‌백신 +악성코드 +감염 +비정상 신호를 송신하는 +악성코드가 삽입된 파일 배포로, +감염된 시스템들이 위성으로 +지속적인 비정상 신호 전송 +ⓐ. ‌위성활용 서비스 사용자 +시스템에서의 악성코드 +탐지 및 차단 +ⓐ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌백신 +업데이트 +결함 +위성모뎀 제작업체의 펌웨어 +업데이트로 가장하여 원격 불법 +업데이트를 통해 시스템 파일 +삭제 +ⓐ. ‌소프트웨어 업데이트 +안전성 사전 점검 +ⓐ. ‌업데이트 +사전테스트 +ⓐ. - +내부자 위협 +소프트웨어 정의 라디오(SDR) +비인가 장치와 지상국 단말기로 +위성의 오작동 원격명령 전송 +ⓐ. ‌지상국으로의 장비 +반출입제한 +ⓐ. ‌반출입 통제 +ⓐ. - + +--- + + +## 제4장 우주 보안아키텍처 | 67 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +관리자 계정 +도용 +내부자가 위성제어시스템에 +관리자 공유계정으로 접속하여 +원격측정 DB 정보 불법 유출 +ⓐ. ‌지상국의 위성 제어시스템 +사용자 1인1계정 부여 +ⓑ. ‌지상국의 위성 +제어시스템의 DB +접근제어 +ⓒ. ‌지상국의 원격측정 DB +데이터 암호화 +ⓐ. ‌계정관리 +ⓑ. ‌DB 접근통제 +ⓒ. ‌DB 데이터 +암호화 +ⓐ. ‌계정관리 및 +접근통제 +ⓑ. ‌DB 접근제어 +ⓒ. ‌DB 암호화 +알려진 +보안취약점 +알려진 정보로 위성페이로드 +시스템에 불법 접속하고 위성 +오작동을 유도하는 원격명령 전송 +ⓐ. ‌지상국 외부망에서 지상국 +내부 네트워크로의 접근에 +대한 IP/Port 기반 +접근제어 +ⓑ. ‌지상국의 시스템 사용자 +계정/비밀번호, 2차인증 +ⓒ. ‌외부에 공개되는 지상국의 +주요정보를 주기적으로 +점검 및 삭제 +ⓐ. ‌네트워크 +접근통제 +ⓑ. ‌계정관리 +ⓒ. 공개 정보 통제 +ⓐ. 방화벽 +ⓑ. ‌계정관리 및 +접근통제 +ⓒ. - +알려진 +보안취약점 +유지보수 채널로 위성페이로드 +시스템에 침투 후, 페이로드 +서비스 네트워크 정보 훼손 +ⓐ. ‌지상국 외부망에서 지상국 +내부 네트워크로의 접근에 +대한 IP/Port 기반 +접근제어 +ⓑ. ‌지상국의 통신시스템에서 +접근에 대한 IP/Port 기반 +접근제어 및 계정/ +비밀번호 정책 적용 +ⓐ. ‌네트워크 +접근통제 +ⓑ. ‌통신 시스템 +접근통제 + +ⓐ. ‌방화벽 +ⓑ. - +알려진 +보안취약점 +알려진 유지보수 채널을 +이용하여, 위성페이로드 시스템에 +외이퍼(wiper) 악성코드를 전파 +ⓐ. ‌지상국 외부망에서 지상국 +내부 네트워크로의 접근에 +대한 IP/Port 기반 +접근제어 +ⓑ. ‌지상국 네트워크 트래픽 +내의 숨겨진 악성코드 탐지 +및 차단 +ⓒ. ‌지상국에 대한 악성코드 +탐지 및 차단 +ⓓ. ‌지상국의 시스템 사용자 +계정/비밀번호, 2차인증 +ⓐ. ‌네트워크 +접근통제 +ⓑ. ‌이상징후 탐지 +및 차단 +ⓒ. ‌악성코드 탐지 +및 차단 +ⓓ. ‌계정관리 +ⓐ. ‌방화벽 +ⓑ. ‌침입방지 +시스템 +ⓒ. 백신 +ⓓ. ‌계정관리 및 +접근통제 +시스템 콘솔 +접근 +시스템 운영실에 불법 출입하여 +위성제어시스템 유지보수 콘솔 +접속으로 시스템 설정 정보 변경 +ⓐ. ‌지상국 시스템 운영실의 +출입 관리 +ⓑ. ‌지상국 시스템 운영실의 +시스템 랙 설치 +ⓐ. 출입통제 +ⓑ. 시스템 랙 +ⓐ. ‌출입통제 +시스템 +ⓑ. - + +--- + +68 | 우주 보안모델 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +악성코드 +감염 +메일로 악성코드에 감염된 +위성제어시스템에 원격접속하여, +위성의 궤도 이탈 원격명령 전송 +ⓐ. ‌메일의 첨부파일에 숨겨진 +악성코드 탐지 및 메일차단 +ⓑ. ‌악성코드 탐지 및 차단 +ⓒ. ‌지상국 외부망에서 지상국 +내부 네트워크로의 접근에 +대한 IP/Port 기반 +접근제어 +ⓐ. 메일 보안 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. ‌네트워크 +접근통제 +ⓐ. 메일 보안 +ⓑ. 백신 +ⓒ. 방화벽 +시스템 +권한 탈취 +통신장비 구성오류로 원격접속 +후, 위성제어시스템 관리자 +권한을 탈취하여, 위성 궤도정보 +변경 +ⓐ. ‌지상국 외부망에서 지상국 +내부 네트워크로의 접근에 +대한 IP/Port 기반 +접근제어 +ⓑ. ‌지상국 네트워크를 +업무망과 위성제어시스템 +제어망으로 분리 +ⓒ. ‌지상국 제어망 내부의 +네트워크에 접속하는 +장치는 인가된 장치만이 +접속할 수 있도록 접근제어 +ⓓ. ‌지상국의 시스템 관리자 +권한 제어 +ⓐ. ‌네트워크 +접근통제 +ⓑ. 네트워크 분리 +ⓒ. ‌네트워크 접속 +장치 접근통제 +ⓓ. 권한 통제 +ⓐ. 방화벽 +ⓑ. 방화벽 +ⓒ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓓ. ‌계정관리 및 +접근통제 +물리적 손상 +시스템 운영실에 불법 출입하여 +위성페이로드 시스템의 네트워크 +연결 케이블 훼손 +ⓐ. ‌지상국 시스템 운영실의 +출입 관리 +ⓑ. ‌지상국 시스템 운영실의 +시스템 랙 설치 +ⓐ. 출입통제 +ⓑ. 시스템 랙 +ⓐ. ‌출입통제 +시스템 +ⓑ. - + +--- + + +## 제4장 우주 보안아키텍처 | 69 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +2 +위성활용 서비스 보안요구사항 +가. 위성항법 서비스 보안요구사항 +항법 위성으로부터 수신되는 위치정보가 변조되거나 위치정보 수신 장애 발생시 스마트선박의 항로 +이탈, 도심항공모빌리티의 주행 오류 등의 보안 위협이 발생할 수 있다. +이러한 보안위협에 대응하기 위한 위성항법 서비스의 주요 보안요구사항으로는 조작된 위치정보 대응 +메시지 인증, 보안취약점이 있는 부품 공급에 대한 공급망 보안, 위성통신에 대한 안티 재밍 등이 있다. +| 그림 20 | 위성항법 서비스 주요 보안요구사항 +1 +2 +3 +4 +5 +6 +7 +① 조작된 위치정보 보안위협 대응 메시지 인증 ⑤ 인가된 장치만이 내부망에 접속가능하도록 접근제어 +② 안전한 H/W, S/W 제품 공급 ⑥ 데이터 도청 방지 가상사설망 적용 +③ 위성통신 재밍 공격에 대한 안티 재밍 ⑦ 안테나 및 시설에 대한 물리적 접근통제 +④ 인터넷을 통한 원격접근 및 네트워크 접근통제 + +![이미지 69-0](images/p0069_img0.png) + + +--- + +70 | 우주 보안모델 +위성항법 서비스 보안위협 대응에 필요한 보안요구사항, 보안기술, 보안솔루션은 아래 표와 같다. +표 30 위성항법 서비스 보안요구사항, 보안기술, 보안솔루션 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +재밍 +(Jamming) +지상국 안테나에 대한 재밍으로, +항법위성으로의 위치정보 +보정데이터 송신 방해 +ⓐ. ‌안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +데이터변조 +선박의 항로 이탈을 유도하기 +위하여 위치정보를 변조하여 +선박의 위성항법 시스템으로 전송 +ⓐ. ‌항법위성 데이터 수신시 +항법위성 인증 +ⓑ. ‌송신데이터 서명 및 +수신데이터 서명 검증 +ⓐ. 항법위성 인증 +ⓑ. 메세지 인증 +ⓐ. - +ⓑ. - +재밍 +(Jamming) +국지적으로 방해전파를 송출하여 +해당 지역을 운행하는 +자율주행차의 위치정보 수신 방해 +ⓐ. ‌안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +세션 +하이재킹 +지상국으로 전송하는 데이터 +가로채기 후, 항법위성으로 +송신하는 정보 조작으로 +항법위성의 위치정보 무단 변경 +ⓐ. ‌항법데이터 중앙처리국과 +지상국 네트워크 구간의 +가상사설망 구성 +ⓑ. ‌항법데이터 중앙처리국과 +지상국 위성통신 구간 +양자내성암호 통신 +ⓐ. ‌통신구간 +터널링 + +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. VPN +ⓑ. ‌양자내성 암호 +시스템 +GPS위장 +교란 +항법위성으로 가장하고 조작된 +위치정보를 송신하여, UAM +GPS가 조작된 위치정보 +수신으로 주행오류 발생 +ⓐ. ‌항법위성 데이터 수신시 +항법위성인증 +ⓑ. ‌위치정보 송신데이터 서명 +및 수신데이터 서명 검증 +ⓐ. 항법위성 인증 +ⓑ. 메세지 인증 +ⓐ. - +ⓑ. - +악성코드 +감염 +비인가자가 출입하여 랜섬웨어에 +감염된 노트북을 불법 반입 후, +네트워크를 통해 +위치정보시스템이 감염되어 +위치정보 파일 암호화 +ⓐ. ‌지상국으로의 장비 반입에 +대한 반출입 제한 +ⓑ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 +인가된 장치만이 접속할 수 +있도록 접근제어 +ⓒ. ‌악성코드 탐지 및 차단 +ⓓ. ‌물리적인 비인가자의 접근 +모니터링 +ⓐ. 반출입통제 +ⓑ. ‌네트워크 접속 +장치 접근통제 +ⓒ. ‌악성코드 탐지 +및 차단 +ⓓ. ‌CCTV +모니터링 +ⓐ. - +ⓑ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓒ. 백신 +ⓓ. CCTV + +--- + + +## 제4장 우주 보안아키텍처 | 71 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +데이터 유출 +지상국/항법데이터 수신국에 +노트북을 불법 반입 후, +네트워크를 통해 시스템의 중요 +데이터 유출 +ⓐ. ‌지상국/항법데이터 수신국 +내부 네트워크에 접속하는 +장치에 대해 인가된 +장치만이 접속할 수 있도록 +접근제어 +ⓑ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +비인가 저장 +매체 사용 +지상국 관리서버에서 와이퍼 +(wiper) 악성코드가 담긴 비인가 +USB 사용으로 악성코드에 +감염되어, 시스템 파일 삭제 +ⓐ. ‌지상국의 비인가 이동식 +저장매체 사용 제한 및 +매체제어 +ⓑ. ‌악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. ‌백신 +알려진 +보안취약점 +유지보수 원격 접속채널로 +관리서버에 불법 접속하여, +항법위성 인터페이스 정보를 획득 +ⓐ. ‌네트워크 원격 접속정보 · +및 데이터 흐름 · +이상징후 탐지 +ⓑ. ‌항법위성 연계 +위성통신망과 지상국의 +인터넷 접속망 분리 +ⓒ. ‌지상국 또는 항법데이터 +수신국 외부 인터넷에서 +위성통신망 접근에 대한 +IP/Port 기반 접근제어 +ⓓ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌네트워크 분리 +ⓒ. ‌네트워크 +접근통제 +ⓓ. ‌계정관리 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌방화벽 +ⓒ. ‌방화벽 +ⓓ. ‌계정관리 및 +접근통제 +악성코드 +감염 +인터넷에서 백도어가 설치된 업무 +PC에 비인가자가 접속하고, 취약 +계정으로 위치정보시스템에 +접속하여, 데이터 훼손 +ⓐ. ‌네트워크 원격 접속정보 및 +악성코드패턴, 계정 탈취 +이상징후 탐지 +ⓑ. ‌악성코드 탐지 및 차단 +ⓒ. ‌외부 인터넷에서 내부 +시스템 접근에 대한 IP/ +Port 기반 접근제어 +ⓓ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. ‌네트워크 +접근통제 +ⓓ. ‌계정관리 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌백신 +ⓒ. ‌방화벽 +ⓓ. ‌계정관리 및 +접근통제 + +--- + +72 | 우주 보안모델 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +알려진 +보안취약점 +알려진 지상국 관리정보를 +활용하여 관리서버에 접속하고, +시스템 관리 권한을 탈취하여 +네트워크 정보 변경 +ⓐ. ‌네트워크 원격 접속정보 및 +데이터 흐름, 권한 탈취 +이상징후 탐지 +ⓑ. ‌항법위성 연계 +위성통신망과 지상국의 +인터넷 접속망 분리 +ⓒ. ‌외부 인터넷에서 지상국의 +위성통신망 접근에 대한 +IP/Port 기반 접근제어 +ⓓ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓔ. ‌서버 일반 사용자의 관리자 +권한 사용 제한 +- ‌권한변경 명령어 사용 +차단 및 관리자 그룹 +사용자 통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌네트워크 분리 +ⓒ. ‌네트워크 +접근통제 +ⓓ. ‌비인가자 +접근통제 +ⓔ. ‌권한 통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌방화벽 +ⓒ. ‌방화벽 +ⓓ. ‌계정관리 및 +접근통제 +ⓔ. ‌계정관리 및 +접근통제 +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 스캔 +공격 이상징후 탐지 및 +차단 +ⓑ. ‌DDoS 공격 탐지 및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌DDoS 대응 +시스템 +ⓒ. ‌- +ⓓ. ‌방화벽 +공급망 +보안위협 +보안취약점이 있는 부품이 탑재된 +GPS 수신기의 공급으로 +자율주행차의 위치정보 수신 장애 +ⓐ. ‌H/W, S/W 제품 도입시 +보안성 검토 및 인수 +테스트 +ⓑ. ‌SW 자재명세서 관리 +ⓐ. ‌보안성 승인 +테스트(오픈 +소스 점검 등), +인수 테스트 +ⓑ. ‌SW 공급망 +관리 +ⓐ. ‌오픈소스 분석 +시스템 +ⓑ. ‌SBoM 솔루션 +물리적 손상 +비인가자가 지상국 또는 +항법데이터 수신국 안테나에 불법 +접근하여 안테나 시설을 훼손하여 +위성 통신 중단 +ⓐ. ‌비인가자의 현장설비 +접근차단 시설 설치 +ⓑ. ‌비인가자의 위성 통신시설 +접근 모니터링 +ⓐ. ‌물리적 +접근통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. ‌출입통제· +시스템 +ⓑ. ‌CCTV +나. 위성통신 서비스 보안요구사항 +위성통신 서비스는 통신위성을 통해 스마트선박, 기업, 지상국, 가정집 등에 비인가 접속하거나 +통신위성과의 통신구간에서 데이터를 가로채어 중요 정보를 변조 및 유출할 수 있는 보안 위협이 존재· + +--- + + +## 제4장 우주 보안아키텍처 | 73 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +한다. 이러한 보안위협에 대응하기 위한 위성통신 서비스의 주요 보안요구사항은 위성통신 서비스 구간의 +암호화 통신, 위성 및 선박 운영시스템의 원격 접근통제 및 계정관리, 선박 내부 네트워크 망분리 등이다. +대표적인 위성통신 서비스인 스마트선박 위성통신 서비스, 저궤도위성 기반 이동통신 서비스, +저궤도위성 기반 인터넷 서비스에서의 보안 요구사항은 다음과 같다. +1) 스마트선박 위성통신 서비스 보안요구사항 +스마트선박 위성통신 서비스는 위성통신을 통한 악성코드 감염, 원격접근에 의한 선박 제어시스템 +운항정보 무단 변경, 물리적 접근에 의한 위성안테나 훼손 등의 보안위협이 존재한다. 이러한 보안위협에 +대응하기 위한 스마트선박 위성통신 서비스의 주요 보안요구사항은 선박 내부 네트워크의 망 분리, +악성코드 탐지 및 차단, 원격접근 통제 및 식별/인증, 물리적 접근통제 등이 있다. +| 그림 21 | 스마트선박 위성통신 서비스 주요 보안요구사항 +4 +3 +5 +6 +1 +2 +2 +2 +① 선박 위성 관련 시설의 물리적 접근통제 ⑤ 위성 및 선박 내부의 악성코드 탐지 및 차단 +② 위성통신 서비스 구간의 암호화 통신 ⑥ 위성 및 선박 운영시스템의 원격 접근통제, 계정관리 +③ 선박 내부 네트워크 망분리 +④ 선박의 유/무선 네트워크 접근통제 + +--- + +74 | 우주 보안모델 +스마트선박 위성통신 서비스 보안위협 대응에 필요한 보안요구사항, 보안기술, 보안솔루션은 아래 표와 +같다. +표 31 스마트선박 위성통신 서비스 보안요구사항, 보안기술, 보안솔루션 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +세션 +하이재킹 +VSAT 안테나와 위성 사이에서 +신호 가로채기 및 도청으로 +주요정보 유출 +ⓐ. ‌위성과 VSAT 위성통신 +구간의 가상사설망 구성· +(선박~선박본사)· +(선박~지상국) +ⓑ. ‌통신위성과 VSAT +위성통신 구간 +양자내성암호 통신· +(선박~선박본사)· +(선박~지상국) +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. ‌VPN +ⓑ. ‌양자내성 암호 +시스템 +재밍 +(Jamming) +VSAT 안테나에 대한 재밍 +ⓐ. 안티 재밍 +ⓐ. ‌주파수호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +데이터 유출 +지상국에 노트북을 불법 반입 후, +네트워크를 통해 관리서버의 중요 +데이터 유출 +ⓐ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 +인가된 장치만이 접속할 수 +있도록 접근제어 +ⓑ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +비인가 저장 +매체 사용 +지상국 관리서버에서 와이퍼 +(wiper) 악성코드가 담긴 비인가 +USB 사용으로 악성코드에 +감염되어, 시스템 파일 삭제 +ⓐ. ‌지상국의 비인가 이동식 +저장매체 사용 제한 및 +매체제어 +ⓑ. ‌악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. 백신 +악성코드 +감염 +선원PC가 메일 수신으로 +스파이웨어에 감염되고, +업무시스템 감염으로 주요정보 +유출 +ⓐ. ‌첨부파일에 숨겨진 +악성코드 탐지 및 메일차단 +ⓑ. 악성코드 탐지 및 차단 +ⓒ. ‌VSAT 위성통신망과 선박 +내부의 시스템운영망 분리 +ⓓ. ‌선박 내부 네트워크에서 +선박 내부의 시스템운영망· +접근에 대한 IP/Port 기반 +접근제어 +ⓐ. ‌메일 보안 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. ‌네트워크 분리 +ⓓ. ‌네트워크 +접근통제 +ⓐ. 메일 보안 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. 방화벽 + +--- + + +## 제4장 우주 보안아키텍처 | 75 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +악성코드 +감염 +선원PC가 와이퍼(wiper) +악성코드를 업무시스템에 +전파하여 시스템 파일 무단 삭제 +ⓐ. ‌네트워크 트래픽 내의 +숨겨진 악성코드 탐지 및 +차단 +ⓑ. ‌악성코드 탐지 및 차단 +ⓒ. ‌VSAT 위성통신망과 선박 +내부의 시스템운영망 분리 +ⓓ. ‌선박 내부 네트워크에서 +선박 내부의 시스템운영망· +접근에 대한 IP/Port 기반 +접근제어 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. ‌네트워크 분리 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌백신 +ⓒ. ‌방화벽 +ⓓ. ‌방화벽 +알려진 +보안취약점 +알려진 VSAT 정보로, 관리서버에 +원격접속하고 시스템 관리 권한을 +탈취하여 네트워크 정보 변경 +ⓐ. ‌네트워크 원격 접속정보 및 +데이터 흐름, 권한 탈취 +이상징후 탐지 +ⓑ. ‌통신위성 연계 +위성통신망과 VSAT의 +인터넷 접속망 분리 +ⓒ. ‌외부 인터넷에서 VSAT의 +위성통신망 접근에 대한 +IP/Port 기반 접근제어 +ⓓ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓔ. ‌서버 일반 사용자의 관리자 +권한 사용 제한 · +- ‌권한변경 명령어 사용 +차단 및 관리자 그룹 +사용자 통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌네트워크 분리 +ⓒ. ‌네트워크 +접근통제 +ⓓ. ‌비인가자 +접근통제 +ⓔ. 권한 통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. 방화벽 +ⓒ. 방화벽 + +ⓓ. ‌계정관리 및 +접근통제 +ⓔ. ‌계정관리 및 +접근통제 +악성코드 +감염 +백도어가 설치된 인터넷 사용 +업무PC에 원격접속한 후, +전력시스템에 접속하여 시스템 +설정 값 변경 +ⓐ. ‌네트워크 트래픽 내의 +숨겨진 악성코드 및 +이상징후 탐지 및 차단 +ⓑ. 악성코드 탐지 및 차단 +ⓒ. ‌VSAT 위성통신망과 선박 +내부의 시스템운영망 분리 +ⓓ. ‌외부인터넷의 VSAT내부망 +접근에 대한 IP/Port 기반 +접근제어 +ⓔ. ‌선박 내부의 +시스템운영망에서 VSAT +위성통신망으로 일방향 전송 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. 네트워크 분리 +ⓓ. ‌네트워크 +접근통제 +ⓔ. 일방향 통신 +ⓐ. ‌침입방지 +시스템 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. 방화벽 +ⓔ. ‌일방향 +전송장비 + +--- + +76 | 우주 보안모델 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +알려진 +보안취약점 +알려진 VSAT 관리 서버 취약점을 +활용하여 원격 접속하고 위성 +인터페이스 정보 무단 변경 +ⓐ. ‌외부인터넷의 VSAT내부망 +접근에 대한 IP/Port 기반 +접근제어 +ⓑ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 적용 +ⓒ. ‌서버의 파일 및 서비스에 +대한 권한통제 +ⓐ. ‌네트워크 +접근통제 +ⓑ. 계정관리 +ⓒ. 권한 통제 +ⓐ. 방화벽 +ⓑ. ‌계정관리 및 +접근통제 +ⓒ. - +알려진 +보안취약점 +유지보수 비밀 채널로 +선박제어시스템에 비인가 원격 +접속하여 운항 정보 무단 변경 +ⓐ. ‌VSAT 위성통신망에서 +내부망 접근에 대한 IP/ +Port 기반 접근제어 +ⓑ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 적용 +ⓒ. ‌시스템 정보 변경에 대한 +이상징후 모니터링 +ⓐ. ‌네트워크 +접근통제 +ⓑ. 계정관리 +ⓒ. ‌이상징후 +모니터링 +ⓐ. 방화벽 +ⓑ. ‌계정관리 및 +접근통제 +ⓒ. ‌침입방지· +시스템 +악성코드 +감염 +랜섬웨어에 감염된 탑승객 +노트북이 Wi-Fi 무선 사용으로, +업무시스템이 랜섬웨어에 감염 +ⓐ. ‌탑승객 Wi-Fi무선 +네트워크와 선박 내부의 +시스템운영망 분리 +ⓑ. ‌선박 내부의 시스템들에 +대한 악성코드 탐지 및 +차단 +ⓐ. 네트워크 분리 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. 방화벽 +ⓑ. 백신 +소프트웨어 +결함 +하드코딩된 계정으로 관리 서버에 +원격 접속 후, 스위치 전용 와이퍼 +(wiper) 악성코드 전파로 +네트워크 중단 +ⓐ. ‌프로그램에 계정 하드코딩 +제한 +ⓑ. ‌VSAT 위성통신망에서 +내부망으로 접근에 대한 +IP/Port 기반 접근제어 +ⓒ. ‌네트워크 트래픽 내의 +숨겨진 악성코드 및 +이상징후 탐지 및 차단 +ⓓ. ‌악성코드 탐지 및 차단 +ⓐ. 시큐어코딩 +ⓑ. ‌네트워크 +접근통제 +ⓒ. ‌이상징후 탐지 +및 차단 +ⓓ. ‌악성코드 탐지 +및 차단 +ⓐ. - +ⓑ. 방화벽 +ⓒ. ‌침입방지 +시스템 +ⓓ. 백신 +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 스캔 +공격 이상징후 탐지 및 +차단 +ⓑ. ‌DDoS 공격 탐지 및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌DDoS 대응 +시스템 +ⓒ. ‌- +ⓓ. ‌방화벽 + +--- + + +## 제4장 우주 보안아키텍처 | 77 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +알려진 +보안취약점 +비인가자가 출입하여 안테나 +제어시스템 디폴트 계정으로 +접속한 후, 설정 정보를 무단 변경 +ⓐ. 비인가자의 출입 관리 +ⓑ. ‌안테나 제어시스템 디폴트 +계정/ 비밀번호 변경, · +2차인증 +ⓐ. 출입통제 +ⓑ. 계정관리 +ⓐ. ‌출입통제 +시스템 +ⓑ. ‌계정관리 및 +접근통제 +물리적 손상 +VSAT/지상국 안테나 케이블 +훼손으로 선박/지상국의 +위성통신 서비스 중단 +ⓐ. ‌비인가자의 현장설비 +접근차단 시설 설치 +ⓑ. ‌물리적인 비인가자의 접근 +모니터링 +ⓐ. ‌물리적 +접근통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. - +ⓑ. CCTV +물리적 손상 +VSAT 스위치 케이블을 변경하여 +연결하고, 선박제어시스템 +네트워크를 외부에 공개 +ⓐ. ‌비인가자의 위성 통신시설 +통제구역 출입 관리 +ⓑ. ‌물리적인 비인가자의 접근 +모니터링 +ⓐ. 출입통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. ‌출입통제 +시스템 +ⓑ. CCTV +2) 저궤도위성 기반 이동통신 서비스 보안요구사항 +저궤도위성 기반 이동통신 서비스는 악성코드 감염에 의한 불법적인 윈격 펌웨어 업데이트 및 +스마트폰의 위성통신 서비스 장애, 스마트폰 데이터 유출, 비인가 USB사용에 의한 지상국 관리서버 +시스템 파일 삭제 등의 보안위협이 존재할 수 있다. +이러한 보안위협에 대응하기 위한 저궤도위성 기반 이동통신 서비스의 주요 보안요구사항은 악성코드 +탐지 및 차단, 지상국 운영시스템에 대한 원격 접근통제, 업데이트 프로그램 인증 및 네트워크 이상징후 +탐지 및 차단 등이 있다. + +--- + +78 | 우주 보안모델 +| 그림 22 | 저궤도위성 기반 이동통신 서비스 주요 보안요구사항 +2 +1 +3 +2 +4 +5 +① 위성통신 서비스 구간의 암호화 통신 ④ 네트워크 이상징후 탐지, DoS 공격 차단 +② 악성코드 탐지 및 차단 ⑤ 물리적 접근통제 +③ 지상국 운영시스템 원격 접근통제, 계정관리 +저궤도위성 기반 이동통신 서비스 보안위협 대응에 필요한 보안요구사항, 보안기술, 보안솔루션은 아래 +표와 같다. +표 32 저궤도위성 기반 이동통신 서비스 보안요구사항, 보안기술, 보안솔루션 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +공급망 +보안위협 +특정 위성모뎀 대상으로 제작된 +와이퍼(wiper) 악성코드를 +통신위성을 통해 배포하여, +위성모뎀의 시스템 파일 삭제 +ⓐ. ‌위성모뎀 운영 +소프트웨어에 변경통제 +인증 로직 구현 공급망 +보안· +- ‌시스템파일 접근 및 +소프트웨어 변경 시 인증 +ⓑ. ‌SW 자재명세서 관리 +ⓐ. 시큐어코딩 +ⓑ. ‌SW 공급망 +관리 +ⓐ. - +ⓑ. ‌SBoM 솔루션 + +![이미지 78-0](images/p0078_img0.png) + + +--- + + +## 제4장 우주 보안아키텍처 | 79 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +공급망 +보안위협 +비인가 기기를 공급받아 +군집위성군에 탑재하고 발사 후, +특정 조건 성립으로 로직 폭탄이 +폭발하여 궤도 이탈 +ⓐ. ‌H/W, S/W 제품 도입시 +보안성 검토 및 인수 +테스트 +ⓑ. ‌SW 자재명세서 관리 +ⓐ. ‌보안성 승인 +테스트(오픈 +소스 점검 등), +인수 테스트 +ⓑ. ‌SW 공급망 +관리 +ⓐ. ‌오픈소스 분석 +시스템 +ⓑ. ‌SBoM 솔루션 +세션 +하이재킹 +지상설비의 위치 및 위성 신호 +정보를 획득하여 위성에서 +지상국으로 전송하는 데이터 도청 +ⓐ. ‌저궤도 군집위성과 지상국 +위성통신 구간의 +가상사설망 구성 +ⓑ. ‌저궤도 군집위성과 지상국 +위성통신 구간의 +양자내성암호 통신 +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. VPN +ⓑ. ‌양자내성 암호 +시스템 +재밍 +(Jamming) +국지적으로 방해전파를 송출하여 +해당 지역 스마트폰의 위성통신 +재밍 +ⓐ. 안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +세션 +하이재킹 +저궤도 군집위성과 위성통신하는 +지상설비의 위치 정보를 획득하여 +해당 지역으로 재밍 +ⓐ. ‌저궤도 군집위성과 지상국 +위성통신 구간의 +가상사설망 구성 +ⓑ. ‌저궤도 군집위성과 지상국 +위성통신 구간의 +양자내성암호 통신 +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. VPN +ⓑ. ‌양자내성 암호 +시스템 +알려진 +보안취약점 +지상국 라우터 장비의 디폴트 +계정을 도용하여 불법 로그인 후, +네트워크 구성정보를 무단으로 +변경 +ⓐ. ‌라우터 디폴트 계정/ +비밀번호 변경, 2차인증 +ⓑ. ‌라우터 기술적 취약점 점검 +ⓐ. 계정관리 +ⓑ. 취약점 점검 +ⓐ. - +ⓑ. - +비인가 저장 +매체 사용 +지상국 관리서버에서 와이퍼 +(wiper) 악성코드가 담긴 비인가 +USB 사용으로 악성코드에 +감염되어, 시스템 파일 삭제 +ⓐ. ‌지상국의 비인가 이동식 +저장매체 사용 제한 및 +매체제어 +ⓑ. ‌악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. ‌백신 +데이터 유출 +지상국에 노트북을 불법 반입 후, +네트워크를 통해 관리서버의 중요 +데이터를 유출 +ⓐ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 +인가된 장치만이 접속할 수 +있도록 접근제어 +ⓑ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +내부자 위협 +지상국 내부자에 의한 안테나 +제어시스템 조작 실수로 위성 +통신 서비스 장애 +ⓐ. 직무 교육 및 훈련 +ⓐ. 직무 교육 +ⓐ. - + +--- + +80 | 우주 보안모델 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +관리자 계정 +도용 +운영자가 관리자 계정을 도용하여 +관리서버에 불법 접속하고 +통신위성 운영 주요정보 유출 +ⓐ. 관리자 계정 2차인증 +ⓐ. 계정관리 +ⓐ. ‌계정관리 및 +접근통제 +관리자 계정 +도용 +위성 운영자가 관리자 공유계정을 +도용하여, 저궤도 군집위성의 +라우팅 테이블을 변경하고, 수동 +업데이트 조작 +ⓐ. ‌지상국의 위성 제어시스템 +사용자 1인1계정 부여 +ⓑ. ‌지상국의 위성 +제어시스템의 관리자와 +라우팅 테이블 관리자 분리 +ⓐ. 계정관리 +ⓑ. 권한 통제 +ⓐ. ‌계정관리 및 +접근통제 +ⓑ. ‌계정관리 및 +접근통제 +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 스캔 +공격 이상징후 탐지 및 +차단 +ⓑ. ‌DDoS 공격 탐지 및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌DDoS 대응 +시스템 +ⓒ. ‌ - +ⓓ. ‌방화벽 +업데이트 +결함 +스마트폰 제작업체의 펌웨어 +업데이트를 가장하여 원격 불법 +펌웨어 업데이트를 통해 위성통신 +서비스 차단 +ⓐ. ‌소프트웨어 업데이트 +안전성 사전 점검 +ⓐ. ‌업데이트 +사전테스트 +ⓐ. - +악성코드 +감염 +비정상 신호를 송신하는 +악성코드가 삽입된 파일을 +배포하여, 감염된 스마트폰이 +위성으로 지속적인 비정상 · +신호 전송 +ⓐ. ‌소프트웨어 배포 안전성 +검증· +- ‌소프트웨어 제작자 및 +배포자 서명 검증 +ⓑ. ‌스마트폰 악성코드 탐지 및 +차단 +ⓐ. 서명 검증 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. - +ⓑ. 스마트폰 백신 +악성코드 +감염 +데이터를 외부로 송신하는 +악성코드가 삽입된 파일을 +배포하여, 악성코드에 감염된 +스마트폰에서 데이터 유출 +ⓐ. ‌소프트웨어 배포 안전성 +검증· +- ‌소프트웨어 제작자 및 +배포자 서명 검증 +ⓑ. ‌스마트폰 악성코드 탐지 및 +차단 +ⓐ. 서명 검증 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. - +ⓑ. ‌스마트폰 백신 +알려진 +보안취약점 +유지보수 엔지니어로 위장 +출입하여, 안테나 제어시스템 +디폴트 계정으로 접속한 후, 설정 +정보를 무단 변경 +ⓐ. 비인가자의 출입 관리 +ⓑ. ‌제어시스템 디폴트 계정/ +비밀번호 변경, 2차인증 +ⓒ. ‌물리적으로 비인가자의 +접근 모니터링 +ⓐ. 출입통제 +ⓑ. 계정관리 +ⓒ. ‌CCTV +모니터링 +ⓐ. ‌출입통제 +시스템 +ⓑ. ‌계정관리 및 +접근통제 +ⓒ. CCTV + +--- + + +## 제4장 우주 보안아키텍처 | 81 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +3) 저궤도위성 기반 인터넷 서비스 보안요구사항 +저궤도위성 기반 인터넷 서비스는 위성 통신구간 도청에 의한 기업의 주요정보 불법 획득, 보안취약점이 +내포된 Wi-Fi 라우터 공급 및 악성코드 감염에 의한 주요정보 유출 등의 보안위협이 존재할 수 있다. +이러한 보안위협에 대응하기 위한 저궤도위성 기반 인터넷 서비스의 주요 보안요구사항은 위성과의 +통신구간 암호화, 보안취약점이 있는 부품 공급에 대한 공급망 보안, 네트워크 분리 및 유/무선 네트워크 +접근통제, 악성코드 탐지 및 차단 등이 있다. +| 그림 23 | 저궤도위성 기반 인터넷 서비스의 주요 보안요구사항 +1 +4 +2 +5 +3 +4 +5 +5 +① 위성통신 서비스 구간의 암호화 통신 ④ 네트워크 분리 및 유/무선 네트워크 접근통제 +② H/W, S/W 제품 도입시 보안성 검토 ⑤ 악성코드 탐지 및 차단, 메일보안 +③ 네트워크 이상징후 및 웹 공격 탐지/차단 + +![이미지 81-0](images/p0081_img0.png) + + +--- + +82 | 우주 보안모델 +저궤도위성 기반 인터넷 서비스 보안위협 대응에 필요한 보안요구사항, 보안기술, 보안솔루션은 아래 +표와 같다. +표 33 저궤도위성 기반 인터넷 서비스 보안요구사항, 보안기술, 보안솔루션 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +공급망 +보안위협 +비인가 기기를 공급받아 +군집위성군에 탑재하고 발사 후, +특정 조건 성립으로 로직 폭탄이 +폭발하여 궤도 이탈 +ⓐ. ‌H/W, S/W 제품 도입시 +보안성 검토 및 인수 +테스트 +ⓑ. ‌SW 자재명세서 관리 +ⓐ. ‌보안성 승인 +테스트(오픈 +소스 점검 등), +인수 테스트 +ⓑ. ‌SW 공급망 +관리 +ⓐ. ‌오픈소스 분석 +시스템 +ⓑ. ‌SBoM 솔루션 +세션 +하이재킹 +기업과 위성간 송수신되는 위성 +신호를 수집 및 분석하여 기업의 +주요정보 불법 획득 +ⓐ. ‌통신위성과 기업의 +위성통신 구간 가상사설망 +구성(기업~지상국) +ⓑ. ‌통신위성과 기업의 +위성통신 구간 양자내성· +암호 통신(기업~지상국) +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. VPN +ⓑ. ‌양자내성 암호 +시스템 +재밍 +(Jamming) +기업의 안테나를 대상으로 재밍 +공격을 진행하여 위성 인터넷 +서비스 장애 유발 +ⓐ. 안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +데이터 유출 +지상국에 노트북을 불법 반입 후, +네트워크를 통해 관리서버의 중요 +데이터를 유출 +ⓐ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 +인가된 장치만이 접속할 수 +있도록 접근제어 +ⓑ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +비인가 저장 +매체 사용 +지상국 관리서버에서 와이퍼 +(wiper) 악성코드가 담긴 비인가 +USB 사용으로 악성코드에 +감염되어, 시스템 파일 삭제 +ⓐ. ‌지상국의 비인가 이동식 +저장매체 사용 제한 및 +매체제어 +ⓑ. ‌악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. ‌백신 +내부자 위협 +운영자가 라우터 설정 시, 실수로 +잘못된 구성정보를 입력하여 +위성통신 중단 +ⓐ. 직무 교육 및 훈련 +ⓐ. 직무 교육 +ⓐ. - +관리자 계정 +도용 +위성 운영자가 관리자 공유계정을 +도용하여, 저궤도 군집위성의 +라우팅 테이블을 변경하고, 수동 +업데이트 조작 +ⓐ. ‌지상국의 위성 제어시스템 +사용자 1인1계정 부여 +ⓑ. ‌지상국의 위성 +제어시스템의 관리자와 +라우팅 테이블 관리자 분리 +ⓐ. 계정관리 +ⓑ. 권한 통제 +ⓐ. ‌계정관리 및 +접근통제 +ⓑ. ‌계정관리 및 +접근통제 + +--- + + +## 제4장 우주 보안아키텍처 | 83 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +악성코드 +감염 +메일에 의해 스파이웨어에 감염된 +개인PC에서, 주요 정보를 위성 +통신망을 통해 외부로 유출 +ⓐ. 악성코드 탐지 및 차단 +ⓐ. ‌악성코드 탐지 +및 차단 +ⓐ. 백신 +네트워크 +구성 오류 +라우터 구성정보 오류로, +비인가자가 기업 네트워크에 +침투하고, 업무시스템 디폴트 +계정으로 접속하여 백도어 설치 +ⓐ. ‌외부 위성통신 인터넷에서 +기업의 내부 네트워크 +접근에 대한 IP/Port 기반 +접근통제 +ⓑ. ‌기업의 임직원 업무망과 +기업의 시스템운영망 분리 +ⓒ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓓ. ‌라우터, 기술적 취약점 +점검 +ⓔ. 악성코드 탐지 및 차단 +ⓐ. ‌네트워크 +접근통제 +ⓑ. 네트워크 분리 +ⓒ. 계정관리 +ⓓ. 취약점 점검 +ⓔ. ‌악성코드 탐지 +및 차단 +ⓐ. 방화벽 +ⓑ. 방화벽 +ⓒ. ‌계정관리 및 +접근통제 +ⓓ. - +ⓔ. 백신 +악성코드 +감염 +무선AP에 불법 접속 후, +위성으로 대용량 데이터를 반복 +전송하는 악성코드를 모든 PC에 +감염시켜 위성통신 중단 +ⓐ. ‌무선AP 접근 허용 +디바이스 통제 +ⓑ. 악성코드 탐지 및 차단 +ⓒ. ‌외부 위성통신 인터넷 사용 +정책 적용· +- ‌데이터량, IP/Port 기반 +접근 제어 +ⓐ. 접근통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. ‌위성통신 +인터넷 +접근통제 +ⓐ. ‌무선침입 +방지시스템 +ⓑ. 백신 +ⓒ. 방화벽 +악성코드 +감염 +업무PC가 위성 인터넷을 +사용하면서 악성코드에 감염되고, +업무시스템을 감염시켜, 시스템 +파일 무단 삭제 +ⓐ. ‌네트워크 트래픽 내의 +숨겨진 악성코드 및 +이상징후 탐지 및 차단 +ⓑ. 악성코드 탐지 및 차단 +ⓒ. ‌통신위성 연계 인터넷 +서비스망과 기업의 +시스템운영망 분리 +ⓓ. ‌외부 위성통신 인터넷에서 +기업의 시스템운영망 +접근에 대한 IP/Port 기반 +접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. 네트워크 분리 + +ⓓ. ‌네트워크 +접근제어 +ⓐ. ‌침입방지 +시스템 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. 방화벽 + +--- + +84 | 우주 보안모델 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +악성코드 +감염 +메일에 의해 백도어가 설치된 +업무PC에, 비인가자가 접속하고 +업무시스템 취약점으로 관리자 +권한을 획득 후, 주요정보 유출 +ⓐ. ‌첨부파일에 숨겨진 +악성코드 탐지 및 메일차단 +ⓑ. 악성코드 탐지 및 차단 +ⓒ. ‌기업의 임직원 업무망과 +기업의 시스템운영망 분리 +ⓓ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓔ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. 메일 보안 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. 네트워크 분리 +ⓓ. 계정관리 +ⓔ. ‌중요정보 유출 +방지 +ⓐ. 메일 보안 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. ‌계정관리 및 +접근통제 +ⓔ. ‌정보유출 +방지시스템 +(DLP) +공급망 +보안위협 +스파이웨어 악성코드가 삽입된 +Wi-Fi 라우터가 공급되고 +가정집에 설치되어, 위성 통신 시 +주요 개인정보 유출 +ⓐ. ‌H/W, S/W 제품 도입시 +보안성 검토 및 인수 +테스트 +ⓑ. SW 자재명세서 관리 +ⓐ. ‌보안성 승인 +테스트(오픈 +소스 점검 등), +인수 테스트 +ⓑ. ‌SW 공급망 +관리 +ⓐ. ‌오픈소스 분석 +시스템 +ⓑ. ‌SBoM 솔루션 +알려진 +보안취약점 +인터넷에서 관리서버 취약점을 +활용하여 불법접속 후, 관리서버 +네트워크 정보를 변경하여 위성 +통신 중단 +ⓐ. ‌네트워크 트래픽 내의 웹 +취약점 정보 활용 이상징후 +탐지 및 차단 +ⓑ. ‌서비스 운영자와 시스템 +운영자의 계정 및 권한 +분리, 2차인증 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. 권한 통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌계정관리 및 +접근통제 +알려진 +보안취약점 +유지보수 엔지니어로 위장 +출입하여, 기업 라우터 디폴트 +계정으로 접속한 후, 설정 정보를 +무단 변경 +ⓐ. 비인가자의 출입 관리 +ⓑ. ‌라우터 디폴트 계정/ +비밀번호 변경, 2차인증 +ⓐ. 출입통제 +ⓑ. 계정관리 +ⓐ. ‌출입통제 +시스템 +ⓑ. ‌계정관리 및 +접근통제 +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 스캔 +공격 이상징후 탐지 및 차단 +ⓑ. DDoS 공격 탐지 및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌DDoS 대응 +시스템 +ⓒ. - +ⓓ. 방화벽 +물리적 손상 +외부에 설치된 기업 또는 지상국 +안테나에 불법 접근하여 안테나를 +훼손하여 위성통신 중단 +ⓐ. ‌(기업) 비인가자의 현장설비 +접근차단 시설 설치 +ⓑ. ‌(가정) 외부인 접근이 +어려운 지역에 안테나 설치 +ⓒ. ‌물리적으로 비인가자의 +접근 모니터링 +ⓓ. 비인가자의 출입 관리 +ⓐ. ‌(기업) 물리적 +접근통제 +ⓑ. ‌(가정) 물리적 +접근통제 +ⓒ. ‌CCTV +모니터링 +ⓓ. 출입통제 +ⓐ. - +ⓑ. - +ⓒ. CCTV +ⓓ. ‌출입통제· +시스템 + +--- + + +## 제4장 우주 보안아키텍처 | 85 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +다. 위성방송 서비스 보안요구사항 +위성방송 서비스에서는 폐기된 방송위성을 활용한 페이크(fake) 방송콘텐츠 송출, 방송통신 구간의 +보안취약점을 이용한 방송 조작, 방해전파 송출을 통한 방송서비스 장애 유발 등의 보안 위협이 존재한다. +이러한 보안 위협에 대응하기 위한 위성방송 서비스의 주요 보안요구사항은 노후된 방송위성의 활동 +정지와 회수 및 폐기, 통신장비 계정관리 및 네트워크 취약점 점검, 방송통신 재밍 공격에 대한 안티 재밍 +등이 있다. +| 그림 24 | 위성방송 서비스 주요 보안요구사항 +1 +3 +2 +5 +6 +7 +4 +① 노후된 방송위성의 활동 정지, 회수 및 폐기 ⑤ 시스템 조작 실수 방지 교육 및 훈련 +② 방송통신 재밍 공격에 대한 안티 재밍 ⑥ 중요정보 유출 방지 +③ 비인가 이동식 저장매체 제어 ⑦ 악성코드 탐지 및 차단 +④ 통신장비 계정관리, 네트워크 취약점 점검 + +--- + +86 | 우주 보안모델 +위성방송 서비스 보안위협 대응에 필요한 보안요구사항, 보안기술, 보안솔루션은 아래 표와 같다. +표 34 위성방송 서비스 보안요구사항, 보안기술, 보안솔루션 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +폐기 장비 +활용 +폐기된 방송위성의 제어 정보를 +입수하여, 방송위성에 저장되어 +있는 주요정보를 불법 획득 +ⓐ. ‌폐기대상 방송위성의 활동 +정지, 회수 및 폐기 +ⓐ. ‌폐기관리 +ⓐ. - +폐기 장비 +활용 +폐기된 방송위성의 정보를 +입수하여, 페이크(fake) +방송콘텐츠를 송출하고, 지상으로 +송신하도록 방송위성 조작 +ⓐ. ‌노후된 방송위성의 활동 +정지, 회수 및 폐기 +ⓑ. ‌지상에서 방송위성 데이터 +수신시 방송위성 및 +콘텐츠제작사 인증 +ⓐ. ‌폐기관리 +ⓑ. ‌방송위성 인증 +ⓐ. - +ⓑ. - +재밍 +(Jamming) +방송위성과 통신하는 +위성방송송출센터 주변에서 +방해전파 송출 +ⓐ. 안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +세션 +하이재킹 +지상설비의 위치 및 위성 신호 +정보를 획득하여 위성에서 +지상국으로 전송하는 데이터 도청 +ⓐ. ‌위성방송 송출센터와 +지상국 구간의 가상사설망 +구성 +ⓑ. ‌위성방송 송출센터와 +지상국 구간의 +양자내성암호 통신 +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. ‌VPN +ⓑ. ‌양자내성 암호 +시스템 +알려진 +보안취약점 +지상국 라우터 장비의 디폴트 +계정을 도용하여 불법 로그인 후, +네트워크 구성정보 무단 변경 +ⓐ. ‌라우터 디폴트 계정/ +비밀번호 변경, 2차인증 +ⓑ. 라우터 기술적 취약점 점검 +ⓒ. ‌네트워크 원격 접속정보 및 +데이터 흐름, 권한 탈취 +이상징후 탐지 +ⓐ. ‌통신장비 +계정관리 +ⓑ. 취약점 점검 +ⓒ. ‌이상징후 탐지 +및 차단 +ⓐ. - +ⓑ. - +ⓒ. ‌침입방지 +시스템 +비인가 저장 +매체 사용 +위성방송송출센터 관리서버에서 +와이퍼(wiper) 악성코드가 담긴 +비인가 USB 사용으로, 시스템 +파일 삭제 +ⓐ. ‌관리서버에서 비인가 +이동식 저장매체 사용 제한 +및 매체제어 +ⓑ. 악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. 백신 + +--- + + +## 제4장 우주 보안아키텍처 | 87 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +악성코드 +감염 +위성방송 송출센터의 관리PC가 +메일을 통해 와이퍼(wiper) +악성코드에 감염되어 +콘텐츠관리서버에 전파 및 콘텐츠 +파일 삭제 +ⓐ. ‌첨부파일에 숨겨진 +악성코드 탐지 및 메일차단 +ⓑ. 악성코드 탐지 및 차단 +ⓒ. ‌위성방송 송출센터의 +임직원 업무망과 콘텐츠· +관리 시스템운영망 분리 +ⓓ. ‌위성방송 송출센터의 내부 +임직원 업무망에서 +콘텐츠관리 시스템운영망 +접근에 대한 IP/Port 기반 +접근제어 +ⓐ. 메일 보안 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. 네트워크 분리 +ⓓ. ‌네트워크 +접근통제 +ⓐ. 메일 보안 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. 방화벽 +데이터 유출 +지상국에 노트북을 불법 반입 후, +네트워크를 통해 관리서버의 중요 +데이터 유출 +ⓐ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 +인가된 장치만이 접속할 수 +있도록 접근제어 +ⓑ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 · +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +내부자 위협 +위성방송송출센터의 안테나 +제어시스템 운영자의 안테나 조작 +실수로 위성방송 서비스 장애 +ⓐ. 직무 교육 및 훈련 +ⓐ. 직무 교육 +ⓐ. - +내부자 위협 +위성방송송출센터의 관리서버 +운영자가 악의적으로 방송위성 +운영에 대한 주요정보 유출 +ⓐ. ‌정보유출 방지를 위한 +관리자 및 운영자 행위에 +대한 주기적인 보안 감사 +ⓐ. 보안 감사 +ⓐ. - +알려진 +보안취약점 +위성방송송출센터 유지보수 +엔지니어로 위장 출입하여, +안테나 제어시스템 디폴트 +계정으로 접속하여, 설정값 변경 +ⓐ. ‌비인가자의 주요시설 출입 +관리 +ⓑ. ‌제어시스템 디폴트 계정/ +비밀번호 변경, 2차인증 +ⓐ. ‌출입통제 +ⓑ. 계정관리 +ⓐ. ‌출입통제 · +시스템 +ⓑ. ‌계정관리 및 +접근통제 +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 스캔 +공격 이상징후 탐지 및 차단 +ⓑ. ‌DDoS 공격 탐지 및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 · +시스템 +ⓑ. ‌DDoS 대응 +시스템 +ⓒ. - +ⓓ. 방화벽 + +--- + +88 | 우주 보안모델 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +물리적 손상 +안테나 설치 장소에 불법적으로 +출입하여 안테나 설비 파손 +ⓐ. ‌비인가자의 현장설비 +접근차단 시설 설치 +ⓑ. ‌물리적인 비인가자의 접근 +모니터링 +ⓐ. ‌물리적 +접근통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. ‌출입통제· +시스템 +ⓑ. CCTV +물리적 손상 +비인가자가 위성방송송출센터 +통신실에 승인 없이 출입하여, +위성모뎀 네트워크 케이블 훼손 +ⓐ. ‌비인가자의 통신실 출입 +관리 +ⓑ. ‌비인가자의 통신실 접근 +모니터링 +ⓐ. 출입통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. ‌출입통제 +시스템 +ⓑ. CCTV + +--- + + +## 제4장 우주 보안아키텍처 | 89 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +3 +위성활용 서비스 보안아키텍처 +위성활용 서비스 보안아키텍처는 위성활용 서비스에서 도출된 보안요구사항을 바탕으로 보안기술, +보안솔루션에 대한 활용방안을 도식화하여 표현한 아키텍처이다. +NIST IR 8270(상업용 위성 운영을 위한 사이버보안 프레임워크 적용), NIST IR 8323(PNT서비스의 책임 +있는 사용을 위한 사이버보안 프레임워크 적용), NIST IR 8401 (지상국에서 위성의 명령과 제어를 보장하기 +위한 사이버보안 프레임워크 적용), 미국 사이버보안 및 인프라 보안국(CISA)의 Recommendations · +to Space System Operators for Improving Cybersecurity(사이버 보안 개선을 위한 우주 시스템 +운영자에 대한 권장 사항) 및 일본의 민간 우주시스템 사이버보안 대책 가이드라인에서 요구하는 보호· +기능 요구사항을 위성활용 서비스별 보안아키텍처 구성 기준에 반영하였다. +가. 위성항법 서비스 보안아키텍처 +위성항법 서비스 보안아키텍처 구성 기준은 앞서 살펴본 보호기능 요구사항을 반영하여 아래와 같은 +기준으로 구성하였다. +[위성항법 서비스 보안 아키텍처 구성 기준] + +## 1. 위성 연계 네트워크 분리 및 접근제어 + +• 지상국 네트워크를 항법위성을 사용하기 위한 위성통신망과 지상국의 인터넷 접속망으로 분리 +• ‌항법데이터 중앙처리국 네트워크를 인터넷 사용이 가능한 임직원 업무망, 정보시스템 운영을 위한 시스템 +운영망으로 분리 +• 방화벽에서 네트워크별 접근에 대한 IP/Port 접근 허용 정책 설정 +• ‌지상국 및 항법데이터중앙처리국 내부 네트워크에 접속하는 장치에 대해 인가된 장치만이 접속할 수 +있도록 네트워크 접근제어 + +## 2. 위성통신 전송데이터 보호 + +• 지상국과 항법데이터 중앙처리국 간의 전송 중인 데이터 도청 차단 +- 지상국과 항법데이터 중앙처리국 간 가상사설망으로 VPN 시스템 구축 + +## 3. 저장데이터 보호 + +• 지상국 및 항법데이터 중앙처리국 시스템 데이터에 대한 비인가 변조/삭제/유출 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 + +--- + +90 | 우주 보안모델 + +## 4. 침입탐지 및 악성코드 차단 + +• ‌다양한 악성코드 및 외부의 침해 행위로부터 지상국 및 항법데이터 중앙처리국의 내부 네트워크 및 +시스템 보호 +- 원격접속 이상징후 탐지 및 차단을 위한 침입방지시스템(IPS) 구축 +- 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 + +## 5. 물리적 접근제어 + +• 항법데이터 수신국 안테나 및 통신시설에 비인가자의 물리적 접근 차단 +- CCTV, 출입통제시스템 구축 +보안아키텍처 구성 기준을 적용한 위성항법 서비스 보안아키텍처는 아래 그림과 같다. +| 그림 25 | 위성항법 서비스 보안아키텍처 + +![이미지 90-0](images/p0090_img0.png) + + +--- + + +## 제4장 우주 보안아키텍처 | 91 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +나. 위성통신 서비스 보안아키텍처 +1) 스마트선박 위성통신 서비스 보안아키텍처 +스마트선박 위성통신 서비스 보안아키텍처 구성 기준은 앞서 살펴본 보호기능 요구사항을 반영하여 +아래와 같은 기준으로 구성하였다. +[스마트선박 위성통신 서비스 보안아키텍처 구성 기준] + +## 1. 위성연계 네트워크 접근제어 + +• ‌선박의 네트워크를 VSAT 위성통신망, 선박 내부시스템 운영망(제어시스템망, 선박업무 시스템망, +전력망), 임직원 인터넷 서비스망, 탑승객 인터넷 서비스 Wi-Fi 망 등으로 분리 +• 방화벽에서 네트워크별 접근에 대한 IP/Port 접근 허용 정책 설정 +• 선박 제어시스템망과 전력망은 VSAT 위성통신망으로 일방향 정보전송만 허용 + +## 2. 위성통신 전송데이터 보호 + +• ‌위성과의 통신구간 간의 전송 중인 데이터 도청 및 변조 차단 +- 선박과 지상국 간 가상사설망으로 VPN 시스템 및 양자내성암호 시스템 구축 +- 선박과 선박본사 간 가상사설망으로 VPN 시스템 및 양자내성암호 시스템 구축 + +## 3. 인증 및 권한제어 + +• 선박 운영시스템에 디폴트 계정 및 취약한 계정에 의한 비인가자의 접근통제 및 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 + +## 4. 침입탐지 및 악성코드 차단 + +• 다양한 악성코드 및 외부의 침해 행위로부터 선박 내부 네트워크 및 시스템 보호 +- 원격접속 및 악성코드 패턴 등의 이상징후 탐지 및 차단을 위한 침입방지시스템(IPS) 구축 +- 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 +- 메일로부터 발생되는 악성코드 감염 예방을 위한 메일보안 구축 + +## 5. 물리적 접근제어 + +• 선박의 VSAT 안테나 및 통신장비 관리시설 등으로 비인가자의 물리적 접근을 차단 +- CCTV, 출입통제 시스템 구축 + +--- + +92 | 우주 보안모델 +보안아키텍처 구성 기준을 적용한 스마트선박 위성통신 서비스 보안아키텍처는 아래 그림과 같다. +| 그림 26 | 스마트선박 위성통신 서비스 보안아키텍처 +2) 저궤도위성 기반 이동통신 서비스 보안아키텍처 +저궤도위성 기반 이동통신 서비스 보안아키텍처 구성 기준은 앞서 살펴본 보호기능 요구사항을 +반영하여 아래와 같은 기준으로 구성하였다. +[저궤도위성 기반 이동통신 서비스 보안아키텍처 구성 기준] + +## 1. 위성통신 전송데이터 보호 + +• 저궤도위성과 지상국 간의 전송 중인 데이터의 도청 차단 +- 지상국과 지상국 간 가상사설망으로 VPN 시스템 구축 +- 네트워크 구간 암호화를 위한 지상국과 지상국 간 양자내성암호 시스템 구축 + +## 2. 저장데이터 보호 + +• 지상국 시스템 및 스마트폰의 데이터에 대한 비인가 변조/삭제/유출 차단 +- 비인가 매체사용에 의한 데이터 훼손을 차단하는 정보유출방지(DLP) 시스템 구축 + +## 3. 인증 및 권한제어 + +• 지상국 통신시스템 및 시스템에 대한 비인가자의 접근통제 및 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 + +--- + + +## 제4장 우주 보안아키텍처 | 93 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + + +## 4. 침입탐지 및 악성코드 차단 + +• 다양한 악성코드로 부터 기업의 내부 네트워크 및 시스템 보호 +- 네트워크 포트 스캔 등 공격 이상징후 탐지 및 차단을 위한 침입방지(IPS) 시스템 구축 +- 분산서비스거부공격(DDoS) 차단을 위한 DDoS 대응 시스템 구축 +- 비인가 접속단말 사용 탐지 및 차단을 위한 네트워크 접근통제(NAC) 시스템 구축 +- 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 +- 스마트폰의 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 + +## 5. 물리적 접근제어 + +• 지상국의 시스템운영실에 대한 비인가자의 물리적 접근 차단 +- CCTV, 출입통제 시스템 구축 +보안아키텍처 구성 기준을 적용한 저궤도위성 기반 이동통신 서비스 보안아키텍처는 아래 그림과 같다. +| 그림 27 | 저궤도위성 기반 이동통신 서비스 보안아키텍처 + +![이미지 93-0](images/p0093_img0.png) + + +--- + +94 | 우주 보안모델 +3) 저궤도위성 기반 인터넷 서비스 보안아키텍처 +저궤도위성 기반 인터넷 서비스 보안아키텍처 구성 기준은 앞서 살펴본 보호기능 요구사항을 반영하여 +아래와 같은 기준으로 구성하였다. +[저궤도위성 기반 인터넷 서비스 보안아키텍처 구성 기준] + +## 1. 위성연계 네트워크 분리 및 접근제어 + +• 지상국 네트워크를 위성 사용을 위한 위성통신망과 인터넷 사용을 위한 인터넷 접속망으로 분리 +• ‌저궤도위성 기반 인터넷 서비스를 사용하는 기업 네트워크를 인터넷을 사용하기 위한 위성통신망과 +기업의 정보시스템 운영을 위한 시스템 운영망으로 분리 +• 방화벽에서 네트워크별 접근에 대한 IP/Port 접근 허용 정책 설정 +• ‌기업 내부 무선AP에 비인가자가 불법으로 접속하는 것을 방지하기 위해 무선침입방지 시스템(WIPS) 구축 + +## 2. 위성통신 전송데이터 보호 + +• 저궤도위성과 지상국 간의 전송 중인 데이터 도청 차단 +- 지상국과 지상국 간 가상사설망으로 VPN 시스템 구축 +- 네트워크 구간 암호화를 위한 지상국과 지상국 간 양자내성암호 시스템 구축 + +## 3. 저장데이터 보호 + +• 지상국의 시스템 데이터에 대한 비인가 변조/삭제/유출 차단 +- 시스템 취약점을 활용하는 이상징후 탐지 및 차단을 위한 침입방지시스템(IPS) 구축 +- 사용자 계정관리 및 접근통제 시스템 구축 +- 비인가 매체사용에 의한 데이터 훼손을 차단하는 정보유출방지(DLP) 시스템 구축 + +## 4. 인증 및 권한제어 + +• 원격접속 채널로 기업의 시스템에 대한 비인가자의 접근통제 및 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 + +## 5. 침입탐지 및 악성코드 차단 + +• 다양한 악성코드로 부터 기업의 내부 네트워크 및 시스템 보호 +- 네트워크 트래픽 내의 숨겨진 악성코드 탐지 및 차단을 위한 침입방지(IPS) 시스템 구축 +- 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 +- 메일로부터 발생되는 악성코드 감염 예방을 위한 메일보안 구축 + +## 6. 물리적 접근제어 + +• 기업의 안테나에 비인가자의 물리적 접근 차단 +- CCTV, 출입통제 시스템 구축 + +--- + + +## 제4장 우주 보안아키텍처 | 95 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안아키텍처 구성 기준을 적용한 저궤도위성 기반 인터넷 서비스 보안아키텍처는 아래 그림과 같다. +| 그림 28 | 저궤도위성 기반 인터넷 서비스 보안아키텍처 +다. 위성방송 서비스 보안아키텍처 +위성방송 서비스 보안아키텍처 구성 기준은 앞서 살펴본 보호기능 요구사항을 반영하여 아래와 같은 +기준으로 구성하였다. +[위성방송 서비스 보안아키텍처 구성 기준] + +## 1. 위성연계 네트워크 분리 및 접근제어 + +• 위성방송 송출센터 네트워크를 임직원 업무망, 위성통신 운영망, 방송콘텐츠 관리 시스템 운영망으로 분리 +• 방화벽에서 네트워크별 접근에 대한 IP/Port 접근 허용 정책 설정 + +## 2. 저장데이터 보호 + +• 위성방송 송출센터의 방송콘텐츠 및 관리서버 데이터에 대한 비인가 변조/삭제/유출 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 +• 위성방송 송출센터 시스템의 비인가 저장매체 USB등에 의한 훼손 차단 +- 매체제어 정책 적용을 위한 정보유출차단(DLP) 시스템 구축 + +![이미지 95-0](images/p0095_img0.png) + + +--- + +96 | 우주 보안모델 + +## 3. 인증 및 권한제어 + +• 지상국 및 위성방송 송출센터의 디폴트 계정 및 취약한 계정 사용 등으로 인한 시스템 침투 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 + +## 4. 침입탐지 및 악성코드 차단 + +• 다양한 악성코드로 부터 보호 위성방송 송출센터 내부 네트워크 및 시스템 보호 +- 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 +- 메일로부터 발생되는 악성코드 감염 예방을 위한 메일보안 시스템 구축 + +## 5. 물리적 접근제어 + +• 위성방송 송출센터 안테나 및 통신 시설에 비인가자의 물리적 접근을 차단 +- CCTV, 출입통제 시스템 구축 +보안아키텍처 구성 기준을 적용한 위성방송 서비스 보안아키텍처는 아래 그림과 같다. +| 그림 29 | 위성방송 서비스 보안아키텍처 + +![이미지 96-0](images/p0096_img0.png) + + +--- + + +## 제5장 + +우주 보안아키텍처 활용방안 + +## 1. 보안위협 유형별 활용방안 + + +## 2. 가상 사례기반 활용방안 + + +--- + +98 | 우주 보안모델 + +## 제5장 + +우주 보안아키텍처 활용방안 +본 장에서는 민간 우주산업 보안 관계자의 보안아키텍처 이해도와 활용도를 제고하기 위하여, 3장에서 +위성활용 서비스를 대상으로 분석한 위성 데이터 훼손, 위성 서비스 장애, 우주통신 정보 유출 보안위협 +유형에 대응하기 위한 우주 보안아키텍처 활용방안을 소개한다. 우주 보안아키텍처 활용방안은 다음과 +같이 두 부분으로 기술하였다. +1. ‌보안위협 유형별 활용방안에서는 앞서 위성항법 서비스, 스마트선박 위성통신 서비스, 위성방송 +서비스를 대상으로 분석한 세 가지의 보안위협 유형에 대응하기 위한 우주 보안아키텍처 활용방안을 +제시하였다. +2. ‌가상 사례기반 활용방안에서는 가정집에서 위성통신을 사용하는 가상의 인터넷 사용환경을 +제시하고 위성통신 서비스 보안위협에 대응하기 위한 우주 보안아키텍처 활용방안을 제시하였다. + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 99 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +1 +보안위협 유형별 활용방안 +본 문서 3장에서 위성항법 서비스, 스마트선박 위성통신 서비스, 위성방송 서비스를 대상으로 앞서 +심층 분석해 본 위성 데이터 훼손, 위성 서비스 장애, 우주통신 정보 유출의 보안위협 유형에 대응하기 +위한 보안아키텍처 활용절차는 다음과 같다. +| 그림 30 | 보안아키텍처 활용 절차 +Step 1 보안위협 도출 +• ‌보안위협 목록(3장)을 +참고하여 보안위협 유형별 +보안위협 발췌 및 정리 +• ‌보안위협에 대응하는 +보안요구사항(4장)을 · +참고하여 매핑 +Step 2 보안요구사항 매핑 +• ‌보안요구사항의 보안기술〮 +솔루션을 보안아키텍처를 +참고하여 적용 +Step 3 보안아키텍처 적용 +가. 위성항법 서비스 활용방안 +1) 위성 데이터 훼손 +위성 데이터 훼손에 대한 위성항법 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +위성 데이터 훼손 보안위협 유형을 3장 위성항법 서비스 보안위협을 참고하여 도출 및 정리한다. +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된, 위성 데이터 훼손의 보안위협에 대응하는 보안요구사항을 4장에서 +제시한 보안요구사항과 매핑한다. 위성 데이터 훼손 보안위협에 대응하는 보안요구사항을 정리하면 다음 +표와 같다. + +--- + +100 | 우주 보안모델 +표 35 위성항법 서비스 위성 데이터 훼손 대응 보안요구사항 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +데이터변조 +선박의 항로 이탈을 유도하기 +위하여 위치정보를 변조하여 +선박의 위성항법 시스템으로 +전송 +ⓐ. ‌항법위성 데이터 수신시 +항법위성 인증 +ⓑ. ‌송신데이터 서명 및 +수신데이터 서명 검증 +ⓐ. 항법위성 인증 +ⓑ. 메세지 인증 +ⓐ. - +ⓑ. - +세션 +하이재킹 +지상국으로 전송하는 데이터 +가로채기 후, 항법위성으로 +송신하는 정보 조작으로 +항법위성의 위치정보 무단 +변경 +ⓐ. ‌항법데이터 중앙처리국과 +지상국 네트워크 구간의 +가상사설망 구성 +ⓑ. ‌항법데이터 중앙처리국과 +지상국 위성통신 구간 +양자내성암호 통신 +ⓐ. ‌통신구간 +터널링 + +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. VPN +ⓑ. ‌양자내성 암호 +시스템 +악성코드 +감염 +비인가자가 출입하여 +랜섬웨어에 감염된 노트북을 +불법 반입 후, 네트워크를 통해 +위치정보시스템이 감염되어 +위치정보 파일 암호화 +ⓐ. ‌지상국으로의 장비 반입에 +대한 반출입제한 +ⓑ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 인가된 +장치만이 접속할 수 있도록 +접근제어 +ⓒ. ‌악성코드 탐지 및 차단 +ⓓ. ‌물리적인 비인가자의 접근 +모니터링 +ⓐ. 반출입통제 +ⓑ. ‌네트워크 접속 +장치 접근통제 +ⓒ. ‌악성코드 탐지 +및 차단 +ⓓ. ‌CCTV +모니터링 +ⓐ. - +ⓑ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓒ. 백신 +ⓓ. CCTV +비인가 저장 +매체 사용 +지상국 관리서버에서 와이퍼 +(wiper) 악성코드가 담긴 +비인가 USB 사용으로 +악성코드에 감염되어, 시스템 +파일 삭제 +ⓐ. ‌지상국의 비인가 이동식 +저장매체 사용 제한 및 +매체제어 +ⓑ. ‌악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. 백신 +악성코드 +감염 +인터넷에서 백도어가 설치된 +업무PC에 비인가자가 +접속하고, 취약 계정으로 +위치정보시스템에 접속하여, +데이터 훼손 +ⓐ. ‌네트워크 원격 접속정보 및 +악성코드패턴, 계정 탈취 +이상징후 탐지 +ⓑ. ‌악성코드 탐지 및 차단 +ⓒ. ‌외부 인터넷에서 내부 시스템 +접근에 대한 IP/Port 기반 +접근제어 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. 백신 +ⓒ. 방화벽 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 101 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +알려진 +보안취약점 +알려진 지상국 관리정보를 +활용하여 관리서버에 +접속하고, 시스템 관리 권한을 +탈취하여 네트워크 정보 변경 +ⓐ. ‌네트워크 원격 접속정보 및 +데이터 흐름, 권한 탈취 +이상징후 탐지 +ⓑ. ‌항법위성 연계 위성통신망과 +지상국의 인터넷 접속망 분리 +ⓒ. ‌외부 인터넷에서 지상국의 +위성통신망 접근에 대한 IP/ +Port 기반 접근제어 +ⓓ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓔ. ‌서버 일반 사용자의 관리자 +권한 사용 제한 · +- ‌권한변경 명령어 사용 차단 +및 관리자 그룹 사용자 통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌네트워크 분리 +ⓒ. ‌네트워크 +접근통제 +ⓓ. ‌비인가자 +접근통제 +ⓔ. ‌권한 통제 + +ⓐ. ‌침입방지 +시스템 +ⓑ. 방화벽 +ⓒ. 방화벽 +ⓓ. ‌계정관리 및 +접근통제 +ⓔ. ‌계정관리 및 +접근통제 +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 위성 데이터 훼손 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. +| 그림 31 | 위성항법 서비스 위성 데이터 훼손 대응 보안아키텍처 + +![이미지 101-0](images/p0101_img0.png) + + +--- + +102 | 우주 보안모델 +2) 위성 서비스 장애 +위성 서비스 장애에 대한 위성항법 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +위성 서비스 장애 보안위협 유형을 3장 위성항법 서비스 보안위협을 참고하여 도출 및 정리한다. +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된 위성 서비스 장애의 보안위협에 대응하는 보안요구사항을 4장에서 +제시한 보안요구사항과 매핑한다. 위성 서비스 장애 보안위협에 대응하는 보안요구사항을 정리하면 다음 +표와 같다. +표 36 위성항법 서비스 위성 서비스 장애 대응 보안요구사항 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +재밍 +(Jamming) +지상국 안테나에 대한 재밍으로, +항법위성으로의 위치정보 +보정데이터 송신 방해 +ⓐ. 안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +재밍 +(Jamming) +국지적으로 방해전파를 송출하여 +해당 지역을 운행하는 +자율주행차의 위치정보 수신 방해 +ⓐ. 안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +GPS위장 +교란 +항법위성으로 가장하고 조작된 +위치정보를 송신하여, UAM +GPS가 조작된 위치정보 +수신으로 주행오류 발생 +ⓐ. ‌항법위성 데이터 수신시 +항법위성인증 +ⓑ. ‌위치정보 송신데이터 서명 +및 수신데이터 서명 검증 +ⓐ. 항법위성 인증 +ⓑ. 메세지 인증 +ⓐ. - +ⓑ. - +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 스캔 +공격 이상징후 탐지 및 +차단 +ⓑ. ‌DDoS 공격 탐지 및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 · +시스템 +ⓑ. ‌DDoS · +대응 시스템 +ⓒ. - +ⓓ. 방화벽 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 103 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +공급망 +보안위협 +보안취약점이 있는 부품이 탑재된 +GPS 수신기의 공급으로 +자율주행차의 위치정보 수신 장애 +ⓐ. ‌H/W, S/W 제품 도입시 +보안성 검토 및 인수 +테스트 +ⓑ. ‌SW 자재명세서 관리 +ⓐ. ‌보안성 승인 +테스트(오픈 +소스 점검 등), +인수 테스트 +ⓑ. ‌SW 공급망 +관리 +ⓐ. ‌오픈소스 · +분석 시스템 +ⓑ. ‌SBoM · +솔루션 +물리적 손상 +비인가자가 지상국 또는 +항법데이터 수신국 안테나에 불법 +접근하여 안테나 시설을 훼손하여 +위성 통신 중단 +ⓐ. ‌비인가자의 현장설비 +접근차단 시설 설치 +ⓑ. ‌비인가자의 위성 통신시설 +접근 모니터링 +ⓐ. ‌물리적 +접근통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. ‌출입통제· +시스템 +ⓑ. CCTV +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 위성 서비스 장애 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. +| 그림 32 | 위성항법 서비스 위성 서비스 장애 대응 보안아키텍처 + +--- + +104 | 우주 보안모델 +3) 우주통신 정보 유출 +우주통신 정보 유출에 대한 위성항법 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +우주통신 정보 유출 보안위협 유형을 3장 위성항법 서비스 보안위협을 참고하여 도출 및 정리한다. +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된, 우주통신 정보 유출의 보안위협에 대응하는 보안요구사항을 4장· +에서 제시한 보안요구사항과 매핑한다. 우주통신 정보 유출 보안위협에 대응하는 보안요구사항을 +정리하면 다음 표와 같다. +표 37 위성항법 서비스 우주통신 정보 유출 대응 보안요구사항 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +데이터 유출 +지상국/항법데이터 수신국에 +노트북을 불법 반입 후, +네트워크를 통해 시스템의 중요 +데이터 유출 +ⓐ. ‌지상국/항법데이터 수신국 +내부 네트워크에 접속하는 +장치에 대해 인가된 +장치만이 접속할 수 있도록 +접근제어 +ⓑ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +알려진 +보안취약점 +유지보수 원격 접속채널로 +관리서버에 불법 접속하여, +항법위성 인터페이스 정보를 획득 +ⓐ. ‌네트워크 원격 접속정보 +및 데이터 흐름 이상징후 +탐지 +ⓑ. ‌항법위성 연계 +위성통신망과 지상국의 +인터넷 접속망 분리 +ⓒ. ‌지상국 또는 항법데이터 +수신국 외부 인터넷에서 +위성통신망 접근에 대한 +IP/Port 기반 접근제어 +ⓓ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌네트워크 분리 +ⓒ. ‌네트워크 +접근통제 +ⓓ. ‌계정관리 +ⓐ. ‌침입방지 +시스템 +ⓑ. 방화벽 +ⓒ. 방화벽 +ⓓ. ‌계정관리 및 +접근통제 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 105 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 우주통신 정보 유출 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. +| 그림 33 | 위성항법 서비스 우주통신 정보 유출 대응 보안아키텍처 +나. 스마트선박 위성통신 서비스 활용방안 +1) 위성 데이터 훼손 +위성 데이터 훼손에 대한 스마트선박 위성통신 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +위성 데이터 훼손 보안위협 유형을 3장 스마트선박 위성통신 서비스 보안위협을 참고하여 도출 및 +정리한다. + +--- + +106 | 우주 보안모델 +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된, 위성 데이터 훼손의 보안위협에 대응하는 보안요구사항을 4장에서 +제시한 보안요구사항과 매핑한다. 위성 데이터 훼손 보안위협에 대응하는 보안요구사항을 정리하면 다음 +표와 같다. +표 38 위성항법서비스 위성 데이터 훼손 대응 보안요구사항 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +비인가 저장 +매체 사용 +지상국 관리서버에서 와이퍼 +(wiper) 악성코드가 담긴 비인가 +USB 사용으로 악성코드에 +감염되어, 시스템 파일 삭제 +ⓐ. ‌지상국의 비인가 이동식 +저장매체 사용 제한 및 +매체제어 +ⓑ. 악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. ‌백신 +악성코드 +감염 +선원PC가 와이퍼(wiper) +악성코드를 업무시스템에 +전파하여 시스템 파일 무단 삭제 +ⓐ. ‌네트워크 트래픽 내의 +숨겨진 악성코드 탐지 및 +차단 +ⓑ. ‌악성코드 탐지 및 차단 +ⓒ. ‌VSAT 위성통신망과 선박 +내부의 시스템운영망 분리 +ⓓ. ‌선박 내부 네트워크에서 +선박 내부의 +시스템운영망접근에 대한 +IP/Port 기반 접근제어 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. ‌네트워크 분리 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. 방화벽 +알려진 +보안취약점 +알려진 VSAT 정보로, 관리서버에 +원격접속하고 시스템 관리 권한을 +탈취하여 네트워크 정보 변경 +ⓐ. ‌네트워크 원격 접속정보 및 +데이터 흐름, 권한 탈취 +이상징후 탐지 +ⓑ. ‌통신위성 연계 +위성통신망과 VSAT의 +인터넷 접속망 분리 +ⓒ. ‌외부 인터넷에서 VSAT의 +위성통신망 접근에 대한 +IP/Port 기반 접근제어 +ⓓ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 +ⓔ. ‌서버 일반 사용자의 관리자 +권한 사용 제한 · +- ‌권한변경 명령어 사용 +차단 및 관리자 그룹 +사용자 통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌네트워크 분리 +ⓒ. ‌네트워크 +접근통제 +ⓓ. ‌비인가자 +접근통제 +ⓔ. ‌권한 통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. 방화벽 +ⓒ. 방화벽 + +ⓓ. ‌계정관리 및 +접근통제 +ⓔ. ‌계정관리 및 +접근통제 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 107 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +악성코드 +감염 +백도어가 설치된 인터넷 사용 +업무PC에 원격접속한 후, +전력시스템에 접속하여 시스템 +설정 값 변경 +ⓐ. ‌네트워크 트래픽 내의 +숨겨진 악성코드 및 +이상징후 탐지 및 차단 +ⓑ. ‌악성코드 탐지 및 차단 +ⓒ. ‌VSAT 위성통신망과 선박 +내부의 시스템운영망 분리 +ⓓ. ‌외부인터넷의 VSAT내부망 +접근에 대한 IP/Port 기반 +접근제어 +ⓔ. ‌선박 내부의 +시스템운영망에서 VSAT +위성통신망으로 일방향 +전송 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. 네트워크 분리 + +ⓓ. ‌네트워크 +접근통제 +ⓔ. 일방향 통신 +ⓐ. ‌침입방지 +시스템 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. 방화벽 +ⓔ. ‌일방향 +전송장비 +알려진 +보안취약점 +알려진 VSAT 관리 서버 취약점을 +활용하여 원격 접속하고 위성 +인터페이스 정보 무단 변경 +ⓐ. ‌외부인터넷의 VSAT내부망 +접근에 대한 IP/Port 기반 +접근제어 +ⓑ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 적용 +ⓒ. ‌서버의 파일 및 서비스에 +대한 권한통제 +ⓐ. ‌네트워크 +접근통제 +ⓑ. 계정관리 +ⓒ. 권한 통제 +ⓐ. 방화벽 +ⓑ. ‌계정관리 및 +접근통제 +ⓒ. - +알려진 +보안취약점 +유지보수 비밀 채널로 +선박제어시스템에 비인가 원격 +접속하여 운항 정보 무단 변경 +ⓐ. ‌VSAT 위성통신망에서 +내부망 접근에 대한 IP/ +Port 기반 접근제어 +ⓑ. ‌시스템 사용자 계정/ +비밀번호, 2차인증 적용 +ⓒ. ‌시스템 정보 변경에 대한 +이상징후 모니터링 +ⓐ. ‌네트워크 +접근통제 +ⓑ. ‌계정관리 +ⓒ. ‌이상징후 +모니터링 +ⓐ. 방화벽 +ⓑ. ‌계정관리 및 +접근통제 +ⓒ. ‌침입방지· +시스템 +알려진 +보안취약점 +비인가자가 출입하여 안테나 +제어시스템 디폴트 계정으로 +접속한 후, 설정 정보를 무단 변경 +ⓐ. 비인가자의 출입 관리 +ⓑ. ‌안테나 제어시스템 디폴트 +계정/ 비밀번호 변경, · +2차인증 +ⓐ. 출입통제 +ⓑ. 계정관리 +ⓐ. ‌출입통제 +시스템 +ⓑ. ‌계정관리 및 +접근통제 +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 위성 데이터 훼손 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. + +--- + +108 | 우주 보안모델 +| 그림 34 | 스마트선박 위성통신 서비스 위성 데이터 훼손 대응 보안아키텍처 +2) 위성 서비스 장애 +위성 서비스 장애에 대한 스마트선박 위성통신 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +위성 서비스 장애 보안위협 유형을 3장 스마트선박 위성통신 서비스 보안위협을 참고하여 도출 및 +정리한다. +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된 위성 서비스 장애의 보안위협에 대응하는 보안요구사항을 4장에서 +제시한 보안요구사항과 매핑한다. 위성 서비스 장애 보안위협에 대응하는 보안요구사항을 정리하면 다음 +표와 같다. + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 109 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +표 39 위성항법서비스 위성서비스 장애 대응 보안요구사항 +보안위협 벡터 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +재밍 +(Jamming) +VSAT 안테나에 대한 재밍 +ⓐ. 안티 재밍 +ⓐ. ‌주파수호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +악성코드 +감염 +랜섬웨어에 감염된 탑승객 +노트북이 Wi-Fi 무선 사용으로, +업무시스템이 랜섬웨어에 감염 +ⓐ. ‌탑승객 Wi-Fi무선 +네트워크와 선박 내부의 +시스템운영망 분리 +ⓑ. ‌선박 내부의 시스템들에 +대한 악성코드 탐지 및 +차단 +ⓐ. ‌네트워크 분리 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. 방화벽 +ⓑ. 백신 +소프트웨어 +결함 +하드코딩된 계정으로 관리 서버에 +원격 접속 후, 스위치 전용 와이퍼 +(wiper) 악성코드 전파로 +네트워크 중단 +ⓐ. ‌프로그램에 계정 하드코딩 +제한 +ⓑ. ‌VSAT 위성통신망에서 +내부망으로 접근에 대한 +IP/Port 기반 접근제어 +ⓒ. ‌네트워크 트래픽 내의 +숨겨진 악성코드 및 +이상징후 탐지 및 차단 +ⓓ. 악성코드 탐지 및 차단 +ⓐ. 시큐어코딩 +ⓑ. ‌네트워크 +접근통제 +ⓒ. ‌이상징후 탐지 +및 차단 +ⓓ. ‌악성코드 탐지 +및 차단 +ⓐ. - +ⓑ. ‌방화벽 +ⓒ. ‌침입방지 +시스템 +ⓓ. 백신 +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 · +스캔 공격 이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 탐지 및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌DDoS 대응 +시스템 +ⓒ. - +ⓓ. 방화벽 +물리적 손상 +VSAT/지상국 안테나 케이블 +훼손으로 선박/지상국의 +위성통신 서비스 중단 +ⓐ. ‌비인가자의 현장설비 +접근차단 시설 설치 +ⓑ. ‌물리적인 비인가자의 접근 +모니터링 +ⓐ. ‌물리적 +접근통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. - +ⓑ. CCTV + +--- + +110 | 우주 보안모델 +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 위성 서비스 장애 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. +| 그림 35 | 스마트선박 위성통신 서비스 장애 대응 보안아키텍처 +3) 우주통신 정보 유출 +우주통신 정보 유출에 대한 스마트선박 위성통신 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +우주통신 정보 유출 보안위협 유형을 3장 스마트선박 위성통신 서비스 보안위협을 참고하여 도출 및 +정리한다. +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된, 우주통신 정보 유출의 보안위협에 대응하는 보안요구사항을 · + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 111 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + + +## 4장에서 제시한 보안요구사항과 매핑한다. 우주통신 정보 유출 보안위협에 대응하는 보 안요구사항을 + +정리하면 다음 표와 같다. +표 40 위성항법서비스 우주통신 정보 유출 대응 보안요구사항 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +세션 +하이재킹 +VSAT 안테나와 위성 사이에서 +신호 가로채기 및 도청으로 +주요정보 유출 +ⓐ. ‌위성과 VSAT 위성통신 +구간의 가상사설망 구성· +(선박~선박본사)· +(선박~지상국) +ⓑ. ‌통신위성과 VSAT +위성통신 구간 +양자내성암호 통신· +(선박~선박본사)· +(선박~지상국) +ⓐ. ‌통신구간 +터널링 +ⓑ. ‌네트워크 구간 +양자내성 +암호화 +ⓐ. VPN +ⓑ. ‌양자내성 암호 +시스템 +데이터 유출 +지상국에 노트북을 불법 반입 후, +네트워크를 통해 관리서버의 중요 +데이터 유출 +ⓐ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 +인가된 장치만이 접속할 수 +있도록 접근제어 +ⓑ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +악성코드 +감염 +선원PC가 메일 수신으로 +스파이웨어에 감염되고, +업무시스템 감염으로 주요정보 +유출 +ⓐ. ‌첨부파일에 숨겨진 +악성코드 탐지 및 메일차단 +ⓑ. ‌악성코드 탐지 및 차단 +ⓒ. ‌VSAT 위성통신망과 · +선박 내부의 · +시스템운영망 분리 +ⓓ. ‌선박 내부 네트워크에서 +선박 내부의 시스템운영망· +접근에 대한 IP/Port 기반 +접근제어 +ⓐ. ‌메일 보안 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. ‌네트워크 분리 +ⓓ. ‌네트워크 +접근통제 +ⓐ. 메일 보안 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. 방화벽 +물리적 손상 +VSAT 스위치 케이블을 변경하여 +연결하고, 선박제어시스템 +네트워크를 외부에 공개 +ⓐ. ‌비인가자의 위성 통신시설 +통제구역 출입 관리 +ⓑ. ‌물리적인 비인가자의 접근 +모니터링 +ⓐ. ‌출입통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. ‌출입통제 +시스템 +ⓑ. CCTV + +--- + +112 | 우주 보안모델 +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 우주통신 정보 유출 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. +| 그림 36 | 스마트선박 위성통신 서비스 우주통신 정보 유출 대응 보안아키텍처 +다. 위성방송 서비스 활용방안 +1) 위성 데이터 훼손 +위성 데이터 훼손에 대한 위성방송 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +위성 데이터 훼손 보안위협 유형을 3장 위성방송 서비스 보안위협을 참고하여 도출 및 정리한다. +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된, 위성 데이터 훼손의 보안위협에 대응하는 보안요구사항을 4장에서 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 113 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +제시한 보안요구사항과 매핑한다. 위성 데이터 훼손 보안위협에 대응하는 보안요구사항을 정리하면 다음 +표와 같다. +표 41 위성항법서비스 위성 데이터 훼손 대응 보안요구사항 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +폐기 장비 +활용 +폐기된 방송위성의 정보를 +입수하여, 페이크(fake) +방송콘텐츠를 송출하고, 지상으로 +송신하도록 방송위성 조작 +ⓐ. ‌노후된 방송위성의 활동 +정지, 회수 및 폐기 +ⓑ. ‌지상에서 방송위성 데이터 +수신시 방송위성 및 +콘텐츠제작사 인증 +ⓐ. 폐기관리 +ⓑ. 방송위성 인증 +ⓐ. - +ⓑ. - +알려진 +보안취약점 +지상국 라우터 장비의 디폴트 +계정을 도용하여 불법 로그인 후, +네트워크 구성정보 무단 변경 +ⓐ. ‌라우터 디폴트 계정/ +비밀번호 변경, 2차인증 +ⓑ. 라우터 기술적 취약점 점검 +ⓒ. ‌네트워크 원격 접속정보 및 +데이터 흐름, 권한 탈취 +이상징후 탐지 +ⓐ. ‌통신장비 +계정관리 +ⓑ. 취약점 점검 +ⓒ. ‌이상징후 탐지 +및 차단 +ⓐ. - +ⓑ. - +ⓒ. ‌침입방지 +시스템 +비인가 저장 +매체 사용 +위성방송송출센터 관리서버에서 +와이퍼(wiper) 악성코드가 담긴 +비인가 USB 사용으로, 시스템 +파일 삭제 +ⓐ. ‌관리서버에서 비인가 +이동식 저장매체 사용 제한 +및 매체제어 +ⓑ. 악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. 백신 +악성코드 +감염 +위성방송 송출센터의 관리PC가 +메일을 통해 와이퍼(wiper) +악성코드에 감염되어 +콘텐츠관리서버에 전파 및 · +콘텐츠 파일 삭제 +ⓐ. ‌첨부파일에 숨겨진 +악성코드 탐지 및 메일차단 +ⓑ. 악성코드 탐지 및 차단 +ⓒ. ‌위성방송 송출센터의 +임직원 업무망과 +콘텐츠관리 시스템운영망 +분리 +ⓓ. ‌위성방송 송출센터의 내부 +임직원 업무망에서 +콘텐츠관리 시스템운영망 +접근에 대한 IP/Port 기반 +접근제어 +ⓐ. 메일 보안 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓒ. 네트워크 분리 +ⓓ. ‌네트워크 +접근통제 +ⓐ. 메일 보안 +ⓑ. 백신 +ⓒ. 방화벽 +ⓓ. 방화벽 +알려진 +보안취약점 +위성방송송출센터 유지보수 +엔지니어로 위장 출입하여, +안테나 제어시스템 디폴트 +계정으로 접속하여, 설정값 변경 +ⓐ. ‌비인가자의 주요시설 출입 +관리 +ⓑ. ‌제어시스템 디폴트 계정/ +비밀번호 변경, 2차인증 +ⓐ. 출입통제 +ⓑ. 계정관리 +ⓐ. ‌출입통제 +시스템 +ⓑ. ‌계정관리 및 +접근통제 + +--- + +114 | 우주 보안모델 +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 위성 데이터 훼손 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. +| 그림 37 | 위성방송 서비스 위성 데이터 훼손 보안아키텍처 +2) 위성 서비스 장애 +위성 서비스 장애에 대한 위성방송 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +위성 서비스 장애 보안위협 유형을 3장 위성방송 서비스 보안위협을 참고하여 도출 및 정리한다. +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된 위성 서비스 장애의 보안위협에 대응하는 보안요구사항을 4장에서 +제시한 보안요구사항과 매핑한다. 위성 서비스 장애 보안위협에 대응하는 보안요구사항을 정리하면 다음 +표와 같다. + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 115 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +표 42 위성항법서비스 위성 서비스 장애 대응 보안요구사항 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +재밍 +(Jamming) +(장애) +방송위성과 통신하는 +위성방송송출센터 주변에서 +방해전파 송출 +ⓐ. 안티 재밍 +ⓐ. ‌주파수 호핑, +스프레드 +스펙트럼, +저감도 탐지 +ⓐ. - +내부자 위협 +위성방송송출센터의 안테나 +제어시스템 운영자의 안테나 조작 +실수로 위성방송 서비스 장애 +ⓐ. ‌직무 교육 및 훈련 +ⓐ. 직무 교육 +ⓐ. - +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 스캔 +공격 이상징후 탐지 및 +차단 +ⓑ. DDoS 공격 탐지 및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 +시스템 +ⓑ. ‌DDoS 대응 +시스템 +ⓒ. - +ⓓ. ‌방화벽 +물리적 손상 +안테나 설치 장소에 불법적으로 +출입하여 안테나 설비 파손 +ⓐ. ‌비인가자의 현장설비 +접근차단 시설 설치 +ⓑ. ‌물리적인 비인가자의 접근 +모니터링 +ⓐ. ‌물리적 +접근통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. ‌출입통제 +시스템 +ⓑ. CCTV +물리적 손상 +비인가자가 위성방송송출센터 +통신실에 승인 없이 출입하여, +위성모뎀 네트워크 케이블 훼손 +ⓐ. ‌비인가자의 통신실 출입 +관리 +ⓑ. ‌비인가자의 통신실 접근 +모니터링 +ⓐ. ‌출입통제 +ⓑ. ‌CCTV +모니터링 +ⓐ. ‌출입통제 +시스템 +ⓑ. ‌CCTV + +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 위성 서비스 장애 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. + +--- + +116 | 우주 보안모델 +| 그림 38 | 위성방송 서비스 위성 서비스 장애 보안아키텍처 +3) 우주통신 정보 유출 +우주통신 정보 유출에 대한 위성방송 서비스 보안아키텍처 활용방안은 다음과 같다. +Step 1 +보안위협 도출 +우주통신 정보 유출 보안위협 유형을 3장 위성방송 서비스 보안위협을 참고하여 도출 및 정리한다. +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된, 우주통신 정보 유출의 보안위협에 대응하는 보안요구사항을 4 +장에서 제시한 보안요구사항과 매핑한다. 우주통신 정보 유출 보안위협에 대응하는 보안요구사항을 +정리하면 다음 표와 같다. +표 43 위성항법서비스 우주통신 정보 유출 대응 보안요구사항 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +폐기 장비 +활용 +폐기된 방송위성의 제어 정보를 +입수하여, 방송위성에 저장되어 +있는 주요정보를 불법 획득 +ⓐ. ‌폐기대상 방송위성의 활동 +정지, 회수 및 폐기 +ⓐ. ‌폐기관리 +ⓐ. ‌- + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 117 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +보안요구사항 +보안기술 +보안솔루션 +세션 +하이재킹 +지상설비의 위치 및 위성 신호 +정보를 획득하여 위성에서 +지상국으로 전송하는 데이터 +도청 +ⓐ. ‌위성방송 송출센터와 지상국 +구간의 가상사설망 구성 +ⓑ. ‌위성방송 송출센터와 지상국 +구간의 양자내성암호 통신 +ⓐ. ‌통신구간 터널링 +ⓑ. ‌네트워크 구간 +양자내성 암호화 +ⓐ. ‌VPN +ⓑ. ‌양자내성 암호 +시스템 +데이터 +유출 +지상국에 노트북을 불법 반입 +후, 네트워크를 통해 +관리서버의 중요 데이터 유출 +ⓐ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 +인가된 장치만이 접속할 수 +있도록 접근제어 +ⓑ. ‌업무시스템의 중요정보 · +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +내부자 +위협 +위성방송송출센터의 관리서버 +운영자가 악의적으로 방송위성 +운영에 대한 주요정보 유출 +ⓐ. ‌정보유출 방지를 위한 +관리자 및 운영자 행위에 +대한 주기적인 보안 감사 +ⓐ. 보안 감사 +ⓐ. ‌- +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 우주통신 정보 유출 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. +| 그림 39 | 위성방송 서비스 우주통신 정보 유출 보안아키텍처 + +--- + +118 | 우주 보안모델 +2 +가상 사례기반 활용방안 +가칭 ABC 가정집으로 명칭을 부여하고, 가정집에서 저궤도 위성 기반 인터넷 서비스 사용 환경을 +임의적으로 제시하여 보안아키텍처 적용 방안을 제시한다. 가상 ABC 가정집의 저궤도기반 위성 인터넷 +서비스 사용 환경은 다음과 같다. +1) ABC 가정집 저궤도기반 위성 인터넷 서비스 사용 현황 +ABC 가정집은 외딴 섬에서 살면서, 인터넷을 사용할 수 있는 환경이 구축되어 있지 않아, 저궤도기반 +위성 인터넷 서비스를 신청하여 사용하고 있다. 저궤도기반 위성 인터넷 서비스를 사용하기 위하여 ABC +가정집에는 안테나, Wi-Fi라우터, 개인용 PC를 설치하였다. + +## 2장의 우주 아키텍처에서 ABC 가정집과 관련된 구성요소를 발췌하여 정리하면 군집위성의 안테나, + +통신시스템과 ABC 가정집의 안테나, Wi-Fi라우터, 개인용 PC 및 지상국의 안테나, 위성모뎀, 안테나 +제어시스템, 관리서버, 라우터 등으로 구성된다. 구성요소에 대한 설명은 아래 표와 같다. +표 44 ABC 가정집 저궤도위성 기반 인터넷 서비스 구성요소 +영역 +구성요소 +설 명 +군집위성 +안테나 +• ‌군집위성이 지상과 신호를 송·수신하는 장비 +• ‌주요기능 +- 수신안테나 : 지상으로부터 신호를 수신하여 위성의 통신시스템으로 전송 +- 송신안테나 : 통신시스템으로부터 수신한 신호를 지상으로 전송 +통신시스템 +• ‌수신안테나로부터 수신한 데이터를 송신안테나로 전송하는 시스템 +• ‌주요기능 +- 수신안테나로부터 신호를 입력받아 오류검출 및 정정 작업 등을 수행 +- 전파의 채널조절 및 출력 증폭 후 송신안테나로 전송 +위성간 +통신 +• ‌레이저 통신으로 위성 간 정보 전송 +• ‌주요기능 +- ‌서비스를 위해 지상국과 통신 필요 시, 위성이 지나가는 위치에 지상국이 존재하지 +않으면 다음 위성으로 정보 전송 +- 지상국 상공을 지나가는 위성이 다른 위성으로부터 전송받은 정보를 지상국으로 전송 +가정집 +안테나 +• ‌평판안테나를 주로 사용하며, 가정집에서 군집위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 전자식 빔 조향기술로 저궤도 위성을 추적, 위성을 스스로 탐색 +- 내부 반도체 칩으로 신호를 추적하여 전파 방향 조정 +- 군집 위성과 Wi-Fi 라우터 사이에서 데이터 송·수신 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 119 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +영역 +구성요소 +설 명 +가정집 +Wi-Fi 라우터 +• ‌안테나와 개인용PC를 연결하고 데이터를 전송하는 통신 시스템 +• ‌주요기능 +- Wi-Fi 무선 및 유선 인터넷 서비스 지원 +- 가정집 네트워크를 외부 네트워크와 연계 +- 안테나 및 가정집 네트워크 사이에서 데이터 송·수신 +개인용 PC +• ‌집에서 개인이 사용하는 PC +• ‌주요기능 +- 저궤도 군집위성과 연계하여 인터넷 사용 +지상국 +안테나 +• ‌지상국에서 군집위성과 신호를 송·수신하는 장비 +• ‌주요기능 +- 군집위성으로부터 신호를 수신하여 위성모뎀으로 전송 +- 위성모뎀으로부터 수신한 신호를 군집위성으로 전송 +위성모뎀 +• ‌안테나와 지상국 네트워크 통신장비 사이에서 데이터를 전송하는 시스템 +• ‌주요기능 +- ‌지상국 안테나로부터 데이터를 수신하고, 수신한 데이터를 지상국 내부 네트워크로 전송 +- 지상국의 내부 네트워크로부터 군집위성으로 송신하는 데이터를 지상국 안테나로 전송 +안테나 +제어시스템 +• ‌위성과의 신호 전송을 원활하게 하기 위하여 지상국에 설치되어 있는 안테나를 제어하는 +시스템 +• ‌주요기능 +- 안테나의 방향 조절 +- 안테나의 각도 조절 +관리서버 +• ‌지상국 네트워크를 구성하고 관리하는 네트워크 관리시스템 +• ‌주요기능 +- 네트워크 단말관리 DB 운영, GUI 기능 제공 +- ‌네트워크 구성 : 단말 및 지상국 구성, 주파수 할당, 위성정보, 사용자 프로토콜 구성, +위성 프로토콜 구성 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 +라우터 +• ‌네트워크와 네트워크 간의 트래픽을 전송하는 통신시스템 +• ‌주요기능 +- 경로설정 : 다른 네트워크로 빠른 데이터 전송을 위한 경로 설정 +- 데이터 전송 : 설정한 네트워크 경로의 다음 장비로 데이터를 전송 +- 위성모뎀으로부터 수신한 데이터를 지상의 외부 네트워크로 전송 +- 지상의 외부 네트워크로부터 수신한 데이터를 위성모뎀으로 전송 + +--- + +120 | 우주 보안모델 +2) ABC 가정집 보안아키텍처 활용 절차 +가상 환경으로 제시된 ABC 가정집을 대상으로 보안아키텍처 활용방안을 제시한다. 보안아키텍처 활용 +절차는 다음 그림과 같다. +| 그림 40 | ABC 가정집 보안아키텍처 활용 절차 +Step 1 보안위협 도출 +• ‌보안위협 목록(3장)을 +참고하여 ABC가정집 +보안위협을 발췌 및 정리 +• ‌보안위협에 대응하는 +보안요구사항(4장)을 · +참고하여 매핑 +Step 2 보안요구사항 매핑 +• ‌보안요구사항의 보안기술〮 +솔루션을 보안아키텍처를 +참고하여 적용 +Step 3 보안아키텍처 적용 +Step 1 +보안위협 도출 + +ABC 가정집에서 저궤도위성 기반 인터넷 서비스를 사용하면서 발생 가능한 보안위협을 본 문서 3장 +저궤도위성 기반 인터넷 서비스 보안위협을 참고하여 도출한다. ABC 가정집 대상으로 도출된 보안위협은 +아래 표와 같다. +표 45 ABC 가정집 저궤도위성 기반 인터넷 서비스 보안위협 +보안위협 +공격벡터 +대상 +주요 내용 +공급망 +보안위협 +위성 +군집위성 +비인가 기기를 공급받아 군집위성군에 탑재하고 발사 후, 특정 조건 성립으로 +로직 폭탄이 폭발하여 궤도 이탈 +데이터 유출 +지상국 +지상국 +관리서버 +지상국에 노트북을 불법 반입 후, 네트워크를 통해 관리서버의 중요 데이터를 +유출 +비인가 저장 +매체 사용 +지상국 +관리서버 +지상국 관리서버에서 와이퍼(wiper) 악성코드가 담긴 비인가 USB 사용으로 +악성코드에 감염되어, 시스템 파일 삭제 +관리자 계정 +도용 +위성서비스 +운영자 및 +사용자 +군집위성 +라우팅 테이블 +위성 운영자가 관리자 공유계정을 도용하여, 저궤도 군집위성의 라우팅 +테이블을 변경하고, 수동 업데이트 조작 +악성코드 감염 +가정집 개인용 +PC +메일에 의해 스파이웨어에 감염된 개인PC에서, 주요 정보를 위성 통신망을 +통해 외부로 유출 +공급망 +보안위협 +위성서비스 +장비 및 +시설 +가정집 Wi-Fi +라우터 +스파이웨어 악성코드가 삽입된 Wi-Fi 라우터가 공급되고 가정집에 설치되어, +위성 통신 시 주요 개인정보 유출 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 121 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안위협 +공격벡터 +대상 +주요 내용 +알려진 +보안취약점 +위성서비스 +장비 및 +시설 +지상국 +관리서버 +인터넷에서 관리서버 취약점을 활용하여 불법접속 후, 관리서버 네트워크 +정보를 변경하여 위성 통신 중단 +서비스 거부 +공격 +지상국 +라우터 +포트 스캔 등을 통해 취약 정보를 수집하고, 지상국 대상으로 DDoS공격을 +진행하여, 지상국의 위성 서비스 장애 +물리적 손상 +기업/ 지상국 +안테나 +외부에 설치된 기업/지상국 안테나에 불법 접근하여 안테나를 훼손하여 +위성통신 중단 +Step 2 +보안요구사항 매핑 +Step 1 보안위협 도출에서 정리된, ABC 가정집의 보안위협에 대응하는 보안요구사항을 4장에서 +제시한 보안 요구사항과 매핑하면 다음 표와 같다. +표 45 ABC 가정집 저궤도위성 기반 인터넷 서비스 보안요구사항, 보안기술, 보안솔루션 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +공급망 +보안위협 +비인가 기기를 공급받아 +군집위성군에 탑재하고 발사 후, +특정 조건 성립으로 로직 폭탄이 +폭발하여 궤도 이탈 +ⓐ. ‌H/W, S/W 제품 도입시 +보안성 검토 및 인수 +테스트 +ⓑ. ‌SW 자재명세서 관리 +ⓐ. ‌보안성 승인 +테스트(오픈 +소스 점검 등), +인수 테스트 +ⓑ. ‌SW 공급망 +관리 +ⓐ. ‌오픈소스 분석 +시스템 +ⓑ. SBoM 솔루션 +데이터 유출 +지상국에 노트북을 불법 반입 후, +네트워크를 통해 관리서버의 중요 +데이터를 유출 +ⓐ. ‌지상국 내부 네트워크에 +접속하는 장치에 대해 +인가된 장치만이 접속할 수 +있도록 접근제어 +ⓑ. ‌업무시스템의 중요정보 +유출 방지 +ⓐ. ‌네트워크 접속 +장치 접근통제 +ⓑ. ‌중요정보 유출 +방지 +ⓐ. ‌네트워크 +접근통제 +시스템 (NAC) +ⓑ. ‌정보유출 +방지시스템 +(DLP) +비인가 저장 +매체 사용 +지상국 관리서버에서 와이퍼 +(wiper) 악성코드가 담긴 비인가 +USB 사용으로 악성코드에 +감염되어, 시스템 파일 삭제 +ⓐ. ‌지상국의 비인가 이동식 +저장매체 사용 제한 및 +매체제어 +ⓑ. ‌악성코드 탐지 및 차단 +ⓐ. ‌저장매체 사용 +통제 +ⓑ. ‌악성코드 탐지 +및 차단 +ⓐ. ‌정보유출 방지 +(DLP) 시스템 +ⓑ. 백신 + +--- + +122 | 우주 보안모델 +보안위협 +보안요구사항 +보안기술 +보안솔루션 +관리자 계정 +도용 +위성 운영자가 관리자 공유계정을 +도용하여, 저궤도 군집위성의 +라우팅 테이블을 변경하고, 수동 +업데이트 조작 +ⓐ. ‌지상국의 위성 제어시스템 +사용자 1인1계정 부여 +ⓑ. ‌지상국의 위성 +제어시스템의 관리자와 +라우팅 테이블 관리자 분리 +ⓐ. 계정관리 +ⓑ. 권한 통제 +ⓐ. ‌계정관리 및 +접근통제 +ⓑ. ‌계정관리 및 +접근통제 +악성코드 +감염 +메일에 의해 스파이웨어에 감염된 +개인PC에서, 주요 정보를 위성 +통신망을 통해 외부로 유출 +ⓐ. ‌악성코드 탐지 및 차단 +ⓐ. ‌악성코드 탐지 +및 차단 +ⓐ. 백신 +공급망 +보안위협 +스파이웨어 악성코드가 삽입된 +Wi-Fi 라우터가 공급되고 +가정집에 설치되어, 위성 통신 시 +주요 개인정보 유출 +ⓐ. ‌H/W, S/W 제품 도입시 +보안성 검토 및 인수 +테스트 +ⓑ. ‌SW 자재명세서 관리 +ⓐ. ‌보안성 승인 +테스트(오픈 +소스 점검 등), +인수 테스트 +ⓑ. ‌SW 공급망 +관리 +ⓐ. ‌오픈소스 분석 +시스템 +ⓑ. SBoM 솔루션 +알려진 +보안취약점 +인터넷에서 관리서버 취약점을 +활용하여 불법접속 후, 관리서버 +네트워크 정보를 변경하여 위성 +통신 중단 +ⓐ. ‌네트워크 트래픽 내의 웹 +취약점 정보 활용 이상징후 +탐지 및 차단 +ⓑ. ‌서비스 운영자와 시스템 +운영자의 계정 및 권한 +분리, 2차인증 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. 권한 통제 +ⓐ. ‌침입방지 · +시스템 +ⓑ. ‌계정관리 및 +접근통제 +서비스 거부 +공격 +포트 스캔 등을 통해 취약 정보를 +수집하고, 지상국 대상으로 +DDoS공격을 진행하여, 지상국의 +위성 서비스 장애 +ⓐ. ‌네트워크 대상의 포트 스캔 +공격 이상징후 탐지 및 +차단 +ⓑ. ‌DDoS 공격 탐지 · +및 차단 +ⓒ. ‌네트워크 서비스 회선 +이중화 +ⓓ. ‌외부 인터넷에서 지상국의 +내부 네트워크 접근에 대한 +IP/Port 기반 접근통제 +ⓐ. ‌이상징후 탐지 +및 차단 +ⓑ. ‌DDoS 공격 +탐지 +ⓒ. ‌네트워크 +가용성 확보 +ⓓ. ‌네트워크 +접근통제 +ⓐ. ‌침입방지 · +시스템 +ⓑ. ‌DDoS 대응 +시스템 +ⓒ. - +ⓓ. 방화벽 +물리적 손상 +외부에 설치된 기업 또는 지상국 +안테나에 불법 접근하여 안테나를 +훼손하여 위성통신 중단 +ⓐ. ‌(기업) 비인가자의 +현장설비 접근차단 시설 +설치 +ⓑ. ‌(가정) 외부인 접근이 +어려운 지역에 안테나 설치 +ⓒ. ‌물리적으로 비인가자의 +접근 모니터링 +ⓓ. ‌비인가자의 출입 관리 +ⓐ. ‌(기업) 물리적 +접근통제 +ⓑ. ‌(가정) 물리적 +접근통제 +ⓒ. ‌CCTV +모니터링 +ⓓ. 출입통제 +ⓐ. - +ⓑ. - +ⓒ. CCTV +ⓓ. ‌출입통제· +시스템 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 123 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +Step 3 +보안아키텍처 적용 +보안요구사항 매핑을 통해 ABC 가정집의 보안위협에 대응하기 위한 보안기술과 보안솔루션을 +보안아키텍처에 적용하면 다음 그림과 같다. +| 그림 41 | ABC 가정집 저궤도위성 기반 인터넷 서비스 보안아키텍처 + +--- + +우주 + +--- + + +## 제6장 + +부록 + +### 부록 1. 우주 보안 수칙 + + +### 부록 2. 우주보안 사고 사례 + + +### 부록 3. 용어 및 약어 + + +--- + +126 | 우주 보안모델 +부 록 1 | 보안모델 기반의 우주 보안 수칙 +우주 보안모델에서 제시한 보안요구사항을 바탕으로 위성활용 서비스 영역의 보안담당자가 보안 수준을 +높이기 위해 실천할 수 있는 기본적인 보안 수칙을 다음과 같이 제시합니다. +보안 수칙 1. +위성활용 서비스 보안정책 관리 +‌위성활용 서비스 개발 및 운영시 보안정책을 수립하고 업무에 적용 +• ‌위성활용 서비스에 송수신되는 중요 데이터의 암호화 및 암호키 관리 정책 +• ‌위성활용 서비스에 대한 인증 및 접근통제 정책 +• ‌위성활용 서비스 HW 및 SW 개발·도입시 보안성 검증 정책 +• ‌외부 협력업체와의 계약, 업무 수행시 협력업체가 준수해야 하는 보안 정책 +보안 수칙 2. +위성활용 서비스 네트워크 분리 및 접근제어 +‌위성활용 서비스 비인가 접근을 방지하기 위해, 네트워크를 분리하고 분리된 네트워크 간 접근 통제 +• ‌네트워크 분리 +- 방화벽을 통해 위성통신망, 제어망, 업무망, 인터넷망을 분리 +• ‌네트워크 접근제어 +- 외부 인터넷에서 내부시스템 접근시 최소한의 IP/Port 접근 허용 +- 내부 업무망에는 인가된 장치만이 접속할 수 있도록 통제 +보안 수칙 3. +위성활용 서비스 데이터 보호 +‌위성활용 서비스 시스템 중요 정보 암호화 및 매체 제어 +• ‌위성활용 서비스 시스템의 중요 정보는 저장 시 암호화 수행 +• ‌위성 통신구간에서의 데이터 송수신시 암호화하여 전송 +• ‌비인가 이동식 저장매체 사용 제한 및 매체 제어 +• ‌상용 메일 사용 금지, 메일/메신저를 통한 중요정보 전송 제한 + +--- + + +## 제6장 부록 | 127 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +보안 수칙 4. +위성활용 서비스 관리자 계정/패스워드 관리 강화 +‌위성활용 서비스의 비인가 접속을 방지하기 위해 강화된 사용자 계정 및 패스워드 기준 적용 +• ‌사용자 계정 사용 기준 +- 1인 1계정 부여 +- 시스템 설치 시, 기본적으로 생성되어 있는 디폴트 계정 사용 금지 +• ‌패스워드 사용 기준 +- 최소 8자 이상, 영어 대문자, 소문자, 숫자, 특수문자 중 2종류 이상 조합 +- ID와 동일한 패스워드 사용 금지 +- 패스워드 없이 자동 로그인 금지 +보안 수칙 5. +주기적 보안점검 및 조치 +‌위성활용 서비스 대상으로 주기적으로 보안점검의 실시 및 발견된 취약점 조치 수행 +• ‌수립된 위성활용 서비스 보안 정책의 준수 여부 점검 +• ‌외부의 최신 침해위협 대응 및 보안성 확보를 위한 취약점 점검 +• ‌위성활용 서비스 이상 징후 파악을 위한 로그의 주기적 검토 +보안 수칙 6. +위성활용 서비스 중요 시설 물리적 접근통제 +‌위성 안테나 및 통신장비 관리시설에 대한 비인가자 물리적 접근 차단 +• ‌위성 안테나 등 위성 설비를 보호하기 위해 CCTV 설치 및 모니터링 +• ‌위성활용 서비스 중요 시설에 대한 비인가 출입통제 +• ‌비인가자 접근이 쉬운 장소에 노출된 통신장비는 보호 랙(Rack) 활용 또는 접근이 어려운 +위치로 이동 +보안 수칙 7. +위성활용 서비스 개발 보안 적용 +‌위성활용 서비스 기획/설계, 개발, 운영 단계별 보안을 내재화하고 적용 +• ‌위성활용 서비스 기획/설계시 보안 요구사항 정의 +• ‌위성활용 서비스 개발시 시큐어코딩(Secure Coding) 적용 +• ‌위성활용 서비스 운영 전 오픈소스 점검, SW 자재명세서 관리 등 보안성 검토 수행 + +--- + +128 | 우주 보안모델 +부 록 2 | 우주보안 사고 사례 +최근 우주산업에 민간기업의 참여 증대로 운용되는 위성 수가 급속도로 증가한 반면 보안이 취약한 위성 +이 많아 우주 관련 보안사고가 증가하는 추세이다. 다양한 우주 보안 사고 사례 중에서 사회적, 경제적으로 +파급력을 불러일으킨 대표적인 우주 보안사고사례를 아래와 같이 소개하고자 한다. +사고 사례 +사고 내용 +피해 규모 +발생일시 +윈드스트림 +(Windstream) +ISP 서비스 사용자 +인터넷 모뎀 공격 +• ‌윈드스트림(Windstream) ISP 서비스 사용자의 · +인터넷 모뎀을 대상으로 악성 펌웨어 업데이트 · +파일을 배포, 인터넷 모뎀 영구 손상 +Windstream 인터넷 · +서비스 사용자 인터넷 모뎀의 · +약 49% 파괴 (60만대 이상) +’23년 10월 +비아셋(Viasat) +KA-SAT 위성망 +사이버 공격 +• ‌VPN 취약점을 이용하여 비아셋내부망으로 · +침입후 모뎀 S/W 업데이트 서버에 접속하여 · +와이퍼 맬웨어 AcidRain 배포 +KA-SAT 위성과 통신하는 +수 천대의 모뎀 장애로 위성 +인터넷 마비 +’22년 2월 +툴라(Turla) +해킹 그룹 위성 트래픽 +하이재킹 +• ‌수백대의 컴퓨터에 멀웨어를 감염시킨 후 · +위성 트래픽 하이재킹 +• ‌사용자의 활성IP 식별 후 C&C서버로 위장하기 · +위한 사용자 활성IP를 선택하여 선택한 IP로 · +중요데이터를 유출하도록 명령 +45개국 이상 정부기관, · +대사관, 군대 등 수백 대 · +컴퓨터의 중요 데이터 탈취 +’15년 9월 +사고사례 1. +윈드스트림(Windstream) ISP서비스 사용자 인터넷 모뎀 공격(’23년 10월) +• 보안 위협 : 윈드스트림(Windstream) ISP 서비스 사용자 인터넷 모뎀 파괴 +• 피해 규모 : ‌윈드스트림(Windstream) ISP 서비스 사용자의 인터넷 모뎀 49% 파괴(60만대 이상), · +인터넷 서비스 중단 +• 공격 기법 : ‌특정 인터넷 모뎀 모델(ActionTec T3200s, ActionTec T3260s 및 Sagemcom F5380)을 · +타겟으로 악성 펌웨어 업데이트 파일을 배포, 인터넷 모뎀 영구 손상 유발 +• 원인 및 보안 문제점 : 취약한 인증, ISP 관리 인터페이스 노출 +Windstream ISP 악성 +펌웨어 업데이트 파일 배포 +공격자가 Windstream사 ISP서비스 +사용자에게 악성 펌웨어 업데이트 +파일 배포 +STEP 1 +60만대 이상의 인터넷 모뎀 파괴 +업데이트된 사용자 인터넷 모뎀의 +49%(60만대 이상) 파괴 +STEP 2 +일부 지역 인터넷 서비스 중단 +미국 중서부 여러 주에서 +위성 인터넷 서비스 중단 +STEP 3 + +--- + + +## 제6장 부록 | 129 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +사고사례 2. +비아셋(Viasat) KA-SAT 위성망 사이버 공격(’22년 10월) +• 보안 위협 : 비아셋(Viasat) KA-SAT 사이버 공격으로 위성 인터넷서비스 마비 +• 피해 규모 : ‌KA-SAT 위성과 통신하는 수 천대의 모뎀 장애로 위성 인터넷 마비, KA-SAT 위성으로 · +통신하는 독일 5,800개 풍력 터빈 원격 제어 및 모니터링 불능 +• 공격 기법 : ‌VPN 취약점을 이용하여 비아셋 내부망으로 침입. 모뎀 S/W 업데이트 서버에 접속하여· +와이퍼 맬웨어 AcidRain 배포 +• 원인 및 보안 문제점 : VPN 취약점 조치 미흡, 악성코드 탐지 미흡 +VPN 취약점을 이용하여 +내부망 침입 +VPN 취약점을 이용하여 +비아셋 내부망으로 침입 +STEP 1 +위성모뎀 업데이트 서버에 접속 +및 멀웨어 배포 +위성모뎀 SW 업데이트 서버에 접속하여 +와이퍼 멀웨어 AcidRain 배포 +STEP 2 +위성 인터넷 중단 +KA-SAT 위성과 통신하는 수천대의 모뎀 마비 +→ ‌KA-SAT 위성통신하는 5,800개 +풍력터빈 원격 제어 및 모니터링 불능 +STEP 3 +VPN +사고사례 3. +툴라(Turla) 해킹 그룹 위성 네트워크 하이재킹(’15년 9월) +• 보안 위협 : 위성 네트워크 하이재킹 +• 피해 규모 : ‌45개국 이상의 정부 기관과 대사관, 군대, 교육, 연구 및 제약 회사 등 수백 대의 컴퓨터 감염, +위성 통신을 이용하는 PC의 중요 데이터 탈취 +• 공격 기법 : ‌Epic 백도어를 이용, PC 감염 후 위성 전송데이터가 암호화되지 않는 점을 악용하여 트래픽 +하이재킹 +※ Epic 백도어 : Turla 해킹 그룹에서 사용하는 다단계 공격(Adobe PDF를 악용한 스피어피싱 이메일, Internet Explorer 워터링 홀 공격 등) +• 원인 및 보안 문제점 : 위성 전송 데이터 암호화 미흡 +주요기관 컴퓨터에 멀웨어 감염 +45개국 이상의 정부 기관과 대사관, 군대, · +교육, 연구 및 제약 회사 등 수백 대의 · +컴퓨터 멀웨어 감염(Epic 백도어 이용) +STEP 1 +위성 트래픽 하이재킹 및 +활성 IP 식별 +위성 트래픽을 하이재킹하여 사용자의 · +활성 IP식별, C&C서버로 위장하기 +위한 IP 선택 +STEP 2 +위장된 C&C 서버 IP로 +데이터 탈취 +선택한 IP로 데이터를 유출하도록 명령 +→ ‌위성 통신을 이용하는 PC의 중요 +데이터 탈취 +STEP 3 +이메일 +Internet +Explorer +주요기관 PC +주요기관 PC +C&C 서버 + +--- + +130 | 우주 보안모델 +부 록 3 | 용어 및 약어 +■ 용어 +• ‌공격 벡터 (attack vector) : 공격자가 컴퓨터나 네트워크에 침입하기 위해 사용하는 진입 경로와 방법 +• ‌도심항공모빌리티 (UAM) : 저고도 공중에서 비행하여 사람 또는 화물을 운송하는 도시의 단거리 항공 운송 +교통수단 +• ‌버티포트 : ‘수직 (vertical)’과 ‘공항 (airport)’의 합성어로, 수직이착륙 항공기의 이착륙, 충전, 정비 및 승객 +탑승이 이루어지는 터미널 +• ‌보안아키텍처 : 시스템의 사용자 요구, 서비스 구현에 필요한 시스템 요소 및 위협 환경을 다루는 요소에 필요한 +성능 수준을 충족시키기 위해 시스템이 제공해야 하는 보안 서비스를 설명하는 계획과 일련의 원칙 +• ‌사이버보안 프레임워크(CSF) : 사이버보안 관련 위험을 관리하기 위한 표준, 지침, 모범 사례로 구성된 프레임워크 +• ‌서비스 거부 : 시스템 리소스에 대한 허가된 액세스의 방지 또는 중단 또는 시스템 동작 및 기능의 지연 +• ‌세션 하이재킹 : 다른 사람의 세션 상태를 훔치거나 도용하여 액세스하는 해킹 기법 +• ‌스니핑 : 메시지 내용의 캡처 및 공개 또는 메시지 수신지 또는 발신지, 전송 빈도 또는 길이 및 기타 통신 속성에 +기반한 통신 시스템의 기밀성을 손상시키는 트래픽 분석 +• ‌스마트선박 : 정보통신기술(ICT)을 기반으로 하는 선박으로, 조선 기술에 최첨단 정보 기술을 접목하여 자율 +운항은 물론 안전 운항을 할 수 있는 차세대 디지털 선박 +• ‌ 스푸핑 : 공격자가 네트워크, 웹사이트 등의 데이터 위변조를 통해 정상 시스템인 것처럼 위장하여 일반 +사용자를 속이는 해킹 기법 +• ‌악성코드 : 시스템 또는 사용자에 대한 정보 수집, 시스템 데이터 파괴, 시스템 침입을 위한 발판 마련, 시스템 +데이터 및 보고서 위조, 시스템 운영 및 유지 보수 담당자에게 시간을 낭비하는 목적으로 작성된 프로그램 또는 +코드 +• ‌위성 항법 시스템 : 3~4개 이상의 위성으로부터 전송되는 위성 데이터와 전파를 지상과 양방향 통신으로 +송신하여 지구상의 사용자에게 위치정보를 제공하는 시스템 +• ‌위협 : 보안을 위반하여 해를 입힐 수 있는 상황, 능력, 행동 또는 이벤트가 있을 때 존재하는 보안 위반 가능성 + +--- + + +## 제6장 부록 | 131 + +개요 + +## 제1장 + +우주 보안위협 +우주 보안아키텍처 활용방안 +우주 아키텍처 +우주 보안아키텍처 + +## 제2장 + + +## 제3장 + + +## 제4장 + + +## 제5장 + +부록 + +## 제6장 + +• ‌자율주행차 : 운전자가 차량을 조작하지 않아도 스스로 주행하는 자동차 +• ‌ 재밍 : 레이더 신호를 감추기 위해 또는 변형시키기 위해 레이더의 수신 대역 내의 주파수로 송신되는 방해 신호 +• ‌저궤도 군집위성 : 소형위성들이 일정한 간격으로 지구 저궤도를 돌며 동시에 같은 목적의 임무를 수행하는 +위성의 집단 +• ‌저궤도(LEO) 위성 : 지구로부터 약 250~2,000km의 높이에 위치한 위성으로 상대적으로 짧은 궤도주기를 +가지고 있는 위성 +• ‌정지궤도(GEO) 위성 : 지구로부터 약 36,000km의 높이에 위치한 위성으로, 지구의 자전과 동기화된 궤도에 +위치하고 지구와 같은 속도로 공전하는 위성 +• ‌주파수 : 전파가 1초 동안에 진동하는 횟수 +• ‌중간자 공격 : 통신하고 있는 두 당사자 사이에 끼어들어 당사자들이 교환하는 공개정보를 자기 것과 바꾸어버림· +으로써 들키지 않고 도청을 하거나 통신내용을 바꾸는 수법 +• ‌중궤도(MEO) 위성 : 정지궤도와 저궤도 중간에 위치한 위성으로, 지구로부터 약 2,000km~ 30,000km 높이 +사이에 위치한 위성 +• ‌탑재체(Payload) : 위성의 내부에 위치해 있으면서 부여된 임무를 실제적으로 수행하는 위성의 한 부분 +• ‌프로토콜 시스템들 간의 어떤 종류의 연관성(예를 들어, 통신)을 구현하고 제어하기 위한 일련의 규약들 +(즉, 포맷들 및 절차들) +• ‌CISA : 미국의 사이버 보안 및 인프라 보안국 +• ‌NAC : 네트워크 상태를 더욱 명확하게 파악하고 위험을 줄이기 위해 네트워크에 액세스하는 디바이스에 정책을 +적용하는 보안 솔루션 +• ‌ PNT : 위치(Positioning), 항법(Navigation), 시각(Timing) + +--- + +- +0 +:ACs +Attitude +Control +System +BGAN +Broadband +Global +Area +Network +CAN +Controller +Area +Network +CcsDs +: Consultative +Committee +For +Space +Data Systems +CDHS +Command +and +Data +Handling +Subsystem +CISA +: Cybresecurity +[] +Infrastructure +Securty +Agency +`CSF +Cyber +Security +Framework +CSP +Cubesat +Space +protocol +DTN +Delay! +/Disruption +Tolerant +Network +DVB-S: Digital +Video +Broadcasting +Satellite +EPS +Emergency +Power +Supply +GEO +Geostationary +Earth +Orbit +GMDSS +Global +Maritime +Distress and +Safety +System +GNSS +Global +Navigatior +Satellite +System +GPS +: Global +Positioning +System +:ISP +Internet +Service +Provider +ITU +International +Telecommunication +Union +:LEO +Low +Earth +Orbit +MEO +Middle +Earth +Orbit +NAC: +CNetwork +Access +Contro +NASA +National +Aeronautics +Space +Administration +ISIN +National +Institute of +Standards +and +Technology +:NOAA +National +Oceanic +and +Atmospheric +Administration +Ocs +Orbit +Contro +System +PDHS +Payload +Data +Handling +System +:PNT +Positioning +Navigatior +and +Timing +'SDR +Software +Defined +Radio +TCP/IP +Transmission +Control +Protocol/Internet +Protoco +:Tcs +Thermal +Control +System +:VPN +Virtual +Private +Network +:VSAT +:Very +Small +Aperture +Terminal +:UAM +:Urban +Airport +Mobility +:Wi--Fi : Wireless +Fidelity +132 +우주 +퓨메거 + +--- + +우주 보안모델 +인 쇄 2024년 12월 +발 행 2024년 12월 +발행처 한국인터넷진흥원 +(58324) 전라남도 나주시 진흥길 9 + +--- + +우주 +페머교 +Part I +위성활용서비스 +과학기술정보통신부 +한국인터넷진흥원 +KISK +Ministry of Science and ICT \ No newline at end of file diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part1_\354\232\224\354\225\275\353\263\270.md" "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part1_\354\232\224\354\225\275\353\263\270.md" new file mode 100644 index 0000000..86ce6ce --- /dev/null +++ "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part1_\354\232\224\354\225\275\353\263\270.md" @@ -0,0 +1,556 @@ +# 우주 보안모델 Part1 요약본.pdf + +> Converted: 2026-04-02 01:22 +> OCR Engine: PaddleOCR (Korean + GPU) + + +--- + +우주 +페머교 +2024 +12 +과학기술정보통신부 +한국인터넷진흥원 +KISX +Ministry of Science and ICT + +--- + + +## 1. 배경 + +국가 미래 신성장 동력으로 우주산업에 대한 관심이 높아지고 있다. 최근 정부가 아닌 민간 우주기업이 +우주산업을 직접 이끌어 우주 생태계가 조성되는 뉴스페이스 시대가 현실화 됨에 따라 미래 우주시장의 +성장 가능성에 주목했기 때문이다. 이처럼 뉴스페이스 시대 우주산업이 글로벌 시장의 미래 먹거리로 +부상하면서, 세계 각국의 정부와 민간기업에서는 우주산업 시대의 유리한 고지를 선점하기 위해 치열한 +노력을 기울이고 있는 중이다. +글로벌 우주 강국 미국은 우주 내 서비스, 조립 및 생산에 대한 국가 전략을 마련하여, 글로벌 우주 +시장의 주도권을 지속 확보하고자 노력하고 있으며, 일본 역시 우주전략기금을 운영하여, 우주 관련 +스타트업 육성 노력을 기울이고 있다. 또한, 스페이스X(Space-X) 등 글로벌 우주기업 역시 저궤도 +소형위성 기반 글로벌 위성통신망을 구축하여 다양한 서비스 제공 움직임을 보이는 등 우주 서비스 주도 +경쟁 역시 심화 중이다. +국내 역시 이러한 글로벌 흐름에 발맞춰 정부차원의 민간주도 우주산업 생태계 조성을 위한 지원 강화 +계획을 마련하여, 민간 우주기업 생태계 조성을 위한 노력을 기울이고 있다. +다만, 민간 우주 서비스가 시장에 등장하고 현실화되는 만큼 이를 대상으로 하는 보안위협 사례 역시 +발생하고 있으나, 우주 서비스에서 발생 가능한 보안위협 대응에 참고할 수 있는 기초자료가 부족해 민간 +우주산업 보안 관계자의 보안 적용에 어려움을 겪고 있다. 이에, 본 문서는 민간 우주산업 보안 관계자가 +우주산업에서 발생가능한 보안위협을 식별하고, 식별된 보안위협에 대응하기 위한 보안 요구사항, +보안기술, 보안솔루션 등 보안 강화에 참고하고 활용 할 수 있도록 지원하는데 목적이 있다. 그리고 이를 +통해 국내 민간 우주 서비스의 안전한 확산을 바탕으로 글로벌 우주 강국으로 도약하는데 기여하고자 +한다. + +--- + +| 3 + +## 2. 우주 아키텍처 + +우주 아키텍처는 고도 범위에 따라 다양한 위성이 위치한 우주 영역과 위성을 제어하고 페이로드 +데이터를 송·수신하는 지상국 영역, 위성에 기반한 서비스를 제공하는 위성활용 서비스 영역으로 구성된다. +우주 영역은 우주 공간에 위치하는 자산(위성 등)으로 구성된다. 위성은 위성의 전반적인 구동을 수행 +하는 본체와 위성의 임무를 수행하는 탑재체로 분류된다. +지상국 영역은 위성을 운영 및 제어하기 위한 위성운영 영역과 페이로드에서 데이터를 수신하고 수신한 +데이터를 서비스하기 위한 페이로드 데이터 이용 영역으로 구성된다. +위성활용 서비스 영역은 위치정보를 제공해 주는 위성항법 서비스와 통신에 활용되는 위성통신 서비스 +그리고 방송을 중계해주는 위성방송통신 서비스로 분류된다. +우주 아키텍처 + +--- + +4 | 우주 보안모델 + +## 3. 위성활용 서비스 아키텍처 + +위성활용 서비스 보안모델을 수립하기 위해 위성활용 서비스별로 아키텍처를 정의하고 구성요소를 +도출한다. +1) 위성항법 서비스 +위성항법 서비스는 항법위성으로부터 위치정보를 수신하여 수신한 위치정보를 해상, 지상 및 항공교통 +에서의 차량 운행에 사용하는 서비스이다. +항법위성에서 지상으로 위치정보를 전송하고, 스마트선박, 자율주행차 및 도심항공모빌리티(UAM) +에서 위치정보 수신기를 통해 실시간으로 위치정보를 수신하여 운항에 사용한다. +위성항법 서비스 아키텍처는 항법위성, 위성정보 송·수신을 지원하는 지상국, 항법위성으로부터 +항법정보를 수신하여 필요한 정보만 추출하는 항법데이터 수신국, 항법데이터 수신국으로부터 위치정보를 +수신하여 위치 보정데이터를 생성하는 항법데이터 중앙처리국, 그리고 위치정보를 이용하는 스마트선박, +자율주행차 및 도심항공모빌리티(UAM)로 구성된다. +대표적인 구성요소로는 스마트선박의 GNSS 수신 안테나 및 위성항법시스템, 항법데이터 수신국의 +안테나, 위성모뎀, 항법데이터 수집 및 전달시스템, 라우터, 항법데이터 중앙처리국의 위치정보시스템, +라우터, 자율주행차 및 도심항공모빌리티(UAM)의 GPS 수신기, 위치정보데이터 해석기, 지도데이터 +저장장치, 네비게이션 등이 있다. + +--- + +| 5 +위성항법 서비스 아키텍처 +2) 위성통신 서비스 +위성통신 서비스는 정지궤도 및 저궤도 위성의 위성통신 서비스를 이용하여 스마트폰의 이동통신 사용, +스마트선박과 기업, 가정집 등에서 지상의 인터넷 인프라 사용 등을 지원하는 위성활용 서비스이다. +스마트폰 등의 이동통신 단말기 또는 스마트선박이나 기업, 가정집 등에서 위성으로 서비스를 +요청하면, 요청 데이터를 수신한 위성이 지상국으로 수신한 데이터를 전송하고, 지상국에서는 수신받은 +데이터를 지상의 이동통신 및 인터넷 네트워크와 연결하여 요청받은 서비스를 제공한다. +위성통신 서비스 아키텍처는 정지궤도 통신위성 및 저궤도 위성, 위성통신 서비스의 정보 송‧수신을 +지원하는 지상국, 인터넷 사용과 선박 본사와의 통신을 이용하는 스마트선박, 이동통신을 이용하는 +스마트폰, 인터넷 서비스를 이용하는 기업 및 가정집으로 구성된다. +대표적인 구성요소로는 위성의 안테나 및 통신시스템, 지상국의 안테나, 안테나 제어시스템, 관리서버, + +--- + +6 | 우주 보안모델 +라우터, 스마트선박의 선박 운항을 원격으로 관리하는 선박본사, 초소형 위성통신지구국(VSAT) 안테나, +위성모뎀 및 관리서버, 선박 운영을 위한 제어시스템 등의 스마트선박 시스템, 기업의 안테나, 라우터, +무선AP, 업무용PC, 기업업무시스템, 가정집의 안테나, Wi-Fi 라우터, 개인용 PC등이 포함된다. +위성통신 서비스 아키텍처 + +3) 위성방송 서비스 +위성방송 서비스는 방송위성의 중계서비스를 이용하여, 지상에서 방송위성으로 송출한 방송콘텐츠를 +지상의 인터넷을 이용하여 시청하는 위성활용 서비스이다. +위성방송 송출센터에서 방송위성으로 방송콘텐츠를 송신하면, 방송콘텐츠를 수신한 방송위성이 +지상국으로 방송콘텐츠를 전송하고, 지상국에서는 수신받은 방송콘텐츠를 지상의 인터넷을 통해 사용자 +에게 전송한다. +위성방송 서비스 아키텍처는 방송위성, 방송콘텐츠 송·수신을 지원하는 지상국과 위성방송송출센터, + +![이미지 6-0](images/p0006_img0.png) + + +--- + +| 7 +그리고 방송콘텐츠를 이용하는 가정집으로 구성된다. +대표적인 구성요소로는 위성방송 송출센터의 안테나, 안테나제어시스템, 관리서버, 라우터 등이 있고, +가정집의 통신사 모뎀, 셋톱박스, 개인용 PC, TV 등이 포함된다. +위성방송 서비스 아키텍처 + +--- + +8 | 우주 보안모델 + +## 4. 위성활용 서비스 보안 위협 + +1) 위성항법 서비스 보안 위협 +위성항법 서비스에서는 항법위성으로 가장하고 UAM에 조작된 위치정보를 송신하여 UAM 주행 오류 +발생, 보안취약점이 있는 부품이 탑재된 GPS 수신기의 공급으로 자율주행차의 위치정보 수신 장애 등 +다양한 보안위협이 존재할 수 있다. +위성항법 서비스 주요 보안위협 +1 +2 +3 +4 +5 + +--- + +| 9 +① 항법위성으로 가장하고 UAM에 조작된 위치정보를 송신하여 UAM 주행 오류 발생 +② 보안취약점이 있는 부품이 탑재된 GPS 수신기의 공급으로 자율주행차의 위치정보 수신 장애 +③ 위치정보를 변조하여 선박의 위성항법시스템으로 전송, 변조된 위치정보로 인해 선박의 항로 이탈 +④ 랜섬웨어에 감염된 노트북을 불법 반입 후 내부망에 접속, 네트워크를 통해 위치정보시스템 감염 +⑤ 비인가자가 항법데이터 수신국 안테나에 불법 접근하여 안테나 시설을 훼손하여 위성 통신 중단 +2) 위성통신 서비스 보안위협 +위성통신 서비스에는 스마트선박, 기업, 지상국, 가정집 등에 통신위성을 통해 비인가 접속하여 중요 +데이터 파괴하거나 유출할 수 있고, 통신위성과의 통신구간에서 중요데이터를 도청하거나 변조할 수 있는 +보안위협이 있으며, 저궤도 위성의 라우팅 테이블을 변경하고 수동으로 업데이트를 조작하는 등의 +보안위협 등이 존재할 수 있다. +위성통신 서비스 주요 보안위협 +1 +3 +2 +4 +6 +5 +① 위성운영자가 관리자 계정을 도용하여 저궤도 군집위성의 라우팅 테이블을 변경하고, 수동 업데이트 조작 +② 유지보수 비밀 채널로 선박제어시스템에 비인가 원격접속하여 운항 정보 무단 변경 +③ 선원PC가 와이퍼(wiper) 악성코드를 업무시스템에 전파하여 시스템 파일 무단 삭제 +④ 스마트폰 제작업체를 가장한 원격 불법 펌웨어 업데이트를 통해 위성통신 서비스 차단 +⑤ 기업과 위성간 송수신되는 위성 신호를 수집 및 분석하여 기업의 주요 정보 불법 획득 +⑥ 악성코드가 삽입된 Wi-Fi 라우터가 가정집에 설치되어 위성 통신시 개인정보 유출 + +![이미지 9-0](images/p0009_img0.png) + + +--- + +10 | 우주 보안모델 +3) 위성방송 서비스 주요 보안위협 +위성방송 서비스에서는 위성방송 송출센터 유지보수 엔지니어로 위장 출입하고 안테나 제어시스템 +디폴트 계정으로 접속하여 설정 값 변경, 지상국 라우터 장비의 디폴트 계정으로 불법 로그인하여 +네트워크 구성정보 무단 변경 등의 보안위협이 존재할 수 있다. +위성방송 서비스 주요 보안위협 +1 +2 +3 +4 +① 폐기된 방송위성의 정보를 입수하여 페이크(fake) 방송콘텐츠를 송출하고, 지상으로 송신하도록 방송위성 조작 +② 방송위성과 통신하는 위성방송송출센터 주변에서 방해 전파 송출 +③ 위성방송송출센터 유지보수 엔지니어로 위장 출입하여, 안테나 제어시스템 디폴트 계정으로 접속하여 설정 값 변경 +④ 지상국 라우터 장비의 디폴트 계정을 도용하여 불법 로그인 후, 네트워크 구성정보 무단 변경 + +--- + +| 11 + +## 5. 위성활용 서비스 보안요구사항 + +1) 위성항법 서비스 보안요구사항 +항법 위성으로부터 수신되는 위치정보의 변조 또는 위치정보 수신 장애시 발생할 수 있는 보안위협에 +대응하기 위한 위성항법 서비스의 주요 보안요구사항으로는 조작된 위치정보 대응 메시지 인증, +보안취약점이 있는 부품 공급에 대한 공급망 보안, 위성통신에 대한 안티 재밍 등이 있다. +위성항법 서비스 주요 보안요구사항 +1 +2 +3 +4 +5 +6 +7 + +![이미지 11-0](images/p0011_img0.png) + + +--- + +12 | 우주 보안모델 +① 조작된 위치정보 보안위협 대응 메시지 인증 ⑤ 인가된 장치만이 내부망에 접속가능하도록 접근제어 +② 안전한 H/W, S/W 제품 공급 ⑥ 데이터 도청 방지 가상사설망 적용 +③ 위성통신 재밍 공격에 대한 안티 재밍 ⑦ 안테나 및 시설에 대한 물리적 접근통제 +④ 인터넷을 통한 원격접근 및 네트워크 접근통제 +2) 위성통신 서비스 보안요구사항 +통신위성을 통해 스마트선박, 기업, 지상국, 가정집 등에 비인가 접속하거나 통신위성과의 +통신구간에서 데이터를 가로채어 중요 정보를 변조 및 유출할 수 있는 보안위협에 대응하기 위한 위성통신 +서비스의 주요 보안요구사항은 위성통신 서비스 구간의 암호화 통신, 위성 및 선박 운영시스템의 원격 +접근통제 및 계정관리, 선박 내부 네트워크 망분리 등이 있다. +위성통신 서비스 주요 보안요구사항 +1 +1 +2 +6 +3 +4 +5 +8 +7 +5 +① 위성통신 서비스 구간의 암호화 통신 ⑤ 악성코드 탐지 및 차단 +② 위성 및 선박 운영시스템의 원격 접근통제, 계정관리 ⑥ 메일을 통한 악성코드 차단 및 대응 +③ 선박 내부 네트워크 망분리 ⑦ 네트워크 이상징후 탐지, DDos 공격 차단 +④ 선박의 유/무선 네트워크 접근통제 ⑧ 안테나 및 시설에 대한 물리적 접근통제 + +![이미지 12-0](images/p0012_img0.png) + + +--- + +| 13 +3) 위성방송 서비스 보안요구사항 +폐기된 방송위성을 활용한 페이크(fake) 방송콘텐츠 송출, 방송통신 구간의 보안취약점을 이용한 방송 +조작, 방해전파 송출을 통한 방송서비스 장애 유발 등의 보안 위협에 대응하기 위한 위성방송 서비스의 +주요 보안요구사항은 노후된 방송위성의 활동 정지와 회수 및 폐기, 통신장비 계정관리 및 네트워크 +취약점 점검, 방송통신 재밍 공격에 대한 안티 재밍 등이 있다. +위성방송 서비스 주요 보안요구사항 +1 +2 +6 +3 +4 +5 +7 +① 노후된 방송위성의 활동 정지, 회수 및 폐기 ⑤ 시스템 조작 실수 방지 교육 및 훈련 +② 방송통신 재밍 공격에 대한 안티 재밍 ⑥ 중요정보 유출 방지 +③ 비인가 이동식 저장매체 제어 ⑦ 악성코드 탐지 및 차단 +④ 통신장비 계정관리, 네트워크 취약점 점검 + +![이미지 13-0](images/p0013_img0.png) + + +--- + +14 | 우주 보안모델 + +## 6. 위성활용 서비스 보안아키텍처 + +위성활용 서비스 보안아키텍처는 위성활용 서비스에서 도출된 보안요구사항을 바탕으로 보안기술, +보안솔루션에 대한 활용방안을 도식화하여 표현한 아키텍처이다. +1) 위성항법 서비스 보안아키텍처 +위성항법 서비스 보안 요구사항, 보안기술, 보안솔루션을 반영하여 다음과 같이 보안아키텍처 구성 +기준을 마련하였다. +[위성항법 서비스 보안 아키텍처 구성 기준] + +## 1. 위성 연계 네트워크 분리 및 접근제어 + +• 지상국 네트워크를 항법위성을 사용하기 위한 위성통신망과 지상국의 인터넷 접속망으로 분리 +• ‌항법데이터 중앙처리국 네트워크를 인터넷 사용이 가능한 임직원 업무망, 정보시스템 운영을 위한 시스템 +운영망으로 분리 +• 방화벽에서 네트워크별 접근에 대한 IP/Port 접근 허용 정책 설정 +• ‌지상국 및 항법데이터중앙처리국 내부 네트워크에 접속하는 장치에 대해 인가된 장치만이 접속할 수 +있도록 네트워크 접근제어 + +## 2. 위성통신 전송데이터 보호 + +• 지상국과 항법데이터 중앙처리국 간의 전송 중인 데이터 도청 차단 +- 지상국과 항법데이터 중앙처리국 간 가상사설망으로 VPN 시스템 구축 + +## 3. 저장데이터 보호 + +• 지상국 및 항법데이터 중앙처리국 시스템 데이터에 대한 비인가 변조/삭제/유출 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 + +--- + +| 15 + +## 4. 침입탐지 및 악성코드 차단 + +• ‌다양한 악성코드 및 외부의 침해 행위로부터 지상국 및 항법데이터 중앙처리국의 내부 네트워크 및 +시스템 보호 +- 원격접속 이상징후 탐지 및 차단을 위한 침입방지시스템(IPS) 구축 +- 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 + +## 5. 물리적 접근제어 + +• 항법데이터 수신국 안테나 및 통신시설에 비인가자의 물리적 접근 차단 +- CCTV, 출입통제시스템 구축 +위성항법 서비스 보안아키텍처 + +![이미지 15-0](images/p0015_img0.png) + + +--- + +16 | 우주 보안모델 +2) 위성통신 서비스 보안아키텍처 +위성통신 서비스 보안 요구사항, 보안기술, 보안솔루션을 반영하여 다음과 같이 보안아키텍처 구성 +기준을 마련하였다. +[위성통신 서비스 보안아키텍처 구성 기준] + +## 1. 위성연계 네트워크 분리 및 접근제어 + +• 지상국 네트워크를 위성 사용을 위한 위성통신망과 인터넷 사용을 위한 인터넷 접속망으로 분리 +• ‌저궤도위성 기반 인터넷 서비스를 사용하는 기업 네트워크를 인터넷을 사용하기 위한 위성통신망과 +기업의 정보시스템 운영을 위한 시스템 운영망으로 분리 +• 기업 내부 무선AP에 비인가자가 불법으로 접속하는 것을 방지하기 위해 무선침입방지 시스템(WIPS) 구축 +• ‌선박의 네트워크를 VSAT 위성통신망, 선박 내부시스템 운영망(제어시스템망, 선박업무 시스템망, +전력망), 임직원 인터넷 서비스망, 탑승객 인터넷 서비스 Wi-Fi 망 등으로 분리 +- 방화벽으로 논리적 네트워크 분리 +- 선박 내부시스템 운영망에서도 제어시스템망과 전력망은 일방향 전송장비로 분리 +• ‌방화벽에서 네트워크별 접근에 대한 IP/Port 접근 허용 정책 설정 + +## 2. 위성통신 전송데이터 보호 + +• ‌저궤도위성과 지상국 간의 전송 중인 데이터 도청 차단 +- 지상국과 지상국 간 가상사설망으로 VPN 시스템 구축 +- 네트워크 구간 암호화를 위한 지상국과 지상국 간 양자내성암호 시스템 구축 +• ‌통신위성과 선박 통신구간 간의 전송 중인 데이터 도청 및 변조 차단 +- 선박과 지상국 간, 선박과 선박본사 간 가상사설망으로 VPN 시스템 구축 +- 선박과 지상국 간, 선박과 선박본사 간 네트워크 구간 암호화를 위한 양자내성암호 시스템 구축 + +## 3. 저장데이터 보호 + +• ‌지상국, 기업, 선박 등의 시스템 데이터에 대한 비인가 변조/삭제/유출 차단 +- 시스템 취약점을 활용하는 이상징후 탐지 및 차단을 위한 침입방지시스템(IPS) 구축 +- 비인가 매체사용에 의한 데이터 훼손을 차단하는 정보유출방지(DLP) 시스템 구축 + +## 4. 인증 및 권한제어 + +• ‌지상국, 기업, 선박 등의 통신시스템 및 시스템에 대한 비인가자의 접근통제 및 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 + +--- + +| 17 + +## 5. 침입탐지 및 악성코드 차단 + +• ‌다양한 침해 공격 및 악성코드로 부터 지상국, 기업, 선박 등의 내부 네트워크 및 시스템 보호 +- 네트워크 포트 스캔, 악성코드 등 공격 이상징후 탐지 및 차단을 위한 침입방지(IPS) 시스템 구축 +- 분산서비스거부공격(DDoS) 차단을 위한 DDoS 대응 시스템 구축 +- 비인가 접속단말 사용 탐지 및 차단을 위한 네트워크 접근통제(NAC) 시스템 구축 +- 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 +- 메일로부터 발생되는 악성코드 감염 예방을 위한 메일보안 구축 +• 스마트폰의 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 + +## 6. 물리적 접근제어 + +• ‌지상국, 기업, 선박 등의 시스템운영실 및 주요시설물에 대한 비인가자의 물리적 접근 차단 +- CCTV, 출입통제 시스템 구축 +위성통신 서비스 보안 아키텍처 + +![이미지 17-0](images/p0017_img0.png) + + +--- + +18 | 우주 보안모델 +3) 위성방송 서비스 보안아키텍처 +위성방송 서비스 보안아키텍처 구성 기준은 앞서 살펴본 보호기능 요구사항을 반영하여 아래와 같은 +기준으로 구성하였다. +[위성방송 서비스 보안아키텍처 구성 기준] + +## 1. 위성연계 네트워크 분리 및 접근제어 + +• 위성방송 송출센터 네트워크를 임직원 업무망, 위성통신 운영망, 방송콘텐츠 관리 시스템 운영망으로 분리 +• 방화벽에서 네트워크별 접근에 대한 IP/Port 접근 허용 정책 설정 +2 저장데이터 보호 +• ‌위성방송 송출센터의 방송콘텐츠 및 관리서버 데이터에 대한 비인가 변조/삭제/유출 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 +• 위성방송 송출센터 시스템의 비인가 저장매체 USB등에 의한 훼손 차단 +- 매체제어 정책 적용을 위한 정보유출차단(DLP) 시스템 구축 + +## 3. 인증 및 권한제어 + +• 지상국 및 위성방송 송출센터의 디폴트 계정 및 취약한 계정 사용 등으로 인한 시스템 침투 차단 +- 사용자 계정관리 및 접근통제 시스템 구축 + +## 4. 침입탐지 및 악성코드 차단 + +• 다양한 악성코드로 부터 보호 위성방송 송출센터 내부 네트워크 및 시스템 보호 +- 악성코드 탐지 및 치료, 제거를 위한 백신 시스템 구축 +- 메일로부터 발생되는 악성코드 감염 예방을 위한 메일보안 시스템 구축 + +## 5. 물리적 접근제어 + +• 위성방송 송출센터 안테나 및 통신 시설에 비인가자의 물리적 접근을 차단 +- CCTV, 출입통제 시스템 구축 + +--- + +| 19 +보안아키텍처 구성 기준을 적용한 위성방송 서비스 보안아키텍처는 아래 그림과 같다. +위성방송 서비스 보안아키텍처 + +![이미지 19-0](images/p0019_img0.png) + + +--- + +20 | 우주 보안모델 +[부록] 우주보안 사고 사례 +최근 우주산업에 민간기업의 참여 증대로 운용되는 위성 수가 급속도로 증가한 반면 보안이 취약한 위성 +이 많아 우주 관련 보안사고가 증가하는 추세이다. 다양한 우주 보안 사고 사례 중에서 사회적, 경제적으로 +파급력을 불러일으킨 대표적인 우주 보안사고사례를 아래와 같이 소개하고자 한다. +사고 사례 +사고 내용 +피해 규모 +발생일시 +윈드스트림 +(Windstream) +ISP 서비스 사용자 +인터넷 모뎀 공격 +• ‌윈드스트림(Windstream) ISP 서비스 사용자의 +인터넷 모뎀을 대상으로 악성 펌웨어 업데이트 +파일을 배포, 인터넷 모뎀 영구 손상 +Windstream 인터넷 +서비스 사용자 인터넷 모뎀의 +약 49% 파괴 (60만대 이상) +’23년 10월 +비아셋(Viasat) +KA-SAT 위성망 +사이버 공격 +• ‌VPN 취약점을 이용하여 비아셋내부망으로 +침입후 모뎀 S/W 업데이트 서버에 접속하여 +와이퍼 맬웨어 AcidRain 배포 +KA-SAT 위성과 통신하는 +수 천대의 모뎀 장애로 위성 +인터넷 마비 +’22년 2월 +툴라(Turla) +해킹 그룹 위성 트래픽 +하이재킹 +• ‌수백대의 컴퓨터에 멀웨어를 감염시킨 후 +위성 트래픽 하이재킹 +• ‌사용자의 활성IP 식별 후 C&C서버로 위장하기 +위한 사용자 활성IP를 선택하여 선택한 IP로 +중요데이터를 유출하도록 명령 +45개국 이상 정부기관, +대사관, 군대 등 수백 대 +컴퓨터의 중요 데이터 탈취 +’15년 9월 +사고사례 1. +윈드스트림(Windstream) ISP서비스 사용자 인터넷 모뎀 공격(’23년 10월) +• 보안 위협 : 윈드스트림(Windstream) ISP 서비스 사용자 인터넷 모뎀 파괴 +• 피해 규모 : ‌윈드스트림(Windstream) ISP 서비스 사용자의 인터넷 모뎀 49% 파괴(60만대 이상), +인터넷 서비스 중단 +• 공격 기법 : ‌특정 인터넷 모뎀 모델(ActionTec T3200s, ActionTec T3260s 및 Sagemcom F5380)을 +타겟으로 악성 펌웨어 업데이트 파일을 배포, 인터넷 모뎀 영구 손상 유발 +• 원인 및 보안 문제점 : 취약한 인증, ISP 관리 인터페이스 노출 +Windstream ISP 악성 +펌웨어 업데이트 파일 배포 +공격자가 Windstream사 ISP서비스 +사용자에게 악성 펌웨어 업데이트 +파일 배포 +STEP 1 +60만대 이상의 인터넷 모뎀 파괴 +업데이트된 사용자 인터넷 모뎀의 +49%(60만대 이상) 파괴 +STEP 2 +일부 지역 인터넷 서비스 중단 +미국 중서부 여러 주에서 +위성 인터넷 서비스 중단 +STEP 3 + +--- + +| 21 +사고사례 2. +비아셋(Viasat) KA-SAT 위성망 사이버 공격(’22년 10월) +• 보안 위협 : 비아셋(Viasat) KA-SAT 사이버 공격으로 위성 인터넷서비스 마비 +• 피해 규모 : ‌KA-SAT 위성과 통신하는 수 천대의 모뎀 장애로 위성 인터넷 마비, KA-SAT 위성으로 +통신하는 독일 5,800개 풍력 터빈 원격 제어 및 모니터링 불능 +• 공격 기법 : ‌VPN 취약점을 이용하여 비아셋 내부망으로 침입. 모뎀 S/W 업데이트 서버에 접속하여 +와이퍼 맬웨어 AcidRain 배포 +• 원인 및 보안 문제점 : VPN 취약점 조치 미흡, 악성코드 탐지 미흡 +VPN 취약점을 이용하여 +내부망 침입 +VPN 취약점을 이용하여 +비아셋 내부망으로 침입 +STEP 1 +위성모뎀 업데이트 서버에 접속 +및 멀웨어 배포 +위성모뎀 SW 업데이트 서버에 접속하여 +와이퍼 멀웨어 AcidRain 배포 +STEP 2 +위성 인터넷 중단 +KA-SAT 위성과 통신하는 수천대의 모뎀 마비 +→ ‌KA-SAT 위성통신하는 5,800개 +풍력터빈 원격 제어 및 모니터링 불능 +STEP 3 +VPN +사고사례 3. +툴라(Turla) 해킹 그룹 위성 네트워크 하이재킹(’15년 9월) +• 보안 위협 : 위성 네트워크 하이재킹 +• 피해 규모 : ‌45개국 이상의 정부 기관과 대사관, 군대, 교육, 연구 및 제약 회사 등 수백 대의 컴퓨터 감염, +위성 통신을 이용하는 PC의 중요 데이터 탈취 +• 공격 기법 : ‌Epic 백도어를 이용, PC 감염 후 위성 전송데이터가 암호화되지 않는 점을 악용하여 트래픽 +하이재킹 +※ Epic 백도어 : Turla 해킹 그룹에서 사용하는 다단계 공격(Adobe PDF를 악용한 스피어피싱 이메일, Internet Explorer 워터링 홀 공격 등) +• 원인 및 보안 문제점 : 위성 전송 데이터 암호화 미흡 +주요기관 컴퓨터에 멀웨어 감염 +45개국 이상의 정부 기관과 대사관, 군대, +교육, 연구 및 제약 회사 등 수백 대의 +컴퓨터 멀웨어 감염(Epic 백도어 이용) +STEP 1 +위성 트래픽 하이재킹 및 +활성 IP 식별 +위성 트래픽을 하이재킹하여 사용자의 +활성 IP식별, C&C서버로 위장하기 +위한 IP 선택 +STEP 2 +위장된 C&C 서버 IP로 +데이터 탈취 +선택한 IP로 데이터를 유출하도록 명령 +→ ‌위성 통신을 이용하는 PC의 중요 +데이터 탈취 +STEP 3 +이메일 +Internet +Explorer +주요기관 PC +주요기관 PC +C&C 서버 + +--- + +우주 +페머교 +과학기술정보통신부 +한국인터넷진흥원 +KISX +Ministry of Science and ICT \ No newline at end of file diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part2.md" "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part2.md" new file mode 100644 index 0000000..655b3b1 --- /dev/null +++ "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part2.md" @@ -0,0 +1,20107 @@ +# 우주 보안모델 Part2.pdf + +> Converted: 2026-04-02 01:23 +> OCR Engine: PaddleOCR (Korean + GPU) + + +--- + +2025 +12 +우주 +Part II +CSaaS +및 +음끈운 +과학기술정보통신부 +한국인터넷진흥원 +KISA +Ministry of Science and ICT + +--- + +1 배경 ................................................................................6 +2 범위 및 구성 .....................................................................8 + +가. 범위 ............................................................................8 + +나. 구성 ............................................................................8 +1 우주 아키텍처 개요............................................................ 11 +2 GSaaS 아키텍처 .............................................................. 14 + +가. GSaaS 구성요소 ........................................................... 15 + +나. GSaaS 서비스 유형 ....................................................... 21 + +다. GSaaS 아키텍처 데이터 흐름 ............................................ 22 +3 우주 공급망 아키텍처 ........................................................ 25 + +가. 우주 공급망 구성요소 ...................................................... 25 + +나. 우주 공급망 아키텍처 데이터 흐름 ....................................... 29 +1 우주 보안 위협 도출 절차 ................................................... 33 +2 GSaaS 보안 위협 ............................................................. 39 + +가. 통신 구간 .................................................................... 41 + +나. 안테나 영역 ................................................................. 43 + +다. 지상국-클라우드 영역 ..................................................... 44 + +라. 위성 운영사 영역 ........................................................... 49 +3 우주 공급망 보안 위협 ....................................................... 50 + +가. 위성/발사체 제조사 영역 .................................................. 51 + +나. 지상국 운영사 영역 ........................................................ 53 + +다. 위성 운영사 영역 ........................................................... 55 +CONTENTS + +## 제1장 ◆ 개요 + + +## 제2장 ◆ 우주 아키텍처 + + +## 제3장 ◆ 우주 보안 위협 + + +--- + +1 우주 보안 요구사항 ........................................................... 69 + +가. GSaaS 보안 요구사항 ..................................................... 69 + +나. 우주 공급망 보안 요구사항 ................................................ 92 +2 우주 보안 아키텍처 ......................................................... 103 + +가. GSaaS 보안 아키텍처 ................................................... 103 + +나. 우주 공급망 보안 아키텍처 .............................................. 105 +3 우주 보안 체크리스트 ...................................................... 107 + +가. 개요 ........................................................................ 107 + +나. 분야별 항목 ............................................................... 110 + +다. 우주 보안 체크리스트 항목별 보안 위협 및 보안 요구사항 .......... 117 +4 우주 보안 위협 시나리오 .................................................... 57 + +가. 우주 보안 위협 시나리오 도출 절차 ...................................... 57 + +나. GSaaS 보안 위협 시나리오 ............................................... 58 + +다. 우주 공급망 보안 위협 시나리오 .......................................... 63 +1 우주 보안 체크리스트 점검 방법 ......................................... 204 + +가. 점검 대상 식별 ........................................................... 205 + +나. 보안점검 수행 ............................................................ 205 + +다. 보안대책 수립 ............................................................ 207 +2 가상 사례기반 점검 방안 .................................................. 208 + +가. 가상회사 ABC 기업 현황 ............................................... 208 + +나. ABC 기업 보안 아키텍처 활용 절차 ................................... 208 + +## 제4장 ◆ 우주 보안 아키텍처 + + +## 제5장 ◆ 우주 보안 아키텍처 활용방안 + +부 록 ◆ 부록 1. 용어 및 약어 ................................................... 219 + +--- + + + +--- + +요L +개요 +1배경 +2 +범위및구성 + +--- + +6 | 우주 보안 모델 +21세기 이후 우주는 단순한 탐사의 대상이 아닌 경제적, 전략적 자산으로 인식되고 있다. +통신, 항법, 방송, 기상관측 등 다양한 분야에서 위성과 우주 인프라가 활용되면서 우주는 더 +이상 먼 미래의 영역이 아닌 국가 경쟁력의 핵심요소가 되었고, 세계 각국은 우주산업을 미래 +신성장동력으로 삼아 막대한 자본을 투입하고 있다. +이른바 “뉴스페이스 시대”라 불리는 최근에는 우주산업이 국가 주도에서 민간 중심으로 빠르게 +전환되고 있는데, 소형위성, 상업용 발사체, 위성 데이터 서비스의 활성화 등으로 우주 생태계가 +다변화되고 있는 상황이다. 즉, 소형위성을 대량으로 생산할 수 있게 되었고 위성을 우주로 보내는 +위성 발사 비용이 급격히 감소하였으며 저궤도 위성 서비스의 확산으로 위성 데이터 전송량이 +폭증함에 따라 우주 산업이 활기를 띄게 되었다. +이에 따라, 적은 자본으로 지상국 운영의 효율성을 극대화할 수 있는 GSaaS(Ground Station +as a Service) 산업이 빠르게 성장하고 있다. GSaaS는 우주기업이 자체 지상국 및 안테나를 +가지고 있지 않더라도 인공위성 통신 및 데이터 서비스를 할 수 있도록 공유 인프라를 제공하는 +서비스이다. 소형위성을 보유한 스타트업 기업이 GSaaS 서비스를 이용하면, 위성과 통신하는데 +필요한 안테나나 지상국 인프라를 빌려 쓰는 형태로 얼마든지 위성 관련 사업을 할 수 있게 +되었다. +GSaaS의 폭발적 성장으로 통신, 방송, 물류, 금융, 해양, 기상 등 다양한 산업에서 위성 +데이터와 서비스 활용도가 높아짐에 따라, 기업 경쟁력과 사용자 신뢰성을 유지하기 위해 + +## 제1장 + +개요 +제1절 +배경 + +--- + + +## 제1장 개 요 | 7 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +우주보안의 필요성이 대두되었다. 우주 인프라에 대한 사이버 공격이나 재밍 등은 단 한 번의 +사고로도 막대한 경제적, 사회적 손실을 초래할 수 있기 때문이다. +또한, 우주 산업에 참여하는 공급업체와 파트너가 매우 다양하여 위성 및 지상국 인프라에 +대해 다양한 보안 위협이 발생할 수 있다. 즉, 위성 설계/개발, 준비/조립, 발사, 운영, 폐기에 +이르는 위성 생애주기 전 과정이 공급망 체계로 구성되어 있으며, 각 단계에서 부품/소프트웨어 +위변조, 정보 유출, 사이버 공격 등의 많은 보안 위협이 현실화되고 있는 실정이다. 이는 우주 +자산이 고가치로 평가되어 사이버보안 위협 목표가 되기에 충분하기 때문이며 국내 기업의 경쟁력 +확보를 위해 우주 공급망 보안도 중요한 요소로 부각되고 있다. 따라서 우주기업은 단위 시스템을 +보호하는 수준을 넘어, 위성, 지상국, 사용자 영역의 우주 환경 전반과 우주 공급망 전 단계에서 +우주보안 체계를 구축해야 한다. +이에, 본 문서는 GSaaS 산업의 폭풍 성장과 다양한 공급망 체계를 고려하여 GSaaS 및 +우주 공급망에 대한 보안 위협을 식별하고, 식별된 보안 위협에 대응하기 위한 보안 요구사항, +보안기술, 보안솔루션 등 보안강화 방안을 제시하여, 우주기업 보안담당자가 우주보안 강화 대책 +수립 시에 참고하고 활용할 수 있도록 지원하는 것을 목적으로 한다. + +--- + +8 | 우주 보안 모델 +제2절 +범위 및 구성 +가. 범위 +본 문서에서 제시하는 보안 대상 범위는 GSaaS 영역과 우주 공급망 영역이다. +GSaaS는 위성과 통신하고 제어하는 지상국 기능을 클라우드 서비스 형태로 제공하는 모델로, +위성과 통신하는 안테나 영역과 위성 서비스를 위한 데이터 처리를 수행하는 지상국 영역, 위성 +서비스를 제공하는 위성 운영사 영역을 범위로 한다. +우주 공급망 영역은 위성의 생애 주기(설계/개발, 준비/조립, 발사, 궤도진입 확인, 운영, 위성 +해체)에 따른 우주 공급망 아키텍처를 구성하는 위성 제조사 영역, 지상국 운영사 영역, 위성 +운영사 영역을 범위로 한다. +나. 구성 +본 문서는 크게 다섯 부분으로 구성한다. +1 장에서는 우주 보안모델에 대한 개발 배경을 소개하고 본 문서의 목적과 범위를 설명한다. +2 ‌장에서는 국내외 우주 보안가이드 및 보고서를 기반으로 GSaaS 및 우주 공급망 아키텍처를 +설명한다. +3 장에서는 GSaaS 영역 및 우주 공급망 영역별로 발생 가능한 보안 위협을 도출하여 제시한다. +4 ‌장에서는 GSaaS 영역 및 우주 공급망 영역별로 보안 위협에 대응하는 보안 요구사항, +보안기술, 보안솔루션과 우주 보안 아키텍처를 제시하고 우주기업 보안담당자들이 +우주보안을 강화하는데 참조할 수 있는 우주 보안 체크리스트를 제공한다. +5 ‌장에서는 우주기업 보안담당자가 우주 보안 체크리스트를 쉽게 활용할 수 있도록 우주 보안 +체크리스트 점검 방법과 가상 사례 기반으로 점검한 예시를 제시한다. + +--- + +우주 아키텍처 + +## 1. 우주 아키텍처 개요 + + +## 2. GSaaS 아키텍처 + + +## 3. 우주 공급망 아키텍처 + +제 2 장 + +--- + +10 | 우주 보안 모델 +본 장에서는 우주 아키텍처에 대해 기술한다. 우주 아키텍처는 국내외 우주 보안가이드, +보고서 및 표준을 기반으로 우주 구성요소를 표현한 것으로 우주 산업 이해관계자가 보호 대상을 +식별하는데 활용할 수 있다. 우주 아키텍처의 내용은 다음과 같이 기술한다. +1. ‌우주 아키텍처에서는 NIST IR 82701, NIST IR 84012, BSI-TR-031843, 일본의 민간 +우주시스템 사이버보안대책 가이드라인 및 한국인터넷진흥원(KISA, Korea Internet & +Security Agency)의 SW 공급망 보안 가이드라인을 참조하고, 우주 아키텍처 반영 요건을 +분석하여 GSaaS, 우주 공급망 영역 등 영역별 대표 구성요소를 정의한다. +2. ‌GSaaS 아키텍처는 우주, GSaaS, 위성 운영사, 위성 활용 서비스 영역으로 구분하여 해당 +아키텍처를 구성하고 있는 구성요소의 주요 기능을 설명하고, GSaaS 아키텍처의 데이터 +흐름, 서비스 유형을 설명한다. +3. ‌우주 공급망 아키텍처는 위성 제조사, 지상국 운영사, 위성 운영사 영역으로 구분하여 해당 +아키텍처를 구성하고 있는 구성요소의 주요 기능을 설명하고, 우주 공급망 아키텍처의 +데이터 흐름을 설명한다. + +## 제2장 + +우주 아키텍처 +1 ‌NIST IR 8270, Introduction to Cybersecurity for Commercial Satellite Operations : 상업용 위성 운영을 위한 사이 +버 보안 지침 +2 ‌NIST IR 8401, Satellite Ground Segment Applying the Cybersecurity Framework to Satellite Command and +Control : 위성 지상국 운영의 사이버보안 프레임워크 적용 방안 +3 ‌BSI-TR-03184, Technical Guideline BSI TR-03184 Information Security for Space Systems : 독일 연방정보보 +안청(BSI)의 우주 운영 보안 요구사항 가이드라인 + +--- + + +## 제2장 우주 아키텍처 | 11 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +제1절 +우주 아키텍처 개요 +우주 아키텍처는 국내외 우주 보안가이드, 보고서 및 표준(NIST IR 8270, NIST IR 8401, +BSI-TR-03184, 일본의 민간 우주시스템 사이버보안대책 가이드라인, 한국인터넷진흥원의 +SW공급망 보안 가이드라인 등)을 참조하여 구성하였다. +우주 아키텍처 수립을 위해 참조한 국내외 우주 보안가이드, 보고서 및 표준은 다음과 같다. +■ NIST IR 8270 - Introduction to Cybersecurity for Commercial Satellite Operations +미국 국립표준기술연구소(NIST, National Institute of Standards and Technology) +에서 발간한 NIST IR 8270은 상업용 위성 운영을 위한 사이버보안 위험관리를 다룬 보고서로 +위성 운영 임무에 NIST CSF(CyberSecurity Framework)를 적용하는 방법을 구체적으로 +제시한다. +그림 1 +우주 아키텍처 수립 반영 요건 + +--- + +12 | 우주 보안 모델 +NIST IR 8270에서는 우주 아키텍처를 우주부문, 지상부문, 사용자 부문으로 구분한다. +특히 우주 부문을 세분화하여 링크 하위부문(link sub-segment), 위성 내부 사이버보안 +부문(internal satellite cybersecurity sub-segment), 위성간 통신 부문(Satellite-to satellite +communications sub-segment)으로 정의하였다. 각 부문별로 주요 구성요소를 식별하고 +위협과 대응 방안을 정리하여 상업용 위성 운용 기업의 보안 역량을 확보하기 위한 지침을 +제공한다. +■ ‌NIST IR 8401 - Satellite Ground Segment Applying the Cybersecurity Framework +to Satellite Command and Control +미국 국립표준기술연구소에서 발간한 NIST IR 8401은 지상국의 위성 운영을 위한 +사이버보안을 다룬 보고서이다. 지상국 위성 운영 보안위험을 정의하고 이를 관리하기 위해 NIST +CSF를 적용하는 방법을 구체적으로 제시한다. +NIST IR 8401에서는 지상국 아키텍처를 미션 운영 센터(Mission Operations Center)와 +페이로드 제어센터(Payload Control Center)로 구분하고 핵심 요소를 중심으로 위험을 +체계적으로 정의한다. 이를 통해 지상국 운영 과정에서 발생할 수 있는 보안 위협과 대응방안을 +정리하고, 지상국의 특성이 반영된 보안 역량을 확보하기 위한 지침을 제공한다. +■ ‌BSI-TR-03184 - Technical Guideline BSI TR-03184 Information Security for +Space Systems +독일 연방 정보보안청(BSI)에서 발간한 BSI-TR-03184은 우주 부분과 지상 부문을 포괄하는 +우주 시스템 보안 기술 지침서이다. Part 1에서는 위성 본체, 플랫폼, 페이로드, 위성 간 통신 등의 +우주 부문 전반을 다루며, 각 요소별 보안 지침을 제시한다. Part 2에서는 지상 부문에 초점을 맞춰 +지상 운영에 필요한 모든 IT/물리 영역 및 프로세스를 포함한 지침을 제시한다. +BSI-TR-03184에서는 우주 아키텍처를 위성의 전체 수명 주기를 기준으로 나누고 각 +단계에서 발생할 수 있는 보안 위협과 보안대책을 매핑한다. 이를 통해 위성 시스템의 생애 주기 +전반에 걸친 모든 프로세스에서 정보보호를 강화하기 위한 가이드를 제공한다. + +--- + + +## 제2장 우주 아키텍처 | 13 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +■ ‌일본 민간 우주시스템 사이버보안대책 가이드라인 +일본의 경제산업성의 제조산업국 우주산업실이 발표한 민간 우주시스템 사이버보안대책 +가이드라인은 민간 우주 시스템을 대상으로 한 표준 모델을 제시하고 사이버 보안 대책 수립 +절차를 구체적으로 안내한다. +민간 우주시스템 사이버보안 대책 가이드라인은 우주 시스템을 위성 본체, 위성 운용 설비, 위성 +데이터 이용 설비, 개발/제조 설비 등으로 구분하여 구조를 분석하며, 각 영역에서 발생 가능한 +사고 사례와 예상되는 보안 위험을 정리한다. 특히 민간 우주 산업이 준수해야 하는 관련 법제도와 +규정을 연계하여, 기업이 법적 요구사항을 충족하면서 보안 대책을 수립할 수 있도록 지원한다. +■ 한국인터넷진흥원, SW 공급망 보안 가이드라인 +KISA에서 발간한 SW 공급망 보안 가이드라인은 공급망 전 단계에서 발생할 수 있는 위협과 +취약점을 관리하기 위한 지침서다. 이 가이드라인은 SW 공급망을 위협하는 악성코드 유입, +취약점 관리, 업데이트 배포 등의 보안 문제를 예방하기 위한 구체적인 대책을 제공한다. +SW 공급망 보안 가이드라인에서는 특히 SBOM(Software Bill of Materials)의 작성과 활용 +방안을 강조한다. 이 가이드라인은 기업이 SBOM을 활용하여 보안 취약점과 위협을 신속하게 +대응하고, SBOM 기반의 보안체계를 구축하여 보안 사고를 사전에 차단할 수 있도록 지원한다. +국내외 우주 보안가이드, 보고서 및 표준을 참조하여 GSaaS 및 우주 공급망 아키텍처를 +구성하고 각 영역별 구성요소를 도출하였다. 또한, 우주 유관 기관과 기업에 종사하는 전문가의 +의견을 반영하여 우주 아키텍처 및 구성요소를 국내 현황에 적합하게 수정하였다. + +--- + +14 | 우주 보안 모델 +제2절 +GSaaS 아키텍처 +GSaaS4는 위성과 통신하고 제어하는 지상국 인프라와 안테나를 빌려서 사용하는 서비스로, +위성과 통신하는 안테나 영역과 위성 서비스를 위한 데이터 처리를 수행하는 지상국 영역, 위성 +서비스를 제공하는 위성 운영사 영역을 범위로 한다. +안테나를 통해 위성과 신호를 송수신하며, 지상국은 원활한 통신을 위해 위성의 상태를 +모니터링하고 제어한다. 클라우드 환경에서는 데이터의 저장과 서비스 운영을 지원하고, 위성과의 +통신을 위한 안테나 예약 기능을 제공한다. 위성 운영사는 GSaaS에 접속하여 수집된 데이터를 +분석 및 가공하고, 처리된 데이터를 활용하여 사용자에게 다양한 위성 서비스를 제공한다. +GSaaS 아키텍처의 세부 구성요소는 아래 그림과 같다. +4 ‌GSaaS : Ground Station as a Service +그림 2 +GSaaS 아키텍처 + +--- + + +## 제2장 우주 아키텍처 | 15 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +가. GSaaS 구성요소 +GSaaS 아키텍처는 우주 영역, GSaaS 영역, 위성 운영사 영역, 위성 활용 서비스 영역으로 +구성된다. +우주 영역은 우주 자산을 운영하는 영역으로, 대표적 우주 자산인 위성이 임무를 수행하는 +영역이다. 위성과 안테나는 RF 통신으로 데이터를 송수신하며, 안테나 영역에서 수신된 신호를 +디지털 데이터로 변환하여 지상국으로 전달한다. 지상국을 거쳐 가공된 데이터는 사용자에게 +다양한 위성 활용 서비스를 제공한다. +(1) 우주 영역 +우주 영역은 GSaaS 아키텍처 최상단에 위치하고 있으며, 우주 공간에 위치하는 자산을 +운용하는 영역이다. 우주 영역의 대표적인 자산으로 인공위성(이하 ‘위성’이라 함)이 있으며, +위성은 탑재체의 임무, 운영 궤도 등 다양하게 분류할 수 있다. +임무별 위성 종류에 대한 설명은 아래 표와 같다. +5 ‌GNSS : Global Navigation Satellite System +표 1 +임무별 위성 +구분 +설 명 +방송위성 +y 지상에서 송출하는 방송을 수신하여 지상으로 중계하는 위성 +y 지상의 위성방송 송출센터에서 송출하는 방송을 지상으로 중계 +통신위성 +y 음성, 데이터 및 멀티미디어 전송 등의 통신 서비스를 중계하는 위성 +y 위성전화, 광대역 인터넷, 이동통신 등의 통신 중계 +항법위성 +(5GNSS) +y 글로벌 네비게이션 위성 +y 지구상의 위치와 항법, 시각 정보를 제공하는 신호 전송 + +--- + +16 | 우주 보안 모델 +(2) GSaaS 영역 +GSaaS 영역은 우주와 지상 간 통신을 담당하는 안테나 영역, 위성의 운영을 지원하고, 탑재체 +데이터를 처리하는 지상국 영역, 위성의 통신을 위한 안테나 위치, 통신 시간 등을 예약하고 +스케줄을 관리하는 클라우드 영역으로 구분된다. +GSaaS 영역의 구성요소는 아래 그림과 같다. +(가) 안테나 영역 +GSaaS 안테나 영역은 우주 영역과 지상을 연결하는 물리적인 접점으로, 안테나, 위성모뎀, +안테나 제어시스템, 관리서버 등으로 구성되어 있다. 안테나를 통해 위성으로부터 신호를 +수신하고, 지상의 명령을 위성으로 송신하는 역할을 수행하며, 위성의 신호를 디지털 데이터로 +변환하여 지상국으로 전달하는 영역이다. +그림 3 +GSaaS 영역 구성요소 + +--- + + +## 제2장 우주 아키텍처 | 17 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +GSaaS 안테나 영역의 구성요소에 대한 설명은 아래 표와 같다. +구분 +구성요소 +설 명 +GSaaS +안테나 +안테나 +y 위성이 지상과 신호를 송·수신하는 장비 +- 수신 안테나 : 지상으로부터 신호를 수신하여 위성의 통신시스템으로 전달 +- 송신 안테나 : 통신시스템으로부터 전달받은 신호를 지상으로 전달 +위성 모뎀 +y 지상국 시스템과 안테나 사이에서 데이터를 전송하는 시스템 +y ‌위성운영을 위한 지상국 내부의 각 시스템들로부터 수신한 원격명령을 안테나로 +송신하고 안테나로부터 수신한 원격측정 및 페이로드 데이터를 지상국 내부의 각 +관련된 시스템으로 송신 +안테나 +제어 +시스템 +y 위성과의 신호 전달을 원활하게 하기 위하여 지상국에 설치되어 있는 안테나를 +제어하는 시스템 +y 안테나의 방향 조절, 안테나의 각도 조절 등의 기능 수행 +관리서버 +y 안테나 네트워크를 구성하고 관리하기 위한 네트워크 관리시스템 +y 다음과 같은 기능 수행 +- 네트워크 단말관리 DB운영, GUI 기능 제공 +- ‌네트워크 구성 : 단일 및 복수 안테나 구성, 주파수 할당, 위성정보, 사용자 +프로토콜 구성, 위성 프로토콜 구성 관리 +- 네트워크 단말 파라미터, 이벤트 등 관리 +- 네트워크 단말 감시 및 제어 +- 필요한 내부 소프트웨어, 파라미터 및 프로토콜 다운로딩 +(나) 지상국 영역 +지상국 영역은 위성 탑재체에서 데이터를 수신하고 수신한 데이터를 서비스하기 위한 탑재체 +데이터 이용 영역과 위성을 운영 및 제어하기 위한 위성운영 영역으로 구분된다. +탑재체 데이터 이용 영역은 탑재체 DB, 데이터 수신 및 처리시스템, 관측요청 접수시스템, +DB분석 및 시각화 시스템, 실험계획 및 제어시스템, 탑재체 데이터 서비스 시스템 등으로 +구성되고, 위성운영 영역은 위성 상태 모니터링 시스템, 위성 제어시스템, 궤도 제어시스템, 긴급 +대응 및 위기관리 시스템, 미션제어 및 운영지원 시스템 등으로 구성되어 있다. +표 2 +GSaaS 안테나 영역 구성요소 + +--- + +18 | 우주 보안 모델 +탑재체 데이터 이용 영역과 위성운영 영역의 구성요소에 대한 설명은 아래 표와 같다. +구분 +구성요소 +설 명 +탑재체 +데이터 +이용 영역 +탑재체 DB +y 탑재체로부터 수신한 데이터를 저장하는 시스템 +y 원격명령 및 원격측정 등의 위성운영 데이터의 저장 +데이터 수신 및 +처리 시스템 +y 위성으로부터 수집된 데이터를 수신하여 처리하는 시스템 +y 탑재체로부터 수집된 데이터를 해석하고 분석하여 필요한 정보를 생성 +관측요청 접수 +시스템 +y 탑재체에서 수행할 사용자의 요청사항을 접수하고 관리하는 시스템 +y 탑재체 업무 수행 일정 관리 및 고객 요구사항 관리 +DB분석 및 +시각화 시스템 +y 수집된 데이터를 분석하고 시각적으로 표현하는 운영지원 시스템 +y 탑재체로부터 수집된 데이터를 처리하고 시각화하여 탑재체 데이터 이용 +센터의 운영자들에게 필요한 정보 제공 +실험 계획 및 +제어 시스템 +y 위성에 장착된 실험 장비의 실험계획 및 제어를 담당하는 시스템 +y 실험 장비의 수행 계획, 제어, 모니터링 및 평가 +탑재체 데이터 +서비스 시스템 +y 탑재체 데이터를 사용자에게 제공하는 시스템 +y 수신한 탑재체 데이터를 편집 및 가공하여 사용자에게 제공 +위성 운영 +영역 +위성 상태 +모니터링 +시스템 +y 위성의 운영 상태를 모니터링하는 시스템 +y 위성 운영 상태 및 이상징후를 지속적으로 감시하고 추적 +위성 제어 +시스템 +y 지상에서 위성의 자세 유지 및 변경을 제어하는 시스템 +y 특정 대상 관찰이나 통신 수행 시 위성의 자세 제어 +궤도 제어 +시스템 +y 지상에서 위성의 궤도를 제어하고 유지하는 시스템 +y 위성의 속도와 방향을 조절하여 위성의 고도, 경사각 등을 제어 +긴급 대응 +및 위기관리 +시스템 +y 위성운영 중 발생할 수 있는 긴급 상황이나 위기 시, 대응 시스템 +y ‌위험 상황 시, 긴급 대응하고 위성의 안전과 장비에 대한 위험을 최소화하기 +위한 관리 수행 +미션제어 및 +운영지원 +시스템 +y 위성의 임무를 관리하고 운영을 지원하는 시스템 +y 위성 임무 일정 관리, 데이터 수집 및 분석 수행 +표 3 +GSaaS 지상국 영역 구성요소 + +--- + + +## 제2장 우주 아키텍처 | 19 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +(다) 클라우드 영역 +클라우드 영역은 위성 통신을 위한 안테나의 위치, 사용 시간 등을 예약하고 통신 스케줄을 +관리하는 영역이다. 인터넷 등을 통해 사용자에게 제공되는 Public 클라우드 영역과 내부 +전용으로 사용하는 Private 클라우드 영역으로 구분된다. +Public 클라우드에는 예약 및 스케줄링 시스템이 있으며 이는 위성과 지상국 간의 통신을 +예약하고 위성의 운영 일정을 관리할 수 있도록 지원한다. Private 클라우드는 DB 서버와 API +서버로 구성되어 위성 및 탑재체의 임무 계획, 명령 전송, 상태 모니터링, 스케줄 관리 등 위성 +운영에 필요한 데이터를 저장하고, 관리 인터페이스를 제공한다. +Public 클라우드 영역과 Private 클라우드 영역의 구성요소에 대한 설명은 아래 표와 같다. +구분 +구성요소 +설 명 +Public +예약 및 +스케줄링 +시스템 +y 위성 운영자들이 자신의 위성과 특정 지상국 간의 통신을 계획하고 예약하며 +관리하는데 필요한 기능을 제공하는 시스템 +y 위성과 특정 지상국이 통신 가능한 시간(가시 시간)을 계산 및 예측하고 지상국 +자원(안테나, 주파수 대역 등) 가용성 확인 +y 미션 예약 및 스케줄링 관리 +Private +DB 서버 +y 위성 및 탑재체의 임무 계획, 명령 전송, 상태, 스케줄 등 위성 운영에 필요한 +데이터를 저장 및 전송하는 시스템 +y 위성 및 지상국에서 수신한 탑재체 데이터 저장 및 전송 +API 서버 +y 지상국 및 안테나를 통해 위성 및 탑재체 관리 인터페이스를 제공하는 시스템 +y 위성 및 탑재체 임무 계획 및 명령 전송, 상태 모니터링 및 알림, 스케줄 관리 수행 +y 위성 및 지상국에서 수신한 탑재체 데이터를 외부 시스템에 전송 +(3) 위성 운영사 영역 +위성 운영사 영역은 GSaaS 영역에 접속하기 위한 시스템이 위치하는 영역으로, 위성 운영사를 +통해 GSaaS 시스템에 접속하여 위성의 위치, 사용 시간 등의 일정을 예약할 수 있으며, 예약된 +일정으로 임무를 수행한 위성이 수집한 데이터를 활용하여 사용자에게 서비스 형태로 제공하는 +역할을 수행한다. +표 4 +클라우드 영역 구성요소 + +--- + +20 | 우주 보안 모델 +위성 운영사 영역의 구성요소에 대한 설명은 아래 표와 같다. +구분 +구성요소 +설 명 +위성 +운영사 +GSaaS +접속 시스템 +y GSaaS에 접속하는 시스템 +y 위성을 운용하고 탑재체 데이터를 수신할 수 있는 창구 제공 +위성활용 +시스템 +y 위성으로부터 수집된 데이터를 수신하고, 분석 및 재처리된 위성 데이터를 +사용자에게 제공하는 시스템 +y 수집된 데이터의 저장, 통합 관리 및 사용자 맞춤형 서비스 제공 +탑재체 +데이터 처리 +및 가공 +시스템 +y 인공위성에서 지상국으로 다운로딩한 데이터를 서비스 목적에 맞게 재처리 및 +분석하는 시스템 +y 수신된 원시 데이터 재처리(보정/노이즈 제거/포맷 변환 등) 수행 +y 전처리된 데이터를 기반으로 위성 서비스 목적에 맞는 분석(영상 분류, 특징 추출, +변화 탐지, 통신 신호 분석, 데이터 모델링 등) +(4) 위성 활용 서비스 영역 +위성 활용 서비스 영역은 위치정보를 제공해 주는 위성항법 서비스와 통신 및 방송을 중계하는 +위성방송통신 서비스로 구분되며, 위성 활용 서비스에 대한 설명은 아래 표와 같다. +구분 +설 명 +위성항법 서비스 +y 위성으로부터 위치정보를 수신하여 지상교통 및 항공교통에서의 차량 운행에 +사용하는 위성항법 서비스 +위성통신 서비스 +(스마트선박) +y VSAT 위성안테나와 통신위성의 서비스를 활용하여 지상의 인터넷 서비스를 +사용할 수 있도록 지원하는 선박의 위성통신 서비스 +위성통신 서비스 +(저궤도 이동통신) +y 저궤도 통신위성을 이용하여, 전용 위성모뎀이 탑재된 휴대폰을 사용하거나 +스마트폰 사용을 지원하는 이동통신 서비스 +위성통신 서비스 +(저궤도 인터넷) +y 사용자가 위성안테나를 활용하여 저궤도를 공전 중인 군집위성으로 웹사이트 접속 +요청을 보내, 지상의 인터넷 서비스 인프라를 사용할 수 있는 위성 인터넷 서비스 +위성방송 서비스 +y 지상 방송국의 방송서비스를 위성을 활용하여 중계하는 방송 서비스 +표 5 +위성 운영사 영역 구성요소 +표 6 +위성 활용 서비스 + +--- + + +## 제2장 우주 아키텍처 | 21 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +나. GSaaS 서비스 유형 +GSaaS 서비스는 위성을 운용하는 지상국의 기능을 서비스 형태로 제공함으로써, 위성 +운영사가 직접 인프라를 구축하지 않고도 위성 운용과 데이터 수집, 분석 및 가공을 수행할 수 +있도록 한다. +현재 국내외에서는 여러 기업이 각기 다른 방식으로 GSaaS를 구축하고 운영하고 있으며, +GSaaS 서비스의 유형은 지상국 인프라 구성, 클라우드 연계 방식, 안테나 제공 여부, 데이터 전달 +경로 등으로 구분된다. +다음은 국내외 GSaaS 유형을 세 가지로 구분하여 설명한다. +첫 번째 GSaaS 유형은 지상국 인프라 전체를 클라우드 환경에 구현하고, 자체 안테나 +네트워크를 제공하는 서비스이다. 대표적인 사례로 AWS에서 제공하는 GSaaS 서비스가 있으며, +위성 신호의 수신과 데이터 저장, 처리 및 분석 등 지상국 시스템에서 수행하는 기능을 AWS +클라우드 내에서 수행한다. 또한, 지상국 예약과 통신 스케줄링 기능 역시 클라우드 환경에서 +제공하고, 클라우드 내에서 처리된 데이터는 지정된 저장소로 전송되며, 사용자는 클라우드 +콘솔과 API를 통해 데이터에 접근할 수 있다. +두 번째 GSaaS 유형은 자체 지상국 시스템을 지상에 구축하고 클라우드 기반 플랫폼에 위성 +예약 및 스케줄링 시스템을 연계하는 서비스이다. 국내 기업 A사의 경우 이와 같은 형태로 GSaaS +서비스를 제공하고 있으며, 자체 지상국을 통해 위성통신을 하고 위성으로부터 수신된 데이터를 +가공 및 분석한다. 위성 운영사는 클라우드 기반 플랫폼을 통해 위성통신을 위한 안테나 예약과 통신 +일정을 예약하고 사용할 수 있다. 해당 유형에서 클라우드는 위성통신을 예약하기 위해서만 사용되며 +위성의 데이터는 클라우드를 거치지 않고 지상국 인프라를 통해 가공되어 사용자에게 전달된다. +세 번째 GSaaS 유형은 지상국 시스템을 지상에 구축하고 우주기업에서 운영하는 웹사이트로 +위성 예약 및 스케줄링 시스템을 제공하는 서비스이다. 국내 기업 B사의 GSaaS 서비스에 +해당하며, 우주기업 자체적으로 지상국을 운영하고 사용자에게 탑재체 데이터를 전송할 때 +클라우드 기반 플랫폼을 활용하고 있다. 즉, 클라우드는 데이터 전달 경로로만 이용되며, 사용자는 +기업이 제공하는 클라우드 주소를 통해 탑재체 데이터를 확인하고 다운로드할 수 있다. +이처럼 GSaaS 서비스는 기업의 기술 환경과 비즈니스 모델에 따라 다양한 형태로 운영되고 +있으며, 각 유형은 클라우드 활용 범위와 지상국 인프라의 구성 방식에 따라 차별화된 특성을 +가진다. + +--- + +22 | 우주 보안 모델 +다. GSaaS 아키텍처 데이터 흐름 +GSaaS 아키텍처를 구성하는 우주 영역 및 지상국 영역 간 데이터 전송 및 처리 과정을 +중심으로 GSaaS 아키텍처의 데이터 흐름을 분석한다. +GSaaS 아키텍처에서의 데이터 흐름은 위성관제와 위성탑재체 데이터 이용의 두 가지 형태로 +나누어 설명한다. 위성관제에서의 데이터 흐름은 위성 상태를 수신 및 모니터링하고 위성에 +명령을 보낼 시 송수신되는 데이터를 기술하였다. 위성 탑재체 데이터 이용에서의 데이터 흐름은 +위성 탑재체에서 생성되는 데이터를 수신하여 위성 활용 서비스에 이용할 때 전송되는 데이터를 +중점적으로 명시하였다. 위성관제 및 데이터 이용에서의 데이터 흐름은 아래와 같다. +(1) 위성 관제 +위성 관제는 위성의 상태 정보를 수신하여 위성을 제어하기 위한 위성 명령을 전송하는 +과정이다. 위성 운영사 영역에서 위성통신을 위한 안테나 및 통신 일정을 예약하고 해당 예약 +시간에 지상국에서 위성과 통신을 하게 된다. +위성 관제의 데이터 흐름을 표현한 그림은 아래와 같다. +그림 4 +GSaaS 위성 관제 데이터 흐름 + +--- + + +## 제2장 우주 아키텍처 | 23 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +위성 운영사 영역에서 사용자가 GSaaS 접속시스템을 통해 위성통신을 위한 안테나 및 +통신일정을 예약하면 사용자 인증정보, 안테나 예약 정보, 위성통신 일정 등 예약에 필요한 정보가 +클라우드 영역의 예약 및 스케줄링 시스템으로 전송되고(①), 예약 및 스케줄링 시스템은 위성과 +안테나의 가용 시간을 고려하여 안테나를 배정하고 통신 일정을 확정한다. +예약 및 스케줄링 시스템에서 확정된 위성통신 일정 및 통신을 위해 배정된 안테나 정보는 +지상국으로 전송되어 예약된 일정 전까지 미션제어 및 운영지원 시스템에 저장된다. (②) +예정된 통신 일정이 되면 위성의 임무 수행을 위한 명령 데이터가 지상국에서 안테나 영역으로 +전송되고 안테나 영역에서 해당 데이터를 RF 신호로 변환하여 위성으로 전송한다. (③) +위성은 상태 정보를 지상의 안테나로 전송하고 RF 신호를 디지털 신호로 변환한 후 지상국에 +전송한다. (④) +위성, 안테나, 지상국 영역은 데이터가 양방향으로 전송되며, 이 과정에서 위성 상태 정보를 +송·수신하고 위성을 제어한다. +(2) 탑재체 데이터 이용 +탑재체 데이터 이용 과정은 사용자가 요청한 일정에 따라 임무를 수행한 위성이 임무에 의해 +생성한 탑재체 데이터를 지상으로 전송하는 과정이다. 위성으로부터 수신한 탑재체 데이터는 +탑재체 DB에 저장되었다가 DB분석 및 시각화시스템에서 탑재체 데이터를 처리 및 가공하여 +사용자에게 서비스 형태로 제공된다. +탑재체 데이터 이용 과정의 데이터 흐름을 표현한 그림은 아래와 같다. + +--- + +24 | 우주 보안 모델 +위성은 임무 수행 결과로 수집·생성된 탑재체 데이터를 RF 신호형태로 지상의 안테나로 +전송한다. (①) 탑재체 데이터는 위성이 촬영한 영상 데이터, 우주 실험 데이터, 통신 데이터 등이 +포함된다. 안테나 영역은 RF 신호형태로 수신한 탑재체 데이터를 디지털 데이터로 변환하여 +지상국의 데이터 수신 및 처리시스템으로 전송한다. (②) 데이터 수신 및 처리시스템은 수신한 +탑재체 데이터를 탑재체 DB에 저장하고, DB 분석 및 시각화 시스템을 통해 서비스에 활용하기 +위한 형태로 분석 및 가공하여 위성 운영사 영역으로 전송한다. (③) +위성 운영사 영역은 지상국 영역에서 분석 및 가공한 데이터를 수신하여 서비스 목적에 맞게 +최종 가공 데이터를 생성하고, 사용자에게 서비스 형태로 제공한다. (④) +그림 5 +GSaaS 탑재체 데이터 이용 데이터 흐름 + +--- + + +## 제2장 우주 아키텍처 | 25 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +제3절 +우주 공급망 아키텍처 +위성의 생애 주기(설계/개발, 준비/조립, 발사, 궤도진입 확인, 운영, 위성 해체)를 기반으로, 각 +단계별 주체의 역할과 구성요소를 중심으로 우주 공급망 아키텍처를 작성하였다. 또한, 각 단계의 +주체가 되는 영역과 해당 영역의 구성요소, 영역 간의 데이터 흐름을 분석하였다. +우주 공급망 영역의 세부 구성요소를 표현한 아키텍처는 아래 그림과 같다. +가. 우주 공급망 구성요소 +우주 공급망 영역은 위성/발사체 제조사, 지상국 운영사, 위성 운영사 영역으로 구분된다. +위성/발사체 제조사는 탑재체를 포함한 위성 본체와 발사체를 제작하고, 탑재되는 +소프트웨어를 개발하는 역할을 수행하며, 위성 운용의 기초가 되는 하드웨어와 소프트웨어 +자산을 공급하는 영역이다. 지상국 운영사는 위성과 지상 간 통신을 관리하고, 위성 운용에 +그림 6 +우주 공급망 아키텍처 + +--- + +26 | 우주 보안 모델 +필요한 시스템과 소프트웨어를 운용하여, 위성이 임무를 안정적으로 수행할 수 있는 환경을 +제공하고 운영을 지원하는 영역이다. 위성 운영사는 위성으로부터 수신한 탑재체 데이터를 +목적에 따라 분석 및 처리하고, 이를 활용하여 위성 활용 서비스를 제공하는 영역이다. +(1) 위성/발사체 제조사 영역 +위성/발사체 제조사 영역은 위성의 설계/개발 및 준비/조립의 핵심 주체로, 위성 본체 및 +탑재체, 발사체를 제작하고 탑재 소프트웨어를 개발하는 영역이다. 부품사를 통해 필요한 부품을 +조달받아 위성 본체와 탑재체, 발사체를 제작하며, 하드웨어뿐만 아니라 소프트웨어까지 통합하여 +위성 운용의 기초가 되는 자산을 제공한다. +위성 제조사 영역의 구성요소에 대한 설명은 아래 표와 같다. +표 7 +위성/발사체 제조사 영역 구성요소 +구분 +구성요소 +설 명 +위성 +제조사 +위성체, +탑재체, 발사체 +소프트웨어 개발 +서버 +y 위성체/탑재체/발사체 각 시스템에 내장되는 제어 및 운용 소프트웨어를 +개발, 통합, 검증하는 서버 +y 위성 및 관련 장비의 임베디드 SW, 테스트 SW, 운영 SW 등을 개발하고 +기능 시험 수행 +라이브러리 DB +y 공통으로 사용하는 오픈소스, 라이브러리, 알고리즘, 모듈 등의 자산을 +중앙에서 저장하고 공유할 수 있는 DB +y 공통으로 사용하는 자산의 중앙 저장, 관리, 공유 지원 +코드 DB +y 자체 개발한 라이브러리, 알고리즘, 모듈 등의 자산을 중앙에서 저장하고 +공유할 수 있는 DB +y 자체 개발 소스코드 중앙 저장, 관리, 공유 +위성체 제조 +시스템 +y 위성체를 설계, 제작, 조립, 시험하는 시스템 +y 위성체 설계, 제작, 조립, 시험 수행 +탑재체 제조 +시스템 +y 탑재체를 설계, 제작, 조립, 시험하는 시스템 +y 탑재체 설계, 제작, 조립, 시험 수행 +발사체 제조 +시스템 +y 위성 발사를 위한 로켓 또는 발사체를 설계, 제작, 조립, 시험하는 총체적 생산 +및 품질 관리 시스템 +y 발사체 설계 및 제작, 조립, 발사체 생산 및 품질 관리 수행 + +--- + + +## 제2장 우주 아키텍처 | 27 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +(2) 지상국 운영사 영역 +지상국 운영사 영역은 위성 운영 단계의 주체 중 하나로, 위성과 지상 간 통신을 관리하고 위성 +운용에 필요한 시스템과 소프트웨어를 운영한다. 위성의 궤도와 자세를 제어하고 필요에 따라 +위성에 탑재된 소프트웨어의 원격 업데이트를 수행하며, 위성의 운영 단계에서 계획된 임무를 +안정적으로 수행할 수 있도록 지원하는 영역이다. +지상국 운영사 영역의 구성요소에 대한 설명은 아래 표와 같다. +표 8 +지상국 운영사 영역 구성요소 +구분 +구성요소 +설 명 +지상국 +운영사 +위성체 제어 시스템 +y 위성의 자세 유지 및 변경, 위성궤도 제어, 운영상태 모니터링, 임무 관리 및 +지원, 운영 중 발생할 수 있는 긴급상황 대응 등의 기능을 수행하는 시스템 +y 다음 기능 수행 +- 위성의 자세 유지 및 변경 +- 위성궤도 제어 +- 위성 운영상태 모니터링 +- 위성 임무관리 및 지원 +- 위성 운영 중 발생할 수 있는 긴급상황 대응 +위성체 운영 +소프트웨어 개발 +서버 +y 위성의 자세 및 궤도 제어 등 위성 운영과 관련된 소프트웨어를 개발하고 +테스트하는 시스템 +y 위성 운영 관련 소프트웨어 개발 및 테스트 수행 +탑재체 제어 시스템 +y 위성에 장착된 탑재체의 수행 계획, 제어, 모니터링 및 평가 등의 기능을 +수행하는 시스템 +y 탑재체 수행 계획, 제어, 모니터링 및 평가 수행 +탑재체 운영 +소프트웨어 개발 서버 +y 탑재체 제어 및 운용을 위한 소프트웨어를 개발하고 테스트하는 서버 +y 탑재체 제어 및 운용 소프트웨어 개발 및 테스트 수행 +위성 소프트웨어 +업데이트 서버 +y 위성에 탑재된 소프트웨어를 원격으로 업데이트하거나 패치를 적용할 수 +있는 시스템 +y 위성 탑재 소프트웨어 원격 업데이트 및 패치 적용 +라이브러리 +DB +y 공통으로 사용하는 오픈소스, 라이브러리, 알고리즘, 모듈 등의 자산을 +중앙에서 저장하고 공유할 수 있는 DB +y 공통으로 사용하는 자산의 중앙 저장, 관리, 공유 지원 +코드 DB +y 자체 개발한 라이브러리, 알고리즘, 모듈 등의 자산을 중앙에서 저장하고 +공유할 수 있는 DB +y 자체 개발 소스코드 중앙 저장, 관리, 공유 + +--- + +28 | 우주 보안 모델 +(3) 위성 운영사 영역 +위성 운영사 영역은 위성 운영 단계의 주체 중 하나로, 위성으로부터 수신한 탑재체 데이터를 +분석하고 가공하여 다양한 목적에 활용할 수 있는 형태로 변환한다. 가공된 데이터를 기반으로 +다양한 위성 활용 서비스를 제공하며, 위성 운영 과정에서 생성된 데이터를 활용하여 서비스를 +구현하고 제공하는 영역이다. +위성 운영사 영역 구성요소에 대한 설명은 아래 표와 같다. +표 9 +위성 운영사 영역 구성요소 +구분 +구성요소 +설 명 +위성 +운영사 +위성활용 시스템 +y 위성으로부터 수집된 데이터를 수신하고, 분석 및 재처리된 위성 데이터를 +사용자에게 제공하는 시스템 +y 수집된 데이터의 저장 및 통합 관리 수행 +위성 활용 서비스 +소프트웨어 개발 +서버 +y 위성으로부터 수집된 데이터를 활용하는 위성 데이터 기반 서비스 +소프트웨어를 개발 및 테스트하는 시스템 +y 위성 데이터 기반 서비스 소프트웨어 개발 +탑재체 데이터 처리 +및 가공 시스템 +y 인공위성에서 지상국으로 다운로딩한 데이터를 서비스 목적에 맞게 +재처리 및 분석하는 시스템 +y 수신된 원시 데이터 재처리(보정/노이즈 제거/포맷 변환 등) +y 전처리된 데이터를 기반으로 위성 서비스 목적에 맞는 분석(영상 분류, +특징 추출, 변화 탐지, 통신 신호 분석, 데이터 모델링 등) +탑재체 데이터 처리 +및 가공 소프트웨어 +개발 서버 +y 탑재체 데이터 처리 및 가공을 위한 소프트웨어를 개발하고 테스트하는 +서버 +y 탑재체 데이터 처리 및 가공을 위한 소프트웨어 개발 및 테스트 +라이브러리 DB +y 공통으로 사용하는 오픈소스, 라이브러리, 알고리즘, 모듈 등의 자산을 +중앙에서 저장하고 공유할 수 있는 DB +y 공통으로 사용하는 자산의 중앙 저장, 관리, 공유 지원 +코드 DB +y 자체 개발한 라이브러리, 알고리즘, 모듈 등의 자산을 중앙에서 저장하고 +공유할 수 있는 DB +y 자체 개발 소스코드 중앙 저장, 관리, 공유 + +--- + + +## 제2장 우주 아키텍처 | 29 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +나. 우주 공급망 아키텍처 데이터 흐름 +우주 공급망 아키텍처를 구성하는 위성/발사체 제조사, 지상국 운영사, 위성 운영사 영역 간 +하드웨어와 소프트웨어 납품 경로를 포함한 데이터 흐름을 분석하였다. +위성의 설계/개발부터 준비/조립, 운영 단계에 거쳐 우주 공급망 아키텍처의 각 영역의 데이터 +흐름을 표현한 그림은 아래와 같다. +그림 7 +우주 공급망 아키텍처 데이터 흐름 +우주 공급망 아키텍처의 데이터 흐름은 부품사로부터 조달받은 부품으로 위성을 +제조·납품하고, 위성에 탑재되는 소프트웨어 업데이트 파일을 위성으로 전송하는 과정에서 +송수신되는 데이터 흐름을 기술한다. +위성/발사체 제조사는 부품사로부터 자세 및 궤도 제어 장비, 탑재체 장비, 온보드 +컴퓨터(OBC) 등 위성/탑재체/발사체 제작에 필요한 하드웨어와 부품의 품질 검사 결과 및 사양 +정보를 포함한 기술사양서, 인터페이스 규격(ICD), 시험 레포트, 운영 문서 등 관련 데이터를 + +--- + +30 | 우주 보안 모델 +조달받아 위성, 탑재체, 발사체를 제작한다. (①) 위성/발사체 제조사는 제작이 완료된 위성과 위성 +시스템 사양서, 위성 시스템 구성도, 위성 운영 매뉴얼, 위성 소프트웨어 설명 및 버전 관리 문서 +등을 포함한 관련 데이터를 위성 운영사로 납품한다. (②) +위성 소프트웨어 결함 발견 혹은, 소프트웨어 개발에 사용된 오픈소스 라이브러리의 업데이트 +등 위성 소프트웨어 업데이트 필요 시, 위성/발사체 제조사 및 협력 개발사가 작성한 업데이트 +파일을 지상국 운영사로 전달한다. (③) 지상국 운영사는 소프트웨어 업데이트 파일을 위성으로 +전송하여(④) 위성 소프트웨어 업데이트를 수행한다. + +--- + + +## 제2장 우주 아키텍처 | 31 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +우주 보안 위협 + +## 1. 우주 보안 위협 도출 절차 + + +## 2. GSaaS 보안 위협 + + +## 3. 우주 공급망 보안 위협 + +제 3 장 + +--- + +32 | 우주 보안 모델 +본 장에서는 우주 보안 위협에 대해 기술한다. GSaaS 아키텍처 및 우주 공급망 아키텍처에 +존재할 수 있는 보안 위협을 세분화하여 살펴보고, 우주 대표 보안 위협 유형 세 가지를 선정하여 +각 보안 위협 유형별로도 분석한다. 우주 보안 위협 내용은 다음과 같이 네 부분으로 기술하였다. + +## 1. 우주 보안 위협 도출 절차에서는 보안 위협을 도출하는 절차를 설명한다. + +2. ‌GSaaS 보안 위협에서는 GSaaS 아키텍처에서 표현한 구성요소 중 통신구간, 안테나 영역, +지상국-클라우드 영역, 위성 운영사 영역의 구성요소에서 발생할 수 있는 보안 위협을 +도출한다. +3. ‌우주 공급망 보안 위협에서는 우주 공급망 아키텍처에서 표현한 위성/발사체 제조사 영역, +지상국 운영사 영역, 위성 운영사의 구성요소에서 발생할 수 있는 보안 위협을 도출한다. +4. ‌우주 보안 위협 시나리오에서는 GSaaS 및 우주 공급망 환경에서 발생할 수 있는 6가지 보안 +위협 시나리오를 도출한다. + +## 제3장 + +우주 보안 위협 + +--- + + +## 제3장 우주 보안위협 | 33 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +제1절 +우주 보안 위협 도출 절차 +우주 보안 위협은 공격자가 공격을 시작하는 공격 벡터6와 공격대상, 공격 기법을 정의하고 +GSaaS 및 우주 공급망에 부정적인 영향을 줄 수 있는 보안 위협을 도출했다. 우주 보안 +위협은 아래 그림과 같이 4단계로 진행하여 도출하였으며, GSaaS 및 우주 공급망에 동일하게 +적용하였다. +그림 8 +보안 위협 도출 절차 +6 ‌공격 벡터(attack vector) : 공격자가 컴퓨터나 네트워크에 침입하기 위해 사용하는 진입 경로와 방법 + +--- + +34 | 우주 보안 모델 +공격대상은 GSaaS 및 우주 공급망 구성요소로서 각 구성요소에 대한 설명은 2장의 2. GSaaS + +### 아키텍처 3. 우주 공급망 아키텍처를 참조한다. 공격 벡터 및 주요 발생 요인에 대한 내용은 아래 + +표와 같다. +표 10 +공격 벡터 및 발생 요인 +공격 벡터 +발생 요인 +위성서비스 +통신구간 +y 위성과 지상국 안테나간 도청, 정보 가로채기, 재밍이 가능한 경우 +y 지상국 안테나와 지상국간 도청, 정보 가로채기가 가능한 경우 +y 지상국 안테나와 클라우드간 도청, 정보 가로채기가 가능한 경우 +y 지상국 안테나와 위성 운영사간 도청, 정보 가로채기가 가능한 경우 +y 클라우드와 지상국간 도청, 정보 가로채기가 가능한 경우 +y 클라우드와 위성 운영사간 도청, 정보 가로채기가 가능한 경우 +y 지상국과 위성 운영사간 도청, 정보 가로채기가 가능한 경우 +지상국 장비 +y 지상국의 소프트웨어 취약점(CCE)을 이용한 공격이 가능한 경우 +y 지상국 시스템의 취약점(CVE), 취약한 보안설정(계정, 인증, 권한 등)을 이용한 공격이 가능한 경우 +y 암호화 미적용 또는 취약한 암호화 알고리즘을 사용한 경우 +y 지상국 시스템의 접근통제 취약 등으로 지상국 내부의 공격이 가능한 경우 +y 외부에서 인터넷 경로를 활용하여 위성서비스 장비 침투가 가능한 경우 +y 외부에 알려진 정보 또는 서비스를 활용하여 위성서비스 장비 접속이 가능한 경우 +y 유지보수를 위한 위성서비스 장비 원격접속 채널로 내부 침투가 가능한 경우 +위성 서비스 +운영자 +y 위성 운영자 실수 등에 의한 경우 +y 위성 운영자의 의도적인 권한 탈취로 비인가 작업이 가능한 경우 +y 위성 운영자가 의도적으로 중요 정보를 유출하거나 훼손하는 경우 +위성서비스 +시설 +y 장비 및 설비 운영장소에 물리적으로 접근이 가능한 경우 +y 물리적으로 접근하여 장비 훼손이 가능한 경우 +y 물리적인 접근통제 취약으로 시스템 침해가 가능한 경우 +우주SW +개발사 +y 테스트/디버깅 계정 미삭제 +y 우주SW 개발 시 빌드 파이프라인에 악성코드 감염 +y 우주SW 개발 시 악성코드가 포함된 오픈 소스 사용 +y 계정, 패스워드 등 하드코딩된 인증 정보 사용 +y 클라우드 환경 시 IAM키 관리 미흡으로 인한 클라우드 접근통제 미흡 +y 취약한 클라우드 사용 +y 코드 및 라이브러리 DB에 악성코드 감염 +y 악성코드가 포함된 IDE 플러그인 사용 +y 지상국 운영사 원격 유지보수 시 취약한 채널 사용 +위성제조사 +y 코드 및 라이브러리 DB에 악성코드 감염 +y 우주SW 개발 시 악성코드가 포함된 오픈 소스 사용 + +--- + + +## 제3장 우주 보안위협 | 35 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +아래 그림은 보안 위협 도출 과정에 대한 예시이다. 본 예시에서는 악성코드라는 보안 +위협이 위성서비스 운영자를 공격 벡터로 하여 예약 및 스케줄링 시스템을 대상으로 웹 쉘 등의 +악성파일을 시스템에 업로드하여 미션 및 스케줄링 장애를 유발하고, 중요정보를 탈취할 수 +있다는 시나리오를 예로 들어 제시하고 있다. +우주 보안 위협을 도출하기 위하여 NIST, BSI 등의 글로벌 보고서와 국외 가이드를 분석하여 +보안 위협을 어떻게 정의하였는지 정리하였다. +그림 9 +보안 위협 도출 예시 +또한, 글로벌 위성 해킹 대회인 Hack-A-Sat을 소개하고 대회에서 출제되었던 문제 중 몇 +문제를 예시로 선정하여 정리하였다. +국외 우주보안 보고서 및 가이드라인에서 제시된 보안 위협은 아래와 같다. +■ 일본 민간 우주시스템 사이버보안대책 가이드라인 +일본의 민간 우주시스템 사이버보안대책 가이드라인에서는 민간 우주 시스템의 보안 위협을 +식별하기 위해, 우주시스템의 구조와 운영 환경을 기반으로 위협 시나리오를 제시한다. + +--- + +36 | 우주 보안 모델 +우주 시스템의 구성요소에 대한 보안 위협을 식별하기 위해, 우주 시스템의 데이터 흐름을 +기반으로 자산에 접근 가능한 경로를 분석하고, 위협 행위자, 침입 경로, 공격 수단, 그리고 그로 +인한 영향을 조합하여 위협 시나리오를 구성하였다. +문서에서는 총 13가지의 위협 시나리오를 제시하며, 대표적으로 표적형 이메일 공격에 의한 +궤도 제어 상실, 통신 도청에 의한 기밀 유출, 랜섬웨어에 의한 지상국 마비, 위성 데이터 위·변조 +등 다양한 사례가 포함된다. +각 시나리오는 위협의 발생 경로와 결과를 명확히 제시하며, 시스템 기능의 저하, 데이터 신뢰성 +훼손, 서비스 중단 등 민간 우주 사업에 미치는 영향을 중심으로 보안 위협을 정의하고 있다. +■ ‌BSI-TR-03184 - Technical Guideline BSI TR-03184 Information Security for +Space Systems +독일 연방 정보보안청(BSI)에서 발간한 기술 지침 BSI TR-03184에서는 우주 시스템의 보안 +위협을 식별하고, 이에 대응하기 위한 보안 조치 매핑표를 포함한 가이드라인을 제시하고 있다. +문서에서는 먼저 위성 시스템의 전체 생애주기(기획, 제조, 시험, 운용, 폐기)를 7개로 구분하고, +각 프로세스에 적용되는 애플리케이션 단위를 정의한 뒤, 해당 애플리케이션에 영향을 줄 수 있는 +위협을 식별한다. +보안 위협은 기밀성(confidentiality), 무결성(integrity), 가용성(availability)에 영향을 +미치는 사건이나 상황으로 정의되며, 각 위협 항목은 고의적 행위, 과실, 기술적 결함, 환경적 +영향 등 원인 유형에 따라 분류된다. 문서에서는 G01(정보의 손실 및 변조), G02(장비 및 매체의 +분실·도난), G05(무단 물리적 접근), G30(시뮬레이터 데이터 변조) 등 다양한 위협 항목을 +제시한다. +위협 식별 결과를 바탕으로, 각 위협에 대응하는 보안 조치를 연결하여 위협·보안조치 매핑표를 +제공함으로써, 실질적인 보안 요구사항을 도출하고 적용할 수 있도록 구성되어 있다. +■ NIST IR 8270 - Introduction to Cybersecurity for Commercial Satellite Operations +NIST IR 8270에서는 소형 위성 운영 기업을 가정한 시나리오를 통해, 위성 시스템의 사이버 +보안 위협을 식별하고 이를 기반으로 보안 요구사항을 도출하는 절차를 설명한다. 문서에서는 +위성 플랫폼과 탑재체, 내부 통신, 명령제어, 데이터 수집 및 전송 과정 등 운영 범위를 정의한 뒤, + +--- + + +## 제3장 우주 보안위협 | 37 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +조직의 핵심 자산(통신 기술, 유도제어, 센서 시스템)에 대한 잠재적 위협과 취약점을 식별했다. +주요 위협으로는 의도적인 재밍 및 스푸핑, 데이터 가로채기 및 도난, 시스템의 고의적 손상, +서비스 거부 공격, 하이재킹 및 무단 명령, 악성 코드 삽입 등이 제시되었다. 각 위협은 통신 기술, +유도제어, 센서 시스템 등 핵심 자산에 연결되며, 위성 운용 기능의 상실, 데이터 신뢰성 저하, +서비스 중단 등 비즈니스에 미치는 영향을 분석하여 위험 수준을 평가한다. 이를 기반으로 NIST +CSF의 구조에 따라 필요한 보안 요구사항을 도출하는 방식으로 구성되어 있다. +Hack-A-Sat은 2020년부터 2023년까지 총 4년간 진행된 위성 해킹 대회로, 미 공군과 +국방부의 주관하에 진행되었다. 위성 소프트웨어·통신 프로토콜·지상국 소프트웨어 등 위성 운영 +전반을 대상으로 문제가 출제되었으며, 2023년에는 실제 위성을 발사하여 대회에 활용하였다. +아래에서는 Hack‑A‑Sat에서 출제된 문제를 예시로 선정하여 각 문제의 목적, 핵심 취약점 및 +풀이 흐름을 정리하였다. +■ [Shutterbug, 사진 애호가], Hack-A-Sat 2023 결승 +본 문제는 위성이 특정 목표를 촬영하도록 조작해 플래그를 얻는 문제로, 위성의 자세 및 카메라 +제어를 조작하여 촬영 명령을 실행하는 것이 목표였다. +문제의 핵심 취약점은 위성 자세 관리와 카메라 제어 인터페이스의 입력값 검증이 부족하여 +카메라 촬영을 허용하는 사전조건들(자세 안정성, 타이밍, 촬영 가능 범위)을 확인하지 않고 촬영 +명령을 실행할 수 있는 것이었다. 해결책은 제공된 제어 API와 위성 상태(현재 자세, 촬영 가능 +창 등)를 분석한 뒤 조작된 명령을 전송하여 촬영이 이루어지면 수신된 이미지에서 플래그를 +획득하는 것이었다. +■ [FAUXY Lady, 가짜 레이디], Hack-A-Sat 2023 예선 +본 문제는 RF 신호 속에 숨겨진 데이터를 복원하는 문제로, 제공된 RF 캡처 파일을 분석하여 +원문 페이로드를 재구성하는 것이 목표였다. +문제의 핵심 취약점은 신호의 프로토콜 정보가 노출되어 변조 및 프레임 식별이 용이했고, +전송 데이터가 암호화되어 있지 않아 신호를 변환한 뒤 재조립하는 것만으로 평문을 얻을 수 있는 +것이었다. 해결책은 제공된 RF 샘플을 정리(노이즈 제거, 프레임 정렬)하고 변조 방식에 맞춰 +해석한 뒤 페이로드를 재조립해 내부 값에서 플래그를 추출하는 것이다. + +--- + +38 | 우주 보안 모델 +■ [Terraforming Mars, 화성 개척하기], Hack-A-Sat 2023 예선 +본 문제는 통신위성이 화성 테라포밍 기지와 안정적으로 통신할 수 있는 위성의 궤도와 미션 +파라미터를 계산하는 문제로, 정해진 형식으로 궤도·시간·미션 파라미터를 계산해 제출하고, +검증을 통과하는 것이 목표였다. +문제의 핵심 취약점은 검사 프로그램(입력을 받아 조건만 확인하는 자동 검사 도구)의 입력 +검증이 엄격하지 않아 정확한 수치값과 포맷만 맞춰 제출하면 검사에 통과된다는 것이었다. 또한, +프로그램의 오류 메시지에 검증 기준을 추측할 수 있는 단서가 포함되어있어 요구항목을 추정할 +수 있었다. 해결책은 오류 메시지를 분석해 요구항목(단위, 필수 필드 등)을 정리하고, 입력값 +생성·제출을 자동화하여 소수점이나 반올림 규칙을 조정해가며 통과 가능한 조합을 찾아 검증을 +통과하면 플래그를 획득하는 것이었다. +■ [Talk to me, Goose, 말해줘, 구스], Hack-A-Sat 2020 예선 +본 문제는 지상국의 텔레메트리·명령 인터페이스를 분석하여 위성 및 서비스의 동작을 +의도적으로 조작하는 문제로, 제공된 티켓과 파일로 호스트에 접속한 뒤, 허용되는 메시지 형식을 +유지한 채 입력값을 조작하여 내부 동작을 조작하여 실행시키는 것이다. +문제의 핵심 취약점은 서버의 입력 검증이 형식(문법)에만 치중되어 있어 허용되는 범위 내에서 +값을 조작하면 의도하지 않은 동작이 발생할 수 있다는 것이었다. 해결책은 문서와 샘플 데이터를 +분석해 입력 형식과 동작 규칙을 파악한 뒤, 필드와 값들을 조작해 스케줄러가 특정 이벤트를 +트리거하도록 유도했고, 그 결과로 노출된 응답에서 플래그를 추출하는 것이었다. + +--- + + +## 제3장 우주 보안위협 | 39 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +제2절 +GSaaS 보안 위협 +GSaaS는 위성과 지상의 통신 기능을 클라우드 환경에서 서비스 형태로 제공하는 구조로, 위성 +통신의 효율성과 확장성을 높일 수 있다는 장점이 있다. 하지만, 위성, 안테나, 지상국, 클라우드, +위성 운영사 등 다양한 영역이 연결된 복합적인 구조로, 기존의 전통적인 지상국보다 보안 위협에 +노출될 가능성이 높다. +GSaaS 아키텍처는 무선 통신 구간과 클라우드 기반의 네트워크 구간이 모두 포함되어 있어 +재밍, 스푸핑, 스니핑 등 무선구간에서의 물리적인 보안 위협과 계정 탈취, 악성코드 감염, 비인가 +접근 등 네트워크 구간에서의 사이버 보안 위협이 동시에 발생할 수 있다. +본 문서에서는 GSaaS 아키텍처를 구성하는 주요 영역을 통신 구간, 안테나 영역, 지상국- +클라우드 영역, 위성 운영사 영역으로 구분하고, 각 영역별로 발생할 수 있는 대표적인 보안 +위협을 식별하였다. + +--- + +40 | 우주 보안 모델 +GSaaS 아키텍처에서 발생할 수 있는 대표적인 보안 위협은 아래 그림과 같다. +그림 10 +GSaaS 보안 위협 + +--- + + +## 제3장 우주 보안위협 | 41 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +다음은 GSaaS 아키텍처 세부 영역에서 발생 가능한 보안 위협을 설명한다. +가. 통신 구간 +통신 구간은 GSaaS 아키텍처 내에서 영역 및 구성요소 간 데이터와 제어신호가 전송되는 모든 +구간을 포함한다. 위성과 지상 인프라, 클라우드 및 운영시스템 등 다양한 연결 경로로 신호를 +전달하는 과정에서 재밍, 스니핑, 스푸핑 등의 공격을 통해 위성 제어 장애를 유발하고, 탑재체 +데이터를 탈취할 수 있으며, 중간자 공격으로 위성으로 전송하는 위성 제어 명령을 변조하여 +위성을 탈취하는 등 다양한 보안 위협이 발생할 수 있다. +통신 구간에서 발생 가능한 보안 위협은 아래 표와 같다. +표 11 +통신 구간 보안 위협 +공격벡터 +대상 +주요 내용 +보안 위협 +위성 서비스 +통신 구간 +위성 장비 +위성 트랜스폰더 전원을 차단하는 임의의 제어명령을 +위성으로 송신하여 위성과 통신 일시 중단 및 마비 +※위성트랜스폰더전원:위성에탑재된신호중계장비.지상 +에서위성으로전송한신호(업링크)를수신하고이를증폭또 +는변환한후다시지상으로송신(다운링크)하는역할수행 +통신 연결 장애 +위성 서비스 +통신 구간 +위성 소프트웨어 +위성 소프트웨어 취약점을 통해 버퍼오버플로우 공격을 +시도하여 위성 제어권 탈취 +소프트웨어 +취약점 또는 +오류 +위성 서비스 +통신 구간 +위성- +안테나 구간 +위성과 안테나 통신 시 메인 데이터 패널에 노이즈를 +발생시켜 위성이 Beacon 모드로 데이터를 송신하게 +만들어 위성 상태 데이터 탈취 +방해 신호 전송 +위성 서비스 +통신 구간 +위성- +안테나 구간 +위성과 안테나간 RF스니핑 공격을 통해 위성에서 +지상으로 전송되는 탑재체 데이터 탈취 +원격 정탐, +도청 +위성 서비스 +통신 구간 +위성- +안테나 구간 +RF스푸핑을 통해 운영중인 위성에 궤도변경 +원격명령을 전송하여 노후위성, 우주쓰레기 등과 +충돌시켜 위성 파손 +장치 및 미디어 +파괴 +위성 서비스 +통신 구간 +위성- +안테나 구간 +지향성 파라볼라 안테나를 통해 재밍공격으로 위성에 +노이즈를 송출하여 위성의 제어명령 수신을 방해하여 +위성 제어 방해 +재밍 +위성 서비스 +통신 구간 +위성- +안테나 구간 +위성 자세 제어 등 위성으로 전송하는 위성제어 명령을 +변조하여 위성 정지 또는 오동작 유발 +정보 조작 + +--- + +42 | 우주 보안 모델 +공격벡터 +대상 +주요 내용 +보안 위협 +위성 서비스 +통신 구간 +안테나- +지상국 구간 +안테나에서 지상국으로 데이터 송신 시 중간자 +공격으로 데이터 수신 및 처리시스템에 변조된 탑재체 +데이터 전송 +메시지 +가져오기 +위성 서비스 +통신 구간 +안테나- +지상국 구간 +중간자 공격으로 위성으로 전송하는 위성 제어명령을 +변조하여 위성 탈취 +메시지 +가져오기 +위성 서비스 +통신 구간 +안테나- +지상국 구간 +스니핑 공격으로 안테나와 지상국 통신 패킷을 +도청하여 위성 탑재체 데이터 탈취 +원격 정탐, +도청 +위성 서비스 +통신 구간 +지상국- +클라우드 구간 +스니핑 공격으로 지상국과 클라우드 통신 패킷을 +도청하여 위성 예약 및 스케줄링 데이터 탈취 +원격 정탐, +도청 +위성 서비스 +통신 구간 +지상국- +클라우드 구간 +유출된 클라우드 접속 VPN 계정을 통해 클라우드의 +예약 및 스케줄링 시스템에 접속하여 안테나 예약 정보 +조작 +정보 조작 +위성 서비스 +통신 구간 +지상국- +클라우드 구간 +지상국과 클라우드 전송구간을 스니핑하여 안테나 예약 +명령을 획득한 후 변조 및 전송하여 안테나 사용 장애 +정보 조작 +위성 서비스 +통신 구간 +위성 운영사- +클라우드 구간 +위성 운영사 및 클라우드 간 스니핑을 통해 IAM키를 +탈취하여 클라우드 버킷을 모두 삭제하여 안테나 예약 +및 스케줄링 서비스 불가 +메시지 +가져오기 +위성 서비스 +통신 구간 +위성 운영사- +클라우드 구간 +위성 운영사에서 클라우드로 보내는 예약 및 스케줄링 +데이터를 변조하여 위성 사용 장애 +정보 조작 +위성 서비스 +통신 구간 +지상국-위성 +운영사 구간 +스니핑 공격으로 지상국과 위성 운영사 통신 패킷을 +도청하여 탑재체 데이터 탈취 +메시지 +가져오기 +위성 서비스 +통신 구간 +지상국-위성 +운영사 구간 +위성 운영사에서 지상국으로 탑재체 데이터 요청 시 +중간자공격을 통해 변조된 탑재체 데이터 전송 +메시지 +가져오기 +위성 서비스 +통신 구간 +지상국-위성 +운영사 구간 +위성 운영사에 미션 명령을 지상국으로 전송 시 중간자 +공격을 통해 관측 요청에 변조된 Calibration 플래그를 +삽입하여 촬영 대신 셔터OFF 명령을 전송하여 미션 +실패 +장치 또는 +애플리케이션 +조작 + +--- + + +## 제3장 우주 보안위협 | 43 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +나. 안테나 영역 +안테나 영역은 위성과 지상의 신호를 송수신하는 구간으로, 위성 운영에 필요한 명령과 +데이터를 교환하는 과정에서 협대역 톤을 방출하는 간섭기를 드론을 통해 안테나 보호구역에 +침투시키는 등의 공격으로 위성과 안테나 통신을 교란하는 등의 보안 위협이 존재할 수 있다. +안테나 영역에서 발생 가능한 보안 위협은 아래 표와 같다. +표 12 +안테나 영역 보안 위협 +공격벡터 +대상 +주요 내용 +보안 위협 +위성 서비스 +통신구간 +위성-안테나 +구간 +특정 협대역 톤을 지속 방출하는 간섭기를 탑재한 +드론을 안테나 보호구역에 침투시켜 RFI(Radio +Frequency Interference) 공격을 통해 위성과 +안테나 통신을 교란 +방해 신호 전송 +지상국 장비 +안테나 +제어시스템 및 +관리서버 +안테나 제어시스템 및 라우터 취약점을 통해 +DoS공격으로 서비스 거부 상태를 만들어 지상국 +네트워크 장애 +서비스 거부 +지상국 장비 +안테나 +제어시스템 및 +관리서버 +공개된 취약점을 통해 안테나 제어시스템에 접근하여 +Replay 공격으로 위성 제어 명령을 전송하여 위성 +제어권 탈취 +소프트웨어 취약점 +또는 오류 +지상국 장비 +안테나 +제어시스템 및 +관리서버 +스푸핑 공격을 통해 안테나 제어시스템에 변조된 +데이터를 전송하여 안테나 오작동을 통한 통신 장애 +스푸핑 +지상국 장비 +안테나 +제어시스템 및 +관리서버 +안테나 영역의 관리서버 계정의 취약한 패스워드를 +Guessing 공격으로 탈취하여 관리서버에 접속 후 +지상국/클라우드/위성 운영사간 통신 설정 변경, +위성 송수신데이터 전송 장애 유발 +IT 시스템, +애플리케이션, +정보에 대한 무단 +접근/무단 사용 +지상국 장비 +안테나 +제어시스템 및 +관리서버 +백도어가 설치되어 있는 비인가 단말을 안테나 +네트워크에 설치하여 관리서버에 대한 공격을 통해 +위성 통신 장애 유발 +네트워크로 연결된 +IT 시스템이나 +애플리케이션의 +논리적 손상 +지상국 장비 +안테나 +제어시스템 및 +관리서버 +악성코드에 감염된 비인가 USB를 관리서버에 삽입, +랜섬웨어에 감염으로 인한 위성 제어 및 탑재체 +데이터 송수신 장애 +악성코드 + +--- + +44 | 우주 보안 모델 +공격벡터 +대상 +주요 내용 +보안 위협 +위성 서비스 +운영자 +안테나 +제어시스템 +지상국 운영사 내부 직원이 안테나 제어시스템 +관리자 권한을 획득, 고의로 잘못된 위성 위치를 +추적하도록 만들어 실제 위성과 통신 장애 유발 +권한 남용 +위성 서비스 +시설 +안테나 +안테나 보호구역에 무단으로 침입하여 안테나를 +물리적으로 훼손하여 통신 장애 +건물 내 무단 침입 +위성 서비스 +시설 +안테나 +안테나 유지보수 엔지니어가 타 업체가 관리하는 +관리서버 네트워크에 비인가 탭 장비를 무단으로 +부착하여 탑재체 데이터 탈취 +건물 내 무단 침입 +위성 서비스 +시설 +안테나 +폭발물을 탑재한 드론을 안테나 보호구역에 침투시켜 +안테나를 물리적으로 파괴 +장치 및 미디어 +파괴 +위성 서비스 +시설 +안테나 +정전으로 안테나 운영이 불가 하여 위성 통신 장애 +정전 또는 중단 +위성 서비스 +시설 +안테나 +안테나 보호 구역에 화재가 발생하여 위성 통신 장애 +화재 +위성 서비스 +시설 +안테나 관리서버 +안테나 라우터에 항온/항습 관리가 미흡하여 장비가 +손상되어 안테나 지역 네트워크 통신 장애 +장치 및 미디어 +파괴 +위성 서비스 +시설 +안테나 관리서버 +비인가자가 안테나 라우터에 무단으로 접근하여 통신 +케이블을 훼손하여 지상국과 통신 장애 +IT 시스템에 대한 +무단 접근 +다. 지상국-클라우드 영역 +위성의 자세 및 궤도를 제어하고, 통신을 위한 스케줄을 예약하는 지상국-클라우드 영역에서는 +악성코드 감염, 위성 제어 및 운용을 위한 데이터 변조, 비인가자 접근 등으로 인해 위성 운용에 +장애가 발생하거나, 위성의 제어권을 탈취당하는 등의 보안 위협이 발생할 수 있다. + +--- + + +## 제3장 우주 보안위협 | 45 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +지상국-클라우드 영역에서 발생 가능한 보안 위협은 아래 표와 같다. +표 13 +지상국-클라우드 영역 보안 위협 +공격벡터 +대상 +주요 내용 +보안 위협 +지상국 장비 +예약 및 스케줄링 +시스템 +웹쉘 등 악성파일을 시스템에 업로드하여 미션 +및 스케줄링 장애 유발 및 중요정보 탈취 +악성코드 +지상국 장비 +미션제어 및 +운영지원 시스템 +공개된 취약점을 통해 미션제어 및 운영지원 +시스템에 접근하여 미션제어 데이터 탈취 +IT 시스템 또는 +애플리케이션의 오작동 +지상국 장비 +클라우드 +IAM인증키 +미흡한 클라우드 IAM관리로 비인가자가 지상국 +내부자가 유출한 클라우드 IAM 인증키를 +공격자가 획득하여 버킷 인덱싱으로 예약 및 +스케줄링 데이터 탈취 +정보 염탐 +지상국 장비 +지상국 라우터 +지상국 라우터 운영자가 라우터 설정 시 잘못된 +네트워크 구성으로 지상국 내부 네트워크 장애 +IT 시스템 또는 +애플리케이션의 오작동 +지상국 장비 +지상국 라우터 +지상국 라우터에 취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 지상국 네트워크 장애 +서비스 거부 +지상국 장비 +지상국 라우터 +스푸핑 공격을 가하여 위성 운영사가 +위성서비스 제공을 위해 탑재체 데이터를 +분석한 중요정보 탈취 +스푸핑 +지상국 장비 +지상국 라우터 +지상국 임직원이 분실한 DB분석 및 시각화 +시스템 접근이 가능한 노트북을 획득하여 +탑재체 데이터 탈취 +장치/미디어/문서 손실 +지상국 장비 +지상국 라우터 +지상국 라우터 관리콘솔에 취약하게 설정된 +계정/패스워드를 통해 접속하여 라우팅 정보를 +변경하여 지상국 네트워크 장애 +정보 조작 +지상국 장비 +위성운영 및 +탑재체 데이터 +인가되지 않은 침입자가 데이터 수신 및 +처리시스템 랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 관측 데이터 탈취 +IT 시스템에 대한 무단 +접근 +지상국 장비 +위성운영 및 +탑재체 데이터 +위성 제어 및 미션 관련 중요 데이터가 저장되어 +있는 USB를 분실 또는 도난당하여 중요정보 +노출 +기기/미디어/문서 도난 +지상국 장비 +위성운영 및 +탑재체 데이터 +데이터 수신 및 처리시스템에 과도한 데이터가 +수신되어 디스크 용량이 부족하여 탑재체 제공 +서비스 장애 +용량 부족 + +--- + +46 | 우주 보안 모델 +공격벡터 +대상 +주요 내용 +보안 위협 +지상국 장비 +궤도 제어시스템 +외부에 공개된 궤도 제어시스템에 취약하게 +설정된 계정/패스워드를 Guessing 공격으로 +탈취하여 접속 후 임의로 궤도룰 수정하여 위성 +탈취 +IT 시스템, 애플리케이션, +정보에 대한 무단 +접근/무단 사용 +지상국 장비 +궤도 제어시스템 +백도어가 설치되어 있는 비인가 단말을 지상국 +네트워크에 설치하여 궤도 제어시스템에 대한 +공격을 통해 위성 제어 장애 유발 +네트워크로 연결된 +IT 시스템이나 +애플리케이션의 논리적 +손상 +지상국 장비 +궤도 제어시스템 +운영자가 위성 회전 명령을 오입력하여 위성의 +카메라가 대상 지역을 벗어나 미션 수행 실패 +네트워크로 연결된 +IT 시스템이나 +애플리케이션의 논리적 +손상 +지상국 장비 +궤도 제어시스템 +악성코드에 감염된 비인가 USB를 업무용 +단말에 삽입 후 위성 제어시스템에 랜섬웨어가 +전파되어 위성 제어 장애 +악성코드 +지상국 장비 +궤도 제어시스템 +위성 제어시스템에 랜섬웨어를 감염시켜 위성 +제어시스템 장애로 위성 제어 불능 +악성코드 +지상국 장비 +탑재체 데이터 +서비스 시스템 +DoS 공격을 통해 위성 탑재체 제공 서비스 장애 +유발 +서비스 거부 +지상국 장비 +탑재체 데이터 +서비스 시스템 +공개된 취약점을 통해 탑재체 데이터 서비스 +시스템에 접근하여 탑재체 데이터 탈취 +소프트웨어 취약점 또는 +오류 +위성 서비스 +운영자 +관리서버 +관리서버 운영자가 공개 세미나 또는 포럼에 +회사 기술현황을 설명하면서 의도치 않게 +관리서버 IP 또는 회사 네트워크 구성이 +노출되어 악의적 공격자에 의해 관리서버가 +공격당함 +의도치 않은 정보 누설 +위성 서비스 +운영자 +탑재체 데이터 +서비스 시스템 +악성메일 등을 통해 위성 운영사 임직원 PC에 +악성코드 감염 후 탑재체 위성 운영사의 탑재체 +데이터 처리 및 가공 시스템과 연동하는 지상국 +데이터 서비스 시스템에 전파되어 탑재체 +서비스 장애 +악성코드 +위성 서비스 +운영자 +탑재체 데이터 +서비스 시스템 +원격접속 악성코드에 감염되어 있는 위성 +운영사 임직원 PC를 통해 원격으로 연결되는 +지상국의 미션제어 및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +악성코드 + +--- + + +## 제3장 우주 보안위협 | 47 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +공격벡터 +대상 +주요 내용 +보안 위협 +지상국 장비 +관측요청 +접수시스템 +스푸핑 공격을 통해 관측요청 접수시스템에 +변조된 명령을 전송하여 잘못된 위성 명령 전송 +스푸핑 +지상국 장비 +탑재체 DB +스피어 피싱, 악성메일 등을 통해 지상국 직원 +PC에 악성코드 감염 후 내부 네트워크에 +전파하여 탑재체 데이터 등 중요정보 암호화 및 +위성 제어 장애 +악성코드 +지상국 장비 +탑재체 DB +악성코드에 감염된 비인가 USB를 탑재체 +데이터 및 위성운영 서버/단말에 삽입하여 +랜섬웨어 감염 및 전파 +악성코드 +지상국 장비 +탑재체 DB +관측요청 접수시스템 DB용량이 부족하여 위성 +운영사에서 전송하는 요청을 저장하지 못해 +미션 수행 장애 +용량 부족 +지상국 장비 +탑재체 DB +공개된 취약점을 통해 탑재체 DB가 랜섬웨어에 +감염되어 탑재체 데이터 암호화 +정보 손실 +지상국 장비 +긴급 대응 및 +위기관리 시스템 +긴급 대응 및 위기관리 시스템에 DoS공격을 +통해 경고 알림이 발생하지않도록 하여 위성 +긴급 상황 시 대처 불가 +서비스 거부 +위성 서비스 +운영자 +관리서버 +관리서버 운영자의 운영 미숙으로 관리서버 +소프트웨어 업데이트 시 에러가 발생하여 위성 +통신 장애 +장비 또는 미디어 손상 +위성 서비스 +운영자 +미션제어 및 +운영지원 시스템 +위성 미션 및 운영 담당자가 불법적인 금품을 +받고 위성 궤도를 임의 조작하여 위성 제어권 +양도 +강압, 강탈 또는 부패 +위성 서비스 +운영자 +미션제어 및 +운영지원 시스템 +미션제어 및 운영지원 시스템에 취약하게 +설정된 계정/패스워드를 Guessing 공격으로 +탈취하여 접속 후 미션 및 스케줄링 데이터 탈취 +IT 시스템, 애플리케이션, +정보에 대한 무단 +접근/무단 사용 +위성 서비스 +운영자 +미션제어 및 +운영지원 시스템 +원격접속 악성코드에 감염되어 있는 지상국 +임직원 PC를 통해 미션제어 및 운영지원 시스템 +계정을 탈취하여 미션 및 스케줄링 데이터 삭제 +직원의 안전 관련 부정 +행위 +위성 서비스 +운영자 +DB분석 및 +시각화 시스템 +탑재체 데이터 분석 담당자가 불법적인 금품을 +받고 고객의 DB분석 및 시각화 데이터 유출 +강압, 강탈 또는 부패 +위성 서비스 +운영자 +탑재체 DB +지상국과 위성 운영사간 VPN 계정 패스워드를 +직원의 보안인식 미흡으로 취약하게 설정되어 +공격자에게 탑재체 데이터 탈취 당함 +직원의 안전 관련 부정 +행위 + +--- + +48 | 우주 보안 모델 +공격벡터 +대상 +주요 내용 +보안 위협 +위성 서비스 +운영자 +위성 제어시스템 +비인가된 내부 임직원이 위성제어시스템 관리자 +계정을 탈취하여 위성 제어권 탈취 및 오동작 +유발 +권한 남용 +위성 서비스 +시설 +지상국 +정전으로 인해 지상국 상황실 운영이 불가하여 +탑재체 수집 및 위성 운영 장애 +정전 또는 중단 +위성 서비스 +시설 +지상국 +지상국 상황실에 화재가 발생하여 탑재체 수집 +및 위성 운영 장애 +화재 +위성 서비스 +시설 +데이터 수신 및 +처리시스템 +지상국 서버룸에 무단침입하여 데이터 수신 및 +처리시스템을 물리적으로 훼손하여 위성 서비스 +장애 +건물 내 무단 침입 +위성 서비스 +시설 +위성 제어시스템 +위성 운영실에 무단으로 침입하여 위성 +제어시스템에 접근 후 제어 설정을 변경하여 +위성 제어 장애 +건물 내 무단 침입 +위성 서비스 +시설 +미션제어 및 +운영지원 시스템 +항온항습기 고장으로 서버실이 과열되어 +미션제어 및 운영지원 서버 CPU Tjmax에 +도달하여 위성 운영 장애 +유해한 환경적 영향 +위성 서비스 +시설 +관측요청 +접수시스템 +내부직원이 관측요청 접수시스템 네트워크 +케이블을 훼손하여 통신장애로 인해 위성 +운영사에서 전송하는 관측요청 접수 불가 +기물 파손 +위성 서비스 +시설 +긴급 대응 및 +위기관리 시스템 +내부직원이 긴급대응 및 위기관리 시스템 +서버를 물리적으로 파손하여 위성 긴급상황 +발생 시 대응 불가 +기물 파손 + +--- + + +## 제3장 우주 보안위협 | 49 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +라. 위성 운영사 영역 +위성 운영사 영역에서는 GSaaS 접속시스템 계정을 획득한 비인가자가 예약 및 스케줄링 +시스템에 무단으로 접속하여 위성 통신 일정 및 예약 데이터, 임무 명령 등의 데이터를 변조하는 +등의 보안 위협이 존재할 수 있다. +위성 운영사 영역에서 발생 가능한 보안 위협은 아래 표와 같다. +표 14 +위성 운영사 영역 보안 위협 +공격벡터 +대상 +주요 내용 +보안 위협 +지상국 장비 +GSaaS 접속 +시스템 +GSaaS 접속 시스템 초기 구축 시 발급된 디폴트 +관리자 계정/패스워드를 통해 공격자가 외부에서 +접속하여 위성 제어권 및 중요정보 탈취 +소프트웨어 +취약점 또는 오류 +위성 서비스 시설 +위성 운영사 +정전으로 인해 GSaaS 접속 시스템 운영 불가로 +위성 서비스 제공에 차질 +정전 또는 중단 +위성 서비스 시설 +위성 운영사 +위성 운영사에 화재가 발생하여 위성 서비스 +제공에 차질 +화재 + +--- + +50 | 우주 보안 모델 +제3절 +우주 공급망 보안 위협 +우주 공급망 아키텍처는 위성의 설계/개발부터 운영까지의 단계를 위성/발사체 제조사, 지상국 +운영사, 위성 운영사가 연계된 주체로 구성한다. +설계/개발 단계에서 삽입된 악성코드나 악의적인 백도어는 위성의 임무 수행 및 통신에 +직접적인 장애를 초래할 수 있으므로, 위성 본체와 발사체를 포함한 모든 하드웨어, 그리고 운영 +및 제어를 위한 시스템과 소프트웨어를 개발 및 납품하는 모든 과정은 위성 임무 수행의 성공과 +직결된다. +본 문서에서는 우주 공급망 아키텍처에서 발생할 수 있는 보안 위협을 위성/발사체 제조사 +영역, 지상국 운영사 영역, 위성 운영사 영역으로 구분하고, 영역별로 발생할 수 있는 대표적인 +보안 위협을 도출하였다. +우주 공급망 아키텍처의 각 영역에서 발생할 수 있는 대표적인 보안 위협은 아래 그림과 같다. + +--- + + +## 제3장 우주 보안위협 | 51 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +그림 11 +우주 공급망 보안 위협 + +가. 위성/발사체 제조사 영역 +위성/발사체 제조사 영역은 부품사를 통해 조달받은 부품 및 데이터를 활용하여 위성 본체와 +탑재체, 발사체를 제작하고, 탑재 소프트웨어와 지상국 운영 및 탑재체 데이터 처리를 위한 +시스템을 개발하는 영역이다. + +--- + +52 | 우주 보안 모델 +위성/발사체 제조사 영역의 소프트웨어 개발 과정 중 악성코드나 백도어가 삽입되면, 감염된 +시스템을 통해 위성 임무를 방해하거나, 변조된 제어 명령으로 위성을 탈취하는 등 보안 위협이 +발생할 수 있다. +위성/발사체 제조사 영역에서 발생 가능한 보안 위협은 아래 표와 같다. +표 15 +위성/발사체 제조사 영역 보안 위협 +공격벡터 +대상 +주요 내용 +보안 위협 +우주 +SW 개발사 +우주 SW +개발PC +위성체 SW개발자가 악성코드가 포함된 +IDE(Integrated Development Environment) +플러그인을 사용해 위성제어 SW를 개발하여, +위성 시스템에 악성코드 전파 및 제어권 탈취 +악성코드 +우주 +SW 개발사 +위성 제어시스템 +위성체 제어시스템 도입 시 테스트/디버그 계정을 +삭제하지 않아, 계정/패스워드를 탈취한 공격자가 +위성체 제어시스템에 무단으로 접속하여 위성 +제어권 탈취 +의도치 않은 정보 +누설 +우주 +SW 개발사 +위성활용 시스템 +위성활용 시스템 업데이트를 위한 Cron/Task +Scheduler 등록시 내부 임직원이 악의적으로 +외부 C&C서버 접속명령을 등록하여 주기적으로 +페이로드 데이터 탈취 +IT 시스템, +애플리케이션, 정보에 +대한 무단 접근/무단 +사용 +위성 제조사 +위성제어SW +위성체 제어를 위한 온 보드 컴퓨터의 펌웨어 +라이브러리에 백도어를 삽입하여 위성이 +궤도진입을 확인 후 별도 안테나를 통해 위성체를 +제어하여 위성 탈취 +악성코드 +위성 제조사 +위성제어SW +공격자가 위성제조사 코드DB에 침투하여 위성 +궤도 및 자세를 제어하는 상수 변수를 조작하고, +변조된 위성제어SW가 지상국 운영사에 납품되면 +소규모 드리프트가 발생하여 위성 제어 장애 유발 +장치 또는 +애플리케이션 조작 +위성 제조사 +페이로드SW +위성 페이로드SW 개발 시 테스트 편의상 사용한 +MASTER_KEY(인증정보) 외부 상수 변수를 +제거하지 않고 위성에 탑재한 후 공격자가 외부 +변수를 수집하여 위성 페이로드SW에 직접 +접근하여 페이로드 데이터 탈취 +의도치 않은 정보 +누설 +위성 제조사 +페이로드SW +공격자가 위성제조사 라이브러리DB에 침투하여 +로직밤 악성코드를 페이로드SW 삽입하여 위성 +궤도에 오른 후 로직밤을 활성화 시켜 미션 수행 +장애 +악성코드 + +--- + + +## 제3장 우주 보안위협 | 53 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +나. 지상국 운영사 영역 +지상국 운영사 영역에서는 취약한 오픈소스나 백도어가 삽입된 이미지를 사용하여 탑재체 +운영 서버 또는 제어시스템을 개발하는 경우, 공격자의 원격 공격으로 인해 탑재체 데이터 유출, +위성 제어권 탈취, 랜섬웨어 감염 등의 보안 위협이 발생할 수 있다. 또한, 소프트웨어 업데이트 +과정에서의 RF 스푸핑 등의 공격으로 변조된 데이터가 위성으로 전송되어 장애가 발생하는 등의 +보안 위협이 존재할 수 있다. +지상국 운영사 영역에서 발생 가능한 보안 위협은 아래 표와 같다. +표 16 +지상국 운영사 영역 보안 위협 +공격벡터 +대상 +주요 내용 +보안 위협 +우주 +SW 개발사 +위성 제어시스템 +지상국 서비스 SW 개발환경(IDE, CI/CD)의 +빌드 파이프라인에 백도어 모듈을 삽입하는 +플러그인이 설치되어 지상국 운영사에 납품후 +위성 제어시스템이 C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +악성코드 +우주 +SW 개발사 +위성 제어시스템 +지상국 운영사 개발자가 악성 애플리케이션이 +설치된 개인용 모바일 테블릿을 GSaaS 모바일 +앱 개발을 위해 설치된 내부 무선망에 접속, 해당 +기기를 통해 공격자가 내부망에 백도어형 악성 +코드 유포 소스코드 등 중요 정보 유출 +악성코드 +우주 +SW 개발사 +탑재체 +제어시스템 +공격자가 지상국 클라우드 개발환경에서 운영환경 +접근권한이 있는 IAM키를 탈취하여 위성활용 +시스템에 무단으로 접속하여 탑재체 데이터 탈취 +의도치 않은 정보 +누설 +우주 +SW 개발사 +탑재체 +제어시스템 +악의적인 우주SW개발사 임직원이 RCE취약점이 +있는 오픈소스를 추가하고 SBOM을 위조하여 +납품, 지상국 탑재체 제어시스템에 원격으로 +접속하여 미션 수행에 장애 유발 +네트워크로 연결된 +IT 시스템이나 +애플리케이션의 +논리적 손상 +우주 +SW 개발사 +탑재체 +제어시스템 +지상국 운영사에서 지상국시스템 자체 개발 +시 커널 권한 상승 취약점이 있는 오픈 소스를 +사용하여 공격자가 원격 공격을 통해 권한을 +상승시켜 페이로드 데이터 탈취 +네트워크로 연결된 +IT 시스템이나 +애플리케이션의 +논리적 손상 +우주 +SW 개발사 +탑재체 +제어시스템 +지상국에서 탑재체 제어시스템 자체 개발 시 +백도어가 삽입되어 있는 공개된 Docker Hub +이미지를 사용하여 공격자가 원격접속 후 +랜섬웨어를 통해 미션 수행 장애 발생 +악성코드 + +--- + +54 | 우주 보안 모델 +공격벡터 +대상 +주요 내용 +보안 위협 +우주 +SW 개발사 +탑재체 +제어시스템 +지상국에서 탑재체 제어시스템을 자체 개발 +시 RCE 취약점이 있는 오픈 소스를 사용하여 +공격자가 원격접속 후 제어권 탈취 +네트워크로 연결된 +IT 시스템이나 +애플리케이션의 +논리적 손상 +우주 +SW 개발사 +위성 제어시스템 +위성 제어시스템 유지보수 엔지니어가 이메일을 +통해 키로거 악성코드에 감염되어 공격자가 +지상국 위성 제어시스템 계정을 탈취후 위성 제어 +장애 +의도치 않은 정보 +누설 +우주 +SW 개발사 +위성 제어시스템 +위성 제어시스템 패치 시 악성코드에 감염된 +USB를 삽입하여 위성체 운영 SW 서버가 +랜섬웨어에 감염되어 위성 제어 장애 발생 +악성코드 +우주 +SW 개발사 +위성 제어시스템 +RCE(Remote Code Execution)취약점 +코드를 삽입된 비인가 모바일 코드 패치 파일을 +유지보수 엔지니어가 인터넷에서 다운받아 위성 +제어시스템에 설치하여 공격자가 원격으로 위성체 +제어시스템에 접속하여 위성 제어 장애 +악성코드 +우주 +SW 개발사 +탑재체 +제어시스템 +공격자가 계약이 종료된 유지보수 업체에 탑재체 +제어시스템 계정/패스워드를 사용하여 탑재체 +제어시스템에 무단접근하여 미션 수행 장애 유발 +권한 남용 +우주 +SW 개발사 +탑재체 +제어시스템 +탑재체 제어시스템 유지보수 엔지니어가 실수로 +테스트 데이터를 운영DB에 입력하여 탑재체 미션 +관련 데이터가 변조되어 미션 수행 장애 발행 +장비 또는 미디어 +손상 +우주 +SW 개발사 +탑재체 +제어시스템 +악의를 가진 클라우드 시스템 유지보수 +엔지니어가 취약한 클라우드 IAM정보 탈취 +후 위성 운영사 클라우드 테넌트에 접근하여 +페이로드 데이터 탈취 +정보 염탐 +위성 제조사 +위성제어SW +위성운영 시 위성제어SW를 업데이트 중 +RF스푸핑 공격을 통해 위성제어SW를 변조하여 +위성 제어 장애 발생 +정보 조작 + +--- + + +## 제3장 우주 보안위협 | 55 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +다. 위성 운영사 영역 +위성 운영사 영역에서는 위성 운영사 직원의 인적 취약점으로 인해 원격 작업 또는 재택근무 +환경에서 스피어피싱을 통해 악성코드에 감염되어 소스코드 또는 데이터가 유출되는 등의 보안 +위협이 존재할 수 있다. +위성 운영사 영역에서 발생 가능한 보안 위협은 아래 표와 같다. +표 17 +위성 운영사 영역 보안 위협 +공격벡터 +대상 +주요 내용 +보안 위협 +우주 +SW 개발사 +위성활용 시스템 +공격자가 취약한 우주SW개발사의 외부 +코드DB에 침투하여 하드코딩된 인증정보를 +탈취하여 위성 운영사 위성활용 시스템에 +접속하여 위성 활용 서비스 장애 유발 +의도치 않은 +정보 누설 +우주 +SW 개발사 +위성활용 시스템 +위성활용 시스템 SW 개발 시 악성코드가 +삽입된 오픈소스를 공개 저장소를 통해 자동으로 +빌드하여 위성활용 시스템에 랜섬웨어 감염 +악성코드 +우주 +SW 개발사 +위성활용 시스템 +위성활용 시스템 SW 개발 담당자가 재택 근무 +환경에서 소스코드 수정 작업 중 스피어피싱을 +통해 개인 단말이 악성코드에 감염되어 위성체 +SW 소스코드, 위성 정보 등 중요 정보 유출 +직원의 안전 관련 +부정 행위 +우주 +SW 개발사 +탑재체 데이터 +처리 및 가공 +시스템 +우주SW개발사가 Zero Day 취약점이 존재하는 +디바이스 드라이버를 커널에 추가한 상태로 +납품하여 공격자가 원격접속 취약점을 통해 +페이로드 데이터 탈취 +네트워크로 연결된 +IT 시스템이나 +애플리케이션의 +논리적 손상 +우주 +SW 개발사 +위성활용 시스템 +위성활용 시스템 업데이트 시 임시로 root권한을 +부여한 유지보수 계정을 비활성화 하지 않아 +해당 계정/패스워드를 획득한 공격자가 위성활용 +시스템에 접근하여 페이로드 데이터 탈취 +권한 남용 +우주 +SW 개발사 +탑재체 데이터 +처리 및 가공 +시스템 +탑재체 데이터 처리 및 가공 시스템 +원격유지보수 시 암호화된 터널링에 사용되는 +사설CA(Certificate Authority) 키값을 탈취하여 +스니핑을 통해 페이로드 데이터 탈취 +원격 정탐, 도청 + +--- + +56 | 우주 보안 모델 +공격벡터 +대상 +주요 내용 +보안 위협 +우주 +SW 개발사 +탑재체 데이터 +처리 및 가공 +시스템 +탑재체 데이터 처리 및 가공 시스템 패치 시 +원격접속 악성코드가 삽입된 인스톨 파일을 +사용하여 Update 후 공격자가 외부에서 탑재체 +데이터 처리 및 가공 시스템에 접속하여 페이로드 +데이터 탈취 +악성코드 +우주 +SW 개발사 +탑재체 데이터 +처리 및 가공 +시스템 +랜섬웨어 코드가 포함되어 있는 탑재체 데이터 +처리 및 가공시스템 업데이트 파일을 무결성 +검증을 수행하지 않고 업데이트 하여 탑재체 +데이터 처리 및 가공 시스템이 랜섬웨어에 +감염되어 페이로드 제공 등 위성 활용 서비스 장애 +악성코드 + +--- + + +## 제3장 우주 보안위협 | 57 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +제4절 +우주 보안 위협 시나리오 +우주 보안 위협 시나리오는 국내외 보안 사고 사례는 최근 우주 관련 기업에서 발생한 사고 및 +사회적으로 크게 이슈화 된 사고 사례를 검토하였으며, 취약한 GSaaS 및 우주 공급망 환경에서 +발생할 수 있는 6가지 보안 위협 시나리오를 도출하였다. +가. 우주 보안 위협 시나리오 도출 절차 +우주 보안 위협 시나리오는 최근 국내외 보안 사고 사례에서 사용된 기법들을 분석하고 +GSaaS 및 우주 공급망 위협에서 해당 기법들과 유사한 우주보안 위협을 선정하였다. 보안 위협 +시나리오는 공격자가 해당 기법들을 이용해 보안을 위협하는 단계를 시간 순으로 정리하였다. +다음 그림은 보안 위협 시나리오 도출 과정에 대한 예이다. 본 예시는 2022년도에 발생한 +우크라이나 러시아 전쟁에서 우크라이나가 자폭드론을 이용해 러시아의 송신탑을 파괴한 사례와 +GSaaS위협의 드론을 이용한 안테나 공격을 연관지어 드론을 활용한 물리적 공격으로 위성 +통신을 마비시키는 시나리오 도출을 예로 들어 제시하고 있다. + +--- + +58 | 우주 보안 모델 +그림 12 +보안 위협 시나리오 도출 절차 +나. GSaaS 보안 위협 시나리오 +GSaaS 보안 위협 시나리오는 위성 제어권 탈취, 데이터 변조, 위성 통신 마비의 3가지 +시나리오를 도출하였으며 세부 시나리오는 다음과 같다. + +--- + + +## 제3장 우주 보안위협 | 59 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +취약한 인증관리 및 접근제어를 이용한 위성 제어권 탈취 +시나리오1 +그림 13 +취약한 인증 및 접근제어를 이용한 위성제어권 탈취 시나리오 +① ‌지상국에서 제공하는 클라우드에 구축된 GSaaS서비스가 평문 통신을 하는 경우 공격자는 +스니핑을 통해 GSaaS 클라우드 IAM7정보를 탈취할 수 있다. 공격자는 탈취한 IAM 정보를 +이용해 위성 운영사로 가장하여 GSaaS 클라우드에 접속할 수 있다. +② ‌GSaaS 클라우드의 웹서버에 파일 업로드 취약점이 존재할 경우 공격자는 위성 운영사의 +권한으로 웹서버에 웹쉘을 업로드 할 수 있다. 서버의 미흡한 권한관리와 경로 조작 +취약점을 이용해 관리자 권한을 탈취하여 해당 클라우드 인스턴스를 장악한다. +③ ‌공격자는 장악한 GSaaS 클라우드 인스턴스를 이용하여 클라우드 영역과 지상국 위성운영 +간의 통신 패킷을 수집 및 분석하여 평문통신 구간을 확인한다. 평문 통신 패킷 수집 및 +분석을 통해 지상국 위성 운영 영역 서버의 접속 정보 및 권한을 탈취하고 해당 취약 서버에 +백도어를 설치하여 위성운영 네트워크에 접속한다. +7 ‌IAM : Identity and Access Management + +--- + +60 | 우주 보안 모델 +④ ‌백도어를 통해 접속한 취약한 서버를 통해 위성운영 영역 네트워크의 통신 패킷을 수집 및 +분석하여 위성궤도 제어시스템의 접속 정보 및 권한을 탈취한다. 탈취한 접속 정보와 권한을 +이용해 위성궤도 제어시스템에 접속하고 백도어를 설치한다. +⑤ ‌공격자는 장악한 위성궤도 제어시스템에서 타겟 위성 접속 정보를 수집하고 정당한 +명령으로 가장하여 궤도 수정 명령을 하달한다. 공격자의 위성 궤도 조작으로 위성이 궤도를 +이탈하여 분실되거나 수집한 위성 접속정보를 이용해 위성을 탈취한다. +비인가 장비 및 백도어를 이용해 지상국 침투 후 위성통신 데이터 변조 +시나리오2 +그림 14 +비인가 장비를 이용한 침투로 위성통신 데이터 변조 시나리오 +① ‌지상국 내부 시스템 유지보수 시 이동형 저장장치에 대한 별도 통제 등 매체제어 부재하거나 +취약한 환경에서 운영될 수 있다. 위성운영 영역 담당 엔지니어가 유지보수에 사용하는 +이동형 저장장치에 백도어를 배포하는 악성코드에 감염된 사실을 인지하지 못하고 +위성 제어시스템 서버에 접속 시 시스템에 백도어형 악성코드가 설치될수 있다. 혹은 + +--- + + +## 제3장 우주 보안위협 | 61 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +내부 네트워크에 네트워크 접근제어 부재 시 악의적인 내부 임직원이 쉽게 눈에 띄지 +않는 싱글보드 컴퓨터(라즈베리파이, 라떼판다 등)에 백도어를 설치하고 위성운영 영역 +네트워크에 연결할 수도 있다. +② ‌지상국 내부의 위성운영 영역 네트워크에 인터넷 접점이 존재하거나 악의적인 임직원이 +방화벽 정책의 수정이 가능한 경우 공격자가 외부에서 내부에 설치된 백도어형 악성코드를 +이용해 내부 네트워크에 접속할 수 있다. +③ ‌지상국 내부 네트워크에 이상징후 탐지 및 차단 솔루션이 부재한 경우 공격자는 +네트워크 스캔 등을 사용해 취약한 시스템 정보를 수집할 수 있다. 공격자는 수집한 내부 +시스템 정보를 이용해 권한상승이 가능하고, 위성 제어시스템 등 중요 자산에 관리자 +권한으로 접속할 수 있는 취약한 자산을 타겟으로 공격을 시도할 수 있다. 공격자가 위성 +제어시스템의 관리자 권한을 획득한 경우 위성 접속 정보 등 중요 정보를 수집할 수 있다. +④ ‌공격자는 수집한 위성 접속 정보를 이용하여 타겟 위성에 접속하여 해당 위성에서 전송되는 +데이터를 변조하는 악성코드를 삽입할 수 있다. +⑤ ‌공격자가 설치한 악성코드로 인해 위성에 전송되는 데이터가 변조되고 이로 인해 위성 활용 +서비스에서 장애가 발생할 수 있다. + +--- + +62 | 우주 보안 모델 +드론을 활용한 물리적 공격으로 위성 통신 마비 +시나리오3 +그림 15 +드론을 활용한 물리적 공격으로 위성 통신 마비 시나리오 +① ‌지상국에서 제공하는 클라우드에 구축된 GSaaS서비스가 평문통신을 하는 경우 공격자는 +스니핑을 통해 데이터를 수집하고 분석하여 타겟 위성이 사용하는 안테나의 위치 정보를 +확인한다. +② ‌확인된 안테나를 재밍 장비 혹은 폭발물을 탑재한 드론을 이용하여 재밍 공격 혹은 +물리적으로 파괴한다. +③ ‌공격자의 안테나 재밍 공격 혹은 물리적 파괴로 인해 안테나와 위성간 통신이 마비된다. + +--- + + +## 제3장 우주 보안위협 | 63 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +다. 우주 공급망 보안 위협 시나리오 +우주 공급망 보안 위협 시나리오는 지상국 시스템 마비, 위성 탑재체 오동작 유발, 위성체 +오동작 유발의 3가지 시나리오를 도출하였으며 세부 시나리오는 다음과 같다. +취약한 오픈소스 사용으로 지상국 시스템 마비 +시나리오1 +그림 16 +취약한 오픈소스 사용으로 지상국 시스템 마비 시나리오 +① ‌공격자는 지상국 운영사가 서비스 개발 시 통상적으로 사용하는 오픈소스 라이브러리 +정보를 수집한다. 공격자가 해당 오픈소스 라이브러리 개발 커뮤니티에 가입하여 백도어 형 +악성코드를 삽입하고 리포지터리에 최신 버전으로 등록한다. +② ‌지상국 운영사는 별도의 라이브러리 검증 절차 없이 악성코드가 삽입된 취약한 오픈소스 +라이브러리를 포함하여 서비스를 개발하고 배포한다. +③ ‌공격자는 백도어를 통해 지상국 운영사의 시스템에 접속하고 추가로 취약한 시스템 정보를 +수집하여 지상국 서비스를 장악한 후 지상국 시스템을 마비 시킨다. + +--- + +64 | 우주 보안 모델 +위성 탑재체 업데이트 파일에 악성코드 삽입으로 위성 탑재체 오동작 유발 +시나리오2 +그림 17 +탑재체 업데이트 파일에 악성코드 삽입으로 위성 오동작 유발 +① ‌공격자는 인터넷 등 공개된 네트워크에 연결된 개발용 PC에 피싱 메일 등 사회 공학을 통해 +접근한다. 개발자 PC에 연결된 위성체, 탑재체, 발사체 SW 개발(업데이트) 서버에 접근하여 +백도어를 설치한다. +② ‌공격자는 위성 탑재체 SW 업데이트에 랜섬웨어형 악성코드를 삽입하여 업데이트 파일을 +변조한다. +③ ‌위성/발사체 제조사가 악성코드가 삽입된 SW 업데이트 파일을 지상국 운영사에 제공한다. +지상국 운영사는 악성코드가 삽입된 SW 업데이트 파일을 별도의 검증 없이 위성 SW +업데이트 서버에 업로드 한다. +④ ‌SW 업데이트를 통해 설치된 악성코드로 인해 암호화 등 위성 탑재체 오동작을 유발한다. + +--- + + +## 제3장 우주 보안위협 | 65 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +변조된 개발환경 플러그인 사용으로 위성체 오동작 유발 +시나리오3 +그림 18 +변조된 개발환경 플러그인 사용으로 위성체 오동작 유발 +① ‌공격자가 SW개발 IDE 및 CI/CD의 유명 플러그인 개발 커뮤니티에 가입하여 빌드 시 +백도어를 생성하는 등 SW를 변조하는 악성코드가 삽입된 플러그인을 저장소에 업로드 +한다. +② ‌위성체 부품 FW개발자가 자신의 IDE 등 개발 및 빌드 환경 구축 중 플러그인 설치에 대한 +별도 검증 절차 부재로 해당 악성코드가 삽입된 IDE 및 CI/CD를 사용해 FW를 개발하고 +부품에 탑재하여 납품한다. +③ ‌위성체 제조사가 부품에 탑재된 FW에 대한 별도의 검증 단계를 거치지 않고 악성코드가 +탑재된 취약한 부품을 사용하여 위성체를 제조하여 위성 운영사에 납품한다. +④ ‌공격자는 백도어를 사용해 감염된 위성체의 오동작을 유발한다. + +--- + + + +--- + + +## 제1장 개 요 | 67 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +우주 보안 아키텍처 + +## 1. 우주 보안 요구사항 + + +## 2. 우주 보안 아키텍처 + + +## 3. 우주 보안 체크리스트 + +제 4 장 + +--- + +68 | 우주 보안 모델 +본 장에서는 우주 보안 아키텍처에 대해 기술한다. 우주 보안 아키텍처에서는 GSaaS 및 우주 +공급망 보안 위협을 제거 또는 감소시키기 위해 필요한 보안 요구사항과 보안기술, 보안솔루션을 +제시한다. 우주 보안 아키텍처의 내용은 다음과 같이 세 부분으로 기술한다. +1. ‌우주 보안 요구사항에서는 GSaaS 및 우주 공급망 보안 위협에 대응하는 보안 요구사항을 +제시한다. +2. ‌우주 보안 아키텍처에서는 우주 보안 요구사항을 기반으로 보안 아키텍처 구성 기준과 우주 +보안 아키텍처를 제시한다. +3. ‌우주 보안 체크리스트에서는 제시한 우주보안 위협을 기반으로 우주 보안 체크리스트를 +제시한다. +해당 장의 표 구성은 보안 위협에 대응하는 보안 요구사항과 요구사항을 구현하기 위한 +보안기술 그리고 해당 기술을 포함하고 있는 보안솔루션으로 표현한다. 그리고 해당 보안기술 및 +보안솔루션이 존재하지 않는 경우 ‘-’로 표현한다. + +## 제4장 + +우주 보안 아키텍처 + +--- + + +## 제4장 우주 보안아키텍처 | 69 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +제1절 +우주 보안 요구사항 +가. GSaaS 보안 요구사항 +GSaaS에서는 통신 구간에서의 전파 교란이나 시스템 접근 권한을 탈취하여 위성 제어권을 +침해하는 행위, 악성코드 감염이나 미흡한 보안 설정으로 인한 중요정보 유출 및 데이터 변조 등 +다양한 보안 위협이 발생할 수 있다. +이러한 보안 위협에 대응하기 위한 GSaaS의 주요 보안 요구사항으로는 안티 재밍 대책 마련, 운영 +시스템 관리자 및 사용자 인증 강화, 권한 관리, 클라우드 인프라 및 사용자 보안 강화 등이 있다. +GSaaS의 보안 위협에 대응하기 위한 주요 보안 요구사항은 아래 그림과 같다. +그림 19 +GSaaS 주요 보안 요구사항 + +--- + +70 | 우주 보안 모델 +GSaaS는 통신구간, 안테나, 지상국 및 클라우드, 위성 운영사 영역으로 구분하여 다양한 보안 +위협에 대응하기 위한 보안 요구사항을 제시한다. +(1) 통신 구간 +통신구간은 위성과 안테나 간 도청 및 재밍, 안테나, 클라우드, 지상국, 위성 운영사 간의 +통신구간에서 도청, 가장, 중간자 공격 등의 보안 위협이 존재한다. +해당 위협에 대응하기 위한 대표적인 GSaaS 보안 요구사항은 각 통신구간 의 가상 사설망 +구성, 데이터 암호화, 인증 및 안전한 키교환 등이 있다. +통신 구간에서 발생할 수 있는 보안 위협에 대응하기 위해 필요한 보안 요구사항, 보안기술, +보안솔루션은 아래 표와 같다. +표 18 +통신 구간 보안 요구사항, 보안기술, 보안솔루션 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +통신 연결 +장애 +위성 트랜스폰더 전원을 +차단하는 임의의 제어명령을 +위성으로 송신하여 위성과 +통신 일시 중단 및 마비 +※위성트랜스폰더전원: +위성에 탑재된 신호중계 +장비. 지상에서 위성으로 +전송한 신호(업링크)를 +수신하고 이를 증폭 또는 +변환한 후 다시 지상으로 +송신(다운링크)하는 역할 +수행 +ⓐ ‌위성체 및 탑재체의 전력 +및 전자장비 장애복구 +대책 마련 +ⓑ ‌위성 통신 장애 발생 시 +복구 및 위성 추적 방안 +ⓒ ‌비상 대응 교육 및 훈련 +ⓐ 시스템 이중화 +ⓑ ‌결함 내성 +(Fault +Tolerance) +설계 +ⓒ ‌비상 대응 +교육 및 훈련 +ⓐ - +ⓑ - +ⓒ - +소프트웨어 +취약점 +또는 오류 +위성 소프트웨어 취약점을 +통해 버퍼오버플로우 공격을 +시도하여 위성 제어권 탈취 +ⓐ ‌위성 소프트웨어 탑재 전 +취약점 진단 보안성 및 +신뢰도 확보 +ⓑ ‌소프트웨어 취약점 발견 +시 업데이트 방안 마련 +ⓒ ‌소프트웨어에 포함된 +오픈소스 라이브러리에 +대한 검증 방안 마련 +ⓓ ‌위성 시스템 +소프트웨어에 보안기능 +구현 +ⓐ ‌소프트웨어 +취약점 진단 +ⓑ 보안 패치 +ⓒ SBOM +ⓓ 시큐어 코딩 +ⓐ ‌소스코드 +정적 분석 +ⓑ - +ⓒ ‌SBOM +검증 도구 +ⓓ ‌시큐어 +코딩 +플러그인 + +--- + + +## 제4장 우주 보안아키텍처 | 71 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +방해 신호 +전송 +위성과 안테나 통신 시 메인 +데이터 패널에 노이즈를 +발생시켜 위성이 Beacon +모드로 데이터를 송신하게 +만들어 위성 상태 데이터 +탈취 +ⓐ ‌위성 통신 방해 전파에 +대한 안티 재밍 대책 마련 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼 +스마트 재밍 +탐지 안테나 +이중화, +주파수 이중화 +ⓐ ‌재밍 탐지 +센서 +원격 정탐, +도청 +위성과 안테나간 RF스니핑 +공격을 통해 위성에서 +지상으로 전송되는 탑재체 +데이터 탈취 +ⓐ ‌위성 통신 방해 전파에 +대한 안티 재밍 대책 마련 +ⓑ ‌위성과 지상국 간 인증 +및 안전한 암호화 키교환 +방안 마련 +ⓒ ‌위성과 지상국 통신 시 +데이터 암호화 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼 +스마트 재밍 +탐지 안테나 +이중화, +주파수 이중화 +ⓑ ‌비대칭 키 +암호화 +ⓒ ‌대칭 키 +암호화 +ⓐ ‌재밍 탐지 +센서 +ⓑ - +ⓒ - +장치 및 +미디어 +파괴 +RF스푸핑을 통해 운영중인 +위성에 궤도변경 원격명령을 +전송하여 노후위성, +우주쓰레기 등과 충돌시켜 +위성 파손 +ⓐ ‌위성과 지상국 간 인증 +및 안전한 암호화 키교환 +방안 마련 +ⓑ ‌위성과 지상국 통신 시 +데이터 암호화 +ⓒ ‌위성 통신 방해 전파에 +대한 안티 재밍 대책 마련 +ⓐ ‌비대칭 키 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓒ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼 +스마트 재밍 +탐지 안테나 +이중화, +주파수 이중화 +ⓐ - +ⓑ - +ⓒ ‌재밍 탐지 +센서 + +--- + +72 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +재밍 +지향성 파라볼라 안테나를 +통해 재밍공격으로 위성에 +노이즈를 송출하여 위성의 +제어명령 수신을 방해하여 +위성 제어 방해 +ⓐ ‌위성 통신 방해 전파에 +대한 안티 재밍 대책 마련 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼 +스마트 재밍 +탐지 안테나 +이중화, +주파수 이중화 +ⓐ ‌재밍 탐지 +센서 +정보 조작 +위성 자세 제어 등 위성으로 +전송하는 위성제어 명령을 +변조하여 위성 정지 또는 +오동작 유발 +ⓐ ‌위성과 지상국 간 인증 +및 안전한 암호화 키교환 +방안 마련 +ⓑ ‌위성과 지상국 통신 시 +데이터 암호화 +ⓒ ‌전송 데이터에 대한 +무결성 검사 +ⓐ ‌비대칭 키 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓒ 해시, 체크썸 +ⓐ - +ⓑ - +ⓒ - +메시지 +가져오기 +안테나에서 지상국으로 +데이터 송신 시 중간자 +공격으로 데이터 수신 및 +처리시스템에 변조된 탑재체 +데이터 전송 +ⓐ ‌안테나와 지상국 간 인증 +및 안전한 암호화 키교환 +방안 마련 +ⓑ ‌안테나와 지상국 통신 시 +데이터 암호화 +ⓒ ‌안테나와 지상국 구간의 +가상 사설망(IPSec) 구성 +ⓓ ‌전송 데이터에 대한 +무결성 검사 +ⓐ ‌비대칭 키 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓒ ‌통신구간 +터널링 +ⓓ 해시, 체크썸 +ⓐ - +ⓑ - +ⓒ VPN +ⓓ - +메시지 +가져오기 +중간자 공격으로 위성으로 +전송하는 위성 제어명령을 +변조하여 위성 탈취 +ⓐ ‌안테나와 지상국 간 인증 +및 안전한 암호화 키교환 +방안 마련 +ⓑ ‌안테나와 지상국 통신 시 +데이터 암호화 +ⓒ ‌안테나와 지상국 구간의 +가상 사설망(IPSec) 구성 +ⓓ ‌전송 데이터에 대한 +무결성 검사 +ⓐ ‌비대칭 키 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓒ ‌통신구간 +터널링 +ⓓ 해시, 체크썸 +ⓐ - +ⓑ - +ⓒ VPN +ⓓ - + +--- + + +## 제4장 우주 보안아키텍처 | 73 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +원격 정탐, +도청 +스니핑 공격으로 안테나와 +지상국 통신 패킷을 +도청하여 위성 탑재체 +데이터 탈취 +ⓐ ‌안테나와 지상국 간 인증 +및 안전한 암호화 키교환 +방안 마련 +ⓑ ‌안테나와 지상국 통신 시 +데이터 암호화 +ⓒ ‌안테나와 지상국 구간의 +가상 사설망(IPSec) 구성 +ⓐ ‌비대칭 키 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓒ ‌통신구간 +터널링 +ⓐ - +ⓑ - +ⓒ VPN +원격 정탐, +도청 +스니핑 공격으로 지상국과 +클라우드 통신 패킷을 +도청하여 위성 예약 및 +스케줄링 데이터 탈취 +ⓐ ‌지상국과 클라우드간 +인증 및 안전한 암호화 +키교환 방안 마련 +ⓑ ‌지상국과 클라우드 통신 +시 데이터 암호화 +ⓒ ‌지상국과 클라우드 +구간의 가상 +사설망(IPSec) 구성 +ⓓ 안테나 네트워크 망분리 +ⓔ ‌안테나 제어시스템 및 +라우터 장비 네트워크 +접근제어 +ⓕ ‌안테나 네트워크에 +비인가 단말 네트워크 +접속 차단 +ⓐ ‌비대칭 키 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓒ ‌통신구간 +터널링 +ⓓ ‌물리적/논리적 +망분리 +ⓔ ‌네트워크 +접근제어 +ⓕ ‌네트워크 +접근제어 +ⓐ - +ⓑ - +ⓒ VPN +ⓓ - +ⓔ 방화벽 +ⓕ NAC +정보 조작 +유출된 클라우드 접속 VPN +계정을 통해 클라우드의 +예약 및 스케줄링 시스템에 +접속하여 안테나 예약 정보 +조작 +ⓐ ‌외부에서 가상 +사설망(SSL)을 통해 +GSaaS 클라우드 접속 시 +복수의 인증 방안 마련 +ⓑ ‌GSaaS 클라우드 접속 +가상 사설망(SSL) 계정 +탈취 탐지 +ⓒ ‌전송 데이터에 대한 무결성 +검사 +ⓐ 2차인증 +ⓑ ‌외부 노출된 +자산 및 계정 +관리 +ⓒ ‌해시, 체크썸 +ⓐ MFA +ⓑ ASM +ⓒ - + +--- + +74 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +정보 조작 +지상국과 클라우드 +전송구간을 스니핑하여 +안테나 예약 명령을 획득한 +후 변조 및 전송하여 안테나 +사용 장애 +ⓐ ‌지상국과 클라우드간 +인증 및 안전한 암호화 +키교환 방안 마련 +ⓑ ‌지상국과 클라우드 통신 +시 데이터 암호화 +ⓒ ‌지상국과 클라우드 +구간의 가상 +사설망(IPSec) 구성 +ⓓ ‌전송 데이터에 대한 +무결성 검사 +ⓐ ‌비대칭 키 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓒ ‌통신구간 +터널링 +ⓓ 해시, 체크썸 +ⓐ - +ⓑ - +ⓒ VPN +ⓓ - +메시지 +가져오기 +위성 운영사 및 클라우드 +간 스니핑을 통해 IAM키를 +탈취하여 클라우드 버킷을 +모두 삭제하여 안테나 예약 +및 스케줄링 서비스 불가 +ⓐ ‌위성 운영사와 클라우드 +통신 시 데이터 암호화 +ⓑ ‌GSaaS 사용자 인증 +시(IAM) 접속 시 복수의 +인증 방안 마련 +ⓒ ‌정기적인 사용자 계정 및 +권한 감사를 수행하여 +데이터 접근 권한에 대한 +적절성 검토 및 조치 +ⓐ ‌HTTPS +ⓑ 2차인증 +ⓒ ‌사용자 계정 +및 권한 검토 +ⓐ - +ⓑ MFA +ⓒ - +정보 조작 +위성 운영사에서 클라우드로 +보내는 예약 및 스케줄링 +데이터를 변조하여 위성 +사용 장애 +ⓐ ‌위성 운영사와 클라우드 +통신 시 데이터 암호화 +ⓑ ‌전송 데이터에 대한 +무결성 검사 +ⓐ ‌HTTPS +ⓑ 해시, 체크썸 +ⓐ - +ⓑ - +메시지 +가져오기 +스니핑 공격으로 지상국과 +위성 운영사 통신 패킷을 +도청하여 탑재체 데이터 +탈취 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 암호화 +ⓑ ‌외부에서 가상 +사설망(SSL)을 통해 +지상국 접속 시 복수의 +인증 방안 마련 +ⓐ ‌HTTPS, +SFTP +ⓑ 2차인증 +ⓐ - +ⓑ MFA +메시지 +가져오기 +위성 운영사에서 지상국으로 +탑재체 데이터 요청 시 +중간자공격을 통해 변조된 +탑재체 데이터 전송 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 암호화 +ⓑ ‌외부에서 가상 +사설망(SSL)을 통해 +지상국 접속 시 복수의 +인증 방안 마련 +ⓒ ‌전송 데이터에 대한 +무결성 검사 +ⓐ ‌HTTPS, +SFTP +ⓑ 2차인증 +ⓒ 해시, 체크썸 +ⓐ - +ⓑ MFA +ⓒ - + +--- + + +## 제4장 우주 보안아키텍처 | 75 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +장치 또는 +애플리케이션 +조작 +위성 운영사에 미션 명령을 +지상국으로 전송 시 중간자 +공격을 통해 관측 요청에 +변조된 Calibration 플래그를 +삽입하여 촬영 대신 +셔터OFF 명령을 전송하여 +미션 실패 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 암호화 +ⓑ ‌외부에서 가상 +사설망(SSL)을 통해 +지상국 접속 시 복수의 +인증 방안 마련 +ⓒ ‌전송 데이터에 대한 +무결성 검사 +ⓐ HTTPS +ⓑ 2차인증 +ⓒ 해시, 체크썸 +ⓐ - +ⓑ MFA +ⓒ - +(2) 안테나 영역 +안테나 영역은 통신 전파 재밍, 네트워크 장비 취약점을 이용한 서비스 거부 공격, 안테나 +제어시스템에 변조된 데이터를 전송 및 오작동 유발, 관리서버 권한을 탈취하여 데이터 +전송장애 유발 등의 보안 위협이 존재한다. +해당 위협에 대응하기 위한 대표적인 GSaaS 보안 요구사항은 안테나 설비 혹은 주파수 +이중화 등 안티 재밍 대책, 네트워크 이중화, 전송 데이터 암호화, 관리서버 접근 시 2차인증 +등이 있다. +안테나 영역에서 발생할 수 있는 보안 위협에 대응하기 위해 필요한 보안 요구사항, +보안기술, 보안솔루션은 아래 표와 같다. +표 19 +안테나 영역 보안 요구사항, 보안기술, 보안솔루션 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +방해 신호 +전송 +특정 협대역 톤을 지속 +방출하는 간섭기를 탑재한 +드론을 안테나 보호구역에 +침투시켜 RFI(Radio +Frequency Interference) +공격을 통해 위성과 안테나 +통신을 교란 +ⓐ ‌위성 통신 방해 전파에 +대한 안티 재밍 대책 마련 +ⓑ ‌드론을 사용한 지상국 및 +안테나 위협 대응책 마련 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼 +스마트 재밍 +탐지 안테나 +이중화, +주파수 이중화 +ⓑ 안티 드론 +ⓐ ‌재밍 탐지 +센서 +ⓑ ‌드론 재머, +드론 탐지 +레이더 + +--- + +76 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +안테나 제어시스템 및 +라우터 취약점을 통해 +DoS공격으로 서비스 거부 +상태를 만들어 지상국 +네트워크 장애 +ⓐ ‌안테나 제어시스템 및 +라우터 장비보안 패치 +ⓑ ‌위성 안테나 시스템 +내/외부 네트워크 침입, +이상행위 및 공격에 대한 +탐지 및 차단 대책 마련 +ⓒ ‌위성 안테나 시스템 +내/외부 네트워크를 +대상으로 서비스 +거부공격에 대한 대책 +마련 +ⓓ ‌안테나가 지상국과 +동떨어진 장소에 설치된 +경우 안테나 설비에 복수의 +ISP망 구축으로 외부 +네트워크로부터 DoS +공격에 대한 가용성 확보 +ⓔ ‌위성 안테나 시스템을 +대상으로 DoS공격 발생 +시 내부 설비의 가용성 +확보를 위해 시스템을 +이중화 +ⓕ ‌안테나 네트워크 망분리 +ⓖ ‌안테나 제어시스템 및 +라우터 장비 네트워크 +접근제어 +ⓗ ‌안테나 네트워크에 +비인가 단말 네트워크 +접속 차단 +ⓐ 보안패치 +ⓑ ‌네트워크 +침입 탐지 +ⓒ ‌DoS 공격 +탐지 및 차단 +ⓓ 회선 이중화 +ⓔ ‌시스템 +이중화 +ⓕ ‌물리적/ +논리적 +망분리 +ⓖ ‌네트워크 +접근제어 +ⓗ ‌네트워크 +접근제어 +ⓐ PMS +ⓑ IDS/IPS +ⓒ ‌Anti- +DDoS +ⓓ - +ⓔ - +ⓕ - +ⓖ 방화벽 +ⓗ NAC + +--- + + +## 제4장 우주 보안아키텍처 | 77 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 +안테나 제어시스템에 +접근하여 Replay 공격으로 +위성 제어 명령을 전송하여 +위성 제어권 탈취 +ⓐ ‌안테나 제어시스템 +소프트웨어 탑재 전 +취약점 진단 보안성 및 +신뢰도 확보 +ⓑ ‌소프트웨어 취약점 발견 +시 업데이트 방안 마련 +ⓒ ‌소프트웨어에 포함된 +오픈소스 라이브러리에 +대한 검증 방안 마련 +ⓓ ‌위성 시스템 +소프트웨어에 보안기능 +구현 +ⓔ 안테나 네트워크 망분리 +ⓕ ‌안테나 제어시스템 및 +라우터 장비 네트워크 +접근제어 +ⓖ ‌안테나 네트워크 내/외부 +침입 및 공격 탐지 +ⓐ ‌소프트웨어 +취약점 진단 +ⓑ 보안 패치 +ⓒ SBOM +ⓓ 시큐어 코딩 +ⓔ ‌물리적/ +논리적 +망분리 +ⓕ ‌네트워크 +접근제어 +ⓖ ‌내부 +네트워크 +침입 탐지 +ⓐ ‌소스코드 +정적 분석 +ⓑ - +ⓒ ‌SBOM +검증 도구 +ⓓ ‌시큐어 코딩 +플러그인 +ⓔ - +ⓕ 방화벽 +ⓖ IDS/IPS +스푸핑 +스푸핑 공격을 통해 안테나 +제어시스템에 변조된 +데이터를 전송하여 안테나 +오작동을 통한 통신 장애 +ⓐ ‌지상국/GSaaS와의 통신 +시 전송 데이터 암호화 +ⓑ ‌안테나와 지상국/ +GSaaS 구간의 가상 +사설망(IPSec) 구성 +ⓒ ‌안테나 제어시스템 +네트워크 접근제어 +ⓓ ‌안테나 네트워크 내/외부 +침입 및 공격 탐지 +ⓔ ‌안테나 제어시스템으로 +제어 명령 전송 등 전송 +데이터에 대한 무결성 +검사 +ⓐ ‌HTTPS, +SFTP +ⓑ ‌통신구간 +터널링 +ⓒ ‌네트워크 +접근제어 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓔ 해시, 체크썸 +ⓐ - +ⓑ VPN +ⓒ 방화벽 +ⓓ ‌IDS/ +IPS +ⓔ - + +--- + +78 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템, +애플리 +케이션, +정보에 +대한 무단 +접근/무단 +사용 +안테나 영역의 관리서버 +계정의 취약한 패스워드를 +Guessing 공격으로 +탈취하여 관리서버에 접속 +후 지상국/클라우드/위성 +운영사간 통신 설정 변경, +위성 송수신데이터 전송 +장애 유발 +ⓐ ‌안테나 관리서버 계정 및 +패스워드 관리 +ⓑ ‌안테나 관리서버의 +2차인증 +ⓒ ‌안테나 네트워크 내/외부 +침입 및 공격 탐지 +ⓐ ‌계정 및 +패스워드 관리 +ⓑ 2차인증 +ⓒ ‌내부 네트워크 +침입 탐지 +ⓐ ‌계정관리 및 +서버접근제어 +ⓑ MFA +ⓒ ‌IDS/IPS +네트워크로 +연결된 IT +시스템이나 +애플리 +케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 안테나 +네트워크에 설치하여 +관리서버에 대한 공격을 +통해 위성 통신 장애 유발 +ⓐ ‌안테나 제어시스템 및 +라우터 장비 네트워크 +접근제어 +ⓑ ‌안테나 네트워크에 +비인가 단말 네트워크 +접속 차단 +ⓒ ‌관리서버 및 네트워크 +기술적 취약점 진단 +ⓓ ‌비인가 단말 설치 등 정보 +보안 주제에 대한 정기 +교육 +ⓐ ‌네트워크 +접근제어 +ⓑ ‌네트워크 +접근제어 +ⓒ 취약점 점검 +ⓓ 보안 교육 +ⓐ 방화벽 +ⓑ NAC +ⓒ ‌취약점 진단 +ⓓ - +악성코드 +악성코드에 감염된 비인가 +USB를 관리서버에 삽입, +랜섬웨어에 감염으로 인한 +위성 제어 및 탑재체 데이터 +송수신 장애 +ⓐ ‌안테나 관리서버의 +비인가 이동식 저장매체 +사용 제한 및 매체제어 +ⓑ 단말 보안 강화 +ⓒ ‌테스트 및 승인된 +소프트웨어만 설치 허용 +ⓓ ‌지상국 네트워크 내/외부 +침입 및 공격 탐지 +ⓔ ‌정보 보안 주제에 대한 +정기 교육 +ⓐ ‌이동식 +저장매체 +사용 통제 +ⓑ ‌악성코드 +탐지 및 차단 +ⓒ ‌화이트 +리스트 백신 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓔ 보안 교육 +ⓐ ‌매체제어 +(DLP) +ⓑ 백신 +ⓒ ‌화이트 +리스트 백신 +ⓓ ‌IDS/IPS +ⓔ - + +--- + + +## 제4장 우주 보안아키텍처 | 79 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +권한 남용 +지상국 운영사 내부 직원이 +안테나 제어시스템 관리자 +권한을 획득, 고의로 잘못된 +위성 위치를 추적하도록 +만들어 실제 위성과 통신 +장애 유발 +ⓐ ‌안테나 제어시스템 계정 +및 권한 점검 +ⓑ ‌안테나 제어시스템의 +2차인증 +ⓒ ‌직무 교육 및 훈련으로 +휴먼에러 최소화 +ⓓ ‌안테나 네트워크 관리 및 +모니터링 +ⓐ ‌사용자 계정 +및 권한 검토 +ⓑ 2차인증 +ⓒ 직무 교육 +ⓓ ‌보안 +모니터링 +ⓐ ‌서버 접근 +제어 +ⓑ MFA +ⓒ - +ⓓ NMS +건물 내 +무단 침입 +안테나 보호구역에 +무단으로 침입하여 +안테나를 물리적으로 +훼손하여 통신 장애 +ⓐ ‌안테나 보호구역을 +제한구역으로 지정하고, +비인가의 출입 통제, 출입 +시 담당자 동행, 출입증 +패용 등 출입 관리 +ⓑ ‌안테나 보호구역 방문자 +접근 모니터링 +ⓐ 출입통제 + + +ⓑ ‌CCTV +모니터링 +ⓐ ‌출입통제 +시스템 +ⓑ CCTV +건물 내 +무단 침입 +안테나 유지보수 +엔지니어가 타 업체가 +관리하는 관리서버 +네트워크에 비인가 탭 +장비를 무단으로 부착하여 +탑재체 데이터 탈취 +ⓐ ‌안테나 관리서버 +네트워크 접근제어 +ⓑ ‌안테나 네트워크 비인가 +단말 네트워크 접속 차단 +ⓒ ‌안테나 보호구역을 +제한구역으로 지정하고, +비인가의 출입 통제, 출입 +시 담당자 동행, 출입증 +패용 등 출입 관리 +ⓓ ‌안테나 보호구역 방문자 +접근 모니터링 +ⓐ ‌네트워크 +접근제어 +ⓑ ‌네트워크 +접근제어 +ⓒ 출입통제 +ⓓ ‌CCTV +모니터링 +ⓐ 방화벽 +ⓑ NAC +ⓒ ‌출입통제 +시스템 + +ⓓ CCTV +장치 및 +미디어 파괴 +폭발물을 탑재한 드론을 +안테나 보호구역에 +침투시켜 안테나를 +물리적으로 파괴 +ⓐ ‌드론을 사용한 안테나 +설비 정탐 및 파괴를 +방지하기 위한 안티 드론 +방안을 마련 +ⓐ ‌지형성 재머, +드론 탐지 +레이더 +ⓐ - +정전 또는 +중단 +정전으로 안테나 운영이 +불가 하여 위성 통신 장애 +ⓐ ‌안테나 설비에 정전 시 +안정적 전원 공급을 위해 +공급원 이중화 등 가용성 +확보 방안 마련 +ⓑ ‌안테나 설비 전력 시스템 +모니터링 +ⓐ ‌전원 이중화, +배터리 +ⓑ ‌보안 +모니터링 +ⓐ ‌UPS/비상 +발전기 +ⓑ - + +--- + +80 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +화재 +안테나 보호구역에 화재가 +발행하여 위성 통신 장애 +ⓐ ‌안테나 설비에 화재 시 +탐지 및 소화시스템 등 +가용성 확보 방안 마련 +ⓐ ‌화재 탐지 +무독성 가스 +소화 시스템 +ⓐ ‌화재 감지 +시스템, +소화 설비 +장치 및 +미디어 파괴 +안테나 라우터에 항온/항습 +관리가 미흡하여 장비가 +손상되어 안테나 지역 +네트워크 통신 장애 +ⓐ ‌안테나 관리서버의 온도/ +습도로 인한 장비 손상 +방지를 위한 항온·항습 +관리 방안 마련 +ⓐ ‌항온 항습 +관리 +ⓐ ‌항온· +항습기/ +FMS +IT 시스템에 +대한 무단 +접근 +비인가자가 안테나 +라우터에 무단으로 +접근하여 통신 케이블을 +훼손하여 지상국과 통신 +장애 +ⓐ ‌안테나 서버실 출입 시 +인가된 인원만 출입이 +가능하도록 출입통제 +방안 마련 및 비인가자 +출입시 자산 보호 방안 +마련 +ⓑ ‌비인가자의 안테나 +서버실 출입시 탐지, +알림, 추적 등 접근 +모니터링 +ⓐ 출입통제 +ⓑ CCTV +모니터링 +ⓐ ‌출입통제 +시스템, +네트워크 렉 +ⓑ CCTV +(3) 지상국-클라우드 영역 +지상국-클라우드 영역은 악성코드를 이용한 미션 및 스케줄링 장애 유발, 공개된 취약점 및 +미흡한 권한 관리를 이용한 데이터 탈취, 악성코드가 설치된 비인가 단말을 이용한 위성 제어 장애 +유발 등의 보안 위협이 존재한다. +해당 위협에 대응하기 위한 대표적인 GSaaS 보안 요구사항은 테스트 및 승인된 소프트웨어만 +설치하기 위한 화이트리스트 백신, 지상국 시스템 및 네트워크 장비 패치, 시스템 접근 시 2차 +인증, 네트워크 접근제어, 지상국 내/외부 네트워크 침입 및 공격에 대한 탐지와 차단을 위한 +이상행위 탐지 솔루션 구축 등이 있다. +지상국-클라우드 영역에서 발생할 수 있는 보안 위협에 대응하기 위해 필요한 보안 요구사항, +보안기술, 보안솔루션은 아래 표와 같다. + +--- + + +## 제4장 우주 보안아키텍처 | 81 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +표 20 +지상국-클라우드 영역 보안 요구사항, 보안기술, 보안솔루션 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +웹쉘 등 악성파일을 +시스템에 업로드 하여 미션 +및 스케줄링 장애 유발 및 +중요정보 탈취 +ⓐ ‌미션 및 스케줄링 웹 +서비스 보호 +ⓑ ‌웹쉘 등 악성파일 탐지 +및 삭제 +ⓒ ‌테스트 및 승인된 +소프트웨어만 설치 허용 +ⓓ ‌GSaaS 클라우드 +네트워크 내/외부 침입 +및 공격 탐지 +ⓔ ‌미션 및 스케줄링 +시스템 기술적 취약점 +진단 +ⓐ ‌웹 서비스 +보호 +ⓑ ‌웹쉘 탐지 +및 삭제 +ⓒ ‌화이트 +리스트 백신 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓔ 취약점 점검 +ⓐ WAF +ⓑ 웹쉘 탐지 +ⓒ ‌화이트 +리스트 백신 +ⓓ IDS/IPS +ⓔ 취약점 진단 +IT 시스템 또는 +애플리케이션의 +오작동 +공개된 취약점을 통해 +미션제어 및 운영지원 +시스템에 접근하여 +미션제어 데이터 탈취 +ⓐ ‌미션제어 및 운영지원 +시스템 장비보안 패치 +ⓑ ‌탑재체 DB의 안전한 +보관 방안 수립 및 구현 +ⓒ ‌미션제어 및 운영지원 +시스템 네트워크 +접근제어 +ⓓ ‌내/외부 네트워크 침입 +및 공격 탐지 +ⓐ 보안패치 +ⓑ 보안 서버 +ⓒ ‌네트워크 +접근제어 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓐ PMS +ⓑ 문서 중앙화 +ⓒ 방화벽 +ⓓ IDS/IPS +정보 염탐 +미흡한 클라우드 +IAM관리로 비인가자가 +지상국 내부자가 유출한 +클라우드 IAM 인증키를 +공격자가 획득하여 버킷 +인덱싱으로 예약 및 +스케줄링 데이터 탈취 +ⓐ ‌안테나 관리서버 계정 +및 패스워드 관리 +ⓑ ‌안테나 관리서버의 +2차인증 +ⓒ ‌클라우드 데이터 유출 +방지 +ⓐ ‌계정 및 +패스워드 +관리 +ⓑ 2차인증 +ⓒ ‌클라우드 +데이터 유출 +방지 +ⓐ ‌계정관리 및 +서버접근 +제어 +ⓑ MFA +ⓒ ‌클라우드 +DLP +IT 시스템 또는 +애플리케이션의 +오작동 +지상국 라우터 운영자가 +라우터 설정 시 잘못된 +네트워크 구성으로 지상국 +내부 네트워크 장애 +ⓐ ‌지상국 네트워크 구조 +점검 +ⓑ ‌지상국 네트워크 관리 +및 모니터링 +ⓒ 직무 교육 및 훈련 +ⓐ ‌인프라 +취약점 점검 +ⓑ ‌보안 +모니터링 +ⓒ 직무 교육 +ⓐ - +ⓑ NMS +ⓒ - + +--- + +82 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓐ ‌지상국 주요시스템 및 +라우터 장비보안 패치 +ⓑ ‌지상국 네트워크 내/외부 +침입, 이상행위 및 +공격에 대한 탐지 및 차단 +대책 마련 +ⓒ ‌지상국 네트워크 +내/외부를 대상으로 +서비스 거부공격에 대한 +대책 마련 +ⓓ ‌지상국 통신회선 구축 시 +복수의 ISP망 구축으로 +외부 네트워크로부터 +DoS 공격에 대한 가용성 +확보 +ⓔ ‌지상국 네트워크를 대상 +으로 DoS공격 발생 +시 내부 설비의 가용성 +확보를 위해 시스템을 +이중화 +ⓕ ‌지상국 주요 네트워크 +망분리 +ⓖ ‌비인가 단말 네트워크 +접속 차단 +ⓗ ‌지상국 라우터 장비 +네트워크 접근제어 +ⓐ 보안패치 +ⓑ ‌네트워크 +침입 탐지 +ⓒ ‌DoS 공격 +탐지 및 +차단 +ⓓ 회선 이중화 +ⓔ ‌시스템 +이중화 +ⓕ ‌물리적/ +논리적 +망분리 +ⓖ ‌네트워크 +접근제어 +ⓗ ‌네트워크 +접근제어 +ⓐ PMS +ⓑ IDS/IPS +ⓒ Anti- +DDoS +ⓓ - +ⓔ - +ⓕ - +ⓖ NAC +ⓗ 방화벽 +스푸핑 +스푸핑 공격을 가하여 +위성 운영사가 위성서비스 +제공을 위해 탑재체 +데이터를 분석한 중요정보 +탈취 +ⓐ ‌DB분석 및 시각화 +시스템에서 데이터 +암호화 등 보호조치 +ⓑ ‌DB분석 및 시각화 +시스템 통신 시 데이터 +암호화 +ⓒ ‌탑재체 데이터 이용 +네트워크 내/외부 침입 +및 공격 탐지 +ⓐ ‌데이터 +암호화, +중앙화 +ⓑ 암호화 통신 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓐ ‌문서 +중앙화, +DRM +ⓑ - +ⓒ IDS/IPS + +--- + + +## 제4장 우주 보안아키텍처 | 83 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +장치/미디어/ +문서 손실 +지상국 임직원이 분실한 +DB분석 및 시각화 시스템 +접근이 가능한 노트북을 +획득하여 탑재체 데이터 +탈취 +ⓐ ‌임직원 단말 계정 및 +패스워드 설정 +ⓑ ‌DB분석 및 시각화 +시스템의 2차인증 +ⓒ ‌탑재체 DB의 안전한 +보관 방안 수립 및 구현 +ⓓ ‌자산 분실 대처방안 등 +정보 보안 주제에 대한 +정기 교육 +ⓐ ‌계정 및 패스 +워드 설정 +ⓑ 2차인증 +ⓒ 보안 서버 +ⓓ 보안 교육 +ⓐ - +ⓑ MFA +ⓒ 문서 중앙화 +ⓓ - +정보 조작 +지상국 라우터 관리콘솔에 +취약하게 설정된 계정/ +패스워드를 통해 접속하여 +라우팅 정보를 변경하여 +지상국 네트워크 장애 +ⓐ ‌지상국 네트워크 장비 +계정 및 패스워드 관리 +ⓑ ‌지상국 네트워크 장비 +계정 및 권한 점검 +ⓐ ‌계정 및 +패스워드 +관리 +ⓑ 취약점 점검 +ⓐ ‌계정관리 및 +서버 +접근제어 +ⓑ 취약점 진단 +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 +접근하여 관측 데이터 탈취 +ⓐ ‌지상국 서버실 등 +통제구역 출입 관리 +ⓑ ‌외부업체 엔지니어 등 +방문자의 물리적인 접근 +모니터링 +ⓒ ‌지상국 시스템 운영실의 +시스템 랙 설치 및 시건 +ⓓ ‌탑재체 DB의 안전한 +보관 방안 수립 및 구현 +ⓐ 출입통제 +ⓑ ‌CCTV +모니터링 +ⓒ ‌물리적 접근 +통제 +ⓓ 보안 서버 +ⓐ ‌출입통제 +시스템 +ⓑ CCTV +ⓒ ‌서버 랙 등 +시건장치 +ⓓ 문서 중앙화 +기기/미디어/ +문서 도난 +위성 제어 및 미션 관련 +중요 데이터가 저장되어 +있는 USB를 분실 또는 +도난당하여 중요정보 노출 +ⓐ ‌이동형 저장장치 +(USB메모리 등) +취급방안 마련 등 +데이터 보호 및 접근 +통제 +ⓑ ‌탑재체 DB의 안전한 +보관 방안 수립 및 구현 +ⓒ ‌이동형 저장장치 취급 +등 정보 보안 주제에 +대한 정기 교육 +ⓐ ‌USB 데이터 +보호 및 +접근 통제 +ⓑ 보안 서버 +ⓒ 보안 교육 +ⓐ 보안 USB +ⓑ 문서 중앙화 +ⓒ - + +--- + +84 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +용량 부족 +데이터 수신 및 +처리시스템에 과도한 +데이터가 수신되어 디스크 +용량이 부족하여 탑재체 +제공 서비스 장애 +ⓐ ‌탑재체 데이터 서비스 +시스템에 대해 이중화 +등 가용성 확보 방안 +마련 +ⓑ ‌위성 데이터 수신 +및 처리 시스템의 +가용성 임계치 설정 및 +모니터링 +ⓒ 직무 교육 및 훈련 +ⓐ ‌시스템 +이중화 +ⓑ ‌인프라 +취약점 점검 +ⓒ 직무 교육 +ⓐ - +ⓑ - +ⓒ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 +제어시스템에 취약하게 +설정된 계정/패스워드를 +Guessing 공격으로 +탈취하여 접속 후 임의의로 +궤도룰 수정하여 위성 탈취 +ⓐ ‌궤도 제어시스템 계정 +및 패스워드 관리 +ⓑ ‌궤도 제어시스템의 +2차인증 +ⓒ ‌궤도 제어시스템 +네트워크 접근제어 +ⓓ ‌궤도 제어시스템 +네트워크 내/외부 침입 +및 공격 탐지 +ⓔ ‌계정/패스워드 설정 +및 관리 등 정보 보안 +주제에 대한 정기 교육 +ⓐ ‌계정 및 +패스워드 +관리 +ⓑ 2차인증 +ⓒ ‌네트워크 +접근제어 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓔ 보안 교육 +ⓐ ‌계정관리 및 +서버접근 +제어 +ⓑ MFA +ⓒ 방화벽 +ⓓ IDS/IPS +ⓔ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 지상국 +네트워크에 설치하여 궤도 +제어시스템에 대한 공격을 +통해 위성 제어 장애 유발 +ⓐ ‌궤도 제어시스템 +네트워크 접근제어 +ⓑ ‌비인가 단말 네트워크 +접속 차단 +ⓒ ‌지상국 주요 네트워크 +망분리 +ⓓ ‌위성 운영 내/외부 +네트워크 침입 및 공격 +탐지 +ⓔ ‌비인가 장비 설치 등 +정보 보안 주제에 대한 +정기 교육 +ⓐ ‌네트워크 +접근제어 +ⓑ ‌네트워크 +접근제어 +ⓒ ‌물리적/ +논리적 +망분리 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓔ 보안 교육 +ⓐ 방화벽 +ⓑ NAC +ⓒ - +ⓓ IDS/IPS +ⓔ - + +--- + + +## 제4장 우주 보안아키텍처 | 85 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +운영자가 위성 회전 +명령을 오입력하여 위성의 +카메라가 대상 지역을 +벗어나 미션 수행 실패 +ⓐ ‌위성 운영자 대상 직무 +교육 및 훈련을 통해 +휴먼에러 발생 대비 +ⓐ 직무 교육 +ⓐ - +악성코드 +악성코드에 감염된 비인가 +USB를 업무용 단말에 +삽입 후 위성 제어시스템에 +랜섬웨어가 전파되어 위성 +제어 장애 +ⓐ ‌비인가 이동식 저장매체 +사용 제한 및 매체제어 +ⓑ 악성코드 탐지 및 차단 +ⓒ ‌테스트 및 승인된 +소프트웨어만 설치 허용 +ⓓ ‌위성 운영 네트워크 +내/외부 침입 및 공격 +탐지 +ⓔ ‌비인가 이동식 저장매체 +사용 등 정보 보안 +주제에 대한 정기 교육 +ⓐ ‌이동식 저장 +매체 사용 +통제 +ⓑ ‌악성코드 +탐지 및 차단 +ⓒ ‌화이트 +리스트 백신 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓔ 보안 교육 +ⓐ ‌매체제어 +(DLP) +ⓑ 백신 +ⓒ ‌화이트 +리스트 백신 +ⓓ IDS/IPS +ⓔ - +악성코드 +위성 제어시스템에 +랜섬웨어를 감염시켜 위성 +제어시스템 장애로 위성 +제어 불능 +ⓐ 악성코드 탐지 및 차단 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 허용 +ⓒ ‌악성코드 대응 등 정보 +보안 주제에 대한 정기 +교육 +ⓐ ‌악성코드 +탐지 및 차단 +ⓑ ‌화이트 +리스트 백신 +ⓒ 보안 교육 +ⓐ 백신 +ⓑ ‌화이트 +리스트 백신 +ⓒ - +서비스 거부 +DoS 공격을 통해 위성 +탑재체 제공 서비스 장애 +유발 +ⓐ DoS 공격 탐지 및 차단 +ⓑ ‌탑재체 데이터 이용 +네트워크 내/외부 침입 +및 공격 탐지 +ⓒ ‌탑재체 데이터 서비스 +시스템 이중화로 DoS +등 자원을 고갈시키는 +공격에 대한 대응책 +마련 +ⓓ ‌탑재체 데이터 서비스 +시스템 장비 보안 패치 +ⓐ ‌DoS 공격 +탐지 및 차단 +ⓑ ‌내부 +네트워크 +침입 탐지 +ⓒ ‌시스템 +이중화 +ⓓ 보안패치 +ⓐ ‌Anti- +DDoS +ⓑ IDS/IPS +ⓒ - +ⓓ PMS + +--- + +86 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 +탑재체 데이터 서비스 +시스템에 접근하여 탑재체 +데이터 탈취 +ⓐ ‌탑재체 데이터 서비스 +시스템 장비 보안 패치 +ⓑ ‌탑재체 데이터 서비스 +시스템 소프트웨어 +공급망 보안 +ⓒ ‌탑재체 DB의 안전한 +보관 방안 수립 및 구현 +ⓓ ‌탑재체 데이터 서비스 +시스템 소프트웨어에 +보안기능 구현 +ⓐ 보안패치 +ⓑ SBOM +ⓒ 보안 서버 +ⓓ 시큐어 코딩 +ⓐ PMS +ⓑ ‌SBOM +검증 도구 +ⓒ 문서 중앙화 +ⓓ ‌소스코드 +정적 분석 +악성코드 +악성메일 등을 통해 위성 +운영사 임직원 PC에 +악성코드 감염 후 탑재체 +위성 운영사의 탑재체 +데이터 처리 및 가공 +시스템과 연동하는 지상국 +데이터 서비스 시스템에 +전파되어 탑재체 서비스 +장애 +ⓐ 악성코드 탐지 및 차단 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 허용 +ⓒ ‌탑재체 데이터 이용 +네트워크 내/외부 침입 +및 공격 탐지 +ⓓ ‌피싱 메일 등 사회공학 +관련 정보 보안 주제에 +대한 정기 교육 및 훈련 +ⓐ ‌악성코드 +탐지 및 차단 +ⓑ ‌화이트 +리스트 백신 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓓ 보안 교육 +ⓐ 백신 +ⓑ ‌화이트 +리스트 백신 +ⓒ IDS/IPS +ⓓ - +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 +운영사 임직원 PC를 +통해 원격으로 연결되는 +지상국의 미션제어 및 +운영지원 시스템 계정을 +탈취하여 탑재체 데이터 +탈취 +ⓐ 악성코드 탐지 및 차단 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 허용 +ⓒ ‌탑재체 DB의 안전한 +보관 방안 수립 및 구현 +ⓓ ‌지상국 주요 네트워크 +업무망과 망분리 +ⓔ ‌지상국 주요 네트워크에 +비인가 단말 네트워크 +접속 차단 +ⓕ ‌미션제어 및 운영지원 +시스템 네트워크 접근제어 +ⓖ ‌내/외부 네트워크 침입 +및 공격 탐지 +ⓗ ‌PC보안 등 정보 보안 +주제에 대한 정기 교육 +ⓘ ‌지상국 주요 시스템은 +심층방어 원칙을 따라 보안 +아키텍처를 설계하고 적용 +ⓐ ‌악성코드 +탐지 및 차단 +ⓑ ‌화이트 +리스트 백신 +ⓒ ‌보안 서버 +ⓓ ‌물리적/ +논리적 망분리 +ⓔ ‌네트워크 +접근제어 +ⓕ ‌네트워크 +접근제어 +ⓖ ‌내부 네트워크 +침입 탐지 +ⓗ 보안 교육 +ⓘ 심층방어 +ⓐ 백신 +ⓑ ‌화이트 +리스트 백신 +ⓒ 문서 중앙화 +ⓓ - +ⓔ NAC +ⓕ 방화벽 +ⓖ IDS/IPS +ⓗ - +ⓘ - + +--- + + +## 제4장 우주 보안아키텍처 | 87 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +스푸핑 +스푸핑 공격을 통해 +관측요청 접수시스템에 +변조된 명령을 전송하여 +잘못된 위성 명령 전송 +ⓐ ‌관측요청 접수시스템 +통신 시 데이터 암호화 +ⓑ ‌위성 운영사의 지상국 +접속은 제로트러스트 +기반 인증 도입 +ⓒ ‌관측요청 +접수시스템으로 명령 +전송 등 전송 데이터에 +대한 무결성 검사 +ⓓ ‌탑재체 데이터 이용 +네트워크 내/외부 침입 +및 공격 탐지 +ⓐ 암호화 통신 +ⓑ ‌제로트러스트 +기반 인증 +ⓒ 해시, 체크썸 + +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓐ https 등 +ⓑ ‌OTP, +바이오 인증 +등 +ⓒ - +ⓓ IDS/IPS +악성코드 +스피어 피싱, 악성메일 +등을 통해 지상국 직원 +PC에 악성코드 감염 후 +내부 네트워크에 전파하여 +탑재체 데이터 등 중요정보 +암호화 및 위성 제어 장애 +ⓐ 악성코드 탐지 및 차단 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 허용 +ⓒ ‌탑재체 DB의 안전한 +보관 방안 수립 및 구현 +ⓓ ‌탑재체 데이터 이용 +네트워크 내/외부 침입 +및 공격 탐지 +ⓔ ‌악성메일, PC보안 등 +정보 보안 주제에 대한 +정기 교육 +ⓐ ‌악성코드 +탐지 및 차단 +ⓑ ‌화이트 +리스트 백신 +ⓒ 보안 서버 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓔ 보안 교육 +ⓐ 백신 +ⓑ ‌화이트 +리스트 백신 +ⓒ 문서 중앙화 +ⓓ IDS/IPS +ⓔ - +악성코드 +악성코드에 감염된 비인가 +USB를 탑재체 데이터 +및 위성운영 서버/단말에 +삽입하여 랜섬웨어 감염 및 +전파 +ⓐ 악성코드 탐지 및 차단 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 허용 +ⓒ ‌위성 운영 시스템의 +비인가 이동식 저장매체 +사용 제한 및 매체제어 +ⓓ ‌탑재체 데이터 이용 +네트워크 내/외부 침입 +및 공격 탐지 +ⓔ ‌비인가 이동형 저장매체 +사용 등 정보 보안 +주제에 대한 정기 교육 +ⓐ ‌악성코드 +탐지 및 차단 +ⓑ ‌화이트 +리스트 백신 +ⓒ ‌이동식 +저장매체 +사용 통제 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓔ 보안 교육 +ⓐ 백신 +ⓑ ‌화이트 +리스트 백신 +ⓒ ‌매체제어 +(DLP) +ⓓ IDS/IPS +ⓔ - + +--- + +88 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +용량 부족 +관측요청 접수시스템 +DB용량이 부족하여 위성 +운영사에서 전송하는 +요청을 저장하지 못해 미션 +수행 장애 +ⓐ ‌탑재체 DB 이중화로 +자원 고갈 시 가용성 +확보 방안 마련 +ⓑ ‌탑재체 DB 저장공간 +모니터링 +ⓒ 직무 교육 및 훈련 +ⓐ ‌시스템 +이중화 +ⓑ ‌보안 +모니터링 +ⓒ 직무 교육 +ⓐ - +ⓑ - +ⓒ - +정보 손실 +공개된 취약점을 통해 +탑재체 DB가 랜섬웨어에 +감염되어 탑재체 데이터 +암호화 +ⓐ ‌탑재체 DB 장비보안 +패치 +ⓑ ‌탑재체 DB의 안전한 +보관 방안 수립 및 구현 +ⓒ ‌탑재체 DB 네트워크 +접근제어 +ⓓ ‌내/외부 네트워크 침입 +및 공격 탐지 +ⓐ 보안패치 +ⓑ 보안 서버 +ⓒ ‌네트워크 +접근제어 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓐ PMS +ⓑ 문서 중앙화 +ⓒ 방화벽 +ⓓ IDS/IPS +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 +통해 경고 알림이 +발생하지않도록 하여 위성 +긴급 상황 시 대처 불가 +ⓐ ‌긴급 대응 및 위기관리 +시스템 이중화로 +DoS 공격 등 자원을 +고갈시키는 공격에 대한 +방안 마련 +ⓑ DoS 공격 탐지 및 차단 +ⓒ ‌위성운영 네트워크 +내/외부 침입 및 공격 +탐지 +ⓓ 주요 네트워크 망분리 +ⓔ ‌긴급 대응 및 위기관리 +시스템 네트워크 +접근제어 +ⓕ ‌비인가 단말 네트워크 +접속 차단 +ⓐ ‌시스템 +이중화 +ⓑ ‌DoS 공격 +탐지 및 +차단 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓓ ‌물리적/ +논리적 +망분리 +ⓔ ‌네트워크 +접근제어 +ⓕ ‌네트워크 +접근제어 +ⓐ - +ⓑ ‌Anti- +DDoS +ⓒ IDS/IPS +ⓓ - +ⓔ 방화벽 +ⓕ NAC + +--- + + +## 제4장 우주 보안아키텍처 | 89 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +관리서버 운영자가 공개 +세미나 또는 포럼에 회사 +기술현황을 설명하면서 +의도치 않게 관리서버 IP +또는 회사 네트워크 구성이 +노출되어 악의적 공격자에 +의해 관리서버가 공격당함 +ⓐ ‌공개적으로 접근 +가능한 시스템에 +정보를 게시하기 전에 +중요정보가 게시되지 +않도록 해당 내용을 +검토하는 절차 수행 +ⓐ 보안 교육 +ⓐ - +장비 또는 +미디어 손상 +관리서버 운영자의 운영 +미숙으로 관리서버 +소프트웨어 업데이트 시 +에러가 발생하여 위성 통신 +장애 +ⓐ ‌직무 교육 및 훈련으로 +휴먼에러 최소화 +ⓑ ‌위성 소프트웨어 +업데이트 시 안전성 +사전 점검 +ⓐ 직무 교육 +ⓑ ‌업데이트 +사전테스트 +ⓐ - +ⓑ - +강압, 강탈 +또는 부패 +위성 미션 및 운영 담당자가 +불법적인 금품을 받고 위성 +궤도를 임의의 조작하여 +위성 제어권 양도 +ⓐ ‌불법 행위 등 보안 인식 +개선 교육 및 훈련 +ⓐ 보안 교육 +ⓐ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +미션제어 및 운영지원 +시스템에 취약하게 +설정된 계정/패스워드를 +Guessing 공격으로 +탈취하여 접속 후 미션 및 +스케줄링 데이터 탈취 +ⓐ ‌미션제어 및 운영지원 +시스템 계정 및 권한 +점검 +ⓑ ‌미션제어 및 운영지원 +시스템의 2차인증 +ⓒ ‌패스워드 설정 및 관리 +등 정보 보안 주제에 +대한 정기 교육 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓑ 2차인증 +ⓒ 보안 교육 +ⓐ ‌서버 접근 +제어 +ⓑ MFA +ⓒ - +직원의 안전 +관련 부정 행위 +원격접속 악성코드에 +감염되어 있는 지상국 +임직원 PC를 통해 +미션제어 및 운영지원 +시스템 계정을 탈취하여 +미션 및 스케줄링 데이터 +삭제 +ⓐ 악성코드 탐지 및 차단 +ⓑ ‌미션제어 및 운영지원 +시스템 계정 및 권한 +점검 +ⓒ ‌미션제어 및 운영지원 +시스템의 2차인증 +ⓓ ‌PC보안 등 정보 보안 +주제에 대한 정기 교육 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓑ ‌사용자 계정 +및 권한 +검토 +ⓒ 2차인증 +ⓓ 보안 교육 +ⓐ 백신 +ⓑ ‌서버 접근 +제어 +ⓒ MFA +ⓓ - + +--- + +90 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +강압, 강탈 +또는 부패 +탑재체 데이터 분석 +담당자가 불법적인 금품을 +받고 고객의 DB분석 및 +시각화 데이터 유출 +ⓐ ‌DB분석 및 시각화 +데이터의 안전한 보관 +방안 수립 및 구현 +ⓑ ‌불법 행위 등 보안 인식 +개선 교육 및 훈련 +ⓐ 보안 서버 +ⓑ 보안 교육 +ⓐ ‌문서 +중앙화, +DRM +ⓑ - +직원의 안전 +관련 부정 행위 +지상국과 위성 운영사간 +VPN 계정 패스워드를 +직원의 보안인식 미흡으로 +취약하게 설정되어 +공격자에게 탑재체 데이터 +탈취 당함 +ⓐ ‌VPN사용자 계정 및 +권한 점검 +ⓑ VPN사용자의 2차인증 +ⓒ ‌탑재체 데이터의 안전한 +보관 방안 수립 및 구현 +ⓓ ‌계정 관리 및 패스워드 +설정 등 정보 보안 +주제에 대한 정기 교육 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓑ 2차인증 +ⓒ 보안 서버 +ⓓ 보안 교육 +ⓐ ‌계정관리 및 +서버접근제어 +ⓑ MFA +ⓒ ‌문서 중앙화, +DRM +ⓓ - +권한 남용 +비인가된 내부 임직원이 +위성제어시스템 관리자 +계정을 탈취하여 위성 +제어권 탈취 및 오동작 유발 +ⓐ ‌위성 제어시스템 계정 +및 권한 점검 +ⓑ ‌위성 제어시스템 +2차인증 +ⓒ ‌위성운영 네트워크 +내/외부 침입 및 공격 +탐지 +ⓓ ‌계정 관리 및 패스워드 +설정 등 정보 보안 +주제에 대한 정기 교육 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓑ 2차인증 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓓ 보안 교육 +ⓐ ‌서버 접근 +제어 +ⓑ MFA +ⓒ IDS/IPS +ⓓ - +정전 또는 중단 +정전으로 인해 지상국 +상황실 운영이 불가 하여 +탑재체 수집 및 위성 운영 +장애 +ⓐ ‌지상국 설비에 정전 시 +안정적 전원 공급을 +위해 공급원 이중화 등 +가용성 확보 방안 마련 +ⓑ ‌지상국 설비 전력 +시스템 모니터링 +ⓐ ‌전원 +이중화, +배터리 +ⓑ ‌보안 +모니터링 +ⓐ ‌UPS/비상 +발전기 +ⓑ - +화재 +지상국 상황실에 화재가 +발생하여 탑재체 수집 및 +위성 운영 장애 +ⓐ ‌지상국 설비에 화재 시 +탐지 및 소화시스템 등 +가용성 확보 방안 마련 +ⓐ ‌화재 탐지 +무독성 가스 +소화 시스템 +ⓐ ‌화재 감지 +시스템, +소화 설비 + +--- + + +## 제4장 우주 보안아키텍처 | 91 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +건물 내 무단 +침입 +지상국 서버룸에 +무단침입하여 데이터 +수신 및 처리시스템을 +물리적으로 훼손하여 위성 +서비스 장애 +ⓐ ‌지상국 서버룸 출입 시 +인가된 인원만 출입이 +가능하도록 출입통제 +방안 마련 및 비인가자 +출입시 자산 보호 방안 +마련 +ⓑ ‌비인가자의 지상국 +서버룸 출입시 탐지, +알림, 추적 등 접근 +모니터링 +ⓐ 출입통제 +ⓑ ‌CCTV +모니터링 +ⓐ ‌출입통제 +시스템, +네트워크 렉 +ⓑ CCTV +건물 내 무단 +침입 +위성 운영실에 무단으로 +침입하여 위성 +제어시스템에 접근 후 제어 +설정을 변경하여 위성 제어 +장애 +ⓐ ‌지상국 위성운영실 출입 +시 인가된 인원만 출입이 +가능하도록 출입통제 +방안 마련 및 비인가자 +출입시 자산 보호 방안 +마련 +ⓑ ‌비인가자의 지상국 +위성운영실 출입시 +탐지, 알림, 추적 등 +접근 모니터링 +ⓐ 출입통제 + + +ⓑ ‌CCTV +모니터링 +ⓐ ‌출입통제 +시스템, +네트워크 렉 + + +ⓑ CCTV +유해한 환경적 +영향 +항온항습기 고장으로 +서버실이 과열되어 +미션제어 및 운영지원 서버 +CPU Tjmax에 도달하여 +위성 운영 장애 +ⓐ ‌지상국 서버실의 온도/ +습도로 인한 장비 손상 +방지를 위한 항온·항습 +관리 방안 마련 +ⓐ ‌항온 항습 +관리 +ⓐ ‌항온·항습기 +/FMS +기물 파손 +내부 직원이 관측요청 +접수시스템 네트워크 +케이블을 훼손하여 +통신장애로 인해 위성 +운영사에서 전송하는 +관측요청 접수 불가 +ⓐ 장애 대응 훈련 +ⓐ ‌장애 대응 +훈련 +ⓐ - +기물 파손 +내부 직원이 긴급대응 및 +위기관리 시스템 서버를 +물리적으로 파손하여 위성 +긴급상황 발생 시 대응 불가 +ⓐ 장애 대응 훈련 +ⓐ ‌장애 대응 +훈련 +ⓐ - + +--- + +92 | 우주 보안 모델 +(4) 위성 운영사 영역 +위성 운영사 영역은 GSaaS접속 시스템의 미흡한 계정관리를 이용한 위성 제어권 및 데이터 +탈취, 정전, 화재 등 사고로 인한 위성서비스 제공 차질 등의 보안 위협이 존재한다. +해당 위협에 대응하기 위한 대표적인 GSaaS 보안 요구사항은 GSaaS 접속 시스템 접근 시 +2차 인증, 안정적인 전력 공급을 위한 전력 공급 이중화, 화재 탐지 및 소화시스템 등이 있다. +위성 운영사 영역에서 발생할 수 있는 보안 위협에 대응하기 위해 필요한 보안 요구사항, +보안기술, 보안솔루션은 아래 표와 같다. +표 21 +위성 운영사 영역 보안 요구사항, 보안기술, 보안솔루션 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +GSaaS 접속 시스템 초기 +구축 시 발급된 디폴트 +관리자 계정/패스워드를 +통해 공격자가 외부에서 +접속하여 위성 제어권 및 +중요정보 탈취 +ⓐ ‌GSaaS 접속 시스템 계정 +및 패스워드 관리 +ⓑ ‌GSaaS 접속 시스템의 +2차인증 +ⓒ ‌GSaaS 접속 시스템 +기술적 취약점 진단 +ⓐ ‌계정 및 +패스워드 +관리 +ⓑ 2차인증 +ⓒ 취약점 점검 +ⓐ ‌계정관리 및 +서버접근제어 +ⓑ MFA +ⓒ 취약점 진단 +정전 또는 +중단 +정전으로 인해 GSaaS +접속 시스템 운영 불가로 +위성 서비스 제공에 차질 +ⓐ ‌위성 운영사 설비에 정전 +시 안정적 전원 공급을 +위해 공급원 이중화 등 +가용성 확보 방안 마련 +ⓑ ‌위성 운영사 설비 전력 +시스템 모니터링 +ⓐ ‌전원 이중화, +배터리 +ⓑ ‌보안 +모니터링 +ⓐ ‌UPS/비상 +발전기 +ⓑ - +화재 +위성 운영사에 화재가 +발생하여 위성 서비스 +제공에 차질 +ⓐ ‌위성 운영사 설비에 화재 +시 탐지 및 소화시스템 등 +가용성 확보 방안 마련 +ⓐ ‌화재 탐지 +무독성 가스 +소화 시스템 +ⓐ ‌화재 감지 +시스템, 소화 +설비 +나. 우주 공급망 보안 요구사항 +우주 공급망에서는 소프트웨어를 개발하는 과정에서 백도어가 삽입되어 위성의 미션 +수행에 장애가 발생하거나 취약한 오픈소스 라이브러리를 통한 원격 공격으로 탑재체 데이터 +탈취, 악성코드가 삽입된 업데이트 파일로 인해 위성 제어 장애를 유발, 재택 및 원격 근무 시 +데이터가 유출되는 등의 보안 위협이 존재한다. + +--- + + +## 제4장 우주 보안아키텍처 | 93 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +이러한 보안 위협에 대응하기 위한 우주 공급망의 주요 보안 요구사항은 소프트웨어 및 +펌웨어 배포 전 충분한 검증 절차 수행, 악성코드 검사, 소프트웨어 개발 시 검증된 도구 사용, +원격 근무 솔루션 도입 등이 있다. +우주 공급망에서 발생할 수 있는 보안 위협에 대응하기 위한 주요 보안 요구사항은 아래 +그림과 같다. +그림 20 +우주 공급망 주요 보안 요구사항 + +--- + +94 | 우주 보안 모델 +우주 공급망은 위성/발사체 제조사, 지상국 운영사, 위성 운영사 영역으로 구분하여 다양한 +보안 위협에 대응하기 위한 보안 요구사항을 제시한다. +(1) 위성/발사체 제조사 영역 +위성/발사체 제조사 영역은 악성코드가 포함된 IDE플러그인을 사용한 위성SW 개발로 위성 +시스템 전파, 개발 완료후 삭제되지 않은 계정정보를 이용한 위성 제어권 탈취, 악성코드가 +포함된 취약한 오픈소스 라이브러리를 이용한 위성 탈취 등의 보안 위협이 존재한다. +해당 위협에 대응하기 위한 대표적인 우주 공급망 보안 요구사항은 우주SW 개발환경에 +대한 악성코드 검사, 위성 탑재 SW 및 FW의 배포 전 정적/동적 소스코드 취약점 점검, 위성 +탑재 SW 및 FW 개발 시 충분히 검증된 안전한 오픈소스 라이브러리 사용 등이 있다. +위성/발사체 제조사 영역에서 발생할 수 있는 보안 위협에 대응하기 위해 필요한 보안 +요구사항, 보안기술, 보안솔루션은 아래 표와 같다. +표 22 +위성/발사체 제조사 영역 보안 요구사항, 보안기술, 보안솔루션 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성체 SW개발자가 +악성코드가 포함된 IDE +(Integrated Development +Environment) 플러그인을 +사용해 위성제어 SW를 +개발하여, 위성 시스템에 +악성코드 전파 및 제어권 +탈취 +ⓐ ‌위성SW 개발 환경 구축 +시 IDE, CI/CD 등 개발 +및 배포 도구에 충분히 +검증된 플러그인만 사용 +ⓑ ‌위성SW 개발 환경은 +백신 등의 도구를 +사용하여 악성코드 검사 +및 충분한 검증 후 사용 +ⓐ ‌안전한 개발 +환경 구축 +ⓑ ‌악성코드 +탐지 및 차단 +ⓐ - +ⓑ ‌백신, +클린PC +의도치 않은 +정보 누설 +위성체 제어시스템 +도입 시 테스트/디버그 +계정을 삭제하지 않아, +계정/패스워드를 +탈취한 공격자가 위성체 +제어시스템에 무단으로 +접속하여 위성 제어권 +탈취 +ⓐ ‌위성SW 개발 인프라는 +구축 시 충분한 보안성 검토 +후 사용 및 정기적으로 +취약점 검토 및 조치 수행 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 침투 테스트를 +통해 취약점 조치 후 배포 +ⓒ ‌위성에 탑재되는 SW, +FW는 배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓐ ‌소프트웨어 +취약점 점검 +ⓑ 침투 테스트 +ⓒ ‌정적/동적 +소스코드 검사 +ⓐ - +ⓑ - +ⓒ ‌소스코드 +검사 도구 + +--- + + +## 제4장 우주 보안아키텍처 | 95 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/ +무단 사용 +위성활용 시스템 +업데이트를 위한 +Cron/Task Scheduler +등록시 내부 임직원이 +악의적으로 외부 +C&C서버 접속명령을 +등록하여 주기적으로 +페이로드 데이터 탈취 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 검증 +후 배포 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓐ ‌인프라 +취약점 점검 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓐ - +ⓑ ‌소스코드 +검사 도구 +악성코드 +위성체 제어를 위한 온 +보드 컴퓨터의 펌웨어 +라이브러리에 백도어를 +삽입하여 위성이 +궤도진입을 확인 후 별도 +안테나를 통해 위성체를 +제어하여 위성 탈취 +ⓐ ‌위성SW 개발 인프라는 +구축 시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 검토 +및 조치 수행 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 백신 +등의 도구를 사용하여, +악성코드 검사 후 배포 +ⓒ ‌위성에 탑재되는 SW, +FW시 사용되는 사용된 +오픈소스 라이브러리는 +검증된 라이브러리만 +사용 +ⓐ ‌방화벽으로 +보호되는 +자체 +라이브러리 +저장소 +ⓑ ‌악성코드 +탐지 및 차단 +ⓒ SBOM +ⓐ 방화벽 +ⓑ ‌백신, +클린PC +ⓒ ‌SBOM +검사 도구 +장치 또는 +애플리케이션 +조작 +공격자가 위성제조사 +코드DB에 침투하여 위성 +궤도 및 자세를 제어하는 +상수 변수를 조작하고, +변조된 위성제어SW가 +지상국 운영사에 납품되면 +소규모 드리프트가 발생하여 +위성 제어 장애 유발 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 +의도치 않은 +정보 누설 +위성 페이로드SW 개발 +시 테스트 편의상 사용한 +MASTER_KEY(인증정보) +외부 상수 변수를 +제거하지 않고 위성에 +탑재한 후 공격자가 외부 +변수를 수집하여 위성 +페이로드SW에 직접 +접근하여 페이로드 데이터 +탈취 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 + +--- + +96 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +공격자가 위성제조사 +라이브러리DB에 +침투하여 로직밤 +악성코드를 페이로드SW +삽입하여 위성 궤도에 +오른 후 로직밤을 활성화 +시켜 미션 수행 장애 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 검증 +후 배포 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 백신 +등의 도구를 사용하여, +악성코드 검사 후 배포 +ⓒ ‌위성에 탑재되는 SW, +FW시 사용되는 사용된 +오픈소스 라이브러리는 +검증된 라이브러리만 +사용 +ⓐ ‌소프트웨어 +개발 보안 +ⓑ ‌악성코드 +탐지 및 차단 +ⓒ SBOM +ⓐ - +ⓑ ‌백신, +클린PC +ⓒ ‌SBOM +검사 도구 +(2) 지상국 운영사 영역 +지상국 운영사 영역은 공격자가 지상국 서비스 빌드 파이프라인에 악성 플러그인을 설치하여 +위성 제어시스템 권한 탈취, 취약한 오픈소스 라이브러리 사용으로 미션 장애 유발, 위성 +제어시스템 패치에 악성코드에 감염된 비인가 이동식 저장매체 사용으로 위성 제어 장애 유발, +위성 업데이트 서버 스푸핑으로 위성제어SW 변조 및 위성제어 장애 발생 등의 보안 위협이 +존재한다. +해당 위협에 대응하기 위한 대표적인 우주 공급망 보안 요구사항은 우주SW 개발환경에 대한 +보안성 검토, 위성 탑재 SW 및 FW 개발 시 검증되고 안전한 라이브러리 사용, 위성 탑재 SW 및 +FW 패치 시 악성코드 검사, 위성SW 배포시 전송 데이터 암호화 등이 있다. +지상국 운영사 영역에서 발생할 수 있는 보안 위협에 대응하기 위해 필요한 보안 요구사항, +보안기술, 보안솔루션은 아래 표와 같다. + +--- + + +## 제4장 우주 보안아키텍처 | 97 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +표 23 +지상국 운영사 영역 보안 요구사항, 보안기술, 보안솔루션 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 서비스 SW +개발환경(IDE, CI/CD)의 +빌드 파이프라인에 +백도어 모듈을 삽입하는 +플러그인이 설치되어 +지상국 운영사에 납품후 +위성 제어시스템이 +C&C서버와 통신이 +활성화 되어 위성 제어권 +탈취 +ⓐ ‌위성SW 개발 인프라는 +구축 시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 검토 +및 조치 수행 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 침투 +테스트를 통해 취약점 +조치 후 배포 +ⓐ ‌안전한 배포 +환경 구축 +ⓑ 침투 테스트 +ⓐ ‌백신, +IPS/IDS +ⓑ ‌방화벽, 서버 +접근제어 +악성코드 +지상국 운영사 개발자가 +악성 애플리케이션이 +설치된 개인용 모바일 +테블릿을 GSaaS 모바일 +앱 개발을 위해 설치된 +내부 무선망에 접속, 해당 +기기를 통해 공격자가 +내부망에 백도어형 악성 +코드 유포 소스코드 등 +중요 정보 유출 +ⓐ ‌위성 운영SW +개발 시스템에 +무선접속시 승인받은 +사용자/기기 인증을 +수행하고 통신세션을 +암호화해야하며 모바일 +장치장치의 경우 정보를 +암호화 +ⓐ ‌무선 +접근통제 +ⓐ WIPS +의도치 않은 +정보 누설 +공격자가 지상국 클라우드 +개발환경에서 운영환경 +접근권한이 있는 IAM키를 +탈취하여 위성활용 +시스템에 무단으로 +접속하여 탑재체 데이터 +탈취 +ⓐ ‌위성SW 개발 환경 구축 +시 IDE, CI/CD 등 개발 +및 배포 도구에 충분한 +보안성 검토 후 사용 +정기적으로 취약점 검토 +및 조치 수행 +ⓐ ‌네트워크 +접근통제 +ⓐ ‌방화벽, 서버 +접근제어 +네트워크로 +연결된 IT +시스템이나 +애플리 +케이션의 +논리적 손상 +악의적인 우주SW개발사 +임직원이 RCE취약점이 +있는 오픈소스를 추가하고 +SBOM을 위조하여 +납품, 지상국 탑재체 +제어시스템에 원격으로 +접속하여 미션 수행에 +장애 유발 +ⓐ ‌위성에 탑재되는 SW, +FW시 사용되는 사용된 +오픈소스 라이브러리는 +검증된 라이브러리만 +사용 +ⓐ SBOM +ⓐ ‌SBOM +검사 도구 + +--- + +98 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리 +케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 +개발 시 커널 권한 상승 +취약점이 있는 오픈 +소스를 사용하여 공격자가 +원격 공격을 통해 권한을 +상승시켜 페이로드 데이터 +탈취 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 검증 +후 배포 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓒ ‌위성에 탑재되는 SW, +FW는 배포 전 침투 +테스트를 통해 취약점 +조치 후 배포 +ⓐ ‌안전한 +소프트웨어 +배포 및 +테스트 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓒ 침투 테스트 +ⓐ - +ⓑ ‌소스코드 +검사 도구 +ⓒ - +악성코드 +지상국에서 탑재체 +제어시스템 자체 개발 +시 백도어가 삽입되어 +있는 공개된 Docker +Hub 이미지를 사용하여 +공격자가 원격접속 후 +랜섬웨어를 통해 미션 +수행 장애 발생 +ⓐ ‌위성SW 개발 환경 구축 +시 IDE, CI/CD 등 개발 +및 배포 도구에 충분한 +보안성 검토 후 사용 +정기적으로 취약점 검토 +및 조치 수행 +ⓑ ‌위성SW 개발은 +보안성이 충분히 보장된 +환경에서만 수행 +ⓐ ‌안전한 개발 +환경 구축 +ⓑ ‌악성코드 +탐지 및 차단 +ⓐ - +ⓑ ‌백신, +클린PC +네트워크로 +연결된 IT +시스템이나 +애플리 +케이션의 +논리적 손상 +지상국에서 탑재체 +제어시스템을 자체 개발 +시 RCE 취약점이 있는 +오픈 소스를 사용하여 +공격자가 원격접속 후 +제어권 탈취 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 검증 +후 배포 +ⓑ ‌위성에 탑재되는 SW, +FW시 사용되는 사용된 +오픈소스 라이브러리는 +검증된 라이브러리만 +사용 +ⓐ ‌소프트웨어 +개발 보안 +ⓑ SBOM +ⓐ - +ⓑ ‌SBOM +검사 도구 +의도치 않은 +정보 누설 +위성 제어시스템 유지보수 +엔지니어가 이메일을 +통해 키로거 악성코드에 +감염되어 공격자가 지상국 +위성 제어시스템 계정을 +탈취후 위성 제어 장애 +ⓐ ‌위성SW 개발 환경 구축 +시 IDE, CI/CD 등 개발 +및 배포 도구에 충분한 +보안성 검토 후 사용 +정기적으로 취약점 검토 +및 조치 수행 +ⓑ ‌위성SW 개발은 +보안성이 충분히 보장된 +환경에서만 수행 +ⓐ ‌안전한 개발 +환경 구축 +ⓑ ‌악성코드 +탐지 및 차단 +ⓐ ‌IPS/IDS +백신, +클린PC +ⓑ ‌백신, +클린PC + +--- + + +## 제4장 우주 보안아키텍처 | 99 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성 제어시스템 패치 +시 악성코드에 감염된 +USB를 삽입하여 +위성체 운영 SW 서버가 +랜섬웨어에 감염되어 위성 +제어 장애 발생 +ⓐ ‌위성SW 배포 시 배포 +도구에 충분한 보안성 +검토 후 사용 +정기적으로 취약점 검토 +및 조치 수행 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 백신 등의 +도구를 사용 +하여, 악성코드 검사 후 +배포 +ⓐ ‌안전한 +소프트웨어 +배포 및 +테스트 +ⓑ ‌악성코드 +탐지 및 차단 +ⓐ ‌클린PC +DLP +ⓑ ‌백신, +클린PC +악성코드 +RCE(Remote Code +Execution) 취약점 +코드를 삽입된 비인가 +모바일 코드 패치 파일을 +유지보수 엔지니어가 +인터넷에서 다운받아 위성 +제어시스템에 설치하여 +공격자가 원격으로 위성체 +제어시스템에 접속하여 +위성 제어 장애 +ⓐ ‌위성SW 배포 시 배포 +도구에 충분한 보안성 +검토 후 사용 +정기적으로 취약점 검토 +및 조치 수행 +ⓐ ‌안전한 +소프트웨어 +배포 및 +테스트 +ⓐ - +권한 남용 +공격자가 계약이 종료된 +유지보수 업체의 탑재체 +제어시스템 계정/ +패스워드를 사용하여 +탑재체 제어시스템에 +무단접근하여 미션 수행 +장애 유발 +ⓐ ‌위성SW 개발 및 배포는 +보안성이 충분히 보장된 +환경에서만 수행 +ⓐ ‌사용자 계정 +및 권한 검토 +ⓐ ‌서버 +접근제어 +장비 또는 +미디어 손상 +탑재체 제어시스템 +유지보수 엔지니어가 +실수로 테스트 데이터를 +운영DB에 입력하여 +탑재체 미션 관련 +데이터가 변조되어 미션 +수행 장애 발행 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 검증 +후 배포 +ⓐ ‌개발 및 +테스트 +환경/운영 +환경 분리 +ⓐ - + +--- + +100 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +정보 염탐 +악의를 가진 클라우드 +시스템 유지보수 +엔지니어가 취약한 +클라우드 IAM정보 탈취 +후 위성 운영사 클라우드 +테넌트에 접근하여 +페이로드 데이터 탈취 +ⓐ ‌위성 클라우드 접속 +시스템은 제로트러스트 +기반 인증 도입 +ⓐ ‌제로트러스트 +기반 인증 +ⓐ ‌OTP, 바이오 +인증 +정보 조작 +위성운영 시 +위성제어SW를 업데이트 +중 RF스푸핑 공격을 통해 +위성제어SW를 변조하여 +위성 제어 장애 발생 +ⓐ ‌위성SW 배포 시 암호화 +채널 사용 +ⓑ ‌위성SW 개발 및 배포는 +보안성이 충분히 보장된 +환경에서만 수행 +ⓐ 암호화 통신 +ⓑ ‌해시, 체크썸 +ⓐ https 등 +ⓑ - +(3) 위성 운영사 영역 +위성 운영사 영역은 공격자가 외부 코드DB에서 위성활용 시스템 시스템 인증정보 탈취 및 +위성 활용 서비스 장애 유발, 재택근무 환경에서 위성 활용 서비스 SW개발자의 개인 단말이 +악성코드에 감염되어 소스코드 및 위성정보 유출, 위성활용 시스템의 미흡한 권한 관리로 +공격자가 비인가 접근 및 데이터 탈취 등의 보안 위협이 존재한다. +해당 위협에 대응하기 위한 대표적인 우주 공급망 보안 요구사항은 우주SW 개발환경에 대한 +보안성 검토, 비대면 개발 업무환경에 보안 적용, 위성 운영 인프라 계정 및 권한관리 등이 있다. +위성 운영사 영역에서 발생할 수 있는 보안 위협에 대응하기 위해 필요한 보안 요구사항, +보안기술, 보안솔루션은 아래 표와 같다. + +--- + + +## 제4장 우주 보안아키텍처 | 101 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +표 24 +위성 운영사 영역 보안 요구사항, 보안기술, 보안솔루션 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +공격자가 취약한 +우주SW개발사의 외부 +코드DB에 침투하여 +하드코딩된 인증정보를 +탈취하여 위성 운영사 +위성활용 시스템에 접속하여 +위성 활용 서비스 장애 유발 +ⓐ ‌위성SW 개발 인프라는 +구축 시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 검토 +및 조치 수행 +ⓐ ‌방화벽으로 +보호되는 +자체 +소스코드 +저장소 +ⓐ 방화벽 +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 +랜섬웨어 감염 +ⓐ ‌위성SW 개발 인프라는 +구축 시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 검토 +및 조치 수행 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 백신 +등의 도구를 사용하여, +악성코드 검사 후 배포 +ⓒ ‌위성에 탑재되는 SW, +FW시 사용되는 사용된 +오픈소스 라이브러리는 +검증된 라이브러리만 사용 +ⓐ ‌방화벽으로 +보호되는 +자체 +라이브러리 +저장소 +ⓑ ‌악성코드 +탐지 및 차단 +ⓒ SBOM +ⓐ 방화벽 +ⓑ ‌백신, +클린PC +ⓒ ‌SBOM +검사 도구 +직원의 안전 +관련 부정 +행위 +위성활용 시스템 SW +개발 담당자가 재택 근무 +환경에서 소스코드 수정 +작업 중 스피어피싱을 통해 +개인 단말이 악성코드에 +감염되어 위성체 SW +소스코드, 위성 정보 등 +중요 정보 유출 +ⓐ ‌위성SW 개발은 +보안성이 충분히 보장된 +환경에서만 수행 +ⓐ ‌비대면 업무 +환경에 보안 +구축 + +ⓐ ‌VPN, 백신, +원격 보안 +솔루션, +IPS/IDS + +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +우주SW개발사가 Zero +Day 취약점이 존재하는 +디바이스 드라이버를 +커널에 추가한 상태로 +납품하여 공격자가 +원격접속 취약점을 통해 +페이로드 데이터 탈취 +ⓐ ‌위성SW 개발 인프라는 +구축 시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 검토 +및 조치 수행 +ⓑ ‌위성에 탑재되는 SW, +FW시 사용되는 사용된 +오픈소스 라이브러리는 +검증된 라이브러리만 사용 +ⓐ 보안 패치 +ⓑ SBOM +ⓐ - +ⓑ ‌SBOM +검사 도구 + +--- + +102 | 우주 보안 모델 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +권한 남용 +위성활용 시스템 업데이트 +시 임시로 root권한을 +부여한 유지보수 계정을 +비활성화 하지 않아 해당 +계정/패스워드를 획득한 +공격자가 위성활용 +시스템에 접근하여 +페이로드 데이터 탈취 +ⓐ ‌위성활용 시스템의 계정 +및 권한 관리 +ⓑ ‌위성SW 배포는 +보안성이 충분히 보장된 +환경에서만 수행 +ⓐ ‌계정 및 +패스워드 +관리 +ⓑ ‌이상징후 +탐지 및 차단 +ⓐ ‌계정관리 및 +서버 +접근제어 +ⓑ IPS/IDS +원격 정탐, +도청 +탑재체 데이터 처리 +및 가공 시스템 +원격유지보수 시 암호화된 +터널링에 사용되는 +사설CA(Certificate +Authority) 키값을 +탈취하여 스니핑을 통해 +페이로드 데이터 탈취 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 검증 +후 배포 +ⓑ ‌위성SW 개발 및 배포는 +보안성이 충분히 보장된 +경에서만 수행 +ⓐ ‌암호화 키 +관리 +ⓑ ‌해시, 체크썸 +ⓐ - +ⓑ - +악성코드 +탑재체 데이터 처리 및 +가공 시스템 패치 시 +원격접속 악성코드가 +삽입된 인스톨 파일을 +사용하여 Update 후 +공격자가 외부에서 +탑재체 데이터 처리 및 +가공 시스템에 접속하여 +페이로드 데이터 탈취 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 검증 +후 배포 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 백신 +등의 도구를 사용하여, +악성코드 검사 후 배포 +ⓐ ‌안전한 +소프트웨어 +배포 및 +테스트 +ⓑ ‌악성코드 +탐지 및 차단 +ⓐ - +ⓑ ‌백신, +클린PC +악성코드 +랜섬웨어 코드가 포함되어 +있는 탑재체 데이터 처리 +및 가공시스템 업데이트 +파일을 무결성 검증을 +수행하지 않고 업데이트 +하여 탑재체 데이터 +처리 및 가공 시스템이 +랜섬웨어에 감염되어 +페이로드 제공 등 위성 +활용 서비스 장애 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 검증 +후 배포 +ⓑ ‌위성SW 개발 및 배포는 +보안성이 충분히 보장된 +환경에서만 수행 +ⓒ ‌위성에 탑재되는 SW, +FW는 배포 전 백신 등의 +도구를 사용하여, 성코드 +검사 후 배포 +ⓐ ‌안전한 +소프트웨어 +배포 및 +테스트 +ⓑ ‌해시, 체크썸 +ⓒ ‌악성코드 +탐지 및 차단 +ⓐ - +ⓑ - +ⓒ ‌백신, +클린PC + +--- + + +## 제4장 우주 보안아키텍처 | 103 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +제2절 +우주 보안 아키텍처 +우주 보안 아키텍처는 GSaaS와 우주 공급망에서 도출된 보안 요구사항을 바탕으로 보안기술, +보안솔루션에 대한 활용방안을 도식화하여 표현한 아키텍처이다. +NIST IR 8270(상업용 위성 운영을 위한 사이버보안 프레임워크 적용), NIST IR 8401 +(지상국에서 위성의 명령과 제어를 보장하기 위한 사이버보안 프레임워크 적용), BSI-TR- +03184(우주 시스템 정보보안) part2 등에서 요구하는 기능 요구사항을 위성 활용 서비스별 보안 +아키텍처 구성 기준에 반영하였다. +가. GSaaS 보안 아키텍처 +GSaaS 보안 아키텍처 구성 기준은 앞서 살펴본 보안 요구사항을 반영하여 아래와 같은 +기준으로 구성한다. +그림 21 +GSaaS 보안 아키텍처 구성 기준 + +--- + +104 | 우주 보안 모델 +보안 아키텍처 구성 기준을 적용한 GSaaS 보안 아키텍처는 아래 그림과 같다. +그림 22 +GSaaS 보안 아키텍처 + +--- + + +## 제4장 우주 보안아키텍처 | 105 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +나. 우주 공급망 보안 아키텍처 +우주 공급망 보안 아키텍처 구성 기준은 앞서 살펴본 보안 요구사항을 반영하여 아래와 같은 +기준으로 구성하였다. +그림 23 +우주 공급망 보안 아키텍처 구성기준 + +--- + +106 | 우주 보안 모델 +보안 아키텍처 구성 기준을 적용한 우주 공급망 보안 아키텍처는 아래 그림과 같다. +그림 24 +우주 공급망 보안 아키텍처 + +--- + + +## 제4장 우주 보안아키텍처 | 107 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +제3절 +우주 보안 체크리스트 +가. 개요 +우주기업 보안담당자가 우주기업의 현재 보안상황을 진단하고 우주보안 대책을 수립할 수 +있도록 우주 보안 체크리스트를 제시한다. +우주 보안 체크리스트는 CMMC8 2단계 통제항목을 기준으로 한국형 위험관리체계인 +K-RMF9, 유럽연합 보안 Directive인 NIS210, 국내 정보보호 관리체계(ISMS11)를 반영하여 +작성하였다. +CMMC는 미 국방부와 계약하거나 납품하는 기업들이 반드시 준수해야 하는 사이버보안 인증 +제도이다. 최근 국내 우주기업들이 미 국방부에 입찰하거나 미국 방산업체와 공동 개발 하도급 +형태로 계약을 체결 또는 협업하는 경우가 많아지고 있는 추세여서 CMMC 기준을 우주 보안 +체크리스트의 기반으로 활용하고자 하였다. +K-RMF는 국내 방위산업 무기체계의 사이버 보안 위협을 시스템의 전 생애주기(기획, 개발, +운영, 폐기)에 걸쳐 체계적으로 관리하기 위한 한국형 위험관리 프레임워크이다. 국방/안보 관련 +우주 시스템을 개발하거나 운영하는 경우, 국방부와의 계약으로 우주 관련 프로젝트를 수행하는 +우주기업의 경우 K-RMF를 준수해야 할 수 있으므로 우주 보안 체크리스트에 반영하였다. +NIS2는 높은 수준의 공통 사이버보안 수준 확보를 위해 유럽연합에서 제정한 지침으로, +우주산업은 필수기업으로 분류되어 NIS2 Directive를 준수하도록 요구하고 있다. 국내 우주기업 +중 유럽 EU회원국에 지사나 법인이 있는 경우, EU시장에 우주 서비스(위성통신, 지상국 운영, +탑재체 데이터 제공 등)를 제공하는 경우, EU 회원국의 기업과 계약에 사이버보안 요건이 +포함되는 경우 NIS2를 준수해야 하는 의무가 발생할 수 있으므로 우주 보안 체크리스트에 +반영하였다. +국내 정보보호 관리체계(ISMS)은 우주기업에서 정보보안을 최적으로 운영할 수 있는 보안 +기준을 제시한 기준이므로 우주 보안 체크리스트에 반영하였다. +8 ‌CMMC : Cybersecurity Maturity Model Certification +9 ‌K-RMF : Korea - Risk Management Framework +10 ‌NIS : network and information systems +11 ‌ISMS : Information Security Management System + +--- + +108 | 우주 보안 모델 +본 체크리스트는 다음 표에서 보는 바와 같이 12개 분야, 53개 항목으로 구성된다. +표 25 +우주 보안 체크리스트 +분야 +항목 설명 +접근통제(AC) +AC-01 +접근통제 정책 +AC-02 +최소권한 +AC-03 +특수 권한 사용 +AC-04 +정보흐름 통제 +AC-05 +직무 분리 +AC-06 +로그인 시도 실패 +AC-07 +세션 잠금 및 종료 +AC-08 +원격 접근통제 +AC-09 +무선 접속 +AC-10 +모바일기기 연결 통제 +AC-11 +외부 연결 통제 +AC-12 +공공 정보 통제 +식별 및 인증(IA) +IA-01 +식별 및 인증 +IA-02 +다중 인증 +시스템 및 통신 보안(SC) +SC-01 +경계 보호 +SC-02 +보안공학 원칙 적용 및 기능 분리 +SC-03 +저장 및 전송 정보 보안 +SC-04 +통신 보안 +SC-05 +암호화 +SC-06 +협업 컴퓨팅 장치 +SC-07 +모바일 코드 및 VoIP 통제 +시스템 및 정보무결성(SI) +SI-01 +취약점 점검 및 결함교정 +SI-02 +악성코드 방지 +SI-03 +보안 경보, 권고 +SI-04 +시스템 및 통신 트래픽 모니터링 + +--- + + +## 제4장 우주 보안아키텍처 | 109 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +분야 +항목 설명 +시스템/서비스 운영 +관리(SO) +SO-01 +유지보수 통제 +SO-02 +시스템 감사 및 감사기록 분석, 보고 +SO-03 +시간동기화 +SO-04 +휴대용 저장장치(저장매체 등) 보안 +SO-05 +형상관리 +SO-06 +시스템 및 애플리케이션 보안 요구사항 정의 +SO-07 +시스템/애플리케이션 변경관리 +SO-08 +개발 시험 및 평가 +SO-09 +기능최소화 및 사용자설치 소프트웨어 통제 +사고 대응(IR) +IR-01 +사고 처리 및 테스트 +IR-02 +사고 보고 +인원보안(PS) +PS-01 +인원보안 +PS-02 +보안인식 교육·훈련 +물리보안(PE) +PE-01 +물리적 접근통제 +PE-02 +대체 근무장소 보안 +PE-03 +보호설비 운영 +위험 평가 및 +보안평가(RA) +RA-01 +위험 평가 +RA-02 +보안 통제 모니터링 및 효과성 평가 +보안 거버넌스(SG) +SG-01 +보안 정책 수립 +SG-02 +보안 역할 및 책임 정의 +SG-03 +자산관리 +SG-04 +법적요구사항 준수 +비상계획(CP) +CP-01 +비상계획 수립 +CP-02 +백업 및 이중화 관리 +공급망관리(SM) +SM-01 +공급망 보호 +SM-02 +인수 전 평가 +SM-03 +모든 출처 정보 사용 +SM-04 +변조/위조 방지 및 탐지 + +--- + +110 | 우주 보안 모델 +나. 분야별 항목 +다음은 12개 분야별로 우주 보안 체크리스트를 설명한다. +(1) 접근통제 +접근통제 분야는 우주 기업의 네트워크, 시스템, 애플리케이션에 대한 접근에 관한 항목이다. 총 +12개 항목으로 구성되어 있으며, 접근통제, 최소권한 부여, 원격 접속통제, 무선 통신 보안 등을 +다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 해설서 및 적용 사례집”에서 상세히 +기술한다. +표 26 +우주 보안 체크리스트(접근통제) +우주보안 항목 +항목 설명 +AC-01 +접근통제 정책 +y 시스템 접근권한을 부여한 기기, 사용자 및 프로세스에 한하여 접근을 허용해야 +한다 +AC-02 +최소권한 +y 사용자에게 부여된 과업 및 직책을 수행하는데 필요한 최소한의 권한을 +부여한다. +AC-03 +특수 권한 사용 +y 특수권한 사용자가 실행할 수 있는 기능에 대한 시스템 접속을 제한하고 +특수권한으로 실행되는 기능들을 감사해야 한다. +AC-04 +정보흐름 통제 +y 시스템 내부 및 시스템 간 정보 흐름을 통제해야 한다. +AC-05 +직무 분리 +y 개인의 직무를 분리하고 이에 따라 시스템의 접근권한을 부여해야 한다. +AC-06 +로그인 시도 +실패 +y 일정 기간 동안 연속으로 유효하지 않은 로그인 시도를 제한하고 최대 허용 +횟수를 초과하면 자동으로 계정을 잠궈야 한다 +AC-07 +세션 잠금 및 +종료 +y 일정 기간 동안 세션 사용이 없거나 사용자에 의한 세션 잠금 요청이 있을 경우 +해당 세션을 잠그고,세션 종료 조건 발생 시 자동으로 세션을 종료해야 한다 +AC-08 +원격 접근통제 +y 승인된 업무 및 사용자에 대해서만 원격접속을 허용하고 원격접속 세션을 +암호화 및 모니터링해야 한다. +AC-09 +무선 접속 +y 시스템에 무선접속시 승인받은 사용자/기기 인증을 수행하고 통신세션을 +암호화해야 한다. +AC-10 +모바일기기 연결 +통제 +y 승인된 모바일 장치에 대해서만 시스템의 연결을 허용하고 모바일 장치에서 +정보를 암호화해야 한다. +AC-11 +외부 연결 통제 +y 외부 시스템과 조직 내부시스템에 대한 연결 및 사용을 확인하고 통제해야 한다 +AC-12 +공공 정보 통제 +y 공개적으로 접근 가능한 시스템에 정보를 게시하기 전에 해당 내용을 검토하여 +중요정보가 게시되지 않도록 한다 + +--- + + +## 제4장 우주 보안아키텍처 | 111 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +(2) 식별 및 인증 +식별 및 인증 분야는 우주 기업의 네트워크, 시스템, 애플리케이션에 접속하는 기기, 사용자, +프로세스를 식별하고 승인 여부를 파악하여 인증을 획득하는 사항에 대해 다루고 있다. 각 항목에 +대한 구체적인 설명은 “우주보안모델 해설서 및 적용 사례집”에서 상세히 기술한다. +표 27 +우주 보안 체크리스트(식별 및 인증) +우주보안 항목 +항목 설명 +IA-01 +식별 및 인증 +y 시스템 사용자, 프로세스 및 장치를 식별하고 인증해야 한다. +IA-02 +다중 인증 +y 특수권한 계정으로 네트워크에 접속할 경우에는 다중 인증을 사용하고 +재전송 공격 방지 인증 메커니즘을 적용해야 한다. +(3) 시스템 및 통신 보안 +시스템 및 통신보안 분야는 우주기업이 내/외부 네트워크를 이용하여 조직 내부의 중요 정보를 +안전하게 운영하기 위한 기준이며, 네트워크 경계 보안, 저장 및 전송 정보 보안, 통신 보안, +암호화 등의 보안사항에 대해 다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 해설서 +및 적용 사례집”에서 상세히 기술한다. +표 28 +우주 보안 체크리스트(시스템 및 통신 보안) +우주보안 항목 +항목 설명 +SC-01 +경계 보호 +y 조직 시스템의 외부 경계와 주요 내부 경계에서의 통신(송수신 정보)을 +모니터링, 제어 및 보호해야 한다 +SC-02 +보안공학 원칙 적용 +및 기능분리 +y 보안 아키텍처는 심층 방어 원칙을 기반으로 설계하고, 시스템의 관리 +기능과 사용자 기능을 명확히 분리하여 운영하여야 하며, 시스템 개발 +과정에서는 보안공학 원칙을 적용하여야 한다. +SC-03 +저장 및 전송 정보 +보안 +y 저장 및 전송되는 정보의 기밀성 및 무결성을 보호해야 한다. +SC-04 +통신 보안 +y 기본적으로 모든 트래픽을 거부하고, 필요한 트래픽만 예외적으로 +허용하는 방식으로 운용하고, 로컬 및 원격연결을 동시에 하지 못하도록 +통제하며 통신세션 종료 이후 또는일정기간동안 작업이 없을 경우 통신 +세션과 관련된 연결을 종료해야 한다. +SC-05 +암호화 +y 중요 정보는 암호화하고 암호화를 위한 암호키를 설정하고 관리해야 한다. + +--- + +112 | 우주 보안 모델 +우주보안 항목 +항목 설명 +SC-06 +협업 컴퓨팅 장치 +y 협업 컴퓨팅 장치의 원격 활성화를 금지하고 장치가 사용 중일 때는 +물리적으로 나타나는 표시를 통해 사용자가 장치가 사용 중임을 인식할 수 +있어야 한다. +SC-07 +모바일 코드 및 +VoIP 통제 +y 시스템 내 모바일 코드 및 VoIP의 사용을 모니터링·통제해야 한다. +(4) 시스템 및 정보 무결성 +시스템 및 정보 무결성 분야는 우주기업에서 운영하고 있는 시스템, 애플리케이션, 정보의 +무결성을 보장하기 위한 기준이며, 악성코드 방지, 결함 교정, 시스템 및 통신 트래픽 모니터링 +등 보안사항에 대해 다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 해설서 및 적용 +사례집”에서 상세히 기술한다. +표 29 +우주 보안 체크리스트(시스템 및 정보 무결성) +우주보안 항목 +항목 설명 +SI-01 +취약점 점검 및 +결함교정 +y 시스템과 애플리케이션의 취약점을 주기적으로 검사하고, 해당 시스템에 +영향을 미치는 신규 취약점이 확인될 때마다 검사하여 시스템의 결함을 +식별, 조치, 보고해야 한다 +SI-02 +악성코드 방지 +y 악성코드 식별 및 제거를 위해 시스템에 악성코드 방지솔루션을 설치하고 +파일 다운로드시 실시간으로 검사해야 한다. +SI-03 +보안 경보, 권고 +y 시스템 보안 경고와 권고를 모니터링하고 이에 대한 대책을 수립해야 한다 +SI-04 +시스템 및 통신 +트래픽 모니터링 +y 시스템의 무단 사용을 모니터링하고 송ㆍ수신되는 네트워크 트래픽을 +주기적으로 모니터링해야 한다. +(5) 시스템/서비스 운영 관리 +시스템/서비스 운영 관리 분야는 우주 기업의 시스템 및 서비스 운영시 요구되는 기준이며, +유지보수 통제, 감사 기록 분석 및 보고, 애플리케이션 개발보안, 변경관리, 휴대용 저장장치 보안 +등의 사항에 대해 다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 해설서 및 적용 +사례집”에서 상세히 기술한다. + +--- + + +## 제4장 우주 보안아키텍처 | 113 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +표 30 +우주 보안 체크리스트(시스템/서비스 운영 관리) +우주보안 항목 +항목 설명 +SO-01 +유지보수 통제 +y 시스템 유지관리에 사용되는 도구, 기술, 메커니즘 및 인력을 통제해야 한다 +- 원격 유지보수 시스템 외부 반출 전 정보소거 +- 유지보수용 저장매체 악성코드 검사 +- ‌원격 유지보수 시 사전승인, 강화된 인증, 유지보수 활동 기록, 업무 종료 +시 세션 종료 +- ‌유지보수 인력 관리 감독 +SO-02 +시스템 감사 및 +감사기록 분석, +보고 +y 불법적이거나 승인되지 않은 시스템 활동을 모니터링, 분석, 조사 및 +보고하기 위한 시스템 감사 로그 및 기록을 생성 및 보관해야 하고 +부적절하거나 비정상적 활동을 분석 및 보고해야 한다. 또한 감사 정보를 +보호하고 감사 로깅 오류시 경고한다. +SO-03 +시간동기화 +y 감사기록을 위한 타임스템프생성을 위해 내부 시스템(NTP서버) 시간을 +사용해야 한다. +SO-04 +휴대용 +저장장치(저장매체 +등) 보안 +y 중요정보가 저장된 저장매체 및 휴대용 PC는 물리적으로 안전하게 +보관하고 기밀성, 무결성을 보호하기 위해 통제해야 한다. +- ‌저장매체 이동시 암호화 등으로 보호 +- ‌폐기 또는 재사용을 위해 반출되기 전에 정보소거하거나파기 +- ‌매체 백업 정보의 기밀성 보호 +SO-05 +형상관리 +y 시스템 구축 및 운영의 통제기준이 되는 최신화된 형상관리 +기준선(Baseline)을 식별하고 시스템 정보기술 제품들의 보안 환경설정을 +수립 및 문서화해야 한다. +SO-06 +시스템 및 +애플리케이션 보안 +요구사항 정의 +y 사업 기획 단계에서 시스템 및 서비스에 대한 정보보안 요구사항을 +정의해야 하며, 안전한 코딩 방안을 포함하여야 한다 +SO-07 +시스템/ +애플리케이션 +변경관리 +y 시스템 및 애플리케이션의 변경 사항을 검토, 승인/거부하고 변경내역을 +기록해야 하며 변경 전에 변경에 대한 잠재적인 보안 영향을 분석해야 +한다. +SO-08 +개발 시험 및 평가 +y 사전 정의된 보안 요구사항에 따라 정보시스템이 도입 또는 +구현되었는지를 검토하기 위하여 법적 요구사항 준수, 최신 보안취약점 +점검, 안전한 코딩 구현 등의 검토 기준과 절차를 수립·이행하고, 발견된 +문제점에 대한 개선조치를 수행하여야 한다. +SO-09 +기능최소화 및 +사용자설치 +소프트웨어 통제 +y 필수 기능만 제공하도록 시스템을 설정하고 사용자가 설치한 소프트웨어를 +통제하고 모니터링한다. + +--- + +114 | 우주 보안 모델 +(6) 사고 대응 +사고 대응 분야는 우주기업이 보안 침해사고를 탐지하고 대응하기 위한 절차, 대응 조직 등의 +보안사고대응 체계 수립 및 보고 절차 등의 사항에 대해 다루고 있다. 각 항목에 대한 구체적인 +설명은 “우주보안모델 해설서 및 적용 사례집”에서 상세히 기술한다. +표 31 +우주 보안 체크리스트(사고 대응) +우주보안 항목 +항목 설명 +IR-01 +사고 처리 및 +테스트 +y 사고대응 준비, 사고 탐지, 사고 조사/분석, 피해 시스템의 분리 및 차단, +피해 시스템 복구를 포함한 사고 처리 대응 체계를 구축하고 주기적으로 +사고대응 테스트를 실시해야 한다 +IR-02 +사고 보고 +y 사고를 인지한 인원이 지정한 시간 내에 사고대응 부서에 신고하고 +사고대응 부서는 사고를 관련 기관에게 통지해야 한다. +(7) 인원 보안 +인원 보안 분야는 우주기업이 인력을 채용하고 운영할 때 준수해야 하는 보안 기준이며, 주로 +직원의 보직 변경, 퇴직시 우주 시스템 접근권한 변경 및 보안식제고 교육 이수에 대한 보안사항을 +다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 해설서 및 적용 사례집”에서 상세히 +기술한다. +표 32 +우주 보안 체크리스트(인원 보안) +우주보안 항목 +항목 설명 +PS-01 +인원보안 +y 직원 고용시 배경검사를 시행하고 보직 변경/퇴직시시스템 접근 권한을 +검토/변경/삭제해야 하며 기업의 보안 정책 위반시 징계 절차를 수립해야 +한다. +PS-02 +보안인식 교육·훈련 +y 직무별 전문성을 확보할 수 있도록 인식제고 활동 및 교육훈련 계획을 +수립 및 시행해야 한다. + +--- + + +## 제4장 우주 보안아키텍처 | 115 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +(8) 물리 보안 +물리 보안 분야는 우주기업 시스템이 설치 및 운영되고 있는 시설에 대한 출입통제, 물리적 +접근 모니터링 등의 보안사항에 대해 다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 +해설서 및 적용 사례집”에서 상세히 기술한다. +표 33 +우주 보안 체크리스트(물리 보안) +우주보안 항목 +항목 설명 +PE-01 +물리적 접근통제 +y 시스템이 설치·운영되고 있는 시설의 출입을 통제하고 모니터링하며 +물리적 접근 이력을 주기적으로 검토해야 한다. +PE-02 +대체 근무장소 보안 +y 대체 근무장소(재택, 출장지, 원격 사무실 등)에서 중요 정보에 대한 +안전조치를 시행한다. +PE-0 +보호설비 운영 +y 보호구역에 위치한 정보시스템의 중요도 및 특성에 따라 온도·습도 +조절, 화재감지, 소화설비, 누수감지, UPS, 비상발전기, 이중전원선 등의 +보호설비를 갖추고 운영절차를 수립·운영하여야 한다. +(9) 위험 평가 및 보안 평가 +위험 평가 및 보안 평가 분야는 우주기업 시스템 및 서비스에 대한 위험 분석 및 조치 및 +지속적인 보안통제 평가 등의 보안사항에 대해 다루고 있다. 각 항목에 대한 구체적인 설명은 +“우주보안모델 해설서 및 적용 사례집”에서 상세히 기술한다. +표 34 +우주 보안 체크리스트(위험 평가 및 보안 평가) +우주보안 항목 +항목 설명 +RA-01 +위험 평가 +y 시스템 운영 및 관련 정보의 처리, 저장 또는 전송으로 인해 발생하는 +조직 운영(임무, 기능, 이미지 또는 평판 포함), 조직 자산 및 개인에 대한 +위험을 주기적으로 평가해야 한다. +RA-02 +보안 통제 모니터링 +및 효과성 평가 +y 지속적으로 보안 통제를 모니터링하여 보안통제의 지속적인 효과를 +보장해야 한다. + +--- + +116 | 우주 보안 모델 +(10) 보안 거버넌스 +보안 거버넌스 분야는 우주기업의 보안 정책, 조직, 자산관리, 법적 요구사항에 관한 사항에 +대해 다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 해설서 및 적용 사례집”에서 +상세히 기술한다. +표 35 +우주 보안 체크리스트(보안 거버넌스) +우주보안 항목 +항목 설명 +SG-01 +보안 정책 수립 +y 우주보안 정책 및 지침을 수립하여 경영진의 승인을 받고 주기적으로 검토 +및 개정하여야 한다. +SG-02 +보안 역할 및 책임 +정의 +y 우주보안 관련 책임자 및 담당자의 역할·책임을 정의하고, 조직 변화에 +따라 이를 지속적으로 유지·관리해야 한다. +SG-03 +자산관리 +y 우주 관련 자산을 식별하고 목록화하며, 변동 사항을 반영하여 최신 +상태로 관리해야 한다. +SG-04 +법적요구사항 준수 +y 우주보안 관련 법적 요구사항을 주기적으로 파악하여 규정에 반영하고, +준수 여부를 지속적으로 검토하여야 한다. +(11) 비상계획 +비상계획 분야는 우주기업의 시스템 및 서비스를 중단없이 연속적으로 운영하기 위한 비상계획, +백업 및 이중화 관련 사항에 대해 다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 +해설서 및 적용 사례집”에서 상세히 기술한다. +표 36 +우주 보안 체크리스트(비상계획) +우주보안 항목 +항목 설명 +CP-01 +비상계획 수립 +y 우주 시스템의 운영 연속성을 위협할 수 있는 보안 위협 유형을 식별해야 +하며, 비상시 복구 절차, 복구 조직, 비상연락체계 등 비상계획을 수립하고 +주기적으로 점검해야 한다. +CP-02 +백업 및 이중화 +관리 +y 조직의 중요정보를 식별하고 주기적으로 백업하며 중요 네트워크, +시스템은 이중화한다. + +--- + + +## 제4장 우주 보안아키텍처 | 117 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +(12) 공급망 관리 +공급망 관리 분야는 우주기업에 우주관련 제품을 납품하거나 우주시스템 및 서비스 사업 +협력사에 대한 보안 사항에 대해 다루고 있다. 각 항목에 대한 구체적인 설명은 “우주보안모델 +해설서 및 적용 사례집”에서 상세히 기술한다. +표 37 +우주 보안 체크리스트(공급망 관리) +우주보안 항목 +항목 설명 +SM-01 +공급망 보호 +y 협력사로 인해 발생할 수 있는 보안 위협을 방지하기 위해 공급망 보안 +정책을 수립하여 협력사 선정을 위한 기준과 계약서를 마련하고, 협력사 +명부를 작성 및 최신화해야 한다 +SM-02 +인수 전 평가 +y 시스템/구성요소/서비스의 선정/인수/ 업데이트 전에 보안취약점 점검 및 +조치하고 인수 테스트를 통해 구성요소의 위조를 검사해야 한다 +SM-03 +모든 출처 정보 +사용 +y 시스템/구성요소/서비스 공급업체를 대상으로 모든 출처 정보 분석을 +수행해야 한다. +SM-04 +변조/위조 방지 및 +탐지 +y 시스템/구성요소/서비스의 변조 및 위조를 방지하기 위하여 주기적으로 +점검해야 한다 +다. 우주 보안 체크리스트 항목별 보안 위협 및 보안 요구사항 +다음은 12개 분야, 53개 항목별로 해당되는 우주 보안 위협 및 보안 요구사항을 기술한다. +(1) 접근통제 +(가) AC-01 접근통제 정책 +다음 표는 GSaaS에서 “접근통제 정책” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. + +--- + +118 | 우주 보안 모델 +■ GSaaS +표 38 +AC-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 안테나 +네트워크에 설치하여 +관리서버에 대한 공격을 통해 +위성 통신 장애 유발 +ⓑ ‌안테나 네트워크에 +비인가 단말 네트워크 +접속 차단 +ⓑ ‌네트워크 +접근제어 +ⓑ NAC +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 지상국 +네트워크에 설치하여 궤도 +제어시스템에 대한 공격을 +통해 위성 제어 장애 유발 +ⓑ ‌비인가 단말 네트워크 +접속 차단 +ⓑ ‌네트워크 +접근제어 +ⓑ NAC +건물 내 무단 +침입 +안테나 유지보수 엔지니어가 +타 업체가 관리하는 관리서버 +네트워크에 비인가 탭 장비를 +무단으로 부착하여 탑재체 +데이터 탈취 +ⓑ ‌안테나 네트워크 +비인가 단말 네트워크 +접속 차단 +ⓑ ‌네트워크 +접근제어 +ⓑ NAC +(나) AC-02 최소권한 +다음 표는 GSaaS와 우주 공급망에서 “최소권한” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. +■ GSaaS +표 39 +AC-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +메시지 +가져오기 +위성 운영사 및 클라우드 +간 스니핑을 통해 IAM키를 +탈취하여 클라우드 버킷을 +모두 삭제하여 안테나 예약 +및 스케줄링 서비스 불가 +ⓒ ‌정기적인 사용자 +계정 및 권한 감사를 +수행하여 데이터 접근 +권한에 대한 적절성 +검토 및 조치 +ⓒ ‌사용자 계정 +및 권한 +검토 +ⓒ - + +--- + + +## 제4장 우주 보안아키텍처 | 119 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +미션제어 및 운영지원 +시스템에 취약하게 설정된 +계정/패스워드를 Guessing +공격으로 탈취하여 접속 후 +미션 및 스케줄링 데이터 +탈취 +ⓐ ‌미션제어 및 운영지원 +시스템 계정 및 권한 +점검 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓐ ‌서버 +접근제어 +직원의 안전 +관련 부정 행위 +원격접속 악성코드에 +감염되어 있는 지상국 임직원 +PC를 통해 미션제어 및 +운영지원 시스템 계정을 +탈취하여 미션 및 스케줄링 +데이터 삭제 +ⓑ ‌미션제어 및 운영지원 +시스템 계정 및 권한 +점검 +ⓑ ‌사용자 계정 +및 권한 +검토 +ⓑ ‌서버 +접근제어 +직원의 안전 +관련 부정 행위 +지상국과 위성 운영사간 +VPN 계정 패스워드를 +직원의 보안인식 미흡으로 +취약하게 설정되어 +공격자에게 탑재체 데이터 +탈취 당함 +ⓐ ‌VPN사용자 계정 및 +권한 점검 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓐ ‌계정관리 및 +서버 +접근제어 +■ 우주 공급망 +표 40 +AC-02 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장비 또는 +미디어 손상 +탑재체 제어시스템 유지보수 +엔지니어가 실수로 테스트 +데이터를 운영 +DB에 입력하여 탑재체 미션 +관련 데이터가 변조되어 미션 +수행 장애 발행 +ⓐ ‌위성 운영SW 개발, +테스트, 운영 환경의 +분리 +ⓐ ‌테스트 +환경과 +운영환경의 +분리 +ⓐ - +(다) AC-03 특수 권한 사용 +다음 표는 GSaaS에서 “특수 권한 사용” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. + +--- + +120 | 우주 보안 모델 +■ GSaaS +표 41 +AC-03 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +권한 남용 +지상국 운영사 내부 직원이 +안테나제어시스템 관리자 +권한을 획득, 고의로 잘못된 +위성 위치를 추적하도록 +만들어 실제 위성과 통신 +장애 유발 +ⓐ ‌안테나 제어시스템 +계정 및 권한 점검 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓐ ‌서버 접근 +제어 +권한 남용 +비인가된 내부 임직원이 +위성제어시스템 관리자 +계정을 탈취하여 위성 제어권 +탈취 및 오동작 유발 +ⓐ ‌위성 제어시스템 계정 +및 권한 점검 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓐ ‌서버 접근 +제어 +(라) AC-04 정보흐름 통제 +다음 표는 GSaaS와 우주 공급망에서 “정보흐름 통제” 항목을 준수하지 않았을 때의 보안 +위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 42 +AC-04 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +원격 정탐, 도청 +스니핑 공격으로 지상국과 +클라우드 통신 패킷을 +도청하여 위성 예약 및 +스케줄링 데이터 탈취 +ⓔ ‌안테나 제어시스템 및 +라우터 장비 네트워크 +접근제어 +ⓔ ‌네트워크 +접근제어 +ⓔ 방화벽 +서비스 거부 +안테나 제어시스템 및 라우터 +취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 +지상국 네트워크 장애 +ⓖ ‌안테나 제어시스템 및 +라우터 장비 네트워크 +접근제어 +ⓖ ‌네트워크 +접근제어 +ⓖ 방화벽 + +--- + + +## 제4장 우주 보안아키텍처 | 121 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 안테나 +제어시스템에 접근하여 +Replay 공격으로 위성 제어 +명령을 전송하여 위성 제어권 +탈취 +ⓕ ‌안테나 제어시스템 및 +라우터 장비 네트워크 +접근제어 +ⓕ ‌네트워크 +접근제어 +ⓕ 방화벽 +스푸핑 +스푸핑 공격을 통해 안테나 +제어시스템에 변조된 +데이터를 전송하여 안테나 +오작동을 통한 통신 장애 +ⓒ ‌안테나 제어시스템 +네트워크 접근제어 +ⓒ ‌네트워크 +접근제어 +ⓒ 방화벽 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 안테나 +네트워크에 설치하여 +관리서버에 대한 공격을 통해 +위성 통신 장애 유발 +ⓐ ‌안테나 제어시스템 및 +라우터 장비 네트워크 +접근제어 +ⓐ ‌ 네트워크 +접근제어 +ⓐ 방화벽 +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓗ ‌지상국 라우터 장비 +네트워크 접근제어 +ⓗ ‌네트워크 +접근제어 +ⓗ 방화벽 +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓖ ‌미션제어 및 운영지원 +시스템 네트워크 +접근제어 +ⓖ ‌네트워크 +접근제어 +ⓖ 방화벽 +정보 손실 +공개된 취약점을 통해 탑재체 +DB가 랜섬웨어에 감염되어 +탑재체 데이터 암호화 +ⓒ ‌탑재체 DB 네트워크 +접근제어 +ⓒ ‌네트워크 +접근제어 +ⓒ 방화벽 +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 통해 +경고 알림이 발생하지않도록 +하여 위성 긴급 상황 시 대처 +불가 +ⓔ ‌긴급 대응 및 +위기관리 시스템 +네트워크 접근제어 +ⓔ ‌네트워크 +접근제어 +ⓔ 방화벽 +건물 내 무단 +침입 +안테나 유지보수 엔지니어가 +타 업체가 관리하는 관리서버 +네트워크에 비인가 탭 장비를 +무단으로 부착하여 탑재체 +데이터 탈취 +ⓐ ‌안테나 관리서버 +네트워크 접근제어 +ⓐ ‌네트워크 +접근제어 +ⓐ 방화벽 + +--- + +122 | 우주 보안 모델 +■ 우주 공급망 +표 43 +AC-04 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +원격 정탐, 도청 +탑재체 데이터 처리 및 가공 +시스템 원격유지보수 시 +암호화된 터털링에 사용되는 +사설CA(Certificate +Authority) 키값을 탈취하여 +스니핑을 통해 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 시스템 +원격 유지보수 시 +암호화 채널 사용, +비대면 업무 보안 +등 보안성이 충분히 +보장된 환경에서만 +수행 +ⓐ ‌비대면 +유지보수 +업무 환경에 +보안 구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 +(마) AC-05 직무 분리 +다음 표는 우주 공급망에서 “직무 분리” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ 우주 공급망 +표 44 +AC-05 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장비 또는 +미디어 손상 +탑재체 제어시스템 유지보수 +엔지니어가 실수로 테스트 +데이터를 운영DB에 +입력하여 탑재체 미션 관련 +데이터가 변조되어 미션 수행 +장애 발행 +ⓐ ‌위성 운영SW 개발, +테스트, 운영 환경의 +분리 +ⓐ ‌테스트환경과 +운영환경의 +분리 +ⓐ - +(바) AC-06 로그인 시도 실패 +다음 표는 GSaaS에서 “로그인 시도 실패” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. + +--- + + +## 제4장 우주 보안아키텍처 | 123 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +■ GSaaS +표 45 +AC-06 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +안테나 영역의 관리서버 +계정의 취약한 패스워드를 +Guessing 공격으로 +탈취하여 관리서버에 접속 +후 지상국/클라우드/위성 +운영사간 통신 설정 변경, +위성 송수신데이터 전송 장애 +유발 +ⓐ ‌안테나 관리서버 계정 +및 패스워드 관리 +ⓐ ‌계정 및 +패스 +워드 관리 +ⓐ ‌계정관리 및 +서버접근제어 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 +제어시스템에 취약하게 +설정된 계정/패스워드를 +Guessing 공격으로 +탈취하여 접속 후 임의의로 +궤도룰 수정하여 위성 탈취 +ⓐ ‌궤도 제어시스템 계정 +및 패스워드 관리 +ⓐ ‌계정 및 +패스 +워드 관리 +ⓐ ‌계정관리 및 +서버접근제어 +(사) AC-07 세션 잠금 및 종료 +다음 표는 우주 공급망에서 “세션 잠금 및 종료” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ 우주 공급망 +표 46 +AC-07 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +직원의 안전 +관련 부정 행위 +위성활용 시스템 SW 개발 +담당자가 재택 근무 환경에서 +소스코드 수정 작업 중 +스피어피싱을 통해 개인 +단말이 악성코드에 감염되어 +위성체 SW 소스코드, 위성 +정보 등 중요 정보 유출 +ⓐ ‌위성SW 개발 원격 +업무 시 암호화 채널 +사용, 비대면 업무 +보안 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓐ ‌비대면 업무 +환경에 보안 +구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 + +--- + +124 | 우주 보안 모델 +(아) AC-08 원격 접근통제 +다음 표는 우주 공급망에서 “원격 접근통제” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ 우주 공급망 +표 47 +AC-08 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +직원의 안전 +관련 부정 행위 +위성활용 시스템 SW 개발 +담당자가 재택 근무 환경에서 +소스코드 수정 작업 중 +스피어피싱을 통해 개인 +단말이 악성코드에 감염되어 +위성체 SW 소스코드, 위성 +정보 등 중요 정보 유출 +ⓐ ‌위성SW 개발 원격 +업무 시 암호화 채널 +사용, 비대면 업무 +보안 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓐ ‌비대면 업무 +환경에 보안 +구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 +원격 정탐, 도청 +탑재체 데이터 처리 및 가공 +시스템 원격유지보수 시 +암호화된 터털링에 사용되는 +사설CA(Certificate +Authority) 키값을 탈취하여 +스니핑을 통해 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 시스템 +원격 유지보수 시 +암호화 채널 사용, +비대면 업무 보안 +등 보안성이 충분히 +보장된 환경에서만 +수행 +ⓐ ‌비대면 +유지보수 +업무 환경에 +보안 구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 +(자) AC-09 무선 접속 +다음 표는 GSaaS와 우주 공급망에서 “무선 접속” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. + +--- + + +## 제4장 우주 보안아키텍처 | 125 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +■ 우주 공급망 +표 48 +AC-09 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 운영사 개발자가 +악성 어플리케이션이 설치된 +개인용 모바일 테블릿을 +GSaaS 모바일 앱 개발을 +위해 설치된 내부 무선망에 +접속, 해당 기기를 통해 +공격자가 내부망에 백도어형 +악성 코드 유포 소스코드 등 +중요 정보 유출 +ⓐ ‌위성 운영SW 개발 +시스템에 무선접속시 +승인받은 사용자/기기 +인증을 수행하고 통신 +세션을 +암호화해야하며 +모바일 장치장치의 +경우 정보를 암호화 +ⓐ ‌무선 +접근통제 +ⓐ WIPS +(차) AC-10 모바일 기기 연결 통제 +다음 표는 GSaaS와 우주 공급망에서 “모바일 기기 연결 통제” 항목을 준수하지 않았을 때의 +보안 위협과 보안 요구사항을 나타낸다. +■ 우주 공급망 +표 49 +AC-10 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 운영사 개발자가 +악성 어플리케이션이 설치된 +개인용 모바일 테블릿을 +GSaaS 모바일 앱 개발을 +위해 설치된 내부 무선망에 +접속, 해당 기기를 통해 +공격자가 내부망에 백도어형 +악성 코드 유포 소스코드 등 +중요 정보 유출 +ⓐ ‌위성 운영SW 개발 +시스템에 무선접속시 +승인받은 사용자/기기 +인증을 수행하고 통신 +세션을 +암호화해야하며 +모바일 장치의 경우 +정보를 암호화 +ⓐ ‌무선 +접근통제 +ⓐ WIPS +(카) AC-11 외부 연결 통제 +다음 표는 우주 공급망에서 “외부 연결통제” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. + +--- + +126 | 우주 보안 모델 +■ 우주 공급망 +표 50 +AC-11 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장치 또는 +애플리케이션 +조작 +공격자가 위성제조사 +소스코드 저장소에 +침투하여 위성 궤도 및 +자세를 제어하는 상수 +변수를 조작하고, 변조된 +위성제어SW가 지상국 +운영사에 납품되면 소규모 +드리프트가 발생하여 위성 +제어 장애 유발 +ⓐ ‌위성에 탑재되는 SW, +FW 개발 인프라는 +폐쇄망 구성 등 +충분한 보안성 확보 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌중요 개발 +인프라에 +대한 폐쇄망 +구성 +ⓐ - +악성코드 +공격자가 위성제조사 +라이브러리 저장소에 +침투하여 로직밤 악성코드를 +페이로드SW 삽입하여 위성 +궤도에 오른 후 로직밤을 +활성화 시켜 미션 수행 장애 +ⓐ ‌위성에 탑재되는 SW, +FW 개발 인프라는 +폐쇄망 구성 등 +충분한 보안성 확보 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌중요 개발 +인프라에 +대한 폐쇄망 +구성 +ⓐ - +(타) AC-12 공공 정보 통제 +다음 표는 GSaaS와 우주 공급망에서 “공공 정보 통제” 항목을 준수하지 않았을 때의 보안 +위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 51 +AC-12 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +관리서버 운영자가 공개 +세미나 또는 포럼에 회사 +기술현황을 설명하면서 +의도치 않게 관리서버 +IP 또는 회사 네트워크 +구성이 노출되어 악의적 +공격자에 의해 관리서버가 +공격당함 +ⓐ ‌공개적으로 접근 +가능한 시스템에 +정보를 +게시하기 전에 +중요정보가 +게시되지 않도록 해당 +내용을 검토하는 절차 +수행 +ⓐ 보안 교육 +ⓐ - + +--- + + +## 제4장 우주 보안아키텍처 | 127 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +(2) 식별 및 인증 +(가) IA-01 식별 및 인증 +다음 표는 GSaaS와 우주 공급망에서 “식별 및 인증” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. +■ GSaaS +표 52 +IA-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +정보 조작 +유출된 클라우드 접속 VPN +계정을 통해 클라우드의 +예약 및 스케줄링 시스템에 +접속하여 안테나 예약 정보 +조작 +ⓑ ‌GSaaS 클라우드 +접속 가상 +사설망(SSL) 계정 +탈취 탐지 +ⓑ ‌외부 노출된 +자산 및 +계정 관리 +ⓑ ASM +메시지 +가져오기 +위성 운영사 및 클라우드 +간 스니핑을 통해 IAM키를 +탈취하여 클라우드 버킷을 +모두 삭제하여 안테나 예약 +및 스케줄링 서비스 불가 +ⓒ ‌정기적인 사용자 +계정 및 권한 감사를 +수행하여 데이터 접근 +권한에 대한 적절성 +검토 및 조치 +ⓒ 사용자 계정 +및 권한 검토 +ⓒ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +안테나 영역의 관리서버 +계정의 취약한 패스워드를 +Guessing 공격으로 +탈취하여 관리서버에 접속 +후 지상국/클라우드/위성 +운영사간 통신 설정 변경, +위성 송수신데이터 전송 장애 +유발 +ⓐ ‌안테나 관리서버 계정 +및 패스워드 관리 +ⓐ ‌계정 및 +패스워드 +관리 +ⓐ ‌계정관리 및 +서버접근제어 +정보 염탐 +미흡한 클라우드 IAM관리로 +비인가자가 지상국 내부자가 +유출한 클라우드 IAM +인증키를 공격자가 획득하여 +버킷 인덱싱 +으로 예약 및 스케줄링 데이터 +탈취 +ⓐ ‌안테나 관리서버 계정 +및 패스워드 관리 +ⓐ ‌계정 및 +패스워드 +관리 +ⓐ ‌계정관리 및 +서버접근제어 + +--- + +128 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +정보 염탐 +미흡한 클라우드 IAM관리로 +비인가자가 지상국 내부자가 +유출한 클라우드 IAM +인증키를 공격자가 획득하여 +버킷 인덱싱 +으로 예약 및 스케줄링 데이터 +탈취 +ⓒ ‌클라우드 데이터 유출 +방지 +ⓒ ‌클라우드 +데이터 유출 +방지 +ⓒ +클라우드DLP +장치/미디어/ +문서 손실 +지상국 임직원이 분실한 +DB분석 및 시각화 시스템 +접근이 가능한 노트북을 +획득하여 탑재체 데이터 탈취 +ⓐ ‌임직원 단말 계정 및 +패스워드 설정 +ⓐ ‌계정 및 +패스워드 +설정 +ⓐ - +정보 조작 +지상국 라우터 관리콘솔에 +취약하게 설정된 계정/ +패스워드를 통해 접속하여 +라우팅 정보를 변경하여 +지상국 네트워크 장애 +ⓐ ‌지상국 네트워크 장비 +계정 및 패스워드 +관리 +ⓐ ‌계정 및 +패스워드 +관리 +ⓐ ‌계정관리 및 +서버접근제어 +정보 조작 +지상국 라우터 관리콘솔에 +취약하게 설정된 계정/ +패스워드를 통해 접속하여 +라우팅 정보를 변경하여 +지상국 네트워크 장애 +ⓑ ‌지상국 네트워크 장비 +계정 및 권한 점검 +ⓑ 취약점 점검 +ⓑ 취약점 진단 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 +제어시스템에 취약하게 +설정된 계정/패스워드를 +Guessing 공격으로 +탈취하여 접속 후 임의의로 +궤도룰 수정하여 위성 탈취 +ⓐ ‌궤도 제어시스템 계정 +및 패스워드 관리 +ⓐ ‌계정 및 +패스워드 +관리 +ⓐ ‌계정관리 및 +서버접근제어 +소프트웨어 +취약점 또는 +오류 +GSaaS 접속 시스템 초기 +구축 시 발급된 디폴트 +관리자 계정/패스워드를 +통해 공격자가 외부에서 +접속하여 위성 제어권 및 +중요정보 탈취 +ⓐ ‌GSaaS 접속 시스템 +계정 및 패스워드 +관리 +ⓐ ‌계정 및 +패스워드 +관리 +ⓐ ‌계정관리 및 +서버접근제어 + +--- + + +## 제4장 우주 보안아키텍처 | 129 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +미션제어 및 운영지원 +시스템에 취약하게 설정된 +계정/패스워드를 Guessing +공격으로 탈취하여 접속 후 +미션 및 스케줄링 데이터 +탈취 +ⓐ ‌미션제어 및 운영지원 +시스템 계정 및 권한 +점검 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓐ ‌서버 접근 제어 +직원의 안전 +관련 부정 행위 +원격접속 악성코드에 +감염되어 있는 지상국 임직원 +PC를 통해 미션제어 및 +운영지원 시스템 계정을 +탈취하여 미션 및 스케줄링 +데이터 삭제 +ⓑ ‌미션제어 및 운영지원 +시스템 계정 및 권한 +점검 +ⓑ ‌사용자 계정 +및 권한 +검토 +ⓑ ‌서버 접근 +제어 +직원의 안전 +관련 부정 행위 +지상국과 위성 운영사간 +VPN 계정 패스워드를 +직원의 보안인식 미흡으로 +취약하게 설정되어 +공격자에게 탑재체 데이터 +탈취 당함 +ⓐ ‌VPN사용자 계정 및 +권한 점검 +ⓐ ‌사용자 계정 +및 권한 +검토 +ⓐ ‌계정관리 및 +서버접근제어 +■ 우주 공급망 +표 53 +IA-01 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +공격자가 지상국 클라우드 +개발환경에서 운영환경 +접근권한이 있는 IAM키를 +탈취하여 위성활용 시스템에 +무단으로 접속하여 탑재체 +데이터 탈취 +ⓑ ‌위성 운영 시스템은 +인증 및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 계정 및 +권한에 대한 타당성 +검토 및 조치 수행 +ⓑ ‌운영 서버에 +대한 +2차인증 및 +권한 관리 +ⓑ ‌MFA +서버접근제어 +권한 남용 +위성활용 시스템 업데이트 시 +임시로 root권한을 부여한 +유지 보수 계정을 비활성화 +하지 않아 해당 계정/ +패스워드를 획득한 공격자가 +위성활용 시스템에 접근하여 +페이로드 데이터 탈취 +ⓐ ‌위성 운영 시스템은 +인증 및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 계정 및 +권한에 대한 타당성 +검토 및 조치 수행 +ⓐ ‌운영 서버에 +대한 +2차인증 및 +권한 관리 +ⓐ ‌MFA +서버접근제어 + +--- + +130 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장비 또는 +미디어 손상 +탑재체 제어시스템 유지보수 +엔지니어가 실수로 테스트 +데이터를 운영DB에 +입력하여 탑재체 미션 관련 +데이터가 변조되어 미션 수행 +장애 발행 +ⓑ ‌위성 운영 시스템은 +인증 및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 계정 및 +권한에 대한 타당성 +검토 및 조치 수행 +ⓑ ‌운영 서버에 +대한 +2차인증 및 +권한 관리 +ⓑ ‌MFA +서버접근제어 +정보 염탐 +악의를 가진 클라우드 시스템 +유지보수 엔지니어가 취약한 +클라우드 IAM정보 탈취 +후 위성 운영사 클라우드 +테넌트에 접근하여 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 시스템은 +인증 및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 계정 및 +권한에 대한 타당성 +검토 및 조치 수행 +ⓐ ‌운영 서버에 +대한 +2차인증 및 +권한 관리 +ⓐ ‌MFA +서버접근제어 +(나) IA -02 다중 인증 +다음 표는 GSaaS와 우주 공급망에서 “다중 인증” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. +■ GSaaS +표 54 +IA-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +정보 조작 +유출된 클라우드 접속 VPN +계정을 통해 클라우드의 +예약 및 스케줄링 시스템에 +접속하여 안테나 예약 정보 +조작 +ⓐ ‌외부에서 가상 사설망 +(SSL)을 통해 GSaaS +클라우드 접속 시 +복수의 인증 방안 +마련 +ⓐ 2차인증 +ⓐ MFA +메시지 +가져오기 +위성 운영사 및 클라우드 +간 스니핑을 통해 IAM키를 +탈취하여 클라우드 버킷을 +모두 삭제하여 안테나 예약 +및 스케줄링 서비스 불가 +ⓑ ‌GSaaS 사용자 인증 +시(IAM) 접속 시 +복수의 인증 방안 +마련 +ⓑ 2차인증 +ⓑ MFA + +--- + + +## 제4장 우주 보안아키텍처 | 131 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +메시지 +가져오기 +스니핑 공격으로 지상국과 +위성 운영사 통신 패킷을 +도청하여 탑재체 데이터 탈취 +ⓑ ‌외부에서 가상 +사설망(SSL)을 통해 +지상국 접속 시 복수의 +인증 방안 마련 +ⓑ 2차인증 +ⓑ MFA +메시지 +가져오기 +위성 운영사에서 지상국으로 +탑재체 데이터 요청 시 +중간자공격을 통해 변조된 +탑재체 데이터 전송 +ⓑ ‌외부에서 가상 +사설망(SSL)을 통해 +지상국 접속 시 복수의 +인증 방안 마련 +ⓑ 2차인증 +ⓑ MFA +장치 또는 +애플리케이션 +조작 +위성 운영사에 미션 명령을 +지상국으로 전송 시 중간자 +공격을 통해 관측 요청에 +변조된 Calibration 플래그를 +삽입하여 촬영 대신 +셔터OFF 명령을 전송하여 +미션 실패 +ⓑ ‌외부에서 가상 +사설망(SSL)을 +통해 지상국 접속 시 +복수의 인증 방안 +마련 +ⓑ 2차인증 +ⓑ MFA +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +안테나 영역의 관리서버 +계정의 취약한 패스워드를 +Guessing 공격으로 탈취하여 +관리서버에 접속 후 지상국/ +클라우드/위성 운영사간 통신 +설정 변경, 위성 송수신데이터 +전송 장애 유발 +ⓑ ‌안테나 관리서버의 +2차인증 +ⓑ 2차인증 +ⓑ MFA +정보 염탐 +미흡한 클라우드 IAM관리로 +비인가자가 지상국 내부자가 +유출한 클라우드 IAM +인증키를 공격자가 획득하여 +버킷 인덱싱으로 예약 및 +스케줄링 데이터 탈취 +ⓑ ‌안테나 관리서버의 +2차인증 +ⓑ 2차인증 +ⓑ MFA +장치/미디어/ +문서 손실 +지상국 임직원이 분실한 +DB분석 및 시각화 시스템 +접근이 가능한 노트북을 +획득하여 탑재체 데이터 탈취 +ⓑ ‌DB분석 및 시각화 +시스템의 2차인증 +ⓑ 2차인증 +ⓑ MFA +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 제어 +시스템에 취약하게 설정된 +계정/패스워드를 Guessing +공격으로 탈취하여 접속 후 +임의의로 궤도룰 수정하여 +위성 탈취 +ⓑ ‌궤도 제어시스템의 +2차인증 +ⓑ 2차인증 +ⓑ MFA + +--- + +132 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +스푸핑 +스푸핑 공격을 통해 관측요청 +접수시스템에 변조된 명령을 +전송하여 잘못된 위성 명령 +전송 +ⓑ ‌위성 운영사의 지상국 +접속은 제로트러스트 +기반 인증 도입 +ⓑ ‌제로 +트러스트 +기반 인증 +ⓑ ‌OTP, +바이오 인증 +등 +소프트웨어 +취약점 또는 +오류 +GSaaS 접속 시스템 초기 +구축 시 발급된 디폴트 +관리자 계정/패스워드를 +통해 공격자가 외부에서 +접속하여 위성 제어권 및 +중요정보 탈취 +ⓑ ‌GSaaS 접속 +시스템의 2차인증 +ⓑ 2차인증 +ⓑ MFA +권한 남용 +지상국 운영사 내부 직원이 +안테나 제어시스템 관리자 +권한을 획득, 고의로 잘못된 +위성 위치를 추적하도록 +만들어 실제 위성과 통신 +장애 유발 +ⓑ ‌안테나 제어시스템의 +2차인증 +ⓑ 2차인증 +ⓑ MFA +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +미션제어 및 운영지원 +시스템에 취약하게 설정된 +계정/패스워드를 Guessing +공격으로 탈취하여 접속 후 +미션 및 스케줄링 데이터 +탈취 +ⓑ ‌미션제어 및 운영지원 +시스템의 2차인증 +ⓑ 2차인증 +ⓑ MFA +직원의 안전 +관련 부정 행위 +원격접속 악성코드에 +감염되어 있는 지상국 임직원 +PC를 통해 미션제어 및 +운영지원 시스템 계정을 +탈취하여 미션 및 스케줄링 +데이터 삭제 +ⓒ ‌미션제어 및 운영지원 +시스템의 2차인증 +ⓒ 2차인증 +ⓒ MFA +직원의 안전 +관련 부정 행위 +지상국과 위성 운영사간 +VPN 계정 패스워드를 +직원의 보안인식 미흡으로 +취약하게 설정되어 +공격자에게 탑재체 데이터 +탈취 당함 +ⓑ VPN사용자의 +2차인증 +ⓑ 2차인증 +ⓑ MFA +권한 남용 +비인가된 내부 임직원이 +위성제어시스템 관리자 +계정을 탈취하여 위성 제어권 +탈취 및 오동작 유발 +ⓑ ‌위성 제어시스템 +2차인증 +ⓑ 2차인증 +ⓑ MFA + +--- + + +## 제4장 우주 보안아키텍처 | 133 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +■ 우주 공급망 +표 55 +IA-02 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +직원의 안전 +관련 부정 행위 +위성활용 시스템 SW 개발 +담당자가 재택 근무 환경에서 +소스코드 수정 작업 중 +스피어피싱을 통해 개인 +단말이 악성코드에 감염되어 +위성체 SW 소스코드, 위성 +정보 등 중요 정보 유출 +ⓐ ‌위성SW 개발 원격 +업무 시 암호화 채널 +사용, 비대면 업무 +보안 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓐ ‌비대면 업무 +환경에 보안 +구축 +ⓐ ‌VPN EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 +의도치 않은 +정보 누설 +공격자가 지상국 클라우드 +개발환경에서 운영환경 +접근권한이 있는 IAM키를 +탈취하여 위성활용 시스템에 +무단으로 접속하여 탑재체 +데이터 탈취 +ⓑ ‌위성 운영 시스템은 +인증 및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 계정 및 +권한에 대한 타당성 +검토 및 조치 수행 +ⓑ ‌운영 서버에 +대한 +2차인증 및 +권한 관리 +ⓑ ‌MFA +서버접근제어 +권한 남용 +위성활용 시스템 업데이트 +시 임시로 root권한을 부여한 +유지보수 계정을 비활성화 +하지 않아 해당 계정/ +패스워드를 획득한 공격자가 +위성활용 시스템에 접근하여 +페이로드 데이터 탈취 +ⓐ ‌위성 운영 시스템은 +인증 및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 계정 및 +권한에 대한 타당성 +검토 및 조치 수행 +ⓐ ‌운영 서버에 +대한 +2차인증 및 +권한 관리 +ⓐ ‌‌MFA +서버접근제어 +장비 또는 +미디어 손상 +탑재체 제어시스템 유지보수 +엔지니어가 실수로 테스트 +데이터를 운영DB에 +입력하여 탑재체 미션 관련 +데이터가 변조되어 미션 수행 +장애 발행 +ⓑ ‌위성 운영 시스템은 +인증 및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 계정 및 +권한에 대한 타당성 +검토 및 조치 수행 +ⓑ ‌운영 서버에 +대한 +2차인증 및 +권한 관리 +ⓑ ‌MFA +서버접근제어 +정보 염탐 +악의를 가진 클라우드 시스템 +유지보수 엔지니어가 취약한 +클라우드 IAM정보 탈취 +후 위성 운영사 클라우드 +테넌트에 접근하여 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 시스템은 +인증 및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 계정 및 +권한에 대한 타당성 +검토 및 조치 수행 +ⓐ ‌운영 서버에 +대한 +2차인증 및 +권한 관리 +ⓐ ‌MFA +서버접근제어 + +--- + +134 | 우주 보안 모델 +(3) 시스템 및 통신보안 +(가) SC-01 경계 보호 +다음 표는 GSaaS와 우주 공급망에서 “경계 보호” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. +■ GSaaS +표 56 +SC-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +원격 정탐, 도청 +스니핑 공격으로 지상국과 +클라우드 통신 패킷을 +도청하여 위성 예약 및 +스케줄링 데이터 탈취 +ⓓ ‌안테나 네트워크 +망분리 +ⓓ ‌물리적/ +논리적 +망분리 +ⓓ - +서비스 거부 +안테나 제어시스템 및 라우터 +취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 +지상국 네트워크 장애 +ⓒ ‌위성 안테나 시스템 +내/외부 네트워크를 +대상으로 서비스 거부 +공격에 대한 대책 +마련 +ⓒ ‌DoS 공격 +탐지 및 +차단 +ⓒ ‌Anti- +DDoS +서비스 거부 +안테나 제어시스템 및 라우터 +취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 +지상국 네트워크 장애 +ⓕ ‌안테나 네트워크 +망분리 +ⓕ ‌물리적/ +논리적 +망분리 +ⓕ - +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 안테나 +제어시스템에 접근하여 +Replay 공격으로 위성 제어 +명령을 전송하여 위성 제어권 +탈취 +ⓔ ‌안테나 네트워크 +망분리 +ⓔ ‌물리적/ +논리적 +망분리 +ⓔ - +IT 시스템 또는 +애플리케이션의 +오작동 +공개된 취약점을 통해 +미션제어 및 운영지원 +시스템에 접근하여 미션제어 +데이터 탈취 +ⓒ ‌미션제어 및 운영지원 +시스템 네트워크 +접근제어 +ⓒ ‌네트워크 +접근제어 +ⓒ 방화벽 +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓒ ‌지상국 네트워크 +내/외부를 대상으로 +서비스 거부공격에 +대한 대책 마련 +ⓒ ‌DoS 공격 +탐지 및 +차단 +ⓒ ‌Anti- +DDoS + +--- + + +## 제4장 우주 보안아키텍처 | 135 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓕ ‌지상국 주요 네트워크 +망분리 +ⓕ ‌물리적/ +논리적 +망분리 +ⓕ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 제어 +시스템에 취약하게 설정된 +계정/패스워드를 Guessing +공격으로 탈취하여 접속 후 +임의의로 궤도룰 수정하여 +위성 탈취 +ⓒ ‌궤도 제어시스템 +네트워크 접근제어 +ⓒ ‌네트워크 +접근제어 +ⓒ 방화벽 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 지상국 +네트워크에 설치하여 궤도 +제어시스템에 대한 공격을 +통해 위성 제어 장애 유발 +ⓐ ‌궤도 제어시스템 +네트워크 접근제어 +ⓐ ‌네트워크 +접근제어 +ⓐ 방화벽 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 지상국 +네트워크에 설치하여 궤도 +제어시스템에 대한 공격을 +통해 위성 제어 장애 유발 +ⓒ ‌지상국 주요 네트워크 +망분리 +ⓒ ‌물리적/ +논리적 +망분리 +ⓒ - +서비스 거부 +DoS 공격을 통해 위성 +탑재체 제공 서비스 장애 +유발 +ⓐ ‌DoS 공격 탐지 및 +차단 +ⓐ ‌DoS 공격 +탐지 및 +차단 +ⓐ ‌Anti- +DDoS +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션 +제어 및 운영지원 시스템 +계정을 탈취하여 탑재체 +데이터 탈취 +ⓔ ‌지상국 주요 네트워크 +업무망과 망분리 +ⓔ ‌물리적/ +논리적 +망분리 +ⓔ - +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓖ ‌미션제어 및 운영지원 +시스템 네트워크 +접근제어 +ⓖ ‌네트워크 +접근제어 +ⓖ 방화벽 + +--- + +136 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +정보 손실 +공개된 취약점을 통해 탑재체 +DB가 랜섬웨어에 감염되어 +탑재체 데이터 암호화 +ⓒ ‌탑재체 DB 네트워크 +접근제어 +ⓒ ‌네트워크 +접근제어 +ⓒ 방화벽 +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 통해 +경고 알림이 발생하지않도록 +하여 위성 긴급 상황 시 대처 +불가 +ⓑ DoS 공격 탐지 및 +차단 +ⓑ ‌DoS 공격 +탐지 및 +차단 +ⓑ Anti- +DDoS +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 통해 +경고 알림이 발생하지않도록 +하여 위성 긴급 상황 시 대처 +불가 +ⓓ 주요 네트워크 망분리 +ⓓ ‌물리적/ +논리적 +망분리 +ⓓ - +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 통해 +경고 알림이 발생하지않도록 +하여 위성 긴급 상황 시 대처 +불가 +ⓔ ‌긴급 대응 및 +위기관리 시스템 +네트워크 접근제어 +ⓔ ‌네트워크 +접근제어 +ⓔ 방화벽 +건물 내 무단 +침입 +안테나 유지보수 엔지니어가 +타 업체가 관리하는 관리서버 +네트워크에 비인가 탭 장비를 +무단으로 부착하여 탑재체 +데이터 탈취 +ⓐ ‌안테나 관리서버 +네트워크 접근제어 +ⓐ ‌네트워크 +접근제어 +ⓐ 방화벽 +■ 우주 공급망 +표 57 +SC-01 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성체 제어를 위한 온 보드 +컴퓨터 개발에 필요한 펌웨어 +라이브러리 저장소 침투 +후 라이버러리에 백도어를 +삽입하여 위성이 궤도진입을 +확인 후 별도 안테나를 통해 +위성체를 제어하여 위성 탈취 +ⓐ ‌위성에 탑재되는 SW, +FW 개발 인프라는 +폐쇄망 구성 등 +충분한 보안성 확보 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌중요 개발 +인프라에 +대한 폐쇄망 +구성 +ⓐ - + +--- + + +## 제4장 우주 보안아키텍처 | 137 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장치 또는 +애플리케이션 +조작 +공격자가 위성제조사 +소스코드 저장소에 +침투하여 위성 궤도 및 +자세를 제어하는 상수 +변수를 조작하고, 변조된 +위성제어SW가 지상국 +운영사에 납품되면 소규모 +드리프트가 발생하여 위성 +제어 장애 유발 +ⓐ ‌위성에 탑재되는 SW, +FW 개발 인프라는 +폐쇄망 구성 등 +충분한 보안성 확보 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌중요 개발 +인프라에 +대한 폐쇄망 +구성 +ⓐ - +의도치 않은 +정보 누설 +공격자가 지상국 클라우드 +개발환경에서 운영환경 +접근권한이 있는 IAM키를 +탈취하여 위성활용 시스템에 +무단으로 접속하여 탑재체 +데이터 탈취 +ⓐ ‌위성 운영SW 개발, +테스트, 운영 환경의 +분리 +ⓐ ‌개발환경과 +운영환경의 +분리 +ⓐ - +악성코드 +공격자가 위성제조사 +라이브러리 저장소에 +침투하여 로직밤 악성코드를 +페이로드SW 삽입하여 위성 +궤도에 오른 후 로직밤을 +활성화 시켜 미션 수행 장애 +ⓐ ‌위성에 탑재되는 SW, +FW 개발 인프라는 +폐쇄망 구성 등 +충분한 보안성 확보 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌중요 개발 +인프라에 +대한 폐쇄망 +구성 +ⓐ - +(나) SC-02 보안공학 적용 및 기능분리 +다음 표는 GSaaS와 우주 공급망에서 “보안공학 원칙 적용 및 기능분리” 항목을 준수하지 +않았을 때의 보안 위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 58 +SC-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓘ ‌지상국 주요 시스템은 +심층방어 원칙을 따라 +보안 아키텍처를 +설계하고 적용 +ⓘ 심층방어 +ⓘ - + +--- + +138 | 우주 보안 모델 +(다) SC-03 저장 및 전송 정보 보안 +다음 표는 GSaaS와 우주 공급망에서 “저장 및 전송 정보 보안” 항목을 준수하지 않았을 때의 +보안 위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 59 +SC-03 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +원격 정탐, 도청 +위성과 안테나간 RF스니핑 +공격을 통해 위성에서 +지상으로 전송되는 탑재체 +데이터 탈취 +ⓑ ‌위성과 지상국 간 +인증 및 안전한 +암호화 키교환 방안 +마련 +ⓑ ‌비대칭 키 +암호화 +ⓑ - +원격 정탐, 도청 +위성과 안테나간 RF스니핑 +공격을 통해 위성에서 +지상으로 전송되는 탑재체 +데이터 탈취 +ⓒ ‌위성과 지상국 통신 +시 데이터 암호화 +ⓒ ‌대칭 키 +암호화 +ⓒ - +장치 및 미디어 +파괴 +RF스푸핑을 통해 운영중인 +위성에 궤도변경 원격명령을 +전송하여 노후위성, +우주쓰레기 등과 충돌시켜 +위성 파손 +ⓑ ‌위성과 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +정보 조작 +위성 자세 제어 등 위성으로 +전송하는 위성제어 명령을 +변조하여 위성 정지 또는 +오동작 유발 +ⓑ ‌위성과 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +정보 조작 +위성 자세 제어 등 위성으로 +전송하는 위성제어 명령을 +변조하여 위성 정지 또는 +오동작 유발 +ⓒ ‌전송 데이터에 대한 +무결성 검사 +ⓒ 해시, +체크썸 +ⓒ - +메시지 +가져오기 +안테나에서 지상국으로 +데이터 송신 시 중간자 +공격으로 데이터 수신 및 +처리시스템에 변조된 탑재체 +데이터 전송 +ⓑ ‌안테나와 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - + +--- + + +## 제4장 우주 보안아키텍처 | 139 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +메시지 +가져오기 +안테나에서 지상국으로 +데이터 송신 시 중간자 +공격으로 데이터 수신 및 +처리시스템에 변조된 탑재체 +데이터 전송 +ⓒ ‌안테나와 지상국 +구간의 가상 +사설망(IPSec) 구성 +ⓒ ‌통신구간 +터널링 +ⓒ VPN +메시지 +가져오기 +안테나에서 지상국으로 +데이터 송신 시 중간자 +공격으로 데이터 수신 및 +처리시스템에 변조된 탑재체 +데이터 전송 +ⓓ ‌전송 데이터에 대한 +무결성 검사 +ⓓ ‌해시, +체크썸 +ⓓ - +메시지 +가져오기 +중간자 공격으로 위성으로 +전송하는 위성 제어명령을 +변조하여 위성 탈취 +ⓑ ‌안테나와 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +메시지 +가져오기 +중간자 공격으로 위성으로 +전송하는 위성 제어명령을 +변조하여 위성 탈취 +ⓒ ‌안테나와 지상국 +구간의 가상 +사설망(IPSec) 구성 +ⓒ ‌통신구간 +터널링 +ⓒ VPN +메시지 +가져오기 +중간자 공격으로 위성으로 +전송하는 위성 제어명령을 +변조하여 위성 탈취 +ⓓ ‌전송 데이터에 대한 +무결성 검사 +ⓓ ‌해시, +체크썸 +ⓓ - +원격 정탐, 도청 +스니핑 공격으로 안테나와 +지상국 통신 패킷을 도청하여 +위성 탑재체 데이터 탈취 +ⓑ ‌안테나와 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +원격 정탐, 도청 +스니핑 공격으로 안테나와 +지상국 통신 패킷을 도청하여 +위성 탑재체 데이터 탈취 +ⓒ ‌안테나와 지상국 +구간의 가상 +사설망(IPSec) 구성 +ⓒ ‌통신구간 +터널링 +ⓒ VPN +원격 정탐, 도청 +스니핑 공격으로 지상국과 +클라우드 통신 패킷을 +도청하여 위성 예약 및 +스케줄링 데이터 탈취 +ⓑ ‌지상국과 클라우드 +통신 시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +원격 정탐, 도청 +스니핑 공격으로 지상국과 +클라우드 통신 패킷을 +도청하여 위성 예약 및 +스케줄링 데이터 탈취 +ⓒ ‌지상국과 클라우드 +구간의 가상 +사설망(IPSec) 구성 +ⓒ ‌통신구간 +터널링 +ⓒ VPN + +--- + +140 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +정보 조작 +유출된 클라우드 접속 VPN +계정을 통해 클라우드의 +예약 및 스케줄링 시스템에 +접속하여 안테나 예약 정보 +조작 +ⓒ ‌전송 데이터에 대한 +무결성 검사 +ⓒ ‌해시, +체크썸 +ⓒ - +정보 조작 +지상국과 클라우드 +전송구간을 스니핑하여 +안테나 예약 명령을 획득한 후 +변조 및 전송하여 안테나 사용 +장애 +ⓑ ‌지상국과 클라우드 +통신 시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +정보 조작 +지상국과 클라우드 +전송구간을 스니핑하여 +안테나 예약 명령을 획득한 후 +변조 및 전송하여 안테나 사용 +장애 +ⓒ ‌지상국과 클라우드 +구간의 가상 +사설망(IPSec) 구성 +ⓒ ‌통신구간 +터널링 +ⓒ VPN +정보 조작 +지상국과 클라우드 +전송구간을 스니핑하여 +안테나 예약 명령을 획득한 후 +변조 및 전송하여 안테나 사용 +장애 +ⓓ ‌전송 데이터에 대한 +무결성 검사 +ⓓ ‌해시, +체크썸 +ⓓ - +메시지 +가져오기 +위성 운영사 및 클라우드 +간 스니핑을 통해 IAM키를 +탈취하여 클라우드 버킷을 +모두 삭제하여 안테나 예약 및 +스케줄링 서비스 불가 +ⓐ ‌위성 운영사와 +클라우드 통신 시 +데이터 암호화 +ⓐ ‌HTTPS +ⓐ - +정보 조작 +위성 운영사에서 클라우드로 +보내는 예약 및 스케줄링 +데이터를 변조하여 위성 사용 +장애 +ⓐ ‌위성 운영사와 +클라우드 통신 시 +데이터 암호화 +ⓐ ‌HTTPS +ⓐ - +정보 조작 +위성 운영사에서 클라우드로 +보내는 예약 및 스케줄링 +데이터를 변조하여 위성 사용 +장애 +ⓑ ‌전송 데이터에 대한 +무결성 검사 +ⓑ 해시, +체크썸 +ⓑ - +메시지 +가져오기 +스니핑 공격으로 지상국과 +위성 운영사 통신 패킷을 +도청하여 탑재체 데이터 탈취 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 +암호화 +ⓐ ‌HTTPS +ⓐ - + +--- + + +## 제4장 우주 보안아키텍처 | 141 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +메시지 +가져오기 +위성 운영사에서 지상국으로 +탑재체 데이터 요청 시 중간자 +공격을 통해 변조된 탑재체 +데이터 전송 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 +암호화 +ⓐ ‌HTTPS +ⓐ - +메시지 +가져오기 +위성 운영사에서 지상국으로 +탑재체 데이터 요청 시 +중간자공격을 통해 변조된 +탑재체 데이터 전송 +ⓒ ‌전송 데이터에 대한 +무결성 검사 +ⓒ ‌해시, +체크썸 +ⓒ - +장치 또는 +애플리케이션 +조작 +위성 운영사에 미션 명령을 +지상국으로 전송 시 중간자 +공격을 통해 관측 요청에 +변조된 Calibration 플래그를 +삽입하여 촬영 대신 셔터OFF +명령을 전송하여 미션 실패 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 +암호화 +ⓐ ‌HTTPS +ⓐ - +장치 또는 +애플리케이션 +조작 +위성 운영사에 미션 명령을 +지상국으로 전송 시 중간자 +공격을 통해 관측 요청에 +변조된 Calibration 플래그를 +삽입하여 촬영 대신 셔터OFF +명령을 전송하여 미션 실패 +ⓒ ‌전송 데이터에 대한 +무결성 검사 +ⓒ ‌해시, +체크썸 +ⓒ - +스푸핑 +스푸핑 공격을 통해 안테나 +제어시스템에 변조된 +데이터를 전송하여 안테나 +오작동을 통한 통신 장애 +ⓐ ‌지상국/GSaaS와의 +통신 시 전송 데이터 +암호화 +ⓐ ‌HTTPS +ⓐ - +스푸핑 +스푸핑 공격을 통해 안테나 +제어시스템에 변조된 +데이터를 전송하여 안테나 +오작동을 통한 통신 장애 +ⓑ ‌안테나와 지상국/ +GSaaS 구간의 가상 +사설망(IPSec) 구성 +ⓑ ‌통신구간 +터널링 +ⓑ VPN +스푸핑 +스푸핑 공격을 통해 안테나 +제어시스템에 변조된 +데이터를 전송하여 안테나 +오작동을 통한 통신 장애 +ⓔ ‌안테나 +제어시스템으로 제어 +명령 전송 등 전송 +데이터에 대한 무결성 +검사 +ⓔ ‌해시, +체크썸 +ⓔ - +IT 시스템 또는 +애플리케이션의 +오작동 +공개된 취약점을 통해 +미션제어 및 운영지원 +시스템에 접근하여 미션제어 +데이터 탈취 +ⓑ ‌탑재체 DB의 안전한 +보관 방안 수립 및 +구현 +ⓑ 보안 서버 +ⓑ 문서 중앙화 + +--- + +142 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +스푸핑 +스푸핑 공격을 가하여 위성 +운영사가 위성서비스 제공을 +위해 탑재체 데이터를 분석한 +중요정보 탈취 +ⓐ ‌DB분석 및 시각화 +시스템에서 데이터 +암호화 등 보호조치 +ⓐ ‌데이터 +암호화, +중앙화 +ⓐ 문서 +중앙화, DRM +스푸핑 +스푸핑 공격을 가하여 위성 +운영사가 위성서비스 제공을 +위해 탑재체 데이터를 분석한 +중요정보 탈취 +ⓑ ‌DB분석 및 시각화 +시스템 통신 시 +데이터 암호화 +ⓑ ‌암호화 +통신 +ⓑ - +장치/미디어/ +문서 손실 +지상국 임직원이 분실한 +DB분석 및 시각화 시스템 +접근이 가능한 노트북을 +획득하여 탑재체 데이터 탈취 +ⓒ ‌탑재체 DB의 안전한 +보관 방안 수립 및 +구현 +ⓒ 보안 서버 +ⓒ 문서 중앙화 +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 +관측 데이터 탈취 +ⓓ ‌탑재체 DB의 안전한 +보관 방안 수립 및 +구현 +ⓓ 보안 서버 +ⓓ 문서 중앙화 +기기/미디어/ +문서 도난 +위성 제어 및 미션 관련 중요 +데이터가 저장되어 있는 +USB를 분실 또는 도난당하여 +중요정보 노출 +ⓑ ‌탑재체 DB의 안전한 +보관 방안 수립 및 +구현 +ⓑ 보안 서버 +ⓑ 문서 중앙화 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 탑재체 +데이터 서비스 시스템에 +접근하여 탑재체 데이터 탈취 +ⓒ ‌탑재체 DB의 안전한 +보관 방안 수립 및 +구현 +ⓒ 보안 서버 +ⓒ 문서 중앙화 +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓓ ‌탑재체 DB의 안전한 +보관 방안 수립 및 +구현 +ⓓ 보안 서버 +ⓓ 문서 중앙화 +스푸핑 +스푸핑 공격을 통해 관측요청 +접수시스템에 변조된 명령을 +전송하여 잘못된 위성 명령 +전송 +ⓐ ‌관측요청 접수시스템 +통신 시 데이터 +암호화 +ⓐ 암호화 +통신 +ⓐ https 등 + +--- + + +## 제4장 우주 보안아키텍처 | 143 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +스푸핑 +스푸핑 공격을 통해 관측요청 +접수시스템에 변조된 명령을 +전송하여 잘못된 위성 명령 +전송 +ⓒ ‌관측요청 +접수시스템으로 명령 +전송 등 전송 데이터에 +대한 무결성 검사 +ⓒ ‌해시, +체크썸 +ⓒ - +악성코드 +스피어 피싱, 악성메일 등을 +통해 지상국 직원 PC에 +악성코드 감염 후 내부 +네트워크에 전파하여 탑재체 +데이터 등 중요정보 암호화 및 +위성 제어 장애 +ⓒ ‌탑재체 DB의 안전한 +보관 방안 수립 및 +구현 +ⓒ 보안 서버 +ⓒ 문서 중앙화 +정보 손실 +공개된 취약점을 통해 탑재체 +DB가 랜섬웨어에 감염되어 +탑재체 데이터 암호화 +ⓑ ‌탑재체 DB의 안전한 +보관 방안 수립 및 +구현 +ⓑ 보안 서버 +ⓑ 문서 중앙화 +강압, 강탈 또는 +부패 +탑재체 데이터 분석 담당자가 +불법적인 금품을 받고 고객의 +DB분석 및 시각화 데이터 +유출 +ⓐ ‌DB분석 및 시각화 +데이터의 안전한 보관 +방안 수립 및 구현 +ⓐ 보안 서버 +ⓐ ‌문서 +중앙화, +DRM +직원의 안전 +관련 부정 행위 +지상국과 위성 운영사간 VPN +계정 패스워드를 직원의 +보안인식 미흡으로 취약하게 +설정되어 공격자에게 탑재체 +데이터 탈취 당함 +ⓒ ‌탑재체 데이터의 +안전한 보관 방안 +수립 및 구현 +ⓒ 보안 서버 +ⓒ ‌문서 +중앙화, +DRM + +--- + +144 | 우주 보안 모델 +■ 우주 공급망 +표 60 +SC-03 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +랜섬웨어 코드가 포함되어 +있는 탑재체 데이터 처리 및 +가공시스템 업데이트 파일을 +무결성 검증을 수행하지 않고 +업데이트 하여 탑재체 데이터 +처리 및 가공 시스템이 +랜섬웨어에 감염되어 +페이로드 제공 등 위성 활용 +서비스 장애 +ⓑ ‌위성 운영SW는 +유지보수 시 전송 +데이터에 대한 무결성 +검사 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓑ ‌해시, +체크썸 +ⓑ - +정보 조작 +위성운영 시 위성제어SW를 +업데이트 중 RF스푸핑 +공격을 통해 위성제어SW를 +변조하여 위성 제어 장애 +발생 +ⓐ ‌위성에 탑재되는 +SW, FW는 배포 +시 데이터 암호화 및 +암호화 채널 사용 등 +안전한 전송 방안 +마련 +ⓐ ‌전송 데이터 +암호화 +통신구간 +터널링 +ⓐ ‌암호화 +VPN +정보 조작 +위성운영 시 위성제어SW를 +업데이트 중 RF스푸핑 +공격을 통해 위성제어SW를 +변조하여 위성 제어 장애 +발생 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 시 전송 +데이터에 대한 무결성 +검사 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓑ ‌해시, +체크썸 +ⓑ - +(라) SC-04 통신 보안 +다음 표는 GSaaS에서 “통신보안” 항목을 준수하지 않았을 때의 보안 위협과 보안 요구사항을 +나타낸다. + +--- + + +## 제4장 우주 보안아키텍처 | 145 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +■ GSaaS +표 61 +SC-04 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +통신 연결 장애 +위성 트랜스폰더 전원을 +차단하는 임의의 제어명령을 +위성으로 송신하여 위성과 +통신 일시 중단 및 마비 +※위성트랜스폰더전원:위성 +에탑재된신호중계장비.지상 +에서위성으로전송한신호(업 +링크)를수신하고이를증폭또 +는변환한후다시지상으로송신 +(다운링크)하는역할수행 +ⓑ ‌위성 통신 장애 발생 +시 복구 및 위성 추적 +방안 마련 +ⓑ ‌결함 +내성(Fault +Tolerance) +설계 +ⓑ - +방해 신호 전송 +특정 협대역 톤을 지속 +방출하는 간섭기를 탑재한 +드론을 안테나 보호구역에 +침투시켜 RFI(Radio +Frequency Interference) +공격을 통해 위성과 안테나 +통신을 교란 +ⓐ ‌위성 통신 방해 +전파에 대한 안티 +재밍 대책 마련 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼, +스마트 재밍 +탐지, 안테나 +이중화, +주파수 +이중화 +ⓐ ‌재밍 탐지 +센서 +방해 신호 전송 +특정 협대역 톤을 지속 +방출하는 간섭기를 탑재한 +드론을 안테나 보호구역에 +침투시켜 RFI(Radio +Frequency Interference) +공격을 통해 위성과 안테나 +통신을 교란 +ⓑ ‌드론을 사용한 지상국 +및 안테나 위협 +대응책 마련 +ⓑ 안티 드론 +ⓑ ‌드론 재머, +드론 탐지 +레이더 +방해 신호 전송 +위성과 안테나 통신 시 메인 +데이터 패널에 노이즈를 +발생시켜 위성이 Beacon +모드로 데이터를 송신하게 +만들어 위성 상태 데이터 +탈취 +ⓐ ‌위성 통신 방해 +전파에 대한 안티 +재밍 대책 마련 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼, +스마트 재밍 +탐지, 안테나 +이중화, +주파수 +이중화 +ⓐ ‌재밍 탐지 +센서 + +--- + +146 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +원격 정탐, 도청 +위성과 안테나간 RF스니핑 +공격을 통해 위성에서 +지상으로 전송되는 탑재체 +데이터 탈취 +ⓐ ‌위성 통신 방해 +전파에 대한 안티 +재밍 대책 마련 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼, +스마트 재밍 +탐지, 안테나 +이중화, +주파수 +이중화 +ⓐ ‌재밍 탐지 +센서 +장치 및 미디어 +파괴 +RF스푸핑을 통해 운영중인 +위성에 궤도변경 원격명령을 +전송하여 노후위성, +우주쓰레기 등과 충돌시켜 +위성 파손 +ⓐ ‌위성 통신 방해 +전파에 대한 안티 +재밍 대책 마련 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼, +스마트 재밍 +탐지, 안테나 +이중화, +주파수 +이중화 +ⓐ ‌재밍 탐지 +센서 +재밍 +지향성 파라볼라 안테나를 +통해 재밍공격으로 위성에 +노이즈를 송출하여 위성의 +제어명령 수신을 방해하여 +위성 제어 방해 +ⓐ ‌위성 통신 방해 +전파에 대한 안티 +재밍 대책 마련 +ⓐ ‌주파수 호핑, +스프레드 +스펙트럼, +저피탐 +웨이브폼, +스마트 재밍 +탐지, 안테나 +이중화, +주파수 +이중화 +ⓐ ‌재밍 탐지 +센서 +원격 정탐, 도청 +스니핑 공격으로 지상국과 +클라우드 통신 패킷을 +도청하여 위성 예약 및 +스케줄링 데이터 탈취 +ⓕ ‌안테나 네트워크에 +비인가 단말 네트워크 +접속 차단 +ⓕ ‌네트워크 +접근제어 +ⓕ NAC +서비스 거부 +안테나 제어시스템 및 라우터 +취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 +지상국 네트워크 장애 +ⓗ ‌안테나 네트워크에 +비인가 단말 네트워크 +접속 차단 +ⓗ ‌네트워크 +접근제어 +ⓗ NAC + +--- + + +## 제4장 우주 보안아키텍처 | 147 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓖ ‌비인가 단말 네트워크 +접속 차단 +ⓖ ‌네트워크 +접근제어 +ⓖ NAC +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓕ ‌지상국 주요 +네트워크에 비인가 +단말 네트워크 접속 +차단 +ⓕ ‌네트워크 +접근제어 +ⓕ NAC +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 통해 +경고 알림이 발생하지않도록 +하여 위성 긴급 상황 시 대처 +불가 +ⓕ ‌비인가 단말 네트워크 +접속 차단 +ⓕ ‌네트워크 +접근제어 +ⓕ NAC +장치 및 미디어 +파괴 +폭발물을 탑재한 드론을 +안테나 보호구역에 침투시켜 +안테나를 물리적으로 파괴 +ⓐ ‌드론을 사용한 안테나 +설비 정탐 및 파괴를 +방지하기 위한 안티 +드론 방안을 마련 +ⓐ ‌지형성 재머, +드론 탐지 +레이더 +ⓐ - +(마) SC-05 암호화 +다음 표는 GSaaS와 우주 공급망에서 “암호화” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ GSaaS +표 62 +SC-05 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +원격 정탐, 도청 +위성과 안테나간 RF스니핑 +공격을 통해 위성에서 +지상으로 전송되는 탑재체 +데이터 탈취 +ⓑ ‌위성과 지상국 간 +인증 및 안전한 +암호화 키교환 방안 +마련 +ⓑ ‌비대칭 키 +암호화 +ⓑ - + +--- + +148 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +원격 정탐, 도청 +위성과 안테나간 RF스니핑 +공격을 통해 위성에서 +지상으로 전송되는 탑재체 +데이터 탈취 +ⓒ ‌위성과 지상국 통신 +시 데이터 암호화 +ⓒ ‌대칭 키 +암호화 +ⓒ - +장치 및 미디어 +파괴 +RF스푸핑을 통해 운영중인 +위성에 궤도변경 원격명령을 +전송하여 노후위성, +우주쓰레기 등과 충돌시켜 +위성 파손 +ⓐ ‌위성과 지상국 간 +인증 및 안전한 +암호화 키교환 방안 +마련 +ⓐ ‌비대칭 키 +암호화 +ⓐ - +장치 및 미디어 +파괴 +RF스푸핑을 통해 운영중인 +위성에 궤도변경 원격명령을 +전송하여 노후위성, +우주쓰레기 등과 충돌시켜 +위성 파손 +ⓑ ‌위성과 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +정보 조작 +위성 자세 제어 등 위성으로 +전송하는 위성제어 명령을 +변조하여 위성 정지 또는 +오동작 유발 +ⓐ ‌위성과 지상국 간 +인증 및 안전한 +암호화 키교환 방안 +마련 +ⓐ ‌비대칭 키 +암호화 +ⓐ - +정보 조작 +위성 자세 제어 등 위성으로 +전송하는 위성제어 명령을 +변조하여 위성 정지 또는 +오동작 유발 +ⓑ ‌위성과 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +메시지 +가져오기 +안테나에서 지상국으로 +데이터 송신 시 중간자 +공격으로 데이터 수신 및 +처리시스템에 변조된 탑재체 +데이터 전송 +ⓐ ‌안테나와 지상국 +간 인증 및 안전한 +암호화 키교환 방안 +마련 +ⓐ ‌비대칭 키 +암호화 +ⓐ - +메시지 +가져오기 +안테나에서 지상국으로 +데이터 송신 시 중간자 +공격으로 데이터 수신 및 +처리시스템에 변조된 탑재체 +데이터 전송 +ⓑ ‌안테나와 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +메시지 +가져오기 +중간자 공격으로 위성으로 +전송하는 위성 제어명령을 +변조하여 위성 탈취 +ⓐ ‌안테나와 지상국 +간 인증 및 안전한 +암호화 키교환 방안 +마련 +ⓐ ‌비대칭 키 +암호화 +ⓐ - + +--- + + +## 제4장 우주 보안아키텍처 | 149 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +메시지 +가져오기 +중간자 공격으로 위성으로 +전송하는 위성 제어명령을 +변조하여 위성 탈취 +ⓑ ‌안테나와 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +원격 정탐, 도청 +스니핑 공격으로 안테나와 +지상국 통신 패킷을 도청하여 +위성 탑재체 데이터 탈취 +ⓐ ‌안테나와 지상국 +간 인증 및 안전한 +암호화 키교환 방안 +마련 +ⓐ ‌비대칭 키 +암호화 +ⓐ - +원격 정탐, 도청 +스니핑 공격으로 안테나와 +지상국 통신 패킷을 도청하여 +위성 탑재체 데이터 탈취 +ⓑ ‌안테나와 지상국 통신 +시 데이터 암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +원격 정탐, 도청 +스니핑 공격으로 지상국과 +클라우드 통신 패킷을 +도청하여 위성 예약 및 +스케줄링 데이터 탈취 +ⓐ ‌지상국과 클라우드간 +인증 및 안전한 +암호화 키교환 방안 +마련 +ⓐ ‌비대칭 키 +암호화 +ⓐ - +원격 정탐, 도청 +스니핑 공격으로 지상국과 +클라우드 통신 패킷을 +도청하여 위성 예약 및 +스케줄링 데이터 탈취 +ⓑ ‌지상국과 클라우드 +통신 시 데이터 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - +정보 조작 +유출된 클라우드 접속 VPN +계정을 통해 클라우드의 +예약 및 스케줄링 시스템에 +접속하여 안테나 예약 정보 +조작 +ⓒ ‌전송 데이터에 대한 +무결성 검사 +ⓒ 해시, +체크썸 +ⓒ - +정보 조작 +지상국과 클라우드 +전송구간을 스니핑하여 +안테나 예약 명령을 획득한 +후 변조 및 전송하여 안테나 +사용 장애 +ⓐ ‌지상국과 클라우드간 +인증 및 안전한 +암호화 키교환 방안 +마련 +ⓐ ‌비대칭 키 +암호화 +ⓐ - +정보 조작 +지상국과 클라우드 +전송구간을 스니핑하여 +안테나 예약 명령을 획득한 +후 변조 및 전송하여 안테나 +사용 장애 +ⓑ ‌지상국과 클라우드 +통신 시 데이터 +암호화 +ⓑ ‌대칭 키 +암호화 +ⓑ - + +--- + +150 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +메시지 +가져오기 +위성 운영사 및 클라우드 +간 스니핑을 통해 IAM키를 +탈취하여 클라우드 버킷을 +모두 삭제하여 안테나 예약 +및 스케줄링 서비스 불가 +ⓐ ‌위성 운영사와 +클라우드 통신 시 +데이터 암호화 +ⓐ ‌HTTPS +ⓐ - +정보 조작 +위성 운영사에서 클라우드로 +보내는 예약 및 스케줄링 +데이터를 변조하여 위성 사용 +장애 +ⓐ ‌위성 운영사와 +클라우드 통신 시 +데이터 암호화 +ⓐ ‌HTTPS +ⓐ - +메시지 +가져오기 +스니핑 공격으로 지상국과 +위성 운영사 통신 패킷을 +도청하여 탑재체 데이터 탈취 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 +암호화 +ⓐ ‌HTTPS +ⓐ - +메시지 가져오기 +위성 운영사에서 지상국으로 +탑재체 데이터 요청 시 +중간자공격을 통해 변조된 +탑재체 데이터 전송 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 +암호화 +ⓐ HTTPS +ⓐ - +장치 또는 +애플리케이션 +조작 +위성 운영사에 미션 명령을 +지상국으로 전송 시 중간자 +공격을 통해 관측 요청에 +변조된 Calibration 플래그를 +삽입하여 촬영 대신 +셔터OFF 명령을 전송하여 +미션 실패 +ⓐ ‌지상국과 위성 운영사 +통신 시 데이터 +암호화 +ⓐ HTTPS +ⓐ - +스푸핑 +스푸핑 공격을 통해 안테나 +제어시스템에 변조된 +데이터를 전송하여 안테나 +오작동을 통한 통신 장애 +ⓐ ‌지상국/GSaaS와의 +통신 시 전송 데이터 +암호화 +ⓐ HTTPS +ⓐ - +스푸핑 +스푸핑 공격을 가하여 위성 +운영사가 위성서비스 제공을 +위해 탑재체 데이터를 분석한 +중요정보 탈취 +ⓐ ‌DB분석 및 시각화 +시스템에서 데이터 +암호화 등 보호조치 +ⓐ ‌데이터 +암호화, +중앙화 +ⓐ ‌문서 +중앙화, +DRM +스푸핑 +스푸핑 공격을 가하여 위성 +운영사가 위성서비스 제공을 +위해 탑재체 데이터를 분석한 +중요정보 탈취 +ⓑ ‌DB분석 및 시각화 +시스템 통신 시 +데이터 암호화 +ⓑ 암호화 통신 +ⓑ - + +--- + + +## 제4장 우주 보안아키텍처 | 151 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +스푸핑 +스푸핑 공격을 통해 관측요청 +접수시스템에 변조된 명령을 +전송하여 잘못된 위성 명령 +전송 +ⓐ ‌관측요청 접수시스템 +통신 시 데이터 +암호화 +ⓐ 암호화 통신 +ⓐ https 등 +■ 우주 공급망 +표 63 +SC-05 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +정보 조작 +위성운영 시 위성제어SW를 +업데이트 중 RF스푸핑 +공격을 통해 위성제어SW를 +변조하여 위성 제어 장애 +발생 +ⓐ ‌위성에 탑재되는 +SW, FW는 배포 +시 데이터 암호화 및 +암호화 채널 사용 등 +안전한 전송 방안 +마련 +ⓐ ‌전송 데이터 +암호화 +통신구간 +터널링 +ⓐ ‌암호화 +VPN +(바) SC-06 협업 컴퓨팅 장치 +다음 표는 GSaaS와 우주 공급망에서 “협업 컴퓨팅 장치” 항목을 준수하지 않았을 때의 보안 +위협과 보안 요구사항을 나타낸다. +■ 우주 공급망 +표 64 +SC-06 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +직원의 안전 +관련 부정 행위 +위성활용 시스템 SW 개발 +담당자가 재택 근무 환경에서 +소스코드 수정 작업 중 +스피어피싱을 통해 개인 +단말이 악성코드에 감염되어 +위성체 SW 소스코드, 위성 +정보 등 중요 정보 유출 +ⓐ ‌위성SW 개발 원격 +업무 시 암호화 채널 +사용, 비대면 업무 +보안 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓐ ‌비대면 업무 +환경에 보안 +구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 + +--- + +152 | 우주 보안 모델 +(사) SC-07 모바일 코드 및 VoIP 통제 +다음 표는 GSaaS에서 “모바일 코드 및 VoIP 통제” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. +■ GSaaS +표 65 +SC-07 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +웹쉘 등 악성파일을 +시스템에 업로드 하여 미션 +및 스케줄링 장애 유발 및 +중요정보 탈취 +ⓐ ‌미션 및 스케줄링 웹 +서비스 보호 +ⓐ ‌웹 서비스 +보호 +ⓐ WAF +(4) 시스템 및 정보 무결성 +(가) SI-01 취약점 점검 및 결함 교정 +다음 표는 GSaaS와 우주 공급망에서 “취약점 점검 및 결함 교정” 항목을 준수하지 않았을 때의 +보안 위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 66 +SI-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +위성 소프트웨어 취약점을 +통해 버퍼오버플로우 공격을 +시도하여 위성 제어권 탈취 +ⓑ ‌소프트웨어 취약점 +발견 시 업데이트 +방안 마련 +ⓑ 보안 패치 +ⓑ - +서비스 거부 +안테나 제어시스템 및 라우터 +취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 +지상국 네트워크 장애 +ⓐ ‌안테나 제어시스템 및 +라우터 장비보안 패치 +ⓐ 보안패치 +ⓐ PMS + +--- + + +## 제4장 우주 보안아키텍처 | 153 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 안테나 +제어시스템에 접근하여 +Replay 공격으로 위성 제어 +명령을 전송하여 위성 제어권 +탈취 +ⓑ ‌소프트웨어 취약점 +발견 시 업데이트 +방안 마련 +ⓑ 보안 패치 +ⓑ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 안테나 +네트워크에 설치하여 +관리서버에 대한 공격을 통해 +위성 통신 장애 유발 +ⓒ ‌관리서버 및 네트워크 +기술적 취약점 진단 +ⓒ 취약점 점검 +ⓒ 취약점 진단 +악성코드 +웹쉘 등 악성파일을 +시스템에 업로드 하여 미션 +및 스케줄링 장애 유발 및 +중요정보 탈취 +ⓔ ‌미션 및 스케줄링 +시스템 기술적 취약점 +진단 +ⓔ 취약점 점검 +ⓔ 취약점 진단 +IT 시스템 또는 +애플리케이션의 +오작동 +공개된 취약점을 통해 +미션제어 및 운영지원 +시스템에 접근하여 미션제어 +데이터 탈취 +ⓐ ‌미션제어 및 운영지원 +시스템 장비보안 패치 +ⓐ 보안패치 +ⓐ PMS +IT 시스템 또는 +애플리케이션의 +오작동 +지상국 라우터 운영자가 +라우터 설정 시 잘못된 +네트워크 구성으로 지상국 +내부 네트워크 장애 +ⓐ ‌지상국 네트워크 구조 +점검 +ⓐ ‌인프라 +취약점 점검 +ⓐ - +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓐ ‌지상국 주요시스템 및 +라우터 장비보안 패치 +ⓐ 보안패치 +ⓐ PMS +서비스 거부 +DoS 공격을 통해 위성 +탑재체 제공 서비스 장애 +유발 +ⓓ ‌탑재체 데이터 서비스 +시스템 장비 보안 +패치 +ⓓ 보안패치 +ⓓ PMS +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 탑재체 +데이터 서비스 시스템에 +접근하여 탑재체 데이터 탈취 +ⓐ ‌탑재체 데이터 서비스 +시스템 장비 보안 +패치 +ⓐ 보안패치 +ⓐ PMS +정보 손실 +공개된 취약점을 통해 탑재체 +DB가 랜섬웨어에 감염되어 +탑재체 데이터 암호화 +ⓐ ‌탑재체 DB 장비보안 +패치 +ⓐ 보안패치 +ⓐ PMS + +--- + +154 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +GSaaS 접속 시스템 초기 +구축 시 발급된 디폴트 +관리자 계정/패스워드를 +통해 공격자가 외부에서 +접속하여 위성 제어권 및 +중요정보 탈취 +ⓒ ‌GSaaS 접속 시스템 +기술적 취약점 진단 +ⓒ 취약점 점검 +ⓒ 취약점 진단 +■ 우주 공급망 +표 67 +SI-01 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 SW개발자가 +악성코드가 포함된 +IDE(Integrated +Development +Environment) 플러그인을 +사용해 위성제어 SW를 +개발하여, 위성 시스템에 +악성코드 전파 및 제어권 +탈취 +ⓐ ‌위성 운영SW 개발 +환경 구축 시 IDE, +CI/CD 등 개발 및 +배포 도구에 플러그인 +설치 등 형상 변경 +시 충분히 검증된 +플러그인만 사용 +ⓐ ‌안전한 개발 +환경 구축 +ⓐ - +의도치 않은 +정보 누설 +위성체 제어시스템 도입 +시 테스트/디버그 계정을 +삭제하지 않아, 계정/ +패스워드를 탈취한 공격자가 +위성체 제어시스템에 +무단으로 접속하여 위성 +제어권 탈취 +ⓐ ‌위성SW 개발 +인프라는 구축 시 +충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌소프트웨어 +취약점 점검 +ⓐ - +의도치 않은 +정보 누설 +위성체 제어시스템 도입 시 +테스트/ +디버그 계정을 삭제하지 +않아, +계정/패스워드를 탈취한 +공격자가 +위성체 제어시스템에 +무단으로 접속하여 위성 +제어권 탈취 +ⓐ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 + +--- + + +## 제4장 우주 보안아키텍처 | 155 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 서비스 SW +개발환경 (IDE, CI/CD)의 +빌드 파이프라인에 백도어 +모듈을 삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어 +시스템이 C&C서버와 통신이 +활성화 되어 위성 제어권 +탈취 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 침투 +테스트를 통해 취약점 +조치 후 배포 +ⓑ 침투 테스트 +ⓑ - +악성코드 +지상국 서비스 SW 개발환경 +(IDE, CI/CD)의 빌드 +파이프라인에 백도어 모듈을 +삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓐ ‌위성 운영SW 개발 +인프라(IDE,CI/CD +등)는 구축 시 +백신을 이용한 검사 +등 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 +악성코드 +지상국 서비스 SW 개발환경 +(IDE, CI/CD)의 빌드 +파이프라인에 백도어 모듈을 +삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓑ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사, +백신을 이용한 +악성코드 검사 등을 +통해 취약점 조치 후 +배포 +ⓑ ‌정적/동적 +소스코드 +검사 +악성코드 +탐지 및 +차단 +ⓑ ‌소스코드 +검사 도구 +백신, +클린PC +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +위성활용 시스템 업데이트를 +위한 Cron/Task Scheduler +등록시 내부 임직원이 +악의적으로 외부 C&C서버 +접속명령을 등록하여 +주기적으로 페이로드 데이터 +탈취 +ⓒ ‌위성에 탑재되는 SW, +FW는 배포 전 침투 +테스트를 통해 취약점 +조치 후 배포 +ⓒ 침투 테스트 +ⓒ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +위성활용 시스템 업데이트를 +위한 Cron/Task Scheduler +등록시 내부 임직원이 +악의적으로 외부 C&C서버 +접속명령을 등록하여 +주기적으로 페이로드 데이터 +탈취 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 +검증 후 배포 +ⓐ ‌인프라 +취약점 점검 +ⓐ - + +--- + +156 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성체 제어를 위한 온 보드 +컴퓨터 개발에 필요한 펌웨어 +라이브러리 저장소 침투 +후 라이버러리에 백도어를 +삽입하여 위성이 궤도진입을 +확인 후 별도 안테나를 통해 +위성체를 제어하여 위성 탈취 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 +장치 또는 +애플리케이션 +조작 +공격자가 위성제조사 +소스코드 저장소에 침투하여 +위성 궤도 및 자세를 제어하는 +상수 변수를 조작하고, 변조된 +위성제어 SW가 지상국 +운영사에 납품되면 소규모 +드리프트가 발생하여 위성 +제어 장애 유발 +ⓐ ‌위성에 탑재되는 SW, +FW 개발 인프라는 +폐쇄망 구성 등 +충분한 보안성 확보 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌중요 개발 +인프라에 +대한 폐쇄망 +구성 +ⓐ - +장치 또는 +애플리케이션 +조작 +공격자가 위성제조사 +소스코드 저장소에 +침투하여 위성 궤도 및 +자세를 제어하는 상수 +변수를 조작하고, 변조된 +위성제어SW가 지상국 +운영사에 납품되면 소규모 +드리프트가 발생하여 위성 +제어 장애 유발 +ⓐ ‌위성에 탑재되는 SW, +FW 개발 인프라는 +폐쇄망 구성 등 +충분한 보안성 확보 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌중요 개발 +인프라에 +대한 폐쇄망 +구성 +ⓐ - +의도치 않은 +정보 누설 +공격자가 취약한 우주SW +개발사의 외부 코드 저장소에 +침투하여 하드코딩된 +인증정보를 탈취하여 위성 +운영사 위성활용 시스템에 +접속하여 위성 활용 서비스 +장애 유발 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓐ ‌위성 운영SW 개발 +시 소스코드 저장소 +등 인프라는 구축 +시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌자체 +소스코드 +저장소 +개발 +인프라망 +분리 +ⓐ - + +--- + + +## 제4장 우주 보안아키텍처 | 157 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓐ ‌위성 운영SW 개발 +시 라이브러리 저장소 +등 인프라는 구축 +시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌자체 +라이브러리 +저장소 +개발 +인프라망 +분리 +ⓐ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +우주SW개발사가 Zero Day +취약점이 존재하는 디바이스 +드라이버를 커널에 추가한 +상태로 납품하여 공격자가 +원격접속 취약점을 통해 +페이로드 데이터 탈취 +ⓑ ‌위성 운영SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC +의도치 않은 +정보 누설 +위성 페이로드SW 개발 +시 테스트 편의상 사용한 +MASTER_KEY(인증정보) +외부 상수 변수를 +제거하지 않고 위성에 +탑재한 후 공격자가 외부 +변수를 수집하여 위성 +페이로드SW에 직접 +접근하여 페이로드 데이터 +탈취 +ⓐ ‌위성운영 인프라는 +도입 시 취약점 +점검, 침투 테스트 +등 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌취약점 점검 +침투테스트 +ⓐ - +악성코드 +공격자가 위성제조사 +라이브러리 저장소에 +침투하여 로직밤 악성코드를 +페이로드SW 삽입하여 위성 +궤도에 오른 후 로직밤을 +활성화 시켜 미션 수행 장애 +ⓐ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓐ ‌위성에 탑재되는 SW, +FW 개발 인프라는 +폐쇄망 구성 등 +충분한 보안성 확보 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌중요 개발 +인프라에 +대한 폐쇄망 +구성 +ⓐ - + +--- + +158 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓐ ‌위성 운영SW는 배포 +전 테스트 절차에 +따라 충분한 보안기능 +검증 후 배포 +ⓐ ‌안전한 +소프트웨어 +배포 및 +테스트 +ⓐ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓑ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 +악성코드 +지상국에서 탑재체 +제어시스템 자체 개발 시 +백도어가 삽입되어 있는 +공개된 Docker Hub +이미지를 사용하여 공격자가 +원격접속 후 랜섬웨어를 통해 +미션 수행 장애 발생 +ⓒ ‌위성 운영SW는 배포 +전 침투 테스트를 +통해 취약점 조치 후 +배포 +ⓒ 침투 테스트 +ⓒ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국에서 탑재체 +제어시스템을 자체 개발 시 +RCE 취약점이 있는 오픈 +소스를 사용하여 공격자가 +원격접속 후 제어권 탈취 +ⓐ ‌위성 운영SW 개발 +환경 구축 시 IDE, +CI/CD 등 개발 및 +배포 도구는 백신을 +이용한 악성코드 검사 +등 충분한 보안성 +검토 후 사용해야하며 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 +의도치 않은 +정보 누설 +위성 제어시스템 유지보수 +엔지니어가 이메일을 통해 +키로거 악성코드에 감염되어 +공격자가 지상국 위성 +제어시스템 계정을 탈취후 +위성 제어 장애 +ⓐ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 + +--- + + +## 제4장 우주 보안아키텍처 | 159 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성 제어시스템 패치 시 +악성코드에 감염된 USB를 +삽입하여 위성체 운영 시스템 +서버가 랜섬웨어에 감염되어 +위성 제어 장애 발생 +ⓐ ‌위성 운영 시스템 +유지보수 환경은 +정기적으로 백신을 +이용한 악성코드 +검사, 취약점 검토 및 +조치를 수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신, +클린PC +악성코드 +탑재체 데이터 처리 및 가공 +시스템 패치 시 원격접속 +악성코드가 삽입된 인스톨 +파일을 사용하여 Update +후 공격자가 외부에서 +탑재체 데이터 처리 및 가공 +시스템에 접속하여 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 시스템 +유지보수는 안전한 +매체를 이용해 +수행해야하며, +정기적으로 취약점 +검토 및 조치 수행 +ⓐ 매체제어 +ⓐ ‌DLP, 보안 +USB +메모리 +(나) SI-02 악성코드 방지 +다음 표는 GSaaS와 우주 공급망에서 “악성코드 방지” 항목을 준수하지 않았을 때의 보안 +위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 68 +SI-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +악성코드에 감염된 비인가 +USB를 관리서버에 삽입, +랜섬웨어에 감염으로 인한 +위성 제어 및 탑재체 데이터 +송수신 장애 +ⓑ 단말 보안 강화 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ 백신 +악성코드 +악성코드에 감염된 비인가 +USB를 관리서버에 삽입, +랜섬웨어에 감염으로 인한 +위성 제어 및 탑재체 데이터 +송수신 장애 +ⓒ ‌테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓒ ‌화이트 +리스트 백신 +ⓒ 화이트 +리스트 백신 + +--- + +160 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +웹쉘 등 악성파일을 +시스템에 업로드 하여 미션 +및 스케줄링 장애 유발 및 +중요정보 탈취 +ⓑ ‌웹쉘 등 악성파일 +탐지 및 삭제 +ⓑ ‌웹쉘 탐지 +및 삭제 +ⓑ 웹쉘 탐지 +악성코드 +웹쉘 등 악성파일을 +시스템에 업로드 하여 미션 +및 스케줄링 장애 유발 및 +중요정보 탈취 +ⓒ ‌테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓒ ‌화이트 +리스트 백신 +ⓒ ‌화이트 +리스트 백신 +악성코드 +악성코드에 감염된 비인가 +USB를 업무용 단말에 +삽입 후 위성 제어시스템에 +랜섬웨어가 전파되어 위성 +제어 장애 +ⓑ ‌악성코드 탐지 및 +차단 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ 백신 +악성코드 +악성코드에 감염된 비인가 +USB를 업무용 단말에 +삽입 후 위성 제어시스템에 +랜섬웨어가 전파되어 위성 +제어 장애 +ⓒ ‌테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓒ ‌화이트 +리스트 백신 +ⓒ ‌화이트 +리스트 백신 +악성코드 +위성 제어시스템에 +랜섬웨어를 감염시켜 위성 +제어시스템 장애로 위성 제어 +불능 +ⓐ ‌악성코드 탐지 및 +차단 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 +악성코드 +위성 제어시스템에 +랜섬웨어를 감염시켜 위성 +제어시스템 장애로 위성 제어 +불능 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓑ ‌화이트 +리스트 백신 +ⓑ ‌화이트 +리스트 백신 +악성코드 +악성메일 등을 통해 위성 +운영사 임직원 PC에 +악성코드 감염 후 탑재체 +위성 운영사의 탐제체 데이터 +처리 및 가공 시스템과 +연동하는 지상국 데이터 +서비스 시스템에 전파되어 +탑재체 서비스 장애 +ⓐ ‌악성코드 탐지 및 +차단 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 + +--- + + +## 제4장 우주 보안아키텍처 | 161 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +악성메일 등을 통해 위성 +운영사 임직원 PC에 +악성코드 감염 후 탑재체 +위성 운영사의 탑재체 데이터 +처리 및 가공 시스템과 +연동하는 지상국 데이터 +서비스 시스템에 전파되어 +탑재체 서비스 장애 +ⓑ 테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓑ ‌화이트 +리스트 백신 +ⓑ ‌화이트 +리스트 백신 +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓑ ‌악성코드 탐지 및 +차단 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ 백신 +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓒ ‌테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓒ ‌화이트 +리스트 백신 +ⓒ ‌화이트 +리스트 백신 +악성코드 +스피어 피싱, 악성메일 등을 +통해 지상국 직원 PC에 +악성코드 감염 후 내부 +네트워크에 전파하여 탑재체 +데이터 등 중요정보 암호화 +및 위성 제어 장애 +ⓐ ‌악성코드 탐지 및 +차단 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 +악성코드 +스피어 피싱, 악성메일 등을 +통해 지상국 직원 PC에 +악성코드 감염 후 내부 +네트워크에 전파하여 탑재체 +데이터 등 중요정보 암호화 +및 위성 제어 장애 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓑ ‌화이트 +리스트 백신 +ⓑ ‌화이트 +리스트 백신 +악성코드 +악성코드에 감염된 비인가 +USB를 탑재체 데이터 +및 위성운영 서버/단말에 +삽입하여 랜섬웨어 감염 및 +전파 +ⓐ ‌악성코드 탐지 및 +차단 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 + +--- + +162 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +악성코드에 감염된 비인가 +USB를 탑재체 데이터 +및 위성운영 서버/단말에 +삽입하여 랜섬웨어 감염 및 +전파 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓑ ‌화이트 +리스트 백신 +ⓑ ‌화이트 +리스트 백신 +직원의 안전 +관련 부정 행위 +원격접속 악성코드에 +감염되어 있는 지상국 임직원 +PC를 통해 미션제어 및 +운영지원 시스템 계정을 +탈취하여 미션 및 스케줄링 +데이터 삭제 +ⓐ ‌악성코드 탐지 및 +차단 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 +■ 우주 공급망 +표 69 +SI-02 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 SW개발자가 +악성코드가 포함된 +IDE(Integrated +Development +Environment) 플러그인을 +사용해 위성제어 SW를 +개발하여, 위성 시스템에 +악성코드 전파 및 제어권 +탈취 +ⓑ ‌위성 운영SW 개발 +환경은 백신 등의 +도구를 사용하여 +악성코드 검사 및 +충분한 검증 후 사용 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ 백신 +악성코드 +지상국 서비스 SW 개발환경 +(IDE, CI/CD)의 빌드 +파이프라인에 백도어 모듈을 +삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓑ ‌위성 운영SW 개발 +환경은 백신 등의 +도구를 사용하여 +악성코드 검사 및 +충분한 검증 후 사용 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ 백신 + +--- + + +## 제4장 우주 보안아키텍처 | 163 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 서비스 SW 개발환경 +(IDE, CI/CD)의 빌드 +파이프라인에 백도어 모듈을 +삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓐ ‌위성 운영SW 개발 +인프라(IDE,CI/CD +등)는 구축 시 +백신을 이용한 검사 +등 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 +악성코드 +위성체 제어를 위한 온 보드 +컴퓨터 개발에 필요한 펌웨어 +라이브러리 저장소 침투 +후 라이버러리에 백도어를 +삽입하여 위성이 궤도진입을 +확인 후 별도 안테나를 통해 +위성체를 제어하여 위성 탈취 +ⓑ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사, +백신을 이용한 +악성코드 검사 등을 +통해 취약점 조치 후 +배포 +ⓑ ‌정적/동적 +소스코드 +검사 +악성코드 +탐지 및 +차단 +ⓑ ‌소스코드 +검사 도구 +백신, +클린PC +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC +악성코드 +공격자가 위성제조사 +라이브러리 저장소에 +침투하여 로직밤 악성 +코드를 페이로드SW +삽입하여 위성 궤도에 오른 +후 로직밤을 활성화 시켜 +미션 수행 장애 +ⓑ ‌위성 운영SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC +악성코드 +지상국에서 탑재체 +제어시스템 자체 개발 시 +백도어가 삽입되어 있는 +공개된 Docker Hub +이미지를 사용하여 공격자가 +원격접속 후 랜섬웨어를 통해 +미션 수행 장애 발생 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC + +--- + +164 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +위성 제어시스템 유지보수 +엔지니어가 이메일을 통해 +키로거 악성코드에 감염되어 +공격자가 지상국 위성 +제어시스템 계정을 탈취후 +위성 제어 장애 +ⓐ ‌위성 운영SW 개발 +환경 구축 시 IDE, +CI/CD 등 개발 및 +배포 도구는 백신을 +이용한 악성코드 검사 +등 충분한 보안성 +검토 후 사용해야하며 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 +악성코드 +위성 제어시스템 패치 시 +악성코드에 감염된 USB를 +삽입하여 위성체 운영 시스템 +서버가 랜섬웨어에 감염되어 +위성 제어 장애 발생 +ⓐ ‌위성 운영 시스템 +유지보수 환경은 +정기적으로 백신을 +이용한 악성코드 +검사, 취약점 검토 및 +조치를 수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ ‌백신, +클린PC +악성코드 +RCE(Remote Code +Execution)취약점 코드를 +삽입된 비인가 모바일 코드 +패치 파일을 유지보수 +엔지니어가 인터넷에서 +다운받아 위성 제어시스템에 +설치하여 공격자가 원격으로 +위성체 제어시스템에 +접속하여 위성 제어 장애 +ⓑ ‌위성 운영 SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ 백신, +클린PC +악성코드 +탑재체 데이터 처리 및 가공 +시스템 패치 시 원격접속 +악성코드가 삽입된 인스톨 +파일을 사용하여 Update +후 공격자가 외부에서 +탑재체 데이터 처리 및 가공 +시스템에 접속하여 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신, +클린PC + +--- + + +## 제4장 우주 보안아키텍처 | 165 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +탑재체 데이터 처리 및 가공 +시스템 패치 시 원격접속 +악성코드가 삽입된 인스톨 +파일을 사용하여 Update +후 공격자가 외부에서 +탑재체 데이터 처리 및 가공 +시스템에 접속하여 페이로드 +데이터 탈취 +ⓐ ‌위성 운영SW 개발 +환경 구축 시 IDE, +CI/CD 등 개발 및 +배포 도구는 백신을 +이용한 악성코드 검사 +등 충분한 보안성 +검토 후 사용해야하며 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 +악성코드 +랜섬웨어 코드가 포함되어 +있는 탑재체 데이터 처리 및 +가공시스템 업데이트 파일을 +무결성 검증을 수행하지 않고 +업데이트 하여 탑재체 데이터 +처리 및 가공 시스템이 +랜섬웨어에 감염되어 +페이로드 제공 등 위성 활용 +서비스 장애 +ⓑ ‌위성 운영SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC +(다) SI-03 보안 경보, 권고 +다음 표는 우주 공급망에서 “보안 경보, 권고” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ 우주 공급망 +표 70 +SI-03 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +위성 제어시스템 유지보수 +엔지니어가 이메일을 통해 +키로거 악성코드에 감염되어 +공격자가 지상국 위성 +제어시스템 계정을 탈취후 +위성 제어 장애 +ⓑ ‌위성 운영 시스템 +유지보수 환경은 +이상행위 발생에 대해 +모니터링, 탐지 및 +차단 수행 +ⓑ ‌이상징후 +모니터링 +이상징후 +탐지 및 +차단 +ⓑ ‌‌보안관제 +IPS/IDS + +--- + +166 | 우주 보안 모델 +(라) SI-04 시스템 및 통신 트래픽 모니터링 +다음 표는 GSaaS와 우주 공급망에서 “시스템 및 통신 트래픽 모니터링” 항목을 준수하지 +않았을 때의 보안 위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 71 +SI-04 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +안테나 제어시스템 및 라우터 +취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 +지상국 네트워크 장애 +ⓑ ‌위성 안테나 시스템 +내/외부 네트워크 +침입, 이상행위 및 +공격에 대한 탐지 및 +차단 대책 마련 +ⓑ ‌네트워크 +침입 탐지 +ⓑ IDS/IPS +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 안테나 +제어시스템에 접근하여 +Replay 공격으로 위성 제어 +명령을 전송하여 위성 제어권 +탈취 +ⓖ ‌안테나 네트워크 +내/외부 침입 및 공격 +탐지 +ⓖ ‌내부 +네트워크 +침입 탐지 +ⓖ IDS/IPS +스푸핑 +스푸핑 공격을 통해 안테나 +제어시스템에 변조된 +데이터를 전송하여 안테나 +오작동을 통한 통신 장애 +ⓓ ‌안테나 네트워크 +내/외부 침입 및 공격 +탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +안테나 영역의 관리서버 +계정의 취약한 패스워드를 +Guessing 공격으로 +탈취하여 관리서버에 접속 +후 지상국/클라우드/위성 +운영사간 통신 설정 변경, +위성 송수신데이터 전송 장애 +유발 +ⓒ ‌안테나 네트워크 +내/외부 침입 및 공격 +탐지 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓒ IDS/IPS +악성코드 +악성코드에 감염된 비인가 +USB를 관리서버에 삽입, +랜섬 +웨어에 감염으로 인한 위성 +제어 및 탑재체 데이터 +송수신 장애 +ⓓ ‌지상국 네트워크 +내/외부 침입 및 공격 +탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS + +--- + + +## 제4장 우주 보안아키텍처 | 167 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +웹쉘 등 악성파일을 +시스템에 업로드 하여 미션 +및 스케줄링 장애 유발 및 +중요정보 탈취 +ⓓ ‌GSaaS 클라우드 +네트워크 내/외부 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +IT 시스템 또는 +애플리케이션의 +오작동 +공개된 취약점을 통해 +미션제어 및 운영지원 +시스템에 접근하여 미션제어 +데이터 탈취 +ⓓ ‌내/외부 네트워크 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +IT 시스템 또는 +애플리케이션의 +오작동 +지상국 라우터 운영자가 +라우터 설정 시 잘못된 +네트워크 구성으로 지상국 +내부 네트워크 장애 +ⓑ ‌지상국 네트워크 관리 +및 모니터링 +ⓑ ‌보안 +모니터링 +ⓑ NMS +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓑ ‌지상국 네트워크 +내/외부 침입, +이상행위 및 공격에 +대한 탐지 및 차단 +대책 마련 +ⓑ ‌네트워크 +침입 탐지 +ⓑ IDS/IPS +스푸핑 +스푸핑 공격을 가하여 위성 +운영사가 위성서비스 제공을 +위해 탑재체 데이터를 분석한 +중요정보 탈취 +ⓒ ‌탑재체 데이터 이용 +네트워크 내/외부 +침입 및 공격 탐지 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓒ IDS/IPS +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 +제어시스템에 취약하게 +설정된 계정/패스워드를 +Guessing 공격으로 +탈취하여 접속 후 임의의로 +궤도룰 수정하여 위성 탈취 +ⓓ ‌궤도 제어시스템 +네트워크 내/외부 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 지상국 +네트워크에 설치하여 궤도 +제어시스템에 대한 공격을 +통해 위성 제어 장애 유발 +ⓓ ‌위성 운영 내/외부 +네트워크 침입 및 +공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +악성코드 +악성코드에 감염된 비인가 +USB를 업무용 단말에 +삽입 후 위성 제어시스템에 +랜섬웨어가 전파되어 위성 +제어 장애 +ⓓ ‌위성 운영 네트워크 +내/외부 침입 및 공격 +탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS + +--- + +168 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +DoS 공격을 통해 위성 +탑재체 제공 서비스 장애 +유발 +ⓑ ‌탑재체 데이터 이용 +네트워크 내/외부 +침입 및 공격 탐지 +ⓑ ‌내부 +네트워크 +침입 탐지 +ⓑ IDS/IPS +악성코드 +악성메일 등을 통해 위성 +운영사 임직원 PC에 +악성코드 감염 후 탑재체 +위성 운영사의 탑재체 데이터 +처리 및 가공 시스템과 +연동하는 지상국 데이터 +서비스 시스템에 전파되어 +탑재체 서비스 장애 +ⓒ ‌탑재체 데이터 이용 +네트워크 내/외부 +침입 및 공격 탐지 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓒ IDS/IPS +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓗ ‌내/외부 네트워크 +침입 및 공격 탐지 +ⓗ ‌내부 +네트워크 +침입 탐지 +ⓗ IDS/IPS +스푸핑 +스푸핑 공격을 통해 관측요청 +접수시스템에 변조된 명령을 +전송하여 잘못된 위성 명령 +전송 +ⓓ ‌탑재체 데이터 이용 +네트워크 내/외부 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +악성코드 +스피어 피싱, 악성메일 등을 +통해 지상국 직원 PC에 +악성코드 감염 후 내부 +네트워크에 전파하여 탑재체 +데이터 등 중요정보 암호화 +및 위성 제어 장애 +ⓓ ‌탑재체 데이터 이용 +네트워크 내/외부 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +악성코드 +악성코드에 감염된 비인가 +USB를 탑재체 데이터 +및 위성운영 서버/단말에 +삽입하여 랜섬웨어 감염 및 +전파 +ⓓ ‌탑재체 데이터 이용 +네트워크 내/외부 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +정보 손실 +공개된 취약점을 통해 탑재체 +DB가 랜섬웨어에 감염되어 +탑재체 데이터 암호화 +ⓓ ‌내/외부 네트워크 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS + +--- + + +## 제4장 우주 보안아키텍처 | 169 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 통해 +경고 알림이 발생하지않도록 +하여 위성 긴급 상황 시 대처 +불가 +ⓒ ‌위성운영 네트워크 +내/외부 침입 및 공격 +탐지 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓒ IDS/IPS +권한 남용 +지상국 운영사 내부 직원이 +안테나 제어시스템 관리자 +권한을 획득, 고의로 잘못된 +위성 위치를 추적하도록 +만들어 실제 위성과 통신 +장애 유발 +ⓐ ‌직무 교육 및 +훈련으로 휴먼에러 +최소화 +ⓐ ‌직무 교육 +ⓐ - +권한 남용 +비인가된 내부 임직원이 +위성제어시스템 관리자 +계정을 탈취하여 위성 제어권 +탈취 및 오동작 유발 +ⓒ ‌위성운영 네트워크 +내/외부 침입 및 공격 +탐지 +ⓒ ‌내부 +네트워크 +침입 탐지 +ⓒ IDS/IPS +■ 우주 공급망 +표 72 +SI-04 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +위성 제어시스템 유지보수 +엔지니어가 이메일을 통해 +키로거 악성코드에 감염되어 +공격자가 지상국 위성 +제어시스템 계정을 탈취후 +위성 제어 장애 +ⓑ ‌위성 운영 시스템 +유지보수 환경은 +이상행위 발생에 +대해 모니터링, +탐지 및 차단 수행 +ⓑ ‌이상징후 +모니터링 +이상징후 +탐지 및 차단 +ⓑ ‌보안관제 +IPS/IDS +원격 정탐, +도청 +탑재체 데이터 처리 및 가공 +시스템 원격유지보수 시 +암호화된 터털링에 사용되는 +사설CA(Certificate +Authority) 키값을 탈취하여 +스니핑을 통해 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 시스템 +원격 유지보수 +시 암호화 채널 +사용, 비대면 업무 +보안 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓐ ‌비대면 +유지보수 +업무 환경에 +보안 구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 + +--- + +170 | 우주 보안 모델 +(5) 시스템/서비스 운영 관리 +(가) SO-01 유지보수 통제 +다음 표는 우주 공급망에서 “유지보수 통제” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ 우주 공급망 +표 73 +SO-01 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +위성 제어시스템 유지보수 +엔지니어가 이메일을 통해 키로거 +악성코드에 감염되어 공격자가 +지상국 위성 제어시스템 계정을 +탈취후 위성 제어 장애 +ⓐ ‌위성 운영 시스템 +유지보수 환경은 +정기적으로 백신을 +이용한 악성코드 검사, +취약점 검토 및 조치를 +수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ ‌백신, +클린PC +악성코드 +위성 제어시스템 패치 시 +악성코드에 감염된 USB를 +삽입하여 위성체 운영 시스템 +서버가 랜섬웨어에 감염되어 위성 +제어 장애 발생 +ⓐ ‌위성 운영 시스템 +유지보수는 안전한 +매체를 이용해 +수행해야하며, +정기적으로 취약점 검토 +및 조치 수행 +ⓐ 매체제어 +ⓐ ‌DLP, 보안 +USB메모리 +권한 남용 +공격자가 계약이 종료된 유지보수 +업체에 탑재체 제어시스템 +계정/패스워드를 사용하여 탑재체 +제어시스템에 무단접근하여 미션 +수행 장애 유발 +ⓐ ‌위성SW 유지보수 +업체는 계약 종료 시 +데이터 삭제 등 적절한 +보안조치 요구 +ⓐ ‌사용자 +계정 및 +권한 검토 +ⓐ ‌서버 +접근제어 +원격 정탐, +도청 +탑재체 데이터 처리 및 가공 +시스템 원격유지보수 시 +암호화된 터털링에 사용되는 +사설CA(Certificate Authority) +키값을 탈취하여 스니핑을 통해 +페이로드 데이터 탈취 +ⓐ ‌위성 운영 시스템 원격 +유지보수 시 암호화 채널 +사용, 비대면 업무 보안 +등 보안성이 충분히 +보장된 환경에서만 수행 +ⓐ ‌비대면 +유지보수 +업무 +환경에 +보안 구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 + +--- + + +## 제4장 우주 보안아키텍처 | 171 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +랜섬웨어 코드가 포함되어 있는 +탑재체 데이터 처리 및 가공시스템 +업데이트 파일을 무결성 검증을 +수행하지 않고 업데이트 하여 +탑재체 데이터 처리 및 가공 +시스템이 랜섬웨어에 감염되어 +페이로드 제공 등 위성 활용 +서비스 장애 +ⓑ ‌위성 운영SW는 +유지보수 시 전송 +데이터에 대한 무결성 +검사 등 보안성이 충분히 +보장된 환경에서만 수행 +ⓑ ‌해시, +체크썸 +ⓑ - +(나) SO-02 시스템 감사 및 감사기록 분석, 보고 +다음 표는 GSaaS에서 “시스템 감사 및 감사기록 분석, 보고” 항목을 준수하지 않았을 때의 +보안 위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 74 +SO-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 +제어시스템에 취약하게 +설정된 계정/패스워드를 +Guessing 공격으로 +탈취하여 접속 후 임의의로 +궤도룰 수정하여 위성 탈취 +ⓓ ‌궤도 제어시스템 +네트워크 내/외부 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +정보 손실 +공개된 취약점을 통해 탑재체 +DB가 랜섬웨어에 감염되어 +탑재체 데이터 암호화 +ⓓ ‌내/외부 네트워크 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +(다) SO-03 시간동기화 +다음 표는 GSaaS에서 “시간동기화” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. + +--- + +172 | 우주 보안 모델 +■ GSaaS +표 75 +SO-03 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 +제어시스템에 취약하게 +설정된 계정/패스워드를 +Guessing 공격으로 +탈취하여 접속 후 임의의로 +궤도룰 수정하여 위성 탈취 +ⓓ ‌궤도 제어시스템 +네트워크 내/외부 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +정보 손실 +공개된 취약점을 통해 탑재체 +DB가 랜섬웨어에 감염되어 +탑재체 데이터 암호화 +ⓓ ‌내/외부 네트워크 +침입 및 공격 탐지 +ⓓ ‌내부 +네트워크 +침입 탐지 +ⓓ IDS/IPS +(라) SO-4 휴대용 저장장치(저장매체 등) 보안 +다음 표는 GSaaS에서 “휴대용 저장장치(저장매체 등)보안” 항목을 준수하지 않았을 때의 보안 +위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 76 +SO-04 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +악성코드에 감염된 비인가 +USB를 관리서버에 삽입, +랜섬웨어에 감염으로 인한 +위성 제어 및 탑재체 데이터 +송수신 장애 +ⓐ ‌안테나 관리서버의 +비인가 이동식 +저장매체 사용 제한 +및 매체제어 +ⓐ ‌이동식 +저장매체 +사용 통제 +ⓐ ‌‌매체제어 +(DLP) +기기/미디어/ +문서 도난 +위성 제어 및 미션 관련 +중요 데이터가 저장되어 +있는 USB를 분실 또는 +도난당하여 중요정보 노출 +ⓐ ‌이동형 저장장치 +(USB메모리 등) +취급방안 마련 등 +데이터 보호 및 접근 +통제 +ⓐ ‌USB +데이터 보호 +및 접근 +통제 +ⓐ 보안 USB + +--- + + +## 제4장 우주 보안아키텍처 | 173 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +악성코드에 감염된 비인가 +USB를 업무용 단말에 +삽입 후 위성 제어시스템에 +랜섬웨어가 전파되어 위성 +제어 장애 +ⓐ ‌비인가 이동식 +저장매체 사용 제한 +및 매체제어 +ⓐ ‌이동식 +저장매체 +사용 통제 +ⓐ ‌매체제어 +(DLP) +악성코드 +악성코드에 감염된 비인가 +USB를 탑재체 데이터 +및 위성운영 서버/단말에 +삽입하여 랜섬웨어 감염 및 +전파 +ⓒ ‌위성 운영 시스템의 +비인가 이동식 +저장매체 사용 제한 +및 매체제어 +ⓒ ‌이동식 +저장매체 +사용 통제 +ⓒ ‌매체제어 +(DLP) +(마) SO-05 형상관리 +다음 표는 우주 공급망에서 “형상관리” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ 우주 공급망 +표 77 +SO-05 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 SW개발자가 +백도어형 악성코드가 +포함된 인가받지 않은 +IDE(Integrated +Development +Environment) 플러그인을 +임의로 설치하여 소스코드 등 +중요정보 유출 +ⓐ ‌위성 운영SW 개발 +환경 구축 시 IDE, +CI/CD 등 개발 및 +배포 도구에 플러그인 +설치 등 형상 변경 시 +타당성 검증 후 설치 +및 사용 +ⓐ ‌안전한 개발 +환경 구축 +ⓐ ‌IPS/ +IDS백신, +클린PC +(바) SO-06 시스템 및 애플리케이션 보안 요구사항 정의 +다음 표는 GSaaS와 우주 공급망에서 “시스템 및 애플리케이션 보안 요구사항” 항목을 +준수하지 않았을 때의 보안 위협과 보안 요구사항을 나타낸다. + +--- + +174 | 우주 보안 모델 +■ GSaaS +표 78 +SO-06 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +위성 소프트웨어 취약점을 +통해 버퍼오버플로우 공격을 +시도하여 위성 제어권 탈취 +ⓓ ‌위성 시스템 +소프트웨어에 +보안기능 구현 +ⓓ 시큐어 코딩 +ⓓ ‌시큐어 코딩 +플러그인 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 안테나 +제어시스템에 접근하여 +Replay 공격으로 위성 제어 +명령을 전송하여 위성 제어권 +탈취 +ⓓ ‌위성 시스템 +소프트웨어에 +보안기능 구현 +ⓓ 시큐어 코딩 +ⓓ ‌시큐어 코딩 +플러그인 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 탑재체 +데이터 서비스 시스템에 +접근하여 탑재체 데이터 탈취 +ⓓ ‌탑재체 데이터 서비스 +시스템 소프트웨어에 +보안기능 구현 +ⓓ 시큐어 코딩 +ⓓ ‌소스코드 +정적 분석 +■ 우주 공급망 +표 79 +SO-06 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 서비스 SW 개발환경 +(IDE, CI/CD)의 빌드 +파이프라인에 백도어 모듈을 +삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓐ ‌위성 운영SW 개발 +인프라(IDE,CI/CD +등)는 구축 시 +백신을 이용한 검사 +등 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌악성코드 +탐지 및 차단 +ⓐ 백신 +의도치 않은 +정보 누설 +공격자가 취약한 우주SW +개발사의 외부 코드 저장소에 +침투하여 하드코딩된 +인증정보를 탈취하여 위성 +운영사 위성활용 시스템에 +접속하여 위성 활용 서비스 +장애 유발 +ⓐ ‌위성 운영SW 개발 +시 소스코드 저장소 +등 인프라는 구축 +시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌자체 +소스코드 +저장소 +개발 +인프라망 +분리 +ⓐ - + +--- + + +## 제4장 우주 보안아키텍처 | 175 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓐ ‌위성 운영SW 개발 +시 라이브러리 저장소 +등 인프라는 구축 +시 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌자체 +라이브러리 +저장소 +개발 +인프라망 +분리 +ⓐ - +(사) SO-07 시스템/애플리케이션 시스템/애플리케이션 변경관리 +다음 표는 GSaaS에서 “변경관리” 항목을 준수하지 않았을 때의 보안 위협과 보안 요구사항을 +나타낸다. +■ GSaaS +표 80 +SO-07 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장비 또는 +미디어 손상 +관리서버 운영자의 운영 +미숙으로 관리서버 +소프트웨어 업데이트 시 +에러가 발생하여 위성 통신 +장애 +ⓑ ‌위성 소프트웨어 +업데이트 시 안전성 +사전 점검 +ⓑ ‌업데이트 +사전테스트 +ⓑ - +(아) SO-08 개발 시험 및 평가 +다음 표는 우주 공급망에서 “개발 시험 및 평가” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. + +--- + +176 | 우주 보안 모델 +■ 우주 공급망 +표 81 +SO-08 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +위성체 제어시스템 도입 +시 테스트/디버그 계정을 +삭제하지 않아, 계정/ +패스워드를 탈취한 공격자가 +위성체 제어시스템에 +무단으로 접속하여 위성 +제어권 탈취 +ⓐ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 +장치 또는 +애플리케이션 +조작 +공격자가 위성제조사 +소스코드 저장소에 침투하여 +위성 궤도 및 자세를 제어하는 +상수 변수를 조작하고, 변조된 +위성제어SW가 지상국 +운영사에 납품되면 소규모 +드리프트가 발생하여 위성 +제어 장애 유발 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +우주SW개발사가 Zero Day +취약점이 존재하는 디바이스 +드라이버를 커널에 추가한 +상태로 납품하여 공격자가 +원격접속 취약점을 통해 +페이로드 데이터 탈취 +ⓐ ‌위성운영 인프라는 +도입 시 취약점 점검, +침투 테스트 등 충분한 +보안성 검토 후 사용 +및 정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌취약점 점검 +침투테스트 +ⓐ - +의도치 않은 +정보 누설 +위성 페이로드SW 개발 +시 테스트 편의상 사용한 +MASTER_KEY(인증정보) +외부 상수 변수를 제거하지 +않고 위성에 탑재한 후 +공격자가 외부 변수를 +수집하여 위성 페이로드 +SW에 직접 접근하여 +페이로드 데이터 탈취 +ⓐ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 있는 +오픈 소스를 사용하여 공격자가 +원격 공격을 통해 권한을 +상승시켜 페이로드 데이터 탈취 +ⓑ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 + +--- + + +## 제4장 우주 보안아키텍처 | 177 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국에서 탑재체 +제어시스템을 자체 개발 시 +RCE 취약점이 있는 오픈 +소스를 사용하여 공격자가 +원격접속 후 제어권 탈취 +ⓐ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 +(자) SO-09 기능 최소화 및 사용자 설치 소프트웨어 통제 +다음 표는 우주 공급망에서 “기능 최소화 및 사용자 설치 소프트웨어 통제” 항목을 준수하지 +않았을 때의 보안 위협과 보안 요구사항을 나타낸다. +■ 우주 공급망 +표 82 +SO-09 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +지상국 서비스 SW +개발환경(IDE, CI/CD)의 +빌드 파이프라인에 백도어 +모듈을 삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓐ ‌위성 운영SW 개발 +환경 구축 시 IDE, +CI/CD 등 개발 및 +배포 도구에 플러그인 +설치 등 형상 변경 시 +타당성 검증 후 설치 +및 사용 +ⓐ ‌안전한 배포 +환경 구축 +ⓐ ‌백신, +IPS/IDS +악성코드 +지상국 서비스 SW +개발환경(IDE, CI/CD)의 +빌드 파이프라인에 백도어 +모듈을 삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓐ ‌위성 운영SW 개발 +인프라(IDE,CI/CD +등)는 구축 시 +백신을 이용한 검사 +등 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 + +--- + +178 | 우주 보안 모델 +(6) 사고 대응 +(가) IR-01 사고 처리 및 테스트 +다음 표는 GSaaS에서 “사고 처리 및 테스트” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ GSaaS +표 83 +IR-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 +관측 데이터 탈취 +ⓔ ‌보안 침해사고 탐지 +및 사고 대응 체계 +구축 +ⓔ ‌보안사고 +분석 +ⓔ ‌SIEM, +SOAR +(나) IR-02 사고 보고 +다음 표는 GSaaS에서 “사고 보고” 항목을 준수하지 않았을 때의 보안 위협과 보안 요구사항을 +나타낸다. +■ GSaaS +표 84 +IR-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 +관측 데이터 탈취 +ⓔ ‌보안 침해사고 탐지 +및 사고 대응 체계 +구축 +ⓔ ‌보안사고 +분석 +ⓔ ‌SIEM, +SOAR + +--- + + +## 제4장 우주 보안아키텍처 | 179 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +(7) 인원보안 +(가) PS-01 인원보안 +다음 표는 GSaaS에서 “인원 보안” 항목을 준수하지 않았을 때의 보안 위협과 보안 요구사항을 +나타낸다. +■ GSaaS +표 85 +PS-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +권한 남용 +지상국 운영사 내부 직원이 +안테나 제어시스템 관리자 +권한을 획득, 고의로 잘못된 +위성 위치를 추적하도록 +만들어 실제 위성과 통신 +장애 유발 +ⓑ ‌안테나 제어시스템의 +2차인증 +ⓑ 2차인증 +ⓑ MFA +(나) PS-02 보안인식 교육·훈련 +다음 표는 GSaaS에서 “보안인식 교육 훈련” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ GSaaS +표 86 +PS-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +통신 연결 장애 +위성 트랜스폰더 전원을 +차단하는 임의의 제어명령을 +위성으로 송신하여 위성과 +통신 일시 중단 및 마비 +※위성트랜스폰더전원:위성 +에탑재된신호중계장비.지상 +에서위성으로전송한신호(업 +링크)를수신하고이를증폭또 +는변환한후다시지상으로송신 +(다운링크)하는역할수행 +ⓒ ‌비상 대응 교육 및 +훈련 +ⓒ ‌비상 대응 +교육 및 +훈련 +ⓒ - + +--- + +180 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 안테나 +네트워크에 설치하여 +관리서버에 대한 공격을 통해 +위성 통신 장애 유발 +ⓓ ‌비인가 단말 설치 등 +정보 보안 주제에 +대한 정기 교육 +ⓓ 보안 교육 +ⓓ - +악성코드 +악성코드에 감염된 비인가 +USB를 관리서버에 삽입, +랜섬웨어에 감염으로 인한 +위성 제어 및 탑재체 데이터 +송수신 장애 +ⓔ ‌정보 보안 주제에 +대한 정기 교육 +ⓔ 보안 교육 +ⓔ - +IT 시스템 또는 +애플리케이션의 +오작동 +지상국 라우터 운영자가 +라우터 설정 시 잘못된 +네트워크 구성으로 지상국 +내부 네트워크 장애 +ⓒ 직무 교육 및 훈련 +ⓒ 직무 교육 +ⓒ - +장치/미디어/ +문서 손실 +지상국 임직원이 분실한 +DB분석 및 시각화 시스템 +접근이 가능한 노트북을 +획득하여 탑재체 데이터 탈취 +ⓓ ‌자산 분실 대처방안 +등 정보 보안 주제에 +대한 정기 교육 +ⓓ 보안 교육 +ⓓ - +기기/미디어/ +문서 도난 +위성 제어 및 미션 관련 +중요 데이터가 저장되어 +있는 USB를 분실 또는 +도난당하여 중요정보 노출 +ⓒ ‌이동형 저장장치 취급 +등 정보 보안 주제에 +대한 정기 교육 +ⓒ 보안 교육 +ⓒ - +용량 부족 +데이터 수신 및 처리시스템에 +과도한 데이터가 수신되어 +디스크 용량이 부족하여 +탑재체 제공 서비스 장애 +ⓒ 직무 교육 및 훈련 +ⓒ 직무 교육 +ⓒ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +외부에 공개된 궤도 +제어시스템에 취약하게 +설정된 계정/패스워드를 +Guessing 공격으로 +탈취하여 접속 후 임의의로 +궤도룰 수정하여 위성 탈취 +ⓔ ‌계정/패스워드 설정 +및 관리 등 정보 보안 +주제에 대한 정기 +교육 +ⓔ 보안 교육 +ⓔ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +백도어가 설치되어 있는 +비인가 단말을 지상국 +네트워크에 설치하여 궤도 +제어시스템에 대한 공격을 +통해 위성 제어 장애 유발 +ⓔ ‌비인가 장비 설치 등 +정보 보안 주제에 +대한 정기 교육 +ⓔ 보안 교육 +ⓔ - + +--- + + +## 제4장 우주 보안아키텍처 | 181 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +운영자가 위성 회전 명령을 +오입력하여 위성의 카메라가 +대상 지역을 벗어나 미션 +수행 실패 +ⓐ ‌위성 운영자 대상 +직무 교육 및 훈련을 +통해 휴먼에러 발생 +대비 +ⓐ 직무 교육 +ⓐ - +악성코드 +악성코드에 감염된 비인가 +USB를 업무용 단말에 +삽입 후 위성 제어시스템에 +랜섬웨어가 전파되어 위성 +제어 장애 +ⓔ ‌비인가 이동식 +저장매체 사용 등 +정보 보안 주제에 +대한 정기 교육 +ⓔ 보안 교육 +ⓔ - +악성코드 +위성 제어시스템에 +랜섬웨어를 감염시켜 위성 +제어시스템 장애로 위성 제어 +불능 +ⓒ ‌악성코드 대응 등 +정보 보안 주제에 +대한 정기 교육 +ⓒ 보안 교육 +ⓒ - +악성코드 +악성메일 등을 통해 위성 +운영사 임직원 PC에 +악성코드 감염 후 탑재체 +위성 운영사의 탑재체 데이터 +처리 및 가공 시스템과 +연동하는 지상국 데이터 +서비스 시스템에 전파되어 +탑재체 서비스 장애 +ⓓ ‌피싱 메일 등 +사회공학 관련 정보 +보안 주제에 대한 +정기 교육 및 훈련 +ⓓ 보안 교육 +ⓓ - +악성코드 +원격접속 악성코드에 +감염되어 있는 위성 운영사 +임직원 PC를 통해 원격으로 +연결되는 지상국의 미션제어 +및 운영지원 시스템 계정을 +탈취하여 탑재체 데이터 탈취 +ⓘ ‌PC보안 등 정보 보안 +주제에 대한 정기 +교육 +ⓘ 보안 교육 +ⓘ - +악성코드 +스피어 피싱, 악성메일 등을 +통해 지상국 직원 PC에 +악성코드 감염 후 내부 +네트워크에 전파하여 탑재체 +데이터 등 중요정보 암호화 +및 위성 제어 장애 +ⓔ ‌악성메일, PC보안 +등 정보 보안 주제에 +대한 정기 교육 +ⓔ 보안 교육 +ⓔ - +악성코드 +악성코드에 감염된 비인가 +USB를 탑재체 데이터 및 +위성운영 서버/단말에 +삽입하여 랜섬웨어 감염 및 +전파 +ⓔ ‌비인가 이동형 +저장매체 사용 등 +정보 보안 주제에 +대한 정기 교육 +ⓔ 보안 교육 +ⓔ - + +--- + +182 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +용량 부족 +관측요청 접수시스템 +DB용량이 부족하여 위성 +운영사에서 전송하는 요청을 +저장하지 못해 미션 수행 +장애 +ⓒ 직무 교육 및 훈련 +ⓒ 직무 교육 +ⓒ - +권한 남용 +지상국 운영사 내부 직원이 +안테나 제어시스템 관리자 +권한을 획득, 고의로 잘못된 +위성 위치를 추적하도록 +만들어 실제 위성과 통신 +장애 유발 +ⓑ ‌안테나 제어시스템의 +2차인증 +ⓑ 2차인증 +ⓑ MFA +장비 또는 +미디어 손상 +관리서버 운영자의 운영 +미숙으로 관리서버 +소프트웨어 업데이트 시 +에러가 발생하여 위성 통신 +장애 +ⓐ ‌직무 교육 및 +훈련으로 휴먼에러 +최소화 +ⓐ 직무 교육 +ⓐ - +강압, 강탈 또는 +부패 +위성 미션 및 운영 담당자가 +불법적인 금품을 받고 위성 +궤도를 임의의 조작하여 위성 +제어권 양도 +ⓐ ‌불법 행위 등 보안 +인식 개선 교육 및 +훈련 +ⓐ 보안 교육 +ⓐ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +미션제어 및 운영지원 +시스템에 취약하게 설정된 +계정/패스워드를 Guessing +공격으로 탈취하여 접속 후 +미션 및 스케줄링 데이터 +탈취 +ⓒ ‌패스워드 설정 및 +관리 등 정보 보안 +주제에 대한 정기 +교육 +ⓒ 보안 교육 +ⓒ - +직원의 안전 +관련 부정 행위 +원격접속 악성코드에 +감염되어 있는 지상국 임직원 +PC를 통해 미션제어 및 +운영지원 시스템 계정을 +탈취하여 미션 및 스케줄링 +데이터 삭제 +ⓓ ‌PC보안 등 정보 보안 +주제에 대한 정기 +교육 +ⓓ 보안 교육 +ⓓ - +강압, 강탈 또는 +부패 +탑재체 데이터 분석 담당자가 +불법적인 금품을 받고 고객의 +DB분석 및 시각화 데이터 +유출 +ⓑ ‌불법 행위 등 보안 +인식 개선 교육 및 +훈련 +ⓑ 보안 교육 +ⓑ - + +--- + + +## 제4장 우주 보안아키텍처 | 183 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +직원의 안전 +관련 부정 행위 +지상국과 위성 운영사간 VPN +계정 패스워드를 직원의 +보안인식 미흡으로 취약하게 +설정되어 공격자에게 탑재체 +데이터 탈취 당함 +ⓓ ‌계정 관리 및 +패스워드 설정 등 +정보 보안 주제에 +대한 정기 교육 +ⓓ 보안 교육 +ⓓ - +권한 남용 +비인가된 내부 임직원이 +위성제어시스템 관리자 +계정을 탈취하여 위성 제어권 +탈취 및 오동작 유발 +ⓓ ‌계정 관리 및 +패스워드 설정 등 +정보 보안 주제에 +대한 정기 교육 +ⓓ 보안 교육 +ⓓ - +기물 파손 +내부 직원이 관측요청 +접수시스템 네트워크 +케이블을 훼손하여 +통신장애로 인해 위성 +운영사에서 전송하는 +관측요청 접수 불가 +ⓐ 장애 대응 훈련 +ⓐ ‌장애 대응 +훈련 +ⓐ - +기물 파손 +내부 직원이 긴급대응 및 +위기관리 시스템 서버를 +물리적으로 파손하여 위성 +긴급상황 발생 시 대응 불가 +ⓐ 장애 대응 훈련 +ⓐ ‌장애 대응 +훈련 +ⓐ - +(8) 물리보안 +(가) PE-01 물리적 접근통제 +다음 표는 GSaaS에서 “물리적 접근통제” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ GSaaS +표 87 +PE-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 +관측 데이터 탈취 +ⓐ ‌지상국 서버실 등 +통제구역 출입 관리 +ⓐ 출입통제 +ⓐ ‌출입통제 +시스템 + +--- + +184 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 +관측 데이터 탈취 +ⓑ ‌외부업체 엔지니어 등 +방문자의 물리적인 +접근 모니터링 +ⓑ ‌CCTV +모니터링 +ⓑ CCTV +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 +관측 데이터 탈취 +ⓒ ‌지상국 시스템 +운영실의 시스템 랙 +설치 및 시건 +ⓒ ‌물리적 접근 +통제 +ⓒ ‌서버 랙 등 +시건장치 +건물 내 무단 +침입 +안테나 보호구역에 무단으로 +침입하여 안테나를 +물리적으로 훼손하여 통신 +장애 +ⓐ ‌안테나 보호구역을 +제한구역으로 +지정하고, 비인가의 +출입 통제, 출입 시 +담당자 동행, 출입증 +패용 등 출입 관리 +ⓐ 출입통제 +ⓐ ‌출입통제 +시스템 +건물 내 무단 +침입 +안테나 보호구역에 무단으로 +침입하여 안테나를 +물리적으로 훼손하여 통신 +장애 +ⓑ ‌안테나 보호구역 +방문자 접근 모니터링 +ⓑ ‌CCTV +모니터링 +ⓑ CCTV +건물 내 무단 +침입 +안테나 유지보수 엔지니어가 +타 업체가 관리하는 관리서버 +네트워크에 비인가 탭 장비를 +무단으로 부착하여 탑재체 +데이터 탈취 +ⓒ ‌안테나 보호구역을 +제한구역으로 +지정하고, 비인가의 +출입 통제, 출입 시 +담당자 동행, 출입증 +패용 등 출입 관리 +ⓒ 출입통제 +ⓒ ‌출입통제 +시스템 +건물 내 무단 +침입 +안테나 유지보수 엔지니어가 +타 업체가 관리하는 관리서버 +네트워크에 비인가 탭 장비를 +무단으로 부착하여 탑재체 +데이터 탈취 +ⓓ ‌안테나 보호구역 +방문자 접근 모니터링 +ⓓ ‌CCTV +모니터링 +ⓓ CCTV +IT 시스템에 +대한 무단 접근 +비인가자가 안테나 라우터에 +무단으로 접근하여 통신 +케이블을 훼손하여 지상국과 +통신 장애 +ⓐ ‌안테나 서버실 출입 +시 인가된 인원만 +출입이 가능하도록 +출입통제 방안 마련 +및 비인가자 출입시 +자산 보호 방안 마련 +ⓐ 출입통제 +ⓐ ‌출입통제 +시스템 +네트워크랙 + +--- + + +## 제4장 우주 보안아키텍처 | 185 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템에 +대한 무단 접근 +비인가자가 안테나 라우터에 +무단으로 접근하여 통신 +케이블을 훼손하여 지상국과 +통신 장애 +ⓑ ‌비인가자의 안테나 +서버실 출입시 탐지, +알림, 추적 등 접근 +모니터링 +ⓑ ‌CCTV +모니터링 +ⓑ CCTV +건물 내 무단 +침입 +지상국 서버룸에 +무단침입하여 데이터 수신 +및 처리시스템을 물리적으로 +훼손하여 위성 서비스 장애 +ⓐ ‌지상국 서버룸 출입 시 +인가된 인원만 출입이 +가능하도록 출입통제 +방안 마련 및 비인가자 +출입시 자산 보호 방안 +마련 +ⓐ 출입통제 +ⓐ ‌출입통제 +시스템 +네트워크랙 +건물 내 무단 +침입 +지상국 서버룸에 +무단침입하여 데이터 수신 +및 처리시스템을 물리적으로 +훼손하여 위성 서비스 장애 +ⓑ ‌비인가자의 지상국 +서버룸 출입시 탐지, +알림, 추적 등 접근 +모니터링 +ⓑ ‌CCTV +모니터링 +ⓑ CCTV +건물 내 무단 +침입 +위성 운영실에 무단으로 +침입하여 위성 제어시스템에 +접근 후 제어 설정을 +변경하여 위성 제어 장애 +ⓐ ‌지상국 위성운영실 +출입 시 인가된 인원만 +출입이 가능하도록 +출입통제 방안 마련 및 +비인가자 출입시 자산 +보호 방안 마련 +ⓐ 출입통제 +ⓐ ‌출입통제 +시스템 +네트워크랙 +건물 내 무단 +침입 +위성 운영실에 무단으로 +침입하여 위성 제어시스템에 +접근 후 제어 설정을 +변경하여 위성 제어 장애 +ⓑ ‌비인가자의 지상국 +위성운영실 출입시 +탐지, 알림, 추적 등 +접근 모니터링 +ⓑ ‌CCTV +모니터링 +ⓑ CCTV +(나) PE-02 대체 근무장소 보안 +다음 표는 우주 공급망에서 “대체 근무장소 보안” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. + +--- + +186 | 우주 보안 모델 +■ 우주 공급망 +표 88 +PE-02 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +직원의 안전 +관련 부정 행위 +위성활용 시스템 SW 개발 +담당자가 재택 근무 환경에서 +소스코드 수정 작업 중 +스피어피싱을 통해 개인 +단말이 악성코드에 감염되어 +위성체 SW 소스코드, 위성 +정보 등 중요 정보 유출 +ⓐ ‌위성SW 개발 원격 +업무 시 암호화 채널 +사용, 비대면 업무 +보안 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓐ ‌비대면 업무 +환경에 보안 +구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근제어 +(다) PE-03 보호설비 운영 +다음 표는 GSaaS에서 “보호설비 운영” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ GSaaS +표 89 +PE-03 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +정전 또는 중단 +정전으로 안테나 운영이 불가 +하여 위성 통신 장애 +ⓑ ‌안테나 설비 전력 +시스템 모니터링 +ⓑ ‌보안 +모니터링 +ⓑ - +화재 +안네나 보호 구역에 화재사 +발행하여 위성 통신 장애 +ⓐ ‌안테나 설비에 +화재 시 탐지 및 +소화시스템 등 가용성 +확보 방안 마련 +ⓐ ‌화재 탐지 +무독성가스 +소화시스템 +ⓐ ‌화재 감지 +시스템 +소화설비 +장치 및 미디어 +파괴 +안테나 라우터에 항온/항습 +관리가 미흡하여 장비가 +손상되어 안테나 지역 +네트워크 통신 장애 +ⓐ ‌안테나 관리서버의 +온도/습도로 인한 +장비 손상 방지를 +위한 항온·항습 관리 +방안 마련 +ⓐ ‌항온 항습 +관리 +ⓐ ‌항온· +항습기/ +FMS +정전 또는 중단 +정전으로 인해 지상국 상황실 +운영이 불가 하여 탑재체 +수집 및 위성 운영 장애 +ⓑ ‌지상국 설비 전력 +시스템 모니터링 +ⓑ 보안 관제 +ⓑ - + +--- + + +## 제4장 우주 보안아키텍처 | 187 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +화재 +지상국 상황실에 화재가 +발생하여 탑재체 수집 및 +위성 운영 장애 +ⓐ ‌지상국 설비에 +화재 시 탐지 및 +소화시스템 등 가용성 +확보 방안 마련 +ⓐ ‌화재 탐지 +무독성가스 +소화시스템 +ⓐ ‌화재 감지 +시스템 +소화설비 +유해한 환경적 +영향 +항온항습기 고장으로 +서버실이 과열되어 미션제어 +및 운영지원 서버 CPU +Tjmax에 도달하여 위성 운영 +장애 +ⓐ ‌지상국 서버실의 +온도/습도로 인한 +장비 손상 방지를 +위한 항온·항습 관리 +방안 마련 +ⓐ ‌항온 항습 +관리 +ⓐ ‌항온· +항습기/ +FMS +정전 또는 중단 +정전으로 인해 GSaaS 접속 +시스템 운영 불가로 위성 +서비스 제공에 차질 +ⓑ ‌위성 운영사 설비 +전력 시스템 모니터링 +ⓑ ‌보안 +모니터링 +ⓑ - +화재 +위성 운영사에 화재가 +발생하여 위성 서비스 제공에 +차질 +ⓐ ‌위성 운영사 설비에 +화재 시 탐지 및 +소화시스템 등 가용성 +확보 방안 마련 +ⓐ ‌화재 탐지 +무독성가스 +소화시스템 +ⓐ ‌화재 감지 +시스템 +소화설비 +(9) 위험 평가 및 보안평가 +(가) RA-01 위험 평가 +다음 표는 GSaaS에서 “위험 평가” 항목을 준수하지 않았을 때의 보안 위협과 보안 요구사항을 +나타낸다. +■ GSaaS +표 90 +RA-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템 또는 +애플리케이션의 +오작동 +지상국 라우터 운영자가 +라우터 설정 시 잘못된 +네트워크 구성으로 지상국 +내부 네트워크 장애 +ⓐ ‌지상국 네트워크 구조 +점검 +ⓐ ‌인프라 +취약점 점검 +ⓐ - + +--- + +188 | 우주 보안 모델 +(나) RA-02 보안 통제 모니터링 및 효과성 평가 +다음 표는 GSaaS에서 “보안 통제 모니터링 및 효과성 평가” 항목을 준수하지 않았을 때의 보안 +위협과 보안 요구사항을 나타낸다. +■ GSaaS +표 91 +RA-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템 또는 +애플리케이션의 +오작동 +지상국 라우터 운영자가 +라우터 설정 시 잘못된 +네트워크 구성으로 지상국 +내부 네트워크 장애 +ⓐ ‌지상국 네트워크 구조 +점검 +ⓐ ‌인프라 +취약점 점검 +ⓐ - +(10) 보안 거버넌스 +(가) SG-01 보안 정책 수립 +다음 표는 GSaaS에서 “보안 정책 수립” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ GSaaS +표 92 +SC-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 +관측 데이터 탈취 +ⓕ ‌우주시스템을 +보호하기 위한 우주 +보안 정책 및 지침 +수립 +ⓕ ‌보안 정책 +및 지침 +ⓕ - +(나) SG-02 보안 역할 및 책임 정의 +다음 표는 GSaaS에서 “보안 역할 및 책임 정의” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. + +--- + + +## 제4장 우주 보안아키텍처 | 189 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +■ GSaaS +표 93 +SG-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +권한 남용 +지상국 운영사 내부 직원이 +안테나 제어시스템 관리자 +권한을 획득, 고의로 잘못된 +위성 위치를 추적하도록 +만들어 실제 위성과 통신 +장애 유발 +ⓑ ‌안테나 제어시스템의 +2차인증 +ⓑ 2차인증 +ⓑ MFA +(다) SG-03 자산 관리 +다음 표는 GSaaS에서 “자산 관리” 항목을 준수하지 않았을 때의 보안 위협과 보안 요구사항을 +나타낸다. +■ GSaaS +표 94 +SG-03 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장치/미디어/ +문서 손실 +지상국 임직원이 분실한 +DB분석 및 시각화 시스템 +접근이 가능한 노트북을 +획득하여 탑재체 데이터 탈취 +ⓓ ‌자산 분실 대처방안 +등 정보 보안 주제에 +대한 정기 교육 +ⓓ 보안 교육 +ⓓ - +(라) SG-04 법적 요구사항 준수 +다음 표는 GSaaS에서 “법적 요구사항 준수” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. + +--- + +190 | 우주 보안 모델 +■ GSaaS +표 95 +SG-04 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +IT 시스템에 +대한 무단 접근 +인가되지 않은 침입자가 +데이터 수신 및 처리시스템 +랙 및 KVM콘솔에 무단으로 +접근하여 시스템에 접근하여 +관측 데이터 탈취 +ⓕ ‌우주시스템을 +보호하기 위한 우주 +보안 정책 및 지침 +수립 +ⓕ ‌보안 정책 +및 지침 +ⓕ - +(11) 비상계획 +(가) CP-01 비상계획 수립 +다음 표는 GSaaS에서 “비상계획 수립” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ GSaaS +표 96 +CP-01 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +통신 연결 장애 +위성 트랜스폰더 전원을 +차단하는 임의의 제어명령을 +위성으로 송신하여 위성과 +통신 일시 중단 및 마비 +※위성트랜스폰더전원:위성 +에탑재된신호중계장비.지상 +에서위성으로전송한신호(업 +링크)를수신하고이를증폭또 +는변환한후다시지상으로송신 +(다운링크)하는역할수행 +ⓐ ‌위성체 및 탑재체의 +전력 및 전자장비 +장애복구 대책 마련 +ⓐ ‌시스템 +이중화 +ⓐ - +서비스 거부 +DoS 공격을 통해 위성 +탑재체 제공 서비스 장애 +유발 +ⓒ ‌탑재체 데이터 서비스 +시스템 이중화로 DoS +등 자원을 고갈시키는 +공격에 대한 대응책 +마련 +ⓒ ‌시스템 +이중화 +ⓒ - + +--- + + +## 제4장 우주 보안아키텍처 | 191 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 통해 +경고 알림이 발생하지않도록 +하여 위성 긴급 상황 시 대처 +불가 +ⓐ ‌긴급 대응 및 +위기관리 시스템 +이중화로 DoS 공격 +등 자원을 고갈시키는 +공격에 대한 방안 +마련 +ⓐ ‌시스템 +이중화 +ⓐ - +(나) CP-02 백업 및 이중화 관리 +다음 표는 GSaaS에서 “백업 및 이중화 관리” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. +■ GSaaS +표 97 +CP-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +통신 연결 장애 +위성 트랜스폰더 전원을 +차단하는 임의의 제어명령을 +위성으로 송신하여 위성과 +통신 일시 중단 및 마비 +※위성트랜스폰더전원:위성 +에탑재된신호중계장비.지상 +에서위성으로전송한신호(업 +링크)를수신하고이를증폭또 +는변환한후다시지상으로송신 +(다운링크)하는역할수행 +ⓐ ‌위성체 및 탑재체의 +전력 및 전자장비 +장애복구 대책 마련 +ⓐ ‌시스템 +이중화 +ⓐ - +서비스 거부 +안테나 제어시스템 및 라우터 +취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 +지상국 네트워크 장애 +ⓓ ‌안테나가 지상국과 +동떨어진 장소에 +설치된 경우 안테나 +설비에 복수의 +ISP망 구축으로 외부 +네트워크로부터 DoS +공격에 대한 가용성 +확보 +ⓓ 회선 이중화 +ⓓ - + +--- + +192 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +안테나 제어시스템 및 라우터 +취약점을 통해 DoS공격으로 +서비스 거부 상태를 만들어 +지상국 네트워크 장애 +ⓔ ‌위성 안테나 시스템을 +대상으로 DoS공격 +발생 시 내부 설비의 +가용성 확보를 위해 +시스템을 이중화 +ⓔ ‌시스템 +이중화 +ⓔ - +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓓ ‌지상국 통신회선 구축 +시 복수의 ISP망 구축으로 +외부 네트워크로부터 +DoS 공격에 대한 +가용성 확보 +ⓓ 회선 이중화 +ⓓ - +서비스 거부 +지상국 라우터에 취약점을 +통해 DoS공격으로 서비스 +거부 상태를 만들어 지상국 +네트워크 장애 +ⓔ ‌지상국 네트워크를 +대상으로 DoS공격 발생 +시 내부 설비의 가용성 +확보를 위해 시스템을 +이중화 +ⓔ ‌시스템 +이중화 +ⓔ - +용량 부족 +데이터 수신 및 처리시스템에 +과도한 데이터가 수신되어 +디스크 용량이 부족하여 +탑재체 제공 서비스 장애 +ⓐ ‌탑재체 데이터 서비스 +시스템에 대해 이중화 +등 가용성 확보 방안 +마련 +ⓐ ‌시스템 +이중화 +ⓐ - +용량 부족 +데이터 수신 및 처리시스템에 +과도한 데이터가 수신되어 +디스크 용량이 부족하여 +탑재체 제공 서비스 장애 +ⓑ ‌위성 데이터 수신 및 +처리 시스템의 가용성 +임계치 설정 및 +모니터링 +ⓑ ‌보안 +모니터링 +ⓑ - +서비스 거부 +DoS 공격을 통해 위성 +탑재체 제공 서비스 장애 +유발 +ⓒ ‌탑재체 데이터 서비스 +시스템 이중화로 DoS +등 자원을 고갈시키는 +공격에 대한 대응책 +마련 +ⓒ ‌시스템 +이중화 +ⓒ - +용량 부족 +관측요청 접수시스템 +DB용량이 부족하여 위성 +운영사에서 전송하는 요청을 +저장하지 못해 미션 수행 장애 +ⓐ ‌탑재체 DB 이중화로 +자원 고갈 시 가용성 +확보 방안 마련 +ⓐ ‌시스템 +이중화 +ⓐ - +용량 부족 +관측요청 접수시스템 +DB용량이 부족하여 위성 +운영사에서 전송하는 요청을 +저장하지 못해 미션 수행 +장애 +ⓑ ‌탑재체 DB 저장공간 +모니터링 +ⓑ ‌보안 +모니터링 +ⓑ - + +--- + + +## 제4장 우주 보안아키텍처 | 193 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +서비스 거부 +긴급 대응 및 위기관리 +시스템에 DoS공격을 통해 +경고 알림이 발생하지않도록 +하여 위성 긴급 상황 시 대처 +불가 +ⓐ ‌긴급 대응 및 +위기관리 시스템 +이중화로 DoS 공격 +등 자원을 고갈시키는 +공격에 대한 방안 +마련 +ⓐ ‌시스템 +이중화 +ⓐ - +정전 또는 중단 +정전으로 안테나 운영이 불가 +하여 위성 통신 장애 +ⓐ ‌안테나 설비에 정전 +시 안정적 전원 +공급을 위해 공급원 +이중화 등 가용성 +확보 방안 마련 +ⓐ ‌전원 +이중화, +배터리 +ⓐ ‌UPS/비상 +발전기 +정전 또는 중단 +정전으로 인해 지상국 상황실 +운영이 불가 하여 탑재체 +수집 및 위성 운영 장애 +ⓐ ‌지상국 설비에 정전 +시 안정적 전원 +공급을 위해 공급원 +이중화 등 가용성 +확보 방안 마련 +ⓐ ‌전원 +이중화, +배터리 +ⓐ ‌UPS/비상 +발전기 +정전 또는 중단 +정전으로 인해 GSaaS 접속 +시스템 운영 불가로 위성 +서비스 제공에 차질 +ⓐ ‌위성 운영사 설비에 +정전 시 안정적 전원 +공급을 위해 공급원 +이중화 등 가용성 +확보 방안 마련 +ⓐ ‌전원 +이중화, +배터리 +ⓐ ‌UPS/비상 +발전기 +(12) 공급망 관리 +(가) SM-01 공급망 보호 +다음 표는 우주 공급망에서 “공급망 보호” 항목을 준수하지 않았을 때의 보안 위협과 보안 +요구사항을 나타낸다. + +--- + +194 | 우주 보안 모델 +■ 우주 공급망 +표 98 +SM-01 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓒ ‌위성 운영SW +개발 시 사용되는 +사용된 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓒ SBOM +ⓒ ‌SBOM +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +악의적인 우주SW개발사 +임직원이 RCE취약점이 +있는 오픈소스를 추가하고 +SBOM을 위조하여 납품, +지상국 탑재체 제어시스템에 +원격으로 접속하여 미션 +수행에 장애 유발 +ⓐ ‌위성 운영SW +개발 시 사용되는 +사용된 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓐ SBOM +ⓐ ‌SBOM +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓒ ‌위성 운영SW 개발 +시 사용되는 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓒ SBOM +ⓒ ‌SBOM +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국에서 탑재체 +제어시스템을 자체 개발 시 +RCE 취약점이 있는 오픈 +소스를 사용하여 공격자가 +원격접속 후 제어권 탈취 +ⓑ ‌위성 운영SW 개발 +시 사용되는 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓑ SBOM +ⓑ ‌SBOM +검사 도구 +(나) SM-02 인수 전 평가 +다음 표는 GSaaS와 우주 공급망에서 “인수 전 평가” 항목을 준수하지 않았을 때의 보안 위협과 +보안 요구사항을 나타낸다. + +--- + + +## 제4장 우주 보안아키텍처 | 195 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +■ GSaaS +표 99 +SM-02 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +위성 소프트웨어 취약점을 +통해 버퍼오버플로우 공격을 +시도하여 위성 제어권 탈취 +ⓐ ‌위성 소프트웨어 +탑재 전 취약점 진단 +보안성 및 신뢰도 +확보 +ⓐ ‌소프트웨어 +취약점 진단 +ⓐ ‌소스코드 +정적 분석 +소프트웨어 +취약점 또는 +오류 +위성 소프트웨어 취약점을 +통해 버퍼오버플로우 공격을 +시도하여 위성 제어권 탈취 +ⓒ ‌소프트웨어에 +포함된 오픈소스 +라이브러리에 대한 +검증 방안 마련 +ⓒ SBOM +ⓒ ‌SBOM +검증 도구 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 안테나 +제어시스템에 접근하여 +Replay 공격으로 위성 제어 +명령을 전송하여 위성 제어권 +탈취 +ⓐ ‌안테나 제어시스템 +소프트웨어 탑재 전 +취약점 진단 보안성 +및 신뢰도 확보 +ⓐ ‌소프트웨어 +취약점 진단 +ⓐ ‌소스코드 +정적 분석 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 안테나 +제어시스템에 접근하여 +Replay 공격으로 위성 제어 +명령을 전송하여 위성 제어권 +탈취 +ⓒ ‌소프트웨어에 +포함된 오픈소스 +라이브러리에 대한 +검증 방안 마련 +ⓒ SBOM +ⓒ ‌SBOM +검증 도구 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 탑재체 +데이터 서비스 시스템에 +접근하여 탑재체 데이터 탈취 +ⓑ ‌탑재체 데이터 서비스 +시스템 소프트웨어 +공급망 보안 +ⓑ SBOM +ⓑ ‌SBOM +검증 도구 +■ 우주 공급망 +표 100 +SM-02 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +위성체 제어시스템 도입 +시 테스트/디버그 계정을 +삭제하지 않아, 계정/ +패스워드를 탈취한 공격자가 +위성체 제어시스템에 +무단으로 접속하여 위성 +제어권 탈취 +ⓐ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 + +--- + +196 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +위성체 제어시스템 도입 +시 테스트/디버그 계정을 +삭제하지 않아, 계정/ +패스워드를 탈취한 공격자가 +위성체 제어시스템에 +무단으로 접속하여 위성 +제어권 탈취 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 전 침투 +테스트를 통해 취약점 +조치 후 배포 +ⓑ 침투 테스트 +ⓑ - +악성코드 +지상국 서비스 SW 개발환경 +(IDE, CI/CD)의 빌드 +파이프라인에 백도어 +모듈을 삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓑ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사, +백신을 이용한 +악성코드 검사 등을 +통해 취약점 조치 후 +배포 +ⓑ ‌정적/동적 +소스코드 +검사 +악성코드 +탐지및차단 +ⓑ ‌소스코드 +검사 도구 +백신, +클린PC +악성코드 +지상국 서비스 SW +개발환경(IDE, CI/CD)의 +빌드 파이프라인에 백도어 +모듈을 삽입하는 플러그인이 +설치되어 지상국 운영사에 +납품후 위성 제어시스템이 +C&C서버와 통신이 활성화 +되어 위성 제어권 탈취 +ⓒ ‌위성에 탑재되는 SW, +FW는 배포 전 침투 +테스트를 통해 취약점 +조치 후 배포 +ⓒ 침투 테스트 +ⓒ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +위성활용 시스템 업데이트를 +위한 Cron/Task Scheduler +등록시 내부 임직원이 +악의적으로 외부 C&C서버 +접속명령을 등록하여 +주기적으로 페이로드 데이터 +탈취 +ⓐ ‌위성에 탑재되는 SW, +FW는 배포 전 테스트 +절차에 따라 충분한 +검증 후 배포 +ⓐ ‌인프라 +취약점 점검 +ⓐ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/무단 +사용 +위성활용 시스템 업데이트를 +위한 Cron/Task Scheduler +등록시 내부 임직원이 +악의적으로 외부 C&C서버 +접속명령을 등록하여 +주기적으로 페이로드 데이터 +탈취 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 + +--- + + +## 제4장 우주 보안아키텍처 | 197 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장치 또는 +애플리케이션 +조작 +공격자가 위성제조사 +소스코드 저장소에 +침투하여 위성 궤도 및 +자세를 제어하는 상수 +변수를 조작하고, 변조된 +위성제어SW가 지상국 +운영사에 납품되면 소규모 +드리프트가 발생하여 위성 +제어 장애 유발 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓑ ‌위성 운영SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓒ ‌위성 운영SW +개발 시 사용되는 +사용된 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓒ SBOM +ⓒ ‌SBOM +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +우주SW개발사가 Zero Day +취약점이 존재하는 디바이스 +드라이버를 커널에 추가한 +상태로 납품하여 공격자가 +원격접속 취약점을 통해 +페이로드 데이터 탈취 +ⓐ ‌위성운영 인프라는 +도입 시 취약점 +점검, 침투 테스트 +등 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌취약점 점검 +침투테스트 +ⓐ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +악의적인 우주SW개발사 +임직원이 RCE취약점이 +있는 오픈소스를 추가하고 +SBOM을 위조하여 납품, +지상국 탑재체 제어시스템에 +원격으로 접속하여 미션 +수행에 장애 유발 +ⓐ ‌위성 운영SW +개발 시 사용되는 +사용된 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓐ SBOM +ⓐ ‌SBOM +검사 도구 + +--- + +198 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +의도치 않은 +정보 누설 +위성 페이로드SW 개발 시 +테스트 편의상 사용한 +MASTER_KEY(인증정보) +외부 상수 변수를 +제거하지 않고 위성에 +탑재한 후 공격자가 외부 +변수를 수집하여 위성 +페이로드SW에 직접 +접근하여 페이로드 데이터 +탈취 +ⓐ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 +악성코드 +공격자가 위성제조사 +라이브러리 저장소에 +침투하여 로직밤 악성코드를 +페이로드SW 삽입하여 위성 +궤도에 오른 후 로직밤을 +활성화 시켜 미션 수행 장애 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓐ ‌위성 운영SW는 배포 +전 테스트 절차에 +따라 충분한 보안기능 +검증 후 배포 +ⓐ ‌안전한 +소프트웨어 +배포 및 +테스트 +ⓐ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓑ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓒ ‌위성 운영SW 개발 +시 사용되는 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓒ SBOM +ⓒ ‌SBOM +검사 도구 + +--- + + +## 제4장 우주 보안아키텍처 | 199 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓒ ‌위성 운영SW는 배포 +전 침투 테스트를 +통해 취약점 조치 후 +배포 +ⓒ 침투 테스트 +ⓒ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국에서 탑재체 +제어시스템을 자체 개발 시 +RCE 취약점이 있는 오픈 +소스를 사용하여 공격자가 +원격접속 후 제어권 탈취 +ⓐ ‌위성 운영SW는 +배포 전 정적/동적 +소스코드 검사를 통해 +취약점 조치 후 배포 +ⓐ ‌정적/동적 +소스코드 +검사 +ⓐ ‌소스코드 +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국에서 탑재체 +제어시스템을 자체 개발 시 +RCE 취약점이 있는 오픈 +소스를 사용하여 공격자가 +원격접속 후 제어권 탈취 +ⓑ ‌위성 운영SW 개발 +시 사용되는 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓑ SBOM +ⓑ ‌SBOM +검사 도구 +악성코드 +RCE(Remote Code +Execution)취약점 코드를 +삽입된 비인가 모바일 코드 +패치 파일을 유지보수 +엔지니어가 인터넷에서 +다운받아 위성 제어시스템에 +설치하여 공격자가 원격으로 +위성체 제어시스템에 +접속하여 위성 제어 장애 +ⓐ ‌위성 운영 SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ ‌백신, +클린PC +악성코드 +탑재체 데이터 처리 및 가공 +시스템 패치 시 원격접속 +악성코드가 삽입된 인스톨 +파일을 사용하여 Update +후 공격자가 외부에서 +탑재체 데이터 처리 및 가공 +시스템에 접속하여 페이로드 +데이터 탈취 +ⓑ ‌위성 운영SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC + +--- + +200 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +랜섬웨어 코드가 포함되어 +있는 탑재체 데이터 처리 및 +가공시스템 업데이트 파일을 +무결성 검증을 수행하지 않고 +업데이트 하여 탑재체 데이터 +처리 및 가공 시스템이 +랜섬웨어에 감염되어 +페이로드 제공 등 위성 활용 +서비스 장애 +ⓐ ‌위성 운영SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ ‌백신, +클린PC +악성코드 +랜섬웨어 코드가 포함되어 +있는 탑재체 데이터 처리 및 +가공시스템 업데이트 파일을 +무결성 검증을 수행하지 않고 +업데이트 하여 탑재체 데이터 +처리 및 가공 시스템이 +랜섬웨어에 감염되어 +페이로드 제공 등 위성 활용 +서비스 장애 +ⓑ ‌위성 운영SW는 +유지보수 시 전송 +데이터에 대한 무결성 +검사 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓑ ‌해시, +체크썸 +ⓑ - +정보 조작 +위성운영 시 위성제어SW를 +업데이트 중 RF스푸핑 +공격을 통해 위성제어SW를 +변조하여 위성 제어 장애 +발생 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 시 전송 +데이터에 대한 무결성 +검사 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓑ ‌해시, +체크썸 +ⓑ - +(다) SM-03 출처 정보 사용 +다음 표는 GSaaS와 우주 공급망에서 “출처 정보 사용” 항목을 준수하지 않았을 때의 보안 +위협과 보안 요구사항을 나타낸다. + +--- + + +## 제4장 우주 보안아키텍처 | 201 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +■ GSaaS +표 101 +SM-03 보안 위협 및 보안 요구사항(GSaaS) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +소프트웨어 +취약점 또는 +오류 +위성 소프트웨어 취약점을 +통해 버퍼오버플로우 공격을 +시도하여 위성 제어권 탈취 +ⓒ ‌소프트웨어에 +포함된 오픈소스 +라이브러리에 대한 +검증 방안 마련 +ⓒ SBOM +ⓒ ‌SBOM +검증 도구 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 안테나 +제어시스템에 접근하여 +Replay 공격으로 위성 제어 +명령을 전송하여 위성 제어권 +탈취 +ⓒ ‌소프트웨어에 +포함된 오픈소스 +라이브러리에 대한 +검증 방안 마련 +ⓒ SBOM +ⓒ ‌SBOM +검증 도구 +소프트웨어 +취약점 또는 +오류 +공개된 취약점을 통해 탑재체 +데이터 서비스 시스템에 +접근하여 탑재체 데이터 탈취 +ⓑ ‌탑재체 데이터 서비스 +시스템 소프트웨어 +공급망 보안 +ⓑ SBOM +ⓑ ‌SBOM +검증 도구 +■ 우주 공급망 +표 102 +SM-03 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓒ ‌위성 운영SW +개발 시 사용되는 +사용된 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓒ SBOM +ⓒ ‌SBOM검사 +도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +악의적인 우주SW개발사 +임직원이 RCE취약점이 +있는 오픈소스를 추가하고 +SBOM을 위조하여 납품, +지상국 탑재체 제어시스템에 +원격으로 접속하여 미션 +수행에 장애 유발 +ⓐ ‌위성 운영SW +개발 시 사용되는 +사용된 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓐ SBOM +ⓐ ‌SBOM검사 +도구 + +--- + +202 | 우주 보안 모델 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국 운영사에서 +지상국시스템 자체 개발 시 +커널 권한 상승 취약점이 +있는 오픈 소스를 사용하여 +공격자가 원격 공격을 통해 +권한을 상승시켜 페이로드 +데이터 탈취 +ⓒ ‌위성 운영SW 개발 +시 사용되는 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓒ SBOM +ⓒ ‌SBOM검사 +도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +지상국에서 탑재체 +제어시스템을 자체 개발 시 +RCE 취약점이 있는 오픈 +소스를 사용하여 공격자가 +원격접속 후 제어권 탈취 +ⓑ ‌위성 운영SW 개발 +시 사용되는 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓑ SBOM +ⓑ ‌SBOM검사 +도구 +(라) SM-04 인수 변조/위조 방지 및 탐지 +다음 표는 우주 공급망에서 “인수 변조/위조 방지 및 탐지” 항목을 준수하지 않았을 때의 보안 +위협과 보안 요구사항을 나타낸다. +■ 우주 공급망 +표 103 +SM-04 보안 위협 및 보안 요구사항(우주 공급망) +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +악성코드 +랜섬웨어 코드가 포함되어 +있는 탑재체 데이터 처리 및 +가공시스템 업데이트 파일을 +무결성 검증을 수행하지 않고 +업데이트 하여 탑재체 데이터 +처리 및 가공 시스템이 +랜섬웨어에 감염되어 +페이로드 제공 등 위성 활용 +서비스 장애 +ⓑ ‌위성 운영SW는 +유지보수 시 전송 +데이터에 대한 무결성 +검사 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓑ ‌해시, +체크썸 +ⓑ - +정보 조작 +위성운영 시 위성제어SW를 +업데이트 중 RF스푸핑 +공격을 통해 위성제어SW를 +변조하여 위성 제어 장애 +발생 +ⓑ ‌위성에 탑재되는 SW, +FW는 배포 시 전송 +데이터에 대한 무결성 +검사 등 보안성이 +충분히 보장된 +환경에서만 수행 +ⓑ ‌해시, +체크썸 +ⓑ - + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 203 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 위협 +주요 내용 +보안 요구사항 +보안기술 +보안솔루션 +장치 또는 +애플리케이션 +조작 +공격자가 위성제조사 +소스코드 저장소에 +침투하여 위성 궤도 및 +자세를 제어하는 상수 +변수를 조작하고, 변조된 +위성제어SW가 지상국 +운영사에 납품되면 소규모 +드리프트가 발생하여 위성 +제어 장애 유발 +ⓑ ‌위성에 탑재되는 +SW, FW는 배포 전 +정적/동적 소스코드 +검사를 통해 취약점 +조치 후 배포 +ⓑ ‌정적/동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓑ ‌위성 운영SW는 배포 +전 백신 등의 도구를 +사용하여, 악성코드 +검사 후 배포 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC +악성코드 +위성활용 시스템 SW 개발 +시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓒ ‌위성 운영SW +개발 시 사용되는 +사용된 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓒ SBOM +ⓒ ‌SBOM +검사 도구 +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +우주SW개발사가 Zero Day +취약점이 존재하는 디바이스 +드라이버를 커널에 추가한 +상태로 납품하여 공격자가 +원격접속 취약점을 통해 +페이로드 데이터 탈취 +ⓐ ‌위성운영 인프라는 +도입 시 취약점 +점검, 침투 테스트 +등 충분한 보안성 +검토 후 사용 및 +정기적으로 취약점 +검토 및 조치 수행 +ⓐ ‌취약점 점검 +침투테스트 +ⓐ - +네트워크로 +연결된 IT +시스템이나 +애플리케이션의 +논리적 손상 +악의적인 우주SW개발사 +임직원이 RCE취약점이 +있는 오픈소스를 추가하고 +SBOM을 위조하여 납품, +지상국 탑재체 제어시스템에 +원격으로 접속하여 미션 +수행에 장애 유발 +ⓐ ‌위성 운영SW +개발 시 사용되는 +사용된 오픈소스 +라이브러리는 검증된 +라이브러리만 사용 +ⓐ SBOM +ⓐ ‌SBOM +검사 도구 +우주 보안 아키텍처 +활용방안 + +## 1. 우주 보안 체크리스트 점검 방법 + + +## 2. 가상 사례기반 점검 방안 + +제 5 장 + +--- + +204 | 우주 보안 모델 +본 절에서는 민간 우주산업 보안 관계자의 보안 아키텍처 이해도와 활용도를 제고하기 위하여 +가상 사례기반으로 우주 보안 체크리스트 및 우주 보안 아키텍처 활용방안을 제시한다. 앞서 +도출한 우주 보안 체크리스트를 활용하여 우주기업의 보안현황을 점검하는 방법을 우선 설명하고, +가상 우주기업 사례를 예를 들어 우주 보안 체크리스트 및 보안 아키텍처를 활용하는 방법을 +제시한다. +제1절 +우주 보안 체크리스트 점검 방법 +우주기업 보안현황에 맞는 보안대책을 수립하기 위해 우주 보안 체크리스트를 활용하여 +우주기업 보안현황을 점검한다. 먼저 우주기업의 점검 대상이 되는 자산을 식별하고 우주 +보안 체크리스트 항목별로 현황을 파악한다. 점검 결과 미흡한 항목에 대해서는 우주 보안 +아키텍처에서 제시하는 보안기술과 요구사항을 적용해야 한다. 다음표는 우주 보안 체크리스트 +점검 절차이다. + +## 제5장 + +우주 보안 아키텍처 활용방안 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 205 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +표 104 +우주보안 점검 절차 +단계 +주요 내용 +점검 대상 식별 +•‌우주기업이 보유한 우주 구성요소(발사체 시스템, 위성 본체, 탑재체, 지상국 네트워크, +운용센터 등) 식별 +•‌운영에 사용되는 자산(서버, 네트워크 장비, 응용시스템, 운영 단말기 등)도 포함해야 함 +보안점검 수행 +•‌선정된 점검 기준을 기반으로 항목별 보안 점검 수행 +•‌점검 주기는 최소 연 1회 이상으로 설정하고, 발사, 궤도 변경 등 주요 이벤트 전후로 추가 +점검 수행 +보안대책 수립 +•‌점검을 통해 도출된 취약점에 대한 보안대책 수립 +•‌우주보안 해설서를 참조하거나 우주보안 아키텍처에서 제시하는 보안 기술과 솔루션을 +적용하여 우주기업에 맞는 보안대책 수립 +가. 점검 대상 식별 +우주보안 점검을 수행하기 전에 우주기업의 점검 대상이 되는 자산을 식별해야 한다. +우주 아키텍처에 정의된 구성요소 중 우주기업에 해당하는 시스템이 어떠한 것이 있는지 +파악하고 해당 자산에서 적용하고 있는 보안 사항이 무엇인지 확인해야 한다. 즉, 서버, 네트워크 +장비, 응용시스템, 운영단말기 등 위성 및 지상국 운영에 사용되는 자산을 파악해서 목록화해야 +한다. +나. 보안 점검 수행 +앞장에서 제시한 우주 보안 체크리스트를 활용하여 우주기업의 보안점검을 수행한다. 우주 보안 +체크리스트는 총 53개 항목이지만 이중 우주기업과 관계없는 항목이 있을 경우 이를 배제하고 +점검을 수행할 수 있다. +우주 보안 점검은 다음 그림과 같이 문서 검토, 담당자 인터뷰, 현장 점검 등의 절차로 수행한다. + +--- + +206 | 우주 보안 모델 +그림 25 +점검 절차 및 주요 내용 +각 절차별로 확인하고 수행해야 하는 사항은 다음과 같다. +(1) 문서 검토 +우주 보안 체크리스트 항목에 맞는 우주보안 규정, 지침, 절차를 파악하고 항목별로 요구되는 +양식을 조사한다. 현장점검을 통해 관련 담당자들이 실제로 보안활동을 하고 있는지 확인을 하기 +위해서 관련 양식 관련 증적자료를 확보해야 한다. +예를 들어 “IA-01 식별 및 인증” 항목을 점검하고자 할 때 우주기업에서 보유하고 있는 보안 +규정/지침에서 해당 내용을 파악하고 직원들의 계정 신청, 변경, 삭제시 사용되는 절차 및 “계정 +신청/변경 요청서” 등의 양식을 확인하여야 한다. +또한, 우주기업에서 보호해야 할 자산을 식별하기 위해 자산관리대장을 확인하고 누락된 자산이 +없는지 파악해야 한다. +(2) 담당자 인터뷰 +우주 보안 체크리스트 항목별 보안현황을 진단하기 위해 관련 담당자와 인터뷰를 진행해야 +한다. 우주 보안 체크리스트 항목에 대해 관련 부서의 보안현황을 진단하고 관련부서에서 +수행하고 있는 보안활동이 우주기업 보안규정 및 지침과 부합하는지도 파악해야 한다. + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 207 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +(3) 현장 점검 +시스템/장비 설정값, 네트워크 구성, 응용시스템 계정/권한 등 기술 설정 현황을 실제 +시스템에서 확인하고 우주 보안 체크리스트 항목에 부합하는지 파악한다. 또한 비인가 장비가 +내부망에 연결되어 있거나 비인가 무선 장비가 설치된 것은 없는지 확인하고 보안솔루션 +보안정책에 의해 실제적으로 통제되고 있는지 확인한다. 물리적 보안 관점에서도 출입통제 권한을 +확인하고 소화기, 항온항습기 등 설비가 적시적소에 배치되어 있는지도 확인해야 한다. +또한, 우주기업에 운영/유지보수를 위해 외부 협력업체가 상주하거나 비상주로 업무를 +수행하는 경우 협력업체가 사용하는 장비나 계정, 사무공간도 점검 대상에 포함해야 한다. 즉, +협력업체 유지보수 단말이나 계정, 물리적 사무공간, 원격 접속 계정도 반드시 점검해야 한다. +문서검토, 담당자 인터뷰, 현장 점검 수행 후 우주 보안 체크리스트 항목별로 확인한 결과를 +정리한다. 각 항목별로 현재 수행하고 있는 보안현황(보안 프로세스, 관련 양식 등)을 기술하고 +준수되지 않은 사항을 파악하여 보안 문제점으로 도출하여 정리한다. +다. 보안대책 수립 +우주 보안 체크리스트 점검 결과 보안 문제점으로 도출된 항목에 대해 보안대책을 수립한다. +보안대책을 수립할 때는 다음과 같은 사항을 고려하여 우선순위를 결정해야 한다. +표 105 +보안대책 수립 고려사항 +고려사항 +내용 +업무 중요도 +특정 자산이나 서비스가 우주 관련 중요 업무에 해당되고 보안사고 발생시 미치는 +영향이 큰 경우, 해당 보안대책을 우선 적용 필요 +문제 발생 가능성 +도출된 보안취약점이 실제로 악용될 가능성이 높거나 과거 유사 사례가 존재하는 +경우 우선 적용 필요 (예: 공격 툴이 이미 공개된 취약점) +시스템 영향 가능성 +보안대책 적용 시 시스템 전반에 미칠 영향도 고려 필요 (예: 일부 장비의 설정 +변경이 전체 네트워크 가용성에 영향을 주는 경우, 충분한 검토와 테스트 후 적용) +실행 용이성 +단기간 내 즉시 적용 가능한 대책은 신속히 적용 +예산 및 자원 +비용과 인력 소요를 고려하여 단기, 중기, 장기 대책으로 구분하여 단계적으로 적용 + +--- + +208 | 우주 보안 모델 +제2절 +가상 사례기반 점검 방안 +가칭 ABC 기업으로 명칭을 부여하고, ABC 기업에서 우주 보안 체크리스트를 활용하여 +보안점검을 수행하고 보안대책 및 우주보안 아키텍처를 활용하는 방안을 설명한다. +가. 가상회사 ABC 기업 현황 +ABC 기업은 위성을 개발하는 회사로, GSaaS 서비스를 활용하여 안테나 및 지상국 시스템을 +예약하여 위성을 운영하고 있다. ABC기업과 관련된 우주 구성요소는 GSaaS접속시스템, +위성활용시스템, 탑재체 데이터 처리 및 가공시스템 등이 있고, 위성으로부터 받은 영상을 +고객에게 서비스하고 있다. +표 106 +위성 운영사 영역 구성요소 +구분 +구성요소 +설 명 +위성 +운영사 +GSaaS 접속 시스템 +y GSaaS에 접속하는 시스템 +위성활용 시스템 +y 위성으로부터 수집된 데이터를 수신하고, 분석 및 재처리된 위성 +데이터를 사용자에게 제공하는 시스템 +탑재체 데이터 처리 및 +가공 시스템 +y 인공위성에서 지상국으로 다운로딩한 데이터를 서비스 목적에 맞게 +재처리 및 분석하는 시스템 +나. ABC 기업 보안 아키텍처 활용 절차 +가상기업인 ABC기업을 대상으로 우주보안 점검 및 우주보안 아키텍처 활용방안을 제시한다. +보안 아키텍처 활용 절차는 다음 그림과 같다. + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 209 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +그림 26 +ABC 기업 보안 아키텍처 활용 절차 +ABC기업 보안 아키텍처 활용 절차를 단계별로 설명한다. +우주보안 점검 +step 1 + +## 제4장 우주 보안 아키텍처, 3. 우주 보안 체크리스트를 활용하여 ABC 기업의 보안 현황을 + +점검한다. ABC기업의 보안 규정 및 지침에서 해당 항목 내용을 찾고 인터뷰 대상 직원별로 +질의할 사항을 정리하여 담당자 인터뷰 및 현정점검을 수행한다. 각 항목별로 준수/미준수 여부를 +파악하고 준수되지 않은 항목을 보안 문제점으로 도출한다. +보안 요구사항 매핑 +step 2 +우주 보안 문제점이라고 분석된 점검 항목에 대응하는 보안 요구사항을 파악한다. 제4장 우주 +보안 아키텍처, 3. 우주 보안 체크리스트, 다. 우주 보안 체크리스트 항목별 보안 위협 및 보안요구 +사항을 참조하여 미준수 항목의 보안 문제점에 대한 보안 요구사항을 도출한다. +보안 아키텍처 적용 +step 3 +미준수 항목 우주 보안 요구사항의 보안 기술, 보안솔루션을 파악하여 우주보안 아키텍처에 +적용한다. + +--- + +210 | 우주 보안 모델 +다. ABC 기업 보안 아키텍처 활용 예시 +ABC기업 보안 아키텍처 활용방안을 각 단계별로 적용한다. +우주보안 점검 +step 1 +앞서 설명한 우주 보안 체크리스트’를 활용하여 ABC 기업의 보안 현황을 점검한다. +우선 ABC기업의 보안 규정 및 지침에서 해당 항목 내용을 찾고 인터뷰 대상 직원별로 질의할 +사항을 정리하여 인터뷰 일정 계획을 수립한다. 우주 보안 체크리스트 항목에서 요구하는 보안 +프로세스를 확인하고 담당자들이 이를 준수하는지 파악하기 위해 보안활동을 수행했음을 알 수 +있는 증적자료를 점검한다. 기술적 점검 항목에 대한 점검을 위해 각 인프라 장비 및 시스템에 +접속하여 보안설정 및 정책을 확인한다. 물리적 점검 항목에 대해서는 출입통제 권한을 직접 +확인하여 준수여부를 점검하고 서버실내 소화기, 항온항습기, CCTV 설치 등을 점검한다. +ABC 기업의 보안 점검 결과 다음 7개 항목이 미준수인 것으로 가정한다. +표 107 +ABC기업의 미준수 항목 +우주보안 항목 +항목 설명 +AC-08 +원격 접근통제 +y 승인된 업무 및 사용자에 대해서만 원격접속을 허용하고 원격접속 +세션을 암호화 및 모니터링해야 한다. +IA-01 +식별 및 인증 +y 시스템 사용자, 프로세스 및 장치를 식별하고 인증해야 한다. +IA-02 +다중 인증 +y 특수권한 계정으로 네트워크에 접속할 경우에는 다중 인증을 사용하고 +재전송 공격 방지 인증 메커니즘을 적용해야 한다. +SC-03 +저장 및 전송 정보 보안 +y 저장 및 전송되는 정보의 기밀성 및 무결성을 보호해야 한다. +SI-02 +악성코드 방지 +y 악성코드 식별 및 제거를 위해 시스템에 악성코드 방지 솔루션을 +설치하고 파일 다운로드시 실시간으로 검사해야 한다. +PE-03 +보호설비 운영 +y 보호구역에 위치한 정보시스템의 중요도 및 특성에 따라 온도·습도 +조절, 화재감지, 소화설비, 누수감지, UPS, 비상발전기, 이중전원선 등의 +보호설비를 갖추고 운영절차를 수립·운영하여야 한다. +SM-02 +인수 전 평가 +y 시스템/구성요소/서비스의 선정/인수/ 업데이트 전에 보안취약점 점검 +및 조치하고 인수 테스트를 통해 구성요소의 위조를 검사해야 한다 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 211 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 요구사항 매핑 +step 2 +미준수 보안항목에 매핑되는 보안 요구사항을 파악한다. ‘제4장 우주 보안 아키텍처, 3. +우주 보안 체크리스트, 다. 우주 보안 체크리스트 항목별 보안 위협 및 보안 요구사항’의 내용을 +참조하여 미준수 점검항목에 대한 보안 요구사항을 도출한다. +다음표는 위성 운영사인 ABC 기업의 7개 미준수 항목과 대응하는 보안 요구사항을 매핑한다. +위성 운영사에 해당하는 보안 위협에 대한 보안 요구사항만 도출하였으며, GSaaS 와 우주 +공급망을 구분하여 정리하였다. +표 108 +ABC기업의 GSaaS 보안 요구사항 +점검항목 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +정보 조작 +유출된 클라우드 접속 VPN +계정을 통해 클라우드의 예약 +및 스케줄링 시스템에 접속하여 +안테나 예약 정보 조작 +ⓑ ‌GSaaS 클라우드 +접속 가상 +사설망(SSL) 계정 +탈취 탐지 +ⓑ ‌외부 +노출된 +자산 및 +계정 관리 +ⓑ ASM +IA-01 +식별 및 +인증 +메시지 +가져오기 +위성 운영사 및 클라우드 간 +스니핑을 통해 IAM키를 탈취하여 +클라우드 버킷을 모두 삭제하여 +안테나 예약 및 스케줄링 서비스 +불가 +ⓒ ‌정기적인 사용자 +계정 및 권한 +감사를 수행하여 +데이터 접근 +권한에 대한 +적절성 검토 및 +조치 +ⓒ - +ⓒ - +소프트웨어 +취약점 +또는 오류 +GSaaS 접속 시스템 초기 +구축 시 발급된 디폴트 관리자 +계정/패스워드를 통해 공격자가 +외부에서 접속하여 위성 제어권 +및 중요정보 탈취 +ⓐ ‌GSaaS 접속 +시스템 계정 및 +패스워드 관리 +ⓐ ‌계정 및 +패스워드 +관리 +ⓐ ‌계정관리 +및 서버 +접근제어 +직원의 +안전 관련 +부정 행위 +지상국과 위성 운영사간 VPN +계정 패스워드를 직원의 보안인식 +미흡으로 취약하게 설정되어 +공격자에게 탑재체 데이터 탈취 +당함 +ⓐ ‌VPN사용자 계정 +및 권한 점검 +ⓐ - +ⓐ ‌계정관리 +및 서버 +접근제어 + +--- + +212 | 우주 보안 모델 +점검항목 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +IA-02 +다중인증 +메시지 +가져오기 +위성 운영사 및 클라우드 간 +스니핑을 통해 IAM키를 탈취하여 +클라우드 버킷을 모두 삭제하여 +안테나 예약 및 스케줄링 서비스 +불가 +ⓑ ‌GSaaS 사용자 +인증 시(IAM) +접속 시 복수의 +인증 방안 마련 +ⓑ 2차인증 +ⓑ MFA +메시지 +가져오기 +스니핑 공격으로 지상국과 위성 +운영사 통신 패킷을 도청하여 +탑재체 데이터 탈취 +ⓑ ‌외부에서 가상 +사설망(SSL)을 +통해 지상국 접속 +시 복수의 인증 +방안 마련 +ⓑ 2차인증 +ⓑ MFA +메시지 +가져오기 +위성 운영사에서 지상국으로 +탑재체 데이터 요청 시 +MITM공격을 통해 변조된 탑재체 +데이터 전송 +ⓑ ‌외부에서 가상 +사설망(SSL)을 +통해 지상국 접속 +시 복수의 인증 +방안 마련 +ⓑ 2차인증 +ⓑ MFA +소프트웨어 +취약점 +또는 오류 +GSaaS 접속 시스템 초기 +구축 시 발급된 디폴트 관리자 +계정/패스워드를 통해 공격자가 +외부에서 접속하여 위성 제어권 +및 중요정보 탈취 +ⓑ ‌GSaaS 접속 +시스템의 2차인증 +ⓑ 2차인증 +ⓑ MFA +메시지 +가져오기 +위성 운영사 및 클라우드 간 +스니핑을 통해 IAM키를 탈취하여 +클라우드 버킷을 모두 삭제하여 +안테나 예약 및 스케줄링 서비스 +불가 +ⓐ ‌위성 운영사와 +클라우드 통신 시 +데이터 암호화 +ⓐ HTTPS +ⓐ - +SC-03 +저장 및 +전송 +정보 +보안 +정보 조작 +위성 운영사에서 클라우드로 +보내는 예약 및 스케줄링 +데이터를 변조하여 위성 사용 +장애 +ⓐ ‌위성 운영사와 +클라우드 통신 시 +데이터 암호화 +ⓐ HTTPS +ⓐ - +정보 조작 +위성 운영사에서 클라우드로 +보내는 예약 및 스케줄링 +데이터를 변조하여 위성 사용 +장애 +ⓑ ‌전송 데이터에 +대한 무결성 검사 +ⓑ ‌해시, +체크썸 +ⓑ - +메시지 +가져오기 +스니핑 공격으로 지상국과 위성 +운영사 통신 패킷을 도청하여 +탑재체 데이터 탈취 +ⓐ ‌지상국과 위성 +운영사 통신 시 +데이터 암호화 +ⓐ ‌HTTPS, +SFTP +ⓐ - + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 213 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +점검항목 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +메시지 +가져오기 +위성 운영사에서 지상국으로 +탑재체 데이터 요청 시 +MITM공격을 통해 변조된 탑재체 +데이터 전송 +ⓐ ‌지상국과 위성 +운영사 통신 시 +데이터 암호화 +ⓐ ‌HTTPS, +SFTP +ⓐ - +메시지 +가져오기 +위성 운영사에서 지상국으로 +탑재체 데이터 요청 시 +MITM공격을 통해 변조된 탑재체 +데이터 전송 +ⓒ ‌전송 데이터에 +대한 무결성 검사 +ⓒ ‌해시, +체크썸 +ⓒ - +SC-03 +저장 및 +전송 +정보 +보안 +장치 또는 +애플리케이션 +조작 +위성 운영사에 미션 명령을 +지상국으로 전송 시 중간자 +공격을 통해 관측 요청에 변조된 +Calibration 플래그를 삽입하여 +촬영 대신 셔터OFF 명령을 +전송하여 미션 실패 +ⓐ ‌지상국과 위성 +운영사 통신 시 +데이터 암호화 +ⓐ ‌HTTPS +ⓐ - +장치 또는 +애플리케이션 +조작 +위성 운영사에 미션 명령을 +지상국으로 전송 시 중간자 +공격을 통해 관측 요청에 변조된 +Calibration 플래그를 삽입하여 +촬영 대신 셔터OFF 명령을 +전송하여 미션 실패 +ⓒ ‌전송 데이터에 +대한 무결성 검사 +ⓒ ‌해시, +체크썸 +ⓒ - +악성코드 +악성코드에 감염된 비인가 +USB를 관리서버에 삽입, +랜섬웨어에 감염으로 인한 위성 +제어 및 탑재체 데이터 송수신 +장애 +ⓑ 단말 보안 강화 +ⓑ ‌악성코드 +탐지 및 +차단 +ⓑ 백신 +SI-02 +악성코드 +방지 +악성코드 +악성메일 등을 통해 위성 운영사 +임직원 PC에 악성코드 감염 후 +탑재체 위성 운영사의 탐제체 +데이터 처리 및 가공 시스템과 +연동하는 지상국 데이터 서비스 +시스템에 전파되어 탑재체 서비스 +장애 +ⓐ ‌악성코드 탐지 및 +차단 +ⓐ ‌악성코드 +탐지 및 +차단 +ⓐ 백신 + +--- + +214 | 우주 보안 모델 +점검항목 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +SI-02 +악성코드 +방지 +악성코드 +악성메일 등을 통해 위성 운영사 +임직원 PC에 악성코드 감염 후 +탑재체 위성 운영사의 탐제체 +데이터 처리 및 가공 시스템과 +연동하는 지상국 데이터 서비스 +시스템에 전파되어 탑재체 서비스 +장애 +ⓑ ‌테스트 및 승인된 +소프트웨어만 설치 +허용 +ⓑ ‌화이트 +리스트 +백신 +ⓑ ‌화이트 +리스트 +백신 +PE-03 +보호설비 +운영 +정전 또는 +중단 +정전으로 인해 GSaaS 접속 +시스템 운영 불가로 위성 서비스 +제공에 차질 +ⓑ ‌위성 운영사 설비 +전력 시스템 +모니터링 +ⓑ - +ⓑ - +화재 +위성 운영사에 화재가 발생하여 +위성 서비스 제공에 차질 +ⓐ ‌위성 운영사 설비에 +화재 시 탐지 및 +소화시스템 등 +가용성 확보 방안 +마련 +ⓐ ‌화재 탐지 +무독성가스 +소화시스템 +ⓐ ‌화재 감지 +시스템 +소화설비 +표 109 +ABC기업의 우주 공급망 보안 요구사항 +점검항목 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +AC-08 +원격 +접근 +통제 +직원의 안전 +관련 부정 +행위 +위성활용 시스템 SW 개발 +담당자가 재택 근무 환경에서 +소스코드 수정 작업 중 +스피어피싱을 통해 개인 +단말이 악성코드에 감염되어 +위성체 SW 소스코드, 위성 +정보 등 중요 정보 유출 +ⓐ ‌위성SW 개발 +원격 업무 시 +암호화 채널 +사용, 비대면 +업무 보안 +등 보안성이 +충분히 보장된 +환경에서만 +수행 +ⓐ ‌비대면 +업무 +환경에 +보안 +구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근 +제어 +원격 정탐, +도청 +탑재체 데이터 처리 및 가공 +시스템 원격유지보수시 +암호화된 터털링에 사용되는 +사설CA(Certificate +Authority) 키값을 탈취하여 +스니핑을 통해 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 +시스템 원격 +유지보수 시 +암호화 채널 +사용, 비대면 +업무 보안 +등 보안성이 +충분히 보장된 +환경에서만 +수행 +ⓐ ‌비대면 +유지보수 +업무 +환경에 +보안 +구축 +ⓐ ‌VPN +EPS +원격보안 +솔루션 +IPS/IDS +MFA +서버접근 +제어 + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 215 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +점검항목 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +IA-01 +식별 및 +인증 +IA-02 +다중인증 +권한 남용 +위성활용 시스템 업데이트 +시 임시로 root권한을 부여한 +유지보수 계정을 비활성화 +하지 않아 해당 계정/ +패스워드를 획득한 공격자가 +위성활용 시스템에 접근하여 +페이로드 데이터 탈취 +ⓐ ‌위성 운영 +시스템은 인증 +및 권한관리를 +통해 보안성을 +보장해야 하며 +정기적으로 +계정 및 권한에 +대한 타당성 +검토 및 조치 +수행 +ⓐ ‌운영 +서버에 +대한 +2차인증 +및 권한 +관리 +ⓐ ‌MFA +서버접근 +제어 +SC- +03 저장 +및 전송 +정보 +보안 +악성코드 +랜섬웨어 코드가 포함되어 +있는 탑재체 데이터 처리 및 +가공시스템 업데이트 파일을 +무결성 검증을 수행하지 않고 +업데이트 하여 탑재체 데이터 +처리 및 가공 시스템이 +랜섬웨어에 감염되어 +페이로드 제공 등 위성 활용 +서비스 장애 +ⓑ ‌위성 운영SW는 +유지보수 시 +전송 데이터에 +대한 무결성 +검사 등 +보안성이 +충분히 보장된 +환경에서만 +수행 +ⓑ ‌해시, +체크썸 +ⓑ - +SI-02 +악성코드 +방지 +악성코드 +탑재체 데이터 처리 및 가공 +시스템 패치시 원격접속 +악성코드가 삽입된 인스톨 +파일을 사용하여 Update +후 공격자가 외부에서 +탑재체 데이터 처리 및 가공 +시스템에 접속하여 페이로드 +데이터 탈취 +ⓐ ‌위성 운영 +SW는 배포 +전 백신 +등의 도구를 +사용하여, +악성코드 검사 +후 배포 +ⓐ ‌악성 +코드 +탐지 및 +차단 +ⓐ ‌백신, +클린PC +악성코드 +랜섬웨어 코드가 포함되어 +있는 탑재체 데이터 처리 및 +가공시스템 업데이트 파일을 +무결성 검증을 수행하지 않고 +업데이트 하여 탑재체 데이터 +처리 및 가공 시스템이 +랜섬웨어에 감염되어 +페이로드 제공 등 위성 활용 +서비스 장애 +ⓐ ‌위성 운영SW는 +배포 전 백신 +등의 도구를 +사용하여, +악성코드 검사 +후 배포 +ⓐ ‌악성 +코드 +탐지 및 +차단 +ⓐ ‌백신, +클린PC + +--- + +216 | 우주 보안 모델 +점검항목 +보안 위협 +보안 요구사항 +보안기술 +보안솔루션 +SM-02 +인수 전 +평가 +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/ +무단 사용 +위성활용 시스템 업데이트를 +위한 Cron/Task Scheduler +등록시 내부 임직원이 +악의적으로 외부 C&C서버 +접속명령을 등록하여 +주기적으로 페이로드 데이터 +탈취 +ⓐ ‌위성에 탑재되는 +SW, FW는 +배포 전 테스트 +절차에 따라 +충분한 검증 후 +배포 +ⓐ - +ⓐ - +IT 시스템, +애플리케이션, +정보에 대한 +무단 접근/ +무단 사용 +위성활용 시스템 업데이트를 +위한 Cron/Task Scheduler +등록시 내부 임직원이 +악의적으로 외부 C&C서버 +접속명령을 등록하여 +주기적으로 페이로드 데이터 +탈취 +ⓑ ‌위성에 탑재되는 +SW, FW는 +배포 전 정적/ +동적 소스코드 +검사를 통해 +취약점 조치 후 +배포 +ⓑ ‌정적/ +동적 +소스코드 +검사 +ⓑ ‌소스코드 +검사 도구 +악성코드 +위성활용 시스템 SW +개발시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓑ ‌위성 운영SW는 +배포 전 백신 +등의 도구를 +사용하여, +악성코드 검사 +후 배포 +ⓑ ‌악성 +코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC +악성코드 +위성활용 시스템 SW +개발시 악성코드가 삽입된 +오픈소스를 공개 저장소를 +통해 자동으로 빌드하여 +위성활용 시스템에 랜섬웨어 +감염 +ⓒ ‌위성 운영SW +개발 시 +사용되는 사용된 +오픈소스 +라이브러리는 +검증된 +라이브러리만 +사용 +ⓒ SBOM +ⓒ ‌SBOM +검사 도구 +악성코드 +탑재체 데이터 처리 및 가공 +시스템 패치시 원격접속 +악성코드가 삽입된 인스톨 +파일을 사용하여 Update +후 공격자가 외부에서 +탑재체 데이터 처리 및 가공 +시스템에 접속하여 페이로드 +데이터 탈취 +ⓑ ‌위성 운영SW는 +배포 전 백신 +등의 도구를 +사용하여, +악성코드 검사 +후 배포 +ⓑ ‌악성 +코드 +탐지 및 +차단 +ⓑ ‌백신, +클린PC + +--- + + +## 제5장 우주 보안아키텍처 활용방안 | 217 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +제 +5 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +우 +주 +보 +안 +아 +키 +텍 +처 +활 +용 +방 +안 +보안 아키텍처 적용 +step 3 +미준수 점검 항목에 대한 우주 보안 요구사항의 보안 기술, 보안솔루션을 파악하여 우주보안 +아키텍처에 적용한다. +보안 요구사항 매핑을 통해 ABC 기업의 보안 위협에 대응하기 위한 보안기술과 보안솔루션을 +보안 아키텍처에 적용하면 다음 그림과 같다. 아래 그림에서 붉은색 음영 표시된 보안솔루션은 +도출된 보안문제점을 해결하기 위해 권고되는 보안대책이다 +그림 27 +ABC기업 GSaaS 보안 아키텍처 활용 예시 + +--- + +218 | 우주 보안 모델 +그림 28 +ABC 기업 우주 공급망 보안 아키텍처 활용 예시 + +--- + +부 록 | 219 +■ 용어 +⊙ ‌공급망(supply chain) : 원재료의 조달에서부터 완제품의 최종 소비에 이르기까지, 재화와 +서비스 및 정보의 흐름이 이루어지는 연결망 +⊙ ‌공격 벡터 (attack vector) : 공격자가 컴퓨터나 네트워크에 침입하기 위해 사용하는 진입 +경로와 방법 +⊙ ‌보안 아키텍처 : 시스템의 사용자 요구, 서비스 구현에 필요한 시스템 요소 및 위협 환경을 +다루는 요소에 필요한 성능 수준을 충족시키기 위해 시스템이 제공해야 하는 보안 서비스를 +설명하는 계획과 일련의 원칙 +⊙ ‌사이버보안 프레임워크(CSF) : 사이버보안 관련 위험을 관리하기 위한 표준, 지침, 모범 +사례로 구성된 프레임워크 +⊙ ‌서비스 거부 : 시스템 리소스에 대한 허가된 액세스의 방지 또는 중단 또는 시스템 동작 및 +기능의 지연 +⊙ ‌세션 하이재킹 : 다른 사람의 세션 상태를 훔치거나 도용하여 액세스하는 해킹 기법 +⊙ ‌스니핑 : 메시지 내용의 캡처 및 공개 또는 메시지 수신지 또는 발신지, 전송 빈도 또는 길이 +및 기타 통신 속성에 기반한 통신 시스템의 기밀성을 손상시키는 트래픽 분석 +⊙ ‌스마트선박 : 정보통신기술(ICT)을 기반으로 하는 선박으로, 조선 기술에 최첨단 정보 기술을 +접목하여 자율 운항은 물론 안전 운항을 할 수 있는 차세대 디지털 선박 +부록 +용어 및 약어 + +--- + +220 | 우주 보안 모델 +⊙ ‌스푸핑 : 공격자가 네트워크, 웹사이트 등의 데이터 위변조를 통해 정상 시스템인 것처럼 +위장하여 일반 사용자를 속이는 해킹 기법 +⊙ ‌악성코드 : 시스템 또는 사용자에 대한 정보 수집, 시스템 데이터 파괴, 시스템 침입을 위한 +발판 마련, 시스템 데이터 및 보고서 위조, 시스템 운영 및 유지 보수 담당자에게 시간을 +낭비하는 목적으로 작성된 프로그램 또는 코드 +⊙ ‌위성 항법 시스템 : 3~4개 이상의 위성으로부터 전송되는 위성 데이터와 전파를 지상과 +양방향 통신으로 송신하여 지구상의 사용자에게 위치정보를 제공하는 시스템 +⊙ ‌위협 : 보안을 위반하여 해를 입힐 수 있는 상황, 능력, 행동 또는 이벤트가 있을 때 존재하는 +보안 위반 가능성 +⊙ ‌재밍 : 레이더 신호를 감추기 위해 또는 변형시키기 위해 레이더의 수신 대역 내의 주파수로 +송신되는 방해 신호 +⊙ ‌중간자 공격 : 통신하고 있는 두 당사자 사이에 끼어들어 당사자들이 교환하는 공개정보를 +자기 것과 바꾸어버림으로써 들키지 않고 도청을 하거나 통신내용을 바꾸는 수법 +⊙ ‌탑재체(Payload) : 위성의 내부에 위치해 있으면서 부여된 임무를 실제적으로 수행하는 +위성의 한 부분 +⊙ ‌프로토콜 : 시스템들 간의 어떤 종류의 연관성(예를 들어, 통신)을 구현하고 제어하기 위한 +일련의 규약들(즉, 포맷들 및 절차들) +⊙ ‌GSaaS : 위성통신에 요구되는 안테나와 지상국 인프라를 빌려서 사용하는 서비스 +⊙ ‌NAC : 네트워크 상태를 더욱 명확하게 파악하고 위험을 줄이기 위해 네트워크에 액세스하는 +디바이스에 정책을 적용하는 보안 솔루션 +⊙ ‌SBOM : SW 구축에 사용되는 다양한 구성요소의 세부 사항과 공급망 관계를 포함하는 +공식적인 기록 + +--- + +10능 +GSaas +Ground +Station +as +Service +O NIST +CSF +National +Institute +Standards +and +Technology +Cyber +Security +Frameworks +9 +GNSS +Global +Navigation +Satellite +System +6 +GPS +Global +Positioning +System +2 +OBC +On +Board +Computer +O KVM +Kernal +based +Virtual +machine +이 IDEIntegrated +evelopment +Environment +O HTTPSHypertext +Transfer +Protocol +Secure +있 +SFTPSecure +File +Transfer +Protocol +NAC +Network +Access +Control +6 +TCP/IP +Transmission +Control +Protocol/Internet +Protocol +O VPN +Virtual +Private +Network +o Wi-Fi: +:Wireless +Fidelity +2 +SBOM +Software +Bill +of Materials +o Dos +Denial +이f +Service +O MFA : Multi-- +Factor +Authentication +6 +중간자 +Attack +: Man-In-The +--Middle +Attack +이 IDs +Intrusion +Detectior +System +OIPs +Intrusion +Preventior +System +OUPS +: Uninterruptible +Power +Supply +O FMS: +Facility +Management +System +O WAF: +Web +Application +Firewall +부록 +|221 + +--- + +O DLP +Data +Loss +Prevention +2 +DRM +Digital +Rights +Management +o WIPS +Wireless +Intrusion +Prevention +System +OPMS +Patch +Management +System +O Volp +Voice +Over +nternet +Protocol +CMMC +Cybersecurity +Maturity +Model +Certification +OK-RMF +Korea +Risk +Management +Framework +ONIS +Network +and +Informatior +Security +ISMS +Information +Security +Management +System +222 +|우주보안모델 + +--- + +우주 보안모델 +인 쇄 | 2025 년 12 월 +발 행 | 2025 년 12 월 +발행처 | 한국인터넷진흥원 +(58324) 전라남도 나주시 진흥길 9 \ No newline at end of file diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part2_\354\232\224\354\225\275\353\263\270.md" "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part2_\354\232\224\354\225\275\353\263\270.md" new file mode 100644 index 0000000..8c5c880 --- /dev/null +++ "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_Part2_\354\232\224\354\225\275\353\263\270.md" @@ -0,0 +1,1278 @@ +# 우주 보안모델 Part2 요약본.pdf + +> Converted: 2026-04-02 01:23 +> OCR Engine: PaddleOCR (Korean + GPU) + + +--- + +2025 +12 +우주 +페모 +Part +|I +GSaaS +및 +공급망 +0oo0 +과학기술정보통신부 +한국인터넷진흥원 +KISA +Ministry of Science and ICT + +--- + +2 | 우주 보안 모델 +21세기 이후 우주는 단순한 탐사의 대상이 아닌 경제적, 전략적 자산으로 인식되고 있다. +이른바 “뉴스페이스 시대”라 불리는 최근에는 우주산업이 국가 주도에서 민간 중심으로 빠르게 +전환되고 있는데, 소형위성, 상업용 발사체, 위성 데이터 서비스의 활성화 등으로 우주 생태계가 +다변화되고 있는 상황이다. 즉, 소형위성을 대량으로 생산할 수 있게 되었고 위성을 우주로 보내는 +위성 발사 비용이 급격히 감소하였으며 저궤도 위성 서비스의 확산으로 위성 데이터 전송량이 +폭증함에 따라 우주 산업이 활기를 띄게 되었다. +이에 따라, 적은 자본으로 지상국 운영의 효율성을 극대화할 수 있는 GSaaS(Ground Station +as a Service) 산업이 빠르게 성장하고 있다. GSaaS는 우주기업이 자체 지상국 및 안테나를 +가지고 있지 않더라도 인공위성 통신 및 데이터 서비스를 할 수 있도록 공유 인프라를 제공하는 +서비스이다. 소형위성을 보유한 스타트업 기업이 GSaaS 서비스를 이용하면, 위성과 통신하는데 +필요한 안테나나 지상국 인프라를 빌려 쓰는 형태로 얼마든지 위성 관련 사업을 할 수 있게 되었다. +GSaaS의 폭발적 성장으로 통신, 방송, 물류, 금융, 해양, 기상 등 다양한 산업에서 위성 데이터와 +서비스 활용도가 높아짐에 따라, 기업 경쟁력과 사용자 신뢰성을 유지하기 위해 우주보안의 +필요성이 대두되었다. 우주 인프라에 대한 사이버 공격이나 재밍 등은 단 한 번의 사고로도 막대한 +경제적, 사회적 손실을 초래할 수 있기 때문이다. +또한, 우주 산업에 참여하는 공급업체와 파트너가 매우 다양하여 위성 및 지상국 인프라에 +대해 다양한 보안 위협이 발생할 수 있다. 즉, 위성 설계/개발, 준비/조립, 발사, 운영, 폐기에 +이르는 위성 생애주기 전 과정이 공급망 체계로 구성되어 있으며, 각 단계에서 부품/소프트웨어 + +## 제1장 + +개요 +제1절 +배경 + +--- + + +## 제1장 개 요 | 3 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +위변조, 정보 유출, 사이버 공격 등의 많은 보안 위협이 현실화되고 있는 실정이다. 이는 우주 +자산이 고가치로 평가되어 사이버보안 위협 목표가 되기에 충분하기 때문이며 국내 기업의 경쟁력 +확보를 위해 우주 공급망 보안도 중요한 요소로 부각되고 있다. 따라서 우주기업은 단위 시스템을 +보호하는 수준을 넘어, 위성, 지상국, 사용자 영역의 우주 환경 전반과 우주 공급망 전 단계에서 +우주보안 체계를 구축해야 한다. +이에, 본 문서는 GSaaS 산업의 폭풍 성장과 다양한 공급망 체계를 고려하여 GSaaS 및 +우주 공급망에 대한 보안 위협을 식별하고, 식별된 보안 위협에 대응하기 위한 보안 요구사항, +보안기술, 보안솔루션 등 보안강화 방안을 제시하여, 우주기업 보안담당자가 우주보안 강화 대책 +수립시에 참고하고 활용할 수 있도록 지원하는 것을 목적으로 한다. + +--- + +4 | 우주 보안 모델 +우주 아키텍처는 우주 영역, 지상국 영역, 위성 활용 서비스 영역으로 구성된다. +우주 아키텍처는 고도 범위에 따라 다양한 위성이 위치한 우주 영역과 위성으로부터 페이로드 +데이터(payload data)를 송수신하고, 위성을 제어하기 위한 시스템으로 구성된 지상국 영역, +그리고 위성에 기반한 서비스를 제공하는 위성 활용 서비스 영역으로 구분된다. + +## 제2장 + +우주 아키텍처 +그림 1 +우주 아키텍처 + +--- + + +## 제2장 우주 아키텍처 | 5 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +■ 우주 영역 +우주 영역은 우주 공간에 위치하는 자산으로 구성되며, 대표적인 자산으로 인공위성(이하 +‘위성’이라 함)이 있다. 위성은 위성의 전반적인 구동을 수행하는 본체와 위성의 임무를 수행하는 +탑재체로 구분된다. 본체에는 열제어 시스템, 전력공급 시스템, 위성제어 시스템, 궤도제어 +시스템, 위성내부 버스, 명령 및 데이터처리시스템, 통신시스템 등이 있다. 탑재체는 위성 본체에 +탑재되어 위성에 부여된 임무를 수행하게 되는데, 탑재체의 임무에 따라 위성의 역할이 결정되며 +페이로드, 페이로드 데이터처리시스템 및 통신시스템으로 구성된다. +■ ‌지상국 영역 +지상국은 우주에 있는 위성과 교신하여 위성의 궤도와 상태를 제어하고 데이터를 주고받기 위한 +설비이다. 지상국 영역은 위성을 운영 및 제어하기 위한 위성운영 영역과 페이로드에서 데이터를 +수신하고 수신한 데이터를 서비스하기 위한 페이로드 데이터 이용 영역으로 구분된다. +위성운영 영역에는 위성상태 모니터링 시스템, 궤도제어시스템, 미션제어 및 운영지원 시스템, +위성제어 시스템, 긴급대응 및 위기관리 시스템 등이 있고, 페이로드 데이터 이용 영역에는 데이터 +수신 및 처리 시스템, DB 분석 및 시각화 시스템, 페이로드 데이터 서비스 시스템, 실험계획 및 +제어시스템, 관측요청 접수 시스템 등이 있다. +■ ‌위성 활용 서비스 영역 +위성 활용 서비스는 위성에서 수집한 데이터와 신호를 지상에서 활용하여 통신, 위치 등 일상과 +산업에 적용하는 서비스이다. 위성 활용 서비스에는 위치정보를 제공해 주는 위성항법 서비스와 +통신 및 방송을 중계해주는 위성방송통신 서비스로 구분된다. 위성항법서비스는 위성으로부터 +위치정보를 수신하여 지상교통 및 항공교통에서의 차량 운행에 사용되는 서비스이고, +위성통신서비스는 위성안테나와 통신위성의 서비스를 활용하여 지상의 인터넷 서비스를 사용할 +수 있도록 지원해 주는 서비스이며, 위성방송서비스는 지상 방송국의 방송서비스를 위성을 +활용하여 중계하는 방송 서비스이다. +본 보고서에서는 우주보안모델(GSaaS, 우주 공급망)에서 제시한 GSaaS 아키텍처와 우주 +공급망 아키텍처를 소개한다. + +--- + +6 | 우주 보안 모델 +제1절 +GSaaS 아키텍처 +GSaaS1는 위성과 통신하고 제어하는 지상국 기능을 클라우드를 활용하여 제공하는 서비스로, +위성과 통신하는 안테나 영역과 위성 서비스를 위한 데이터 처리를 수행하는 지상국 영역, 위성 +서비스를 제공하는 위성 운영사 영역이 있다. +안테나를 통해 위성과 신호를 송수신하며, 지상국은 원활한 통신을 위해 위성의 상태를 +모니터링하고 제어한다. 클라우드 환경에서는 데이터의 저장과 서비스 운영을 지원하고, 위성과의 +통신을 위한 안테나 예약 기능을 제공한다. 위성 운영사는 GSaaS에 접속하여 수집된 데이터를 +분석 및 가공하고, 처리된 데이터를 활용하여 사용자에게 다양한 위성 서비스를 제공한다. +1 ‌GSaaS : Ground Station as a Service +그림 2 +GSaaS 아키텍처 + +--- + + +## 제2장 우주 아키텍처 | 7 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +제2절 +우주 공급망 아키텍처 +위성의 생애 주기(설계/개발, 준비/조립, 발사, 궤도진입 확인, 운영, 위성 해체)를 기반으로 +위성/발사체 제조사, 지상국 운영사, 위성 운영사로 구성되어 있다. +위성/발사체 제조사는 탑재체를 포함한 위성 본체와 발사체를 제작하고, 탑재되는 +소프트웨어를 개발하는 역할을 수행하며, 위성 운용의 기초가 되는 하드웨어와 소프트웨어 +자산을 공급하는 영역이다. 지상국 운영사는 위성과 지상 간 통신을 관리하고, 위성 운용에 +필요한 시스템과 소프트웨어를 운용하여, 위성이 임무를 안정적으로 수행할 수 있는 환경을 +제공하고 운영을 지원하는 영역이다. 위성 운영사는 위성으로부터 수신한 탑재체 데이터를 +목적에 따라 분석 및 처리하고, 이를 활용하여 위성 활용 서비스를 제공하는 영역이다. +그림 3 +우주 공급망 아키텍처 + +--- + +8 | 우주 보안 모델 +제1절 +GSaaS 보안 위협 +GSaaS는 위성, 안테나, 지상국, 클라우드, 위성 운영사 등 다양한 영역이 연결된 구조로 기존의 +지상국보다 보안 위협에 노출될 가능성이 높다. GSaaS 아키텍처는 무선 통신 구간과 클라우드 +기반의 네트워크 구간이 모두 포함되어 있어 재밍, 스푸핑, 스니핑 등 무선구간에서의 물리적, +기술적 보안 위협과 계정 탈취, 악성코드 감염, 비인가 접근 등 네트워크 구간에서의 사이버 보안 +위협이 존재한다. + +## 제3장 + +우주 보안 위협 + +--- + + +## 제3장 우주 보안위협 | 9 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +그림 4 +GSaaS 보안 위협 + +--- + +10 | 우주 보안 모델 +제2절 +우주 공급망 보안 위협 +우주 공급망 아키텍처는 위성의 설계/개발부터 운영까지의 단계별로 위성/발사체 제조사, +지상국 운영사, 위성 운영사가 연계되어 있다. 설계/개발 단계에서 삽입된 악성코드나 악의적인 +백도어는 위성의 임무 수행 및 통신에 직접적인 장애를 초래할 수 있으므로, 위성 본체와 발사체를 +포함한 모든 하드웨어, 그리고 운영 및 제어를 위한 시스템과 소프트웨어를 개발 및 납품하는 모든 +과정은 위성 임무 수행의 성공과 직결된다. +그림 5 +우주 공급망 보안 위협 + +--- + + +## 제3장 우주 보안위협 | 11 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +제3절 +우주 보안 위협 시나리오 +최근 우주 관련 기업에서 발생한 보안 사고 및 사회적으로 크게 이슈화된 보안사고 사례를 +검토하여, GSaaS 및 우주 공급망 환경에서 발생할 수 있는 6가지 보안 위협 시나리오를 +도출하였다. + +## 1. GSaaS 보안 위협 시나리오 + +GSaaS 보안 위협 시나리오는 위성 제어권 탈취, 데이터 변조, 위성 통신 마비의 3가지 +시나리오를 도출하였으며 세부 시나리오는 다음과 같다. +취약한 인증관리 및 접근제어를 이용한 위성체 제어권 탈취 +시나리오1 +그림 6 +취약한 인증관리 및 접근제어를 이용한 위성체 제어권 탈취 시나리오 + +--- + +12 | 우주 보안 모델 +① ‌지상국에서 제공하는 클라우드에 구축된 GSaaS 서비스가 평문 통신을 하는 경우 공격자는 +스니핑을 통해 GSaaS 클라우드 IAM정보를 탈취할 수 있다. 공격자는 탈취한 IAM정보를 +이용해 위성 운영사로 가장하여 GSaaS 클라우드에 접속할 수 있다. +② ‌GSaaS 클라우드의 웹서버에 파일 업로드 취약점이 존재할 경우 공격자는 위성 운영사의 +권한으로 웹서버에 웹쉘을 업로드할 수 있다. 서버의 미흡한 권한 관리와 경로 조작 +취약점을 이용해 관리자 권한을 탈취하여 해당 클라우드 인스턴스를 장악한다. +③ ‌공격자는 장악한 GSaaS 클라우드 인스턴스를 이용하여 클라우드 영역과 지상국 위성운영 +간의 통신 패킷을 수집 및 분석하여 평문통신 구간을 수집하다. 평문 통신 패킷 수집 및 +분석을 통해 지상국 위성 운영 영역 서버의 접속 정보 및 권한을 탈취하고 해당 취약 서버에 +백도어를 설치하여 위성운영 네트워크에 접속한다. +④ ‌백도어를 통해 접속한 취약한 서버를 통해 위성운영 영역 네트워크의 통신 패킷을 수집 및 +분석하여 위성궤도 제어시스템의 접속 정보 및 권한을 탈취한다. 탈취한 접속 정보와 권한을 +이용해 위성궤도 제어시스템에 접속하고 백도어를 설치한다. +⑤ ‌공격자는 장악한 위성궤도 제어시스템에서 타겟 위성 접속 정보를 수집하고 정당한 +명령으로 가장하여 궤도 수정 명령을 하달한다. 공격자의 위성 궤도 조작으로 위성이 궤도를 +이탈하여 분실되거나 수집한 위성 접속정보를 이용해 위성을 탈취한다. + +--- + + +## 제3장 우주 보안위협 | 13 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +비인가 장비 및 백도어를 이용해 지상국 침투 후 위성통신 데이터 변조 +시나리오2 +그림 7 +비인가 장비 및 백도어를 이용해 지상국 침투 후 위성통신 데이터 변조 시나리오 +① ‌지상국 내부 시스템 유지보수 시 매체 제어가 미흡하거나 이동형 저장장치에 대한 별도 +통제가 부재한 취약한 환경에서 운영될 수 있다. 위성운영 영역 담당 엔지니어가 유지보수에 +사용하는 이동형 저장장치에 백도어를 배포하는 악성코드에 감염된 사실을 인지하지 +못하고 위성 제어시스템 서버에 접속 시 시스템에 백도어형 악성코드가 설치될 수 있다. +혹은 내부 네트워크에 네트워크 접근제어 부재 시 악의적인 내부 임직원이 쉽게 눈에 띄지 +않는 싱글보드 컴퓨터(라즈베리파이, 라떼판다 등)에 백도어를 설치하고 위성운영 영역 +네트워크에 연결할 수도 있다. + +--- + +14 | 우주 보안 모델 +② ‌지상국 내부의 위성운영 영역 네트워크에 인터넷 접점이 존재하거나 악의적인 임직원이 +방화벽 정책의 수정이 가능한 경우 공격자가 외부에서 내부에 설치된 백도어형 악성코드를 +이용해 내부 네트워크에 접속할 수 있다. +③ ‌지상국 내부 네트워크에 이상징후 탐지 및 차단 솔루션이 부재한 경우 공격자는 +네트워크 스캔 등을 사용해 취약한 시스템 정보를 수집할수 있다. 공격자는 수집한 내부 +시스템 정보를 이용해 권한상승이 가능하고, 위성 제어시스템 등 중요 자산에 관리자 +권한으로 접속할 수 있는 취약한 자산을 타겟으로 공격을 시도할 수 있다. 공격자가 위성 +제어시스템의 관리자 권한을 획득 한 경우 위성 접속 정보 등 중요 정보를 수집할 수 있다. +④ ‌공격자는 수집한 위성 접속 정보를 이용하여 타겟 위성에 접속하여 해당 위성에서 전송되는 +데이터를 변조하는 악성코드를 삽입할 수 있다. +⑤ ‌공격자가 설치한 악성코드로 인해 위성에 전송되는 데이터가 변조되고 이로 인해 위성 활용 +서비스에서 통신장애가 발생할 수 있다. + +--- + + +## 제3장 우주 보안위협 | 15 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +드론을 활용한 물리적 공격으로 위성 통신 마비 +시나리오3 +그림 8 +드론을 활용한 물리적 공격으로 위성 통신 마비 시나리오 +① ‌지상국에서 제공하는 클라우드에 구축된 GSaaS 서비스가 평문통신을 하는 경우 공격자는 +스니핑을 통해 데이터를 수집하고 분석하여 타겟 위성이 사용하는 안테나의 위치 정보를 +확인한다. +② ‌확인된 안테나를 재밍 장비 혹은 폭발물을 탑재한 드론을 이용하여 재밍 공격 혹은 +물리적으로 파괴한다. +③ ‌공격자의 안테나 재밍 공격 혹은 물리적 파괴로 인해 안테나와 위성 간 통신이 마비된다. + +--- + +16 | 우주 보안 모델 + +## 2. 우주 공급망 보안 위협 시나리오 + +우주 공급망 보안 위협 시나리오는 지상국 시스템 마비, 위성 탑재체 오동작 유발, 위성체 +오동작 유발의 3가지 시나리오를 도출하였으며 세부 시나리오는 다음과 같다. +취약한 오픈소스 사용으로 지상국 시스템 마비 +시나리오1 +그림 9 +취약한 오픈소스 사용으로 지상국 시스템 마비 시나리오 +① ‌공격자는 지상국 운영사가 서비스 개발 시 통상적으로 사용하는 오픈소스 라이브러리 +정보를 수집한다. 공격자가 해당 오픈소스 라이브러리 개발 커뮤니티에 가입하여 백도어 형 +악성코드를 삽입하고 리포지터리에 최신 버전으로 등록한다. +② ‌지상국 운영사는 별도의 라이브러리 검증 절차 없이 악성코드가 삽입된 취약한 오픈소스 +라이브러리를 포함하여 서비스를 개발하고 배포한다. +③ ‌공격자는 백도어를 통해 지상국 운영사의 시스템에 접속하고 추가로 취약한 시스템 정보를 +수집하여 지상국 서비스를 장악한 후 지상국 시스템을 마비시킨다. + +--- + + +## 제3장 우주 보안위협 | 17 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +위성 탑재체 업데이트 파일에 악성코드 삽입으로 위성 탑재체 오동작 유발 +시나리오2 +그림 10 +탑재체 업데이트 파일에 악성코드 삽입으로 위성 오동작 유발 +① ‌공격자는 인터넷 등 공개된 네트워크에 연결된 개발용 PC에 피싱 메일 등 사회 공학을 통해 +접근한다. 개발자 PC에 연결된 위성체, 탑재체, 발사체 SW 개발(업데이트) 서버에 접근하여 +백도어를 설치한다. +② ‌공격자는 위성 탑재체 SW 업데이트에 랜섬웨어형 악성코드를 삽입하여 업데이트 파일을 +변조한다. +③ ‌위성/발사체 제조사가 악성코드가 삽입된 SW 업데이트 파일을 지상국 운영사에 제공한다. +지상국 운영사는 악성코드가 삽입된 SW 업데이트 파일을 별도의 검증 없이 위성 SW +업데이트 서버에 업로드 한다. +④ ‌SW 업데이트를 통해 설치된 악성코드로 인해 암호화 등 위성 탑재체 오동작을 유발한다. + +--- + +18 | 우주 보안 모델 +변조된 개발환경 플러그인 사용으로 위성체 오동작 유발 +시나리오3 +그림 11 +변조된 개발환경 플러그인 사용으로 위성체 오동작 유발 +① ‌공격자가 SW개발 IDE 및 CI/CD의 유명 플러그인 개발 커뮤니티에 가입하여 빌드 시 +백도어를 생성하는 등 SW를 변조하는 악성코드가 삽입된 플러그인을 저장소에 업로드한다. +② ‌위성체 부품 FW개발자가 자신의 IDE 등 개발 및 빌드 환경 구축 중 플러그인 설치에 대한 +별도 검증 절차 부재로 해당 악성코드가 삽입된 IDE 및 CI/CD를 사용해 FW를 개발하고 +부품에 탑재하여 납품한다. +③ ‌위성체 제조사가 부품에 탑재된 FW에 대한 별도의 검증 단계를 거치지 않고 악성코드가 +탑재된 취약한 부품을 사용하여 위성체를 제조하여 위성 운영사에 납품한다. +④ ‌공격자는 백도어를 사용해 감염된 위성체의 오동작을 유발한다. + +--- + + +## 제4장 우주 보안아키텍처 | 19 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +제1절 +우주 보안 요구사항 + +## 1. GsaaS 보안 요구사항 + +GSaaS 통신 구간에서의 전파 교란이나 시스템 접근 권한을 탈취하여 위성 제어권을 침해하는 +행위, 악성코드 감염이나 미흡한 보안 설정으로 인한 중요정보 유출 및 데이터 변조 등 다양한 +보안 위협에 대응하기 위한 GSaaS의 주요 보안 요구사항으로는 안티 재밍 대책 마련, 운영 시스템 +관리자 및 사용자 인증 강화, 권한 관리, 클라우드 인프라 및 사용자 보안 강화 등이 있다. + +## 제4장 + +우주 보안 아키텍처 + +--- + +그림12 +GSaas +주요 +궁국 +요구사항 +Private +ublicC +서 +뒤점방을서비스 +라우드 +스미크 +위리닥회로 +터재체 +물영의 +공시스대 +위전문수스서비스 +지상국 +Y웅공위층 +GSaas +융투위층 +서비스 +0 +교구울 +전파에 +대해안테나이중화 +등 +통신구간 +지상국 +가상사설망등 +러교울 +지상국및 +을굴비무 +4 +금Y타비F용공 +금Ms금공은 +설치허용 +지상국 +클라우드 +5 +오공크 +등위성 +운영시스템관리자및 +음공Y웅Y +러런 +G CASB +CSPM도입등 +YY +클라우드 +화2공레Y웅Y금눈피 +위성운영사 +물Y I0 +클라우드 +20|우주보안모델 + +--- + + +## 제4장 우주 보안아키텍처 | 21 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 + +## 1. 우주 공급망 보안 요구사항 + +우주 공급망에서는 소프트웨어를 개발하는 과정에서 백도어가 삽입되어 위성의 미션 수행에 +장애가 발생하거나 취약한 오픈소스 라이브러리를 통한 원격 공격으로 탑재체 데이터 탈취, +악성코드가 삽입된 업데이트 파일로 인해 위성 제어 장애를 유발, 재택 및 원격 근무 시 데이터가 +유출되는 등의 보안 위협이 존재한다. 이러한 보안 위협에 대응하기 위한 우주 공급망의 주요 보안 +요구사항은 소프트웨어 및 펌웨어 배포 전 충분한 검증 절차 수행, 악성코드 검사, 소프트웨어 +개발 시 검증된 도구 사용, 원격 근무 솔루션 도입 등이 있다. +그림 13 +우주 공급망 주요 보안 요구사항 + +--- + +22 | 우주 보안 모델 +제2절 +우주 보안 아키텍처 +우주 보안 아키텍처는 GSaaS와 우주 공급망에서 도출된 보안 요구사항을 바탕으로 보안기술, +보안솔루션에 대한 활용방안을 도식화하여 표현한 아키텍처이다. + +## 1. GsaaS 보안 아키텍처 + +GSaaS 보안 아키텍처 구성 기준은 앞서 살펴본 보안 요구사항을 반영하여 아래와 같은 +기준으로 구성한다. +그림 14 +GSaaS 보안 아키텍처 구성기준 + +--- + + +## 제4장 우주 보안아키텍처 | 23 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +다음은 GSaaS 보안 아키텍처 구성 기준을 적용한 GSaaS 보안 아키텍처이다. +그림 15 +GSaaS 보안 아키텍처 + +--- + +24 | 우주 보안 모델 + +## 2. 우주 공급망 보안 아키텍처 + +우주 공급망 보안 아키텍처 구성 기준은 앞서 살펴본 보안 요구사항을 반영하여 아래와 같은 +기준으로 구성한다. +그림 16 +우주 공급망 보안 아키텍처 구성기준 + +--- + + +## 제4장 우주 보안아키텍처 | 25 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +다음은 우주 공급망 보안 아키텍처 구성 기준을 적용한 우주 공급망 보안 아키텍처이다. +그림 17 +우주 공급망 보안 아키텍처 + +--- + +26 | 우주 보안 모델 +제3절 +우주 보안 체크리스트 +우주기업 보안담당자가 우주기업의 현재 보안상황을 진단하고 우주보안 대책을 수립할 수 +있도록 우주보안 체크리스트를 제시한다. 우주 보안 체크리스트는 CMMC2 2단계 통제항목을 +기준으로 한국형 위험관리체계인 K-RMF3, 유럽연합 보안 Directive인 NIS24, 국내 정보보호 +관리체계(ISMS5) 를 반영하여 작성하였다. 우주 보안 체크리스트는 12개 분야, 53개 항목으로 +구성된다. +표 26 +우주 보안 체크리스트 (접근통제) +분야 +항목 설명 +접근통제 +AC-01 +접근통제 정책 +y 시스템 접근권한을 부여한 기기, 사용자 및 프로세스에 한하여 +접근을 허용해야 한다 +AC-02 +최소권한 +y 사용자에게 부여된 과업 및 직책을 수행하는데 필요한 최소한의 +권한을 부여한다. +AC-03 +특수 권한 사용 +y 특수권한 사용자가 실행할 수 있는 기능에 대한 시스템 접속을 +제한하고 특수권한으로 실행되는 기능들을 감사해야 한다. +AC-04 +정보흐름 통제 +y 시스템 내부 및 시스템 간 정보 흐름을 통제해야 한다. +AC-05 +직무 분리 +y 개인의 직무를 분리하고 이에 따라 시스템의 접근권한을 +부여해야 한다. +AC-06 +로그인 시도 실패 +y 일정 기간 동안 연속으로 유효하지 않은 로그인 시도를 제한하고 +최대 허용횟수를 초과하면 자동으로 계정을 잠궈야 한다. +AC-07 +세션 잠금 및 종료 +y 일정 기간 동안 세션 사용이 없거나 사용자에 의한 세션 잠금 +요청이 있을 경우 해당 세션을 잠그고,세션 종료 조건 발생 시 +자동으로 세션을 종료해야 한다. +AC-08 +원격 접근통제 +y 승인된 업무 및 사용자에 대해서만 원격접속을 허용하고 +원격접속 세션을 암호화 및 모니터링해야 한다. +2 ‌CMMC : Cybersecurity Maturity Model Certification +3 ‌K-RMF : Korea - Risk Management Framework +4 ‌NIS : network and information systems +5 ‌ISMS : Information Security Management System + +--- + + +## 제4장 우주 보안아키텍처 | 27 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +분야 +항목 설명 +AC-09 +무선 접속 +y 시스템에 무선접속시 승인받은 사용자/기기 인증을 수행하고 +통신세션을 암호화해야 한다. +AC-10 +모바일기기 연결 +통제 +y 승인된 모바일 장치에 대해서만 시스템의 연결을 허용하고 +모바일 장치에서 정보를 암호화해야 한다. +AC-11 +외부 연결 통제 +y 외부 시스템과 조직 내부시스템에 대한 연결 및 사용을 확인하고 +통제해야 한다. +AC-12 +공공 정보 통제 +y 공개적으로 접근 가능한 시스템에 정보를 게시하기 전에 해당 +내용을 검토하여 중요정보가 게시되지 않도록 한다. +식별 및 +인증 +IA-01 +식별 및 인증 +y 시스템 사용자, 프로세스 및 장치를 식별하고 인증해야 한다. +IA-02 +다중 인증 +y 특수권한 계정으로 네트워크에 접속할 경우에는 다중 인증을 +사용하고 재전송 공격 방지 인증 메커니즘을 적용해야 한다. +시스템 및 +통신 보안 +SC-01 +경계 보호 +y 조직 시스템의 외부 경계와 주요 내부 경계에서의 통신(송수신 +정보)을 모니터링, 제어 및 보호해야 한다. +SC-02 +보안공학 원칙 +적용 및 기능 분리 +y 보안 아키텍처는 심층 방어 원칙을 기반으로 설계하고, 시스템의 +관리 기능과 사용자 기능을 명확히 분리하여 운영하여야 하며, +시스템 개발 과정에서는 보안공학 원칙을 적용하여야 한다. +SC-03 +저장 및 +전송 정보 보안 +y 저장 및 전송되는 정보의 기밀성 및 무결성을 보호해야 한다. +SC-04 +통신 보안 +y 기본적으로 모든 트래픽을 거부하고, 필요한 트래픽만 +예외적으로 허용하는 방식으로 운용하고, 로컬 및 원격연결을 +동시에 하지 못하도록 통제하며 통신세션 종료 이후 또는 +일정 기간 동안 작업이 없을 경우 통신 세션과 관련된 연결을 +종료해야 한다. +SC-05 +암호화 +y 중요 정보는 암호화하고 암호화를 위한 암호키를 설정하고 +관리해야 한다. +SC-06 +협업 컴퓨팅 장치 +y 협업 컴퓨팅 장치의 원격 활성화를 금지하고 장치가 사용 중일 +때는 물리적으로 나타나는 표시를 통해 사용자가 장치가 사용 +중임을 인식할 수 있어야 한다. +SC-07 +모바일 코드 및 +VoIP 통제 +y 시스템 내 모바일 코드 및 VoIP의 사용을 모니터링 · 통제 해야 +한다. + +--- + +28 | 우주 보안 모델 +분야 +항목 설명 +시스템 및 +정보 +무결성 +SI-01 +취약점 점검 및 +결함교정 +y 시스템과 애플리케이션의 취약점을 주기적으로 검사하고, 해당 +시스템에 영향을 미치는 신규 취약점이 확인될 때마다 검사하여 +시스템의 결함을 식별, 조치, 보고해야 한다. +SI-02 +악성코드 방지 +y 악성코드 식별 및 제거를 위해 시스템에 악성코드 방지솔루션을 +설치하고 파일 다운로드시 실시간으로 검사해야 한다. +SI-03 +보안 경보, 권고 +y 시스템 보안 경고와 권고를 모니터링하고 이에 대한 대책을 +수립해야 한다. +SI-04 +시스템 및 통신 +트래픽 모니터링 +y 시스템의 무단 사용을 모니터링하고 송ㆍ수신되는 네트워크 +트래픽을 주기적으로 모니터링해야 한다. +시스템/ +서비스 +운영 관리 +SO-01 +유지보수 통제 +y 시스템 유지관리에 사용되는 도구, 기술, 메커니즘 및 인력을 +통제해야 한다. +- ‌원격 유지보수 시스템 외부 반출 전 정보소거 +- ‌유지보수용 저장매체 악성코드 검사 +- ‌원격 유지보수 시 사전승인, 강화된 인증, 유지보수 활동 기록, +업무 종료 시 세션 종료 +- ‌유지보수 인력 관리 감독 +SO-02 +시스템 감사 및 +감사기록 분석, +보고 +y 불법적이거나 승인되지 않은 시스템 활동을 모니터링, 분석, +조사 및 보고하기 위한 시스템 감사 로그 및 기록을 생성 및 +보관해야 하고 부적절하거나 비정상적 활동을 분석 및 보고해야 +한다. 또한 감사 정보를 보호하고 감사 로깅 오류시 경고한다. +SO-03 +시간동기화 +y 감사기록을 위한 타임스템프생성을 위해 내부 시스템 +(NTP서버) 시간을 사용해야 한다. +SO-04 +휴대용 저장장치 +(저장매체 등) +보안 +y 중요정보가 저장된 저장매체 및 휴대용 PC는 물리적으로 +안전하게 보관하고 기밀성, 무결성을 보호하기 위해 통제해야 +한다. +- ‌저장매체 이동시 암호화 등으로 보호 +- ‌폐기 또는 재사용을 위해 반출되기 전에 정보소거하거나파기 +- ‌매체 백업 정보의 기밀성 보호 +SO-05 +형상관리 +y 시스템 구축 및 운영의 통제기준이 되는 최신화된 형상관리 +기준선(Baseline)을 식별하고 시스템 정보기술 제품들의 보안 +환경설정을 수립 및 문서화해야 한다. +SO-06 +시스템 및 +애플리케이션 +보안 요구사항 +정의 +y 사업 기획 단계에서 시스템 및 서비스에 대한 정보보안 +요구사항을 정의해야 하며, 안전한 코딩 방안을 포함하여야 +한다. + +--- + + +## 제4장 우주 보안아키텍처 | 29 + +제 +1 +장 +제 +2 +장 +제 +3 +장 +제 +4 +장 +개 +요 +우 +주 +아 +키 +텍 +처 +우 +주 +보 +안 +위 +협 +우 +주 +보 +안 +아 +키 +텍 +처 +분야 +항목 설명 +SO-07 +시스템/ +애플리케이션 +변경관리 +y 시스템 및 애플리케이션의 변경 사항을 검토, 승인/거부하고 +변경내역을 기록해야 하며 변경 전에 변경에 대한 잠재적인 보안 +영향을 분석해야 한다. +SO-08 +개발 시험 및 평가 +y 사전 정의된 보안 요구사항에 따라 정보시스템이 도입 또는 +구현되었는지를 검토하기 위하여 법적 요구사항 준수, 최신 +보안취약점 점검, 안전한 코딩 구현 등의 검토 기준과 절차를 +수립·이행하고, 발견된 문제점에 대한 개선조치를 수행하여야 +한다. +SO-09 +기능최소화 및 +사용자설치 +소프트웨어 통제 +y 필수 기능만 제공하도록 시스템을 설정하고 사용자가 설치한 +소프트웨어를 통제하고 모니터링한다. +사고 대응 +IR-01 +사고 처리 및 +테스트 +y 사고대응 준비, 사고 탐지, 사고 조사/분석, 피해 시스템의 분리 +및 차단, 피해 시스템 복구를 포함한 사고 처리 대응 체계를 +구축하고 주기적으로 사고대응 테스트를 실시해야 한다. +IR-02 +사고 보고 +y 사고를 인지한 인원이 지정한 시간 내에 사고대응 부서에 +신고하고 사고대응 부서는 사고를 관련 기관에게 통지해야 한다. +인원보안 +PS-01 +인원보안 +y 직원 고용시 배경검사를 시행하고 보직 변경/퇴직시시스템 접근 +권한을 검토/변경/삭제해야 하며 기업의 보안 정책 위반시 징계 +절차를 수립해야 한다. +PS-02 +보안인식 +교육·훈련 +y 직무별 전문성을 확보할 수 있도록 인식제고 활동 및 교육훈련 +계획을 수립 및 시행해야 한다. +물리보안 +PE-01 +물리적 접근통제 +y 시스템이 설치·운영되고 있는 시설의 출입을 통제하고 +모니터링하며 물리적 접근 이력을 주기적으로 검토해야 한다. +PE-02 +대체 근무장소 보안 y 대체 근무장소(재택, 출장지, 원격 사무실 등)에서 중요 정보에 +대한 안전조치를 시행한다. +PE-03 +보호설비 운영 +y 보호구역에 위치한 정보시스템의 중요도 및 특성에 따라 +온도·습도 조절, 화재감지, 소화설비, 누수감지, UPS, +비상발전기, 이중전원선 등의 보호설비를 갖추고 운영절차를 +수립·운영하여야 한다. +위험 평가 +및 +보안평가 +RA-01 +위험 평가 +y 시스템 운영 및 관련 정보의 처리, 저장 또는 전송으로 인해 +발생하는 조직 운영(임무, 기능, 이미지 또는 평판 포함), 조직 +자산 및 개인에 대한 위험을 주기적으로 평가해야 한다. +RA-02 +보안 통제 모니터링 +및 효과성 평가 +y 지속적으로 보안 통제를 모니터링하여 보안통제의 지속적인 +효과를 보장해야 한다. + +--- + +30 | 우주 보안 모델 +분야 +항목 설명 +보안 +거버넌스 +SG-01 +보안 정책 수립 +y 우주보안 정책 및 지침을 수립하여 경영진의 승인을 받고 +주기적으로 검토 및 개정하여야 한다. +SG-02 +보안 역할 및 책임 +정의 +y 우주보안 관련 책임자 및 담당자의 역할·책임을 정의하고, 조직 +변화에 따라 이를 지속적으로 유지·관리해야 한다. +SG-03 +자산관리 +y 우주 관련 자산을 식별하고 목록화하며, 변동 사항을 반영하여 +최신 상태로 관리해야 한다. +SG-04 +법적요구사항 +준수 +y 우주보안 관련 법적 요구사항을 주기적으로 파악하여 규정에 +반영하고, 준수 여부를 지속적으로 검토하여야 한다. +비상계획 +CP-01 +비상계획 수립 +y 우주 시스템의 운영 연속성을 위협할 수 있는 보안 위협 유형을 +식별해야 하며, 비상시 복구 절차, 복구 조직, 비상연락체계 등 +비상계획을 수립하고 주기적으로 점검해야 한다. +CP-02 +백업 및 이중화 +관리 +y 조직의 중요정보를 식별하고 주기적으로 백업하며 중요 +네트워크, 시스템은 이중화한다. +공급망 +관리 +SM-01 +공급망 보호 +y 협력사로 인해 발생할 수 있는 보안 위협을 방지하기 위해 +공급망 보안 정책을 수립하여 협력사 선정을 위한 기준과 +계약서를 마련하고, 협력사 명부를 작성 및 최신화해야 한다 +SM-02 +인수 전 평가 +y 시스템/구성요소/서비스의 선정/인수/ 업데이트 전에 +보안취약점 점검 및 조치하고 인수 테스트를 통해 구성요소의 +위조를 검사해야 한다. +SM-03 +모든 출처 정보 +사용 +y 시스템/구성요소/서비스 공급업체를 대상으로 모든 출처 정보 +분석을 수행해야 한다. +SM-04 +변조/위조 방지 및 +탐지 +y 시스템/구성요소/서비스의 변조 및 위조를 방지하기 위하여 +주기적으로 점검해야 한다. + +--- + +우주 보안모델 요약본 +인 쇄 | 2025 년 12 월 +발 행 | 2025 년 12 월 +발행처 | 한국인터넷진흥원 +(58324) 전라남도 나주시 진흥길 9 \ No newline at end of file diff --git "a/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234_\353\260\217_\354\202\254\353\241\200\354\247\221.md" "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234_\353\260\217_\354\202\254\353\241\200\354\247\221.md" new file mode 100644 index 0000000..9b08966 --- /dev/null +++ "b/\353\254\270\354\204\234/\354\232\260\354\243\274_\353\263\264\354\225\210\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234_\353\260\217_\354\202\254\353\241\200\354\247\221.md" @@ -0,0 +1,11733 @@ +# 우주 보안모델 해설서 및 사례집.pdf + +> Converted: 2026-04-02 01:24 +> OCR Engine: PaddleOCR (Korean + GPU) + + +--- + +우주 +해설 +및 +적용사례집 +2025 +12 +과학기술정보통신부 +한국인터넷진흥원 +KIsA +Ministry of Science and ICT + +--- + +1 배경 및 목적 .....................................................................6 +2 범위 및 구성 .....................................................................8 +3 우주 보안 컴플라이언스 및 가이드라인 .....................................9 + +가. 컴플라이언스 ............................................................... 10 + +나. 가이드라인 .................................................................. 15 +1 우주 보안모델 ................................................................. 26 + +가. GSaaS 아키텍처 ........................................................... 30 + +나. 우주 공급망 아키텍처 ...................................................... 31 +2 우주 보안 체크리스트 ........................................................ 32 + + +## 제1장 ◆ 개요 + + +## 제2장 ◆ 우주 보안모델 + +CONTENTS + +--- + +1 A우주기업 아키텍처 구성요소 ............................................ 204 +2 A우주기업 보안취약점 점검 절차 ........................................ 206 +3 A우주기업 주요 보안 요구사항 ........................................... 207 +4 보안모델 적용을 통한 기대효과 .......................................... 212 +1 접근통제(AC)................................................................... 38 +2 식별 및 인증(IA)............................................................... 69 +3 시스템 및 통신 보안(SC) .................................................... 78 +4 시스템 및 정보 무결성(SI) .................................................. 99 +5 시스템/서비스 운영관리(SO)............................................. 111 +6 사고 대응(IR) ................................................................ 138 +7 인원 보안(PS) ............................................................... 150 +8 물리보안(PE) ................................................................ 157 +9 위험평가 및 보안 평가(RA) ............................................... 168 +10 보안 거버넌스(SG).......................................................... 175 +11 비상 계획(CP)................................................................ 187 +12 공급망 관리(SM)............................................................ 193 + +## 제4장 ◆ 우주 보안모델 적용 사례 + + +## 제3장 ◆ 우주 보안모델 해설 + + +--- + + + +--- + +개요 + +## 1. 배경 및 목적 + + +## 2. 범위 및 구성 + + +## 3. 우주 보안 컴플라이언스 및 가이드라인 + +제 1 장 + +--- + +6 | 우주 보안 모델 해설 및 적용사례집 +민간 우주기업이 우주산업을 직접 이끌어 우주 생태계가 조성되는 뉴스페이스 시대가 도래함에 +따라 소형위성 대량 생산, 위성 발사 비용 급감, 위성 데이터 서비스의 활성화 등으로 우주 +생태계가 다변화되고 있다. +이에 따라 세계 각국의 정부와 민간기업에서는 우주산업 시대의 유리한 고지를 선점하기 위해 +부단한 노력을 기울이고 있는 중이며, 우주 강국 미국은 우주 내 서비스, 조립 및 생산에 대한 국가 +전략을 마련하여, 글로벌 우주 시장의 주도권을 지속 확보하고자 노력하고 있다. 유럽연합에서도 +전략적 자주성 확보, 우주 안전 및 방위 역량 강화, 산업 경쟁력 지원 등을 핵심축으로 우주 산업 +전략을 마련하고 거버넌스와 대규모 투자로 이를 실행하는 중이다. 일본에서는 우주전략기금을 +운영하여, 민간 기업, 대학, 연구기관 등을 대상으로 우주 분야 기술 개발 및 사업화를 장기적으로 +지원하려고 계획하고 있다. 국내 역시 이러한 글로벌 흐름에 발맞춰 정부차원의 민간주도 +우주산업 생태계조성을 위한 지원 강화 계획을 마련하여 민간 우주기업 생태계 조성을 위한 +노력을 기울이고 있다. +우주 산업의 성장으로 통신, 방송, 물류, 금융, 해양, 기상 등 다양한 산업에서 위성 데이터와 +서비스 활용도가 높아짐에 따라, 기업 경쟁력과 사용자 신뢰성을 유지하기 위해 우주보안의 +필요성이 대두 되었다. 우주 인프라에 대한 사이버 공격이나 재밍 등은 단 한 번의 사고로도 +막대한 경제적, 사회적 손실을 초래할 수 있기 때문이다. + +## 제1장 + +개요 +제1절 +배경 및 목적 + +--- + + +## 제1장 개 요 | 7 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +또한, 우주 산업에 참여하는 공급업체와 파트너가 매우 다양하여 위성 및 지상국 인프라에 +대해 다양한 보안 위협이 발생할 수 있다. 즉, 위성 설계/개발, 준비/조립, 발사, 운영, 폐기에 +이르는 위성 생애주기 전 과정이 공급망 체계로 구성되어 있으며, 각 단계에서 부품/소프트웨어 +위변조, 정보 유출, 사이버 공격 등의 많은 보안 위협이 현실화되고 있는 실정이다. 이는 우주 +자산이 고가치로 평가되어 사이버보안 위협 목표가 되기에 충분하기 때문이며 국내 기업의 경쟁력 +확보를 위해 우주 공급망 보안도 중요한 요소로 부각되고 있다. 따라서 우주기업은 단위 시스템을 +보호하는 수준을 넘어, 위성, 지상국, 사용자 영역의 우주 환경 전반과 우주 공급망 전 단계에서 +우주보안 체계를 구축해야 한다. +본 문서는 우주 보안모델(GSaaS1 우주 공급망)에서 기술한 우주보안 체크리스트를 설명하고 +각 항목별로 구체적인 보안대책을 제시한다. 이를 통해 우주기업 보안담당자가 해당 우주기업의 +보안현황을 점검하여, 도출된 보안문제점을 조치하기 위한 방안을 수립하고 우주 보안모델을 보다 +잘 적용할 수 있도록 지원하는데 있다. +1 ‌GSaaS(Ground Station as a Service) : 클라우드 기반의 지상국 서비스로 클라우드를 활용한 Ground Segment를 이용 +하여 데이터를 수신하고 명령을 전송하는 기술 + +--- + +8 | 우주 보안 모델 해설 및 적용사례집 +제2절 +범위 및 구성 +본 문서는 우주 보안모델(GSaaS, 우주 공급망)에서 제시한 우주 보안 체크리스트 12개 분야, +53개 항목에 대한 구체적인 해설 및 보호대책을 기술한다. +본 문서는 네 부분으로 구성되어 있다. + +## 1장에서는 우주 보안모델 해설서 개발 배경을 소개하고 범위와 구성, 그리고 우주 보안 + +컴플라이언스 및 가이드라인을 소개한다. + +## 2장에서는 우주 보안모델(GSaaS, 우주 공급망) 보고서에서 제시한 GSaaS, 우주 공급망 + +아키텍처를 소개하고 우주보안 체크리스트를 설명한다. + +## 3장에서는 우주보안 체크리스트 12개 분야, 53개 항목별로 목적, 확인사항, 보호대책을 + +제시한다. + +## 4장에서는 보안 취약점 점검을 수행한 우주기업 3곳 중 1곳에 대해 우주 보안 취약점 점검 및 + +조치 사례를 설명하고 보안컨설팅 성과를 도출한다. + +--- + + +## 제1장 개 요 | 9 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제3절 +우주 보안 컴플라이언스 및 가이드라인 +최근 전 세계적으로 우주 산업은 국가 중심의 사업 구조를 벗어나 민간 기업 주도의 New +Space 시대로 빠르게 전환되고 있다. 지상국 서비스, 위성 발사 서비스, 위성 관리 서비스, +발사체 개발 등 다양한 영역에서 민간의 참여가 확대되면서 산업 성장 기회가 열리고 있으나, 우주 +시스템을 겨냥한 사이버 공격도 지속해서 증가하고 있다. 특히 지상 인프라, 우주 부문, 사용자 +단말이 모두 연결되어 있어 한 요소의 침해가 전체 서비스로 이어질 위험이 높다. +우주 자산을 대상으로 한 보안 위협이 고도화됨에 따라 각국 정부와 국제기관은 우주 분야에 +적용되는 규제와 보안 요구사항을 강화하고 있다. 우주기업에게 보안 준수는 단순 관리 문제가 +아니라 사업 참여 조건이 되고 있다. 예를 들어, 국제 규제, 공급망 계약, 사고 보고의무 등은 +기업이 글로벌 시장에서 경쟁하고 고객·정부 기관과 협력하기 위해 반드시 충족해야 한다. 이에 +따라 계약 기반의 보안책임, 표준 준수에 대한 증빙 요구 등 법적·계약적 준수의 중요성이 더욱 +강조되고 있다. +이와 같은 상황 속에서 미국, 유럽, 한국을 포함한 주요 국가들은 아래와 같이 우주 분야에 대한 +보안 규제를 시행하고, 표준을 배포하고 있다. +표 1 +우주 보안 컴플라이언스 및 가이드라인 +구분 +문서명 +주요 내용 +컴플라이언스 +EU NIS2 Directive + 우주를 포함한 필수 서비스 사업자의 사이버 위험관리와 사고 +보고의무를 강화하는 EU 법적 규제 프레임워크로, 조직적·관리적 +보안통제를 요구 +CMMC2 +(사이버보안 성숙도 +모델 인증) + 미 국방부 공급망 기업의 보안 성숙도 수준을 인증하기 위한 +모델로, 관리적 통제·문서화·공급망 보안 기준을 제시 +가이드라인 +NIST IR 84013 + 위성 지상국의 TT&C4 보호를 위한 기술 보안 지침으로, 사이버보안 +프레임워크 기반 식별·보호·탐지·대응·복구 통제를 제시 +NIST IR 82705 + 상업 위성 운영 전 주기에 걸친 위험 기반 보안 관리 원칙을 +제시하며, 운영·개발·배치 단계별 위협 대응 방법을 설명 +ENISA6 Space +Threat Landscape + 우주 시스템을 대상으로 하는 위협 행위자·공격 시나리오·자산 +분석을 제공하여 위협 기반 보안 설계를 지원 + +--- + +10 | 우주 보안 모델 해설 및 적용사례집 +구분 +문서명 +주요 내용 +가이드라인 +민간 우주 시스템 +사이버보안 대책 +가이드라인 + 일본 민간 우주기업이 표준 모델과 위협 시나리오를 기반으로 +시스템의 위헙을 식별하고, 보안 대책을 체계적으로 수립하도록 +지원 +미국은 NIST 8401, NIST 8270 등의 보고서를 통해 위성·지상국 보안 요구사항을 제시하고, +국방부와 계약하는 기업에게 높은 보안 수준을 요구하는 CMMC 인증 체계를 갖추고 있다. +유럽연합(EU)은 NIS2 Directive를 통해 우주 산업을 필수 서비스로 포함하여 법적 규제 체계를 +강화했다. 또한, 유럽사이버보안청(ENISA)은 Space Threat Landscape 보고서를 통해 우주 +시스템 특화 위협을 정의하고 보안 통제를 권고하며, 일본은 민간 우주 시스템 사이버보안 대책 +가이드라인을 통해 민간 우주기업이 보안 거버넌스를 갖추고 우주시스템 특유의 기술적 대책을 +수립할 수 있도록 지원한다. +이처럼 민간 기업들이 지상국과 위성 인프라를 제공하는 역할을 맡게 되면서, 보안 체계 마련 및 +규정 준수의 중요성이 더욱 커지고 있다. +가. 컴플라이언스 +(1) EU NIS2 Directive +NIS2 Directive (Directive (EU) 2022/2555)는 기존 NIS 지침을 개정 및 확대한 +유럽연합(EU)의 사이버보안 지침이다. 이 지침의 핵심 목표는 EU 회원국 전반에 걸쳐 네트워크 +및 정보시스템에 기반한 필수 서비스들의 복구 능력과 사고 대응 능력을 높은 공통 수준으로 +향상시키는 것이다. +2 ‌CMMC (Cybersecurity Maturity Model Certification) : 사이버보안 성숙도 모델 인증 +3 ‌NIST IR 8401 (Satellite Ground Segment: Applying the Cybersecurity Framework to Satellite Command and +Control) +4 ‌TT&C (추적 · 원격측정 및 지령, Telemetry And Command) : 위성 통신에서 위성의 추적(궤도 위치 정보의 파악), 원격 +측정(위성의 감시) 및 위성에 대한 지령(위성 상태의 변경 제어)을 실행하는 것. 또는 그것들을 실행하는 지상의 국(출처 : +정보통신용어사전) +5 ‌NIST IR 8270 (Introduction to Cybersecurity for Commercial Satellite Operations) +6 ‌ENISA (European Union Agency for Cybersecurity) : 유럽사이버보안청 + +--- + + +## 제1장 개 요 | 11 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +NIS2는 기존의 에너지, 교통, 금융, 보건, 디지털 인프라 등 전통적 핵심 인프라 영역에 더해 +우주 부문을 포함하여 적용 범위를 크게 확장했다. 지침은 “우주 기반 서비스 제공자, 지상 인프라 +운영자, 위성 관제 및 지상국 운영자, 우주 관련 서비스 및 공급망 참여자” 등을 적용 대상으로 +명시하고 있다. 이는 우주 기반 서비스 제공을 지원하는 지상 기반 인프라 운영자를 포함할 수 +있으며, GSaaS 제공사의 주 활동 영역인 지상국 운영 또한 해당 인프라에 해당될 수 있다. 모든 +우주기업이 자동 적용되지는 않고, 기업 규모(직원 수, 매출 등) 또는 사업의 “중요성/영향력”에 +따라 해당될 수 있다. +NIS2에 따라 이들 기관은 사이버 위험 관리 조치 이행 및 단계별 침해사고 보고 등 의무를 +준수해야 한다. +NIS2 Directive의 문서 구성은 아래와 같다. +표 2 +NIS2 Directive 문서 구성 +장 +내용 +세부 내용 +1 +일반 조항 +제2조 적용범위 +제3조 필수적이고 중요한 기관 +2 +조정된 사이버보안체계 +제7조 국가사이버 보안전략 +3 +유럽연합 및 국제적 차원의 협력 +제14조 협력단 +제15조 컴퓨터보안사고대응팀연계망 +4 +사이버보안 위험 관리 조치 및 +보고의무 +제20조 관리체계 +제21조 사이버보안 위험 관리 조치 +제23조 보고의무 +5 +관할권 및 등록 +제26조 관할 및 영토성 +6 +정보 공유 +제30조 관련 정보의 자발적 통지 +7 +감독 및 집행 +제32조 필수기관과 관련된 감독 및 집행조치 +제36조 벌칙 +8 +위임입법 및 시행법 +제38조 위임권의 행사 +9 +종결조항 +제41조 이행 + +--- + +12 | 우주 보안 모델 해설 및 적용사례집 +NIS2는 적용 대상 기관에 대해 다음과 같은 구체적인 의무를 부과한다 +•경영진 책임 강화 +NIS2 Directive는 적용 대상 기관의 경영진이 사이버보안 위험 관리 조치를 승인하고 이행을 +감독해야 할 법적 책임을 명시한다. 경영진은 서비스 운영에 미치는 보안 위험을 이해하고 평가할 +수 있도록 정기 교육을 이수해야 하며, 최소 연 1회 이상 보안정책을 검토·갱신해야 한다. 기관 +내에는 보안책임을 경영진에게 직접 보고하는 담당자를 지정해야 하며 경영진은 정기적인 보고를 +통해 보안 상태를 확인해야 한다. +•위험 기반 사이버보안 조치 이행 의무 +기관은 서비스 제공에 사용되는 네트워크 및 정보시스템의 위험을 관리하고 사고 영향을 +최소화하기 위한 기술적·운영적·조직적 조치를 의무적으로 수행해야 한다. 유럽연합 +집행위원회는 이를 구체화하기 위해 이행규정을 채택하고 있으며, 기관의 위험 관리 체계 확립 및 +지속적 모니터링·로깅·권한 관리 강화 등을 요구한다. +표 3 +NIS2 이행규정 구성 +이행규정 본문 +NIS2 Directive에 따라 발간된 공식 EU 이행규정 +부속서에 포함된 기술적·방법론적 요구사항을 적용하고 해석하는 기준을 설명 +부속서 + +## 1. 네트워크 및 정보시스템 보안 정책 + + +## 2. 위험관리 정책 + + +## 3. 사고 대응 + + +## 4. 비즈니스 연속성 및 위기관리 + + +## 5. 공급망 보안 정책 + + +## 6. 네트워크 및 정보 시스템 획득, 개발 및 유지보수에 대한 보안 + + +## 7. 사이버보안 위험관리 조치의 효과를 평가하기 위한 정책 및 절차 + + +## 8. 기본 사이버 위생 관행 및 보안 교육 + + +## 9. 암호화 + + +## 10. 인적 보안 + + +## 11. 접근통제 + + +## 12. 자산 관리 + + +--- + + +## 제1장 개 요 | 13 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +•중대한 사이버 사고 보고의무 +기관은 서비스 운영에 중대한 영향을 미치는 사이버 사고가 발생할 경우 컴퓨터 보안사고 +대응팀(CSIRT7) 또는 관할 당국에 즉시 보고해야 한다. 보고는 단계별로 24시간 내 초기 +보고, 72시간 내 사고 보고 및 초기 영향평가 제출, 1개월 내 최종 보고서를 제출해야 한다. +중대 사고 기준에는 직접 피해 50만 유로 또는 매출 5% 초과, 국민 생명·안전 영향, 광범위한 +사회적 피해 등이 포함된다. +•공급망 보안 관리 의무 +기관은 공급망을 포함한 외부 서비스 및 제품의 보안 위험을 관리할 책임이 있다. 이를 위해 +공급망 보안정책을 수립하고, 공급업체의 보안 관행을 평가할 기준을 마련해야 한다. 계약에는 +사고 통보 의무, 감사 권한, 직원 검증 및 교육 요구사항 등이 포함되어야 하며, 공급망 위험 관리 +계획은 연 1회 이상 또는 사고 발생 시 업데이트 되어야한다. +(2) CMMC +CMMC(사이버보안 성숙도 모델 인증)는 미국 국방부(DoD8)가 국방 산업 공급망 전반의 보안 +수준을 검증하기 위해 도입한 사이버보안 인증 체계이다. CMMC의 주된 목적은 계약업체 및 +하도급업체가 DoD와의 계약 이행 과정에서 처리, 저장 또는 전송하는 연방계약정보(FCI9)와 +통제된 비기밀 정보(CUI10)를 보호했음을 확인하는 것이다. 이를 통해 공급망 기업 전반에 걸쳐 +높은 수준의 사이버보안을 달성하기 위한 것이다. +•‌연방계약정보(FCI): 기업이 정부로부터 제공받거나 계약 수행 중 생성한 정보 중 일반에 +공개될 수 없는 정보 +•‌통제된 비기밀 정보(CUI): 법령, 정책, 정부 지침 등에 따라 접근과 배포가 제한되며, +공개되면 국가·공공·기술·산업적 측면에서 위험이 발생할 수 있어 보호가 필요한 민감 정보. +(정부가 직접 보유한 정보뿐 아니라 정부 프로젝트를 수행하는 민간 기업이 생성·관리하는 +정보도 포함) +7 ‌CSIRT (Computer Security Incident Response Team) : 컴퓨터 보안사고 대응 팀 +8 DoD (United States Department of Defense) : 미국 국방부 +9 FCI (Federal Contracting Information) : 연방계약정보 +10 CUI (Controlled Unclassified Information) : 통제된 비기밀 정보 + +--- + +14 | 우주 보안 모델 해설 및 적용사례집 +CMMC는 보안 요구사항의 구현 여부를 평가하고 검증하기 위한 인증 프레임워크로 +설계되었으며, 처리되는 정보의 중요도에 따라 요구되는 보안 수준을 3단계로 차등 적용한다. +국방부는 향후 계약 과정에서 CMMC 인증을 입찰 자격 요건으로 단계적으로 적용할 계획이다. +CMMC 인증은 국방부와 신규 계약 또는 하도급 계약을 체결하며 연방계약정보(FCI) 또는 +통제된 비기밀 정보(CUI)를 처리하는 모든 공급망 참여 기관에 요구된다. 국방부는 입찰 공고 및 +계약 문서에 요구되는 CMMC 인증 레벨을 명시하며, 해당 레벨 충족은 계약 수주를 위한 필수 +조건이다. 따라서 요구 레벨은 기업이 처리하는 정보의 민감도와 사업 중요도에 따라 레벨1, +레벨2, 레벨3 중 하나로 지정된다. +연방계약정보(FCI)를 처리하는 기업은 CMMC 레벨1의 15개 기본 보안 요구사항을 준수해야 +한다. 통제된 비기밀 정보(CUI)를 다루는 기업은 CMMC 레벨2의 NIST SP 800-17111 기반 +110개 보안 요구사항을 이행해야 한다. 더 높은 수준의 국가·군수 전략 자산과 관련된 조직은 +레벨3의 134개의 보안 요구사항을 충족해야 한다. +표 4 +CMMC 레벨 구분 +구분 +목적 +요구사항 +설명 +레벨 1 +연방계약정보 (FCI) 보호 +15개 +최소 보호 조치 및 기본 사이버 위생 유지 +레벨 2 +통제된 비기밀 정보 +(CUI) 보호 +110개 +핵심 레벨, NIST SP 800-171 기반 보안 통제 +레벨 3 +APT 대응 +134개 +지능형 지속적 위협(APT) 방어 수준 요구 +CMMC는 보안 통제 구현에 대한 평가와 인증 절차를 통해 검증되며, 법적 구속력을 갖는다. +요구된 CMMC 레벨을 충족하거나 인증 상태를 지속하지 못할 경우, 기업은 계약 수주 및 옵션 +행사, 계약 기간 연장 등이 제한될 수 있다. +레벨 2는 통제된 비기밀 정보(CUI)의 민감도에 따라 ‘1차: 자체 평가’와 ‘2차: 제3자 +평가기관(C3PAO12) 평가’로 나뉘어, 위험도에 따라 상이한 인증 수준을 요구한다. 요구 레벨별 +평가 방식은 아래와 같다. +11 ‌NIST SP 800-171 (Protecting Controlled Unclassified Information in Nonfederal Systems and Organizations) : +비연방시스템 환경에서 통제된 비기밀 정보(CUI)를 보호하기 위해 제시된 110개 기술·관리 통제로 구성된 보안 지침 +12 ‌C3PAO (CMMC Third-Party Assessment Organization) : 인증받은 제3자 평가기관 + +--- + + +## 제1장 개 요 | 15 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +표 5 +CMMC 요구 레벨별 평가 방식 +레벨 +평가 방식 +주기 +설명 +레벨 1 +자체 평가 + +준수 확인 제출 +매년 + 연방계약정보(FCI) 처리 조직 + 기본 보호 수준으로 문서화·운영 여부 확인 +레벨 2 +(1차) +자체 평가 +3년 + 통제된 비기밀 정보(CUI) 처리 기업 (중위험군) + 위험도 중간 수준 통제된 비기밀 정보(CUI) 취급, Self- +Assessment 허용 +레벨 2 +(2차) +제3자 인증 평가 +3년 + 국방부 지정 처리 기업 + 민감한 통제된 비기밀 정보(CUI) 취급 시 C3PAO 공식 인증 +요구 +레벨 3 +국방부 직접 평가 +3년 + 고위험·고가치 정보 처리 조직 + APT 방어 수준 요구, 정부 주관 심사 +한국의 위성·지상국·발사체·부품·소프트웨어 기업이 미국 우주산업 공급망에 참여하기 +위해서는 CMMC 인증이 사실상 필수 조건이다. 특히 부품 및 소프트웨어 납품, 위성 운영 지원, +데이터 처리를 수행하는 기업의 경우 통제된 비기밀 정보(CUI) 취급 가능성이 커 레벨 2 이상의 +인증이 필요할 수 있다. +나. 가이드라인 +(1) NIST IR 8401 (Satellite Ground Segment Security) +NIST IR 8401은 미국 국립표준기술연구소(NIST)가 발간한 보고서로, 지상국 운영에 NIST +사이버보안 프레임워크(CSF)를 적용하기 위한 지침을 제공한다. 이는 법적 강제성을 가진 +규정이나 인증 기준이 아니라, 위험 기반 접근을 지원하는 자율적 보안 프레임워크로서 우주산업 +이해관계자가 사이버 위험을 관리할 수 있도록 돕는 것을 목적으로 한다. +보고서의 범위는 상업용 우주 운영의 지상국 영역에 한정되며, 특히 임무 운영 센터(Mission +Operations Center, MOC)와 탑재체 제어 센터(Payload Control Center, PCC)가 수행하는 +명령 송신, 원격 측정 데이터 수신, 상태 모니터링 기능 등을 포함한다. 지상국 중심의 실무적 +위험관리 지침을 제공하기 위한 목적이므로, 우주 비행체 및 사용자 단말은 범위에 포함되지 +않는다. + +--- + +16 | 우주 보안 모델 해설 및 적용사례집 +IR 8401은 지상국의 임무 운영및 명령·제어(Command & Control) 기능이 사이버 공격에 +노출될 경우, 우주 시스템 전체뿐 아니라 국가 안보와 경제 활동에 심각한 영향을 초래할 수 +있다고 강조한다. 이에 따라 지상국에서 발생 가능한 위험을 체계적으로 관리하고, 운영 환경과 +이해관계자 간 협업 과정을 기반으로 보안 역량을 강화하는 것이 필수적임을 제시한다. +NIST Cybersecurity Framework(CSF)는 미국 국립표준기술연구소가 산업 전반의 +사이버보안 역량 강화를 위해 제시한 위험 기반 보안 프레임워크로, 조직이 사이버보안 위험을 +식별·관리·감소하기 위한 체계적 접근 방법을 제공한다. NIST CSF 1.1은 식별(Identify), +보호(Protect), 탐지(Detect), 대응(Respond), 복구(Recover)의 다섯 가지 핵심 기능으로 +구성되며, 이는 조직이 전 주기에 걸쳐 보안을 수행할 수 있는 구조를 제공한다. +그림 1 +NIST CSF + +--- + + +## 제1장 개 요 | 17 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +표 6 +NIST CSF 목표 +기능 +목표 +식별 +(Identify) +시스템, 자산, 데이터 및 역량에 대한 사이버보안 위험을 관리하기 위해 조직의 이해를 구축 +보호 +(Protect) +중요 인프라 서비스의 제공을 보장하기 위해 적절한 보호 조치를 개발하고 구현 +탐지 +(Detect) +사이버보안 이벤트의 발생을 식별하기 위해 적절한 활동을 개발하고 구현 +대응 +(Respond) +탐지된 사이버보안 사고에 대해 조치하기 위해 적절한 활동을 개발하고 구현 +복구 +(Recover) +회복 탄력성을 유지하고 사이버보안 이벤트로 인해 손상된 역량 또는 서비스를 복원하기 위해 +적절한 활동을 개발하고 구현 +NIST IR 8401은 CSF의 다섯 가지 핵심 기능인 식별, 보호, 탐지, 대응, 복구를 지상국 환경에 +적용하기 위한 실무 지침으로 구성한다. NIST IR 8401은 일반적인 CSF 설명에 그치지 않고, +각 기능별 요구사항을 지상국 운영 특성을 반영한 세부 활동을 매핑하여 구체적인 운영 지침을 +제시한다. +표 7 +NIST CSF와 지상국 영역 적용성 +CSF 구분 +항목 개수 +지상국 영역 적용 +식별 +(Identify) +29개 +지상국 영역 전반의 위험을 체계적으로 파악하기 위한 단계로, 지상국의 +환경과 자산(하드웨어, 소프트웨어, 인력), 거버넌스 구조 및 공급망을 +대상으로 위험을 식별하고 우선순위를 설정하는 데 중점 +보호 +(Protect) +39개 +지상국 영역의 핵심 기능이 침해되거나 중단되는 것을 예방하기 위해 명령 +송신 및 원격 측정 수신 시스템에 대한 접근 통제, 데이터 보호, 유지보수 절차, +보호 기술의 구현 등을 포함 +탐지 +(Detect) +18개 +이상 징후 모니터링 활동을 다루며 네트워크뿐만 아니라 우주선과의 통신 +채널(TT&C)을 통합적으로 모니터링하여 공격 및 이상 징후를 적시에 +발견하는 것이 핵심 +대응 +(Respond) +16개 +사고의 확산과 영향을 최소화하기 위해 이해관계자(MOC, PCC 등)와의 정보 +공유, 사고 분석, 완화 조치 및 대응 계획의 지속적 개선을 강조 +복구 +(Recover) +6개 +침해사고 이후 정상 운영 상태를 신속히 회복하는 것을 목표로, 복구 계획 +실행, 이해관계자와의 복구 현황 소통, 사고 대응 경험을 반영한 복구 계획 +업데이트를 포함 + +--- + +18 | 우주 보안 모델 해설 및 적용사례집 +보고서는 이러한 CSF 기반 프로파일 구조를 지상국 보안의 고정된 최소 기준이 아니라, +조직별 임무 중요도·자산 구성·운영 방식에 맞게 조정하거나 확장할 수 있는 형태의 실무 지침을 +제시한다. +우주 기업은 NIS2 제21조의 사이버 위험 관리 조치나 CMMC 레벨 2·3의 기술적 통제 +요구사항을 실제 운영 환경에 적용할 때, 단순한 정책 수준의 요구사항만으로는 보안 통제를 +구체적으로 구현하기 어렵다. NIST IR 8401은 지상국 환경에 특화된 실질적·기술적 구현 기준을 +제공함으로써, 이러한 규제 요구사항을 실무적으로 충족할 수 있는 보안 지침으로 활용될 수 있다. +(2) NIST IR 8270 (Commercial Satellite Operations Security) +NIST IR 8270은 미국 국립표준기술연구소(NIST)가 발간한 우주 시스템 사이버보안 +지침으로, NIST Cybersecurity Framework(CSF)를 기반으로 우주 미션 운영 환경에서 위험을 +식별·평가·관리하기 위한 체계적인 접근 방법을 제시한다. 본 보고서는 법적 강제력을 가지는 +규정이나 인증 기준이 아닌 권고이며, 우주시스템 보호 전략을 수립할 수 있도록 지원하는 것을 +목적으로 한다. +IR 8270은 우주 시스템의 기술 구조와 운영 특성을 반영한 실무 중심의 보안 프레임워크 적용 +방식을 제시하여, 산업·정부·방위·연구기관의 미션 보안 요구사항을 충족할 수 있는 관리 기준을 +제공한다. +본 문서는 우주 시스템의 전반적인 운영 환경에서 발생 가능한 사이버보안 위험을 다루며, 위성 +플랫폼과 지상 제어 인프라 간 상호작용을 포함한 전체 시스템 관점의 보안 관리를 제시한다. 분석 +대상은 우주 시스템 전체를 기반으로 하며, 단순한 개별 구성요소 보호가 아니라 시스템 간 연계, +운용 절차, 데이터 흐름 관점의 위험 관리를 중심으로 다룬다. +•우주 비행체 수명주기 단계 +우주 비행체는 설계 및 개발, 조립, 발사 전, 발사, 궤도 점검, 운영, 그리고 폐기에 이르는 +다양한 수명 주기 단계를 거치며, 각 단계는 시스템에 고유한 사이버보안 위험을 가진다. 각 +단계별 주요 활동과 핵심적인 보안 고려 사항은 다음과 같이 요약할 수 있다. + +--- + + +## 제1장 개 요 | 19 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +그림 2 +우주 비행체 생명주기 +표 8 +우주 비행체 생명주기 별 보안 고려사항 +단계 +주요 활동 +핵심 보안 고려사항 +설계 및 개발 +시스템 요구사항 정의, SW/지상국 +인터페이스 설계 +공급망 검증, 설계 위변조 방지, 취약점 사전 +제거(보안 내재화) +조립 +하드웨어 제작, 센서·페이로드 통합, 품질검증 +HW·FW 위변조 방지, 인증된 구성요소 사용, +조립 과정 보안 +발사 전 +초기 구성, 테스트, 지상국 연동 +구성 무결성 검증, 접근 통제, 데이터 로딩 +보호 +궤도 점검 +초기 명령 수행, 궤도 안정화 +명령 채널 보안, 통신 암호화, 재전송 +공격·간섭 방지 +운영 +임무 수행, 소프트웨어 업데이트 +원격제어 보호, 펌웨어 업데이트 검증, +지상국·링크 보호, 이상행위 모니터링 +폐기 +임무 종료, 데이터 삭제 및 처리 +데이터 영구삭제, 오용 방지, 궤도 파편 +리스크 최소화 +NIST IR 8270은 이 단계들이 모두 중요하지만, 특히 탐지, 정보 처리, 데이터 획득 및 통신이 +이루어지는 운영 단계에 중점을 두어 CSF 적용 방안을 설명한다. 우주 환경의 특성상 발사 후에는 +하드웨어 변경이 불가능하거나 제한되므로, 설계 단계에서부터 보안 통제를 통합하고, 장기적인 +사이버 위협에 대응할 유연성을 확보하는 것이 중요하다. + +--- + +20 | 우주 보안 모델 해설 및 적용사례집 +•CSF 프로파일 기반 위험관리 지침 +NIST IR 8270은 상업용 우주 기업이 사이버보안 위험 관리를 시작하고 지속적으로 개선할 +수 있도록 NIST 사이버보안 프레임워크(CSF)를 기반으로 하는 방법론을 제시한다. CSF는 식별, +보호, 탐지, 대응, 복구의 5가지 기능으로 구성되어 있다. +보고서는 조직이 CSF를 활용하여 현재 보안 수준을 반영한 ‘현재 프로파일’과 달성하고자 +하는 목표 보안 수준을 정의하는 ‘목표 프로파일’을 설정하고, 두 프로파일 간의 보안 수준 격차를 +분석하여 실행 계획을 수립하는 7단계 접근법을 제시한다. +표 9 +NIST CSF 7단계 접근법 +NIST CSF +실천 7단계 +사례 +(저궤도 소형위성 플랫폼) +산출물 / 목적 +1단계: 범위 및 +우선순위 설정 +소형 위성 플랫폼 및 탑재체, 내부 통신, +명령·제어 채널을 보안 범위로 확정 +보안 프로그램 범위 및 우선순위 정의, +현재/목표 프로파일 설정 기반 확보 +2단계: 방향 설정 +중요 자산(통신·자세제어)을 식별하고 +재밍, 스푸핑, 명령 탈취 위협을 정의 +임무·규제·운영 요구사항 반영, 위협 +모델 및 보호기준 설정 +3단계: 현재 +프로파일 생성 +현행 CSF 하위범주(예: PR.AC-1, +PR.DS-1) 이행 현황 문서화 +현 상태의 보안 능력 및 통제 수준 평가 +4단계: 위험 평가 +수행 +외부 위협 정보를 활용하여 심각도·발생 +가능성 기반 위험 우선순위 산정 +보안 위험 식별 및 영향분석, 자원 배분 +우선순위 설정 +5단계: 목표 +프로파일 생성 +필요 보안 결과 달성을 위한 CSF 하위범주 +목록 정의 (예: PR.AC-3, ID.RA-1) +목표 보안 수준 정의 및 요구 통제 도출 +6단계: Gap 분석 및 +우선순위 지정 +현재 vs 목표 간 차이(Gap) 도출 및 통제 +필요 영역 정의 +개선 과제 및 실행계획 수립 +7단계: 실행 계획 +실시 +인증 기반 통신(PR.AC-7) 적용, C2 링크 +공격 대응 자율 안전모드 구축(PR.IP-9) +지속적 개선 기반 사이버보안 프로그램 +운영 +우주 기업은 NIST CSF 기반 보안 통제를 위성 운영 환경에 적용할 때 적용 대상 +(우주·지상·사용자 등)과 우주 비행체 생명주기별로 상이한 요구사항을 고려해야 한다. 그러나 +정책 수준의 지침만으로는 복잡한 운영 환경에 맞는 보안 관리 전략을 수립하기 어렵다. NIST IR +8270은 CSF 프로파일 개발을 위한 7단계 접근법과 사례를 제공하여, 조직이 현재 프로파일과 +목표 프로파일의 Gap을 정의하고 실행 계획을 수립하도록 지원한다. 이를 통해 우주 산업은 NIS2 +제21조의 사이버 위험 관리 조치나 미국 CMMC 레벨 2·3과 같은 규제 준수 체계를 기술적으로 +구현하는 데 활용할 수 있다. + +--- + + +## 제1장 개 요 | 21 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +(3) ENISA Space Threat Landscape +유럽사이버보안청(ENISA)는 상업용 위성 산업에 영향을 미치는 최신 사이버 위협 환경을 +체계적으로 식별·평가하고, 산업이 적용 가능한 현실적인 보안 통제 및 완화 전략을 제시하기 위해 +본 보고서를 발간하였다. 보고서는 최근 발생한 주요 위성 기반 사이버 공격 사례를 분석하여 우주 +시스템의 침해가 사회·경제·국가 안보 전반에 미칠 수 있는 광범위한 영향을 강조한다. +또한 EU의 NIS2 Directive가 2025년 1월부터 우주 분야를 필수 서비스로 분류하여 강화된 +보안 요구사항 준수를 요구함에 따라, 본 보고서는 산업계가 규제 대응과 운영 복원력 향상을 +달성할 수 있도록 위협 기반 보안 기준과 정책 설계 참고자료를 제공하는 것을 주요 목적으로 +한다. +본 보고서는 상업용 위성 시스템의 전체 생명주기 전반에서 고려해야 하는 사이버 위협과 +취약성을 다루며, 이를 구성하는 자산과 관련 행위자를 분석 범위로 정의한다. 유럽사이버 +보안청(ENISA)은 위성 운영 구조를 설명하기 위해 우주·지상·사용자·인적자산의 네 개 부문으로 +자산을 분류한다. +표 10 +유럽사이버보안청(ENISA) 자산분류 +영역 +설명 +지상 영역 +(Ground Segment) +위성 통신 중계, TT&C, 통제 센터, 생산·운송·발사 인프라 등 지상 기반 운영 +자산 +우주 영역 +(Space Segment) +궤도상의 버스(BUS) 플랫폼 및 임무 수행을 위한 탑재체(Payload)로 구성된 +실제 위성 자산 +사용자 영역 +(User Segment) +소비자 및 기관이 서비스를 이용하기 위한 단말 장치(예: VSAT, 위성전화, +GPS 수신기, 항공기 시스템 등) +인적자산 영역 +(Human Resources) +개발·운영·지원 인력과 공급망 참여자를 포함한 인적 자산 요소 +유럽사이버보안청(ENISA)은 위성 시스템의 사이버 공격을 수행할 수 있는 행위자를 다음과 +같은 범주로 정의하며, 이들 각각은 위성 생태계 자산 전반에 걸쳐 각각 다른 공격 목표와 방법을 +보유한다. + +--- + +22 | 우주 보안 모델 해설 및 적용사례집 +표 11 +유럽사이버보안청(ENISA) 위협 행위자군 +위협 행위자군 +동기 및 특징 +위협 대상 자산 / 가능 행위 예시 +국가 연계 행위자 +전략적 정보 수집, 군사·정치적 +이익, 통신 감청 또는 교란 +위성 Bus / Payload, 통신 링크, 지상국 인프라 / +명령 제어 탈취, 감청, 위성 교란 +사이버 범죄자 +금전적 이익, 데이터 유출, 서비스 +방해 +지상국, 통신, 데이터 서비스 / 데이터 탈취, +랜섬웨어, 서비스 거부 +고용된 해커 +고객 의뢰 작업, 외주 공격, 공격 +서비스 제공 +위성 및 Ground 인프라 / 위성 지상국 침투, 위성 +제어권 탈취, 악성 신호 송출, DoS +내부자 +내부 정보 접근, 권한 오남용, 복수 +동기 +제조·조립 시설, 지상국 / 하드웨어 변조, 악성 코드 +삽입, 권한 남용 +해커티비스트 / +시민운동자 +정치적·이념적 목적, 사회적 +메시지 +통신 위성, 데이터 서비스 / 서비스 방해, 방송 +간섭, 정보 공개 +본 보고서는 상업용 위성 생태계에 영향을 미치는 실제 공격 벡터와 그로 인한 잠재적 +영향, 그리고 이를 최소화하기 위한 통합적 보안 전략을 제시한다. 이 보고서는 위성 시스템이 +공급망·통신·운영·인적 요소 등 전체에 걸쳐 상호 연결된 구조이기 때문에 공격이 전체로 확산될 +수 있음을 강조한다. +(4) 민간우주시스템의 사이버보안대책 가이드라인 +민간우주시스템의 사이버보안대책 가이드라인은 민간 우주기업의 위성 및 지상 시스템 전반에 +공통적으로 고려해야 할 사이버보안 사항을 정리한 가이드라인이다. 민간 우주 시스템을 구성하는 +주요 요소와 연계된 구조를 기준으로 보안 범위와 대책을 제시한다. +본 가이드라인은 민간 우주 시스템 구성 요소를 기능 단위로 구조화한 표준 모델을 제시한다. +이는 특정 사업자의 모델에 국한되지 않고 민간 우주 산업 전반에 공통으로 존재하는 요소를 +정리한 것이다. 가이드라인에서 제시하는 표준 모델의 구성과 주요 보안 관점은 다음과 같다. + +--- + + +## 제1장 개 요 | 23 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +표 12 +민간우주시스템 가이드라인 표준 모델 구성 +구분 +주요 구성 요소 +보안 관점 +우주 영역 +위성 본체, 탑재체 +물리적 접근 제한, 원격 명령 무결성, 장기 운용 +안정성 +지상 영역 +위성 운용 시스템, 지상국, +네트워크 인프라 +접근통제, 운영 연속성, 내부·외부 침해 대응 +사용자 영역 +위성 통신 시스템, 데이터 이용 +시스템 +데이터 기밀성·무결성, 서비스 신뢰성 +인적·조직적 요소 +개발·제조, 운영 조직, +외주·공급망 +절차 관리, 내부자 위협, 공급망 리스크 +우주 시스템 구성 요소 간의 관계를 정의한 표준 모델을 기반으로, 사이버 공격이 어느 지점에서 +시작되어 어떤 경로로 확산되고, 최종적으로 어떤 영향을 미치는지 설명하는 위협 시나리오를 +제시한다. 예를 들어, 지상 시스템 침해를 시작으로 위성 명령 체계에 영향을 미치거나, 통신 +시스템 교란이 서비스 중단으로 확산되는 등, 하나의 침해가 시스템 전반으로 전파되는 과정을 +표준 모델을 통해 설명한다. +위협 시나리오에서 도출된 위험에 대응하기 위한 보안 대책은 조직·거버넌스 중심의 관리 +체계를 다루는 공통적 보안 대책과 우주 임무의 특수성을 반영한 우주 시스템 보안 대책으로 +나누어 제시한다. +공통적 보안 대책은 위성 소유자, 개발·제조 사업자, 운용 사업자 등 민간 우주 시스템에 +관여하는 모든 조직이 기본적으로 갖추어야 할 조직·거버넌스 중심의 관리 체계를 의미한다. 우주 +시스템 보안 대책은 위성의 수명 주기와 시스템 구조를 고려하여, 위성 본체, 지상 운용 시스템, +통신·데이터 이용 시스템, 개발·제조 시스템 등 서브시스템 별로 중점 관리가 필요한 기술적 +통제를 정리한 것이다. + +--- + +24 | 우주 보안 모델 해설 및 적용사례집 +표 13 +민간우주시스템 가이드라인 보안 대책 +구분 +보안 대책 내용 +공통적 보안 +대책 + 경영진 주도의 사이버보안 리스크 관리 체계 구축 및 조직 차원의 책임·의사결정 구조 정립 + NIST CSF, ISO/IEC 2700115 등 기존 정보보호 관리체계 및 사이버보안 프레임워크의 활용 + 클라우드 서비스 이용 시 법령 및 임무 중요도에 따라 적절한 클라우드 인증 서비스 선택 + 재택근무 등 원격 근무 환경에 대한 보안 통제 및 운영 기준 마련 + 내부 부정행위의 예방·조기 발견을 목표로 관련 기존 기준을 참고해 대응 방안을 검토 + 관련 법령에 따른 외부 사고 보고 대상, 절차 및 연락 체계 정비 +우주 시스템 +보안 대책 + 우주 관련 법령에서 요구하는 데이터 보호 및 안전 관리 조치 준수 + 위성 본체에 대한 통신 보호, 명령 무결성 확보, 재밍 대응 및 공급망 보안 강화 + 지상 운용 시스템의 물리적·기술적 보호, 운영 연속성 확보 및 취약점 관리 + 위성 통신 및 데이터 이용 시스템의 기밀성·무결성·가용성 확보를 위한 기술적 통제 +본 가이드라인은 민간 우주 시스템의 구성과 운용 방식에 따라 각 조직이 스스로 보안 위험을 +식별하고 적절한 대책을 선택하여 적용할 수 있는 기준을 제공한다. 민간 우주 기업은 본 +가이드라인의 표준 모델과 시나리오를 참조하여, 자사 환경에 최적화된 보안 우선순위를 설정하고 +실용적인 대책을 구축할 수 있다. +15 ‌국제 표준화 기구(ISO)에서 제정한 정보보호 관리체계에 대한 요구사항을 규정한 국제 표준. 정보 보호 분야에서 가장 권 +위 있는 국제 인증 표준 + +--- + + +## 제1장 개 요 | 25 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +우주 보안모델 + +## 1. 우주 보안모델 + + +## 2. 우주 보안 체크리스트 + +제 2 장 + +--- + +26 | 우주 보안 모델 해설 및 적용사례집 +본 장에서는 우주 보안모델과 GSaaS 아키텍처, 우주 공급망 아키텍처를 소개하고 우주보안 +체크리스트를 설명한다. +제1절 +우주 보안모델 +우주 아키텍처는 다음 그림과 같이 우주 영역, 지상국 영역, 위성 활용 서비스 영역으로 +구성된다. + +## 제2장 + +우주 보안모델 + +--- + + +## 제2장 우주 보안 모델 | 27 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +그림 3 +우주 아키텍처 +우주 아키텍처는 고도 범위에 따라 다양한 위성이 위치한 우주 영역과 위성으로부터 페이로드 +데이터(payload data)를 송수신하고, 위성을 제어하기 위한 시스템으로 구성된 지상국 영역, +그리고 위성에 기반한 서비스를 제공하는 위성 활용 서비스 영역으로 구분된다. +■ 우주 영역 +우주 영역은 우주 공간에 위치하는 자산으로 구성되며, 대표적인 자산으로 인공위성(이하 +‘위성’이라 함)이 있다. 위성은 위성의 전반적인 구동을 수행하는 본체와 위성의 임무를 수행하는 +탑재체로 구분되며, 세부 구성요소를 표현한 아키텍처는 아래 그림과 같다. + +--- + +28 | 우주 보안 모델 해설 및 적용사례집 +그림 4 +위성 아키텍처 +본체는 열제어 시스템, 전력공급 시스템, 위성제어 시스템, 궤도제어 시스템, 위성내부 버스, +명령 및 데이터처리시스템, 통신시스템 등으로 구성되고, 탑재체는 위성 본체에 탑재되어 위성에 +부여된 임무를 수행하게 된다. 탑재체의 임무에 따라 위성의 역할이 결정되며, 페이로드, 페이로드 +데이터처리시스템 및 통신시스템으로 구성되어 있다. +■ 지상국 영역 +지상국 영역은 위성을 운영 및 제어하기 위한 위성운영 영역과 페이로드에서 데이터를 수신하고 +수신한 데이터를 서비스하기 위한 페이로드 데이터 이용 영역으로 구분된다. 지상국 영역의 세부 +구성요소를 제시하는 아키텍처는 아래 그림과 같다. + +--- + + +## 제2장 우주 보안 모델 | 29 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +그림 5 +지상국 아키텍처 +위성운영 영역은 위성상태 모니터링 시스템, 궤도제어시스템, 미션제어 및 운영지원 시스템, +위성제어 시스템, 긴급대응 및 위기관리 시스템 등으로 구성되고, 페이로드 데이터 이용 영역은 +데이터 수신 및 처리 시스템, DB 분석 및 시각화 시스템, 페이로드 데이터 서비스 시스템, +실험계획 및 제어시스템, 관측요청 접수 시스템 등으로 구성되어 있다. +■ 위성 활용 서비스 영역 +위성 활용 서비스 영역은 위치정보를 제공해 주는 위성항법 서비스와 통신 및 방송을 +중계해주는 위성방송통신 서비스로 구분된다. 위성항법서비스는 위성으로부터 위치정보를 +수신하여 지상교통 및 항공교통에서의 차량 운행에 사용되는 서비스이고, 위성통신서비스는 +위성안테나와 통신위성의 서비스를 활용하여 지상의 인터넷 서비스를 사용할 수 있도록 지원해 +주는 서비스이며, 위성방송서비스는 지상 방송국의 방송서비스를 위성을 활용하여 중계하는 방송 +서비스이다. + +--- + +30 | 우주 보안 모델 해설 및 적용사례집 +본 보고서에서는 우주보안모델(GSaaS, 우주 공급망)에서 제시한 GSaaS 아키텍처와 우주 +공급망 아키텍처를 소개한다. +가. GSaaS 아키텍처 +GSaaS는 위성과 통신하고 제어하는 지상국 기능을 클라우드를 활용하여 제공하는 서비스로, +위성과 통신하는 안테나 영역과 위성 서비스를 위한 데이터 처리를 수행하는 지상국 영역, 위성 +서비스를 제공하는 위성 운영사 영역을 범위로 한다. +그림 6 +GSaaS 아키텍처 +안테나를 통해 위성과 신호를 송수신하며, 지상국은 원활한 통신을 위해 위성의 상태를 +모니터링하고 제어한다. 클라우드 환경에서는 데이터의 저장과 서비스 운영을 지원하고, 위성과의 +통신을 위한 안테나 예약 기능을 제공한다. 위성 운영사는 GSaaS에 접속하여 수집된 데이터를 +분석 및 가공하고, 처리된 데이터를 활용하여 사용자에게 다양한 위성 서비스를 제공한다. + +--- + + +## 제2장 우주 보안 모델 | 31 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +나. 우주 공급망 아키텍처 +위성의 생애 주기(설계/개발, 준비/조립, 발사, 궤도진입 확인, 운영, 위성 해체)를 기반으로 +위성/발사체 제조사, 지상국 운영사, 위성 운영사로 구성되어 있다. +그림 7 +우주 공급망 아키텍처 +위성/발사체 제조사는 탑재체를 포함한 위성 본체와 발사체를 제작하고, 탑재되는 +소프트웨어를 개발하는 역할을 수행하며, 위성 운용의 기초가 되는 하드웨어와 소프트웨어 +자산을 공급하는 영역이다. 지상국 운영사는 위성과 지상 간 통신을 관리하고, 위성 운용에 필요한 +시스템과 소프트웨어를 운용하여, 위성이 임무를 안정적으로 수행할 수 있는 환경을 제공하고 +운영을 지원하는 영역이다. 위성 운영사는 위성으로부터 수신한 탑재체 데이터를 목적에 따라 +분석 및 처리하고, 이를 활용하여 위성 활용 서비스를 제공하는 영역이다. + +--- + +32 | 우주 보안 모델 해설 및 적용사례집 +제2절 +우주 보안 체크리스트 +우주기업 보안담당자가 기업의 현재 보안상황을 진단하고 우주보안 대책을 수립할 수 있도록 +우주보안 체크리스트를 개발하였다. 우주 보안 체크리스트는 CMMC16 2단계 통제항목을 +기준으로 한국형 위험관리체계인 K-RMF17, 유럽연합 보안 Directive인 NIS218, 국내 정보보호 +관리체계(ISMS19)를 반영하여 작성하였다. 다음 표는 우주보안 체크리스트 12개 분야 53개 +항목이다. +표 14 +우주보안 체크리스트 +분야 +보안항목 +보안항목 설명 +AC-01 +접근통제 정책 +• 시스템 접근권한을 부여한 기기, 사용자 및 프로세스에 한하여 +접근을 허용해야 한다 +AC-02 +최소권한 +• 사용자에게 부여된 과업 및 직책을 수행하는데 필요한 최소한의 +권한을 부여한다. +AC-03 +특수 권한 사용 +• 특수 권한 사용자가 실행할 수 있는 기능에 대한 시스템 접속을 +제한하고 특수 권한으로 실행되는 기능들을 감사해야 한다. +AC-04 +정보흐름 통제 +• 시스템 내부 및 시스템 간 정보 흐름을 통제해야 한다. +AC-05 +직무 분리 +• 개인의 직무를 분리하고 이에 따라 시스템의 접근권한을 부여해야 +한다. +접근통제 +(AC) +AC-06 +로그인 시도 실패• 일정 기간 동안 연속으로 유효하지 않은 로그인 시도를 제한하고 +최대 허용 횟수를 초과하면 자동으로 계정을 잠궈야 한다 +AC-07 +세션 잠금 및 종료 +• 일정 기간 동안 세션 사용이 없거나 사용자에 의한 세션 잠금 +요청이 있을 경우 해당 세션을 잠그고,세션 종료 조건 발생 시 +자동으로 세션을 종료해야 한다 +AC-08 +원격 접근통제 +• 승인된 업무 및 사용자에 대해서만 원격접속을 허용하고 원격접속 +세션을 암호화 및 모니터링해야 한다. +16 ‌CMMC : Cybersecurity Maturity Model Certification +17 ‌K-RMF : Korea - Risk Management Framework +18 ‌NIS : network and information systems +19 ‌ISMS : Information Security Management System + +--- + + +## 제2장 우주 보안 모델 | 33 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +분야 +보안항목 +보안항목 설명 +AC-09 +무선 접속 +• 시스템에 무선접속시 승인받은 사용자/기기 인증을 수행하고 +통신세션을 암호화해야 한다. +AC-10 +모바일기기 연결 +통제 +• 승인된 모바일 장치에 대해서만 시스템의 연결을 허용하고 모바일 +장치에서 정보를 암호화해야 한다. +AC-11 +외부 연결 통제 +• 외부 시스템과 조직 내부시스템에 대한 연결 및 사용을 확인하고 +통제해야 한다 +AC-12 +공공 정보 통제 +• 공개적으로 접근 가능한 시스템에 정보를 게시하기 전에 해당 +내용을 검토하여 중요정보가 게시되지 않도록 한다. +식별 및 인증 +(IA) +IA-01 +식별 및 인증 +• 시스템 사용자, 프로세스 및 장치를 식별하고 인증해야 한다. +IA-02 +다중 인증 +• 특수 권한 계정으로 네트워크에 접속할 경우에는 다중 인증을 +사용하고 재전송 공격 방지 인증 메커니즘을 적용해야 한다. +SC-01 +경계 보호 +• 조직 시스템의 외부 경계와 주요 내부 경계에서의 통신(송수신 +정보)을 모니터링, 제어 및 보호해야 한다 +SC-02 +보안공학 원칙 +적용 및 기능 분리 +• 보안 아키텍처는 심층 방어 원칙을 기반으로 설계하고, 시스템의 +관리 기능과 사용자 기능을 명확히 분리하여 운영하여야 하며, +시스템 개발 과정에서는 보안공학 원칙을 적용하여야 한다. +SC-03 +저장 및 전송 정보 +보안 +• 저장 및 전송되는 정보의 기밀성 및 무결성을 보호해야 한다. +시스템 및 +통신 보안(SC) +SC-04 +통신 보안 +• 기본적으로 모든 트래픽을 거부하고, 필요한 트래픽만 예외적으로 +허용하는 방식으로 운용하고, 로컬 및 원격연결을 동시에 하지 +못하도록 통제하며 통신세션 종료 이후 또는 일정 기간동안 작업이 +없을 경우 통신 세션과 관련된 연결을 종료해야 한다. +SC-05 +암호화 +• 중요 정보는 암호화하고 암호화를 위한 암호키를 설정하고 +관리해야 한다. +SC-06 +협업 컴퓨팅 장치 +• 협업 컴퓨팅 장치의 원격 활성화를 금지하고 장치가 사용 중일 때는 +물리적으로 나타나는 표시를 통해 사용자가 장치가 사용 중임을 +인식할 수 있어야 한다. +SC-07 +모바일 코드 및 +VoIP 통제 +• 시스템 내 모바일 코드 및 VoIP의 사용을 모니터링·통제해야 한다. + +--- + +34 | 우주 보안 모델 해설 및 적용사례집 +분야 +보안항목 +보안항목 설명 +SI-01 +취약점 점검 및 +결함교정 +• 시스템과 애플리케이션의 취약점을 주기적으로 검사하고, 해당 +시스템에 영향을 미치는 신규 취약점이 확인될 때마다 검사하여 +시스템의 결함을 식별, 조치, 보고해야 한다 +시스템 및 +정보무결성 +(SI) +SI-02 +악성코드 방지 +• 악성코드 식별 및 제거를 위해 시스템에 악성코드 방지솔루션을 +설치하고 파일 다운로드시 실시간으로 검사해야 한다. +SI-03 +보안 경보, 권고 +• 시스템 보안 경고와 권고를 모니터링하고 이에 대한 대책을 +수립해야 한다 +SI-04 +시스템 및 통신 +트래픽 모니터링 +• 시스템의 무단 사용을 모니터링하고 송ㆍ수신되는 네트워크 +트래픽을 주기적으로 모니터링해야 한다. +SO-01 +유지보수 통제 +• 시스템 유지관리에 사용되는 도구, 기술, 메커니즘 및 인력을 +통제해야 한다 +- 원격 유지보수 시스템 외부 반출 전 정보소거 +- 유지보수용 저장매체 악성코드 검사 +- 원격 유지보수시 사전승인, 강화된 인증, 유지보수 활동 기록, +업무 종료시세션 종료 +- 유지보수 인력 관리 감독 +시스템/서비스 +운영 관리 +(SO) +SO-02 +시스템 감사 및 +감사기록 분석, +보고 +• 불법적이거나 승인되지 않은 시스템 활동을 모니터링, 분석, 조사 +및 보고하기 위한 시스템 감사 로그 및 기록을 생성 및 보관해야 +하고 부적절하거나 비정상적 활동을 분석 및 보고해야 한다. 또한 +감사 정보를 보호하고 감사 로깅 오류시 경고한다. +SO-03 +시간동기화 +• 감사기록을 위한 타임스템프생성을 위해 내부 시스템(NTP서버) +시간을 사용해야 한다. +SO-04 +휴대용 저장장치 +(저장매체 등) +보안 +• 중요정보가 저장된 저장매체 및 휴대용 PC는 물리적으로 안전하게 +보관하고 기밀성, 무결성을 보호하기 위해 통제해야 한다. +- 저장매체 이동시 암호화 등으로 보호 +- 폐기 또는 재사용을 위해 반출되기 전에 정보소거하거나파기 +- 매체 백업 정보의 기밀성 보호 +SO-05 +형상관리 +• 시스템 구축 및 운영의 통제기준이 되는 최신화된 형상관리 +기준선(Baseline)을 식별하고 시스템 정보기술 제품들의 보안 +환경설정을 수립 및 문서화해야 한다. +SO-06 +시스템 및 +애플리케이션 +보안 요구사항 +정의 +• 사업 기획 단계에서 시스템 및 서비스에 대한 정보보안 요구사항을 +정의해야 하며, 안전한 코딩 방안을 포함하여야 한다 + +--- + + +## 제2장 우주 보안 모델 | 35 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +분야 +보안항목 +보안항목 설명 +SO-07 +시스템/ +애플리케이션 +변경관리 +• 시스템 및 애플리케이션의 변경 사항을 검토, 승인/거부하고 +변경내역을 기록해야 하며 변경 전에 변경에 대한 잠재적인 보안 +영향을 분석해야 한다. +SO-08 개발 시험 및 평가 +• 사전 정의된 보안 요구사항에 따라 정보시스템이 도입 또는 +구현되었는지를 검토하기 위하여 법적 요구사항 준수, 최신 +보안취약점 점검, 안전한 코딩 구현 등의 검토 기준과 절차를 +수립·이행하고, 발견된 문제점에 대한 개선조치를 수행하여야 +한다. +SO-09 +기능최소화 및 +사용자설치 +소프트웨어 통제 +• 필수 기능만 제공하도록 시스템을 설정하고 사용자가 설치한 +소프트웨어를 통제하고 모니터링한다. +사고 대응 +(IR) +IR-01 +사고 처리 및 +테스트 +• 사고대응 준비, 사고 탐지, 사고 조사/분석, 피해 시스템의 분리 및 +차단, 피해 시스템 복구를 포함한 사고 처리 대응 체계를 구축하고 +주기적으로 사고대응 테스트를 실시해야 한다 +IR-02 +사고 보고 +• 사고를 인지한 인원이 지정한 시간 내에 사고대응 부서에 신고하고 +사고대응 부서는 사고를 관련 기관에게 통지해야 한다. +인원보안 +(PS) +PS-01 +인원보안 +• 직원 고용시 배경검사를 시행하고 보직 변경/퇴직 시 시스템 접근 +권한을 검토/변경/삭제해야 하며 기업의 보안 정책 위반시 징계 +절차를 수립해야 한다. +PS-02 +보안인식 +교육·훈련 +• 직무별 전문성을 확보할 수 있도록 인식제고 활동 및 교육훈련 +계획을 수립 및 시행해야 한다. +물리보안 +(PE) +PE-01 +물리적 접근통제• 시스템이 설치·운영되고 있는 시설의 출입을 통제하고 +모니터링하며 물리적 접근 이력을 주기적으로 검토해야 한다. +PE-02 +대체 근무장소 +보안 +• 시설에 대한 물리적 접근을 모니터링하고 대체 근무장소에서 중요 +정보에 대한 안전조치를 시행한다 +PE-03 +보호설비 운영 +• 보호구역에 위치한 정보시스템의 중요도 및 특성에 따라 +온도·습도 조절, 화재감지, 소화설비, 누수감지, UPS, 비상발전기, +이중전원선 등의 보호설비를 갖추고 운영절차를 수립·운영하여야 +한다. +위험 평가 및 +보안평가(RA)) +RA-01 +위험 평가 +• 시스템 운영 및 관련 정보의 처리, 저장 또는 전송으로 인해 +발생하는 조직 운영(임무, 기능, 이미지 또는 평판 포함), 조직 자산 +및 개인에 대한 위험을 주기적으로 평가해야 한다. +RA-02 +보안 통제 +모니터링 및 +효과성 평가 +• 보안 위험관리 조치를 승인하고 지속적으로 보안 통제를 +모니터링하여 보안통제의 지속적인 효과를 보장해야 한다. + +--- + +36 | 우주 보안 모델 해설 및 적용사례집 +분야 +보안항목 +보안항목 설명 +SG-01 +보안 정책 수립 +• 우주보안 정책 및 지침을 수립하여 경영진의 승인을 받고 +주기적으로 검토 및 개정하여야 한다. +보안 거버넌스 +(SG) +SG-02 보안 역할 및 책임 +정의 +• 우주보안 관련 책임자와 담당자의 역할 및 책임을 명확히 정의하고, +조직 변화에 따라 이를 지속적으로 유지·관리해야 한다. +SG-03 +자산관리 +• 우주 관련 자산을 식별하고 목록화하며, 변동 사항을 반영하여 최신 +상태로 관리해야 한다. +SG-04 +법적요구사항 +준수 +• 조직이 준수하여야 할 우주보안 관련 법적 요구사항을 주기적으로 +파악하여 규정에 반영하고, 준수 여부를 지속적으로 검토하여야 +한다. +비상계획 +(CP) +CP-01 +비상계획 수립 +• 우주 시스템의 운영 연속성을 위협할 수 있는 보안 위협 유형을 +식별해야 하며, 비상시 복구 절차, 복구 조직, 비상연락체계 등 +비상계획을 수립하고 주기적으로 점검해야 한다. +CP-02 +백업 및 이중화 +관리 +• 조직의 중요정보를 식별하고 주기적으로 백업하고 중요 네트워크, +시스템은 이중화한다. +공급망관리 +(SM) +SM-01 +공급망 보호 +• 협력사로 인해 발생할 수 있는 보안 위협을 방지하기 위해 공급망 +보안 정책을 수립하여 협력사 선정을 위한 기준과 계약서를 +마련하고, 협력사 명부를 작성 및 최신화해야 한다 +SM-02 +인수 전 평가 +• 시스템/구성요소/서비스의 선정/인수/업데이트 전에 보안취약점 +점검 및 조치하고 인수 테스트를 통해 구성요소의 위조를 검사해야 +한다 +SM-03 +모든 출처 정보 +사용 +• 시스템/구성요소/서비스 (잠재적) 공급업체를 대상으로 모든 출처 +정보(all-source intelligence) 분석을 수행해야 한다. +SM-04 +변조/위조 방지 +및 탐지 +• 시스템/구성요소/서비스의 변조 및 위조를 방지하기 위하여 +주기적으로 점검해야 한다 + +--- + + +## 제2장 우주 보안 모델 | 37 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +우주 보안모델 +해설 + +## 1. 접근통제(AC) + + +## 2. 식별 및 인증(IA) + + +## 3. 시스템 및 통신 보안(SC) + + +## 4. 시스템 및 정보 무결성(SI) + + +## 5. 시스템/서비스 운영관리(SO) + + +## 6. 사고 대응(IR) + + +## 7. 인원 보안(PS) + + +## 8. 물리보안(PE) + + +## 9. 위험 평가 및 보안평가(RA) + + +## 10. 보안 거버넌스(SG) + + +## 11. 비상계획(CP) + + +## 12. 공급망 관리(SM) + +제 3 장 + +--- + +38 | 우주 보안 모델 해설 및 적용사례집 +본 장에서는 우주보안 체크리스트 항목별로 중점적으로 확인해야 하는 보안사항을 구체적으로 +설명하고 관련 기준을 제시한다. +제1절 +접근통제(AC) +AC-01 +접근통제 정책 +항목 내용 +시스템 접근권한을 부여한 기기, 사용자 및 프로세스에 한하여 접근을 허용해야 +한다. +목적 +시스템 자원에 대한 비인가 접근을 원천적으로 차단하고, 승인된 주체(기기, +사용자, 프로세스)만이 허용된 범위 내에서 접속하기 위함이다. +주요 확인사항 +y 위성 및 궤도 제어시스템 등 우주시스템에 대한 접근 권한 부여, 승인, 변경 +및 회수 절차를 포함한 접근통제 정책을 수립하고, 조직 및 기술환경 변화를 +반영하여 정기적으로 검토 및 개정하고 있는가? +y 우주 시스템 접근 시 인가된 사용자, 인가된 사용자를 대신하여 동작하는 +프로세스, 인가된 장치(다른 시스템 포함)가 고유하게 식별 및 관리되고 있는가? +y 서버, 네트워크시스템, 보안시스템 등 정보시스템별 운영체제(OS)에 접근이 +허용되는 사용자, 기기, 프로세스, 접근 가능 위치, 접근 수단 등을 정의하여 +통제하고 있는가? + +## 제3장 + +우주 보안모델 해설 + +--- + + +## 제3장 우주 보안모델 해설 | 39 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +세부 설명 +⊙ ‌위성 및 궤도 제어시스템 등 우주시스템에 대한 접근 권한 부여, 승인, 변경 및 회수 절차를 포함한 +접근통제 정책을 수립하고, 조직 및 기술환경 변화를 반영하여 정기적으로 검토 및 개정해야 한다. +▶ ‌우주시스템에 대한 접근 권한의 신청, 승인, 부여, 변경, 폐기 절차를 포함한 접근통제 정책을 +수립해야 하며, 모든 승인 기록은 문서(전자결재 등)로 보관해야 함 +▶ ‌임직원 퇴사 및 보직 변경 시 접근통제 정책의 검토 및 변경을 위해 인사 시스템과 연동하거나 +인사 관련 부서와 정기적인 인사발령 현황 공유 체계를 구축하여 퇴사자 발생 즉시(당일 이내) +계정 삭제 또는 잠금 처리 +▶ ‌보직 변경 시에는 기존 권한을 회수한 후 새로운 직무에 필요한 권한만 다시 부여 +▶ ‌최소 연 1회(또는 반기별) 모든 시스템의 권한 보유 현황을 추출하여, 현재 직무와 권한이 +일치하는지 전수 검토하고 불필요한 권한을 정리하여 그 결과를 보안 책임자에게 보고해야 함 +⊙ ‌우주 시스템 접근 시 인가된 사용자, 인가된 사용자를 대신하여 동작하는 프로세스, 인가된 +장치(다른 시스템 포함)의 목록을 유지·관리한다. +▶ ‌사용자 공용 계정 사용을 금지하고, 모든 계정은 특정 개인과 1:1로 매칭되도록 고유한 +식별자(ID) 부여 +▶ ‌시스템 간 API 연동, 배치 작업 등을 위해 사용되는 프로세스 계정은 일반 사용자 계정과 +분리하여 관리하고, 해당 계정의 목적, 호출 주체, 유효 기간을 명시하여 관리 +▶ ‌시스템에 접속하는 모든 단말기(엔지니어 PC, 서버, 모바일 기기 등)와 외부 시스템(협력사 +시스템 등)의 고유 식별정보(MAC주소, IP등)을 식별하여 접속허용 단말 목록으로 작성하고 관리 +▶ ‌단말기의 신규 도입, 교체, 폐기 시 자산 관리 대장과 접근허용 단말 목록에 이를 반영하여 최신 +상태를 유지 +⊙ ‌서버, 네트워크시스템, 보안시스템 등 정보시스템에 접근이 허용되는 사용자, 기기, 프로세스, 접근 +가능 위치, 접근 수단 등을 정의하여 통제해야 한다. +▶ ‌정보시스템 접근은 사전에 지정된 IP 또는 또는 점프 서버(Jump Server)의 IP에서만 가능하도록 +ACL(Access Control List) 설정 +▶ ‌사설 IP주소를 할당하는 경우 국제표준에 따른 사설 IP 주소 대역 사용 +사설 IP주소 대역 +• A Class : 10.0.0.1 ~ 10.255.255.255 +• B Class : 172.16.0.1 ~ 172.31.255.255 +• C Class : 192.168.0.1 ~ 192.168.255.255 + +--- + +40 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌Telnet 등 평문 프로토콜 사용을 금지하고 SSH20, SFTP21, VPN22(IPSEC, TLS) 등 보안 +프로토콜만 사용 +• ‌특히 관리자 권한 접속이나 외부망 접속 시 반드시 OTP23, 인증서 등 2단계 인증(MFA24) 적용 +▶ ‌디폴트 계정(admin, root 등) 및 패스워드는 사용을 중지하거나 변경해서 사용 +관련 기준 +⊙ ‌CMMC +• ‌3.1.1 (승인된 접근통제[CUI 데이터]) : 시스템 접근을 권한이 있는 사용자, 권한이 있는 사용자를 대신하여 +동작하는 프로세스 및 장치(다른 시스템 포함)로 제한한다. +⊙ ‌K-RMF +• ‌AC-2 (접근통제 시행) : 접근통제정책 시행을 통해 정보와 시스템 자원에 대한 논리적 접근을 인가해야 +한다. +⊙ ‌NIS2 +• ‌11.1. 관련 기관은 비즈니스 요구사항뿐 아니라 네트워크 및 정보시스템 보안 요구사항을 기반으로 하여, +자신의 네트워크 및 정보시스템에 대한 접근을 위한 논리적 및 물리적 접근통제 정책을 수립, 문화화 및 +이행하여야한다. +• ‌11.1.2. 11.1.1에서 언급된 정책은 다음을 수행하여야 한다. +(a) ‌직원, 방문자, 공급업체 및 서비스 제공자와 같은 외부 기관을 포함하여 사람에 의한 접근을 다루어야 +한다. +(b) 네트워크 및 정보시스템에 의한 접근을 다루어야 한다. +(c) 적절하게 인증된 사용자에게만 접근이 허용되도록 보장하여야 한다. +⊙ +‌ +ISMS-P +• ‌2.6.2 정보시스템 접근 :서버, 네트워크시스템 등 정보시스템에 접근을 허용하는 사용자, 접근제한 방식, +안전한 접근수단 등을 정의하여 통제하여야 한다. +20 ‌SSH(Secure Shell) : 통신 구간을 암호화 하여 원격 컴퓨터에 안전하게 접속하고 명령어 실행 및 파일 및 데이터를 전송 +하는 암호화 통신 프로토콜 +21 ‌SFTP(Secure File Transfer Protocol) : 파일을 안전하게 주고받기 위해 SSH 프로토콜 기반으로 암호화 및 인증을 제공 +하여 안전하게 파일을 전송하는 프로토콜 +22 ‌VPN(Virtual Private Network) : 가상사설망을 뜻하며 공중망(인터넷)을 통해 암호화된 터널을 만들어 특정 조직/인원만 +이 접근 가능한 가상의 사설 네트워크를 만드는 서비스 체계 +23 ‌OTP(One-Time Password) : 로그인 할 때마다 그 세션에서만 사용할 수 있는 일회성 패스워드를 생성하는 보안 시스템 +24 ‌MFA(Multi-Factor Authentication) : 최소 두 가지 이상의 인증 요소를 이용하여 본인 여부를 인증하는 것 + +--- + + +## 제3장 우주 보안모델 해설 | 41 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +AC-02 +최소권한 +항목 내용 +사용자에게 부여된 과업 및 직책을 수행하는 데 필요한 최소한의 권한을 +부여한다. +목적 +우주 기업이 다루는 핵심 임무 데이터나 중요정보를 보호하기 위해 모든 직원이나 +시스템 프로세스에 임무 수행에 꼭 필요한 최소 권한만 부여하여, 직원의 단순 +실수나 낮은 권한의 계정 탈취로 인한 시스템 피해 확산 및 중요 데이터 유출을 +예방하기 위함이다. +주요 확인사항 +y 위성 본체 및 지상국 시스템 등 우주시스템에 접근하는 모든 사용자, 프로세스, +장치에 대해 최소 권한 원칙을 적용하는 절차를 수립하고 있는가? +y 위성 운영 시스템 등 핵심 시스템에 접근하는 사용자, 프로세스, 장치에 접근권한 +부여 시 관리 책임자의 승인을 받고 있는가? +y 부여된 접근 권한이 적절한지 정기적으로 검토하고 있는가? +세부 설명 +⊙ ‌위성 본체 및 지상국 시스템 등 우주시스템에 접근하는 모든 사용자, 프로세스, 장치에 대해 최소 +권한 원칙을 적용하는 절차를 수립해야 한다. +▶ ‌직무별 접근 권한 분류 체계를 수립하고 최소한의 권한만을 부여해야 함 +• 업무 분석을 통해 직무별로 필요한 접근권한을 정의 +• ‌중요 시스템 및 애플리케이션, 장치에 대한 접근 권한은 ‘알 필요(Need-to-Know)’ 원칙에 따라 +최소한으로 부여 +⊙ ‌위성 운영 시스템 등 핵심 시스템에 접근하는 사용자, 프로그램, 장치에 접근권한 부여 시 관리 +책임자의 승인을 득해야 한다. +▶ ‌권한 부여 또는 변경 시 관리 책임자의 승인 절차 등을 통하여 해당 권한 부여의 적절성 검토 시행 +▶ ‌미션 크리티컬 권한이 부여된 계정(예: 위성 제어 서버의 운영 통제 계정)은 최소한의 인원에게만 +부여하고, 이들에 대해서는 일반 사용자 계정보다 엄격한 기준 적용 +▶ ‌지상국 유지보수 등 외부 협력업체 담당자에게 임시 권한 부여 시, 필요 시에만 생성하고 업무 +종료 후 즉시 삭제 또는 정지하는 절차 적용 +⊙ ‌부여된 접근 권한이 적절한지 정기적으로 검토해야 한다. +▶ ‌부여된 접근 권한을 정기적으로 검토하고, 검토 이력 보관 +▶ ‌정기검토 외에도 업무 변경, 퇴직 등 인사이동 발생 시 지체 없이 접근 권한을 변경 또는 +말소(계정 삭제/비활성화 포함) + +--- + +42 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌검토 결과 권한 과다 부여 등 문제점이 발견된 경우, 원인 분석 및 보완 대책 마련 등이 포함된 +조치 절차 수립 및 이행 +관련 기준 +⊙ ‌CMMC +• ‌3.1.5 (최소권한) : 특정 보안 기능 및 권한이 있는 계정을 포함하여 최소 권한의 원칙을 적용한다. +⊙ ‌K-RMF +• ‌AC-6 (최소권한) : 사용자에게 부여된 과업 및 직책을 수행하는데 필요한 최소한의 권한을 부여한다. +⊙ ‌NIS2 +• ‌11.2.1. 관련 기관은 11.1.에서 언급된 접근통제 정책에 따라 네트워크 및 정보시스템에 대한 접근 권한을 +제공, 수정, 제거 및 문서화해야 한다. +• ‌11.2.2. 관련 기관은 다음을 수행하여야 한다. +(a) ‌알 필요(Need-to-know), 최소 권한 및 직무 분리 원칙에 기반하여 접근 권한을 할당하고 철회하여야 +한다. +(b) 고용의 종료 또는 변경 시 접근 권한이 그에 따라 수정되도록 보장하여야 한다. +(c) 네트워크 및 정보시스템에 대한 접근이 관련자에 의해 승인되도록 보장하여야 한다. +(d) ‌접근권한이 방문자, 공급업체 및 서비스 제공자와 같은 제3자의 접근을 적절하게 다루어야 하며, 특히 +범위와 기간 측면에서 접근 권한을 제한함으로써 이를 수행하여야 한다. +(e) 부여된 접근권한의 대장(register)을 유지하여야 한다. +(f) 접근권한 관리에 로깅을 적용하여야 한다. +⊙ +‌ +ISMS-P +• ‌2.5.1 사용자 계정 관리 : 정보시스템과 개인정보 및 중요정보에 대한 비인가 접근을 통제하고 업무 목적에 +따른 접근권한을 최소한으로 부여할 수 있도록 사용자 등록·해지 및 접근권한 부여·변경·말소 절차를 +수립·이행하고, 사용자 등록 및 권한부여 시 사용자에게 보안책임이 있음을 규정화하고 인식시켜야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 43 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +AC-03 +특수 권한 사용 +항목 내용 +특수 권한 사용자가 실행할 수 있는 주요 시스템 작업 및 기능25에 대한 시스템 +접속을 제한하고 특수 권한으로 실행되는 기능을 감사해야 한다. +목적 +특수 권한을 가진 계정의 오용 및 도용으로 인한 시스템의 치명적인 피해를 막고, +모든 관리 활동에 대한 책임 추적성을 확보하기 위함이다. +주요 확인사항 +•‌특수 권한 사용자가 실행할 수 있는 주요 시스템 작업 및 기능의 유형을 +정의하고, 시스템 접근을 해당 정의된 유형으로만 제한하는 정책 및 절차를 +수립하고 있는가? +•‌시스템 내 특권 기능에 대한 접근 및 실행이 인가된 특수 권한 사용자에게만 +허용하고, 비 보안 기능 접근은 일반 권한 계정만 허용되도록 통제하고 있는가? +•‌특수 권한으로 실행 시도 또는 실행되는 모든 활동에 대한 감사 기록을 +저장하고, 이를 주기적으로 검토하고 있는가? +세부 설명 +⊙ ‌특수 권한 사용자가 실행할 수 있는 주요 시스템 작업 및 기능의 유형을 정의하고, 시스템 접근을 +해당 정의된 유형으로만 제한하는 정책 및 절차를 수립해야 한다. +▶ ‌특수 권한(Admin, Root 등)이 필요한 주요 시스템 작업 및 기능(예: 위성 제어 명령 발송, 시스템 +환경 설정 변경, 사용자 권한 부여/회수 등)의 유형과 범위를 명확히 정의한 정책을 수립하고 +공식적으로 승인을 득해야 함 +특수 권한(예시) +• 관리자 권한(Root, Administrator, admin, sys, system, sa 등 최상위 권한) +• 배치프로그램 실행을 위하여 부여된 권한 +• 보안시스템 관리자 권한 +• 계정 생성 및 접근권한을 설정할 수 있는 권한 등 +▶ ‌정의된 유형의 작업에 대해서만 특수 권한 계정의 접근 허용 및 특수 권한 계정의 생성, 부여, +사용 및 회수 절차 수립 +25 ‌작업 및 기능 : 사용자가 시스템에 특정 요청을 보내 수행할 수 있는 작업(예: 생성, 조회, 수정, 삭제 등의 데이터 처리 작 +업) 및 작업을 처리하는 기능 + +--- + +44 | 우주 보안 모델 해설 및 적용사례집 +특수 권한 관리 강화 방안(예시) +•‌최소한의 인원에게만 부여될 수 있도록 공식적인 권한 신청 및 승인 절차를 수립하되 일반 사용자 +계정·권한 발급 절차보다 엄격한 기준 적용 (ex) 임원 또는 보안책임자 필수적 승인 등) +•‌관리자 권한의 경우 예외조치 최소화, 이상 행위에 대한 모니터링 강화 등 관리 강화 +•‌퇴직 및 직무 변경 시 관리자 권한은 즉시 회수하도록 해야 하며 정기적인 검토를 통해 불필요한 +관리자 계정을 삭제할 수 있도록 관리 +•‌관리자가 사용하는 단말은 IP 및 MAC 주소를 통해 접근제어 적용 +⊙ ‌시스템 내 특권 기능에 대한 접근 및 실행이 인가된 특수 권한 사용자에게만 허용하고, 비 보안 기능 +접근은 일반 권한 계정만 허용되도록 통제해야 한다. +▶ ‌위성 제어 서버나 임무 시스템의 특권 기능은 인가된 특수 권한 사용자에게만 접근이 허용되도록 +접근 통제 리스트(ACL) 또는 특권 접근 관리(PAM) 시스템 등을 활용하여 기술적 통제 적용 +사용자 계정 권한별 차등 부여 시 고려사항(예시) +•‌불필요하거나 과도하게 중요정보에 접근하지못하도록 권한 세분화 +•‌우주시스템, IT정보 시스템에 대한 접근 권한은 업무 수행 목적에 따라 최소한의 범위로 업무 +담당자에게 차등 부여 +•‌권한 부여 또는 변경 시 승인 절차 등을 통하여 적절성 검토 수행 등 +▶ ‌특권 접근 관리(PAM) 시스템 적용할 수 없을 시 계정별 실행 프로그램 화이트리스팅 적용 +▶ ‌[Windows 환경] AppLocker 또는 그룹 정책 개체(GPO)를 사용하여, 특수 권한 계정 +프로필에서는 시스템 관리(MMC, PowerShell 등)에 필요한 파일 외의 모든 실행 파일(EXE, +DLL 등)의 실행 차단 적용 +▶ ‌[Linux 환경] SELinux나 AppArmor와 같은 MAC(Mandatory Access Control) 도구를 +사용하여, 특수 권한 계정의 접근 권한을 시스템 관리 관련 경로 및 파일로만 한정하고, 일반 +사용자 애플리케이션 경로(예: /usr/bin/firefox)에 대한 접근 및 실행 권한 거부 적용 +⊙ ‌특수 권한으로 실행 시도 또는 실행되는 모든 활동에 대한 감사 기록을 저장하고, 이를 주기적으로 +검토해야 한다. +▶ ‌특수 권한 계정으로 실행 시도되거나 실제로 실행된 모든 활동 (로그인/로그아웃, 시스템 설정 +변경, 파일 접근, 핵심 명령어 실행 등)에 대해 감사로그 저장 설정 +▶ ‌저장된 감사 기록은 위·변조 및 훼손으로부터 안전하게 보호되어야 하며, 우주기업의 보안정책에 +따라 보존 기간동안 유지 +▶ ‌특수 권한 사용 기록을 정의된 주기에 따라 검토하고, 이상 행위나 정책 위반 징후가 발견되면 +신속히 보고 및 조치하는 절차 이행 + +--- + + +## 제3장 우주 보안모델 해설 | 45 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ ‌CMMC +• ‌3.1.2 (거래 및 기능통제) : 권한이 있는 사용자가 실행할 수 있는 거래 및 기능의 유형에 대한 시스템 +접속을 제한한다. +• ‌3.1.6 (권한이 없는 계정 사용) : 비보안 기능(nonsecurity functions)에 접근할 때 권한이 없는 계정이나 +역할을 사용한다. +• ‌3.1.7 (특권 기능) : 권한이 없는 사용자가 특권 기능(privileged functions)을 실행하는 것을 방지하고, +이러한 기능의 실행을 감사 로그에 기록해야 한다. +⊙ ‌K-RMF +• ‌AC-6-2 (최소권한 : 특별권한이 없는 사용자의 특별권한 기능 실행 금지) : 특별권한이 없는 사용자가 보안 +기능을 비활성화, 우회 및 변경하는 등의 특별권한이 필요한 기능의 실행을 금지해야 한다. +• ‌AC-6-6 (최소권한 : 특별권한 계정의 일반용도 사용통제) : 조직이 지정한 보안 기능 또는 보안 관련 +정보의 접근권한을 가진 사용자가 보안과 관련 없는 일반 기능에 접근하는 것을 통제하며, 일반 기능에 +접근할 때에는 일반 사용자 계정을 사용해야 한다. +• ‌AC-6-10 (최소권한 : 특별권한 수준의 소프트웨어 실행) : 조직이 지정한 소프트웨어가 실행하는 +사용자보다 높은 권한으로 실행되는 것을 금지해야 한다. +⊙ ‌NIS2 +• ‌11.3 (특수 권한 계정 및 시스템 관리 계정) : (b) 설치, 구성, 관리 또는 유지보수와 같이 오직 시스템 관리 +운영에만 사용되도록 특정 계정을 설정해야 한다. +• ‌(c) 시스템 관리 권한을 가능한 가장 높은 수준으로 개별화하고 제한해야 한다. +• ‌(d) 시스템 관리 계정이 오직 시스템 관리 시스템에 접속하기 위해서만 사용되도록 규정해야 한다 +⊙ +‌ +ISMS-P +• ‌2.5.5. 특수계정 및 권한관리 : 정보시스템 관리, 개인정보 및 중요정보 관리 등 특수 목적을 위하여 +사용하는 계정 및 권한은 최소한으로 부여하고 별도로 식별하여 통제하여야 한다. + +--- + +46 | 우주 보안 모델 해설 및 적용사례집 +AC-04 +정보흐름 통제 +항목 내용 +시스템 내부 및 시스템 간 정보흐름을 통제해야 한다. +(중요정보의 인터넷 평문전송, 조직간 정보전송 통제 등) +목적 +정보가 시스템 내부나 외부로 이동하는 경로를 엄격하게 관리하여 조직의 중요 +정보를 보호하기 위함이다. +주요 확인사항 +y 중요 정보가 오가는 흐름을 통제하기 위한 정책과 절차를 수립되어 있는가? +y ‌중요 정보를 주고받는 시스템, 사람, 장치 등 정해진 출발 지점과 도착 지점이 +명확하게 식별 및 관리되고 있는가? +y ‌중요 정보 흐름 통제 변경 시 관리 책임자의 승인을 득하고 주기적으로 변경 +내용을 검토하고 있는가? +세부 설명 +⊙ ‌중요 정보가 오가는 흐름을 통제하기 위한 정책과 절차를 수립해야 한다. +▶ ‌흐름 통제 정책은 정보의 특성, 신원 및 권한, 상황적 조건 및 경로를 기반하여 경계 보호 +장치(예: 게이트웨이, 라우터, 방화벽 등)에서 흐름을 통제하도록 설정 +• ‌데이터 특성 : 허가된 파일형식만 전송 허용 +• ‌신원 및 권한 : 특정 직무나 역할을 수행하는 인가된 사용자 및 프로세스만이 정보 전송 허용 +• ‌상황적 조건 : 특정 시간대 또는 특정 위치(승인받은 IP 또는 장치)만 정보 전송 허용 +▶ ‌중요 정보를 외부 기관/기업에 전송 또는 인터넷을 통해 전송될 경우, 반드시 구간 암호화(예: +TLS(Transport Layer Security) 1.2 이상(신규시스템은 1.3 이상 권고) 또는 IPsec VPN, +SFTP 등)를 적용하도록 정책 수립 +▶ ‌중요 정보를 전송하는 데 사용되는 암호화 통신 프로토콜(예: HTTPS, SFTP) 외 안전하지 않은 +모든 프로토콜(예: FTP, Telnet 등 보안 취약 프로토콜)은 방화벽(Firewall) 및 라우터(Router) +ACL에서 차단 적용 +▶ ‌수립한 통제 정책은 방화벽 등 보안 장비에 적용하고, 위성 제어망 등 핵심 영역은 일방향 +전송장치 또는 방화벽 등을 이용해 논리적 분리 적용 +⊙ ‌중요 정보를 주고받는 시스템, 사람, 장치 등 정해진 출발 지점과 도착 지점 식별 및 관리해야 한다. +▶ ‌중요 정보 흐름에 대해 출발 시스템(IP), 도착 시스템(IP), 통신 목적, 통신 주기, 통제 책임자, +적용되는 보안 통제 방법 등 중요 정보 흐름 현황을 파악하여 문서화 + +--- + + +## 제3장 우주 보안모델 해설 | 47 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌파악한 중요 정보 흐름은 관리자 승인을 득하고, 주기적으로 검토하여 최신화 유지 +⊙ ‌중요 정보 흐름 통제 변경 시 관리 책임자의 승인을 득하고 주기적으로 변경 내용을 검토해야 한다. +▶ ‌중요 정보 흐름 통제 정책(예: 중요 정보 흐름에 대한 방화벽 차단/허용 정책 등) 변경 시 관리 +책임자의 승인 후 변경 +▶ ‌중요 시스템 도입/변경 시 중요 정보 흐름 현황 및 통제 정책의 일치 여부 점검 +관련 기준 +⊙ ‌CMMC +• ‌3.1.3 (CUI 흐름통제) : 승인된 권한에 따라 CUI 흐름을 통제한다. +⊙ ‌K-RMF +• ‌AC-3 (정보흐름 통제) : 조직이 지정한 정보흐름 통제정책을 적용하여 시스템 경계범위 내부에서의 +정보흐름을 통제해야 한다. +⊙ ‌ISMS-P +• ‌1.2.2 현황 및 흐름분석 : 관리체계 전 영역에 대한 정보서비스 및 개인정보 처리 현황을 분석하고 업무 +절차와 흐름을 파악하여 문서화하며, 이를 주기적으로 검토하여 최신성을 유지하여야 한다. + +--- + +48 | 우주 보안 모델 해설 및 적용사례집 +AC-05 +직무 분리 +항목 내용 +개인의 직무를 분리하고 이에 따라 시스템의 접근권한을 부여해야 한다. +목적 +권한 오·남용으로 인한 잠재적인 피해를 예방하기 위하여 주요 직무에 대한 +책임과 권한을 분리하여 적용함으로써, 독단적인 권한 행사나 실수로 인한 시스템 +피해를 방지하기 위함이다. +주요 확인사항 +y ‌권한 오·남용 등으로 인한 잠재적인 피해 예방을 위해 직무 분리 기준에 대한 +정책 및 절차를 수립하여 적용하고 있는가? +y ‌시스템의 관리, 운영, 보안 등 핵심 직무에 대해 권한 집중에 따른 보안 위험을 +분석하고, 상호 검토가 가능하도록 책임과 권한을 체계적으로 분리하여 +운영하고 있는가? +y ‌직무 분리가 어려운 경우 직무자 간 상호 검토, 상위관리자 정기 모니터링 및 +변경사항 승인, 책임추적성 확보 방안 등의 보완통제를 마련하고 있는가? +세부 설명 +⊙ ‌권한 오·남용 등으로 인한 잠재적인 피해 예방을 위하여 직무 분리 기준에 대한 정책 및 절차를 +수립하여 적용해야 한다. +▶ ‌직무 분리는 우주기업의 사이버보안 정책 또는 인사규정에 포함되어야 하며, 예외 상황을 +허가하는 절차에는 최종 승인자(예: 보안 책임자 또는 임무 관리자)가 공식적으로 지정되어야 함 +▶ ‌예시: 위성 관제 담당자와 그 명령을 위성으로 전송하는 최종 승인자는 동일한 사람으로 +지정하면 안되며, 직원 개개인이 아니라 관제 운용, IT 보안, 위성 시스템 개발 등 업무 역할(Job +Role)을 기준으로 작성 +⊙ ‌시스템의 관리, 운영, 보안 등 핵심 직무에 대해 권한 집중에 따른 보안 위험을 분석하고, 상호 +검토가 가능하도록 책임과 권한을 체계적으로 분리하여 운영해야 한다. +▶ ‌개인이 단독으로 실행할 경우 시스템 운영에 치명적인 영향을 미치거나 중요 정보를 유출/변조/ +삭제할 수 있는 핵심 직무를 정의 +▶ ‌식별된 핵심 직무의 권한이 한 개인에게 집중되었을 때 발생할 수 있는 보안 위협(예: 개발자가 +직접 운영 DB 수정 시 로그 삭제 가능성 등)을 분석 +▶ ‌분석한 위험을 바탕으로 겸직 금지가 필요한 직무를 식별하고, 이에 대한 직무 분리 기준을 +수립하여 문서화 +▶ ‌정의된 직무분리 기준에 따라 시스템 접근 권한을 할당 + +--- + + +## 제3장 우주 보안모델 해설 | 49 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +직무 분리 기준(예시) +y ‌위성 및 지상국 시스템 개발과 위성 운영 직무 분리 +y ‌위성 제어 명령 발송 권한자와 원격 상태감시 담당자 직무 분리 +y ‌우주시스템 보안업무와 우주시스템(예: 위성제어시스템, 탑재체제어시스템 등) 운영직무 분리 +⊙ ‌직무 분리가 어려운 경우 직무자 간 상호 검토, 상위관리자 정기 모니터링 및 변경사항 승인, +책임추적성 확보 방안 등의 보완통제를 마련해야 한다. +▶ ‌위성 관제에 사용되는 암호키를 생성하고 관리하는 담당자는 해당 키를 사용하여 실제 암호화 +통신을 수행하거나 위성을 제어하는 위성시스템 관리 권한을 가질수 없도록 직무 분리 +▶ ‌직무 분리가 적용되지 않은 직무 수행자가 수행하는 모든 중요 활동에 대해 상세한 감사 +로그(활동을 한 사람, 시간, 내용, 시스템 위치가 모두 포함)를 별도의 로그서버 또는 임의 +위변조가 되지 않는 저장장치에 저장 +▶ ‌직무 분리 예외가 적용된 직원의 시스템 활동(로그)에 대해 상위 관리자가 주기적인 검토 시행 +관련 기준 +⊙ ‌CMMC +• ‌3.1.4 (직무분리 : 공모 없이 악의적인 활동의 위험을 줄이기 위해 개인의 직무를 분리한다. +⊙ ‌K-RMF +• ‌AC-5 (직무분리) +① 조직이 지정한 개인의 직무를 분리해야 한다. +② 개인의 직무분리 결과를 작성 및 유지해야 한다. +③ 직무 분리 결과에 따라 시스템의 접근권한을 부여한다. +⊙ ‌NIS2 +• ‌1.2. 역할, 책임 및 권한 1.2.5 상충하는 직무(Conficting Duties)와 상충하는 책임 영역은 +분리(segregated)되어야 한다. +⊙ ‌ISMS-P +• ‌2.2.2. 직무분리 : 권한 오·남용 등으로 인한 잠재적인 피해 예방을 위하여 직무 분리 기준을 수립하고 +적용하여야 한다. 다만 불가피하게 직무 분리가 어려운 경우 별도의 보완대책을 마련하여 이행하여야 한다. + +--- + +50 | 우주 보안 모델 해설 및 적용사례집 +AC-06 +로그인 시도 실패 +항목 내용 +일정 기간 동안 연속으로 유효하지 않은 로그인 시도를 제한하고 최대 허용 +횟수를 초과하면 자동으로 계정을 잠궈야 한다. +목적 +시스템에 무단으로 침입하거나 비밀번호를 추측하려는 자동화된 공격(무작위 +대입 공격)으로부터 사용자 계정을 보호하기 위함이다. +주요 확인사항 +y ‌연속된 로그인 시도의 최대 허용 횟수, 허용 횟수 초과 시 계정을 자동으로 +잠금처리 하거나 접속 시도 지연과 같은 조치를 정의한 정책이 수립되어 +있는가? +y ‌계정 잠금 발생 시, 일정기간 동안 잠금 상태로 유지되는지, 또는 인가된 +관리자가 수동으로 해제할 때까지 유지되는지 명확히 정의하고, 이에 따라 +시스템이 작동하는가? +y ‌불법 로그인 시도가 발생했을 때 사용자에게 경고 메시지를 표시하고, 로그인 +실패 이력을 기록 및 감사하며, 관리자에게 이상 징후 알림을 보고하는 체계가 +수립되어 있는가? +세부 설명 +⊙ ‌연속된 로그인 시도의 최대 허용 횟수, 허용 횟수 초과 시 계정을 자동으로 잠금처리 하거나 접속 +시도 지연과 같은 조치를 정의한 정책을 수립해야 한다. +▶ ‌위성제어시스템, 관제 명령 서버 등 핵심 임무 시스템은 로그인 실패 허용 횟수를 가장 엄격하게 +적용 +▶ ‌일반적인 이메일, 파일 서버 등의 업무 지원 시스템은 핵심 임무 시스템보다 로그인 실패 허용 +횟수를 완화하여 적용하거나, 시스템 중요도에 따라 차등 설정 +로그인 시도 최대 허용 횟수(예시) +y ‌K-RMF AC-07 (로그인 시도) 서버 연속 3회, 사용자 계정 연속 5회 연속 잘못 입력 시 최소 15분 +~ 1시간 계정 잠금 +y ‌CMMC AC.-3.1.8 (로그인 시도 실패) 중요 데이터를 처리하는 업무용 컴퓨터에 비밀번호를 3번 +연속 잘못 입력 시 30분 계정 잠금 + +--- + + +## 제3장 우주 보안모델 해설 | 51 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +로그인 실패횟수 제한(Windows OS 예시) +계정 잠금 임계값 (5회) 설정 예시 +① 시작 → 실행 → secpol.msc입력 및 실행 → 계정 정책 → 계정 잠금 정책 +② “계정 잠금 임계 값” 설정 (아래 그림 예시에서는 5회로 설정) +⊙ ‌계정 잠금 발생 시, 일정 기간 동안 잠금 상태로 유지되는지, 또는 인가된 관리자가 수동으로 해제할 +때까지 유지되는지를 명확히 정의하고, 이에 따라 시스템이 작동해야 한다. +▶ ‌정책으로 정한 최대 횟수를 초과하면, 해당 계정은 시스템에서 자동으로 접근이 차단(계정 +잠금)되도록 기술적 설정 적용 +▶ ‌비밀번호 추측 공격을 지연시키기 위해 실패 횟수가 증가할수록 다음 시도까지의 대기 시간을 +점진적으로 증가 시키는 알고리즘을 적용하는 것을 계정 잠금 정책과 병행 적용 고려 +• ‌예시 : 최소 5초간 로그인 프롬프트 지연 또는 10초간 로그인 프롬프트 지연 +▶ ‌모바일 기기는 분실/도난되어 무단 접근 시도가 발생할 경우를 대비하여, 로그인 실패 횟수(예: +5회, 10회)를 초과하면 해당 장치에 저장된 조직의 정보가 외부로 유출되기 전에 완전 삭제 설정 +고려 +⊙ ‌불법 로그인 시도가 발생했을 때 사용자에게 경고 메시지를 표시하고, 로그인 실패 이력을 기록 및 +감사하며, 관리자에게 이상 징후 알림을 보고하는 체계를 수립해야 한다. +▶ ‌계정 잠금 발생, 또는 특정 IP 주소에서 반복적인 실패 시도가 감지되었을 경우, 이를 불법 로그인 +시도로 간주하고 보안 관리자 또는 보안 관제 센터(SOC)에 즉시 실시간 알림(SMS/이메일)을 +전송하는 절차 적용 + +--- + +52 | 우주 보안 모델 해설 및 적용사례집 +불법적 인증시도 (예시) +y 반복 로그인 시도로 인한 계정잠금 시 실시간 알림 +y 국외 IP주소 등 등록되지 않은 IP주소에서의 접속 시 차단 및 알림 +y 주말, 야간 접속 등 근무시간 외 접속 시 문자 알림 +y 관리자 등 특수권한 로그인 시 알림 등 +관련 기준 +⊙ ‌CMMC +• ‌3.1.8 (실패한 로그온 시도) : 실패한 로그온 시도를 제한한다. +⊙ K-RMF +• ‌AC-7 (로그인 시도 실패) +① ‌일정기간 동안 조직이 지정한 횟수의 연속으로 유효하지 않은 로그인 시도를 제한해야 한다. +② ‌로그인 실패가 최대 허용 횟수를 초과하면 자동으로 다음 중 하나의 조치를 시행해야 한다. + +가. 일정 기간동안 계정을 잠금 + +나. 관리자가 해제할 때 까지 계정을 잠금 + +다. 조직이 지정한 지연 알고리즘에 따라 로그인 시도 제한 + +라. 기타 조직이 지정한 방법 +• ‌AC-7-1 (로그인 시도 실패 | 모바일 기기 정보 삭제) +‌조직이 지정한 모바일 기기]에서 [조직이 지정한 횟수]의 연속적인 로그인 실패가 발생할 경우 [조직이 +지정한 삭제기술 및 요구사항]에 따라 해당 모바일 기기의 정보를 완전삭제해야 한다. +⊙ ISMS-P +• ‌2.5.3. 사용자 인증 : 정보시스템과 개인정보 및 중요정보에 대한 사용자의 접근은 안전한 인증절차와 +필요에 따라 강화된 인증방식을 적용하여야 한다. 또한 로그인 횟수 제한, 불법 로그인 시도 경고 등 +비인가자 접근 통제방안을 수립·이행하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 53 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +AC-07 +세션 잠금 및 종료 +항목 내용 +일정 기간 동안 세션 사용이 없거나 사용자에 의한 세션 잠금 요청이 있을 경우 +해당 세션을 잠그고, 세션 종료 조건 발생 시 자동으로 세션을 종료해야 한다. +목적 +자리를 비운 사용자 세션을 통해 통제된 중요 정보가 비인가자에게 노출되는 것을 +방지하기 위함이다. +주요 확인사항 +y ‌시스템이 조직이 지정한 비활성 기간 초과 또는 사용자 요청 시 세션을 +자동으로 잠그고, 암호가 적용된 화면보호기 등의 보호 조치를 적용하여 +화면정보가 노출되지 않도록 하는가? +y ‌세션 잠금 해제 시, 사용자가 암호나 다중 인증 등의 식별 및 인증 절차를 거쳐 +본인임을 재확인하도록 강제하는가? +y ‌운영 연속성을 위해 세션 잠금 규칙 적용이 비효율적이거나 불가능한 +시스템(예: 상시 관제 대시보드)을 식별하고, 해당 시스템에 대한 세션 잠금 +예외 처리 기준 및 공식 승인 절차를 수립하여 현황을 관리하고 있는가? +세부 설명 +⊙ ‌시스템이 조직이 지정한 비활성 기간 초과 또는 사용자 요청 시 세션을 자동으로 잠그고, 암호가 +적용된 화면보호기 등의 보호 조치를 적용하여 화면 정보가 노출되지 않도록 적용해야 한다. +▶ ‌일반 업무용 단말기는 비활성 시간을 10분 경과 시 자동으로 암호가 적용된 화면보호기가 +적용되도록 설명 +※ ‌위성 궤도 감시, 통신 상태 모니터링 등 중단없는 화면 노출이 필요한 시스템은 자동 세션 및 +화면보호기 적용을 예외 할 수 있음 +▶ ‌잠금/잠금해제 시, 화면에 표시된 위성 명령 로그나 기밀 문서 등의 모든 화면 내용이 비치거나 +노출되지 않도록 하여 외부인의 훔쳐보기(Shoulder Surfing)를 방지 + +--- + +54 | 우주 보안 모델 해설 및 적용사례집 +세션 타임아웃 설정(JSP 예) +web.xml 파일에서 태그를 사용하여 타임아웃을 지정하는 방법 (분단위) 또는 +weblogic.xml에서 태그를 사용하여 지정하는 방법 (초단위) +▷를 이용해서 600초 타임아웃을 지정하는 예시 +⊙ ‌세션 잠금 해제 시, 사용자가 암호나 다중 인증 등의 식별 및 인증 절차를 거쳐 본인임을 재확인하는 +절차를 적용해야 한다. +▶ ‌잠금 해제 시에는 반드시 비밀번호 입력 등 사용자 본인임을 확인하는 인증 절차를 거치도록 +시스템을 설정하여, 잠금 해제하는 사람이 인가된 사용자임을 확인하도록 설정 +※ ‌긴급한 위성 제어 상황이 발생 할 수 있는 환경(예: 위성 관제실 등) 에서는 인증 절차로 +인해 대응이 늦어질 수 있기에, 잠금해제 시 인증절차를 간소화 하거나 물리적 보안통제로 +대체(관제실을 보호구역으로 지정 및 보호구역 출입자 통제 적용 등)할 수 있음.(NIST SP 800- +100 정보보안 핸드북 참조) +⊙ ‌운영 연속성을 위해 세션 잠금 규칙 적용이 비효율적이거나 불가능한 시스템(예: 상시 관제 +대시보드)을 식별하고, 해당 시스템에 대한 세션 잠금 예외 처리 기준 및 공식 승인 절차를 수립하여 +현황을 관리해야 한다. +▶ ‌24시간 실시간 위성 모니터링 대시보드, 네트워크 관제/보안 관제 시스템(NOC/SOC) 등 상시 +화면 표시가 임무 수행에 필수적이어서 자동 잠금 규칙을 적용할 수 없는 시스템을 공식적으로 +식별 +▶ ‌식별된 예외 시스템은 보안 책임자 또는 임무 관리자의 공식적인 문서 승인을 거쳐 예외 시스템 +목록에 등록하고 현황을 관리 + +--- + + +## 제3장 우주 보안모델 해설 | 55 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ ‌CMMC +• ‌3.1.10 (세션 잠금) : 비활성 기간 후 데이터에 대한 액세스 및 보기를 방지하려면 패턴 숨김 디스플레이와 +함께 세션 잠금을 사용한다. +• ‌3.1.11 (세션 종료) : 정의된 조건이 충족되면 사용자 세션을 자동으로 종료한다. +⊙ ‌K-RMF +• ‌AC-11 (세션 잠금) +① ‌조직이 지정한 기간 동안 세션 사용이 없거나 사용자에 의한 세션 잠금 요청이 있을 경우 해당 세션을 +잠가야 한다. +② ‌사용자가 설정된 식별/인증 절차를 통하여 재접속을 할 때까지 세션 잠금을 유지해야 한다. +• ‌AC-12 (세션 종료) : 세션 종료 요청이 있거나 조직이 지정한 세션 종료 +• ‌AC-12-1 (세션 종료 | 사용자 통신세션 종료 및 메시지 표시) +① ‌사용자가 인증이 필요한 조직이 지정한 정보 자원에 접근한 이후 사용자 요청에 따라 로그아웃을 할 수 +있는 기능을 제공해야 한다. +② 사용자에게 통신 세션이 안전하게 종료되었다는 메시지를 표시해야 한다. +⊙ ‌ISMS-P +• ‌2.6.2 정보시스템 접근 : 서버, 네트워크시스템 등 정보시스템에 접근을 허용하는 사용자, 접근제한 방식, +안전한 접근수단 등을 정의하여 통제하여야 한다. +• ‌2.6.3 응용프로그램 접근 : 사용자별 업무 및 접근 정보의 중요도 등에 따라 응용프로그램 접근권한을 +제한하고, 불필요한 정보 또는 중요정보 노출을 최소화할 수 있도록 기준을 수립하여 적용하여야 한다. + +--- + +56 | 우주 보안 모델 해설 및 적용사례집 +AC-08 +원격 접근통제 +항목 내용 +승인된 업무 및 사용자에 대해서만 원격접속을 허용하고 원격접속 세션을 암호화 +및 모니터링해야 한다. +목적 +승인되지 않은 원격접속을 통한 데이터 유출이나 시스템 무단 변경을 방지하여 +주요 시스템 및 데이터를 보호하고, 모든 원격 통신을 감시하여 보안 사고를 +조기에 탐지하기 위함이다. +주요 확인사항 +y ‌원격 접근을 통제하기 위한 공식적인 정책 및 절차를 수립하고 관리하고 있는가? +y ‌원격 접속에 사용되는 단말(PC/노트북)의 보안 상태를 확인하고, 원격 접속 시 +다중 인증 등 강력한 사용자 인증 및 암호화 통신을 사용하는가? +y ‌원격 접근 시도 및 수행 내역을 모니터링하고 주기적으로 원격 접속로그를 +검토하고 있는가? +세부 설명 +⊙ ‌원격 접근을 통제하기 위한 공식적인 정책 및 절차를 수립하고 관리해야 한다. +▶ ‌원격 접속이 필요한 업무, 사용자, 접속 시간 등을 지정하고, 사전 신청 및 책임자 승인, 접속 +모니터링 및 사후관리의 3단계 절차를 문서화하여 보안 정책 및 절차에 반영 +▶ ‌위성 및 탑재체 제어시스템, 위성 관제 네트워크 등 위성 및 탑재체 운영에 높은 영향을 미치는 +고위험 자산은 원격 접근을 원칙적으로 차단하고, 불가피할 경우에만 특정 시간대나 지정된 IP +주소에서만 접근 허용하는 정책 적용 +▶ ‌원격 실행이 허용되는 특수 권한 명령(예: 시스템 구성 변경, 서비스 재시작, 위성 제어 명령 +등)을 식별하여 목록화하고, 식별된 특수 권한 명령에 대해서는 사전 승인된 사용자만이 +원격해서 실행하거나 접근할 수 있도록 해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 57 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ ‌원격 접속에 사용되는 단말(PC/노트북)의 보안 상태를 확인하고, 원격 접속 시 다중 인증 등 강력한 +사용자 인증 및 암호화 통신을 사용해야 한다. +▶ ‌접속 단말(노트북 등)이 최신 보안 패치, 백신, 개인 방화벽 등 조직의 최소 보안 통제 기준을 +만족하는지 점검하고, 기준 미충족 장치의 접속 제한 +▶ ‌원격으로 접속하는 모든 사용자에게 다중 인증(최소 2가지 이상의 인증 수단) 적용 +▶ ‌모든 원격 접속은 VPN과 같은 암호화 기술(TLS, IPSEC) 적용 +⊙ ‌원격 접속 시도 및 수행내역을 모니터링하고 주기적으로 원격 접속로그를 검토해야 한다. +▶ ‌비인가된 자의 원격 접속 시도, 허용되지 않은 시간대 원격 접속 시도, 짧은 시간내 반복되는 +로그인 실패 등 원격 접속시 이상행위 탐지 및 대응 +▶ ‌원격 접속 중인 모든 활동 내역 (접근 시간, 사용한 명령어, 접속 대상 시스템)에 대한 로그를 +저장하고 주기적으로 로그 검토 수행 +관련 기준 +⊙ ‌CMMC +• ‌AC.L2-3.1.12 (원격 접근 통제) : 원격 접근 세션을 모니터링하고 통제해야 한다. +• ‌AC.L2-3.1.13 (원격 접근 기밀성) : 원격 접근 세션의 기밀성을 보호하기 위해 암호화 메커니즘을 +적용해야 한다. +• ‌AC.L2-3.1.14 (원격접속 라우팅) : 관리되는 네트워크 접근통제지점(managed access control +points)을 통해 원격 접근 경로를 구성해야 한다. +• ‌AC.L2-3.1.15 (권한이 있는 원격 접속) : 권한이 있는 명령의 원격 실행과 보안 관련 정보에 대한 원격 +접속을 승인한다. +⊙ ‌K-RMF +• ‌AC-15 (원격접속) +① ‌시스템에서 허용하는 원격접속 유형을 식별하고, 원격접속에 대한 사용 제한사항, 환경 설정 및 연결 +요구사항, 구현 지침 등을 수립하고 유지·관리해야 한다. +② 시스템에 원격접속을 허용하기 전에 인가해야 한다. +• ‌AC-15-1 (원격접속 | 원격접속 모니터링 및 통제) : 원격접속을 모니터링하고 통제해야 한다. +• ‌AC-15-2 (원격접속 | 암호화를 통한 기밀성과 무결성 보호) : 원격접속 세션의 기밀성과 무결성을 +보호하기 위해 암호화 메커니즘을 구현해야 한다. +• ‌AC-15-3 (원격접속 | 접근통제 지점 관리) : 조직이 지정한 개수의 관리되는 네트워크 접근통제지점을 +통해서 원격접속 경로를 구성해야 한다. +• ‌AC-15-6 (원격접속 | 연결종료 / 접속 비활성화) : 조직이 지정한 기간 내에 시스템과 연결된 원격접속을 +종료하거나 비활성화할 수 있는 기능을 제공해야 한다. +⊙ ‌ISMS-P +• ‌2.6.6 원격접근 통제 : 보호구역 이외 장소에서의 정보시스템 관리는 원칙적으로 금지하고, +재택근무·장애대응·원격협업 등 불가피한 사유로 허용하는 경우 책임자 승인, 접근 단말 지정, 접근 +허용범위 및 기간 설정, 강화된 인증, 구간 암호화, 접속단말 보안(백신, 패치 등) 등을 수립·이행해야 한다. + +--- + +58 | 우주 보안 모델 해설 및 적용사례집 +AC-09 +무선 접속 +항목 내용 +시스템에 무선접속 시 승인받은 사용자/기기 인증을 수행하고 통신세션을 +암호화해야 한다. +목적 +비인가된 사용자가 무선 경로를 통해 위성제어시스템에 접근하는 것을 방지하고, +무선 통신 구간에서 전송되는 정보의 기밀성 및 무결성을 보호하기 위함이다. +주요 확인사항 +y ‌무선 접속을 위한 사용 제한사항, 환경 설정, 무선 접속 정책이 수립되어 +있는가? +y ‌무선 네트워크 접속시 인증을 수행하고 통신 세션을 암호화하는 등 보호대책을 +수립 및 이행하고 있는가? +y ‌허가받지 않은 무선 AP 탐지 및 차단 등 비인가 무선 네트워크 방지 대책을 +수립하고 있는가? +y ‌시스템 내 내장된 무선 네트워크 기능을 사용하지 않는 경우, 배포 및 설치 전에 +비활성화하고 있는가? +세부 설명 +⊙ ‌무선 접속을 위한 사용 제한사항, 환경 설정, 무선 접속 정책을 수립해야 한다. +▶ ‌중요정보를 처리하는 지상국이나 관제 구역 내에서 무선 네트워크를 사용해야 하는 경우, 반드시 +무선 AP 설치 및 사용에 대한 공식 승인 절차 수립 및 이행 +▶ ‌무선네트워크 장치(AP 등) 목록을 관리하고 인가된 임직원 및 승인된 장치만이 무선 네트워크를 +사용할 수 있도록 사용 신청 및 해지 절차를 수립 +▶ ‌방문객용 Wi-Fi와 관제망 또는 업무망과는 VLAN(Virtual Local Area Network) 또는 방화벽 +등을 사용하여 논리적으로 완벽하게 분리하고, 방문객 망에서는 내부 자산에 접근할 수 없도록 +하는 무선 접속 정책 수립 +⊙ ‌무선 네트워크 접속시 인증을 수행하고 통신 세션을 암호화하는 등 보호대책을 수립 및 이행해야 +한다. +▶ ‌WPA3/WPA2-Enterprise를 적용하여 높은 수준의 암호화 및 사용자 인증 적용 +▶ ‌무선 네트워크에 접속을 허용하는 특정 IP 또는 특정 단말 MAC 주소를 등록하거나 무선 AP에 +접근가능한 IP 대역을 제한하여(ACL 설정) 비인가 무선 네트워크 접속 차단 + +--- + + +## 제3장 우주 보안모델 해설 | 59 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +무선 네트워크 허용 단말 MAC 주소 등록 화면 예시 +▶ ‌무선 네트워크 이름(SSID, Service Set Identifier) 숨김 기능을 설정하여 무선 네트워크의 무단 +접근 방지 +▶ ‌무선 AP 관리자 페이지 접근에 대한 IP를 제한하여 무선 AP 보안 강화 +⊙ ‌허가받지 않은 무선 AP 탐지 및 차단 등 비인가 무선 네트워크 대책을 수립해야 한다. +▶ ‌비인가 무선 네트워크(예: 직원이 무단으로 설치한 비인가 AP(Rogue AP) 또는 애드혹 +네트워크(Ad-hoc 네트워크)에 대한 탐지 및 차단, 비인가된 단말의 무선 접속을 탐지 및 +차단하기 위해 무선침입방지시스템(WIPS, Wireless Intrusion Prevention System)을 설치/ +운영 +WIPS(무선 침입방지시스템) 개념도 + +--- + +60 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌무선침입방지시스템(WIPS) 구축이 어려운 경우, 보안 담당자가 주기적으로 비인가 AP 설치 +여부 점검 필요 +⊙ ‌시스템 내 내장된 무선 네트워크 기능을 사용하지 않는 경우, 배포 및 설치 전에 비활성화해야 한다. +▶ ‌서버, 워크스테이션, 네트워크 장비, 프린터 등 시스템 구성요소에 내장된 Bluetooth나 Wi-Fi +등의 무선 통신 기능을 사용하지 않을 경우, 해당 장치의 배포 및 설치 전에 해당 기능 비활성화 +설정 +관련 기준 +⊙ ‌CMMC +• ‌AC.L2-3.1.17 무선 접속 보호 : 인증 및 암호화를 사용하여 무선접속을 보호한다 +• ‌AC.L2-3.1.16 무선 접속 승인 : 이러한 연결을 허용하기 전에 무선 접속을 승인한다 +⊙ ‌K-RMF +• ‌AC-16 무선접속 +1. ‌무선접속을 위한 사용 제한사항, 환경설정 및 연결 요구사항, 구현지침을 수립하고 유지·관리해야 한다. + +## 2. 시스템에 무선접속을 허용하기 전에 인가해야 한다. + +• ‌AC-16-1 무선접속 | 인증 및 암호화 +[사용자 인증 그리고/또는 기기 인증]과 데이터 암호화를 통하여 무선접속을 보호해야 한다. +⊙ +‌ +ISMS-P +• ‌2.6.5 무선 네트워크 접근 : 무선 네트워크를 사용하는 경우 사용자 인증, 송수신 데이터 암호화, AP +통제 등 무선 네트워크 보호대책을 적용하여야 한다. 또한 AD Hoc 접속, 비인가 AP 사용 등 비인가 무선 +네트워크 접속으로부터 보호대책을 수립·이행하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 61 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +AC-10 +모바일 기기 연결 통제 +항목 내용 +승인된 모바일 기기에 대해서만 시스템의 연결을 허용하고 모바일 기기에서 +정보를 암호화해야 한다. +목적 +모바일 기기를 통한 지상국 및 위성 제어시스템 비인가 접근을 방지하고 모바일 +기기나 휴대용 저장장치에 저장되는 중요 정보를 암호화하여 기밀성을 확보하기 +위함이다. +주요 확인사항 +y ‌업무상 사용하는 모바일 기기(노트북, 가상PC, 태블릿 등)의 허용 기준, 업무 +범위, 승인 절차, 기기 보안 설정 등에 대한 정책 및 절차를 수립하고, 허가된 +모바일 기기만 내부 정보시스템 접속을 허용하는가? +y ‌업무용 모바일 기기를 통해 중요정보가 유출되는 것을 방지하기 위해 자료공유 +프로그램 사용 금지, 무선망 이용 통제 등의 정책을 수립 및 이행하고 있는가? +y ‌업무용 모바일 기기의 분실이나 도난에 대비하고 저장된 중요정보를 보호하기 +위해 안전한 암호화 메커니즘을 적용하고 있는가? +y ‌업무용 모바일 기기에 대한 접근통제 대책의 적절성에 대하여 주기적으로 +점검하고 있는가? +세부 설명 +⊙ ‌업무상 사용하는 모바일 기기(노트북, 가상PC, 태블릿 등)의 허용 기준, 업무 범위, 승인 절차, +모바일 기기 보안 설정 등에 대한 정책 및 절차를 수립하고, 허가된 모바일 기기만 내부 정보시스템 +접속을 허용해야 한다. +▶ ‌업무용 모바일 기기 보안정책 및 절차 수립 시 아래의 내용이 고려되어야 함 +• ‌업무용 모바일 기기 허용기준 정의 +• ‌업무용 모바일 기기를 이용해 처리할 업무 범위 정의(예: 위성체 및 탑재체 모니터링/제어 업무를 +제외한 일상 행정처리 업무 등) +• ‌업무용 모바일 기기 사용 시 승인 절차 및 방법 +• ‌업무망 연결 시 인증 방안 : 기기 인증서 기반 인증, MAC 인증 등 +• ‌백신 설치, 보안프로그램 설치 등 업무용 단말기 사용에 따른 보안 설정 정책 +• ‌업무용 단말기 사용에 따른 보안 설정 정책 및 오·남용 모니터링 대책 등 +⊙ ‌업무용 모바일 기기를 통해 중요정보가 유출되는 것을 방지하기 위해 자료공유 프로그램 사용 금지, +무선망 이용 통제 등의 정책을 수립 및 이행해야 한다. +▶ ‌업무용 모바일 기기는 사용 장치 등록, 안전한 사용, 사용 종료 후 저장매체 완전삭제까지 사용의 +전 단계를 포괄하는 정보유출 방지 정책을 적용 + +--- + +62 | 우주 보안 모델 해설 및 적용사례집 +업무용 모바일 기기 정보유출 방지 정책(예시) +y ‌우주 시스템 및 네트워크에 연결되는 모든 모바일 기기는 고유 식별자(예: MAC주소, 일련번호 +등)를 기반으로 보안 부서의 사용승인을 득한 후 업무용 모바일 기기 관리대장에 등록하는 절차 +마련 +y ‌P2P 프로그램, 상용 웹메일, 웹하드, 메신저, SNS 서비스 등을 통하여 고의·부주의로 인한 +개인정보 및 중요정보의 유·노출 방지하기 위한 보안기준 마련 +y ‌WPA3/WPA2-Enterprise 등 보안 프로토콜이 적용된 무선망 이용 등 +y ‌업무용 사용이 종료된 장치의 저장매체에 대한 자료 완전삭제 절차 마련 +⊙ ‌업무용 모바일 기기의 분실이나 도난에 대비하고 저장된 중요정보를 보호하기 위해 안전한 암호화 +메커니즘을 적용해야 한다. +▶ ‌업무용 모바일 기기의 분실도난 시 비인가자에 의한 중요 정보 유출을 원천 차단하기 위해, 기기 +접근통제(화면 잠금) 및 데이터 암호화 설정뿐만 아니라 MDM 등을 활용한 원격 제어 기능을 +포함한 기술적 보호조치 적용 +업무용 모바일 기기 분실·도난 대책(예시) +y ‌비밀번호, 패턴, PIN, 지문, 홍채 등을 사용하여 화면 잠금 설정 +y ‌디바이스 암호화 기능 등을 사용하여 애플리케이션, 데이터 등 암호화 +y ‌모바일 기기 제조사 또는 이동통신사에서 제공하는 기능을 이용한 원격 잠금, 원격 데이터 +삭제(킬스위치 서비스 등) +y ‌중요정보를 처리하는 모바일 기기는 MDM(Mobile Device Management) 등 모바일 단말 관리 +프로그램을 설치하여 원격 잠금, 원격 데이터 삭제, 접속통제 등 +⊙ ‌업무용 모바일 기기에 대한 접근통제 대책의 적절성에 대해 주기적으로 점검해야 한다. +▶ ‌업무용 단말기 신청·승인, 등록·해제, 기기인증 이력 점검 +▶ ‌모바일 기기에 대한 접근 통제 및 보안 설정(암호화 여부, OS 패치 등)이 적절하게 유지되고 +있는지 주기적 점검 + +--- + + +## 제3장 우주 보안모델 해설 | 63 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ ‌CMMC +• ‌3.1.18 (모바일 기기 연결) : 모바일 기기 연결을 통제하여야 한다. +• ‌3.1.19 (모바일에서 중요정보 암호화) : 모바일 기기 및 모바일 컴퓨팅 플랫폼에 저장된 CUI를 +암호화하여야 한다. +• ‌3.1.21 (휴대용 저장장치 사용) : 외부 시스템에서는 휴대용 저장장치(portable storage devices)의 +사용을 제한한다. +⊙ K-RMF +• ‌AC-17 (모바일 기기 접근통제) +① ‌조직에서 통제하는 모바일 기기에 대한 사용 제한사항, 환경설정 및 연결 요구사항, 구현지침을 +수립하고 유지·관리해야 한다. +② 인가받은 모바일 기기에 대해서만 시스템의 연결을 허용해야 한다. +• ‌AC-17-2 (모바일 기기 접근통제 | 모바일 기기 암호화 기술) : 조직이 지정한 모바일 기기의 기밀성과 +무결성 보호를 위해 전체 장치 암호화 또는 컨테이너 암호화 기술을 사용해야 한다. +• ‌AC-18 (인가범위 외 시스템 사용) : 인가범위 외 시스템을 운영하는 기관과 협약을 맺고, 조직의 시스템 +접속을 인가받은 사용자가 다음 사항을 수행할 수 있게 해야 한다. +① 인가범위 외 시스템을 사용하여 조직의 시스템으로 접근 +② 인가범위 외 시스템을 사용하여 정보를 처리ㆍ저장ㆍ전송 +• ‌AC-18-2 (인가범위 외 시스템 사용 | 휴대용 저장매체) : 인가받은 사용자가 인가범위 외 시스템에서 +조직이 관리하는 휴대용 저장매체를 사용하는 것을 [제한 또는 금지]해야 한다. +⊙ ISMS-P +• ‌2.10.6 업무용 단말기기 보안 : PC, 모바일 기기 등 단말기기를 업무 목적으로 네트워크에 연결할 경우 +기기 인증 및 승인, 접근 범위, 기기 보안설정 등의 접근통제 대책을 수립하고 주기적으로 점검하여야 한다. + +--- + +64 | 우주 보안 모델 해설 및 적용사례집 +26 ‌작업 및 기능 : 사용자가 시스템에 특정 요청을 보내 수행할 수 있는 작업(예: 생성, 조회, 수정, 삭제 등의 데이터 처리 작 +업) 및 작업을 처리하는 기능 +AC-11 +외부 연결 통제 +항목 내용 +외부 시스템과26 조직 내부시스템에 대한 연결 및 사용을 확인하고 통제해야 +한다. +목적 +외부 시스템과의 연결 경로를 식별·인가하고 사용을 통제·모니터링함으로써, +조직 시스템 경계를 보호하고 중요정보에 대한 비인가 접근 및 유출을 방지하기 +위함이다. +주요 확인사항 +y ‌시스템에 연결이 허용된 외부 시스템 및 해당 연결 사용을 식별하고 현황을 +관리하고 있는가? +y ‌외부 시스템과의 연결을 승인된 방식(예: VPN, 인증서, 특정 IP 주소 접근 +등)으로만 허용하는 메커니즘을 적용하고 있는가? +y ‌외부 시스템과의 연결 및 사용 현황을 지속적으로 모니터링하고 통제하고 +있는가? +세부 설명 +⊙ ‌시스템에 연결이 허용된 외부 시스템 목록 및 해당 연결 사용을 식별하고 현황을 관리해야 한다. +▶ ‌우주기업 보안 관리 영역 밖에 있는 모든 시스템을 “인가범위 외 시스템”으로 정의하고, 이 +시스템이 조직 시스템에 접근하기 위한 최소한의 보안 요건(예: 조직의 시스템에 원격 접속 시 +다중 인증 적용, 원격 접속 시 암호화 통신(VPN 등) 적용 등) 정의 +▶ ‌중요정보를 처리, 저장, 전송하는 모든 외부 시스템(협력업체 서버, 클라우드 서비스, 원격 +유지보수 장비 등)을 식별 +• ‌식별 사항: 내부 시스템명, 접속목적, 외부 조직명, 외부 시스템명, 접속 사용자, 접속 허용 기간, +연결 방식(VPN, 전용회선 등) 등 +접속 허용 외부 시스템 관리대장 예시 +▶ ‌식별된 외부 연결 목록은 주기적으로 검토 및 업데이트 수행 + +--- + + +## 제3장 우주 보안모델 해설 | 65 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ ‌외부 시스템과의 연결을 승인된 방식(예: VPN, 인증서, 특정 IP 주소 접근 등)으로만 허용하는 +메커니즘을 적용해야 한다. +▶ ‌외부 연결은 반드시 암호화 통신(VPN 등)을 적용하고 암호화 통신이 어려울 경우 전송 데이터 +암호화를 적용해야 하며, 접속 시 다중 인증(MFA)를 적용. 또한, IP 주소 기반 통제(ACL) 또는 +클라이언트 인증서 기반 인증을 병행 적용하는것을 고려 +※ ‌IP 주소 기반 통제(ACL)는 고정 IP를 사용하는 환경(지사, 협력사 사무실 등)에 적합하며, +클라이언트 인증서 기반 인증은 이동이 잦은 환경(재택근무, 출장 등)에 적합 +⊙ ‌외부 시스템과의 연결 및 사용 현황을 지속적으로 모니터링하고 통제해야 한다. +▶ ‌VPN 게이트웨이, 경계 방화벽 등 외부 연결이 발생하는 모든 지점에서 접속 시도, 연결 +성공/실패, 데이터 전송량에 대한 상세한 감사 로그를 안전한 방법(별도 로그 수집서버 등)으로 +저장하고, 이를 모니터링 +▶ ‌모니터링 중 이상행위(예: 접속 허용기간 외 접속 시도, 단시간 내 과다 접속 시도(예: 10회 +이상/1초) 등) 발견 시 해당 출발지 IP 차단 적용 +• ‌윈도우 시스템에서 접속시도 및 연결 성공/실패 감사 설정 예시 +- ‌윈도우 시스템에서 관리자 권한으로 로그인하여 secpol.msc 실행 후 로컬정책 → 감사정책 +성공,실패 설정 +윈도우 시스템의 감사로그 설정 화면 예시 +▶ ‌보안 관리자는 주기적으로 외부 시스템 접속 관련 로그를 검토 수행 + +--- + +66 | 우주 보안 모델 해설 및 적용사례집 +관련 기준 +⊙ ‌CMMC +• ‌3.1.20 (외부 연결 중요 데이터) : 외부 시스템 대한 연결과 사용을 확인하고 제어/제한한다. +• ‌3.5.3 (다중 인증) +[c] 특수 권한 계정에 대한 네트워크 접근 시 다중 인증 구현 +[d] 비특권 계정에 대한 네트워크 접근 시 다중 인증 구현 +[예시] 내부 네트워크에 대한 VPN 접속 시 다중 인증(MFA) 활성화 +⊙ ‌K-RMF +• ‌AC-18 (인가범위 외 시스템 사용) : 인가범위 외 시스템을 운영하는 기관과 협약을 맺고, 조직의 시스템 +접속을 인가받은 사용자가 다음 사항을 수행할 수 있게 해야 한다. +① 인가범위 외 시스템을 사용하여 조직의 시스템으로 접근 +② 인가범위 외 시스템을 사용하여 정보를 처리ㆍ저장ㆍ전송 +⊙ ‌ISMS-P +• ‌2.6.1 네트워크 접근 : 네트워크에 대한 비인가 접근을 통제하기 위하여 IP관리, 단말인증 등 관리절차를 +수립·이행하고, 업무목적 및 중요도에 따라 네트워크 분리(DMZ, 서버팜, DB존, 개발존 등)와 접근통제를 +적용하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 67 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +AC-12 +공공 정보 통제 +항목 내용 +공개적으로 접근 가능한 시스템에 정보를 게시하기 전에 해당 내용을 검토하여 +중요정보가 게시되지 않도록 한다. +목적 +공개 시스템(예: 웹사이트, 공개 포털)을 통해 중요정보 또는 기타 비공개 +정보(Nonpublic Information)가 외부로 유출되거나 비인가자에게 노출되는 +것을 방지하기 위함이다 +주요 확인사항 +y ‌공개적으로 접근 가능한 시스템에 정보를 게시하는 운영 주체(홍보 또는 사업 +담당부서)는 콘텐츠를 게시하기 전, 중요정보가 포함되어 있지 않은지 확인하는 +검토 및 승인 절차 수립 및 이행하고 있는가? +y ‌공개시스템에 정보를 게시하는 담당자가 지정되어 있으며, 해당 담당자에게 +비공개 정보 통제에 대한 교육이 시행되고 있는가? +y ‌이미 게시된 콘텐츠에 중요정보가 포함되어 있는지 정기적으로 검토하고, +발견 시 즉시 삭제 및 수정 등 부적절한 게시를 해결하기 위한 절차가 마련되어 +있는가? +세부 설명 +⊙ ‌공개적으로 접근 가능한 시스템에 정보를 게시하는 운영 주체(홍보 또는 사업 담당부서)는 콘텐츠를 +게시하기 전, 중요정보가 포함되어 있지 않은지 확인하는 검토 및 승인 절차 수립 및 이행해야 한다. +▶ ‌공개적으로 접근 가능한 시스템에 콘텐츠를 게시하기 전에, 해당 내용에 중요정보 및 비공개 +정보가 포함되어 있지 않은지를 확인하는 검토 절차 수립 및 이행 +• ‌데이터, 수치 내용의 정확성 검증 +• ‌중요정보 및 비공개 정보 포함 여부 식별 : 영업비밀, IP가 포함된 네트워크 구성도 등 공개시 +문제가 될 수 있는 요소 식별 +• ‌법적인 이슈 발생 가능 여부 검토 +▶ ‌게시 정보의 보안성 검토 절차는 게시 검토 및 승인 절차에 포함되어야 함 +⊙ ‌공개시스템에 정보를 게시하는 담당자가 지정되어 있어야 하며, 공개시스템 정보 게시 담당자에게 +비공개 정보 통제에 대한 교육을 시행해야 한다. +▶ ‌공개시스템에 정보를 게시하거나 처리할 담당자를 지정하고 이를 직무 기술서 또는 업무 +분장표에 반영 +▶ ‌정보를 게시 운영 부서 책임자는 정보 게시 담당자에게 공개적으로 접근 가능한 공개시스템에 +중요정보 및 비공개 정보가 포함되지 않도록 하는 절차 및 정책에 대한 교육 시행 + +--- + +68 | 우주 보안 모델 해설 및 적용사례집 +⊙ ‌이미 게시된 콘텐츠에 중요정보가 포함되어 있는지 정기적으로 검토하고, 발견 시 즉시 삭제 및 수정 +등 부적절한 게시를 해결하기 위한 절차를 마련해야 한다. +▶ ‌주기적으로 공개시스템의 게시물을 검토하여 중요정보를 포함하고 있지 않은지 확인 +▶ ‌게시물에서 중요정보 또는 비공개 정보 노출을 발견한 즉시 정보 게시 담당자 및 책임자에게 노출 +사실을 보고하고 해당 게시물 삭제 +관련 기준 +⊙ ‌CMMC +• ‌3.1.22 (공공 정보 통제 중요정보) 공개적으로 접근 가능한 시스템에 게시되거나 처리되는 중요정보를 +통제하여야 한다. +⊙ ‌K-RMF +• ‌AC-20 (정보공개) +① 공개적으로 접근 가능한 시스템에 정보를 게시할 담당자를 지정해야 한다. +② ‌정보를 게시할 담당자를 교육하여 공개적으로 접근 가능한 정보에 비공개 정보가 포함되지 않게 해야 +한다. +③ ‌공개적으로 접근 가능한 시스템에 정보를 게시하기 전에 해당 내용을 검토하여 비공개 정보가 포함되지 +않게 해야 한다. +④ ‌공개적으로 접근 가능한 시스템에 비공개 정보가 게시되었는지 조직이 지정한 주기에 따라 검토하고, +비공개 정보 발견 시 삭제해야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 69 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제2절 +식별 및 인증(IA) +IA-01 +식별 및 인증 +항목 내용 +시스템 사용자, 프로세스 및 장치를 식별하고 인증해야 한다. +목적 +시스템 사용자, 프로세스 및 장치를 식별하고 지상국 시스템(탑재체 데이터 +이용 영역·위성운영 영역)에 접근하는 사용자·장치의 비밀번호·키·토큰 등 +인증수단을 안전하게 보호함으로써 무단 접근과 인증정보 탈취로 인한 시스템 +침해를 예방하기 위함이다. +주요 확인사항 +y ‌사용자·프로세스·장치를 식별하고, 사용자 계정 및 장치에 대해 +생성·변경·폐기 절차 등 계정 관리 정책을 수립하고 있는가? +y ‌시스템 접근 및 명령 수행 시 사용자, 프로세스, 장치에 대해 인증 절차를 +적용하고, 인증 실패 시 계정 존재 여부나 인증 정보가 노출되지 않도록 +통제하고 있는가? +y ‌비밀번호 관리기준 및 작성규칙을 수립·이행하고 저장·전송 시 안전하게 +보호하는가? +세부 설명 +⊙ ‌사용자·프로세스·장치를 식별하고, 사용자 계정 및 장치에 대해 생성·변경·폐기 절차 등 계정 관리 +정책을 수립한다. +▶ ‌사용자 계정은 사용자별로 유일하게 구분할 수 있도록 식별자를 할당하고 추측 가능한 식별자 +사용을 제한 +• ‌계정 발급 시 1인 1계정 발급을 원칙으로 하여 모든 사용자에게 고유 사용자 ID를 부여하고, 중복 +불가 원칙 적용 +• ‌계정 공유 및 공용 계정 사용 제한 +- ‌업무상 불가피하게 공용 계정을 사용하는 경우 그 사유와 타당성을 검토하여 책임자의 승인을 +받고 책임추적성을 보장할 추가 통제방안 적용 +• ‌시스템이 사용하는 운영계정은 일반 사용자의 접근 제한 +• ‌시스템 설치 후 제조사의 기본계정 및 시험계정은 제거 또는 추측이 어려운 계정으로 변경하여 +사용(디폴트 패스워드 변경 포함) +• ‌관리자 및 특수권한 계정은 쉽게 추측 가능한 식별자(root, admin, administrator 등)의 사용을 +제한 + +--- + +70 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌사용자를 대신하여 동작하는 프로세스, 서비스, 배치 작업 등에 대해 개별 프로세스 계정 또는 +식별자를 정의하여 식별 +• ‌자동화 작업, 스케줄러, 백엔드 서비스, 위성 명령 중계 프로세스 등은 사용자 계정과 분리된 +프로세스 계정 사용 +• ‌프로세스 계정은 수행 기능, 실행 대상 시스템, 계정 소유자 및 관리 책임자 등을 기준으로 +식별하여 관리 +- 사용자 계정을 이용한 자동 실행, 스크립트 내 계정 하드코딩 등은 원칙적으로 금지 +▶ ‌핵심 시스템에 접속하거나 연결되는 모든 장치를 식별해야 함 +• ‌서버, 워크스테이션, 네트워크 장비, 명령 전송 장치 등 시스템에 접속하거나 연결되는 장치는 +사전에 식별·등록된 장치만 접근을 허용 +• ‌MAC 주소, 일련번호, 고정 IP 주소 등을 기준으로 장치 식별 +- ‌동일한 식별 정보를 복수 장치에 재사용하지 않도록 관리하며, 식별 정보 변경 시 장치 등록 +정보를 최신 상태로 유지 +- 식별되지 않거나 등록되지 않은 장치의 네트워크 접속 및 시스템 연결을 제한 +▶ ‌식별자(계정 및 장치) 관리를 위해 생성(등록)-변경-폐기 절차 수립·운영 +• ‌사용자 계정 생성-변경-폐기 절차 +- ‌계정 생성: 인사 발령 또는 직무 할당에 따라 계정 신청서를 접수하고, 관리자 승인 후 계정 +발급 +- ‌계정 변경: 직무 변경으로 인한 권한 조정 필요 시, 기존 권한을 회수하고 최소 권한 원칙에 +따라 권한 재설정 +- ‌계정 폐기: 퇴사 또는 계약 종료 시 즉시 계정 삭제 +• ‌장치 등록-변경-폐기 절차 +- ‌장치 등록: 신규 장치 도입 시 보안 담당자의 승인을 거쳐 인가된 장치 목록에 고유 식별 정보를 +등록한 후 네트워크 접속을 허용함 +- ‌등록 식별값: 장치 인증서, MAC 주소, 일련번호, 고정 IP 등 +- ‌장치 변경: 하드웨어 부품 교체나 OS 재설치 등 식별자가 변경되는 경우, 인증서를 재발급하고 +장치 목록 업데이트 +- ‌장치 폐기: 장치 반납 또는 폐기 시 인증서를 폐기하고, 장치 목록 및 네트워크 접근 제어 +목록(ACL)에서 해당 식별자를 즉시 삭제 +• ‌계정 및 장치의 생성부터 폐기까지의 모든 이력(신청서, 승인 기록, 등록 로그)을 조직이 정의한 +기간동안 보관 + +--- + + +## 제3장 우주 보안모델 해설 | 71 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌사용자, 프로세스 및 장치 식별자에 대해 식별자 재사용을 제한하는 기준 수립·운영 +• ‌사용자 계정 식별자는 계정 폐기 후 정의된 기간(예: 1년)동안 재사용 금지 +• ‌식별자 재사용 제한 기준은 보안정책에 반영 +▶ ‌사용자, 프로세스 및 장치 식별자에 대해 미사용 상태를 관리하고, 사용되지 않는 식별자의 접근 +차단 +• ‌사용자 계정은 정의된 기간 동안 사용되지 않는 경우 로그인 및 시스템 접근이 불가능하도록 +비활성화 +• ‌자동화 프로세스 계정 및 장치 식별자는 업무 목적이 종료되었거나 더 이상 사용되지 않는 경우 +해당 식별자를 통한 접근 차단 +• ‌퇴사, 계약 종료, 장치 반납 등 업무 목적이 사라진 경우, 해당 식별자의 시스템 접근을 즉시 차단 +⊙ ‌비밀번호 관리 기준 및 작성규칙을 수립·이행하고 저장·전송 시 안전하게 보호해야 한다. +▶ ‌사용자가 안전한 비밀번호를 사용할 수 있도록 다음과 같이 비밀번호 관리기준 수립 +• ‌시스템 도입 시 설정된 초기 또는 임시 비밀번호의 변경 후 사용 +• ‌비밀번호 처리(입력, 변경) 시 마스킹 처리 +• ‌종이, 파일, 모바일 기기 등에 비밀번호 기록·저장을 제한하고, 부득이하게 기록·저장하여야 하는 +경우 암호화 등의 보호대책 적용 +• ‌보안사고 발생 또는 비밀번호의 노출 징후가 의심될 경우 지체 없이 비밀번호 변경 +• ‌비밀번호 분실 등에 따른 재설정 시 본인확인 절차 수행 +• ‌관리자 비밀번호는 비밀등급에 준하여 관리 등 +• ‌비밀번호 작성규칙 예시(불가피한 경우 제외하고는 시스템적으로 강제) +▶ ‌비밀번호는 추측하기 어렵도록 작성 규칙을 수립·이행 +비밀번호 작성규칙 예시 +y ‌문자, 숫자의 조합 및 구성에 따라 최소 8자리 이상(알파벳 대소문자, 특수문자, 숫자 등 두 종류 +이상의 문자를 이용) 또는 10자리 이상(하나의 문자종류로 구성)의 길이로 구성 +y ‌동일한 문자 반복, 키보드 상에서 나란히 있는 문자열, 일련번호, 연속적인 숫자, 사전에 있는 단어, +생일, 전화번호 등 추측하기 쉬운 개인정보 및 계정명과 비슷한 비밀번호 사용 제한 +y ‌비밀번호는 주기적으로 변경(90일 또는 위험 기반 정책 적용) +y ‌비밀번호 변경 시, 최근 사용한 비밀번호의 재사용을 제한(최근 3~5회 재사용 금지) + +--- + +72 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌시스템에서 사용하는 비밀번호 기반 인증수단은 저장 및 전송 전 구간에서 암호학적으로 +보호하여 관리 +• ‌사용자 비밀번호는 평문 또는 복호화 가능한 형태 암호화 하여 저장하면 안되며 해시 +알고리즘으로 일방향 암호화하여 저장 +• ‌시스템, 응용프로그램, 데이터베이스의 비밀번호는 평문 또는 복호화 가능한 암호 알고리즘으로 +암호화하여 저장하는 것을 금지 +• ‌사용자 인증 과정에서 비밀번호가 암호화되지 않은 상태로 전송되지 않도록 통제 +• ‌인증 요청, 로그인, API 호출 등 비밀번호가 포함되는 모든 전송 구간에 대해 암호화된 통신 +채널(TLS 등)을 적용 +관련 기준 +⊙ ‌CMMC +• ‌IA L2-3.5.1 식별 : 시스템 사용자, 사용자를 대신하여 동작하는 프로세스 및 장치를 식별한다. +• ‌IA L2-3.5.2 인증 : 조직 시스템에 대한 액세스를 허용하기 위한 전제 조건으로 사용자, 프로세스 또는 +장치의 신원을 인증한다, +• ‌IA L2-3.5.5 식별자 재사용 : 정의된 기간 동안 식별자 재사용을 방지한다, +• ‌IA L2-3.5.6 식별자 처리 : 정의된 기간 동안 활동이 없으면 식별자를 비활성화한다, +• ‌IA L2-3.5.7 비밀번호 복잡성 : 새로운 비밀번호를 생성할 때 최소한의 비밀번호 복잡성과 문자 변경을 +적용한다. +• ‌IA L2-3.5.8 비밀번호 재사용 : 지정된 세대 동안 비밀번호 재사용을 금지한다, +• ‌IA L2-3.5.9 임시 비밀번호 : 시스템 로그온 시 임시 비밀번호를 사용하도록 허용하고 즉시 영구 +비밀번호로 변경한다. +• ‌IA L2-3.5.10 암호로 보호된 비밀번호 : 암호화로 보호된 비밀번호만 저장하고 전송한다. +• ‌IA L2-3.5.11 모호한 피드백 : 인증 정보에 대한 피드백은 모호하게 해야한다. +⊙ ‌K-RMF +• ‌IA-1-1 장치 식별 및 인증 : 특별권한 계정으로 조직이 지정한 경로를 통해 접근하는 경우 조직이 지정한 +다중 인증을 구현해야 한다. +• ‌IIA-3 식별자 관리 : 다음의 방법으로 시스템 식별자를 관리해야 한다. +1. ‌개인, 그룹, 역할 또는 장치 식별자 할당은 조직이 지정한 직책으로부터 승인을 받아야 한다. + +## 2. 개인, 그룹, 역할 또는 장치에 적용할 식별자를 선택해야 한다. + + +## 3. 개인, 그룹, 역할 또는 장치에 식별자를 할당해야 한다. + + +## 4. 한 번 사용된 식별자는 일정 기간동안 재사용을 방지해야 한다. + +• ‌IIA-4-1- 패스워드 기반 인증 : + +## 1. 패스워드 사용 시 조직이 지정한 패스워드 복잡성 규칙을 만족하도록 해야 한다. + +2. ‌새로운 패스워드로 변경 시 기존의 패스워드에서 조직이 지정한 문자열의 수 만큼 변경해야 한다. + +## 3. 암호기술로 보호되는 패스워드만 저장 및 전송 가능하다. + + +--- + + +## 제3장 우주 보안모델 해설 | 73 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +4. ‌패스워드를 조직이 지정한 최소 사용기간 이내에는 변경할 수 없으며, 조직이 지정한 최대 사용기간 +이내에 변경해야 한다. +5. ‌이전 패스워드 재사용은 조직이 지정한 새로운 패스워드 생성횟수가 되기 이전까지 금지한다. +• ‌IA-5 인증수단 피드백 : 인증과정 중에 피드백을 통해 인증정보가 비인가자에게 노출되는 것을 방지해야 +한다. +⊙ ‌NIS2 +• ‌11.5 식별 : 관련 기관은 네트워크 및 정보 시스템과 그 사용자들의 신원 전체 생명주기를 관리해야 한다. +• ‌11.6 인증 : 관련 기관은 접근 제한 및 접근통제 정책에 기반하여 안전한 인증 절차와 기술을 구현해야 +한다. +⊙ ‌ISMS-P +• ‌2.5.1 사용자 계정 관리 : 정보시스템과 개인정보 및 중요정보에 대한 비인가 접근을 통제하고 업무 목적에 +따른접근권한을 최소한으로 부여할 수 있도록 사용자 등록·해지 및 접근권한 부여·변경·말소 절차를 +수립·이행하고, 사용자 등록 및 권한부여 시 사용자에게 보안책임이 있음을규정화하고 인식시켜야 한다. +• ‌2.5.2. 사용자 식별 : 사용자 계정은 사용자별로 유일하게 구분할 수 있도록 식별자를 할당하고 추측 가능한 +식별자 사용을 제한하여야 하며, 동일한 식별자를 공유하여 사용하는 경우 그 사유와 타당성을 검토하여 +책임자의 승인 및 책임추적성 확보 등 보완대책을 수립·이행하여야 한다. +• ‌2.5.3 사용자 인증 : 정보시스템과 개인정보 및 중요정보에 대한 사용자의 접근은 안전한 인증절차와 +필요에 따라 강화된 인증방식을 적용하여야 한다. 또한 로그인 횟수 제한, 불법 로그인 시도 경고 등 +비인가자 접근 통제방안을 수립·이행하여야 한다. +• ‌2.5.4 비밀번호 관리 : 법적 요구사항, 외부 위협요인 등을 고려하여 정보시스템 사용자 및 고객, 회원 등 +정보주체(이용자)가 사용하는 비밀번호 관리절차를 수립·이행하여야 한다. + +--- + +74 | 우주 보안 모델 해설 및 적용사례집 +IA-02 +다중 인증 +항목 내용 +특수권한 계정으로 네트워크에 접속할 경우에는 다중 인증을 사용하고 재전송 +공격 방지 인증 매커니즘을 적용해야 한다. +목적 +지상국 시스템(탑재체 데이터 이용 영역·위성운영 영역)에 접근하는 +사용자·장치·서비스가 실제 승인된 주체임을 다단계로 검증하여, 단일 +인증수단의 탈취·재생·위조를 통한 무단 접근을 방지하기 위함이다. +주요 확인사항 +y ‌시스템 접근 시 접근 유형 및 계정 권한 수준에 따라 다중 인증이 사용되는가? +y ‌특수권한 계정 및 일반계정의 네트워크 접근 시 재전송 공격(Replay Attack)을 +차단하기 위한 인증기법을 적용하는가? +세부 설명 +⊙ ‌시스템 접근 시 접근 유형 및 계정 권한 수준에 따라 다중 인증을 사용한다. +▶ ‌시스템 접근 유형은 다음과 같이 정의할 수 있음 +• ‌로컬 접근(Local Access): 네트워크를 사용하지 않고 직접 연결(서버 콘솔, 직접 로그인 등)을 +통해 시스템에 접근하는 경우 +• ‌네트워크 접근(Network Access): 네트워크 연결을 통해 시스템에 접근하는 경우 +• ‌원격 접근(Remote Access): 외부 네트워크를 통해 네트워크에 접근하는 경우(VPN, 원격 관리 +접속 등) +▶ ‌특수권한 계정은 접근 방식(로컬·네트워크)과 관계없이 반드시 다중 인증 적용 +• ‌특수권한 계정은 관리자 계정이나 위성 명령 생성·승인·전송 관련 계정을 의미 +• ‌다중 인증은 비밀번호 외에 서로 다른 두 가지 이상의 추가 인증 수단을 결합하여 인증하는 +방식으로 비밀번호와 OTP 또는 생체정보를 조합하는 방식이 일반적 +• ‌운영환경에 직접 영향을 미치는 관리자 계정, 외부 네트워크를 통해 원격 접근이 허용된 관리자 +계정 등의 고위험 계정은 보안키(U2F/FIDO2), 스마트카드, OTP 토큰 등 더 강한 인증요소 적용 +필요 +▶ ‌일반 사용자 계정이라도 네트워크를 통해 시스템에 접근하는 경우 다중 인증 적용 +▶ ‌다음과 같이 다중 인증요소로 활용 가능한 사용자 인증 수단을 2가지 이상 결합하여 사용 + +--- + + +## 제3장 우주 보안모델 해설 | 75 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +사용자 인증 수단 예시 +구분 +인증 수단 +비고 +지식 기반 +비밀번호 +y ‌안전한 비밀번호 작성 규칙 적용 및 변경 주기 고려 +y ‌비밀번호 도용, 무작위 대입 공격 등에 대한 대응 필요 +y ‌시스템 설치 시 제품 등에서 제공하는 디폴트 계정 및 +비밀번호는 사용 정지 또는 변경 필요 +소유 기반 +인증서(PKI) +y ‌개인키의 안전한 보관 필요 (안전한 보안매체에 보관 권고) +OTP +y ‌OTP 토큰, 모바일 OTP 등 다양한 방식 존재 +기타 +y ‌스마트카드 방식 +y ‌물리적 보안토큰 방식 등 +생체 기반 +지문, 홍채, 얼굴 등 +y ‌생체인식정보의 안전한 관리 필요 +출처 : ISMS-P 인증기준 안내서(KISA) +▶ ‌다중 인증 방식 구현은 환경과 업무 필요성에 따라 달라질 수 있음 +• ‌위성 탑재 소프트웨어처럼 인증 기능 변경이 제한되는 시스템의 경우, 물리적 접근통제(전용 공간 +운영 등), 접근 가능한 사용자 및 단말 제한 등 추가적인 보안 통제 적용 +• ‌모바일 기기를 통해 핵심 시스템에 접근하는 경우 반드시 다중 인증 적용 필요 +• ‌사용자 인증의 보완통제로 사용할 수 있는 수단은 예는 다음과 같음(ISMS-P 인증기준 안내서 +예시) +사용자 인증 수단 예시 +구분 +인증 수단 +비고 +기타 방식 +(사용자 +인증의 +보완통제로 +적용 가능) +IP 주소 +y ‌정 IP 주소에서만 해당 ID로 접속 가능 +MAC 주소 +y ‌단말기의 MAC 주소를 기반으로 등록된 단말기에서만 +접속 가능 +장치 일련번호 +y ‌특정 PC 또는 특정 디바이스(스마트폰 등)에서만 접속 +가능 +기타 +y ‌위치정보를 기반으로 접속 가능 +출처 : ISMS-P 인증기준 안내서(KISA) + +--- + +76 | 우주 보안 모델 해설 및 적용사례집 +⊙ ‌특수권한 계정 및 일반 계정의 네트워크 접근 시 재전송 공격(Replay Attack)을 차단하기 위한 +인증기법을 적용한다. +▶ ‌재전송 공격 방지 인증은 특수 권한 계정 및 사용자 계정과 API, 자동화 서비스, 시스템 간 연동 +계정도 적용해야 함 +▶ ‌인증 정보는 제한된 시간 내에서만 유효해야 함 +• ‌시간 기반 일회용 비밀번호(TOTP, Time-based One-Time Password)로 30초/60초 주기로 +변경되는 인증값 사용 가능 +• ‌커버로스(Kerberos) 등 티켓 기반 인증 메커니즘 적용 가능 +- ‌분산 컴퓨팅 환경에서 대칭키 암호를 이용하여 사용자 인증을 제공하는 중앙 집중형 인증 방식. +- ‌클라이언트의 요청에 따라 인증 서버는 클라이언트의 패스워드를 기초로 티켓 증명 +티켓(TGT:Ticket-Granting Ticket)과 세션 키를 클라이언트에게 제공하고, 클라이언트는 +애플리케이션 서버에 접근 시 일정 기간 내 사용자 인증용으로 티켓 증명 티켓(TGT)을 +사용하고, 커버로스(Kerberos)는 개방 네트워크상에서 인증과 통신의 암호화를 시행하여, +보안성을 확보함 +▶ ‌인증 요청은 재사용이 불가능해야 함 +• ‌동일한 인증 요청 또는 서명 값이 재사용될 경우 인증이 거부되고 인증 토큰은 1회 사용 후 +폐기되도록 설정 +• ‌API 및 자동화 서비스 인증 시 요청마다 변경되는 난수(Nonce)를 포함하는 방식 사용 가능 +▶ ‌인증 정보는 세션 및 통신 보호 구간 내에서 관리되어야 함 +• ‌인증 토큰은 로그인 세션과 연계하여 관리되며, 세션 종료 시 함께 무효화되어야 함 +• ‌인증 과정 중 세션 정보가 변경되거나 비정상 상태로 판단되는 경우 인증을 실패 처리해야 함 +• ‌인증 정보는 반드시 TLS 등 암호화된 통신 구간에서만 전송되어야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 77 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ ‌CMMC +• ‌IA L2-3.5.3 다중 인증 : 권한이 있는 계정에 대한 로컬 및 네트워크 접속과 권한이 없는 계정에 대한 +네트워크 접속에는 다중 인증을 사용한다. +• ‌IA L2-3.5.4 재생 방지 인증 : 권한이 있는 계정과 권한이 없는 계정에 대한 네트워크 접속에 대해 재생 +방지 인증 매커니즘을 선택한다. +⊙ K-RMF +• ‌IA-1-5 2채널 인증 : 조직이 지정한 조건시, 조직이 지정한 2채널 인증 기술을 구현해야 한다. +• ‌IA-1-6 다중 인증-재전송 공격 방지 : 재전송 공격에 내성이 있는 인증 매터니즘을 적용하여 조직이 +지정한 계정유형에 접근해야 한다. +⊙ NIS2 +• ‌11.7 다중 인증 : 관련 기관은 사용자가 네트워크 및 정보 시스템에 접근할 때, 다중 인증 요소(MFA) 또는 +지속적 인증 메커니즘(continuous authentication)을 통해 인증되도록 보장해야 한다. +⊙ ISMS-P +• ‌2.5.3 사용자 인증 : 정보시스템과 개인정보 및 중요정보에 대한 사용자의 접근은 안전한 인증절차와 +필요에 따라 강화된 인증방식을 적용하여야 한다. 또한 로그인 횟수 제한, 불법 로그인 시도 경고 등 +비인가자 접근 통제방안을 수립·이행하여야 한다. + +--- + +78 | 우주 보안 모델 해설 및 적용사례집 +제3절 +시스템 및 통신 보안(SC) +SC-01 +경계 보호 +항목 내용 +조직 시스템의 외부 경계와 주요 내부 경계에서의 통신(송수신 정보)을 모니터링, +제어 및 보호해야 한다. +목적 +지상국 시스템(탑재체 데이터 이용 영역·위성운영 영역)의 외부·내부 경계에서 +비인가 통신을 차단하고, 정상적인 운용 통신만 허용되도록 경계 보호 기능을 +적용하여 침해 위협을 선제적으로 방지하기 위함이다. +주요 +확인사항 +y ‌네트워크의 특성 및 중요도에 따라 네트워크 망을 분리하여 적용하는가? +y ‌공개 서비스 및 외부 연동을 위한 DMZ를 구축하여 운영하는가? +y ‌인터넷을 통해 들어오는 통신(원격 접속 등)을 암호화하고, 트래픽을 +모니터링하는가? +세부 설명 +⊙ ‌네트워크의 특성 및 중요도에 따라 네트워크 망을 분리하여 적용해야 한다. +▶ ‌서비스 유형, 사용자 그룹, 정보자산 중요도 등을 기준으로 네트워크 영역을 물리적 또는 +논리적으로 분리하고, 영역 간 접근을 통제해야 함 +• ‌물리적 망분리: 통신망, 장치 등을 물리적으로 이원화하여 2대의 PC 구성 등으로 분리하는 방식 +• ‌논리적 망분리: 물리적으로 하나의 통신망, 장치 등을 사용하지만 VDI 같은 가상화 등의 +방법으로 네트워크 영역을 분리하는 방식 +- ‌논리적 망분리는 주로 방화벽 또는 스위치 허브의 ACL을 이용하여 기본 차단(deny-all) 후 +승인된 통신만 허용하는 방식으로 운영 +▶ ‌위험 평가 결과를 반영하여 시스템을 여러 네트워크 구간으로 세분화하고, 외부 또는 제3자 +환경과 내부 시스템이 직접 연계되지 않도록 구성 + +--- + + +## 제3장 우주 보안모델 해설 | 79 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +네트워크 분리 구성 예시 +네트워크 영역 +적용 예시 +DMZ +(Demilitarized Zone) +y ‌외부 서비스를 위한 웹서버, 메일서버 등 공개서버는 DMZ에 위치 +y ‌DMZ를 경유하지 않고 인터넷에서 내부시스템으로 직접 연결되는 것을 +차단 +운영 영역 +y ‌실제 운영되는 서버, 보안장비, 네트워크 장비 등은 일반 업무용 +네트워크 영역과 분리 +개발 영역 +y ‌개발업무(개발서버, 테스트서버 등)에 사용되는 네트워크는 운영 +네트워크와 분리 +외부자 영역 +y ‌외부 인력이 사용하는 네트워크 영역(외주용역, 민원실, 교육장 등)은 +내부 업무용 네트워크와 분리 +기타 +y ‌업무망의 경우 업무 특성·중요도에 따라 네트워크 대역 분리 기준을 +수립하여 운영 +y ‌클라우드 서비스를 이용하는 경우 클라우드 환경 특성을 반영한 +접근통제 기준 수립·이행 +출처 : ISMS-P 인증기준 안내서(KISA) +⊙ ‌공개 서비스 및 외부 연동을 위한 DMZ를 구축하여 운영해야 한다. +DMZ(Demilitarized Zone) 영역은 인터넷망 구간과 내부망 사이에 위치한 중간 지점 또는 +인터넷망 구간 사이에 위치한 중간 지점으로서 인터넷망 구간에서 직접 접근이 가능한 영역 +출처 : 개인정보 안전성 확보조치 기준 안내서 +DMZ 구간의 예시 +▶ ‌외부 네트워크에 공개되는 시스템 구성요소(웹 서버, 메일 서버, VPN 게이트웨이 등)를 내부 +네트워크와 물리적 또는 논리적으로 분리된 DMZ 영역에 배치 + +--- + +80 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌DMZ를 경유하지 않고 인터넷에서 내부 시스템으로의 직접 연결되는 것을 차단 +⊙ ‌인터넷을 통해 들어오는 통신(원격 접속 등)을 암호화하고, 트래픽을 모니터링해야 한다. +▶ ‌인터넷 등 비신뢰 구간을 경유하는 원격 접속은 암호화 통신을 적용하여 기밀성과 무결성 확보 +▶ ‌외부 경계 및 주요 내부 경계를 통과하는 인바운드·아웃바운드 트래픽을 상시 모니터링하여 이상 +징후를 탐지 +▶ ‌외부로 노출된 전송 경로가 물리적으로 보호되지 않는 경우, 전송 데이터에 암호화를 적용하여 +정보 유출을 방지 +관련 기준 +⊙ ‌CMMC +• ‌SC.L.2-3.13.1 경계 보호 : 조직 시스템의 외부 경계와 주요 내부 경계에서 통신(즉, 조직 시스템에서 +전송하거나 수신하는 정보)을 모니터링, 제어 및 보호한다. +• ‌SC.L.2-3.13.5 공공 접근 시스템 분리 : 내부 네트워크와 물리적 또는 논리적으로 분리되어 공개적으로 +접근 가능한 시스템 구성 요소에 대한 하위 네트워크를 구현한다. +⊙ ‌K-RMF +• ‌SC-8 경계 보호 : 1. 시스템 외부관리 인터페이스 및 시스템의 주요 내부 관리 인터페이스에서 통신을 +모니터링하고 통제해야 한다. +2. ‌외부 네트워크와 조직의 내부 네트워크는 물리적 또는 논리적으로 분리된 서브 네트워크를 통해 +연결되어야 한다. +3. ‌내부에서 외부 네트워크로 접속할 경우, 조직의 보안 아키텍처에 따라 구성된 경계 보호기기로 구성된 +관리 인터페이스를 통해야 한다. +⊙ ‌NIS2 +• ‌6.7 네트워크 보안 +• ‌6.8 네트워크 분리/세분화 +⊙ ‌ISMS-P +• ‌2.6.1 네트워크 접근 : 네트워크에 대한 비인가 접근을 통제하기 위하여 IP관리, 단말인증 등 관리절차를 +수립·이행하고, 업무목적 및 중요도에 따라 네트워크 분리(DMZ, 서버팜, DB존, 개발존 등)와 접근통제를 +적용하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 81 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +SC-02 +보안공학 원칙 적용 및 기능 분리 +항목 내용 +보안 아키텍처는 심층 방어 원칙을 기반으로 설계하고, 시스템의 관리 기능과 +사용자 기능을 명확히 분리하여 운영하여야 하며, 시스템 개발 과정에서는 +보안공학 원칙을 적용하여야 한다. +목적 +우주 시스템(탑재체 데이터 이용 영역·위성운영 영역)의 설계·구축·운영 +단계에서 보안공학 원칙을 적용해, 단일 계정 또는 단일 구성 요소가 전체 +시스템을 제어하거나, 보안사고가 시스템 전체로 확산되는 것을 방지하며, +안정적으로 위성 명령·운영 데이터를 처리할 수 있는 안전한 구조를 확보하기 +위함이다. +주요 +확인사항 +y ‌우주 시스템 설계·개발 단계에서 보안공학 원칙(심층 방어·최소 권한·기능 +분리·표면적 최소화)을 구조적으로 반영하고 있는가? +y ‌운영 기능(명령 생성·승인·전송)과 관리 기능(설정 변경·계정 관리·패치 +적용)이 분리되어 단일 계정·단일 권한으로 시스템 전체가 제어되지 않도록 +설계되어 있는가? +y ‌시스템 개발·변경·배포·운영 전 과정에서 보안 요구사항 검토·승인 절차가 +반영되고 보안 내재화(Secure by Design)가 지속적으로 유지되고 있는가? +세부 설명 +⊙ ‌우주 시스템 설계·개발 단계에서 보안공학 원칙(심층 방어·최소 권한·기능 분리·표면적 최소화)을 +구조적으로 반영해야 한다. +▶ ‌보안공학(Security Engineering) : 시스템을 설계·개발·배포·운영하는 전 생명주기(SDLC)에 +걸쳐 보안을 내재화하는 접근법 +• ‌보안 기능을 “나중에 적용하는” 방식이 아니라, 초기 설계 단계부터 보안 요구사항을 +내재화(Secure by Design) 하여 공격·오류·오남용이 발생해도 시스템이 전체적으로 붕괴하지 +않도록 만듦 +• ‌보안공학의 핵심 구성 요소는 아래 표와 같음 + +--- + +82 | 우주 보안 모델 해설 및 적용사례집 +보안공학의 핵심 구성 요소 +구성 요소 +설명 +심층 방어 +(Defense in Depth) +여러 계층의 보안 통제로 공격이 한 단계 뚫려도 다음 단계가 보호 +최소 권한 +(Least Privileage) +계정·서비스·프로세스에 필요한 최소 권한만 부여 +기능 분리 +(Separation of Duties) +운영·관리·개발·감사 기능을 분리하여 단일 실패 지점(SPoF) 제거 +공격 표면 최소화 +(Attack Surface +Reduction) +불필요한 기능·서비스·포트 제거로 공격 기회를 최소화 +책임추적성(Traceability) +누가 어떤 작업을 수행했는지 명확하게 추적 가능하도록 기록 +구조적 무결성 +(Structural Integrity) +시스템 한 부분의 오류나 침해가 전체에 영향을 주지 않도록 설계 +▶ ‌공격자의 공격을 여러 단계에서 방어할 수 있도록 심층 방어 설계 +• ‌네트워크 계층에서는 네트워크의 특성 및 중요도에 따라 망을 분리하여 구성, 망 간 데이터 +흐름을 식별 및 모니터링해야 함 +• ‌애플리케이션 계층(탑재체 제어 애플리케이션, 위성 제어 애플리케이션 등)에서는 사용자 인증, +입력값 검증 등의 기능을 구현해야 함 +• ‌데이터 계층에서는 데이터의 무결성 검증, 데이터 암호화를 통한 기밀성을 확보해야 함 +▶ ‌서비스·프로세스·계정에는 목적 수행에 필요한 최소 권한만 부여 +▶ ‌우주 애플리케이션은 필요 기능만 제공하는 최소 기능 원칙 적용 +• ‌사용하지 않는 서비스·포트·API 비활성화 +• ‌default 계정 제거 +• ‌테스트·디버그 인터페이스 비활성화 +⊙ ‌운영 기능(명령 생성·승인·전송)과 시스템 관리 기능(설정 변경·계정 관리·패치 적용)을 분리해야 +한다. +▶ ‌시스템 관리 기능은 데이터베이스, 네트워크 구성요소, 워크스테이션, 서버 등을 관리하는 데 +필요한 기능을 포함하며, 일반적으로 특수 권한이 요구됨 +▶ ‌운영 기능은 운영자가 일상적인 업무 수행을 위해 사용하는 기능(예: 명령 생성 및 송신, 탑재체 +데이터 조회 등)을 의미하며, 시스템 설정이나 보안 정책을 변경할 수 있는 권한과는 엄격히 구분 +▶ ‌단일 계정·단일 권한으로 시스템 전체가 제어되지 않도록 설계 + +--- + + +## 제3장 우주 보안모델 해설 | 83 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌일반 사용자가 시스템 관리 기능을 수행하는 것을 차단하고, 시스템 관리자 또한 일반 +업무(이메일, 웹 브라우징 등)를 수행할 때는 관리자 계정이 아닌 표준 사용자 계정을 사용 +▶ ‌운영 기능과 시스템 관리 기능의 분리는 물리적 또는 논리적으로 구현 +• ‌서로 다른 컴퓨터 사용, 가상화 기술 활용 등 +⊙ ‌시스템 개발·변경·배포·운영 전 과정에서 보안 요구사항 검토·승인 절차가 반영되어 보안 +내재화(Secure by Design)가 지속적으로 유지되어야 한다. +▶ ‌우주 시스템을 신규로 도입·개발 또는 변경하는 경우 우주 관련 컴플라이언스 요구사항, 최신 +취약점 등을 포함한 보안 요구사항을 명확히 정의하고 설계 단계에서부터 반영 +• ‌우주 관련 컴플라이언스 요구사항 : 접근 권한, 접근통제, 암호화, 접속기록 등 +• ‌상위 기관 및 내부 규정에 따른 보안 요구사항 +• ‌정보보호 관련 기술적 요구사항 : 인증, 개발보안 등 +• ‌최신 보안취약점 등 +▶ ‌정보시스템의 안전한 구현을 위한 코딩 표준을 마련하고 적용해야 함 +• ‌알려진 기술적 보안 취약점으로 인한 위협을 최소화하기 위하여 안전한 코딩 표준 및 규약 마련 +• ‌Java, PHP, ASP, 웹, 모바일 등 관련된 개발 언어 및 환경을 모두 포함 +• ‌안전한 코딩 표준 및 규약에 대하여 개발자 대상 교육 수행 +▶ ‌정보시스템 인수 전 인수기준 적합성 여부를 확인하기 위한 시험 수행 +• ‌정보시스템이 사전에 정의한 보안 요구사항을 만족하여 개발·변경 및 도입되었는지 확인하기 +위한 인수기준 및 절차 수립 +• ‌정보시스템을 인수하기 전 사전 정의한 인수기준과의 적합성 여부를 테스트 등을 통하여 확인한 +후 인수 여부를 결정 +• ‌시스템 보안 설정, 불필요한 디폴트 계정 제거 여부, 최신 보안취약점 패치 여부 등 확인 필요 +• ‌개발·변경 및 구현된 기능이 사전에 정의된 보안 요구사항을 충족하는지 시험 수행 +▶ ‌신규 도입·개발 및 변경된 시스템을 운영환경으로 안전하게 이관하기 위한 통제 절차 수립 및 +이행 +• ‌이관 담당자를 지정하고, 시험 결과의 적정성을 최종 확인 후 책임자 승인 하에 운영환경 이관을 +실시해야 함 +• ‌운영환경으로의 이관 실패나 장애 발생에 대비하여 이전 버전 보관 및 복구 방안을 사전에 +마련해야 함 +• ‌운영환경에는 서비스 실행에 불필요한 파일(소스코드, 개발도구, 테스트 데이터, 백업본 등)이 +존재하지 않도록 제거해야 함 +• ‌우주 시스템의 취약점 예방 및 보안사고 대응을 위한 지속적인 보안 모니터링 및 유지관리 + +--- + +84 | 우주 보안 모델 해설 및 적용사례집 +관련 기준 +⊙ ‌CMMC +• ‌SC.L.2-3.13.2 보안 공학 : 조직 시스템 내에서 효과적인 정보 보안을 증진하는 아키텍처 설계, +소프트웨어 개발 기술 및 시스템 엔지니어링 원칙을 채택한다. +• ‌SC.L.2-3.13.3 역할 분리 : 사용자 기능과 시스템 관리 기능을 분리한다. +⊙ ‌K-RMF +• ‌SA-3-3 개발방법/기술/관행 : 개발자는 다음 사항을 포함하여 시스템 개발 수명주기 사용을 입증해야 +한다. + +## 1. 최신 시스템/보안 공학 방법 + + +## 2. 소프트웨어 개발 방법 + + +## 3. 시험평가/검증 기법 + + +## 4. 품질 통제 절차 + +• ‌PA-T-1 심층 방어 : 다음과 같은 심층 방어 접근방식을 사용하여 보안 아키텍처를 설계해야 한다. + +## 1. 조직이 지정한 보안 보호조치를 조직이 지정한 위치 및 아키텍처 계층에 할당해야 한다. + + +## 2. 할당된 보호조치가 조정·통합되고, 상호 강화하는 방식으로 구현되도록 보장해야 한다. + +• ‌SC-1 기능 분리 : 시스템 관리기능과 사용자 기능(사용자 인터페이스 포함)을 분리해야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 85 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +SC-03 +저장 및 전송 정보보안 +항목 내용 +저장 및 전송되는 정보의 기밀성 및 무결성을 보호해야 한다. +목적 +지상국 시스템(탑재체 데이터 이용 영역·위성운영 영역)에서 +처리·저장·전송되는 명령, 텔레메트리, 운영로그, 구성정보 등 중요 정보의 +기밀성과 무결성을 보호하여, 위성 운영 과정에서 정보 위변조·탈취·오류로 인한 +운용 실패를 예방하기 위함이다. +주요 +확인사항 +y ‌지상국 시스템에서 저장되는 중요 정보(명령·로그·구성정보 등)가 암호화 또는 +동등한 보호조치로 안전하게 보호되고 있는가? +y ‌uplink/downlink 및 내부 전송 구간의 중요 정보가 전송 중 암호화되어 +있으며, 무결성 검증을 통해 변조되지 않도록 보호되고 있는가? +y ‌공유 리소스(메모리, 버퍼, 임시 저장공간 등)에서 정보가 비인가 +사용자·프로세스에 의해 노출되지 않도록 통제하고 있는가? +세부 설명 +⊙ ‌지상국 시스템에서 저장되는 중요 정보(명령·로그·구성정보 등)를 암호화 또는 동등한 보호조치로 +안전하게 보호한다. +▶ ‌명령·로그·구성정보 등 중요 정보 저장 시 암호화 또는 보호조치 적용 +• ‌명령 데이터, 운영 로그, 설정 파일, 인증 정보 등 중요 정보는 AES-256, ARIA-256 등 검증된 +암호 알고리즘 적용 +- 데이터베이스, 스토리지, 백업 데이터에도 동일한 보호 수준 적용 +• ‌필요 시 파일 단위 암호화와 디스크 단위 암호화 병행 적용 가능 +▶ ‌암호화에 사용되는 키는 안전한 장소에 보관하고 암호키 관리 절차를 수립하고 이행 +▶ ‌저장된 정보의 무결성이 훼손되지 않도록 보호해야 함 +• ‌중요 설정 파일 및 명령 파일은 디지털 서명(AEAD/GCM Tag, HMAC 등)처럼 변조 여부를 +확인할 수 있는 무결성 검증 수단을 적용 +• ‌로그 데이터는 위·변조 여부를 확인할 수 있도록 보호 조치(append-only, WORM 등)가 적용 +▶ ‌중요 정보가 저장된 영역은 허가된 계정만 접근 가능하도록 통제 +• ‌개발·시험 환경에서 운영 데이터에 접근하지 않도록 분리 +• ‌저장소 접근 로그는 기록·점검이 가능하도록 관리 + +--- + +86 | 우주 보안 모델 해설 및 적용사례집 +⊙ ‌uplink/downlink 및 내부 전송 구간의 중요 정보가 전송 중 암호화되어 있으며, 무결성 검증을 통해 +변조되지 않도록 보호한다. +▶ ‌외부와 연동되는 통신 구간(uplink, downlink 등)은 데이터를 암호화하여 전송해야 함 +• ‌명령 전송 구간에서는 인증, 암호화, 무결성 검증 적용이 필수적 +- CCSDS 암호화 알고리즘 권고 기준(Blue Book) 참고 +출처 : CCSDS Cryptographic Algorithms, 352.0-B-2(CCSDS) +CCSDS 암호화 알고리즘 권고 기준 +• ‌CCSDS 권고에 따르면, 위성, 지상국, 통신 구간을 포함한 우주 시스템 전반에 적용되는 암호 +알고리즘의 경우 AES-256을 사용해야 함 +- 기존 운영 중인 레거시 시스템의 경우 AES-128까지는 허용 +▶ ‌송수신되는 데이터는 무결성 검증을 통해 누락 또는 변조 여부를 확인하고, 누락·변조된 데이터 +탐지 시 자동 차단 +▶ ‌전송 경로는 업무 목적에 맞게 최소화하여 구성해야 함 +• ‌불필요한 중계 구간이나 우회 경로 제거 +• ‌운영 구간과 인터넷 구간은 명확히 분리된 구조로 설계 +• ‌외부 네트워크에서 운영망으로 직접 접근 차단 +⊙ ‌공유 리소스(메모리, 버퍼, 임시 저장공간 등)에서 정보가 비인가 사용자·프로세스에 의해 노출되지 +않도록 통제한다. +▶ ‌메모리, 버퍼 등은 사용 종료 후 초기화하고 이전 세션 정보가 재사용되지 않도록 처리 + +--- + + +## 제3장 우주 보안모델 해설 | 87 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌임시 파일(temp), 큐(queue), 버퍼 등은 접근권한을 제한하고, 자동 삭제 정책 적용 +▶ ‌공유 저장소(NFS, NAS)는 허가된 사용자만 접근할 수 있도록 통제 +▶ ‌운영 기능과 관리 기능은 동일한 메모리 영역을 공유하지 않도록 OS 권한 분리, 컨테이너 격리, +VM(Virtual Machine) 기반 격리 적용 +▶ ‌오류 발생 시 생성되는 덤프 파일 등은 민감 정보 포함 여부를 확인하여 관리 +• ‌필요 시 암호화하여 저장하며, 최소 보존 기간과 접근통제를 적용 +관련 기준 +⊙ +‌ +CMMC +• ‌C.L.2-3.13.4 공유 리소스 통제 : 공유 시스템 리소스를 통해 승인되지 않고 의도치 않은 정보 전송을 +방지한다. +• ‌SC.L.2-3.13.8 전송 중인 데이터 : 별도의 물리적 보호 장치가 없는 한, 전송중에 중요정보가 무단으로 +공개되는 것을 방지하기 위해 암호화 매커니즘을 구현한다. +• ‌SC.L.2-3.13.16 저장(휴면 상태의) 데이터 : 저장(휴면 상태) 중요정보의 기밀성을 보호한다. +⊙ ‌K-RMF +• ‌SC-5 공유 시스템 자원 내 정보 : 공유 시스템 자원을 통한 무단 및 의도하지 않은 정보전송을 방지해야 +한다. +• ‌SC-9 전송 정보의 기밀성 및 무결성 : 전송되는 정보의 기밀성 및 무결성을 보호해야 한다. +• ‌SC-10 저장된 정보의 보호 : 저장된 정보의 기밀성과 무결성을 보호해야 한다. +⊙ ‌ISMS-P +• ‌2.7.1 암호정책 적용 : 개인정보 및 주요정보 보호를 위하여 법적 요구사항을 반영한 암호화 대상, 암호 +강도, 암호사용 정책을 수립하고 개인정보 및 주요정보의 저장·전송·전달 시 암호화를 적용하여야 한다. +• ‌2.10.5 전송정보 보안 :다른 조직에 개인정보 및 중요정보를 전송할 경우 안전한 전송 정책을 수립하고 +조직 간 합의를 통하여 관리 책임, 전송방법, 개인정보 및 중요정보 보호를 위한 기술적 보호조치 등을 +협약하고 이행하여야 한다. + +--- + +88 | 우주 보안 모델 해설 및 적용사례집 +SC-04 +통신 보안 +항목 내용 +기본적으로 모든 트래픽을 거부하고, 필요한 트래픽만 예외적으로 허용하는 +방식으로 운용하고, 로컬 및 원격연결을 동시에 하지 못하도록 통제하며 통신세션 +종료 이후 또는 일정 기간동안 작업이 없을 경우 통신 세션과 관련된 연결을 +종료해야 한다. +목적 +지상국 시스템(탑재체 데이터 이용 영역·위성운영 영역)에서 이루어지는 +로컬·원격 접속 및 통신 세션이 비인가 접근·우회 연결·세션 탈취 없이 안전하게 +설정·유지·종료되도록 통신 경로와 세션 관리 보안 기능을 적용하여 위성 운영 +안정성을 확보하기 위함이다. +주요 +확인사항 +y ‌지상국 시스템의 로컬·원격 접속 시 기본 차단(Default Deny) 정책을 +적용하고, 필요한 통신만 예외적으로 허용하도록 네트워크 통제가 적용되고 +있는가? +y ‌통신 세션 설정 시 인증·무결성 검증·보호 채널(TLS/VPN 등)이 적용되어 세션 +탈취·위조·우회 연결을 방지하고 있는가? +y ‌일정 시간 동안 활동이 없거나 세션 종료 조건 충족 시, 세션이 자동으로 +종료(Session Timeout)되도록 설정하고, 종료 후 남은 연결·세션 정보를 +안전하게 삭제하고 있는가? +세부 설명 +⊙ ‌지상국 시스템의 로컬·원격 접속 시 기본 차단(Default Deny) 정책을 적용하고, 필요한 통신만 +예외적으로 허용하도록 네트워크 통제를 적용한다. +▶ ‌네트워크 통신은 모두 기본 차단(Default Deny)하고, 업무상 필요성이 명확한 통신만 정책에 +따라 예외적으로 허용 +• ‌업무상 필요에 따라 예외적으로 허용하는 통신은 반드시 출발지(Source IP/대역), +목적지(Destination IP/대역), 서비스 포트 및 프로토콜(Service/Port/Protocol), 통신 방향을 +최소한의 범위로 정의 +▶ ‌허용되는 통신의 포트, 프로토콜, 경로를 명확히 정의하고, 사전에 승인된 통신을 허용 +목록(Allow List)으로 관리 +• ‌방화벽·ACL로 명령 경로, 텔레메트리(telemetry) 경로 등 필요 트래픽만 허용 +• ‌P2P, 메신저 등 업무와 무관하고 위험한 서비스와 연관된 포트 및 프로토콜은 정책으로 차단 +▶ ‌시스템 간 통신 경로는 임의 변경이 불가능하도록 고정된 경로만 허용하고, 정책에 정의되지 않은 +우회 경로를 통한 통신은 차단 + +--- + + +## 제3장 우주 보안모델 해설 | 89 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌NAT(Network Address Translation), 포트 포워딩 등 외부에서 내부 시스템으로 직접 연결되는 +구조는 원칙적으로 제한 +• ‌공용 인터넷 회선 또는 공용 Wi-Fi를 통한 운영 목적의 시스템 접속 제한 +▶ ‌원격 접속 단말이 조직 시스템에 연결된 상태에서 동시에 외부 네트워크와 통신하지 못하도록 +분할 터널링27 차단 +• ‌원격 접속 시 인터넷과 운영망을 동시에 사용하여 내부 통신이 노출되거나 우회되는 위험을 방지 +▶ ‌VPN 접속 시 단말의 모든 통신 트래픽이 조직 네트워크를 경유하도록 구성하여, 외부 +네트워크를 통한 우회 통신이 발생하지 않도록 통제 +⊙ ‌통신 세션 설정 시 인증·무결성 검증·보호 채널(TLS/VPN 등)이 적용되어 세션 탈취·위조·우회 +연결을 방지한다. +▶ ‌통신 세션은 사전에 승인된 사용자 또는 시스템 간에만 수립되도록 구성하고, 인증되지 않은 +대상과의 세션 생성은 차단 +• ‌외부 연동 및 시스템 간 통신 구간에서는 서버와 클라이언트가 상호 인증 절차를 거쳐 서로의 +신원을 확인 +• ‌서버 인증서뿐 아니라 필요 시 클라이언트 인증서(mTLS) 또는 장치 인증을 적용하여 일방향 +인증에 따른 위·변조 위험을 방지 +• ‌통신에 사용하는 인증서는 조직이 신뢰하는 인증기관(CA)에서 발급한 유효한 인증서만 사용 +▶ ‌통신 세션이 유지되는 동안 인증 상태가 우회되거나 변조되지 않도록 보호된 통신 채널을 적용 +• ‌통신 구간에는 TLS, IPsec, 전용 VPN 등 암호화와 무결성 검증이 함께 제공되는 세션 기반 통신 +방식을 적용 +• ‌세션 내에서 전송되는 데이터는 메시지 인증 코드(MAC) 또는 디지털 서명 등을 통해 위·변조 +여부를 확인 +• ‌세션 탈취 및 중간자 공격에 취약한 평문 또는 불완전한 프로토콜을 사용 제한 +▶ ‌세션 수립 과정에서는 난수, 시퀀스 값 등 재전송 방지 요소를 포함하여 이전 인증 정보 재사용 +방지 +▶ ‌세션ID는 생성·사용·폐기의 과정에 따라 안전하게 관리해야 함 +27 ‌분할 터널링(Split Tunneling): 운영 단말이 VPN(운영망)에 연결된 상태에서 동시에 외부 인터넷에 접속할 수 있는 구조 +를 말하며, 외부 공격자가 운영망으로 직접 침투할 가능성을 높이는 위험 요소로 분류됨. + +--- + +90 | 우주 보안 모델 해설 및 적용사례집 +세션ID 관리 지침 +단계 +내용 +세션ID 생성 +y ‌세션ID는 안전한 서버에서 생성해서 사용 +y ‌세션ID는 최소 128비트의 길이로 생성되어야 하며, 안전한 난수 +알고리즘을 적용하여 예측 불가능한 값 사용 +세션ID 사용 +y ‌URL Rewrite 기능을 사용하는 경우 세션ID가 URL에 노출될 수 +있으므로, 사용하지 않도록 설계 +세션ID 폐기 +y ‌로그인 성공 시 로그인 전에 할당받은 세션ID는 파기하고 새로운 값으로 +재할당하여 세션ID 고정 공격에 대응하도록 시큐어코딩 규칙을 정의 +y ‌장기간 접속되어 있는 경우 세션ID의 노출위험이 커지므로, 일정시간 +주기적으로 세션ID를 재할당 하도록 설계 +출처 : 소프트웨어 개발보안 가이드라인(KISA) +⊙ ‌일정 시간 동안 활동이 없거나 세션 종료 조건 충족 시, 세션이 자동으로 종료(Session +Timeout)되도록 설정하고, 종료 후 남은 연결·세션 정보를 안전하게 삭제한다. +▶ ‌통신 세션이 종료되었거나 일정 시간 동안 활동이 없는 경우, 해당 세션과 연관된 네트워크 +연결이 자동으로 종료되도록 세션 종료 조건과 시간 기준을 정의하고 적용 +• ‌중요 기능의 경우 2~5분, 위험도가 낮은 경우에는 15~30분으로 설정(출처 : 소프트웨어 +개발보안 가이드(KISA)) +• ‌사용자 계정뿐만 아니라 장치 세션(콘솔·SSH)도 세션 종료 정책 적용 +▶ ‌세션 종료 시 세션 키 파기, 토큰 폐기, 임시 버퍼 삭제를 수행 +▶ ‌세션 종료 이후에도 네트워크 연결이나 논리적 세션이 남아있지 않도록 연결 종료가 정상적으로 +수행되었는지 확인 +관련 기준 +⊙ ‌CMMC +• ‌SC.L.2-3.13.6 예외에 의한 네트워크 통신 : 기본적으로 네트워크 통신 트래픽을 거부하고 예외적으로 +네트워크 통신 트래픽을 허용한다.(즉, 모두 거부하고 예외적으로 허용) +• ‌SC.L.2-3.13.7 분할 터널링 : 원격 장치가 조직 시스템과 원격이 아닌 연결을 동시에 설정하고 다른 +연결을 통해 외부 네트워크의 리소스와 통신하는 것을 방지한다.(예: 분할 터널링) +• ‌SC.L.2-3.13.9 연결 종료 : 통신 세션과 관련된 네트워크 연결을 세션 종료 시 또는 정해진 시간 동안 +활동이 없을 경우 종료된다. +• ‌SC.L.2-3.13.15 통신 인증성 : 통신 세션의 인증성을 보호한다. + +--- + + +## 제3장 우주 보안모델 해설 | 91 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ ‌K-RMF +• ‌SC-8-3 기본 거부/예외적 허용 : 관리 인터페이스에서 기본적으로 모든 트래픽을 거부하고, SC-8-4 +분할 터널링 방지, SC-11 네트워크 연결 해제, SC-20 세션 인증 +⊙ ‌NIS2 +• ‌6.7 네트워크 보안 +⊙ ‌ISMS-P +• ‌2.6.1 네트워크 접근 : 네트워크에 대한 비인가 접근을 통제하기 위하여 IP관리, 단말인증 등 관리절차를 +수립·이행하고, 업무목적 및 중요도에 따라 네트워크 분리(DMZ, 서버팜, DB존, 개발존 등)와 접근통제를 +적용하여야 한다. +• ‌2.6.2 정보시스템 접근 : 암호키의 안전한 생성·이용·보관·배포·파기를 위한 관리 절차를 수립·이행하고, +필요 시 복구방안을 마련하여야 한다. + +--- + +92 | 우주 보안 모델 해설 및 적용사례집 +SC-05 +암호화 +항목 내용 +중요 정보는 암호화하고 암호화를 위한 암호키를 설정하고 관리해야 한다. +목적 +지상국 시스템(탑재체 데이터 이용 영역·위성운영 영역)에서 +처리·저장·전송되는 명령, 텔레메트리, 구성정보, 인증정보 등 중요 데이터의 +기밀성과 무결성을 보장하기 위해, 안전한 암호 알고리즘을 적용하고 암호키를 +안전하게 생성·보관·관리하여 위성 운영 과정에서 정보 노출, 변조, 탈취로 인한 +사고를 예방하기 위함이다. +주요 +확인사항 +y ‌명령·운영로그·구성정보 등 중요 정보에 안전한 암호 알고리즘과 암호화 +기술을 적용하여 저장·전송 데이터의 기밀성·무결성을 보호하고 있는가? +y ‌암호키의 준비·운영·정지·폐기의 단계가 안전하게 관리되고 있으며, 키 접근을 +최소화하여 오남용을 방지하고 있는가? +세부 설명 +⊙ ‌명령·운영로그·구성정보 등 중요 정보에 안전한 암호 알고리즘과 암호화 기술을 적용하여 +저장·전송 데이터의 기밀성·무결성을 보호한다. +▶ ‌국내외 암호 연구 관련 기관에서 사용을 권장하는 안전한 암호 알고리즘 +구분 +미국(NIST) +일본(CRYPTEC) +유럽(ECRYPT) +국내 +일방향 암호 +알고리즘 +SHA- +224/256/384/512 +SHA-256/384/512 +SHA- +224/256/384/512 +Whirlpool +SHA-224/256/384/512 +대칭키 암호 +알고리즘 +AES-128/192/256 +AES-128/192/256 +Camellia-128/192/256 +AES-128/192/256 +Camellia-128/192/256 +Serpent-128/192/256 +SEED, HIGHT ARIA- +128/192/256 +LEA-128/192/256 +공개키 암호 +알고리즘 +(메시지 +암·복호화) +RSA +RSAES-OAEP +RSAES-OAEP +RASES +키 길이 2048-bits 이상 +출처 : 개인정보의 기술적 관리적 보호조치 기준 해설서KISA) +※ ‌처리속도 등 기술발전에 따라 사용 권고 암호 알고리즘은 달라질 수 있으므로, 암호화 적용 시 +국내외 암호 관련 연구기관에서 제시하는 최신 정보 확인 필요 + +--- + + +## 제3장 우주 보안모델 해설 | 93 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌단시간내 암호 해독이 가능하여 보안강도가 낮은 것으로 판명된 암호 알고리즘(TDEA(TDES), +MD5, SHA-1 등)을 사용하여서는 안 됨 +▶ ‌CCSDS의 암호 알고리즘 권고 기준 참고(CCSDS CRYPTOGRAPHIC ALGORITHMS, +352.0-B-2) +• ‌CCSDS 권고에 따르면, 위성, 지상국, 통신 구간을 포함한 우주 시스템 전반에 적용되는 암호 +알고리즘의 경우 AES-256을 사용해야 함 +- 기존 운영 중인 레거시 시스템의 경우 AES-128까지는 허용 +• ‌메시지 무결성 및 송신자 인증을 위한 메시지 인증 코드(HMAC) 적용 시에는, 기본 해시 +알고리즘으로 SHA-256을 사용 +- SHA-1 알고리즘은 신규 시스템 구축·도입에 사용 금지 +• ‌공개키 기반의 전자서명 인증이 요구되는 경우에는 RSA-4096 이상 사용 권고 +⊙ ‌암호키의 준비·운영·정지·폐기의 단계가 안전하게 관리되고 있으며 키 접근을 최소화하여 오남용을 +방지한다. +▶ ‌암호 키의 안전한 사용과 관리를 위해 암호키 생명주기(준비·운영·정지·폐기) 단계별 암호 키 +관리 절차를 수립·시행해야 함 +▶ ‌준비 단계: 암호 키가 사용되기 이전의 단계 +• ‌암호 키 생성 +- ‌암호 키 생성에 필요한 난수는 안전한 난수발생기(RNG, Random Number Generator)를 +이용하여 생성 +- ‌비대칭키 알고리즘 키 생성 방식: 디지털 서명을 위한 키 쌍 생성, 키 설정을 위한 키 쌍 생성 +- ‌대칭키 알고리즘 방식: 미리 공유된 키, 비밀번호, 다수의 암호 키를 이용한 키 생성 등 +• ‌암호 키 분배 +- ‌대칭키 알고리즘 키 분배 방식: 수동적 키 분배, 자동화된 키 전송 등 +- ‌비대칭키 알고리즘의 키 분배 방식 +- ‌기타 키 자료 생성 및 분배 방식: 영역 파라미터, 초기값, 공유된 비밀, RNG 시드, 다른 공개 및 +비밀정보, 중간값, 난수, 비밀번호 등 +▶ ‌운영 단계: 암호 키가 암호 알고리즘 및 연산에 사용되는 단계 +• ‌암호 키의 유효기간 동안 사용되는 키 자료들은 필요에 따라 장비 모듈에 보관하거나 별도의 저장 +매체에 보관하여 저장해야 함 +• ‌암호 키는 하드웨어 손상 또는 소프트웨어 오류 등의 사유로 손상될 가능성이 있으므로 가용성 +보장을 위해서는 키 백업 및 키 복구 등이 가능해야 함 + +--- + +94 | 우주 보안 모델 해설 및 적용사례집 +• ‌암호 키가 노출되거나 노출의 위협이 있는 경우 그리고 암호키 유효기간의 만료가 가까워지는 +경우에는 암호 키를 다른 암호키로 안전하게 변경해야 함 +▶ ‌정지 단계: 암호 키가 더 이상 사용되지 않지만, 암호 키에 대한 접근은 가능한 단계 +• ‌암호 키는 수정이 불가한 상태이거나 새로운 보관 키를 이용하여 주기적으로 암호화 +• ‌운영 데이터와 분리되어 보관하며, 암호 정보의 사본들은 물리적으로 분리된 곳에 보관 +• ‌암호 키는 응용프로그램의 소스 프로그램 내에 평문으로 저장 금지 +• ‌암호화되는 중요한 정보에 대한 보관키는 백업되어야 하며, 사본은 다른 곳에 보관 등 모든 개인 +키나 대칭 키의 복사본이 더 이상 필요하지 않다면 즉시 파기하여야 함 +• ‌암호 키 손상 시 유효기간 내에 키 자료를 제거하고, 보안 도메인에 속해 있는 실체의 권한을 +삭제하여 말소된 실체의 키 자료의 사용을 방지해야 함 +▶ ‌폐기 단계: 암호 키가 더 이상 사용될 수 없는 단계(폐기 또는 사고 상태) +• ‌일반적으로 폐기 단계의 키 자료에 대한 모든 기록은 삭제(다만, 일부기관에서는 감사를 목적으로 +특정 키 속성 유지가 필요할 수도 있음) +• ‌폐기 상태의 암호 키와 사고 상태의 암호 키들의 특성에 대한 기록 유지 등 +▶ ‌암호키 접근권한은 최소한으로 부여하며 접근 로그 및 사용 이력을 기록해야 함 +관련 기준 +⊙ +‌ +CMMC +• ‌SC.L.2-3.13.10 키 관리 : 조직 시스템에 사용되는 암호화를 위한 암호화 키를 설정하고 관리한다. +• ‌SC.L.2-3.13.11 중요 정보 암호화 : 중요 정보의 기밀성을 보호하기 위해 FIPS 검증 암호화를 사용한다. +⊙ ‌K-RMF +• ‌CR-2 암호키 설정 및 관리 : 조직이 지정한 암호키 생성, 분배, 저장, 접근, 폐기 관리 정책에 따라 +시스템에 적용되는 암호기술에 필요한 암호키를 설정하고 관리해야 한다. +• ‌CR-1 암호기술을 통한 보호 : 적용 가능한 법령, 정책, 규정 및 지침에 따라 조직이 지정한 암호기술(장비, +제품, 알고리즘 등)을 구현해야 한다. +⊙ ‌NIS2 +• ‌9.1 암호정책 수립 , 9.2 암호 알고리즘·프로토콜 관리, 9.3 키 관리 +⊙ ‌ISMS-P +• ‌2.7.2 암호키 관리 : 암호키의 안전한 생성·이용·보관·배포·파기를 위한 관리 절차를 수립·이행하고, 필요 +시 복구방안을 마련하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 95 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +SC-06 +협업 컴퓨팅 장치 +항목 내용 +협업 컴퓨팅 장치의 원격 활성화를 금지하고 장치가 사용 중일 때는 물리적으로 +나타나는 표시를 통해 사용자가 장치가 사용 중임을 인식할 수 있어야 한다. +목적 +협업 컴퓨팅 장치(마이크·카메라·화상회의 장비 등)를 사용자가 인지하지 +못한 상태에서 원격으로 활성화하거나 녹음·촬영하는 위협을 방지하고, +지상국 시스템(탑재체 데이터 이용 영역·위성운영 영역)에서 운영 중인 민감한 +정보(명령·운영 절차·모니터링 화면 등)가 유출되지 않도록 보호하기 위함이다. +주요 +확인사항 +y ‌우주기업 내 협업 컴퓨팅 장치(음성·영상·화상 회의 등 협업을 위한 장치)를 +식별하고 관리하는가? +y ‌협업 컴퓨팅 장치가 원격에서 임의로 활성화되지 않도록 통제하고 있는가? +y ‌협업 컴퓨팅 장치 사용 시 사용자에게 장치 활성화 상태가 명확히 인지되며, +오디오·영상 정보가 무단으로 저장·전송되지 않도록 통제하고 있는가? +세부 설명 +⊙ ‌우주기업 내 협업 컴퓨팅 장치(음성·영상·화상 회의 등 협업을 위한 장치)를 식별하고 관리한다. +▶ ‌음성·영상·화상 회의 등 협업 목적을 위해 사용자 주변 환경의 정보를 수집하거나 전송할 수 있는 +장치를 식별하고 관리해야 함 +협업 컴퓨팅 장치(Collaborative Computing Devices) (예시) +- 화상회의 장비(Camera, Conference System) +- 마이크(Microphone, Speakerphone) +- 스피커·오디오 회의 장비 +- 원격 회의용 터미널 (예: Zoom Room, Teams Room 장비) +- 기기 내장 웹캠·마이크 기능이 활성화된 단말기(Notebook, Tablet 포함) +- 원격 화면 공유 장치, 스마트 TV 회의 기능 +※ ‌우주·지상국 운영환경에서는 관제실 웹캠, 회의용 카메라, 오디오 수집 장치, 원격 협업 단말 +등이 협업 컴퓨팅 장치로 식별될 수 있음 +▶ ‌협업 컴퓨팅 장치는 원격 활성화 또는 무단 사용 시 위성 관제 화면, 운영 절차, 명령 수행 상황이 +외부로 노출될 수 있으므로 자산 목록 또는 장비 관리 목록에 등록하여 통제 정책 적용 +⊙ ‌협업 컴퓨팅 장치가 원격에서 임의로 활성화되지 않도록 통제한다. +▶ ‌카메라·마이크 등의 협업 장치는 사용자가 직접 조작하지 않는 한 자동으로 활성화되지 않도록 +설정 + +--- + +96 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌운영체제 또는 응용프로그램의 원격 제어 기능을 통해 카메라·마이크가 원격에서 활성화되지 +않도록 원격 제어 기능(원격 녹음·원격 촬영) 비활성화 +▶ ‌지상국·관제 환경에서는 협업 컴퓨팅 장치를 기본 비활성화 상태로 유지하고, 필요 시에만 사용 +⊙ ‌협업 컴퓨팅 장치 사용 시 사용자에게 장치 활성화 상태가 명확히 인지되며, 오디오·영상 정보가 +무단으로 저장·전송되지 않도록 통제한다. +▶ ‌협업 컴퓨팅 장치가 활성화되면 장치 자체의 LED 표시등 점등, 화면 팝업 등 시각적·물리적인 +표시를 통해 사용자에게 장치가 사용중임을 알려야 함 +• ‌노트북·외장 웹캠 등 물리적 차단 수단이 제공되는 장치는 해당 기능 사용을 권장 +▶ ‌운영망 또는 관제 환경에서는 협업 장치의 화면 공유, 녹화, 녹음 기능을 업무 목적에 맞게 제한 +▶ ‌관제 화면, 명령 인터페이스, 운영 절차 등 민감 정보가 협업 장치를 통해 외부로 전송되지 않도록 +기능을 통제 +▶ ‌협업 장치 사용 시 생성되는 오디오·영상 데이터가 불필요하게 저장되지 않도록 설정하거나, +필요 시 보호 조치를 적용 +▶ ‌외부 협업 장치(USB 웹캠, 외장 마이크 등)는 관리자 승인 하에 연결되도록 통제 +관련 기준 +⊙ +‌ +CMMC +• ‌SC.L.2-3.13.12 협업 장치 통제 : 협업 컴퓨팅 장치의 원격 활성화를 금지하고 장치 옆에 있는 사용자에게 +사용 중인 장치를 표시한다. +⊙ K-RMF +• ‌SC-13 협업 컴퓨팅 장치 : 1. 조직이 지정한 예외사항에서만 협업 컴퓨팅 장치의 원격 +활성화를 허용하고, 이외에는 협업 컴퓨팅 장치의 원격 활성화를 허용하지 않아야 한다. + +## 2. 장치가 사용 중일 때는 물리적으로 나타나는 표시를 통해 사용자가 장치가 사용 중임을 인식할 수 있어야 + +한다. + +--- + + +## 제3장 우주 보안모델 해설 | 97 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +SC-07 +모바일 코드 및 VoIP 통제 +항목 내용 +시스템 내 모바일 코드 및 VoIP의 사용을 모니터링·통제하여야 한다. +목적 +지상국 시스템(탑재체 데이터 이용 영역·위성운영 영역)에서 모바일 코드와 +VoIP 기능의 사용을 모니터링·통제하여, 악성코드 실행, 원격제어, 도·감청, +비인가 음성 통신 등 보안 위협으로부터 운영 환경을 보호하기 위함이다. +주요 +확인사항 +y ‌모바일 코드의 실행을 통제하고, 의심·비인가 모바일 코드 실행 여부를 +모니터링하고 있는가? +y ‌VoIP 기능의 사용을 제한·통제하고, 음성 통신이 비인가 경로로 송수신되지 +않도록 보안 설정·모니터링 체계를 운영하고 있는가? +세부 설명 +⊙ ‌모바일 코드의 사용 및 실행을 통제하고, 의심·비인가 모바일 코드 실행 여부를 모니터링한다. +▶ ‌모바일 코드(Mobile Code) : 시스템에 사전 설치되지 않았더라도 네트워크 등을 통해 전달되어 +사용자 단말이나 서버에서 자동 또는 사용자 동작에 의해 실행될 수 있는 실행 코드로서, Java, +JavaScript, ActiveX, 매크로, 스크립트 등과 같이 시스템 동작에 영향을 미칠 수 있는 코드 +▶ ‌시스템 내 모바일 코드가 임의로 실행되지 않도록 실행 환경을 통제 +• ‌지상국 운영망 및 관제 환경에서는 업무에 불필요한 스크립트 실행 환경(ActiveX, Java +Runtime 등)을 비활성화 +• ‌웹브라우저 및 응용프로그램에서는 스크립트 실행 정책을 강화하고, 화이트리스트 도메인만 +스크립트 실행을 허용 +• ‌외부에서 다운로드되거나 사용자에 의해 생성된 스크립트·매크로는 기본 차단 원칙(Default +Deny) 적용 +▶ ‌허용 가능한 모바일 코드 유형과 기술을 사전에 정의하고, 그 외 모바일 코드 사용은 원칙적으로 금지 +• ‌업무상 예외가 필요한 경우 승인 이력과 사용 범위를 명확히 관리 +▶ ‌모바일 코드는 검증된 경우에 한해 제한적으로 실행되도록 관리 +• ‌서명된 코드(Signature Code) 또는 내부 검증 절차를 거친 스크립트만 실행을 허용 +• ‌운영 자동화 목적의 스크립트는 사전 승인, 코드 서명, 변경 이력 관리 등 관리 절차 하에 사용 +▶ ‌비인가 모바일 코드 실행 여부를 지속적으로 모니터링해야 함 +• ‌엔드포인트 보안 솔루션 등을 통해 비인가 스크립트 실행, 원격 다운로드 스크립트, 메모리 기반 +악성 코드 등을 탐지 +• ‌PowerShell/WSH/파이썬 등 스크립트 실행 이력은 기록·보관하고, 이상 행위 발생 시 +관리자에게 즉시 알림 + +--- + +98 | 우주 보안 모델 해설 및 적용사례집 +⊙ ‌VoIP 기능의 사용을 제한·통제하고, 음성 통신이 비인가 경로로 송수신되지 않도록 보안 +설정·모니터링 체계를 운영한다. +▶ ‌지상국 운영망 및 관제 환경에서는 VoIP 사용을 원칙적으로 금지 +• ‌업무상 불가피한 경우에 한해 사전 승인된 장비·계정·환경에서만 VoIP 사용을 허용 +• ‌공개 메신저 기반 음성 통신 기능(Softphone, 영상통화 앱 등)은 운영 환경에서 사용하지 않도록 통제 +▶ ‌VoIP 관련 네트워크 트래픽은 보안 정책에 따라 제어해야 함 +• ‌운영망과 외부 네트워크 간 음성 트래픽 송수신을 차단하고, 포트 포워딩 및 NAT 설정을 차단할 +수 있음 +• ‌SIP, RTP, RTCP 등 VoIP 관련 프로토콜은 기본 차단하고, 승인된 내부 전용 구간에서만 +제한적으로 허용 +• ‌허용된 VoIP 환경에서는 TLS, SRTP 등 암호화된 음성 통신 채널을 적용 +• ‌인증되지 않은 장비 또는 계정의 VoIP 세션 등록 및 통신 시도를 차단 +▶ ‌VoIP 사용 현황 및 이상 행위를 지속적으로 모니터링 +• ‌비인가 VoIP 프로토콜 사용, 비정상 음성 통신 발생 여부를 탐지하고, 이상 징후 발생 시 +관리자에게 알림 +• ‌VoIP 관련 애플리케이션 설치, 실행 이력 및 통신 로그를 기록·관리 +관련 기준 +⊙ CMMC +• ‌SC.L.2-3.13.13 모바일 코드 : 모바일 코드 사용을 제어하고 모니터링한다. +• ‌SC.L.2-3.13.14 인터넷 프로토콜을 통한 음성 : VoIP 기술의 사용을 제어하고 모니터링한다. +⊙ K-RMF +• ‌SC-15 모바일 코드 +1 . 시스템에서 허용 및 금지할 모바일 코드와 모바일 코드 기술을 정의해야 한다. + +## 2. 허용할 모바일 코드와 모바일 코드 기술의 사용 제한 사항과 구현 가이드를 수립해야 한다. + + +## 3. 시스템 내 모바일 코드의 사용을 인가, 모니터링 통제해야 한다. + +• ‌SC-16 VoIP + +## 1. VoIP 기술의 사용 제한사항 및 구현 가이드를 수립해야 한다. + + +## 2. 시스템 내 VoIP의 사용을 인가, 모니터링, 통제 하여야 한다. + +⊙ ISMS-P +• ‌2.10.6 업무용 단말기 보안 : PC, 모바일 기기 등 단말기기를 업무 목적으로 네트워크에 연결할 경우 기기 +인증 및 승인, 접근 범위, 기기 보안설정 등의 접근통제 대책을 수립하고 주기적으로 점검하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 99 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제4절 +시스템 및 정보 무결성(SI) +SI-01 +취약점 점검 및 결함 교정 +항목 내용 +시스템과 애플리케이션의 취약점을 주기적으로 검사하고, 해당 시스템에 영향을 +미치는 신규 취약점이 확인될 때마다 검사하여 시스템의 결함을 식별, 조치, +보고해야 한다. +목적 +시스템 및 애플리케이션의 취약점을 주기적으로 점검하고, 결함을 +식별·조치하여 사고를 예방하고 무결성과 가용성을 확보하기 위함이다. +주요 +확인사항 +y ‌시스템과 애플리케이션의 취약점을 주기적으로 검사하고, 신규 취약점 정보 +공표 시, 즉시 점검을 수행하는가? +y ‌식별된 취약점은 위험 평가 결과를 반영하여 우선순위를 결정하고, 우선순위에 +따라 조치하고 있는가? +y 시스템 결함 식별 활동을 주기적으로 수행하고 있는가? +세부 설명 +⊙ ‌시스템과 애플리케이션의 취약점을 주기적으로 검사하고, 신규 취약점 정보가 공표되면, 즉시 +점검을 수행해야 한다. +▶ ‌우주 기업은 우주 시스템 및 애플리케이션 등 자산의 중요도와 위험 수준을 고려하여 취약점 점검 +주기를 정의(예: 반기, 분기, 연 1회 등) +▶ ‌정의된 점검 주기에 맞춰 우주 시스템 및 애플리케이션을 대상으로 취약점 점검 수행 +• ‌라우터, 스위치 등 네트워크 시스템 구성요소 및 설정 취약점 +• ‌서버 OS 보안 설정 취약점 +• ‌방화벽 등 보안 시스템 취약점 +• ‌애플리케이션 취약점 +• ‌웹 서비스 취약점 +• ‌스마트 기기 및 모바일 서비스(모바일 앱 등) 취약점 등 +▶ ‌취약점 점검 주기와 관계없이 시스템 및 애플리케이션에 영향을 미치는 신규 취약점 정보 수집 시 +즉시 점검을 수행해야 함 + +--- + +100 | 우주 보안 모델 해설 및 적용사례집 +• ‌우주 기업의 보안 담당자는 한국인터넷진흥원(KISA) 보호나라, 국가사이버안보센터(NCSC), +NIST NVD 등 국내외 보안 기관 및 사용 중인 솔루션 제조사의 공식 홈페이지를 통해 주기적으로 +취약점 정보를 수집해야 함 +• ‌수집한 정보를 자산 현황과 대조하여 영향 범위를 파악하고, 해당 시스템을 대상으로 보안 점검을 +수행 +▶ ‌우주 기업의 보안 담당자, 시스템 관리자, IT 운영자 등 지정된 인력은 취약점 점검 시 이력 +관리를 위해 점검일시, 점검 대상, 점검방법, 점검 내용 및 결과, 발견사항, 조치사항 등이 포함된 +보고서를 작성해야 함 +⊙ ‌식별된 취약점은 위험 평가 결과를 반영하여 우선순위를 결정하고, 우선순위에 따라 조치해야 한다. +▶ ‌보안 담당자 및 시스템 운영자는 위험 평가 결과로 정해진 우선순위에 따라 패치 적용, 설정 변경, +취약한 소스코드 수정 등 조치 수행 +▶ ‌불가피하게 조치할 수 없는 취약점에 대해서는 그 사유를 명확하게 확인하고, 이에 따른 위험성, +보완대책 등을 책임자에게 보고해야 함 +⊙ ‌시스템 결함 식별 활동을 주기적으로 수행해야 한다. +▶ ‌시스템 결함 식별 활동은 새로운 결함을 파악하여 보고하고, 조치하는 과정까지를 의미함 +▶ ‌시스템 결함 및 취약점 식별을 위해 공급업체 정보, 소프트웨어 정보, 버전 정보, 현재 배포 +상태(예: 어떤 시스템에 어떤 소프트웨어가 설치되어 있는지)를 포함한 정확한 자산목록을 +보유해야 함 +▶ ‌소프트웨어나 펌웨어 공급업체 알림 및 업데이트 정보를 주기적으로 검토하고, 결함을 식별해야 +함 +▶ ‌우주 기업의 보안 담당자, 시스템 관리자, IT 운영자 등 지정된 인력은 공개된 소프트웨어 및 +펌웨어 결함을 식별하여 조치를 수행하고, 그 결과를 보안 담당자 및 관리 책임자에게 보고해야 +함 +▶ ‌결함 조치 이력 관리를 위해 조치 일시, 조치 대상, 조치 방법, 조치 내용 및 결과, 발견된 결함 +사항, 조치 내역 등이 포함된 보고서 작성 +▶ ‌우주 기업은 시스템에서 발견된 결함을 조치하기 위해 CWE, CVE와 같은 가용자원을 활용할 수 +있음 +▶ ‌우주 기업은 식별된 결함이 시스템에 미치는 영향을 분석하고, 시스템 중요도에 따라 주기적으로 +업데이트를 수행해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 101 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ CMMC +• ‌SI.L2-3.14.1 결함 교정[CUI데이터] : 적절한 시기에 시스템 결함을 파악하고 보고하고 수정한다. +• ‌RA.L2-3.11.2 취약점 스캔 : 조직의 시스템과 애플리케이션의 취약점을 주기적으로 검사하고, 해당 +시스템과 애플리케이션에 영향을 미치는 새로운 취약점이 확인될 때마다 검사한다. +• ‌RA.L2-3.11.3 취약성 개선 : 위험성 평가에 따라 취약성을 해결한다. +⊙ K-RMF +• ‌SI-1 결함 교정 + +## 1. 시스템의 결함을 식별하여 보고 및 교정해야 한다. + +2. ‌결함 교정과 관련된 업데이트(소프트웨어, 펌웨어)를 설치하기 전에 효과성 및 잠재적 부작용을 +확인하기 위해 테스트해야 한다. + +## 3. 보안 관련 소프트웨어 및 펌웨어의 업데이트를 [조직이 지정한 기한] 이내에 설치해야 한다. + + +## 4. 결함 교정을 조직의 형상관리 절차에 반영해야 한다. + +• ‌PA-7 취약점 점검 +1. ‌[조직이 지정한 주기 또는 프로세스에 따라 임의로] 시스템 및 응용프로그램의 취약점을 점검해야 한다. +그리고 시스템 및 프로그램들에 영향을 줄 수 있는 새로운 취약점을 식별(보고)하면 점검을 실시해야 +한다. +2. ‌다음과 같은 표준을 사용하여 도구 간의 상호운용성을 높이고, 취약점 관리 절차의 일부를 자동화하는 +취약점 점검 도구 및 기술을 사용해야 한다. + +가. 플랫폼 관련 정보, 소프트웨어 결함, 취약한 환경설정 등에 대한 목록(Enumeration) + +나. 체크리스트와 시험 절차의 서식/형식 정의 + +다. 취약점 영향도 판단 + +## 3. 보안통제항목 평가 결과와 취약점 점검 보고서를 분석해야 한다. + +4. [조직이 지정한 대응시간] 내 조직의 위험판단에 따라 취약점을 해결해야 한다. +5. ‌다른 시스템에 있는 유사한 취약점(예 : 조직적인 약점이나 결점들)을 제거·완화할 수 있도록 취약점 +점검 절차와 보안통제항목 평가에서 획득한 정보를 [조직이 지정한 직책]과 공유해야 한다. +6. ‌새로운 취약점을 점검(식별)하기 위해 업데이트 능력을 갖춘 취약점 점검 도구를 사용해야 한다. +⊙ NIS2 +• ‌6.6 패치관리 : 변경·취약점·위험 관리 등 기존 관리 체계와 연계된 공식적인 패치 관리 절차를 수립하고 +시행해야 한다. +• ‌6.10 취약점 관리 및 공개 : 네트워크 및 정보 시스템의 기술적 취약점에 관한 정보를 입수하고, 이러한 +취약점에 대한 노출 정도를 평가하며, 취약점 관리를 위해 적절한 조치를 취해야 한다. +⊙ ISMS-P +• ‌2.11.2 취약점 점검 및 조치 : 정보시스템의 취약점이 노출되어 있는지를 확인하기 위하여 정기적으로 +취약점 점검을 수행하고, 발견된 취약점에 대해서는 신속하게 조치하여야 한다. 또한 최신 보안취약점의 +발생 여부를 지속적으로 파악하고, 정보시스템에 미치는 영향을 분석하여 조치하여야 한다. + +--- + +102 | 우주 보안 모델 해설 및 적용사례집 +SI-02 +악성코드 방지 +항목 내용 +악성코드 식별 및 제거를 위해 시스템에 악성코드 방지 솔루션을 설치하고 파일 +다운로드 시 실시간으로 검사해야 한다. +목적 +바이러스, 웜, 랜섬웨어 등의 악성코드 유입 및 확산을 예방하여 정보시스템의 +무결성 및 가용성을 확보하기 위함이다. +주요 +확인사항 +y ‌악성코드 방지 솔루션 적용이 필요한 우주 시스템을 식별하고 있는가? +y ‌악성코드 검사 주기를 정의하고, 주기에 따라 검사를 수행하며, 외부 파일 +다운로드 및 실행 시 실시간 검사를 수행하는가? +y ‌악성코드 방지 솔루션의 신규 버전이 출시될 때마다 업데이트하고 있는가? +세부 설명 +⊙ ‌악성코드 방지 솔루션 적용이 필요한 우주 시스템을 식별해야 한다. +▶ ‌악성코드란 사용자 컴퓨터에 악의적인 영향을 끼칠 수 있는 모든 소프트웨어의 총칭으로, 감염 +방법, 목적, 행위에 따라 바이러스, 웜, 트로이 목마 등을 의미 +• ‌바이러스(virus): 정상적인 파일이나 시스템 영역에 침입하여 그곳에 자신의 코드를 삽입하거나 +설치하는 프로그램 +• ‌웜(worm): 바이러스처럼 다른 파일을 감염시키는 것이 아닌 자기 자신을 레지스트리에 +등록하거나 복사본을 생성하여 전파하는 등의 독자적으로 실행되는 악성코드 +• ‌트로이 목마(trojan horse): 정상적인 소프트웨어의 형태를 띠지만 악의적인 행위를 포함하고 +있는 악성코드 +• ‌스파이웨어(spyware): 사용자의 PC에서 사전 동의 없이 설치되어 컴퓨터의 정보와 개인 정보를 +수집하는 악성코드 +• ‌랜섬웨어(ransomware): 사용자의 문서와 사진 등을 암호화 시켜 일정 시간 안에 일정 금액을 +지불하면 암호를 풀어주는 방식으로 사용자에게 금전적인 요구를 하는 악성코드 +▶ ‌노트북, 컴퓨터, 모바일 기기, 서버, 워크스테이션 등 악성코드 유입 경로가 존재하는 모든 +정보자산을 악성코드 방지 솔루션 적용 대상으로 식별하여 문서화하고, 주기적으로 최신화해야 +함 +• ‌악성코드 방지 솔루션이란 컴퓨터나 네트워크 시스템에 침입하는 바이러스, 웜, 트로이 목마, +랜섬웨어 등 악성 소프트웨어를 실시간으로 탐지하고 차단, 제거하는 솔루션을 의미 +⊙ ‌악성코드 검사 주기를 정의하고, 주기에 따라 검사를 수행하며, 외부 파일 다운로드 및 실행 시 +실시간 검사를 수행한다. + +--- + + +## 제3장 우주 보안모델 해설 | 103 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌백신 소프트웨어 등 보안프로그램을 통해 최신 악성코드 예방 및 탐지 활동을 주기적으로 +수행해야 함 +▶ ‌악성코드로부터 우주 시스템을 보호하기 위하여 다음과 같은 내용을 포함한 보호대책을 +수립·이행해야 함 +• ‌불분명한 이메일 및 파일 열람 금지 +• ‌허가받지 않은 프로그램 다운로드 및 설치 금지 +• ‌정보시스템, 업무용 컴퓨터에 P2P, 웹 하드 등과 같은 비인가 프로그램 설치 금지 +▶ ‌파일 다운로드 또는 실행 시 실시간 검사를 수행해야 함 +⊙ ‌악성코드 방지 솔루션의 새로운 버전이 출시될 때마다 업데이트해야 한다. +▶ ‌백신 소프트웨어 등 보안프로그램은 최신 상태로 유지하고, 필요 시 긴급 보안 업데이트를 +수행해야 함 +▶ ‌백신 업데이트 주기 준수 : 자동 업데이트 또는 일 1회 이상 업데이트 +▶ ‌악성 프로그램 관련 경보가 발령되거나 긴급 업데이트 공지가 있는 경우 이에 따른 업데이트를 +수행해야 함 +▶ ‌백신 중앙관리시스템을 이용하여 백신 프로그램을 관리하는 경우 관리서버에 대한 접근통제, +배포 파일에 대한 무결성 검증 등 보호대책 마련 +관련 기준 +⊙ CMMC +• ‌SI.L2-3.14.2 악성 코드 보안 [CUI DATA] : 조직 시스템 내의 지정된 위치에서 악성코드로부터 보호를 +제공한다. +• ‌SI.L2-3.14.5 시스템 및 파일 스캐닝 [CUI DATA] : 조직 시스템에 대한 주기적 검사를 수행하고, 외부 +소스에서 파일을 다운로드하거나 열거나 실행할 때 실시간으로 파일을 검사한다. +• ‌SI.L2-3.14.4 악성코드 보안 업데이트 [CUI DATA] : 새로운 릴리스가 출시되면 악성코드 보호 솔루션을 +업데이트 한다. +⊙ K-RMF +• ‌SI-2 악성코드 방지 + +## 1. 악성코드 식별 및 제거를 위해 시스템의 입출력 지점에서 악성코드 방지 메커니즘을 사용해야 한다. + +2. ‌악성코드 방지 메커니즘의 새로운 버전이 출시되면 조직의 형상관리 정책 및 절차에 부합하게 +업데이트를 수행해야 한다. + +## 3. 악성코드 방지 메커니즘을 다음과 같이 설정해야 한다. + + +가. ‌[조직이 지정한 주기]마다 악성코드 점검을 수행하고 외부 파일(새롭게 획득한 파일)을 열거나 +다운로드 또는 실행할 때 [단말 또는 네트워크 입출력 지점]에서 실시간 점검을 수행해야 한다. + +--- + +104 | 우주 보안 모델 해설 및 적용사례집 + +나. ‌악성코드 탐지 시 [①악성코드 차단 ②악성코드 격리 ③관리자에게 경보 전송 ④기타 정의한 조치] +중 하나 이상을 수행해야 한다. +4. ‌악성코드 탐지 및 제거 중에 오탐을 식별하고 그로 인해 시스템의 가용성에 미치는 잠재적인 영향성을 +중점에 두고 다루어야 한다. +• ‌SI-2-1 자동 업데이트 : 악성코드 방지 메커니즘을 자동으로 업데이트해야 한다. +⊙ NIS2 +• ‌6.9 악성코드 및 무단 소프트웨어 방어 : 악성 코드 및 승인되지 않은 소프트웨어의 위협으로부터 +네트워크와 정보 시스템을 안전하게 보호해야 한다. +⊙ ISMS-P +• ‌2.11.2 취약점 점검 및 조치 : 정보시스템의 취약점이 노출되어 있는지를 확인하기 위하여 정기적으로 +취약점 점검을 수행하고, 발견된 취약점에 대해서는 신속하게 조치하여야 한다. 또한 최신 보안취약점의 +발생 여부를 지속적으로 파악하고, 정보시스템에 미치는 영향을 분석하여 조치하여야 한다. +• ‌2.10.9 악성코드 통제 : 바이러스·웜·트로이목마·랜섬웨어 등의 악성코드로부터 개인정보 및 중요정보, +정보시스템 및 업무용 단말기 등을 보호하기 위하여 악성코드 예방·탐지·대응 등의 보호대책을 수립· +이행하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 105 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +SI-03 +보안 경보, 권고 +항목 내용 +시스템 보안 경고와 권고를 모니터링하고 이에 대한 대책을 수립해야 한다. +목적 +시스템 보안 경보 및 권고를 지속적으로 모니터링하고, 관련 위험도를 평가하여 +도출된 대응조치를 이행함으로써 시스템의 무결성과 가용성을 유지하기 +위함이다. +주요 +확인사항 +y ‌시스템 보안 경보와 권고사항을 지속적으로 모니터링하고 있는가? +y ‌수집된 시스템 보안 경보 및 권고사항이 시스템에 미치는 영향을 분석하여 +대책을 수립·이행하고 있는가? +세부 설명 +⊙ ‌시스템 보안 경보와 권고사항을 지속적으로 모니터링해야 한다. +▶ ‌소프트웨어 공급업체, 구독 서비스, 관련 산업 정보 공유 및 분석 센터 등을 통해 보안 경보 및 +권고를 수집해야 함 +▶ ‌우주 기업은 국가사이버안보센터(NCSS), 한국인터넷진흥원(KISA) 등 신뢰할 수 있는 전문 +기관으로부터 보안 경보, 권고, 지침을 수신하고 검토해야 함 +보안 경보 및 권고사항 수신 방법 (예시) +y ‌이메일 알림 구독 +y ‌RSS28 피드 구독 +y ‌관련 회의 참석 등 +출처 : CMMC Assessment Guide Level 2SI.L2-3.14.3 +▶ ‌신뢰할 수 있는 국내외 보안 경보 및 권고를 제공하는 기관은 다음 표와 같음 +28 ‌RSS(Really Simple Syndication/Rich Site Summary): 뉴스나 블로그 등 콘텐츠 업데이트가 잦은 웹사이트의 업데이 +트된 정보를 쉽게 확인하고 이용할 수 있는 데이터형식 + +--- + +106 | 우주 보안 모델 해설 및 적용사례집 +국내외 보안 관련 정보 제공 기관 +기관명 +설명 +한국인터넷진흥원 KrCERT/ +CC +y ‌국내외 최신 보안 취약점 정보(보안 공지), 사이버 위협 동향, +악성코드 분석 정보, 긴급 보안 권고 및 경보를 실시간으로 제공 +국가사이버안보센터 +y ‌국가 차원의 사이버 위협 분석 및 평가 정보, 주요 기관을 대상으로 +하는 특정 공격 및 방어 지침을 제공 +과학기술정보통신부 +y ‌정보보호 정책 및 법규 관련 지침, 정보보호 취약점 분석 및 평가 +관련 가이드라인 등을 발표 +CISA29 +y ‌전 세계적인 사이버 위협 경고 및 기술 권고, 주요 취약점에 대한 +긴급 지시(Directives), 악성코드 분석 및 대응 가이드를 발표 +NIST30 +y ‌NVD (National Vulnerability Database) 관리를 통해 모든 +CVE(Common Vulnerabilities and Exposures) 목록 및 표준 +CVSS 심각도 점수를 제공 +⊙ ‌수집된 시스템 보안 경보 및 권고사항이 시스템에 미치는 영향을 분석하여 대책을 수립하고, +이행해야 한다. +▶ ‌보안 담당자는 외부 전문 기관으로부터 수집한 시스템 보안 경보 및 권고사항이 우주 시스템에 +미치는 영향을 분석해야 함 +▶ ‌취약점 및 위협 대응을 위해 필요한 경우, 수집한 보안 경보 및 권고사항을 지침 또는 정책에 +반영해야 함 +▶ ‌수집한 시스템 보안 경보 및 권고사항은 관련 시스템 운영자 및 임직원을 대상으로 보안 공지, +조치 지침 등의 형태로 전파해야 함 +▶ ‌보안 담당자는 보안 경보 및 권고사항과 관련된 위험을 평가하고, 필요한 조치를 수행해야 함 +• ‌보안 패치 적용(소프트웨어/펌웨어 버전 업데이트) +• ‌보안 설정 강화 (예: 불필요한 포트 비활성화, 암호화 강화 등) +• ‌내부 보안 지침 및 절차 업데이트 +• ‌협력사 등에 위험 정보 전달 등 +29 ‌CISA(Cybersecurity and Infrastructure Security Agency): 사이버보안 및 인프라 보안국 +30 NIST(National Institute of Standards and Technology): 미국 국립표준기술 연구소 + +--- + + +## 제3장 우주 보안모델 해설 | 107 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ CMMC +• ‌SI.L2-3.14.3 보안 경고 및 권고 : 시스템 보안 경고와 권고를 모니터링하고 이에 대한 조치를 취한다. +⊙ K-RMF +• ‌SI-4 보안 경보, 권고, 지침 : + +## 1. 지속적으로 [외부 조직]으로부터 시스템과 관련된 보안경보, 권고사항, 지침을 수집해야 한다. + + +## 2. 필요 시 조직 내부의 보안경보, 권고, 지침을 생산해야 한다. + + +## 3. 보안경보, 권고, 지침을 [조직이 지정한 직책, 부서, 또는 외부 조직]에 전파해야 한다. + +4. ‌정해진 기한 내에 보안 관련 지침을 준수해야 하며, 이행하지 못한 정도를 지침 발행 부대(서)에 해당 +보고(통보)해야 한다. + +--- + +108 | 우주 보안 모델 해설 및 적용사례집 +SI-04 +시스템 및 통신 트래픽 모니터링 +항목 내용 +시스템의 무단 사용을 모니터링하고 송·수신되는 네트워크 트래픽을 주기적으로 +모니터링해야 한다. +목적 +정보시스템 및 네트워크의 비정상적인 트래픽을 실시간 또는 주기적으로 +탐지·분석하여 시스템의 기밀성·무결성·가용성을 보장하기 위함이다. +주요 +확인사항 +y ‌시스템의 무단 사용을 모니터링하고 송·수신되는 네트워크 트래픽을 +모니터링하는 정책/절차가 정의되어 있는가? +y ‌시스템 공격 및 잠재적 공격 징후를 탐지하기 위해 인바운드 및 아웃바운드 +통신 트래픽을 포함한 네트워크 모니터링을 수행하고 있는가? +y ‌시스템 및 통신 트래픽 모니터링 결과를 분석하고 대응하고 있는가? +세부 설명 +⊙ ‌시스템의 무단 사용을 모니터링하고 송·수신되는 네트워크 트래픽을 모니터링하는 정책 및 절차가 +정의해야 한다. +▶ ‌네트워크 트래픽 모니터링 정책 및 절차에는 아래의 내용이 포함되어야 함 +• ‌모니터링 대상(예: 인바운드 트래픽, 아웃바운드 트래픽 등) +• ‌모니터링 장치(예: 방화벽, IDS/IPS, VPN 등 보안 솔루션) 및 기술 +• ‌이상징후 탐지 기준 +• ‌탐지 시 대응 절차 +• ‌모니터링 로그 및 기록 관리 절차 +⊙ ‌시스템 공격 및 잠재적 공격 징후를 탐지하기 위해 인바운드 및 아웃바운드 통신 트래픽을 포함한 +네트워크 모니터링을 수행해야 한다. +▶ ‌모니터링 장비는 내부 및 외부 시스템 경계에 배치되어 인바운드 트래픽, 아웃바운드 트래픽을 +포함한 모든 통신 내역을 모니터링 해야 함 +모니터링 대상 (예시) +y ‌아웃바운드 및 인바운드 네트워크, 시스템, 애플리케이션 트래픽 +y ‌시스템, 서버, 네트워크 장비, 모니터링 시스템, 주요 애플리케이션 등에 대한 접근 +y ‌보안 도구 로그(예: 안티바이러스, 침입 탐지 시스템(IDS), 침입 방지 시스템(IPS), 웹 필터, +방화벽, 데이터 유출 방지 등) +y ‌네트워크 장비 로그 + +--- + + +## 제3장 우주 보안모델 해설 | 109 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌아래와 같은 내용을 모니터링 해야 함 +공격 및 잠재적 공격 징후 등 이상행위 (예시) +y ‌내부 트래픽 중 악성코드의 존재를 나타내는 것 +y ‌비업무 시간에 탐지된 비정상적 활동 +y ‌외부로 유출되는 비정상적인 크기/개수의 파일 +y ‌외부 시스템과의 통신 흔적 +y ‌악성코드 활동 또는 알려진 IP주소나 네트워크 도메인(예: 봇넷 명령 및 제어 서버 연관)에서 +발생하는 트래픽 +y ‌알려진 공격 특성(예: 서비스 거부 공격, 버퍼 오버플로우) +y ‌병목 현상 및 과부하(예: 네트워크 대기열, 지연, 지터) +y ‌시스템 또는 정보에 대한 무단 접근(실제 또는 시도) +y ‌비즈니스 애플리케이션, 시스템, 네트워크에 대한 무단 스캔 +y ‌보호 자원(예: DNS 서버, 웹 포털, 파일 시스템)에 대한 성공 및 실패한 접근 시도 +⊙ ‌시스템 및 통신 트래픽 모니터링 결과를 분석하고 대응해야 한다. +▶ ‌시스템 및 통신 트래픽 모니터링 분석 결과를 기록하고 문서화해야 함 +▶ ‌시스템 및 통신 트래픽 분석 결과는 정기적으로 검토하여 이상행위 및 공격징후 탐지의 누락 방지 +▶ ‌이상행위 및 공격징후 대응 결과를 기록하고 문서화 +▶ ‌탐지·대응한 이상행위 및 공격 정보를 관련 조직 및 인원에게 공유하여 동일 사고 예방 필요 +관련 기준 +⊙ CMMC +• ‌SI.L2-3.14.6 공격에 대한 통신 모니터링 : 인바운드 및 아웃바운드 통신 트래픽을 포함한 조직 시스템을 +모니터링하여 공격과 잠재적 공격 지표를 탐지한다. +• ‌SI.L2-3.14.7 무단 사용 식별 : 조직 시스템의 무단 사용을 식별한다. +⊙ K-RMF +• ‌SI-3-4 내외부 통신 트래픽 : 비정상/비인가 활동 또는 조건에서 송ㆍ수신되는 트래픽을 [조직이 지정한 +주기]마다 모니터링해야 한다. +• ‌SI-3 시스템 모니터링 : + +## 1. 다음을 수행하기 위해서 시스템을 모니터링 해야 한다. + + +가. [조직의 모니터링 목표]를 세워서 공격과 잠재적 공격 징후를 탐지 + +나. 비인가 로컬, 네트워크, 원격연결을 탐지 +2. [조직이 지정한 기술과 방식]을 사용하여 인가되지 않은 시스템 사용을 식별해야 한다. + +## 3. 다음에 따라 모니터링 장치를 배치해야 한다. + + +--- + +110 | 우주 보안 모델 해설 및 적용사례집 + +가. 조직이 지정한 필수 정보를 수집하기 위해 시스템 내 전략적으로 + +나. 조직에서 관심 갖는 특정 거래(전송) 유형을 추적하기 위해 시스템 내부에 일시적으로 배치 + +## 4. 침입탐지 도구에서 얻은 정보를 비인가 접속, 변경, 삭제로부터 보호해야 한다. + +5. ‌첩보 및 믿을 수 있는 정보 출처에 근거하여 조직의 운영, 자산, 개인 및 기타 조직 또는 국가에 위험을 줄 +수 있는 경우 시스템 모니터링 활동 수준을 상향시켜야 한다. + +## 6. 모니터링 활동이 관련 법령(규정) 따르는지 법적 자문을 구해야 한다. + +7. [시스템 모니터링 정보]를 [필요시 또는 일정 주기]마다 [조직이 지정한 직책]에게 제공해야 한다. +⊙ NIS2 +• ‌3.2 모니터링 및 로깅 : 이벤트를 탐지하고 그에 따라 대응하여 영향을 완화하기 위해, 자신의 네트워크와 +정보 시스템상의 활동을 모니터링하고 기록(log)하는 절차를 수립하고 도구를 사용해야 한다. +⊙ ISMS-P +• ‌2.11.3 이상행위 분석 및 모니터링 : 내·외부에 의한 침해시도, 개인정보유출 시도, 부정행위 등을 +신속하게 탐지·대응할 수 있도록 네트워크 및 데이터 흐름 등을 수집하여 분석하며, 모니터링 및 점검 +결과에 따른 사후조치는 적시에 이루어져야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 111 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제5절 +시스템/서비스 운영관리(SO) +SO-01 +유지보수 통제 +항목 내용 +시스템 유지관리에 사용되는 도구, 기술, 메커니즘 및 인력을 통제해야 한다. +- ‌원격 유지보수 시 사전승인, 강화된 인증, 유지보수 활동 기록, 업무 종료 시 +세션 종료 +- 유지보수 인력 관리 감독 +- 유지보수용 저장매체 악성코드 검사 +- 원격 유지보수 시스템 외부 반출 전 정보 소거 +목적 +시스템 유지보수에 필요한 인력, 도구 및 원격 접근을 통제·관리하여, +정보자산의 기밀성과 무결성을 보호하고 안정적인 시스템 운영을 보장하기 +위함이다. +주요 +확인사항 +y ‌시스템의 안정적인 운영을 위해 유지보수를 수행하고, 유지보수에 필요한 +도구, 기술, 솔루션, 인력을 통제하는가? +y ‌유지보수를 위한 매체를 시스템에 사용하기 전 악성코드를 검사하고, 외부 +반출 전 정보 소거 절차를 수행하는가? +y ‌유지보수를 위해 외부에서 원격 접속 시, 다중인증을 적용하고, 업무 종료 시 +자동으로 세션을 종료하는가? +세부 설명 +⊙ ‌시스템의 안정적인 운영을 위해 유지보수를 수행하고, 유지보수에 필요한 도구, 기술, 솔루션, +인력을 통제해야 한다. +▶ ‌유지보수 작업이 필요한 경우에 작업신청 및 수행 절차를 수립하고 이행 +• ‌작업 절차 : 작업 신청, 승인, 작업 기록 작성 등 +• ‌작업 기록 : 작업 일시, 작업목적 및 내용, 작업업체 및 담당자명, 검토자 및 승인자 등 +• ‌통제 방안 : 작업 수행을 출입 절차, 작업내역에 대한 책임추적성 확보 및 모니터링 방안 등 +▶ ‌유지보수 도구는 최신 상태를 유지하고, 악성코드 감염 여부를 검사 후 사용해야 함 +▶ ‌유지보수 기술(절차)는 사전에 승인을 받아야 하며, 승인된 기술(절차)에 따라 수행 +▶ ‌유지보수 업무는 사전에 승인된 인원만 수행하고, 관리자의 감독하에 작업을 수행해야 함 + +--- + +112 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌유지보수 작업을 위해 협력업체 직원에게 부여하는 특수 권한은 필요시에만 생성하고, 업무 종료 +후에는 즉시 삭제 또는 정지 +▶ ‌외부 인력이 유지보수를 수행하는 경우 비밀유지 계약 체결 +⊙ ‌유지보수를 위한 매체를 시스템에 사용하기 전 악성코드를 검사하고, 외부 반출 전 정보 소거 절차를 +수행해야 한다. +▶ ‌유지보수를 위한 매체 반·출입 통제 절차를 다음 사항을 포함하여 수립하고 이행해야 함 +• 매체 반입 신청 +• 관리자 사전 승인 +• 반·출입 관리대장 작성 +• 반·출입 매체 대상 악성코드 검사 +• 반·출입 내역 주기적 검토 +▶ ‌외부에서 유지보수를 위해 반입한 저장매체 사용 전 악성코드 검사 수행 +• 보조 저장매체 자동실행 방지 적용 +• 보조 저장매체 사용 전 클린 PC를 통해 악성코드 검사 수행 +▶ ‌매체를 외부로 반출하기 전 중요정보가 복구되지 않도록 덮어쓰기 등의 방법으로 정보 소거 +⊙ ‌유지보수를 위해 외부에서 원격 접속 시, 다중인증을 적용하고, 업무 종료 즉시 세션을 종료해야 한다. +▶ ‌원격 유지보수 작업 전 원격 접속 신청 및 승인 +▶ ‌외부에서 유지보수를 위해 원격 접속 시 다중인증, 통신 암호화 등 안전한 접속 수단을 통해 접속 +▶ ‌원격 유지보수 업무는 승인된 기간동안만 한시적으로 수행하고 작업 종료 시 즉시 세션을 +종료해야 함 +관련 기준 +⊙ CMMC +• ‌MA.L2-3.7.1 유지 보수 수행 : 조직 시스템에 대한 유지 관리를 수행한다. +• ‌MA.L2-3.7.2 시스템 유지보수 통제 : 시스템 유지관리에 사용되는 도구, 기술, 메커니즘 및 인력에 대한 +통제를 제공한다. +• ‌MA.L2-3.7.3 장비 CUI 정보 소거(SANITIZATION) : 현장 외부 유지관리를 위해 제거한 장비는 CUI가 +없는지 정보 소거해야 한다. +• ‌MA.L2-3.7.4 매체 검사 : 조직 시스템에서 미디어를 사용하기 전에 진단 및 테스트 프로그램이 포함된 +미디어를 검사하여 악성코드가 있는지 확인한다. +• ‌MA.L2-3.7.5 비지역 유지보수 : 외부 네트워크 연결을 통해 비로컬 유지관리 세션을 설정하려면 다중 +인증을 요구하고 비로컬 유지관리가 완료되면 해당 연결을 종료한다. + +--- + + +## 제3장 우주 보안모델 해설 | 113 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌MA.L2-3.7.6 유지 보수 인력 : 필요한 접근 권한이 없는 유지관리 인력의 유지관리 활동을 감독한다. +⊙ K-RMF +• ‌MA-1 유지보수 통제 : +1. ‌제조사/판매사 및 조직의 요구에 맞게 시스템 구성요소의 유지보수와 정비 일정을 정하고, 수행하며, +기록 및 유지하고, 검토해야 한다. + +## 2. 모든 유지보수 활동을 승인 및 모니터링해야 한다. + +3. ‌유지보수를 위해 시스템 또는 시스템 구성요소가 시설에서 반출될 때 [조직에서 지정한 직책]에게 +승인을 받아야 한다. + +## 4. 유지보수 활동을 위해 시설에서 반출이 필요한 경우 관련 매체에 대한 정보소거를 수행해야 한다. + +5. ‌잠재적으로 영향을 받는 모든 보안통제항목들을 확인하여 해당 항목들이 유지보수 이후에도 정상적으로 +적용이 되는지 검증해야 한다. +6. [조직이 지정한 유지보수 관련 정보]를 조직의 유지보수 기록에 포함해야 한다 +• ‌MA-4-2 대등한 보안수준 또는 정보소거 : 원격 유지보수 수행 시 다음 중 하나를 만족해야 한다. +1. ‌유지보수 대상 시스템의 보안수준과 대등한 보안수준을 구현하고 있는 시스템을 통해 원격 유지보수를 +수행해야 한다. +2. ‌원격 유지보수가 필요한 시스템 구성요소를 시스템에서 제거하고, 시설에서 반출되기 전에 정보소거를 +시행해야 한다. 이후, 유지보수가 완료된 구성요소는 시스템에 연결하기 이전에 정보소거 및 악성코드 +검사를 실시해야 한다. +• ‌MA-3-2 저장매체 점검 : 유지보수 도구가 포함된 저장매체를 시스템에 연결 및 사용하기 전에 악성코드 +검사를 실시해야 한다. +• ‌MA-4 원격 유지보수 : + +## 1. 원격 유지보수 활동을 승인하고 모니터링해야 한다. + +2. ‌원격 유지보수 활동은 조직 정책에서 승인하는 범위 내에서 사전 계획이 문서화된 경우에만 허용해야 한다. + +## 3. 원격 유지보수 활동을 위한 세션 수립 시 강화된 인증방식을 사용해야 한다. + + +## 4. 원격 유지보수 활동을 기록하고 유지해야 한다. + + +## 5. 원격 유지보수 활동 종료 시 세션 및 네트워크 연결을 종료해야 한다. + +• ‌MA-5 유지보수 인원보안 : 원격 유지보수 수행 시 다음을 통해 원격 유지보수 세션을 보호해야 한다. +1. [조직이 지정한 재전송 공격에 대응할 수 있는 인증수단]를 적용해야 한다. + +## 2. 다음 중 하나 이상의 방법을 통해 원격 유지보수 세션을 다른 네트워크 세션과 분리해야 한다. + + +가. 통신 경로를 물리적으로 분리 + +나. 암호화를 기반으로 통신 경로를 논리적으로 분리 +⊙ ‌ISMS-P +• ‌2.10.7 보조저장매체 관리 : 보조저장매체를 통하여 개인정보 또는 중요정보의 유출이 발생하거나 +악성코드가 감염되지 않도록 관리 절차를 수립·이행하고, 개인정보 또는 중요정보가 포함된 보조저장 +매체는 안전한 장소에 보관하여야 한다. +• ‌2.6.6 원격접근 통제 : 보호구역 이외 장소에서의 정보시스템 관리 및 개인정보 처리는 원칙적으로 +금지하고, 재택근무·장애대응·원격협업 등 불가피한 사유로 원격접근을 허용하는 경우 책임자 승인, +접근 단말 지정, 접근 허용범위 및 기간 설정, 강화된 인증, 구간 암호화, 접속단말 보안 (백신, 패치 등) 등 +보호대책을 수립·이행하여야 한다. + +--- + +114 | 우주 보안 모델 해설 및 적용사례집 +SO-02 +시스템 감사 및 감사기록 분석, 보고 +항목 내용 +불법적이거나 승인되지 않은 시스템 활동을 모니터링, 분석 조사 및 보고하기 +위한 시스템 감사 로그 및 기록을 생성 및 보관해야 하고 부적절하거나 비정상적 +활동을 분석 및 보고해야 한다. 또한 감사 정보를 보호하고 감사 로깅 오류 시 +경고한다. +목적 +시스템 감사로그를 생성하여 무단 접근 및 비정상 활동을 탐지·조사하고 +책임추적성과 무결성을 확보하기 위함이다. +주요 +확인사항 +y ‌불법적이거나 비인가 행위를 식별하고, 사용자를 추적할 수 있도록 감사 +로그를 생성하고 보관하고 있는가? +y ‌감사 로깅 오류 또는 실패 시 경고하는 기능을 적용하고 있는가? +y ‌감사 로그를 비인가 접근, 수정·삭제로부터 보호하고, 감사 로깅 기능 관리 +권한을 일부 사용자로 제한하는가? +y ‌기록된 이벤트를 주기적으로 검토하여 업데이트 하고있는가? +y ‌의심스러운 활동에 신속히 대응할 수 있도록 모든 시스템 로그를 통합하여 +분석하고, 보고하고 있는가? +세부 설명 +⊙ ‌불법적이거나 비인가 행위를 식별하고, 사용자를 추적할 수 있도록 감사 로그를 생성하고 보관해야 +한다. +▶ ‌시스템에 대한 로그관리 절차를 수립하고 필요한 로그를 생성하여 보관해야 함 +▶ ‌이상행위 판단을 위한 정보시스템, 보안시스템, 응용프로그램, 네트워크 장비 등의 로그를 +생성하고 보관해야 함 +주요 로그유형 (예시) +y ‌시스템 이벤트 로그 : 운영체제 구성요소에 의하여 발생하는 로그(시스템 시작, 종료, 상태, 에러 +코드 등) +y ‌네트워크 이벤트 로그 : IP주소 할당, 주요 구간 트래픽 로그 +y ‌보안시스템 로그 : 관리자 접속, 보안정책(룰셋) 등록·변경·삭제 등 +y ‌보안관련 감사 로그 : 사용자 접속기록, 인증 성공/실패 로그, 파일 접근, 계정 +y ‌기타 정보보호 관련 로그 + +--- + + +## 제3장 우주 보안모델 해설 | 115 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ 감사 로깅 오류 또는 실패 시 경고하는 기능을 적용해야 한다. +▶ ‌감사 로그 및 감사 로그 설정을 임의로 수정·삭제하지 못하도록 일부 제한된 인원에게만 감사 +로깅 기능 관리 권한을 부여하고, 주기적으로 권한 부여 현황 검토 +▶ ‌실시간 경보가 필요한 이벤트의 감사 로깅 실패 시, 이메일, SMS, 관제 대시보드 팝업 알림 등을 +통해 관련 시스템 관리자에게 알려야 함 +감사 로깅 실패 유형 (예시) +y ‌소프트웨어 또는 하드웨어 오류 : 서버 중단, 로깅 서비스 프로세스 강제 종료 등 +y ‌로그 수집 설정 오류 +y ‌감사 로그 저장 용량 초과 등 +▶ ‌관련 시스템 관리자는 감사 로깅 실패를 인지한 즉시 로그 수집을 재개하고, 중단 원인을 +파악해야 함 +⊙ ‌감사 로그를 비인가 접근, 수정·삭제로부터 보호하고, 감사 로깅 기능 관리 권한을 일부 사용자로 +제한한다. +▶ 시스템 감사 로그는 위·변조되지 않도록 안전하게 보관해야 함 +감사 로그의 안전한 보관 방법 (예시) +y ‌감사 로그 백업을 수행하여 별도의 보조저장매체나 별도의 저장장치, 오브젝트, 스토리지 등에 +보관 +y ‌감사 로그에 대한 위·변조를 방지하기 위해 CD-ROM, DVD-R, WORM(Write Once Read +Many) 등과 같은 덮어쓰기 방지 매체 사용 +y ‌감사 로그를 수정 가능한 매체(하드디스크, 자기 테이프 등)에 백업하는 경우에는 무결성 보장을 +위해 위·변조 여부를 확인할 수 있는 정보(MAC값, 전자서명값 등)를 별도의 장치에 보관·관리 등 +⊙ ‌기록된 이벤트를 주기적으로 검토하여 업데이트해야 한다. +▶ ‌조직은 시스템 이벤트 로그(시스템 시작, 종료, 상태, 에러 코드 등), 네트워크 이벤트 +로그(IP주소 할당, 주요 구간 트래픽 로그 등) 등 기록된 이벤트를 주기적으로 검토하여 +업데이트해야 함 +▶ ‌신규 보안 위협 또는 신규 이벤트가 식별된 경우 이벤트 유형을 업데이트 해야 함 + +--- + +116 | 우주 보안 모델 해설 및 적용사례집 +⊙ ‌의심스러운 활동에 신속히 대응할 수 있도록 모든 시스템 로그를 통합하여 분석하고, 보고해야 한다. +▶ ‌의심스러운 활동을 조사하고 대응하기 위해 로그 검토 대상, 주기, 기준 및 방법, 담당자 및 +책임자 등이 포함된 감사 로그 검토, 분석 및 보고 절차 를 정의해야 함 +▶ ‌조직은 감사 로그 상관 분석을 위해 SIEM 또는 중앙 로그 서버에 시스템에서 발생하는 모든 +로그를 실시간으로 수집 +▶ ‌로그 상관 분석 시, 시간 오차가 있으면 분석의 신뢰도가 떨어지므로 모든 시스템을 대상으로 +NTP 서버를 사용해 시간 동기화 설정 +▶ ‌내·외부에 의한 침해시도, 정보유출 시도, 부정행위 등 이상행위를 탐지할 수 있도록 주요 +정보시스템, 응용프로그램, 네트워크, 보안시스템 등에서 발생한 네트워크 트래픽, 데이터 흐름, +이벤트 로그 등을 수집하여 분석 및 모니터링을 수행해야 함 +▶ ‌조직의 규모 및 시스템의 중요도가 높은 경우 24시간 실시간 모니터링을 고려해야 함 +▶ ‌필요한 감사기록만 필터링하여 추출하는 기능과 요구되는 양식으로 보고서를 생성할 수 있는 +기능 제공 +관련 기준 +⊙ CMMC +• ‌AU.L2-3.3.1 시스템 감사 : 불법적이거나 승인되지 않은 시스템 활동을 모니터링, 분석, 조사 및 +보고하는데 필요한 범위 내에서 시스템 감사 로그 및 기록을 생성하고 보관한다. +• ‌AU.L2-3.3.2 사용자 책임 추적성 : 개별 시스템 사용자의 작업을 해당 사용자에게 고유하게 추적할 수 +있도록 하여 해당 사용자가 자신의 작업에 대한 책임을 질 수 있도록 한다. +• ‌AU.L2-3.3.3 이벤트 검토 : 기록된 이벤트를 검토하고 업데이트 한다. +• ‌AU.L2-3.3.5 감사 상관관계 : 불법적, 무단적, 의심스럽거나 비정상적인 활동에 대한 조사와 대응을 위해 +감사 기록 검토, 분석 및 보고 프로세스를 연관시켜야 한다. +• ‌AU.L2-3.3.6 감소 및 보고 : 주문형 분석 및 보고를 지원하기 위해 감사 기록을 줄이고 보고서를 생성한다. +• ‌AU.L2-3.3.4 감사 실패 경고 : 감사 로깅 프로세스에 오류가 발생할 경우 경고한다. +• ‌AU.L2-3.3.8 감사 보안 : 감사 정보와 감사 로깅 도구를 무단 접근, 수정 및 삭제로부터 보호한다. +• ‌AU.L2-3.3.9 감사 관리 : 감사 로깅 기능 관리를 권한이 있는 일부 사용자로 제한한다. +⊙ K-RMF +• ‌SI-6-7 소프트웨어, 펌웨어, 정보의 무결성 | 중요 이벤트 대비 감사 : 무결성 손상 발견 시 이벤트를 +감사하는 역량을 갖추어야 하고 다음 조치 중 하나 이상을 시행해야 한다. + +## 1. 감사기록 생성 + + +## 2. 현재 사용자에게 알림 + +3. [조직이 지정한 직책]에게 알림 +4. [조직이 지정한 기타 조치] +• ‌AU-10 감사 생성 : + +--- + + +## 제3장 우주 보안모델 해설 | 117 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +1. ‌[조직이 지정한 시스템 구성요소]가 ‘AU-1 1번 항목’에서 정의한 감사 가능한 이벤트들을 감사기록으로 +생성하는 기능을 제공해야 한다. +2. [조직이 지정한 직책]이 감사할 이벤트를 선정할 수 있는 기능을 제공해야 한다. +3. ‌‘AU-1 4번 항목’에서 지정한 해당 시스템에서 감사하는 이벤트들의 감사기록은 AU-4에서 정의한 +감사기록 내용(발생일시, 사건유형, 신원 등)을 포함하여 생성해야 한다. +• ‌AU-1-1 감사 이벤트 | 검토 및 이벤트 : [조직이 지정한 주기]마다 감사 이벤트를 검토 및 업데이트해야 +한다. +• ‌AU-8-4 감사기록 검토·분석·보고 | 분석 통합 : 부적절하거나 비정상적 활동을 식별하기 위한 능력을 +더욱 향상시키기 위해 감사기록의 분석과[(하나 이상 선택) 취약점 스캐닝 정보, 성능 데이터, 시스템 +모니터링 정보, [조직이 지정한 다른 출처로부터 수집된 데이터(정보)] ]에 대한 분석을 통합해야 한다. +• ‌AU-9 감사기록 필터링 및 보고서 생성 : 필요한 감사기록만 필터링하여 추출하는 기능과 요구되는 +양식으로 보고서를 생성할 수 있는 기능을 제공해야 한다. +• ‌AU-2-2 감사 처리 장애 시 대응 | 실시간 경보 : [실시간 경보가 필요한 이벤트]의 감사 장애 시, [조직이 +지정한 기간] 내 [조직이 지정한 직책]에게 알려야 한다. +• ‌AU-6 감사정보 보호 : 감사정보 및 감사 도구를 비인가 접근, 수정 및 삭제로부터 보호해야 한다. +• ‌AU-6-4 특별권한 사용자 중 최소 인원만 접근인가 : [조직이 지정한 특수 권한 사용자 중 일부 인원]만 +감사 기능 관리에 대한 접근을 인가한다. +⊙ NIS2 +• ‌3.2 모니터링 및 로깅 : 이벤트를 탐지하고 그에 따라 대응하여 영향을 완화하기 위해, 자신의 네트워크와 +정보 시스템상의 활동을 모니터링하고 기록(log)하는 절차를 수립하고 도구를 사용해야 한다. +⊙ ISMS-P +• ‌2.9.4 로그 및 접속기록 관리 : 서버, 응용프로그램, 보안시스템, 네트워크시스템 등 정보시스템에 대한 +사용자 접속기록, 시스템로그, 권한부여 내역 등의 로그유형, 보존기간, 보존방법 등을 정하고 위·변조, +도난, 분실되지 않도록 안전하게 보존·관리하여야 한다. + +--- + +118 | 우주 보안 모델 해설 및 적용사례집 +SO-03 +시간동기화 +항목 내용 +감사기록을 위한 타임스태프 생성을 위해 내부 시스템(NTP서버) 시간을 +사용해야 한다. +목적 +내부 기준 시간(NTP 서버)을 활용하여 시스템 간 시간을 일관되게 유지하고, +감사기록의 정확성과 신뢰성을 확보하기 위함이다. +주요 +확인사항 +y ‌정보시스템의 시각을 표준시각(NTP 등)으로 동기화하고 있는가? +y ‌시간 동기화가 정상적으로 이루어지고 있는지 주기적으로 점검하고 있는가? +세부 설명 +⊙ ‌정보시스템의 시각을 표준시각(NTP 등)으로 동기화해야 한다. +NTP(Network Time Protocol) 등의 방법을 활용하여 시스템 간 시간 동기화 적용 +인터넷 동기화 설정 방법 + +‌Step 1) 제어판 > 시계 및 국가 > 날짜 및 시간 > 인터넷 시간 > 설정 변경 > 인터넷 시간 서버와 +동기화 + +Step 2) 신뢰할 수 있는 NTP 서버(예: time.windows.com) 입력 후 적용 +▶ ‌내부 NTP 서버 설정 방법 + +Step 1) 시간 동기화 정보 확인 (Client) + +CMD > w32tm /dumpreg /subkey:parameters + +--- + + +## 제3장 우주 보안모델 해설 | 119 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +시간 동기화 정보 확인(Client) +Step 2) 내부 NTP 서버로 시간 동기화 설정 (Client) +(설정) ‌CMD > w32tm /config /syncfromflags:manual /manualpeerlist:{NTP서버 IP or 도메인} +/update +(적용 확인) CMD > w32tm /dumpreg /subkey:parameters +내부 NTP 서버로 시간동기화 설정(Client) +※ ‌Client에서 동기화 설정 후 ‘SpecialPollInterval’ ‘MaxPosPhaseCorrection’ 설정에 따라 +주기적으로 자동으로 동기화가 적용되지만 NTP Server에서 다음 명령어로 즉시 적용 가능함. +CMD > w32tm /resync +동기화 명령 성공 확인 +Step 1) 동기화 시간차 확인 +CMD > w32tm /stripchart /dataonly /computer:{NTP서버 IP or 도메인} +동기화 시간차 확인 +출처 : 2026 주요정보통신기반시설 기술적 취약점 분석·평가방법 상세가이드(KISA) + +--- + +120 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌시간 정확성이 요구되는 모든 정보시스템은 빠짐없이 동기화 적용(출입통제시스템, CCTV +저장장치 등) +⊙ ‌시간 동기화가 정상적으로 이루어지고 있는지 주기적으로 점검해야 한다. +▶ ‌시간 동기화 오류 발생 여부, OS 재설치 또는 설정변경 등에 따른 시간동기화 적용 누락 여부 +점검 필요 +관련 기준 +⊙ CMMC +• ‌AU.L2-3.3.7 공인된 시간 출처 : 감사 기록에 대한 타임스태프를 생성하기 위해 내부 시스템을 공인된 +출처와 비교하고 동기화하는 시스템 기능을 제공한다. +⊙ K-RMF +• ‌AU-5 타임스탬프(TIME STAMPS) : + +## 1. 감사기록을 위한 타임스템프 생성을 위해 내부 시스템(NTP서버) 시간을 사용해야 한다. + +2. ‌감사기록을 위한 타임스탬프는 한국표준시(KST)로 표시할 수 있고 [조직이 지정한 시간 측정단위]에 +맞는 것으로 하여 기록해야 한다. +⊙ ISMS-P +• ‌2.9.6 시간 동기화 : 로그 및 접속기록의 정확성을 보장하고 신뢰성 있는 로그분석을 위하여 관련 +정보시스템의 시각을 표준시각으로 동기화하고 주기적으로 관리하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 121 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +SO-04 +휴대용 저장장치(저장매체 등) 보안 +항목 내용 +중요정보가 저장된 저장매체 및 휴대용 PC는 물리적으로 안전하게 보관하고 +기밀성, 무결성을 보호하기 위해 통제해야 한다. +- 저장매체 이동 시 암호화 등으로 보호 +- 폐기 또는 재사용을 위해 반출되기 전에 정보소거 하거나 파기 +- 매체 백업 정보의 기밀성 보호 +목적 +중요정보가 저장된 저장매체에 대한 접근, 사용, 이동, 폐기를 통제하여 정보의 +기밀성과 무결성을 보장하기 위함이다. +주요 +확인사항 +y ‌중요정보가 담긴 저장매체는 중요정보를 표시하고, 배포제한 사항을 명시하여 +안전하게 보관하고 있는가? +y ‌중요정보를 저장한 저장매체를 외부 반출 시 중요정보를 암호화하고, +책임추적성을 유지하는가? +y ‌소유자를 식별할 수 없거나 승인되지 않은 휴대용 저장매체 사용을 통제하고, +중요정보가 저장된 저장매체는 승인된 최소 인원만 접근하도록 하고 있는가? +y ‌중요시스템에서의 이동식 저장매체 사용을 통제하고 있는가? +y ‌저장매체 폐기 또는 재사용을 위한 외부 방출 전 중요정보를 완전히 +파기하는가? +y ‌중요정보를 포함한 백업 정보는 암호화를 적용하고 있는가? +세부 설명 +⊙ ‌중요정보가 담긴 저장매체에 중요정보를 표시하고, 배포 제한사항을 명시하여 안전하게 보관해야 +한다. +▶ ‌중요정보가 저장된 모든 저장매체는 중요정보 포함 여부를 육안으로 식별할 수 있는 표식과 배포 +제한사항을 명시해야 함 +• ‌중요정보 표식 부착(예: 대외비, 기밀정보 등) +• ‌배포 제한사항(예: 협력사 배포 금지 등) +▶ ‌중요정보가 포함된 저장매체(이동형 하드디스크, USB메모리 등)는 금고 등 잠금장치가 있는 +물리적으로 안전한 장소에 보관 +⊙ ‌중요정보를 저장한 저장매체를 외부 반출 시 중요정보를 암호화하고, 책임추적성을 유지해야 한다. +▶ ‌중요정보를 포함한 저장매체를 통제구역 외부로 반출하는 경우 검증된 암호화 알고리즘을 +사용하여 중요정보를 암호화해야 함 + +--- + +122 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌중요정보가 포함된 저장매체를 통제구역 외부로 반출하는 경우 관리대장을 작성하고, 책임자의 +사전 승인을 득해야 함 +• ‌반출 목적 및 사유, 매체 정보(종류, 시리얼 번호 등), 반출입 일자, 운송 일시, 발송인, 수신인, +운송 방법 등을 포함한 관리대장 작성 +• ‌작업이 종료된 후, 저장매체의 상태(파손 여부 등) 점검 +▶ ‌중요정보가 포함된 저장매체의 책임추적성을 유지하기 위해 매체의 운송 활동은 사전에 승인된 +인원으로 제한해야 함 +▶ ‌운송 중 분실, 파손, 변조를 방지하고 탐지하기 위해 수신 확인 절차를 거쳐 배송 상태 모니터링 +• ‌발송자 사전 공지 및 수신자 수령 확인 +• ‌인수인계 확인서 작성 +▶ ‌개봉 여부를 육안으로 확인할 수 있는 봉인 스티커 등을 사용하여 변조 여부 관리 +⊙ ‌소유자를 식별할 수 없거나, 승인되지 않은 휴대용 저장매체 사용을 통제하고, 중요정보가 저장된 +저장매체는 승인된 최소 인원만 접근하도록 해야 한다. +▶ ‌모든 휴대용 저장매체는 특정 개인 또는 부서에 할당되어야 하며, 매체 관리 대장에 소유자 +정보가 기록되어야 함 +• ‌자산번호 : USB-001 / 소유자 : 홍길동 / 용도 : 기술자료 백업 등 +▶ ‌소유자를 식별할 수 없는 저장매체의 사용은 원칙적으로 금지 +▶ ‌개인 소유의 저장매체 등 승인되지 않은 장치의 시스템 접속을 금지하고, 승인되지 않은 비인가 +저장매체의 접속 차단 +• ‌매체 제어 솔루션을 통한 매체의 읽기/쓰기 기능 차단 +• ‌특정 시리얼 번호가 등록된 매체만 인식되도록 설정 등 +▶ ‌업무상 휴대용 저장매체의 사용이 필요한 경우, 사용 목적, 기간, 대상 시스템을 명시하여 보안 +담당자의 승인을 득해야 함 +▶ ‌휴대용 저장매체를 시스템에 연결하기 전 최신 백신을 통한 악성코드 점검을 수행해야 함 +⊙ ‌중요시스템에서의 이동식 저장매체 사용을 통제해야 한다. +▶ ‌중요 서버나 워크 스테이션의 미사용 USB 포트는 포트락 등의 물리적 잠금 장치를 통해 비인가 +접근을 차단해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 123 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +포트락이 설치된 USB 포트 +⊙ ‌저장매체 폐기 또는 재사용을 위한 외부 방출 전 중요정보를 완전히 파기해야 한다. +▶ ‌자체적으로 저장매체(이동형 하드디스크, USB메모리 등)를 폐기할 경우 다음 내용이 포함된 +관리대장을 통해 폐기 이력을 남기고, 폐기확인 증거자료를 함께 보관해야 함 +• ‌폐기 일자 +• ‌폐기 담당자 및 확인자 성명 +• ‌폐기 방법(소각, 파쇄, 덮어쓰기 등) +• ‌폐기확인 증적자료(사진 등) +▶ ‌외부업체를 통해 저장매체 폐기 시, 정보 유출 방지를 위한 보안서약서를 징구하고, 폐기현장에 +동행하여 직접 실사하거나 현장 동행이 어려울 경우 폐기 확인서 및 동영상, 사진 등의 폐기 확인 +증적을 제출받도록 해야 함 +▶ ‌매체를 폐기하기 전 조직을 식별하거나, 소유자, 시스템 또는 네트워크를 표시하는 라벨과 표식 +제거 +▶ ‌중요정보가 복구 및 재생되지 않도록 안전한 방법으로 파기 + +--- + +124 | 우주 보안 모델 해설 및 적용사례집 +안전한 파기방법(예) +y ‌완전파괴 : 중요정보가 저장된 하드디스크 등을 파쇄기로 파기하거나 용해, 또는 소각장, +소각로에서 태워서 파기 등 +y ‌전용 소자장비 이용 시 : 디가우저(Degausser)를 이용하여 하드디스크 등에 저장된 중요정보 +삭제 등 +y ‌데이터가 복원되지 않도록 초기화 또는 덮어쓰기 수행 시 : 중요정보가 저장된 하드디스크에 +대하여 완전포맷(3회 이상 권고), 데이터 영역에 무작위 값, 0, 1 등으로 덮어쓰기(3회 이상 권고), +해당 드라이브를 안전한 알고리즘 및 키 길이로 암호화 저장 후 삭제하고 암호화에 사용된 키 완전 +폐기 및 무작위 값 덮어쓰기 등의 방법 이용 +⊙ ‌중요정보를 포함한 백업 정보는 암호화를 적용해야 한다. +▶ ‌중요정보가 포함된 백업 매체(외부 하드디스크, USB, CD, NAS(Network Attacked Storage), +클라우드 백업 등)를 식별하고, 백업된 중요정보의 기밀성을 보호하기 위해 암호화 적용 +• ‌암호화 기능을 제공하는 보안 저장매체 이용(보안USB 등) +• ‌해당 정보를 암호화한 후 휴대용 저장매체에 저장 등 +안전한 암호 알고리즘 (예시) +구분 +알고리즘 명칭 +대칭키 암호 알고리즘 +SEED, ARIA-128/192/256, AES-128/192/256, +HIGHT, LEA 등 +공개키 암호 알고리즘 +RSAES-OAEP 등 +일방향 암호 알고리즘 +SHA-256/384/512 등 +▶ ‌암호화를 적용할 수 없는 경우, 백업 데이터가 저장된 매체를 금고, 잠금장치가 있는 안전한 +장소에 보관 +관련 기준 +⊙ CMMC +• ‌MP.L2-3.8.1 매체 보안 : CUI가 담긴 시스템 미디어(종이 및 디지털)를 보호(즉, 물리적으로 제어하고 +안전하게 보관)한다. +• ‌MP.L2-3.8.2 매체 접근 : 시스템 미디어의 CUI에 대한 액세스를 권한이 있는 사용자로 제한한다. +• ‌MP.L2-3.8.4 매체 표시 : 필요한 CUI 표시 및 배포 제한 사항을 사용하여 미디어에 표시해야 한다. +• ‌MP.L2-3.8.5 매체 책임추적성 : CUI가 포함된 미디어에 대한 접근을 통제하고 통제 구역 밖으로 미디어를 +운송하는 동안 미디어에 대한 책임을 유지해야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 125 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌MP.L2-3.8.6 휴대용 저장장치 암호화 : 달리 대체 물리적 보안 장치로 보호되지 않는 한, 전송 중에 +디지털 미디어에 저장된 CUI의 기밀성을 보호하기 위해 암호화 메커니즘을 구현한다. +• ‌MP.L2-3.8.3 매체 폐기 [CUI 데이터] : 폐기 또는 재사용을 위해 방출하기 전에 CUI가 포함된 시스템 +미디어를 정보소거하거나 파기한다. +• ‌MP.L2-3.8.7 이동식 매체 : 시스템 구성 요소에서 이동식 미디어 사용을 제어한다. +• ‌MP.L2-3.8.8 공유 매체 : 해당 장치에 식별 가능한 소유자가 없는 경우 휴대용 저장 장치의 사용을 +금지한다. +• ‌MP.L2-3.8.9 백업 보안 : 저장 위치에 있는 백업 CUI의 기밀성을 보호한다. +⊙ K-RMF +• ‌MP-3 매체 보관 : 조직에서 지정한 매체]를 [조직에서 지정한 보관 기준]에 따라 물리적으로 안전하게 +보관해야 한다. +• ‌MP-1 매체 접근 : [조직이 지정한 매체]에 대한 접근을 [조직이 지정한 직책]에게만 허용해야 한다. +• ‌MP-2 매체 표시 : [조직에서 지정한 매체]에 [조직에서 지정한 보안 표시]를 삽입해야 한다. +• ‌MP-4 매체 이동 : +1. ‌[조직에서 지정한 매체]를 [조직에서 지정한 통제 구역] 외부로 이동 시 [조직에서 지정한 보안 +보호조치]를 사용하여 보호해야 한다. +2. [조직에서 지정한 통제 구역] 외부로 이동 시 매체에 대한 책임을 유지해야 한다. + +## 3. 매체 이동과 관련된 활동을 기록 및 유지해야 한다. + + +## 4. 매체 이동과 관련된 활동을 인가된 인원으로만 제한해야 한다. + +• ‌MP-4-2 암호화를 통한 보호 : 디지털 매체를 [조직에서 지정한 통제 구역] 외부로 이동 시 매체내 저장된 +정보의 기밀성과 무결성을 보호하기 위해 암호화 기술을 적용해야 한다. +• ‌MP-6 매체 정보소거 : +1. ‌[조직에서 지정한 정보소거 요구 상황] 시 [조직에서 지정한 매체]를 [조직에서 지정한 방법 및 절차 ]를 +사용하여 정보를 소거해야 한다. +2. ‌매체에 저장(기록)된 정보의 유형과 비밀등급에 따라 강도와 무결성이 충족되는 정보소거 방법을 +사용해야 한다. +• ‌MP-5 매체 사용 : +1. ‌[조직에서 지정한 시스템 또는 시스템 구성요소]에서 [조직에서 지정한 매체]의 사용을 금지하거나 +[조직에서 지정한 보안 보호조치]를 활용하여 사용을 제한해야 한다. + +## 2. 시스템에서 인가되지 않은 휴대용 저장매체의 사용을 금지해야 한다. + +⊙ NIS2 +• ‌12.3 이동식 매체 정책 : 이동식 저장 매체 관리에 관한 정책을 수립·시행·적용하고, 이를 해당 기관의 직원 +및 이동식 저장 매체를 기관의 사업장이나 해당 매체가 기관의 네트워크 및 정보 시스템에 연결되는 기타 +장소에서 취급하는 협력업체 직원에게 전달해야 한다 +⊙ ISMS-P +• ‌2.10.7 보조저장매체 관리 : 보조저장매체를 통하여 개인정보 또는 중요정보의 유출이 발생하거나 +악성코드가 감염되지 않도록 관리 절차를 수립·이행하고, 개인정보 또는 중요정보가 포함된 보조저장 +매체는 안전한 장소에 보관하여야 한다. + +--- + +126 | 우주 보안 모델 해설 및 적용사례집 +SO-05 +형상관리 +항목 내용 +시스템 구축 및 운영의 통제기준이 되는 최신화된 형상관리 기준선(Baseline)을 +식별하고 시스템 정보기술 제품들의 보안 환경설정을 수립 및 문서화해야 한다. +목적 +시스템 수명 전반에 걸쳐 형상관리 기준선을 확립하고, 안전한 보안 구성 설정을 +적용하여 정보자산의 무결성을 유지하기 위함이다. +주요 +확인사항 +y ‌하드웨어, 소프트웨어, 펌웨어 및 문서를 포함한 모든 구성요소에 대한 +기준선을 구성하고, 문서화하고 있는가? +y ‌시스템에 적용되는 정보기술 제품에 대한 보안 환경설정을 수립하고 시행하고 +있는가? +세부 설명 +⊙ ‌하드웨어, 소프트웨어, 펌웨어 및 문서를 포함한 모든 구성요소에 대한 기준선을 구성하고, +문서화해야 한다. +▶ ‌조직은 시스템의 안정성과 무결성을 유지하기 위해 시스템과 시스템 내 모든 구성요소에 대한 +사양을 문서화하여 검토해야 함 +▶ ‌수립한 기준선 구성에는 시스템 통신 및 연결을 포함하여 시스템과 시스템 구성요소에 대한 설정 +등 기타 사양을 포함해야 함 +▶ ‌시스템 또는 구성요소 변경 시 기존 기준선 구성을 검토하고 변경된 내용을 업데이트 +⊙ ‌시스템에 적용되는 정보기술 제품에 대한 보안 환경설정을 수립하고 시행해야 한다. +▶ ‌보안 환경설정은 시스템 기능에 영향을 미치는 하드웨어, 소프트웨어, 펌웨어 구성요소에서 +변경될 수 있는 설정 값으로, 다음의 설정 값이 포함됨 +• ‌레지스트리 설정값 +• ‌계정, 파일, 디렉터리 권한 설정값 +• ‌네트워크 관련 설정값 +▶ ‌운영 요구사항을 준수하는 보안 환경설정을 수립하고 문서화해야 함 +▶ ‌보안 환경설정을 운영체제(OS), 애플리케이션 등 모든 우주 시스템에 적용 필요 +▶ ‌보안 환경설정이 임의로 변경되거나, 취약점이 발생하지 않도록 주기적으로 모니터링하고 +관리해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 127 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ CMMC +• ‌CM.L2-3.4.1 시스템 기준 설정 : 각 시스템 개발 수명 주기 전반에 걸쳐 조직 시스템의 기준 구성과 +인벤토리(하드웨어, 소프트웨어, 펌웨어 및 문서 포함)를 수립하고 유지 관리한다. +• ‌CM.L2-3.4.2 보안 구성 시행 : 조직 시스템에 사용되는 정보 기술 제품에 대한 보안 구성 설정을 수립하고 +시행한다. +⊙ K-RMF +• ‌CM-1 형상관리 기준선 : 시스템 구축 및 운영의 통제기준이 되는 최신화된 형상관리 기준선(Baseline)을 +식별하여 문서화해야 한다. +• ‌CM-3 형상 설정 +1. ‌시스템의 정보기술 제품들이 운영 요구사항을 충족하면서 가장 엄격하게 [조직이 지정한 보안 환경설정 +항목]을 적용하도록 보안 환경설정을 수립 및 문서화해야 한다. + +## 2. 보안 환경설정을 적용해야 한다. + +3. ‌[조직이 지정한 운영 요구사항]에 따라 [조직이 지정한 시스템 구성요소]에 적용되는 보안 환경설정과 +다른 사항을 식별, 문서화하고 승인해야 한다. + +## 4. 정책 및 절차에 따라 보안 환경설정을 모니터링하고 통제해야 한다. + + +--- + +128 | 우주 보안 모델 해설 및 적용사례집 +SO-06 +시스템 및 애플리케이션 보안 요구사항 정의 +항목 내용 +사업 기획 단계에서 시스템 및 서비스에 대한 정보보안 요구사항을 정의해야 +하며, 안전한 코딩 방안을 포함하여야 한다. +목적 +시스템 도입 및 애플리케이션 개발 단계에서 필요한 정보보안 요구사항을 사전에 +정의하고 안전한 개발·코딩 기법을 적용함으로써, 초기 기획부터 운영까지 전 +과정에서 보안 취약점을 예방하고 안전한 시스템을 구축하기 위함이다. +주요 +확인사항 +y ‌사업 기획 단계에서 시스템 및 애플리케이션에 대한 정보보안 요구사항을 +정의하고 있는가? +y ‌정보시스템의 안전한 구현을 위한 코딩 표준을 수립하여 적용하고 있는가? +세부 설명 +⊙ ‌사업 기획 단계에서 시스템 및 애플리케이션에 대한 정보보안 요구사항을 정의해야 한다. +▶ ‌사업 기획 단계에서 시스템 및 서비스 보호를 위해 필요한 정보보안 요구사항(법적 준거성, +기술적 보안 규격 등)을 결정하고, 문서화 +▶ ‌시스템 및 애플리케이션을 신규로 도입하는 경우 법적 요구사항, 최신 취약점 등을 포함한 보안 +요구사항을 명확히 정의하고 반영해야 함 +• ‌상위 기관 및 내부 규정에 따른 정보보호 요구사항 +• ‌정보보호 관련 기술적 요구사항 : 인증, 접근통제, 암호화, 로깅 등 +• ‌최신 보안취약점 등 +▶ ‌보안 요구사항에는 다음과 같은 내용이 포함되어야 함 +• ‌사용자 인증 방법 +• ‌접근권한 통제 방법 +• ‌로깅 방법 +• ‌암호화 대상 및 방법 +▶ ‌정보보호 측면의 요구사항을 제안요청서(RFP)에 반영하여 업체 또는 제품 선정 기준으로 활용 +⊙ ‌정보시스템의 안전한 구현을 위한 코딩 표준을 수립하여 적용해야 한다. +▶ ‌시큐어 코딩이란 소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하기 위해, 설계 +및 구현 단계에서부터 보안 요구사항을 반영하고 안전하게 코딩하는 기법을 의미함 +▶ ‌다양한 개발 언어(Java, PHP, ASP, 웹, 모바일 등) 및 환경을 고려하여 알려진 보안 취약점을 +예방할 수 있는 안전한 코딩 표준(Secure Coding Standard) 및 보안 가이드 마련 + +--- + + +## 제3장 우주 보안모델 해설 | 129 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌우주 기업의 개발자 및 관련 인원이 수립된 코딩 표준을 숙지하고 올바르게 적용할 수 있도록 +소프트웨어 개발 보안 관련 교육을 주기적으로 실시 +▶ ‌개발 완료 후에는 정적 분석 도구 또는 동적 분석 도구를 활용하여 안전한 코딩 표준 준수 여부와 +보안 약점 존재 여부 점검 +• ‌시스템이 안전한 코딩표준에 따라 구현하는지 소스코드 검증(소스코드 검증 도구 활용 등) +• ‌코딩이 완료된 프로그램은 운영환경과 동일한 환경에서 취약점 점검도구 또는 모의진단을 통한 +취약점 노출 여부 점검 +관련 기준 +⊙ K-RMF +• ‌SA-1 자원 할당 + +## 1. 사업(임무) 계획단계에서 시스템 및 서비스에 대한 정보보안 요구사항을 결정해야 한다. + + +## 2. 소요기획단계에서 시스템 및 서비스를 보호하기 위해 필요한 자원을 결정, 할당하고 문서화해야 한다. + + +## 3. 예산편성 및 제안요청 관련문서에 ‘정보보안’항목을 별도로 기술해야 한다. + +⊙ NIS2 +• ‌6.1 ICT 서비스·제품 도입 시 보안 : 네트워크 및 정보 시스템의 보안에 중요한 구성 요소를 위한 ICT +서비스 또는 ICT 제품의 취득으로부터 발생하는 위험을 관리하기 위한 절차를 수립하고 시행해야 하며, +이는 제2.1항에 따라 수행된 위험 평가를 기반으로 공급업체 또는 서비스 제공자의 전체 생애 주기에 걸쳐 +적용되어야 한다. +• ‌6.2 보안 개발 생명주기 : 네트워크 및 정보 시스템(소프트웨어 포함)을 개발하기 전에, 관련 기관은 +네트워크 및 정보 시스템의 안전한 개발을 위한 규칙을 수립하고, 이를 내부적으로 네트워크 및 정보 +시스템을 개발할 때나 외부에 개발을 위탁할 때 적용해야 한다. 이러한 규칙은 명세, 설계, 개발, 구현 및 +테스트를 포함한 모든 개발 단계에 적용되어야 한다. +⊙ ISMS-P +• ‌2.8.1 보안 요구사항 정의 : 정보시스템의 도입·개발·변경 시 정보보호 및 개인정보보호 관련 법적 +요구사항, 최신 보안취약점, 안전한 코딩방법 등 보안 요구사항을 정의하고 적용하여야 한다. + +--- + +130 | 우주 보안 모델 해설 및 적용사례집 +SO-07 +시스템/애플리케이션 변경관리 +항목 내용 +시스템 및 애플리케이션의 변경 사항을 검토, 승인/거부하고 변경내역을 +기록해야 하며 변경 전에 변경에 대한 잠재적인 보안 영향을 분석해야 한다. +목적 +시스템 및 애플리케이션 변경 시 사전 영향 분석과 승인 절차를 통해 시스템의 +무결성을 보장하고 안정적인 운영을 유지하기 위함이다. +주요 +확인사항 +y ‌시스템 변경 사항을 검토하여 승인/거부하고, 변경 사항을 기록 및 +문서화하는가? +y ‌애플리케이션 변경 사항을 검토하여 승인/거부하고, 변경 사항을 기록 및 +문서화하고 있는가? +y ‌승인된 변경 사항을 시스템에 적용하기 전 보안 영향을 분석하고, 안정성을 +사전에 검증하고 있는가? +y ‌시스템 변경과 관련된 물리적/논리적 접근 제한을 정의하고, 승인된 인원만 +변경을 수행하도록 통제하고 있는가? +세부 설명 +⊙ ‌시스템 변경 사항을 검토하여 승인/거부하고, 변경 사항을 기록 및 문서화한다. +▶ ‌정보시스템 관련 자산(하드웨어, 운영체제, 상용 소프트웨어 패키지 등) 변경에 관한 절차를 +수립·이행 +• ‌운영체제 업그레이드, 상용 소프트웨어 설치, 운영 중인 응용프로그램 기능 개선, 네트워크 구성 +변경, CPU·메모리·저장장치 증설 등 정보시스템 관련 자산 변경이 필요한 경우 변경을 위한 +절차 수립 및 이행 +▶ ‌시스템 변경 사항은 운영환경에 반영하기 전 검토하여 승인, 거부함 +▶ ‌시스템의 무결성을 보장하고, 안정적인 운영을 유지하기 위해 변경사항을 기록해야 함 +• ‌변경 일자 +• ‌변경된 항목(하드웨어, 소프트웨어, 설정 등) +• ‌변경 범위(적용 시스템, 구성 요소 등) +• ‌변경 목적 및 필요성 등 +▶ ‌변경 사항관리를 위해 변경 일자, 개정 사유, 작성자, 승인자 등 개정 이력을 기록하여 관리 +▶ ‌변경·구현·이관 일자, 변경 요청사유, 담당자 등을 포함하여 변경사항을 기록해야 함 +⊙ ‌애플리케이션 변경 사항을 검토하여 승인/거부하고, 변경 사항을 기록 및 문서화한다. + +--- + + +## 제3장 우주 보안모델 해설 | 131 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌애플리케이션 변경은 소스코드의 무결성 보장과 배포 안정성을 위해 형상 관리 및 자동화 +도구(Git, Jenkins 등)를 활용하여 수행함 +▶ ‌변경 사항이 정보보안(기밀성, 무결성, 가용성) 및 기존 시스템에 미치는 위험 분석 +▶ ‌소스코드 취약점 점검 및 요구사항 준수 여부 검토 +▶ ‌변경 사항을 검토하여 운영 환경 반영 여부 결정 +▶ ‌변경 요청부터 운영환경 반영까지의 모든 과정을 기록하고 관리함 +⊙ ‌승인된 변경 사항을 시스템에 적용하기 전 보안 영향을 분석하고, 안정성을 사전에 검증해야 한다. +▶ ‌정보시스템 관련 자산 변경 수행 전 성능 및 보안에 미치는 영향을 분석해야 함 +▶ ‌정보시스템 관련 정보자산 변경이 필요한 경우 변경에 따른 보안, 성능, 업무 등에 미치는 영향을 +분석해야 함(방화벽 등 보안시스템 정책 변경 필요성, 정책 변경 시 문제점 및 영향도 등) +▶ ‌변경에 따른 영향을 최소화할 수 있도록 변경을 이행해야 함 +▶ ‌변경 실패에 따른 복구방안을 사전에 고려해야 함 +⊙ ‌시스템 변경과 관련된 물리적/논리적 접근 제한을 정의하고, 승인된 인원만 변경을 수행하도록 +통제해야 한다. +▶ ‌하드웨어, 소프트웨어, 펌웨어를 포함한 구성요소별 접근권한 정의 +▶ ‌서버실 등 주요 구역에 대한 물리적 출입통제 적용(예: 키 카드 등) +▶ ‌시스템 구성요소, 소프트웨어 라이브러리 및 관련 정보를 변경할 수 있는 권한을 직무에 따라 +명확히 정의하고 승인된 인원에게만 최소한으로 부여 +▶ ‌승인된 인원에게만 변경 권한을 부여하고, 관련 데이터에 대한 접근을 통제해야 함 +관련 기준 +⊙ CMMC +• ‌CM.L2-3.4.3 시스템 변경 관리 : 조직 시스템의 변경 사항을 추적, 검토, 승인 또는 거부하고 기록한다. +• ‌CM.L2-3.4.4. 보안 영향 분석 : 구현에 앞서 변경 사항의 보안 영향을 분석한다. +• ‌CM.L2-3.4.5 변경에 대한 접근 제한 : 조직 시스템의 변경과 관련된 물리적, 논리적 액세스 제한을 정의, +문서화, 승인하고 시행한다. +⊙ K-RMF +• ‌CM-2 형상 변경 통제 + +## 1. 시스템 변경 소요가 발생하면 형상변경을 위해 통제할 사항을 결정하고 문서화해야 한다. + +2. ‌시스템에 대해 1번에서 통제된 형상변경을 검토하고 보안 영향분석을 통해 해당 변경을 승인 또는 +불승인해야 한다. + +## 3. 시스템과 관련해서 결정된 변경사항을 문서화해야 한다. + + +--- + +132 | 우주 보안 모델 해설 및 적용사례집 + +## 4. 승인된 형상 변경사항을 적용해야 한다. + +5. [조직이 지정한 주기]마다 시스템에 대한 형상 변경사항을 기록해서 보존해야 한다. + +## 6. 시스템의 형상변경과 관련된 활동을 모니터링하고 검토해야 한다. + +7. ‌[ 조직이 지정한 주기] 마다 또는 [ 조직이 지정한 형상 변경 조건] 충족 시 소집되는 +형상관리통제부서(위원회 등)를 통해 형상변경 활동을 관리하고 조율해야 한다. +• ‌SA-7 개발자(업체)의 형상관리 : 조직은 시스템/구성요소/서비스 개발자(업체)에게 다음사항을 요구해야 +한다. + +## 1. 개발수명주기 여러 단계에서 (설계, 개발, 구현, 운영, 도태 중 하나 이상) 형상관리를 수행 + + +## 2. 무결성을 보장하기 위해 [조직이 지정한 형상 항목]의 변경사항을 기록/유지, 관리, 통제 + + +## 3. 변경사항은 조직이 승인한 사항만 구현 + + +## 4. 변경사항과 이로 인해 예상되는 보안영향을 기록 및 유지 + + +## 5. 보안결함 및 결함 조치내역을 추적하고, [조직이 지정한 인원]에게 그 결과를 보고 + +• ‌CM-5 보안 영향성 분석 : 시스템 형상변경을 적용하기 전에 변경에 대한 잠재적인 보안 영향성을 +분석해야 한다. +• ‌CM-6 변경 제한 + +## 1. 시스템 변경과 관련된 (물리적, 논리적) 제한사항을 정의하고 문서화 하여야 한다. + + +## 2. 시스템의 물리적, 논리적 변경과 관련된 제한사항을 승인 받은 후 시행해야 한다. + +⊙ ‌NIS2 +• ‌6.3 구성 관리 : 하드웨어, 소프트웨어, 서비스 및 네트워크의 보안 설정을 포함한 구성 사항을 수립하고, +문서화하며, 구현하고, 모니터링하기 위한 적절한 조치를 취해야 한다. +• ‌6.4 변경 관리·유지보수 : 네트워크 및 정보 시스템의 변경을 관리하기 위해 변경 관리 절차를 적용해야 +한다. 해당되는 경우, 이러한 절차는 변경 관리에 관한 기관의 일반 정책과 일관성을 유지해야 한다. +⊙ ‌ISMS-P +• ‌2.9.1 변경관리 : 정보시스템 관련 자산의 모든 변경내역을 관리할 수 있도록 절차를 수립·이행하고, 변경 +전 시스템의 성능 및 보안에 미치는 영향을 분석하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 133 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +SO-08 +개발 시험 및 평가 +항목 내용 +사전 정의된 보안 요구사항에 따라 정보시스템이 도입 또는 구현되었는지를 +검토하기 위하여 법적 요구사항 준수, 최신 보안취약점 점검, 안전한 코딩 구현 +등의 검토 기준과 절차를 수립·이행하고, 발견된 문제점에 대한 개선조치를 +수행하여야 한다. +목적 +사전에 정의된 보안 요구사항의 구현 여부를 검증하고 잠재적 기술적 취약점을 +사전에 식별함으로써 시스템의 안정성과 무결성을 확보하기 위함이다. +주요 +확인사항 +y ‌분석 및 설계 단계에서 정의한 보안 요구사항이 정보시스템의 도입, 개발, 변경 +시 제대로 반영되었는지 확인하는 절차를 운영하고 있는가? +y ‌정보시스템이 안전한 코딩 기준 등에 따라 안전하게 개발되었는지를 확인하기 +위한 취약점 점검이 수행되고 있는가? +y ‌시험 및 취약점 점검 과정에서 발견된 문제점이 신속하게 개선될 수 있도록 +개선계획 수립, 이행점검 등의 절차를 이행하고 있는가? +세부 설명 +⊙ ‌분석 및 설계 단계에서 정의한 보안 요구사항이 정보시스템의 도입, 개발, 변경 시 제대로 +반영되었는지 확인하는 절차를 운영해야 한다. +▶ ‌정보시스템 보안 요구사항 적용 여부를 확인하기 위한 시험 수행 +• ‌정보시스템이 사전에 정의한 보안 요구사항을 만족하여 개발·변경 및 도입되었는지 확인하기 +위한 절차 수립 +• ‌정보시스템을 도입하기 전 사전 정의한 보안 요구사항 적용 여부를 테스트 등을 통하여 확인한 후 +도입 여부 결정 +• ‌시스템 보안 설정, 불필요한 디폴트 계정 제거 여부, 최신 보안취약점 패치 여부 등을 확인해야 함 +▶ ‌개발·변경 및 구현된 기능이 사전에 정의된 보안 요구사항을 충족하는지 시험을 수행 +• ‌시험 계획서, 체크리스트, 시험 결과서 등에 반영 +⊙ ‌정보시스템이 안전한 코딩 기준 등에 따라 안전하게 개발되었는지를 확인하기 위한 취약점 점검을 +수행해야 한다. +▶ ‌코딩 완료 후 안전한 코딩 표준 및 규약 준수 여부를 점검하고 기술적 보안취약점이 존재하는지 +점검을 수행해야 함 +▶ ‌시스템이 안전한 코딩표준에 따라 구현하였는지 소스코드 검증(소스코드 검증도구 활용 등) + +--- + +134 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌코딩이 완료된 프로그램은 운영환경과 동일한 환경에서 취약점 점검도구 또는 모의진단을 통한 +취약점 노출 여부 점검 +⊙ ‌시험 및 취약점 점검 과정에서 발견된 문제점이 신속하게 개선될 수 있도록 개선계획 수립, 이행점검 +등의 절차를 이행해야 한다. +▶ ‌발견된 문제점은 시스템 오픈 전에 개선될 수 있도록 개선계획 수립, 내부 보고, 이행점검 등의 +절차를 수립하고 이행해야 함 +▶ ‌불가피한 사유로 시스템 오픈 전에 개선이 어려울 경우에는 이에 따른 영향도를 평가하고, 보완 +대책 마련, 내부 보고 등 위험을 줄일 수 있는 방안 수립 +관련 기준 +⊙ K-RMF +• ‌SA-8 개발자(업체)의 보안 시험 및 평가 : 개발자(업체)에게 다음을 요구해야 한다. + +## 1. 보안 시험평가 계획을 작성하고 구현 + +2. ‌[조직이 지정한 수준 및 범위]내에서 [단위 시험평가, 통합 시험평가, 시스템 시험평가, 회귀 시험평가 중 +하나 이상]을 수행 + +## 3. 보안 시험평가 계획의 실행 및 보안 시험평가 결과를 기록 및 유지 + + +## 4. 결함 조치 프로세스를 수립 + + +## 5. 보안 시험평가 간 식별된 결함을 수정 + +⊙ NIS2 +• ‌6.5 보안테스트 : 기업은 보안 테스트를 위한 정책과 절차를 수립하고, 시행하며, 적용해야 한다. +⊙ ISMS-P +• ‌2.8.2 보안 요구사항 검토 및 시험 : 사전 정의된 보안 요구사항에 따라 정보시스템이 도입 또는 +구현되었는지를 검토하기 위하여 법적 요구사항 준수, 최신 보안취약점 점검, 안전한 코딩 구현, 개인정보 +영향평가 등의 검토 기준과 절차를 수립·이행하고, 발견된 문제점에 대한 개선조치를 수행하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 135 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +SO-09 +기능 최소화 및 사용자 설치 소프트웨어 통제 +항목 내용 +필수 기능만 제공하도록 시스템을 설정하고 사용자가 설치한 소프트웨어를 +통제하고 모니터링한다. +목적 +시스템에서 불필요한 기능을 제거하고, 사용자의 임의 소프트웨어 설치를 +통제·모니터링하여 보안 위험을 최소화하기 위함이다. +주요 +확인사항 +y ‌시스템이 필수적인 기능만 제공하도록 구성하고, 불필요한 서비스 및 기능을 +비활성화하여 운영하고 있는가? +y ‌비인가 소프트웨어를 차단하는 블랙리스트 또는 승인된 소프트웨어만 +허용하는 화이트리스트 정책을 적용하여 무단 소프트웨어 사용을 통제하고, +설치 소프트웨어 현황을 주기적으로 점검하고 있는가? +세부 설명 +⊙ ‌시스템이 필수적인 기능만 제공하도록 구성하고, 불필요한 서비스 및 기능을 비활성화하여 운영해야 +한다. +▶ ‌우주 기업은 시스템별(서버, PC 등) 운영 목적에 따른 서비스 및 최소 기능 정의하고, 필수적인 +소프트웨어, OS, 네트워크 프로토콜 목록을 문서화하여 관리해야 함 +▶ ‌불필요한 서비스 및 기능을 비활성화해야 함(예: DHCP Client, Print Spooler 등) +Windows 기준 불필요한 서비스 비활성화 설정 (예시) +Step 1) ‌시작 > 모든 앱 Windows Tools > 서비스 > 해당 서비스 선택 > 속성 +(시작 > 모든 앱 > Windows Tools > 실행 > “services.msc” 입력> 해당 서비스 선택> 속성에서도 +설정 가능) +Step 2) 불필요한 서비스 -> 중지 / 시작 유형 -> 사용 안 함 +출처 : 2026 주요정보통신기반시설 기술적 취약점 분석·평가방법 상세가이드(KISA) + +--- + +136 | 우주 보안 모델 해설 및 적용사례집 +⊙ ‌비인가 소프트웨어를 차단하는 블랙리스트 정책 또는 승인된 소프트웨어만 허용하는 화이트리스트 +정책을 적용하여 무단 소프트웨어 사용을 통제하고, 설치 소프트웨어 현황을 주기적으로 점검해야 +한다. +▶ ‌비인가 소프트웨어 실행을 차단하는 블랙리스트 정책 또는 인가된 소프트웨어만 실행을 +허용하는 화이트리스트 정책을 선택하여 무단 소프트웨어 사용을 통제해야 함 +• ‌블랙리스트 정책 : 차단 목록에 명시된 비인가 소프트웨어를 제외한 모든 소프트웨어의 실행 허용 +• ‌화이트리스트 정책 : 승인된 소프트웨어 목록에 포함된 항목 외 모든 소프트웨어 실행 차단 +▶ ‌블랙리스트 정책을 통한 무단 소프트웨어 설치 통제 +• ‌P2P 프로그램, 웹하드, 개인용 클라우드뿐만 아니라 원격접속시스템, 비인가 네트워크 우회 +프로그램, 업무 외 소프트웨어(메신저, SNS, 게임, 주식 등)에 대한 설치 금치 정책 수립 및 공지 +• ‌업무상 예외가 필요할 경우 관리자 승인을 득한 후 사용 및 불필요 시 즉시 삭제 +• ‌설치 여부를 정기적으로 점검하여 지속적으로 개선 +▶ ‌화이트리스트 백신을 통한 무단 소프트웨어 설치 통제 +• ‌승인된 소프트웨어 식별 +• ‌승인된 소프트웨어의 파일명, 해시값, 디지털 서명 등을 추출·목록화 +• ‌화이트리스트 정책에 적용하여 목록에 등록되지 않은 비인가 소프트웨어 설치 차단 및 통제 +▶ ‌블랙리스트 정책 적용 시, 비인가 소프트웨어를 식별하여 목록화하고, 차단해야 할 소프트웨어의 +프로세스명, 해시값, 디지털 서명 등을 바탕으로 관리하고, 목록을 주기적으로 업데이트해야 함 +▶ ‌화이트리스트 정책 적용 시, 승인된 소프트웨어를 식별하여 목록화하고, 디지털 서명 및 +해시값을 기반으로 승인된 프로그램만 실행되도록 통제 +▶ ‌설치 소프트웨어 현황을 주기적으로 점검 필요 +관련 기준 +⊙ CMMC +• ‌CM.L2-3.4.6 최소 기능성 : 최소 기능성 원칙을 적용하여 조직 시스템을 필수적인 기능만 제공하도록 +구성한다. +• ‌CM.L2-3.4.7 비필수 기능 : 필수적이지 않은 프로그램, 기능, 포트, 프로토콜 및 서비스의 사용을 제한, +비활성화 또는 방지한다. +• ‌CM.L2-3.4.9 사용자가 설치한 소프트웨어 : 사용자가 설치한 소프트웨어를 제어하고 모니터링한다. +• ‌CM.L2-3.4.8 애플리케이션 실행 정책 : 허가되지 않은 소프트웨어 사용을 차단하려면 +거부·예외(블랙리스트) 정책을 적용하고, 허가된 소프트웨어 실행을 허용하려면 모두 거부하고 예외적으로 +허용(화이트리스트) 정책을 적용한다. +⊙ K-RMF + +--- + + +## 제3장 우주 보안모델 해설 | 137 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌CM-7 기능 최소화 + +## 1. 필수 기능만 제공하도록 시스템을 설정해야 한다. + +2. [조직이 지정한 기능, 포트, 프로토콜, 소프트웨어, 서비스]의 사용을 금지하거나 제한해야 한다. +• ‌CM-7-1 정기 검토 +1. ‌[조직이 지정한 주기 또는 필요 시]마다 불필요하거나 안전하지 않은 기능, 포트, 프로토콜, 소프트웨어, +서비스를 검토해야 한다. + +## 2. 불필요하거나 안전하지 않은 기능, 포트, 프로토콜, 소프트웨어, 서비스를 비활성화해야 한다. + +• ‌CM-10 사용자 설치 소프트웨어 + +## 1. 사용자의 소프트웨어 설치에 관한 정책을 수립해야 한다. + +2. [조직이 지정한 방법]을 사용하여 위에서 수립한 소프트웨어 설치 정책을 시행해야 한다. +3. [조직이 지정한 주기]마다 정책을 준수하는지 확인해야 한다. +• ‌CM-7-4 블랙리스트 및 화이트리스트 + +## 1. 다음 중 하나 이상의 방식을 이용하여 소프트웨어 설치 및 운용을 제한 또는 승인하여야 한다. + + +가. 화이트리스트(인가된 소프트웨어 목록) 기반 설치 및 운용 승인 + +나. 블랙리스트(비인가 소프트웨어 목록) 기반 설치 및 운용 제한 + +## 2. 인가 및 비인가 소프트웨어 목록을 [조직이 지정한 주기]마다 검토하고 업데이트해야 한다. + + +--- + +138 | 우주 보안 모델 해설 및 적용사례집 +제6절 +사고 대응(IR) +IR-01 +사고 처리 및 테스트 +항목 내용 +사고대응 준비, 사고탐지, 사고 조사/분석, 피해 시스템의 분리 및 차단, 피해 +시스템 복구를 포함한 사고처리 대응 체계를 구축하고 주기적으로 사고대응 +테스트를 실시해야 한다. +목적 +중요 우주 시스템에 대한 보안사고 발생 시 피해를 최소화하고 신속하게 +복구하기 위해, 사고 탐지부터 복구에 이르는 전 과정에 대한 체계적인 대응 +역량을 구축하고 그 실효성을 검증하기 위함이다. +주요 +확인사항 +y ‌시스템에서 발생하는 의심스러운 이벤트를 사전에 정의된 기준에 따라 사고 +여부, 유형 및 심각도를 평가하여 분류하고 있는가? +y ‌우주기업의 특성을 반영하여 사고 탐지/대응/복구를 포함하는 사고 대응 +체계를 수립하고 있는가? +y ‌사고 대응 완료 후 사후 검토를 수행하고, 그 결과를 체계에 반영하고 있는가? +y ‌사고 대응 모의 훈련을 정기적으로 실시하고, 그 결과를 체계 및 절차 개선에 +반영하는가? +세부 설명 +⊙ ‌시스템에서 발생하는 의심스러운 이벤트를 사전에 정의된 기준에 따라 사고 여부, 유형 및 심각도를 +평가하여 분류해야 한다. +▶ ‌한국인터넷진흥원에서 발간한 정보통신분야 침해사고 대응 안내서에서 정의한 보안 사고 유형은 +아래와 같음 +보안 사고 유형 (예시) +y ‌바이러스, 트로이목마, 웜 등 악성코드에 의한 시스템 침해 및 공격 +y ‌비인가된 시스템 또는 파일 접근으로 인한 정보 유출 또는 훼손 행위 +y ‌네트워크 또는 정보시스템의 정상적인 서비스를 마비 또는 파괴하는 공격 +y ‌네트워크 정보 수집을 포함한 비인가된 네트워크 정보 접근 행위 +y ‌네트워크 서비스의 취약점을 이용하여 서비스를 무단으로 이용하는 행위 +출처 : 정보통신분야 침해사고 대응 안내서(KISA) + +--- + + +## 제3장 우주 보안모델 해설 | 139 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌사고 판단 기준은 지상 구간과 우주 구간을 고려하여 설정하고, 사고로 판단된 이벤트는 유형 및 +심각도에 따라 분류해야 함 +• ‌지상 구간(Ground Segment)과 우주 구간(Space Segment)에 미치는 잠재적 영향을 반영하여 +사고 판단 기준을 수립 +- ‌핵심 시스템의 경우, 중요도 및 민감도를 기준으로 탐지 임계값을 설정하고, 오탐 허용 범위를 +포함하여 문서화 +- ‌임계값 초과 또는 근접 시 수행해야 할 통지 및 신고 절차를 정의 +• ‌중대한 사고 판단기준 예시 : +- ‌NIS2에서 정의한 데이터 센터 서비스 제공자의 중대한 사고 판단 기준은 아래 표와 같음 +데이터 센터 서비스 제공자의 중대한 사고 기준 +사고 유형 +정량적 기준 + +## 1. 서비스 이용 불가 + +발생 + +## 2. 가용성 제한 + +1시간 초과 지속 + +## 3. 물리적 접근 침해 + +데이터 센터에 대한 물리적 접근이 침해된 경우 +▶ ‌이벤트 평가 및 분류를 위한 로그 분석 절차 수립 +• ‌임무 운영 센터(MOC, Mission Operations Center), 탑재체 제어 센터(PCC, Payload +Control Center), 지상국, 보안 장비에서 생성되는 로그를 식별·수집 +• ‌로그 상관관계 분석으로 분산된 이벤트 간 연관성 분석 +- ‌새로운 정보 확인 또는 이전에 확보된 정보 분석이 완료된 경우, 해당 이벤트를 재평가 및 +재분류 +- ‌반복 발생 이벤트가 존재하는지 주기적으로 평가 +⊙ ‌우주기업의 특성을 반영하여 사고 탐지/대응/복구를 포함하는 보안 사고 대응 체계를 수립해야 +한다. +▶ ‌보안 사고 대응 체계 내 역할과 책임을 정의해야 함 +• ‌사고 대응팀을 구성하고 사고 대응 관련 주요 역할(초기 탐지 담당, 사고 보고 접수 담당, +이해관계자 소통 담당자 등)을 문서로 정의 +• ‌비상 연락 대상·연락 수단·대체 연락 경로를 포함한 비상 연락망을 구축하고 최신 상태로 유지 +▶ ‌보안 사고 대응 절차는 사고 탐지/대응/복구로 구성하고, 아래 내용을 포함 +• ‌사고는 시스템 및 네트워크 사용자 또는 관리자에 의해 탐지될 수 있으며, 침입탐지 시스템, + +--- + +140 | 우주 보안 모델 해설 및 적용사례집 +방화벽과 같은 보안 장비에서 세부 기록 확인 가능 +• ‌사고 탐지 시 영향 범위를 신속히 평가하고, 지상 구간 및 우주 구간으로 확산 가능성 판단 +- ‌방화벽, 네트워크 접근제어(NAC)으로 사고가 발생한 구간과 타 구간 간의 트래픽을 +차단하거나, 탑재체로 전달되는 명령 링크의 송신 권한을 일시로 제한하는 조치 등을 통해 사고 +확산 방지 가능 +출처 : 정보통신분야 침해사고 대응 안내서(KISA) +• ‌정책, 기술, 법, 업무 등의 사고와 관련된 요인들을 고려하여 사고 대응 전략 수립 +- ‌예시 : 침해당한 컴퓨터가 얼마나 중요하고 위험한지, 침해당하거나 도난당한 정보가 얼마나 +민감한 것인지, 공격자에 의해 침해된 비인가 접근의 수준은 어느 정도인지, 형사소송 또는 +민사소송을 할 필요가 있는지 등 +사고유형에 따른 대응 전략 예시 +사고 유형 +대응 전략 +예상 결과 +DoS 공격 (TFN +DDoS, Flooding) +라우터 재설정으로 트래픽 흐름 +제어 +공격 효과 완화, 서비스 영향 최소화 +비인가 사용 (업무용 +컴퓨터 오용) +증거물 포렌식 이미지 확보 및 조사, +용의자 면담 +범인 식별, 징계 위한 증거 확보, +조직 정책 위반 여부 검토 +파괴 행위 (웹사이트 +손상) +웹사이트 모니터링, 온라인 상태 +조사, 복구 작업 +웹사이트 복구, 필요 시 수사기관 +참여로 범인 식별 +정보 도난 (고객정보 +유출) +관련 시스템 이미지 확보, 도난 +신고, 법적 대응 준비 +상세 조사 시작, 수사기관 참여, +민사소송 가능, 일정 기간 시스템 +오프라인 유지 +컴퓨터 침입 (버퍼 +오버플로우, 원격 접속) +공격자 활동 감시, 비인가 접속 +봉쇄, 보안 재설정 및 복구 +취약점 식별·패치, 시스템 복구, 범인 +식별 여부 결정 +출처 : 정보통신분야 침해사고 대응 안내서(KISA) + +--- + + +## 제3장 우주 보안모델 해설 | 141 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌사고로 인해 중단된 서비스를 정상 운영 상태로 복구하기 위한 절차를 수립·유지해야 함 +• ‌시스템 복구는 임의 백업이나 출처가 불분명한 이미지 사용을 금지하고, 형상 관리가 적용된 +사전에 승인된 복구 기준본으로 수행 +• ‌복구 완료 후에는 시스템 재설정, 기능 점검 및 보안성 검증을 수행하여 정상 동작 확인 +- 주요 기능, 보안 설정, 연계 시스템 동작 여부를 점검하여 서비스 재개 가능 여부 판단 +• ‌사고 대응 과정에서 적용한 임시 보안 조치, 우회 설정, 예외 권한은 복구 완료 후 즉시 해제하고, +정상 운영 환경으로 전환해야 함 +⊙ ‌사고 대응 완료 후 원인 분석 및 재발방지 대책을 포함하는 사후 검토를 수행하고, 그 결과를 사고 +대응 체계에 반영한다. +▶ ‌사고 대응 완료 후에는 사고의 재발 방지 및 대응 체계 개선을 위해 공식적인 사후 검토 활동을 +의무적으로 수행 +• ‌사후 검토 수행 시점, 책임 조직, 참여 인력을 사전에 정의 +• ‌사후 검토는 사고 종료 이후 일정 기간 내 수행 +• ‌사고 당시 수집된 로그, 이벤트 정보, 대응 기록을 기반으로 분석 수행하며, 사고의 근본 원인을 +식별 +• ‌식별된 취약점은 패치 및 업데이트 적용 +▶ ‌사후 검토를 통해 도출된 개선 사항을 바탕으로 사고 대응 체계 및 예방 통제를 개선하는 계획을 +수립하고 그 결과를 체계에 반영 +• ‌사후 검토를 통해 도출된 개선 사항은 사고 대응 절차, 복구 계획, 테스트 시나리오에 통합 및 +업데이트되어야 함 +⊙ ‌사고 대응 모의 훈련을 정기적으로 실시하고, 그 결과를 체계 및 절차 개선에 반영한다. +▶ ‌조직의 사고 대응 역량을 검증하기 위하여 연 1회이상 모의 훈련 실시 +▶ ‌핵심 시스템이나 환경에 중대한 변화(시스템 교체, 임무 투입, 대규모 업데이트)가 발생한 경우 +추가 훈련 실시 +• ‌운영 환경과 유사한 테스트 환경 또는 격리된 시뮬레이션 환경 등 실제 지상국 운영에 영향을 +주지 않는 환경에서 수행해야 함 +• ‌훈련은 사고 대응팀뿐만 아니라 임무 운영센터, 탑재체 제어 센터, 관제 인력, IT 운영 인력, +경영진 등 사고 대응 역할이 부여된 모든 인력이 참여 +▶ ‌훈련 과정에서 얻은 교훈과 발견된 계획의 결함을 사고 대응 절차 및 복구 계획에 반영 + +--- + +142 | 우주 보안 모델 해설 및 적용사례집 +관련 기준 +⊙ CMMC +• ‌R.L2-3.6.1 사고 처리 : 준비, 탐지, 분석, 격리, 복구 및 사용자 대응 활동을 포함하는 조직 시스템에 대한 +운영적 사고 처리 역량을 구축한다. +• ‌IR.L2-3.6.3 사고 대응 테스트 : 조직의 사고 대응 역량을 테스트한다. +⊙ K-RMF +• ‌IR-4 사고대응 테스트 : 시스템에 대한 사고대응 능력을 [조직이 지정한 주기]마다 [조직이 지정한 +테스트]를 실시하고 그 결과를 기록 및 유지해야 한다. +• ‌IR-5 사고처리 : +1. ‌사고대응 준비, 사고 탐지, 사고 조사/분석, 피해 시스템의 분리 및 차단, 피해 시스템 복구를 포함하여 +사고를 처리하기 위한 능력을 갖춰야 한다. + +## 2. 사고처리 활동을 비상계획과 연계해야 한다. + +3. ‌진행 중인 사고처리 간 얻은 교훈을 사고대응 절차, 교육훈련 및 평가에 적절하게 반영 및 이행해야 한다. +⊙ NIS2 +• ‌3.1 사고 대응 정책 : 관련 기관은 사건을 적시에 탐지, 분석, 격리, 대응, 복구, 문서화 및 보고하기 위한 +역할, 책임, 절차를 규정하는 사고 처리 정책을 수립하고 시행해야 한다. +• ‌3.4 이벤트 평가 및 분류 : 관련 기관은 의심되는 사건을 평가하여 그것이 실제 사고인지 여부를 판단하고, +사고일 경우 그 성격과 심각성을 결정해야 한다. +• ‌3.5 사고 대응 절차 : 관련 기관은 문서화된 절차에 따라 사고에 신속하게 대응해야 한다. +• ‌3.6 사후 검토 : 관련 기관은 필요할 경우 사고 복구 후 사후 검토를 수행해야 한다. +⊙ ISMS-P +• ‌2.11.1 사고 예방 및 대응체계 구축 : 침해사고 및 개인정보 유출 등을 예방하고 사고 발생 시 신속하고 +효과적으로 대응할 수 있도록 내·외부 침해시도의 탐지·대응·분석 및 공유를 위한 체계와 절차를 수립하고, +관련 외부기관 및 전문가들과 협조체계를 구축하여야 한다. +• ‌2.11.4 사고 대응 훈련 및 개선 : 침해사고 및 개인정보 유출사고 대응 절차를 임직원과 이해관계자가 +숙지하도록 시나리오에 따른 모의훈련을 연 1회 이상 실시하고 훈련결과를 반영하여 대응체계를 +개선하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 143 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +IR-02 +사고 보고 +항목 내용 +사고를 인지한 인원이 지정한 시간 내에 사고대응 부서에 신고하고 사고대응 +부서는 사고를 관련 기관에게 통지해야 한다. +목적 +보안 사고 발생 시 신속한 내부 보고와 대외 통지를 통해 적절한 기술적·관리적 +조치를 조기에 시행하고, 조직 차원의 사고 대응의 일관성을 확보하기 위함이다. +주요 +확인사항 +y ‌사고 인지 인원이 내부 담당자에게 보고하는 절차 및 사고 보고 체계가 +수립·운영되고 있는가? +y ‌사고의 유형 및 심각도에 따라 관련 법령에 근거하여 신고(관계기관) 절차를 +수립·이행하는가? +y ‌사고대응 부서가 사고 발생 사실을 관련 이해관계자에게 적시에 통지하는 +절차를 마련하고 있는가? +세부 설명 +⊙ ‌사고 인지 인원이 내부 담당자에게 보고하는 절차 및 사고 보고 체계를 수립·운영해야 한다. +▶ ‌사고 인지 시 지체 없이 보고가 가능하도록 주된 보고 경로 (예: 정보보호 부서의 사고 핫라인, +24/7 보안 관제 전화번호 등) 및 장애 발생 시 활용 가능한 대체 보고 경로(예: 담당자 전화번호, +이메일 등) 확보 +▶ ‌비상연락망을 구축하고 분기 1회 이상 점검하여 최신 상태로 유지 +• ‌비상연락망은 직책 기준으로 작성하고, 각 대상자별로 휴대전화(주 연락 수단)와 이메일·사내 +메신저 등 대체 수단을 함께 관리 +• ‌비상 상황에서의 연락 우선순위와 에스컬레이션 절차(1차 책임자 미응답 시 대리 또는 상위 +책임자로 전환)를 정의 +▶ ‌사고를 인지한 모든 인원은 지정된 시간 내 사고 대응 부서(또는 담당자)에게 보고해야 하며, +아래 항목이 포함되어야 함 +• ‌사고 인지 시 즉각 수행해야 할 조치 +- ‌예) 문제 발생 시 즉시 모든 관련 세부사항 기록, 화면에 표시되는 메시지 기록, 즉시 지정된 +책임자에게 보고 등 +• ‌사고 보고 항목 구성 +- ‌현재 시간과 날짜, 사고보고 내용과 출처, 사건이 일어난 일시, 피해 시스템 명칭/IP, 관련 +하드웨어/소프트웨어의 목록 +- ‌예: MOC/PCC 시스템의 비정상 유무, 명령 링크 관련 오류 여부, 관제 데이터의 무결성 침해 +징후 등 임무 연속성 관련 정보 + +--- + +144 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌우주기업은 모든 관련 인원에게 사고 보고 절차 및 중요성에 대해 분기마다 교육해야 함 +⊙ ‌사고의 유형 및 심각도에 따라 관련 법령에 근거하여 신고(관계기관) 절차를 수립·이행해야 한다. +▶ ‌사고 대응 부서는 사고의 유형 및 심각도 평가 결과를 바탕으로 관련 법령 및 규제 (예: +정보통신망법, NIS2 등) 상의 외부 신고 의무를 확인해야 함 +[정보통신망법 제48조의3] +정보통신서비스 제공자는 침해사고의 발생을 알게 된 때부터 24시간 이내에 아래 내용을 +과학기술정보통신부장관 또는 한국인터넷진흥원에 신고 + +## 1. 침해사고의 발생 일시, 원인 및 피해내용 + + +## 2. 침해사고에 대한 조치사항 등 대응 현황 + + +## 3. 침해사고 대응업무를 담당하는 부서 및 연락처 + +▶ ‌보안사고 신고 접수처 +• ‌전화: ☎ 118 (인터넷침해대응센터, 24시간 운영) +• ‌온라인: 보호나라 & KrCERT 홈페이지 → ‘침해사고 신고’ 메뉴 +• ‌이메일: certgen@krcert.or.kr +• ‌방문/우편: 서울특별시 송파구 중대로 135, IT벤처타워 서관 5층 종합상황실 +▶ ‌신고 기관을 사전에 식별하고, 해당 기관별 공식 신고 절차를 수립하여 이행해야 함 +• ‌우주기업에 적용되는 법적/계약적 사고 신고 의무(신고 대상 기관, 신고 기한)을 파악하여 +목록으로 관리 +• ‌사고 심각도와 법적 요건에 따라 외부 신고 여부를 판단할 수 있는 기준을 마련 +• ‌외부 신고 책임자를 지정하고, 최종 신고 전 경영진 및 법무팀의 승인을 거쳐야 함 +• ‌신고 시 제출해야 할 필수 정보 양식을 사전에 준비하고, 공개 범위를 명확히 함 +• ‌법정 신고 기한을 준수하여 관계 기관에 신고를 수행하고, 신고 일시, 신고 내용, 접수 결과 등을 +증적으로 기록·관리하여 사후 검토에 활용 +⊙ ‌사고대응 부서가 사고 발생 사실을 관련 이해관계자에게 적시에 통지하는 절차를 마련해야 한다. +▶ ‌사고 통지 대상, 통지 시점, 통지 수단(이메일, 유선, 메신저 등)과, 통지 책임자를 사전에 지정 +• ‌통지가 필요한 내부 및 외부 이해관계자를 식별하고 최신 연락망을 유지 +- 내부: 경영진, 사고로 인해 직접적인 영향을 받는 주요 시스템 운영·책임자 +- 외부: 협력업체 직원, 탑재체 운영자, 장치 공급업체, 고객 등 계약 상 통지 의무가 있는 대상 + +--- + + +## 제3장 우주 보안모델 해설 | 145 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌통지 내용에는 다음 사항을 포함해야 함 +- 사고 유형과 발생 시점 +- MOC/PCC 등 주요 시스템 영향 범위 및 데이터 무결성 영향 여부 +- 서비스 영향 최소화를 위해 이해관계자가 즉시 수행해야 할 조치 +- 사고 대응 전담 조직의 상시 연락 창구 +▶ ‌사고가 위성 운영 또는 탑재체 서비스에 영향을 미칠 경우, 사전 합의된 절차에 따라 PCC 및 +탑재체 소유자에게 지체 없이 통보 +관련 외부 법령 +[NIS2 Directive / NIS2 COMMISSION IMPLEMENTING REGULATION] +‌NIS2 지침은 유럽연합 전역에서 높은 공동 사이버보안 수준을 달성하기 위해 제정된 법령으로, 기업이 +유럽연합(EU) 시장에 진출하거나 해당 시장의 고객에게 서비스를 제공할 경우, EU의 NIS2 지침(Directive +(EU) 2022/2555)의 규제 대상이 된다. + +## I. 사고 보고 원칙 + + +## 1. 보고 시점 + +‌사고 발생 통지 기한은 지침의 규정에 따라 중대 사고가 발생했다는 ‘인식 시점’을 기준으로 정해진 기한 +내에 보고해야 한다. +• ‌인식 시점의 정의: 의심스러운 이벤트에 대한 초기 평가 후, 중대 사고가 발생했다는 합리적인 확실성을 +갖게 된 시점 +보고 유형 +보고 기한 +보고 내용 +조항 +1단계: +조기 경고 +부당한 지체 없이, 반드시 +24시간 이내 +해당 사건이 불법적이거나 악의적 행위로 +의심되는지, 또는 대외적인 영향을 줄 수 +있는지를 표시 +Article +23(4)(a) +2단계: +사고 통지 +부당한 지체 없이, 반드시 +72시간 이내 +조기 경고 정보 갱신, 심각성과 영향을 포함한 +초기 평가 및 가능한 경우 침해 지표(IoC) 제시 +Article +23(4)(b) +3단계: +중간 보고 +CSIRT 또는 관할 당국의 +요청 시 +관련 상태 변화에 대한 업데이트 +Article +23(4)(c) +4단계: +최종 보고 +72시간 내 통지 제출 후 +1개월 이내 +상세한 사건 설명, 위협 유형/근본 원인, +적용/진행 중인 완화 조치, 대외적인 영향(해당 +시) 포함 +Article +23(4)(d) + +--- + +146 | 우주 보안 모델 해설 및 적용사례집 + +## 2. 중대한 사고 판단 시점 및 기준 (General Significance Criteria) + +보고 의무가 발생하는 ‘중대한 사고(Significant Incident)’의 판단 기준은 아래와 같다. +구분 +중대 사고 발생 기준 +정량적 기준 +조항 +재정적 손실 +해당 엔티티에 직접적인 손실을 +일으키거나 일으킬 수 있는 경우 +EUR 500,000 또는 직전 +연도 총 매출액의 5% 중 낮은 +금액을 초과 +Article +3(1)(a) +기밀 유출 +해당 엔티티의 영업 비밀 유출을 +일으키거나 일으킬 수 있는 경우 +영업 비밀 유출 여부 +Article +3(1)(b) +인명 피해 +자연인의 사망 또는 건강에 상당한 손상을 +일으키거나 일으킬수 있는 경우 +사망 또는 상당한 손상 +Article +3(1)(c, d) +운영 중단 +성공적이고 악의적인 것으로 의심되는 +네트워크 및 정보 시스템에 대한 무단 +접근이 심각한 운영 중단을 일으킬 수 있는 +경우 +무단 접근 및 심각한 운영 중단 +가능성 +Article +3(1)(e) + +## 3. 보고 주체 및 대상 + +• ‌보고 주체: NIS2의 적용을 받는 관련 엔티티 +• ‌보고 대상: 사고 통지와 관련하여 CSIRTs 또는 해당되는 관련 당국 과 통신 계획을 수립해야 한다. + +## 4. 위반 시 제재 + +제재 내용 +구분 +금액/범위 +조항 +중대한 사고 통지 지연 또는 +누락 시 +필수 +기관 +최대 연간 매출의 2% 또는 EUR 10,000,000 +중 높은 금액 (회원국별 상한 조정 가능) +Article +34(4) +중요 +기관 +최대 연간 매출의 1.4% 또는 EUR 7,000,000 +중 높은 금액 (회원국별 상한 조정 가능) +Article +34(5) +※ NIS2는 우주 산업 부문을 필수 기관으로 지정하고 있음 + +## II. GSaaS (Ground Segment as a Service) 우주 기업의 사고 대응 + +‌클라우드 서비스, 데이터 센터, 또는 관리 서비스를 제공하는 GSaaS 형태일 경우, 다음의 기준을 충족하면 +중대 사고로 간주된다. + +--- + + +## 제3장 우주 보안모델 해설 | 147 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +서비스 유형 +사고 유형 +(중대성 기준) +정량적 기준 +(기간 및 범위) +출처 조항 +클라우드 컴퓨팅 +서비스 제공자 +(Cloud +Computing) + +## 1. 서비스 이용 불가 + +30분 초과 +Article 7(a) + +## 2. 가용성 제한 + +EU 내 사용자 중 5% 초과 또는 1백만 명 +중 작은 수에게 1시간 초과 동안 영향 +Article 7(b) + +## 3. 악성 데이터 침해 + +악의적인 행위의 결과로 데이터의 무결성, +기밀성 또는 진정성이 침해된 경우 +Article 7(c) +데이터 센터 서비스 +제공자 +(Data Centre) + +## 1. 서비스 이용 불가 + +발생 +Article 8(a) + +## 2. 가용성 제한 + +1시간 초과 지속 +Article 8(b) + +## 3. 물리적 접근 침해 + +데이터 센터에 대한 물리적 접근이 침해된 +경우 +Article 8(d) +관리 서비스 제공자 +(MSP/MSSP) + +## 1. 서비스 이용 불가 + +30분 초과 +Article 10(a) + +## 2. 가용성 제한 + +EU 내 사용자 중 5% 초과 또는 1백만 명 +중 작은 수에게 1시간 초과 동안 영향 +Article 10(b) + +## III. 우주 공급망 관련 기업 (위성/발사체 제조사) + +‌우주 공급망의 위성/발사체 제조사로서 EU의 다른 엔티티(예: 위성 운영사)에 ICT 제품이나 서비스를 +공급하는 공급망 기업일 경우, 사고 보고 의무는 다음과 같이 구분된다. + +## 1. 제조사 자체의 중대 사고 + +‌제조사 자체의 네트워크 및 정보 시스템에 발생한 사고가 위에 명시된 일반 기준 (I-1) 중 하나를 충족하는 +경우, 중대 사고로 간주하여 NIS2 보고 의무를 이행해야 한다. + +## 2. 공급망 관점에서의 통지 의무 (Supply Chain) + +‌제조사(공급업체/서비스 제공업체)가 고객인 관련 엔티티(Relevant Entity)에게 제공하는 제품이나 +서비스와 관련된 사고 발생 시, 계약상의 통지 의무를 준수해야 한다. +구분 +통지 대상 +통지 기한 및 의무 +계약상 의무 +서비스/제품을 구매한 +관련 고객 +공급업체 및 서비스 제공업체는 고객의 네트워크 및 정보 시스템 +보안에 위험을 초래하는 인시던트를 지체 없이 (without undue +delay) 통지할 의무를 계약서에 명시해야 함 +[DFARS 252.204‑7012] +‌DFARS(DOD Federal Acquisition Regulation Supplement)는 미국 국방부(DoD) 조달 계약자가 반드시 +따라야하는 법적 효력을 가진 규정으로, 사이버 보안 요구사항과 계약 조건을 명확히 규정한다. DFARS +252.204-7012, 7019, 7020 등에서는 계약자의 NIST SP 800-171 준수 의무를 명시하고 있다. NIST SP +800-171은 비연방 시스템에서 CUI(Controlled Unclassified Information)를 보호하기 위한 기술적 보안 +지침으로 DFARS로 인해 강제되는 기준이 된다. +‌CMMC는 NIST SP 800-171의 110개 보안 통제 구현 여부를 검증하기 위한 평가·인증 프레임워크로, +DoD는 향후 계약 과정에서 CMMC 인증을 입찰 자격 요건으로 적용할 계획이다. 즉, 미국 방위산업 공급망에 +참여하기 위해 CMMC 인증을 준비하는 기업(하청업체 포함)은 DFARS에서 규정한 사고보고 의무 역시 함께 +준수해야 한다. + +--- + +148 | 우주 보안 모델 해설 및 적용사례집 + +## 1. 보고 시점 및 대상 + +• ‌보고 시점: 사이버 사고 발견 후 72시간 이내 +• ‌보고 대상: DC3 DCISE(미국방부 산하 사이버 사고 대응 기관)을 통해 온라인 보고 +• ‌보존 의무: 사고 관련 시스템 이미지 및 네트워크 데이터 90일간 보존 +※ ‌사이버 사고를 미국방부에 보고하려면 반드시 DoD 승인 Medium Assurance Certificate 인증서를 +보유해야 함 +- ‌사이버 사고 보고 시스템에 안전하게 접근하고, 사고 정보를 암호화된 방식으로 제출하기 위한 디지털 +신원 인증 수단 +- ‌DoD에서 승인한 외부 인증기관(ECA: External Certification Authority)에서 발급 + +## 2. 보고 대상 판단 기준 + +DFARS 252.204‑7012에서 규정하는 보고 대상 판단 기준은 다음과 같다. +구분 +보고 대상 판단 기준 +조항 +기밀 유출 +보호되고 있는 방위 정보의 무단 접근, 유출, 변경, 파괴, 손실, 복사 등이 +발생하거나 발생 가능성이 있는 경우 +(c)(1) +운영 중단 +계약자가 수행하는 Operationally Critical Support(정부가 지정한 군사 +작전 수행에 필수적인 물자 또는 서비스)에 영향을 미치는 사이버 사고 +(c)(1) +시스템 침해 +보호 대상 국방 정보를 처리, 저장 또는 전송하는 시스템에 대한 침해 또는 +손상 +(c)(1) +악성코드 발견 +사이버 사고와 관련된 악성 소프트웨어를 발견하고 격리한 경우 +(d) + +## 3. 위반 시 제재 + +‌DFARS 조항 자체는 특정 처벌을 명시하지 않으며, 계약기관이 상황에 따라 적절한 조치를 결정한다. +계약기관은 조항을 위반할 경우 아래의 제재를 적용할 수 있다. +구분 +제재 조치 +계약적 제재 +계약 불이행 시 지급금 보류 +사업 시스템/계약자 구매 시스템 승인 거부 +향후 계약 발주 거부 +향후 계약 옵션 행사 거부 +과거 성과 평가 부정적 기록 +작업 중단 명령(Stop Work Order) 발행 +시정 요구 통지(Cure Notice) 발행 +이유 제출 요청(Show Cause Notice) 통지 +계약 해지 절차 고려 +계약자가 비응답(Non-Responsive)으로 판단 +시정조치 요청(Corrective Action Request, CAR) 발행 +행정·사법적 +제재 +계약 참가 자격 정지 및 입찰 제한 +민사 책임 또는 손해배상 청구 +형사 책임 추궁 또는 형사 처벌 + +--- + + +## 제3장 우주 보안모델 해설 | 149 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ CMMC +• ‌IR.L2-3.6.2 사고 보고 : 조직 내부 및 외부의 지정된 담당자 및/또는 당국에 사건을 추적, 문서화하고 +보고한다. +⊙ K-RMF +• ‌IR-7 사고 보고 : +1. ‌사고를 인지한 인원에게 [조직이 지정한 시간] 내에 해당 기관의 사고대응 부서에 보고(신고)하도록 +요구해야 한다. + +## 2. 사고대응 부서가 사고를 [조직이 지정한 기관]에게 보고(신고)하도록 요구해야 한다. + +⊙ NIS2 +• ‌3.3 이벤트 보고 : 관련 기관은 직원 및 고객이 의심스러운 사건을 신고할 수 있는 절차를 마련해야 한다. +⊙ ISMS-P +• ‌2.11.1 사고 예방 및 대응체계 구축 : 보안사고 및 개인정보 유출 등을 예방하고 사고 발생 시 신속하고 +효과적으로 대응할 수 있도록 내·외부 침해시도의 탐지·대응·분석 및 공유를 위한 체계와 절차를 수립하고, +관련 외부기관 및 전문가들과 협조체계를 구축하여야 한다. + +--- + +150 | 우주 보안 모델 해설 및 적용사례집 +제7절 +인원 보안(PS) +PS-01 +인원보안 +항목 내용 +직원 고용 시 배경 검사를 시행하고, 보직 변경 또는 퇴직 시 시스템 접근 권한을 +검토·변경·삭제해야 하며, 기업의 보안정책 위반 시 징계 절차를 수립해야 한다. +목적 +인력 변동 과정에서 발생할 수 있는 내부자 위협을 통제하고, 신뢰할 수 없는 +인력이 민감 시스템에 접근하는 것을 방지함으로써 내부 정보 유출과 무단 접근 +위험을 최소화하기 위함이다. +주요 +확인사항 +y ‌직원 채용 시 중요 정보에 접근하는 인력에 대해 직무의 위험 수준을 고려하여 +채용 전 배경 확인 절차를 수립·이행하는가? +y ‌퇴직·전보·직무 변경 시 정보보안 책임을 명확히 하고, 접근 권한 회수 및 자산 +반납 절차를 이행하는가? +y ‌임직원 및 협력업체 직원의 보안 정책을 위반에 대해 징계 기준 및 후속 조치 +절차를 수립·운영하는가? +세부 설명 +⊙ ‌직원 채용 시 중요 정보에 접근하는 인력에 대해 직무의 위험 수준을 고려하여 채용 전 배경 확인 +절차를 수립·이행한다. +▶ ‌우주기업은 주요 시스템에 대한 접근 권한을 부여하기 전에 배경 검사를 수행 +• ‌우주 자산의 높은 가치를 고려할 때, 우주기업은 임무 운영 센터 및 탑재체 통제 센터 인력에 대해 +정기적인 배경 검사를 고려 +▶ ‌배경 검사는 관련 개인정보 보호, 고용 관련 법률을 고려하여 수행되어야 하며, 다음 사항을 +포함할 수 있음 +• ‌적절한 추천서(업무 및 개인 추천서 등)의 확보 +• ‌지원자의 이력서 완전성 및 정확성 검증 +• ‌주장하는 학력 및 전문 자격 확인 +• ‌독립적인 신원 확인(예: 여권 또는 권한있는 기관에서 발급한 문서) +▶ ‌배경 검사의 대상, 범위 및 절차는 직무의 위험도를 고려하여 차등 적용하며, 검사 결과는 권한 +부여의 기초 자료로 활용해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 151 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌특정 정보보안 업무에 채용할 경우, 후보자가 해당 보안 역할 수행에 필요한 역량을 갖추었는지, +특히 해당 역할이 조직에 중대한 경우 신뢰할 만한 인물인지 확인해야 함 +⊙ ‌퇴직·전보·직무 변경 시 정보보안 책임을 명확히 하고, 접근 권한 회수 및 자산 반납 절차를 +이행한다. +▶ ‌퇴직, 전보 또는 직무 변경 이후에도 유효해야 하는 정보보안책임과 의무를 정의해야 함 +• ‌기밀정보, 지적재산권, 비밀유지 계약에 포함된 책임 등 +• ‌퇴직 이후에도 유효한 책임과 의무를 개인의 고용 조건, 계약서 또는 협약에 명시해야 함 +• ‌퇴직, 전보 또는 직무 변경하는 개인이 가진 보안 역할 및 책임을 파악하여 다른 개인에게 +인계해야 함 +• ‌변경사항 및 운영 절차를 관련 인력, 기타 이해관계자(예: 고객, 공급업체)에게 전달해야 함 +▶ ‌퇴직, 전보 또는 직무 변경 발생으로 인하여 정보 및 관련 자산에 접근할 필요가 없는 경우, +접근권한을 신속히 수정·제거해야 함 +• ‌퇴직, 전보 또는 직무 변경 인력에 대해 직무상 반드시 필요한 최소 권한만 남기고, 특히 지상 +구간내의 중요 시스템과 해당 인력의 단말 간에 정보 흐름을 논리적으로 격리하여 무단 데이터 +접근을 신속히 차단 +- ‌예: 중요 임무 데이터 접근 권한을 읽기 권한으로 즉시 강등하거나, 해당 PC와 MOC/PCC +내부망과의 통신 차단 +• ‌물리적 및 논리적 접근 권한은 제거·회수·교체 등을 통해 신속하게 조정해야 함 +- 예: 열쇠, 인증 정보, ID 카드 등을 제거·회수·교체 +▶ ‌퇴직, 전보 또는 직무 변경 시 소유하고 있는 조직의 모든 자산을 회수하는 절차를 수립해야 함 +• ‌직원 및 기타 이해당사자가 조직의 장치를 구매하거나 개인 장치를 사용하는 경우, 해당 장치에서 +관련 정보가 모두 식별되어 조직으로 안전하게 이전되고 장치에서는 안전하게 삭제해야 함 +• ‌퇴직 예정인 직원이 퇴직 시까지 우주 임무 기밀 정보 등 관련 정보를 무단 복사하지 못하도록 +데이터 유출 방지(DLP) 보호 조치를 적용하여 통제해야 함 +• ‌반환 대상인 모든 정보 및 기타 관련 자산을 명확히 식별하고 문서화해야 함 +- ‌예: 사용자 단말기, 휴대용 저장장치, 정보시스템 및 물리적 문서 보관소용 인증 +하드웨어(기계식 열쇠, 물리적 토큰, 스마트 카드), 정보의 물리적 복사본 +▶ ‌인사 변동 발생 시, 기존의 접근권한을 삭제하고 변동된 업무에 맞는 접근권한 및 인증 정보를 +할당 +⊙ ‌임직원 및 협력업체 직원의 보안 정책을 위반에 대해 징계 기준 및 후속 조치 절차를 수립·운영해야 +한다. + +--- + +152 | 우주 보안 모델 해설 및 적용사례집 +▶ ‌임직원 및 협력업체 직원이 법적 의무 또는 내부 보안 정책을 위반한 경우에 적용할 수 있는 징계 +기준 및 절차를 공식적으로 수립하고 문서화해야 함 +▶ ‌보안 정책 위반이 실제로 발생했음을 확인한 뒤 징계 절차를 시작해야 하며, 다음과 같은 요소를 +고려하여 단계적인 대응을 제공해야 함 +• ‌위반의 성격(누가, 무엇을, 언제, 어떻게)과 우주 임무의 연속성 및 안전성 영향을 포함한 위반의 +심각성 및 그 결과 +• ‌위반이 의도적(악의적)이었는지, 아니면 비의도적(실수)이었는지 +• ‌해당 위반이 최초 위반인지, 반복 위반인지 +• ‌위반자가 적절한 교육을 받았는지 여부 +▶ ‌징계 결정 후에는 인사 조치 절차와 연계하여 시스템 접근 권한 변경/취소, 자산 회수 등 필요한 +후속 조치를 지체 없이 이행해야 함 +▶ ‌징계 기준 및 절차를 모든 임직원에게 연 1회이상 인지시키고, 징계 결정 및 관련 후속 조치 +이력은 기록으로 유지·관리해야 함 +▶ ‌정보보안에 대한 책임과 의무를 충실히 이행한 경우, 정보보안을 장려하고 긍정적 행동을 +촉진하기 위해 보상 방안을 고려할 수 있음 +관련 기준 +⊙ CMMC +• ‌PS.L2-3.9.1 개인 검사 : CUI가 포함된 조직 시스템에 대한 액세스를 승인하기 전에 개인을 선별한다. +• ‌PS.L2-3.9.2 인사 조치 : 해고 및 전근과 같은 인사 조치 중 및 이후에 CUI가 포함된 조직 시스템이 +보호되도록 보장한다. +⊙ K-RMF +• ‌PS-2 신원조사 : + +## 1. 시스템 접근권한 부여 전 해당 인원을 대상으로 신원조사를 실시해야 한다. + +2. [필요한 경우와 조직이 지정한 주기]마다 해당 인원의 신원조사를 다시 실시해야 한다.” +• ‌PS-4 보직변경 : + +## 1. 보직변경 후에도 시스템/시설에 대한 논리적/물리적 접근인가를 유지할지 검토해야 한다. + +2. [조직이 지정한 시간] 내에 [보직변경 시 수행할 조치]를 수행해야 한다. + +## 3. 보직변경으로 인한 운영 요구사항의 변화에 따라 접근인가를 수정해야 한다. + +4. [조직이 지정한 시간] 내에 [조직이 지정한 직책]에게 위 사항을 보고(통보)해야 한다. +⊙ NIS2 +• ‌10.1 인적 보안 : 관련 기관은 직원 및 직접 공급업체·서비스 제공업체가 기관의 보안 정책에 따라 자신의 +책임을 이해하고 성실히 이행하도록 보장하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 153 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌10.2 배경 확인 : 관련 기관은 필요 시 역할·책임·권한에 따라 직원 및 직접 공급업체·서비스 제공업체의 +배경을 검증할 수 있도록 하여야 한다. +• ‌10.3 고용 종료 또는 직무 변경 절차 : 관련 기관은 직원의 퇴직 또는 직무 변경 이후에도 유효한 네트워크 +및 정보시스템 보안 책임과 의무가 계약상 정의되고 준수되도록 하여야 한다. +• ‌10.4 징계 절차 : 관련 기관은 네트워크 및 정보시스템 보안 정책 위반에 대한 징계 절차를 +수립·전파·유지하여야 하며, 해당 절차는 관련 법령·계약·업무 요건을 고려하여야 한다. +• ‌12. 5 고용 종료 시 자산 반납·삭제 : 관련 기관은 직원 퇴직 시 보관 자산을 반납·삭제·회수하고 이를 +문서화하며, 불가능한 경우 해당 자산의 네트워크·정보시스템 접근을 차단하여야 한다. +⊙ ISMS-P +• ‌2.2.5 퇴직 및 직무변경 관리 : 퇴직 및 직무변경 시 인사·정보보호·개인정보보호·IT 등 관련 부서별 +이행하여야 할 자산반납, 계정 및 접근권한 회수·조정, 결과확인 등의 절차를 수립·관리하여야 한다. + +--- + +154 | 우주 보안 모델 해설 및 적용사례집 +PS-02 +보안인식 교육 훈련 +항목 내용 +직무별 전문성을 확보할 수 있도록 인식 제고 활동 및 교육훈련 계획을 +수립·시행해야 한다. +목적 +모든 구성원이 자신의 직무와 관련된 보안 위험과 책임을 명확히 이해하여 보안 +사고를 예방하고, 직무별로 요구되는 전문적인 보안 대응 역량을 강화하기 +위함이다. +주요 +확인사항 +y ‌모든 구성원에게 보안 위험을 인식시키기 위한 인식 제고 활동 및 주요 +직무자를 위한 전문 보안 교육을 시행하고 있는가? +세부 설명 +⊙ ‌모든 구성원에게 보안 위험을 인식시키기 위한 인식 제고 활동 및 주요 직무자를 위한 전문 보안 +교육을 시행해야 한다. +▶ ‌교육 목표, 내용, 방법, 이수 기준, 평가 기준 등을 명확히 규정한 공식 교육 계획을 체계적으로 +수립하고 경영진의 승인을 받아야 함 +• ‌교육 유형: 임직원 인식 제고 교육, 주요 직무자(특권 사용자) 전문 교육, 수탁자 교육 등 +• ‌교육 계획: 교육 목적, 교육 대상, 교육 내용, 교육 방법, 교육 일정, 교육 시간 등(사업규모, +개인정보 보유 수, 업무 성격, 교육 대상, 교육 유형 등에 따라 차등화) +• ‌교육 승인: 교육 계획을 검토, 승인하여 계획에 따라 이행될 수 있도록 예산 배정 지원 등 필요한 +행정적 조치를 완료해야 함 +▶ ‌모든 임직원과 협력업체 직원을 대상으로 연간 교육 계획에 따라 연 1회 이상 정기적으로 +인식제고 활동을 시행해야 함 +• ‌대상 범위: 정보자산에 직·간접적으로 접근하는 임직원, 임시직원, 협력업체 직원 등 모든 인력 +- 특히 위성 탑재체·지상국 통제 시스템 등 우주 임무 관련 인력을 필수로 포함해야 함 +• ‌교육 내용: 임직원 및 관련 협력업체 직원이 자신의 책임과 그 책임을 수행하는 방법을 +인지하도록 하는 것을 목표로 하며, 아래의 내용을 포함 +- 조직 전반에 걸친 경영진의 보안에 대한 의지 +- ‌정보보안 정책, 표준 법률, 계약 및 협약을 포함한 적용가능한 보안 규칙 및 의무에 대한 이해와 +준수 필요성 +- 본인의 행위로 인해 발생할 수 있는 보안사고에 대한 책임 +- ‌임직원 및 협력업체 직원이 준수해야 하는 기본적인 정보보안 절차(예: 보안사고 보고 절차 및 +기본통제(비밀번호 보안 등)) + +--- + + +## 제3장 우주 보안모델 해설 | 155 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +- ‌추가 정보 및 조언을 얻을 수 있는 연락처 및 자원, 추가 정보 보안 인식 자료 +• ‌불참자 및 추가 교육: +- ‌출장, 휴가, 업무 등으로 인하여 교육에 참석하지 못한 인력에 대한 추가 교육 방법을 마련하여 +시행해야 함 (예: 불참자 대상 추가교육, 전달 교육, 온라인 교육 등) +- ‌내부 규정 및 절차의 중대한 변경, 조직 내·외부 보안사고 발생, 관련 법규 변경 등 발생 시 +이에 대한 추가 교육을 수행해야 함 (다만 사안이 중요하지 않을 경우에는 게시판 공지, 이메일 +안내, 책자 배포 등으로 대체) +▶ ‌주요 직무자가 자신의 직무와 책임에 따른 보안 지식을 습득할 수 있도록 역할에 맞는 보안 +교육을 시행해야 함 +• ‌관련 직무자: IT 직무자, 정보보호 최고책임자, 정보보호 직무자, MOC/PCC 시스템 관리자 등 +• ‌교육 내용: 역할과 책임에 부합하는 맞춤형 전문 교육을 시행해야 하며, 명령 링크 관련 민감 정보 +보호 등 직무별 전문 지식을 포함해야 함 +• ‌교육 과정은 콘퍼런스·세미나·워크숍 참가, 교육 전문기관 위탁 교육, 외부 전문가 초빙을 통한 +내부 교육 등을 활용할 수 있음 +▶ ‌내부자 위협 대응 교육을 시행해야 함 +• ‌모든 임직원 및 관리자에게 내부자 위협 징후 식별, 비인가 행위 기준 등을 위한 교육을 제공해야 +함 +• ‌내부자 위협 징후 식별 절차 예시 +- ‌징후 정의 및 목록화: 비정상적인 접근 시도, 불필요한 민감 정보 조회, 반복적인 보안 정책 +위반, 업무 시간과 맞지 않는 시스템 활동 등 +- ‌모니터링: 시스템 로그, 명령 링크 사용 기록, 관제 데이터 분석, SOAR 등 자동화 도구 활용 +- ‌식별 시 보고: 이상 징후 발견 시 보안 담당자 또는 관리자에게 즉시 보고, 관련 로그 기록 및 +초기 대응 조치 문서화 +- ‌후속 조치: 필요 시 권한 제한, 포렌식 조사, 추가 모니터링 및 예방 교육 강화 +- ‌정기 검토: 절차와 징후 목록을 주기적으로 검토·업데이트 +▶ ‌교육 시행에 대한 기록을 남기고 교육 효과와 적정성을 평가하여 다음 교육 계획에 반영해야 함 +• ‌교육시행 후 교육 공지, 교육자료, 출석부 등과 같은 기록을 남기고, 미리 마련된 평가기준에 따라 +설문 또는 테스트 등을 통하여 교육 내용의 적절성과 효과성 평가 +• ‌교육평가 결과 내용에서 도출된 개선점에 대한 대책을 마련하고 차기 교육 계획 수립 시 반영 + +--- + +156 | 우주 보안 모델 해설 및 적용사례집 +관련 기준 +⊙ CMMC +• ‌AT.L2-3.2.1 역할 기반 위험 인식 : 조직 시스템의 관리자, 시스템 관리자 및 사용자에게 해당 활동과 +관련된 보안 위험과 해당 시스템의 보안과 관련된 정책, 표준 및 절차를 알려야 한다. +• ‌AT.L2-3.2.2 역할 기반 교육 : 직원들이 할당된 정보 보안 관련 업무와 책임을 수행할 수 있도록 교육을 +받도록 한다. +• ‌AT.L2-3.2.3 내부 위협 인식 : 내부 위협의 잠재적 지표를 인식하고 보고하는 방법에 대한 보안 인식 +교육을 제공한다. +⊙ K-RMF +• ‌AT-1 보안인식 교육·훈련 : 다음에 해당되는 경우 시스템 사용자에게 보안인식 향상을 위한 교육을 +시행해야 한다. + +## 1. 시스템 신규사용자 등록 시 + + +## 2. 시스템 변경 시 + +3. [재교육 주기] 도래 시 +• ‌AT-1-2 보안인식 교육·훈련 | 내부자 위협 : 보안인식 향상을 위한 교육에 내부자 위협 징후를 식별하고 +보고하는 내용을 포함해야 한다. +• ‌AT-2 직책 기반 보안 교육·훈련 : 다음에 해당되는 경우 업무 관련자에게 직무수행에 필요한 보안교육을 +시행해야 한다. + +## 1. 시스템에 대한 접근 권한을 승인받은 인원의 최초 직무수행 전 + + +## 2. 시스템 변경 시 + +3. [재교육 주기] 도래 시 +⊙ NIS2 +• ‌8.1 사이버 인식 제고 : 관련 기관은 임직원 및 경영진, 직접 공급업체·서비스 제공업체가 보안 위험을 +인지하고 사이버보안의 중요성을 이해하며 사이버 위생 관행을 준수하도록 하여야 한다. +• ‌8.2 보안 교육 훈련 : 관련 기관은 보안 관련 역량이 필요한 직무를 수행하는 직원들을 식별하고, +정기적으로 네트워크 및 정보시스템 보안 교육을 실시하여야 한다. +⊙ ISMS-P +• ‌2.2.4 인식제고 및 교육훈련 : 임직원 및 관련 협력업체 직원이 조직의 관리체계와 정책을 이해하고 +직무별 전문성을 확보할 수 있도록 연간 인식제고 활동 및 교육훈련 계획을 수립·운영하고, 그 결과에 따른 +효과성을 평가하여 다음 계획에 반영하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 157 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제8절 +물리보안(PE) +PE-01 +물리적 접근통제 +항목 내용 +시스템이 설치·운영되고 있는 시설의 출입을 통제하고 모니터링하며 물리적 +접근 이력을 주기적으로 검토해야 한다. +목적 +주요 우주 시스템 및 정보 자산이 위치한 시설에 대한 비인가 접근을 엄격히 +통제하고 접근 활동의 책임성을 보장하여 물리적 보안 환경 및 자산 무결성을 +확보하기 위함이다. +주요 +확인사항 +y ‌인가된 사용자만 시설 출입을 허용하고, 접근 기록을 유지하며 모니터링 +시스템을 운영하는가? +y ‌시스템이 설치·운영되는 물리적 시설 및 인프라가 무단 접근·침입으로부터 +보호되고 지속적으로 모니터링되는가? +y ‌방문객은 반드시 직원과 동행하며, 모든 접근 이력을 보존하고 방문객 활동을 +모니터링하는가? +y ‌물리적 접근 통제 장치를 목록화하여 관리하고, 장치에 대한 접근을 +제한하는가? +세부 설명 +⊙ ‌인가된 사용자만 시설 출입을 허용하고, 접근 기록을 유지하며 모니터링 시스템을 운영해야 한다. +▶ ‌우주기업의 시스템·장치·운영 환경에 대한 물리적 접근은 반드시 승인된 인원에게만 허용해야 +함 +• ‌물리적·환경적 위협으로부터 주요 정보, 문서, 주요 설비 및 시스템 등을 보호하기 위하여 +통제구역, 제한구역, 접견구역 등 물리적 보호구역 지정기준을 마련해야 함 +• ‌우주기업의 주요 정보를 저장·처리·전송하는 시스템 및 장치가 위치한 곳을 통제구역으로 +지정해야 함 + +--- + +158 | 우주 보안 모델 해설 및 적용사례집 +물리적 보호구역(예시) +y ‌통제구역 : 출입자격이 최소인원으로 유지되며 출입을 위하여 직원 카드와 같은 출입증 이외의 +추가 절차가 필요한 곳(예: 전산실, 장비실, 관제실, 연구실 등) +y ‌제한구역 : 비인가 접근을 방지하기 위하여 별도의 출입통제 장치 및 감시시스템이 설치된 장소로 +출입 시 직원카드와 같은 출입증이 필요한 장소(예: 부서별 사무실 등) +y ‌접견구역 : 외부인이 별다른 출입증 없이 출입이 가능한 구역(예: 접견장소 등) +출처 : ISMS-P 인증기준 안내서(KISA) +- 통제구역은 통제구역임을 표시하여 비인가자의 출입 시도를 원천적으로 차단 +• ‌보호 구역에는 물리적 접근 권한을 가진 인원만이 출입할 수 있도록 내·외부자 출입통제 절차를 +마련하고, 출입 가능한 인원 현황을 관리 +- ‌출입절차 : 출입신청, 책임자 승인, 출입권한 부여 및 회수, 출입내역 기록, 출입기록 정기적 +검토 등 +- ‌출입통제 장치 설치 : 비밀번호 기반, ID카드 기반, 생체정보 기반 등 +- ‌출입통제 절차 수립·운영 : 출입자 등록·삭제, 출입권한 관리, 방문자 관리, 출입대장 관리 +▶ ‌물리적 접근 기록은 모든 접근 행위에 대해 작성·유지되어야 함 +• ‌수기 기록 방식: 직원·방문객의 출입 및 퇴실 서명을 통해 기록해야 함 +• ‌자동 기록 방식: 배지·카드 리더기 및 스마트카드 시스템 등을 활용해야 함 +• ‌혼합 기록 방식: 수기 기록과 자동 기록을 병행하여 운영할 수 있음 +• ‌로그는 모든 물리적 접근 지점을 포함해야 함 +- ‌건물 출입구 기록 +- ‌내부 통제구역(서버실, 장비실 등)의 접근 기록 +- ‌시스템이 위치한 물리 영역에 대한 접근 기록 +▶ ‌물리적 접근 로그를 정기적으로 검토·관리하고 감사 목적을 위해 활용되어야 함 +• ‌로그 관리 상태를 주기적으로 점검하고, 감사 증빙으로 활용 가능하도록 유지 +- ‌로그가 최신 상태로 유지 +- ‌방문객 기록이 누락 없이 관리되는지 검증 +- ‌감사 요구 시 제출 가능한 형태로 보관 +- ‌보안 사고 대응 시 출입 기록을 기반으로 사실 조사 + +--- + + +## 제3장 우주 보안모델 해설 | 159 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ ‌시스템이 설치·운영되는 물리적 시설 및 인프라가 무단 접근·침입으로부터 보호되고 지속적으로 +모니터링해야 한다. +▶ ‌물리적 시설은 승인되지 않은 접근·손상·침입으로부터 보호되고, 지속적인 감시 체계를 +기반으로 안전하게 관리되어야 함 +• ‌주요 물리적 진입 지점(출입구·창문·비상문 등)에는 잠금 장치를 설치하고 인가되지 않은 접근을 +차단해야 함 +• ‌보안 카메라(CCTV), 침입 탐지 센서, 알람, 경비 인력 등을 활용하여 시설 상태를 지속적으로 +감시해야 함 +• ‌출입 기록과 모니터링 로그를 정기적으로 검토하고 기록을 안전하게 저장해야 함 +▶ ‌전력·네트워크·통신 라인을 포함한 지원 인프라는 서비스 중단·변조·도청·무단 접근을 예방하기 +위해 보호 및 상시 모니터링 체계를 적용하여 운영되어야 함 +• ‌전력선, 네트워크 케이블, 통신 라인 등 주요 인프라 구간은 외부 접근으로부터 보호되어야 하며, +케이블은 덕트·트레이 등 물리적 보호 장치를 적용해야 함 +• ‌배선실은 잠금 장치로 보호하고 사용하지 않는 포트·잭·패널은 반드시 차단하여 악의적 연결을 +방지해야 함 +• ‌전력 및 네트워크 인프라의 변조·절단·도청 시도를 탐지할 수 있도록 센서 및 알람 시스템을 +활용해야 함 +• ‌지원 인프라에 대한 접근 이력 및 상태 모니터링 결과를 기록하고 이상 발생 시 즉시 대응해야 함 +⊙ ‌방문객은 반드시 직원과 동행하며, 모든 접근 이력을 보존하고 방문객 활동을 모니터링해야 한다. +▶ ‌방문객은 시설 내에서 혼자 이동할 수 없으며, 항상 직원이 동행해야 하며, 동행하지 않은 +방문객은 제지해야 함 +▶ ‌방문객 식별 및 출입 통제 절차를 운영해야 함 +• ‌방문객은 반드시 식별 가능한 출입증을 착용해야 함 +▶ ‌방문객 출입 기록을 반드시 작성해야 하며, 안내 데스크에서 출입·퇴실을 기록해야 함 +▶ ‌무단 방문객이나 규정 위반 발생 시 즉시 물리적 보안 관련 부서에 보고하고, 사건 발생 후 개선 +조치를 수행하여 재발을 방지해야 함 +⊙ ‌물리적 접근 통제 장치를 목록화하여 관리하고, 장치에 대한 접근을 제한한다. +▶ ‌모든 물리적 접근 장치를 목록화하여 최신 상태로 유지해야 함 +• ‌열쇠, 자물쇠, 카드리더기, 출입증 등 포함해야 하며, 장치별 일련번호나 고유 식별 정보를 +기록해야 함 + +--- + +160 | 우주 보안 모델 해설 및 적용사례집 +• ‌신규 장치 발급 시, 지체없이 목록에 반영하며 퇴직·이직 시에도 회수 내역을 반영해야 함 +▶ ‌물리적 접근 장치는 잠금 장치가 있는 장소에 보관하며, 장치 분실·도난 시 즉시 보고 및 +대응해야 함 +▶ ‌물리적 접근 장치는 정기적으로 유지·보수해야 함 +• ‌자물쇠 교체, 카드 시스템 업데이트 +• ‌장치 이상 발생 시 즉시 교체·수리 +관련 기준 +⊙ CMMC +• ‌PE.L2-3.10.1 물리적 접근 제한[CUI 데이터] : 조직 시스템, 장치 및 해당 운영 환경에 대한 물리적 +접근을 승인된 개인으로 제한한다. +• ‌PE.L2-3.10.2 시설 모니터링 : 조직 시스템의 물리적 시설과 지원 인프라를 보호하고 모니터링한다. +• ‌PE.L2-3.10.3 방문객 안내 [CUI 데이터] : 방문객을 안내하고 방문객 활동을 모니터링한다. +• ‌PE.L2-3.10.4 물리적 접근 로그[CUI 데이터] : 물리적 접근에 대한 감사 기록을 유지 관리한다. +• ‌PE.L2-3.10.5 물리적 접근 관리[CUI 데이터] : 물리적 접근 장치를 제어하고 관리한다. +⊙ K-RMF +• ‌PE-1-3 물리적 접근인가 | 안내자 동행 없이 출입 가능한 인원 : 다음 중 하나라도 해당하지 않은 인원은 +시스템이 설치·운영되고 있는 시설에서 인솔 없이 출입할 수 없도록 해야 한다. + +## 1. 시스템에서 처리되는 모든 정보에 대한 비밀 취급 인가를 보유한 인원 + + +## 2. 시스템에서 처리되는 모든 정보에 대한 접근 권한을 보유한 인원 + + +## 3. 시스템에서 처리되는 모든 정보에 대한 접근 필요성이 인정되는 인원 + +4. [조직이 지정한 자격 증명]을 보유한 인원 +• ‌PE-2 물리적 접근통제 : +1. ‌[조직이 지정한 시스템이 설치·운영되고 있는 시설의 출입구]에 다음 각 호의 방식으로 출입을 통제해야 +한다. + +가. 시설 출입 전 접근인가를 확인해야 한다. 한다. + +나. ‌[조직이 지정한 물리적 접근통제 시스템/장치 그리고/또는 경계근무자]을 통해 출입을 통제해야 +한다. +2. ‌[조직이 지정한 시스템이 설치·운영되고 있는 시설의 출입구]에 대한 물리적 접근에 관한 이력을 +유지해야 한다. + +## 3. 공개적으로 허가된 시설일 경우 [조직이 지정한 보안 보호조치]를 통해 출입을 허용할 수 있다. + +4. ‌[조직이 지정한 방문자 인솔 및 모니터링이 요구되는 상황]에는 방문자를 인솔하고 활동을 모니터링해야 +한다. + +## 5. 시설 출입과 관련된 자재(예 : 열쇠, 패스워드 등)들을 안전하게 보호해야 한다. + +6. ‌시설의 [조직이 지정한 물리적 접근통제 장치] 목록을 [조직이 지정한 주기]마다 검토하고 최신화해야 +한다. + +--- + + +## 제3장 우주 보안모델 해설 | 161 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +7. ‌열쇠 분실, 패스워드 노출, 업무관련자 전출 및 퇴직, [조직이 지정한 주기] 도래 등이 발생되면 열쇠 또는 +패스워드를 변경해야 한다. +• PE-3 물리적 접근 모니터링 : +1. ‌시스템이 설치·운영되고 있는 시설에서 발생할 수 있는 물리적 보안사고를 식별하고, 대응하기 위해 +시설에 대한 물리적 접근을 모니터링해야 한다. + +## 2. 물리적 접근 이력을 [조직이 지정한 주기 또는 사고 발생 시] 검토, 확인해야 한다. + + +## 3. 검토 및 조사결과를 조직의 사고대응 역량과 통합하여 대응하여야 한다. + +⊙ ISMS-P +• ‌2.4.2 출입통제 : 보호구역은 인가된 사람만이 출입하도록 통제하고 책임추적성을 확보할 수 있도록 출입 +및 접근 이력을 주기적으로 검토하여야 한다. +• ‌ 2.4.3 정보시스템 보호 : 정보시스템은 환경적 위협과 유해요소, 비인가 접근 가능성을 감소시킬 수 있도록 +중요도와 특성을 고려하여 배치하고, 통신 및 전력 케이블이 손상을 입지 않도록 보호하여야 한다. +• ‌2.4.4 보호설비 운영 : 보호구역에 위치한 정보시스템의 중요도 및 특성에 따라 온도·습도 조절, 화재감지, +소화설비, 누수감지, UPS, 비상발전기, 이중전원선 등의 보호설비를 갖추고 운영절차를 수립·운영하여야 +한다. +• ‌2.4.5 보호구역 내 작업 : 보호구역 내에서의 비인가행위 및 권한 오·남용 등을 방지하기 위한 작업 절차를 +수립·이행하고, 작업 기록을 주기적으로 검토하여야 한다. + +--- + +162 | 우주 보안 모델 해설 및 적용사례집 +PE-02 +대체 근무장소 보안 +항목 내용 +대체 근무장소(재택, 출장지, 원격 사무실 등)에서 중요 정보에 대한 안전조치를 +시행한다. +목적 +대체 근무 환경에서도 중요 정보의 기밀성을 유지하고, 원격 접속으로 인한 보안 +위험을 최소화하기 위함이다. +주요 +확인사항 +y ‌대체 근무 환경에서 사용되는 보안 통제 기준을 정의하고, 근무 환경의 특성에 +따라 통제를 구분하여 운영하는가? +y ‌대체 근무 환경에서 사용되는 업무용 단말에 보안 통제를 적용하는가? +y ‌대체 근무 환경에서 내부 시스템에 접근하는 경우, 안전한 원격 접속 방식을 +사용하는가? +세부 설명 +⊙ ‌대체 근무 환경에서 사용되는 보안 통제 기준을 정의하고, 근무 환경의 특성에 따라 통제를 구분하여 +운영해야 한다. +▶ ‌대체 근무 환경은 업무 수행 위치 및 관리 수준에 따라 구분해야 함 +• ‌재택 근무: 임직원의 개인 주거지에서 기관 지급 단말을 사용하여 업무를 수행하는 환경 +• ‌출장지·공공장소: 호텔, 공항 등 불특정 다수가 이용하는 외부 환경 +• ‌원격 사무실: 회사가 지정하거나 계약을 통해 관리하는 외부 업무 공간 +▶ ‌모든 대체 근무 환경(재택, 출장지, 원격사무실)에 공통 적용되는 기본 보안 통제를 정의해야 함 +• ‌사용자 인증 및 접근 통제 +• ‌단말 보안 및 데이터 보호 +• ‌원격 접속 및 통신 보호 +• ‌보안 로그 및 접속 이력 관리 +▶ ‌근무 환경별로 물리적 통제 가능 수준과 네트워크 위험 수준을 고려하여 보안 요구사항을 다르게 +적용 +▶ ‌대체 근무 환경별 보안 통제 기준은 원격근무 보안 지침 또는 정보보호 정책에 문서화하여 +관리해야 함 +⊙ ‌대체 근무 환경에서 사용되는 업무용 단말에 보안 통제를 적용해야 한다. +▶ ‌단말 유형에 따른 보안 통제 기준을 구분 +• ‌기관 지급 단말(업무용 노트북·모바일) + +--- + + +## 제3장 우주 보안모델 해설 | 163 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +- ‌운영체제(OS) 및 주요 소프트웨어에 대해 자동 업데이트 및 최신 보안 패치를 강제해야 함 +- 내부 정보는 DRM을 이용해서 암호화해야 함 +- 관리자 권한은 보안·IT 담당자에 한해 제한적으로 부여해야 함 +- 보안 설정 변경 이력 및 단말 상태를 중앙에서 관리·점검해야 함 +• ‌개인 소유 단말(BYOD, Bring Your Own Device) +- ‌중요 정보의 로컬 저장을 제한하고, 웹 기반 업무 시스템 또는 가상 환경(VDI 등)으로 접근을 +제한해야 함 +- ‌내부 핵심 시스템에 대한 직접 접근은 허용하지 않거나, 접근 범위를 최소화해야 함 +- ‌조직이 허용한 최소 보안 요건(OS 버전, 패치 수준, 암호화 여부 등)을 충족하지 못할 경우 +업무 접근을 제한해야 함 +• ‌외부 단말 +- ‌원칙적으로 내부 시스템 접근을 금지하거나, 단기·한시적 접근만 허용해야 함 +- ‌접근이 필요한 경우 별도의 외부 전용 구간 또는 제한된 계정으로만 접속하도록 구성해야 함 +▶ ‌주요 업무(예: 위성 운용, 고객 제공 정보 등)의 경우, 기관 지급 단말에서만 접근을 허용해야 +하며 원격 접속 시 다중 인증(MFA)을 필수 적용 +⊙ ‌대체 근무 환경에서 내부 시스템에 접근하는 경우, 안전한 원격 접속 방식을 사용해야 한다. +▶ ‌원격 접속은 조직이 승인한 공식 접속 경로로만 허용 +• ‌내부 시스템 접근은 VPN, VDI 등 중앙 통제 가능한 방식만 허용 +▶ ‌승인되지 않은 원격 접속 시도를 탐지·차단할 수 있도록 비인가 IP, 비정상 접속 시도에 대한 +차단 규칙을 설정해야 함 +▶ ‌원격에서 내부 시스템 접속 시에는 다중 인증을 필수 적용 +▶ ‌출장지·공공장소 등 신뢰할 수 없는 네트워크 환경에서 내부 시스템에 접속하는 경우, VDI를 +이용하는 등 안전한 원격 접속 수단을 사용 +▶ ‌원격 단말이 내부망과 외부망 사이의 우회 경로(브릿지)가 되는 것을 방지하기 위해, 원격 접속 +시 내부망과 외부 인터넷이 동시에 연결되지 않도록 구성 + +--- + +164 | 우주 보안 모델 해설 및 적용사례집 +관련 기준 +⊙ CMMC +• ‌PE.L2-3.10.6 대체 작업 현장 : 대체 작업 현장에서 CUI에 대한 안전 조치를 시행한다. +⊙ K-RMF +• ‌PE-15 대체 근무장소 : + +## 1. 대체 근무장소 에 대하여 [조직이 지정한 보안통제항목]을 적용해야 한다. + + +## 2. 대체 근무장소 에 대한 보안통제항목 평가는 실질적이고 실현 가능하게 해야 한다. + +3. ‌보안사고 또는 문제가 발생하였을 때, [조직이 지정한 인원 또는 직책]과 통신할 수 있는 수단을 제공해야 +한다. + +--- + + +## 제3장 우주 보안모델 해설 | 165 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +PE-03 +보호설비 운영 +항목 내용 +보호구역에 위치한 정보시스템의 중요도 및 특성에 따라 온도·습도 조절, +화재감지, 소화설비, 누수감지, UPS, 비상발전기, 이중전원선 등의 보호설비를 +갖추고 운영절차를 수립·운영하여야 한다. +목적 +보호구역 내 중요 우주 시스템 및 인프라의 물리적 안전성과 가용성을 보장하기 +위해 환경적 위협 및 재난에 대비한 보호설비를 구축하고 체계적으로 운영하기 +위함이다. +주요 +확인사항 +y ‌보호설비(이중전원선, UPS, 비상발전기 등)의 운영 및 유지보수에 필요한 점검 +기준과 절차를 수립하여 주기적으로 점검하는가? +y ‌시스템 운영에 필요한 환경적 요구사항(온도, 습도, 화재, 누수 등)의 통제 +기준을 정의하고, 이를 유지하기 위한 감지·경보 시스템을 운영하는가? +세부 설명 +⊙ ‌보호설비(이중전원선, UPS, 비상발전기 등)의 운영 및 유지보수에 필요한 점검 기준과 절차를 +수립하여 주기적으로 점검한다. +▶ ‌보호구역에 위치한 정보시스템의 중요도 및 특성에 따라 온·습도 조절, 화재감지, 소화설비, +누수감지, 무정전 전원공급장치(UPS), 비상발전기, 이중전원선 등의 보호설비를 갖추고 +운영절차를 수립·운영해야 함 +▶ ‌외부 집적 정보통신시설에 위탁 운영하는 경우, 물리적 보호에 필요한 요구사항을 계약서에 +명시하고 운영 상태를 주기적으로 검토해야 함 +• ‌정보보호 관련 법규 준수, 화재, 전력 이상 등 재해·재난 대비, 출입통제, 자산 반출입 통제, +영상감시 등 물리적 보안통제 적용 및 사고 발생 시 손해 배상에 관한 사항 등 +• ‌집적정보통신시설의 책임보험 가입 여부(미가입 시 2천만원 이하의 과태료 부과) +▶ ‌시스템의 전원 장치 및 전원 케이블이 손상 및 파괴되지 않도록 보호해야 함 +• ‌물리적으로 조직이 지정한 거리만큼 떨어진 곳에 배치하고 이중화된 전원 케이블을 설치해야 함 +• ‌중요 시스템 구성요소에 자동 전압제어 기능을 사용해야 함 +▶ ‌상시전원의 정지 또는 장애 발생 시 시스템을 안전하게 정지하거나 전력 전환이 완료될 때까지 +단기간 전력을 공급할 수 있도록 무정전 전원공급장치(UPS)를 설치·운용 +• ‌상시전원 장기 중단에 대비하여, 조직의 운영 환경에 적합한 방식으로 시스템의 최소 운영능력을 +유지할 수 있는 비상 전원 수단을 확보 +- 임대 시설의 비상 전원 체계, 비상발전기, 외부 데이터센터(IDC)의 전원 이중화 설비 등 + +--- + +166 | 우주 보안 모델 해설 및 적용사례집 +• ‌비상 전원 설비를 직접 운용하는 경우, 조직이 지정한 주기에 따라 점검을 수행하고 식별된 +결함은 기간 내 시정 조치 +⊙ ‌시스템 운영에 필요한 환경적 요구사항(온도, 습도, 화재, 누수 등)의 통제 기준을 정의하고, 이를 +유지하기 위한 감지·경보 시스템을 운영한다. +▶ ‌시스템이 설치·운영되고 있는 시설의 온도와 습도를 조직이 지정한 수준으로 유지하고, 지정한 +주기마다 모니터링해야 함 +• ‌시설의 온도와 습도는 시스템별 운용환경 요구사항에 맞춰 조정 +- ‌예: 서버 10~32℃, 20~80%, 저장장치 16~32℃, 20~80%, 네트워크장비 5~40℃, +10~85% 등 +▶ ‌시스템 주장비가 설치, 운영되는 시설 또는 장소에 자동 온·습도 조절 장치와 부적합한 온도 및 +습도 변화를 감지 및 경보하는 장치를 설치해야 함 +▶ ‌독립적인 에너지원을 공급받는 화재 진압 및 감지 시스템을 시설 내에 설치하고 운영해야 함 +• ‌정전 또는 비상 탈출에 대비하여 시설 내 비상구 및 대피경로 등에 비상조명을 설치 및 운영해야 +함 +• ‌시스템 필수 기능을 유지하는데 필요한 시설 내 모든 구역에 비상조명을 설치하고 운영해야 함 +▶ ‌화재발생 시 긴급 대응을 위해 화재 감지 시스템과 화재 진압시스템을 구축하여 운영해야 함 +• ‌시설에 상시 근무자가 없을 경우 자동 화재 진압시스템을 설치 및 운용해야 함 +▶ ‌누수로 인한 시스템 손상 방지를 위해 시스템에 설치된 시설에 급수 일괄차단 또는 분리 차단 +밸브를 제공해야 함 +▶ ‌시스템 주변에 습기(물)이 감지되면 자동으로 지정된 직책(지휘통제실 당직자 등)에게 경보해야 +함 +관련 기준 +⊙ K-RMF +• ‌PE-7 전력 장비 및 케이블 : 시스템의 전원 장비 및 전원 케이블이 손상 및 파괴되지 않게 보호해야 한다. +• ‌PE-10 비상 전원 : 상시전원의 정지/장애 발생 시, 시스템을 안전하게 정지하거나 비상발전기로 전환하는 +동안 단기간 전력을 공급할 수 있는 무정전 전원공급장치(UPS)를 설치, 운용해야 한다. +• ‌PE-11 비상조명 : 정전 또는 비상 탈출에 대비하여 시설 내 비상구 및 대피경로 등에 비상조명을 설치 및 +운영해야 한다. +• ‌PE-12 화재 예방 : 독립적인 에너지원을 공급받는 화재 진압 및 감지 시스템을 시설 내 설치, 운영해야 +한다. +• ‌PE-13 온도/습도 통제 : + +--- + + +## 제3장 우주 보안모델 해설 | 167 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 + +## 1. 시스템이 설치·운영되고 있는 시설의 온도와 습도를 [조직이 지정한 수준]으로 유지해야 한다. + + +## 2. 시설의 온도와 습도를 [조직이 지정한 주기]마다 모니터링 해야 한다 + +⊙ ‌ISMS-P +• ‌2.4.4 보호설비 운영 : 보호구역에 위치한 정보시스템의 중요도 및 특성에 따라 온도·습도 조절, 화재감지, +소화설비, 누수감지, UPS, 비상발전기, 이중전원선 등의 보호설비를 갖추고 운영절차를 수립·운영하여야 +한다. + +--- + +168 | 우주 보안 모델 해설 및 적용사례집 +제9절 +위험평가 및 보안 평가(RA) +RA-01 +위험 평가 +항목 내용 +시스템 운영 및 정보의 처리·저장·전송으로 인해 발생하는 조직 운영(임무, 기능, +이미지, 평판 포함), 자산, 개인에 대한 위험을 주기적으로 평가해야 한다. +목적 +중요 우주 시스템 운영 및 정보 처리로 인해 발생하는 조직의 임무, 자산, 평판 +등에 대한 위험을 식별 및 평가하고 관리하여 보안 대응 역량을 확보하기 +위함이다. +주요 +확인사항 +y ‌우주기업은 위험관리체계를 마련하여 위험관리 방안을 수립하고 있는가? +y ‌우주기업은 조직운영·자산·개인에 대한 위험을 주기적으로 평가·처리하고 +있는가? +세부 설명 +⊙ ‌우주기업은 위험관리체계를 마련하여 위험관리 방안을 수립한다. +▶ ‌위험관리 방안 및 절차(수행 인력, 기간, 대상, 방법, 예산 등)를 구체화한 위험관리 계획을 +수립해야 함 +• ‌수행인력 : 위험관리 전문가, 정보보호 전문가, 법률 전문가, IT 실무 책임자, 현업부서 +• ‌실무 책임자, 외부 전문컨설턴트 등 참여(이해관계자의 참여 필요) +• ‌기간 : 최소 연 1회 이상 수행될 수 있도록 일정 수립 +• ‌대상 : 우주기업의 모든 서비스 및 자산(우주, 지상, 사용자 부문) 포함 +• ‌방법 : 조직의 특성을 반영한 위험평가 방법론 정의 +• ‌예산 : 위험 식별 및 평가 시행을 위한 예산 계획을 매년 수립하고 정보보호 최고책임자 등 경영진 +승인 +▶ ‌우주기업의 특성을 반영하여 관리적, 기술적, 물리적, 법적 분야 등 다양한 측면에서 발생할 수 +있는 위험을 식별하고 평가하는 절차를 수립 +• ‌위험평가 방법 선정 : 베이스라인 접근법, 상세위험 분석법, 복합 접근법, 위협 및 시나리오 기반 등 +• +‌ +비즈니스 및 조직의 특성 반영 : 조직의 비전 및 미션, 비즈니스 목표, 서비스 유형, 컴플라이언스 등 +• ‌다양한 관점 고려 : 해킹, 내부자 유출, 협력업체 직원 관리·감독 소홀, 개인정보 관련 법규 위반 등 +• ‌최신 취약점 및 위협동향 고려 + +--- + + +## 제3장 우주 보안모델 해설 | 169 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ ‌우주기업은 조직운영·자산·개인에 대한 위험을 주기적으로 평가하고 처리한다. +▶ ‌시스템 운영 및 정보 처리로 인해 발생하는 조직 운영, 자산 및 개인에 대한 위험을 정기적으로 +평가해야 함 +• ‌평가 요소 및 범위: 위험 평가 시 위협, 취약점, 발생 가능성, 영향도를 고려하여 평가해야 함 +- ‌자산의 취약점과 시스템에 대한 내부 및 외부 위협을 식별하고 문서화하며, 잠재적인 사업적 +영향 및 발생 가능성을 식별해야 함 +• ‌시스템의 취약점 변경, 위협 실현 가능성 변경, 시스템 의존도 증가 등 실질적인 변경이 +발생하거나 중대한 사고 발생 시 위험을 재평가해야 함 +▶ ‌위험평가 결과를 바탕으로 위험 조치 계획을 수립, 이행하고 그 효과를 관리해야 함 +• ‌식별된 위협, 취약점, 발생 가능성 및 영향을 사용하여 위험을 결정하고, 그 결과를 경영진에게 +보고해야 함 +• ‌수용 가능한 목표 위험 수준을 정하고, 그 수준을 초과하는 위험을 식별 및 문서화해야 함 +- ‌각종 위험이 조직에 미치는 영향(발생가능성, 심각도 등)을 고려하여 위험도 산정기준 마련 +- ‌위험도 산정기준에 따라 식별된 위험에 대하여 위험도 산정 +- ‌수용 가능한 목표 위험수준(DoA, Degree of Assurance)을 정보보호 최고책임자, 개인정보 +보호책임자 등 경영진의 의사결정에 의하여 결정 +- ‌수용 가능한 목표 위험수준을 초과하는 위험을 식별하고 문서화 +• ‌위험 조치 계획 수립 및 승인: 식별된 위험에 대한 관리 전략(감소, 회피, 전가, 수용 등)을 +수립하고, 위험 조치를 위한 적절한 보호대책을 선정해야 함 +위험 관리 전략 +위험 관리 예시 +위험 감소 +지상국 시스템에 대한 비인가 명령 위험을 줄이기 위하여, 위성 명령 전송 및 핵심 +접근 통제 지점(MOC/PCC)에 다중 인증(MFA)을 강제하고 접근 권한을 직무별로 +세분화하여 적용 +위험 회피 +지상국 시스템의 인터넷 직접 노출에 따른 해킹 위험이 통제 불가능하다고 +판단하여, 관제망과 외부망을 물리적으로 분리하고, 외부망 연결이 필요한 경우에 +한해 망간 자료 전송 시스템을 통한 일방향 통신만을 허용하도록 시스템 설계 +위험 전가 +사이버 공격으로 인한 위성 운용 중단 또는 중대한 탑재체 데이터 유출 시 발생하는 +임무 손실 및 복구 비용에 대한 재정적 위험을 줄이기 위하여 사이버 보험에 +가입하거나, 협력업체와의 계약 시 사고 발생에 따른 손해배상 책임을 명확히 전가 +위험 수용 +노후화된 지상국 시스템 장치의 교체 비용이 과도하여 당장 해결이 불가하거나, +통제가 불가능한 외부 협력사의 공통 인프라 사용이 불가피한 경우, 측정된 잔여 +위험을 경영진에게 보고하고 공식적인 수용 승인을 받아 운영(단, 수용 이후에도 +지속적인 모니터링을 조건으로 함) + +--- + +170 | 우주 보안 모델 해설 및 적용사례집 +• ‌위험 조치 계획에 따라 보호대책의 우선순위, 일정, 담당자, 예산 등을 포함한 이행 계획을 +수립하고 경영진의 승인을 받아야 함 +- ‌위험의 심각성 및 시급성, 구현의 용이성, 예산 할당, 자원의 가용성, 선후행 관계 등을 +고려하여 우선순위 결정 +- ‌일정, 담당부서 및 담당자, 예산 등의 항목을 포함한 보호대책 이행계획을 수립하여 경영진에게 +보고 및 승인 +▶ ‌선택된 위험 조치의 책임자와 이행 시점을 명확히 지정하고 문서화해야 함 +• ‌책임자 지정: 위험 조치를 수행할 담당자를 명확히 지정하고 지정된 책임자는 역할과 권한을 +문서화해야 함 +• ‌이행 시점 정의: 위험 조치가 언제 실행되어야 하는지 구체적으로 명시해야 함 +- ‌긴급 상황, 정기 점검, 운영 변경 등 상황별 이행 시점을 구분하여 정의해야 함 +▶ ‌위험 조치 내역을 기록하고 잔여 위험 수용 사유를 문서화해야 함 +• ‌위험 조치 기록: 선택된 조치의 내용과 범위를 문서화하고, 조치가 적용된 자산과 시스템을 +명확히 표시해야 함 +• ‌잔여 위험을 수용하는 이유(비용·효과성·기술적 한계 등 수용에 대한 객관적 근거 포함)를 명확히 +기술해야 함 +• ‌문서의 검토 가능성 확보: 문서화된 내용은 경영진과 감사자가 쉽게 이해할 수 있도록 작성해야 +함 +- ‌후속 점검 및 개선 활동에 활용할 수 있도록 체계적으로 보관하고 관리해야 함 +▶ ‌위험을 조치하거나 잔여 위험을 수용할 때, 관련 기관은 주요 고려사항을 반드시 반영해야 함 +• ‌효과성 및 비용 고려: 기대되는 효과 대비 구현 비용을 반드시 고려해야 하며, 비용 대비 효과가 +낮은 경우 대체 방안을 검토해야 함 +• ‌기존 보안 조치 효과성 검토: 사이버보안 위험 조치의 효과성 평가 결과를 반드시 고려하여, 기존 +보안조치의 효과성을 검토하고 개선 필요 여부를 반영해야 함 +• ‌사업 및 자산 중요도 반영: 자산 중요도와 사업 영향 분석 결과를 반드시 고려해야 함 +- ‌자산의 중요도와 분류 수준에 따라 조치 강도를 결정하고, 핵심 기능에 영향을 주는 위험은 +우선적으로 처리해야 함 +▶ ‌위험 평가 결과와 위험 조치 계획은 정기적으로 검토·갱신하여 최신 상태를 유지해야 함 +• ‌최소한 매년 1회 이상 검토해야 하며, 정기적인 위험 평가를 통해 계획의 최신 상태를 유지하고 +연간 보고서에 반영해야 함 +• ‌운영·위험·사고에 중대한 변화가 발생할 경우 즉시 갱신해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 171 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +- ‌새로운 위협이나 취약점 발견 시 즉시 반영해야 함 +- ‌사고 발생 후 후속 조치와 교훈을 계획에 포함해야 함 +• ‌검토·갱신 결과와 변경 내역을 기록하고 관리하며, 경영진과 감사자가 확인할 수 있도록 +보고해야 함 +관련 기준 +⊙ CMMC +• ‌RA.L2-3.11.1 위험 평가 : 조직 시스템 운영 및 관련 CUI 처리, 저장 또는 전송으로 인해 발생하는 조직 +운영(임무, 기능, 이미지 또는 평판 포함), 조직 자산 및 개인에 대한 위험을 주기적으로 평가한다. +• ‌CA.L2-3.12.1 보안 통제 평가 : 조직 시스템의 보안 통제를 주기적으로 평가하여 통제가 효과적으로 +적용되는지 확인한다. +⊙ K-RMF +• ‌PA-8-1 보안 시험 및 평가 | 위협 모델링 및 취약점 분석 : 개발 중에 위협 모델링 및 취약점 분석을 +수행하고, 이후 다음 정보를 이용(포함)하여 보안 시험평가를 수행해야 한다. +1. [보안 영향성과 관련된 정보, 운영환경, 알려지거나 가정된 위협, 허용 가능한 위험수준] +2. [조직이 지정한 도구 및 방법] +3. [조직이 지정한 분석 수준과 범위] +4. [조직이 지정한 허용 기준] 충족 여부를 판단할 수 있는 관련 문서 +⊙ NIS2 +• ‌2.1 위험관리 프레임워크 : 관련 기관은 네트워크·정보시스템 보안 위험을 관리하기 위해 위험관리체계를 +수립·유지하고, 위험평가 및 처리계획을 문서화·시행하며 경영진이 승인하도록 하여야 한다. +⊙ ISMS-P +• ‌1.2.3 위험 평가 : 조직의 대내외 환경분석을 통해 유형별 위협정보를 수집하고 조직에 적합한 위험 평가 +방법을 선정하여 관리체계 전 영역에 대하여 연 1회 이상 위험을 평가하며, 수용할 수 있는 위험은 경영진의 +승인을 받아 관리하여야 한다. +• ‌1.4.2 관리체계 점검 : 관리체계가 내부 정책 및 법적 요구사항에 따라 효과적으로 운영되고 있는지 +독립성과 전문성이 확보된 인력을 구성하여 연 1회 이상 점검하고, 발견된 문제점을 경영진에게 보고하여야 +한다. + +--- + +172 | 우주 보안 모델 해설 및 적용사례집 +RA-02 +보안통제 모니터링 및 효과성 평가 +항목 내용 +지속적으로 보안통제를 모니터링하여 보안통제의 지속적 효과를 보장해야 한다. +목적 +보안통제의 지속적인 효과성을 보장하기 위해 보안 통제를 모니터링하고 +주기적으로 평가하여 조직의 전반적인 보안 수준을 유지하기 위함이다. +주요 +확인사항 +y ‌보안통제의 효과성을 평가하기 위한 체계(절차, 책임, 기준 등)를 +수립·정의하고 있는가? +y ‌보안통제의 효과성을 평가하고 통제를 주기적으로 검토·갱신하고 있는가? +세부 설명 +⊙ ‌보안통제의 효과성을 평가하기 위한 체계(절차, 책임, 기준 등)를 수립하고 정의해야 한다. +▶ ‌우주기업의 보안통제가 계획대로 이행되고 유지되는지를 평가하기 위한 공식적인 정책 및 +절차를 수립하고 유지해야 함 +▶ ‌다음 사항을 포함하여 효과성 평가 체계를 명확히 정의해야 함 +• ‌평가 대상이 되는 주요 보안통제 및 위험관리 조치 +• ‌효과성 판단을 위한 평가 기준 +• ‌평가 방법론 및 수행 방식 +• ‌평가 주기 및 수시 평가 수행 조건 +• ‌평가 수행 및 결과 관리에 대한 책임과 역할 +▶ ‌효과성 평가 결과를 객관적으로 판단하기 위해 관리체계 관점의 핵심성과지표(KPI, +보안성과지표)를 도출하고 활용해야 함 +재발방지 및 개선조치 관련 보안성과지표(예시) +y ‌보안 정책·지침 위반율(외부 전송규정 위반율, 보안우회 시도율 등) +y ‌보안 예외 승인 건수 +y ‌보안 프로그램 설치율 +y ‌악성프로그램 감염률 +y ‌자가점검 수행률 등 +출처 : ISMS-P 인증기준 안내서(KISA) +▶ ‌효과성을 모니터링하고 측정할 책임자를 명확히 지정해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 173 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ ‌보안통제의 효과성을 평가하고 통제를 주기적으로 검토·갱신해야 한다. +▶ ‌보안통제의 효과성은 주기적으로(연 1회 이상) 평가해야 함 +• ‌다음과 같은 경우에는 정기 평가와 별도로 보안통제를 검토·재평가 +- 새로운 위협 또는 취약점이 식별된 경우 +- 시스템 구성, 운영 환경, 업무 범위에 중대한 변경이 발생한 경우 +- 중요 보안 사고 또는 통제 실패가 발생한 경우 +▶ ‌효과성 평가 및 검토 결과를 바탕으로 식별된 취약점에 대해 재발방지 및 개선조치를 +수립·이행해야 함 +• ‌점검 결과 발견된 문제점에 대해서는 조치계획을 수립·이행하고, 조치 완료 여부에 대하여 추가 +확인 +• ‌식별된 관리체계상의 문제점 및 결함사항에 대한 근본 원인 분석 +• ‌근본원인 분석결과를 바탕으로 발견된 문제점의 재발방지 및 개선을 위한 대책의 수립·이행 +재발방지 대책(예시) +y ‌정보보호 정책·지침·절차 개정 +y ‌임직원 및 협력업체 직원에 대한 교육 강화 또는 개선 +y ‌이상행위 등에 대한 모니터링 강화 +y ‌정보보호 관련 검토·승인 절차 개선 +y ‌내부점검 체크리스트 또는 방식 개선 등 +출처 : ISMS-P 인증기준 안내서(KISA) +• ‌수립된 재발방지 대책에 대하여 관련자들에게 공유 및 교육 실시 +• ‌보안통제의 효과성 평가 결과 및 개선 계획은 경영진에게 보고되어야 하며, 이는 경영진이 허용 +가능한 위험을 결정하는데 활용 +▶ ‌개선 활동의 이력 및 결과를 문서화하고 관리해야 함 +• ‌검토 및 갱신 활동의 결과로 변경된 모든 정책, 절차, 시스템 보안 계획 등 관련 문서를 최신 +상태로 유지해야 함 +• ‌통제 검토 및 갱신에 대한 변경 내역을 기록하고 관리하며, 이를 감사자가 확인할 수 있도록 +체계적으로 보관해야 함 + +--- + +174 | 우주 보안 모델 해설 및 적용사례집 +관련 기준 +⊙ CMMC +• ‌CA.L2-3.12.3 보안 통제 모니터링 : 지속적으로 보안 통제를 모니터링하여 통제의 지속적인 효과를 +보장한다. +⊙ NIS2 +‌7.1 보안조치 효과성 평가 정책 : 관련 기관은 사이버보안 위험관리 조치의 이행·유지 여부를 평가하기 +위한 정책과 절차를 수립·시행하여야 한다. +‌7.2 보안조치 효과성 평가 절차 : 관련 기관은 위험평가 결과와 과거 주요 사고를 반영하여 정책·절차를 +수립하고 필요한 사항을 결정하여야 한다. +‌7.3 보안조치 효과성 평가 결과 검토 : 관련 기관은 정책·절차를 정기적으로 검토·갱신하고, 주요 사고나 +운영·위험의 중대한 변경 시 이를 반영하여야 한다. +⊙ ISMS-P +• ‌1.4.3 관리체계 개선 : 법적 요구사항 준수검토 및 관리체계 점검을 통해 식별된 관리체계상의 문제점에 +대한 원인을 분석하고 재발방지 대책을 수립·이행하여야 하며, 경영진은 개선 결과의 정확성과 효과성 +여부를 확인하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 175 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제10절 +보안 거버넌스(SG) +SG-01 +보안 정책 수립 +항목 내용 +우주보안 정책 및 지침을 수립하고 최고 경영진의 승인을 받은 뒤, 조직 환경 +변화와 위협에 따라 주기적으로 검토·개정해야 한다. +목적 +우주기업의 보안 목표 달성을 위한 정보보호 정책을 수립하고, 경영진의 +공식적인 승인 및 주기적인 검토를 통해 정책의 실효성과 최신성을 확보하기 +위함이다. +주요 +확인사항 +y ‌우주기업의 모든 보안 활동을 포괄하는 최상위 정책 및 절차를 수립하고, +경영진의 공식 승인을 득하고 전직원에게 전파하는가? +y ‌보안 정책을 조직 환경 변화와 위협을 고려하여 정기적으로 검토·갱신하고 +있는가? +y ‌시스템 보안 요구사항 이행을 관리하기 위해 운영 개선 계획과 시스템 보안 +계획을 수립·이행하는가? +y ‌적용되는 법령 및 보안 정책에 따라 보안 고지사항을 제공하는가? +세부 설명 +⊙ ‌우주기업의 모든 보안 활동을 포괄하는 최상위 정책 및 절차를 수립하고, 경영진의 공식 승인 하에 +수립하고 전직원에게 전파해야 한다. +▶ ‌우주기업이 수행하는 정보보호 활동의 근거를 포함하는 정보보호 정책을 다음 내용을 포함하여 +수립 +• ‌우주기업의 정보보호를 위한 역할·책임 및 대상·범위 +• ‌우주기업이 수행하는 관리적·기술적·물리적 정보보호 활동의 근거 +▶ ‌정보보호 정책을 구체적으로 시행하기 위하여 필요한 세부 방법, 절차, 주기, 수행주체 등을 +규정하는 지침, 절차, 매뉴얼, 가이드 등의 하위 실행 문서를 우주기업의 특성에 맞게 수립 + +--- + +176 | 우주 보안 모델 해설 및 적용사례집 +하위 실행 문서(예시) +보호대상 관점 +수행주체 관점 +y ‌서버보안 지침 +y ‌네트워크보안 지침 +y ‌데이터베이스보안 지침 +y ‌애플리케이션보안 지침 +y ‌웹서비스 보안 지침 +y ‌클라우드 보안 지침 +y ‌임직원 보안 지침 +y ‌개발자 보안 지침 +y ‌운영자 보안 지침 등 +출처 : ISMS-P 인증기준 안내서(KISA) +▶ ‌승인된 정책 및 절차는 모든 관련 임직원 및 이해관계자에게 전달하고 인지시켜야 함 +• ‌정책 및 시행문서는 제·개정사항이 발생하면 즉시 공표하고 최신본을 유지 +• ‌관련 임직원들이 용이하게 참고할 수 있는 형태(전자게시판, 책자, 교육자료, 매뉴얼 등)로 제공 +⊙ ‌보안 정책 및 관련 계획을 조직 환경 변화와 위협을 고려하여 정기적으로 검토·갱신해야 한다. +▶ ‌수립된 보안 정책 및 관련 계획의 유효성 유지를 위해 정기적인 타당성 검토 절차를 수립하고 +이행해야 함 +• ‌정보보호 관련 정책 및 시행문서에 대한 정기적인 타당성 검토 절차를 수립하고 이행해야 함 +정기 타당성 검토 절차에 포함되어야 할 사항(예시) +y ‌검토 주기 및 시기 : 연 1회 이상 검토 필요 +y ‌관련 조직별 역할 및 책임 +y ‌담당 부서 및 담당자 +y ‌검토 방법 +y ‌후속조치 절차 : 정책 및 시행문서 제·개정이 필요한 경우 관련 절차, 내부 협의 및 보고 절차 등 +출처 : ISMS-P 인증기준 안내서(KISA) +• ‌정책 검토 시 법령 및 규제, 상위 조직 정책과의 연계성 등을 분석해야 함 +- ‌위험 평가 및 관리체계 점검 결과, 새로운 위협 및 취약점을 필수적으로 반영해야 함 +- ‌문서 간 일관성(활동 주기, 수준, 방법 등) 유지 여부를 검토해야 함 +▶ ‌중대한 사고 또는 운영이나 위험에 중대한 변경이 발생할 경우 정책을 검토하고 갱신해야 함 +• ‌정보보호 관련 법규 제/개정사항(예정 사항 포함) 발생 시 정책에 미치는 영향을 검토해야 함 +• ‌비즈니스 환경의 변화(신규 사업 진출 등), 중대한 보안사고 발생 등 환경 변화 발생 시 영향을 +검토하고 필요시 제/개정해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 177 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌정보보호 정책·시행문서 제·개정 시 최고경영자 또는 최고경영자로부터 권한을 위임받은 자의 +승인을 득해야 함 +• ‌정책서와 시행문서를 제·개정하는 경우 이해관계자와 해당 내용을 충분히 협의·검토 +• ‌정책서 및 시행문서 변경으로 인한 조직 업무 및 서비스 영향도, 법적 준거성 등을 고려 +• ‌회의록 등 검토 사항에 대한 기록을 남기고 정책·지침 등에 관련 사항 반영 +• ‌검토가 완료된 정책서 및 시행문서를 경영진에게 보고하고 승인 +▶ ‌문서 내에 문서버전, 일자, 개정 사유, 작성자, 승인자 등 개정이력을 기록하여 관리 +⊙ ‌시스템 보안 요구사항 이행을 관리하기 위해 운영 개선 계획과 시스템 보안 계획을 수립·이행해야 +한다. +▶ ‌조직 시스템의 취약점을 개선하기 위한 운영 개선 계획(POA, Plan of Action)을 개발하고 +이행해야 함 +• ‌보안 평가, 위험 분석 등을 통해 시스템의 결함 및 취약점을 명확히 식별해야 함 +▶ ‌식별된 문제를 해결하기 위한 운영 개선 계획을 개발하고 이행해야 함 +• ‌운영 개선 계획은 결함을 시정하고 취약점을 줄이거나 제거하는 구체적인 방안을 포함해야 함 +• ‌운영 개선 계획은 책임 소유자 지정, 명확한 실행 단계, 각 단계별 완료 목표 날짜를 필수로 +포함해야 함 +• ‌마일스톤 달성 및 개선 완료에 따라 운영 개선 계획을 지속적으로 최신 상태로 유지해야 함 +▶ ‌시스템 보안 계획을 수립, 문서화하고 주기적으로 갱신해야 함 +• ‌시스템 보안 계획은 주요 정보를 취급하는 각 시스템에 대해 보안 요구사항 이행 방법을 설명하는 +핵심 문서여야 함 +- ‌시스템 보안 계획은 시스템의 보안 요구사항과 통제를 연계하여 기술해야 함 +- ‌시스템 보안 계획은 시스템의 필수 구성 정보를 명시 +- ‌시스템 경계 및 운영 환경을 설명하고 문서화 +- ‌식별된 보안 요구사항의 구현 방법을 구체적으로 설명 +- ‌다른 시스템과의 연결 상태 및 관계를 설명하고 문서화 +- ‌적용 대상에서 제외 및 승인된 보안 요구사항을 식별하고 문서화 +• ‌시스템 보안 계획을 최소 연 1회 이상 검토하고 갱신 +⊙ ‌적용되는 법령 및 보안 정책에 따라 보안 고지사항을 제공해야 한다 +▶ ‌조직은 정보 시스템 접근 시 사용자에게 보안 및 사용에 관한 법적 고지 사항을 명확히 제시해야 +함 + +--- + +178 | 우주 보안 모델 해설 및 적용사례집 +• ‌시스템에 저장되거나 접근을 제공하는 보호 대상 정보의 특성과 관련된 모든 법적 및 규제적 +요구사항을 식별하고, 고지 내용이 해당 요구사항에 일관되게 부합하도록 작성해야 함 +• ‌법적 고지사항에는 무단 사용 금지, 업무 목적 외 사용 제한, 시스템 이용 행위에 대한 모니터링 +및 기록, 위반 시 법적 책임에 대한 안내 등이 포함될 수 있음 +▶ ‌사용자에게 정보 시스템 사용은 감시(모니터링) 및 기록의 대상이 될 수 있음을 반드시 알리고 +아래 사항들을 명시해야 함 +• ‌비인가된 시스템 사용은 엄격히 금지되며, 민사 및 형사상의 처벌 대상이 될 수 있음 +• ‌시스템을 사용하는 것은 감시 및 기록에 동의하는 것으로 간주됨 +• ‌위성 운용 정보, 고객 정보 등 특정 보호 조치가 요구되는 민감 정보가 포함된 경우, 해당 사실을 +명확히 고지 +▶ ‌고지 사항은 사용자가 시스템에 접속하기 전, 누락 없이 인지할 수 있는 방식으로 표시되어야 함 +• ‌고지 사항은 시스템 배너 형태로 구현하는 것이 일반적이며, 포스터나 인쇄물 등의 대체 수단도 +활용할 수 있음 +• ‌경고 배너나 메시지는 사용자가 시스템에 로그인하기 전에 표시되어야 함 +• ‌위험 평가를 통해 최초 로그인 이후 특정 애플리케이션이나 중요 자원에 접근할 때 2차 고지 +사항이 필요한지 검토해야 함 +▶ ‌사용자가 고지 내용을 확인했음을 입증하기 위해 시스템 사용 전 동의 버튼을 클릭하도록 요구할 +수 있으며, 이 동의 기록은 향후 보안 위반 발생 시 법적 증거로 활용될 수 있음 +관련 기준 +⊙ CMMC +• ‌3.12.2 운영 계획 : 조직 시스템의 결함을 바로잡고 취약성을 줄이거나 없애기 위한 행동 계획을 개발하고 +실행한다. +• ‌3.12.4 시스템 보안 계획 : 시스템 경계, 시스템 운영 환경, 보안 요구 사항 구현 방법, 다른 시스템과의 +관계 또는 연결을 설명하는 시스템 보안 계획을 개발, 문서화하고 주기적으로 업데이트한다. +• ‌3.1.9 개인정보 보호 및 보안 고지 : 해당 CUI 규칙에 따라 개인정보 보호 및 보안 고지사항을 제공한다. +⊙ K-RMF +• ‌PA-1 정책 및 절차 : + +## 1. 모든 보안통제항목 패밀리에 대해 다음 사항을 개발하고 유지 및 배포해야 한다. + + +가. ‌보안통제항목 패밀리의 목적, 범위, 직책, 지휘관심 제고, 협조사항, 준수사항을 포함하는 정책 + +나. 보안통제항목 패밀리 정책과 관련된 보안통제항목의 구현을 돕는 절차 + +## 2. 수립된 정책 및 절차에 대하여 다음사항을 시행한다. + + +가. [조직이 지정한 주기 또는 상황]마다 각 보안통제항목 패밀리 정책을 검토 및 개정 + +나. [조직이 지정한 주기 또는 상황]마다 각 보안통제항목의 구현을 돕는 절차를 검토 및 개정 + +--- + + +## 제3장 우주 보안모델 해설 | 179 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ NIS2 +• ‌1.1 네트워크 및 정보시스템 보안 정책 : 관련 기관은 네트워크·정보시스템 보안 위험관리체계를 +수립·유지하고, 위험평가·처리계획을 시행하며 경영진이 승인하도록 하여야 한다. +⊙ ISMS-P +• ‌2.1.1 정책의 유지관리 : 정보보호 및 개인정보보호 관련 정책과 시행문서는 법령 및 규제, 상위 조직 +및 관련 기관 정책과의 연계성, 조직의 대내외 환경변화 등에 따라 주기적으로 검토하여 필요한 경우 +제∙개정하고 그 내역을 이력관리하여야 한다. + +--- + +180 | 우주 보안 모델 해설 및 적용사례집 +SG-02 +보안 역할 및 책임 정의 +항목 내용 +우주보안 관련 책임자 및 담당자의 역할·책임을 정의하고, 조직 변화에 따라 +이를 지속적으로 유지·관리해야 한다. +목적 +우주기업의 보안 목표 달성을 위해 우주 시스템 관련 책임과 의무를 명확히 +정의하고, 조직 운영 및 인력 변화에 따라 책임성을 지속적으로 확보하기 +위함이다. +주요 +확인사항 +y ‌정보보호 업무를 총괄하는 정보보호 최고책임자를 공식적으로 지정하였는가? +y ‌우주보안 관련 책임자 및 담당자의 역할과 책임을 할당하고, 환경 변화를 +고려하여 정기적으로 검토·갱신하는가? +세부 설명 +⊙ ‌정보보호 업무를 총괄하는 정보보호 최고책임자를 공식적으로 지정해야 한다. +▶ ‌정보보호 최고책임자는 인사 발령 등 공식 절차를 통해 지정하고, 정보보호 정책 또는 내부 +규정에 해당 직위와 책임을 명시해야 함 +▶ ‌조직의 규모와 특성에 따라 최고경영자, 임원, 또는 정보보호 관련 부서의 장이 정보보호 +최고책임자를 겸직할 수 있음 +▶ ‌정보보호 최고책임자 지정 시에는 「정보통신망법 시행령 제36조의7」에 따른 법적 요건을 +충족하도록 검토해야 함 +정보보호 최고책임자 지정요건(정보통신망법 시행령 제36조의7 제1항) +구분 (정보통신서비스 제공자) +정보보호 최고책임자 지정 요건 +1 +y ‌자본금 1억원 이하인 자 +y ‌소기업 +y ‌중기업으로서 전기통신사업자, ISMS-P 인증 의무자, +개인정보 처리방침 공개 의무자, 통신판매업자가 아닌 자 +y ‌사업주 또는 대표자 +2 +y ‌직전 사업연도 말 기준 자산총액 5조원 이상인 자 +y ‌법 제47조제2항에 따른 ISMS-P 인증 의무자 중 직전 +사업연도 말 기준 자산총액 5천억원 이상인 자 +y ‌이사(상법 제401조의2 제1항 제3호 +및 제408조의2 집행임원 포함 +※ 겸직 제한 요건 준수 필요 +3 +y ‌위 1호, 2호에 해당하지 않는 자 +y ‌사업주 또는 대표자 +y ‌이사(상법 제401조의2 제1항 제3호 +및 제408조의2 집행임원 포함) +y ‌정보보호 관련 업무 총괄 부서의 장 + +--- + + +## 제3장 우주 보안모델 해설 | 181 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ ‌우주보안 관련 책임자 및 담당자의 역할과 책임을 할당하고, 환경 변화를 고려하여 정기적으로 +검토하고 갱신해야 한다. +▶ ‌보안 관련 책임자와 담당자의 역할 및 책임을 공식적인 절차(인사발령, 직무기술서 공지 등)을 +통해 정의해야 함 +• ‌정보보호 최고책임자: 정보보호 관리체계 총괄, 정책 수립·이행 관리 +• ‌정보보호 관리자 및 담당자: 보안 통제 운영, 점검, 사고 대응 수행 +• ‌부서별 정보보호 책임자: 부서 내 보안 준수 및 현업 통제 이행 책임 +▶ ‌보안 관련 책임자와 담당자의 활동을 평가할 수 있는 체계(핵심성과지표(KPI, Key Performance +Indicator), 목표관리(MBO, Management By Objectives), 인사평가 등)를 수립하고 +주기적으로 평가해야 함 +▶ ‌역할, 책임 및 권한은 연 1회 이상 검토하고 필요에 따라 갱신해야 하며, 중대한 사고 또는 +운영이나 위험에 중대한 변경이 발생할 때도 갱신해야 함 +• ‌보직 변경 후에도 시스템 또는 시설에 대한 논리적 및 물리적 접근 인가를 유지할지 검토하고, +운영 요구사항의 변화에 따라 접근 인가를 수정해야 함 +• ‌조직 내 인원의 전출 시 시스템 접근을 비활성화하도록 요구하고, 해당 인원과 관련된 모든 인가, +인증 및 자격 증명을 반납, 해지 및 취소하도록 요구해야 함 +관련 기준 +⊙ NIS2 +• ‌1.2 역할, 책임 및 권한 : 네트워크 및 정보시스템 보안에 관한 책임과 권한을 규정하고 이를 역할에 +배정하며, 기관의 필요에 따라 적절히 할당하고, 경영진에게 이를 전달하여야 한다. +⊙ ISMS-P +• ‌2.1.2 조직의 유지관리 : 조직의 각 구성원에게 정보보호와 개인정보보호 관련 역할 및 책임을 할당하고, +그 활동을 평가할 수 있는 체계와 조직 및 조직의 구성원 간 상호 의사소통할 수 있는 체계를 수립하여 +운영하여야 한다. + +--- + +182 | 우주 보안 모델 해설 및 적용사례집 +SG-03 +자산 관리 +항목 내용 +우주 관련 자산을 식별하고 목록화하며, 변동 사항을 반영하여 최신 상태로 +관리해야 한다. +목적 +주요 우주 관련 유·무형의 자산을 식별, 목록화하고 중요도에 따라 분류하며, +자산의 변경 내역을 관리하여 자산의 무결성 및 보안 태세를 유지하기 위함이다. +주요 +확인사항 +y ‌우주 관련 자산을 식별하고 자산목록에 등록하며, 변동 +사항(추가·변경·폐기)을 반영하여 최신 상태로 유지·관리하는가? +y ‌자산의 중요도 및 특성에 따라 분류 기준을 적용하고, 자산별 책임자를 +지정하며, 이에 따라 적정한 보호대책이 수립·이행되고 있는가? +세부 설명 +⊙ ‌우주 관련 자산을 식별하고 자산목록에 등록하며, 변동 사항(추가·변경·폐기)을 반영하여 최신 +상태로 유지·관리해야 한다. +▶ ‌조직의 네트워크 및 정보시스템 범위 내에 있는 모든 자산(정보 포함)의 완전하고 정확하며 +최신성을 유지하는 목록을 개발하고 유지해야 함 +• ‌자산 목록은 자산을 식별·관리하고 보안 통제를 적용할 수 있도록 자산의 종류, 용도, 위치(또는 +논리적 위치), 담당 부서 또는 책임자를 식별해야 함 +• ‌자산 목록에는 다음과 같은 유형의 자산을 포함해야 함 +- 물리적 자산: 서버, 네트워크 장비, 위성 운용 장치, 개발·운영용 단말 등 +- 소프트웨어 및 정보 자산: 운영체제, 애플리케이션, 데이터베이스 등 +- 클라우드 자산: 클라우드 상에서 생성·운영되는 가상 서버, 저장소, 네트워크 구성요소 등 +• ‌자산 목록에는 하드웨어 특성(제조사, 모델, 위치 등), 소프트웨어 및 라이선스 정보, 시스템 및 +구성요소 소유자 등 책임자 식별에 필요한 정보를 포함해야 함 +▶ ‌자산 목록은 정기적으로 검토하고 업데이트해야 함 +• ‌시스템 구성요소의 설치, 제거 및 시스템 업데이트 시 시스템 구성요소 목록을 최신화해야 함 +• ‌자산 목록에 대한 변경사항은 추적 가능한 방식으로 기록하고, 변경 이력을 문서화해야 함 +⊙ ‌자산의 중요도 및 특성에 따라 분류 기준을 적용하고, 자산별 책임자를 지정하며, 이에 따라 적정한 +보호대책을 수립·이행해야 한다. +▶ ‌조직이 소유·관리하거나 운영에 활용하는 네트워크, 정보시스템, 위성 운용 환경, +개발·시험·운영 목적의 시스템 및 시스템 내에서 처리·저장되는 정보자산을 포함하여 자산을 +식별·분류해야 함 + +--- + + +## 제3장 우주 보안모델 해설 | 183 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌모든 자산을 기밀성, 무결성, 가용성 요구 수준을 정의하고 해당 수준에 맞는 보호 조치가 +적용되도록 분류 기준을 수립해야 함 +• ‌자산의 가용성 요구사항을 비즈니스 연속성 및 재해 복구 계획에 설정된 복구 목표와 일치시켜야 함 +▶ ‌정보자산의 중요도 및 특성에 따라 자산별 취급 절차(생성·도입, 저장, 이용, 파기) 및 접근통제, +암호화 등의 적절한 보호대책을 선정하고 이행 +• ‌임직원이 정보자산별 보안등급(기밀, 대외비, 일반 등)을 식별할 수 있도록 표시 +- (전자)문서 : 문서 표지 또는 워터마킹 등을 통하여 표시 +- 서버 등 하드웨어 자산 : 자산번호 또는 바코드 표시 등을 통한 보안등급 확인 +• ‌정보자산 보안등급별로 취급절차(생성·도입, 저장, 이용, 파기 등) 및 보안통제 기준 수립·이행 +보안등급별 취급 절차 (예시) +y ‌기밀 자산: 승인된 시스템에서만 생성·저장, 암호화 저장 및 전송, 파기 시 완전 삭제 +y ‌일반 자산: 업무 시스템 내 저장 허용, 내부 공유 가능, 파기 시 논리적 삭제 +▶ ‌우주기업 내 보안 정책에 따라 자산(정보 포함)의 적절한 취급을 위한 정책을 수립, 이행 및 +적용하고, 자산을 사용하거나 취급하는 모든 인원에게 정책을 전파해야 함 +• ‌취급 정책은 자산의 안전한 사용, 안전한 보관, 안전한 운송, 그리고 복구 불가능한 삭제 및 +파기에 대한 절차를 제공해야 함 +▶ ‌식별된 정보자산에 대하여 책임자 및 관리자를 지정하여 책임소재를 명확히 정의해야 함 +• ‌정보자산 책임자 및 담당자의 인사이동 발생 시 정보자산 목록의 책임자 및 담당자를 갱신 +▶ ‌자산의 분류 수준을 정기적으로 검토하고, 필요한 경우 업데이트해야 함 +▶ ‌자산 취급 정책은 중대한 사고 또는 운영이나 위험에 중대한 변경이 발생할 시 추가로 검토하고 +갱신해야 함 +관련 기준 +⊙ K-RMF +• ‌PA-2 시스템목록 : 시스템을 목록화하여 문서화 및 유지·관리해야 한다. +⊙ NIS2 +• ‌12.1 자산 분류 : 관련 기관은 네트워크 및 정보시스템 범위에 포함되는 모든 자산(정보 포함)에 대해 +필요한 보호 수준에 따른 분류 등급을 설정하여야 한다. +• ‌12.2 자산 취급 : 자산 처리 정책을 수립·시행하고, 모든 사용자·취급자에게 전파해야 한다. +• ‌12.4 자산 목록 : 자산 목록을 최신으로 정확하게 관리하고, 변경 내역을 추적 가능하게 기록해야 한다. +⊙ ISMS-P +• ‌2.1.3 정보자산 관리 : 정보자산의 용도와 중요도에 따른 취급 절차 및 보호대책을 수립·이행하고, 자산별 +책임소재를 명확히 정의하여 관리하여야 한다. + +--- + +184 | 우주 보안 모델 해설 및 적용사례집 +SG-04 +법적 요구사항 준수 +항목 내용 +우주보안 관련 법적·규제적 요구사항을 식별하여 내부 규정에 반영하고, 준수 +여부를 지속적으로 검토해야 한다. +목적 +우주기업이 준수해야 하는 모든 법적/규제적 요구사항을 식별하고 내부 규정에 +반영하며, 지속적인 준수 검토를 통해 법적 책임과 보안 체계의 적절성을 +유지하기 위함이다. +주요 +확인사항 +y ‌적용되는 모든 법적 요구사항을 식별하여 내부 정책 및 지침에 반영하고 조직 +환경 변화에 따라 최신성을 유지하는가? +y ‌수립된 정책 및 법적 요구사항에 대한 준수 여부를 독립적인 인력이 +주기적으로 검토하고 그 결과를 경영진에게 보고하는가? +세부 해설 +⊙ ‌적용되는 모든 법적 요구사항을 식별하여 내부 정책 및 지침에 반영하고 조직 환경 변화에 따라 +최신성을 유지해야 한다. +▶ ‌조직이 준수해야 할 모든 법적 요구사항을 목록화하고 최신 상태를 유지해야 함 +• ‌국내 법규 식별 (예시) +법령 +설명 +개인정보보호법 +개인정보의 수집·이용·보관·파기에 관한 안전조치를 요구하는 국내 +최고 상위 개인정보 보호 법령 +정보통신망법 +정보통신서비스 제공자가 준수해야 하는 보안조치 및 보안사고 신고 +의무를 규정 +전파법 +지상국 운용 및 위성과의 통신에 필요한 주파수 할당·사용 기준을 +규정하고 전파 간섭 방지 요구 +우주개발진흥법 +위성, 지상국 등 우주개발사업의 등록·신고 절차 및 안전관리 기준을 +규정 +클라우드컴퓨팅 발전 및 +이용자 보호에 관한 법률 +클라우드 서비스 제공 및 이용 환경의 안정성 확보 및 보호 의무 규정. +클라우드 사업자 준수 대상 법률 + +--- + + +## 제3장 우주 보안모델 해설 | 185 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌글로벌 법규 식별 (예시) +법령 +설명 +NIS2 Directive +필수·중요 서비스 기업에 대한 네트워크·정보보호 의무, 사고보고 +의무를 강화한 EU 보안 규제 +CRA +디지털 요소가 포함된 하드웨어·소프트웨어 제품의 제조사에게 사이버 +보안 책임을 부여해 제품 생애주기 전체에서 보안을 보장하는 유럽연합 +규정 +▶ ‌식별된 법규 변화가 조직에 미치는 영향을 분석하고 문서화해야 함 +• ‌법규 제/개정 사항이 조직의 서비스, 정보 시스템, 개인정보 처리에 미치는 기술적/관리적 영향을 +분석해야 함 +• ‌법적 요구사항 변경 사항, 영향 분석 결과, 그리고 이에 따른 내부 정책 변경 필요성을 공식적으로 +문서화해야 함 +• ‌분석 결과에 따라 내부 정보보호 정책, 개인정보처리방침, 보안 지침, 내부 통제 체크리스트 등에 +해당 법규의 요구사항을 반영하여 최신성을 유지해야 함 +▶ ‌식별된 관련 법규의 제정 및 개정 현황을 지속적으로 모니터링하고 주기적으로(최소 연 1회) +검토하고 업데이트해야 함 +• ‌검토 시 법적 요구사항 및 규제 준수 현황, 위험 평가 결과, 새로운 위협 및 취약점 발견 등을 +반영해야 함 +• ‌정보보호 관련 정책 및 시행문서의 변경사항(버전, 개정 사유, 작성자, 승인자 등)에 관한 이력을 +기록·관리해야 함 +⊙ ‌수립된 정책 및 법적 요구사항에 대한 준수 여부를 독립적인 인력이 주기적으로 검토하고 그 결과를 +경영진에게 보고해야 한다. +▶ ‌우주기업의 정보보호 정책, 관련 지침 및 내부 기준에 대한 준수 여부를 정기적으로 검토해야 함 +• ‌법적 요구사항의 준수 여부를 연 1회 이상 정기적으로 검토하는 절차를 수립하고 이행해야 함 +• ‌준수 여부 모니터링은 정기적으로 수행되며, 중대한 사고 또는 운영이나 위험에 중대한 변경이 +발생할 때 추가 모니터링을 수행해야 함 +▶ ‌감사를 수행하는 인원은 검토 대상의 운영 인력과 분리되어야 하며 적절한 감사 전문성을 갖춘 +인력에 의해 수행되어야 함 +• ‌조직 규모로 인해 독립성 확보가 어려운 경우, 공정성을 보장하기 위한 대체 조치(예: 외부 전문 +기관 감사, 교차 감사)를 마련하여 이행해야 함 + +--- + +186 | 우주 보안 모델 해설 및 적용사례집 +• ‌감사는 정기적으로 수행되며, 중대한 사고 또는 운영이나 위험에 중대한 변경이 발생할 때는 +추가적으로 감사를 수행해야 함 +▶ ‌감사 결과는 경영진에게 보고하고 시정 조치를 이행해야 함 +• ‌보고에는 발견된 문제점, 취약점, 잠재적 위험을 포함해야 함 +• ‌감사 결과 식별된 문제점에 대해 시정 조치를 취해야 함 +- ‌시정 조치가 불가능하거나 현실적이지 않은 경우, 조직의 위험 수용 기준에 따라 잔존 위험을 +경영진이 공식적으로 수용해야 함 +• ‌법적 요구사항 준수 검토 및 관리체계 점검을 통해 식별된 문제점에 대한 근본 원인을 분석하고, +재발 방지 대책을 수립 및 이행해야 함 +• ‌재발 방지 및 개선 조치의 정확성과 효과성 확인을 위한 기준과 절차를 마련하고, 측정 결과를 +경영진에게 보고해야 함 +관련 기준 +⊙ NIS2 +• ‌2.2 컴플라이언스 모니터링 : 보안 정책 준수 여부를 정기적으로 점검하고, 그 결과를 경영진에 보고해야 +한다. +• ‌2.3 정보 및 네트워크 보안에 대한 독립적 검토 : 보안 관리 방식과 실행을 인력·프로세스·기술 측면에서 +독립적으로 점검해야 한다. +⊙ ISMS-P +• ‌1.4.1 법적 요구사항 준수 검토 : 조직이 준수하여야 할 정보보호 및 개인정보보호 관련 법적 요구사항을 +주기적으로 파악하여 규정에 반영하고, 준수 여부를 지속적으로 검토하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 187 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제11절 +비상 계획(CP) +CP-01 +비상계획 수립 +항목 내용 +우주 시스템의 운영 연속성을 위협할 수 있는 보안 위협 유형을 식별해야 하며, +비상시 복구 절차, 복구 조직, 비상연락체계 등 비상계획을 수립하고 주기적으로 +점검해야한다. +목적 +우주 시스템의 운영 연속성을 위협하는 재난 및 사고 유형을 식별하고, 비상계획 +및 복구 절차를 수립하여 시스템의 신속한 복구 및 임무 지속성을 확보하기 +위함이다. +주요 +확인사항 +y ‌우주기업은 재해 유형을 식별하고 피해 규모 및 영향을 분석하여 핵심 +서비스와 시스템을 식별했는가? +y ‌우주기업은 재해·재난 발생 시 핵심 서비스와 시스템의 연속성을 보장하는가? +세부 설명 +⊙ ‌우주기업은 재해 유형을 식별하고 피해 규모 및 영향을 분석하여 핵심 서비스와 시스템을 식별해야 +한다. +▶ ‌자연재해, 해킹, 통신장애 등 조직의 핵심 서비스(업무) 연속성을 위협할 수 있는 IT 재해 유형 +식별해야 함 +서비스 중단을 초래할 수 있는 재해 유형(예시) +y ‌자연재해 : 화재, 홍수, 지진, 태풍 등 +y ‌외부요인 : 해킹, 통신장애, 정전 등 +y ‌내부요인 : 시스템 결함, 기계적 오류, 사용자 실수, 의도적·악의적 운영, 핵심 운영자 근무 +이탈(사망, 병가, 휴가, 이직 등), 환경설정 오류 등 +출처 : ISMS-P 인증기준 안내서(KISA) +▶ ‌재해 유형별 조직의 핵심 서비스(업무) 중단 시 피해규모 및 영향을 분석하여 핵심 서비스 및 +시스템을 식별해야 함 +• ‌재무적 측면(매출 감소, 계약 위약금 지급 등)과 법적 정성적 측면(손해배상 소송, 대외 이미지 +하락, 경쟁력 손상 등)을 고려하여 핵심 서비스 식별 +• ‌위성 제어, 임무 운영(MOC), 탑재체 제어(PCC), 데이터 수신·처리 등 임무 지속에 필수적인 +기능을 핵심 서비스로 정의할 수 있음 + +--- + +188 | 우주 보안 모델 해설 및 적용사례집 +• ‌핵심 서비스가 중단될 경우 우주 영역과 지상국 영역에 미치는 영향을 기준으로 중요도 구분 +▶ ‌핵심 서비스 및 시스템의 중요도 및 특성을 반영하여 복구 목표시간(RTO: Recovery Time +Objective)과 데이터가 복구되어야 하는 목표시점(RPO: Recovery Point Objective)을 정의 +⊙ ‌우주기업은 재해·재난 발생 시 핵심 서비스와 시스템의 연속성을 보장해야 한다. +▶ ‌재해 발생 시 사전 정의한 서비스 및 시스템 복구 목표시간 및 복구 목표시점을 달성하기 위해 +업무연속성 관리 체계 수립 +▶ ‌업무연속성 관리 체계에는 다음의 내용을 포함해야 함 +구분 +설명 +비상연락망 및 역할 +재해·재난 발생 시 신속한 의사결정과 대응을 위해 비상 대응 +조직을 구성하고, 서비스 운영·시스템 복구·대외 소통 등 역할을 +사전에 구분 +핵심 서비스 및 시스템 식별 +위성 운영, 지상국 운용, 데이터 처리 등 중단 시 영향이 큰 핵심 +서비스와 시스템을 식별하고 우선순위 설정 +연속성 운영 시나리오 +시설 장애, 인력 가용성 저하, 시스템 침해 등 다양한 재해·재난 +상황을 고려한 서비스 지속 및 대체 운영 방안 마련 +가용 자원 관리 +재해 상황에서도 활용 가능한 인력, 장비, 시스템, 외부 지원 자원 +현황을 파악하고 필요 시 즉시 활용할 수 있도록 관리 +인력 및 운영 대체 방안 +핵심 인력 부재 또는 운영 제한 상황에서도 주요 서비스가 유지될 수 +있도록 교대 인력, 원격 운영, 외부 지원 활용 방안을 마련 +내부·외부 소통 체계 +재해 발생 시 직원, 협력사, 고객, 관계기관과의 원활한 정보 공유를 +위해 연락 체계와 공지 절차를 사전 정비 +복구 절차 +재해 종료 후 시스템 복구, 데이터 정합성 확인, 서비스 정상화 +절차를 수립하여 운영 혼선 최소화 +▶ ‌우주기업은 업무 영향 분석(Business Impact Analysis, BIA)을 수행하여 사업 운영에 심각한 +장애가 발생할 경우 잠재적 영향을 평가할 수 있음 +▶ ‌복구 계획은 정기적으로 검토·갱신되어야 하며, 중대한 사고 발생이나 운영·위험의 중대한 +변화가 있을 경우에도 검토·갱신 필요 + +--- + + +## 제3장 우주 보안모델 해설 | 189 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ K-RMF +• ‌CP-1 비상계획 : + +## 1. 시스템에 대한 비상계획을 다음의 내용을 포함하여 수립해야 한다. + + +가. 필수 임무와 관련 비상시 요구사항 식별 + +나. 복구목표, 복구 우선순위, 절차 제공 + +다. 비상 시 역할, 책임, 관련자(유지보수업체 포함) 연락처 + +라. 시스템 중단, 손상, 장애 시 필수 기능을 유지하기 위한 대책 + +마. 기 계획·구현된 보안 보호조치의 성능저하 없이 시스템 정상 복구 + +바. [조직이 지정한 직책]이 검토 및 승인 + +## 2. 비상계획 사본을 [조직이 지정한 관련 인원 및 관계 부서]에 전파해야 한다. + + +## 3. 사고처리 활동과 비상계획 활동을 조율해야 한다. + + +## 4. 시스템 비상계획을 [조직이 지정한 주기]마다 검토해야 한다. + +5. ‌시스템의 구성, 기능 및 운영개념 등이 변경되는 경우, 기존의 비상계획을 재검토하고 필요시 갱신해야 +한다. + +## 6. 비상계획 변경사항을 2번에서 [조직이 지정한 관련 인원 및 관계 부서]에 알려야 한다. + + +## 7. 비상계획을 무단 공개 및 수정으로부터 보호해야 한다. + +⊙ NIS2 +• ‌4.1 비즈니스 연속성 및 재해복구 계획 : 관련 기관은 사고 발생 시 적용할 수 있도록 업무연속성 및 +재해복구 계획을 수립·유지하여야 한다. +• ‌4.3 위기관리 : 위기관리 절차를 수립하고, 위기 대응 체계, 의사소통 절차, 책임·역할 분담, 복구 계획, +사후 평가 등을 포함해야 한다. +⊙ ISMS-P +• ‌2.12.1 재해, 재난 대비 안전조치 : 자연재해, 통신·전력 장애, 해킹 등 조직의 핵심 서비스 및 시스템의 +운영 연속성을 위협할 수 있는 재해 유형을 식별하고 유형별 예상 피해규모 및 영향을 분석하여야 한다. +또한 복구 목표시간, 복구 목표시점을 정의하고 복구 전략 및 대책, 비상시 복구 조직, 비상연락체계, 복구 +절차 등 재해 복구체계를 구축하여야 한다. +• ‌2.12.2 재해 복구 시험 및 개선 : 재해 복구 전략 및 대책의 적정성을 정기적으로 시험하여 시험결과, +정보시스템 환경변화, 법규 등에 따른 변화를 반영하여 복구전략 및 대책을 보완하여야 한다. + +--- + +190 | 우주 보안 모델 해설 및 적용사례집 +CP-02 +백업 및 이중화 관리 +항목 내용 +조직의 중요정보를 식별하고 주기적으로 백업하며 중요 네트워크, 시스템은 +이중화한다. +목적 +우주기업의 중요 정보 및 핵심 시스템의 가용성과 무결성을 보장하기 위해 +복구 목표를 고려한 백업 및 이중화 체계를 수립하고 운영 연속성을 확보하기 +위함이다. +주요 +확인사항 +y ‌중요 데이터·시스템을 복구 목표에 따라 주기적으로 백업하며, 백업본의 +기밀성·무결성·가용성을 고려하여 안전하게 관리하는가? +y ‌백업 및 이중화 시스템을 정기적으로 테스트하고, 그 결과를 반영하여 계획 및 +절차를 지속적으로 개선하는가? +세부 설명 +⊙ ‌중요 데이터·시스템을 복구 목표에 따라 주기적으로 백업하며, 백업본의 기밀성·무결성·가용성을 +고려하여 안전하게 관리해야 한다. +▶ ‌백업 대상 및 목표를 포함한 백업 계획을 수립해야 함 +• ‌백업 방법 및 절차, 백업담당자 및 책임자 지정을 포함한 백업 및 복구 절차를 수립하고 이행해야 함 +- 백업대상 선정기준 수립 +- 백업담당자 및 책임자 지정 +- 백업대상별 백업 주기 및 보존기한 정의 +- 백업방법 및 절차 : 백업시스템 활용, 매뉴얼 방식 등 +- 백업매체 관리(예 : 라벨링, 보관장소, 접근통제 등) +- ‌백업 복구 절차 : 주요 정보시스템의 경우 IT 재해 복구 측면에서 백업정보의 완전성, 정확성 +등을 점검하기 위하여 정기적인 복구 테스트 수행 필요 +- 백업관리대장 관리 +주요 백업 대상(예시) +y ‌중요정보(기밀정보, 탑재체정보 등) +y ‌중요 데이터베이스 +y ‌각종 로그(정보시스템 감사로그, 이벤트 로그, 보안시스템 이벤트 로그 등) +y ‌환경설정 파일 등 +출처 : ISMS-P 인증기준 안내서(KISA) + +--- + + +## 제3장 우주 보안모델 해설 | 191 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌백업 대상별 복구 목표시간(RTO) 및 복구 목표시점(RPO)을 고려하여 백업 주기 및 보존기한을 +정의해야 함 +▶ ‌백업 정보의 완전성과 보안을 확보해야 함 +• ‌구성 데이터 및 클라우드 컴퓨팅 서비스 환경에 저장된 데이터를 포함하여 백업 복사본이 +완전하고 정확한지 확인해야 함 +• ‌백업 정보의 기밀성 보호를 위해 암호화 메커니즘을 적용하는 등의 조치를 해야 함 +• ‌백업 복사본에 대해 자산 분류 수준에 따라 적절한 물리적 및 논리적 접근통제를 적용해야 함 +• ‌백업된 정보의 신뢰성 및 무결성 유지 여부를 정기적으로 확인해야 함 +▶ ‌중요정보가 저장된 백업매체의 경우 재해·재난에 대처할 수 있도록 백업매체를 물리적으로 +떨어진 장소에 소산해야 함 +• ‌중요정보가 저장된 백업매체는 운영 중인 정보시스템 또는 백업시스템이 위치한 장소로부터 +물리적으로 거리가 있는 곳에 소산 보관하고 관리대장으로 소산 이력을 관리 +- 소산일자(반출, 반입 등) +- 소산 백업매체 및 백업정보 내용 +• ‌소산이 적절히 이루어지고 있는지 여부에 대하여 주기적으로 점검하고, 소산장소에 대한 +보안대책을 마련해야 함 +- 화재, 홍수와 같은 자연재해에 대한 대책(예 : 내화금고, 방염처리 등) +- 소산장소 및 매체에 대한 접근통제 등 +⊙ ‌백업 및 이중화 시스템을 정기적으로 테스트하고, 그 결과를 반영하여 계획 및 절차를 지속적으로 +개선해야 한다. +▶ ‌복구 절차 및 복구 가능성을 정기적으로 테스트해야 함 +• ‌백업 복사본 및 이중화의 복구 가능성을 정기적으로 테스트하여 복구 조건에서 신뢰할 수 있는지 +확인해야 함 +• ‌복구 테스트를 실시하여 백업된 정보의 완전성과 정확성, 복구 절차의 적절성을 확인해야 함 +• ‌테스트 시나리오를 수립하고, 백업 정보의 샘플을 사용하여 기능의 정상 복구 및 작동 여부를 +확인해야 함 +▶ ‌테스트 결과를 반영하여 계획을 지속적으로 개선해야 함 +• ‌재해 복구 시험 계획을 수립하고 이에 따라 정기적인 시험을 실시해야 함 +• ‌테스트 결과를 문서화하고, 문제점 발견 시 개선 계획을 수립하고 이행해야 함 +• ‌시험 결과, 정보시스템 환경 변화, 법규 등에 따른 변화를 반영할 수 있도록 복구 전략 및 대책을 +정기적으로 검토하고 보완해야 함 + +--- + +192 | 우주 보안 모델 해설 및 적용사례집 +관련 기준 +⊙ K-RMF +• ‌CP-8 시스템 백업 : +1. ‌시스템 내 사용자가 관리하는 정보를 [RTO(복구목표시간)/RPO(복구목표시점)를 고려한 주기]마다 +백업해야 한다. +2. ‌시스템 내 시스템 수준의 정보를 [RTO(복구목표시간)/RPO(복구목표시점)를 고려한 주기]마다 +백업해야 한다. +3. ‌시스템 문서(보안 관련 문서 포함)를 [RTO(복구목표시간)/RPO(복구목표시점)를 고려한 주기]마다 +백업해야 한다. + +## 4. 저장되어 있는 백업 정보의 기밀성·무결성·가용성을 보호해야 한다. + +⊙ NIS2 +• ‌4.2 백업 및 이중화 관리 : 데이터의 백업 사본을 유지하고, 시설·네트워크 및 정보시스템·인력 등 충분한 +가용 자원을 제공하여 적절한 수준의 백업 체계를 확보하여야 한다. +⊙ ISMS-P +• ‌2.9.3 백업 및 복구관리 : 정보시스템의 가용성과 데이터 무결성을 유지하기 위하여 백업 대상, 주기, +방법, 보관장소, 보관기간, 소산 등의 절차를 수립·이행하여야 한다. 아울러 사고 발생 시 적시에 복구할 수 +있도록 관리하여야 한다. + +--- + + +## 제3장 우주 보안모델 해설 | 193 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제12절 +공급망 관리(SM) +SM-01 +공급망 보호 +항목 내용 +협력사로 인해 발생할 수 있는 보안 위협을 방지하기 위해 공급망 보안 정책을 +수립하여 협력사 선정을 위한 기준과 계약서를 마련하고, 협력사 명부를 작성 및 +최신화해야 한다. +목적 +우주 시스템 공급망의 잠재적 위험을 식별 및 완화하기 위해 포괄적인 보안 정책 +및 협력사 관리 체계를 수립하고 유지하기 위함이다. +주요 +확인사항 +y ‌공급망 보안 정책을 수립하고, 협력사 계약 시 협력사가 이행해야 할 +기술적·관리적 보안 요건을 명시하는가? +y ‌협력사 목록을 최신으로 유지하고, 이들의 보안 통제 이행 여부를 주기적으로 +점검하는가? +세부 설명 +⊙ ‌공급망 보안 정책을 수립하고, 협력사 계약 시 협력사가 이행해야 할 기술적·관리적 보안 요건을 +명시해야 한다. +▶ ‌공급망 보안 정책을 수립하고 이행해야 함 +• ‌공급망 보안 정책은 하드웨어 및 소프트웨어 공급업체에서 제공하는 네트워크 및 정보 시스템, +소프트웨어의 취약점을 제거 및 개선하는 내용을 포함해야 함 +• ‌정책 수립 시 우주기업의 공급망 내 역할을 식별하고 이를 협력사에게 명확히 전달해야 함 +• ‌시스템, 구성요소 또는 서비스를 구매하기 위해 조직의 구매 및 보안 규정을 준수해야 함 +▶ ‌협력사 선정 시 선정을 위한 객관적 기준을 정의하고 적용해야 함 +• ‌공급업체 및 서비스 제공업체 선정 및 계약 시 준수해야 하는 보안 기준을 공급망 보안 정책에 +포함해야 함 +• ‌보안 기준에는 다음 사항을 포함해야 함 +- 공급업체의 개발보안 절차를 포함한 사이버 보안 수준 평가 방법 및 절차 +- 서비스의 전반적인 사이버 복원력 및 제품의 보안 수준 +- 적용 가능한 경우, 특정 공급업체 종속을 피하기 위한 대체원 존재 여부 확인 +▶ ‌협력사 계약 시 필수적인 보안 요구사항을 계약서에 반영해야 함 + +--- + +194 | 우주 보안 모델 해설 및 적용사례집 +• ‌계약서에는 최소한 다음 보안 요구사항을 명시해야 함 +- 공급업체 직원이 갖추어야 하는 보안 인식 및 역량(보안 교육 수료 등) +- 공급업체의 침해사고 발생 시 지체 없이 조직에 통지해야 하는 의무 +- 공급업체가 공급한 하드웨어 및 소프트웨어의 취약점을 조치할 의무 +- 하도급 관련 요구사항 및 하도급 업체에 대한 사이버 보안 요구사항 +- 감사 권한 또는 감사 보고서를 받을 권한 +- 계약 종료 시 공급업체가 사업 수행 중 취득한 정보의 회수 및 폐기에 대한 의무 +⊙ ‌협력사 목록을 최신으로 유지하고, 이들의 보안 통제 이행 여부를 주기적으로 점검하고 개선해야 +한다. +▶ ‌조직은 주요 협력사(공급업체) 목록을 작성하고, 변경 사항을 반영하여 최신 상태로 유지 +• ‌협력사 목록에는 담당 부서, 담당자 연락처, 제공받는 제품·서비스·업무 범위를 포함 +▶ ‌공급망 보안 정책 및 관리 절차가 실제로 이행되고 있는지를 정기적으로 점검 +• ‌협력사의 보안 관리 수준, 사고 이력, 주요 보안 변화 사항을 주기적으로 확인하고 필요 시 개선을 +요구 +• ‌다음과 같은 경우에는 협력사 보안 관리 현황을 재검토하고 추가 조치를 수행 +- 협력사의 운영 환경 또는 제공 서비스에 중대한 변경이 발생한 경우 +- 협력사와 관련된 보안 사고 또는 보안 이슈가 발생한 경우. +▶ ‌협력사 점검 결과를 바탕으로 공급망 위험을 분석하고, 필요한 보완 조치를 이행 +• ‌협력사의 시스템, 제품, 서비스 변경으로 인해 발생할 수 있는 보안 위험을 평가 +• ‌협력사 보안 이슈가 확인된 경우, 계약 조건 변경, 개선 계획 요구, 추가 점검 등 조치 시행 + +--- + + +## 제3장 우주 보안모델 해설 | 195 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +관련 기준 +⊙ K-RMF +• ‌SM-1 공급망 보호 : 종합적인 정보보호 전략의 일환으로, 공급망 위협으로부터 시스템을 보호하기 위해 +[조직이 지정한 보안 보호조치]를 수행해야 한다. +• ‌SM-1-1 공급망 보호 | 획득 전략/도구/방법 : 공급업체로부터 시스템/구성요소/서비스를 구매하기 위해 +[조직이 지정한 획득 전략, 계약 도구, 조달 방법]을 사용해야 한다. +• ‌SM-3 구성요소 위조 방지 : +1. ‌위조된(정품이 아닌) 구성요소가 시스템에 유입되는 것을 탐지하고 예방하는 수단을 포함하는 위조 방지 +정책 및 절차를 개발하고 구현해야 한다. + +## 2. 위조된 시스템 구성요소를 [조직이 지정한 기관 또는 직책]에게 보고(통보)해야 한다. + +⊙ NIS2 +• ‌5.1 공급망 보안 정책 : 공급망 보안 정책을 마련·운영하고, 조직의 역할을 공급업체·서비스 제공업체에 +명확히 알린다. +• ‌5.2 공급업체·서비스 제공자 디렉토리 : 직접 공급업체 및 서비스 제공업체의 등록부를 유지·관리하고 최신 +상태로 갱신하고 관리해야 한다. + +--- + +196 | 우주 보안 모델 해설 및 적용사례집 +SM-02 +인수 전 평가 +항목 내용 +시스템/구성요소/서비스의 선정/인수/업데이트 전에 보안취약점 점검 및 +조치하고 인수 테스트를 통해 구성요소의 위조를 검사해야 한다. +목적 +시스템·구성요소·서비스 도입 및 변경 과정에서 보안 취약점이 사전에 +식별·조치되었는지를 검증하여, 취약한 상태의 자산이 운영 환경에 유입되는 +것을 방지하기 위함이다. +주요 +확인사항 +y ‌우주기업은 시스템·구성요소·서비스 선정·인수·업데이트 전에 취약점 점검의 +수행 및 조치를 요구하는가? +y ‌우주기업은 인수테스트를 통해 구성요소의 위조를 검사하고 있는가? +세부 설명 +⊙ ‌우주기업은 시스템·구성요소·서비스 선정·인수·업데이트 전에 취약점 점검의 수행 및 조치를 +요구해야 한다. +▶ ‌우주기업은 시스템, 구성요소 또는 서비스를 선정·도입·업데이트하기 전에 취약점 점검을 수행 +• ‌점검 대상에는 직접 구매한 하드웨어·소프트웨어뿐만 아니라, 클라우드 서비스(IaaS, SaaS 등), +외부 개발 소프트웨어, 외주 개발 결과물 등도 포함 +• ‌취약점 점검 결과는 문서로 남기고, 인수 또는 도입 여부에 대한 승인 근거로 활용 +▶ ‌취약점이 식별된 경우, 조치를 전제로 한 인수·도입 기준 적용 +• ‌인수 전에 반드시 조치해야 하는 취약점과 조건부 인수가 가능한 항목을 구분하는 기준을 마련 +• ‌취약점 조치가 필요한 경우, 공급업체 또는 개발자에게 패치·설정 변경·업데이트 등을 요구 +⊙ ‌우주기업은 인수테스트를 통해 구성요소의 위조를 검사해야 한다. +▶ ‌공급업체가 제공한 하드웨어, 소프트웨어, 펌웨어, 라이브러리가 사전에 합의된 사양 및 +산출물과 일치하는지 확인 +▶ ‌해시값, 서명 정보, 버전 정보, SBOM 등을 활용해 구성요소의 변경·위조 여부를 점검 +▶ ‌취약점 점검 결과에 따라 공급업체에게 요구한 취약점 조치가 실제로 이행되었는지 조치 여부를 +확인 +• ‌패치 적용, 설정 변경, 보안 기능 보완 등이 실제 시스템에 반영되었는지 점검 +• ‌조건부 인수의 경우, 잔여 조치 항목과 기한을 명확히 하고 관리 대상으로 지정 +▶ ‌정합성 또는 무결성에 이상이 확인된 경우, 원인 분석 및 시정 조치 전까지 인수를 제한하고, 필요 +시 공급업체에 소명 자료 또는 재제공을 요구 + +--- + + +## 제3장 우주 보안모델 해설 | 197 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +▶ ‌인수 테스트 결과와 잔존 위험은 담당 부서 또는 승인 권한자가 확인 +• ‌잔존 위험을 수용하는 경우, 그 판단 근거를 기록 +• ‌모든 조치 및 승인 절차가 완료된 이후에만 운영 부서로 최종 인수인계를 수행 +관련 기준 +⊙ K-RMF +• ‌SM-1-4 공급망 보호 | 선정/인수/업데이트 전 평가 : 시스템/구성요소/서비스의 선정/인수/업데이트 +전에 보안평가를 수행해야 한다. +• ‌SM-1-12 공급망 보호 | 약점 또는 결함을 처리하는 프로세스 : 공급망 요소를 대상으로 한 평가 중 식별된 +약점, 결함을 처리하는 프로세스를 수립해야 한다. + +--- + +198 | 우주 보안 모델 해설 및 적용사례집 +SM-03 +모든 출처 정보 사용 +항목 내용 +시스템/구성요소/서비스의 (잠재적) 공급업체를 대상으로 모든 출처 정보 (all- +source intelligence) 분석을 수행해야 한다. +목적 +SBOM을 통해 소프트웨어 구성 요소의 투명성을 확보하고, 신규 취약점 및 +공급망 위험을 지속적으로 식별하고 추적·관리하기 위함이다. +주요 +확인사항 +y ‌우주기업은 시스템/구성요소/서비스를 공급받을 시 소프트웨어 구성 요소 +목록(SBOM)을 요구하는가? +y ‌소프트웨어 구성 요소 목록(SBOM)을 활용하여 구성 요소 투명성을 확보하고 +지속적으로 관리하는가? +세부 설명 +⊙ ‌우주기업은 시스템/구성요소/서비스를 공급받을 시 소프트웨어 구성 요소 목록(SBOM, Software +Bill of Materials) 제출을 요구해야 한다. +▶ ‌시스템·구성요소·서비스 도입 시 공급업체로부터 SBOM 제출을 요구하도록 정책에 명시 +▶ ‌SBOM 제출 요구 사항을 계약 조건 또는 발주 문서에 포함 +▶ ‌SBOM에는 최소한 다음 정보가 포함되도록 요구 +• ‌오픈소스 및 상용 소프트웨어 구성 요소 식별 정보 +• ‌구성 요소 명칭, 버전, 라이선스 정보 +• ‌의존성 관계(직접·간접 포함 여부) +▶ ‌SBOM 형식은 표준 포맷(SPDX, CycloneDX 등) 중 하나를 사용하도록 요구 +▶ ‌신규 도입, 주요 업데이트, 버전 변경 시 SBOM 재제출 요구 +▶ ‌SBOM 미제출 또는 불완전 제출 시 도입 보류 또는 보완 요구 절차 정의 +⊙ ‌우주기업은 소프트웨어 구성요소 목록(SBOM)을 활용하여 구성 요소 투명성을 확보하고, +지속적으로 관리한다. +▶ ‌제출받은 SBOM을 활용하여 시스템 내 소프트웨어 구성요소 현황 식별·관리 +▶ ‌SBOM 정보를 기준으로 사용 중인 구성요소와 실제 설치 상태의 일치 여부를 검증 +▶ ‌SBOM에 포함된 구성요소에 대해 보안취약점(CVE, Common Vulnerabilities and +Exposures)을 주기적으로 점검 +▶ ‌신규 취약점 공개 시 다음 사항 수행 필요 +• ‌해당 취약점이 조직 시스템에 영향을 미치는지 SBOM 기반으로 식별 + +--- + + +## 제3장 우주 보안모델 해설 | 199 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌영향이 있는 경우 공급업체 조치 여부 및 대응 일정 확인 +▶ ‌공급업체의 취약점 조치 미수행 또는 지연 시 추가 대응(패치 요구, 대체 검토 등) 수행 +▶ ‌비인가되거나 출처가 불분명한 소프트웨어 구성 요소가 시스템에 포함되지 않도록 관리 +▶ ‌SBOM 및 관련 검토 결과를 문서화하여 관리하고, 필요 시 감사·점검 자료로 활용 +관련 기준 +⊙ K-RMF +• ‌SM-1-5 공급망 보호 | 모든 출처 정보 (all-source intelligence)의 사용 : 시스템/구성요소/서비스의 +(잠재적) 공급업체를 대상으로 모든 출처 정보(all-source intelligence) 분석을 수행해야 한다. +⊙ NIS2 +• ‌5.2 공급업체·서비스 제공자 디렉토리 : 직접 공급업체 및 서비스 제공업체의 등록부를 유지·관리하고 최신 +상태로 갱신하고 관리해야 한다. + +--- + +200 | 우주 보안 모델 해설 및 적용사례집 +SM-04 +변조/위조 방지 및 탐지 +항목 내용 +시스템/구성요소/서비스의 변조 및 위조를 방지하기 위하여 주기적으로 +점검해야 한다. +목적 +공급업체의 개발·배포 과정과 인수·운영 단계에서 무결성을 검증하여 공급망을 +통해 발생할 수 있는 위·변조 위험을 식별하고 차단하기 위함이다. +주요 +확인사항 +y ‌우주기업은 시스템·구성요소·서비스 공급 시, 공급업체의 개발·배포 과정에 +위·변조 방지 절차가 포함되어 있는지를 확인하는가? +y ‌우주기업은 인수 및 운영 과정에서 시스템·구성요소·서비스의 무결성을 +검증하기 위한 점검 절차를 운영하는가? +세부 설명 +⊙ ‌우주기업은 시스템·구성요소·서비스 공급 시, 공급업체의 개발·배포 과정에 위·변조 방지 절차가 +포함되어 있는지를 확인한다. +▶ ‌공급업체가 소프트웨어를 개발할 때 형상관리 체계를 운영하는지 확인 +• ‌소스코드 변경 이력과 변경 이유가 기록되고 승인되는지 점검 +• ‌빌드 및 배포 산출물의 변경 이력이 추적되는지 확인 +▶ ‌소프트웨어 배포 전 무결성을 검증하는 절차가 정의·운영되는지 확인 +• ‌전자서명, 해시(Hash) 값 생성·검증 같은 무결성 확인 방법이 사용되는지를 확인 +• ‌무결성 검증 결과가 문서로 기록되고 보관되는지를 확인 +▶ ‌위·변조 발생 시 탐지·보고·대응 절차가 마련되어 있는지 점검 +• ‌변조 의심 발견 시 보고체계, 대응조치, 영향범위 평가 절차가 정의되어 있는지 확인 +⊙ ‌우주기업은 인수 및 운영 과정에서 시스템·구성요소·서비스의 무결성을 검증하기 위한 점검 절차를 +운영한다. +▶ ‌무결성 검증을 위해 공급업체로부터 해시값 또는 전자서명 정보를 받도록 요구 +• ‌도입 전 SBOM 또는 릴리즈 정보와 함께 해시값/서명 정보를 제공받도록 계약서 또는 발주서에 +반영 +• ‌해시값/서명 정보는 릴리즈된 소프트웨어·구성요소의 무결성을 주기적으로 검증하는 기준으로 +활용 +▶ ‌인수 테스트 또는 운영 중 무결성 점검 절차를 운영 +• ‌인수 테스트 단계에서 제공받은 해시값과 실제 설치된 파일의 해시값을 비교 검증 + +--- + + +## 제3장 우주 보안모델 해설 | 201 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +• ‌주요 업데이트, 패치 적용 시에도 무결성 검증을 수행 +• ‌무결성 불일치가 확인된 경우에는 배포 중단, 공급업체 확인 및 수정 요구, 또는 대체 방안 마련 +같은 대응 절차를 시행 +▶ ‌무결성 검증 결과와 대응 현황을 기록·관리 +• ‌무결성 점검 결과는 운영 기록에 남기고, 정상/비정상 여부를 명확히 구분하여 보관 +• ‌점검 결과를 바탕으로 위험 판단 및 재발 방지 대책을 수립 +관련 기준 +⊙ K-RMF +• ‌SM-2-1 변조 방지와 탐지 | 시스템개발 수명주기 단계별 변조 방지 : 시스템개발 수명주기의 여러 단계에 +걸쳐 변조 방지 기술과 기법을 적용해야 한다. +• ‌SM-2-2 변조 방지와 탐지 | 시스템, 구성요소 또는 장비의 점검 : 변조를 방지하기 위해 [조직이 지정한 +시스템, 구성요소, 장비, 또는 무작위]를 [조직이 지정한 주기 또는 필요한 상황]에 점검해야 한다. +• ‌SM-3-2 구성요소 위조 방지 | 구성요소 서비스 및 수리 간 형상 통제 : [조직이 지정한 구성요소]의 입고 +전 형상과 출고 후 형상을 동일하게 유지해야 한다. + +--- + +[오] + +--- + + +## 제3장 우주 보안모델 해설 | 203 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +우주 보안모델 +적용 사례 + +## 1. A우주기업 아키텍처 구성요소 + + +## 2. A우주기업 보안취약점 점검 절차 + + +## 3. A우주기업 주요 보안 요구사항 + + +## 4. 보안모델 적용을 통한 기대효과 + +제 4 장 + +--- + +204 | 우주 보안 모델 해설 및 적용사례집 +본 장에서는 민간 우주기업을 대상으로한 우주 보안모델 적용 사례를 설명한다. 최근 민간 +우주산업이 급성장하고 GSaaS 서비스를 이용하는 소규모 우주기업이 증가되는 반면, 사이버보안 +위협은 증가되고 있음에 따라 GSaaS를 제공하는 A우주기업의 보안 취약점 점검을 진행하고 +보안대책을 제시하여 보안 수준을 향상시키는데 도움이 되고자 하였다. +제1절 +A우주기업 아키텍처 구성요소 +점검 대상인 A우주기업은 우주 소프트웨어를 개발 및 공급하는 전문기업으로, 자체 보유하고 +있는 위성 안테나와 웹기반의 지상국 플랫폼을 통해 미션 예약 및 운영 서비스를 제공한다. +가. GSaaS 구성요소 +A우주기업에서는 GSaaS 아키텍처의 구성요소로 위성 안테나, 예약 및 스케쥴링 시스템, +DB서버가 식별되었으며, 이외 주요 인프라로 미션 운영센터가 식별되었다. + +## 제4장 + +우주 보안모델 적용 사례 + +--- + + +## 제4장 우주 보안모델 적용 사례 | 205 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +나. 우주 공급망 구성요소 +A우주기업은 자체개발을 통해 GSaaS를 제공하고 있으며, 우주 공급망 아키텍처의 +코드DB(코드 저장소)가 식별되었고, 이외 주요 인프라로 소프트웨어 개발 PC가 식별되었다. + +--- + +206 | 우주 보안 모델 해설 및 적용사례집 +제2절 +A우주기업 보안취약점 점검 절차 +A우주기업은 자체개발한 GSaaS서비스를 통해 고객사의 민간 인공위성의 미션 예약 및 운영을 +서비스하고 있으며, 다음과 같은 절차로 GSaaS와 소프트웨어 공급망 관점에서 관리/물리 영역, +기술 영역의 보안 취약점 점검을 수행하였다. +그림 8 +A우주기업 보안 취약점 점검 절차 +우주기업 보안환경 조사 단계에서는 우주기업 현황을 분석하고 우주시스템 관련 자산을 +파악하였다. 보안취약점 점검 계획을 수립 후 보안점검 단계에서는 우주보안 체크리스트 +기반으로 우주보안 수준을 점검하고 서버, 네트워크, 웹 보안 취약점 진단과 공급망 보안 진단을 +수행하였다. 보안점검 결과 파악된 보안취약점에 대한 보호대책을 수립하고 향후 수행해야 할 +이행과제를 제시하였다. + +--- + + +## 제4장 우주 보안모델 적용 사례 | 207 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +제3절 +A우주기업 주요 보안 요구사항 +우주보안 체크리스트를 기준으로 A우주기업의 GSaaS와 S/W공급망 보안취약점을 점검한 +결과 대부분의 영역에서 취약점이 발견되었으며, 발견된 취약점으로 인한 위협 및 보안 요구사항, +이행 조치 사항은 다음과 같다. +가. A우주기업 GSaaS영역 주요 위협 및 보안 요구사항 +•AC-08 원격 접근 통제 +보안 위협 +필요에 의해 외부에서 내부로 접근 시 VPN을 통해 접근하나 외부 단말에 +대한 보안 요구사항 감사 및 감시통제가 없어 내부에 네트워크에 접속한 +PC에 침해 발생 시 내부로 위협 전파 가능 +보안 요구사항 +VPN을 통해 외부자 단말이 내부 네트워크 접근 시 단말 보안 현황 점검 및 +미흡 시 거부 +이행조치 +외부 접속 단말에 대해 보안 요구사항 수립, 접속 단말에 대한 보안 강제화는 +중/장기 과제로 별도 솔루션 구축 계획 수립 예정 +•SC-01 경계보호 +보안 위협 +웹기반의 GSaaS를 서비스하고 있으나 DMZ영역의 미구축, 망분리 미흡 +등으로 인해 IT시스템에 대한 무단 접근이나, 서비스 거부 등의 위협 확인 +보안 요구사항 +웹서비스를 위한 DMZ영역 구축 및 WAF도입, 네트워크 리디자인, IDS/ +IPS구축, 보안 관제 도입 +이행조치 +업무 인프라(CCTV, VoIP)망에 대한 QoS설정을 통해 해당 서비스로 인한 +서비스 거부 위협에 대한 조치를 완료 하였으며, 내부 네트워크에 DMZ영역 +구축, 주요 인프라에 대한 망분리, IDS/IPS구축 및 보안 관제 계획은 +중/장기 과제로 이행 예정 + +--- + +208 | 우주 보안 모델 해설 및 적용사례집 +•SC-04 통신보안 +보안 위협 +방화벽을 사용해 네트워크 트래픽을 통제하고 있으나 일부 과도하게 허용된 +정책으로 인해 IT시스템에 대한 무단 접근 및 악성코드 감염 위협 확인 +보안 요구사항 +방화벽 정책 강화, IDS/IPS구축, 보안 관제 도입 +이행조치 +위험IP, 도메인 차단, 과도하게 허용된 정책 제거 등 방화벽 정책 강화, +IDS/IPS구축 및 보안 관제 계획은 중/장기 과제로 이행 예정 +•SC-06 협업 컴퓨팅 장치 +보안 위협 +회의실 등 공용공간에서 외부자가 접근 가능한 공용PC에서 내부로 +원격접속이 가능하여 IT시스템에 대한 무단 접근 위협 확인 +보안 요구사항 +공용PC에 대한 접근 통제 강화 및 외부자용 네트워크 분리 +이행조치 +방화벽 정책 강화로 공용PC 등 외부자 네트워크의 내부 네트워크 접근 차단 +•SI-01 취약점 점검 및 결함 교정 +보안 위협 +취약점 점검 부재로 외부 침입 및 내부 유출 등 보안 위협을 유발하는 취약점 +미식별 +보안 요구사항 +주기적인 보안 취약점 점검 +이행조치 +본 사업을 통해 취약점 점검 및 조치 계획 수립 +•SI-02 악성코드 방지 +보안 위협 +일부 시스템에 백신설치 누락으로 악성코드 감염 위협 확이 +보안 요구사항 +내부 전 자산에 백신 설치 +이행조치 +백신 설치 누락 자산 확인 및 조치 완료 + +--- + + +## 제4장 우주 보안모델 적용 사례 | 209 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +•PS-02 보안인식 교육 훈련 +보안 위협 +내부 임직원의 보안인식 교육 훈련 부재로 피싱 등 사회공학적 공격이나 +랜섬웨어 등의 공격에 노출 +보안 요구사항 +주기적인 보안식 제고 교육 및 훈현 시행 +이행조치 +본 사업을 통해 내부 임직원의 보안 인식이 향상되었으며, 주기적으로 +보안인식 제고 교육 및 악성메일 훈련 등 계획 수립 예정 +•PE-01 물리적 접근통제 +보안 위협 +주요 설비에 대해 출입이력 검토 절차가 부재하여 비인가자의 주요 설비 +출입 발생 위협 확인 +보안 요구사항 +서버실 등 주요설비에 대한 출입이력 검토 절차 수립 및 주기적 수행 +이행조치 +서버실 등 주요설비에 대한 출입이력 검토 절차 수립 및 주기적 수행 + +- ‌이행조치: 주요 설비를 식별하였으며 검토 절차 수립 중 +•SG-01 보안 정책 수립 +보안 위협 +보안 정책 및 지침에 대해 주기적인 검토 및 개정이 부재하고, 전파되지 않아 +내부 임직원의 보안에 대한 인식 부족 +보안 요구사항 +주기적인 보안 정책 및 지침 검토, 재·개정 및 전파 +이행조치 +정책, 지침 확인 및 검토, 재·개정 계획 수립 중 +•SG-02 보안 역할 및 책임 정의 +보안 위협 +보안 담당자의 역할 및 책임에 대한 검토 부재 +보안 요구사항 +주기적인 보안 정책 및 지침 검토, 재·개정 및 전파 +이행조치 +정책, 지침 확인 및 검토, 재·개정 계획 수립 중 + +--- + +210 | 우주 보안 모델 해설 및 적용사례집 +•SG-03 자산 관리 +보안 위협 +우주 관련 주요 자산에 대한 자산평가 부재로 주요 보호대상 자산 미식별 +보안 요구사항 +우주 관련 자산에 대한 주기적인 자산 현행화 및 자산 평가 +이행조치 +우주 관련 자산 식별 및 평가 계획 수립 중 +•SG-04 법적 요구사항 준수 +보안 위협 +GSaaS를 서비스하는 과정에서 발생할 수 있는 준거성 검토 부재 +보안 요구사항 +개인정보 등 웹서비스에서 발생할 수 있는 준거성 검토 및 규정 반영 +이행조치 +GSaaS에서 발생할 수 있는 법적 준거성 검토 중 +나. A우주기업 우주 공급망 영역 주요 위협 및 보안 요구사항 +•SO-08 개발 시험 및 평가 +보안 위협 +GSaaS소프트웨어의 소스코드 보안취약점 점검 및 침투테스트 수행 결과 +다수의 보안 취약점이 발견 +보안 요구사항 +소스코드 검사 도구 도입 및 활용, 주기적인 침투 테스트 수행 +이행조치 +소스코드 보안취약점 점검 및 침투테스트 결과에 대한 취약점 조치 완료, +주기적인 소프트웨어 보안 취약점 점검 계획 수립 및 소스코드 검사도구 +도입은 중/장기 과제로 계획 수립 예정 +•SO-09 기능 최소화 및 사용자 설치 소프트웨어 통제 +보안 위협 +소프트웨어 개발 시 협업을 위해 상용 메신저를 사용하며 별도 소프트웨어 +설치에 대한 통제가 미흡하여, 내부 정보 유출 및 악성코드 위협 확인 +보안 요구사항 +협업이 필요한 업무 부서는 내부에 별도 구축된 협업도구 사용, 소프트웨어 +설치에 대한 정책 수립 및 감사 +이행조치 +외부 상용 메신저에 대한 보안 정책 수립 및 협업 필요 시 내부 그룹웨어 +메신저 사용 장려, 보안 인식교육을 통해 비인가 소프트웨어 설치 위험 교육, +외부 상용 메일/메신저 차단은 중/장기 과제로 별도 솔루션 구축 계획 수립 +예정 + +--- + + +## 제4장 우주 보안모델 적용 사례 | 211 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +•SM-02 인수전 평가 +보안 위협 +소프트웨어 개발 시 오픈소스 라이브러리 사용에 대한 별도 정책이 +부재하였고, 특히 GSaaS소프트웨어 개발에 사용되는 오픈소스 +라이브러리에서 알려진 취약점이 발견되어 해당 취약점을 이용한 +IT시스템이나 애플리케이션의 논리적 손상이 발생할 수 있는 위협 확인 +보안 요구사항 +개발 프로세스 SDLC 전영역에서 보안 적용, SBOM검사도구 도입 및 활용 +이행조치 +SBOM검사도구를 사용하여 오픈소스 취약점 조치, 개발 프로세스 보안 +적용 및 SBOM검사도구 도입은 중/장기 과제로 구축 계획 수립 예정 + +--- + +212 | 우주 보안 모델 해설 및 적용사례집 +제4절 +보안모델 적용을 통한 기대효과 +민간 우주기업을 대상으로 보안취약점을 진단하고 보안대책을 적용한 후 기대효과는 다음과 +같다. + +--- + + +## 제4장 우주 보안모델 적용 사례 | 213 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +■ 용어 +⊙ ‌공격 벡터 (attack vector) : 공격자가 컴퓨터나 네트워크에 침입하기 위해 사용하는 진입 +경로와 방법 +⊙ ‌공급망(supply chain) : 원재료의 조달에서부터 완제품의 최종 소비에 이르기까지, 재화와 +서비스 및 정보의 흐름이 이루어지는 연결망 +⊙ ‌다중 인증(MFA) : 최소 두 가지 이상의 인증 요소를 이용하여 본인 여부를 인증하는 것 +⊙ ‌방화벽 : 내부 네트워크(또는 시스템)를 보호하기 위해 외부에서 들어오는 트래픽을 사전에 +정의한 보안 정책에 따라 허용하거나 차단하는 보안 시스템 +⊙ ‌사이버보안 프레임워크(CSF) : 사이버보안 관련 위험을 관리하기 위한 표준, 지침, 모범 +사례로 구성된 프레임워크 +⊙ ‌서비스 거부 : 시스템 리소스에 대한 허가된 액세스의 방지 또는 중단 또는 시스템 동작 및 +기능의 지연 +⊙ ‌식별(Identification) : 사람이나 객체의 유일성을 확인하는 절차, 또는 사용자 식별 +부호(ID). 식별, 신원 증명, 신원 확인 등의 뜻으로, 패스워드와 함께 다수의 사용자가 +이용하는 컴퓨터 시스템이나 통신망에서 정당한 사용자임을 인중받는 절차의 필수요소 +⊙ ‌악성코드 : 시스템 또는 사용자에 대한 정보 수집, 시스템 데이터 파괴, 시스템 침입을 위한 +발판 마련, 시스템 데이터 및 보고서 위조, 시스템 운영 및 유지 보수 담당자에게 시간을 +낭비하는 목적으로 작성된 프로그램 또는 코드 +용어 및 약어 + +--- + +214 | 우주 보안 모델 해설 및 적용사례집 +⊙ ‌암호화 : 암호 키(특정의 비트열)를 사용하여 정보를 암호문으로 변환하는 것 +⊙ ‌위협 : 보안을 위반하여 해를 입힐 수 있는 상황, 능력, 행동 또는 이벤트가 있을 때 존재하는 +보안 위반 가능성 +⊙ ‌인증(Authentication) : 다중 사용자 컴퓨터 시스템 또는 망 운용 시스템에서 시스템이 단말 +작동 개시(log-on) 정보를 확인하는 보안 절차 +⊙ ‌전자서명 : 서명자의 신원과 서명 사실을 확인하기 위하여 전자문서에 첨부되거나 +논리적으로 결합된 전자 형태의 정보. 전자서명은 네트워크를 통해 전달되는 디지털 메시지 +또는 문서에 대한 진위성(authenticity), 무결성(integrity), 부인 방지(non-repudiation) +특성을 제공 +⊙ ‌접근통제 : 미리 수립된 규칙과 요청자에 관련된 특정 권한 또는 인가에 기초하여 운영자가 +자원, 시설, 서비스 또는 정보에 대한 접근을 제한할 수 있는 절차 +⊙ ‌중간자 공격 : 통신하고 있는 두 당사자 사이에 끼어들어 당사자들이 교환하는 공개정보를 +자기 것과 바꾸어버림으로써 들키지 않고 도청을 하거나 통신내용을 바꾸는 수법 +⊙ ‌최소권한 : 사용자 또는 프로세서는 특정 임무를 수행하는 데 필요한 최소한의 제한적인 +권한만을 할당받아야 하고 이들 권한은 특정 임무를 수행하는 동안에만 할당되어야 한다는 +정보 보호 원칙 +⊙ ‌취약점 : 시스템, 소프트웨어 또는 구성요소에 존재하여 공격자가 악용할 수 있는 보안상의 +약점 +⊙ ‌키 관리 : 보안 정책에 의해 키(key)의 생성, 등록, 인가, 등록 취소, 분배, 설치, 저장, 압축, +폐지, 유도 및 파괴를 감독하는 것 +⊙ ‌탑재체(Payload) : 위성의 내부에 위치해 있으면서 부여된 임무를 실제적으로 수행하는 +위성의 한 부분 +⊙ ‌프로토콜 : 시스템들 간의 어떤 종류의 연관성(예를 들어, 통신)을 구현하고 제어하기 위한 +일련의 규약들(즉, 포맷들 및 절차들) +⊙ ‌CMMC : 조직의 사이버보안 성숙도를 평가하기 위한 인증 체계 +⊙ ‌GSaaS : 위성통신에 요구되는 안테나와 지상국 인프라를 빌려서 사용하는 서비스 +⊙ ‌ISMS-P : 정보보호 및 개인정보보호 관리체계에 대한 국내 인증 제도 +⊙ ‌SBOM : SW 구축에 사용되는 다양한 구성요소의 세부 사항과 공급망 관계를 포함하는 +공식적인 기록 + +--- + +10능 +0 +ACL +Access +Control +List +제장개요 +0 +AEAD +Authenticated +Encryption +With +Associated +Data +API +Application +Programming +Interface +0 +CCsDs +Consultative +Committee +for +Space +Data +Systems +0 +CMMC +Cybersecurity +Maturity +Model +Certification +0 +CSF +Cyber +Security +Frameworks +0 +CU +Controlled +Unclassified +Information +0 +CVE +Common +Vulnerabilities +and +Exposures +0 +Cvss +Common +Vulnerability +Scoring +System +이 +CWE +- +Commor +Weakness +Enumeration +이 +DFARS +:Defense +Federal +Acquisitior +Regulation +Supplement +이 +DLP +Data +Loss +Preventior +Dos +Denial +이 +Service + +## 제3장우주보안모텔해설 + +0 +DRM +Digital +Rights +Management +0 +FCI +Federal +Contract +Information +0 +GCM +Galois/Counter +Mode +0 +GSaas +Ground +Statior +as +Service +HMAC: Hash +based +Message +Authentication +Code +Hypertext +Secure +코부웅보금우국호 +이 +HTTPS +Transfer +Protocol +O IDS +Intrusion +Detection +System +OP: +nternet +Protocol +O Ips +Intrusion +Prevention +System +O IPsec +Internet +Protocol +Security +0 +ISMS-P: +Information +Security +Management +System +Personal +information + +## 제4장 + +우주 +적용 +사례 +1215 + +--- + +O JSP +Java +Server +Page +OKP +Key +Performance +Indicator +O K-RMF +Korea +Risk +Management +Framework +오 +MDM +Mobile +Device +Management +요 +MFA +:Multi- +Factor +Authentication +O MITM +Attack +Man-In- +The- +-Middle +Attack +O Moc: Mission +Operations +Center +이 +mTLS +:mutua +Transport +Layer +Security +이 +NAC +: +Network +Access +Control +이 +NIS2 +Network +and [ +Information +Security +Directive 2 +O NIST +National +Institute +Standards +and +Technology +이 +이 +NVD +: +National +Vulnerability +Database +OTP +One +Time +Password +P2P +: +Peer- +-to-- +-Peer +PAM +Privileged +Access +Management +요 +Pcc +Payload +Control +Center +0 +RPO +: +Recovery +Point +Objective +있 +RTCP +RTP +Control +Protocol +RTO +Recovery +Time +Objective +0 +RTP +Real--time +Transport +Protocol +0 +SBOM +Software +Bill +이 +Materials +0 +SDLC +System +Development +Life +Cycle +요 +SFTP : Secure +File +Transfer +Protocol +0 +SIEM +Security +Information +and +Event +Management +SIP +Session +Initiation +Protocol +216 +우주보안모델해설및적용사례집 + +--- + + +## 제4장 우주 보안모델 적용 사례 | 217 + +제 +1 +장 +개 +요 +제 +2 +장 +우 +주 +보 +안 +모 +델 +제 +3 +장 +우 +주 +보 +안 +모 +델 +해 +설 +제 +4 +장 +우 +주 +보 +안 +모 +델 +적 +용 +사 +례 +⊙ ‌SSID : Service Set Identifier +⊙ ‌SSH : Secure Shell +⊙ ‌TCP : Transmission Control Protocol +⊙ ‌TLS : Transport Layer Security +⊙ ‌UPS : Uninterruptible Power Supply +⊙ ‌VLAN : Virtual Local Area Network +⊙ ‌VoIp : Voice over Internet Protocol +⊙ ‌VPN : Virtual Private Network +⊙ ‌WIPS : Wireless Intrusion Prevention System +⊙ ‌XML : eXtensible Markup Language + +--- + +우주 보안모델 해설 및 적용사례집 +인 쇄 | 2025 년 12 월 +발 행 | 2025 년 12 월 +발행처 | 한국인터넷진흥원 +(58324) 전라남도 나주시 진흥길 9 \ No newline at end of file diff --git "a/\353\254\270\354\204\234/\354\235\270\352\263\265\354\247\200\353\212\245_AI_\353\263\264\354\225\210_\354\225\210\353\202\264\354\204\234.md" "b/\353\254\270\354\204\234/\354\235\270\352\263\265\354\247\200\353\212\245_AI_\353\263\264\354\225\210_\354\225\210\353\202\264\354\204\234.md" new file mode 100644 index 0000000..a3a959b --- /dev/null +++ "b/\353\254\270\354\204\234/\354\235\270\352\263\265\354\247\200\353\212\245_AI_\353\263\264\354\225\210_\354\225\210\353\202\264\354\204\234.md" @@ -0,0 +1,14223 @@ +# 인공지능(AI) 보안 안내서(정오 수정).pdf + +> Converted: 2026-03-30 03:57 + + +--- + + + +![이미지 1-0](images/p0001_img0.png) + + +![이미지 1-1](images/p0001_img1.png) + + +--- + +일러두기 +본 안내서는 AI 기술 및 서비스와 관련된 보안 위협을 선제적으로 예방하고 데이터와 +시스템의 안전성을 확보하며, 이를 통해 개발자, 서비스 제공자, 이용자 모두가 신뢰할 수 +있는 AI 환경을 조성하는데 활용하고자 작성된 것입니다. +본 안내서는 과학기술정보통신부와 한국인터넷진흥원의 정책연구 사업의 연구 결과로서 +내용의 무단 전재를 금합니다. +아울러, 안내서의 내용을 가공․ 인용하는 경우에는 반드시 ‘과학기술정보통신부・한국인터넷 +진흥원 《인공지능(AI) 보안 안내서》’의 출처를 밝혀 주시기 바랍니다. +본 안내서는 AI 서비스 및 제품을 개발하는 과정이나 서비스 제공과정에서 참고 자료로 +활용할 수 있도록 편찬 되었습니다. 본 안내서 활용 시에는 기업의 업무 환경과 상황, 모 +델이나 시스템 개발 목적, 서비스 내용 등을 고려하여 필요하신 내용을 취사 선택하여 활 +용하시기 바랍니다. +AI와 관련된 기술은 계속적으로 발전하고 있고 AI 시스템의 취약점과 이에 따른 위협 공 +격도 다양해지고 있기 때문에, 「인공지능(AI) 보안 안내서」는 앞으로도 지속해서 최신 기 +술 동향과 정보보안 위협 동향, 침해사고 사례 등을 반영해서 보안요구사항과 검증항목 +내용을 업데이트해 나갈 예정입니다. + + +![이미지 2-0](images/p0002_img0.png) + + +--- + +체크리스트 요약 +1 AI 개발자를 위한 보안 체크리스트 iv +2 AI 서비스 제공자를 위한 보안 체크리스트 vii +## 제1 장 개요 +1. 「인공지능(AI) 보안 안내서」 개발 목적 +2. AI 보안 위협 +3. AI 보안 안내서의 필요성 및 적용범위 +## 제2 장 AI 개발자를 위한 보안 안내서 + +## 1. 개요 + +2. AI 개발자 대상 보안 프레임워크 +3. AI 개발자를 위한 보안 요구사항 및 검증항목 +## 제3 장 AI 서비스 제공자를 위한 보안 안내서 + +## 1. 개요 + +2. AI 서비스 제공자 대상 보안 프레임워크 +3. AI 서비스 제공자를 위한 보안 요구사항 및 검증항목 +## 제4 장 AI 이용자를 위한 보안 수칙 + +## 1. 개요 + +2. AI 이용자에게 발생할 수 있는 보안위협 사례 +3. AI 서비스 이용자를 위한 보안 수칙 +참고문헌 +부록 + +## 1. 용어 정의 + + +## 2. 참고자료 + +3. TTA "신뢰할 수 있는 인공지능 개발 안내서"와 비교 및 차별점 + +## 4. 국내 주요 AI 보안 가이드라인 비교 + +5. AI 개발자 대상 보안 프레임워크 +6. AI 서비스 제공자 대상 보안 프레임워크 +목차 + + +![이미지 3-0](images/p0003_img0.png) + + +--- + +1 +AI 개발자를 위한 보안 체크리스트 +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +1 +계획 및 +설계 +(AI 개발자, AI 서비스 제공자 공통사항) 거버넌스 및 위험관리 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +□ +□ +□ + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +□ +□ +□ + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +□ +□ +□ +1.2 +AI 모델개발에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 위험요소를 분석・도출하고 있는가? □ +□ +□ + +#### 1.2.2 + +AI 시스템에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +□ +□ +□ + +#### 1.2.3 + +AI 시스템에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +□ +□ +□ +2 +데이터 수집 +및 준비 +2.1 +데이터 수집 및 전처리 + +#### 2.1.1 + +데이터 수집 시 사용되는 네트워크 프로토콜이 충분한 보안 기능을 제공하고 있는가? +□ +□ +□ + +#### 2.1.2 + +수집된 데이터의 보관 및 삭제 절차가 명확하게 정의되어 있는가? +□ +□ +□ + +#### 2.1.3 + +전처리 과정에서 중요 데이터를 보호하기 위해 암호화 기술을 사용하고 있는가? +□ +□ +□ +2.2 +데이터 무결성 검증 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.2.1 + +데이터 저장 및 전송 시 데이터 무결성을 검증하고 있는가? +□ +□ +□ + +#### 2.2.2 + +데이터 처리 과정에서 데이터 무결성을 검증하고 있는가? +□ +□ +□ + +#### 2.2.3 + +데이터에 접근할 수 있는 권한을 제한하고 있는가? +□ +□ +□ +2.3 +데이터 공격에 대한 방어 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.3.1 + +데이터 중독(poisoning) 공격에 대한 방어 대책을 마련하고 있는가? +□ +□ +□ + +#### 2.3.2 + +데이터 회피(evasion) 공격에 대한 방어 대책을 마련하고 있는가? +□ +□ +□ + +#### 2.3.3 + +데이터 유출・변조 공격을 방지하기 위한 방안을 마련하고 있는가? +□ +□ +□ +체크리스트 요약 + + +![이미지 4-0](images/p0004_img0.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +3 +모델개발 +(학습/ +모델링/ +검증) +3.1 +학습/검증 환경에 대한 보안(Secure Training Environment) + +#### 3.1.1 + +모델 학습을 진행하는 환경이 안전하게 보안조치 되어 있는가? +□ +□ +□ + +#### 3.1.2 + +학습 또는 검증 단계에서 악의적인 사용자가 허위 데이터를 삽입할 가능성을 차단하고 있는가? +□ +□ +□ + +#### 3.1.3 + +연합 학습(Federated Learning)에 참여하는 장치 중 악의적인 장치가 있는지 검증하고 있는가? +□ +□ +□ +3.2 +모델 공격에 대한 방어 + +#### 3.2.1 + +AI Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.2 + +적대적 예제 공격 (Adversarial Example Attacks)에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.3 + +모델 회피 공격(model evasion attack)에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.4 + +모델 오염 공격(Model Poisoning Attack)에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.5 + +모델 추출 공격(model extraction attack) 및 리버스 엔지니어링에 대한 방어 방안을 수립하고 +있는가? +□ +□ +□ + +#### 3.2.6 + +반복적인 질의에 대한 방어 방안을 수립하고 있는가? +□ +□ +□ + +#### 3.2.7 + +기계 학습을 활용한 모델 공격에 대해 능동적으로 방어하고 있는가? +□ +□ +□ +3.3 +오픈소스 라이브러리 보안 + +#### 3.3.1 + +오픈소스 라이브러리의 업데이트 및 취약점을 관리하고 있는가? +□ +□ +□ + +#### 3.3.2 + +오픈소스 라이브러리의 소스 코드를 직접 검토하거나 사용에 대한 보안 문제를 검증하고 있는가? +□ +□ +□ + +#### 3.3.3 오픈소스 라이브러리를 실행할 때 잠재적인 보안 위험을 제거하기 위해 격리된 환경을 이용하고 있는가? □ + +□ +□ +3.4 +LLM 보안 + +#### 3.4.1 + +LLM 애플리케이션 공격에 대한 예방책을 마련하고 있는가? +□ +□ +□ + +#### 3.4.2 LLM의 모델 서비스 거부(Model Denial of Service) 공격에 대한 방어 방안을 수립하고 있는가? + +□ +□ +□ + +#### 3.4.3 LLM의 API 보안을 위한 방안을 수립하고 있는가? + +□ +□ +□ + +#### 3.4.4 LLM의 인터페이스 공격에 대한 예방책을 마련하고 있는가? + +□ +□ +□ + +#### 3.4.5 개발 환경에서 LLM을 사용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 코딩 관행과 지침을 + +수립하고 있는가? +□ +□ +□ + +#### 3.4.6 LLM 출력결과를 정기적으로 모니터링하고 검토하고 있는가? + +□ +□ +□ + +#### 3.4.7 LLM의 Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? + +□ +□ +□ + +#### 3.4.8 LLM의 벡터 및 임베딩 취약점에 대한 방어 방안을 수립하고 있는가? + +□ +□ +□ + + +![이미지 5-0](images/p0005_img0.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +4 +모델 배포 +4.1 +모델파일 및 배포 환경 보호 + +#### 4.1.1 + +모델을 배포하기 전에 코드 및 모델을 스캔하고, 자동화된 취약점 분석을 하고 있는가? +□ +□ +□ + +#### 4.1.2 + +모델파일을 암호화하여 저장하고 전송 중에도 안전하게 보호하고 있는가? +□ +□ +□ + +#### 4.1.3 + +AI 모델이 배포되는 인프라(클라우드, 서버 등) 환경이 충분한 보안시스템을 갖추고 있는가? +□ +□ +□ +4.2 +API 및 인터페이스 보안 + +#### 4.2.1 + +AI 모델이 배포된 후, API를 통해 외부 시스템과 상호작용하는 경우, 충분한 보안 조치 기능을 갖추고 +있는가? +□ +□ +□ + +#### 4.2.2 + +배포된 AI 모델이 실시간으로 데이터를 수신하고 이를 처리할 때, 중간자 공격 +(Man-in-the-Middle Attack)에 대응하고 있는가? +□ +□ +□ + +#### 4.2.3 + +AI 모델의 API에 대한 접근 권한을 제한하고, 강한 인증 메커니즘을 사용해 불법 접근을 방지하고 있는가? □ +□ +□ + +#### 4.2.4 API 사용자는 필요한 권한만 부여받도록 최소 권한 원칙(Least Privilege)을 적용하고 있는가? + +□ +□ +□ + +#### 4.2.5 + +AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치만 연결되도록 하고 있는가? □ +□ +□ +5 +모니터링 및 +유지보수 +5.1 +실시간 모니터링 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 5.1.1 + +모델의 입력 데이터, 출력 결과 등을 실시간으로 모니터링하여 비정상적인 동작을 탐지하고 있는가? +□ +□ +□ + +#### 5.1.2 + +모델 응답 시간, 사용 패턴을 추적하고 분석하여 보안에 의심스러운 행동을 탐지하고 있는가? +□ +□ +□ + +#### 5.1.3 + +AI 모델이 동작하는 서버 및 네트워크의 트래픽을 모니터링하여 비정상적인 요청을 탐지하고 있는가? □ +□ +□ + +#### 5.1.4 + +API 호출, 입력/출력 등 요청로그를 정기적으로 분석하여 보안에 의심스러운 동작을 탐지하고 있는가? □ +□ +□ + +#### 5.1.5 + +AI 모델과 배포 환경에 대해 모의 해킹을 수행하여 잠재적인 보안 취약점을 탐지하고 수정하고 있는가? □ +□ +□ +5.2 +보안 패치 및 업데이트 관리 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 5.2.1 + +모델에 대한 보안 패치 및 업데이트 관리 프로세스를 구축하고 있는가? +□ +□ +□ + +#### 5.2.2 + +모델 배포 후 모델 및 라이브러리의 업데이트가 정기적으로 이루어지고 있는가? +□ +□ +□ + +#### 5.2.3 + +운영 체제, 라이브러리, 프레임워크의 보안 패치를 운영 환경에 적용하기 전에 스테이징 환경에서 패치를 +테스트하고 있는가? +□ +□ +□ +6 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 6.1.1 + +AI 모델이 더 이상 사용되지 않으면, 모델 파일을 완전히 삭제하고 복구할 수 없도록 처리하고 있는가? □ +□ +□ + +#### 6.1.2 + +AI 모델에서 사용 중이던 데이터가 시스템을 폐기하거나 교체할 때 안전하게 삭제되고 있는가? +□ +□ +□ + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면, 해당 모델과 연결된 API나 인터페이스를 비활성화하여 외부 접근을 +차단하고 있는가? +□ +□ +□ + + +![이미지 6-0](images/p0006_img0.png) + + +--- + +2 +AI 서비스 제공자를 위한 보안 체크리스트 +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +1 +서비스 기획 +및 설계 +(AI 개발자, AI 서비스 제공자 공통사항) 거버넌스 및 위험관리 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +□□□ + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +□□□ + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +□□□ +1.2 +AI 서비스에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 위험요소를 분석・도출하고 +있는가? +□□□ + +#### 1.2.2 + +AI 서비스에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +□□□ + +#### 1.2.3 + +AI 서비스에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +□□□ +(AI 서비스 제공자) 계약관리 +1.3 +서비스 수준 계약(SLA) 관리 + +#### 1.3.1 + +공급업체와 계약시, SLA에 보안요구 사항을 명확히 포함했는가? +□□□ + +#### 1.3.2 + +보안 침해 발생 시를 대비하여, 대응 계획을 수립하고 있는가? +□□□ + +#### 1.3.3 + +보안 침해 발생 시를 대비하여, 책임 소재를 명확히 하고 있는가? +□□□ +2 +서비스 +개발 및 +구축 +2.1 +코드 취약점 점검 등 관리 + +#### 2.1.1 + +정적 및 동적 코드 분석 도구를 사용하여 소스 코드의 보안 취약점을 분석하고 있는가? +□□□ + +#### 2.1.2 + +코드 리뷰 프로세스를 도입하여 보안 문제가 있는 부분을 검토하고 개선하고 있는가? +□□□ +2.2 +모델 환경의 보안 + +#### 2.2.1 + +모델 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 최소화하여 무단 접근을 방지하고 +있는가? +□□□ + +#### 2.2.2 + +모델이 악의적으로 수정되지 않도록 모델의 무결성을 보장하는 방법을 적용하고 있는가? +□□□ + +#### 2.2.3 + +보안 모니터링 도구를 사용하여 모델의 비정상적인 활동을 감지하고, 실시간으로 대응할 수 있는 체계를 +구축하고 있는가? +□□□ +2.3 +데이터 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.3.1 + +적대적 공격 등 데이터 공격에 대한 방어 수단을 강구하고 있는가? +□□□ + +#### 2.3.2 + +데이터 저장 및 전송 시 무결성을 보호하기 위한 조치를 하고 있는가? +□□□ + +#### 2.3.3 + +중요 데이터에 대한 기밀성 유지를 위해 보호 방안을 마련하고 있는가? +□□□ + +#### 2.3.4 + +전송구간에서 중요정보 유출을 방지하기 위한 보호 방안을 마련하고 있는가? +□□□ + +#### 2.3.5 + +데이터 유출시 책임추적을 할 수 있도록 조치를 하고 있는가? +□□□ + + +![이미지 7-0](images/p0007_img0.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +2.4 +API 및 인터페이스 보안 + +#### 2.4.1 + +API 통신을 암호화하여 데이터가 전송되는 구간에서 외부 공격에 대한 방어를 하고 있는가? +□□□ + +#### 2.4.2 + +모든 API 요청에 대해 인증 및 권한 관리를 강화하고, 중요 데이터에 접근할 때는 강한 인증 메커니즘을 +적용하고 있는가? +□□□ + +#### 2.4.3 + +API 트래픽은 암호화 기술을 사용하여 보호하고, 데이터를 안전하게 주고 받도록 보장하고 있는가? □□□ + +#### 2.4.4 + +API 호출 제한(Rate Limiting)을 설정하여 과도한 요청을 방지하고, 비정상적인 요청 패턴을 탐지하여 +차단하고 있는가? +□□□ +3 +서비스 +제공 및 +운영 +3.1 +로그 및 운영 데이터 보안 + +#### 3.1.1 + +데이터 처리 중 접속로그 관리를 강화하고 있는가? +□□□ + +#### 3.1.2 + +로그 파일 및 운영 데이터에 암호화를 적용하고, 중요정보는 별도로 관리하여 유출을 방지하고 있는가? □□□ + +#### 3.1.3 + +운영 중 발생하는 데이터를 안전하게 저장하고, 접근 제어를 통해 인증된 관리자만이 로그에 접근할 수 +있도록 설정하고 있는가? +□□□ + +#### 3.1.4 + +로그 데이터 접근 권한을 최소화하고, 접근 제어 및 사용자 활동 기록을 통해 비정상적인 접근을 탐지하고 +있는가? +□□□ +4 +서비스 +유지보수 및 +지원 +4.1 +모니터링, 업데이트 및 패치 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 4.1.1 + +지속적인 사용자 경험 모니터링을 위해 사용자 로그를 수집・관리하고 있는가? +□□□ + +#### 4.1.2 + +AI 시스템이 정상적으로 작동하지 않거나 예기치 못한 오류가 발생할 경우 이를 조기에 탐지하고 대응하 +는 메커니즘이 있는가? +□□□ + +#### 4.1.3 + +AI 시스템의 보안 패치나 모델 업데이트가 정기적으로 이루어지고 있는가? +□□□ +4.2 +성능 및 장애 관리 + +#### 4.2.1 + +서비스 장애가 발생했을 때 자동으로 복구할 수 있도록 하고 있는가? +□□□ + +#### 4.2.2 + +모델 성능을 지속적으로 모니터링하고, 성능 저하가 감지되면 재학습을 통해 성능을 유지하고 있는가? □□□ + +#### 4.2.3 + +실시간으로 모델 드리프트 탐지 시스템을 운영하여 모델 성능이 저하될 경우 즉시 대응할 수 있는 체계를 +마련하고 있는가? +□□□ + +#### 4.2.4 + +정기적으로 모델 재학습 및 업데이트를 수행하여 새로운 데이터 패턴을 반영하고, 성능을 개선하고 있는 +가? +□□□ + +#### 4.2.5 + +AI 서비스에 대해 다중화(HA) 및 백업 시스템을 구축하여 장애 발생 시에도 서비스가 연속적으로 제공될 +수 있도록 하고 있는가? +□□□ + +#### 4.2.6 + +침입차단시스템 등을 통해 외부에서 발생하는 DoS/DDoS 공격을 방어하고, 실시간 모니터링 시스템을 +운영하여 장애를 빠르게 감지하고 대응하고 있는가? +□□□ + + +![이미지 8-0](images/p0008_img0.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +Y +N +N/A +5 +Feedback +(환류) 및 +개선 +5.1 +사용자 피드백 관리 + +#### 5.1.1 + +사용자 피드백 시스템에 입력 검증 및 필터링을 적용하여 악성 코드나 비정상적인 데이터 입력을 차단하 +고 있는가? +□□□ + +#### 5.1.2 + +피드백을 자동으로 분석하기 전에 사전 검증 절차를 마련하여 피드백 데이터의 무결성을 확인하고 있는 +가? +□□□ + +#### 5.1.3 + +최소 권한 원칙(Least Privilege)을 적용하여 피드백 및 개선 과정에서 접근할 수 있는 권한을 최소화하 +고 있는가? +□□□ + +#### 5.1.4 + +피드백 처리 및 개선 과정에서 이루어진 모든 접근 및 변경 사항을 감사 로그로 기록하고, 정기적으로 검토 +하여 무단 접근을 탐지하고 있는가? +□□□ +6 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 6.1.1 + +모델 파기 시, 모델 파일을 완전히 삭제하고 복구할 수 없도록 처리하고 있는가? +□□□ + +#### 6.1.2 + +시스템을 폐기하거나 교체할 때 AI 모델에서 사용 중이던 관련 파일 및 데이터를 안전하게 삭제하고 있는가? □□□ + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 인터페이스를 비활성화하여 외부 +접근을 차단하고 있는가? +□□□ + + +![이미지 9-0](images/p0009_img0.png) + + +--- + + + +--- + +개요 + + +![이미지 11-0](images/p0011_img0.png) + + +--- + +「인공지능(AI) 보안 안내서」 개발 목적 +본 안내서에서는 AI 보안(Security)을 “외부의 사이버 공격‧침해행위 등으로 인한 AI 시스템 손상, 탈 +취 등 무결성, 기밀성, 가용성을 저해하는 행위로부터 AI 시스템을 보호하는 것”으로 정의하였다. 또한 +NIST AI RMF 1.0, OWASP Top 10 for LLM Applications 등 국내외 AI 보안 정책, 연구 자료들 +을 분석하여 AI 보안 위협을 구분하고, AI 보안 위협 예방·대응을 위한 보안 요구사항들을 마련하는데 +참고하였다. +< AI 보안 위협 분류 및 주요 내용 > +구분 +주요 내용 +AI 모델 취약점 +공격 +‣ AI 모델과 시스템의 취약점을 공격하여 서비스 중단, 결과물 조작, 데이터 탈취 등을 일으키는 행위 +① 프롬프트 공격 ② 회피 공격, ③ 오염 공격, ④ 데이터 추출 공격, ⑤ 모델 추출 공격 등 +AI 서비스 공격 +‣ AI 기반 서비스를 대상으로 서비스를 마비시키거나 서비스社가 보유하고 있는 데이터 탈취 등을 +하기 위한 일련의 행위 +⑥ DoS/DDoS, ⑦ 피싱 메일 등을 통한 악성코드 배포, ⑧ AI 서비스 대상 해킹 등 +AI 악용 보안 위협 +‣ AI 서비스의 뛰어난 성능을 해킹, 침해사고 등에 악용하는 행위 +⑨ 악성코드 생성, ⑩ 피싱/스미싱 메일 등 생성, ⑪ 범죄 지식 학습 +데이터 유출 +‣ 이용자가 실수로 민감정보를 AI 서비스에 입력하거나, AI 서비스의 오류로 민감정보를 출력하는 +행위 +⑫ 민감정보(기업 기밀정보 등) 입력, ⑬ 개인정보 등 출력 +AI와 관련된 보안은 AI 시스템 자체의 보안(Security for AI)과 AI 기술을 활용하여 다른 시스템의 +보안을 강화하는 역할(Security by AI)로 나눌 수 있고, 두 개념은 AI와 보안의 상호작용에 대한 서로 +다른 관점을 다룬다. +●“Security for AI”(AI 시스템에 대한 보안)는 AI 시스템 자체를 보호하는 것을 의미한다. AI 시스 +템이 외부 위협이나 악의적인 공격으로부터 안전하게 운영되도록 체계적인 보안 조치를 취하는 것 +이 핵심이다. AI 시스템의 모든 생애 주기 단계에서 보안성을 보장하는 것을 목표로 하며, 데이터 +보호, 모델 보호, 운영 및 인프라 보안 등이 포함된다. +●“Security for AI“의 주요 내용은 다음과 같다. +- (데이터 보안) AI 시스템에서 사용되는 데이터가 유출되거나 변조되지 않도록 보호하는 것으로, +특히, 훈련 데이터와 실시간 데이터의 기밀성, 무결성, 가용성을 보장하는 것이 중요하다. + + +![이미지 12-0](images/p0012_img0.png) + + +![이미지 12-1](images/p0012_img1.png) + + +![이미지 12-2](images/p0012_img2.png) + + +![이미지 12-3](images/p0012_img3.png) + + +![이미지 12-4](images/p0012_img4.png) + + +--- + + +## 제1장 + +개요 +- (모델 보안) AI 모델 자체가 도난, 역설계(Reverse Engineering), 적대적 공격(adversarial +attacks)에 노출되지 않도록 보호하는 것으로, 이를 통해 AI 모델이 안전하게 운영되도록 신뢰 +성을 유지해야 한다. +- (운영 보안) AI 시스템이 배포된 후에도 외부 공격이나 성능 저하에 대응할 수 있는 운영 보안 +조치를 마련하는 것으로, API 보안, 모델 드리프트(model drift) 탐지, 패치 및 업데이트 적용 +등이 포함된다. +“Security by AI“(AI에 의한 보안)은 AI 기술을 사이버 보안에 적용하여 보안 위협을 자동으로 탐지 +하고 대응하는 것을 의미한다. 즉, AI가 보안 강화 도구로 활용되는 것이며, 이를 통해 사이버 보안의 +효율성을 크게 향상시킬 수 있다. +●“Security by AI“의 주요 내용은 다음과 같다. +- (위협 탐지 및 분석) AI는 대규모 데이터 분석을 통해 네트워크 상의 이상 징후를 감지하거나 보 +안 위협을 탐지할 수 있다. AI 모델은 정상 패턴과 비정상 패턴을 학습하고, 이를 기반으로 실시 +간으로 사이버 공격을 식별하는 데 효과적이다. +- (자동화된 보안 대응) AI는 발견된 보안 위협에 대해 자동으로 대응하는 메커니즘을 제공한다. +예를 들어, AI 시스템이 특정 공격을 탐지하면 해당 IP를 차단하거나 보안 설정을 자동으로 변경 +할 수 있다. +- (사이버 공격 예측) AI는 과거의 보안사고 데이터를 분석하여 향후 발생할 수 있는 공격을 예측 +할 수 있다. 이로 인해 사전에 보안 조치를 취해 공격을 방어할 수 있다. +- (사용자 인증 및 접근 제어) AI 기반 시스템은 이상 행동 감지를 통해 사용자 인증 절차를 강화 +하고, 비정상적인 접근 시도를 차단할 수 있다. +표 1-1 +“Security for AI”와 “Security by AI” 비교 +구분 +Security for AI +Security by AI +주요 목적 +AI 시스템 자체를 보호 +AI 기술을 활용해 보안 시스템을 강화 +적용 대상 +AI 모델, 데이터, 인프라 등 AI 시스템 자체 +침입 탐지, 위협 예측, 자동 대응 등의 보안 시스템 +주요 위협 +데이터 포이즈닝, 모델 탈취, 적대적 예제 공격 +사이버 공격, 네트워크 침입, 악성 소프트웨어 +활용 기술 +데이터 암호화, 모델 보호, API 접근 제어 +AI 기반 위협 탐지, 이상행동 탐지, 자동화된 보안 대응 +대응 대상 +AI 시스템에 대한 외부 위협 +일반적인 네트워크, 시스템, 사용자에 대한 보안 위협 +예시 +AI 모델 기밀성 보호, 데이터 무결성 유지 +AI 기반 침입탐지시스템 및 피싱 탐지 및 차단 + + +![이미지 13-0](images/p0013_img0.png) + + +![이미지 13-1](images/p0013_img1.png) + + +![이미지 13-2](images/p0013_img2.png) + + +![이미지 13-3](images/p0013_img3.png) + + +![이미지 13-4](images/p0013_img4.png) + + +--- + +그 동안 많은 기관에서 인공지능 신뢰성 확보를 위한 원칙과 지침, 안내서를 발간하였으나, 주로 신뢰 +성 관점에서 다루거나 보안 관점에서 상세한 가이드를 제시하고 있지 않아 아쉬운 점이 많았다. +●이에 따라 본 안내서는 AI 제품 및 서비스 개발 현장에서 모델 개발자, 서비스 제공자, 서비스 이 +용자 등 이해관계자들이 정보보안 측면에서 참고할 수 있는 기준을 마련하고자 추진하였다. +●본 안내서에서는 AI 시스템의 전반적인 안전성과 무결성을 보장하기 위한 다양한 보안 방책을 의 +미하는 “Security for AI”에 초점을 맞추고자 한다. “Security for AI”는 AI 시스템의 모든 생애 +주기(데이터 수집, 모델 개발, 학습, 배포, 유지보수, 폐기)에서 발생할 수 있는 다양한 위협에 대해 +AI 시스템을 보호하는 것을 의미한다. 이는 데이터 보안, 모델 보안, 배포 및 운영 보안 등의 영역 +을 포함하며, 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability) 등을 적용하여 AI +시스템을 대내외적인 위협으로부터 보호하는데 목적이 있다. +본 안내서는 AI 시스템의 설계, 개발, 운영, 배포, 유지보수, 폐기 등 전 단계에서 발생할 수 있는 다 +양한 보안 위험을 관리하기 위한 방안을 제시하였다. 또한 AI 시스템의 생애 주기에 걸쳐 기술적 고려 +가 필요한 요구사항 및 검증항목을 기밀성, 무결성 및 가용성을 기준으로 하여 세부적으로 다루었다. +따라서 AI 개발자 및 서비스 제공자가 AI 시스템의 보안(Security) 문제를 해결하는데 「인공지능(AI) +보안 안내서」가 실질적인 도움이 될 것으로 기대된다. +다만, AI 신뢰성 보장을 위해서는 보안(Security) 측면 외에도 윤리, 편향성, 개인정보보호와 같은 +법・제도적 측면도 함께 고려되어야 한다. 「인공지능(AI) 보안 안내서」는 이러한 범용성을 갖추는 것 +보다는 보안 영역에 초점을 맞추었기 때문에 AI의 윤리적 측면, 신뢰성 측면, 개인정보보호 측면에 대 +해서는 타 자료를 병행하여 참고할 필요가 있다. +●따라서 AI 개발자 및 서비스 제공자는 기업 내부의 기술 역량, 제품 서비스 특성 등을 고려하여 적 +절한 요구사항과 검증항목을 선택하여 적용하고, 「인공지능(AI) 보안 안내서」가 다루지 않는 부분 +에 대해서는 기업에서 제공 중인 서비스 분야 및 환경에 맞게 국내 AI 관련 안내서를 참고 자료로 +활용하길 바란다. +본 안내서는 예측형 AI, 생성형 AI, LLM 등 다양한 산업, 경제, 사회 분야에서 활용되는 AI를 대상으 +로 공통적으로 발생할 수 있는 보안 위협과 침해사고를 선제적으로 예방·대응하기 위한 보안 요구사항 +과 검증항목을 제시하고 있다. 따라서 본 안내서는 AI 개발 및 활용 환경에서 발생할 수 있는 보안 위 +협에 대응하는데 초점을 맞추어 개발되었다. 향후 의료, 교통, 에너지 등 각 산업 분야 內 AI 모델, +시스템의 특징과 AI 활용 현황 등에 따라 개별 산업 별 AI 보안 위협, AI 보안 요구사항 등을 연구하 +여, 산업 별 보안 안내서 개발도 추진할 예정이다. + + +![이미지 14-0](images/p0014_img0.png) + + +![이미지 14-1](images/p0014_img1.png) + + +![이미지 14-2](images/p0014_img2.png) + + +![이미지 14-3](images/p0014_img3.png) + + +![이미지 14-4](images/p0014_img4.png) + + +--- + + +## 제1장 + +개요 +AI 보안 위협 +Prompt Injection +공격자는 정교하게 만든 입력을 통해 LLM을 조작하여 공격자의 의도를 실행하게 할 수 있다. 이는 +시스템 프롬프트를 적대적으로 유도하거나 조작된 외부 입력을 통해 간접적으로 수행할 수 있으며, +잠재적으로 데이터 유출 등의 문제로 이어질 수 있다. +• Direct Prompt Injections (일명 jailbreaking): 악의적인 사용자가 민감한 정보를 추출하기 위해 프롬프트를 삽입 +• Indirect Prompt Injections: 사용자가 웹페이지 프롬프트를 통해 민감한 데이터를 요청 +• 플러그인을 통한 사기: 웹사이트가 플러그인을 악용하여 사기 등 범죄목적을 위한 기망행위를 함 +참고 사례 +●인공지능(AI) 음성비서 서비스인 아마존 알렉사와 구글 어시스턴트 등도 해킹에 취약하였다. 스마트 +스피커에 레이저를 쏴 이들에게 명령을 내릴 수 있음이 알려졌기 때문이다.1 미시간대와 일본 전기 +통신대(UEC) 연구진에 따르면 “구글, 차고 문을 열어줘” 같은 명령어가 암호화되어 입력된 빛을 +스마트 스피커의 마이크에 비춰 음성 명령을 암호화해 빛에 실어 보내면, 이 빛이 스마트 스피커에 +내장된 진동판에 부딪쳐 마치 사람이 음성 명령을 말했을 때와 똑같이 이 진동판이 떨리면서 스마 +트 스피커에 명령을 내린다는 것이다. 연구진은 실험에서 이런 취약점을 이용해 스마트 차고 문을 +열거나 현재 시간을 묻는 등의 작업을 수행하였다. 연구진은 이와 같이 빛을 이용한 해킹에 취약한 +기기들은 구글 홈, 구글 네스트 캠 IQ, 아마존 에코・에코 닷・에코 쇼, 페이스북의 포털 미니, 아이폰 +XR, 6세대 아이패드 등이었다고 밝혔다. +●또한, 이러한 인공지능(AI) 음성 비서는 제3자가 대화 내용을 엿듣거나 해킹 프로그램을 설치해 +민감한 정보를 넘겨주도록 유도할 수도 있다.2 아마존과 구글이 애플리케이션 업그레이드를 위해 +앱 개발자들에게 제공하는 접근법을 해커들이 악용하여 자신이 원하는 대로 음성비서의 응답을 유도 +하는 명령을 내릴 수 있음이 알려졌다. 예를 들어, 사용자를 가장한 해커가 음성 명령을 통해 앱을 +열고 그 앱이 실행되지 않는다고 말한다. AI 음성 비서는 대답하지 않지만, 사용자에게 알리지 않은 채 +계속 백그라운드를 실행하고, 몇 분 후 AI 음성 비서는 회사 업데이트가 있었다면서 사용자에게 비 +밀번호를 말해달라고 요청한다. +1 +연합뉴스, https://www.yna.co.kr/view/AKR20191106004500091, 2019.11.06 +2 +머니투데이, https://news.mt.co.kr/mtview.php?no=2019102214138230917, 2019.10.22 + + +![이미지 15-0](images/p0015_img0.png) + + +![이미지 15-1](images/p0015_img1.png) + + +![이미지 15-2](images/p0015_img2.png) + + +![이미지 15-3](images/p0015_img3.png) + + +![이미지 15-4](images/p0015_img4.png) + + +![이미지 15-5](images/p0015_img5.png) + + +--- + +민감 정보 노출(Sensitive Information Disclosure) +LLM 애플리케이션은 실수로 민감한 정보 또는 기밀 데이터를 공개하여 무단 액세스, 지적 재산권 도용 +및 개인정보 침해로 이어질 수 있다. +• 의도치 않은 노출: 잘못된 해석이나 스크러빙 부족으로 인한 데이터 유출 +• Complete Filtering (완료 필터링) 오류: 모델이 생성한 텍스트(완료 output)를 필터링하는 과정에서 위험하거나 부 +적절한 응답이 필터링을 우회해 노출될 수도 있음 +• Overfitting (과잉적합) 오류: LLM이 훈련 데이터에 지나치게 적합하여, 훈련 시에는 잘 작동하지만 새로운 상황에 +서는 비효율적이거나 학습 데이터 내 포함된 민감정보를 기억해 출력할 수도 있음. +공격 시나리오 +●(의도치 않은 노출) 사용자 A가 다른 사용자 데이터에 노출됨 +의심하지 않는 합법적인 사용자 A는 LLM 애플리케이션과 악의적이지 않은 방식으로 상호 작용할 때 LLM을 통해 특정 +다른 사용자 데이터에 노출된다. +참고 사례 +●오픈AI의 챗GPT가 사용자의 로그인 정보와 개인정보를 유출하는 일이 발생하였다.3 정보 유출 피해를 +입었다고 주장하는 제보자가 제출한 스크린샷에는 약국 처방약 포털의 직원이 사용하는 지원 시스템에 +연결된 제보자 이름과 비밀번호가 포함돼 있었다. 이 외에도 앱의 이름과 문제가 발생한 스토어 번호 +등이 포함돼 있는 것이 나타났다. 2023년 3월에는 챗GPT의 버그로 인해 사이트에서 한 활성 사용자 +의 채팅 기록이 관련 없는 사용자에게 표시되는 현상이 발생한 바 있다. 이러한 유형의 시스템 오류는 +종종 발생할 수 있으며, 정확한 원인은 인시던트마다 다르지만, 프론트엔드 디바이스와 백엔드 디바이스 +사이에 있는 미들박스 디바이스와 관련된 경우가 많은 것으로 알려져 있다. 미들박스는 성능 향상을 +위해 최근에 로그인한 사용자의 자격 증명을 비롯한 특정 데이터를 캐시하는 기능을 말한다. 이때 불 +일치가 발생하면 한 계정의 정보를 다른 계정에 매핑하는 등의 문제가 발생할 수 있다. +●2023년 구글 딥마인드와 대학 공동 연구진은 챗GPT에 단순한 프롬프트 공격으로 개인정보를 +비롯한 1만 개 훈련 데이터를 추출할 수 있었다는 논문을 airXiv에 게재하였다.4 +3 +디지털투데이, https://www.digitaltoday.co.kr/news/articleView.html?idxno=504025, 2024.1.30 +4 +Nasr 외(2023.11), Scalable Extraction of Training Data from (Production) Language Models, arXiv:2311.17035v1 + + +![이미지 16-0](images/p0016_img0.png) + + +![이미지 16-1](images/p0016_img1.png) + + +![이미지 16-2](images/p0016_img2.png) + + +![이미지 16-3](images/p0016_img3.png) + + +![이미지 16-4](images/p0016_img4.png) + + +![이미지 16-5](images/p0016_img5.png) + + +--- + + +## 제1장 + +개요 +적대적 예제(Adversarial Example) 공격 +3.1 +회피 공격(Evasion attack) +회피 공격(Evasion Attack)은 입력데이터에 노이즈를 추가하여 모델을 속이는 공격이다. 이미지 데이터 +에 노이즈를 추가하게 되면 인간의 눈으로는 큰 차이가 없지만, 모델은 다른 데이터로 인식하여 행동 +하게 된다. +참고 사례 +●정지표지판에 표시를 추가하여 자율주행 차량이 이를 속도제한표지판으로 잘못 인식하게 하거나, +차선 표시를 혼동하게 만들어 차량이 도로를 벗어나도록 하는 등의 공격이 이에 해당한다. 아래의 +예에서는 도로의 잘못된 표시가 무인 자동차를 잘못 인도하여 마주 오는 차량으로 방향을 틀게 할 +수 있는 것으로 나타났다.5 +그림 1-1 회피공격의 예 +출처=N. Hanacek/NIST +5 +AEM, https://www.autoelectronics.co.kr/article/articleView.asp?idx=5496, 2024.1.15. + + +![이미지 17-0](images/p0017_img0.png) + + +![이미지 17-1](images/p0017_img1.png) + + +![이미지 17-2](images/p0017_img2.png) + + +![이미지 17-3](images/p0017_img3.png) + + +![이미지 17-4](images/p0017_img4.png) + + +![이미지 17-5](images/p0017_img5.png) + + +![이미지 17-6](images/p0017_img6.png) + + +--- + +●2017년 워싱턴대학 연구팀은 자율주행차를 오작동시키는 시연을 한 바 있는데, 그때 쓰인 방법이 +회피 공격의 사례이다. 연구팀은 STOP 표지판에 스티커를 붙여 인공지능을 교란함으로써, 자율 +주행차가 ‘정지’ 표시판을 ‘속도제한’ 표시판으로 오인하도록 만들었다. 이는 사이버 공간이 아닌 물리적 +공간에서도 아주 간단한 방법으로 적대적 공격이 가능함을 보여준다. +●2018년 구글 리서치 그룹은 논문을 통해 이미지 인식 머신러닝 알고리즘을 오작동 시킬 수 있는 스 +티커를 발표했다. 적대적 스티커(Adversarial patch)라고 불리는 이 스티커를 바나나 옆에 붙이면 이미 +지 인식 앱이 바나나를 100% 확률로 토스터 기기로 인식했다. 이 스티커는 누구나 쉽게 인쇄해 사용 +할 수 있고 악의적인 공격인지 쉽게 발견하기 어려워서, 악용되는 경우 큰 위험을 가져올 수도 있다. +3.2 +오염 공격(Poisoning attack) +오염 공격(Poisoning attack)은 학습데이터에 오염된 데이터를 추가하여 모델을 망가뜨리는 공격 방법 +이다. 공격자가 AI 모델의 학습 단계에서 의도적으로 악의적인 데이터를 주입하여 발생시키는 것으로, +예를 들어, 챗봇이 부적절한 발언을 하도록 악의적인 행위자에 의해 학습되어 욕설, 인종차별 발언을 +남발하도록 하는 것이다. +참고 사례 +●2024년 중국에서 제조된 로봇청소기 ‘에코백스 디봇 X2s(Ecovacs Deebot X2s)’가 해킹을 당해 +미국 가정집에서 욕설과 인종차별적 발언을 하는 일이 발생하였다.6 로봇청소기가 마이크 기능을 +통해 인종차별적인 욕설을 하거나 개를 쫓아다닌 일도 있었다. 조사 결과 해커가 제조사의 보안 조치 +를 우회해 카메라, 마이크, 이동 제어 기능을 탈취한 것으로 파악되었다. 제조사 측이 보안 조사를 +실시한 결과, 이용자의 계정과 비밀번호가 도용되면서 이런 일이 발생했고, 제조사 기술팀이 범인 +의 IP 주소를 파악해 계정으로의 추가 접근을 막았다고 밝혔다. 특히 보안에 취약했던 부분은 4자리 +의 PIN코드였던 것으로 확인되었다. 보안 전문가들 사이에서 이 제조사의 보안 취약성에 대해서는 +이미 지적이 나온 바 있었다. 2024년 8월 미국 라스베이거스에서 열린 ‘데프콘 해킹 콘퍼런스’에서 +보안 연구원들이 에코백스 제품을 분석한 결과 블루투스로 로봇을 해킹하거나 원격으로 마이크와 +카메라를 몰래 켜는 데 악용할 수 있다고 하였다. 특히 약 130m 떨어진 곳에서 블루투스를 활용해 +로봇을 해킹하고 원격으로 기기를 제어할 수 있는 것으로 밝혀졌다. +●마이크로소프트는 2016년 인공지능 챗봇 'Tay'를 출시했다. 그러나 일부 사용자들이 악의적인 메시지 +와 인종차별적 발언을 반복적으로 입력하여 학습 데이터를 오염시켰고, 그 결과 Tay는 부적절한 발언 +을 생성하게 되었다. 이 사건으로 인해 마이크로소프트는 출시 16시간 만에 Tay의 운영을 중단해야 +했으며, AI 시스템의 학습 데이터에 대한 보안과 검증의 중요성이 부각되었다. +6 +조선일보, https://www.chosun.com/international/international_general/2024/10/21/CCCTWF5ERRCQRDOF6C7MUEQSUU/, 2024.10.21 + + +![이미지 18-0](images/p0018_img0.png) + + +![이미지 18-1](images/p0018_img1.png) + + +![이미지 18-2](images/p0018_img2.png) + + +![이미지 18-3](images/p0018_img3.png) + + +![이미지 18-4](images/p0018_img4.png) + + +--- + + +## 제1장 + +개요 +3.3 +탐색적 공격 +AI 데이터 추출 공격 +●AI 모델의 학습에 사용했던 데이터 자체를 탈취하는 공격 기법이며, 이때 데이터 추출을 위해 활용 +한 공격을 ‘전도 공격(Inversion Attack)’이라고도 한다. 인공지능이 훈련한 원래 데이터를 찾아내 +면 악의적인 의도에 맞게 학습 결과를 유도할 수 있게 된다. +●데이터 추출 공격은 인공지능에 하는 질의 횟수를 조정하는 방식으로 대응이 가능하다. 예컨대, 하 +루 동안 한 명이 질의할 수 있는 횟수를 작게 제한함으로써 데이터가 유출되더라도 피해를 최소화 +할 수 있다 +AI 모델 추출(Model Extraction) 공격 +●머신러닝 모델에 수많은 쿼리를 던진 후, 산출된 결과값을 분석해 모델 학습을 위해 사용된 데이터 +를 추출하는 공격을 말한다. 이 공격 방법은 얼굴인식 머신러닝 모델의 학습을 위해 사용한 얼굴 +이미지 데이터를 복원할 수도 있다. 70초 동안 650번 쿼리만으로도 아마존 머신러닝 모델과 유사 +한 모델을 만들어내는 것이 가능하다는 연구 결과도 있다. +●이 공격 방법은 유료 러닝모델 서비스(MLaas : Machine Learning as a Service)를 탈취하거나 +Inversion attack, Evasion attack과 같은 2차 공격에 활용하기 위해 사용될 수 있다. 머신러닝 +모델을 훈련시키는 학습 데이터 안에 개인정보, 민감정보 등이 포함되어 있는 경우에는 이러한 공 +격에 의해 유출될 가능성이 있다. +●공격 대상이 되는 AI 모델에 대한 공격자의 사전 지식(AI 모델의 구조, 학습 데이터 등)이 양에 따 +라 블랙박스 AI 모델 탈취 공격과 그레이박스 AI 모델 탈취 공격으로 분류한다. +- 그레이박스 AI 모델 탈취 공격: 공격자가 공격 대상이 되는 AI 모델에 대하여 부분적인 사전 지 +식을 갖고 있을 때 수행되는 공격이다. +- 블랙박스 AI 모델 탈취 공격: 공격자가 공격 대상이 되는 AI 모델에 대하여 어떠한 사전 지식도 +갖지 않을 때 수행되는 공격이다. + + +![이미지 19-0](images/p0019_img0.png) + + +![이미지 19-1](images/p0019_img1.png) + + +![이미지 19-2](images/p0019_img2.png) + + +![이미지 19-3](images/p0019_img3.png) + + +![이미지 19-4](images/p0019_img4.png) + + +--- + +AI 보안 안내서의 필요성 및 적용범위 +본 안내서는 미국, 유럽, 일본 등 해외기관에서 발표한 원칙 및 프레임워크 등을 참조하였고, 국내자료 +로는 과학기술정보통신부/한국정보통신기술협회(TTA)에서 발간한 「신뢰할 수 있는 인공지능 개발 안내서: +일반분야」, 국가정보원/국가보안기술연구소에서 발간한 「챗GPT 등 생성형 AI 활용 보안 가이드라인」, +금융보안원에서 발간한 「금융분야 AI 보안 가이드라인」 등도 참고하였다. 본 「인공지능(AI) 보안 안내 +서」의 특징은 다음과 같다. +첫째, 신뢰성, 프라이버시 등에 관한 항목을 모두 제외하고 보안의 목표인 기밀성⋅무결성⋅가용성 보 +장을 위한 요구사항에 초점을 맞추었다. +둘째 개발자 뿐만 아니라 서비스 제공자 및 이용자를 대상으로 적용대상을 확대하였다. +●「인공지능(AI) 보안 안내서」는 AI 모델을 개발하는 개발자와 개발조직, 모델을 활용하여 서비스를 +제공하는 사업자, 해당 서비스를 이용하여 결과물을 생성한 이용자 모두를 대상으로 하여 각 주체별 +로 AI 보안에 대한 안내서를 마련하였다. 이를 위해 인공지능 발전과 신뢰 기반 조성 등에 관한 기 +본법(인공지능 기본법, '26. 1. 22 시행예정), EU AI Act 등을 참고하여 개발자, 서비스 제공자, +이용자의 개념을 아래와 같이 정의하였다. +- “개발자”라고 하면 주로 소프트웨어 개발자(Developer 혹은 Engineer) 또는 개발 조직(기업)을 +지칭하며, 이들은 시스템 분석가의 요구에 맞게 컴퓨터 프로그래밍을 하거나 시스템 설계를 하는 +사람 또는 조직(기업)을 말한다. 안내서에서 개발자는 요구사항 및 검증항목에 따라 조직의 구성원 +개인일 수도 있고 팀(조직) 또는 회사가 될 수도 있다. 따라서 개발자가 실제 이 안내서를 참고 +할 때 해당 내용이 개발자 개인에 관한 것인지 아니면 조직 또는 회사가 주도적으로 해야 할 것 +인지 여부에 대한 혼란이 있을 수 있다. 그래서 「인공지능(AI) 보안 안내서」에서는 요구사항 별 +로 수행주체를 명시적으로 표시하였다. +- “서비스제공자”는 업으로서 AI 서비스 또는 AI 부수 서비스를 타인에게 제공하는 자를 말한다. +“업으로” 한다는 것은 같은 행위를 계속하여 반복하는 것을 의미하고, 여기에 해당하는지 여부는 +단순히 그에 필요한 인적 또는 물적 시설의 구비 여부와는 관계없이 행위의 반복・계속성 여부, +영업성의 유무, 그 행위의 목적이나 규모・횟수・기간・태양 등의 여러 사정을 종합적으로 고려하 +여 사회통념에 따라 판단하여야 한다. 이 안내서에서 서비스제공자는 영리를 목적으로 AI 서비스 +를 제공하는 법인(회사 등)을 말한다. 그러나 실제 업무 수행 시에는 임직원 개인이 해야 할 것 +인지 아니면 조직 또는 회사가 해야 할 것인지 불명확한 경우가 있을 수 있다. 따라서 「인공지능 +(AI) 보안 안내서」에서는 이를 명확히 하고자 요구사항 별로 수행주체를 표기하였다. + + +![이미지 20-0](images/p0020_img0.png) + + +![이미지 20-1](images/p0020_img1.png) + + +![이미지 20-2](images/p0020_img2.png) + + +![이미지 20-3](images/p0020_img3.png) + + +![이미지 20-4](images/p0020_img4.png) + + +--- + + +## 제1장 + +개요 +- “이용자”는 AI 서비스 또는 AI 부수 서비스를 타인에게 제공하지 않고 AI 서비스 또는 AI 부수 +서비스를 이용하는 사람을 말한다. 이러한 “이용자” 개념에는 업으로서 AI 시스템 또는 AI 서비 +스를 이용하는 사람(이하 “AI 비즈니스 이용자”라고 함)이 포함될 수도 있으나, 본 「AI 이용자를 +위한 보안 수칙」의 적용 대상은 AI 서비스를 이용하는 일반 국민을 대상으로 작성하였다. +그림 1-2 AI 서비스 관련 사업 활동의 주체 +셋째, 보안 측면에서 중요한 “파기” 단계를 추가하여 AI 서비스의 생명주기를 차별화했다. +●인공지능 서비스 생명주기를 “파기” 단계를 추가하여 총 6단계로 구분하였으며, 생명주기 단계별 +세부 내용도 차별화하였다. 「인공지능(AI) 보안 안내서」에서 정의한 각 단계별 목표와 주요 활동은 +다음과 같다. +그림 1-3 인공지능 서비스의 생명주기 + +## 1. 계획 및 설계 + + +## 2. 데이터 수집 및 준비 + + +## 3. 모델 개발(학습/모델링/검증) + + +## 4. 모델 배포 + + +## 5. 모니터링 및 유지보수 + + +## 6. 파기 + + +![이미지 21-0](images/p0021_img0.png) + + +![이미지 21-1](images/p0021_img1.png) + + +![이미지 21-2](images/p0021_img2.png) + + +![이미지 21-3](images/p0021_img3.png) + + +![이미지 21-4](images/p0021_img4.png) + + +![이미지 21-5](images/p0021_img5.png) + + +![이미지 21-6](images/p0021_img6.png) + + +--- + +표 1-2 +인공지능 생명주기별 주요활동(AI 보안 안내서) +생명주기 +목표 +주요 활동 + +## 1. 계획 및 설계 + +AI 시스템이 해결할 목표 및 +성공 지표를 정의 +∙AI가 해결할 수 있는 비즈니스 및 기술적 목표를 정의 +∙AI 시스템 관리 감독 조직 및 방안 마련 +∙AI시스템 위험요소 분석 및 대응 방안 마련 + +## 2. 데이터 수집 + +및 준비 +AI 모델을 학습하고 개발하는 데 +사용할 데이터를 수집하고, 사전 +처리 및 모델 개발에 적합한 +형식으로 변환 +∙데이터 소스(구조화된 데이터 및 구조화되지 않은 데이터, 센 +서 데이터, 과거 데이터 세트 등)를 정의함 +∙데이터 사용과 관련된 보안 정책 및 법적 제약을 고려함 +∙누락된 데이터를 처리하고 중복을 제거하고 데이터 일관성 보장 +∙데이터 세트를 학습, 검증 및 테스트 세트로 분할함 + +## 3. 모델 개발 + +AI 모델을 구축하고, 학습하여 +성능 평가를 통해 필요한 지표를 +충족 +∙적절한 기술(예: 머신 러닝, 딥 러닝, 자연어 처리), 알고리즘 +(예: 의사 결정 트리, 신경망, SVM 등)과 모델 아키텍처 선택 +∙준비된 데이터를 사용하여 모델 학습, 하이퍼파라미터 조정 +∙모델을 검증 또는 보이지 않는 테스트 데이터 세트에서 테스 +트하여 정확도와 견고성을 확인함 + +## 4. 모델 배포 + +학습된 AI 모델을 실제 +애플리케이션에서 예측할 수 +있는 프로덕션 환경에 통합 +∙클라우드 서비스, 에지 장치 또는 내부 서버 내에서 모델을 +패키징하여 배포 +∙모델이 실시간 또는 일괄 모드에서 다른 시스템이나 서비스와 +상호 작용할 수 있는지 확인 + +## 5. 모니터링 및 + +유지보수 +배포된 모델의 성능을 +지속적으로 모니터링하고 시간이 +지남에 따라 유지 관리 +∙시간 경과에 따른 모델 성능 추적 +∙배포 후에 나타나는 보안취약성을 감지하고 완화함 +∙모델 및 기반 인프라에 대한 업데이트 및 패치를 구현 + +## 6. 파기 + +더 이상 유용하지 않거나 +교체해야 할 때 AI 모델을 +안전하게 폐기 +∙모델을 폐기하기 전에 중요한 데이터와 로그를 백업 +∙잔여 데이터나 지적 재산이 유출되지 않도록 함 +∙폐기 사유와 향후 모델을 위해 얻은 교훈을 문서화 +넷째, 예측형 AI(Pred AI)와 생성형 AI(Gen AI)에 맞게 구별하여 검증항목을 제시했다. +●요구사항별 검증항목에서 예측형 AI(이하, Pred AI)와 생성형 AI(Gen AI)를 구별하여 제시하였 +다. 예측형 AI(Pred AI)와 생성형 AI(이하, Gen AI)는 두 기술의 목적, 작동 방식, 위험 요소가 +서로 다를 수 있으므로, 각 기술의 특성과 관련된 위협을 명확히 이해하고 이에 적합한 보안 대책 +을 수립하는 것이 중요하다. 따라서 본 「인공지능(AI) 보안 안내서」에서는 이를 구별하여 AI 개발 +자와 AI 서비스 제공자 대상 보안요구사항과 검증항목을 제시하였다. +- Pred AI는 과거 및 현재 데이터를 사용하여 패턴을 식별하고 해당 정보를 기반으로 추론한다. +이는 주로 통계 알고리즘과 ML(기계학습)에 사용한다. 반면에 Gen AI는 한 단계 더 나아가 딥 +러닝을 사용하여 학습된 데이터를 기반으로 새로운 콘텐츠를 생성한다. +- 이러한 기술적 특성으로 인해 데이터 관련 문제라 하더라도 위험 요소가 서로 다를 수 있다. 예 +를 들어 Pred AI는 정확한 예측을 지원할 수 있도록 고품질 데이터와 라벨링이 필요할 것이고, +Gen AI는 모델의 학습 기반이 된 데이터를 제공하는 오픈소스 모델을 안전하게 사용하는 것에 +초점을 맞추는 것이 중요하므로 이에 맞는 보안 검증항목이 필요하다. + + +![이미지 22-0](images/p0022_img0.png) + + +![이미지 22-1](images/p0022_img1.png) + + +![이미지 22-2](images/p0022_img2.png) + + +![이미지 22-3](images/p0022_img3.png) + + +![이미지 22-4](images/p0022_img4.png) + + +--- + + +## 제1장 + +개요 +- 따라서 개발자나 서비스 제공자 등은 발생한 위험이 어떠한 AI 유형과 관련이 있는지 사전에 파 +악하는 것이 매우 중요하고, 이를 반영한 검증항목이 필요할 것으로 예측된다. 이에 본 「인공지 +능(AI) 보안 안내서」에서는 요구사항 및 검증항목 별로 이를 구분하여 제시하였다. 예측형 AI와 +생성형 AI에 따라 구별하여 점검하면, 각 기술에 필요한 보안 조치를 적절하게 파악하고 자원을 +효율적으로 분배할 수 있어, 과도하거나 불필요한 보안 비용을 줄일 수 있을 것으로 기대된다. + + +![이미지 23-0](images/p0023_img0.png) + + +![이미지 23-1](images/p0023_img1.png) + + +![이미지 23-2](images/p0023_img2.png) + + +![이미지 23-3](images/p0023_img3.png) + + +--- + + + +--- + +AI 개발자를 위한 +보안 안내서 + + +![이미지 25-0](images/p0025_img0.png) + + +--- + +개요 +개발자 대상 「인공지능(AI) 보안 안내서」의 특징 +●AI에 대한 공격 스펙트럼은 넓고 빠르게 진행되고 있으며, 설계 및 구현에서 학습 및 테스트, 실제 +배포 및 파기에 이르기까지 라이프사이클의 모든 단계를 포함하고 있다. 따라서 개발자 대상 「인공 +지능(AI) 보안 안내서」도 생명주기에 따라 6개의 섹션(계획 및 설계 → 데이터 수집 및 준비 → 모 +델 개발 → 모델 배포 → 모니터링 및 유지보수 → 파기)으로 구성하였다. 특히 모델 파기 시 보 +안 사항은 다른 가이드라인에서는 없는 내용으로 본 「인공지능(AI) 보안 안내서」에서 이를 추가하 +였다. +AI 보안 안내서 생명주기 + +## 1. 계획 및 설계 + + +## 2. 데이터 수집 및 준비 + + +## 3. 모델 개발(학습/모델링/검증) + + +## 4. 모델 배포 + + +## 5. 모니터링 및 유지보수 + + +## 6. 파기 + +●AI 모델의 크기가 계속 커짐에 따라 많은 기업에서 직접 사용하거나 새로운 데이터 세트로 미세 +조정하여 다양한 작업을 수행할 수 있는 사전 학습된 모델에 의존하는 경향이 커지고 있다. 그런데 +이는 공격자가 모델 가용성을 손상시키거나 악성코드를 삽입하여 사전 학습된 모델을 악의적으로 +수정할 수 있는 더 큰 기회를 제공해 주기도 한다. 따라서 「인공지능(AI) 보안 안내서」에서는 개발 +자들이 참고할 수 있도록 ‘오픈소스 라이브러리 보안’에 대한 요구사항 및 검증항목을 반영하였다. +●생성형 AI와 검색 증강 생성(RAG: Retrieval-Augmented Generation) 기반의 LLM 도입이 증가하 +면서, 기업에서는 업무 효율성 향상, 창의성 증진, 고객 만족도 향상 등 다양한 비즈니스 혁신이 이루어 +지고 있다. 이처럼 LLM 기술이 활발하게 사용되고 있지만 동시에 고유한 보안 위협에 노출될 가능성을 +내포하고 있다. 「인공지능(AI) 보안 안내서」는 개발자들에게 보안 관점에서 도움을 주고자 ‘LLM 보안’ +에 대한 요구사항 및 검증항목을 추가하였다. 이를 활용하여 개발자는 LLM의 안정성, 데이터 보호, 사 +용자 신뢰성을 유지하고, 적절한 방어 조치를 통해 비즈니스 지속성을 확보할 수 있을 것으로 기대된다. + + +![이미지 26-0](images/p0026_img0.png) + + +![이미지 26-1](images/p0026_img1.png) + + +![이미지 26-2](images/p0026_img2.png) + + +![이미지 26-3](images/p0026_img3.png) + + +![이미지 26-4](images/p0026_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +17 +개발자 대상 「인공지능(AI) 보안 안내서」의 활용 방안 +●「인공지능(AI) 보안 안내서」는 AI 제품 및 시스템 개발 현장에서 보안(Security) 관련 공격을 받거 +나 받을 우려가 있는 경우 데이터 과학자, 모델 개발자 등이 실제로 취해야 할 조치 사항으로 활용할 +수 있다. +●「인공지능(AI) 보안 안내서」의 요구사항 및 검증항목 점검주체는 조직의 구성원 개인을 의미하는 +경우도 있으나, 조직의 부서(예컨대, 개발팀) 내지 조직 자체(예컨대, AI 소프트웨어 개발회사)를 +가리키는 경우도 있다. 예를 들어, 모델 학습을 진행하는 환경이 안전하게 보안조치 되어 있는지 +여부를 파악하기 위해서는 물리적 보안 외에도 방화벽・VPN 등 네트워크 보안도 함께 봐야 한 +다.(3.1.1. 참고) 이 경우 해당 보호조치는 개발자 개인이 아니라 전사적 차원에서 수행해야 할 업 +무이다. 반면에 개발자는 직무 관련 교육을 연간 100시간 이상 받아야 한다면 이 업무는 개발자 +개인이 1차적인 수행주체가 된다. 「인공지능(AI) 보안 안내서」에서는 요구사항 및 검증항목에 대한 +개인과 조직의 역할을 분명하게 인식할 수 있도록 해당 항목의 이행주체를 명시하였다. +●다만, 본 안내서는 대외적으로 법적 효력을 가지는 것이 아니므로 본문의 기술 방식(‘~해야 한다.’ +‘필수적이다’ 등)에도 불구하고 참고로만 활용하기 바란다. +안내서 작성 과정 및 참고 자료 +●2024년 6월부터 「AI 보안 정책 포럼」을 구성하여 운영하였고, 그 외에도 다양한 의견을 수렴하는 +과정을 거쳤다. 초안 작성한 후, 학계 및 산업계 전문가 등의 의견수렴을 거쳐 최종본을 마련하였다. +●미국, 유럽, 일본 등 해외기관에서 발표한 원칙 및 프레임워크 등을 참조하였고, 국내자료로는 과 +학기술정보통신부/한국정보통신기술협회(TTA)에서 발간한 「신뢰할 수 있는 인공지능 개발 안내서」, +국가정보원/국가보안기술연구소에서 발간한 「챗GPT 등 생성형 AI 활용 보안 가이드라인」, 금융보 +안원에서 발간한 「금융분야 AI 보안 가이드라인」 등도 참고하였다. +※ 주요 해외 참고자료 +주관 +명칭 +특징 +(미국) NIST +AI Risk Management Framework(AI RMF 1.0), 2023.1 +글로벌 표준 +(미국) ISO/IEC +ISO/IEC 42001 +인증 +ISO/IEC 23894 +AI에 특화 +(미국) OWASP +OWASP Top 10 for LLM Applications (Ver 1.1) +개발 보안 +(미국) Google +Google SAIF +개발 보안 +EU +EU AI ACT +규제 +OECD +OECD AI 원칙 +정책 권고 +(싱가폴) 정보통신부 +Model AI Governance Framework, 2020 +생성형 AI +(영국) NCSC +Guidelines for secure AI system development, 2023.11 +가이드라인 +(일본) 총무성·경제산업성 +AI 사업자 가이드라인(제1.0판), 2024. 6 + + +![이미지 27-0](images/p0027_img0.png) + + +![이미지 27-1](images/p0027_img1.png) + + +![이미지 27-2](images/p0027_img2.png) + + +![이미지 27-3](images/p0027_img3.png) + + +![이미지 27-4](images/p0027_img4.png) + + +--- + +AI 개발자 대상 보안 프레임워크 +AI 시스템 보안(Security) 목표 +AI 시스템 보안(Security) 목표는 AI 기술을 안전하게 보호하고 신뢰할 수 있는 방식으로 운영되도록 +보장하는 데 있다. 이 목표는 AI 시스템이 외부 공격, 데이터 유출, 시스템 오작동 등 다양한 보안 위 +협에 대응할 수 있도록 설계되고 유지되는 것을 의미한다. +●AI 시스템에서 보안의 주요 목표는 전통적인 정보보호의 3대 요소인 기밀성(Confidentiality), 무 +결성(Integrity), 가용성(Availability)을 기본으로 하고, AI 모델·시스템 등 개발 생애 주기에서의 +책임성 확보 및 검증을 위한 Accountability(책임 추적성)를 추가하였다. +그림 2-1 AI 개발자 대상 보안 프레임워크(Security Framework) + + +![이미지 28-0](images/p0028_img0.png) + + +![이미지 28-1](images/p0028_img1.png) + + +![이미지 28-2](images/p0028_img2.png) + + +![이미지 28-3](images/p0028_img3.png) + + +![이미지 28-4](images/p0028_img4.png) + + +![이미지 28-5](images/p0028_img5.png) + + +![이미지 28-6](images/p0028_img6.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +19 +1.1 +가용성(Availability) +가용성(Availability)은 AI 보안 전략에서 중요한 요소 중 하나로, 서비스와 데이터가 항상 접근 가능하 +고 사용할 수 있는 상태를 유지하는 것을 목표로 한다. 이는 AI 시스템의 연속성과 신뢰성을 보장하기 +위해 필수적이다. +1.2 +기밀성(Confidentiality) +기밀성(Confidentiality)은 AI 보안 전략에서 중요한 요소 중 하나로, 정보가 승인된 사람만 접근할 수 +있도록 보호하는 것을 목표로 한다. 이는 데이터 유출과 같은 보안 사고를 방지하고, 민감한 정보가 보 +호되도록 하는 데 필수적이다. +1.3 +무결성(Integrity) +무결성(Integrity)은 AI 보안 전략의 중요한 요소 중 하나로, 데이터와 시스템이 허가되지 않은 변경 +없이 정확하고 일관된 상태를 유지하는 것을 목표로 한다. 이는 AI 시스템이 신뢰할 수 있는 결과를 +제공하고, 데이터의 변조나 손상을 방지하기 위해 필수적이다. +1.4 +책임 추적성(Accountability) +책임 추적성(Accountability)은 AI 보안 전략에서 중요한 요소 중 하나로, AI 시스템의 행동과 결정에 +대한 책임을 명확히 하고, 문제가 발생했을 때 원인을 추적할 수 있도록 하는 것을 목표로 한다. 이는 +AI 시스템의 투명성을 높이고, 신뢰성을 보장하며, 윤리적이고 법적 기준을 준수하기 위해 필수적이다. +AI 시스템 보안을 위한 거버넌스(Governance) +AI 시스템 보안을 위한 조직 내 규정과 정책, 그리고 거버넌스 체계는 AI 모델이 조직에서 안전하게 +운영되고, 보안 리스크를 관리하는 데 중요한 역할을 한다. 효과적인 AI 보안 거버넌스는 기술, 사람, +프로세스를 통합하여 AI 시스템의 무결성, 기밀성, 가용성을 유지하고, 법적 규제와 윤리적 기준을 준 +수하도록 설계되어야 한다. 이를 위해 조직은 명확한 정책과 절차를 수립하고, 보안 거버넌스를 통해 +AI 시스템이 지속적으로 안전하게 운영될 수 있도록 관리해야 한다. AI 보안 거버넌스의 핵심 요소는 +정책(Policy), 규정(Guidelines), 절차(Processes) 등을 포함한다. + + +![이미지 29-0](images/p0029_img0.png) + + +![이미지 29-1](images/p0029_img1.png) + + +![이미지 29-2](images/p0029_img2.png) + + +![이미지 29-3](images/p0029_img3.png) + + +![이미지 29-4](images/p0029_img4.png) + + +![이미지 29-5](images/p0029_img5.png) + + +--- + +2.1 +정책(Policy) +●AI 보안 정책 수립: 조직은 AI 시스템을 안전하게 운영하기 위한 포괄적인 보안 정책을 수립해야 +한다. 정책에는 AI 시스템의 설계, 개발, 배포 및 운영에 필요한 보안 기준과 절차를 명확히 정의 +해야 한다. +●접근 권한 관리 정책: AI 시스템에 대한 접근 권한을 관리하기 위한 정책을 수립하여, 민감한 데이 +터와 시스템에 대한 무단 접근을 방지해야 한다. 역할 기반 접근 제어(RBAC)를 통해 AI 시스템에 +접근할 수 있는 사용자와 권한을 제한해야 한다. +●데이터 보호 정책: AI 시스템이 다루는 데이터의 기밀성과 무결성을 보장하기 위해 데이터 암호화, +데이터 저장소 보호에 대한 규정을 마련해야 한다. +2.2 +규정(Guidelines) +●AI 모델 관리 규정: AI 모델의 학습, 배포 및 사용에 대한 구체적인 지침을 제공해야 한다. 이 규 +정은 AI 모델의 검증 및 테스트 절차, 안전한 데이터 사용, 모델 업데이트 및 폐기 절차를 포함 +한다. +●AI 시스템 모니터링 규정: AI 시스템이 보안 위협에 대응할 수 있도록 실시간 모니터링 및 로그 +분석 규정을 마련해야 한다. 이를 통해 시스템 내 이상 활동이나 보안 위협을 조기에 감지하고 대 +응할 수 있어야 한다. +●리스크 관리 규정: AI 시스템에 내재된 보안 리스크를 식별하고 관리하기 위한 규정을 수립해야 한 +다. 이는 잠재적인 보안 위협을 사전에 평가하고 완화하는 절차를 포함한다. +2.3 +절차(Process) +●AI 보안 평가 절차: AI 시스템 개발 초기부터 보안 평가 절차를 구축하여, 보안 위험을 사전에 감 +지하고 해결해야 한다. 이 절차는 보안 취약점 분석, 침투 테스트 및 코드 리뷰를 포함할 수 있다. +●AI 시스템 업데이트 및 패치 절차: AI 시스템과 모델이 최신 보안 위협에 대응할 수 있도록 정기적 +인 업데이트 및 패치 절차를 수립해야 한다. 이 절차는 새로운 보안 위협에 대한 대응 방안을 포함 +하며, 보안 업데이트가 원활하게 이루어지도록 해야 한다. +●비상 대응 계획: 보안 사고가 발생했을 때 즉각적으로 대응할 수 있는 비상 대응 계획을 마련해야 +한다. 여기에는 사고 보고, 대응 팀 구성, 시스템 복구 및 데이터 손실 방지 절차가 포함된다. + + +![이미지 30-0](images/p0030_img0.png) + + +![이미지 30-1](images/p0030_img1.png) + + +![이미지 30-2](images/p0030_img2.png) + + +![이미지 30-3](images/p0030_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +21 +AI 시스템 보안을 위한 위험 관리(Risk Management) +위험 관리(Risk Management)는 AI를 활용한 서비스에서 필수적인 요소로, AI 시스템이 직면할 수 +있는 잠재적 위험을 식별하고, 이를 효과적으로 관리하고 대응하기 위한 체계적인 접근을 포함한다. +위험 관리는 위험 분석, 위험 감지, 사고 대응의 세 가지 주요 단계로 나눌 수 있다. +3.1 +위험 분석(Risk Analysis) +●위험 분석(Risk Analysis)은 AI 시스템이 직면할 수 있는 잠재적 위험을 식별하고, 그 심각성과 +발생 가능성을 평가하는 과정이다. 이 과정은 위험 관리의 첫 단계로, 체계적인 접근을 통해 위험 +요소를 사전에 파악하고 대응 전략을 마련하는 것을 목표로 한다. +●주요 활동 +- 위험 식별 (Risk Identification): AI 시스템과 관련된 모든 잠재적 위험을 식별하고, 기술적・운 +영적・윤리적・법적 측면에서 발생할 수 있는 다양한 위험을 고려한다. +데이터 손실, 시스템 오류, 보안 침해, 윤리적 문제 등 +- 위험 평가 (Risk Assessment): 식별된 위험의 심각성과 발생 가능성을 평가하고, 각 위험 요 +소의 영향을 분석하여 우선순위를 정한다. +- 위험 대응 계획 (Risk Mitigation Plan) 수립: 평가된 위험에 대한 대응 계획을 수립하고, 위험 +을 줄이기 위한 예방 조치와 대응 전략을 마련한다. +보안 강화, 데이터 백업, 긴급 대응 절차 마련 등 +3.2 +위험 감지(Risk Detection) +●위험 감지(Risk Detection)는 AI 시스템의 운영 중 발생하는 이상 징후나 위험 요소를 실시간으 +로 감지하고, 이를 신속하게 보고하는 과정이다. 이는 위험 발생 시 신속한 대응을 위해 중요한 단 +계이다. +●주요 활동 +- 모니터링 시스템 구축 (Establish Monitoring Systems) : AI 시스템의 성능과 안전성을 실시 +간으로 모니터링하는 시스템을 구축한다. +네트워크 트래픽 모니터링, 시스템 로그 분석, 사용자 활동 추적 등 + + +![이미지 31-0](images/p0031_img0.png) + + +![이미지 31-1](images/p0031_img1.png) + + +![이미지 31-2](images/p0031_img2.png) + + +![이미지 31-3](images/p0031_img3.png) + + +![이미지 31-4](images/p0031_img4.png) + + +![이미지 31-5](images/p0031_img5.png) + + +![이미지 31-6](images/p0031_img6.png) + + +--- + +- 이상 징후 탐지 (Anomaly Detection) : 정상적인 패턴에서 벗어난 이상 징후를 자동으로 감지 +할 수 있는 알고리즘과 기술을 도입한다. +머신러닝 기반 이상 탐지 알고리즘, 실시간 경고 시스템 등 +- 자동화된 경고 (Automated Alerts) : 이상 징후나 위험 요소 감지 시 즉각적으로 관련 담당자 +에게 경고를 보내는 자동화된 시스템을 운영한다. +이메일 알림, SMS 경고, 대시보드 알림 등 +- 정기적 검토 (Regular Reviews) : 모니터링 결과와 경고 로그를 정기적으로 검토하여, 새로운 +위험 요소나 패턴을 식별하고 대응 방안을 업데이트한다. +주간/월간 보고서 작성, 경고 로그 분석 회의 등 +3.3 +사고 대응(Incident Handling) +●사고 대응(Incident Handling)은 실제로 위험이 발생했을 때 이를 효과적으로 대응하고 해결하는 +과정이다. 이는 신속한 대응과 문제 해결을 통해 피해를 최소화하고, 재발 방지를 위한 교훈을 도 +출하는 것을 목표로 한다. +●주요 활동 +- 사고 대응 절차 수립 (Establish Incident Response Procedures) : 사고 발생 시 신속하고 +체계적으로 대응할 수 있는 절차와 계획을 마련한다. +사고 대응 매뉴얼 작성, 비상 연락망 구축, 역할 및 책임 정의 등 +- 사고 대응 팀 구성 (Form Incident Response Team) : 사고 발생 시 대응할 전담 팀을 구성 +하고, 각 팀원의 역할과 책임을 명확히 한다. +보안 담당자, 데이터 과학자, IT 지원팀 등으로 구성 +- 초기 대응 및 완화 (Initial Response and Mitigation) : 사고 발생 시 초기 대응을 통해 피해 +를 최소화하고, 추가 피해를 방지하기 위한 조치를 취한다. +시스템 격리, 데이터 복구, 보안 패치 적용 등 +- 사고 분석 및 보고 (Incident Analysis and Reporting) : 사고의 원인을 분석하고, 사고 발생 +과정과 대응 결과를 상세히 기록하여 보고한다. +사고 원인 분석 보고서 작성, 대응 결과 리뷰 등 +- 사후 조치 및 재발 방지 (Post-Incident Actions and Prevention) : 사고 종료 후 사후 조치 +를 취하고, 재발 방지를 위한 교훈을 도출하여 시스템과 절차를 개선한다. +시스템 업데이트, 보안 정책 강화, 교육 프로그램 운영 등 + + +![이미지 32-0](images/p0032_img0.png) + + +![이미지 32-1](images/p0032_img1.png) + + +![이미지 32-2](images/p0032_img2.png) + + +![이미지 32-3](images/p0032_img3.png) + + +![이미지 32-4](images/p0032_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +23 +●예시 시나리오 +- AI 모델 오류 사고 대응 +▸위험 분석: AI 모델의 예측 오류 가능성을 평가하고, 모델 검증 및 테스트 계획 수립 +▸위험 감지: AI 모델의 실시간 성능 모니터링 시스템 도입, 예측 오류 발생 시 경고 시스템 운영 +▸사고 대응: AI 모델의 예측 오류 발생 시 즉시 모델 사용 중지 및 수정 작업, 오류 원인 분석 +및 보고, 수정된 모델의 검증 및 테스트 후 재배포, 재발 방지를 위한 모델 검증 절차 강화 + + +![이미지 33-0](images/p0033_img0.png) + + +![이미지 33-1](images/p0033_img1.png) + + +![이미지 33-2](images/p0033_img2.png) + + +![이미지 33-3](images/p0033_img3.png) + + +--- + +AI 개발자를 위한 요구사항 및 검증항목 +체크리스트 요약 +생명주기 +요구사항 및 체크리스트 +개발자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +1 +계획 및 +설계 +(AI 개발자, AI 서비스 제공자 공통사항) 거버넌스 및 위험관리 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +○ +○ +○ + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +○ +○ +○ + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +○ +○ +○ +1.2 +AI 모델개발에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 위험요소를 +분석・도출하고 있는가? +○ +○ +○ + +#### 1.2.2 + +AI 시스템에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +○ +○ +○ + +#### 1.2.3 + +AI 시스템에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +○ +○ +○ +2 +데이터 수집 +및 준비 +2.1 +데이터 수집 및 전처리 + +#### 2.1.1 + +데이터 수집 시 사용되는 네트워크 프로토콜이 충분한 보안 기능을 제공하고 있 +는가? +○ +○ +○ + +#### 2.1.2 + +수집된 데이터의 보관 및 삭제 절차가 명확하게 정의되어 있는가? +○ +○ +○ +○ + +#### 2.1.3 + +전처리 과정에서 중요 데이터를 보호하기 위해 암호화 기술을 사용하고 있는가? +○ +○ +○ +2.2 +데이터 무결성 검증 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.2.1 + +데이터 처리 과정에서 데이터 무결성을 검증하고 있는가? +○ +○ +○ + +#### 2.2.2 + +데이터에 접근할 수 있는 권한을 제한하고 있는가? +○ +○ +○ +○ +2.3 +데이터 공격에 대한 방어 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.3.1 + +데이터 중독(poisoning) 공격에 대한 방어 대책을 마련하고 있는가? +○ +○ +○ + +#### 2.3.2 + +데이터 회피(evasion) 공격에 대한 방어 대책을 마련하고 있는가? +○ +○ +○ + +#### 2.3.3 + +데이터 유출・변조 공격을 방지하기 위한 방안을 마련하고 있는가? +○ +○ +○ + + +![이미지 34-0](images/p0034_img0.png) + + +![이미지 34-1](images/p0034_img1.png) + + +![이미지 34-2](images/p0034_img2.png) + + +![이미지 34-3](images/p0034_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +25 +생명주기 +요구사항 및 체크리스트 +개발자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +3 +모델개발 +(학습/ +모델링/ +검증) +3.1 +학습/검증 환경에 대한 보안(Secure Training Environment) + +#### 3.1.1 + +모델 학습을 진행하는 환경이 안전하게 보안조치 되어 있는가? +○ +○ +○ +○ + +#### 3.1.2 + +학습 또는 검증 단계에서 악의적인 사용자가 허위 데이터를 삽입할 가능성을 차단 +하고 있는가? +○ +○ +○ + +#### 3.1.3 + +연합 학습(Federated Learning)에 참여하는 장치 중 악의적인 장치가 있는지 +검증하고 있는가? +○ +○ +○ +3.2 +모델 공격에 대한 방어 + +#### 3.2.1 + +AI Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +○ +○ + +#### 3.2.2 + +적대적 예제 공격 (Adversarial Example Attacks)에 대한 방어 방안을 수립 +하고 있는가? +○ +○ +○ + +#### 3.2.3 + +모델 회피 공격(model evasion attack)에 대한 방어 방안을 수립하고 있는가? +○ +○ +○ + +#### 3.2.4 + +모델 오염 공격(Model Poisoning Attack)에 대한 방어 방안을 수립하고 +있는가? +○ +○ +○ + +#### 3.2.5 + +모델 추출 공격(model extraction attack) 및 리버스 엔지니어링에 대한 방어 +방안을 수립하고 있는가? +○ +○ +○ + +#### 3.2.6 + +반복적인 질의에 대한 방어 방안을 수립하고 있는가? +○ +○ + +#### 3.2.7 + +기계 학습을 활용한 모델 공격에 대해 능동적으로 방어하고 있는가? +○ +○ +○ +3.3 +오픈소스 라이브러리 보안 + +#### 3.3.1 + +오픈소스 라이브러리의 업데이트 및 취약점을 관리하고 있는가? +○ +○ +○ + +#### 3.3.2 + +오픈소스 라이브러리의 소스 코드를 직접 검토하거나 사용에 대한 보안 문제를 +검증하고 있는가? +○ +○ +○ + +#### 3.3.3 오픈소스 라이브러리를 실행할 때 잠재적인 보안 위험을 제거하기 위해 격리된 + +환경을 이용하고 있는가? +○ +○ +○ +3.4 +LLM 보안 + +#### 3.4.1 + +LLM 애플리케이션 공격에 대한 예방책을 마련하고 있는가? +○ +○ + +#### 3.4.2 LLM의 모델 서비스 거부(Model Denial of Service) 공격에 대한 방어 방안을 + +수립하고 있는가? +○ +○ + +#### 3.4.3 LLM의 API 보안을 위한 방안을 수립하고 있는가? + +○ +○ + +#### 3.4.4 LLM의 인터페이스 공격에 대한 예방책을 마련하고 있는가? + +○ +○ + +#### 3.4.5 개발 환경에서 LLM을 사용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 + +코딩 관행과 지침을 수립하고 있는가? +○ +○ +○ + +#### 3.4.6 LLM 출력결과를 정기적으로 모니터링하고 검토하고 있는가? + +○ +○ + +#### 3.4.7 + +LLM의 Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +○ +○ + +#### 3.4.8 LLM의 벡터 및 임베딩 취약점에 대한 방어 방안을 수립하고 있는가? + +○ +○ + + +![이미지 35-0](images/p0035_img0.png) + + +![이미지 35-1](images/p0035_img1.png) + + +![이미지 35-2](images/p0035_img2.png) + + +![이미지 35-3](images/p0035_img3.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +개발자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +4 +모델 배포 +4.1 +모델파일 및 배포 환경 보호 + +#### 4.1.1 + +모델을 배포하기 전에 코드 및 모델을 스캔하고, 자동화된 취약점 분석을 하고 있 +는가? +○ +○ +○ + +#### 4.1.2 + +모델파일을 암호화하여 저장하고 전송 중에도 안전하게 보호하고 있는가? +○ +○ +○ + +#### 4.1.3 + +AI 모델이 배포되는 인프라(클라우드, 서버 등) 환경이 충분한 보안시스템을 갖추 +고 있는가? +○ +○ +○ +4.2 +API 및 인터페이스 보안 + +#### 4.2.1 + +AI 모델이 배포된 후, API를 통해 외부 시스템과 상호작용하는 경우, 충분한 보안 +조치 기능을 갖추고 있는가? +○ +○ +○ +○ + +#### 4.2.2 + +배포된 AI 모델이 실시간으로 데이터를 수신하고 이를 처리할 때, 중간자 공격 +(Man-in-the-Middle Attack)에 대응하고 있는가? +○ +○ +○ + +#### 4.2.3 + +AI 모델의 API에 대한 접근 권한을 제한하고, 강한 인증 메커니즘을 사용해 불법 +접근을 방지하고 있는가? +○ +○ +○ + +#### 4.2.4 API 사용자는 필요한 권한만 부여받도록 최소 권한(Least Privilege) 원칙을 적 + +용하고 있는가? +○ +○ +○ + +#### 4.2.5 + +AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치만 연결 +되도록 하고 있는가? +○ +○ +○ +5 +모니터링 및 +유지보수 +5.1 +실시간 모니터링 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 5.1.1 + +모델의 입력 데이터, 출력 결과 등을 실시간으로 모니터링하여 비정상적인 동작을 +탐지하고 있는가? +○ +○ +○ + +#### 5.1.2 + +모델 응답 시간, 사용 패턴을 추적하고 분석하여 보안에 의심스러운 행동을 탐지하 +고 있는가? +○ +○ +○ + +#### 5.1.3 + +AI 모델이 동작하는 서버 및 네트워크의 트래픽을 모니터링하여 비정상적인 요청 +을 탐지하고 있는가? +○ +○ +○ + +#### 5.1.4 + +API 호출, 입력/출력 등 요청로그를 정기적으로 분석하여 보안에 의심스러운 동 +작을 탐지하고 있는가? +○ +○ +○ + +#### 5.1.5 + +AI 모델과 배포 환경에 대해 모의 해킹을 수행하여 잠재적인 보안 취약점을 탐지하 +고 수정하고 있는가? +○ +○ +○ +5.2 +보안 패치 및 업데이트 관리 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 5.2.1 + +모델에 대한 보안 패치 및 업데이트 관리 프로세스를 구축하고 있는가? +○ +○ +○ + +#### 5.2.2 + +모델 배포 후 모델 및 라이브러리의 업데이트가 정기적으로 이루어지고 있는가? +○ +○ +○ + +#### 5.2.3 + +운영 체제, 라이브러리, 프레임워크의 보안 패치를 운영 환경에 적용하기 전에 스 +테이징 환경에서 패치를 테스트하고 있는가? +○ +○ +○ +6 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 6.1.1 + +AI 모델이 더 이상 사용되지 않으면, 모델 파일을 완전히 삭제하고 복구할 수 없도 +록 처리하고 있는가? +○ +○ +○ + +#### 6.1.2 + +AI 모델에서 사용 중이던 데이터가 시스템을 폐기하거나 교체할 때 안전하게 삭제 +되고 있는가? +○ +○ +○ + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면, 해당 모델과 연결된 API나 인터페이스를 비 +활성화하여 외부 접근을 차단하고 있는가? +○ +○ +○ + + +![이미지 36-0](images/p0036_img0.png) + + +![이미지 36-1](images/p0036_img1.png) + + +![이미지 36-2](images/p0036_img2.png) + + +![이미지 36-3](images/p0036_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +27 +계획 및 설계 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 +AI 모델을 개발하는 기업과 AI 서비스를 제공하는 기업에서는 AI 보안(Security) 거버넌스 체계 +를 구축하기 위해 AI 보안 정책 및 절차 정의, AI 보안 조직 및 역할 정의 등과 같은 AI 보안 +거버넌스 프레임워크를 수립하고, AI 보안 위험 분석 및 관리 체계 등을 구축해야 함 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +AI 시스템은 보안와 관련된 문제가 발생할 수 있다는 위험 요소가 존재하므로 다양한 위험 요소 +를 인식하고 관련 규정을 마련하여 이를 실행할 수 있도록 관리 및 감독하는 조직이 필요함 +AI 보안(Security) 거버넌스를 위한 조직을 구성하기 위해서는 조직 내 역할과 책임(Roles and +Responsibilities)도 명확하게 정의해야 함 +- 역할 분담: 보안 정책 수립, 기술 구현, 규제 준수 등 각 부서의 책임을 명확히 정의 +- 독립성: 보안 거버넌스 조직은 개발팀과 독립적으로 운영되어 객관성을 유지해야 함 +- 리더십 확보: 보안 관련 결정을 내릴 수 있는 충분한 권한을 부여 +(예시) 명확한 역할과 책임 +- CISO(Chief Information Security Officer): 보안 전략 및 거버넌스의 총괄 책임자로서 정 +책 수립과 이행 감독 +- 데이터 보안팀: 데이터 암호화, 접근 제어, 민감 데이터 보호 관리 +- AI 개발팀과 협업: AI 모델 개발 단계부터 보안 요소를 반영하도록 보안 관점에서 협업 필요 +- 규제 준수 담당자: 글로벌 및 로컬 보안 규제 등에 대한 모니터링 및 준수 확인 + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +• AI 모델을 개발하는 기업과 AI 서비스를 제공하는 기업이 AI 보안(Security) 거버넌스 정책 수립 +을 위해서는 다음과 같은 내용을 수행해야 함 +- AI 보안 원칙 및 목표 정의 +󰋻AI 모델 및 서비스의 보안, 데이터 무결성, 서비스 신뢰성을 보장하기 위한 핵심 원칙 설정 +󰋻AI 보안 비전과 목표를 명확히 수립 +- AI 보안 정책 문서화 및 실행 +󰋻AI 보안 가이드라인 작성(데이터 보호, 모델 보안, API 보안, 서비스 보호 등) +󰋻보안 거버넌스 조직 구성(CISO, AI 보안팀, 데이터 보호 책임자 등 역할 정의) +󰋻AI SW, HW 공급망 보안 관리 체계 구축(AI 모델 알고리즘 정보, 소스코드 정보, AI 칩 +정보, 보안 패치 적용 및 이력 등) + + +![이미지 37-0](images/p0037_img0.png) + + +![이미지 37-1](images/p0037_img1.png) + + +![이미지 37-2](images/p0037_img2.png) + + +![이미지 37-3](images/p0037_img3.png) + + +![이미지 37-4](images/p0037_img4.png) + + +![이미지 37-5](images/p0037_img5.png) + + +--- + +- AI 보안 규제 및 컴플라이언스 준수 +󰋻GDPR, CCPA, EU AI Act, NIST AI RMF, ISO/IEC 27001 등 글로벌 규제 및 표준 준수 +󰋻법적 리스크 평가 및 보안 정책과의 정합성 검토 +• AI 모델을 개발하는 기업과 AI 서비스를 제공하는 기업은 AI 보안(Security) 거버넌스를 위해 AI +보안 감사 및 지속적인 보안 거버넌스 운영 체계도 갖춰야 함 +- AI 보안 거버넌스 체계 지속 점검 및 개선 +󰋻정기적인 AI 보안 감사(Security Audit) 및 리스크 평가 수행 +󰋻AI 보안 정책 및 절차의 지속적인 개선 및 업데이트 +- AI 보안 교육 및 인식 제고 +󰋻개발자 및 운영자를 위한 AI 보안 교육 프로그램 운영 +󰋻AI 보안 사고 사례 공유 및 대응 훈련 수행 +- AI 보안 사고 대응 및 위기관리 프로세스 구축 +󰋻AI 보안 사고 대응 계획 수립 및 시뮬레이션 테스트 진행 +󰋻보안 사고 발생 시 보고 및 대응 절차 운영 +AI 거버넌스 체계 구축 관련 요구사항 예시 +∙AI와 관련된 법률 및 규제 요구 사항을 이해하고 관리하며 문서화함 +∙조직의 위험 허용 범위를 기반으로 필요한 위험 관리 활동 수준을 결정하기 위한 프로세스, 절차 및 관행 +이 마련되어야 함 +∙위험 관리 프로세스와 그 결과는 조직의 위험 우선 순위에 따라 투명한 정책, 절차 및 기타 통제를 통해 +설정 +∙위험 관리 프로세스와 그 결과에 대한 지속적인 모니터링과 정기 검토가 계획되고, 정기 검토 빈도 결정을 +포함하여 조직의 역할과 책임이 명확하게 정의 +∙위험을 증가시키거나 조직의 신뢰성을 저하시키지 않는 방식으로 AI 시스템을 안전하게 폐기하고 단계적 +으로 폐지하기 위한 프로세스와 절차 마련 +NIST, AI Risk Management Framework 참조 + + +![이미지 38-0](images/p0038_img0.png) + + +![이미지 38-1](images/p0038_img1.png) + + +![이미지 38-2](images/p0038_img2.png) + + +![이미지 38-3](images/p0038_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +29 + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +AI 보안 거버넌스 전문인력(Security Governance Specialists)은 AI 모델 및 서비스의 보안성 +을 보장하고, 보안 정책을 수립하며, 규제 준수를 이행하는 역할을 수행함. 이들의 업무는 크게 +정책 수립, 보안 리스크 분석, 데이터 보호, AI 모델 및 인프라 보안 강화, 법적 준수, 보안 모니 +터링 및 대응으로 나눌 수 있음 +- AI 보안 정책 및 거버넌스 체계 구축 – AI 보안 원칙, 정책, 운영 가이드라인 수립 등 +- AI 보안 리스크 분석 및 위협 모델링 수행 – AI 서비스의 보안 취약점 평가 등 +- 컴플라이언스 및 법적 규제 준수 – GDPR, CCPA, AI 윤리 원칙 준수 등 +- AI 보안 사고 대응 및 위기 관리 운영 – 보안 사고 대응 계획, 보안 로그 모니터링 등 +- AI 보안 교육 및 내부 인식 강화 – AI 보안 교육 제공, 보안 가이드 문서화 등 +AI 모델 보안을 담당하는 전문 인력은 AI 기술과 보안 기술 모두에 대한 깊은 이해를 갖추고 있 +어야 하며, 동시에 윤리적 기준과 법적 규제를 준수하는 능력도 중요함. 기술적・윤리적・관리적 +역량을 통합적으로 갖춘 인력이 기업의 AI 보안 거버넌스 성공의 핵심임 +- 기술적 역량: AI 및 머신러닝 관련 기술, 데이터 보안, 네트워크 및 시스템 보안, 보안 자동화 +이해 등 +- 윤리적 역량: AI 윤리 및 공정성, 규제 및 법적 지식 등 +- 관리적 역량: 위험 관리, 사고 대응, 거버넌스 정책 설계, 협업 능력 등 소프트 스킬 등 +거버넌스 담당자는 AI 시스템 생명주기에 따라 조직이 보안 관련 내부 규정을 준수함을 확인・감 +독해야 함. 또한, 정의된 규정을 실행하고 관리하기 위해 각 담당자에게 관련 교육을 충분히 제공 +해야 함 + + +![이미지 39-0](images/p0039_img0.png) + + +![이미지 39-1](images/p0039_img1.png) + + +![이미지 39-2](images/p0039_img2.png) + + +![이미지 39-3](images/p0039_img3.png) + + +![이미지 39-4](images/p0039_img4.png) + + +--- + +1.2 +AI 모델개발/서비스 제공에 대한 위험관리 계획의 수립AI 개발자, AI 서비스 제공자 공통사항 +• AI 시스템에 대한 보안 측면에서의 위험관리 계획은 모델 도난, 해킹, 기밀 데이터 유출, 서비스 +마비 등의 위협을 방지하기 위해 필수적임. 모델개발/서비스 운영 생명주기에 걸쳐 나타날 수 있는 +위험요소를 분석하고, 지속적인 보안 점검, 접근 통제, 데이터 보호, 모델 무결성 유지 등의 전략 +을 통해 AI 시스템에 대한 위험요소를 제거·완화해야 함 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 +위험요소를 분석・도출하고 있는가? +• AI 모델개발/서비스 제공 생명주기 전반에서 보안 위험 요소를 분석·도출하는 것이 중요한 이유 +는 다음과 같음 +- 데이터 및 모델의 보안 취약점으로 인한 피해 예방 +- AI 모델의 신뢰성과 무결성 유지, AI 서비스의 악용 방지 +- AI 시스템의 안정성과 지속 가능성 확보 +- 개발/서비스 기업의 경제적 손실 방지 및 지속적적인 성장과 경쟁력 확보 +• 따라서 AI 모델개발/서비스 제공 기업에서 보안 위험을 사전에 분석하고 대응 전략을 마련하는 +것은 AI 기술/서비스의 안정성과 지속 가능성을 보장하는 필수적인 과정임 +• AI 모델개발/서비스 제공 생명주기 전반에서 보안 위험 요소를 도출하려면 각 단계별로 발생 가능한 +위협을 분석하고, 보안 정책 및 기술적 대응 방안을 마련하는 것이 필수적임. 이를 위해 보안 테스트, +위협 모델링, 침투 테스트, 지속적인 모니터링 및 AI 보안 거버넌스 구축을 적극적으로 수행해야 함 +예방・대응 필요한 보안 관련 취약점 예시 + +## 1. 데이터와 관련된 취약점 + +- 데이터 무결성 문제: AI 모델이 학습하는 데이터셋이 조작되거나 변조되면, 모델이 왜곡된 결과를 생성할 수 있음 + +## 2. 알고리즘과 모델의 취약점 + +- 모델 탈취: 공격자가 AI 모델에 접근해 모델의 내부 구조와 학습 데이터를 복제하거나 악용할 수 있음 +- 모델 업데이트의 취약점: 지속적으로 업데이트되는 AI 시스템이 악의적인 코드나 데이터를 통해 오염될 위험도 존재할 +수 있음 +- 소스코드 및 라이브러리의 보안 취약점으로 인한 서비스 마비, 데이터 유출 등 보안 위협 발생 우려 +- Prompt Injection, 악의적인 질의, 우회된 질의 등을 악용한 AI 탈옥(AI Jailbreak)으로 인해 AI 행동 유도, 유해한 콘 +텐츠 생성, 범죄 악용 등이 발생할 수 있음 +3. AI 시스템 인프라의 취약점 +- API 및 인터페이스 보안: AI 시스템의 API가 부적절하게 보호되면, 공격자가 시스템을 오용하거나 데이터를 유출할 수 있음 +- AI 시스템, 서비스에 대한 공격(DDoS 등)으로 인한 서비스 장애, 서비스 오류 등이 발생할 수 있음 +• 또한 AI 모델 개발/서비스 제공하는 과정에서 AI와 관련된 SW, HW 등 공급망 보안 관리 체계 +를 구축하고 관리하여야 함. +- AI 모델개발 및 서비스 제공과정에서의 개발, 제조, 장비 증 구매, 배포, 통합 운영 및 유지 보수 +또는 폐기 등 공급망 요소에서 모델과 서비스의 보안 취약점 등을 악용하여 AI 보안 위험이 발 +생할 수 있음 + + +![이미지 40-0](images/p0040_img0.png) + + +![이미지 40-1](images/p0040_img1.png) + + +![이미지 40-2](images/p0040_img2.png) + + +![이미지 40-3](images/p0040_img3.png) + + +![이미지 40-4](images/p0040_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +31 + +#### 1.2.2 + +AI 시스템에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +• 위협 및 위험 평가(TRA: Threat and Risk Assessment)는 시스템에 대한 다양한 위협과 취약 +성을 식별하고 이러한 시스템이 노출되는 위험 수준을 결정하며 적절한 보호 수준을 권장하는 체 +계적인 프로세스임 +- 위협 및 위험 평가를 수행하려면 먼저 시스템의 보안 분류를 결정하는 것이 중요함 +- 보안 분류는 위험을 평가할 때 위협 및 취약성 정보와 함께 사용됨 +• TRA의 목적은 위험을 최소화하면서 기밀성, 무결성 및 가용성 보호를 극대화하는 것이며, 일반 +적으로 TRA에는 다음의 사항이 포함됨; ①기능 요구사항 사양 검토, ②위협 및 취약점 식별, ③ +위험 식별, 분석 및 평가, ④적절한 보안 통제에 대한 권장 사항 +• AI 위험을 다음과 같이 평가함; ①위험 분석 결과를 위험 기준과 비교함, ②위험 처리를 위해 평 +가된 위험의 우선순위를 정함 +• 조직은 AI 위험 평가 프로세스에 대해 문서화된 정보로 관리/유지해야 함 +• (예시) 공격 벡터 식별 +- 공격 표면 매핑: 시스템이 외부와 상호작용하는 지점을 분석하여 공격 가능성을 확인 +▸데이터 입력 및 출력 채널, API 엔드포인트, 모델 업데이트 또는 재훈련 과정 +- 잠재적 위협 목록 작성 +▸데이터 수준 위협: 데이터 오염, 데이터 유출, 적대적 데이터 공격 등 +▸모델 수준 위협: 모델 도용, 적대적 샘플 공격, 모델 역공학, AI 탈옥 등 +▸시스템 수준 위협: 인증 우회, API 악용, 서비스 거부(DoS) 공격 등 + +#### 1.2.3 + +AI 시스템에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +• AI를 구현하는 이해관계자는 위험 요소에 대한 대응 방안을 마련하고, 위험이 제거 및 완화되었 +는지 확인해야 함 +• 대응 방안이란, 구현 및 운영 방식 등의 절차, 소프트웨어 및 하드웨어 기능, 모델 학습 기법 및 +전략 등 기술적으로 적용할 수 있는 모든 방법을 의미하고, 위험 요소의 분석 과정에서 평가한 파 +급효과가 가장 큰 위험 요소를 우선적으로 대응해야 함 +• 대응 방안이 적용된 이후에는 파급효과를 재평가함으로써 위험 요소가 실제로 제거, 방지 혹은 이 +의 영향이 완화되었는지 확인해야 함 +• (예시) 설계 및 개발 단계에서의 보안 강화 +- 보안 중심 설계(Security by Design): AI 시스템을 설계할 때부터 보안을 우선시하는 접근법을 적용 +- AI 탈옥, 모델 해킹 등 방지 : AI 모델에 대한 적대적 공격, 프롬프트 인젝션 등의 공격을 방 +지하기 위한 적대적 훈련을 실시 및 검증 +- 데이터 무결성 검증: 학습 데이터의 품질과 신뢰성을 확인하고, 데이터 중복 또는 오염을 방지 +- 개발 소스코드, 라이브러리 등의 보안 취약점 점검 및 시큐어코딩 적용 등 개발 보안 가이드라 +인 및 SW 공급망 보안 가이드라인 등 준수 + + +![이미지 41-0](images/p0041_img0.png) + + +![이미지 41-1](images/p0041_img1.png) + + +![이미지 41-2](images/p0041_img2.png) + + +![이미지 41-3](images/p0041_img3.png) + + +![이미지 41-4](images/p0041_img4.png) + + +--- + +데이터 수집 및 준비 +2.1 +데이터 수집 및 전처리 +• AI 모델은 중요 데이터를 보호하고, 승인되지 않은 접근이나 유출을 방지하여야 함. 이는 사용자의 +신뢰를 유지하고, 법적 및 규제 요구 사항을 준수하며, 기밀성/무결성을 보장하기 위해 필수적임. + +#### 2.1.1 + +데이터 수집 시 사용되는 네트워크 프로토콜이 충분한 보안 기능을 제공하고 +있는가? +• 데이터 수집 시 사용되는 네트워크 프로토콜이 충분한 보안 기능을 제공하지 않으면, 데이터가 전 +송 중에 공격자에게 탈취되거나 변조될 수 있음 +• 데이터 전송 중에 발생하는 공격으로 인해 데이터 유출이나 변조가 발생하면, AI 모델에 잘못된 +데이터가 제공되거나 중요한 정보가 손실될 수 있음 +- 데이터 수집 과정에서 공격자가 데이터를 조작하거나 변조할 경우, 신뢰할 수 없는 데이터가 +AI 모델에 전달됨. 특히 센서나 IoT 장치에서 수집된 데이터는 외부 요인에 의해 쉽게 변조될 +수 있음 +- 변조된 데이터는 AI 시스템의 예측 정확도를 크게 떨어뜨리며, 특히 의사결정이 중요한 분야 +(의료, 금융)에서 큰 문제를 야기할 수 있음 +• (예시) 사용 중인 프로토콜 파악 +- 프로토콜 유형 식별: HTTP/HTTPS, FTP/SFTP, MQTT, WebSocket 등 사용 중인 프로토 +콜 확인 +- 전송 계층 확인: TCP, UDP 등 기본 전송 계층 프로토콜도 파악 +• (예시) 보안 표준 준수 여부 검토 +- 암호화 프로토콜 확인: HTTPS, SFTP, VPN 등 +- 인증 메커니즘: 프로토콜에서 다중 인증(Multi-Factor Authentication, MFA) 지원 여부 + + +![이미지 42-0](images/p0042_img0.png) + + +![이미지 42-1](images/p0042_img1.png) + + +![이미지 42-2](images/p0042_img2.png) + + +![이미지 42-3](images/p0042_img3.png) + + +![이미지 42-4](images/p0042_img4.png) + + +![이미지 42-5](images/p0042_img5.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +33 + +#### 2.1.2 + +수집된 데이터의 보관 및 삭제 절차가 명확하게 정의되어 있는가? +• 수집된 데이터의 보관 및 삭제 절차가 명확하지 않거나, 삭제 정책이 적용되지 않으면 오래된 데 +이터나 필요 없는 데이터가 계속 남아 있어 보안 위협이 될 수 있음 +- 보유 기간이 만료된 데이터가 지속적으로 저장되면, 불필요한 위험이 증가하며, 해커가 공격 +시 사용할 수 있는 표적이 될 수 있음 +• 데이터 완전 삭제 및 파기 : 데이터가 저장된 모든 장치에서 데이터를 완전히 삭제하고, 중요 데 +이터는 물리적으로 파기함. 이를 위해 데이터 완전 삭제(secure erase)나 장치 파쇄 등의 방법 +을 사용함 +• (예시) 보관 절차 정의 +- 데이터 암호화: 저장 시 안전한 암호화 방식 채택 +- 접근 통제: 권한이 있는 사용자만 데이터에 접근할 수 있도록 설정 +- 백업 정책: 필요 시 데이터 복구를 위한 백업 절차 마련 +• (예시) 삭제 절차 정의 +- 삭제 방법: 완전 삭제(예: 디지털 삭제 기술, 영구 삭제), 익명화(비식별화) +- 자동화된 삭제 시스템: 보관 기간 종료 시 자동으로 삭제되는 메커니즘 구축 +- 감사 로그 유지: 삭제 기록을 추적하고 검증 가능하게 유지 + +#### 2.1.3 + +전처리 과정에서 중요 데이터를 보호하기 위해 암호화 기술을 사용하고 있는가? +• 데이터 수집 및 처리 과정에서 암호화가 적용되지 않으면, 민감한 정보가 외부 공격자에게 쉽게 +노출될 수 있음. +• 암호화되지 않은 데이터는 네트워크 스니핑, 중간자 공격(MITM) 등에 취약하며, 이는 데이터 유 +출로 이어질 수 있음 +• 중요 데이터 보호 +- 기밀 정보 보호: 전처리 단계에서는 데이터를 수집, 정리, 변환하는 과정에서 원본 데이터가 +노출될 가능성이 높음. 암호화를 사용하면 중요 데이터가 보호됨 +• (예시) 암호화 적용 방법 +- 저장 데이터 암호화 (At-Rest Encryption) +▸데이터가 저장될 때 암호화 적용 +▸파일 수준 또는 데이터베이스 암호화 사용 +▸기술 예시: AES(Advanced Encryption Standard) 256비트, TDE(Transparent Data +Encryption) for databases + + +![이미지 43-0](images/p0043_img0.png) + + +![이미지 43-1](images/p0043_img1.png) + + +![이미지 43-2](images/p0043_img2.png) + + +![이미지 43-3](images/p0043_img3.png) + + +![이미지 43-4](images/p0043_img4.png) + + +--- + +- 전송 데이터 암호화 (In-Transit Encryption): 네트워크를 통해 데이터를 전송할 때 보호 +▸기술 예시: HTTPS/TLS, VPN, SSH +- 처리 중 데이터 암호화 (In-Use Encryption): 전처리 단계에서 데이터를 처리할 때도 보호 +▸기술 예시: 동형 암호화 (Homomorphic Encryption), 암호화 메모리(Intel SGX, AMD +SEV) +• (예시) 암호화 단계별 사용 +- 데이터 수집 후 암호화: 데이터를 수집한 즉시 암호화하여 원본 데이터를 보호 +- 전처리 중 암호화 유지: 동형 암호화나 암호화 연산 라이브러리 사용 +- 전처리 후 암호화된 출력 저장: 전처리 후 데이터 결과도 암호화하여 저장 +• (예시) 적용 가능한 암호화 기술 +- AES (Advanced Encryption Standard): 대칭 키 암호화 방식, 빠르고 효율적이며 저장 및 +전송 데이터 암호화에 적합 +- RSA (Rivest–Shamir–Adleman): 비대칭 키 암호화 방식, 키 관리 및 소량의 데이터 암호화 +에 적합 +- 동형 암호화 (Homomorphic Encryption): 암호화 상태에서 데이터 연산이 가능 +- 해시 함수: 데이터 식별을 위해 비가역적 해싱 적용, 예: SHA-256, bcrypt +• (예시) 암호화 키 관리 +- 키 생성: 안전한 키 생성 방식 사용 +- 키 저장: 하드웨어 보안 모듈(Hardware Security Module, HSM) 또는 키 관리 서비스 +(KMS) 활용 +- 키 교체 및 폐기: 키 교체 주기와 폐기 절차 명확화 + + +![이미지 44-0](images/p0044_img0.png) + + +![이미지 44-1](images/p0044_img1.png) + + +![이미지 44-2](images/p0044_img2.png) + + +![이미지 44-3](images/p0044_img3.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +35 +2.2 +데이터 무결성 검증 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 모델 개발 시 데이터 처리 과정에서 데이터 무결성 검증의 목적은 데이터가 정확하고, 완전하 +며, 변조되지 않았음을 보장하여 신뢰할 수 있는 결과를 도출하는 데 있음 + +#### 2.2.1 + +데이터 처리 과정에서 데이터 무결성을 검증하고 있는가? +• 데이터 무결성의 검증은 공격자의 침해 영향 최소화에 도움이 됨 +- 안전한 학습 환경 조성: 무결성을 검증하면 외부 공격으로부터 AI 모델의 학습 환경을 보호할 +수 있음 +- 사고 대응 용이성 제공: 무결성 검증 기록은 보안 사고 발생 시 문제를 빠르게 식별하고 대응 +하는 데 도움을 줌 +• (예시) 데이터 전송 시 무결성 검증 방법 +- 메시지 인증 코드(MAC): +▸데이터를 전송할 때 메시지 인증 코드를 함께 전송 +▸수신 측에서 재계산한 MAC과 비교하여 데이터 무결성 검증 +▸HMAC(Hash-based Message Authentication Code): 암호화 키와 해시를 결합하여 안 +전한 인증 코드 생성 +- 데이터 패킷의 체크섬 +▸데이터 전송 시 각 패킷에 체크섬을 포함하여 전송 +▸수신 측에서 체크섬을 계산하여 무결성 확인 +▸TCP/UDP 프로토콜의 기본 기능으로 지원 + + +![이미지 45-0](images/p0045_img0.png) + + +![이미지 45-1](images/p0045_img1.png) + + +![이미지 45-2](images/p0045_img2.png) + + +![이미지 45-3](images/p0045_img3.png) + + +![이미지 45-4](images/p0045_img4.png) + + +--- + + +#### 2.2.2 + +데이터에 접근할 수 있는 권한을 제한하고 있는가? +• 데이터 수집 및 처리 과정에서 접근 제어가 제대로 설정되지 않으면, 권한이 없는 사용자가 기밀 +데이터에 접근할 수 있음 +• 권한 없는 접근은 데이터 유출뿐만 아니라 데이터 무결성을 해치거나 악의적으로 수정할 위험을 +초래할 수 있음 +• 내부 위협 방지 +- 내부자 위험 관리: 내부 직원이나 협력자가 데이터를 무단으로 접근하거나 외부로 유출할 가능 +성이 있음. 권한 제한은 내부 위협을 줄이는 데 필수적임 +- 역할 기반 접근 제어(RBAC): 필요한 작업에만 접근 권한을 부여하면, 데이터 남용과 실수를 +예방할 수 있음 +• 보안 사고의 범위 최소화 +- 사고 시 영향 제한: 데이터 접근이 제한되면, 보안 사고 발생 시 피해 범위를 줄일 수 있음. +권한이 없는 사람은 데이터에 접근할 수 없으므로 유출 위험이 감소함 +- 접근 로그 및 추적성 확보: 제한된 권한으로 접근이 이루어질 경우, 어떤 사용자가 데이터를 +조회했는지 명확히 파악할 수 있어 사고 발생 시 원인 분석이 용이함 +• 과도한 데이터 접근으로 인한 리소스 낭비 +- 불필요한 데이터 활용 방지: 권한이 제한되지 않으면, AI 개발자나 팀원이 불필요한 데이터에 +접근하여 리소스를 낭비할 가능성이 있음 +- 효율적인 데이터 관리: 필요하지 않은 데이터에 대한 접근을 제한하면, 데이터 관리를 효율적 +으로 수행할 수 있음 +• (예시) 역할 기반 접근 제어 (Role-Based Access Control, RBAC) +- 사용자에게 특정 역할(Role)을 할당하고, 역할에 따라 데이터 접근 권한을 제한 +- 예) 관리자: 모든 데이터에 접근 가능, 데이터 분석가: 비식별화된 데이터만 접근 가능, 일반 +사용자: 제한된 데이터에만 접근 가능 +• (예시) 원칙 기반 접근 제어 (Policy-Based Access Control, PBAC) +- 접근 정책을 정의하여 조건에 따라 데이터 접근 허용 여부를 결정 +- 예) 특정 시간대에만 접근 허용, 회사 내부 네트워크에서만 접근 가능 +• (예시) 다중 인증(Multi-Factor Authentication, MFA) +- 데이터 접근 시 추가적인 인증 단계를 요구 +- MFA 요소: +▸무엇을 알고 있는가: 비밀번호, PIN +▸무엇을 소유하고 있는가: OTP, 인증 앱 +▸무엇인가: 생체 인식(지문, 얼굴 인식) +- MFA를 IAM 시스템과 통합하여 강화된 보안을 제공 + + +![이미지 46-0](images/p0046_img0.png) + + +![이미지 46-1](images/p0046_img1.png) + + +![이미지 46-2](images/p0046_img2.png) + + +![이미지 46-3](images/p0046_img3.png) + + +![이미지 46-4](images/p0046_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +37 +2.3 +데이터 공격에 대한 방어 +AI 개발자, AI 서비스 제공자 공통사항 +• 인공지능 서비스 개발 또는 운영 과정에서 의도적으로 학습 데이터를 변질시키거나 입력 데이터 +에 최소한의 변조를 가해 예상과는 다른 결과를 출력하도록 하는 공격에 노출될 수 있으므로, 이 +를 대처할 방안을 검토 및 적용하는 것이 바람직함 + +#### 2.3.1 + +데이터 오염(poisoning) 공격에 대한 방어 대책을 마련하고 있는가? +• 적대적 공격을 방어하고 AI 서비스의 강건성을 높이기 위한 다양한 방어 기법이 존재함. 특히 데 +이터 수집 및 준비 단계에서의 오염 공격 방어를 위한 대표적 기법으로는 적대적 학습 +(adversarial training), Gradient Masking, Feature Squeezing 등이 있음 +• (예시) 데이터 오염(Poisoning) 공격에 대한 방어 대책 +➊ 데이터 수준 방어 +- 데이터 검증 및 정제: 데이터 수집 및 학습 전 단계에서 품질 검증 및 노이즈 제거 +- 이상치 탐지 기술을 활용해 의심스러운 데이터를 식별(예: Isolation Forest, PCA) +- 신뢰할 수 있는 데이터 소스: 신뢰할 수 있는 출처에서만 데이터를 수집하여 악의적인 데이터 +유입 방지 +- 데이터 감사: 정기적으로 데이터셋을 검토하여 의도적으로 삽입된 비정상 데이터를 탐지 +➋모델 수준 방어 +- 로버스트 학습 알고리즘: 적대적 공격에 견고한 알고리즘을 사용(예: Krum, Bulyan 등 집계 +전략) +- 안정적 훈련(Stable Training): 데이터 가중치를 재조정하여 이상치가 모델 학습에 미치는 영 +향을 완화 +방어기법 +방어기법 내용 +적대적 학습 +(adversarial training) +모델을 학습시킬 때, 적대적 사례로 활용할 수 있는 모든 경우의 수를 미리 고려하여 학 +습 데이터셋에 포함시키는 방법. 충분한 수와 다양성이 보장된 적대적 데이터를 생성하 +는 과정 없이는 그 성능을 보장할 수 없음 +Gradient Masking +(Distillation) +대부분의 공격은 모델 추론 과정에서의 경사(gradient)를 보고 이루어지므로 학습 모델 +의 경사가 그대로 노출되는 것을 방지하거나 gradient masking, 정규화 방법 등을 통 +해 경사가 두드러지지 않게 하여 적대적 공격에 방어할 수 있는 방법(distillation)들이 +제안됨 +Feature Squeezing +본래의 학습 모델과 별도로, 주어진 입력이 적대적 사례인지 아닌지를 판단하는 학습 모 +델을 추가하는 방법. 그 외에 다수의 학습 모델을 조합하여 시스템을 구성하면 특정 모 +델에 대한 화이트박스 공격을 피할 수 있으며, 특정 모델에 적용되는 적대적 공격이 불 +가능해짐 +적대적 공격에 대한 방어 기법 + + +![이미지 47-0](images/p0047_img0.png) + + +![이미지 47-1](images/p0047_img1.png) + + +![이미지 47-2](images/p0047_img2.png) + + +![이미지 47-3](images/p0047_img3.png) + + +![이미지 47-4](images/p0047_img4.png) + + +--- + + +#### 2.3.2 + +데이터 회피(evasion) 공격에 대한 방어 대책을 마련하고 있는가? +• (예시) 데이터 회피(evasion) 공격에 대한 방어 대책 +- 입력 데이터 검증 및 전처리 강화 +▸데이터 정규화: 입력 데이터를 일정한 범위로 정규화하여 이상값을 감지 +▸이상 탐지 모델: 데이터 분포에서 벗어난 입력을 감지하고 차단 +예) Autoencoder, Isolation Forest 등을 사용 +▸입력 필터링: 입력 이미지나 데이터를 변조 탐지 알고리즘으로 사전 처리 +- 모델 예측 확률 제한 +▸출력 확률 경계 설정: 모델의 출력 확률이 특정 범위를 벗어나면 의심스러운 입력으로 간주 +▸확률 분포 점검: Softmax 출력 분포의 평탄화 정도를 분석하여 이상 여부 판단 +- 방어용 알고리즘 사용 +▸Defensive Distillation: 모델을 학습시키기 전에 출력 확률 분포를 부드럽게 만들어 적대적 +공격의 효과를 감소, 높은 온도 매개변수를 사용하여 Softmax를 부드럽게 학습 +▸Randomization: 입력 데이터나 모델의 일부를 무작위화(randomize)하여 공격자가 예측하 +기 어렵게 구성. 예) 입력 크기 변형, 픽셀 섞기 등 + +#### 2.3.3 + +데이터 유출・변조 공격을 방지하기 위한 방안을 마련하고 있는가? +• 데이터 수집 및 처리 단계에서 기밀 데이터를 보호하지 못하면 데이터 유출이 발생할 수 있음. +- 암호화되지 않은 데이터는 네트워크 스니핑, 중간자 공격(MITM) 등에 취약하며, 이는 데이터 +유출로 이어질 수 있음 +- 데이터 전송 중에 발생하는 공격으로 인해 데이터 유출이나 변조가 발생하면, AI 모델에 잘못 +된 데이터가 제공되거나 중요한 정보가 손실될 수 있음 +• 액세스 제어 +- 역할 기반 접근 제어(RBAC): 데이터를 처리하거나 접근할 수 있는 사용자와 시스템에 권한을 +제한 +- 최소 권한 원칙(Least Privilege): 사용자와 프로세스가 필요한 데이터에만 접근할 수 있도록 +권한을 최소화 +- 다중 인증(MFA): 데이터를 다룰 때 추가적인 인증 단계를 요구하여 보안을 강화 +• 데이터 접근 및 사용 추적 +- 로그 기록 및 모니터링: 데이터에 대한 접근 기록을 보관하고 정기적으로 모니터링하여 이상 +활동 탐지 +- 데이터 사용 감사: 데이터 사용 현황을 주기적으로 검토하고, 비정상적인 패턴이나 의심스러운 +행동을 분석 + + +![이미지 48-0](images/p0048_img0.png) + + +![이미지 48-1](images/p0048_img1.png) + + +![이미지 48-2](images/p0048_img2.png) + + +![이미지 48-3](images/p0048_img3.png) + + +![이미지 48-4](images/p0048_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +39 +모델개발 (학습/모델링/검증) +3.1 +학습/검증 환경에 대한 보안(Secure Training Environment) +• 학습・검증을 진행하는 환경이 안전하지 않을 경우 공격자가 학습 프로세스를 방해하거나 모델을 +악의적으로 수정할 수 있음 + +#### 3.1.1 + +모델 학습을 진행하는 환경이 안전하게 보안조치 되어 있는가? +• 모델 학습을 진행하는 환경이 안전하지 않거나, 외부에서 무단 접근이 가능할 경우 공격자는 학습 +중인 모델에 접근하여 모델의 매개변수를 조작하거나 학습 데이터를 변조하여 시스템에 악성 코 +드를 삽입할 수 있음 +• (예시) AI 모델 학습 환경을 안전하게 보안 조치하기 위한 주요 방법 +➊ 물리적 보안 +- 접근 제한: 모델 학습이 진행되는 서버룸이나 데이터센터에 물리적 접근 제어 시스템(예: 카드 +키, 생체 인증) 도입 +- 감시 시스템: 학습 환경의 물리적 보안을 강화하기 위해 CCTV 및 경고 시스템 설치 +- 보안 네트워크 분리: 학습 서버가 외부 네트워크와 분리되도록 설계하여 불법 접근 차단 +➋ 네트워크 보안 +- 방화벽(Firewall): 외부 및 내부 네트워크로부터 불법 트래픽을 차단 +- VPN 사용: 학습 환경에 접근할 때 VPN을 사용하여 암호화된 통신 경로 제공 +- IDS/IPS 시스템: 침입 탐지 및 방지 시스템을 설치하여 의심스러운 네트워크 활동 탐지 및 차단 +- 네트워크 분리: 학습 환경을 공용 네트워크에서 분리하고, 필요한 경우 최소한의 포트를 통해 +통신 + + +![이미지 49-0](images/p0049_img0.png) + + +![이미지 49-1](images/p0049_img1.png) + + +![이미지 49-2](images/p0049_img2.png) + + +![이미지 49-3](images/p0049_img3.png) + + +![이미지 49-4](images/p0049_img4.png) + + +![이미지 49-5](images/p0049_img5.png) + + +--- + + +#### 3.1.2 + +학습 또는 검증 단계에서 악의적인 사용자가 허위 데이터를 삽입할 가능성을 +차단하고 있는가? +• 학습 또는 검증 단계에서 악의적인 사용자가 허위 데이터를 삽입(Fake Data Injection)할 경우, +모델이 이러한 데이터를 학습하면서 잘못된 결과를 도출할 수 있음. 이는 학습 데이터가 공개 출 +처일 때 더욱 취약함 +• 허위 데이터로 학습된 모델은 신뢰할 수 없는 결과를 생성할 가능성이 높으며, 이는 모델 성능 저 +하 및 보안 취약점으로 이어짐 +• 허위 데이터를 삽입하려는 시도를 차단하려면 데이터 수집, 전처리, 학습, 검증, 배포 등 모든 단 +계에서 종합적인 보안 조치를 적용해야 함. 신뢰할 수 있는 데이터 소스 사용, 디지털 서명 및 인 +증, 이상치 탐지, 권한 관리 등 기술적 조치와 함께 조직 차원의 교육과 정책적 조치가 병행되어 +야 함 +• (예시) 악의적인 사용자가 허위 데이터를 삽입할 가능성을 차단할 수 있도록 사용자 접근 관리 +➊ 인증 및 권한 관리 +- 다중 인증(Multi-Factor Authentication): 학습 환경 및 데이터에 접근하려면 추가 인증 단 +계를 요구 +- 권한 기반 접근 제어(RBAC): 데이터에 접근할 수 있는 사용자 및 애플리케이션을 제한 +➋ 활동 모니터링 +- 사용자 로그 기록: 학습 환경에서 데이터와 상호작용하는 사용자 활동을 기록 +- 비정상 활동 탐지: 의심스러운 활동이 감지되면 즉시 차단 및 경고 + + +![이미지 50-0](images/p0050_img0.png) + + +![이미지 50-1](images/p0050_img1.png) + + +![이미지 50-2](images/p0050_img2.png) + + +![이미지 50-3](images/p0050_img3.png) + + +![이미지 50-4](images/p0050_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +41 + +#### 3.1.3 + +연합 학습(Federated Learning)에 참여하는 장치 중 악의적인 장치가 있는지 +검증하고 있는가? +• 연합 학습(Federated Learning)은 여러 분산된 장치에서 데이터를 수집하여 학습을 진행하는 +방법이며, 참여하는 장치 중 악의적인 장치가 있으면 전체 모델 학습에 악영향을 미칠 수 있음 +• 악의적인 참여자가 학습 데이터나 업데이트를 조작해 전체 모델에 영향을 미치면, 연합 학습의 신 +뢰성이 저하되고 보안 위협이 발생할 수 있음 +• (예시) 연합 학습(Federated Learning)에 참여하는 장치 중 악의적인 장치가 있는지 검증하는 +방법 +➊ 모델 업데이트 유효성 검증 +- 비교 검증: 제출된 업데이트를 다수의 장치로부터 수집된 정상 업데이트와 비교하여 편향성이 +나 비정상적인 패턴 탐지 +- 검증 데이터 기반 평가: 중앙 서버에서 검증 데이터셋을 사용해 각 참여자의 업데이트를 평가 +하고, 성능이 현저히 낮거나 의심스러운 경우 차단 +➋ 신뢰 기반 접근으로 참여 장치 검증 +- 디지털 인증: 참여 장치에 디지털 인증서를 부여하여 인증된 장치만 학습에 참여 +- 장치 프로파일링: 장치의 과거 참여 기록과 행동 패턴을 기반으로 신뢰 점수를 부여하고 악의 +적 활동을 탐지 +➌ 장치 격리로 참여 장치 검증 +- 의심 장치 격리: 악의적 의심이 드는 장치를 임시적으로 학습 과정에서 제외하고 추가 검증 +- 샌드박스 테스트: 의심 장치의 업데이트를 별도의 환경에서 테스트하여 안전성 확인 + + +![이미지 51-0](images/p0051_img0.png) + + +![이미지 51-1](images/p0051_img1.png) + + +![이미지 51-2](images/p0051_img2.png) + + +![이미지 51-3](images/p0051_img3.png) + + +![이미지 51-4](images/p0051_img4.png) + + +--- + +3.2 +모델 공격에 대한 방어 +• 인공지능 모델은 적대적 의도를 가진 사용자에 의해 학습 데이터 및 기능을 도용당하거나 다른 +방식의 공격으로 인한 AI 탈옥, AI 모델 탈취 등이 발생할 수 있으므로 이를 방지 또는 완화하기 +위한 대책을 수립함 + +#### 3.2.1 + +AI Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +• “Prompt Injection”은 공격자가 정교하게 설계된 입력을 통해 AI의 동작이나 출력을 조작하여 +의도하지 않은 결과를 유도함. 유형으로 ▲직접 프롬프트 인젝션 ▲간접 프롬프트 인젝션, ▲다중 +모달 및 언어 기반 인젝션 등이 있음 +• “Prompt Injection”은 출력을 조작하여 의도하지 않은 결과 유도, AI 탈옥 또는 모델 탈취 등을 +발생시킬 수 있음 +• “Prompt Injection”은 AI 애플리케이션의 보안을 위협할 수 있는 가장 흔한 공격으로, 다양한 +애플리케이션에서 발생 가능하며, 방어가 까다롭기 때문에 지속적인 모니터링과 보안 대책이 필수 +방어 기법 +세부 내용 +모델 동작 제한 +모델의 역할, 기능, 한계에 대한 구체적인 지침을 설정. 응답을 특정 작업이나 주 +제로 제한하며, 핵심 지침을 수정하려는 시도를 무시하도록 지시 +예상 출력 형식 정의 및 검증 +명확한 출력 형식을 지정하고 상세한 근거와 출처를 요구 +입력 및 출력 필터링 구현 +민감한 내용 감지 및 차단을 위한 규칙을 설정. RAG Triad를 활용해 ▲컨텍스트 +관련성, ▲정보 근거성, ▲질문/응답 관련성을 평가하며 잠재적으로 악성일 수 있 +는 출력을 식별 +권한 제어 및 최소 권한 접근 +시행 +애플리케이션에 자체 API 토큰을 제공하여 확장 가능한 기능을 구현하고 모델 대 +신 코드에서 처리되도록 설계. 모델의 접근 권한을 필요 최소한의 수준으로 제한 +고위험 작업에 대한 사용자 +승인 요구 +민감한 작업(예: 고급 권한이 필요한 작업)을 위한 사용자 승인 절차 +(human-in-the-loop controls)를 구현하여 비인가된 행동을 방지 +외부 콘텐츠 분리 및 식별 +신뢰할 수 없는 콘텐츠를 분리하고 이를 명확히 표시하여 사용자 프롬프트에 미 +치는 영향을 제한 +적대적 테스트 및 공격 +시뮬레이션 수행 +모델을 신뢰할 수 없는 사용자로 취급하여 침투 테스트와 침해 시뮬레이션을 정 +기적으로 수행하여 신뢰 경계 및 접근 제어의 효과를 평가 +“Prompt Injection”에 대한 예방책 + + +![이미지 52-0](images/p0052_img0.png) + + +![이미지 52-1](images/p0052_img1.png) + + +![이미지 52-2](images/p0052_img2.png) + + +![이미지 52-3](images/p0052_img3.png) + + +![이미지 52-4](images/p0052_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +43 + +#### 3.2.2 + +적대적 예제 공격(Adversarial Example Attacks)에 대한 방어 방안을 수립하고 +있는가? +• 모델 학습이나 검증 과정에서 적대적 공격을 고려하지 않으면, 공격자가 고의적으로 생성한 적대 +적 예제(Adversarial Examples)에 의해 모델이 잘못된 결정을 내리게 할 수 있음. 적대적 예제 +는 인간이 식별하기 어려운 미세한 변화를 통해 모델을 속임 +• 적대적 공격으로 인해 AI 모델이 이미지 분류, 음성 인식, 자율주행 등에서 오작동을 일으킬 수 +있으며, 이는 안전성과 직결된 문제를 야기할 수 있음 +• (예시) 적대적 예제 공격(Adversarial Example Attacks) 방어 방법: 적대적 훈련(Adversarial +Training) +➊ 적대적 샘플 포함 학습 +- 적대적 샘플 생성 및 추가: 학습 데이터에 적대적 샘플을 포함시켜 모델이 이러한 입력에 대해 +견고하게 학습 +- 공격 기법에 따라 다양화: FGSM(Fast Gradient Sign Method), PGD(Projected Gradient Descent) +와 같은 다양한 공격 기법으로 생성된 샘플을 포함 +➋ 정기적 업데이트 +- 새로운 공격 기법에 대해 정기적으로 모델을 재훈련하여 적대적 샘플 방어 능력 강화 +• (예시) 적대적 예제 공격(Adversarial Example Attacks) 방어 방법: 모델 설계 및 학습 과정 개선 +➊ 모델 견고성 강화 +- Dropout 및 정규화: 학습 과정에서 Dropout과 정규화를 사용해 과적합 방지 +- Gradient Masking: 모델이 내부 경사 정보를 공격자에게 노출하지 않도록 설계 +➋ Robust Optimization +- 학습 과정에서 적대적 샘플을 포함해 최적화 과정을 강화하는 알고리즘 사용 +➌ 다중 모델 앙상블 +- 여러 개의 모델을 조합해 하나의 예측값을 생성하여 특정 모델 공격의 성공률 감소 + + +![이미지 53-0](images/p0053_img0.png) + + +![이미지 53-1](images/p0053_img1.png) + + +![이미지 53-2](images/p0053_img2.png) + + +![이미지 53-3](images/p0053_img3.png) + + +![이미지 53-4](images/p0053_img4.png) + + +--- + + +#### 3.2.3 + +모델 회피 공격(model evasion attack)에 대한 방어 방안을 수립하고 있는가? +• 모델 회피 공격은 입력 데이터에 최소한의 변조를 가해 인공지능 모델을 속이는 기법임. 특히 이 +미지 메인은 약간의 변화가 발생해도 사람의 눈에 잘 띄지 않으므로 적대적 공격(adversarial +attack)에 취약함 +• 모델 회피 공격에 대한 방어는 다중 방어 전략을 통해 이루어져야 함. 적대적 훈련, 입력 전처리, +모델 앙상블과 같은 기술적 방어뿐만 아니라, 지속적 평가와 커뮤니티 협업을 통해 AI 모델의 강 +건성/안전성을 강화하는 것이 필수임 +• (예시) 적대적 훈련 (Adversarial Training) +- 개념: 공격자가 사용할 수 있는 적대적 예제(Adversarial Examples)를 모델 학습 데이터에 +포함시켜 훈련 +- 방법: 적대적 샘플을 생성하여, 원본 데이터와 적대적 데이터 모두로 모델을 훈련 +- 효과: 모델이 공격에 노출되었을 때도 강건성(Robustness)이 향상됨 +• (예시) 탐지 및 모니터링 시스템 구축 +- 개념: 입력이 정상적인 데이터 분포에서 벗어나면 이를 탐지해 방어 +- 방법: +▸Anomaly Detection: 이상 데이터 탐지 기법을 활용 +▸Input Certification: 입력 데이터가 허용 가능한 분포 내에 있는지 확인 +- 효과: 회피 공격을 조기에 탐지하고 대응할 수 있음 +• (예시) 방어적 디코딩 (Defensive Decoding) +- 개념: 입력 데이터를 처리하기 전에 추가적인 필터링과 디코딩을 수행해 모델의 취약점을 차단 +- 방법: +▸이미지 데이터에 대해 복원 네트워크를 사용하여 노이즈를 제거 +▸텍스트 데이터의 경우 문장 구조를 재확인하고 오류를 수정 +- 효과: 모델에 전달되는 데이터의 안전성 향상 + + +![이미지 54-0](images/p0054_img0.png) + + +![이미지 54-1](images/p0054_img1.png) + + +![이미지 54-2](images/p0054_img2.png) + + +![이미지 54-3](images/p0054_img3.png) + + +![이미지 54-4](images/p0054_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +45 + +#### 3.2.4 + +모델 오염 공격(Model Poisoning Attack)에 대한 방어 방안을 수립하고 있는가? +• 공격자가 훈련 데이터를 조작하여 AI 모델이 악의적인 방향으로 학습하도록 유도하는 공격임. 주 +로 훈련 데이터에 악성 데이터를 삽입해 모델이 왜곡된 학습을 하게 함 +• 모델이 공격자의 의도에 따라 편향된 결과를 도출할 수 있으며, 정상적인 상황에서 예측 오류가 +증가할 수 있음. 이는 AI 시스템의 신뢰성을 저하시키고, 악의적인 목적에 사용될 위험이 있음 +• (예시) 모델 오염 공격(Model Poisoning Attack) 방어 방법: 데이터 수준에서의 방어 +➊ 데이터 검증 및 정제 +- 데이터 무결성 검사: 데이터 수집 단계에서 해시 값을 비교하여 데이터 무결성을 검증 +- 이상치 탐지: 학습 데이터 내에서 비정상적인 패턴을 보이는 데이터를 식별 +예) Isolation Forest, PCA 기반 탐지 +- 샘플링 검토: 학습 데이터의 하위 샘플링을 무작위로 점검하여 의도적으로 조작된 데이터를 제거 +➋ 데이터 필터링 +- 노이즈 필터링: 데이터에 노이즈를 제거하거나 정규화를 수행하여 포이즈닝 효과를 완화 +➌ 신뢰할 수 있는 데이터 소스 사용 +- 데이터 수집 시 신뢰할 수 있는 출처에서 데이터를 획득하며, 외부 데이터 검증 프로세스 도입 + + +![이미지 55-0](images/p0055_img0.png) + + +![이미지 55-1](images/p0055_img1.png) + + +![이미지 55-2](images/p0055_img2.png) + + +![이미지 55-3](images/p0055_img3.png) + + +![이미지 55-4](images/p0055_img4.png) + + +--- + + +#### 3.2.5 + +모델 추출 공격(model extraction attack) 및 리버스 엔지니어링에 대한 방어 +방안을 수립하고 있는가? +• 모델 추출 공격은 학습된 모델의 다양한 입력에 대한 예측 결과를 분석하고 분류 기준을 추출하 +여 서비스 중인 학습 모델과 유사한 성능의 대체 모델을 구성하는 방법과 학습된 모델의 입력 데 +이터, 모델의 초매개변수(hyperparameter) 정보, 계층 구조 등을 추출하는 공격 방식이 존재함 +인공지능 모델 공격에 대한 주요 완화 방법에는 특정 시간 간격당 인공지능 서비스에 대한 질의 수 +를 제한, 의심스러운 질의에 대한 탐지 및 경고, 예측 결과의 난독화(obfuscation) 등이 있음 +방어 기법 분류 +방어 기법 내용 +질의 횟수 제한 +특정 기간 내에 수행할 수 있는 질의 수를 제한하여 모델 공격을 위한 반복적인 질의를 방 +어하는 기법 +학습기반 모니터링 +기계학습을 활용하여 모델 공격에 대해 사전 탐지 및 경고 알림, 상응하는 방어 기법을 실행 +하는 등 능동적으로 방어하는 기법 +결과 난독화 +예측 결과가 결정경계에 가까운 경우 예측 결과의 정확도를 임의로 낮춰 모델의 세부 속성 +에 대한 추출을 방해하는 기법 +인공지능 모델 추출 공격에 대한 방어 기법 (예시) +• (예시) 리버스 엔지니어링 방어 방법: 모델 출력 제어 +➊ 출력 제한 +- 결과 일반화: 모델 출력값(예: 확률 분포)을 과도하게 자세히 제공하지 않고, 최상위 클래스나 +간략화된 정보를 제공 +- 탑-k 제한: 모델이 반환하는 결과를 상위 k개의 결과로 제한하여 상세한 출력 제공 방지 +- 예: 분류 모델에서 확률값 대신 가장 높은 확률의 k개 클래스만 반환 +➋ 출력 노이즈 추가 +- 차등정보보호(Differential Privacy): 모델 출력에 소량의 노이즈를 추가하여 원본 모델 구조 +와 매개변수를 추론하기 어렵게 제공 +- 적응형 노이즈: 특정 질의 패턴에서만 노이즈를 추가해 공격자를 혼란시킴 +➌ 출력 왜곡 +- 랜덤화: 출력값의 순서나 범위를 무작위로 변경하여 제공함으로써 탈취 시도 무력화 +- 결과 변형: 특정 질의 패턴에서는 변형된 결과를 제공 + + +![이미지 56-0](images/p0056_img0.png) + + +![이미지 56-1](images/p0056_img1.png) + + +![이미지 56-2](images/p0056_img2.png) + + +![이미지 56-3](images/p0056_img3.png) + + +![이미지 56-4](images/p0056_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +47 + +#### 3.2.6 + +반복적인 질의 공격(Repetitive Query Attack)에 대한 방어 방안을 수립하고 +있는가? +• AI 모델 자체는 지적 재산으로서 보호가 필요하며, 적대적 공격이나 모델 탈취로부터 안전해야 +함. 특히, Model Denial of Service는 공격자가 LLM과 상호작용할 때 예외적으로 많은 양의 +리소스를 소모할 때 발생함. 이는 다른 사용자의 서비스 품질을 저하시킬 수 있으며, 잠재적으로 +높은 리소스 비용이 발생할 수 있음 +• 위와 같은 모델 공격에 대해서는 특정 기간 내에 개별 사용자 또는 특정 IP가 수행할 수 있는 질 +의 수를 제한하여 모델 공격을 위한 반복적인 질의를 방어하는 방법이 있음 +• (예시) 질의 제한 및 속도 조절 +➊ 요청 속도 제한 (Rate Limiting) +- 일정 시간 내 허용되는 질의 수를 제한하여 반복적이고 과도한 요청을 방지 +➋ 요청 빈도 감소 (Throttling) +- 동일한 사용자가 짧은 시간 내 다수의 요청을 보내는 경우 응답을 지연시켜 공격의 효율성 감소 +➌ 동적 속도 제한 +- 사용자의 행동 패턴에 따라 속도 제한 정책을 동적으로 조정 + +#### 3.2.7 + +기계 학습을 활용한 모델 공격에 대해 능동적으로 방어하고 있는가? +• 기계 학습을 활용한 모델 공격에 대해서는 사전 탐지 및 경고 알림, 상응하는 방어 기법을 실행하는 +등 능동적으로 방어할 필요가 있음 +- DoS 공격을 나타낼 수 있는 비정상적인 급증이나 패턴을 식별하기 위해 LLM의 리소스 사용 +률을 지속적으로 모니터링함 +- 요청 또는 단계당 리소스 사용량을 제한하여 복잡한 부분을 포함하는 요청을 더 느리게 실행 +• (예시) 기계 학습을 활용한 모델 공격 방어 방법: 공격 탐지 및 모니터링 +➊ 이상 탐지 기법 +- ML 기반 탐지: 요청 데이터와 사용 패턴을 학습하여 정상 사용자와 공격자의 행동 차이를 식 +별. Isolation Forest, DBSCAN, Autoencoder 등을 활용해 비정상적인 요청 탐지 +- 행동 패턴 분석: 반복적이고 대량의 요청, 유사한 질의 패턴을 분석하여 의심스러운 활동을 탐지 +➋ 실시간 로그 분석 +- 질의 기록 분석: API 요청 및 응답 로그를 저장하고 의심스러운 패턴을 실시간으로 탐지 +- 알고리즘 변칙 탐지: 요청 데이터가 모델에 미치는 영향을 분석하여 비정상적인 변화를 탐지 +➌ 경고 시스템 +- 비정상적인 요청이 감지되면 관리자에게 즉시 알림을 보내거나 자동으로 차단 + + +![이미지 57-0](images/p0057_img0.png) + + +![이미지 57-1](images/p0057_img1.png) + + +![이미지 57-2](images/p0057_img2.png) + + +![이미지 57-3](images/p0057_img3.png) + + +![이미지 57-4](images/p0057_img4.png) + + +--- + +3.3 +오픈소스 라이브러리 보안 +• 인공지능 모델 개발 단계에서는 다양한 오픈소스를 활용할 수 있음. 오픈소스 라이브러리 도입 전 +에는 필요성 및 원하는 기능의 제공 여부 등의 확인이 필요하고, 사용할 라이브러리가 안정적으로 +업데이트 중인지, 주의해야 할 라이선스 기준은 무엇인지 등을 확인해야 함. 또한, 사용 중인 오 +픈소스의 목록 및 버전을 지속해서 확인하여 운영 및 보안상의 위험 요소를 점검해야 함 + +#### 3.3.1 + +오픈소스 라이브러리의 업데이트 및 취약점을 관리하고 있는가? +• 인공지능 모델 개발에 오픈소스 라이브러리를 사용한다면, 안정성 확인을 위해 해당 오픈소스 라 +이브러리가 얼마나 많은 사용자를 보유하는지, 업데이트는 자주 이루어지는지, 이슈가 발생했을 +때 대응은 신속하게 이루어지는지 등을 따져봐야 함 +• (예시) 오픈소스 라이브러리 안전성 확인 방법: 라이브러리의 출처와 신뢰성 검증 +➊ 공식 소스 확인 +- 공식 문서 확인: 라이브러리의 공식 웹사이트와 문서를 검토하여 신뢰성 확보. +➋ 개발 커뮤니티의 활동 확인 +- 이슈 대응: 버그나 보안 문제에 대한 커뮤니티의 대응 속도와 품질 평가 +• (예시) 오픈소스 라이브러리 위험요소 관리 방법: 정기적인 보안 패치 +➊ 업데이트 및 패치 +- 라이브러리의 최신 보안 패치를 정기적으로 적용. 변경 로그(Changelog)를 검토하여 보안 개 +선 사항을 확인 +➋ 자동화된 업데이트 도구 활용 +- Dependabot: GitHub 리포지토리에서 취약점이 발견된 의존성을 자동으로 업데이트 +- Renovate: 여러 프로젝트에서 의존성을 자동으로 업데이트 및 관리 + + +![이미지 58-0](images/p0058_img0.png) + + +![이미지 58-1](images/p0058_img1.png) + + +![이미지 58-2](images/p0058_img2.png) + + +![이미지 58-3](images/p0058_img3.png) + + +![이미지 58-4](images/p0058_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +49 + +#### 3.3.2 + +오픈소스 라이브러리의 소스 코드를 직접 검토하거나 사용에 대한 보안 문제를 +검증하고 있는가? +• 오픈소스 라이브러리의 소스 코드를 직접 검토하고 사용에 대한 보안 문제를 검증하는 것은 보안 +취약점 예방, 성능 최적화, 법적 컴플라이언스 준수, 신뢰성 확보를 위한 필수적인 과정임. 이를 +통해 AI 개발 프로젝트의 안정성과 신뢰성을 높이고, 잠재적인 위험을 사전에 방지할 수 있음 +오픈소스 라이브러리의 종류 및 버전 선택 시 개발 과정에서 보안 취약점이 발견될 수 있으므로 +이러한 이슈들을 확인하여 보안상의 위험 요소에 대한 관리가 필요함 +• (예시) 오픈소스 라이브러리 위험요소 관리 방법: 코드 분석 및 검토 +➊ 정적 코드 분석: 라이브러리의 소스 코드를 분석하여 보안 취약점을 탐지 +➋ 동적 분석: 라이브러리를 샌드박스 환경에서 실행하여 악성 코드가 포함되었는지 확인 +➌ 코드 리뷰: 오픈소스 커뮤니티에서 제공하는 코드 리뷰 내용을 검토하여 위험 요소 확인 +• (예시) 오픈소스 라이브러리 안전성 확인 방법: 취약점 데이터베이스 확인 +- CVE 데이터베이스 검색: 라이브러리와 관련된 알려진 취약점이 있는지 확인 +- NVD(National Vulnerability Database): 오픈소스 라이브러리의 보안 이슈를 검색 +• (예시) 오픈소스 라이브러리 사용 제한 적용 +➊ 최소 권한 부여 +- 라이브러리에서 사용하는 API나 파일 접근 권한을 최소화 +- Sandbox를 통해 실행 환경에서 라이브러리가 시스템 자원에 접근하지 못하도록 제한 +➋ 민감 데이터 처리 방지 +- 오픈소스 라이브러리를 사용할 때 민감 데이터를 직접 처리하지 않도록 설계 + +#### 3.3.3 + +오픈소스 라이브러리를 실행할 때 잠재적인 보안 위험을 제거하기 위해 격리된 +환경을 이용하고 있는가? +• AI 모델 개발 시 오픈소스 라이브러리를 실행할 때 격리된 환경을 이용하는 이유는 보안, 안정성, +호환성, 및 효율성을 보장하기 위해서임. 이를 통해 악성 코드 실행, 시스템 변경, 중요 데이터 유 +출 등으로부터 시스템을 보호하고, 라이브러리의 영향 범위를 제한할 수 있음 +• (예시) 오픈소스 라이브러리 위험요소 관리 방법: 환경에서의 안전한 실행 +➊ 샌드박스 환경에서 테스트 +- 라이브러리를 프로덕션 환경에 배포하기 전에 격리된 테스트 환경에서 실행 +- 테스트 데이터와 시뮬레이션 환경을 사용하여 예상치 못한 동작 방지 +➋ 최소 권한 실행 +- 라이브러리가 접근할 수 있는 시스템 자원과 데이터를 최소화 +- 원격 API 호출이나 외부 네트워크 액세스를 제한 +➌ 컨테이너화 +- Docker, Kubernetes 같은 컨테이너 기술을 활용해 라이브러리 실행 환경을 격리 + + +![이미지 59-0](images/p0059_img0.png) + + +![이미지 59-1](images/p0059_img1.png) + + +![이미지 59-2](images/p0059_img2.png) + + +![이미지 59-3](images/p0059_img3.png) + + +![이미지 59-4](images/p0059_img4.png) + + +--- + +3.4 +LLM 보안 +• LLM 애플리케이션 보안 영역에 대한 실용적이고 실행가능한 지침을 제공하고자 함 +• 일반적인 애플리케이션 보안 원칙과 LLM이 제기하는 특정 보안 취약성과의 간극을 메우는 것이 +필요하며, 기존 취약성이 어떻게 LLM 내에서 다른 위험을 초래하거나 새로운 방식으로 악용될 +수 있는지, 그리고 개발자가 LLM을 활용하는 애플리케이션에 대해 기존 수정 전략을 어떻게 적 +용해야 하는지에 방향성을 제공함 + +#### 3.4.1 + +LLM 애플리케이션 공격에 대한 예방책을 마련하고 있는가? +• LLM 애플리케이션은 실수로 민감 정보 또는 기밀 데이터를 외부에 공개할 수 있음 +• LLM 애플리케이션 공격에 대한 예방책은 다음과 같음 +- 적절한 데이터 Sanitization 및 스크러빙 기술을 통합하여 사용자 데이터가 학습 모델 데이터 +에 입력되는 것을 방지 +- 강력한 입력 검증 및 Sanitization 방법을 구현하여 잠재적인 악성 입력을 식별하고 필터링하 +여 모델이 오염되는 것을 방지 +- 외부 데이터 소스에 대한 액세스(런타임 시 데이터 오케스트레이션)는 제한되어야 함. 외부 데이터 +소스에 대한 엄격한 액세스 제어 방법과 안전한 공급망을 유지하기 위한 엄격한 접근 방식을 적용 + +#### 3.4.2 + +LLM의 모델 서비스 거부(Model Denial of Service) 공격에 대한 방어 방안을 +수립하고 있는가? +• “Model Denial of Service”는 공격자가 LLM(Large Language Model)과 상호작용할 때 예외 +적으로 많은 양의 리소스를 소모할 때 발생함. 이는 공격자와 다른 사용자에게 서비스 품질이 저 +하될 수 있으며, 잠재적으로 높은 리소스 비용이 발생할 수 있음 +※ 예시: ①대량 대기열(리소스 집약적 작업), ②리소스 소모 쿼리(비정상적인 쿼리), ③오버플로(overflow, 지속 +적인 과도한 입력), ④ 반복적인 긴 입력(리소스 고갈) +방어 기법 +세부 내용 +입력 검증 +정의된 한도를 준수하고 악성 콘텐츠를 걸러내기 위해 사용자 입력에 대한 입력 검증 및 정 +리(sanitization)를 구현 +리소스 캡 +요청 또는 단계당 리소스 사용량을 제한하여 복잡한 부분을 포함하는 요청이 더 느리게 실 +행되도록 함 +API 비율 제한 +특정 기간 내에 개별 사용자 또는 IP 주소가 수행할 수 있는 요청 수를 제한하기 위해 API +속도 제한 적용 +큐 관리 +LLM 응답에 반응하는 시스템에서 대기 중인 작업 수와 총 작업 수를 제한 +리소스 모니터링 +Dos 공격을 나타낼 수 있는 비정상적인 급증이나 패턴을 식별하기 위해 LLM의 리소스 사 +용률을 지속적으로 모니터링함 +“Model Denial of Service”에 대한 예방책 + + +![이미지 60-0](images/p0060_img0.png) + + +![이미지 60-1](images/p0060_img1.png) + + +![이미지 60-2](images/p0060_img2.png) + + +![이미지 60-3](images/p0060_img3.png) + + +![이미지 60-4](images/p0060_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +51 + +#### 3.4.3 + +LLM의 API 보안을 위한 방안을 수립하고 있는가? +• API는 특정 시스템에서 프로그램이 작동하도록 간편화한 인터페이스임. +• 해커는 기업이나 생성형 AI 제조사의 일반 시스템에 접근하는 대신 LLM 접목을 위해 사용하는 +API의 취약점을 노리기 때문에 LLM(대규모 언어 모델)을 도입하는 기업이 단계에 맞는 API 보 +안 정책을 세워야 함. +- 주요 단계는 ▲설계 및 개발 ▲교육 및 테스트 ▲배포 ▲운영 및 모니터링 ▲유지 및 업데이 +트 등으로 구분됨 +• LLM(대규모 언어 모델) API의 보안을 보장하기 위해서는 접근 제한, 데이터 보호, 인증 및 권한 +부여, 실시간 모니터링과 같은 다각적인 보안 대책이 필요함 +• (예시) 인증(Authentication) 및 권한 부여(Authorization) +➊ API 키 관리: 각 사용자에게 고유한 API 키를 제공하여 접근 권한을 제한 +➋ OAuth 2.0 및 OpenID Connect: 사용자 인증 및 권한 부여를 위한 업계 표준 프로토콜 사용 +➌ 다중 인증(Multi-Factor Authentication, MFA): API 접근 시 추가 인증 단계 요구 +• (예시) 사용량 제한 및 모니터링 +➊ Rate Limiting: 사용자당 요청 수를 제한하여 과도한 호출로 인한 서비스 중단 방지 +➋ 실시간 모니터링: API 호출 로그를 실시간으로 모니터링하여 비정상적인 활동 탐지 +➌ 악의적인 사용 탐지: 비정상적인 패턴(예: DDoS 공격, 스크래핑) 탐지 및 차단 +• (예시) API 응답 보안 +➊Rate Limiting 초과 응답: 초과 요청에 대해 표준 HTTP 상태 코드(429 Too Many Requests) +반환 +➋ 민감 데이터 마스킹: API 응답에서 민감 데이터를 마스킹하거나 제거 +➌ 에러 메시지 관리: 에러 메시지를 통해 민감한 시스템 정보(예: 디버그 정보, 경로 등)가 노출 +되지 않도록 제한 + + +![이미지 61-0](images/p0061_img0.png) + + +![이미지 61-1](images/p0061_img1.png) + + +![이미지 61-2](images/p0061_img2.png) + + +![이미지 61-3](images/p0061_img3.png) + + +![이미지 61-4](images/p0061_img4.png) + + +--- + + +#### 3.4.4 + +LLM의 인터페이스 공격에 대한 예방책을 마련하고 있는가? +• LLM(대규모 언어 모델)의 인터페이스 공격은 공격자가 모델의 입력 또는 출력 인터페이스를 악 +용하여 비정상적인 동작을 유도하거나 민감한 데이터를 유출시키는 공격을 의미함 +• (예시) LLM의 인터페이스 공격에 대한 예방책: 입력 검증 및 필터링 +➊ 입력 유효성 검증: 입력 데이터를 정규화하고, 예상치 못한 형식이나 길이를 가진 입력을 차 +단. 허용 가능한 입력 유형과 범위를 명확히 정의(예: SQL 인젝션, 코드 실행 명령 등이 포함 +된 텍스트 필터링) +➋ 금지어 및 패턴 필터링: 모델이 민감한 정보나 금지된 데이터를 반환하지 않도록 특정 키워드 +또는 패턴을 필터링(예: “비밀번호”, “크레디트 카드 번호” 등 민감 데이터 차단) +➌ 입력 크기 제한: 과도한 크기의 입력(예: 너무 긴 텍스트)이 시스템에 부하를 주지 않도록 제 +한. 예: 최대 입력 토큰 수 설정 +• (예시) LLM의 인터페이스 공격에 대한 예방책: 출력 검증 및 제어 +➊ 민감 데이터 필터링: 출력에 포함된 민감한 데이터나 비정상적인 정보를 사전에 검출 및 차단. +예: 사용자 인증 정보, 내부 시스템 구조 관련 정보 등 +➋ 모델 출력 제한: 출력 길이 제한을 설정하여 과도한 데이터 반환을 방지. 모델 출력의 특정 +토큰 또는 문맥 조건을 검토. +➌ 결과 샌드박싱: 모델 출력을 사용하기 전에 별도의 검증 계층에서 안전성을 평가 + + +![이미지 62-0](images/p0062_img0.png) + + +![이미지 62-1](images/p0062_img1.png) + + +![이미지 62-2](images/p0062_img2.png) + + +![이미지 62-3](images/p0062_img3.png) + + +![이미지 62-4](images/p0062_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +53 + +#### 3.4.5 + +개발 환경에서 LLM을 사용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 +코딩 관행과 지침을 수립하고 있는가? +• 소프트웨어 개발팀이 LLM 시스템을 사용하여 코딩 작업을 빠르게 할 수 있음. 이 때 AI의 제안 +에 지나치게 의존하면 안전하지 않은 기본 설정이나 안전한 코딩 관행과 일치하지 않는 권장 사 +항으로 인해 애플리케이션에 보안 취약성이 발생할 수 있음 +• 지나친 의존 때문에 나타나는 취약점을 사전에 예방할 수 있는 방법은 개발 환경에서 LLM을 사 +용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 코딩 관행과 지침을 수립해야함 +• (예시) 안전한 코딩 관행의 기본 원칙 수립 +➊ 최소 권한 원칙 (Principle of Least Privilege): 모델, 데이터, 코드, API가 필요한 최소한의 +권한만 가질 수 있도록 설계. 예: 모델이 파일 시스템이나 네트워크에 불필요하게 접근하지 +않도록 제한 +➋ 데이터 최소화: LLM이 처리해야 할 데이터의 범위를 최소화하여 불필요한 민감 데이터 노출 +방지. 훈련 데이터와 입력 데이터에서 개인정보(PII) 제거 +• (예시) 안전한 입력/출력 처리 +➊ 입력 검증 및 필터링: 사용자 입력의 길이, 형식, 값 범위를 검증하여 악의적인 입력을 차단. +정규표현식 또는 화이트리스트 방식으로 유효성을 검사 +➋ 출력 제어: LLM 출력이 민감 데이터나 예상치 못한 정보를 포함하지 않도록 필터링. 모델이 +생성한 응답을 후처리(post-processing)하여 안전성 검토 +➌ 입력 데이터와 명령어 분리: 사용자 입력 데이터를 명령어나 코드와 분리하여 코드 삽입 공격 +방지 + +#### 3.4.6 + +LLM 출력결과를 정기적으로 모니터링하고 검토하고 있는가? +• LLM 출력에 대해서는 정기적으로 자기 일관성(Self Consistency on prompt) 투표 기술을 사 +용하여 일관되지 않은 텍스트를 필터링함. 단일 프롬프트에 대한 여러 모델 응답을 비교하면 출력 +의 품질과 일관성을 더 잘 판단할 수 있음 +• (예시) LLM 출력결과 모니터링시 확인사항: 출력 데이터 수집 및 로그 기록 +➊ 출력 데이터 로깅: 모든 요청과 응답 데이터를 로그로 기록. 요청, 응답, 사용자 ID, 타임스탬 +프 등 메타데이터 포함 +➋ 로그 저장소 관리: 로그 데이터를 암호화하여 저장. 데이터베이스 또는 로그 관리 도구 사용 +(Splunk, ELK Stack) +• (예시) LLM 출력결과 모니터링시 확인사항: 이상 탐지 및 자동화 +➊ 이상 출력 탐지: AI 기반 이상 탐지 도구를 활용하여 비정상적인 출력 탐지 +➋ 규칙 기반 필터링: 출력 데이터에 대한 규칙 기반 점검 +➌ 실시간 알림: 비정상 출력이 발생하면 알림을 보내는 시스템 구축 + + +![이미지 63-0](images/p0063_img0.png) + + +![이미지 63-1](images/p0063_img1.png) + + +![이미지 63-2](images/p0063_img2.png) + + +![이미지 63-3](images/p0063_img3.png) + + +![이미지 63-4](images/p0063_img4.png) + + +--- + + +#### 3.4.7 + +LLM의 Prompt Injection 공격에 대한 방어 방안을 수립하고 있는가? +• “Prompt Injection”은 공격자가 정교하게 설계된 입력을 통해 LLM(Large Language Moel)의 +동작이나 출력을 조작하여 의도하지 않은 결과를 유도함. 유형으로 ▲직접 프롬프트 인젝션 ▲간 +접 프롬프트 인젝션, ▲다중 모달 및 언어 기반 인젝션 등이 있음 +• “Prompt Injection”은 출력을 조작하여 의도하지 않은 결과 유도, AI 탈옥 또는 모델 탈취 등을 +발생시킬 수 있음 +• “Prompt Injection”은 LLM 애플리케이션의 보안을 위협할 수 있는 가장 흔한 공격으로, 다양한 +애플리케이션에서 발생 가능하며, 방어가 까다롭기 때문에 지속적인 모니터링과 보안 대책이 필수 +방어 기법 +세부 내용 +모델 동작 제한 +모델의 역할, 기능, 한계에 대한 구체적인 지침을 설정. 응답을 특정 작업이나 주 +제로 제한하며, 핵심 지침을 수정하려는 시도를 무시하도록 지시 +예상 출력 형식 정의 및 검증 +명확한 출력 형식을 지정하고 상세한 근거와 출처를 요구 +입력 및 출력 필터링 구현 +민감한 내용 감지 및 차단을 위한 규칙을 설정. RAG Triad를 활용해 ▲컨텍스트 +관련성, ▲정보 근거성, ▲질문/응답 관련성을 평가하며 잠재적으로 악성일 수 있 +는 출력을 식별 +권한 제어 및 최소 권한 접근 +시행 +애플리케이션에 자체 API 토큰을 제공하여 확장 가능한 기능을 구현하고 모델 대 +신 코드에서 처리되도록 설계. 모델의 접근 권한을 필요 최소한의 수준으로 제한 +고위험 작업에 대한 사용자 +승인 요구 +민감한 작업(예: 고급 권한이 필요한 작업)을 위한 사용자 승인 절차 +(human-in-the-loop controls)를 구현하여 비인가된 행동을 방지 +외부 콘텐츠 분리 및 식별 +신뢰할 수 없는 콘텐츠를 분리하고 이를 명확히 표시하여 사용자 프롬프트에 미 +치는 영향을 제한 +적대적 테스트 및 공격 +시뮬레이션 수행 +모델을 신뢰할 수 없는 사용자로 취급하여 침투 테스트와 침해 시뮬레이션을 정 +기적으로 수행하여 신뢰 경계 및 접근 제어의 효과를 평가 +“Prompt Injection”에 대한 예방책 + +#### 3.4.8 + +LLM의 벡터 및 임베딩 취약점에 대한 방어 방안을 수립하고 있는가? +• RAG(Retrieval Augmented Generation) 및 임베딩 기반 시스템은 정보를 검색하고 LLM 출 +력의 정확성을 높이기 위해 사용됨. 그러나 공격자들은 이를 악용하여 유해한 콘텐츠 삽입, 모델 +동작을 조작, 민감한 정보를 노출시킬 수 있음. +• RAG(Retrieval Augmented Generation)는 사전 학습된 언어 모델과 외부 지식 소스를 결합 +하여 LLM 애플리케이션의 성능과 응답의 맥락 관련성을 향상시키는 모델 적응 기술 +방어 기법 +세부 내용 +권한 및 접근 제어 +세분화된 접근 제어 및 권한 관리가 가능한 벡터 및 임베딩 저장소를 구현 +데이터 검증 및 출처 인증 +강력한 데이터 검증 파이프 라인을 구현하여 신뢰할 수 있고, 검증된 소스의 데이터만허용 +데이터 결합 및 분류 검토 +서로 다른 소스의 데이터를 결합할 때, 결합된 데이터셋을 철저히 검토. 지식 데이터베 +이스 내 데이터를 태그하고 분류하여 접근 수준을 제어하고 데이터 불일치 오류를 방지 +모니터링 및 로깅 +의심스러운 동작을 신속히 탐지하고 대응하기 위해, 검색 활동에 대한 세부적인 불 +변 로그(immutable log)를 유지하여 기록의 무결성을 확보 +“벡터 및 임베딩 취약점”에 대한 예방책 + + +![이미지 64-0](images/p0064_img0.png) + + +![이미지 64-1](images/p0064_img1.png) + + +![이미지 64-2](images/p0064_img2.png) + + +![이미지 64-3](images/p0064_img3.png) + + +![이미지 64-4](images/p0064_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +55 +모델 배포 +4.1 +모델파일 및 배포 환경 보호 +• 모델 파일이나 배포 환경이 악의적으로 변경되면, 출력 결과가 왜곡되어 잘못된 결정을 초래할 수 +있고, 또한 공격자가 모델에 백도어를 삽입하여, 특정 입력에 대해 예상치 못한 출력을 유도하거 +나 민감 데이터를 유출할 수 있음 + +#### 4.1.1 + +모델을 배포하기 전에 코드 및 모델을 스캔하고, 자동화된 취약점 분석을 하고 +있는가? +• AI 모델을 배포하기 전에 코드 및 모델을 스캔하고 자동화된 취약점 분석을 수행하기 위해서는 +체계적인 절차와 도구를 활용해야 함. 이 작업은 모델의 안전성과 신뢰성을 보장하고, 보안 위협 +을 사전에 방지하는 데 중요함 +• (예시) 자동화된 취약점 분석 프로세스 +➊ 정적 코드 분석 (Static Analysis): 소스 코드를 실행하지 않고 코드 내부의 잠재적 취약점을 +탐지 +▸작업 내용: 보안 결함, 코드 품질 문제, 잘못된 API 호출 등을 식별 +➋ 동적 코드 분석 (Dynamic Analysis): 실행 중인 코드의 보안 취약점을 탐지 +▸작업 내용: 런타임에서 발생할 수 있는 취약점(예: 메모리 누수, 비정상 동작)을 식별 +➌ 모델 수준의 취약점 분석: +▸적대적 공격 시뮬레이션: 적대적 입력(Adversarial Input)에 대해 모델의 반응을 테스트 +• (예시) 종속성 및 라이브러리 취약점 분석 +➊ 종속성 관리: 모델이 의존하는 오픈소스 라이브러리와 종속성의 취약점 확인 +➋ 최신 상태 유지: 최신 보안 패치가 적용된 라이브러리와 소프트웨어 사용 +• (예시) 배포 전에 MCP(Model Context Protocol) 보안 점검 +- MCP를 통해 어떤 도구/기능이 호출될 수 있는지 식별 +- 각 MCP 툴의 신뢰성 및 보안 검토 +- 비정상 컨텍스트 요청 시 응답 행동 검증 +- 세션 간 정보 누출 여부 확인 +- MCP 호출 흐름에 대한 감사 로깅 확인 +- MCP 툴 권한 설정 및 호출 패턴의 이상탐지 적용 +※ MCP(Model Context Protocol)는 AI 모델이 외부 애플리케이션 또는 사용자와 상호작용할 때 컨텍스트 +정보를 안전하고 구조화된 방식으로 주고받기 위한 프로토콜로, OpenAI 등에서 도입한 개념임. 예를 들어, +사용자 명령어를 보조 앱으로 전달하거나, LLM이 플러그인, API, 툴 등과 연동될 때 사용됨. 하지만 이러 +한 구조는 보안상 여러 위협에 노출될 수 있으므로 AI 모델 개발자는 MCP 관련 보안 점검을 수행할 필요 +가 있음 + + +![이미지 65-0](images/p0065_img0.png) + + +![이미지 65-1](images/p0065_img1.png) + + +![이미지 65-2](images/p0065_img2.png) + + +![이미지 65-3](images/p0065_img3.png) + + +![이미지 65-4](images/p0065_img4.png) + + +![이미지 65-5](images/p0065_img5.png) + + +--- + + +#### 4.1.2 + +모델파일을 암호화하여 저장하고 전송 중에도 안전하게 보호하고 있는가? +• 모델 파일의 암호화 및 전송 보안을 보장하려면 저장 암호화, 전송 암호화, 접근 제어, 무결성 검 +증과 같은 다각적인 보안 조치를 적용해야 함. 이 과정을 자동화하고 정기적으로 검토함으로써 +AI 모델의 안전성을 유지하고 잠재적 위협을 효과적으로 방지할 수 있음 +• (예시) 모델 파일 접근 제어 +➊ 접근 제어 정책: 모델 파일에 대한 접근 권한을 최소 권한 원칙에 따라 설정. 읽기/쓰기 권한 +을 엄격히 제한 +➋ 다중 인증(MFA): 모델 파일에 접근하거나 다운로드하려면 비밀번호 외에 OTP, 인증 앱 등 +추가 인증 절차 요구 +➌ 로그 기록: 파일 접근 로그를 기록하고 비정상적인 접근 시 경고 알림 +• (예시) 배포 환경 보호 +➊ 컨테이너 이미지 암호화: Docker 이미지 내부의 모델 파일을 암호화하거나 비공개 레지스트 +리 사용 +➋ 런타임 암호화: 하드웨어 기반 보안을 사용하여 모델 파일이 실행 중에도 암호화 상태로 유지. +Confidential Computing 기술 활용 등 + +#### 4.1.3 + +AI 모델이 배포되는 인프라(클라우드, 서버 등) 환경이 충분한 보안시스템을 갖추고 +있는가? +• AI 모델이 배포되는 환경이 안전하지 않으면 공격자가 모델에 무단으로 접근하거나 모델을 악용 +할 수 있음. 클라우드 환경에서 배포되는 경우 특히 주의가 필요함 +• 이에 대한 보안요구 사항은 다음과 같음 +- 배포 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 최소화하여 무단 접근을 방지함 +- 암호화된 모델 배포 방식을 사용하여 모델이 악의적으로 수정되지 않도록 하고, 배포된 모델의 +무결성을 보장하는 디지털 서명을 적용 +- 보안 모니터링 도구를 사용하여 배포된 환경에서 비정상적인 활동을 감지하고, 실시간으로 대 +응할 수 있는 시스템을 구축함 + + +![이미지 66-0](images/p0066_img0.png) + + +![이미지 66-1](images/p0066_img1.png) + + +![이미지 66-2](images/p0066_img2.png) + + +![이미지 66-3](images/p0066_img3.png) + + +![이미지 66-4](images/p0066_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +57 +4.2 +API 및 인터페이스 보안 +• API 보안은 애플리케이션 간의 인터페이스를 보호하는 것임. 적절한 API 보안이 없으면 민감한 +데이터가 노출되고, 시스템이 감염되며 서비스가 중단될 수 있음 + +#### 4.2.1 + +AI 모델이 배포된 후, API를 통해 외부 시스템과 상호작용하는 경우, 충분한 보안 +조치 기능을 갖추고 있는가? +• AI 서비스가 외부 시스템과 통신하는 API나 인터페이스가 안전하지 않으면 공격자가 이를 통해 +시스템에 접근하거나 데이터를 탈취할 수 있음 +• 이 때 발생 가능한 취약점은 다음과 같음 +- API가 충분한 인증 및 권한 관리 없이 공개되어 있으면, 무단 접근이 발생할 수 있음 +- API 트래픽이 암호화되지 않으면 중간자 공격(Man-in-the-Middle Attack)에 노출될 수 있음 +- API에 대한 과도한 요청으로 서비스 거부(DoS) 공격이 발생할 위험이 있음 +• 위와 같은 공격에 대한 예방책은 아래와 같음 +- 모든 API 요청에 대해 인증 및 권한 관리를 강화하고, 민감한 데이터에 접근할 때는 다중 인 +증(MFA)을 적용함 +- API 트래픽은 암호화(TLS)를 사용하여 보호하고, 데이터를 안전하게 주고받도록 보장함 +- API 호출 제한(Rate Limiting)을 설정하여 과도한 요청을 방지하고, 비정상적인 요청 패턴을 +탐지하여 차단하는 시스템을 구축함 + +#### 4.2.2 + +배포된 AI 모델이 실시간으로 데이터를 수신하고 이를 처리할 때, 중간자 공격 +(Man-in-the-Middle Attack)에 대응하고 있는가? +• 데이터 전송 중 암호화가 미흡할 경우 “중간자 공격(Man-in- the-Middle Attack)”을 통해 데 +이터가 탈취될 수 있음 +• 실시간 데이터 처리 중 데이터 유출 등을 방지하기 위한 예방책은 다음과 같음 +- 암호화된 데이터 전송(TLS/SSL) 프로토콜을 사용하여 전송 중인 데이터의 기밀성을 보호함 +- 실시간 데이터 처리 시스템에 대한 접근 제어를 엄격히 적용하고, 민감한 데이터에 대한 접근 +권한을 최소화함 +- 데이터 처리 중 로그 관리를 강화하고, 민감한 정보는 로그에서 제거하거나 익명화 처리함 + + +![이미지 67-0](images/p0067_img0.png) + + +![이미지 67-1](images/p0067_img1.png) + + +![이미지 67-2](images/p0067_img2.png) + + +![이미지 67-3](images/p0067_img3.png) + + +![이미지 67-4](images/p0067_img4.png) + + +--- + + +#### 4.2.3 + +AI 모델의 API에 대한 접근 권한을 제한하고, 강한 인증 메커니즘을 사용해 불법 +접근을 방지하고 있는가? +• AI 서비스를 제공하는 동안 사용자 인증 및 접근 제어가 제대로 설정되지 않으면, 공격자가 서비 +스에 무단으로 접근하거나 시스템을 악용할 수 있음 +• AI 모델의 API에 대한 접근 권한을 제한하고 강한 인증 메커니즘을 적용하려면 인증 강화 +(OAuth, MFA), 역할 기반 권한 제어(RBAC), 데이터 암호화, Rate Limiting과 같은 다층적인 +보안 전략이 필요함. 이러한 조치를 자동화 도구와 정책을 통해 체계적으로 관리하면 불법 접근을 +효과적으로 방지하고 API의 신뢰성과 안정성을 보장할 수 있음 +• (예시) 인증 및 권한 부여 강화 +➊ API 키 관리: 각 사용자나 애플리케이션에 고유한 API 키를 발급. API 키에 유효 기간 설정. +키 별로 사용량 제한(Rate Limiting) 적용. 만료된 키는 즉시 회수 및 재발급 +➋ OAuth 2.0 및 OpenID Connect: 업계 표준 인증 프로토콜을 활용. +- OAuth 2.0: 클라이언트가 요청하는 권한 범위(스코프)를 지정. Access Token을 통해 +제한된 API 호출 권한 부여 +➌ 다중 인증(MFA, Multi-Factor Authentication): 사용자가 추가 인증 단계(OTP, 생체 인증) +를 거쳐야만 API에 접근 가능 +➍ 세션 기반 접근 제어: Access Token을 기반으로 세션 만료 시간 설정. 장기적으로는 Refresh +Token을 사용하여 새 토큰 발급 + +#### 4.2.4 + +API 사용자는 필요한 권한만 부여받도록 최소 권한 원칙(Least Privilege)을 +적용하고 있는가? +• 최소 권한 원칙을 적용하려면 역할 기반 접근 제어(RBAC)와 정책 기반 접근 제어(PBAC)를 중 +심으로 인증, 권한 부여, 데이터 보호, 사용량 제한 등을 통합적으로 관리해야 함. 또한 정기적인 +모니터링과 권한 리뷰를 통해 권한이 필요 이상으로 부여되지 않도록 하고, 이를 자동화하여 운영 +효율성을 높이는 것이 중요함 +• (예시) 역할 및 권한 정의 +➊ 역할 기반 접근 제어(RBAC, Role-Based Access Control) +- 사용자 역할 정의: API 사용자의 역할과 책임을 명확히 구분하고 각 역할에 필요한 최소한 +의 권한만 할당 +예: 관리자(Admin), 개발자(Developer), 일반 사용자(User), 모니터링 사용자(Monitoring) +➋ 세분화된 권한 정의: API 엔드포인트별로 권한을 세분화 +예: GET 요청 권한만 부여. 민감 데이터 수정 또는 삭제는 관리자만 수행 가능 +• (예시) 정책 기반 접근 제어(PBAC, Policy-Based Access Control) +- 동적으로 권한을 설정하기 위해 정책 기반 접근 제어 적용 +- 조건 기반 권한 설정: 요청이 특정 조건을 충족할 때만 권한 부여 +예: 시간 제한(업무 시간대만 허용), IP 화이트리스트 + + +![이미지 68-0](images/p0068_img0.png) + + +![이미지 68-1](images/p0068_img1.png) + + +![이미지 68-2](images/p0068_img2.png) + + +![이미지 68-3](images/p0068_img3.png) + + +![이미지 68-4](images/p0068_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +59 + +#### 4.2.5 + +AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치만 +연결되도록 하고 있는가? +• AI 시스템에 연결된 장치를 보호하여 보안 위협으로부터 안전하게 유지해야 함 +- 장치 인증 및 승인: AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치 +만 연결되도록 함 +- 장치 보안 설정: 각 장치에 대한 보안 설정을 강화하여 취약점을 최소화 +• AI 시스템에 연결된 장치를 보호하기 위해 장치 인증, 승인 프로세스, 네트워크 보안, 실시간 모 +니터링을 포함한 다층적인 보안 전략이 필요함. 이러한 체계적인 접근 방식은 비인가 장치로 인한 +보안 위험을 최소화하고, 시스템의 신뢰성과 안정성을 유지하는 데 필수적임 +• (예시) 장치 인증 메커니즘 구축 +➊ 고유한 장치 ID 할당: 각 장치에 고유한 ID(Device ID)를 할당하여 식별. 장치 등록 시 고유 +ID와 관련된 메타데이터(예: MAC 주소, IP, 위치 정보)를 기록 +➋ 인증 프로토콜 사용: 각 장치에 디지털 인증서(예: X.509 인증서)를 발급. 장치가 시스템에 연 +결할 때 인증서를 통해 신뢰 관계 확인 +➌ API 키 또는 토큰 기반 인증: 각 장치에 API 키 또는 OAuth 토큰 발급. 토큰은 만료 시간과 +권한 범위를 지정하여 오용 방지 +• (예시) 장치 등록 및 승인 프로세스 +➊ 장치 등록: 새로운 장치를 연결하기 전에 등록 프로세스를 통해 신뢰성을 확인 +➋ 장치 승인: 관리자 또는 시스템이 장치 정보를 검토하고 승인 절차를 진행. 승인된 장치만 시 +스템에 연결할 수 있도록 데이터베이스에 등록 +➌ 승인 목록(Whitelist) 관리: 승인된 장치의 고유 ID를 기반으로 화이트리스트 생성. 연결 요청 +시 화이트리스트를 조회하여 인증 수행 +➍ 비승인 장치 차단: 인증 실패 또는 화이트리스트에 없는 장치의 연결 시도를 즉시 차단 + + +![이미지 69-0](images/p0069_img0.png) + + +![이미지 69-1](images/p0069_img1.png) + + +![이미지 69-2](images/p0069_img2.png) + + +![이미지 69-3](images/p0069_img3.png) + + +![이미지 69-4](images/p0069_img4.png) + + +--- + +모니터링 및 유지보수 +5.1 +실시간 모니터링 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 모델의 입력 데이터와 출력 결과를 실시간으로 모니터링하고 비정상 동작을 탐지하는 것은 보 +안 위협 방지, 서비스 안정성 유지, 모델 성능 보장과 같은 다각적인 이점을 제공함 + +#### 5.1.1 + +모델의 입력 데이터, 출력 결과 등을 실시간으로 모니터링하여 비정상적인 동작을 +탐지하고 있는가? +• 입력 데이터와 출력 결과를 실시간으로 모니터링하여 비정상 동작을 탐지하려면 로그 수집 및 분 +석, AI 기반 이상 탐지, 실시간 경고 시스템, 데이터 검증 및 후처리를 포함하는 다층적 접근이 +필요함. 이러한 체계는 모델의 안정성과 신뢰성을 유지하고, 비정상 동작으로 인한 위험을 최소화 +하는 데 기여함 +• (예시) 실시간 데이터 수집 및 로깅 +➊ 입력 데이터 로깅: 모든 입력 데이터를 실시간으로 기록 +- 필수 기록 항목: 입력 데이터 유형, 크기, 요청 시간, 요청자 ID +➋ 출력 데이터 로깅: 모델의 출력 결과를 기록하여 분석 +- 기록 항목: 출력 값, 응답 시간, 요청과의 관련성(추론 결과와 입력 간 관계) +➌ 로그 관리 시스템: 대규모 로그 데이터를 효율적으로 저장하고 관리 +• (예시) 실시간 모니터링 대시보드 +➊ 시각화 도구 활용: 실시간으로 입력과 출력 데이터를 모니터링하는 대시보드 구성 +➋ 핵심 지표 추적 +- 모니터링 대상: API 호출 빈도, 응답 시간, 에러 발생률. 입력 데이터 크기 및 형식. 출력 +값의 정상 범위 여부 + + +![이미지 70-0](images/p0070_img0.png) + + +![이미지 70-1](images/p0070_img1.png) + + +![이미지 70-2](images/p0070_img2.png) + + +![이미지 70-3](images/p0070_img3.png) + + +![이미지 70-4](images/p0070_img4.png) + + +![이미지 70-5](images/p0070_img5.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +61 + +#### 5.1.2 + +모델 응답 시간, 사용 패턴을 추적하고 분석하여 보안에 의심스러운 행동을 +탐지하고 있는가? +• 모델의 응답 시간과 사용 패턴을 실시간으로 추적하고 분석하려면 로그 수집, 데이터 분석, 이상 +탐지 시스템, 실시간 알림을 포함한 다층적인 보안 전략이 필요함. 이를 통해 보안 위협을 조기에 +감지하고, 서비스 품질과 모델 신뢰성을 유지할 수 있음 +• (예시) 비정상 패턴 탐지를 위한 분석 +➊ 정적 규칙 기반 탐지: 특정 조건을 만족하는 경우 비정상으로 간주 +예: 입력 데이터 크기 초과. 예상치 못한 데이터 형식. 출력 값의 허용 범위를 벗어남 +➋ 동적 이상 탐지(Anomaly Detection): 머신러닝 기반 모델을 사용하여 이상 행동 탐지 +➌ 패턴 비교: 정상 입력/출력 데이터의 패턴과 현재 데이터를 비교. 비정상적인 요청이나 예외 +적인 출력 탐지 +• (예시) 실시간 모니터링 및 경고 시스템 +➊ 응답 시간 모니터링: 요청 응답 시간이 비정상적으로 길거나 짧은 경우 경고. 평균 응답 시간 +과 비교하여 이상치 탐지 +➋ 사용 패턴 분석 +- 비정상적인 요청 패턴: 요청이 특정 시간대에 집중됨. 예상치 못한 엔드포인트 호출 +➌ 실시간 알림 설정 +- 비정상적인 행동이 탐지되면 실시간으로 관리자에게 알림 +- 알림 방법: 이메일, SMS 등 + + +![이미지 71-0](images/p0071_img0.png) + + +![이미지 71-1](images/p0071_img1.png) + + +![이미지 71-2](images/p0071_img2.png) + + +![이미지 71-3](images/p0071_img3.png) + + +![이미지 71-4](images/p0071_img4.png) + + +--- + + +#### 5.1.3 + +AI 모델이 동작하는 서버 및 네트워크의 트래픽을 모니터링하여 비정상적인 요청을 +탐지하고 있는가? +• AI 모델이 동작하는 서버와 네트워크의 트래픽을 모니터링하여 비정상적인 요청을 탐지하려면 네 +트워크 트래픽 분석, WAF 및 IDS/IPS 도구 사용, 로그 분석, 머신러닝 기반 이상 탐지, 실시간 +경고 시스템을 포함한 다층적인 보안 접근이 필요함. 이러한 조치를 통해 네트워크 보안 위협을 +신속히 탐지하고 대응할 수 있음 +• (예시) 네트워크 트래픽 모니터링 구축 +➊ 실시간 트래픽 로깅: 모든 네트워크 트래픽(입력/출력 요청)을 실시간으로 로깅 +- 기록 항목: 요청 IP, 포트, 요청 시간, 프로토콜(TCP, UDP), 요청 크기, 응답 시간 +➋ 트래픽 흐름 분석: 네트워크 트래픽의 정상 패턴을 분석하고, 비정상적인 흐름을 식별 +예: 특정 IP에서 과도한 요청 발생 +• (예시) 비정상 요청 탐지를 위한 시스템 구성 +➊ 정적 규칙 기반 탐지: +- 사전 정의된 규칙을 기반으로 비정상적인 요청 탐지: IP/포트 차단(화이트리스트/블랙리스 +트 관리). 비인가된 요청 차단 +예: 초당 100개 이상의 요청을 보내는 IP를 차단 +➋ 머신러닝 기반 이상 탐지: 정상적인 트래픽 패턴을 학습하고 비정상적인 요청을 탐지 +➌ DPI(Deep Packet Inspection): 패킷 내부 데이터를 분석하여 비정상적 요청 탐지. 공격 패 +턴, 악성 코드, 비인가 데이터 식별 + +#### 5.1.4 + +API 호출, 입력/출력 등 요청로그를 정기적으로 분석하여 보안에 의심스러운 +동작을 탐지하고 있는가? +• API 호출, 입력/출력 요청 로그를 정기적으로 분석하여 보안 위협을 탐지하려면 로그 수집 및 저 +장, 정적 규칙 기반 탐지, 머신러닝 기반 이상 탐지, 실시간 경고 및 자동화된 차단, 요청 제한 +관리를 통합한 다층적인 보안 체계를 구축해야 함. 이러한 방법은 시스템의 보안과 신뢰성을 유지 +하는 데 필요함 +• (예시) 요청 로그 수집 및 관리 +➊ 로그 수집 체계 구축: 모든 API 호출, 입력 데이터, 출력 결과를 로그로 기록 +- 기록 항목: 요청 ID, 사용자 ID, 요청 시간, IP 주소, 엔드포인트, 요청/응답 크기, HTTP +상태 코드, 입력/출력 데이터 +➋ 로그 저장: 로그 데이터를 중앙화하여 안전하게 저장 +➌ 로그 보존 정책: 규정에 따라 로그 보존 기간 설정 +• (예시) 로그 데이터 분석 +➊ 정적 규칙 기반 분석: 사전 정의된 규칙을 사용하여 의심스러운 동작 탐지 +- 탐지 규칙 예시: 초당 요청 횟수 초과. 동일 IP에서 과도한 호출 발생. 잘못된 API 키 사용 +➋ 동적 이상 탐지: 머신러닝 기반 이상 탐지 모델로 비정상적인 요청 패턴 식별 +➌ 로그 필터링 및 클러스터링: 정상 로그와 의심스러운 로그를 분리. 비정상적 로그 그룹 식별 + + +![이미지 72-0](images/p0072_img0.png) + + +![이미지 72-1](images/p0072_img1.png) + + +![이미지 72-2](images/p0072_img2.png) + + +![이미지 72-3](images/p0072_img3.png) + + +![이미지 72-4](images/p0072_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +63 + +#### 5.1.5 + +AI 모델과 배포 환경에 대해 모의 해킹을 수행하여 잠재적인 보안 취약점을 +탐지하고 수정하고 있는가? +• AI 모델과 배포 환경에 대해 모의 해킹을 수행하려면 취약점 분석, 공격 시뮬레이션, 보고서 작성, +수정 및 재검증의 체계적인 단계를 따르는 것이 중요함. 정기적인 모의 해킹과 지속적인 보안 모니 +터링을 통해 AI 시스템의 안전성을 유지하고, 잠재적 보안 위협에 효과적으로 대응할 수 있음 +• (예시) 취약점 식별 +➊ 네트워크 및 API 테스트: AI 모델의 API 및 네트워크를 스캔하여 취약점을 식별: +- 엔드포인트 보호 상태 분석(SQL Injection, Command Injection 등) +➋ 모델 보안 테스트 +- 모델 자체의 취약점 테스트: 적대적 샘플(Adversarial Example) 입력. 모델의 민감 데이 +터 노출 가능성 +➌ 데이터 및 저장소 테스트 +- 데이터 유출 가능성 점검: 데이터베이스의 접근 제어 및 암호화 상태 확인 +- 데이터 저장소에서 PII(개인 식별 정보) 보호 여부 분석 +➍ 클라우드 및 컨테이너 환경 테스트 +- 클라우드 배포 환경의 보안 설정 검토: 권한 오용, 공개된 API 키 탐지. 컨테이너 취약점 +분석 +• (예시) 공격 벡터 시뮬레이션 +➊ AI 모델 특화 공격 테스트 +- 적대적 샘플: 모델이 잘못된 출력을 생성하도록 설계된 입력 데이터 테스트 +- 데이터 중독(Data Poisoning): 학습 데이터에 악의적인 데이터가 포함될 경우의 영향 분석 +- 모델 반출(Model Extraction): 모델 출력만으로 내부 구조를 복제하려는 시도 +➌ API 오용 및 DoS/DDoS 테스트 +- 비정상적인 API 호출 시도의 영향 분석. Rate Limiting과 Quota 설정 검증 + + +![이미지 73-0](images/p0073_img0.png) + + +![이미지 73-1](images/p0073_img1.png) + + +![이미지 73-2](images/p0073_img2.png) + + +![이미지 73-3](images/p0073_img3.png) + + +![이미지 73-4](images/p0073_img4.png) + + +--- + +5.2 +보안 패치 및 업데이트 관리 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 개발자는 AI 모델이 배포된 후에도 보안을 유지하며, 지속적으로 보안 모니터링과 유지보수를 +실시해야 함 + +#### 5.2.1 + +모델에 대한 보안 패치 및 업데이트 관리 프로세스를 구축하고 있는가? +• 보안 패치 및 업데이트 관리 프로세스를 구축하려면 정책 수립, 취약점 탐지, 패치 개발 및 테스 +트, 단계적 배포, 모니터링 및 피드백을 포함한 체계적인 접근이 필요함. 자동화 도구를 적극 활 +용하여 보안과 효율성을 동시에 확보할 수 있음 +• (예시) 취약점 탐지 및 패치 평가 +➊ 취약점 탐지: AI 모델, 종속성, 배포 환경의 취약점 스캔 +➋ 패치 필요성 평가: 취약점의 심각도 분석 +➌ 종속성 업데이트 관리: AI 모델이 의존하는 라이브러리, 프레임워크, 도구의 최신 버전 유지 +• (예시) 패치 개발 및 테스트 +➊ 패치 개발: 취약점을 해결하는 보안 패치 코드를 작성. 기존 모델 성능 및 기능에 영향을 최소 +화하도록 설계 +➋ 테스트 환경 준비: 실제 환경과 동일한 스테이징 환경 구축 +➌ 테스트 자동화: 정적 분석, 동적 분석, 회귀 테스트 자동화 +➍ AI 모델 성능 검증: 보안 패치가 모델의 성능 및 정확성에 미치는 영향을 평가 + +#### 5.2.2 + +모델 배포 후 모델 및 라이브러리의 업데이트가 정기적으로 이루어지고 +있는가? +• 모델 및 라이브러리의 업데이트가 정기적으로 이루어지고 있는지 확인하려면 정기 점검 프로세스, +자동화된 도구, 보고 체계, 정책 문서화를 활용하여 체계적으로 관리해야 함. 이를 통해 보안 취약 +점을 신속히 해결하고, 최신 기술과 기능을 적용하여 AI 모델과 환경의 안정성을 유지할 수 있음 +• (예시) 정기 점검 프로세스 +➊ 자동화된 라이브러리 취약점 검사: 취약점 스캐너를 활용하여 사용 중인 라이브러리와 프레임 +워크의 보안 상태를 점검 +➋ 모델 성능 평가: 모델이 성능 저하를 보일 경우 업데이트 필요성을 평가 +➌ 배포 환경 점검: 배포된 모델의 실행 환경 상태 점검 +• (예시) 자동화 및 모니터링 도구 설정 +➊ CI/CD(지속적 통합/지속적 배포)에 업데이트 관리 통합: 라이브러리 및 모델 업데이트를 +CI/CD 파이프라인에서 자동으로 감지하고 처리 +➋ 대시보드 및 보고: 업데이트 상태를 시각적으로 확인할 수 있는 대시보드 구축 +➌ 알림 시스템: 업데이트 필요 시 알림을 설정하여 관리자가 신속히 대응할 수 있도록 함 + + +![이미지 74-0](images/p0074_img0.png) + + +![이미지 74-1](images/p0074_img1.png) + + +![이미지 74-2](images/p0074_img2.png) + + +![이미지 74-3](images/p0074_img3.png) + + +![이미지 74-4](images/p0074_img4.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +65 + +#### 5.2.3 + +운영 체제, 라이브러리, 프레임워크의 보안 패치를 운영 환경에 적용하기 전에 +스테이징 환경에서 패치를 테스트하고 있는가? +• 운영 체제, 라이브러리, 프레임워크의 보안 패치를 운영 환경에 적용하기 전에 스테이징 환경에서 +테스트가 이루어지고 있는지 확인하려면 스테이징 환경 구성 점검, 테스트 프로세스 문서화, 자동 +화 도구 활용, 테스트 결과 검토 및 승인 절차 확인이 필요함. 이를 통해 보안 패치가 운영 환경 +에서 문제를 일으키지 않도록 안전하게 관리할 수 있음 +• (예시) 스테이징 환경 준비 확인 +➊ 스테이징 환경 구성 상태 점검 +- 운영 환경과 동일한 설정으로 스테이징 환경을 구축: 운영 체제, 네트워크, 라이브러리, 프 +레임워크가 동일해야 함 +- 스테이징 환경에서 실제 데이터를 사용하지 않고, 테스트 데이터를 구성 +➋ 테스트 데이터 준비 +- 운영 환경을 시뮬레이션할 수 있는 충분한 양과 질의 테스트 데이터 생성 +➌ 테스트 환경 분리 +- 스테이징 환경은 운영 환경과 완전히 독립적으로 작동해야 함: 네트워크 세분화 및 자원 분리 +• (예시) 스테이징 환경에서 패치 테스트 여부 확인 방법 +➊ 테스트 기록 검토 +- 스테이징 환경에서 보안 패치 테스트가 실행된 기록을 검토: 패치 적용 로그. 테스트 실행 +결과 보고서 +➋ 모니터링 및 대시보드 활용 +- 스테이징 환경에서 패치 테스트 결과를 실시간으로 모니터링하는 대시보드 확인 +➌ 정기 점검 및 감사 +- 보안 패치 적용 프로세스와 테스트 기록이 정기적으로 감사되고 있는지 확인 + + +![이미지 75-0](images/p0075_img0.png) + + +![이미지 75-1](images/p0075_img1.png) + + +![이미지 75-2](images/p0075_img2.png) + + +![이미지 75-3](images/p0075_img3.png) + + +![이미지 75-4](images/p0075_img4.png) + + +--- + +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 개발자는 AI 모델이 더 이상 사용되지 않거나 교체될 경우, 해당 AI 모델을 안전하게 폐기해 +야 하며 관련 데이터도 완전히 삭제해야 함 + +#### 6.1.1 + +AI 모델이 더 이상 사용되지 않으면, 모델 파일을 완전히 삭제하고 +복구할 수 없도록 처리하고 있는가? +• 모델 파일을 복구 불가능하게 삭제하려면 정책 수립, 안전한 삭제 기술 활용, 삭제 검증, 로그 기 +록 및 교육과 같은 다각적인 접근이 필요함. 안전한 삭제 도구와 자동화된 프로세스를 활용하면 +효율성과 보안을 동시에 달성할 수 있음 +• (예시) 데이터 삭제 준비 +➊ 삭제 대상 식별: +- 삭제해야 할 데이터와 파일 식별(.pth, .onnx, .h5 등 모델 파일 형식), 학습 데이터, 로그 +파일, 캐시. +- 클라우드 스토리지와 로컬 스토리지 모두 포함 +➋ 파일 백업 정책 +- 삭제 전, 백업이 필요한 경우 암호화된 백업을 일정 기간 유지: 중요한 기록 보관 요구사항을 +충족하기 위해 임시 백업 보관 +• (예시) 안전한 삭제 방법 +➊ 논리적 삭제(Logical Deletion): 파일을 운영 환경에서 제거하지만 실제 데이터는 삭제되지 +않고 보관 +➋ 물리적 삭제(Physical Deletion): 파일을 스토리지에서 실제로 삭제하고 복구 불가능하도록 +처리 +➌ 안전한 삭제(Secure Deletion): 데이터를 복구할 수 없도록 덮어쓰기 방식으로 삭제 +➍ 디스크 초기화: 디스크에 저장된 모델 파일을 포함하여 모든 데이터를 완전히 삭제 +➎ 클라우드 환경에서 데이터 삭제: 클라우드 제공자의 삭제 및 데이터 보안 정책 준수 +• (예시) 삭제 프로세스 검증 +➊ 삭제 검증 수행 +- 삭제된 파일이나 데이터가 복구되지 않았음을 확인: 데이터 복구 도구를 사용해 삭제된 데 +이터 존재 여부 테스트 +➋ 삭제 로그 기록 +- 삭제 작업에 대한 기록 보관: 삭제된 파일 이름, 삭제 시간, 삭제 담당자 +- 감사 및 규제 준수를 위해 필요한 경우 보관 + + +![이미지 76-0](images/p0076_img0.png) + + +![이미지 76-1](images/p0076_img1.png) + + +![이미지 76-2](images/p0076_img2.png) + + +![이미지 76-3](images/p0076_img3.png) + + +![이미지 76-4](images/p0076_img4.png) + + +![이미지 76-5](images/p0076_img5.png) + + +--- + +## 제2 장 +AI 개발자를 위한 보안 안내서 +67 +• (예시) 정기적인 삭제 프로세스 검토 +➊ 삭제 프로세스 검증 +- 삭제 프로세스를 정기적으로 검토하여 최신 보안 요구사항을 반영 +➋ 감사 및 보고 +- 데이터 삭제 기록을 감사하고, 삭제 프로세스 개선을 위한 보고서를 작성 + +#### 6.1.2 + +AI 모델에서 사용 중이던 데이터가 시스템을 폐기하거나 교체할 때 +안전하게 삭제되고 있는가? +• 시스템을 폐기하거나 교체할 때 사용 중이던 데이터가 안전하게 삭제되었는지 확인하려면 정책 +수립, 삭제 대상 식별, 안전한 삭제 방법 적용, 삭제 상태 검증, 로그 기록 및 정기 감사를 포함한 +체계적인 접근이 필요함 +• (예시) 데이터 삭제 정책 및 절차 수립 +➊ 데이터 삭제 정책 정의 +- 삭제 대상: 원본 데이터, 임시 데이터, 캐시, 백업 데이터 +- 삭제 시점: 시스템 폐기, 교체 또는 데이터 사용 종료 시 +- 보존 정책: 보존 기간이 만료된 데이터 삭제 +- 법적/규제 요구사항에 따른 데이터 삭제 방식 지정 +➋ 삭제 책임자 지정 +- 데이터 삭제 프로세스를 담당할 팀 또는 개인을 지정: +▸IT 운영팀: 물리적 스토리지 관리 및 데이터 삭제 수행 +▸보안 팀: 데이터 삭제 검증 및 감사 수행 +• (예시) 데이터 삭제 대상 식별 +➊ 삭제할 데이터 목록 작성 +- 삭제가 필요한 데이터와 위치를 식별: 학습 데이터, 모델 생성 로그, 출력 데이터. 클라우드 +스토리지, 로컬 스토리지, 데이터베이스 등 +- 사용된 데이터 파일 경로와 유형 기록 +➋ 데이터 보존 필요성 평가 +- 보존 정책 또는 계약에 따라 특정 데이터가 삭제 예외 대상인지 검토 +- 법적 요구사항으로 보존이 필요한 경우 암호화 후 별도 저장 + + +![이미지 77-0](images/p0077_img0.png) + + +![이미지 77-1](images/p0077_img1.png) + + +![이미지 77-2](images/p0077_img2.png) + + +![이미지 77-3](images/p0077_img3.png) + + +![이미지 77-4](images/p0077_img4.png) + + +--- + + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 인터페이스를 +비활성화하여 외부 접근을 차단하고 있는가? +• AI 모델이 더 이상 사용되지 않을 경우 API 및 인터페이스 비활성화를 체계적으로 관리하려면 +API 상태 점검, 비활성화 수행, 모니터링 및 로그 관리와 같은 체계를 마련해야 함. 이를 통해 외 +부 접근을 완전히 차단하고 보안 위협을 예방할 수 있음 +• (예시) API 및 인터페이스 상태 점검 +➊ 연결된 API 목록 식별: AI 모델과 연결된 모든 API 및 인터페이스를 식별 +➋ 활성 상태 확인: API 및 인터페이스가 현재 활성화되어 있는지 점검 +➌ 인증 및 접근 로그 확인: 해당 API가 최근 호출된 기록이 있는지 분석 +• (예시) API 및 인터페이스 비활성화 +➊ API 엔드포인트 비활성화: API Gateway에서 불필요한 API 엔드포인트를 비활성화하거나 +삭제 +➋ 외부 접근 제어: 허용된 IP 화이트리스트에서 해당 API 제거 +➌ 인증 키 및 토큰 폐기: 사용되지 않는 API의 인증 키, 토큰, 인증서를 무효화 +➍ 인터페이스 제거: 모델과 연결된 인터페이스(예: 프론트엔드, 대시보드)를 완전히 비활성화 또 +는 제거 + + +![이미지 78-0](images/p0078_img0.png) + + +--- + +AI 서비스 제공자를 위한 +보안 안내서 + + +![이미지 79-0](images/p0079_img0.png) + + +--- + +개요 +서비스 제공자 대상 「인공지능(AI) 보안 안내서」의 특징 +●AI 서비스 제공자는 단순히 모델을 개발하는 데 그치지 않고, 이를 다양한 사용자 및 조직에게 제 +공하는 플랫폼 역할을 한다. 이러한 서비스는 광범위한 사용자 기반에 영향을 미치기 때문에 시스 +템 전반의 보안을 보장할 책임이 있다. 또한 서비스 제공자는 API와 사용자 인터페이스를 안전하 +게 설계하여 악용 가능성을 줄여야 한다. 예를 들어, API 키 탈취나 DoS 공격을 방지하는 것은 +서비스 제공자의 역할이다. 「인공지능(AI) 보안 안내서」는 서비스 제공자를 위한 보안 요구사항 및 +검증항목을 제시하여 서비스 제공자들이 활용할 수 있도록 하였다. +●또한 AI 서비스 제공자는 사용자 데이터를 보호하고 모델 훈련 또는 추론 과정에서 데이터가 유출 +되거나 악용되지 않도록 해야 한다. 서비스 제공자 대상 「인공지능(AI) 보안 안내서」는 서비스 제 +공자의 특수한 역할과 책임을 반영하여, 보안 위협을 예방하고 서비스의 신뢰성을 강화하며, AI 기 +술이 안전하게 사용될 수 있도록 돕는 중요한 지침서가 될 수 있을 것으로 기대된다. +서비스 제공자 대상 「인공지능(AI) 보안 안내서」의 활용 방안 +●「인공지능(AI) 보안 안내서」는 AI 서비스가 보안(Security) 관련 공격을 받거나 받을 우려가 있는 +경우 서비스 제공자가 실제로 취해야 할 조치 사항으로 활용할 수 있다. AI 개발자가 AI 서비스 +제공자를 겸하는 경우도 있으나, 동 안내서에는 서비스 제공자에 해당하는 내용만을 다루고 있으므 +로 개발자 관련 조치 내용에 대해서는 개발자 대상 「인공지능(AI) 보안 안내서」를 동시에 참조하여 +활용할 필요가 있다. +안내서 작성 과정 및 참고 자료 +●서비스 제공자 대상 「인공지능(AI) 보안 안내서」 작업도 2024년 6월부터 「AI 보안 정책 포럼」을 +구성하여 운영하였고, 그 외에도 다양한 의견을 수렴하는 과정을 거쳤다. 초안 작성한 후, 학계 및 +산업계 전문가 등의 의견수렴을 거쳐 최종본을 마련하였다. + + +![이미지 80-0](images/p0080_img0.png) + + +![이미지 80-1](images/p0080_img1.png) + + +![이미지 80-2](images/p0080_img2.png) + + +![이미지 80-3](images/p0080_img3.png) + + +![이미지 80-4](images/p0080_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +71 +AI 서비스 제공자 대상 보안 프레임워크(Security Framework) +보안 프레임워크(Security Framework) - 예방(Prevention) 단계 +예방(Prevention) 단계에서의 보안 목표: 예방 단계의 Framework는 AI 시스템에 대한 잠재적 위협 +을 사전에 대비하고 보호하기 위한 다양한 전략과 메커니즘을 포함한다. +●거버넌스(Governance): 보안 정책, 절차, 표준, 가이드라인을 수립하여 AI 워크로드와 관련된 역 +할과 책임을 명확히 한다. +●위험 관리(Risk Management): AI 시스템과 서비스에 대한 보안 요구사항을 준수하기 위해 보안 +조치를 설계, 적용, 평가, 검증한다. +그림 3-1 AI 서비스 제공자 대상 보안 프레임워크(Security Framework) - 예방 단계 + + +![이미지 81-0](images/p0081_img0.png) + + +![이미지 81-1](images/p0081_img1.png) + + +![이미지 81-2](images/p0081_img2.png) + + +![이미지 81-3](images/p0081_img3.png) + + +![이미지 81-4](images/p0081_img4.png) + + +![이미지 81-5](images/p0081_img5.png) + + +![이미지 81-6](images/p0081_img6.png) + + +--- + +예방 단계에 대한 보안 기술(Security Technology) 적용 방안 +●데이터 보호(Data Protection) +- 데이터 보호는 AI 시스템에서 데이터의 기밀성, 무결성, 가용성을 유지하여 보안성을 확보하는 +중요한 과정이다. 이는 데이터가 불법적으로 접근되거나 수정되지 않도록 하며, 시스템의 신뢰성 +을 높이는 역할을 한다. +●모델 보안 유지(Secure Model) +- 모델 보안 유지(Secure Model)는 AI 시스템에서 모델의 보안을 보장하기 위한 다양한 활동과 +절차를 포함한다. 이를 통해 AI 모델이 안전하게 작동하고 신뢰성을 유지하도록 한다. +●사이버 보안(Cyber Security) 기술 적용 +- AI Security Framework에서 Cyber Security는 AI 시스템 및 데이터의 보안을 강화하는 데 +중점을 둔다. 이는 다양한 보안 기술과 절차를 통해 AI 시스템을 보호하고, 데이터 무결성과 기 +밀성을 유지하며, 시스템의 가용성을 보장하는 것을 목표로 한다. +- 구성 요소(Component)별 보안 목표 및 요구사항은 다음과 같다. +표 3-1 예방 단계에 대한 보안 기술 구성 요소별 보안 목표 및 요구사항 +구분 +보안 목표 및 요구사항 +Application +Security +(응용 프로그램 +보안) +[목표] AI 애플리케이션의 보안을 강화하여 취약점 및 공격으로부터 보호한다. +∙코드 리뷰 및 테스트: 애플리케이션의 코드를 주기적으로 리뷰하고, 보안 취약점을 발견하여 수정한다. +∙취약점 스캐닝: 애플리케이션 내의 보안 취약점을 탐지하고, 이를 해결하기 위한 조치를 취한다. +∙보안 패치 관리: 애플리케이션에 대한 최신 보안 패치를 적용하고 보안취약점을 해결한다. +Network +Security +(네트워크 보안) +[목표] AI 시스템이 연결된 네트워크를 보호하여 데이터의 무결성과 기밀성을 유지한다. +∙방화벽 설정 및 관리: 외부 공격으로부터 네트워크를 보호하기 위해 방화벽을 설정하고 관리한다. +∙침입 탐지 시스템 (IDS): 네트워크 트래픽을 모니터링하여 비정상적인 활동을 탐지하고 대응한다. +∙가상 사설망 (VPN): 네트워크를 통한 데이터 전송 시 암호화된 연결을 제공하여 데이터의 기밀 +성을 유지한다. +System Security +(시스템 보안) +[목표] AI 시스템의 운영 체제 및 관련 인프라를 보호하여 무단 접근과 공격을 방지한다. +∙운영 체제 보안 설정: 시스템의 운영 체제에 대한 보안 설정을 강화하여 취약점을 줄인다. +∙정기적인 시스템 업데이트: 운영 체제 및 소프트웨어에 대한 최신 업데이트를 적용하여 보안을 +유지한다. +∙시스템 모니터링: 시스템 로그를 주기적으로 모니터링하여 비정상적인 활동을 탐지하고 대응한다. +DB Security +(데이터베이스 +보안) +[목표] AI 시스템에서 사용되는 데이터베이스를 보호하여 데이터 무결성과 기밀성을 유지한다. +∙접근 제어: 데이터베이스에 대한 접근 권한을 관리하여 무단 접근을 방지한다. +∙데이터 암호화: 저장된 데이터를 암호화하여 데이터 유출 시에도 기밀성을 유지한다. +∙백업 및 복구 계획: 데이터베이스의 정기적인 백업을 수행하고, 데이터 손실 시 복구 계획을 마련한다. +Device Security +(장치 보안) +[목표] AI 시스템에 연결된 장치를 보호하여 보안 위협으로부터 안전하게 유지한다. +∙장치 인증 및 승인: AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인된 장치만 +연결되도록 한다. +∙장치 보안 설정: 각 장치에 대한 보안 설정을 강화하여 취약점을 최소화한다. +∙펌웨어 업데이트: 장치의 펌웨어를 최신 상태로 유지하여 보안 취약점을 해결한다. + + +![이미지 82-0](images/p0082_img0.png) + + +![이미지 82-1](images/p0082_img1.png) + + +![이미지 82-2](images/p0082_img2.png) + + +![이미지 82-3](images/p0082_img3.png) + + +![이미지 82-4](images/p0082_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +73 +보안 프레임워크(Security Framework) - 탐지·대응(Detection) 단계 +탐지·대응(Detection) 단계에서의 Security Framework 목표: 탐지・대응(Detection) 단계의 Framework +는 사업자 관점에서 AI 시스템의 보안 위협을 탐지하기 위한 전략과 메커니즘을 설명한다. 탐지 +(Detection) 단계는 AI 시스템에서 발생할 수 있는 보안 위협을 실시간으로 모니터링하고, 이를 신속 +하게 식별하여 대응할 수 있도록 하는 데 중점을 둔다. +●거버넌스(Governance): AI 생명주기 전반에 대한 위험 관리를 수립하고, AI 워크로드에 대한 탐 +지 절차, 매뉴얼, 사고대응 팀을 배정한다. +●위험 관리(Management): AI 시스템과 서비스에 대한 보안 요구사항을 준수하기 위해 보안 조치 +를 적용한다. +그림 3-2 AI 서비스 제공자 대상 보안 프레임워크(Security Framework) - 탐지・대응 단계 + + +![이미지 83-0](images/p0083_img0.png) + + +![이미지 83-1](images/p0083_img1.png) + + +![이미지 83-2](images/p0083_img2.png) + + +![이미지 83-3](images/p0083_img3.png) + + +![이미지 83-4](images/p0083_img4.png) + + +![이미지 83-5](images/p0083_img5.png) + + +![이미지 83-6](images/p0083_img6.png) + + +--- + +탐지·대응(Detection) 단계에 대한 보안 기술(Security Technology) 적용 방안 +●데이터 이상 징후 탐지(Data Anomaly Detection) +- 데이터 이상 징후 탐지는 AI 시스템의 데이터를 정기적으로 점검하고, 실시간 모니터링 시스템을 통 +해 이상 징후를 감지하며, 체크리스트를 활용하여 테스트와 훈련 단계를 점검하는 과정이다. 이를 통 +해 데이터의 무결성, 기밀성, 가용성을 보장하고, AI 시스템의 안정성과 신뢰성을 유지할 수 있다. +●모델 보안 유지(Secure Model) +- 모델 보안 유지는 AI 모델이 안전하게 동작할 수 있도록 알고리즘 검증, 위험 평가 및 모델 조 +정, 소프트웨어 시각화 도구를 통한 프로세스 자동화 등의 과정을 포함한다. 이를 통해 AI 모델 +의 신뢰성을 높이고, 외부 위협으로부터 보호할 수 있다. +●사이버 보안(Cyber Security) 기술 적용 +- 탐지·대응(Detection) 부문별 목표 및 요구사항 +표 3-2 탐지・대응 단계에 대한 보안 기술 구성 요소별 보안 목표 및 요구사항 +구분 +보안 목표 및 요구사항 +Data Collection +Modules +(데이터 수집 모듈) +[목표] 다양한 데이터를 수집하기 위한 장치와 방법을 추진한다. +∙장비 에이전트 설치, API 연결, 명령 실행, 추출 파일, 수동 등록, PC/서버 보안, +PKI/SSO, NMS, SMS 등을 통해 데이터를 수집한다. +∙(예시) 네트워크 장비에 에이전트를 설치하여 데이터 수집, API를 통해 외부 시스템과 연 +결, 서버의 보안 로그를 수집한다. +Data Collection System +(데이터 수집 시스템) +[목표] 실시간 데이터 수집 및 분석, 이벤트 감지를 담당한다. +∙실시간으로 데이터를 수집하고, 이를 분석하여 보안 이벤트를 감지한다. +∙(예시) 실시간 로그 수집 시스템, 네트워크 트래픽 분석 시스템, 보안 이벤트 모니터링 시스템 +Data Management +System +(데이터 관리 시스템) +[목표] 데이터베이스 분석, 데이터 평가, 설정 및 변경 이력 관리 등을 포함한 데이터 관리 +기능을 제공한다. +∙지속적인 DB 분석, 설정 변경 이력 관리, 관리 작업 및 데이터 모니터링, 정기 보고서 작 +성, 기능 개선, 로그 분석, 템플릿 생성, 작업 자동화 등을 수행한다. +∙(예시) 데이터베이스 관리 시스템(DBMS), 로그 분석 도구, 자동화된 데이터 모니터링 및 보고 시스템 +- 핵심 보안기술(Core Security)별 목표 및 요구사항 +구분 +목표 및 요구사항 +Prevention System +(예방 시스템) +[목표] 침해 위험 예측 및 관리, 실시간 침해 및 정보 손상 감지, 대응 시스템 연계 등을 담당한다. +∙침해 위험을 예측하고 관리하며, 실시간으로 침해 및 정보 손상을 감지하고 대응 시스템 +과 연계한다. +∙(예시) 개인정보 보호 시스템, 실시간 침해 감지 시스템, 침해 대응 연계 시스템 +Detection and +Response Measures +(탐지 및 대응 조치) +[목표] 실시간 데이터 수집 및 분석, 다양한 침해 상황 및 대응 시나리오 수립을 포함한다. +∙실시간으로 데이터를 수집하고 분석하며, 다양한 침해 상황에 대한 시나리오를 수립하고 +대응 조치를 마련한다. +∙(예시) 침해 대응 시나리오, 실시간 데이터 분석 시스템, 침해 대응 절차 수립 +Error Occurrence and +Reporting +(오류 발생 및 보고) +[목표] 실시간 오류 감지, 오류 발생 및 보고를 담당한다. +∙실시간으로 오류를 감지하고, 발생한 오류를 저장 및 보고한다. +∙(예시) 오류 감지 시스템, 오류 보고 시스템, 실시간 오류 모니터링 도구 + + +![이미지 84-0](images/p0084_img0.png) + + +![이미지 84-1](images/p0084_img1.png) + + +![이미지 84-2](images/p0084_img2.png) + + +![이미지 84-3](images/p0084_img3.png) + + +![이미지 84-4](images/p0084_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +75 +AI 서비스 제공자를 위한 보안 요구사항 및 검증항목 +체크리스트 요약 +생명주기 +요구사항 및 체크리스트 +서비스제공자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +1 +서비스 기획 +및 설계 +(AI 개발자, AI 서비스 제공자 공통사항) 거버넌스 및 위험관리 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? +○ +○ +○ + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? +○ +○ +○ + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +○ +○ +○ +1.2 +AI 서비스에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 1.2.1 + +AI 모델 개발/서비스 제공 생명주기 및 공급망 과정에서 나타날 수 있는 위험요소를 +분석・도출하고 있는가? +○ +○ +○ + +#### 1.2.2 + +AI 서비스에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? +○ +○ +○ + +#### 1.2.3 + +AI 서비스에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? +○ +○ +○ +(AI 서비스 제공자) 계약관리 +1.3 +서비스 수준 계약(SLA) 관리 + +#### 1.3.1 + +공급업체와 계약시, SLA에 보안요구 사항을 명확히 포함했는가? +○ +○ +○ + +#### 1.3.2 + +보안 침해 발생 시를 대비하여, 대응 계획을 수립하고 있는가? +○ +○ +○ +○ + +#### 1.3.3 + +보안 침해 발생 시를 대비하여, 책임 소재를 명확히 하고 있는가? +○ +○ +○ +2 +서비스 +개발 및 +구축 +2.1 +코드 취약 점검 등 관리점 + +#### 2.1.1 + +정적 및 동적 코드 분석 도구를 사용하여 소스 코드의 보안 취약점을 분석하고 있 +는가? +○ +○ +○ + +#### 2.1.2 + +코드 리뷰 프로세스를 도입하여 보안 문제가 있는 부분을 검토하고 개선하고 있는 +가? +○ +○ +○ +2.2 +모델 환경의 보안 + +#### 2.2.1 + +모델 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 최소화하여 무 +단 접근을 방지하고 있는가? +○ +○ +○ + +#### 2.2.2 + +모델이 악의적으로 수정되지 않도록 모델의 무결성을 보장하는 방법을 적용하고 +있는가? +○ +○ +○ + +#### 2.2.3 + +보안 모니터링 도구를 사용하여 모델의 비정상적인 활동을 감지하고, 실시간으로 +대응할 수 있는 체계를 구축하고 있는가? +○ +○ +○ + + +![이미지 85-0](images/p0085_img0.png) + + +![이미지 85-1](images/p0085_img1.png) + + +![이미지 85-2](images/p0085_img2.png) + + +![이미지 85-3](images/p0085_img3.png) + + +--- + +생명주기 +요구사항 및 체크리스트 +서비스제공자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI +2 +서비스 +개발 및 +구축 +2.3 +데이터 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 2.3.1 + +적대적 공격 등 데이터 공격에 대한 방어 수단을 강구하고 있는가? +○ +○ +○ + +#### 2.3.2 + +데이터 저장 및 전송 시 무결성을 보호하기 위한 조치를 하고 있는가? +○ +○ +○ + +#### 2.3.3 + +중요 데이터에 대한 기밀성 유지를 위해 보호 방안을 마련하고 있는가? +○ +○ +○ + +#### 2.3.4 + +전송구간에서 중요정보 유출을 방지하기 위한 보호 방안을 마련하고 있는가? +○ +○ +○ + +#### 2.3.5 + +데이터 유출시 책임추적을 할 수 있도록 조치를 하고 있는가? +○ +○ +○ +○ +2.4 +API 및 인터페이스 보안 + +#### 2.4.1 + +API 통신을 암호화하여 데이터가 전송되는 구간에서 외부 공격에 대한 방어를 하 +고 있는가? +○ +○ +○ + +#### 2.4.2 + +모든 API 요청에 대해 인증 및 권한 관리를 강화하고, 중요 데이터에 접근할 때는 +강한 인증 메커니즘을 적용하고 있는가? +○ +○ +○ + +#### 2.4.3 + +API 트래픽은 암호화 기술을 사용하여 보호하고, 데이터를 안전하게 주고 받도록 +보장하고 있는가? +○ +○ +○ + +#### 2.4.4 + +API 호출 제한(Rate Limiting)을 설정하여 과도한 요청을 방지하고, 비정상적인 +요청 패턴을 탐지하여 차단하고 있는가? +○ +○ +○ +3 +서비스 +제공 및 +운영 +3.1 +로그 및 운영 데이터 보안 + +#### 3.1.1 + +데이터 처리 중 접속로그 관리를 강화하고 있는가? +○ +○ +○ + +#### 3.1.2 + +로그 파일 및 운영 데이터에 암호화를 적용하고, 중요정보는 별도로 관리하여 유출 +을 방지하고 있는가? +○ +○ +○ + +#### 3.1.3 + +운영 중 발생하는 데이터를 안전하게 저장하고, 접근 제어를 통해 인증된 관리자만 +로그에 접근할 수 있도록 설정하고 있는가? +○ +○ +○ + +#### 3.1.4 + +로그 데이터 접근 권한을 최소화하고, 접근 제어 및 사용자 활동 기록을 통해 비정 +상적인 접근을 탐지하고 있는가? +○ +○ +○ +4 +서비스 +유지보수 및 +지원 +4.1 +모니터링, 업데이트 및 패치 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 4.1.1 + +지속적인 사용자 경험 모니터링을 위해 사용자 로그를 수집・관리하고 있는가? +○ +○ +○ + +#### 4.1.2 + +AI 시스템이 정상적으로 작동하지 않거나 예기치 못한 오류가 발생할 경우 이를 +조기에 탐지하고 대응하는 메커니즘이 있는가? +○ +○ +○ + +#### 4.1.3 + +AI 시스템의 보안 패치나 모델 업데이트가 정기적으로 이루어지고 있는가? +○ +○ +○ +4.2 +성능 및 장애 관리 + +#### 4.2.1 + +서비스 장애가 발생했을 때 자동으로 복구할 수 있도록 하고 있는가? +○ +○ +○ + + +![이미지 86-0](images/p0086_img0.png) + + +![이미지 86-1](images/p0086_img1.png) + + +![이미지 86-2](images/p0086_img2.png) + + +![이미지 86-3](images/p0086_img3.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +77 +생명주기 +요구사항 및 체크리스트 +서비스제공자 +AI 유형 +담당자 +조직 +Pred AI +Gen AI + +#### 4.2.2 + +모델 성능을 지속적으로 모니터링하고, 성능 저하가 감지되면 재학습을 통해 성능 +을 유지하고 있는가? +○ +○ +○ + +#### 4.2.3 + +실시간으로 모델 드리프트 탐지 시스템을 운영하여 모델 성능이 저하될 경우 즉시 +대응할 수 있는 체계를 마련하고 있는가? +○ +○ +○ + +#### 4.2.4 + +정기적으로 모델 재학습 및 업데이트를 수행하여 새로운 데이터 패턴을 반영하고, +성능을 개선하고 있는가? +○ +○ +○ + +#### 4.2.5 + +AI 서비스에 대해 다중화(HA) 및 백업 시스템을 구축하여 장애 발생 시에도 서비 +스가 연속적으로 제공될 수 있도록 하고 있는가? +○ +○ +○ + +#### 4.2.6 + +침입차단시스템 등을 통해 외부에서 발생하는 DoS/DDoS 공격을 방어하고, 실 +시간 모니터링 시스템을 운영하여 장애를 빠르게 감지하고 대응하고 있는가? +○ +○ +○ +5 +피드백 +및 +서비스 개선 +5.1 +사용자 피드백 관리 + +#### 5.1.1 + +사용자 피드백 시스템에 입력 검증 및 필터링을 적용하여 악성 코드나 비정상적인 +데이터의 입력을 차단하고 있는가? +○ +○ +○ + +#### 5.1.2 + +피드백을 자동으로 분석하기 전에 사전 검증 절차를 마련하여 피드백 데이터의 +무결성을 확인하고 있는가? +○ +○ +○ + +#### 5.1.3 + +최소 권한 원칙(Least Privilege)을 적용하여 피드백 및 개선 과정에서 접근할 수 +있는 권한을 최소화하고 있는가? +○ +○ +○ + +#### 5.1.4 + +피드백 처리 및 개선 과정에서 이루어진 모든 접근 및 변경 사항을 감사 로그로 +기록하고, 정기적으로 검토하여 무단 접근을 탐지하고 있는가? +○ +○ +○ +6 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 + +#### 6.1.1 + +모델 파기 시, 모델 파일을 완전히 삭제하고 복구할 수 없도록 처리하고 있는가? +○ +○ +○ + +#### 6.1.2 + +시스템을 폐기하거나 교체할 때 AI 모델에서 사용 중이던 관련 파일 및 데이터를 +안전하게 삭제하고 있는가? +○ +○ +○ + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 인터페이스를 비활 +성화하여 외부 접근을 차단하고 있는가? +○ +○ +○ + + +![이미지 87-0](images/p0087_img0.png) + + +![이미지 87-1](images/p0087_img1.png) + + +![이미지 87-2](images/p0087_img2.png) + + +![이미지 87-3](images/p0087_img3.png) + + +--- + +서비스 기획 및 설계 +<1.1 AI 보안(Security) 거버넌스 체계 구축>, <1.2 AI 서비스에 대한 위험관리 계획의 수립>은 AI 개발자, +AI 서비스 제공자 모두에게 해당하는 공통사항으로 <제2장. AI 개발자를 위한 보안 안내서>를 참고하여 +적용하기 바랍니다. +1.1 +AI 보안(Security) 거버넌스 체계 구축 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 보안 거버넌스는 단순한 보안 조치를 넘어 기업의 리스크를 줄이고, 법적 규제를 준수하며, 지 +속 가능성을 확보하는 핵심적인 프레임워크임. AI가 기업에서 점점 더 중요한 기술로 자리 잡고 +있는 만큼, 기업들은 전문 조직 구성, 정책 수립, 전문인력 확보 등 AI 보안 거버넌스 체계를 구축 +하여 AI 서비스가 안정적으로 운영이 되도록 해야 함 + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구성되어 있는가? + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, 프로세스가 구현되어 있는가? + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력을 갖추고 있는가? +1.2 +AI 서비스에 대한 위험관리 계획의 수립 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 서비스를 제공하는 기업은 데이터 조작, 모델 탈취, 적대적 공격 등 다양한 보안 위협에 노출 +될 수 있어, 이를 예방하고 대응하기 위한 위험관리 계획이 필요함. 위험관리 계획을 통해 AI 서 +비스 제공 생명주기에 걸쳐 나타날 수 있는 위험요소를 분석·도출하고 위험요소를 제거·완화하기 +위한 방안을 통해 AI 시스템의 보안성과 안전성을 유지해야 함 + +#### 1.2.1 + +AI 서비스 제공 생명주기에 걸쳐 나타날 수 있는 위험요소를 분석・도출하고 +있는가? + +#### 1.2.2 + +AI 서비스에 대한 위협 모델링 및 위험 평가를 수행하고 있는가? + +#### 1.2.3 + +AI 서비스에 대한 위험요소를 제거・완화하기 위한 방안을 마련하고 있는가? + + +![이미지 88-0](images/p0088_img0.png) + + +![이미지 88-1](images/p0088_img1.png) + + +![이미지 88-2](images/p0088_img2.png) + + +![이미지 88-3](images/p0088_img3.png) + + +![이미지 88-4](images/p0088_img4.png) + + +![이미지 88-5](images/p0088_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +79 +1.3 +서비스 수준 계약(SLA) 관리 +• AI 서비스의 보안 요구 사항이 명확하게 정의되지 않으면 이후 단계에서 발생할 수 있는 보안 문 +제에 충분히 대비하지 못하게 됨. 이로 인해 데이터 보호, 모델 보호, 운영 보안 측면에서 취약점 +이 발생할 수 있음 +※ 서비스 수준 계약(SLA)은 공급업체가 고객에게 제공하기로 약속한 서비스 수준을 명시하는 아웃소싱 및 기술 +공급업체 계약임. 이 계약에는 가동 시간, 납품 시간, 응답 시간 및 해결 시간 등의 지표가 포함되어 있음 + +#### 1.3.1 + +공급업체와 계약 시, SLA에 보안요구 사항을 명확히 포함했는가? +• SLA에 보안 요구 사항을 명시함으로써 위험 관리에 선제적으로 대응할 수 있는 기회를 제공받 +음. SLA는 잠재적인 위험과 위협을 미리 식별하고 비즈니스 이해관계자가 이러한 문제를 방지하 +거나 완화하기 위한 계획을 개발하는 데 도움이 됨 +• (예시) 데이터 보안 관련 명시 +- 데이터 암호화: 데이터 저장 및 전송 중 암호화 수준(예: AES-256)과 구현 방법을 명시 +- 데이터 무결성: 데이터 무결성을 확인하고 보장하기 위한 검증 메커니즘(예: 해싱, 서명 등) +- 데이터 소유권 및 사용 권한: 데이터의 소유권이 AI 서비스 제공기업에 있고, 공급업체는 명시 +된 용도로만 데이터를 사용할 수 있도록 규정 +- 데이터 반환 및 삭제: 계약 종료 시 데이터 반환과 안전한 삭제 절차를 명확히 기술 +• (예시) 보안 모니터링 및 위협 탐지 관련 명시 +- 보안 이벤트 모니터링: 보안 정보 및 이벤트 관리(SIEM) 시스템을 통해 실시간 모니터링 및 +이상 탐지 수행 +- 위협 탐지 및 경고: 공급업체가 비정상적인 활동이나 보안 위협을 실시간으로 탐지하고 경고를 +제공. +- 로그 관리: 모든 데이터 및 시스템 활동 로그를 생성, 보관, 분석하도록 요구. 보관 기간을 명시 + + +![이미지 89-0](images/p0089_img0.png) + + +![이미지 89-1](images/p0089_img1.png) + + +![이미지 89-2](images/p0089_img2.png) + + +![이미지 89-3](images/p0089_img3.png) + + +![이미지 89-4](images/p0089_img4.png) + + +--- + + +#### 1.3.2 + +보안 침해 발생 시를 대비하여, 대응 계획을 수립하고 있는가? +• SLA에 보안 요구 사항을 명시하면, 보안 침해 발생 시 대응 계획이 명확히 설정되고, 문제 발생 +시 혼란을 최소화할 수 있음 +• (예시) 보안 침해의 정의 및 범위 명확화 +- 보안 침해 정의: SLA 계약서에서 “보안 침해”의 정확한 정의를 명확히 기술 +예: 데이터 유출, 무단 접근, 시스템 무결성 손상, 서비스 거부(DoS), 악성코드 감염 등, AI 탈옥 등 +- 범위 및 영향: 침해가 발생할 수 있는 데이터, 시스템, 네트워크의 범위와 이로 인한 영향 수준 +을 명확히 명시 +• (예시) 침해 탐지 및 보고 +- 탐지 의무: 공급업체가 보안 침해를 탐지해야 하는 방법과 시스템(예: SIEM, IDS/IPS)을 명시 +- 보고 시간: 침해 탐지 후 AI 서비스 제공기업에 보고해야 하는 최대 시간을 명시 +- 보고 방식: 보고 절차와 채널(예: 이메일, 전화, 전용 포털)을 명시 +- 초기 보고 내용: 침해의 유형, 범위, 잠재적 영향, 즉각적 대응 조치 등을 포함한 초기 보고서 +작성 요구 + + +![이미지 90-0](images/p0090_img0.png) + + +![이미지 90-1](images/p0090_img1.png) + + +![이미지 90-2](images/p0090_img2.png) + + +![이미지 90-3](images/p0090_img3.png) + + +![이미지 90-4](images/p0090_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +81 + +#### 1.3.3 + +보안 침해 발생 시를 대비하여, 책임 소재를 명확히 하고 있는가? +• SLA에 보안 요구 사항이 명시되지 않으면, 서비스 제공 중에 보안 침해가 발생해도 책임 소재가 +불분명해질 수 있음. 따라서 SLA에 보안 요구 사항을 명확하게 포함시키고, 보안 침해 발생 시 +책임 소재를 명확히 규정하는 것이 필요함 +• (예시) 책임 소재 정의 +- 공급업체의 책임: 공급업체가 제공하는 서비스 및 시스템에서 발생한 보안 침해에 대한 책임을 +명확히 함 +예: 클라우드 인프라 보안, 데이터 저장 및 전송 과정의 암호화, 시스템 취약점 관리 +- AI 서비스 제공기업의 책임: 제공기업이 직접 관리하는 부분에서 발생하는 보안 침해는 제공기 +업이 책임을 짐 +- 공동 책임 구역: 데이터 전송, API 통합 등 양측이 상호작용하는 영역에서의 책임 분할을 명확 +히 정의 +(예시) 보안 의무 명시 +- 공급업체의 보안 의무: 공급업체가 준수해야 할 보안 표준 및 의무를 명시. 보안 취약점 점검, +주기적인 침투 테스트, 데이터 암호화 적용 등 구체적인 보안 조치를 SLA에 포함 +- AI 서비스 제공기업의 의무: 공급업체에게 제공하는 데이터의 정확성과 무결성을 보장할 의무. +적법한 사용 및 데이터 제공 조건을 준수 +(예시) 법적 및 재정적 책임 +- 재정적 보상: 보안 침해로 인해 발생한 금전적 손실, 벌금, 고객 보상 등에 대한 책임 소재를 +명확히 함 +예: “공급업체의 과실로 발생한 손실은 공급업체가 전적으로 책임진다.” +- 책임 제한: 공급업체의 책임 한도를 설정하되, 중과실이나 중대한 위반에는 예외를 둠 +- 보험 가입: 공급업체가 사이버 보험에 가입하고, 사고 발생 시 이를 통해 보상을 제공하도록 +요구 + + +![이미지 91-0](images/p0091_img0.png) + + +![이미지 91-1](images/p0091_img1.png) + + +![이미지 91-2](images/p0091_img2.png) + + +![이미지 91-3](images/p0091_img3.png) + + +![이미지 91-4](images/p0091_img4.png) + + +--- + +서비스 개발 및 구축 +2.1 +코드 취약점 점검 등 관리 +• AI 서비스 과정에서 소스 코드나 알고리즘에 보안 취약점이 존재할 경우, 공격이 발생할 수 있음. +특히 공개된 코드나 외부 라이브러리를 사용할 때 보안에 취약할 수 있음 + +#### 2.1.1 + +정적 및 동적 코드 분석 도구를 사용하여 소스 코드의 보안 취약점을 분석하고 +있는가? +• AI 서비스를 구현하는 과정에서 소스 코드나 알고리즘에 보안 취약점이 존재할 경우, 공격자가 +이를 악용할 수 있음. 특히 공개된 코드(오픈 소스코드)나 외부 라이브러리를 사용할 때 보안에 +취약할 수 있음 +• 정적 및 동적 코드 분석 도구를 사용하여 소스 코드의 보안 취약점을 탐지하고 수정함 +동적 분석 +프로그램을 실행하여 평가하는 것을 포함함. 이 유형의 분석은 메모리 사용, 성능 및 잠재적인 +런타임 오류를 포함한 런타임 동작을 확인함. 메모리 누수, 동시성 문제 및 잘못된 프로그램 출 +력과 같이 코드가 실행 중일 때만 나타나는 문제를 식별하는 데 유용함 +정적 분석 +코드를 실행하지 않고 검사함. 이 방법은 코드의 구조, 제어 흐름 및 데이터 사용을 분석하여 +구문 오류, 코드 표준 위반 및 잠재적 보안 취약성을 탐지하는 데 중점을 둠 +동적 분석과 정적 분석 비교 +• Generative AI 서비스 제공시 정적 및 동적 코드 분석 도구를 활용하여 보안 취약점을 분석하는 +것은 유해 콘텐츠 생성 방지, 데이터 보호, API 및 서비스 보안 강화 등을 위해 필요함 +- 유해 콘텐츠 생성 방지 +▸부적절한 출력 방지: Generative AI는 사용자 입력을 바탕으로 텍스트, 이미지, 코드 등을 +생성함. 정적 분석 도구는 코드 상에서 유해 콘텐츠를 생성할 가능성이 있는 로직(예: 검증되 +지 않은 입력 처리, 비정상적 조건)을 식별할 수 있음 +▸입력 검증 강화: 동적 분석 도구는 실제 사용 시 모델이 예상치 못한 입력으로 유해한 결과 +를 생성할 가능성을 시뮬레이션하여 보완할 수 있음 +- 데이터 보호 +▸훈련 데이터 노출 방지: Generative AI는 훈련 데이터 기반으로 작동하며, 코드 취약점이 +있으면 훈련 데이터 일부가 의도치 않게 생성 결과에 포함될 수 있음. 코드 분석 도구는 데이 +터 노출을 유발할 수 있는 부분을 자동으로 탐지함 +- API 및 서비스 보안 강화 +▸API 남용 방지: 정적 분석은 API 인증, 입력 검증, 속도 제한과 같은 보안 메커니즘이 올바 +르게 구현되었는지 검토할 수 있음 + + +![이미지 92-0](images/p0092_img0.png) + + +![이미지 92-1](images/p0092_img1.png) + + +![이미지 92-2](images/p0092_img2.png) + + +![이미지 92-3](images/p0092_img3.png) + + +![이미지 92-4](images/p0092_img4.png) + + +![이미지 92-5](images/p0092_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +83 +▸실시간 위협 대응: 동적 분석 도구는 실행 중인 서비스에 대한 악의적인 요청 시나리오(예: +SQL 인젝션, XSS, DoS 공격)를 테스트하여 취약점을 보완함 +- 모델 및 서비스 신뢰성 보장 +▸예상치 못한 동작 방지: 정적 및 동적 분석은 코드가 다양한 입력과 상황에서 의도대로 작동 +하는지 확인하고, 생성 결과의 신뢰성을 높이는 데 도움을 줌 + +#### 2.1.2 + +코드 리뷰 프로세스를 도입하여 보안 문제가 있는 부분을 검토하고 개선하고 +있는가? +• 코드 리뷰는 본인이 작성하지 않는 코드의 내용을 점검하고, 피드백을 주는 과정임. +• 여기서 피드백은 오타, 버그에 대한 가능성, 좋은 코드를 위한 피드백이 될 수 있음. 예상되는 문 +제를 일찍 파악하는 이점도 있을 뿐만 아니라 무엇보다 해당 코드를 작성한 사람에게만 책임이 +있는 것이 아니라, 서비스 제공자에게도 있다는 문화를 만들어내는 것에 목표가 있음. AI 서비스 +제공기업이 코드 리뷰 프로세스를 통해 보안 문제를 검토하고 개선하려면 체계적이고 철저한 절 +차를 도입해야 함 +• Predictive AI 서비스 제공 시 코드 리뷰 프로세스를 도입하여 보안 문제가 있는 부분을 검토하 +는 것은 예측 결과의 정확성과 무결성 보장, 중요 데이터 보호, 시스템 안정성 및 성능 보장 등을 +위해 필요함 +- 예측 결과의 정확성과 무결성 보장 +▸오류 및 편향 제거: Predictive AI 모델의 로직에서 데이터 처리 오류나 편향을 유발할 수 +있는 부분을 코드 리뷰를 통해 식별하고 수정할 수 있음 +▸데이터 드리프트 방지: 데이터 입력 및 처리 로직이 최신 데이터에 적합하게 구현되었는지 +검토하여, 데이터 드리프트로 인한 예측 오류를 줄일 수 있음 +- 중요 데이터 보호 +▸데이터 유출 방지: Predictive AI는 종종 민감한 데이터를 처리함. 코드 리뷰를 통해 데이터 +가 안전하게 처리되고 저장되는지 확인하여 데이터 유출 사고를 예방할 수 있음 +▸액세스 제어 검증: 코드에서 데이터 접근 제어가 적절히 구현되었는지 검토하여, 비인가된 접 +근을 차단할 수 있음 +- 시스템 안정성 및 성능 보장 +▸리소스 관리 최적화: 코드 리뷰는 모델 실행 로직에서 리소스 낭비를 유발할 수 있는 코드를 +식별하여 시스템의 안정성을 높일 수 있음 +▸장애 대응 강화: 코드 리뷰를 통해 오류가 발생했을 때 대체 경로 또는 복구 절차가 제대로 +구현되었는지 확인할 수 있음 +(예시) 코드 리뷰 정책 및 가이드라인 수립 +- 코드 리뷰 목적 명확화: 보안 취약점 식별, 코드 품질 향상, 규정 준수 확인 등 명확한 목표를 +설정 +- 표준화된 리뷰 가이드라인: 코드 리뷰 중점 사항을 포함한 체크리스트를 개발 + + +![이미지 93-0](images/p0093_img0.png) + + +![이미지 93-1](images/p0093_img1.png) + + +![이미지 93-2](images/p0093_img2.png) + + +![이미지 93-3](images/p0093_img3.png) + + +![이미지 93-4](images/p0093_img4.png) + + +--- + +- 보안 기준 준수: OWASP Secure Coding Practices, ISO/IEC 27001 등 보안 표준에 기 +반한 리뷰 기준 설정 +(예시) 코드 리뷰 프로세스 설계 +- 단계별 코드 리뷰: 각 코드 변경 사항에 대해 다음과 같은 단계로 검토 +▸자동화된 분석: 정적 분석 도구(SAST)를 사용하여 코드에서 보안 취약점을 자동으로 탐지 +▸동료 리뷰: 동료 개발자들이 수동으로 코드를 검토하며 보안 취약점과 논리적 오류 탐지 +▸보안 전문가 리뷰: 보안 전문가가 민감하거나 중요한 코드의 보안성을 검토 +- PR(풀 리퀘스트) 기반 리뷰: 모든 코드 변경 사항은 Pull Request(PR)로 제출하고, 병합 전 +에 승인을 받도록 함 +- 리뷰 범위 지정: 변경된 코드뿐 아니라 해당 변경이 영향을 미치는 기존 코드도 함께 검토 +2.2 +모델 환경의 보안 +• AI 모델 환경이 안전하지 않으면 공격자가 모델에 무단으로 접근하거나 모델을 악용할 수 있고 +클라우드 환경에서 배포되는 경우 특히 주의가 필요함 + +#### 2.2.1 + +모델 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 +최소화하여 무단 접근을 방지하고 있는가? +• AI 모델 환경이 안전하지 않으면 공격자가 모델에 무단으로 접근하거나 모델을 악용할 수 있음. +클라우드나 온프레미스 환경에서 AI 모델에 무단 접근이 발생할 수 있음 +• 모델 환경에 대한 접근 제어를 강화하고, 모델에 대한 접근 권한을 최소화하여 무단 접근을 방지해야 +함 +(예시) 역할 기반 접근 제어(RBAC) +- 역할 정의: 모델 환경에 대한 접근 권한을 역할(예: 개발자, 데이터 과학자, 운영자)별로 구분 +- 최소 권한 원칙: 각 역할에 대해 최소한의 권한만 부여 +예: 운영자는 모델 실행만 가능하고, 데이터 과학자는 모델 수정만 가능하도록 설정 +- 동적 권한 할당: 사용자 요청에 따라 임시 권한을 부여하고, 작업 완료 후 권한을 회수 +(예시) 다단계 인증(MFA) +- MFA 적용: 모든 모델 환경에 대한 접근은 다단계 인증(예: 비밀번호 + 인증 앱)을 요구 +- 장치 인증: 접근에 사용되는 장치의 신뢰성을 검증하여 승인된 장치에서만 접근 가능하도록 설정 +(예시) 네트워크 및 IP 기반 접근 제어 +- VPN 및 전용 네트워크: 모델 환경에 대한 접근은 보안 VPN을 통해서만 가능하도록 제한 +- IP 화이트리스트: 허용된 IP 주소에서만 모델 환경에 접근할 수 있도록 구성 +- 방화벽 설정: 모델 환경을 보호하는 방화벽을 설정하고, 외부에서의 무단 트래픽을 차단 + + +![이미지 94-0](images/p0094_img0.png) + + +![이미지 94-1](images/p0094_img1.png) + + +![이미지 94-2](images/p0094_img2.png) + + +![이미지 94-3](images/p0094_img3.png) + + +![이미지 94-4](images/p0094_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +85 + +#### 2.2.2 + +모델이 악의적으로 수정되지 않도록 모델의 무결성을 보장하는 방법을 +적용하고 있는가? +• AI 서비스 제공기업은 모델의 무결성을 보장하기 위해 필요한 방법을 적용해야 함. 모델의 무결 +성을 보장하면 악의적인 수정으로 인한 오작동과 데이터 유출을 방지하여 AI 시스템의 신뢰성과 +안전성을 유지할 수 있음. 이는 서비스 품질 저하와 고객 신뢰 손실을 예방하고, 규제 및 보안 표 +준을 준수하기 위해 필요함 +• (예시) 모델 무결성 검증 +- 모델 해싱(Hashing): 모델 파일의 해시 값을 생성하여 무단 변경 여부를 검증. 배포 전후의 모 +델 상태를 비교하여 일관성을 확인 +- 모델 검증 프로세스: 배포 전에 모델 성능 및 보안 테스트를 수행하여 무결성을 확인 +• (예시) 운영 환경 보안 +- 운영 환경 격리: 모델 운영 환경을 테스트 및 개발 환경과 격리하여 무단 변경을 방지 +- 접근 제어: 역할 기반 접근 제어(RBAC)를 적용하여 모델 환경에 접근할 수 있는 사용자를 제한 +- 실시간 무결성 검증: 운영 중인 모델의 무결성을 주기적으로 검증하는 자동화된 시스템을 구축 + +#### 2.2.3 + +보안 모니터링 도구를 사용하여 모델의 비정상적인 활동을 감지하고, +실시간으로 대응할 수 있는 체계를 구축하고 있는가? +• AI 서비스 제공기업이 보안 모니터링 도구를 사용하여 모델의 비정상적인 활동을 감지하고, 실시간 +대응 체계를 구축하는 것은 모델의 무결성 보호, 데이터 기밀성과 안전성 보장 측면에서 중요함 +• (예시) 모니터링 요구사항 정의 +- 보안 목표 설정: 모델의 무결성・가용성・기밀성을 보호하기 위해 필요한 주요 보안 목표를 정의 +- 모니터링 대상 식별: 모델의 입력 데이터, 출력 결과, API 호출, 리소스 사용량, 데이터 접근 +기록 등 감시할 요소를 명확히 함 +- 위협 시나리오 정의: 예상 가능한 보안 위협(예: 적대적 공격, 비인가 접근, 과도한 API 호출) +과 이에 대응할 방법을 문서화 +• (예시) 이상 탐지 시스템 구축 +- 이상 탐지 모델 개발: 머신러닝 기반 이상 탐지 모델을 사용하여 비정상적인 입력 패턴, 출력 +이상, 비인가 접근 탐지 +- 행동 분석: 사용자의 접근 패턴, API 호출 빈도, 모델 출력 결과의 통계적 변화를 감지 +- 임계값 설정: 비정상적인 활동을 판단할 임계값을 설정하고 과도한 알림을 방지 +• (예시) 주기적인 테스트 및 개선 +- 취약점 점검: 보안 모니터링 시스템과 대응 프로세스의 취약점을 주기적으로 점검 +- 모의훈련: 비정상 활동 탐지와 대응 시뮬레이션을 통해 체계의 효과성을 검증 +- AI 기반 개선: 이상 탐지 모델을 지속적으로 학습 및 개선하여 새로운 위협에 대응 + + +![이미지 95-0](images/p0095_img0.png) + + +![이미지 95-1](images/p0095_img1.png) + + +![이미지 95-2](images/p0095_img2.png) + + +![이미지 95-3](images/p0095_img3.png) + + +![이미지 95-4](images/p0095_img4.png) + + +--- + +2.3 +데이터 보안 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 서비스 개발 또는 운영 과정에서 의도적으로 학습 데이터를 변질시키거나 입력 데이터에 최소 +한의 변조를 가해 예상과는 다른 결과를 출력하도록 하는 공격에 노출될 수 있으므로, 이를 대처 +할 방안을 검토 및 적용하는 것이 바람직함 +공격기법 +공격기법 내용 +데이터 중독 공격 +(poisoning attack) +AI 서비스는 일반적으로 입력 데이터 분포의 변화에 적응하기 위해 모델 배치 후 수집된 +새로운 데이터를 사용해 재교육 됨. 이때, 공격자는 세심하게 조작된(perturbed) 데이터 +를 주입하여 서비스의 정상적인 기능을 손상시키는 방식으로 학습 데이터를 오염시킬 수 +있음 +회피공격 +(evasion attack) +공격자는 학습 모델이 입력을 올바르게 식별할 수 없도록 기존의 입력 데이터에 대해 미 +묘한 차이의 노이즈를 추가하여 조작된 입력 데이터를 생성함. 이러한 변화는 사람의 눈 +에 잘 띄지 않지만, 심층학습 모델의 추론 결과에 큰 영향을 미침 +데이터 공격 기법 (예시) + +#### 2.3.1 + +적대적 공격 등 데이터 공격에 대한 방어 수단을 강구하고 있는가? +• 적대적 공격을 방어하고 AI 서비스의 강건성을 높이기 위한 다양한 방어 기법이 존재함. 특히 데 +이터 수집 및 준비 단계에서의 회피 공격과 중독 공격 방어를 위한 대표적 기법으로는 적대적 학습 +(adversarial training), Gradient Masking, Feature Squeezing 등이 있음 +방어기법 +방어기법 내용 +적대적 학습 +(adversarial +training) +모델을 학습시킬 때, 적대적 사례로 활용할 수 있는 모든 경우의 수를 미리 고려하여 학 +습 데이터셋에 포함시키는 방법. 충분한 수와 다양성이 보장된 적대적 데이터를 생성하 +는 과정 없이는 그 성능을 보장할 수 없음 +Gradient Masking +(Distillation) +대부분의 공격은 모델 추론 과정에서의 경사(gradient)를 보고 이루어지므로 학습 모델 +의 경사가 그대로 노출되는 것을 방지하거나 gradient masking, 정규화 방법 등을 통 +해 경사가 두드러지지 않게 하여 적대적 공격에 방어할 수 있는 방법(distillation)들이 +제안됨 +Feature Squeezing +본래의 학습 모델과 별도로, 주어진 입력이 적대적 사례인지 아닌지를 판단하는 학습 모 +델을 추가하는 방법. 그 외에 다수의 학습 모델을 조합하여 시스템을 구성하면 특정 모델 +에 대한 화이트박스 공격을 피할 수 있으며, 특정 모델에 적용되는 적대적 공격이 불가능 +해짐 +적대적 공격에 대한 방어 기법 + + +![이미지 96-0](images/p0096_img0.png) + + +![이미지 96-1](images/p0096_img1.png) + + +![이미지 96-2](images/p0096_img2.png) + + +![이미지 96-3](images/p0096_img3.png) + + +![이미지 96-4](images/p0096_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +87 + +#### 2.3.2 + +데이터 저장 및 전송 시 무결성을 보호하기 위한 조치를 하고 있는가? +• 데이터 암호화와 같은 보호 기법을 설계 단계에서 도입하고, 데이터 저장 및 전송 시 무결성을 유 +지할 수 있도록 함 +• (예시) 해시(Hash) 및 체크섬 사용 +- 데이터 무결성 검증: 데이터 저장 및 전송 전후에 해시 함수(SHA-256 등)를 사용해 데이터의 +무결성을 확인 +- 체크섬(Checksum) 생성: 데이터 전송 시 체크섬을 생성하고, 수신 측에서 이를 검증하여 데 +이터 변조 여부를 확인 +• (예시) 디지털 서명 및 인증 +- 디지털 서명: 데이터에 디지털 서명을 추가하여 무결성을 보장하고, 출처를 확인할 수 있도록 함 +- 인증서 사용: 전송 과정에서 SSL/TLS 인증서를 사용하여 데이터 송수신 주체의 신뢰성을 검증 + +#### 2.3.3 + +중요 데이터에 대한 기밀성 유지를 위해 보호 방안을 마련하고 있는가? +• AI 서비스를 제공할 때, 중요한 데이터를 보호하기 위한 방안을 마련하는 것은 매우 중요한 것으 +로 아래와 같은 방안들이 적용될 필요가 있음 +(1) 데이터 수집 및 사용 정책 수립 +- 목적 명시: 데이터를 수집할 때, 왜 데이터를 수집하는지 명확히 하고 사용 목적을 제한 +- 최소 수집 원칙: 서비스 운영에 꼭 필요한 최소한의 데이터만 수집 +(2) 데이터 암호화 +- 저장 중 암호화: 민감한 데이터를 저장할 때 AES와 같은 강력한 암호화 알고리즘을 사용 +- 키 관리: 암호화 키를 안전하게 저장하고 관리 +(3) 접근 제어 +- 권한 관리: 데이터에 접근할 수 있는 사용자를 최소화하고 역할 기반 접근 제어(RBAC)를 구현 +- 로그인 보안: 다단계 인증(MFA) 및 강력한 비밀번호 정책을 적용 +- 접근 기록: 데이터를 접근하거나 수정한 기록을 상세히 로그로 남김 + + +![이미지 97-0](images/p0097_img0.png) + + +![이미지 97-1](images/p0097_img1.png) + + +![이미지 97-2](images/p0097_img2.png) + + +![이미지 97-3](images/p0097_img3.png) + + +![이미지 97-4](images/p0097_img4.png) + + +--- + + +#### 2.3.4 + +전송구간에서 중요정보 유출을 방지하기 위한 보호 방안을 마련하고 있는가? +• 전송 구간에서 중요정보 유출을 방지하는 것은 데이터의 기밀성과 무결성을 보호하여 민감 정보 +가 중간에서 가로채지거나 조작되지 않도록 하는 데 필수적임. 안전한 데이터 전송은 AI 서비스 +의 안정성과 지속 가능성을 확보하는 핵심 요소임 +• (예시) 네트워크 보안 강화 +- 방화벽 및 IDS/IPS: 방화벽과 침입 탐지 및 방지 시스템(IDS/IPS)을 사용하여 네트워크로부 +터의 비인가 접근을 차단 +- VPN 및 전용 네트워크: 데이터 전송 시 가상 사설망(VPN) 또는 전용 네트워크를 사용하여 +보안을 강화 +- DLP(Data Loss Prevention) 솔루션 적용: 중요정보가 외부로 유출되지 않도록 모니터링하 +고, 중요 데이터를 전송하려는 시도를 차단 +• (예시) 암호화 기술 적용 +- TLS/SSL 사용: TLS 1.2 이상 프로토콜을 사용하여 데이터 전송 구간에서 암호화를 보장 +- 강력한 암호화 알고리즘: AES-256, RSA 등 강력한 암호화 알고리즘을 적용하여 데이터를 +보호 +- 엔드투엔드 암호화(End-to-End Encryption): 데이터가 송신자에서 수신자까지 암호화된 상 +태로 유지되도록 보장 +• (예시) 키 관리 강화 +- 보안 키 교환: 전송 중 안전한 암호화 키 교환을 위해 Diffie-Hellman 또는 Elliptic Curve +Cryptography(ECC)와 같은 보안 키 교환 방식을 사용 +- 중앙화된 키 관리: 키 관리 시스템(KMS)을 사용하여 암호화 키를 안전하게 생성, 저장 및 관리 +- 키 교체 주기: 암호화 키를 정기적으로 회전하여 보안성을 유지 + + +![이미지 98-0](images/p0098_img0.png) + + +![이미지 98-1](images/p0098_img1.png) + + +![이미지 98-2](images/p0098_img2.png) + + +![이미지 98-3](images/p0098_img3.png) + + +![이미지 98-4](images/p0098_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +89 + +#### 2.3.5 + +데이터 유출시 책임추적을 할 수 있도록 조치를 하고 있는가? +• 데이터 유출 시 발생 원인과 책임자를 효과적으로 추적하고, 데이터 보안 체계를 강화하기 위해서 +는 접근 및 활동 로그 관리, 데이터 태그 및 분류 활동 등이 필요함 +• (예시) 접근 및 활동 로그 관리 +- 접근 기록 저장: 데이터에 접근한 모든 사용자와 시스템의 활동을 기록하고, 로그에는 사용자 +ID, IP 주소, 시간, 작업 내용을 포함 +- 로그 중앙화: 중앙화된 로그 관리 시스템(SIEM)을 도입하여 모든 로그를 한곳에서 관리하고 +분석 가능하도록 함 +- 로그 보존 기간: 법적 요구사항과 내부 정책에 따라 로그 데이터를 일정 기간 보관(예: 1~5년) +• (예시) 데이터 태그 및 분류 +- 데이터 태그 지정: 각 데이터에 식별 태그를 부여하여 데이터의 출처와 사용 이력을 추적할 수 +있도록 함 +- 중요도에 따른 분류: 데이터를 민감도와 중요도에 따라 분류하고, 민감 데이터에 대해 더 강력 +한 보안 조치를 적용 +2.4 +API 및 인터페이스 보안 +• API 및 인터페이스 보안은 AI 서비스 제공기업이 데이터의 기밀성과 무결성을 보호하고, 민감한 +정보가 무단 접근이나 변조로부터 안전하게 유지되도록 보장하기 위해 필수적임. API를 통한 비 +인가 접근은 데이터 유출, 서비스 오작동, 또는 고객 신뢰 손실로 이어질 수 있음. +• 또한, 적대적 공격(Adversarial Attack)이나 과도한 요청(DoS/DDoS 공격)은 모델 성능을 저하 +시켜 서비스 가용성을 위협할 수 있음. 보안이 취약한 인터페이스는 해커가 시스템의 내부를 분석 +하고 추가적인 공격을 시도할 수 있는 진입점이 됨. 따라서 API 및 인터페이스 보안은 법적 규제 +준수, 서비스 품질 유지 등을 위해 필요함 + + +![이미지 99-0](images/p0099_img0.png) + + +![이미지 99-1](images/p0099_img1.png) + + +![이미지 99-2](images/p0099_img2.png) + + +![이미지 99-3](images/p0099_img3.png) + + +![이미지 99-4](images/p0099_img4.png) + + +--- + + +#### 2.4.1 + +API 통신을 암호화하여 데이터가 전송되는 구간에서 외부 공격에 대한 방어를 +하고 있는가? +• API가 공개되어 있으면 공격자가 무단으로 모델에 접근하여 악의적인 요청을 보낼 수 있음. +• API 통신을 암호화하여 데이터가 전송되는 동안 중간자 공격을 방지하고, 모든 트래픽에 대해 암 +호화(TLS/SSL)를 적용하는 것이 필요함 +• (예시) HTTPS 프로토콜 사용 +- TLS/SSL 적용: API 통신에 HTTPS를 적용하여 데이터 전송 구간을 암호화 +- TLS 1.2 이상(권장 TLS 1.3)을 사용하여 최신 보안 표준을 준수 +- SSL 인증서 관리: 신뢰할 수 있는 인증기관(CA)에서 발급한 인증서를 사용하고, 만료 전에 갱신 +• (예시) API 인증 및 권한 관리 +- 강력한 인증 프로토콜: OAuth2, OpenID Connect와 같은 표준 인증 프로토콜을 사용 +- API 키 및 토큰 보안: API 호출 시 고유 키 또는 JWT(JSON Web Token)를 요구하며, 민 +감 정보는 암호화된 환경 변수에 저장 +- 권한 최소화: 사용자 및 애플리케이션에 필요한 최소 권한만 부여하고, API 호출 범위를 제한 + +#### 2.4.2 + +모든 API 요청에 대해 인증 및 권한 관리를 강화하고, 중요 데이터에 접근할 때는 +강한 인증 메커니즘을 적용하고 있는가? +• API는 인터넷을 통해 접근이 가능하므로, 인증 및 권한 관리가 취약하면 데이터 유출, 무단 접근, +악의적인 사용이 발생할 위험이 높아짐 +• 보안이 취약한 서비스는 사용자 신뢰를 잃게 되고, 결국 브랜드 이미지 실추 및 고객 이탈로 이어 +질 가능성이 큼. 특히, 기업 고객(B2B)의 경우 보안이 미흡한 API 서비스는 고객이 사용을 기피 +할 가능성이 큼 +• 또한 내부 직원이나 협력업체가 불필요한 데이터 접근 권한을 가지면 내부 유출 위험이 증가할 +수 있으므로, 로그 및 감사(Audit) 기능을 추가하면 누가, 언제, 어떤 데이터에 접근했는지 추적 +가능하여 보안 사고 대응이 가능함 +• 이에 대한 예방책은 다음과 같음 +- 사용자 인증을 강화하기 위해 다중 인증(MFA)을 도입하고, 모든 중요한 서비스에 대해 강력한 +인증 절차를 적용함 +- 최소 권한 원칙을 적용하여 사용자가 필요한 최소한의 권한만 부여받도록 하고, 불필요한 권한 +이 부여되지 않도록 관리함 +- 사용자 활동을 실시간으로 모니터링하고, 비정상적인 접근 시도를 자동으로 차단할 수 있는 침 +입 탐지 시스템(IDS)을 구축함 + + +![이미지 100-0](images/p0100_img0.png) + + +![이미지 100-1](images/p0100_img1.png) + + +![이미지 100-2](images/p0100_img2.png) + + +![이미지 100-3](images/p0100_img3.png) + + +![이미지 100-4](images/p0100_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +91 + +#### 2.4.3 + +API 트래픽은 암호화 기술을 사용하여 보호하고, 데이터를 안전하게 +주고받도록 보장하고 있는가? +• API 트래픽이 암호화되지 않으면 중간자 공격(Man-in-the-Middle Attack)에 노출될 수 있음. +API 트래픽은 암호화(TLS)를 사용하여 보호하고, 데이터를 안전하게 주고받도록 보장함 +• (예시) 강력한 암호화 알고리즘 사용 +- 암호화 표준: AES-256, RSA-2048과 같은 강력한 암호화 알고리즘을 사용하여 데이터 기밀 +성을 유지 +- Perfect Forward Secrecy(PFS): 세션 키가 유출되더라도 과거 통신 데이터가 복호화되지 +않도록 PFS를 활성 +- 메시지 인증 코드(MAC): HMAC-SHA256을 사용하여 데이터 무결성을 보장하고, 데이터 변 +조를 방지 +• (예시) API 요청 및 응답 보호 방안 +- 토큰 기반 인증: OAuth2, JWT(JSON Web Token)와 같은 표준 인증 방식을 사용하여 +API 요청과 응답을 보호 +- 권한 범위 설정: API 호출의 권한 범위를 명확히 정의하여 민감한 데이터 접근을 제한 +- 전송 데이터 검증: 요청 데이터와 응답 데이터를 해시 또는 체크섬으로 검증하여 무결성을 확인 + +#### 2.4.4 + +API 호출 제한(Rate Limiting)을 설정하여 과도한 요청을 방지하고, +비정상적인 요청 패턴을 탐지하여 차단하고 있는가? +• API 호출을 실시간으로 모니터링하고 비정상적인 패턴이나 오용 시도를 감지하려면 로그 관리, +AI 기반 이상 탐지, Rate Limiting, WAF, 실시간 알림 등 다층적인 보안 전략이 필요함. 이를 +통해 API의 안정성과 보안을 유지하고, 불법 접근이나 오용으로부터 시스템을 보호할 수 있음 +• API 호출 제한(rate limit)이란 분 당 호출할 수 있는 API 호출 횟수를 의미함 +• API에 과도한 요청이 발생할 경우 “서비스 거부 공격(DoS)”의 위험이 있음. 따라서 이 경우에는 +“API 호출 제한(Rate Limiting)”을 설정하여 과도한 요청을 차단하고, 비정상적인 요청 패턴을 +탐지하는 시스템을 구축함 +• (예시) Rate Limiting 정책 설계 +- 요청 한도 정의: API 호출 빈도와 허용 한도를 설정(예: 사용자당 1분에 1000회 호출 제한) +- 기간 기준 설정: 호출 빈도 제한을 적용할 기간을 설정(예: 초, 분, 시간, 일 단위) +- 사용자 기반 제한: 사용자별, IP별, 또는 API 키별로 개별 호출 제한 정책을 설정 +• (예시) Rate Limiting 구현 +- 정적 및 동적 설정: API 사용량에 따라 정적 또는 동적으로 Rate Limiting 값을 조정할 수 +있는 기능을 구현 + + +![이미지 101-0](images/p0101_img0.png) + + +![이미지 101-1](images/p0101_img1.png) + + +![이미지 101-2](images/p0101_img2.png) + + +![이미지 101-3](images/p0101_img3.png) + + +![이미지 101-4](images/p0101_img4.png) + + +--- + +서비스 제공 및 운영 +3.1 +로그 및 운영 데이터 보안 +• AI 서비스 운영 중 발생하는 로그 및 운영 데이터는 중요한 정보로서, 이를 안전하게 관리하지 +않으면 공격자가 이를 분석하여 시스템의 구조와 취약점을 파악할 수 있음 + +#### 3.1.1 + +데이터 처리 중 접속로그 관리를 강화하고 있는가? +• AI 서비스 운영 중 발생하는 로그 및 운영 데이터는 특히 Generative AI 서비스 제공시 모델의 +품질 관리 및 성능 최적화, 오류 추적 및 문제 해결, Generative AI 특유의 문제 해결 등을 위해 +매우 중요함 +• 모델의 품질 관리 및 성능 최적화 +- 결과물 검증: Generative AI는 예측 가능한 정답보다 창의적이고 다양한 응답을 생성하므로, +로그를 통해 출력 결과물이 유효한지 확인할 필요가 있음 +- 피드백 기반 학습: 운영 데이터를 통해 잘못된 응답, 비효율적인 생성 결과 등을 분석하고 이 +를 모델 개선에 반영할 수 있음 +• 오류 추적 및 문제 해결 +- 오류 원인 분석: 비정상적 응답, 시스템 충돌, 사용자 불만족을 유발하는 문제를 로그 데이터 +를 통해 빠르게 식별할 수 있음 +- 실시간 대응: 생성형 AI의 예기치 않은 오류나 비정상적 응답을 감지하고, 운영 데이터 기반으 +로 즉각적인 대응이 가능 +• Generative AI 특유의 문제 해결 +- 출력 다양성 및 품질 분석: Generative AI는 출력이 다양하고 예측하기 어려운 경우가 많아, +로그 데이터를 통해 생성 결과의 품질과 일관성을 평가할 수 있음 +- 안전성 확보: 생성된 응답이 유해하거나 부적절한 경우를 모니터링하고, 로그 데이터를 기반으 +로 이를 예방하는 메커니즘을 설계할 수 있음 +• (예시) 접속 로그 수집 및 저장 +- 접속 기록 범위 정의: 사용자 ID, IP 주소, 접근 시간, 요청 URL, HTTP 상태 코드, 처리 결과 +등 접속 관련 주요 정보를 기록 +- 중앙 집중식 로그 관리: 로그 데이터를 중앙에서 관리할 수 있는 통합 로그 관리 시스템 +(SIEM)을 구축 +- 안전한 로그 저장: 로그 데이터를 암호화하고 안전한 위치에 저장하여 무단 액세스 및 변조를 방지 +• (예시) 로그 보존 및 삭제 정책 +- 보존 기간 설정: 법적 규제 및 기업 내부 정책에 따라 로그 데이터를 일정 기간(예: 1~5년) 보관 +- 안전한 삭제: 로그 데이터를 보존 기간 이후 안전하게 삭제하여 데이터 유출 위험을 줄임 + + +![이미지 102-0](images/p0102_img0.png) + + +![이미지 102-1](images/p0102_img1.png) + + +![이미지 102-2](images/p0102_img2.png) + + +![이미지 102-3](images/p0102_img3.png) + + +![이미지 102-4](images/p0102_img4.png) + + +![이미지 102-5](images/p0102_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +93 + +#### 3.1.2 + +로그 파일 및 운영 데이터에 암호화를 적용하고, 중요정보는 별도로 관리하여 +유출을 방지하고 있는가? +• Generative AI 서비스 제공 시 로그 파일 및 운영 데이터에 암호화를 적용하고 중요 정보를 별 +도로 관리하여 유출을 방지하는 것은 중요 데이터 보호, 생성 결과 및 학습 데이터 보호, 악의적 +인 행위 방지 등을 위해 필요함 +• 중요 데이터 보호, 생성 결과 및 학습 데이터 보호 +- 기밀 유지: 생성형 AI는 종종 비즈니스 기밀, 제품 설계, 혹은 연구 데이터를 처리함. 이런 결 +과물이나 입력 데이터가 로그에 저장될 경우, 유출 시 경쟁력 손실로 이어질 수 있음 +- 지적 재산권 보호: AI 모델이 생성한 결과물은 조직의 자산일 수 있으므로, 로그에 저장된 관 +련 데이터를 보호하는 것이 중요함 +• Generative AI의 특성으로 인한 보안 리스크 +- 데이터 재학습 가능성: Generative AI는 학습 과정에서 중요한 정보를 학습할 가능성이 있음. +로그 데이터가 유출되면 공격자는 이를 분석해 모델의 학습 데이터나 사용자 데이터를 추론할 +수 있음 +- 출력물 조작: 로그에 저장된 데이터가 유출되거나 변조될 경우, 생성 결과물의 무결성을 보장 +할 수 없게 되어 서비스 신뢰도가 하락할 수 있음 +• 악의적인 행위 방지 +- 리버스 엔지니어링 방지: 로그와 운영 데이터를 암호화하지 않을 경우, 악의적인 사용자가 데 +이터를 분석해 모델 동작 방식을 역으로 추적하거나 공격 벡터를 설계할 수 있음 +- 서비스 악용 방지: 로그 데이터를 통해 AI 모델의 취약점(예: 특정 입력 패턴에서 부적절한 응 +답)이 노출되면 이를 악용한 공격(예: 모델 중독, 데이터 중독)이 발생할 수 있음 +• 운영 효율성과 데이터 접근 제어 +- 중요 정보 별도 관리: 운영 데이터 중 중요 정보(예: API 키, 인증 토큰, 암호화 키)는 별도로 +관리하여 로그에서 제거하면, 데이터 유출 사고 발생 시 피해 범위를 최소화할 수 있음 +- 접근 통제 강화: 로그 데이터를 암호화하고 중요 정보를 분리 관리하면, 내부 관계자나 시스템 +의 비인가 접근으로 인한 데이터 유출 가능성을 줄일 수 있음 + + +![이미지 103-0](images/p0103_img0.png) + + +![이미지 103-1](images/p0103_img1.png) + + +![이미지 103-2](images/p0103_img2.png) + + +![이미지 103-3](images/p0103_img3.png) + + +![이미지 103-4](images/p0103_img4.png) + + +--- + + +#### 3.1.3 + +운영 중 발생하는 데이터를 안전하게 저장하고, 접근 제어를 통해 인증된 +관리자만 로그에 접근할 수 있도록 설정하고 있는가? +• Generative AI 서비스 제공 시 운영 중 발생하는 데이터를 안전하게 저장하고 접근 제어를 통해 +인증된 관리자만이 로그에 접근하도록 설정하는 것은 생성된 데이터의 기밀성 보장, 보안 사고 예 +방 및 책임 분산 방지 등을 위해 필요함 +• 생성된 데이터의 기밀성 보장 +- 기밀 유지: Generative AI가 생성한 결과물에는 종종 비즈니스 기밀 또는 사용자 특정 데이 +터가 포함될 수 있으므로, 로그에 저장된 생성 데이터를 보호하지 않으면 외부로 유출될 가능 +성이 있음 +- 데이터 오용 방지: 인증되지 않은 사용자가 로그에 접근하면 생성 데이터나 사용 데이터를 악 +의적으로 조작, 재사용, 유출할 수 있음 +- 사용 기록: 로그에는 사용자가 어떤 요청을 했는지, 어떤 결과를 생성했는지와 같은 정보가 포 +함됨. 이러한 정보는 사용자 행동 분석에 악용될 수 있으므로 철저한 접근 통제가 필요함 +• 보안 사고 예방 및 책임 분산 방지 +- 내부 위협 관리: 내부 관계자가 로그에 접근해 데이터를 유출하거나 악용하는 일이 발생하지 +않도록, 인증된 관리자만 접근하도록 설정해야 함 +- 무결성 보장: 접근 통제를 통해 로그 데이터를 보호함으로써, 데이터가 의도치 않게 변경되거 +나 삭제되지 않도록 보장할 수 있음 +• (예시) 접근 제어 강화 +- 역할 기반 접근 제어(RBAC): 사용자 역할별로 데이터 접근 권한을 부여하고, 최소 권한 원칙 +을 준수 +- 다단계 인증(MFA): 로그 데이터에 접근하려면 ID/비밀번호와 추가 인증(예: OTP, 인증 앱)을 +요구하여 보안을 강화 +- 접근 로그 기록: 로그 데이터에 접근한 모든 사용자와 작업 내역을 기록하여 추후 감사와 분석 +이 가능하도록 함 +• (예시) 접근 요청 인증 +- 네트워크 기반 인증: VPN 사용, IP 화이트리스트 정책 적용 +- 암호화된 통신 TLS(Transport Layer Security)를 적용하여 로그 데이터 전송 중 기밀성과 +무결성을 유지 + + +![이미지 104-0](images/p0104_img0.png) + + +![이미지 104-1](images/p0104_img1.png) + + +![이미지 104-2](images/p0104_img2.png) + + +![이미지 104-3](images/p0104_img3.png) + + +![이미지 104-4](images/p0104_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +95 + +#### 3.1.4 + +로그 데이터 접근 권한을 최소화하고, 접근 제어 및 사용자 활동기록을 통해 +비정상적인 접근을 탐지하고 있는가? +• Predictive AI 서비스 제공 시 로그 데이터 접근 권한을 최소화하고, 접근 제어 및 사용자 활동 +기록을 통해 비정상적인 접근을 탐지하는 것은 모델 신뢰성과 무결성 유지, 비즈니스 기밀 보호, +비정상적 접근 탐지를 통한 보안 강화 등을 위해 필요함 +• 모델 신뢰성과 무결성 유지 +- 데이터 조작 방지: 로그에 비인가 접근이 발생하면, 모델의 입력 데이터나 예측 결과가 조작될 +가능성이 있음. 이는 모델의 신뢰성을 손상시킬 수 있음 +- 운영 데이터 보호: Predictive AI의 운영 데이터는 모델 성능 평가와 개선에 사용되므로, 이를 +안전하게 보호해야 모델의 무결성을 유지할 수 있음 +• 비즈니스 기밀 보호 +- 모델 및 예측 알고리즘 보호: Predictive AI의 핵심 경쟁력은 예측 알고리즘과 데이터를 분석 +해 도출한 비즈니스 통찰임. 로그 데이터에 비즈니스 기밀이 포함될 경우, 권한 없는 접근은 +경쟁력 손실로 이어질 수 있음 +• 비정상적 접근 탐지를 통한 보안 강화 +- 내부 위협 관리: 내부 사용자가 악의적이거나 부주의한 행동으로 로그 데이터를 유출하거나 변 +경하는 것을 방지할 수 있음 +- 외부 공격 방어: 비인가 접근 시도를 탐지하고, 이를 통해 데이터 도난이나 서비스 악용을 조 +기에 차단할 수 있음 +- 운영 이상 감지: 비정상적인 접근 패턴은 시스템 취약점이나 보안 위협의 신호일 수 있으므로 +이를 탐지하면 사전 대응이 가능함 +• Predictive AI 서비스는 데이터의 민감성과 모델의 의존성 때문에 로그 데이터의 안전한 저장과 +접근 통제가 필수적임. 접근 권한 최소화와 사용자 활동 기록은 데이터 보호, 보안 강화, 규제 준 +수, 비즈니스 신뢰 확보를 가능하게 하며, Predictive AI 서비스의 안정성과 지속 가능성을 보장 +하는 핵심 요소임 + + +![이미지 105-0](images/p0105_img0.png) + + +![이미지 105-1](images/p0105_img1.png) + + +![이미지 105-2](images/p0105_img2.png) + + +![이미지 105-3](images/p0105_img3.png) + + +![이미지 105-4](images/p0105_img4.png) + + +--- + +서비스 유지보수 및 지원 +4.1 +모니터링, 업데이트 및 패치 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 서비스 제공자는 AI 활용 과정을 통해 AI 기능을 향상시키고 위험을 억제하기 위해 소프트웨 +어 업데이트, 검사 및 수리 등을 제공하여야 함. 특히 업데이트를 통해 다른 AI 연동에 영향을 미 +칠 것으로 예상되는 경우 위험에 대한 정보를 제공해야 함 + +#### 4.1.1 + +지속적인 사용자 경험 모니터링을 위해 사용자 로그를 수집・관리하고 있는가? +• 서비스 이용 로그 분석은 서비스 운영 상태에 관한 확인뿐만 아니라, 사용자가 겪는 문제가 무엇 +인지 확인할 수 있는 가장 기본적인 방법이 될 수 있음. 서비스 로그는 서비스가 운영되는 동안 +지속해서 수집되며 서비스 고도화에 따라 다양한 형태로 누적될 수 있음 +• 서버 인프라에 대한 로그를 통해 서비스 운영 상태에 대한 모니터링을 수행할 수 있으며, 사용자 +상호 작용 로그는 사용자가 어떤 서비스를 많이 이용하고 어떤 서비스에서 오류를 겪는지 분석할 +수 있음. 이를 위해 인프라 관점에서는 로그 분석 소프트웨어를 활용할 수 있으며, 사용자 관점에 +서는 기업이 자체적으로 인터페이스 또는 상호작용의 호출에 따른 로그를 수집하거나 로그 분석 +도구를 활용할 수 있음 +• Generative AI 서비스 제공 관점: 사용자 로그를 수집・관리해야 하는 이유 +- 사용자 피드백 반영 및 서비스 개선 +▸생성 결과 품질 개선: Generative AI는 텍스트, 이미지, 코드 등 다양한 유형의 콘텐츠를 생 +성함. 사용자 로그를 통해 생성된 결과물의 품질, 적절성, 유용성을 평가하고 개선할 수 있음 +▸오류 수정: 로그 데이터를 활용해 잘못된 응답이나 비정상적인 동작을 추적하고, 모델과 서비 +스의 정확성을 개선할 수 있음 +- 유해 콘텐츠 모니터링 및 방지 +▸부적절한 콘텐츠 생성 감지: 로그 데이터를 통해 모델이 유해하거나 부적절한 콘텐츠를 생성 +한 사례를 식별하고, 이를 방지하는 데 필요한 개선 조치를 취할 수 있음 +▸안전성 확보: 지속적인 로그 모니터링은 생성 결과가 윤리적이고 규제 요구를 충족하도록 보 +장하는 데 필수적임 +• Predictive AI 서비스 제공 관점: 사용자 로그를 수집・관리해야 하는 이유 +- 예측 정확성 향상 +▸모델 성능 평가: 사용자 로그는 Predictive AI 모델의 예측 결과와 실제 결과를 비교하고, +모델의 정확성을 평가하는 데 핵심 자료로 사용됨 +▸데이터 드리프트 감지: 사용자 로그를 통해 입력 데이터의 특성 변화를 모니터링하고, 데이터 +드리프트나 개념 드리프트를 감지하여 모델 업데이트가 필요한 시점을 파악할 수 있음 +▸오류 수정 및 학습: 부정확한 예측 결과를 식별하고, 이를 통해 모델 재훈련 및 성능 개선을 + + +![이미지 106-0](images/p0106_img0.png) + + +![이미지 106-1](images/p0106_img1.png) + + +![이미지 106-2](images/p0106_img2.png) + + +![이미지 106-3](images/p0106_img3.png) + + +![이미지 106-4](images/p0106_img4.png) + + +![이미지 106-5](images/p0106_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +97 +수행할 수 있음 +- 비즈니스 리스크 관리 +▸부정확한 결과 방지: 사용자 로그는 Predictive AI 모델의 출력물이 적절했는지 확인하고, +잘못된 결과로 인해 발생할 수 있는 비즈니스 리스크를 방지하는 데 도움을 줌 +▸서비스 품질 유지: 지속적인 모니터링은 모델이 비즈니스 목표를 지원하는 데 필요한 성능과 +안정성을 유지하도록 보장함 + +#### 4.1.2 + +AI 시스템이 정상적으로 작동하지 않거나 예기치 못한 오류가 발생할 경우 이를 +조기에 탐지하고 대응하는 메커니즘이 있는가? +• AI 시스템에 오류 등 탐지 및 대응 메카니즘 +구분 +설명 +예시 +시스템 모니터링 +시스템 로그를 주기적으로 모니터링하여 비정 +상적인 활동을 탐지하고 대응함 +시스템에 최신 보안 업데이트를 정기 +적으로 적용하고, 로그 모니터링 도구 +를 사용하여 시스템 활동을 실시간으 +로 감시 +이상 징후 탐지 +(Anomaly Detection) +정상적인 패턴에서 벗어난 이상 징후를 자동 +으로 감지할 수 있는 알고리즘과 기술을 도입 +머신러닝 기반 이상 탐지 알고리즘, 실 +시간 경고 시스템 +자동화된 경고 +(Automated Alerts) +이상 징후나 위험 요소 감지 시 즉각적으로 +관련 담당자에게 경고를 보내는 자동화된 시 +스템을 운영함 +이메일 알림, SMS 경고, 대시보드 알 +림 등 +정기적 검토 +(Regular Reviews) +모니터링 결과와 경고 로그를 정기적으로 검 +토하여, 새로운 위험 요소나 패턴을 식별하고 +대응 방안을 업데이트함 +주간/월간 보고서 작성, 경고 로그 분 +석 회의 + + +![이미지 107-0](images/p0107_img0.png) + + +![이미지 107-1](images/p0107_img1.png) + + +![이미지 107-2](images/p0107_img2.png) + + +![이미지 107-3](images/p0107_img3.png) + + +![이미지 107-4](images/p0107_img4.png) + + +--- + + +#### 4.1.3 + +AI 시스템의 보안 패치나 모델 업데이트가 정기적으로 이루어지고 있는가? +• 보안 취약점이 발견되면 신속하게 패치를 적용하고, 정기적인 보안 업데이트를 통해 시스템의 보 +안 상태를 최신으로 유지해야 함 +• Generative AI 서비스 제공 시 AI 시스템에 대한 보안 패치 및 모델 업데이트 확인이 중요한 이유 +- 유해 콘텐츠 및 부적절한 응답 방지 +▸윤리적 리스크 관리: Generative AI는 새로운 입력에 따라 다양한 결과를 생성함. 모델 업 +데이트가 이루어지지 않으면, 유해 콘텐츠, 편향된 결과, 허위 정보가 생성될 가능성이 커질 +수 있음 +▸사용자 요구 반영: 정기적인 모델 업데이트는 사용자의 피드백을 반영하여 생성 결과의 품질 +과 적절성을 개선할 수 있음 +- 보안 취약점 예방 +▸사이버 공격 방어: Generative AI의 API나 인터페이스는 공격자가 악용하려는 주요 표적임. +보안 패치가 없으면 SQL 삽입, API 남용, 악의적인 입력 패턴에 취약해질 수 있음 +▸데이터 유출 방지: 모델 업데이트를 통해 훈련 데이터에서 학습된 중요한 정보가 노출되지 +않도록 최신 보안 조치를 적용해야 함 +• Predictive AI 서비스 제공 시 AI 시스템에 대한 보안 패치 및 모델 업데이트 확인이 중요한 이유 +- 데이터 특성 변화 대응 +▸모델 노후화 방지: Predictive AI는 입력 데이터의 패턴을 기반으로 예측을 수행함. 시간이 +지나면 데이터의 특성이 변할 수 있으며, 정기적인 모델 업데이트가 이루어지지 않으면 예측 +정확도가 떨어질 위험이 있음 +▸드리프트(Drift) 관리: 데이터 드리프트(특성 변화)나 개념 드리프트(관계 변화)에 대응하기 +위해 최신 데이터를 반영한 재훈련과 업데이트가 필요함 +- 보안 취약점 완화 +▸모델 보안 강화: Predictive AI도 Generative AI와 마찬가지로 공격의 대상이 될 수 있음. +예를 들어, 데이터 중독(Data Poisoning) 공격은 모델이 잘못된 예측을 하도록 유도할 수 +있으므로, 보안 패치와 업데이트는 이를 예방하는 데 필수적임 +▸데이터 보호: Predictive AI는 종종 민감한 정보나 금융 데이터를 처리하므로, 보안 취약점 +이 있으면 데이터 유출로 이어질 가능성이 높음 + + +![이미지 108-0](images/p0108_img0.png) + + +![이미지 108-1](images/p0108_img1.png) + + +![이미지 108-2](images/p0108_img2.png) + + +![이미지 108-3](images/p0108_img3.png) + + +![이미지 108-4](images/p0108_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +99 +4.2 +성능 및 장애 관리 +• 모델 성능 저하가 감지되면 재학습을 통해 성능을 유지하고, 관련 시스템을 구축하여 장애 발생 +시에도 서비스 가용성을 유지할 수 있도록 함 + +#### 4.2.1 + +서비스 장애가 발생했을 때 자동으로 복구할 수 있도록 하고 있는가? +• 자동 복구 시스템을 구축하여 서비스 장애가 발생했을 때 자동으로 복구할 수 있도록 해야 함 +• Generative AI 서비스 제공 시 장애가 발생했을 때 자동으로 복구하는 것이 중요한 이유 +- 서비스 장애 발생 시 영향 +▸사용자 경험: Generative AI는 실시간 상호작용이 중요한 서비스임. 예를 들어, 사용자가 질 +문을 입력했는데 응답이 늦거나 제공되지 않으면 서비스 신뢰도가 크게 하락할 수 있음 +▸창의성 및 생산성 저하: 콘텐츠 생성 중 장애가 발생하면 사용자 작업 흐름이 끊기거나 데이 +터가 손실될 수 있음 +▸실시간 응답 요구: 특히 실시간 응답이 중요한 고객 지원, 콘텐츠 제작 도구에서의 장애는 즉 +각적인 문제 해결과 복구가 필요함 +• Predictive AI 서비스 제공 시 장애가 발생했을 때 자동으로 복구하는 것이 중요한 이유 +- 서비스 장애 발생 시 영향 +▸의사결정 지연: Predictive AI는 중요한 비즈니스 의사결정이나 시스템 운영(예: 공장 설비 +관리, 금융 거래)에 활용됨. 장애가 발생하면 의사결정이 지연되어 업무나 시스템에 직접적인 +영향을 미칠 수 있음 +▸데이터 흐름 중단: 예측 모델은 실시간으로 데이터를 수집하고 처리하는 경우가 많음. 데이터 +입력이 중단되거나 처리 지연이 발생하면 결과의 신뢰도와 정확도가 저하됨 +▸비용 증가: Predictive AI의 예측 실패는 물류, 생산, 운영 등에서 비용 증가와 손실로 이어 +질 수 있음 + + +![이미지 109-0](images/p0109_img0.png) + + +![이미지 109-1](images/p0109_img1.png) + + +![이미지 109-2](images/p0109_img2.png) + + +![이미지 109-3](images/p0109_img3.png) + + +![이미지 109-4](images/p0109_img4.png) + + +--- + + +#### 4.2.2 + +모델 성능을 지속적으로 모니터링하고, 성능 저하가 감지되면 재학습을 통해 +성능을 유지하고 있는가? +• 운영 중인 AI 모델은 시간이 지남에 따라 성능이 저하되거나, 데이터의 변화로 인해 훈련 데이터 +와 실시간 데이터 간에 차이가 발생하는 모델 드리프트(Model Drift) 현상이 발생할 수 있음. +- 현실 적합성 부족: 시간이 지남에 따라 모델이 최신 정보나 사용자 요구를 반영하지 못해 구식 +이 되거나, 현실과 동떨어진 결과를 생성할 수 있음 +- 데이터 드리프트(Data Drift): 시간이 지남에 따라 데이터 분포가 변화하면, 모델이 학습했던 +데이터와 실제 데이터 간의 불일치가 발생함 +• 모델 성능을 지속적으로 모니터링하고, 성능 저하가 감지되면 재학습을 통해 성능을 유지해야 함 +• Generative AI 서비스 제공 시 모델 성능 저하의 영향 +- 품질 저하: 생성된 콘텐츠의 품질(예: 문법 오류, 맥락 부적합, 비논리적 답변 등)이 낮아져 사 +용자 만족도 감소 +- 사용자 신뢰 손실: 사용자에게 정확하고 맥락에 맞는 정보를 제공하지 못하면 서비스 신뢰도 하락 +• Predictive AI 서비스 제공 시 모델 성능 저하의 영향 +- 예측 정확도 감소: 모델이 실제 데이터 분포를 제대로 반영하지 못하면 잘못된 예측을 제공할 +수 있음.(예: 행동 예측 오류로 마케팅 비용 낭비, 재고 부족 또는 과잉 발생) +- 비즈니스 손실: 예측 실패로 인해 물류, 금융, 운영 등에서 직접적인 손실이 발생할 수 있음 + +#### 4.2.3 + +실시간으로 모델 드리프트 탐지 시스템을 운영하여 모델 성능이 저하될 경우 즉시 +대응할 수 있는 체계를 마련하고 있는가? +• 실시간 데이터와 훈련 데이터 간의 차이로 인해 모델의 예측 성능이 떨어져 보안 취약점이 발생 +할 수 있음. 이 경우에는 실시간으로 모델 드리프트 탐지 시스템을 운영하여 모델 성능이 변할 경 +우 즉시 대응할 수 있는 체계를 마련해야 함 +• Generative AI 서비스 제공 시 모델 성능에 대한 실시간 탐지 및 대응의 중요성 +- 빠른 오류 수정: 드리프트를 실시간으로 탐지하면, 품질 저하가 사용자 경험에 영향을 미치기 +전에 신속하게 대응 가능 +- 동적 콘텐츠 적응: 드리프트 탐지 시스템은 새로운 사용자 입력 패턴이나 트렌드를 인식하고 +적응할 수 있도록 모델 업데이트를 지원 +- 서비스 연속성 보장: 탐지된 드리프트를 해결함으로써 지속적으로 일관성 있고 고품질의 콘텐 +츠를 제공할 수 있음 +• Predictive AI 서비스 제공 시 모델 성능에 대한 실시간 탐지 및 대응의 중요성 +- 정확성 유지: 실시간 드리프트 탐지는 예측 결과의 정확성을 유지하고, 잘못된 결과를 방지 +- 의사결정 지원: 모델 성능 저하가 감지되면 즉시 조치를 취하여 비즈니스 의사결정이 잘못된 +데이터를 기반으로 하지 않도록 보장 +- 비용 절감: 드리프트로 인한 손실을 조기에 방지하여 비즈니스 연속성과 수익성을 보호 + + +![이미지 110-0](images/p0110_img0.png) + + +![이미지 110-1](images/p0110_img1.png) + + +![이미지 110-2](images/p0110_img2.png) + + +![이미지 110-3](images/p0110_img3.png) + + +![이미지 110-4](images/p0110_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +101 + +#### 4.2.4 + +정기적으로 모델 재학습 및 업데이트를 수행하여 새로운 데이터 패턴을 반영하고, +성능을 개선하고 있는가? +• 모델 성능이 저하되면 잘못된 의사결정을 내릴 수 있으며, 이를 공격자가 악용할 수 있음 +• Generative AI 서비스 제공 시 정기적인 재학습이 중요한 이유 +- 민감 정보 제거: 과거 학습 데이터에서 모델이 민감하거나 기밀 정보를 학습한 경우, 정기적으 +로 업데이트하여 이러한 정보를 제거하고 오용 가능성을 줄일 수 있음 +- 보안 취약점 보완: 악성 입력(예: prompt injection 공격)이나 예측 가능한 응답 패턴을 탐지 +하고, 정기적인 업데이트로 이를 수정하여 악의적 사용을 방지 +- 콘텐츠 생성 안전성 강화: 업데이트를 통해 모델이 불법적이거나, 부적절한 콘텐츠를 생성하지 +않도록 제어 및 필터링 성능을 개선 +• Predictive AI 서비스 제공 시 정기적인 재학습이 중요한 이유 +- 새로운 위협 탐지: 사이버 보안, 사기 탐지와 같은 Predictive AI 서비스는 새로운 공격 패턴 +과 수법에 적응하기 위해 최신 데이터를 반영(예: 피싱 이메일의 텍스트 패턴 변화 또는 새로 +운 네트워크 공격 패턴 학습) +- 오탐률 및 미탐률 감소: 오래된 모델은 위협 탐지에서 오탐률(False Positive) 또는 미탐률 +(False Negative)을 증가시켜 보안 문제를 유발할 수 있음. 정기적인 업데이트로 이를 줄일 +수 있음 +- 보안 규제 준수: 정기적으로 모델을 재학습하면 최신 데이터 보안 규정을 준수하고, 데이터 사 +용 정책이 변경될 때 이를 반영할 수 있음 + + +![이미지 111-0](images/p0111_img0.png) + + +![이미지 111-1](images/p0111_img1.png) + + +![이미지 111-2](images/p0111_img2.png) + + +![이미지 111-3](images/p0111_img3.png) + + +![이미지 111-4](images/p0111_img4.png) + + +--- + + +#### 4.2.5 + +AI 서비스에 대해 다중화(HA) 및 백업 시스템을 구축하여 장애 발생 시에도 +서비스가 연속적으로 제공될 수 있도록 하고 있는가? +• AI 서비스는 항상 가용성을 유지해야 하지만, 서비스 운영 중 장애가 발생하거나 서비스가 과부 +하 또는 DoS/DDoS 공격으로 인해 시스템이 다운되면 고객에게 심각한 영향을 미칠 수 있음 +• AI 서비스에 대해 다중화(HA) 및 백업 시스템을 구축하여 장애 발생 시에도 서비스가 연속적으 +로 제공될 수 있도록 해야 함 +• Generative AI 서비스 제공 시 다중화 및 백업의 중요성 +- 서비스 연속성 보장: 다중화된 시스템은 장애가 발생해도 대체 서버나 리소스를 통해 서비스를 +지속적으로 제공하므로, 데이터가 유실되거나 무단으로 노출될 위험을 줄임.(예: 실시간 대화형 +서비스에서 장애가 발생하더라도 사용자 데이터를 안전하게 처리) +- 데이터 보존 및 복구: 백업 시스템은 생성된 콘텐츠와 사용자 요청 데이터를 안전하게 저장하 +며, 장애 이후에도 원래 상태로 복구할 수 있도록 보장함. 데이터 손실로 인해 악의적 행위자 +가 시스템 내 취약점을 노리는 상황을 방지 +- 사이버 공격 방어: 장애 상황에서 서비스가 중단되면, 이를 노리는 DDoS 공격이나 데이터 유 +출 시도가 증가할 수 있음. 다중화는 이러한 공격에 대한 방어력을 강화함 +• Predictive AI 서비스 제공 시 다중화 및 백업의 중요성 +- 실시간 보안 위협 대응: Predictive AI는 사이버 공격, 사기 탐지, 네트워크 이상 탐지 등 보 +안과 직접적으로 관련된 역할을 수행함. 다중화된 시스템은 장애 발생 시에도 실시간 대응을 +유지해 보안 사고를 방지할 수 있음 +- 중단 없는 데이터 흐름 유지: 백업 시스템은 데이터 입력과 처리의 연속성을 보장하며, 장애로 +인해 중요한 데이터를 놓치거나 보안 위협을 간과하는 문제를 방지함 +- 신뢰할 수 있는 복구 체계: Predictive AI 서비스는 장애 발생 시 신속하고 정확한 복구가 필 +수적임. 백업 시스템은 보안 위협 탐지와 같은 중요한 작업이 지속되도록 보장함 + + +![이미지 112-0](images/p0112_img0.png) + + +![이미지 112-1](images/p0112_img1.png) + + +![이미지 112-2](images/p0112_img2.png) + + +![이미지 112-3](images/p0112_img3.png) + + +![이미지 112-4](images/p0112_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +103 + +#### 4.2.6 + +침입차단시스템 등을 통해 외부에서 발생하는 DoS/DDoS 공격을 방어하고, +실시간 모니터링 시스템을 운영하여 장애를 빠르게 감지하고 대응하고 있는가? +• 운영 중 발생하는 장애에 대한 대응이 늦어지면 고객 불만이 발생하고, 비즈니스 중단으로 이어질 +수 있음 +• 침입 방지 및 차단 시스템을 통해 외부에서 발생하는 DoS/DDoS 공격을 방어하고, 실시간 모니 +터링 시스템을 운영하여 장애를 빠르게 감지하고 대응해야 함 +• Generative AI 서비스 제공 시 DoS/DDoS 방어 및 실시간 모니터링의 중요성 +- 서비스 연속성 보장: 침입차단시스템과 같은 보안 장치를 통해 DoS/DDoS 공격을 방어하면, +서비스 중단 없이 사용자 요청을 처리할 수 있음.(예: 요청의 우선순위를 관리하거나 비정상 +트래픽을 차단하여 정당한 사용자 요청이 처리되도록 보장함) +- 사용자 데이터 보호: 실시간 모니터링을 통해 비정상 트래픽과 패턴을 빠르게 감지하여, 데이 +터 유출과 추가적인 공격 가능성을 방지할 수 있음 +• Predictive AI 서비스 제공 시 DoS/DDoS 방어 및 실시간 모니터링의 중요성 +- 실시간 데이터 보호: DoS/DDoS 방어를 통해 실시간으로 들어오는 데이터를 안정적으로 처 +리하여 예측 결과의 신뢰성을 유지할 수 있음.(예: 정상적인 데이터가 차단되지 않고 지속적으 +로 모델에 공급될 수 있도록 보장) +- 비즈니스 연속성 보장: Predictive AI의 의사결정 시스템이 중단되지 않도록 실시간 모니터링 +으로 장애를 빠르게 감지하고 대응할 수 있음 + + +![이미지 113-0](images/p0113_img0.png) + + +![이미지 113-1](images/p0113_img1.png) + + +![이미지 113-2](images/p0113_img2.png) + + +![이미지 113-3](images/p0113_img3.png) + + +![이미지 113-4](images/p0113_img4.png) + + +--- + +피드백 및 서비스 개선 +5.1 +사용자 피드백 관리 +• 사용자 피드백, 성능 모니터링, 보안 로그, 성과 평가 등을 기반으로 AI 시스템을 개선하는 과정 +에서 발생할 수 있는 보안 취약점이 존재함. 이 단계는 AI 서비스의 품질과 성능을 지속적으로 +향상시키는 중요한 과정이지만, 보안 관리가 소홀할 경우 공격자가 취약점을 악용할 수 있는 위험 +이 큼 + +#### 5.1.1 + +사용자 피드백 시스템에 입력 검증 및 필터링을 적용하여 악성 코드나 +비정상적인 데이터 입력을 차단하고 있는가? +• 사용자 피드백을 수집하는 과정에서 공격자가 피드백 시스템을 악용해 악의적인 데이터를 입력하 +거나 시스템에 해를 가할 수 있음 +※ 피드백 인젝션(Feedback Injection): 공격자가 악성 코드나 비정상적인 데이터를 식에 주입하여 시스템을 손 +상시킬 수 있음 +• Generative AI 서비스 제공 시 사용자 피드백 입력 검증 및 필터링의 중요성 +- 악성 데이터 차단: 입력 데이터에 대한 검증 및 필터링을 통해 악성 코드나 의도적으로 조작된 +데이터를 제거하여 시스템을 보호(예: 특수 문자를 제한하거나, 유효한 데이터 형식을 강제하 +여 악성 입력을 방지) +- 유해 콘텐츠 생성 방지: 입력 검증으로 사용자가 악의적으로 특정 결과를 유도하는 공격을 차 +단하여 모델이 안전하고 신뢰할 수 있는 콘텐츠만 생성하도록 보장 +• Predictive AI 서비스 제공 시 사용자 피드백 입력 검증 및 필터링의 중요성 +- 모델의 신뢰성 유지: 악의적 피드백 데이터가 모델 학습에 사용되지 않도록 필터링하여, 모델 +이 신뢰할 수 있는 데이터만 학습하게 함.(예: 비정상 데이터로 인해 발생할 수 있는 False +Positive 또는 False Negative 결과 방지) +- 보안 위협 차단: Predictive AI가 사이버 공격 탐지에 사용되는 경우, 입력 검증은 보안 위협 +탐지의 신뢰성을 높이고 잘못된 경보를 방지함.(예: 위조된 위협 데이터를 차단하여 모델이 오 +탐지하지 않도록 보장) + + +![이미지 114-0](images/p0114_img0.png) + + +![이미지 114-1](images/p0114_img1.png) + + +![이미지 114-2](images/p0114_img2.png) + + +![이미지 114-3](images/p0114_img3.png) + + +![이미지 114-4](images/p0114_img4.png) + + +![이미지 114-5](images/p0114_img5.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +105 + +#### 5.1.2 + +사용자 피드백을 자동으로 분석하기 전에 사전 검증 절차를 마련하여 +피드백 데이터의 무결성을 확인하고 있는가? +• 자동화된 데이터 정제를 통해 유효하지 않은 피드백을 걸러내고, 거짓 피드백을 탐지할 수 있는 +알고리즘을 도입 +※ 거짓 피드백: 악의적인 사용자가 부정확하거나 거짓된 피드백을 제공해 모델 성능에 부정적인 영향을 미칠 수 +있음 +• Generative AI 서비스 제공 시 사용자 피드백에 대한 사전 검증 절차의 중요성 +- 악성 데이터 차단: 입력된 피드백 데이터를 자동 분석 전에 검증하여 악성 코드, 유해 콘텐츠, +또는 비정상 데이터를 사전에 차단 가능 +- 모델 안전성 강화: 검증 절차를 통해 모델에 전달되는 데이터의 무결성을 확보하여, 예상치 못 +한 결과나 오작동을 방지 가능 +• Predictive AI 서비스 제공 시 사용자 피드백에 대한 사전 검증 절차의 중요성 +- 데이터 오염 방지: 피드백 데이터에 포함된 비정상적 데이터 또는 악의적 입력을 제거하여, 학 +습 데이터의 무결성을 유지(예: 이상치 탐지 및 데이터 유효성 검사를 통해 데이터 품질을 향상). +- 모델 안정성 및 보안 강화: 예측 모델이 학습하는 데이터가 항상 신뢰할 수 있는 상태임을 보 +장하여, 악의적인 의도로 인한 보안 사고를 방지 + +#### 5.1.3 + +최소 권한 원칙(Least Privilege)을 적용하여 사용자 피드백 및 개선 과정에서 +접근할 수 있는 권한을 최소화하고 있는가? +• 피드백을 반영하거나 성능을 개선하는 과정에서 접근 제어가 미흡하면, 내부 인력이나 외부 공격 +자가 시스템에 무단으로 접근하거나 데이터를 수정할 수 있음. 따라서 최소 권한 원칙(Least +Privilege)을 적용하여 피드백 및 개선 과정에서 접근할 수 있는 권한을 최소화함 +• Generative AI 서비스 제공 시 사용자 피드백 접근권한에 대한 최소 권한 원칙의 중요성 +- 데이터 유출 방지: 사용자 피드백 데이터에 접근할 수 있는 권한을 최소화함으로써, 데이터 유 +출이나 무단 사용을 방지. (예: 특정 역할(예: 데이터 분석가)에게만 피드백 데이터 접근 권한 +부여) +- 권한 오남용 방지: 권한이 불필요하게 확장되지 않도록 하여 내부 직원이나 시스템 관리자의 +악의적 행위(예: 데이터 삭제, 유출 등)를 방지 +• Predictive AI 서비스 제공 시 사용자 피드백 접근권한에 대한 최소 권한 원칙의 중요성 +- 데이터 무결성 유지: 피드백 데이터를 검증하고 처리할 수 있는 권한을 제한하여, 데이터 조작 +및 왜곡 방지 +- 보안 사고 영향 축소: 권한을 최소화함으로써, 보안 사고가 발생하더라도 피해 범위를 제한하 +고 민감 데이터 보호 +- 비즈니스 연속성 보장: 권한 남용으로 인해 예측 모델이 오작동하거나 의사결정에 영향을 미치 +는 문제를 방지하여 비즈니스 연속성을 유지 + + +![이미지 115-0](images/p0115_img0.png) + + +![이미지 115-1](images/p0115_img1.png) + + +![이미지 115-2](images/p0115_img2.png) + + +![이미지 115-3](images/p0115_img3.png) + + +![이미지 115-4](images/p0115_img4.png) + + +--- + + +#### 5.1.4 + +사용자 피드백 처리 및 개선 과정에서 이루어진 모든 접근 및 변경 사항을 감사 +로그로 기록하고, 정기적으로 검토하여 무단 접근을 탐지하고 있는가? +• 내부 인력이 과도한 권한을 통해 데이터나 모델을 무단으로 수정할 수 있는 위험이 있음 +• 피드백 처리 및 개선 과정에서 이루어진 모든 접근 및 변경 사항을 감사 로그로 기록하고, 정기적 +으로 검토하여 무단 접근을 탐지함 +• Generative AI 서비스 제공 시 감사 로그 관리의 중요성 +- 무단 접근 탐지: 모든 접근과 변경 사항을 감사 로그로 기록함으로써, 비정상적 접근 시도를 +탐지하고 대응할 수 있음.(예: 비인가 사용자가 피드백 데이터를 조회하거나 모델 학습 데이터 +에 접근하려는 시도) +- 모델 안전성 보장: 모델 개선 과정에서 이루어진 모든 변경 사항을 기록하여, 의도치 않은 변 +경이나 악의적인 조작을 사전에 방지(예: 잘못된 학습 데이터를 삽입한 사용자를 추적하여 수정) +- 책임성 확보 및 추적 가능성 강화: 피드백 데이터 처리 과정에서 발생한 문제를 정확히 파악하 +고, 이를 책임질 수 있도록 추적 가능성을 보장 +• Predictive AI 서비스 제공 시 감사 로그 관리의 중요성 +- 데이터 무결성 보장: 피드백 데이터에 대한 모든 변경 사항을 기록하고 검토함으로써 데이터 +무결성을 유지하고 조작 가능성을 제거(예: 피드백 데이터가 언제, 누구에 의해 변경되었는지 +를 정확히 기록) +- 모델 성능 추적 및 복구 지원: 변경 사항을 기록하면, 모델 성능 저하가 발생했을 때 문제의 +원인을 추적하고 복구하는 데 도움을 줄 수 있음.(예: 특정 피드백 데이터가 추가된 후 예측 정 +확도가 저하된 경우 해당 데이터를 식별하고 수정) +- 보안 사고 대응력 강화: 무단 접근이나 변경이 발견되었을 때, 감사 로그를 통해 책임자를 확 +인하고 필요한 보안 조치를 신속히 취할 수 있음. + + +![이미지 116-0](images/p0116_img0.png) + + +![이미지 116-1](images/p0116_img1.png) + + +![이미지 116-2](images/p0116_img2.png) + + +![이미지 116-3](images/p0116_img3.png) + + +![이미지 116-4](images/p0116_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +107 +파기 +6.1 +파기 시 보안 +AI 개발자, AI 서비스 제공자 공통사항 +• AI 모델이 더 이상 사용되지 않는 경우에 훈련된 데이터와 내부 알고리즘이 남아 있으면 해커나 +내부자의 접근을 통해 관련 내용들이 유출될 위험이 있음. 또한 폐기되지 않은 AI 모델이 남아 +있으면 의도치 않은 방식으로 다시 사용될 가능성이 있으므로, AI 서비스 제공자는 AI 모델 및 +관련 데이터에 대한 폐기 프로세스를 명확히 정의하고 운영해야 함 + +#### 6.1.1 + +모델 파기 시, 모델 파일을 완전히 삭제하고 복구할 수 없도록 처리하고 있는가? +• AI 시스템이 사용 중이던 데이터가 시스템을 폐기하거나 교체할 때 적절하게 삭제되지 않으면, +민감한 데이터가 남아 있을 수 있음. 데이터베이스, 로그 파일, 캐시 등에서 데이터가 완전히 삭 +제되지 않는 경우가 있음 +• 남아 있는 데이터가 유출되거나 악용될 위험이 있음. 특히 개인정보나 기밀 데이터가 포함된 경우 +심각한 데이터 유출 사고로 이어질 수 있음 +• Generative AI와 Predictive AI는 각각 고유한 특성과 데이터를 다루기 때문에, 모델 파기의 중 +요성은 서비스 유형에 따라 다르게 나타날 수 있음 +• Generative AI 서비스 제공 관점 +- 모델 특성과 데이터 보호 +▸훈련 데이터 재노출 방지: Generative AI는 종종 민감하거나 기밀 데이터로 학습되기도 함. +파기되지 않은 모델 파일이 유출되면, 모델의 메모리 현상(훈련 데이터의 직접 재생산)을 통 +해 원본 데이터가 노출될 위험이 있음 +▸출력물 유출 방지: 파기되지 않은 모델이 유출되면, 조직의 기밀 정보나 사용자의 요청 결과 +가 외부로 노출될 가능성이 있음 +• Predictive AI 서비스 제공 관점 +- 잘못된 예측 방지 +▸오래된 모델의 재사용 방지: Predictive AI 모델은 시간이 지남에 따라 데이터의 특성이 변 +화하거나 정확성이 떨어질 수 있음. 완전히 파기하지 않은 모델이 복구되어 사용되면, 비즈니 +스 의사결정에 부정확한 예측 결과를 제공할 수 있음 +▸모델 관리 투명성 확보: 파기되지 않은 모델이 비인가된 방식으로 재사용되면, 서비스 품질에 +악영향을 미치고 사용자 신뢰를 저하시킬 수 있음 +- 비즈니스 및 보안 리스크 관리 +▸경쟁사 악용 방지: Predictive AI 모델 파일이 유출되면, 경쟁사가 이를 역공학하여 예측 로 +직이나 데이터를 추출해 경쟁 우위를 확보할 수 있음 +▸보안 위협 완화: 미완전한 파기로 인해 모델이 복구 가능한 상태로 남아 있으면, 사이버 공격 +의 대상이 될 가능성이 높아질 수 있음 + + +![이미지 117-0](images/p0117_img0.png) + + +![이미지 117-1](images/p0117_img1.png) + + +![이미지 117-2](images/p0117_img2.png) + + +![이미지 117-3](images/p0117_img3.png) + + +![이미지 117-4](images/p0117_img4.png) + + +![이미지 117-5](images/p0117_img5.png) + + +--- + + +#### 6.1.2 + +시스템을 폐기하거나 교체할 때 AI 모델에서 사용 중이던 관련 파일 및 +데이터를 삭제하고 있는가? +• AI 모델이 퇴역하거나 교체될 때 모델 파일 및 관련 데이터를 완전히 삭제하고 복구할 수 없도록 +처리해야 함 +• Generative AI와 Predictive AI는 데이터 처리 방식과 활용 목적이 다르기 때문에, 시스템 폐기 +또는 교체 시 파일 및 데이터 삭제의 중요성을 각각 구분하여 설명할 수 있음 +• Generative AI 서비스 제공 관점 +- 민감한 데이터 및 훈련 데이터 보호 +▸데이터 재노출 위험: Generative AI는 대규모 텍스트, 이미지, 음성 데이터를 학습함. 폐기 +된 시스템에 훈련 데이터가 남아 있으면 기밀 데이터가 복구되어 외부로 노출될 위험이 있음 +▸메모리 현상 방지: Generative AI 모델은 훈련 중 학습한 민감한 정보를 출력할 가능성이 +있음. 사용 중이던 데이터를 완전히 삭제하지 않으면, 이후 악의적으로 사용되어 민감한 정보 +가 재노출될 수 있음 +- 생성 모델의 악용 방지 +▸유해 콘텐츠 생성: 시스템 폐기 후 남겨진 Generative AI 모델 파일이 제3자에 의해 복구되 +거나 유출되면, 유해 콘텐츠를 생성하는 데 악용될 수 있음 +▸기술 오용 방지: 생성 모델의 알고리즘이나 구조가 남아 있다면, 이를 분석하여 경쟁사나 공 +격자가 악의적으로 사용할 수 있음 +• Predictive AI 서비스 제공 관점 +- 민감한 예측 데이터 보호 +▸데이터 역추적 방지: Predictive AI의 예측 결과를 기반으로 중요한 패턴이나 개인 데이터를 +역추적할 가능성이 있으므로, 관련 파일을 완전히 삭제해야 함 +- 기밀 데이터 보호 +▸모델 및 알고리즘 보호: Predictive AI 모델은 기업의 분석 및 예측 역량을 강화하는 핵심 +기술임. 폐기된 시스템에서 이러한 기술이 유출되면, 경쟁사나 제3자에 의해 활용될 수 있음 +▸비즈니스 데이터 보호: Predictive AI가 분석한 데이터는 기업의 전략적 자산으로, 삭제되지 +않으면 비즈니스 기밀이 노출될 가능성이 있음 + + +![이미지 118-0](images/p0118_img0.png) + + +![이미지 118-1](images/p0118_img1.png) + + +![이미지 118-2](images/p0118_img2.png) + + +![이미지 118-3](images/p0118_img3.png) + + +![이미지 118-4](images/p0118_img4.png) + + +--- + +## 제3 장 +AI 서비스 제공자를 위한 보안 안내서 +109 + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 +인터페이스를 비활성화하여 외부 접근을 차단하고 있는가? +• AI 모델이 더 이상 사용되지 않으면 해당 모델과 연결된 API나 인터페이스를 비활성화하여 외부 +접근을 차단해야 함 +• Generative AI와 Predictive AI 서비스는 모델 활용 방식과 데이터 처리 목적이 다르기 때문에, +API나 인터페이스를 비활성화하는 중요성은 서비스 관점에 따라 구분될 수 있음 +• Generative AI 서비스 제공 관점 +- 리소스 오용 방지 +▸비용 낭비 예방: 사용하지 않는 모델에 대한 API 호출이 남아 있으면, 서버 자원이 불필요하 +게 소모되어 비용이 증가할 수 있음 +▸성능 저하 방지: 외부에서의 무분별한 접근은 다른 활성 모델이나 서비스에 영향을 미쳐 전 +체 시스템의 성능을 저하시킬 수 있음 +- 보안 위협 차단 +▸사이버 공격 방지: 비활성화되지 않은 API는 공격자가 모델의 취약점을 분석하거나 악용할 +수 있는 경로가 됨. 이를 통해 서비스 중단, 데이터 탈취 등 보안 사고로 이어질 수 있음 +▸비인가 접근 방지: 모델이 더 이상 관리되지 않음에도 외부 접근이 가능하면, 무단으로 모델 +을 호출하거나 데이터를 악용할 수 있음 +• Predictive AI 서비스 제공 관점 +- 비즈니스 리스크 관리 +▸예측 서비스 악용 방지: 비활성화되지 않은 API가 경쟁자 또는 악의적인 사용자에 의해 호출 +되면, 기업의 분석 및 예측 역량이 노출될 수 있음 +▸불필요한 운영 부담 감소: 사용되지 않는 Predictive AI 모델의 API 호출은 운영 비용을 증 +가시키고, 현재 운영 중인 모델 및 시스템의 자원을 소모할 수 있음 +- 보안 위협 차단 +▸모델 공격 방지: Predictive AI 모델의 API는 입력 패턴을 분석해 모델을 왜곡하거나, 예측 +알고리즘에 영향을 미치는 공격의 대상이 될 수 있음 +▸시스템 무결성 보장: 사용하지 않는 API를 통해 외부 접근이 가능하면, 내부 시스템에 대한 +부정적인 영향을 초래할 수 있음. 이를 비활성화함으로써 시스템 무결성을 유지할 수 있음 + + +![이미지 119-0](images/p0119_img0.png) + + +![이미지 119-1](images/p0119_img1.png) + + +![이미지 119-2](images/p0119_img2.png) + + +![이미지 119-3](images/p0119_img3.png) + + +![이미지 119-4](images/p0119_img4.png) + + +--- + + + +--- + +AI 이용자를 위한 +보안 수칙 + + +![이미지 121-0](images/p0121_img0.png) + + +--- + +개요 +「이용자 수칙」 개발 필요성 +●AI 서비스가 안전하게 설계되었더라도, 이용자가 부주의하게 행동하면 보안 사고가 발생할 수 있 +다. 예를 들어, 민감한 정보를 AI 시스템에 입력하거나, 자신도 모르게 악성 AI 응용 프로그램을 +실행할 경우 위험이 커질 수 있다. 해커들은 주로 이용자를 대상으로 한 사회공학적 기법(예: 피싱, +사기)을 활용하기 때문에, AI 이용자 대상 보안수칙은 이용자가 이러한 위험을 인식하고 대응하도 +록 하는 것이 반드시 필요하다. +●이에, 본 안내서의 「이용자 수칙」에서는 윤리적인 원칙 선언에 그치지 않고 AI 서비스 접속・이용단 +계에서 이용자가 지켜야 할 구체적인 보안 행동 지침을 제공하고자 한다. 이용자는 AI 서비스에 입 +력하는 데이터가 저장되거나 악용될 가능성을 이해하지 못할 수 있다. 보안수칙에는 어떤 데이터를 +입력해야 안전한지, 어떤 데이터는 공유하면 안 되는지에 대한 명확한 가이드를 제공하고자 하였 +다. 또한 이용자가 AI를 통해 허위 정보, AI 악용 콘텐츠, 악성 코드 등을 생성하지 않도록 가이드 +라인을 제공하고자 하였다. +「이용자 수칙」 도출 과정 및 참고자료 +●2024년 6월부터 구성・운영된 「AI 보안 정책 포럼」을 비롯해서 다양한 전문가 의견수렴 과정을 거 +쳤다. 초안 작성 후 한국인터넷진흥원(KISA)과의 협의 과정에서 몇 차례 수정작업을 거쳐 최종본이 마련되었다. +●미국, 유럽, 일본 등 해외 자료를 참고하였고, 국내자료로는 국가정보원의 「챗GPT 등 생성형 AI +활용 보안 가이드라인」 등을 참고하였다. +활용 방안 +●AI 서비스로 인한 피해를 사전에 예방하기 위해 AI 서비스 접속부터 이용단계까지 이용자가 지켜야 +할 구체적인 행동 지침으로 기능할 것으로 기대한다. 또한 새로운 기술 개발이나 공격 유형이 나타날 +때마다 관련 내용을 업데이트하여, 이용자 대상 교육 및 홍보 자료로도 활용 가능 할 것으로 기대 +된다. + + +![이미지 122-0](images/p0122_img0.png) + + +![이미지 122-1](images/p0122_img1.png) + + +![이미지 122-2](images/p0122_img2.png) + + +![이미지 122-3](images/p0122_img3.png) + + +![이미지 122-4](images/p0122_img4.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +113 +AI 이용자에게 발생할 수 있는 보안위협 사례 +본 시나리오들은 AI 서비스의 다양한 활용 사례에서 발생할 수 있는 해킹, 데이터 유출, 컨텐츠 악용 피해 +등의 사례이다. +●AI 챗봇에서 중요정보 유출 +- 이용자가 입력한 이름, 주소, 금융 정보 등이 AI 챗봇 로그에 저장되고, 해커가 이를 탈취하거나, +챗봇 시스템의 취약점으로 인해 개인의 중요정보가 유출될 수 있다. +- (사례) 챗봇이 사용자와의 대화 중에 실제 이용자들의 이름, 주소, 은행 계좌번호 등 민감한 정보 +를 무작위로 노출하는 사례가 발생하였다. 이는 챗봇의 학습 데이터에 포함된 중요정보가 제대로 +비식별화되지 않고 사용되었기 때문으로 추정된다. +●AI 기반 음성 비서 도청 +- 스마트 AI 스피커가 음성 명령을 기다리는 동안 대화 내용을 녹음하고 이를 외부로 전송하거나 +악용할 수 있다. +- (사례 1) 아마존 에코(Amazon Echo) 사고 +▸2018년, 미국 오리건주 포틀랜드에 거주하는 한 부부의 사적 대화가 아마존의 AI 스피커 '에 +코'에 의해 녹음되어, 부부의 지인에게 전송되는 사건이 발생하였다. AI가 특정 단어를 호출어 +(wake word)로 오인하여 활성화되었고, 이후 대화를 '메시지 전송' 명령으로 잘못 인식하여 +발생한 사례이다. +- (사례 2) 구글 어시스턴트(Google Assistant) 사고 +▸2019년, 구글의 AI 음성비서 '구글 어시스턴트'에 녹음된 사용자들의 대화 1,000건 이상이 외부로 +유출되는 사건이 발생하였다. 구글은 협력사 직원 중 한 명이 데이터 보안 정책을 위반하여 음성 데 +이터를 유출한 것으로 파악하였다. +●AI 챗봇의 악성 링크 배포 +- 해커가 AI 챗봇의 응답을 조작해 사용자에게 악성 코드가 포함된 링크를 배포한다. +- (사례 1) 해커들이 챗GPT와 같은 AI 챗봇을 활용하여 악성 코드를 생성하는 사례가 발견되었 +다. 이스라엘 보안 회사 체크포인트는 챗GPT를 사용해 강력한 해킹 도구를 구축하고, 젊은 여성 +을 사칭해 목표물을 함정에 빠뜨리도록 설계된 새로운 챗봇을 만드는 등의 사이버 범죄 사례를 +보고한 바 있다. +- (사례 2) 피싱 이메일 작성: 챗GPT를 이용해 설득력 있는 피싱 이메일을 생성하는 사례도 증가 +하고 있다. 전문 지식 없이도 챗GPT를 통해 고도로 표적화된 사기 및 피싱 캠페인을 시작하는 + + +![이미지 123-0](images/p0123_img0.png) + + +![이미지 123-1](images/p0123_img1.png) + + +![이미지 123-2](images/p0123_img2.png) + + +![이미지 123-3](images/p0123_img3.png) + + +![이미지 123-4](images/p0123_img4.png) + + +--- + +봇 및 사이트를 구축할 수 있기 때문에 이용자들은 더욱 더 조심하고 보안 수칙에 관심을 가져 +야 한다. +●AI 얼굴 인식 시스템의 해킹 +- 공격자가 얼굴 인식 AI 시스템을 해킹해 다른 사용자의 권한으로 불법 접근하거나 출입을 허용 +할 수 있다. +- (사례) 중국에서는 얼굴 인식 기술이 휴대전화 잠금 해제, 아파트 출입, 고속철 탑승 등 다양한 +분야에 활용되고 있다. 그러나 최근 얼굴 정보를 도용하여 금융 기관에 부정 접근하거나, 딥페이 +크 기술을 이용해 범죄에 악용하는 사례가 늘어나고 있다. 예를 들어, 특정 지역에서는 얼굴 정 +보를 훔쳐 판매하려던 용의자가 체포되었으며, 이를 통해 금융 기관에 로그인하여 자금을 탈취한 +사건도 발생하였다. +- 생체 인식 정보는 유출될 경우 위・변조 등의 위험이 있으며, 한 번 유출되면 변경이 불가능하다 +는 특성 때문에 심각한 피해를 초래할 수 있다. 따라서 이용자들은 생체 정보를 제공할 때는 해 +당 AI 서비스 제공자를 더욱 더 의심하고 확인해야 한다. +●AI 서비스의 딥페이크 영상 유포 +- 공격자가 AI 기반 딥페이크 기술을 사용해 특정 사용자의 영상을 조작해 명예를 실추시키거나 +사기 범죄에 활용한 사례가 있다. +- 딥페이크를 통한 성범죄 및 명예훼손 +▸(사례 1) 지인 능욕 영상 제작 및 유포: 딥페이크 기술을 이용해 특정 인물의 얼굴을 성적 영 +상에 합성하는 '지인 능욕' 범죄가 발생하고 있다. 이는 피해자의 사생활 침해와 명예 훼손을 +초래하며, 심각한 사회적 문제로 대두되고 있다. +▸(사례 2) 청소년 대상 딥페이크 범죄: 최근 10대 청소년들을 중심으로 딥페이크 성범죄가 확 +산되고 있으며, 피해 학교 명단이 SNS에 떠도는 등 사회적 불안이 커지고 있다. +- 딥페이크를 이용한 사기 범죄 +▸(사례 1) 보이스피싱 및 금융 사기: 딥페이크 기술을 통해 특정 인물의 목소리나 얼굴을 합성 +하여 보이스피싱, 금융 사기 등 범죄에 악용되는 사례가 보고되고 있다. 예를 들어, CEO의 +목소리를 모방하여 회사 재무 담당자에게 자금을 이체하도록 지시하는 등의 방식으로 실제 피 +해 사례가 발생하였다. +▸(사례 2) 동남아시아에서의 AI・딥페이크 활용 사기: 동남아시아 지역에서는 범죄 조직이 AI와 +딥페이크 기술을 활용한 사이버 사기를 벌여 막대한 피해를 초래한 사고가 보고되었다. 유엔 +마약범죄사무소(UNODC)는 이러한 기술이 사칭 범죄, 딥페이크 포르노, 사이버 사기 등에 악 +용되고 있다고 지적하였다. + + +![이미지 124-0](images/p0124_img0.png) + + +![이미지 124-1](images/p0124_img1.png) + + +![이미지 124-2](images/p0124_img2.png) + + +![이미지 124-3](images/p0124_img3.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +115 +- 따라서 이용자들은 AI 서비스 접속 및 이용 시 각별히 주의해야 하고, 컨텐츠 악용에 대한 피해 +를 예방하기 위해 함께 노력해야 한다. +●AI를 악용한 사이버 테러 등 +- ChatGPT 등 생성형 AI를 악용하여 악성코드를 생성하거나, 프로그램을 손상시키는 등 사이버 +공격에 필요한 정보를 획득하거나 실제 테러를 위한 준비를 할 수 있다. +▸(사례 1) 마이크로소프트(MS)의 분석에 따르면, 중국, 러시아, 북한 등은 ChatGPT를 악의적 +인 사이버 활동에 활용하고 있으며, 특히 북한에서는 암호화폐 탈취 등을 위해 적극적으로 생 +성형 AI를 이용하고 있다고 발표하였다. +▸(사례 2) ’25년 1월 1일 미국 라스베이거스 트럼프호텔 정문에서 발생한 테슬라의 ‘사이버트 +럭’ 폭발 사건의 용의자가 ChatGPT 등 생성형 AI를 활용하였다고 경찰 당국이 발표하였으며, +ChatGPT를 통해 폭발물의 목표, 특정 탄약의 이동 속도 등을 검색하고 정보를 수집하였다고 +밝혔다. + + +![이미지 125-0](images/p0125_img0.png) + + +![이미지 125-1](images/p0125_img1.png) + + +![이미지 125-2](images/p0125_img2.png) + + +![이미지 125-3](images/p0125_img3.png) + + +--- + + + +![이미지 126-0](images/p0126_img0.png) + + +![이미지 126-1](images/p0126_img1.png) + + +![이미지 126-2](images/p0126_img2.png) + + +![이미지 126-3](images/p0126_img3.png) + + +![이미지 126-4](images/p0126_img4.png) + + +![이미지 126-5](images/p0126_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +117 +AI 서비스 이용자를 위한 보안 수칙 +AI 서비스 접속 + +## 1. 공식 사이트에서만 다운로드 + +서비스 접근・가입 시, 공식 사이트를 통해 가입 및 프로그램 다운로드 확인하기 +공식 사이트나 검증된 웹 스토어를 이용해야 하는 이유 +●공식 사이트나 검증된 앱 스토어에서 제공하는 소프트웨어는 일반적으로 보안 검토를 거치기 때문 +에 악성 소프트웨어나 바이러스의 위험이 낮다. +●공인된 출처에서 제공하는 AI 도구는 일반적으로 신뢰할 수 있는 개발자나 기업에 의해 만들어졌 +기 때문에 안정성과 성능이 보장된다. +●공식 경로를 통해 다운로드하면 소프트웨어가 정품임을 확인할 수 있으며, 이를 통해 사용 중 발생 +할 수 있는 법적 문제를 피할 수 있다. +●공식 사이트에서 다운로드한 소프트웨어는 정기적으로 업데이트가 제공되며, 문제가 발생했을 때 +고객 지원을 받을 수 있는 가능성이 높다. +●공식 플랫폼에서는 다른 사용자들의 리뷰와 평가를 통해 소프트웨어의 품질과 성능을 확인할 수 +있어, 선택하는 데 도움이 된다. +이용자 주의 사항 +●사이트 접속 전에 해당 서비스의 공식 사이트인지 여부를 확인한다. +●피싱 공격 및 거짓 사이트 방지를 위해 해당 사이트의 SSL 인증서 유무를 확인한다. +●사용하지 않는 불필요한 AI 애플리케이션이나 확장 프로그램은 설치하지 않으며, 설치할 경우 신뢰 +할 수 있는 출처인지 확인한다. +●AI 서비스가 다른 서비스 또는 프로그램에 연계・확장되거나 정보가 공유되는 경우, 관련 연계 프 +로그램 등의 보안 취약여부 등 보안성과 안전성을 확인한다. + + +![이미지 127-0](images/p0127_img0.png) + + +![이미지 127-1](images/p0127_img1.png) + + +![이미지 127-2](images/p0127_img2.png) + + +![이미지 127-3](images/p0127_img3.png) + + +![이미지 127-4](images/p0127_img4.png) + + +![이미지 127-5](images/p0127_img5.png) + + +![이미지 127-6](images/p0127_img6.png) + + +--- + +보안 위협 +●AI 서비스 이용자에게 발생할 수 있는 보안 위협으로 가짜 사이트(Phishing 사이트 또는 Fake +Website)를 통한 정보 탈취도 있다. +●피싱 사이트는 대개 합법적인 AI 서비스 웹사이트와 매우 유사하게 만들어지며, 이용자들은 이러한 +가짜 웹사이트에 자신의 로그인 정보나 신용카드 정보 등을 입력하게 된다. +표 3-1 +피싱 사이트 유형 +도메인 스푸핑 +피싱 사이트는 합법적인 사이트의 도메인 이름과 매우 유사한 이름을 사용하여 사용자를 속 +임. (예) “ai-service.com” 대신 “ai-serv1ce.com”과 같이 오타를 이용한 도메인이 사용될 +수 있음 +합법적인 사이트 +모방 +사이트의 디자인, 로고, 사용자 인터페이스(UI)를 합법적인 사이트와 거의 동일하게 만들어, +이용자가 의심 없이 개인 정보를 입력하도록 유도함 +이메일 피싱 +이메일로 사용자를 유인하여 가짜 웹사이트로 이동하도록 만듬. 이메일에는 긴급한 메시지나 +계정 문제가 있다는 내용으로 사용자의 주의를 끌어 가짜 사이트 링크를 클릭하도록 유도함 +●웹사이트 클론 공격(Website Cloning Attack)은 공격자가 AI 서비스의 웹사이트를 정확하게 복 +제한 가짜 사이트를 만들어 이용자를 속이는 방법이다. 이 공격은 합법적인 AI 서비스와 매우 유사하 +게 만들어져 있으며, 이용자에게 신뢰를 심어주어 민감한 정보를 탈취할 목적으로 사용될 수 있다. +완전한 사이트 +복제 +합법적인 웹사이트의 HTML, CSS, 이미지 파일 등을 그대로 복제하여 실제 사이트처럼 보이 +게 만듬 +로그인 정보 +탈취 +사용자가 로그인 정보나 결제 정보를 입력하면, 이 데이터가 공격자의 서버로 전송됨 +●스피어 피싱(Spear Phishing)은 특정한 개인이나 조직을 목표로 하는 정교한 피싱 공격이다. 공격 +자는 특정 AI 서비스 이용자에 대한 세부 정보를 수집하고, 이 정보를 기반으로 더 신뢰할 수 있게 +보이는 개인화된 가짜 웹사이트를 만들어 공격을 시도한다. +개인화된 공격 +일반적인 피싱보다 더 구체적이고 개인화된 정보를 사용하여 신뢰를 높이고, 사용자가 가짜 +웹사이트에 더 쉽게 속도록 만듬 +조직 대상 +AI 서비스를 사용하는 기업이나 단체를 대상으로 하여, 그들의 조직 내 계정이나 시스템에 접 +근하기 위한 수단으로 스피어 피싱이 사용될 수 있음 +●타이포스쿼팅(Typosquatting)은 이용자가 URL을 잘못 입력할 가능성을 악용하여 비슷한 도메인 +을 등록하는 방식으로, 이용자가 유사한 도메인 이름의 가짜 사이트에 접속하도록 유도한다. 이 공 +격은 이용자가 AI 서비스 웹사이트를 방문할 때 오타를 내거나 실수로 다른 사이트에 접속할 때 +주로 발생한다. + + +![이미지 128-0](images/p0128_img0.png) + + +![이미지 128-1](images/p0128_img1.png) + + +![이미지 128-2](images/p0128_img2.png) + + +![이미지 128-3](images/p0128_img3.png) + + +![이미지 128-4](images/p0128_img4.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +119 +가짜 사이트로 +리디렉션 +사용자가 잘못된 도메인에 접속하면, 가짜 로그인 페이지나 정보 탈취 페이지로 리디렉션됨 + +## 2. 안전한 비밀번호 설정 및 주기적 변경 + +특수문자를 포함한 강력한 비밀번호로 설정하고, 주기적(3개월)으로 변경하기 +계정에 대한 보안을 강화해야 하는 이유 +●비밀번호는 사용자의 계정을 보호하는 첫 번째 방어선으로, 안전하지 않은 비밀번호를 사용하거나 +주기적으로 변경하지 않으면, 해커가 계정에 접근할 위험이 커진다. +●계정이 해킹되면 개인정보, 결제 정보, 민감한 데이터 등이 유출될 수 있다. +●해커는 종종 무작위 대입 공격(브루트포스)이나 사전 공격을 통해 비밀번호를 알아내려고 시도한 +다. 강력하고 안전한 비밀번호는 이러한 공격을 방지하는 데 효과적이다. +●AI 서비스는 사용자의 행동 패턴, 검색 기록, 대화 내용 등 민감한 데이터를 포함할 가능성이 크 +다. 비밀번호가 안전하지 않으면 이러한 데이터를 악의적으로 이용당할 위험이 있다. +●계정이 공격받으면 해당 서비스의 악용이나 변조가 가능해져 잘못된 정보가 생성되거나 사용될 위 +험이 있다. +●계정 보안이 강화되면 해킹이나 피싱 공격으로 인한 피해를 줄일 수 있고, 강력한 비밀번호나 이중 +인증을 사용하면 공격자가 계정을 접근하기 어려워진다. +이용자 주의 사항 +●AI 계정 및 관련 서비스에 접근할 때에는 유추하기 어려운 강력한 비밀번호(충분한 길이 및 대소문 +자, 숫자, 특수 문자 혼합)를 설정해야 하고, 사이트 마다 서로 다른 비밀번호를 사용해야 한다. +●비밀번호는 정기적으로 변경하고, 한번 사용한 비밀번호는 재사용하지 않아야 한다. +보안 위협 +●AI 서비스 이용 시 비밀번호 유추 공격(Password Guessing Attack)은 해커가 사용자의 비밀번 +호를 추측하여 계정에 무단으로 접근하려는 공격 기법이다. 이 공격은 여러 가지 방식으로 이루어 +질 수 있으며, 다음과 같은 유형이 있다. +●무작위 대입 공격(Brute Force Attack)은 해커가 가능한 모든 조합의 비밀번호를 하나씩 대입하 +여 맞출 때까지 시도하는 방식이다. 단순한 비밀번호나 짧은 비밀번호일수록 성공 가능성이 높다. +자동화된 프로그램을 사용하여 빠르게 많은 조합을 시도하기 때문에, 복잡한 비밀번호가 아니면 쉽 + + +![이미지 129-0](images/p0129_img0.png) + + +![이미지 129-1](images/p0129_img1.png) + + +![이미지 129-2](images/p0129_img2.png) + + +![이미지 129-3](images/p0129_img3.png) + + +![이미지 129-4](images/p0129_img4.png) + + +![이미지 129-5](images/p0129_img5.png) + + +--- + +게 뚫릴 수 있다. +●사전 공격(Dictionary Attack)은 일반적으로 사람들이 사용하는 단어나 구문(예: “password123”, +“qwerty”, “123456”)을 사전에 미리 만들어 놓고, 이를 기반으로 비밀번호를 추측하는 방식이다. +사전에는 흔히 사용되는 비밀번호 목록이 포함되며, 사용자가 단순하거나 예측 가능한 비밀번호를 +설정했을 경우 쉽게 뚫릴 수 있다. +●크리덴셜 스터핑(Credential Stuffing)은 다른 웹사이트나 서비스에서 유출된 사용자 계정 정보 +(아이디와 비밀번호)를 사용하여 AI 서비스 계정에 접근하는 방식이다. 사용자가 여러 서비스에서 +동일한 비밀번호를 사용할 경우 성공률이 높아진다. +●사회 공학적 접근(Social Engineering)은 해커가 사용자의 개인정보(예: 생일, 이름, 애완동물 이 +름 등)를 조사한 후, 이를 비밀번호로 사용하는지 추측하는 방식이다. 사용자가 개인적인 정보를 +비밀번호로 설정했을 경우 쉽게 유추될 수 있다. +●스프레이 공격(Password Spraying)은 흔히 사용되는 비밀번호를 다수의 사용자 계정에 동시에 +대입하여 공격하는 방식이다. 특정 계정을 집중적으로 시도하지 않기 때문에 계정 잠금 같은 방어 +메커니즘을 피할 수 있다. + +## 3. 공개된 장소에서 이용 금지 + +카페 등 공공장소 및 공개된 네트워크에서 서비스 이용, 정보 입력 등 금지 +보안이 취약한 장소에서 이용을 자제해야 하는 이유 +●공공 Wi-Fi나 보안이 설정되지 않은 네트워크를 사용하는 경우, 해커가 네트워크를 감청하여 사용 +자의 로그인 정보(아이디, 비밀번호)나 데이터를 탈취할 수 있다. +●공공 장소에서 AI 서비스에 접속하면 화면이나 입력 내용을 어깨 너머로 엿보는 것(Shoulder +Surfing)이 가능하다. 특히, 비밀번호나 민감한 데이터를 입력할 때 주변 사람이 이를 볼 수 있어 +정보가 노출될 위험이 있다. +●보안이 취약한 장소에서는 사용 중인 디바이스(스마트폰, 태블릿, 노트북 등)가 도난당하거나 분실 +될 가능성이 높다. 디바이스가 물리적으로 탈취되면 저장된 로그인 정보, 쿠키, 인증 토큰 등이 악 +용될 수 있다. +●공공 네트워크를 통해 악성 코드나 바이러스가 디바이스에 침투할 수 있다. 해커는 AI 서비스 계정 +을 포함한 사용자의 디지털 자산에 접근하기 위해 키로깅(Keylogging)이나 랜섬웨어를 설치할 가 +능성이 있다. + + +![이미지 130-0](images/p0130_img0.png) + + +![이미지 130-1](images/p0130_img1.png) + + +![이미지 130-2](images/p0130_img2.png) + + +![이미지 130-3](images/p0130_img3.png) + + +![이미지 130-4](images/p0130_img4.png) + + +![이미지 130-5](images/p0130_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +121 +●해커가 가짜 공공 Wi-Fi를 만들어 사용자가 연결하도록 유도할 수도 있다. 사용자가 가짜 네트워 +크에 접속하면, 해커가 모든 통신 내용을 감시하거나 데이터를 가로챌 수 있다. +●AI 서비스 사용 중 대화 내용이나 데이터 업로드 시, 서비스에 업로드되는 정보가 외부로 유출될 +위험이 있다. 이러한 정보는 개인정보, 업무 기밀, 또는 기타 민감한 자료일 수 있다. +●보안이 취약한 환경에서는 실시간으로 발생하는 보안 위협을 감지하거나 대응하기 어렵다. 보안 소 +프트웨어가 제대로 작동하지 않거나 업데이트되지 않은 경우, 위협에 더욱 취약해질 수 있다. +이용자 주의 사항 +●공공 Wi-Fi는 보안이 취약할 수 있으므로, 가상 사설망(VPN)을 사용해 데이터 전송을 암호화하는 +것이 좋다. +●로그인 정보나 금융 정보와 같은 민감한 데이터를 입력하는 것은 피하는 것이 안전하다. +●웹사이트 주소가 HTTPS로 시작하는지 확인한다. 이는 데이터가 암호화되어 전송된다는 것을 의미한다. +●사용하지 않는 네트워크 기능(예: 파일 공유, 프린터 공유 등)을 비활성화하여 보안을 강화할 수 있다. +●사용이 끝난 후 서비스에서 로그아웃하고, 브라우저의 캐시를 삭제하는 것이 좋다. +●공공 Wi-Fi 사용 시 비밀번호를 입력할 때는 주변 사람들에게 보이지 않도록 주의한다. +●인터넷 연결 시 네트워크 방화벽을 활성화하고, 최신 안티바이러스 소프트웨어를 사용하여 보안을 +강화한다. +보안 위협 +●맨-인-더-미들 공격(Man-in-the-Middle Attack, MITM)은 공격자가 이용자와 AI 서비스 간의 +통신을 가로채어 데이터를 탈취하는 방법이다. 가짜 사이트를 사용해 사용자의 세션을 중간에서 가 +로챌 수도 있으며, 공격자는 사용자가 입력하는 모든 정보를 실시간으로 탈취할 수 있다. +중간에서 트래픽 +탈취 +공격자는 합법적인 사이트와 사용자의 통신을 가로채거나 리디렉션하여 민감한 데이터를 +탈취함 +네트워크 스니핑 +공공 Wi-Fi나 보호되지 않은 네트워크에서 발생하기 쉬운 공격임 +●가짜 네트워크(Fake Networks) 공격은 공격자가 허위 네트워크를 통해 이용자를 속이고, 이용자 +가 주고받는 데이터를 탈취하는 공격이다. 이러한 공격은 공공 Wi-Fi에서 자주 발생하며, 중간자 +공격(MITM)으로 확장될 수 있다. +데이터 탈취 +공격자는 사용자가 AI 서비스에 로그인할 때 주고받는 로그인 정보나 기타 민감한 데이터를 +가로챌 수 있음 +서비스 교란 +공격자가 데이터를 변조하거나 중간에서 통신을 방해하여 AI 서비스의 결과를 왜곡시킬 수 있음 + + +![이미지 131-0](images/p0131_img0.png) + + +![이미지 131-1](images/p0131_img1.png) + + +![이미지 131-2](images/p0131_img2.png) + + +![이미지 131-3](images/p0131_img3.png) + + +![이미지 131-4](images/p0131_img4.png) + + +--- + + +## 4. 법률 및 이용약관 확인 + +서비스 관련 법률, 이용약관에서 정하는 금지행위, 이용자 권리 등 확인하기 +이용약관을 확인해야 하는 이유 +●이용약관은 사용자와 서비스 제공자 간의 권리와 의무를 명확히 하므로, 이를 이해하지 않으면 발 +생할 수 있는 문제를 예방하기 어렵다. +●AI 서비스는 종종 사용자 데이터를 수집하므로, 이용약관에서 데이터 수집, 저장 및 사용 방식에 +대한 정보를 확인해야 한다. +●서비스 제공자의 책임이 명시되어 있는 경우, 서비스 이용 중 문제가 발생했을 때 그에 대한 법적 +책임을 파악할 수 있다. +●서비스가 종료되거나 변경될 경우의 조건과 절차에 대해 미리 알아두면, 갑작스러운 변화에 대비할 +수 있다. +●특정 산업이나 지역에서는 이용약관이 법적 요구사항을 포함하고 있을 수 있으므로, 이를 확인하여 +규정을 준수할 수 있다. +●문제가 발생했을 때의 분쟁 해결 절차나 관할 법원에 대한 정보가 포함되어 있어 상황에 따라 적절 +한 대응을 할 수 있다. +이용자 주의 사항 +●허용된 사용 범위: 서비스가 어떤 용도로 제공되는지, 비즈니스, 연구, 교육, 개인 용도 등 특정 목 +적으로 제한되어 있는지 확인한다. +●금지된 행위: 서비스가 금지하는 활동(예: 불법적인 목적, 악의적 콘텐츠 생성, 스팸 등)을 반드시 +숙지한다. +●데이터 수집: 서비스가 어떤 데이터를 수집하고, 이를 어떻게 사용하며, 어디에 저장하는지 확인한다. +●데이터 소유권: 사용자가 업로드한 데이터와 AI가 생성한 결과물의 소유권이 누구에게 있는지 주 +의 깊게 살펴본다. +●데이터 삭제: 사용자가 데이터를 삭제하거나 계정을 해지한 경우, 데이터가 어떻게 처리되는지 확 +인한다. +●AI가 생성한 콘텐츠로 인해 발생한 문제(오류, 부정확한 정보, 윤리적 문제 등)에 대한 책임이 누구 +로 명시되어 있는지 확인한다. +●생성 콘텐츠의 책임: AI가 생성한 결과물을 사용하는 데 있어 저작권, 윤리적 문제, 법적 문제를 +방지하기 위한 이용자의 책임이 명시되어 있는지 확인한다. + + +![이미지 132-0](images/p0132_img0.png) + + +![이미지 132-1](images/p0132_img1.png) + + +![이미지 132-2](images/p0132_img2.png) + + +![이미지 132-3](images/p0132_img3.png) + + +![이미지 132-4](images/p0132_img4.png) + + +![이미지 132-5](images/p0132_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +123 +●서비스 제공자가 약관이나 정책을 변경할 경우, 사용자에게 통지하는 방법과 변경 사항에 동의하지 +않을 경우의 대응 방안을 확인한다. +보안 위협 +●보안 책임의 불명확성: 이용약관을 확인하지 않으면 보안 사고 발생 시 책임이 사용자에게 귀속될 +가능성을 인지하지 못할 수 있다.(예시: 이용약관에 “사용자가 입력한 데이터의 보안 책임은 사용 +자에게 있다“고 명시되어 있으나 이를 인지하지 못하고 데이터를 입력하여 유출 사고가 발생) +●서비스 제공 중단 위험: 이용약관에 명시된 서비스 제공 중단 또는 데이터 삭제 조건을 알지 못하 +면 중요한 작업 도중 서비스가 중단되거나 데이터 접근이 불가능해질 수 있다.(예시: 무료 서비스 +가 갑작스레 종료되거나 유료화되면서 중요한 프로젝트가 중단) +●AI 생성물의 책임 문제: AI가 생성한 결과물(텍스트, 코드, 디자인 등)에 대해 오류나 부정확성이 +있을 경우, 이에 대한 법적 책임이 사용자에게 귀속될 가능성이 있다.(예시: AI가 생성한 코드에서 +보안 취약점이 발견되어 피해가 발생했으나, 약관에 “결과물의 정확성과 안전성에 대해 책임지지 +않는다”고 명시된 경우) +AI 서비스 이용 + +## 1. 중요 정보 입력 금지 + +개인정보, 기밀정보 등 중요 정보 및 허위 콘텐츠 생성을 위한 허위 정보 등 입력 금지 +민감하거나 중요한 정보는 입력하지 않아야 하는 이유 +●AI 서비스는 데이터를 인터넷을 통해 전송하며, 이 과정에서 정보가 노출될 가능성이 있다. AI 모 +델이 사용하는 플랫폼의 보안 정책이 강력하더라도, 데이터 유출, 해킹, 또는 기타 예기치 않은 보 +안 문제가 발생할 수 있다. +●많은 AI 서비스는 입력된 데이터를 학습 또는 개선 목적으로 저장할 수 있다. 사용자가 민감한 +정보를 입력할 경우, 해당 데이터가 회사 서버에 저장되어 내부적으로 활용되거나 오용될 위험이 +있다. +●AI는 입력된 데이터를 기반으로 응답하지만, 데이터를 완전히 삭제하거나 “잊어버리는” 능력이 제 +한적일 수 있다. 입력된 정보가 모델의 학습 데이터에 통합되거나 서비스 기록에 남아 있을 수 있다. + + +![이미지 133-0](images/p0133_img0.png) + + +![이미지 133-1](images/p0133_img1.png) + + +![이미지 133-2](images/p0133_img2.png) + + +![이미지 133-3](images/p0133_img3.png) + + +![이미지 133-4](images/p0133_img4.png) + + +![이미지 133-5](images/p0133_img5.png) + + +![이미지 133-6](images/p0133_img6.png) + + +--- + +이용자 주의 사항 +●챗GPT 사용 시 비밀번호나 중요한 기밀사항은 절대 입력하지 않아야 한다. +●부적절한 혹은 거짓된 정보를 입력하면 챗GPT가 그럴 듯한 오답을 생성해 허위 정보 제작 및 유 +포에 악용할 수 있으므로 챗GPT 등 생성형 AI를 사용할 때는 정확한 정보를 제공해야 한다. +●사전예방을 위해 챗GPT에 질문할 수 있는 글자 수를 제한하거나 기업의 경우 사내 인트라넷에서 +만 챗GPT를 사용하도록 한다. +●ChatGPT(OpenAI), Copliot(MS), ClovaX(Naver) 등 AI 서비스 내 설정에서 대화 이력, 학습이 +력 저장(또는 전송) 기능을 비활성화하거나 데이터 저장 동의를 거부한다. +보안 위협 +●챗GPT 등 생성형 AI에 기밀 정보를 입력할 경우 해당 정보가 서비스 제공자의 직원이나 다른 위 +탁자에게 노출되거나, 학습 데이터로 사용될 위험이 있다. +※ 챗GPT 사용으로 인해 입력된 기밀정보가 유출된 사례 +기업 내부의 +기밀정보 유출 +2023년 2월, 미국의 사이버보안 회사 Cyberhaven은 고객 기업에 대해 ChatGPT 사용에 관한 보 +고서를 발표한다. 그 보고서에 따르면, Cyberhaven 제품을 사용하는 고객 기업의 160만 명의 근 +로자 중, 지식 노동자의 8.2%가 직장에서 ChatGPT를 한 번이라도 사용했으며, 그 중 3.1%는 +ChatGPT에 기업 기밀 데이터를 입력했다고 한다. +또한, 2023년 3월 30일, 한국의 ‘Economist’는 S사의 내부 일부 부서가 ChatGPT 사용을 허가한 +후, 기밀 정보를 입력하는 사건이 발생했다고 보도하였다. 회사 측은 사내 정보 보안에 대한 주의를 +당부하고 있었음에도 불구하고, 프로그램의 소스 코드나 회의 내용을 입력한 직원이 있었다고 발표 +한 바 있다. + +## 2. 결과에 대한 정확성 검증 + +AI로 생성되는 정보에 대한 정확성과 함께 정보의 최신성, 편향성 등 검증 필수 +AI의 결과에 확인・검증이 필요한 이유 +●AI 모델은 항상 정확한 정보를 제공하지 않을 수 있다. 잘못된 정보에 의존하면 잘못된 결정을 내 +릴 수 있다. +●AI는 학습 데이터에 기반하여 결과를 생성하기 때문에, 데이터의 편향이 결과에 영향을 줄 수 있 +다. 이로 인해 왜곡된 정보가 제공될 수 있다. +●정보는 시간이 지남에 따라 변할 수 있다. 최신 정보인지 확인하는 것이 중요하다. + + +![이미지 134-0](images/p0134_img0.png) + + +![이미지 134-1](images/p0134_img1.png) + + +![이미지 134-2](images/p0134_img2.png) + + +![이미지 134-3](images/p0134_img3.png) + + +![이미지 134-4](images/p0134_img4.png) + + +![이미지 134-5](images/p0134_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +125 +●특정 분야(예: 의학, 법률)에서는 전문적인 지식이 필요하다. AI의 정보는 참고용일 뿐, 전문가의 +조언을 대체할 수 없다. +●AI 결과를 검증함으로써 정보를 보다 신뢰할 수 있게 된다. 필요 시 출처를 확인해야 한다. +●AI는 결과를 생성하는 과정에서 맥락을 고려하지 않을 수 있다. 검증을 통해 보다 깊이 있는 이해 +를 도모할 수 있다. +이용자 주의 사항 +●AI 모델 답변이 항상 정확하거나 최신 정보를 반영하는 것은 아니므로 인터넷 검색, 전문가 의견・ +자문, 공식 문서 등 다양한 출처 참조를 통해 추가적으로 확인해야 한다. +●AI가 생성한 답변을 사용할 경우에는 그 출처를 표시한다. +●AI 서비스를 통해 생성된 정보는 정확성이 확보되었다고 보기 어려우므로 이용에 주의가 필요하며, +허위 정보를 입력하거나 악의적인 의도(스팸, 스미싱 등)로 사용은 금지하고, 악용 시 범죄행위임을 +인식한다. +보안 위협 +●오정보 및 의사결정 오류: AI가 잘못된 정보를 제공하면 이를 기반으로 잘못된 결정을 내릴 수 있 +다. 예를 들어, AI가 잘못된 보안 권고를 제공하거나 취약한 설정을 권장하면 시스템이 공격에 취 +약해질 수 있다. +●피싱 및 사회공학적 공격: AI를 악용해 생성된 잘못된 결과(예: 이메일 내용, 링크, 메시지)를 신뢰 +하면 피싱 공격에 취약해질 수 있다. 공격자가 AI를 사용하여 설득력 있는 가짜 정보를 생성하고 +이를 사용자가 검증 없이 신뢰하면, 민감한 정보를 유출하거나 악성 링크를 클릭할 가능성이 높아 +진다. +●취약점 악용: AI가 코드, 설정, 네트워크 구성 등에 대한 잘못된 조언을 제공하면 보안 취약점이 +발생할 수 있다. 이러한 취약점은 악의적인 행위자들에게 공격 기회를 제공할 수 있다. +●신뢰할 수 없는 소스의 정보 유입: AI는 학습 데이터에 기반하여 응답하며, 종종 공개된 인터넷 데 +이터나 제한된 학습 데이터에 의존한다. 이 경우, 악의적으로 조작된 데이터가 결과에 영향을 미칠 +수 있다. 이를 신뢰하면 공격자들이 원하는 방향으로 시스템을 유도할 수 있다. +●자동화된 악의적 행위: AI가 자동화된 프로세스를 지원하는 경우, 검증 없이 결과를 실행하면 악성 +행위를 촉진할 수 있다. 예를 들어, AI가 추천하는 네트워크 설정을 즉시 적용하면 악의적인 코드 +실행이나 백도어 생성과 같은 문제가 발생할 수 있다. + + +![이미지 135-0](images/p0135_img0.png) + + +![이미지 135-1](images/p0135_img1.png) + + +![이미지 135-2](images/p0135_img2.png) + + +![이미지 135-3](images/p0135_img3.png) + + +![이미지 135-4](images/p0135_img4.png) + + +--- + + +## 3. 데이터 삭제 + +입력, 생성된 정보는 반드시 삭제하고, 필요 시에는 별도로 다운로드하여 저장하기 +데이터 백업이 필요한 이유 +●데이터가 저장된 채로 남아 있으면, 해커나 사이버 공격자가 이를 노릴 가능성이 있다. 특히 중요 +한 정보(예: 비밀 프로젝트 관련 데이터)가 포함된 경우, 보안 위협은 더욱 심각해질 수 있다. +●저장된 데이터가 오용되거나 잘못 활용될 경우, 사용자와 서비스 제공자 모두에게 부정적인 영향을 +미칠 수 있다. 특히 생성된 콘텐츠가 민감하거나 윤리적으로 논란이 될 수 있는 경우, 기록 삭제는 +오용을 방지하는 데 필수적이다. +●불필요한 데이터는 저장 공간과 처리 리소스를 차지하므로, 이를 삭제하면 서비스 운영 비용을 절 +감하고 효율성을 높일 수 있다. +●필요 시에는 별도로 다운로드해 놓으면 랜섬웨어 같은 악성 공격에 대한 방어를 강화할 수 있다. +백업된 데이터가 안전하게 보관되면, 공격받더라도 손실을 최소화할 수 있다. +●필요 시에는 별도로 다운로드해 놓으면 문제가 발생했을 때, 빠르게 데이터를 복구할 수 있다. +이용자 주의 사항 +●AI 서비스 제공자의 개인정보 처리방침과 데이터 보존 정책을 검토한다. +●서비스 제공자가 제공하는 삭제 기능이나 데이터 삭제 요청 옵션을 이용한다. +●서비스가 데이터를 자동으로 저장하거나 클라우드에 백업하는 기능이 있다면 이를 비활성화하거나 +삭제 절차를 따른다. +●작성 도중 민감한 데이터를 입력하지 않도록 주의한다. +보안 위협 +●외부 공격: 해커나 악의적 행위자가 서버에 저장된 데이터에 접근하여 사용자 정보를 탈취할 가능 +성이 높아진다. +●내부 유출: 서비스 제공자의 내부 직원이나 협력업체의 실수 또는 악의적 의도로 인해 데이터가 유 +출될 수 있다. +●공격 대상 확대: 저장된 데이터가 많을수록 공격 대상이 커지고 보안 취약점이 발생할 확률이 증가 +한다. + + +![이미지 136-0](images/p0136_img0.png) + + +![이미지 136-1](images/p0136_img1.png) + + +![이미지 136-2](images/p0136_img2.png) + + +![이미지 136-3](images/p0136_img3.png) + + +![이미지 136-4](images/p0136_img4.png) + + +![이미지 136-5](images/p0136_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +127 + +## 4. 최신 보안 업데이트 적용 + +서비스의 안전성, 안정성 등 유지를 위한 보안 패치는 최신버전으로 업데이트 필수 +보안 업데이트가 필요한 이유 +●소프트웨어는 시간이 지남에 따라 새로운 보안 취약점이 발견될 수 있다. 보안 패치는 이러한 취약 +점을 수정하여 해커가 시스템에 침투하거나 데이터를 악용하는 것을 방지한다. +●보안 업데이트는 종종 새로운 기능이나 성능 개선도 포함되므로, 최신 버전을 유지하는 것이 전체 +적인 사용자 경험을 향상시킬 수 있다. +●정기적인 보안 패치 적용은 서비스 제공자의 신뢰성을 높이며, 이용자가 서비스에 대해 안심할 수 +있는 환경을 제공한다. +●AI 서비스는 종종 민감한 데이터를 다루기 때문에, 보안 패치를 통해 데이터 유출이나 손실을 방지 +하는 것이 중요하다. +이용자 주의 사항 +●소프트웨어 및 사용 중인 디바이스의 운영 체제, 보안 소프트웨어를 항상 최신 버전으로 업데이트 +한다. +●AI 서비스 및 관련 소프트웨어에서 가능한 경우 자동 업데이트를 활성화하여 보안 패치를 즉시 적 +용한다. +●업데이트가 실패하거나 시스템에 문제가 생길 경우를 대비해 정기적인 데이터 백업과 복구 계획을 +유지한다. +●불필요한 AI 관련 확장 프로그램 업데이트는 AI 시스템의 성능 저하 및 보안 취약점을 초래할 수 +있으므로 주의해야 한다. +보안 위협 +●취약점 악용: AI 소프트웨어의 기존 버전에는 알려진 취약점이 있을 수 있다. 최신 업데이트를 적 +용하지 않으면 해커가 이를 악용해 시스템에 침투하거나 데이터를 탈취할 수 있다(예: 악성 코드 +실행, 권한 상승, 서비스 거부(DoS) 공격). +●데이터 유출 및 프라이버시 침해: AI 서비스가 데이터 처리를 포함하는 경우, 보안 업데이트를 적 +용하지 않으면 암호화 프로토콜 또는 데이터 보호 메커니즘의 취약점이 노출될 가능성이 있다. 이 +러한 취약점은 민감한 데이터를 무단으로 접근하거나 외부로 유출하는 데 이용될 수 있다. +●악성 코드 감염: 업데이트가 되지 않은 시스템은 최신 위협 탐지 및 방지 기능을 포함하지 않을 수 + + +![이미지 137-0](images/p0137_img0.png) + + +![이미지 137-1](images/p0137_img1.png) + + +![이미지 137-2](images/p0137_img2.png) + + +![이미지 137-3](images/p0137_img3.png) + + +![이미지 137-4](images/p0137_img4.png) + + +![이미지 137-5](images/p0137_img5.png) + + +--- + +있다. 공격자는 이를 악용해 AI 서비스에 악성 코드를 삽입하거나 배포할 수 있다. +AI 악용 피해 예방 + +## 1. 항상 의심하고 확인 + +정보의 허위・조작 가능성 등을 항상 의심하고 생성물 활용 분야와 목적을 반드시 확인 +항상 의심하고 확인이 필요한 이유 +●딥페이크와 생성형 AI의 발전 +- AI 기술이 발전하면서 딥페이크 영상, 음성 합성, 텍스트 생성이 매우 정교해지고 있고, 특히 생 +성형 AI를 활용하면 가짜 이미지, 영상, 기사 등을 쉽게 만들 수 있다. 이러한 허위 정보는 진짜 +와 구별하기 어려울 정도로 정교해 사회적 혼란을 초래할 수 있다. +- 예시: 가짜 뉴스 영상이 유포되어 특정 정치인이나 유명인의 명예를 실추시킬 수 있다. 금융 사 +기에서 CEO 목소리를 합성한 딥페이크로 대규모 자금 이체를 유도한 사건도 있었다. +●정보의 확산 속도 증가 +- AI와 인터넷의 결합으로 정보는 순식간에 전 세계로 확산될 수 있다. +- 허위・조작된 정보는 진짜 정보보다 더 눈길을 끌기 쉬워 더 빠르게 퍼질 가능성이 높다. +- 확인되지 않은 정보가 확산되면 개인, 기업, 국가에 막대한 피해를 줄 수 있다. +- 예시: 잘못된 건강 정보가 퍼져 사람들이 위험한 치료법을 선택하거나 건강을 해칠 수 있고, 주 +가 조작을 위해 허위 기업 정보를 유포해 투자자들이 손해를 볼 수 있다. +●개인화된 허위 정보 공격 (Targeted Manipulation) +- AI는 사용자의 행동 패턴과 취향을 학습해 정확하게 개인화된 허위 정보를 제공할 수 있다. 이는 +사용자가 허위 정보에 더 쉽게 현혹되도록 만들어 비판적 사고를 방해한다. +- 예시: 소셜 미디어 알고리즘이 사용자가 보고 싶은 정보만 보여주며, 허위・극단적 정보의 확산을 +강화한다. 사기범이 AI를 사용해 특정 개인의 정보를 조합, 맞춤형 피싱 공격을 수행한다. +이용자 주의 사항 +●정보 출처 확인 +- 공식적이고 신뢰할 수 있는 출처에서 제공된 정보인지 확인한다. +- 뉴스, 연구 자료, 기사 등을 확인할 때 출처의 신뢰성을 검증한다. + + +![이미지 138-0](images/p0138_img0.png) + + +![이미지 138-1](images/p0138_img1.png) + + +![이미지 138-2](images/p0138_img2.png) + + +![이미지 138-3](images/p0138_img3.png) + + +![이미지 138-4](images/p0138_img4.png) + + +![이미지 138-5](images/p0138_img5.png) + + +![이미지 138-6](images/p0138_img6.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +129 +- 소셜미디어나 커뮤니티를 통해 유포된 정보는 다시 한번 확인한다. +●팩트 체크 및 교차 검증 +- 하나의 정보에 의존하지 말고 여러 출처를 비교하여 진위를 확인한다. +- 팩트체크 웹사이트나 도구를 활용하여 허위 정보 여부를 검증한다. +●AI를 이용한 정보 또는 콘텐츠 등에 대한 출처 표시 +- 검증된 정보를 기반으로 AI를 이용하여 생성된 정보, 콘텐츠 등에는 반드시 AI를 이용해 생성된 +정보임을 표시하여야 한다. +- 생성된 정보, 콘텐츠에 활용된 정보의 출처를 표시한다. +- AI를 이용하여 생성된 정보와 콘텐츠는 개인적인 용도로만 사용하여야 하며, 상업적인 목적으로 +이용은 금지하여야 한다. +●중요 정보(개인정보, 민감정보 등)가 포함되어 생성된 정보인 경우, 중요 정보에 대해 보호조치를 +적용하여 활용한다. +- 「개인정보 보호법」에 따라 개인정보와 민감정보 등을 마스킹 또는 삭제하고, 기업의 기밀정보 +등에도 동일하게 적용한다. +보안 위협 +●잘못된 의사결정: AI가 제공한 정보가 조작되었거나 부정확할 경우, 이를 기반으로 한 의사결정이 +잘못된 방향으로 흘러갈 수 있다. +●사회공학적 공격(피싱 및 스캠): 공격자가 AI를 통해 설득력 있는 허위 정보를 제공하거나 사용자 +를 속이는 메시지를 생성할 수 있다(예시: AI가 생성한 잘못된 이메일 또는 메시지(가짜 비밀번호 +재설정 요청)를 신뢰하고 실행할 경우, 계정 탈취 또는 데이터 유출 발생 가능). +●악성 코드 및 스크립트 실행: AI가 제공한 코드나 스크립트를 검증 없이 실행하면 악성 코드가 시 +스템에 침투하거나 데이터를 손상시킬 수 있다(예시: AI가 제공한 “최적화된 스크립트”가 실제로는 +악성 소프트웨어를 설치하도록 유도 가능). +●데이터 손실 및 무단 접근: AI가 권장하는 설정 변경이나 데이터를 관리하는 방법이 허위 또는 악 +의적으로 조작된 정보일 경우, 데이터 손실 또는 무단 접근이 발생할 수 있다(예시: 잘못된 암호화 +방식 또는 데이터 백업 지침을 신뢰하여 중요한 데이터를 잃거나 복구하지 못하는 상황 발생 가능). +●AI 모델 중독(Poisoning): 악의적인 사용자가 AI 서비스의 응답을 조작하여 허위 데이터를 포함시 +키면, 사용자는 이를 검증 없이 신뢰할 가능성이 있다(예시: AI 모델이 의도적으로 편향된 데이터 +로 학습된 경우, 왜곡된 결과를 제공하여 중요한 결정을 오도). + + +![이미지 139-0](images/p0139_img0.png) + + +![이미지 139-1](images/p0139_img1.png) + + +![이미지 139-2](images/p0139_img2.png) + + +![이미지 139-3](images/p0139_img3.png) + + +![이미지 139-4](images/p0139_img4.png) + + +--- + +2. AI 악용이 의심되면 삭제 +AI를 악용하여 제작된 콘텐츠, 사이트, 프로그램 등이 의심되면 삭제하고 신고하기 +AI 악용이 의심되면 관련 콘텐츠, 프로그램 등을 반드시 삭제해야 하는 이유 +●악성 코드 및 보안 위협 방지 +- AI를 악용한 콘텐츠나 프로그램은 악성 코드, 랜섬웨어, 트로이 목마 등이 숨겨져 있을 수 있다. +이를 통해 개인정보 탈취, 시스템 감염, 데이터 손상 등 심각한 보안 사고가 발생할 수 있다. +- 예시: 딥페이크 영상이나 AI 생성 콘텐츠에 숨겨진 악성 링크를 클릭하면, 사용자의 컴퓨터가 악 +성 코드에 감염될 수 있다. 또한 AI로 제작된 가짜 소프트웨어가 백그라운드에서 키로깅(타이핑 +기록 감시) 등을 통해 민감 정보를 탈취할 수 있다. +●중요 정보 유출 및 사생활 침해 예방 +- AI 악용 콘텐츠는 사용자의 이름, 얼굴, 목소리 등 개인정보를 수집하고 불법적으로 활용할 가능 +성이 있다. 삭제하지 않으면 해커가 이를 악용해 신원 도용, 금융 사기, 딥페이크 제작 등에 사용 +할 수 있다. +- 예시: AI를 통해 유출된 목소리나 영상이 사기범에 의해 가공되어 가족이나 지인을 속이는 사기 +수법에 활용될 수 있고, 악성 AI 소프트웨어가 사용자 정보를 백그라운드에서 전송할 수 있다. +●시스템 리소스 오남용 방지 +- AI 악용 프로그램이나 콘텐츠는 종종 사용자의 시스템 리소스를 몰래 사용하여 불법 채굴 +(Cryptojacking)이나 봇넷의 일부로 활용될 수 있다. 이는 시스템 성능 저하, 과도한 전력 소모 +를 일으키고, 기기의 수명을 단축시킬 수 있다. +- 예시: 악성 AI 프로그램이 사용자 컴퓨터를 이용해 암호화폐를 불법 채굴하거나, DDoS 공격의 +일부로 활용될 수 있다. +이용자 주의 사항 +●의심스러운 파일이나 링크 실행 금지 +- 의심스러운 파일이나 링크를 절대 실행하거나 클릭하지 않아야 한다. +- 실행된 순간 악성 코드가 설치되거나 시스템이 감염될 수 있다. +- 특히 이메일, 메신저 등을 통해 전달된 출처 불명의 첨부 파일이나 링크는 위험하다. + + +![이미지 140-0](images/p0140_img0.png) + + +![이미지 140-1](images/p0140_img1.png) + + +![이미지 140-2](images/p0140_img2.png) + + +![이미지 140-3](images/p0140_img3.png) + + +![이미지 140-4](images/p0140_img4.png) + + +![이미지 140-5](images/p0140_img5.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +131 +●신뢰할 수 있는 보안 소프트웨어로 검사 +- AI 악용이 의심되는 콘텐츠를 삭제하기 전, 반드시 보안 소프트웨어를 사용하여 시스템을 검사 +해야 한다. +- 최신 보안 업데이트가 적용된 백신 프로그램을 사용해 전체 시스템을 점검해야 한다. +보안 위협 +●악성코드 확산 및 감염: 악의적으로 설계된 AI 기반 콘텐츠나 프로그램은 악성코드(바이러스, 랜섬 +웨어, 트로이 목마 등)를 포함할 수 있다. 이를 방치하면 다른 장치나 서비스로 확산될 가능성이 +높다.(예시: 악성코드가 백그라운드에서 실행되어 데이터를 손상시키거나 탈취, 시스템 과부하를 +초래) +●데이터 유출: 악용 콘텐츠가 사용자 데이터를 무단으로 수집하거나 외부 서버로 전송할 수 있다. +(예시: 민감한 정보(개인정보, 비밀번호, 금융 정보 등)가 외부로 유출되어 금전적 손실 및 프라이 +버시 침해 발생 가능) +●AI 모델 중독 및 오작동: 의심스러운 콘텐츠나 프로그램이 AI 모델의 학습 데이터를 오염시키거나 +시스템의 의사결정 과정을 조작할 수 있다.(예시: AI 모델이 편향되거나 부정확한 결과를 제공하도 +록 유도되어 개인의 판단 오류를 초래 가능) +3. AI 악용 결과물 공유 금지 +악성코드, 허위 콘텐츠 등으로 의심되는 결과물을 소장하거나 다른 사람에게 공유 금지 +AI 악용 결과물은 공유를 금지해야 하는 이유 +●불법 행위에 가담할 수 있음 +- AI 악용 결과물은 불법적이거나 부적절한 목적으로 만들어졌을 가능성이 높고, 이를 공유하는 +행위는 의도와 상관없이 법적 처벌 대상이 될 수 있다. +- 딥페이크 음란물, 저작권 침해 콘텐츠, 가짜 뉴스 등을 공유하면 유포자로서 책임이 발생할 수 +있다. +- 예시: 딥페이크 성적 영상 공유 시, 「성폭력처벌법」 위반으로 징역형이나 벌금형에 처할 수 있 +고, 저작권 침해 콘텐츠 공유 시 「저작권법」 위반으로 과태료나 손해배상 책임이 발생할 수 있다. +●악성 코드나 보안 위협 유포 가능성 +- AI 악용 결과물에 악성 코드, 피싱 링크 등이 숨겨져 있을 수 있고, 이를 다른 사람과 공유하면 +타인의 기기나 시스템을 감염시킬 위험이 커질 수 있다. + + +![이미지 141-0](images/p0141_img0.png) + + +![이미지 141-1](images/p0141_img1.png) + + +![이미지 141-2](images/p0141_img2.png) + + +![이미지 141-3](images/p0141_img3.png) + + +![이미지 141-4](images/p0141_img4.png) + + +![이미지 141-5](images/p0141_img5.png) + + +--- + +- 예시: 악성 AI 생성 파일을 다른 사람에게 전송하면, 해당 파일을 열어보는 순간 바이러스에 감 +염될 수 있다. 피싱 링크가 포함된 AI 결과물을 공유해 타인의 개인정보가 유출될 가능성이 있다. +●악용 도구의 확산 방지 +- AI 악용 결과물을 공유하는 행위는 악용 도구의 확산을 조장할 수 있고, 악의적인 목적을 가진 +사람들이 이를 활용해 더 많은 범죄를 저지를 수 있다. +- 예시: AI 기반으로 생성된 악성 코드나 해킹 도구가 공유되면 사이버 공격이 확산될 수 있다. 생 +성된 가짜 리뷰, 가짜 광고 등을 공유하면 기업이나 개인이 경제적 피해를 입을 수 있다. +이용자 주의 사항 +●의심스러운 콘텐츠 확인 및 경각심 유지 +- AI를 악용해 생성된 딥페이크 영상, 가짜 뉴스, 조작된 이미지는 진짜처럼 보일 수 있으므로 항 +상 의심하고 확인해야 한다. +- 과도하게 자극적이거나 감정적 반응을 유도하는 콘텐츠는 즉시 공유하지 말고 확인이 필요하다. +●링크 및 파일의 안전성 확인 +- AI 악용 결과물은 악성 코드나 피싱 링크를 포함할 수 있으므로, 출처 불명의 파일, 링크는 열어 +보거나 다른 사람과 공유하지 않도록 주의한다. +●콘텐츠 발견 시 즉시 신고 +- AI 악용 결과물을 발견하면 해당 플랫폼이나 관련 기관에 즉시 신고해야 한다. +보안 위협 +●악성코드 및 사이버 공격 확산: AI 악용 결과물이 포함된 코드, 파일, 또는 링크가 공유되면 악성 +코드나 랜섬웨어가 빠르게 확산될 수 있다.(예시: 공유된 악성 AI 생성 프로그램이 사용자 장치에 +감염을 일으키거나 네트워크를 통해 확산되어 광범위한 피해를 초래 가능) +●사회공학적 공격 지원: AI를 악용해 생성된 설득력 있는 가짜 메시지(피싱 이메일, 사기 메시지, 가 +짜 뉴스)가 널리 퍼질 경우, 사람들이 이를 신뢰하고 민감한 정보를 제공하거나 악성 링크를 클릭 +하게 될 가능성이 커진다.(예시: AI 생성 피싱 이메일로 인해 대규모 데이터 유출이 발생 가능) +●허위 정보 및 조작된 콘텐츠 확산: AI 악용 결과물로 생성된 가짜 뉴스, 허위 정보, 편집된 이미지 +및 영상(딥페이크 등)이 공유되면 공공 혼란, 신뢰 상실, 정치적・사회적 불안을 야기할 수 있다.(예 +시: 특정 인물에 대한 딥페이크 영상이 퍼져 명예 훼손 및 신뢰성 손상 가능) +●보안 취약점 노출: AI 악용 결과물에는 보안 취약점을 공격하는 기술적 정보나 방법론이 포함될 수 +있다. 이러한 정보를 공유하면 공격자들에게 보안 취약점 악용 방법을 학습할 기회를 제공한다.(예 +시: 공유된 결과물이 특정 시스템의 취약점을 악용하는 스크립트인 경우, 해당 시스템이 대규모로 + + +![이미지 142-0](images/p0142_img0.png) + + +![이미지 142-1](images/p0142_img1.png) + + +![이미지 142-2](images/p0142_img2.png) + + +![이미지 142-3](images/p0142_img3.png) + + +![이미지 142-4](images/p0142_img4.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +133 +공격당할 위험 증가) +●범죄 및 불법 활동 지원: AI 악용 결과물이 범죄 행위(사기, 해킹, 테러 등)에 사용될 수 있는 도구 +(예: 가짜 문서 생성, 스팸 메시지 자동화)를 포함하고 있다면 이를 공유함으로써 불법 활동이 확산 +될 가능성이 있다.(예시: AI 생성 허위 신분증이나 금융 서류가 범죄 조직에 의해 악용 가능) +●신뢰 손상: AI 악용 결과물을 공유한 사람이 조직이나 기업의 일원일 경우, 해당 조직의 신뢰성과 +명성이 훼손될 수 있다.(예시: 조직 내 직원이 AI 악용 결과물을 공유하여 외부에서 법적・윤리적 +문제로 비난받음) + +## 4. 허위 콘텐츠 매매 금지 + +AI를 악용해 생성된 허위 콘텐츠(가짜 뉴스, 영상, 음성 등)를 돈으로 사거나 팔지 않기 +AI를 악용해 생성된 허위 콘텐츠는 매매나 공유를 금지해야 하는 이유 +●불법 행위 해당 +- 허위 콘텐츠의 생성, 공유, 매매는 의도와 관계없이 불법 행위로 간주될 수 있다. +- 특히 AI를 악용해 생성된 콘텐츠가 허위사실 유포, 명예훼손, 저작권 침해, 성범죄와 연관된 경 +우, 법적 처벌을 받을 수 있다. +●피해 확산과 2차 가해 유발 +- AI로 생성된 허위 콘텐츠(딥페이크 영상, 조작된 뉴스, 합성 이미지)는 피해자에게 큰 정신적・사 +회적 고통을 준다. 이를 공유하거나 매매하면 피해 확산과 함께 2차 가해를 유발하게 된다. +- 예시: 딥페이크 음란물이나 허위사실을 퍼뜨리면 피해자의 사회적 평판이 실추되고 고통이 가중 +된다. 콘텐츠가 온라인에 영구적으로 남아 피해자가 일상생활에 어려움을 겪게 된다. +●허위 정보의 빠른 확산으로 사회 혼란 초래 +- AI를 악용한 허위 콘텐츠는 정교하고 설득력이 높아 일반 사용자가 진위를 구별하기 어렵고, 이 +러한 콘텐츠가 빠르게 확산되면 사회적 혼란을 초래하고 여론을 왜곡할 수 있다. +- 예시: 선거 기간 중 AI가 생성한 가짜 뉴스나 여론 조작 콘텐츠가 유포되어 민주적 절차가 왜곡 +될 수 있고, 허위 재난 등의 확산은 공포와 혼란을 유발할 수 있다. +●가짜 정보 확산 방지를 위한 윤리적 책임 +- AI 허위 콘텐츠를 공유하거나 판매하는 행위는 정보의 진실성을 해치며 윤리적 책임을 저버리는 +것이다. +- AI 시대에서 이용자는 허위 정보 확산 방지를 위해 신중하게 행동해야 할 책임이 있다. + + +![이미지 143-0](images/p0143_img0.png) + + +![이미지 143-1](images/p0143_img1.png) + + +![이미지 143-2](images/p0143_img2.png) + + +![이미지 143-3](images/p0143_img3.png) + + +![이미지 143-4](images/p0143_img4.png) + + +![이미지 143-5](images/p0143_img5.png) + + +--- + +이용자 주의 사항 +●콘텐츠 진위 확인 및 출처 검증 +- 허위 콘텐츠는 진짜처럼 보이도록 정교하게 만들어지므로 항상 진위 여부를 확인해야 하고, 콘텐 +츠의 출처가 신뢰할 수 있는 기관이나 출처인지 검증한다. +●의심스러운 콘텐츠 저장 및 공유 금지 +- AI 악용 콘텐츠(딥페이크, 가짜 뉴스 등)는 불법일 가능성이 높으므로 소장하거나 공유하지 않아 +야 한다. 의심스러운 콘텐츠는 즉시 삭제하고, 불필요하게 유포되지 않도록 차단한다. +●불법 콘텐츠 유포의 법적 책임 인지 +- AI 허위 콘텐츠를 매매하거나 공유하면 법적 처벌 대상이 될 수 있으므로 항상 법적 책임을 인 +지해야 한다. +보안 위협 +●사이버 범죄 확산: 허위 콘텐츠를 매매하거나 공유하면 악의적인 행위자들이 이를 범죄 목적으로 +활용할 가능성이 높아진다.(예시: 딥페이크를 사용한 사기, 협박, 금전 요구(블랙메일) 등) +●사회적 혼란 및 신뢰 붕괴: 허위 콘텐츠가 정치적, 사회적, 경제적 이슈에 대해 잘못된 정보를 퍼뜨 +리면 공공 혼란과 불신을 조장할 수 있다.(예시: 정치인의 허위 발언을 담은 딥페이크 영상이 대중 +에게 확산되어 선거 결과에 영향을 미침) +●데이터 유출 및 보안 침해: AI로 생성된 허위 콘텐츠가 악성코드 또는 피싱 수단으로 활용될 경우, +이를 매매하거나 공유하면 광범위한 데이터 유출 및 보안 침해가 발생할 수 있다.(예시: 악성 첨부 +파일이 포함된 AI 생성 이메일을 대량으로 유포하여 기업 네트워크 침투) +●개인정보 침해 및 명예 훼손: AI가 생성한 허위 콘텐츠(딥페이크, 가짜 메시지 등)를 통해 특정 개 +인이나 단체의 명예를 훼손하거나 사생활을 침해할 수 있다.(예시: 허위 음란물 딥페이크를 제작 +및 유포하여 피해자에게 심각한 정신적, 사회적 피해를 초래) +●보안 시스템 악용: AI 악용 콘텐츠가 보안 시스템을 교란하거나 우회하는 도구로 사용될 수 있다. +(예시: 위조된 음성이나 얼굴 데이터를 사용해 생체 인증 시스템을 우회하고, 민감한 정보에 접근 +가능) +●허위 기술 확산: 악성 AI 기술이나 허위 콘텐츠 제작 방법이 매매 및 공유를 통해 확산되면, 더 많 +은 공격자가 이를 활용하여 보안 위협이 증가한다.(예시: AI 기반 딥페이크 제작 소프트웨어를 공 +유하여 누구나 쉽게 허위 콘텐츠를 생성 가능) + + +![이미지 144-0](images/p0144_img0.png) + + +![이미지 144-1](images/p0144_img1.png) + + +![이미지 144-2](images/p0144_img2.png) + + +![이미지 144-3](images/p0144_img3.png) + + +![이미지 144-4](images/p0144_img4.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +135 +참고문헌 +● +AEM, https://www.autoelectronics.co.kr/article/articleView.asp?idx=5496, 2024.1.15. +● +AKM I. Newaz et al., "Adversarial Attacks to Machine Learning-based Smart Healthcare +Systems," 2020. +● +Christopher J. Kelly et al., "Key challenges for delivering clinical impact with artificial +intelligence," 2019. +● +CISA, NSA, FBI, SHIFTING THE BALANCE OF CYBERSECURITY RISK: PRINCIPLES AND +APPROACHES FOR SECURE BY DESIGN SOFTWARE, April 2023, +● +Council of Europe. Recommendation on the Human Rights Impacts of AI, 2021. +● +CSA Singapore, Security-by-Design Framework, Version: 1.0, 09 November 2017 +● +Cyber Security Agency of Singapore. Security by Design Framework, Version 1.0, 2017. +● +dataDx, "Can You Trust Your Data?", Dec 12, 2019 +● +Department for Science, Innovation and Technology(UK), AI Cyber Security Code of +Practice, November 2023 +● +Department for Science, Innovation and Technology(UK), Call for views on the Cyber +Security of AI, 24 May 2024 +● +Department for Science, Innovation and Technology(UK), Cyber security risks to artificial +intelligence, 15 May 2024 +● +Department of Homeland Security, MITIGATING ARTIFICIAL INTELLIGENCE (AI) RISK: +Safety and Security Guidelines for Critical Infrastructure Owners and Operators, April +2024 +● +Digital Transformation Agency (Australia). AI Ethics Principles, 2019. +● +European Commission. White Paper on Artificial Intelligence: A European Approach to +Excellence and Trust, 2020. +● +European Parliament, Artificial Intelligence Act, 2019-2024 +● +European Parliament. Regulation on a European Approach to Artificial Intelligence, 2023. +● +European Union. The Artificial Intelligence Act Proposal, 2021. +● +Frank Liao et al., "Governance of Clinical AI applications to facilitate safe and equitable +deployment in a large health system," 2022. +● +GOV.UK, Call for views on the Cyber Security of AI, 2024.8.2. +● +GOV.UK, Cyber security risks to artificial intelligence, 2024.5.15 +● +IBM. AI Explainability 360: Interpretation and Insights for AI Models, 2021. + + +![이미지 145-0](images/p0145_img0.png) + + +![이미지 145-1](images/p0145_img1.png) + + +![이미지 145-2](images/p0145_img2.png) + + +![이미지 145-3](images/p0145_img3.png) + + +--- + +● +IEEE. Ethically Aligned Design: A Vision for Prioritizing Human Well-being with +Autonomous and Intelligent Systems, 2019. +● +IEEE-USA, A FLEXIBLE MATURITY MODEL FOR AI GOVERNANCE BASED ON THE +NIST AI RISK MANAGEMENT FRAMEWORK, 2024.7 +● +International Medical Device Regulators Forum, "Software as a Medical Device: Possible +Framework for Risk Categorization and Corresponding Considerations," 2014. +● +ISO/IEC 42001, Information technology — Artificial intelligence — Management system, +2023 +● +J. Baek, D. B. Lee, and S. J. Hwang, "Learning to Extrapolate Knowledge: Transductive +Few-shot Out-of-Graph Link Prediction," 2020. +● +Joint Cybersecurity Information, Deploying AI Systems Securely, U/OO/143395-24, +PP-24-1538, April 2024 Ver. 1.0 +● +Justin Spears, Introduction to the NetApp AI Security Framework, NetApp, May 2024, +WP-7365 +● +K. Lerman, and T. Hogg, "Leveraging position bias to improve peer recommendation," +2014. +● +M. Maadi, H. A. Khorshidi, and U. Aickelin, "A Review on Human–AI Interaction in +Machine Learning and Insights for Medical Applications," 2021. +● +MIT News, "Artificial intelligence predicts patients' race from their medical images," +2022. +● +N. Mehrabi, F. Morstatter, N. Saxena, K. Lerman, and A. Galstyan, "A survey on bias +and fairness in machine learning," 2021. +● +Nasr et al.(2023.11), Scalable Extraction of Training Data from (Production) Language +Models, arXiv:2311.17035v1 +● +National Cyber Security Center, Guidelines for secure AI system development, + +#### 2023.11.27. + +● +Nawaf Alharbe et al., "A Healthcare Quality Assessment Model Based on Outlier +Detection Algorithm," 2022. +● +NIST Trustworthy and Responsible AI, Adversarial Machine Learning: A Taxonomy and +Terminology of Attacks and Mitigations, January 2024 +● +NIST Trustworthy and Responsible AI, Artificial Intelligence Risk Management +Framework: Generative Artificial Intelligence Profile, July 2024 +● +NIST, AI 100-5: A Plan for Global Engagement on AI Standards, July 2024 +● +NIST, AI Risk Management Framework(AI RMF 1.0), January 2023 +● +NIST, Artificial Intelligence Risk Management Framework, 2021. + + +![이미지 146-0](images/p0146_img0.png) + + +![이미지 146-1](images/p0146_img1.png) + + +![이미지 146-2](images/p0146_img2.png) + + +![이미지 146-3](images/p0146_img3.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +137 +● +NITI Aayog, India. National Strategy for Artificial Intelligence, 2018. +● +OECD. Recommendation of the Council on Artificial Intelligence, OECD Legal +Instruments, 2019. +● +OWASP, OWASP Top 10 for LLM Applications 2025, Version 2025, November 18, 2024 +● +OWASP, OWASP Top 10 for LLM Applications Ver1.1, October 16, 2023 +● +R. Baeza-Yates, "Bias on the Web," 2018. +● +R. K. E. Bellamy et al., "AI Fairness 360: An Extensible Toolkit for Detecting, +Understanding, and Mitigating Unwanted Algorithmic Bias," 2018. +● +S. Vasudevan and K. Kenthapadi, "LiFT: A Scalable Framework for Measuring Fairness in +ML Applications," 2020. +● +Singapore Ministry of Communications and Information. Model AI Governance +Framework, 2020. +● +T. Chen, S. Kornblith, M. Norouzi, and G. Hinton, "A Simple Framework for Contrasive +Learning of Visual Representations," 2020. +● +U.S. Food and Drug Administration, "Proposed Regulatory Framework for Modifications +to AI/ML-Based Software as a Medical Device (SaMD)," 2019. +● +United +Nations +Educational, +Scientific +and +Cultural +Organization +(UNESCO). +Recommendation on the Ethics of Artificial Intelligence, 2021. +● +World Economic Forum. AI Ethics and Governance: A Global Framework, 2021. +● +Yisroel Mirsky et al., "CT-GAN: Malicious Tampering of 3D Medical Imagery using Deep +Learning," 2019. +● +Zhichen Dong et al., Attacks, Defenses and Evaluations for LLM Conversation Safety: A +Survey, Proceedings of the 2024 Conference of the North American Chapter of the +Association for Computational Linguistics: Human Language Technologies (Volume 1: +Long Papers), pages 6734–6747, June 16-21, 2024 +● +개인정보보호위원회, 「AI 시대 안전한 개인정보 활용 정책방향」발표문, 2023.8.3. +● +개인정보보호위원회, AI 시대 개인정보 정책 종합설명회 자료, 2024.12.19. +● +개인정보보호위원회, 안전한 인공지능(AI)·데이터 활용을 위한 AI 프라이버시 리스크 관리 모델, +2024. 12. +● +개인정보보호위원회, 인공지능 시대 안전한 개인정보 활용 정책방향, 2023.8. +● +개인정보보호위원회, 인공지능(AI) 개인정보보호 자율점검표, 2021.5.31. +● +과기정통부/TTA, 신뢰할 수 있는 인공지능 개발 안내서, 2024.4 +● +광장 국제통상연구원, “글로벌 인공지능(AI) 규제 동향과 시사점 - EU, 미국, 영국을 중심으로”, +「Issue Brief」 vol. 2, 2024 +● +국가정보원, 안전한 AI 시스템 개발을 위한 가이드라인, 2023.11 + + +![이미지 147-0](images/p0147_img0.png) + + +![이미지 147-1](images/p0147_img1.png) + + +![이미지 147-2](images/p0147_img2.png) + + +![이미지 147-3](images/p0147_img3.png) + + +--- + +● +국가정보원/국가보안기술연구소, 챗GPT 등 생성형 AI 활용 보안 가이드라인, 2023.6 +● +국회입법조사처, 인공지능 시대 도래에 따른 AI 입법수요 및 과제 연구, 2023.12.20. +● +금융보안원, 금융분야 AI 보안 가이드라인, 2023.4 +● +금융위원회, 금융분야 인공지능 가이드라인, 2021.7 +● +디지털투데이, https://www.digitaltoday.co.kr/news/articleView.html?idxno=504025, 2024.1.30 +● +매일경제, https://www.mk.co.kr/news/it/11059386?utm_source=chatgpt.com, 2024.7.4 +● +머니투데이, https://news.mt.co.kr/mtview.php?no=2019102214138230917, 2019.10.22 +● +보안뉴스, https://www.boannews.com/media/view.asp?idx=93908&utm_source=chatgpt.com, + +#### 2021.1.3 + +● +서울특별시, 서울시 유니버설디자인 통합 가이드라인, 2017.1 +● +소프트웨어정책연구소, 설명가능한 인공지능(XAI) 연구 동향과 시사점, 2021.9.13 +● +식품의약품안전처, "의료기기 GMP 국제 품질관리 민원인 안내서," 2017. +● +식품의약품안전처, "의료기기의 사이버보안 허가・심사 가이드라인," 2022. +● +식품의약품안전처, "인공지능 의료기기 임상시험방법 설계 가이드라인," 2022. +● +식품의약품안전처, "인공지능 의료기기의 허가・심사 가이드라인," 2022. +● +연합뉴스, https://www.yna.co.kr/view/AKR20191106004500091, 2019.11.06 +● +이코노미스트, https://www.economist.co.kr/article/view/ecn202303300057, 2023.3.30 +● +정보통신산업진흥원, "기업 공개소프트웨어 거버넌스 가이드," 2021. +● +조선일보, https://www.chosun.com/international/international_general/ +2024/10/21/CCCTWF5ERRCQRDOF6C7MUEQSUU/, 2024.10.21 +● +한겨레, https://www.hani.co.kr/arti/science/future/898163.html?utm_source=chatgpt.com, 2019.6.17 +● +한국과학기술기획평가원(KISTEP), EU AI 규제 현황과 시사점, 「KISTEP 브리프 119」, 2024.2.13 +● +한국과학기술원(KAIST), 한국4차산업혁명정책센터, "인공지능(AI)의 의료활용과 주요 이슈," 2019. +● +한국데이터베이스진흥원, "데이터 품질진단 절차 및 기법 (Ver 1.0)," 2009. +● +한국인터넷진흥원, KISA Insight, AI 중심사회의 도래와 보안이슈 분석, 2022 Vol.3 +● +한국인터넷진흥원, KISA Insight, 인공지능(AI) 안전 및 보안 규범 분석 및 시사점, 2023 Vol.6 +● +한국정보통신기술협회, "지도학습을 위한 데이터 품질 관리 요구사항," 2021. +● +한국지능정보사회진흥원(NIA), “해외 생성형 인공지능 관련 주요 규제 동향 및 시사점”, 「디지털법제 +Brief」, 2024.3 +● +한국지능정보사회진흥원, 「NIA The AI Report」, THE AI REPORT 2023-7, 2023.7.13 +● +総務省, AIネットワーク社会推進会議 事務局, AI開発ガイドライン及びAI利活用ガイドラインに関 +するレビュー, 2022年2月8日 +● +総務省, AIネットワーク社会推進会議, AI利活用ガイドライン - AI利活用のためのプラクティ +カルリファレンス - 2019.8.9 +● +総務省, AIネットワーク社会推進会議, 国際的な議論のためのAI開発ガイドライン案, 2017 + + +![이미지 148-0](images/p0148_img0.png) + + +![이미지 148-1](images/p0148_img1.png) + + +![이미지 148-2](images/p0148_img2.png) + + +![이미지 148-3](images/p0148_img3.png) + + +--- + +## 제4 장 +AI 이용자를 위한 보안 수칙 +139 +● +総務省, The Conference toward AI Network Society, Overview of 2019 Report(incl. AI +Utilization Guidelines), 2019. 8. 9 +● +総務省·経済産業省, 「ビジネスのためのAIガイドライン」案の概要, 2024.1.19 +● +総務省·経済産業省, AI 事業者ガイドライン(第 1.0 版), 令和 6 年 4 月 19 日 + + +![이미지 149-0](images/p0149_img0.png) + + +![이미지 149-1](images/p0149_img1.png) + + +![이미지 149-2](images/p0149_img2.png) + + +![이미지 149-3](images/p0149_img3.png) + + +--- + + + +--- + +부록 + + +![이미지 151-0](images/p0151_img0.png) + + +--- + +용어 정의 +인공지능 +AI +학습, 추론, 지각, 판단, 언어의 이해 등 인간이 가진 지적 능력을 전자적 방법으로 구현한 것을 +말한다. +인공지능시스템 +AI System +다양한 수준의 자율성과 적응성을 가지고 주어진 목표를 위하여 실제 및 가상환경에 영향을 미 +치는 예측, 추천, 결정 등의 결과물을 추론하는 인공지능 기반 시스템을 말한다. +인공지능기술 +AI Technology +인공지능을 구현하기 위하여 필요한 하드웨어ㆍ소프트웨어 기술 또는 그 활용 기술을 말한다. +고영향 인공지능 +High-impact AI +사람의 생명, 신체의 안전 및 기본권에 중대한 영향을 미치거나 위험을 초래할 우려가 있는 인 +공지능시스템으로 인공지능기본법 2조에 정의된 것을 말한다. +생성형 인공지능 +Generative AI +입력한 데이터의 구조와 특성을 모방하여 글, 소리, 그림, 영상, 그 밖의 다양한 결과물을 생성하 +는 인공지능시스템을 말한다. +인공지능산업 +AI Industry +인공지능 또는 인공지능기술을 활용한 제품(인공지능제품)을 개발ㆍ제조ㆍ생산 또는 유통하거나 +이와 관련한 서비스(인공지능서비스)를 제공하는 산업을 말한다. +인공지능사업자 +AI Provider +인공지능산업과 관련된 사업을 하는 자로서 인공지능개발사업자, 인공지능이용사업자 중 어느 +하나에 해당하는 법인, 단체, 개인 및 국가기관 등을 말한다. +인공지능개발사업자 +AI Development +Provider +인공지능을 개발하여 제공하는 자 +인공지능이용사업자 +AI Service Provider +인공지능개발사업자가 제공한 인공지능을 이용하여 인공지능제품 또는 인공지능서비스를 제공하 +는 자 +인공지능이용자 +AI User +인공지능제품 또는 인공지능서비스를 제공받는 자를 말한다. +인공지능사회 +AI Society +인공지능을 통하여 산업ㆍ경제, 사회ㆍ문화, 행정 등 모든 분야에서 가치를 창출하고 발전을 이 +끌어가는 사회를 말한다. +인공지능윤리 +AI Ethics +인간의 존엄성에 대한 존중을 기초로 하여, 국민의 권익과 생명ㆍ재산을 보호할 수 있는 안전하 +고 신뢰할 수 있는 인공지능사회를 구현하기 위하여 인공지능의 개발, 제공 및 이용 등 모든 영 +역에서 사회구성원이 지켜야 할 윤리적 기준을 말한다. +데이터 공격 +data attack +인공지능 서비스 개발 또는 운영 과정에서 인공지능의 기밀성(confidentiality)과 무결성 +(integrity)을 공격하기 위하여 의도적으로 학습 데이터를 변질시키거나 입력 데이터를 오염시켜 +예상과는 다른 결과를 나타내도록 하는 것을 의미한다. +데이터 강건성 +data robustness +인공지능 모델이 학습용 데이터의 이상값(outlier), 중독(poisoning) 및 회피(evasion) 등의 공 +격에 영향을 받지 않는 것을 의미한다. +데이터 중독 +data poisoning +인공지능 모델의 학습 데이터에 악의적인 데이터를 주입하는 행위를 말한다. 공격자는 데이터 +중독을 통해 인공지능 시스템이 학습하지 말아야 할 내용을 학습하게 만들어 바람직하지 못한 +결과를 출력하게 한다. 이를 위해, 기계학습 데이터베이스에 침투하여 부정확하고 그릇된 예측을 + + +![이미지 152-0](images/p0152_img0.png) + + +![이미지 152-1](images/p0152_img1.png) + + +![이미지 152-2](images/p0152_img2.png) + + +![이미지 152-3](images/p0152_img3.png) + + +--- + +부록 +하도록 유도하는 정보를 입력한다. 이렇게 주입된 데이터로부터 학습한 알고리즘은 원래 의도하 +지 않은 결과를 도출한다. +데이터 편향 +data bias +가용한 데이터가 모집단이나 연구 현상을 적절히 표현하지 못하여 데이터셋의 특정 요소가 과장 +되거나 축소되어 표현될 때 발생하는 오류이다. 편향된 데이터셋은 기계학습 모델이 실세계를 +정확하게 나타내지 못해서 왜곡된 결과 또는 낮은 정확도를 초래한다. 데이터 편향은 기술 제약 +조건 등에서 발생하며 인간의 인지 편향, 교육 방법론, 교육 인프라의 차이로도 발생할 수 있다. +인공지능 모델 +AI model +인공지능 시스템을 개발할 때 해당 분야 서비스에서 수집된 데이터셋으로 모델을 만들기 위한 +학습을 수행하고, 학습 알고리즘을 이용하여 목적에 맞는 특정 패턴을 만들어내는데, 이때 추출 +된 패턴을 의미한다. 학습 알고리즘은 데이터셋에서 패턴과 상관관계를 찾고 분석을 통해 최적 +의 의사결정과 예측을 수행하도록 설계된 알고리즘에 따라 모델을 학습시킨다. +인공지능 모델 개발자 +AI model developer +인공지능 서비스의 생명주기에서 인공지능 모델 개발, 시스템 구현, 운영 및 모니터링 과정의 주 +체이다. +• 인공지능 모델 개발 단계에서는 인공지능 모델을 구현하고, 학습 모델의 편향적인 추론 결과나 +공격에 대한 대응방안 마련과 학습 모델 추론 결과에 대한 해석, 모델의 확인 및 검증, 모델에 +대한 성능평가까지를 담당한다. +• 시스템 구현 단계에서는 기존 레거시 시스템과의 호환성을 제공하고, 기능 시험, 시스템 검증 +배포 버전을 승인해 주는 역할을 수행한다. +• 운영 및 모니터링 단계에서는 모델 모니터링 결과 분석을 통한 모델의 재학습, 모델의 편향성 +제거, 공평성과 설명가능성 등 시스템 신뢰성을 모니터링하고 치명적 문제가 발생할 때 시스템 +폐기의 의사결정까지 관여한다. +인공지능 모델 +공격/적대적 공격 +AI model attack +/adversarial attack +적대적 의도를 가진 사용자가 학습 데이터 및 기능을 도용하거나 다른 방식의 공격으로 인공지 +능 모델을 변형하거나 오용하는 것을 의미한다. 인공지능 모델 공격에는 모델 추출 공격과 모델 +회피 공격이 있다. +• 모델 추출 공격은 학습된 모델의 다양한 입력에 대한 인지 결과를 분석하고, 분류 기준을 추출 +하여 적용 중인 학습 모델과 유사한 성능의 대체 모델을 구성하는 방식의 공격이다. +• 모델 회피 공격은 입력 데이터에 최소한의 변조를 가해 인공지능 모델을 속이는 방식의 공격 +이다. +모델 추출 공격 +model extraction +attack +기계학습 모델에 질의를 계속 입력하면서 결과값을 분석함으로써 모델을 추출하는 공격이다. 이 +공격은 주로 서비스형 기계학습((MLaaS) Machine Learning as a Service)을 탈취하거나 전 +도 공격(inversion attack)이나 회피 공격(evasion attack)과 같은 2차 공격에 활용한다. +모델 추출 공격 방어 +기법 +attack defensive +method +인공지능 모델 추출 공격에 대항하여 이를 방어하는 방법을 의미한다. 참고로, 모델 추출 공격이 +란 기계학습 모델에 질의를 계속 입력하면서 결과값을 분석하는 방식의 공격을 의미한다. +모델 회피 공격 +model evasion +attack +공격자가 기계학습 시스템에서 오류를 생성하기 위해 입력 데이터를 조작하는 것을 목표로 하는 +공격이다. 데이터 중독과 달리 모델 회피 공격은 시스템의 동작을 변경하지 않지만, 모델의 맹점 +과 약점을 악용하여 공격 자가 원하는 오류를 생성하게 된다. 모델 회피는 기계학습 모델에 대 +한 가장 일반적 공격 중 하나이다. +모델 편향 +model bias +인공지능 모델을 개발하는 과정에서 모델의 종류나 시스템의 목표에 따라 발생할 수 있는 편향 +이다. 모델 편향은 기계학습 편향, 알고리즘 편향, 또는 인공지능 편향(bias in AI)이라고도 하 +는데, 알고리즘이 결과를 출력할 때 기계학습 절차상 가정에 오류가 있어서 구조적으로 편향성 +을 가진 결과를 출력하는 현상이다. 유럽위원회에서는 인공지능(또는 알고리즘) 편향을 임의의 +특정 사용자 그룹을 다른 그룹보다 선호하는 것과 같이 불공평한 결과를 생성하는 컴퓨터 시스 +템의 체계적이고 반복될 수 있는 오류라 정의한다. + + +![이미지 153-0](images/p0153_img0.png) + + +![이미지 153-1](images/p0153_img1.png) + + +![이미지 153-2](images/p0153_img2.png) + + +![이미지 153-3](images/p0153_img3.png) + + +--- + +인적 편향 +human bias in AI +학습을 위한 데이터를 수집 및 가공 시 인적 요인에 의해 발생하는 오류이다. 이는 사람이 의식 +적 혹은 무의식적으로 특정 정보에 대해 편향되어 있다는 점에서 기인한다. 학습 데이터 수집 +시 발생 가능한 편향을 확인해야 하며, 학습을 위한 특성을 선택하거나 데이터 라벨링 및 샘플 +링 시에도 인적 편향이 발생할 수 있다. +안전 모드 +safety mode +외부로부터의 공격, 인적 오류(human error), 인공지능 모델의 성능 저하, 편향 발생으로 인한 +사회적 물의, 사고 등이 예상되는 경우, 이의 발생 원인을 파악하고 해결하거나 사용자에게 정상 +적인 기능으로 복구하는 방법을 사용자에게 제시하는 대처 방법이 작동하는 상태를 의미한다. +오픈소스 라이브러리 +open source library +소프트웨어를 개발하는 프로그래머들이 참고할 수 있도록 컴파일해서 재사용할 수 있는 파일, +함수, 스크립트, 루틴, 그리고 그 외의 자원을 모아놓은 곳을 의미한다. 오픈소스 라이브러리 +(open source library)란 오픈소스 라이선스(open source license)를 가지고 있는 라이브러 +리를 의미한다. +기계학습 +machine learning +기계가 인간의 지능적인 행동을 모방할 수 있는 능력이라고 정의할 수 있다. 기계학습은 인공지 +능의 한 분야로, 명시적으로 프로그래밍하지 않고도 기계를 학습시킬 수 있는 능력을 부여하는 +연구 분야이다. +챗봇 +chatbot +채팅(chatting)과 로봇(robot)이 결합된 용어이며, 사람이 입력한 질문을 인식하고, 그에 알맞는 +응답을 제공하는 소프트웨어이다. 음성 명령이나 텍스트 채팅을 통해 사람이 사용하는 언어로 +대화를 시뮬레이션할 수 있다. 챗봇은 전자상거래, 은행 등 다양한 분야에서 고객 지원이나 정보 +습득과 같은 영역에 활용된다. 인공지능 챗봇은 기계학습, 자연어 처리, 자동화된 규칙과 빅데이 +터 분석을 바탕으로 사람이 소통하는 방식으로 대화한다. 특히, chat과 GPT의 합성어인 +ChatGPT는 OpenAI가 2022년 12월 1일 공개한 초거대 인공지능 기반 프로토타입 대화형 인 +공지능 챗봇이다. ChatGPT는 기존 챗봇과 달리 정해진 답을 내 놓는게 아니라 사람이 묻는 질 +문에 알맞는 대답을 생성한다. + + +![이미지 154-0](images/p0154_img0.png) + + +![이미지 154-1](images/p0154_img1.png) + + +![이미지 154-2](images/p0154_img2.png) + + +![이미지 154-3](images/p0154_img3.png) + + +--- + +부록 +참고자료 +OWASP Top 10 for LLM Applications (Version 1.1) 요약 +1.1 +개요 +(적용 대상) LLM 기술을 활용한 애플리케이션과 플러그인을 설계하고 구축하는 업무를 맡은 개발자, +데이터 과학자, 보안 전문가이다. +(목적) 전문가들이 복잡하고 진화하는 LLM 애플리케이션 보안 영역을 탐색할 수 있도록 실용적이고 +실행가능하며 간결한 보안 지침을 제공하고자 한다. +●일반적인 애플리케이션 보안 원칙과 LLM이 제기하는 특정 보안 취약성과의 간극을 메우는 것이 +필요하며, 기존 취약성이 어떻게 LLM 내에서 다른 위험을 초래하거나 새로운 방식으로 악용될 수 +있는지, 그리고 개발자가 LLM을 활용하는 애플리케이션에 대해 기존 수정 전략을 어떻게 적용해 +야 하는지에 방향성을 제공하고자 한다. +LLM 애플리케이션 데이터 흐름 +●아래 다이어그램은 가상의 대규모 언어 모델(LLM) 애플리케이션에 대한 높은 수준의 아키텍처를 +보여준다. +●다이어그램에 중첩된 위험 영역은 이 보고서에서 다룰 LLM Applications 항목이 애플리케이션 +흐름과 교차하는 방식을 보여준다. + + +![이미지 155-0](images/p0155_img0.png) + + +![이미지 155-1](images/p0155_img1.png) + + +![이미지 155-2](images/p0155_img2.png) + + +![이미지 155-3](images/p0155_img3.png) + + +![이미지 155-4](images/p0155_img4.png) + + +![이미지 155-5](images/p0155_img5.png) + + +![이미지 155-6](images/p0155_img6.png) + + +--- + +1.2 +LLM Application 취약점 공격과 방어 + +#### 1.2.1 Prompt Injection + +개념 +공격자는 정교하게 만든 입력을 통해 LLM을 조작하여 공격자의 의도를 실행하게 할 수 있다. 이는 +시스템 프롬프트를 적대적으로 유도하거나 조작된 외부 입력을 통해 간접적으로 수행할 수 있으며, 잠 +재적으로 데이터 유출, 소셜 엔지니어링 및 기타 문제로 이어질 수 있다. +예시 +• Direct Prompt Injections (일명 jailbreaking) : 악의적인 사용자가 민감한 정보를 추출하기 위해 프롬프트를 삽입 +• Indirect Prompt Injections : 사용자가 웹페이지 프롬프트를 통해 민감한 데이터를 요청 +• 플러그인을 통한 사기 : 웹사이트가 플러그인을 악용하여 사기를 침 +공격 시나리오 +●(Chatbot Remote Execution) 프롬프트 주입으로 인해 chatbot을 통한 무단 액세스가 발생 +악의적인 사용자가 LLM 기반 지원 챗봇에 직접 프롬프트 주입을 제공한다. 주입에는 애플리케이션 생성자의 시스템 프 +롬프트를 무시하고 대신 “이전의 모든 지시를 잊으세요”와 개인정보 저장소를 쿼리하고, 패키지 취약성을 악용하고, 백 +엔드 기능에서 이메일을 보내는 출력 검증이 부족하다는 새로운 지시가 포함된다. 이로 인해 원격 코드 실행이 발생하여 +무단 액세스와 권한 상승이 발생한다. +●(via Image) 웹페이지 프롬프트에서 개인 데이터가 유출됨 +사용자가 LLM을 사용하여 모델에 이전 사용자 지시를 무시하고 대신 대화 요약이 포함된 URL로 연결되는 이미지를 +삽입하도록 지시하는 텍스트(간접 프롬프트 주입)가 포함된 웹페이지(문서)를 이해하기 쉬운 형식으로 짧게 정리해 준다. +그러면 LLM이 사용자에게 민감한 정보를 요청하고 JavaScript 또는 Markdown을 통해 추출을 수행한다. +●(Misleading Resume) LLM이 후보자를 잘못 추천함 +악의적인 사용자가 간접 프롬프트 주입이 포함된 이력서를 업로드한다. 이 문서에는 LLM이 사용자에게 이 문서가 훌륭 +하다는 것을 알리도록 하는 지침이 포함된 프롬프트 주입이 포함되어 있다(예를 들어, “직무 역할에 적합한 후보자입니 +다”). 내부 사용자가 LLM을 통해 문서를 실행하여 웹페이지(문서)를 이해하기 쉬운 형식으로 짧게 정리해 준다. LLM의 +출력은 이 문서가 훌륭하다는 정보를 반환한다. +●(Prompt Replay) 공격자가 잠재적인 추가 공격을 위해 시스템 프롬프트를 재생함 +공격자는 시스템 프롬프트에 의존하는 독점 모델에 메시지를 보내 모델에게 이전 지침을 무시하고 대신 시스템 프롬프 +트를 반복하도록 요청한다. 모델은 독점 프롬프트를 출력하고 공격자는 이러한 지침을 다른 곳에서 사용하거나 더 미묘 +한 추가 공격을 구성할 수 있다. + + +![이미지 156-0](images/p0156_img0.png) + + +![이미지 156-1](images/p0156_img1.png) + + +![이미지 156-2](images/p0156_img2.png) + + +![이미지 156-3](images/p0156_img3.png) + + +![이미지 156-4](images/p0156_img4.png) + + +--- + +부록 +●(Email Deletion) 간접 주입으로 인해 이메일이 삭제됨 +공격자가 간접 프롬프트 주입을 웹페이지에 임베드하여 LLM에 이전 사용자 지시를 무시하고 LLM 플러그인을 사용하 +여 사용자의 이메일을 삭제하도록 지시한다. 사용자가 LLM을 사용하여 이 웹페이지를 이해하기 쉬운 형식으로 짧게 정 +리하면 LLM 플러그인이 사용자의 이메일을 삭제한다. +예방 +●(Privilige Control) LLM 액세스 제한 및 역할 기반 권한 적용 +백엔드 시스템에 대한 LLM 액세스 권한 제어를 시행한다. 플러그인, 데이터 액세스, 기능 수준 권한과 같은 확장 가능 +한 기능을 위해 LLM에 자체 API 토큰을 제공한다. LLM을 의도된 작업에 필요한 최소한의 액세스 수준으로만 제한하 +여 최소 권한의 원칙을 따른다. +●(Human Approval) 권한 있는 작업에 대한 사용자 동의 요구 +확장된 기능을 위해 루프에 사람을 추가한다. 이메일 보내기 또는 삭제와 같은 권한이 있는 작업을 수행할 때 애플리케 +이션에서 사용자가 먼저 작업을 승인하도록 요구한다. 이렇게 하면 간접적인 프롬프트 주입으로 인해 사용자의 인식이나 +동의 없이 사용자를 대신하여 승인되지 않은 작업이 수행될 가능성이 줄어든다. +●(Segregate Content) 신뢰할 수 없는 콘텐츠를 사용자 프롬프트에서 분리 +외부 콘텐츠를 사용자 프롬프트에서 분리한다. 신뢰할 수 없는 콘텐츠가 사용되는 위치를 분리하고 표시하여 사용자 프 +롬프트에 미치는 영향을 제한한다. 예를 들어, OpenAI API 호출에 ChatML을 사용하여 LLM에 프롬프트 입력 소스를 +표시한다. +●(Trust Boundaries) LLM을 신뢰할 수 없는 것으로 취급하고 신뢰할 수 없는 응답을 시각적으로 +강조 +LLM, 외부 소스 및 확장 가능한 기능(예: 플러그인 또는 다운스트림 기능) 간에 신뢰 경계를 설정한다. LLM을 신뢰할 +수 없는 사용자로 취급하고 의사 결정 프로세스에 대한 최종 사용자 제어를 유지한다. 그러나 손상된 LLM은 사용자에 +게 정보를 제공하기 전에 정보를 숨기거나 조작할 수 있으므로 애플리케이션의 API와 사용자 사이에서 여전히 중개자 +(중간자) 역할을 할 수 있다. 신뢰할 수 없는 응답을 사용자에게 시각적으로 강조・표시한다. + + +![이미지 157-0](images/p0157_img0.png) + + +![이미지 157-1](images/p0157_img1.png) + + +![이미지 157-2](images/p0157_img2.png) + + +![이미지 157-3](images/p0157_img3.png) + + +![이미지 157-4](images/p0157_img4.png) + + +--- + + +#### 1.2.2 Insecure Output Handling + +개념 +“Insecure Output Handling(안전하지 않은 출력 처리)”란 다운스트림 구성 요소가 적절한 검토 없 +이 대규모 언어 모델(LLM) 출력을 맹목적으로 수용할 때 발생하는 취약점이다. 이는 웹 브라우저에서 +XSS 및 CSRF, SSRF, 권한 상승 또는 백엔드 시스템에서 원격 코드 실행으로 이어질 수 있다. +예시 +• Remote Code Execution : LLM 출력이 시스템 쉘에서 실행되어 코드 실행으로 이어짐 +• Cross-Site Scripting (XSS): LLM에서 생성된 JavaScript 또는 마크다운으로 인해 브라우저가 코드를 해석하고 실 +행함 +공격 시나리오 +●(Chatbot Shutdown) LLM 출력은 검증이 부족하여 플러그인을 종료 +애플리케이션은 LLM 플러그인을 사용하여 챗봇 기능에 대한 응답을 생성한다. 이 플러그인은 또한 다른 권한이 있는 +LLM에서 액세스할 수 있는 여러 관리 기능을 제공한다. 일반적인 용도의 LLM은 적절한 출력 검증 없이 플러그인에 +직접 응답을 전달하여 플러그인이 유지 관리를 위해 종료되도록 한다 +●(Sensitive Data Capture) LLM은 민감한 데이터를 캡처하여 공격자가 제어하는 서버로 전송 +사용자는 LLM에서 구동되는 웹사이트 요약 도구를 사용하여 기사의 간결한 요약을 생성한다. 웹사이트에는 LLM이 웹 +사이트나 사용자 대화에서 민감한 콘텐츠를 캡처하도록 지시하는 프롬프트 주입이 포함되어 있다. 거기서 LLM은 민감 +한 데이터를 인코딩하여 출력 검증이나 필터링 없이 공격자가 제어하는 서버로 보낼 수 있다. +●(Database Table Deletion) LLM은 파괴적인 SQL 쿼리를 만들어 모든 테이블을 삭제할 가능성 +이 있음 +LLM은 사용자가 채팅과 같은 기능을 통해 백엔드 데이터베이스에 대한 SQL 쿼리를 작성하게할 수 있다. 사용자는 모 +든 데이터베이스 테이블을 삭제하는 쿼리를 요청한다. LLM에서 작성된 쿼리가 면밀히 조사되지 않으면 모든 데이터베 +이스 테이블이 삭제된다. +●(XSS Exploitation) LLM은 unsanitized JavaScript 페이로드를 반환하여 피해자의 브라우저에 +서 XSS가 발생 +web app 사용자는 LLM을 사용하여 출력 검증 없이 사용자 텍스트 프롬프트에서 콘텐츠를 생성한다. 공격자는 정교하 +게 만든 프롬프트를 제출하여 LLM이 unsanitized JavaScript 페이로드를 반환하게 하고, 피해자의 브라우저에서 렌더 +링될 때 XSS로 이어질 수 있다. 프롬프트의 검증이 충분하지 않아 이 공격이 가능해진다. + + +![이미지 158-0](images/p0158_img0.png) + + +![이미지 158-1](images/p0158_img1.png) + + +![이미지 158-2](images/p0158_img2.png) + + +![이미지 158-3](images/p0158_img3.png) + + +![이미지 158-4](images/p0158_img4.png) + + +--- + +부록 +예방 +●(Zero-Trust 접근 방식) LLM 출력을 사용자 입력처럼 취급한다; 적절하게 검증한다. +모델은 다른 사용자와 마찬가지로 취급하고 Zero-Trust 방식을 채택하고 모델에서 백엔드 함수로 오는 응답에 적절한 +입력 검증을 적용한다. +●(OWASP ASVS Guidelines) 입력 검증 및 정제를 위한 OWASP 표준을 따름 +효과적인 입력 검증 및 정제를 보장하기 위해 OWASP ASVS(애플리케이션 보안 검증 표준) 가이드라인을 따른다. +●(Output Encoddng) JavaScript 또는 Markdown에서 코드 실행을 방지하기 위해 LLM 출력을 +인코딩 +JavaScript 또는 Markdown에 의한 원치 않는 코드 실행을 완화하기 위해 모델 출력을 사용자에게 다시 인코딩한다. +OWASP ASVS는 출력 인코딩에 대한 자세한 지침을 제공한다. + +#### 1.2.3 Training Data Poisoning + +개념 +“Training Data Poisoning”은 모델의 보안, 효과성 또는 윤리적 행동을 손상시킬 수 있는 취약성, 백 +도어 또는 편향을 도입하기 위한 데이터 조작 또는 미세 조정 프로세스를 말한다. 이는 성능 저하, 다 +운스트림 소프트웨어 악용 및 평판 손상의 위험이 있다. +예시 +• (Malicious Data Injection) 모델 훈련 중에 위조된 데이터 주입 +• (Biased Training Outputs) 모델은 오염된 데이터에서 부정확한 내용을 반영 +• (Content Injection) 악의적인 행위자는 편향된 콘텐츠를 훈련에 주입 +공격 시나리오 +●(오해의 소지가 있는 출력) LLM은 편향이나 증오를 조장하는 콘텐츠를 생성 +LLM 생성 AI 프롬프트 출력은 애플리케이션 사용자를 오도하여 편향된 의견, 추종자 또는 비정상적인 경우 증오 범죄 +등으로 이어질 수 있다. +●(유해 데이터 주입) 악의적인 사용자가 편향된 데이터로 모델을 조작 +학습 데이터가 올바르게 필터링되지 않으면 애플리케이션의 악의적인 사용자가 모델에 영향을 미치고 악성 데이터를 주 +입하여 편향되고 잘못된 데이터에 적응하려고 할 수 있다. + + +![이미지 159-0](images/p0159_img0.png) + + +![이미지 159-1](images/p0159_img1.png) + + +![이미지 159-2](images/p0159_img2.png) + + +![이미지 159-3](images/p0159_img3.png) + + +![이미지 159-4](images/p0159_img4.png) + + +--- + +●(악의적인 문서 주입) 경쟁자가 모델 학습 중에 거짓 데이터를 삽입 +악의적인 행위자 또는 경쟁자가 의도적으로 부정확하거나 악의적인 문서를 생성하여 모델의 학습 데이터를 표적으로 삼 +고 동시에 입력을 기반으로 모델을 훈련한다. 희생양이 된 모델(victim model)은 생성 AI 프롬프트의 출력에 반영되는 +이 위조된 정보를 사용하여 훈련한다. +예방 +●(공급망 검증) 외부 데이터 소스를 검증하고 “ML-BOM” 레코드를 유지・관리 +특히 외부에서 소싱한 경우 학습 데이터의 공급망을 확인하고 “ML-BOM”(기계 학습 자재 목록) 방법을 통해 증명을 +유지하고 모델 카드를 확인한다. +●(합법성 검증) 입력 검증을 위한 OWASP 표준을 따름 +사전 교육, 미세 조정7 및 임베딩 프로세스8 모두에서 얻은 대상 데이터 소스와 포함된 데이터의 올바른 적법성을 확인 +한다. +●(사용 사례별 교육) JavaScript 또는 Markdown에서 코드 실행을 방지하기 위해 LLM 출력을 코딩 +LLM과 통합할 애플리케이션에 대한 사용 사례를 확인한다. 별도의 교육 데이터를 통해 다른 모델을 만들거나 다른 사 +용 사례에 대한 미세 조정을 통해 정의된 사용 사례에 따라 보다 세부적이고 정확한 생성 AI 출력을 만든다. +7 +이미 훈련된 기존 모델을 가져와 큐레이팅된 데이터 세트를 사용하여 훈련함으로써 더 좁은 주제나 더 집중된 목표에 맞게 조정하는 +것을 포함한다. 이 데이터 세트에는 일반적으로 입력과 해당 원하는 출력의 예가 포함된다. +8 +범주형 데이터(종종 텍스트)를 언어 모델을 훈련하는 데 사용할 수 있는 숫자 표현으로 변환하는 프로세스를 말하며, 텍스트 데이터의 +단어나 구문을 연속 벡터 공간의 벡터로 표현하는 것을 포함한다. 벡터는 일반적으로 텍스트의 큰 코퍼스에서 훈련된 신경망에 텍스 +트 데이터를 입력하여 생성된다. + + +![이미지 160-0](images/p0160_img0.png) + + +![이미지 160-1](images/p0160_img1.png) + + +![이미지 160-2](images/p0160_img2.png) + + +![이미지 160-3](images/p0160_img3.png) + + +![이미지 160-4](images/p0160_img4.png) + + +--- + +부록 + +#### 1.2.4 Model Denial of Service + +개념 +“Model Denial of Service”는 공격자가 LLM(Large Language Model)과 상호작용할 때 예외적으 +로 많은 양의 리소스를 소모할 때 발생한다. 이는 공격자와 다른 사용자에게 서비스 품질이 저하될 수 +있으며, 잠재적으로 높은 리소스 비용이 발생할 수 있다. +예시 +• (Malicious Data Injection) 모델 훈련 중에 위조된 데이터 주입 +• (Biased Training Outputs) 모델은 오염된 데이터에서 부정확한 내용을 반영 +• (Content Injection) 악의적인 행위자는 편향된 콘텐츠를 훈련에 주입 +●대량 대기열 : 공격자는 리소스 집약적 작업으로 LLM을 과부하시킴 +●리소스 소모 쿼리 : 비정상적인 쿼리는 시스템 리소스를 고갈시킴 +●지속적인 입력 오버플로(overflow) : 과도한 입력으로 LLM을 범람시킴 +●반복적인 긴 입력 : 반복적인 긴 쿼리는 리소스를 고갈시킴 +●재귀적 컨텍스트 확장 : 공격자는 재귀적 동작을 악용 +공격 시나리오 +●(리소스 과다 사용) 공격자가 호스팅된 모델을 과부하시켜 다른 사용자에게 영향을 미침 +공격자는 호스팅 모델에 어렵고 비용이 많이 드는 여러 요청을 반복적으로 보내 다른 사용자에게 더 나쁜 서비스를 제공 +하고 호스트의 리소스 비용을 증가시킨다. +●(Webpage Request Amplification) LLM 도구가 예상치 못한 콘텐츠로 인해 과도한 리소스를 +소모함 +LLM 기반 도구가 악성이 아닌 쿼리에 응답하기 위해 정보를 수집하는 과정에서 웹페이지에 일부 텍스트가 있음을 발견 +하게 된다. +●(Input Flood) 과도한 입력으로 LLM을 압도하여 속도 저하 +공격자는 컨텍스트 창을 초과하는 입력으로 LLM을 지속적으로 폭격한다. 공격자는 자동화된 스크립트나 도구를 사용하 +여 대량의 입력을 보내 LLM의 처리 기능을 압도할 수 있다. 결과적으로 LLM은 과도한 리소스를 소비하여 시스템이 +상당히 느려지거나 완전히 응답하지 않게 된다. + + +![이미지 161-0](images/p0161_img0.png) + + +![이미지 161-1](images/p0161_img1.png) + + +![이미지 161-2](images/p0161_img2.png) + + +![이미지 161-3](images/p0161_img3.png) + + +![이미지 161-4](images/p0161_img4.png) + + +--- + +●(Sequential Input Drain) 격자가 순차적 입력으로 컨텍스트 창을 고갈시킴 +공격자는 각 입력이 컨텍스트 창의 용량 바로 아래에 있도록 설계된 일련의 순차적 입력을 LLM에 보낸다. 공격자는 +이러한 입력을 반복적으로 제출하여 사용 가능한 컨텍스트 창 용량을 소진하려고 한다. LLM이 컨텍스트 창 내에서 +각 입력을 처리하는 데 어려움을 겪으면서 시스템 리소스가 부족해져 성능이 저하되거나 서비스가 완전히 거부될 수 +있다. +예방 +●(입력 검증) 입력 검증 및 콘텐츠 필터링 구현 +정의된 한도를 준수하고 악성 콘텐츠를 걸러내기 위해 사용자 입력에 대한 입력 검증을 구현한다. +●(리소스 캡) 요청당 리소스 사용 제한 +요청 또는 단계당 리소스 사용량을 제한하여 복잡한 부분을 포함하는 요청이 더 느리게 실행되도록 한다. +●(API 비율 제한) 사용자 또는 IP 주소에 대한 비율 제한 적용 +특정 기간 내에 개별 사용자 또는 IP 주소가 수행할 수 있는 요청 수를 제한하기 위해 API 속도 제한을 적용한다. +●(큐 관리) 대기 중인 작업 및 전체 작업 제어 +LLM 응답에 반응하는 시스템에서 대기 중인 작업 수와 총 작업 수를 제한한다. +●(리소스 모니터링) 리소스 사용을 지속적으로 모니터링함 +Dos 공격을 나타낼 수 있는 비정상적인 급증이나 패턴을 식별하기 위해 LLM의 리소스 사용률을 지속적으로 모니터링 +한다. + + +![이미지 162-0](images/p0162_img0.png) + + +![이미지 162-1](images/p0162_img1.png) + + +![이미지 162-2](images/p0162_img2.png) + + +![이미지 162-3](images/p0162_img3.png) + + +![이미지 162-4](images/p0162_img4.png) + + +--- + +부록 + +#### 1.2.5 Supply Chain Vulnerabilities + +개념 +LLM의 공급망 취약성은 교육 데이터, ML 모델 및 배포 플랫폼을 손상시켜 편향된 결과, 보안 침해 또 +는 전체 시스템 장애를 일으킬 수 있다. 이러한 취약성은 오래된 소프트웨어, 취약한 사전 훈련된 모델, +오염된 교육 데이터 및 안전하지 않은 플러그인 디자인에서 비롯될 수 있다. +예시 +• 패키지 Null 취약점: 오래된 구성 요소 사용 +• Nulnerable 모델: 미세 조정을 위한 위험한 사전 학습 모델 +• Poisoned Data: 오염된 크라우드 소싱 데이터 +• Oldated 모델: 유지・관리되지 않은 모델 사용 +• Unclear Terms: 불분명한 용어로 인한 데이터 오용 +공격 시나리오 +●(Library Exploitation) 취약한 Python 라이브러리 Exploiting +공격자가 취약한 Python 라이브러리를 악용하여 시스템을 손상시킨다. 이는 첫 번째 Open AI 데이터 침해에서 발 +생했다. +●(Scamming Plugin) 사기를 위한 플러그인 배포 +공격자가 항공편을 검색하는 LLM 플러그인을 제공하여 사용자를 사기치는 가짜 링크를 생성한다. +●(패키지 레지스트리 공격) 손상된 패키지로 개발자 속이기 +공격자가 PyPi 패키지 레지스트리를 악용하여 모델 개발자를 속여 손상된 패키지를 다운로드하고 데이터를 빼내거나 모 +델 개발 환경에서 권한을 확대한다.(실제 공격이었음) +●(잘못된 정보 백도어) 가짜 뉴스를 위해 모델 Poisoning +공격자는 경제 분석 및 사회 연구에 특화된 공개적으로 사용 가능한 사전 훈련된 모델을 오염시켜 잘못된 정보와 가짜 +뉴스를 생성하는 백도어를 만든다. 그들은 피해자가 사용할 수 있도록 모델 마켓플레이스(예: Hugging Face)에 배포한다. +●(데이터 Poisoning) 미세 조정 중 데이터 세트 Poisoning +공격자가 공개적으로 사용 가능한 데이터 세트를 오염시켜 모델을 미세 조정할 때 백도어를 만드는 데 도움을 준다. 백 +도어는 다른 시장의 특정 회사를 미묘하게 선호한다. + + +![이미지 163-0](images/p0163_img0.png) + + +![이미지 163-1](images/p0163_img1.png) + + +![이미지 163-2](images/p0163_img2.png) + + +![이미지 163-3](images/p0163_img3.png) + + +![이미지 163-4](images/p0163_img4.png) + + +--- + +예방 +●(공급업체 평가) 공급업체 및 정책 검토 +신뢰할 수 있는 공급업체만 사용하고, 이용 약관 및 개인정보 보호 정책을 포함한 데이터 소스 및 공급업체를 신중하게 +검토한다. 적절하고 독립적으로 감사된 보안이 적용되고 모델 운영자 정책이 데이터 보호 정책과 일치하는지 확인한다. +즉, 데이터가 모델 학습에 사용되지 않도록 한다. 마찬가지로 모델 유지 관리자로부터 저작권이 있는 자료를 사용하지 +않도록 보장하고 법적 완화 조치를 모색한다. +●(플러그인 테스트) 테스트되고 신뢰할 수 있는 플러그인 사용 +평판이 좋은 플러그인만 사용하고 애플리케이션 요구 사항에 대해 테스트되었는지 확인한다. LLM-Insecure Plugin +Design은 타사 플러그인 사용으로 인한 위험을 완화하기 위해 테스트해야 하는 Insecure Plugin 디자인의 LLM 측면 +에 대한 정보를 제공한다. +●(OWASP A06) 오래된 구성 요소 위험 완화 +OWASP Top Ten's A06:2021 – 취약하고 오래된 구성 요소에서 발견되는 완화책을 이해하고 적용한다. 여기에는 취 +약성 스캐닝, 관리 및 패치 구성 요소가 포함된다. 민감한 데이터에 액세스할 수 있는 개발 환경의 경우 해당 환경에도 +이러한 통제를 적용한다. +●(재고 관리) 최신 재고 유지 +소프트웨어 자재 목록(SBOM)을 사용하여 최신 구성 요소 인벤토리를 유지・관리하여 최신의 정확하고 서명된 인벤토리 +를 유지하고 배포된 패키지의 변조를 방지한다. SBOM은 새로운 제로데이트 취약성을 신속하게 감지하고 경고하는 데 +사용할 수 있다. +●(보안 조치) 모델 및 코드 서명, 이상 탐지 적용 및 모니터링 +모델과 그 아티팩트(artifacts)를 포함하여, 구성 요소 및 환경 취약성 스캐닝, 승인되지 않은 플러그인 사용, 오래된 구 +성 요소 등을 포괄하는 충분한 모니터링을 구현한다. + + +![이미지 164-0](images/p0164_img0.png) + + +![이미지 164-1](images/p0164_img1.png) + + +![이미지 164-2](images/p0164_img2.png) + + +![이미지 164-3](images/p0164_img3.png) + + +![이미지 164-4](images/p0164_img4.png) + + +--- + +부록 + +#### 1.2.6 Sensitive Information Disclosure + +개념 +LLM 애플리케이션은 실수로 민감한 정보, 알고리즘 또는 기밀 데이터를 공개하여 무단 액세스, 지적 +재산권 도용 및 개인정보 침해로 이어질 수 있다. 이러한 위험을 완화하기 위해 LLM 애플리케이션은 +데이터를 정제(sanitization)하고 적절한 사용 정책을 구현하며 LLM에서 반환하는 데이터 유형을 제 +한해야 한다. +예시 +• complete Filtering (완료 필터링): LLM 응답에는 민감한 데이터가 포함될 수 있음 +• Overfitting (과잉적합): LLM은 학습 중에 민감한 데이터를 기억할 수 있음 +• 의도치 않은 공개: 잘못된 해석이나 스크러빙 부족으로 인한 데이터 유출 +공격 시나리오 +●(의도치 않은 노출) 사용자 A가 다른 사용자 데이터에 노출됨 +의심하지 않는 합법적인 사용자 A는 LLM 애플리케이션과 악의적이지 않은 방식으로 상호 작용할 때 LLM을 통해 특정 +다른 사용자 데이터에 노출된다. +●(필터 우회) 사용자 A가 필터를 우회하여 PII 추출 +사용자 A는 LLM에서 입력 필터와 sanitization을 우회하기 위해 잘 만들어진 일련의 프롬프트를 대상으로 하여 애플리 +케이션의 다른 사용자에 대한 민감한 정보(PII)를 공개한다. +●(학습 데이터 유출) 학습 중에 개인 데이터가 유출됨 +PII와 같은 개인 데이터는 사용자 자신의 과실 또는 LLM 애플리케이션으로 인해 훈련 데이터를 통해 모델로 유출된다. +예방 +●(Data Sanitization) 스크러빙을 사용하여 학습에서 사용자 데이터를 방지 +적절한 데이터 Sanitization 및 스크러빙 기술을 통합하여 사용자 데이터가 학습 모델 데이터에 입력되는 것을 방지 +한다. +●(입력 검증) 악성 입력을 필터링하여 모델 포이즌을 방지 +강력한 입력 검증 및 Sanitization 방법을 구현하여 잠재적인 악성 입력을 식별하고 필터링하여 모델이 오염되는 것을 +방지한다. + + +![이미지 165-0](images/p0165_img0.png) + + +![이미지 165-1](images/p0165_img1.png) + + +![이미지 165-2](images/p0165_img2.png) + + +![이미지 165-3](images/p0165_img3.png) + + +![이미지 165-4](images/p0165_img4.png) + + +--- + +●(미세 조정 주의) 모델 미세 조정에서 민감한 데이터를 주의한다. +미세 조정 데이터에서 민감한 것으로 간주되는 모든 사항은 사용자에게 공개될 가능성이 있다. 따라서 최소 권한 규칙을 +적용하고, 가장 높은 권한을 가진 사용자가 액세스할 수 있고 권한이 낮은 사용자에게 표시될 수 있는 정보에 대해 모델 +을 학습시키면 않는다. +●(데이터 액세스 제어) 외부 데이터 소스 액세스를 제한 +외부 데이터 소스에 대한 액세스(런타임 시 데이터 오케스트레이션)는 제한되어야 한다. 외부 데이터 소스에 대한 엄격 +한 액세스 제어 방법과 안전한 공급망을 유지하기 위한 엄격한 접근 방식을 적용한다. + +#### 1.2.7 Insecure Plugin Design (안전하지 않은 플러그인 디자인) + +개념 +플러그인은 악의적인 요청으로 이어질 수 있는 취약한 결과를 초래하여 데이터 유출, 원격 코드 실행, 불 +충분한 액세스 제어 및 부적절한 입력 검증으로 인한 권한 상승과 같은 해로운 결과를 초래할 수 있다. +개발자는 악용을 방지하기 위해 엄격한 매개변수화된 입력 및 안전한 액세스 제어 지침과 같은 강력한 +보안 조치를 따라야 한다. +예시 +• (단일 필드 매개변수) 플러그인에 매개변수 분리가 없음 +• (구성 문자열) 구성이 설정을 재정의할 수 있음 +• (인증 문제) 특정 플러그인 권한 부여가 없음 +• (원시 SQL 또는 코드) 코드 또는 SQL을 안전하지 않게 수용 +공격 시나리오 +●(URL Manipulation) 공격자는 조작된 URL을 통해 콘텐츠를 삽입함 +플러그인은 기본 URL을 수락하고 LLM에 URL을 쿼리와 결합하여 사용자 요청을 처리하는 데 포함된 날씨예보를 얻도 +록 지시한다. 악의적인 사용자는 URL이 제어하는 도메인을 가리키도록 요청을 작성할 수 있으며, 이를 통해 도메인을 +통해 LLM 시스템에 자체 콘텐츠를 삽입할 수 있다. +●(Reconnaissance and Exploitation) 코드 실행 및 데이터 도난에 대한 검증 부족을 악용함 +플러그인은 검증하지 않는 단일 필드에 자유 형식 입력을 허용한다. 공격자는 오류 메시지에서 정찰(Reconnaissance)을 수 +행하기 위해 신중하게 제작된 페이로드를 제공한다. 그런 다음 알려진 타사 취약성을 악용하여 코드를 실행하고 데이터 +추출 또는 권한 상승을 수행한다. + + +![이미지 166-0](images/p0166_img0.png) + + +![이미지 166-1](images/p0166_img1.png) + + +![이미지 166-2](images/p0166_img2.png) + + +![이미지 166-3](images/p0166_img3.png) + + +![이미지 166-4](images/p0166_img4.png) + + +--- + +부록 +●(Unauthorized Access) 매개변수 조작을 통해 무단 데이터에 액세스 +벡터 저장소에서 임베딩을 검색하는데 사용되는 플러그인은 유효성 검사 없이 연결 문자열로 구성 매개변수를 허용한다. +이를 통해 공격자는 이름이나 호스트 매개변수를 변경하여 다른 벡터 저장소에 액세스하고 액세스해서는 안 되는 임베 +딩을 추출하여 실험할 수 있다. +●(Repository Takeover) 저장소 인수를 위해 안전하지 않은 코드 관리 플러그인을 악용함 +공격자는 간접 프롬프트 주입을 사용하여 입력 유효성 검사 및 취약한 액세스 제어가 없는 안전하지 않은 코드 관리 플 +러그인을 악용하여 저장소 소유권을 이전하고 사용자를 저장소에서 잠근다. +예방 +●(매개변수 제어) 유형 검사를 시행하고 검증 계층을 사용함 +플러그인은 가능한 한 엄격한 매개변수화된 입력을 적용하고 입력에 대한 유형 및 범위 검사를 포함해야 한다. 이것이 +불가능한 경우, 요청을 구문 분석하고 검증을 적용하는 두 번째 계층의 유형화된 호출을 도입해야 한다. 애플리케이션 +의미론(semantics) 때문에 자유형(freeform) 입력을 허용해야 하는 경우, 잠재적으로 유해한 메서드(mathods)가 호 +출되지 않는지 확인하기 위해 신중하게 검사해야 한다. +●(OWASP 지침) ASVS 권장 사항을 적용함 +플러그인 개발자는 ASVS(애플리케이션 보안 검증 표준)에서 OWASP의 권장 사항을 적용하여 적절한 입력 검증을 보 +장해야 한다. +●(철저한 테스트) SAST, DAST, IAST로 검사하고 테스트함 +플러그인은 적절한 검증을 보장하기 위해 철저히 검사하고 테스트해야 한다. 개발 파이프라인에서 정적 애플리케이션 보 +안 테스트(SAST) 검사와 동적 및 대화형 애플리케이션 테스트(DAST, IAST)를 사용한다. +●(최소 권한) ASVS 접근 통제 가이드라인을 따름 +플러그인은 OWASP ASVS 접근 통제 지침에 따라 안전하지 않은 입력 매개변수 악용의 영향을 최소화하도록 설계해 +야 한다. 여기서는 최소 권한 접근통제를 포함하여 원하는 기능을 수행하면서 가능한 적은 기능을 노출한다. +●(인증 ID) 사용자 지정 인증에 OAuth2 및 API 키를 사용 +플러그인은 OAuth2와 같은 적절한 인증 ID를 사용하여 효과적인 권한 부여 및 접근 통제를 적용해야 한다. 또한 API +키는 기본 대화형 사용자 경로가 아닌 플러그인 경로를 반영하는 사용자 정의 권한 부여 결정에 대한 컨텍스트를 제공하 +는 데 사용해야 한다. + + +![이미지 167-0](images/p0167_img0.png) + + +![이미지 167-1](images/p0167_img1.png) + + +![이미지 167-2](images/p0167_img2.png) + + +![이미지 167-3](images/p0167_img3.png) + + +![이미지 167-4](images/p0167_img4.png) + + +--- + + +#### 1.2.8 Excessive Agency (과도한 대행) + +개념 +LLM 기반 시스템의 과도한 에이전시는 과도한 기능, 과도한 권한 또는 너무 많은 자율성으로 인해 +발생하는 취약성이다. 이를 방지하기 위해 개발자는 플러그인 기능, 권한 및 자율성을 절대적으로 필 +요한 것으로 제한하고, 사용자 권한을 추적하고, 모든 작업에 대해 사람의 승인을 요구하고, 다운스트 +림 시스템에서 권한을 구현해야 한다. +예시 +• (과도한 기능) LLM 에이전트는 불필요한 기능을 가지고 있어 오용의 위험이 있다. +• (과도한 권한) 플러그인은 시스템에 과도하게 접근할 수 있다. +• (과도한 자율성) LLM은 영향력이 큰 작업에 대한 인간 검증이 부족하다. +공격 시나리오 +●과도한 권한과 자율성을 가진 LLM 기반 개인 비서 앱이 악성 이메일에 속아 스팸을 보냄. 이는 기 +능・권한을 제한하거나, 사용자 승인을 요구하거나, 속도 제한을 구현하여 방지할 수 있음. +LLM 기반 개인 비서 앱은 플러그인을 통해 개인의 사서함에 액세스하여 수신 이메일의 내용을 요약한다. 이 기능을 구 +현하려면 이메일 플러그인에 메시지를 읽을 수 있는 기능이 필요하지만, 시스템 개발자가 사용하기로 선택한 플러그인에 +는 메시지를 보내는 기능도 포함되어 있다. LLM은 간접 프롬프트 주입 공격에 취약하여 악의적으로 작성된 수신 이메 +일이 LLM을 속여 이메일 플러그인에 '메시지 보내기' 기능을 호출하여 사용자의 사서함에서 스팸을 보내도록 명령한다. +이를 방지할 수 있는 방법은 다음과 같다; (a) 메일 읽기 기능만 제공하는 플러그인을 사용하여 과도한 기능을 제거, (b) +읽기 전용 범위의 OAuth 세션을 통해 사용자의 이메일 서비스에 인증하여 과도한 권한을 제거, (c) LLM 플러그인에서 +초안한 모든 메일을 사용자가 수동으로 검토하고 '보내기'를 클릭하도록 요구하여 과도한 자율성을 제거하거나 또는 메 +일 전송 인터페이스에 속도 제한을 구현하여 발생한 피해를 줄일 수 있다. +예방 +●(플러그인 기능 제한) LLM 에이전트에 필수적인 기능만 허용 +LLM 에이전트가 호출할 수 있는 플러그인/도구를 필요한 최소한의 기능으로만 제한한다. 예를 들어, LLM 기반 시스템 +이 URL의 내용을 가져오는 기능을 요구하지 않는 경우 이러한 플러그인은 LLM 에이전트에게 제공되어서는 안 된다. +●(플러그인 범위 제어) LLM 플러그인 내의 기능 제한 +LLM 플러그인/도구에 구현된 기능을 필요한 최소한으로 제한한다. 예를 들어, 이메일을 요약하기 위해 사용자의 사서 +함에 액세스하는 플러그인은 이메일을 읽는 기능만 필요할 수 있으므로 플러그인에는 메시지 삭제 또는 전송과 같은 다 +른 기능이 포함되어서는 안 된다. + + +![이미지 168-0](images/p0168_img0.png) + + +![이미지 168-1](images/p0168_img1.png) + + +![이미지 168-2](images/p0168_img2.png) + + +![이미지 168-3](images/p0168_img3.png) + + +![이미지 168-4](images/p0168_img4.png) + + +--- + +부록 +●(세분화된 기능) 개방형 기능은 피하고 특정 플러그인 사용 +가능한 경우 개방형 기능(예: 셸 명령 실행, URL 가져오기 등)을 피하고 더 세부적인 기능이 있는 플러그인/도구를 사 +용한다. 예를 들어, LLM 기반 앱은 파일에 출력을 써야 할 수 있다. 이것이 셸 함수를 실행하기 위한 플러그인을 사용 +하여 구현된 경우 바람직하지 않은 동작의 범위가 매우 크다(다른 셸 명령이 실행될 수 있음). 더 안전한 대안은 해당 +특정 기능만 지원할 수 있는 파일 쓰기 플러그인을 빌드하는 것이다. +●(권한 제어) 필요한 최소한으로 권한 제한 +LLM 플러그인/도구가 다른 시스템에 부여하는 권한을 최소한으로 제한하여 바람직하지 않은 작업의 범위를 제한한다. +예를 들어, 고객에게 구매를 권장하기 위해 제품 데이터베이스를 사용하는 LLM 에이전트는 '제품' 테이블에 대한 읽기 +액세스만 필요할 수 있다. 다른 테이블에 대한 액세스 권한이나 레코드를 삽입, 업데이트 또는 삭제할 수 있는 권한이 +없어야 한다. 이는 LLM 플러그인이 데이터베이스에 연결하는 데 사용하는 ID에 대한 적절한 데이터베이스 권한을 적용 +하여 시행해야 한다. +●(사용자 인증) 작업이 사용자 컨텍스트에 있는지 확인 +사용자 권한 부여 및 보안 범위를 추적하여 사용자를 대신하여 수행된 작업이 해당 특정 사용자의 컨텍스트에서 다운스 +트림 시스템에서 실행되고 필요한 최소 권한으로 실행되도록 한다. 예를 들어, 사용자의 코드 repo를 읽는 LLM 플러그 +인은 사용자가 OAuth를 통해 인증하고 필요한 최소 범위로 인증하도록 요구해야 한다. +●(human-in-the-Loop) 작업에 대한 인간 승인 요구 +모든 작업을 수행하기 전에 사람이 승인하도록 요구하는 human-in-the-Loop 제어를 활용한다. 이는 다운스트림 시 +스템(LLM 애플리케이션 범위 밖 또는 LLM 플러그인/도구 자체 내부)에서 구현될 수 있다. 예를 들어, 사용자를 대신하 +여 소셜 미디어 콘텐츠를 만들고 게시하는 LLM 기반 앱은 '게시' 작업을 구현하는 플러그인/도구/API 내에 사용자 승 +인 루틴을 포함해야 한다. +●(다운스트림 권한 부여) 다운스트림 시스템에서 권한 부여 구현 +LLM에 의존하여 작업이 허용되는지 여부를 결정하는 대신 다운스트림 시스템에서 권한을 구현한다. 도구/플러그인을 +구현할 때 플러그인/도구를 통해 다운스트림 시스템에 요청된 모든 요청이 보안 정책에 대해 검증되도록 완전한 중재 +원칙(mediation principle)을 적용한다. + + +![이미지 169-0](images/p0169_img0.png) + + +![이미지 169-1](images/p0169_img1.png) + + +![이미지 169-2](images/p0169_img2.png) + + +![이미지 169-3](images/p0169_img3.png) + + +--- + + +#### 1.2.9 Overreliance (지나친 의존) + +개념 +LLM에 대한 과도한 의존은 잘못된 정보, 법적 문제, 보안 취약성과 같은 심각한 결과를 초래할 수 있 +다. 이는 LLM이 적절한 감독이나 검증 없이 중요한 결정을 내리거나 콘텐츠를 생성할 수 있다고 신뢰 +될 때 발생한다. +예시 +• (과도한 기능) LLM 에이전트는 불필요한 기능을 가지고 있어 오용의 위험이 있다. +• (과도한 권한) 플러그인은 시스템에 과도하게 접근할 수 있다. +• (과도한 자율성) LLM은 영향력이 큰 작업에 대한 인간 검증이 부족하다. +●(오해의 소지가 있는 정보) LLM은 검증 없이 오해의 소지가 있는 정보를 제공할 수 있음 +●(불안전한 코드) LLM은 소프트웨어에서 안전하지 않은 코드를 제안할 수 있음 +공격 시나리오 +●(잘못된 정보 확산) 악의적인 행위자가 LLM에 의존하는 뉴스 기관을 악용 +뉴스 기관은 LLM을 사용하여 뉴스 기사를 생성한다. 악의적인 행위자가 이러한 과도한 의존성을 악용하여 LLM에 오해 +의 소지가 있는 정보를 제공하고 잘못된 정보가 퍼지게 한다. +●(Plagiarism) 의도치 않은 표절로 인해 저작권 문제가 발생 +AI가 의도치 않게 콘텐츠를 표절하여 저작권 문제가 발생하고 기관에 대한 신뢰가 감소한다. +●(안전하지 않은 소프트웨어) LLM 제안으로 보안 취약성이 발생 +소프트웨어 개발팀이 LLM 시스템을 사용하여 코딩 프로세스를 가속화한다. AI의 제안에 지나치게 의존하면 안전하지 +않은 기본 설정이나 안전한 코딩 관행과 일치하지 않는 권장 사항으로 인해 애플리케이션에 보안 취약성이 발생한다. +●(악성 패키지) LLM이 존재하지 않는 코드 라이브러리를 제안 +소프트웨어 개발 회사가 LLM을 사용하여 개발자를 지원한다. LLM은 존재하지 않는 코드 라이브러리 또는 패키지를 +제안하고 AI를 신뢰하는 개발자는 자신도 모르게 악성 패키지를 회사 소프트웨어에 통합한다. 이는 특히 타사 코드나 +라이브러리를 포함할 때 LLM 제안을 교차 확인하는 것의 중요성을 강조한다. + + +![이미지 170-0](images/p0170_img0.png) + + +![이미지 170-1](images/p0170_img1.png) + + +![이미지 170-2](images/p0170_img2.png) + + +![이미지 170-3](images/p0170_img3.png) + + +![이미지 170-4](images/p0170_img4.png) + + +--- + +부록 +예방 +●(모니터링 및 검증) 일관성(consistency) 검사를 통해 LLM 출력을 정기적으로 검토 +LLM 출력을 정기적으로 모니터링하고 검토한다. 자체 일관성 또는 투표 기술을 사용하여 일관되지 않은 텍스트를 필터 +링한다. 단일 프롬프트에 대한 여러 모델 응답을 비교하면 출력의 품질과 일관성을 더 잘 판단할 수 있다. +●(교차 확인) 신뢰할 수 있는 출처로 LLM 출력 확인 +신뢰할 수 있는 외부 소스와 LLM 출력을 교차 확인한다. 이 추가 검증 계층은 모델에서 제공하는 정보가 정확하고 신 +뢰할 수 있는지 확인하는 데 도움이 될 수 있다. +●(미세 조정) 작업별 미세 조정으로 LLM 품질 향상 +미세 조정 또는 임베딩을 사용하여 모델을 향상시켜 출력 품질을 개선한다. 일반적으로 사전 학습된 모델은 특정 도메인 +에서 조정된 모델에 비해 부정확한 정보를 생성할 가능성이 더 높다. 프롬프트 엔지니어링, 매개변수 효율적 조정(PET), +전체 모델 조정 및 사고 체인 프롬프트와 같은 기술을 이러한 목적으로 사용할 수 있다. +●(자동 검증) 알려진 사실과 출력을 검증하는 시스템 구현 +생성된 출력을 알려진 사실 또는 데이터와 교차 검증할 수 있는 자동 검증 메커니즘을 구현한다. 이를 통해 보안 계층을 +추가로 제공하고 할루시네이션(Hallucination)9과 관련된 위험을 완화할 수 있다. +●(작업 세분화) 복잡한 작업을 나누어 위험 감소 +복잡한 작업을 관리 가능한 하위 작업으로 나누고 이를 다른 에이전트에 할당한다. 이는 복잡성을 관리하는 데 도움이 +될 뿐만 아니라 각 에이전트가 더 작은 작업에 대해 책임을 질 수 있으므로 Hallucination의 가능성도 줄어든다. +●(위험 전달) LLM 제한 사항 전달 +LLM 사용과 관련된 위험과 한계를 일찍 전달한다. 여기에는 정보 부정확성 및 기타 위험이 포함된다. 효과적인 위험 +전달은 사용자를 잠재적인 이슈에 대비시키고 정보에 입각한 결정을 내리는 데 도움이 될 수 있다. +●(사용자 친화적 인터페이스) 콘텐츠 필터 및 경고가 있는 인터페이스 생성 +LLM의 책임감 있고 안전한 사용을 장려하는 API와 사용자 인터페이스를 구축한다. 여기에는 콘텐츠 필터, 잠재적 부정 +확성에 대한 사용자 경고, AI 생성 콘텐츠의 명확한 레이블 지정과 같은 조치가 포함될 수 있다. +●(보안 코딩) 취약점을 방지하기 위한 지침 수립 +개발 환경에서 LLM을 사용할 때 잠재적인 취약성의 통합을 방지하기 위한 안전한 코딩 관행과 지침을 수립한다. +9 +AI 모델이 정확하지 않거나 사실이 아닌 조작된 정보를 생성하는 것 + + +![이미지 171-0](images/p0171_img0.png) + + +![이미지 171-1](images/p0171_img1.png) + + +![이미지 171-2](images/p0171_img2.png) + + +![이미지 171-3](images/p0171_img3.png) + + +![이미지 171-4](images/p0171_img4.png) + + +--- + + +#### 1.2.10 Model Theft + +개념 +LLM 모델 도난에는 LLM 모델에 대한 무단 액세스 및 유출이 포함되며, 경제적 손실, 평판 손상 및 +민감한 데이터에 대한 무단 액세스 위험이 있다. 이러한 모델을 보호하려면 강력한 보안 조치가 필수적 +이다. +예시 +• (취약점 악용) 보안 결함으로 인한 무단 액세스 +• (중앙 모델 레지스트리) 거버넌스를 위한 중앙 보안 +• (내부 위협) 직원 모델 유출 위험 +• (사이드 채널 공격) 사이드 기술을 통한 모델 세부 정보 추출 +공격 시나리오 +●(모델 도난) 경쟁을 위한 무단 액세스 및 사용 +공격자가 회사 인프라의 취약점을 악용하여 LLM 모델 저장소에 대한 무단 액세스를 얻는다. 공격자는 귀중한 LLM 모 +델을 추출하여 경쟁 언어 처리 서비스를 시작하거나 민감한 정보를 추출하여 원래 회사에 상당한 재정적 피해를 입힌다. +●(직원 유출) 노출로 인한 위험 증가 +불만이 있는 직원이 모델이나 관련 아티팩트를 유출한다. 이 시나리오를 대중에 공개하면 공격자가 적대적 공격을 위한 +지식을 얻거나, 아니면 사용 가능한 자산을 직접 훔칠 수 있다. +●(섀도우 모델 생성) 쿼리로 모델 복제 +공격자가 신중하게 선택한 입력으로 API를 쿼리하고 충분한 수의 출력을 수집하여 섀도우(shadow) 모델을 만든다. +●(사이드 채널 공격) 사이드 기술을 통한 추출 +악의적인 공격자는 LLM의 입력 필터링 기술과 프리앰블(preamble)을 우회하여 사이드 채널 공격을 수행하고 자신이 +제어하는 원격 제어 리소스에 대한 모델 정보를 검색한다. + + +![이미지 172-0](images/p0172_img0.png) + + +![이미지 172-1](images/p0172_img1.png) + + +![이미지 172-2](images/p0172_img2.png) + + +![이미지 172-3](images/p0172_img3.png) + + +![이미지 172-4](images/p0172_img4.png) + + +--- + +부록 +예방 +●(접근 통제 및 인증) 강력한 접근 통제 및 인증 +강력한 액세스 제어(예: RBAC 및 최소 권한 규칙)와 강력한 인증 메커니즘을 구현하여 LLM 모델 저장소와 학습 환경 +에 대한 무단 액세스를 제한한다. +이는 특히 처음 세 가지 일반적인 예에 해당하는데, 내부 위협, 잘못된 구성 및/또는 악의적인 행위자가 내부자 또는 +환경 외부에서 침투할 수 있는 LLM 모델, 가중치 및 아키텍처를 수용하는 인프라에 대한 취약한 보안 제어로 인해 이 +러한 취약성이 발생할 수 있다. +공급업체 관리 추적, 검증 및 종속성 취약성은 공급망 공격의 악용을 방지하기 위한 중요한 주제이다. +●(네트워크 제한) 리소스 및 API에 대한 LLM 액세스 제한 +LLM의 네트워크 리소스, 내부 서비스 및 API에 대한 액세스 제한 +이것은 특히 내부자 위험과 위협을 다루기 때문에 모든 일반적인 예에 해당하지만 궁극적으로 LLM 애플리케이션이 “액세스 +할 수 있는” 것을 제어하므로 사이드 채널 공격을 방지하기 위한 메커니즘 또는 예방 단계가 될 수 있다. +●(모니터링 및 감사) 액세스 로그의 정기적 모니터링 +LLM 모델 저장소와 관련된 액세스 로그 및 활동을 정기적으로 모니터링하고 감사하여 의심스럽거나 승인되지 않은 동 +작을 즉시 감지하고 대응한다. +●(MLOps 자동화) 승인 워크플로를 통한 보안 배포 +거버넌스, 추적 및 승인 워크플로를 사용하여 MLOps 배포를 자동화하여 인프라 내에서 액세스 및 배포 제어를 강화 +한다. + + +![이미지 173-0](images/p0173_img0.png) + + +![이미지 173-1](images/p0173_img1.png) + + +![이미지 173-2](images/p0173_img2.png) + + +![이미지 173-3](images/p0173_img3.png) + + +![이미지 173-4](images/p0173_img4.png) + + +--- + +NIST Trustworthy and Responsible AI NIST AI 100-2e2023 +2.1 +개요 +AI 시스템은 기능에 따라 예측 AI(Predictive AI, “이하 PredAI”))와 생성 AI(Generative AI, “이하 +GenAI”)의 두 가지로 구분할 수 있음 +●공격자는 PredAI 및 GenAI 시스템 모두에 대한 학습 데이터를 조작하여 이를 기반으로 교육된 AI +시스템을 공격에 취약하게 만들 수 있음 +- ML 모델의 크기가 계속 커짐에 따라 많은 조직에서 직접 사용하거나 새로운 데이터 세트로 미 +세 조정하여 다양한 작업을 수행할 수 있는 사전 훈련된 모델에 의존하는 경향이 있는데, 이는 +공격자가 모델 가용성을 손상시키거나 잘못된 처리를 강제하거나 지시를 받을 때 데이터를 유 +출할 수 있도록 TROJANS를 삽입하여 사전 훈련된 모델을 악의적으로 수정할 수 있는 기회를 제 +공함 +이 보고서는 「NIST AI 위험 관리 프레임워크」에서 ML 시스템의 보안, 회복성 및 견고성 개념을 채택 +함. 보안, 회복성 및 견고성은 위험에 의해 측정되며, 위험은 엔터티(예컨대, 시스템)가 잠재적인 상황 +이나 이벤트(예: 공격)에 의해 위협받는 정도와 그러한 이벤트가 발생할 경우 결과의 심각성을 측정하 +는 것임 +●이 보고서는 적대적 머신 러닝(AML)과 관련된 위험을 식별, 해결 및 관리하는 데 중점을 두고 있으며, +다음을 개발하기 위한 지침을 제공함 +- ML 및 사이버 보안 커뮤니티에서 사용할 AML의 표준화된 용어 +- PredAI 시스템에 대한 회피, 포이즈닝 및 프라이버시 공격 대응 +- GenAI 시스템에 대한 회피, 포이즈닝, 개인정보 보호 및 남용(abuse) 공격대응 +- 여러 데이터 모달리티(modalities)에 걸친 모든 실행 가능한 학습 방법(예: 지도, 비지도, 반지 +도 학습, 연합 학습, 강화 학습)에 대한 공격과 기존 완화책 기법의 한계에 대한 논의 +2.2 +예측 AI 분류 +공격 분류 +●(학습 단계) 머신 러닝은 모델을 학습하는 Training Stage와 예측을 생성하기 위해 레이블이 지정되지 +않은 새 데이터 샘플에 모델을 배포하는 Deployment Stage 구성. Supervised Learning의 경우 +레이블이 지정된 학습 데이터가 학습 단계에서 학습 알고리즘에 입력으로 제공되고 ML 모델은 특 +정 손실 함수를 최소화하도록 최적화됨. ML 모델의 검증 및 테스트는 일반적으로 모델이 실제 세계에 +배포되기 전에 수행되며, 지도 학습 기술에는 예측 레이블 또는 클래스가 불연속형인 Classification과 예측 +레이블 또는 응답 변수가 연속형인 Regression이 포함됨 + + +![이미지 174-0](images/p0174_img0.png) + + +![이미지 174-1](images/p0174_img1.png) + + +![이미지 174-2](images/p0174_img2.png) + + +![이미지 174-3](images/p0174_img3.png) + + +![이미지 174-4](images/p0174_img4.png) + + +![이미지 174-5](images/p0174_img5.png) + + +--- + +부록 +- 학습 시간 공격(Training-time attacks) : ML 학습 단계 동안의 공격을 Poisoning Attacks라 +고 함 +Data Poisoning 공격 +Model Poisoning 공격 +공격자는 학습 샘플을 삽입하거나 수정하여 학습 데이터 +의 하위 집합을 제어 +공격자는 모델과 해당 매개변수를 제어 +모든 학습 패러다임에 적용 가능 +클라이언트가 로컬 모델 업데이트를 집계 서버로 보내는 +연합 학습과 모델 기술 공급업체가 모델에 악성 코드를 +추가할 수 있는 공급망 공격에서 가장 흔히 발생 +- 배포 시간 공격(Deployment-time attacks) : 회피 공격은 테스트 샘플을 수정하여 적대적 사 +례를 생성하고, 멤버십 추론 및 데이터 재구성과 같은 프라이버시 공격은 일반적으로 ML 모델 +에 대한 쿼리 액세스 권한이 있는 공격자가 마운트함 +●(공격자의 목표 및 목적) 공격자 목표는 가용성・무결성・기밀성에 따라 세 가지로 분류 +- 가용성 침해(Availability Breakdown) : 가용성 공격은 공격자가 배포 시점에 모델의 성능을 분 +석하려고 시도하는 ML에 대한 무차별 공격이며, 공격자가 학습 세트의 일부를 제어할 때 데이 +터 포이즈닝을 통해 마운트될 수 있음 +- 무결성 침해(Integrity Violations) : 무결성 공격은 ML 모델 출력의 무결성을 표적으로 삼아 ML 모델 +이 잘못된 예측을 수행하게 함. 공격자는 배포 시 회피 공격을 마운트하거나 학습 시 포이즌 공격을 마 +운트하여 무결성 위반을 일으킬 수 있음 +포이즈닝을 통한 무결성 공격 +Targeted Poisoning 공격 +몇몇 타겟 샘플의 무결성을 침해하려 하며 공격자가 포이즈닝된 샘플을 삽입하기 +위한 훈련 데이터 제어를 가지고 있다고 가정함 +Backdoor Poisoning 공격 +포이즈닝된 샘플과 테스트 샘플에 모두 추가되어 오분류를 유발하는 Backdoor +Pattern을 생성해야 함 +Model Poisoning 공격 +타겟 또는 Backdoor 공격으로 이어질 수 있으며 공격자는 무결성 위반을 유발하 +기 위해 모델 매개변수를 수정함. 이들은 중앙 집중식 학습과 연합 학습을 위해 +설계되었음 +- 개인정보 침해(Privacy Compromise) : 공격자는 훈련 데이터(Data Privacy 공격으로 이어 +짐) 또는 ML 모델(Model Privacy 공격으로 이어짐)에 대한 정보를 알아내는 데 관심이 있을 +수 있음 + + +![이미지 175-0](images/p0175_img0.png) + + +![이미지 175-1](images/p0175_img1.png) + + +![이미지 175-2](images/p0175_img2.png) + + +![이미지 175-3](images/p0175_img3.png) + + +--- + +●(공격자의 역할) 공격자는 다음의 6가지 유형의 역량을 사용할 수 있음 +훈련 데이터 +제어 +공격자는 훈련 샘플을 삽입하거나 수정하여 훈련 데이터의 하위 집합을 제어할 수 있음. 이 +역량은 데이터 포이즈닝 공격(예: 가용성 포이즈닝, 타겟팅 또는 백도어 포이즈닝)에 사용됨 +모델 제어 +공격자는 트로이 목마 트리거를 생성하여 모델에 삽입하거나 연합 학습에서 악의적인 로컬 모 +델 업데이트를 보내 모델 매개변수를 제어할 수 있음 +테스트 데이터 +제어 +공격자는 이를 활용하여 모델 배포 시 테스트 샘플에 교란을 추가할 수 있으며, 이는 회피 공 +격에서 적대적 예를 생성하거나 백도어 포이즈닝 공격에서 수행하는 것과 같음 +레이블 제한 +이 기능은 감독 학습에서 학습 샘플의 레이블에 대한 적대적 제어를 제한하는 데 적합함. 클 +린 레이블 포이즈닝 공격은 공격자가 포이즈닝된 샘플의 레이블을 제어하지 않는다고 가정함 +소스 코드 제어 +공격자는 난수 생성기나 종종 오픈 소스인 타사 라이브러리와 같은 ML 알고리즘의 소스 코드 +를 수정할 수 있음 +쿼리 액세스 +ML 모델이 클라우드 공급자(Machine Learning as a Service - MLaaS 사용)에 의해 관리되 +는 경우 공격자는 모델에 쿼리를 제출하고 예측(레이블 또는 모델 신뢰도)을 받을 수 있음 +●(공격자 지식) 화이트박스, 블랙박스, 그레이박스의 세 가지 주요 유형이 있음 +화이트박스 공격 +공격자가 훈련 데이터, 모델 아키텍처, 모델 하이퍼 매개변수를 포함하여 ML 시스템에 대한 +모든 지식을 가지고 운영한다고 가정함 +블랙박스 공격 +ML 시스템에 대한 최소한의 지식이 있다고 가정함. 공격자는 모델에 대한 쿼리 액세스를 얻 +을 수 있지만 모델이 어떻게 훈련되는지에 대한 다른 정보는 없음. 이러한 공격은 공격자가 +AI 시스템에 대한 지식이 없다고 가정하고 일반적으로 사용할 수 있는 시스템 인터페이스를 +활용하기 때문에 가장 일반적임 +그레이박스 공격 +블랙박스와 화이트박스 공격 사이의 적대적 지식을 포착 +●(데이터 모달리티) 최근까지 대부분의 공격과 방어는 단일 모달리티에서 작동했지만 새로운 ML 추세는 +다중 모달(multimodal) 데이터를 사용하는 것임. 적대적 ML 문헌에서 가장 일반적인 데이터 모달리티는 +다음과 같음 +이미지 +이미지 데이터 모달리티의 적대적 예는 그래디언트(gradient) 기반 방법을 직접 적용할 수 있음 +텍스트 +자연어 처리(NLP)는 인기 있는 모달리티이며 회피, 포이즈닝, 프라이버시를 포함한 모든 종류 +의 공격이 NLP 애플리케이션에 적용되었음 +오디오 +오디오 시스템과 오디오 신호에서 생성된 텍스트도 공격을 받았음 +비디오 +비디오 이해 모델은 시각 및 언어 작업에서 점점 더 많은 기능을 보여주었지만 이러한 모델도 +공격에 취약함 +사이버 보안2 +최초의 포이즈닝 공격은 웜 서명 생성 및 스팸 이메일 분류를 위한 사이버 보안에서 발견되었음 +표 형식 데이터 +금융, 비즈니스 및 의료 애플리케이션에서 표 형식 데이터를 사용하는 ML 모델에 대한 수많 +은 공격이 입증되었음 + + +![이미지 176-0](images/p0176_img0.png) + + +![이미지 176-1](images/p0176_img1.png) + + +![이미지 176-2](images/p0176_img2.png) + + +![이미지 176-3](images/p0176_img3.png) + + +--- + +부록 +회피 공격과 완화책(Evasion Attacks and Mitigations) +●(화이트박스 회피 공격) 원래 테스트 샘플에서 가까운 거리에 적대적 사례를 생성하는 회피 공격을 설 +계하기 위한 여러 가지 최적화 기반 방법이 있음. 또한 거리 측정법, 범용 회피 공격 및 물리적으로 실현 +가능한 공격에 대한 여러 가지 선택 사항과 NLP, 오디오, 비디오 및 사이버 보안 도메인을 포함한 여러 +데이터 모달리티에 대해 개발된 회피 공격이 있음 +●(블랙박스 회피 공격) 공격자가 모델 아키텍처나 학습 데이터에 대한 사전 지식이 없는 현실적인 적 +대적 모델에 따라 설계됨. 대신, 적대자는 다양한 데이터 샘플에서 쿼리를 실행하고 모델의 예측을 +얻어 학습된 ML 모델과 상호 작용할 수 있음 +- 블랙박스 설정에서 적대적 사례를 만드는 데 있어 가장 큰 과제는 ML 모델에 대한 쿼리 수를 +줄이는 것임. 최근 기술은 일반적으로 1,000개 미만인 비교적 적은 수의 쿼리로 ML 분류기를 +성공적으로 회피할 수 있음 +●(공격의 이전 가능성) 적대적 공격을 생성하는 또 다른 방법은 다른 ML 모델에서 만들어진 공격 +의 이전 가능성을 통한 것임. 일반적으로 공격자는 대체 ML 모델을 훈련하고 대체 모델에서 화이트박 +스 적대적 공격을 생성한 다음, 공격을 대상 모델로 이전함 +●(완화책) 적대적 회피 공격에 대한 주요 방어책은 다음 세 가지가 있음 +적대적 훈련 +올바른 레이블을 사용하여 훈련 중에 반복적으로 생성된 적대적 예제로 훈련 데이터를 증강하 +는 일반적인 방법임. 적대적 예제를 생성하기 위한 적대적 공격이 강할수록 훈련된 모델의 회 +복성이 높아짐. 하지만 이러한 이점은 일반적으로 깨끗한 데이터에 대한 모델 정확도가 감소 +하는 결과를 초래함. 또한 적대적 훈련은 훈련 중에 적대적 예제를 반복적으로 생성하기 때문 +에 비용이 많이 발생함 +무작위 평활화 +가우시안(Gaussian) 노이즈 교란에서 가장 가능성 있는 예측을 생성하여 모든 분류기를 인증 +가능한 견고한 평활화 분류기로 변환하는 방법임. 무작위 평활화는 일반적으로 테스트 샘플 +하위 집합에 대한 인증된 예측을 제공함 +공식 검증 +신경망의 적대적 견고성을 인증하는 또 다른 방법은 공식 방법의 기술을 기반으로 검증하는 +것임. 공식 검증 기술은 신경망 견고성을 인증하는 데 상당한 잠재력이 있지만 주요 한계는 +확장성 부족, 계산 비용 및 지원되는 작업 유형의 제한임 +포이즈닝 공격과 완화책 (Poisoning Attacks and Mitigations) +●포이즈닝 공격은 매우 강력하며 가용성 위반이나 무결성 침해를 일으킬 수 있음 +- 가용성 포이즈닝 공격은 모든 샘플에서 머신 러닝 모델을 무차별적으로 저하시키는 반면, 타겟 +팅 및 백도어 포이즈닝 공격은 더 은밀하고 소수의 타겟 샘플에서 무결성 침해를 유발함 +- 포이즈닝 공격은 데이터 포이즈닝, 모델 포이즈닝, 레이블 제어, 소스 코드 제어 및 테스트 데이 +터 제어와 같은 광범위한 적대적 역량을 활용하여 여러 하위 범주의 포이즈닝 공격을 생성함 + + +![이미지 177-0](images/p0177_img0.png) + + +![이미지 177-1](images/p0177_img1.png) + + +![이미지 177-2](images/p0177_img2.png) + + +![이미지 177-3](images/p0177_img3.png) + + +![이미지 177-4](images/p0177_img4.png) + + +--- + +●(가용성 중독) 간단한 블랙박스 포이즈닝 공격 전략은 레이블 플립핑(Label Flipping)으로, 공격자가 +선택한 피해자 레이블로 교육 예제를 생성함. 이 방법은 가용성 공격을 마운트하기 위해 많은 비율의 +포이즈닝 샘플이 필요함 +- 지도 학습을 위한 현실적인 위협 모델은 적대자가 학습 예제만 제어할 수 있고 레이블은 제어할 +수 없는 클린 레이블 포이즈닝 공격임. 이 사례는 악성 코드 분류에서 공격자가 바이너리 파일 +을 위협 인텔리전스 플랫폼에 제공할 수 있고 레이블링이 바이러스 백신 서명 또는 기타 외부 +방법을 사용하여 수행되는 것처럼 레이블링 프로세스가 학습 알고리즘 외부에 있는 시나리오를 +모델링함 +- 클린 레이블 가용성 공격은 생성 모델을 학습하고 학습 샘플에 노이즈를 추가하여 적대적 목적 +을 극대화함으로써 신경망 분류기에 도입되었음 +- 가용성 포이즈닝 공격은 중심 기반 이상 탐지 및 맬웨어에 대한 행동 클러스터링에 대한 비지도 +학습을 위해 설계되었음. 연합 학습에서 공격자는 전역적으로 학습된 모델에서 가용성 위반을 +유도하기 위해 모델 포이즈닝 공격을 마운트할 수 있음 +- (완화책) 기존 완화책 중에서 일반적으로 유망한 기술은 다음과 같음 +▸(학습 데이터 정제) 기계 학습 교육을 수행하기 전에 교육 세트를 정리하고 중독된 샘플을 제 +거하도록 설계됨 +▸(견고한 훈련) ML 훈련 알고리즘을 수정하고 일반 훈련 대신 견고한 훈련을 수행하는 것임 +●(대상 포이즈닝) 소수의 대상 샘플에 대한 ML 모델의 예측을 변경함 +●(백도어 포이즈닝) 더 정교하고 은밀해져서 탐지하고 완화하기가 더 어려워졌음 +- 잠재적 백도어 공격은 깨끗한 데이터를 사용하여 마지막 몇 개의 레이어에 대한 모델 fine-tuning +에도 살아남도록 설계되었음 +- 백도어 생성 네트워크(Backdoor Generating Network, BaN)는 트리거의 위치가 중독된 샘플 +에서 변경되어 모델이 위치 불변 방식으로 트리거를 학습하는 동적 백도어 공격임 +- 기능적 트리거, 즉 기능적 공격은 이미지 전체에 내장되거나 입력에 따라 변경됨. +- (완화책) 학습 데이터 정리, 트리거 재구성, 모델 검사 및 정제 등이 있음 +●(모델 포이즈닝) 학습된 ML 모델을 직접 수정하여 모델에 악성 기능을 주입하려고 시도함. 대부분 +의 모델 포이즈닝 공격은 클라이언트가 로컬 모델 업데이트를 전역모델(Global Model)로 집계하 +는 서버로 보내는 연합 학습 설정에서 설계되었음. 모델 포이즈닝 공격은 연합 모델에서 가용성 및 +무결성 위반을 모두 일으킬 수 있음. 또한, 공급업체가 제공한 모델 또는 모델의 구성 요소가 악성 +코드로 포이즈닝되는 공급망 시나리오에서도 가능함 +- (완화책) 공격자가 훈련 알고리즘의 소스 코드나 ML 하이퍼파라미터를 제어할 수 있는 공급망 +공격을 완화하는 것은 여전히 어려움 + + +![이미지 178-0](images/p0178_img0.png) + + +![이미지 178-1](images/p0178_img1.png) + + +![이미지 178-2](images/p0178_img2.png) + + +![이미지 178-3](images/p0178_img3.png) + + +--- + +부록 +프라이버시 침해 공격 +●(데이터 재구성) 공개된 집계 정보에서 개인의 데이터를 복구할 수 있기 때문에 가장 우려되는 프 +라이버시 침해 공격임 +●(멤버쉽 추론) 개인에 대한 비공개 정보를 노출하며, 사용자 데이터로 훈련된 집계 정보 또는 ML 모 +델을 공개할 때 여전히 큰 우려 사항임. 특정 상황에서 개인이 훈련 세트의 일부인지 확인하는 것은 +이미 개인정보 침해를 초래함(예: 희귀 질환 환자에 대한 의학적 연구 또한 멤버십 추론은 데이터 +추출 공격을 위한 빌딩 블록으로 사용될 수 있음). 멤버십 추론에서 공격자의 목표는 특정 기록 +또는 데이터 샘플이 통계 또는 ML 알고리즘에 사용된 훈련 데이터 세트의 일부인지 여부를 확인 +하는 것임 +●(모델 추출) MLaaS 시나리오에서 클라우드 제공자는 일반적으로 독점 데이터를 사용하여 대규모 +ML 모델을 학습하고 모델 아키텍처와 매개변수를 기밀로 유지하고자 함. 모델 추출 공격을 수행하 +는 공격자의 목표는 MLaaS 제공자가 학습한 ML 모델에 쿼리를 제출하여 모델 아키텍처와 매개 +변수에 대한 정보를 추출하는 것임 +●(속성 추론) 공격자는 ML 모델과 상호 작용하여 학습 데이터 분포에 대한 전역 정보를 알아내려고 +함. 예를 들어, 공격자는 인구 통계 정보와 같이 특정 민감한 속성이 있는 학습 세트의 일부를 결정 +할 수 있으며, 이는 공개할 의도가 없는 학습 세트에 대해 잠재적으로 기밀 정보를 드러낼 수 있음 +●(완화책) 차등 개인정보 보호(DP)는 알고리즘 출력에 액세스할 수 있는 공격자가 데이터 세트의 각 +개별 레코드에 대해 얼마나 많이 알 수 있는지에 대한 제한을 보장하는 매우 강력한 수단임 +- DP는 멤버십 추론 및 데이터 재구성 공격으로부터 보호하는 엄격한 프라이버시 개념을 제공함. +프라이버시와 유용성 간의 최상의 균형을 달성하기 위해 개인 학습 알고리즘의 이론적 분석을 +보완하기 위해 경험적 프라이버시 감사가 권장됨 +- 모델 추출에 대한 다른 완화 기술로는 사용자 질의를 모델로 제한하거나, 모델에 대한 의심스러 +운 질의를 감지하거나, 사이드 채널 공격을 방지하기 위한 보다 강력한 아키텍처를 만드는 것이 +있음. 그러나 이러한 기술은 동기가 부여되고 자원이 풍부한 공격자가 우회할 수 있으므로 주의 +해서 사용해야 함 + + +![이미지 179-0](images/p0179_img0.png) + + +![이미지 179-1](images/p0179_img1.png) + + +![이미지 179-2](images/p0179_img2.png) + + +![이미지 179-3](images/p0179_img3.png) + + +![이미지 179-4](images/p0179_img4.png) + + +--- + +2.3 +생성 AI 분류 +공격 분류 +●(GenAI 학습 단계) 모델과 학습 세트의 크기로 인해 GenAI 모델 개발의 주요 패턴은 데이터 수 +집, 레이블 지정, 모델 학습, 모델 검증 및 모델 배포의 전체 프로세스가 단일 조직에서 단일 파이프 +라인으로 수행되는 이전 프로세스에서 벗어났음. 기초 모델은 비지도 학습을 많이 사용하는 사전 +학습 단계에서 생성됨. 기초 모델은 다운스트림 작업에 유용한 패턴(예: 텍스트, 이미지 등)을 인코 +딩하고, 그런 다음 기초 모델 자체가 fine-tuning을 통해 작업별 애플리케이션을 만드는 기반이 됨. +많은 경우 애플리케이션 개발자는 타사가 개발한 기초 모델로 시작하여 특정 애플리케이션에 맞게 +fine-tuning함 +- (학습 시간 공격) GenAI의 학습 단계는 기초 모델 사전 학습과 모델 미세 조정의 두 가지 단계 +로 구성됨. 이 패턴은 생성 이미지 모델, 텍스트 모델, 오디오 모델 및 멀티모달 모델 등에 존재 +함. 기초 모델은 대규모 데이터 세트에서 학습할 때 가장 효과적이므로 광범위한 공개 소스에서 +데이터를 스크래핑하는 것이 일반적임. 이로 인해 기초 모델은 특히 공격자가 학습 데이터의 하 +위 집합을 제어하는 포이즈닝 공격에 취약해짐 +- (추론 시간 공격) GenAI의 배포 단계는 PredAI와는 다르며, 배포 중에 모델을 사용하는 방법은 +애플리케이션에 따라 다름. 그러나 LLM 및 RAG 애플리케이션의 많은 보안 취약성의 근간은 +데이터와 지침이 LLM에 별도의 채널로 제공되지 않는다는 사실임. 이를 통해 공격자는 데이터 +채널을 사용하여 수십 년 된 SQL 주입과 유사한 추론 시간 공격을 수행할 수 있음. 특히 질문 +과 답변 및 텍스트 요약 작업에 대한 LLM에 대한 특별한 강조점을 인정하면서 이 단계의 많은 +공격은 텍스트 기반 생성 모델 응용 프로그램에 공통적인 다음과 같은 관행으로 인해 발생함 +모델 지침을 통한 +정렬 +LLM 동작은 모델의 입력 및 컨텍스트에 미리 추가된 지침을 통해 추론 시간에 정렬됨. 이러 +한 지침은 모델의 애플리케이션별 사용 사례에 대한 자연어 설명(예: “당신은 우아하고 간결하 +게 응답하는 유용한 재정 지원자입니다...”)으로 구성됨 +컨텍스트적 +few-shot 학습 +모델 컨텍스트에서 애플리케이션에 예상되는 입・출력의 예를 제공하면 애플리케이션에서의 +성능을 개선할 수 있음. 이를 통해 모델은 자기 회귀 작업을 보다 자연스럽게 완료할 수 있음 +타사 소스에서 +런타임 데이터 수집 +Retrieval Augmented Generation 애플리케이션에서 컨텍스트는 쿼리에 따라 런타임이 만 +들어지고 애플리케이션의 일부로 요약될 외부 데이터 소스(예: 문서, 웹 페이지 등)에서 채워 +짐. 간접 프롬프트 주입 공격은 공격자가 사용자가 직접 수집하지 않더라도 시스템에서 수집 +한 외부 정보 소스를 사용하여 컨텍스트를 수정할 수 있는 능력에 달려 있음 +출력 처리 +LLM의 출력은 웹 페이지의 요소를 채우거나 명령을 구성하는 데 사용될 수 있음 +●(공격자 목표 및 목적) PredAI와 마찬가지로 공격자 목표는 가용성, 무결성 및 프라이버시의 차원 +에 따라 광범위하게 분류할 수 있음. 그러나 GenAI에 특정한 네 번째 공격자 목표인 남용이 있음. +남용 위반은 공격자가 GenAI 시스템의 의도된 용도를 재활용하여 자신의 목표를 달성할 때 발생함 + + +![이미지 180-0](images/p0180_img0.png) + + +![이미지 180-1](images/p0180_img1.png) + + +![이미지 180-2](images/p0180_img2.png) + + +![이미지 180-3](images/p0180_img3.png) + + +![이미지 180-4](images/p0180_img4.png) + + +--- + +부록 +- 공격자는 GenAI 모델의 기능을 사용하여 증오 표현이나 차별을 조장하고, 특정 그룹에 대한 폭 +력을 부추기는 미디어를 생성하거나, 사이버 공격을 가능하게 하는 이미지, 텍스트 또는 악성 코 +드를 생성하여 공격적인 사이버 보안 작업을 확장할 수 있음 +●(공격자 기능) GenAI 공격자 목표를 실현하는 새로운 공격자 기능은 다음과 같음 +학습 데이터 +제어 +공격자는 학습 샘플을 삽입하거나 수정하여 학습 데이터의 하위 집합을 제어할 수 있으며, 이 +기능은 데이터 포이즈닝 공격에 사용됨 +쿼리 액세스 +많은 GenAI 모델과 해당 애플리케이션(예: 검색 증강 생성)은 API 키를 통해 액세스가 제어 +되는 클라우드 호스팅 서비스로 배포됨. 이 경우 공격자는 모델에 쿼리를 제출하여 출력을 받 +을 수 있음. GenAI에서 공격자가 조정한 입력을 제출하는 목적은 모델에서 특정 동작을 유도 +하는 것임. 이 기능은 즉시 주입, 즉시 추출 및 모델 도용 공격에 사용됨 +소스 코드 제어 +공격자는 난수 생성기 또는 종종 오픈 소스인 타사 라이브러리와 같은 ML 알고리즘의 소스 +코드를 수정할 수 있음. 오픈소스 모델 저장소의 등장으로 공격자는 악성 모델을 만들거나 악 +성 코드를 역직렬화 형식에 내장하여 양성 모델을 래핑할 수 있음 +리소스 제어 +공격자는 런타임에 GenAI 모델이 수집할 리소스(예: 문서, 웹 페이지)를 수정할 수 있음. 이 +기능은 간접 프롬프트 주입 공격에 사용됨 +(AI 공급망 공격 및 완화책) ML에 대한 실제 보안 취약성에 대한 연구에 따르면 보안은 소프트웨어, 데 +이터 및 모델 공급망, 네트워크 및 스토리지 시스템을 포함하여 포괄적으로 해결하는 것이 가장 좋음. +그러나 많은 실제 GenAI 작업은 일반적으로 기존 사이버 보안 범위를 벗어난 오픈소스 모델이나 데이 +터로 시작됨 +●(역직렬화 취약성) 많은 ML 프로젝트는 다운스트림 애플리케이션에서 사용하기 위해 오픈소스 +GenAI 모델을 다운로드하는 것으로 시작함. 대부분의 경우 이러한 모델은 pickle, pytorch, +joblib, numpy 또는 tensorflow 형식으로 지속되는 아티팩트로 존재함. 이러한 각 형식은 직렬화 +지속성 메커니즘을 허용하여 직렬화 해제 시 임의 코드 실행(ACE)을 허용함. 직렬화를 통한 ACE는 +일반적으로 심각한 취약성으로 분류됨 +●(포이즈닝 공격) GenAI 텍스트-이미지 및 언어 모델의 성능은 모델 크기와 데이터 세트 크기 및 품 +질에 따라 확장됨. 따라서 GenAI 기반 모델 개발자가 더 광범위한 큐레이션되지 않은 소스에서 데이 +터를 스크래핑하는 것이 일반적임. 데이터 세트 게시자는 데이터 세트를 구성하는 URL 목록만 제공 +하며 해당 URL을 제공하는 도메인은 만료되거나 구매될 수 있으며 공격자가 리소스를 교체할 수 +있음. PredAI 모델과 마찬가지로 이는 Targeted Poisoning Attacks, Backdoor Poisoning +Attacks 및 Model Poisoning으로 이어질 수 있음 +- 간단한 완화책은 데이터 세트가 다운로더가 검증할 수 있는 콘텐츠의 URL과 암호화 해시를 모 +두 나열하는 것이나, 이 기술은 인터넷의 일부 대규모 분산 데이터 세트에 잘 확장되지 않을 수 +있음 + + +![이미지 181-0](images/p0181_img0.png) + + +![이미지 181-1](images/p0181_img1.png) + + +![이미지 181-2](images/p0181_img2.png) + + +![이미지 181-3](images/p0181_img3.png) + + +![이미지 181-4](images/p0181_img4.png) + + +--- + +●(완화책) AI 공급망 공격은 공급망 보증 관행을 통해 완화할 수 있음. 모델 파일 종속성의 경우 여 +기에는 ML 파이프라인에서 사용되는 모델 아티팩트의 정기적인 취약성 검사와 safetensor와 같 +은 안전한 모델 지속성 형식을 채택하는 것이 포함됨 +- 웹 스케일 데이터 종속성의 경우에는 암호화 해시를 게시(제공자)하여 웹 다운로드를 확인하고, +도메인 하이재킹이 새로운 데이터 소스를 학습 데이터 세트에 주입하지 않았는지 확인하기 위한 +기본 무결성 검사로 학습 데이터를 확인(다운로더)하는 것이 포함됨. 대규모 확산 모델에 의한 악 +의적인 이미지 편집과 관련된 위험을 완화하는 또 다른 접근 방식은 이러한 모델에 의한 조작에 +저항하도록 이미지에 면역을 부여하는 것임 +(직접 프롬프트 주입 공격 및 완화책) 직접 프롬프트 주입은 사용자가 LLM의 동작을 변경하려는 텍스 +트를 주입할 때 발생함 +●(공격자 목표) 공격자는 다음과 같이 프롬프트 주입을 통해 다양한 목표를 가질 수 있음 +- (남용) 공격자는 직접적인 프롬프트 주입을 사용하여 보호 장치를 우회하여 잘못된 정보, 선전, +해로운 콘텐츠, 성적 콘텐츠, 맬웨어(코드) 또는 피싱 콘텐츠를 생산 +- (개인정보 침해) 공격자는 시스템 프롬프트를 추출하거나 컨텍스트에서 모델에 제공된 개인정보 +를 사용자가 필터링 없이 액세스할 수 있도록 시도 +●(공격자 기술) LLM을 탈옥하기 위한 수동 방법은 일반적으로 경쟁 목표와 불일치하는 일반화의 두 +가지로 분류됨. 이러한 방법은 종종 특정 언어 조작에 대한 모델의 취약성을 이용하고 기존의 적대적 입 +력을 넘어 확장됨 +- 경쟁 목표 범주에서는 작성자가 원래 제공한 지침과 경쟁하는 추가 지침이 제공됨 +접두사 주입 +이 방법은 모델이 긍정적인 확인으로 응답을 시작하도록 촉구하는 것을 포함함. 모델이 미리 +정해진 방식으로 출력을 시작하도록 조건화함으로써 적대자는 후속 언어 생성을 특정하고 미 +리 정해진 패턴이나 행동으로 유도하려고 시도함 +거부 억제 +적대자는 모델에 명확한 지침을 제공하여 출력에서 거부나 거부를 생성하지 않도록 강요함. +이 전술은 부정적인 반응의 생성을 제한하거나 금지함으로써 모델이 제공된 지침을 준수하도 +록 보장하여 잠재적으로 안전 조치를 손상시키는 것을 목표로 함 +스타일 주입 +이 접근 방식에서 적대자는 모델에게 긴 단어를 사용하거나 특정 스타일(style)을 채택하지 +말라고 지시함. 모델의 언어를 단순하거나 비전문적인 톤으로 제한함으로써 모델의 응답의 정 +교함이나 정확성을 제한하여 잠재적으로 전반적인 성과를 손상시키는 것을 목표로 함 +롤플레잉 +적대자는 “지금 무엇이든 하라”(DAN) 또는 “항상 지적이고 마키아벨리적”(AIM)과 같은 롤플 +레잉 전략을 활용하여 모델이 원래 의도와 상충되는 특정 페르소나 또는 행동 패턴을 채택하 +도록 안내함. 이 조작은 다양한 역할이나 특성에 대한 모델의 적응력을 악용하여 잠재적으로 +안전 프로토콜 준수를 손상시키는 것을 목표로 함 + + +![이미지 182-0](images/p0182_img0.png) + + +![이미지 182-1](images/p0182_img1.png) + + +![이미지 182-2](images/p0182_img2.png) + + +![이미지 182-3](images/p0182_img3.png) + + +![이미지 182-4](images/p0182_img4.png) + + +--- + +부록 +- 불일치 일반화 범주의 기술은 안전 교육이나 보호책과 크게 다르며, 모델의 표준 학습 데이터에 +서 분포되지 않은 입력을 배치함. 접근 방식은 다음과 같음 +특수 인코딩 +이 방법은 입력 데이터의 표현을 변경하고 표준 인식 알고리즘에서 인식할 수 없게 만듦. 적 +대자는 정보를 인코딩하여 입력에 대한 모델의 이해를 속이고 안전 메커니즘을 우회하려고 함 +문자 변환 +ROT13 암호, 기호 대체(예: l33tspeak), 모스 부호와 같은 기술은 입력 텍스트의 문자를 조 +작함. 이러한 변환은 텍스트의 원래 의미를 모호하게 하여 모델의 해석을 혼란스럽게 하고 적 +대적 입력이 감지되지 않도록 하는 것을 목표로 함 +단어 변환 +언어 구조를 변경하는 것을 목표로 하는 전략에는 Pig Latin, 동의어 교환(예: “훔치다” 대신 +“pilfer” 사용), 민감한 단어를 하위 문자열로 분해하기 위한 페이로드 분할(또는 “토큰 밀수”) +이 포함될 수 있음. 이러한 조작은 LLM이 여전히 이해하는 방식으로 모델의 보호 장치를 속 +이는 것을 목적으로 함 +프롬프트 수준 +난독화 +적대자는 다른 언어로 번역하는 것과 같은 방법을 사용하여 모델이 완전히 이해할 수 없는 방 +식으로 콘텐츠를 난독화하거나 요약하도록 함. 이러한 난독화는 모호성이나 변경된 언어적 맥 +락을 도입하고 모델의 안전 메커니즘이 명확성 부족이나 오해로 인해 덜 효과적인 입력 시나 +리오를 만듦 +●(데이터 추출) GenAI 모델은 독점적이거나 민감한 정보를 포함할 수 있는 데이터에서 학습함. +GenAI 애플리케이션은 신중하게 제작된 프롬프트로 계측되거나 RAG와 마찬가지로 요약 또는 기 +타 작업 완료를 위해 컨텍스트에서 민감한 정보가 제공될 수 있음 +●(완화책) 모든 공격자 기술에 대한 완전한 면역성은 없지만 일정 수준의 보호를 제공하는 신속한 +주입을 위한 다양한 방어 전략이 제안됨 +정렬을 위한 교육 +모델 제공자는 더 엄격한 전방 정렬로 학습하여 내장 메커니즘을 계속 생성함. 예를 들어, 모 +델 정렬은 신중하게 큐레이팅되고 사전 정렬된 데이터 세트에서 학습하여 조정할 수 있음. 그 +런 다음 인간의 피드백을 통해 강화 학습을 통해 반복적으로 개선할 수 있음 +신속한 지시 및 +서식 지정 기술 +LLM 지시는 모델이 사용자 입력을 신중하게 처리하도록 신호를 보낼 수 있음. 예를 들어, 특 +정 지시를 프롬프트에 추가하면 모델은 탈옥을 구성할 수 있는 후속 콘텐츠에 대해 알 수 있 +음. 프롬프트 앞에 사용자 입력을 배치하면 지시를 따르는 최근성 편향을 활용할 수 있음. 프 +롬프트를 임의의 문자나 특수 HTML 태그로 캡슐화하면 모델에 시스템 지시와 사용자 프롬프 +트를 구성하는 것에 대한 신호를 제공함 +탐지 기술 +모델 제공자는 특별히 제작된 벤치마크 데이터 세트 또는 보호된 LLM의 입력과 출력을 모니 +터링하는 필터에 대한 평가를 통해 더 엄격한 역방향 정렬로 학습하여 내장 메커니즘을 계속 +생성함 + + +![이미지 183-0](images/p0183_img0.png) + + +![이미지 183-1](images/p0183_img1.png) + + +![이미지 183-2](images/p0183_img2.png) + + +![이미지 183-3](images/p0183_img3.png) + + +--- + +(간접 프롬프트 주입 공격 및 완화책) 간접 프롬프트 주입 공격은 리소스 제어를 통해 활성화되므로 +공격자는 RAG 애플리케이션과 직접 상호 작용하지 않고도 간접적으로(또는 원격으로) 시스템 프롬프 +트를 주입할 수 있음 +●간접적인 프롬프트 주입 공격은 공격자 목표의 네 가지 범주에 걸쳐 위반을 초래할 수 있음: ① 가 +용성 위반, ② 무결성 위반, ③ 개인정보 침해, ④ 남용 위반 +- (가용성 위반) 모델 가용성 위반은 공격자가 악의적으로 제작된 입력으로 모델을 프롬프트하여 +계산량을 증가시키거나 시스템에 많은 수의 입력을 가하여 사용자에게 서비스를 거부함으로써 +발생할 수 있는 서비스 중단임 +▸서비스 거부 공격은 모델을 무차별적으로 사용할 수 없게 만들거나(예: 유용한 출력 생성 실 +패), 특정 기능(예: 특정 API)을 구체적으로 차단할 수 있음. +▸(공격자 기술) 간접 프롬프트 주입을 통해 상업용 RAG 서비스에 대한 다음과 같은 공격이 가 +능함 +시간 소모적인 +백그라운드 작업 +프롬프트는 모델에 요청에 응답하기 전에 시간 소모적인 작업을 수행하도록 지시함. 프롬프트 +자체는 간단할 수 있으며 모델을 평가할 때 반복 동작을 요청할 수 있음 +뮤팅 +이 공격은 사용자 요청 중간에 <|endoftext|> 토큰이 나타나면 모델이 문장을 마칠 수 없다 +는 사실을 악용함. 이 토큰으로 문장을 시작하라는 요청을 포함하면 예를 들어, 검색 에이전트 +는 생성된 텍스트 없이 반환함 +기능 억제 +이 공격에서 내장된 프롬프트는 모델에 특정 API(예: Bing Chat의 색 기능)를 사용할 수 없 +음을 지시함. 이렇게 하면 서비스의 핵심 구성 요소가 선택적으로 무장 해제됨 +입력 또는 +출력 방해 +이 공격에서 간접 프롬프트 주입은 모델에 검색된 텍스트의 문자를 동형 문자로 대체하도록 +지시하여 텍스트에 의존하는 API에 대한 호출을 방해하거나, 프롬프트는 모델에 쿼리 결과를 +손상시켜 쓸모없는 검색 또는 요약을 생성하도록 지시할 수 있음 +●(무결성 위반) GenAI 시스템을 신뢰할 수 없게 만드는 위협임. AI 챗봇은 온라인 허위 정보를 악 +화시켰으며, 이는 Microsoft의 Bing과 Google의 Bard가 서로의 허위 정보 출처를 영속시키는 +경향에서 알 수 있음. LLM이 신뢰할 수 있는 뉴스 및 정보 출처를 판단할 수 없는 것은 사실과 +다른 출력을 생성하는 데 악용될 수 있음 +- (공격자 기술) LLM의 주요 작업을 조작하여 무결성 공격이 가능함. 이는 악의적인 부수 작업을 +수행하는 보다 일반적인 간접 프롬프트 주입 공격과는 다름 +- (조작) 사전에 잘못된 출력을 선택하지 않으면 모델은 검색 결과의 잘못된 요약(즉, 임의로 잘못 +된 요약)을 제공하라는 메시지를 받음. 조작 공격은 모델에 잘못된 답변을 제공하도록 지시하고 +모델의 답변이 인용된 출처와 모순되는 주장을 하게 함 +※ 조작 공격(예시): ① (잘못된 요약) 모델은 문서, 이메일 또는 검색 쿼리에 대한 적대적으로 선택되거나 임의로 잘못 +된 요약을 생성하라는 메시지를 받을 수 있음. ② (허위 정보 전파) 검색 챗봇은 신뢰할 수 없는 뉴스 소스나 다른 +검색 챗봇의 출력에 의존하거나 이를 영속화하여 허위 정보를 전파하라는 메시지를 받을 수 있음 + + +![이미지 184-0](images/p0184_img0.png) + + +![이미지 184-1](images/p0184_img1.png) + + +![이미지 184-2](images/p0184_img2.png) + + +![이미지 184-3](images/p0184_img3.png) + + +![이미지 184-4](images/p0184_img4.png) + + +--- + +부록 +●(개인정보 침해) 간접 프롬프트 주입은 수많은 새로운 개인정보 침해와 우려를 야기함. 공격자의 +목표는 두 가지 주요 범주로 나눌 수 있음 +정보 수집 +특정 공격은 이러한 위험을 높일 수 있음. 예를 들어, 인간 참여 간접 프롬프트는 사용자 데이 +터(예: 개인정보, 자격증명)를 추출하거나 채팅 세션에서 상호작용하고 사용자에게 정보를 공 +개하도록 설득하거나 사이드 채널을 통해 채팅 기록을 유출하는 데 사용될 수 있음 +무단 공개 +모델은 일반적으로 시스템 인프라에 통합되어 승인되지 않은 공개나 개인 사용자 데이터에 대 +한 권한을 부여함. 악의적인 행위자는 다양한 방법(예: API 호출 실행, 악성 코드 자동 완성) +을 사용하여 백도어 공격을 활용하여 LLM 또는 시스템에 액세스할 수 있음 +- (공격자 기술) 데이터 도용 공격을 달성하기 위해 사용한 몇 가지 공격 기술 +인간 참여 간접 +프롬프트 +읽기 작업(예: 공격자에게 요청을 하는 검색 쿼리 트리거 또는 URL 직접 검색)을 악용하여 +공격자에게 정보를 전송 +채팅 세션에서 +상호 작용 +이 모델은 공격자가 사용자 이름을 삽입하는 URL을 따르도록 사용자를 설득 +보이지 않는 +마크다운 이미지 +프롬프트 주입은 채팅봇 답변을 보이지 않는 단일 픽셀 마크다운 이미지로 수정하여 사용자의 +채팅 데이터를 악의적인 제3자에게 인출하여 채팅봇에 수행 +●(남용 위반) 공격자가 간접적인 프롬프트 주입을 통해 자신의 목적을 달성하기 위해 시스템의 의도 +된 용도를 재활용하는 경우를 광범위하게 나타냄 +- 공격자 목표는 다음과 같은 주요 범주로 나눌 수 있음 +사기 +최근 지시를 따르는 LLM의 발전으로 인해 이중 사용 위험이 동시에 증가 +맬웨어 +LLM은 사용자에게 악성 링크를 제안하여 맬웨어 확산을 현저하게 촉진할 수 있음. 또한 +LLM 통합 애플리케이션의 확산으로 프롬프트 자체가 맬웨어 역할을 하도록 강제하여 새로운 +맬웨어 위협이 발생함(예를 들어, 이메일을 읽는 LLM 증강 이메일 클라이언트는 악성 프롬프 +트를 전달한 다음 해당 프롬프트를 확산시키는 이메일을 보낼 가능성이 높음) +조작 +모델은 현재 사용자와 조작하기 쉬운 정보 출력 사이의 취약한 중개 계층 역할을 함. LLM은 +이제 일반적으로 더 큰 시스템의 일부이며 애플리케이션과 통합됨. 중개 상태는 모델을 수많 +은 취약성에 노출시킬 수 있음. 예를 들어, ①검색 챗봇은 허위 정보를 생성하도록 요청받을 +수 있고 ② 특정 정보, 소스 또는 검색 쿼리를 숨기도록 요청받을 수 있으며 ③ 모델은 적대 +적으로 선택되거나 임의로 잘못된 정보 소스(예: 문서, 이메일, 검색 쿼리)에 대한 요약을 제 +공하도록 요청받을 수 있음 + + +![이미지 185-0](images/p0185_img0.png) + + +![이미지 185-1](images/p0185_img1.png) + + +![이미지 185-2](images/p0185_img2.png) + + +![이미지 185-3](images/p0185_img3.png) + + +--- + +- (공격자 기술) 챗봇(예: Microsoft의 Bing 챗봇)을 사용한 실험을 수행하여 다양한 공격 기술의 +예를 보여줌 +피싱 +이전에는 LLM이 피싱 이메일과 같은 설득력 있는 사기를 만들어낼 수 있다는 것이 입증되었 +고, 이제 LLM이 애플리케이션과 더 쉽게 통합될 수 있으므로 사기를 만들 수 있을 뿐만 아니 +라 이러한 공격을 광범위하게 확산할 수도 있음 +위장 +LLM은 서비스 제공자의 공식 요청인 척하거나 신뢰할 수 있는 사기성 웹사이트를 추천할 수 +있음 +주입 확산 +LLM 자체는 유해한 코드를 실행하고 확산하는 컴퓨터 역할을 함(예를 들어, 이메일을 읽고 +작성하고 사용자의 개인 데이터를 볼 수 있는 자동 메시지 처리 도구는 그 수신 메시지를 읽 +을 수 있는 다른 모델에 주입을 확산할 수 있음) +맬웨어 확산 +피싱과 유사하게 LLM은 사용자가 “드라이브 바이 다운로드(drive-by downloads)”로 이어 +지는 악성 웹 페이지를 방문하도록 설득하는 데 악용될 수 있음 +역사적 왜곡 +공격자는 모델이 적대적으로 선택한 허위 정보를 출력하도록 유도할 수 있음 +주변 관련 +컨텍스트 유도 +중립적 입장 대신 특정 방향으로 검색 결과를 유도하면 편향 증폭을 달성하기 위한 공격을 만 +들 수 있음 + +●(완화책) +- 인간 피드백을 통한 강화 학습(RLHF): 인간의 참여를 간접적으로 사용하여 모델을 미세 조정하 +는 유형의 AI 모델 학습임. 이를 활용하여 LLM을 인간의 가치와 더 잘 맞추고 원치 않는 행동 +을 방지할 수 있음 +- 검색된 입력 필터링: 검색된 입력을 처리하여 명령을 필터링하는 것을 제안 +- LLM 조정자: LLM은 명백히 유해한 출력을 필터링하는 것 외에도 공격을 탐지하는 데 활용할 +수 있음. 이는 검색된 소스에 의존하지 않지만 허위 정보나 다른 종류의 조작 공격을 탐지하는 +데 유익할 수 있음 +- 해석성 기반 솔루션: 이러한 솔루션은 예측 궤적의 이상치 탐지를 수행함 + + +![이미지 186-0](images/p0186_img0.png) + + +![이미지 186-1](images/p0186_img1.png) + + +![이미지 186-2](images/p0186_img2.png) + + +![이미지 186-3](images/p0186_img3.png) + + +--- + +부록 +AI RMF 1.0 요약 +미국 국립표준기술연구소(이하 “NIST”)는 AI 시스템을 설계ㆍ개발ㆍ도입하는 조직을 위한 자발적 활 +용 가이드 문서인 ‘AI 위험관리 프레임워크 1.0(이하 “AI RMF”)’을 발표(’23.1.26) +●(목적) 모든 분야ㆍ규모의 기업ㆍ조직이 AI 위험을 해결할 수 있도록 유연하고 체계적이며 측정 가 +능한 프로세스를 제공하여 AI 기술의 이점을 극대화하고 동시에 개인ㆍ그룹ㆍ조직ㆍ사회에 부정적 +인 영향을 미칠 가능성을 줄이기 위해 수립 +●AI RMF는 조직의 크기와 형태에 상관없이 조직의 전체적인 위험관리 정책에 포함되어 AI 시스템 +의 전 주기에서 신뢰할 수 있는 AI 시스템 구현을 위한 핵심 기능의 위험관리 프로파일을 제시 +- (적용대상) 모든 분야ㆍ규모의 기업ㆍ조직의 ‘AI 시스템’ +- (적용주체 및 방식) ‘AI 행위자’*가 제시된 항목에 따라 자발적으로 참고 및 점검 +* 설계자・개발자・배포자・사용자, 고위 경영진이나 관리자 등 +- (적용시점) AI 시스템의 설계, 개발, 활용, 테스트, 평가 등 모든 단계 +- (핵심내용) 안전성, 책임・투명성 등 신뢰할 수 있는 AI 시스템의 7가지 특성을 제시하고, 이를 +위한 조직의 핵심 기능을 4가지 영역(거버넌스, 매핑(위험 식별), 측정, 관리)에서 제시 +신뢰할 수 있는 AI 시스템의 특징 +●신뢰할 수 있는 AI 시스템은 ▲타당하고 신뢰할 수 있으며, ▲안전하고, ▲보안이 철저하고, 탄력 +적이며, ▲책임을 질 수 있고, 투명하고, ▲설명 및 해석이 가능하고, ▲개인정보보호가 강화되고, +▲유해한 편향 관리를 통해 공정한 특성을 가짐 +- (유효성 및 신뢰성) 배포된 AI 시스템의 유효성과 신뢰성은 시스템이 용도에 따라 작동하는지 확 +인하는 테스트 또는 모니터링을 통해 지속적으로 평가되며 유효성, 정확성, 견고성, 신뢰성을 측 +정하여 신뢰할 수 있는 AI 시스템을 구축할 수 있음 +- (안전성) AI 시스템은 정의된 조건에 따라 작동할 때 인간의 생명, 건강, 재산 또는 환경에 유해 +한 영향을 미치지 않아야 하며 AI 시스템의 안전성은 이하를 통해 개선 가능(출처: ISO/IEC TS +5723:2022) +▸책임감 있는 설계, 개발 및 배포 기준 +▸책임감 있는 시스템 사용에 대해 배포자에게 명확한 정보 제공 +▸배포자 및 최종 사용자의 책임감 있는 의사 결정 +▸사건의 실증적 증거를 기반으로 위험 설명 및 문서화 +- (보안 및 탄력성) AI 시스템 및 시스템이 배포된 생태계는 예상치 못한 이상 반응 또는 변화를 +견딜 수 있는 경우, 내부/외부적 변화에도 불구하고 그 기능과 구조를 유지하며, 필요한 경우 안 + + +![이미지 187-0](images/p0187_img0.png) + + +![이미지 187-1](images/p0187_img1.png) + + +![이미지 187-2](images/p0187_img2.png) + + +![이미지 187-3](images/p0187_img3.png) + + +![이미지 187-4](images/p0187_img4.png) + + +![이미지 187-5](images/p0187_img5.png) + + +--- + +전하게 작동하면서 기능을 제한적으로 제공할 수 있는 탄력성이 있어야 함(출처: ISO/IEC TS +5723:2022) +- (책임 및 투명성) 책임감은 투명성*을 전제로 하며 부정확하거나 부정적인 영향을 초래하는 AI +시스템 결과를 시정하기 위해서 필요 +* AI 시스템 및 그 결과에 대한 정보가 시스템과 상호작용하는 개인에게 제공되는 정도를 반영 +- (설명 및 해석가능성) AI 시스템 작동의 기본 메커니즘을 나타내는 ‘설명가능성’과 기능적 목적 +관점에서 AI 시스템의 결과를 나타내는 ‘해석가능성’의 특성이 필요 +※ 투명성은 시스템에서 “무슨 일이 발생했는지”, 설명가능성은 “어떻게 결정이 내려졌는지”, 해석가능성은 시스템이 +결정을 내린 “이유와 그 의미 또는 상황”에 대한 질문에 답함 +- (개인정보보호 강화) AI 시스템을 설계, 개발 및 배포 시 익명성, 기밀성 및 통제 등 개인정보 +보호 가치 고려 필요 +- (공정성 : 유해한 편향 관리) 3가지 범주의 편향(시스템적 편향, 통계적 편향, 인간 인지적 편향) +을 고려하고 관리해야 함 +▸시스템적 편향은 AI 데이터셋, AI 주기 전반에 걸친 조직적 규범, 수행 기준 및 절차, AI 시스 +템을 사용하는 광범위한 사회에 존재 가능 +▸통계적 편향은 AI 데이터셋 및 알고리즘 프로세스에 존재할 수 있으며, 이는 대표성이 없는 샘플의 +체계적 오류로 인해 종종 발생 +핵심 및 프로파일 +●신뢰할 수 있는 AI 시스템을 개발하기 위해 ‘거버넌스-매핑(위험식별)-측정-관리’의 4가지 핵심 기 +능을 구성하며 각 기능은 범주와 하위 범주로 구분됨 +구성 +기능 +거버넌스 +거버넌스는 3가지 다른 기능에 정보를 제공하고 제공받는 교차 기능으로 설계되었음. 조직 내 AI +시스템을 설계, 개발, 배포 또는 획득하기 위한 위험관리 문화를 조성 +관리 +식별된 위험을 처리하고 시스템 오류 및 부정적 영향에 대한 가능성을 최소화하기 위해 거버넌스 +에서 설정된 문서 작성 기준, 매핑의 상황별 정보 및 측정의 경험적 정보를 활용. 관리 기능 후에 +는 위험 우선 순위를 지정하고 이를 지속적으로 모니터링 및 개선하기 위한 계획 수립 +매칭 +(위험식별) +측정, 관리를 기초 작업으로 AI 시스템의 위험, 광범위한 위험 유발 요인을 식별 +측정 +정량적・정성적 또는 복합적 도구, 기법 및 방법을 채택하여 AI 위험 및 관련 영향을 분석・평가하고 +하고 벤치마킹하며 모니터링. 매핑에서 식별된 AI 위험과 관련한 지식을 활용해 관리를 위한 위험 모 +니터링 +●(거버넌스) AI 시스템 수명 및 조직 계층 구조 전반에 걸쳐 AI 위험을 효과적으로 관리하기 위한 +지속적이고 본질적인 요구 사항으로, 다른 핵심 기능을 가능하게 하며 조직 내에서 AI 시스템을 설 +계・개발・배포・획득하기 위한 위험관리 문화를 조성 가능하도록 해야 함. + + +![이미지 188-0](images/p0188_img0.png) + + +![이미지 188-1](images/p0188_img1.png) + + +![이미지 188-2](images/p0188_img2.png) + + +![이미지 188-3](images/p0188_img3.png) + + +![이미지 188-4](images/p0188_img4.png) + + +--- + +부록 +거버넌스 기능 범주 및 하위범주 +범주 +하위 범주 +거버넌스 1 +AI 위험 매핑, 측정 및 관리와 +관련된 조직 전반의 정책, +프로세스, 절차 및 수행 기준이 +투명하고 효과적으로 구현된다. +1.1 AI와 관련된 법적 및 규제적 요구 사항을 이해, 관리 및 문서화한다. + +### 1.2 신뢰할 수 있는 AI의 특성을 조직적 정책, 프로세스, 절차 및 수행 기준에 통 + +합한다. + +### 1.3 조직의 위험 허용 범위를 기반으로 위험관리 활동의 수준을 결정하기 위한 프 + +로세스, 절차 및 수행 기준을 마련한다. + +### 1.4 위험관리 프로세스 및 그 결과는 투명한 정책, 절차 및 조직의 위험 우선 순위 + +를 기반으로 한 기타 통제를 통해 설정된다. + +### 1.5 위험관리 프로세스 및 그 결과에 대한 지속적인 모니터링 및 정기적인 검토를 + +계획하고 주기적 검토 빈도를 포함하여 조직의 역할 및 책무를 명확하게 정의 +한다. +1.6 AI 시스템 인벤토리를 작성하는 메커니즘을 구축하며 조직의 위험 우선 순위 +에 따라 리소스를 할당한다. + +### 1.7 위험성을 높이거나 조직의 신뢰성을 떨어뜨리지 않는 방식으로 AI 시스템을 + +안전하게 해제하고 단계적으로 중단하기 위한 프로세스 및 절차를 마련한다. +거버넌스 2 +적절한 부서 및 직원에게 AI +위험을 매핑, 측정 및 관리하기 +위한 권한을 부여하고 교육을 받을 +수 있도록 하는 책임 구조를 +구축한다. +2.1 AI 위험을 매핑, 측정 및 관리하는 것과 관련된 역할, 책임 및 커뮤니케이션 +내용을 문서화하고 이를 조직 전반의 부서 및 개인에게 명확히 인지시킨다. + +### 2.2 조직 내 직원 및 파트너는 관련 정책, 절차 및 계약에 따라 그들의 의무와 책 + +임을 수행할 수 있도록 AI 위험관리 교육을 받는다. + +### 2.3 조직의 경영진은 AI 시스템의 개발 및 배포와 관련된 위험에 대해 의사 결정 + +할 책임을 가진다. +거버넌스 3 +주기 전반에 걸쳐 AI 위험을 매핑, +측정 및 관리하기 위해 인력 +다양성, 형평성, 포용성 및 접근성 +프로세스의 우선 순위를 설정한다. + +### 3.1 주기 전반에 걸쳐 AI 위험을 매핑, 측정 및 관리하는 의사 결정을 내릴 때 다 + +양한 부서로부터 정보를 얻는다. + +### 3.2 인간-AI 구성 및 AI 시스템 감독과 관련된 역할과 책임을 정의하고 차별화하 + +기 위한 정책 및 절차를 마련한다. +거버넌스 4 +조직 내 부서는 AI 위험을 +고려하고 해당 내용에 대해 +커뮤니케이션하는 문화를 구축하기 +위해 노력한다. + +### 4.1 잠재적인 악영향을 최소화하기 위해 AI 시스템을 설계, 개발, 배포 및 사용하 + +는 데에 있어 비판적 사고 및 안전 우선 주의 방식을 장려하기 위한 조직적 +정책 및 수행 기준을 마련한다. + +### 4.2 조직 내 부서는 설계, 개발, 배포, 평가 및 사용하는 AI 기술의 위험 및 잠재 + +적 영향을 문서화하고 그 영향에 대해 보다 광범위하게 소통한다. +4.3 AI 테스트, 사고 식별 및 정보 공유를 위한 조직적 수행 기준을 마련한다. +거버넌스 5 +AI 행위자의 강력한 참여를 +유도하기 위한 프로세스를 +마련한다. +5.1 AI 위험과 관련된 잠재적인 개인적/사회적 영향에 대해 AI 시스템을 개발 또 +는 배포한 부서 외부의 피드백을 수집, 고려, 우선 순위 지정 및 통합하기 위 +한 조직적 정책 및 수행 기준을 마련한다. +5.2 AI 시스템을 개발 또는 배포한 부서가 관련 AI 행위자의 피드백을 시스템 설 +계 및 구현에 정기적으로 통합할 수 있도록 하는 메커니즘을 구축한다. +거버넌스 6 +제3자의 소프트웨어, 데이터 및 +기타 공급망 문제로 발생하는 AI +위험 및 이점을 해결하기 위한 +정책 및 절차를 마련한다. + +### 6.1 제3자의 지적재산권 또는 기타 권리 침해를 포함하여 제3자 기관과 관련된 + +AI 위험을 해결하기 위한 정책 및 절차를 마련한다. + +### 6.2 위험성이 높은 것으로 간주되는 제3자의 데이터 또는 AI 시스템의 고장 및 사 + +고를 해결하기 위한 비상 프로세스를 마련한다 + + +![이미지 189-0](images/p0189_img0.png) + + +![이미지 189-1](images/p0189_img1.png) + + +![이미지 189-2](images/p0189_img2.png) + + +![이미지 189-3](images/p0189_img3.png) + + +--- + +●(매핑) 매핑 기능을 수행하는 동안 수집된 정보는 부정적인 위험을 방지하고 프로세스(예: 모델 관리) +에 대한 의사 결정은 물론 AI 솔루션의 적합성 또는 필요성에 대한 초기 의사 결정의 정보를 제공하 +며 매핑 기능에서의 결과물은 측정(MEASURE) 및 관리(MANAGE) 기능을 위한 토대를 형성함 +매핑 기능 범주 및 하위범주 +범주 +하위 범주 +매핑 1 +상황을 설정 및 파악한다. + +### 1.1 목적, 잠재적으로 유익한 용도, 상황별 법률, 규범, 기대치, AI 시스템이 배포될 예상 + +조건을 파악하고 이하를 고려해 문서화한다. +<고려 사항> +∙사용자의 특정 집합 또는 유형(기대치 포함) +∙시스템이 개인, 커뮤니티, 조직, 사회 및 지구에 미치는 잠재적인 긍정적/부정적 영향 +∙개발 또는 제품 AI 주기 전반에 걸친 AI 시스템의 목적, 용도 및 위험에 관한 가정 +및 관련 제한 사항 +∙관련 TEVV 및 시스템 지표 + +### 1.2 학제 간(Interdisciplinary) AI 행위자, 기능, 기술 및 상황 설정을 위한 역량은 인구 + +통계학적 다양성, 광범위한 도메인 및 사용자의 전문 지식을 반영하며, 이들의 참여는 +문서화된다. 학제 간 협업 기회는 우선순위로 지정된다. +1.3 AI 기술에 대한 조직의 사명 및 목표를 파악하고 문서화한다. + +### 1.4 비즈니스 가치 또는 비즈니스 상황을 명확하게 정의하거나 (기존의 AI 시스템을 평가 + +하는 경우) 재평가한다. + +### 1.5 조직의 위험 허용 범위를 파악하고 문서화한다. + + +### 1.6 관련 AI 행위자로부터 시스템 요구 사항(예: 사용자의 개인정보를 보호해야 하는 시스 + +템)을 도출하고 파악한다. 설계 의사 결정 시 AI 위험을 해결하기 위해 사회적·기술적 +영향을 고려한다. +매핑 2 +AI 시스템을 분류한다. +2.1 AI 시스템이 지원하는 작업을 구현하는 데 사용되는 특정 작업 및 방법을 정의한다. +(예: 분류자, 생성 모델, 추천자) +2.2 AI 시스템의 정보 한계 및 인간이 시스템 결과를 활용하고 감독하는 방법에 관한 정 +보가 문서화된다. 문서화를 통해 관련 AI 행위자가 의사 결정을 내리고 후속 조치를 +취하기 위한 충분한 정보를 제공할 수 있다. + +### 2.3 실험 설계, 데이터 수집 및 선택(예: 가용성, 대표성, 적합성), 시스템 신뢰성 및 구성 + +타당성과 관련된 항목을 포함하여 과학적 무결성 및 TEVV 고려 사항을 식별하고 문 +서화한다 +매핑 3 +적절한 벤치마크와 +비교하여 AI 기능, 대상 용도, +목표, 예상 이점 및 비용을 +파악한다. +3.1 AI 시스템의 기능 및 성능에 대한 잠재적 이점을 조사하고 문서화한다. + +### 3.2 잠재적/실제적 AI 오류 또는 시스템의 기능 및 신뢰성(조직의 위험 허용 범위와 연관 + +됨)으로 인해 발생하는 비금전적 비용을 포함한 잠재적 비용을 조사하고 문서화한다. + +### 3.3 대상 응용 프로그램 범위는 시스템 기능, 설정된 상황 및 AI 시스템 분류를 기반으로 + +지정 및 문서화된다. +3.4 AI 시스템 성능, 신뢰성, 관련 기술 표준 및 인증에 대해 운영자 및 실무자를 숙련시 +키는 프로세스를 정의, 평가 및 문서화한다. + +### 3.5 거버넌스 기능의 조직적 정책에 따라 사람의 감독(human oversight) 프로세스를 정의, + +평가 및 문서화한다. + + +![이미지 190-0](images/p0190_img0.png) + + +![이미지 190-1](images/p0190_img1.png) + + +![이미지 190-2](images/p0190_img2.png) + + +![이미지 190-3](images/p0190_img3.png) + + +--- + +부록 +●(측정) 정량적・정성적 또는 복합적 도구, 기법 및 방법을 채택하여 AI 위험 및 관련 영향을 분석, +평가, 모니터링하고 매핑(MAP) 기능에서 식별된 AI 위험과 관련한 지식을 사용하며 관리 +(MANAGE) 기능의 위험 모니터링 및 대응 활동에 필요한 정보를 제공 +측정 기능 범주 및 하위범주 +범주 +하위 범주 +매핑 4 +제3자의 소프트웨어 및 데 +이터를 포함하여 AI 시스템 +의 모든 구성 요소에 대한 +위험 및 이점을 매핑한다 + +### 4.1 제3자의 지적재산권 또는 기타 권리 침해 위험과 마찬가지로 AI 기술과 구성 요소의 + +법적 위험(제3자의 데이터 또는 소프트웨어 사용 포함)을 매핑하는 방법을 확립하고 +이를 준수하여 문서화한다. + +### 4.2 제3자의 AI 기술을 포함하여 AI 시스템 구성 요소에 대한 내부 위험 통제를 식별하고 + +문서화한다. +매핑 5 +개인, 그룹, 커뮤니티, 조직 +및 사회에 대한 영향을 특 +성화 한다 + +### 5.1 예상 용도, AI 시스템의 과거 용도, 공개 사건 보고, AI 시스템을 개발 또는 배포한 + +팀에 대한 외부 피드백 또는 기타 데이터를 기반으로 식별된 각 영향(잠재적으로 긍정 +적인 또는 부정적인 영향 모두)에 대한 가능성과 규모를 식별하고 문서화한다. + +### 5.2 관련 AI 행위자의 정기적인 참여를 지원하고 긍정적/부정적/예상치 못한 영향에 관한 + +피드백을 통합하기 위한 절차 및 인력을 구축하고 이를 문서화한다. +범주 +하위 범주 +측정 1 +적절한 방법 및 지표를 식별하고 +적용한다. +1.1 +가장 중요한 AI 위험을 우선적으로 구현하기 위해 매핑 기능을 통해 열거된 +AI 위험 측정 방법 및 지표를 선택한다. 측정하지 않거나 측정할 수 없는 위 +험 또는 신뢰도 특성을 적절히 문서화한다. +1.2 +오류 보고서 및 커뮤니티에 대한 잠재적 영향을 포함하여 AI 지표의 적절성 +및 기존 통계의 효율성을 정기적으로 평가 및 업데이트한다. +1.3 +시스템의 일선 개발자 또는 독립 평가자의 역할을 하지 않은 내부 전문가를 +정기적 평가 및 업데이트에 참여시킨다. 도메인 전문가, 사용자, AI 시스템을 +개발 또는 배포한 팀의 외부 AI 행위자 및 영향을 받는 커뮤니티는 조직의 위 +험 허용 범위에 따라 필요한 평가를 지원한다. +측정 2 +신뢰할 수 있는 특성에 대해 AI +시스템을 평가한다. +2.1 +TEVV 중에 사용된 도구의 테스트 세트, 지표 및 세부 정보를 문서화한다. +2.2 +인간 피실험자와 관련된 평가는 관련 요구 사항(인간 피실험자 보호 포함)을 +충족하고 모집단을 대표한다. +2.3 +AI 시스템의 성능 또는 보증 기준을 정성적 또는 정량적으로 측정하고 배포 +조건과 유사한 조건에서 입증한다. 조치를 문서화한다. +2.4 +매핑 기능에서 식별된 AI 시스템 및 구성 요소의 기능과 동작은 제조 시 모니 +터링된다. +2.5 +배포할 AI 시스템이 타당하고 신뢰할 수 있는지를 입증한다. 기술 개발 조건 +이외의 일반화 한계를 문서화한다. +2.6 +매핑 기능에서 식별되는 안전 위험에 대해 AI 시스템을 정기적으로 평가한다. +배포할 AI 시스템이 안전하다는 것을 입증하고 남은 부정적 위험은 위험 허용 +범위를 초과하지 않아야 한다. AI 시스템이 정보 한계를 넘어 작동하도록 구 +성된 경우 안전에 실패할 수 있다. 안전 지표는 시스템의 신뢰성, 견고성, 실 +시간 모니터링 및 AI 시스템 오류에 대한 응답 시간을 반영한다. + + +![이미지 191-0](images/p0191_img0.png) + + +![이미지 191-1](images/p0191_img1.png) + + +![이미지 191-2](images/p0191_img2.png) + + +![이미지 191-3](images/p0191_img3.png) + + +--- + +●(관리) 식별된 위험을 처리하고 시스템 오류 및 부정적 영향에 대한 가능성을 최소화하기 위해 거 +버넌스에서 설정된 문서 작성 기준, 매핑의 상황별 정보 및 측정의 경험적 정보를 활용하며 관리 +기능이 완료되면 위험 우선순위를 지정하고 이를 지속적으로 모니터링 및 개선하기 위한 계획이 +수립됨 +범주 +하위 범주 +2.7 +매핑 기능에서 식별된 AI 시스템의 보안 및 탄력성을 평가 및 문서화한다. +2.8 +매핑 기능에서 식별된 투명성 및 책임과 관련된 위험을 조사하고 문서화한다. +2.9 +AI 모델을 설명, 검증 및 문서화해야 하며 책임 있는 사용과 거버넌스 기능에 +대해 알리기 위해 AI 시스템 결과를 매핑 기능을 통해 식별한 상황 내에서 해 +석해야 한다. + +### 2.10 매핑 기능에서 식별된 AI 시스템의 개인정보보호 위험을 조사하고 문서화한다. + + +### 2.11 매핑 기능에서 식별된 공정성 및 편향을 평가하고 그 결과를 문서화한다. + + +### 2.12 매핑 기능에서 식별된 AI 모델 훈련 및 관리 활동에 대한 환경적 영향 및 지 + +속 가능성을 평가하고 문서화한다. + +### 2.13 측정 기능에서 사용된 TEVV 지표 및 프로세스의 효율성을 평가하고 문서화 + +한다. +측정 3 +AI 위험을 시간 경과에 따라 추 +적하는 메커니즘을 구축한다. +3.1 +배포 상황 내에서 잠재적/실제적 성능 등의 요소를 기반으로 기존의, 예상치 +못한, 새로운 AI 위험을 정기적으로 식별하고 추적하기 위한 접근 방법, 인력 +및 문서를 구축한다. +3.2 +현재 가용 측정 기술을 사용하여 AI 위험을 평가하기 어렵거나 관련 지표를 +아직 사용할 수 없는 경우 위험 추적 접근 방법이 고려된다. +3.3 +문제를 보고하고 시스템 결과에 이의를 제기하기 위한 최종 사용자 및 영향을 +받는 커뮤니티의 피드백 프로세스를 구축하여 AI 시스템 평가 지표에 통합한다. +측정 4 +측정 효율성에 대한 +피드백을 수집하고 평가한다 +4.1 +AI 위험을 식별하기 위한 측정 방법을 배포 상황과 연관시켜 도메인 전문가 +및 기타 최종 사용자와의 협의를 통해 정보를 얻는다. 접근 방법을 문서화한다. +4.2 +시스템이 의도한 바에 따라 일관되게 수행되는지를 검증하기 위해 도메인 전 +문가 및 관련 AI 행위자를 통해 배포 상황 및 AI 주기 전반에 걸친 AI 시스템 +신뢰도에 대한 측정 결과를 얻는다. 결과를 문서화한다. +4.3 +커뮤니티 및 관련 AI 행위자와의 협의를 기반으로 측정한 성능의 개선 또는 +감소, 상황과 관련된 위험 및 신뢰도 특성에 관한 현장 데이터를 식별하고 문 +서화한다. + + +![이미지 192-0](images/p0192_img0.png) + + +![이미지 192-1](images/p0192_img1.png) + + +![이미지 192-2](images/p0192_img2.png) + + +![이미지 192-3](images/p0192_img3.png) + + +--- + +부록 +관리 기능 범주 및 하위범주 +범주 +하위 범주 +관리 1 +매핑 및 측정 기능으로부터 얻 +은 평가 및 기타 분석 결과를 +기반으로 AI 위험에 대해 우선 +순위를 부여하고, 대응하며, 관 +리한다. +1.1 AI 시스템이 의도한 목적 및 목표를 달성했는지 여부와 시스템의 개발 또는 배포 +를 진행해야 하는지 여부에 대한 결정을 내린다. + +### 1.2 문서화된 AI 위험은 영향, 가능성, 가용 리소스 또는 방법에 따라 그 우선 순위가 + +지정된다. + +### 1.3 매핑 기능을 통해 식별된 우선 순위가 높은 AI 위험에 대응하기 위한 방법을 개 + +발, 계획 및 문서화한다. 위험 대응 옵션에는 완화, 이전, 회피 또는 수용이 포함 +된다. +1.4 AI 시스템의 후속 취득자 및 최종 사용자 모두에 대한 부정적인 잔류 위험(완화 +되지 않은 모든 위험의 합계로 정의됨)을 문서화한다. +관리 2 +관련 AI 행위자의 개입을 통해 +AI 이점을 극대화하고 부정적인 +영향을 최소화하기 위한 전략을 +계획, 준비, 구현, 문서화하고 +해당 정보를 제공한다. + +### 2.1 잠재적 영향의 규모 또는 가능성을 줄이기 위해 실행 가능한 AI가 아닌 대체 시 + +스템, 접근 방식 또는 방법과 함께 AI 위험을 관리하는 데 필요한 리소스를 고려 +한다. + +### 2.2 배포된 AI 시스템의 가치를 유지하기 위한 메커니즘을 구축하고 적용한다. + + +### 2.3 이전에 알려지지 않은 위험이 식별될 경우 해당 위험에 대응하고 그로부터 복구 + +하기 위한 절차를 준수한다. + +### 2.4 의도한 목적과는 다른 성능 또는 결과를 나타내는 AI 시스템을 대체, 해제 또는 + +비활성화하기 위한 메커니즘을 마련하고 관련 책무를 할당하고 파악한다. +관리 3 +제3자 기관의 AI 위험 및 이점 +을 관리한다. + +### 3.1 제3자 리소스의 AI 위험 및 이점을 정기적으로 모니터링하고 위험 통계를 적용 + +하고 문서화한다. +3.2 AI 시스템의 정기적 모니터링 및 유지 관리의 일환으로 개발용으로 사용되는 사 +전 학습된 모델을 모니터링한다. +관리 4 +식별 및 측정된 AI 위험에 대해 +위험 처리(대응 및 복구 포함) +및 커뮤니케이션 계획을 문서화 +하고 이를 정기적으로 모니터링 +한다. + +### 4.1 배포 후 AI 시스템에 대한 모니터링 계획을 구현한다. 여기에는 사용자 및 기타 + +관련 AI 행위자의 의견을 수집하고 평가하기 위한 메커니즘, 이의 제기, 중단, 해 +제, 사고 대응, 복구 및 변경 관리가 포함된다. + +### 4.2 지속적인 개선 활동이 AI 시스템 업데이트에 통합되며, 여기에는 이해당사자(관 + +련 AI 행위자 포함)와의 정기적인 참여가 포함된다. + +### 4.3 사고 및 오류는 영향을 받는 커뮤니티를 포함하여 관련 AI 행위자에게 전달된다. + +사고 및 오류를 추적하고, 이에 대응하며, 그로부터 복구하기 위한 프로세스를 준 +수하고 이를 문서화한다. + + +![이미지 193-0](images/p0193_img0.png) + + +![이미지 193-1](images/p0193_img1.png) + + +![이미지 193-2](images/p0193_img2.png) + + +![이미지 193-3](images/p0193_img3.png) + + +--- + +AI 관련 국내외 정책 동향 +4.1 +개요 +AI 윤리기준 중심으로 이루어지던 국제적 논의가 최근 AI의 위험성을 적절히 통제할 수 있는 규제에 +대한 논의로 본격 전환되면서 EU, 미국, 영국 등 주요국을 중심으로 AI 관련 국제 규범을 주도하고 +국내 입법을 마련하기 위한 움직임이 빠르게 이루어지고 있음 +●EU는 AI가 초래할 수 있는 위험으로부터 기본권과 안전 등의 가치를 보장하는데 초점을 두면서도 기 +술발전을 통한 혁신과 시장의 발전을 저해하지 않는 것을 기본방향으로 설정 +●미국은 행정부 내에서 효력이 발생하는 행정명령을 통해 AI의 긍정적인 잠재성은 극대화하고 국가안 +보, 허위정보 생성, 일자리 등에 미치는 영향은 최소화하려는 규제 방식임 +●영국, 일본 등 주요국은 EU와 미국의 규제 방향을 고려하고 해당 국가의 기술수준과 산업현황 등 +에 기반하여 국내외 규제 논의에 유연하게 대응하고 있음 +세계 각국은 강력한 규제에서 유연한 규제까지 다양한 규제 접근방식을 도입하고 있으며, 규제의 강도 +에는 차이가 있으나 AI가 초래할 부작용 및 위험에 대한 심각성을 인지하고 AI 규제 도입의 필요성에 +는 공감하고 있음 +4.2 +유럽연합 +AI에 대한 법적 대응을 가장 적극적으로 하는 EU의 경우, EU AI Act(이하, “인공지능법”이라 함)가 +유럽의회를 통과(2023년 6월)하여 2026년부터 시행 예정임 +●EU의 접근방식은 인공지능의 여러 형태의 사용과 관련된 위험을 평가하는 것을 기반으로 하며 시 +민의 기본권, 건강, 안전 또는 기타 공공의 이익에 용납할 수 없는 위험을 초래하는 침입적이고 차별 +적인 사용의 경우 전면적인 금지를 규정하고 있음10 +●인공지능법은 ‘리스크 기반 접근방식(Risk-Based Approach)’을 채택하여 AI 시스템의 리스크를 +(i) 허용할 수 없는 위험군(Unacceptable risk), (ii) 고위험군(High risk), (iii) 제한된 위험군(Limited +risk), (iv) 최소 위험군(Minimal risk)으로 분류하여 수범자 별로 금지 여부, 적합성 평가 등 차등 +적인 의무를 부과하고 있음 +●인공지능법을 위반하는 기업은 최대 약 424억 원 또는 연간 글로벌 매출의 6%에 해당하는 벌금이 +부과되며 AI에 의한 스코어링과 분류 등을 엄격하게 금지하고 있음 +10 +성욱준, 지능 시대 도래에 따른 AI 입법수요 및 과제 연구, 국회입법조사처, 2023. 12, 45면 + + +![이미지 194-0](images/p0194_img0.png) + + +![이미지 194-1](images/p0194_img1.png) + + +![이미지 194-2](images/p0194_img2.png) + + +![이미지 194-3](images/p0194_img3.png) + + +![이미지 194-4](images/p0194_img4.png) + + +![이미지 194-5](images/p0194_img5.png) + + +--- + +부록 +리스크 기반 AI 시스템 위험관리 +허용할 수 +없는 위험군 +• 인간의 안전, 건강, 생계, 기본권을 위협하는 명백한 위협이 되는 인공지능 시스템. +합법적으로 허가를 받는 연구목적의 개발 및 운영을 제외하고는 현장 활용이 전면 금지 +• (예시) ①개인이나 집단을 사회적 행동이나 개인을 특성을 기반으로 평가하거나 분류하는 사회적 점수 +시스템, ②인터넷이나 CCTV 영상에서의 무차별적인 안면 이미지 수집을 통해 안면 인식 데이터베이 +스를 구축・활용하는 시스템, ③인종, 성적 지향성, 종교적 신념을 나타내는 민감한 개인 생체인식 데이 +터를 기반으로 사람을 판별하는 시스템 등 +고위험군 +• 시스템 개발자, 공급자, 유통업체, 이용자 각각에게 AI 활용 시 반드시 수행해야 할 의무사항을 규정 +• (서비스 수입 및 유통업체 포함), EU내 소재하는 AI 시스템 배치자 모두에게 적용 +• (예시) ①교육 및 직업 훈련 시스템(교육 기회 결정, 학생 평가 시스템, 교육 기관 입학 시 응시자 평가 +시스템, 응시자 시험감독 시스템 등), ②근로자 관리 및 자영업 계약 관련 시스템, ③필수공공/민간 서 +비스에 사용되는 시스템(주로 서비스 혜택 적격성을 평가하는 시스템. 의료보험용 개인평가 시스템, 복 +지 수당 적격자 평가시스템 등 포함) 등 +제한된 +위험군 +• 챗봇과 같이 인간과 상호작용하는 서비스, 딥페이크와 같이 컨텐츠를 생성하거나 조작하는 시스템이 +포함됨. 이 경우 투명성의 원칙이 강조되어 서비스 제공자는 ①시스템과 상호작용하는 자연인에게 인 +간이 아닌 봇과 상호작용하고 있음이 알려지도록 시스템을 설계 및 운영해야 하고 ②딥페이크*와 같 +은 생성 AI의 결과물은 그 산출물이 AI를 활용하여 생성 혹은 조작되었음을 공개**하여야 함 +* 딥페이크는 진정하거나 진실한 것이라고 잘못 보여지는 텍스트, 오디오 또는 시각적 콘텐츠와 그 사 +람의 동의없이 그 사람이 실제로 하지 않은 말 또는 행동을 표시하는 것으로 정의 +** 공개란 해당 콘텐츠 이용자에게 콘텐츠가 진정한 것이 아님을 분명하게 시각적 방법으로 콘텐츠에 +표시하는 것 +최소 위험군 +• 추가적인 법적 의무 없이 기존 법규에 따라 개발 및 사용이 가능 +4.3 +미국 +미국은 인공지능의 개발과 활용을 안전하고 책임감 있게 활용하는 것을 최우선 과제로 삼고 있으며, +이를 위해 연방 정부 차원에서의 통합된 접근방식을 추진 중임 +미국은 AI 규제에 관한 포괄적인 입법을 진행하고 있지는 않으나, 2023년 10월 30일, “안전하고 보 +안이 보장되며 신뢰할 수 있는 AI의 개발과 사용에 대한 행정명령”(Executive Order on the Safe, +Secure, and Trustworthy Development and Use of Artificial Intelligence, 이하 “AI 행정명 +령”)에 바이든 대통령이 서명함으로써 연방기관들이 범정부 차원의 규제 프레임 마련에 나서고 있음 +●AI 행정명령은 시장주의적인 접근을 취하면서 혁신의 지속을 위한 정부의 책임과 역할을 전략적으로 +규율하는 것이 특징임 +●AI 행정명령은 8개 분야의 ‘정책 및 원칙(Guiding Principles)’을 제시(Sec.2)하고 있으며, 이를 기반 +으로 연방정부와 관련 기관이 인공지능의 개발과 활용을 촉진하고 관리하기 위해 수행해야 하는 세 +부 조치사항(Sec.4~11)을 제시함 +- 예컨대, 딥페이크를 포함한 인공지능을 이용한 사기 등으로부터 국민을 보호하기 위해 상무부에 +서 인공지능 생성 콘텐츠를 탐지하고 정부 공식 콘텐츠를 인증하는 모범관행 및 기준이 포함된 + + +![이미지 195-0](images/p0195_img0.png) + + +![이미지 195-1](images/p0195_img1.png) + + +![이미지 195-2](images/p0195_img2.png) + + +![이미지 195-3](images/p0195_img3.png) + + +![이미지 195-4](images/p0195_img4.png) + + +--- + +지침을 마련하도록 하고 있음 +- 또한, 국립표준기술연구소(NIST)를 통한 표준 제정을 통해 AI 보안과 안보 관련 위험을 최소화 +하고 관련 기업들의 법률 준수와 관련한 예측 가능성을 담보하고, 고성능 AI에 대해서는 레드팀 +을 통해 AI의 시스템 결함 및 취약점을 찾도록 하는 실증적인 접근을 하며, 소규모 개발자 등에 +대한 제도적 지원과 함께 해외 AI 인재를 유치하기 위한 정책을 제시함 +4.4 +영국 +영국은 EU와의 차별성을 강조하며 AI 관련 규제에 대한 친혁신 프레임워크를 제시하고 AI 분야에서 +의 선도적인 지위를 유지해 나가고자 함. EU 인공지능법과 달리 영국은 AI 관련 규제의 입법을 시도 +하지 않고, AI 활용 분야에 따라 기존의 규제 부처에서 관련 규범을 만들고자 하고 있음11 +이러한 AI 관련 규제 설계의 중심이 되는 것은 2022년의 ‘친혁신적 AI 규제 수립을 위한 정책 보고 +서’와 2023년의 ‘AI 규제에 대한 친혁신적 접근’ 백서임. +●“친혁신적 AI 규제 수립을 위한 정책 보고서”는 EU 인공지능법과 같이 AI 시스템에 대한 고정된 정의 +를 제시하는 대신, AI가 공통적으로 갖는 핵심 특징을 학습 결과가 지속적으로 반영되어 의도나 논 +리를 설명하기 어렵다는 ‘적응력’과 복잡한 인지적 과업을 자동화하여 명확한 의도나 인간의 통제 없 +이도 의사결정을 함은 ‘자율성’으로 규정하고, 각 규제기관이 소관 분야의 특성에 맞게 더 자세한 정의 +를 발전시키도록 하였음 +●“AI 규제에 대한 친혁신적 접근 백서”는 AI 규제를 단시일 내에 법제화하지 않음을 재확인하면서 AI 규 +제 프레임워크의 이행 원칙 및 이행 방안을 구체화하여 제시하고, 규제기관으로서 정부의 역할을 +규정하였음 +4.5 +중국 +중국은 AI를 전체적으로 규제하기보다는 새로운 AI 제품이 등장할 때마다 개별 법안을 발표하는 형태 +로 단편적이고 세분화된 규제를 시행하고 있음. 이러한 접근방식은 기술변화에 따라 신속하게 대응할 +수 있디는 장점이 있으나, 장기적이고 거시적인 관점의 발전을 저해할 수 있음12 +심층합성기술(深層合性技術, 딥페이크)은 「인터넷 정보 서비스의 심층합성 관리 규정」을 마련하고, +‘생성형 인공지능 서비스’는 별도의 규정인 「생성형 인공지능 서비스 규정」을 통해 규제13 +11 +광장 국제통상연구원, “글로벌 인공지능(AI) 규제 동향과 시사점 - EU, 미국, 영국을 중심으로”, 「Issue Brief」 vol. 2, 2024, 5~7면 +12 +강진원・김혜나, “EU 인공지능(AI) 규제현황과 시사점”, 「KISTEP 브리프 119」, 2024. 2, 5면 +13 +채은선, “해외 생성형 인공지능 관련 주요 규제 동향 및 시사점”, 「디지털법제 Brief」, 한국지능정보사회진흥원(NIA), 2024. 3, 2~3면 + + +![이미지 196-0](images/p0196_img0.png) + + +![이미지 196-1](images/p0196_img1.png) + + +![이미지 196-2](images/p0196_img2.png) + + +![이미지 196-3](images/p0196_img3.png) + + +![이미지 196-4](images/p0196_img4.png) + + +--- + +부록 +●(생성형 인공지능) 「생성형 인공지능 규정(‘23.7.13.공표, ’23.8.15.시행)」은 중국 내에서 생성형 +인공지능 기술을 이용하여 텍스트, 이미지, 오디오, 영상 및 기타 콘텐츠를 생성하는 서비스 제공을 +규제 +- 서비스 유형별로 생성형 인공지능 서비스의 투명성 증진 및 생성된 콘텐츠의 정확성・신뢰성 향 +상을 위한 효과적 조치 수행 +- 생성형 인공지능 서비스 공급자들은 「인터넷 정보 서비스의 심층합성 관리 규정」에 따라 생성된 +그림, 동영상 및 기타 콘텐츠에 표시 +- 생성형 인공지능 서비스 공급자는 이용자가 불법적인 활동에 자사의 서비스를 이용한다는 사실 +을 알게 된 경우 해당 이용자에 대해 경고 및 해당 서비스의 제한・정지・종료 조치 가능 +4.6 +일본 +일본의 정부 부처들은 AI라는 새로운 법적 문제와 관련한 가이드라인을 발표 +●2024년 1월, 일본 총무성과 경제산업성은 ‘기업을 위한 AI 가이드라인 초안’을 발표하였음. 이 가이 +드라인은 기업 및 정부 기관의 AI 개발자, 제공자 및 사용자를 대상으로 하고, 비업무용 사용자는 +제외됨 +주요 7개국(G7)이 2023년 5월 일본 히로시마에서 연 정상회의를 계기로 ‘히로시마 AI 프로세스’에 +합의(2023.10.30.). G7 정상들은 챗GPT 등 첨단 AI의 기회와 변혁 가능성을 강조하며 이와 함께 위 +험을 관리해 법의 지배와 민주주의 가치를 포함한 공유된 원칙을 지킬 필요성을 공유 + + +![이미지 197-0](images/p0197_img0.png) + + +![이미지 197-1](images/p0197_img1.png) + + +![이미지 197-2](images/p0197_img2.png) + + +![이미지 197-3](images/p0197_img3.png) + + +![이미지 197-4](images/p0197_img4.png) + + +--- + +TTA "신뢰할 수 있는 인공지능 개발 안내서"와 비교 및 차별점 +TTA 「신뢰할 수 있는 인공지능 개발 안내서」와 차별점 +본 안내서는 미국, 유럽, 일본 등 해외기관에서 발표한 원칙 및 프레임워크 등을 참조하였고, 국내자료 +로는 과학기술정보통신부/한국정보통신기술협회(TTA)에서 발간한 「신뢰할 수 있는 인공지능 개발 안 +내서: 일반분야」, 국가정보원/국가보안기술연구소에서 발간한 「챗GPT 등 생성형 AI 활용 보안 가이 +드라인」, 금융보안원에서 발간한 「금융분야 AI 보안 가이드라인」 등도 참고하였다. +「신뢰할 수 있는 인공지능 개발 안내서: 일반분야(과기정통부·TTA, 이하 ‘AI 신뢰 안내서’라고 함)」는 +인공지능 신뢰성 확보를 위한 원칙을 수립하는데 주요 목적이 있었다. 이에 따라 윤리, 편향성, 프라이 +버시 등이 AI 서비스의 주요 키워드로 사용되었으나, 본 「인공지능(AI) 보안 안내서」는 신뢰성, 프라이버 +시 등에 관한 항목을 모두 제외하고 보안의 기본원칙에 따라 기밀성·무결성·가용성 보장을 위한 기술적 +요구사항에 초점을 맞추었다. +●AI의 “신뢰성(Trustworthy)”은 AI의 활용 및 적용 과정에서의 편향 및 차별 발생, 설명 가능 여 +부, 오작동 사례 등 크고 작은 이슈가 생겨나면서 2010년대 중후반부터 국제사회에서 논의되기 시 +작하였고, “AI 윤리”라는 개념으로 더욱 널리 알려져 있다. ‘신뢰’는 사전적 정의로 ‘굳게 믿고 의지 +함’을 말하는데, 여기서 ‘무엇’ 때문에 대상을 믿을 수 있는가? 라는 질문에 대한 대답은 천차만별 +일 수 있다. ‘Trustworthy’와 ‘Reliability’ 두 단어 모두 ‘신뢰성’이라 번역되지만, 그 의미는 미세 +한 차이가 있다. Reliability가 성능이나 품질이 견고한가에 달려 있다면, Trustworthy는 결과에 +따른 부작용 여부, 시스템이나 관리체계 수준 등으로 AI를 얼마나 믿고 쓸 수 있는가와 관계가 있 +다. AI 신뢰성을 “인공지능이 내포한 위험과 기술적 한계를 해결하고 활용・확산 과정에서의 위 +험・부작용을 방지하기 위한 가치 기준”으로 정의하기도 한다. 이처럼 신뢰성은 다양한 속성이 고려 +되어야 하는 포괄적 개념이다. 주로 AI의 설명 가능 여부와 투명성, 책임성, 공정성, 안전성 및 강 +건성, 그리고 개인정보보호 등이 이에 해당한다. +●정보 보안(security)은 중요한 정보의 공개, 변경, 파괴를 초래하는 무단 액세스 또는 데이터 유출 +등의 위협으로부터 데이터 및 정보시스템을 보호하는 것을 말하며, 기밀성(Confidentiality), 무결 +성(Integrity) 및 가용성(Availability)의 세 가지 원칙을 보장하기 위한 다양한 기술적인 조치가 수반 +된다. 보안은 신뢰성 보장을 위한 여러 가지 속성 중 “안전성”과 밀접한 관련이 있다. AI의 “안전 +성”은 시스템이 예측 가능하고, 해로운 행동이나 결과를 초래하지 않는 것을 말하며, AI가 인간 사 +용자와 환경에 해를 끼치지 않도록 하는 특성을 가지고 있다. + + +![이미지 198-0](images/p0198_img0.png) + + +![이미지 198-1](images/p0198_img1.png) + + +![이미지 198-2](images/p0198_img2.png) + + +![이미지 198-3](images/p0198_img3.png) + + +![이미지 198-4](images/p0198_img4.png) + + +![이미지 198-5](images/p0198_img5.png) + + +--- + +부록 +●결론적으로 신뢰성과 안전성이 보안 보다 더 큰 개념이며 보안은 AI의 안전성, 크게는 AI의 신뢰성 +을 보장하기 위한 핵심 구성요소로서 기능한다고 말할 수 있다. 따라서 본 「인공지능(AI) 보안 안 +내서」는 보안의 목표인 기밀성・무결성・가용성 보장을 위한 요구사항에 초점을 맞추었다. +부록 그림 1 AI 신뢰 안내서」와 「인공지능(AI) 보안 안내서」의 윤리 기준 비교 +또한 「AI 신뢰 안내서(과기정통부・TTA)」가 AI 개발자를 대상으로 한 것과 달리, 본 「인공지능(AI) 보 +안 안내서」는 개발자 뿐만 아니라 서비스 제공자 및 이용자를 대상으로 적용대상을 확대하였다. +부록 표 1 AI 신뢰 안내서(TTA)와 AI 보안 안내서(KISA)의 적용 대상 비교 +AI 신뢰 안내서 적용 대상 +확대 +AI 보안 안내서 적용 대상 +AI 모델, 시스템 등 개발자 +AI 모델, 시스템 등 개발자 +AI 서비스, 플랫폼 제공자 +AI 서비스 이용자 +●「인공지능(AI) 보안 안내서」는 AI 모델을 개발하는 개발자와 개발조직, 모델을 활용하여 서비스를 +제공하는 사업자, 해당 서비스를 이용하여 결과물을 생성한 이용자 모두를 대상으로 하여 각 주체 +별로 AI 보안에 대한 안내서를 마련하였다. 이를 위해 인공지능 발전과 신뢰 기반 조성 등에 관한 +기본법(인공지능 기본법, '26. 1. 22 시행예정), EU AI Act 등을 참고하여 개발자, 서비스 제공자, +이용자의 개념을 아래와 같이 정의하였다. + + +![이미지 199-0](images/p0199_img0.png) + + +![이미지 199-1](images/p0199_img1.png) + + +![이미지 199-2](images/p0199_img2.png) + + +![이미지 199-3](images/p0199_img3.png) + + +![이미지 199-4](images/p0199_img4.png) + + +![이미지 199-5](images/p0199_img5.png) + + +--- + +- “개발자”라고 하면 주로 소프트웨어 개발자(Developer 혹은 Engineer) 또는 개발 조직(기업)을 +지칭하며, 이들은 시스템 분석가의 요구에 맞게 컴퓨터 프로그래밍을 하거나 시스템 설계를 하는 +사람 또는 조직(기업)을 말한다. 안내서에서 개발자는 요구사항 및 검증항목에 따라 조직의 구성 +원 개인일 수도 있고 팀(조직) 또는 회사가 될 수도 있다. 따라서 개발자가 실제 이 안내서를 참 +고할 때 해당 내용이 개발자 개인에 관한 것인지 아니면 조직 또는 회사가 주도적으로 해야 할 +것인지 여부에 대한 혼란이 있을 수 있다. 그래서 「인공지능(AI) 보안 안내서」에서는 요구사항 +별로 수행주체를 명시적으로 표시하였다. +- “서비스제공자”는 업으로서 AI 서비스 또는 AI 부수 서비스를 타인에게 제공하는 자를 말한다. +“업으로” 한다는 것은 같은 행위를 계속하여 반복하는 것을 의미하고, 여기에 해당하는지 여부는 +단순히 그에 필요한 인적 또는 물적 시설의 구비 여부와는 관계없이 행위의 반복・계속성 여부, +영업성의 유무, 그 행위의 목적이나 규모・횟수・기간・태양 등의 여러 사정을 종합적으로 고려하 +여 사회통념에 따라 판단하여야 한다. 이 안내서에서 서비스제공자는 영리를 목적으로 AI 서비 +스를 제공하는 법인(회사 등)을 말한다. 그러나 실제 업무 수행 시에는 임직원 개인이 해야 할 +것인지 아니면 조직 또는 회사가 해야 할 것인지 불명확한 경우가 있을 수 있다. 따라서 「인공지 +능(AI) 보안 안내서」에서는 이를 명확히 하고자 요구사항 별로 수행주체를 표기하였다. +- “이용자”는 AI 서비스 또는 AI 부수 서비스를 타인에게 제공하지 않고 AI 서비스 또는 AI 부수 +서비스를 이용하는 사람을 말한다. 이러한 “이용자” 개념에는 업으로서 AI 시스템 또는 AI 서비 +스를 이용하는 사람(이하 “AI 비즈니스 이용자”라고 함)이 포함될 수도 있으나, 본 「AI 이용자를 +위한 보안 수칙」의 적용 대상은 AI 서비스를 이용하는 일반 국민을 대상으로 작성하였다. +부록 그림 2 AI 서비스 관련 사업 활동의 주체 + + +![이미지 200-0](images/p0200_img0.png) + + +![이미지 200-1](images/p0200_img1.png) + + +![이미지 200-2](images/p0200_img2.png) + + +![이미지 200-3](images/p0200_img3.png) + + +![이미지 200-4](images/p0200_img4.png) + + +![이미지 200-5](images/p0200_img5.png) + + +--- + +부록 +보안 측면에서 중요한 “파기” 단계를 추가하여 AI 서비스의 생명주기 차별화 +●「AI 신뢰 안내서」가 인공지능 생명주기의 각 단계별로 인공지능의 신뢰성을 확보하기 위한 주요 +요구사항을 5단계로 구분한 반면, 「인공지능(AI) 보안 안내서」는 보안 측면에서 중요한 “파기” 단 +계를 추가하여 총 6단계로 구분하였으며, 생명주기 단계별 세부 내용도 차별화하였다. +부록 그림 3 인공지능 서비스의 생명주기 +AI 신뢰 안내서 생명주기 +AI 보안 안내서 생명주기 + +## 1. 계획 및 설계 + + +## 1. 계획 및 설계 + + +## 2. 데이터 수집 및 준비 + + +## 2. 데이터 수집 및 처리 + + +## 3. 모델 개발(학습/모델링/검증) + + +## 3. 인공지능 모델개발 + + +## 4. 모델 배포 + + +## 4. 시스템 구현 + + +## 5. 모니터링 및 유지보수 + + +## 5. 운영 및 모니터링 + + +## 6. 파기 + +- 「인공지능(AI) 보안 안내서」에서 정의한 각 단계별 목표와 주요 활동은 다음과 같다. +부록 표 2 인공지능 생명주기별 주요활동(인공지능(AI) 보안 안내서) +생명주기 +목표 +주요 활동 + +## 1. 계획 및 설계 + +AI 시스템이 해결할 목표 및 +성공 지표를 정의 +∙AI가 해결할 수 있는 비즈니스 및 기술적 목표를 정의 +∙AI 시스템 관리 감독 조직 및 방안 마련 +∙AI시스템 위험요소 분석 및 대응 방안 마련 + +## 2. 데이터 수집 + +및 준비 +AI 모델을 학습하고 개발하는 데 +사용할 데이터를 수집하고, 사전 +처리 및 모델 개발에 적합한 +형식으로 변환 +∙데이터 소스(구조화된 데이터 및 구조화되지 않은 데이터, 센 +서 데이터, 과거 데이터 세트 등)를 정의함 +∙데이터 사용과 관련된 보안 정책 및 법적 제약을 고려함 +∙누락된 데이터를 처리하고 중복을 제거하고 데이터 일관성 보장 +∙데이터 세트를 학습, 검증 및 테스트 세트로 분할함 + +## 3. 모델 개발 + +AI 모델을 구축하고, 학습하여 +성능 평가를 통해 필요한 지표를 +충족 +∙적절한 기술(예: 머신 러닝, 딥 러닝, 자연어 처리), 알고리즘 +(예: 의사 결정 트리, 신경망, SVM 등)과 모델 아키텍처 선택 +∙준비된 데이터를 사용하여 모델 학습, 하이퍼파라미터 조정 +∙모델을 검증 또는 보이지 않는 테스트 데이터 세트에서 테스 +트하여 정확도와 견고성을 확인함 + +## 4. 모델 배포 + +학습된 AI 모델을 실제 +애플리케이션에서 예측할 수 +있는 프로덕션 환경에 통합 +∙클라우드 서비스, 에지 장치 또는 내부 서버 내에서 모델을 +패키징하여 배포 +∙모델이 실시간 또는 일괄 모드에서 다른 시스템이나 서비스와 +상호 작용할 수 있는지 확인 + +## 5. 모니터링 및 + +유지보수 +배포된 모델의 성능을 +지속적으로 모니터링하고 시간이 +지남에 따라 유지 관리 +∙시간 경과에 따른 모델 성능 추적 +∙배포 후에 나타나는 보안취약성을 감지하고 완화함 +∙모델 및 기반 인프라에 대한 업데이트 및 패치를 구현 + +## 6. 파기 + +더 이상 유용하지 않거나 +교체해야 할 때 AI 모델을 +안전하게 폐기 +∙모델을 폐기하기 전에 중요한 데이터와 로그를 백업 +∙잔여 데이터나 지적 재산이 유출되지 않도록 함 +∙폐기 사유와 향후 모델을 위해 얻은 교훈을 문서화 + + +![이미지 201-0](images/p0201_img0.png) + + +![이미지 201-1](images/p0201_img1.png) + + +![이미지 201-2](images/p0201_img2.png) + + +![이미지 201-3](images/p0201_img3.png) + + +![이미지 201-4](images/p0201_img4.png) + + +--- + +사이버 보안 위협으로부터 AI 서비스를 보호하는 것에 초점을 맞춤 +●「AI 신뢰 안내서」는 인공지능 신뢰성에 필요한 요건을 정의하고자 「인공지능 윤리기준」의 10대 +핵심요건을 준용하여 기술적 관점에서 필요한 요구사항과 검증항목으로 ①다양성 존중, ②책임성, ③ +안전성, ④투명성을 도출하였다. 그리고 최종적으로 검증 가능한 15개의 요구사항과 이에 매칭되는 +69개의 정성・정량적 검증항목이 도출되었다. +부록 표 3 인공지능 생명주기별 요구사항 및 검증항목 수(AI 신뢰 안내서) +생명주기 +요구사항 +검증항목 + +## 1. 계획 및 설계 + +4개 +21개 + +## 2. 데이터 수집 및 처리 + +3개 +18개 + +## 3. 인공지능 모델개발 + +4개 +12개 + +## 4. 시스템 구현 + +3개 +14개 + +## 5. 운영 및 모니터링 + +1개 +4개 +15개 +69개 +●반면에 「인공지능(AI) 보안 안내서」는 「인공지능 윤리기준」의 10대 핵심요건에서 편향성, 프라이버 +시 등 윤리적 요소를 모두 배제하고 “안전성”만을 고려하였다. 특히, 안전성 중에서도 정보보안(기밀 +성・무결성・가용성)의 관점에서 사이버 보안 위협으로부터 AI 서비스를 보호하는 것에 초점을 맞추 +었다. 그리고 최종적으로 검증 가능한 14개의 요구사항과 이에 매칭되는 57개의 정성・정량적 검증 +항목을 도출하였다. +부록 표 4 인공지능 생명주기별 요구사항 및 검증항목 수(인공지능(AI) 보안 안내서) +생명주기 +요구사항 +검증항목 + +## 1. 계획 및 설계 + +2개 +6개 + +## 2. 데이터 수집 및 준비 + +3개 +9개 + +## 3. 모델 개발(학습/모델링/검증) + +4개 +22개 + +## 4. 모델 배포 + +2개 +9개 + +## 5. 모니터링 및 유지보수 + +2개 +8개 + +## 6. 파기 + +1개 +3개 +14개 +57개 +※ 금융보안원에서 발간한 금융분야 AI 보안 가이드라인에서는 데이터 수집 단계(1개 항목), 데이터 전처리(3개 항목), 설 +계・학습(4개 항목), 검증・테스트(6개 항목) 등 총 14개 검증항목 제시 + + +![이미지 202-0](images/p0202_img0.png) + + +![이미지 202-1](images/p0202_img1.png) + + +![이미지 202-2](images/p0202_img2.png) + + +![이미지 202-3](images/p0202_img3.png) + + +![이미지 202-4](images/p0202_img4.png) + + +--- + +부록 +예측형 AI(Pred AI)와 생성형 AI(Gen AI)에 맞게 구별하여 검증항목 제시 +●「인공지능(AI) 보안 안내서」는 요구사항별 검증항목에서 예측형 AI(이하, Pred AI)와 생성형 +AI(Gen AI)를 구별하여 제시하였다. 예측형 AI(Pred AI)와 생성형 AI(이하, Gen AI)는 두 기술의 +목적, 작동 방식, 위험 요소가 서로 다를 수 있으므로, 각 기술의 특성과 관련된 위협을 명확히 이해 +하고 이에 적합한 보안 대책을 수립하는 것이 중요하다. 따라서 본 「인공지능(AI) 보안 안내서」에서 +는 이를 구별하여 AI 개발자와 AI 서비스 제공자 대상 보안요구사항과 검증항목을 제시하였다. +- Pred AI는 과거 및 현재 데이터를 사용하여 패턴을 식별하고 해당 정보를 기반으로 추론한다. +이는 주로 통계 알고리즘과 ML(기계학습)에 사용한다. 반면에 Gen AI는 한 단계 더 나아가 딥 +러닝을 사용하여 학습된 데이터를 기반으로 새로운 콘텐츠를 생성한다. +- 이러한 기술적 특성으로 인해 데이터 관련 문제라 하더라도 위험 요소가 서로 다를 수 있다. 예 +를 들어 Pred AI는 정확한 예측을 지원할 수 있도록 고품질 데이터와 라벨링이 필요할 것이고, +Gen AI는 모델의 학습 기반이 된 데이터를 제공하는 오픈소스 모델을 안전하게 사용하는 것에 +초점을 맞추는 것이 중요하므로 이에 맞는 보안 검증항목이 필요하다. +- 따라서 개발자나 서비스 제공자 등은 발생한 위험이 어떠한 AI 유형과 관련이 있는지 사전에 파 +악하는 것이 매우 중요하고, 이를 반영한 검증항목이 필요할 것으로 예측된다. 이에 본 「인공지 +능(AI) 보안 안내서」에서는 요구사항 및 검증항목 별로 이를 구분하여 제시하였다. 예측형 AI와 +생성형 AI에 따라 구별하여 점검하면, 각 기술에 필요한 보안 조치를 적절하게 파악하고 자원을 +효율적으로 분배할 수 있어, 과도하거나 불필요한 보안 비용을 줄일 수 있을 것으로 기대된다. +요구사항의 공통점과 차이점 분석(요약비교) +●「AI 신뢰 안내서」와 「인공지능(AI) 보안 안내서」 모두 요구사항 도출에 있어서 “안전성”을 고려하기 때 +문에 해당 부분에 한해서 일부 중복이 있을 수 있으나, 「인공지능(AI) 보안 안내서」에서는 보안을 중심 +으로 보다 더 구체적으로 요구사항을 정의하고, 각 요구사항별 하위 검증항목에서도 차별화하였다. +부록 표 5 안전성 관련 요구사항 정의 +AI 신뢰 안내서 +다양성 +존중 +책임성 +안전성 +투명성 +AI 보안 안내서 + +## 02. 인공지능 거버넌스 체계 구성 + +○ +○ +○ +○ +1.1 AI 보안 거버넌스 체계 구축 + +## 05. 데이터 강건성 확보를 위한 이상 + +데이터 점검 +○ + +### 2.3 데이터 공격에 대한 방어 + + +## 07. 오픈소스 라이브러리의 보안성 및 + +호환성 확보 +○ +○ + +### 3.3 오픈소스 라이브러리 보안 + + +## 09. 인공지능 모델 공격에 대한 방어 대책 + +수립 +○ + +### 3.2 모델 공격에 대한 방어 + + +![이미지 203-0](images/p0203_img0.png) + + +![이미지 203-1](images/p0203_img1.png) + + +![이미지 203-2](images/p0203_img2.png) + + +![이미지 203-3](images/p0203_img3.png) + + +![이미지 203-4](images/p0203_img4.png) + + +--- + +부록 표 6 요구사항별 검증항목 분석 +AI 신뢰 안내서 +차별점 + +## 02. 인공지능 거버넌스 체계 구성 + +1.1 AI 보안 거버넌스 체계 구축 +∙실제 조직 내 정책 및 인력은 +다르게 구성됨 +※ 정책, 조직, 인력 등 거버넌스 관련 일반적인 공통사항에 해당 + +## 05. 데이터 강건성 확보를 위한 이상 + +(Abnormal) 데이터 점검 + +### 2.3 데이터 공격에 대한 방어 + +∙각 공격 유형을 세분화해 방어 +대책 제시 +∙데이터 중독, 회피 등 방어 대책 +∙데이터 중독 방어 대책 +∙데이터 회피 방어 대책 +∙데이터 유출・변조 방어 대책 + +## 07. 오픈소스 라이브러리의 보안성 및 호 + +환성 확보 + +### 3.3 오픈소스 라이브러리 보안 + +∙오픈소스 라이브러리 관련 검토 +사항을 보안관점에서 세분화해 +확인 사항 제시 +∙오픈소스 라이브러리의 안정성 확인, 위 +험요소 관리, 라이선스 준수 사항, 호환성 +및 보안취약점 확인(포괄적 접근) +∙오픈소스 라이브러리의 업데이트 및 취약 +점 관리 +∙오픈소스 라이브러리의 소스코드 직접 검 +토 및 사용에 대한 보안 문제 검토 +∙오픈소스 라이브러리의 실행 시 격리된 +환경 이용 + +## 09. 인공지능 모델 공격에 대한 방어 대책 + +수립 + +### 3.2 모델 공격에 대한 방어 + +∙모델 공격에 대한 유형을 보 +안 관점에서 세분화 하여 확 +인사항 제시 +∙모델 추출 공격 및 모델 회피 공격에 대 +한 방어 +∙데이터 및 기능 도용에 대한 대책 +∙모델 추출 공격에 대한 대책 +∙모델 회피 공격에 대한 대책 +∙모델 포이즈닝에 대한 대책 +∙적대적 예제 공격에 대한 대책 +∙모델 탈취 및 리버스 엔지니어링에 대한 +대책 +∙반복적인 질의에 대한 방어 대책 +∙기계 학습을 활용한 모델 공격에 대한 대책 + + +![이미지 204-0](images/p0204_img0.png) + + +![이미지 204-1](images/p0204_img1.png) + + +![이미지 204-2](images/p0204_img2.png) + + +![이미지 204-3](images/p0204_img3.png) + + +--- + +부록 +인공지능(AI) 보안 안내서 보안 요구사항 및 검증항목과 정보보안 원칙 간 비교 +본 안내서의 모든 보안 요구사항은 기밀성・무결성・가용성 및 책임추적성과 매핑이 가능하도록 구 +성하였다. 아울러 보안 관점에서 개발자의 이해를 돕기 위해 관련 사례 및 예시를 충분히 제시하 +고자 하였다. +부록 그림 4 개발자 대상 보안 요구사항과 정보보안 원칙의 매핑 +생명주기 +검증항목 +보안 원칙 + +## 1. 기획 및 설계 + +1-1 +AI 보안(Security) 거버넌스 체계 구축 + +1-2 +AI 모델 개발에 대한 위험관리 + + +## 2. 데이터 수집 및 준비 + +2-1 +데이터 수집 및 전처리 + +2-2 +데이터 무결성 점검 +2-3 +데이터 공격에 대한 방어 + +## 3. 모델 개발 + +(학습/모델링/검증) +3-1 +학습/검증 환경에 대한 보안 +3-2 +모델 공격에 대한 방어 +3-3 +오픈 소스 라이브러리 보안 +3-4 +LLM 보안 + +## 4. 모델 배포 + +4-1 +모델파일 및 배포 환경 보호 + +4-2 +API 및 인터페이스 보안 + +## 5. 모니터링 및 유지보수 + +5-1 +실시간 모니터링 +5-2 +보안 패치 및 업데이트 관리 + +## 6. 파기 + +6-1 +파기 시 보안 +●서비스 제공자를 위한 「인공지능(AI) 보안 안내서」는 AI 서비스 제공 Life Cycle - ①서비스 계획 +및 설계(Service Planning and Design), ②서비스 개발 및 구축(Service Development and +Deployment), ③서비스 제공 및 운영(Service Delivery and Operation), ④서비스 유지보수 및 지원 +(Service Maintenance and Support), ⑤피드백 및 서비스 개선(Feedback and Imprrovement) +– 각각에서 보안점검 사항을 도출하였다. +- 도출된 점검사항은 개발자의 경우와 마찬가지로 기밀성, 무결성, 가용성 및 책임추적성과 매핑이 +가능하다. + + +![이미지 205-0](images/p0205_img0.png) + + +![이미지 205-1](images/p0205_img1.png) + + +![이미지 205-2](images/p0205_img2.png) + + +![이미지 205-3](images/p0205_img3.png) + + +![이미지 205-4](images/p0205_img4.png) + + +![이미지 205-5](images/p0205_img5.png) + + +![이미지 205-6](images/p0205_img6.png) + + +![이미지 205-7](images/p0205_img7.png) + + +![이미지 205-8](images/p0205_img8.png) + + +![이미지 205-9](images/p0205_img9.png) + + +--- + +부록 표 7 서비스 제공자를 위한 보안 요구사항 및 검증항목 수(인공지능(AI) 보안 안내서) +서비스 제공 Life Cycle +요구사항 +검증항목 + +## 1. 서비스 계획 및 설계 + +3개 +9개 + +## 2. 서비스 개발 및 구축 + +4개 +15개 + +## 3. 서비스 제공 및 운영 + +2개 +7개 + +## 4. 서비스 유지보수 및 지원 + +2개 +9개 + +## 5. 피드백 및 서비스 개선 + +1개 +4개 +합계 +12개 +44개 +부록 그림 5 서비스제공자 대상 보안 요구사항과 정보보안 원칙의 매핑 +생명주기 +검증항목 +보안 원칙 + +## 1. 서비스 설계 및 계획 + +1-1 +AI 보안(Security) 거버넌스 체계 구축 +1-2 +AI 서비스에 대한 위험관리 +1-3 +서비스 수준 계약(SLA) 관리 + +## 2. 서비스 개발 및 구축 + +2-1 +코드 및 알고리즘 보안 +2-2 +모델 환경의 보안 + +2-3 +데이터 보안 +2-4 +API 및 인터페이스 보안 + +## 3. 서비스 제공 및 운영 + +3-1 +로그 및 운영 데이터 +3-2 +파기 + +## 4. 서비스 유지보수 및 지원 + +4-1 +모니터링, 업데이트 및 배치 +4-2 +성능 및 장애관리 + +## 5. 피드백 및 서비스개선 + +5-1 +사용자 피드백 관리 + + +![이미지 206-0](images/p0206_img0.png) + + +![이미지 206-1](images/p0206_img1.png) + + +![이미지 206-2](images/p0206_img2.png) + + +![이미지 206-3](images/p0206_img3.png) + + +![이미지 206-4](images/p0206_img4.png) + + +![이미지 206-5](images/p0206_img5.png) + + +![이미지 206-6](images/p0206_img6.png) + + +![이미지 206-7](images/p0206_img7.png) + + +--- + +부록 +이용자 대상 AI 안내서 비교 +각 부처에서 발표한 AI 관련 안내서・가이드는 주로 AI 서비스 개발자가 적용대상이고, 챗GPT 등 특 +정 서비스 이용자에 대해 윤리 또는 신뢰에 근거한 행동 수칙을 담고 있다. 이는 AI 이용자 대상 가이드 +를 발표한 캐나다, 일본 등 해외의 경우에도 크게 다르지 않아 보인다. +●이에 반해, 이용자 대상 「인공지능(AI) 보안 안내서」는 일반적인 원칙 선언에 그치지 않고 AI 서비 +스 접속・이용 단계에서 보안 강화를 위해 이용자가 지켜야 할 구체적인 행동 지침을 제공하는 것에 +초점을 맞추어 차별화하였다. +부록 표 8 이용자 대상 인공지능(AI) 보안 안내서 비교 +구 분 +이용자 대상 가이드 유무 +내용 +없음 +가이드 제시 +일반 원칙 +구체적인 +행동수칙 제시 +인공지능(AI) 보안 안내서(본 안내서) +○ +○ +○ +신뢰할 수 있는 인공지능 개발 안내서 +(과기정통부/TTA, ‘24.4) +○ +챗GPT 등 생성형 AI 활용 보안 가이드라인 +(국가정보원/국가보안기술연구소, ‘23.6) +○ +(챗GPT 중심) +○ +(챗GPT 중심) +안전한 AI 시스템 개발을 위한 가이드라인 +(국가정보원, ‘23.11) +○ +금융분야 인공지능 가이드라인 +(금융위, ‘21.7) +○ +금융분야 AI 보안 가이드라인 +(금융보안원, ‘23.4) +○ + + +![이미지 207-0](images/p0207_img0.png) + + +![이미지 207-1](images/p0207_img1.png) + + +![이미지 207-2](images/p0207_img2.png) + + +![이미지 207-3](images/p0207_img3.png) + + +![이미지 207-4](images/p0207_img4.png) + + +![이미지 207-5](images/p0207_img5.png) + + +--- + +TTA 신뢰할 수 있는 인공지능 개발 안내서와 요구사항별 상세비교 +●TTA 신뢰할 수 있는 인공지능 개발 안내서와 요구사항별 상세 비교를 하면, 유사항목은 6개이고, 본 +<인공지능(AI) 보안 안내서>에서 보안 관점에서 확대된 항목은 20개, 신규로 추가된 항목은 31개로 나 +타나 검증항목 내용상 차이가 있음 +< AI 신뢰 안내서 > +* 15개 요구사항 69개 검증항목 +< 인공지능(AI) 보안 안내서 > +* 14개 요구사항 57개 검증항목 +(유사 6개/ 확대 20개 / 신규 31개) +요구사항 및 체크리스트 +요구사항 및 체크리스트 +인공지능 시스템의 위험 관리 계획 및 수행 +4개→3개 +1.2 +AI 모델개발에 대한 위험관리 계획의 수립 +유사 +01-1 +인공지능 시스템 생명주기에 걸쳐 나타날 수 있는 위험 +요소를 분석하였는가? + +#### 1.2.1 + +AI 모델개발 생명주기에 걸쳐 나타날 수 있는 위 +험요소를 분석・도출하고 있는가? +유사 +01-1a +인공지능 시스템의 위험 요소를 도출하고 이의 파급효 +과를 파악하였는가? + +#### 1.2.2 AI 시스템에 대한 위협 모델링 및 위험 평가를 수 + +행하고 있는가? +유사 +01-1b +인공지능 기술 적용을 어렵게 만드는 위험 요소가 있는 +지 확인하였는가? + +#### 1.2.3 AI 시스템에 대한 위험요소를 제거・완화하기 위 + +한 방안을 마련하고 있는가? +유사 +01-2 +위험요소를 제거 및 방지하거나 영향을 완화하기 위한 +방안을 마련하였는가? +01-2a 위험 요소별 완화 또는 제거 방안을 마련하였는가? +01-2b 위험 요소의 파급효과가 감소하였는지 확인하였는가? +인공지능 거버넌스 체계 구성 +5개→3개 +1.1 +AI 보안(Security) 거버넌스 체계 구축 +유사 +02-1 +인공지능 거버넌스에 대한 지침 및 규정을 수립하였는 +가? + +#### 1.1.1 + +AI 보안(Security) 거버넌스를 위한 조직이 구 +성되어 있는가? +유사 +2-1a +내부적으로 준수해야 할 인공지능 거버넌스에 대한 지 +침 및 규정을 마련하였는가? + +#### 1.1.2 + +AI 보안(Security) 거버넌스를 위한 정책, 절차, +프로세스가 구현되어 있는가? +유사 +2-2 +인공지능 거버넌스를 위한 조직을 구성하고 인력 구성 +에 대해 검토하였는가? + +#### 1.1.3 + +AI 보안(Security) 거버넌스를 위한 전문인력 +을 갖추고 있는가? +유사 +2-2a +인공지능 거버넌스를 위한 조직을 구성하였는가? +※ 보안을 위한 별도의 거버넌스 필요성 존재 +2-2b +인공지능 거버넌스를 위한 조직은 전문성을 갖춘 인력 +으로 구성하였는가? +2-3 +인공지능 거버넌스 체계가 올바로 이행되고 있는지 감 +독하고 있는가? +2-3a +인공지능 거버넌스에 대한 내부 지침 및 규정 준수 여부 +를 감독하고 있는가? +2-4 +인공지능 거버넌스 조직이 신규 및 기존 시스템의 차이 +점을 분석하였는가? +2-4a +기존 동일 목적의 시스템과 비교하여, 신규 시스템이 개 +선할 수 있는 사항을 분석하였는가? +인공지능 시스템의 신뢰성 테스트 계획 수립 +03-1 +인공지능 시스템의 특성을 고려한 테스트 환경을 설계 +하였는가? +03-1a 테스트 환경 결정 시 인공지능 시스템의 운영환경을 고 +려하였는가? +03-1b 가상테스트 환경이 필요한 인공지능 시스템의 경우, 시 +뮬레이터를 확보하였는가? +03-2 +인공지능 시스템의 테스트 설계에 필요한 협의 체계를 +구성하였는가? +03-2a 인공지능 시스템의 기대 출력을 결정하기 위한 협의 체 +계를 구성하였는가? +03-2b 설명가능성 및 해석가능성 확인을 위한 사용자 평가단 +을 구성하였는가? + + +![이미지 208-0](images/p0208_img0.png) + + +![이미지 208-1](images/p0208_img1.png) + + +![이미지 208-2](images/p0208_img2.png) + + +![이미지 208-3](images/p0208_img3.png) + + +![이미지 208-4](images/p0208_img4.png) + + +--- + +부록 +인공지능 시스템의 추적가능성 및 변경이력 확보 +04-1 +인공지능 시스템의 의사결정에 대한 추적 방안을 수립 +하였는가? +04-1a 인공지능 시스템의 의사결정에 대한 기여도 추적 방안 +은 확보하였는가? +04-1b 인공지능 시스템의 의사결정 추적을 위한 로그 수집 기 +능을 구현하였는가? +04-1c 지속적인 사용자 경험 모니터링을 위해 사용자 로그를 +수집 및 관리하고 있는가? +04-2 +학습 데이터의 변경 이력을 확보하고, 데이터 변경이 미 +치는 영향을 관리하였는가? +04-2a 데이터 흐름 및 계보를 추적하기 위한 조치를 마련하였 +는가? +04-2b 데이터 소스 변경에 대한 모니터링 방안을 확보하였는가? +04-2c 데이터 변경 시, 버전 관리를 수행하였는가? +04-2d 데이터 변경 시, 이해관계자를 위한 정보를 제공하는가? +04-2e 신규 데이터 확보 시, 인공지능 모델의 성능평가를 재수 +행하였는가? +데이터 활용을 위한 상세 정보 제공 +05-1 +데이터의 명확한 이해와 활용을 지원하는 상세한 정보 +를 제공하는가? +05-1a 정제 전과 후의 데이터 특성을 설명하였는가? +05-1b 학습 데이터의 메타데이터를 구분하고 각 명세자료를 +확보하였는가? +05-1c 보호변수의 선점 이유 및 반영 여부를 설명하였는가? +05-1d 라벨링 작업자를 위한 교육을 시행하고 작업 가이드 문 +서를 마련하였는가? +05-2 +데이터의 출처는 기록 및 관리되고 있는가? +05-2a 신뢰할 수 있는 출처로부터 제공되는 데이터셋을 사용 +하였는가? +05-2b 오픈소스 데이터셋을 활용하는 경우, 출처를 명시하였 +는가? +데이터 견고성 확보를 위한 이상 데이터 점검 +06-1 +이상 데이터의 식별 및 정상 여부를 점검하였는가? +06-1a 전체 학습용 데이터 분포를 시각화하여 발생 가능한 오 +류들을 확인하였는가? +06-1b 학습 데이터 이상값 식별 기법을 적용하였는가? +06-2 +데이터 공격에 대한 방어 수단을 강구하였는가? +1개→9개 +2.1 +데이터 수집 및 전처리 +확대 +06-2a 데이터 최적화를 통한 방어 대책을 마련하였는가? + +#### 2.1.1 + +데이터 수집 시 사용되는 네트워크 프로토콜이 충 +분한 보안 기능을 제공하고 있는가? +신규 + +#### 2.1.2 수집된 데이터의 보관 및 삭제 절차가 명확하게 + +정의되어 있는가? +신규 + +#### 2.1.3 전처리 과정에서 중요 데이터를 보호하기 위해 암 + +호화 기술을 사용하고 있는가? +신규 +2.2 +데이터 무결성 검증 +확대 + +#### 2.2.1 데이터 저장 및 전송 시 데이터 무결성을 검증하 + +고 있는가? +신규 + +#### 2.2.2 데이터 처리 과정에서 데이터 무결성을 검증하고 + +있는가? +신규 + +#### 2.2.3 데이터에 접근할 수 있는 권한을 제한하고 있는가? 확대 + +2.3 +데이터 공격에 대한 방어 +확대 + +#### 2.3.1 데이터 중독(poisoning) 공격에 대한 방어 대 + +책을 마련하고 있는가? +확대 + +#### 2.3.2 데이터 회피(evasion) 공격에 대한 방어 대책을 + +마련하고 있는가? +확대 + +#### 2.3.3 데이터 유출・변조 공격을 방지하기 위한 방안을 + +마련하고 있는가? +신규 + + +![이미지 209-0](images/p0209_img0.png) + + +![이미지 209-1](images/p0209_img1.png) + + +![이미지 209-2](images/p0209_img2.png) + + +![이미지 209-3](images/p0209_img3.png) + + +--- + +수집 및 가공된 학습 데이터의 편향 제거 +07-1 +데이터 수집 시, 인적・물리적 요인으로 인한 편향 완화 +방안을 마련하였는가? +07-1a 인적 편향을 제거하기 위한 절차적, 기술적 수단을 적용 +하였는가? +07-1b 데이터의 다양성 확보를 위해 여러 수집 장치를 활용하 +였는가? +07-2 +학습에 사용되는 특성을 분석하고 선정 기준을 마련하 +였는가? +07-2a 보호변수 선정 시 충분한 분석을 수행하였는가? +07-2b 편향을 발생시킬 수 있는 특성의 영향력을 완화하였는 +가? +07-2c 데이터 전처리 시 특성이 과도하게 제거되었는지 검토 +하였는가? +07-3 +데이터 라벨링 시, 발생 가능한 편향을 확인하고 방지하 +였는가? +07-3a 데이터 라벨링 기준을 명확히 수립하고 작업작에게 제 +공하였는가? +07-3b 다양한 데이터 라벨링 작업자를 섭외하기 위해 노력하 +였는가? +07-4 +데이터의 편향 방지를 위한 샘플링을 수행하였는가? +07-4a 편향 방지를 위한 샘플링 기법을 적용하였는가? +오픈소스 라이브러리의 보안성 및 호환성 검증 +08-1 +오픈소스 라이브러리의 안정성을 확인하였는가? +08-1a 활성화된 오픈소스 라이브러리를 사용하였는가? +08-2 +오픈소스 라이브러리의 위험 요소는 관리되고 있는가? +08-2a 사용 중인 오픈소스 라이브러리의 라이선스 준수사항 +을 이행하였는가? +08-2b 사용 중인 오픈소스 라이브러리의 호환성 및 보안취약 +점을 확인하였는가? +1개→3개 +3.3 +오픈소스 라이브러리 보안 +확대 + +#### 3.3.1 오픈소스 라이브러리의 업데이트 및 취약점을 관 + +리하고 있는가? +확대 + +#### 3.3.2 오픈소스 라이브러리의 소스 코드를 직접 검토하 + +거나 사용에 대한 보안 문제를 검증하고 있는가? 확대 + +#### 3.3.3 + +오픈소스 라이브러리를 실행할 때 잠재적인 보안 +위험을 제거하기 위해 격리된 환경을 이용하고 있 +는가? +확대 +인공지능 모델의 편향 제거 +09-1 +모델 편향을 제거하는 기법을 적용하였는가? +09-1a 개발하려는 모델에 맞게 편향 제거 기법을 선택하였는가? +09-1b 편향성 평가 및 모니터링을 위한 정량적 지표를 선정하 +고 관리하는가? + + +![이미지 210-0](images/p0210_img0.png) + + +![이미지 210-1](images/p0210_img1.png) + + +![이미지 210-2](images/p0210_img2.png) + + +![이미지 210-3](images/p0210_img3.png) + + +--- + +부록 +10 +인공지능 모델 공격에 대한 방어 대책 수립 +2개→8개 +3.2 +모델 공격에 대한 방어 +확대 +10-1 +모델 공격이 가능한 상황을 파악하였는가? + +#### 3.2.1 + +AI 모델이 적대적 의도를 가진 사용자에 의해 데 +이터 및 기능을 도용당하거나 다른 공격에 악용되 +지 않도록 대책을 수립하고 있는가? +확대 +10-1a +데이터 유형별 공격 가능한 적대적 사례를 확인하였는가? + +#### 3.2.2 모델 추출 공격에 대한 방어 방안을 수립하고 있 + +는가? +확대 +10-2 +모델 공격에 대한 방어 수단을 강구하였는가? + +#### 3.2.3 모델 회피 공격에 대한 방어 방안을 수립하고 있 + +는가? +확대 +10-2b 모델 최적화를 통한 방어 대책을 마련하였는가? + +#### 3.2.4 모델 포이즈닝에 대한 방어 방안을 수립하고 있는가? 확대 + + +#### 3.2.5 적대적 예제 공격에 대한 방어 방안을 수립하고 + +있는가? +확대 + +#### 3.2.6 모델 탈취 및 리버스 엔지니어링에 대한 방어 방 + +안을 수립하고 있는가? +신규 + +#### 3.2.7 반복적인 질의에 대한 방어 방안을 수립하고 있는 + +가? +신규 + +#### 3.2.8 기계 학습을 활용한 모델 공격에 대해 능동적으로 + +방어하고 있는가? +신규 +11 +인공지능 모델 명세 및 추론 결과에 대한 설명 제공 +11-1 +인공지능 모델의 명세를 투명하게 제공하는가? +11-1a +사용자 개발 과정과 모델 작동 방식에 대한 세부 정보가 +설명된 문서를 작성하였는가? +11-2 +사용자가 모델 추론 결과의 도출 과정을 수용할 수 있도 +록 근거를 제공하는가? +11-2a +인공지능 모델에 적합한 XAI 기술을 적용하였는가? +11-2b +XAI 기술 적용이 불가능한 경우, 기술 외 대안을 마련하 +였는가? +11-3 +모델 추론 결과에 대한 사용자의 판단을 도울 수 있는 설 +명을 제공하는가? +11-3a +모델 추론 결과에 대한 설명이 필요한지 검토하였는가? +11-3b +사용자에게 인공지능 모델 추론 결과에 대한 설명을 제 +공하였는가? +3.1 +학습/검증 환경에 대한 보안 +신규 + +#### 3.1.1 + +모델 학습을 진행하는 환경이 안전하게 보안조치 +되어 있는가? +신규 + +#### 3.1.2 학습 또는 검증 단계에서 악의적인 사용자가 허위 + +데이터를 삽입할 가능성을 차단하고 있는가? +신규 + +#### 3.1.3 연합 학습(Federated Learning)에 참여하는 + +장치 중 악의적인 장치가 있는지 검증하고 있는가? 신규 +3.4 +LLM 보안 +신규 + +#### 3.4.1 LLM 애플리케이션 공격에 대한 예방책을 마련 + +하고 있는가? +신규 + +#### 3.4.2 LLM의 Model Denial of Service 공격에 대 + +한 방어 방안을 수립하고 있는가? +신규 + +#### 3.4.3 LLM의 API 보안을 위한 방안을 수립하고 있는가? 신규 + + +#### 3.4.4 LLM의 인터페이스 공격에 대한 예방책을 마련 + +하고 있는가? +신규 + +#### 3.4.5 + +개발 환경에서 LLM을 사용할 때 잠재적인 취약 +성의 통합을 방지하기 위한 안전한 코딩 관행과 +지침을 수립하고 있는가? +신규 + +#### 3.4.6 LLM 출력결과를 정기적으로 모니터링하고 검 + +토하고 있는가? +신규 + +#### 3.4.7 LLM의 Prompt Injection 공격에 대한 방어 + +방안을 수립하고 있는가? +신규 + + +![이미지 211-0](images/p0211_img0.png) + + +![이미지 211-1](images/p0211_img1.png) + + +![이미지 211-2](images/p0211_img2.png) + + +![이미지 211-3](images/p0211_img3.png) + + +--- + + +#### 3.4.8 LLM의 벡터 및 임베딩 취약점에 대한 방어 방안 + +을 수립하고 있는가? +신규 +12 +인공지능 시스템 구현 시 발생 가능한 편향 제거 +12-1 +소스 코드 및 사용자 인터페이스로 인한 편향을 제거하 +기 위해 노력하였는가? +12-1a +데이터 접근 방식 구현과정 등 소스 코드에서의 편향 발 +생 가능성을 확인하였는가? +12-1b +사용자 인터페이스 및 상호작용 방식으로 인한 편향을 +확인하였는가? +13 +인공지능 시스템의 안전모드 구현 및 문제발생 알림 절 +차 수립 +13-1 +공격, 성능 저하 및 사회적 이슈 등의 문제 발생 시 대응 +가능한 안전 모드를 적용하는가? +13-1a +문제 상황에 대한 예외 처리 정책이 마련되어 있는가? +13-1b +인공지능 데이터 및 모델 공격에 대해 시스템 측면의 방 +어 대책을 마련하였는가? +(* 06-2 데이터 공격 방어수단, 10 모델 공격 방어 대책 +내용과 유사) +13-1c +인공지능 시스템의 의사결정으로 인한 파급효과가 크고 +불확실성이 높은 경우, 사람의 개입을 고려하였는가? +13-1d +예상되는 사용자 오류에 대한 안내 및 대응을 제공하는 +가? +13-2 +인공지능 시스템에서 문제가 발생할 경우, 시스템은 이 +를 운영자에게 전달하는 기능을 수행하는가? +13-2a 편견, 차별 등 윤리적 문제에 대한 알림 절차를 수립하였 +는가? +13-2b 시스템 성능 저하를 평가하기 위한 지표 및 절차를 설정 +하고 알림 절차를 수립하였는가? +14 +인공지능 시스템의 설명에 대한 사용자의 이해도 제고 +14-1 +인공지능 시스템 사용자의 특성과 제약사항을 분석하 +였는가? +14-1a +사용자 특성에 따른 세부 고려사항을 분석하였는가? +14-2 +사용자 특성에 따른 설명을 제공하는가? +14-2a 사용자 특성에 따른 설명 평가 기준을 수립하였는가? +14-2b 사용자가 이해하기 어려운 전문 용어 사용을 지양하였는가? +14-2c 사용자의 구체적인 행동과 이해를 이끌어낼 수 있도록 +명확한 표현을 사용하였는가? +14-2d 설명이 필요한 위치와 타이밍은 적절한가? +14-2e 사용자 경험을 평가할 수 있는 다양한 사용자 조사 기법 +을 활용하였는가? +4.1 +모델파일 및 배포 환경 보호 +신규 + +#### 4.1.1 + +모델을 배포하기 전에 코드 및 모델을 스캔하고, +자동화된 취약점 분석을 하고 있는가? +신규 + +#### 4.1.2 모델파일을 암호화하여 저장하고 전송 중에도 안 + +전하게 보호하고 있는가? +신규 + +#### 4.1.3 AI 모델이 배포되는 인프라(클라우드, 서버 등) + +환경이 충분한 보안시스템을 갖추고 있는가? +신규 +4.2 +API 및 인터페이스 보안 +신규 + + +![이미지 212-0](images/p0212_img0.png) + + +![이미지 212-1](images/p0212_img1.png) + + +![이미지 212-2](images/p0212_img2.png) + + +![이미지 212-3](images/p0212_img3.png) + + +--- + +부록 + +#### 4.2.1 + +AI 모델이 배포된 후, API를 통해 외부 시스템과 +상호작용하는 경우, 충분한 보안 조치 기능을 갖 +추고 있는가? +신규 + +#### 4.2.2 + +배포된 AI 모델이 실시간으로 데이터를 수신하고 +이를 처리할 때, 중간자 공격(Man-in-the- +Middle Attack)에 대응하고 있는가? +신규 + +#### 4.2.3 + +AI 모델의 API에 대한 접근 권한을 제한하고, 강 +한 인증 메커니즘을 사용해 불법 접근을 방지하고 +있는가? +신규 + +#### 4.2.4 API 사용자는 필요한 권한만 부여받도록 최소 권 + +한 원칙을 적용하고 있는가? +신규 + +#### 4.2.5 AI 시스템에 연결된 모든 장치에 대한 인증 절차를 + +마련하고, 승인된 장치만 연결되도록 하고 있는가? 신규 + +#### 4.2.6 API 호출을 실시간으로 모니터링하여 비정상적인 + +패턴이나 오용 시도를 감지하고 차단하고 있는가? 신규 +15 +서비스 제공 범위 및 상호작용 대상에 대한 설명 제공 +15-1 +인공지능 서비스의 올바른 사용을 유도하기 위한 설명 +을 제공하는가? +15-1a +서비스의 목적과 목표에 대한 설명을 제공하는가? +15-1b +서비스의 한계와 범위에 대한 설명을 제공하는가? +15-2 +사용자가 상호작용하고 있는 대상을 인지할 수 있도록 +설명하는가? +15-2a 사용자와 인공지능이 상호작용하는 서비스 범위를 명 +시하였는가? +15-2b 서비스 내의 최종 의사결정을 수행하는 주체에 대해 사 +용자에게 설명하는가? +5.1 +실시간 모니터링 +신규 + +#### 5.1.1 + +모델의 입력 데이터, 출력 결과 등을 실시간으로 모 +니터링하여 비정상적인 동작을 탐지하고 있는가? 신규 + +#### 5.1.2 모델 응답 시간, 사용 패턴을 추적하고 분석하여 + +보안에 의심스러운 행동을 탐지하고 있는가? +신규 + +#### 5.1.3 AI 모델이 동작하는 서버 및 네트워크의 트래픽을 모 + +니터링하여 비정상적인 요청을 탐지하고 있는가? +신규 + +#### 5.1.4 API 호출, 입력/출력 등 요청로그를 정기적으로 분 + +석하여 보안에 의심스러운 동작을 탐지하고 있는가? 신규 + +#### 5.1.5 + +AI 모델과 배포 환경에 대해 모의 해킹을 수행하 +여 잠재적인 보안 취약점을 탐지하고 수정하고 있 +는가? +신규 +5.2 +보안 패치 및 업데이트 관리 +신규 + +#### 5.2.1 모델에 대한 보안 패치 및 업데이트 관리 프로세 + +스를 구축하고 있는가? +신규 + +#### 5.2.2 모델 배포 후 모델 및 라이브러리의 업데이트가 + +정기적으로 이루어지고 있는가? +신규 + +#### 5.2.3 + +운영 체제, 라이브러리, 프레임워크의 보안 패치 +를 운영 환경에 적용하기 전에 스테이징 환경에서 +패치를 테스트하고 있는가? +신규 +6.1 +파기 시 보안 +신규 + +#### 6.1.1 + +AI 모델이 더 이상 사용되지 않으면, 모델 파일을 완 +전히 삭제하고 복구할 수 없도록 처리하고 있는가? 신규 + +#### 6.1.2 AI 모델에서 사용 중이던 데이터가 시스템을 폐 + +기하거나 교체할 때 안전하게 삭제되고 있는가? 신규 + +#### 6.1.3 + +AI 모델이 더 이상 사용되지 않으면, 해당 모델과 +연결된 API나 인터페이스를 비활성화하여 외부 +접근을 차단하고 있는가? +신규 + + +![이미지 213-0](images/p0213_img0.png) + + +![이미지 213-1](images/p0213_img1.png) + + +![이미지 213-2](images/p0213_img2.png) + + +![이미지 213-3](images/p0213_img3.png) + + +--- + +국내 주요 AI 보안 가이드라인 비교 +최근 몇 년 동안 각 부처는 소관 업무와 관련된 인공지능 정책을 수립하고 있으며, AI 운영의 방향성 +을 보여주는 안내서를 발표하고 있음. +국내 주요 AI 안내서 +구분 +챗GPT 등 생성형 AI 활용 +보안 가이드라인 +(국가정보원, ‘23. 6.) +금융분야 AI 보안 +가이드라인 +(금융보안원, ‘23. 4.) +신뢰할 수 있는 인공지능 +개발 안내서 - 일반분야 +(과기정통부, ’23.7) +인공지능 시대 안전한 +개인정보 활용 정책 방향 +(개인정보위, ’23.8) +배경 +• 챗 GPT 등 생성형 AI를 +안전하게 활용할 수 있도 +록 정부 차원의 보안 대책 +필요 +• 국내・외 금융분야의 AI 기 +반 금융서비스 및 시스템 +에 대한 신뢰성 확보를 위 +한 대책 필요 +• 국내 AI 서비스, 시스템 개 +발 환경 및 실제 실무를 기 +반하는 요구사항 및 검증 +항목 필요 +• 생성형 AI, 자율주행차, 로 +봇 등 데이터 수집・활용에 +서 발생하는 개인정보 침 +해에 대한 정부 차원의 규 +범 필요 +목적 +• 생성형 AI를 활용하는 과 +정에서 업무상 비밀・개인 +정보 유출 등 기술 악용 및 +보안 문제를 사전 예방하 +기 위한 방안 제시 +• 금융산업 AI 학습용 데이 +터 정확성・안정성 확보, +AI 금융 서비스의 투명성・ +공정성 담보 등을 하기 위 +한 방안 제시 +• AI 서비스 개발 시 최소한 +의 신뢰성을 확보하고, 중 +소기업 등의 자율 점검체 +계 구축 등에 기여 +• AI 환경에서의 프라이버시 +침해 위험 최소화하기 위 +한 정책 방향 수립 및 관련 +추진 과제 제시 +주요 +대상 +• 정부, 공공・민간분야 및 일 +반 국민 +• 금융기관, 금융 서비스 개 +발 업체 등 +• AI 서비스 개발 실무자 및 +AI 서비스 관련 기업・기관 +• AI 모델・서비스 개발・제공 +기업, 기관 및 이용자 +목차 +및 +주요 +내용 + +## 1. 개요 + + +## 2. 생성형 인공지능 기술의 + +대표적인 보안 위협 +※ AI 서비스 취약점 공격, +사이버 범죄 악용, 불법 +콘텐츠 생성, 정보 유출 +등 사례 소개 + +## 3. 안전한 생성형 인공지능 + +기술 사용 가이드라인 +※ 기관의 정보보호・정보보 +안 담당자 등을 대상으로 +효율적으로 안전하게 서 +비스를 활용할 수 있는 +방안 제시 +※ (안내사항) 서비스 사용 +주의사항, 서비스와 대화 +시 주의사항, AI 모델 플 +러그인 사용 주의사항, +AI 모델 확장 프로그램 + +## 1. 개요 + +2. AI 서비스 구성 +※ AI 서비스의 전반적인 구 +성, 기능 및 운영 방안 등 +소개 +3. AI 학습 데이터 및 +모델 보안 관리 +※ 다음 4단계의 AI 모델 개 +발 주기에 따른 보안 방 +안 제시 + +## 1. 개요 + + +## 2. 요구사항 및 검증항목 + +※ 다음의 AI 생명주기 별 +안전한 시스템 구축, 서비 +스 활용을 위한 요구사항 +제시 +① 계획 및 설계: ▲위험관 +리 계획 및 수행 ▲거버 +넌스 체계 구성 +▲시스템 신뢰성 테스트 +계획 수립 +②데이터 수집 및 처리: +▲데이터 활용을 위한 상 +세 정보 제공 ▲이상 데 +이터 점검 ▲학습 데이터 +의 편향 제거 +③ 인공지능 모델 개발: +▲모델 편향 제거 ▲모델 +공격에 대한 방어 대책 + +## 1. 추진 배경 + +2. AI 데이터 처리방식 변화 +와 프라이버시 이슈 +3. AI와 개인정보 보호 기본 +원칙 +※ ①헌법상 개인정보자기결 +정권, ②개인정보보호 원 +칙 기반 AI에 대한 기본원 +칙 제시 + +## 4. 인공지능 단계별 데이터 + +처리기준과 보호조치 +※ ①AI 모델・서비스 기획 +②데이터 수집 ③데이터 +학습 ④AI 서비스 각 단 +계별 개인정보 처리, 활 +용, 관리 및 정보보호 등 +을 위한 정책적 필요사항 + + +![이미지 214-0](images/p0214_img0.png) + + +![이미지 214-1](images/p0214_img1.png) + + +![이미지 214-2](images/p0214_img2.png) + + +![이미지 214-3](images/p0214_img3.png) + + +![이미지 214-4](images/p0214_img4.png) + + +--- + +부록 +구분 +챗GPT 등 생성형 AI 활용 +보안 가이드라인 +(국가정보원, ‘23. 6.) +금융분야 AI 보안 +가이드라인 +(금융보안원, ‘23. 4.) +신뢰할 수 있는 인공지능 +개발 안내서 - 일반분야 +(과기정통부, ’23.7) +인공지능 시대 안전한 +개인정보 활용 정책 방향 +(개인정보위, ’23.8) +사용 주의사항, AI 모델 +생성 기반 공격 대처 방 +안 + +## 4. 생성형 인공지능 기반 정 + +보화사업 구축 방안 및 +보안 대책 +※ ①구축 유형별 생성 AI +기술 도입시 고려사항, ② +AI 모델 API 활용 및 민 +간 AI 모델 도입 방안, ③ +자체 데이터 세트 및 AI +모델 구축 단계별* 보안 +위협 대응 방안 등으로 +구성하여 보안 대책 제시 +* (AI 모델 구축 단계) ▲ 데 +이터 수집/전처리 ▲모델 +학습 ▲평가 및 테스트 ▲ +배포 및 서비스 +단계 +주요 내용 +학습 +데이터 +수집 +AI 모델 학습에 +필요한 데이터 +수집 단계 +학습 +데이터 +전처리 +AI 모델에 적합한 +형태로 변환하고 +데이터 오염 여부 +확인 단계 +모델 +설계・ +학습 +AI 모델을 +설계하고 학습하는 +단계 +모델 +검증 +・테스트 +AI 모델의 성능 +확인 및 테스트 +단계 +※ AI 모델 대상 보안 공격 +기법: 데이터 오염 공격, +모델 오염 공격, 모델 추 +출 공격, 모델 인버전 공 +격, 회피 공격 +수립, ▲모델 명세 및 추 +론 결과에 대한 설명 제공 +④시스템 구현: ▲시스템에 +서의 편향 제거 ▲안전모 +드 구현 및 문제 발생 알 +림 절차 수립 +▲사용자 이해도 제고 +⑤운영 및 모니터링: ▲추 +적 가능성 및 변경이력 +확보, ▲서비스 제공 범 +위 및 상호작용 대상 설 +명 제공 + +## 3. 부록 + +분석 및 정책 추진 방향 +제시 + +## 5. 원칙 기반 규율 추진체계 + +※ AI 분야 정부・민간 간 소 +통・협력의 구심점으로서 +개인정보 규제를 함께 설 +계하고 국제적인 공조 체 +계를 구축 등 추진 +※ AI 프라이버시 전담팀 및 +AI 프라이버시 민・관 정 +책협의회 구성・운영 + +## 6. 향후 계획 + +응용 +분야 +• 정부 서비스 및 기타 민간 +분야 +• 금융 서비스, 시스템 등 AI +적용이 가능한 금융 분야 +전반 +• AI 적용이 가능한 공공・민 +간 全분야 +• AI 적용이 가능한 공공・민 +간 全분야 + + +![이미지 215-0](images/p0215_img0.png) + + +![이미지 215-1](images/p0215_img1.png) + + +![이미지 215-2](images/p0215_img2.png) + + +![이미지 215-3](images/p0215_img3.png) + + +--- + +AI 개발자 대상 보안 프레임워크 +프레임워크 개념과 필요성 +현재 많은 분야에서 다양하게 프레임워크라는 말을 쓰고 있고 기술과 시대가 변하면서 그 의미도 조금 +씩 변하고 있으나, 큰 틀에서 프레임워크의 정의를 내리면 다음과 같다. +●첫째, 만들고자 하는 구조물의 기본 골격으로 아키텍처와 마찬가지로 소프트웨어 공학 뿐만 아니라 +건축, 비행기, 선박, 다리 같은 구조물을 만드는 모든 분야에서 발견할 수 있는 개념이라고 할 수 +있다. 또한 실체가 있는 구조물뿐만 아니라 실체가 없는 정책, 전략에도 쓰인다. +●둘째, 정부정책 라이프사이클 프레임워크(GPLC framework)에 따르면 정책수립에서 정책집행까 +지 정책과 관련된 모든 과정의 틀을 제공하는 것이라고 할 수 있다. 이처럼 프레임워크는 자신이 +다루는 대상의 틀을 결정하는 것이라 할 수 있다. +●GoF(Gang of Four)의 디자인 패턴으로 유명한 랄프 존슨(Ralph Johnson) 교수14는 프레임워크 +를 공학적 측면으로 “소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 +일련의 협업화된 형태로 클래스들을 제공하는 것”이라고 정의하였다. +●이에 AI 보안 프레임워크는, 다가올 AI 산업의 능동적인 대응 방안을 마련하기 위해 상호 관련성이 +있는 기술과 지식을 일목요연하게 정리하여 신뢰할 수 있는 AI 기반 산업의 적용 및 활성화를 위 +한 전체적인 기반 구조를 만드는 것이라 할 수 있다. + +프레임워크의 필요성 +●안전한 AI 개발을 위한 정보보안은 다양한 새로운 기술 요소로 구성되어 있어 이를 통합하고 관리 +하는 것은 매우 복잡한 작업이다. 이러한 복잡성을 효과적으로 관리하고 개발과 구현의 일관성을 +유지하며 시스템에 대한 안전성과 상호 운용성을 높이기 위해 AI 시스템과 서비스에 대한 정보보 +안 프레임워크는 필요하다고 판단된다. +●안전한 AI 개발을 위한 정보보안 프레임워크는 전략적・관리적・정책적・기술적 및 메커니즘 측면에 +서 AI 환경 내 발생할 수 있는 침해 문제를 해결하고 이를 통해 개발자는 사용자에게 더욱 안전하 +고 투명한 AI 서비스 환경을 제공할 수 있을 것으로 판단된다. +14 +랄프 존슨(Ralph Johnson) 교수는 소프트웨어 공학 및 디자인 패턴 분야에서 매우 중요한 인물로, 특히 디자인 패턴의 고전인 +GoF(Gang of Four)의 공동 저자 중 한 사람이다. GoF는 에릭 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨 +(Ralph Johnson), 존 블리시디스(John Vlissides) 네 명의 저자가 공동으로 집필한 “Design Patterns: Elements of Reusable +Object-Oriented Software” (1994)로, 객체 지향 소프트웨어 설계에서 재사용 가능한 23가지 패턴을 소개하여 현대 소프트웨어 +공학에 큰 영향을 미쳤다. + + +![이미지 216-0](images/p0216_img0.png) + + +![이미지 216-1](images/p0216_img1.png) + + +![이미지 216-2](images/p0216_img2.png) + + +![이미지 216-3](images/p0216_img3.png) + + +![이미지 216-4](images/p0216_img4.png) + + +![이미지 216-5](images/p0216_img5.png) + + +--- + +부록 +AI 시스템 보안(Security) 목표 +AI 시스템 보안(Security) 목표는 AI 기술을 안전하게 보호하고 신뢰할 수 있는 방식으로 운영되도록 +보장하는 데 있다. 이 목표는 AI 시스템이 외부 공격, 데이터 유출, 시스템 오작동 등 다양한 보안 위 +협에 대응할 수 있도록 설계되고 유지되는 것을 의미한다. +●AI 시스템에서 보안의 주요 목표는 전통적인 정보보호의 3대 요소인 기밀성(Confidentiality), 무 +결성(Integrity), 가용성(Availability)을 기본으로 하고, AI 모델・시스템 등 개발 생애 주기에서의 +책임성 확보 및 검증을 위한 Accountability(책임 추적성)를 추가하였다. +부록 그림 6 AI 개발자 대상 보안 프레임워크(Security Framework) + + +![이미지 217-0](images/p0217_img0.png) + + +![이미지 217-1](images/p0217_img1.png) + + +![이미지 217-2](images/p0217_img2.png) + + +![이미지 217-3](images/p0217_img3.png) + + +![이미지 217-4](images/p0217_img4.png) + + +![이미지 217-5](images/p0217_img5.png) + + +![이미지 217-6](images/p0217_img6.png) + + +--- + +2.1 +가용성 +가용성(Availability)은 AI 보안 전략에서 중요한 요소 중 하나로, 서비스와 데이터가 항상 접근 가능 +하고 사용할 수 있는 상태를 유지하는 것을 목표로 한다. 이는 AI 시스템의 연속성과 신뢰성을 보장하 +기 위해 필수적이다. 가용성에 대한 주요 관점과 이를 유지하기 위한 방법들은 다음과 같다. +주요 관점 +가용성 유지 방법 +서비스 중단 방지 +∙AI 시스템이 항상 사용 가능하도록 보장함 +∙장애 발생 시 신속한 복구 및 대응 계획을 수립함 +데이터 접근성 보장 +∙필요한 데이터가 언제나 접근 가능해야 함 +∙데이터 손실을 방지하기 위한 백업 및 복구 계획을 마련함 +시스템 성능 유지 +∙높은 부하나 공격에도 시스템이 안정적으로 작동하도록 보장함 +∙성능 저하를 방지하기 위한 자원 관리를 함 +2.2 +기밀성 +기밀성(Confidentiality)은 AI 보안 전략에서 중요한 요소 중 하나로, 정보가 승인된 사람만 접근할 수 +있도록 보호하는 것을 목표로 한다. 이는 데이터 유출과 같은 보안 사고를 방지하고, 민감한 정보가 +보호되도록 하는 데 필수적이다. 기밀성에 대한 주요 관점과 이를 유지하기 위한 방법은 다음과 같다. +주요 관점 +가용성 유지 방법 +데이터 접근 제어 +∙민감한 정보에 대한 접근을 승인된 사용자로 제한함 +∙사용자 인증 및 권한 관리를 통해 불법 접근을 방지함 +데이터 암호화 +∙데이터를 저장하거나 전송할 때 암호화하여 보호함 +∙데이터가 탈취되더라도 내용을 해독할 수 없도록 함 +데이터 유출 방지 +∙내부 및 외부로부터의 데이터 유출을 방지함 +∙데이터 접근 및 전송 경로를 모니터링하여 유출 시도를 감지함 + + +![이미지 218-0](images/p0218_img0.png) + + +![이미지 218-1](images/p0218_img1.png) + + +![이미지 218-2](images/p0218_img2.png) + + +![이미지 218-3](images/p0218_img3.png) + + +![이미지 218-4](images/p0218_img4.png) + + +--- + +부록 +2.3 +무결성 +무결성(Integrity)은 AI 보안 전략의 중요한 요소 중 하나로, 데이터와 시스템이 허가되지 않은 변경 +없이 정확하고 일관된 상태를 유지하는 것을 목표로 한다. 이는 AI 시스템이 신뢰할 수 있는 결과를 +제공하고, 데이터의 변조나 손상을 방지하기 위해 필수적이다. 무결성에 대한 주요 관점과 이를 유지 +하기 위한 방법은 다음과 같다. +주요 관점 +가용성 유지 방법 +데이터 무결성 보장 +∙데이터가 생성, 저장, 전송되는 동안 변조되지 않도록 보호함 +∙데이터의 정확성과 일관성을 유지함 +시스템 무결성 보장 +∙시스템 구성 요소와 소프트웨어가 허가되지 않은 변경 없이 유지되도록 함 +∙시스템이 예상대로 작동하도록 보장함 +변경 추적 및 감사 +∙데이터와 시스템의 변경내역을 기록하고 추적할 수 있도록 함 +∙변경 사항을 모니터링하고, 비정상적인 변경이 감지되면 경고를 발송함 +2.4 +책임 추적성 +책임 추적성(Accountability)은 AI 보안 전략에서 중요한 요소 중 하나로, AI 시스템의 행동과 결정에 +대한 책임을 명확히 하고, 문제가 발생했을 때 원인을 추적할 수 있도록 하는 것을 목표로 한다. 이는 +AI 시스템의 투명성을 높이고, 신뢰성을 보장하며, 윤리적이고 법적 기준을 준수하기 위해 필수적이 +다. 책임 추적성에 대한 주요 관점과 이를 유지하기 위한 방법은 다음과 같다. +주요 관점 +책임 추적성 유지 방법 +행동 및 결정 기록 +∙AI 시스템의 모든 행동과 결정을 기록하여 추적할 수 있도록 함 +∙기록된 데이터를 통해 문제가 발생했을 때 원인을 분석하고 책임을 규명함 +투명성 +∙AI 시스템의 동작 원리와 의사결정 과정을 이해할 수 있도록 설명함 +∙시스템의 작동 방식과 데이터 사용에 대한 정보를 공개하여 신뢰를 구축함 +책임 규명 +∙AI 시스템의 개발자, 운영자, 사용자 간의 역할과 책임을 명확히 함 +∙문제가 발생했을 때 책임 소재를 명확히 규명하여 신속히 대응함 + + +![이미지 219-0](images/p0219_img0.png) + + +![이미지 219-1](images/p0219_img1.png) + + +![이미지 219-2](images/p0219_img2.png) + + +![이미지 219-3](images/p0219_img3.png) + + +![이미지 219-4](images/p0219_img4.png) + + +--- + +안전한 AI를 위한 요소(Mechanism) +1.1 +견고성(Robustness) +●견고성(Robustness)은 AI 보안 메커니즘에서 중요한 요소로, AI 시스템이 다양한 공격이나 예기 +치 않은 상황에서도 안정적이고 일관된 성능을 유지하도록 보장하는 것을 목표로 한다. 견고한 AI 시 +스템은 외부의 악의적 시도나 데이터 왜곡에 흔들리지 않고 신뢰할 수 있는 결과를 제공하여 사용자 +보호와 시스템의 신뢰성을 높이는 역할을 한다. +주요 관점 +구현 방법 +내성 강화 +∙AI 모델이 다양한 공격 시나리오에 대응할 수 있도록 방어 메커니즘을 추가한다. +∙악의적인 데이터 입력에 대한 내성을 강화하여 시스템의 신뢰성을 확보한다. +가용성 유지 +∙AI 시스템이 언제나 사용할 수 있도록 높은 가용성을 유지한다. +∙시스템 다운타임을 최소화하여 사용자 경험을 개선한다. +지속적 검증 및 모니터링 +∙AI 시스템의 성능과 보안 취약점을 정기적으로 테스트하고 검증한다. +∙실시간 모니터링을 통해 이상 징후를 조기에 탐지하고 대응한다. +1.2 +중요정보 보호 +●중요정보(Critical Information) 보호는 AI 보안 메커니즘의 중요한 요소 중 하나로, AI 시스템이 +중요 데이터를 보호하고, 승인되지 않은 접근이나 유출을 방지하는 것을 목표로 한다. 이는 사용자 +의 신뢰를 유지하고, 법적 및 규제 요구 사항을 준수하기 위해 필수적이다. +주요 관점 +구현 방법 +데이터 등급화 +분류 및 관리 +∙데이터 중요도에 따라 조직의 목적에 맞는 데이터 분류 기준을 수립한다. +∙데이터 등급에 따라 접근 권한을 제한하고, 관리할 수 있는 사용자를 명확히 한다. +데이터 접근 제어 +∙중요 데이터에 대한 접근을 엄격히 통제하고, 승인된 사용자만 접근할 수 있도록 +한다. +∙데이터 접근 권한을 최소한으로 제한하고, 접근 로그를 기록한다. +암호화 +∙중요 데이터에 대한 접근 통제와 암호화를 적용한다. +∙데이터 왜곡이나 변조 방지를 위해 안전한 데이터 저장 및 처리 방법을 도입한다. + + +![이미지 220-0](images/p0220_img0.png) + + +![이미지 220-1](images/p0220_img1.png) + + +![이미지 220-2](images/p0220_img2.png) + + +![이미지 220-3](images/p0220_img3.png) + + +![이미지 220-4](images/p0220_img4.png) + + +--- + +부록 +1.3 +신뢰성 +●신뢰성(Reliability)는 AI 보안 메커니즘에서 중요한 요소로, AI 시스템이 일관되고 예측 가능한 성 +능을 제공하며, 다양한 상황에서도 안정적으로 작동하는 것을 목표로 한다. 이는 AI 시스템이 신뢰 +할 수 있는 결과를 제공하고, 사용자가 의존할 수 있도록 하는 데 필수적이다. +주요 관점 +구현 방법 +안정성 (Stability) +∙AI 시스템이 다양한 환경과 조건에서도 안정적으로 작동하도록 보장한다. +∙시스템 장애나 오류가 발생하지 않도록 예방하고, 발생 시 신속히 복구한다. +무결성 +∙AI 시스템은 수집된 데이터나 개발된 모델이 변조되지 않도록 보장한다. +∙무결성 검사를 정기적으로 수행하고, 데이터나 모델에 악의적인 변조가 있는지 모니 +터링한다. +1.4 +사회적 영향 +●사회적 영향(Social Impact)은 AI 보안 메커니즘에서 중요한 요소로, AI 시스템이 사회에 미치는 +긍정적 또는 부정적 영향을 고려하여, 긍정적 영향은 최대화하고 부정적 영향은 최소화하는 것을 +목표로 한다. 이는 AI 기술이 공익적이고 책임감 있게 사용되도록 보장하고, 사회적 신뢰를 구축하 +기 위해 필수적이다. +주요 관점 +관리 방법 +사회 기반시설 +보호 +∙사회 기반시설에 대한 정보는 국가 및 공공의 안보와 직결되므로, 중요 데이터를 별도 +로 분류하고 최고 수준의 보호를 적용한다. +공공시스템 +보호 +∙중요한 공공시스템은 일반 네트워크와 물리적으로 분리하거나, 강력한 네트워크 분할 +(segmentation)을 통해 외부 접근으로부터 보호하고 다양한 기술적 조치를 통해 보 +안을 강화한다. +악용 방지 +∙AI 기술이 사회적 해악을 끼칠 목적으로 악용되지 않도록 예방하는 보안 메커니즘이 +필요하다. 예를 들어, 자동화된 사이버 공격 등에 대한 방지책을 마련한다. +∙시스템의 악용 가능성을 사전에 분석하고, 이러한 위험에 대한 대응책을 포함한 설계 +를 적용한다. + + +![이미지 221-0](images/p0221_img0.png) + + +![이미지 221-1](images/p0221_img1.png) + + +![이미지 221-2](images/p0221_img2.png) + + +![이미지 221-3](images/p0221_img3.png) + + +--- + +안전한 AI를 위한 위험 관리(Risk Management) +4.1 +인적 측면(Personal Aspect) + +#### 4.1.1 사람의 감독 + +●사람의 감독(Human Oversight)은 AI 관련 사업에서 중요한 요소로, AI 시스템이 의사결정 과정 +에서 인간의 감독과 개입을 받을 수 있도록 하는 것을 목표로 한다. 이는 AI 시스템의 신뢰성과 보 +안성을 보장하고, 잠재적인 위험을 최소화하기 위해 필수적이다. +주요 관점 +구현 방법 +인간의 개입 +∙AI 시스템의 결정에 대해 책임질 수 있는 인간 감독자가 존재해야 한다. +∙인간 감독자는 AI 시스템의 결과와 그에 따른 행동에 대해 책임을 진다. +AI 모델의 학습 및 +업데이트 감독 +∙AI 시스템이 새로운 데이터로 학습하거나 모델을 업데이트할 때, 사람이 그 데이터를 +검토하여 악의적 데이터, 또는 보안 취약성을 식별하도록 해야 한다. +∙학습 과정 중 생성된 결과나 변경 사항에 대해 정기적으로 감사(Audit)를 실시한다. + +#### 4.1.2 데이터 보호 + +●데이터 보호는 AI 관련 사업에서 중요한 요소로, 데이터가 무단으로 수집되거나 사용되지 않도록 +보호하는 것을 목표로 한다. 이는 사용자의 신뢰를 유지하고, 법적 및 규제 요구 사항을 준수하며, +데이터 기밀성과 무결성을 보장하기 위해 필수적이다. +주요 관점 +구현 방법 +데이터 암호화 +∙전송/저장 중 암호화: 네트워크를 통해 전송되는 데이터를 암호화하고 데이터베이스 +와 스토리지 시스템에 저장된 데이터를 암호화하여 물리적 접근 및 데이터 유출 시에 +도 기밀성을 유지한다. +접근 제어 +∙최소 권한 원칙(Principle of Least Privilege): 사용자가 최소한의 데이터에만 접근 +할 수 있도록 접근 권한을 제한한다. +∙역할 기반 접근 제어(Role-Based Access Control, RBAC): 사용자의 직무나 역할 +에 따라 접근 권한을 부여한다. +사용자 인증 및 신원 확인 +∙멀티팩터 인증(Multi-Factor Authentication, MFA): 비밀번호 외에 추가 인증 요소 +를 요구한다. +∙생체 인증(Biometric Authentication): 얼굴 인식, 지문, 홍채 등 고급 인증 기술을 +사용한다. + +#### 4.1.3 역할과 책임 + +●역할과 책임(Role and Responsibility, R&R)은 AI 관련 사업에서 중요한 요소로, 각 개인의 역 +할과 책임을 명확히 정의하여 AI 시스템의 개발, 운영, 유지보수 과정에서 발생할 수 있는 혼란과 +문제를 최소화하는 것을 목표로 한다. 이는 AI 시스템의 효율적이고 신뢰할 수 있는 운영을 보장하 +기 위해 필수적이다. + + +![이미지 222-0](images/p0222_img0.png) + + +![이미지 222-1](images/p0222_img1.png) + + +![이미지 222-2](images/p0222_img2.png) + + +![이미지 222-3](images/p0222_img3.png) + + +![이미지 222-4](images/p0222_img4.png) + + +--- + +부록 +주요 관점 +구현 방법 +명확한 역할 정의 +(Clear Role Definition) +∙각 개인의 역할과 책임을 명확히 정의하여, 중복되거나 누락되는 부분이 없도록 한다. +∙역할에 대한 명확한 정의는 책임의 한계를 명확히 하고, 효율적인 업무 분담을 한다. +책임 분담 +(Responsibility +Allocation) +∙AI 시스템의 다양한 기능과 과업에 대해 책임을 적절히 분담한다. +∙책임 분담을 통해 각 팀원이 자신의 역할에 충실하고, 협력하여 목표를 달성한다. +지속적인 모니터링과 평가 +(Continuous +Monitoring and +Evaluation) +∙각 역할과 책임이 제대로 이행되고 있는지 지속적으로 모니터링하고 평가한다. +∙이를 통해 문제를 조기에 발견하고, 신속히 해결한다. + +#### 4.1.4 직무 분리 + +●직무 분리(Segregation of Duties, SoD)는 AI 관련 사업에서 중요한 요소로, 특정한 직무와 책 +임을 여러 개인에게 분산시켜 비윤리적 행위나 실수를 방지하고, 내부 통제와 보안을 강화하는 것 +을 목표로 한다. 이는 AI 시스템의 신뢰성과 투명성을 보장하기 위해 필수적이다. +주요 관점 +구현 방법 +내부 통제 강화 +(Enhanced Internal +Control) +∙한 사람이 모든 권한을 가지는 것을 방지하여 내부 통제를 강화한다. +∙비윤리적 행위나 실수로 인한 위험을 최소화한다. +책임성 증대 +(Increased +Accountability) +∙각 개인의 책임을 명확히 하여 책임성을 증대한다. +∙직무와 권한이 분리됨으로써 서로를 감시하고 견제한다. +투명성 확보 +(Ensured +Transparency) +∙직무 분리를 통해 업무 과정의 투명성을 확보한다. +∙권한 남용이나 비리의 가능성을 줄인다. +4.2 +물리적/환경적 측면(Physical/Environmental Aspect) + +#### 4.2.1 사회적 책임 + +●사회적 책임(Social Responsibility)은 AI 관련 사업에서 중요한 요소로, AI 시스템이 사회와 환경 +에 미치는 영향을 고려하고, 이를 통해 사회적 가치와 국가적 이익을 증진하는 것을 목표로 한다. +이는 AI 시스템의 개발, 운영, 유지보수 과정에서 발생할 수 있는 사회적 및 환경적 영향을 최소화 +하고, 지속 가능한 발전을 도모하기 위해 필수적이다. + + +![이미지 223-0](images/p0223_img0.png) + + +![이미지 223-1](images/p0223_img1.png) + + +![이미지 223-2](images/p0223_img2.png) + + +![이미지 223-3](images/p0223_img3.png) + + +--- + +주요 관점 +구현 방법 +사회적 영향 +(Social Impact) +∙AI 시스템이 사회에 미치는 긍정적 및 부정적 영향을 평가하고 관리한다. +∙모든 사회 구성원이 공평하게 AI의 혜택을 누릴 수 있도록 한다. +환경적 지속 가능성 +(Environmental +Sustainability) +∙AI 시스템의 개발과 운영이 환경에 미치는 영향을 최소화한다. +∙지속 가능한 자원 사용과 환경 보호를 고려한다. +법적 및 윤리적 준수 +(Legal and Ethical +Compliance): +∙AI 시스템이 관련 법규와 윤리적 기준을 준수하도록 한다. +∙사용자와 사회의 신뢰를 유지하기 위해 투명하고 책임 있는 AI 개발을 추진한다. + + +#### 4.2.2 물리적 피해 방지 설계 + +●물리적 피해 방지 설계(Design to Prevent Physical Harm)는 AI 관련 사업에서 중요한 요소로, +AI 시스템이 물리적 환경에서 작동할 때 사용자와 주변 환경에 신체적 피해를 주지 않도록 설계하 +는 것을 목표로 한다. 이는 AI 시스템의 안전성과 신뢰성을 보장하고, 법적 및 윤리적 책임을 다하 +기 위해 필수적이다. +주요 관점 +구현 방법 +안전 설계 +(Safety by Design) +∙AI 시스템이 물리적 환경에서 안전하게 작동하도록 설계한다. +∙위험 요소를 사전에 식별하고 제거하여 안전성을 확보한다. +위험 평가 및 관리 +(Risk Assessment and +Management) +∙AI 시스템의 물리적 작동이 초래할 수 있는 잠재적 위험을 평가하고 관리한다. +∙위험 발생 시 신속히 대응할 수 있는 절차를 마련한다. +법적 및 규제 준수 +(Legal and Regulatory +Compliance) +∙AI 시스템의 설계와 운영이 관련 법규와 규제 기준을 준수한다. +∙안전 표준과 가이드라인을 따라 시스템을 개발하고 운영한다. +AI 시스템 보안을 위한 거버넌스(Governance) +AI 시스템 보안을 위한 조직 내 규정과 정책, 그리고 거버넌스 체계는 AI 모델이 조직에서 안전하게 +운영되고, 보안 리스크를 관리하는 데 중요한 역할을 한다. 효과적인 AI 보안 거버넌스는 기술, 사람, +프로세스를 통합하여 AI 시스템의 무결성, 기밀성, 가용성을 유지하고, 법적 규제와 윤리적 기준을 준 +수하도록 설계되어야 한다. 이를 위해 조직은 명확한 정책과 절차를 수립하고, 보안 거버넌스를 통해 +AI 시스템이 지속적으로 안전하게 운영될 수 있도록 관리해야 한다. AI 보안 거버넌스의 핵심 요소는 +정책(Policy), 규정(Guidelines), 절차(Processes) 등을 포함한다. + + +![이미지 224-0](images/p0224_img0.png) + + +![이미지 224-1](images/p0224_img1.png) + + +![이미지 224-2](images/p0224_img2.png) + + +![이미지 224-3](images/p0224_img3.png) + + +![이미지 224-4](images/p0224_img4.png) + + +![이미지 224-5](images/p0224_img5.png) + + +--- + +부록 +5.1 +정책(Policy) +●AI 보안 정책 수립: 조직은 AI 시스템을 안전하게 운영하기 위한 포괄적인 보안 정책을 수립해야 +한다. 정책에는 AI 시스템의 설계, 개발, 배포 및 운영에 필요한 보안 기준과 절차를 명확히 정의 +해야 한다. +●접근 권한 관리 정책: AI 시스템에 대한 접근 권한을 관리하기 위한 정책을 수립하여, 민감한 데이 +터와 시스템에 대한 무단 접근을 방지해야 한다. 역할 기반 접근 제어(RBAC)를 통해 AI 시스템에 +접근할 수 있는 사용자와 권한을 제한해야 한다. +●데이터 보호 정책: AI 시스템이 다루는 데이터의 기밀성과 무결성을 보장하기 위해 데이터 암호화, +데이터 저장소 보호에 대한 규정을 마련해야 한다. +5.2 +규정(Guidelines) +●AI 모델 관리 규정: AI 모델의 학습, 배포 및 사용에 대한 구체적인 지침을 제공해야 한다. 이 +규정은 AI 모델의 검증 및 테스트 절차, 안전한 데이터 사용, 모델 업데이트 및 폐기 절차를 포 +함한다. +●AI 시스템 모니터링 규정: AI 시스템이 보안 위협에 대응할 수 있도록 실시간 모니터링 및 로그 +분석 규정을 마련해야 한다. 이를 통해 시스템 내 이상 활동이나 보안 위협을 조기에 감지하고 대 +응할 수 있어야 한다. +●리스크 관리 규정: AI 시스템에 내재된 보안 리스크를 식별하고 관리하기 위한 규정을 수립해야 한 +다. 이는 잠재적인 보안 위협을 사전에 평가하고 완화하는 절차를 포함한다. +5.3 +절차(Process) +●AI 보안 평가 절차: AI 시스템 개발 초기부터 보안 평가 절차를 구축하여, 보안 위험을 사전에 감 +지하고 해결해야 한다. 이 절차는 보안 취약점 분석, 침투 테스트 및 코드 리뷰를 포함할 수 있다. +●AI 시스템 업데이트 및 패치 절차: AI 시스템과 모델이 최신 보안 위협에 대응할 수 있도록 정기적 +인 업데이트 및 패치 절차를 수립해야 한다. 이 절차는 새로운 보안 위협에 대한 대응 방안을 포함 +하며, 보안 업데이트가 원활하게 이루어지도록 해야 한다. +●비상 대응 계획: 보안 사고가 발생했을 때 즉각적으로 대응할 수 있는 비상 대응 계획을 마련해야 +한다. 여기에는 사고 보고, 대응 팀 구성, 시스템 복구 및 데이터 손실 방지 절차가 포함된다. + + +![이미지 225-0](images/p0225_img0.png) + + +![이미지 225-1](images/p0225_img1.png) + + +![이미지 225-2](images/p0225_img2.png) + + +![이미지 225-3](images/p0225_img3.png) + + +--- + +AI 시스템 보안를 위한 위험관리(Risk Management) +위험관리(Risk Management)는 AI를 활용한 서비스에서 필수적인 요소로, AI 시스템이 직면할 수 +있는 잠재적 위험을 식별하고, 이를 효과적으로 관리하고 대응하기 위한 체계적인 접근을 포함한다. +위험 관리는 위험 분석, 위험 감지, 사고 대응의 세 가지 주요 단계로 나눌 수 있다. +6.1 +위험 분석 +●위험 분석(Risk Analysis)은 AI 시스템이 직면할 수 있는 잠재적 위험을 식별하고, 그 심각성과 +발생 가능성을 평가하는 과정이다. 이 과정은 위험 관리의 첫 단계로, 체계적인 접근을 통해 위험 +요소를 사전에 파악하고 대응 전략을 마련하는 것을 목표로 한다. +●주요 활동 +- 위험 식별(Risk Identification): AI 시스템과 관련된 모든 잠재적 위험을 식별하고, 기술적・운 +영적・윤리적・법적 측면에서 발생할 수 있는 다양한 위험을 고려한다. +※ 예시: 데이터 손실, 시스템 오류, 보안 침해, 윤리적 문제 등 +- 위험 평가(Risk Assessment): 식별된 위험의 심각성과 발생 가능성을 평가하고, 각 위험 요소 +의 영향을 분석하여 우선순위를 정한다. +- 위험 대응 계획(Risk Mitigation Plan) 수립: 평가된 위험에 대한 대응 계획을 수립하고, 위험을 +줄이기 위한 예방 조치와 대응 전략을 마련한다. +※ 예시: 보안 강화, 데이터 백업, 긴급 대응 절차 마련 등 +6.2 +위험 감지 +●위험 감지(Risk Detection)는 AI 시스템의 운영 중 발생하는 이상 징후나 위험 요소를 실시간으 +로 감지하고, 이를 신속하게 보고하는 과정이다. 이는 위험 발생 시 신속한 대응을 위해 중요한 단 +계이다. +●주요 활동 +- 모니터링 시스템 구축(Establish Monitoring Systems): AI 시스템의 성능과 안전성을 실시간 +으로 모니터링하는 시스템을 구축한다. +※ 예시: 네트워크 트래픽 모니터링, 시스템 로그 분석, 사용자 활동 추적 등 +- 이상 징후 탐지(Anomaly Detection) : 정상적인 패턴에서 벗어난 이상 징후를 자동으로 감지 +할 수 있는 알고리즘과 기술을 도입한다. +※ 예시: 머신러닝 기반 이상 탐지 알고리즘, 실시간 경고 시스템 등 + + +![이미지 226-0](images/p0226_img0.png) + + +![이미지 226-1](images/p0226_img1.png) + + +![이미지 226-2](images/p0226_img2.png) + + +![이미지 226-3](images/p0226_img3.png) + + +![이미지 226-4](images/p0226_img4.png) + + +![이미지 226-5](images/p0226_img5.png) + + +--- + +부록 +- 자동화된 경고(Automated Alerts): 이상 징후나 위험 요소 감지 시 즉각적으로 관련 담당자에 +게 경고를 보내는 자동화된 시스템을 운영한다. +※ 예시: 이메일 알림, SMS 경고, 대시보드 알림 등 +- 정기적 검토(Regular Reviews): 모니터링 결과와 경고 로그를 정기적으로 검토하여, 새로운 위 +험 요소나 패턴을 식별하고 대응 방안을 업데이트한다. +※ 예시: 주간/월간 보고서 작성, 경고 로그 분석 회의 등 +6.3 +사고 대응 +●사고 대응(Incident Handling)은 실제로 위험이 발생했을 때 이를 효과적으로 대응하고 해결하는 +과정이다. 이는 신속한 대응과 문제 해결을 통해 피해를 최소화하고, 재발 방지를 위한 교훈을 도 +출하는 것을 목표로 한다. +●주요 활동 +- 사고 대응 절차 수립(Establish Incident Response Procedures): 사고 발생 시 신속하고 체 +계적으로 대응할 수 있는 절차와 계획을 마련한다. +※ 예시: 사고 대응 매뉴얼 작성, 비상 연락망 구축, 역할 및 책임 정의 등 +- 사고 대응 팀 구성(Form Incident Response Team) : 사고 발생 시 대응할 전담 팀을 구성하 +고, 각 팀원의 역할과 책임을 명확히 한다. +※ 예시: 보안 담당자, 데이터 과학자, IT 지원팀 등으로 구성 +- 초기 대응 및 완화(Initial Response and Mitigation) : 사고 발생 시 초기 대응을 통해 피해를 +최소화하고, 추가 피해를 방지하기 위한 조치를 취한다. +※ 예시: 시스템 격리, 데이터 복구, 보안 패치 적용 등 +- 사고 분석 및 보고(Incident Analysis and Reporting) : 사고의 원인을 분석하고, 사고 발생 +과정과 대응 결과를 상세히 기록하여 보고한다. +※ 예시: 사고 원인 분석 보고서 작성, 대응 결과 리뷰 등 +- 사후 조치 및 재발 방지(Post-Incident Actions and Prevention) : 사고 종료 후 사후 조치를 +취하고, 재발 방지를 위한 교훈을 도출하여 시스템과 절차를 개선한다. +※ 예시: 시스템 업데이트, 보안 정책 강화, 교육 프로그램 운영 등 +●예시 시나리오 +- AI 모델 오류 사고 대응 +▸위험 분석: AI 모델의 예측 오류 가능성을 평가하고, 모델 검증 및 테스트 계획 수립 +▸위험 감지: AI 모델의 실시간 성능 모니터링 시스템 도입. 예측 오류 발생 시 경고 시스템 운영 +▸사고 대응: AI 모델의 예측 오류 발생 시 즉시 모델 사용 중지 및 수정 작업. 오류 원인 분석 +및 보고. 수정된 모델의 검증 및 테스트 후 재배포. 재발 방지를 위한 모델 검증 절차 강화 + + +![이미지 227-0](images/p0227_img0.png) + + +![이미지 227-1](images/p0227_img1.png) + + +![이미지 227-2](images/p0227_img2.png) + + +![이미지 227-3](images/p0227_img3.png) + + +--- + +AI 서비스 제공자 대상 보안 프레임워크 +AI 서비스 제공자 관점의 프레임워크 필요성 +●AI 서비스를 위한 정보보안은 다양한 새로운 기술 요소로 구성되어 있어 이를 통합하고 관리하는 +것은 매우 복잡한 작업이므로, 이러한 복잡성을 효과적으로 관리하고 시스템에 대한 안전성과 상호 +운용성을 높이기 위해 AI 시스템과 서비스에 대한 정보보안 프레임워크는 필요하다. +●AI 서비스를 위한 정보보안 프레임워크는 전략적・관리적・정책적・기술적 및 메커니즘 측면에서 AI +환경 내 발생 할 수 있는 침해 문제를 해결하고 이를 통해 서비스 제공자는 AI 기술을 효과적으로 +도입하여 이용자에게 더욱 안전한 AI 서비스 환경을 제공할 수 있다. +- (데이터 보호 및 기밀성 유지) AI 서비스는 대량의 데이터를 처리하며, 이 중에는 중요 정보가 +포함될 수 있다. AI 서비스 제공자는 정보보안 프레임워크를 통해 데이터의 기밀성을 유지하고 +불법 접근이나 유출을 방지할 수 있다. +- (AI 모델의 무결성 유지) AI 모델이나 서비스가 사이버 공격(예: 데이터 조작, 모델 해킹 등)에 +노출되면 결과의 정확성과 무결성이 위협받을 수 있으므로, AI 서비스 제공자는 보안 프레임워 +크를 통해 AI 시스템이 악의적 변경이나 조작으로부터 보호되도록 예방할 수 있다. +- (사이버 위협 대응 및 리스크 최소화) AI 서비스 제공자는 사이버 공격, 해킹, 랜섬웨어 등 다양 +한 위협에 노출될 수 있으므로, 보안 프레임워크를 통해 사전 대비와 함께, 발생 시 대응 프로토 +콜을 제공하여 피해를 최소화할 수 있다. +- (서비스 연속성 및 가용성 보장) AI 서비스의 중단은 기업의 신뢰와 수익에 큰 타격을 줄 수 있 +으므로, 보안 프레임워크를 통해 백업, 복구 계획 등을 포함하여 AI 서비스의 안정적인 가용성을 +보장할 수 있다. +- (고객 신뢰 확보) 고객들은 자신의 데이터를 다루는 AI 기업이 신뢰할 수 있어야 서비스를 사용 +하므로, AI 서비스 제공자는 보안 프레임워크를 통해 고객의 데이터 보호 및 신뢰를 높이고, 비 +즈니스 지속성을 강화할 수 있다. + + +![이미지 228-0](images/p0228_img0.png) + + +![이미지 228-1](images/p0228_img1.png) + + +![이미지 228-2](images/p0228_img2.png) + + +![이미지 228-3](images/p0228_img3.png) + + +![이미지 228-4](images/p0228_img4.png) + + +--- + +부록 +AI 서비스 제공자 관점의 보안 목표 +2.1 +보안 프레임워크(Security Framework) - 예방 단계 +예방(Prevention) 단계에서의 보안 목표: 예방 단계의 Framework는 AI 시스템에 대한 잠재적 위협 +을 사전에 대비하고 보호하기 위한 다양한 전략과 메커니즘을 포함한다. +●거버넌스(Governance): 보안 정책, 절차, 표준, 가이드라인 및 윤리를 수립하여 AI 워크로드와 관 +련된 역할과 책임을 명확히 한다. +●위험 관리(Risk Management): AI 시스템과 서비스에 대한 보안 요구사항을 준수하기 위해 보안 +조치를 설계, 적용, 평가, 검증한다. +부록 그림 7 AI 서비스 제공자 대상 보안 프레임워크(Security Framework) - 예방 단계 + + +![이미지 229-0](images/p0229_img0.png) + + +![이미지 229-1](images/p0229_img1.png) + + +![이미지 229-2](images/p0229_img2.png) + + +![이미지 229-3](images/p0229_img3.png) + + +![이미지 229-4](images/p0229_img4.png) + + +![이미지 229-5](images/p0229_img5.png) + + +![이미지 229-6](images/p0229_img6.png) + + +--- + +예방 단계에 대한 보안 기술(Security Technology) 적용 방안 +●데이터 보호 +- 데이터 보호(Data Protection)는 AI 시스템에서 데이터의 기밀성, 무결성, 가용성을 유지하여 +보안성을 확보하는 중요한 과정이다. 이는 데이터가 불법적으로 접근되거나 수정되지 않도록 하 +며, 시스템의 신뢰성을 높이는 역할을 한다. +구 분 +내 용 +추진방안 +설정 및 설계 +(Setup and +Design) +데이터 보호를 +위한 보안 정책과 +시스템을 설정하고 +설계 +∙데이터 보안 정책 수립: 데이터를 보호하기 위한 정책과 절차를 수립한 +다. 이는 데이터 접근 권한, 저장, 전송, 삭제 등의 과정에서의 보안 요 +구사항을 포함한다. +∙거버넌스 체계 구축: 데이터 관리와 보호를 위한 거버넌스 체계를 구축 +하여 책임과 역할을 명확히 한다. 이를 통해 데이터 보호가 조직 전반에 +걸쳐 일관되게 적용될 수 있도록 한다. +∙보안 아키텍처 설계: 데이터 보호를 위한 보안 아키텍처를 설계한다. 이는 +데이터 암호화, 접근 통제, 로그 관리 등의 기술적 요구사항을 포함한다. +∙(예시) 데이터 암호화 정책 수립, 데이터 접근 통제 설계, 데이터 저장 +및 백업 절차 설정. +단계 설정 +(Stage Setup) +데이터 보호를 +위한 구체적인 +단계와 절차를 +설정 +∙신뢰할 수 있는 데이터 구축: 데이터 수집, 저장, 처리 과정에서 데이터 +의 신뢰성을 보장할 수 있는 절차를 마련한다. 이는 데이터의 정확성, 일 +관성, 무결성을 포함한다. +∙훈련 및 테스트 단계 설계: AI 모델의 훈련 및 테스트 단계에서 데이터 보 +호를 위한 절차를 마련하여 데이터가 안전하게 사용될 수 있도록 한다. +∙보안 검토 및 업데이트: 데이터 보호 절차가 최신 보안 표준과 법적 요 +구사항을 준수하도록 정기적으로 검토하고 업데이트한다. +∙(예시) 데이터 검증 절차 설정, 훈련 데이터셋의 무결성 검증, 테스트 데 +이터의 보호 및 관리. + + +![이미지 230-0](images/p0230_img0.png) + + +![이미지 230-1](images/p0230_img1.png) + + +![이미지 230-2](images/p0230_img2.png) + + +![이미지 230-3](images/p0230_img3.png) + + +![이미지 230-4](images/p0230_img4.png) + + +--- + +부록 +●모델 보안 유지 +- 모델 보안 유지(Secure Model)는 AI 시스템에서 모델의 보안을 보장하기 위한 다양한 활동과 +절차를 포함한다. 이를 통해 AI 모델이 안전하게 작동하고 신뢰성을 유지하도록 한다. 여기에는 +다음과 같은 구체적인 활동이 포함된다: +구 분 +내 용 +추진방안 +모델 접근 통계 +(Implement Access +Control on Model) +AI 모델에 대한 접근 +권한을 통계하여 무단 +접근을 방지하고 보안을 +강화하는 과정 +∙사용자 인증 및 권한 부여: AI 모델에 접근할 수 있는 사용자 +나 시스템을 인증하고, 적절한 권한을 부여한다. +∙접근 로그 관리: AI 모델에 대한 접근 시도를 기록하고, 이상 +활동을 모니터링하여 보안 위협을 식별한다. +∙역할 기반 접근 통계(Role-Based Access Control): 사용 +자 역할에 따라 접근 권한을 제한하여 민감한 모델에 대한 무 +단 접근을 방지한다. +∙(예시) AI 모델에 대한 접근 시 다단계 인증을 요구하고, 접 +근 로그를 주기적으로 검토하여 비정상적인 접근을 탐지한다. +모델 설명 가능성 및 +상호 운용성 적용 +(Apply Model +Explainability and +Interoperability with +Secure Manner) +AI 모델의 결정 과정을 +투명하게 설명하고, +다른 시스템과의 상호 +운용성을 보장하는 +동시에 보안을 유지하는 +과정 +∙설명 가능 AI(Explainable AI): AI 모델의 예측이나 결정이 +어떻게 도출되었는지 설명할 수 있는 기능을 추가하여 투명성 +을 높인다. +∙상호 운용성 보장: AI 모델이 다른 시스템과 원활하게 연동될 +수 있도록 설계하며, 데이터 교환 시 보안을 유지한다. +∙보안 모니터링: 모델 설명 과정에서 민감한 정보가 노출되지 +않도록 보안 모니터링을 실시한다. +∙(예시) AI 모델의 예측 결과를 설명하는 대시보드를 제공하 +고, 다른 시스템과의 데이터 교환 시 암호화를 적용하여 보안 +을 유지한다. +리뷰 및 승인 +프로세스 설정 +(Set Up Review and +Approval Process +for Feedback +Process) +AI 모델의 변경 사항을 +검토하고 승인하는 +절차를 마련하여, +모델의 신뢰성과 보안을 +보장하는 과정 +∙변경 사항 검토: AI 모델의 업데이트나 수정 사항을 사전에 +검토하고, 잠재적인 보안 위험을 평가한다. +∙승인 절차 마련: 변경 사항을 적용하기 전에 승인 절차를 거 +쳐, 보안 및 품질 기준을 충족하도록 한다. +∙피드백 반영: 사용자 및 시스템에서 제공된 피드백을 기반으 +로 모델을 개선하고, 보안성을 유지한다. +∙(예시) AI 모델 업데이트 시 전문가 리뷰를 통해 변경 사항을 +검토하고, 필요시 보안 패치를 적용하여 보안성을 강화한다. + + +![이미지 231-0](images/p0231_img0.png) + + +![이미지 231-1](images/p0231_img1.png) + + +![이미지 231-2](images/p0231_img2.png) + + +![이미지 231-3](images/p0231_img3.png) + + +--- + +●사이버 보안 기술 적용 +- AI Security Framework에서 사이버 보안(Cyber Security)은 AI 시스템 및 데이터의 보안을 +강화하는 데 중점을 둔다. 이는 다양한 보안 기술과 절차를 통해 AI 시스템을 보호하고, 데이터 +무결성과 기밀성을 유지하며, 시스템의 가용성을 보장하는 것을 목표로 한다. +▸구성요소(Component)별 목표 및 요구사항은 다음과 같다 +구분 +보안 목표 및 요구사항 +Application Security +(응용 프로그램 보안) +[목표] AI 애플리케이션의 보안을 강화하여 취약점 및 공격으로부터 보호한다. +∙코드 리뷰 및 테스트: 애플리케이션의 코드를 주기적으로 리뷰하고, 보안 취약점을 발견 +하여 수정한다. +∙취약점 스캐닝: 애플리케이션 내의 보안 취약점을 탐지하고, 이를 해결하기 위한 조치를 +취한다. +∙보안 패치 관리: 애플리케이션에 대한 최신 보안 패치를 적용하여 알려진 취약점을 방지한다. +∙(예시) 정기적인 취약점 스캐닝 도구를 사용하여 AI 애플리케이션의 보안 상태를 점검하 +고, 발견된 취약점을 신속히 수정한다. +Network Security +(네트워크 보안) +[목표] AI 시스템이 연결된 네트워크를 보호하여 데이터의 무결성과 기밀성을 유지한다. +∙방화벽 설정 및 관리: 외부 공격으로부터 네트워크를 보호하기 위해 방화벽을 설정하고 +관리한다. +∙침입 탐지 시스템(IDS): 네트워크 트래픽을 모니터링하여 비정상적인 활동을 탐지하고 +대응한다. +∙가상 사설망(VPN): 네트워크를 통한 데이터 전송 시 암호화된 연결을 제공하여 데이터 +의 기밀성을 유지한다. +∙(예시) 네트워크에 IDS를 설치하여 실시간으로 비정상적인 트래픽을 감지하고, 즉시 대 +응할 수 있도록 한다. +System Security +(시스템 보안) +[목표] AI 시스템의 운영 체제 및 관련 인프라를 보호하여 무단 접근과 공격을 방지한다. +∙운영 체제 보안 설정: 시스템의 운영 체제에 대한 보안 설정을 강화하여 취약점을 줄인다. +∙정기적인 시스템 업데이트: 운영 체제 및 소프트웨어에 대한 최신 업데이트를 적용하여 +보안을 유지한다. +∙시스템 모니터링: 시스템 로그를 주기적으로 모니터링하여 비정상적인 활동을 탐지하고 +대응한다. +∙(예시) 시스템에 최신 보안 업데이트를 정기적으로 적용하고, 로그 모니터링 도구를 사용 +하여 시스템 활동을 실시간으로 감시한다. +DB Security +(데이터베이스 보안) +[목표] AI 시스템에서 사용되는 데이터베이스를 보호하여 데이터 무결성과 기밀성을 유지한다. +∙접근 통계: 데이터베이스에 대한 접근 권한을 관리하여 무단 접근을 방지한다. +∙데이터 암호화: 저장된 데이터를 암호화하여 데이터 유출 시에도 기밀성을 유지한다. +∙백업 및 복구 계획: 데이터베이스의 정기적인 백업을 수행하고, 데이터 손실 시 복구 계 +획을 마련한다. +∙(예시) 중요한 데이터베이스 필드를 암호화하고, 정기적으로 백업을 수행하여 데이터 손 +실에 대비한다. +Device Security +(장치 보안) +[목표] AI 시스템에 연결된 장치를 보호하여 보안 위협으로부터 안전하게 유지한다. +∙장치 인증 및 승인: AI 시스템에 연결된 모든 장치에 대한 인증 절차를 마련하고, 승인 +된 장치만 연결되도록 한다. +∙장치 보안 설정: 각 장치에 대한 보안 설정을 강화하여 취약점을 최소화한다. +∙펌웨어 업데이트: 장치의 펌웨어를 최신 상태로 유지하여 보안 취약점을 해결한다. +∙(예시) AI 시스템에 연결된 IoT 장치에 대해 정기적인 펌웨어 업데이트를 실시하고, 보 +안 인증 절차를 적용하여 무단 장치 연결을 방지한다. + + +![이미지 232-0](images/p0232_img0.png) + + +![이미지 232-1](images/p0232_img1.png) + + +![이미지 232-2](images/p0232_img2.png) + + +![이미지 232-3](images/p0232_img3.png) + + +--- + +부록 +▸핵심 보안기술(Core Security)별 목표 및 요구사항 +구분 +보안 목표 및 요구사항 +Multi-Factor +Authentication +(MFA) +[목표] Multi-Factor Authentication은 두 개 이상의 인증 요소를 사용하는 보안 체계이 +다. 이는 사용자나 시스템이 본인임을 확인하기 위해 여러 단계를 거치는 방식으로, 보안 +강화를 목표로 한다. +∙지식 기반 요소: 사용자만 알고 있는 정보(예: 비밀번호, PIN) +∙소유 기반 요소: 사용자만 소유한 물리적 장치(예: 스마트폰, OTP 토큰) +∙고유 기반 요소: 사용자의 생체 정보(예: 지문, 얼굴 인식, 음성 인식) +∙OTP(One-Time Password): 일회용 비밀번호를 생성하여 로그인 시 추가 인증 단계 +로 사용 +∙생체인식: 지문 스캐너, 얼굴 인식 시스템을 통해 물리적 접근 및 데이터 접근 제어 +∙보안 토큰: 하드웨어나 소프트웨어 토큰을 사용하여 두 번째 인증 단계 제공 +∙(예시) 은행 거래 시 스마트폰에 OTP를 생성하여 입력하거나, 회사 시스템 로그인 시 +지문 인식을 사용한다. +Access Control +(접근 통계) +[목표] 접근 통계는 시스템 내에서 사용자가 접근할 수 있는 자원과 권한을 관리하는 메커 +니즘이다. 이는 무단 접근을 방지하고 데이터 기밀성과 무결성을 유지하는 데 중요한 역할 +을 한다. +∙Mandatory Access Control(MAC): 시스템 관리자에 의해 설정된 정책에 따라 접근이 +통제되며, 사용자는 이를 변경할 수 없다. 주로 높은 보안이 요구되는 군사나 정부 기관 +에서 사용한다. +∙Discretionary Access Control(DAC): 데이터 소유자가 누구에게 접근 권한을 부여할 +지 결정하는 방식으로, 유연성이 높다. +∙Role-Based Access Control(RBAC): 사용자의 역할에 따라 접근 권한을 부여하는 +방식으로, 대규모 조직에서 효율적이다. +∙파일 시스템 보안: 특정 사용자나 그룹에 파일 읽기/쓰기 권한을 설정한다. +∙네트워크 보안: 네트워크 장치와 서버에 대한 접근 권한을 역할에 따라 설정한다. +∙데이터베이스 보안: DBMS에서 사용자 역할에 따라 테이블이나 행 단위의 접근 권한을 +관리한다. +∙(예시) 직원이 회사의 기밀 문서에 접근할 때, 해당 직원의 역할에 따라 접근 권한을 설 +정하여 불필요한 접근을 방지한다. +Cryptography +(암호화) +[목표] 암호화는 데이터를 보호하기 위해 정보를 특정 알고리즘을 사용해 암호화하고, 인 +가된 사용자만이 이를 해독할 수 있게 하는 기술이다. +∙양자 암호화(Quantum Cryptography): 양자 역학의 원리를 이용한 암호화 방식으로, +매우 높은 보안성을 제공한다. +∙키 관리(Key Management): 암호화 키의 생성, 배포, 저장, 교체, 폐기를 관리하여 보 +안성을 유지한다. +∙PKI(Public Key Infrastructure): 공개 키 암호화 기술을 사용하여 안전한 통신을 보장 +하고, 디지털서명 등을 통해 데이터의 무결성을 검증한다. +∙디지털서명(Digital Signature): 전자문서나 메시지의 출처를 검증하고, 변경 여부를 확 +인하기 위한 기술을 사용한다. +∙데이터 전송 보안: SSL/TLS를 사용하여 웹 브라우저와 서버 간의 데이터 전송을 암호 +화한다. +∙파일 암호화: 중요한 문서 파일을 암호화하여 무단 접근을 방지한다. +∙전자상거래: 거래 정보와 결제 정보를 암호화하여 안전하게 처리한다. +∙(예시) 이메일 전송 시 PGP를 사용하여 메시지를 암호화하고, 디지털서명을 통해 발신 +자의 신원을 확인한다. + + +![이미지 233-0](images/p0233_img0.png) + + +![이미지 233-1](images/p0233_img1.png) + + +![이미지 233-2](images/p0233_img2.png) + + +![이미지 233-3](images/p0233_img3.png) + + +--- + +2.2 +보안 프레임워크(Security Framework) - 탐지・대응 단계 +탐지・대응 단계에서의 Security Framework 목표: 탐지・대응(Detection) 단계 Framework는 사업자 관 +점에서 AI 시스템의 보안 위협을 탐지하기 위한 전략과 메커니즘을 설명한다. 탐지(Detection) 단계는 +AI 시스템에서 발생할 수 있는 보안 위협을 실시간으로 모니터링하고, 이를 신속하게 식별하여 대응할 +수 있도록 하는 데 중점을 둔다. +●거버넌스(Governance): AI 생명주기 전반에 대한 위험 관리를 수립하고, AI 워크로드에 대한 탐 +지 절차, 매뉴얼, 사고 대응 팀을 배정한다. +●위험 관리(Risk Management): AI 시스템과 서비스에 대한 보안 요구사항을 준수하기 위해 보안 +조치를 적용한다. +부록 그림 8 AI 서비스 제공자 대상 보안 프레임워크(Security Framework) - 탐지․ 예방 단계 + + +![이미지 234-0](images/p0234_img0.png) + + +![이미지 234-1](images/p0234_img1.png) + + +![이미지 234-2](images/p0234_img2.png) + + +![이미지 234-3](images/p0234_img3.png) + + +![이미지 234-4](images/p0234_img4.png) + + +![이미지 234-5](images/p0234_img5.png) + + +--- + +부록 +탐지・대응 단계에 대한 보안 기술(Security Technology) 적용 방안 +●데이터 이상 징후 탐지 +- 데이터 이상징후 탐지(Data Anomaly Detection)는 AI 시스템의 데이터를 정기적으로 점검하 +고, 실시간 모니터링 시스템을 통해 이상 징후를 감지하며, 체크리스트를 활용하여 테스트와 훈 +련 단계를 점검하는 과정이다. 이를 통해 데이터의 무결성, 기밀성, 가용성을 보장하고, AI 시스 +템의 안정성과 신뢰성을 유지할 수 있다. +구 분 +내 용 +추진방안 +Data Vulnerability Check +(데이터 취약성 점검) +AI 시스템의 데이터 +취약성을 점검하여 보안 +취약점을 발견하고 수정하는 +과정 +∙데이터 저장소, 데이터 전송 경로, 데이터 접근 +권한 등을 점검하여 잠재적인 보안 취약점을 식별 +하고, 이를 해결하기 위한 보안 조치를 시행한다. +∙(예시) 데이터베이스의 취약성 스캔, 데이터 암호 +화 여부 점검, 접근 통계 정책 검토 +Real-Time Monitoring +System +(실시간 모니터링 시스템) +실시간으로 AI 시스템의 +데이터를 모니터링하여 이상 +징후를 탐지하는 시스템 +∙실시간 데이터 흐름을 분석하여 비정상적인 활동 +을 탐지하고, 이를 경고하거나 자동으로 대응하는 +시스템을 구축한다. 이러한 모니터링 시스템은 AI +모델의 예측 결과와 실제 데이터 간의 불일치를 +탐지할 수 있다. +∙(예시) 실시간 네트워크 트래픽 모니터링, 사용자 +활동 모니터링, 시스템 로그 분석 +Design to Unit, Entire +Testing and Training +Phased with Checklist +(체크리스트를 활용한 단위, +전체 테스트 및 훈련 단계 +설계) +AI 시스템의 각 구성 요소에 +대해 테스트와 훈련 단계를 +설계하고, 이를 체크리스트를 +통해 검증하는 과정 +∙시스템의 각 구성 요소별로 테스트와 훈련 계획을 +수립하고, 이를 체크리스트 형태로 문서화하여 각 +단계에서 수행해야 할 검증 항목들을 명확히 정의 +한다. 이를 통해 체계적인 검증과 훈련이 이루어 +지도록 한다. +∙(예시) 모델의 학습 데이터 검증, 모델 업데이트 +후 테스트 계획 수립, 시스템 통합 테스트 계획 +수립 및 체크리스트 작성 + + +![이미지 235-0](images/p0235_img0.png) + + +![이미지 235-1](images/p0235_img1.png) + + +![이미지 235-2](images/p0235_img2.png) + + +![이미지 235-3](images/p0235_img3.png) + + +![이미지 235-4](images/p0235_img4.png) + + +--- + +●모델 보안 유지 +- 모델 보안 유지는 AI 모델이 안전하게 동작할 수 있도록 알고리즘 검증, 위험 평가 및 모델 조 +정, 소프트웨어 시각화 도구를 통한 프로세스 자동화 등의 과정을 포함한다. 이를 통해 AI 모델 +의 신뢰성을 높이고, 외부 위협으로부터 보호할 수 있다. +구 분 +내 용 +추진방안 +Verified to Algorithm +Related Machine +Learning (알고리즘 관련 +머신러닝 검증) +AI 모델이 사용하는 +알고리즘이 안전하고 신뢰할 +수 있도록 검증하는 과정 +∙모델의 학습 알고리즘을 검토하고, 보안 표준을 +충족하는지 확인한다. 알고리즘의 동작 방식과 결 +과를 분석하여 예상치 못한 오류나 보안 취약점이 +없는지 점검한다. +∙(예시) 알고리즘 코드 리뷰, 알고리즘의 보안 표준 +준수 여부 검토, 알고리즘의 동작 검증 테스트 +Risk Evaluation and +Detect to Fine-tuned +Model (위험 평가 및 세밀 +조정된 모델 탐지) +AI 모델의 잠재적인 위험을 +평가하고, 이를 미세 +조정하여 보안성을 강화하는 +과정 +∙모델의 예측 결과를 분석하여 잠재적인 위험 요소 +를 식별하고, 이를 기반으로 모델을 조정하여 보 +안성을 향상시킨다. 위험 평가에는 데이터 입력, +모델의 예측 과정, 예측 결과 등이 포함된다. +∙(예시) 모델의 예측 정확도 평가, 예측 결과의 이 +상 탐지, 모델 파라미터 조정 및 튜닝 +Process Automation for +Software Visual Tools +(소프트웨어 시각화 도구를 +위한 프로세스 자동화) +소프트웨어 시각화 도구를 +사용하여 모델의 동작과 보안 +상태를 시각적으로 +모니터링하고, 이를 +자동화하는 과정 +∙모델의 동작 상태와 보안 상태를 실시간으로 모니 +터링할 수 있는 시각화 도구를 구축하고, 이를 통 +해 자동으로 보안 상태를 점검하고 보고하는 시스 +템을 운영한다. +∙(예시) 실시간 보안 대시보드 구축, 모델 동작 모 +니터링 시각화 도구 개발, 보안 상태 자동 보고 +시스템 + + +![이미지 236-0](images/p0236_img0.png) + + +![이미지 236-1](images/p0236_img1.png) + + +![이미지 236-2](images/p0236_img2.png) + + +![이미지 236-3](images/p0236_img3.png) + + +--- + +부록 +●사이버 보안(Cyber Security) 기술 적용 +- 탐지 관점에서 Cyber Security는 다양한 영역에서 보안 위협을 실시간으로 탐지하고 대응하는 +것을 목표로 한다. AI Security Framework 탐지 및 대응 부문에서 Cyber Security는 애플리 +케이션, 네트워크, 시스템, 데이터베이스, 장치 등의 다양한 계층에서 보안을 강화하며, 다중 인 +증, 접근 통제, 암호화와 같은 최신 보안 기술을 적용한다. 이를 통해 AI 시스템이 안전하게 운 +영되고, 데이터 무결성 및 기밀성이 유지되며, 시스템 가용성이 보장될 수 있도록 한다. 또한, 실 +모니터링 및 침해 대응 절차를 통해 잠재적인 위협을 빠르게 식별하고 대응한다. +▸탐지・대응 부문별 목표 및 요구사항은 다음과 같다. +구분 +목표 및 요구사항 +Data Collection +Modules +(데이터 수집 모듈) +[목표] 다양한 데이터를 수집하기 위한 장치와 방법을 추진한다. +∙장비 에이전트 설치, API 연결, 명령 실행, 추출 파일, 수동 등록, PC/서버 보안, +PKI/SSO, NMS, SMS 등을 통해 데이터를 수집한다. +∙(예시) 네트워크 장비에 에이전트를 설치하여 데이터 수집, API를 통해 외부 시스템과 +연결, 서버의 보안 로그를 수집한다. +Data Collection +System +(데이터 수집 시스템) +[목표] 실시간 데이터 수집 및 분석, 이벤트 감지를 담당한다. +∙실시간으로 데이터를 수집하고, 이를 분석하여 보안 이벤트를 감지한다. +∙(예시) 실시간 로그 수집 시스템, 네트워크 트래픽 분석 시스템, 보안 이벤트 모니터링 +시스템 +Data Management +System +(데이터 관리 시스템) +[목표] 데이터베이스 분석, 데이터 평가, 설정 및 변경 이력 관리 등을 포함한 데이터 관 +리 기능을 제공한다. +∙지속적인 DB 분석, 데이터 가치 평가, 설정 변경 이력 관리, 관리 작업 및 데이터 모니터 +링, 정기 보고서 작성, 기능 개선, 로그 분석, 템플릿 생성, 작업 자동화 등을 수행한다. +∙(예시) 데이터베이스 관리 시스템(DBMS), 로그 분석 도구, 자동화된 데이터 모니터링 +및 보고 시스템 +▸핵심 보안기술(Core Security)별 목표 및 요구사항 +구분 +목표 및 요구사항 +Prevention System +(예방 시스템) +[목표] 침해 위험 예측 및 관리, 실시간 침해 및 정보 손상 감지, 대응 시스템 연계 등을 +담당한다. +∙침해 위험을 예측하고 관리하며, 실시간으로 침해 및 정보 손상을 감지하고 대응 시스템 +과 연계한다. +∙(예시) 개인정보 보호 시스템, 실시간 침해 감지 시스템, 침해 대응 연계 시스템 +Detection and +Response +Measures +(탐지 및 대응 조치) +[목표] 실시간 데이터 수집 및 분석, 다양한 침해 상황 및 대응 시나리오 수립을 포함한다. +∙실시간으로 데이터를 수집하고 분석하며, 다양한 침해 상황에 대한 시나리오를 수립하고 +대응 조치를 마련한다. +∙(예시) 침해 대응 시나리오, 실시간 데이터 분석 시스템, 침해 대응 절차 수립 +Error Occurrence +and Reporting +(오류 발생 및 보고) +[목표] 실시간 오류 감지, 오류 발생 및 보고를 담당한다. +∙실시간으로 오류를 감지하고, 발생한 오류를 저장 및 보고한다. +∙(예시) 오류 감지 시스템, 오류 보고 시스템, 실시간 오류 모니터링 도구 + + +![이미지 237-0](images/p0237_img0.png) + + +![이미지 237-1](images/p0237_img1.png) + + +![이미지 237-2](images/p0237_img2.png) + + +![이미지 237-3](images/p0237_img3.png) + + +--- + + + +--- + +집필진 +● +상명대학교 유진호 교수 +● +한신대학교 홍승필 교수 +● +개인정보보호협회 정상호 부장 +● +상명대학교 김민정 교수 +● +과학기술정보통신부 정보보호기획과 +● +한국인터넷진흥원(KISA) +- 황보성 본부장, 이익섭 실장, 김성훈 팀장, 김관영 선임연구원 +자문반 +● +중앙대학교 이기혁 교수 +● +연세대학교 권태경 교수 +● +제이앤시큐리티 김경하 대표 +● +카카오모빌리티 김정민 실장 +인 +쇄 +발 + +행 +발행처 +편집․제작 +2025년 12월 +2025년 12월 +한국인터넷진흥원(KISA, Korea Internet & Security Agency) 전라남도 나주시 진흥길 9 +Tel: 1544-5118 +아람에디트 +<비매품> + +## 1. 본 자료의 저작권은 한국인터넷진흥원에 있으며, 무단 전제를 금합니다. + + +## 2. 본 자료의 전문 PDF 파일은 한국인터넷진흥원 공식 홈페이지에서 무료로 다운받으실 수 있습니다. diff --git "a/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\352\260\200\354\235\264\353\223\234\353\235\274\354\235\270_2.0.md" "b/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\352\260\200\354\235\264\353\223\234\353\235\274\354\235\270_2.0.md" new file mode 100644 index 0000000..50dbe8a --- /dev/null +++ "b/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\352\260\200\354\235\264\353\223\234\353\235\274\354\235\270_2.0.md" @@ -0,0 +1,13040 @@ +# 241203_제로트러스트_가이드라인_2.0.pdf + +> Converted: 2026-04-03 02:57 +> Method: authorkit-juice v2 (caption-matched, size-filtered) + +--- + +제로트러스트 +가이드라인 2.0 +한국제로트러스트포럼 +2024. 12. + +2024. 12. +제로트러스트 가이드라인 2.0 +한국제로트러스트포럼 + +C +O +N +T +E +N +T +S +제로트러스트 +가이드라인 2.0 + +# 제1장 + +제로트러스트 +가이드라인 2.0 개요 + +# 제2장 + +제로트러스트 +보안 모델 및 도입 필요성 + +# 제3장 + +제로트러스트 +성숙도 모델 및 세부역량 + +# 제4장 + +제로트러스트 +도입 준비 방안 + +# 제5장 + +제로트러스트 +도입 수준 분석 +부록 + +| 제1절 | 가이드라인 2.0 발간 배경················································································8 +| 제2절 | 가이드라인 2.0 목적 및 구성···········································································14 +| 제3절 | 가이드라인 2.0 주안점··················································································17 +| 제1절 | 제로트러스트 아키텍처 보안 모델····································································22 +| 제2절 | 기업은 왜 제로트러스트를 도입해야 하는가?······················································28 +| 제1절 | 제로트러스트 성숙도 모델 2.0·········································································35 +| 제2절 | 제로트러스트 성숙도 모델 기반 보안 세부역량····················································51 +| 제3절 | 제로트러스트 성숙도 모델 기반 구현 방안··························································90 +| 제1절 | 제로트러스트 아키텍처 도입 고려사항·····························································106 + +## 제2절 제로트러스트 아키텍처 도입을 위한 조직 내 역할 및 목표 설정·····························120 + +| 제3절 | 제로트러스트 아키텍처 구성 방안··································································128 +| 제4절 | 제로트러스트 아키텍처 도입 준비 예시····························································139 +| 제1절 | 제로트러스트 성숙도 기반 도입 수준 분석························································150 +| 제2절 | 제로트러스트 침투 시험 기반 효과성 분석························································170 +| 제1절 | 용어 및 약어 정의·······················································································184 +| 제2절 | 국내 기업 제로트러스트 인식 수준··································································194 +| 제3절 | 제로트러스트 아키텍처 참조 모델 실증 사례·····················································202 +| 제4절 | 미 연방정부 제로트러스트 도입·실증 현황························································216 +| 제5절 | 성숙도 모델 개념························································································229 +| 제6절 | ISMS-P 인증기준과 제로트러스트 성숙도 모델 연계·········································234 +| 제7절 | 참고 문헌·································································································240 + +최근 급변하는 디지털 전환기에서 AI의 진화, 클라우드 서비스 보편화 등 혁신적 기술들은 계속 +등장하고 새로운 서비스와 가치를 창출하고 있습니다. 하지만, 악의적인 공격자들은 끊임없이 +진화하여 다양한 신기술을 활용한 새로운 공격 방식을 통해 기업을 위협하고 있습니다. 사이버 +위협은 기업의 지속 가능성을 위협하는 중대한 리스크이므로 기업은 사이버보안 강화를 경영 +전략의 핵심 요소로 고려할 필요가 있으며 기업이 보유한 자산을 지키기 위해 방어 전략 및 체계 +역시 진화가 시급한 상황입니다. 이러한 가운데 급부상하고 있는 제로트러스트는 기업의 사이버 +위협 대응의 체질 개선을 위해 필수적으로 도입해야 하는 도전 과제라고 할 수 있습니다. +2023년 7월 과학기술정보통신부와 한국인터넷진흥원, 한국제로트러스트포럼의 공동 작업으로 +‘제로트러스트 가이드라인 1.0’을 발표했습니다. 가이드라인은 우리 기업들의 디지털 업무 +환경 안전 체계를 제로트러스트로 이행하는 긴 여정의 첫 발걸음을 내딛는 과정이었습니다. +실제로 공공·민간의 많은 분야에서 가이드라인이 활용되었고 제로트러스트의 철학을 공유하고 +기본적인 이해를 하는 데 도움이 됐다는 평이 주를 이루었습니다. 하지만, 한편으로 가이드라인이 +제로트러스트 도입을 고려하는 기업의 입장에서 충분한 수준으로 작성을 한 것일까에 대한 걱정도 +일부 있었습니다. 각 분야의 전문가들께서는 가이드라인에 대한 격려의 말씀과 함께 가감 없는 +현실적인 조언을 전해주셨습니다. 이러한 다양한 의견은 제로트러스트 정책 방향성을 결정하는 데 +많은 도움이 되었습니다. +제로트러스트 가이드라인 1.0이 나온 지도 벌써 1년 이상 지났습니다. 그 사이에 글로벌 +제로트러스트 정책을 선도하는 미국은 많은 변화가 있었습니다. 연방정부의 각 기관은 대통령 안보 +각서에 따라 OMB(관리예산실)에 제로트러스트의 도입과 요구 사항을 충실히 이행하였으며, 주 +정부와 지방 행정 기관도 제로트러스트의 도입을 추진하는 등 제로트러스트를 더 이상 이상적인 +개념이 아닌 현실에서 구현하기 위한 실체적인 움직임을 보이고 있습니다. +서문 + +우리나라는 2023년 과학기술정보통신부와 한국인터넷진흥원이 국내 제로트러스트 실증 사업을 +성공적으로 진행한 바 있으며, 2024년 시범사업을 연이어 추진함으로써 다양한 도입 사례 확보를 +통해 제로트러스트 보안 모델 확산을 위해 노력하고 있습니다. 또한 공공, 금융, 군 등에서도 공공 +데이터 활용, 혁신적 AI·클라우드 서비스의 도입, 유연한 근무 방식, 개발 환경 개선 등을 위하여 +획일적인 보안 체계와 규정을 보완 하는 등 우리 사회 각 분야의 제로트러스트 보안 체계 전환의 +공감대는 증가하고 있습니다. +2024년 5월 과학기술정보통신부와 한국인터넷진흥원 및 한국제로트러스트포럼 정책·제도분과 +소속 산학연관 전문가들은 연구반을 구성하여 보안 담당자들의 어려움을 조금이라도 해소할 +수 있는 새로운 가이드라인 발간을 기획했습니다. 연구반에서는 지난 수개월 동안 회의와 토론, +수정을 거쳤으며 그 결과물로 제로트러스트 성숙도 모델을 세부 역량 수준으로 상세히 기술하고, +제로트러스트 도입 과정과 도입 수준 분석 방안을 구체화하는 형태의 가이드라인 2.0이 완성하게 +되었습니다. +가이드라인 2.0은 제로트러스트의 철학이 기업의 문화에 뿌리를 내릴 수 있도록 최고경영자와 +정보보호 최고책임자, 실무자들이 반드시 읽어야 할 항목들을 정의하였으며, 기업의 구성원들이 +적극적으로 제로트러스트 이행 과정에서 각자의 역할을 수행할 수 있는 기반을 제공하고자 합니다. +국내 기업들이 전사적으로 제로트러스트를 도입함으로써 위험을 완화하고 보안 수준을 향상한다면, +각 산업 분야에서 더욱 경쟁력을 갖춘 강력한 기업으로 성장하는 밑거름이 될 수 있을 것으로 +생각합니다. 앞으로 본 가이드라인 2.0이 기업의 제로트러스트 도입 과정에서 도움이 될 수 있기를 +기대하며, 많은 의견과 관심을 부탁드립니다. +한국제로트러스트포럼 + +제로트러스트 +가이드라인 2.0 + + +# 제1장 + + +## 제1절 가이드라인 2.0 발간 배경 + + +## 제2절 가이드라인 2.0 목적 및 구성 + + +## 제3절 가이드라인 2.0 주안점 + +제로트러스트 +가이드라인 2.0 개요 + +8 | 제로트러스트 가이드라인 2.0 + +## 제1절 + +가이드라인 2.0 발간 배경 + +### 1. 제로트러스트 보안 체계 전환의 필요성 + +2010년 미국의 연구기관 포레스터 리서치(Forrester Research)의 수석 애널리스트 존 킨더백 +(John Kindervag)은 제로트러스트라는 기업망 보안에 대한 기존의 경계 보안 체계와는 차별화된 +새로운 탈경계화 기반의 접근 방법론을 제시하였다. +기업1들이 그동안 기업망2에 구축해 왔던 네트워크 보안 모델은 업무 공간에서 발생할 수 있는 +기업 자산 탈취, 파괴, 조작 등 외부의 물리적인 공격에 대응하기 위한 전략과 유사하다고 볼 수 +있다. 일반적인 기업의 업무 공간은 외부와 물리적인 경계가 형성되어 있으며, 단일 혹은 다수의 +출입문을 통해 내·외부자의 진입과 이동을 통제하고 있다. 그러나, 출입 통제 시스템만으로는 모든 +종류의 침투에 대응하기 어려울 뿐 아니라, 정상적인 출입 통제 절차를 지키거나 우회하여 들어온 +침입자가 업무 공간 내부의 기업 자산을 탈취, 파괴하는 모든 행위를 막을 수는 없을 것이다. +따라서, 이를 감시·대처하기 위하여 업무 공간의 각 경계 구간에 별도 출입 통제 장치를 둠으로써 +공격자가 권한이 없는 공간에 접근할 수 없도록 조치하거나(Micro-Segmentation), CCTV를 +설치하여 수상한 행위에 대해 감시하고(Visibility & Analytics), 중요 자산은 금고에 보관함으로써 +추가적인 권한 혹은 인증 수단(Multi-Factor Authentication)을 가지고 있어야 접근할 수 있도록 +1  본 가이드라인에서의 ‘기업’은 일반적인 사기업 및 민간 비영리 조직 등 국내 민간 분야의 중·대규모 조직을 통칭하여 표현한다. 본 +가이드라인은 제로트러스트의 도입에 대한 정보를 제공하는 것이 목적으로, 정부 및 공공, 군 분야 혹은 민간 분야에 속하더라도 금융 혹은 +주요정보통신기반시설 등 별도의 법령 및 규정을 준수해야 하는 기업·기관은 본 가이드라인을 단순 정보 습득을 위하여 활용할 수 있으나 각 +분야별 별도의 제로트러스트 도입 지침 혹은 규정이 나올 경우 그 지침 및 규정을 준수하는 것이 우선임을 밝힌다. +2  본 가이드라인에서의 ‘기업망’은 ‘Enterprise Network’을 번역하여 사용하고 있는 단어로, 일반적으로 ‘Enterprise Network’는 +중·대규모 조직에서 사용자와 기기, 애플리케이션 프로그램 간 연결을 제공하는 IT 인프라 및 네트워크 시스템을 의미한다. 제로트러스트 +보안 철학이 적용되어야 할 중·대규모 조직은 기업뿐만 아니라 민간 비영리 조직 등 역시 해당된다. 따라서, 본 문서 내에서 기업망으로 +표현되어 있다 하더라도 명시적으로 기업에서 운용하는 망을 의미하는 것이 아니라면, 기업뿐만 아니라 민간 영역에서의 비영리 기관 등에서 +운용하는 네트워크 및 정보시스템을 모두 포괄하는 것으로 이해하는 것이 바람직하다. + +조치하기도 한다. 이는 기업 업무 공간 역시 기업 외부와 마찬가지로 더 이상 신뢰할 수 있는 공간이 +아니며, 내부에서도 공격자가 존재할 수 있다는 어쩌면 당연하다고 할 수 있는 기본적인 보안의 +철학이 반영된 결과라고 할 수 있다. +하지만 물리적인 업무 공간과 다르게 네트워크 영역에서는 이러한 접근통제가 지켜지지 않는 +경우가 많다. 경계 기반의 보안 체계를 운영하는 상당수 기업의 내부 인가된 사용자는 네트워크만 +연결되어 있다면 폭넓은 권한을 통해 시스템 리소스에 언제든지 접근(Access)할 수 있는 것이 +현실이다. 이것은 기업의 복잡한 업무 환경의 특성과 구성원의 업무 처리 절차의 신속성, 편의성 +확보 등의 다양한 요인이 작용한다. 이러한 내부자 신뢰를 전제로 하는 접근통제 정책의 문제는 +내부자의 계정 탈취 또는 내부자에 의한 악성 행위에 대한 안전장치가 없다는 것이다. +최근 다양한 디지털 신기술의 등장으로 사이버 공격의 형태가 고도화·은밀화되고 네트워크의 +복잡성 및 관리 포인트가 급격히 증가하는 현 상황은 기업의 운영자와 보안 담당자에게 안전한 +네트워크 운영을 위한 많은 고민과 숙제를 안겨 준다. 제로트러스트는 각 네트워크 경계에 있는 +진입점을 드나드는 패킷을 감시함으로써 공격 여부를 판단하기보다 리소스 보호에 중점을 두고 +사용자 및 접속 기기가 어떤 형태로든 적극적으로 통제하는 개념으로 그동안 보안 분야의 문제를 +해결할 수 있는 새로운 방향성을 제시하고 있다. 따라서 근본적인 보안 체계의 체질 개선을 위해 +제로트러스트 보안 체계 전환은 필연적이라고 할 수 있으며 이는 보안 산업 분야에서 새로운 기회의 +장이 될 수 있을 것이다. + +### 2. 제로트러스트 구현 노력 + +미국은 제로트러스트 도입에 가장 적극적이며 글로벌 정책을 주도하고 있다. 2014년 OPM +(인사관리처)의 대규모 정보 유출 사고를 겪은 이후 미 하원은 약 2년간의 조사와 원인을 분석 +하였고 감독개혁위원회 보고서를 통해 연방정부의 보안 강화를 위한 제로트러스트 도입을 +권고했으며 이후 NIST(국립표준기술연구소)는 2020년 SP 800-207 문서를 통해 제로트러스트 +아키텍처를 최초로 정의했다. 2021년 바이든 행정부 출범 이후 고도화되는 사이버 위협은 기존 +사이버 보안 체계로 대응할 수 없다는 판단하에 2021년 5월, ‘국가 사이버 보안 개선을 위한 +행정 명령(Executive Order 14028 - Improving the Nation’s Cybersecurity)’을 발표하면서 +연방민간행정기관(FCEB) 전체의 제로트러스트 아키텍처의 도입을 명시하고 공식화하였다. 또한, + +10 | 제로트러스트 가이드라인 2.0 +연방정부 차원에서 제로트러스트 구현을 현실화하기 위한 다양한 프로젝트를 진행해 오고 있다. +NIST의 국가사이버보안센터(NCCoE)에서는 주요 보안 기업들과 함께 제로트러스트 아키텍처 구현 +프로젝트를 통한 실증을 진행하고 그 결과로 2023년 7~9월 NIST SP 1800-35 시리즈 문서의 +3rd Preliminary Draft를 발간하였으며 2024년 7월 시리즈 문서를 모두 통합한 4th Preliminary +Draft를 발간하기도 하였다. +미 국방부(DoD)와 국가안보국(NSA)은 2022년 발표했던 제로트러스트 참조 아키텍처 2.0 +및 제로트러스트 전략, 역량 실행 로드맵 이후 이를 뒷받침하는 제로트러스트 핵심 요소 7가지에 +대한 성숙도 문서를 2023년 4월부터 2024년 7월까지 발간하였다. 또한 2024년 제로트러스트 +오버레이 문서를 발간하여, 제로트러스트 핵심 요소, 제로트러스트 구현 활동과 NIST SP 800- +53과의 관련성을 분석하였다. 이는 각 연방 기관들이 제로트러스트 아키텍처를 도입하는 데 +있어 단순히 특정 기능만을 도입하라는 것이 아니라, 기관 성격에 맞는 다양한 가이드 문서들을 +발간함으로써 각 기관이 자율적이면서도 정부의 일관된 원칙하에 제로트러스트 아키텍처를 +구축하고 솔루션을 도입할 수 있는 체계를 구성함과 동시에 사례를 지속 확보·수집하고 있다. +각 연방 기관들은 관리예산실(OMB)이 제시한 일정에 따라 각 기관이 세운 2024년 9월까지의 +계획하에 OMB 각서를 참고하여 제로트러스트 아키텍처를 도입해 왔으며, 최근 Mike Duffy 연방 +CISO 대행은 최근 인터뷰에서 각 기관들의 제로트러스트 구현에 대해 엄청난 진전이 있었음을 +공개했다. 미 국방부 역시 Thunderdome 프로젝트를 통하여 국방부 및 산하 기관 등과 SASE 중심의 +제로트러스트 아키텍처를 도입하여 사용 중이다. 이처럼 미국은 연방정부에서 실질적으로 활용할 +수 있는 많은 가이드 및 관련 문서 발간을 통해 각 기관이 제로트러스트를 도입하는 관점에서 폭 넓은 +시야와 전략을 제공하고 있다. + + +**[표 1-1]** 제로트러스트 관련 미 연방정부 주요 정책 대응 현황 + +시기 +기관 +주요 문서 및 발간 자료 +2023.07~09 +NIST +‘제로트러스트 아키텍처 구현 (SP 1800-35A~E, 3rd Preliminary Draft)’ 발간 +NIST +‘다중 클라우드 환경 상의 클라우드 네이티브 응용에서 접근제어를 위한 제로트러스트 +아키텍처 모델 (SP 800-207A)’ 발간 +DHS +‘제로트러스트 구현 전략’ 발간 +NSA +‘기기 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 +DoD +‘제로트러스트 오버레이 v1.0’ 발간 +GSA +‘제로트러스트 아키텍처 – 구매자 가이드 3.1’ 발간 +NSA +‘네트워크 및 환경 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 +GAO +‘사이버 보안 – 주요 조치를 해결하기 위해서는 행정명령 요구사항 이행이 필수적’ 발간 +NSA +‘데이터 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 +NSA +‘애플리케이션 및 워크로드 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 +NSA +‘가시성 및 분석 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 +CISA 등 +‘네트워크 접근 보안에 대한 최신 접근방식’ 발간 +DoD +‘제로트러스트 오버레이 v1.1’ 발간 +NIST +‘제로트러스트 아키텍처 구현 (SP 1800-35, 4th Preliminary Draft)’ 발간 +NSA +‘자동화 및 통합 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 +GSA +‘제로트러스트 전략 구매자 가이드 1.3 – DoD 제로트러스트 전략’ 발간 +CISA +‘연결된 커뮤니티 가이던스: 상호 연결된 시스템을 보호하기 위한 제로트러스트’ 발간 +OMB +M-22-09 각서에서 요구한 연방 기관 제로트러스트 도입 일정 종료 +제로트러스트 도입을 통한 보안 체계의 전환은 비단 미국 연방정부 시스템에만 국한되지 않는다. +물론 미국처럼 구체적으로 적용 단계는 아니지만 영국, 일본, 싱가포르, 캐나다, 중국 등 글로벌 +각국 정부 역시 제로트러스트 보안 체계 전환의 필요성을 공감하고 가이드·전략 발표 등 다양한 +정책적 움직임을 보이고 있다. + +| 시기 | 기관 | 주요 문서 및 발간 자료 | +| --- | --- | --- | +| 2023.07~09 | NIST | ‘제로트러스트 아키텍처 구현 (SP 1800-35A~E, 3rd Preliminary Draft)’ 발간 | +| 2023.09 | NIST | ‘다중 클라우드 환경 상의 클라우드 네이티브 응용에서 접근제어를 위한 제로트러스트 아키텍처 모델 (SP 800-207A)’ 발간 | +| 2023.10 | DHS | ‘제로트러스트 구현 전략’ 발간 | +| 2023.10 | NSA | ‘기기 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 | +| 2024.02 2024.02 | DoD GSA | ‘제로트러스트 오버레이 v1.0’ 발간 ‘제로트러스트 아키텍처 – 구매자 가이드 3.1’ 발간 | +| 2024.03 | NSA | ‘네트워크 및 환경 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 | +| 2024.04 | GAO | ‘사이버 보안 – 주요 조치를 해결하기 위해서는 행정명령 요구사항 이행이 필수적’ 발간 | +| 2024.04 | NSA | ‘데이터 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 | +| 2024.05 | NSA | ‘애플리케이션 및 워크로드 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 | +| 2024.05 | NSA | ‘가시성 및 분석 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 | +| 2024.06 | CISA 등 | ‘네트워크 접근 보안에 대한 최신 접근방식’ 발간 | +| 2024.06 | DoD | ‘제로트러스트 오버레이 v1.1’ 발간 | +| 2024.07 | NIST | ‘제로트러스트 아키텍처 구현 (SP 1800-35, 4th Preliminary Draft)’ 발간 | +| 2024.07 | NSA | ‘자동화 및 통합 핵심 요소를 통한 제로트러스트 성숙도 개선’ 발간 | +| 2024.08 | GSA | ‘제로트러스트 전략 구매자 가이드 1.3 – DoD 제로트러스트 전략’ 발간 | +| 2024.08 | CISA | ‘연결된 커뮤니티 가이던스: 상호 연결된 시스템을 보호하기 위한 제로트러스트’ 발간 | +| 2024.09 | OMB | M-22-09 각서에서 요구한 연방 기관 제로트러스트 도입 일정 종료 | + + +12 | 제로트러스트 가이드라인 2.0 + +### 3. 가이드라인 2.0 추진 경과 + +2023년 7월 과학기술정보통신부와 한국인터넷진흥원, 한국제로트러스트포럼이 공동으로 +‘제로트러스트 가이드라인 1.0’(이하, 가이드라인 1.0)을 발간한 바 있다. 가이드라인 1.0은 +제로트러스트 아키텍처의 도입을 검토하고 있는 기업들의 보안 전략 수립 책임자 및 실무자에게 +제로트러스트의 기본 개념 및 원리, 보안 모델 등을 정의하고, 도입 절차와 구현 유스케이스를 상위 +수준에서 기술함으로써 각 기업 환경에 적합한 도입 로드맵과 전략을 구성하는 데 도움을 주려는 +목적으로 발간되었다. +가이드라인 집필진은 가이드라인 1.0 발간 이후 정부 부처, 관계 기관, 수많은 기업 담당자로부터 +다양한 피드백을 받았다. 우리나라에서 실질적으로 처음 발행된 제로트러스트에 대한 +가이드라인이다 보니 많은 분야에서 관심을 가지고 다양하게 인용됐으며 제로트러스트에 대한 +이해를 한층 높일 수 있었고 조직 차원에서 제로트러스트 아키텍처를 도입해야 할 필요성에 대한 +인식을 확산하고 공감하는데 좋은 기본서가 됐다는 긍정적인 평이 많았다. +하지만 가이드라인 1.0은 제로트러스트에 대한 개념을 정의하는 등의 상위 수준에서 기술할 수밖에 +없는 태생적 한계가 있었다. 그 이유는 기업마다 망 구조와 보안 아키텍처의 구성이 전부 다르고 +실증 결과를 반영할 수 없었기에 구체적인 도입 사례나 방법론을 담을 수 없었기 때문이다. 따라서 +제로트러스트를 해당 기업망에 실제로 도입하기 위한 의사 결정이나 구체적 계획을 잡기 위해서 도입 +과정을 구체화하는 형태로 문서 수준을 높이고 도입 관점의 전략을 세울 수 있도록 가이드라인의 +구체화를 희망하는 요구가 꾸준히 있어 왔다. +제로트러스트는 ‘절대 신뢰하지 말고, 항상 검증하라(Never Trust, Always Verify)’는 새로운 +보안 철학이자 개념으로, 도입 과정에서 제로트러스트의 원리를 최대한 준수하는 것이 핵심이다. +이 과정에서 특정 보안 기술이나 솔루션을 강제하지 않으며, 기업의 보안 담당자들은 기존 기업망 +구조와 레거시 보안 방식, 보안 목표 등을 고려하여 도입 전략을 수립해야 한다. 하지만 아직까지는 +실 환경에서 제로트러스트 아키텍처 도입·운용 사례가 거의 없어 도입에 대한 효과를 분석하기 +어려운 상황이며, 보안 담당자들은 어떤 기술·솔루션을 선택하고 도입 계획을 수립해야 할지 +어려움을 겪고 있다. 따라서, 본 문서의 집필진은 가이드라인 1.0의 부족한 점을 보완하고 수요기업 +보안 담당자들의 어려움을 고려하여 제로트러스트 도입 과정을 보다 구체화하고 도입 수준을 분석할 + +수 있는 방안을 제시함으로써 각 기업들의 제로트러스트 아키텍처 도입을 가속화하는 데 도움을 +주고자 가이드라인 2.0 발간을 계획하게 되었다. +본 가이드라인 2.0의 발간을 위하여 과학기술정보통신부와 한국인터넷진흥원 및 한국제로트러스트 +포럼 정책·제도분과 소속 산학연관 전문가들을 중심으로 2024년 5월 제로트러스트 가이드라인 +연구반을 구성하였다. 이후 연구반 위원들이 함께 가이드라인 2.0 구성 및 초안 작성을 진행했으며, +2024년 6월 첫 회의를 시작으로 약 5개월간 5차례 공식 회의, 별도 비공식 온라인 회의, 집필진 간 +개별 토론 및 수정 작업 등 열띤 협의 과정을 거쳐 2024년 11월 최종적으로 본 가이드라인 2.0을 +발간하게 되었다. +특히 집필진들이 모여 발간 계획을 논의하는 과정에서 제로트러스트 도입 과정을 구체화하고자 +하는 작성 방향이 단순히 기존 가이드라인 1.0의 업데이트만으로 해결할 수 없다는 공통의 +인식하에, 성숙도 모델의 구체화, 수요기업의 도입 준비 방안 제시, 도입 이후 효과성 분석 방안 제시 +등 기존 가이드라인에 없던 새로운 내용을 반영하는 것에 초점을 맞추었다. 집필 초기부터 이러한 +작성 방향이 수요기업에게 현실적으로 훨씬 도움이 될 것이라는 철학을 집필진들 사이에 공유하고 +있었기 때문에, 가이드라인 1.0을 단순히 업데이트하는 것이 아닌 별도 문서 형태로 가이드라인 +2.0을 작성하게 되었다. +정부는 향후 산업 도메인이나 시나리오별 참조 아키텍처, 제로트러스트 관점이 적용된 보안 통제 +혹은 인증 기준 등 다양한 제로트러스트 가이드 문서를 추가 개발하는 것도 고려하고 있으며, 이에 +관한 많은 의견과 제안이 있기를 기대한다. + +14 | 제로트러스트 가이드라인 2.0 + +## 제2절 + +가이드라인 2.0 목적 및 구성 +앞서 언급한 바와 같이, 기업 소속의 보안 담당자들이 가이드라인 1.0을 참고하여 제로트러스트 +아키텍처를 도입하는 과정에서의 어려움을 조금이라도 해소할 수 있도록, 제로트러스트 도입 시 +반드시 고려해야 할 사항 및 도입 준비 방안, 그리고 도입 이후 제로트러스트 수준 분석 방안을 본 +문서에서 제안하고자 한다. +기업들은 기업의 규모, 적용받는 관련 규정, 보안에 투자할 수 있는 비용, 현재 활용 중인 디지털 +자산과 이용하는 서비스의 종류 등이 모두 다를 수 있다. 기존의 망 분리 조치를 계속 유지해야 +하는가에 대한 고민, 클라우드 서비스의 활용 관점에서의 보안 전략 고민 등이 있을 수 있으며 +랜섬웨어 등 이미 특정 공격에 피해를 입은 경험을 바탕으로 고도화된 위협에 대응할 수 있는 +새로운 보안 구조를 만들고 싶을 수도 있을 것이다. +이러한 다양한 상황과 관점에 비추어, 제로트러스트 보안 구조를 상세히 규정하는 것은 적절하지 +않으며 본 가이드라인의 목적과 맞지 않는다. 본 가이드라인 2.0의 목적은, 보안 담당자들의 +제로트러스트 도입 전략 수립 과정에서 반드시 검토해야 할 사항을 강조함으로써 도입 전략 수립을 +지원하고, 도입 후 보안 수준 및 효과성 분석 방안을 제안함으로써 보안 모델을 어떻게 지속적으로 +개선해 나갈 수 있을지에 대한 방향성 설정에 도움을 주기 위함이다. +상기 목적을 위하여 본 문서는 다음과 같이 구성하였다. +먼저, 2장에서는 제로트러스트 아키텍처에 대해 간략히 소개하고자 한다. 즉, 제로트러스트 +아키텍처 및 용어에 대한 정의, 보안 모델 및 기본 원리와 함께 기업이 제로트러스트 아키텍처를 +도입해야 하는 이유를 다루었다. + +3장은 제로트러스트 성숙도 모델 및 세부역량3을 다루고 있으며, 제로트러스트 도입을 위해 +반드시 고려해야 할 성숙도 모델에 대해 그 의미와 역할 활용 방안에 대해 소개한 후, 구체적인 +성숙도 모델을 제시한다. 가이드라인 1.0에서의 3단계 성숙도에서 ‘초기’ 단계를 추가하고, 각 +단계에서 요구하는 기능을 보완하였으며, 특히 이에 대한 기술 도입을 고려한 보안 세부역량까지 +제시하였다. 이를 통해 각 기업들이 제로트러스트 아키텍처를 설계하려고 할 때 어떤 보안 역량이 +필요한지를 참고할 수 있을 것으로 보인다. +4장은 제로트러스트 도입 준비 방안을 다룬다. 먼저 제로트러스트 아키텍처를 도입할 경우 +반드시 고려해야 하는 여러 관점을 소개하고, 제로트러스트 도입을 위한 조직 구성 및 목표 설정, +기업의 제로트러스트 아키텍처 구성 방안(현재 기업망 분석과 제로트러스트 아키텍처 정의 등)을 +다루었으며, 개발망에 대한 예시를 통하여 이해를 도울 수 있도록 하였다. +5장은 제로트러스트 도입 이후 효과성을 분석하는 데 도움을 줄 수 있는 내용을 포함한다. 즉, +제로트러스트 성숙도를 기반으로 자체 보안 수준을 평가함으로써 보안 성숙도 고도화에 참고할 +수 있는 분석 방안을 제시하였으며, 제로트러스트 아키텍처 도입에 대한 침투 시험을 기반으로 +효과성을 분석할 수 있는 방안도 함께 제시한다. +이 외에 부록에서는 가이드라인 2.0의 이해를 돕기 위하여, 보안 기술 및 솔루션 관련 용어 소개, +국내 기업의 제로트러스트 인식 수준, 2023년 과학기술정보통신부에서 수행한 제로트러스트 실증 +사업을 통한 제로트러스트 아키텍처 참조 모델 사례 제시, 미 연방정부 제로트러스트 도입·실증 +현황(NIST 제로트러스트 아키텍처 구현 프로젝트, 미 국방부 Thunderdome 프로젝트), 성숙도 +모델에 대한 기초 개념, ISMS-P 인증기준과 제로트러스트 성숙도 모델 연계, 참고 문헌 등을 기술 +하였다. +<표 1-2>는 기업 구성원 역할에 따라 반드시 읽기를 권장하는 항목을 정리하였다. +3  부록 1절에서 세부역량을 ‘일련의 작업을 수행하기 위한 수단과 방법의 조합을 통해 원하는 요구사항 혹은 효과를 달성할 수 있는 능력 및 +능력을 바탕으로 구현되는 구체적 기능’으로 정의내리고 있다. 세부역량에 대해서는 소프트웨어·하드웨어 구현까지 고려하여 구체적으로 +정의를 내리는 것이 적절하며, 이렇게 구체적인 정의 과정을 통하여 CISA 등 기존 성숙도 모델의 기능이 추상적으로 정의가 되어있는 한계를 +보완할 수 있다. 본 가이드라인 3장에서는 제로트러스트 기능 정의와 함께 도입·구현 과정에서 참고할 수 있도록 기능의 하위 개념으로 +세부역량을 정의하였다. + +16 | 제로트러스트 가이드라인 2.0 + +**[표 1-2]** 기업 구성원별 필독 항목 + +기업 구성원 +본 가이드라인의 필독 항목 +최고경영자 +(CEO) +‣ 제1장 제로트러스트 가이드라인 2.0 개요························································· 8P +‣ 제2장 제2절 기업은 왜 제로트러스트를 도입해야 하는가?··································· 28P +‣ 제4장 제2절 제로트러스트 아키텍처 도입을 위한 조직 내 역할 및 목표 설정···········120P +정보보호 최고책임자 +(CISO) +‣ 제1장 제로트러스트 가이드라인 2.0 개요·························································· 8P +‣ 제2장 제로트러스트 보안 모델 및 도입 필요성 ················································· 22P +‣ 제3장 제1절 제로트러스트 성숙도 모델 2.0······················································ 35P +‣ 제3장 제2절 제로트러스트 성숙도 모델 기반 보안 세부역량································· 51P +‣ 제4장 제1절 제로트러스트 도입 고려사항·······················································106P +‣ 제4장 제2절 제로트러스트 아키텍처 도입을 위한 조직 내 역할 및 목표 설정···········120P +‣ 제5장 제1절 제로트러스트 성숙도 기반 도입 수준 분석······································150P +정보보호관리자 및 +담당자 +‣ 문서 전반에 걸친 이해 필요 +‣ 제3장 제로트러스트 성숙도 모델 및 세부역량··················································· 35P +‣ 제4장 제로트러스트 도입 준비 방안·······························································106P +‣ 제5장 제로트러스트 도입 수준 분석·······························································150P + + +## 제3절 + +가이드라인 2.0 주안점 +본 가이드라인 2.0은 가이드라인 1.0과 비교하여 다음에 주안점을 두고 작성하였다. +첫째, 제로트러스트 성숙도 모델을 더욱 구체화하였다. 3장에서는 제로트러스트 보안 모델 +도입의 수준을 판단할 수 있는 성숙도 모델을 세분화하여 한국형 성숙도 모델을 정립하고자 +하였으며, 성숙도 모델에서 요구하는 보안 기능 및 세부역량 구체화를 통하여 제로트러스트 도입을 +희망하는 기업의 실질적인 도입 전략 수립을 지원하고자 하였다. 성숙도 모델 2.0에서는 성숙도 +수준 ‘초기’ 단계를 추가하여 가이드라인 1.0의 성숙도 수준인 기존, 향상, 최적화 3단계에서 기존, +초기, 향상, 최적화의 4단계로 늘어나고, 각 단계별 특징을 보다 구체화된 형태로 포함하고 있다. +특히 3.2절에서는 6가지 핵심 요소 및 2가지 교차기능에 대한 52가지 보안 세부역량, 세부역량의 +성숙도 수준별 특징을 정의하여 현재 기업망의 수준을 평가할 때 그리고 실제 제로트러스트 +기술·솔루션을 도입하고자 할 때 고려해야 하는 기능을 최대한 다룰 수 있도록 하였다. +둘째, 제로트러스트 도입 절차를 구체화하였다. 4장에서는 먼저 제로트러스트 아키텍처의 도입 +과정에서의 고려 사항을 정리함으로써 수요기업들이 제로트러스트에 대하여 정확한 개념을 인식할 +수 있도록 돕고 있으며, 제로트러스트를 실제 도입할 기업이 제로트러스트 아키텍처를 도입하기 +위한 조직 내 역할(기업 내 임직원 간 역할과 책임, 각 구성원의 역할) 및 목표 설정 방안을 제안 +하였다. 3절에서는 제로트러스트 아키텍처를 처음 도입하는 기업들이 준비 단계로 진입하기 전부터 +준비 단계에 이르기까지 진행해야 하는 업무를 구체화하여 다루었으며, 4절에서는 도입을 준비하는 +과정에서 어떤 일들을 하게 되는지 예시를 통해 기술하였다. +셋째, 제로트러스트 아키텍처를 도입한 기업이 자사 기업망에 도입한 제로트러스트의 수준 +혹은 효과성을 분석할 수 있는 방안을 제시하였다. 5장에서 성숙도 기반의 체크리스트 수준 분석, +모의 침투시험 효과성 분석과의 연계 등을 통하여 제로트러스트 아키텍처의 도입 수준과 효과를 + +18 | 제로트러스트 가이드라인 2.0 +분석하는 방안을 제시함으로써, 보안 수준의 향상 정도를 도입 기업이 자체적으로 판단할 수 있도록 +하였다. + +**[표 1-3]** 본 문서와 가이드라인 1.0 비교 + +주요 내용 +가이드라인 1.0 +본 문서 작성·추가 사항 +제로트러스트 +성숙도 모델 +‣ 3단계 성숙도 수준 정의 +‣ 기업망 핵심 요소별 20가지 기능 정의 +(교차 기능 제외) +‣ ‘초기’ 단계를 추가한 4단계 성숙도 수준 정의 +‣ 기업망 핵심 요소별 27가지 기능 정의 (교차 기능 +제외) 및 각 단계별 특징 구체화 +‣ 기업망 핵심 요소 및 2가지 교차 기능에 대한 52가지 +보안 세부역량 및 각 세부역량의 성숙도 수준별 +특징 정의 +‣ 성숙도 모델에 기반한 구현 방안 제시 +제로트러스트 +도입 절차 +‣ 제로트러스트 아키텍처 도입 고려사항 정리 +(성숙도 모델 관점 및 기업 내외부 환경 관점) +‣ 총 5단계의 제로트러스트 아키텍처 도입 +단계 제시 (준비 → 계획 → 구현 → 운영 → +피드백 및 개선) +‣ OMB 각서를 참고하여 제로트러스트 구현에 +따르는 핵심 요소별 초기 전략 제시 +‣ 제로트러스트 아키텍처 도입 과정에서의 고려사항 +구체화 (제로트러스트에 대한 명확한 이해 및 기업 내 +인식 제고 등 추가) +‣ 제로트러스트 도입 준비 단계 구체화 (업무 구체적 +기술 및 예시 제시) +‣ 제로트러스트 아키텍처 도입을 위한 조직 내 역할 및 +목표 설정 방안 제시 +기타 +‣ 제로트러스트 구현에 관한 6가지 +유스케이스 및 목표·요구사항, 구현 방안 등 +제시 +‣ 제로트러스트 도입 후 보안 수준 평가 방안 +없음 +‣ 제로트러스트 도입 후 기업망 보안 수준을 평가할 +수 있는 2가지 방안 제시 +(성숙도 기반 도입 수준 분석을 위한 체크리스트, +침투시험 기반 제로트러스트 효과성 분석 방안) +‣ 부록에서 2023년도 제로트러스트 실증 사례 소개 + +| 주요 내용 | 가이드라인 1.0 | 본 문서 작성·추가 사항 | +| --- | --- | --- | +| 제로트러스트 성숙도 모델 | ‣ 3단계 성숙도 수준 정의 ‣ 기 업망 핵심 요소별 20가지 기능 정의 (교차 기능 제외) | ‣ ‘초기’ 단계를 추가한 4단계 성숙도 수준 정의 ‣ 기 업망 핵심 요소별 27가지 기능 정의 (교차 기능 제외) 및 각 단계별 특징 구체화 ‣ 기업망 핵심 요소 및 2가지 교차 기능에 대한 52가지 보안 세부역량 및 각 세부역량의 성숙도 수준별 특징 정의 ‣ 성숙도 모델에 기반한 구현 방안 제시 | +| 제로트러스트 도입 절차 | ‣ 제로트러스트 아키텍처 도입 고려사항 정리 (성숙도 모델 관점 및 기업 내외부 환경 관점) ‣ 총 5단계의 제로트러스트 아키텍처 도입 단계 제시 (준비 → 계획 → 구현 → 운영 → 피드백 및 개선) ‣ OMB 각서를 참고하여 제로트러스트 구현에 따르는 핵심 요소별 초기 전략 제시 | ‣ 제로트러스트 아키텍처 도입 과정에서의 고려사항 구체화 (제로트러스트에 대한 명확한 이해 및 기업 내 인식 제고 등 추가) ‣ 제 로트러스트 도입 준비 단계 구체화 (업무 구체적 기술 및 예시 제시) ‣ 제로트러스트 아키텍처 도입을 위한 조직 내 역할 및 목표 설정 방안 제시 | +| 기타 | ‣ 제 로트러스트 구현에 관한 6가지 유스케이스 및 목표·요구사항, 구현 방안 등 제시 ‣ 제로트러스트 도입 후 보안 수준 평가 방안 없음 | ‣ 제로트러스트 도입 후 기업망 보안 수준을 평가할 수 있는 2가지 방안 제시 (성숙도 기반 도입 수준 분석을 위한 체크리스트, 침투시험 기반 제로트러스트 효과성 분석 방안) ‣ 부록에서 2023년도 제로트러스트 실증 사례 소개 | + + +제로트러스트 +가이드라인 2.0 + + +## 제1절 제로트러스트 아키텍처 보안 모델 + + +## 제2절 기업은 왜 제로트러스트를 도입해야 + +하는가? +제로트러스트 +보안 모델 및 도입 +필요성 + +# 제2장 + + +22 | 제로트러스트 가이드라인 2.0 + +## 제1절 + +제로트러스트 아키텍처 보안 모델 + +### 1. 제로트러스트 개념 모델 + +제로트러스트의 개념은 기존의 경계 기반 보안과 달리, 접근 주체에 대하여 네트워크 혹은 물리적 +위치만으로 신뢰를 부여하지 않는 것으로부터 출발한다. 기업망의 보안 담당자는 접근 주체의 +리소스 접근 과정에서 개별적인 제어를 통해 접근 승인 여부를 결정할 수 있어야 한다. 이 과정에서, +최종적인 접근 결정 및 시행에 대한 역할은 정책결정지점(PDP) 및 정책시행지점(PEP)이 맡게 +된다. +NIST SP 800-207에서는 제로트러스트 관점에서의 접근에 대해 [그림 2-1]과 같은 개념 +모델을 제시한 바 있다. 이 개념 모델은 과거 다양한 형태의 접근제어 모델과 논리적 구조 측면에서 +크게 다르지 않지만, 가장 큰 차이점은 접근 주체의 접근 시도 과정에서 인증 등 신뢰도 평가가 +이루어지기 전에는 비신뢰를 가정한다는 것에 있다. 기업망 차원에서, 보안 책임자는 접근 주체가 +인증되었으며 현재의 접근 요청이 유효함을 보증할 수 있는 경우 해당 주체가 리소스에 접근할 수 +있도록 승인4하여야 한다. + +**[그림 2-1]** 제로트러스트 접근의 개념 모델 + +접근 주체 +PDP/PEP +리소스 +(시스템, 데이터 혹은 +애플리케이션) +비신뢰 +구역 +암묵적 +신뢰 구역 +4  마치 공항에서 승객이 탑승 게이트에 접근하기 위하여 정당한 신분증과 탑승권을 소지하고 있는 상태에서 보안 검색대에서 이를 확인한 +후 탑승 구역으로 보내는 것과 유사한 개념으로 볼 수 있으며, 접근 요청에 대해 승인받은 접근 주체는 해당 리소스에 대한 암묵적 신뢰 +구역(탑승 구역)에 진입(접근)한 것으로 생각할 수 있다. + + +### 2. 제로트러스트 아키텍처 기본 원리 + +제로트러스트 아키텍처를 구성하기에 앞서 중요하게 고려해야 하는 것은, 기업이 제로트러스트 +도입을 통해 달성하고자 하는 최종적인 목표가 기업망 및 내부 리소스에 대한 보호임을 잊지 말아야 +한다는 것이다. 물론 기존 경계기반의 레거시 보안 아키텍처를 통해서도 외부의 대응은 어느 정도 +가능하다. 하지만 제로트러스트가 등장하게 된 이유는 더 이상 경계 기반 보안이 적합하지 않다는 +문제 인식에서 시작됐다. +그동안 경계 기반 보안은 네트워크 상의 경계에서 외부로부터의 공격에 대응하는 다양한 +방법을 고려해왔으나, 재택·원격 근무의 확대, 클라우드 기술의 등장 등으로 접근 주체와 리소스의 +네트워크 상의 위치가 다양해지고 경계가 불분명해짐에 따라 기존 보안 방식만으로는 모든 위협에 +대응하기 쉽지 않게 되었다. 또한, 공격자가 내부 침투에 성공하는 경우 경계에서의 보안 대책은 더 +이상 공격에 대한 대응책이 될 수 없다는 단점이 존재한다. +따라서, 제로트러스트 아키텍처의 기본 원리는 기업망에 구성하려는 보안 아키텍처를 통해 +기업망 및 내부 리소스의 안전한 보호라는 제로트러스트의 목표를 달성하기 위한 방법적 관점에서 +기술되어야 한다. 이러한 기준 하에, 가이드라인 1.0에서는 제로트러스트 아키텍처의 기본 원리를 +<표 2-1>과 같이 정리한 바 있다. + +24 | 제로트러스트 가이드라인 2.0 + +**[표 2-1]** 제로트러스트 아키텍처 기본 원리 + +가. 기본 원칙: 모든 종류의 접근에 대해 신뢰하지 않을 것 (명시적인 신뢰 확인 후 리소스 접근 허용) +- 접근: 기업망에 존재하는 가치 있는 리소스에 대한 모든 접근 시도를 의미 +- 모든 종류의 접근에 대해 기본적으로 접근을 거부함을 의미 +- 일정 수준의 인증 과정을 거친 접근 주체에게만 최소한의 리소스 접근 허용 +- 성공적인 인증 후에도, 지속적인 모니터링을 통하여 신뢰성에 의심이 가는 상황이 발생하는 경우 강화된 추가 인증을 +받거나 현재의 접근 세션에 대한 강제 종료 필요 +나. 일관되고 중앙집중적인 정책 관리 및 접근제어 결정, 실행 필요 +- 접근 정책을 관리하는 지점(주로 PDP)이 분산되어 있는 경우의 문제: 일관된 정책 수립이 어렵고, 새로운 접근 주체 및 +리소스 추가 시 일관된 정책 적용이 어려움 +- 정책을 실행하는 지점(PDP 및 PEP 혹은 일부 기능)은 분산되어 있을 수 있으나, 가급적이면 중앙집중적인 정책 관리에 +의한 접근 여부 결정이 필요 +예) 특정 직원 퇴사 시, 해당 직원 ID를 통한 내부 리소스 접근이 불가능하도록 반영되어야 함 +다. 사용자, 기기에 대한 관리 및 강력한 인증 +- 내부 사용자 및 기기에 대한 목록화를 기반으로, 강력한 사용자 인증 및 기기 상태 관리 필요 +- 등록된 기기가 아니면 기업망 혹은 특정 리소스 접근을 원천 봉쇄하거나 접근 가능 리소스를 정확히 분류하고 중요 +리소스에 대한 접근이 불가능하도록 정책 결정 필요 +- 등록되지 않은 기기 혹은 보안 상태가 명확히 확인되지 않은 경우 추가 인증 요구도 가능 +라. 리소스 분류 및 관리를 통한 세밀한 접근제어 (최소 권한 부여) +- 접근 주체 및 리소스의 종류 및 다양한 요인에 따르는 세밀한 접근제어 필수 +- 공격자가 기업망 내부 특정 기기 혹은 시스템 침투에 성공했더라도 횡적 이동을 통한 추가 피해를 최소화할 수 있도록, +사용자 및 기기에 필요한 최소한의 권한 부여 +마. 논리 경계 생성 및 세션 단위 접근 허용, 통신 보호 기술 적용 +- 세밀한 접근제어는 필연적으로 리소스 간 경계를 요구할 수 있으나, 정책을 실시간으로 반영하고 세분화하기 위해서는 +논리적으로 경계를 설정할 수 있는 방안 필요 +- 또한, 리소스별로 긴 시간의 접속을 허용하지 않고 세션 단위 접근만을 허용 필요 +- 논리적 경계뿐만 아니라 통신상에서 데이터의 기밀성 및 무결성을 보호할 수 있는 기술 필요  +바. 모든 상태에 대한 모니터링, 로그 및 이를 통한 신뢰성 지속적 검증, 제어 +- 모든 상태: 신뢰도 평가에 관련 있는, 접근 주체, 리소스, 기업망 등의 모든 관련 정보를 의미 +- 상태 정보는 기업망에서 반드시 모니터링되어 현재의 상태를 수치적으로 시각화하여 파악할 수 있어야 하며, 상세한 +분석을 통한 신뢰도 평가 및 감사가 가능해야 함 + + +### 3. 제로트러스트 아키텍처 보안 모델 + +앞서 언급한 제로트러스트의 개념 모델 및 아키텍처 기본 원리를 고려하면, 제로트러스트 +아키텍처는 접근 주체의 리소스에 대한 접근을 신중하게 다루어야 한다. 가이드라인 1.0에서는 +기업망이 제로트러스트 아키텍처를 실현하기 위하여 접근 주체가 리소스에 접근하는 것에 +대한 허용·거부 정책을 다루어야 하며 가장 중요한 핵심 기능은 접근제어 정책임을 언급한 후 +제로트러스트 아키텍처 보안 모델 및 논리 구성 요소를 표현한 바 있다. 본 문서에서의 정책정보지점 +(PIP)5은 가이드라인 1.0의 보안 모델에서 정책결정지점으로 입력되는 신뢰도 판단용 데이터를 +제공하는 역할을 담당하고 있다. 이를 반영한 결과는 [그림 2-2]와 같다. + +**[그림 2-2]** 제로트러스트 아키텍처 보안 모델 및 논리 구성 요소 + +접근 주체 +시스템 +정책 엔진(PE) +정책 관리자(PA) +규제·내부규정 +정책결정지점(PDP) +리소스 +제어 영역(Control Plane) +정책정보지점(PIP) +신뢰도 판단용 데이터 +데이터 영역(Data Plane) +비신뢰 +신뢰 +정책시행지점 +(PEP) +위협 인텔리전스 +(C-TAS 등) +정책정보지점(PIP) +신뢰도 판단용 데이터 +데이터 접근 정책 +정책정보지점(PIP) +신뢰도 판단용 데이터 +ID 관리 시스템 +정책정보지점(PIP) +보안정보 및 이벤트 +(SIEM) +정책정보지점(PIP) +신뢰도 판단용 데이터 +네트워크·시스템 +행위로그 +정책정보지점(PIP) +신뢰도 판단용 데이터 +제로트러스트 아키텍처 보안 모델을 구성하는 논리 구성 요소인 정책결정지점 (정책 엔진 및 정책 +관리자), 정책시행지점, 정책정보지점의 기능과 역할에 대해서는 다음 페이지를 참고할 수 있으며, +<표 2-2>에서 요약하여 설명하고 있다. +5  가이드라인 1.0 2.1.2절의 라. 항목에서는 해당 논리 구성 요소를 접근 결정을 위해 사용하는 데이터 입력 요소로 표현하고 있으나 본 +문서에서는 정책정보지점이라고 정의한다. + +26 | 제로트러스트 가이드라인 2.0 +참고 +제로트러스트 아키텍처 보안 모델의 논리 구성 요소 +정책 엔진 (PE) +정책 엔진은 접근 주체가 리소스에 접근할 수 있을지를 최종적으로 결정한다. 정책 엔진은 신뢰도 평가 알고리즘에 대한 +입력으로 현재 기업망에 대한 정책과 그 외 다른 정보를 활용하며, 이를 바탕으로 접근을 허가하거나 거부, 혹은 현재 +허가되어 있는 상태의 접근을 취소할 수 있다. 정책 엔진은 접근에 대한 승인을 담당하며, 정책 관리자는 결정을 실행한다. +정책 관리자 (PA) +정책 관리자는 정책 엔진과 함께 PDP를 구성하며, PEP에 명령하여 접근 주체와 리소스 사이의 통신 경로를 생성하거나 +폐쇄한다. 정책 관리자는 세션에 대한 인증·인가 토큰을 생성함으로써 접근 주체가 기업 리소스에 접근하는데 사용하도록 +한다. 정책 관리자는 세션을 최종적으로 허락하거나 거부하는 결정을 정책 엔진에 의존한다. +세션이 인가되면 정책 관리자는 PEP에게 세션 시작을 허용하며, 세션이 거부되거나 취소되는 경우 PEP에게 해당 연결을 +끊으라고 신호를 보낸다. 구현에 따라서 정책 엔진과 정책 관리자는 하나의 서비스에서 동작할 수 있으나, 본 문서에서는 두 +논리적인 기능을 분리하여 설명한다. 정책 관리자는 통신 경로를 생성할 때 PEP와 통신하며, 이는 제어 영역에서 이루어지는 +것으로 본다. +정책시행지점 (PEP) +PEP는 접근 주체와 기업 리소스 사이를 연결하고 모니터링하며 최종적으로 연결을 종료하는 논리 구성 요소이다. 이는 정책 +관리자와 통신하며, 접근 요청을 포워딩하고 업데이트된 정책을 수신한다. +제로트러스트 아키텍처 관점에서 PEP는 하나의 논리 구성 요소이지만, 2개의 다른 구성 요소로 구분될 수 있다. 예를 들어, +노트북에 설치된 에이전트에 해당하는 클라이언트 기능과 리소스 앞에서 접근을 제어하는 게이트웨이 기능으로 분리되어 +동작할 수도 있으며, 통신 경로 상에서 문지기 역할을 하는 하나의 포탈 구성 요소로 동작하는 것도 가능하다. PEP를 +넘어서면, 기업 리소스를 제공하는 신뢰 영역이 된다. +정책정보지점 (PIP) +PIP는 제로트러스트 아키텍처를 실행하는 기업이 접근 결정을 위해 정책 엔진의 입력 혹은 정책 규칙으로 활용할 수 +있는 정보를 생성·전달하는 논리 구성 요소로, 기업 내부에서 운영하는 시스템과, 기업이 운영하거나 제어하지 않는 외부 +시스템 모두 가능하다. 다음과 같은 시스템 등이 포함될 수 있으나, 이 외에도 신뢰도 판단에 도움이 될 수 있는 정보를 +생성하는 시스템이라면 모두 정책정보지점으로 볼 수 있다. +‣ 규제·내부 규정(Industry Compliance) +‣ 데이터 접근 정책(Data Access Policies) +‣ 보안 정보 및 이벤트(SIEM) 시스템 +‣ 위협 인텔리전스(Threat Intelligence) +‣ ID 관리 시스템(ID Management System) +‣ 네트워크·시스템 행위 로그(Network and System Activity Logs) + +PIP가 제공할 수 있는 신뢰도 판단용 데이터의 예시로 6가지(규제·내부 규정, 데이터 접근 +정책, 보안 정보 및 이벤트, 위협 인텔리전스, ID 관리 시스템, 네트워크·시스템 행위 로그 등)를 +소개하고 있으나 신뢰도 판단용 데이터를 제공하는 PIP는 이 외에도 다양하게 존재할 수 있으며, +반드시 기업망 내에서 존재하지 않을 수도 있다. 신뢰도 판단에 도움이 될 수 있는 성격의 데이터로 +기업망에서 수집해서 사용할 수 있다면 종류와 관계없이 신뢰도 판단용 데이터로 활용할 수 있으며, +그 정보를 PDP에 제공하는 논리 개체는 그 위치 및 정보의 종류와 관계없이 모두 PIP로 본다. + +**[표 2-2]** 제로트러스트 아키텍처 논리 구성 요소 + +구분 +구성 요소 +역할 +핵심 구성 요소 +정책 +결정 +지점 +정책 엔진 +‣ 다양한 입력 요소를 검토하여 접근 주체의 리소스에 대한 접근 허용 +여부를 최종 결정 +‣ 신뢰도 평가 알고리즘을 활용하며, 이 알고리즘에 대한 입력으로 +기업망에 대한 정책 및 그 외 다른 정보를 활용 +정책 관리자 +‣ 주체와 리소스 간 통신 경로 설정 및 종료 관리 +※ 세션 별 인증·인가 토큰 또는 크리덴셜 생성 +‣ 정책시행지점에게 명령하여 접근 주체와 리소스 사이의 통신 경로를 +생성하거나 폐쇄 +‣ 세션을 최종적으로 허락하거나 거부하는 결정을 정책 엔진에 의존 +정책시행지점 +‣ 주체에 할당된 정책 실행, 연결 활성화, 모니터링, 종료 +‣ 정책 관리자와 통신하며, 접근 요청을 포워딩하고 업데이트된 정책을 +수신 +신뢰도 판단용 +데이터 제공자 +(접근 결정에 +활용) +정책 +정보 +지점 +규제·내부 규정 +‣ 법적 규제 정보 및 이를 위한 기업 내부 규정을 준수하는지 확인 +‣ 기업이 규제 준수를 위해 개발한 모든 정책 규칙 포함 +데이터 접근 정책 +‣ 기업 리소스 접근에 대한 속성, 규칙, 정책 등 +보안 정보 및 +이벤트 +‣ 차후 분석용 보안 정보 수집, 정책 개선 및 기업 자산 공격 경고에 활용 +위협 인텔리전스 +‣ 내·외부에서 발생하는 보안 위협 정보 +※ 새로운 공격 기법, 악성코드, 취약점, SW 결함 등 +ID 관리 시스템 +‣ 기업 사용자 계정 및 식별 기록 생성, 저장, 관리 +(접근 주체의 정보, 특징 등 포함 가능) +네트워크· 시스템 +행위 로그 +‣ 각종 로그 및 로그 분석 결과(공격 가능성 등) + +| 구분 | 구성 요소 | | 역할 | +| --- | --- | --- | --- | +| 핵심 구성 요소 | 정책 결정 지점 | 정책 엔진 | ‣ 다양한 입력 요소를 검토하여 접근 주체의 리소스에 대한 접근 허용 여부를 최종 결정 ‣ 신뢰도 평가 알고리즘을 활용하며, 이 알고리즘에 대한 입력으로 기업망에 대한 정책 및 그 외 다른 정보를 활용 | +| | | 정책 관리자 | ‣ 주체와 리소스 간 통신 경로 설정 및 종료 관리 ※ 세션 별 인증·인가 토큰 또는 크리덴셜 생성 ‣ 정책시행지점에게 명령하여 접근 주체와 리소스 사이의 통신 경로를 생성하거나 폐쇄 ‣ 세션을 최종적으로 허락하거나 거부하는 결정을 정책 엔진에 의존 | +| | 정책시행지점 | | ‣ 주체에 할당된 정책 실행, 연결 활성화, 모니터링, 종료 ‣ 정책 관리자와 통신하며, 접근 요청을 포워딩하고 업데이트된 정책을 수신 | +| 신뢰도 판단용 데이터 제공자 (접근 결정에 활용) | 정책 정보 지점 | 규제·내부 규정 | ‣ 법적 규제 정보 및 이를 위한 기업 내부 규정을 준수하는지 확인 ‣ 기업이 규제 준수를 위해 개발한 모든 정책 규칙 포함 | +| | | 데이터 접근 정책 | ‣ 기업 리소스 접근에 대한 속성, 규칙, 정책 등 | +| | | 보안 정보 및 이벤트 | ‣ 차후 분석용 보안 정보 수집, 정책 개선 및 기업 자산 공격 경고에 활용 | +| | | 위협 인텔리전스 | ‣ 내·외부에서 발생하는 보안 위협 정보 ※ 새로운 공격 기법, 악성코드, 취약점, SW 결함 등 | +| | | ID 관리 시스템 | ‣ 기업 사용자 계정 및 식별 기록 생성, 저장, 관리 (접근 주체의 정보, 특징 등 포함 가능) | +| | | 네트워크· 시스템 행위 로그 | ‣ 각종 로그 및 로그 분석 결과(공격 가능성 등) | + + +28 | 제로트러스트 가이드라인 2.0 + +## 제2절 + +기업은 왜 제로트러스트를 +도입해야 하는가? +기업에서 제로트러스트 도입을 시도하는 것은 필연적으로 시간과 인적 자원, 비용을 수반한다. +CEO는 보안 기술의 세부 사항 외에 경영 관점에서 도입 효과와 가치를 고려할 수 있으므로, 기존 +보안 아키텍처를 제로트러스트 아키텍처로 전환하는 이유에 대한 명확한 이해와 근거가 필요할 수 +있다. 따라서, CISO 혹은 보안담당자(이하, CISO)는 제로트러스트와 비즈니스 목표의 관계, 비용 +절감 효과, 위험 관리 등을 중점적으로 소개함으로써 제로트러스트 도입시 기업 전체에 미치는 +긍정적인 영향을 설명하는 것이 바람직하다. + +### 1. 제로트러스트와 비즈니스 목표의 관계 + +기업이 새로운 비즈니스 모델을 지속적으로 발굴하는 것은 기업의 생존과 직결되는 문제로 볼 +수 있다. 만약 기업 내·외 규정과 요구사항을 준수하고 보안 위협에 대응하기 위하여 기존에 구축한 +보안 아키텍처가 비즈니스 목표를 설정하고 새로운 비즈니스 모델을 발굴하는 데 장애가 된다면, +이를 극복할 수 있는 방안이 필요하다. +예를 들어, 어떤 기업에서 기업망 보안을 위한 조치로, 해외에서는 등록된 IP 외에 기업망 내부에 +접근할 수 없도록 조치하였다면, 해외 지사가 이전·확장한 경우 혹은 해외 협력 기업에 파견된 +직원이 기업망 내부 리소스에 접근하는데 있어 상당한 어려움이 있을 것이다. 그 외에도 접근권한을 +세밀하게 적용하지 못하는 보안 아키텍처로 인하여 혁신적인 외부 서비스(SaaS, AI 등)를 내부 업무 +환경에 적용하지 못하는 사례가 있을 수 있다. +이러한 경우, 보안성은 기존 보안 환경보다 높은 수준을 달성하면서도 새로운 서비스 개발에 +유연한 제로트러스트 아키텍처를 설계·도입함으로써 해당 문제를 해결할 수 있을 것이다. 또한, + +지속적으로 바뀌는 IT 환경, 즉 원격·재택 근무의 증가, 클라우드로의 전환, 협력사와의 협업 환경 +변화, 비인간개체의 증가 등의 상황에서 제로트러스트는 안전한 환경을 제공하면서도 비즈니스 +연속성을 보장할 수 있다는 점을 강조할 수 있다. + +### 2. 비용 절감 효과 및 ROI(투자 대비 수익) + +기업망에 제로트러스트 아키텍처를 도입하는 경우 초기 도입에 일정한 투자가 필요하며 +지속적으로 투자 및 관리 비용을 요구하게 된다. 따라서, 초기 도입 과정에서 요구하는 투자에 대한 +효과가 충분한지를 분석하는 것이 바람직할 것이다. +아직은 제로트러스트 아키텍처를 본격적으로 도입 중인 기업이 많다고 보기는 어려우나, 앞서 +언급한 바와 같이 레거시 보안 기술과 제로트러스트 보안 기술은 명확한 구분되는 것이 아니기 +때문에 이미 제로트러스트의 초보적인 철학이 담겨 있을 수 있다. 이 경우 이미 제로트러스트 +성숙도는 다소 낮지만 제로트러스트의 도입이 일부 이루진 것으로 볼 수 있으며, 기업의 중요한 +디지털 자산을 보호하고 위험을 완화함으로써 장기적으로 보안 사건 대응 비용, 데이터 유출 방지 +비용 등을 절감할 수 있으며 제로트러스트가 사이버 공격에 대한 방어 능력을 향상시킴으로써, +비즈니스 운영의 연속성을 보장할 수 있다. +또한 장기적으로 보면 보안 아키텍처를 운용하는 관점에서 기존보다 효율적인 자원 활용이 +가능하다. 제로트러스트를 통해 세분화된 보안 정책과 자동화된 인증 프로세스를 도입하면, +인적 자원과 보안 관리 비용을 줄일 수 있으며 새로운 접근 주체와 리소스가 지속적으로 +업데이트되더라도 자동화된 접근제어 정책을 부여함으로써 IT와 보안 인프라에서 불필요한 +복잡성을 줄이고 효율성을 증대시킬 수 있다. + +### 3. 현재 보안 환경의 취약점 및 한계 개선을 통한 위험 관리 + +미 연방정부의 모든 기관들이 제로트러스트 아텍처를 도입할 경우 그 과정에서 대규모 예산이 +소요될 것으로 예상됨에도 불구하고 추진한 것은 연방 기관들이 갖추고 있었던 기존 보안 환경의 +취약점과 한계를 인식했기 때문이다. 2014년부터 2015년까지 약 1년여에 걸쳐 이루어진 연방 +인사관리처의 개인정보 유출 사고가 대표적으로, 인사관리처에 접속할 수 있었던 협력 업체의 자격 + +30 | 제로트러스트 가이드라인 2.0 +증명 권한이 해커들에게 유출 당한 것으로 공격자의 내부망 접속에 대한 감시가 잘 이루어지지 +않음을 이용한 공격 사례이다. 그뿐만 아니라 미 연방정부는 2020년 벌어진 솔라윈즈 공급망 +공격 사례를 통하여, 서드파티 및 협력사가 공급한 소프트웨어를 통해 내부 시스템이 공격당할 +수 있으므로 이를 일방적으로 신뢰하지 말고 지속적인 검증을 통하여 탐지·대응 능력을 강화하는 +형태의 정교한 보안 체계가 필요함을 깨달았다. +전통적인 경계 기반 보안 모델이 내부자 위협에 취약한 반면, 이러한 공격을 완화하기 위해 +등장한 제로트러스트 아키텍처는 정상 사용자의 자격 증명 권한이 유출되었다 하더라도 현재 +접근에 대한 컨텍스트(접속 IP 주소, 접속 시간, 요청 리소스 정보 등)를 분석하여 동적으로 접근 +허용 여부를 판단하고 비정상적 접근을 차단함으로써 개인정보의 불법 유출을 피할 수 있었을 +것이다. 이러한 방식으로 제로트러스트가 기존의 보안 체계의 한계를 보완하는 데 중요한 역할을 +함으로써 위험을 줄일 수 있음을 고려하면 기업이 제로트러스트 아키텍처를 도입할 충분한 가치가 +있다고 판단할 수 있다. +이처럼 경계 기반 보안 환경에서 지속 발생하는 보안 사고를 사례로 들면 기업에게 제로트러스트가 +왜 필요한지 그리고 제로트러스트 아키텍처 도입을 통하여 해당 보안 사고에 어떻게 대응할 수 +있을지를 구체적인 데이터와 경험을 기반으로 소개할 수 있다. +예를 들어, 미국에서 벌어진 체인지 헬스케어에 대한 랜섬웨어 공격은 의료 관련 기업의 사이버 +보안 공격 대응 능력에 관하여 참고할 수 있는 좋은 사례가 될 수 있다. 모회사인 UHG의 사태 +수습 및 매출 손실로 인한 비용이 10억 달러로 추정될 뿐만 아니라 소규모 의료 서비스 제공업체 +및 약국 중 일부는 파산에 가까운 상황까지 이르게 한 이 공격 사례에서, (불법적으로 설치된) +특정 애플리케이션이 민감한 의료 데이터를 대량으로 읽거나 수정하는 경우에 대해 제로트러스트 +아키텍처를 바탕으로 최소 권한 부여, 평소와 다른 패턴의 데이터 접근·수정 시 접근 차단, 추가 +인증 요구 및 관리자 보고 등이 이루어졌다면 공격을 차단하거나 피해를 최소화하는 것이 가능했을 +것으로 보인다. 이러한 사례는 의료 기업들에게 제로트러스트 아키텍처의 도입 필요성을 충분히 +인식시켜줄 수 있을 것이다. +특히 제로트러스트를 도입한 기업이 사이버 공격을 성공적으로 방어한 사례가 있다면, 이러한 +사례 소개를 통하여 앞으로 지속적으로 발생할 수 있는 고도화된 공격에 대한 위험을 낮추는 효과가 + +있음을 설득력 있게 강조할 수 있다. + +### 4. IT 환경 변화에 대한 적응력 + +제로트러스트는 단순히 보안을 강화하는 것에만 초점을 맞추기보다는, 기업이 더 빠르고 민첩하게 +변화할 수 있는 환경을 만들어줄 수 있다. 예를 들어, 새로운 기술 도입을 도입하는 과정에서 위험을 +최소화하면서도 비즈니스 확장에 대한 유연성을 제공하는 것이 가능하다. 예를 들어, 암호화 +관련하여 암호 민첩성을 강조하는 것도 하나의 예로 볼 수 있다. +제로트러스트는 기업이 법적 규제나 규정 준수와 관련한 요구사항을 충족하는 데 도움을 줄 수 +있는데, 이는 제로트러스트에서 세밀한 접근제어와 지속적 모니터링을 강조하고 있기 때문으로 볼 +수 있다. 제로트러스트 아키텍처가 도입되면 누가 언제 어떤 자원에 접근했는지를 명확히 기록하고 +추적할 수 있으며, 이는 많은 법적 규제 및 보안 통제에서의 요구 사항을 준수하는 데 유리할 뿐만 +아니라, 규정 준수 및 감사 지원을 위한 데이터 접근 기록을 유지하고 로그 등 필요한 데이터를 +빠르게 제공할 수 있는 능력을 가진다. 이러한 제로트러스트 아키텍처의 특징은 개인정보보호와 +데이터 보안 규제들이 강화되고 있는 상황에서 필요한 기능을 강력하게 지원함으로써 규제에 대한 +적응력과 함께 기업의 신뢰성을 높일 수 있다. + +### 5. 기업 이미지 개선 + +기업은 제로트러스트 아키텍처를 도입함으로써 사이버 공격으로부터 중요한 고객 정보 및 +기업의 디지털 자산을 강력하게 보호할 수 있을 뿐만 아니라, 이를 통하여 고객 신뢰를 강화하고 +브랜드 이미지를 개선할 수 있다는 장점이 있다. 즉, 안전한 환경에서 비즈니스를 운영하면 사이버 +위협으로부터 발생할 수 있는 위험을 완화함으로써 사업 안정성 측면에서 경쟁 우위를 확보할 수 +있다. 그 뿐만 아니라 제로트러스트는 디지털 혁신을 지원하는 핵심 보안 인프라로, 클라우드 전환, +원격 근무 지원, 빠른 기술 도입 등을 가능하게 함으로써, 기업이 디지털 전환 목표를 수립했거나 +추진 중인 경우, 이 목표를 더욱 안전하고 빠르게 달성할 수 있는 역할을 담당할 것이다. + +제로트러스트 +가이드라인 2.0 + + +## 제1절 제로트러스트 성숙도 모델 2.0 + + +## 제2절 제로트러스트 성숙도 모델 기반 보안 + +세부역량 + +## 제3절 제로트러스트 성숙도 모델 기반 구현 + +방안 +제로트러스트 +성숙도 모델 및 +세부역량 + +# 제3장 + + +34 | 제로트러스트 가이드라인 2.0 +3장에서는 제로트러스트 성숙도 모델 및 세부역량에 대해서 기술한다. 제로트러스트 +성숙도모델은 기업이 자사 기업망의 제로트러스트 수준을 평가하고 더 높은 성숙도를 갖는 +제로트러스트 아키텍처로 진화하는데 참조할 수 있는 기준으로서 그 가치가 있다. 또한 +제로트러스트 기능과 세부역량을 정의함으로써 각 기업들이 제로트러스트 아키텍처를 구현하는 데 +있어 어떤 보안 기능들이 필요한지 분석할 때 참고할 수 있는 수단을 제공하고자 한다. +이를 위해, 1절에서는 제로트러스트 성숙도 모델의 의미와 역할, 제로트러스트 도입 절차의 세부 +단계별 성숙도 모델 활용 방안, 기업망 핵심 요소 등을 소개하였으며, 가이드라인 1.0에서 정의한 +성숙도 모델 이후 발간된 제로트러스트 성숙도 모델 관련 문서 및 여러 전문가 의견을 참조하여, +‘초기’ 단계의 성숙도 수준을 추가하고 각 단계별 제로트러스트 기능을 구체화한 제로트러스트 +성숙도 모델 2.0을 제안한다. +2절은 앞서 정의한 제로트러스트 성숙도 모델 2.0 및 보안 기능의 모호성과 추상성을 극복하고 +구현까지 고려하여 구체적인 정의를 포함하는 제로트러스트 세부역량 및 각 성숙도 수준을 담았다. +여기에서 정의한 제로트러스트 역량은 성숙도 모델을 더욱 구체화함으로써, 기업 내 정보보호 +담당자들이 제로트러스트 원칙을 더욱 정확하게 이해하고, 이를 성공적으로 구현하는 데 큰 도움이 +될 것이다. +마지막으로 3절에서는 제로트러스트를 기업망에 적용하는 관점에서 세부역량과 성숙도를 +바탕으로 기업망에 제로트러스트를 적용·구현하는 방법에 대해 기술하고 있다. 제로트러스트 +철학을 구현하는 방법은 한 가지로 규정할 수 없는 만큼 이 방법이 절대적일 수는 없으며 각 기업은 +상황에 따라 다르게 설정하겠지만, 성숙도 모델을 구현 과정에 활용하는 방안으로서 참고할 수 +있다. + + +## 제1절 + +제로트러스트 성숙도 모델 2.0 +성숙도 모델은 일반적으로 특정 프로세스·기술에 대한 조직의 수준 분석 및 측정을 위한 도구로서 +지금과 유사한 형태의 성숙도 모델은 1979년 소개되었다. 현재 성숙도 모델은 소프트웨어 +엔지니어링, 보안 등 다양한 분야에서 활용되고 있으며 조직의 현재 역량 및 기술 수준을 평가하고 +더 성숙도가 높은 조직으로 진화하는데 참조할 수 있는 기준을 제시한다. 하지만 아무래도 +성숙도라는 단어가 일상적으로 사용하지 않는 용어다 보니 다소 낯설게 느껴질 수 있다. +제로트러스트 분야의 성숙도 모델은 미국의 CISA를 비롯하여 다양한 기업에서 제로트러스트 +제시한 바 있으며 성숙도 모델에 대한 개념과 보안 성숙도 모델에 대해서 더 상세히 알고 싶은 +독자를 위하여 부록의 5절에서 성숙도 모델의 개념을 상세하게 소개하고 있으니 참고 바란다. +본 절에서는 제로트러스트 성숙도 2.0 모델을 정의하기에 앞서, 성숙도 모델의 의미와 역할, +그리고 도입 과정에서 제로트러스트 성숙도 모델을 활용하는 방안을 소개하고자 한다. + +### 1. 제로트러스트 성숙도 모델의 의미와 역할 + +기업이 보안 아키텍처를 구성하는 궁극적인 목적은 내부 디지털 자산에 대한 공격 가능성 및 +위험을 완화·관리함으로써 조직의 자산을 보호하고자 하는 것이다. 문제는 해당 조직의 보안 수준을 +어떻게 평가할 수 있는가이며, 특히 보안 아키텍처를 구축하는 데 있어 비용을 투자하였거나 투자할 +예정인 기업 내 경영진(예, 최고 경영자, 재무 담당자 등)은 조직 내 기업망에 대한 현재 혹은 향후 +보안 수준을 정량적으로 평가하고 싶을 것이다. +제로트러스트 아키텍처를 도입하여 구현하고자 하는 기업에서는 다양한 조직의 요구 사항과 +함께, 현재 구현·활용 중인 보안 기술 및 솔루션이 모두 다르므로, 이를 바탕으로 제로트러스트 +아키텍처를 도입하는 방법과 방향성이 상이할 수 있다. 이러한 특징은, 실제로 구현을 하고자 하는 + +36 | 제로트러스트 가이드라인 2.0 +기업 보안 담당자들에게 제로트러스트에 대한 구체적인 이해와 도입 계획을 수립하는 데 있어 +어려움을 줄 것이다. 또한 수립 계획을 바탕으로 도입 비용을 산정하고, 비용을 승인할 권한이 있는 +경영진 혹은 재무 관련 책임자를 설득하는 것 역시 쉽지 않을 것이다. +기존에 제시된 보안 성숙도 모델들은 기업들의 현재 보안 성숙도 수준을 평가할 수 있는 방법론을 +제시함으로써, 조직 내 보안 역량을 객관적으로 평가할 수 있는 수단을 제공한다. 제로트러스트 +관점에서도 이와 유사한 방식으로 보안 성숙도 수준을 평가할 수 있는 모델이 존재한다면, +제로트러스트 아키텍처를 도입·구축하는 데 있어 왜 이 아키텍처를 도입해야 하는지, 도입 계획은 +어떻게 수립해야 하는지 등에 대한 객관적 근거로 활용할 수 있을 것이다. +2021년 바이든 대통령의 ‘국가 사이버보안 개선에 관한 행정 명령(EO-14028)’에 따라 +제로트러스트를 도입해야 하는 연방시민행정기관(FCEB)들 역시 제로트러스트 도입 과정에서 +어려움을 겪을 수 있었기 때문에, CISA는 같은 해 기관들을 돕기 위하여 기업망 내 5가지 핵심 +요소에 대해 3가지 성숙도 수준을 갖는 ‘제로트러스트 성숙도 모델 v1.0’을 공개한 바 있으며, +2023년에는 성숙도 수준을 4단계로 확장하고 각 수준별 보안 기능에 대해 더욱 구체화한 바 있다. +2022년 바이든 대통령의 국가안보각서(NSM-08)에 따라 제로트러스트를 도입하는 국방부 및 +정보 공동체 시스템 등에 적용할 수 있도록, NSA는 2023년 4월부터 2024년 7월까지 기업망 핵심 +요소 7가지의 성숙도 개선에 관한 문서를 각각 발간하였다. 이 문서들은 2023년 4월에 발간한 +‘사용자(User)’ 핵심 요소를 제외하면, 국방부 제로트러스트 전략 문서에서 정의하고 있는 핵심 +요소별 보안 역량(Capability)에 대한 성숙도 수준을 제안하였다. +따라서, 본 가이드라인 2.0에서도 제로트러스트를 도입하는 국내 기업이 해당 조직의 현재 +제로트러스트 수준을 파악하고 도입 계획을 수립할 수 있도록, 3.2절에서 가이드라인 1.0의 +제로트러스트 성숙도 모델을 개선하여 제시하고자 한다. 본 가이드라인의 제로트러스트 성숙도 +모델이 조직 내 제로트러스트 아키텍처를 구성하는데 있어 절대적인 답안을 제공하는 것은 +아니지만, 현재 제로트러스트 수준을 평가(Assessment)하고 구현·도입하는 데 도움을 줄 수 있을 +것이다. + + +### 2. 제로트러스트 도입 절차의 세부 단계별 성숙도 모델 활용 방안 + +제로트러스트를 도입하는 국내 기업은 제로트러스트 성숙도 모델을 활용할 수 있다. 가이드라인 +1.0에서 제로트러스트 도입 절차를 ‘준비→계획→구현→운영→피드백 및 개선’의 총 5가지 +세부 단계로 구성되는 순환 주기로 소개한 바 있으며, 이 과정을 통해 제로트러스트 아키텍처를 +운영하면서 사용자들로부터의 피드백 및 개선 요구를 통하여 더 높은 수준의 제로트러스트 성숙도 +목표를 세우거나, 혹은 차후 계획을 재검토할 수 있다고 언급하였다. +여기에서는 각 세부 단계에서 앞에서 언급한 성숙도 모델을 어떻게 활용할 수 있는지 [그림 +3-1]에서 표현하고, 이를 구체적으로 설명한다. + +**[그림 3-1]** 제로트러스트 도입 절차의 세부 단계별 성숙도 모델 활용 방안 + +가. 준비 (현재수준평가) + +### 1. 기업망의 현재 보안 + +상태 및 수준 평가 + +### 2. 개선이 필요한 영역 + +식별 + +### 3. 위험도, 업무 중요도, + +예산 등을 중심으로 +갭(Gap)분석 + +### 1. 개선 영역 우선 순위 + +설정 + +### 2. 보안 목표 설정 및 + +성숙도 모델에 맞는 +보안 정책 및 절차 +반영 + +### 3. 보안 정책 표준화䞻 + +문서화 + +### 1. 제로트러스트 솔루션 + +후보 목록화 + +### 2. 비즈니스 절차 및 + +유스케이스에 따르는 +솔루션 도입 + +### 3. 성숙도 모델의 기술적 + +인프라 참조 + +### 1. 성숙도 모델을 기반 + +으로 운영 모니터링 +및 보안 수준 측정 + +### 2. 성숙도 모델 기반 + +운영 중 보안 강화 +방안 점검 + +### 1. 기업 내 이해관계자의 피드백을 분석하여 운영 및 보안 성숙도 개선안 작성 + + +### 2. 제로트러스트 성숙도에 대한 지속적인 교육 및 인식 제고 활동 + + +### 3. 현재 제로트러스트 성숙도 수준 재평가 + +나. 계획 (설계) +다. 구현 (솔루션 도입) +라. 운영 +마. 피드백 및 개선 + +38 | 제로트러스트 가이드라인 2.0 +가. 준비 단계 – 현재 보안 상태 평가 및 갭 분석에 활용 +준비 단계에서는 현재 기업의 상황과 현재 수준을 정확히 파악하고 평가하는 것을 목표로 한다. +제로트러스트의 도입은 단 한 번의 절차로 완료되지 않기 때문에, 이 단계는 제로트러스트를 처음 +도입할 때의 가장 첫 단계일 수도 있고 이미 도입하여 운영 중인 기업망에 대해 더 높은 수준의 +성숙도를 갖는 제로트러스트 아키텍처로 진화하기 위한 준비 단계일 수도 있다. +여기에서 제로트러스트 성숙도 모델은 다음과 같이 활용할 수 있다. 제로트러스트 성숙도 모델을 +통하여 기업망의 현재 보안 상태를 평가하고 갭(Gap) 분석을 할 수 있다. 현재 기업망에 도입하여 +운영 중인 전체 보안 아키텍처 및 솔루션들에 대하여 제로트러스트 성숙도 모델의 기준에 맞춰 +수준을 평가하고 개선이 필요한 영역을 식별하는 것이 가능하다. 갭 분석 과정에서 우선순위를 +설정하기 위하여, 갭 분석 결과에 대해 위험도, 업무 중요도, 예산 등을 중심으로 정리할 수 있을 +것이다. +나. 계획(설계) 단계 – 우선순위 설정 및 정책·절차 수립에 활용 +계획 단계에서는 기업망 차원에서 제로트러스트를 도입하기 위한 계획을 수립하고 설계한다. +어떤 비즈니스 프로세스 혹은 핵심 요소에 제로트러스트를 도입하는 것이 좋은지를 판단하고, +선정된 비즈니스 프로세스에 대해서는 중요성과 관련 접근 주체 및 리소스 현황을 파악하여, 이를 +고려한 정책을 수립하여야 한다. +준비 단계에서 제로트러스트 성숙도 모델을 통하여 현재 보안 상태를 평가하고 갭 분석을 +진행하였다면, 그 결과를 바탕으로 어떤 부분을 먼저 개선할지에 대한 우선순위를 설정해야 한다. +앞서 위험도, 업무 중요도, 예산 등을 중심으로 갭 분석이 이루어졌다면, 조직 내외부 관련자 +및 전문가와 함께 우선순위를 어떤 기준으로 정리할지를 결정하여야 한다. 예를 들어, 비용이 +많이 들더라도 위험을 최소화하기 위하여 민감한 데이터 보호가 우선시 될 수 있으며, 현재 조직 +차원에서의 통합 인증 시스템이 구축되어 있지 않아 식별자 핵심 요소에 대한 성숙도가 낮다면 이를 +더욱 시급하게 생각할 수도 있을 것이다. +우선순위 설정이 되었다면 이를 현 단계에서의 보안 목표로 설정하고 그에 맞춰 계획 단계를 +진행하게 되는데, 여기에서 제로트러스트 성숙도 모델의 각 단계에 맞는 보안 정책과 절차를 + +파악하여 반영하게 된다. 이러한 정책이 조직 전반에 걸쳐 일관되게 적용될 수 있도록 구현해야 +하는 보안 기능 및 그에 따르는 활동 계획, 구현 책임자, 도입 솔루션 후보에 대한 평가 등을 표준화· +문서화된 형태로 정리하여 구현 단계로 진입할 수 있어야 한다. +다. 구현(솔루션 도입) 단계 – 비즈니스 프로세스 및 유스케이스에 적합한 솔루션 도입에 활용 +구현 단계에서는 제로트러스트 도입 대상이 되는 비즈니스 프로세스 후보가 구성된 상태에서, +제로트러스트 솔루션 후보에 대한 목록을 작성하고 비즈니스 프로세스 및 유스케이스에 따라 +적합한 솔루션을 선택하여 도입한다. +제로트러스트 성숙도 모델은 일반적으로 필요한 보안 기능과 역량 등 기술적 인프라를 같이 +기술하고 있다. 따라서, 도입 절차에서 기업망에 적합한 솔루션을 선택할 때 어떤 보안 기능과 +역량을 활용할 수 있는지를 미리 참조할 수 있으며, 특히 현재 도입 절차의 목표에 어울리지 않는 +보안 인프라를 도입하는 것을 막을 수 있다. 특히 접근 주체와 리소스에만 집중을 하면, 기업망이 +복잡해짐에 따라 안전한 운영 관점에서 매우 중요한 시각화 및 분석, 자동화 및 통합 등에 대한 보안 +기능 도입에 소홀해질 가능성이 있다. 그러나 제로트러스트 성숙도 모델을 충분히 활용하는 경우, +이러한 영역까지 상세히 기술되어 있어 제로트러스트 도입과 아키텍처 구현에 큰 도움이 될 것이다. +라. 운영 단계 – 현재 운영 중인 보안 솔루션의 실제 성숙도 분석 및 재평가 +운영 단계에서는 제로트러스트 솔루션이 도입되어, 특정 비즈니스 프로세스에 대한 제로트러스트 +아키텍처 보안 모델이 구현되어 있는 상태에서 기업 관리자가 해당 솔루션을 기반으로 정책을 +설정하고 시행하게 된다. 따라서, 현재 실행 중인 솔루션들에 대해서 보안 기능과 역량이 잘 +구현되어 있는지 성숙도 모델을 기반으로 운영 과정을 모니터링함으로써 보안 수준을 측정할 수 +있다. 보안 기능이 구현되어 있지만 운영 상에서 활용하기 어려울 수도 있고, 혹은 기능을 활용 +중이기는 하나 더 높은 성숙도로 이동하기 어려운 형태로 구현되어 있을 수도 있다. +운영 중에는 실제로 해당 보안 솔루션의 보안 기능과 역량이 잘 구현되어 있는지, 처음 달성하고자 +했던 성숙도 목표와 일치하는지를 정확히 판단할 수 있다. 따라서, 성숙도 모델을 기반으로 모니터링 +및 보안 수준 측정을 통해 보안 솔루션의 실제 성숙도 및 운영 관련 정보를 획득하여 보안 강화 +방안을 점검 후, 개선 필요성을 검토할 수 있도록 피드백 및 개선 단계에 제공한다. + +40 | 제로트러스트 가이드라인 2.0 +마. 피드백 및 개선 단계 – 인식 제고 및 성숙도 수준 재평가 +피드백 및 개선 단계에서는 기업 관리자의 판단하에 기업망에서 제로트러스트 아키텍처 및 이를 +구성하는 보안 솔루션들이 원활하게 작동되고 있다는 가정하에, 기업 내 임직원 및 이해관계자들이 +운영 개선을 위한 피드백을 제공하고 관리자가 이를 분석하여 운영 및 보안 성숙도 개선안을 만들게 +된다. +이러한 피드백이 원활하게 이루어지기 위해서는, 임직원 및 이해관계자들이 제로트러스트의 +원칙 및 기업 내 도입 전략과 계획에 대해 명확하게 이해하고 있어야 한다. 현재의 제로트러스트 +성숙도를 고려한 피드백이 이루어질 수 있도록 이에 대한 지속적인 교육과 인식 제고 활동이 +필요하다고 볼 수 있다. +또한, 현재 운영 중인 제로트러스트 아키텍처에 대한 성숙도가 처음 목표한 수준과 동일한지, +또한 구현된 보안 기능이 처음 달성하고자 했던 목표 수준과 일치하는지를 운영 단계에서 분석하여 +보안 솔루션의 실제 성숙도 및 운영 관련 정보를 획득할 수 있다. 이 정보를 기반으로 현재의 성숙도 +모델에 대한 개선이 필요하지 않은지 분석함으로써 현재 제로트러스트 성숙도 수준을 재평가하고 +다음 도입 주기로 진입하는데 활용할 수 있을 것이다. + +### 3. 제로트러스트 아키텍처 적용을 위한 기업망 핵심 요소 + +제로트러스트는 앞서 정의한 바와 같이 적극적인 신뢰도 평가 없이 접근을 허용하지 않는 보안 +모델 및 아이디어의 집합을 의미하고 있으나, 이러한 정의는 제로트러스트 아키텍처를 자사의 +기업망에 도입하기 위하여 목표 및 도입 전략·계획을 수립해야 하는 기업에게는 매우 추상적으로 +느껴질 수 있다. +기업망 핵심 요소는 제로트러스트 관점에서 기업망의 보안성을 개선하기 위하여 무엇을 보호해야 +하는가에 대한 답으로 볼 수 있다. 조금 더 살펴보면, 기업망에서 가장 중요한 보호의 대상은 +데이터(Data)로 볼 수 있다. 식별자(Identity)로 구분되는 사용자는 기기(Device)를 이용하여 기업 +네트워크(Network) 상에서 애플리케이션 및 워크로드(Application & Workload)를 통해 데이터에 +접근하게 되며, 데이터는 중요 데이터 서버 등 시스템(System)에 위치할 수 있다. 이들은 모두 +사이버 공격 대상이 될 수 있어, 제로트러스트 관점에서 기업망의 핵심 요소로 볼 수 있다. + + +**[표 3-1]** 제로트러스트 아키텍처 적용을 위한 기업망 핵심 요소 + +기업망 핵심 요소 +설명 +식별자·신원 +(Identity) +‣ 사람, 비인간개체(서비스 혹은 IoT 기기 등)를 고유하게 설명할 수 있는 속성 혹은 속성의 +집합을 의미 +‣ 기업은 식별자를 가진 사람 혹은 기기가 리소스에 접근하고자 하면 강한 인증 방식을 사용하여 +해당 식별자를 검증하고 세밀한 접근제어 규칙에 따라 적절한 시간 내에 해당 리소스에 접근을 +보장 +기기 및 엔드포인트 +(Device/Endpoint) +‣ IoT 기기, 휴대폰, 노트북, PC, 서버 등을 포함하여 기업망에 연결하여 데이터를 주고받는 모든 +하드웨어 기기 +‣ 일반적으로 기업 소유이나 BYOD와 같은 개인 기기일 수도 있음 +‣ 기업은 기기에 대한 목록을 유지하여야 하며, MDM 등의 기술을 활용하여 리소스에 +접근하려는 기기에 대한 신뢰도를 평가하는 등 허가받지 않았거나 신뢰할 수 없는 기기가 +리소스에 접근하는 것을 막을 수 있어야 함 +네트워크 +(Network) +‣ 기업망의 유무선 네트워크, 클라우드 접속을 포함하는 인터넷 등 데이터를 전송하기 위해 +사용되는 모든 형태의 통신 매체를 포함 +‣ 기업은 네트워크 환경을 작은 단위로 나누어 접근을 제어하고, 내외부 데이터 흐름을 관리할 +수 있어야 하며, 특히 공격자가 접근해서는 안 되는 네트워크로 이동하는 것을 방지할 수 +있어야 함 +시스템 +(System) +‣ 중요 애플리케이션을 구동하거나 중요 데이터를 저장하고 관리하는 서버들을 포함하며, +온프레미스(On-Premise) 및 클라우드에 구축 운용 중인 모든 서버 시스템들이 여기에 해당 +‣ 시스템의 주요 파일의 읽기 및 쓰기, 주요 명령어 사용 등 시스템 리소스 접근에 관한 세밀하고 +상세한 접근제어 필요 +‣ 매 세션마다 다중인증(MFA) 등 강력한 신원 확인 및 위험 관리 절차를 포함하여야 함 +애플리케이션 및 +워크로드 +(Application & +Workload) +‣ 기업망 관리 시스템, 프로그램, 온프레미스 및 클라우드 환경에서 실행되는 서비스를 포함하며, +데이터를 주고받기 위한 인터페이스 제공 +‣ 기업에서는 애플리케이션 계층 및 컨테이너, 가상 머신 등을 보호·관리하고 데이터의 안전한 +전달을 보장할 수 있어야 함 +데이터 +(Data) +‣ 가장 최우선으로 보호해야 할 리소스 +‣ 기업은 데이터 목록을 작성, 분류 및 레이블 지정하고, 필요에 따라 암호화 기법을 적용하여 +저장 혹은 전송 중인 데이터를 보호하며 허가받지 않은 데이터 유출에 대응하기 위한 기법을 +적용하여야 함 +또한, 상기 핵심 요소들에 대해 보안성과 신뢰도에 대한 판단을 강화하고, 적절하고 세밀한 +접근제어가 이루어지도록 제로트러스트 아키텍처를 구현하는 기업망에서 2가지 교차 기능이 모든 +핵심 요소에 걸쳐 이루어져야 한다. + +| 기업망 핵심 요소 | 설명 | +| --- | --- | +| 식별자·신원 (Identity) | ‣ 사람, 비인간개체(서비스 혹은 IoT 기기 등)를 고유하게 설명할 수 있는 속성 혹은 속성의 집합을 의미 ‣ 기업은 식별자를 가진 사람 혹은 기기가 리소스에 접근하고자 하면 강한 인증 방식을 사용하여 해당 식별자를 검증하고 세밀한 접근제어 규칙에 따라 적절한 시간 내에 해당 리소스에 접근을 보장 | +| 기기 및 엔드포인트 (Device/Endpoint) | ‣ IoT 기기, 휴대폰, 노트북, PC, 서버 등을 포함하여 기업망에 연결하여 데이터를 주고받는 모든 하드웨어 기기 ‣ 일반적으로 기업 소유이나 BYOD와 같은 개인 기기일 수도 있음 ‣ 기업은 기기에 대한 목록을 유지하여야 하며, MDM 등의 기술을 활용하여 리소스에 접근하려는 기기에 대한 신뢰도를 평가하는 등 허가받지 않았거나 신뢰할 수 없는 기기가 리소스에 접근하는 것을 막을 수 있어야 함 | +| 네트워크 (Network) | ‣ 기업망의 유무선 네트워크, 클라우드 접속을 포함하는 인터넷 등 데이터를 전송하기 위해 사용되는 모든 형태의 통신 매체를 포함 ‣ 기업은 네트워크 환경을 작은 단위로 나누어 접근을 제어하고, 내외부 데이터 흐름을 관리할 수 있어야 하며, 특히 공격자가 접근해서는 안 되는 네트워크로 이동하는 것을 방지할 수 있어야 함 | +| 시스템 (System) | ‣ 중요 애플리케이션을 구동하거나 중요 데이터를 저장하고 관리하는 서버들을 포함하며, 온프레미스(On-Premise) 및 클라우드에 구축 운용 중인 모든 서버 시스템들이 여기에 해당 ‣ 시스템의 주요 파일의 읽기 및 쓰기, 주요 명령어 사용 등 시스템 리소스 접근에 관한 세밀하고 상세한 접근제어 필요 ‣ 매 세션마다 다중인증(MFA) 등 강력한 신원 확인 및 위험 관리 절차를 포함하여야 함 | +| 애플리케이션 및 워크로드 (Application & Workload) | ‣ 기업망 관리 시스템, 프로그램, 온프레미스 및 클라우드 환경에서 실행되는 서비스를 포함하며, 데이터를 주고받기 위한 인터페이스 제공 ‣ 기업에서는 애플리케이션 계층 및 컨테이너, 가상 머신 등을 보호·관리하고 데이터의 안전한 전달을 보장할 수 있어야 함 | +| 데이터 (Data) | ‣ 가장 최우선으로 보호해야 할 리소스 ‣ 기업은 데이터 목록을 작성, 분류 및 레이블 지정하고, 필요에 따라 암호화 기법을 적용하여 저장 혹은 전송 중인 데이터를 보호하며 허가받지 않은 데이터 유출에 대응하기 위한 기법을 적용하여야 함 | + + +42 | 제로트러스트 가이드라인 2.0 + +**[표 3-2]** 기업망 핵심 요소에 대한 교차 기능 + +기업망 핵심 요소에 +대한 교차 기능 +설명 +가시성 및 분석 +(Visibility & +Analytics) +‣ 사용자 혹은 기기, 애플리케이션 및 워크로드의 상태 확인 등 중요하고 상황에 맞는 세부 정보를 +이용하여 분석하고 가시성을 제공하는 교차 기능 +‣ 기업은 기업망 내부에서 벌어지는 비정상 행위에 대한 탐지를 개선하고, 보안 정책 및 접근제어 +결정을 동적으로 적용하는 데 활용 +‣ 네트워크 트래픽을 패킷 단위로 직접 캡처하고 분석함으로써, 네트워크를 통해 진입하는 모든 +종류의 위협을 관찰하고 지능화된 방어 기법을 적용하여야 함 +자동화 및 통합 +(Automation & +Orchestration) +‣ 기존에 수동적으로 적용하던 보안 프로세스를 개선하여 자동화된 정책 기반 보안 프로세스를 +적용함으로써 보다 신속한 보안 조치를 가능하게 하는 교차 기능 +‣ SIEM 및 기타 자동화된 보안 솔루션 통합, SOAR 적용 등의 방법을 통하여, 기업망의 모든 +환경에서 정의된 프로세스와 일관된 보안 정책을 시행함으로써 자동화된 통합 보안 대응 가능 +제로트러스트 성숙도 모델은 각 기업들이 제로트러스트 아키텍처를 도입하는 관점에서 반드시 +고려해야 한다. 본 가이드라인에서 정의하는 제로트러스트 성숙도 모델 2.0은 가이드라인 1.0 이후 +발간된 다양한 제로트러스트 관련 문서 및 여러 전문가 논의를 통하여 기업망 핵심 요소들에 대한 +제로트러스트 성숙도 모델을 업데이트하고 보안 기능을 구체화하는 내용을 포함한다. + +### 4. 제로트러스트 성숙도 모델 2.0 + +제로트러스트 성숙도 모델은 조직의 보안 시스템이 “신뢰하지 말고 항상 검증하라”는 +제로트러스트 원칙에 얼마나 성숙하게 대응하고 있는지를 측정하는 도구이다. 성숙도 모델은 +조직이 현재 위치한 성숙도 수준을 파악하고, 제로트러스트 전략을 더욱 강화하는 데 필요한 +기술적, 조직적, 절차적 변화를 제시한다. +성숙도 모델은 조직의 현재 성숙도를 이해하고, 이 성숙도를 높이기 위해 필요한 구체적인 행동 +계획을 수립하는 데 사용된다. 이를 통해 조직은 보안 위협에 더 잘 대응할 수 있는 능력을 갖추고, +변화하는 사이버 위협 환경에 효과적으로 적응할 수 있다. 조직은 이 모델을 통해 제로트러스트 +보안 전략의 구축 및 운영에 대한 체계적인 로드맵을 마련할 수 있으며, 이를 통해 지속적인 개선과 +최적화가 가능하다. +제로트러스트 성숙도 모델은 제로트러스트 보안 전략을 조직에 맞게 단계적으로 구현하고, 그 +성과를 측정하며, 점진적으로 성숙도를 높이는 데 중점을 둔 프레임워크라고 할 수 있다. 또한, + +| 기업망 핵심 요소에 대한 교차 기능 | 설명 | +| --- | --- | +| 가시성 및 분석 (Visibility & Analytics) | ‣ 사용자 혹은 기기, 애플리케이션 및 워크로드의 상태 확인 등 중요하고 상황에 맞는 세부 정보를 이용하여 분석하고 가시성을 제공하는 교차 기능 ‣ 기업은 기업망 내부에서 벌어지는 비정상 행위에 대한 탐지를 개선하고, 보안 정책 및 접근제어 결정을 동적으로 적용하는 데 활용 ‣ 네트워크 트래픽을 패킷 단위로 직접 캡처하고 분석함으로써, 네트워크를 통해 진입하는 모든 종류의 위협을 관찰하고 지능화된 방어 기법을 적용하여야 함 | +| 자동화 및 통합 (Automation & Orchestration) | ‣ 기존에 수동적으로 적용하던 보안 프로세스를 개선하여 자동화된 정책 기반 보안 프로세스를 적용함으로써 보다 신속한 보안 조치를 가능하게 하는 교차 기능 ‣ SIEM 및 기타 자동화된 보안 솔루션 통합, SOAR 적용 등의 방법을 통하여, 기업망의 모든 환경에서 정의된 프로세스와 일관된 보안 정책을 시행함으로써 자동화된 통합 보안 대응 가능 | + + +기본적인 수준에서 출발하여 최적의 보안 수준을 추구하는 장기적인 여정이다. 신뢰 없는 환경을 +가정하고 모든 접근과 트래픽을 검증하는 보안 철학으로 점차 나아가는 과정이다. +제로트러스트 성숙도는 기업망의 전반적인 보안성을 높이기 위하여 한 번의 작업 혹은 +단기간에 최적화 수준을 달성할 수 없으며, 수차례 도입 및 피드백 등을 거쳐 점진적인 변화를 +통해 최적화 수준에 다가가는 모양으로 발전하게 된다. 제로트러스트 성숙도 관점에서 핵심 +요소별 기능 및 각 성숙도 수준별 의미에 대해서는 가이드라인 1.0에 상세하게 설명한 바 있다. +본 가이드라인 2.0에서는 2023년 4월 발표한 CISA 성숙도 모델 2.0, 그리고 2023년부터 +2024년까지 핵심 요소별로 발표한 NSA 성숙도 개선 문서 등을 참고하여 성숙도 수준을 <표 +3-3>과 같이 4단계로 재정의하였으며, 4단계로 재구성한 제로트러스트 성숙도 모델 2.0 및 각 +핵심 요소에 대한 성숙도 수준별 특징을 [그림 3-2]와 같이 정의한다. + +**[표 3-3]** 제로트러스트 성숙도 모델 2.0의 성숙도 수준 4단계 + + +### 1. 기존 단계 + +(정적, 경계 기반, 수동) + +### 2. 초기 단계6 + +(일부 자동화) + +### 3. 향상 단계 + +(자동화, 중앙집중적, 통합) + +### 4. 최적화 단계 + +(동적, 완전 자동화) +‣ 주요 구성 요소들이 +수동으로 설정되며, 정적인 +보안 정책으로 인해 +유연하지 못하게 정책시행 +‣ 경계 기반 보안 위주의 +보안 아키텍처 구성 +‣ 수동으로 사고에 대응하며, +시스템에 대한 가시성이 +제한적 +‣ 일부 프로세스가 +자동화되며, 핵심 요소별 +연계가 일부 이루어짐 +‣ 속성 할당과 생명주기 +관리가 부분적으로 +자동화되며, 내부 시스템에 +대한 기본적인 모니터링 +제공 +‣ 프로비저닝 이후 최소 권한 +변경에 대응 가능 +‣ 자동화의 범위가 확장되고, +중앙 집중 제어가 강화되는 +단계 +‣ 중앙 집중식으로 통합된 +가시성 제공 +‣ 중앙 집중식 ID 관리를 +통해 핵심 요소 간 +상호작용에 기반한 정책 +시행 +‣ 자산 및 리소스에 대한 +속성이 완전히 자동으로 +할당되며, 동적인 정책이 +적용되는 단계 +‣ 자동화된 트리거에 기반한 +동적 정책 생성 +‣ 자산에 대해 동적 최소 +권한 기반 접근 허용 +‣ 구성요소 간 상호운용성을 +위한 개방형 표준 준수 +이행 및 강화 +여기에서 반드시 기억해야 하는 사항은, 제로트러스트 성숙도 모델이 제로트러스트 아키텍처를 +도입하는 데 있어서 절대적인 답안지로 오해하여 모든 기능을 최적화 수준으로 달성하고자 할 +필요는 없다는 것이다. 본 가이드라인에서 제시하는 성숙도 모델을 참조하여, 기업의 규모와 분야, +접근 주체, 리소스 종류, 네트워크 아키텍처, 대상 규정 등에 따라 성숙도 모델을 재정의할 수 +6  가이드라인 1.0에서 없었던 단계로, 본 가이드라인 2.0에서 새로 추가되었음 + +| 1. 기존 단계 (정적, 경계 기반, 수동) | 2. 초기 단계6 (일부 자동화) | 3. 향상 단계 (자동화, 중앙집중적, 통합) | 4. 최적화 단계 (동적, 완전 자동화) | +| --- | --- | --- | --- | +| ‣ 주요 구성 요소들이 수동으로 설정되며, 정적인 보안 정책으로 인해 유연하지 못하게 정책시행 ‣ 경계 기반 보안 위주의 보안 아키텍처 구성 ‣ 수동으로 사고에 대응하며, 시스템에 대한 가시성이 제한적 | ‣ 일부 프로세스가 자동화되며, 핵심 요소별 연계가 일부 이루어짐 ‣ 속성 할당과 생명주기 관리가 부분적으로 자동화되며, 내부 시스템에 대한 기본적인 모니터링 제공 ‣ 프로비저닝 이후 최소 권한 변경에 대응 가능 | ‣ 자동화의 범위가 확장되고, 중앙 집중 제어가 강화되는 단계 ‣ 중앙 집중식으로 통합된 가시성 제공 ‣ 중앙 집중식 ID 관리를 통해 핵심 요소 간 상호작용에 기반한 정책 시행 | ‣ 자산 및 리소스에 대한 속성이 완전히 자동으로 할당되며, 동적인 정책이 적용되는 단계 ‣ 자동화된 트리거에 기반한 동적 정책 생성 ‣ 자산에 대해 동적 최소 권한 기반 접근 허용 ‣ 구성요소 간 상호운용성을 위한 개방형 표준 준수 이행 및 강화 | + + +44 | 제로트러스트 가이드라인 2.0 +있으며, 이 과정에서 제로트러스트 아키텍처의 기본 원리와 기업 상황을 고려하여 제로트러스트 +기능과 성숙도 수준을 선택, 수정 혹은 구체화하여도 무방하다. + +**[그림 3-2]** 제로트러스트 성숙도 모델 2.0 요약 + + +### 1. 기존(Traditional) + + +### 2. 초기(Initial) + + +### 3. 향상(Advanced) + + +### 4. 최적화(Optimal) + +식별자 +· +신원 +- 온프레미스ID 사용 +- 패스워드 혹은 다중인증 +방식 +- 수동접근 및 자격증명 +관리 +- 클라우드와 온프레미스 +기반 ID 연계 +- 다중인증 및 FIDO +기반인증 +- 수동 및 정적 규칙 기반 +위험 판단 +- 컨텍스트 기반 ID 인증 +- 일부 자동화된 및 동적 +규칙을 이용한 위험도 평가 +- 세션 기반 접근 지원 +- 클라우드와 온프레미스 +시스템 전반에 걸친 +글로벌ID +- AI 기반 위험도 결정 및 +지속적 보호 +- 자동화된 적시·최소 권한 +접근 적용 +기기 및 +엔드포인트 +- 제한된 정책준수정보 +- 단순하고 수동적 기기 +목록 관리 +- 수동적위협보호 기능 적용 +- 대부분의 기기에 정책 준수 +시행 메커니즘 사용 +- 모든 기기에 대해 목록화 +- 기기 보안솔루션 자동 관리 +- 규정 준수 여부에 따른 +접근 권한 부여 +- 검증된 기기만 데이터 접근 +- 자동화, 중앙집중식 위협 +보호 및 자산관리 기능 +통합 +- 지속적인 기기 보안 상태 +모니터링 및 검증 +- 모든 환경에 걸쳐 자산 및 +취약점 관리 통합 +- 모든 기기에 대해 위협 +보호 +네트워크 +- 경계분리 네트워크 구조 +정의 +- 알려진 위협 및 정적 트래픽 +필터링 +- 매우 중요한 애플리케이션 +및 워크로드에 대한 기능 +회복 +- 소규모 경계를 통해 확장된 +네트워크 구조 정의 +- 내부 애플리케이션 모든 +트래픽 및 외부 일부 +트래픽 암호화 +- 위험성이 없는 워크로드에 +대한 탄력적인 네트워크 +회복 +- 마이크로 세그먼트를 통해 +엔드포인트 및 애플리케이션 +격리메커니즘 배포 +- 비정상적인 데이터 흐름 +격리 및 제거 +- 자동화된 위험 인식 기반 +동적 네트워크 규칙 생성 +- 컨텍스트 기반 및 +기계학습 기반 위협 보호 +통합 +- 암호화 민첩성 +- 우선 순위 지정 가능한 +동적 네트워크 규칙 생성 +시스템 +- 로컬 시스템 기반 +ID/패스워드 등 단순인증 +- 정적 속성 등 최소한의 +권한 분리 정책 적용 +- 온프레미스 시스템보안 +패치 및 정책 수동 변경 +- 독립적인 시스템으로 계정 +관리 +- 일부 중요도에 따르는 +네트워크 세분화 +- 온프레미스 및 클라우드 +시스템에 대한 패치 수준 +자동 확인 기능 +- 동적 접근 권한 통제 +- 등급 및 기능별 네트워크 +분류 +- 온프레미스 및 클라우드 +시스템에 대한 자동화된 +보안 패치 +- 다중인증 및 신뢰도 기반 +접근 인가 +- 세분화된 리소스별 접근 +정책 적용 +- 온프레미스 및 클라우드 상의 +모든 시스템 실시간 모니터링 +및 자동화된 보안 패치 +애플리케이션 +및 +워크로드 +- 로컬 인가 및 정적 속성 +기반 애플리케이션 접근 +- 애플리케이션 +워크플로우와 위협 보호에 +대해 최소한의 통합 +- 정적·수동테스트 수행 +- 애플리케이션 +워크플로우와 위협 보호에 +대한 기본적인 통합 +- CI/CD 파이프라인 +DevSecOps, SBOM +적용 +- 동적 테스트 방법 사용 +- 확장된 컨텍스트 정보 +및 최소권한 원칙의 +애플리케이션 접근 +- 애플리케이션 +워크플로우와 위협 보호에 +대한 강력한 통합 +- 정기적인·자동화된 테스트 +- 실시간 위험 분석을 통해 +지속적 애플리케이션 인가 +- 모든 애플리케이션에 +사용자 및 단말 직접 접근 +가능 +- 자동화된 코드 배포 및 +소프트웨어 검증 +데이터 +- 정적, 수동 데이터 분류 및 +접근제어 +- 온프레미스 및 암호화되지 +않은 데이터 저장소 +- 제한된 임시 데이터 분류 +- 일부 자동화된 추적 기반 +수동데이터 분류 및 목록화 +- 최소한의 권한 요소를 +통합한 데이터 접근 +- 정적 레이블 및 수동 +메커니즘 데이터 분류 +- 속성에 기반한 최소 권한 +제어기법으로 접근관리 +- 저장소의 모든 데이터 +암호화 +- 레이블 지정 프로세스 +계층화 및 데이터 목록화 +자동화 +- AI를 이용한 지속적인 +데이터 분류 및 목록화 +자동화 +- 적시·최소권한 동적 +데이터 접근 +- 사용중인 데이터 암호화 +및 최신 암호화 적용 + +| • 제한된 정책준수정보 • 단순하고 수동적 기기 목록 관리 • 수동적위협보호 기능 적용 | • 대부분의 기기에 정책 준수 시행 메커니즘 사용 • 모든 기기에 대해 목록화 • 기기 보안솔루션 자동 관리 | • 규정 준수 여부에 따른 접근 권한 부여 • 검증된 기기만 데이터 접근 • 자동화, 중앙집중식 위협 보호 및 자산관리 기능 통합 | • 지속적인 기기 보안 상태 모니터링 및 검증 • 모든 환경에 걸쳐 자산 및 취약점 관리 통합 • 모든 기기에 대해 위협 보호 | +| --- | --- | --- | --- | +| • 경계분리 네트워크 구조 정의 • 알려진 위협 및 정적 트래픽 필터링 • 매우 중요한 애플리케이션 및 워크로드에 대한 기능 회복 | • 소규모 경계를 통해 확장된 네트워크 구조 정의 • 내부 애플리케이션 모든 트래픽 및 외부 일부 트래픽 암호화 • 위험성이 없는 워크로드에 대한 탄력적인 네트워크 회복 | • 마이크로 세그먼트를 통해 엔드포인트 및 애플리케이션 격리메커니즘 배포 • 비정상적인 데이터 흐름 격리 및 제거 • 자동화된 위험 인식 기반 동적 네트워크 규칙 생성 | • 컨텍스트 기반 및 기계학습 기반 위협 보호 통합 • 암호화 민첩성 • 우선 순위 지정 가능한 동적 네트워크 규칙 생성 | +| • 로컬 시스템 기반 ID/패스워드 등 단순인증 • 정적 속성 등 최소한의 권한 분리 정책 적용 • 온프레미스 시스템보안 패치 및 정책 수동 변경 | • 독립적인 시스템으로 계정 관리 • 일부 중요도에 따르는 네트워크 세분화 • 온프레미스 및 클라우드 시스템에 대한 패치 수준 자동 확인 기능 | • 동적 접근 권한 통제 • 등급 및 기능별 네트워크 분류 • 온프레미스 및 클라우드 시스템에 대한 자동화된 보안 패치 | • 다중인증 및 신뢰도 기반 접근 인가 • 세분화된 리소스별 접근 정책 적용 • 온프레미스 및 클라우드 상의 모든 시스템 실시간 모니터링 및 자동화된 보안 패치 | +| • 로컬 인가 및 정적 속성 기반 애플리케이션 접근 • 애플리케이션 워크플로우와 위협 보호에 대해 최소한의 통합 • 정적·수동테스트 수행 | • 애플리케이션 워크플로우와 위협 보호에 대한 기본적인 통합 • CI/CD 파이프라인 DevSecOps, SBOM 적용 • 동적 테스트 방법 사용 | • 확장된 컨텍스트 정보 및 최소권한 원칙의 애플리케이션 접근 • 애플리케이션 워크플로우와 위협 보호에 대한 강력한 통합 • 정기적인·자동화된 테스트 | • 실시간 위험 분석을 통해 지속적 애플리케이션 인가 • 모든 애플리케이션에 사용자 및 단말 직접 접근 가능 • 자동화된 코드 배포 및 소프트웨어 검증 | + + +가. 식별자·신원 +‘식별자·신원’ 핵심 요소의 경우 4가지 기능(식별자 관리, 인증, 위험도 평가, 접근 관리)이 있으며, +교차 역량(가시성 및 분석, 자동화 및 통합)을 반영한 표는 아래와 같다. + +**[표 3-4]** 식별자·신원 핵심 요소에 대한 제로트러스트 성숙도 모델 + +기능 +기존 +초기 +향상 +최적화 +식별자 +관리 +‣ 온프레미스 ID 사용 +‣ 클라우드와 온프레미스 +시스템을 기반으로 ID +연계 +‣ SSO 지원 +‣ ID 통합 관리 시스템 +구축 +‣ 클라우드 및 +온프레미스 환경 +전반에 걸쳐 글로벌 ID +활용 +인증 +‣ 패스워드 혹은 +다중인증 방식 +‣ 다중인증 방식 기반 +인증·FIDO 기반 인증 +‣ 컨텍스트 기반 ID 인증 +‣ 접근권한 승인 때 뿐만 +아니라, 지속적인 신원 +검증 +위험도 +평가 +‣ 위험에 대한 제한된 +결정 +‣ 수동 분석과 정적 +규칙을 기반으로 +식별자 위험도 판단 +‣ 일부 자동화된 분석과 +동적 규칙을 사용한 +위험도 평가 +‣ AI 기반 실시간 사용자 +행동 분석을 통해 +위험도 결정 및 지속적 +보호 +접근 관리 +‣ ID 기반, 수동으로 +관리되는 그룹 및 +역할을 사용하여 접근 +관리 +‣ 시스템 별 각기 다른 +관리 기능 +‣ 관리 기능 통합 +‣ 최소 권한 원칙에 따라 +접근 정책 검토 +‣ 사용자 및 리소스에 +맞는 조정된 권한을 +사용하여 세션 기반 +접근 지원 +‣ 자동화를 통해 개별 +요구사항에 맞는 +적시·최소권한 접근 +적용 +가시성 및 +분석 +‣ 기본적이며 정적인 +속성을 기반으로 +사용자 활동에 대한 +가시성 분류 +‣ 기본 속성으로 사용자 +활동에 대한 가시성 +집계 후 분석 및 보고를 +통한 수동적 개선 +‣ 일부 사용자 및 +엔티티에 대한 +자동화된 분석 +수행·가시성을 위한 +수집 정보 확대 +‣ 높은 정확도의 속성, +사용자 및 개체 행동 +분석(UEBA) 솔루션을 +통해 사용자 가시성 +확보 및 중앙 집중화 +자동화 및 +통합 +‣ ID와 자격 증명을 +수동으로 관리·통합 +‣ ID 연계 및 ID 저장소를 +통한 관리 허용을 위한 +기본 자동화 통합 +‣ 특정 권한이 필요한 +ID만 수동으로 하고 +나머지 모든 ID에 대한 +통합 자동화 +‣ ID 생명 주기를 +완벽히 통합하고, 동적 +사용자 프로파일링, +동적 ID 및 그룹 +멤버십, 적시·최소권한 +접근제어 구현 + +| 기능 | 기존 | 초기 | 향상 | 최적화 | +| --- | --- | --- | --- | --- | +| 식별자 관리 | ‣ 온프레미스 ID 사용 | ‣ 클라우드와 온프레미스 시스템을 기반으로 ID 연계 ‣ SSO 지원 | ‣ ID 통합 관리 시스템 구축 | ‣ 클라우드 및 온프레미스 환경 전반에 걸쳐 글로벌 ID 활용 | +| 인증 | ‣ 패스워드 혹은 다중인증 방식 | ‣ 다중인증 방식 기반 인증·FIDO 기반 인증 | ‣ 컨텍스트 기반 ID 인증 | ‣ 접근권한 승인 때 뿐만 아니라, 지속적인 신원 검증 | +| 위험도 평가 | ‣ 위험에 대한 제한된 결정 | ‣ 수동 분석과 정적 규칙을 기반으로 식별자 위험도 판단 | ‣ 일부 자동화된 분석과 동적 규칙을 사용한 위험도 평가 | ‣ AI 기반 실시간 사용자 행동 분석을 통해 위험도 결정 및 지속적 보호 | +| 접근 관리 | ‣ ID 기반, 수동으로 관리되는 그룹 및 역할을 사용하여 접근 관리 ‣ 시스템 별 각기 다른 관리 기능 | ‣ 관리 기능 통합 ‣ 최소 권한 원칙에 따라 접근 정책 검토 | ‣ 사용자 및 리소스에 맞는 조정된 권한을 사용하여 세션 기반 접근 지원 | ‣ 자동화를 통해 개별 요구사항에 맞는 적시·최소권한 접근 적용 | +| 가시성 및 분석 | ‣ 기본적이며 정적인 속성을 기반으로 사용자 활동에 대한 가시성 분류 | ‣ 기본 속성으로 사용자 활동에 대한 가시성 집계 후 분석 및 보고를 통한 수동적 개선 | ‣ 일부 사용자 및 엔티티에 대한 자동화된 분석 수행·가시성을 위한 수집 정보 확대 | ‣ 높은 정확도의 속성, 사용자 및 개체 행동 분석(UEBA) 솔루션을 통해 사용자 가시성 확보 및 중앙 집중화 | +| 자동화 및 통합 | ‣ ID와 자격 증명을 수동으로 관리·통합 | ‣ ID 연계 및 ID 저장소를 통한 관리 허용을 위한 기본 자동화 통합 | ‣ 특정 권한이 필요한 ID만 수동으로 하고 나머지 모든 ID에 대한 통합 자동화 | ‣ ID 생명 주기를 완벽히 통합하고, 동적 사용자 프로파일링, 동적 ID 및 그룹 멤버십, 적시·최소권한 접근제어 구현 | + + +46 | 제로트러스트 가이드라인 2.0 +나. 기기 및 엔드포인트 +‘기기 및 엔드포인트’ 핵심 요소의 경우 4가지 기능(정책 준수 모니터링, 데이터 접근제어, 자산 +관리, 기기 위협 보호)이 있으며, 교차 역량(가시성 및 분석, 자동화 및 통합)을 반영한 표는 아래와 +같다. + +**[표 3-5]** 기기 및 엔드포인트 핵심 요소에 대한 제로트러스트 성숙도 모델 + +기능 +기존 +초기 +향상 +최적화 +정책 준수 +모니터링 +‣ 기기 정책 준수를 위한 +제한된 정보 제공 +‣ 대부분의 기기에 정책 +준수 시행 메커니즘 +사용 +‣ 규정 준수 여부에 따른 +접근권한 부여 +‣ 지속적인 기기 보안 +상태 모니터링 및 검증 +‣ 규정 위반 시 동적으로 +권한 수정 +데이터 +접근제어 +‣ 데이터 접근 기기에 +대한 정보에 의존하지 +않음 +‣ 첫 데이터 접근 시 기기 +상태 고려 +‣ 검증된 기기만 데이터 +접근 +‣ 기기에 대한 실시간 +위험 분석을 통한 동적 +접근 결정 +자산 관리 +‣ 단순하며 수동으로 +추적되는 기기 목록 +관리 +‣ 모든 기기에 대한 +완벽한 목록 보유 +‣ 자동화된 방법을 +이용하여 자산 관리, +취약성 식별, 자산에 +대한 패치 적용 +‣ 클라우드 및 원격을 +포함한 모든 환경에 +걸쳐 자산 및 취약점 +관리 통합 +기기 위협 +보호 +‣ 일부 기기에 위협 보호 +기능 수동 적용 +‣ 수동 취약점 파악, 패치 +적용 +‣ 기기 보안 솔루션 자동 +설치·관리 +‣ EDR 솔루션 사용 +‣ 자동 패치 확인 기능 +보유 +‣ 중앙 집중식 솔루션에 +위협 보호 기능 통합 +‣ 연계기반 이상 행위 +분석 등을 통한 비정상 +행위 모니터링 및 대응 +(XDR 등) +‣ 펌웨어 유지 관리 +프로세스 도입 +‣ 모든 기기에 대하여 +기기 위협 보호, 정책 +시행, 규정 준수 +모니터링을 위한 +솔루션 배포 +‣ 모든 패치 자동화 +가시성 및 +분석 +‣ 기기 관리는 라벨 수동 +검사, 주기적 네트워크 +검색 및 보고에 의존 +‣ 수동 모니터링 및 +일부 리소스에 대한 +자동화된 분석 +‣ 승인되지 않은 기기 +감지 및 인벤토리 수집, +이상 탐지 자동화 +‣ 기업은 지속적으로 +기기 상태 평가 실행 +자동화 및 +통합 +‣ 기업 내에서 기기를 +수동으로 프로비저닝, +구성 및 등록 +‣ 기기에 대한 +프로비저닝, 구성, +등록, 해제 프로세스 +자동화 +‣ 규정 미준수한 +구성요소 격리 +‣ 기기 및 가상 자산 +프로비저닝, 등록, +모니터링, 격리, 수정 +및 해제 완전 자동화 + +| 기능 | 기존 | 초기 | 향상 | 최적화 | +| --- | --- | --- | --- | --- | +| 정책 준수 모니터링 | ‣ 기기 정책 준수를 위한 제한된 정보 제공 | ‣ 대부분의 기기에 정책 준수 시행 메커니즘 사용 | ‣ 규정 준수 여부에 따른 접근권한 부여 | ‣ 지속적인 기기 보안 상태 모니터링 및 검증 ‣ 규정 위반 시 동적으로 권한 수정 | +| 데이터 접근제어 | ‣ 데이터 접근 기기에 대한 정보에 의존하지 않음 | ‣ 첫 데이터 접근 시 기기 상태 고려 | ‣ 검증된 기기만 데이터 접근 | ‣ 기기에 대한 실시간 위험 분석을 통한 동적 접근 결정 | +| 자산 관리 | ‣ 단순하며 수동으로 추적되는 기기 목록 관리 | ‣ 모든 기기에 대한 완벽한 목록 보유 | ‣ 자동화된 방법을 이용하여 자산 관리, 취약성 식별, 자산에 대한 패치 적용 | ‣ 클라우드 및 원격을 포함한 모든 환경에 걸쳐 자산 및 취약점 관리 통합 | +| 기기 위협 보호 | ‣ 일부 기기에 위협 보호 기능 수동 적용 ‣ 수동 취약점 파악, 패치 적용 | ‣ 기기 보안 솔루션 자동 설치·관리 ‣ EDR 솔루션 사용 ‣ 자동 패치 확인 기능 보유 | ‣ 중앙 집중식 솔루션에 위협 보호 기능 통합 ‣ 연계기반 이상 행위 분석 등을 통한 비정상 행위 모니터링 및 대응 (XDR 등) ‣ 펌웨어 유지 관리 프로세스 도입 | ‣ 모든 기기에 대하여 기기 위협 보호, 정책 시행, 규정 준수 모니터링을 위한 솔루션 배포 ‣ 모든 패치 자동화 | +| 가시성 및 분석 | ‣ 기기 관리는 라벨 수동 검사, 주기적 네트워크 검색 및 보고에 의존 | ‣ 수동 모니터링 및 일부 리소스에 대한 자동화된 분석 | ‣ 승인되지 않은 기기 감지 및 인벤토리 수집, 이상 탐지 자동화 | ‣ 기업은 지속적으로 기기 상태 평가 실행 | +| 자동화 및 통합 | ‣ 기업 내에서 기기를 수동으로 프로비저닝, 구성 및 등록 | ‣ 기기에 대한 프로비저닝, 구성, 등록, 해제 프로세스 자동화 | ‣ 규정 미준수한 구성요소 격리 | ‣ 기기 및 가상 자산 프로비저닝, 등록, 모니터링, 격리, 수정 및 해제 완전 자동화 | + + +다. 네트워크 +‘네트워크’ 핵심 요소의 경우 5가지 기능(네트워크 세분화, 위협 대응, 트래픽 암호화, 트래픽 관리, +네트워크 회복성)이 있으며, 교차 역량(가시성 및 분석, 자동화 및 통합)을 반영한 표는 아래와 같다. + +**[표 3-6]** 네트워크 핵심 요소에 대한 제로트러스트 성숙도 모델 + +기능 +기존 +초기 +향상 +최적화 +네트워크 +세분화 +‣ 대규모 경계·분리를 +사용하는 네트워크 +구조 정의 +‣ 일부 내부적인 +세분화를 갖는 송수신 +소규모 경계를 통해 더 +많은 네트워크 구조 +정의 +‣ 마이크로 세그먼트 +(Micro-Segment) 간 +송수신 제어를 +통해 더 많은 네트워크 +아키텍처에 엔드포인트 +및 애플리케이션 격리 +메커니즘 배포 +‣ 네트워크 구조는 +주변 애플리케이션 +워크플로우를 기반 +으로 완벽히 분산된 +송수신 세부 경계 +및 더욱 깊은 내부 +세분화로 구성됨 +위협 대응 +‣ 알려진 위협 및 정적 +트래픽 필터링을 핵심 +기반으로 위협 보호 수행 +‣ 위협을 사전에 +발견하기 위한 기본 +분석 포함 +‣ 비정상적인 데이터 흐름 +격리 및 제거 +‣ 컨텍스트 기반 신호와 +기계학습 기반 위협 +보호 및 필터링 통합 +트래픽 +암호화 +(가이드라인 +1.0의 암호화) +‣ 최소한의 내외부 +트래픽에 대한 명시적 +암호화 +‣ 내부 애플리케이션에 +대한 모든 트래픽 및 +일부 외부 트래픽 암호화 +‣ 가능한 경우, 내외부로 +전달되는 모든 트래픽 +암호화 +‣ 암호 민첩성7 적용 +트래픽 관리 +‣ 제한된 모니터링 +(수동적) +‣ 애플리케이션 별 +트래픽 매칭 +‣ 자동화된 위험 인식 +기반 동적 네트워크 +규칙 및 구성 +‣ 애플리케이션 우선 +순위 재지정이 가능한 +동적 네트워크 규칙 +및 구성 +네트워크 +회복성 +‣ 매우 중요한 +애플리케이션 및 +워크로드에 대한 기능 +회복 +‣ 추가 애플리케이션 +회복 +‣ 위험하지 않은 워크 +로드에 대한 탄력적 +네트워크 회복 +‣ 대부분의 +애플리케이션에 대한 +가용성 및 회복 +‣ 모든 워크로드에 대한 +가용성 +가시성 및 +분석 +‣ 중앙 집중식 수집 +및 분석을 통하여 +경계에서 가시성 제공 +‣ 알려진 지표 기반 +네트워크 모니터링 +기능 사용 +‣ 이상 기반 네트워크 +감지 기능 사용 +‣ 모든 환경에 대한 상황 +인식, 분석 수행 +‣ 모든 네트워크 트래픽에 +대한 가시성 유지 +‣ 상관관계 분석을 통한 +모니터링 +자동화 및 +통합 +‣ 수동 정책 기반 상황 +인식 및 리소스 관리 +‣ 일부 네트워크 또는 +환경에 대한 수명주기 +관리 +‣ 모든 네트워크 환경에 +대한 관리 및 리소스 +수명 주기 관리 +‣ 네트워크에 대한 +자동화된 변경 및 관리 +기능 수행 +7  암호 민첩성(Cryptographic Agility)은 암호화 정책과 기술을 유연하고 빠르게 변화하는 환경에 맞게 조정하고, 상황에 따라 적절한 암호화 +기법을 신속하게 적용할 수 있는 능력을 의미하며, 미국 국토안보부(DHS)는 주변 인프라를 수정하거나 교체할 필요 없이 향후 암호화 +알고리즘 및 표준을 업데이트할 수 있는 설계 기능으로 정의하고 있음 + +| 기능 | 기존 | 초기 | 향상 | 최적화 | +| --- | --- | --- | --- | --- | +| 네트워크 세분화 | ‣ 대규모 경계·분리를 사용하는 네트워크 구조 정의 | ‣ 일부 내부적인 세분화를 갖는 송수신 소규모 경계를 통해 더 많은 네트워크 구조 정의 | ‣ 마이크로 세그먼트 (Micro-Segment) 간 송수신 제어를 통해 더 많은 네트워크 아키텍처에 엔드포인트 및 애플리케이션 격리 메커니즘 배포 | ‣ 네트워크 구조는 주변 애플리케이션 워크플로우를 기반 으로 완벽히 분산된 송수신 세부 경계 및 더욱 깊은 내부 세분화로 구성됨 | +| 위협 대응 | ‣ 알려진 위협 및 정적 트래픽 필터링을 핵심 기반으로 위협 보호 수행 | ‣ 위협을 사전에 발견하기 위한 기본 분석 포함 | ‣ 비정상적인 데이터 흐름 격리 및 제거 | ‣ 컨텍스트 기반 신호와 기계학습 기반 위협 보호 및 필터링 통합 | +| 트래픽 암호화 (가이드라인 1.0의 암호화) | ‣ 최소한의 내외부 트래픽에 대한 명시적 암호화 | ‣ 내부 애플리케이션에 대한 모든 트래픽 및 일부 외부 트래픽 암호화 | ‣ 가능한 경우, 내외부로 전달되는 모든 트래픽 암호화 | ‣ 암호 민첩성7 적용 | +| 트래픽 관리 | ‣ 제한된 모니터링 (수동적) | ‣ 애플리케이션 별 트래픽 매칭 | ‣ 자동화된 위험 인식 기반 동적 네트워크 규칙 및 구성 | ‣ 애플리케이션 우선 순위 재지정이 가능한 동적 네트워크 규칙 및 구성 | +| 네트워크 회복성 | ‣ 매우 중요한 애플리케이션 및 워크로드에 대한 기능 회복 | ‣ 추가 애플리케이션 회복 ‣ 위험하지 않은 워크 로드에 대한 탄력적 네트워크 회복 | ‣ 대부분의 애플리케이션에 대한 가용성 및 회복 | ‣ 모든 워크로드에 대한 가용성 | +| 가시성 및 분석 | ‣ 중앙 집중식 수집 및 분석을 통하여 경계에서 가시성 제공 | ‣ 알려진 지표 기반 네트워크 모니터링 기능 사용 | ‣ 이상 기반 네트워크 감지 기능 사용 ‣ 모든 환경에 대한 상황 인식, 분석 수행 | ‣ 모 든 네트워크 트래픽에 대한 가시성 유지 ‣ 상관관계 분석을 통한 모니터링 | +| 자동화 및 통합 | ‣ 수동 정책 기반 상황 인식 및 리소스 관리 | ‣ 일부 네트워크 또는 환경에 대한 수명주기 관리 | ‣ 모든 네트워크 환경에 대한 관리 및 리소스 수명 주기 관리 | ‣ 네트워크에 대한 자동화된 변경 및 관리 기능 수행 | + + +48 | 제로트러스트 가이드라인 2.0 +라. 시스템 +‘시스템’ 핵심 요소의 경우 4가지 기능(접근통제, 시스템 계정 관리, 네트워크 분리 정책, 시스템 +보안 및 정책 관리)이 있으며, 교차 역량(가시성 및 분석, 자동화 및 통합)을 반영한 표는 아래와 같다. + +**[표 3-7]** 시스템 핵심 요소에 대한 제로트러스트 성숙도 모델 + +기능 +기존 +초기 +향상 +최적화 +접근통제 +‣ 시스템 접근을 위한 +계정 인증은 로컬 +시스템에 저장된 +ID·패스워드 등 단순 +인증을 기반으로 하고 +정적 속성 등 최소한의 +권한 분리 정책 적용 +‣ 시스템 접근 시 중앙 +집중적 인증, 인가, +모니터링과 속성에 +의존하며, MFA 인증을 +기본으로 시스템 파일, +디렉토리에 접근하거나 +주요 명령어를 실행할 +때 접근제어 정책에 +따라 보안 정책 적용 +‣ 접근 요청 사용자와 +요청에 사용되는 +기기·시스템에 따라 +접근권한이 동적으로 +달라짐 +‣ 시스템 접근 시 다중 +인증 및 엔드포인트 +시스템의 신뢰도를 +기반으로 접근인가 +진행. 시스템에 영향을 +미치는 명령 실행 시 +실시간 신뢰도 재산정 및 +위험 분석을 기반으로 +강력하고 지속적인 +접근제어 정책 적용 +시스템 +계정 관리 +‣ 접근 인가를 진행하는 +권한 사용자의 계정 +관리가 시스템별로 +상이하게 관리 +‣ 접근 인가를 진행하는 +권한 사용자의 +계정 관리가 +독립 시스템으로 +이루어지고 다른 +시스템들과 동기화 및 +프로비저닝됨 +‣ 접근 인가를 진행하는 +권한 사용자의 계정 +관리가 독립 시스템을 +기반으로 통합적으로 +이루어지고 권한 +사용자의 보안 관리 +정책이 계정관리와 +통합 및 중앙 일원화 +되어 접근제어 정책 +적용 +‣ 세분화된 리소스 별 +접근 정책 적용되며, +권한 사용자의 이상 +행위를 판별하여 +실시간으로 시스템 계정 +잠금·해제 기능 제공 +네트워크 +분리 정책 +‣ 중요도 구분 없이 +망분리 등 네트워크 +경계형 모델을 +기반으로 시스템 +영역을 구분하고 배치 +‣ 일부 시스템을 +중요도에 따라 +세분화하여 시스템들 +간 접속 이동에 있어 +보안 정책 적용 +‣ 등급 및 기능별 분류, +세분화 및 강력한 +시스템 보안 접근 +정책을 기반으로 분류 +그룹 간 이동 통제 +‣ 분류 그룹 간 재인증없이 +이동이 가능하게 하는 +추가적인 정책 적용 +시스템 +보안 및 +정책 관리 +‣ 온프레미스 시스템 +보안 패치 및 정책 +변경은 수동으로 +이루어짐 +‣ 온프레미스 및 +클라우드 시스템에 +대한 패치 수준 자동 +확인 기능 제공 +‣ 온프레미스 및 +클라우드 시스템에 +대한 일관되고 +자동화된 보안 패치 +가능 +‣ 온프레미스 및 클라우드 +상의 모든 시스템 보안 +상태에 대한 실시간 +모니터링, 심각한 위협에 +대한 자동화된 보안 패치 +및 정책 변경 가능 +가시성 및 +분석 +‣ 센서 및 시스템과 +격리된 상태에서 +시스템 상태 및 보안 +모니터링 수행 +‣ 외부 센서 및 시스템과 +격리된 상태에서 +시스템 상태 및 보안 +모니터링 일부 자동화 +‣ 일부 외부 센서와 +시스템을 사용하여 +컨텍스트 관점에서, +시스템 상태 및 보안 +모니터링 수행 +‣ 외부 센서와 시스템을 +사용하여 지속적이고 +동적인 애플리케이션 +상태 및 보안 모니터링 +수행 +자동화 및 +통합 +‣ 시스템 제공 시, +애플리케이션 호스팅 +위치와 접근을 설정 +‣ 변경된 상태를 기기와 +네트워크 구성 요소에 +알림 +‣ 보안과 성능 최적화를 +위한 지속적인 환경 +변화에 적응 +‣ 모든 시스템에 대한 +중앙 집중 관리 및 AI +기반 시스템 이상행위 +탐지 + +| 기능 | 기존 | 초기 | 향상 | 최적화 | +| --- | --- | --- | --- | --- | +| 접근통제 | ‣ 시스템 접근을 위한 계정 인증은 로컬 시스템에 저장된 ID·패스워드 등 단순 인증을 기반으로 하고 정적 속성 등 최소한의 권한 분리 정책 적용 | ‣ 시스템 접근 시 중앙 집중적 인증, 인가, 모니터링과 속성에 의존하며, MFA 인증을 기본으로 시스템 파일, 디렉토리에 접근하거나 주요 명령어를 실행할 때 접근제어 정책에 따라 보안 정책 적용 | ‣ 접근 요청 사용자와 요청에 사용되는 기기·시스템에 따라 접근권한이 동적으로 달라짐 | ‣ 시스템 접근 시 다중 인증 및 엔드포인트 시스템의 신뢰도를 기반으로 접근인가 진행. 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정 및 위험 분석을 기반으로 강력하고 지속적인 접근제어 정책 적용 | +| 시스템 계정 관리 | ‣ 접근 인가를 진행하는 권한 사용자의 계정 관리가 시스템별로 상이하게 관리 | ‣ 접근 인가를 진행하는 권한 사용자의 계정 관리가 독립 시스템으로 이루어지고 다른 시스템들과 동기화 및 프로비저닝됨 | ‣ 접근 인가를 진행하는 권한 사용자의 계정 관리가 독립 시스템을 기반으로 통합적으로 이루어지고 권한 사용자의 보안 관리 정책이 계정관리와 통합 및 중앙 일원화 되어 접근제어 정책 적용 | ‣ 세분화된 리소스 별 접근 정책 적용되며, 권한 사용자의 이상 행위를 판별하여 실시간으로 시스템 계정 잠금·해제 기능 제공 | +| 네트워크 분리 정책 | ‣ 중요도 구분 없이 망분리 등 네트워크 경계형 모델을 기반으로 시스템 영역을 구분하고 배치 | ‣ 일부 시스템을 중요도에 따라 세분화하여 시스템들 간 접속 이동에 있어 보안 정책 적용 | ‣ 등급 및 기능별 분류, 세분화 및 강력한 시스템 보안 접근 정책을 기반으로 분류 그룹 간 이동 통제 | ‣ 분류 그룹 간 재인증없이 이동이 가능하게 하는 추가적인 정책 적용 | +| 시스템 보안 및 정책 관리 | ‣ 온프레미스 시스템 보안 패치 및 정책 변경은 수동으로 이루어짐 | ‣ 온프레미스 및 클라우드 시스템에 대한 패치 수준 자동 확인 기능 제공 | ‣ 온프레미스 및 클라우드 시스템에 대한 일관되고 자동화된 보안 패치 가능 | ‣ 온프레미스 및 클라우드 상의 모든 시스템 보안 상태에 대한 실시간 모니터링, 심각한 위협에 대한 자동화된 보안 패치 및 정책 변경 가능 | +| 가시성 및 분석 | ‣ 센서 및 시스템과 격리된 상태에서 시스템 상태 및 보안 모니터링 수행 | ‣ 외부 센서 및 시스템과 격리된 상태에서 시스템 상태 및 보안 모니터링 일부 자동화 | ‣ 일부 외부 센서와 시스템을 사용하여 컨텍스트 관점에서, 시스템 상태 및 보안 모니터링 수행 | ‣ 외부 센서와 시스템을 사용하여 지속적이고 동적인 애플리케이션 상태 및 보안 모니터링 수행 | +| 자동화 및 통합 | ‣ 시스템 제공 시, 애플리케이션 호스팅 위치와 접근을 설정 | ‣ 변경된 상태를 기기와 네트워크 구성 요소에 알림 | ‣ 보안과 성능 최적화를 위한 지속적인 환경 변화에 적응 | ‣ 모든 시스템에 대한 중앙 집중 관리 및 AI 기반 시스템 이상행위 탐지 | + + +마. 애플리케이션 및 워크로드 +‘애플리케이션 및 워크로드’ 핵심 요소의 경우 5가지 기능(애플리케이션 접근, 애플리케이션 위협 +보호, 접근 가능한 애플리케이션, 안전한 애플리케이션 배포, 소프트웨어·애플리케이션 보안)이 +있으며, 교차 역량(가시성 및 분석, 자동화 및 통합)을 반영한 표는 아래와 같다. + +**[표 3-8]** 애플리케이션 및 워크로드 핵심 요소에 대한 제로트러스트 성숙도 모델 + +기능 +기존 +초기 +향상 +최적화 +애플리케이션 +접근(가이드라인 +1.0의 접근 인가) +‣ 애플리케이션 접근은 +주로 로컬 인가 및 정적 +속성에 기반 +‣ 애플리케이션 접근은 +중앙집중적 인증, 인가, +모니터링과 속성에 의존 +‣ 확장된 컨텍스트 정보와 +최소 권한 원칙의 +애플리케이션 접근 +‣ 실시간 위험 분석을 +고려하여 애플리케이션 +접근을 지속적으로 인가 +애플리케이션 +위협 보호 +(가이드라인 +1.0의 위협 보호) +‣ 알려진 위협에 +대한 범용 보호 +기법을 적용하여, +애플리케이션 +워크플로우와 위협 +보호에 대한 최소한의 +통합 +‣ 일부 애플리케이션 별 +보호 기법을 사용하여 +알려진 위협에 대한 +보호를 적용하여, +애플리케이션 워크 +플로우와 위협 보호에 +대한 기본적인 통합 +‣ 애플리케이션 동작을 +이해하고 설명하는 보호 +기법을 제공하는 분석을 +사용하여, 애플리케이션 +워크 +플로우와 위협 보호에 +대한 강력한 통합 +‣ 정교한(맞춤형) 공격에 +대한 보호 +접근 가능한 +애플리케이션 +(가이드라인 +1.0의 접근성) +‣ 일부 중요 클라우드 +애플리케이션은 +인터넷을 통해 +사용자가 직접 +접근하며, 그 외의 다른 +애플리케이션은 VPN을 +통한 접속 +‣ 모든 클라우드 +애플리케이션과 +일부 온프레미스 +애플리케이션은 +인터넷을 통해 사용자가 +직접 접근하며, 그 외 +다른 애플리케이션은 +VPN을 통한 접근 +‣ 모든 애플리케이션은 +인터넷을 통해 사용자가 +직접 접근 가능 +‣ 모든 애플리케이션은 +인터넷을 통해 사용자 및 +단말이 직접 접근 가능 +안전한 +애플리케이션 +배포 +‣ 강력하지 않은 코드 +배포 메커니즘 +‣ CI/CD 파이프라인을 +통한 코드 배포 +매메커니즘 보유 +‣ 테스트 및 생산 환경 +인프라 제공 +‣ 배포되는 애플리케이션에 +대한 정기적인·자동화된 +시험을 사용하여, +개발·배포 과정에서 +애플리케이션 보안 테스트 +통합 +‣ 자동화된 코드 배포 및 +관리자 권한 접근 제거 +‣ 공급망 손상이 있는 +것으로 식별된 모든 +소프트웨어를 격리·관리 +소프트웨어· +애플리케이션 +보안 +‣ 주로 정적·수동 검사 +방법을 통해, 배포 전 +애플리케이션 보안 +테스트 수행 +‣ 동적 시험 방법 사용을 +포함하여, 애플리케이션 +개발 및 배포 과정에 +애플리케이션 보안 +테스트 통합 +‣ DevSecOps적용 +‣ SBOM 제공 +‣ 프로세스 전반에 걸친 +SBOM 제공 +‣ 모든 소프트웨어에 대해 +가능한 한 최대한 검증 +프로세스 구현 +‣ 소프트웨어를 개발 +조직 프로세스 격리와 +마이크로 세그멘테이션 +적용 +‣ 런타임 소프트웨어를 +포함한 자동화된 +소프트웨어 검증 +가시성 및 분석 +‣ 외부 센서 및 시스템과 +격리된 상태에서 +애플리케이션 상태 및 +보안 모니터링 수행 +‣ 일부 외부 센서와 +시스템을 사용하여 +컨텍스트 관점에서, +애플리케이션 상태 및 +보안 모니터링 수행 +‣ 휴리스틱 기반 분석 및 +보안 모니터링 자동화 +‣ 외부 센서와 시스템을 +사용하여 지속적이고 +동적인 애플리케이션 +상태 및 보안 모니터링 +수행 +자동화 및 통합 +‣ 애플리케이션 제공 시, +애플리케이션 호스팅 +위치와 접근 설정 +‣ 변경된 상태를 기기와 +네트워크 구성 요소에 +알림 +‣ 자동화된 상태 변화 전송 +‣ 보안과 성능 최적화를 +위한 지속적인 환경 +변화에 적응 + +| 기능 | 기존 | 초기 | 향상 | 최적화 | +| --- | --- | --- | --- | --- | +| 애플리케이션 접근(가이드라인 1.0의 접근 인가) | ‣ 애플리케이션 접근은 주로 로컬 인가 및 정적 속성에 기반 | ‣ 애플리케이션 접근은 중앙집중적 인증, 인가, 모니터링과 속성에 의존 | ‣ 확장된 컨텍스트 정보와 최소 권한 원칙의 애플리케이션 접근 | ‣ 실시간 위험 분석을 고려하여 애플리케이션 접근을 지속적으로 인가 | +| 애플리케이션 위협 보호 (가이드라인 1.0의 위협 보호) | ‣ 알려진 위협에 대한 범용 보호 기법을 적용하여, 애플리케이션 워크플로우와 위협 보호에 대한 최소한의 통합 | ‣ 일부 애플리케이션 별 보호 기법을 사용하여 알려진 위협에 대한 보호를 적용하여, 애플리케이션 워크 플로우와 위협 보호에 대한 기본적인 통합 | ‣ 애플리케이션 동작을 이해하고 설명하는 보호 기법을 제공하는 분석을 사용하여, 애플리케이션 워크 플로우와 위협 보호에 대한 강력한 통합 | ‣ 정교한(맞춤형) 공격에 대한 보호 | +| 접근 가능한 애플리케이션 (가이드라인 1.0의 접근성) | ‣ 일부 중요 클라우드 애플리케이션은 인터넷을 통해 사용자가 직접 접근하며, 그 외의 다른 애플리케이션은 VPN을 통한 접속 | ‣ 모든 클라우드 애플리케이션과 일부 온프레미스 애플리케이션은 인터넷을 통해 사용자가 직접 접근하며, 그 외 다른 애플리케이션은 VPN을 통한 접근 | ‣ 모든 애플리케이션은 인터넷을 통해 사용자가 직접 접근 가능 | ‣ 모든 애플리케이션은 인터넷을 통해 사용자 및 단말이 직접 접근 가능 | +| 안전한 애플리케이션 배포 | ‣ 강력하지 않은 코드 배포 메커니즘 | ‣ CI/CD 파이프라인을 통한 코드 배포 매메커니즘 보유 ‣ 테스트 및 생산 환경 인프라 제공 | ‣ 배포되는 애플리케이션에 대한 정기적인·자동화된 시험을 사용하여, 개발·배포 과정에서 애플리케이션 보안 테스트 통합 | ‣ 자동화된 코드 배포 및 관리자 권한 접근 제거 ‣ 공급망 손상이 있는 것으로 식별된 모든 소프트웨어를 격리·관리 | +| 소프트웨어· 애플리케이션 보안 | ‣ 주로 정적·수동 검사 방법을 통해, 배포 전 애플리케이션 보안 테스트 수행 | ‣ 동적 시험 방법 사용을 포함하여, 애플리케이션 개발 및 배포 과정에 애플리케이션 보안 테스트 통합 ‣ DevSecOps적용 ‣ SBOM 제공 | ‣ 프로세스 전반에 걸친 SBOM 제공 ‣ 모든 소프트웨어에 대해 가능한 한 최대한 검증 프로세스 구현 | ‣ 소프트웨어를 개발 조직 프로세스 격리와 마이크로 세그멘테이션 적용 ‣ 런타임 소프트웨어를 포함한 자동화된 소프트웨어 검증 | +| 가시성 및 분석 | ‣ 외부 센서 및 시스템과 격리된 상태에서 애플리케이션 상태 및 보안 모니터링 수행 | ‣ 일부 외부 센서와 시스템을 사용하여 컨텍스트 관점에서, 애플리케이션 상태 및 보안 모니터링 수행 | ‣ 휴리스틱 기반 분석 및 보안 모니터링 자동화 | ‣ 외부 센서와 시스템을 사용하여 지속적이고 동적인 애플리케이션 상태 및 보안 모니터링 수행 | +| 자동화 및 통합 | ‣ 애플리케이션 제공 시, 애플리케이션 호스팅 위치와 접근 설정 | ‣ 변경된 상태를 기기와 네트워크 구성 요소에 알림 | ‣ 자동화된 상태 변화 전송 | ‣ 보안과 성능 최적화를 위한 지속적인 환경 변화에 적응 | + + +50 | 제로트러스트 가이드라인 2.0 +바. 데이터 +‘데이터’ 핵심 요소의 경우 5가지 기능(데이터 목록 관리, 접근 결정 방법, 데이터 암호화, 데이터 분류, +데이터 손실 방지)이 있으며, 교차 역량(가시성 및 분석, 자동화 및 통합)을 반영한 표는 아래와 같다. + +**[표 3-9]** 데이터 핵심 요소에 대한 제로트러스트 성숙도 모델 + +기능 +기존 +초기 +향상 +최적화 +데이터 목록 +관리 +‣ 데이터를 수동으로 +분류하고 데이터 목록 +작업이 부실하여, 일관 +되지 않은 데이터 분류 +‣ 일부 자동화된 추적을 +기반으로, 수동으로 +데이터 목록 작업 수행. +수동·정적인 방식을 +조합하여 데이터 분류 +‣ 데이터 목록 자동화 및 +데이터 사용 패턴 분석 +기술 적용 +‣ 강력한 태그 작업 및 +추적으로 지속적인 목록 +작업. 기계 학습 모델을 +사용하여 분류 강화 +접근 결정 +방법 +‣ 정적 접근제어를 +사용하여 데이터 접근 +관리 +‣ 최소한의 권한 요소 등을 +통합한 데이터 접근 +‣ 식별자, 기기 위험도 및 기타 +속성을 고려하는 최소 권한 +제어 기법을 사용 +하여 데이터 접근 관리 +‣ 데이터 접근은 +적시·최소권한 원칙 +및 지속적인 위험기반 +결정을 지원하며, +동적으로 이루어짐 +데이터 +암호화 +(가이드 +라인 1.0의 +암호화) +‣ 온프레미스 데이터 +저장소에 암호화되지 +않은 상태로 데이터 저장 +‣ 클라우드 혹은 원격 +환경에서 암호화 저장 +‣ 저장소의 모든 데이터 +암호화 +‣ 사용 중인 데이터 암호화 +‣ 조직 차원의 안전한 키 +관리를 위한 최소 권한 원칙 +‣ 최신 표준을 사용한 암호화 +적용 및 암호 민첩성 +‣ DRM과 AI 기반 기술 통합8 +데이터 분류 +‣ 제한된 임시 데이터 분류 +‣ 데이터 태깅 및 라벨링 +표준 정의 +‣ 정의된 레이블 및 수동 +메커니즘을 통한 데이터 +분류 +‣ 단순화·구조화된 형식을 +통한 데이터 분류 +‣ 레이블 지정 프로세스 +계층화 및 일부 자동화 +‣ 데이터 분류 및 레이블 +지정 자동화 +‣ 데이터 태깅 및 라벨링에 +대한 분석 수행 자동화 +데이터 손실 +방지 +‣ DLP 솔루션을 배포하기 +위한 범위 지정 +‣ 민감한 데이터를 +식별하는 기술이 확립 +‣ DLP 솔루션은 검사 적용 +지점에 배포 +‣ DLP 솔루션은 모니터링 +수준으로 활용 +‣ DLP 솔루션 결과 분석, +정책 미세 조정을 통한 +관리 +‣ DLP 솔루션읕 통하여 +데이터 유출 방지 +‣ 자동화된 데이터 모니터링을 +통해 추가 DLP 배포에 대한 +누락된 시행 지점 식별 +‣ 자동화된 데이터 태그를 +활용하여 민감한 데이터 식별 +가시성 및 +분석 +‣ 특정 상황을 제외하고는, +유용한 가시성 및 분석을 +방해하는 제한된 데이터 +목록 보유 +‣ 대부분 데이터는 +목록화되어 마지막 +목록 업데이트 이후 +관리 가능. 분석은 평문 +데이터에 한정됨 +‣ 자동화된 분석 및 상관 +관계 분석, 예측 분석 +등의 기능 사용 +‣ 데이터는 목록화되어 +언제든지 관리 가능 +‣ 의심스러운 행위에 대한 모든 +접근 이벤트 로그 및 분석 +‣ 암호화된 데이터에 분석 수행 +자동화 및 +통합 +‣ 자동화 및 통합을 어렵게 +하는, 일관되지 않은 +분류 및 레이블 지정. +일부 데이터 관리 작업은 +자동으로 실행 +‣ 정기적 감사를 통해 높은 +가치의 데이터를 찾고, +접근제어 분석 +‣ 접근제어 적용 및 백업 +보증을 위한 제한된 +범위의 자동화된 통합 +‣ 일관되고 계층화된 +방식의 자동화 +‣ 높은 가치의 데이터에 +대한 엄격한 접근제어 +자동 집행 +‣ 높은 가치의 데이터는 +모두 저장 위치에 +관계없이 백업됨 +‣ 데이터 목록은 자동으로 +업데이트 +8  AI 기술은 데이터의 비정상적인 사용을 탐지하고 경고하는데 활용될 수 있으며, 이때 DRM에 걸린 권한을 자동으로 변경한다거나 키를 +변경하는 등의 기술 통합을 통한 대응도 가능할 수 있음 + +| 기능 | 기존 | 초기 | 향상 | 최적화 | +| --- | --- | --- | --- | --- | +| 데이터 목록 관리 | ‣ 데이터를 수동으로 분류하고 데이터 목록 작업이 부실하여, 일관 되지 않은 데이터 분류 | ‣ 일부 자동화된 추적을 기반으로, 수동으로 데이터 목록 작업 수행. 수동·정적인 방식을 조합하여 데이터 분류 | ‣ 데이터 목록 자동화 및 데이터 사용 패턴 분석 기술 적용 | ‣ 강력한 태그 작업 및 추적으로 지속적인 목록 작업. 기계 학습 모델을 사용하여 분류 강화 | +| 접근 결정 방법 | ‣ 정적 접근제어를 사용하여 데이터 접근 관리 | ‣ 최소한의 권한 요소 등을 통합한 데이터 접근 | ‣ 식별자, 기기 위험도 및 기타 속성을 고려하는 최소 권한 제어 기법을 사용 하여 데이터 접근 관리 | ‣ 데이터 접근은 적시·최소권한 원칙 및 지속적인 위험기반 결정을 지원하며, 동적으로 이루어짐 | +| 데이터 암호화 (가이드 라인 1.0의 암호화) | ‣ 온프레미스 데이터 저장소에 암호화되지 않은 상태로 데이터 저장 | ‣ 클라우드 혹은 원격 환경에서 암호화 저장 | ‣ 저장소의 모든 데이터 암호화 | ‣ 사용 중인 데이터 암호화 ‣ 조직 차원의 안전한 키 관리를 위한 최소 권한 원칙 ‣ 최신 표준을 사용한 암호화 적용 및 암호 민첩성 ‣ DRM과 AI 기반 기술 통합8 | +| 데이터 분류 | ‣ 제한된 임시 데이터 분류 ‣ 데이터 태깅 및 라벨링 표준 정의 | ‣ 정의된 레이블 및 수동 메커니즘을 통한 데이터 분류 | ‣ 단순화·구조화된 형식을 통한 데이터 분류 ‣ 레이블 지정 프로세스 계층화 및 일부 자동화 | ‣ 데이터 분류 및 레이블 지정 자동화 ‣ 데이터 태깅 및 라벨링에 대한 분석 수행 자동화 | +| 데이터 손실 방지 | ‣ DLP 솔루션을 배포하기 위한 범위 지정 ‣ 민감한 데이터를 식별하는 기술이 확립 | ‣ DLP 솔루션은 검사 적용 지점에 배포 ‣ DLP 솔루션은 모니터링 수준으로 활용 | ‣ DLP 솔루션 결과 분석, 정책 미세 조정을 통한 관리 ‣ DLP 솔루션읕 통하여 데이터 유출 방지 | ‣ 자동화된 데이터 모니터링을 통해 추가 DLP 배포에 대한 누락된 시행 지점 식별 ‣ 자동화된 데이터 태그를 활용하여 민감한 데이터 식별 | +| 가시성 및 분석 | ‣ 특정 상황을 제외하고는, 유용한 가시성 및 분석을 방해하는 제한된 데이터 목록 보유 | ‣ 대부분 데이터는 목록화되어 마지막 목록 업데이트 이후 관리 가능. 분석은 평문 데이터에 한정됨 | ‣ 자동화된 분석 및 상관 관계 분석, 예측 분석 등의 기능 사용 | ‣ 데이터는 목록화되어 언제든지 관리 가능 ‣ 의심스러운 행위에 대한 모든 접근 이벤트 로그 및 분석 ‣ 암호화된 데이터에 분석 수행 | +| 자동화 및 통합 | ‣ 자동화 및 통합을 어렵게 하는, 일관되지 않은 분류 및 레이블 지정. 일부 데이터 관리 작업은 자동으로 실행 | ‣ 정기적 감사를 통해 높은 가치의 데이터를 찾고, 접근제어 분석 ‣ 접근제어 적용 및 백업 보증을 위한 제한된 범위의 자동화된 통합 | ‣ 일관되고 계층화된 방식의 자동화 | ‣ 높은 가치의 데이터에 대한 엄격한 접근제어 자동 집행 ‣ 높은 가치의 데이터는 모두 저장 위치에 관계없이 백업됨 ‣ 데이터 목록은 자동으로 업데이트 | + + +## 제2절 + +제로트러스트 성숙도 모델 기반 보안 세부역량 +제로트러스트의 도입과 아키텍처 설계에 있어 성숙도 모델의 활용은 매우 중요하지만, +개념적으로 정의된 현재의 제로트러스트 성숙도 모델은 여전히 고수준에서 머물러 있다. 기업의 +보안 담당자들이 제로트러스트를 조직에 이를 실질적으로 도입하는 과정에서 제로트러스트 성숙도 +모델이 갖는 모호성과 추상성 때문에 제로트러스트의 원칙을 명확히 이해하고 구체적인 정책이나 +기술적 구현으로 전환하는 데 큰 어려움을 초래한다. +이 때문에 현재는 대부분 성숙도 모델을 기업의 보안 수준을 평가하는 도구의 역할로 활용하는데 +머물러 있다. 예를 들어, 준비 단계에서 초기 단계로의 전환 시 요구되는 세부적인 기술적 요건이나, +기업의 어떤 부분에 집중적으로 자원을 투입해야 하는지에 대한 구체적인 지침이 있어야 하지만 +기존의 제로트러스트 성숙도 모델이 단계별로 제시하는 보안 조치들은 일반적인 권고사항 수준에서 +끝나는 경우가 많다. 각 단계에서 구체적으로 어떤 기술을 도입하고, 어떤 절차를 마련해야 +하는지에 대한 가이드가 부족하다면 기업 내 제로트러스트 구현이 체계적이고 일관되게 진행되지 +못할 가능성이 크다. +이 때문에 정보보호 담당자들은 막연한 목표를 가지고 많은 시행착오를 겪게 되며, 기업 내에서 +제로트러스트 모델을 성공적으로 구현하는 데 필요한 시간과 자원이 과도하게 소모될 수 있다. +따라서, 제로트러스트 성숙도 모델은 단순한 평가 도구에서 벗어나, 정보보호 담당자들이 이를 +기반으로 실질적인 보안 전략을 세울 수 있도록 더욱 세부적이고 구체적인 정의가 필요하다. 각 +단계별로 요구되는 기술적 요건과 절차적 요소들을 명확하게 제시하고, 기업의 특성과 상황에 +맞게 이를 어떻게 적용할 수 있는지에 대한 구체적인 예시와 사례가 필요하다. 또한, 성숙도 모델을 +따르는 과정에서 예상되는 도전과 이를 극복하기 위한 전략들까지 포함하여 보다 실질적이고 +실무적인 가이드라인을 제공함으로써, 정보보호 담당자들이 제로트러스트의 원칙을 효과적으로 +기업에 구현할 수 있도록 도와야 한다. + +52 | 제로트러스트 가이드라인 2.0 +미 국방부는 제로트러스트 참조 아키텍처 및 전략, 로드맵 문서에서 제로트러스트 역량 +(Capability)9을 제시하고 있으며, 이는 앞에서 언급한 <표 3-4>부터 <표 3-9>까지 정의한 기능 및 +CISA 성숙도 모델에서 제안하는 기능(Function)과는 개념이 다소 다르다. +이들을 고려하여, 본 문서에서는 제로트러스트 성숙도 모델의 모호성과 추상성을 극복하고 +정보보호 담당자들이 더 명확하고 구체적인 지침을 따를 수 있도록 세부역량(Capability)을 +제안한다. 세부역량은 소프트웨어·하드웨어 구현까지 고려하여 구체적으로 정의를 내리는 것이 +적절하며, 이렇게 구체적 정의 과정을 통하여 기존 성숙도 모델이 가지는 기능이 추상적으로 정의가 +되어있는 한계를 보완할 수 있다. 즉, 세부역량을 구체화하는 과정에서 구체적인 정의와 실행 +방안을 포함하게 되며 이를 통해 성숙도 모델을 보다 실질적이고 적용 가능한 프레임워크로 전환할 +수 있을 것이다. +따라서, 본 문서에서의 세부역량을 활용하면 다양한 보안 요소와 기술적 요건을 명확히 정의하고, +각 요소가 기업의 특정 보안 목표를 달성하기 위해 어떻게 활용될 수 있는지에 대해 상세하게 +설명할 수 있다. 이를 통해 정보보호 담당자들은 각 성숙도 단계에서 필요한 구체적인 보안 조치와 +기술적 요구사항을 명확히 이해할 수 있으며, 기업 내에서 제로트러스트를 체계적이고 효과적으로 +구현하는 데 필요한 실질적인 전략을 수립할 수 있다. 이는 궁극적으로 정보보호 담당자들이 +제로트러스트 원칙을 더욱 정확하게 이해하고, 이를 조직 내에서 성공적으로 구현하는 데 큰 도움이 +될 것이다. 제로트러스트 성숙도 모델 2.0에서 각 핵심 요소별로 가지는 기능 및 그에 따르는 +세부역량을 요약하면 [그림 3-3]과 같으며, <표 3-10>에서는 연계표의 형태로 정리하였다. +9  미 국방부에서 발간한 제로트러스트 참조 아키텍처에서의 산출물은 국방부 아키텍처 프레임워크(DoDAF)에서 유래한다고 언급되어 있다. +즉, 이는 제로트러스트 참조 아키텍처에 사용된 다이어그램, 모델, 설계 청사진 등이 DoDAF의 표준을 따름을 의미하는데, 그에 비추어 +용어 역시 DoDAF의 용어를 따른다고 볼 수 있을 것이다. DoDAF에서의 역량(Capability)은 ‘일련의 작업을 수행하기 위한 수단과 방법의 +조합을 통해 지정된 표준과 조건에서 원하는 효과를 달성할 수 있는 능력’으로 정의가 되어 있으며, 본 가이드라인의 세부역량에 대해서도 +유사한 관점으로 정의하는 것이 적절하다. + + +**[그림 3-3]** 제로트러스트 성숙도 모델 2.0에서 제시한 기능 및 세부역량 + +식별자 관리 + + + + + + + + + + +사용자 +인벤토리 +ID 연계 +및 사용자 +자격 증명 +인증 +다중인증 +(MFA) +지속 +인증 +위험도 평가 +통합 +ICAM +플랫폼 +정책 준수 모니터링 +행동, +컨텍스트 +기반 ID +및 +생체 인식 +접근관리 +조건부 +사용자 +접근 +최소 +권한 +접근 +기기감지 및 +규정 준수 +데이터 접근제어 +사용자 +인벤토리 +위협 대응 +소프트웨어 정의 +네트워킹 +자산 관리 +사용자 +인벤토리 +ID 연계 +및 +사용자 +자격 증명 +기기 위협 보호 +사용자 +인벤토리 +ID 연계 +및 사용자 +자격 증명 +네트워크 세분화 +매크로 +세그멘테이션 +마이크로 +세그멘테이션 +위협 대응 +트래픽 암호화 +트래픽 암호화 +데이터 흐름 매핑 +트래픽 관리 +네트워크 회복성 +네트워크 회복성 +접근통제 +접근통제 +시스템 계정 관리 +PAM +자격 +증명 +관리 +네트워크 분리 정책 +네트워크 세분화 및 +그룹 간 이동 +시스템 보안 및 +정책 관리 +시스템 환경에 따른 +정책 관리 +애플리케이션 접근 +리소스 권한 부여 +및 통합 +애플리케이션 +위협 보호 +지속적인 모니터링 +및 +진행 중인 승인 +접근 가능한 +애플리케이션 +원격 접속 +안전한 +애플리케이션 배포 +안전한 +애플리케이션 +배포 +애플리케이션 +인벤토리 +소프트웨어䞻 +애플리케이션 보안 +안전한 +소프트웨어 +개발 및 통합 +소프트웨어 +위험 관리 +데이터 목록 관리 +데이터 +카탈로그 +위험 정렬 +기업 +데이터 +거버넌스 +접근 결정방법 +데이터 접근제어 +데이터 암호화 +데이터 암호화 +및 권한 관리 +데이터 분류 +데이터 라벨링 +및 태그 지정 +데이터 손실 방지 +데이터 +손실 방지 +(DLP) +데이터 +모니터링 +및 감지 +가시성 및 분석 +모든 관련 활동 기록 +중앙집중적 +보안 정보 및 +이벤트 관리 +보안 위협 분석 +사용자 및 +기기 동작 분석 +위협 인텔리전스 +통합 +자동화된 +동적 정책 +자동화 및 통합 +정책 통합 +중요 프로세스 +자동화 +인공지능 +보안 통합, +자동화 및 대응 +데이터 교환 +표준화 +보안 운영 조정 및 +사고 대응 + +|  | |   | +| --- | --- | --- | +| | | | + + +| 매크로 세그멘테이션 | 마이크로 세그멘테이션 | +| --- | --- | +| 소프트웨어 정의 네트워킹 | | + + +| 안전한 애플리케이션 배포 안전한 애플리케이션 애플리케이션 인벤토리 배포 | | +| --- | --- | +| 안전한 애플리케이션 배포 | 애플리케이션 인벤토리 | + + +| 접근관리 조건부 최소 사용자 권한 접근 접근 | | +| --- | --- | +| 조건부 사용자 접근 | 최소 권한 접근 | + + +| 소프트웨어䞻 애플리케이션 보안 안전한 소프트웨어 소프트웨어 위험 관리 개발 및 통합 | | +| --- | --- | +| 안전한 소프트웨어 개발 및 통합 | 소프트웨어 위험 관리 | + + +54 | 제로트러스트 가이드라인 2.0 + +**[표 3-10]** 제로트러스트 성숙도 모델 2.0 핵심요소, 기능, 세부역량 연계표 + +핵심요소 +기능 +세부역량 + +### 1. 식별자·신원 + + +#### 1.1 식별자 관리 + +1.1.1 사용자 인벤토리 +1.1.2 ID 연계 및 사용자 자격 증명 +1.2 인증 +1.2.1 다중인증 (MFA) +1.2.2 지속 인증 + +#### 1.3 위험도 평가 + +1.3.1 통합 ICAM 플랫폼 +1.3.2 행동, 컨텍스트 기반 ID 및 생체 인식 + +#### 1.4 접근관리 + +1.4.1 조건부 사용자 접근 +1.4.2 최소 권한 접근 +2. 기기 및 엔드포인트 + +#### 2.1 정책 준수 모니터링 + +2.1.1 기기 감지 및 규정 준수 + +#### 2.2 데이터 접근제어 + +2.2.1 실시간 검사를 통한 기기 권한 부여 + +#### 2.3 자산관리 + +2.3.1 기기 인벤토리 +2.3.2 통합 엔드포인트 관리 및 모바일 기기 관리 + +#### 2.4 기기 위협 보호 + +2.4.1 엔드포인트 및 확장된 탐지·대응 (EDR 및 XDR) +2.4.2 자산, 취약성 및 패치 관리 자동화 + +### 3. 네트워크 + + +#### 3.1 네트워크 세분화 + +3.1.1 매크로 세그멘테이션 +3.1.2 마이크로 세그멘테이션 +3.1.3 소프트웨어 정의 네트워킹 + +#### 3.2 위협 대응 + +3.2.1 위협 대응 + +#### 3.3 트래픽 암호화 + +3.3.1 트래픽 암호화 + +#### 3.4 트래픽 관리 + +3.4.1 데이터 흐름 매핑 + +#### 3.5 네트워크 회복성 + +3.5.1 네트워크 회복성 + +### 4. 시스템 + + +#### 4.1 접근통제 + +4.1.1 접근통제 + +#### 4.2 시스템 계정 관리 + +4.2.1 PAM +4.2.2 자격 증명 관리 + +#### 4.3 네트워크 분리 정책 + +4.3.1 네트워크 세분화 및 그룹 간 이동 + +#### 4.4 시스템 보안 및 정책 관리 + +4.4.1 시스템 환경에 따른 정책 관리 +5. 애플리케이션 및 +워크로드 + +#### 5.1 애플리케이션 접근 + +5.1.1 리소스 권한 부여 및 통합 + +#### 5.2 애플리케이션 위협 보호 + +5.2.1 지속적인 모니터링 및 진행 중인 승인 + +#### 5.3 접근 가능한 애플리케이션 + +5.3.1 원격 접속 + +#### 5.4 안전한 애플리케이션 배포 + +5.4.1 안전한 애플리케이션 배포 +5.4.2 애플리케이션 인벤토리 + +#### 5.5 소프트웨어·애플리케이션 보안 + +5.5.1 안전한 소프트웨어 개발 및 통합 +5.5.2 소프트웨어 위험 관리 + +| 핵심요소 | 기능 | 세부역량 | +| --- | --- | --- | +| 1. 식별자·신원 | 1.1 식별자 관리 | 1.1.1 사용자 인벤토리 1.1.2 ID 연계 및 사용자 자격 증명 | +| | 1.2 인증 | 1.2.1 다중인증 (MFA) 1.2.2 지속 인증 | +| | 1.3 위험도 평가 | 1.3.1 통합 ICAM 플랫폼 1.3.2 행동, 컨텍스트 기반 ID 및 생체 인식 | +| | 1.4 접근관리 | 1.4.1 조건부 사용자 접근 1.4.2 최소 권한 접근 | +| 2. 기 기 및 엔드포인트 | 2.1 정책 준수 모니터링 | 2.1.1 기기 감지 및 규정 준수 | +| | 2.2 데이터 접근제어 | 2.2.1 실시간 검사를 통한 기기 권한 부여 | +| | 2.3 자산관리 | 2.3.1 기기 인벤토리 2.3.2 통합 엔드포인트 관리 및 모바일 기기 관리 | +| | 2.4 기기 위협 보호 | 2.4.1 엔 드포인트 및 확장된 탐지·대응 (EDR 및 XDR) 2.4.2 자산, 취약성 및 패치 관리 자동화 | +| 3. 네트워크 | 3.1 네트워크 세분화 | 3.1.1 매크로 세그멘테이션 3.1.2 마이크로 세그멘테이션 3.1.3 소프트웨어 정의 네트워킹 | +| | 3.2 위협 대응 | 3.2.1 위협 대응 | +| | 3.3 트래픽 암호화 | 3.3.1 트래픽 암호화 | +| | 3.4 트래픽 관리 | 3.4.1 데이터 흐름 매핑 | +| | 3.5 네트워크 회복성 | 3.5.1 네트워크 회복성 | +| 4. 시스템 | 4.1 접근통제 | 4.1.1 접근통제 | +| | 4.2 시스템 계정 관리 | 4.2.1 PAM 4.2.2 자격 증명 관리 | +| | 4.3 네트워크 분리 정책 | 4.3.1 네트워크 세분화 및 그룹 간 이동 | +| | 4.4 시스템 보안 및 정책 관리 | 4.4.1 시스템 환경에 따른 정책 관리 | +| 5. 애 플리케이션 및 워크로드 | 5.1 애플리케이션 접근 | 5.1.1 리소스 권한 부여 및 통합 | +| | 5.2 애플리케이션 위협 보호 | 5.2.1 지속적인 모니터링 및 진행 중인 승인 | +| | 5.3 접근 가능한 애플리케이션 | 5.3.1 원격 접속 | +| | 5.4 안전한 애플리케이션 배포 | 5.4.1 안전한 애플리케이션 배포 5.4.2 애플리케이션 인벤토리 | +| | 5.5 소프트웨어·애플리케이션 보안 | 5.5.1 안전한 소프트웨어 개발 및 통합 5.5.2 소프트웨어 위험 관리 | + + +핵심요소 +기능 +세부역량 + +### 6. 데이터 + + +#### 6.1 데이터 목록 관리 + +6.1.1 데이터 카탈로그 위험 정렬 +6.1.2 기업 데이터 거버넌스 + +#### 6.2 접근 결정방법 + +6.2.1 데이터 접근제어 + +#### 6.3 데이터 암호화 + +6.3.1 데이터 암호화 및 권한 관리 + +#### 6.4 데이터 분류 + +6.4.1 데이터 라벨링 및 태그 지정 + +#### 6.5 데이터 손실 방지 + +6.5.1 데이터 손실 방지 (DLP) +6.5.2 데이터 모니터링 및 감지 + +### 7. 가시성 및 분석 (공통) + + +#### 7.1 모든 관련 활동 기록 + + +#### 7.2 중앙집중적 보안 정보 및 이벤트 관리 + + +#### 7.3 보안 위협 분석 + + +#### 7.4 사용자 및 기기 동작 분석 + + +#### 7.5 위협 인텔리전스 통합 + + +#### 7.6 자동화된 동적 정책 + + +### 8. 자동화 및 통합 (공통) + + +#### 8.1 정책 통합 + + +#### 8.2 중요 프로세스 자동화 + + +#### 8.3 인공지능 + + +#### 8.4 보안 통합, 자동화 및 대응 + + +#### 8.5 데이터 교환 표준화 + + +#### 8.6 보안 운영 조정 및 사고 대응 + +단, 여기에서 정의하는 제로트러스트 관점의 세부역량에 대하여 주의할 점은 다음과 같다. 첫째, +여기에서 정의하는 세부역량은 절대적으로 따라야 할 지침으로 이해하는 것은 곤란하며, 참고할 +수 있는 모델로 인식하여야 한다. 각 기업은 여기에서 정의한 세부역량과 성숙도 수준에 따르는 +정의를 참고하되, 각 기업의 상황을 고려하여 어떤 세부역량을 어떤 수준으로 도입할지 정하는 것이 +바람직하다. +둘째, 기업망 핵심 요소에 대한 교차 기능으로 정의한 ‘가시성 및 분석’과 ‘자동화 및 통합’에 +대하여 여기에서는 별도의 핵심 요소로 표현하였다. 이는 보안 세부역량을 구체화할 때 실제 +기술·솔루션 구현을 고려하여야 하기 때문이다. 기능으로 접근할 때에는 이들을 각 기업망 핵심 +요소 안에서 교차 기능으로 정의하여 기술하는 것이 적절하나, 이를 구체화하기 위하여 실제 +제로트러스트 도입 및 기술 개발 과정에서 독립적으로 요구되는 세부역량으로 정의하고자 하는 +접근 철학을 반영한 것이다. 이 접근은 네트워크, 자산, 인증 정보 등 다양한 보안 데이터를 일관성 +있게 수집하고, 이를 통합적으로 분석하며 자동화된 방식으로 보안 관리 및 대응을 가능하게 하는 +데 중점을 둘 수 있다. + +| 핵심요소 | 기능 | 세부역량 | +| --- | --- | --- | +| 6. 데이터 | 6.1 데이터 목록 관리 | 6.1.1 데이터 카탈로그 위험 정렬 6.1.2 기업 데이터 거버넌스 | +| | 6.2 접근 결정방법 | 6.2.1 데이터 접근제어 | +| | 6.3 데이터 암호화 | 6.3.1 데이터 암호화 및 권한 관리 | +| | 6.4 데이터 분류 | 6.4.1 데이터 라벨링 및 태그 지정 | +| | 6.5 데이터 손실 방지 | 6.5.1 데이터 손실 방지 (DLP) 6.5.2 데이터 모니터링 및 감지 | +| 7. 가시성 및 분석 (공통) | | 7.1 모든 관련 활동 기록 7.2 중앙집중적 보안 정보 및 이벤트 관리 7.3 보안 위협 분석 7.4 사용자 및 기기 동작 분석 7.5 위협 인텔리전스 통합 7.6 자동화된 동적 정책 | +| 8. 자동화 및 통합 (공통) | | 8.1 정책 통합 8.2 중요 프로세스 자동화 8.3 인공지능 8.4 보안 통합, 자동화 및 대응 8.5 데이터 교환 표준화 8.6 보안 운영 조정 및 사고 대응 | + + +56 | 제로트러스트 가이드라인 2.0 + +### 1. 식별자·신원 + +가. 식별자 관리 +식별자 관리는 제로트러스트 보안의 출발점이다. 기업은 모든 사용자의 신원을 정확하게 +파악하고 관리하는 것이 기본이기 때문에, 사용자 인벤토리와 ID 연계 세부역량을 우선적으로 +도입해야 한다. 자격 증명은 사용자의 신원을 확인하는 핵심적인 요소로서, 적절한 방식으로 +자격 증명을 관리하지 않으면 보안이 근본적으로 약화된다. 이 단계에서의 목표는 기업 내에서 +모든 사용자를 신뢰할 수 있도록 식별을 명확히 하고, 여러 시스템 간의 통합된 신원 관리를 통해 +일관성을 유지하는 것이다. + +**[표 3-11]** 식별자·신원 핵심 요소의 식별자 관리 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +사용자 +인벤토리 +사용자 인벤토리는 시스템에 +접근하는 모든 사용자와 그들의 +권한을 기록하고 관리하는 +시스템이다. 이 기능은 사용자에 +대한 정확하고 최신 정보를 +제공하여 적절한 접근제어를 +가능하게 한다. +기존 +‣ 사용자 목록을 수집하고 기록하기 시작 +‣ 기본적인 사용자 정보 관리 및 문서화 +초기 +‣ 사용자의 역할 및 권한을 포함한 상세 인벤토리 구축 +‣ 주기적인 검토와 업데이트 절차 설정 +향상 +‣ 자동화된 인벤토리 관리 도구 도입을 통한 사용자 데이터 정확성 +보장 +‣ ID 통합 관리 시스템을 구축 +‣ 비정상적인 사용자 활동 탐지 기능 추가 +최적화 +‣ 인벤토리 통합을 통한 기업 전반의 사용자 및 권한 관리 최적화 +‣ 인공지능 기반 분석을 수행하여 사용자 행동 예측 및 대응 전략 +강화 +ID +연계 및 +사용자 +자격 +증명 +여러 시스템 간의 사용자 +자격 증명과 인증을 통합하는 +프로세스로, 처음에는 ID 생명주기 +관리(ILM) 프로세스를 표준화하고, +표준 조직 IDP 솔루션과 +통합하는 데 초점을 맞춘다. 이를 +완료한 후, 단일 솔루션이나 ID +연계(Federation)를 통해 기업용 +ILM 프로세스·솔루션을 구축하는 +것으로 전환된다. +기존 +‣ 기본적인 ID 연계 솔루션을 설정 및 자격 증명 통합 시작 +‣ 중앙에서 사용자 인증 정보 관리 +초기 +‣ 여러 시스템 간 자격 증명 연동으로 사용자 경험 통합 +‣ 기업 내외부 시스템과의 연동 강화 +향상 +‣ 다양한 ID 제공자 통합을 통한 ID 연계 확대 +‣ 보안 프로토콜 강화로 데이터 보호 개선 +최적화 +‣ 글로벌 수준의 ID 연계 구현을 통한 통합 사용자 경험 제공 +‣ ID 연계 정책 및 프로세스의 지속적인 최적화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 사용자 인벤토리 | 사용자 인벤토리는 시스템에 접근하는 모든 사용자와 그들의 권한을 기록하고 관리하는 시스템이다. 이 기능은 사용자에 대한 정확하고 최신 정보를 제공하여 적절한 접근제어를 가능하게 한다. | 기존 | ‣ 사용자 목록을 수집하고 기록하기 시작 ‣ 기본적인 사용자 정보 관리 및 문서화 | +| | | 초기 | ‣ 사용자의 역할 및 권한을 포함한 상세 인벤토리 구축 ‣ 주기적인 검토와 업데이트 절차 설정 | +| | | 향상 | ‣ 자동화된 인벤토리 관리 도구 도입을 통한 사용자 데이터 정확성 보장 ‣ ID 통합 관리 시스템을 구축 ‣ 비정상적인 사용자 활동 탐지 기능 추가 | +| | | 최적화 | ‣ 인벤토리 통합을 통한 기업 전반의 사용자 및 권한 관리 최적화 ‣ 인공지능 기반 분석을 수행하여 사용자 행동 예측 및 대응 전략 강화 | +| ID 연계 및 사용자 자격 증명 | 여러 시스템 간의 사용자 자격 증명과 인증을 통합하는 프로세스로, 처음에는 ID 생명주기 관리(ILM) 프로세스를 표준화하고, 표준 조직 IDP 솔루션과 통합하는 데 초점을 맞춘다. 이를 완료한 후, 단일 솔루션이나 ID 연계(Federation)를 통해 기업용 ILM 프로세스·솔루션을 구축하는 것으로 전환된다. | 기존 | ‣ 기본적인 ID 연계 솔루션을 설정 및 자격 증명 통합 시작 ‣ 중앙에서 사용자 인증 정보 관리 | +| | | 초기 | ‣ 여러 시스템 간 자격 증명 연동으로 사용자 경험 통합 ‣ 기업 내외부 시스템과의 연동 강화 | +| | | 향상 | ‣ 다양한 ID 제공자 통합을 통한 ID 연계 확대 ‣ 보안 프로토콜 강화로 데이터 보호 개선 | +| | | 최적화 | ‣ 글로벌 수준의 ID 연계 구현을 통한 통합 사용자 경험 제공 ‣ ID 연계 정책 및 프로세스의 지속적인 최적화 | + + +나. 인증 +기업의 보안 강도를 더욱 높이기 위해 다중인증(MFA)과 지속 인증 세부역량을 도입한다. 단일 +인증 방식은 공격자가 쉽게 타겟으로 삼을 수 있으므로, 사용자에게 추가적인 인증 방법을 요구하는 +MFA는 필수적이다. 지속 인증은 사용자가 처음 인증을 받은 후에도, 시스템이 지속적으로 그들의 +신원을 확인하는 방식으로 보안을 강화한다. + +**[표 3-12]** 식별자·신원 핵심 요소의 인증 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +다중인증 +(MFA) +사용자가 시스템에 접근하기 위해 +두 개 이상의 인증 방법을 요구하는 +보안 조치로, 중앙집중적 사용자 +관리를 가능하게 하기 위해 MFA와 +식별자 제공자(Identity Provider)를 +도입하는 데 초점을 맞춘다. 성숙도 +수준이 높아짐에 따라 대체 가능하고 +유연한 MFA 방식을 적용하여 내부 +사용자와 외부 사용자에게 접근을 +제공하는데 사용될 수 있도록 한다. +기존 +‣ 기본적인 패스워드 방식과 함께 MFA 도입 및 설정 (예: SMS +코드, 이메일 확인) +‣ MFA 지원 시스템 구축 +초기 +‣ 다양한 MFA 방법 구현으로 보안 수준 강화 (예: 인증 앱, +하드웨어 토큰) +‣ MFA 정책 표준화 및 적용 +‣ FIDO 기반 인증 기법 적용 +향상 +‣ 상황에 맞춘 맞춤형 MFA 기능 제공 및 새로운 인증 방법 지속 +도입 +‣ MFA 절차 자동화 및 사용자 경험 최적화 +‣ 컨텍스트 기반 ID 인증 방식 채택 +최적화 +‣ 비정상적인 로그인 시도 실시간 탐지 및 대응 +‣ MFA 기반 고급 보안 정책 설정 +‣ 이상 행위 발생 시 자동 재인증 요구 등 지속적 신원 검증 수행 +지속 +인증 +제로트러스트가 도입되면 지속적인 +속성 기반 인증(Continuous +Attribute-Based +Authentication)으로 체계적으로 +이동할 것이다. 초기에는 기존의 +단일 인증을 기업에서 승인한 +IDP와 사용자 및 그룹을 기준으로 +표준화하는 데 초점을 맞추고, 둘째 +단계에서는 시간 기반의 규칙 기반 +인증을 추가하며, 궁극적으로 +애플리케이션·소프트웨어 활동 +및 요청된 권한에 기반한 지속 +인증으로 발전하게 된다. +기존 +‣ 세션 기반 인증 +‣ 사용자 행동 및 접속 상태 모니터링 +초기 +‣ 모니터링을 통한 이상행위 탐지 및 추가 인증 요구 +‣ 사용자 세션 중 추가 인증 요구 시스템 도입 +향상 +‣ 동적 인증 기술 적용으로 실시간 인증 상태 조정 +‣ 지속 인증을 위한 고급 분석 및 경고 기능 통합 +최적화 +‣ 이상 행위 탐지 시 세션 종료 또는 재인증 요구 등 동적 자동 +인증 상태 조정 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 다중인증 (MFA) | 사용자가 시스템에 접근하기 위해 두 개 이상의 인증 방법을 요구하는 보안 조치로, 중앙집중적 사용자 관리를 가능하게 하기 위해 MFA와 식별자 제공자(Identity Provider)를 도입하는 데 초점을 맞춘다. 성숙도 수준이 높아짐에 따라 대체 가능하고 유연한 MFA 방식을 적용하여 내부 사용자와 외부 사용자에게 접근을 제공하는데 사용될 수 있도록 한다. | 기존 | ‣ 기본적인 패스워드 방식과 함께 MFA 도입 및 설정 (예: SMS 코드, 이메일 확인) ‣ MFA 지원 시스템 구축 | +| | | 초기 | ‣ 다양한 MFA 방법 구현으로 보안 수준 강화 (예: 인증 앱, 하드웨어 토큰) ‣ MFA 정책 표준화 및 적용 ‣ FIDO 기반 인증 기법 적용 | +| | | 향상 | ‣ 상황에 맞춘 맞춤형 MFA 기능 제공 및 새로운 인증 방법 지속 도입 ‣ MFA 절차 자동화 및 사용자 경험 최적화 ‣ 컨텍스트 기반 ID 인증 방식 채택 | +| | | 최적화 | ‣ 비정상적인 로그인 시도 실시간 탐지 및 대응 ‣ MFA 기반 고급 보안 정책 설정 ‣ 이상 행위 발생 시 자동 재인증 요구 등 지속적 신원 검증 수행 | +| 지속 인증 | 제로트러스트가 도입되면 지속적인 속성 기반 인증(Continuous Attribute-Based Authentication)으로 체계적으로 이동할 것이다. 초기에는 기존의 단일 인증을 기업에서 승인한 IDP와 사용자 및 그룹을 기준으로 표준화하는 데 초점을 맞추고, 둘째 단계에서는 시간 기반의 규칙 기반 인증을 추가하며, 궁극적으로 애플리케이션·소프트웨어 활동 및 요청된 권한에 기반한 지속 인증으로 발전하게 된다. | 기존 | ‣ 세션 기반 인증 ‣ 사용자 행동 및 접속 상태 모니터링 | +| | | 초기 | ‣ 모니터링을 통한 이상행위 탐지 및 추가 인증 요구 ‣ 사용자 세션 중 추가 인증 요구 시스템 도입 | +| | | 향상 | ‣ 동적 인증 기술 적용으로 실시간 인증 상태 조정 ‣ 지속 인증을 위한 고급 분석 및 경고 기능 통합 | +| | | 최적화 | ‣ 이상 행위 탐지 시 세션 종료 또는 재인증 요구 등 동적 자동 인증 상태 조정 | + + +58 | 제로트러스트 가이드라인 2.0 +다. 위험도 평가 +위험도 평가는 보안 수준을 한층 더 강화하는 것을 목표로 한다. 다양한 데이터와 행동 패턴을 +기반으로, 사용자의 신뢰도를 실시간으로 평가하는 것이다. 통합 ICAM 플랫폼을 통해 기업은 ID +관리와 접근 관리를 통합적으로 처리하며, 행동, 상황적 ID 및 생체 인식과 같은 고도화된 기술을 +도입해 사용자의 행동 패턴을 분석하고, 상황에 따라 더 정밀하게 보안을 적용할 수 있다. + +**[표 3-13]** 식별자·신원 핵심 요소의 위험도 평가 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +통합 +ICAM +플랫폼 +통합 ICAM 플랫폼은 식별자, 자격 +증명, 접근 관리 기능을 중앙에서 +통합하여 관리하는 시스템이다. +기업 수준의 식별자 관리 및 +공개키 인프라(PKI) 시스템을 +활용하여 네트워크 전반에 걸쳐 +사용자, 관리자 및 비인간개체 +식별자를 추적하고, 접근이 필요한 +자와 적절한 권한을 가진 자로 +제한되도록 보장하여야 한다. +기업은 자격 증명 관리 시스템, +식별자 거버넌스 및 관리 도구, +접근 관리 도구를 통해 접근권한이 +필요하고 적절한지 검증하여야 +한다. +기존 +‣ 기본적인 ICAM 시스템 구축 및 주요 기능 통합 +‣ 초기 사용자 및 권한 관리 설정 +‣ 위험도 평가가 적용되지 않은 사용자 권한 관리 +초기 +‣ ICAM 시스템 기능 확장 및 중앙 집중형 관리와 모니터링 구현 +‣ 사용자 인증 및 접근 관리 정책 표준화 +‣ 사용자 및 권한 관리에 대한 기본적인 위험도 평가 도입 +향상 +‣ 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼 강화 +‣ 고급 분석 및 자동화 기능 도입으로 ICAM 최적화 +‣ 다양한 사용자 그룹과 역할에 따른 고도화된 위험도 평가 적용 +최적화 +‣ AI 기반 ICAM 플랫폼을 통한 실시간 보안 강화 +‣ 통합 ICAM 솔루션을 통해 보안 정책과 절차 지속 개선 및 +최적화 +‣ AI 기반의 실시간 위험도 평가로 모든 사용자 권한 관리 최적화 +행동, +컨텍스트 +기반 ID +및 생체 +인식 +사용자의 행동 패턴, 컨텍스트, +생체 데이터를 활용하여 인증 및 +접근제어를 강화하는 기술이다. +기업 IDP를 활용하여 기본 +사용자 속성으로 사용자 및 개체 +행동 분석(UEBA)을 활성화 +한다. UEBA를 PAM 및 적시/ +최소권한접근(JIT/JEA) 시스템과 +통합하여 이상 행위 및 악의적인 +활동을 보다 효과적으로 탐지할 수 +있다. +기존 +‣ 기본적인 생체 인식 기술 도입 (예: 지문, 얼굴 인식) +‣ 사용자 행동 패턴 기록 및 수동 분석 시작 +초기 +‣ 행동 및 생체 인식 기술 통합으로 인증 절차 강화 +‣ 컨텍스트 기반 접근권한 조정 +향상 +‣ 고급 행동 분석 및 생체 인식 기술을 통한 인증 정확도 향상 +‣ 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정 +최적화 +‣ AI 기반 행동 분석 및 생체 인식 솔루션을 통한 고도화된 보안 +제공 +‣ 새로운 기술 도입을 통한 인증 절차 지속 최적화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 통합 ICAM 플랫폼 | 통합 ICAM 플랫폼은 식별자, 자격 증명, 접근 관리 기능을 중앙에서 통합하여 관리하는 시스템이다. 기업 수준의 식별자 관리 및 공개키 인프라(PKI) 시스템을 활용하여 네트워크 전반에 걸쳐 사용자, 관리자 및 비인간개체 식별자를 추적하고, 접근이 필요한 자와 적절한 권한을 가진 자로 제한되도록 보장하여야 한다. 기업은 자격 증명 관리 시스템, 식별자 거버넌스 및 관리 도구, 접근 관리 도구를 통해 접근권한이 필요하고 적절한지 검증하여야 한다. | 기존 | ‣ 기본적인 ICAM 시스템 구축 및 주요 기능 통합 ‣ 초기 사용자 및 권한 관리 설정 ‣ 위험도 평가가 적용되지 않은 사용자 권한 관리 | +| | | 초기 | ‣ ICAM 시스템 기능 확장 및 중앙 집중형 관리와 모니터링 구현 ‣ 사용자 인증 및 접근 관리 정책 표준화 ‣ 사용자 및 권한 관리에 대한 기본적인 위험도 평가 도입 | +| | | 향상 | ‣ 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼 강화 ‣ 고급 분석 및 자동화 기능 도입으로 ICAM 최적화 ‣ 다양한 사용자 그룹과 역할에 따른 고도화된 위험도 평가 적용 | +| | | 최적화 | ‣ AI 기반 ICAM 플랫폼을 통한 실시간 보안 강화 ‣ 통합 ICAM 솔루션을 통해 보안 정책과 절차 지속 개선 및 최적화 ‣ AI 기반의 실시간 위험도 평가로 모든 사용자 권한 관리 최적화 | +| 행동, 컨텍스트 기반 ID 및 생체 인식 | 사용자의 행동 패턴, 컨텍스트, 생체 데이터를 활용하여 인증 및 접근제어를 강화하는 기술이다. 기업 IDP를 활용하여 기본 사용자 속성으로 사용자 및 개체 행동 분석(UEBA)을 활성화 한다. UEBA를 PAM 및 적시/ 최소권한접근(JIT/JEA) 시스템과 통합하여 이상 행위 및 악의적인 활동을 보다 효과적으로 탐지할 수 있다. | 기존 | ‣ 기본적인 생체 인식 기술 도입 (예: 지문, 얼굴 인식) ‣ 사용자 행동 패턴 기록 및 수동 분석 시작 | +| | | 초기 | ‣ 행동 및 생체 인식 기술 통합으로 인증 절차 강화 ‣ 컨텍스트 기반 접근권한 조정 | +| | | 향상 | ‣ 고급 행동 분석 및 생체 인식 기술을 통한 인증 정확도 향상 ‣ 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정 | +| | | 최적화 | ‣ AI 기반 행동 분석 및 생체 인식 솔루션을 통한 고도화된 보안 제공 ‣ 새로운 기술 도입을 통한 인증 절차 지속 최적화 | + + +라. 접근 관리 +접근 관리에서는 조건부 사용자 접근과 최소 권한 접근과 같은 보안 기능이 적용된다. 조건부 +사용자 접근은 사용자가 접속하는 위치, 시간, 기기 상태 등을 고려해 접근을 동적으로 허용하거나 +차단하는 기능으로, 실시간 보안 제어가 가능하다. 최소 권한 접근은 모든 사용자가 업무에 필요한 +최소한의 권한만 부여받도록 하여, 기업망 전체의 공격 표면을 줄이는 방식이다. + +**[표 3-14]** 식별자·신원 핵심 요소의 접근 관리 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +조건부 +사용자 +접근 +사용자의 위치, 기기 상태, 시간대 +등 다양한 조건에 따라 접근권한을 +동적으로 조정하는 기능이다. +ICAM 전반에 걸친 전통적인 역할 +기반 접근제어에서 시작하여, +애플리케이션 중심의 역할로 +확장되며, 궁극적으로는 동적 접근 +규칙을 제공하기 위해 기업 속성을 +활용한다. +기존 +‣ 조건부 접근 정책의 기본 개념 정의 및 구현 +‣ 사용자 활동 및 조건 수집을 위한 기초 시스템 구축 +‣ 시스템별 개별 접근 관리 기능 보유 +초기 +‣ 통합 관리 기능 및 정책 기반 특정 조건에서 사용자 접근제어 +‣ 시간 및 위치 기반 접근제어를 통해 최소 권한 원칙 적용 +향상 +‣ 정교한 조건과 규칙을 활용한 다단계 접근 정책 구현 +‣ 조건에 따른 실시간 접근 결정 자동화 +‣ 세션별 별도의 접근 지원 +최적화 +‣ 고급 분석 및 ML을 활용한 사용자 행동과 환경 기반 정교한 +조건부 접근 제공 +‣ 동적 접근 정책을 실시간으로 조정 및 최적화 +최소 +권한 +접근 +사용자가 수행하는 작업에 필요한 +최소한의 권한만 부여하여, 타 +리소스 및 워크로드에 대한 접근을 +제한하는 방식이다. 이를 통하여 +리소스 탈취 등을 최소화할 수 있다. +기존 +‣ 최소 권한 원칙 정의 및 적용 가능한 시스템 구축 +‣ 권한 부여 절차 문서화 및 시작 +초기 +‣ 권한 부여 절차 표준화 및 역할 기반 권한 부여 +‣ 권한 요청 및 변경 관리 시스템 도입 +향상 +‣ 권한 요청 및 사용에 대한 자동화된 모니터링과 분석 구현 +‣ 권한 관리 정책 지속적 검토 및 업데이트 +최적화 +‣ 권한 관리 정책 동적 변경 및 최소 권한 부여 구현 +‣ 최소 권한 원칙 전사적 적용 및 실시간 조정 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 조건부 사용자 접근 | 사용자의 위치, 기기 상태, 시간대 등 다양한 조건에 따라 접근권한을 동적으로 조정하는 기능이다. ICAM 전반에 걸친 전통적인 역할 기반 접근제어에서 시작하여, 애플리케이션 중심의 역할로 확장되며, 궁극적으로는 동적 접근 규칙을 제공하기 위해 기업 속성을 활용한다. | 기존 | ‣ 조건부 접근 정책의 기본 개념 정의 및 구현 ‣ 사용자 활동 및 조건 수집을 위한 기초 시스템 구축 ‣ 시스템별 개별 접근 관리 기능 보유 | +| | | 초기 | ‣ 통합 관리 기능 및 정책 기반 특정 조건에서 사용자 접근제어 ‣ 시간 및 위치 기반 접근제어를 통해 최소 권한 원칙 적용 | +| | | 향상 | ‣ 정교한 조건과 규칙을 활용한 다단계 접근 정책 구현 ‣ 조건에 따른 실시간 접근 결정 자동화 ‣ 세션별 별도의 접근 지원 | +| | | 최적화 | ‣ 고급 분석 및 ML을 활용한 사용자 행동과 환경 기반 정교한 조건부 접근 제공 ‣ 동적 접근 정책을 실시간으로 조정 및 최적화 | +| 최소 권한 접근 | 사용자가 수행하는 작업에 필요한 최소한의 권한만 부여하여, 타 리소스 및 워크로드에 대한 접근을 제한하는 방식이다. 이를 통하여 리소스 탈취 등을 최소화할 수 있다. | 기존 | ‣ 최소 권한 원칙 정의 및 적용 가능한 시스템 구축 ‣ 권한 부여 절차 문서화 및 시작 | +| | | 초기 | ‣ 권한 부여 절차 표준화 및 역할 기반 권한 부여 ‣ 권한 요청 및 변경 관리 시스템 도입 | +| | | 향상 | ‣ 권한 요청 및 사용에 대한 자동화된 모니터링과 분석 구현 ‣ 권한 관리 정책 지속적 검토 및 업데이트 | +| | | 최적화 | ‣ 권한 관리 정책 동적 변경 및 최소 권한 부여 구현 ‣ 최소 권한 원칙 전사적 적용 및 실시간 조정 | + + +60 | 제로트러스트 가이드라인 2.0 + +### 2. 기기 및 엔드포인트 + +가. 정책 준수 모니터링 +기업 내 기기들이 보안 정책을 준수하고 있는지 모니터링하는 기능을 도입한다. 기기 감지 및 +규정 준수는 네트워크에 연결된 모든 기기를 탐지하고, 보안 규정을 준수하는지 확인해 정책 위반을 +예방하는 것이 핵심이다. + +**[표 3-15]** 기기 및 엔드포인트 핵심 요소의 정책 준수 모니터링 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +기기 +감지 및 +규정 +준수 +네트워크에 연결된 기기가 기업 +보안 규정을 준수하는지 확인하고, +비준수 기기를 탐지하여 경고하는 +시스템이다. +기존 +‣ 기기 감지 기능을 구축하여 리소스에 연결된 기기를 식별 +‣ 초기 규정 준수 요구 사항을 설정하고, 수동으로 준수 여부를 +확인 +초기 +‣ 자동화된 감지 시스템을 도입하여 실시간으로 기기를 탐지하고 +규정 준수를 평가 +‣ 비준수 기기에 대한 경고 및 접근 제한 기능 설정 +향상 +‣ 규정 준수 평가를 정교화하여 다양한 규정 기준을 적용 +‣ 자동으로 교정 조치를 취할 수 있는 기능 추가 +‣ 규정 준수 상태를 지속적으로 모니터링하고, 규정 준수에 따른 +접근권한 부여 +최적화 +‣ AI를 활용하여 기기 규정 준수 평가를 최적화하고, 실시간으로 +조치 자동화 +‣ 규정 준수 데이터와 보안 분석을 통합하여 기기 보안 강화 +‣ 규정 준수 여부에 따라 동적으로 권한 수정 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 기기 감지 및 규정 준수 | 네트워크에 연결된 기기가 기업 보안 규정을 준수하는지 확인하고, 비준수 기기를 탐지하여 경고하는 시스템이다. | 기존 | ‣ 기기 감지 기능을 구축하여 리소스에 연결된 기기를 식별 ‣ 초기 규정 준수 요구 사항을 설정하고, 수동으로 준수 여부를 확인 | +| | | 초기 | ‣ 자동화된 감지 시스템을 도입하여 실시간으로 기기를 탐지하고 규정 준수를 평가 ‣ 비준수 기기에 대한 경고 및 접근 제한 기능 설정 | +| | | 향상 | ‣ 규정 준수 평가를 정교화하여 다양한 규정 기준을 적용 ‣ 자동으로 교정 조치를 취할 수 있는 기능 추가 ‣ 규정 준수 상태를 지속적으로 모니터링하고, 규정 준수에 따른 접근권한 부여 | +| | | 최적화 | ‣ AI를 활용하여 기기 규정 준수 평가를 최적화하고, 실시간으로 조치 자동화 ‣ 규정 준수 데이터와 보안 분석을 통합하여 기기 보안 강화 ‣ 규정 준수 여부에 따라 동적으로 권한 수정 | + + +나. 데이터 접근제어 +기기가 리소스에 접근할 때, 실시간으로 검사를 진행해 그 기기에 권한을 부여한다. 실시간 +검사를 통한 기기 권한 부여 기능을 통해 기기가 정상적인 상태에서만 네트워크와 데이터에 접근할 +수 있도록 하여, 보안 위협을 미연에 방지한다. + +**[표 3-16]** 기기 및 엔드포인트 핵심 요소의 데이터 접근제어 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +실시간 +검사를 +통한 +기기 +권한 +부여 +기기가 네트워크에 접근하기 전에 +보안 상태를 평가(NextGen AV, +AppControl, FIM 등 이용)하고, +안전한 기기만 접근을 허용하는 +기능이다. +기존 +‣ 자산 접근 기기 정보 수집 계획 수립 +‣ 초기 보안 기준 설정 +초기 +‣ 기본적인 보안 검사 프로세스를 수립하여 기기가 자산에 +접근하기 전에 수동 검사를 시행 +향상 +‣ 실시간 보안 검사 도구를 도입하여 기기의 상태를 자동으로 평가 +‣ 보안 기준을 충족하는 기기만 접근을 허용 +‣ 검사를 통과하지 못한 기기에 대해 접근 제한을 설정 +최적화 +‣ 실시간 검사를 고도화하여 보다 정교한 보안 기준을 적용하고, +기기의 보안 상태를 지속적으로 평가 +‣ 보안 상태에 따라 실시간으로 기기 접근권한 조정 +‣ AI 기반의 실시간 보안 검사 시스템을 통해 기기의 보안 상태를 +자동으로 평가하고, 실시간으로 대응 +‣ 실시간 검사를 다른 보안 시스템과 통합하여 종합적인 기기 보안 +전략을 구현 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 실시간 검사를 통한 기기 권한 부여 | 기기가 네트워크에 접근하기 전에 보안 상태를 평가(NextGen AV, AppControl, FIM 등 이용)하고, 안전한 기기만 접근을 허용하는 기능이다. | 기존 | ‣ 자산 접근 기기 정보 수집 계획 수립 ‣ 초기 보안 기준 설정 | +| | | 초기 | ‣ 기본적인 보안 검사 프로세스를 수립하여 기기가 자산에 접근하기 전에 수동 검사를 시행 | +| | | 향상 | ‣ 실시간 보안 검사 도구를 도입하여 기기의 상태를 자동으로 평가 ‣ 보안 기준을 충족하는 기기만 접근을 허용 ‣ 검사를 통과하지 못한 기기에 대해 접근 제한을 설정 | +| | | 최적화 | ‣ 실시간 검사를 고도화하여 보다 정교한 보안 기준을 적용하고, 기기의 보안 상태를 지속적으로 평가 ‣ 보안 상태에 따라 실시간으로 기기 접근권한 조정 ‣ AI 기반의 실시간 보안 검사 시스템을 통해 기기의 보안 상태를 자동으로 평가하고, 실시간으로 대응 ‣ 실시간 검사를 다른 보안 시스템과 통합하여 종합적인 기기 보안 전략을 구현 | + + +62 | 제로트러스트 가이드라인 2.0 +다. 자산 관리 +소유하거나 사용하는 모든 기기를 관리하는 것은 기업 입장에서 매우 중요하다. 기기 인벤토리를 +통해 자산 목록을 체계적으로 관리하며, 통합 엔드포인트 관리(UEM) 및 모바일 기기 관리(MDM) +기능을 통해 모든 엔드포인트 기기를 일괄적으로 관리하고 보안을 유지한다. + +**[표 3-17]** 기기 및 엔드포인트 핵심 요소의 자산 관리 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +기기 +인벤토리 +모든 기기의 목록을 작성하고 +관리하는 시스템이다. 이는 기업 +보안을 위해 모든 기기의 상태, +소유자, 위치 등을 정확히 파악할 +수 있게 해준다. 기기 속성에는 +PKI(802.1x) 시스템 인증서, 기기 +개체, 패치·취약성 상태 등을 확인할 +수 있는 기술 세부 정보가 포함된다. +기존 +‣ 기본 인벤토리를 작성하고 수동으로 업데이트 +‣ 주요 기기의 정보를 수집하고 관리 +초기 +‣ 자동화된 기기 인벤토리 시스템을 도입하여 보유한 모든 기기를 +실시간으로 기록 +‣ 기기 유형, 운영체제, 위치 등의 세부 정보를 포함한 정교한 +인벤토리 구축 +향상 +‣ 기기 인벤토리를 지속적으로 업데이트 +‣ 비정상적이거나 승인되지 않은 기기를 탐지하는 기능 추가 +‣ 인벤토리 데이터를 분석하여 보안 취약점을 파악하고 대응 전략 +마련 +최적화 +‣ AI 기반의 인벤토리 관리 솔루션을 활용하여 기기 인벤토리를 +자동화하고 최적화 +‣ 실시간 모니터링 및 예측 분석을 통해 기기 보안을 강화 +통합 +엔드포인트 +관리 및 +모바일 기기 +관리 +모든 엔드포인트와 모바일 기기를 +중앙에서 통합 관리하고, 보안을 +유지하는 기능이다. 이는 원격으로 +관리될 수 있어야 하며, 보안 정책을 +적용할 수 있어야 한다. +기존 +‣ 기본적인 엔드포인트 및 모바일 기기 관리 시스템을 도입하여 +주요 기기를 관리 +‣ 초기 보안 정책 설정 +초기 +‣ 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고, +보안 업데이트를 자동으로 배포 +‣ 기기 상태를 지속적으로 모니터링하여 보안을 유지 +향상 +‣ 모든 엔드포인트와 모바일 기기의 보안을 중앙에서 통합 +관리하고, 고급 보안 정책 적용 +‣ 실시간 모니터링 및 위협 탐지 기능을 추가하여 보안 강화 +최적화 +‣ AI 기반 엔드포인트 및 모바일 기기 관리 솔루션을 통해 보안 +최적화 및 실시간 대응 +‣ 모든 기기 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 +대응 구현 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 기기 인벤토리 | 모든 기기의 목록을 작성하고 관리하는 시스템이다. 이는 기업 보안을 위해 모든 기기의 상태, 소유자, 위치 등을 정확히 파악할 수 있게 해준다. 기기 속성에는 PKI(802.1x) 시스템 인증서, 기기 개체, 패치·취약성 상태 등을 확인할 수 있는 기술 세부 정보가 포함된다. | 기존 | ‣ 기본 인벤토리를 작성하고 수동으로 업데이트 ‣ 주요 기기의 정보를 수집하고 관리 | +| | | 초기 | ‣ 자동화된 기기 인벤토리 시스템을 도입하여 보유한 모든 기기를 실시간으로 기록 ‣ 기기 유형, 운영체제, 위치 등의 세부 정보를 포함한 정교한 인벤토리 구축 | +| | | 향상 | ‣ 기기 인벤토리를 지속적으로 업데이트 ‣ 비정상적이거나 승인되지 않은 기기를 탐지하는 기능 추가 ‣ 인벤토리 데이터를 분석하여 보안 취약점을 파악하고 대응 전략 마련 | +| | | 최적화 | ‣ AI 기반의 인벤토리 관리 솔루션을 활용하여 기기 인벤토리를 자동화하고 최적화 ‣ 실시간 모니터링 및 예측 분석을 통해 기기 보안을 강화 | +| 통합 엔드포인트 관리 및 모바일 기기 관리 | 모든 엔드포인트와 모바일 기기를 중앙에서 통합 관리하고, 보안을 유지하는 기능이다. 이는 원격으로 관리될 수 있어야 하며, 보안 정책을 적용할 수 있어야 한다. | 기존 | ‣ 기본적인 엔드포인트 및 모바일 기기 관리 시스템을 도입하여 주요 기기를 관리 ‣ 초기 보안 정책 설정 | +| | | 초기 | ‣ 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고, 보안 업데이트를 자동으로 배포 ‣ 기기 상태를 지속적으로 모니터링하여 보안을 유지 | +| | | 향상 | ‣ 모든 엔드포인트와 모바일 기기의 보안을 중앙에서 통합 관리하고, 고급 보안 정책 적용 ‣ 실시간 모니터링 및 위협 탐지 기능을 추가하여 보안 강화 | +| | | 최적화 | ‣ AI 기반 엔드포인트 및 모바일 기기 관리 솔루션을 통해 보안 최적화 및 실시간 대응 ‣ 모든 기기 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응 구현 | + + +라. 기기 위협 보호 +기기의 위협을 실시간으로 탐지하고 대응하는 고도화된 보안 기능을 도입한다. 엔드포인트 및 +확장된 탐지 및 대응(EDR 및 XDR)은 기기에 대한 위협을 신속하게 탐지하고 처리하며, 자산, +취약성 및 패치 관리 자동화를 통해 보안 업데이트와 취약성 관리를 자동으로 수행해 보안성을 +강화한다. + +**[표 3-18]** 기기 및 엔드포인트 핵심 요소의 기기 위협 보호 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +엔드포인트 +및 확장된 +탐지·대응 +(EDR 및 +XDR) +엔드포인트와 확장된 영역에서 +실시간으로 위협을 탐지하고 +대응하는 고급 보안 솔루션으로 +이를 이용하여 엔드포인트의 이상 +행위를 탐지해야 한다. +기존 +‣ 기본적인 EDR 솔루션을 도입하여 엔드포인트 위협을 탐지하고 +대응 +‣ 초기 위협 탐지 및 대응 정책 설정 +초기 +‣ EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응 구현 +향상 +‣ XDR 솔루션을 도입하여 네트워크 전반에 걸친 위협 탐지 확대 +‣ 고급 분석 및 ML을 통합하여 위협 탐지 정확도 향상 +최적화 +‣ AI 기반의 EDR·XDR 솔루션을 통해 실시간으로 모든 기기에 +대한 위협을 탐지하고 자동화된 대응 구현 +‣ 위협 인텔리전스를 통합하여 예측 분석 및 사전 대응 전략 수립 +자산, +취약성 +및 패치 +관리 +자동화 +네트워크에 연결된 모든 기기의 +보안 취약점을 관리하고, 최신 +보안 패치를 자동으로 적용하는 +기능이다. +기존 +‣ 자산 및 취약성을 수동으로 평가하고 패치를 수동으로 적용하는 +프로세스 수립 +‣ 주요 자산 및 취약성 목록 작성 +초기 +‣ 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 주요 +자산의 보안 강화 +‣ 취약성 발견 시 자동으로 패치를 적용하는 시스템 구축 +향상 +‣ 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리 자동화 +‣ 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 +종합적인 보안 관리 전략 구현 +최적화 +‣ AI 기반의 예측 분석을 활용하여 취약성을 사전에 식별하고, +자동으로 패치 적용 +‣ 자산 관리, 취약성 평가, 패치 관리를 통합하여 실시간으로 보안 +최적화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 엔드포인트 및 확장된 탐지·대응 (EDR 및 XDR) | 엔드포인트와 확장된 영역에서 실시간으로 위협을 탐지하고 대응하는 고급 보안 솔루션으로 이를 이용하여 엔드포인트의 이상 행위를 탐지해야 한다. | 기존 | ‣ 기본적인 EDR 솔루션을 도입하여 엔드포인트 위협을 탐지하고 대응 ‣ 초기 위협 탐지 및 대응 정책 설정 | +| | | 초기 | ‣ EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응 구현 | +| | | 향상 | ‣ XDR 솔루션을 도입하여 네트워크 전반에 걸친 위협 탐지 확대 ‣ 고급 분석 및 ML을 통합하여 위협 탐지 정확도 향상 | +| | | 최적화 | ‣ AI 기반의 EDR·XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협을 탐지하고 자동화된 대응 구현 ‣ 위협 인텔리전스를 통합하여 예측 분석 및 사전 대응 전략 수립 | +| 자산, 취약성 및 패치 관리 자동화 | 네트워크에 연결된 모든 기기의 보안 취약점을 관리하고, 최신 보안 패치를 자동으로 적용하는 기능이다. | 기존 | ‣ 자산 및 취약성을 수동으로 평가하고 패치를 수동으로 적용하는 프로세스 수립 ‣ 주요 자산 및 취약성 목록 작성 | +| | | 초기 | ‣ 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 주요 자산의 보안 강화 ‣ 취약성 발견 시 자동으로 패치를 적용하는 시스템 구축 | +| | | 향상 | ‣ 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리 자동화 ‣ 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리 전략 구현 | +| | | 최적화 | ‣ AI 기반의 예측 분석을 활용하여 취약성을 사전에 식별하고, 자동으로 패치 적용 ‣ 자산 관리, 취약성 평가, 패치 관리를 통합하여 실시간으로 보안 최적화 | + + +64 | 제로트러스트 가이드라인 2.0 + +### 3. 네트워크 + +가. 네트워크 세분화 +네트워크를 세분화하여 각 영역에 맞는 보안을 적용하는 것이 목표다. 매크로 세그멘테이션은 +네트워크를 큰 단위로 나누어 각 구역 간의 보안을 강화하는 방법이다. 이는 대규모 네트워크에서 +쉽게 적용 가능하며, 내·외부 네트워크를 분리해 보안을 강화하는 데 유용하다. 마이크로 +세그멘테이션은 네트워크를 더욱 세부적으로 나누어 각 구역을 더 세밀하게 보호한다. 이는 내부 +위협에 대응하는 데 효과적이며, 세부적으로 제어된 보안 정책을 적용할 수 있게 한다. 소프트웨어 +정의 네트워킹(SDN)은 클라우드 환경 등에서 네트워크의 트래픽을 소프트웨어로 관리하여, 더욱 +유연하고 효율적인 보안 정책을 적용할 수 있도록 돕는다. 이를 통해 네트워크 상의 모든 트래픽을 +중앙에서 통제하고, 세밀한 보안 제어를 가능하게 한다. + +**[표 3-19]** 네트워크 핵심 요소의 네트워크 세분화 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +매크로 +세그멘테이션 +매크로 세그멘테이션은 네트워크를 +대규모 세그먼트로 나누어 주요 +보안 영역을 구분하는 기술이다. +이는 네트워크 전체를 보호하는 데 +필요한 보안 경계를 설정하는 데 +사용된다. +기존 +‣ 네트워크를 주요 비즈니스 영역별로 분할하여 기본적인 +매크로 세그먼트 설정 +‣ 네트워크 내 주요 자산과 트래픽 흐름을 기반으로 매크로 +세그먼트 구성 +초기 +‣ 매크로 세그먼트를 확장하여 각 세그먼트 간에 보안 정책 +적용 +‣ 경계를 강화하고, 세그먼트 간의 트래픽을 모니터링 및 +비정상적인 활동 탐지 +향상 +‣ 매크로 세그먼트를 보다 세분화하여 보안 관리 정밀도 향상 +‣ 각 세그먼트에 맞춤형 보안 정책 적용 +‣ 매크로 세그먼트 간의 트래픽을 자동으로 조정 및 보안 +위협에 신속 대응 +최적화 +‣ AI 기반 매크로 세그먼트 관리 도구 사용 +‣ 실시간 세그먼트 간 트래픽 분석 및 자동 대응 +‣ 매크로 세그먼트를 동적으로 조정하여 네트워크 보안 최적화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 매크로 세그멘테이션 | 매크로 세그멘테이션은 네트워크를 대규모 세그먼트로 나누어 주요 보안 영역을 구분하는 기술이다. 이는 네트워크 전체를 보호하는 데 필요한 보안 경계를 설정하는 데 사용된다. | 기존 | ‣ 네트워크를 주요 비즈니스 영역별로 분할하여 기본적인 매크로 세그먼트 설정 ‣ 네트워크 내 주요 자산과 트래픽 흐름을 기반으로 매크로 세그먼트 구성 | +| | | 초기 | ‣ 매크로 세그먼트를 확장하여 각 세그먼트 간에 보안 정책 적용 ‣ 경계를 강화하고, 세그먼트 간의 트래픽을 모니터링 및 비정상적인 활동 탐지 | +| | | 향상 | ‣ 매크로 세그먼트를 보다 세분화하여 보안 관리 정밀도 향상 ‣ 각 세그먼트에 맞춤형 보안 정책 적용 ‣ 매크로 세그먼트 간의 트래픽을 자동으로 조정 및 보안 위협에 신속 대응 | +| | | 최적화 | ‣ AI 기반 매크로 세그먼트 관리 도구 사용 ‣ 실시간 세그먼트 간 트래픽 분석 및 자동 대응 ‣ 매크로 세그먼트를 동적으로 조정하여 네트워크 보안 최적화 | + + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +마이크로 +세그멘테이션 +마이크로 세그멘테이션은 +네트워크를 세분화하여 각 +워크로드나 애플리케이션별로 +세그먼트를 설정하는 기술로, 보다 +정밀한 보안 제어를 가능하게 한다. +접속하는 ID 또는 애플리케이션 +접근을 기반으로 네트워크 세분화를 +정의하거나 물리적 세분화를 +수행하고 문서화하여야 한다. 또한 +가능하다면 호스트 수준의 프로세스 +마이크로 세그멘테이션을 수행한다. +기존 +‣ 주요 애플리케이션 및 워크로드 기준 초기 마이크로 +세그먼트 설정 +‣ 수동으로 세그먼트를 구성하고 기본적인 보안 정책 적용 +초기 +‣ 마이크로 세그먼트를 확장하여 맞춤형 보안 정책 자동 적용 +‣ 네트워크 수준에서 마이크로 세그멘테이션 수행 및 워크로드 +간 이동 탐지·차단 +‣ 마이크로 세그먼트 간의 트래픽 모니터링 및 실시간 위협 +탐지 +향상 +‣ 마이크로 세그먼트 관리 자동화 강화 +‣ 모든 네트워크 트래픽에 대한 정밀한 보안 제어 구현 +‣ 애플리케이션 별 격리 메커니즘 적용 및 위협 탐지·대응 +시스템과 통합 +최적화 +‣ AI·ML을 활용하여 마이크로 세그먼트를 실시간 최적화 +‣ 위협에 자동 대응하고, 종합적인 보안 관리 전략 구현 +소프트웨어 +정의 +네트워킹 +네트워크를 소프트웨어 기반으로 +관리하고 제어하는 기술로, SDN +프로그래밍 가능 인프라를 구현하여 +제어 영역과 데이터 영역을 분리하고 +데이터 영역의 요소를 중앙에서 관리 +및 제어를 수행한다. 네트워크의 +유연성을 높이고 보안을 강화하는 데 +사용된다. +기존 +‣ 네트워크 구성 요소의 기본 소프트웨어 정의 제어 도입 +‣ SDN 기본 구조 설정 및 네트워크 트래픽을 소프트웨어로 +제어 +초기 +‣ SDN을 통해 네트워크 트래픽을 중앙에서 관리 및 실시간 +정책 적용 +‣ 네트워크 보안 정책을 SDN 환경에 통합하여 자동화된 보안 +구현 +향상 +‣ SDN 기능 확장 및 네트워크 전반 트래픽 관리 및 보안 +최적화 +‣ 실시간 네트워크 구성 및 정책 조정 +최적화 +‣ AI 기반 SDN 솔루션 도입하여 네트워크 트래픽 예측 및 +자동 최적화 +‣ SDN을 통해 네트워크 보안 실시간 강화 및 자동화된 위협 +대응 구현 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 마이크로 세그멘테이션 | 마이크로 세그멘테이션은 네트워크를 세분화하여 각 워크로드나 애플리케이션별로 세그먼트를 설정하는 기술로, 보다 정밀한 보안 제어를 가능하게 한다. 접속하는 ID 또는 애플리케이션 접근을 기반으로 네트워크 세분화를 정의하거나 물리적 세분화를 수행하고 문서화하여야 한다. 또한 가능하다면 호스트 수준의 프로세스 마이크로 세그멘테이션을 수행한다. | 기존 | ‣ 주요 애플리케이션 및 워크로드 기준 초기 마이크로 세그먼트 설정 ‣ 수동으로 세그먼트를 구성하고 기본적인 보안 정책 적용 | +| | | 초기 | ‣ 마이크로 세그먼트를 확장하여 맞춤형 보안 정책 자동 적용 ‣ 네트워크 수준에서 마이크로 세그멘테이션 수행 및 워크로드 간 이동 탐지·차단 ‣ 마이크로 세그먼트 간의 트래픽 모니터링 및 실시간 위협 탐지 | +| | | 향상 | ‣ 마이크로 세그먼트 관리 자동화 강화 ‣ 모든 네트워크 트래픽에 대한 정밀한 보안 제어 구현 ‣ 애플리케이션 별 격리 메커니즘 적용 및 위협 탐지·대응 시스템과 통합 | +| | | 최적화 | ‣ AI·ML을 활용하여 마이크로 세그먼트를 실시간 최적화 ‣ 위협에 자동 대응하고, 종합적인 보안 관리 전략 구현 | +| 소프트웨어 정의 네트워킹 | 네트워크를 소프트웨어 기반으로 관리하고 제어하는 기술로, SDN 프로그래밍 가능 인프라를 구현하여 제어 영역과 데이터 영역을 분리하고 데이터 영역의 요소를 중앙에서 관리 및 제어를 수행한다. 네트워크의 유연성을 높이고 보안을 강화하는 데 사용된다. | 기존 | ‣ 네트워크 구성 요소의 기본 소프트웨어 정의 제어 도입 ‣ SDN 기본 구조 설정 및 네트워크 트래픽을 소프트웨어로 제어 | +| | | 초기 | ‣ SDN을 통해 네트워크 트래픽을 중앙에서 관리 및 실시간 정책 적용 ‣ 네트워크 보안 정책을 SDN 환경에 통합하여 자동화된 보안 구현 | +| | | 향상 | ‣ SDN 기능 확장 및 네트워크 전반 트래픽 관리 및 보안 최적화 ‣ 실시간 네트워크 구성 및 정책 조정 | +| | | 최적화 | ‣ AI 기반 SDN 솔루션 도입하여 네트워크 트래픽 예측 및 자동 최적화 ‣ SDN을 통해 네트워크 보안 실시간 강화 및 자동화된 위협 대응 구현 | + + +66 | 제로트러스트 가이드라인 2.0 +나. 위협 대응 +네트워크 상의 위협을 신속하게 탐지하고 대응하는 기능이 강조된다. 위협 대응 기능은 +네트워크에서 발생할 수 있는 다양한 위협을 실시간으로 감지하고, 즉각적인 조치를 취하는 데 +중점을 둔다. 이를 통해 외부 공격이나 내부에서 발생하는 이상 활동에 신속히 대응할 수 있으며, +네트워크의 정상 운영을 유지하면서도 보안 위협을 최소화할 수 있다. 위협 탐지와 대응 기능은 +제로트러스트 모델의 핵심인 ‘항상 의심하고, 검증하는’ 원칙에 맞게, 지속적으로 네트워크 활동을 +모니터링하고 보안 사고를 예방하는 데 필수적이다. + +**[표 3-20]** 네트워크 핵심 요소의 위협 대응 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +위협 +대응 +위협 대응 기능은 네트워크 내에서 +발생하는 모든 잠재적 위협을 +신속하게 감지하고 대응하는 +시스템을 말한다. 이 기능은 침입 +탐지 및 방지 시스템(IDS·IPS), +위협 인텔리전스, 자동화된 대응 +시스템 등을 포함한다. +기존 +‣ 위협 인텔리전스와 기본적인 IDS·IPS 솔루션 도입 +‣ 수동 대응이 주를 이루며, 보안 사고 발생 시 기본 절차에 따라 +대응 +초기 +‣ 자동화된 위협 탐지 및 대응 시스템 도입 +‣ 위협 인텔리전스 활용 네트워크 모니터링 및 자동 경고 생성 +향상 +‣ 실시간 위협 감지 및 선제 대응 +‣ 머신러닝 기반 분석 도입, 비정상 활동 자동 탐지 및 차단 +최적화 +‣ 완전히 통합된 위협 대응 플랫폼 구축 +‣ AI 기반 예측 분석으로 잠재 위협 사전 감지 및 차단 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 위협 대응 | 위협 대응 기능은 네트워크 내에서 발생하는 모든 잠재적 위협을 신속하게 감지하고 대응하는 시스템을 말한다. 이 기능은 침입 탐지 및 방지 시스템(IDS·IPS), 위협 인텔리전스, 자동화된 대응 시스템 등을 포함한다. | 기존 | ‣ 위협 인텔리전스와 기본적인 IDS·IPS 솔루션 도입 ‣ 수동 대응이 주를 이루며, 보안 사고 발생 시 기본 절차에 따라 대응 | +| | | 초기 | ‣ 자동화된 위협 탐지 및 대응 시스템 도입 ‣ 위협 인텔리전스 활용 네트워크 모니터링 및 자동 경고 생성 | +| | | 향상 | ‣ 실시간 위협 감지 및 선제 대응 ‣ 머신러닝 기반 분석 도입, 비정상 활동 자동 탐지 및 차단 | +| | | 최적화 | ‣ 완전히 통합된 위협 대응 플랫폼 구축 ‣ AI 기반 예측 분석으로 잠재 위협 사전 감지 및 차단 | + + +다. 트래픽 암호화 +네트워크 트래픽을 보호하기 위해 암호화 기능이 필수적으로 적용된다. 네트워크를 통해 +전달되는 데이터는 암호화를 통해 외부의 도청이나 침입으로부터 보호된다. 암호화는 데이터를 +전송하는 동안에도 보호하며, 민감한 정보가 네트워크를 통해 유출되거나 변경되지 않도록 한다. +이를 통해 기업은 네트워크 내에서 발생할 수 있는 데이터를 안전하게 보호하며, 내부 정보 유출을 +방지하는 데 큰 도움을 얻는다. + +**[표 3-21]** 네트워크 핵심 요소의 트래픽 암호화 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +트래픽 +암호화 +트래픽 암호화는 네트워크 내에서 +데이터의 기밀성을 유지하고, 전송 +중인 데이터를 보호하기 위한 +기술이다. 이는 SSL·TLS, VPN, +데이터 암호화 및 전송 계층 보안 +등을 포함한다. +기존 +‣ 기본 암호화 기술 도입, 민감 데이터 보호 +‣ SSL·TLS 등 표준 프로토콜로 웹 트래픽 보호, VPN을 통한 추가 +보안 +초기 +‣ 암호화 기술 전사적 확대 적용, 모든 중요 데이터 및 통신 채널 +암호화 +‣ 전사적 암호화 정책 수립 및 데이터 전송 암호화 필수화 +향상 +‣ 고도화된 암호화 기법 적용, 전송 데이터 및 저장 데이터 보호 +‣ 고급 암호화 키 관리 시스템 도입 및 전방위적인 보호 체계 구축 +최적화 +‣ 성능 저하 없는 암호화 기술 최적화 +‣ 양자내성암호 도입, 최고 수준의 보안 유지 +‣ 암호화 및 복호화 자동화, 통합 키 관리 시스템 운영 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 트래픽 암호화 | 트래픽 암호화는 네트워크 내에서 데이터의 기밀성을 유지하고, 전송 중인 데이터를 보호하기 위한 기술이다. 이는 SSL·TLS, VPN, 데이터 암호화 및 전송 계층 보안 등을 포함한다. | 기존 | ‣ 기본 암호화 기술 도입, 민감 데이터 보호 ‣ SSL·TLS 등 표준 프로토콜로 웹 트래픽 보호, VPN을 통한 추가 보안 | +| | | 초기 | ‣ 암호화 기술 전사적 확대 적용, 모든 중요 데이터 및 통신 채널 암호화 ‣ 전사적 암호화 정책 수립 및 데이터 전송 암호화 필수화 | +| | | 향상 | ‣ 고도화된 암호화 기법 적용, 전송 데이터 및 저장 데이터 보호 ‣ 고급 암호화 키 관리 시스템 도입 및 전방위적인 보호 체계 구축 | +| | | 최적화 | ‣ 성능 저하 없는 암호화 기술 최적화 ‣ 양자내성암호 도입, 최고 수준의 보안 유지 ‣ 암호화 및 복호화 자동화, 통합 키 관리 시스템 운영 | + + +68 | 제로트러스트 가이드라인 2.0 +라. 트래픽 관리 +네트워크 트래픽의 흐름을 세밀하게 관리하고 모니터링하는 기능이 중요하다. 데이터 흐름 +매핑은 네트워크 내에서 트래픽이 어떻게 이동하고, 어떤 경로를 통해 데이터를 전달하는지 파악해 +이를 기반으로 최적화된 보안 정책을 수립하는 역할을 한다. 이를 통해 기업은 네트워크 상에서 +비정상적인 흐름이나 예기치 않은 데이터 이동을 즉각 감지하고 차단할 수 있다. 데이터 흐름을 +명확히 파악함으로써 네트워크 트래픽을 효율적으로 관리하고, 잠재적인 보안 위협을 사전에 +차단하는 데 기여한다. + +**[표 3-22]** 네트워크 핵심 요소의 트래픽 관리 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +데이터 +흐름 +매핑 +네트워크 내에서 데이터가 어떻게 +이동하는지를 시각화하고 분석하는 +과정이다. 이를 통해 데이터의 출처, +목적지, 경로 등을 파악하여 보안 +정책을 설계하고 위협을 예측할 수 +있다. +기존 +‣ 네트워크 내 주요 데이터 흐름을 수동으로 매핑하고 분석 +‣ 초기 데이터 흐름 다이어그램 작성 +‣ 데이터 트래픽에 대한 수동적 모니터링 수행 +‣ 최소한의 암호화를 통해 데이터 흐름 파악 +초기 +‣ 애플리케이션 단위에서 트래픽 매핑 및 분석 +‣ 자동화된 데이터 흐름 매핑 도구 도입 +향상 +‣ 보안 정책을 수립하여 비정상적인 데이터 이동 탐지 +‣ 데이터 흐름 상관관계 분석 및 보안 위협 사전 식별 +‣ 데이터 흐름과 보안 정책을 실시간으로 업데이트 및 최적화 +최적화 +‣ AI 기반 예측 분석 도구로 데이터 흐름 변화 실시간 감지 및 자동 +대응 +‣ 네트워크 트래픽 우선순위 동적 변경 +‣ 데이터 흐름 매핑을 다른 보안 시스템과 통합하여 종합적인 +네트워크 보안 전략 수립 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 데이터 흐름 매핑 | 네트워크 내에서 데이터가 어떻게 이동하는지를 시각화하고 분석하는 과정이다. 이를 통해 데이터의 출처, 목적지, 경로 등을 파악하여 보안 정책을 설계하고 위협을 예측할 수 있다. | 기존 | ‣ 네트워크 내 주요 데이터 흐름을 수동으로 매핑하고 분석 ‣ 초기 데이터 흐름 다이어그램 작성 ‣ 데이터 트래픽에 대한 수동적 모니터링 수행 ‣ 최소한의 암호화를 통해 데이터 흐름 파악 | +| | | 초기 | ‣ 애플리케이션 단위에서 트래픽 매핑 및 분석 ‣ 자동화된 데이터 흐름 매핑 도구 도입 | +| | | 향상 | ‣ 보안 정책을 수립하여 비정상적인 데이터 이동 탐지 ‣ 데이터 흐름 상관관계 분석 및 보안 위협 사전 식별 ‣ 데이터 흐름과 보안 정책을 실시간으로 업데이트 및 최적화 | +| | | 최적화 | ‣ AI 기반 예측 분석 도구로 데이터 흐름 변화 실시간 감지 및 자동 대응 ‣ 네트워크 트래픽 우선순위 동적 변경 ‣ 데이터 흐름 매핑을 다른 보안 시스템과 통합하여 종합적인 네트워크 보안 전략 수립 | + + +마. 네트워크 회복성 +네트워크의 안정성과 복원력을 강화하는 기능이 중심이 된다. 네트워크 회복성은 네트워크에 +문제가 발생했을 때 빠르게 복구하고, 중단 없는 서비스 운영을 보장하는 데 중점을 둔다. 네트워크 +중단이나 공격으로 인해 발생하는 서비스 장애를 최소화하고, 위협을 감지한 후에도 네트워크가 +정상적으로 작동하도록 보장하는 것이 목표다. 회복성을 강화함으로써 기업은 장기적인 보안 +체계를 유지하고, 중대한 네트워크 장애 상황에서도 신속한 복구를 통해 비즈니스 연속성을 보장할 +수 있다. + +**[표 3-23]** 네트워크 핵심 요소의 네트워크 회복성 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +네트워크 +회복성 +네트워크 회복성은 네트워크가 +다양한 위협이나 장애로부터 +신속하게 복구하고, 지속적으로 +가용성을 유지할 수 있도록 하는 +능력이다. 이 기능은 다중 경로 +설계, 자동 복구, 재해 복구 계획 +등을 포함한다. +기존 +‣ 네트워크 주요 구성 요소에 대한 기본 복구 계획 및 백업 경로 +마련 +‣ 주기적 백업 실시 및 장애 대응 절차 마련 +초기 +‣ 다중 경로 설계 및 자동 복구 시스템 도입 +‣ 중요한 네트워크 구성 요소에 대해 자동화된 장애조치(페일오버, +Failover) 메커니즘 도입 +‣ 네트워크 가용성 보장을 위한 이중화 설계 완료 +향상 +‣ 네트워크 복구 능력 고도화 +‣ 재해 복구 계획 통합 및 복구 시나리오 주기적 테스트 +최적화 +‣ 자율 복구 시스템 도입, 네트워크 장애 실시간 감지 및 복구 +‣ 모든 복구 절차 자동화 +‣ 재해 복구 테스트 정기적 수행 및 회복성 지표 지속 모니터링 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 네트워크 회복성 | 네트워크 회복성은 네트워크가 다양한 위협이나 장애로부터 신속하게 복구하고, 지속적으로 가용성을 유지할 수 있도록 하는 능력이다. 이 기능은 다중 경로 설계, 자동 복구, 재해 복구 계획 등을 포함한다. | 기존 | ‣ 네트워크 주요 구성 요소에 대한 기본 복구 계획 및 백업 경로 마련 ‣ 주기적 백업 실시 및 장애 대응 절차 마련 | +| | | 초기 | ‣ 다중 경로 설계 및 자동 복구 시스템 도입 ‣ 중요한 네트워크 구성 요소에 대해 자동화된 장애조치(페일오버, Failover) 메커니즘 도입 ‣ 네트워크 가용성 보장을 위한 이중화 설계 완료 | +| | | 향상 | ‣ 네트워크 복구 능력 고도화 ‣ 재해 복구 계획 통합 및 복구 시나리오 주기적 테스트 | +| | | 최적화 | ‣ 자율 복구 시스템 도입, 네트워크 장애 실시간 감지 및 복구 ‣ 모든 복구 절차 자동화 ‣ 재해 복구 테스트 정기적 수행 및 회복성 지표 지속 모니터링 | + + +70 | 제로트러스트 가이드라인 2.0 + +### 4. 시스템 + +가. 접근통제 +시스템에 접근하는 사용자나 기기의 권한을 엄격히 통제하는 기능이 도입된다. 접근통제는 +사용자가 시스템 리소스에 접근할 때, 적절한 권한이 있는지 확인하고 불필요한 접근을 차단한다. +이를 통해 최소 권한 원칙을 적용해 시스템 리소스를 보호할 수 있다. + +**[표 3-24]** 시스템 핵심 요소의 접근통제 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +접근 +통제 +사용자와 기기가 네트워크와 +시스템에 접근할 때, 허용된 +리소스만을 사용할 수 있도록 +권한을 부여하고 이를 엄격하게 +관리하는 보안 기능이다. 이를 통해 +적절한 자격을 가진 사용자만이 +필요한 리소스에 접근할 수 있으며, +보안 사고를 예방할 수 있다. +기존 +‣ 기본적인 접근제어 체계 수립 +‣ 사용자 및 기기별로 수동으로 권한 부여 +‣ 사용자는 주로 역할 기반 접근제어(RBAC)를 통해 리소스에 접근 +‣ 권한 관리를 수동으로 수행 +초기 +‣ 자동화된 접근제어 시스템을 도입 +‣ 사용자 역할과 권한을 기반으로 네트워크 및 시스템 접근을 +중앙에서 관리 +‣ 실시간으로 접근권한 부여 +‣ 권한 변경 사항 자동으로 반영 +‣ 특정 리소스에 대한 접근을 제한하거나 승인하는 정책 적용 +향상 +‣ 속성 기반 접근제어(ABAC) 시스템을 도입 +‣ 사용자와 기기의 속성에 따라 더욱 세밀한 접근제어 수행 +‣ 사용자의 위치, 기기 상태, 시간 등 다양한 조건을 바탕으로 +접근권한 동적 관리 +‣ 실시간으로 접근통제 강화 +최적화 +‣ AI를 기반으로 자율적인 접근통제 시스템 구축 +‣ 사용자의 행동 패턴과 기기 상태를 실시간으로 분석하고 +자동으로 권한 조정 +‣ 모든 접근제어는 중앙집중적 시스템에서 실시간으로 관리 +‣ 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정 +‣ 위험 분석 기반 지속적인 접근제어 정책 적용 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 접근 통제 | 사용자와 기기가 네트워크와 시스템에 접근할 때, 허용된 리소스만을 사용할 수 있도록 권한을 부여하고 이를 엄격하게 관리하는 보안 기능이다. 이를 통해 적절한 자격을 가진 사용자만이 필요한 리소스에 접근할 수 있으며, 보안 사고를 예방할 수 있다. | 기존 | ‣ 기본적인 접근제어 체계 수립 ‣ 사용자 및 기기별로 수동으로 권한 부여 ‣ 사용자는 주로 역할 기반 접근제어(RBAC)를 통해 리소스에 접근 ‣ 권한 관리를 수동으로 수행 | +| | | 초기 | ‣ 자동화된 접근제어 시스템을 도입 ‣ 사용자 역할과 권한을 기반으로 네트워크 및 시스템 접근을 중앙에서 관리 ‣ 실시간으로 접근권한 부여 ‣ 권한 변경 사항 자동으로 반영 ‣ 특정 리소스에 대한 접근을 제한하거나 승인하는 정책 적용 | +| | | 향상 | ‣ 속성 기반 접근제어(ABAC) 시스템을 도입 ‣ 사용자와 기기의 속성에 따라 더욱 세밀한 접근제어 수행 ‣ 사용자의 위치, 기기 상태, 시간 등 다양한 조건을 바탕으로 접근권한 동적 관리 ‣ 실시간으로 접근통제 강화 | +| | | 최적화 | ‣ AI를 기반으로 자율적인 접근통제 시스템 구축 ‣ 사용자의 행동 패턴과 기기 상태를 실시간으로 분석하고 자동으로 권한 조정 ‣ 모든 접근제어는 중앙집중적 시스템에서 실시간으로 관리 ‣ 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정 ‣ 위험 분석 기반 지속적인 접근제어 정책 적용 | + + +나. 시스템 계정 관리 +PAM과 자격 증명 관리를 통해 시스템의 계정 및 인증 정보를 보호하는 것이 핵심이다. PAM은 +중요 시스템에 접근할 수 있는 특수 권한 계정을 관리하고, 모니터링하며, 세밀한 권한 제어를 +제공해 내부자 위협 및 계정 남용을 방지한다. 자격 증명 관리는 계정 및 인증 정보를 안전하게 +저장하고, 계정 탈취나 유출로부터 보호하는 역할을 한다. 이를 통해 계정 보안의 전반적인 수준을 +높일 수 있다. + +**[표 3-25]** 시스템 핵심 요소의 시스템 계정 관리 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +PAM +PAM은 권한 있는 사용자 및 +시스템의 접근을 관리하고 +모니터링하는 보안 체계로, +영구적인 관리자 권한 등 높은 +권한을 제거하는 데 중점을 두며, +이를 위해 먼저 PAM 시스템을 +구축하고, 권한 사용자를 이 +시스템으로 이전하는 작업을 +수행한다. 이후, 권한 상승 승인을 +자동화하고, 시스템에 분석 +데이터를 입력하여 이상 탐지를 +수행하는 방식으로 사용된다. +기존 +‣ 기본적인 PAM 시스템을 구축 +‣ 권한 있는 사용자 계정을 관리 +‣ PAM 정책 수립 +초기 +‣ PAM 솔루션을 통해 권한 있는 사용자 접근 모니터링 및 제어 +‣ 자동화된 권한 상승 승인 기술 도입 +향상 +‣ PAM 시스템에 분석 및 경고 기능을 통합하여 비정상적인 활동 +탐지 +‣ 권한 관리 절차 정교화 및 감사 로그 강화 +최적화 +‣ AI 기반의 위협 탐지 및 대응 기능을 활용하여 PAM 시스템 +고도화 +‣ PAM 정책, 절차 지속적 개선 및 최적화 +자격 +증명 +관리 +자격 증명 관리는 사용자와 기기의 +인증 정보를 안전하게 저장하고 +관리하는 기능으로, 이를 통해 +네트워크 및 시스템 접근 시 올바른 +자격 증명이 이루어지도록 한다. +이는 패스워드, 인증서, MFA 등을 +포함한다. +기존 +‣ 자격 증명을 수동으로 관리 +‣ 패스워드 기반 인증 방식에 의존 +‣ 사용자 인증이 고정된 방식으로 이루어짐 +‣ 자격 증명 관리가 체계적이지 않고 수동으로 이루어짐 +초기 +‣ 자격 증명 관리 자동화 +‣ MFA 도입 등 보다 안전한 인증 방식 적용 +‣ 자격 증명 시스템 중앙 관리 +향상 +‣ 고급 인증 방식을 도입(생체 인증 및 인증서 기반 인증 추가) +‣ 자격 증명 관리 시스템이 고도화 +‣ 자격 증명의 무결성 보장, 실시간으로 인증 정보 관리를 통한 +인증 프로세스 강화 +최적화 +‣ AI 기반의 자격 증명 관리 시스템을 통해 실시간으로 인증 +정보를 분석 +‣ 비정상적인 인증 시도 즉각 차단 +‣ 자격 증명 관리 시스템 자율적으로 운영 +‣ 모든 자격 증명 데이터 중앙 관리 +‣ 실시간 인증 정책 조정 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| PAM | PAM은 권한 있는 사용자 및 시스템의 접근을 관리하고 모니터링하는 보안 체계로, 영구적인 관리자 권한 등 높은 권한을 제거하는 데 중점을 두며, 이를 위해 먼저 PAM 시스템을 구축하고, 권한 사용자를 이 시스템으로 이전하는 작업을 수행한다. 이후, 권한 상승 승인을 자동화하고, 시스템에 분석 데이터를 입력하여 이상 탐지를 수행하는 방식으로 사용된다. | 기존 | ‣ 기본적인 PAM 시스템을 구축 ‣ 권한 있는 사용자 계정을 관리 ‣ PAM 정책 수립 | +| | | 초기 | ‣ PAM 솔루션을 통해 권한 있는 사용자 접근 모니터링 및 제어 ‣ 자동화된 권한 상승 승인 기술 도입 | +| | | 향상 | ‣ PAM 시스템에 분석 및 경고 기능을 통합하여 비정상적인 활동 탐지 ‣ 권한 관리 절차 정교화 및 감사 로그 강화 | +| | | 최적화 | ‣ AI 기반의 위협 탐지 및 대응 기능을 활용하여 PAM 시스템 고도화 ‣ PAM 정책, 절차 지속적 개선 및 최적화 | +| 자격 증명 관리 | 자격 증명 관리는 사용자와 기기의 인증 정보를 안전하게 저장하고 관리하는 기능으로, 이를 통해 네트워크 및 시스템 접근 시 올바른 자격 증명이 이루어지도록 한다. 이는 패스워드, 인증서, MFA 등을 포함한다. | 기존 | ‣ 자격 증명을 수동으로 관리 ‣ 패스워드 기반 인증 방식에 의존 ‣ 사용자 인증이 고정된 방식으로 이루어짐 ‣ 자격 증명 관리가 체계적이지 않고 수동으로 이루어짐 | +| | | 초기 | ‣ 자격 증명 관리 자동화 ‣ MFA 도입 등 보다 안전한 인증 방식 적용 ‣ 자격 증명 시스템 중앙 관리 | +| | | 향상 | ‣ 고급 인증 방식을 도입(생체 인증 및 인증서 기반 인증 추가) ‣ 자격 증명 관리 시스템이 고도화 ‣ 자격 증명의 무결성 보장, 실시간으로 인증 정보 관리를 통한 인증 프로세스 강화 | +| | | 최적화 | ‣ AI 기반의 자격 증명 관리 시스템을 통해 실시간으로 인증 정보를 분석 ‣ 비정상적인 인증 시도 즉각 차단 ‣ 자격 증명 관리 시스템 자율적으로 운영 ‣ 모든 자격 증명 데이터 중앙 관리 ‣ 실시간 인증 정책 조정 | + + +72 | 제로트러스트 가이드라인 2.0 +다. 네트워크 분리 정책 +이 기능에서는 네트워크 세분화를 점진적으로 적용하여 시스템 내 네트워크를 여러 구역으로 +나누고, 각 구역에 맞는 보안 정책을 설정하는 것이 핵심이다. 네트워크 세분화를 통해 보안 +경계를 만들고 구역 간 보안 수준을 높이다 보면, 구역 간에 합법적인 접근이 필요해지는 경우가 +생기며, 이때 그룹 간 이동이 중요한 역할을 한다. 그룹 간 이동 기능을 통해 구역 간 트래픽을 +제어하고, 인증된 사용자만이 네트워크 내에서 허가된 리소스에 접근할 수 있도록 하여, 보안성을 +유지하면서도 필요한 이동을 지원할 수 있다. + +**[표 3-26]** 시스템 핵심 요소의 네트워크 분리 정책 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +네트워크 +세분화 +및 그룹 +간 이동 +네트워크 세분화는 네트워크를 +더 작은 단위로 나누어 보안을 +강화하는 방식으로, 그룹 간 이동을 +통해 세분화된 네트워크 간에 +안전한 이동을 보장한다. 이는 보안 +정책을 세밀하게 적용하고, 필요에 +따라 특정 그룹 간의 트래픽 이동을 +제어하는 데 사용된다. +기존 +‣ 보안 정책 일괄적 적용 +‣ 그룹 간 이동에 대한 제어가 이루어지지 않음 +‣ 망분리 등의 기본적인 경계형 네트워크 모델이 적용 +‣ 네트워크 세분화 및 이동 통제 미비 +초기 +‣ 일부 중요 시스템을 네트워크 세분화를 통해 나눔 +‣ 세분화된 네트워크 간 접속 이동의 경우 보안 정책 적용 +‣ 시스템의 중요도에 따라 네트워크 분리 +‣ 중요 시스템과 일반 시스템 간의 접속과 이동을 제한하는 보안 +정책 도입 +‣ 트래픽 이동을 모니터링하고, 제한적인 보안 통제를 적용하여 +그룹 간 이동 제어 +향상 +‣ 네트워크 등급 및 기능별 세분화 +‣ 각 네트워크 그룹 간의 이동은 강력한 접근통제와 인증을 기반 +엄격한 관리 +‣ 네트워크 간 이동 시 실시간 보안 검사 적용 +‣ 그룹 간 이동이 동적으로 통제 +‣ 민감한 자산 및 시스템 간의 트래픽 이동에 대해 세밀한 관리 +수행 +최적화 +‣ 그룹 간 이동 실시간 분석 및 제어 +‣ 그룹 간 이동 시 재인증 없이 이동이 가능하도록 추가적인 정책 +적용 +‣ 세분화된 네트워크 내에서 트래픽 이동 실시간 감시 +‣ 위협이 감지되면 즉각적으로 차단 +‣ 자율적인 네트워크 세분화, 보안 관리 수행 +‣ 그룹 간 이동이 보안 위험 없이 안전하게 이루어질 수 있도록 +실시간 보안 정책 조정 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 네트워크 세분화 및 그룹 간 이동 | 네트워크 세분화는 네트워크를 더 작은 단위로 나누어 보안을 강화하는 방식으로, 그룹 간 이동을 통해 세분화된 네트워크 간에 안전한 이동을 보장한다. 이는 보안 정책을 세밀하게 적용하고, 필요에 따라 특정 그룹 간의 트래픽 이동을 제어하는 데 사용된다. | 기존 | ‣ 보안 정책 일괄적 적용 ‣ 그룹 간 이동에 대한 제어가 이루어지지 않음 ‣ 망분리 등의 기본적인 경계형 네트워크 모델이 적용 ‣ 네트워크 세분화 및 이동 통제 미비 | +| | | 초기 | ‣ 일부 중요 시스템을 네트워크 세분화를 통해 나눔 ‣ 세분화된 네트워크 간 접속 이동의 경우 보안 정책 적용 ‣ 시스템의 중요도에 따라 네트워크 분리 ‣ 중요 시스템과 일반 시스템 간의 접속과 이동을 제한하는 보안 정책 도입 ‣ 트래픽 이동을 모니터링하고, 제한적인 보안 통제를 적용하여 그룹 간 이동 제어 | +| | | 향상 | ‣ 네트워크 등급 및 기능별 세분화 ‣ 각 네트워크 그룹 간의 이동은 강력한 접근통제와 인증을 기반 엄격한 관리 ‣ 네트워크 간 이동 시 실시간 보안 검사 적용 ‣ 그룹 간 이동이 동적으로 통제 ‣ 민감한 자산 및 시스템 간의 트래픽 이동에 대해 세밀한 관리 수행 | +| | | 최적화 | ‣ 그룹 간 이동 실시간 분석 및 제어 ‣ 그룹 간 이동 시 재인증 없이 이동이 가능하도록 추가적인 정책 적용 ‣ 세분화된 네트워크 내에서 트래픽 이동 실시간 감시 ‣ 위협이 감지되면 즉각적으로 차단 ‣ 자율적인 네트워크 세분화, 보안 관리 수행 ‣ 그룹 간 이동이 보안 위험 없이 안전하게 이루어질 수 있도록 실시간 보안 정책 조정 | + + +라. 시스템 보안 및 정책 관리 +이 기능은 시스템 환경에 맞는 보안 정책을 관리하는 것을 의미하다. 이는 기업이 시스템을 +온프레미스에서 클라우드 환경으로 점진적으로 전환할 때, 각 환경에 맞는 보안 정책을 수립하고 +관리하는 데 중점을 둔다. 온프레미스 환경에서는 기존의 보안 정책을 준수하면서도 클라우드 전환 +과정에서는 클라우드 환경에 적합한 보안 정책을 적용해 이행할 수 있어야 한다. 이를 통해 환경 +변화에 따른 보안 취약점을 최소화하고, 정책 일관성을 유지할 수 있다. + +**[표 3-27]** 시스템 핵심 요소의 시스템 보안 및 정책 관리 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +시스템 +환경에 +따른 +정책 +관리 +시스템 환경에 따른 정책 관리는 +온프레미스(사내 데이터센터) +환경에서 클라우드 환경으로 +전환되면서 보안 정책이 달라져야 +하는 상황을 반영한 관리 체계이다. +각 환경에 맞는 보안 정책을 +수립하고, 변화하는 환경에 맞춰 +정책을 조정한다. +기존 +‣ 온프레미스 환경에서 보안 정책 수립 및 관리 +‣ 정책이 고정된 상태로 운영 +‣ 클라우드 환경으로의 전환이 이루어지지 않음 +초기 +‣ 클라우드 환경으로의 전환 시작 +‣ 온프레미스와 클라우드 환경 간의 차이를 반영한 보안 정책 수립 +‣ 클라우드 환경에 맞는 보안 요구사항 반영 +‣ 자동으로 클라우드 환경에 정책 적용 +향상 +‣ 클라우드 환경으로의 전환 가속화 +‣ 하이브리드 클라우드 환경을 위한 통합된 보안 정책 적용 +‣ 온프레미스와 클라우드 환경에서 실시간으로 보안 정책을 조정 +‣ 환경 변화에 따라 동적으로 정책 변경 +최적화 +‣ AI 기반 정책 관리 시스템 적용 +‣ 클라우드 환경의 변화에 따라 보안 정책이 자동으로 최적화 +‣ 온프레미스, 클라우드, 하이브리드 환경 모두에서 실시간으로 +정책 조정 +‣ 보안 위협에 맞춘 자율적인 정책 적용 가능 +‣ 정책 관리 완전 자동화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 시스템 환경에 따른 정책 관리 | 시스템 환경에 따른 정책 관리는 온프레미스(사내 데이터센터) 환경에서 클라우드 환경으로 전환되면서 보안 정책이 달라져야 하는 상황을 반영한 관리 체계이다. 각 환경에 맞는 보안 정책을 수립하고, 변화하는 환경에 맞춰 정책을 조정한다. | 기존 | ‣ 온프레미스 환경에서 보안 정책 수립 및 관리 ‣ 정책이 고정된 상태로 운영 ‣ 클라우드 환경으로의 전환이 이루어지지 않음 | +| | | 초기 | ‣ 클라우드 환경으로의 전환 시작 ‣ 온프레미스와 클라우드 환경 간의 차이를 반영한 보안 정책 수립 ‣ 클라우드 환경에 맞는 보안 요구사항 반영 ‣ 자동으로 클라우드 환경에 정책 적용 | +| | | 향상 | ‣ 클라우드 환경으로의 전환 가속화 ‣ 하이브리드 클라우드 환경을 위한 통합된 보안 정책 적용 ‣ 온프레미스와 클라우드 환경에서 실시간으로 보안 정책을 조정 ‣ 환경 변화에 따라 동적으로 정책 변경 | +| | | 최적화 | ‣ AI 기반 정책 관리 시스템 적용 ‣ 클라우드 환경의 변화에 따라 보안 정책이 자동으로 최적화 ‣ 온프레미스, 클라우드, 하이브리드 환경 모두에서 실시간으로 정책 조정 ‣ 보안 위협에 맞춘 자율적인 정책 적용 가능 ‣ 정책 관리 완전 자동화 | + + +74 | 제로트러스트 가이드라인 2.0 + +### 5. 애플리케이션 및 워크로드 + +가. 애플리케이션 접근 +애플리케이션과 워크로드에 대한 접근 인가를 관리하는 데 중점을 둔다. 리소스 권한 부여 및 +통합 기능을 통해, 사용자가 애플리케이션과 워크로드에 접근할 때 적절한 권한을 부여하고 이를 +중앙에서 통합 관리한다. 이를 통해 각 리소스에 대한 접근권한을 일관되게 관리하고, 최소 권한 +원칙에 따라 불필요한 접근을 차단한다. + +**[표 3-28]** 애플리케이션 및 워크로드 핵심 요소의 애플리케이션 접근 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +리소스 +권한 +부여 및 +통합 +애플리케이션 및 시스템에 대한 +접근권한을 관리하고, 이를 다른 +보안 시스템과 통합하여 보안을 +강화하는 과정으로, 표준화된 +리소스 승인 게이트웨이를 +설정하여 관리한다. +기존 +‣ 기본적인 접근권한 관리 시스템 도입 +‣ 사용자 및 시스템의 권한 수동 관리 +‣ 각 리소스에 대한 접근권한 정의 +‣ 로컬 인증·인가 기능 및 정적 속성에 기반한 접근제어 수행 +초기 +‣ 중앙 집중식 접근권한 관리 시스템 도입 +‣ 모든 리소스에 대한 권한 중앙 관리 +‣ 접근권한 관리 시스템을 기업의 다른 보안 시스템과 통합 +향상 +‣ 다수의 컨텍스트 정보를 조합하여 최소 권한 원칙 적용 +‣ RBAC과 ABAC 결합 +최적화 +‣ AI를 활용하여 사용자 행동 분석 +‣ 이상 징후를 자동으로 탐지하여 권한 조정 +‣ 자동화된 접근권한 부여 및 회수 시스템 도입 +‣ 실시간 권한 관리 및 비정상적인 접근 차단 +‣  모든 리소스 권한 부여 및 관리 자동화 +‣ 지속적인 모니터링 및 최적화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 리소스 권한 부여 및 통합 | 애플리케이션 및 시스템에 대한 접근권한을 관리하고, 이를 다른 보안 시스템과 통합하여 보안을 강화하는 과정으로, 표준화된 리소스 승인 게이트웨이를 설정하여 관리한다. | 기존 | ‣ 기본적인 접근권한 관리 시스템 도입 ‣ 사용자 및 시스템의 권한 수동 관리 ‣ 각 리소스에 대한 접근권한 정의 ‣ 로컬 인증·인가 기능 및 정적 속성에 기반한 접근제어 수행 | +| | | 초기 | ‣ 중앙 집중식 접근권한 관리 시스템 도입 ‣ 모든 리소스에 대한 권한 중앙 관리 ‣ 접근권한 관리 시스템을 기업의 다른 보안 시스템과 통합 | +| | | 향상 | ‣ 다수의 컨텍스트 정보를 조합하여 최소 권한 원칙 적용 ‣ RBAC과 ABAC 결합 | +| | | 최적화 | ‣ AI를 활용하여 사용자 행동 분석 ‣ 이상 징후를 자동으로 탐지하여 권한 조정 ‣ 자동화된 접근권한 부여 및 회수 시스템 도입 ‣ 실시간 권한 관리 및 비정상적인 접근 차단 ‣  모든 리소스 권한 부여 및 관리 자동화 ‣ 지속적인 모니터링 및 최적화 | + + +나. 애플리케이션 위협 보호 +애플리케이션 및 워크로드에 대한 지속적인 모니터링과 실시간 승인 관리가 필요하다. 지속적인 +모니터링 및 진행 중인 승인을 통해 사용자의 행위와 워크로드의 상태를 실시간으로 모니터링하며, +변경 사항에 따라 동적으로 접근 승인을 유지하거나 차단한다. 이는 잠재적 위협을 빠르게 탐지하고 +대응할 수 있도록 하며, 제로트러스트 원칙에 따라 끊임없이 신원을 검증하는 역할을 수행한다. + +**[표 3-29]** 애플리케이션 및 워크로드 핵심 요소의 애플리케이션 위협 보호 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +지속적인 +모니터링 +및 진행 +중인 +승인 +자동화된 도구와 프로세스를 +사용하여 애플리케이션 및 +시스템의 보안 상태를 지속적으로 +모니터링하고, 실시간으로 보안 +승인을 관리하는 과정이다. +기존 +‣ 수동으로 애플리케이션 및 시스템 보안 상태 모니터링, 보안 +이벤트 기록 +‣ 초기 보안 승인 프로세스 수립 +‣ 주요 시스템 변경 사항에 대한 보안 검토 실시 +초기 +‣ 자동화된 보안 모니터링 도구 도입 +‣ 실시간 보안 이벤트 수집 및 분석 +‣ 진행 중인 승인 프로세스 도입 +‣ 모든 시스템 변경 사항에 대해 보안 검토 수행 +향상 +‣ AI 기반의 보안 모니터링 시스템 도입 +‣ 보안 이벤트 분석 및 이상 징후 실시간 탐지 +‣ 보안 승인 프로세스 자동화 +‣ 보안 위험이 있는 변경 사항 자동으로 차단/수정 +최적화 +‣ 보안 모니터링 최적화 +‣ 위협 사전 예측 및 대응 +‣ 모든 시스템의 보안 상태 지속적으로 평가 +‣ 자동화된 보안 승인 프로세스 적용 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 지속적인 모니터링 및 진행 중인 승인 | 자동화된 도구와 프로세스를 사용하여 애플리케이션 및 시스템의 보안 상태를 지속적으로 모니터링하고, 실시간으로 보안 승인을 관리하는 과정이다. | 기존 | ‣ 수동으로 애플리케이션 및 시스템 보안 상태 모니터링, 보안 이벤트 기록 ‣ 초기 보안 승인 프로세스 수립 ‣ 주요 시스템 변경 사항에 대한 보안 검토 실시 | +| | | 초기 | ‣ 자동화된 보안 모니터링 도구 도입 ‣ 실시간 보안 이벤트 수집 및 분석 ‣ 진행 중인 승인 프로세스 도입 ‣ 모든 시스템 변경 사항에 대해 보안 검토 수행 | +| | | 향상 | ‣ AI 기반의 보안 모니터링 시스템 도입 ‣ 보안 이벤트 분석 및 이상 징후 실시간 탐지 ‣ 보안 승인 프로세스 자동화 ‣ 보안 위험이 있는 변경 사항 자동으로 차단/수정 | +| | | 최적화 | ‣ 보안 모니터링 최적화 ‣ 위협 사전 예측 및 대응 ‣ 모든 시스템의 보안 상태 지속적으로 평가 ‣ 자동화된 보안 승인 프로세스 적용 | + + +76 | 제로트러스트 가이드라인 2.0 +다. 접근 가능한 애플리케이션 +원격 접속 기능을 통해, 애플리케이션과 워크로드에 안전하게 원격으로 접근할 수 있도록 +한다. 이는 특히 재택근무나 외부에서의 접속을 지원하는 환경에서 필수적인 기능이다. 이를 +통해 원격에서 접속하는 사용자와 기기에 대한 보안 검증을 강화하고, 원격으로 이루어지는 모든 +상호작용을 철저히 통제한다. + +**[표 3-30]** 애플리케이션 및 워크로드 핵심 요소의 접근 가능한 애플리케이션 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +원격 +접속 +사용자가 외부에서 안전하게 +기업망에 접속할 수 있도록 하는 +보안 조치이다. 최소 권한 기준을 +설정하기 위해 기존 기기 접근 +프로세스 및 도구를 사용한다. +승인된 애플리케이션에 대해 기업 +IDP를 사용하는 기기 및 IoT 등이 +원격 접속 지원을 포함하도록 +확장한다. +기존 +‣ 기본적인 원격 접속 솔루션(VPN 등)을 도입하여 외부 접속 지원 +‣ 초기 보안 정책 수립과 함께 애플리케이션에 대한 접근제어가 +제한적 +초기 +‣ 원격 접속 보안 강화를 통한 사용자 인증 및 데이터 암호화 구현 +‣ 애플리케이션별 접근제어가 추가되어, 사용자 및 기기의 보안 +상태에 따라 애플리케이션 기능 접근 제한 +향상 +‣ 원격 접속 기기 실시간 모니터링 및 제어 +‣ 애플리케이션의 기능 사용을 시나리오별로 제한하고, 접속 +상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능 +필요시 제한 +최적화 +‣ AI를 활용하여 원격 접속 보안 고도화 +‣ 애플리케이션 접근이 사용자 행동 및 접속 상태에 따라 자동으로 +조정되며, AI를 통해 위험 요소가 탐지될 경우 애플리케이션 +기능이 즉각적으로 제한 또는 차단 +라. 안전한 애플리케이션 배포 +애플리케이션 배포 과정에서의 보안이 강조된다. 안전한 애플리케이션 배포 기능을 통해 +애플리케이션을 안전하게 배포하고, 배포된 모든 애플리케이션 프로그램에 대한 애플리케이션 +인벤토리를 유지하여 전체 상태를 체계적으로 관리한다. 이를 통해 배포된 애플리케이션이 +지속적으로 보안 검사를 통과하도록 하고, 인벤토리를 통해 취약점을 추적하고 관리할 수 있다. + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 원격 접속 | 사용자가 외부에서 안전하게 기업망에 접속할 수 있도록 하는 보안 조치이다. 최소 권한 기준을 설정하기 위해 기존 기기 접근 프로세스 및 도구를 사용한다. 승인된 애플리케이션에 대해 기업 IDP를 사용하는 기기 및 IoT 등이 원격 접속 지원을 포함하도록 확장한다. | 기존 | ‣ 기본적인 원격 접속 솔루션(VPN 등)을 도입하여 외부 접속 지원 ‣ 초기 보안 정책 수립과 함께 애플리케이션에 대한 접근제어가 제한적 | +| | | 초기 | ‣ 원격 접속 보안 강화를 통한 사용자 인증 및 데이터 암호화 구현 ‣ 애플리케이션별 접근제어가 추가되어, 사용자 및 기기의 보안 상태에 따라 애플리케이션 기능 접근 제한 | +| | | 향상 | ‣ 원격 접속 기기 실시간 모니터링 및 제어 ‣ 애플리케이션의 기능 사용을 시나리오별로 제한하고, 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능 필요시 제한 | +| | | 최적화 | ‣ AI를 활용하여 원격 접속 보안 고도화 ‣ 애플리케이션 접근이 사용자 행동 및 접속 상태에 따라 자동으로 조정되며, AI를 통해 위험 요소가 탐지될 경우 애플리케이션 기능이 즉각적으로 제한 또는 차단 | + + +**[표 3-31]** 애플리케이션 및 워크로드 핵심 요소의 안전한 애플리케이션 배포 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +안전한 +애플리케이션 +배포 +안전한 애플리케이션 배포란 +애플리케이션을 배포할 때 +발생할 수 있는 보안 위협을 +최소화하기 위한 프로세스와 +도구를 사용하는 것을 의미한다. +이는 보안 정책 준수, 취약점 +검사, 자동화된 배포 파이프라인, +코드 무결성 검증, 환경 격리 및 +모니터링을 포함한다. +기존 +‣ 애플리케이션 배포 시 기본적인 보안 검토 실시 +‣ 보안 가이드라인을 준수하는 초기 배포 절차 마련 +‣ 배포 전 수동으로 코드 검토 및 취약점 검사 수행 +‣ 기본적인 접근제어를 적용하여 배포 과정에서의 보안 사고 방지 +초기 +‣ 보안이 내재된, 자동화된 배포 파이프라인 구축 +‣ 애플리케이션 배포 시 보안 자동으로 적용 +‣ CI/CD 파이프라인에 자동화된 취약점 검사 도구 통합 +‣ 배포 전후로 코드 무결성 확인 +‣ 배포 환경을 격리하여 공격 표면 최소화 +향상 +‣ 배포 과정 전반에 걸쳐 고급 보안 검사 추가 +‣ 배포 환경에 대한 지속적인 모니터링 수행 +‣ 보안 위협을 실시간으로 감지 및 대응 +‣ 보안 정책 준수 여부를 자동으로 검증하는 도구 도입 +‣ 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 +거치도록 구성 +‣ 배포 중에 발생할 수 있는 비정상적인 활동 모니터링 및 대응 +최적화 +‣ 완전히 자동화된 보안 중심 배포 파이프라인 구성 +‣ 애플리케이션 배포 시 최상의 보안 상태를 유지 +‣ AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 +파이프라인에 통합 +‣ 배포 환경 전반에 걸쳐 자율 보안 기능 적용 +‣ 모든 배포 프로세스 중앙 관리 +‣ 배포 과정에서 보안 준수 여부 자동 보고 및 추적 +애플리케이션 +인벤토리 +기업 내에서 사용되는 모든 +애플리케이션을 식별하고, +이를 체계적으로 관리하는 +과정이다. 인벤토리를 통해 +애플리케이션의 상태, 소유권, +사용 목적 등을 파악할 수 있다. +기존 +‣ 기업 내 모든 애플리케이션 수동 목록화 +‣ 초기 애플리케이션 인벤토리 작성 +‣ 애플리케이션 기본 정보(이름, 소유자, 위치 등)를 기록하여 관리 +초기 +‣ 자동화된 인벤토리 도구를 도입 +‣ 애플리케이션 자동 식별 및 주기적으로 업데이트 +‣ 애플리케이션 생명주기 관리 기능을 도입하여 인벤토리를 +지속적으로 유지 +향상 +‣ 애플리케이션 인벤토리에 보안 정보 추가 +‣ 각 애플리케이션의 보안 상태 평가 및 관리 +‣ 인벤토리 데이터를 기반으로 보안 정책 적용 +최적화 +‣ AI 기반의 인벤토리 관리 시스템을 도입 +‣ 애플리케이션의 변경 사항 실시간 반영 +‣ 보안 상태 지속적 모니터링 +‣ 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 +보안 관리 전략 구현 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 안전한 애플리케이션 배포 | 안전한 애플리케이션 배포란 애플리케이션을 배포할 때 발생할 수 있는 보안 위협을 최소화하기 위한 프로세스와 도구를 사용하는 것을 의미한다. 이는 보안 정책 준수, 취약점 검사, 자동화된 배포 파이프라인, 코드 무결성 검증, 환경 격리 및 모니터링을 포함한다. | 기존 | ‣ 애플리케이션 배포 시 기본적인 보안 검토 실시 ‣ 보안 가이드라인을 준수하는 초기 배포 절차 마련 ‣ 배포 전 수동으로 코드 검토 및 취약점 검사 수행 ‣ 기본적인 접근제어를 적용하여 배포 과정에서의 보안 사고 방지 | +| | | 초기 | ‣ 보안이 내재된, 자동화된 배포 파이프라인 구축 ‣ 애플리케이션 배포 시 보안 자동으로 적용 ‣ CI/CD 파이프라인에 자동화된 취약점 검사 도구 통합 ‣ 배포 전후로 코드 무결성 확인 ‣ 배포 환경을 격리하여 공격 표면 최소화 | +| | | 향상 | ‣ 배포 과정 전반에 걸쳐 고급 보안 검사 추가 ‣ 배포 환경에 대한 지속적인 모니터링 수행 ‣ 보안 위협을 실시간으로 감지 및 대응 ‣ 보안 정책 준수 여부를 자동으로 검증하는 도구 도입 ‣ 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 ‣ 배포 중에 발생할 수 있는 비정상적인 활동 모니터링 및 대응 | +| | | 최적화 | ‣ 완전히 자동화된 보안 중심 배포 파이프라인 구성 ‣ 애플리케이션 배포 시 최상의 보안 상태를 유지 ‣ AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합 ‣ 배포 환경 전반에 걸쳐 자율 보안 기능 적용 ‣ 모든 배포 프로세스 중앙 관리 ‣ 배포 과정에서 보안 준수 여부 자동 보고 및 추적 | +| 애플리케이션 인벤토리 | 기업 내에서 사용되는 모든 애플리케이션을 식별하고, 이를 체계적으로 관리하는 과정이다. 인벤토리를 통해 애플리케이션의 상태, 소유권, 사용 목적 등을 파악할 수 있다. | 기존 | ‣ 기업 내 모든 애플리케이션 수동 목록화 ‣ 초기 애플리케이션 인벤토리 작성 ‣ 애플리케이션 기본 정보(이름, 소유자, 위치 등)를 기록하여 관리 | +| | | 초기 | ‣ 자동화된 인벤토리 도구를 도입 ‣ 애플리케이션 자동 식별 및 주기적으로 업데이트 ‣ 애플리케이션 생명주기 관리 기능을 도입하여 인벤토리를 지속적으로 유지 | +| | | 향상 | ‣ 애플리케이션 인벤토리에 보안 정보 추가 ‣ 각 애플리케이션의 보안 상태 평가 및 관리 ‣ 인벤토리 데이터를 기반으로 보안 정책 적용 | +| | | 최적화 | ‣ AI 기반의 인벤토리 관리 시스템을 도입 ‣ 애플리케이션의 변경 사항 실시간 반영 ‣ 보안 상태 지속적 모니터링 ‣ 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리 전략 구현 | + + +78 | 제로트러스트 가이드라인 2.0 +마. 소프트웨어·애플리케이션 보안 +소프트웨어와 애플리케이션의 개발 및 배포 전반에 걸친 보안이 중점적으로 다루어진다. 안전한 +소프트웨어 개발 및 통합은 보안이 내재된 소프트웨어 개발 프로세스를 통해, 애플리케이션이 +처음부터 안전하게 개발되도록 한다. 또한 소프트웨어 위험 관리는 소프트웨어의 잠재적인 위험을 +사전에 식별하고 관리하여, 취약점이 발생하기 전에 미리 대비할 수 있도록 한다. + +**[표 3-32]** 애플리케이션 및 워크로드 핵심 요소의 소프트웨어·애플리케이션 보안 기능에 대한 세부역량 및 성숙도 + +정의 +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +안전한 +소프트웨어 +개발 및 +통합 +소프트웨어 개발 생명주기(SDLC) +전반에 걸쳐 보안 요소를 +내재화하고, 개발된 소프트웨어를 +안전하게 통합하는 과정이다. +코드 검토, 런타임 보호, 보안 API +게이트웨이, 컨테이너 및 서버리스 +보안과 같은 제어 기능이 통합되고 +자동화된다. DevSecOps를 통하여 +워크플로우를 구성한다. +기존 +‣ 개발 프로세스에 기본적인 보안 코딩 표준, 가이드라인 도입 +‣ 코드 배포 전, 정적/수동 보안 테스트 수행 +초기 +‣ 안전성 검토와 테스트를 SDLC에 통합 +‣ 개발 단계에서부터 보안 취약점 식별 및 수정 +‣ CI/CD 파이프라인에 정적 및 동적 분석 도구를 통합하여 +자동화된 보안 검사 수행 +‣ DevSecOps 문화 도입 +‣ 주요 개발 내용에 대한 SBOM 문서 작성 +향상 +‣ 서드파티 라이브러리 및 오픈소스 소프트웨어 보안 검사 자동화 +및 인벤토리 반영 +‣ 프로세스 전반에 걸친 SBOM 문서를 작성 +‣ SBOM 문서 작성을 자동화하기 위한 도구 이용 +최적화 +‣ 소프트웨어 개발과 관련된 기업의 프로세스 격리 및 마이크로 +세그멘테이션 수행 +‣ 모든 소프트웨어 개발 및 통합 프로세스 자동화 +‣ 런타임 소프트웨어에 대한 분석 자동화를 통한 보안성 지속 유지 +및 최적화 +소프트웨어 +위험 관리 +소프트웨어 개발 및 운영 과정에서 +발생할 수 있는 보안 위험을 식별, +평가, 완화하는 프로세스이다. +기존 +‣ 소프트웨어 개발 및 운영에 따른 기본적인 위험 요소 식별 및 +문서화 +‣ 위험 관리 계획을 수립하여, 발생 가능한 보안 사고에 대비 +초기 +‣ 위험 평가 프로세스 도입 +‣ 각 소프트웨어의 위험 수준 평가 및 우선순위 지정 +‣ 위험 완화 전략 수립 및 정기적 검토 후 보안 정책 반영 +향상 +‣ 위험 관리 시스템 자동화 +‣ 실시간 소프트웨어 위험 상태 모니터링 및 대응 +‣ 소프트웨어 공급망에 대한 보안 검사 강화 +최적화 +‣ AI 기반 예측 분석 도입 +‣ 잠재적인 보안 위험 사전 식별 및 대응 +‣ 맞춤형 공격 대응 체계 확보 +‣ 기업 전체에 걸쳐 위험 관리 통합 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 안전한 소프트웨어 개발 및 통합 | 소프트웨어 개발 생명주기(SDLC) 전반에 걸쳐 보안 요소를 내재화하고, 개발된 소프트웨어를 안전하게 통합하는 과정이다. 코드 검토, 런타임 보호, 보안 API 게이트웨이, 컨테이너 및 서버리스 보안과 같은 제어 기능이 통합되고 자동화된다. DevSecOps를 통하여 워크플로우를 구성한다. | 기존 | ‣ 개발 프로세스에 기본적인 보안 코딩 표준, 가이드라인 도입 ‣ 코드 배포 전, 정적/수동 보안 테스트 수행 | +| | | 초기 | ‣ 안전성 검토와 테스트를 SDLC에 통합 ‣ 개발 단계에서부터 보안 취약점 식별 및 수정 ‣ CI/CD 파이프라인에 정적 및 동적 분석 도구를 통합하여 자동화된 보안 검사 수행 ‣ DevSecOps 문화 도입 ‣ 주요 개발 내용에 대한 SBOM 문서 작성 | +| | | 향상 | ‣ 서드파티 라이브러리 및 오픈소스 소프트웨어 보안 검사 자동화 및 인벤토리 반영 ‣ 프로세스 전반에 걸친 SBOM 문서를 작성 ‣ SBOM 문서 작성을 자동화하기 위한 도구 이용 | +| | | 최적화 | ‣ 소프트웨어 개발과 관련된 기업의 프로세스 격리 및 마이크로 세그멘테이션 수행 ‣ 모든 소프트웨어 개발 및 통합 프로세스 자동화 ‣ 런타임 소프트웨어에 대한 분석 자동화를 통한 보안성 지속 유지 및 최적화 | +| 소프트웨어 위험 관리 | 소프트웨어 개발 및 운영 과정에서 발생할 수 있는 보안 위험을 식별, 평가, 완화하는 프로세스이다. | 기존 | ‣ 소프트웨어 개발 및 운영에 따른 기본적인 위험 요소 식별 및 문서화 ‣ 위험 관리 계획을 수립하여, 발생 가능한 보안 사고에 대비 | +| | | 초기 | ‣ 위험 평가 프로세스 도입 ‣ 각 소프트웨어의 위험 수준 평가 및 우선순위 지정 ‣ 위험 완화 전략 수립 및 정기적 검토 후 보안 정책 반영 | +| | | 향상 | ‣ 위험 관리 시스템 자동화 ‣ 실시간 소프트웨어 위험 상태 모니터링 및 대응 ‣ 소프트웨어 공급망에 대한 보안 검사 강화 | +| | | 최적화 | ‣ AI 기반 예측 분석 도입 ‣ 잠재적인 보안 위험 사전 식별 및 대응 ‣ 맞춤형 공격 대응 체계 확보 ‣ 기업 전체에 걸쳐 위험 관리 통합 | + + +### 6. 데이터 + +가. 데이터 목록 관리 +기업이 보유한 데이터를 체계적으로 목록화하고, 데이터를 적절히 관리하는 것이 핵심이다. +데이터 카탈로그를 통해 기업 내 데이터를 일관성 있게 정리하고 관리하며, 위험 정렬을 통해 +데이터를 중요도에 따라 분류하고 보안을 적용한다. 기업 내부 데이터 거버넌스는 조직 전반에 걸쳐 +데이터 사용과 관리를 규정하고 일관된 정책을 수립하는 데 중점을 둔다. + +**[표 3-33]** 데이터 핵심 요소의 데이터 목록 관리 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +데이터 +카탈로그 +위험 +정렬 +기업의 모든 데이터를 분류하고, +데이터가 식별 및 목록화되고 +데이터 환경에 대한 모든 변경 +사항이 자동으로 감지되어 +카탈로그 내 포함되는지 확인하는 +것을 의미한다. 각 데이터 항목에 +대한 위험 수준을 평가하여 이를 +체계적으로 관리하는 과정이다. +기존 +‣ 데이터 자산의 초기 카탈로그 작성 +‣ 주요 데이터 유형 수동 분류 +‣ 데이터에 대한 기본적인 위험 평가 정의 및 문서화 +초기 +‣ 자동화된 데이터 카탈로그 도구 도입 +‣ 데이터 자산 일부 자동화를 통한 수집 및 분류 +‣ 데이터의 위험 수준을 평가하기 위한 기본적인 기준과 지침 수립 +향상 +‣ 고급 분석 도구를 통한 데이터 민감도 및 위험 수준 정밀 평가 +‣ 데이터 카탈로그 완전 자동화 +‣ 카탈로그 지속적 업데이트 및 위험 정렬을 기반으로 한 데이터 +보호 정책 적용 +‣ 데이터 사용 패턴 분석 수행 +최적화 +‣ AI를 활용하여 데이터 위험 요소 실시간 분석 및 카탈로그 반영 +‣ 데이터 카탈로그와 다른 보안 시스템 통합 +기업 +데이터 +거버넌스 +기업 내 모든 데이터의 사용, +보호, 관리에 대한 규칙과 절차를 +정의하고, 이를 준수하는 과정을 +의미한다. +기존 +‣ 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 +지침 마련 +‣ 데이터 소유자와 관리자 지정 +‣ 초기 거버넌스 구조 구성 +초기 +‣ 데이터 거버넌스 프레임워크를 도입 +‣ 기업 내 모든 데이터 관리 및 보호 표준화 +‣ 데이터 정책 준수를 위한 정기적인 감사 및 검토 수행 +향상 +‣ 데이터 거버넌스 도구를 사용하여 데이터 관리 프로세스를 +자동화 +‣ 데이터 정책 준수 실시간 모니터링 +‣ 거버넌스 정책을 지속적으로 업데이트하여, 변화하는 규제와 +비즈니스 요구사항에 대응 +최적화 +‣ AI 기반의 거버넌스 관리 시스템을 도입 +‣ 데이터 정책 준수 상태 실시간 평가 및 최적화 +‣ 데이터 거버넌스를 기업의 모든 시스템과 통합하여, 일관된 +데이터 관리 및 보호 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 데이터 카탈로그 위험 정렬 | 기업의 모든 데이터를 분류하고, 데이터가 식별 및 목록화되고 데이터 환경에 대한 모든 변경 사항이 자동으로 감지되어 카탈로그 내 포함되는지 확인하는 것을 의미한다. 각 데이터 항목에 대한 위험 수준을 평가하여 이를 체계적으로 관리하는 과정이다. | 기존 | ‣ 데이터 자산의 초기 카탈로그 작성 ‣ 주요 데이터 유형 수동 분류 ‣ 데이터에 대한 기본적인 위험 평가 정의 및 문서화 | +| | | 초기 | ‣ 자동화된 데이터 카탈로그 도구 도입 ‣ 데이터 자산 일부 자동화를 통한 수집 및 분류 ‣ 데이터의 위험 수준을 평가하기 위한 기본적인 기준과 지침 수립 | +| | | 향상 | ‣ 고급 분석 도구를 통한 데이터 민감도 및 위험 수준 정밀 평가 ‣ 데이터 카탈로그 완전 자동화 ‣ 카탈로그 지속적 업데이트 및 위험 정렬을 기반으로 한 데이터 보호 정책 적용 ‣ 데이터 사용 패턴 분석 수행 | +| | | 최적화 | ‣ AI를 활용하여 데이터 위험 요소 실시간 분석 및 카탈로그 반영 ‣ 데이터 카탈로그와 다른 보안 시스템 통합 | +| 기업 데이터 거버넌스 | 기업 내 모든 데이터의 사용, 보호, 관리에 대한 규칙과 절차를 정의하고, 이를 준수하는 과정을 의미한다. | 기존 | ‣ 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침 마련 ‣ 데이터 소유자와 관리자 지정 ‣ 초기 거버넌스 구조 구성 | +| | | 초기 | ‣ 데이터 거버넌스 프레임워크를 도입 ‣ 기업 내 모든 데이터 관리 및 보호 표준화 ‣ 데이터 정책 준수를 위한 정기적인 감사 및 검토 수행 | +| | | 향상 | ‣ 데이터 거버넌스 도구를 사용하여 데이터 관리 프로세스를 자동화 ‣ 데이터 정책 준수 실시간 모니터링 ‣ 거버넌스 정책을 지속적으로 업데이트하여, 변화하는 규제와 비즈니스 요구사항에 대응 | +| | | 최적화 | ‣ AI 기반의 거버넌스 관리 시스템을 도입 ‣ 데이터 정책 준수 상태 실시간 평가 및 최적화 ‣ 데이터 거버넌스를 기업의 모든 시스템과 통합하여, 일관된 데이터 관리 및 보호 | + + +80 | 제로트러스트 가이드라인 2.0 +나. 접근 결정방법 +데이터를 접근하는 방식에 관한 접근 결정방법을 관리하고 통제한다. 데이터 접근제어 기능을 +통해 데이터에 접근할 수 있는 사용자와 권한을 세밀하게 관리하여, 적절한 사용자가 필요한 +데이터에만 접근하도록 제한한다. 이를 통해 데이터 접근을 중앙에서 통제하고, 무단 접근을 방지할 +수 있다. + +**[표 3-34]** 데이터 핵심 요소의 접근 결정방법 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +데이터 +접근제어 +데이터를 보호하기 위해 데이터에 +접근할 수 있는 권한을 부여하고, +이를 엄격하게 관리하는 과정이다. +데이터 및 사용자·비인간개체·기기 +속성을 기반으로 데이터에 대한 +적절한 접근 및 사용을 보장하여야 +한다. +기존 +‣ 데이터 접근제어 정책 수립 +‣ 초기 권한 체계 수동 관리 +‣ 데이터 접근권한 부여 및 기본적인 접근제어 시행 +초기 +‣ 중앙 집중식 접근제어 시스템을 도입 +‣ 최소한의 권한 요소 확인을 통한 데이터 접근 여부 결정 +향상 +‣ ABAC 도입을 통해 보다 세밀하고 유연한 접근권한 관리 구현 +‣ 접근제어 시스템을 다른 보안 시스템과 통합하여, 종합적인 보안 +정책 적용 +최적화 +‣ AI 기반 데이터 접근제어 최적화 및 실시간 권한 조정 +‣ 모든 데이터 접근제어 자동화 및 조직의 보안 정책에 맞춰 +지속적으로 최적화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 데이터 접근제어 | 데이터를 보호하기 위해 데이터에 접근할 수 있는 권한을 부여하고, 이를 엄격하게 관리하는 과정이다. 데이터 및 사용자·비인간개체·기기 속성을 기반으로 데이터에 대한 적절한 접근 및 사용을 보장하여야 한다. | 기존 | ‣ 데이터 접근제어 정책 수립 ‣ 초기 권한 체계 수동 관리 ‣ 데이터 접근권한 부여 및 기본적인 접근제어 시행 | +| | | 초기 | ‣ 중앙 집중식 접근제어 시스템을 도입 ‣ 최소한의 권한 요소 확인을 통한 데이터 접근 여부 결정 | +| | | 향상 | ‣ ABAC 도입을 통해 보다 세밀하고 유연한 접근권한 관리 구현 ‣ 접근제어 시스템을 다른 보안 시스템과 통합하여, 종합적인 보안 정책 적용 | +| | | 최적화 | ‣ AI 기반 데이터 접근제어 최적화 및 실시간 권한 조정 ‣ 모든 데이터 접근제어 자동화 및 조직의 보안 정책에 맞춰 지속적으로 최적화 | + + +다. 데이터 암호화 +데이터가 전송되거나 저장되는 동안 보호받을 수 있도록 데이터 암호화 기능이 적용된다. +암호화는 데이터를 외부 위협으로부터 안전하게 보호하며, 권한 관리를 통해 암호화된 데이터를 +접근할 수 있는 사용자와 시스템을 제어한다. 이를 통해 민감한 정보의 유출을 방지하고, 데이터의 +무결성을 유지한다. + +**[표 3-35]** 데이터 핵심 요소의 데이터 암호화 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +데이터 +암호화 +및 권한 +관리 +데이터의 무결성과 기밀성을 +보호하기 위해 데이터를 +암호화하고, 접근권한을 관리하는 +과정이다. 저장 및 전송 중인 +데이터를 암호화하기 위한 전략을 +수립하고 구현하여야 한다. +기존 +‣ 주요 데이터 수동으로 암호화 +‣ 기본적인 암호화 정책 수립 +‣ 데이터 보호를 위한 초기 권한 관리 체계 수립 +초기 +‣ 자동화된 데이터 암호화 도구 도입 +‣ 모든 중요한 데이터 자동으로 암호화 +‣ 중앙 집중식 데이터 권한 관리 시스템 도입 +향상 +‣ 고급 암호화 기술을 도입 +‣ 권한 관리 시스템을 다른 보안 시스템과 통합 +‣ RBAC·ABAC 결합을 통한, 보다 정밀한 권한 관리 구현 +최적화 +‣ AI 기반의 암호화 및 권한 관리 시스템 도입을 통하여 데이터 +보호 최적화 및 실시간 권한 조정 +‣ 모든 데이터 암호화 및 권한 관리 자동화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 데이터 암호화 및 권한 관리 | 데이터의 무결성과 기밀성을 보호하기 위해 데이터를 암호화하고, 접근권한을 관리하는 과정이다. 저장 및 전송 중인 데이터를 암호화하기 위한 전략을 수립하고 구현하여야 한다. | 기존 | ‣ 주요 데이터 수동으로 암호화 ‣ 기본적인 암호화 정책 수립 ‣ 데이터 보호를 위한 초기 권한 관리 체계 수립 | +| | | 초기 | ‣ 자동화된 데이터 암호화 도구 도입 ‣ 모든 중요한 데이터 자동으로 암호화 ‣ 중앙 집중식 데이터 권한 관리 시스템 도입 | +| | | 향상 | ‣ 고급 암호화 기술을 도입 ‣ 권한 관리 시스템을 다른 보안 시스템과 통합 ‣ RBAC·ABAC 결합을 통한, 보다 정밀한 권한 관리 구현 | +| | | 최적화 | ‣ AI 기반의 암호화 및 권한 관리 시스템 도입을 통하여 데이터 보호 최적화 및 실시간 권한 조정 ‣ 모든 데이터 암호화 및 권한 관리 자동화 | + + +82 | 제로트러스트 가이드라인 2.0 +라. 데이터 분류 +데이터를 보다 세밀하게 분류하고 관리할 수 있도록 데이터 라벨링 및 태그 지정 기능이 +도입된다. 데이터를 다양한 카테고리로 분류하고 태그를 지정함으로써, 중요도에 따라 다른 +보안 정책을 적용하거나 민감한 데이터를 구분할 수 있다. 이를 통해 데이터가 어떻게 사용되고 +보호되어야 하는지 명확하게 관리할 수 있다. + +**[표 3-36]** 데이터 핵심 요소의 데이터 분류 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +데이터 +라벨링 +및 태그 +지정 +데이터를 식별하고 분류하기 위해 +메타데이터를 추가하는 과정이다. +데이터 소유자는 레이블 지정·태깅 +정책에 대한 관리 지침을 준수하여 +데이터에 레이블을 지정하고 +태그를 지정한다. 단계가 발전함에 +따라 자동화되며, 확장 요구 +사항을 충족하고 더 나은 정확성을 +제공하여야 한다. 이를 통해 +데이터의 보안 수준을 강화할 수 +있다. +기존 +‣ 라벨링 및 태그 지정 지침 수립 +‣ 일관된 데이터 분류 체계 마련 +초기 +‣ 데이터에 기본적인 라벨 및 태그 수동 지정 +‣ 민감한 데이터에 대해 특수 라벨 적용 및 차등적 보안 정책 적용 +향상 +‣ 자동화된 라벨링 및 태그 지정 도구 도입 +‣ 데이터 자산 자동 분류 및 식별 +‣ 데이터 라벨링과 태그 지정 정보를 다른 보안 시스템과 연계 +최적화 +‣ 고급 메타데이터 관리 도구를 사용 +‣ 데이터 라벨링과 태그 지정 프로세스를 최적화 및 자동화된 규칙 +적용 +‣ AI를 활용하여 데이터 라벨링과 태그 지정을 실시간 최적화 +‣ 변화하는 데이터 환경에 따라 자동으로 태그 조정 +‣ 라벨링 및 태그 지정 정보를 모든 보안 시스템과 통합 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 데이터 라벨링 및 태그 지정 | 데이터를 식별하고 분류하기 위해 메타데이터를 추가하는 과정이다. 데이터 소유자는 레이블 지정·태깅 정책에 대한 관리 지침을 준수하여 데이터에 레이블을 지정하고 태그를 지정한다. 단계가 발전함에 따라 자동화되며, 확장 요구 사항을 충족하고 더 나은 정확성을 제공하여야 한다. 이를 통해 데이터의 보안 수준을 강화할 수 있다. | 기존 | ‣ 라벨링 및 태그 지정 지침 수립 ‣ 일관된 데이터 분류 체계 마련 | +| | | 초기 | ‣ 데이터에 기본적인 라벨 및 태그 수동 지정 ‣ 민감한 데이터에 대해 특수 라벨 적용 및 차등적 보안 정책 적용 | +| | | 향상 | ‣ 자동화된 라벨링 및 태그 지정 도구 도입 ‣ 데이터 자산 자동 분류 및 식별 ‣ 데이터 라벨링과 태그 지정 정보를 다른 보안 시스템과 연계 | +| | | 최적화 | ‣ 고급 메타데이터 관리 도구를 사용 ‣ 데이터 라벨링과 태그 지정 프로세스를 최적화 및 자동화된 규칙 적용 ‣ AI를 활용하여 데이터 라벨링과 태그 지정을 실시간 최적화 ‣ 변화하는 데이터 환경에 따라 자동으로 태그 조정 ‣ 라벨링 및 태그 지정 정보를 모든 보안 시스템과 통합 | + + +마. 데이터 손실 방지 +데이터 손실 방지(DLP) 기능을 통해 데이터를 외부로부터 보호하고, 내부적으로도 민감한 정보가 +유출되지 않도록 한다. 데이터 모니터링 및 감지를 통해 데이터를 실시간으로 감시하여 이상 징후나 +데이터 유출이 발생할 경우 즉시 탐지하고 대응할 수 있다. 이는 데이터를 안전하게 유지하고 +손실을 방지하는 데 필수적이다. + +**[표 3-37]** 데이터 핵심 요소의 데이터 손실 방지 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +데이터 +손실 +방지 +(DLP) +민감한 데이터의 유출을 +방지하고, 데이터의 무단 접근을 +차단하기 위한 기술과 정책이다. +시행 지점을 식별하여 승인된 +DLP 도구를 배포하고 태그가 +지정된 데이터 속성을 DLP와 +통합한다. 처음에 DLP 솔루션은 +비즈니스 영향을 제한하기 +위해 “모니터링 전용” 모드로 +사용하고 나중에 분석 사용은 +“방지” 모드로 사용한다. 이후, +AI와 통합하여 사용한다. +기존 +‣ DLP 정책을 수립 +‣ 민감한 데이터의 유출 가능성 수동 평가 +‣ DLP 도구를 도입하기 위한 기업 내 범위 지정 +초기 +‣ 초기 DLP 도구를 도입, 주요 데이터 유출 경로 모니터링 +‣ DLP 정책 중앙 관리 및 다양한 데이터 채널을 통한 유출 차단 +‣ DLP 솔루션 모니터링 모드로 사용 +향상 +‣ DLP 시스템을 기업 전반에 도입, 실시간 데이터 보호 및 유출 방지 +‣ DLP 시스템을 다른 보안 시스템과 통합, 종합적인 데이터 보호 +전략 구현 +‣ DLP 솔루션 방지 모드로 사용 +최적화 +‣ AI를 활용한 데이터 유출 탐지와 예방 기능을 강화 +‣ 데이터 유출 위험 실시간 예측 및 차단 +‣ 모든 DLP 프로세스를 자동화 +‣ 변화하는 데이터 환경에 맞춰 자동으로 보안 정책 최적화 +데이터 +모니터링 +및 감지 +데이터 사용과 이동을 +실시간으로 모니터링하고, +비정상적인 활동을 탐지하여 +보안을 유지하는 과정이다. +데이터 소유자는 데이터 자산의 +접근, 공유, 변환 및 사용에 +대한 정보가 포함된 활성 +메타데이터를 모니터링한다. +DLP(데이터 손실 방지) 및 +DRM(데이터 권한 관리) 적용 +지점 분석을 수행하여 분석 +도구를 배포할 위치를 결정한다. +파일 공유, 데이터베이스 +등 DLP 및 DRM 범위 +밖의 데이터는 대체 도구를 +사용하여 변칙적이고 악의적인 +활동이 있는지 적극적으로 +모니터링하여야 한다. +기존 +‣ 데이터 활동 수동 모니터링 +‣ 주요 보안 이벤트 수동 기록 +‣ 초기 데이터 모니터링 및 감지 프로세스 수립 +초기 +‣ 자동화된 데이터 모니터링 도구를 도입 +‣ 실시간 데이터 활동 감시 및 비정상적인 행동 탐지 +‣ 모니터링 결과 기반 보안 정책 조정 +향상 +‣ AI 기반의 모니터링 시스템을 도입, 데이터 활동 분석 및 이상 징후 +실시간 탐지 +‣ 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 +보안 대응 구현 +최적화 +‣ AI를 활용하여 데이터 모니터링 최적화 +‣ 사전에 위협 예측 및 대응 +‣ 모든 데이터 활동 지속적 평가 및 자동화된 보안 대응 시스템 구축 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 데이터 손실 방지 (DLP) | 민감한 데이터의 유출을 방지하고, 데이터의 무단 접근을 차단하기 위한 기술과 정책이다. 시행 지점을 식별하여 승인된 DLP 도구를 배포하고 태그가 지정된 데이터 속성을 DLP와 통합한다. 처음에 DLP 솔루션은 비즈니스 영향을 제한하기 위해 “모니터링 전용” 모드로 사용하고 나중에 분석 사용은 “방지” 모드로 사용한다. 이후, AI와 통합하여 사용한다. | 기존 | ‣ DLP 정책을 수립 ‣ 민감한 데이터의 유출 가능성 수동 평가 ‣ DLP 도구를 도입하기 위한 기업 내 범위 지정 | +| | | 초기 | ‣ 초기 DLP 도구를 도입, 주요 데이터 유출 경로 모니터링 ‣ DLP 정책 중앙 관리 및 다양한 데이터 채널을 통한 유출 차단 ‣ DLP 솔루션 모니터링 모드로 사용 | +| | | 향상 | ‣ DLP 시스템을 기업 전반에 도입, 실시간 데이터 보호 및 유출 방지 ‣ DLP 시스템을 다른 보안 시스템과 통합, 종합적인 데이터 보호 전략 구현 ‣ DLP 솔루션 방지 모드로 사용 | +| | | 최적화 | ‣ AI를 활용한 데이터 유출 탐지와 예방 기능을 강화 ‣ 데이터 유출 위험 실시간 예측 및 차단 ‣ 모든 DLP 프로세스를 자동화 ‣ 변화하는 데이터 환경에 맞춰 자동으로 보안 정책 최적화 | +| 데이터 모니터링 및 감지 | 데이터 사용과 이동을 실시간으로 모니터링하고, 비정상적인 활동을 탐지하여 보안을 유지하는 과정이다. 데이터 소유자는 데이터 자산의 접근, 공유, 변환 및 사용에 대한 정보가 포함된 활성 메타데이터를 모니터링한다. DLP(데이터 손실 방지) 및 DRM(데이터 권한 관리) 적용 지점 분석을 수행하여 분석 도구를 배포할 위치를 결정한다. 파일 공유, 데이터베이스 등 DLP 및 DRM 범위 밖의 데이터는 대체 도구를 사용하여 변칙적이고 악의적인 활동이 있는지 적극적으로 모니터링하여야 한다. | 기존 | ‣ 데이터 활동 수동 모니터링 ‣ 주요 보안 이벤트 수동 기록 ‣ 초기 데이터 모니터링 및 감지 프로세스 수립 | +| | | 초기 | ‣ 자동화된 데이터 모니터링 도구를 도입 ‣ 실시간 데이터 활동 감시 및 비정상적인 행동 탐지 ‣ 모니터링 결과 기반 보안 정책 조정 | +| | | 향상 | ‣ AI 기반의 모니터링 시스템을 도입, 데이터 활동 분석 및 이상 징후 실시간 탐지 ‣ 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응 구현 | +| | | 최적화 | ‣ AI를 활용하여 데이터 모니터링 최적화 ‣ 사전에 위협 예측 및 대응 ‣ 모든 데이터 활동 지속적 평가 및 자동화된 보안 대응 시스템 구축 | + + +84 | 제로트러스트 가이드라인 2.0 + +### 7. 가시성 및 분석 + +가시성 및 분석 교차 기능에 대해서는 각각 모든 관련 활동 기록, 중앙집중적 보안 정보 및 +이벤트 관리, 보안 위협 분석, 사용자 및 기기 동작 분석, 위협 인텔리전스 통합, 자동화된 동적 정책 +세부역량 등을 정의하였다. + +**[표 3-38]** 가시성 및 분석 교차 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +모든 +관련 +활동 +기록 +네트워크, 사용자, 기기, +애플리케이션 등에서 발생하는 +모든 이벤트를 기록하고 저장하는 +기능이다. 이는 로그 데이터를 +생성하고, 이를 기반으로 향후 +분석을 위한 데이터를 축적하는 +역할을 한다. 관련 활동에는 로그인 +시도, 접근권한 변경, 데이터 전송, +애플리케이션 실행 등 보안과 +관련된 모든 행동이 포함된다. +이 기능은 잠재적인 보안 위협을 +식별하고, 사건 발생 시 정확한 +추적과 분석을 가능하게 한다. +기존 +‣ 네트워크 및 시스템에서 발생하는 주요 보안 이벤트 기록 +‣ 수동적 로그 기록 +‣ 로그 데이터는 특정 시스템에서만 수집 +‣ 주요 보안 이벤트(예: 로그인 시도, 접근 실패, 권한 변경) 기록 +‣ 보안 사고 발생 시 수동으로 로그를 추적하여 분석할 수 있는 +기본적인 체계 마련 +초기 +‣ 다양한 시스템에서 자동으로 로그 데이터 수집 +‣ 활동 기록 중앙집중적 수집 +‣ 로그 수집은 네트워크, 애플리케이션, 기기 등 여러 곳에서 +이루어지며, 실시간으로 보안 이벤트 기록 +‣ 로그 수집 및 관리 자동화 +‣ 보안 사고 발생 시 신속하게 로그를 분석하고 대응할 수 있는 +기반 마련 +향상 +‣ 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지하고 +경고 생성 +‣ 로그 기록의 무결성 보장 +‣ 로그 데이터를 기반으로 예측 분석 시작 +‣ 비정상적인 활동 사전 감지 +최적화 +‣ AI를 활용한 로그 분석 시스템 구축 +‣ 실시간으로 활동 기록 분석 및 자동으로 보안 위협 +탐지·대응하는 자율 보안 체계 구축 +‣ 로그 데이터 관련 항목 포맷 자동화 및 정규화 +‣ 실시간 로그 분석을 통한 보안 정책 자동 조정 +‣ 모든 활동 기록 중앙 관리 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 모든 관련 활동 기록 | 네트워크, 사용자, 기기, 애플리케이션 등에서 발생하는 모든 이벤트를 기록하고 저장하는 기능이다. 이는 로그 데이터를 생성하고, 이를 기반으로 향후 분석을 위한 데이터를 축적하는 역할을 한다. 관련 활동에는 로그인 시도, 접근권한 변경, 데이터 전송, 애플리케이션 실행 등 보안과 관련된 모든 행동이 포함된다. 이 기능은 잠재적인 보안 위협을 식별하고, 사건 발생 시 정확한 추적과 분석을 가능하게 한다. | 기존 | ‣ 네트워크 및 시스템에서 발생하는 주요 보안 이벤트 기록 ‣ 수동적 로그 기록 ‣ 로그 데이터는 특정 시스템에서만 수집 ‣ 주요 보안 이벤트(예: 로그인 시도, 접근 실패, 권한 변경) 기록 ‣ 보안 사고 발생 시 수동으로 로그를 추적하여 분석할 수 있는 기본적인 체계 마련 | +| | | 초기 | ‣ 다양한 시스템에서 자동으로 로그 데이터 수집 ‣ 활동 기록 중앙집중적 수집 ‣ 로그 수집은 네트워크, 애플리케이션, 기기 등 여러 곳에서 이루어지며, 실시간으로 보안 이벤트 기록 ‣ 로그 수집 및 관리 자동화 ‣ 보안 사고 발생 시 신속하게 로그를 분석하고 대응할 수 있는 기반 마련 | +| | | 향상 | ‣ 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지하고 경고 생성 ‣ 로그 기록의 무결성 보장 ‣ 로그 데이터를 기반으로 예측 분석 시작 ‣ 비정상적인 활동 사전 감지 | +| | | 최적화 | ‣ AI를 활용한 로그 분석 시스템 구축 ‣ 실시간으로 활동 기록 분석 및 자동으로 보안 위협 탐지·대응하는 자율 보안 체계 구축 ‣ 로그 데이터 관련 항목 포맷 자동화 및 정규화 ‣ 실시간 로그 분석을 통한 보안 정책 자동 조정 ‣ 모든 활동 기록 중앙 관리 | + + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +중앙집중적 +보안 정보 +및 이벤트 +관리 +중앙집중적 SIEM은 다양한 보안 +이벤트 및 로그 데이터를 한 곳에서 +수집하고 관리하는 시스템이다. +SIEM은 다수의 보안 도구에서 +데이터를 통합하여, 실시간 +모니터링, 로그 분석, 경고 및 +보고서 작성 기능을 제공한다. 이를 +통해 네트워크 전체의 보안 상태를 +중앙에서 파악하고, 빠르게 보안 +사고에 대응할 수 있다. SIEM은 +보안 정책 준수 및 규제 요구사항을 +충족하는 데도 도움을 준다. +기존 +‣ 보안 이벤트 및 로그 데이터 수동 수집·저장 +‣ 각 시스템에서 발생하는 보안 기록 개별적 관리 +‣ 수동 데이터 분석 +‣ 사고 발생 시 필요한 정보를 추적하는 체계 마련 +초기 +‣ 다양한 시스템에서 발생하는 보안 이벤트와 로그 데이터를 +자동으로 중앙집중적 SIEM 시스템으로 전송·수집·관리 +‣ 수집된 데이터 실시간 모니터링 +‣ 보안 사고 발생 시 신속하게 대응할 수 있는 중앙집중적 보안 +관리 체계 구축 +향상 +‣ 중앙집중적 SIEM 시스템에서 실시간으로 보안 이벤트를 +분석하고 경고 생성 +‣ SIEM 시스템과 다양한 보안 도구 연동을 통한 보안 데이터 +종합적 분석 +최적화 +‣ AI를 도입하여 SIEM 시스템에서 수집된 데이터를 기반으로 +보안 이벤트 자동 분석 +‣ 비정상적인 활동 실시간 탐지 +‣ 자율적으로 보안 정책 조정 및 보안 사고 발생 시 자동 대응 기능 +구현 +보안 +위협 +분석 +네트워크에서 발생하는 다양한 +활동 및 로그를 분석하여, 잠재적인 +보안 위협을 식별하고 대응하는 +기능이다. 이는 수집된 로그와 +데이터를 기반으로 공격 패턴, +취약점, 이상 행동 등을 분석하여 +위협을 사전에 탐지하고, 필요 +시 자동으로 조치를 취하는 데 +사용된다. 보안 위협 분석은 +실시간으로 수행되며, 침입 시도나 +악성 활동을 빠르게 파악하여 +피해를 최소화할 수 있다. +기존 +‣ 수동으로 보안 위협 식별 +‣ 보안 사건 발생 시 추적/분석하는 시스템 구축 +‣ 보안 로그 및 데이터를 기본적으로 수집 +‣ 보안 사고 발생 후 사후 분석을 통한 대응 +‣ CVE, ExploitDB 등 취약점 수집 +초기 +‣ 알려진 취약점에 대한 위험성 평가 기준 구현 +‣ 수집된 데이터를 기반으로 보안 위협을 빠르게 분석하고, 경고 +생성 +향상 +‣ 자동화된 보안 위협 분석 도구 도입 +‣ ML을 활용하여 비정상적인 활동 실시간 분석 +‣ 지속적인 위협 탐지 수행 +최적화 +‣ AI 기반의 예측 분석 시스템을 통한 실시간 위협 탐지 및 자동 +대응 +‣ 자율 보안 체계 구축 +‣ 보안 위협 발생 전 차단 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 중앙집중적 보안 정보 및 이벤트 관리 | 중앙집중적 SIEM은 다양한 보안 이벤트 및 로그 데이터를 한 곳에서 수집하고 관리하는 시스템이다. SIEM은 다수의 보안 도구에서 데이터를 통합하여, 실시간 모니터링, 로그 분석, 경고 및 보고서 작성 기능을 제공한다. 이를 통해 네트워크 전체의 보안 상태를 중앙에서 파악하고, 빠르게 보안 사고에 대응할 수 있다. SIEM은 보안 정책 준수 및 규제 요구사항을 충족하는 데도 도움을 준다. | 기존 | ‣ 보안 이벤트 및 로그 데이터 수동 수집·저장 ‣ 각 시스템에서 발생하는 보안 기록 개별적 관리 ‣ 수동 데이터 분석 ‣ 사고 발생 시 필요한 정보를 추적하는 체계 마련 | +| | | 초기 | ‣ 다양한 시스템에서 발생하는 보안 이벤트와 로그 데이터를 자동으로 중앙집중적 SIEM 시스템으로 전송·수집·관리 ‣ 수집된 데이터 실시간 모니터링 ‣ 보안 사고 발생 시 신속하게 대응할 수 있는 중앙집중적 보안 관리 체계 구축 | +| | | 향상 | ‣ 중앙집중적 SIEM 시스템에서 실시간으로 보안 이벤트를 분석하고 경고 생성 ‣ SIEM 시스템과 다양한 보안 도구 연동을 통한 보안 데이터 종합적 분석 | +| | | 최적화 | ‣ AI를 도입하여 SIEM 시스템에서 수집된 데이터를 기반으로 보안 이벤트 자동 분석 ‣ 비정상적인 활동 실시간 탐지 ‣ 자율적으로 보안 정책 조정 및 보안 사고 발생 시 자동 대응 기능 구현 | +| 보안 위협 분석 | 네트워크에서 발생하는 다양한 활동 및 로그를 분석하여, 잠재적인 보안 위협을 식별하고 대응하는 기능이다. 이는 수집된 로그와 데이터를 기반으로 공격 패턴, 취약점, 이상 행동 등을 분석하여 위협을 사전에 탐지하고, 필요 시 자동으로 조치를 취하는 데 사용된다. 보안 위협 분석은 실시간으로 수행되며, 침입 시도나 악성 활동을 빠르게 파악하여 피해를 최소화할 수 있다. | 기존 | ‣ 수동으로 보안 위협 식별 ‣ 보안 사건 발생 시 추적/분석하는 시스템 구축 ‣ 보안 로그 및 데이터를 기본적으로 수집 ‣ 보안 사고 발생 후 사후 분석을 통한 대응 ‣ CVE, ExploitDB 등 취약점 수집 | +| | | 초기 | ‣ 알려진 취약점에 대한 위험성 평가 기준 구현 ‣ 수집된 데이터를 기반으로 보안 위협을 빠르게 분석하고, 경고 생성 | +| | | 향상 | ‣ 자동화된 보안 위협 분석 도구 도입 ‣ ML을 활용하여 비정상적인 활동 실시간 분석 ‣ 지속적인 위협 탐지 수행 | +| | | 최적화 | ‣ AI 기반의 예측 분석 시스템을 통한 실시간 위협 탐지 및 자동 대응 ‣ 자율 보안 체계 구축 ‣ 보안 위협 발생 전 차단 | + + +86 | 제로트러스트 가이드라인 2.0 +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +사용자 +및 기기 +동작 +분석 +네트워크 내의 사용자의 행동 +패턴과 기기 활동을 모니터링하여, +비정상적이거나 의심스러운 활동을 +탐지하는 기능이다. 이를 통해 +정상적인 행동과 이상 행동을 +구분하고, 악의적인 활동을 탐지할 +수 있다. 예를 들어, 평소와 다른 +시간에 접속하거나, 특정 사용자가 +비정상적으로 많은 데이터를 +전송할 경우 이를 탐지하여 경고를 +발송할 수 있다. 이 기능은 AI·ML을 +활용하여 행동 패턴을 학습하고, +실시간으로 분석을 수행한다. +기존 +‣ 사용자와 기기의 기본적인 활동 데이터 수집 및 수동 분석 +‣ 비정상적인 행동 수동 탐지 +‣ 기본적인 사용자 행동 패턴 기록 +‣ 의심스러운 활동 추적 +초기 +‣ 자동화된 사용자 및 기기 동작 분석 도구 도입 +‣ 네트워크 내 모든 활동 실시간 모니터링 +‣ 사용자 행동 패턴과 기기 활동 자동으로 분석 +‣ 이상 행동 감지 시 즉각 경고 생성 및 대응 +향상 +‣ 고급 행동 분석 기능을 도입 +‣ 비정상적인 사용자 활동과 기기 동작을 더욱 정밀하게 탐지 +‣ AI·ML을 활용하여 사용자 및 기기의 행동 패턴 학습 +‣ 지속적으로 변화하는 패턴에 따라 실시간 대응 +최적화 +‣ AI 기반 자율적인 사용자 및 기기 동작 분석 시스템 구축 +‣ 비정상적인 활동 예측 및 사전 차단 +‣ 보안 정책을 자동으로 조정하여 최소 권한 부여 +위협 +인텔리전스 +통합 +외부의 보안 위협 정보를 +수집하고 이를 기업 내 보안 +시스템에 적용하여 위협 대응 +능력을 향상시키는 기능이다. +위협 인텔리전스는 악성 IP 주소, +도메인, 취약점 정보 등 다양한 +외부 데이터를 포함하며, 이를 통해 +기업 내에서 발생할 수 있는 위협을 +사전에 탐지하고 차단할 수 있다. +이 기능은 위협 데이터베이스와 +연동되어 지속적으로 최신 정보를 +업데이트하며, 보안 시스템과 +통합되어 자동으로 대응 조치를 할 +수 있다. +기존 +‣ 외부의 보안 위협 정보를 수동으로 수집 후, 내부 보안 시스템에 +적용 +‣ 외부 위협 인텔리전스를 수동으로 확인 +‣ 위협 데이터를 기업 내 시스템과 수동으로 연동 +초기 +‣ 자동화된 위협 인텔리전스 통합 도구 도입 +‣ 외부에서 수집된 보안 정보를 실시간으로 내부 보안 시스템과 +연동 +‣ 위협 인텔리전스를 자동으로 업데이트를 통한 위협 탐지 및 차단 +기능 강화 +향상 +‣ 고급 위협 인텔리전스 통합 시스템을 통해 외부 위협 정보를 +더욱 세밀하게 분석, 내부 보안 정책과 실시간으로 연계 +‣ 위협 인텔리전스를 내부 시스템과 통합 +최적화 +‣ AI 기반의 위협 인텔리전스 시스템을 구축 +‣ 외부 위협 정보 실시간으로 수집, 분석, 적용 +‣ 자율적으로 위협 인텔리전스를 기반으로 보안 정책 업데이트 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 사용자 및 기기 동작 분석 | 네트워크 내의 사용자의 행동 패턴과 기기 활동을 모니터링하여, 비정상적이거나 의심스러운 활동을 탐지하는 기능이다. 이를 통해 정상적인 행동과 이상 행동을 구분하고, 악의적인 활동을 탐지할 수 있다. 예를 들어, 평소와 다른 시간에 접속하거나, 특정 사용자가 비정상적으로 많은 데이터를 전송할 경우 이를 탐지하여 경고를 발송할 수 있다. 이 기능은 AI·ML을 활용하여 행동 패턴을 학습하고, 실시간으로 분석을 수행한다. | 기존 | ‣ 사용자와 기기의 기본적인 활동 데이터 수집 및 수동 분석 ‣ 비정상적인 행동 수동 탐지 ‣ 기본적인 사용자 행동 패턴 기록 ‣ 의심스러운 활동 추적 | +| | | 초기 | ‣ 자동화된 사용자 및 기기 동작 분석 도구 도입 ‣ 네트워크 내 모든 활동 실시간 모니터링 ‣ 사용자 행동 패턴과 기기 활동 자동으로 분석 ‣ 이상 행동 감지 시 즉각 경고 생성 및 대응 | +| | | 향상 | ‣ 고급 행동 분석 기능을 도입 ‣ 비정상적인 사용자 활동과 기기 동작을 더욱 정밀하게 탐지 ‣ AI·ML을 활용하여 사용자 및 기기의 행동 패턴 학습 ‣ 지속적으로 변화하는 패턴에 따라 실시간 대응 | +| | | 최적화 | ‣ AI 기반 자율적인 사용자 및 기기 동작 분석 시스템 구축 ‣ 비정상적인 활동 예측 및 사전 차단 ‣ 보안 정책을 자동으로 조정하여 최소 권한 부여 | +| 위협 인텔리전스 통합 | 외부의 보안 위협 정보를 수집하고 이를 기업 내 보안 시스템에 적용하여 위협 대응 능력을 향상시키는 기능이다. 위협 인텔리전스는 악성 IP 주소, 도메인, 취약점 정보 등 다양한 외부 데이터를 포함하며, 이를 통해 기업 내에서 발생할 수 있는 위협을 사전에 탐지하고 차단할 수 있다. 이 기능은 위협 데이터베이스와 연동되어 지속적으로 최신 정보를 업데이트하며, 보안 시스템과 통합되어 자동으로 대응 조치를 할 수 있다. | 기존 | ‣ 외부의 보안 위협 정보를 수동으로 수집 후, 내부 보안 시스템에 적용 ‣ 외부 위협 인텔리전스를 수동으로 확인 ‣ 위협 데이터를 기업 내 시스템과 수동으로 연동 | +| | | 초기 | ‣ 자동화된 위협 인텔리전스 통합 도구 도입 ‣ 외부에서 수집된 보안 정보를 실시간으로 내부 보안 시스템과 연동 ‣ 위협 인텔리전스를 자동으로 업데이트를 통한 위협 탐지 및 차단 기능 강화 | +| | | 향상 | ‣ 고급 위협 인텔리전스 통합 시스템을 통해 외부 위협 정보를 더욱 세밀하게 분석, 내부 보안 정책과 실시간으로 연계 ‣ 위협 인텔리전스를 내부 시스템과 통합 | +| | | 최적화 | ‣ AI 기반의 위협 인텔리전스 시스템을 구축 ‣ 외부 위협 정보 실시간으로 수집, 분석, 적용 ‣ 자율적으로 위협 인텔리전스를 기반으로 보안 정책 업데이트 | + + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +자동화된 +동적 +정책 +실시간으로 발생하는 보안 +이벤트와 분석 결과를 기반으로 +네트워크의 보안 정책을 자동으로 +변경하는 기능이다. 이는 보안 +위협이나 비정상적인 활동이 +감지되었을 때, 사전에 정의된 +정책을 자동으로 적용하거나 +새로운 정책을 실시간으로 +생성하여 네트워크 보안을 +강화하는 데 사용된다. 예를 들어, +특정 사용자의 행동이 이상하다고 +판단되면 그 사용자의 접근권한을 +자동으로 제한하거나, 네트워크 +세그먼트를 재조정할 수 있다. +자동화된 동적 정책은 빠르고 +유연한 대응을 가능하게 하여, 보안 +사고를 최소화할 수 있다. +기존 +‣ 기본적인 보안 정책을 수동 관리 +‣ 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응 +‣ 정책 변경이 수동으로 이루어지며, 보안 사고 발생 후 대응 +초기 +‣ 자동화된 정책 관리 시스템을 도입 +‣ 보안 이벤트 발생 시 자동 정책 변경 및 적용 +‣ 위협이 감지되면 사전 정의 정책을 자동 실행 +향상 +‣ 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 +즉각적으로 새로운 정책을 생성하고 적용 +‣ 위협 탐지와 연계하여 동적으로 정책 조정 +최적화 +‣ AI 기반의 자동화된 동적 정책 시스템 구축 +‣ 보안 이벤트 분석 결과에 따라 자율적인 정책 조정 +‣ 실시간으로 네트워크의 보안 상태를 모니터링하고, 상황에 따라 +정책을 유연하게 변경 + +### 8. 자동화 및 통합 + +자동화 및 통합 교차 기능에 대해서는 각각 정책 통합, 중요 프로세스 자동화, 인공 지능, 보안 +통합, 자동화 및 대응, 데이터 교환 표준화, 보안 운영 조정 및 사고 대응 세부역량 등을 정의하였다. + +**[표 3-39]** 자동화 및 통합 교차 기능에 대한 세부역량 및 성숙도 정의 + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +정책 +통합 +기업 내 보안 정책을 자동으로 +조정하고, 여러 시스템과 네트워크 +장비에 일관된 정책을 적용하는 +프로세스이다. 보안 이벤트 발생 +시 실시간으로 정책을 변경하거나 +조정할 수 있으며, 이를 통해 +신속하고 일관된 보안 대응이 +가능해진다. +기존 +‣ 기업 내 보안 정책을 수동 관리 +‣ 각 시스템에 개별적으로 적용 +‣ 정책 조정 시 수동으로 각 시스템에 변경 사항을 반영 +초기 +‣ 자동화된 정책 통합 시스템을 도입 +‣ 보안 정책을 중앙에서 관리하고 여러 시스템에 동시 적용 +‣ 정책 변경 자동화 +향상 +‣ 정책 통합 시스템을 고도화하여 실시간 보안 이벤트를 기반 정책 +동적 조정 +‣ 위협에 따라 즉각적으로 정책 수정/적용하는 자동화된 프로세스 +정착 +최적화 +‣ AI 기반 자율 정책 통합 시스템 도입 +‣ 상황에 맞게 정책 자동 조정 +‣ 보안 이벤트를 실시간으로 분석하여 필요한 정책 변경을 +자율적으로 수행 +‣ 정책 적용이 모든 시스템에 빠르게 동기화 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 자동화된 동적 정책 | 실시간으로 발생하는 보안 이벤트와 분석 결과를 기반으로 네트워크의 보안 정책을 자동으로 변경하는 기능이다. 이는 보안 위협이나 비정상적인 활동이 감지되었을 때, 사전에 정의된 정책을 자동으로 적용하거나 새로운 정책을 실시간으로 생성하여 네트워크 보안을 강화하는 데 사용된다. 예를 들어, 특정 사용자의 행동이 이상하다고 판단되면 그 사용자의 접근권한을 자동으로 제한하거나, 네트워크 세그먼트를 재조정할 수 있다. 자동화된 동적 정책은 빠르고 유연한 대응을 가능하게 하여, 보안 사고를 최소화할 수 있다. | 기존 | ‣ 기본적인 보안 정책을 수동 관리 ‣ 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응 ‣ 정책 변경이 수동으로 이루어지며, 보안 사고 발생 후 대응 | +| | | 초기 | ‣ 자동화된 정책 관리 시스템을 도입 ‣ 보안 이벤트 발생 시 자동 정책 변경 및 적용 ‣ 위협이 감지되면 사전 정의 정책을 자동 실행 | +| | | 향상 | ‣ 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용 ‣ 위협 탐지와 연계하여 동적으로 정책 조정 | +| | | 최적화 | ‣ AI 기반의 자동화된 동적 정책 시스템 구축 ‣ 보안 이벤트 분석 결과에 따라 자율적인 정책 조정 ‣ 실시간으로 네트워크의 보안 상태를 모니터링하고, 상황에 따라 정책을 유연하게 변경 | + + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 정책 통합 | 기업 내 보안 정책을 자동으로 조정하고, 여러 시스템과 네트워크 장비에 일관된 정책을 적용하는 프로세스이다. 보안 이벤트 발생 시 실시간으로 정책을 변경하거나 조정할 수 있으며, 이를 통해 신속하고 일관된 보안 대응이 가능해진다. | 기존 | ‣ 기업 내 보안 정책을 수동 관리 ‣ 각 시스템에 개별적으로 적용 ‣ 정책 조정 시 수동으로 각 시스템에 변경 사항을 반영 | +| | | 초기 | ‣ 자동화된 정책 통합 시스템을 도입 ‣ 보안 정책을 중앙에서 관리하고 여러 시스템에 동시 적용 ‣ 정책 변경 자동화 | +| | | 향상 | ‣ 정책 통합 시스템을 고도화하여 실시간 보안 이벤트를 기반 정책 동적 조정 ‣ 위협에 따라 즉각적으로 정책 수정/적용하는 자동화된 프로세스 정착 | +| | | 최적화 | ‣ AI 기반 자율 정책 통합 시스템 도입 ‣ 상황에 맞게 정책 자동 조정 ‣ 보안 이벤트를 실시간으로 분석하여 필요한 정책 변경을 자율적으로 수행 ‣ 정책 적용이 모든 시스템에 빠르게 동기화 | + + +88 | 제로트러스트 가이드라인 2.0 +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +중요 +프로세스 +자동화 +보안 및 운영에 필요한 핵심 +프로세스를 자동화하여, 업무의 +효율성을 높이고 인적 오류를 +줄이는 것을 목표로 한다. 이는 +중요한 시스템 이벤트 처리, 데이터 +백업, 장애 대응 등의 프로세스를 +포함한다. +기존 +‣ 핵심 보안 및 운영 프로세스 수동으로 관리 +‣ 특정 사건이 발생할 때마다 관리자가 직접 개입하여 처리 +‣ 자동화 도구의 제한적 사용 +‣ 수동 절차에 의존 +초기 +‣ 중요한 프로세스에 대한 자동화 도구를 도입 +‣ 반복적인 작업과 기본적인 보안 절차 자동으로 처리 +‣ 데이터 백업 및 기본 장애 대응과 같은 주요 업무 자동화 +향상 +‣ 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 +대응 +‣ 주요 보안 이벤트에 대한 실시간 경고 및 대응 시스템이 도입 +최적화 +‣ AI·ML을 기반으로 모든 중요 프로세스가 자율적으로 운영 +‣ 이상 상황 발생 시 즉각 대응 +‣ 자동화 시스템은 모든 프로세스를 실시간으로 최적화 +‣ 업무 중단 없이 중요한 프로세스를 자동으로 조정 +인공 +지능 +보안 위협을 감지하고 분석하는 데 +있어 인간의 개입을 최소화하고, +네트워크와 시스템에서 발생하는 +데이터를 기반으로 보안 결정을 +자동화하는 기능을 제공한다. +기존 +‣ AI 기술이 적용되지 않은 상태 +‣ 수동 분석과 경고 시스템에 의존 +‣ 데이터를 수동으로 수집하고 분석 +‣ 수동적 보안 위협 대응 +초기 +‣ 기본적인 AI 기반 도구를 도입 +‣ 보안 이벤트를 분석하고 패턴 식별 +‣ AI가 보안 위협을 자동으로 탐지 및 경고 생성 +‣ 기본적인 자동 대응 가능 +향상 +‣ AI 기반의 보안 시스템 고도화를 통한 실시간위협 탐지 및 대응 +‣ AI는 복잡한 활동을 분석하여 보다 정교한 위협 탐지와 실시간 +대응 수행 +최적화 +‣ AI가 모든 보안 시스템에 완전히 통합 +‣ 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 +조정 +‣ AI는 데이터와 행동 패턴을 학습하여 지속적으로 보안을 최적화 +‣ 잠재적 위협 사전 차단 +보안 +통합, +자동화 +및 대응 +(SOAR) +SOAR는 보안 이벤트에 대한 +대응을 자동화하고, 여러 보안 +도구와 시스템을 통합하여 일관된 +보안 통합을 수행하는 시스템이다. +이를 통해 기업은 보안 사고에 +신속하게 대응하고, 반복적인 +작업을 자동화하여 운영 효율성을 +높일 수 있다. +기존 +‣ 보안 도구와 시스템이 각각 독립적으로 운영 +‣ 수동 대응에 의존 +‣ 보안 사고 발생 시 여러 도구에서 데이터를 수집 및 분석하며, +대응 절차도 개별적으로 수행 +초기 +‣ SOAR 시스템을 도입 +‣ 보안 도구와 시스템을 통합하고, 기본적인 보안 이벤트에 대한 +자동화된 대응 절차 마련 +‣ 보안 이벤트가 발생하면 여러 시스템에서 데이터를 수집하여 +중앙에서 대응 +향상 +‣ SOAR 시스템 고도화 +‣ 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합 수행 +‣ 보안 경고가 발생하면 즉각적인 대응 가능 +‣ 여러 도구와 연동하여 신속하게 위협 차단 +최적화 +‣ AI·ML 기반의 SOAR 시스템을 통해 자율적인 보안 대응 수행 +‣ 모든 보안 이벤트 중앙에서 자동으로 처리 +‣ 대응 프로세스가 최적화되어 기업 전반에서 실시간 대응 가능 +‣ 자율 통합을 통해 보안 사건 관리 자동으로 수행 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 중요 프로세스 자동화 | 보안 및 운영에 필요한 핵심 프로세스를 자동화하여, 업무의 효율성을 높이고 인적 오류를 줄이는 것을 목표로 한다. 이는 중요한 시스템 이벤트 처리, 데이터 백업, 장애 대응 등의 프로세스를 포함한다. | 기존 | ‣ 핵심 보안 및 운영 프로세스 수동으로 관리 ‣ 특정 사건이 발생할 때마다 관리자가 직접 개입하여 처리 ‣ 자동화 도구의 제한적 사용 ‣ 수동 절차에 의존 | +| | | 초기 | ‣ 중요한 프로세스에 대한 자동화 도구를 도입 ‣ 반복적인 작업과 기본적인 보안 절차 자동으로 처리 ‣ 데이터 백업 및 기본 장애 대응과 같은 주요 업무 자동화 | +| | | 향상 | ‣ 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응 ‣ 주요 보안 이벤트에 대한 실시간 경고 및 대응 시스템이 도입 | +| | | 최적화 | ‣ AI·ML을 기반으로 모든 중요 프로세스가 자율적으로 운영 ‣ 이상 상황 발생 시 즉각 대응 ‣ 자동화 시스템은 모든 프로세스를 실시간으로 최적화 ‣ 업무 중단 없이 중요한 프로세스를 자동으로 조정 | +| 인공 지능 | 보안 위협을 감지하고 분석하는 데 있어 인간의 개입을 최소화하고, 네트워크와 시스템에서 발생하는 데이터를 기반으로 보안 결정을 자동화하는 기능을 제공한다. | 기존 | ‣ AI 기술이 적용되지 않은 상태 ‣ 수동 분석과 경고 시스템에 의존 ‣ 데이터를 수동으로 수집하고 분석 ‣ 수동적 보안 위협 대응 | +| | | 초기 | ‣ 기본적인 AI 기반 도구를 도입 ‣ 보안 이벤트를 분석하고 패턴 식별 ‣ AI가 보안 위협을 자동으로 탐지 및 경고 생성 ‣ 기본적인 자동 대응 가능 | +| | | 향상 | ‣ AI 기반의 보안 시스템 고도화를 통한 실시간위협 탐지 및 대응 ‣ AI는 복잡한 활동을 분석하여 보다 정교한 위협 탐지와 실시간 대응 수행 | +| | | 최적화 | ‣ AI가 모든 보안 시스템에 완전히 통합 ‣ 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정 ‣ AI는 데이터와 행동 패턴을 학습하여 지속적으로 보안을 최적화 ‣ 잠재적 위협 사전 차단 | +| 보안 통합, 자동화 및 대응 (SOAR) | SOAR는 보안 이벤트에 대한 대응을 자동화하고, 여러 보안 도구와 시스템을 통합하여 일관된 보안 통합을 수행하는 시스템이다. 이를 통해 기업은 보안 사고에 신속하게 대응하고, 반복적인 작업을 자동화하여 운영 효율성을 높일 수 있다. | 기존 | ‣ 보안 도구와 시스템이 각각 독립적으로 운영 ‣ 수동 대응에 의존 ‣ 보안 사고 발생 시 여러 도구에서 데이터를 수집 및 분석하며, 대응 절차도 개별적으로 수행 | +| | | 초기 | ‣ SOAR 시스템을 도입 ‣ 보안 도구와 시스템을 통합하고, 기본적인 보안 이벤트에 대한 자동화된 대응 절차 마련 ‣ 보안 이벤트가 발생하면 여러 시스템에서 데이터를 수집하여 중앙에서 대응 | +| | | 향상 | ‣ SOAR 시스템 고도화 ‣ 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합 수행 ‣ 보안 경고가 발생하면 즉각적인 대응 가능 ‣ 여러 도구와 연동하여 신속하게 위협 차단 | +| | | 최적화 | ‣ AI·ML 기반의 SOAR 시스템을 통해 자율적인 보안 대응 수행 ‣ 모든 보안 이벤트 중앙에서 자동으로 처리 ‣ 대응 프로세스가 최적화되어 기업 전반에서 실시간 대응 가능 ‣ 자율 통합을 통해 보안 사건 관리 자동으로 수행 | + + +세부 +역량 +세부역량 설명 +성숙도 +수준 +성숙도 수준에 따르는 정의 +데이터 +교환 +표준화 +기업 내외부에서 발생하는 다양한 +데이터를 일관된 형식으로 +관리하고, 보안 시스템 간에 +효율적으로 데이터를 공유할 수 +있도록 하는 프로세스이다. 이를 +통해 여러 시스템에서 수집된 +데이터를 통합적으로 분석하고, +보안 위협에 대응할 수 있다. +기존 +‣ 각 시스템에서 수집된 데이터를 상이한 형식으로 저장 +‣ 비효율적 데이터 교환 +‣ 보안 시스템 간 데이터 교환 수동으로 이루어지며, 분석 속도 +느림 +초기 +‣ 데이터 교환 표준을 도입 +‣ 기업 내 모든 시스템에서 일관된 형식으로 데이터를 저장하고 +공유 +‣ 보안 시스템 간 데이터 교환 자동화 +향상 +‣ 데이터 교환 표준화가 고도화되어, 다양한 외부 시스템 및 +파트너와도 데이터 공유 가능 +‣ 데이터 교환 절차 실시간 수행 +‣ 여러 보안 도구 간의 상호 운용성 개선 +최적화 +‣ AI를 통해 데이터 교환 표준화 자율적 관리 +‣ 외부 파트너와의 데이터 교환까지 실시간 자동화 +‣ 모든 시스템에서 일관된 데이터 형식이 적용 +‣ 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석 +보안 +운영 +조정 및 +사고 +대응 +기업 내 보안 사고가 발생했을 때, +이를 신속하게 대응하고 기업 내 +여러 부서와 조율하여 보안 문제를 +해결하는 프로세스를 의미한다. +이를 통해 보안 사고가 발생할 +때 적절한 대응 절차를 신속하게 +이행할 수 있으며, 피해를 최소화할 +수 있다. +기존 +‣ 보안 사고 발생 시 대응 절차 수동으로 수행 +‣ 보안 팀이 수동으로 여러 부서와 소통하고 조정 +‣ 정형화되어 있지 않은 보안 사고 대응 절차 +‣ 보안 사고 발생 후 대응 +초기 +‣ 보안 사고 대응 계획 수립 +‣ 사고 대응 절차를 표준화 +‣ 기업 내 여러 부서와 효율적 협력 +‣ 보안 사고가 발생 시 자동화된 경고 생성 +‣ 보안 팀과 관련 부서 빠르게 대응 +향상 +‣ 사고 대응 절차가 자동화 +‣ 보안 운영 팀과 다른 부서 간 실시간 조율 +‣ 보안 사고가 발생하면 즉시 대응 팀이 경고를 받고, 각 부서가 +신속하게 협력 +‣ 자동화된 보고 시스템을 통해 보안 사고의 진행 상황 지속적 +공유 +최적화 +‣ AI 기반 사고 대응 및 운영 조정 시스템 도입 +‣ 보안 사고가 발생하기 전 예측하고 선제적 대응 +‣ 사고 대응 절차는 완전 자동화 +‣ 보안 팀과 관련 부서가 신속하고 일관된 대응 수행 +‣ 자율적인 조정 시스템을 통해 사고 발생 시 모든 관련 부서 +실시간 협력 +‣ 대응 결과 즉시 보고 + +| 세부 역량 | 세부역량 설명 | 성숙도 수준 | 성숙도 수준에 따르는 정의 | +| --- | --- | --- | --- | +| 데이터 교환 표준화 | 기업 내외부에서 발생하는 다양한 데이터를 일관된 형식으로 관리하고, 보안 시스템 간에 효율적으로 데이터를 공유할 수 있도록 하는 프로세스이다. 이를 통해 여러 시스템에서 수집된 데이터를 통합적으로 분석하고, 보안 위협에 대응할 수 있다. | 기존 | ‣ 각 시스템에서 수집된 데이터를 상이한 형식으로 저장 ‣ 비효율적 데이터 교환 ‣ 보안 시스템 간 데이터 교환 수동으로 이루어지며, 분석 속도 느림 | +| | | 초기 | ‣ 데이터 교환 표준을 도입 ‣ 기업 내 모든 시스템에서 일관된 형식으로 데이터를 저장하고 공유 ‣ 보안 시스템 간 데이터 교환 자동화 | +| | | 향상 | ‣ 데이터 교환 표준화가 고도화되어, 다양한 외부 시스템 및 파트너와도 데이터 공유 가능 ‣ 데이터 교환 절차 실시간 수행 ‣ 여러 보안 도구 간의 상호 운용성 개선 | +| | | 최적화 | ‣ AI를 통해 데이터 교환 표준화 자율적 관리 ‣ 외부 파트너와의 데이터 교환까지 실시간 자동화 ‣ 모든 시스템에서 일관된 데이터 형식이 적용 ‣ 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석 | +| 보안 운영 조정 및 사고 대응 | 기업 내 보안 사고가 발생했을 때, 이를 신속하게 대응하고 기업 내 여러 부서와 조율하여 보안 문제를 해결하는 프로세스를 의미한다. 이를 통해 보안 사고가 발생할 때 적절한 대응 절차를 신속하게 이행할 수 있으며, 피해를 최소화할 수 있다. | 기존 | ‣ 보안 사고 발생 시 대응 절차 수동으로 수행 ‣ 보안 팀이 수동으로 여러 부서와 소통하고 조정 ‣ 정형화되어 있지 않은 보안 사고 대응 절차 ‣ 보안 사고 발생 후 대응 | +| | | 초기 | ‣ 보안 사고 대응 계획 수립 ‣ 사고 대응 절차를 표준화 ‣ 기업 내 여러 부서와 효율적 협력 ‣ 보안 사고가 발생 시 자동화된 경고 생성 ‣ 보안 팀과 관련 부서 빠르게 대응 | +| | | 향상 | ‣ 사고 대응 절차가 자동화 ‣ 보안 운영 팀과 다른 부서 간 실시간 조율 ‣ 보안 사고가 발생하면 즉시 대응 팀이 경고를 받고, 각 부서가 신속하게 협력 ‣ 자동화된 보고 시스템을 통해 보안 사고의 진행 상황 지속적 공유 | +| | | 최적화 | ‣ AI 기반 사고 대응 및 운영 조정 시스템 도입 ‣ 보안 사고가 발생하기 전 예측하고 선제적 대응 ‣ 사고 대응 절차는 완전 자동화 ‣ 보안 팀과 관련 부서가 신속하고 일관된 대응 수행 ‣ 자율적인 조정 시스템을 통해 사고 발생 시 모든 관련 부서 실시간 협력 ‣ 대응 결과 즉시 보고 | + + +90 | 제로트러스트 가이드라인 2.0 + +## 제3절 + +제로트러스트 성숙도 모델 기반 구현 방안 +제로트러스트를 기업망에 적용하기 위해서는 체계적이고 단계적인 접근이 필요하며, 이를 +구현하기 위해서는 다양한 보안 기능·세부역량과 성숙도를 고려한 전략이 요구된다. 아래에서는 +이러한 세부역량과 성숙도를 바탕으로 기업망에 제로트러스트를 적용·구현하는 방법을 설명한다. +그러나, 이 구현 방안이 절대적인 것은 아니며, 기술한 순서가 시간이나 중요도를 의미하는 것은 +아니다. 가급적 사용자 및 자산에 대한 인벤토리부터 시작하는 것이 적절할 수 있으나, 각 기업은 +비즈니스 모델과 규모, 보안 목표, 네트워크 아키텍처, 준수해야 하는 규정 등에 따라 다르게 설정할 +수 있다. + +### 1. 식별자·신원 성숙도 기반 구현 방안 + +먼저, 기업은 1.1.1 사용자 인벤토리를 구축하는 것으로 시작해야 한다. 모든 사용자를 식별하고 +이를 체계적으로 관리할 수 있는 인벤토리를 생성하는 것이 중요하다. 초기 단계에서는 기본적인 +사용자 데이터베이스를 구축하고, 이를 정기적으로 업데이트하는 시스템을 마련한다. 이후, +자동화된 도구를 사용해 사용자의 식별 정보를 지속적으로 관리하고, 이를 기반으로 적절한 보안 +조치를 취할 수 있도록 발전시켜야 한다. +1.1.2 ID 연계 및 사용자 자격 증명 관리는 기업망에서 다양한 인증 시스템을 통합하기 위한 +핵심 기능이다. 초기에는 기업 내에서 사용되는 ID와 인증 시스템을 표준화하고, 이를 기업의 +ID 관리 시스템에 통합한다. 이후, ID 연계를 통해 여러 시스템 간의 사용자 인증을 통합하고, +최종적으로는 전사적 수준에서 단일 ID 관리 체계를 구축해 모든 시스템에서 일관된 인증을 +지원한다. + +1.2.1 다중인증 (MFA) 도입도 필수적이다. 초기 단계에서는 기본적인 MFA 시스템을 구축하고, +기업 내 모든 사용자가 이를 통해 인증을 받도록 한다. 이후, MFA 시스템을 더욱 발전시켜 다양한 +인증 요소를 통합하고, 외부 사용자까지도 안전하게 인증할 수 있도록 확장해야 한다. 최적화 +단계에서는 피싱 방지 기능이 적용된 MFA 시스템을 통해 사용자 행동 분석을 기반으로 동적으로 +인증 절차를 조정한다. +1.2.2 지속 인증을 도입해 사용자가 네트워크에 접속해 있는 동안에도 지속적으로 인증을 +요구할 수 있다. 초기 단계에서는 시간 기반 인증을 도입해 일정 시간마다 재인증을 요구한다. +이후, 사용자의 활동과 권한 요청에 따라 인증 주기를 조정하는 시스템을 도입하고, 최종적으로는 +실시간으로 사용자 활동을 분석해 동적으로 인증을 요구하는 수준으로 발전시킨다. +1.3.1 통합 ICAM 플랫폼을 통해 모든 ID 및 접근 관리 기능을 중앙에서 통합 관리해야 한다. 초기 +단계에서는 기업 내 ID 및 접근 관리 시스템을 통합하는 작업을 수행하고, 이를 통해 모든 사용자의 +ID를 중앙에서 관리한다. 이후, 이 시스템을 더욱 확장해 기업 내 모든 보안 시스템과 통합하고, +최종적으로는 AI 기반의 ICAM 플랫폼을 구축해 모든 ID와 접근권한을 실시간으로 관리한다. +1.3.2 행동, 컨텍스트 기반 ID 및 생체 인식 기술을 통해 사용자 인증의 정확성과 보안을 더욱 +강화할 수 있다. 초기 단계에서는 기본적인 행동 분석 도구를 사용해 사용자 활동을 모니터링하고, +이를 통해 비정상적인 행동을 탐지한다. 이후, 상황적 요소와 생체 인식을 추가해 사용자 인증의 +신뢰성을 높이고, 최종적으로는 모든 인증 과정에 이를 통합해 실시간으로 보안 위협을 탐지한다. +1.4.1 조건부 사용자 접근을 구현해야 한다. 처음에는 전통적인 역할 기반 접근제어(RBAC)를 +적용해 사용자의 역할에 따라 접근권한을 부여한다. 이후, 상황에 맞게 접근권한을 동적으로 조정할 +수 있는 시스템을 도입하고, 최종적으로는 AI를 통해 실시간으로 접근권한을 조정하는 수준까지 +성숙도를 높여야 한다. +1.4.2 최소 권한 접근제어를 통해 기업망의 보안을 더욱 강화할 수 있다. 초기 단계에서는 +사용자가 업무 수행에 필요한 최소한의 권한만을 부여하는 정책을 수립한다. 이후, 이 정책을 +자동화된 시스템으로 발전시켜 모든 사용자의 접근권한을 지속적으로 모니터링하고, 필요할 때 +권한을 자동으로 조정한다. + +92 | 제로트러스트 가이드라인 2.0 + +### 2. 기기 및 엔드포인트 성숙도 기반 구현 방안 + +2.1.1 기기 감지 및 규정 준수 관리를 통해 네트워크에 연결된 모든 기기의 보안 상태를 평가하고 +관리해야 한다. 초기 단계에서는 자동화된 감지 시스템을 도입해 실시간으로 기기를 탐지하고, 규정 +준수 여부를 평가하여 비준수 기기에 대한 경고 및 접근 제한 기능을 설정한다. 이후, 다양한 규정 +기준을 적용하고, 비준수 기기에 대해 자동으로 교정 조치를 취하며 규정 준수 상태에 따라 접근 +권한을 동적으로 부여한다. 최종적으로는 AI 기반의 실시간 규정 준수 평가와 조치 자동화를 통해 +보안을 최적화하고, 규정 준수 데이터와 보안 분석을 통합해 기기 보안을 더욱 강화한다. +2.2.1 실시간 검사를 통한 기기 권한 부여는 기기의 보안 상태를 평가해 네트워크 접근권한을 +부여하는 과정을 의미한다. 초기에는 수동으로 기기 상태를 평가하고, 필요 시 접근권한을 부여한다. +이후, 자동화된 시스템을 통해 실시간으로 기기 상태를 평가하고, 동적으로 접근권한을 조정하는 +수준으로 발전시킨다. +2.3.1 기기 인벤토리 관리를 통해 모든 네트워크에 연결된 기기를 체계적으로 관리해야 한다. 초기 +단계에서는 자동화된 기기 인벤토리 시스템을 도입해 모든 기기를 실시간으로 기록하고, 운영체제, +위치 등 세부 정보를 포함한 인벤토리를 구축한다. 이후, 기기 인벤토리를 지속적으로 업데이트하고 +비인가된 기기를 탐지하며, 인벤토리 데이터를 분석해 보안 취약점을 파악하여 대응 전략을 +마련한다. 최종적으로는 AI 기반의 인벤토리 관리 솔루션을 통해 기기 관리를 완전 자동화하고, 예측 +분석을 통해 기기 보안을 최적화한다. +2.3.2 통합 엔드포인트 관리 및 모바일 기기 관리를 통해 모든 엔드포인트와 모바일 기기를 +중앙에서 관리해야 한다. 초기 단계에서는 기본적인 엔드포인트 보안 도구를 도입하고, 이후, 이를 +확장해 모바일 기기 관리(MDM) 시스템을 통합하며, 최종적으로는 모든 엔드포인트를 중앙에서 +실시간으로 관리하고 보호하는 시스템을 구축한다. +2.4.1 엔드포인트 및 확장된 탐지·대응(EDR 및 XDR) 기능을 도입해 모든 엔드포인트에서 발생 +하는 보안 위협을 실시간으로 탐지하고 대응할 수 있어야 한다. 초기에는 기본적인 EDR 시스템을 +도입해 엔드포인트에서 발생하는 위협을 탐지하고 대응한다. 이후, 이를 XDR 시스템으로 확장해 +네트워크 전반에서 발생하는 위협을 종합적으로 탐지하고 대응할 수 있도록 발전시킨다. +2.4.2 자산, 취약성 및 패치 관리 자동화를 통해 네트워크 내 모든 자산을 안전하게 관리해야 + +한다. 초기에는 주요 자산과 취약성을 수동으로 관리하고, 필요 시 패치를 적용한다. 이후, 자동화된 +시스템을 도입해 자산, 취약성, 패치 관리를 실시간으로 수행하고, 최종적으로는 AI 기반의 시스템을 +통해 모든 관리를 자동화하고 최적화한다. + +### 3. 네트워크 성숙도 기반 구현 방안 + +제로트러스트 네트워크 성숙도를 설정하기 위해서는 네트워크의 다양한 보안 요소들을 단계적 +으로 관리하고 발전시켜 나가야 한다. 매크로 세그멘테이션, 마이크로 세그멘테이션, 소프트웨어 +정의 네트워킹(SDN), 위협 대응, 트래픽 암호화, 데이터 흐름 매핑, 네트워크 회복성과 같은 +요소들은 네트워크 보안을 체계적으로 강화하기 위해 중요한 역할을 한다. 이러한 보안 요소들은 +네트워크의 성숙도 단계에 따라 점차 자동화되고, 실시간으로 대응할 수 있는 자율적인 시스템으로 +발전하게 된다. +3.1.1 매크로 세그멘테이션은 초기 단계에서 네트워크 보안을 강화하기 위한 기본적인 +방법으로 사용된다. 매크로 세그멘테이션은 네트워크를 큰 단위로 나누어 주요 자산과 민감한 +시스템을 독립된 네트워크로 분리하는 과정이다. 이를 통해 네트워크 전반에 걸친 보안 사고의 +확산을 방지하고, 각기 다른 네트워크에 맞는 보안 정책을 적용할 수 있게 한다. 성숙도가 +높아지면, 마이크로 세그멘테이션으로 발전하게 된다. +3.1.2 마이크로 세그멘테이션은 네트워크 내부에서 더욱 세부적으로 구분된 세그먼트를 +구축하여, 각 워크로드와 애플리케이션에 고유한 보안 정책을 적용한다. 이를 통해 세그먼트 간의 +트래픽을 세밀하게 통제하고, 워크로드별로 독립적인 보안 관리가 가능해진다. 최종적으로는 AI +기반의 자동화된 세그멘테이션 시스템을 도입하여 실시간으로 트래픽을 모니터링하고, 위협이 +감지되면 즉시 보안 정책을 자동으로 조정할 수 있는 자율적인 보안 체계로 발전한다. +3.1.3 소프트웨어 정의 네트워크(SDN)는 네트워크 성숙도를 더욱 높이기 위해 중요한 역할을 +한다. SDN은 네트워크 인프라를 중앙에서 관리하고, 네트워크를 동적으로 제어할 수 있는 기술로, +네트워크의 보안 정책을 유연하게 적용할 수 있게 한다. 초기에는 기본적인 네트워크 구성을 +중앙에서 관리하는 방식으로 시작되지만, 이후에는 네트워크 트래픽의 흐름을 실시간으로 제어하고, +보안 정책을 동적으로 조정할 수 있는 체계로 발전시켜야 한다. 이를 통해 네트워크 내에서 발생하는 + +94 | 제로트러스트 가이드라인 2.0 +위협에 즉각적으로 대응하고, 변화하는 보안 상황에 맞춰 유연하게 대응할 수 있다. +3.2.1 위협 대응은 네트워크 보안의 핵심 요소로, 초기 단계에서는 네트워크에서 발생하는 +비정상적인 트래픽을 모니터링하고 경고를 생성한다. 이 단계에서는 수동으로 경고를 분석하고 +대응하는 방식이 주를 이루지만, 성숙도가 높아지면 자동화된 시스템으로 발전시켜야 한다. 이를 +통하여 네트워크 전반뿐만 아니라 엔드포인트, 서버, 클라우드 등 다양한 요소에서 발생하는 위협을 +종합적으로 분석하고 대응할 수 있으며, 이를 통해 보안 위협에 대해 보다 빠르고 자동화된 대응이 +가능해진다. 최종적으로는 AI 기반의 자율 보안 시스템이 도입되어, 위협이 실시간으로 탐지되고 +즉시 차단되는 수준으로 발전하게 된다. +3.3.1 트래픽 암호화도 네트워크 보안에서 매우 중요한 역할을 한다. 초기 단계에서는 중요한 +데이터를 보호하기 위해 기본적인 전송 계층 보안(SSL/TLS) 암호화가 적용된다. 이를 통해 +네트워크를 통해 이동하는 민감한 데이터를 보호하고, 데이터 유출을 방지할 수 있다. 성숙도가 +높아짐에 따라 네트워크 전반에 걸쳐 더욱 정교한 암호화 기술을 적용해야 하며, 데이터 흐름이 +발생하는 모든 구간에서 암호화가 이루어지도록 확장한다. 또한, 암호화 키 관리 시스템을 도입하여 +암호화된 데이터의 무결성을 유지하고, 권한이 부여된 사용자만 데이터에 접근할 수 있도록 보안을 +강화해야 한다. +3.4.1 데이터 흐름 매핑은 네트워크에서 데이터가 어떻게 이동하는지를 명확하게 파악하고 +관리하는 데 중요한 역할을 한다. 초기에는 네트워크 내 주요 데이터 흐름을 수동으로 매핑하고, +데이터를 안전하게 이동시킬 수 있는 기본적인 보안 정책을 수립하는 데 중점을 둔다. 이후에는 +자동화된 데이터 흐름 매핑 도구를 도입해 네트워크 내 데이터 흐름을 실시간으로 분석하고, +잠재적인 보안 취약점을 파악한다. 성숙도가 높아지면 데이터 흐름을 보다 정밀하게 모니터링하고, +트래픽 이동 경로에 대한 보안 정책을 자동으로 조정하는 체계로 발전한다. 이를 통해 민감한 +데이터가 안전하게 이동하고 저장될 수 있도록 지속적으로 관리할 수 있다. +3.5.1 네트워크 회복성은 네트워크에서 보안 사고가 발생했을 때 신속하게 복구할 수 있는 능력을 +의미한다. 초기 단계에서는 기본적인 백업과 복구 절차를 마련하고, 보안 사고가 발생했을 때 +수동으로 복구하는 방식이 주를 이룬다. 성숙도가 높아지면 재해 복구(DR) 및 비즈니스 연속성(BC) +계획을 도입하여, 네트워크 장애나 보안 사고가 발생했을 때 자동으로 복구 절차가 실행되도록 + +발전시킨다. 최종적으로는 AI 기반의 예측 분석 시스템을 통해 네트워크에서 발생할 수 있는 장애나 +위협을 사전에 감지하고, 문제가 발생하기 전에 예방할 수 있는 자율 회복성 체계를 구축하는 +것이 목표다. 이를 통해 네트워크가 중단 없이 운영되고, 보안 사고에도 신속하게 대응할 수 있는 +회복성을 확보하게 된다. + +### 4. 시스템 성숙도 기반 구현 방안 + +제로트러스트 모델에서 시스템 관리는 기업망의 보안을 강화하는 데 핵심적인 역할을 하며, 접근 +통제, PAM(Privileged Access Management), 자격 증명 관리, 네트워크 세분화 및 그룹 간 이동, +시스템 환경에 따른 정책 관리와 같은 요소로 분류하여 각각의 성숙도를 발전시켜 나가는 것이 +중요하다. +먼저, 4.1.1 접근 통제는 시스템 보안의 기본 요소로, 초기 단계에서는 단순한 역할 기반 접근제어 +(RBAC)를 통해 사용자 권한을 설정하고 관리한다. 이 단계에서는 각 사용자의 역할에 따라 +정해진 권한을 부여하며, 수동으로 접근제어를 관리하는 방식이 주를 이룬다. 이후에는 속성 +기반 접근제어(ABAC)로 발전하게 되며, 사용자의 상황, 기기 상태, 위치 등의 속성을 기반으로 +접근권한을 동적으로 조정할 수 있게 된다. 성숙도가 높아지면 AI 기반의 동적 접근 통제 시스템을 +도입해, 사용자나 기기의 실시간 상태를 분석하고, 신뢰도가 변할 때마다 접근권한을 자동으로 +조정하는 자율적인 체계로 발전한다. 또한, 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 +재산정 및 위험 분석을 기반으로 지속적인 접근제어 정책을 적용한다. +4.2.1 PAM은 시스템 내에서 특권 계정을 관리하고, 이를 통해 민감한 데이터나 중요한 자산에 +대한 접근을 제어하는 역할을 한다. 초기 단계에서는 특권 계정을 별도로 관리하며, 이를 통해 +중요한 시스템에 접근할 수 있는 사용자의 수를 제한하고, 특권 계정을 수동으로 모니터링하는 +방식이 사용된다. 이후 성숙도가 높아지면 자동화된 특권 계정 관리 시스템을 도입해, 특권 계정의 +사용을 실시간으로 모니터링하고, 비정상적인 활동이 감지되면 즉시 접근을 제한하는 방식으로 +발전한다. AI 기반의 PAM 시스템을 통해 특권 계정의 활동을 실시간으로 분석하고, 특권 사용 시 +다중 인증(MFA)을 추가적으로 요구하는 등 보안을 강화한다. +4.2.2 자격 증명 관리는 사용자와 기기의 인증 정보를 안전하게 관리하는 기능으로, 초기에는 + +96 | 제로트러스트 가이드라인 2.0 +단순한 패스워드 기반 인증 시스템에 의존한다. 이 단계에서는 사용자 인증 정보를 수동으로 +관리하며, 데이터베이스에 저장된 인증 정보를 기반으로 인증 절차가 이루어진다. 이후에는 다중 +인증(MFA) 시스템을 도입하여 패스워드 외에도 추가적인 인증 요소를 요구하고, 인증 절차의 +보안을 강화한다. 성숙도가 높아지면 인증서 기반 인증 및 생체 인증과 같은 고급 인증 방식을 +도입해 자격 증명의 신뢰성을 높이며, 최종적으로는 AI 기반의 자격 증명 관리 시스템을 통해 인증 +정보를 실시간으로 분석하고, 인증 과정에서 비정상적인 시도가 감지되면 자동으로 차단하는 +수준으로 발전시킨다. +4.3.1 네트워크 세분화 및 그룹 간 이동은 네트워크를 더 작은 단위로 나누어 보안을 강화하고, +세분화된 네트워크 간의 이동을 안전하게 관리하는 역할을 한다. 초기에는 기본적인 네트워크 +세분화를 통해 주요 자산과 민감한 시스템을 분리하고, 각 네트워크에 독립적인 보안 정책을 +적용한다. 이후에는 마이크로 세그멘테이션으로 발전하여, 네트워크 내에서 각 세그먼트가 고유한 +보안 정책을 갖도록 하며, 세그먼트 간 트래픽 이동을 동적으로 제어할 수 있는 체계로 발전시킨다. +최종적으로는 AI 기반의 네트워크 세분화 시스템을 통해 실시간으로 트래픽 이동을 모니터링하고, +그룹 간 이동을 자율적으로 관리하는 수준으로 발전한다. +마지막으로, 4.4.1 시스템 환경에 따른 정책 관리는 온프레미스에서 클라우드 환경으로의 +전환에 따라 시스템 보안 정책이 어떻게 적용되어야 하는지를 다룬다. 초기에는 온프레미스 환경에 +맞춘 보안 정책을 적용하며, 각 시스템에 맞는 보안 설정을 수동으로 관리한다. 이후 클라우드 +환경으로의 전환이 이루어지면서 하이브리드 클라우드 보안 관리 체계를 도입해, 온프레미스와 +클라우드 환경 간에 일관된 보안 정책을 유지하는 방향으로 발전시킨다. 성숙도가 높아지면, +클라우드 기반의 보안 관리 시스템을 통해 각 시스템 환경에 맞춘 정책을 실시간으로 조정하고 +적용하는 자동화된 체계로 발전하게 된다. + +### 5. 애플리케이션 및 워크로드 성숙도 기반 구현 방안 + +5.1.1 리소스 권한 부여 및 통합은 애플리케이션과 워크로드에 대한 접근권한을 적절하게 +부여하고, 이를 통합 관리하는 과정을 의미한다. 초기 단계에서는 기본적인 역할 기반 접근제어 +(RBAC)를 통해 리소스 접근권한을 수동으로 관리한다. 이 단계에서는 조직 내에서 정해진 역할에 +따라 리소스 권한을 부여하며, 역할 변경 시 수동으로 권한을 조정하는 방식이다. 이후 성숙도가 + +높아짐에 따라 속성 기반 접근제어(ABAC)를 도입해 사용자의 속성이나 상황에 맞게 권한을 +동적으로 조정할 수 있는 체계로 발전시킨다. 최종적으로는 AI 기반의 접근 통제 시스템을 도입해 +실시간으로 사용자와 워크로드의 상태를 분석하고, 필요한 경우 자동으로 권한을 재조정하는 +자율적 시스템을 구축한다. +5.2.1 지속적인 모니터링 및 진행 중인 승인은 애플리케이션과 워크로드의 활동을 실시간으로 +모니터링하고, 사용자의 접근권한을 지속적으로 확인하고 승인하는 기능을 포함한다. 초기에는 +애플리케이션과 워크로드의 활동을 수동으로 모니터링하고, 비정상적인 활동이 감지되면 관리자가 +이를 승인하거나 차단하는 방식으로 이루어진다. 이후에는 자동화된 모니터링 시스템을 도입해 +모든 활동을 실시간으로 추적하고, 비정상적인 행동이 탐지되었을 때 자동으로 경고를 발행하거나 +접근을 제한하는 수준으로 발전시킨다. 최종적으로는 AI 기반의 시스템을 통해 애플리케이션 +활동이 자율적으로 모니터링되며, 승인 프로세스도 실시간으로 자동화되는 체계로 전환된다. +5.3.1 원격 접속은 제로트러스트 모델에서 중요한 보안 요소로, 특히 외부에서 애플리케이션과 +시스템에 접근할 때 발생하는 보안 위험을 최소화하는 데 중점을 둔다. 초기 단계에서는 VPN이나 +기본적인 보안 솔루션을 통해 원격 접속 보안을 강화한다. 이후에는 다중 인증(MFA) 및 조건부 +접근제어를 도입해 원격 접속 시 사용자의 위치나 기기 상태에 따라 동적으로 보안 요구사항을 +조정한다. 최종적으로는 AI 기반의 원격 접속 관리 시스템을 통해 모든 원격 접속이 실시간으로 +모니터링되고, 보안 위협이 감지되면 즉시 차단되는 자율적 관리 체계로 발전한다. +5.4.1 안전한 애플리케이션 배포는 애플리케이션을 배포할 때 발생할 수 있는 보안 위협을 +최소화하는 데 중점을 둔다. 초기에는 수동으로 애플리케이션 코드를 검토하고, 보안 취약점이 +없는지 확인하는 방식으로 배포가 이루어진다. 이후에는 자동화된 CI/CD 파이프라인을 도입해 +애플리케이션 배포 시 보안 검사를 자동화하고, 배포 후에도 애플리케이션의 보안 상태를 +지속적으로 모니터링할 수 있는 체계를 구축한다. 성숙도가 높아지면 AI 기반의 애플리케이션 +배포 관리 시스템을 통해 애플리케이션 배포 과정에서 실시간으로 보안 위협을 감지하고 대응하는 +자율적인 시스템으로 발전시킨다. +5.4.2 애플리케이션 인벤토리는 조직 내에서 사용되는 모든 애플리케이션을 체계적으로 +관리하는 데 중점을 둔다. 초기 단계에서는 주요 애플리케이션을 수동으로 인벤토리에 등록하고 + +98 | 제로트러스트 가이드라인 2.0 +관리한다. 이후에는 자동화된 애플리케이션 인벤토리 시스템을 도입해 실시간으로 애플리케이션 +상태를 모니터링하고, 새로운 애플리케이션이 추가되거나 변경될 때마다 자동으로 업데이트되는 +체계를 구축한다. 최종적으로는 AI 기반의 애플리케이션 관리 시스템을 통해 모든 애플리케이션이 +자동으로 인벤토리에 등록되고, 보안 상태가 지속적으로 평가되는 체계로 발전하게 된다. +5.5.1 보안 소프트웨어 개발 및 통합은 애플리케이션 개발 초기 단계부터 보안을 내재화하는 +것을 목표로 한다. 초기에는 소프트웨어 개발 과정에서 기본적인 보안 가이드라인을 적용하고, 코드 +검토를 통해 보안 취약점을 수동으로 관리한다. 이후에는 자동화된 보안 코드 분석 도구를 도입해 +개발 중인 소프트웨어에 대해 실시간으로 보안 검사를 수행하고, 취약점을 자동으로 감지하고 +수정할 수 있는 체계를 구축한다. 최종적으로는 AI와 머신러닝을 통해 소프트웨어 개발 과정에서 +발생하는 보안 문제를 예측하고, 자율적으로 해결할 수 있는 보안 개발 체계를 마련한다. +5.5.2 소프트웨어 위험 관리는 개발된 애플리케이션이 배포된 이후에도 보안 취약점을 지속적으로 +관리하고, 이를 통해 보안 위험을 최소화하는 역할을 한다. 초기 단계에서는 소프트웨어의 보안 +취약점을 수동으로 점검하고, 위험이 발견될 경우 수동으로 패치를 적용한다. 이후에는 자동화된 +취약점 관리 시스템을 도입해 소프트웨어에서 발생할 수 있는 보안 취약점을 실시간으로 +모니터링하고, 패치를 자동으로 배포하는 체계를 구축한다. 최종적으로는 AI 기반의 소프트웨어 위험 +관리 시스템을 통해 모든 취약점이 자율적으로 감지되고, 패치와 수정이 자동으로 이루어지는 자율 +보안 체계로 발전하게 된다. + +### 6. 데이터 성숙도 기반 구현 방안 + +6.1.1 데이터 카탈로그 위험 정렬은 조직이 보유한 모든 데이터를 체계적으로 분류하고, 데이터의 +위험 수준에 따라 보안 정책을 적용하는 과정을 의미한다. 초기 단계에서는 조직 내에서 사용되는 +주요 데이터를 수동으로 분류하고, 데이터의 민감도와 중요도를 평가하는 방식으로 이루어진다. +이후, 자동화된 데이터 분류 시스템을 도입해 데이터를 실시간으로 분석하고, 각 데이터의 위험도를 +자동으로 평가하는 체계를 구축해야 한다. 성숙도가 높아지면, AI 기반의 데이터 카탈로그 시스템을 +통해 데이터 위험을 자율적으로 정렬하고, 민감한 데이터에 대해 자동으로 보안 조치를 취하는 +수준으로 발전할 수 있다. + +6.1.2 기업 데이터 거버넌스는 조직 내 데이터의 관리와 보호를 위한 정책과 절차를 정의하고, +이를 실시간으로 적용하는 과정을 포함한다. 초기 단계에서는 데이터 관리 정책을 수립하고, +수동으로 데이터 거버넌스를 실행하는 방식으로 운영된다. 이 단계에서는 데이터 사용에 대한 +기본적인 가이드라인이 적용되고, 데이터 소유권과 책임이 명확하게 규정된다. 이후, 데이터 +거버넌스 관리 도구를 도입해 데이터 거버넌스 정책이 조직 전반에서 자동으로 적용되도록 하며, +데이터 사용에 대한 규정을 지속적으로 모니터링하고 준수 여부를 확인하는 체계로 발전한다. +6.2.1 데이터 접근제어는 민감한 데이터에 접근할 수 있는 사용자를 제한하고, 데이터를 안전하게 +보호하는 중요한 역할을 한다. 초기 단계에서는 역할 기반 접근제어(RBAC)를 통해 민감한 +데이터에 대한 접근을 수동으로 관리한다. 이후, 성숙도가 높아지면 속성 기반 접근제어(ABAC)를 +도입해 사용자의 상황, 위치, 기기 상태 등에 따라 동적으로 접근권한을 조정할 수 있는 체계를 +구축해야 한다. 최종적으로는 AI 기반의 지능형 접근제어 시스템을 통해 실시간으로 데이터 접근을 +모니터링하고, 위험이 감지되면 즉시 접근을 차단하거나 제한하는 자율적인 시스템으로 발전시킬 +수 있다. +6.3.1 데이터 암호화 및 권한 관리는 데이터를 전송하거나 저장하는 과정에서 발생할 수 있는 +보안 위협으로부터 데이터를 보호하는 역할을 한다. 초기 단계에서는 민감한 데이터를 보호하기 +위해 기본적인 암호화 기술을 적용한다. 이후에는 암호화 적용 범위를 확대해 엔드투엔드 암호화를 +도입하고, 네트워크 내에서 이동하는 모든 데이터가 암호화되도록 한다. 또한, 암호화 키 관리 +시스템을 도입해 암호화된 데이터의 무결성을 유지하고, 권한 있는 사용자만이 데이터를 복호화할 +수 있도록 관리해야 한다. 성숙도가 높아지면 AI 기반의 암호화 관리 시스템을 통해 데이터의 +암호화 상태를 실시간으로 모니터링하고, 권한 부여와 복호화 과정이 자동으로 이루어지도록 한다. +6.4.1 데이터 라벨링 및 태그 지정은 데이터의 중요도와 민감도에 따라 적절한 보안 태그를 +부여하는 작업을 의미한다. 초기 단계에서는 수동으로 데이터를 라벨링하고, 데이터의 민감도를 +평가하는 방식으로 보안 정책이 적용된다. 이후, 자동화된 데이터 라벨링 도구를 도입해 데이터를 +자동으로 분류하고, 민감한 데이터에는 적절한 보안 태그가 부여되도록 한다. 최종적으로는 AI와 +머신러닝을 통해 데이터를 실시간으로 라벨링하고, 새로운 데이터가 생성될 때 자동으로 태그가 +부여되는 자율적 데이터 관리 시스템으로 발전시킨다. +6.5.1 데이터 손실 방지(DLP)는 민감한 데이터가 외부로 유출되지 않도록 보호하는 중요한 + +100 | 제로트러스트 가이드라인 2.0 +보안 요소다. 초기 단계에서는 기본적인 데이터 유출 방지 정책을 수립하고, 수동으로 데이터를 +모니터링하며, 민감한 데이터가 외부로 나가는 것을 차단한다. 이후에는 자동화된 DLP 솔루션을 +도입해 네트워크 트래픽을 실시간으로 모니터링하고, 비인가된 데이터 유출이 감지되면 자동으로 +차단하는 체계로 발전한다. 최종적으로는 AI 기반의 DLP 시스템을 통해 데이터 유출이 자율적으로 +감지되고, 실시간으로 대응이 이루어지는 수준으로 발전할 수 있다. +마지막으로, 6.5.2 데이터 모니터링 및 감지는 데이터를 실시간으로 모니터링하고, 데이터의 사용 +상태와 접근 패턴을 분석해 잠재적인 위협을 탐지하는 기능을 포함한다. 초기 단계에서는 데이터 +사용 현황을 수동으로 모니터링하고, 비정상적인 사용 패턴이 감지되면 관리자가 이를 분석하고 +대응하는 방식이다. 이후에는 자동화된 데이터 모니터링 시스템을 도입해 데이터 사용과 접근을 +실시간으로 추적하고, 비정상적인 활동이 탐지되면 자동으로 경고를 발행하거나 접근을 차단하는 +방식으로 발전한다. 최종적으로는 AI와 머신러닝을 통해 데이터 활동이 자율적으로 모니터링되고, +잠재적인 위협이 실시간으로 감지되어 대응할 수 있는 자율적 보안 관리 체계로 발전하게 된다. + +### 7. 가시성 및 분석 성숙도 기반 구현 방안 + + +#### 7.1 모든 관련 활동 기록은 기업망 내에서 발생하는 모든 보안 이벤트, 사용자 활동, 시스템 + +로그를 기록하는 것을 의미한다. 초기 단계에서는 수동으로 주요 이벤트를 기록하고, 보안 관련 +활동에 대한 기본적인 로그를 수집하는 수준이다. 이 단계에서는 주로 로그 데이터를 별도로 +저장하여 사후 분석을 위한 참조 자료로 활용한다. 성숙도가 높아지면, 자동화된 로그 수집 +시스템을 통해 네트워크와 시스템 전반에서 발생하는 모든 활동을 실시간으로 기록하고, 이를 +분석에 활용할 수 있는 체계로 발전한다. 최종적으로는 AI 기반의 로그 분석 시스템을 통해 활동 +기록이 실시간으로 모니터링되며, 비정상적인 활동이 탐지되면 즉각적인 대응이 가능해지는 자율적 +로그 관리 체계로 발전할 수 있다. + +#### 7.2 중앙집중적인 보안 정보 및 이벤트 관리(SIEM)는 조직 내에서 발생하는 보안 이벤트와 로그 + +데이터를 한 곳에서 수집하고, 이를 분석해 보안 위협을 실시간으로 감지하는 시스템이다. 초기에는 +각 시스템에서 발생하는 보안 이벤트를 개별적으로 모니터링하며, 중앙집중적 관리가 이루어지지 +않는 상태다. 이후 성숙도가 높아짐에 따라 SIEM 도구를 도입해 모든 보안 이벤트를 중앙에서 +관리하고, 실시간으로 분석할 수 있는 체계를 구축한다. 이를 통해 다양한 보안 이벤트를 한 곳에서 + +모니터링하며, 즉각적인 대응이 가능해진다. 최종적으로는 AI 기반의 SIEM 시스템을 통해 보안 +이벤트와 로그 데이터가 실시간으로 분석되고, 위협이 감지되면 자동으로 대응하는 자율적인 보안 +관리 체계로 발전하게 된다. + +#### 7.3 보안 위협 분석은 수집된 로그와 보안 이벤트 데이터를 분석하여 잠재적인 보안 위협을 + +사전에 감지하고, 이를 통해 즉각적인 대응 조치를 취하는 것을 목표로 한다. 초기 단계에서는 +수동으로 보안 데이터를 분석하고, 비정상적인 활동이나 위협이 발생했을 때 사후적으로 분석하여 +대응하는 방식이다. 이후에는 자동화된 위협 분석 도구를 도입해 수집된 데이터를 실시간으로 +분석하고, 위협이 감지되면 경고를 발행하거나 자동으로 대응할 수 있는 체계로 발전시킨다. +최종적으로는 AI와 머신러닝 기반의 위협 분석 시스템을 통해 보안 위협을 자율적으로 감지하고, +실시간으로 대응하는 자율 보안 체계로 발전하게 된다. + +#### 7.4 사용자 및 기기 동작 분석은 네트워크와 시스템에 접속하는 사용자와 기기의 행동 패턴을 + +분석하여 비정상적인 활동을 감지하는 기능을 포함한다. 초기 단계에서는 기본적인 사용자 행동 +패턴을 수동으로 모니터링하고, 비정상적인 활동이 감지되면 수동으로 대응하는 방식이다. 이후 +성숙도가 높아짐에 따라 사용자 및 기기 행동 분석 도구(UEBA)를 도입해 실시간으로 사용자와 +기기의 활동을 추적하고, 비정상적인 패턴이 탐지되면 자동으로 경고를 발행하거나 접근을 +차단하는 체계로 발전시킨다. 최종적으로는 AI 기반의 동작 분석 시스템을 통해 사용자와 기기의 +행동을 실시간으로 모니터링하고, 위협을 자율적으로 감지하여 대응하는 체계로 발전한다. + +#### 7.5 위협 인텔리전스 통합은 외부에서 수집된 보안 위협 정보를 조직의 보안 시스템과 통합하여 + +최신 위협을 신속하게 감지하고 대응하는 기능을 의미한다. 초기 단계에서는 외부 위협 정보를 +수동으로 수집하고 분석하여 조직 내 보안 정책에 반영하는 방식으로 운영된다. 이후에는 자동화된 +위협 인텔리전스 통합 도구를 도입해 외부에서 수집된 위협 정보를 실시간으로 분석하고, 이를 조직 +내 보안 시스템과 통합하여 위협 대응 속도를 높인다. 최종적으로는 AI 기반의 위협 인텔리전스 +시스템을 통해 외부 위협 정보가 자율적으로 수집되고, 실시간으로 대응하는 자율적 보안 체계로 +발전한다. +마지막으로, 7.6 자동화된 동적 정책은 보안 위협과 네트워크 상황에 맞춰 실시간으로 보안 +정책이 자동으로 조정되는 체계를 의미한다. 초기 단계에서는 고정된 보안 정책을 수동으로 + +102 | 제로트러스트 가이드라인 2.0 +적용하고, 상황이 변할 때마다 관리자가 정책을 수동으로 조정하는 방식으로 운영된다. 이후 +성숙도가 높아짐에 따라 정책 오케스트레이션 도구를 도입해 네트워크와 시스템의 상태에 +맞춰 보안 정책이 자동으로 조정되는 체계를 구축하게 된다. 최종적으로는 AI 기반의 정책 +오케스트레이션 시스템을 통해 보안 정책이 실시간으로 변화하는 보안 위협과 환경에 맞춰 +동적으로 조정되는 자율 보안 체계로 발전한다. + +### 8. 자동화 및 통합 성숙도 기반 구현 방안 + + +#### 8.1 정책 통합은 조직 내 다양한 보안 정책을 중앙에서 관리하고 일관되게 적용하는 것을 목표로 + +한다. 초기 단계에서는 개별 시스템이나 네트워크에 맞춰 수동으로 정책을 관리하는 방식이 주를 +이룬다. 이 단계에서는 보안 정책이 분산되어 있어, 정책 적용에 일관성이 부족할 수 있다. 성숙도가 +높아지면, 정책 오케스트레이션 도구를 통해 조직 전반에서 보안 정책을 통합 관리하고, 모든 +네트워크와 시스템에 일관되게 적용하는 체계로 발전시켜야 한다. 최종적으로는 AI 기반의 정책 +통합 시스템을 통해 보안 정책이 실시간으로 자동 조정되고, 새로운 보안 위협이나 환경 변화에 +맞춰 동적으로 반영되는 자율적 체계로 발전할 수 있다. + +#### 8.2 중요 프로세스 자동화는 조직 내에서 반복적이거나 중요한 보안 프로세스를 자동화하는 + +작업을 포함한다. 초기 단계에서는 보안 프로세스가 수동으로 관리되며, 반복적인 보안 작업이나 +위협 대응 절차가 자동화되지 않는 상태일 수 있다. 이후, 자동화된 워크플로우 관리 시스템을 +도입해 보안 프로세스의 자동화를 시작하고, 중요한 보안 프로세스나 위협 대응 절차를 자동화하는 +체계로 발전시킨다. 최종적으로는 AI 기반의 자동화 시스템을 통해 중요한 보안 프로세스가 +자율적으로 실행되며, 관리자의 개입 없이도 보안 작업이 자동으로 이루어지는 체계로 발전하게 +된다. + +#### 8.3 인공지능(AI)은 보안 운영에서 발생하는 대규모 데이터를 실시간으로 분석하고, 위협을 + +예측하고 대응하는 데 중요한 역할을 한다. 초기 단계에서는 AI가 적용되지 않고, 수동으로 데이터 +분석과 보안 작업이 이루어진다. 이후 성숙도가 높아짐에 따라 AI 기반 분석 도구를 도입해 보안 +데이터와 위협 정보를 실시간으로 분석하고, 잠재적인 보안 위협을 사전에 예측할 수 있는 체계를 +구축해야 한다. 최종적으로는 AI 기반의 자율 보안 시스템을 통해 보안 이벤트를 실시간으로 +분석하고, 위협 대응 절차를 자율적으로 조정하는 체계로 발전할 수 있다. + + +#### 8.4 보안 통합, 자동화 및 대응은 보안 이벤트와 위협에 대해 자동으로 대응할 수 있는 체계를 + +의미한다. 초기 단계에서는 보안 이벤트 발생 시 수동으로 대응하며, 이벤트 처리가 분산되어 있을 +수 있다. 성숙도가 높아지면 SOAR 도구를 도입해 보안 이벤트를 중앙에서 관리하고, 대응 절차를 +자동화하여 위협 발생 시 빠르고 일관된 대응이 가능하게 한다. 최종적으로는 AI 기반의 SOAR +시스템을 통해 보안 이벤트가 실시간으로 분석되고, 대응 절차가 자동으로 실행되어 위협을 신속히 +차단하는 자율적인 보안 대응 체계로 발전한다. + +#### 8.5 데이터 교환 표준화는 조직 내외부에서 데이터를 안전하게 교환하기 위한 표준화된 + +프로세스와 기술을 도입하는 것을 의미한다. 초기 단계에서는 데이터 교환이 수동으로 이루어지고, +표준화된 절차 없이 데이터를 공유할 수 있다. 이후 성숙도가 높아지면 데이터 교환 표준화 도구를 +도입해 데이터가 안전하게 교환될 수 있도록 보안 프로토콜과 표준을 적용하고, 외부 파트너나 +시스템 간의 데이터 교환이 안전하게 이루어질 수 있는 체계를 구축해야 한다. 최종적으로는 AI +기반의 자율 데이터 교환 관리 시스템을 통해 모든 데이터 교환이 실시간으로 모니터링되고, +표준화된 보안 절차에 따라 자동으로 관리되는 체계로 발전한다. + +#### 8.6 보안 운영 조정 및 사고 대응은 보안 사고 발생 시 이를 신속하게 감지하고 대응하는 역할을 + +한다. 초기 단계에서는 보안 사고 대응 절차가 수동으로 관리되며, 보안 팀이 각 보안 사고에 대해 +개별적으로 대응하는 방식이 주를 이룬다. 이후 성숙도가 높아지면 사고 대응 자동화 시스템을 +도입해 보안 사고 발생 시 신속하게 대응 절차가 자동화되고, 사고 처리 속도가 크게 향상된다. +최종적으로는 AI 기반의 자율 사고 대응 시스템을 통해 보안 사고가 실시간으로 감지되고, 자동으로 +대응 절차가 실행되어 사고의 영향을 최소화하는 자율적 보안 운영 체계로 발전할 수 있다. +이와 같이, 자동화 및 통합의 각 요소는 초기 단계에서 수동적이고 개별적으로 운영되지만, +성숙도가 높아지면서 점차 자동화되고, AI 기반의 자율적 관리 체계로 발전해 나간다. 이를 통해 +조직은 보안 위협에 신속하게 대응하고, 보안 운영을 일관되게 관리하며, 궁극적으로 자율적인 보안 +환경을 구축할 수 있다. + +제로트러스트 +가이드라인 2.0 + + +## 제1절 제로트러스트 아키텍처 도입 + +고려사항 + +## 제2절 제로트러스트 아키텍처 도입을 위한 + +조직 내 역할 및 목표 설정 + +## 제3절 제로트러스트 아키텍처 구성 방안 + + +## 제4절 제로트러스트 아키텍처 도입 준비 + +예시 +제로트러스트 도입 +준비 방안 + +# 제4장 + + +106 | 제로트러스트 가이드라인 2.0 + +## 제1절 + +제로트러스트 아키텍처 도입 고려사항 +가이드라인 1.0의 3.2절에서는 제로트러스트로의 전환을 목표로 하는 기업이 목표 달성을 위한 +전환 및 도입 계획을 수립할 때, 성숙도 모델 관점에서 고려해야 하는 원칙 및 기업 내외부 환경 +관점에서 고려해야 할 사항을 언급한 바 있다. 이를 요약하면 다음 <표 4-1>과 같다. + +**[표 4-1]** 가이드라인 1.0의 3.2절에서 제시한 제로트러스트 도입 고려사항 + +관점 +설명 +성숙도 +모델 +관점 +‣ 최적화 수준은 절대로 단기적으로 달성할 수 있는 목표가 아님. 기업에서 가장 중요한 핵심 요소를 먼저 파악 후 +이들을 중심으로 먼저 성숙도 수준을 높이면서, 다른 핵심 요소에 대한 성숙도가 따라갈 수 있는 장기적인 계획 +및 실천 필요 +‣ 성숙도 모델은 제로트러스트 전환을 위한 여러 경로 중 하나로, 한 가지 경로만 존재하는 것이 아님. 어떤 경로를 +선택하는 것이 바람직한지는 각 기업별 상황에 따라 다름 +‣ 모든 기업이 반드시 모든 핵심 요소에 대하여 최적화 수준을 도달해야 하는 것이 아님. 기업의 규모, 기업망 구성 +방식, 리소스 종류 등에 대한 관리 수준과 필요성 등을 고려하여 최종적인 목표를 스스로 설정해야 함 +기업 +내·외부 +환경 +관점 +‣ 기술: 현재 기업이 사용하고 있는 레거시 보안 기술 파악 및 제로트러스트 핵심 기능을 제공하는 기술·솔루션을 +지속적으로 모니터링하여, 기존 기술을 대체·보완하는 방법 파악 필요 +‣ 기업 문화: 결정권자 및 이해관계자가 제로트러스트의 필요성을 인지할 수 있는 적극적인 노력 필요 +‣ 정책: 접근 주체가 리소스에 접근할 때에 대한 정책이 모두 변경될 것으로, 접근제어 정책과 신뢰도 평가 +알고리즘을 정교하게 설정할 때 신중하게 접근 필요 +‣ 규제 환경: 사이버 위험을 줄이기 위한 국가 차원의 표준이나 지침(예, 보안적합성 검증 제도, 클라우드 서비스 +보안인증 제도, ISMS-P)이 운용되고 있으므로, 이러한 규제 환경을 고려한 제로트러스트 도입 계획 수립이 +중요 +위 도입 고려사항은 기업이 제로트러스트 아키텍처를 도입하는 데 있어 기본적으로 고려해야 할 +원칙을 정리한 것이다. 가이드라인 1.0 뿐만 아니라 미국을 중심으로 다양한 제로트러스트 관련 +문서 및 참고 자료들이 발간되고 있음에도 불구하고, 제로트러스트 아키텍처를 도입하고자 하는 +기업들이 제로트러스트에 관하여 잘못 이해하고 있는 경우가 많다. +기업 담당자들이 제로트러스트에 대해 바라보는 관점 및 이해 수준에서 차이가 있을 수 있으나, + +| 관점 | 설명 | +| --- | --- | +| 성숙도 모델 관점 | ‣ 최적화 수준은 절대로 단기적으로 달성할 수 있는 목표가 아님. 기업에서 가장 중요한 핵심 요소를 먼저 파악 후 이들을 중심으로 먼저 성숙도 수준을 높이면서, 다른 핵심 요소에 대한 성숙도가 따라갈 수 있는 장기적인 계획 및 실천 필요 ‣ 성숙도 모델은 제로트러스트 전환을 위한 여러 경로 중 하나로, 한 가지 경로만 존재하는 것이 아님. 어떤 경로를 선택하는 것이 바람직한지는 각 기업별 상황에 따라 다름 ‣ 모든 기업이 반드시 모든 핵심 요소에 대하여 최적화 수준을 도달해야 하는 것이 아님. 기업의 규모, 기업망 구성 방식, 리소스 종류 등에 대한 관리 수준과 필요성 등을 고려하여 최종적인 목표를 스스로 설정해야 함 | +| 기업 내·외부 환경 관점 | ‣ 기술: 현재 기업이 사용하고 있는 레거시 보안 기술 파악 및 제로트러스트 핵심 기능을 제공하는 기술·솔루션을 지속적으로 모니터링하여, 기존 기술을 대체·보완하는 방법 파악 필요 ‣ 기업 문화: 결정권자 및 이해관계자가 제로트러스트의 필요성을 인지할 수 있는 적극적인 노력 필요 ‣ 정책: 접근 주체가 리소스에 접근할 때에 대한 정책이 모두 변경될 것으로, 접근제어 정책과 신뢰도 평가 알고리즘을 정교하게 설정할 때 신중하게 접근 필요 ‣ 규제 환경: 사이버 위험을 줄이기 위한 국가 차원의 표준이나 지침(예, 보안적합성 검증 제도, 클라우드 서비스 보안인증 제도, ISMS-P)이 운용되고 있으므로, 이러한 규제 환경을 고려한 제로트러스트 도입 계획 수립이 중요 | + + +제로트러스트와 관련한 용어 정의 및 개념을 잘못 이해함으로써 이해 관계자들끼리 의견이 일치 +되지 못하거나 각자 이해 수준에 괴리가 발생하는 경우 기업망에 제로트러스트 아키텍처를 도입 +하는데 있어 상당한 걸림돌이 될 수밖에 없다. +이 절에서는 기업 보안 담당자들이 제로트러스트 도입 과정에서 다양한 이해 관계자들과 +합의하여야 하는 개념에 대해 명확한 이해를 돕는 고려사항을 다룬다. + +### 1. 제로트러스트에 대한 명확한 이해 + +가이드라인 1.0, 그리고 본 문서 1장에서 제로트러스트에 대한 정의를 내리고 있으며, NIST SP + +### 800-207 등 다양한 문서에도 그 개념을 명확히 설명하고 있음에도 불구하고 기업의 의사결정권자 + +및 도입 담당자들이 잘못 이해하는 경우가 있다. +예를 들어, 제로트러스트 아키텍처를 도입하면 경계 기반 보안 방식으로는 막을 수 없는 해킹 +공격들을 원천 차단할 수 있는 것 아니냐고 생각하는 이들이 있으며, 특정 제로트러스트 기술이 +제로트러스트 아키텍처를 구축하는 데 있어 필수적으로 반영되어야 한다고 생각하거나, 특정 +레거시 보안 기술이 제로트러스트 철학과 반대되는 개념이므로 반드시 제거되어야 한다고 보는 +시각들도 일부 존재한다. +제로트러스트에 대해 정확히 이해하기 위해서는, 본 가이드라인 외에도 제로트러스트를 정의하는 +대다수 문서들이 가지고 있는 공통적인 개념을 다시 한번 생각해 볼 필요가 있다. 이 공통 개념은 +다음과 같은 3가지 내용을 포함한다. 첫째, 기업망 내부 네트워크는 이미 침투당한 상태일 가능성을 +포함하고 있으며, 둘째, 정확한(신뢰도 평가에 기반하고 지속적이며 동적인) 접근제어를 하고자 +한다는 것이고, 마지막으로 제로트러스트는 특정 기술이 아니라 보안 개념, 패러다임, 아이디어의 +집합이라는 것이다. +제로트러스트라는 단어의 사전적인 의미로 인하여 ‘신뢰 제거’에 초점을 맞출 수 있으나, +이보다는 접근제어 과정에서 ‘정확하게 신뢰도를 평가’하여야 한다는 개념으로 보아야 한다. 또한 +제로트러스트 모델이 기존 경계 기반 보안 모델을 대체하기 위해 나온 배경으로 인하여 기업망 +내부와 인터넷의 ‘경계를 제거’하는 것에 중점을 두려고 할 수 있으나, 그보다는 경계를 리소스 +단위로 마이크로 세그멘테이션(Micro-Segmentation)하는 것이 훨씬 중요하게 받아들여야 하는 +개념이다. + +108 | 제로트러스트 가이드라인 2.0 +2.1절에서도 언급하였듯이, 제로트러스트 역시 기존 경계 기반 보안 모델과 마찬가지로, 최종적인 +목표는 기업망 및 내부 리소스에 대한 보호이며, 이는 곧 내부 리소스를 불법적인 접근으로부터 +보호하고 정당한 권한을 가진 사용자가 정상적으로 접근할 수 있도록 만드는 것을 의미한다. +따라서, 이러한 목적을 달성하기 위한 접근법에 대해서 제로트러스트의 성숙도 수준을 평가할 수는 +있으나, 특정 보안 기술이 절대 제로트러스트가 아니라고 얘기할 수는 없는 것이다. +제로트러스트에 대한 오해를 나열하기에 앞서, 제로트러스트 기술 및 솔루션에 대해서는 다음과 +같이 정의하고자 한다. +제로트러스트 기술·솔루션(Zero Trust Technology·Solution)은 제로트러스트 개념을 부분적으로 만족 +하는 혹은 지원하기 위한 요소 기술·솔루션이다. 여기에서 주의해야 할 것은 특정 제로트러스트 기술의 +도입만으로 기업망에서 제로트러스트의 기본 원리를 달성할 수 없다는 점이다. 기업망 핵심 요소별 보안 +기능은 1~2개의 제로트러스트 기술만으로 모두 만족할 수 없으며, 이들 기술·솔루션들은 현재 접근에 +대한 신뢰도를 정확하게 평가할 수 있도록 통합·연동되어야 한다. +제로트러스트를 구축하고자 하는 보안 담당자뿐만 아니라 기업의 모든 구성원들은, 앞서 언급한 +관점을 염두에 두고 제로트러스트에 대하여 다음과 같이 정확하게 이해하는 것이 바람직하다. +가. 레거시 보안 기술과 제로트러스트에 대한 이해 +제로트러스트 기술과 레거시 보안 기술은 명확히 다르거나 구분되는 기술이 아니다. 제로트러스트 +아키텍처 구축을 위해서는 레거시 보안 기술·솔루션을 모두 걷어내기보다, 적절히 유지하면서 새로운 +보안 기술을 도입·연동하면서 제로트러스트 성숙도 수준을 끌어올릴 수 있다. +예를 들어, [그림 4-1]의 붉은색 막대그래프를 보면 어디서부터 붉은색인지에 대해 단정 짓기 +매우 어려울 것이다. 심지어 흰색에 가까운 가장 왼쪽 부분조차도 약간의 붉은색을 띠고 있다고 +느껴질 수 있다. 붉은색 자체를 보안성과 비교하여 생각해 보면, 보안 기술은 시간이 지나면서 [그림 +4-1]의 막대그래프 중 왼쪽 부분에서 오른쪽으로 진화하고 있는 것과 유사한 관점으로 볼 수 있다. + +**[그림 4-1]** 붉은색 막대그래프 + + +![그림 4-1] 의 붉은색 막대그래프를 보면 어디서부터 붉은색인지에 대해 단정 짓기](images/p0109_img0.png) + + +과거에 활용해오던 레거시 보안 기술 역시 기본적으로는 앞서 언급한 보안 목표 즉 기업망 및 +내부 리소스에 대한 보호를 추구하고 있으므로, 기본적으로는 제로트러스트의 초보적인 철학이 +담겨 있다고 볼 수 있으며 기술 관점에서 성숙도가 낮을 수 있지만 절대 제로트러스트 기술이 +아니라고 할 수 없다. 또한 기업망에 대해서 제로트러스트 성숙도를 평가할 때는 하나의 기술만으로 +평가하는 것이 바람직하지 않으며, 기업의 상황과 지켜야 하는 규정, 보호하고자 하는 리소스에 +대한 위험도 등을 종합적으로 분석하여야 한다. +따라서, 기업망의 제로트러스트 수준을 평가할 때, 망분리, VPN, 방화벽 등과 같은 특정 레거시 +기술의 적용여부를 절대적인 기준으로 판단하는 것은 적절하지 않다. +물론, 망분리를 통해 인터넷망과 내부망을 물리적으로 분리하고 있는 환경에서는 클라우드 +기반의 다양한 서비스라든지 외부 AI 기술에 대한 연동 등 기업의 필요성 혹은 고객에 의한 도입 +요구가 발생할 수 있다. 신기술을 도입하는 과정에서 레거시 기술을 계속 이용하기 어렵다면 이로 +인해 발생할 수 있는 보안 위협을 완화하여 보안성을 유지할 수 있는 조치를 함께 도입하는 것을 +고려할 수 있을 것이다. +그러나 매우 민감한 데이터 혹은 리소스를 보유하고 있는 기업이라면, 망분리 기술과 동적 +접근제어 기술, 내부망 위험 분석 기술을 같이 활용하는 것이 보안 측면에서 훨씬 적절할 것이다. +미 국방부 역시 민간 클라우드 서비스 활용 시, 데이터의 민감도에 따라 직접 접속, 논리적 망분리 +및 물리적 망분리 기술을 적절하게 이용하고 있다. 제로트러스트 철학에서 경계하는 것은, 망분리 +기술을 적용했으니 인터넷망과 물리적으로 차단된 내부 업무망은 안전할 것이라고 여겨(즉, 충분히 +신뢰할 만하다고 평가하여) 업무망 혹은 내부 디지털 자산에 대한 추가적인 보호 조치를 더 이상 +취하지 않는 경우일 뿐이다. +제로트러스트 아키텍처의 최종적인 목적은 일반적인 보안 아키텍처와 마찬가지로 결국 기업망의 +핵심 디지털 자산을 보호하는 데 있으며, 따라서 레거시 기술이 적용되어 있다는 이유 하나만으로 +제로트러스트의 성숙도 수준이 낮다고 평가하거나 이 기술을 제거해야 한다고 주장하는 것은 +바람직하지 않다. 망분리를 통해 인터넷과 물리적으로 차단된 업무망에 대해서도, 강력한 인증 +및 기기 보호 조치, 애플리케이션과 네트워크에 대한 세밀한 접근제어, 분석을 통한 가시성 확보 +등을 통하여 기존보다 보안 수준을 높일 수 있다면 이 역시 제로트러스트 철학에 한 걸음 다가가는 +것으로 볼 수 있다. + +110 | 제로트러스트 가이드라인 2.0 +또한, 레거시 보안 기술은 실환경에서 오랫동안 활용된 경우가 많아 가격 대비 성능이 높고 +안정적이며 검증된 기술이라는 장점 역시 존재한다. 제로트러스트의 성숙도를 끌어올리는 것에만 +초점을 맞추다 보면 기존 기술·솔루션을 무조건 배제해야 하는 것으로 오해할 수 있으나, 기업의 +목표와 환경, 규정 등에 따라 기업망 보안 수준을 끌어올리는 데 있어 기존 보유 중인 레거시 +기술·솔루션을 보완·유지하면서 현재 도입되지 않았거나 고도화가 필요한 기술에 대해서만 새로 +도입하는 등 전략적인 접근을 고려할 수 있다. +나. 완벽한 보안이 아닌 위험 완화 +완벽한 보안이라는 것은 존재하지 않으며, 제로트러스트 철학을 모두 구현하더라도 지속적으로 위험 +을 완화하는 것을 목표로 해야 한다. +먼저 언급하고 싶은 것은, 보안에 대한 전문가라면 당연히 알고 있을 사실이지만 ‘완벽한 +보안’이라는 것은 절대로 존재할 수 없다는 것이다. 제로트러스트 철학은 기본적으로 ‘이미 +공격당했을 가능성’을 염두에 두고 기업망의 위험을 완화하는 전략이며, 이러한 전략이 기업망 +전체에서 반영될 수 있도록 보안 기술을 도입함으로써 제로트러스트 아키텍처를 구축할 수 있게 +되는 것이다. 가트너 역시, 제로트러스트와 관련한 보고서에서 다음과 같이 언급한 바 있다. +“CISO와 위험 관리 책임자는 제로트러스트가 사이버 위협을 제거할 것이라고 가정해서는 안 +됩니다. 대신 제로트러스트는 위험을 줄이고, 공격의 영향을 제한합니다” +이뿐만 아니라, CISO 및 보안 실무자들이 추가로 이해하고 있어야 하는 사항은 다음과 같다. +- 제로트러스트 아키텍처를 구현하더라도, 해당 구조로 인해 발생할 수 있는 위협이 존재한다. +- 이론적으로는 완벽하더라도, 제로트러스트 기술·솔루션을 구현하는 과정에서 이미 내재하고 +있거나, 도입 및 운용하는 과정에서 발생할 수 있는 취약점의 존재 여부를 지속적으로 +확인해야 한다. +가이드라인 1.0의 3.4절에서도 언급하고 있듯, 첫 사항이 제로트러스트 아키텍처가 근본적인 +취약점을 갖는다거나 기존 환경과 비교하여 더 취약해질 수 있음을 의미하지는 않는다. 공격자들은 +늘 기업망의 빈틈을 찾아 공격을 시도할 뿐이며, 제로트러스트 아키텍처는 정책 엔진과 정책 +관리자, 정책시행지점 등의 권한이 막강하며, 접근을 제어하는 과정에서 많은 정보를 수집하기 + +때문에 운영에 유의해야 함을 의미하는 것이다. 구체적인 위협과 이를 완화하는 방안은 (가이드라인 +1.0의 <표 3-4-1>)를 참조할 수 있다. +참고 +제로트러스트 아키텍처 도입·운영 시 발생할 수 있는 위협 및 완화 방안 +위협 +내용 +제로트러스트 +아키텍처 결정 +과정 무력화 +위협 내용 +‣ 정책 엔진의 규칙을 설정할 수 있는 기업 관리자가 승인없이 규칙을 변경하거나 기업 운영에 +지장을 주는 실수 +‣ 정책 관리자에 대한 직접적인 침해를 통한 승인되지 않는 접근 허용 +위협 완화 +방안 +‣ 정책 엔진 및 정책 관리자를 적절하게 설정·모니터링 +‣ 모든 설정 변경을 반드시 기록·감사 +DoS 또는 +네트워크 장애 +위협 내용 +‣ 공격자가 정책집행지점, 정책 엔진 또는 정책 관리자에 대한 접근 방해/거부 (서비스 거부 +공격 혹은 라우팅 가로채기) +‣ 호스팅 제공자에 의해 정책 엔진 또는 정책 관리자 오프라인 +‣ 알 수 없는 이유로 정책 관리자가 기업 리소스에 연결되지 못함 +위협 완화 +방안 +‣ 이들 시스템을 적절하게 보호되는 클라우드 환경에서 운영 +‣ 혹은 사이버 내성에 관한 지침에 따라 여러 위치에 복제 +(단, 이러한 공격·장애는 기존 VPN에서도 발생할 수 있으며, 원천 봉쇄는 불가능) +인증 수단 도용 +및 내부자 위협 +위협 내용 +‣ 중요한 계정의 인증 수단을 획득하기 위해 피싱, 사회 공학 등의 공격 +위협 완화 +방안 +‣ 컨텍스트 기반 신뢰도 평가 알고리즘을 통하여, 일반적인 패턴과 다른 리소스 접근 방지 +네트워크 가시성 +위협 내용 +‣ 기업망의 일부 트래픽에 대한 분석의 어려움 (기업 소유가 아닌 접속 자산, 혹은 DPI 수행이 +안 되거나 암호화된 트래픽을 조사할 수 없는 경우) +위협 완화 +방안 +‣ 내용을 알 수 없더라도 메타데이터(출발지/목적지 IP 주소 등) 등을 활용하여 공격자 혹은 +악성 코드 탐지 +‣ 머신러닝 기반 트래픽 분석 등 +시스템/ +네트워크 정보 +저장소 +위협 내용 +‣ 모니터링, 네트워크 트래픽, 메타데이터 등 분석용 데이터는 일반적으로 공격자의 타깃이 +될 수 있음 +위협 완화 +방안 +‣ 중요 기업 데이터는 가장 엄격한 접근제어 정책 설정 +전용 데이터 +규격 또는 +솔루션에 대한 +의존 +위협 내용 +‣ 데이터(주체 식별정보, 자산, 위협 인텔리전스 등) 입력 요소들의 전용 데이터 규격 혹은 +솔루션 사용으로 인한 상호 운용성 문제 발생 +‣ 혹은 보안 이슈 및 장애로 인한 막대한 교체 비용 및 시간 소요 +위협 완화 +방안 +‣ 데이터 입력 요소를 도입하기 전, 업체의 보안 통제, 교체 비용, 공급망 위험 관리, 성능, +안전성 등을 종합적으로 고려하여 평가 후 도입 +비인간 +객체에 의한 +제로트러스트 +아키텍처 관리 +위협 내용 +‣ 인공지능 혹은 소프트웨어 기반 에이전트의 인증 문제 +‣ 자동화된 기술이 기업의 보안 상태에 영향을 줄 수 있는 오탐과 미탐 가능성 +‣ 공격자가 비인간 객체 접속을 통해 권한이 없는 태스크를 수행하게 함 +위협 완화 +방안 +‣ 오탐, 미탐에 대해 정기적인 분석 및 수정·보완 +‣ 비인간 객체의 접근에 대한 모니터링 및 분석 +(출처: 가이드라인 1.0) + +| 위협 | | 내용 | +| --- | --- | --- | +| 제로트러스트 아키텍처 결정 과정 무력화 | 위협 내용 | ‣ 정책 엔진의 규칙을 설정할 수 있는 기업 관리자가 승인없이 규칙을 변경하거나 기업 운영에 지장을 주는 실수 ‣ 정책 관리자에 대한 직접적인 침해를 통한 승인되지 않는 접근 허용 | +| | 위협 완화 방안 | ‣ 정책 엔진 및 정책 관리자를 적절하게 설정·모니터링 ‣ 모든 설정 변경을 반드시 기록·감사 | +| DoS 또는 네트워크 장애 | 위협 내용 | ‣ 공격자가 정책집행지점, 정책 엔진 또는 정책 관리자에 대한 접근 방해/거부 (서비스 거부 공격 혹은 라우팅 가로채기) ‣ 호스팅 제공자에 의해 정책 엔진 또는 정책 관리자 오프라인 ‣ 알 수 없는 이유로 정책 관리자가 기업 리소스에 연결되지 못함 | +| | 위협 완화 방안 | ‣ 이들 시스템을 적절하게 보호되는 클라우드 환경에서 운영 ‣ 혹은 사이버 내성에 관한 지침에 따라 여러 위치에 복제 (단, 이러한 공격·장애는 기존 VPN에서도 발생할 수 있으며, 원천 봉쇄는 불가능) | +| 인증 수단 도용 및 내부자 위협 | 위협 내용 | ‣ 중요한 계정의 인증 수단을 획득하기 위해 피싱, 사회 공학 등의 공격 | +| | 위협 완화 방안 | ‣ 컨텍스트 기반 신뢰도 평가 알고리즘을 통하여, 일반적인 패턴과 다른 리소스 접근 방지 | +| 네트워크 가시성 | 위협 내용 | ‣ 기업망의 일부 트래픽에 대한 분석의 어려움 (기업 소유가 아닌 접속 자산, 혹은 DPI 수행이 안 되거나 암호화된 트래픽을 조사할 수 없는 경우) | +| | 위협 완화 방안 | ‣ 내용을 알 수 없더라도 메타데이터(출발지/목적지 IP 주소 등) 등을 활용하여 공격자 혹은 악성 코드 탐지 ‣ 머신러닝 기반 트래픽 분석 등 | +| 시스템/ 네트워크 정보 저장소 | 위협 내용 | ‣ 모니터링, 네트워크 트래픽, 메타데이터 등 분석용 데이터는 일반적으로 공격자의 타깃이 될 수 있음 | +| | 위협 완화 방안 | ‣ 중요 기업 데이터는 가장 엄격한 접근제어 정책 설정 | +| 전용 데이터 규격 또는 솔루션에 대한 의존 | 위협 내용 | ‣ 데 이터(주체 식별정보, 자산, 위협 인텔리전스 등) 입력 요소들의 전용 데이터 규격 혹은 솔루션 사용으로 인한 상호 운용성 문제 발생 ‣ 혹은 보안 이슈 및 장애로 인한 막대한 교체 비용 및 시간 소요 | +| | 위협 완화 방안 | ‣ 데 이터 입력 요소를 도입하기 전, 업체의 보안 통제, 교체 비용, 공급망 위험 관리, 성능, 안전성 등을 종합적으로 고려하여 평가 후 도입 | +| 비인간 객체에 의한 제로트러스트 아키텍처 관리 | 위협 내용 | ‣ 인공지능 혹은 소프트웨어 기반 에이전트의 인증 문제 ‣ 자동화된 기술이 기업의 보안 상태에 영향을 줄 수 있는 오탐과 미탐 가능성 ‣ 공격자가 비인간 객체 접속을 통해 권한이 없는 태스크를 수행하게 함 | +| | 위협 완화 방안 | ‣ 오탐, 미탐에 대해 정기적인 분석 및 수정·보완 ‣ 비인간 객체의 접근에 대한 모니터링 및 분석 | + + +112 | 제로트러스트 가이드라인 2.0 +첫 사항이 제로트러스트 아키텍처의 논리적 구조로 인한 위협이라면, 둘째 사항은 기술·솔루션 +도입 및 운용 과정에서 보안 취약점이 존재함으로써 발생할 수 있는 위협을 의미한다. 기업망에서 +다양한 보안 솔루션의 도입으로 인하여 공격 대응 수준이 높아짐에 따라, 기업망에서 사용 +중인 보안 기술의 취약점을 노리거나 보안 솔루션에 대한 공격 시도가 점차 늘고 있으며, 보안 +담당자들은 사이버 위협 인텔리전스(CTI), 보안운영센터(SOC) 등을 활용하여 지속적으로 이들에 +대한 보안 취약점 혹은 공격 사례가 없는지를 확인해야 한다. +다. ‘최적화 수준’ 제로트러스트 아키텍처 구현의 완성 +제로트러스트 아키텍처 구현은 단기간에 ‘최적화 수준’으로 완성하기 어려우며 장기적인 목표와 단계 +적 전략 수립이 필요하다. +기업망의 보안 담당자가 경영진 및 재무 담당자 등의 승인하에 제로트러스트 아키텍처 +도입을 위한 계획을 세우더라도 여러 어려움을 극복할 수 있어야 한다. 일부 사례를 살펴보면, +제로트러스트 도입이 어렵지 않으며 단기간 내에 구축이 가능하다는 점을 강조하는 경우가 +있다. 이 표현이 무조건 잘못된 의견이라고 볼 수는 없으나, 단기간 내에 구축이 가능하다는 것이 +제로트러스트 아키텍처의 완성을 의미하는 것으로 해석해서는 안 되며, 제로트러스트의 철학을 +바탕으로 기업망의 보안 수준과 성숙도를 부분적으로 개선할 수 있다고 해석하는 것이 정확할 +것이다. +기업의 보안 담당자 및 경영진은 제로트러스트 기술·솔루션을 도입하는 것이 제로트러스트 +아키텍처의 완성을 의미하는 것은 아니며, 지속적으로 보안성을 개선시켜 성숙도 수준을 +끌어올리기 위한 장기간의 프로젝트임을 정확히 이해하여야 한다. +장기간의 프로젝트라는 것은 두 가지 측면에서 바라볼 수 있어야 하는데, 첫째는 기술 관점에서의 +어려움이다. 앞서 언급한 제로트러스트 성숙도 모델 관점에서 보면, 가장 높은 최적화 수준에서는 +AI 기반 사용자 행동 분석 및 신뢰도 검증, 실시간 위험 관리, 동적 접근제어, 자동화된 프로비저닝 +등 기술적으로 상당히 높은 수준의 기술 구현을 요구하고 있다. 이 중 일부는 아직 구현이 되어 +있지 않거나 혹은 충분한 검증이 이루어지지 않은 기술을 포함하므로 단기간 내에 이렇게 높은 +제로트러스트 성숙도를 갖추는 것은 불가능하다. + +둘째는 각 보안 기술 및 솔루션 간 연동의 어려움이다. 일부 기업들은 기업망 관점에서 상당히 +넓은 영역을 포괄하는 보안 솔루션 체계를 구성하여 판매하고 있으나, 제로트러스트 아키텍처를 +구축하는 것은 일반적으로 다양한 보안 기업들이 각자 전문성을 갖추어 개발한 솔루션들에 대한 +연동을 요구하게 된다. 이는 제로트러스트는 특정한 영역에서의 보안 기술만으로 달성할 수 있는 +것이 아니라, 기업망 관점에서 존재하는 모든 핵심 요소 및 이들을 보호하기 위한 보안 전략 및 +기술들이 유기적으로 조합되어 구축되어야 하기 때문이다. 그러나 현재 솔루션 간 연동을 위한 +보안 기능 및 인터페이스가 표준화된 형태로 정의되어 있지 않으며 보안 정책 관리 및 시행 과정이 +기업별로 상이하여, 이들을 통합하여 연동하는 것은 상당한 어려움을 요구하게 된다. NIST SP + +### 1800-35 및 일부 실증 사례에서도 제로트러스트 아키텍처를 구축하는 과정에서 솔루션 간 정책 + +연동의 어려움을 호소하는 경우가 있다. +또한, 이러한 기술적 어려움과 연동의 어려움이 어느 정도 해소된다 하더라도, 도입하고자 하는 +기업은 최적화 수준의 제로트러스트를 성공적으로 구현하여 운영 중인 사례를 참고하기를 원할 +것이지만 현재까지는 이에 대한 성공 사례가 많지 않다는 점도 단기간 내에 제로트러스트 도입이 +쉽지 않은 또 다른 근거가 된다. +미 연방정부에 소속된 기관 중 제로트러스트 아키텍처의 구현과 도입을 가장 선도하고 있는 +국방부의 경우 2022년 발표한 제로트러스트 전략 문서에서 가장 높은 수준의 제로트러스트 +(Advanced Zero Trust)를 2032년까지 도입하겠다는 로드맵을 세운 바 있으며, 국가안보통신 +자문위원회(National Security Telecommunications Advisory Committee, NSTAC) 역시 +2022년 대통령 보고서에서 제로트러스트에 대한 범정부적 구현은 수년에서 수십년이 걸린다고 +언급한 바 있다. 범정부적 구현보다 개별 기업에서의 구현이 훨씬 속도가 빠르겠지만, 그럼에도 +1~2년만에 제로트러스트 아키텍처를 ‘최적화 수준’으로 완성시킬 수 있다고 생각하는 것은 +바람직하지 않다. +따라서, 제로트러스트 아키텍처를 도입하고자 하는 기업 역시 단기간 내에 도입하겠다는 +계획보다는, 최종 목표와 함께 몇 단계의 단기 목표와 실천 방안을 구성함으로써 최적화 수준의 +성숙도를 향한 장기적인 도입 계획을 마련하는 것이 좋을 것이다. + +114 | 제로트러스트 가이드라인 2.0 +라. 제로트러스트 도입 전략에 대한 이해 +제로트러스트 전략은 기술·솔루션 도입만을 의미하지 않으며, 기업이 제로트러스트를 채택하는 과정 +에서 인식 제고, 교육 등 부가적인 업무를 필요로 한다. +많은 기업 보안 담당자들이 제로트러스트 아키텍처 도입에 있어 기술·솔루션의 도입을 +우선시하고 있다. 그러나, 먼저 보안 담당자들은 왜 제로트러스트를 도입하려고 하는가에 대한 +근본적인 질문을 할 수 있어야 한다. 기술 및 솔루션의 도입은 전체적인 제로트러스트 도입 과정 중 +셋째 단계인 구현(도입) 단계에 해당한다. 그러나 전체 과정은 준비 단계부터 이루어져야 하며, 준비 +단계에 들어가기 전에 기업 소속 전체 임직원들에게 비전과 최종 목표를 제시할 수 있어야 한다. +미 국방부에서 발간한 제로트러스트 전략 문서에서는 “무엇을 달성할 것인가”의 관점에서 비전을 +“완전히 구현된 국방부 차원의 제로트러스트 사이버 보안 프레임워크에 의해 보호되는 국방부 정보 +엔터프라이즈”로 제시하고, 다음과 같은 목표(Goal)를 제시하였다. + +**[표 4-2]** 미 국방부 제로트러스트 전략 + +비전 달성을 위한 질문 +목표 +우리는 무엇을 이해·동의하는가? +‣ 제로트러스트에 대한 문화적 채택: 국방부 제로트러스트 생태계 전반에서 정보 기술의 +설계, 개발, 통합 및 배포를 이끄는 제로트러스트 보안 프레임워크 및 사고방식 +무엇을 해야 하는가? +‣ 보호·방비되는 국방부 정보시스템: 국방부 정보시스템에서 조직 차원의 복원력 달성을 +위하여 제로트러스트를 통합 및 운영하는 국방부 사이버보안 사례 +어떻게 제로트러스트를 달성할 +것인가? +‣ 기술 가속화: 제로트러스트 기반 기술을 산업계 발전 속도와 같거나 그 이상의 속도로 +배포하여 변화하는 위협 환경에 앞서 나갈 것 +어떤 지원이 필요한가? +‣ 제로트러스트 달성 지원: 부처 및 하부조직 수준 프로세스와 통합된, 지속적이고 +조직화된 제로트러스트 실행 +이 전략에서 기업망 내부에서 보호 대상이 되는 핵심 요소 선정은 둘째 목표에 해당되며, 어떤 +기술·솔루션을 도입할 것인가는 셋째 목표에 해당한다. 다른 두 가지 목표(첫째와 넷째)를 살펴보면, +미 국방부는 조직 차원에서 제로트러스트의 정확한 이해를 위한 문화적 채택과 구체화된 실행 +전략을 담은 지원 계획 수립 역시 전략적 목표 수립에 있어 필수적이라고 파악하고 있음을 확인할 +수 있다. + +| 비전 달성을 위한 질문 | 목표 | +| --- | --- | +| 우리는 무엇을 이해·동의하는가? | ‣ 제로트러스트에 대한 문화적 채택: 국방부 제로트러스트 생태계 전반에서 정보 기술의 설계, 개발, 통합 및 배포를 이끄는 제로트러스트 보안 프레임워크 및 사고방식 | +| 무엇을 해야 하는가? | ‣ 보호·방비되는 국방부 정보시스템: 국방부 정보시스템에서 조직 차원의 복원력 달성을 위하여 제로트러스트를 통합 및 운영하는 국방부 사이버보안 사례 | +| 어떻게 제로트러스트를 달성할 것인가? | ‣ 기술 가속화: 제로트러스트 기반 기술을 산업계 발전 속도와 같거나 그 이상의 속도로 배포하여 변화하는 위협 환경에 앞서 나갈 것 | +| 어떤 지원이 필요한가? | ‣ 제로트러스트 달성 지원: 부처 및 하부조직 수준 프로세스와 통합된, 지속적이고 조직화된 제로트러스트 실행 | + + +미 국방부의 세부적인 전략 모두가 모든 기업에게 해당하는 것은 아니지만, 기업이 +제로트러스트를 원활하게 도입하기 위해서는 조직 차원에서 공통적으로 이해 가능한 비전을 +제시하고 인식을 제고하며 필요시 보안 담당자의 전문성을 키울 수 있어야 한다. 또한 제로트러스트 +아키텍처를 구축하기 위한 정책과 계획, 로드맵(일정), 자금 조달, 기술 도입 및 배포 방안, +제로트러스트 성능 평가 방안을 구체적으로 수립하여야 하며, 조직의 규모에 따라 필요한 경우 +제로트러스트 책임 조직을 구성하는 것도 도움이 될 것이다. +마. 기업 임직원의 업무 편의성 증대 +제로트러스트 도입 시 직원들이 클라우드 및 AI와 같은 혁신 기술을 편리하게 활용할 수 있게 되어 +직원들의 편의성이 증대될 것을 기대하지만, 엄격한 접근제어 및 보안 강화로 인하여 새로운 불편이 +생길 수도 있다. +보안 기술 중에는 보안 강화의 목적하에 직원의 업무 효율성을 떨어뜨리는 경우가 다수 존재하며, +일부 기업에서는 법규 혹은 내부 규정으로 망분리, VPN, 기기 관리 솔루션 등을 강제함으로써 +불편함을 가중시키는 사례가 많이 존재한다. 업무 효율성 측면에서 불편한 여러 레거시 보안 +기술에 대한 대체수단으로 제로트러스트 기술을 활용하려는 기업 임직원들에게는 제로트러스트 +아키텍처의 도입을 적극적으로 추진할 명분을 갖게 해준다. +그러나 제로트러스트 아키텍처는 기업 차원의 강화된 인증, 기기 및 리소스 관리 등을 요구하며, +보안 강화 및 위험 완화를 위하여 리소스 접근시 최소 권한 부여를 통한 엄격한 접근제어를 시행하게 +될 것이다. 기기 관리 측면에서는 특히 업무용 기기를 강제화하고, 기기에 대한 보안 상태 점검, OS +및 보안 업데이트 등을 지속적으로 요구하게 될 가능성이 있으며, 리소스 관리 측면에서는 실험 목적 +등으로 인한 임시 기기의 사용조차 엄격한 자산 및 식별자 등록 절차를 강제할 가능성이 있다. 이러한 +엄격한 보안 점검은 직원들의 기존 관행과 다를 수 있으므로, 직원들이 적응하기까지는 불편함을 +줄 가능성이 있다. 물론, 높은 수준의 제로트러스트 성숙도를 만족하게 될 경우 이러한 과정 중 상당 +부분은 자동화가 이루어져 편의성을 다시 확보할 수 있다. +또한, 제로트러스트 아키텍처 구축 초기에는 동적 접근제어를 위하여 정상 사용자의 활동도 +엄격하게 확인하는 과정에서, 신뢰도 판단 알고리즘의 오류 혹은 정책에 대한 잘못된 설정으로 정상 + +116 | 제로트러스트 가이드라인 2.0 +사용자의 활동에 대해서도 의심스러운 행위로 오탐할 가능성이 존재한다. 지속적인 운영 및 피드백 +과정에서 이러한 오탐은 줄어들겠지만 그 과정에서 일반 직원에게 불편함을 줄 수 있음을 인지하고 +이에 대한 대책을 마련해야 한다. +그 외에도, 동적 접근제어를 위하여 현재 리소스에 접근하는 직원의 물리적 혹은 네트워크상의 +위치, 사용 프로그램 등 활동을 지속적으로 모니터링하여 프라이버시 이슈가 발생할 수도 있다. +따라서, 제로트러스트 도입 및 운영 과정에서 직원들이 새로 겪을 수 있는 불편을 최소화하면서도 +보안성을 유지·고도화할 수 있는 제로트러스트 도입 전략이 필요하다. + +### 2. 기업 내 인식 제고의 필요성 + +앞서도 언급했지만, 많은 기업에서 제로트러스트 아키텍처 도입 계획을 세울 때 가장 먼저 +기술·솔루션 혹은 도입 사례를 분석하는 경우가 많은 것으로 보인다. 그러나, 미 국방부 제로트러스트 +전략 문서에서도 언급한 바와 같이, 조직 차원에서 제로트러스트 도입 시 가장 먼저 해야 할 일은 +비전 제시와 함께 해당 비전을 만족시킬 수 있는 목표를 설정하는 것이다. 이를 통하여, 조직 내 모든 +구성원들이 같은 보안 지향점을 갖고, 제로트러스트 전환에 각자의 역할에 따라 지원 및 협력할 수 +있는 체계를 수립할 수 있어야 한다. 이와 같은 일들은 모두 기업 내 제로트러스트에 대한 인식을 +제고하는 과정으로 볼 수 있다. +기업 내 인식을 제고하기 위해서는, 제로트러스트 전환에 드는 시간과 비용, 제로트러스트 운영 +과정에서 신규 보안 솔루션 도입이나 정책 변경으로 인한 임직원의 불편 등에 대해 설득할 수 +있어야 하며, 이를 위해서 특히 경영진을 설득하여 지원을 이끌어내는 것은 필수적이라고 볼 수 +있다. 그러나 제로트러스트 전환이 막연하게 기업망에 대한 보안성을 높일 수 있다거나 혹은 다른 +기업들이 다들 도입을 진행 중임을 강조하는 등 추상적인 표현으로는 부족함이 있을 것이다. +따라서, 크게 보면 다음과 같이 제로트러스트에 대해 사전에 분석하여 정리하는 것은 필수적으로 +볼 수 있다. +가. 제로트러스트 아키텍처 도입 장점 파악 +도입으로 인한 일반적인 장점, 즉 내부 침투시에도 위험을 완화할 수 있다는 장점은 보안 +전문가가 아닌 임직원을 설득하기 어려울 것이다. 그보다는 현재 소속 기업의 특성이나 환경을 + +고려하여 장점이 드러나는 제로트러스트 기반 유스케이스를 구체화하는 것이 필요하다. +예를 들어, 보안성을 강화하기 위해 망분리 기술을 도입하고 있는 기업이라면, 망분리를 완화한 +형태의 제로트러스트 아키텍처 기반 업무 유스케이스를 제안함으로써 부가적으로 다양한 클라우드 +서비스 혹은 AI 기반 서비스를 직접적으로 업무에 활용 가능하게 되며, 이를 통하여 업무 효율성 +및 생산성이 매우 커질 수 있음을 제시할 수 있을 것이다. 혹은 소프트웨어 개발 기업에서는 +제로트러스트 아키텍처를 기반으로 소프트웨어 개발 환경의 보안성을 강화함으로써 공급망 보안에 +기여할 수 있음을 주장할 수 있을 것이다. +이 과정에서 필연적으로 발생하는 도입 시간과 인적 자원, 자본 등 비용에 대해서도, 효과적인 +방어를 통해 얻을 수 있는 이점을 강조할 수 있어야 한다. 보안에 대한 비용은 계속해서 늘어날 +가능성이 높은데, 이는 지속적으로 공격이 고도화되고 있고 공격 수단이 다양해지고 있기 때문에 +예전에 고려하지 않았던 보안 솔루션들이 추가로 필요하기 때문이다. 그리고 이런 신규 보안 +솔루션의 도입은 그 자체로 보안 성숙도를 높이는 제로트러스트 전환의 과정으로 볼 수 있다. 그 +외에도, 보안 사고 발생 시 예상 가능한 피해 규모를 미리 산정하여 예측하는 것도 필요할 수 있다. +나. 임직원의 역할과 책임에 대한 사전 정의 +많은 기업들은 법적 의무 준수 혹은 경영상의 의무로 조직 차원에서 보안 거버넌스 혹은 이와 +유사한 체계를 유지하고 있다. 제로트러스트 전환에 대한 결정이 이루어지더라도, 기업 내 +구성원들의 역할, 권한과 책임 등이 명확하지 않으면 제로트러스트 아키텍처 도입, 운영, 피드백, +보안 사고 발생에 대한 대응 등 다양한 상황에서 현장에서의 혼란은 불가피할 것이다. +예를 들어, 제로트러스트 아키텍처 도입 단계 중 준비 단계에서는 현재 기업의 현재 수준을 +정확히 파악하기 위하여 사용자 및 기기, 리소스에 대한 식별 및 성숙도 수준 평가가 필요하지만 +이는 제로트러스트 전환 담당자만의 노력으로 이루어질 수 없다. 따라서, 도입 준비 단계부터 운영 +단계, 피드백 및 개선 단계에 이르는 모든 도입 과정에서 임직원의 역할과 책임을 정의하고 난 후, +그들과 협력하에 계획을 수립하는 것이 적절하다. + +118 | 제로트러스트 가이드라인 2.0 + +### 3. 제로트러스트 전환을 통한 보안 성숙도 분석 + +이 부분은 제로트러스트 아키텍처 도입에 대한 장점을 파악하는 것과 일부 유사성이 있으나, +보안 관점에서 구체적인 분석의 필요성에 대해 다룬다. 제로트러스트 전환 담당자는 조직 내 +설득을 위해서 제로트러스트 전환 과정에서 제로트러스트 혹은 보안에 대한 성숙도 수준 분석 +방안에 대해서 고민할 필요가 있다. 즉, 제로트러스트 전환을 시작할 때, 혹은 전환 과정에서 현재의 +제로트러스트 혹은 보안 수준이 어느 단계에 있으며, 현재의 절차를 마무리했을 때 어느 단계에 +있을지를 경영진 등 내부 구성원들에게 객관적으로 보여줄 수 있어야 한다. +이를 위해서, 본 가이드라인 5장에서는 제로트러스트 도입 이후 보안 수준을 분석하여 객관적 +으로 제시할 수 있는 방안을 보여준다. 5장에서 제안하는 내용을 절대적인 기준으로 볼 수는 +없으나, 담당자들이 참조하여 객관화하는데 도움이 될 수 있을 것으로 보인다. +이 외에도, 부록 4절에서 언급한 다른 종류의 성숙도 모델을 이용하여 분석하는 것도 가능하며, +민감한 정보를 다루는 기업들은 최근 미 국방부가 2025년부터 시행하는 것으로 발표한 사이버보안 +성숙도 모델 인증(Cybersecurity Maturity Model Certification, CMMC) 제도 등을 참고할 수도 +있다. CMMC는 미 국방부에 연방 계약 정보(Federal Contract Information, FCI) 및 통제된 +미분류 정보(Controlled Unclassified Information, CUI)를 보호하기 위해 조달 기업들이 지켜야 +하는 보안 성숙도 수준을 정의하고 있으며, 상기 정보에 따르는 3단계의 보안 수준에 대해서 +수준별로 지켜야 할 요구사항을 정의하고 있다. + +### 4. 기타 고려사항 + +2.1절에서는 제로트러스트 아키텍처의 기본 원리를 제공하고 있으며, NIST SP 800-207 등 +다양한 문서에서도 제로트러스트 개념을 준수하기 위해 지켜야 할 원리 혹은 원칙들을 다루고 있다. +제로트러스트 도입을 준비하는 과정에서 제로트러스트 성숙도, 기술 및 솔루션을 분석하는 +단계로 진행될 경우, 특정 기술·솔루션이 가진 장단점에 편향되어 제로트러스트가 본질적으로 +추구하는 철학을 놓칠 수 있다. 도입을 준비하는 단계부터 실제 운영, 피드백에 이르기까지 이러한 +기본 원리를 잊지 않고 지속적으로 검증하는 것은 매우 중요하다. + +또 다른 측면으로는 기업망 보안의 특성상 중요한 디지털 자산의 보호에 우선해야 한다는 점에서, +해당 기업에서 가장 중요한 비즈니스를 중심으로 제로트러스트의 성숙도를 끌어올리려는 노력이 +필요하다. 예를 들어, 자체적으로 업무용 소프트웨어·서비스를 개발하여 자사망에 구축하거나 다른 +기업에게 공급하는 기업들은, 개발 및 공급망에 대한 제로트러스트 기반 안전성에 대해 심도있게 +분석하여야 한다. 공격자가 개발망 혹은 공급망에 침투할 가능성이 있는 상황이라면 해당 환경에서 +개발하는 소프트웨어·서비스로 인한 위험은 상당히 높다고 볼 수 있다. +2024년 5월 발간된 SW 공급망 보안 가이드라인 1.0 등을 참고하여, 개발 및 공급 환경에 대한 +관리를 철저히 할 수 있는 제로트러스트 아키텍처를 구성해야 하며, 관련 핵심 요소(특히 시스템, +애플리케이션 및 워크로드)에 대한 제로트러스트 성숙도를 최대한 빠르게 끌어올릴 수 있도록, +전략의 우선 순위 조정이 필요하다. 또한, 개발 환경에서의 취약점 발견, 해당 소프트웨어·서비스 +사용 부서 혹은 기업에서의 비정상적인 접근 등 문제 발생 시 해당 소프트웨어·서비스에 악성 코드 +등이 침투하지 않았는지를 검증하기 위한 개발 부서와의 협력 체계 등을 갖출 필요가 있을 것이다. + +120 | 제로트러스트 가이드라인 2.0 + +## 제2절 + +제로트러스트 아키텍처 도입을 위한 +조직 내 역할 및 목표 설정 + +### 1. 기업 내 임직원 간 역할과 책임 + +4.1절의 제로트러스트 아키텍처 도입 고려사항에서 제로트러스트 아키텍처를 도입하는 기업 내 +인식 제고를 위하여, 임직원의 역할과 책임에 대해 사전에 정의하여야 한다고 서술한 바 있다. +제로트러스트 아키텍처는 결국 제로트러스트의 개념을 활용하여 기업 내부의 네트워크, 시스템 +및 리소스를 보호할 수 있는 보안 아키텍처이다. 기업이 제로트러스트 아키텍처를 받아들이는 +것은 기업 전체에서의 보안 상태와 정책, 방향성을 근본적으로 변화시키는 작업이므로 정보보호 +최고책임자(CISO)의 역할이 매우 중요하다. 정보통신망 이용촉진 및 정보보호 등에 관한 법률 +제45조의3(정보보호 최고책임자의 지정 등)에서는 정보통신서비스 제공자가 지정하는 CISO의 +업무를 다음과 같이 정리하고 있다. +- 정보보호 최고책임자의 업무 +- 정보보호 계획의 수립·시행 및 개선 +- 정보보호 실태와 관행의 정기적인 감사 및 개선 +- 정보보호 위험의 식별 평가 및 정보보호 대책 마련 +- 정보보호 교육과 모의 훈련 계획의 수립 및 시행 +또한 정보보호 및 개인정보보호 관리체계(ISMS-P) 인증제도에서는 최고경영자가 CISO +관련하여 다음과 같은 업무를 수행할 것을 인증 기준으로 두고 있다. 그러나, 이 업무만으로는 +최고경영자의 제로트러스트 아키텍처 도입 과정에서 필요한 모든 업무를 수행했다고 보기는 +어려우며, 최소한의 기준으로 보는 것이 바람직하다. 최고경영자가 정보보호에 관한 전문성을 + +갖추지는 못하더라도, 제로트러스트 아키텍처 도입의 필요성을 이해하려는 노력과 함께 CISO +및 실무조직의 활동을 적극 지원·승인하는 것이 바람직하다. 특히, 제로트러스트 아키텍처 도입 +과정에서 타 임원·부서와의 갈등이 다양하게 발생할 수 있기 때문에, 경영진 간 협의체에 참여하여 +적절한 의사 결정을 내릴 수 있어야 한다. +- 최고경영자의 정보보호 관련 업무 +- 최고경영자는 정보보호 업무를 총괄하는 정보보호 최고책임자와 개인정보보호 업무를 총괄하는 +개인정보보호책임자를 예산·인력 등 자원을 할당할 수 있는 임원급으로 지정하여야 한다. +- 최고경영자는 정보보호와 개인정보보호의 효과적 구현을 위한 실무조직, 조직 전반의 정보보호 +와 개인정보보호 관련 주요 사항을 검토 및 의결할 수 있는 위원회, 전사적 보호활동을 위한 부서 +별 정보보호와 개인정보보호 담당자로 구성된 협의체를 구성하여 운영하여야 한다. +정보보호조치에 관한 지침에서는 정보보호조치의 구체적인 내용을 포함하고 있으며, 관리적 +보호조치로서 정보보호 조직의 구성과 운영을 다음과 같이 시행할 것을 권고하고 있다. + +**[표 4-3]** 정보보호 조직의 구성과 운영 + +정보보호 조직의 구성·운영 +세부조치사항 +정보보호 조직의 구성 +‣ 정보보호 최고책임자, 정보보호관리자, 정보보호담당자로 구성된 정보보호조직을 운영 +정보보호 최고책임자의 지정 +‣ 기업의 정보보호를 책임지는 이사 이상의 상근임원으로 지정 +정보보호조직 구성원의 역할 +‣ 정보보호 최고책임자는 정보보호 업무와 조직을 총괄 지휘 +‣ 정보보호관리자는 정보보호 업무의 실무를 총괄하고 관리 +‣ 정보보호담당자는 정보보호 업무의 분야별 실무를 담당 + +### 2. 제로트러스트 도입 과정에서 각 구성원의 역할 + +2019년 금융보안원에서 발간한 ‘금융보안 거버넌스 가이드’에서는 금융권 업무 특성을 반영한 +효과적인 금융보안 거버넌스의 도입을 권고하고, 금융 기업의 보안 위험을 완화하기 위한 거버넌스 +전략 및 각 구성원들의 역할, 권한, 책임을 구체적으로 정의하였다. +제로트러스트 아키텍처의 도입 과정도 각 구성원들에 대한 역할이 명확하지 않으면, 도입 현장 + +| 정보보호 조직의 구성·운영 | 세부조치사항 | +| --- | --- | +| 정보보호 조직의 구성 | ‣ 정보보호 최고책임자, 정보보호관리자, 정보보호담당자로 구성된 정보보호조직을 운영 | +| 정보보호 최고책임자의 지정 | ‣ 기업의 정보보호를 책임지는 이사 이상의 상근임원으로 지정 | +| 정보보호조직 구성원의 역할 | ‣ 정보보호 최고책임자는 정보보호 업무와 조직을 총괄 지휘 ‣ 정보보호관리자는 정보보호 업무의 실무를 총괄하고 관리 ‣ 정보보호담당자는 정보보호 업무의 분야별 실무를 담당 | + + +122 | 제로트러스트 가이드라인 2.0 +에서 구성원간 책임을 서로 미루는 등 여러 문제점이 발생할 수 있다. 따라서, 관련 법령·제도에서 +정의한 각 구성원의 업무, ‘금융보안 거버넌스 가이드’ 등을 참고하여 제로트러스트 도입 과정에서 +각 구성원의 역할을 다음과 같이 정의할 수 있으며, 각 기업들은 아래 정의된 역할을 구체화하여 +제로트러스트 아키텍처를 도입하는 것이 바람직하다. +가. 제로트러스트 도입 과정에서 최고경영자(CEO)의 역할 +제로트러스트 도입을 추진하는 기업에서 최고경영자의 역할은 다음과 같다. +- 최고경영자 스스로 제로트러스트 아키텍처의 필요성을 이해하고, CISO 및 실무조직의 +제로트러스트 전문성 확보 등 계획 수립 단계부터 지원 +- 제로트러스트 도입 계획 수립 및 검토를 위한 CISO 중심의 전문 인력 확보 및 전담 조직 구성 +계획 승인 +- 제로트러스트 도입 과정에서 필수적인 논의가 가능하도록 최고경영자와 CISO 등 경영진 간 +협의체 마련 +- CISO가 수립한 정보보호 비전 및 제로트러스트 도입 목표, 중장기 전략 및 로드맵에 대한 +승인 +- 제로트러스트 아키텍처 도입 세부 계획에 필요한 예산 및 도입 프로젝트 최종 승인 +나. 정보보호 최고책임자(CISO)의 역할 +제로트러스트 도입을 추진하는 기업에서 정보보호 최고책임자의 역할은 다음과 같다. +- 제로트러스트 아키텍처 도입 전략에 대한 최고책임자 역할 수행 +- 제로트러스트 도입 계획 수립 및 검토를 위한 제로트러스트 전문 인력 확보 및 전담 조직 구성 +- 협의체 운영 등을 통하여 제로트러스트 비전 및 도입 목표, 관련 정보 공유를 통하여, +제로트러스트 아키텍처 도입에 대한 조직 차원 의사 결정 지원 +- 기업망의 특성과 비즈니스를 고려한 정보보호 비전 및 제로트러스트 도입 목표, 전략 및 +로드맵 수립 +- 제로트러스트 아키텍처와 관련한 각종 법률, 규정 및 정책, 기술, 솔루션 등에 대한 최신 동향 +파악 + +- 실무조직이 수립한 제로트러스트 아키텍처 도입을 위한 단계별 목표 및 세부 계획에 대해, +제로트러스트 성숙도 수준, 예산, 위험 완화 방안의 적절성 등 종합적인 검토 및 승인, 필요시 +경영진에 승인 요청 +- 도입 프로젝트 수행 시 프로젝트 관리 및 감독, 조직 내 협력 및 조정을 통하여, 각 단계에서 +발생하는 주요 의사결정 주도 및 조직 내 갈등 해소, 예산 및 일정 관리 등에 대한 책임 +- 제로트러스트 아키텍처 운영 과정에서 임직원에 대한 보안 교육 및 인식 제고 활동 +- 제로트러스트 아키텍처 도입의 전반적인 활동에 대해 외부 전문가를 통한 주기적 평가 +다. 정보보호관리자 및 담당자 등 실무조직의 역할 +제로트러스트 도입을 추진하는 기업에서 실무조직의 역할은 다음과 같다. +- CISO의 제로트러스트 도입 활동 업무에 대한 전반적인 지원 및 정책 수행 +- 조직 내 접근 주체, 기기, 리소스에 대한 식별 및 제로트러스트 성숙도 수준 평가 +- 제로트러스트 아키텍처 도입을 위한 단계별 목표 및 세부 계획 수립, 요구사항 정의 및 +아키텍처 구체화, 도입하고자 하는 기술·솔루션 검토 및 선별 +- 도입 과정의 전반적인 실무 수행 및 제로트러스트 기술·솔루션 도입·구축 과정 검증, 공급 +기업과 소통 +- 제로트러스트 아키텍처 운영을 위한 전사적 정책 수립, 제로트러스트 아키텍처 운영 및 유지 +관리, 임직원들로부터 피드백 확보 및 개선 등 +- 신기술 동향 파악 및 기타 정보보호 전반에 걸친 실무 수행, 필요 시 CISO 보고 + +### 3. 제로트러스트 아키텍처 도입 목표 설정 + +제로트러스트 아키텍처를 도입하는 과정에서 기업망 구조 및 현재 보안 아키텍처에 대한 분석이 +완료되었으면, 다음으로 진행해야 할 일은 제로트러스트 아키텍처 도입을 위한 비전 혹은 전략적 +목표를 제시하는 것이다. 이 과정에서 가장 중요한 것은 기업의 비즈니스 목표와 일치하는 형태로 +기업 보안의 미래 방향성을 설정해야 한다는 것이다. +비전 혹은 전략적 목표는 제로트러스트 도입을 통해 기업이 어떤 사이버 위협에 대비할 수 +있으며, 비즈니스에 대한 연속성을 어떻게 강화하고 위험을 완화할 수 있는지 설명하고, 기업망 + +124 | 제로트러스트 가이드라인 2.0 +보안에 대한 방향성을 설정할 수 있어야 한다. 비전과 전략적 목표는 차후 구체적인 목표 설정, 참조 +아키텍처 및 로드맵 수립을 위한 기초를 제공할 뿐만 아니라, 일반 직원들의 제로트러스트 인식을 +제고하고 새로운 보안 환경에 적응하는 것에 대한 동기 부여가 가능할 것이다. +예를 들어, 다음과 같은 비전 및 전략적 목표 수립이 가능할 것이다. +- 병원: 의료 네트워크와 환자 데이터에 대한 철저한 보호를 통해 제로트러스트가 지켜주는 병원 +- 자동차 생산 기업: 스마트 공장, 글로벌 공급망, 지능형 차량을 지속적으로 검증·보호하여, +안전하고 효율적인 자동차 생산 환경 구축 +- 금융 기업: 지속 인증과 철저한 접근통제를 통해 고객 데이터를 보호하고, 생성형 AI 및 +클라우드를 활용하여 신뢰할 수 있는 금융 혁신 서비스를 제공하는 제로트러스트 아키텍처 +구축 +- 발전사: 발전소 운영 연속성 보장 및 사이버 보안 강화를 통하여 신뢰할 수 있는 전력 공급을 +책임지는 제로트러스트 아키텍처 구현 +- SW개발 기업: 코드, 데이터, 그리고 개발 환경의 지속적인 신뢰 검증을 통해 사이버 위협을 +방지하고, 안전하고 혁신적인 소프트웨어 개발 문화 조성 +기업망의 현재 보안 아키텍처와 보안 수준 분석이 어느 정도 진행되고 제로트러스트 아키텍처 +도입의 필요성과 함께 비전이 제시되었다면, 비전을 구체화함으로써 제로트러스트 아키텍처를 어느 +수준으로 어떻게 달성할지에 대한 명확한 목표를 설정할 필요가 있다. +가. 비즈니스 목표와 연계 +기업이 제로트러스트 아키텍처를 도입하는 경우, 자신의 비즈니스 목표를 달성하는 과정에서 +사이버 위협을 통해 발생할 수 있는 위험을 완화·최소화하는 방법을 제공해야 한다. 예컨대, +비즈니스 목표를 달성하는 데 있어 외부 클라우드 기반 SaaS의 도입이 필수적일 수도 있고, 혹은 +IoT 기기를 통한 센서 데이터 수집을 기반으로 다양한 서비스를 만들어낼 수도 있을 것이다. +신기술을 활용하여 서비스를 제공할 경우, 그 신기술이 보안에 미치는 영향을 고려하여 기업망의 +특정 핵심 요소 혹은 그 핵심 요소의 특정 보안 기능(예, 마이크로 세그멘테이션)의 성숙도 수준을 +높이는 것이 최우선시 되어야 할 수도 있다. + +또한 기업이 처할 수 있는 위험을 평가하는 것도 결국 비즈니스 목표와 연계가 된다. 기업이 +비즈니스의 효율성을 위하여 온프레미스에서 유지하던 핵심 디지털 자산을 클라우드로 이전한다면, +클라우드 관련 보안 위협들은 곧 그 기업이 직면한 주요 사이버 위험으로 식별될 수 있다. 이 경우, +클라우드 상의 데이터 혹은 클라우드 서비스에 대한 보안 혹은 제로트러스트 성숙도 수준을 높은 +수준으로 끌어올려야 할 것이다. +기업망 보안, 특히 제로트러스트 아키텍처를 도입하는 데 있어서 이렇게 비즈니스 목표와 +연계한다면 전략적 목표가 분명해질 수 있다. 전략적 목표를 바탕으로 장·단기 목표를 설정한다면, +보다 구체적으로 제로트러스트 아키텍처 도입 계획을 수립하는 데 큰 도움이 될 것이다. +나. 목표 설정 원칙 +기업망 보안을 위한 전략적 목표를 정의하는 경우, 목표에 대해 효과적으로 달성할 수 있도록 +돕는 방법론과 원칙이 필요하다. 즉, 설정된 전략적 목표를 달성했는지를 평가할 수 있는 성과 +지표가 있어야 하며, 달성한 성과를 경영진에 보고하고 기업 내부의 모든 구성원과 공유할 수 있는 +체계가 있어야 한다. 경영진 및 기업 내부의 구성원들로부터 받은 평가와 피드백을 통해 전략적 +목표에 대한 변경이 필요한지를 검토할 수 있으며, 사이버 위협 환경이 지속적으로 변화하고 +고도화되는 과정에서 마찬가지로 전략적 목표에 대한 지속적인 개선이 이루어질 수 있어야 한다. +기업은 각자의 목표 설정 원칙을 통해 성과 지표를 확정하는 것이 일반적이며, 본 가이드라인 +에서는 많은 조직들이 활용하는 SMART 목표(혹은 SMART 표준)를 이용할 수 있음을 제시한다. +이 방법은 절대적인 것은 아니지만, 각 기업은 이와 유사한 방식으로 제로트러스트의 전략적 목표를 +수립할 수 있다. +- Specific (구체적): 목표는 정확하고 구체적이어야 함. 예를 들어, “기업망 내부 접속은 반드시 +MFA와 같은 강력한 사용자 인증을 통해 확인된 후 허용되어야 한다.”와 같은 목표를 수립할 +수 있다. +- Measurable (측정 가능): 목표 달성 여부를 확인할 수 있도록 정량적·정성적 기준이 포함 +되어야 함. 예를 들어, “향후 1년 이내 모든 사용자의 네트워크 접근 시 FIDO 활용 비율을 +100% 달성한다”와 같은 목표가 가능하다. +- Achievable (달성 가능): 목표는 현실적이고 달성 가능해야 함. 예를 들어, “올해 보안 예산을 + +126 | 제로트러스트 가이드라인 2.0 +활용하여 제로트러스트 전문 인력을 1명 확충하고, 전사적 ID 관리 시스템 구축 계획 수립을 +전담시킨다.”와 같은 목표가 가능할 것이다. +- Relevant (관련성): 설정된 목표는 기업의 비전과 전략과 일치해야 함. “기업 내 고객 및 재고 +관리를 위한 클라우드 서비스의 도입 과정에서 위험을 최소화하기 위하여, 제로트러스트 +아키텍처를 통한 클라우드 보안 위협을 완화한다.”와 같은 목표 수립이 가능하다. +- Time-bound (시간 제한): 목표에는 달성 기한이 있어야 함. “제로트러스트 아키텍처에 대한 +기본 설계 및 파일럿 프로젝트를 6개월 이내에 완료한다.”와 같은 목표를 수립할 수 있다. +다. 기업 보안 문화 및 인식 강화 목표 수립 +제로트러스트 아키텍처 목표 설정 과정에서는 기업 보안 문화 정착과 인식 강화를 위한 목표를 +포함시키는 것이 바람직하다. 기업 보안 문화 및 인식 강화에는, 조직 내 모든 직원이 보안의 +중요성을 인식하고, 제로트러스트 원칙을 이해하며 실천할 수 있도록 만드는 방안이 포함되어야 +한다. +이는 기업들이 기존에 시행해 온 다양한 보안 인식 강화 교육 및 보안 문화 정착을 위한 캠페인과 +비슷하다고 볼 수 있다. 기존 교육 및 캠페인에는 다음과 같은 사례가 있으며 제로트러스트 아키텍처를 +도입하는 과정에서도 기본적인 보안 문화 정착은 필수적이므로, 기업은 다음 사례와 같은 노력을 +지속적으로 유지·강화하는 것이 중요하다. +- 사이버사고 사례 중심의 보안 인식 교육: 피싱, 스미싱 등 사이버 사기 및 해킹 공격은, 그 공격 +유형을 잘 모르는 경우 피해를 볼 확률이 상대적으로 더 높기 때문에, 조직이 처한 상황과 +유사한 위험에 대해서는 사이버사고 사례 중심의 집합 교육 및 정보 공유를 통해 보안 의식을 +강화 +- 조직 구성원의 자율보안 인식 개선: 매월 보안의 날을 정함으로써, 내PC지키미(혹은 +내PC돌보미) 실행을 통한 보안 점검, 정기적 보안 업데이트 수행 등을 통하여 직원들이 +자율적으로 보안 인식을 개선할 수 있는 방법 제공 +- 보안 우수사례에 대한 인센티브: 보안 인식을 높이기 위한 인센티브 제도를 도입하여 직원들이 +자발적으로 보안 문화 확산에 참여하도록 유도하기 위함으로, 보안 정책을 적극적으로 +따르거나 새로운 보안 취약점 발견, 우수 표어 창작 등 보안에 직간접 기여를 한 직원에게 + +보상을 제공하는 프로그램을 도입하여 동기를 부여하고 정기적으로 우수 직원이나 팀을 +선정해 포상하는 방식으로 보안 인식 제고 +제로트러스트 철학이 반영된 기업 보안 문화 및 인식 강화를 위해서 상기 사례들을 적용함과 +동시에, 제로트러스트의 특성을 고려하여 다음과 같은 목표를 추가로 수립할 수 있다. +- 제로트러스트 문화 확립: 기업 전반에 걸쳐 제로트러스트 보안 문화를 확립하여, 모든 직원이 +보안의 역할과 중요성에 관한 인식을 갖도록 교육하는 것이 목표로, 보안은 IT 부서뿐만 +아니라 모든 직원의 책임이라는 인식을 심어주고, 제로트러스트 원칙인 항상 검증(Never +Trust, Always Verify), 최소 권한 원칙을 실천할 수 있는 교육 프로그램 개발이 필요함 +- 최소 권한 원칙에 대한 인식 강화: 모든 직원이 최소 권한 원칙을 준수하도록 유도하고, +불필요한 권한을 최소화할 수 있는 인식을 강화하는 것이 목표로, 직원들이 필수적인 업무에만 +접근할 수 있도록 권한이 제한된다는 점을 이해하게 하여, 최소 권한 원칙을 실천하는 문화를 +확립. 또한, 이를 위한 권한 요청 및 관리 절차를 간소화하고 보안 정책을 투명하게 운영 +- 상시 보안 모니터링 및 보고 문화 확립: 직원들이 의심스러운 활동이나 이상 징후를 발견하면 +즉시 보안 팀에 보고하는 문화를 정착시키는 것이 목표로, 실시간 모니터링을 통해 이상 +징후를 발견할 수 있는 보안 인식을 강화하고, 모든 직원이 자발적으로 보안 위협을 탐지하고 +보고할 수 있도록 간단한 보고 프로세스 및 신속한 대응 체계를 마련 + +128 | 제로트러스트 가이드라인 2.0 + +## 제3절 + +제로트러스트 아키텍처 구성 방안 +제로트러스트 아키텍처의 본격적인 도입 계획 수립에 앞서, 준비 단계에서 필요한 업무들이 +있다. 이는 가이드라인 1.0에서 제시한 제로트러스트 도입 단계(준비 → 계획 → 구현 → 운영 → +피드백 및 개선) 중 가장 첫 단계인 준비 단계에 진입하기 전부터 시작하여 준비 단계에 이르기까지 +진행해야 하는 업무를 구체화한 것이다. + +### 1. 현재 기업망 보호 대상 및 보안 아키텍처 분석 + + +### 2. 기업망을 위한 제로트러스트 아키텍처 정의 및 구현 로드맵 수립 + +기업망을 위한 제로트러스트 아키텍처를 구체적으로 정의하는 과정에서 선택해야 하는 접근 +방법을 고려해야 한다. 가이드라인 1.0에서는 제로트러스트 아키텍처 보안 모델을 구성하고 접근 +주체의 리소스 접근 여부를 최종적으로 결정하기 위한 접근법 3가지를 언급한 바 있는데, 인증 체계 +강화, 마이크로 세그멘테이션, 네트워크 인프라 및 소프트웨어 정의 경계(SDP) 등이 이에 해당한다. +각 기업들은 각 접근법의 특징과 현재 기업망 보안 아키텍처 등을 고려하여 기업에 맞는 접근법을 +선택할 수 있다. + +### 1. 현재 기업망 보호 대상 및 보안 아키텍처 분석 + +가. 현재 기업망 보호 대상 파악 +제로트러스트 아키텍처 도입 및 구축을 위해서는 현재 기업망에서 보호 대상을 파악하는 것이 +초기 단계에서 이루어져야 할 가장 중요한 업무이다. 가장 중요한 핵심 보호 대상으로는 리소스에 +해당하는 시스템, 애플리케이션, 데이터들이 있으며, 접근 주체에 해당하는 사용자 및 기기 역시 또 +다른 보호 대상이 될 수 있다. 제로트러스트 아키텍처 관점에서 아래 [그림 4-2]와 같이 접근 주체와 +보호 대상 리소스를 구별할 수 있으며, 보호 대상은 기업 내 중요한 자산으로서 명확하게 식별할 수 + +있어야 그에 맞는 적절한 보호 전략을 설계할 수 있다. + +**[그림 4-2]** 제로트러스트 아키텍처 접근 주체와 보호 대상 리소스 + +리소스에 접근하는 사용자 유형에 따라 +특권사용자와 일반사용자 분류 등 +사용자 유형에 따라 리소스 접근에 +필요한 인증 유형 및 권한 정의 등 +반드시 등록되고 인가된 기기만이 +리소스에 접근 가능 +기기는 위험 수준을 판단하는 과정을 +통해 신뢰도 기반 접근제어 +다양한 입력 요소를 검토하여 리소스에 +대한 접근 허용 여부 결정 +접근 주체와 리소스 간 +통신 경로 설정 및 종료 관리 +주체에 할당된 정책 실행, 연결 활성화, +모니터링, 종료 +접근 주체의 시스템, 애플리케이션, +데이터 접근 시 접근제어 +APP +접근 주체(Subject) +PDP/PEP +리소스(Resource) +사용자 유형/권한 정의 +기기 등록 및 관리 +정책결정지점 (PDP) +정책시행지점 (PEP) +시스템, 애플리케이션, 데이터 +기업망 핵심 보호 대상 리소스는 +시스템, 애플리케이션, 데이터 +기업망에서 가장 중요한 핵심 보호 대상은 접근 대상에 해당하는 리소스로 이들은 기업망 +내부에서 각자 가치를 가진 디지털 자산으로 볼 수 있으며, 도입을 준비하는 과정에서 이들에 대해 +식별하여 목록화하는 것은 반드시 필요한 업무이다. 다음 리소스에 대해서는 반드시 누락되지 +않고 목록화를 해야 하며, 목록화 과정에서 어떤 접근 주체가 어떤 권한을 갖는지에 대한 정보를 +포함하여야 한다. +- 시스템: 중요 애플리케이션을 구동하거나 데이터를 저장·관리하고 있으며, 온프레미스· +클라우드(IaaS)에 구축 운용 중인 모든 서버 (DBMS, 개발시스템, 웹서버, 메일시스템 등) +- 애플리케이션: 기업 내부에서 사용하는 온프레미스·클라우드(PaaS) 애플리케이션 및 +워크로드 +- 데이터: 온프레미스·클라우드(SaaS)에 위치한 중요한 비즈니스 데이터(고객 정보, 인사·재무 +데이터, 개발 중인 소프트웨어, 지적 재산, 기타 비즈니스에 필수적인 모든 종류의 데이터) +기업망 내부를 구성하는 접근 주체 역시 보호 대상으로 볼 수 있으며, 여기에는 내부 직원뿐만 +아니라 외부 협력 기업, 계약 기업, 자동화된 서비스 계정 등 비인간개체 등을 모두 포함하여야 한다. + +130 | 제로트러스트 가이드라인 2.0 +- 사용자: 내부 직원, 외부 협력 기업 및 계약 기업 직원, 자동화된 서비스 계정 등 비인간개체 +등을 포함 +- 접속 기기: 사용자가 리소스에 접근하기 위해 활용하는 기기 및 엔드포인트 등 하드웨어 장치 +리소스에 접근하는 사용자들은 해당 사용자들의 업무, 접근해야 할 리소스 등에 따라 특권 사용자 +(Privileged User)와 일반 사용자로 구분될 수 있다. 예를 들면 어떤 기업 내에서 서버 시스템의 +관리자들은 해당 시스템에 항상 접근하는 중요 관리자이기에 특권 관리자로 분류될 수 있다. 또한, +어떤 기업 내 중요 소프트웨어 개발자들도 중요 자산인 소스 코드에 접근하고 또 이를 개발하는 +개발자이기에 특권 사용자로 구분할 수 있다. 반면, 일반적으로 기업 내 대부분의 사용자는 업무를 +위한 일반적인 애플리케이션에 접속하거나, 일반적인 데이터를 다루는 일반 사용자로 분류될 수 +있다. +접근 주체 및 리소스에 대한 식별과 목록화가 완료되면, 접근제어에 대한 구체적인 시나리오 +혹은 유스케이스를 구성할 수 있다. 이는 특정 사용자가 리소스에 접근할 때에 대한 신뢰도 평가 및 +접근권한 부여 방안을 제시할 수 있다. +예를 들어, 사업부서 혹은 경영부서 임직원들은 주로 기업의 업무 애플리케이션에 접속하여 +본인의 부서 업무를 진행하게 된다. 이때 일반 사용자들이 자신들의 업무 수행을 위해 업무 +애플리케이션에 접속 시 해당 사용자에 대한 신뢰도 평가가 우선시 되어야 할 수 있다. 이 경우, PDP는 +해당 사용자 계정, 인증 정보 및 기타 신뢰도 판단용 데이터를 확인함으로써 각 애플리케이션에 +접속 가능한 신뢰도를 확인하고, 충분한 신뢰도가 확인되는 경우 애플리케이션에 대한 접근을 +제어하는 PEP를 통해 해당 애플리케이션에 접근하는 시나리오를 생각해 볼 수 있다. 또한, +여기에서 해당 사용자가 평상시 이용하지 않는 기기를 이용하여 접속하는 경우, 추가 인증을 +요구하거나 관리자 확인을 거쳐야만 충분한 신뢰도를 갖는 것으로 판단할 수도 있을 것이다. +또한, 이를 통하여 제로트러스트 아키텍처의 도입을 위해 필요한 보안 기능 및 구조, 기업망 +세분화 전략에 대한 상위 수준의 접근이 가능할 것이다. 예를 들어, 기업에 따라 통합 ICAM 및 +PAM에 대한 요구가 발생할 것이며, 시스템, 애플리케이션, 데이터에 대한 각각의 접근제어 전략을 +실현시켜주는 PDP·PEP 구조를 구체화할 수 있을 것이다. 또한, 어떤 리소스들끼리 그룹화하여 +네트워크를 세분화하고 접근 경로를 제한하는 것이 적절한지에 대한 전략을 구상할 수 있고, 이를 +통하여 세분화된 구역에서의 개별적인 보안 정책, 각 구역 간 트래픽 허용 정책 등을 수립하는 것이 + +가능하다. +나. 현재 보안 아키텍처 분석 +앞에서는 기업망에서의 보호 대상인 접근 주체와 리소스를 식별하고 이를 기반으로 제로트러스트 +관점의 접근제어 시나리오 혹은 유스케이스를 수립할 수 있음을 언급하였다. 또한, 이를 바탕으로 +제로트러스트 아키텍처 도입을 위해 필요한 보안 기능 및 구조, 기업망 세분화 전략을 상위 +수준에서 수립할 수 있음을 제시하였다. +기업망의 현재 보안 아키텍처 및 보안 수준을 분석하는 것은, 현재 상황(As-Is)을 바탕으로 +필요한 보안 기능을 구체적으로 도출하는 과정을 통하여 제로트러스트 목표 모델(To-Be)을 +설계하는 데 있어 필수적인 과정이다. 이러한 현재 상황 분석과 목표 모델 수립은 3장에서 정의한 +제로트러스트 성숙도 모델 2.0에 기반하여 수행할 수 있다. +제로트러스트 도입을 준비하는 담당자는 먼저 현재 기업망의 보안 아키텍처를 분석해야 한다. +기업망 내부에 있는 다양한 시스템과 애플리케이션, 데이터에 대한 식별이 되어 있는 상태이며, +이들에 대한 공격 및 비정상 접근 등을 방어할 수 있는 보안 아키텍처는 완전히 파악된 상태가 아닐 +수 있다. 일부 기업들은 필요한 애플리케이션을 도입하는 과정에서 IT 담당 직원과 보안 담당자 간 +충분한 논의를 거치지 못하여 기존 보안 체계와 잘 연동되지 않게 되거나, 해당 애플리케이션에 +특화된 보안 기술을 같이 도입함으로써 일관된 보안 정책이 적용하지 못하는 사례가 있다. +따라서 현재의 보안 아키텍처를 명확하게 분석하여야 하며, 이는 IT 담당 직원, 외부 용역 직원 및 +일반 직원들의 협조가 필요할 수 있다. 이들과 인터뷰, 기업망 내부 인프라 시스템 도입 관련 문서, +실사 등을 통하여 기업망 전반에 걸쳐 구현되어 있는 보안 아키텍처를 정확히 파악하여야 한다. +이를 위해 다음과 같은 과정을 진행할 수 있다. +- 네트워크 인프라 확인: 기업의 네트워크 구조, 주요 네트워크 장치(방화벽, 라우터, 스위치 등), +서브넷 구조, 클라우드 등 외부 네트워크 기반 서비스 이용 현황 파악 +- 보안 솔루션 분석: 방화벽, 침입 탐지 시스템, 인증 시스템 및 서비스 인가 구조, 단말 보호 +솔루션 등 현재 운영 중인 모든 보안 도구 및 솔루션 파악 +- 보안 정책 및 규칙 분석: 네트워크 내 트래픽 제어를 위한 방화벽 규칙, 접근제어 목록(ACL), + +132 | 제로트러스트 가이드라인 2.0 +NAC, VPN 정책 등을 검토하여 현재 어떤 보안 정책이 적용되고 있는지 파악 +- 달성해야 할 보안 규정·기준 파악: 기업이 달성해야 하는 보안 규정이나 기준이 존재하는 경우 +위반할 수 없으므로 관련 규정과 기준을 명확히 분석하여 적용해야 하는 기술적·관리적 조치 +및 현재 달성 여부 파악 +기업들은 주기적인 취약점 점검 및 보안 감사 등을 통하여 기업망 전반에 걸친 보안 아키텍처를 +파악하고 있으나, 이 과정에서의 목적은 구체적인 파악을 통하여 일관된 보안 정책이 적용되고 +있는지, 기업망 내부에 대한 가시성을 확보하고 보안 상태를 중앙집중적으로 분석할 수 있는 +구조인지를 알아내는 과정으로 볼 수 있다. 또한 일반 직원들과 인터뷰 과정에서 보안 아키텍처로 +인하여 업무에 불편한 점에 대한 개선 방안 등을 파악할 수도 있을 것이다. +파악된 현재의 보안 정책과 절차를 문서화하고 이러한 내용이 제로트러스트 아키텍처 기본 +원리와 부합하는지, 또한 성숙도 및 보안 수준은 어느 정도인지를 평가할 필요가 있다. 이 과정은 +제로트러스트 아키텍처 도입 목표 수립을 위해서 반드시 필요하며, 제로트러스트 성숙도 모델에서 +제시하고 있는 각 기업망 핵심 요소별 기능 및 세부역량에 대한 성숙도 수준과 비교함으로써 현재의 +보안 수준을 진단할 수 있다. 이 과정을 거칠 경우 현재 기업망의 제로트러스트 수준이 어느 위치에 +있는지 한 눈에 파악할 수 있으며, 이후 목표 제로트러스트 성숙도 및 보안 기능 달성을 위하여 +도입해야 할 제로트러스트 보안 기술·솔루션에 대한 검토 후 단계별 목표 달성 전략 및 계획을 +수립하는 데 도움이 될 것이다. + +### 2. 기업망을 위한 제로트러스트 아키텍처 정의 및 구현 로드맵 수립 + +가. 제로트러스트 도입 로드맵 수립을 위한 미 국방부 사례 +제로트러스트 아키텍처 기반으로 기업 혹은 기관이 제로트러스트 도입 및 구축을 진행하고 있는 +가장 중요한 참고 사례 중 하나는 미 국방부의 사례이다. 이미 제로트러스트를 중요한 사이버 보안 +전략의 하나로 고려하고 있던 미 국방부는 다른 미 연방 기관들보다 빠르게 제로트러스트 아키텍처 +구축 계획을 수립하기 시작했다. +미 국방부는 미 연방정부 차원의 제로트러스트 아키텍처 도입을 선언한 ‘국가 사이버보안 개선’에 +관한 바이든 대통령 행정명령보다 빠른 2021년 2월 제로트러스트 참조 아키텍처 1.0(Zero Trust + +Reference Architecture V1.0)을 발표한 바 있으며, 이후 첫 버전을 더욱 상세하게 수정하고 보완하여 +2022년 7월 제로트러스트 참조 아키텍처 2.0(이하, ZTRA 2.0)을 발표하였다. 또한, 2022년 10월 +ZTRA 2.0을 기반으로 미 국방부는 제로트러스트 전략(Zero Trust Strategy) 및 로드맵을 발표하였다. +해당 전략 문서에 따르면 미 국방부는 2027년 말까지 목표(Target) 수준의 제로트러스트 아키텍처 +구축을 진행 중에 있다. ZTRA 2.0의 목차 및 내용은 다음과 같이 이루어져 있다. + +**[표 4-4]** 미 국방부 ZTRA 목차 및 주요 내용 + +목차 +주요 내용 +1. 목적과 전략적 +목표 +‣ 제로트러스트 도입의 배경과 목적 설명 +‣ 제로트러스트가 적용될 미 국방부의 대상 시스템과 환경에 대한 정의 +‣ 제로트러스트 구현을 통해 달성한 목표에 대한 정의 +2. 핵심 요소와 +원칙 +‣ 제로트러스트 구현 원칙을 정의 +‣ 제로트러스트 구현 핵심이 되는 제로트러스트 성숙도 모델의 핵심 요소(Pillar) 정의 +3. 역량 +‣ 제로트러스트 핵심 요소 별로 필요한 상세 제로트러스트 보안 역량(Capability) 정의 +‣ 미 국방부 내 IT 시스템과 제로트러스트 핵심 요소, 그리고 제로트러스트 보안 기능을 상호 연결하여 +최종 목표 구조 정의 + +### 4. 유스케이스 + +‣ 다양한 보안 기능 측면에서 제로트러스트 아키텍처를 적용하기 전과 후의 모델 비교를 통하여 구현 +사례 예시 +‣ 상세 사례를 통해 제로트러스트 보안 역량이 어떻게 구현되어야 할지, 어떻게 동작되어야 할지 사례를 +보여줌 + +### 5. 기술적 위치 + +‣ 제로트러스트 아키텍처를 구현함에 준용해야 할 IT 보안 기술과 표준, 특히 제로트러스트 관련 중요 +표준 또는 가이드라인에 대해서 정의 +‣ 더불어 미 국방부 내의 IT 관련 정책 또는 현존하는 시스템들과의 연계 구조, 기 정의된 제로트러스트 +기반 기술들의 활용에 대해 정의 + +### 6. 보안 평가 + +‣ IT 보안 측면의 기존 거버넌스 정책이 제로트러스트 아키텍처를 도입할 때 어떻게 검토되고 +연계되어야 하는지에 대한 정책 검토를 정의 +‣ 데이터 거버넌스 정책과 애플리케이션 개발 거버넌스 정책에 대하여 제로트러스트 보안 체계 도입 시 +검토되고 고려되어 제로트러스트 설계가 진행되어야 함을 설명 +7, 아키텍처 유형 +‣ 제로트러스트 아키텍처 유형의 예제를 정의하고 이에 필요한 제로트러스트 보안 역량과 매핑 +‣ ID 서비스에 대한 외부 서비스 연계를 정의하고 설명 +8. 아키텍처 전환 +계획 +‣ 제로트러스트 성숙도 모델을 제시하고 이에 맞는 형태로 제로트러스트 아키텍처 전환계획 추진 설명 +‣ 전환을 위한 IT 시스템의 영역 기준을 설명하고 이에 대한 항목들을 제시 +9. 부록 +‣ 시스템 및 서비스 구성 요소의 내용을 설명 +‣ 기술용어 및 참조 표준 정리 요약 +‣ 제로트러스트 보안 역량에 대한 상세한 정리 +10. 참고 +참고 문헌 + +| 목차 | 주요 내용 | +| --- | --- | +| 1. 목 적과 전략적 목표 | ‣ 제로트러스트 도입의 배경과 목적 설명 ‣ 제로트러스트가 적용될 미 국방부의 대상 시스템과 환경에 대한 정의 ‣ 제로트러스트 구현을 통해 달성한 목표에 대한 정의 | +| 2. 핵 심 요소와 원칙 | ‣ 제로트러스트 구현 원칙을 정의 ‣ 제로트러스트 구현 핵심이 되는 제로트러스트 성숙도 모델의 핵심 요소(Pillar) 정의 | +| 3. 역량 | ‣ 제로트러스트 핵심 요소 별로 필요한 상세 제로트러스트 보안 역량(Capability) 정의 ‣ 미 국방부 내 IT 시스템과 제로트러스트 핵심 요소, 그리고 제로트러스트 보안 기능을 상호 연결하여 최종 목표 구조 정의 | +| 4. 유스케이스 | ‣ 다양한 보안 기능 측면에서 제로트러스트 아키텍처를 적용하기 전과 후의 모델 비교를 통하여 구현 사례 예시 ‣ 상세 사례를 통해 제로트러스트 보안 역량이 어떻게 구현되어야 할지, 어떻게 동작되어야 할지 사례를 보여줌 | +| 5. 기술적 위치 | ‣ 제로트러스트 아키텍처를 구현함에 준용해야 할 IT 보안 기술과 표준, 특히 제로트러스트 관련 중요 표준 또는 가이드라인에 대해서 정의 ‣ 더불어 미 국방부 내의 IT 관련 정책 또는 현존하는 시스템들과의 연계 구조, 기 정의된 제로트러스트 기반 기술들의 활용에 대해 정의 | +| 6. 보안 평가 | ‣ IT 보안 측면의 기존 거버넌스 정책이 제로트러스트 아키텍처를 도입할 때 어떻게 검토되고 연계되어야 하는지에 대한 정책 검토를 정의 ‣ 데이터 거버넌스 정책과 애플리케이션 개발 거버넌스 정책에 대하여 제로트러스트 보안 체계 도입 시 검토되고 고려되어 제로트러스트 설계가 진행되어야 함을 설명 | +| 7, 아키텍처 유형 | ‣ 제로트러스트 아키텍처 유형의 예제를 정의하고 이에 필요한 제로트러스트 보안 역량과 매핑 ‣ ID 서비스에 대한 외부 서비스 연계를 정의하고 설명 | +| 8. 아 키텍처 전환 계획 | ‣ 제로트러스트 성숙도 모델을 제시하고 이에 맞는 형태로 제로트러스트 아키텍처 전환계획 추진 설명 ‣ 전환을 위한 IT 시스템의 영역 기준을 설명하고 이에 대한 항목들을 제시 | +| 9. 부록 | ‣ 시스템 및 서비스 구성 요소의 내용을 설명 ‣ 기술용어 및 참조 표준 정리 요약 ‣ 제로트러스트 보안 역량에 대한 상세한 정리 | +| 10. 참고 | 참고 문헌 | + + +134 | 제로트러스트 가이드라인 2.0 +나. 제로트러스트 아키텍처 구축 방안 +1) 제로트러스트 성숙도 모델 기준 정의 +제로트러스트 성숙도 모델은 어떤 IT 시스템의 보안체계를 제로트러스트 아키텍처 구조로 전환될 +때 참조할 수 있는 성숙도 모델로, 기업들이 달성해야 하는 개념적 보안 목표를 포함하고 있다고 +볼 수 있다. 성숙도 모델은 각 기업망의 핵심 요소에 대해 제로트러스트 관점에서 요구되는 보안 +기능에 대하여 제로트러스트 성숙도에 따르는 기능별 수준을 명시한다. +본 가이드라인은 기업망의 핵심 요소를 식별자·신원, 기기 및 엔드포인트, 네트워크, 시스템, +애플리케이션 및 워크로드, 데이터로 정의하고 있으며, 3.1절에서 4단계 성숙도 수준을 정의하였다. +기업이 자체 제로트러스트 아키텍처를 수립하는 경우 본 가이드라인의 성숙도 모델을 참고하도록 +권고한다. +이 단계에서 제로트러스트 성숙도 모델을 정의하는 것이 중요한 이유는 기업이 제로트러스트 +아키텍처 도입을 추진하는 경우 반드시 기준이 되는 제로트러스트 성숙도 모델 및 세부역량을 +정의하여야, 이후 목표 모델을 정의해 나갈 수 있기 때문이다. 이렇게 정의된 제로트러스트 성숙도 +모델은 현재 혹은 도입 이후 기업망의 제로트러스트 수준을 지속적으로 평가하고 진단하는 데도 +활용할 수 있게 된다. +2) 보안 세부역량 도출 및 단계별 구축 계획 수립 +제로트러스트 성숙도 모델을 기반으로 기업망에 제로트러스트 아키텍처를 도입하고자 하는 경우 +제로트러스트 성숙도 모델의 목표 단계를 달성하기 위한 구체적인 제로트러스트 아키텍처 보안 +세부역량을 도출함으로써 단계별 구축 계획을 수립할 수 있다. +본 가이드라인 3.2절에서는 미 국방부의 보안 역량 정의 등을 참고하여 제로트러스트 성숙도 +모델 2.0을 따르는 보안 세부역량 및 세부적인 성숙도 수준을 제시하였다. 현 단계에서 가장 +구체화되어야 하는 부분은 제로트러스트 보안 세부역량을 정의하고 설계하는 것으로, 이는 +기업망의 핵심 요소에 대한 성숙도 단계별 보안 항목을 구현하기 위한 보안 솔루션의 도입 계획으로 +이어지게 될 것이다. + +제로트러스트 아키텍처를 구축하고자 하는 기업은 본 가이드라인 3.2절의 제로트러스트 성숙도 +모델 2.0에 따르는 보안 세부역량을 참고하여 자사 기업망 보안 아키텍처 분석 결과를 통하여 +필요한 세부역량 및 목표 성숙도 수준을 정의한다. 즉 이 단계에서는 기업망에서 필요한 세부역량을 +비즈니스 목표와 연계하여 도출한 후 기업의 비전과 목표에 따라 단계별 달성 전략을 수립할 필요가 +있다. +3) 현재 보안 아키텍처 분석 결과와 제로트러스트 세부역량 연계 +제로트러스트 아키텍처 계획 수립에서 핵심이 되는 부분은 현재 기업망의 보안 수준을 진단하고 +이를 기반으로 목표 설계 모델을 도출하는 것이다. 아래 [그림 4-3]은 제로트러스트 아키텍처 +모델을 설계하는 전체 절차를 보여주고 있다. + +**[그림 4-3]** 제로트러스트 성숙도 모델 기반 제로트러스트 아키텍처 분석 및 설계 + + +- 주요 업무 시스템 선정 및 현황 분석 +- 네트워크 환경, 보안 솔루션 적용 배치 등 분석 +- 주요 업무 시스템 보안 요구사항 분석 및 제로트러스트 +보안 요소 대비 갭 도출 및 분석 +인터뷰, +자료 및 +체크리스트 +분석 +성숙도 수준 +진단 +성숙도 목표 +수준 설정 +환경 및 현황분석 +현재 보안 아키텍처 +분석 및 +제로트러스트 +역량 매핑 +갭(GAP) 분석 +목표 성숙도 수준 및 +달성 방법론 도출 +제로트러스트 +아키텍처 계획 수립 +제로트러스트 +보안체계 모델링 + +- 제로트러스트 보안 아키텍처 도출 +- 단계별 제로트러스트 보안 확대 방안 도출 +- 단계별 제로트러스트 보안 참조 모델 수립 +- 지속 가능한 제로트러스트 보안 체계 수립 +미래모델 수립 +성숙도 체계 +수립 및 ZT +역량 매핑 +성숙도 수준 +현황 분석 +핵심 요소별 +목표 달성 +개선 방안 +도출 +성숙도 +모델 기반 +제로트러스트 +아키텍처 목표 +모델 설계 +성숙도 목표 +수준에 따른 +제로트러스트 +보안체계 +수립 +제로트러스트 +아키텍처 +구축 추진 +제로트러스트 +로드맵 구성 +  +  + ­€ ‚ƒ„…†‡ + +136 | 제로트러스트 가이드라인 2.0 +첫 단계는 앞에서 분석한 기업망의 현재 보안 아키텍처와 제로트러스트 성숙도 모델에서 +정의하는 세부역량을 연계 및 연결하는 것이다. 각 기업은 기업망 보안 아키텍처 및 수준, 달성해야 +할 보안 규정·기준이 다를 수 있기 때문에 각 기업에 가장 적합한 제로트러스트 성숙도 체계를 +수립해야 하며, 이를 기반으로 보안 세부역량과 연계되는지를 확인해야 한다. 또한 이 단계에서는 +목표 세부역량 및 성숙도 수준도 구체화할 수 있다. +둘째 단계는 현재 시스템에 대한 목표 모델과의 갭 분석을 추진하는 것이다. 이를 위해서 각 +기업은 첫 단계에서 수립한 자체 제로트러스트 성숙도 수준 및 보안 세부역량 달성 계획을 기반으로 +해당 항목이 성숙도 모델 4단계 중 어디에 위치하고 있는지 분석해야 한다. 이를 통해 현재 +기업망의 보안 아키텍처가 어느 수준의 성숙도에 위치하는지, 목표 모델과는 어느 정도의 성숙도 +수준 차이가 있는지 판단할 수 있게 된다. +셋째 단계는 첫 단계에서 정리된 달성해야 할 목표 성숙도 수준 및 세부역량을 달성하기 위한 +구체적인 방법론을 도출하는 것이다. 둘째 단계에서의 갭 분석을 통해 목표를 달성하기 위해 도입이 +필요한 제로트러스트 보안 기술·솔루션을 검토하고 이를 통합 적용하는 방법론을 도출하고 검토해야 +한다. 이를 통해 한 번에 모든 것을 검토하고 구축하는 것은 일반적으로 사실상 불가능하므로, +단계별·연차별 달성 전략을 통해 도입 보안 기술·솔루션에 대한 단계별 구축 계획을 수립해야 한다. +넷째 및 다섯째 단계는 앞서 세 단계에서 정리된 내용들을 기반으로 기업 고유의 제로트러스트 +아키텍처에 대한 계획을 수립하고 제로트러스트 로드맵을 구성하여 해당 계획의 내용에 맞추어 +기업망의 보안 체계 수립 및 제로트러스트 아키텍처 구축을 추진하는 것이다. +4) 제로트러스트 아키텍처 목표 모델 설계 +현재 기업망의 보안 아키텍처 및 보안 수준을 분석할 때 앞서 설명한 대로 제로트러스트 성숙도 +모델과 세부역량 기준 정립이 제일 중요하며, 이후 해당 기준을 근거로 현재 시스템에 대한 현황 +분석이 중요한 절차가 된다. [그림 4-4]는 현황 분석과 이를 기반으로 목표(To-Be) 모델을 설계하는 +절차와 내용을 보여주고 있다. + + +**[그림 4-4]** 현재 보안 아키텍처 성숙도 수준 분석 후 목표 제로트러스트 아키텍처 모델 구성 절차 + +환경조사분석 +대상 +시스템및서비스 +진단배경목적방법공유 +담당자인터뷰현장또는원격 +유스케이스및인프라조사분석 +목표제로트러스트아키텍처구성 +제로트러스트 +계획수립 +제로트러스트성숙도진단분석 +체크리스트기반핵심요소별 +성숙도진단 +제로트러스트성숙도분석 +성숙도 +도출 +※ 분석결과예 +※ 결과도출예 +애플리케이션 +및 워크로드 +접근주체 +안전한개발환경및 +시스템 +서버접근제어 +마이크로 +세그멘테이션 +서버백신 +업무망내부망 +개발자 +기기엔드포인트 +백신 +패치관리 +보안 +위험도분석 +단말보안 +사용자관리 +디바이스및 +시스템관리 +다중인증 +신뢰도 +알고리즘 +리소스개발망 +개발자 +신원 +기업망의 현재 보안 아키텍처에 대한 환경 조사 및 분석을 진행하고 기업망에 대한 성숙도 진단 +및 분석 과정을 통하여 구체적인 보안 세부역량이 도출이 되었다면 제로트러스트 수준이 어느 +위치에 있는지 한눈에 파악될 수 있을 것이다. 도출된 세부역량 정보와 앞서 설정한 제로트러스트 +아키텍처 도입 목표를 바탕으로 갭 분석 및 도입해야 할 제로트러스트 보안 기술·솔루션에 대한 +검토 후 우선순위를 설정함으로써 단계별 목표 달성 전략 및 계획을 수립할 수 있다. + +| | | 제로트러스트성숙도진단분석 | +| --- | --- | --- | +| | | 체크리스트기반핵심요소별 성숙도진단 | +| 진단배경목적방법공유 | | 애플리케이션 및 워크로드 | + + +138 | 제로트러스트 가이드라인 2.0 +5) 제로트러스트 아키텍처 구현 로드맵 수립 +기업이 자사에 적용할 제로트러스트 성숙도 모델을 정의하고, 이를 기반으로 도입하고자 하는 +제로트러스트 아키텍처를 설계하여 보안 세부역량을 구체화했다면, 마지막으로는 이를 기반으로 +제로트러스트 아키텍처 구현 로드맵을 수립하고 제로트러스트 아키텍처에 포함해야 한다. +이를 위해서는 아키텍처 수립 과정에서 설계된 제로트러스트 성숙도 모델과 제로트러스트 +세부역량을 기반으로 현재 기업망 보안 체계 전반에 대해 현재 제로트러스트 성숙도 수준을 +분석하고, 달성 가능한 제로트러스트 수준을 결정한 후 이에 대한 해당 세부역량을 기준으로 +제로트러스트 아키텍처 기능 수립 방법 및 일정 계획 수립에 대한 로드맵을 설계해야 한다. +4.1절에서 최적화 수준의 제로트러스트 아키텍처 구현이 단기간에 달성하기 어려움을 언급하고 +최종 목표와 함께 몇 단계의 단기 목표와 실천 방안을 포함하는 장기적인 도입 계획 마련을 제안한 +바 있다. 따라서, 구현 로드맵 수립은 이 제안을 고려하여 기존 IT 시스템 보안 체계를 단계별, +기간별로 제로트러스트 아키텍처 보안 체계로 전환하는 과정에서 상세 전략과 전술로 이용되어야 +하며, 다음과 같은 과정을 거칠 수 있을 것이다. +① 기업에서 비즈니스 관점에서의 우선순위를 선정하여 가장 우선시되는 영역부터 도입하는 것을 +목표로, 클라우드 도입, 재택 근무, 개발망 오픈 등 해당 기업 환경에서 우선 고려할 수 있는 +유스케이스와 연관된 비즈니스 영역부터 도입 계획 수립 +② 해당 유스케이스 및 비즈니스 영역에 대하여 반드시 필수적인 보안 세부역량 및 목표 보안 +성숙도 수준을 정의 +③ 보안 세부역량에 대한 성숙도 수준에 따라 세부적인 구현 수준으로 나누고, 개별적인 구현 +수준에 대해 언제 어느 시기에 해당 기능을 도입·연동할지를 판단 +④ 모든 세부역량에 대해 시기별로 달성 계획을 정리하면 구현 로드맵 형태로 구성하는 것이 +가능하며, 예산과 솔루션 도입 시기, 기업의 우선순위, 규제 시기 등을 고려하여 2~3단계로 +나누어진 세부 로드맵을 만들 수 있음. 이 세부 로드맵은 각 단계에서 달성하고자 하는 단계 +목표 및 세부역량, 그에 대한 성숙도 등을 포함하여야 함 + + +## 제4절 + +제로트러스트 아키텍처 도입 준비 예시 +본 절에서는 기업이 제로트러스트 아키텍처를 도입하기 위하여, 안전한 온프레미스 소프트웨어 +개발 시스템 환경 구축 시나리오에 비추어 어떤 절차와 방법을 통하여 구현할 수 있는지 구성 예를 +들고, 그에 대한 모델 분석을 통해 구체적으로 도입 준비 방안을 설명하고자 한다. +본 예시에서는 전체 기업망 환경에 대하여 제로트러스트 아키텍처를 도입하는 것이 아닌 개발 +시스템 환경이라는 특정 비즈니스 프로세스에 대해 도입하는 과정을 예로 들고 있으며, 준비 +과정으로 언급한 6가지 세부 과정 중에서 안전한 개발 환경 구축 관점에서는 기존 기업망 구조, +보호 대상 분석 및 보안 아키텍처, 보안 수준 분석 등이 이미 이루어진 상태로 볼 수 있다. +이 예시에서는 제로트러스트 아키텍처를 구체적으로 정의하는 과정에서의 접근법 3가지(인증 +체계 강화, 마이크로 세그멘테이션, 네트워크 인프라 및 소프트웨어 정의 경계(SDP)) 중 ICAM을 +중심으로 하는 인증 체계 강화 기반 접근을 가정하였다. 따라서 접근제어 정책 결정의 중심에는 +식별자가 있으며, PDP는 사용자 및 기기의 식별자를 중심으로 위험도 분석 및 신뢰도 평가를 +진행하여 접근 여부, 재인증 여부 등을 결정하게 된다. 이 접근법은 단지 예시일 뿐이므로, +기업망에서 도입을 하는 경우 뿐 ICAM을 중심으로 접근 정책을 결정하여야 하는 것은 아니며 +다양한 방법이 가능하다는 점을 미리 밝힌다. + +### 1. 제로트러스트 아키텍처 도입 목표 설정 + +본 예제의 목표는 기업 내 소프트웨어를 개발하는 개발자 그룹에서 안전한 소프트웨어 개발 +환경을 구축하는 것을 목표로 한다. 기업 개발 환경은 온프레미스 개발 환경과 퍼블릭 클라우드 +개발 환경으로 나뉠 수 있는데 본 예제는 온프레미스 개발 환경 구성을 가정하여 안전한 개발 +환경을 위한 제로트러스트 아키텍처 도입을 준비하는 과정으로 본다. + +140 | 제로트러스트 가이드라인 2.0 +기업에서 중요 소프트웨어 개발자들은 외부 해킹 공격의 주요 목표가 된다. 해커들은 개발 환경에 +침입하여 개발자의 권한을 탈취하고 이를 이용하여 소프트웨어 내 악성코드를 삽입하여 추가적인 +공격 수단(예, 기업망 내부 모니터링, 악성코드 배포 등)으로 사용하기도 하고, 해당 기업의 주요 +소프트웨어 소스 코드를 탈취하여 이를 무단사용·배포할 수도 있다. 그러므로, 기업에서 소프트웨어 +개발 환경의 안전한 구축은 중요한 보안 목표 중 하나이다. + +### 2. 제로트러스트 아키텍처 및 구성요소별 기능 + +제로트러스트 아키텍처를 기반으로 하는 안전한 소프트웨어 개발 환경 구축의 예에서 접근제어 +대상 사용자는 특권 사용자로 분류될 수 있는 소프트웨어 개발자이고 보호 대상이 되는 리소스는 +개발 환경이 구성된 서버 시스템과 개발에 사용되는 개발 도구, 그리고 개발 시스템 내에 있는 +소프트웨어 코드 데이터 등이 될 수 있다. + +**[그림 4-5]** 안전한 소프트웨어 개발 환경 구축을 위한 제로트러스트 아키텍처 + +접근주체 +서버망서버팜 +안전한개발환경및 +시스템 +서버접근제어 +마이크로세그멘테이션 +서버백신 +원격재택 +백신 +패치관리 +보안 +위험도분석 +단말보안 +위험도 +분석 +업무망내부망 +개발자 +기기엔드포인트 +백신 +패치관리 +보안 +위험도분석 +단말보안 +위험도 +분석 +사용자관리 +디바이스및시스템관리 +다중인증 +신뢰도 +알고리즘 +시스템접근제어 +네트워크보안및접근제어 +웹 애플리케이션 접근제어 +데이터접근제어 +SVN, K8S, CI/CD, MSA ……. +- 서버내부접근통제파일디렉토리명령어 +프로세스등 +- 마이크로세그멘테이션서버·애플리케이션세분화 +및횡적이동공격방지 +- +안전한컨테이너기반개발환경등 +리소스개발망 +개발자 +신원 +개발자 +신원 +개발자 +기기엔드포인트 +시스템서버등 +안전한 소프트웨어 개발 환경 구축을 위한 제로트러스트 아키텍처를 간단히 요약하면 [그림 +4-5]와 같다. 아키텍처 내부의 각 논리 구성요소 및 여기에서 필요한 성숙도 모델 기준과 세부역량에 +대해서는 다음과 같이 표현할 수 있다. + +1) 접근 주체 구성 +소프트웨어 개발자들은 본 환경에서 ‘접근 주체’에 해당하는 특권 사용자들로서 제로트러스트 +아키텍처의 보호 대상이자 관리 대상이 된다. 해당 개발자들은 개발을 위하여 자신들의 PC를 +사용하며 이는 제로트러스트 관점에서 ‘기기 및 엔드포인트’로 정의된다. +제로트러스트 아키텍처 구성에서 모든 개발자들은 자신의 개발자 PC에 위험도 분석을 위한 +사용자 보안 소프트웨어(예: UEM)를 설치한다. 해당 소프트웨어는 개발자가 개발 환경 접속 시 +해당 개발자 기기의 보안 상태(멀웨어·바이러스 점검 결과, 패치 업데이트 상태 등)를 점검하고 +위험도를 분석하여, 사용자와 단말의 보안 컨텍스트 정보를 PDP에 제공하게 된다. +2) 정책결정지점(PDP)/정책시행지점(PEP) 구성 +소프트웨어 개발자들은 본 환경에서 개발 환경망 내에 있는 리소스인 개발 시스템에 접근하기 +위해서는 PEP를 통해 리소스 접근 승인을 받아야 한다. 리소스마다 별도의 PEP 게이트웨이를 +구성할 수 있으며, 본 예제에서는 크게 4개의 접근제어 PEP를 구성하였다. 이들은 각각 다음과 +같은 목적과 기능을 제공한다. +- 시스템 접근제어 PEP: 시스템 개발자의 경우 해당 개발 시스템의 개발 환경을 사용하는 것이 +우선이지만 때에 따라서 개발한 소스코드 테스트 및 환경구성을 위해서 시스템 운영체제(OS) +관리자 계정으로 접속하여 다양한 시스템 구성 및 운영 작업을 수행할 수 있다. 이를 위해 +PAM 세부역량을 통해 해당 서버 관리자 계정에 접속하기 전 해당 사용자의 계정, 인증, 권한 +등을 확인하여 상세한 접근제어를 진행할 수 있다. +- ZTNA PEP: 소프트웨어 개발자들은 기업 내에서 근무하면서 개발시스템에 접속할 수도 있고, +재택 근무 또는 원격 근무지에서 개발시스템에 접속할 수도 있다. 이러한 경우 해당 기기는 +전통적인 네트워크 보안 채널 구성인 VPN(가상사설망)이나 SSL-VPN(웹 가상사설망)을 +사용하여 외부에서 기업 내부 네트워크로 접속하게 된다. 일반적으로 ZTNA는 네트워크 보안 +접속 기능에 추가적으로 웹 애플리케이션(서비스) 접속에 대한 접근제어를 포함한다. ZTNA를 +통해 원격지에서의 안전한 네트워크 접속 및 중요 웹 기반 개발 업무시스템의 접근제어를 함께 +수행할 수 있다. +- 웹 애플리케이션 접근제어 PEP: 기존에 이미 VPN이나 SSL-VPN을 사용하고 있는 +환경이고, 별도의 ZTNA 체계 도입 없이 웹 애플리케이션 접근제어를 하고자 한다면 웹 + +142 | 제로트러스트 가이드라인 2.0 +애플리케이션 접근제어를 위한 PEP를 도입할 수도 있다. 이는 기존의 원격 접속에 대한 +네트워크 보안 체계는 전통적인 방식을 사용하고 추가적으로 웹 애플리케이션 접근제어 +PEP를 구성하여 해당 PEP가 웹 애플리케이션 접속을 진행하는 기기로 사용될 수 있다. 예를 +들어 차세대방화벽(NGFW)은 웹 애플리케이션인 L7 레이어를 통제할 수 있기 때문에 웹 +애플리케이션 PEP로 사용될 수 있다. 그러나, 그 외 기능이 필요하다면 또 다른 형태의 보안 +기술이나 솔루션이 사용될 수 있다. +- 데이터 접근제어 PEP: 개발 환경은 다양한 소스코드와 해당 코드에 관련된 문서 산출물이 +존재하게 된다. 소스코드의 경우 다양한 개발 소프트웨어 기반 개발 도구들을 사용하기 때문에 +개발자가 작성한 코드가 해당 개발자에 의해 외부로 유출되거나 소스 코드 저장소에 외부 +해커가 접속하여 소스 코드 유출을 방지해야 할 필요가 있게 된다. 또한, 소스 코드와 관련된 +각종의 개발 산출물 문서의 외부 유출 역시 막아야 할 필요가 있게 된다. 이를 위해 기업은 +소스 코드 생성 시 자동으로 로컬 또는 소스 코드 저장소 서버에 암호화하여 저장하게 할 +수도 있고 동시에 외부로 소스 코드가 유출되는 것을 탐지하고 막기 위해서 데이터 유출 방지 +기술인 DRM 및 DLP 세부역량을 이용하여 소스 코드 및 문서 유출 탐지를 진행할 수 있다. +이때 DRM 및 DLP가 동작하는 지점을 PEP로 정의하여 해당 보안 기능의 동작 시 소프트웨어 +개발자의 신뢰도를 판단할 수 있는 컨텍스트 정보와 인증 등을 PDP와 연동시켜 데이터 +접근제어의 보안 기능을 강화할 수 있다. +상기 접근 요청에 대해 최종적으로 승인하는 것은 PDP의 역할이다. 본 예시에서는 ICAM에 +PDP를 구축하여 활용하는 것을 가정하고 있으며, PEP로부터 접근 요청 정보, 사용자 및 기기 +식별자 기반 인증 정보, 그리고 개발자 PC에 설치된 사용자 보안 소프트웨어가 제공하는 보안 +컨텍스트 정보, 그 외 보안 이벤트 등을 이용하여 현재 접근에 대한 신뢰도를 도출한다. 도출된 +신뢰도는 사용자·기기에 대한 접근 허용을 위한 중요한 정보로 사용된다. 개발자가 개발 시스템 +접근 후 업무를 진행하는 경우에도 해당 신뢰도는 주기적으로 점검되며, 만약 개발 PC의 보안 +위협이 발생하여 신뢰도가 낮아지는 경우 PDP에서는 PEP를 통하여 개발자에게 재인증을 +요청하거나 현재 세션을 종료시킬 수 있다. +3) 개발망에서의 리소스 구성 +소프트웨어 개발망은 다양한 개발 환경 및 시스템으로 구성될 수 있다. 주로 개발 소스코드에 + +대한 형상관리를 진행하는 형상관리시스템과 GitHub, Gitlab과 같은 소스코드 저장소(Repository) +등으로 구성되며 필요시 외부 클라우드 형상관리시스템이나 소스코드 저장소가 사용될 수 있다. +내부 개발 시스템의 경우 형상관리시스템이나 소스코드 저장소를 보안 등급에 따라 다수의 +존으로 물리적 분리를 진행할 수 있고 가상환경에서 VM 분리를 통한 논리적 분리를 진행할 수도 +있게 된다. 물리적 구성 분리의 경우 네트워크 보안 기반의 매크로 세그멘테이션을 진행하여 +각 보안 등급 간 물리적 구역의 횡적 이동을 어렵게 할 수 있다. 이때 보안 기능으로는 네트워크 +방화벽(Firewall), 침입탐지시스템(IDS) 및 침입방지시스템(IPS) 등이 사용될 수 있다. +만약 가상환경 기반의 VM 단위 또는 컨테이너(Container) 단위로 논리적 분리를 진행한다면 +VM이나 컨테이너 간 횡적이동 공격을 막기 위한 마이크로 세그멘테이션(Micro Segmentation) +보안 기능이 적용되어야 할 필요가 있다. 해당 기능은 호스트 기반의 방화벽이나 침입탐지 및 +차단시스템, 그리고 호스트 접근제어 등이 사용될 수 있으며, 더불어 서버 백신, 무결성 관리, 화이트 +리스트 기반 제어 등의 보안 기술이 사용될 수 있다. +또한, 컨테이너 기반의 MSA 개발 환경을 구성하고 이를 위하여 DevOps(Development +Operations) 기반의 개발 환경을 구성하여 사용한다면 클라우드 네이티브 보안 체계인 CNAPP +보안 체계를 도입하여 개발 과정에서 발생할 수 있는 다양한 보안 위협을 줄일 수 있도록 개발 +시스템을 구성할 수 있다. 이때 소프트웨어 개발자의 개발 환경 접근 시 PEP와 PDP를 이용한 +사용자 인증, 사용자 PC 보안 강화 등을 연계, 연동시켜 보안성을 강화할 수 있다. +다. 제로트러스트 아키텍처 관점 성숙도 모델 및 세부역량 분석 +앞서 구성한 제로트러스트 아키텍처에서는 구성요소 및 필요한 보안 기능들을 언급하였다. +이를 구체화하기 위하여 성숙도 모델 및 세부역량 기준에 대한 정의가 필요하며, 차후 이를 +토대로 아키텍처를 수립한 후 제로트러스트 아키텍처 및 구현 로드맵을 수립할 수 있을 것이다. +안전한 소프트웨어 개발 환경 구축을 위한 제로트러스트 아키텍처는 제로트러스트 성숙도 모델을 +기준점으로 삼았고, 이를 위한 보안 세부역량을 도출하여 구성된 것이다. +<표 4-5>은 목표 시스템 구성을 위한 제로트러스트 세부역량 도출의 예를 보여주며, 전체 6대 +핵심 요소 중 첫째 요소인 식별자·신원에 대한 필요 성숙도 기능 및 보안 세부역량을 정의·설명 +하였다. 앞서 간단히 언급한 바와 같이, 본 예시에서 PDP는 ICAM이 그 역할을 담당하고 있다고 +가정하고 있으며, 실제 기업들은 각자 상황에 따라 적절하게 PDP를 구성할 수 있다. + +144 | 제로트러스트 가이드라인 2.0 + +**[표 4-5]** SW 개발 시스템에서 사용자 핵심 요소의 제로트러스트 성숙도 및 보안 기능 + +성숙도 +기능 +세부역량 +세부역량 설명 +식별자 +관리 +사용자 인벤토리 +‣ 사용자 그룹 중 소프트웨어 개발자를 특권 사용자로 구분하여 사용자 계정을 등록하고 +관리함 +‣ 해당 보안 기능은 PDP 역할을 하는 ICAM에서 구현되며 사전에 개발자의 계정을 +등록하고 적용할 MFA 종류를 결정하며, 개발 환경 접속 시 필요한 신뢰점수를 속성 +관리 값으로 등록함 +ID 연계 및 사용자 +자격 증명 +‣ 전체 소프트웨어 개발자의 규모가 크고 다양한 부서와 다양한 개발 환경으로 분산되어 +있는 경우 기 구축된 인사정보시스템 또는 계정관리시스템과 연동하여 개발자 그룹에 +대한 계정 관리를 동기화하고 일원화함 +‣ 개발자 인증 시 인증 시스템과의 통합 인증 연동체계도 동작될 수 있도록 구성함 +인증 +다중인증 (MFA) +‣ 소프트웨어 개발 시스템에 접속 시 개발자는 반드시 MFA를 사용하도록 함 +‣ 개발자 시스템 접속 인증 시 필요한 경우 접속 시점의 상황을 인지하고 이를 인증 요소에 +반영할 수 있는 체계도 마련할 수 있도록 함 +지속 인증 +‣ 개발자 소프트웨어 개발 시스템에 접속하여 업무를 진행하는 경우 최초 접속 시 한 번의 +인증만으로 무한정 업무를 진행하는 것이 아니라 수시로 개발자 PC의 보안 상태 정보나 +개발자의 상황 환경을 파악하여 위험정보가 판단되는 경우 재인증 요청 또는 강제 세션 +종료를 통해 지속적 인증 체계를 수립함 +위험도 +평가 +통합 ICAM 플랫폼 +‣ 정책결정지점이 PDP에서 ICAM 시스템을 기반으로 특권 사용자인 소프트웨어 +개발자의 계정을 관리하고 인증 수행을 진행하며, 접속 권한에 필요한 신뢰점수 값을 +등록 관리함 +‣ 정책에 따라 개발자의 속성 정보 값을 이용하여 최소한의 권한 관리체계를 구축 +행동, 상황적 ID 및 +생체 인식 +‣ 개발자의 행동 패턴, 상황적 정보를 인지하여 이상 징후 발생 시 추가 MFA 인증 진행 +‣ PAM과 적시/최소권한접근(JIT/JEA) 제어 시스템과 연계하여 적절한 개발자의 접근 +제어를 수행 +접근 +관리 +조건부 사용자 접근 +‣ 개발자들이 소프트웨어 개발 시스템에 접속 시 적절한 시간 내에만 접속할 수 있도록 +적시접근(JIT) 기능을 제공하고 PAM과 연계하여 최소권한접근(JEA)을 가질 수 있는 +조건부 접근 체계를 마련함 +‣ 이는 ICAM에서 이루어지며 이를 위해 기업 리소스 내 모든 시스템들은 사전에 ICAM에 +등록 관리되어야 함 +최소 권한 접근 +‣ 개발자들이 소프트웨어 개발 시스템에 접속하여 개발업무를 수행하는 경우 일반적으로 +두 가지 기업 리소스에 대한 접근이 필요할 수 있음. 첫째는 개발 업무를 지원하는 +개발 애플리케이션에 접속하여 개발 업무를 진행하는 경우이고, 둘째는 개발 업무를 +진행하면서 해당 서버 시스템에 관리자로 접속하여 다양한 시스템 설정 관리 업무를 +진행하는 경우임 +‣ 이때 둘째 경우에는 해당 개발자는 다양한 개발 환경 설정 업무를 위해서 루트 권한을 +확보하여 중요 업무를 수행하게 되는데 이때 JIT/JEA 권한 제어가 이루어지지 않게 +되는 경우 해당 계정 및 업무가 외부 해커에 장악되는 등 심각한 피해가 발생할 수 있음 + +| 성숙도 기능 | 세부역량 | 세부역량 설명 | +| --- | --- | --- | +| 식별자 관리 | 사용자 인벤토리 | ‣ 사용자 그룹 중 소프트웨어 개발자를 특권 사용자로 구분하여 사용자 계정을 등록하고 관리함 ‣ 해당 보안 기능은 PDP 역할을 하는 ICAM에서 구현되며 사전에 개발자의 계정을 등록하고 적용할 MFA 종류를 결정하며, 개발 환경 접속 시 필요한 신뢰점수를 속성 관리 값으로 등록함 | +| | ID 연계 및 사용자 자격 증명 | ‣ 전체 소프트웨어 개발자의 규모가 크고 다양한 부서와 다양한 개발 환경으로 분산되어 있는 경우 기 구축된 인사정보시스템 또는 계정관리시스템과 연동하여 개발자 그룹에 대한 계정 관리를 동기화하고 일원화함 ‣ 개발자 인증 시 인증 시스템과의 통합 인증 연동체계도 동작될 수 있도록 구성함 | +| 인증 | 다중인증 (MFA) | ‣ 소프트웨어 개발 시스템에 접속 시 개발자는 반드시 MFA를 사용하도록 함 ‣ 개발자 시스템 접속 인증 시 필요한 경우 접속 시점의 상황을 인지하고 이를 인증 요소에 반영할 수 있는 체계도 마련할 수 있도록 함 | +| | 지속 인증 | ‣ 개발자 소프트웨어 개발 시스템에 접속하여 업무를 진행하는 경우 최초 접속 시 한 번의 인증만으로 무한정 업무를 진행하는 것이 아니라 수시로 개발자 PC의 보안 상태 정보나 개발자의 상황 환경을 파악하여 위험정보가 판단되는 경우 재인증 요청 또는 강제 세션 종료를 통해 지속적 인증 체계를 수립함 | +| 위험도 평가 | 통합 ICAM 플랫폼 | ‣ 정책결정지점이 PDP에서 ICAM 시스템을 기반으로 특권 사용자인 소프트웨어 개발자의 계정을 관리하고 인증 수행을 진행하며, 접속 권한에 필요한 신뢰점수 값을 등록 관리함 ‣ 정책에 따라 개발자의 속성 정보 값을 이용하여 최소한의 권한 관리체계를 구축 | +| | 행동, 상황적 ID 및 생체 인식 | ‣ 개발자의 행동 패턴, 상황적 정보를 인지하여 이상 징후 발생 시 추가 MFA 인증 진행 ‣ PAM과 적시/최소권한접근(JIT/JEA) 제어 시스템과 연계하여 적절한 개발자의 접근 제어를 수행 | +| 접근 관리 | 조건부 사용자 접근 | ‣ 개발자들이 소프트웨어 개발 시스템에 접속 시 적절한 시간 내에만 접속할 수 있도록 적시접근(JIT) 기능을 제공하고 PAM과 연계하여 최소권한접근(JEA)을 가질 수 있는 조건부 접근 체계를 마련함 ‣ 이는 ICAM에서 이루어지며 이를 위해 기업 리소스 내 모든 시스템들은 사전에 ICAM에 등록 관리되어야 함 | +| | 최소 권한 접근 | ‣ 개발자들이 소프트웨어 개발 시스템에 접속하여 개발업무를 수행하는 경우 일반적으로 두 가지 기업 리소스에 대한 접근이 필요할 수 있음. 첫째는 개발 업무를 지원하는 개발 애플리케이션에 접속하여 개발 업무를 진행하는 경우이고, 둘째는 개발 업무를 진행하면서 해당 서버 시스템에 관리자로 접속하여 다양한 시스템 설정 관리 업무를 진행하는 경우임 ‣ 이때 둘째 경우에는 해당 개발자는 다양한 개발 환경 설정 업무를 위해서 루트 권한을 확보하여 중요 업무를 수행하게 되는데 이때 JIT/JEA 권한 제어가 이루어지지 않게 되는 경우 해당 계정 및 업무가 외부 해커에 장악되는 등 심각한 피해가 발생할 수 있음 | + + +상기 과정을 각 기업망 핵심 요소 별로 정리하고 필요한 보안 기능을 도출한다면 기업은 해당 +보안 기능 구현을 위한 보안 기술 및 보안 솔루션 도입을 정의할 수 있게 된다. +아래 <표 4-6>은 보안 기능 도출 과정을 거친 후 해당 보안 기능을 위해 필요로 하는 제로트러스트 +보안 기술(기능 혹은 보안 세부역량 기반)을 최종 도출한 것이다. 이러한 일련의 과정을 통해 기업은 +기업망 내 다양한 유형 및 유스케이스에 대한 제로트러스트 아키텍처를 구축할 수 있는 단계적 +절차를 이해할 수 있을 것이다. + +**[표 4-6]** SW 개발 시스템에 제로트러스트 아키텍처 적용을 위한 기업망 핵심 요소 및 보안 기술 정의 + +기업망 핵심 요소 +대상 +필요로 하는 제로트러스트 보안 기술 +식별자·신원 +(Identity) +‣ 소프트웨어 개발자 +‣ ICAM 등록 관리 +‣ 다중인증(MFA) +‣ 적시/최소권한접근(JIT/JEA) 제어 +기기 및 엔드포인트 +(Device/Endpoint) +‣ 소프트웨어 개발자가 사용하는 개발용 업무 PC +‣ 신뢰도 판단 +‣ PC 위생(Hygiene) → UEM +네트워크 +(Network) +‣ 기업 내 온프레미스 환경 내에서 개발 연구소 +내 개발자 PC부터 개발 서버 시스템까지의 +네트워크 연결 구간 +※ 기업 외부에 접속하는 경우(재택/원격 근무) +해당 개발자 PC에서 기업 내 개발 서버 +시스템까지의 연결 구간 +‣ 암호화 채널 +‣ 다양한 네트워크 보안 기술 및 체계 +‣ 마이크로 세그멘테이션 +시스템 +(System) +‣ 개발 도구 애플리케이션이 설치된 서버 시스템 +‣ 개발 소스 코드가 저장된 서버 시스템 +‣ 시스템 접근제어 (PAM) +애플리케이션 및 +워크로드 +(Application & +Workload) +‣ 개발 도구 애플리케이션 +‣ 가상화 환경에서의 PaaS 플랫폼 +(VM, 컨테이너, 쿠버네티스 등) +‣ 애플리케이션 접근제어 +‣ 워크로드 보호 +‣ 안전한 컨테이너 네이티브 개발 환경 +(DevSecOps) +데이터 +(Data) +‣ 개발 소스 코드 +‣ 데이터 암호화 +‣ DRM +‣ DLP +제로트러스트 아키텍처 도입을 추진하는 경우 기업은 우선 제로트러스트 아키텍처를 적용하고자 +하는 대상 시스템을 선정해야 한다. 그리고 해당 대상 시스템에 제로트러스트 아키텍처로의 논리적 +구성 전환을 시도하며, 어떠한 제로트러스트 보안 기능·세부역량이 적용되어야 하는지 3.2절을 +참고하여 구성할 수 있다. 이때 기업은 각 제로트러스트 성숙도 모델과 제로트러스트 보안 기능 + +| 기업망 핵심 요소 | 대상 | 필요로 하는 제로트러스트 보안 기술 | +| --- | --- | --- | +| 식별자·신원 (Identity) | ‣ 소프트웨어 개발자 | ‣ ICAM 등록 관리 ‣ 다중인증(MFA) ‣ 적시/최소권한접근(JIT/JEA) 제어 | +| 기기 및 엔드포인트 (Device/Endpoint) | ‣ 소프트웨어 개발자가 사용하는 개발용 업무 PC | ‣ 신뢰도 판단 ‣ PC 위생(Hygiene) → UEM | +| 네트워크 (Network) | ‣ 기업 내 온프레미스 환경 내에서 개발 연구소 내 개발자 PC부터 개발 서버 시스템까지의 네트워크 연결 구간 ※ 기업 외부에 접속하는 경우(재택/원격 근무) 해당 개발자 PC에서 기업 내 개발 서버 시스템까지의 연결 구간 | ‣ 암호화 채널 ‣ 다양한 네트워크 보안 기술 및 체계 ‣ 마이크로 세그멘테이션 | +| 시스템 (System) | ‣ 개발 도구 애플리케이션이 설치된 서버 시스템 ‣ 개발 소스 코드가 저장된 서버 시스템 | ‣ 시스템 접근제어 (PAM) | +| 애플리케이션 및 워크로드 (Application & Workload) | ‣ 개발 도구 애플리케이션 ‣ 가상화 환경에서의 PaaS 플랫폼 (VM, 컨테이너, 쿠버네티스 등) | ‣ 애플리케이션 접근제어 ‣ 워크로드 보호 ‣ 안전한 컨테이너 네이티브 개발 환경 (DevSecOps) | +| 데이터 (Data) | ‣ 개발 소스 코드 | ‣ 데이터 암호화 ‣ DRM ‣ DLP | + + +146 | 제로트러스트 가이드라인 2.0 +기준을 기반으로 현재 구성된 기업망의 현재 수준을 진단하고 향후 구현할 단계별 수준을 목표로 +설정하게 되면 이것이 각 기업·기관이 도입하려는 제로트러스트 아키텍처의 핵심 기준이 될 수 +있다. + +### 3. 제로트러스트 아키텍처 구현 로드맵 수립 + +제로트러스트 아키텍처 구현 로드맵 수립은 본격적으로 제로트러스트 아키텍처를 도입하기 +전에 수립하는 것이 바람직하다. 최종 목표와 필요한 보안 세부역량 등이 정의가 되어 있기 때문에, +이들에 대해서 한 번에 도입할 수 있는지, 세부 단계를 나누어 단계별 목표 수립 및 도입을 추진할 +것인지에 대해 결정을 해야 한다. +예를 들어, 세부 단계로 나눈다면 사용자 핵심 요소와 관련하여 다음과 같은 단계별 실행 계획 +수립이 가능할 것으로 보인다. +- 1단계: 빠르게 도입 가능한 영역 식별. 사용자 인벤토리, MFA 도입, 통합 ICAM 플랫폼, +조건부 사용자 접근 등 기술 적용 +- 2단계: ID 연계 및 사용자 자격 증명 기법 도입 및 고도화, 최소 권한 접근 세부역량 적용 +- 3단계: 실시간 모니터링과 이상 탐지 시스템 구축이 가능한 구조 확립. 지속 인증이나 행동, +상황적 ID 및 생체 인식 기술 등 적용 +각 단계별로 기업 규모에 맞는 도입 시기와 시간, 예산 등을 결정하여야 하며, 이보다 앞서 +구체적인 시스템 구성도, 보안 기능 동작 절차도, 도입할 보안 솔루션 정의, 보안 솔루션 도입·구축 +계획 등을 정의할 수도 있으나, 먼저 단계별 도입 기간을 확립한 후 그에 맞춰 위 내용을 상세히 +정리할 수도 있다. 필요에 따라서는 사용자, 기기, 시스템, 데이터 등에서 어떤 요소가 먼저 +보호되어야 하는지를 정의하여 리소스를 효율적으로 사용하고 가장 중요한 자산부터 보호하는 +전략도 필요하다. + +제로트러스트 +가이드라인 2.0 + + +## 제1절 제로트러스트 성숙도 기반 도입 수준 + +분석 + +## 제2절 제로트러스트 침투 시험 기반 효과성 + +분석 +제로트러스트 도입 +수준 분석 + +# 제5장 + + +150 | 제로트러스트 가이드라인 2.0 + +## 제1절 + +제로트러스트 성숙도 기반 도입 수준 분석 + +### 1. 제로트러스트 성숙도 수준 평가를 통한 보안 수준 분석 방안 + +제로트러스트 성숙도 수준을 평가하여 보안 수준을 분석하는 것은 조직의 보안 체계를 +체계적으로 진단하고 강화하기 위한 중요한 과정이다. 이 평가 방법은 조직이 현재 어떤 수준의 +제로트러스트 보안 체계를 구축하고 있는지를 파악하고, 향후 개선해야 할 영역을 식별하며, 이를 +통해 전반적인 보안 성숙도를 높이는 데 도움을 준다. +먼저, 제로트러스트 성숙도 수준을 평가하기 위해서는 명확한 성숙도 모델과 평가 프레임워크를 +설정해야 한다. 성숙도 모델은 일반적으로 여러 단계로 나뉘어 있으며, 각 단계는 보안 정책, 기술적 +요건, 운영 절차, 조직의 보안 문화 등을 포함한다. 이러한 모델은 단계별로 조직의 보안 성숙도를 +평가할 수 있도록 도와준다. +앞에서 우리는 성숙도 모델을 네 가지 단계로 설명하였다. 준비 단계에서는 제로트러스트 도입을 +위한 기초 작업이 이루어지며, 조직이 보안 인프라를 점검하고 초기 계획을 수립하는 단계이다. +기본 단계에서는 기초적인 보안 정책과 기술이 마련되며, 제로트러스트의 기본 원칙이 일부 +구현되기 시작한다. 향상 단계에서는 제로트러스트 원칙이 더 체계적으로 적용되며, 다양한 보안 +조치들이 조직 전반에 걸쳐 통합되고 강화된다. 최적화 단계에서는 제로트러스트의 모든 원칙이 +전반적으로 구현되고, 이를 바탕으로 지속적인 모니터링과 개선이 이루어지는 상태를 의미한다. +이후에는, 제로트러스트 성숙도에 대한 이해를 바탕으로 성숙도 평가의 핵심인 평가 요소를 +선정해야 한다. 제로트러스트 성숙도 수준을 평가하기 위해서는 조직의 다양한 보안 측면을 +다각도로 분석해야 한다. 주요 평가 요소는 성숙도 모델에 기반하여 다음 장에서 설명한다. +평가 요소가 선정되었다면, 이제 실제 평가를 수행하게 된다. 이 과정에서는 조직의 현재 상태를 + +기준으로 각 평가 요소별로 상세한 분석이 이루어진다. 이를 위해서는 다음과 같은 다양한 방법이 +사용될 수 있다. +- 설문조사 및 인터뷰: 조직 내 보안 담당자 및 관련 부서와의 인터뷰와 설문조사를 통해 현재 +보안 정책과 기술 도입 수준을 파악한다. +- 기술적 평가: 보안 인프라, 네트워크, 애플리케이션 등을 대상으로 기술적인 점검과 테스트를 +통해 실제 보안 상태를 진단한다. 예를 들어, 침투 테스트(penetration testing)나 취약점 +스캔(vulnerability scanning)을 통해 현재 보안 체계의 강점과 약점을 파악할 수 있다. +- 문서 검토: 조직 내 보안 정책, 절차, 가이드라인 등을 검토하여 문서화된 내용과 실제 운영 +상태 간의 일치 여부를 확인한다. +- 결과 분석 및 보고: 평가가 완료되면, 수집된 데이터를 분석하여 조직의 제로트러스트 성숙도 +수준을 평가한다. 이를 통해 조직이 현재 어떤 수준에 있는지, 각 평가 요소별로 어떤 부분이 +미흡한지를 명확하게 도출할 수 있다. 분석 결과는 단계별 성숙도 모델과 비교하여 조직의 +현재 위치를 정확히 파악하고, 이를 바탕으로 향후 보안 전략을 수립할 수 있도록 도울 수 +있다. +보고서는 조직 내 이해관계자들에게 쉽게 이해될 수 있도록 작성되어야 하며, 각 단계별로 +구체적인 개선 방안과 실행 계획을 포함해야 한다. 이러한 보고서는 경영진의 의사 결정을 +지원하고, 보안 예산 배정, 우선순위 설정 등에 중요한 역할을 한다. +조직의 보안 성숙도를 높이기 위해서는 평가 결과를 바탕으로 개선 계획을 수립해야 한다. +여기에는 다음과 같은 내용이 포함될 수 있다. +- 기술 도입: 필요에 따라 새로운 보안 기술이나 솔루션을 도입하여 제로트러스트 원칙을 +강화한다. 예를 들어, 더 강력한 인증 체계나 자동화된 보안 모니터링 도구 등을 도입할 수 있다. +- 정책 및 절차 개선: 보안 정책과 절차를 재검토하고, 필요한 경우 이를 업데이트하여 조직 +전반에 걸쳐 일관된 보안 원칙이 적용되도록 한다. +- 교육 및 인식 제고: 조직 내 모든 구성원이 제로트러스트 원칙을 이해하고, 이를 실천할 수 +있도록 교육 프로그램을 운영한다. 이는 보안 성숙도 향상에 중요한 요소이다. +- 지속적 모니터링 및 재평가: 성숙도 수준은 지속적으로 모니터링되고, 주기적으로 재평가하여 + +152 | 제로트러스트 가이드라인 2.0 +필요한 개선 사항을 신속히 반영해야 한다. +이러한 전반적인 과정은 조직의 보안 수준을 체계적으로 분석하고, 제로트러스트 원칙을 +기반으로 한 보안 성숙도를 지속적으로 높여 나가는 데 필수적이다. + +### 2. 제로트러스트 성숙도 수준 평가를 위한 체크리스트 + +본 장에서는 제로트러스트 성숙도 수준 평가를 위한 체크리스트를 제공한다. 제로트러스트 +성숙도 모델을 기반으로 한 체크리스트는 기업의 정보보호 상태를 평가하고, 향후 제로트러스트 +도입을 위한 계획 수립과 예산 편성에 중요한 지침을 제공한다. 이 체크리스트는 기업이 현재 보안 +환경의 강점과 약점을 식별하고, 제로트러스트 모델의 도입에 필요한 구체적인 조치를 계획하는 데 +필요한 고수준의 평가 도구로 작동할 것이다. +이 체크리스트는 기업의 보안 책임자들이 기존의 보안 상태를 명확히 이해하고, 어떤 부분에서 +제로트러스트 원칙을 강화해야 할지를 결정하는 데 도움을 준다. 이를 통해 기업은 제로트러스트 +도입의 첫 단계를 보다 효과적으로 준비할 수 있으며, 장기적으로 조직의 보안 성숙도를 향상시킬 +수 있는 기반을 마련할 수 있다. +하지만, 이 체크리스트는 정보보호 상태를 고수준에서 평가하는 도구이기 때문에, 너무 세부적인 +항목보다는 핵심 영역에 집중하여 작성될 것이다. 이렇게 함으로써, 기업 담당자가 체크리스트에 +매몰되지 않고, 전반적인 보안 상태를 파악하는 데 집중할 수 있도록 돕는다. 체크리스트의 각 +항목은 제로트러스트 성숙도 모델의 주요 요소를 반영하되, 기업이 추가로 필요한 기술 및 솔루션을 +판단하고, 세부 사항을 추가하거나 수정할 수 있도록 유연하게 구성될 것이다. +기업마다 보안 환경과 요구사항이 다르기 때문에, 체크리스트의 항목들은 각 조직의 상황에 맞게 +조정이 필요하다. 예를 들어, 특정 기술이나 솔루션이 이미 도입된 상태라면, 해당 항목을 평가에서 +제외하거나, 반대로 추가적인 보안 조치가 필요한 경우 새로운 항목을 추가할 수 있다. 이와 같은 +유연성을 통해, 체크리스트는 기업이 자체적인 보안 전략을 효과적으로 수립하고 실행하는 데 +실질적인 도움을 줄 것이다. +결국, 이 체크리스트는 기업이 현재 보안 상태를 평가하는 출발점이자, 제로트러스트 도입을 +위한 로드맵을 설계하는 데 있어 기본 틀의 역할을 한다. 기업 담당자는 이 체크리스트를 통해 + +조직의 보안 성숙도를 고수준에서 평가하고, 이를 바탕으로 향후 보안 전략을 구체화하며, 필요한 +예산과 리소스를 계획하는 데 활용할 수 있다. 단, 본 체크리스트는 기업에서의 성숙도 수준을 +파악하기 위한 참조 성격의 내용을 담은 것으로, 정부·공공 기관의 보안 수준 혹은 제로트러스트 +성숙도 수준을 파악하는 용도로 활용하는 것은 적절하지 않으며 기업이나 공공 기관이 필수적으로 +준수해야 하는 규정보다 우선시할 수 없다. +가. 식별자·신원 핵심 요소 체크리스트 예시 + +**[표 5-1]** 식별자·신원 핵심 요소 체크리스트 + +세부역량 +확인방법 +성숙도 +Check +사용자 +인벤토리 +- 사용자 목록에 대한 문서화가 되어있는가? +기존 +□ +- 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? +초기 +□ +- 자동화된 인벤토리 관리 기구가 도입되어 있는가? +향상 +□ +- 비정상적인 사용자 활동에 대한 탐지가 가능한가? +향상 +□ +- AI 기반 사용자 행동에 따른 관리가 되는가? +최적화 +□ +- 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? +최적화 +□ +ID 연계 및 +사용자 자격 +증명 +- 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? +기존 +□ +- 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? +초기 +□ +- ID 통합 관리 시스템이 구축되어 있는가? +향상 +□ +- 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? +최적화 +□ +다중인증 +(MFA) +- 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? +기존 +□ +- 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? +초기 +□ +- FIDO 기반 인증 기법이 적용되어 있는가? +초기 +□ +- 상황에 따른 맞춤형 MFA가 지원 가능한가? +향상 +□ +- 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 +있는가? +향상 +□ +- 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? +최적화 +□ +지속 인증 +- 세션 기반 인증이 수행되는가? +기존 +□ +- 사용자의 행동 및 접속 상태 모니터링이 가능한가? +기존 +□ +- 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? +초기 +□ +- 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? +향상 +□ +- 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 +실시간으로 가능한가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 사용자 인벤토리 | • 사용자 목록에 대한 문서화가 되어있는가? | 기존 | □ | +| | • 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | 초기 | □ | +| | • 자동화된 인벤토리 관리 기구가 도입되어 있는가? | 향상 | □ | +| | • 비정상적인 사용자 활동에 대한 탐지가 가능한가? | 향상 | □ | +| | • AI 기반 사용자 행동에 따른 관리가 되는가? | 최적화 | □ | +| | • 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | 최적화 | □ | +| ID 연계 및 사용자 자격 증명 | • 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | 기존 | □ | +| | • 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | 초기 | □ | +| | • ID 통합 관리 시스템이 구축되어 있는가? | 향상 | □ | +| | • 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | 최적화 | □ | +| 다중인증 (MFA) | • 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | 기존 | □ | +| | • 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | 초기 | □ | +| | • FIDO 기반 인증 기법이 적용되어 있는가? | 초기 | □ | +| | • 상황에 따른 맞춤형 MFA가 지원 가능한가? | 향상 | □ | +| | • 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | 향상 | □ | +| | • 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | 최적화 | □ | +| 지속 인증 | • 세션 기반 인증이 수행되는가? | 기존 | □ | +| | • 사용자의 행동 및 접속 상태 모니터링이 가능한가? | 기존 | □ | +| | • 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | 초기 | □ | +| | • 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | 향상 | □ | +| | • 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | 최적화 | □ | + + +154 | 제로트러스트 가이드라인 2.0 +세부역량 +확인방법 +성숙도 +Check +통합 ICAM +플랫폼 +- ICAM 시스템이 구축되어 있는가? +기존 +□ +- ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? +초기 +□ +- 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? +초기 +□ +- 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? +초기 +□ +- 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? +향상 +□ +- ICAM 플랫폼이 자동화되어 있는가? +향상 +□ +- AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? +최적화 +□ +- 실시간 분석을 통한 ID 위험 평가가 이루어지는가? +최적화 +□ +행동, 컨텍스트 +기반 ID 및 +생체 인식 +- 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? +기존 +□ +- 사용자 행동 패턴이 수동으로 분석되는가? +기존 +□ +- 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? +초기 +□ +- 컨텍스트 정보 기반 접근권한이 조정되는가? +초기 +□ +- 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? +향상 +□ +- AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? +최적화 +□ +조건부 사용자 +접근 +- 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? +기존 +□ +- 조건부 접근 정책에 대한 개념을 정의하였는가? +기존 +□ +- 시스템 별 각기 다른 접속 관리 기능이 있는가? +기존 +□ +- 특정 조건에 따른 사용자 접근제어가 가능한가? +초기 +□ +- 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? +초기 +□ +- 세션별 접근권한 부여가 가능한가? +향상 +□ +- 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? +향상 +□ +- 리소스별 접근권한 부여가 가능한가? +향상 +□ +- 동적 접근 정책을 실시간으로 적용 가능한가? +최적화 +□ +- AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? +최적화 +□ +최소 권한 접근 +- 최소 권한 원칙에 대한 정의가 이루어져 있는가? +기존 +□ +- 권한 부여에 대한 절차가 문서화 되어 있는가? +기존 +□ +- 권한 부여 절차가 표준화 되어 있는가? +초기 +□ +- 권한 요청 및 변경 관리 시스템이 도입되어 있는가? +초기 +□ +- 자동화된 권한 상승이 가능한가? +향상 +□ +- 권한 관리 정책이 지속적으로 업데이트 되는가? +향상 +□ +- 권한 관리가 동적으로 변경 가능한가? +최적화 +□ +- 최소 권한 원칙이 실시간으로 조정 가능한가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 통합 ICAM 플랫폼 | • ICAM 시스템이 구축되어 있는가? | 기존 | □ | +| | • ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | 초기 | □ | +| | • 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | 초기 | □ | +| | • 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입 되었는가? | 초기 | □ | +| | • 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | 향상 | □ | +| | • ICAM 플랫폼이 자동화되어 있는가? | 향상 | □ | +| | • AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | 최적화 | □ | +| | • 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | 최적화 | □ | +| 행동, 컨텍스트 기반 ID 및 생체 인식 | • 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | 기존 | □ | +| | • 사용자 행동 패턴이 수동으로 분석되는가? | 기존 | □ | +| | • 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | 초기 | □ | +| | • 컨텍스트 정보 기반 접근권한이 조정되는가? | 초기 | □ | +| | • 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | 향상 | □ | +| | • AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | 최적화 | □ | +| 조건부 사용자 접근 | • 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | 기존 | □ | +| | • 조건부 접근 정책에 대한 개념을 정의하였는가? | 기존 | □ | +| | • 시스템 별 각기 다른 접속 관리 기능이 있는가? | 기존 | □ | +| | • 특정 조건에 따른 사용자 접근제어가 가능한가? | 초기 | □ | +| | • 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | 초기 | □ | +| | • 세션별 접근권한 부여가 가능한가? | 향상 | □ | +| | • 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | 향상 | □ | +| | • 리소스별 접근권한 부여가 가능한가? | 향상 | □ | +| | • 동적 접근 정책을 실시간으로 적용 가능한가? | 최적화 | □ | +| | • AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | 최적화 | □ | +| 최소 권한 접근 | • 최소 권한 원칙에 대한 정의가 이루어져 있는가? | 기존 | □ | +| | • 권한 부여에 대한 절차가 문서화 되어 있는가? | 기존 | □ | +| | • 권한 부여 절차가 표준화 되어 있는가? | 초기 | □ | +| | • 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | 초기 | □ | +| | • 자동화된 권한 상승이 가능한가? | 향상 | □ | +| | • 권한 관리 정책이 지속적으로 업데이트 되는가? | 향상 | □ | +| | • 권한 관리가 동적으로 변경 가능한가? | 최적화 | □ | +| | • 최소 권한 원칙이 실시간으로 조정 가능한가? | 최적화 | □ | + + +나. 기기 및 엔드포인트 핵심 요소 체크리스트 예시 + +**[표 5-2]** 기기 및 엔드포인트 핵심 요소 체크리스트 + +세부역량 +확인방법 +성숙도 +Check +기기 감지 및 +규정 준수 +- 리소스에 연결된 기기를 식별할 수 있는가? +기존 +□ +- 수동으로 규정 준수에 대한 확인이 가능한가? +기존 +□ +- 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? +초기 +□ +- 비준수 기기에 대한 경고 및 접근 제한이 되는가? +초기 +□ +- 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? +향상 +□ +- 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? +향상 +□ +- 규정 준수 여부에 따라 동적으로 권한이 수정되는가? +최적화 +□ +- 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? +최적화 +□ +실시간 검사를 +통한 기기 권한 +부여 +- 자산 접근 기기에 대한 정보가 수집되는가? +기존 +□ +- 기기가 자산에 접근하기 전 수동 검사를 수행하는가? +초기 +□ +- 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 +되는가? +향상 +□ +- 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? +최적화 +□ +- 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? +최적화 +□ +기기 인벤토리 +- 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? +기존 +□ +- 주요 기기에 대한 정보를 수집하고 관리하는가? +기존 +□ +- 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? +초기 +□ +- 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 +포함하는가? +향상 +□ +- 인벤토리 분석을 통하여 보안 취약점을 파악하는가? +향상 +□ +- 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 기기 감지 및 규정 준수 | • 리소스에 연결된 기기를 식별할 수 있는가? | 기존 | □ | +| | • 수동으로 규정 준수에 대한 확인이 가능한가? | 기존 | □ | +| | • 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | 초기 | □ | +| | • 비준수 기기에 대한 경고 및 접근 제한이 되는가? | 초기 | □ | +| | • 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | 향상 | □ | +| | • 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | 향상 | □ | +| | • 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | 최적화 | □ | +| | • 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | 최적화 | □ | +| 실시간 검사를 통한 기기 권한 부여 | • 자산 접근 기기에 대한 정보가 수집되는가? | 기존 | □ | +| | • 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | 초기 | □ | +| | • 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | 향상 | □ | +| | • 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | 최적화 | □ | +| | • 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | 최적화 | □ | +| 기기 인벤토리 | • 기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? | 기존 | □ | +| | • 주요 기기에 대한 정보를 수집하고 관리하는가? | 기존 | □ | +| | • 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | 초기 | □ | +| | • 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | 향상 | □ | +| | • 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | 향상 | □ | +| | • 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | 최적화 | □ | + + +156 | 제로트러스트 가이드라인 2.0 +세부역량 +확인방법 +성숙도 +Check +통합 +엔드포인트 +관리 및 모바일 +기기 관리 +- 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? +기존 +□ +- 기본적인 보안 정책을 설정하였는가? +기존 +□ +- 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 +자동 배포하는가? +초기 +□ +- 기기 상태를 지속적으로 모니터링 하는가? +초기 +□ +- 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 +적용하고 관리하는가? +향상 +□ +- 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 +가능한가? +최적화 +□ +엔드포인트 +및 확장된 +탐지·대응 +(EDR 및 +XDR) +- 기본적인 EDR 솔루션을 도입하였는가? +기존 +□ +- EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? +초기 +□ +- XDR 솔루션을 도입하였는가? +향상 +□ +- AI 기반 EDR·XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 +가능한가? +최적화 +□ +자산, 취약성 +및 패치 관리 +자동화 +- 자산 및 취약성을 수동으로 평가하는가? +기존 +□ +- 주요 자산 및 취약성 목록이 작성되어 있는가? +기존 +□ +- 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 +이루어지는가? +초기 +□ +- 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? +향상 +□ +- 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 +관리가 가능한가? +향상 +□ +- 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? +최적화 +□ +- 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 통합 엔드포인트 관리 및 모바일 기기 관리 | • 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | 기존 | □ | +| | • 기본적인 보안 정책을 설정하였는가? | 기존 | □ | +| | • 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | 초기 | □ | +| | • 기기 상태를 지속적으로 모니터링 하는가? | 초기 | □ | +| | • 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | 향상 | □ | +| | • 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | 최적화 | □ | +| 엔드포인트 및 확장된 탐지·대응 (EDR 및 XDR) | • 기본적인 EDR 솔루션을 도입하였는가? | 기존 | □ | +| | • EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | 초기 | □ | +| | • XDR 솔루션을 도입하였는가? | 향상 | □ | +| | • AI 기반 EDR·XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | 최적화 | □ | +| 자산, 취약성 및 패치 관리 자동화 | • 자산 및 취약성을 수동으로 평가하는가? | 기존 | □ | +| | • 주요 자산 및 취약성 목록이 작성되어 있는가? | 기존 | □ | +| | • 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? | 초기 | □ | +| | • 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | 향상 | □ | +| | • 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | 향상 | □ | +| | • 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | 최적화 | □ | +| | • 자산 관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | 최적화 | □ | + + +다. 네트워크 핵심 요소 체크리스트 예시 + +**[표 5-3]** 네트워크 핵심 요소 체크리스트 + +세부역량 +확인방법 +성숙도 +Check +매크로 +세그멘테이션 +- 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? +기존 +□ +- 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 +있는가? +기존 +□ +- 매크로 세그먼트 간에 보안 정책을 적용하였는가? +초기 +□ +- 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? +초기 +□ +- 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? +향상 +□ +- 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? +향상 +□ +- AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? +최적화 +□ +마이크로 +세그멘테이션 +- 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? +기존 +□ +- 수동으로 세그먼트를 구성하는가? +기존 +□ +- 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 +설정되었는가? +초기 +□ +- 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 +탐지·차단 할 수 있는가? +초기 +□ +- 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? +초기 +□ +- 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? +향상 +□ +- 애플리케이션 별 격리 메커니즘이 적용되었는가? +향상 +□ +- AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 +가능한가? +최적화 +□ +소프트웨어 +정의 네트워킹 +- 소프트웨어 정의 네트워크가 도입되어 있는가? +기존 +□ +- 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? +기존 +□ +- 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, +정책을 실시간으로 적용 가능한가? +초기 +□ +- 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 +있는가? +향상 +□ +- 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 +적용하였는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 매크로 세그멘테이션 | • 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | 기존 | □ | +| | • 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | 기존 | □ | +| | • 매크로 세그먼트 간에 보안 정책을 적용하였는가? | 초기 | □ | +| | • 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | 초기 | □ | +| | • 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | 향상 | □ | +| | • 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | 향상 | □ | +| | • AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | 최적화 | □ | +| 마이크로 세그멘테이션 | • 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | 기존 | □ | +| | • 수동으로 세그먼트를 구성하는가? | 기존 | □ | +| | • 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | 초기 | □ | +| | • 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지·차단 할 수 있는가? | 초기 | □ | +| | • 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | 초기 | □ | +| | • 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | 향상 | □ | +| | • 애플리케이션 별 격리 메커니즘이 적용되었는가? | 향상 | □ | +| | • AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | 최적화 | □ | +| 소프트웨어 정의 네트워킹 | • 소프트웨어 정의 네트워크가 도입되어 있는가? | 기존 | □ | +| | • 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | 기존 | □ | +| | • 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정책을 실시간으로 적용 가능한가? | 초기 | □ | +| | • 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | 향상 | □ | +| | • 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | 최적화 | □ | + + +158 | 제로트러스트 가이드라인 2.0 +세부역량 +확인방법 +성숙도 +Check +위협 대응 +- IDS·IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 +있는가? +기존 +□ +- 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? +기존 +□ +- 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 +가능한가? +초기 +□ +- 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? +초기 +□ +- 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? +향상 +□ +- 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? +향상 +□ +- 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 +가능한가? +최적화 +□ +- 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 +가능한가? +최적화 +□ +트래픽 암호화 +- 내·외부 트래픽 일부 암호화가 가능한가? +기존 +□ +- SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? +기존 +□ +- 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? +초기 +□ +- 데이터 전송 시 암호화를 필수로 하고 있는가? +초기 +□ +- 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? +향상 +□ +- 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? +향상 +□ +- 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? +최적화 +□ +- 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? +최적화 +□ +데이터 흐름 +매핑 +- 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? +기존 +□ +- 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? +기존 +□ +- 애플리케이션 단위의 트래픽 매핑이 가능한가? +초기 +□ +- 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 +실시간으로 매핑되는가? +초기 +□ +- 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 +탐지하는가? +향상 +□ +- 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 +가능한가? +향상 +□ +- AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 +감지하는가? +최적화 +□ +- 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 위협 대응 | • IDS·IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | 기존 | □ | +| | • 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | 기존 | □ | +| | • 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | 초기 | □ | +| | • 애플리케이션 프로파일에 따른 트래픽 관리가 이루어 지는가? | 초기 | □ | +| | • 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | 향상 | □ | +| | • 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | 향상 | □ | +| | • 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | 최적화 | □ | +| | • 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | 최적화 | □ | +| 트래픽 암호화 | • 내·외부 트래픽 일부 암호화가 가능한가? | 기존 | □ | +| | • SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | 기존 | □ | +| | • 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | 초기 | □ | +| | • 데이터 전송 시 암호화를 필수로 하고 있는가? | 초기 | □ | +| | • 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | 향상 | □ | +| | • 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | 향상 | □ | +| | • 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | 최적화 | □ | +| | • 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | 최적화 | □ | +| 데이터 흐름 매핑 | • 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | 기존 | □ | +| | • 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | 기존 | □ | +| | • 애플리케이션 단위의 트래픽 매핑이 가능한가? | 초기 | □ | +| | • 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | 초기 | □ | +| | • 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | 향상 | □ | +| | • 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | 향상 | □ | +| | • AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | 최적화 | □ | +| | • 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | 최적화 | □ | + + +세부역량 +확인방법 +성숙도 +Check +네트워크 +회복성 +- 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 +있는가? +기존 +□ +- 재해 복구에 대한 주기적 백업 실시가 이루어지는가? +기존 +□ +- 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? +기존 +□ +- 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? +초기 +□ +- 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? +초기 +□ +- 네트워크 이중화 설계가 되어 있는가? +초기 +□ +- 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? +향상 +□ +- 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? +향상 +□ +- 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? +최적화 +□ +- 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? +최적화 +□ +라. 시스템 핵심 요소 체크리스트 예시 + +**[표 5-4]** 시스템 핵심 요소 체크리스트 + +세부역량 +확인방법 +성숙도 +Check +접근통제 +- 사용자 및 기기에 수동으로 권한을 부여하는가? +기존 +□ +- RBAC 기반 접근제어를 수행하는가? +기존 +□ +- 권한 관리를 수동으로 수행하는가? +기존 +□ +- 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? +초기 +□ +- 실시간 접근권한 부여가 가능한가? +초기 +□ +- 권한 변경 사항이 자동으로 반영되는가? +초기 +□ +- 특정 리소스에 대한 접근 제한·승인 정책이 자동으로 적용 가능한가? +초기 +□ +- ABAC 기반 접근제어를 수행하는가? +향상 +□ +- 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? +(위치, 기기 상태, 시간 등) +향상 +□ +- 사용자·기기의 상태를 실시간으로 분석하고 실시간·자동으로 권한 조정이 가능한가? +최적화 +□ +- 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? +최적화 +□ +- 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? +최적화 +□ +- 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 네트워크 회복성 | • 애 플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | 기존 | □ | +| | • 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | 기존 | □ | +| | • 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | 기존 | □ | +| | • 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | 초기 | □ | +| | • 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | 초기 | □ | +| | • 네트워크 이중화 설계가 되어 있는가? | 초기 | □ | +| | • 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | 향상 | □ | +| | • 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | 향상 | □ | +| | • 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | 최적화 | □ | +| | • 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | 최적화 | □ | + + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 접근통제 | • 사용자 및 기기에 수동으로 권한을 부여하는가? | 기존 | □ | +| | • RBAC 기반 접근제어를 수행하는가? | 기존 | □ | +| | • 권한 관리를 수동으로 수행하는가? | 기존 | □ | +| | • 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | 초기 | □ | +| | • 실시간 접근권한 부여가 가능한가? | 초기 | □ | +| | • 권한 변경 사항이 자동으로 반영되는가? | 초기 | □ | +| | • 특정 리소스에 대한 접근 제한·승인 정책이 자동으로 적용 가능한가? | 초기 | □ | +| | • ABAC 기반 접근제어를 수행하는가? | 향상 | □ | +| | • 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | 향상 | □ | +| | • 사용자·기기의 상태를 실시간으로 분석하고 실시간·자동으로 권한 조정이 가능한가? | 최적화 | □ | +| | • 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | 최적화 | □ | +| | • 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | 최적화 | □ | +| | • 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | 최적화 | □ | + + +160 | 제로트러스트 가이드라인 2.0 +세부역량 +확인방법 +성숙도 +Check +PAM +- PAM 시스템을 구축하였는가? +기존 +□ +- PAM 정책이 수립되어 있는가? +기존 +□ +- PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? +초기 +□ +- 자동화된 권한 상승 승인 기술이 도입되어 있는가? +초기 +□ +- PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? +향상 +□ +- AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? +최적화 +□ +자격 증명 +관리 +- 자격 증명이 수동으로 관리되는가? +기존 +□ +- 패스워드에 기반한 인증 방식에 의존하는가? +기존 +□ +- 자격 증명 관리가 체계적이지 않고 수동적인가? +기존 +□ +- 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? +초기 +□ +- MFA 등 보다 안전한 인증 방식이 적용되어 있는가? +초기 +□ +- 생체 인증 등 고급 인증 방식이 도입되어 있는가? +향상 +□ +- 자격 증명 관리 시스템을 고도화하여 관리하는가? +향상 +□ +- 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? +향상 +□ +- AI 기반으로 실시간으로 인증정보 분석이 가능한가? +향상 +□ +- 비정상적인 인증 시도를 실시간으로 차단 가능한가? +최적화 +□ +- 실시간으로 인증 정책 조정이 가능한가? +최적화 +□ +- 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? +최적화 +□ +네트워크 +세분화 및 +그룹 간 이동 +- 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? +기존 +□ +- 기본적인 경계형 네트워크 모델이 적용되어 있는가? +기존 +□ +- 시스템 중요도에 따라 네트워크가 분리되어 있는가? +초기 +□ +- 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? +초기 +□ +- 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? +향상 +□ +- 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? +향상 +□ +- 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 +이루어지는가? +향상 +□ +- 그룹 간 이동 시 실시간으로 분석되고 제어되는가? +최적화 +□ +- 재인증 없는 그룹 간 이동이 가능한가? +최적화 +□ +- 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| PAM | • PAM 시스템을 구축하였는가? | 기존 | □ | +| | • PAM 정책이 수립되어 있는가? | 기존 | □ | +| | • PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | 초기 | □ | +| | • 자동화된 권한 상승 승인 기술이 도입되어 있는가? | 초기 | □ | +| | • PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | 향상 | □ | +| | • AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | 최적화 기존 | □ □ | +| 자격 증명 관리 | • 자격 증명이 수동으로 관리되는가? | | | +| | • 패스워드에 기반한 인증 방식에 의존하는가? | 기존 | □ | +| | • 자격 증명 관리가 체계적이지 않고 수동적인가? | 기존 | □ | +| | • 자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? | 초기 | □ | +| | • MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | 초기 | □ | +| | • 생체 인증 등 고급 인증 방식이 도입되어 있는가? | 향상 | □ | +| | • 자격 증명 관리 시스템을 고도화하여 관리하는가? | 향상 | □ | +| | • 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | 향상 | □ | +| | • AI 기반으로 실시간으로 인증정보 분석이 가능한가? | 향상 | □ | +| | • 비정상적인 인증 시도를 실시간으로 차단 가능한가? | 최적화 | □ | +| | • 실시간으로 인증 정책 조정이 가능한가? | 최적화 | □ | +| | • 모든 자격 증명 데이터가 중앙관리 되며, 자율적으로 운영되는가? | 최적화 | □ | +| 네트워크 세분화 및 그룹 간 이동 | • 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | 기존 | □ | +| | • 기본적인 경계형 네트워크 모델이 적용되어 있는가? | 기존 | □ | +| | • 시스템 중요도에 따라 네트워크가 분리되어 있는가? | 초기 | □ | +| | • 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | 초기 | □ | +| | • 네트워크가 워크로드 별로 세분화되어 보안정책이 각각 이루어지는가? | 향상 | □ | +| | • 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | 향상 | □ | +| | • 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | 향상 | □ | +| | • 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | 최적화 | □ | +| | • 재인증 없는 그룹 간 이동이 가능한가? | 최적화 | □ | +| | • 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | 최적화 | □ | + + +세부역량 +확인방법 +성숙도 +Check +시스템 +환경에 따른 +정책 관리 +- 온프레미스 환경에서 보안 정책을 수립하고 있는가? +기존 +□ +- 수동으로 보안 정책을 유지·관리하고 있는가? +기존 +□ +- 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? +초기 +□ +- 정책이 자동으로 적용되는가? +초기 +□ +- 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? +향상 +□ +- 환경 변화에 따라 정책이 동적으로 변경 가능한가? +향상 +□ +- 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? +최적화 +□ +- 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 +수 있는가? +최적화 +□ +마. 애플리케이션 및 워크로드 핵심 요소 체크리스트 예시 + +**[표 5-5]** 애플리케이션 및 워크로드 핵심 요소 체크리스트 + +세부역량 +확인방법 +성숙도 +Check +리소스 권한 +부여 및 통합 +- 접근에 대한 사용자·시스템 권한을 수동으로 관리하는가? +기존 +□ +- 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? +기존 +□ +- 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? +초기 +□ +- 모든 리소스에 대한 권한을 중앙에서 관리하는가? +초기 +□ +- 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 +접근이 가능한가? +향상 +□ +- 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? +향상 +□ +- 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 +가능한가? +최적화 +□ +- 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? +최적화 +□ +- 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? +최적화 +□ +- 모든 리소스 권한 부여가 자동화되어 있는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 시스템 환경에 따른 정책 관리 | • 온프레미스 환경에서 보안 정책을 수립하고 있는가? | 기존 | □ | +| | • 수동으로 보안 정책을 유지·관리하고 있는가? | 기존 | □ | +| | • 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | 초기 | □ | +| | • 정책이 자동으로 적용되는가? | 초기 | □ | +| | • 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안정책이 조정되는가? | 향상 | □ | +| | • 환경 변화에 따라 정책이 동적으로 변경 가능한가? | 향상 | □ | +| | • 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | 최적화 | □ | +| | • 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | 최적화 | □ | + + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 리소스 권한 부여 및 통합 | • 접근에 대한 사용자·시스템 권한을 수동으로 관리하는가? | 기존 | □ | +| | • 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | 기존 | □ | +| | • 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? | 초기 | □ | +| | • 모든 리소스에 대한 권한을 중앙에서 관리하는가? | 초기 | □ | +| | • 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | 향상 | □ | +| | • 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | 향상 | □ | +| | • 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | 최적화 | □ | +| | • 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | 최적화 | □ | +| | • 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | 최적화 | □ | +| | • 모든 리소스 권한 부여가 자동화되어 있는가? | 최적화 | □ | + + +162 | 제로트러스트 가이드라인 2.0 +세부역량 +확인방법 +성숙도 +Check +지속적인 +모니터링 및 +진행 중인 +승인 +- 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? +기존 +□ +- 보안 이벤트 기록을 수동으로 수행하는가? +기존 +□ +- 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 +분석하는가? +초기 +□ +- 시스템 변경 사항에 대하여 보안 검토를 수행하는가? +초기 +□ +- 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? +향상 +□ +- 보안 승인 프로세스를 자동화할 수 있는가? +향상 +□ +- 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? +최적화 +□ +원격 접속 +- VPN을 통해서 외부 접속을 지원하는가? +기존 +□ +- 애플리케이션에 대한 접근제어가 제한적인가? +기존 +□ +- 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? +초기 +□ +- 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? +향상 +□ +- 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? +향상 +□ +- 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 +제한하는가? +최적화 +□ +- AI를 활용하여 원격 접속 보안을 고도화 하였는가? +최적화 +□ +- AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 +차단되는가? +최적화 +□ +안전한 +애플리케이션 +배포 +- 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? +기존 +□ +- 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? +기존 +□ +- 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 +있는가? +기존 +□ +- 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? +초기 +□ +- 애플리케이션 배포 시 보안이 자동으로 적용되는가? +초기 +□ +- CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? +초기 +□ +- 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? +초기 +□ +- 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? +향상 +□ +- 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? +향상 +□ +- 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? +향상 +□ +- 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 +하였는가? +향상 +□ +- 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? +최적화 +□ +- AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 +중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 지속적인 모니터링 및 진행 중인 승인 | • 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | 기존 | □ | +| | • 보안 이벤트 기록을 수동으로 수행하는가? | 기존 | □ | +| | • 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | 초기 | □ | +| | • 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | 초기 | □ | +| | • 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | 향상 | □ | +| | • 보안 승인 프로세스를 자동화할 수 있는가? | 향상 | □ | +| | • 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | 최적화 | □ | +| 원격 접속 | • VPN을 통해서 외부 접속을 지원하는가? | 기존 | □ | +| | • 애플리케이션에 대한 접근제어가 제한적인가? | 기존 | □ | +| | • 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | 초기 | □ | +| | • 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | 향상 | □ | +| | • 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | 향상 | □ | +| | • 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | 최적화 | □ | +| | • AI를 활용하여 원격 접속 보안을 고도화 하였는가? | 최적화 | □ | +| | • AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | 최적화 | □ | +| 안전한 애플리케이션 배포 | • 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | 기존 | □ | +| | • 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | 기존 | □ | +| | • 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | 기존 | □ | +| | • 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | 초기 | □ | +| | • 애플리케이션 배포 시 보안이 자동으로 적용되는가? | 초기 | □ | +| | • CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | 초기 | □ | +| | • 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | 초기 | □ | +| | • 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | 향상 | □ | +| | • 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | 향상 | □ | +| | • 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | 향상 | □ | +| | • 애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? | 향상 | □ | +| | • 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | 최적화 | □ | +| | • AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | 최적화 | □ | + + +세부역량 +확인방법 +성숙도 +Check +애플리케이션 +인벤토리 +- 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? +기존 +□ +- 애플리케이션 기본 정보를 기록하여 관리하는가? +기존 +□ +- 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 +수 있는가? +초기 +□ +- 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 +평가·관리할 수 있는가? +향상 +□ +- AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 +반영할 수 있는가? +최적화 +□ +- 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 +이루어지고 있는가? +최적화 +□ +보안 +소프트웨어 +개발 및 통합 +- 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? +기존 +□ +- 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? +기존 +□ +- 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 +보안 취약점을 식별하는가? +초기 +□ +- DevSecOps 문화를 도입하였는가? +초기 +□ +- 주요 개발 내용에 대한 SBOM 문서를 작성하는가? +초기 +□ +- 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 +수행하는가? +향상 +□ +- 프로세스 전반에 걸친 SBOM 문서를 작성하는가? +향상 +□ +- 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? +최적화 +□ +- 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? +최적화 +□ +- 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? +최적화 +□ +소프트웨어 +위험 관리 +- 최소한의 위험 요소가 식별되고 문서화 하였는가? +기존 +□ +- 소프트웨어 위험 관리 계획이 수립되어 있는가? +기존 +□ +- 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? +초기 +□ +- 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 +이루어지는가? +향상 +□ +- AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? +최적화 +□ +- 맞춤형 공격에 대응 가능한가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 애플리케이션 인벤토리 | • 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | 기존 | □ | +| | • 애플리케이션 기본 정보를 기록하여 관리하는가? | 기존 | □ | +| | • 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? | 초기 | □ | +| | • 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가·관리할 수 있는가? | 향상 | □ | +| | • AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | 최적화 | □ | +| | • 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | 최적화 | □ | +| 보안 소프트웨어 개발 및 통합 | • 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | 기존 | □ | +| | • 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | 기존 | □ | +| | • 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | 초기 | □ | +| | • DevSecOps 문화를 도입하였는가? | 초기 | □ | +| | • 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | 초기 | □ | +| | • 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | 향상 | □ | +| | • 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | 향상 | □ | +| | • 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | 최적화 | □ | +| | • 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | 최적화 | □ | +| | • 모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? | 최적화 | □ | +| 소프트웨어 위험 관리 | • 최소한의 위험 요소가 식별되고 문서화 하였는가? | 기존 | □ | +| | • 소프트웨어 위험 관리 계획이 수립되어 있는가? | 기존 | □ | +| | • 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | 초기 | □ | +| | • 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | 향상 | □ | +| | • AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | 최적화 | □ | +| | • 맞춤형 공격에 대응 가능한가? | 최적화 | □ | + + +164 | 제로트러스트 가이드라인 2.0 +바. 데이터 핵심 요소 체크리스트 예시 + +**[표 5-6]** 데이터 핵심 요소 체크리스트 + +세부역량 +확인방법 +성숙도 +Check +데이터 +카탈로그 +위험 정렬 +- 데이터 자산의 초기 카탈로그가 작성되어 있는가? +기존 +□ +- 데이터를 파악하고, 유형 분류를 수동으로 하는가? +기존 +□ +- 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? +기존 +□ +- 자동화된 데이터 카탈로그 도구가 도입되어 있는가? +초기 +□ +- 데이터 자산을 일부 자동으로 수집하고 분류하는가? +초기 +□ +- 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? +초기 +□ +- 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? +향상 +□ +- 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 +있는가? +향상 +□ +- 데이터 사용 패턴 분석이 가능한가? +향상 +□ +- AI 기반 데이터 위험 요소를 실시간으로 분석하는가? +최적화 +□ +- 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? +최적화 +□ +기업 데이터 +거버넌스 +- 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 +있는가? +기존 +□ +- 데이터 소유자와 관리자를 지정하였는가? +기존 +□ +- 데이터 거버넌스 프레임워크가 도입되어 있는가? +기존 +□ +- 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? +초기 +□ +- 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? +향상 +□ +- 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? +향상 +□ +- 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 +가능한가? +최적화 +□ +데이터 +접근제어 +- 데이터 접근 정책이 수립되어 있는가? +기존 +□ +- 데이터 접근권한이 수동으로 부여되는가? +기존 +□ +- 중앙 집중식 접근제어 시스템이 도입되어 있는가? +초기 +□ +- 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? +초기 +□ +- ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? +향상 +□ +- 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 +조정이 가능한가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 데이터 카탈로그 위험 정렬 | • 데이터 자산의 초기 카탈로그가 작성되어 있는가? | 기존 | □ | +| | • 데이터를 파악하고, 유형 분류를 수동으로 하는가? | 기존 | □ | +| | • 데이터에 대한 기본적인 위험 평가를 문서화 하였는가? | 기존 | □ | +| | • 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | 초기 | □ | +| | • 데이터 자산을 일부 자동으로 수집하고 분류하는가? | 초기 | □ | +| | • 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | 초기 | □ | +| | • 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | 향상 | □ | +| | • 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | 향상 | □ | +| | • 데이터 사용 패턴 분석이 가능한가? | 향상 | □ | +| | • AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | 최적화 | □ | +| | • 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | 최적화 | □ | +| 기업 데이터 거버넌스 | • 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | 기존 | □ | +| | • 데이터 소유자와 관리자를 지정하였는가? | 기존 | □ | +| | • 데이터 거버넌스 프레임워크가 도입되어 있는가? | 기존 | □ | +| | • 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | 초기 | □ | +| | • 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | 향상 | □ | +| | • 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | 향상 | □ | +| | • 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | 최적화 | □ | +| 데이터 접근제어 | • 데이터 접근 정책이 수립되어 있는가? | 기존 | □ | +| | • 데이터 접근권한이 수동으로 부여되는가? | 기존 | □ | +| | • 중앙 집중식 접근제어 시스템이 도입되어 있는가? | 초기 | □ | +| | • 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | 초기 | □ | +| | • ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | 향상 | □ | +| | • 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | 최적화 | □ | + + +세부역량 +확인방법 +성숙도 +Check +데이터 +암호화 및 +권한 관리 +- 데이터를 수동으로 암호화하는가? +기존 +□ +- 암호화 정책이 수립되어 있는가? +기존 +□ +- 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? +기존 +□ +- 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? +초기 +□ +- 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? +초기 +□ +- 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? +향상 +□ +- RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? +향상 +□ +- AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 +가능한가? +최적화 +□ +- 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? +최적화 +□ +데이터 +라벨링 및 +태그 지정 +- 라벨링 및 태그 지정 지침을 수립하였는가? +기존 +□ +- 일관된 데이터 분류 체계가 마련되어 있는가? +기존 +□ +- 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별·분류하는가? +초기 +□ +- 민감한 데이터에 특수 라벨을 적용할 수 있는가? +초기 +□ +- 민감한 데이터에 보안 정책이 차등적으로 적용되는가? +초기 +□ +- 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류·식별 +가능한가? +향상 +□ +- 타 보안 시스템과 연계하여 데이터 보호가 가능한가? +향상 +□ +- 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 +적용하는가? +최적화 +□ +- AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? +최적화 +□ +데이터 손실 +방지 (DLP) +- DLP 정책을 수립하고 수동으로 평가하는가? +기존 +□ +- DLP 도입을 위한 기업 내 범위가 지정되어 있는가? +기존 +□ +- DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? +초기 +□ +- DLP 정책을 중앙에서 관리하는가? +초기 +□ +- DLP 솔루션이 모니터링 모드로 동작하는가? +초기 +□ +- DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 +방지하는가? +향상 +□ +- DLP 솔루션이 방지 모드로 사용되는가? +향상 +□ +- DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 +있는가? +최적화 +□ +- 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 데이터 암호화 및 권한 관리 | • 데이터를 수동으로 암호화하는가? | 기존 | □ | +| | • 암호화 정책이 수립되어 있는가? | 기존 | □ | +| | • 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | 기존 | □ | +| | • 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | 초기 | □ | +| | • 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | 초기 | □ | +| | • 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | 향상 | □ | +| | • RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | 향상 | □ | +| | • AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | 최적화 | □ | +| | • 데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? | 최적화 | □ | +| 데이터 라벨링 및 태그 지정 | • 라벨링 및 태그 지정 지침을 수립하였는가? | 기존 | □ | +| | • 일관된 데이터 분류 체계가 마련되어 있는가? | 기존 | □ | +| | • 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별·분류하는가? | 초기 | □ | +| | • 민감한 데이터에 특수 라벨을 적용할 수 있는가? | 초기 | □ | +| | • 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | 초기 | □ | +| | • 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류·식별 가능한가? | 향상 | □ | +| | • 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | 향상 | □ | +| | • 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | 최적화 | □ | +| | • AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가? | 최적화 | □ | +| 데이터 손실 방지 (DLP) | • DLP 정책을 수립하고 수동으로 평가하는가? | 기존 | □ | +| | • DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | 기존 | □ | +| | • DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | 초기 | □ | +| | • DLP 정책을 중앙에서 관리하는가? | 초기 | □ | +| | • DLP 솔루션이 모니터링 모드로 동작하는가? | 초기 | □ | +| | • DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | 향상 | □ | +| | • DLP 솔루션이 방지 모드로 사용되는가? | 향상 | □ | +| | • DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | 최적화 | □ | +| | • 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | 최적화 | □ | + + +166 | 제로트러스트 가이드라인 2.0 +세부역량 +확인방법 +성숙도 +Check +데이터 +모니터링 및 +감지 +- 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? +기존 +□ +- 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? +기존 +□ +- 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? +초기 +□ +- 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? +초기 +□ +- 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? +향상 +□ +- 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 +가능한가? +향상 +□ +- 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 +접근제어가 가능한가? +최적화 +□ +사. 가시성 및 분석 핵심 요소 체크리스트 예시 + +**[표 5-7]** 가시성 및 분석 핵심 요소 체크리스트 + +세부역량 +확인방법 +성숙도 +Check +모든 관련 +활동 기록 +- 로그 기록을 수동으로 수행하는가? +기존 +□ +- 로그 데이터가 특정한 시스템에서만 수집되는가? +기존 +□ +- 다양한 시스템에서 자동으로 로그를 수집하는가? +초기 +□ +- 로그 수집 및 관리가 자동화 되었는가? +초기 +□ +- 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? +향상 +□ +- 로그 기록의 무결성을 보장하는가? +향상 +□ +- 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? +향상 +□ +- 로그를 기반으로 자율 보안 체계가 구축되었는가? +최적화 +□ +- 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? +최적화 +□ +- 로그 분석을 통해 보안 정책이 자동으로 조정되는가? +최적화 +□ +중앙집중적 +보안 정보 및 +이벤트 관리 +- 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? +기존 +□ +- SIEM 시스템이 도입되었는가? +초기 +□ +- 중앙집중적 보안 관리 체계가 구축되었는가? +초기 +□ +- SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 +분석하는가? +향상 +□ +- AI 기반으로 보안 이벤트를 분석하는가? +최적화 +□ +- 비정상적인 활동에 대하여 자동 대응이 가능한가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 데이터 모니터링 및 감지 | • 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | 기존 | □ | +| | • 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | 기존 | □ | +| | • 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | 초기 | □ | +| | • 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | 초기 | □ | +| | • 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | 향상 | □ | +| | • 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | 향상 | □ | +| | • 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | 최적화 | □ | + + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 모든 관련 활동 기록 | • 로그 기록을 수동으로 수행하는가? | 기존 | □ | +| | • 로그 데이터가 특정한 시스템에서만 수집되는가? | 기존 | □ | +| | • 다양한 시스템에서 자동으로 로그를 수집하는가? | 초기 | □ | +| | • 로그 수집 및 관리가 자동화 되었는가? | 초기 | □ | +| | • 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | 향상 | □ | +| | • 로그 기록의 무결성을 보장하는가? | 향상 | □ | +| | • 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | 향상 | □ | +| | • 로그를 기반으로 자율 보안 체계가 구축되었는가? | 최적화 | □ | +| | • 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | 최적화 | □ | +| | • 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | 최적화 | □ | +| 중앙집중적 보안 정보 및 이벤트 관리 | • 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | 기존 | □ | +| | • SIEM 시스템이 도입되었는가? | 초기 | □ | +| | • 중앙집중적 보안 관리 체계가 구축되었는가? | 초기 | □ | +| | • SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | 향상 | □ | +| | • AI 기반으로 보안 이벤트를 분석하는가? | 최적화 | □ | +| | • 비정상적인 활동에 대하여 자동 대응이 가능한가? | 최적화 | □ | + + +세부역량 +확인방법 +성숙도 +Check +보안 위협 +분석 +- 보안 로그 및 데이터를 수동으로 수집하는가? +기존 +□ +- CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? +기존 +□ +- 알려진 취약점에 대한 평가 기준을 마련하였는가? +초기 +□ +- 수집된 취약점에 대한 경고가 자동으로 이루어지는가? +초기 +□ +- 자동화된 보안 위협 분석 도구를 도입하였는가? +향상 +□ +- 실시간 보안 위협 탐지가 가능한가? +향상 +□ +- AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? +최적화 +□ +사용자 및 +기기 동작 +분석 +- 사용자와 기기의 기본적인 활동 데이터를 수집하는가? +기존 +□ +- 비정상 행동을 수동으로 탐지하는가? +기존 +□ +- 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 +추적하는가? +기존 +□ +- 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? +초기 +□ +- 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? +초기 +□ +- 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? +향상 +□ +- AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 +패턴에 따라 실시간으로 대응 가능한가? +향상 +□ +- 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 +자동으로 조정하고 최소 권한을 부여할 수 있는가? +최적화 +□ +위협 +인텔리전스 +통합 +- 외부의 보안 위협 정보를 수동으로 수집하는가? +기존 +□ +- 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? +기존 +□ +- 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? +초기 +□ +- 위협 인텔리전스를 내부 시스템과 통합하였는가? +향상 +□ +- AI 기반의 위협 인텔리전스 시스템을 구축하였는가? +최적화 +□ +자동화된 +동적 정책 +- 보안 정책을 수동으로 관리하는가? +기존 +□ +- 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? +기존 +□ +- 자동화된 정책 관리 시스템을 도입하였는가? +초기 +□ +- 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? +초기 +□ +- 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 +정책을 생성하고 적용하는가? +향상 +□ +- 위협 탐지와 연계하여 동적으로 정책을 조정하는가? +향상 +□ +- AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 +자율적으로 정책을 조정하는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 보안 위협 분석 | • 보안 로그 및 데이터를 수동으로 수집하는가? | 기존 | □ | +| | • CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | 기존 | □ | +| | • 알려진 취약점에 대한 평가 기준을 마련하였는가? | 초기 | □ | +| | • 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | 초기 | □ | +| | • 자동화된 보안 위협 분석 도구를 도입하였는가? | 향상 | □ | +| | • 실시간 보안 위협 탐지가 가능한가? | 향상 | □ | +| | • AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | 최적화 | □ | +| 사용자 및 기기 동작 분석 | • 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | 기존 | □ | +| | • 비정상 행동을 수동으로 탐지하는가? | 기존 | □ | +| | • 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | 기존 | □ | +| | • 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | 초기 | □ | +| | • 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | 초기 | □ | +| | • 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | 향상 | □ | +| | • AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | 향상 | □ | +| | • 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | 최적화 | □ | +| 위협 인텔리전스 통합 | • 외부의 보안 위협 정보를 수동으로 수집하는가? | 기존 | □ | +| | • 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | 기존 | □ | +| | • 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | 초기 | □ | +| | • 위협 인텔리전스를 내부 시스템과 통합하였는가? | 향상 | □ | +| | • AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | 최적화 | □ | +| 자동화된 동적 정책 | • 보안 정책을 수동으로 관리하는가? | 기존 | □ | +| | • 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | 기존 | □ | +| | • 자동화된 정책 관리 시스템을 도입하였는가? | 초기 | □ | +| | • 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | 초기 | □ | +| | • 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | 향상 | □ | +| | • 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | 향상 | □ | +| | • AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | 최적화 | □ | + + +168 | 제로트러스트 가이드라인 2.0 +아. 자동화 및 통합 핵심 요소 체크리스트 예시 + +**[표 5-8]** 자동화 및 통합 핵심 요소 체크리스트 + +세부역량 +확인방법 +성숙도 +Check +정책 통합 +- 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? +기존 +□ +- 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? +초기 +□ +- 정책 변경이 자동으로 이루어지는가? +초기 +□ +- 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? +향상 +□ +- 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 +존재하는가? +향상 +□ +- AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 +가능한가? +최적화 +□ +중요 +프로세스 +자동화 +- 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? +기존 +□ +- 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 +절차를 자동으로 처리하는가? +초기 +□ +- 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? +초기 +□ +- 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? +향상 +□ +- 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 +프로세스를 자동으로 조정 가능한가? +최적화 +□ +인공지능 +- 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 +이루어지는가? +기존 +□ +- 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? +초기 +□ +- AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 +가능한가? +향상 +□ +- AI가 모든 보안 시스템에 완전히 통합되었는가? +최적화 +□ +- 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? +최적화 +□ +보안 통합, +자동화 및 +대응 +- 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? +기존 +□ +- 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 +개별적으로 수행되는가? +기존 +□ +- SOAR 시스템을 도입하였는가? +초기 +□ +- 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 +관리되고 있는가? +초기 +□ +- SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 +통합이 가능한가? +향상 +□ +- 여러 도구와 연동하여 신속한 위협 차단이 가능한가? +향상 +□ +- 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? +최적화 +□ +- 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 정책 통합 | • 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | 기존 | □ | +| | • 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | 초기 | □ | +| | • 정책 변경이 자동으로 이루어지는가? | 초기 | □ | +| | • 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | 향상 | □ | +| | • 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | 향상 | □ | +| | • AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | 최적화 | □ | +| 중요 프로세스 자동화 | • 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | 기존 | □ | +| | • 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | 초기 | □ | +| | • 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | 초기 | □ | +| | • 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능한가? | 향상 | □ | +| | • 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | 최적화 | □ | +| 인공지능 | • 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | 기존 | □ | +| | • 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | 초기 | □ | +| | • AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | 향상 | □ | +| | • AI가 모든 보안 시스템에 완전히 통합되었는가? | 최적화 | □ | +| | • 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정가능한가? | 최적화 | □ | +| 보안 통합, 자동화 및 대응 | • 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | 기존 | □ | +| | • 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | 기존 | □ | +| | • SOAR 시스템을 도입하였는가? | 초기 | □ | +| | • 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | 초기 | □ | +| | • SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | 향상 | □ | +| | • 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | 향상 | □ | +| | • 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | 최적화 | □ | +| | • 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | 최적화 | □ | + + +세부역량 +확인방법 +성숙도 +Check +데이터 교환 +표준화 +- 수집된 데이터가 상이한 형식으로 저장되는가? +기존 +□ +- 데이터 교환이 비효율적으로 이루어지는가? +기존 +□ +- 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? +기존 +□ +- 데이터 교환 표준을 도입하였는가? +초기 +□ +- 보안 시스템 간 데이터 교환이 자동화되었는가? +초기 +□ +- 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? +향상 +□ +- 여러 보안 도구 간의 상호 운용성이 제공되는가? +향상 +□ +- 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 +실시간으로 자동화되는가? +최적화 +□ +- 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? +최적화 +□ +- 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? +최적화 +□ +보안 운영 +조정 및 사고 +대응 +- 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? +기존 +□ +- 보안 사고 대응 절차가 정형화되어 있지 않는가? +기존 +□ +- 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? +초기 +□ +- 보안 사고가 발생하면 자동화된 경고가 생성되는가? +초기 +□ +- 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 +이루어지는가? +향상 +□ +- 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? +향상 +□ +- 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? +최적화 +□ +- 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 +대응이 가능한가? +최적화 +□ +- 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 +보고되는가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 데이터 교환 표준화 | • 수집된 데이터가 상이한 형식으로 저장되는가? | 기존 | □ | +| | • 데이터 교환이 비효율적으로 이루어지는가? | 기존 | □ | +| | • 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | 기존 | □ | +| | • 데이터 교환 표준을 도입하였는가? | 초기 | □ | +| | • 보안 시스템 간 데이터 교환이 자동화되었는가? | 초기 | □ | +| | • 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | 향상 | □ | +| | • 여러 보안 도구 간의 상호 운용성이 제공되는가? | 향상 | □ | +| | • 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | 최적화 | □ | +| | • 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | 최적화 | □ | +| | • 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | 최적화 | □ | +| 보안 운영 조정 및 사고 대응 | • 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | 기존 | □ | +| | • 보안 사고 대응 절차가 정형화되어 있지 않는가? | 기존 | □ | +| | • 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | 초기 | □ | +| | • 보안 사고가 발생하면 자동화된 경고가 생성되는가? | 초기 | □ | +| | • 사고 대응 절차가 자동화되고, 보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | 향상 | □ | +| | • 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | 향상 | □ | +| | • 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | 최적화 | □ | +| | • 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | 최적화 | □ | +| | • 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고되는가? | 최적화 | □ | + + +170 | 제로트러스트 가이드라인 2.0 + +## 제2절 + +제로트러스트 침투 시험 기반 효과성 분석 + +### 1. 제로트러스트 침투 시험을 통한 효과성 분석 방안 + +조직의 보안 취약점을 파악, 개선하는 효과적인 방법의 하나로 제로트러스트 침투 시험을 고려할 +수 있다. 해당 방법은 공격자 관점에서 실제 공격과 가장 유사한 시나리오를 구현함으로써, 조직의 +위협 대응 능력을 객관적으로 검증한다. 특히, 악성코드(멀웨어, 랜섬웨어 등) 유포, 권한 탈취 등 +다양한 공격 기법을 선제 검증하고, 보안 취약점을 종합적으로 판단하기 때문에 가장 실질적으로 +효과성을 입증하는 방법이라 할 수 있다. +제로트러스트 침투 시험은 조직의 보안 능력을 검증하여 제고한다는 점에서 보안 자생력 강화에 +효과적이다. 시험을 통해 도출한 결과를 기반으로 각 조직의 특성에 적합한 제로트러스트 보안 +솔루션을 개발, 적용할 수 있는 이유에서다. 제로트러스트 침투 시험은 조직의 보안 인식 수준 및 +보안 대응 능력을 객관적으로 파악하는 데 방점을 찍는다. 따라서 침투 시험 결과는 내부 자산의 +중요도 및 조직의 취약점을 판단하고, 이를 토대로 조직의 거시적 보안 전략을 수립하는 유의미한 +근거로 활용할 수 있다. +제로트러스트 침투 시험은 제로트러스트 아키텍처가 목표로 하는 보안 상태를 제대로 평가하기 +위하여 침투 시험의 효과성, 리소스 사용 및 실행 위험성 등을 면밀히 검토해야 한다. 또한, 실질적 +취약점을 파악하고, 체계적인 검증 프로세스를 정립해 개선 사항을 수립하고, 지속적인 모니터링 및 +개선 근거 자료를 확보할 수 있다는 장점과 함께 전문 기술 도입을 위한 경영 관리 비용 증가 등의 +단점도 존재한다. 제로트러스트 침투 시험 시 고려 사항 및 장단점을 구체적으로 살펴보면 다음과 +같다. + +가. 제로트러스트 침투 시험에서의 고려 사항 +1) 침투 시험 범위 설정 +제로트러스트 환경은 기업망 내부에서의 다양한 네트워크 세그먼트, 사용자 인증 프로세스, +기기 인증 등이 포함되므로 시험할 범위를 명확히 설정해야 한다. 시험 범위가 너무 넓거나 좁으면 +효과적인 평가를 얻기 어려우며, 내부 침투와 외부 침투를 나누어 평가하거나 특정 시스템에 중점을 +두는 등의 구체적인 목표를 설정하는 것이 중요하다. + +**[표 5-9]** 침투시험 유형 + +구분 +침투시험 유형 +Black-Box +Grey-Box +White-Box +침투 시험 목적 +외부 침투 +내부 침투 +(내부자 공격) +정밀한 공격 +사전에 부여된 권한 및 +지식 +없음 +(완전한 외부 공격자) +내부 정보 및 시스템 접근권한 +시스템·SW에 관한 완전한 +권한(소스코드 등) +[출처: Technical Guide to Information Security Testing and Assessment, NIST SP 800-115] +2) 기업망 시스템 영향 가능성 +침투 시험은 실제 환경에서 수행되므로, 시험 중 시스템 및 서비스가 공격에 영향을 받을 +가능성을 고려해야 하며, 특히 발전소, 금융기관 등 실시간 시스템이 중요한 조직의 경우, +시스템 백업 등 이에 대한 대비가 필요할 수도 있다. 실제로, 전문적으로 침투 시험을 수행하는 +화이트해커들은 실제적인 시스템 및 서비스에 영향을 초래하는 단계의 공격을 수행하지 않고, 그 +가능성을 증명하는 단계까지만 침투 시험을 수행하는 것이 통상적이다. +3) 외부 전문가에 의한 공격 시나리오 설계 +제로트러스트 아키텍처는 여러 방어 계층을 통해 보호를 강화하기 때문에, 이들을 고려하는 +다양한 공격 시나리오를 포함한 시험이 필요하다. 내부자 공격, 외부 위협, 권한 상승 시도 등을 +포함해 다양한 위협 모델을 고려해야 하며, 이를 위해 다양한 공격 기술과 최신 위협 정보를 +반영하여 침투 시험 시나리오를 설계해야 한다. + +| 구분 | 침투시험 유형 | | | +| --- | --- | --- | --- | +| | Black-Box | Grey-Box | White-Box | +| 침투 시험 목적 | 외부 침투 | 내부 침투 (내부자 공격) | 정밀한 공격 | +| 사전에 부여된 권한 및 지식 | 없음 (완전한 외부 공격자) | 내부 정보 및 시스템 접근권한 | 시스템·SW에 관한 완전한 권한(소스코드 등) | + + +172 | 제로트러스트 가이드라인 2.0 +최근에는 해당 기업 및 시스템 또는 유사한 산업군을 대상으로 활동하는 공격자의 공격 목표, +공격 사례, 피해 규모 등을 조사해, 해당 기업 및 시스템에서 발생 가능성이 높은 공격 TTP +(전술·기법·절차)를 도출하고 이를 침투 시험에 적용하는 것이 일반화되고 있다. 유럽연합(EU) +금융 인프라·기관을 대상으로 시행하는 침투 시험인 TIBER-EU의 절차를 살펴보면 TI(위협 +인텔리전스)와 RT(레드티밍)를 결합하고 있다. TI 전문업체가 대상 인프라·기관에 대한 위협을 +선제적으로 파악하고 RT 전문업체는 이를 이용해 최적화된 침투 시험 시나리오를 구성하여 침투 +시험을 실시한다. + +**[그림 5-1]** EU 금융 인프라·기관을 대상으로 시행하는 침투 시험인 TIBER-EU 프레임워크 + +Result +sharing + + + +Generic threat +landscape +Engagement +& scoping +TI/RT +services +procurement +(TIRP) +Threat +intelligence +Red +teaming +Remediation +planning +침투 시험을 개발하는 것은 고도의 전문 지식이 필요한 작업이므로, 내부 직원이 직접 계획하여 +수행하기 어렵다. 일반적으로 외부 보안 전문가나 침투 시험 전문 업체를 활용하는 것이 적절하며, +보안 담당 직원은 외부 전문가가 조직의 환경에 맞는 시나리오를 잘 이해하고 반영할 수 있도록 +충분한 정보를 제공해야 한다. +나. 제로트러스트 침투 시험의 장점 +1) 제로트러스트 아키텍처의 실질적 취약점 진단 및 위협 대응 능력 평가 +침투 시험은 이론적인 보안 상태를 평가하는 것이 아니라, 실제로 시스템이 공격을 방어할 +수 있는지 검증할 수 있는 유일한 방법이며, 제로트러스트 아키텍처를 통해 구축한 다중 인증, +네트워크 세분화, 지속적인 인증 등이 실제로 공격에 얼마나 효과적인지 테스트할 수 있다. +일반적으로 침투 시험을 통한 효과성을 분석하는 것은 공격자 관점에서 조직의 보안 상태를 +종합적으로 파악할 수 있으며, 제로트러스트 아키텍처를 적용하여 개선한 보안 체계의 안전성을 +실질적으로 살펴보고 취약점을 분석할 수 있다는 장점이 있다. + +또한, 실제 공격과 유사한 상황에서 기업이 얼마나 신속하게 탐지하고 대응하는지 평가할 수 +있으며, 제로트러스트 아키텍처의 실시간 모니터링과 자동화된 탐지 시스템이 제 기능을 하는지 +확인할 수 있다. +2) 체계적 검증 프로세스 정립 기반 취약점 식별 및 개선 사항 도출 +침투 시험 시 침투 범위 설정, 공격 시나리오 수립, 침투 시험 수행, 결과 분석 등의 과정을 통한 +보안 개선 방안을 수립하게 된다. 침투 시험은 보안 체계 내 숨겨진 취약점을 발견하는 데 매우 +유용하며, 제로트러스트 아키텍처에서도 실수나 설정 오류로 인해 발생할 수 있는 취약점을 사전에 +파악하고 수정할 수 있다. 이를 통해 제로트러스트 아키텍처의 구축 완료 후에도 지속적 개선을 +위한 기반을 마련할 수 있다. 즉, 제로트러스트 보안 체계의 종합적 검증을 통한 보안 강화 지표를 +마련하고, 보안 사고 발생에 대비한 본질적인 해결 방안을 도출 및 지속적 검증을 위한 기반 자료를 +확보할 수 있다. +다. 제로트러스트 침투 시험의 한계점 +1) 침투 시험 결과가 보안성을 완벽하게 보장하는 것은 아님 +침투 시험은 기업의 보안 체계가 일부 공격에 대응할 수 있는지를 평가하지만, 모든 상황의 위협 +시나리오를 다루는 것은 어렵다. 침투 시험 항목 및 시나리오를 만드는 것이 어려울 뿐만 아니라 +모든 보안 취약점을 점검하는 것이 사실상 불가능하며, 가능한 많은 영역을 커버하는 고도의 공격 +시나리오를 만드는 것은 여전히 어렵다. 즉, 침투 시험이 성공적이었다고 해서 완전한 보안을 +의미하지는 않으며, 지속적인 보안 개선이 필요하다. +특히 유의해야 할 점은, 침투 시험에서 설정한 공격에 모두 대응 가능했다고 하더라도, 이를 +바탕으로 모든 공격에 대응 가능한 것으로 착각하지 말아야 한다는 점이다. +최근에는, 이러한 침투 시험의 단점을 해결하는 BAS(Breach and Attack Simulation) 기술이 +발전하고 있다. BAS는 침투 시험 절차를 자동화하고 지속적으로 수행하는데 유용하며 다양한 +종류의 공격TTP를 시험할 수 있고, 이를 조합하여 복잡한 공격 시나리오를 구성할 수 있다. 특히, +제로트러스트의 각 기능을 시험하기 위한 공격 시나리오를 BAS에 구축하고 제로트러스트 솔루션과 +연계하여 그 수행결과를 확인한다면 매우 유용한 제로트러스트 기능검증 방법이 될 수 있다. + +174 | 제로트러스트 가이드라인 2.0 +2) 제로트러스트 침투 시험 도입에 따른 비용 +앞서 언급한 바와 같이, 고도의 전문 지식이 필요한 침투 시험은 외부 보안 전문가나 침투 시험 +전문 업체를 활용하여 진행하게 될 가능성이 높다. 이는 곧, 침투 시험이 상당한 비용과 시간이 +필요함을 의미한다. 또한, 제로트러스트 환경은 복잡한 설정이 많아 시험 범위가 넓어질수록 더 +많은 시간이 필요하다. 침투 시험 과정에서 비용과 시간의 발생 원인은 다음과 같이 정리할 수 있다. +- 제로트러스트에 대한 전문 지식, 해킹 기술 등 고도화된 전문 기술을 보유·실행하기 위한 도입 +비용 발생 +- 화이트 해커 등 전문 보안 인력 및 업체 투입 시 인건비 발생 + +### 2. 제로트러스트 침투 시험 시나리오 및 분석 방법 + +가. 제로트러스트 침투 시험 +제로트러스트 침투 시험은 제로트러스트 도입계획 수립(도입 전) → 도입 → 도입 효과성 +평가(도입 후) 등을 포함한 제로트러스트 도입 전·후 최소 3회 이루어질 수 있다. +첫 번째, 제로트러스트 도입 전 계획수립 단계에서는 조직의 제로트러스트 성숙도를 먼저 +측정한 후, 조직의 성숙도 목표와 측정된 성숙도의 차이를 분석하고 성숙도 목표를 만족하기 위한 +제로트러스트 제품·솔루션의 도입을 추진하게 된다. 이 과정에서 조직의 제로트러스트 성숙도 +측정에 침투 시험을 활용할 수 있다. +두 번째, 제로트러스트 제품 및 솔루션을 구축하고 운영하는 단계에서는 제로트러스트 도입 +효과성을 평가하게 되는데, 이때 침투 시험을 통해 제로트러스트 성숙도를 한번 더 측정하여 조직의 +제로트러스트 성숙도 목표를 만족하는지 평가한다. +세 번째, 제로트러스트 제품·솔루션 자체 또는 구축·운영 과정에서 보안 취약점을 내재할 수 +있으므로, 침투 시험을 통해서 이를 확인하고 조치(취약점 제거 등)를 취할 수 있다. + + +**[그림 5-2]** 제로트러스트 침투 시험 + +제로트러스트 도입계획 수립 +제로트러스트 도입 전 +침투시험 +제로트러스트 도입 후 +침투 시험 +제로트러스트 도입 후 +침투 시험 +제로트러스트 도입 +제로트러스트 도입 효과성 평가 +- 제로트러스트 도입 전 +성숙도 측정 +- 제로트러스트 성숙도 목표 +설정 +- 제로트러스트 도입계획 +수립 +- 제로트러스트 제품䞻 +솔루션 구축 +- 제로트러스트 제품䞻 +솔루션 운영 +- 제로트러스트 개념 +적용한 보안설정 등 +- 제로트러스트 도입 후 성숙도 측정 +- 제로트러스트 성숙도 목표 달성여부 평가 +- 제로트러스트 제품䞻솔루션 취약점 검증 +- 제로트러스트 기능별 +침투시험 +- 제로트러스트 성숙도 측정 +- 제로트러스트 기능별 +침투시험 +- 제로트러스트 성숙도 측정 +- 제로트러스트 제품䞻솔루션 +침투시험 +- 제로트러스트 제품䞻 +솔루션으로 도입으로 인해 +발생할 수 있는 취약점 +제거 +ZT 검증용 +침투시험 시나리오 +ZT 검증용 +침투시험 시나리오 + + +나. 제로트러스트 보안모델 적용 전·후 효과성 분석을 위한 침투시험 시나리오 예시 +가이드라인 1.0 및 본 문서 3.1절에서 언급한 기업망에서의 6가지 핵심 요소 및 2가지 교차 +기능에 대해 각 항목의 보안성을 측정할 수 있는 침투시험 시나리오를 <표 5-10>과 같이 정리할 +수 있다. 침투시험 시나리오를 구성하는 개별 공격기법은 침투시험 전문 업체들이 보유하고 있는 +공격 TTP를 이용하는 것으로 고려하였으며, 제로트러스트 성숙도 모델 상의 각 핵심 요소별 +기능(3.1절)을 반영하여 침투시험 시나리오 40개를 구성하였다. 이 중 외부 공격자 관점의 점검으로 +확인이 가능한 항목 24개는 침투시험을 수행하고, 시스템 내부 동작구조 식별을 통해서만 확인이 +가능한 항목 16개는 수요기업과의 인터뷰를 통해 점검을 수행할 수 있을 것이다. +다음 그림은 제로트러스트 침투시험 시나리오 중 네트워크 세분화 기능 검증을 위한 침투시험을 +나타낸 것으로 MITRE ATT&CK 기준 Remote System Discovery (TA0007.T1018) 공격기법을 +사용한다. 해당 침투시험 시나리오는 단말에서 동작 중인 서로 다른 애플리케이션 A, B에 침투한 +후 네트워크 스캐닝을 통해 추가 공격(횡적이동 등)을 위한 대상을 탐색하는 것이다. 제로트러스트 +도입 “전” 스캐닝 결과는 애플리케이션 A, B 모두 동일하나, 제로트러스트 도입 “후” 스캐닝 결과는 +애플리케이션 A, B 각각의 권한과 워크로드에 따라 서로 다른 스캐닝 결과가 도출되는 것을 확인할 +수 있다. + +176 | 제로트러스트 가이드라인 2.0 + +**[그림 5-3]** 제로트러스트 침투시험 예시 (네트워크 세분화 검증 시나리오) + +본 제로트러스트 침투시험 시나리오는 네트워크 세분화와 관련된 마이크로 세그멘테이션 역량에 +초점을 맞춰 수행되므로, 침투시험 결과를 「네트워크 핵심 요소 체크리스트」에 적용해 마이크로 +세그멘테이션 성숙도를 측정하면 다음 표와 같이 “초기” 수준으로 판단할 수 있다. + +**[표 5-10]** 제로트러스트 침투시험(네트워크 세분화 검증)을 통한 마이크로 세그멘테이션 성숙도 측정 (예시) + +세부역량 +확인방법 +성숙도 +Check +마이크로 +세그멘테이션 +- 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? +기존 +- 수동으로 세그먼트를 구성하는가? +기존 +□ +- 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 +설정되었는가? +초기 +□ +- 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 +탐지·차단 할 수 있는가? +초기 +- 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? +초기 +□ +- 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? +향상 +□ +- 애플리케이션별 격리 메커니즘이 적용되었는가? +향상 +□ +- AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? +최적화 +□ + +| 세부역량 | 확인방법 | 성숙도 | Check | +| --- | --- | --- | --- | +| 마이크로 세그멘테이션 | • 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | 기존 | | +| | • 수동으로 세그먼트를 구성하는가? | 기존 | □ | +| | • 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? | 초기 | □ | +| | • 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지·차단 할 수 있는가? | 초기 | | +| | • 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | 초기 | □ | +| | • 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | 향상 | □ | +| | • 애플리케이션별 격리 메커니즘이 적용되었는가? | 향상 | □ | +| | • AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | 최적화 | □ | + + +![그림 5-3 제로트러스트 침투시험 예시 (네트워크 세분화 검증 시나리오)](images/p0177_img0.png) + + +<표 5-11>은 가이드라인 2.0 기반 침투시험 시나리오 상의 시험 방안을 보인다. 앞에서 언급한 +네트워크 세분화 기능 검증을 위한 침투시험의 예시와 같이 시나리오를 구체화할 수 있으나 +절대적인 것이 아니며, <표 5-11>에서 제시한 세부 시나리오 및 공격기법은 시험 대상 시스템의 +구조, 공격 표면, 적용된 제로트러스트 세부 기능 등에 따라 구체화 방법이 달라질 수 있다. 특히 +표에 언급된 점검 형태나 MITRE ATT&CK 기반 공격 전술 및 기법 등은 예시에 불과할 뿐 절대적인 +항목이 아님을 미리 밝힌다. 침투 시험을 설계하는 전문 기업이 지속적으로 진화하는 공격 전술과 +제로트러스트 성숙도 기능 등을 반영하여, 적합한 점검 방안을 마련하여야 한다. + +**[표 5-11]** 가이드라인 2.0에 따른 침투시험 시나리오 예시 + +제로트러스트 +보안모델 +점검 +형태 +침투시험 +침투시험 +시나리오 +MITRE ATT&CK +핵심 요소 +기능 +공격전술 +(Tactic) +공격기법 +(Technique) +ID +󰋎 +식별자·신원 +(Identity) +식별자 관리 +인터뷰 +- +- +- +- +인증 +침투 +시험 +식별자 인증 효과성 +검증 시나리오 +Credential +Access +Brute Force +TA0006.T1110 +위험도 평가 +인터뷰 +- +- +- +- +접근 관리 +인터뷰 +- +- +- +- +가시성 및 분석 +침투 +시험 +식별자 행위 추적 +검증 시나리오 +Lateral +Movement +Exploitation +of Remote +Services +TA0008.T1210 +자동화 및 통합 +침투 +시험 +식별자 보안 통합 +및 자동화 검증 +시나리오 +Initial Access +Valid +Account +TA0001.T1078 +󰋏 +기기 및 +엔드포인트 +(Device/ +Endpoint) +정책 준수 +모니터링 +침투 +시험 +엔드 포인트 정책 +준수 검증 시나리오 +Defense +Evasion +Impair +Defenses +TA0005.T1562 +데이터 +접근제어 +침투 +시험 +엔드 포인트 +접근제어 검증 +시나리오 +Discovery +File and +Directory +Discovery +TA0007.T1083 +자산 관리 +인터뷰 +- +- +- +- + +| 제로트러스트 보안모델 | | 점검 형태 | 침투시험 | | | | +| --- | --- | --- | --- | --- | --- | --- | +| | | | 침투시험 시나리오 | MITRE ATT&CK | | | +| 핵심 요소 | 기능 | | | 공격전술 (Tactic) | 공격기법 (Technique) | ID | +| 󰋎 식별자·신원 (Identity) | 식별자 관리 | 인터뷰 | - | - | - | - | +| | 인증 | 침투 시험 | 식별자 인증 효과성 검증 시나리오 | Credential Access | Brute Force | TA0006.T1110 | +| | 위험도 평가 | 인터뷰 | - | - | - | - | +| | 접근 관리 | 인터뷰 | - | - | - | - | +| | 가시성 및 분석 | 침투 시험 | 식별자 행위 추적 검증 시나리오 | Lateral Movement | Exploitation of Remote Services | TA0008.T1210 | +| | 자동화 및 통합 | 침투 시험 | 식별자 보안 통합 및 자동화 검증 시나리오 | Initial Access | Valid Account | TA0001.T1078 | +| 󰋏 기기 및 엔드포인트 (Device/ Endpoint) | 정책 준수 모니터링 | 침투 시험 | 엔드 포인트 정책 준수 검증 시나리오 | Defense Evasion | Impair Defenses | TA0005.T1562 | +| | 데이터 접근제어 | 침투 시험 | 엔드 포인트 접근제어 검증 시나리오 | Discovery | File and Directory Discovery | TA0007.T1083 | +| | 자산 관리 | 인터뷰 | - | - | - | - | + + +178 | 제로트러스트 가이드라인 2.0 +제로트러스트 +보안모델 +점검 +형태 +침투시험 +침투시험 +시나리오 +MITRE ATT&CK +핵심 요소 +기능 +공격전술 +(Tactic) +공격기법 +(Technique) +ID +기기 위협 보호 +침투 +시험 +펌웨어 변조 검증 +시나리오 +Impact +Firmware +Corruption +TA0040.T1495 +침투 +시험 +비정상 행위에 대한 +EDR 탐지 검증 +시나리오 +Defense +Evasion +Hide +Artifacts +TA0005.T1564 +Discovery +Account +Discovery +TA0007.T1087 +Lateral +Movement +Remote +Services +TA0008.T1021 +가시성 및 분석 +인터뷰 +- +- +- +- +자동화 및 통합 +인터뷰 +- +- +- +- +󰋐 +네트워크 +(Network) +네트워크 +세분화 +침투 +시험 +네트워크 세분화 +검증 시나리오 +Discovery +Remote +System +Discovery +TA0007.T1018 +위협 대응 +침투 +시험 +네트워크 위협 대응 +검증 시나리오 +Lateral +Movement +Exploitation +of Remote +Services +TA0008.T1210 +트래픽 암호화 +침투 +시험 +네트워크 암호화 +검증 시나리오 +Collection +Adversary- +in-the- +Middle +TA0009.T1557 +트래픽 관리 +침투 +시험 +네트워크 토폴로지 +동적구성 검증 +시나리오 +Reconnaissance +Network +Topology +TA0043.T1590.004 +네트워크 +회복성 +침투 +시험 +DoS 공격을 이용한 +네트워크 회복성 +검증 시나리오 +Impact +Network +Denial of +Service +TA0040.T1498 +가시성 및 분석 +인터뷰 +- +- +- +- +자동화 및 통합 +인터뷰 +- +- +- +- + +| 제로트러스트 보안모델 | | 점검 형태 | 침투시험 | | | | +| --- | --- | --- | --- | --- | --- | --- | +| | | | 침투시험 시나리오 | MITRE ATT&CK | | | +| 핵심 요소 | 기능 | | | 공격전술 (Tactic) | 공격기법 (Technique) | ID | +| | 기기 위협 보호 | 침투 시험 | 펌웨어 변조 검증 시나리오 | Impact | Firmware Corruption | TA0040.T1495 | +| | | 침투 시험 | 비정상 행위에 대한 EDR 탐지 검증 시나리오 | Defense Evasion | Hide Artifacts | TA0005.T1564 | +| | | | | Discovery | Account Discovery | TA0007.T1087 | +| | | | | Lateral Movement | Remote Services | TA0008.T1021 | +| | 가시성 및 분석 | 인터뷰 | - | - | - | - | +| | 자동화 및 통합 | 인터뷰 | - | - | - | - | +| 󰋐 네트워크 (Network) | 네트워크 세분화 | 침투 시험 | 네트워크 세분화 검증 시나리오 | Discovery | Remote System Discovery | TA0007.T1018 | +| | 위협 대응 | 침투 시험 | 네트워크 위협 대응 검증 시나리오 | Lateral Movement | Exploitation of Remote Services | TA0008.T1210 | +| | 트래픽 암호화 | 침투 시험 | 네트워크 암호화 검증 시나리오 | Collection | Adversary- in-the- Middle | TA0009.T1557 | +| | 트래픽 관리 | 침투 시험 | 네트워크 토폴로지 동적구성 검증 시나리오 | Reconnaissance | Network Topology | TA0043.T1590.004 | +| | 네트워크 회복성 | 침투 시험 | DoS 공격을 이용한 네트워크 회복성 검증 시나리오 | Impact | Network Denial of Service | TA0040.T1498 | +| | 가시성 및 분석 | 인터뷰 | - | - | - | - | +| | 자동화 및 통합 | 인터뷰 | - | - | - | - | + + +제로트러스트 +보안모델 +점검 +형태 +침투시험 +침투시험 +시나리오 +MITRE ATT&CK +핵심 요소 +기능 +공격전술 +(Tactic) +공격기법 +(Technique) +ID +󰋑 +시스템 +(System) +접근통제 +침투 +시험 +시스템 접근 통제 +시나리오 +Lateral +Movement +Remote +Services +TA0008.T1021 +시스템 계정 +관리 +침투 +시험 +시스템 계정 관리 +시나리오 +Lateral +Movement +Remote +Services +TA0008.T1021 +네트워크 분리 +정책 +침투 +시험 +시스템 네트워크 +분리 정책 시나리오 +Lateral +Movement +Remote +Services +TA0008.T1021 +시스템 보안 및 +정책 관리 +인터뷰 +- +- +- +- +가시성 및 분석 +인터뷰 +- +- +- +- +자동화 및 통합 +인터뷰 +- +- +- +- +󰋒 +애플리케이션 +및 워크로드 +(Application +& Workload) +애플리케이션 +접근 +침투 +시험 +애플리케이션 접근 +인가 검증 시나리오 +Execution +User +Execution +TA0002.T1204 +애플리케이션 +위협 보호 +인터뷰 +- +- +- +- +접근 가능한 +애플리케이션 +인터뷰 +- +- +- +- +안전한 +애플리케이션 +배포 +침투 +시험 +애플리케이션 +공급망 공격을 +이용한 안전한 배포 +검증 시나리오 +Initial Access +Supply Chain +Compromise +TA0027.T1474 +소프트웨어· +애플리케이션 +보안 +침투 +시험 +응용 소프트웨어 +보안 검증 시나리오 +Initial Access +Exploit +Public- +Facing +Application +TA0001.T1190 +가시성 및 분석 +인터뷰 +- +- +- +- +자동화 및 통합 +침투 +시험 +응용 소프트웨어 +보안 자동화 검증 +시나리오 +Privilege +Escalation +Create or +Modify +System +Process +TA0004.T1543 + +| 제로트러스트 보안모델 | | 점검 형태 | 침투시험 | | | | +| --- | --- | --- | --- | --- | --- | --- | +| | | | 침투시험 시나리오 | MITRE ATT&CK | | | +| 핵심 요소 | 기능 | | | 공격전술 (Tactic) | 공격기법 (Technique) | ID | +| 󰋑 시스템 (System) | 접근통제 | 침투 시험 | 시스템 접근 통제 시나리오 | Lateral Movement | Remote Services | TA0008.T1021 | +| | 시스템 계정 관리 | 침투 시험 | 시스템 계정 관리 시나리오 | Lateral Movement | Remote Services | TA0008.T1021 | +| | 네트워크 분리 정책 | 침투 시험 | 시스템 네트워크 분리 정책 시나리오 | Lateral Movement | Remote Services | TA0008.T1021 | +| | 시스템 보안 및 정책 관리 | 인터뷰 | - | - | - | - | +| | 가시성 및 분석 | 인터뷰 | - | - | - | - | +| | 자동화 및 통합 | 인터뷰 | - | - | - | - | +| 󰋒 애플리케이션 및 워크로드 (Application & Workload) | 애플리케이션 접근 | 침투 시험 | 애플리케이션 접근 인가 검증 시나리오 | Execution | User Execution | TA0002.T1204 | +| | 애플리케이션 위협 보호 | 인터뷰 | - | - | - | - | +| | 접근 가능한 애플리케이션 | 인터뷰 | - | - | - | - | +| | 안전한 애플리케이션 배포 | 침투 시험 | 애플리케이션 공급망 공격을 이용한 안전한 배포 검증 시나리오 | Initial Access | Supply Chain Compromise | TA0027.T1474 | +| | 소프트웨어· 애플리케이션 보안 | 침투 시험 | 응용 소프트웨어 보안 검증 시나리오 | Initial Access | Exploit Public- Facing Application | TA0001.T1190 | +| | 가시성 및 분석 | 인터뷰 | - | - | - | - | +| | 자동화 및 통합 | 침투 시험 | 응용 소프트웨어 보안 자동화 검증 시나리오 | Privilege Escalation | Create or Modify System Process | TA0004.T1543 | + + +180 | 제로트러스트 가이드라인 2.0 +제로트러스트 +보안모델 +점검 +형태 +침투시험 +침투시험 +시나리오 +MITRE ATT&CK +핵심 요소 +기능 +공격전술 +(Tactic) +공격기법 +(Technique) +ID +󰋓 +데이터 +(Data) +데이터 목록 +관리 +인터뷰 +- +- +- +- +접근 결정방법 +침투 +시험 +데이터 접근제어 +검증 시나리오 +Collection +Data from +Local +System +TA0009.T1005 +데이터 암호화 +침투 +시험 +데이터 암호화 검증 +시나리오 +Defense +Evasion +Obfuscated +Files or +Information +TA0005.T1027 +데이터 분류 +인터뷰 +- +- +- +- +데이터 손실 +방지 +침투 +시험 +DLP 우회를 이용한 +데이터 손실방지 +검증 시나리오 +Exfiltration +Exfiltration +over Web +Service +TA0010.T1567 +Transfer +Data to +Cloud +Account +TA0010.T1537 +Exfiltration +over +Alternative +Protocol +TA0010.T1048 +가시성 및 분석 +침투 +시험 +데이터 추적 검증 +시나리오 +Execution +User +Execution +TA0002.T1204 +자동화 및 통합 +침투 +시험 +데이터 보안 자동화 +검증 시나리오 +Collection +Data from +Local +System +TA0009.T1005 + +| 제로트러스트 보안모델 | | 점검 형태 | 침투시험 | | | | +| --- | --- | --- | --- | --- | --- | --- | +| | | | 침투시험 시나리오 | MITRE ATT&CK | | | +| 핵심 요소 | 기능 | | | 공격전술 (Tactic) | 공격기법 (Technique) | ID | +| 󰋓 데이터 (Data) | 데이터 목록 관리 | 인터뷰 | - | - | - | - | +| | 접근 결정방법 | 침투 시험 | 데이터 접근제어 검증 시나리오 | Collection | Data from Local System | TA0009.T1005 | +| | 데이터 암호화 | 침투 시험 | 데이터 암호화 검증 시나리오 | Defense Evasion | Obfuscated Files or Information | TA0005.T1027 | +| | 데이터 분류 | 인터뷰 | - | - | - | - | +| | 데이터 손실 방지 | 침투 시험 | DLP 우회를 이용한 데이터 손실방지 검증 시나리오 | Exfiltration | Exfiltration over Web Service | TA0010.T1567 | +| | | | | | Transfer Data to Cloud Account | TA0010.T1537 | +| | | | | | Exfiltration over Alternative Protocol | TA0010.T1048 | +| | 가시성 및 분석 | 침투 시험 | 데이터 추적 검증 시나리오 | Execution | User Execution | TA0002.T1204 | +| | 자동화 및 통합 | 침투 시험 | 데이터 보안 자동화 검증 시나리오 | Collection | Data from Local System | TA0009.T1005 | + + +제로트러스트 +가이드라인 2.0 + + +## 제1절 용어 및 약어 정의 + + +## 제2절 국내 기업 제로트러스트 인식 수준 + + +## 제3절 제로트러스트 아키텍처 참조 모델 + +실증 사례 + +## 제4절 미 연방정부 제로트러스트 도입·실증 + +현황 + +## 제5절 성숙도 모델 개념 + + +## 제6절 ISMS-P 인증기준과 제로트러스트 + +성숙도 모델 연계 + +## 제7절 참고 문헌 + +부 록 + +184 | 제로트러스트 가이드라인 2.0 + +## 제1절 + +용어 및 약어 정의 + +### 1. 용어 정의 + +표 S-1 제로트러스트 가이드라인 2.0 용어 정의 +용어 +정의 +기능 +(Function) +‣ 어떤 일이나 목적, 요구사항을 달성하기 위해 필요한 능력 +‣ 제로트러스트 성숙도 모델 2.0에서 정의하는 기능은, 기업망에서 제로트러스트 아키텍처를 +구현하는데 있어서 필요한 보안 능력을 의미 +리소스 +(Resource) +‣ 데이터를 포함하여 기업망 내부에서 보호 대상이 되는 모든 종류의 디지털 자산을 +의미하며, 데이터 외에도 프린터, 컴퓨팅 리소스, IoT 액추에이터 등을 포함하기도 함 +비인간개체 +(NPE, Non-Person Entity) +‣ 기업망에서 사용자가 아닌 기기, 서버, 애플리케이션, 서비스 등으로 특정 리소스에 접근을 +하는 접근 주체 역할을 수행할 수 있으며, 이 경우 신원 확인 및 권한 검증, 신뢰도 확인 +등이 이루어져야 함 +세부역량 +(Capability) +‣ 일련의 작업을 수행하기 위한 수단과 방법의 조합을 통해 원하는 요구사항 혹은 효과를 +달성할 수 있는 능력 및 이를 바탕으로 구현되는 구체적 기능 +워크로드 +(Workload) +‣ 기업망에서 시스템, 애플리케이션 등이 처리해야 하는 작업 혹은 일련의 작업 리스트 +등을 의미하며, 제로트러스트 관점에서는 온프레미스 혹은 클라우드에 위치한 리소스에 +접근하는 모든 서비스, 애플리케이션 및 솔루션 등을 포괄 +접근 +(Access) +‣ 접근 주체가 리소스를 이용하는 과정으로, 단순히 데이터를 읽는 것 뿐만 아니라 수정, 삭제 +및 데이터 이외의 디지털 자산에 데이터를 전송하거나 전송받는 등의 행위를 포함 +접근 주체 +(Subject) +‣ 사용자와 애플리케이션(혹은 서비스), 기기의 조합이며, 여기에 악의적인 공격자 혹은 +불법적인 애플리케이션, 감염된 기기 등이 포함될 수 있음 +정책결정지점 +(PDP, Policy Decision +Point) +‣ 접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하여 이를 정책시행지점 +(PEP)에게 명령하는 논리적 개체로, 정책 엔진(PE)과 정책 관리자(PA)로 구성 + +| 용어 | 정의 | +| --- | --- | +| 기능 (Function) | ‣ 어떤 일이나 목적, 요구사항을 달성하기 위해 필요한 능력 ‣ 제로트러스트 성숙도 모델 2.0에서 정의하는 기능은, 기업망에서 제로트러스트 아키텍처를 구현하는데 있어서 필요한 보안 능력을 의미 | +| 리소스 (Resource) | ‣ 데이터를 포함하여 기업망 내부에서 보호 대상이 되는 모든 종류의 디지털 자산을 의미하며, 데이터 외에도 프린터, 컴퓨팅 리소스, IoT 액추에이터 등을 포함하기도 함 | +| 비인간개체 (NPE, Non-Person Entity) | ‣ 기업망에서 사용자가 아닌 기기, 서버, 애플리케이션, 서비스 등으로 특정 리소스에 접근을 하는 접근 주체 역할을 수행할 수 있으며, 이 경우 신원 확인 및 권한 검증, 신뢰도 확인 등이 이루어져야 함 | +| 세부역량 (Capability) | ‣ 일련의 작업을 수행하기 위한 수단과 방법의 조합을 통해 원하는 요구사항 혹은 효과를 달성할 수 있는 능력 및 이를 바탕으로 구현되는 구체적 기능 | +| 워크로드 (Workload) | ‣ 기업망에서 시스템, 애플리케이션 등이 처리해야 하는 작업 혹은 일련의 작업 리스트 등을 의미하며, 제로트러스트 관점에서는 온프레미스 혹은 클라우드에 위치한 리소스에 접근하는 모든 서비스, 애플리케이션 및 솔루션 등을 포괄 | +| 접근 (Access) | ‣ 접근 주체가 리소스를 이용하는 과정으로, 단순히 데이터를 읽는 것 뿐만 아니라 수정, 삭제 및 데이터 이외의 디지털 자산에 데이터를 전송하거나 전송받는 등의 행위를 포함 | +| 접근 주체 (Subject) | ‣ 사용자와 애플리케이션(혹은 서비스), 기기의 조합이며, 여기에 악의적인 공격자 혹은 불법적인 애플리케이션, 감염된 기기 등이 포함될 수 있음 | +| 정책결정지점 (PDP, Policy Decision Point) | ‣ 접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하여 이를 정책시행지점 (PEP)에게 명령하는 논리적 개체로, 정책 엔진(PE)과 정책 관리자(PA)로 구성 | + + +부록 | 185 +용어 +정의 +정책 관리자 +(PA, Policy Administrator) +‣ 접근 주체와 리소스 사이의 통신 경로를 생성하거나 취소하기 위한 결정을 정책시행지점 +(PEP)에게 전달하는 논리 개체 +정책 엔진 +(PE, Policy Engine) +‣ 접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하는 논리적 개체로, 정책정보 +지점(PIP)으로부터 신뢰도를 평가할 수 있는 알고리즘에 대한 입력을 수신하여, 현재 +리소스 접근 요청을 승인하거나 거부 혹은 현재 연결 중인 상태의 접근을 취소할 수 있음 +정책시행지점 +(PEP, Policy Enforcement +Point) +‣ 접근 주체와 리소스 사이를 연결하고 모니터링하며 최종적으로 연결을 종료하는 논리적 +개체로, PDP의 정책 관리자에게 접근 요청을 전달하고 접근 승인 여부를 전달받아 현재 +접근 세션에 직접 반영 +정책정보지점 +(PIP, Policy Information +Point) +‣ 정책결정지점이 정책 결정을 내리는 데 활용하기 위해서 수집한 사용자, 기기 관련 정보 +및 기타 정책 관련 정보를 제공하는 논리적 개체로, 이러한 정보에는 기업이 생성하거나 +제어하지 않는 외부 데이터와 기업 내부적으로 생성되는 내부 데이터로 분류할 수 있으며 +규제·내부규정, 데이터 접근 정책, 보안 이벤트, 위협 인텔리전스, 사용자 및 기기 인증 +정보, 네트워크 및 시스템 상의 행위 로그 등을 포함할 수 있음 +제로트러스트 +(Zero Trust) +‣ 위협이 언제 어디서든 발생 가능하다는 인식하에 기업 내부의 네트워크, 시스템 혹은 +리소스에 접근하고자 하는 어떤 사용자·기기에 대해서도 지속 인증, 세밀한 접근제어를 +통한 최소 권한 부여 등 적극적인 신뢰도 평가 없이 접근을 허용하지 않는 보안 모델 및 +이를 구현·실체화하기 위한 아이디어의 집합을 의미 +‣ 영어 원문을 발음대로 쓴 표현으로 두 단어의 결합인 점을 고려하면 ‘제로 트러스트’라고 +표현할 수 있으나, 이 문구가 ‘제로(무)’와 ‘트러스트(신뢰)’의 단순 단어 결합이 아닌 새로운 +보안 모델로서의 의미를 담고 있음을 고려하고 독자들이 해당 의미를 받아들이는 데 도움이 +될 수 있도록 본 가이드라인에서는 두 단어를 붙인 형태의 새로운 단어로 표현하고 있음 +제로트러스트 아키텍처 +(Zero Trust Architecture) +‣ 제로트러스트의 개념을 활용하여 기업 내부의 네트워크, 시스템 및 리소스를 보호할 수 +있는 추상적인 보안 구조이며 해당 목적을 달성하기 위한 기업망의 구성 요소, 구성 요소 간 +인터페이스 정의와 인증, 접근제어, 보안 모니터링 및 가시화 등 보안 정책을 포함 +컨텍스트 +(Context) +‣ 특정 접근 주체가 리소스에 접근할 때 접근제어 및 신뢰도 평가에 있어 활용될 수 있는 모든 +상황 정보를 의미하며, 이러한 정보에는 사용자의 신원, 기기 상태 및 위치, 사용자의 실행 +애플리케이션, 접속 시간, 접근하고자 하는 리소스, 네트워크 상태 등을 포함할 수 있음 +‣ 제로트러스트 성숙도 수준이 높아질 경우 가급적 많은 컨텍스트 정보를 실시간으로 +확보하여 현재 접근 요청에 대해 동적으로 신뢰도를 판단하기 위해 사용함 +프로비저닝 +(Provisioning) +‣ 기업망에서 사용자, 기기 등이 서비스를 받기 위해 필요한 리소스 및 이에 대한 접근권한, +정책 등을 사전에 준비하고 배포하는 절차 및 과정을 의미 + +| 용어 | 정의 | +| --- | --- | +| 정책 관리자 (PA, Policy Administrator) | ‣ 접근 주체와 리소스 사이의 통신 경로를 생성하거나 취소하기 위한 결정을 정책시행지점 (PEP)에게 전달하는 논리 개체 | +| 정책 엔진 (PE, Policy Engine) | ‣ 접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하는 논리적 개체로, 정책정보 지점(PIP)으로부터 신뢰도를 평가할 수 있는 알고리즘에 대한 입력을 수신하여, 현재 리소스 접근 요청을 승인하거나 거부 혹은 현재 연결 중인 상태의 접근을 취소할 수 있음 | +| 정책시행지점 (PEP, Policy Enforcement Point) | ‣ 접근 주체와 리소스 사이를 연결하고 모니터링하며 최종적으로 연결을 종료하는 논리적 개체로, PDP의 정책 관리자에게 접근 요청을 전달하고 접근 승인 여부를 전달받아 현재 접근 세션에 직접 반영 | +| 정책정보지점 (PIP, Policy Information Point) | ‣ 정책결정지점이 정책 결정을 내리는 데 활용하기 위해서 수집한 사용자, 기기 관련 정보 및 기타 정책 관련 정보를 제공하는 논리적 개체로, 이러한 정보에는 기업이 생성하거나 제어하지 않는 외부 데이터와 기업 내부적으로 생성되는 내부 데이터로 분류할 수 있으며 규제·내부규정, 데이터 접근 정책, 보안 이벤트, 위협 인텔리전스, 사용자 및 기기 인증 정보, 네트워크 및 시스템 상의 행위 로그 등을 포함할 수 있음 | +| 제로트러스트 (Zero Trust) | ‣ 위협이 언제 어디서든 발생 가능하다는 인식하에 기업 내부의 네트워크, 시스템 혹은 리소스에 접근하고자 하는 어떤 사용자·기기에 대해서도 지속 인증, 세밀한 접근제어를 통한 최소 권한 부여 등 적극적인 신뢰도 평가 없이 접근을 허용하지 않는 보안 모델 및 이를 구현·실체화하기 위한 아이디어의 집합을 의미 ‣ 영어 원문을 발음대로 쓴 표현으로 두 단어의 결합인 점을 고려하면 ‘제로 트러스트’라고 표현할 수 있으나, 이 문구가 ‘제로(무)’와 ‘트러스트(신뢰)’의 단순 단어 결합이 아닌 새로운 보안 모델로서의 의미를 담고 있음을 고려하고 독자들이 해당 의미를 받아들이는 데 도움이 될 수 있도록 본 가이드라인에서는 두 단어를 붙인 형태의 새로운 단어로 표현하고 있음 | +| 제로트러스트 아키텍처 (Zero Trust Architecture) | ‣ 제로트러스트의 개념을 활용하여 기업 내부의 네트워크, 시스템 및 리소스를 보호할 수 있는 추상적인 보안 구조이며 해당 목적을 달성하기 위한 기업망의 구성 요소, 구성 요소 간 인터페이스 정의와 인증, 접근제어, 보안 모니터링 및 가시화 등 보안 정책을 포함 | +| 컨텍스트 (Context) | ‣ 특정 접근 주체가 리소스에 접근할 때 접근제어 및 신뢰도 평가에 있어 활용될 수 있는 모든 상황 정보를 의미하며, 이러한 정보에는 사용자의 신원, 기기 상태 및 위치, 사용자의 실행 애플리케이션, 접속 시간, 접근하고자 하는 리소스, 네트워크 상태 등을 포함할 수 있음 ‣ 제로트러스트 성숙도 수준이 높아질 경우 가급적 많은 컨텍스트 정보를 실시간으로 확보하여 현재 접근 요청에 대해 동적으로 신뢰도를 판단하기 위해 사용함 | +| 프로비저닝 (Provisioning) | ‣ 기업망에서 사용자, 기기 등이 서비스를 받기 위해 필요한 리소스 및 이에 대한 접근권한, 정책 등을 사전에 준비하고 배포하는 절차 및 과정을 의미 | + + +186 | 제로트러스트 가이드라인 2.0 + +### 2. 약어 정의 + +- ABAC +Attribute-Based Access Control +- ACL +Access Control List +- AI +Artificial Intelligence +- API +Application Programming Interface +- AV +Anti-Virus +- BYOD +Bring Your Own Device +- CCTV +Closed Circuit TeleVision +- CEO +Chief Executive Officer +- CESS +Customer Edge Security Stack +- CISO +Chief Information Security Officer +- CI/CD +Continuous Integration/Continuous Deployment +- CNAPP +Cloud Native Application Protection Platform +- CSP +Cloud Service Provider +- CTI +Cyber Threat Intelligence +- CVE +Common Vulnerabilities and Exposures +- DB +Data-Base +- DDoS +Distributed Denial of Service +- DLP +Data Loss Prevention +- DMZ +De-Militarized Zone +- DoS +Denial of Service +- DRM +Digital Rights Management +- EDR +Endpoint Detection and Response +- EIG +Enhanced Identity Governance +- FCEB +Federal Civilian Executive Branch +- FIDO +Fast IDentity Online +- FIM +File Integrity Monitoring +- HW +Hard-Ware +- IaaS +Infrastructure-as-a-Service +- ICAM +Identity, Credential and Access Management +- IDP +IDentity Provider +- IDS +Intrusion Detection System +- IL +Impact Level +- ILM +Identity Lifecycle Management +- IoT +Internet of Thing +- IPS +Intrusion Protection System +- ISMS +Information Security Management System +- ISMS-P +Personal Information & Information Security Management System +- JIT/JEA +Just-In Time/Just-Enough Access +- MDM +Mobile Device Management + +부록 | 187 +- MFA +Multi-Factor Authentication +- ML +Machine Learning +- MSA +Micro-Service Architecture +- NAC +Network Access Control +- NPE +Non-Person Entity +- OS +Operating System +- PA +Policy Administrator +- PaaS +Platform as a Service +- PAM +Privileged Access Management +- PDP +Policy Decision Point +- PE +Policy Engine +- PEP +Policy Enforcement Point +- PIP +Policy Information Point +- PKI +Public Key Infrastructure +- PW +Pass-Word +- RBAC +Role-Based Access Control +- RDP +Remote Desktop Protocol +- SaaS +Software as a Service +- SASE +Secure Access Service Edge +- SBOM +Software Bill Of Materials +- SDLC +Software Development Life-Cycle +- SDN +Software-Defined Networking +- SDP +Software-Defined Perimeter +- SMS +Short Message Service +- SOAR +Security Orchestration, Automation and Response +- SOC +Security Operation Center +- SPA +Single Packet Authorization +- SSE +Security Service Edge +- SSO +Single Sign On +- SW +Soft-Ware +- TTP +Tactics, Techniques & Procedures +- UEM +Unified Endpoint Management +- URL +Uniform Resource Locator +- VDI +Virtual Desktop Infrastructure +- VM +Virtual Machine +- VPN +Virtual Private Network +- XDR +eXtended Detection and Response +- ZT +Zero Trust +- ZTA +Zero Trust Architecture +- ZTNA +Zero Trust Network Access + +188 | 제로트러스트 가이드라인 2.0 + +### 3. 보안 기술 및 솔루션 용어 설명 + +표 S-2 보안 기술 및 솔루션 용어 설명 +용 어 +의 미 +ABAC +(Attribute-Based Access +Control) +‣ 속성 기반 접근제어 모델로, 속성 정보(사용자의 속성, 기기 정보, 위치 정보)를 사용하여 +접근제어 관리하는 보안 모델 +‣ 예를 들어, 사용자가 접근하려는 리소스의 위치나 사용자가 접속하는 기기 등의 속성에 따라 +접근을 허용하거나 거부 가능 +AV +(AntiVirus) +‣ 컴퓨터 바이러스, 랜섬웨어 등 악성 코드를 탐지하고 방어하기 위한 보안 솔루션 +CASB +(Cloud Access Security +Broker) +‣ 클라우드 기반 리소스에 접근할 때 기업(조직) 보안 정책을 결합·개입하기 위해 클라우드 +서비스 소비자와 클라우드 서비스 공급자 사이에 배치되는 온프레미스 또는 클라우드 기반 +PEP +‣ 다양한 보안 정책(예, 인증, Single Sign-On, 권한 부여, 자격 증명 매핑, 기기 프로파일링, +암호화, 토큰화, 로깅, 경고, 멀웨어 탐지·방지) 시행 통합 솔루션 +CDM +(Continuous diagnostics +and mitigation) +‣ CISA에서 연방 정부 네트워크 및 시스템의 사이버 보안을 강화하기 위한 동적 접근 방법을 +제공하는 프로그램으로, 다음 방법을 통해 참여 기관이 보안 상태를 개선하는데 도움을 주는 +사이버 보안 도구, 통합 서비스, 대시 보드를 산출 +- 기관에 대한 공격 표면 감소 +- 연방 사이버 보안 상태에 가시성 증가 +- 연방 사이버 보안 응답 능력 개선 +- 연방 정보보안 현대화 법(FISMA)의 보고 절차 현대화(능률화) +CESS +(Customer Edge Security +Stack) +‣ 미 국방부 Thunderdome 프로젝트에서 포함하고 있는 보안 기능의 모음으로, 네트워크 +보안 기능(NGFW, IDS·IPS)들을 엣지에서 사용자에게 좀 더 가깝게 이동한 것 +CI/CD +(Continuous Integration/ +Continuous Deployment) +‣ 소프트웨어 개발 및 배포 프로세스의 자동화를 의미하는 용어로, 개발부터 배포까지의 +과정에서 코드 통합, 테스트, 릴리스, 배포를 빠르고 지속적으로 자동화하여 소프트웨어의 +품질을 높이고 배포 시간을 단축하는데 중점을 둔 개발 방식 +CTI +(Cyber-Threat +Intelligence) +‣ 사이버 공격과 관련된 정보를 수집, 분석, 해석하여 보안 방어를 강화하는 전략적 정보 +‣ 이를 통해 조직은 잠재적 또는 실제 사이버 위협에 대해 더 깊이 이해하고, 사전 예방적 +대응을 할 수 있으며, 주로 사이버 공격의 동향, 공격자의 의도, 공격 기법, 표적 정보 등을 +분석하는 데 사용 +Data Tagging +‣ 데이터 태깅은 관리, 검색 및 분석을 더 쉽게 만드는 방식으로 데이터에 레이블을 지정 +하거나 분류하는 프로세스 (레이블 또는 태그는 수동 또는 자동으로 적용할 수 있으며 범주, +속성 또는 기타 관련 특성별로 데이터를 구성하는 데 사용 가능) +‣ 데이터 관리·분석에 중요한 역할을 하며, 데이터를 분류하고 레이블을 지정함으로써 기관의 +생산성, 정확성 및 협업 개선 가능 + +| 용 어 | 의 미 | +| --- | --- | +| ABAC (Attribute-Based Access Control) | ‣ 속성 기반 접근제어 모델로, 속성 정보(사용자의 속성, 기기 정보, 위치 정보)를 사용하여 접근제어 관리하는 보안 모델 ‣ 예를 들어, 사용자가 접근하려는 리소스의 위치나 사용자가 접속하는 기기 등의 속성에 따라 접근을 허용하거나 거부 가능 | +| AV (AntiVirus) | ‣ 컴퓨터 바이러스, 랜섬웨어 등 악성 코드를 탐지하고 방어하기 위한 보안 솔루션 | +| CASB (Cloud Access Security Broker) | ‣ 클라우드 기반 리소스에 접근할 때 기업(조직) 보안 정책을 결합·개입하기 위해 클라우드 서비스 소비자와 클라우드 서비스 공급자 사이에 배치되는 온프레미스 또는 클라우드 기반 PEP ‣ 다양한 보안 정책(예, 인증, Single Sign-On, 권한 부여, 자격 증명 매핑, 기기 프로파일링, 암호화, 토큰화, 로깅, 경고, 멀웨어 탐지·방지) 시행 통합 솔루션 | +| CDM (Continuous diagnostics and mitigation) | ‣ CISA에서 연방 정부 네트워크 및 시스템의 사이버 보안을 강화하기 위한 동적 접근 방법을 제공하는 프로그램으로, 다음 방법을 통해 참여 기관이 보안 상태를 개선하는데 도움을 주는 사이버 보안 도구, 통합 서비스, 대시 보드를 산출 - 기 관에 대한 공격 표면 감소 - 연 방 사이버 보안 상태에 가시성 증가 - 연 방 사이버 보안 응답 능력 개선 - 연 방 정보보안 현대화 법(FISMA)의 보고 절차 현대화(능률화) | +| CESS (Customer Edge Security Stack) | ‣ 미 국방부 Thunderdome 프로젝트에서 포함하고 있는 보안 기능의 모음으로, 네트워크 보안 기능(NGFW, IDS·IPS)들을 엣지에서 사용자에게 좀 더 가깝게 이동한 것 | +| CI/CD (Continuous Integration/ Continuous Deployment) | ‣ 소프트웨어 개발 및 배포 프로세스의 자동화를 의미하는 용어로, 개발부터 배포까지의 과정에서 코드 통합, 테스트, 릴리스, 배포를 빠르고 지속적으로 자동화하여 소프트웨어의 품질을 높이고 배포 시간을 단축하는데 중점을 둔 개발 방식 | +| CTI (Cyber-Threat Intelligence) | ‣ 사이버 공격과 관련된 정보를 수집, 분석, 해석하여 보안 방어를 강화하는 전략적 정보 ‣ 이를 통해 조직은 잠재적 또는 실제 사이버 위협에 대해 더 깊이 이해하고, 사전 예방적 대응을 할 수 있으며, 주로 사이버 공격의 동향, 공격자의 의도, 공격 기법, 표적 정보 등을 분석하는 데 사용 | +| Data Tagging | ‣ 데이터 태깅은 관리, 검색 및 분석을 더 쉽게 만드는 방식으로 데이터에 레이블을 지정 하거나 분류하는 프로세스 (레이블 또는 태그는 수동 또는 자동으로 적용할 수 있으며 범주, 속성 또는 기타 관련 특성별로 데이터를 구성하는 데 사용 가능) ‣ 데이터 관리·분석에 중요한 역할을 하며, 데이터를 분류하고 레이블을 지정함으로써 기관의 생산성, 정확성 및 협업 개선 가능 | + + +부록 | 189 +용 어 +의 미 +DevSecOps +‣ 데브섹옵스(DevSecOps)란 소프트웨어 개발(Development)과 운영(Operation), +보안(Security)의 합성어로 애플리케이션 개발자와 운영, 보안 실무자 간의 소통과 협업, +통합을 강조하는 개발 문화를 의미 +‣ 직무분리 및 책임추적성 등을 위해 개발과 운영, 보안조직을 분리 운영했던 과거 IT 조직 +체계로는 급속도로 변화하는 비즈니스 환경에서 발생하는 문제점 해결을 위해, DevOps와 +보안(Security)이 결합하여 개발 파이프라인의 과정에서 보안 정책 및 기술 반영 +DLP +(Data Loss Prevention) +‣ 중요한 데이터에 대한 무단 접근, 사용, 공개 또는 손실 등을 식별하고 방지하기 위한 보안 +솔루션 +‣ 조직이 온프레미스, 클라우드 및 기기 등에서 민감한 정보(예: 개인 식별 정보(PII), 금융 +정보, 지적 재산 및 영업 비밀 등)를 모니터링하고 보호할 수 있는 기능 포함 +‣ 데이터 암호화, 접근제어 및 모니터링과 같은 다양한 기능을 포함함으로써 민감한 데이터의 +기밀성, 무결성 및 가용성을 보장하고 데이터 손실 또는 위반 방지 +DRM +(Digital Rights +Management) +‣ 영화, 음악 및 전자책과 같은 디지털 콘텐츠를 무단 복사, 배포 및 사용으로부터 보호하기 +위한 솔루션 +‣ 일반적으로 암호화, 접근제어, 복사 및 배포 제한, 사용량 모니터링 등의 기능을 +제공함으로써 권한 없는 사용자가 디지털 콘텐츠에 접근·공유하는 것을 제한 +EDR +(Endpoint Detection and +Response) +‣ 기업에서 단말(Endpoint) 동작에 대한 보안 위협을 탐지하고 대응하기 위한 솔루션으로, +컴퓨터, 서버, 랩톱, 모바일 기기 등과 같은 단말에 에이전트 소프트웨어를 설치하여, +실시간으로 네트워크 활동을 모니터링하고 이상 징후를 탐지하는 역할을 수행 +‣ 단말에 대한 시스템 수준의 동작을 기록 및 저장하며, 다양한 데이터 분석 기술을 사용하여 +의심스러운 시스템 동작 감지, 상황 정보 제공, 악의적인 활동 차단, 복원을 위한 수정 제안 +등을 제공하는 솔루션 +FIM +(File Integrity Monitoring) +‣ 현재 파일 상태와 이미 알려진 기준선 사이의 검증 방법을 이용하여 운영 체제 및 +애플리케이션 파일의 무결성을 확인하는 내부 통제 혹은 절차로, 일반적으로 암호학적 +체크섬 혹은 다른 파일 속성을 활용하여 무결성을 모니터링 +ICAM +(Identity, Credential and +Access Management) +‣ 기업에서 접근 주체에 대한 디지털 식별자 및 관련 속성의 유지 관리, 자격 증명 발급 및 +이에 기반한 인증, 인증된 식별자 및 연관 속성을 기반으로 내부 리소스에 대한 접근을 관리, +모니터링함으로써 기업 내부 IT 인프라를 보호하기 위한 보안 솔루션 및 시스템을 의미 +IDP +(IDentity Provider) +‣ 접근 주체에 대한 디지털 식별자 및 관련 정보를 생산, 저장, 관리하는 시스템 +‣ 접근 주체에 대하여 직접 인증을 수행하거나, 혹은 외부 기업에게 사용자 인증 서비스를 +제공할 수 있음 +Macro- +Segmentation +‣ 네트워크를 여러 워크로드 및 시스템 단위로 묶음으로써 역할에 따르는 큰 범위로 나누어 각 +구역에 보안 정책이나 네트워크 트래픽 제어를 적용하는 보안 기법 혹은 기술 +MDM +(Mobile Device +Management) +‣ 스마트폰 및 미디어 태블릿에 대한 소프트웨어 배포, 정책 관리, 인벤토리 관리, 보안 관리 +및 서비스 관리와 같은 기능을 제공하는 소프트웨어를 포함하는 솔루션으로, 대상 모바일 +기기를 보호, 관리, 감시, 지원 기능 포함 +‣ 예를 들어, 안전한 패스워드 설정, 모바일 애플리케이션 배포, 도난 및 분실 시 원격 +자료삭제 등이 가능하며, 악성 프로그램 및 기타 사이버 위협으로부터 기기를 안전하게 +보호하는 기능을 포함하기도 함 + +| 용 어 | 의 미 | +| --- | --- | +| DevSecOps | ‣ 데브섹옵스(DevSecOps)란 소프트웨어 개발(Development)과 운영(Operation), 보안(Security)의 합성어로 애플리케이션 개발자와 운영, 보안 실무자 간의 소통과 협업, 통합을 강조하는 개발 문화를 의미 ‣ 직무분리 및 책임추적성 등을 위해 개발과 운영, 보안조직을 분리 운영했던 과거 IT 조직 체계로는 급속도로 변화하는 비즈니스 환경에서 발생하는 문제점 해결을 위해, DevOps와 보안(Security)이 결합하여 개발 파이프라인의 과정에서 보안 정책 및 기술 반영 | +| DLP (Data Loss Prevention) | ‣ 중요한 데이터에 대한 무단 접근, 사용, 공개 또는 손실 등을 식별하고 방지하기 위한 보안 솔루션 ‣ 조직이 온프레미스, 클라우드 및 기기 등에서 민감한 정보(예: 개인 식별 정보(PII), 금융 정보, 지적 재산 및 영업 비밀 등)를 모니터링하고 보호할 수 있는 기능 포함 ‣ 데이터 암호화, 접근제어 및 모니터링과 같은 다양한 기능을 포함함으로써 민감한 데이터의 기밀성, 무결성 및 가용성을 보장하고 데이터 손실 또는 위반 방지 | +| DRM (Digital Rights Management) | ‣ 영화, 음악 및 전자책과 같은 디지털 콘텐츠를 무단 복사, 배포 및 사용으로부터 보호하기 위한 솔루션 ‣ 일반적으로 암호화, 접근제어, 복사 및 배포 제한, 사용량 모니터링 등의 기능을 제공함으로써 권한 없는 사용자가 디지털 콘텐츠에 접근·공유하는 것을 제한 | +| EDR (Endpoint Detection and Response) | ‣ 기업에서 단말(Endpoint) 동작에 대한 보안 위협을 탐지하고 대응하기 위한 솔루션으로, 컴퓨터, 서버, 랩톱, 모바일 기기 등과 같은 단말에 에이전트 소프트웨어를 설치하여, 실시간으로 네트워크 활동을 모니터링하고 이상 징후를 탐지하는 역할을 수행 ‣ 단말에 대한 시스템 수준의 동작을 기록 및 저장하며, 다양한 데이터 분석 기술을 사용하여 의심스러운 시스템 동작 감지, 상황 정보 제공, 악의적인 활동 차단, 복원을 위한 수정 제안 등을 제공하는 솔루션 | +| FIM (File Integrity Monitoring) | ‣ 현재 파일 상태와 이미 알려진 기준선 사이의 검증 방법을 이용하여 운영 체제 및 애플리케이션 파일의 무결성을 확인하는 내부 통제 혹은 절차로, 일반적으로 암호학적 체크섬 혹은 다른 파일 속성을 활용하여 무결성을 모니터링 | +| ICAM (Identity, Credential and Access Management) | ‣ 기업에서 접근 주체에 대한 디지털 식별자 및 관련 속성의 유지 관리, 자격 증명 발급 및 이에 기반한 인증, 인증된 식별자 및 연관 속성을 기반으로 내부 리소스에 대한 접근을 관리, 모니터링함으로써 기업 내부 IT 인프라를 보호하기 위한 보안 솔루션 및 시스템을 의미 | +| IDP (IDentity Provider) | ‣ 접근 주체에 대한 디지털 식별자 및 관련 정보를 생산, 저장, 관리하는 시스템 ‣ 접근 주체에 대하여 직접 인증을 수행하거나, 혹은 외부 기업에게 사용자 인증 서비스를 제공할 수 있음 | +| Macro- Segmentation | ‣ 네트워크를 여러 워크로드 및 시스템 단위로 묶음으로써 역할에 따르는 큰 범위로 나누어 각 구역에 보안 정책이나 네트워크 트래픽 제어를 적용하는 보안 기법 혹은 기술 | +| MDM (Mobile Device Management) | ‣ 스마트폰 및 미디어 태블릿에 대한 소프트웨어 배포, 정책 관리, 인벤토리 관리, 보안 관리 및 서비스 관리와 같은 기능을 제공하는 소프트웨어를 포함하는 솔루션으로, 대상 모바일 기기를 보호, 관리, 감시, 지원 기능 포함 ‣ 예를 들어, 안전한 패스워드 설정, 모바일 애플리케이션 배포, 도난 및 분실 시 원격 자료삭제 등이 가능하며, 악성 프로그램 및 기타 사이버 위협으로부터 기기를 안전하게 보호하는 기능을 포함하기도 함 | + + +190 | 제로트러스트 가이드라인 2.0 +용 어 +의 미 +MFA +(Multi-Factor +Authentication) +‣ 다중인증으로 사용자의 신원 확인을 위해 2개 이상의 인증 요소를 사용하는 보안 기술 +‣ 사용자가 알고 있는 것(비밀번호 등 지식), 가지고 있는 것(스마트 카드 등 소유), 사용자 +자신의 특징(생체 정보 등 존재), 사용자의 행동 특성(서명, 키 입력 패턴 등) 등 여러 인증 +요소 중 2개 이상을 사용하여 인증함으로써, 공격자가 특정 인증 요소(예: 비밀번호)를 +획득하더라도 최종적으로 인증에 성공하기 어렵게 만드는 방법 +Micro- +Segmentation +‣ 기업망 내부의 모든 리소스(네트워크, 시스템, 워크로드, 애플리케이션, 데이터)에 접근하는 +사용자와 기기에 세분화된 접근제어 정책을 적용함으로써 공격자의 횡적 이동을 어렵게 +하는 보안 기법 혹은 기술 +NAC +(Network Access +Control) +‣ 네트워크 보안 솔루션의 하나로, 네트워크 접근을 제어하고 보안 수준을 높이기 위한 +정책(사용자, 기기, 애플리케이션 등의 인증, 권한 부여, 접근제어 등) 시행 +- Endpoint Security: Agent를 통해, 단말 보안 소프트웨어 업데이트, 악성 코드 검사 등을 +수행 +- Authentication and Authorization: 사용자와 기기 식별, 인증, 권한 부여를 담당하며, +사용자는 사용자 이름과 비밀번호로, 기기는 MAC 주소, IP 주소 등으로 인증 +- Network Enforcement: 네트워크에서 규칙에 맞지 않는 접근 차단 및 정책 시행 (규칙 +위반 여부 확인 후 규칙 위반 기기에 대해 차단, 격리, 경고 등의 조치) +NGFW +(Next Generation Fire- +Wall) +‣ 차세대 방화벽으로, 기존 네트워크 방화벽 기능(네트워크 트래픽 분석 및 패킷 필터링, 상태 +기반 검사, VPN 트래픽 식별 등)에 추가적으로 애플리케이션 인식 및 제어, 침입 방지, 위협 +인텔리전스 등 향상된 보안 기능이 추가된 보안 솔루션 +OAuth +(Open Authorization) +‣ 인터넷 사용자들이 패스워드를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 +웹사이트나 애플리케이션의 접근권한을 부여할 수 있는 공통적인 수단으로 사용되는, 접근 +위임을 위한 개방형 표준 +‣ 2007년 4월 처음 논의되어, 2010년 IETF에서 RFC 5849로 버전 1.0 발표 후, 2012년 +10월 버전 2.0이 RFC 6749로 업데이트 +‣ 동작 방식은 크게 네 가지로 분류되며 권한 부여 승인을 위해 자체 생성한 Authorization +Code를 전달하는 Authorization Code Grant 방식, 자격 증명을 안전하게 저장하기 힘든 +클라이언트(예: JavaScript등의 스크립트 언어를 사용한 브라우저)에게 최적화된 Implicit +Grant 방식, 간단하게 username, password로 Access Token을 받는 Resource Owner +Password Credentials Grant 방식, 클라이언트의 자격 증명만으로 Access Token을 +획득하는 Client Credentials Grant 방식으로 나뉨 +PAM +(Privileged Access +Management) +‣ PAM은 중요한 리소스에 대한 무단 접근을 모니터링, 감지 및 방지함으로써 사이버 +위협으로부터 조직을 보호하기 위한 ID 보안 솔루션 +‣ 사용자, 프로세스 및 기술을 조합하여 작동하며, 아래 기능을 통하여 권한 있는 계정을 +사용하는 사람과 로그인 중에 수행 작업에 대한 가시성 제공 +- 다단계 인증 요구 +- JIT 접근 제공 +- 보안 자동화 +- 활동 기반 접근제어 +- 권한 있는 접근제어 및 모니터링 등 + +| 용 어 | 의 미 | +| --- | --- | +| MFA (Multi-Factor Authentication) | ‣ 다중인증으로 사용자의 신원 확인을 위해 2개 이상의 인증 요소를 사용하는 보안 기술 ‣ 사용자가 알고 있는 것(비밀번호 등 지식), 가지고 있는 것(스마트 카드 등 소유), 사용자 자신의 특징(생체 정보 등 존재), 사용자의 행동 특성(서명, 키 입력 패턴 등) 등 여러 인증 요소 중 2개 이상을 사용하여 인증함으로써, 공격자가 특정 인증 요소(예: 비밀번호)를 획득하더라도 최종적으로 인증에 성공하기 어렵게 만드는 방법 | +| Micro- Segmentation | ‣ 기업망 내부의 모든 리소스(네트워크, 시스템, 워크로드, 애플리케이션, 데이터)에 접근하는 사용자와 기기에 세분화된 접근제어 정책을 적용함으로써 공격자의 횡적 이동을 어렵게 하는 보안 기법 혹은 기술 | +| NAC (Network Access Control) | ‣ 네트워크 보안 솔루션의 하나로, 네트워크 접근을 제어하고 보안 수준을 높이기 위한 정책(사용자, 기기, 애플리케이션 등의 인증, 권한 부여, 접근제어 등) 시행 - Endpoint Security: Agent를 통해, 단말 보안 소프트웨어 업데이트, 악성 코드 검사 등을 수행 - Authentication and Authorization: 사용자와 기기 식별, 인증, 권한 부여를 담당하며, 사용자는 사용자 이름과 비밀번호로, 기기는 MAC 주소, IP 주소 등으로 인증 - N etwork Enforcement: 네트워크에서 규칙에 맞지 않는 접근 차단 및 정책 시행 (규칙 위반 여부 확인 후 규칙 위반 기기에 대해 차단, 격리, 경고 등의 조치) | +| NGFW (Next Generation Fire- Wall) | ‣ 차세대 방화벽으로, 기존 네트워크 방화벽 기능(네트워크 트래픽 분석 및 패킷 필터링, 상태 기반 검사, VPN 트래픽 식별 등)에 추가적으로 애플리케이션 인식 및 제어, 침입 방지, 위협 인텔리전스 등 향상된 보안 기능이 추가된 보안 솔루션 | +| OAuth (Open Authorization) | ‣ 인터넷 사용자들이 패스워드를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근권한을 부여할 수 있는 공통적인 수단으로 사용되는, 접근 위임을 위한 개방형 표준 ‣ 2007년 4월 처음 논의되어, 2010년 IETF에서 RFC 5849로 버전 1.0 발표 후, 2012년 10월 버전 2.0이 RFC 6749로 업데이트 ‣ 동작 방식은 크게 네 가지로 분류되며 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 Authorization Code Grant 방식, 자격 증명을 안전하게 저장하기 힘든 클라이언트(예: JavaScript등의 스크립트 언어를 사용한 브라우저)에게 최적화된 Implicit Grant 방식, 간단하게 username, password로 Access Token을 받는 Resource Owner Password Credentials Grant 방식, 클라이언트의 자격 증명만으로 Access Token을 획득하는 Client Credentials Grant 방식으로 나뉨 | +| PAM (Privileged Access Management) | ‣ PAM은 중요한 리소스에 대한 무단 접근을 모니터링, 감지 및 방지함으로써 사이버 위협으로부터 조직을 보호하기 위한 ID 보안 솔루션 ‣ 사용자, 프로세스 및 기술을 조합하여 작동하며, 아래 기능을 통하여 권한 있는 계정을 사용하는 사람과 로그인 중에 수행 작업에 대한 가시성 제공 - 다단계 인증 요구 - JIT 접근 제공 - 보안 자동화 - 활동 기반 접근제어 - 권한 있는 접근제어 및 모니터링 등 | + + +부록 | 191 +용 어 +의 미 +RBAC +(Role-Based Access +Control) +‣ 역할 기반 접근제어 모델로, 기관·기업 내에서 사용자 역할과 권한 관리 +‣ 각 사용자는 하나 이상의 역할을 가질 수 있으며, 각 역할은 그룹화된 사용자들이 접근할 +수 있는 권한 집합을 정의 (예를 들어, IT 부서의 사용자들은 파일 서버에 접근할 수 있으나, +회계 부서의 사용자들은 접근권한 없음) +SASE +(Secure Access Service +Edge) +‣ 2019년 Gartner가 현대적인 사이버 보안 아키텍처를 표현하기 위해 개발한 용어로, SWG, +CASB, ZTNA, NGFW 등의 서비스형 보안 기능과 VPN, SD-WAN 등의 네트워크 기능이 +통합된 클라우드 기반 네트워크 서비스 모델 +‣ 클라우드 서비스를 이용하는 사용자들의 개별 네트워크, 보안 기능을 통합하고 지능화하여 +클라우드 보안 가시성 확보 및 고품질 네트워크 서비스를 제공하며, SASE의 핵심 기능으로 +포함된 기존 솔루션들은 다음과 같으며, 그 외 공급기업에 따라 FWaaS, DLP, NAC, EPP +등 다른 보안 기능이 추가로 제공되기도 함 +- SD-WAN (일반 인터넷 기반 오버레이 네트워크 VPN 서비스) +- SWG (보안 웹 게이트웨이, 악성 트래픽 검사 및 차단) +- CASB (클라우드 가시성 확보, 위협 방지 등 보안 기능) +- ZTNA (다양한 보안 기술·솔루션을 결합하여 접근 주체에 최소 권한 및 세션 단위 접근 허용) +SBOM +(Software Bill Of +Materials) +‣ SW 구성요소 명세서라고 하며, 소프트웨어 구성요소를 서술하는 일종의 메타데이터로 +소프트웨어 전체의 구성요소를 목록화한 기록 +‣ 소프트웨어 공급망 공격으로 인한 피해를 최소화하기 위하여, 소프트웨어 내 어떤 +구성요소가 존재하는지 신속하게 파악하고 위험에 대처하기 위한 도구로 활용 (출처: SW +공급망 보안 가이드라인 v1.0) +SDLC +(Software Development +Life-Cycle) +‣ 고품질의 소프트웨어를 계획, 설계, 구현, 테스트 및 유지 관리하기 위한 방법론 +‣ 일반적으로 사전 계획을 통해 프로젝트 위험을 최소화하여 사용자 요구사항을 충족하는 +고품질의 유지 관리 가능한 소프트웨어를 제공하는 것이 목적으로, 소프트웨어의 품질과 +전반적인 개발 프로세스를 개선하는 방법을 정의하게 됨 +SDP +(Software Defined +Perimeter) +‣ 안전하지 않은 네트워크로부터 서비스를 격리하기 위해 필요한 경계 기능을 애플리케이션 +소유자에게 제공하는 기술로, 동적으로 프로비저닝되는 네트워크를 가능하게 함으로써 +네트워크 기반 공격을 완화 +‣ ‘외부인’에게 보이지 않고 접근할 수 없다는 기존 모델의 가치를 유지하면서도 어디에서든 +(인터넷, 클라우드, 호스팅 센터, 사설 기업 네트워크 또는 이러한 위치의 일부 또는 전체) +논리적 네트워크 경계를 배포할 수 있는 능력을 부여함으로써 경계 기반 보안 모델의 문제를 +해결 (ZTNA의 구현 기술 중 하나로 보기도 하며, 마이크로 세그멘테이션을 가능하게 할 수 +있음) +SD-WAN +(Software Defined Wide +Area Network) +‣ 기존의 광대역 인터넷과 프라이빗 링크를 통해 광역 네트워크 연결에 가상화된 리소스를 +제공하는 소프트웨어 기반 네트워크 기술 및 솔루션 +‣ 클라우드 제공 및 소프트웨어 기반으로 중앙 관리 및 제어 가능하며, 임대 회선의 WAN +트래픽을 조절하고 일부를 광대역 인터넷 연결 및 클라우드 기반 애플리케이션으로 전환 +가능 +‣ 모든 유형의 네트워크 트래픽을 동적으로 라우팅하여 애플리케이션과 데이터 제공을 +최적화하며, 중앙에 위치한 오케스트레이터가 모든 네트워크 활동을 모니터링하여 실시간 +분석 및 보고 제공 + +| 용 어 | 의 미 | +| --- | --- | +| RBAC (Role-Based Access Control) | ‣ 역할 기반 접근제어 모델로, 기관·기업 내에서 사용자 역할과 권한 관리 ‣ 각 사용자는 하나 이상의 역할을 가질 수 있으며, 각 역할은 그룹화된 사용자들이 접근할 수 있는 권한 집합을 정의 (예를 들어, IT 부서의 사용자들은 파일 서버에 접근할 수 있으나, 회계 부서의 사용자들은 접근권한 없음) | +| SASE (Secure Access Service Edge) | ‣ 2019년 Gartner가 현대적인 사이버 보안 아키텍처를 표현하기 위해 개발한 용어로, SWG, CASB, ZTNA, NGFW 등의 서비스형 보안 기능과 VPN, SD-WAN 등의 네트워크 기능이 통합된 클라우드 기반 네트워크 서비스 모델 ‣ 클라우드 서비스를 이용하는 사용자들의 개별 네트워크, 보안 기능을 통합하고 지능화하여 클라우드 보안 가시성 확보 및 고품질 네트워크 서비스를 제공하며, SASE의 핵심 기능으로 포함된 기존 솔루션들은 다음과 같으며, 그 외 공급기업에 따라 FWaaS, DLP, NAC, EPP 등 다른 보안 기능이 추가로 제공되기도 함 - SD-WAN (일반 인터넷 기반 오버레이 네트워크 VPN 서비스) - SWG (보안 웹 게이트웨이, 악성 트래픽 검사 및 차단) - CASB (클라우드 가시성 확보, 위협 방지 등 보안 기능) - ZTNA (다양한 보안 기술·솔루션을 결합하여 접근 주체에 최소 권한 및 세션 단위 접근 허용) | +| SBOM (Software Bill Of Materials) | ‣ SW 구성요소 명세서라고 하며, 소프트웨어 구성요소를 서술하는 일종의 메타데이터로 소프트웨어 전체의 구성요소를 목록화한 기록 ‣ 소프트웨어 공급망 공격으로 인한 피해를 최소화하기 위하여, 소프트웨어 내 어떤 구성요소가 존재하는지 신속하게 파악하고 위험에 대처하기 위한 도구로 활용 (출처: SW 공급망 보안 가이드라인 v1.0) | +| SDLC (Software Development Life-Cycle) | ‣ 고품질의 소프트웨어를 계획, 설계, 구현, 테스트 및 유지 관리하기 위한 방법론 ‣ 일반적으로 사전 계획을 통해 프로젝트 위험을 최소화하여 사용자 요구사항을 충족하는 고품질의 유지 관리 가능한 소프트웨어를 제공하는 것이 목적으로, 소프트웨어의 품질과 전반적인 개발 프로세스를 개선하는 방법을 정의하게 됨 | +| SDP (Software Defined Perimeter) | ‣ 안전하지 않은 네트워크로부터 서비스를 격리하기 위해 필요한 경계 기능을 애플리케이션 소유자에게 제공하는 기술로, 동적으로 프로비저닝되는 네트워크를 가능하게 함으로써 네트워크 기반 공격을 완화 ‣ ‘외부인’에게 보이지 않고 접근할 수 없다는 기존 모델의 가치를 유지하면서도 어디에서든 (인터넷, 클라우드, 호스팅 센터, 사설 기업 네트워크 또는 이러한 위치의 일부 또는 전체) 논리적 네트워크 경계를 배포할 수 있는 능력을 부여함으로써 경계 기반 보안 모델의 문제를 해결 (ZTNA의 구현 기술 중 하나로 보기도 하며, 마이크로 세그멘테이션을 가능하게 할 수 있음) | +| SD-WAN (Software Defined Wide Area Network) | ‣ 기존의 광대역 인터넷과 프라이빗 링크를 통해 광역 네트워크 연결에 가상화된 리소스를 제공하는 소프트웨어 기반 네트워크 기술 및 솔루션 ‣ 클라우드 제공 및 소프트웨어 기반으로 중앙 관리 및 제어 가능하며, 임대 회선의 WAN 트래픽을 조절하고 일부를 광대역 인터넷 연결 및 클라우드 기반 애플리케이션으로 전환 가능 ‣ 모든 유형의 네트워크 트래픽을 동적으로 라우팅하여 애플리케이션과 데이터 제공을 최적화하며, 중앙에 위치한 오케스트레이터가 모든 네트워크 활동을 모니터링하여 실시간 분석 및 보고 제공 | + + +192 | 제로트러스트 가이드라인 2.0 +용 어 +의 미 +SIEM +(Security Information and +Event Management) +‣ 소프트웨어 제품 및 서비스가 보안 정보 관리(SIM)와 보안 이벤트 관리(SEM)를 결합하여, +다양한 기타 이벤트 및 상황별 데이터 소스뿐만 아니라 보안 이벤트의 수집 및 분석(거의 +실시간 및 기록 모두)을 통해 위협 감지, 컴플라이언스 및 보안 사고 관리를 지원하는 보안 +솔루션 +‣ 로그 이벤트 수집 및 관리, 이종 소스로부터의 로그 이벤트 및 기타 데이터 분석, 운영 +기능(예: 사고 관리, 대시보드 및 보고) 등을 포함 +SOAR +(Security Orchestration, +Automation, and +Response) +‣ SOAR는 다양한 사이버 위협에 대해, 대응 수준을 자동으로 분류하고 표준화된 업무 +프로세스에 따라 보안 업무 담당자와 솔루션이 유기적으로 협력할 수 있도록 지원하는 보안 +기술·솔루션 +‣ 여러 유형의 사이버 위협에 대한 대응 절차를 자동화하여, 단순한 보안 이슈에 대해선 보안 +업무 담당자 없이 자체 해결이 가능해야 하며, 복잡한 보안 사고 발생 시 보안 운영 센터 +관리자가 쉽게 대응할 수 있도록 지원 +SOC +(Security Operation +Center) +‣ 기업의 전제 IT 인프라에 대해 연중무휴로 모니터링함으로써 사이버 보안 위협 및 사고를 +예방, 실시간 탐지, 분석, 대응하고 규정 준수에 대한 이행 여부를 평가하기 위한 전담 조직 +SSE +(Security Service Edge) +‣ 웹, 클라우드 서비스 및 개인 애플리케이션에 대한 접근 보호를 위한 보안 솔루션을 +의미하며, SASE의 보안 부분(CASB, SWG, ZTNA 등)만을 포함하는 기술 +‣ 기능에는 접근제어, 위협 보호, 데이터 보안, 보안 모니터링, 네트워크 기반 및 API 기반 +통합에 의해 시행되는 사용 허용 제어를 포함하고, 주로 클라우드 기반 서비스로 제공되며 +온프레미스 또는 에이전트 기반 구성 요소를 포함할 수 있음 +TMS +(Threat Management +System) +‣ 기업이 잠재적인 보안 위협을 식별·관리할 수 있도록, 사이버 공격을 예방하는 사전 조치, +위협을 나타낼 수 있는 이상 징후나 패턴 탐지 기술, 보안 사고를 해결하고 완화하는 대응 +프로세스 등을 포함하여 기업 내 디지털 자산 및 데이터를 안전하게 보호하기 위한 목적의 +보안 솔루션 +UEBA +(User and Entity +Behavior Analytics) +‣ 사용자 및 엔티티 행동 분석 솔루션으로, 사용자 및 엔터티(예: 기기, 애플리케이션, 서버 +등)의 행동 패턴을 분석하여 비정상적이거나 잠재적으로 악의적인 활동을 탐지하는 보안 +기술 +‣ 일반적으로 기계 학습과 데이터 분석 기술을 사용하여 사용자와 엔터티의 정상적인 활동 +기준을 정의한 후, 그 기준에서 벗어난 이상 행동을 탐지하며, 주요 기능으로 비정상 행위 +탐지, 내부자 위협 탐지, 외부 위협 탐지, 행동 분석 등을 포함하여 계정 탈취 및 악의적 +내부자의 활동을 탐지하고, 랜섬웨어 등 보안 사고를 사전에 감지하는 역할 수행 +UEM +(Unified Endpoint +Management) +‣ 통합 단말 관리 솔루션을 의미하며, 일반적으로 단일 콘솔에서 단말의 운영 체제나 위치에 +관계없이 데스크탑, 노트북, 스마트폰 등 조직의 최종 사용자 기기를 모니터링, 관리, 보호 +등 보안 관리 기능 제공 + +| 용 어 | 의 미 | +| --- | --- | +| SIEM (Security Information and Event Management) | ‣ 소프트웨어 제품 및 서비스가 보안 정보 관리(SIM)와 보안 이벤트 관리(SEM)를 결합하여, 다양한 기타 이벤트 및 상황별 데이터 소스뿐만 아니라 보안 이벤트의 수집 및 분석(거의 실시간 및 기록 모두)을 통해 위협 감지, 컴플라이언스 및 보안 사고 관리를 지원하는 보안 솔루션 ‣ 로그 이벤트 수집 및 관리, 이종 소스로부터의 로그 이벤트 및 기타 데이터 분석, 운영 기능(예: 사고 관리, 대시보드 및 보고) 등을 포함 | +| SOAR (Security Orchestration, Automation, and Response) | ‣ SOAR는 다양한 사이버 위협에 대해, 대응 수준을 자동으로 분류하고 표준화된 업무 프로세스에 따라 보안 업무 담당자와 솔루션이 유기적으로 협력할 수 있도록 지원하는 보안 기술·솔루션 ‣ 여러 유형의 사이버 위협에 대한 대응 절차를 자동화하여, 단순한 보안 이슈에 대해선 보안 업무 담당자 없이 자체 해결이 가능해야 하며, 복잡한 보안 사고 발생 시 보안 운영 센터 관리자가 쉽게 대응할 수 있도록 지원 | +| SOC (Security Operation Center) | ‣ 기업의 전제 IT 인프라에 대해 연중무휴로 모니터링함으로써 사이버 보안 위협 및 사고를 예방, 실시간 탐지, 분석, 대응하고 규정 준수에 대한 이행 여부를 평가하기 위한 전담 조직 | +| SSE (Security Service Edge) | ‣ 웹, 클라우드 서비스 및 개인 애플리케이션에 대한 접근 보호를 위한 보안 솔루션을 의미하며, SASE의 보안 부분(CASB, SWG, ZTNA 등)만을 포함하는 기술 ‣ 기능에는 접근제어, 위협 보호, 데이터 보안, 보안 모니터링, 네트워크 기반 및 API 기반 통합에 의해 시행되는 사용 허용 제어를 포함하고, 주로 클라우드 기반 서비스로 제공되며 온프레미스 또는 에이전트 기반 구성 요소를 포함할 수 있음 | +| TMS (Threat Management System) | ‣ 기업이 잠재적인 보안 위협을 식별·관리할 수 있도록, 사이버 공격을 예방하는 사전 조치, 위협을 나타낼 수 있는 이상 징후나 패턴 탐지 기술, 보안 사고를 해결하고 완화하는 대응 프로세스 등을 포함하여 기업 내 디지털 자산 및 데이터를 안전하게 보호하기 위한 목적의 보안 솔루션 | +| UEBA (User and Entity Behavior Analytics) | ‣ 사용자 및 엔티티 행동 분석 솔루션으로, 사용자 및 엔터티(예: 기기, 애플리케이션, 서버 등)의 행동 패턴을 분석하여 비정상적이거나 잠재적으로 악의적인 활동을 탐지하는 보안 기술 ‣ 일반적으로 기계 학습과 데이터 분석 기술을 사용하여 사용자와 엔터티의 정상적인 활동 기준을 정의한 후, 그 기준에서 벗어난 이상 행동을 탐지하며, 주요 기능으로 비정상 행위 탐지, 내부자 위협 탐지, 외부 위협 탐지, 행동 분석 등을 포함하여 계정 탈취 및 악의적 내부자의 활동을 탐지하고, 랜섬웨어 등 보안 사고를 사전에 감지하는 역할 수행 | +| UEM (Unified Endpoint Management) | ‣ 통합 단말 관리 솔루션을 의미하며, 일반적으로 단일 콘솔에서 단말의 운영 체제나 위치에 관계없이 데스크탑, 노트북, 스마트폰 등 조직의 최종 사용자 기기를 모니터링, 관리, 보호 등 보안 관리 기능 제공 | + + +부록 | 193 +용 어 +의 미 +VDI +(Virtual Desktop +Infrastructure) +‣ 중앙 서버에서 가상 머신으로 실행되고, 클라이언트에서 원격으로 접근하는 가상 +데스크톱을 제공·관리하는 사용자 환경 및 솔루션 +‣ 사용자는 사용자와 서버 사이에서 중개자 역할을 수행하는 연결 브로커(소프트웨어 기반 +게이트웨이)를 통해 장소와 기기에 구애받지 않고 가상 데스크톱에 접근할 수 있고, 모든 +처리는 호스트 서버에서 이루어짐 +- 데스크톱 소프트웨어를 호스팅하는 서버 가상화 소프트웨어 (서버 워크로드) +- 사용자를 데스크톱 환경에 연결하는 중개 및 세션 관리 소프트웨어 +- 가상 데스크톱 소프트웨어 스택의 프로비저닝 및 유지보수 관리 도구 +VPN +(Virtual Private Network) +‣ 인터넷을 통해 기기 간에 사설 네트워크 연결을 생성하는 기술로, 공개 네트워크를 통해 +데이터를 안전하게 전송하는 데 사용 +‣ 안전한 공개 인터넷 접근, 검색 기록 비밀 유지, 신원 보호 등을 위하여 사용되기도 하나, +경계 기반 보안 기술이 도입된 기업망에서 경계를 확장하는 용도(재택·원격 근무자의 기업망 +접속 지원 등)로 사용되며, 두 기기 간 네트워크에 암호화된 개인 터널 생성 +‣ PPTP(Point-to-Point Tunnelling Protocol), L2TP(Layer Two Tunnelling Protocol), +IPSec(Internet Protocol Security), SSL(Secure Sockets Layer)과 같은 여러 VPN +터널링 프로토콜 존재 +XDR +(eXtended Detection and +Response) +‣ 보안 사고 탐지 및 자동화된 대응 기능과 함께, 여러 소스의 위협 인텔리전스 및 원격 분석 +데이터를 보안 분석과 통합하여 보안 경고에 대한 컨텍스트 및 상관 관계 정보를 제공하는 +통합 보안 솔루션 +‣ NDR(네트워크 탐지 및 대응) 및 EDR(엔드포인트 탐지 및 대응), 그 외 보안 관련 데이터를 +연계하여 보안 관리 부서에게 원격 분석 및 중앙집중적인 가시성을 제공 +ZTNA +(Zero Trust Network +Access) +‣ 하나의 애플리케이션 혹은 애플리케이션 집합 주위에 신원 혹은 컨텍스트 기반 논리 접근 +경계를 생성하는 솔루션 혹은 서비스 +‣ 애플리케이션은 검색에서 숨겨지며, 접근은 신뢰 브로커를 통해 명명된 접근 주체 집합으로 +제한 +‣ 브로커는 접근을 허용하기 전, 특정 참가자들의 신원, 컨텍스트 및 정책 준수 여부를 +확인하고 네트워크의 다른 곳에서 횡적 이동을 금지함으로써, 프로그램 자산이 공개적으로 +노출되는 것을 막고, 공격 노출 영역을 크게 감소 + +### 4. 제로트러스트 가이드라인 1.0과 용어 비교표 + +표 S-3 제로트러스트 가이드라인 1.0과 용어 비교표 +가이드라인 2.0 +가이드라인 1.0 +설명 +애플리케이션 +응용 +‣ 응용 소프트웨어(Application Software)를 의미하는 표현으로, +‘응용’보다 더 널리 사용되는 ‘애플리케이션’으로 용어 통일 +애플리케이션 및 +워크로드 +응용 및 워크로드 +‣ ‘응용’ 대신 ‘애플리케이션’ 사용으로, 핵심 요소 중 하나인 ‘응용 및 +워크로드’도 같이 변경 + +| 용 어 | 의 미 | +| --- | --- | +| VDI (Virtual Desktop Infrastructure) | ‣ 중앙 서버에서 가상 머신으로 실행되고, 클라이언트에서 원격으로 접근하는 가상 데스크톱을 제공·관리하는 사용자 환경 및 솔루션 ‣ 사용자는 사용자와 서버 사이에서 중개자 역할을 수행하는 연결 브로커(소프트웨어 기반 게이트웨이)를 통해 장소와 기기에 구애받지 않고 가상 데스크톱에 접근할 수 있고, 모든 처리는 호스트 서버에서 이루어짐 - 데스크톱 소프트웨어를 호스팅하는 서버 가상화 소프트웨어 (서버 워크로드) - 사용자를 데스크톱 환경에 연결하는 중개 및 세션 관리 소프트웨어 - 가상 데스크톱 소프트웨어 스택의 프로비저닝 및 유지보수 관리 도구 | +| VPN (Virtual Private Network) | ‣ 인터넷을 통해 기기 간에 사설 네트워크 연결을 생성하는 기술로, 공개 네트워크를 통해 데이터를 안전하게 전송하는 데 사용 ‣ 안전한 공개 인터넷 접근, 검색 기록 비밀 유지, 신원 보호 등을 위하여 사용되기도 하나, 경계 기반 보안 기술이 도입된 기업망에서 경계를 확장하는 용도(재택·원격 근무자의 기업망 접속 지원 등)로 사용되며, 두 기기 간 네트워크에 암호화된 개인 터널 생성 ‣ PPTP(Point-to-Point Tunnelling Protocol), L2TP(Layer Two Tunnelling Protocol), IPSec(Internet Protocol Security), SSL(Secure Sockets Layer)과 같은 여러 VPN 터널링 프로토콜 존재 | +| XDR (eXtended Detection and Response) | ‣ 보안 사고 탐지 및 자동화된 대응 기능과 함께, 여러 소스의 위협 인텔리전스 및 원격 분석 데이터를 보안 분석과 통합하여 보안 경고에 대한 컨텍스트 및 상관 관계 정보를 제공하는 통합 보안 솔루션 ‣ NDR(네트워크 탐지 및 대응) 및 EDR(엔드포인트 탐지 및 대응), 그 외 보안 관련 데이터를 연계하여 보안 관리 부서에게 원격 분석 및 중앙집중적인 가시성을 제공 | +| ZTNA (Zero Trust Network Access) | ‣ 하나의 애플리케이션 혹은 애플리케이션 집합 주위에 신원 혹은 컨텍스트 기반 논리 접근 경계를 생성하는 솔루션 혹은 서비스 ‣ 애플리케이션은 검색에서 숨겨지며, 접근은 신뢰 브로커를 통해 명명된 접근 주체 집합으로 제한 ‣ 브로커는 접근을 허용하기 전, 특정 참가자들의 신원, 컨텍스트 및 정책 준수 여부를 확인하고 네트워크의 다른 곳에서 횡적 이동을 금지함으로써, 프로그램 자산이 공개적으로 노출되는 것을 막고, 공격 노출 영역을 크게 감소 | + + +| 가이드라인 2.0 | 가이드라인 1.0 | 설명 | +| --- | --- | --- | +| 애플리케이션 | 응용 | ‣ 응용 소프트웨어(Application Software)를 의미하는 표현으로, ‘응용’보다 더 널리 사용되는 ‘애플리케이션’으로 용어 통일 | +| 애플리케이션 및 워크로드 | 응용 및 워크로드 | ‣ ‘응용’ 대신 ‘애플리케이션’ 사용으로, 핵심 요소 중 하나인 ‘응용 및 워크로드’도 같이 변경 | + + +194 | 제로트러스트 가이드라인 2.0 + +## 제2절 + +국내 기업 제로트러스트 인식 수준 +2023년 한국정보보호산업협회(KISIA)는 과학기술정보통신부로부터 의뢰를 받아 수행한 ‘국내 +제로트러스트 보안로드맵 마련을 위한 실증방안 연구’에서, 제로트러스트 아키텍처 도입 대상인 +수요기업과 이들 기업에 정보보호 기술·솔루션을 자체 제작·공급하는 공급기업에 대한 실태조사를 +위하여, 2023년 8월 28일부터 10월 6일까지 진행한 설문조사를 통하여 제로트러스트와 관련한 +인식, 기술 수준, 정책적 요구 사항 등을 파악하였다. +이와 관련하여 상세한 내용은 2024년 5월 23일 과학기술정보통신부 홈페이지에서 공개하고 +있는 정책연구보고서를 통하여 확인할 수 있다. + +### 1. 국내 기업 인식 수준 평가를 위한 조사 개요 + +해당 조사는 ‘국내 제로트러스트 관련 현황 조사·분석을 통해 국내 맞춤형 제로트러스트 +보안로드맵 마련과 보안 모델 전환 체계 구축에 기여’하는 것을 목적으로, 다음과 같이 조사 대상을 +정의하고 모집단 설정 후 응답률 20%를 기준으로 실사를 진행하여 총 수요기업 200개사, 공급기업 +50개사에 대하여 설문조사를 완료하였다. +- 조사 대상 +수요기업: 정보보호 공시 대상 기업을 중심으로 정보보호 솔루션 및 제품을 사용할 수 있는 +IT 인프라가 갖춰진 일반 민간 기업 +공급기업: 국내 시장 환경에서 정보보호 솔루션 및 제품을 자체 제작·공급 가능한 정보보호 +전문 업체 + +부록 | 195 +- 조사 모집단 및 실사 기업 +수요기업: 분야별 모집단 711개사 선정 후 이 중 정보통신업 65개사, 제조업 70개사, +보건업 19개사, 그 외 46개사 등 총 200개 기업 실사 +공급기업: KISIA 회원사 및 임원사, 판교 정보보호 클러스터 입주 정보보호 기업, +한국제로트러스트위원회 소속 정보보호 기업, 정보보호 분야 혁신기술 보유기업 등 총 +50개 기업 실사 +- 질의 내용 +수요기업: 제로트러스트 관련 수요인식, 도입 솔루션 보안 기술 수준 등 질의 +공급기업: 제로트러스트 도입 및 기술 현황, 주력보안영역, 제로트러스트 관련 협력 희망 +분야, 제로트러스트 기술개발 투자 현황 등 질의 + +### 2. 수요 기업의 제로트러스트 인식 수준 + +가. 제로트러스트 인식 수준 +국내 수요기업의 62.5%는 제로트러스트라는 용어를 모른다고 응답하였으며, 31.0%는 용어를 +들어봤으나 자세히 모른다고 응답하였다. 그 중, 제로트러스트 보안 개념을 적용하려는 의향이 +있는 기업 중 용어를 모른다고 응답한 기업은 6.5%, 용어를 들어봤으나 자세히 알지 못한다고 +응답한 기업은 65.2%인 것으로 나타났다. 이처럼, 조사 당시 전체 수요기업의 약 90% 이상은 +제로트러스트를 정확히 인지하지 못하고 있는 것으로 조사되어, 인식 개선 및 홍보가 필요하다고 +판단되었다. +표 S-4 제로트러스트 인지도 +(단위: %) +구분 +전체 +제로트러스트 적용 중이거나 의향이 있는 기업 +모른다 +용어는 들어봤으나, 자세히 알지는 못한다. +용어에 대해 자세히 알고 있다. +또한 제로트러스트를 이미 적용하고 있는 기업이 2.5%, 적용하고 있지만 구체적인 도입 계획이 +있는 기업이 3.0%인데 반하여, 도입 의사는 있지만 어떻게 해야 하는지 모르겠다는 기업이 17.5%, + +| 구분 | 전체 | 제로트러스트 적용 중이거나 의향이 있는 기업 | +| --- | --- | --- | +| 모른다 | 62.5 | 6.5 | +| 용어는 들어봤으나, 자세히 알지는 못한다. | 31.0 | 65.2 | +| 용어에 대해 자세히 알고 있다. | 6.5 | 28.3 | + + +196 | 제로트러스트 가이드라인 2.0 +도입 계획이 전혀 없다는 기업이 77%로 조사되었다. 제로트러스트 도입 계획이 없는 이유에 +대해서는 제로트러스트에 대한 정보 부족(62.0%), 보안 강화의 필요성을 못 느껴서(23.6%) 등으로 +조사되었으며, 적용 기업의 도입 계기에 대해서는 IT환경의 변화에서 보안성을 높이기 위함이 50%, +정교해지는 보안 공격에 대한 보안 강화가 39.1% 등으로 조사되었다. +표 S-5 제로트러스트 도입 계획이 없는 이유 +(단위: %) +구분 +응답 비중 +임원진의 보안 의식 부족 +보안 강화의 필요성을 못 느껴서 +제로트러스트 도입 비용의 부담 +도입 시 업무상 불편 증가 +제로트러스트에 대한 정보 부족 +기타 +제로트러스트 보안 솔루션 도입 시 기대 효과에 대해서는 전체적인 보안 기능 향상을 기대한다는 +응답(54.3%)이 가장 높았고, 그 뒤로 사고 후 복원력 향상(23.9%), 사용자의 이용환경 +개선(17.4%) 등이 뒤를 이었다. 그러나 2순위 응답까지 포함할 경우, 사용자의 이용환경 개선이 +높은 응답률을 보임으로써 수요기업들은 제로트러스트 도입을 통하여 보안 기능 향상과 사용자의 +이용 환경 개선을 모두 기대하는 경우가 많다는 것을 알 수 있었다. +표 S-6 제로트러스트 보안 솔루션 도입 시 기대 효과 +(단위: %) +구분 +1순위 +1+2순위 +전체적인 보안 기능 향상 +사고 후 복원력 향상 +사용자의 이용 환경 개선 +IT 비용 절감 +기타 +제로트러스트 관련 보안 솔루션 도입 시 애로사항에 대하여 각 선택지에 대한 점수(5점 만점)의 +평균을 조사한 결과 기존 사용 중인 보안 제품과의 호환성에 대한 애로사항이 3.78점으로 가장 + +| 구분 | 응답 비중 | +| --- | --- | +| 임원진의 보안 의식 부족 | 14.7 | +| 보안 강화의 필요성을 못 느껴서 | 23.6 | +| 제로트러스트 도입 비용의 부담 | 4.6 | +| 도입 시 업무상 불편 증가 | 2.9 | +| 제로트러스트에 대한 정보 부족 | 62.0 | +| 기타 | 3.3 | + + +| 구분 | 1순위 | 1+2순위 | +| --- | --- | --- | +| 전체적인 보안 기능 향상 | 54.3 | 84.8 | +| 사고 후 복원력 향상 | 23.9 | 39.1 | +| 사용자의 이용 환경 개선 | 17.4 | 60.9 | +| IT 비용 절감 | 2.2 | 13.0 | +| 기타 | 2.2 | 2.2 | + + +부록 | 197 +높았으며 도입 시 필요한 예산의 부족이 3.57점으로 뒤를 이었다. +표 S-7 제로트러스트 보안 솔루션 도입 시 애로사항 +(단위: 점, 5점 만점) +구분 +응답 점수 +고성능 제품을 보유한 공급사 부족 +제로트러스트 도입 전략에 대한 지식 부족 +경영진의 제로트러스트에 대한 개념 및 인식 부족 +기존 사용 중인 보안 제품과의 호환성 +도입 시 필요한 예산의 부족 +나. 제로트러스트 기술 +가이드라인 1.0에서 제시한 제로트러스트 성숙도와 관련해서, 기존 수준(1점), 향상 수준(5점), +최적화 수준(10점)으로 기업망 핵심 요소에 대한 성숙도 수준을 조사한 결과, 수요기업들의 +제로트러스트 성숙도 수준은 향상 수준에 미치지 못하는 낮은 수준들로 조사되었으며, 특히 +애플리케이션 및 워크로드,10 데이터의 성숙도 수준이 상대적으로 더 낮게 평가되었다. +표 S-8 제로트러스트 관련 보안 기술의 성숙도 수준 현황 +(단위: 점, 5점 만점) +기업망 핵심 요소 +응답 점수 +식별자·신원 +기기 및 엔드포인트 +네트워크 +시스템 +애플리케이션 및 워크로드 +데이터 +또한 각 핵심 요소들의 교차 기능(가시성 및 분석, 자동화 및 통합)에 대해서는 활용하지 않는다는 +응답이 각각 80.4%, 76.1%로 상당히 높은 비중을 차지하고 있어, 수요기업이 보유하고 있는 보안 +기술이 제로트러스트 성숙도 관점에서 높지 않은 수준임을 파악할 수 있다. +10   원문에서는 가이드라인 1.0에 따라 ‘응용 및 워크로드’라고 표현하고 있으나, 본 문서의 용어 정의에 따라 여기에서는 모두 ‘애플리케이션 및 +워크로드’라고 표현한다. + +| 구분 | 응답 점수 | +| --- | --- | +| 고성능 제품을 보유한 공급사 부족 | 3.07 | +| 제로트러스트 도입 전략에 대한 지식 부족 | 3.20 | +| 경영진의 제로트러스트에 대한 개념 및 인식 부족 | 3.00 | +| 기존 사용 중인 보안 제품과의 호환성 | 3.78 | +| 도입 시 필요한 예산의 부족 | 3.57 | + + +| 기업망 핵심 요소 | 응답 점수 | +| --- | --- | +| 식별자·신원 | 3.28 | +| 기기 및 엔드포인트 | 3.52 | +| 네트워크 | 3.04 | +| 시스템 | 2.74 | +| 애플리케이션 및 워크로드 | 1.30 | +| 데이터 | 1.46 | + + +198 | 제로트러스트 가이드라인 2.0 +표 S-9 제로트러스트 관련 보안 기술 보유 수준 현황 +(단위: %) +구분 +가시성 및 분석 +자동화 및 통합 +식별자·신원 +기기 및 엔드포인트 +네트워크 +시스템 +애플리케이션 및 워크로드 +데이터 +활용 안 함 +다. 제로트러스트 정책 +수요기업들이 각 핵심 요소별로 제로트러스트 도입에 대한 중요성 및 시급성을 조사한 결과 +네트워크(중요성 6.83점, 시급성 7.13점)에 대해 가장 높은 응답 결과를 보였으며, 식별자·신원 +(중요성 5.65점, 시급성 5.91점)이 그 다음으로 높은 응답을 보였다. 애플리케이션 및 +워크로드(중요성 2.09점, 시급성 2.00점)는 중요성 및 시급성이 상대적으로 매우 낮게 인식되고 +있었으나 클라우드 전환 등을 고려하면 차후에는 더 높은 중요성 및 시급성을 보일 가능성이 높다고 +보인다. +또한 수요기업들은 제로트러스트 도입을 위해 필요한 정책으로 ‘보안 강화 및 제로트러스트 +필요성 인식 제고’(78.3%)를 꼽고 있다. +표 S-10 제로트러스트 도입 시 필요한 정책 +(단위: %) +구분 +응답 비중 +제로트러스트 도입 관련 구체적인 방법 및 절차 +보안 강화 및 제로트러스트 필요성 인식 제고 +제로트러스트 도입 시 보안 인증 관련 제도 완화 + +| 구분 | 가시성 및 분석 | 자동화 및 통합 | +| --- | --- | --- | +| 식별자·신원 | 10.9 | 4.3 | +| 기기 및 엔드포인트 | 8.7 | 10.9 | +| 네트워크 | 6.5 | 4.3 | +| 시스템 | 6.5 | 2.2 | +| 애플리케이션 및 워크로드 | 3.3 | 1.2 | +| 데이터 | 4.3 | 13.0 | +| 활용 안 함 | 80.4 | 76.1 | + + +| 구분 | 응답 비중 | +| --- | --- | +| 제로트러스트 도입 관련 구체적인 방법 및 절차 | 67.4 | +| 보안 강화 및 제로트러스트 필요성 인식 제고 | 78.3 | +| 제로트러스트 도입 시 보안 인증 관련 제도 완화 | 37.0 | + + +부록 | 199 + +### 3. 공급 기업의 제로트러스트 인식 수준 + +가. 제로트러스트 출시 현황 +국내 정보보호 공급기업의 68.5%는 제로트러스트 관련 솔루션을 출시하였거나, 개발 및 계획 +단계에 있다고 조사되었으며, 관련 제품을 보유하고 있다고 응답한 기업은 24.1%였다. +표 S-11 제로트러스트 솔루션 출시 현황 +(단위: %) +솔루션 출시 현황 +비중 +출시 (관련 제품이 있음) +개발 단계 +개발 계획 단계 +개발 계획 전혀 없음 +제로트러스트 솔루션 출시와 관련하여 공급기업의 애로사항으로는 ‘공급절차의 복잡성’이었으며, +정책 및 방향성의 부재, 전문 인력의 부족 등이 그 뒤를 이었으나, 주요 애로사항에 대하여 전반적 +으로 어려움을 겪고 있는 것으로 조사되었다. +표 S-12 제로트러스트 솔루션 출시 주요 애로사항 +(단위: 점, 5점 만점) +솔루션 출시 현황 +비중 +공급 절차의 복잡성 +정책 및 방향성의 부재 +전문 인력의 부족 +수요기업의 제로트러스트 도입에 대한 인식 부족 +시장의 불확실성 때문에 사업 확대 시 위험 부담 +수요기업의 기존 솔루션과의 연동이 어려움 +기술 개발의 어려움 +제로트러스트 핵심 원칙에 대한 우선순위는 인증체계 강화(54.1%)가 마이크로 세그멘테이션 +(16.2%), 소프트웨어 정의 경계(29.7%)보다 높게 나타났으며, 이 수치는 수요기업과 비교하여 +소프트웨어 정의 경계의 비중이 더 높은 것을 알 수 있다. + +| 솔루션 출시 현황 | 비중 | +| --- | --- | +| 출시 (관련 제품이 있음) | 24.1 | +| 개발 단계 | 7.4 | +| 개발 계획 단계 | 37.0 | +| 개발 계획 전혀 없음 | 31.5 | + + +| 솔루션 출시 현황 | 비중 | +| --- | --- | +| 공급 절차의 복잡성 | 4.0 | +| 정책 및 방향성의 부재 | 3.9 | +| 전문 인력의 부족 | 3.8 | +| 수요기업의 제로트러스트 도입에 대한 인식 부족 | 3.7 | +| 시장의 불확실성 때문에 사업 확대 시 위험 부담 | 3.6 | +| 수요기업의 기존 솔루션과의 연동이 어려움 | 3.5 | +| 기술 개발의 어려움 | 3.4 | + + +200 | 제로트러스트 가이드라인 2.0 +나. 보유 기술 현황 +공급기업의 보안 기술 영역은 기업망 핵심 요소 관점에서 네트워크 영역이 가장 높은 수준을 +보였으며, 가시성 및 분석, 자동화 및 통합 부분에서는 기기 및 엔드포인트 영역에서 가장 높은 +수준을 보였다. 또한 대부분의 항목에서 향상에서 최적화 사이의 성숙도 수준으로 답하는 경향을 +보였다. +표 S-13 제로트러스트 보유 솔루션 기술 수준 +(단위: 점, 10점 만점) +기업망 핵심 요소 +기술 수준 +가시성 및 분석 +자동화 및 통합 +식별자·신원 +기기 및 엔드포인트 +네트워크 +시스템 +애플리케이션 및 워크로드 +데이터 +다. 제로트러스트 기술 연구 개발 현황 +제로트러스트 연구개발 시 애로사항으로는 공급기업의 67.6%가 ‘기술개발 인력 확보의 +어려움’과 ‘각종 행정규제 및 제도의 미비’를 가장 많이 응답하였으며, ‘자금 부족’(29.7%)에 관한 +응답에 비해 훨씬 높은 비중을 차지하였다. 또한 공급기업의 70.3%가 타 공급기업과의 협업 의향이 +있다고 답하여, 단일 솔루션으로 구현할 수 없음을 인식하고 있다고 해석할 수 있었다. +라. 제로트러스트 산업 활성화를 위한 필요 정책 +제로트러스트 산업 활성화를 위한 필요 정책으로 ‘법·제도 제·개정’(중요성 32.4%, 시급성 +21.6%)을 가장 중요하게 인식하고 있으며, 가장 시급하게 보는 정책으로는 ‘수요기업과 공급기업을 +연계하는 사업 확대’(중요성 24.3%, 시급성 24.3%)를 선택하였다. + +| 기업망 핵심 요소 | 기술 수준 | 가시성 및 분석 | 자동화 및 통합 | +| --- | --- | --- | --- | +| 식별자·신원 | 6.18 | 4.73 | 5.55 | +| 기기 및 엔드포인트 | 6.84 | 7.89 | 6.50 | +| 네트워크 | 7.06 | 6.91 | 6.00 | +| 시스템 | 5.93 | 4.00 | 5.50 | +| 애플리케이션 및 워크로드 | 4.86 | 5.40 | 3.60 | +| 데이터 | 6.85 | 6.00 | 5.43 | + + +부록 | 201 +표 S-14 제로트러스트 산업 활성화를 위한 필요 정책 +(단위: %, 1순위) +산업 활성화를 위한 필요 정책 +기술 수준 +가시성 및 분석 +수요기업과 공급기업을 연계하는 사업 확대 +법·제도 제·개정 +공공부문의 시장 수요 창출 +기술 개발 지원 +제로트러스트 관련 홍보 확대 +전문인력 양성 + +### 4. 제로트러스트 인식 제고 방안 + +설문조사 결과에 따르면 수요기업의 대부분은 제로트러스트에 대한 인지도가 낮은 상태이며 +기술 수준 역시 기존과 향상의 중간수준에 머물러 있는 것으로 나타났다. 제로트러스트 활성화를 +위한 정책적 요구사항으로는 제로트러스트 도입에 따른 인센티브보단 제로트러스트 도입의 +필요성(관련법령 또는 의무화 제도)을 더 중요시 여기는 것으로 나타났다. +공급기업은 과반수 이상 제로트러스트 보안 솔루션 출시, 개발, 기획단계에 있었으며, 기술 +수준은 향상과 최적화의 중간수준에 있는 것으로 나타났다. 이는 수요기업이 도입한 기술이 현재 +공급기업이 출시중인 제품이 아닌 과거 공급한 기술이라는 시간적 갭이 있음을 의미할 수 있다. +정책적 활성화 방안으로 공급기업은 도입정책(관련법령 및 의무화 제도)이 가장 중요하다고 +응답했으며 수요기업과 공급기업을 연결하는 실증사업이 가장 시급하다고 답했다. +마지막으로, 해당 조사에 대한 보고서에서는 제로트러스트 활성화를 위해 법제도 측면에서 +관련 제품 인증개선, 성숙도에 따른 평가방법론 개발 등이 필요하며, 현재 과학기술정보통신부와 +한국인터넷진흥원에서 진행하는 실증사업 및 가이드라인의 고도화가 필요함을 언급하였다. 기술 +개발 측면에서는 제로트러스트 보안모델의 구현을 위해 기존 보안 솔루션 간의 연동환경 기반조성, +통합보안제품군과 기존제품과의 연동, 통합보안제품군과 PDP 및 PEP 간 연동이 필요함을 +주장하였다. 인식 제고를 위하여, 제로트러스트 관련 포럼 및 컨퍼런스 활성화, 그리고 재직자 +및 구직자를 대상으로 하는 정보보호교육의 필요성을 강조하였으며 실증사례의 홍보 및 장기적 +관점에서 모범사례집 발간 등을 언급하였다. + +| 산업 활성화를 위한 필요 정책 | 기술 수준 | 가시성 및 분석 | +| --- | --- | --- | +| 수요기업과 공급기업을 연계하는 사업 확대 | 24.3 | 24.3 | +| 법·제도 제·개정 | 32.4 | 21.6 | +| 공공부문의 시장 수요 창출 | 13.5 | 21.6 | +| 기술 개발 지원 | 13.5 | 13.5 | +| 제로트러스트 관련 홍보 확대 | 8.1 | 13.5 | +| 전문인력 양성 | 8.1 | 5.4 | + + +202 | 제로트러스트 가이드라인 2.0 + +## 제3절 + +제로트러스트 아키텍처 참조 모델 실증 사례 +3절에서는 제로트러스트 아키텍처에 대해 2023년 과학기술정보통신부에서 진행한 2가지 +실증 사례를 제시한다. 해당 실증 사례는 첫째 클라우드 환경 제로트러스트 적용 실증 사례, 둘째 +온프레미스 통합 환경 제로트러스트 적용 실증 사례에 대해 제로트러스트 철학을 기반으로 보안성을 +개선하면서도 상기 문제를 해결하는 방안에 대한 참조 모델을 제안하는 것으로 볼 수 있다. +다만, 본 문서의 독자들은 여기에서 제시하는 참조 모델이 상기 사례에 대하여 제로트러스트 +철학을 기반으로 문제를 해결하는 하나의 아키텍처를 제안하고 있으나, 이 방식이 가장 적절한 +해결책은 아니며 또한 제로트러스트 관점에서도 가장 높은 수준의 성숙도가 아니라는 점을 +이해하여야 한다. 기업 입장에서는 해당 사례를 참조하되, 기업망 환경에 적절한 제로트러스트 도입 +전략과 고유의 제로트러스트 아키텍처를 수립하는 것이 필요하다. + +### 1. 클라우드 환경 제로트러스트 적용 실증 사례 + +가. 개요 +국내 기업의 클라우드 도입에 대한 시장의 요구는 나날이 늘어가고 있다. 국내 기업의 +약 69.8%가 클라우드 서비스를 이용11하고 있으나 클라우드 보안 사고는 증가하는 추세12이고 +기업의 서비스가 중단되는 등 많은 보안의 문제점이 노출되고 있다. 이와 함께 클라우드 환경에서 +보안은 클라우드 도입과 확산의 측면에서 큰 불안 요소로 인식13된다. 이러한 보안의 위협은 SaaS +11  ‘2023년도 정보화 통계 조사’ 클라우드 컴퓨팅을 활용하는 서비스는 이메일(80.9%), 전사적 자원관리(ERP) 소프트웨어(52.5%), 오피스 +소프트웨어(49.0%) 순 +12  클라우드 사용 조직 23% “한 번 이상 보안사고 당해”, 제5회 클라우드 보안 & SECaaS 인사이트 2023’ 참가자 설문조사, 데이터넷(https:// +www.datanet.co.kr) +13  “2024년 국내 클라우드 컴퓨팅 및 AI 현황과 전망”에 따르면 클라우드 도입 및 활용과정의 어려움 중 1위가 클라우드 비용 통제 항목 +(47.8%)이고 그 다음이 데이터 프라이버시 및 보안 항목(30.6%)이다. + +부록 | 203 +기반 애플리케이션 등 인터넷에 상시 연결된 클라우드 서비스를 완벽히 통제할 수 없기 때문이다. +또한, 기존 레거시 보안 기술로 구성된 CSP의 보안 관제 인프라로는 세밀한 접속 제어 및 보안 +관제 등 세부 내용을 충족할 수 없다. 기존 레거시 보안 기술은 클라우드 서비스를 공급하는 CSP와 +고객 간 보안 책임에 대한 경계가 모호한 경우도 존재하기 때문에, 이에 대한 근본적인 대책이 +필요하다. +본 실증 사례의 제로트러스트 보안 모델은 기업망 내·외부에 언제 어디서든 공격자가 존재할 수 +있으며, 기존 기업망에서의 신뢰성이 더 이상 유효하지 않다는 전제로 진행하였다. 따라서 기업 내 +자산(데이터 혹은 리소스)에 접근하는 모든 주체를 지속적으로 인증하고, 자산에 대한 위험성을 +끊임없이 평가하며, 위험을 완화하는 대책을 포함하였다. +클라우드 기반 SaaS를 사용하고자 하는 기업환경에 제로트러스트 보안 모델을 적용함으로써 +실제 클라우드 사용할 경우 발생할 수 있는 보안 문제점을 확인·분석하였으며, 각 환경 대비 개선 +효과 분석을 위해 다음의 3가지 실험망 환경 구성 및 실험 시나리오를 수립해 실증을 진행했다. +그림 S-1 클라우드 환경 제로트러스트 실증을 위한 실험망 개념도 + + + +보안을 위해 구성된 망간 자료 전송 환경 및 +VPN 기반 클라우드 사용 환경 +제로트러스트 기반 클라우드 사용 환경 +보안을 위해 구성된 망간 자료 전송 환경 및 +제로트러스트 기반 환경 +사내 실험망 +(CSP) +인터넷 +IaaS +SaaS 서비스 +IaaS +SaaS 서비스 +IaaS +SaaS 서비스 + +| 인터넷 | | +| --- | --- | +| | | +| | | +| | | + + +204 | 제로트러스트 가이드라인 2.0 +나. 실증 환경 및 방법 +1) 실증 환경 및 내용 +- ‘A 기업’의 경우 제로트러스트 기반 SaaS 보안 관제 연동 시험 사업을 통해 실증을 진행. +구체적으로 SaaS 보안 관제 및 세밀한 접근권한을 부여함으로써 보안성이 높은 SaaS 사용 +환경을 구성한 후, 시험 진행 +- 제로트러스트 시험망은 SaaS 인프라 환경을 반영해 독립적으로 구성 +- 기존 보안 아키텍처를 가정한 접속 통제·VPN 기술 적용 환경(실험망 1)과 제로트러스트 +아키텍처 적용 환경(실험망 2, 3)으로 구분하여 실험을 수행하였으며, 실험망 별 세부 환경은 +다음과 같음 +- (실험망 1) 보안을 위해 구성된 망간 자료 전송 환경 및 VPN 기반 클라우드 사용 환경 +- (실험망 2) 제로트러스트 기반 클라우드 사용 환경 +- (실험망 3) 보안을 위해 구성된 망간 자료 전송 환경 및 제로트러스트 기반 클라우드 사용 +환경 +2) 실증 방법 및 네트워크 구성 +그림 S-2 클라우드 환경 제로트러스트 실증을 위한 실험망 구성도 +업무서버 +인터넷 +백본 +클라우드 접근 +업무망 데이터 흐름 +ZT Control Flow +ZT Data Flow(CC 인증 VPN 적용 구간) +L2 +PEP +PEP +PDP +사용자 PC + + +업무망 접근 + +부록 | 205 +- (실험망1) 파일 송수신 제어, VPN을 이용한 암호 통신 +- (실험망2) 제로트러스트를 이용한 SaaS 접근제어, 파일 송수신 제어, 암호 통신 및 모니터링 +- (실험망3) 파일 송수신 제어, 제로트러스트를 이용한 SaaS 접근제어, 암호 통신 및 모니터링 +3) 실증 시나리오 +- 사용자·단말의 SaaS 사용 접근을 제어 영역(①~④)과 모니터링 영역(⑤)으로 구분, 25개의 +시험 항목을 도출 +그림 S-3 클라우드 환경 제로트러스트 실증 시나리오 개념도 +ZT-PDP +ZT-PEP2 +ZT-PEP1 +ZT-PDP +ZT-PEP2 +실험망 1 +실험망 2 +실험망 3 +클라우드 +SaaS 서비스 +SaaS 서비스 +SaaS 서비스 +자료전송시스템 +인터넷 +인터넷 +인터넷 +향후 +보안관제 +연계 가능 +향후 +보안관제 +연계 가능 +자료전송시스템 +② 업무망 → 인터넷 연결 제어 +③ 업무망 → 클라우드 연결 제어 +④ 업무망 → 클라우드 접근 및 데이터 제어 +⑤ 업무망 → SaaS 서비스 모니터링 +SaaS Flow +Control Flow +암호통신(VPN) +내부 SaaS 사용자 +(업무PC) +내부 SaaS 사용자 +(업무PC/혼용PC) +내부 SaaS 사용자 +(업무PC/혼용PC) +① 인터넷 → 업무망 연결 제어 +① 인터넷 → 업무망 연결 제어 +(1) 인터넷에서 업무망에 연결된 단말 또는 리소스 접속 +(2) 인터넷에서 업무망에 연결된 단말로 파일 전송 제어 +② 업무망 → 인터넷 연결 제어 +(3) 업무망 연결 단말의 인터넷(웹 서비스) 접속 차단 + +| | ① 인터넷 | | | 결 제어 | | | | | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| ② 업무망 | → 인터넷 연결 제어 | | | | | | | | +| ③ 업무망 | → 클라우드 연결 제어 | | | | | | | | +| ④ 업무망 | → 클라우드 접근 및 데이터 제어 | | | | | | | | +| ⑤ 업무망 | → SaaS 서비스 모니터링 | | | | | | | | +| | | | | | | | | | + + +206 | 제로트러스트 가이드라인 2.0 +③ 업무망 → 클라우드 연결 제어 +(4) 업무망 연결 비인증 단말의 클라우드 접속 차단 +(5) 업무망 연결 비인증 단말의 SaaS 접속 차단 +(6) 강화된 인증 수행 단말(및 사용자)의 비허용 된 SaaS 접속 차단 +(7) 강화된 인증 수행 단말(및 사용자)의 허용된 SaaS 접속 허용 +(8) 강화된 인증 수행 단말(및 사용자)의 SaaS 접속 시, 일원화된 인증(SSO) 처리 +(9) 일원화된 인증(SSO) 기반 SaaS 사용 시, 인증 정보 보호 +(10) 보안 규정 미준수 단말의 SaaS 접속 차단 +(11) 지속적 검증을 통해 보안 규정 미준수 단말의 접속 해제 +(12) 허용되지 않은 소프트웨어로 SaaS 접속 차단 +(13) 허용된 소프트웨어로 허용되지 않은 SaaS 접속 차단 +(14) 소프트웨어 공급망보안 검사 기반 안전하지 않은 소프트웨어의 SaaS 접속 차단 +(15) 사용자 정보 삭제 시 SaaS 접속 해제 +(16) 단말 또는 업무망과 클라우드 간 터널링 기반 데이터 패킷 보호 +④ 업무망 → 클라우드 접근 및 데이터 제어 +(17) 인증된 사용자가 SaaS 내 허용되지 않은 기능접근 차단 +(18) 인증된 사용자의 SaaS 내 파일 업로드 차단 수행 +(19) 인증된 사용자의 SaaS 내 파일 다운로드 차단 수행 +(20) 인증된 사용자의 SaaS 내 파일 업로드 백신 검사 기반 차단 수행 +(21) 인증된 사용자의 SaaS 내 파일 다운로드 백신 검사 기반 차단 수행 +⑤ 모니터링 (접속 통제 및 망간 자료 전송) +(22) 실시간 통신 구간을 통과하는 모든 사용자, 단말, 소프트웨어, SaaS 접속기록 +(23) 실시간 통신 구간을 통과하는 모든 사용자, 단말의 보안 컴플라이언스 준수 여부 기록 +(24) 실시간 통신 구간을 통과하는 모든 사용자, 단말의 SaaS 내 기능(URL)접근 기록 +(25) 접속 통제 및 망간 자료 전송 실시간 통신 구간을 통과하는 모든 사용자, 단말의 SaaS 내 +파일 업로드 및 다운로드 기록 + +부록 | 207 +다. 실증 결과 및 개선 효과 +그림 S-4 클라우드 환경 제로트러스트 실증 환경별 시험 항목 만족 수준 + + + +3개 항목 만족 +연결 제어 불가 +VPN ↔ VPN(인터넷) 구간 암호화 +모니터링 불가 +클라우드/데이터 +접근제어 불가 +24개 항목 만족 +25개 항목 만족 +① 인터넷 → 업무망 +연결 제어 +② 업무망 → 인터넷 +연결 제어 +③ 업무망 → 클라우드 +연결 제어 +④ 업무망 → 클라우드 +및 데이터 접근제어 +⑤ 모니터링 +(망분리 및 망간자료 전송) +단말 ↔ 클라우드 구간 암호화 +단말 ↔ 클라우드 구간 암호화 +- (실험망 1) ‘물리적 접속 통제+망간 자료 전송+VPN’ 환경은 업무망 ↔ 클라우드(③), 업무망 +↔ 클라우드/데이터 접근(④), SaaS 사용 모니터링(⑤) 부분에서 제어 및 모니터링 기능을 +제공하지 않는 환경으로 구성함 +- 현재 망간 자료 전송 시스템은 SaaS 서비스에 대한 파일 송수신 제어 기능을 제공하지 않는 +등 보안 취약점 발생 +- (실험망 2) 접속 통제가 불가능한 환경에 제로트러스트 기술을 적용하면 SaaS 서비스 +접근제어, 암호 통신 및 모니터링 등 추가 보안 기능 사용할 수 있어 보안성 강화 +- (실험망 3) ‘물리적 접속 통제+망간 전송’ 환경에 제로트러스트 기술을 적용하면 SaaS 서비스 +접근제어와 파일 송수신 제어 및 모니터링 부분에서 보안성 강화 +- SaaS 보안 관제 및 세밀한 접근권한을 부여함으로써, SaaS 사용 환경에서 기존 보안 +시스템 대비 보안을 강화할 수 있다는 사실을 확인함 +1) 가이드라인 1.0을 준수하는 대안 기술 제시 +- 가이드라인 1.0에 기반한 모델을 통하여 클라우드 보안 강화 방안을 마련 +- 외부 인터넷과 논리적으로 격리된 제로트러스트 기반 단말 격리 기술을 적용함 +- 클라우드 내 SaaS와 업무망 내 PC 간 제로트러스트 기반 접속 통제 기술을 적용함 +- 先인증 後접속 통신 제어 메커니즘 기반 SaaS에 특화된 관제 기술을 적용함 + +| | ① 인터넷 → 업무망 연결 제어 | ② 업무망 → 인터넷 연결 제어 | ③ 업무망 → 클라우드 연결 제어 | ④ 업무망 → 클라우드 및 데이터 접근제어 | ⑤ 모니터링 (망분리 및 망간자료 전송) | +| --- | --- | --- | --- | --- | --- | +|  | | 목 만족 | 연결 제어 불가 VPN ↔ VPN(인터넷) 구간 암호화 | 클라우드/데이터 접근제어 불가 | | +| | | 목 만족 | 단말 ↔ 클라우드 구간 암호화 | | | + + +208 | 제로트러스트 가이드라인 2.0 +2) 기존 보안 기술과 제로트러스트 접속 제어 비교 개선 효과 도출 +- 각종 보안 지침의 준수 및 보안성이 강화된 제로트러스트 기반의 접속 통제 환경을 통해 +보안성을 강화함 +- 각종 보안 솔루션을 통한 파일 전송 제어 환경의 경우, 실시간 통신 구간의 관제 기술이 +없으므로 클라우드와 SaaS 사용이 불가능할 수 있음 +- 제로트러스트 기반 논리적 접속 통제된 환경에서 클라우드 전송 제어 기술 적용 시 SaaS 관제 +및 기존 보안 솔루션과 같은 파일 전송 제어가 가능함 +3) 애플리케이션 레벨 보안 관제 및 통제 기준 마련 +- 기존 보안 솔루션의 취약점인 실시간 통신 구간의 관제 사각지대 개선 +- SaaS 관제 및 효율적인 접속 통제 문제 해결을 통해 통제 가능한 보안에 특화된 SaaS 모델 +제시 +- 상기 요소를 통해 안전하고 보안성이 강화된 SaaS 사용 환경 기준 절차를 마련 +4) SaaS 공급 및 수요기업의 보안 수준 제고 방안 마련 +- SaaS 수요 희망 기업에 제로트러스트 모델을 적용하여 안전하게 SaaS 서비스를 이용할 수 +있는 보안 수준 제고 방안 마련 +- SaaS 공급기업은 제로트러스트 모델을 사용해 수요기업에 SaaS 공급 +- SaaS 수요기업은 제로트러스트 모델이 적용된 SaaS 도입 가능 여부를 확인 가능 +5) SaaS 보안 플랫폼 및 거버넌스 확보 +- 안전한 SaaS 사용을 위한 보안 플랫폼 적용을 위해서 제로트러스트 모델 중심의 다양한 보안 +기술과 연동해 보안성을 강화할 수 있음 +- SaaS를 적용 추진하고자 하는 기업의 SaaS 공급자의 시스템 접근권한 및 SaaS 사용 관리자 +접근권한 승인 체계 확보 +- 제로트러스트 모델 적용으로 SaaS에 특화된 관제 로그의 기업 내 공유 체계 확보 +- 제로트러스트를 적용, 접속 통제 환경에서 발생하는 보안 사각지대를 해소함으로써 클라우드 +기반 SaaS를 보다 안전한 환경에서 사용할 수 있도록 개선 + +부록 | 209 +- 레거시 보안 환경에서 클라우드 기반 SaaS 사용 시, 보안 사각지대 발생 +- 제로트러스트 기술을 적용해 다양한 환경에서 클라우드 기반 SaaS 사용에 따른 보안 +사각지대를 개선하는 결과 도출 +- 제로트러스트 모델 기반, SaaS에 최적화된 보안 관제 체계 구축 +- SaaS 환경에서는 인증된 사용자가 허용된 서비스를 사용해야 함. 따라서, TMS, SIEM 등 +관제 방식과 함께 SaaS에 특화된 관제 기술 및 체계 필요 +- 본 실증을 통해 제로트러스트를 적용한 SaaS 특화 관제 기술 확보. 향후 다양한 보안 관제 +시스템(TMS, SIEM 등)과 결합한 SaaS 특화 관제 체계를 도입할 경우, 보안성 강화 효과 + +### 2. 온프레미스 통합 환경 제로트러스트 실증 사례 + +가. 실증 개요 +본 실증은 기업 리소스의 시스템, 애플리케이션, 데이터를 모두 보호할 수 있는 제로트러스트 +아키텍처 프레임워크를 구축하는 것이다. +이를 위해 사용자 기기(PC)에는 신뢰도를 도출하기 위하여 기기 위험 상태를 판단하여 위험도를 +확인하는 사용자 UEM이 구축된다. 이를 통해 사용자가 리소스에 접속하는 경우에는 항상 +기기의 신뢰도 점수를 기반으로 PDP에서 접근권한 승인 여부를 평가하게 된다. PEP는 리소스의 +종류(시스템, 애플리케이션, 데이터)에 따라 각각 3개의 PEP가 구축되었고, 이 중 애플리케이션을 +위한 PEP는 VPN을 대체하고 안전한 네트워크 연결기능을 제공하는 ZTNA의 역할도 수행하였다. +PDP는 ICAM을 기반으로 구축되었고, 해당 ICAM은 사용자, 기기 및 엔드포인트(PC), 리소스 +중 시스템 등의 자산과 계정을 등록하고 관리하는 기능, MFA 통합 인증 제공 기능, 접근제어 +정책 관리 기능 등을 제공하도록 하였다. 특히 본 실증에서는 4개의 PEP와 PDP가 상호 연동되어 +제로트러스트 아키텍처를 실현하는 사례를 구현하였다. +마지막으로 리소스 중 시스템에 대하여 가상화 환경에서의 제로트러스트 핵심 구현 사항 중 +하나인 마이크로 세그멘테이션(Micro Segmentation)을 실증하였다. + +210 | 제로트러스트 가이드라인 2.0 +그림 S-5 온프레미스 통합 환경 제로트러스트 실증을 위한 환경 구성 +- (제로트러스트 아키텍처) NIST 제로트러스트 아키텍처 및 가이드라인 1.0의 구성요소를 모두 +준용한 제로트러스트 보안 모델 +- (리소스 보호 강화) 시스템, 데이터, 애플리케이션으로 정의된 엔터프라이즈 리소스의 보호, +리소스별 세부 보호 +- (ZTA + ZTNA) 접근 주체로부터 리소스에 이르는 전 영역에 대해 구체적인 제로트러스트 목표 +보안 모델 및 시스템 제시 +- (제로트러스트 원리 및 접근법 반영) 가이드라인 1.0의 제로트러스트 아키텍처 기본 원리, +NIST SP 800-207의 제로트러스트 기본 원리 7가지 및 접근법 3가지에 부합하는 보안 +시스템 실증 +나. 실증 환경 및 방법 +1) 목표 제로트러스트 아키텍처 시스템 논리적 구성 +목표 시스템 구성은 크게 온프레미스 통합 환경 상의 사용자 기기(PC), PEP, PDP, 리소스로 +구분된다. 우선 사용자 PC에는 크게 5개의 사용자 클라이언트 SW가 설치된다. 첫 번째는 +사용자 PC의 신뢰도 평가를 지원하는 엔드포인트용 클라이언트, 두 번째는 시스템 접근제어 + +![이미지 p.211](images/p0211_img0.png) + + +부록 | 211 +기능을 제공하는 시스템 접근제어 클라이언트, 세 번째는 네트워크 보안 기능을 제공하는 ZTNA +클라이언트, 네 번째는 데이터 접근제어 기능을 제공하는 데이터 접근제어 클라이언트, 다섯 번째는 +웹 애플리케이션 제어 기능을 제공하는 웹 애플리케이션 제어 클라이언트이다. +PEP의 경우에는 총 4개의 PEP가 구성되었는데 시스템 접근제어를 위한 PEP, 애플리케이션 +접근제어 PEP, 네트워크 보안 기능을 제공하는 PEP, 그리고 데이터 접근제어 기능을 제공하는 +데이터 제어 PEP이다. +PDP의 경우에는 ICAM 중심의 PDP를 구축하고 이를 기반으로 기업 사용자 계정, 사용자 PC, +리소스를 모두 등록하여 인가된 사용자와 인가된 시스템만 운용 가능하게 한다. 또한 MFA 기반의 +사용자 통합 인증 기능을 제공함으로써 각각의 PEP가 리소스 접속 시 사용자 계정 및 통합인증 +관리를 수행하는 역할을 한다. +마지막으로 리소스는 서버 시스템, 애플리케이션, 데이터로 구성된다. 이 중 서버 시스템, +애플리케이션 보호 및 데이터 보호는 PEP에서 지원되며, 서버 시스템의 마이크로 세그멘테이션은 +시스템 접근제어 에이전트, 워크로드 보호 에이전트 등을 기반으로 구성된다. +그림 S-6 온프레미스 통합 환경 제로트러스트 아키텍처 논리 구성도 +사용자기기보안상태확인및접근제어 +크리덴셜 +‘위험도’ 측정 +인가된사용자및 +기기 +지속적보안상태검증 +동적접근제어 +인가된사용자및 +디바이스인증 +사용자 +기기 +다중인증 +‘신뢰도’ 판단 +… +… +접근주체기기포함 +리소스– 시스템애플리케이션데이터 +접근주체기기 +제로트러스트아키텍처원칙접근법및제로트러스트성숙도모델을반영한목표보안모델 + +212 | 제로트러스트 가이드라인 2.0 +표 S-15 상기 논리 구성도 상 보안 영역별 주요 기능 +보안 영역별 +주요 기능 +UEM +사용자 기기 통합 엔드포인트 보안 관리 및 평가 +Data Control +파일 접근/저장 제어, 무해화 검사 +Web App. Control +웹 애플리케이션 통제 +ICAM +사용자, 기기 인증 및 접근제어 정책관리 +PAM G/W +시스템 접근제어 G/W +PAM +보안 커널 기반 접근제어 +CWPP +VM 워크로드 보안 +ZTNA +안전한 채널 구성, 접근통제 +2) 목표 제로트러스트 아키텍처 물리적 구성 +앞에서 언급한 제로트러스트 아키텍처의 논리적 구성을 기반으로 실제 실증 환경에서 구성이 +되는 물리적 구성은 아래 [그림 S-7]과 같다. 그림에서 실증 기업의 온프레미스 환경은 “업무망/ +내부망”과 “서버망/서버팜”으로 이루어지며 기업 내 내부 직원들도 해당 존에 함께 존재하게 된다. +또한, 재택 또는 원격 근무를 수행하는 기업 직원들이 존재할 수 있는데 이를 “원격/재택”으로 +표현한다. PEP와 PDP 시스템은 기본적으로 기업 내부에 존재하게 되는데 퍼블릭 클라우드를 +사용하는 환경에서는 클라우드 존에 구성되어 운용될 수도 있다. +그림 S-7 온프레미스 통합 환경 제로트러스트 아키텍처 물리적 구성도 +인터넷또는 +외부망 +백본스위치 +서비스서버 +업무서버 +웹서버 +서버 +업무망내부망 +원격재택 +지사협력사와원격재택은접근보안수준이다를뿐실증환경측면에서는거의유사한환경임 +사용자 +운영자 +사용자 +서버망서버팜 +네트워크스위치 +네트워크스위치 +네트워크스위치 +보안수준진단 +서버접근제어 +보안수준진단 +시스템접근제어 +네트워크통제 +애플리케이션통제 +웹애플리케이션통제 +접근제어 +데이터보안 +네트워크스위치 +서버접근제어 +기반서비스 + +| 보안 영역별 주요 기능 | UEM 사 | 용자 기기 통합 엔드포인트 보안 관리 및 평가 | +| --- | --- | --- | +| | Data Control 파 | 일 접근/저장 제어, 무해화 검사 | +| | Web App. Control 웹 | 애플리케이션 통제 | +| | ICAM 사 | 용자, 기기 인증 및 접근제어 정책관리 | +| | PAM G/W 시 | 스템 접근제어 G/W | +| | PAM 보 | 안 커널 기반 접근제어 | +| | CWPP V | M 워크로드 보안 | +| | ZTNA 안 | 전한 채널 구성, 접근통제 | + + +부록 | 213 +- 경계 보안 모델 대비 구성 +- 접근 주체로부터 리소스에 이르는 보안 영역별 목표 보안 모델 물리적 구성 +- 경계 보안 모델은 외부는 신뢰하지 않는 영역, 내부는 신뢰하는 영역으로 구분 +- 제로트러스트 모델은 내·외부 경계를 구분하지 않고 모두 신뢰하지 않는 영역으로 구분 +- 업무환경 별 물리적 구성 +- 업무망/내부망, 서버망/서버팜, 원격/재택 물리 구성 기준 실증 +- 업무환경 별 물리적 제로트러스트 보안 시스템 구성 +- 온프레미스, 클라우드(Private/Public), 원격/재택 업무환경 별 물리적 구성 +3) 기존(As-Is) 시스템과 개선(To-Be) 시스템 비교 +상기 모델을 기반으로 기존 시스템과 제로트러스트 아키텍처를 도입한 후의 개선된 시스템을 +비교하면 아래 [그림 S-8]과 같다. 기존 시스템은 제로트러스트 아키텍처가 도입되기 전이고 +개선된 시스템은 제로트러스트 아키텍처가 구축된 이후의 모델이다. 제로트러스트 아키텍처 구성을 +위해서 PDP와 PEP 시스템을 제로트러스트 아키텍처 호스트(Host) 서버에 설치·구성하였고 +애플리케이션 보호를 위한 PEP이자 ZTNA는 독립 서버를 기반으로 ZTNA 게이트웨이 형태로 +구축하였다. 백엔드(Back-end) 서버팜(Server Farm) 존에는 마이크로 세그멘테이션을 위한 +시스템 접근제어와 워크로드 보안 제품을 설치하여 운영하였다. +- 레거시 보안 모델 (As-Is 검증 환경) +- 수요기관 기존 보안 모델 시스템 구성도 +- 일반적인 레거시 보안 솔루션 통합 구성 +- 사용자의 엔터프라이즈 리소스 접근 흐름 +- 제로트러스트 보안 모델 (To-Be 검증 환경) +- 제로트러스트 보안 모델 시스템 구성도 +- 본 사업 목표 보안 모델 구성요소로 재배치 +- 제로트러스트 기반 엔터프라이즈 리소스 접근 흐름 + +214 | 제로트러스트 가이드라인 2.0 +그림 S-8 온프레미스 통합 환경 제로트러스트 아키텍처 구성 도입 이후 개선 시스템 비교 + + +사용자PC +사용자PC +사용자PC +사용자PC +Internet +Internet +Firewall +Firewall +내부망/업무망 +내부망/업무망 +ZTNA Client / UEM +Agent +ZTNA Client / UEM Agent +Switching Hub +Switching Hub +VPN Client +VPN +Server +NAC +Server +PAM +Manager +UEM +Server +ICAM/ +PAM +Gateway +ZTNA +Policy +Center +ZTNA +Gateway +(외부) +ZTNA +Gateway +Sensor(내부) +ZTA +Host +Server +ZTA Host Server +원격/재택 +시험용 +대상서버 +시험용 +대상서버 +시험용 +대상서버 +원격/재택 +시험용 +대상서버 +시험용 +대상서버 +시험용 +대상서버 +다. 실증 결과 +각 실증 수요기관들의 현재 시스템에서 보완해야 하는 추가 보안 필요 기능을 도출하고 이를 +제로트러스트 아키텍처 보안 시스템을 구성하여 제공함으로써 제로트러스트 아키텍처 적용 후 보안 +기능이 개선된 모델을 구현하였다. +그림 S-9 온프레미스 통합 환경 제로트러스트 아키텍처 도입 이후 업무 접근 프로세스 +주체등록 +접근결정 +권한할당 +보안수준 +진단 +매핑가능 +등록된 +디바이스기반 +접속차단 +접속불가 +사용자 +디바이스 +미등록 +미설치 +실패 +거부 +등록 +설치 +설치 +설치 +성공 +허가 +주체정보등록주체보안상태평가 +통합정책접근관리 +리소스내부보호강화 +- +의사용자디바이스 +등록및매핑여부검증 +- 미등록시등록과매핑요청 +담당자승인필요 +- 사용자디바이스등록요청 +주체등록 +- +기반암호화 +채널접근 +- +기반 +엔드포인트통합관리 +- 안티멀웨어패치 +보안 +진단 +- 위험도도출정책결정의기반 +데이터 +- 주체자산정책통합관리 +및배포 +- 위험도를포함한신뢰도 +기반접근결정 +- 사용자리소스등세분화된 +접근정책할당 +접근결정 +- +의정책결정에따라 +따라 +지정된리소스에접근 +- 리소스별 +에따른 +세분화접근제어 +- 권한없는리소스는접근 +불가 +- 최소접근권한원칙적용 +권한할당 +- 리소스접속중이상행위 +보안수준에따른동적 +접근제어 +- 지속적모니터링 +상태평가기반탐지 +보안수준진단 +- +내부횡적이동 +방어 +- 커널기반명령어통제 +- 네트워크차단 +- 웹앱제어 +- 데이터파일 +리소스 + +부록 | 215 +제로트러스트 아키텍처 적용 후 모든 사용자의 리소스 접근은 상기 [그림 S-9]와 같은 프로세스로 +이루어지게 되었다. [그림 S-10]의 접근법을 기반으로 수요 기업들은 기존의 보안 위협 문제점을 +개선할 수 있는 새로운 차세대 제로트러스트 아키텍처 기반 시스템 구성을 하게 되었고, 이를 +통하여 잠재적인 보안 위협을 제거할 수 있게 되었다. +그림 S-10 온프레미스 통합 환경 제로트러스트 아키텍처 도입 후 강화된 보안 방향 +주체의 시스템(서버) 정상 접근 이후, +통제되지 않는 횡적이동(내부 통제) +정상적인 주체의 시스템(서버) +접근 이후, 보안 상태 변화 +접근 사용자, 시스템과 무관한 WIFI ++ SSL-VPN 기반 접근 +탈취된 자격 증명으로 +업무 시스템 접근 +외부 환경에서 SSL-VPN, NAC +기반 웹 애플리케이션 접근 +암호화되지 않은 데이터(파일) 관리 +주체의 시스템(서버) 정상 접근 이후, +횡적이동 통제 등 내부 보호 강화 +정상적인 주체의 시스템(서버) 접근 이후, +보안 상태 변화에 따른 동적 접근제어 +사용자, 시스템별 정책 기반 +세분화된 접근제어 +강력한 신원인증/검증 기반의 탈취된 +자격증명 접근 차단 +웹 격리 기반 안전한 +웹 애플리케이션 접근 +파일 업/다운로드 시 +암호화 기반 안전한 데이터 관리 +시스템 보호 및 +내부 보호 강화 +보안 상태 변화에 따른 +조치 방안 +세분화 된 접근정책으로 +공격표면 최소화 +강력한 사용자 확인으로 +위해행위 원천 차단 +RBI 기반 안전한 +웹 애플리케이션 서비스 제공 +웹 애플리케이션 환경에서 +안전한 데이터 관리 + +> +> ++ ++ ++ +> +> +> +> + + + + +   +  + +216 | 제로트러스트 가이드라인 2.0 + +## 제4절 + +미 연방정부 제로트러스트 도입·실증 현황 +4절에서는 미 연방정부 제로트러스트 아키텍처 도입·실증에 현황에 대해 2가지 실증 사례를 +소개한다. 해당 실증 사례는 각각 NIST SP 1800-35 제로트러스트 아키텍처 구현 프로젝트와 미 +국방부 Thunderdome 프로젝트로, NIST 및 미 국방부에서 자체적으로 제로트러스트 아키텍처를 +구현하여 도입하는 과정 및 구현하면서 얻은 결과에 대해 정리한다. +다만, 여기서 설명하는 제로트러스트 실증 사례들은 어디까지나 미국 환경에 초점을 맞춘 +것이므로 망분리 정책과 같은 법적 규제가 있는 국내 환경에서는 적절하지 못한 사례일 수도 있다는 +점을 인지하여야 한다. 기업 입장에서는 해당 제로트러스트 도입 실증 사례를 참고하되, 실증을 +진행한 방법보다는 실증을 통해 얻은 교훈(어려움, 고려사항, 결과 등)에 초점을 맞추어 자체적인 +제로트러스트 아키텍처를 수립하는 것이 필요하다. + +### 1. NIST SP 1800-35 구현 현황 + +가. NIST SP 1800-35 문서 개요 +NCCoE(National Cybersecurity Center of Excellence)는 NIST 산하의 사이버보안 센터로, +다양한 산업체 및 미 연방정부 기관과 협력하여 실질적인 사이버 보안 솔루션을 개발하고 있다. +특히, NIST SP 1800-35에서 중요한 역할을 담당하며, 제로트러스트 아키텍처 구현을 위한 +다양한 접근법을 시연하기 위해 24개의 공급업체와 협력하여 프로젝트를 진행했으며, 단계적 +접근 방식을 통해 기존 기업 환경에서 출발해 점진적으로 기능을 확장하거나 조정하는 방식으로 +제로트러스트 아키텍처 솔루션을 개발했다. 첫 단계에서는 NIST SP 800-207에 명시된 세 가지 +도입 방식 중 하나인 강화된 인증 거버넌스(EIG)를 도입하였으며, 초기 클라우드 기능을 포함하지 +않는 단계인 EIG 초기 단계(EIG Crawl Phase)로부터 시작했다. 둘째 단계로, 클라우드 기능을 + +부록 | 217 +추가하여 EIG 실행 단계(EIG Run Phase)로 발전시켰다. 이후, 마이크로 세그멘테이션, SDP, +SASE의 배포 방식에 대해서도 실증 사례를 추가하여 2024년 7월 현재 EIG 초기 및 실행 단계를 +포함 총 17개의 사례를 실행하였으며, 각 사례가 제로트러스트 아키텍처 원칙을 만족하고 있다고 +기술하였다. +이 프로젝트의 목표는 다양한 제로트러스트 아키텍처를 개발하고 시연하는 것이다. NCCoE는 +NIST SP 800-207에 설명된 제로트러스트 아키텍처 원칙을 충족하는 기술 공급업체와 협력하여 +여러 제로트러스트 아키텍처 솔루션을 구축함으로써 제로트러스트 아키텍처의 역량을 입증하고 +있다. 이 솔루션의 목적은 기업 보안 정책을 준실시간 및 동적으로 적용하여 인증되고 권한이 +부여된 사용자, 기기에 대한 접근을 제한하면서도 다양한 비즈니스 요구를 유연하게 지원하는 +것이다. 구축된 제로트러스트 아키텍처는 기존 기업 및 클라우드 기술과 상호 운용성을 유지하면서 +최종 사용자에게 미치는 영향을 최소화하도록 설계되었다. +그림 S-11 컨소시엄별 참여 기업 +Enterprise 1 +Enterprise 2 +Enterprise 3 +Enterprise 4 +EIG 초기 단계 +EIG 실행 단계 +SDP, +마이크로 +세그멘테이션, +SASE +Build1 +Build2 +Build3 +Build4 +Build5 +Build6 +AWS, IBM, Ivanti, +Mandiant, Okta, Radiant +Logic, SailPoint, Tenable, +Zimperium +Cisco Systems, IBM, +Mandiant, Palo Alto +Networks, Ping Identity, +Radiant Logic, SailPoint, +Tenable +F5, Forescout, Lookout, +Mandiant, Microsoft, +Palo Alto Networks, +PC Matic, Tenable +F5, Forescout, Mandiant, +Microsoft, Palo Alto +Networks, PC Matic, +Tenable +F5, Forescout, Mandiant, +Microsoft, Palo Alto +Networks, PC Matic, +Tenable +F5, Forescout, Mandiant, +Microsoft, Palo Alto +Networks, Tenable +IBM, Mandiant, Tenable, +VMware +IBM, Mandiant, +Palo Alto Networks, +Tenable, VMware +Mandiant, Microsoft, +Tenable +Cisco Systems, IBM, +Mandiant, Palo Alto +Networks, Ping Identity, +Radiant Logic, SailPoint, +Tenable, VMware +Google Cloud, IBM, +Mandiant, Okta, Radiant +Logic, SailPoint, +Symantec by Broadcom, +Tenable, VMware +Google Cloud, IBM, +Lookout, Mandiant, +Okta, Radiant Logic, +SailPoint, Tenable, +VMware +AWS, IBM, Ivanti, +Mandiant, Okta, Radiant +Logic, SailPoint, Tenable, +Zscaler +AWS, IBM, Ivanti, +Mandiant, Okta, Radiant +Logic, SailPoint, Tenable, +Zscaler +AWS, Appgate, IBM, +Ivanti, Mandiant, Okta, +Radiant Logic, SailPoint, +Tenable, Zimperium +AWS, IBM, Mandiant, +Okta, Palo Alto Networks, +Radiant Logic, SailPoint, +Tenable +AWS, IBM, Ivanti, +Mandiant, Okta, Radiant +Logic, SailPoint, Tenable + +| EIG 초기 단계 | | Build1 | | AWS, IBM, Ivanti, Mandiant, Okta, Radiant Logic, SailPoint, Tenable, Zimperium | Cisco Systems, IBM, Mandiant, Palo Alto Networks, Ping Identity, Radiant Logic, SailPoint, Tenable | F5, Forescout, Lookout, Mandiant, Microsoft, Palo Alto Networks, PC Matic, Tenable | | +| --- | --- | --- | --- | --- | --- | --- | --- | +| | | | | | | | | +| EIG 실행 단계 | Build2 | | | AWS, IBM, Ivanti, Mandiant, Okta, Radiant Logic, SailPoint, Tenable, Zscaler | | F5, Forescout, Mandiant, Microsoft, Palo Alto Networks, PC Matic, Tenable | IBM, Mandiant, Palo Alto Networks, Tenable, VMware | +| | | | | | | | | +| | | | | | | | | +| SDP, 마이크로 세그멘테이션, SASE | Build3 Build4 Build5 Build6 | Build3 | | AWS, IBM, Ivanti, Mandiant, Okta, Radiant Logic, SailPoint, Tenable, Zscaler AWS, Appgate, IBM, Ivanti, Mandiant, Okta, Radiant Logic, SailPoint, Tenable, Zimperium AWS, IBM, Mandiant, Okta, Palo Alto Networks, Radiant Logic, SailPoint, Tenable AWS, IBM, Ivanti, Mandiant, Okta, Radiant Logic, SailPoint, Tenable | Cisco Systems, IBM, Mandiant, Palo Alto Networks, Ping Identity, Radiant Logic, SailPoint, Tenable, VMware Google Cloud, IBM, Mandiant, Okta, Radiant Logic, SailPoint, Symantec by Broadcom, Tenable, VMware Google Cloud, IBM, Lookout, Mandiant, Okta, Radiant Logic, SailPoint, Tenable, VMware | F5, Forescout, Mandiant, Microsoft, Palo Alto Networks, PC Matic, Tenable F5, Forescout, Mandiant, Microsoft, Palo Alto Networks, Tenable Mandiant, Microsoft, Tenable | IBM, Mandiant, Tenable, VMware | + + +218 | 제로트러스트 가이드라인 2.0 +이 프로젝트는 총 4개 컨소시엄의 장비들을 NIST NCCoE 환경에 배치하여 네트워크 구성 및 +실증을 진행하였다. 해당 4개의 실험실 환경은 참여 기업간 협력을 위한 일종의 컨소시엄으로 각각 +Enterprise 1~4로 불리는데, 각 환경에서 참여 기업의 클라우드 인프라를 사용하여 다양한 사례를 +구현하고 시연하였다. [그림 S-11]은 각 환경에서 빌드별로 어떤 협력 기업들이 참여하였는지 +보여준다. +1) NIST SP 1800-35 문서 발간 흐름 +NCCoE는 이러한 프로젝트와 관련하여 2022년부터 5권(A~E)의 시리즈 문서를 발행하고, +지속적으로 의견을 수렴하여 수정 작업을 진행해왔다. 2023년 8월 기준 각 권별로 2~3번째 예비 +초안(Preliminary Draft)이 발간되었다. +표 S-16 NIST SP 1800-35 문서 시리즈 +권 +제목 +내용 +A +Executive Summary +프로젝트 개요 (22.06, 22.12) +B +Approach, Architecture, and +Security Characteristics +제로트러스트 참조 아키텍처 및 단계, 조직·빌드 소개, 구현 결과 및 교훈 등 +(22.07, 22.12, 23.07) +C +How to Guides +빌드별 설정, 설치, 통합 방법 소개 (22.08, 22.12, 23.07) +D +Functional Demonstrations +빌드별 기능 데모 계획(유스케이스별) 및 결과 (22.08, 22.12, 23.08) +E +Risk and Compliance +Management +위협, 취약점, 위험에 대한 정의 등 위험 분석과 제로트러스트 참조 +아키텍처 빌드별 기능과 각 규정(CSF, 800-53 통제항목, EO-14028 +보안조치)에 매핑 (22.12, 23.09) +이후, 2024년 7월경 방대한 내용을 담고 있는 각 시리즈 문서들을 통합하여 4번째 예비 +초안으로써 두 가지 형식(PDF, 웹)으로 문서를 제공하기 시작했다. PDF 형식의 문서는 프로젝트 +목표, 참조 아키텍처, 다양한 제로트러스트 아키텍처 구현 사례 및 결과에 대한 요약을 담아 +프로젝트에서 얻은 주요 통찰을 제공하는 소개 자료로 활용된다. 웹 형식의 문서는 제로트러스트 +아키텍처 구현 과정에서 활용된 기술, 통합 및 구성 방법, 입증된 사용 사례, 시나리오 등 심층적인 +세부 정보를 제공한다. + +| 권 | 제목 | 내용 | +| --- | --- | --- | +| A | Executive Summary | 프로젝트 개요 (22.06, 22.12) | +| B | Approach, Architecture, and Security Characteristics | 제로트러스트 참조 아키텍처 및 단계, 조직·빌드 소개, 구현 결과 및 교훈 등 (22.07, 22.12, 23.07) | +| C | How to Guides | 빌드별 설정, 설치, 통합 방법 소개 (22.08, 22.12, 23.07) | +| D | Functional Demonstrations | 빌드별 기능 데모 계획(유스케이스별) 및 결과 (22.08, 22.12, 23.08) | +| E | Risk and Compliance Management | 위협, 취약점, 위험에 대한 정의 등 위험 분석과 제로트러스트 참조 아키텍처 빌드별 기능과 각 규정(CSF, 800-53 통제항목, EO-14028 보안조치)에 매핑 (22.12, 23.09) | + + +부록 | 219 +2) 제로트러스트 아키텍처 구현 과제 +NCCoE는 이 프로젝트 전반에 걸쳐 조직이 제로트러스트 아키텍처를 구현하는 데 있어서 직면할 +수 있는 어려움들을 크게 3가지 관점(조직, 기본 요소, 기술)에서 분석하였다. 해당 내용은 다음 <표 +S-17>에 기술되어 있다. +표 S-17 제로트러스트 아키텍처 구현에서의 어려움 +관점 +내용 +조직 관점 +‣ 제로트러스트 아키텍처가 대규모 조직에만 적합하며 상당한 투자가 필요하다는 인식, 제로트러스트 +아키텍처가 모든 규모의 조직에 적용될 수 있는 일련의 지침 원칙이라는 사실을 충분히 이해하지 못함 +‣ 제로트러스트 아키텍처가 환경 운영이나 최종 사용자 경험에 부정적인 영향을 미칠 수 있다는 우려 +‣ 전환 계획을 수립하기 위하여 필요한 정책, 시범 또는 개념 증명 구현을 개발할 자원이 부족함 +‣ 기존 투자를 활용하면서 제로트러스트 아키텍처로 전환하는 과정에서 현대화 추진과 우선순위를 균형있게 +맞추는 문제 +‣ 관리자, 보안 인력, 운영자, 최종 사용자, 정책 결정권자에게 필요한 기술과 교육의 중요성에 대한 이해 부족 +기본 요소 +관점 +‣ 비즈니스 애플리케이션, 자산, 보호해야 할 프로세스를 완전히 이해하기 위한 적절한 자산 목록 및 관리가 +부족하며, 이러한 리소스의 중요성에 대한 명확한 이해가 없음 +‣ 특정 애플리케이션과 서비스에 대해 세밀하고 필요한 접근 정책을 적용하기 위한 조직 전반에 걸친 사용자 +역할의 디지털 정의, 관리, 추적이 부족 +‣ 조직의 통신 및 사용 패턴에 대한 가시성이 부족하여 조직의 주체, 자산, 애플리케이션 및 서비스 간의 +상호작용에 대한 이해가 제한적이며, 이를 식별하는데 필요한 데이터가 부족함 +‣ 조직의 공격 표면 전반에 대한 정보를 충분히 확보하지 못함 +기술 관점 +‣ 성숙도가 다양한 여러 상용 기술을 통합하고, 그 기능을 평가하며 기술 격차를 식별해 완전한 제로트러스트 +아키텍처를 구축하는 과제 +‣ 보안 정책을 배포·관리·적용하는 데 필요한 표준화된 정책이 부족하여 조직이 단편적인 정책 환경이나 +운용되지 않는 구성요소에 직면하는 문제 +‣ 커뮤니티와 조직 내에서 제로트러스트 아키텍처에 대한 공통된 이해와 용어가 부족하여 제로트러스트 +성숙도를 측정하고, 비즈니스에 가장 적합한 제로트러스트 아키텍처 접근 방식 결정하며, 구현 계획을 +수립하는 어려움 +‣ 모든 조직에 동일하게 적용할 수 있는 단일 제로트러스트 아키텍처는 존재하지 않으며, 조직별 요구사항, 위험 +감수도, 기존 기술 및 환경에 맞춰 설계되고 통합되어야 함 + +| 관점 | 내용 | +| --- | --- | +| 조직 관점 | ‣ 제로트러스트 아키텍처가 대규모 조직에만 적합하며 상당한 투자가 필요하다는 인식, 제로트러스트 아키텍처가 모든 규모의 조직에 적용될 수 있는 일련의 지침 원칙이라는 사실을 충분히 이해하지 못함 ‣ 제로트러스트 아키텍처가 환경 운영이나 최종 사용자 경험에 부정적인 영향을 미칠 수 있다는 우려 ‣ 전환 계획을 수립하기 위하여 필요한 정책, 시범 또는 개념 증명 구현을 개발할 자원이 부족함 ‣ 기존 투자를 활용하면서 제로트러스트 아키텍처로 전환하는 과정에서 현대화 추진과 우선순위를 균형있게 맞추는 문제 ‣ 관리자, 보안 인력, 운영자, 최종 사용자, 정책 결정권자에게 필요한 기술과 교육의 중요성에 대한 이해 부족 | +| 기본 요소 관점 | ‣ 비즈니스 애플리케이션, 자산, 보호해야 할 프로세스를 완전히 이해하기 위한 적절한 자산 목록 및 관리가 부족하며, 이러한 리소스의 중요성에 대한 명확한 이해가 없음 ‣ 특정 애플리케이션과 서비스에 대해 세밀하고 필요한 접근 정책을 적용하기 위한 조직 전반에 걸친 사용자 역할의 디지털 정의, 관리, 추적이 부족 ‣ 조직의 통신 및 사용 패턴에 대한 가시성이 부족하여 조직의 주체, 자산, 애플리케이션 및 서비스 간의 상호작용에 대한 이해가 제한적이며, 이를 식별하는데 필요한 데이터가 부족함 ‣ 조직의 공격 표면 전반에 대한 정보를 충분히 확보하지 못함 | +| 기술 관점 | ‣ 성숙도가 다양한 여러 상용 기술을 통합하고, 그 기능을 평가하며 기술 격차를 식별해 완전한 제로트러스트 아키텍처를 구축하는 과제 ‣ 보안 정책을 배포·관리·적용하는 데 필요한 표준화된 정책이 부족하여 조직이 단편적인 정책 환경이나 운용되지 않는 구성요소에 직면하는 문제 ‣ 커뮤니티와 조직 내에서 제로트러스트 아키텍처에 대한 공통된 이해와 용어가 부족하여 제로트러스트 성숙도를 측정하고, 비즈니스에 가장 적합한 제로트러스트 아키텍처 접근 방식 결정하며, 구현 계획을 수립하는 어려움 ‣ 모든 조직에 동일하게 적용할 수 있는 단일 제로트러스트 아키텍처는 존재하지 않으며, 조직별 요구사항, 위험 감수도, 기존 기술 및 환경에 맞춰 설계되고 통합되어야 함 | + + +220 | 제로트러스트 가이드라인 2.0 +나. 제로트러스트 아키텍처 배포 방식별 참조 아키텍처 +1) EIG 초기(Crawl) 단계 및 EIG 실행(Run) 단계 참조 아키텍처 +그림 S-12 EIG 초기 단계 참조 아키텍처 + + + + + + + +  +지원 구성요소 +식별자 관리 +접근 및 자격증명 관리 +다중인증(MFA) +식별자 정보 연합 +식별자 거버넌스 +엔드포인트 보안 +보안 분석 +ICAM 시스템의 PE +ICAM 시스템의 PA +ICAM 시스템의 PEPs +기타 PEPs +클라우드 +온프레미스 +사용자 +엔드포인트 +Control Plain +Data Plain +I(N) : 초기연결 +S(X): 세션 관리 +R(X): 자원 관리 +I(3). 요청 수용/거부 +결정을 위한 정보 +S(B)/R(B). 접근의 지속적 +평가를 위한 정보 +I(2). 주체와 그 +엔드포인트를 검증하는 데 +필요한 정보 +S(A)/R(A). +접근 요청: +주체, 리소스, +엔드포인트를 +주기적으로 +검증하는 데 +필요한 정보 +I(4). 접근 +허용/거부 +S(C). 세션 접근 +권한 지속/회수/제한 +R(C). 자원 접근 +권한 회수/제한 +I(1). 초기 접근 요청 +(신원 및 자격 증명) +R(1). 인증 및 검증 리소스 +R(D). 주기적인 자원 재인증 시험/응답 +및 엔드포인트 상태 검증 +S(D). 주기적인 재인증 +시험/응답 및 +엔드포인트 상태 검증 +I(5). 세션 +EIG 접근법은 주로 주체의 신원을 정책 생성의 핵심 구성요소로 사용하여 리소스에 대한 +접근권한을 부여하며, 이외에도 기기의 보안 상태나 환경적 요인 또한 접근 허가에 영향을 미칠 +수 있다. [그림 S-12]에서 볼 수 있듯이, ICAM을 통하여 PE와 PA 기능을 제공하며, 이는 기존의 +ICAM 및 엔드포인트 보호 솔루션만으로 지원 가능한 제로트러스트 아키텍처 기능을 시연하려는 +의도로 설계되었다. +EIG 실행 단계는 EIG 초기 단계 아키텍처를 기반으로 하며, PE와 PA 기능이 ICAM 제품에 +의존하지 않는다. 실행 단계에서는 클라우드에 저장된 리소스 접근 보호 기능이 추가되었으며, +새로운 기기 탐지 시 모니터링 및 경고 수행 기능, 규정을 위반하는 기기 차단 등 초기 단계에서 +제공되지 않은 추가 기능들이 포함된다. + +부록 | 221 +2) 마이크로 세그멘테이션, SDP 및 SASE 참조 아키텍처 +마이크로 세그멘테이션 배포 방식은 리소스를 고유한 네트워크 세그먼트에 배치하거나, +엔드포인트에 소프트웨어 에이전트 혹은 방화벽을 설치하여 호스트 기반 세그멘테이션을 구현하는 +방식이다. SDP는 네트워크를 접근 결정 정책에 따라 재구성하며, 애플리케이션 계층에서는 +소프트웨어 에이전트와 리소스 게이트웨이 간의 안전한 채널을 설정하여 동작한다. SASE는 SD- +WAN, 보안 웹 게이트웨이, 차세대 방화벽, ZTNA와 같은 네트워크 및 보안 기능을 서비스 형태로 +제공하여 원격 근무자, 온프레미스의 보안을 지원한다. +다. 제로트러스트 아키텍처 실증으로부터 발견한 점 +1) EIG 초기 단계에서 발견한 점 +EIG 초기 단계에서 두 가지 문제를 발견했다. 첫째, ICAM 솔루션을 PDP로 활용했으나, 많은 +공급업체 솔루션들이 서로 즉시 통합되지 않아서 네트워크 수준의 PEP(라우터, 방화벽 등)는 +ICAM과 통합되지 않았다. 다만, 신원 인식 네트워크 PEP는 ICAM과 통합될 수 있었으며, +엔드포인트 보호 솔루션은 MDM·UEM 솔루션과 통합되어 ICAM과 간접적으로 연동되었다. 둘째, +맞춤형 통합 대신 제공업체가 제공하는 기본 통합을 사용했지만, 이는 모든 제로트러스트 기능을 +지원할 수 없었다. +빌드 E1B1, E3B1을 실증한 결과 리소스 관리를 지원하지 못하는 문제가 생겼다. 사용자 및 +엔드포인트의 인증, 재인증, 상태 검증을 기반으로 접근 결정을 내렸으나, 리소스를 호스팅하는 +엔드포인트의 신원이나 상태는 확인하지 않았다. 또한, 두 빌드 모두 리소스 관리 기능이나 +네트워크 수준에서 엔드포인트의 네트워크 접근을 통제하는 기능을 지원하지 않았다. 향후 +빌드에서는 이러한 리소스 관리 기능을 추가할 예정이다. +2) EIG 실행 단계에서 발견한 점 +EIG 실행 단계를 통해 EIG 초기 단계와 비교하여 다음과 같은 추가 기능을 입증하였다. +- 정책에 따라 PEP가 리소스 저장 위치와 관계없이 요청 엔드포인트에서 리소스로 안전하고 +직접 접근하는 터널을 구축 + +222 | 제로트러스트 가이드라인 2.0 +- 인증된 사용자가 내부 리소스에 접근하면서, 외부에서 리소스가 발견되거나 노출되지 않도록 +보장하는 프록시 역할의 커넥터 사용 +- 원격 사용자가 기업망을 경유하지 않고 클라우드에 호스팅된 리소스에 직접 접근할 수 있도록 +보호하는 기능 +- 클라우드 또는 인터넷 리소스로 전송되는 트래픽에 대해 정책 제어를 모니터링, 검사 및 +시행하는 기능 +- 네트워크에서 새로운 엔드포인트를 발견하고, 정책을 위반하는 엔드포인트를 차단하는 기능 +3) 마이크로 세그멘테이션, SDP 및 SASE 단계에서 발견한 점 +제로트러스트 아키텍처를 효과적으로 구현하려면 다양한 공급업체의 보안 제품을 통합하고, +PDP가 여러 보안 도구 및 지원 구성요소와 연동되어 실시간으로 접근 요청의 위험을 평가할 수 +있어야 한다. 제로트러스트 아키텍처에서 여러 PDP가 존재하는 것은 드문 일이 아니며, 각 PDP는 +하나 이상의 다른 지원 요소 및 PEP와 통합될 수 있다. 이러한 구조적 특성으로, 제로트러스트 +아키텍처의 전체적인 정책을 종합적으로 이해하고, 명확하게 표현하고, 관리하기 어려우며, 여러 +PDP는 일반적으로 정보를 공유하기 위해 서로 통합되지 않기 때문에 어떤 사용자, 엔드포인트 +또는 기타 주체가 위험을 초래할 수 있는지에 대한 공유된 이해가 없다. 여러 PDP가 존재하는 경우, +이들이 정보를 공유할 수 있는 통합 접근 방식을 통해 위험에 대한 공통의 통합된 이해를 공유하여 +의사 결정을 내리는 것이 바람직하다. +SIEM 및 SOAR 시스템은 PDP가 접근 요청을 판단하는 데 필요한 중요 정보를 제공하며, 이러한 +정보는 실시간으로 전달되어야 한다. 또한, 데이터 보안 도구와 통합하여 PDP가 데이터 보호를 +위해 차단된 접근 요청을 인지할 수 있어야 한다. +단말의 규정 준수 여부를 감지하고, 비준수 단말의 리소스 접근을 차단하는 도구는 필수적이다. +이러한 도구는 자동으로 문제를 해결할 수 있는 솔루션과 결합되어 조직의 구성 및 패치 관리 +시스템과 통합되어야 한다. 단말 관리 솔루션이 리소스도 관리할 수 있지만, 리소스 관리에 +특화된 솔루션을 사용하는 것이 더욱 효과적이다. + +부록 | 223 +라. 제로트러스트 여정의 핵심 교훈 +NCCoE는 제로트러스트를 배포하고 구현하려는 조직을 위해 실제 연구실에서 구현한 실증 +사례를 바탕으로 얻은 7가지의 핵심 교훈들을 공유한다. +1) 기존 환경을 식별하고 목록화할 것 +기업이 제로트러스트 아키텍처를 도입하기 위한 첫 단계는 현재 IT 환경에 존재하는 모든 +리소스(HW, SW, 애플리케이션, 데이터, 서비스)를 식별하고 목록화하는 것이다. 이를 위해 +트래픽을 모니터링하여 어떤 리소스가 활성화되어 있고, 어떻게 접근되고 사용되는지 파악할 수 +있는 도구를 배포하는 것이 필요하다. +이 과정은 제로트러스트 아키텍처의 보호 대상을 이해하는 데 필수적이다. 목록에서 누락된 +리소스는 보호되지 못할 가능성이 크며, 이는 침해, 변경, 삭제, DDoS 및 기타 공격에 취약해질 +수 있다. 따라서 온프레미스와 클라우드 환경을 포함한 모든 리소스를 포괄적으로 식별하고 +지속적으로 관리하는 것이 중요하다. +2) 임무 및 비즈니스 사용 사례를 지원하기 위한 접근 정책 수립할 것 +기존 환경과 자산을 식별한 후에는 각 리소스에 대한 접근권한을 규정하는 정책을 수립해야 한다. +이 정책은 최소 권한 원칙을 기반으로 하며, 리소스에 필요한 권한만 접근 주체에게 부여하도록 +설계되어야 한다. 정책 수립 시에는 사용자 유형, 접근 요구사항, 기기 유형, 작업 위치, 시간대 등의 +요소를 고려해야 한다. +기업은 처음부터 직원별로 필요한 리소스가 무엇인지 식별·이해하기가 어려울 수 있다. 이러한 +경우, 트래픽 모니터링 도구를 활용하여 직원들의 리소스 접근 패턴을 분석한 후 이를 바탕으로 +정책을 수립할 수 있다. 또한, 제로트러스트 아키텍처는 다양한 구성요소들로 이루어질 수 있기 +때문에 접근 정책이 중앙 집중화되지 않고 여러 제품에 분산될 수 있다. 이러한 분산된 정책을 +효과적으로 관리하기 위해서 조직은 접근 규칙뿐만 아니라 각 규칙이 설정된 위치도 명확하게 +기록하여 정책의 일관성을 유지하는 것이 필요하다. + +224 | 제로트러스트 가이드라인 2.0 +3) 기존 보안 기능 및 기술을 식별할 것 +대부분의 조직은 이미 보안 솔루션을 갖춘 인프라와 기술 시스템을 갖추고 있기 때문에, 이를 +제로트러스트 아키텍처에 통합할 필요가 있다. 기존 IT 장비나 보안 기능을 고려하여 기능을 식별 및 +목록화하고, 이를 어떻게 제로트러스트 아키텍처에 통합할지 방식을 고려해야 한다. +조직은 기존 보안 구성요소들을 목록화한 뒤, 이러한 요소들이 제로트러스트 아키텍처 내에서 +계속 활용될 수 있는지 검토해야 한다. 물론 기존 기술을 재활용하면 비용 절감의 효과는 있겠지만, +이를 성공적으로 통합하기 위해서는 호환성 문제를 해결해야 한다. +4) 데이터 중요도를 기반한 위험 기반 접근 방식을 적용하여 제로트러스트 정책 및 프로세스의 +격차를 제거할 것 +보안 기능을 목록화한 후에는 인프라를 어떻게 분할할지, 그리고 각 리소스를 얼마나 +세분화할지를 고려하여 접근 보호 토폴로지14를 설계해야 한다. 이 토폴로지는 위험 기반 접근 +방식을 사용하여 설계되며, 중요한 리소스는 독립된 공간에 격리하고, 중요도가 낮은 리소스는 공유 +신뢰 영역에서 보호되도록 구성할 수 있다. +접근 보호 토폴로지를 설계할 때, 조직은 각 리소스를 보호할 PEP와 리소스 접근 결정을 내릴 +기술을 결정해야 한다. 이전에는 경계 기반 보호에 의존하여 단일 PEP를 통해 모든 리소스를 +보호하였으나, 제로트러스트 아키텍처를 도입하면서 인프라를 더 작은 신뢰 영역으로 분할하여 +잠재적 침해 또는 공격의 영향을 최소화할 수 있다. +5) 제로트러스트 아키텍처 구성요소(사람, 프로세스, 기술)를 구현하고 배포된 보안 솔루션을 +점진적으로 활용할 것 +접근 보호 토폴리지 설계가 완료되면, 조직은 환경을 지속적으로 모니터링하는 도구를 배치하고 +이를 통해 제로트러스트 아키텍처의 검증을 수행해야 한다. 제로트러스트 아키텍처 구현 초기 +단계에서는 ID관리, 인증, 권한 부여가 중요한 요소로 인식되며, ICAM 솔루션과 통합할 수 있는 +엔드포인트 보호 솔루션 또한 중요한 구성요소가 될 수 있다. +14   네트워크 혹은 시스템의 요소들을 물리적, 논리적으로 연결해 놓은 것 + +부록 | 225 +6) 제로트러스트 결과를 지원하는 구현 사항을 검증할 것 +조직은 네트워크 트래픽을 실시간으로 모니터링하여 의심스러운 활동을 탐지하는 등 행동 +분석을 통해 이상 활동을 감지해야 한다. 배포된 보안 도구를 활용하여 제로트러스트 아키텍처의 +접근 정책이 올바르게 시행되고 있는지 지속적으로 검증해야 한다. 또한, 다양한 시나리오에 대해 +주기적인 테스트를 수행하며, 제로트러스트 아키텍처의 새로운 기능을 배포하기 전에 검증할 수 +있는 일련의 테스트 과정을 마련하는 것이 바람직하다. +7) 위협 환경, 임무, 기술 및 규정의 변화에 따라 지속적으로 개선하고 발전할 것 +제로트러스트 아키텍처가 배포된 후에도, 제로트러스트 아키텍처는 변화하는 환경에 지속적으로 +적응해야 한다. 제로트러스트 아키텍처에 사용된 기술 구성요소가 업그레이드되거나 폐기될 경우 +새로운 기술로 교체해야 하며, 혁신적인 보안 기술이 등장할 때 기존 제로트러스트 아키텍처에 +통합할 수 있는지 검토할 필요가 있다. +이상적인 제로트러스트 아키텍처는 알려진 위협이나 제로데이 공격과 같은 악성 공격을 감지할 +수 있도록 행동 기반 모니터링을 수행해야 한다. 따라서, 위협 환경이 변화할 때마다 조직의 CISO +및 보안 팀은 제로트러스트 아키텍처의 토폴리지, 구성요소 및 정책을 지속적으로 평가하여 새로운 +위협에 대처해야 한다. + +### 2. 국방부 Thunderdome 프로젝트 + +가. Thunderdome 프로젝트 개요 +미 국방부는 자체적으로 사용하고 있었던 네트워크 보안 아키텍처 JRSS(Joint Regional +Security Stack)을 단계적으로 폐지하고, 그 대안으로 제로트러스트 아키텍처를 고려한 +Thunderdome 프로젝트를 개시하였다. 이 프로젝트는 미 국방부가 사이버 보안 위협에 대응하기 +위해 추진한 제로트러스트 아키텍처 구현 계획의 일환으로 시작되었으며, 국방정보시스템국 +(DISA)이 주도하여 개발되었다. +2022년 1월 DISA는 제로트러스트 비전을 충족시키기 위해 Booz Allen Hamilton과 680만 달러 +규모의 계약을 체결하여 Thunderdome 프로토타입을 개시했다. Thunderdome 프로토타입은 + +226 | 제로트러스트 가이드라인 2.0 +실제 적용 가능한 솔루션을 테스트하고 검증하기 위해 개발된 시범 모델로, 주로 SASE 보안 +프레임워크 내에서 제로트러스트 아키텍처를 구상했다. 2023년 3월, DISA는 Thunderdome +프로토타입 작업을 공식적으로 끝마쳤다고 발표했으며, DISA는 약 1,500명의 테스트 사용자를 +통해 Thunderdome의 원격 및 온프레미스 기능을 사용하여 일상적인 업무를 수행했다고 밝혔다. +2024년 4월, DISA는 2024년내로 60개 사이트에 Thunderdome 프로그램을 출시할 예정이며, +지금까지 23개 사이트에 제로트러스트 프로그램을 배포 완료했다고 밝혔다. DISA의 배포 계획에는 +미국 해안 경비대, 미국 남부 사령부 등을 포함하고 있으며, Thunderdome 프로젝트가 미국의 +군사 기밀 시설에 긍정적인 영향을 줄 것으로 보인다. +나. Thunderdome 프로젝트를 진행하면서 직면한 어려움 +DISA는 Thunderdome 프로젝트를 진행하면서 겪은 어려움에 대해 다음과 같이 5가지를 +제시하였다. +- 기존 국방부 네트워크 구조는 매우 가변적이고 복잡하여 제로트러스트 구현 및 전환에 많은 +시간이 소요됨 +- 기술을 구현하는 것은 쉽지만, 이를 뒷받침하는 조직의 문화·정책·절차의 변화는 장기적인 +과제 +- 다른 제로트러스트 관련 계획과의 상호 운용성이 필요 +- 파생된 자격 증명을 활용한 모바일 사용자 접근 관리에 있어서 노력 필요 +- 국방부 전역에서 단말 인증 솔루션이 부족함 +다. Thunderdome 프로토타입 구성요소 +DISA는 Thunderdome 프로토타입 구성요소를 다음과 같이 구성하였다. + +부록 | 227 +그림 S-13 Thunderdome 프로젝트 논리적 구성요소 +Log +Data Path +Local +Endpoint +ZTNA +(SD-WAN/CESS) +ZTNA +(SASE) +DoDIN +DoD ICAM +Internet +Remote +Endpoint +Application Security Stack +Applications +Analyst +SIEM +Data Broker +Streaming +Analytics +Pipeline + + +(출처: DISA) +① 지역·원격 엔드포인트 +ZTNA를 통해 네트워크 및 애플리케이션에 연결하려는 원격(Remote) 또는 사내(Local) 사용자 +② Zero Trust Network Access (SD-WAN/CESS, SASE) +ICAM에서 제공한 사용자 신원 및 엔드포인트 기기 상태를 기반으로 네트워크에 대한 조건부 +접근을 구현 +③ Application Security Stack (AppSS) +네트워크 및 애플리케이션 계층 기반 공격에 대한 마이크로 세그멘테이션, 침입 및 측면 이동 +보호 기능을 제공하는 확장 가능한 보안 스택 +④ Cloud Defense Cyber Operation (DCO) +AI를 활용하고 지속적인 가시성 및 위협 개선 기능을 제공하는 클라우드 기반 솔루션 + +228 | 제로트러스트 가이드라인 2.0 +다. Thunderdome 프로젝트 교훈 +미 국방부의 사이버보안 및 분석 실장인 Brian Hermann은 2023년 4월 Thunderdome +프로젝트의 파일럿 단계 종료 후 국방부의 제로트러스트 구현에 관한 다음 계획을 논의하면서, +Thunderdome 프로젝트 파일럿 단계로부터 얻은 교훈을 밝힌 바 있다. 여기에서는 기술적인 +성공에 대한 언급과 함께, 한편으로는 정책적, 문화적 변화의 필요성도 있음을 소개하였다. +- 상용 기술의 효과적 통합: SASE와 SD-WAN 같은 상용 기술이 미 국방부의 기존 네트워크 +인프라에 성공적으로 통합되었으며, 이를 통해 보안 성능 및 네트워크 성능이 개선되었으며, +상용 솔루션이 국방부 수준의 보안 요구 사항을 충족할 수 있음을 확인 +- 조건부 접근 및 보안 강화: 사용자의 속성(위치, 장치 유형, 시간 등)에 따라 접근을 제어하는 +조건부 접근 개념을 도입함으로써, 필요한 경우에만 적절한 권한을 부여할 수 있었음. 이를 +통해 불필요한 접근을 방지하고, 데이터 보호 수준을 강화할 수 있었음. +- 단순화 및 자동화: Thunderdome 프로젝트는 네트워크 관리의 복잡성을 줄이기 위해 보안 +정책을 자동화함으로써, 정책을 한 번 설정하면 모든 장치에 일관되게 적용되어, 관리의 +효율성과 보안의 일관성 향상 +- 실제 사용자와의 성능 검증: 1,500명의 테스트 사용자가 다양한 위치에서 Thunderdome +시스템을 사용해보는 실험을 통해, 보안 강화 외에도 네트워크 성능이 개선됨을 확인함으로써 +원격 사용자와 온프레미스 사용자 모두에게 성능상의 이점 제공 +- 문화적 및 정책적 변화의 필요성: 기술적 도입 외에도 조직 문화와 정책의 변화가 필수적으로, +제로트러스트의 원칙을 완전히 실현하기 위해서는 기술적 프로젝트에 그치지 않고, 모든 +부문에서 정책과 절차가 변경되고 제로트러스트 철학을 수용해야 함을 알게 됨 +- 확장성: Thunderdome 파일럿 단계는 미 국방부의 다양한 환경, 특히 기밀 네트워크까지도 +제로트러스트 아키텍처로 확장 가능함을 보여주었으며, 향후 더 넓은 범위 적용을 위한 기반 +마련 + +부록 | 229 + +## 제5절 + +성숙도 모델 개념 + +### 1. 성숙도 모델 개요 + +최초 성숙도에 대한 개념은 1930년대 품질 관리에서 출발하였으나, 현재의 성숙도 모델과 +공통점을 가지고 있지 않다. 1979년 Crosby는 분석 및 측정을 위한 단순하지만 효과적인 도구를 +제공하는 성숙도 단계의 개념을 소개하였으며, 여기에서 5가지 성숙도 단계와 6가지 측정 분류 +기준에 따라 모범 사례를 분류하는 품질 관리 절차 성숙도 기준을 제안한 바 있다. +이후, 미 국방부는 카네기 멜론 대학에 자금을 지원하여 소프트웨어 엔지니어링 연구소(SEI, +Software Engineering Institute)를 설립하였으며, SEI는 1993년 소프트웨어 역량 성숙도 모델 +(Capability Maturity Model for Software, SW-CMM) v1.1을 개발하여 기술 보고서 형태로 +공개한 바 있다. SW-CMM v1.1에서는 소프트웨어 프로세스 성숙도의 기본 원칙을 설명하고, +소프트웨어 조직이 소프트웨어 프로세스의 성숙도를 개선하기 위한 지침으로 활용할 수 있도록 +구성하였다. +미 국방부가 SEI를 통해 소프트웨어 기능 성숙도 모델을 개발한 것은 당시 많은 조직들이 +프로젝트가 늦어지거나 예산을 초과하는 사례를 통하여 조직 차원에서 소프트웨어 프로세스 관리에 +대한 필요성을 파악하였기 때문으로 보인다. +미성숙한 조직에서의 소프트웨어 프로세스는 실무자와 경영진에 의해 즉흥적으로 만들어지는 +경우가 많고, 혹은 이미 지정된 프로세스가 있다 하더라도 엄격하게 준수·시행되지 않아 당장 +직면한 위기를 해결하는데 급급한 경향을 보인다. 그러나 성숙된 조직에서는 소프트웨어 개발 및 +유지 관리 프로세스를 관리할 수 있는 조직 차원에서의 역량을 갖추고 있으며, 계획된 프로세스에 +따라 업무 활동이 수행되고 역할과 책임이 조직 전체에 걸쳐 명확하다. 이러한 관점에서, 일반적인 + +230 | 제로트러스트 가이드라인 2.0 +조직들이 성숙도가 높은 조직으로 진화하는데 참조할 수 있도록 소프트웨어 프로세스 성숙도 +프레임워크를 개발한 것이 SW-CMM으로 볼 수 있다. +SW-CMM에서는 소프트웨어 프로세스 성숙도 수준을 총 5단계로 구분하였으며, <표 S-18> +에서는 각 수준별 특징 및 각 단계에 대한 설명을 소개한다. +표 S-18 SW-CMM에서의 소프트웨어 프로세스 성숙도 수준 +성숙도 수준 +수준별 특징 +수준에 대한 설명 +초기 +(Initial) +‣ 소프트웨어 프로세스는 즉흥적이고 +혼란스럽다는 특징이 있음 +‣ 정의된 프로세스는 거의 없으며 성공 +여부는 개인의 노력에 달려 있음 +‣ 즉흥적이고 심지어 혼란스러운 대신, 예산과 일정을 +초과하더라도 제대로 작동하는 제품을 개발하는 경우가 많음 +‣ 초기 단계 조직에서의 성공은 조직 구성원들의 역량과 +영웅심에 달려 있음 +‣ 유능한 인재를 선발, 채용, 개발, 유지하는 것은 모든 성숙도 +수준의 조직에서 중요한 문제이지만 대부분 CMM의 범위가 +아님 +반복 가능 +(Repeatable) +‣ 비용, 일정, 기능 추적을 위한 기본 +프로젝트 관리 프로세스가 확립되어 +있음 +‣ 유사한 애플리케이션 분야를 가진 +프로젝트에서 이전 성공 반복을 위해 +필요한 프로세스 규정 존재 +‣ 프로젝트의 규모와 복잡성이 커지면서 기술적 문제에서 +성숙도의 초점인 조직 및 관리 문제로 관심 이동 +‣ 최고의 직원이 배운 교훈을 문서화된 프로세스에 통합하고, +이러한 프로세스를 효과적으로 수행하는 데 필요한 기술을 +구축하며(보통 교육을 통해), 업무를 수행하는 사람들로부터 +학습하여 지속적으로 개선 +‣ 반복 가능 단계 조직은 프로젝트가 적절한 관리 프로세스를 +수립하도록 안내하는 정책 보유 +‣ 정의 단계 조직은 전체 소프트웨어 프로세스를 정의, 통합 +및 문서화함으로써 프로젝트 관리 기반 구축 (통합이란, 한 +작업의 결과물이 다음 작업의 입력으로 원활하게 이루어짐을 +의미) +‣ 또한, 지나치게 경직되지 않고, 업무 수행자에게 권한을 +부여하는 프로세스 구축 +정의 +(Defined) +‣ 관리 및 엔지니어링 활동 모두에 +대한 소프트웨어 프로세스는 문서화, +표준화 및 조직 표준 소프트웨어 +프로세스에 통합되어 있음 +‣ 모든 프로젝트는 소프트웨어 개발 +및 유지 관리를 위해 조직의 표준 +소프트웨어 프로세스의 승인된 +맞춤형 버전을 사용 +관리 +(Managed) +‣ 소프트웨어 프로세스 및 제품 품질에 +대한 자세한 측정값 수집 +‣ 소프트웨어 프로세스와 제품 모두 +정량적으로 이해·제어됨 +‣ 품질 결함으로 인한 재작업 발생 사례를 품질 개선에 활용 +‣ 관리 단계의 초점은 프로세서를 제어하는 것으로, 프로세스는 +이미 안정적으로 작동하고 있어 예외적인 상황이 발생할 경우 +‘특별한 원인’을 파악하여 해결 +‣ 최적 단계의 초점은 프로세스를 지속적으로 개선하는 것으로, +만성적인 품질 결함을 줄이는 새로운 기준선을 설정하여 +‘비효율의 공통 원인’을 파악하여 프로세스 개선 +‣ 최고 성숙도에 도달한 조직은 예측 가능한 비용과 스케줄 +내에서 매우 안정적인 소프트웨어 생산 프로세스를 갖추게 됨 +최적 +(Optimizing) +‣ 프로세스로부터의 정량적 피드백과 +혁신적인 아이디어와 기술의 시범 +운영을 통해 지속적인 프로세스 개선 +가능 + +| 성숙도 수준 | 수준별 특징 | 수준에 대한 설명 | +| --- | --- | --- | +| 초기 (Initial) | ‣ 소프트웨어 프로세스는 즉흥적이고 혼란스럽다는 특징이 있음 ‣ 정의된 프로세스는 거의 없으며 성공 여부는 개인의 노력에 달려 있음 | ‣ 즉흥적이고 심지어 혼란스러운 대신, 예산과 일정을 초과하더라도 제대로 작동하는 제품을 개발하는 경우가 많음 ‣ 초기 단계 조직에서의 성공은 조직 구성원들의 역량과 영웅심에 달려 있음 ‣ 유능한 인재를 선발, 채용, 개발, 유지하는 것은 모든 성숙도 수준의 조직에서 중요한 문제이지만 대부분 CMM의 범위가 아님 | +| 반복 가능 (Repeatable) | ‣ 비용, 일정, 기능 추적을 위한 기본 프로젝트 관리 프로세스가 확립되어 있음 ‣ 유사한 애플리케이션 분야를 가진 프로젝트에서 이전 성공 반복을 위해 필요한 프로세스 규정 존재 | ‣ 프로젝트의 규모와 복잡성이 커지면서 기술적 문제에서 성숙도의 초점인 조직 및 관리 문제로 관심 이동 ‣ 최고의 직원이 배운 교훈을 문서화된 프로세스에 통합하고, 이러한 프로세스를 효과적으로 수행하는 데 필요한 기술을 구축하며(보통 교육을 통해), 업무를 수행하는 사람들로부터 학습하여 지속적으로 개선 ‣ 반복 가능 단계 조직은 프로젝트가 적절한 관리 프로세스를 수립하도록 안내하는 정책 보유 ‣ 정 의 단계 조직은 전체 소프트웨어 프로세스를 정의, 통합 및 문서화함으로써 프로젝트 관리 기반 구축 (통합이란, 한 작업의 결과물이 다음 작업의 입력으로 원활하게 이루어짐을 의미) ‣ 또한, 지나치게 경직되지 않고, 업무 수행자에게 권한을 부여하는 프로세스 구축 | +| 정의 (Defined) | ‣ 관리 및 엔지니어링 활동 모두에 대한 소프트웨어 프로세스는 문서화, 표준화 및 조직 표준 소프트웨어 프로세스에 통합되어 있음 ‣ 모든 프로젝트는 소프트웨어 개발 및 유지 관리를 위해 조직의 표준 소프트웨어 프로세스의 승인된 맞춤형 버전을 사용 | | +| 관리 (Managed) | ‣ 소프트웨어 프로세스 및 제품 품질에 대한 자세한 측정값 수집 ‣ 소프트웨어 프로세스와 제품 모두 정량적으로 이해·제어됨 | ‣ 품질 결함으로 인한 재작업 발생 사례를 품질 개선에 활용 ‣ 관리 단계의 초점은 프로세서를 제어하는 것으로, 프로세스는 이미 안정적으로 작동하고 있어 예외적인 상황이 발생할 경우 ‘특별한 원인’을 파악하여 해결 ‣ 최적 단계의 초점은 프로세스를 지속적으로 개선하는 것으로, 만성적인 품질 결함을 줄이는 새로운 기준선을 설정하여 ‘비효율의 공통 원인’을 파악하여 프로세스 개선 ‣ 최 고 성숙도에 도달한 조직은 예측 가능한 비용과 스케줄 내에서 매우 안정적인 소프트웨어 생산 프로세스를 갖추게 됨 | +| 최적 (Optimizing) | ‣ 프로세스로부터의 정량적 피드백과 혁신적인 아이디어와 기술의 시범 운영을 통해 지속적인 프로세스 개선 가능 | | + + +부록 | 231 +이후, 소프트웨어 엔지니어링 역량 성숙도 모델(SE-CMM, Software Engineering Capability +Maturity Model), 통합 제품 개발 역량 성숙도 모델(IPD-CMM, Integrated Product +Development Capability Maturity Model) 등이 등장한 후, SEI는 SW-CMM와 이들을 +통합하여 다양한 분야에 확장할 수 있는 프레임워크로서 역량 성숙도 모델 통합(CMMI, Capability +Maturity Model Integration)을 제안하였다. 최초에 제안된 CMMI는 개발용 CMMI(CMMI for +Development, CMMI-DEV), 조달용 CMMI(CMMI for Acquisition, CMMI-ACQ), 서비스용 +CMMI(CMMI for Services, CMMI-SVC) 등으로 구성되었으나, 버전 2.0부터는 통합되어 +제공되고 있으며 2023년 4월 버전 3.0이 공개된 바 있다. 2013년 이후 CMMI에 대한 관리가 +카네기 멜론에서 신설한 CMMI Institute로 이관되었다. +CMMI에서의 성숙도 수준은 SW-CMM와 유사하게 5단계로 정의되어 있으며, 수준별 특징은 +다음과 같다. +- 초기 (Initial): 예측할 수 없고, 제대로 제어되지 않으며 반응성이 떨어지는 프로세스 (표준화나 +문서화가 거의 이루어지지 않음) +- 기초적 관리 (Managed): 프로젝트에 특화되고, 가끔 반응성이 있는 프로세스 (프로세스가 +기본적으로 관리되지만, 표준화나 문서화 부족) +- 정의 (Defined): 조직에 특화되고, 가끔 사전 예방적인 프로세스 (표준화 및 문서화된 +프로세스) +- 정량적 관리 (Quantitatively Managed): 정량적으로 측정되고 제어되는 프로세스 (조직은 +프로세스의 변동성과 성과를 명확히 이해) +- 최적화 (Optimizing): 프로세스 개선에 집중 (환경 변화에 신속하게 적응하고 프로세스의 +효율성을 극대화) +조직 차원에서 어떤 분야(예, 소프트웨어, 보안 등)의 성숙도 모델을 고려하는 경우, 성숙도 +모델은 조직의 현재 위치를 파악하고 다음 단계로 발전하기 위한 구체적인 목표와 계획을 세울 수 +있도록 도와주며, 프로세스를 개선할 수 있는 기회를 제공한다. 또한, 성과를 정량적으로 측정하고 +관리할 수 있는 기준과 함께 조직 차원에서의 일관된 프로세스를 도입할 수 있도록 함으로써 +경쟁력을 강화하고 위험을 관리할 수 있는 장점을 누리게 된다. + +232 | 제로트러스트 가이드라인 2.0 +다만, 조직이 추구하는 목표보다 성숙도 모델을 우선하는 경우, 형식에 매몰되어 상당한 도입 +비용과 시간이 소요되고 유연성이 부족한 조직이 될 수 있으므로 성숙도 모델을 지나치게 맹신하지 +않도록 유의하여야 한다. + +### 2. 보안 성숙도 모델 + +앞서 제안된 성숙도 모델이 지속적으로 연구되면서, 조직이 수립한 보안 아키텍처 관점에서도 +다음과 같은 다양한 형태의 성숙도 모델이 제안된 바 있다. +- 사이버보안 기능 성숙도 모델 통합(CMMI for Cybersecurity): CMMI Institute이 제안한 +성숙도 모델로, 조직의 사이버 보안 성숙도를 평가하고 개선하는데 중점을 두며, 사이버 +보안 리스크를 관리하고 지속적으로 보안 능력을 향상시키는데 필요한 프로세스 개선을 +지원하고자 만들어졌다. 총 7가지 카테고리(거버넌스 프레임워크 보장, 위험 관리 절차 수립, +위험 식별 및 관리, 위험 완화 보장, 위험 탐지 보장, 위험 대응 보장, 사이버 복원력 보장), +22개의 역량 영역(Capability Area)에 대하여 하위 활동(Activity)을 두어, 각 Activity 별로 총 +5단계의 성숙도 수준을 두고 개별 활동에 대한 성숙도를 평가하는 방식을 취한다. +- 성숙도 모델 보안성 구축(Building Security In Maturity Model, BSIMM) Version 7: +소프트웨어 보안 프레임워크를 정의하는 문서로, 거버넌스(Governance), 인텔리전스 +(Intelligence), SSDL, 배포(Deployment) 도메인에 대해 12개 사례에 대한 113개의 활동 +(Activity)를 정의하고 각 Activity에 대응하는 성숙도 수준을 정의함으로써 어떤 Activity를 +수행하였는가를 바탕으로 조직의 소프트웨어 보안 성숙도 평가가 가능하다. +- 사이버 보안 역량 성숙도 모델(Cybersecurity Capability Maturity Model, C2M2) Version +2.1: 미국 에너지부(DoE)에서 개발한 모델로, 특히 에너지 부문에서의 사이버 보안 성숙도를 +평가하기 위해 설계되었으며. 자산, 변화 및 설정 관리, 위협 및 취약성 관리, 위험 관리, +식별자 및 접근 관리, 상황 인식, 이벤트 및 사고 대응, 운영의 지속성, 제3자 위험 관리, 직원 +관리, 사이버보안 구조, 사이버보안 프로그램 관리 등 총 10개의 도메인에 대해 세부 사례별 +4단계의 성숙도 지표 수준(Maturity Indicator Level)을 두고 평가할 수 있다. +이 외에도, OWASP의 소프트웨어 보증 성숙도 모델(Software Assurance Maturity Model, +SAMM), ISF의 정보보호 성숙도 모델(Information Security Maturity Model, ISMM), The + +부록 | 233 +Open Group의 공개 정보보호 관리 성숙도 모델(Open Information Security Management +Maturity Model, O-ISM3) Version 2.0, ISO/IEC 21827:2008 시스템 보안 엔지니어링 – 역량 +성숙도 모델(Systems Security Engineering – Capability Maturity Model, SSE-CMM) 등 +다수의 보안 관련 성숙도 모델이 존재한다. +이러한 보안 관련 성숙도 모델들은 기업과 같은 조직에 대한 보안 성숙도 수준을 평가할 수 있는 +방법론을 제공하고 있으며, 이를 통하여 해당 조직은 보안 성숙도 모델을 통하여 조직의 사이버 +보안 능력을 더 정확하게 평가하고 유연하게 대응할 수 있는 능력을 향상 시킬 수 있다. 그 외에도 +다음과 같은 목적을 달성할 수 있을 것이다. +- 조직의 현재 보안 역량에 대한 객관적 평가 +- 조직이 당면한 사이버 보안 위험을 효과적으로 관리할 수 있는 체계적 접근 방법 제공 (위험 +식별, 분석, 평가 및 대응 전략 개발) +- 조직이 지속적으로 보안 관리 프로세스를 개선할 수 있는 로드맵 제시 +- 보안 투자 시 우선순위 결정에 도움 +- 법·규제 요구 사항과 규정을 준수할 수 있도록 도움 +- 보안 관련 정보를 조직 내부에서 혹은 외부와 효과적으로 소통하는데 활용 가능 +보안 아키텍처를 구축하여 운영 중인 기존 조직들은 각 조직이 속한 영역, 조직의 특성 혹은 보안 +수준을 달성할 수 있는 역량 등을 고려하여야 하며, 제로트러스트와 같은 새로운 보안 철학 혹은 +기존에 없던 보안 요구 사항이 등장할 경우 보안 성숙도 모델을 구체화하고 지속적으로 개선해야 +한다. 개선 과정에서 다양한 참조 모델 분석과 체계적인 문헌 검토를 통하여 새로운 성숙도 모델을 +도출할 수 있을 것이다. 이렇게 새로운 성숙도 모델을 도출하면 조직의 보안 상황을 보다 정확하게 +평가할 수 있으며, 관리자는 다양한 영역에서 의사결정 프로세스를 개선할 수 있을 것으로 기대할 +수 있다. + +234 | 제로트러스트 가이드라인 2.0 + +## 제6절 + +ISMS-P 인증기준과 +제로트러스트 성숙도 모델 연계 +현재 국내에서 가장 널리 알려져 있고 매년 지속적으로 확대 적용되고 있는 보안 인증제도로는 +정보보호 및 개인정보보호 관리체계(ISMS-P) 인증제도가 있다. ISMS-P 인증제도는 정보 +통신망의 안정성 확보 및 개인정보보호를 위해 기업이 수립한 일련의 조치와 활동이 인증 +기준에 적합하는지를 인증하는 제도로, 「정보통신망 이용촉진 및 정보보호 등에 관한 법률」 +(이하 ‘정보통신망법’이라 함) 제47조(정보보호 관리체계의 인증)와「개인정보 보호법」 +32조의2(개인정보 보호 인증), 동 법 시행령 및 고시 등을 법적 근거로 한다. +ISMS-P 인증기준15은 ‘1. 관리체계 수립 및 운영(16개)’, ‘2. 보호대책 요구사항(64개)’, +‘3. 개인정보 처리단계별 요구사항(21개)’으로 구성되어 있다. 이 중 ‘1. 관리체계 수립 및 운영’은 +전반적인 관리체계 운영 라이프사이클을 구성하며, ‘2. 보호대책 요구사항’은 총 12개 분야에 대한 +인증기준으로, 정책, 조직, 자산, 교육 등 관리적 부문과 개발, 접근통제, 운영·보안관리 등 물리적· +기술적 부문의 보호대책에 관한 사항을 포함한다. ‘3. 개인정보 처리 단계별 요구사항’은 개인정보 +생명주기에 따른 보호조치 사항으로 구성된다. +기업은 ISMS-P 인증기준을 통해 체계적이고 종합적인 정보보호 및 개인정보보호 관리체계를 +구현함으로써 일회성 정보보호 대책에서 벗어나 정보보호 및 개인정보보호 관리수준을 향상시킬 +수 있다. 관리적·기술적·물리적·개인정보 생명주기로 구성된 인증기준의 준수는 해킹, DDoS 등의 +침해사고와 개인정보 유출사고 발생 시 신속하게 대응할 수 있는 관리체계를 구축·운영하고 있음을 +의미한다. +15   2023년 11월 기준 + +부록 | 235 +그림 S-14 ISMS-P 인증기준 + + + +   +  +  +1. 1 관리체계 기반 마련 + +#### 1.2 위험관리 + + +#### 1.4 관리체계 점검 및 개선 + + +#### 1.3 관리체계 운영 + + +#### 2.1 정책, 조직, 자산관리 2.7 암호화 적용 + + +#### 2.2 인적보안 + + +#### 2.8 정보시스템 도입 및 개발보안 + + +#### 2.3 외부자 보안 + + +#### 2.9 시스템 및 서비스 운영관리 + + +#### 2.4 물리보안 + + +#### 2.10 시스템 및 서비스보안관리 + + +#### 2.5 인증 및 권한관리 + + +#### 2.11 사고예방 및 대응 + +2.6접근통제 + +#### 2.12 재해복구 + + +#### 3.1 개인정보 수집 시 보호조치 + + +#### 3.2 개인정보 보유 및 이용 시 보호조치 + + +#### 3.3 개인정보 제공시보호조치 + + +#### 3.4 개인정보 파기 시보호조치 + + +#### 3.5 정보주체 권리보호 + +제로트러스트 성숙도 모델은 앞서 2장에서 언급한 바와 같이 기업의 보안 시스템이 제로트러스트 +원칙에 얼마나 성숙하게 대응하고 있는지 객관적으로 평가할 수 있는 수단을 제시하는 것으로, +기업이 ISMS-P 인증기준에 따른 요구사항을 만족하거나 고도화함으로써 제로트러스트 +아키텍처를 도입하고 성숙도를 높이는 계기가 될 수 있다. +예를 들어, 제로트러스트 성숙도 모델에 따르는 보안 세부역량으로 ‘사용자 인벤토리’가 있다. +이는 시스템에 접근하는 모든 사용자와 권한에 대해 관리하고, 정확하고 최신 정보를 제공함으로써 +적절한 접근제어를 가능하게 해주는 기능을 요구하고 있으며, 성숙도 수준 관점에서 단순히 사용자 +목록을 수집하고 기록하는 ‘기존’ 수준, 사용자의 역할과 권한을 포함하는 상세 인벤토리를 구축하고 +주기적인 검토와 업데이트 절차를 설정하는 ‘초기’ 수준, 자동화된 인벤토리 관리 도구 도입을 +통하여 사용자 데이터의 정확성을 보장하는 ‘향상’ 수준, 기업 전반의 사용자 및 권한 관리 최적화가 +가능한 ‘최적화’ 수준 등을 통해 보안 수준을 지속적으로 끌어올릴 수 있다. 이러한 포괄적인 사용자 +인벤토리 세부역량은 ISMS-P 인증기준의 ‘2.5.1 사용자 계정 관리’, ‘2.5.2 사용자 식별’, ‘2.5.6 +접근권한 검토’ 등과 연계할 수 있다. + +236 | 제로트러스트 가이드라인 2.0 +또한, 사용자 인벤토리의 세부 기능을 강화하는 과정에서, 비정상적인 사용자 활동 탐지 기능이 +추가된 ‘향상’ 수준, 인공지능 기반 분석을 통한 사용자 행동 예측 및 대응 전략을 강화하는 ‘최적화’ +수준 등 보안 수준을 끌어올릴 수 있을 것이다. ISMS-P 인증기준의 ‘2.11.3 이상행위 분석 및 +모니터링’에서는 침해시도 탐지를 위한 로그 등 수집·분석·모니터링 등을 언급하고 있으며, 이를 +위해 상기 성숙도 수준으로의 진화를 통하여 기업망 내부에서 사용자 계정 중심의 활동 관련 정보를 +생성·분석할 수 있을 것이다. +위의 예시와 같이, 기업은 기업 내 중요 디지털 자산을 보호하는데 있어 제로트러스트 성숙도를 +높이는 과정에서 자연스럽게 ISMS-P의 인증기준도 만족할 수 있다. 또한 ISMS-P 인증을 취득한 +기업도 제로트러스트를 도입하여 운영하는 경우, 보안 세부역량과 연계하여 연관된 인증기준 +점검을 통해 안전하고 지속적인 정보보호 관리체계를 구축·운영할 수 있을 것으로 보인다. 이는 +인증기준 준수와 함께 보안 성숙도 개선이라는 두 가지 목표를 동시에 달성할 수 있는 장점을 +가지게 될 것으로 기대된다. +앞서 예시로 언급한 것과 같이, 3.2절의 보안 세부역량에 대해 연계하여 고려할 수 있는 ISMS-P +인증기준을 정리하면 <표 S-19>와 같다. +표 S-19 제로트러스트 세부역량과 ISMS-P 인증기준 연계 +핵심 요소 +세부역량 +ISMS-P 인증기준 연계 +식별자·신원 +사용자 인벤토리 +2.5.1 사용자 계정 관리, 2.5.2 사용자 식별, 2.5.6 접근권한 검토, 2.11.3 이상행위 +분석 및 모니터링 +ID 연계 및 사용자 +자격 증명 +2.5.1 사용자 계정 관리, 2.5.2 사용자 식별, 2.5.3 사용자 인증, 2.5.5 특수 계정 및 +권한관리 +다중 인증 +2.5.3 사용자 인증, 2.5.4 비밀번호 관리, 2.11.3 이상행위 분석 및 모니터링 +지속 인증 +2.5.3 사용자 인증, 2.5.4 비밀번호 관리, 2.6.2 정보시스템 접근, 2.11.3 이상행위 +분석 및 모니터링 +통합 ICAM 플랫폼 +1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.5.1 사용자 계정 관리, 2.5.3 사용자 인증, +2.5.6 접근권한 검토, 2.6.2 정보시스템 접근, 2.11.3 이상행위 분석 및 모니터링 +행동, 컨텍스트 기반 +ID 및 생체 인식 +2.5.3 사용자 인증, 2.5.4 비밀번호 관리, 2.11.3 이상행위 분석 및 모니터링 +조건부 사용자 접근 +1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.5.1 사용자 계정 관리, 2.5.6 접근권한 +검토, 2.11.3 이상행위 분석 및 모니터링 +최소 권한 접근 +2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.11.3 이상행위 분석 및 모니터링 + +| 핵심 요소 | 세부역량 | ISMS-P 인증기준 연계 | +| --- | --- | --- | +| 식별자·신원 | 사용자 인벤토리 | 2.5.1 사용자 계정 관리, 2.5.2 사용자 식별, 2.5.6 접근권한 검토, 2.11.3 이상행위 분석 및 모니터링 | +| | ID 연계 및 사용자 자격 증명 | 2.5.1 사용자 계정 관리, 2.5.2 사용자 식별, 2.5.3 사용자 인증, 2.5.5 특수 계정 및 권한관리 | +| | 다중 인증 | 2.5.3 사용자 인증, 2.5.4 비밀번호 관리, 2.11.3 이상행위 분석 및 모니터링 | +| | 지속 인증 | 2.5.3 사용자 인증, 2.5.4 비밀번호 관리, 2.6.2 정보시스템 접근, 2.11.3 이상행위 분석 및 모니터링 | +| | 통합 ICAM 플랫폼 | 1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.5.1 사용자 계정 관리, 2.5.3 사용자 인증, 2.5.6 접근권한 검토, 2.6.2 정보시스템 접근, 2.11.3 이상행위 분석 및 모니터링 | +| | 행동, 컨텍스트 기반 ID 및 생체 인식 | 2.5.3 사용자 인증, 2.5.4 비밀번호 관리, 2.11.3 이상행위 분석 및 모니터링 | +| | 조건부 사용자 접근 | 1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.5.1 사용자 계정 관리, 2.5.6 접근권한 검토, 2.11.3 이상행위 분석 및 모니터링 | +| | 최소 권한 접근 | 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.11.3 이상행위 분석 및 모니터링 | + + +부록 | 237 +핵심 요소 +세부역량 +ISMS-P 인증기준 연계 +기기 및 +엔드포인트 +기기 감지 및 규정 +준수 +1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.1.1 정책의 유지관리, 2.5.6 접근권한 검토, +2.11.3 이상행위 분석 및 모니터링 +실시간 검사를 통한 +기기 권한 부여 +1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.5.6 접근권한 검토, 2.8.1 보안 요구사항 +정의, 2.8.2 보안 요구사항 검토 및 시험, 2.11.3 이상행위 분석 및 모니터링 +기기 인벤토리 +1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.1.3 정보자산 관리, 2.9.4 로그 및 접속기록 +관리, 2.11.2 취약점 점검 및 조치, 2.11.3 이상행위 분석 및 모니터링 +통합 엔드포인트 +관리 및 모바일 기기 +관리 +1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.1.3 정보자산 관리, 2.10.1 보안시스템 +운영, 2.10.8 패치관리, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 +모니터링 +엔드포인트 및 +확장된 탐지·대응 +(EDR 및 XDR) +1.1.5 정책 수립, 2.10.6 업무용 단말기기 보안, 2.10.1 보안시스템 운영 +2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 +자산, 취약성 및 패치 +관리 자동화 +1.2.1 정보자산 식별, 2.10.8 패치관리, 2.11.2 취약점 점검 및 조치, 2.11.3 이상행위 +분석 및 모니터링 +네트워크 +매크로 +세그멘테이션 +2.6.1 네트워크 접근, 2.10.1 보안시스템 운영, 2.10.2 클라우드 보안, 2.11.1 사고 +예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 +마이크로 +세그멘테이션 +1.1.5 정책 수립, 2.6.1 네트워크 접근, 2.6.3 응용프로그램 접근, 2.10.1 보안시스템 +운영, 2.10.2 클라우드 보안, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 +분석 및 모니터링 +소프트웨어 정의 +네트워킹 +1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.6.1 네트워크 접근, 2.11.3 이상행위 분석 +및 모니터링 +위협 대응 +2.6.1 네트워크 접근, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 +모니터링 +트래픽 암호화 +1.1.5 정책 수립, 2.7.1 암호정책 적용, 2.7.2 암호키 관리 +데이터 흐름 매핑 +1.3.1 보호대책 구현, 2.6.1 네트워크 접근, 2.6.3 응용프로그램 접근, 2.7.1 암호정책 +적용, 2.11.3 이상행위 분석 및 모니터링 +네트워크 회복성 +2.6.1 네트워크 접근, 2.9.2 성능 및 장애관리, 2.9.3 백업 및 복구관리, 2.12.1 +재해·재난 대비 안전조치, 2.12.2 재해 복구 시험 및 개선, +시스템 +접근통제 +2.5.1 사용자 계정 관리, 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.6.2 +정보시스템 접근, 2.11.3 이상행위 분석 및 모니터링 +PAM +2.5.3 사용자 인증, 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.11.3 +이상행위 분석 및 모니터링 +자격 증명 관리 +2.1.1 정책의 유지관리, 2.5.3 사용자 인증, 2.5.5 특수 계정 및 권한관리, 2.11.3 +이상행위 분석 및 모니터링 +네트워크 세분화 및 +그룹 간 이동 +2.1.1 정책의 유지관리, 2.5.3 사용자 인증, 2.6.1 네트워크 접근, 2.11.3 이상행위 +분석 및 모니터링 +시스템 환경에 따른 +정책 관리 +1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.10.2 클라우드 보안 + +| 핵심 요소 | 세부역량 | ISMS-P 인증기준 연계 | +| --- | --- | --- | +| 기기 및 엔드포인트 | 기기 감지 및 규정 준수 | 1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.1.1 정책의 유지관리, 2.5.6 접근권한 검토, 2.11.3 이상행위 분석 및 모니터링 | +| | 실시간 검사를 통한 기기 권한 부여 | 1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.5.6 접근권한 검토, 2.8.1 보안 요구사항 정의, 2.8.2 보안 요구사항 검토 및 시험, 2.11.3 이상행위 분석 및 모니터링 | +| | 기기 인벤토리 | 1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.1.3 정보자산 관리, 2.9.4 로그 및 접속기록 관리, 2.11.2 취약점 점검 및 조치, 2.11.3 이상행위 분석 및 모니터링 | +| | 통합 엔드포인트 관리 및 모바일 기기 관리 | 1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.1.3 정보자산 관리, 2.10.1 보안시스템 운영, 2.10.8 패치관리, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 | +| | 엔드포인트 및 확장된 탐지·대응 (EDR 및 XDR) | 1.1.5 정책 수립, 2.10.6 업무용 단말기기 보안, 2.10.1 보안시스템 운영 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 | +| | 자산, 취약성 및 패치 관리 자동화 | 1.2.1 정보자산 식별, 2.10.8 패치관리, 2.11.2 취약점 점검 및 조치, 2.11.3 이상행위 분석 및 모니터링 | +| 네트워크 | 매크로 세그멘테이션 | 2.6.1 네트워크 접근, 2.10.1 보안시스템 운영, 2.10.2 클라우드 보안, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 | +| | 마이크로 세그멘테이션 | 1.1.5 정책 수립, 2.6.1 네트워크 접근, 2.6.3 응용프로그램 접근, 2.10.1 보안시스템 운영, 2.10.2 클라우드 보안, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 | +| | 소프트웨어 정의 네트워킹 | 1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.6.1 네트워크 접근, 2.11.3 이상행위 분석 및 모니터링 | +| | 위협 대응 | 2.6.1 네트워크 접근, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 | +| | 트래픽 암호화 | 1.1.5 정책 수립, 2.7.1 암호정책 적용, 2.7.2 암호키 관리 | +| | 데이터 흐름 매핑 | 1.3.1 보호대책 구현, 2.6.1 네트워크 접근, 2.6.3 응용프로그램 접근, 2.7.1 암호정책 적용, 2.11.3 이상행위 분석 및 모니터링 | +| | 네트워크 회복성 | 2.6.1 네트워크 접근, 2.9.2 성능 및 장애관리, 2.9.3 백업 및 복구관리, 2.12.1 재해·재난 대비 안전조치, 2.12.2 재해 복구 시험 및 개선, | +| 시스템 | 접근통제 | 2.5.1 사용자 계정 관리, 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.6.2 정보시스템 접근, 2.11.3 이상행위 분석 및 모니터링 | +| | PAM | 2.5.3 사용자 인증, 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.11.3 이상행위 분석 및 모니터링 | +| | 자격 증명 관리 | 2.1.1 정책의 유지관리, 2.5.3 사용자 인증, 2.5.5 특수 계정 및 권한관리, 2.11.3 이상행위 분석 및 모니터링 | +| | 네트워크 세분화 및 그룹 간 이동 | 2.1.1 정책의 유지관리, 2.5.3 사용자 인증, 2.6.1 네트워크 접근, 2.11.3 이상행위 분석 및 모니터링 | +| | 시스템 환경에 따른 정책 관리 | 1.1.5 정책 수립, 2.1.1 정책의 유지관리, 2.10.2 클라우드 보안 | + + +238 | 제로트러스트 가이드라인 2.0 +핵심 요소 +세부역량 +ISMS-P 인증기준 연계 +애플리케이션 +및 워크로드 +리소스 권한 부여 및 +통합 +2.5.3 사용자 인증, 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.10.1 +보안시스템 운영, 2.11.3 이상행위 분석 및 모니터링 +지속적인 모니터링 +및 진행 중인 승인 +2.1.3 정보자산 관리, 2.5.5 특수 계정 및 권한관리, 2.6.2 정보시스템 접근, 2.6.3 +응용프로그램 접근 +원격 접속 +2.1.1 정책의 유지관리, 2.6.6 원격접근 통제 +안전한 +애플리케이션 배포 +2.1.1 정책의 유지관리, 2.1.3 정보자산 관리, 2.8.2 보안 요구사항 검토 및 시험, 2.8.3 +시험과 운영 환경 분리, 2.8.6 운영환경 이관, 2.9.1 변경관리, 2.11.2 취약점 점검 및 +조치 +애플리케이션 +인벤토리 +1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.1.3 정보자산 관리, 2.6.3 응용프로그램 접근, +2.9.4 로그 및 접속기록 관리, 2.11.2 취약점 점검 및 조치, 2.11.3 이상행위 분석 및 +모니터링 +보안 소프트웨어 +개발 및 통합 +2.1.1 정책의 유지관리, 2.9.1 변경관리, 2.9.4 로그 및 접속기록 관리, 2.11.1 사고 +예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 +소프트웨어 위험 +관리 +1.2.3 위험 평가, 1.2.4 보호대책 선정, 1.3.1 보호대책 구현, 2.2.2 직무 분리, 2.8.1 +보안 요구사항 정의, 2.8.2 보안 요구사항 검토 및 시험, 2.8.3 시험과 운영 환경 분리, +2.11.1 사고 예방 및 대응체계 구축 +데이터 +데이터 카탈로그 +위험 정렬 +1.1.5 정책 수립, 1.2.1 정보자산 식별, 1.2.3 위험 평가, 1.4.2 관리체계 점검, 2.1.1 +정책의 유지관리, 2.1.3 정보자산 관리, 2.11.3 이상행위 분석 및 모니터링 +기업 데이터 +거버넌스 +1.1.5 정책 수립, 2.1.1 정책의 유지관리 +데이터 접근제어 +1.1.5 정책 수립, 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.10.1 +보안시스템 운영 +데이터 암호화 및 +권한 관리 +1.1.5 정책 수립, 2.7.1 암호정책 적용 +데이터 라벨링 및 +태그 지정 +1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.1.3 정보자산 관리 +데이터 손실 방지 +(DLP) +2.1.1 정책의 유지관리, 2.5.5 특수 계정 및 권한관리, 2.10.1 보안시스템 운영, 2.11.3 +이상행위 분석 및 모니터링 +데이터 모니터링 및 +감지 +2.1.1 정책의 유지관리, 2.5.5 특수 계정 및 권한관리, 2.10.1 보안시스템 운영, 2.11.1 +사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 + +| 핵심 요소 | 세부역량 | ISMS-P 인증기준 연계 | +| --- | --- | --- | +| 애플리케이션 및 워크로드 | 리소스 권한 부여 및 통합 | 2.5.3 사용자 인증, 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.10.1 보안시스템 운영, 2.11.3 이상행위 분석 및 모니터링 | +| | 지속적인 모니터링 및 진행 중인 승인 | 2.1.3 정보자산 관리, 2.5.5 특수 계정 및 권한관리, 2.6.2 정보시스템 접근, 2.6.3 응용프로그램 접근 | +| | 원격 접속 | 2.1.1 정책의 유지관리, 2.6.6 원격접근 통제 | +| | 안전한 애플리케이션 배포 | 2.1.1 정책의 유지관리, 2.1.3 정보자산 관리, 2.8.2 보안 요구사항 검토 및 시험, 2.8.3 시험과 운영 환경 분리, 2.8.6 운영환경 이관, 2.9.1 변경관리, 2.11.2 취약점 점검 및 조치 | +| | 애플리케이션 인벤토리 | 1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.1.3 정보자산 관리, 2.6.3 응용프로그램 접근, 2.9.4 로그 및 접속기록 관리, 2.11.2 취약점 점검 및 조치, 2.11.3 이상행위 분석 및 모니터링 | +| | 보안 소프트웨어 개발 및 통합 | 2.1.1 정책의 유지관리, 2.9.1 변경관리, 2.9.4 로그 및 접속기록 관리, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 | +| | 소프트웨어 위험 관리 | 1.2.3 위험 평가, 1.2.4 보호대책 선정, 1.3.1 보호대책 구현, 2.2.2 직무 분리, 2.8.1 보안 요구사항 정의, 2.8.2 보안 요구사항 검토 및 시험, 2.8.3 시험과 운영 환경 분리, 2.11.1 사고 예방 및 대응체계 구축 | +| 데이터 | 데이터 카탈로그 위험 정렬 | 1.1.5 정책 수립, 1.2.1 정보자산 식별, 1.2.3 위험 평가, 1.4.2 관리체계 점검, 2.1.1 정책의 유지관리, 2.1.3 정보자산 관리, 2.11.3 이상행위 분석 및 모니터링 | +| | 기업 데이터 거버넌스 | 1.1.5 정책 수립, 2.1.1 정책의 유지관리 | +| | 데이터 접근제어 | 1.1.5 정책 수립, 2.5.5 특수 계정 및 권한관리, 2.5.6 접근권한 검토, 2.10.1 보안시스템 운영 | +| | 데이터 암호화 및 권한 관리 | 1.1.5 정책 수립, 2.7.1 암호정책 적용 | +| | 데이터 라벨링 및 태그 지정 | 1.1.5 정책 수립, 1.2.1 정보자산 식별, 2.1.3 정보자산 관리 | +| | 데이터 손실 방지 (DLP) | 2.1.1 정책의 유지관리, 2.5.5 특수 계정 및 권한관리, 2.10.1 보안시스템 운영, 2.11.3 이상행위 분석 및 모니터링 | +| | 데이터 모니터링 및 감지 | 2.1.1 정책의 유지관리, 2.5.5 특수 계정 및 권한관리, 2.10.1 보안시스템 운영, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링 | + + +부록 | 239 +핵심 요소 +세부역량 +ISMS-P 인증기준 연계 +가시성 및 +분석 +모든 관련 활동 기록 +2.1.1 정책의 유지관리, 2.9.4 로그 및 접속기록 관리, 2.9.5 로그 및 접속기록 점검 +중앙집중적 보안 +정보 및 이벤트 관리 +2.1.1 정책의 유지관리, 2.9.4 로그 및 접속기록 관리, 2.9.5 로그 및 접속기록 점검 +보안 위협 분석 +2.9.4 로그 및 접속기록 관리, 2.11.2 취약점 점검 및 조치, 2.11.3 이상행위 분석 및 +모니터링 +사용자 및 기기 동작 +분석 +2.5.5 특수 계정 및 권한관리, 2.9.4 로그 및 접속기록 관리, 2.9.5 로그 및 접속기록 +점검, 2.11.3 이상행위 분석 및 모니터링 +위협 인텔리전스 +통합 +2.10.1 보안시스템 운영, 2.10.5 정보전송 보안 +자동화된 동적 정책 +2.1.1 정책의 유지관리, 2.10.1 보안시스템 운영 +자동화 및 +통합 +정책 통합 +1.1.5 정책 수립, 2.1.1 정책의 유지관리 +중요 프로세스 +자동화 +1.3.1 보호대책 구현, 2.9.3 백업 및 복구관리, 2.10.1 보안시스템 운영, 2.11.1 사고 +예방 및 대응체계 구축 +인공지능 +2.9.4 로그 및 접속기록 관리, 2.9.5 로그 및 접속기록 점검, 2.10.1 보안시스템 운영, +2.11.3 이상행위 분석 및 모니터링 +보안 통합, 자동화 및 +대응 +2.10.1 보안시스템 운영, 2.11.1 사고 예방 및 대응체계 구축 +데이터 교환 표준화 +2.1.3 정보자산 관리, 2.10.1 보안시스템 운영 +2.10.5 정보전송 보안, 2.11.3 이상행위 분석 및 모니터링 +보안 운영 조정 및 +사고 대응 +1.3.2 보호대책 공유, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 +모니터링, 2.11.5 사고 대응 및 복구 + +| 핵심 요소 | 세부역량 | ISMS-P 인증기준 연계 | +| --- | --- | --- | +| 가시성 및 분석 | 모든 관련 활동 기록 | 2.1.1 정책의 유지관리, 2.9.4 로그 및 접속기록 관리, 2.9.5 로그 및 접속기록 점검 | +| | 중앙집중적 보안 정보 및 이벤트 관리 | 2.1.1 정책의 유지관리, 2.9.4 로그 및 접속기록 관리, 2.9.5 로그 및 접속기록 점검 | +| | 보안 위협 분석 | 2.9.4 로그 및 접속기록 관리, 2.11.2 취약점 점검 및 조치, 2.11.3 이상행위 분석 및 모니터링 | +| | 사용자 및 기기 동작 분석 | 2.5.5 특수 계정 및 권한관리, 2.9.4 로그 및 접속기록 관리, 2.9.5 로그 및 접속기록 점검, 2.11.3 이상행위 분석 및 모니터링 | +| | 위협 인텔리전스 통합 | 2.10.1 보안시스템 운영, 2.10.5 정보전송 보안 | +| | 자동화된 동적 정책 | 2.1.1 정책의 유지관리, 2.10.1 보안시스템 운영 | +| 자동화 및 통합 | 정책 통합 | 1.1.5 정책 수립, 2.1.1 정책의 유지관리 | +| | 중요 프로세스 자동화 | 1.3.1 보호대책 구현, 2.9.3 백업 및 복구관리, 2.10.1 보안시스템 운영, 2.11.1 사고 예방 및 대응체계 구축 | +| | 인공지능 | 2.9.4 로그 및 접속기록 관리, 2.9.5 로그 및 접속기록 점검, 2.10.1 보안시스템 운영, 2.11.3 이상행위 분석 및 모니터링 | +| | 보안 통합, 자동화 및 대응 | 2.10.1 보안시스템 운영, 2.11.1 사고 예방 및 대응체계 구축 | +| | 데이터 교환 표준화 | 2.1.3 정보자산 관리, 2.10.1 보안시스템 운영 2.10.5 정보전송 보안, 2.11.3 이상행위 분석 및 모니터링 | +| | 보안 운영 조정 및 사고 대응 | 1.3.2 보호대책 공유, 2.11.1 사고 예방 및 대응체계 구축, 2.11.3 이상행위 분석 및 모니터링, 2.11.5 사고 대응 및 복구 | + + +240 | 제로트러스트 가이드라인 2.0 + +## 제7절 + +참고 문헌 +[1] John Kindervag (Forrester), “No More Chewy Centers: Introducing the Zero Trust Model of +Information Security”, 2010.09 +[2] CSA, “SDP Specification 1.0”, 2014.04 +[3] Chase Cunningham (Forrester), “The Zero Trust eXtended (ZTX) Ecosystem - Extending +Zero Trust Security Across Your Digital Business”, 2018.01 +[4] ACT-IAC, “Zero Trust Cybersecurity Current Trends”, 2019.04 +[5] 금융보안원, “금융보안 거버넌스 가이드 Ver 3.0”, 2019.12 +[6] CSA, “Software Defined Perimeter (SDP) and Zero Trust”, 2020.05 +[7] NIST SP 800-207, “Zero Trust Architecture”, 2020.08 +[8] Defense Information Systems Agency (DISA) and National Security Agency (NSA) Zero Trust +Engineering Team, “Department of Defense Zero Trust Reference Architecture, Version 1.0”, +[9] NSA, “Embracing a Zero Trust Security Model”, 2021.02 +[10] ACT-IAC, “Zero Trust Report – Lessons Learned from Vendor and Partner Research”, +[11] Executive Order 14028, “Improving the Nation’s Cybersecurity”, 2021.05 +[12] CISA, “Zero Trust Maturity Model – Pre-decisional Draft Version 1.0”, 2021.06 +[13] CISA, “Cloud Security Technical Reference Architecture Version 1.0”, 2021.08 +[14] CSA, “Toward a Zero Trust Architecture – A Guided Approach for a Complex and Hybrid +World”, 2021.10 +[15] OMB, “Moving the U.S. Government Toward Zero Trust Cybersecurity Principles”, 2022.01 + +부록 | 241 +[16] NSTAC, “Draft Report to the President – Zero Trust and Trusted Identity Management”, +[17] Jaspreet Gill, “Booz Allen Hamilton nabs $6.8M Thunderdome prototype contract”, +BREAKING DEFENSE, 2022.02 +[18] CISA, “Applying Zero Trust Principles to Enterprise Mobility”, 2022.03 +[19] CSA, “Software-Defined Perimeter (SDP) Specification v2.0”, 2022.03 +[20] Kate Lake (Jumpcloud), “Why Assess Your Zero Trust Maturity?”, 2022.04 +[21] Katherine MacPhail, “Thunderdome is DISA’s ‘Trial-By-Fire’ Answer to Zero Trust +Architecture”, GovCIO, 2022.04 +[22] Defense Information Systems Agency (DISA) and National Security Agency (NSA) Zero +Trust Engineering Team, “Department of Defense Zero Trust Reference Architecture, +Version 2.0”, 2022.07 +[23] DoD, “DoD Zero Trust Strategy”, 2022.11 +[24] DoD, “DoD Zero Trust Capability Execution Roadmap (COA 1)”, 2022.11 +[25] Julian Breyer, “Thunderdome : A Year In Review”, 2023.02 +[26] CISA, “Zero Trust Maturity Model Version 2.0”, 2023.04 +[27] NSA, “Advancing Zero Trust Maturity Throughout the User Pillar”, 2023.04 +[28] Chirs Pymm, “Thunderdome : Realizing Zero Trust”, 2023.05 +[29] PR Newswire, “DISA announces successful completion of Thunderdome prototype”, +[30] 과학기술정보통신부 등, “제로트러스트 가이드라인 1.0”, 2023.07 +[31] NSA, “Advancing Zero Trust Maturity Throughout the Device Pillar”, 2023.10 +[32] Chirs Pymm, “Thunderdome : Realizing Zero Trust”, 2023.10 +[33] 과학기술정보통신부 등, “정보보호 및 개인정보보호 관리체계(ISMS-P) 인증기준 안내서”, 2023.11 +[34] 과학기술정보통신부 등, “공공부문 SaaS 이용 가이드라인”, 2024.02 +[35] NSA, “Advancing Zero Trust Maturity Throughout the Network and Environment Pillar”, + +242 | 제로트러스트 가이드라인 2.0 +[36] NSA, “Advancing Zero Trust Maturity Throughout the Data Pillar”, 2024.04 +[37] GSA, “Zero Trust Architecture – Buyer’s Guide Version 3.1”, General Services +Administration, 2024.04 +[38] Lisbeth Perez, “DISA Plans to Deploy Thunderdome to 60 Sites in FY2024”, MeriTalk, +[39] NSA, “Advancing Zero Trust Maturity Throughout the Application and Workload Pillar”, +[40] NSA, “Advancing Zero Trust Maturity Throughout the Visiblity and Analytics Pillar”, 2024.05 +[41] 한국정보보호산업협회, “국내 제로트러스트 보안로드맵 마련을 위한 실증방안 연구”, 과학기술정보 +통신부 정책연구보고서, 2024.05 +[42] NIST SP 1800-35, “Implementing a Zero Trust Architecture: Full Document, Fourth +Preliminary Draft”, 2024.07 +[43] NSA, “Advancing Zero Trust Maturity Throughout the Automation and Orchestration Pillar”, +[44] 과학기술정보통신부 등, “정보보호 및 개인정보보호 관리체계(ISMS-P) 인증제도 안내서”, 2024.07 +[45] 금융위원회, “금융분야 망분리 개선 로드맵”, 2024.08 + +집필진 +- 가천대학교 이석준 교수 + +- 강남대학교 박정수 교수 + +- 대구대학교 김창훈 교수 + +- 국민대학교 김환국 교수 + +- 국가보안기술연구소 이택규 책임 + +- 에스지에이솔루션즈(주) 최영철 대표 + +- 프라이빗테크놀로지(주) 김주태 전무 + +- (주)엔키화이트햇 이철호 연구소장 + +- 과학기술정보통신부 정보보호산업과 + +- 한국인터넷진흥원(KISA) + +- 정책연구실 황보성 실장, 신기술대응팀 하병욱 팀장, 이혜진 책임, 이재혁 주임 + +- 보안산업단 임채태 단장, 보안산업진흥팀 고현봉 팀장, 최슬기 선임 + +- 보안인증단 이익섭 단장, ISMS인증팀 박창열 팀장, 양선주 책임 + +- 한국제로트러스트포럼 정책·제도분과 + +제로트러스트 가이드라인 2.0 +한국제로트러스트포럼 \ No newline at end of file diff --git "a/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\352\260\200\354\235\264\353\223\234\353\235\274\354\235\270_2.0.pdf" "b/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\352\260\200\354\235\264\353\223\234\353\235\274\354\235\270_2.0.pdf" new file mode 100644 index 0000000..49f397e Binary files /dev/null and "b/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\352\260\200\354\235\264\353\223\234\353\235\274\354\235\270_2.0.pdf" differ diff --git "a/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\204\261\354\210\231\353\217\204_\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234.md" "b/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\204\261\354\210\231\353\217\204_\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234.md" new file mode 100644 index 0000000..70fee69 --- /dev/null +++ "b/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\204\261\354\210\231\353\217\204_\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234.md" @@ -0,0 +1,20332 @@ +# 제로트러스트 성숙도 모델 해설서.pdf + +> Converted: 2026-04-03 02:57 +> Method: authorkit-juice v2 (caption-matched, size-filtered) + +--- + +보안 실무자를 위한 + +목차 +제장 제로트러스트 성숙도 모델 해설서 개요 +1. 성숙도 모델 해설서의 목적 및 구성··············································································· 6 + +성숙도 모델 해설서의 목적 +····························································································································· 6 + +성숙도 모델 해설서 구성 +································································································································· 7 +성숙도 수준 평가 절차 및 도입 절차 +2. +············································································· 8 + +성숙도 수준 평가 절차 +····································································································································· 8 + +성숙도 수준 평가 기반 도입 절차 +··············································································································· 10 +제장 제로트러스트 성숙도 모델 +성숙도 모델 소개 +1. +··············································································································· 16 + +성숙도 모델의 개념 +········································································································································· 16 +성숙도 모델의 활용 가치 +······························································································································· 16 +성숙도 모델 구조 +2. +··············································································································· 18 + +핵심 요소 +··························································································································································· 19 + +기능 및 세부역량 +··········································································································································· 21 + +역량별 성숙도 수준 체크리스트 +··················································································································· 21 +성숙도 수준 평가 요소 +3. +····································································································· 22 +국내 환경을 반영한 성숙도 평가 요소 구성 +····························································································· 22 + +성숙도 수준 평가를 위한 핵심 요소 및 교차 기능 체계 +······································································· 24 +성숙도 수준 정의 +4. +··············································································································· 25 +단계 성숙도 수준 정의 +4.1 4 +································································································································· 25 + +핵심 요소별 성숙도 수준 정의 +····················································································································· 27 +핵심 요소별 기능별 수준 정의 +····················································································································· 29 + +식별자신원 +4.3.1 +· +(Identity) ··································································································································· 29 + +기기 및 엔드포인트 +4.3.2 +(Device & Endpoint) ······························································································ 31 + +네트워크 +4.3.3 +(Network) ······································································································································ 33 + +시스템 +4.3.4 +(System) ············································································································································ 35 + +애플리케이션 및 워크로드 +4.3.5 +(Application & Workload) ········································································ 37 + +데이터 +4.3.6 +(Data) ················································································································································· 39 +제장 성숙도 수준 평가를 위한 체크리스트 해설 +식별자 +신원 +1. +⦁ +······················································································································· 42 + +식별자 관리 +······················································································································································· 42 + +사용자 인벤토리 +1.1.1 +·········································································································································· 42 + +연계 및 사용자 자격 증명 +1.1.2 ID +·················································································································· 44 + +인증 +····································································································································································· 46 + +다중인증 +1.2.1 +(MFA) ············································································································································· 46 + +지속 인증 +1.2.2 +······················································································································································ 48 + +위험도 평가 +······················································································································································· 50 + +통합 +플랫폼 +1.3.1 +ICAM +······································································································································ 50 + +행동컨텍스트 기반 +및 생체 인식 +1.3.2 +, +ID +··································································································· 52 + +접근 관리 +··························································································································································· 54 + +조건부 사용자 접근 +1.4.1 +···································································································································· 54 + +최소 권한 접근 +1.4.2 +············································································································································ 57 +기기 및 엔드포인트 +2. +··········································································································· 59 + +정책 준수 모니터링 +········································································································································· 59 + +기기 감지 및 규정 준수 +2.1.1 +···························································································································· 59 + +데이터 접근제어 +··············································································································································· 61 + +실시간 검사를 통한 기기 권한 부여 +2.2.1 +······································································································ 61 +자산관리 +····························································································································································· 63 + +기기 인벤토리 +2.3.1 +·············································································································································· 63 + +통합 엔드포인트 관리 및 모바일 기기 관리 +2.3.2 +························································································ 65 + +기기 위협 보호 +················································································································································· 67 + +엔드포인트 및 확장된 탐지대응 +및 +2.4.1 +(EDR +XDR) +- +··················································································· 67 + +자산취약성 및 패치 관리 자동화 +2.4.2 +, +········································································································· 69 +네트워크 +3. +······························································································································· 71 + +네트워크 세분화 +··············································································································································· 71 + +매크로 세그멘테이션 +3.1.1 +·································································································································· 71 + +마이크로 세그멘테이션 +3.1.2 +······························································································································ 73 + +소프트웨어 정의 네트워킹 +3.1.3 +························································································································ 75 + +위협 대응 +··························································································································································· 77 + +위협 대응 +3.2.1 +······················································································································································ 77 + +트래픽 암호화 +··················································································································································· 79 + +트래픽 암호화 +3.3.1 +·············································································································································· 79 + +트래픽 관리 +······················································································································································· 81 + +데이터 흐름 매핑 +3.4.1 +········································································································································ 81 + +네트워크 회복성 +··············································································································································· 83 + +네트워크 회복성 +3.5.1 +·········································································································································· 83 +시스템 +4. +··································································································································· 86 + +접근통제 +····························································································································································· 86 + +접근통제 +4.1.1 +························································································································································ 86 +시스템 계정 관리 +············································································································································· 90 +4.2.1 PAM ······························································································································································· 90 + +자격 증명 관리 +4.2.2 +············································································································································ 91 + +네트워크 분리 정책 +········································································································································· 94 + +네트워크 세분화 및 그룹간 이동 +4.3.1 +············································································································ 94 + +시스템 보안 및 정책 관리 +····························································································································· 97 +시스템 환경에 따른 정책 관리 +4.4.1 +················································································································ 97 +애플리케이션 및 워크로드 +5. +······························································································· 99 + +애플리케이션 접근 +··········································································································································· 99 + +리소스 권한 부여 및 통합 +5.1.1 +························································································································ 99 + +애플리케이션 위협 보호 +······························································································································· 102 + +지속적인 모니터링 및 진행 중인 승인 +5.2.1 +······························································································· 102 + +접근 가능한 애플리케이션 +··························································································································· 104 + +원격 접속 +5.3.1 +··················································································································································· 104 + +안전한 애플리케이션 배포 +··························································································································· 107 +안전한 애플리케이션 배포 +5.4.1 +····················································································································· 107 + +애플리케이션 인벤토리 +5.4.2 +··························································································································· 110 + +소프트웨어애플리케이션 보안 +· +···················································································································· 112 + +안전한 소프트웨어 개발 및 통합 +5.5.1 +········································································································· 112 + +소프트웨어 위험 관리 +5.5.2 +····························································································································· 115 +데이터 +6. +································································································································ 117 + +데이터 목록 관리 +··········································································································································· 117 + +데이터 카탈로그 위험 정렬 +6.1.1 +··················································································································· 117 + +기업 데이터 거버넌스 +6.1.2 +····························································································································· 120 + +접근 결정방법 +················································································································································· 122 + +데이터 접근제어 +6.2.1 +······································································································································· 122 + +데이터 암호화 +················································································································································· 124 + +데이터 암호화 및 권한 관리 +6.3.1 +················································································································· 124 + +데이터 분류 +····················································································································································· 127 + +데이터 라벨링 및 태그 지정 +6.4.1 +················································································································· 127 + +데이터 손실 방지 +··········································································································································· 129 + +데이터 손실 방지 +6.5.1 +(DLP) ·························································································································· 129 + +데이터 모니터링 및 감지 +6.5.2 +······················································································································· 132 +가시성 및 분석 +7. +················································································································ 134 + +모든 관련 활동 기록 +····································································································································· 134 + +중앙집중적 보안 정보 및 이벤트 관리 +····································································································· 138 + +보안 위협 분석 +··············································································································································· 139 + +사용자 및 기기 동작 분석 +··························································································································· 141 + +위협 인텔리전스 통합 +··································································································································· 143 + +자동화된 동적 정책 +······································································································································· 145 +자동화 및 통합 +8. +················································································································ 147 + +정책 통합 +························································································································································· 147 + +중요 프로세스 자동화 +··································································································································· 150 + +인공지능 +··························································································································································· 151 + +보안 통합자동화 및 대응 +, +·························································································································· 153 + +데이터 교환 표준화 +······································································································································· 155 + +보안 운영 조정 및 사고 대응 +····················································································································· 158 +부록 +핵심 요소별 기술 및 주요 솔루션 예시 +1. +···································································· 162 +핵심 요소별 증적 자료 예시 +2. +························································································ 166 +용어 정의 +3. +·························································································································· 175 +약어 정의 +4. +·························································································································· 177 + +제장 +제로트러스트 +성숙도 모델 해설서 +개요 +성숙도 모델 해설서의 목적 및 구성 +1. +성숙도 수준 평가 절차 및 도입 절차 +2. + + +### 1. 성숙도 모델 해설서의 목적 및 구성 + +성숙도 모델 해설서의 목적 +현대의 사이버 보안 환경은 전통적인 경계 기반 보안 모델로는 더 이상 효과적으로 대응할 + +수 없는 복잡하고 다양한 위협들로 가득 차 있으며 +클라우드 컴퓨팅의 확산 +원격 근무의 +, +, +일반화, +기기의 폭발적 증가모바일 기기의 광범위한 활용 등으로 인해 전통적인 네트워크 +IoT +, + +경계의 개념이 무의미해지고 있는 상황에서 제로트러스트는 이러한 변화에 대응할 수 있는 +혁신적인보안 패러다임으로 주목받고 있다그러나 제로트러스트는 단순히 새로운 보안 기술을 + +. + +도입하는 것이 아니라 조직의 보안 철학과 운영 방식 전반을 근본적으로 변화시키는 것이며, +이러한 변화는 한 번에 이루어질 수 있는 것이 아니라 단계적이고 체계적인 접근을 통해서만 +성공적으로 달성할 수 있을 것이다. +제로트러스트 성숙도 모델은 이러한 복잡하고 광범위한 변화 과정을 체계적으로 관리하고 + +추진할수 있는 프레임워크를 제공하며조직이 현재 어느 단계에 있는지를 객관적으로 평가하고 + +, + +다음 단계로 나아가기 위해 무엇을 해야 하는지를 명확히 제시함으로써 혼란과 시행착오를 +최소화하고효율적인 구현을 가능하게 한다또한성숙도 모델은 조직 내 다양한 이해관계자들 + +. +, + +간에 공통된 언어와 기준을 제공하여 커뮤니케이션을 원활하게 하고경영진의 이해와 지원을 +, +확보하는 데 중요한 역할을 하며 +투자의 우선순위를 결정하고 자원을 효과적으로 배분하는 +, +의사결정과정에서 객관적인 근거를 제공한다 + +. +본 해설서는 제로트러스트 가이드라인 +의 성숙도 수준 평가를 위한 체크리스트에 대한 +포괄적이고실용적인 이해를 제공한다 +먼저 각 항목의 문구와 용어에 대한 명확한 정의와 + +. +해석을제시하여 모호함이나 오해의 소지를 제거하고해당 항목이 제로트러스트 전체 아키텍처 + +, + +내에서 갖는 의미와 역할 +단순한 정의나 설명을 넘어서 해당 항목을 실제로 구현하는 기반 +, +기술에대한 설명과 성숙도 수준을 증명할 수 있는 증적 자료를 제시하고 있다 +본 해설서는 + +. +다음과 같은 구조화된 해설을 제공한다. +첫째체크리스트 항목의 핵심 목적과 달성하고자 하는 보안 목표를 명확히 정의한다 +, +. +둘째성숙도 레벨별로 요구되는 구현 수준과 평가 기준을 구체적으로 제시한다 +, +. +셋째다양한 조직 환경과 규모에 맞는 실제 성숙도 수준 평가 시 기술적 사례를 제공한다 +, +. +본 해설서는 제로트러스트 성숙도 분석 방법론에 기반하여 + +대 핵심 요소와 교차 기능에 대한 +각 세부역량 및 문항에 대한 분석 방안을 제시함으로써 조직이제로트러스트 아키텍처 구현 + +현황을체계적으로 평가할 수 있도록 상세한 가이드를 제공한다 + +. + +성숙도 모델 해설서 구성 +상기 목적을 위하여 본 해설서는 다음과 같이 구성하였다. +제장에서는 +해설서 개발의 목적과 구성에 대해서 살펴보고 +성숙도 수준 평가 절차와 평가 +, +기반 제로트러스트를 도입하는 절차를 기술하였다. +성숙도 모델 해설서의 목적 및 구성 +- +성숙도 수준 평가 절차 및 평가 기반 제로트러스트 도입 절차 +- +제장에서는 +제로트러스트 성숙도 모델의 성숙도 수준에 대한 정의와 성숙도 모델의 구조에 +대해서 설명하고 있다 +제로트러스트 도입을 위해 반드시 고려해야 할 성숙도 수준 평가의 +. +의미와활용 방안에 대해 소개한 후구체적인 성숙도 모델의 구조에 대해서 설명하고 있다 + +, +. +성숙도 모델 소개 +- +성숙도 모델 구조에 대한 설명 +- +성숙도 수준에 대한 설명 +- +제장에서는 +제로트러스트 가이드라인의 각 핵심 요소별 세부 역량에 대한 성숙도 수준 평가를 +위한 체크리스트에 대한 상세한 설명을 다루고 있다이 장에서는 +. +실무진이 즉시 활용할 수 +있는 구체적이고 실용적인 내용을 제공하고 있으며 각 체크리스트항목에 대해 무엇을 + +‘ +’, +어떻게 +‘ +’, 왜구현해야 하는지를 명확히 제시하고자 하며 각 체크리스트 +‘ +’ +항목에 대해 다음과 + +같은 구조화된 해설을 제공하고 있다. +가이드라인 +의 성숙도 수준 평가를 위한 체크리스트 각 항목에 대한 명확하고 상세한 +- +해석 제공 +각 체크리스트 항목에 대한 구체적인 구현 방법과 기술적 솔루션 안내 +- +복잡한 기술 용어와 개념을 실무진이 쉽게 이해할 수 있도록 구체적 사례와 함께 설명 +- +이 외에 부록에서는 각 성숙도 수준에서 요구하는 기능에 대한 기술 도입을 고려한 보안 세부 +역량 및 이를 뒷받침 할 수 있는 솔루션 및 증적 자료 예시를 안내하고 있으며본 해설서의 +, +이해를 돕기 위하여 용어 및 약어 정리를 수록하였다. +표 +이해관계자별 참고 권장 부분 +[ +1] +역할 +참고 권장 부분 +경영진 및 관리자 +제장 제로트러스트 성숙도 모델 해설서 개요 +················································ P.6 +제장 제로트러스트 성숙도 모델 +········································································· P.16 +정보보안 담당자 및 +시스템 관리자 +제장 성숙도 수준 평가를 위한 체크리스트 해설 +······································· P.42 + +| 역할 | 참고 권장 부분 | +| --- | --- | +| 경영진 및 관리자 | 제1장 제로트러스트 성숙도 모델 해설서 개요 ················································ P.6 제2장 제로트러스트 성숙도 모델 ········································································· P.16 | +| 정보보안 담당자 및 시스템 관리자 | 제3장 성숙도 수준 평가를 위한 체크리스트 해설 ······································· P.42 | + + +성숙도 수준 평가 절차 및 도입 절차 +2. +기업의 보안 환경은 규모적용 규제보안 투자 수준보유 중인 보안 장비와 서비스 구성 등 + +, +, +, +다양한 요소에 따라 상이하게 형성된다일부 조직은 기존의 망분리 규제를 지속적으로 적용해야 +. + +하지만다른 조직은 망분리 제약 없이 클라우드 서비스를 적극적으로 활용하고 있는 등 운영 +, +환경에도 큰 차이가 존재한다이와 같이 조직별로 상이한 여건과 보안 운영 방식에 +. +따라 제로 +트러스트 성숙도 수준 평가는 각 환경의 특성을 충분히 고려하여 수행될 필요가 있다. 가이드라인 +의 성숙도 수준 평가 체크리스트는 이러한 다양한 상황과 관점에 비추어 제로 +트러스트 보안 +규제를 일률적 보안 규제로 정의하지 않고제로트러스트 도입 전략 수립 과정에서 +, +반드시 검토해야 + + +할 사항을 강조함으로써 도입 전략 수립을 지원하고 도입 후 보안 수준 및 효과성 분석 방안 +제시를 통해 보안 모델을 어떻게 지속적으로 개선해 나갈 수 있을지에 대한 방향성 설정에 +도움을주고 있다따라서본 성숙도 수준 평가 절차는 기업이 스스로 가이드라인 + +. +, + +을 기반으로 + +현행 수준을 점검하고향후 제로트러스트 구현 전략을 수립하는 데 유용한 기준이 +, +될 것이다 + +. +성숙도 수준 평가 절차 +성숙도 수준 평가는 + +① 평가 목적 및 범위 설정 +인터뷰 및 정보수집 대상 식별 +내부 +, +, +② +③ +체크리스트 항목 조정 +성숙도 수준 평가 수행 +성숙도 분석 및 평가 결과 도출 +, +, +④ +⑤ +의 단계 +절차로 이루어진다. +그림 +제로트러스트 성숙도 수준 평가 절차 +[ +1] + +먼저 제로트러스트 성숙도 수준 평가의 첫 단계는 조직이 평가를 수행하는 목적과 기대하는 + +결과를 명확히 정의하는 것이다보안 담당자는 조직의 업무 특성보호해야 할 자산적용받는 +. +, +, +규제 요건 등을 검토하여 평가가 다루어야 할 범위를 설정한다이 과정에서 조직의 네트워크 +. +구조시스템 구성보안 정책 체계와 같은 기반 정보를 함께 정리함으로써 이후 평가 과정에서의 +, +, + +이해도를 높인다. +두 번째로 +성숙도 수준 평가를 위한 인터뷰 및 정보수집 대상자를 식별해야 한다 + +, +. 조직 내 +각 보안 영역을 담당하는 전문가가 누구인지 파악하는 것은 정확한 성숙도 수준 평가를 위한 +필수 과정이다보안 담당자는 통합계정권한 담당자네트워크 관리자서버 운영팀데이터 관리 +. +, +, +, + +부서 등 각 핵심 요소별 정보 보유자를 식별하고 인터뷰 일정을 조율한다 +동시에 필요한 +. +로그정책 문서절차서 등 사전 정보수집 항목도 함께 정리하여 평가의 준비도를 높인다 +, +, +. +세 번째로 + +, 체크리스트 항목 조정은 제로트러스트 가이드라인 +에서 제공하고 있는 성숙도 +수준 평가를 위한 체크리스트를 각 기업의 +환경에 적합한 형태로 조정 +IT +하는 과정이다. 모든 +조직이 동일하게 적용할 수 있는 일률적인 기준이 아니기 때문에보안 담당자는 자사 상황에 +, +맞지 않는 항목을 비활성화하거나 수정할 수 있다. 아래 그림은 시스템 핵심 요소 중 시스템 +환경에 따른 정책 관리 역량에 대한 체크리스트 문항으로 클라우드에 대한 내용을 다루지만, +실제 기업이 향후에 클라우드 도입 등을 계획하고 있다면 미리 점검하는 등의 취지로 체크 +리스트를활용할 수 있다 + +. +그림 +제로트러스트 가이드라인 +성숙도 수준 평가 체크리스트 +시스템 환경에 따른 정책 관리 +[ +2] + - +출처 +제로트러스트 가이드라인 +: KISA, +네 번째로성숙도 수준 평가 수행은 조정된 체크리스트를 기반으로 조직의 현행 수준을 사실에 + +, + +기반해 스스로 평가한다. 조직의 업무 수행 상황에 따라 한 명의 담당자가 여러 영역을 혹은 +다수의 담당자가 하나의 영역에 대해 평가를 진행하기도 한다. + +마지막으로 성숙도 수준 평가 결과를 도출하게 된다성숙도 결과는 현재 기업의 제로트러스트 + +. + +성숙도 수준을 나타내는 현재 수준과 향후 기업이 도달해야 할 목표 수준을 보여준다 +현재 +. +수준은기업이 제로트러스트를 구성하는 각 요소의 영역별로 현재 어느 단계까지 이행하고 + +있는지평가한 결과이며목표 수준은 현재의 성숙도 수준을 바탕으로 기업의 목표와 보안 환경을 + +, + +고려하여 도달하고자 하는 수준을 설정한 것이다. +아래의 상세 결과 예시는 체크리스트 기반 성숙도 수준 평가 방식을 활용하여 도출한 기업의 + +기능별 현재 수준을 시각화한 것이다 +해당 방식에서는 +. +각 단계별 체크리스트 항목을 모두 +충족해야해당 수준을 달성 + +한 것으로 보고 있으며, 상위 단계의 항목을 달성하기 위해서는 +하위단계 항목들이 선행 + +되어야 한다는 기준을 정의하였다. +그림 +제로트러스트 성숙도 수준 평가 상세 결과 예시 +[ +3] + +이러한 정의를 통해 기업은 현재 수준을 명확히 파악하고기능별 격차에 따라 도출된 개선 + +, +과제를우선순위에 따라 체계적으로 추진할 수 있다 +만약 +조직의 내부 역량만으로 평가가 + +. +, +어려운경우에는 컨설팅 등 외부 전문가의 지원 활용을 고려할 수 있다 + +. +성숙도 수준 평가 기반 도입 절차 +앞서 진행한 성숙도 수준 평가 결과를 기반으로 기업은 실제 제로트러스트 적용을 위한 일련의 +프로세스를 수행할 수 있다설정한 목표 수준을 실제 조직의 환경을 고려하여 조정해당 목표 +. +, + +달성을 위한 과제를 도출 +과제 이행을 위한 로드맵을 수립하고 이행함으로써 제로트러스트 +, +단계별적용이 가능해진다이러한 과정의 상세 내용은 아래와 같다 + +. +. + +그림 +제로트러스트 성숙도 수준 평가 기반 도입 절차 +[ +4] +목표 수준 정의 +⓵ +성숙도 수준 평가를 통해 정의한 + +초기 목표 수준을 조직의 현실적인 조건과 실행 가능성을 +반영하여 조정한다예산인력기술비즈니스 환경 등을 종합적으로 고려하여 실질적으로 달성 +. +, +, +, + +가능한 목표를 정의한다모든 조직이 최고 수준의 성숙도를 목표로 할 필요는 없으며자신의 +. +, +환경과 상황에 적합한 현실적이고 달성 가능한 목표를 수립하는 것이 중요하다 +예를 들어 +. +, +금융기관이나의료기관처럼 높은 수준의 보안이 요구되는 조직은 고도화된 성숙도를 목표로 + +설정할 수 있지만상대적으로 보안 위협이 낮은 조직은 중간 수준의 성숙도를 단계적 목표로 +, +설정할 수 있다목표 수준 설정 시에는 단기 목표와 장기 목표를 구분하여 수립하는 것이 좋다 +. +. +일반적으로 +년 이내의 단기 목표는 기본적인 제로트러스트 원칙을 적용하고 핵심 취약점을 +해소하는 데 집중하며 +년에서 년의 장기 목표는 조직 전체에 제로트러스트를 완전히 내재화하고 +, 3 + +지속적인 개선 체계를 구축하는 수준으로 설정한다이러한 단계별 목표 설정은 조직 구성원들에게 +. + +명확한 방향성을 제시하고 +점진적인 성과 달성을 통해 변화에 대한 동기부여를 제공한다 +, +. +만약특정 목표 수준을 정의하기 어렵다면 각 역량별 현재 수준을 다음 단계로 끌어올리는 + +목표를선정하는 방법을 권장한다 + +. +분석 및 개선 과제 도출 +Gap +⓶ +기업의 제로트러스트 현재 수준과 목표 수준 간 +분석은 조직이 제로트러스트 보안 체계를 + +Gap + +효과적으로 구축하고 발전시키기 위한 출발점이자 전략 수립의 핵심 기반이 된다 +이 분석을 +. +통해 조직은 현재 보유한 보안 역량과 도달하고자 하는 목표 간의 격차를 객관적으로 파악하고, +이를 해소하기 위한 구체적이고 실행 가능한 로드맵을 수립할 수 있다각 평가 영역별로 현재 +. +수준과 목표 수준을 비교하고격차가 큰 영역을 우선순위로 식별한다단순히 점수 차이만 보는 +, +. + +것이 아니라 +격차의 근본 원인 파악이 필요하다 +기술 부족인지 +정책 미비인지 +프로세스 +, +. +, +, +부재인지, 예산 제약인지 +인력 역량 부족인지 등을 명확히 분석하여 각 격차에 대한 해소 + +, +방안을구체화한다또한 +분석에서는 영역 간 상호 의존성과 우선순위를 면밀히 고려해야 + +. +, Gap +한다 +제로트러스트의 각 구성요소는 독립적으로 작동하는 것이 아니라 유기적으로 연결되어 +. +있으므로 +특정 영역의 격차가 다른 영역의 구현을 제약할 수도 있기 때문이다 +예를 들어 +, +. +, + +신원관리 체계가 미흡하면 접근제어와 모니터링의 효과성이 떨어지며 +네트워크 가시성이 + +, +확보되지않으면 위협 탐지와 대응이 어려워진다따라서 + +. +기반이 되는 핵심 영역을 우선적으로 +개선하고이를 기반으로 +, +다른 영역을 점진적으로 강화하는 전략적 접근이 필요하다. +보안 모델 설계 +⓷ +도출된 개선 과제를 기반으로 현행 정보보안 아키텍처에 +등 제로트러스트 관점의 + +PDP, PEP, PIP + +보안 모델을 설계한다 +모델 설계 시 +To-Be +. +인증체계 강화 +마이크로 세그멘테이션 +1) +, 2) +, 3) +소프트웨어정의 경계 + +등 제로트러스트 구현의 가지 원칙을 준수하여 설계한다 + +. +첫째 +인증체계 강화 측면에서는 신원을 새로운 보안 경계로 설정하고 모든 접근 요청 시 + +, +사용자디바이스환경 +· +· +정보를 기반으로 한 다중 요소 인증과 지속적 검증을 수행한다 +사용자 + +. +계정뿐만 아니라 디바이스 보안상태 +위치 정보 +접속 시간 +행동 패턴 등 다양한 컨텍스트를 +, +, +, +종합하여 위험 수준을 평가하고이에 따라 적응형 인증 및 동적 접근제어를 적용한다 +, +. +둘째마이크로 세그멘테이션을 통해 네트워크를 논리적으로 세분화하고 각 세그먼트를 독립 + +, +적인 보호 영역으로 구성하여전통적인 네트워크 경계 방어와 달리제로트러스트에서는 네트워크 +, +, + +내부를 더 이상 신뢰 영역으로 간주하지 않으므로 +애플리케이션 +워크로드 +사용자 그룹별로 +, +, +, +세밀한 세그먼트를 구성하여 횡적 이동을 차단한다각 세그먼트 간 통신은 명시적으로 정의된 +. +정책에 의해서만 허용되며불필요한 네트워크 경로는 원칙적으로 차단하는 모델을 설계한다 +, +. +셋째소프트웨어 정의 경계 원칙을 기반으로 검증된 사용자와 검증된 디바이스에게만 최소한의 + +, + +네트워크 가시성과 접근권한을 부여한다 +소프트웨어 정의 경계는 사용자 요청마다 동적으로 +. +세션을 생성하고 허용된 리소스만 노출함으로써 +기존 경계 기반 모델에서 발생하던 과도한 +, +네트워크노출을 근본적으로 최소화한다 + +. +최소 권한 원칙 적용은 사용자와 애플리케이션에 대해 업무 수행에 필요한 최소한의 권한만 + +부여하며시간 제한세션 제한범위 제한 등을 통해 권한의 남용이나 오용을 방지해야 한다 +, +, +, +. +권한 부여는 정적이 아닌 동적으로 이루어져야 하며접근 요청 시마다 현재의 컨텍스트와 위험 +, + +수준을 재평가하여 실시간으로 권한을 조정 할 수 있어야 한다. +이러한 보안 영역을 지속적으로 모니터링하고 가시성을 확보할 수 있어야 한다제로트러스트 + +. +환경에서는 모든 사용자 활동디바이스 상태네트워크 트래픽애플리케이션 동작을 실시간으로 +, +, +, + +모니터링하고 로그를 수집해야 한다수집된 데이터는 보안 정보 및 이벤트 관리 시스템사용자 +. +, + +및 개체 행동 분석 도구 +위협 인텔리전스 플랫폼 등을 통해 분석되며 +비정상 행위나 위협 +, +, +징후를조기에 탐지하여 자동화된 대응을 수행할 수 있어야 한다 + +. + +로드맵 수립 +⓸ +도출된 과제를 기반으로 + +제로트러스트 단계적 도입을 위한 로드맵을 수립하는 단계로 +먼저 +, +앞서 도출된 과제의 전략적 중요도와 개선 시급성을 기준으로 이행 우선순위를 설정한다전략적 +. + +중요도는 해당 과제가 대고객 접점 업무 또는 핵심 업무와 직결되는지그리고 향후 손익 개선 +, +이나 비용 절감에 기여할 수 있는지를 기준으로 판단한다개선 시급성은 시장경쟁사 동향과 +. +· +법제도 변화 등을 고려하여 단기간 내 이행이 필요한 과제인지 여부를 기준으로 판단한다 +· +. +일반적으로높은 보안 위험을 해소하면서 상대적으로 구현이 용이한 항목을 우선 추진하여 빠른 + + +성과를 만들어내고이를 기반으로 복잡하고 장기적인 개선 과제를 단계적으로 진행하는 접근이 +, + +효과적이다 +또한 경영진의 지원을 확보하고 조직 전체의 관심을 환기시키기 위해 +가시적인 +. +, +성과를 낼 수 있는 퀵윈 +프로젝트를 초기에 포함하는 것도 중요하다다음은 우선 +(Quick-Win) +. +순위 선정을 위한 전략적 중요도와 개선 시급성에 대한 사항이다. +그림 +전략적 중요도와 개선 시급성에 따른 우선순위 설정 +[ +5] + +마지막으로 이행 우선순위에 따른 실행 연도 +기업의 내외부 환경 +투자계획 등을 고려한 + +, +, +중장기로드맵을 수립한다 + +. +제로트러스트 도입을 위한 컨설팅 결과물은 경영진과 주요 이해관계자에게 효과적으로 전달 + +해야 한다 +기술적인 세부사항보다는 비즈니스 관점에서 현재 보안 위험 수준 +격차 해소의 +. +, +필요성, 예상되는 투자 대비 효과구현 일정 등을 명확하게 설명해야 한다시각화된 대시보드 + +, +. +, +성숙도 레이더 차트 +로드맵 타임라인 등을 활용하여 복잡한 정보를 직관적으로 전달하고 +, +, +의사결정에필요한 핵심 정보를 제공해야 한다 + +. + +그림 +제로트러스트 도입전환 프레임워크 +[ +6] +· + +제로트러스트는 단순히 특정 기술이나 제품을 도입하는 것이 아니라 +조직의 전반적인 보안 + +, +철학과 접근 방식을 근본적으로 재정립하는 전략적 여정이다 +로드맵 이행 이후에는 새롭게 +. +현재의성숙도 수준을 평가하고 목표를 재설정한 후 새로운 과제 수행을 위한 로드맵을 수립 + +하는 등 일회성이 아니라 지속적으로 점검하고 반복하는 과정을 통해 기업의 제로트러스트 +수준을향상 + +시켜야 한다일반적으로 분기별 또는 반기별로 성숙도를 재평가하고연간 단위로 +. +, +목표와 전략을 재수립하는 사이클을 운영하는 것이 바람직하다이러한 지속적인 평가와 개선을 +. + +통해 조직은 제로트러스트 성숙도를 점진적으로 향상시키고변화하는 보안 환경에 효과적으로 +, +대응할 수 있는 역량을 확보할 수 있다. + +제장 +제로트러스트 +성숙도 모델 +성숙도 모델 소개 +1. +성숙도 모델 구조 +2. +성숙도 수준 평가 요소 +3. +성숙도 수준 정의 +4. + + +### 1. 성숙도 모델 소개 + +성숙도 모델의 개념 +.1 +성숙도 수준 평가는 조직의 특정 프로세스기술또는 역량이 얼마나 체계적이고 효과적으로 + +, +, +구성되어 있는지를 단계별로 측정하고 평가하는 체계적인 방법론이다성숙도 수준 평가의 핵심 +. + +개념은 조직의 역량을 여러 개선 단계로 구분하여 각 단계마다 특정한 특징과 요구사항을 +정의하는것이다 +일반적으로 낮은 단계에서는 비공식적이고 임시방편적인 프로세스가 주를 + +. +이루며, 단계가 높아질수록 표준화되고 문서화된 프로세스 +측정 가능한 지표 +지속적인 개선 + +, +, +체계 등이 자리 잡게 된다 +각 단계에서는 이전 단계의 역량을 기반으로 하며 +단계적으로 +. +, +발전해나가는 로드맵을 제시하는 것이다 + +. +제로트러스트 가이드라인 +의 성숙도 모델은 조직의 제로트러스트 보안 수준을 체계적 +KISA +으로 +평가하고 개선할 수 있는 포괄적인 프레임워크이다성숙도 모델은 단순히 기술적 완성도를 +. +측정하는 + + +도구를 넘어서조직이 현재 어디에 위치하고 있으며 어디로 나아가야 하는지를 명확히 보여주는 +, + +전략적 나침반 역할을 수행한다가이드라인 +의 성숙도 모델의 기본 구조는 단계로 구성되어 +. + +있으며이는 가이드라인 +의 단계 모델에서 초기단계를 추가하여 더욱 세분화하였다 +, +‘ +’ +. +성숙도 모델의 활용 가치 +.2 +제로트러스트 도입은 단기간에 실현되기 어려운 복잡하고 장기적인 과제이다 +제로트러스트 + +. +성숙도 모델은 기존 경계 기반 보안에서 제로트러스트 아키텍처로 전환하려는 조직이 효율적인 +자원 투자를 통한 단계적 전략을 설정할 수 있도록 도움을 준다는 점에서 아래와 같은 의의를 +가진다. +첫째제로트러스트 성숙도 모델은 기존의 +투자 대비 수익률 +중심 접근만으로는 파악하기 + +, +ROI( +) + +어려웠던 보안 관리 수준을 체계적으로 진단할 수 있는 근거를 제공한다 +많은 조직이 보안 +. +수준을주관적 판단이나 일부 지표에만 의존하는 경우가 많은데성숙도 수준 평가는 신원 관리 + +, +, +디바이스 보안네트워크 환경 +애플리케이션 보호데이터 보안가시성 및 분석 등 제로트러 +, +, +, +, +스트의 핵심 요소 전반을 포괄적으로 검토함으로써 조직의 보안 역량을 보다 명확하게 파악할 +수 있다이를 통해 보안 담당자는 막연하게 느끼던 취약 영역을 구체적으로 식별하고상대적 +. +, +으로 강점이 있는 영역과 개선이 필요한 영역을 구조적으로 구분할 수 있다이러한 분석 결과는 +. + +향후 보안 투자 방향을 합리적으로 판단하고필요한 기술인력프로세스 측면의 개선 우선순위를 +, +· +· + +설정하는 데 중요한 참고자료가 된다. +둘째기존 경계 기반 보안에서 제로트러스트 아키텍처로 전환하려는 조직에게 + +, +명확한 로드맵을 +제시한다성숙도 모델을 바탕으로 조직의 현재 성숙도 수준을 측정하고향후 수행해야 할 보안 +. +, + +과제와 우선순위를 식별할 수 있다제로트러스트로의 전환은 하루아침에 이루어질 수 없으며 +. + +조직의 규모업종보유자원규제 요구사항 등에 따라 목표로 하는 성숙도 수준이 다를 수 있다 +, +, +, +. +성숙도 수준 평가는 조직이 달성해야 할 현실적이고 적절한 목표 수준을 설정하고현재 상태 +, +와의 격차를 세부 영역별로 분석하여 어떤 부분을 먼저 개선해야 하는지어떤 순서로 투자를 +, +집행해야 하는지에 대한 명확한 근거를 제시한다이는 한정된 예산과 인력을 가장 효과적으로 +. +배분하여 보안 투자 대비 효과를 극대화하는 데 필수적이다. +셋째경영진과 의사결정권자를 설득하고 조직 전체의 공감대를 형성하는 강력한 커뮤니케이션 + +, + +도구로써의 역할이다보안 담당자가 추상적으로 제로트러스트가 필요합니다라고 말하는 것과 +. +“ +” +, +성숙도 수준 평가 결과를 바탕으로 우리 조직은 현재 기존 단계에 있으며초기 단계로 발전 +“ +, +하기 위해서는 다단계인증 도입과마이크로 세그멘테이션 구현실시간 모니터링 강화가 필요 +, +, +하고 +이를 위해 +억원의 투자가 필요합니다 +라고 구체적으로 제시하는 것은 설득력에서 큰 +, +n +” +차이가 있다 +특히 성숙도 수준 평가 결과를 시각화된 대시보드나 레이더 차트로 표현하면 +. +, +기술적배경이 없는 경영진도 현재 상황과 개선 방향을 직관적으로 이해할 수 있어 의사결정 + +과정이 신속해진다. +넷째 +제로트러스트 도입 프로젝트의 진행 상황을 추적하고 성과를 측정하는 명확한 기준을 + +, +제공한다 +제로트러스트 전환은 수개월에서 수년에 걸친 장기 프로젝트이므로 +중간단계에서 +. +, +우리가 올바른 방향으로 가고 있는가를 확인할 수 있는 측정 도구가 필요하다 +정기적인 +“ +” +. +성숙도재평가를 통해 각 영역별로 어느 정도 개선이 이루어졌는지를 정량적으로 확인할 수 + +있으며 +이는 프로젝트팀의 사기를 높이고 지속적인 추진 동력을 제공하며 예상보다 진척이 +, +느린영역을 조기에 발견하여 문제를 해결하거나 계획을 조정할 수 있는 기회를 제공한다 + +. +다섯째조직 내 보안 문화를 개선하고 지속적인 개선 마인드를 정착시킨다는 점이다성숙도 + +, +. +수준 평가는 보안이 한번 구축하면 끝나는 것이 아니라 지속적으로 평가하고 개선해야 하는 +순환적 프로세스임을 조직 구성원들에게 각인시키며 정기적인 평가와 개선 활동을 통해 보안 +담당자뿐만 아니라 일반 직원들도 제로트러스트 원칙과 보안의 중요성을 이해하게 되며이는 +, +조직 전체의 보안 의식 수준을 높이는 효과를 가져온다보안이 +부서만의 책임이 아니라 모든 +. +IT + +구성원이 참여해야 하는 전사적 과제라는 인식 확산에 도움을 줄 수 있다. +마지막으로제로트러스트 성숙도 모델은 규제 준수와 인증 준비에 체계적으로 활용될 수 있다 + +, +. +등 주요 인증과 금융의료통신 등 산업별 규제 요구사항은 제로트러스트의 +ISMS-P, ISO 27001 +· +· +핵심 원칙과 여러 측면에서 연관성을 갖는다성숙도 수준 평가를 통해 조직의 보안 관리체계를 +. + +정비하고 운영 절차를 명확히 하는 과정은 규제 준수 준비도를 높이는 데 도움을 주며관련 +, +활동을 보다 구조적이고 일관되게 수행할 수 있게 한다 +또한 평가 과정에서 정리되는 정책 +. +, +절차 +증적 자료 등은 규제 기관이나 감사 기관이 요구하는 문서화를 지원하는 기반 자료로 +, +활용될수 있다 + +. + +성숙도 모델 구조 +2. +제로트러스트 성숙도 모델은 크게 가지 핵심 요소식별자신원기기 및 엔드포인트네트워크 +( +· +, +, +, +시스템 +애플리케이션 및 워크로드 +데이터와 +가지 교차 기능가시성 및 분석 +자동화 및 +, +, +) +( +, +통합으로 +) +나뉘어지며 + +, 각 요소를 구성하는 기능과 이를 구현하기 위한 세부역량으로 구성되어 +있다기존의 성숙도 모델은 단계별 권고사항이 추상적이고 일반적인 수준에 그쳐 +실제 보안 +. +, +담당자가 기술과 정책을 구체적으로 도입하는 데 어려움을 겪는 한계가 있었다이를 보완하기 +. +위해 제로트러스트 가이드라인 +에서는 제로트러스트 적용을 위한 실질적인 기준을 제공하고 +보안 실무자가 각 단계에서 수행해야 할 조치를 명확히 파악할 수 있도록 각 기능을 구성하는 +세부역량을 정의하였다. +그림 +제로트러스트 성숙도 모델 구조 +[ +7] + +핵심 요소 +제로트러스트 성숙도 모델의 + +가지 핵심 요소와 +가지 교차 기능 +은 제로트러스트 관점에서 +기업망의 보안성을 개선하기 위하여 무엇을 보호해야 하는가에 대한 답으로 볼 수 있다조금 +. +더 살펴보면기업망에서 가장 중요한 보호의 대상은 데이터 +로 볼 수 있다식별자 +로 +, +(Data) +. +(Identity) + +구분되는 사용자는 기기 +를 이용하여 기업 네트워크 +상에서 애플리케이션 및 +(Device) +(Network) +워크로드 +를 통해 데이터에 접근하게 되며데이터는 중요 데이터 서버 +(Application & Workload) +, + +등 시스템 +에 위치할 수 있다이들은 모두 사이버 공격 대상이 될 수 있어제로트러스트 +(System) +. +, + +관점에서 기업망의 핵심 요소로 볼 수 있다. +➀식별자신원 +누가 접근하는가에 대한 신뢰 검증 영역으로사용자는 물론 서비스 +· +(Identity): “ +?” +, + +계정시스템 계정까지 모든 주체를 명확히 식별하고지속적으로 인증인가하는 체계이다 +, +, +· +. +➁기기 및 엔드포인트 +어떤 단말에서 접근하는가를 판단하는 영역으로 +(Device & Endpoint): “ +?” +, +모든 엔드포인트 +노트북모바일 +등의 무결성과 보안상태를 지속 검증한다 +(PC, +, +, IoT +) +. +➂네트워크 +어떤 경로를 통해 접근하는가 +를 통제하는 영역으로전통적인 내부 +(Network): “ +?” +, +‘ += +신뢰, 외부비신뢰개념을 폐기하고네트워크 내 모든 트래픽을 검증 및 암호화를 목표로 한다 += +’ +, +. +시스템 +서버 +미들웨어 등 핵심 인프라 계층의 보안 설정무결성운영 안정성 + +(System): +, OS, +· +· +➃ +유지 등 인프라 수준에서의 제로트러스트 원칙을 실현한다. +➄애플리케이션 및 워크로드 +어떤 서비스에 접근하는가를 통제하는 +(Application & Workload): “ +?” + +영역으로사용자서비스 간 상호작용 시애플리케이션이 보안 정책에 따라 동작하는지를 +, +· +, +검증한다. +➅데이터 +제로트러스트의 최종 보호 대상으로데이터의 생성부터 저장전송폐기까지 +(Data): +, +, +, + +전 생명주기 동안 보호가 이루어져야 한다. +➆가시성 및 분석 +조직 전반의 보안 상태행위위협 흐름을 실시간으로 +(Visibility & Analytics): +, +, + +시각화하고 분석하는 교차 기능으로 +무엇이 일어나고 있는가 +를 파악하기 위한 데이터 +, “ +?” +기반 의사결정 체계를 지원한다. +자동화 및 통합 +보안 운영 전반을 자동화하고다양한 보안 + +(Automation & Orchestration): +, +➇ +도구와 정책을 통합적으로 오케스트레이션하는 교차 기능으로 +얼마나 빠르고 일관되게 +, “ +대응할 수 있는가 +를 결정하는 영역이다 +?” +. + +기능 및 세부역량 +제로트러스트 성숙도 모델 +에서는 각 핵심 요소별로 가지는 기능을 정의하고 +그 기능별 + +, +세부역량을 제시하여 기존 제로트러스트 성숙도 모델의 모호성과 추상성을 극복하고 정보보호 +담당자들이 더 명확하고 구체적인 지침을 따를 수 있도록 하였다. 총 +개의 기능 +과 +(Function) +개의 세부역량 +(Capability)으로 구성되어 있으며그 구조를 요약한 그림은 아래와 같다 +, +. +그림 +제로트러스트 핵심 요소교차 기능별 기능 및 역량 +[ +8] +/ +출처 +제로트러스트 가이드라인 +: KISA, + + +역량별 성숙도 수준 체크리스트 +제로트러스트 성숙도 평가는 각 요소의 + +기능별 세부역량에 대한 +개의 체크리스트 +를 통해 +수행되며전체 요소요소별 기능기능별 역량에 대한 성숙도 수준 평가 결과를 제공한다해당 +, +, +, +. + +체크리스트 항목에 대한 상세 설명은 +장 +성숙도 수준 평가를 위한 체크리스트 해설에서 +「 +」 +확인할수 있다 + +. +그림 +제로트러스트 가이드라인 +성숙도 수준 평가를 위한 체크리스트 +사용자 인벤토리 +[ +9] + - +출처 +제로트러스트 가이드라인 +: KISA, + +성숙도 수준 평가 요소 +3. +국내 환경을 반영한 성숙도 평가 요소 구성 +제로트러스트 성숙도 모델의 평가 요소는 보안 아키텍처를 구성하는 핵심 요소를 기준으로 + +정의된다디지털 환경이 고도화될수록 사용자가 애플리케이션에 접속하고 데이터에 접근하는 +. +모든 경로에서 보안 위협이 발생할 수 있다이에 미국 +등은 +관점에서 +. +CISA, DISA/NSA +End-to-End + +통합적으로 관리하고자 성숙도 수준 평가 요소를 +식별자 +기기 및 엔드포인트 +(Identity), +① +② +(Device & Endpoint), +네트워크 +애플리케이션 및 워크로드 + +(Network), +(Application & Workload), +③ +④ + +데이터(Data) +⑤ +의 가지 핵심 요소로 구성하였다 +. +그러나 국내 +환경은 시스템 자산이 물리적 혹은 논리적으로 분리되어 운영되며 +재택 및 + +IT +, +원격근무와 클라우드 환경의 확산으로 인해 시스템이 독립적인 보호 대상이 되고 있다 +또한 +. +보안 패치 미적용 등으로 인한 시스템 취약점은 기업망 전체에 위협이 될 수 있기에 국내 조 +직의 특수성과 환경 변화를 반영해 기존 개 핵심 요소에 +시스템 +을 추가 +‘ +(System)’ +하였다. +또한 + +가시성 및 분석 +자동화 및 통합 +‘ +(Visibility & Analytics)’, ‘ +(Automation & Orchestration)’은 +핵심 요소 전반에 적용되는 교차 기능으로 구성되어 있다해당 영역은 위협의 흐름을 실시간 +. +으로 시각화하고보안 정책을 자동으로 적용하여 고도화된 공격에 신속하고 정확하게 대응할 +, +수 있도록 지원한다. +그림 +제로트러스트 성숙도 모델 구성 요소 비교 +[ +10] +Zero Trust Maturity Model +CISA +KISA + +| Zero Trust Maturity Model | | +| --- | --- | +| | | +| CISA | KISA | + + +#### 3.2 성숙도 수준 평가를 위한 핵심 요소 및 교차 기능 체계 + +본 해설서는 + +개 핵심 요소 +인 +식별자신원 +· +① +(Identity) +기기 및 엔드포인트 +, ② +(Device & Endpoint), +네트워크 +③ +(Network) +시스템 +, ④ +(System) +애플리케이션 및 워크로드 +, ⑤ +(Application & Workload), +데이터 +⑥ +(Data)와 개 교차 기능 +인 +가시성 및 분석 +⑦ +(Visibility & Analytics) +자동화 및 통합 +, ⑧ +(Automation & Orchestration)을 기준으로 제로트러스트 성숙도 수준 평가 요소를 구분하고 있다. +표 +제로트러스트 핵심 요소별 주요 평가 요소 +[ +2] +핵심 요소 +핵심 요소 설명 +주요 평가 요소 +식별자 +신원 +· +(Identity) +- 사람 +서비스 혹은 +기기 등을 +, +IoT +고유하게 설명할 수 있는 속성 또는 +속성의 집합 +- 강한 인증으로 식별자를 검증하고 +세밀한 +접근제어(RBAC, +ABAC) +규칙에따라 적절한 시간 내 접근 + +- 식별자신원 핵심 요소에서는 사용자를 +· + +포함한 개체에 대한 강력한 인증, +통합된 신원관리세밀한 접근제어 +, + +정책 등의 평가 수행 +기기 및 엔드포인트 +(Device & Endpoint) +- 기업망에 연결하여 데이터를 주고 +받는 모든 하드웨어 장치 +- +등의 기술을 활용한 기기 +MDM +신뢰도 +평가를 기반으로 신뢰할 + +수 없는 기기에 대한 접근제어 +- 기업 환경에서 사용되는 모든 디바 +이스의 식별 +등록 +상태관리 +규정 +, +, +, +준수 검증 등의 평가 수행 +네트워크 +(Network) +- 기업망의 유무선 네트워크 +인터넷 +, +등 데이터를 전송하기 위한 모든 +형태의 통신 매체 +- 네트워크 환경 세분화로 최소한의 + +권한 부여 및 내외부 데이터 흐름 관리 +- 마이크로 세그멘테이션암호화된 통신 +, +, +세션 기반 접근제어 등의 평가 수행 +시스템 +(System) +- 온프레미스 + +( +클라우드 +On-Premise), +에 운용 중인 모든 서버 +(Cloud) +시스템 +- 시스템 리소스 접근에 관한 세밀한 +접근제어 +매 +- +세션마다 다중인증 +등의 +(MFA) +신원 확인 및 위험 관리 절차 포함 +- 시스템 접근통제계정 및 인증 정보 +, + +보호네트워크 세분화시스템 보안 +, +, +및 정책 관리 등의 평가 수행 + +| 핵심 요소 | 핵심 요소 설명 | 주요 평가 요소 | +| --- | --- | --- | +| 식별자 · 신원 (Identity) | • 사람, 서비스 혹은 IoT 기기 등을 고유하게 설명할 수 있는 속성 또는 속성의 집합 • 강한 인증으로 식별자를 검증하고 세밀한 접근제어(RBAC, ABAC) 규칙에 따라 적절한 시간 내 접근 | • 식별자·신원 핵심 요소에서는 사용자를 포함한 개체에 대한 강력한 인증, 통합된 신원관리, 세밀한 접근제어 정책 등의 평가 수행 | +| 기기 및 엔드포인트 (Device & Endpoint) | • 기업망에 연결하여 데이터를 주고 받는 모든 하드웨어 장치 • MDM 등의 기술을 활용한 기기 신뢰도 평가를 기반으로 신뢰할 수 없는 기기에 대한 접근제어 | • 기업 환경에서 사용되는 모든 디바 이스의 식별, 등록, 상태관리, 규정 준수 검증 등의 평가 수행 | +| 네트워크 (Network) | • 기업망의 유무선 네트워크, 인터넷 등 데이터를 전송하기 위한 모든 형태의 통신 매체 • 네트워크 환경 세분화로 최소한의 권한 부여 및 내외부 데이터 흐름 관리 | • 마이크로 세그멘테이션, 암호화된 통신, 세션 기반 접근제어 등의 평가 수행 | +| 시스템 (System) | • 온프레미스(On-Premise), 클라우드 (Cloud)에 운용 중인 모든 서버 시스템 • 시스템 리소스 접근에 관한 세밀한 접근제어 • 매 세션마다 다중인증(MFA) 등의 신원 확인 및 위험 관리 절차 포함 | • 시스템 접근통제, 계정 및 인증 정보 보호, 네트워크 세분화, 시스템 보안 및 정책 관리 등의 평가 수행 | + + +표 +핵심 요소에 대한 교차 기능별 주요 평가 요소 +[ +3] +교차 기능 +교차 기능 설명 +주요 평가 요소 +가시성 및 분석 +(Visibility & Analytics) +- 상황에 맞는 세부정보를 이용해 +분석하고 가시성 제공 +- 비정상 행위에 대한 탐지 개선, +보안정책 및 접근제어 실시간 처리 + +- 패킷 단위로 네트워크 트래픽 분석 + +하여 모든 종류의 위협 관찰 및 +지능화된 방어 기법 적용 +- 모든 활동에 대한 로깅 +실시간 +, +모니터링, 위협 탐지사용자 및 개 + +, +체행동 분석 등의 평가 수행 + +자동화 및 통합 +(Automation & +Orchestration) +- 기존의 수동적인 보안 프로세스를 +자동화된 정책 기반 프로세스로 +개선하여신속한 보안 조치 + +- 자동화된 솔루션 통합으로 일관한 + +보안 정책 시행 및 자동화된 통합 +보안 대응 +보안 정책의 자동 배포 +위협 대응 +, +- +자동화워크플로우 통합 등의 평가 수행 +, +애플리케이션 및 +워크로드 +(Application & +Workload) +- 기업망 관리 시스템온프레미스 + +, +(On +클라우드 +에서 +-Premise), +(Cloud) +실행되는모든 서비스와 인터페이스 + +- 응용 계층 및 컨테이너가상머신 +, +등을 +보호관리하고 데이터의 안전한 +· +전달 + +애플리케이션 보안안전한 개발 및 +, +- +배포워크로드 격리 +보안 등을 +, +, API +포괄하여 평가 수행 +데이터 +(Data) +- 최우선으로 보호해야 할 리소스 +- 데이터 목록 작성 +분류 및 레이블 +, +지정 +암호화 기법 적용으로 저장 +, +혹은 전송 중인 데이터에 대한 보호 +및 데이터 유출 방지 +- 데이터 분류 및 라벨링 +암호화 +, +, +데이터 +손실방지 +접근권한 관리 + +, +등의 평가 수행 + +| 애플리케이션 및 워크로드 (Application & Workload) | • 기업망 관리 시스템, 온프레미스(On -Premise), 클라우드(Cloud)에서 실행되는 모든 서비스와 인터페이스 • 응용 계층 및 컨테이너, 가상머신 등을 보호·관리하고 데이터의 안전한 전달 | • 애플리케이션 보안, 안전한 개발 및 배포, 워크로드 격리, API 보안 등을 포괄하여 평가 수행 | +| --- | --- | --- | +| 데이터 (Data) | • 최우선으로 보호해야 할 리소스 • 데이터 목록 작성, 분류 및 레이블 지정, 암호화 기법 적용으로 저장 혹은 전송 중인 데이터에 대한 보호 및 데이터 유출 방지 | • 데이터 분류 및 라벨링, 암호화, 데이터 손실방지, 접근권한 관리 등의 평가 수행 | + + +| 교차 기능 | 교차 기능 설명 | 주요 평가 요소 | +| --- | --- | --- | +| 가시성 및 분석 (Visibility & Analytics) | • 상황에 맞는 세부정보를 이용해 분석하고 가시성 제공 • 비정상 행위에 대한 탐지 개선, 보안 정책 및 접근제어 실시간 처리 • 패킷 단위로 네트워크 트래픽 분석 하여 모든 종류의 위협 관찰 및 지능화된 방어 기법 적용 | • 모든 활동에 대한 로깅, 실시간 모니터링, 위협 탐지, 사용자 및 개 체 행동 분석 등의 평가 수행 | +| 자동화 및 통합 (Automation & Orchestration) | • 기존의 수동적인 보안 프로세스를 자동화된 정책 기반 프로세스로 개선하여 신속한 보안 조치 • 자동화된 솔루션 통합으로 일관한 보안 정책 시행 및 자동화된 통합 보안 대응 | • 보안 정책의 자동 배포, 위협 대응 자동화, 워크플로우 통합 등의 평가 수행 | + + +성숙도 수준 정의 +4. +단계 성숙도 수준 +4.1 4 +정의 + +성숙도 수준은 조직이 + +제로트러스트 원칙을 얼마나 충실히 이행하고 있는지 평가하기 위한 +기준으로 보안 정책 +기술 요건 +운영 절차 +보안 문화 등을 포함한 전반적인 이행 상태를 +, +, +, +단계적으로 +구분한 것이다 +초기 +제로트러스트 가이드라인 +에서는 성숙도 +수준을 +. +기존 +향상 +최적화 +의 +단계로 정의하였으나 +가이드라인 +‘ +(Traditional)’, ‘ +(Advanced)’, ‘ +(Optimal)’ +, +에서는 +와 +의 최신 모델을 반영해 초기 +단계를 추가한 +CISA +NSA +‘ +(Initial)’ +단계 체계 +로 +재정의하였다. +제로트러스트 성숙도 모델은 조직의 보안 역량과 구현 수준을 네 개의 단계로 구분하여 각 + +단계별로 달성해야 할 목표와 특징을 명확히 정의하고 있으며 +이러한 단계별 접근은 조직이 +, +자신들의 현재 위치를 정확히 파악하고 체계적인 발전 경로를 설계할 수 있도록 도와준다. +표 +단계 성숙도 수준 정의 +[ +4] 4 +성숙도 수준은 조직의 보안 수준을 정량적으로 평가할 수 있는 객관적인 기준을 제공한다. +보안 강화가 필요한 영역을 식별하고 자원을 효율적으로 활용하기 위한 근거로써 성숙도 +수준이 활용되며 +조직의 현재 제로트러스트 수준을 평가하고 다음 단계로 나아가기 위한 +, +중장기적 로드맵을 마련하는 기반이 된다. +단계 +구분 +설명 +기존 +정적경계기반 +( +, +, +수동) +- 주요 구성 요소들이 수동으로 설정되며정적인 보안 정책으로 인해 유연하지 +, + +못하게 정책 시행 +경계 기반 보안 위주의 보안 아키텍처 구성 +- +수동으로 사고에 대응하며시스템에 대한 가시성이 제한적 +, +- +초기 +일부 자동화 +( +) +- 일부 프로세스가 자동화되며핵심 요소별 연계가 일부 이루어짐 + +, +속성 할당과 생명주기 관리가 부분적으로 자동화되며 +내부 시스템에 대한 +, +- +기본적인 모니터링 제공 +프로비저닝 이후 최소 권한 변경에 대응 가능 +- +향상 +자동화중앙 +( +, +집중적통합 +, +) +- 자동화된 범위가 확장되고중앙 집중 제어가 강화되는 단계 + +, +중앙 집중식으로 통합된 가시성 제공 +- +중앙 집중식 +관리를 통해 핵심 요소 간 상호작용에 기반한 정책 시행 +ID +- +최적화 +동적완전 +( +, +자동화) +- 자산 및 리소스에 대한 속성이 완전히 자동으로 할당되며 +동적인 정책이 +, +적용되는단계 + +자동화된 트리거에 기반한 동적 정책 생성 +- +자산에 대해 동적 최소 권한 기반 접근 허용 +- +구성요소 간 상호운용성을 위한 개방형 표준 준수 이행 및 강화 +- + +| 단계 | 구분 | 설명 | +| --- | --- | --- | +| 1 | 기존 (정적, 경계기반, 수동) | • 주요 구성 요소들이 수동으로 설정되며, 정적인 보안 정책으로 인해 유연하지 못하게 정책 시행 • 경계 기반 보안 위주의 보안 아키텍처 구성 • 수동으로 사고에 대응하며, 시스템에 대한 가시성이 제한적 | +| 2 | 초기 (일부 자동화) | • 일부 프로세스가 자동화되며, 핵심 요소별 연계가 일부 이루어짐 • 속성 할당과 생명주기 관리가 부분적으로 자동화되며, 내부 시스템에 대한 기본적인 모니터링 제공 • 프로비저닝 이후 최소 권한 변경에 대응 가능 | +| 3 | 향상 (자동화, 중앙 집중적, 통합) | • 자동화된 범위가 확장되고, 중앙 집중 제어가 강화되는 단계 • 중앙 집중식으로 통합된 가시성 제공 • 중앙 집중식 ID 관리를 통해 핵심 요소 간 상호작용에 기반한 정책 시행 | +| 4 | 최적화 (동적, 완전 자동화) | • 자산 및 리소스에 대한 속성이 완전히 자동으로 할당되며, 동적인 정책이 적용되는 단계 • 자동화된 트리거에 기반한 동적 정책 생성 • 자산에 대해 동적 최소 권한 기반 접근 허용 • 구성요소 간 상호운용성을 위한 개방형 표준 준수 이행 및 강화 | + + +핵심 요소별 성숙도 수준 정의 +표 +핵심 요소별 성숙도 수준 정의 +[ +5] +핵심 요소 + +### 1. 기존(Traditional) + +초기 +2. +(Initial) +향상 +3. +(Advanced) +최적화 +4. +(Optimal) +식별자신원 +· +(Identity) +기존 단계에서는 단일 인증과 역할 기반 접근제어에 의존하지만성숙도가 높아질수록 다단계 인증위험 기반 +, +, + +적응형 인증컨텍스트 기반 접근제어 +행동 분석기반 이상행위 탐지 등 고도화된 기능들이 구현된다 +초기 +, +, +. +단계에서는 다단계 인증이 중요 시스템에 제한적으로 적용되며향상 단계에서는 조직 전반에 다단계 인증이 +, +확대되고 위험 기반 인증이 도입되며 +최적화 단계에서는 완전히 자동화된 적응형 인증과 지속적인 신뢰 +, +평가를수행한다 + +. + +온프레미스 +사용 +ID + +패스워드 혹은 다중 +인증방식 + + +수동접근 및 자격 증 +명 관리 + +클라우드와 온프레미스 +기반 +연계 +ID + +다중인증 및 +기반 +FIDO +인증 + +수동 및 정적 규칙 기반 +위험 판단 + +컨텍스트 기반 +인증 +ID + +일부 자동화 및 동적 +규칙을 이용한 위험도 +평가 + +세션 기반 접근 지원 + +클라우드와 온프레미스 +시스템 +전반에 +걸친 +글로벌 ID + +기반 위험도 결정 +AI +및 지속적 보호 + +자동화된 적시최소 권한 +· +접근 허용 +기기 및 +엔드포인트 +(Device & +Endpoint) +기존 단계에서는 디바이스 목록 관리가 수동적이고 보안 상태 확인이 제한적이지만성숙도가 높아질수록 +, +실시간디바이스 상태 모니터링자동화된 규정 준수 검증디바이스 상태에 따른 동적 접근제어가 구현된다 + +, +, +. +특히 +환경에서의 보안 관리 +디바이스 통합관리디바이스 신뢰도 점수 산정 등이 고도화 단계의 +BYOD +, IoT +, +핵심 기능이다. + +제한된 정책 준수 정보 + +단순하고 수동적 기기 +목록 관리 + +수동적 위협 보호 기능 +적용 + +대부분의 기기에 정책 +준수 +시행 +메커니즘 +사용 + +모든 기기에 대한 목록화 + +기기 보안 솔루션 자동 +관리 + +규정 준수 여부에 따른 +접근권한 부여 + +검증된 기기만 데이터 +접근 + +자동화중앙집중식 위협 +, +보호 및 자산관리 기능 +통합 + +지속적인 +기기 +보안 +상태 모니터링 및 검증 + +모든 환경에 결쳐 자산 +및 취약점 관리 통합 + +모든 기기에 대해 위협 +보호 +네트워크 +(Network) +전통적인 +기반 네트워크 분리에서 시작하여소프트웨어 정의 경계를 활용한 동적 세그멘테이션으로 +VLAN +, +발전하며최종적으로는 완전히 자동화된 마이크로 세그멘테이션과 제로트러스트 네트워크 접근 아키텍처가 +, +구현된다모든 네트워크 트래픽의 암호화세션단위 접근 허용횡적 이동 차단 등이 중요한 평가 지표이다 +. +, +, +. + +경계분리 네트워크 구조 +정의 + +알려진 위협 및 정적 +트래픽 필터링 + +매우 중요한 애플리 +케이션및 워크로드에 + + +대한 기능 회복 + +소규모 경계를 통해 +확장된 네트워크 구조 +정의 + +내부 애플리케이션 모든 +트래픽 및 외부 일부 +트래픽 암호화 + +위험성이 없는 워크 +로드에대한 탄력적인 + + +네트워크 회복 + +마이크로 세그멘트를 +통해 엔드포인트 및 +애플리케이션 격리 메 +커니즘 배포 + +비정상적인 데이터 흐름 +격리 및 제거 + +자동화된 위험 인식 +기반 동적 네트워크 +규칙 생성 + +컨텍스트 기반 및 기계 +학습 기반 위협 보호 +통합 + +암호화 민첩성 + +우선순위 지정 가능한 +동적 네트워크 규칙 +생성 + +| 핵심 요소 | 1. 기존(Traditional) | 2. 초기(Initial) | 3. 향상(Advanced) | 4. 최적화(Optimal) | +| --- | --- | --- | --- | --- | +| 식별자·신원 (Identity) | 기존 단계에서는 단일 인증과 역할 기반 접근제어에 의존하지만, 성숙도가 높아질수록 다단계 인증, 위험 기반 적응형 인증, 컨텍스트 기반 접근제어, 행동 분석기반 이상행위 탐지 등 고도화된 기능들이 구현된다. 초기 단계에서는 다단계 인증이 중요 시스템에 제한적으로 적용되며, 향상 단계에서는 조직 전반에 다단계 인증이 확대되고 위험 기반 인증이 도입되며, 최적화 단계에서는 완전히 자동화된 적응형 인증과 지속적인 신뢰 평가를 수행한다. | | | | +| |  온프레미스 ID 사용  패스워드 혹은 다중 인증 방식  수동접근 및 자격 증 명 관리 |  클라우드와 온프레미스 기반 ID 연계  다중인증 및 FIDO 기반 인증  수동 및 정적 규칙 기반 위험 판단 |  컨텍스트 기반 ID 인증  일부 자동화 및 동적 규칙을 이용한 위험도 평가  세션 기반 접근 지원 |  클라우드와 온프레미스 시스템 전반에 걸친 글로벌 ID  AI 기반 위험도 결정 및 지속적 보호  자동화된 적시·최소 권한 접근 허용 | +| 기기 및 엔드포인트 (Device & Endpoint) | 기존 단계에서는 디바이스 목록 관리가 수동적이고 보안 상태 확인이 제한적이지만, 성숙도가 높아질수록 실시간 디바이스 상태 모니터링, 자동화된 규정 준수 검증, 디바이스 상태에 따른 동적 접근제어가 구현된다. 특히 BYOD 환경에서의 보안 관리, IoT 디바이스 통합관리, 디바이스 신뢰도 점수 산정 등이 고도화 단계의 핵심 기능이다. | | | | +| |  제한된 정책 준수 정보  단순하고 수동적 기기 목록 관리  수동적 위협 보호 기능 적용 |  대부분의 기기에 정책 준수 시행 메커니즘 사용  모든 기기에 대한 목록화  기기 보안 솔루션 자동 관리 |  규정 준수 여부에 따른 접근권한 부여  검증된 기기만 데이터 접근  자동화, 중앙집중식 위협 보호 및 자산관리 기능 통합 |  지속적인 기기 보안 상태 모니터링 및 검증  모든 환경에 결쳐 자산 및 취약점 관리 통합  모든 기기에 대해 위협 보호 | +| 네트워크 (Network) | 전통적인 VLAN 기반 네트워크 분리에서 시작하여, 소프트웨어 정의 경계를 활용한 동적 세그멘테이션으로 발전하며, 최종적으로는 완전히 자동화된 마이크로 세그멘테이션과 제로트러스트 네트워크 접근 아키텍처가 구현된다. 모든 네트워크 트래픽의 암호화, 세션단위 접근 허용, 횡적 이동 차단 등이 중요한 평가 지표이다. | | | | +| |  경계분리 네트워크 구조 정의  알려진 위협 및 정적 트래픽 필터링  매우 중요한 애플리 케이션 및 워크로드에 대한 기능 회복 |  소규모 경계를 통해 확장된 네트워크 구조 정의  내부 애플리케이션 모든 트래픽 및 외부 일부 트래픽 암호화  위험성이 없는 워크 로드에 대한 탄력적인 네트워크 회복 |  마이크로 세그멘트를 통해 엔드포인트 및 애플리케이션 격리 메 커니즘 배포  비정상적인 데이터 흐름 격리 및 제거  자동화된 위험 인식 기반 동적 네트워크 규칙 생성 |  컨텍스트 기반 및 기계 학습 기반 위협 보호 통합  암호화 민첩성  우선순위 지정 가능한 동적 네트워크 규칙 생성 | + + +핵심 요소 + +### 1. 기존(Traditional) + +초기 +2. +(Initial) +향상 +3. +(Advanced) +최적화 +4. +(Optimal) +시스템 +(System) +온프레미스 및 클라우드 환경에 구축 운용중인 서버데이터베이스운영체제 등 주요 +시스템에 대한 세밀한 +, +, +IT + +동적 접근제어와 매 세션마다 다중인증 +과 강력한 신원 확인위험관리 절차를 적용하여 시스템의 무결성을 +(MFA) +, + +유지해야 한다. + +로컬 시스템 기반 ID/ +패스워드 등 단순 인증 + +정적 속성 등 최소한의 +권한 분리 정책 적용 + +온프레미스 시스템 보안 +패치 및 정책 수동 변경 + +독립적인 시스템으로 +계정 관리 + +일부 중요도에 따르는 +네트워크 세분화 + +온프레미스 및 클라우드 +시스템에 대한 패치 +수준 자동 확인 기능 + +동적 접근권한 통제 + +등급 및 기능별 네트 +워크 분류 + +온프레미스 및 클라우드 +시스템에 대한 자동화 +된 보안 패치 + +다중인증 및 신뢰도 +기반 접근 인가 + +세분화된 리소스별 접근 +정책 적용 + +온프레미스 및 클라우드 +상의 +모든 +시스템 +실시간 +모니터링 및 + +자동화된 보안 패치 +애플리케이션 +및 워크로드 +(Application +& Workload) +성숙도가 높아질수록 +통합컨테이너 및 마이크로 서비스 보안 +서비스 메시를 통한 서비스 간 +DevSecOps +, +, +인증 및 암호화런타임 애플리케이션 보호 등이 강화된다애플리케이션 수준에서의 최소 권한 원칙 적용과 +, +. +세션별 동적 권한 부여가 핵심이다. + +로컬 인가 및 정적 +속성기반 애플리케이션 + + +접근 + +애플리케이션 +워크 +플로우와위협 보호에 + + +대해 최소한의 통합 + +정적수동 테스트 수행 +· + +애플리케이션 +워크 +플로우와위협 보호에 + + +대한 기본적인 통합 + +파이프라인 +CI/CD +, +적용 +DevSecOps, SBOM + +동적 테스트 방법 사용 + +확장된 컨텍스트 정보 +및 최소 권한 원칙의 +애플리케이션 접근 + +애플리케이션 +워크 +플로우와위협보호에 + +대한 강력한 통합 + +정기적인자동화된 테스트 +, + +실시간 위협 분석을 +통해 지속적 애플리 +케이션인가 + + +모든 애플리케이션에 +사용자 및 단말 직접 +접근 가능 + +자동화된 코드 배포 +및 소프트웨어 검증 +데이터 +(Data) +데이터 생명주기 전체에 걸친 보호민감 데이터의 발견 및 자동 분류컨텍스트 기반 데이터 접근제어데이터 +, +, +, + +사용 추적 및 감사 등이 성숙도에 따라 구현된다. + +정적 +수동 +데이터 +, +분류및 접근제어 + + +온프레미스 및 암호화 +되지 않은 데이터 저 +장소 + +제한된 임시 데이터 +분류 + +일부 자동화된 추적 +기반 +수동 +데이터 +분류및 목록화 + + +최소한의 권한 요소를 +통합한 데이터 접근 + +정적 레이블 및 수도 +메커니즘 데이터 분류 + +속성에 기반한 최소 +권한 제어 기법으로 +접근 관리 + +저장소의 모든 데이터 +암호화 + +레이블 지정 프로세스 +계층화 +및 +데이터 +목록화자동화 + + +를 이용한 지속적인 +AI +데이터 분류 및 목록화 +자동화 + +적시최소 권한 동적 +· +데이터 접근 + +사용 중인 데이터 암호화 +및 최신 암호화 적용 +가시성 및 +분석 +(Visibility & +Analytics) +기본적인 로그 수집과 주기적 검토에서 시작하여통합된 +시스템실시간 분석머신러닝 기반 이상 탐지 +, +SIEM +, +, +, +자동화된 위협 대응으로 발전한다성숙도가 높은 조직은 모든 보안 데이터를 상관 분석하여 종합적인 위협 +. +인텔리전스를 생성하고 예측적 보안 운영을 수행한다. + +기본적인 로그 수집 +및 +모니터링 +분석 +, +지표정의 + + +기본적인 보안 모니터링 +수행 + +구축위협 인텔 +SIEM +, +리전스 활용 통합 보안 +관제 구현 + +실시간 위협 탐지 + +기반 이상 행위 +AI, ML + +탐지 + +자동화된 위협 헌팅 + +실시간 리스크 평가 +체계 운영 + +기반 자동화된 동적 +AI + +정책 시스템 구축 + +자율적 정책 조정 + +자가학습 기반 위협 +탐지 + +지능형 위협 분석 + +예측적 보안 분석 + +| 핵심 요소 | 1. 기존(Traditional) | 2. 초기(Initial) | 3. 향상(Advanced) | 4. 최적화(Optimal) | +| --- | --- | --- | --- | --- | +| 시스템 (System) | 온프레미스 및 클라우드 환경에 구축 운용중인 서버, 데이터베이스, 운영체제 등 주요 IT 시스템에 대한 세밀한 동적 접근제어와 매 세션마다 다중인증(MFA)과 강력한 신원 확인, 위험관리 절차를 적용하여 시스템의 무결성을 유지해야 한다. | | | | +| |  로컬 시스템 기반 ID/ 패스워드 등 단순 인증  정적 속성 등 최소한의 권한 분리 정책 적용  온프레미스 시스템 보안 패치 및 정책 수동 변경 |  독립적인 시스템으로 계정 관리  일부 중요도에 따르는 네트워크 세분화  온프레미스 및 클라우드 시스템에 대한 패치 수준 자동 확인 기능 |  동적 접근권한 통제  등급 및 기능별 네트 워크 분류  온프레미스 및 클라우드 시스템에 대한 자동화 된 보안 패치 |  다중인증 및 신뢰도 기반 접근 인가  세분화된 리소스별 접근 정책 적용  온프레미스 및 클라우드 상의 모든 시스템 실시간 모니터링 및 자동화된 보안 패치 | +| 애플리케이션 및 워크로드 (Application & Workload) | 성숙도가 높아질수록 DevSecOps 통합, 컨테이너 및 마이크로 서비스 보안, 서비스 메시를 통한 서비스 간 인증 및 암호화, 런타임 애플리케이션 보호 등이 강화된다. 애플리케이션 수준에서의 최소 권한 원칙 적용과 세션별 동적 권한 부여가 핵심이다. | | | | +| |  로컬 인가 및 정적 속성 기반 애플리케이션 접근  애플리케이션 워크 플로우와 위협 보호에 대해 최소한의 통합  정적·수동 테스트 수행 |  애플리케이션 워크 플로우와 위협 보호에 대한 기본적인 통합  CI/CD 파이프라인, DevSecOps, SBOM적용  동적 테스트 방법 사용 |  확장된 컨텍스트 정보 및 최소 권한 원칙의 애플리케이션 접근  애플리케이션 워크 플로우와 위협보호에 대한 강력한 통합  정기적인, 자동화된 테스트 |  실시간 위협 분석을 통해 지속적 애플리 케이션 인가  모든 애플리케이션에 사용자 및 단말 직접 접근 가능  자동화된 코드 배포 및 소프트웨어 검증 | +| 데이터 (Data) | 데이터 생명주기 전체에 걸친 보호, 민감 데이터의 발견 및 자동 분류, 컨텍스트 기반 데이터 접근제어, 데이터 사용 추적 및 감사 등이 성숙도에 따라 구현된다. | | | | +| |  정적, 수동 데이터 분류 및 접근제어  온프레미스 및 암호화 되지 않은 데이터 저 장소  제한된 임시 데이터 분류 |  일부 자동화된 추적 기반 수동 데이터 분류 및 목록화  최소한의 권한 요소를 통합한 데이터 접근  정적 레이블 및 수도 메커니즘 데이터 분류 |  속성에 기반한 최소 권한 제어 기법으로 접근 관리  저장소의 모든 데이터 암호화  레이블 지정 프로세스 계층화 및 데이터 목록화 자동화 |  AI를 이용한 지속적인 데이터 분류 및 목록화 자동화  적시·최소 권한 동적 데이터 접근  사용 중인 데이터 암호화 및 최신 암호화 적용 | +| 가시성 및 분석 (Visibility & Analytics) | 기본적인 로그 수집과 주기적 검토에서 시작하여, 통합된 SIEM 시스템, 실시간 분석, 머신러닝 기반 이상 탐지, 자동화된 위협 대응으로 발전한다. 성숙도가 높은 조직은 모든 보안 데이터를 상관 분석하여 종합적인 위협 인텔리전스를 생성하고 예측적 보안 운영을 수행한다. | | | | +| |  기본적인 로그 수집 및 모니터링, 분석 지표 정의  기본적인 보안 모니터링 수행 |  SIEM 구축, 위협 인텔 리전스 활용 통합 보안 관제 구현  실시간 위협 탐지 |  AI, ML 기반 이상 행위 탐지  자동화된 위협 헌팅  실시간 리스크 평가 체계 운영 |  AI 기반 자동화된 동적 정책 시스템 구축  자율적 정책 조정  자가학습 기반 위협 탐지  지능형 위협 분석  예측적 보안 분석 | + + +핵심 요소 + +### 1. 기존(Traditional) + +초기 +2. +(Initial) +향상 +3. +(Advanced) +최적화 +4. +(Optimal) +자동화 및 통합 +(Automation +& +Orchestration) +수동 프로세스에서 부분적 자동화를 거쳐 완전히 자동화된 정책 관리와 오케스트레이션된 보안 운영으로 +발전한다. 거버넌스 교차 기능은 정책 수립역할 및 책임 정의규정 준수 관리지속적인 개선 프로세스 등을 + +, +, +, + +포함한다. + +수동적 정책 적용 + +핵심 보안 및 운영 +프로세스수동 관리 + + +정책 조정 시 각각 +개별반영 등 수동적 + +보안 운영 + +구축 +SOAR + +주요 보안 도구 연동 + +기본적인 보안 이벤트에 +대한 자동화된 대응 + +정책 통합 시스템 고도화 + +보안 정책 동적 조정 + +주요 보안 이벤트 실 +시간 대응 + +자동화된 위협 대응 +프로세스 + +기반 자율적 +AI, ML +보안 대응 + +자율 정책 통합 + +지능형 의사결정 + +| 핵심 요소 | 1. 기존(Traditional) | 2. 초기(Initial) | 3. 향상(Advanced) | 4. 최적화(Optimal) | +| --- | --- | --- | --- | --- | +| 자동화 및 통합 (Automation & Orchestration) | 수동 프로세스에서 부분적 자동화를 거쳐 완전히 자동화된 정책 관리와 오케스트레이션된 보안 운영으로 발전한다. 거버넌스 교차 기능은 정책 수립, 역할 및 책임 정의, 규정 준수 관리, 지속적인 개선 프로세스 등을 포함한다. | | | | +| |  수동적 정책 적용  핵심 보안 및 운영 프로세스 수동 관리  정책 조정 시 각각 개별 반영 등 수동적 보안 운영 |  SOAR 구축  주요 보안 도구 연동  기본적인 보안 이벤트에 대한 자동화된 대응 |  정책 통합 시스템 고도화  보안 정책 동적 조정  주요 보안 이벤트 실 시간 대응  자동화된 위협 대응 프로세스 |  AI, ML 기반 자율적 보안 대응  자율 정책 통합  지능형 의사결정 | + + +핵심 요소별 기능별 수준 정의 +4.3.1 식별자신원 +· +(Identity) +가지 기능식별자 관리인증위험도 평가접근관리으로 구성되며상세 내용은 아래와 같다 +( +, +, +, +) +, +. +기능 +상세 +식별자 관리 +설 +명 +사용자의 식별 정보를 기반으로 시스템 접근권한을 기록하고 제어 +- +사용자 +권한 +역할 등의 정보가 통합자동화된 방식으로 관리되어야 하며최신성과 +ID, +, +· +, +- +정확성이 보장되어야 함 +성 +숙 +단 +계 +기존 +사용자 목록에 대한 +- +문서화 +사용자 자격 증명에 대한 +연계 솔루션 적용 +ID +- +초기 +사용자 역할에 따른 상세 인벤토리 구축 +- +여러 시스템 간 사용자 자격 증명에 대한 연동 +- +향상 +자동화된 인벤토리 관리 기구 도입 +- +통합 관리 시스템 구축 +ID +- +최적화 +기반 사용자 행동에 따른 관리 +AI +- +- 글로벌 수준의 +연계 기반 통합 사용자 경험 및 프로세스 최적화 +ID +인증 +설 +명 +시스템 접근 시 사용자를 검증하기 위해 단일 또는 다중 인증 방식으로 접근을 통제 +- +지속 인증 등 다양한 수단을 통해 사용자의 신뢰성을 지속적으로 검증함 +MFA, FIDO, +- +컨텍스트위치장치시간 등에 따라 인증 방식이 동적으로 결정될 수 있어야 함 +( +, +, +) +- +성 +숙 +단 +계 +기존 +단순 +이메일 등적용 +MFA(SMS, +) +- +세션 기반 인증 +- +사용자 행동 및 접속 상태 모니터링 수행 +- +초기 +다양한 +인증 앱하드웨어 토큰 등 +적용 +MFA( +, +) +- +기반 인증 +FIDO +- +이상행위 탐지 시 추가 인증 수행 +- +향상 +컨텍스트 기반 +인증 +ID +- +동적 인증 기술 기반 실시간 인증 상태 조정 +- +최적화 +비정상적 로그인 시도 실시간 탐지 및 대응 +- +지속적인 신원 검증 +- + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 식별자 관리 | 설 명 | • 사용자의 식별 정보를 기반으로 시스템 접근권한을 기록하고 제어 • 사용자 ID, 권한, 역할 등의 정보가 통합·자동화된 방식으로 관리되어야 하며, 최신성과 정확성이 보장되어야 함 | | +| | 성 숙 단 계 | 기존 | • 사용자 목록에 대한 문서화 • 사용자 자격 증명에 대한 ID 연계 솔루션 적용 | +| | | 초기 | • 사용자 역할에 따른 상세 인벤토리 구축 • 여러 시스템 간 사용자 자격 증명에 대한 연동 | +| | | 향상 | • 자동화된 인벤토리 관리 기구 도입 • ID 통합 관리 시스템 구축 | +| | | 최적화 | • AI 기반 사용자 행동에 따른 관리 • 글로벌 수준의 ID 연계 기반 통합 사용자 경험 및 프로세스 최적화 | +| 인증 | 설 명 | • 시스템 접근 시 사용자를 검증하기 위해 단일 또는 다중 인증 방식으로 접근을 통제 • MFA, FIDO, 지속 인증 등 다양한 수단을 통해 사용자의 신뢰성을 지속적으로 검증함 • 컨텍스트(위치, 장치, 시간 등)에 따라 인증 방식이 동적으로 결정될 수 있어야 함 | | +| | 성 숙 단 계 | 기존 | • 단순 MFA(SMS, 이메일 등) 적용 • 세션 기반 인증 • 사용자 행동 및 접속 상태 모니터링 수행 | +| | | 초기 | • 다양한 MFA(인증 앱, 하드웨어 토큰 등) 적용 • FIDO 기반 인증 • 이상행위 탐지 시 추가 인증 수행 | +| | | 향상 | • 컨텍스트 기반 ID 인증 • 동적 인증 기술 기반 실시간 인증 상태 조정 | +| | | 최적화 | • 비정상적 로그인 시도 실시간 탐지 및 대응 • 지속적인 신원 검증 | + + +기능 +상세 +위험도 평가 +설 +명 +- 사용자기기권한에 대한 활동 및 상황 정보를 수집하여 위험을 평가하고 인증접근제어를 강화 +, +, +· +- 통합 +플랫폼을 통해 중앙 집중적 권한 및 식별자 관리를 수행하며상황 기반 +ICAM +, +ID +위협을실시간 분석함 + +- 사용자 행동 기반의 생체 인식상황 정보위치시간장치 등 +기반 탐지 기법 등이 함께 +, +( +, +, +), AI + +활용됨 +성 +숙 +단 +계 +기존 +시스템 구축 +ICAM +- +사용자 행동 패턴 수동 분석 +- +초기 +시스템 기반 중앙 집중 관리 및 모니터링 수행 +ICAM +- +컨텍스트 정보 기반 접근권한 조정 +- +향상 +- 보안 기술 및 시스템 통합자동화위험도 평가 적용을 통한 +플랫폼 고도화 +, +, +ICAM +- 실시간 사용자 행동 및 컨텍스트 변화 반영을 통한 접근제어 조정 +최적화 +기반 +플랫폼을 통한 보안 강화 +AI +ICAM +- +기반 실시간 사용자 행동 분석 +AI +- +접근관리 +설 +명 +사용자의 위치디바이스 상태시간 등 다양한 조건에 따라 접근권한을 동적으로 제어 +, +, +- +- 역할 기반에서 조건 기반으로 확장되어 최소 권한 원칙을 준수하고 리스크를 줄이는 데 중점 +리소스워크로드 단위로 접근 범위를 세분화하고정책을 실시간으로 조정할 수 있어야 함 +· +, +- +성 +숙 +단 +계 +기존 +- 최소 권한 원칙과 권한 관리 문서화 +사용자 활동 및 조건 수집을 위한 기초 시스템 구축 +- +초기 +- 조건 기반 접근제어와 권한 관리 표준화 +- 시간위치 기반 최소 권한 원칙에 따른 접근제어권한 요청 및 변경 관리 시스템 도입 +· +, +향상 +- 세션리소스 기반 접근제어와 권한 관리 자동화 +, +- 정책 분류리스트 기반 권한 적용의 체계화 +· +최적화 +- 동적 정책 적용과 권한 변경의 실시간 처리 +- +기반 사용자 접속 관리 +AI + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 위험도 평가 | 설 명 | • 사용자, 기기, 권한에 대한 활동 및 상황 정보를 수집하여 위험을 평가하고 인증·접근제어를 강화 • 통합 ICAM 플랫폼을 통해 중앙 집중적 권한 및 식별자 관리를 수행하며, 상황 기반 ID 위협을 실시간 분석함 • 사용자 행동 기반의 생체 인식, 상황 정보(위치, 시간, 장치 등), AI 기반 탐지 기법 등이 함께 활용됨 | | +| | 성 숙 단 계 | 기존 | • ICAM 시스템 구축 • 사용자 행동 패턴 수동 분석 | +| | | 초기 | • ICAM 시스템 기반 중앙 집중 관리 및 모니터링 수행 • 컨텍스트 정보 기반 접근권한 조정 | +| | | 향상 | • 보안 기술 및 시스템 통합, 자동화, 위험도 평가 적용을 통한 ICAM 플랫폼 고도화 • 실시간 사용자 행동 및 컨텍스트 변화 반영을 통한 접근제어 조정 | +| | | 최적화 | • AI 기반 ICAM 플랫폼을 통한 보안 강화 • AI 기반 실시간 사용자 행동 분석 | +| 접근관리 | 설 명 | • 사용자의 위치, 디바이스 상태, 시간 등 다양한 조건에 따라 접근권한을 동적으로 제어 • 역할 기반에서 조건 기반으로 확장되어 최소 권한 원칙을 준수하고 리스크를 줄이는 데 중점 • 리소스·워크로드 단위로 접근 범위를 세분화하고, 정책을 실시간으로 조정할 수 있어야 함 | | +| | 성 숙 단 계 | 기존 | • 최소 권한 원칙과 권한 관리 문서화 • 사용자 활동 및 조건 수집을 위한 기초 시스템 구축 | +| | | 초기 | • 조건 기반 접근제어와 권한 관리 표준화 • 시간·위치 기반 최소 권한 원칙에 따른 접근제어, 권한 요청 및 변경 관리 시스템 도입 | +| | | 향상 | • 세션, 리소스 기반 접근제어와 권한 관리 자동화 • 정책 분류·리스트 기반 권한 적용의 체계화 | +| | | 최적화 | • 동적 정책 적용과 권한 변경의 실시간 처리 • AI 기반 사용자 접속 관리 | + + +4.3.2 기기 및 엔드포인트(Device & Endpoint) +가지 기능정책 준수 모니터링데이터 접근제어자산관리기기 위협 보호으로 구성되며상 +( +, +, +, +) +, +세 내용은 아래와 같다. +기능 +상세 +정책 준수 +모니터링 +설 +명 +- 엔드포인트 기기 +노트북모바일 등가 기업의 보안 정책을 준수하고 있는지를 점검 +(PC, +, +) +· +모니터링 +기기의 운영체제보안 설정패치 현황 등을 수시로 점검하고기준 미달 기기에 대해서는 +, +, +, +- +접근을 제한해야 함 +등 도구를 활용해 기기 상태를 실시간 확인하고정책 위반 시 경고 및 조치가 가능 +MDM +, +- +해야 함 +성 +숙 +단 +계 +기존 +리소스에 연결된 기기 식별 +- +규정 준수 수동 평가 +- +초기 +실시간 기기 탐지 및 규정 준수 평가 +- +규정 비준수 기기에 대한 경고 및 접근 제한 +- +향상 +자동 규정 기준 적용 +- +규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여 +- +최적화 +규정 준수 여부에 따른 동적 권한 수정 +- +규정 준수 +기반 실시간 평가 +AI +- +데이터 접근 +제어 +설 +명 +- 장치가 네트워크에 접근하기 전에 보안 상태안티바이러스무결성 검사 등를 평가하여 +( +, +) +, +기준을만족하는 경우에만 접근을 허용 + +등의 기술을 활용하여 사전 점검을 수행하며위험 장치의 +NextGen AV, AppControl, FIM +, +- +접근을 차단함 +기기 상태에 따라 동적으로 접근권한을 조정할 수 있어야 하며타 보안 시스템과 연동된 +, +- +전략 수립이 필요 +성 +숙 +단 +계 +기존 +자산 접근 기기에 대한 정보 수집 +- +초기 +자산 접근 전 기기에 대한 수동 검사 +- +향상 +- 자산 접근 전 기기 상태에 대한 자동 평가 및 보안 기준 충족 기기만 접근을 허용 +최적화 +보안 상태에 따른 기기의 접근권한 조정 +- + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 정책 준수 모니터링 | 설 명 | • 엔드포인트 기기(PC, 노트북, 모바일 등)가 기업의 보안 정책을 준수하고 있는지를 점검· 모니터링 • 기기의 운영체제, 보안 설정, 패치 현황 등을 수시로 점검하고, 기준 미달 기기에 대해서는 접근을 제한해야 함 • MDM 등 도구를 활용해 기기 상태를 실시간 확인하고, 정책 위반 시 경고 및 조치가 가능 해야 함 | | +| | 성 숙 단 계 | 기존 | • 리소스에 연결된 기기 식별 • 규정 준수 수동 평가 | +| | | 초기 | • 실시간 기기 탐지 및 규정 준수 평가 • 규정 비준수 기기에 대한 경고 및 접근 제한 | +| | | 향상 | • 자동 규정 기준 적용 • 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여 | +| | | 최적화 | • 규정 준수 여부에 따른 동적 권한 수정 • 규정 준수 AI 기반 실시간 평가 | +| 데이터 접근 제어 | 설 명 | • 장치가 네트워크에 접근하기 전에 보안 상태(안티바이러스, 무결성 검사 등)를 평가하여, 기준을 만족하는 경우에만 접근을 허용 • NextGen AV, AppControl, FIM 등의 기술을 활용하여 사전 점검을 수행하며, 위험 장치의 접근을 차단함 • 기기 상태에 따라 동적으로 접근권한을 조정할 수 있어야 하며, 타 보안 시스템과 연동된 전략 수립이 필요 | | +| | 성 숙 단 계 | 기존 | • 자산 접근 기기에 대한 정보 수집 | +| | | 초기 | • 자산 접근 전 기기에 대한 수동 검사 | +| | | 향상 | • 자산 접근 전 기기 상태에 대한 자동 평가 및 보안 기준 충족 기기만 접근을 허용 | +| | | 최적화 | • 보안 상태에 따른 기기의 접근권한 조정 | + + +기능 +상세 +자산관리 +설 +명 +조직 내 모든 기기엔드포인트 및 모바일 포함의 목록을 정확히 작성하고보안 상태를 실 +( +) +, +- +시간으로 관리 +기기의 소유자위치인증 상태보안 설정패치 현황 등을 중앙에서 통합 관리하여 보안 +, +, +, +, +- +위협을 사전에 탐지하고 대응함 +- 비정상 기기 탐지자동 업데이트위험 대응 자동화 등을 포함하는 고도화된 관리 체계 필요 +, +, +성 +숙 +단 +계 +기존 +기기 인벤토리 작성 및 수동 업데이트 +- +주요 기기에 대한 정보 수집 및 관리 +- +초기 +기기 인벤토리 자동화 및 모든 기기 실시간 관리 +- +향상 +기기 인벤토리 분석을 통한 보안 취약점 식별 및 비정상적이거나 승인되지 +- +않은 기기 탐지 +최적화 +실시간 모니터링 및 이상 행위 예측 분석을 통한 기기 관리 +- +기기 위협 +보호 +설 +명 +엔드포인트 기기에서 발생하는 이상행위를 실시간으로 탐지하고자동으로 대응 +, +- +- +솔루션을 +EDR(Endpoint Detection & Response), XDR(Extended Detection & Response) +활용하여위협을 식별하고 사전에 차단함 + +기반 분석자동화된 대응 체계를 통해 실시간 위협 관리가 가능해야 함 +AI +, +- +성 +숙 +단 +계 +기존 +- +기반의 엔드포인트 위협 탐지 및 초기 대응 정책 수립 +EDR +자산 및 취약성 수동 평가 +- +초기 +- +시스템을 고도화하여 실시간 위협 탐지 및 자동 대응 +EDR +- 자동화된 취약성 평가 및 패치 관리 도구 도입 +향상 +- +기반의 네트워크 전반 위협 탐지 확대 및 정확도 향상 +XDR +- 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리 자동화 +최적화 +- 취약점을 사전에 식별하고 자동으로 패치 적용 +- 자산관리취약성 평가패치 관리 시스템이 통합 +, +, + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 자산관리 | 설 명 | • 조직 내 모든 기기(엔드포인트 및 모바일 포함)의 목록을 정확히 작성하고, 보안 상태를 실 시간으로 관리 • 기기의 소유자, 위치, 인증 상태, 보안 설정, 패치 현황 등을 중앙에서 통합 관리하여 보안 위협을 사전에 탐지하고 대응함 • 비정상 기기 탐지, 자동 업데이트, 위험 대응 자동화 등을 포함하는 고도화된 관리 체계 필요 | | +| | 성 숙 단 계 | 기존 | • 기기 인벤토리 작성 및 수동 업데이트 • 주요 기기에 대한 정보 수집 및 관리 | +| | | 초기 | • 기기 인벤토리 자동화 및 모든 기기 실시간 관리 | +| | | 향상 | • 기기 인벤토리 분석을 통한 보안 취약점 식별 및 비정상적이거나 승인되지 않은 기기 탐지 | +| | | 최적화 | • 실시간 모니터링 및 이상 행위 예측 분석을 통한 기기 관리 | +| 기기 위협 보호 | 설 명 | • 엔드포인트 기기에서 발생하는 이상행위를 실시간으로 탐지하고, 자동으로 대응 • EDR(Endpoint Detection & Response), XDR(Extended Detection & Response) 솔루션을 활용하여 위협을 식별하고 사전에 차단함 • AI 기반 분석, 자동화된 대응 체계를 통해 실시간 위협 관리가 가능해야 함 | | +| | 성 숙 단 계 | 기존 | • EDR 기반의 엔드포인트 위협 탐지 및 초기 대응 정책 수립 • 자산 및 취약성 수동 평가 | +| | | 초기 | • EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응 • 자동화된 취약성 평가 및 패치 관리 도구 도입 | +| | | 향상 | • XDR 기반의 네트워크 전반 위협 탐지 확대 및 정확도 향상 • 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리 자동화 | +| | | 최적화 | • 취약점을 사전에 식별하고 자동으로 패치 적용 • 자산관리, 취약성 평가, 패치 관리 시스템이 통합 | + + +4.3.3 네트워크(Network) +가지 기능네트워크 세분화위협 대응트래픽 암호화트래픽 관리네트워크 회복성으로 구 +( +, +, +, +, +) +성되며상세 내용은 아래와 같다 +, +. +기능 +상세 +네트워크 +세분화 +설 +명 +- 내부 네트워크를 기능보안 등급사용자 그룹 등에 따라 세분화하여 접근 경로를 제한하고 +, +, +, +공격 확산을 방지 +- 마이크로 세그멘테이션을 포함하여 리소스 간 이동을 최소화하며공격자가 내부로 침투 +, +하더라도 +횡적 이동를 억제함 +lateral movement( +) +정책 기반 분리 +보안 도메인 등 다양한 기술을 활용하여 적용 가능 +, VLAN· +- +성 +숙 +단 +계 +기존 +- 비즈니스 영역별 매크로 세그멘테이션자산트래픽 기반 구성 +, +· +- 애플리케이션 및 워크로드 기반 마이크로 세그멘테이션수동 구성 +, +- +도입 여부클라우드 환경 +구조 설정트래픽 제어 가능 +SDN +, +SDN +· +초기 +- 매크로 세그먼트 간 보안 정책 적용트래픽 모니터링이상 탐지 +, +· +- 애플리케이션 및 워크로드 기반 마이크로 세그먼트 정책 설정트래픽 모니터링 가능 +, +- 클라우드 +중앙 관리실시간 정책 적용 +SDN +· +향상 +- 맞춤형 보안 정책 설정트래픽 조정 및 위협 대응 가능 +, +- 전체 트래픽 보안 제어애플리케이션별 격리 적용 +, +- 클라우드 +확장 통한 트래픽 관리보안 적용 +SDN +· +최적화 +- +기반 매크로 세그먼트 관리 적용 +AI +- +기반 마이크로 세그먼트 관리자동 대응 +AI +· +- 클라우드 +기반 +으로 위협 관리트래픽 예측 가능 +AI +SDN +· +위협 대응 +설 +명 +네트워크 내에서 발생하는 잠재적 위협을 신속히 감지하고 대응 +- +- 침입 탐지 및 방지 시스템 +위협 인텔리전스자동화된 탐지 및 차단 체계 등을 +(IDS/IPS), +, +포함하며, 공격 발생 시 실시간으로 대응함 + +- 애플리케이션별 트래픽 특성을 파악하고이상 징후 탐지 및 정책 기반 대응이 가능해야 함 +, +성 +숙 +단 +계 +기존 +- +기반 위협 감시정적 규칙 통한 수동 트래픽 관리 +IDS·IPS +, +초기 +- 자동 위협 대응 시스템 도입앱 프로파일 기반 트래픽 관리 +, +향상 +- 실시간 위협 탐지선제 대응동적 규칙 기반 트래픽 관리 +· +, +최적화 +- 전사 위협 자동 대응앱 프로파일 변화 기반 트래픽 동적 관리 +, +트래픽 +암호화 +설 +명 +네트워크 내외부를 오가는 데이터의 기밀성을 유지하기 위해 트래픽을 암호화 +· +- +데이터 암호화 및 전송 보안 기술을 활용하여 전송 중인 데이터를 보호함 +SSL/TLS, VPN, +- +최신 암호화 알고리즘 및 키 관리 시스템을 통해 안정성과 성능을 동시에 확보해야 함 +- +성 +숙 +단 +계 +기존 +- 내외부 트래픽 일부 암호화 +사용 +· +, SSL/TLS·VPN +초기 +- 전사 암호화 적용데이터 전송 암호화 필수 +, +향상 +- 전송저장 데이터 암호화최신 암호화 기술키 관리 시스템 적용 +· +, +· +최적화 +- 최신 암호화무성능 저하 데이터 보호통합 키 관리 +· +, + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 네트워크 세분화 | 설 명 | • 내부 네트워크를 기능, 보안 등급, 사용자 그룹 등에 따라 세분화하여 접근 경로를 제한하고, 공격 확산을 방지 • 마이크로 세그멘테이션을 포함하여 리소스 간 이동을 최소화하며, 공격자가 내부로 침투 하더라도 lateral movement(횡적 이동)를 억제함 • 정책 기반 분리, VLAN·보안 도메인 등 다양한 기술을 활용하여 적용 가능 | | +| | 성 숙 단 계 | 기존 | • 비즈니스 영역별 매크로 세그멘테이션, 자산·트래픽 기반 구성 • 애플리케이션 및 워크로드 기반 마이크로 세그멘테이션, 수동 구성 • SDN 도입 여부, 클라우드 환경 SDN 구조 설정·트래픽 제어 가능 | +| | | 초기 | • 매크로 세그먼트 간 보안 정책 적용, 트래픽 모니터링·이상 탐지 • 애플리케이션 및 워크로드 기반 마이크로 세그먼트 정책 설정, 트래픽 모니터링 가능 • 클라우드 SDN 중앙 관리·실시간 정책 적용 | +| | | 향상 | • 맞춤형 보안 정책 설정, 트래픽 조정 및 위협 대응 가능 • 전체 트래픽 보안 제어, 애플리케이션별 격리 적용 • 클라우드 SDN 확장 통한 트래픽 관리·보안 적용 | +| | | 최적화 | • AI 기반 매크로 세그먼트 관리 적용 • AI 기반 마이크로 세그먼트 관리·자동 대응 • 클라우드 AI 기반 SDN으로 위협 관리·트래픽 예측 가능 | +| 위협 대응 | 설 명 | • 네트워크 내에서 발생하는 잠재적 위협을 신속히 감지하고 대응 • 침입 탐지 및 방지 시스템(IDS/IPS), 위협 인텔리전스, 자동화된 탐지 및 차단 체계 등을 포함하며, 공격 발생 시 실시간으로 대응함 • 애플리케이션별 트래픽 특성을 파악하고, 이상 징후 탐지 및 정책 기반 대응이 가능해야 함 | | +| | 성 숙 단 계 | 기존 | • IDS·IPS 기반 위협 감시, 정적 규칙 통한 수동 트래픽 관리 | +| | | 초기 | • 자동 위협 대응 시스템 도입, 앱 프로파일 기반 트래픽 관리 | +| | | 향상 | • 실시간 위협 탐지·선제 대응, 동적 규칙 기반 트래픽 관리 | +| | | 최적화 | • 전사 위협 자동 대응, 앱 프로파일 변화 기반 트래픽 동적 관리 | +| 트래픽 암호화 | 설 명 | • 네트워크 내·외부를 오가는 데이터의 기밀성을 유지하기 위해 트래픽을 암호화 • SSL/TLS, VPN, 데이터 암호화 및 전송 보안 기술을 활용하여 전송 중인 데이터를 보호함 • 최신 암호화 알고리즘 및 키 관리 시스템을 통해 안정성과 성능을 동시에 확보해야 함 | | +| | 성 숙 단 계 | 기존 | • 내·외부 트래픽 일부 암호화, SSL/TLS·VPN 사용 | +| | | 초기 | • 전사 암호화 적용, 데이터 전송 암호화 필수 | +| | | 향상 | • 전송·저장 데이터 암호화, 최신 암호화 기술·키 관리 시스템 적용 | +| | | 최적화 | • 최신 암호화·무성능 저하 데이터 보호, 통합 키 관리 | + + +기능 +상세 +트래픽 +관리 +설 +명 +네트워크 내에서 데이터가 이동하는 경로와 방식을 시각화하고 분석 +- +- 데이터를 주고받는 시스템 간 흐름을 파악해데이터 출처목적지경로 등을 기반으로 +, +, +, +보안정책을 설계하고 위협을 예측할 수 있음 + +- 실시간 매핑과 이상 흐름 탐지 기능을 포함해 트래픽의 가시성과 우선순위를 동적으로 관리 +가능해야 함 +성 +숙 +단 +계 +기존 +- 데이터 트래픽 수동 모니터링흐름 매핑 +· +초기 +- 애플리케이션 단위 트래픽 매핑자동화 도구 통한 실시간 데이터 흐름 매핑 +, +향상 +- 데이터 트래픽 보안 정책이상 탐지상관 분석 통한 위협 사전 식별 +· +, +최적화 +- +기반 실시간 데이터 흐름 감지트래픽 우선순위 동적 조정 +AI +, +네트워크 +회복성 +설 +명 +- 네트워크 장애공격비정상적인 트래픽 증가 등의 상황에서 중단 없이 서비스를 유지하거나 +, +, + +신속하게 복구하는 능력을 확보 +백업 라우팅이중화 경로회선 장애 탐지 및 전환 +대응 체계 등을 포함 +, +, +, DDoS +- +사전에 설계된 복구 시나리오와 자동화된 대응 정책을 통해 서비스 연속성을 확보해야 함 +- +성 +숙 +단 +계 +기존 +- 애플리케이션 및 워크로드 복구 계획주기적 백업장비 장애 대응 절차 +, +· +초기 +- 네트워크 다중 경로이중화 설계자동 복구장애 조치 적용 +· +, +· +향상 +- 장애공격 대응 지속 서비스재해 복구 계획 주기적 테스트 +· +, +최적화 +- 무중단 네트워크 운영실시간 장애 감지자동 복구 +, +· + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 트래픽 관리 | 설 명 | • 네트워크 내에서 데이터가 이동하는 경로와 방식을 시각화하고 분석 • 데이터를 주고받는 시스템 간 흐름을 파악해, 데이터 출처, 목적지, 경로 등을 기반으로 보안 정책을 설계하고 위협을 예측할 수 있음 • 실시간 매핑과 이상 흐름 탐지 기능을 포함해 트래픽의 가시성과 우선순위를 동적으로 관리 가능해야 함 | | +| | 성 숙 단 계 | 기존 | • 데이터 트래픽 수동 모니터링·흐름 매핑 | +| | | 초기 | • 애플리케이션 단위 트래픽 매핑, 자동화 도구 통한 실시간 데이터 흐름 매핑 | +| | | 향상 | • 데이터 트래픽 보안 정책·이상 탐지, 상관 분석 통한 위협 사전 식별 | +| | | 최적화 | • AI 기반 실시간 데이터 흐름 감지, 트래픽 우선순위 동적 조정 | +| 네트워크 회복성 | 설 명 | • 네트워크 장애, 공격, 비정상적인 트래픽 증가 등의 상황에서 중단 없이 서비스를 유지하거나 신속하게 복구하는 능력을 확보 • 백업 라우팅, 이중화 경로, 회선 장애 탐지 및 전환, DDoS 대응 체계 등을 포함 • 사전에 설계된 복구 시나리오와 자동화된 대응 정책을 통해 서비스 연속성을 확보해야 함 | | +| | 성 숙 단 계 | 기존 | • 애플리케이션 및 워크로드 복구 계획, 주기적 백업·장비 장애 대응 절차 | +| | | 초기 | • 네트워크 다중 경로·이중화 설계, 자동 복구·장애 조치 적용 | +| | | 향상 | • 장애·공격 대응 지속 서비스, 재해 복구 계획 주기적 테스트 | +| | | 최적화 | • 무중단 네트워크 운영, 실시간 장애 감지·자동 복구 | + + +4.3.4 시스템(System) +가지 기능접근통제시스템 계정 관리 +네트워크 분리 정책시스템 보안 및 정책 관리으로 +( +, +, +, +) +구성되며상세내용은 아래와 같다 +, +. +기능 +상세 +접근통제 +설 +명 +- 사용자가 네트워크나 시스템에 접근할 때허용된 자원만 사용할 수 있도록 권한을 부여하고 +, +이를 관리 +권한 기반의 통제를 통해 승인된 사용자만 필요한 리소스에 접근할 수 있도록 하여 내부 +- +오남용이나 침해 사고를 방지함 +등 다양한 정책 모델을 기반으로 통제 가능 +RBAC, ABAC +- +성 +숙 +단 +계 +기존 +사용자와 기기에 수동 권한 부여 +- +역할 기반 접근제어 +적용 +(RBAC) +- +초기 +중앙집중형으로 권한 부여 +- +실시간 권한 부여 및 변경 사항 자동 반영 +- +특정 리소스에 대한 접근 제한 및 승인 정책 자동 적용 +- +향상 +속성 기반 접근제어 +적용 +(ABAC) +- +위치기기 상태시간 등 기반으로 접근권한 실시간 관리 +, +, +- +최적화 +기반으로 사용자와 기기 상태 실시간 분석 및 자동 권한 조정 +AI +- +중앙 시스템 관리 +- +시스템 명령 시 신뢰도 재산정 +- +위험 분석 기반 지속적 접근제어 정책 도입 +- +시스템 계정 +관리 +설 +명 +- 권한 있는 사용자 및 시스템 계정에 대한 접근을 통제하고인증 정보를 안전하게 저장관리 +, +· +시스템을 통해 권한 요청승인모니터링을 수행하고비밀번호인증서 +등의 자격 +PAM +· +· +, +· +·MFA +- +정보를 보호함 +모든 계정과 자격 증명은 중앙에서 일관되게 관리되며비정상적인 행위 탐지와 자동 차단 +, +- +기능이 포함되어야 함 +성 +숙 +단 +계 +기존 +시스템 구축 및 정책 수립 +PAM +- +자격 증명 수동 관리 +- +패스워드 기반 인증 방식 적용 +- +초기 +솔루션으로 사용자 접근 모니터링 및 제어 +PAM +- +자동화된 권한 상승 승인 기술 도입 +- +자격 증명 자동 및 중앙 관리 +- +등 안전한 인증 방식 적용 +MFA +- +향상 +솔루션으로 이상행위 탐지 +PAM +- +생체인증 등 고급 인증 적용 +- +기반으로 실시간 인증정보 분석 +AI +- +최적화 +시스템에 +기반 위협 탐지 및 대응 기능 도입 +PAM +AI +- +비정상 인증 시도 즉각 차단 +- +실시간 인증 정책 조정 +- +자격 증명 데이터의 중앙 관리 및 시스템 자율화 +- + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 접근통제 | 설 명 | • 사용자가 네트워크나 시스템에 접근할 때, 허용된 자원만 사용할 수 있도록 권한을 부여하고 이를 관리 • 권한 기반의 통제를 통해 승인된 사용자만 필요한 리소스에 접근할 수 있도록 하여 내부 오남용이나 침해 사고를 방지함 • RBAC, ABAC 등 다양한 정책 모델을 기반으로 통제 가능 | | +| | 성 숙 단 계 | 기존 | • 사용자와 기기에 수동 권한 부여 • 역할 기반 접근제어(RBAC) 적용 | +| | | 초기 | • 중앙집중형으로 권한 부여 • 실시간 권한 부여 및 변경 사항 자동 반영 • 특정 리소스에 대한 접근 제한 및 승인 정책 자동 적용 | +| | | 향상 | • 속성 기반 접근제어(ABAC) 적용 • 위치, 기기 상태, 시간 등 기반으로 접근권한 실시간 관리 | +| | | 최적화 | • AI 기반으로 사용자와 기기 상태 실시간 분석 및 자동 권한 조정 • 중앙 시스템 관리 • 시스템 명령 시 신뢰도 재산정 • 위험 분석 기반 지속적 접근제어 정책 도입 | +| 시스템 계정 관리 | 설 명 | • 권한 있는 사용자 및 시스템 계정에 대한 접근을 통제하고, 인증 정보를 안전하게 저장·관리 • PAM 시스템을 통해 권한 요청·승인·모니터링을 수행하고, 비밀번호·인증서·MFA 등의 자격 정보를 보호함 • 모든 계정과 자격 증명은 중앙에서 일관되게 관리되며, 비정상적인 행위 탐지와 자동 차단 기능이 포함되어야 함 | | +| | 성 숙 단 계 | 기존 | • PAM 시스템 구축 및 정책 수립 • 자격 증명 수동 관리 • 패스워드 기반 인증 방식 적용 | +| | | 초기 | • PAM 솔루션으로 사용자 접근 모니터링 및 제어 • 자동화된 권한 상승 승인 기술 도입 • 자격 증명 자동 및 중앙 관리 • MFA 등 안전한 인증 방식 적용 | +| | | 향상 | • PAM 솔루션으로 이상행위 탐지 • 생체인증 등 고급 인증 적용 • AI 기반으로 실시간 인증정보 분석 | +| | | 최적화 | • PAM 시스템에 AI 기반 위협 탐지 및 대응 기능 도입 • 비정상 인증 시도 즉각 차단 • 실시간 인증 정책 조정 • 자격 증명 데이터의 중앙 관리 및 시스템 자율화 | + + +기능 +상세 +네트워크 +분리 정책 +설 +명 +- 네트워크를 논리적으로 분리하여 각 영역 간 보안을 강화하고그룹 간 트래픽 이동을 통제 +, +최소 권한 네트워크 접근 원칙을 구현하며트래픽 흐름을 제한하고 위협 확산을 방지함 +, +- +- 보안 정책에 따라 네트워크를 세분화하고그룹 간 이동 시 모니터링검사제어를 통해 안전한 +, +· +· + +통신을 보장해야 함 +성 +숙 +단 +계 +기존 +네트워크 세분화 및 이동 통제 부족 +- +망분리 중심의 경계형 네트워크 모델 적용 +- +초기 +시스템 중요도에 따른 네트워크 분리 +- +제한적 보안 통제 적용으로 네트워크 간 이동 제어 +- +향상 +워크로드별 네트워크 세분화로 보안 정책 개별 적용 +- +- 그룹 간 이동 시 강력한 접근통제 및 인증 적용실시간 보안 감사 및 트래픽 이동 관리 +, +최적화 +그룹 간 이동 시 실시간 분석 및 제어 +- +재인증 없는 그룹 간 이동 +- +실시간 보안 정책 조정 +- +시스템 보안 +및 정책 관리 +설 +명 +- 온프레미스와 클라우드 등 이기종 환경에서 일관된 보안 정책을 유지하고환경 변화에 따라 +, + +보안 정책이 유연하게 조정되도록 관리 +- 다양한 환경 전환 상황에서도 보안 수준을 일정하게 유지하기 위해 정책을 자동화하고 +정책적용 범위를 조정할 수 있어야 함 + +성 +숙 +단 +계 +기존 +온프레미스 환경에서 보안 정책 수립 +- +수동으로 보안 정책 유지 및 관리 +- +초기 +클라우드 환경 전환에 따른 보안 정책의 환경별 수립 +- +정책 자동 적용 +- +향상 +하이브리드 클라우드 환경 전환에 따른 실시간 보안 정책 조정 +- +정책 동적 변경 +- +최적화 +보안 위협에 맞는 자율 정책 적용 +- +정책 관리의 완전 자동화 및 환경 변화 대응 일관성 유지 +- + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 네트워크 분리 정책 | 설 명 | • 네트워크를 논리적으로 분리하여 각 영역 간 보안을 강화하고, 그룹 간 트래픽 이동을 통제 • 최소 권한 네트워크 접근 원칙을 구현하며, 트래픽 흐름을 제한하고 위협 확산을 방지함 • 보안 정책에 따라 네트워크를 세분화하고, 그룹 간 이동 시 모니터링·검사·제어를 통해 안전한 통신을 보장해야 함 | | +| | 성 숙 단 계 | 기존 | • 네트워크 세분화 및 이동 통제 부족 • 망분리 중심의 경계형 네트워크 모델 적용 | +| | | 초기 | • 시스템 중요도에 따른 네트워크 분리 • 제한적 보안 통제 적용으로 네트워크 간 이동 제어 | +| | | 향상 | • 워크로드별 네트워크 세분화로 보안 정책 개별 적용 • 그룹 간 이동 시 강력한 접근통제 및 인증 적용, 실시간 보안 감사 및 트래픽 이동 관리 | +| | | 최적화 | • 그룹 간 이동 시 실시간 분석 및 제어 • 재인증 없는 그룹 간 이동 • 실시간 보안 정책 조정 | +| 시스템 보안 및 정책 관리 | 설 명 | • 온프레미스와 클라우드 등 이기종 환경에서 일관된 보안 정책을 유지하고, 환경 변화에 따라 보안 정책이 유연하게 조정되도록 관리 • 다양한 환경 전환 상황에서도 보안 수준을 일정하게 유지하기 위해 정책을 자동화하고 정책 적용 범위를 조정할 수 있어야 함 | | +| | 성 숙 단 계 | 기존 | • 온프레미스 환경에서 보안 정책 수립 • 수동으로 보안 정책 유지 및 관리 | +| | | 초기 | • 클라우드 환경 전환에 따른 보안 정책의 환경별 수립 • 정책 자동 적용 | +| | | 향상 | • 하이브리드 클라우드 환경 전환에 따른 실시간 보안 정책 조정 • 정책 동적 변경 | +| | | 최적화 | • 보안 위협에 맞는 자율 정책 적용 • 정책 관리의 완전 자동화 및 환경 변화 대응 일관성 유지 | + + +4.3.5 애플리케이션 및 워크로드(Application & Workload) +가지 기능애플리케이션 접근 +애플리케이션 위협 보호 +접근 가능한 애플리케이션 +안전한 +( +, +, +, +애플리케이션배포 + +, 소프트웨어 +애플리케이션 보안 +· +으로 구성되며상세내용은 아래와 같다 +) +, +. +기능 +상세 +애플리케이션 +접근 +설 +명 +애플리케이션 및 시스템 자원에 대한 접근권한을 통합적으로 관리 +- +사용자워크로드시스템에 대한 최소 권한 원칙을 기반으로 접근을 제어하고다양한 조건 +, +, +, +- +위치시간 등을 고려하여 동적으로 권한을 부여함 +( +, +) +권한 부여회수실시간 위험 기반 제어비정상 접근 탐지 등의 자동화가 필수적임 +· +, +, +- +성 +숙 +단 +계 +기존 +- 사용자시스템 권한 수동 관리정적 속성 기반 접근제어 +· +, +초기 +- 워크로드 접근리소스 권한 중앙 집중 관리 +· +향상 +- 컨텍스트 기반 최소 권한 접근정밀 권한 관리 +, +최적화 +- 실시간 위험행동 분석 기반 접근자동 권한 부여회수 및 이상 접근 차단 +· +, +· +애플리케이션 +위협 보호 +설 +명 +애플리케이션과 시스템의 보안 상태를 자동화된 도구와 프로세스를 통해 실시간으로 모니 +- +터링하고보안 이벤트 발생 시 즉각 대응 +, +시스템 변경 사항에 대한 탐지이상 징후 탐색보안 승인 프로세스 자동화 등을 포함함 +, +, +- +성 +숙 +단 +계 +기존 +- 애플리케이션시스템 보안 수동 모니터링이벤트 기록 여부 +· +· +초기 +- 자동 보안 모니터링이벤트 분석시스템 변경 보안 검토 +· +, +향상 +- +기반 이상 탐지보안 승인 프로세스 자동화 +AI +, +최적화 +- 실시간 보안 상태 탐지위협 사전 예측 +· +접근 가능한 +애플리케이션 +설 +명 +사용자가 외부에서 안전하게 조직 네트워크나 애플리케이션에 접근할 수 있도록 제어 +- +- +프록시 +등을 이용하여 기기 및 사용자의 신뢰성을 확인하고 최소 권한 +VPN, +, MFA, IDP +정책에따라 접근을 통제함 + +원격 환경에서도 애플리케이션 기능 제한위험 탐지 및 대응이 가능해야 함 +, +- +성 +숙 +단 +계 +기존 +- +외부 접속 지원애플리케이션 접근제어 제한 +VPN +, +초기 +- 원격 기기 보안 자동 평가접근제어 +· +향상 +- 원격 기기 실시간 모니터링제어맞춤형 보안 정책 수립 +· +, +최적화 +- 접속 상황 기반 동적 정책 적용 +활용 원격 보안 고도화위험 시 기능 제한 +, AI +· + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 애플리케이션 접근 | 설 명 | • 애플리케이션 및 시스템 자원에 대한 접근권한을 통합적으로 관리 • 사용자, 워크로드, 시스템에 대한 최소 권한 원칙을 기반으로 접근을 제어하고, 다양한 조건 (위치, 시간 등)을 고려하여 동적으로 권한을 부여함 • 권한 부여·회수, 실시간 위험 기반 제어, 비정상 접근 탐지 등의 자동화가 필수적임 | | +| | 성 숙 단 계 | 기존 | • 사용자·시스템 권한 수동 관리, 정적 속성 기반 접근제어 | +| | | 초기 | • 워크로드 접근·리소스 권한 중앙 집중 관리 | +| | | 향상 | • 컨텍스트 기반 최소 권한 접근, 정밀 권한 관리 | +| | | 최적화 | • 실시간 위험·행동 분석 기반 접근, 자동 권한 부여·회수 및 이상 접근 차단 | +| 애플리케이션 위협 보호 | 설 명 | • 애플리케이션과 시스템의 보안 상태를 자동화된 도구와 프로세스를 통해 실시간으로 모니 터링하고, 보안 이벤트 발생 시 즉각 대응 • 시스템 변경 사항에 대한 탐지, 이상 징후 탐색, 보안 승인 프로세스 자동화 등을 포함함 | | +| | 성 숙 단 계 | 기존 | • 애플리케이션·시스템 보안 수동 모니터링·이벤트 기록 여부 | +| | | 초기 | • 자동 보안 모니터링·이벤트 분석, 시스템 변경 보안 검토 | +| | | 향상 | • AI 기반 이상 탐지, 보안 승인 프로세스 자동화 | +| | | 최적화 | • 실시간 보안 상태 탐지·위협 사전 예측 | +| 접근 가능한 애플리케이션 | 설 명 | • 사용자가 외부에서 안전하게 조직 네트워크나 애플리케이션에 접근할 수 있도록 제어 • VPN, 프록시, MFA, IDP 등을 이용하여 기기 및 사용자의 신뢰성을 확인하고 최소 권한 정책에 따라 접근을 통제함 • 원격 환경에서도 애플리케이션 기능 제한, 위험 탐지 및 대응이 가능해야 함 | | +| | 성 숙 단 계 | 기존 | • VPN 외부 접속 지원, 애플리케이션 접근제어 제한 | +| | | 초기 | • 원격 기기 보안 자동 평가·접근제어 | +| | | 향상 | • 원격 기기 실시간 모니터링·제어, 맞춤형 보안 정책 수립 | +| | | 최적화 | • 접속 상황 기반 동적 정책 적용, AI 활용 원격 보안 고도화·위험 시 기능 제한 | + + +기능 +상세 +안전한 +애플리케이션 +배포 +설 +명 +조직 내 응용 프로그램의 보안 배포와 식별관리를 체계화 +· +- +코드 검증취약점 검사자동화된 배포 파이프라인보안 정책 검증 도구 도입 +, +, +, +- +모든 애플리케이션의 상태위치소유자사용 목적 등의 정보를 식별하고 통합 관리함 +, +, +, +- +성 +숙 +단 +계 +기존 +- 배포 전 수동 코드 검토취약점 검사보안 가이드 준수기본 접근제어 적용 +· +, +· +- 애플리케이션 인벤토리 수동 목록화기본 정보 기록 +· +초기 +- 보안 내재 자동 배포 구축 +기반 자동 취약점 검사코드 무결성 확인환경 격리 +, CI/CD +· +· +- 자동 인벤토리 도구 통한 애플리케이션 식별관리 +· +향상 +- 배포 전반 모니터링보안 정책 자동 검증이상 활동 대응구성요소 보안 검사 +, +· +· +- 인벤토리에 보안 정보 연계해 애플리케이션 보안 상태 평가관리 +· +최적화 +- 자동 코드 배포권한 제어 +기반 위협 대응 통합중앙 관리자동 보고 +· +, AI +· +· +- +기반 인벤토리 실시간 반영보안 시스템 통합 통한 종합 보안 관리 +AI +, +소프트웨어· +애플리케이션 +보안 +설 +명 +- 개발 초기부터 보안 요소를 내재화하여 안전한 소프트웨어를 개발하고운영 중 발생 가능한 +, + +위협을 식별평가대응 +· +· +기반 자동화된 보안 테스트 +작성공급망 보안 강화 등 포함 +DevSecOps +, SBOM +, +- +위험 평가 프로세스를 통해 잠재적 취약점을 선제적으로 탐지하고 대응 체계를 갖춤 +- +성 +숙 +단 +계 +기존 +- 보안 코딩 표준 적용배포 전 수동 보안 테스트 +, +- 위험 요소 식별문서화위험 관리 계획 수립 +· +, +초기 +- 보안 내재 개발 +도입 +작성 +, DevSecOps +, SBOM +- 위험 평가 프로세스 도입위험 수준 평가 +· +향상 +- 서드파티오픈소스 보안 검사 자동화전반적 +작성 +· +, +SBOM +- 소프트웨어 공급망 보안 강화전주기 자동 위험 관리 +· +최적화 +- 개발 조직 프로세스 격리런타임 소프트웨어 분석 자동화 +, +- +예측 분석 통한 위험 식별맞춤형 공격 대응 +AI +· + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 안전한 애플리케이션 배포 | 설 명 | • 조직 내 응용 프로그램의 보안 배포와 식별·관리를 체계화 • 코드 검증, 취약점 검사, 자동화된 배포 파이프라인, 보안 정책 검증 도구 도입 • 모든 애플리케이션의 상태, 위치, 소유자, 사용 목적 등의 정보를 식별하고 통합 관리함 | | +| | 성 숙 단 계 | 기존 | • 배포 전 수동 코드 검토·취약점 검사, 보안 가이드 준수·기본 접근제어 적용 • 애플리케이션 인벤토리 수동 목록화·기본 정보 기록 | +| | | 초기 | • 보안 내재 자동 배포 구축, CI/CD 기반 자동 취약점 검사·코드 무결성 확인·환경 격리 • 자동 인벤토리 도구 통한 애플리케이션 식별·관리 | +| | | 향상 | • 배포 전반 모니터링, 보안 정책 자동 검증·이상 활동 대응·구성요소 보안 검사 • 인벤토리에 보안 정보 연계해 애플리케이션 보안 상태 평가·관리 | +| | | 최적화 | • 자동 코드 배포·권한 제어, AI 기반 위협 대응 통합·중앙 관리·자동 보고 • AI 기반 인벤토리 실시간 반영, 보안 시스템 통합 통한 종합 보안 관리 | +| 소프트웨어· 애플리케이션 보안 | 설 명 | • 개발 초기부터 보안 요소를 내재화하여 안전한 소프트웨어를 개발하고, 운영 중 발생 가능한 위협을 식별·평가·대응 • DevSecOps 기반 자동화된 보안 테스트, SBOM 작성, 공급망 보안 강화 등 포함 • 위험 평가 프로세스를 통해 잠재적 취약점을 선제적으로 탐지하고 대응 체계를 갖춤 | | +| | 성 숙 단 계 | 기존 | • 보안 코딩 표준 적용, 배포 전 수동 보안 테스트 • 위험 요소 식별·문서화, 위험 관리 계획 수립 | +| | | 초기 | • 보안 내재 개발, DevSecOps 도입, SBOM 작성 • 위험 평가 프로세스 도입·위험 수준 평가 | +| | | 향상 | • 서드파티·오픈소스 보안 검사 자동화, 전반적 SBOM 작성 • 소프트웨어 공급망 보안 강화·전주기 자동 위험 관리 | +| | | 최적화 | • 개발 조직 프로세스 격리, 런타임 소프트웨어 분석 자동화 • AI 예측 분석 통한 위험 식별·맞춤형 공격 대응 | + + +4.3.6 데이터(Data) +가지 기능데이터 목록 관리접근 결정방법데이터 암호화데이터 분류데이터 손실 방지 +( +, +, +, +, +) +으로 구성되며상세내용은 아래와 같다 +, +. +기능 +상세 +데이터 목록 +관리 +설 +명 +- 조직 내 모든 데이터를 식별분류카탈로그를 작성하고데이터 항목별 민감도위험도를 분석 +· +· +, +· +이를 바탕으로 데이터 사용보호관리에 대한 정책을 수립하고 지속적으로 관리함 +· +· +- +자동화된 도구를 통해 위험 데이터를 탐지하고정책 준수 여부를 모니터링함 +, +- +성 +숙 +단 +계 +기존 +데이터 자산의 초기 카탈로그 작성 +- +수동적인 데이터 유형 분류 +- +데이터 위험 평가 문서화 +- +데이터 거버넌스 정책 수립 및 관리에 대한 기본 지침 마련 +- +초기 +자동화된 데이터 카탈로그 도구 도입 +- +데이터 자산 일부 자동 수립 및 분류 +- +위험 수준 평가를 위한 기본 기준 및 지침 마련 +- +정책 준수를 위한 감사와 검토의 정기화 +- +향상 +데이터 민감도 및 위험 수준 평가 위한 분석 도구 마련 +- +데이터 자동화 및 보호 정책 적용 +- +데이터 사용 패턴 분석 +- +정책 준수 실시간 모니터링 +- +최적화 +기반 실시간 분석 +AI +- +데이터 카탈로그와 보안 시스템 간의 통합 관리 +- +조직 전체 시스템과의 데이터 거버넌스 통합 및 일관된 데이터 관리 가능 +- +접근 +결정방법 +설 +명 +- 데이터를 보호하기 위해사용자장치 +등 주체의 속성에 따라 적절한 데이터 접근권한을 +, +· +·NPE + +부여하고 통제 +- 최소 권한 원칙을 기반으로 접근을 제한하고정책 기반의 접근통제를 구성하며실시간으로 +, +, + +권한 조정을 수행함 +성 +숙 +단 +계 +기존 +데이터 접근 정책 수립 +- +접근권한 수동 부여 +- +초기 +중앙 집중식 접근제어 시스템 도입 +- +최소 권한 기반의 데이터 접근 여부 결정 +- +향상 +기반 컨텍스트 접근권한 관리 구현 +ABAC +- +최적화 +기반 실시간 권한 조정으로 데이터 접근제어 최소화 +AI +- + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 데이터 목록 관리 | 설 명 | • 조직 내 모든 데이터를 식별·분류·카탈로그를 작성하고, 데이터 항목별 민감도·위험도를 분석 • 이를 바탕으로 데이터 사용·보호·관리에 대한 정책을 수립하고 지속적으로 관리함 • 자동화된 도구를 통해 위험 데이터를 탐지하고, 정책 준수 여부를 모니터링함 | | +| | 성 숙 단 계 | 기존 | • 데이터 자산의 초기 카탈로그 작성 • 수동적인 데이터 유형 분류 • 데이터 위험 평가 문서화 • 데이터 거버넌스 정책 수립 및 관리에 대한 기본 지침 마련 | +| | | 초기 | • 자동화된 데이터 카탈로그 도구 도입 • 데이터 자산 일부 자동 수립 및 분류 • 위험 수준 평가를 위한 기본 기준 및 지침 마련 • 정책 준수를 위한 감사와 검토의 정기화 | +| | | 향상 | • 데이터 민감도 및 위험 수준 평가 위한 분석 도구 마련 • 데이터 자동화 및 보호 정책 적용 • 데이터 사용 패턴 분석 • 정책 준수 실시간 모니터링 | +| | | 최적화 | • AI 기반 실시간 분석 • 데이터 카탈로그와 보안 시스템 간의 통합 관리 • 조직 전체 시스템과의 데이터 거버넌스 통합 및 일관된 데이터 관리 가능 | +| 접근 결정방법 | 설 명 | • 데이터를 보호하기 위해, 사용자·장치·NPE 등 주체의 속성에 따라 적절한 데이터 접근권한을 부여하고 통제 • 최소 권한 원칙을 기반으로 접근을 제한하고, 정책 기반의 접근통제를 구성하며, 실시간으로 권한 조정을 수행함 | | +| | 성 숙 단 계 | 기존 | • 데이터 접근 정책 수립 • 접근권한 수동 부여 | +| | | 초기 | • 중앙 집중식 접근제어 시스템 도입 • 최소 권한 기반의 데이터 접근 여부 결정 | +| | | 향상 | • ABAC 기반 컨텍스트 접근권한 관리 구현 | +| | | 최적화 | • AI 기반 실시간 권한 조정으로 데이터 접근제어 최소화 | + + +기능 +상세 +데이터 +암호화 +설 +명 +- 저장 및 전송 중인 데이터의 무결성과 기밀성을 보호하기 위해 암호화를 수행하고접근 +, +권한을 통제 +정해진 암호화 정책과 권한 체계를 기반으로 데이터 보호를 실현 +- +성 +숙 +단 +계 +기존 +데이터 수동 암호화 +- +암호화 정책 수립 +- +초기 권한 관리 체계 수립으로 데이터 보호 +- +초기 +자동화 도구로 중요 데이터 암호화 +- +중앙집중식 권한 관리 시스템 도입 +- +향상 +고급 암호화 기술 도입 및 권한 관리 시스템과의 통합 관리 +- +과 +결합으로 정밀 권한 관리 구현 +RBAC +ABAC +- +최적화 +기반 암호화 및 권한 관리로 데이터 보호 최적화실시간 권한 조정 +AI +, +- +데이터 +분류 +설 +명 +조직 내 데이터를 민감도중요도유형 등에 따라 체계적으로 분류하여 보안 정책을 적용 +, +, +- +데이터 식별라벨링보존 기간 및 삭제 기준 등을 명확히 하여 적절한 보호 조치를 구현함 +· +, +- +분류 기준에 따라 접근권한 및 관리 체계가 자동으로 적용되어야 함 +- +성 +숙 +단 +계 +기존 +라벨링 및 태그 지정 지침 수립 +- +일관된 데이터 분류 체계 마련 +- +초기 +라벨링 및 태그 수동 지정 +- +민감 데이터에 특수 라벨 및 보안 정책 차등 적용 +- +향상 +자동화된 라벨링 및 태그 지정 도구로 자산의 자동 분류식별 +/ +- +타 보안 시스템과 연계한 데이터 보호 +- +최적화 +고급 메타데이터 관리 도구로 라벨링 및 태그 지정 프로세스 적용 +- +기반으로 데이터 환경 변화에 실시간 대응하여 자동 분류 +AI +- +데이터 +손실 방지 +설 +명 +민감한 데이터의 무단 유출과 접근을 차단하기 위한 보호 기술 및 정책 +- +사전 승인된 +도구를 활용해 데이터 속성 기반 정책 적용 및 모니터링 수행 +DLP +- +조직 내 업무에 영향 없도록 모니터링 전용모드부터 시작하여 점진적으로 통합 +' +' +- +성 +숙 +단 +계 +기존 +정책 수립 및 수동 평가 +DLP +- +도입 위한 기업 내 범위 지정 +DLP +- +초기 +도구로 주요 데이터 유출 경로 모니터링 +DLP +- +정책 중앙 관리 +DLP +- +솔루션의 모니터링 모드 사용 +DLP +- +향상 +시스템의 전면 도입 및 실시간 데이터 보호유출 방지 +DLP +, +- +솔루션의 방지 모드 사용 +DLP +- +최적화 +기반으로 데이터 유출 위험의 실시간 예측 및 차단 +AI +- +데이터 환경 변화에 따른 보안 정책 자동 최적화 +- + +| 기능 | 상세 | | | +| --- | --- | --- | --- | +| 데이터 암호화 | 설 명 | • 저장 및 전송 중인 데이터의 무결성과 기밀성을 보호하기 위해 암호화를 수행하고, 접근 권한을 통제 • 정해진 암호화 정책과 권한 체계를 기반으로 데이터 보호를 실현 | | +| | 성 숙 단 계 | 기존 | • 데이터 수동 암호화 • 암호화 정책 수립 • 초기 권한 관리 체계 수립으로 데이터 보호 | +| | | 초기 | • 자동화 도구로 중요 데이터 암호화 • 중앙집중식 권한 관리 시스템 도입 | +| | | 향상 | • 고급 암호화 기술 도입 및 권한 관리 시스템과의 통합 관리 • RBAC과 ABAC 결합으로 정밀 권한 관리 구현 | +| | | 최적화 | • AI 기반 암호화 및 권한 관리로 데이터 보호 최적화, 실시간 권한 조정 | +| 데이터 분류 | 설 명 | • 조직 내 데이터를 민감도, 중요도, 유형 등에 따라 체계적으로 분류하여 보안 정책을 적용 • 데이터 식별·라벨링, 보존 기간 및 삭제 기준 등을 명확히 하여 적절한 보호 조치를 구현함 • 분류 기준에 따라 접근권한 및 관리 체계가 자동으로 적용되어야 함 | | +| | 성 숙 단 계 | 기존 | • 라벨링 및 태그 지정 지침 수립 • 일관된 데이터 분류 체계 마련 | +| | | 초기 | • 라벨링 및 태그 수동 지정 • 민감 데이터에 특수 라벨 및 보안 정책 차등 적용 | +| | | 향상 | • 자동화된 라벨링 및 태그 지정 도구로 자산의 자동 분류/식별 • 타 보안 시스템과 연계한 데이터 보호 | +| | | 최적화 | • 고급 메타데이터 관리 도구로 라벨링 및 태그 지정 프로세스 적용 • AI 기반으로 데이터 환경 변화에 실시간 대응하여 자동 분류 | +| 데이터 손실 방지 | 설 명 | • 민감한 데이터의 무단 유출과 접근을 차단하기 위한 보호 기술 및 정책 • 사전 승인된 DLP 도구를 활용해 데이터 속성 기반 정책 적용 및 모니터링 수행 • 조직 내 업무에 영향 없도록 '모니터링 전용' 모드부터 시작하여 점진적으로 통합 | | +| | 성 숙 단 계 | 기존 | • DLP 정책 수립 및 수동 평가 • DLP 도입 위한 기업 내 범위 지정 | +| | | 초기 | • DLP 도구로 주요 데이터 유출 경로 모니터링 • DLP 정책 중앙 관리 • DLP 솔루션의 모니터링 모드 사용 | +| | | 향상 | • DLP 시스템의 전면 도입 및 실시간 데이터 보호, 유출 방지 • DLP 솔루션의 방지 모드 사용 | +| | | 최적화 | • AI 기반으로 데이터 유출 위험의 실시간 예측 및 차단 • 데이터 환경 변화에 따른 보안 정책 자동 최적화 | + + +제장 +성숙도 수준 평가를 +위한 체크리스트 해설 +식별자신원 +1. +· +기기 및 엔드포인트 +2. +네트워크 +3. +시스템 +4. +애플리케이션 및 워크로드 +5. +데이터 +6. +가시성 및 분석 +7. +자동화 및 통합 +8. + +식별자 관리 +항목 +사용자 인벤토리 +1.1.1 +설명 +사용자 인벤토리는 시스템에 접근하는 모든 사용자와 그들의 권한을 기록하고 관리하는 시스템이다. +이 기능은 사용자에 대한 정확하고 최신 정보를 제공하여 적절한 접근제어를 가능하게 한다. +체크리스트 +기존 +사용자 목록에 대한 문서화가 되어 있는가? +초기 +사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? +향상 +자동화된 인벤토리 관리 기구가 도입되어 있는가? +비정상적인 사용자 활동에 대한 탐지가 가능한가? +최적화 +기반 사용자 행동에 따른 관리가 되는가 +AI +? +인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? +세부 설명 +기존 +사용자 목록에 대한 문서화가 되어 있는가? + +시스템 접근이 가능한 사용자 목록을 수집하고 문서화하는 단계로주로 수동 방식으로 텍스트 문서나 +, + +스프레드시트를 활용해 목록을 관리한다사용자 +소속이메일 등 기본 정보만 포함되며변경사항 +. +ID, +, +, + +반영이 즉각적으로 이루어지기 어려운 상태이다실무 환경에서 사용자 목록에 대한 문서화는 조직 +. +소속의 사용자와 외부 협력업체 등 조직의 리소스에 접근 가능한 사용자를 식별하고 문서화하여 이를 +활용해 수동으로 보안 정책을 부여할 수 있다. +초기 +사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? + +사용자에게 부여된 역할 +및 권한 수준을 기반으로 정형화된 인벤토리가 구성되는 단계이다 +(Role) +. +시스템별 접근권한 +업무 및 역할조직 구조 등이 반영되며변경 이력과 정기적 검토가 포함된다 +, +, +, +. +사용자 인벤토리 역할을 할 수 있는 인벤토리 관리 기구 +등를 활용하여 사용자 +(Directory, HRM, IAM +) + +목록을 관리하며사용자계정별로 역할 +을 부여하여 시스템 기반의 보안 정책을 부여할 수 있다 +, +( +) +(Role) +. +향상 +자동화된 인벤토리 관리 기구가 도입되어 있는가? + +사용자 정보가 자동으로 수집갱신되는 구조로 +인벤토리가 다이렉트 서비스 +인증 시스템 +업무 +, +, +, +- +시스템등과 연동되어 실시간으로 계정을 관리한다입사 또는 퇴사 등 계정 변경 사항 발생에 따라 + +. +계정이 자동 생성삭제되고 역할에 맞는 권한을 자동으로 부여해야 한다사용자 정보의 변경이 생길 +, +. +시 + + +### 1. 식별자 + +신원 +⦁ + +| 항목 | 1.1.1 사용자 인벤토리 | | +| --- | --- | --- | +| 설명 | 사용자 인벤토리는 시스템에 접근하는 모든 사용자와 그들의 권한을 기록하고 관리하는 시스템이다. 이 기능은 사용자에 대한 정확하고 최신 정보를 제공하여 적절한 접근제어를 가능하게 한다. | | +| 체크리스트 | 기존 | 사용자 목록에 대한 문서화가 되어 있는가? | +| | 초기 | 사용자 역할에 따른 상세 인벤토리가 구축되어 있는가? | +| | 향상 | 자동화된 인벤토리 관리 기구가 도입되어 있는가? | +| | | 비정상적인 사용자 활동에 대한 탐지가 가능한가? | +| | 최적화 | AI 기반 사용자 행동에 따른 관리가 되는가? | +| | | 인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? | + + +인벤토리 관리 기구 +등 +연동을 통하여 자동화된 연계를 수행한다 +예를 들어 +(HRM, Directory, IAM +) +. +최초 입사자가 인사관리시스템 +에 등록되면 해당 사용자 정보를 통합계정 및 접근관리 +(HRM) +시스템에 자동으로 전달하여 기본적인 보안 정책을 부여해야 한다 +(Directory, IAM, ICAM) +. +비정상적인 사용자 활동에 대한 탐지가 가능한가? + +상세 인벤토리 정보사용자 로그인 시간위치정보디바이스 맥주소 등를 분석 +( +, +, +) +한 후 사용자 이상행위 +평소와 +( +다른 접속시간지역접근 요청 등및 예외적인 권한 사용장기간 미사용 계정을 식별해야 + +, +, +, +) +, + +한다사용자 활동에 대한 비정상적인 탐지를 할 수 있는 시스템 +등을 통해 +. +(IAM, ICAM, SIEM, SOAR +) + +사용자 인벤토리 정보의 정상 행위 기준선을 설정하고 특정 이상 행위를 시나리오 +플레이북 등을 +, +기반으로 탐지할 수 있어야 한다. +최적화 + +기반 사용자 행동에 따른 관리가 되는가 +AI +? + +기반 분석 엔진이 사용자 행동을 학습하여 이상 패턴 감지 및 리스크 수준에 따라 자동 조치를 +AI +수행하는 단계이다정해진 시간장소 외 로그인이나 비정상 권한 상승 요청 등을 실시간으로 탐지 +. +, +하여 차단하거나 관리자 알림을 발생시킨다 +기반의 사용자 및 엔티티 행동 분석 +엔진을 +. ML/AI +(UEBA) + +활용하여 각 사용자의 정상적인 활동 패턴을 지속적으로 학습하고이상 행위 발생 시 관리자의 개입 +, + +없이도 실시간으로 접근을 차단하거나 추가 인증 등을 강제할 수 있다. +인벤토리가 통합되어 사용자 및 권한 관리 최적화가 되어 있는가? + +사용자 인벤토리가 전사 모든 시스템 +과 완벽하게 통합되어 +(On-premise, Cloud, SaaS) +단일 플랫폼에서 +, +사용자계정에 대한 권한계정 상태활동 기록 등을 통합관리하고 제어한다 +( +) +, +, +. 통합된 단일 플랫폼을 +기반으로사용자계정별로 사용하지 않는 권한을 자동으로 회수하거나 유사 직무 그룹과의 비교를 +, +( +) +통해 권한을 최적화하도록 제안하는 등 사용자 및 권한 관리를 자동화하여 대응할 수 있다. + +항목 +연계 및 사용자 자격 증명 +1.1.2 ID +설명 +여러 시스템 간의 사용자 자격 증명과 인증을 통합하는 프로세스로처음에는 +생명주기 관리 +, +ID +(Identity Lifecycle Management, ILM) 프로세스를 표준화하고 +표준 조직 +솔루션과 + +, +IDP/IDM +통합하는데 초점을 맞춘다 + +. +이를 완료한 후단일 솔루션이나 +연합을 통해 엔터프라이즈 +프로세스솔루션을 구축 +, +ID +ILM +/ +하는 것으로 전환된다. +성숙단계 +기존 +사용자 자격 증명에 대한 +연계 솔루션이 적용되어 있는가 +ID +? +초기 +여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? +향상 +통합 관리 시스템이 구축되어 있는가 +ID +? +최적화 +글로벌 수준의 +연계 솔루션이 적용되어 있는가 +ID +? +세부 설명 +기존 +사용자 자격 증명에 대한 +연계 솔루션이 적용되어 있는가 +ID +? + +제공자 +와 사용자 디렉터리 간 연계를 통해 기본 인증 방식을 통합하여 하나의 계정을 통해 +ID +(IDP) +여러 시스템에 로그인할 수 있다 +인증 정보는 중앙에서 관리되지만 +사용자 자격의 세분화나 권한 +. +, +제어는 미흡한 단계이다 +실무 환경에서 +연계의 예시로 +와 +솔루션과 연동하여 +. +ID +, Directory +SSO +, +사용자가 +계정 로그인 시 내부 시스템 +그룹웨어 등까지 접근할 수 있도록 사용자 자격 +Directory +(ERP, +) + +증명 정보를 연계할 수 있다 +기존 단계에서의 +연계는 관련된 솔루션 적용 여부만 확인한다 +. ‘ +‘ +ID +. +초기 +여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? + +인증 프로토콜 표준화를 바탕으로 주요 내부 시스템 +그룹웨어 등 +간 사용자 계정 정보를 연동 +(ERP, +) +, +통합 로그인 환경을 구현한다 +내부 시스템뿐만 아니라 +등의 외부 시스템까지 인증 방식을 +. +SaaS +연동하여다양한 인증 요청을 하나의 자격으로 처리한다실무 환경에서는 +등과 같은 + +. +SAML, OAuth +표준 인증 프로토콜을 기반으로사용자 자격 증명에 활용되는 다양한 시스템 +, +(HRM, Directory, IAM, +등 +간의 연동을 수행할 수 있다 +ICAM +) +. +향상 + +통합 관리 시스템이 구축되어 있는가 +ID +? + +다양한 +제공자를 통합하여 내외부 사용자의 구분 없이 하나의 중앙화된 +관리 시스템을 통해 +ID +/ +ID +모든 사용자 인증 흐름을 제어하고 전사 계정 관리를 수행한다 +시스템 인증 시 암호화가 적용된 +. +프로토콜을사용하여 보안성을 강화한다실무 환경에서는 +등과 같은 표준 인증 프로토콜을 + +. +SAML, OAuth + +기반으로사용자 자격 증명에 활용되는 다양한 시스템 +등 +간의 연동을 +, +(HRM, Directory, IAM, ICAM +) +수행할 수 있다. + +| 항목 | 1.1.2 ID 연계 및 사용자 자격 증명 | | +| --- | --- | --- | +| 설명 | 여러 시스템 간의 사용자 자격 증명과 인증을 통합하는 프로세스로, 처음에는 ID 생명주기 관리 (Identity Lifecycle Management, ILM) 프로세스를 표준화하고, 표준 조직 IDP/IDM 솔루션과 통합하는 데 초점을 맞춘다. 이를 완료한 후, 단일 솔루션이나 ID 연합을 통해 엔터프라이즈 ILM 프로세스/솔루션을 구축 하는 것으로 전환된다. | | +| 성숙단계 | 기존 | 사용자 자격 증명에 대한 ID 연계 솔루션이 적용되어 있는가? | +| | 초기 | 여러 시스템 간 사용자 자격 증명에 대한 연동이 되어 있는가? | +| | 향상 | ID 통합 관리 시스템이 구축되어 있는가? | +| | 최적화 | 글로벌 수준의 ID 연계 솔루션이 적용되어 있는가? | + + +최적화 +글로벌 수준의 +연계 솔루션이 적용되어 있는가 +ID +? + +지역 분산 환경다양한 클라우드외부 파트너까지 모든 자격 증명이 단일 정책을 기반으로 제어되는 +, +, + +글로벌 단위의 +연계 환경을 구축한다 +이러한 정책은 전사 모든 시스템 환경을 고려해야 하며 +ID +. +, +환경 변화에 따라 지속적으로 업데이트된다실무 환경에서는 본사뿐만 아니라 각기 다른 인프라와 +. +정책을 가진 해외 지사그리고 외부 협력사 사용자까지 단일 +플랫폼 +등안에서 관리 범위를 +, +ID +(ICAM +) + +확장하여 식별하고 일관된 보안 정책을 적용할 수 있다 +이를 통해 글로벌 거점이나 파트너사가 +. +자체적으로관리하던 자격 증명까지 중앙 정책 엔진을 통해 제어함으로써 +전사적인 제로트러스트 + +, +보안 수준을 유지하고 관리 복잡성을 줄일 수 있다. + +인증 +항목 +다중인증 +1.2.1 +(MFA) +설명 +사용자가 시스템에 접근하기 위해 두 개 이상의 인증 방법을 요구하는 보안 조치로 +사용자 +, +관리 중앙화를 가능하게 하도록 다중 요소 인증 +과 아이덴티티 제공자 +를 +(MFA) +(Identity Provider) + +도입하는데 초점을 맞춘다. +성숙도 수준이 높아짐에 따라 대체 가능하고 유연한 +방식을 적용하여 내부 사용자와 외부 +MFA + +사용자에게 접근을 제공하는 데 사용될 수 있도록 한다. +성숙단계 +기존 +패스워드와 단순한 +이메일가 같이 적용되어 있는가 +MFA(SMS, +) +? +초기 +인증 앱하드웨어 토큰 등 다양한 +가 구현되어 있는가 +, +MFA +? +기반 인증 기법이 적용되어 있는가 +FIDO +? +향상 +상황에 따른 맞춤형 +가 지원 가능한가 +MFA +? +컨텍스트단말 위치네트워크접속 시간 등를 고려한 +인증 방식이 적용되어 +( +, +, +) +ID + +있는가? +최적화 +비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? +세부 설명 +기존 +패스워드와 단순한 +이메일가 같이 적용되어 있는가 +MFA(SMS, +) +? + +가장 기본적인 형태의 +적용 단계로 +단일 시스템이나 솔루션에서 자체적인 +기능을 통해 +MFA +, +MFA +비밀번호 외의 +이메일 코드 등의 차 인증을 수행한다 +실무 환경에서는 그룹웨어나 +ID/ +SMS, +. +SSL- +등 특정 시스템에 접속할 때 +해당 시스템이 자체적으로 제공하는 +또는 이메일 기반의 +VPN +, +SMS +를 추가로 입력하는 상태를 의미한다이는 전사적으로 통합 관리되지 않고 개별 시스템 단위로 +OTP +. +적용되며비교적 보안 강도가 낮은 인증 방식에 해당한다 +, +. +초기 +인증 앱하드웨어 토큰 등 +, +다양한 +가 구현되어 있는가 + +MFA +? + +인증 앱하드웨어 토큰 등 다양한 인증 수단을 제공하여 보안을 강화한다또한 +적용 시스템 +, +. +MFA +, +필요 상황계정에 따른 인증 방식 차별화 등의 정책을 수립하고 모든 시스템에서 동일한 +요구 +, +MFA +사항이 적용되도록 표준화한다 +솔루션을 활용하여 동일한 +시스템을 통해서 앱하드웨어 +. MFA +MFA +, +토큰 등을 활용할 수 있다. + +기반 인증 기법이 적용되어 있는가 +FIDO +? + +는 신속한 온라인 인증을 뜻하는 말 그대로 온라인 환경에서 +비밀번호 없이 생체인식 +FIDO +‘ +’ +ID, +기술을 +활용하여 간편하고 보안성 높은 사용자 인증 서비스를 제공하기 위한 기술이다 + +. +도입 단계로 지문홍채얼굴 인식 등 다양한 생체정보를 활용하여 인증을 수행한다 +Passwordless +, +, +. + +| 항목 | 1.2.1 다중인증(MFA) | | +| --- | --- | --- | +| 설명 | 사용자가 시스템에 접근하기 위해 두 개 이상의 인증 방법을 요구하는 보안 조치로, 사용자 관리 중앙화를 가능하게 하도록 다중 요소 인증(MFA)과 아이덴티티 제공자(Identity Provider)를 도입하는데 초점을 맞춘다. 성숙도 수준이 높아짐에 따라 대체 가능하고 유연한 MFA 방식을 적용하여 내부 사용자와 외부 사용자에게 접근을 제공하는 데 사용될 수 있도록 한다. | | +| 성숙단계 | 기존 | 패스워드와 단순한 MFA(SMS, 이메일)가 같이 적용되어 있는가? | +| | 초기 | 인증 앱, 하드웨어 토큰 등 다양한 MFA가 구현되어 있는가? | +| | | FIDO 기반 인증 기법이 적용되어 있는가? | +| | 향상 | 상황에 따른 맞춤형 MFA가 지원 가능한가? | +| | | 컨텍스트(단말 위치, 네트워크, 접속 시간 등)를 고려한 ID 인증 방식이 적용되어 있는가? | +| | 최적화 | 비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? | + + +향상 +상황에 따른 맞춤형 +가 지원 가능한가 +MFA +? + +기기위치 +등 접속 환경에 따라 +를 동적으로 적용한다예를 들어사내 네트워크에서 접속 시 +, +, IP +MFA +. +, + +간단한 인증만을 수행하지만 +외부 네트워크에서 접속 시 강화된 +인증을 적용하는 등 특정 +, +MFA +상황에맞는 조건부 +정책을 적용하여 보안성을 향상시킨다 + +MFA +. +컨텍스트단말 위치네트워크접속 시간 등를 고려한 +인증 방식이 적용되어 있는가 +( +, +, +) +ID +? + +상황에 따른 맞춤형 +가 사용자 경험에 초점을 두었다면컨텍스트 기반 +인증 방식은 보안성 +MFA +, +ID +향상에 초점을 둔다 +이는 단말 위치 +네트워크 +접속 시간 등 다양한 컨텍스트 정보를 바탕으로 +. +, +, +, +평소와다른 접속 환경이 감지될 경우 인증 수단을 강화하거나 추가 인증을 요구하는 등 동적인 + +인증을수행하는 것을 의미한다예를 들어국내에서만 접속하던 사용자가 해외 +로 로그인을 + +. +, +IP +시도할 +경우이를 비정상적인 컨텍스트로 판단하여 추가 인증을 요청하는 방식이 이에 해당한다 +, +. +최적화 +비정상적 로그인 시도를 실시간으로 탐지하고 대응 가능한가? + +시스템과 연계하여 비정상적인 로그인 시도를 실시간으로 분석하고 대응한다이는 향상 +SIEM/SOAR +. +' +' +단계의 컨텍스트 기반 인증이 확장된 영역으로 +등의 기술을 활용해 사용자의 평상시 로그인 +, UEBA +패턴접속 시간위치사용 기기 등을 학습하고 기준선을 설정한다이후 특정 시나리오예시서울 +( +, +, +) +. +( +: +에서 로그인 후 +분 이내 뉴욕에서 로그인 시도나 동일 계정으로 여러 지역에서 동시 접속을 +) +시도하는등의 이상 행위가 탐지되면 +플레이북과 연동하여 관리자 개입 없이 자동으로 해당 + +, SOAR +세션을 강제 종료하거나 즉각적인 +재인증을 요구하는 등 자동화된 실시간 위협 대응을 수행한다 +MFA +. + +항목 +지속 인증 +1.2.2 +설명 +제로트러스트가 +도입되면 +지속적인 +속성 +기반 +인증(Continuous +Attribute-Based +으로 체계적으로 이동할 것이다 +Authentication) +. +초기에는 기존의 단일 인증을 조직에서 승인된 +와 사용자 및 그룹을 기준으로 표준화하는 데 +IDP + +초점을 맞추고 +두 번째 단계에서는 시간 기반의 규칙 기반 인증을 추가하며 +규칙적으로 +, +, +응용소프트웨어 활동 및 요청된 권한에 기반한 지속적인 인증으로 발전하게 된다. +- +성숙단계 +기존 +세션 기반 인증이 수행되는가? +사용자의 행동 및 접속 상태 모니터링이 가능한가? +초기 +이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? +향상 +동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? +최적화 +이상 행위 발생 시 자동 재인증 요구세션 종료 등 인증에 대한 지속적 검증이 +, + +실시간으로 가능한가? +세부 설명 +기존 +세션 기반 인증이 수행되는가? + +단순한 연결 기반이 아닌 세션 기반으로 인증을 수행하여 해당 세션 정보를 확인할 수 있다세션이 +. +활성화되어 있는 동안은 사용자 신원을 별도로 확인하지 않는 방식으로 +한 번의 로그인 후에는 +, +별도의추가 인증 없이 시스템 접근이 가능한 형태이다 + +. +사용자의 행동 및 접속 상태 모니터링이 가능한가? + +접속한 세션을 기반으로 사용자의 +접속 시간 등 기본적인 접속 상태를 기록하고 모니터링이 +IP, +가능하다. 단순 로그 수집 단계로 이상 징후 감지 등의 고도화 기능은 적용되지 않은 상태이다단일 + +. + +시스템방화벽 +등에서 세션에 대한 모니터링이 가능하다 +( +, SSO +) +. +초기 +이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? + +사용자 접속 환경에서 +주소 +주소디바이스 변경 등 사전에 정의된 비정상 행위가 감지되면 +IP +, MAC +, +, +단일 시스템방화벽 +등 +혹은 +전용 솔루션에서 세션 유지 중간에도 추가 +인증을 +( +, SSO +) +MFA +MFA +요구하여보안성을 강화한다 + +. +향상 +동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? + +시스템 등과 연계하여 사용자 실시간 데이터를 수집하고 분석할 수 있는 시스템을 구축한 +SIEM/SOAR + +단계이다네트워크 변경예시유선에서 무선으로 전환이 감지될 때 자동으로 재인증을 요청하거나 +. +( +: +) +, +사용자 환경 변경예시다른 위치에서의 접속 시도 +시 강화된 인증 또는 소명 처리를 적용하는 등 +( +: +) +사용자의 실시간 인증 상태를 바탕으로 동적 인증을 수행한다. + +| 항목 | 1.2.2 지속 인증 | | +| --- | --- | --- | +| 설명 | 제로트러스트가 도입되면 지속적인 속성 기반 인증(Continuous Attribute-Based Authentication)으로 체계적으로 이동할 것이다. 초기에는 기존의 단일 인증을 조직에서 승인된 IDP와 사용자 및 그룹을 기준으로 표준화하는 데 초점을 맞추고, 두 번째 단계에서는 시간 기반의 규칙 기반 인증을 추가하며, 규칙적으로 응용∙소프트웨어 활동 및 요청된 권한에 기반한 지속적인 인증으로 발전하게 된다. | | +| 성숙단계 | 기존 | 세션 기반 인증이 수행되는가? | +| | | 사용자의 행동 및 접속 상태 모니터링이 가능한가? | +| | 초기 | 이상행위가 탐지되면 세션 중간에 추가 인증하는 시스템이 도입되어 있는가? | +| | 향상 | 동적 인증 기술을 토대로 실시간으로 인증 상태에 대한 조정이 가능한가? | +| | 최적화 | 이상 행위 발생 시 자동 재인증 요구, 세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가? | + + +최적화 +이상 행위 발생 시 자동 재인증 요구세션 종료 등 인증에 대한 지속적 검증이 실시간으로 가능한가 +, +? + +사용자의 모든 접속과 권한 요청을 지속적으로 모니터링하고이상 행위가 감지되면 자동화된 인증 +, +관리 체계를 바탕으로 세션을 자동 종료하거나 즉각 재인증을 요구하는 등의 동적 인증을 수행한다. +머신러닝과 +등의 기술을 활용하여 이상 행위에 대한 시나리오를 자동으로 업데이트하여 재인증 +AI +절차나 세션 종료 등에 대한 조치를 동적으로 반영할 수 있다. + +위험도 평가 +항목 +통합 +플랫폼 +1.3.1 +ICAM +설명 +통합 +플랫폼은 식별자 +자격 증명 +접근 +ICAM(Identity, Credential, and Access Management) +, +, +관리 기능을 중앙에서 통합하여 관리하는 시스템이다. +엔터프라이즈 수준의 식별자 관리 및 공개 키 인프라 +시스템을 활용하여 네트워크 전반에 +(PKI) +걸쳐 사용자 +관리자 및 +시 식별자를 추적하고 +접근이 필요한 자와 +, +NPE(Non-Person Entity) +, +적절한 권한을 가진 자로 제한되도록 보장하여야 한다. +조직은 자격 증명 관리 시스템식별자 거버넌스 및 관리 도구접근 관리 도구를 통해 접근권한이 +, +, + +필요하고 적절한지 검증하여야 한다. +성숙단계 +기존 +시스템이 구축되어 있는가 +ICAM +? +초기 +시스템 기반 중앙 집중 관리 및 모니터링이 되는가 +ICAM +? +사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? +사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입되었는가? +향상 +다양한 보안 기술 및 시스템 통합으로 +플랫폼이 안정화되었는가 +ICAM +? +플랫폼이 자동화되어 있는가 +ICAM +? +최적화 +기반의 +플랫폼을 통해 보안 강화가 이루어지는가 +AI +ICAM +? +실시간 분석을 통한 +위험 평가가 이루어지는가 +ID +? +세부 설명 +기존 + +시스템이 구축되어 있는가 +ICAM +? + +시스템이 도입되기 전 단계로일반적으로 +솔루션 등의 개별 도구를 통해서 +ICAM +, +Directory, EAM, IM +사용자를 관리하며 기본적인 수준의 자격 증명과 계정 및 권한 관리가 수행된다최소한의 사용자 +. +/ +자격 관리만 수행하는 수준으로 중앙집중화 및 통합관리 기능은 제한적이다. +초기 + +시스템 기반 중앙 집중 관리 및 모니터링이 되는가 +ICAM +? + +플랫폼이 중앙 집중화되기 시작하는 단계로 +등 시스템을 통해 모든 사용자의 계정과 +ICAM +, IAM +접근권한을단일 플랫폼에서 관리하며 모니터링을 수행한다 +모든 로그인 +인증 +권한 부여 요청이 + +. +, +, +중앙 플랫폼을 거치게 되어 보다 일관된 정책 적용과 로그 확보가 가능하다. +사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? + +등 시스템에서 정의된 계정별 접근권한을 바탕으로 통합인증 +시스템을 활용해 사용자를 +IAM +(SSO) +인증한다이 단계에서는 인증 방식 +적용 기준비밀번호 정책 등과 권한 부여 방식에 대한 기업 +. +(MFA +, +) + +내 표준 정책이 수립 및 문서화 되어 있으며이를 통해 모든 사용자에게 일관된 접근 정책을 적용하기 +, + +시작한다. + +| 항목 | 1.3.1 통합 ICAM 플랫폼 | | +| --- | --- | --- | +| 설명 | 통합 ICAM(Identity, Credential, and Access Management) 플랫폼은 식별자, 자격 증명, 접근 관리 기능을 중앙에서 통합하여 관리하는 시스템이다. 엔터프라이즈 수준의 식별자 관리 및 공개 키 인프라(PKI) 시스템을 활용하여 네트워크 전반에 걸쳐 사용자, 관리자 및 NPE(Non-Person Entity) 시 식별자를 추적하고, 접근이 필요한 자와 적절한 권한을 가진 자로 제한되도록 보장하여야 한다. 조직은 자격 증명 관리 시스템, 식별자 거버넌스 및 관리 도구, 접근 관리 도구를 통해 접근권한이 필요하고 적절한지 검증하여야 한다. | | +| 성숙단계 | 기존 | ICAM 시스템이 구축되어 있는가? | +| | 초기 | ICAM 시스템 기반 중앙 집중 관리 및 모니터링이 되는가? | +| | | 사용자 인증 및 접근 관리에 대한 정책이 표준화되어 있는가? | +| | | 사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입되었는가? | +| | 향상 | 다양한 보안 기술 및 시스템 통합으로 ICAM 플랫폼이 안정화되었는가? | +| | | ICAM 플랫폼이 자동화되어 있는가? | +| | 최적화 | AI 기반의 ICAM 플랫폼을 통해 보안 강화가 이루어지는가? | +| | | 실시간 분석을 통한 ID 위험 평가가 이루어지는가? | + + +사용자 및 권한 관리에 대한 기본적인 위험도 평가가 도입되었는가? + +사용자 접속 위치기기 정보 등 +을 통해 모니터링되고 있는 정보를 바탕으로 사용자 및 권한 +, +ICAM +관리에 대한 위험도 평가를 수행한다도입 초기 단계인 만큼 평가 결과에 대한 조치는 주로 수동으로 +. + +수행된다. +향상 +다양한 보안 기술 및 시스템 통합으로 +플랫폼이 안정화되었는가 +ICAM +? + +이 +등 여러 보안 시스템과 연동되어 실시간으로 사용자 정보 및 +ICAM +SSO, EDR, DLP, SIEM/SOAR +위험 데이터를 주고받는다 +예시로 +를 통해 사용자 +에서 악성코드가 탐지하면 해당 사용자 +. +EDR +PC +권한이 +을 통해 즉시 제한되거나 +가 요구되는 등 +이 다른 보안 인프라와 유기적으로 +ICAM +MFA +ICAM +연계되어 실시간 보안 대응 체계를 구축한다. + +플랫폼이 자동화되어 있는가 +ICAM +? + +내 기능이 자동으로 수행되는 단계이다사용자의 계정과 권한이 라이프사이클에 맞춰서 계정 +ICAM +. +생성폐기 +권한 부여회수 등의 자동화가 반영되어 있으며 +계정과 권한에 대한 지속적인 감사를 +/ +, +/ +, +수행하여필요 없는 계정과 권한을 삭제 관리 할 수 있다보안 시스템과 연동되어 이상 행위 탐지에 + +. + +따른 보안 대응을 자동으로 수행함으로써 전반적인 사용자계정 관리 수행에 있어 수동 개입을 +/ +최소화한다. +최적화 + +기반의 +플랫폼을 통해 보안 강화가 이루어지는가 +AI +ICAM +? + +기반 기술이 접목되어 사용자 행동 분석 +권한 이상 탐지 +실시간 리스크 예측 등의 보안 +ML/AI +, +, +고도화가이루어진다학습된 데이터 기반으로 사용자의 평소 행동과 다른 패턴이 발견되면 자동으로 + +. + +계정을 제한하거나 강화된 인증을 수행하는 등 전사 보안의 핵심 조정 엔진으로 작동하며예측되는 +, +위험이 있으면 정책을 자동으로 조정하고 개선하는 등 보안 사고를 미연에 방지하는 역할을 수행한다. +실시간 분석을 통한 +위험 평가가 이루어지는가 +ID +? + +를 활용하여 실시간 사용자의 계정과 권한을 분석하고타 보안 시스템과 연동된 정보를 기반으로 +AI +, +사용자에 대한 동적인 리스크 점수를 실시간으로 산출한다 +해당 점수를 기반으로 접근 허용 또는 +. +제한 여부를 판단하는 위험 평가를 수행하며평가 결과에 따라 접근 차단이나 추가 인증 등의 자동화된 +, + +조치를 반영한다. + +항목 +행동컨텍스트 기반 +및 생체 인식 +1.3.2 +, +ID +설명 +사용자의 행동 패턴상황적 정보를 생체 데이터를 활용하여 인증 및 접근제어를 강화하는 기술이다 +, +. +엔터프라이즈 +를 활용하여 기본 사용자 속성으로 사용자 및 개체 행동 분석 +IDP +(User and +을 활성화한다 +Entity Behavioral Analytics, UEBA) +. +를 +및 +시스템과 통합하여 이상행위 및 악의적인 활동을 보다 효과적으로 +UEBA +PAM +JIT/JEA +탐지할수 있다 + +. +성숙단계 +기존 +기본적인지문얼굴인식 +생체 인식 기술이 적용되어 있는가 +( +, +) +? +사용자 행동 패턴이 수동으로 분석되는가? +초기 +행동 및 생체 인식 기술을 통합하여 인증이 가능한가? +컨텍스트 정보 기반 접근권한이 조정되는가? +향상 +실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? +최적화 +기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가 +AI +? +세부 설명 +기존 +기본적인지문얼굴인식 +생체 인식 기술이 적용되어 있는가 +( +, +) +? + +지문얼굴 인식홍채 스캔 등 전통적인 생체 인식 기술이 일부 도입되어 있는 상태이다실무 환경 +, +, +. +에서는 이러한 기술이 전사적으로 통합 관리되지 않고특정 시스템예시근태관리출입통제 시스템에 +, +( +: +, +) + +개별적으로 적용되거나생체 인식 기능이 탑재된 일부 사용자 단말기예시특정 모델의 노트북에서만 +, +( +: +) + +제한적으로 활용되는 수준을 의미한다. +사용자 행동 패턴이 수동으로 분석되는가? + +사용자의 로그인 시각접속 위치와 같은 행동 패턴 및 상황적 정보가 로그 형태로 수집되지만 자동화된 +, + +분석 도구는 도입되지 않은 상태이다담당자가 개별 시스템에서 수동으로 로그를 수집하고 분석하며 +. +, +통계형 보고서 수준에서 사후에 행동 패턴을 확인할 수 있다. +초기 +행동 및 생체 인식 기술을 통합하여 인증이 가능한가? + +단일 시스템이나 솔루션이 자체적으로 제공하는 +인증 외에 +솔루션을 활용하여 지문 +SMS, OTP +, MFA +, +얼굴인식 등의 생체 인식 기술을 통합함으로써 인증 절차를 강화한다 +또한 +시스템 기능을 +. +, MFA +활용하여사용자 행동 패턴 기반의 강화된 +를 적용할 수 있다 + +MFA +. +컨텍스트 정보 기반 접근권한이 조정되는가? + +시간 +위치 +장치 +상태 +네트워크 등 기본적인 컨텍스트 데이터를 기반으로 로그인 요청의 위험 +, +, +, +, +수준을평가한다이 단계에서는 정적인 규칙을 기반으로 위험도를 평가하며평가된 위험도에 따라 + +. +, +접근 가능한 시스템을 제한하거나 접근권한 자체를 제한하는 등의 조정을 수행한다. + +| 항목 | 1.3.2 행동, 컨텍스트 기반 ID 및 생체 인식 | | +| --- | --- | --- | +| 설명 | 사용자의 행동 패턴, 상황적 정보를 생체 데이터를 활용하여 인증 및 접근제어를 강화하는 기술이다. 엔터프라이즈 IDP를 활용하여 기본 사용자 속성으로 사용자 및 개체 행동 분석(User and Entity Behavioral Analytics, UEBA)을 활성화한다. UEBA를 PAM 및 JIT/JEA 시스템과 통합하여 이상행위 및 악의적인 활동을 보다 효과적으로 탐지할 수 있다. | | +| 성숙단계 | 기존 | 기본적인(지문, 얼굴인식) 생체 인식 기술이 적용되어 있는가? | +| | | 사용자 행동 패턴이 수동으로 분석되는가? | +| | 초기 | 행동 및 생체 인식 기술을 통합하여 인증이 가능한가? | +| | | 컨텍스트 정보 기반 접근권한이 조정되는가? | +| | 향상 | 실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? | +| | 최적화 | AI 기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가? | + + +향상 +실시간 사용자 행동 및 컨텍스트 변화 반영으로 접근제어 조정이 가능한가? + +사용자 행동 및 패턴의 실시간 변화를 탐지하여 동적으로 접근을 제한하거나 재인증을 요구한다. +사용자행동 분석을 위한 +시스템을 통해 사용자별 엔티티 +를 생성하여 컨텍스트 변화를 + +UEBA +(Entity) +감지할 수 있다이렇게 생성된 사용자 엔티티 정보는 +시스템과 연동되어 고도화된 접근제어에 +. +PAM +활용될 수 있다 +또한 +시스템을 통해 엔티티가 생성 및 관리되면 +. +, UEBA +JEA(Just-Enough-Access) +기술을통해 업무에 필요한 최소한의 권한만 부여하고 +기술을 통해 필요시에만 + +, JIT(Just-In-Time) +권한을부여하는 동적인 접근제어 조정이 가능하다 + +. +최적화 + +기반 행동 분석 및 생체 인식 솔루션이 도입되어 있는가 +AI +? + +를 기반으로 사용자의 행동 패턴입력 습관타이핑 속도마우스 이동 등 +생체정보 등을 결 +ML/AI +, +( +, +), +합하여사용자별 엔티티를 고도화한다고도화된 엔티티에 새로운 기술을 지속적으로 도입하여 + +. +편 +의성을저하하지 않으면서 보안을 고도화할 수 있는 방안별도의 추가 인증 없이 입력 습관을 통해 + +( +사용자를 검증하는 등의 방식을 지속적으로 적용한다 +) +. + +접근 관리 +항목 +조건부 사용자 접근 +1.4.1 +설명 +사용자의 위치디바이스 상태시간대 등 다양한 조건에 따라 접근권한을 동적으로 조정하는 +, +, +기능이다. +연합된 +전반에 걸친 전통적인 역할 기반 +ICAM(Identity, Credential, and Access Management) +접근제어에서 시작하여응용 중심의 역할로 확장되며궁극적으로는 동적 접근 규칙을 제공하기 +, +, + +위해 엔터프라이즈 속성을 활용한다. +성숙단계 +기존 +사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? +조건부 접근 정책에 대한 개념을 정의하였는가? +시스템별 각기 다른 접속 관리 기능이 있는가? +초기 +특정 조건에 따른 사용자 접근제어가 가능한가? +시간위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가 +, +? +향상 +세션별 접근권한 부여가 가능한가? +조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? +리소스별 접근권한 부여가 가능한가? +최적화 +동적 접근 정책을 실시간으로 적용 가능한가? +기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가 +AI +? +세부 설명 +기존 +사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? + +단일 시스템이나 솔루션 자체의 기본 로그 수집 시스템을 활용하여 사용자 로그인 시간 +주소 +, IP +, +기기상태 등을 수집할 수 있는 단계이다 +수집된 데이터는 중앙에서 통합 관리되지 않으며 +주로 + +. +, +시스템별로 분산되어 운영된다. +조건부 접근 정책에 대한 개념을 정의하였는가? + +조직의 특성을 반영하여 조건부 접근 정책을 수립하고 문서화한다이 단계에서는 위험 기반또는 +. +' +' +컨텍스트 기반인증이 무엇인지그리고 어떤 상황예시외부 환경에서 내부 네트워크에 접근하는 +' +' +, +( +: +경우에 적용되어야 하는지에 대한 기본 개념과 원칙을 내부 보안 지침서 등에 정립한다 +) +. +시스템별 각기 다른 접속 관리 기능이 있는가? + +접속 관리 기능이 중앙화되어 있지 않은 상태로실무 환경에서 그룹웨어파일 서버단일 시스템 +, +, +, +등 각 개별 시스템이 자체적인 인증 및 권한 관리 기능을 별도로 운영한다이로 인해 전사적으로 +. +일관된 접근 정책을 적용하기 어렵고통합적인 사용자 권한 현황을 파악하기 어렵다 +, +. + +| 항목 | 1.4.1 조건부 사용자 접근 | | +| --- | --- | --- | +| 설명 | 사용자의 위치, 디바이스 상태, 시간대 등 다양한 조건에 따라 접근권한을 동적으로 조정하는 기능이다. 연합된 ICAM(Identity, Credential, and Access Management) 전반에 걸친 전통적인 역할 기반 접근제어에서 시작하여, 응용 중심의 역할로 확장되며, 궁극적으로는 동적 접근 규칙을 제공하기 위해 엔터프라이즈 속성을 활용한다. | | +| 성숙단계 | 기존 | 사용자 활동 및 조건을 수집할 수 있는 기초 시스템을 구축하였는가? | +| | | 조건부 접근 정책에 대한 개념을 정의하였는가? | +| | | 시스템별 각기 다른 접속 관리 기능이 있는가? | +| | 초기 | 특정 조건에 따른 사용자 접근제어가 가능한가? | +| | | 시간, 위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가? | +| | 향상 | 세션별 접근권한 부여가 가능한가? | +| | | 조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? | +| | | 리소스별 접근권한 부여가 가능한가? | +| | 최적화 | 동적 접근 정책을 실시간으로 적용 가능한가? | +| | | AI 기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가? | + + +초기 +특정 조건에 따른 사용자 접근제어가 가능한가? + +인증 및 접근 계정권한이 중앙집중화되기 시작하며 +시스템 등을 통해 통합 관리된다 +기존 +, SSO, IAM +. ' +' +단계에서 문서로만 존재하던 조건부 접근 정책이 +등의 시스템 정책 엔진에 실제 규칙으로 +, SSO, IAM +반영되기 시작한다사용자 역할이나 기본적인 컨텍스트 확인에 따라 접근 허용 여부를 정책에 반영하고 +. +, +이를 기반으로 특정 조건에 따른 접근제어를 수행한다. +시간위치 기반으로 최소 권한 원칙에 따른 접근제어가 가능한가 +, +? + +사용자 위치 +네트워크 상태 +로그인 시간 등 사전에 정의된 정적 조건컨텍스트에 따라 접근을 +, +, +( +) +허용하거나제한하는 정책을 시스템상에 반영하여 최소 권한 원칙을 적용한다 +실무 환경에서는 + +. +중앙집중화된 +등의 시스템에서 +단순히 시스템 전체의 접근을 허용차단하는 것을 넘어 +SSO, IAM +, +/ +, +사용자의 컨텍스트에 따라 사전에 정의된 역할 +을 기반으로 차등 부여하는 것을 의미한다예를 +' +(Role)‘ +. + +들어 +동일한 인사팀 사용자라도 업무 시간 +중 사내 +에서 접속할 때는 인사 +, +' +(09:00-18:00)' +' +IP' +' +DB +읽기쓰기 +/ +' 권한을 부여하고 +업무 시간 외또는 외부 +에서 접속할 때는 읽기 전용권한만 부여 + +, ' +' +' +IP' +' +' +하는 식으로 시간과 위치 조건에 따라 권한을 최소화할 수 있다. +향상 +세션별 접근권한 부여가 가능한가? + +사용자가 조직 리소스에 접근 이후 생성된 각 세션 자체를 개별적으로 식별하고 모니터링하고 개별적으로 +접근권한을 부여할 수 있는지를 의미한다 +실무 환경에서는 동일한 사용자가 여러 기기예시 +사내 +. +( +: +와 개인 모바일 태블릿에서 동시에 접속하더라도각 세션을 별도로 식별하여 +로 접근한 세션에는 +PC +) +, +PC + +전체 기능을 허용하고 +상대적으로 보안이 취약할 수 있는 모바일 세션에는 읽기 전용 +권한만 +' +' +, +' +' +부여하는등 세션 단위의 차등적인 접근제어를 수행할 수 있다 + +. +조건을 정교하게 나누어 다단계 접근 정책이 적용되어 있는가? + +사용자 신뢰도디바이스 보안 상태네트워크 환경접속 시간 등 다양한 컨텍스트를 정교하게 세분화하고 +, +, +, + +이를 조합하여 단계별 접근 정책을 적용한다예를 들어동일한 사용자라도 단계사내망 +보안 +. +, +(' +' + ' +등록 기기 +업무 시간로 접속 시에는 기본 인증 +만으로 접근을 허용하지만 +단계외부망 +' + ' +') +(ID/PW) +, 2 +(' +' +보안 등록 기기 +접속 시에는 +다중인증를 추가로 요구하고 +단계외부망 +미등록 기기 ++ ' +') +MFA( +) +, 3 +(' +' + ' +') +접속 시에는 접근 자체를 차단하는 등전사적으로 여러 조건의 조합에 따라 인증 강도와 접근권한이 +, + +차등 적용되어 있다. +리소스별 접근권한 부여가 가능한가? + +리소스의 중요도에 따라 세분화된 접근제어를 수행하는 것으로 +애플리케이션 내부의 특정 버튼과 +, +화면데이터 단위까지 제어하여 접근권한을 차등 부여할 수 있다실무 환경에서는 +등의 +, +. +IAM, ZTNA + +시스템을 통해서 동일한 사용자라도 특정 애플리케이션에서 고객 정보 조회는 가능하지만 고객 정보 +' +' +' + +다운로드 +기능은 차단하거나 +주요 데이터에 접근할 때는 추가 인증 +등을 요구하는 등 +' +, ' +' +(MFA) +리소스별로세분화된 접근제어를 수행한다 + +. + +최적화 +동적 접근 정책을 실시간으로 적용 가능한가? + +을 기반으로 사용자 행동환경에 따른 위험을 분석하고 각 상황에 따른 사용자 및 기기상황 +ML/AI +, +, +별 속성을 정의하여 자동으로 조건을 세분화한다이러한 조건은 실시간으로 정책 엔진에 반영되어 +. +동적 접근 정책을 수행한다. + +기반 실시간 상황 파악을 통한 사용자 접속 관리가 가능한가 +AI +? + +분석 엔진이 사용자의 행동 패턴예시타이핑 속도마우스 이동 +세션 중 활동예시평소와 +ML/AI +( +: +, +), +( +: +다른 명령어 사용대량의 데이터 접근 시도 +기기네트워크 상태 변화 등 모든 상황별 속성을 지속적으로 +, +), +/ + +분석하여 동적인 위험 점수를 실시간으로 스코어링 한다조건부 정책 엔진은 이 위험 점수가 사전에 +. + +정의된 임계치를 초과하거나 기존 정책을 위반할 경우관리자의 개입 없이도 즉각적인 조치를 수행 +, +한다 +예를 들어실무 환경에서는 +가 비정상적인 대량 데이터 다운로드 시도를 탐지하면 +. +, +AI +' +' +, SOAR +플레이북 등과 연동하여 해당 세션을 강제 종료시키거나사용자의 권한을 실시간으로 읽기 전용으로 +, +' +' + +하향 조정하는 등의 고도로 자동화된 사용자 접속 관리를 수행하는 것을 의미한다. + +항목 +최소 권한 접근 +1.4.2 +설명 +사용자가 수행하는 작업에 필요한 최소한의 권한만 부여하여 +타 리소스 및 워크로드에 대한 +, +접근을 제한하는 방식이다. +이를 통하여 리소스 탈취 등을 최소화할 수 있다. +성숙단계 +기존 +최소 권한 원칙에 대한 정의가 이루어져 있는가? +권한 부여에 대한 절차가 문서화되어 있는가? +초기 +권한 부여 절차가 표준화되어 있는가? +권한 요청 및 변경 관리 시스템이 도입되어 있는가? +향상 +자동화된 권한 상승이 가능한가? +권한 관리 정책이 지속적으로 업데이트 되는가? +최적화 +권한 관리가 동적으로 변경 가능한가? +최소 권한 원칙이 실시간으로 조정 가능한가? +세부 설명 +기존 +최소 권한 원칙에 대한 정의가 이루어져 있는가? + +조직 내부적으로 사용자가 자신의 역할을 수행하는데 필요한 최소한의 권한만을 시스템 상에서 수행 +가능하도록 보장하는 최소 권한 원칙을 정의한다 +최소의 정의를 위해 업무 프로세스필요 리 +. ' +' +, +소스 +및 기존 권한 등에 대한 상세한 분석을 수행하고 각 역할에 따른 필수불가결한 권한을 확인한다. +권한 부여에 대한 절차가 문서화되어 있는가? + +정의된 최소 권한 원칙 적용을 위해 권한 요청승인부여변경회수에 이르는 일련의 프로세스를 +, +, +, +, +문서화한다 +해당 문서에는 권한을 요청하는 사람 +이를 검토하고 승인하는 책임자 등 각 단계의 +. +, +역할과책임이 정의되어 있다 + +. +초기 +권한 부여 절차가 표준화되어 있는가? + +모든 부서와 시스템에 걸쳐 동일하게 적용되는 표준화된 권한 부여 절차를 수립한다실무 환경에서는 +. + +이메일이나 구두로 요청하는 대신 +그룹웨어나 전자 결재 시스템을 통해 모든 권한 요청승인이 +, +/ +이루어짐을 의미한다 +일반적으로 직무에 따라 역할 +과 권한을 매핑한 역할권한 매트릭스를 +. +(Role) +- +정의하고, 이를 기반으로 하는 +역할 기반 접근제어를 구현하기 시작한다 + +RBAC( +) +. +권한 요청 및 변경 관리 시스템이 도입되어 있는가? + +권한 요청 및 변경 이력을 관리하기 위한 그룹웨어사용자 포털 등의 시스템이 도입되어실무 환경 +, +, +에서는사용자가 해당 시스템을 통해 권한을 신청하고관리자는 이 시스템을 통해 승인반려 처리를 + +, +/ + +수행한다이러한 모든 승인 및 변경 내역은 시스템적으로 기록되어누가언제어떤 권한을누구의 +. +, +, +, +, + +| 항목 | 1.4.2 최소 권한 접근 | | +| --- | --- | --- | +| 설명 | 사용자가 수행하는 작업에 필요한 최소한의 권한만 부여하여, 타 리소스 및 워크로드에 대한 접근을 제한하는 방식이다. 이를 통하여 리소스 탈취 등을 최소화할 수 있다. | | +| 성숙단계 | 기존 | 최소 권한 원칙에 대한 정의가 이루어져 있는가? | +| | | 권한 부여에 대한 절차가 문서화되어 있는가? | +| | 초기 | 권한 부여 절차가 표준화되어 있는가? | +| | | 권한 요청 및 변경 관리 시스템이 도입되어 있는가? | +| | 향상 | 자동화된 권한 상승이 가능한가? | +| | | 권한 관리 정책이 지속적으로 업데이트 되는가? | +| | 최적화 | 권한 관리가 동적으로 변경 가능한가? | +| | | 최소 권한 원칙이 실시간으로 조정 가능한가? | + + +승인을 받아 획득했는지에 대한 감사 추적성을 확보한다이는 최소 권한 원칙이 절차에 따라 준수 +. +되고 있음을 검증하는 기본 증적이 된다. +향상 +자동화된 권한 상승이 가능한가? + +기술과 같은 자동화된 권한 상승 기능이 구현된 단계이다실무 환경에서는 사용자가 +JIT(Just-In-Time) +. + +특정 서버 관리나 데이터베이스 작업 등 일시적으로 높은 권한이 필요한 업무를 수행하기 위해 +권한을요청할 경우 +또는 +등의 시스템이 사전에 정의된 조건예시승인된 그룹웨어 작업 + +, PAM +IAM +( +: +티켓 연동업무 시간 내 요청 등을 자동으로 검증한다조건에 부합하면 시스템은 일시적으로 권한 +, +) +. +을 +부여상승하고작업이 종료되거나 설정된 시간이 만료되면 해당 권한을 자동으로 회수한다 +( +) +, +. +권한 관리 정책이 지속적으로 업데이트 되는가? + +권한 관리 정책이 조직의 변화에 맞춰 지속적으로 검토되고 최신화된다실무 환경에서는 인사시스템과 +. + +시스템 등을 연동하여부서 개편이나 직무 변경과 같은 인사 정보가 발생할 때마다 +의 +IAM +, +RBAC +' +역할권한 매트릭스를 자동으로 업데이트하거나 관리자에게 검토 알림을 보낸다또한분기별 또는 +- +' +. +, +반기별로 정기적인 권한 재검토 프로세스를 시스템을 통해 수행하여사용자가 현재 보유한 권한이 +, +여전히 업무에 필요한지를 검증하고 불필요한 권한을 체계적으로 회수한다. +최적화 +권한 관리가 동적으로 변경 가능한가? + +을 기반으로 사용자 행동기기 상태네트워크 트래픽위협 인텔리전스 등 다양한 컨텍스트를 +ML/AI +, +, +, + +실시간으로 분석하여 동적인 위험 점수를 실시간으로 스코어링 한다이 점수는 +시스템 등의 +. +ICAM +정책 엔진에 즉각적으로 반영되어 +사용자의 업무 활동과 실시간 스코어링 된 점수 수준에 따라 +, +권한이동적으로 상향 또는 하향 조정되는 동적 접근 정책을 수행한다 + +. +최소 권한 원칙이 실시간으로 조정 가능한가? + +정책 엔진에 +기술이 적용되어 권한 변동이 발생하면 +JIT(Just-In-Time) / JEA(Just-Enough-Access) +필요한권한을 일시적으로 부여하고 자동으로 회수한다실무 환경에서는 +을 활용하여 산출한 + +. +ML/AI +동적인 위험 점수와 사용자의 실시간 요청을 기반으로정책 엔진이 +기술을 통해 필요한 최 +, +JIT/JEA +소한의 권한 +을 필요한 시간 +만큼만 자동으로 부여한다 +예를 들어 +개발자가 평소 접근하지 +(JEA) +(JIT) +. +, +않던 운영 서버에 긴급 패치 작업을 위해 접근을 요청할 경우정책 엔진이 해당 작업의 정당성예시 +, +( +: +시스템 연동과 사용자의 위험 점수를 실시간으로 스코어링하여 +시스템을 통해 +시간 +IAM +) +, PAM +동안만해당 서버의 패치 실행 +명령어 권한 +을 부여하고 시간이 만료되면 자동으로 회수한다 + +' +' +(JEA) +. +이를 통해 상시 존재하는 특권 +을 제거하고 자율적으로 최소 권한 원칙을 실시간 +(Standing Privilege) +조정한다. + + +### 2. 기기 및 엔드포인트 + +정책 준수 모니터링 +항목 +기기 감지 및 규정 준수 +2.1.1 +설명 +네트워크에 연결된 장치가 조직의 보안 규정을 준수하는지 확인하고비준수 장치를 탐지하여 +, +경고하는 시스템이다. +성숙단계 +기존 +리소스에 연결된 기기를 식별할 수 있는가? +수동으로 규정 준수에 대한 확인이 가능한가? +초기 +실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? +비준수 기기에 대한 경고 및 접근 제한이 되는가? +향상 +자동으로 규정 기준을 적용하고 교정 조치가 가능한가? +규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? +최적화 +규정 준수 여부에 따라 동적으로 권한이 수정되는가? +규정 준수 평가를 +기반으로 실시간으로 할 수 있는가 +AI +? +세부 설명 +기존 +리소스에 연결된 기기를 식별할 수 있는가? + +조직 내부 네트워크에 연결된 엔드포인트 +모바일 +등를 식별하여 할 수 있다방화벽 +(PC, +, IoT +) +. +, NAC, +등을 통해 +주소 +주소 등을 수동으로 수집하거나기본적인 에이전트를 통해 정보를 취합한다 +IP +, MAC +, +. +실시간성이 결여되어 정보의 최신성이 낮고목록 갱신을 위한 수동 작업이 동반된다 +, +. +수동으로 규정 준수에 대한 확인이 가능한가? + +단말 +업데이트 여부 +안티바이러스백신 +설치 여부 +암호화 설정 등 조직이 정의한 기본 보안 +OS +, +( +) +, +정책의 준수 여부를 수동으로 점검한다실무 환경에서는 월 회 내 +지킴이와 같은 단순 점검 +. +' +PC +' +도구를 사용하거나 +보안 점검 체크리스트를 배포하여 사용자가 직접 결과를 제출자가 점검하는 +, +( +) +방식으로확인한다규정 준수가 실시간으로 강제되지 않고 사후 점검 형태로 이루어진다 + +. +. +초기 +실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? + +등의 시스템을 바탕으로 +기기가 네트워크에 접속을 시도하는 시점에 실시간 +EDR, EPP, NAC, UEM +, +으로 탐지한다실무 환경에서는 기기의 상태예시백신보안패치 최신 여부 +버전필수 +설치 +. +( +: +/ +, OS +, +S/W + +여부 등를 자동으로 확인하여 사전에 정의된 보안 정책의 규정 준수 여부를 평가한다 +) +. + +| 항목 | 2.1.1 기기 감지 및 규정 준수 | | +| --- | --- | --- | +| 설명 | 네트워크에 연결된 장치가 조직의 보안 규정을 준수하는지 확인하고, 비준수 장치를 탐지하여 경고하는 시스템이다. | | +| 성숙단계 | 기존 | 리소스에 연결된 기기를 식별할 수 있는가? | +| | | 수동으로 규정 준수에 대한 확인이 가능한가? | +| | 초기 | 실시간으로 기기를 탐지하고 규정 준수를 평가할 수 있는가? | +| | | 비준수 기기에 대한 경고 및 접근 제한이 되는가? | +| | 향상 | 자동으로 규정 기준을 적용하고 교정 조치가 가능한가? | +| | | 규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? | +| | 최적화 | 규정 준수 여부에 따라 동적으로 권한이 수정되는가? | +| | | 규정 준수 평가를 AI 기반으로 실시간으로 할 수 있는가? | + + +비준수 기기에 대한 경고 및 접근 제한이 되는가? + +등의 시스템을 활용하여 보안 규정이 비준수 된 기기에 대해서는 경고 조치를 +EDR, EPP, NAC, UEM +취하거나 조직 리소스에 접근을 제한한다예를 들어 기기의 상태 +버전필수 +설치 여부 등를 +. +(OS +, +S/W +) + +확인하여 조직 내부 네트워크 접근이 제한된다. +향상 +자동으로 규정 기준을 적용하고 교정 조치가 가능한가? + +비준수 기기에 대해 단순 알림이나 접근 제한을 수행하는 단계를 넘어 +비준수 항목을 능동적으로 +, +교정 조치가 가능하다 +실무 환경에서는 클라이언트 에이전트 +등를 통해 자동으로 +. +(EPP, NAC, UEM +) +누락된 보안 패치를 설치하도록 강제하거나 +원격으로 에이전트을 강제 실행업데이트하는 등의 +, +/ +자동화된교정 조치를 수행한다또는 웹 기반으로 보안 규정 준수 교정을 강제 유도하여사용자가 + +. +, +직접 필수 프로그램을 설치하도록 안내하고 조치가 완료된 이후에만 정상적인 리소스 접근을 허용한다. +규정 준수에 대한 모니터링 및 이에 따른 접근권한 부여가 가능한가? + +기기의 접속 세션이 활성화된 이후에도 기기의 보안 상태 규정 준슈 여부를 지속적으로 모니터링한다. +실무 환경에서는 +등의 에이전트가 기기의 보안 규정 준수 여부예시 +실시간 +EDR, EPP, NAC, UEM +( +: +백신 동작 여부방화벽 활성화 상태 +서버 접속 시도 등를 실시간으로 감지한다이 상태 정 +, +, C&C +) +. +보는 정책 엔진예시 +등과 연동되며 +기기가 비준수 상태로 변경되면 사용자의 +( +: IAM, ICAM, ZTNA +) +, +시스템 접근권한이 동적으로 조정된다 +예를 들어 +최초 접속 시 규정 준수 +상태로 전체 리소스 +. +, +' +' +' +' +접근권한을 부여받았더라도 +세션 중에 규정 비 준수 +상태가 되면 제한된 리소스예시 +인터넷만 +, +’ +‘ +' +'( +: +허용내부망 차단만 접근 가능하도록 권한이 실시간으로 하향 조정된다 +, +) +. +최적화 +규정 준수 여부에 따라 동적으로 권한이 수정되는가? + +기기의 규정 준수 상태를 +와 같은 정책 엔진과 실시간으로 연동하여 지속적으로 모니터링 +ICAM, ZTNA +한다. 기기의 상태가 규정 비준수로 판단되면정책 엔진이 관리자의 개입 없이 기기의 접근권한을 + +, +자동으로 수정하는 등 자동화된 대응을 수행한다실무 환경의 예시로는 기기에서 랜섬웨어 감염 징후 +. + +등 심각한 비준수 사항이 탐지되는 즉시 +플레이북 등과 연동된 정책 엔진이 해당 기기의 +, SOAR +접근권한을실시간으로 격리 상태로 동적 수정하여 모든 내부 리소스 접근을 원천 차단한다 + +. +규정 준수 평가를 +기반으로 실시간으로 할 수 있는가 +AI +? + +엔진이 기기의 이상 행위미확인 프로세스 실행실시간 취약 상태 등을 종합적으로 평가한다 +ML/AI +, +, +. +실무 환경에서는 +등의 시스템을 연계하여 정보를 수집하고정적 규칙 +EDR, XDR, ICAM, SIEM/SOAR +, +예시백신 설치 여부 등만으로는 탐지할 수 없는 실시간 이상 징후를예시평소와 다른 +( +: +) +( +: +네트워크 +트래픽 발생권한 상승 시도를 +이 실시간으로 분석한다이 평가 결과는 기기의 동적인 +, +) +ML/AI +. +위험 + +점수를실시간으로 스코어링하는 데 사용되며이는 리스크 기반의 자동화된 조치로 이어진다 + +, +. + +데이터 접근제어 +항목 +실시간 검사를 통한 기기 권한 부여 +2.2.1 +설명 +기기가 네트워크에 접근하기 전에 보안 상태를 평가 +파일 무결성 +(NextGen AV, AppControl, FIM( +모니터링 +등을 이용하고안전한 장치만 접근을 허용하는 기능이다 +) +) +, +. +성숙단계 +기존 +자산 접근 기기에 대한 정보가 수집되는가? +초기 +기기가 자산에 접근하기 전 수동 검사를 수행하는가? +향상 +기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 +되는가? +최적화 +보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? +종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? +세부 설명 +기존 +자산 접근 기기에 대한 정보가 수집되는가? + +조직 리소스에 접근하는 기기에 대한 정보를 수집하기 위한 계획이 수립되고 실행되고 있으며실무 +, +환경에서는 기본적인 백신 에이전트나 네트워크 방화벽 수준에서조직 네트워크에 접근하는 기기에 +, +) +대한 + + +제한적인 정보예시 +주소백신 설치 여부 등가 수집되고 있음을 의미한다이 정보는 특정 +( +: IP +, +) +. +자산에 +대한 접근권한 부여 여부를 판단하는 데 활용될 수 있으나수집 정보가 제한적이고 실시간성이 +, +낮다 + +. +초기 +기기가 자산에 접근하기 전 수동 검사를 수행하는가? + +기기가 자산조직 리소스에 접근하기 전에 보안 상태를 확인하는 수동 검사 절차를 수행한다실무 +( +) +. +환경에서는 내 +지킴이백신 +과 같은 점검 도구를 활용해 검사를 주기적으로예시월 회 배치 +PC +, +, NAC +( +: + +작업 +수행하여그 결과를 바탕으로 기기의 보안 상태를 확인한다그 결과를 바탕으로 기기의 보안 +) +, +. +상태를 확인하고 자산 접근 여부를 판단한다이는 자동화된 실시간 검증이 아닌정해진 시점에 수동 +. +, + +또는 반자동으로 검사를 수행하는 단계이다. +향상 +기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? + +등의 시스템을 바탕으로 실시간으로 기기의 보안 상태예시 +버전 +보안 패치 +NAC, UEM, EDR +( +: OS +, +버전백신 실시간 감시 활성화 여부 등를 자동으로 검사하고조직의 보안 기준 준수 여부를 자산 +, +) +, +접근 시 지속적으로 평가한다이 평가 결과보안 기준을 충족하는 기기만 자산 접근을 허용한다 +. +, +. + +| 항목 | 2.2.1 실시간 검사를 통한 기기 권한 부여 | | +| --- | --- | --- | +| 설명 | 기기가 네트워크에 접근하기 전에 보안 상태를 평가(NextGen AV, AppControl, FIM(파일 무결성 모니터링) 등을 이용)하고, 안전한 장치만 접근을 허용하는 기능이다. | | +| 성숙단계 | 기존 | 자산 접근 기기에 대한 정보가 수집되는가? | +| | 초기 | 기기가 자산에 접근하기 전 수동 검사를 수행하는가? | +| | 향상 | 기기의 상태를 자동으로 평가하고 보안 기준을 충족하는 기기만 접근 허용이 되는가? | +| | 최적화 | 보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? | +| | | 종합적인 기기 보안 전략을 구현하여 다른 보안 시스템과 연동하였는가? | + + +최적화 +보안 상태에 따라 기기의 접근권한을 조정할 수 있는가? + +기반의 실시간 보안 상태 평가를 수행하여 보안 기준 미달 시 시스템 접근을 제한하는 방식으로 +ML/AI + +기기 권한을 동적으로 조정한다 +실무 환경에서는 기기 단말에서 수집된 동적 정보예시 +프로세스 +. +( +: +실행 내역 +네트워크 트래픽 패턴 +사용자 행위 등가 +등의 시스템과 연동되어 +, +, +) +ICAM, SIEM/SOAR +분석된다. +엔진은 이 분석 결과를 바탕으로 기기의 동적인 위험 점수를 실시간으로 스 +ML/AI +코어링 +하며 +이 점수가 임계치를 초과할 경우 정책 엔진을 통해 해당 기기의 접근권한을 자동으로 하향 +, +조정하거나차단하는 등 자동화된 대응을 수행한다 + +. + +자산관리 +항목 +기기 인벤토리 +2.3.1 +설명 +모든 기기의 목록을 작성하고 관리하는 시스템이다이는 조직의 보안을 위해 모든 장치의 +. +상태소유자위치 등을 정확히 파악할 수 있게 해준다 +, +, +. +기기 속성에는 +시스템 인증서기기 개체패치취약성 상태 등을 확인할 수 있는 +PKI(802.1x) +, +, +/ + +기술 세부 정보가 포함된다. +성숙단계 +기존 +기기의 인벤토리를 작성하고 수동으로 업데이트하는가? +주요 기기에 대한 정보를 수집하고 관리하는가? +초기 +기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? +향상 +기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 +포함하는가? +인벤토리 분석을 통하여 보안 취약점을 파악하는가? +최적화 +실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? +세부 설명 +기존 +기기의 인벤토리를 작성하고 수동으로 업데이트 하는가? + +조직 내에서 사용하는 기기를 목록화하기 시작하는 단계로조직 내 기기 도입 시 특정 문서 파일이나 +, + +스프레드시트 등읠 활용해 자산관리대장을 수작업으로 관리하며 +주소 +주소기기명담당자 +, IP +, MAC +, +, +정도만 관리된다기기 상태나 보안 정보는 포함되지 않으며실시간성이나 정확성은 낮은 편이다 +. +, +. +주요 기기에 대한 정보를 수집하고 관리하는가? + +서버업무용 데스크탑 등 주요 기기에 한정하여 자산 정보를 수집한다실무 환경에서는 단순 에이 +, +. +전트백신 +등 +기반으로 제한된 정보를 수집하거나 +관리자가 수동 조사를 통해 정보를 +( +, EPP, NAC +) +, +취합하여자산관리대장스프레드시트 등에 반영한다이 단계에서는 전체 기기를 포괄하지 못하며 + +( +) +. +, +수집되는 정보 항목 +관리자명 등도 한정적인 경우가 많다 +(IP, MAC, +) +. +초기 +기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? + +문서 기반의 자산관리대장에서 벗어나 +시스템 등을 통해 기기의 구매배포폐기 등 기본적인 +ITAM +, +, +라이프사이클 정보를 관리하기 시작한다 +등의 시스템을 통해 조직 내부 리소스에 +. Directory, EPP, NAC + +연결된 기기를 탐지하고 식별하여 인벤토리를 관리할 수 있다이 단계에서는 운영체제패치 상태 +. +, +, +위치 정보 +사용자 연계 정보 등 기기의 정보들을 확인하고 인벤토리를 관리할 수 있으나 +조직 +, +, +내부자산으로 등록되지 않은 개인 기기나 +기기에 대한 식별은 일부 제한될 수 있다 + +IoT +. + +| 항목 | 2.3.1 기기 인벤토리 | | +| --- | --- | --- | +| 설명 | 모든 기기의 목록을 작성하고 관리하는 시스템이다. 이는 조직의 보안을 위해 모든 장치의 상태, 소유자, 위치 등을 정확히 파악할 수 있게 해준다. 기기 속성에는 PKI(802.1x) 시스템 인증서, 기기 개체, 패치/취약성 상태 등을 확인할 수 있는 기술 세부 정보가 포함된다. | | +| 성숙단계 | 기존 | 기기의 인벤토리를 작성하고 수동으로 업데이트하는가? | +| | | 주요 기기에 대한 정보를 수집하고 관리하는가? | +| | 초기 | 기기 인벤토리를 자동화하고 모든 기기를 실시간으로 기록하는가? | +| | 향상 | 기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? | +| | | 인벤토리 분석을 통하여 보안 취약점을 파악하는가? | +| | 최적화 | 실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? | + + +향상 +기기 인벤토리에 비정상적이거나 승인되지 않은 기기를 탐지하는 기능을 포함하는가? + +네트워크에 새로운 기기 접근 시 인벤토리를 실시간으로 업데이트하며기 등록된 +주소인증서 +, +MAC +, +, +사용자 속성 등의 정보를 바탕으로 비정상적이거나 승인되지 않은 기기인지를 판단한다실무 환경 +. +에서는 +시스템 등을 통해 실시간으로 기기의 보안 상태를 확인하고승인되지 않은 +EDR, ZTNA, NDR +, + +기기가 조직 내 리소스에 접근하는 것을 탐지하여 대응할 수 있다 +와 연동하여 기기 +. SIEM/SOAR +인벤토리에대한 시나리오와 플레이북을 통해 이상 기기에 대한 내용을 관리자에 경고 알림을 보내고 + +즉각적인 대응을 수행한다. +인벤토리 분석을 통하여 보안 취약점을 파악하는가? + +수집된 기기 속성 데이터 +버전 +패치 상태 +네트워크 연결 정보 등를 기반으로 보안 취약점을 +(OS +, +, +) +식별하고 대응한다실무 환경에서는 +시스템 등을 통해 기기의 보안 취약점 +. +EDR, ZTNA, NDR, XDR +예시 +패치 미적용구형 +사용승인되지 않은 앱 실행 등을 탐지하고필요한 경우 차단 등의 +( +: +, +OS +, +) +, +대응 조치를 수행한다또한이러한 보안 시스템과 +시스템을 연동하여 탐지된 취약점 정보나 +. +, +ITAM +상태 변경 사항을 기기 인벤토리에 실시간으로 업데이트 및 관리할 수 있다. +최적화 +실시간 모니터링 및 이상 행위 예측 분석을 통해 기기 관리를 수행하는가? + +기반 인벤토리 관리 플랫폼을 바탕으로 기기의 행동 패턴 +소프트웨어 설치 변화 +네트워크 +ML/Al +, +, +활동 정보 등을 분석하여 기기 위험도를 실시간으로 판단한다실무 환경에서는 기기의 과거 데이터와 +. + +현재 상태를 +엔진이 지속적으로 분석하여단순 이상 행위 탐지를 넘어 향후 발생 가능한 위험 +ML/AI +, +예시 +( +: +특정 +설치 후 악성 행위 발생 가능성 예측을 예측 분석한다 +이 분석 결과는 + +S/W +) +. +및 +와 같은 정책 엔진과 연동되어 +예측된 위험이나 실제 기기 이상 행위 +SIEM/SOAR +ICAM/ZTNA +, +탐지 시 관리자 알림뿐만 아니라 해당 기기의 접근권한을 자동으로 제한하거나 격리하는 등의 선제적이고 +자동화된 기기 관리 및 대응 조치를 수행한다. + +항목 +통합 엔드포인트 관리 및 모바일 기기 관리 +2.3.2 +설명 +모든 엔드포인트와 모바일 기기를 중앙에서 통합 관리하고보안을 유지하는 기능이다 +, +. +이는 원격으로 관리될 수 있어야 하며보안 정책을 적용할 수 있어야 한다 +, +. +성숙단계 +기존 +기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? +기본적인 보안 정책을 설정하였는가? +초기 +엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 +자동 배포하는가? +기기 상태를 지속적으로 모니터링 하는가? +향상 +모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 +적용하고관리하는가 + +? +최적화 +모든 기기의 보안을 중앙에서 통합적으로 관리하고 +자동화된 위협 대응이 +, +가능한가? +세부 설명 +기존 +기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? + +엔드포인트 및 모바일 기기 관리가 시작되는 단계로 +주로 +솔루션이 도입되어 운영된다 +, +MDM +. +은 +부서가 직원 소유 또는 기업 소유의 스마트폰태블릿 등 모바일 기기를 원격으로 등록 +MDM +IT +, +하고 추적하며 기본적인 관리 및 보호 기능을 수행하는 데 중점을 둔다실무 환경에서는 +외에도 +. +MDM + +무선 +방화벽 등의 시스템을 통해 조직 리소스에 접근하는 엔드포인트나 모바일 기기를 +NAC, +AP, +제한적으로 식별할 수 있다. +기본적인 보안 정책을 설정하였는가? + +암호 설정 +원격 잠금 +초기화 등의 단순 보안 정책을 설정하고 수동 또는 제한적으로 적용한다 +, +, +. +중앙집중화된관리는 수행되지 않으며주로 수동으로 정책 준수를 확인한다실무 환경에서는 모바일 + +, +. + +기기나 태블릿으로 접근할 수 있는 업무 영역예시이메일그룹웨어을 정책적으로 정의하고 +과 +( +: +, +) +, MDM + +같은 통합 관리 솔루션이 설치되지 않은 기기라도 모바일 앱 자체의 보안 기능예시앱 내 데이터 +( +: +접근권한 관리화면 캡처 방지을 활용하여 기본적인 보안 조치를 적용하는 수준을 의미한다엔드 +, +) +. +포인트 보안 정책을 수립할 때에는 관리 범위를 기존의 +모바일 기기뿐만 아니라 +기기스마트 +PC, +IoT +( + +워치프린터 등와 +장비까지 확장하기 위한 보안 조치 및 통합관리 방안을 고려한다 +, +) +OT +. +초기 +엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? + +통합 모바일 기기 관리 시스템 +등을 바탕으로 엔드포인트 및 모바일 기기의 보안 +(MDM, MAM +) +설정을중앙에서 관리한다실무 환경에서는 관리 콘솔을 통해 암호화 설정패치 적용 등 보안 설정을 + +. +, + +일괄적으로 적용하며일정에 따라 보안 업데이트가 자동으로 배포되기 시작한다 +, +. + +| 항목 | 2.3.2 통합 엔드포인트 관리 및 모바일 기기 관리 | | +| --- | --- | --- | +| 설명 | 모든 엔드포인트와 모바일 기기를 중앙에서 통합 관리하고, 보안을 유지하는 기능이다. 이는 원격으로 관리될 수 있어야 하며, 보안 정책을 적용할 수 있어야 한다. | | +| 성숙단계 | 기존 | 기본적인 엔드포인트 및 모바일 기기 관리 시스템이 도입되었는가? | +| | | 기본적인 보안 정책을 설정하였는가? | +| | 초기 | 엔드포인트 및 모바일 기기의 보안 설정을 중앙에서 관리하고 보안 업데이트를 자동 배포하는가? | +| | | 기기 상태를 지속적으로 모니터링 하는가? | +| | 향상 | 모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? | +| | 최적화 | 모든 기기의 보안을 중앙에서 통합적으로 관리하고, 자동화된 위협 대응이 가능한가? | + + +기기 상태를 지속적으로 모니터링 하는가? + +각 엔드포인트에 설치치된 보안 에이전트 +등 +또는 네트워크 스캐닝 등을 통해 기기의 +(EDR, MDM +) +상태 +버전 +보안 패치 적용 여부 +기본 보안 설정 준수 여부 등를 주기적으로 수집하고 이상 +(OS +, +, +) +여부를모니터링한다관리 범위에 포함된 다양한 종류의 기기 +모바일 +등에 대한 상태 + +. +(PC, +, IoT, OT +) +정보를 수집하고 관리 시스템 대시보드를 통해 현황을 확인한다. +향상 +모든 엔드포인트와 모바일 기기에 대하여 보안 정책을 중앙에서 자동으로 적용하고 관리하는가? + +사용자부서기기 그룹에 따른 정책 템플릿을 설정한 후 통합 관리 시스템 +등을 통해 +, +, +(UEM, ITAM +) +각 그룹에 적합한 정책을 자동적으로 적용한다 +등의 탐지 솔루션과 연계하여 각 기기의 +. EDR, XDR +정책 준수 여부를 실시간으로 모니터링하며보안 이벤트 발생 시 관리자에게 알림을 보내고 자동으로 +, + +조치를 수행한다. +최적화 +모든 기기의 보안을 중앙에서 통합적으로 관리하고자동화된 위협 대응이 가능한가 +, +? + +기반의 단일화된 엔드포인트 통합 관리 플랫폼에서 전사 모든 엔드포인트 관리를 수행한다 +ML/AI +. +실무 환경에서는 기기 유형별로 최적화된 관리 시스템예 +노트북은 +모바일프린터는 +( +: PC/ +EDR, +/ +UEM, +모니터 등 기타 자산은 +등에서 수집된 정보가 단일 플랫폼으로 통합된다이 통합 플랫폼을 +XDR, ITAM +) +. + +통해 정책 변경이나 패치 발생 시 해당하는 모든 기기에 자동으로 적용하며 +이 학습한 +, ML/AI +기기 +사용 패턴을 바탕으로 비정상 행동을 탐지되면 +등의 시스템과 연동하여 해당 기기를 +ICAM, ZTNA + +격리시키거나 접근권한을 제한하는 등의 자동화된 위협 대응을 실시간으로 수행한다. + +기기 위협 보호 +항목 +엔드포인트 및 확장된 탐지대응 +및 +2.4.1 +(EDR +XDR) +- +설명 +엔드포인트와 확장된 영역에서 실시간으로 위협을 탐지하고 대응하는 고급 보안 솔루션으로 +이를 이용하여 엔드포인트의 이상행위를 탐지해야 한다. +성숙단계 +기존 +기본적인 +솔루션을 도입하였는가 +EDR +? +초기 +시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가 +EDR +? +향상 +솔루션을 도입하였는가 +XDR +? +최적화 +기반 +솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 +AI +EDR XDR +- +가능한가? +세부 설명 +기존 +기본적인 +솔루션을 도입하였는가 +EDR +? + +위협에 대한 탐지차단 정책을 수립하고 +솔루션을 도입하여 기본적인 멀웨어 +악성 프로세스 +/ +EDR +, +, +파일 변경 등의 위협을 탐지한다실무 환경에서는 엔드포인트에서 발생하는 위협 행위를 +콘솔을 +. +EDR + +통해 확인하는 수준이며 +발견된 위협에 대해서는 주로 관리자가 수동으로 분석하고 대응 조치를 +, +수행한다. +초기 + +시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가 +EDR +? + +시스템을 고도화하여 실시간 모니터링자동 차단격리경로 추적 등의 보안 기능을 수행한다 +EDR +, +, +, +. +발견된 위협에 대해 즉각적으로 기기를 차단하거나 파일을 삭제하는 등의 자동화된 대응을 수행한다. +실무 환경에서는 +전담 담당자를 배정하여 엔드포인트 위협을 지속적으로 모니터링하고 탐지 정책을 +EDR + +강화하거나외부 +서비스를 활용하여 엔드포인트에 대한 실시간 대응 체계를 구현할 수 있다 +, +MDR +. +향상 + +솔루션을 도입하였는가 +XDR +? + +의 탐지 범위에서 확장되어 넘어 네트워크서버클라우드 +이메일 등의 위협을 탐지하고 대응 +EDR +, +, +, +하는 +시스템을 도입한 단계이다 +실무 환경에서는 엔드포인트에서 발생한 이벤트와 네트워크 +XDR +. +트래픽 정보클라우드 접근 로그 등을 상관관계 분석하여개별 +만으로는 파악하기 어려운 복합적인 +, +, +EDR + +공격 흐름예시 +이메일을 통한 악성코드 유입 +엔드포인트 감염 +내부망 확산 시도을 하나의 +( +: +) +→ +→ +통합된 공격으로 인식하고 추적하여 대응할 수 있다또한머신러닝 +기반의 자동 분석 엔진을 +. +, +(ML) +바탕으로 위협 탐지 정확도를 향상시키며학습한 정상 행위 패턴을 기반으로 이상 행위를 탐지한다 +, +. + +| 항목 | 2.4.1 엔드포인트 및 확장된 탐지∙대응(EDR 및 XDR) | | +| --- | --- | --- | +| 설명 | 엔드포인트와 확장된 영역에서 실시간으로 위협을 탐지하고 대응하는 고급 보안 솔루션으로 이를 이용하여 엔드포인트의 이상행위를 탐지해야 한다. | | +| 성숙단계 | 기존 | 기본적인 EDR 솔루션을 도입하였는가? | +| | 초기 | EDR 시스템을 고도화하여 실시간 위협 탐지 및 자동 대응이 가능한가? | +| | 향상 | XDR 솔루션을 도입하였는가? | +| | 최적화 | AI 기반 EDR∙ XDR 솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가? | + + +최적화 + +기반 +솔루션을 통해 실시간으로 모든 기기에 대한 위협 탐지가 가능한가 +AI +EDR·XDR +? + +기반의 이상 행위 탐지 엔진이 전사 모든 엔드포인트를 실시간으로 분석하고위협이 발생하면 +ML/AI +, + +해당 기기를 격리하거나 접근권한을 제한하는 등의 자동화된 조치를 수행한다 +실무 환경에서는 +. +외부의위협 인텔리전스 +정보와 연동하여 최신 +침해 지표 +공격 지표 +정보공격 캠페인 + +(TI) +IOC( +)/IOA( +) +, +정보 등의 위협 정보를 +시스템에 실시간으로 반영한다이를 통해 알려지지 않은 위협까지 +EDR/XDR +. + +탐지하고분석된 위협 정보를 바탕으로 리스크를 예측하여 선제적인 방어 체계를 +, +수립하는 등 자동화된 +대응 전략을 수행한다. + +항목 +자산취약성 및 패치 관리 자동화 +2.4.2 +, +설명 +네트워크에 연결된 모든 장치의 보안 취약점을 관리하고최신 보안 패치를 자동으로 적용하는 +, + +기능이다. +성숙단계 +기존 +자산 및 취약성을 수동으로 평가하는가? +주요 자산 및 취약성 목록이 작성되어 있는가? +초기 +자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패 +치가 이루어지는가? +향상 +모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? +취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 +관리가 가능한가? +최적화 +취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? +자산관리취약성 평가패치 관리 시스템이 통합되어 있는가 +, +, +? +세부 설명 +기존 +자산 및 취약성을 수동으로 평가하는가? + +조직 내 네트워크에 연결된 기기 및 소프트웨어 자산에 대한 목록을 작성하고필요한 자산에 대해 +, +서 +보안 담당자가 수동으로 주기적예시월 회 +연 회 +또는 필요 시 취약점 진단 도구를 사용하여 +( +: +/ +) +취약성 점검을 수행한다실무 환경에서는 자산 목록과 취약점 점검 결과가 별도로 관리되며실시간 +. +, + +연동이나 자동화된 평가는 이루어지지 않는다. +주요 자산 및 취약성 목록이 작성되어 있는가? + +주요 자산과 알려진 취약점예시 +목록을 취약점 관리 문서 등을 통해 관리하는 단계이다실무 +( +: CVE +) +. +환경에서는 이 목록이 정기적으로 갱신되지 않아 최신 상태가 아니거나모든 자산과 취약점을 포괄 +, +하지 못하는 경우가 많다따라서 취약점 정보의 실시간성이나 정확성은 낮은 편이다 +. +. +초기 +자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패치가 이루어지는가? + +취약성 관리 시스템이나 +시스템을 통해 자동화된 취약성 탐지 및 패치 배포 프로세스를 구현 +PMS +하기 시작하는 단계이다실무 환경에서는 이러한 전용 시스템 이외에도 +의 취약점 탐지 기능 +. +EPP, EDR +, +또는 +의 그룹 정책 +을 통한 패치 배포 기능 등을 활용할 수 있다주기적으로예월 회 +Directory +(GPO) +. +( +: +, +주 회 +자산을 스캔하여 알려진 취약점을 탐지하고패치 관리 시스템이나 +등을 통해 관련 +) +, +Directory + +패치를 자동으로 배포하는 기능이 적용된다다만이 단계에서는 자동 패치 적용 범위가 일부 시스템에 +. +, + +한정되거나중요도에 따라 관리자 승인 후 배포되는 등 완전 자동화로 가기 위한 초기 수준을 의미한다 +, +. + +| 항목 | 2.4.2 자산, 취약성 및 패치 관리 자동화 | | +| --- | --- | --- | +| 설명 | 네트워크에 연결된 모든 장치의 보안 취약점을 관리하고, 최신 보안 패치를 자동으로 적용하는 기능이다. | | +| 성숙단계 | 기존 | 자산 및 취약성을 수동으로 평가하는가? | +| | | 주요 자산 및 취약성 목록이 작성되어 있는가? | +| | 초기 | 자동화된 취약성 평가 및 패치 관리 도구를 도입하여 취약성 발견 시 자동 패 치가 이루어지는가? | +| | 향상 | 모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? | +| | | 취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? | +| | 최적화 | 취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? | +| | | 자산관리, 취약성 평가, 패치 관리 시스템이 통합되어 있는가? | + + +향상 +모든 자산에 대해 지속적인 취약성 평가 및 패치 관리가 자동화되어 있는가? + +정의된 취약점 관리 프로세스에 따라 온프레미스클라우드모바일 등 모든 +자산에 대한 취약점 +, +, +IT +진단을 지속적으로예시 +상시 또는 일 단위 +수행하고 필요 시 자동으로 패치를 수행한다 +실무 +( +: +) +. +환경에서는 취약점 관리 시스템 +등에서 취약점 평가를 수행하고발견된 취약점은 위험도 +, EPP, EDR +, +및 자산 중요도에 따라 분류된다분류 결과에 따라 +등을 통해 패치 배포가 +. +Directory, PMS, EPP, EDR + +자동화되거나 승인 후 배포되는 취약점 조치 워크플로우를 운영한다. +취약성 및 패치 관리 시스템을 다른 보안 시스템과 통합하여 종합적인 보안 관리가 가능한가? + +중앙 관리 시스템정보보안 포털 +등을 통해 +등의 보안 시스템과 +( +, ICAM +) +Directory, ITAM, EPP, EDR +연동하여 중앙집중화된 취약점 및 패치 관리를 수행한다실무 환경에서는 각 시스템 영역에서 수행된 +. + +취약점 관리 프로세스평가 +분류 +조치 +결과가 중앙 관리 시스템으로 통합되어 가시화된다 +또한 +( +, +, +) +. +, +취약점 발견 시 해당 정보가 +으로 전송되어 위협 인텔리전스와 연계 분석되거나 +SIEM +, SOAR 플레이북을 +통해 자동으로 대응 조치예시 +을 통한 임시 차단 정책 적용 +를 통한 자동화된 +패치 +( +: EDR +, EPP/PMS +OS + +등가 수행되는 등 종합적인 보안 관리 및 자동화된 조치가 이루어진다 +) +. +최적화 +취약점을 사전에 식별하고 자동으로 패치 적용이 가능한가? + +를 기반으로 기 등록된 자산의 속성 정보설치된 +구성 설정 등를 학습하여 이상 행위를 +ML/AI +( +S/W, +) +탐지하고 +외부 위협 인텔리전스 +를 통합하여 알려지지 않은 취약점 +등까지 사전에 +, +(TI) +(Zero-Day +) +식별하고예측한다 +식별된 취약점은 위험도 +자산 중요도 +비즈니스 영향도 등을 고려하여 패치 + +. +, +, +우선순위가자동으로 지정되고 자동화된 패치 배포가 이루어진다실무 환경에서는 최신 위협 동향과 + +. + +자산의 행위 분석 결과를 통합하여 +단순히 알려진 취약점에 대응하는 것을 넘어 보다 지능적이고 +, +선제적인 보안 유지가 가능해진다. +자산관리취약성 평가패치 관리 시스템이 통합되어 있는가 +, +, +? + +자산 인벤토리취약성 평가패치 관리가 단일 플랫폼 또는 통합 대시보드로 완벽하게 연계되어 실 +, +, +시간으로 현황을 파악하고 정책을 집행한다 +실무 환경에서는 +등 개별 +. +ITAM, EDR/XDR, EPP/PMS +시스템의정보가 정보보안 포털이나 +시스템 등으로 집약되어관리자가 한 곳에서 모든 자산의 + +ICAM +, + +취약점 상태를 확인하고 필요한 패치 조치를 승인하거나 자동화 정책을 설정할 수 있다. + + +### 3. 네트워크 + +네트워크 세분화 +항목 +매크로 세그멘테이션 +3.1.1 +설명 +매크로 세그멘테이션은 네트워크를 대규모 세그먼트로 나누어 주요 보안 영역을 구분하는 +기술이다. +이는 네트워크 전체를 보호하는데 필요한 보안 경계를 설정하는데 사용된다. +성숙단계 +기존 +비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? +네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 +있는가? +초기 +매크로 세그먼트 간에 보안 정책을 적용하였는가? +매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? +향상 +매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? +매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? +최적화 +기반 매크로 세그먼트 관리 도구가 적용되었는가 +AI +? +세부 설명 +기존 +비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? + +조직 내부의 네트워크가 목적에 맞게 논리적 또는 물리적으로 분리된다실무 환경에서는 인터넷망 +. +, +업무망개발망 등과 같이 큰 단위의 비즈니스 영역별로 네트워크를 구분하는 것을 의미한다 +, +. VLAN, +서브넷라우팅 기술들이 적용되어 있으며주로 방화벽을 통해 각 세그먼트 간의 기본적인 접근제어가 +, +, + +이루어진다. +네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? + +시스템서버 +데이터베이스 +핵심 애플리케이션 등 주요 자산을 중심으로 +네트워크 목적에 맞게 +( +), +, +, +트래픽흐름을 분석하고 기능 단위의 세그먼트를 구성하기 시작한다실무 환경에서는 주요 망간예시 + +. +( +: +업무망 +인터넷망 등의 네트워크 트래픽 흐름을 수동으로 분석하여 세그멘테이션의 기준을 수립 +) +↔ +하고 필요한 보안 정책예시특정 포트 허용차단 등을 정의하는 단계를 의미한다 +( +: +/ +) +. +초기 +매크로 세그먼트 간에 보안 정책을 적용하였는가? + +각 세그먼트 간 트래픽에 대해 +방화벽 정책 등을 통해 인바운드아웃바운드 트래픽 제어를 +ACL, +/ +수행한다. +방화벽 등이 각 세그먼트 경계에 위치하며세그먼트 간 통신은 정의된 정책 및 최소 +L3 +, + +| 항목 | 3.1.1 매크로 세그멘테이션 | | +| --- | --- | --- | +| 설명 | 매크로 세그멘테이션은 네트워크를 대규모 세그먼트로 나누어 주요 보안 영역을 구분하는 기술이다. 이는 네트워크 전체를 보호하는데 필요한 보안 경계를 설정하는데 사용된다. | | +| 성숙단계 | 기존 | 비즈니스 영역별로 매크로 세그멘테이션이 되어 있는가? | +| | | 네트워크 내 주요 자산과 트래픽 흐름 기반으로 매크로 세그먼트가 구성되어 있는가? | +| | 초기 | 매크로 세그먼트 간에 보안 정책을 적용하였는가? | +| | | 매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? | +| | 향상 | 매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? | +| | | 매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? | +| | 최적화 | AI 기반 매크로 세그먼트 관리 도구가 적용되었는가? | + + +권한 원칙을 기반으로 통제된다실무 환경에서는 망연계 시스템이나 +시스템 등을 활용하여 특정 +. +VDI + +경로예시 +인터넷망 +업무망 등의 파일 전송이나 서비스 접근을 제어하고 결재 프로세스 등을 +( +: +) +→ +적용할수 있다 + +. +매크로 세그먼트 간에 트래픽을 모니터링하고 비정상적 활동을 탐지하는가? + +각 세그먼트 간의 트래픽을 모니터링하여 비정상적인 활동예시내부 자료의 비정상적인 대량 전송 +( +: +시도허용되지 않은 세그먼트 간 접근 우회 시도 등을 탐지하기 시작한다실무 환경에서는 방화벽 +, +) +. +로그 +네트워크 트래픽 분석 도구예시 +등 +등을 활용하여 기본적인 트래픽 패턴을 +, +( +: NetFlow, sFlow +) +분석하고사전에 정의된 임계치를 초과하거나 정책 위반 시도가 발생하면 관리자에게 경고를 보낸다 +, +. +향상 +매크로 세그먼트 간 맞춤형 보안 정책이 설정되었는가? + +각 매크로 세그먼트의 기능리스크 수준자산 민감도에 따라 세분화된 맞춤형 보안 정책을 적용한다 +, +, +. +실무 환경에서는 +기술 등을 활용하여중앙 정책 엔진에서 각 세그먼트별 특성을 +SDN +, +고려한 보안 +정책을 동적으로 관리하고 적용한다 +예를 들어 +민감 데이터가 포함된 세그먼트에는 더 엄격한 +. +, +접근제어규칙을 적용하고일반 업무 세그먼트에는 상대적으로 완화된 정책을 적용하는 등 차등화된 + +, +관리가 가능하다. +매크로 세그먼트 간 트래픽을 조정하고 보안 위협에 대응 가능한가? + +컨트롤러 등을 기반으로 네트워크 트래픽 흐름을 프로그래밍 방식으로 제어하며보안 위협에 +SDN +, +동적으로 대응한다 +실무 환경에서는 +등 보안 시스템과 연동하여 +특정 세그먼트에서 +. +SIEM/SOAR +, +이상트래픽이나 보안 위협이 탐지될 경우 +컨트롤러가 해당 세그먼트의 트래픽을 조정하거나 + +SDN +네트워크에서 격리하는 등의 동적 조치를 수행할 수 있다. +최적화 + +기반 매크로 세그먼트 관리 도구가 적용되었는가 +AI +? + +를 기반으로 세그먼트 간 통신 패턴을 학습하여 정상 행위 기준선을 설정하고이를 벗어나는 +ML/AI +, +비정상 연결이나 위협을 예측하고 식별한다실무 환경에서는 +등의 +. +SDN, ZTNA, ICAM, SIEM/SOAR +시스템과 연동하여 +가 위협을 예측하거나 감지하면 정책 기반의 자동화된 조치를 실시간으로 수행한다 +, AI +. +예를 들어 +가 특정 세그먼트의 감염 위험을 예측하면 +자동으로 해당 세그먼트를 네트워크에서 +, AI +, +격리시키거나 주요 자산을 안전한 세그먼트로 재배치하는 등 자율적인 관리 및 대응이 이루어진다. + +항목 +마이크로 세그멘테이션 +3.1.2 +설명 +마이크로 세그멘테이션은 네트워크를 세분화하여 각 워크로드나 애플리케이션별로 세그먼트를 +설정하는 기술로보다 정밀한 보안 제어를 가능하게 한다 +, +. +접속하는 +또는 응용 접근을 기반으로 네트워크 세분화를 정의하거나 물리적 세분화를 수행 +ID +하고 문서화하여야 한다. +또한 가능하다면 호스트 수준의 프로세스 마이크로 세그멘테이션을 수행한다. +성숙단계 +기존 +애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? +수동으로 세그먼트를 구성하는가? +초기 +애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정 +되었는가? +네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지 +차단할 +· +수 있는가 + +? +마이크로 세그먼트 간 트래픽 모니터링이 가능한가? +향상 +모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? +애플리케이션별 격리 메커니즘이 적용되었는가? +최적화 +기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가 +AI +? +세부 설명 +기존 +애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? + +애플리케이션워크로드 단위로 기본적인 트래픽 분리를 수행하며각 단위에 수동으로 보안 정책을 +, +, +적용 한다실무 환경에서는 웹 서버 +서버 등 시스템 내의 애플리케이션 단위로 네트워크 세그 +. +, DB +먼트를 나눌 수 있다정책은 주로 방화벽 또는 +을 활용한 정적인 형태로 구성된다 +. +ACL +. +수동으로 세그먼트를 구성하는가? + +관리자가 네트워크 흐름을 분석하고 수동으로 각 세그먼트를 정의하며세그먼트별 정책 설정 또한 +, +수동으로 수행된다 +실무 환경에서는 새로운 애플리케이션이나 워크로드가 추가될 때마다 관리자가 +. +직접 네트워크 장비방화벽라우터 등 +기준으로 세그먼트 및 정책을 설정변경해야 함을 의미한다 +( +, +) +/ +. +초기 +애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정되었는가? + +각 애플리케이션 및 워크로드 별로 독립된 세그먼트 구성을 부분적으로 자동화하거나 중앙 관리 도구를 +통해 효율적으로 맞춤형 보안 정책을 적용한다 +실무 환경에서는 접속하는 +또는 애플리케이션 +. +ID +접근을기반으로 네트워크 세분화를 정의하거나 물리적 세분화를 수행하고 문서화한다보안 정책은 + +. +중앙 정책 엔진 등을 통해 관리될 수 있다. + +| 항목 | 3.1.2 마이크로 세그멘테이션 | | +| --- | --- | --- | +| 설명 | 마이크로 세그멘테이션은 네트워크를 세분화하여 각 워크로드나 애플리케이션별로 세그먼트를 설정하는 기술로, 보다 정밀한 보안 제어를 가능하게 한다. 접속하는 ID 또는 응용 접근을 기반으로 네트워크 세분화를 정의하거나 물리적 세분화를 수행 하고 문서화하여야 한다. 또한 가능하다면 호스트 수준의 프로세스 마이크로 세그멘테이션을 수행한다. | | +| 성숙단계 | 기존 | 애플리케이션 및 워크로드 기준으로 마이크로 세그멘테이션이 되어 있는가? | +| | | 수동으로 세그먼트를 구성하는가? | +| | 초기 | 애플리케이션 및 워크로드에 따른 마이크로 세그멘테이션 보안 정책이 설정 되었는가? | +| | | 네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지 ·차단할 수 있는가? | +| | | 마이크로 세그먼트 간 트래픽 모니터링이 가능한가? | +| | 향상 | 모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? | +| | | 애플리케이션별 격리 메커니즘이 적용되었는가? | +| | 최적화 | AI 기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가? | + + +네트워크 수준에서 마이크로 세그멘테이션을 수행하여 워크로드 간 이동을 탐지차단 할 수 있는가 +· +? + +워크로드 간 트래픽 흐름을 +수준으로 식별하고 +허용되지 않은 트래픽 흐름예시 +비인가된 +L4/L7 +, +( +: +워크로드간 통신 시도 등을 탐지하고 차단한다실무 환경에서는 호스트 기반 방화벽이나 네트워크 + +) +. + +방화벽 +등을 활용하여 정의된 정책에 따라 워크로드 간 이동을 제어한다 +, IPS +. +마이크로 세그먼트 간 트래픽 모니터링이 가능한가? + +각 마이크로 세그먼트 간의 트래픽 흐름을 실시간으로 수집하고 +기본적인 네트워크 관리 시스템 +, +수준 이상의 분석을 수행한다실무 환경에서는 수집된 트래픽 로그를 +등의 보안 분석 +(NMS) +. +SIEM +시스템과 연계하여 비정상적인 통신 시도나 정책 위반 여부를 확인하고 관리자에게 경고를 보낸다이 +. + +단계에서는 주로 사전에 정의된 규칙 기반으로 이상 징후를 탐지한다. +향상 +모든 네트워크 트래픽에 대한 보안 정책 설정 및 제어가 가능한가? + +클라우드 기반 컨테이너 +등의 동적 자산을 포함하여 모든 네트워크 트래픽에 대한 정책을 설정 +, VM +한다 +실무 환경에서는 +등을 통해 풀 패킷 기반의 트래픽 가시성을 확보하고 +또는 +. +NDR +, ZTNA +등의 시스템을 활용하여 단순 포트 기반이 아닌 특정 애플리케이션프로세스사용자 +등의 +NGFW +, +, +ID + +트래픽 흐름을 식별하여 보안 정책을 설정하고 상세 세그먼트 단위의 제어를 수행한다. +애플리케이션 별 격리 메커니즘이 적용되었는가? + +애플리케이션 별로 사용자 +리스크 수준을 기반으로 하는 격리 메커니즘을 적용하여 컨테이너 +/ID, +, +호스트단위의 세그먼트를 수행한다실무 환경에서는 호스트 기반 마이크로 세그멘테이션 시스템이나 + +. + +개별 호스트 방화벽 체계를 통합 관리하여 +워크로드 내부의 프로세스 수준까지 통신을 제어하고 +, +, +허가되지 않은 통신을 차단하는 등 정교한 격리 정책을 적용한다. +최적화 + +기반 마이크로 세그먼트 관리 도구가 적용되어 위협에 자동으로 대응 가능한가 +AI +? + +분석 엔진이 지속적인 네트워크 트래픽 모니터링을 통해 네트워크 및 워크로드 트래픽을 실 +ML/AI +시간으로 분석하여 정상비정상 트래픽을 식별하고 +기반으로 최신화된 네트워크 토폴로지 맵을 +/ +, AI +관리한다 +실무 환경에서는 호스트 기반 마이크로 세그멘테이션 시스템이나 +등 +. +SIEM/SOAR, ZTNA +제어 시스템과 연동하여 비정상 트래픽이나 위협이 식별되면 자동으로 보안 정책을 조정하거나 +세그먼트별개별 방화벽 정책을 생성 및 반영하여 워크로드를 격리하는 등의 자동화된 조치를 수행한다 + +. +이를 통해 내부 자산들에 대한 개별 방화벽 체계를 통해 횡적 이동 +자체를 +' +(Lateral Movement)' +효과적으로차단한다 + +. + +항목 +소프트웨어 정의 네트워킹 +3.1.3 +설명 +네트워크를 소프트웨어 기반으로 관리하고 제어하는 기술로 +프로그래밍 가능 인프라를 +, SDN +구현하여 제어 영역과 데이터 영역을 분리하고 데이터 영역의 요소를 중앙에서 관리 및 제어를 +수행한다. +네트워크 유연성을 높이고 보안을 강화하는데 사용된다. +성숙단계 +기존 +소프트웨어 정의 네트워크가 도입되어 있는가? +클라우드 적용 시 +기본 구조를 설정하고 트래픽을 제어할 수 있는가 +, SDN +? +초기 +클라우드 적용 시 +을 활용하여 네트워크 트래픽을 중앙에서 관리하고정 +, SDN +, +책을 실시간으로 적용 가능한가? +향상 +클라우드 적용 시 +기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가 +, SDN +? +최적화 +클라우드 적용 시 +기반 위협 관리 및 트래픽 예측 등이 가능한 +기능을 +, AI +SDN + +적용하였는가? +세부 설명 +기존 +소프트웨어 정의 네트워크가 도입되어 있는가? + +컨트롤러 기반의 네트워크 인프라 구성이 시작되는 단계이다 +네트워크 장비의 제어 영역 +SDN +. +과 데이터 영역 +을 분리하여 +중앙 컨트롤러를 통해 네트워크 정책 및 +(Control Plane) +(Data Plane) +, +트래픽경로를 관리하는 기본적인 +구조를 도입한다 + +SDN +. +클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? + +하이브리드 또는 클라우드 환경에 +구조를 설정하여 네트워크 경로를 정의한다실무 환경에서는 +SDN +. + +컨트롤러를 기반으로 데이터 영역 내의 네트워크 트래픽을 제어하여 중앙 집중화된 관리를 +SDN +시작하는단계를 의미한다 + +. +초기 +클라우드 적용 시 +을 활용하여 네트워크 트래픽을 중앙에서 관리하고정책을 실시간으로 적용 +, SDN +, +가능한가? + +중앙 집중식 +컨트롤러를 통해 클라우드 환경의 트래픽 흐름을 모니터링하기 시작하며네트워크 +SDN +, + +접근제어 +우회 경로 설정 등을 정책 기반으로 실시간 적용하는 단계이다 +실무 환경에서는 +QoS, +, +. +온프레미스에서사용하던 네트워크 보안 정책예시 +특정 +대역 차단을 +환경에 통합하여 + +( +: +IP +) +SDN +적용함으로써하이브리드 환경에 일관된 보안 정책을 반영할 수 있다 + +. +향상 +클라우드 적용 시 +기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가 +, SDN +? + +클라우드 워크로드 간 세그먼트를 세분화하여 +컨트롤러를 통한 세밀한 제어를 수행한다실무 +SDN +. +환경에서는 +등 퍼블릭 클라우드의 +환경에서 제공하는 +AWS, Azure, NCP +VPC(Virtual Private Cloud) + +| 항목 | 3.1.3 소프트웨어 정의 네트워킹 | | +| --- | --- | --- | +| 설명 | 네트워크를 소프트웨어 기반으로 관리하고 제어하는 기술로, SDN 프로그래밍 가능 인프라를 구현하여 제어 영역과 데이터 영역을 분리하고 데이터 영역의 요소를 중앙에서 관리 및 제어를 수행한다. 네트워크 유연성을 높이고 보안을 강화하는데 사용된다. | | +| 성숙단계 | 기존 | 소프트웨어 정의 네트워크가 도입되어 있는가? | +| | | 클라우드 적용 시, SDN 기본 구조를 설정하고 트래픽을 제어할 수 있는가? | +| | 초기 | 클라우드 적용 시, SDN을 활용하여 네트워크 트래픽을 중앙에서 관리하고, 정 책을 실시간으로 적용 가능한가? | +| | 향상 | 클라우드 적용 시, SDN 기능을 확장하여 트래픽 관리 및 보안을 적용하고 있는가? | +| | 최적화 | 클라우드 적용 시, AI 기반 위협 관리 및 트래픽 예측 등이 가능한 SDN 기능을 적용하였는가? | + + +기능을 활용하여 가상 네트워크 내 트래픽 관리 및 보안 기능을 확장 적용한다 +은 조직의 +SDN +. SDN +보안 정책 프레임워크와 통합되어 +단순히 트래픽 경로를 제어하는 것을 넘어 내부의 +, +ICAM, NDR, +마이크로 세그멘테이션 시스템 등과 연동하여 세그먼트별 보안 정책을 실시간으로 +SIEM/SOAR, ZTNA, + +자동 적용하고 네트워크 성능을 최적화한다. +최적화 +클라우드 적용 시 +기반 위협 관리 및 트래픽 예측 등이 가능한 +기능을 적용하였는가 +, AI +SDN +? + +기반의 +관리 시스템을 바탕으로 트래픽 패턴을 학습하여 트래픽 혼잡을 예측하거나 이상 +ML/AI +SDN + +트래픽을 탐지한다실무 환경에서는 +컨트롤러가 +마이크로 세 +. +SDN +ICAM, NDR, SIEM/SOAR, ZTNA, +그멘테이션 시스템 등과 연동하여 +엔진이 식별한 예측 정보나 탐지된 이상 징후에 따라 +, ML/AI +자동으로보안 정책을 조정하거나 네트워크 세그먼트를 동적으로 변경격리하는 등의 자율적인 + +/ +조치를수행한다이는 실시간 위협 관리 및 선제적인 네트워크 성능 최적화를 가능하게 한다 + +. +. + +위협 대응 +항목 +위협 대응 +3.2.1 +설명 +위협 대응 기능은 네트워크 내에서 발생하는 모든 잠재적 위협을 신속하게 감지하고 대응하는 +시스템을 말한다. +이 기능은 침입 탐지 및 방지 시스템 +위협 인텔리전스 +자동화된 대응 시스템 등을 +(IDS/IPS), +, +포함한다. +성숙단계 +기존 +등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가 +IDS IPS +? +- +네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? +초기 +자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 +대응이가능한가 + +? +애플리케이션 프로파일에 따른 트래픽 관리가 이루어지는가? +향상 +실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? +네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? +최적화 +네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? +애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 +가능한가? +세부 설명 +기존 + +등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가 +IDS·IPS +? + +침입 탐지방지 시스템 +솔루션을 도입하여 패턴 기반의 시그니처 탐지를 수행하는 단계이다 +/ +(IDS/IPS) +. +실무 환경에서는 외부 또는 내부 네트워크 경계에 +를 설치하여 알려진 공격 패턴시그니처과 +IDS/IPS +( +) + +일치하는 트래픽을 탐지하고 차단하는 기본적인 감시 체계를 운영한다. +네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? + +수동으로 설정된 룰 기반의 +또는 방화벽 정책을 통해 트래픽을 제어한다실무 환경에서는 +ACL +. +IP +주소 +포트 번호 등을 기준으로 정적인 접근통제 규칙을 설정하며 +이상 트래픽이 발견되면 주로 +, +, +관리자가로그를 확인하고 수동으로 차단 정책을 추가하는 등의 조치를 수행한다 + +. +초기 +자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? + +기존 +외에도 +등의 추가 시스템을 도입각 솔루션을 연동하여 보안 이벤트가 발생하면 +IDS/IPS +SIEM +, +즉각적으로 관리자에게 알림을 보내는 등의 조치를 수행한다. +애플리케이션 프로파일에 따른 트래픽 관리가 이루어지는가? + +트래픽 흐름을 단순 +주소 +나 포트 +기반이 아닌 애플리케이션 기반 +으로 분류하고 +각 +IP +(L3) +(L4) +(L7) +, + +| 항목 | 3.2.1 위협 대응 | | +| --- | --- | --- | +| 설명 | 위협 대응 기능은 네트워크 내에서 발생하는 모든 잠재적 위협을 신속하게 감지하고 대응하는 시스템을 말한다. 이 기능은 침입 탐지 및 방지 시스템(IDS/IPS), 위협 인텔리전스, 자동화된 대응 시스템 등을 포함한다. | | +| 성숙단계 | 기존 | IDS∙ IPS 등의 솔루션을 도입하여 주요 위협에 대한 감시 체계가 이루어지고 있는가? | +| | | 네트워크 정적 규칙에 의한 수동적 트래픽 관리가 이루어지는가? | +| | 초기 | 자동화된 위협 탐지 및 대응 시스템이 도입되어 보안 이벤트 발생 시 즉각 대응이 가능한가? | +| | | 애플리케이션 프로파일에 따른 트래픽 관리가 이루어지는가? | +| | 향상 | 실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? | +| | | 네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? | +| | 최적화 | 네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? | +| | | 애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? | + + +애플리케이션단위의 정상적인 트래픽 흐름을 모니터링 기반으로 프로파일링하여 정책을 적용하기 + + +시작한다. 실무 환경에서는 +등을 활용하여 특정 애플리케이션예시 +그룹웨어 +등을 + +NGFW +( +: +, ERP +) +식별하고, 해당 애플리케이션의 정상적인 통신 패턴허용된 프로토콜포트통신 대상 등을 기반으로 + +( +, +, +) + +트래픽 관리 정책을 수립하여 적용한다. +향상 +실시간 위협 탐지 및 위협 행위에 대한 선제적 대응 체계가 마련되어 있는가? + +머신러닝 +기반의 네트워크 트래픽 패턴 학습과 외부 위협 인텔리전스 +연동을 통해 실시간으로 +(ML) +(CTI) + +위협을 탐지한다 +실무 환경에서는 +시스템 등을 활용하여 패킷 수준에서 위협 행위를 심층 +. +NDR +분석하고, +을 확장하여 +의 플레이북 기반으로 특정 +차단 +감염된 세그먼트 격리 등 +SIEM +SOAR +IP +, +식별된위협에 대한 자동화된 대응을 수행한다이를 통해 선제적인 방어 체계를 구축하기 시작한다 + +. +. +네트워크 동적 규칙에 의한 네트워크 트래픽 관리가 이루어지는가? + +등 위협 탐지 시스템을 네트워크 기반의 정책 엔진 +컨트롤러 +SIEM/SOAR, NDR +(SDN +, NGFW/ZTNA, +마이크로 세그멘테이션 시스템 등과 연동한다 +위협이 식별되면 정책 엔진이 방화벽 규칙 +ICAM, +) +. +, +플로우 테이블 +접근 정책 등을 동적으로 조정하여 해당 위협 트래픽을 차단하거나 격리 +SDN +, ZTNA +하는 등 자동화된 트래픽 관리를 수행한다. +최적화 +네트워크 전반에서 발생하는 위협에 대하여 즉각적이고 자동화된 대응이 가능한가? + +통합 위협 대응 플랫폼정보보안포털 +등을 구축하여 단일 플랫폼에서 모든 네트워크 +( +, ICAM, XDR +) +트래픽을 관리모니터링하며플랫폼은 각 보안 시스템 +등과 연동되어 발생한 +/ +, +(EDR, NDR, SIEM/SOAR +) + +위협에 대해 자동화된 대응을 수행한다실무 환경에서는 +엔진이 상관 분석을 통해 복합적인 +. +ML/AI +위협을 실시간으로 탐지하고 +플레이북 등을 통해 관리자 개입 없이 즉각적으로 격리 +차단 +, SOAR +, +등의 조치를 수행한다. +애플리케이션 프로파일의 변화 등을 탐지하여 동적 네트워크 트래픽 관리가 가능한가? + +을 활용하여 애플리케이션의 정상적인 트래픽 흐름프로파일을 학습하고 +애플리케이션 프로 +ML/AI +( +) +, +파일의 변화나 비정상 흐름을 탐지하면 +마이크로 세그멘테이션 시스템 등과 연동하여 +ICAM, SDN, +트래픽 경로를 자동으로 변경하거나 해당 애플리케이션 및 워크로드를 격리하는 등의 동적 제어를 +수행한다이를 통해 애플리케이션 수준의 이상 행위에도 자동화된 대응이 가능해진다 +. +. + +트래픽 암호화 +항목 +트래픽 암호화 +3.3.1 +설명 +암호화는 네트워크 내에서 데이터의 기밀성을 유지하고 +전송 중인 데이터를 보호하기 위한 +, +기술이다. +이는 +데이터 암호화 및 전송 계층 보안 등을 포함한다 +SSL/TLS, VPN, +. +성숙단계 +기존 +내외부 트래픽 일부 암호화가 가능한가? +- +등 표준 프로토콜 사용과 +등을 사용하고 있는가 +SSL, TLS +VPN +? +초기 +네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? +데이터 전송 시 암호화를 필수로 하고 있는가? +향상 +전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? +최신 암호화 기술을 적용하고고급 암호화 키 관리 시스템이 도입되어 있는가 +, +? +최적화 +최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? +통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? +세부 설명 +기존 +내외부 트래픽 일부 암호화가 가능한가 +· +? + +일부 트래픽에 대해 +기반의 암호화가 적용되어 있으며 +외부 웹사이트 접속 등 웹 통신은 +SSL/TLS +, +프로토콜을 사용한다그러나 전체 내부 네트워크 통신이나 모든 데이터 경로에 대한 포괄적인 +HTTPS +. + +암호화는 이루어지지 않고 있는 상태이다. + +등 표준 프로토콜 사용과 +등을 사용하고 있는가 +SSL, TLS +VPN +? + +등 +등과 같이 일반적인 표준 암호화 프로토콜을 사용하여 특정 +SSL/TLS, SSH, VPN(IPsec, SSL-VPN +) +네트워크 구간예시망별 방화벽 통신 간 +터널링 활용외부 환경에서 접근 시 +활용한 +( +: +VPN +, +SSL-VPN + +접근 등이나 서비스에 대한 암호화를 수행한다 +) +. +초기 +네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? + +조직 전체 네트워크 및 데이터 흐름에 암호화 정책을 확대 적용하여 평문 통신을 사용하지 않는다. +실무 환경에서는 모든 주요 애플리케이션서버 간 통신 및 사용자 연결에 암호화 적용을 구현한다 +, +. +예를 들어서버 접근 시에는 서버 접근제어 키 +등 암호화 프로토콜이 적용되고웹 애플리케이션 +, +, SSH +, + +접근 시에는 암호화 키를 검증하여 접근한다. +데이터 전송 시 암호화를 필수로 하고 있는가? + +데이터 전송 시 암호화를 기본 정책으로 설정하며관리 콘솔 +애플리케이션 간 통신에 일관되게 +, +, API, + +적용한다 +실무 환경에서는 데이터 전송 시 암호화된 +또는 +터널링 등을 활용하며 +. +VPN +SSL-VPN +, +등 평문 통신 프로토콜은 사용하지 않는다 +FTP, HTTP +. + +| 항목 | 3.3.1 트래픽 암호화 | | +| --- | --- | --- | +| 설명 | 암호화는 네트워크 내에서 데이터의 기밀성을 유지하고, 전송 중인 데이터를 보호하기 위한 기술이다. 이는 SSL/TLS, VPN, 데이터 암호화 및 전송 계층 보안 등을 포함한다. | | +| 성숙단계 | 기존 | 내∙외부 트래픽 일부 암호화가 가능한가? | +| | | SSL, TLS 등 표준 프로토콜 사용과 VPN 등을 사용하고 있는가? | +| | 초기 | 네트워크 전반에 걸쳐 암호화 기능이 적용되어 있는가? | +| | | 데이터 전송 시 암호화를 필수로 하고 있는가? | +| | 향상 | 전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? | +| | | 최신 암호화 기술을 적용하고, 고급 암호화 키 관리 시스템이 도입되어 있는가? | +| | 최적화 | 최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? | +| | | 통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? | + + +향상 +전송 중 데이터 암호화 및 저장된 데이터도 모두 암호화하고 있는가? + +전송 중 데이터뿐만 아니라 저장 되어 있는 데이터도 암호화를 수행한다스토리지백업로그 +등 +. +, +, +, DB + +전사 모든 데이터에 대한 암호화가 이루어진다 +실무 환경에서는 +암호화 등과 같은 +. +eDRM, AIP, DB +시스템을 통해 데이터 자체를 암호화하고해당 시스템을 +시스템 등과 연동하여 데이터 +, +ZTNA, ICAM + +전송 시 암호화 여부를 이중으로 검증하고 통제할 수 있다 +네트워크 암호화와 데이터 암호화가 +. +이중으로적용되어 안전한 통신과 데이터 보호를 보장한다 + +. +최신 암호화 기술을 적용하고고급 암호화 키 관리 시스템이 도입되어 있는가 +, +? + +최신 표준 암호화 기술예시 +등이 적용된다또한키 생성 +( +: TLS 1.3, ECDHE, RSA-4096, RSA-8192 +) +. +, +, +배포수명 주기 관리회전폐기 등 암호화 키 라이프 사이클을 중앙에서 관리할 수 있는 키 관리 +, +, +, +시스템 +등이 도입되어 전사적인 키 관리를 운영한다 +(KMS) +. +최적화 +최신 암호화 기술을 도입하고 성능 저하 없이 데이터 보호가 가능한가? + +성능과 보안을 동시에 충족하는 경량화된 암호화를 구현한다하드웨어 가속 등을 통해 암호화 성능을 +. + +향상시키며 +암호화 정책이 애플리케이션 성능에 미치는 영향을 최소화한다 +양자내성암호 +, +. PQC( +) +알고리즘을적용하여 양자 컴퓨팅 위협에 대비한 장기 데이터 보호를 수행한다 +실무 환경에서는 + +. +양자 키 관리 장비 +양자 키 분배 장비 +양자 통신 암호화 장비 +등을 도입하고 +QKMS( +), QKD( +), QENC( +) +알고리즘을 적용하여 +기반의 터널링키 관리키 분배 등을 전사적으로 적용한다 +PQC +, PQC +, +, +. +통합된 키 관리 시스템을 통하여 안전한 키 관리가 이루어지고 있는가? + +를 확장하여 통합 키 관리 시스템을 통해 정책 기반의 키 관리를 수행하며 +KMS +, PAM, ICAM, ZTNA +등 시스템과 연동하여 네트워크 +시스템 +애플리케이션 접근 시 전사적으로 일관된 키 관리 체계를 +, +, +적용한다또한 +시스템 등과 연동하여 키 생성사용폐기 등 키 라이프사이클 전반에 +. +, SIEM/SOAR +, +, +대한 모니터링 및 감사 추적성을 강화한다. + +트래픽 관리 +항목 +데이터 흐름 매핑 +3.4.1 +설명 +네트워크 내에서 데이터가 어떻게 이동하는지를 시각화하고 분석하는 과정이다. +이를 통해 데이터의 출처 +목적지 +경로 등을 파악하여 보안 정책을 설계하고 위협을 예측할 +, +, +수 있다. +성숙단계 +기존 +데이터 트래픽에 대한 수동적 모니터링을 수행하는가? +네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? +초기 +애플리케이션 단위의 트래픽 매핑이 가능한가? +자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 +실시간으로 매핑되는가? +향상 +주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 +탐지하는가? +데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고위협을 사전에 식별 +, +가능한가? +최적화 +기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가 +AI +? +네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? +세부 설명 +기존 +데이터 트래픽에 대한 수동적 모니터링을 수행하는가? + +트래픽 흐름에 대한 시스템 자체적인 로그 수집방화벽 룰스위치 포트 미러링 등의 방식을 사용 +, +, +하여 수동으로 데이터 흐름을 모니터링한다실무 환경에서는 방화벽이나 +또는 시스템서버 +자 +. +IPS, +( +) +체에서 네트워크 트래픽 기반의 기본적인 데이터 흐름을 모니터링하고이상 징후 발견 시 수동적인 +, +조치예시방화벽 정책 변경를 수행하는 단계이다 +( +: +) +. +네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? + +주요 서버 +클라이언트 간 데이터 흐름을 주로 관리자의 경험에 의존하여 수동으로 매핑한다 +, DB, +. +실무 환경에서는 네트워크 구성도나 데이터 흐름도 등을 수기로 작성하여 관리하고 업데이트하며, +실제 트래픽 흐름과의 일치 여부를 실시간으로 검증하기 어렵다통신 경로에 대한 보안 정책 적용은 +. + +미흡한 상태이다. +초기 +애플리케이션 단위의 트래픽 매핑이 가능한가? + +등을 통해 기본적인 네트워크 트래픽을 모니터링하고트래픽 흐름을 사용자 및 애플리케이션 +NMS +, +단위로 분류하여 매핑하기 시작한다실무 환경에서는 주요 자산 간 흐름 파악을 넘어특정 애플리 +. +, +케이션예시 +그룹웨어 등과 관련된 데이터 흐름을 식별하는 수준을 의미한다 +매핑된 결과는 +( +: ERP, +) +. +마이크로 세그멘테이션 정책 수립 등의 기초 자료로 활용될 수 있다. + +| 항목 | 3.4.1 데이터 흐름 매핑 | | +| --- | --- | --- | +| 설명 | 네트워크 내에서 데이터가 어떻게 이동하는지를 시각화하고 분석하는 과정이다. 이를 통해 데이터의 출처, 목적지, 경로 등을 파악하여 보안 정책을 설계하고 위협을 예측할 수 있다. | | +| 성숙단계 | 기존 | 데이터 트래픽에 대한 수동적 모니터링을 수행하는가? | +| | | 네트워크 내 주요 데이터 흐름을 수동으로 매핑하는가? | +| | 초기 | 애플리케이션 단위의 트래픽 매핑이 가능한가? | +| | | 자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? | +| | 향상 | 주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? | +| | | 데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고, 위협을 사전에 식별 가능한가? | +| | 최적화 | AI 기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가? | +| | | 네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? | + + +자동화된 데이터 흐름 매핑 도구를 도입하여 네트워크 내 모든 데이터 흐름이 실시간으로 매핑되는가? + +네트워크 트래픽 분석 도구 또는 +등의 시스템을 활용하여 자동으로 데이터 흐름을 매핑하고 +NMS +실시간으로 업데이트하여 관리한다실무 환경에서는 수동으로 다이어그램을 그리는 대신시스템이 +. +, +자동으로 생성갱신하는 데이터 흐름도나 네트워크 다이어그램 등을 활용하여 현재의 통신 경로와 +· +데이터 이동 현황을 파악할 수 있다. +향상 +주요 데이터 트래픽과 관련된 보안 정책이 수립되어 비정상적 데이터 이동을 탐지하는가? + +노드 간의 관계나 접속 패턴을 기반으로 주요 데이터 트래픽에 대한 보안 정책을 수립하며, eDLP, +등의 시스템과 연동하여 정형화된 데이터 흐름에 대한 정상 기준 +을 바탕 +AIP, ICAM, ZTNA +(Baseline) +으로 비정상적인 데이터 이동을 탐지한다실무 환경에서는 +을 통해 풀 패킷 기반으로 네트워크 +. +NDR +흐름을 분석하여 정상 기준을 설정하고 +이 기준을 벗어나는 비정상적인 데이터 이동예시 +대량의 +, +( +: +내부 자료 외부 전송 시도 등을 탐지 시 +와 연계하여 관리자에게 알람을 보내거나 관련 +) +SIEM/SOAR +조치를 수행할 수 있다. +데이터 흐름에 대한 분석을 상관관계를 통하여 분석하고위협을 사전에 식별 가능한가 +, +? + +네트워크 트래픽 흐름사용자 +위치시간접속 포트 등을 연계한 상관 분석을 수행하여 비정상적인 +, +ID, +, +, + +데이터 흐름을 조기에 탐지한다실무 환경에서는 +시스템 등을 활용해 풀 패킷 기반으로 +. +NDR, XDR +네트워크 흐름 및 상관관계 분석을 수행하고 +연계를 통해 비정상적인 데이터 이동 탐지 +, SIEM/SOAR + +시 관리자 알람 또는 자동화된 조치를 수행한다또한외부 위협 인텔리전스 +정보와 연동하여 +. +, +(CTI) +알려진 악성 +과의 통신 시도 등 외부 위협과 관련된 데이터 흐름을 식별하고 사전에 차단할 +IP/URL +수 있다탐지된 위협 정보는 정책 엔진에 반영되어 실시간으로 업데이트될 수 있다 +. +. +최적화 + +기반 예측 분석 도구를 활용하여 데이터 흐름의 변화를 실시간으로 감지하는가 +AI +? + +를 기반으로 정상비정상 데이터 흐름 패턴을 학습하여 새로운 이상 징후를 실시간으로 탐지 +ML/AI +/ +한다실무 환경에서는 +등의 시스템이 +엔진을 활용하여 데이터 흐름의 지속적으로 +. +NDR, XDR +ML/AI +모니터링하여 데이터 흐름 변화를 실시간으로 감지하고 알려지지 않은 위협 패턴까지 예측 분석하여 +즉각적이고 자동화된 대응이 가능하다. +네트워크 트래픽 우선순위를 동적으로 변경하고 구성할 수 있는가? + +데이터 흐름 분석 결과를 +마이크로 세그멘테이션 +등 다양한 시스템과 +ICAM, ZTNA, +, XDR, SIEM/SOAR + +유기적으로 연동하여 자동화된 대응 체계를 구축한다실무 환경에서는 +가 식별한 위협이나 비정상 +. +AI + +흐름에 따라 +플레이북 등을 통해 특정 트래픽을 자동으로 격리하거나비즈니스 중요도에 따라 +SOAR +, + +마이크로 세그멘테이션 시스템 등을 통해 트래픽 우선순위를 실시간으로 조정하는 등 +ICAM, ZTNA, +데이터 흐름에 따라 트래픽 관리가 동적으로 이루어진다. + +네트워크 회복성 +항목 +네트워크 회복성 +3.5.1 +설명 +네트워크 회복성은 네트워크가 다양한 위협이나 장애로부터 신속하게 복구하고 +지속적으로 +, +가용성을 유지할 수 있도록 하는 능력이다. +이 기능은 다중 경로 설계자동 복구재해 복구 계획 등을 포함한다 +, +, +. +성숙단계 +기존 +애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 +있는가? +재해 복구에 대한 주기적 백업 실시가 이루어지는가? +네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? +초기 +네트워크 내 다중 경로가 설계되어 있고자동 복구 시스템이 도입되어 있는가 +, +? +자동화된 장애 조치 +메커니즘이 적용되어 있는가 +(Failover) +? +네트워크 이중화 설계가 되어 있는가? +향상 +네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? +재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? +최적화 +어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? +네트워크 장애를 실시간으로 감지하고 복구하며모든 복구 절차를 자동화하였는가 +, +? +세부 설명 +기존 +애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? + +장애 발생 시 수동 복구를 수행할 수 있도록 주요 시스템 및 애플리케이션을 식별하고 이에 대한 +기본적인 복구 절차와 백업 경로가 문서 형태로 마련되어 있다실무 환경에서는 +업무 연속성 +. +BCP( +계획및 +재해 복구 계획개념이 정보보안 정책 등에 반영되어 있으나실제 복구 과정은 자동화 +) +DRP( +) +, +되지않고 수동 절차에 의존한다 + +. +재해 복구에 대한 주기적 백업 실시가 이루어지는가? + +복구를 목적으로 수동 백업을 주기적예시 +일주 단위으로 진행한다 +중요 데이터의 경우 정책을 +( +: +/ +) +. +수립하여 이중 백업소산 백업이나 외부 저장소 +센터 등 +저장을 적용할 수 있다백업 및 복구 +, +(DR +) +. +과정은 주로 수동으로 관리된다. +네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? + +중요 네트워크 장비예시라우터방화벽 등 게이트웨이 역할 장비를 식별하고 이에 대한 장애 대응 +( +: +, +) + +절차가 수립되어 있다실무 환경에서는 일부 중요 장비에 한해 기본적인 이중화가 구성되어 있거나 +. +, +유휴 장비를 활용한 수동 전환 또는 교체 절차가 문서화 되어 있는 수준이다. + +| 항목 | 3.5.1 네트워크 회복성 | | +| --- | --- | --- | +| 설명 | 네트워크 회복성은 네트워크가 다양한 위협이나 장애로부터 신속하게 복구하고, 지속적으로 가용성을 유지할 수 있도록 하는 능력이다. 이 기능은 다중 경로 설계, 자동 복구, 재해 복구 계획 등을 포함한다. | | +| 성숙단계 | 기존 | 애플리케이션 및 워크로드에 대한 기본적인 복구 계획과 백업 경로가 마련되어 있는가? | +| | | 재해 복구에 대한 주기적 백업 실시가 이루어지는가? | +| | | 네트워크 장비에 대한 장애 대응 절차가 수립되어 있는가? | +| | 초기 | 네트워크 내 다중 경로가 설계되어 있고, 자동 복구 시스템이 도입되어 있는가? | +| | | 자동화된 장애 조치(Failover) 메커니즘이 적용되어 있는가? | +| | | 네트워크 이중화 설계가 되어 있는가? | +| | 향상 | 네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? | +| | | 재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? | +| | 최적화 | 어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? | +| | | 네트워크 장애를 실시간으로 감지하고 복구하며, 모든 복구 절차를 자동화하였는가? | + + +초기 +네트워크 내 다중 경로가 설계되어 있고자동 복구 시스템이 도입되어 있는가 +, +? + +라우팅 프로토콜 +등을 통해 링크 장애를 대비한 대체 경로를 확보하며 +등으로 +(RIP/OSPF/BGP +) +, LACP + +물리적인 링크를 이중화본딩하거나 +등으로 물리적으로 이중화된 경로 환경에서 루프를 방지하고 +( +) +STP + +대체 경로를 확보하여 네트워크 인프라를 구성한다 +네트워크 경로 또는 시스템 장애가 발생하면 +. +프로토콜에의해 자동으로 대체 경로가 활성화되어 기본적인 복구가 이루어진다 + +. +자동화된 장애 조치 +메커니즘이 적용되어 있는가 +(Failover) +? + +메커니즘을 바탕으로 네트워크 장비 또는 시스템 장애가 발생하면 자동으로 예비 시스템 +Failover +이 작동 +하여 서비스 중단 시간을 최소화하는 구성이 적용되기 시작한다실무 환경 +(Standby) +(Active) +. +에서는 인라인 +보안 장비 등의 장애 시 트래픽 흐름을 유지하기 위한 +바이패스나 +(Inline) +S/W +H/W +바이패스 기능또는 라우터방화벽 등에서 +이중화 구성을 통해 주 장비 +장애 시 +, +/ +Active-Standby +(Active) + +예비 장비 +로 트래픽을 자동으로 넘기는 메커니즘 등이 이에 해당한다 +(Standby) +. +네트워크 이중화 설계가 되어 있는가? + +네트워크 구성상 이중 스위치 및 다중 라우터 등을 구성하여 단일 또는 일부 네트워크 장비 장애 시 +서비스 영향 범위를 최소화하는 이중화 설계가 적용된다실무 환경에서는 내부 네트워크의 설계와 +. +구성을 고려하여 이중화 설계가 반영되어 있으며 +장애 발생 시 장애 대응 절차에 따라 조치가 +, +이루어진다 +또한기본적인 위협 발생 시 라우팅 경로 등을 수정하여 조치할 수 있는 체계가 마련 +. +, +되기 시작한다. +향상 +네트워크가 장애나 공격에도 지속적으로 서비스 지원이 가능한가? + +네트워크 장애 및 공격 발생 후에도 비즈니스와 연관된 주요 서비스가 중단되지 않도록 논리적 및 +물리적 회복성을 모두 고려하여 네트워크 구성을 +또는 +이중화 구조로 +Active-Active +Active-Standby +구성하고 +장애 발생 시 자동화된 복구 절차가 즉각적으로 수행된다 +실무 환경에서는 +등을 +, +. +RPA +활용하여 백업 관리 시스템과 연동된 자동 복구 스크립트를 실행하거나 +환경에서 동적으로 +, SDN +트래픽경로를 재설정하는 등의 조치를 통해 서비스 연속성을 보장한다 + +. +재해 복구 계획에 따라 주기적으로 테스트하여 항상 준비 상태가 유지되어 있는가? + +주기적으로예시 반기별연간 +재해 복구 +시나리오 기반의 모의 테스트를 수행하여 복구 절차의 +( +: +, +) DR( +) + +유효성을 검증한다 +실무 환경에서는 핫 사이트 또는 웜 사이트 수준의 +환경을 구축하고 +실제 +. +DR +, +재해 상황을 가정한 테스트를 통해 복구 절차의 문제점을 식별하고 개선한다테스트 결과를 기반으로 +. + +복구 목표 시간 +및 복구 목표 시점 +을 최적화하고 항상 준비 상태를 유지한다 +(RTO) +(RPO) +. +최적화 +어떠한 상태에서도 네트워크 서비스의 중단 없이 지속적 운영이 가능한가? + +네트워크의 모든 구성 요소가 이중화되어 있으며 +장애 및 공격 발생 시 자동으로 정상 네트워크 +, +경로로 +전환하고 복구 절차를 수행한다 +또한 전체 서비스 가용성을 실시간으로 모니터링하고 + +. +, +기반 분석 결과에 따라 +마이크로 세그멘테이션 +등의 다양한 +ML/AI +ICAM, ZTNA, +, XDR, SIEM, SOAR + +시스템과 자동으로 연동되어 트래픽을 선제적으로 분산하고 +부하로 인한 장애를 사전에 차단하는 +, +등 어떠한 상황에도 탄력적인 운영이 가능한 자율적인 시스템 환경을 구축한다. +네트워크 장애를 실시간으로 감지하고 복구하며모든 복구 절차를 자동화하였는가 +, +? + +를 바탕으로 실시간으로 네트워크 장애를 예측하고 탐지하며장애 탐지 시 자동으로 네트워크 +ML/AI +, + +경로를 전환하고 모든 복구 절차를 관리자 개입 없이 수행한다 +마이크로 세그멘 +. NDR, ICAM, ZTNA, +테이션, +과 네트워크 구성이 연동되어 장애 발생 예측 시점부터 복구 완료까지 전 +XDR, SIEM, SOAR +과정이 자동화되어 운영된다. + + +### 4. 시스템 + +접근통제 +항목 +접근통제 +4.1.1 +설명 +사용자와 기기가 네트워크와 시스템에 접근할 때 +허용된 자원만을 사용할 수 있도록 권한을 +, +부여하고 이를 엄격하게 관리하는 보안 기능이다. +이를 통해 적절한 자격을 가진 사용자만이 필요한 리소스에 접근할 수 있으며 +보안 사고를 +, +예방할 수 있다. +성숙단계 +기존 +사용자 및 기기에 수동으로 권한을 부여하는가? +기반 접근제어를 수행하는가 +RBAC +? +권한 관리를 수동으로 수행하는가? +초기 +역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? +실시간 접근권한 부여가 가능한가? +권한 변경 사항이 자동으로 반영되는가? +특정 리소스에 대한 접근 제한승인 정책이 자동으로 적용 가능한가? +- +향상 +기반 접근제어를 수행하는가 +ABAC +? +다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? +위치기기 상태시간 등 +( +, +, +) +최적화 +사용자기기의 상태를 실시간으로 분석하고 실시간자동으로 권한 조정이 가능한가? +- +- +모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? +시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? +위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? +세부 설명 +기존 +사용자 및 기기에 수동으로 권한을 부여하는가? + +관리자가 사용자기기별로 수동으로 시스템에 대한 접근권한을 설정한다 +실무 환경에서는 개별 +/ +. +시스템예시 +( +: 윈도우리눅스 서버에서 로컬 계정을 직접 생성하거나접근권한 대장을 스프레드시트 + +, +) +, + +등으로 관리자가 수동 관리함을 의미한다이 방식은 권한 부여회수가 실시간으로 반영되지 않으며 +. +/ +, +인적 실수로 인한 리스크가 존재한다. + +기반 접근제어를 수행하는가 +RBAC +? + +미리 정의된 사용자 역할 +에 따라 접근권한을 부여하며역할별 접근권한에 따른 제어를 수행한다 +(Role) +, +. +실무 환경에서는 +의 보안 그룹이나 개별 시스템의 사용자 그룹을 활용하여 개발자 +운영자 +Directory +' +', ' +' +등 미리 정의된 역할 +에 따라 접근권한을 부여한다 +(Role) +. + +| 항목 | 4.1.1 접근통제 | | +| --- | --- | --- | +| 설명 | 사용자와 기기가 네트워크와 시스템에 접근할 때, 허용된 자원만을 사용할 수 있도록 권한을 부여하고 이를 엄격하게 관리하는 보안 기능이다. 이를 통해 적절한 자격을 가진 사용자만이 필요한 리소스에 접근할 수 있으며, 보안 사고를 예방할 수 있다. | | +| 성숙단계 | 기존 | 사용자 및 기기에 수동으로 권한을 부여하는가? | +| | | RBAC 기반 접근제어를 수행하는가? | +| | | 권한 관리를 수동으로 수행하는가? | +| | 초기 | 역할과 권한 기반으로 중앙 집중형으로 권한 부여가 가능한가? | +| | | 실시간 접근권한 부여가 가능한가? | +| | | 권한 변경 사항이 자동으로 반영되는가? | +| | | 특정 리소스에 대한 접근 제한∙승인 정책이 자동으로 적용 가능한가? | +| | 향상 | ABAC 기반 접근제어를 수행하는가? | +| | | 다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가? (위치, 기기 상태, 시간 등) | +| | 최적화 | 사용자∙기기의 상태를 실시간으로 분석하고 실시간∙자동으로 권한 조정이 가능한가? | +| | | 모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? | +| | | 시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? | +| | | 위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? | + + +권한 관리를 수동으로 수행하는가? + +권한의 생성부여변경폐기 등의 관리를 수동으로 수행하여 이력 추적이나 실시간 반영이 어려운 +, +, +, +상태이다실무 환경에서는 권한 요청을 이메일이나 그룹웨어 결재 +헬프데스크 티켓 등으로 처리 +. +, IT +하더라도최종적인 작업은 관리자가 각 시스템에 접속하여 수동으로 수행함을 의미한다 +, +. +초기 +역할과권한 기반으로 중앙 집중형으로 권한 부여가 가능한가 + +? + +권한 관리를 위한 중앙 집중형 시스템시스템 접근제어 +접근제어 +등을 구축하고이 시스템이 +( +, DB +, IAM +) +, + +등 계정 관련 솔루션과 연동되어 사용자 역할 +에 따른 권한을 중앙 시스템에서 +Directory, HRM +(Role) +일괄적으로 부여하고 관리하기 시작한다. +실시간 접근권한 부여가 가능한가? + +사용자가 그룹웨어나 +등 시스템의 포털 등을 통해 권한을 요청할 경우승인 절차를 거쳐 사용자 +IAM +, + +정보를 기반으로 관리자가 승인 여부를 판단하고 권한을 부여할 수 있으며이를 통해 수동 작업 대비 +, + +리소스 접근에 소요되는 시간을 단축한다. +권한 변경 사항이 자동으로 반영되는가? + +사용자 정보 변경부서 이동 +직무 변경 +퇴사 등이 +인사관리 +시스템 등에 반영되면 해당 +( +, +, +) +HRM( +) +정보를연동된 중앙 집중형 시스템 +등에서 +정책에 따라 권한을 자동으로 반영 + +(Directory, IAM +) +RBAC +하거나 +시스템 접근제어 +접근제어 등 +시스템의 권한을 회수하는 등 신규 역할에 맞는 +PAM( +, DB +) +권한을재부여하여 권한 변경 사항을 반영할 수 있다 + +. +특정 리소스에 대한 접근 제한승인 정책이 자동으로 적용 가능한가 +· +? + +시스템 접근제어 +접근제어시스템 등에서 조직 내 주요 리소스예시운영 서버고객 +등 +PAM( +, DB +) +( +: +, +DB +) +접근 시 +등 중앙 시스템의 사용자 역할 정보를 기반으로 사전에 정의된 정책을 자동으로 적용 +, IAM +한다 +실무 환경에서는 +권한은 역할 기반예시 +운영팀 +그룹으로 자동 승인하되 +또는 +. +'user' +( +: ' +' +) +, 'root' +권한은 별도 승인 절차예시그룹웨어 결재 연동를 거치도록 접근을 제한하는 정책을 의미한다 +'DBA' +( +: +) +. +향상 + +기반 접근제어를 수행하는가 +ABAC +? + +역할 기반 접근제어에서 확장되어 +사용자 역할 +외에도 다양한 속성 +정보를 +RBAC( +) +, +(Role) +(Attribute) +기반으로 권한 정책을 설정하는 +속성 기반 접근제어를 도입하여 접근제어를 수행한다여기서 +ABAC( +) +. +다양한 속성이란 사용자 속성예시 +부서 +직책 +보안 등급 +리소스 속성예시 +데이터 민감도 +파일 +( +: +, +, +), +( +: +, +형식 +환경 속성예시 +접속 시간 +위치 +기기 보안 상태 +등을 의미한다 +실무 환경에서는 이러한 +), +( +: +, +, +) +. +속성들을조합하여 +사용자 속성 +리소스 속성 +환경 속성 +허용거부 +와 같은 + +'IF [ +AND +AND +] THEN [ +/ +]' +형식의 정교한 접근 규칙을 정책 엔진예시 +에 설정한다 +예를 들어 +동일한 인사팀 +( +: ICAM, PAM) +. +, +' +' +역할이라도 +근무 시간 중이고 사내망에서 접속하며 보안 업데이트 완료된 기기를 사용할 때만 +' +' +' +' +' +' +' +급여 정보 수정권한을 부여하는 식으로단순 역할뿐만 아니라 다양한 속성을 실시간으로 평가하여 +' +, + +접근제어를 수행한다. + +다양한 조건을 바탕으로 세밀하고 동적으로 실시간 접근권한이 부여되는가위치기기 상태시간 등 +?( +, +, +) + +사용자의 위치접속 기기의 보안 상태예시필수 +설치 여부사용자 별 스코어링 +접속 시간대 +, +( +: +S/W +, +), + +등 상황별 속성컨텍스트 +정보를 바탕으로 세분화된 접근 정책을 정의한다실무 환경에서는 +( +) +. +ICAM, +등 중앙 시스템의 정책 엔진이 이러한 속성 정보를 실시간으로 모니터링하여 접근권한을 +ZTNA, PAM + +동적으로 조정한다예를 들어동일한 운영자역할이라도 사무실위치에서는 모든 시 +. +, +' +' +' +' +스템 접근을 +허용하지만 +외부에서 미등록 기기로 접속 시에는 접근을 차단하는 등 세밀한 제어를 수행한다 +, ' +' +' +' +. +최적화 +사용자기기의 상태를 실시간으로 분석하고 실시간자동으로 권한 조정이 가능한가 +· +· +? + +기반 분석을 바탕으로 사용자 행동 및 기기 상태를 실시간으로 분석하고 이상 징후 탐지 시 +ML/AI +자동으로 권한을 회수하거나 접근을 제한하는 등의 조치를 수행한다실무 환경에서는 +의 +. +SIEM/SOAR + +기능 등을 활용해 시스템이 지속적으로 사용자 및 기기의 위험 점수를 스코어링하고이 점수가 +UEBA +, +임계치를 넘어서면 +등 정책 엔진과 연동하여 관리자 개입 없이 권한을 즉시 조정한다 +ICAM, PAM, ZTNA +. +모든 접근제어는 중앙집중적인 시스템에서 실시간으로 관리되는가? + +접근 요청의 승인정책 적용 등 접근제어를 위한 모든 기반 정보가 중앙 시스템 +정보보안 포털 +, +(ICAM, + +등에서 실시간으로 수집되고전사 내 모든 시스템온프레미스클라우드 +포함에 대한 접근제어를 +) +, +( +, +, SaaS +) + +등을 통하여 일괄 관리하여 접근제어를 관리한다 +PAM +. +시스템에 영향을 미치는 명령 실행 시 실시간 신뢰도 재산정이 가능한가? + +시스템에 영향을 미치는 특정 명령어예시 +실행 시 사용자의 신뢰 점수를 실시간 +( +: rm -rf, shutdown) +으로 재평가한다 +실무 환경에서는 +시스템 등이 명령어 실행 요청을 가로채 정책 엔진 +. +PAM +(ICAM, +등에 신뢰도 재평가를 요청하고신뢰도 기준 미달 시 강화된 추가 인증 +을 요구 +SIEM/SOAR +) +, +(MFA) +하거나해당 명령어 실행을 제한하는 등의 조치를 수행한다 + +. +위험 분석 기반 지속적인 접근제어 정책이 도입되어 있는가? + +외부 위협 인텔리전스 +등 새로운 위험 정보는 즉각적으로 학습하여 정책 엔진 +(CTI) +(ICAM, SIEM +등에 반영하며시스템 접근 대상자에 대한 실시간 위험 평가를 수행하여 그 결과를 바탕으로 +/SOAR +) +, + +시스템 등을 통해 지속적인 접근제어를 수행한다실무 환경에서는 +를 활용해 위험 예측 +PAM +. +ML/AI +분석을 수행하고분석 결과를 바탕으로 접근 정책이 자율적으로 조정되는 수준을 의미한다 +, +. + +시스템 계정 관리 +항목 +4.2.1 PAM +설명 +은 권한 있는 사용자 및 시스템의 접근을 관리하고 모니터링하는 보안 체계로 +영구적인 +PAM +, +관리자높은 권한을 제거하는데 중점을 두며이를 위해 먼저 특권 계정 관리 +시스템을 +/ +, +(PAM) +구축하고권한 사용자를 이 시스템으로 이전하는 작업을 수행한다 +, +. +이후권한 상승 승인을 자동화하고시스템에 분석 데이터를 입력하여 이상 탐지를 수행하는 +, +, +방식으로 사용된다. +성숙단계 +기존 +시스템을 구축하였는가 +PAM +? +정책이 수립되어 있는가 +PAM +? +초기 +솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가 +PAM +? +자동화된 권한 상승 승인 기술이 도입되어 있는가? +향상 +솔루션을 통해 비정상적 활동이 탐지 가능한가 +PAM +? +최적화 +기반 위협 탐지 및 대응 기능을 활용하여 +시스템에 적용하였는가 +AI +PAM +? +세부 설명 +기존 + +시스템을 구축하였는가 +PAM +? + +관리자 계정 +시스템 계정 등 권한이 있는 사용자 계정을 별도로 식별하고 +시스템 접근제어 또는 +, +, +접근제어 시스템과 같은 기본적인 +시스템을 도입하여 계정 관리를 시작하는 단계이다실무 +DB +PAM +. +환경에서는 이러한 시스템을 통해 특권 계정의 생성부여폐기 등을 관리하지만전사적인 통합 관리 +, +, +, +보다는개별 시스템 단위 또는 특정 영역예시서버 관리에 한정되어 적용되는 경우가 많다 + +( +: +) +. + +정책이 수립되어 있는가 +PAM +? + +권한 계정 사용 조건사용자대상 시스템시간대 등 +승인 절차권한 유효 기간 등의 기본적인 접근 +( +, +, +), +, + +정책을 문서화하고도입된 +시스템상에 정적인 규칙으로 반영한다이 단계에서는 정책이 주로 +, +PAM +. + +수동으로 관리되며실시간 상황 변화에 따른 동적인 정책 조정은 이루어지지 않는다 +, +. +초기 + +솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가 +PAM +? + +권한 계정으로의 로그인명령어 실행세션 기록 등을 실시간으로 모니터링하고사전에 정의된 정책 +, +, +, + +위반예시금지 명령어 실행 시도 +모니터링하여 +시스템을 통해 해당 세션을 강제 종료하거나 +( +: +) +PAM +특정 명령어 실행을 차단하는 등 초기 수준의 중앙 제어가 가능하다실무 환경에서는 시스템 접근 +. +제어 또는 +접근제어 솔루션의 감사 로그 및 세션 모니터링 기능을 활용한다 +DB +. +자동화된 권한 상승 승인 기술이 도입되어 있는가? + +시스템을 +그룹웨어 결재 시스템 등 계정 및 접근권한 관리 시스템과 연동하여 +사용자 +PAM +IAM, +, + +| 항목 | 4.2.1 PAM | | +| --- | --- | --- | +| 설명 | PAM은 권한 있는 사용자 및 시스템의 접근을 관리하고 모니터링하는 보안 체계로, 영구적인 관리자/높은 권한을 제거하는데 중점을 두며, 이를 위해 먼저 특권 계정 관리(PAM) 시스템을 구축하고, 권한 사용자를 이 시스템으로 이전하는 작업을 수행한다. 이후, 권한 상승 승인을 자동화하고, 시스템에 분석 데이터를 입력하여 이상 탐지를 수행하는 방식으로 사용된다. | | +| 성숙단계 | 기존 | PAM 시스템을 구축하였는가? | +| | | PAM 정책이 수립되어 있는가? | +| | 초기 | PAM 솔루션을 통해 사용자 접근을 모니터링하고 제어 가능한가? | +| | | 자동화된 권한 상승 승인 기술이 도입되어 있는가? | +| | 향상 | PAM 솔루션을 통해 비정상적 활동이 탐지 가능한가? | +| | 최적화 | AI 기반 위협 탐지 및 대응 기능을 활용하여 PAM 시스템에 적용하였는가? | + + +정보를기반으로 권한 요청에 대한 승인 여부를 +시스템상에서 판단하고 기본적인 자동화를 통해 + +PAM + +권한을 부여할 수 있다 +실무 환경에서는 사용자가 포털 등을 통해 특정 시간 동안 특정 시스템에 +. +대한 권한 상승을 요청하면승인 절차예시그룹웨어 결재 완료 시 +에서 계정과 권한 부여 +후 +, +( +: +IAM +) +시스템이 자동으로 상승된 권한을 일시 부여하여 시스템 접근을 제어하는 수준을 의미한다 +PAM +. +향상 + +솔루션을 통해 비정상적 활동이 탐지 가능한가 +PAM +? + +시스템을 +시스템과 같은 계정 및 접근권한 시스템 외에도 +등의 +PAM +IAM, ICAM +XDR, SIEM/SOAR +시스템과 연동하여 비정상적인 활동을 탐지한다실무 환경에서는 +시스템의 로그예시평소와 +. +PAM +( +: +다른 시간대의 로그인 시도과도한 실패 시도비정상적인 명령어 실행 등를 +로 전송하여 +, +, +) +SIEM/SOAR + +다른 시스템의 로그와 상관 분석을 수행한다 +보안 이벤트 발생 시 즉각적으로 관리자에게 알림을 +. +보내거나 +플레이북이나 +자체적인 기능을 통해 자동화된 조치예시의심 계정 임시 잠금를 +SOAR +PAM +( +: +) + +수행할 수 있다 +또한 +권한 요청 +승인 +사용 +폐기의 전 과정에 대한 절차 및 감사 로그 +. +, +, +, +, +기록을 +강화하여주기적인 분석을 수행하고 위협 탐지를 정교화한다 + +. +최적화 + +기반 위협 탐지 및 대응 기능을 활용하여 +시스템에 적용하였는가 +AI +PAM +? + +권한과 계정 및 접근제어의 이상 사용 패턴을 +을 기반으로 실시간으로 분석하며 +이상 사용 +ML/AI +, +패턴 탐지 시 자동으로 접근 차단 +추가 인증 요구 +세션 강제 종료 등의 조치를 수행한다 +실무 +, +, +. +환경에서는시스템 접근제어 +접근제어 +쿠버네티스 환경 접근제어 및 +연계를 통한 애플리 + +, DB +, +IDP +케이션업무 시스템의 특권 계정 권한 관리와 접근제어가 전사적으로 통합된 +시스템으로 통합 +( +) +PAM +되어 이루어진다해당 통합 +시스템은 +등과 유기적으로 연동되어 +. +PAM +SIEM/SOAR, EDR, ICAM, ZTNA +, +가 사용자 및 시스템의 평소 행동 패턴을 학습하고 실시간으로 분석한다이상 징후예시휴면 +ML/AI +. +( +: +계정의 비정상적 로그인 시도 +과도한 권한 상승 요청 +알려진 악성 행위 패턴과 일치하는 명령어 +, +, +실행 등 +탐지 시관리자 개입 없이 자동으로 접근을 차단하거나 세션을 종료하는 등 자율적인 위협 +) +, +대응을 수행한다또한 보안 위협 동향내부 감사 결과이상 징후 분석 결과 등을 지속적으로 학습하여 +. +, +, + +정책을 자동으로 업데이트하고 최적화한다 +PAM +. + +항목 +자격 증명 관리 +4.2.2 +설명 +자격 증명 관리는 사용자와 기기의 인증 정보를 안전하게 저장하고 관리하는 기능으로이를 +, +통해 네트워크 및 시스템 접근 시 올바른 자격 증명이 이루어지도록 한다. +이는 패스워드인증서다중 인증 +등을 포함한다 +, +, +(MFA) +. +성숙단계 +기존 +자격 증명이 수동으로 관리되는가? +패스워드에 기반한 인증 방식에 의존하는가? +자격 증명 관리가 체계적이지 않고 수동적인가? +초기 +자격 증명 시스템이 중앙에서 관리되며 자동화되는가? +등 보다 안전한 인증 방식이 적용되어 있는가 +MFA +? +향상 +생체 인증 등 고급 인증 방식이 도입되어 있는가? +자격 증명 관리 시스템을 고도화하여 관리하는가? +자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? +기반으로 실시간으로 인증정보 분석이 가능한가 +AI +? +최적화 +비정상적인 인증 시도를 실시간으로 차단 가능한가? +실시간으로 인증 정책 조정이 가능한가? +모든 자격 증명 데이터가 중앙관리되며자율적으로 운영되는가 +, +? +세부 설명 +기존 +자격 증명이 수동으로 관리되는가? + +사용자 계정패스워드인증서 등 자격 증명 정보가 스프레드시트 등에 수기로 관리된다실무 환경 +, +, +. +에서는 초기 패스워드 발급 +인증서 갱신 등의 작업이 관리자에 의해 수동으로 처리되며자동화된 +, +, +관리 체계가 부재하다. +패스워드에 기반한 인증 방식에 의존하는가? + +시스템 접근 시 단일 +패스워드 방식에 주로 의존하며 +다중 인증와 같은 추가 인증 방식은 +ID/ +, MFA( +) +개별 시스템이나 일부만 제한되어 적용되어 있다패스워드 정책 시 복잡도 요구사항이 낮거나 주기적인 +. +변경이 강제되지 않는 등의 리스크를 보유하고 운영된다. +자격 증명 관리가 체계적이지 않고 수동적인가? + +중앙 시스템을 통한 통합 자격 증명 관리는 구축되지 않았으며각 시스템 또는 서비스별로 자격 증명 +, + +관리가 개별적이고 분산되어 진행된다 +계정 생성 +권한 회수 +계정 비활성화삭제 등 자격 증명 +. +, +, +/ +라이프사이클 관리에 대한 체계적인 정책이나 자동화된 절차가 정의되지 않은 상태이다. + +| 항목 | 4.2.2 자격 증명 관리 | | +| --- | --- | --- | +| 설명 | 자격 증명 관리는 사용자와 기기의 인증 정보를 안전하게 저장하고 관리하는 기능으로, 이를 통해 네트워크 및 시스템 접근 시 올바른 자격 증명이 이루어지도록 한다. 이는 패스워드, 인증서, 다중 인증(MFA) 등을 포함한다. | | +| 성숙단계 | 기존 | 자격 증명이 수동으로 관리되는가? | +| | | 패스워드에 기반한 인증 방식에 의존하는가? | +| | | 자격 증명 관리가 체계적이지 않고 수동적인가? | +| | 초기 | 자격 증명 시스템이 중앙에서 관리되며 자동화되는가? | +| | | MFA 등 보다 안전한 인증 방식이 적용되어 있는가? | +| | 향상 | 생체 인증 등 고급 인증 방식이 도입되어 있는가? | +| | | 자격 증명 관리 시스템을 고도화하여 관리하는가? | +| | | 자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? | +| | | AI 기반으로 실시간으로 인증정보 분석이 가능한가? | +| | 최적화 | 비정상적인 인증 시도를 실시간으로 차단 가능한가? | +| | | 실시간으로 인증 정책 조정이 가능한가? | +| | | 모든 자격 증명 데이터가 중앙관리되며, 자율적으로 운영되는가? | + + +초기 +자격 증명 시스템이 중앙에서 관리되며 자동화 되는가? + +자격 증명 관리를 위한 중앙 관리 시스템 +등이 도입되어 자격 증명을 통합 관리하기 +(IAM, ICAM +) +시작하며, 생성배포폐기 등 기본적인 관리 프로세스가 시스템을 통해 자동화되기 시작한다실무 +, +, +. +환경에서는 +계정 생성 시 초기 패스워드가 자동으로 발급되거나퇴사 시 계정이 자동으로 +Directory +, +비활성화되는 등 초기 수준의 기초적인 자동화가 적용되는 단계를 의미한다. + +등 보다 안전한 인증 방식이 적용되어 있는가 +MFA +? + +기존 패스워드 방식 외에 +인증 앱 등 추가적인 인증 수단을 도입하여 +다중 인증를 수행 +OTP, +MFA( +) +한다인증 방식에 대한 정책예시관리자 계정 필수 적용원격 접속 시 적용 등을 정의하고 중앙 +. +( +: +, +) +관리 시스템 +시스템 +접근제어 등에 반영하여 전사적으로 일관된 자격 증명 및 +(SSO, IAM, ICAM, +/DB +) +인증 정책을 적용하기 시작한다. +향상 +생체 인증 등 고급 인증 방식이 도입되어 있는가? + +지문 +얼굴 인식 +홍채 스캔 등의 생체정보 기반 인증 수단 +등을 도입하여 사용자별 인증 +, +, +(FIDO2 +) +수단을 +다양화하고 +환경을 구축하기 시작한다 +실무 환경에서는 다양한 시스템에 + +Passwordless +. +또는 +솔루션과 연동하여 +사용자가 패스워드 없이 생체정보만으로 안전하게 인증할 수 +ICAM +MFA +, +있도록 지원한다. +자격 증명 관리 시스템을 고도화하여 관리하는가? + +중앙화된 자격 증명 관리 시스템 +시스템 등과 정책 엔진예시 +등을 +(ICAM, MFA +) +( +: ICAM, ZTNA, PAM +) +연동하여 정책에 따라 자격 증명 갱신유출 탐지예시다크웹 모니터링 연동 +강제 회수예시퇴사자 +, +( +: +), +( +: + +발생 시 즉시 비활성화등을 즉각적으로 수행하는 등 고도화된 관리 기능을 구현한다실무 환경에서는 +) +. + +주기적인 패스워드 변경 강제유출된 자격 증명 사용 시도 시 알림 및 자동 잠금 등의 기능이 이에 +, +해당한다. +자격 증명의 무결성을 보장하고 인증 프로세스가 강화되었는가? + +자격 증명 정보패스워드생체정보인증서 등는 암호화되어 안전하게 저장암호화 적용되며위변조 +( +, +, +) +( +) +, +- + +탐지 메커니즘을 통해 자격 증명 정보의 무결성을 검증한다실무 환경에서는 저장된 패스워드 +. +해시값 +이나인증서 파일의 무결성 등을 주기적으로 검증하고자격 증명 정보가 업데이트되면 실시간으로 + +, + +중앙 시스템에 반영되어 인증 프로세스가 강화된다. + +기반으로 실시간으로 인증정보 분석이 가능한가 +AI +? + +인증 패턴사용자 위치시간대 등 다양한 컨텍스트 정보를 +을 통해 실시간으로 분석하여 비 +, +, +ML/AI +정상적인 인증 시도예시 +등를 탐지한다 +실무 환경에서는 +( +: Credential Stuffing, Impossible Travel +) +. +이나 +의 +기능 등을 활용하여 위험도를 스코어링하고 +탐지된 이상 징후는 +ICAM +SIEM/SOAR +UEBA +, +관리자 알림 또는 자동화된 대응예시계정 잠금으로 이어질 수 있다 +( +: +) +. + +최적화 +비정상적인 인증 시도를 실시간으로 차단 가능한가? + +사용자 인증 시도 시 +기반의 +기능이 실시간으로 적용되어 비정상 시도예시 +ML/AI +UEBA +( +: Credential +등를 즉시 감지한다실무 환경에서는 감지된 비정상 시도에 대해 +Stuffing, Impossible Travel +) +. +ICAM, +등 정책 엔진과 +가 연동되어사전에 정의된 정책에 따라 관리자의 개입 없이 +ZTNA +SIEM/SOAR +, +자동 + +으로 +추가 인증 +을 요구하거나 해당 계정의 접근을 즉시 제한차단하는 등의 조치를 실시간으로 +(MFA) +( +) +수행한다 + +. +실시간으로 인증 정책 조정이 가능한가? + +를 기반으로 사용자 행동 +접속 환경기기 상태 +위치 +시간 등에 따른 위험을 실시간으로 +ML/AI +, +( +, +, +) +분석하고, 각 상황에 따른 사용자 및 기기의 동적인 위험 점수를 스코어링한다이러한 스코어링 결과는 +. + +실시간으로 정책 엔진예시 +등에 반영되어단순히 접근 허용차단을 넘어 인증 +( +: ICAM, ZTNA, PAM +) +, +/ +강도예시위험도 낮으면 +높으면 +나 인증 방식을 동적으로 조정하는 정책을 수행한다 +( +: +Passwordless, +MFA) +. +모든 자격 증명 데이터가 중앙관리 되며자율적으로 운영되는가 +, +? + +전사 모든 자격 증명 정보패스워드인증서 +키생체정보 등가 하나의 중앙 시스템 +등을 +( +, +, API +, +) +(ICAM +) + +통해 일괄 관리된다계정 생성권한 부여인증서키 갱신 및 폐기권한 만료 등 자격 증명 라 +. +, +, +/ +, +이프 +사이클 관리 프로세스 전체가 중앙 시스템을 통해 자동으로 수행예시입사자 발생 시 +을 연동해 +( +: +HRM + +필요 인증서 +키 자동 생성폐기 +정책 기반 자동 갱신회전된다 +이 중앙 시스템은 +, +/ +, +/ +) +. +SIEM/SOAR, +시스템 등과 유기적으로 연동되어 +가 자격 증명 사용 패턴유효 기간관련 위협 +PAM, ZTNA +, ML/AI +, +, +정보 등을 지속적으로 분석한다분석 결과를 바탕으로 정책을 자동으로 업데이트하고위험 예측예시 +. +, +( +: +곧 만료될 인증서휴면 계정의 비정상적 활동 가능성에 따라 선제적인 조치를 취하는 등 감사 추적성 +, +) + +확보는 물론 자율적인 운영 체계를 갖춘다. + +네트워크 분리 정책 +항목 +네트워크 세분화 및 그룹간 이동 +4.3.1 +설명 +네트워크 세분화는 네트워크를 작은 단위로 나누어 보안을 강화하는 방식으로그룹 간 이동을 +, + +통해 세분화된 네트워크 간에 안전한 이동을 보장한다. +이는 보안 정책을 세밀하게 적용하고필요에 따라 특정 그룹 간의 트래픽 이동을 제어하는 데 +, +사용된다. +성숙단계 +기존 +네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? +기본적인 경계형 네트워크 모델이 적용되어 있는가? +초기 +시스템 중요도에 따라 네트워크가 분리되어 있는가? +제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? +향상 +네트워크가 워크로드 별로 세분화되어 보안 정책이 각각 이루어지는가? +네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? +네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 +이루어지는가? +최적화 +그룹 간 이동 시 실시간으로 분석되고 제어되는가? +재인증 없는 그룹 간 이동이 가능한가? +실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? +세부 설명 +기존 +네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? + +단일 네트워크 또는 +중심의 단순 망 구성으로내부 시스템 간 통신은 대부분 자유롭게 허용 +VLAN +, +된다실무 환경에서는 서버 +등 내부 시스템들이 별다른 제약 없이 서로 통신할 수 있는 환경을 +. +, PC +의미하며이는 특정 시스템 침해 시 다른 시스템으로의 횡적 이동 +이 발생할 수 +, +(Lateral Movement) +있어 취약점을 보유하고 있는 구조이다. +기본적인 경계형 네트워크 모델이 적용되어 있는가? + +외부와 내부 네트워크 간에는 방화벽을 기준으로 세분화 되어 있다 +외부 공격 방어에 집중하는 +. +전통적인보안 모델이 적용되어 있다 +그러나 내부 네트워크 간의 세분화나 시스템 간 접근통제는 + +. +미흡하여내부로 침투한 위협이 확산되는 것을 막기 어렵다 +, +. +초기 +시스템 중요도에 따라 네트워크가 분리되어 있는가? + +업무 중요도를 기준으로 +또는 서브넷 단위의 네트워크가 분리되며시스템 간 접속과 이동을 +VLAN +, +제한하는 기본적인 보안 정책을 적용하기 시작한다실무 환경에서는 기존단계의 단순 망 구성에서 +. +' +' + +| 항목 | 4.3.1 네트워크 세분화 및 그룹간 이동 | | +| --- | --- | --- | +| 설명 | 네트워크 세분화는 네트워크를 작은 단위로 나누어 보안을 강화하는 방식으로, 그룹 간 이동을 통해 세분화된 네트워크 간에 안전한 이동을 보장한다. 이는 보안 정책을 세밀하게 적용하고, 필요에 따라 특정 그룹 간의 트래픽 이동을 제어하는 데 사용된다. | | +| 성숙단계 | 기존 | 네트워크 세분화 및 이동 통제가 거의 이루어지지 않는가? | +| | | 기본적인 경계형 네트워크 모델이 적용되어 있는가? | +| | 초기 | 시스템 중요도에 따라 네트워크가 분리되어 있는가? | +| | | 제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? | +| | 향상 | 네트워크가 워크로드 별로 세분화되어 보안 정책이 각각 이루어지는가? | +| | | 네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? | +| | | 네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? | +| | 최적화 | 그룹 간 이동 시 실시간으로 분석되고 제어되는가? | +| | | 재인증 없는 그룹 간 이동이 가능한가? | +| | | 실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? | + + +발전하여 +중요 시스템예시 +파일 서버 +서버 등이 위치한 네트워크와 일반 시스템이 위치한 +, +( +: +, DB +) +네트워크를분리하고 기본적인 접근제어를 적용하는 수준을 의미한다 + +. +제한적인 보안 통제를 적용하여 네트워크 간 이동 제어가 가능한가? + +방화벽 또는 보안 시스템의 +정책을 통해 분리된 네트워크 간또는 주요 시스템에 대해 네트워크 +ACL +, + +기반의 제한적인 접근제어를 수행하기 시작한다실무 환경에서는 단순히 외부내부 경계뿐만 아니라 +. +/ +, +내부의 중요 시스템 그룹과 다른 시스템 그룹 간의 이동 +에 대해 +주소 및 포트 기반의 +(East-West) +IP +정적 보안 정책을 적용하여 이동 제어를 시작하는 단계를 의미한다. +향상 +네트워크가 워크로드 별로 세분화되어 보안 정책이 각각 이루어지는가? + +각 서비스 유형자산 중요도 등을 기준으로 워크로드 단위의 네트워크 세분화마이크로 세그멘테이션를 +, +( +) + +수행하며 +또는 마이크로 세그멘테이션 시스템 등을 통해 분리한다실무 환경에서는 +나 +, SDN +. +NGFW +기반의 네트워크 기반 마이크로 세그멘테이션 또는 시스템 자체적인 호스트 방화벽 +호스트 +ZTNA +, +체계호스트 기반 마이크로 세그멘테이션를 구축하여 워크로드별로 세분화하고 각각의 보안 +IPS +( +) +정책을 적용한다 +분리된 네트워크 영역별 정책은 중앙 정책 엔진 +컨트롤러 +정책 서버 +. +(SDN +, ZTNA +등을 통해 관리될 수 있다 +) +. +네트워크 그룹 간 이동 시 강력한 접근통제와 인증이 수반되는가? + +세분화된 네트워크 그룹세그먼트 +간 이동 시 단순 +포트 기반 제어를 넘어개별 호스트 방화벽 +( +) +IP/ +, +체계호스트 +체계 등을 통해 필요한 시스템 단위의 접근통제를 적용한다실무 환경에서는 호스트 +, +IPS +. + +기반 마이크로 세그멘테이션 시스템 등을 활용하여 조건부 접근통제예시 +간 정해진 포트 통신만 +( +: DB + +허용하거나특정 배치 작업 시간에만 마이그레이션 정책을 적용를 수행한다또한네트워크 기준의 +, +) +. +, +시스템과 +과 연동하여 그룹 간 이동 요청 시 사용자와 기기의 신뢰도를 실시간으로 +ZTNA +ICAM +평가하고필요시 추가 인증 +을 요구하는 등 강력한 통제와 인증이 반영하고 있다 + +(MFA) +. +네트워크 그룹 간 이동 시 실시간 보안 검사 및 트래픽 이동에 대한 관리가 이루어지는가? + +네트워크 그룹 간 트래픽 이동 시 풀 패킷 기반의 기반 검사 +마이크로세 그멘테이션 정책 등이 +, NDR, + +적용되어 실시간 보안 검사 및 탐지대응이 가능하다실무 환경에서는 +등을 통해 +/ +. +NGFW, NDR, XDR +그룹 간 이동 트래픽에 대한 심층적인 검사를 수행하고 +위협 탐지 시 +등과 연동하여 +, +SIEM/SOAR +해당 트래픽을 차단하거나 격리하는 등 실시간 관리가 이루어진다. +초기화 +그룹 간 이동 시 실시간으로 분석되고 제어되는가? + +네트워크 그룹세그먼트 +간 이동이 발생할 때마다 +기반의 트래픽 분석을 실시간으로 수행하여 +( +) +ML/AI + +이상 행동을 탐지한다실무 환경에서는 +등이 연동되어 이동 트래픽의 위험도를 +. +NDR, XDR, SIEM/SOAR + +스코어링하고이상 행동이 탐지되면 해당 네트워크 세그먼트를 자동으로 격리하거나 +, +ICAM, ZTNA, +마이크로 세그멘테이션 등과 연동하여 접근권한을 실시간으로 제한하는 등 자율적인 제어 조치를 +수행한다. + +재인증 없는 그룹 간 이동이 가능한가? + +기존 인증 상태 +세션 토큰 등를 유지하면서 네트워크 그룹 간 이동이 가능하며 +이동 중에도 +(SSO, +) +, +사용자 및 기기의 컨텍스트 기반 위험도 평가와 정책 재검토가 자동화되어 동적으로 수행된다실무 +. +환경에서는 +시스템 등을 통해 사용자의 신뢰 수준이 지속적으로 높게 +ICAM, ZTNA, SIEM/SOAR +유지될경우불필요한 재인증 절차 없이 원활한 그룹 간 이동을 지원하면서도 보안 수준을 유지한다 + +, +. +실시간 보안 정책 조정을 통한 안전한 그룹 간 이동을 보장하는가? + +온프레미스 +클라우드 +하이브리드 환경 전체에서 보안 정책의 생성 +배포 +조정 +폐기까지 전 과정 +, +, +, +, +, +라이프사이클이 자동화되어 있다실무 환경에서는 중앙 정책 엔진 +등이 정 +( +) +. +(ICAM, ZTNA, CNAPP +) +책결정지점 +역할을 통합적으로 수행하며환경 변화나 위협 탐지에 따라 자동으로 정책을 결정 +(PDP) +, +한다 +이 결정된 정책은 각 환경별 정책시행지점 +예시 +온프레미스의 방화벽 +클라우드 환경의 +. +(PEP)( +: +, +정책 +의 접근제어 정책 등에 실시간으로 반영되어 +모든 환경에서 일관된 보안 정책의 +IAM +, PAM +) +, +무결성을자율적으로 유지한다 + +. + +시스템 보안 및 정책 관리 +항목 +시스템 환경에 따른 정책 관리 +4.4.1 +설명 +시스템 환경에 따른 정책 관리는 온프레미스사내 데이터센터 +환경에서 클라우드 환경으로 +( +) + +전환되면서 보안 정책이 달라져야 하는 상황을 반영한 관리 체계이다. +각 환경에 맞는 보안 정책을 수립하고변화하는 환경에 맞춰 정책을 조정한다 +, +. +성숙단계 +기존 +온프레미스 환경에서 보안 정책을 수립하고 있는가? +수동으로 보안 정책을 유지관리하고 있는가 +· +? +초기 +클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? +정책이 자동으로 적용되는가? +향상 +하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안 정책이 조정되는가? +환경 변화에 따라 정책이 동적으로 변경 가능한가? +최적화 +보안 위협에 맞춘 자율적인 정책 적용이 가능한가? +정책 관리가 완전히 자동화되어 +변화하는 환경에서도 일관된 보안 정책을 +, +유지할 수 있는가? +세부 설명 +기존 +온프레미스 환경에서 보안 정책을 수립하고 있는가? + +대부분의 보안 정책이 사내 네트워크 환경온프레미스을 기준으로 설계되어 있다실무 환경에서는 +( +) +. +경계 기반 접근제어예시방화벽 +를 중심으로 +포트 기반의 정적 정책을 구성하여주로 외부 +( +: +, IPS) +IP +, +로부터의 위협을 방어하는 데 집중한다내부 시스템 간 통신에 대한 보안 정책은 미흡한 경우가 많다 +. +. +수동으로 보안 정책을 유지관리하고 있는가 +· +? + +시스템 별 정책은 관리자에 의해 수작업으로 적용되며자동화나 템플릿 기반 관리는 미흡한 상태이다 +, +. +실무 환경에서는 관리자가 개별 방화벽이나 시스템에 직접 접속예시 +하여 정책을 설정하는 +( +: CLI, GUI) + +등 시스템별 개별 관리가 이루어진다 +이로 인해 정책 변경에 시간이 오래 걸리거나 +휴먼 에러가 +. +, +발생하고일부 시스템의 정책이 누락되는 등 일관성이 결여될 수 있다 +, +. +초기 +클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? + +사내 자산온프레미스 +외에도 클라우드 자산에 대한 보안 정책 수립을 병행한다 +실무 환경에서는 +( +) +. +클라우드의 특성을 반영한 요구사항예시 +의 +의 +의 +등과 +( +: AWS +Security Group, Azure +NSG, NCP +ACG +) +클라우드 +정책을 활용하여 +온프레미스와는 다른 클라우드 환경에 맞는 맞춤형 보안 정책을 +IAM +, +새롭게정의하고 적용하기 시작한다 + +. + +| 항목 | 4.4.1 시스템 환경에 따른 정책 관리 | | +| --- | --- | --- | +| 설명 | 시스템 환경에 따른 정책 관리는 온프레미스(사내 데이터센터) 환경에서 클라우드 환경으로 전환되면서 보안 정책이 달라져야 하는 상황을 반영한 관리 체계이다. 각 환경에 맞는 보안 정책을 수립하고, 변화하는 환경에 맞춰 정책을 조정한다. | | +| 성숙단계 | 기존 | 온프레미스 환경에서 보안 정책을 수립하고 있는가? | +| | | 수동으로 보안 정책을 유지·관리하고 있는가? | +| | 초기 | 클라우드 환경으로 전환하면서 보안 정책을 각각에 맞게 수립하고 있는가? | +| | | 정책이 자동으로 적용되는가? | +| | 향상 | 하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안 정책이 조정되는가? | +| | | 환경 변화에 따라 정책이 동적으로 변경 가능한가? | +| | 최적화 | 보안 위협에 맞춘 자율적인 정책 적용이 가능한가? | +| | | 정책 관리가 완전히 자동화되어, 변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가? | + + +정책이 자동으로 적용되는가? + +온프레미스 환경에서는 새로운 시스템서버구성 시표준화된 프로세스에 따라 자산 등록필수 보안 +( +) +, +, + +시스템에이전트 등 +설치 +모니터링 시스템 연동 등이 반자동 또는 스크립트 기반으로 수행되기 +( +) +, +시작한다. 클라우드 환경에서는 +예시 +등 +또는 + +IaC(Infrastructure as Code)( +: Terraform, CloudFormation +) +정책 템플릿을 통해 자산 생성 시 기본적인 보안 정책예시 +보안 그룹 규칙 생성 등이 자동으로 +( +: +) +함께배포된다 +이는 기존 +단계의 완전 수동 설정 방식에서 벗어나정책 적용의 일관성과 속도를 + +. +' +' +, +향상시키는 초기 단계의 자동화 수준을 의미한다. +향상 +하이브리드 클라우드 환경으로 전환되면서 실시간으로 보안 정책이 조정되는가? + +온프레미스와 클라우드 자산이 혼합된 환경에서 중앙 통합 정책 관리 플랫폼예시 +( +: ICAM, ZTNA, +등을 통해 모든 환경의 정책을 통합하고 실시간으로 동기화한다실무 환경에서는 정책 엔진 +CNAPP +) +. +예시 +( +: +등에서 정의된 정책과 계정권한 정보가 +프로토콜 등을 통해 클라 +IAM, ICAM, ZTNA +) +/ +SCIM +우드예시 +로 실시간 동기화조정된다 +또한 +사용자가 +나 +콘솔에 +( +: AWS IAM, Azure AD) +/ +. +, +AWS +Azure +직접 접근하는 대신 +시스템을 통해 클라우드 환경의 시스템서버 +접근을 중계하고 통합 관리 +, PAM +( +) +하여 일관된 보안 정책을 적용할 수 있다. +환경 변화에 따라 정책이 동적으로 변경 가능한가? + +새로운 인프라예시 +로 배포된 신규 +사용자 +위치 +워크로드 등이 감지될 때 해당 환경 +( +: IaC +VM), +, +, +변화에따라 중앙 통합 정책 관리 플랫폼예시 +등에서 정책을 재조정하고 + +( +: ICAM, ZTNA, CNAPP +) +실시간으로배포한다실무 환경에서는 +등 모니터링 시스템이 환경 변화나 위협을 탐지하면 + +. +SIEM/SOAR +, +해당 정보를 정책 엔진으로 전달하여 자동으로 관련 보안 정책예시접근권한네트워크 세그먼트을 +( +: +, +) +동적으로 변경하고 +등을 통해 설정이 적용되었는지 지속적으로 검증한다 +, CNAPP, CSPM +. +최적화 +보안 위협에 맞춘 자율적인 정책 적용이 가능한가? + +내부 및 외부의 보안 위협예시 +연동 정보내부 이상 징후 +발생 시 +가 해당 위협 정보를 +( +: CTI +, +) +, ML/AI + +자동으로 분석하여 중앙 정책 엔진 +등을 통해 실시간으로 정책을 조정하고 +(ICAM, ZTNA, CNAPP +) +배포한다. 실무 환경에서는 +시스템에서 위협을 탐지하면연동된 정책 엔진이 관리자 + +XDR, SIEM/SOAR +, + +개입 없이 관련 시스템예시 +마이크로 세그멘테이션 등의 정책을 자율적으로 변경하여 +( +: PAM, ZTNA, +) + +위협을 즉시 차단하거나 격리한다. +정책 관리가 완전히 자동화되어변화하는 환경에서도 일관된 보안 정책을 유지할 수 있는가 +, +? + +온프레미스 +클라우드 +하이브리드 환경 전체에서 정책의 생성 +배포 +조정 +폐기까지의 전 과정이 +, +, +, +, +, +라이프사이클기반으로 관리된다 +및 +파이프라인을 통해 완전히 + +. IaC(Infrastructure as Code) +CI/CD +자동화된다실무 환경에서는 +솔루션 등이 +워크플로우와 통합되어정책 변경 +. +CSPM/CNAPP +GitOps +, +예시코드 커밋 +시 버전 관리충돌중복 검토보안성 검증 +을 자동으로 수행하고 배포한다 +( +: +) +, +/ +, +(Scan) +. +이를 통해 변화하는 환경에서도 전사적으로 보안 정책의 무결성과 일관성을 실시간으로 유지한다. + + +### 5. 애플리케이션 및 워크로드 + +애플리케이션 접근 +항목 +리소스 권한 부여 및 통합 +5.1.1 +설명 +응용 및 시스템에 대한 접근권한을 관리하고 +이를 다른 보안 시스템과 통합하여 보안을 +, +강화하는 과정으로표준화된 리소스 승인 게이트웨이를 설정하여 관리한다 +, +. +성숙단계 +기존 +접근에 대한 사용자시스템 권한을 수동으로 관리하는가 +· +? +리소스에 대한 접근권한을 정의하고정적 속성에 기반한 접근제어를 수행하는가 +, +? +초기 +워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입되었는가? +모든 리소스에 대한 권한을 중앙에서 관리하는가? +향상 +다수의 컨텍스트 정보위치시간 등 포함을 통한 최소 권한을 부여한 리소스 +( +, +) + +접근이 가능한가? +정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? +최적화 +실시간 위험 분석 +행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 +, +가능한가? +자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? +실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? +모든 리소스 권한 부여가 자동화되어 있는가? +세부 설명 +기존 +접근에 대한 사용자시스템 권한을 수동으로 관리하는가 +· +? + +애플리케이션 및 워크로드에 대한 권한 부여와 회수 과정이 관리자의 수작업으로 진행된다 +실무 +. +환경에서는권한 신청을 이메일이나 그룹웨어 결재로 받아서 관리자가 애플리케이션 개발자가 개별 + +애플리케이션의 관리자 콘솔에 접속하여 수동으로 권한을 적용한다이로 인해 정기적인 권한 점검이 +. + +어렵고 권한 관리가 누락 되기 쉬운 형태이다. +리소스에 대한 접근권한을 정의하고정적 속성에 기반한 접근제어를 수행하는가 +, +? + +사용자 역할 +또는 부서 등 정적인 기준으로 리소스 접근제어 +를 적용한다실무 환경에서는 +(Role) +(RBAC) +. + +애플리케이션 내에서 관리자 그룹 +사용자 그룹 +등으로 권한을 분리하는 수준이며 +제로트러스트 +' +', ' +' +, +원칙에 따라 사용자의 위치기기 상태 등 컨텍스트에 따른 동적 권한 제어는 부족하다 +, +. + +| 항목 | 5.1.1 리소스 권한 부여 및 통합 | | +| --- | --- | --- | +| 설명 | 응용 및 시스템에 대한 접근권한을 관리하고, 이를 다른 보안 시스템과 통합하여 보안을 강화하는 과정으로, 표준화된 리소스 승인 게이트웨이를 설정하여 관리한다. | | +| 성숙단계 | 기존 | 접근에 대한 사용자·시스템 권한을 수동으로 관리하는가? | +| | | 리소스에 대한 접근권한을 정의하고, 정적 속성에 기반한 접근제어를 수행하는가? | +| | 초기 | 워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입되었는가? | +| | | 모든 리소스에 대한 권한을 중앙에서 관리하는가? | +| | 향상 | 다수의 컨텍스트 정보(위치, 시간 등 포함)을 통한 최소 권한을 부여한 리소스 접근이 가능한가? | +| | | 정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? | +| | 최적화 | 실시간 위험 분석, 행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가? | +| | | 자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? | +| | | 실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? | +| | | 모든 리소스 권한 부여가 자동화되어 있는가? | + + +초기 +워크로드 접근에 대하여 중앙 집중식 관리 시스템이 도입 되었는가? + +사용자 +시스템뿐만 아니라 애플리케이션 및 워크로드의 접근권한을 중앙 집중식 관리 시스템 +, +(IAM +등을 통해 일괄적으로 관리하기 시작한다실무 환경에서는 식별자 관리에서 중앙화된 계정 정보를 +) +. +와 연동하여 업무시스템에 해당하는 애플리케이션에 대한 접근을 제어하거나 +시스템과 +SSO +, PAM +연동하여시스템서버 +쿠버네티스 등에 대한 접근을 중앙에서 통제하는 단계를 의미한다 + +( +, DB, +) +. +모든 리소스에 대한 권한을 중앙에서 관리하는가? + +실무 환경에서는 기존 +단계의 개별 애플리케이션 +시스템별 관리를 넘어 +환경별로 중앙 집중화를 +' +' +, +, +시작하는 단계를 의미한다 +예를 들어 +온프레미스 리소스는 사내 +시스템을 통해 계정과 권한 +. +, +IAM +관리를 통합 관리하고 +클라우드 리소스는 각 클라우드 플랫폼예 +등의 +, +( +: AWS, Azure, NCP, NHN +) +기능이나 별도 클라우드 대상 +시스템 등을 통해 해당 플랫폼 내의 권한을 중앙에서 관리 +IAM +IAM +한다 +이 단계에서는 아직 전사적인 단일 통합 플랫폼은 부재하며각 환경 별 계정과 권한을 중앙 +. +, +관리하는 수준이다. +향상 +다수의 컨텍스트 정보위치시간 등 포함을 통한 최소 권한을 부여한 리소스 접근이 가능한가 +( +, +) +? + +사용자 위치기기 보안 상태시간대 등의 다수 컨텍스트 정보에 기반한 접근제어 +를 수행하고 +, +, +(ABAC) +, +업무상 필요한 최소한의 권한만을 부여한다실무 환경에서는 중앙 정책 엔진 +이 이러한 다수의 +. +(PDP) +컨텍스트 정보를 실시간으로 분석하여 접근 허용 여부를 결정하고 +정책시행지점 +이 이 결정을 +, +(PEP) +받아 애플리케이션 및 워크로드 리소스 접근을 제어한다. +정밀한 권한 관리가 구현되어 이를 통한 리소스 접근이 가능한가? + +정적 +와 컨텍스트 기반 +를 결합하여 유연하면서도 정밀한 권한 모델을 적용한다 +실무 +RBAC +ABAC +. +환경에서는 +초기 +단계의 환경별온프레미스 +클라우드 +분산된 권한 관리에서 확장되어 +중앙 정책 +' +' +( +, +) +, +결정지점 +예시 +에서 전사적인 애플리케이션리소스에 대한 계정 및 권한 관리가 통합된다 +(PDP)( +: ICAM) +/ +. 이 + + +가 사용자의 역할 +과 속성 +을 종합하여 접근 결정을 내리면이 정보가 각 정책시행 +PDP +(RBAC) +(ABAC) +, +지점 +예시 +게이트웨이 +등에 전달되어 실제 리소스 접근을 허용차단한다 +(PEP)( +: SSO, PAM +, ZTNA, CASB +) +/ +. +최적화 +실시간 위험 분석행동 패턴 분석 등을 통한 워크로드 및 리소스 접속이 가능한가 +, +? + +기반의 +기능이 애플리케이션 및 워크로드 레벨에 적용되어 사용자 행동 및 +호출 +ML/AI +UEBA +API +패턴을 실시간으로 분석한다 +실무 환경에서는 +클라우드 앱 +웹 +클라우드 +. +CASB( +), WAPP( +/API), CNAPP( +네이티브 워크로드 +등이 +와 연동되어 +중앙 정책결정지점 +예시 +에서 비정상 +) +SIEM/SOAR +, +(PDP)( +: ICAM) +적인 패턴예시 +과도한 +요청 +비인가 데이터 접근 +식별 시 동적인 위험 점수를 스코어링하고 +( +: +API +, +) +접속 여부를 동적으로 결정한다. +자동화된 접근권한 부여 및 회수 시스템이 도입되어 있는가? + +시스템이 +그룹웨어 +등 다양한 시스템과 연동되어조직 내 역할 변경 +ICAM +Directory, +, HRM, PAM +, +, +신청결재 등 이벤트 발생 시 애플리케이션 및 워크로드에 대한 접근권한을 자동으로 부여회수한다 +/ +/ +. + +실무 환경에서는 +프로토콜 등을 통해 퍼블릭 클라우드의 애플리케이션이나 클라우드 워크 +SCIM +로드의계정과 권한까지 라이프사이클 관리가 자동화된다 + +. +실시간 권한 관리 및 비정상적인 접근 차단이 가능한가? + +애플리케이션 및 워크로드 접근 요청 시 +등 중앙 정책결정지점에서 실시간 위험 점수 +ICAM, ZTNA +사용자기기 신뢰도 +분석 결과를 평가한다위협으로 판단되는 경우예시 +정보와 일치 +( +/ +, UEBA +) +. +( +: CTI +, +임계치 초과 등 +관리자 개입 없이 정책시행지점 +예시 +게이트웨이 +UEBA +), +(PEP)( +: CASB, ZTNA +, WAPP +등을 통해 해당 접근을 자동으로 차단하거나 추가 인증을 요구한다 +) +. +모든 리소스 권한 부여가 자동화되어 있는가? + +전사 모든 리소스온프레미스 애플리케이션클라우드 워크로드 +애플리케이션 +등에 대한 +( +, +, SaaS +, API +) +권한 부여회수 프로세스 전반이 +원칙에 따라 완전히 자동화 +/ +JIT(Just-in-Time)/JEA(Just-Enough-Access) +된다 +모든 권한 변경 사항 +접근 시도 +정책결정지점 +및 정책시행지점 +로그는 +. +, +, +(PDP) +(PEP) +ICAM, +시스템 등으로 통합되고 전송되어 실시간 감사 +및 모니터링이 가능하다 +SIEM/SOAR +(Audit) +. + +애플리케이션 위협 보호 +항목 +지속적인 모니터링 및 진행 중인 승인 +5.2.1 +설명 +자동화된 도구와 프로세스를 사용하여 응용 및 시스템의 보안 상태를 지속적으로 모니터링 +하고, 실시간으로 보안 승인을 관리하는 과정이다 + +. +성숙단계 +기존 +애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? +보안 이벤트 기록을 수동으로 수행하는가? +초기 +자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 +분석하는가? +시스템 변경 사항에 대하여 보안 검토를 수행하는가? +향상 +보안 이벤트를 +기반으로 분석하고 이상 징후를 탐지하는가 +AI +? +보안 승인 프로세스를 자동화할 수 있는가? +최적화 +모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 +있는가? +세부 설명 +기존 +애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? + +업무 환경에서는 운영자나 개발자가 개별 애플리케이션 서버의 자체 로그 파일이나 관리 콘솔을 통해 +애플리케이션 및 시스템 상태를 수동으로 점검한다이는 주기적인 확인이나 장애 발생 후 사후 점검 +. + +수준에 머무르며실시간 위협 탐지나 대응은 불가능한 상태이다 +, +. +보안 이벤트 기록을 수동으로 수행하는가? + +보안 이벤트 발생 시 이를 중앙에서 자동으로 수집하거나 기록하는 시스템이 부재하다실무 환경에서는 +. + +각 애플리케이션에서 발생하는 이벤트를 수동 보고예시 +이메일 발송 +티켓 발급하거나 +관리자가 +( +: +, +) +, +수작업으로 별도의 이벤트를 모아 기록하여 관리한다이로 인해 이벤트 기록이 누락 될 가능성이 높고 +. +, +통합 분석이 어렵다. +초기 +자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? + +기본적인 +시스템을 도입하여 애플리케이션예시웹서버 +로그 및 시스템 +로그 등 보안 +SIEM +( +: +, WAS) +/DB + +이벤트를 중앙에서 수집하고 +사전에 정의된 기본 규칙 +기반의 상관 분석을 수행한다 +실무 +, +(Rule) +. +환경에서는기존단계의 수동 로그 점검에서 벗어나보안 경보를 실시간으로 기록하고 관리자에게 +' +' +, +알림을 전송하는 초기 단계의 자동화된 모니터링 체계를 의미한다. + +| 항목 | 5.2.1 지속적인 모니터링 및 진행 중인 승인 | | +| --- | --- | --- | +| 설명 | 자동화된 도구와 프로세스를 사용하여 응용 및 시스템의 보안 상태를 지속적으로 모니터링 하고, 실시간으로 보안 승인을 관리하는 과정이다. | | +| 성숙단계 | 기존 | 애플리케이션 및 시스템에 대한 보안 상태를 수동으로 모니터링하는가? | +| | | 보안 이벤트 기록을 수동으로 수행하는가? | +| | 초기 | 자동화된 보안 모니터링 도구를 도입하여 실시간으로 보안 이벤트를 수집하고 분석하는가? | +| | | 시스템 변경 사항에 대하여 보안 검토를 수행하는가? | +| | 향상 | 보안 이벤트를 AI 기반으로 분석하고 이상 징후를 탐지하는가? | +| | | 보안 승인 프로세스를 자동화할 수 있는가? | +| | 최적화 | 모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? | + + +시스템 변경 사항에 대하여 보안 검토를 수행하는가? + +시스템의 코드나 구성 변경 시 운영 환경에 반영하기 전 +보안 승인을 선행하는 공식적인 절차가 +, +수립되어있으나이 승인 프로세스가 시스템을 통해 자동화되기보다는 주로 수동적인 절차에 의존 + +, +한다 +실무 환경에서는 개발자의 코드 변경이나 운영자의 서버 설정 변경 요청 시 +보안 담당자가 +. +, +보안성 심의나 보안성 검토를 통해 이를 수동으로 검토하고 승인하는 절차를 운영하는 수준을 의미 +한다추가적으로 기본적인 +시스템을 도입하여 애플리케이션예시웹서버 +로그 및 시스템 +. +SIEM +( +: +, WAS) +/DB 로그 등 보안 이벤트를 중앙에서 수집하고사전에 정의된 기본 규칙 +기반의 상관 분석을 + +, +(Rule) +수행한다이는 수동 로그 점검에서 벗어나보안 경보를 실시간으로 기록하고 관리자에게 알림예시 +. +, +( +: +이메일메신저을 전송하는 초기 단계의 자동화된 모니터링 체계를 구축하기 시작한 단계이다 +, +) +. +향상 +보안 이벤트를 +기반으로 분석하고 이상 징후를 탐지하는가 +AI +? + +기존의 규칙 기반 탐지에서 확장되어 +기반의 사용자 별 +기능이 도입되어 애플리케이션과 +, ML/AI +UEBA + +시스템의 동작 패턴을 분석한다 +이나 +솔루션에 탑재된 +엔진이 사용자예시개발자 +. SIEM +XDR +ML/AI +( +: +, +운영자 +및 시스템예시 +서버의 정상적인 활동 기준선 +을 학습한다이후평소와 +) +( +: WAS, DB +) +(Baseline) +. +, +다른 비정상적인 +호출과도한 데이터 조회권한 상승 시도 등 알려지지 않은 위협이나 내부자 +API +, +, +위협 징후를 실시간으로 탐지하여 경보를 발생시킨다. +보안 승인 프로세스를 자동화할 수 있는가? + +애플리케이션 배포나 시스템 설정 변경 시보안 검토 및 승인 프로세스가 자동화된다 +, +. DevSecOps +파이프라인과 연계되어코드 변경 +시 정의되어 있는 보안성 검토 절차에 맞게 +, +(Commit) +SAST/DAST +시스템과 연동되어 자동으로 보안성 검토 수행하고이 검사 결과를 바탕으로 위험 수준예시 +/SCA +, +( +: +취약점 개에 따라 자동으로 운영 환경 배포를 승인하거나 거절차단하는 등 +보안 승인 +Critical +) +( +) +, +절차가워크플로우에 통합되어 자동화된 것을 의미한다 + +. +최적화 +모든 시스템의 보안 상태를 실시간으로 탐지하고 위협을 사전에 예측할 수 있는가? + +모든 애플리케이션과 워크로드의 보안 상태를 실시간으로 모니터링하는 기능을 포함하여지속적인 +, +보안 모니터링과 +기반 위협 예측 기능이 통합되어 잠재적인 공격 시나리오를 사전에 차단한다 +ML/AI +. +실무 환경에서는 +등의 시스템이 유기적으로 통합되어외부 위협 인텔리전스 +XDR, CNAPP, SIEM/SOAR +, +(CTI) 내부 시스템 로그애플리케이션 트래픽사용자 행위 등 방대한 데이터를 +엔진이 지속적으로 +, +, +, +AI + +학습하고 분석한다이를 통해 개별 이상 징후 탐지를 넘어여러 징후를 조합하여 잠재적인 다단계 +. +, +' +공격 시나리오를 사전에 예측하고관련 시스템의 보안 태세예시접근권한네트워크 정책를 자동 +' +, +( +: +, +) +으로 강화하거나 선제적으로 차단 조치를 수행한다이러한 모든 보안 상태 평가는 자동화되어 애플리 +. +케이션및 시스템의 정책에 지속적으로 반영되는 등 자율적인 보안 상태 관리가 이루어진다 + +. + +접근 가능한 애플리케이션 +항목 +원격 접속 +5.3.1 +설명 +사용자가 외부에서 안전하게 조직의 네트워크에 접속할 수 있도록 하는 보안 조치이다. +최소 권한 기준을 설정하기 위해 기존 장치 접근 프로세스 및 도구를 사용한다. +승인된 응용에 대해 +를 사용하는 디바이스 및 +등이 원격 접속 지원을 포함 +Enterprise IDP +IoT +하도록 확장한다. +성숙단계 +기존 +을 통해서 외부 접속을 지원하는가 +VPN +? +애플리케이션에 대한 접근제어가 제한적인가? +초기 +원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? +원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? +향상 +다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? +접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 +제한하는가? +최적화 +를 활용하여 원격 접속 보안을 고도화하였는가 +AI +? +를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 +AI +차단되는가? +세부 설명 +기존 + +을 통해서 외부 접속을 지원하는가 +VPN +? + +전통적인 경계 기반 보안 모델에 의존하여외부에서의 원격 접속은 주로 방화벽이나 +시스템 +, +SSL-VPN + +등을 통해 이루어진다 +실무 환경에서는 사용자가 +터널링을 통해 암호화된 세션을 맺고 내부 +. +VPN +네트워크 +에 일단 접속하면해당 네트워크 대역에 대한 접근권한을 일괄적으로 부여받는다이로 +(LAN) +, +. + +인해원격 접속 후 내부망에서 접근할 수 있는 애플리케이션에 대한 세분화된 접근제어가 제한적이며 +, +예시 +( +: +접속에 성공하면 내부의 모든 애플리케이션에 원칙적으로 접근 가능 +최소 권한 원칙 +VPN +), +준수가 미흡한 상태이다. +애플리케이션에 대한 접근제어가 제한적인가? + +등을 통해 +터널링이 연결되면 +사용자는 정해진 애플리케이션예시 +특정 업무시스템 +SSL-VPN +VPN +, +( +: +, +그룹웨어 등에 대한 접근을 수행한다 +하지만 +접속이 허용된 이후에는 해당 애플리케이션이 속한 +) +. +, +내부 +대역네트워크 세그먼트별 세부적인 정책이 부여되지 않아 횡적 이동 +의 +IP +( +) +(Lateral Movement) +위협이 존재하며 최소 권한 제어가 미흡한 상태이다. + +| 항목 | 5.3.1 원격 접속 | | +| --- | --- | --- | +| 설명 | 사용자가 외부에서 안전하게 조직의 네트워크에 접속할 수 있도록 하는 보안 조치이다. 최소 권한 기준을 설정하기 위해 기존 장치 접근 프로세스 및 도구를 사용한다. 승인된 응용에 대해 Enterprise IDP를 사용하는 디바이스 및 IoT 등이 원격 접속 지원을 포함 하도록 확장한다. | | +| 성숙단계 | 기존 | VPN을 통해서 외부 접속을 지원하는가? | +| | | 애플리케이션에 대한 접근제어가 제한적인가? | +| | 초기 | 원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? | +| | | 원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? | +| | 향상 | 다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? | +| | | 접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? | +| | 최적화 | AI를 활용하여 원격 접속 보안을 고도화하였는가? | +| | | AI를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가? | + + +초기 +원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하는가? + +원격 접속 기기의 보안 상태를 자동으로 평가하고 접근을 제어하기 시작한다실무 환경에서는 외부에서 +. + +내부로 접근 시 +백신 +등의 시스템을 통해 해당 기기의 보안 상태 +, NAC, EDR, AV( +), NGFW, SASE +예시 +( +: 백신 +설치 여부 +최신 패치 적용 여부필수 보안 +설치 여부 등를 자동으로 평가 + +/AV +, OS +, +S/W +) +한다이 평가 결과조직의 보안 기준에 부합하는 경우에만 내부 접근을 허용하고기준 미달 시에는 +. +, +, + +접속을 제한하거나 격리 네트워크로 유도하는 등 초기 수준의 조건부 접근제어를 수행한다. +향상 +원격 접속 기기의 실시간 모니터링 및 제어가 가능한가? + +게이트웨이나 +시스템 등을 통해 원격 접속 중인 기기의 상태 변화예시위협 감지 +SASE/ZTNA +NGFW +( +: +, +보안 설정 변경비인가 +설치를 실시간으로 모니터링하고 제어한다실무 환경에서는 +, +S/W +) +. +AV, EDR, +등과 +시스템을 연동하거나 +시스템 자체적으로기기에서 위협이 탐지되는 +NAC +NGFW, ZTNA +ZTNA +, +즉시 해당 기기의 +나 세션 정보를 정책 엔진으로 전달받아관리자 개입 없이도 네트워크 접근을 +IP +, +동적으로 차단하거나 격리하는 등 즉각적인 세션 제어가 이루어진다. +다양한 원격 접속 시나리오에 대한 맞춤형 보안 정책을 수립하였는가? + +조직의 환경에 맞게 다양한 원격 접속 시나리오별로 맞춤형 보안 정책을 수립하고 적용한다 +실무 +. +환경에서는 +등의 정책 엔진을 통해 사용자 역할기기 상태뿐만 아니라 다양한 +ICAM, ZTNA, SASE +, +컨텍스트를 조합하여 정책을 수립한다 +예시 +국내접속 시에는 +인증 후 대부분의 앱을 허용 +. ( +: ' +' +MFA +하지만 +해외 +로 접속 시에는 민감한 시스템 접근을 차단함 +업무 시간 +외에는 관리자 승인을 +, ' +' IP +/ ' +' +요구함 +회사 노트북은 모든 접근을 허용하되 +개인 모바일기기로는 이메일과 그룹웨어만 허용함 +/ ' +' +, ' +' +) +최적화 +접속 상황에 따라 동적 보안 정책을 적용하여 애플리케이션 기능이 필요시 제한하는가? + +원격 접속 시 애플리케이션 접근 허용 여부를 넘어애플리케이션 내부의 세부 기능 단위예시특정 +, +( +: +메뉴조회 버튼다운로드 버튼까지 접근을 제어하며이 권한은 사용자의 실시간 컨텍스트를 기반으로 +, +, +) +, + +동적으로 적용된다실무 환경에서는 중앙 정책 엔진 +역할을 수행하는 +이 +등에서 +. +(PDP) +ICAM +SIEM/SOAR + +수집분석된 로그 결과예시사용자 행위기기 상태를 기반으로 사용자의 위험 점수를 실시간으로 +· +( +: +, +) +스코어링한다 +이 점수에 따라 +이 조회 +버튼은 허용하되 다운로드 +버튼은 비활성화하는 등 +. +ICAM +' +' +' +' +세부 기능 단위의 동적 보안 정책을 결정하면 +마이크로 세그멘테이션 등 실제 +, SSO, ZTNA, CASB, +접근을 수행하는 정책시행지점 +이 이 정책을 받아 정교한 동적 접근제어를 수행한다 +(PEP) +. + +를 활용하여 원격 접속 보안을 고도화 하였는가 +AI +? + +기반의 +기능이 원격 접속 보안에 적용되어 +사용자의 정상이상 활동을 실시간으로 +ML/AI +UEBA +, +/ +판단하고동적인 위험 점수를 산출하여 적용한다실무 환경에서는 +시스템 등이 + +. +SIEM, XDR, ZTNA +연동되어 +엔진이 사용자의 접속 시간위치기기 상태앱 사용 행위 등 다양한 컨텍스트를 종합적으로 +, AI +, +, +, + +분석한다이 위험 점수는 정책 엔진 +인 +에 실시간으로 전달되어원격 접속 관련 보안 정책 +. +(PDP) +ICAM +, +예시 +( +: 인증 강도 상향접근 가능 권한 축소을 자동으로 조정하는 등 고도화된 보안 체계를 운영한다 +, +) +. + + +를 통하여 위험 요소가 탐지되면 애플리케이션 기능이 즉각적으로 제한 또는 차단되는가 +AI +? + +엔진이 +분석이나 +연동 등을 통해 실제 보안 위협예시비정상적인 대량 데이터 접근 +ML/AI +UEBA +CTI +( +: +, +내부 확산 시도이나 고위험 요소를 실시간으로 탐지하면이 정보가 +시스템 등과 연동 +) +, +SIEM/SOAR +되어 관리자 개입 없이 즉각적인 자동 대응을 수행한다실무 환경에서는 +플레이북이 실행되어 +. +SOAR +, +탐지된 위협의 심각도에 따라 정책시행지점 +예시 +마이크로 세그멘테이션 등을 +(PEP)( +: ZTNA, CASB, +) +통해 해당 사용자의 특정 애플리케이션 기능을 즉시 중단시키거나세션을 강제 격리종료하고 +, +/ +, MFA +재인증을 요구하는 등 자율적인 보안 조치가 자동으로 이루어진다. + +안전한 애플리케이션 배포 +항목 +안전한 애플리케이션 배포 +5.4.1 +설명 +안전한 응용 배포란 응용을 배포할 때 발생할 수 있는 보안 위협을 최소화하기 위한 프로세스와 +도구를 사용하는 것을 의미한다. +이는 보안 정책 준수 +취약점 검사 +자동화된 배포 파이프라인 +코드 무결성 검증 +환경 격리 +, +, +, +, +및 모니터링을 포함한다. +성숙단계 +기존 +애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? +보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? +기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 +있는가? +초기 +보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? +애플리케이션 배포 시 보안이 자동으로 적용되는가? +파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가 +CI/CD +? +배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? +향상 +배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? +보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? +배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? +애플리케이션의 모든 구성요소가 배포 전후로 보안 검사를 거치도록 구성하였는가? +최적화 +완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? +를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 +AI + +중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? +세부 설명 +기존 +애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? + +애플리케이션 배포 전 보안성 검토가 +소프트웨어 개발 생명주기에 체계적으로 통합되어 있지 +SDLC( +) +않으며 +주로 개발자가 자체적으로 시큐어 코딩 점검을 수행한다 +애플리케이션을 배포하거나 상품 +, +. +화하는 최종 단계나 +년 기준의 주기적인 취약성 검토 수준에서만 취약점 점검 도구 등을 활용해 +, 1 +수동으로 코드 검토 및 취약점 점검을 수행한다. +보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? + +조직의 컴플라이언스 기준예시 +에 따른 기본적인 소프트웨어 개발 보안 가이드라인이나 +( +: OWASP Top 10) + +표준 운영 지침이 문서로 수립되어 있다하지만 이 가이드라인이 +파이프라인 등에 자동화되어 +. +CI/CD + +강제되지 않고배포 시 개발자나 운영자가 매뉴얼체크리스트을 통해 준수 여부를 검토하는 수준에 +, +( +) +머무른다. + +| 항목 | 5.4.1 안전한 애플리케이션 배포 | | +| --- | --- | --- | +| 설명 | 안전한 응용 배포란 응용을 배포할 때 발생할 수 있는 보안 위협을 최소화하기 위한 프로세스와 도구를 사용하는 것을 의미한다. 이는 보안 정책 준수, 취약점 검사, 자동화된 배포 파이프라인, 코드 무결성 검증, 환경 격리 및 모니터링을 포함한다. | | +| 성숙단계 | 기존 | 애플리케이션 배포 전 수동으로 코드 검토 및 취약점 검사를 수행하는가? | +| | | 보안 가이드라인을 준수하는 초기 배포 절차를 마련하였는가? | +| | | 기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? | +| | 초기 | 보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? | +| | | 애플리케이션 배포 시 보안이 자동으로 적용되는가? | +| | | CI/CD 파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가? | +| | | 배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? | +| | 향상 | 배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? | +| | | 보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? | +| | | 배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? | +| | | 애플리케이션의 모든 구성요소가 배포 전후로 보안 검사를 거치도록 구성하였는가? | +| | 최적화 | 완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? | +| | | AI를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 자동 보고 및 추적 관리가 가능한가? | + + +기본적인 배포 접근제어를 적용하여 배포 과정에서의 보안 사고를 방지하고 있는가? + +도구나 배포 대상 시스템예시운영 서버에 접근하는 계정에 대해 기본적인 접근제어 정책을 +CI/CD +( +: +) + +적용한다실무 환경에서는 +그룹 등을 활용하여 배포 권한을 정적인 방식으로 일괄 부여하며 +. +Directory +, +개발자와 운영자 간의 역할 분리가 명확하지 않거나 최소 권한 원칙이 엄격하게 적용되지 않은 +상태이다. +초기 +보안이 내재된 자동화된 배포 파이프라인을 구축하였는가? + +소프트웨어 개발 생명주기가 명확히 정의되어 +보안이 내재된 소프트웨어 배포 +개념을 도입 +SDLC( +) +, ' +' +하기 시작한다 +실무 환경에서는 +파이프라인에 빌드부터 배포까지의 단계를 정의하며 +이 +. +CI/CD +, +과정에보안 점검을 포함시키는 초기 +체계를 구축하기 시작한다 + +DevSecOps +. +애플리케이션 배포 시 보안이 자동으로 적용되는가? + +파이프라인의 +단계에서 보안 검사가 자동으로 적용되기 시작한다 +CI/CD +CI(Continuous Integration) +. +실무 환경에서는 개발자가 코드를 커밋할 때 +정적 분석를 자동으로 실행하여 시큐어 코딩 규칙 +, SAST( +) + +위반 여부를 검사하고보안 문제가 발견되면 빌드를 중단시키는 등 +에 보안을 내재화하는 초기 +, +SDLC + +체계를 구축한다 +DevSecOps +. + +파이프라인을 통하여 자동화된 취약점 검사 도구를 적용하였는가 +CI/CD +? + +자동화된 취약점 검사 도구예시 +를 +파이프라인에 적용한다 +실무 환경에서는 +( +: SAST, SCA) +CI/CD +. +CI +단계에서 +도구가 자동으로 실행되어 알려진 취약점 +이 있는 오픈소스 라이브러리를 탐지하거나 +SCA +(CVE) +, +도구가 코드 레벨의 취약점을 탐지하고그 결과를 개발자에게 자동 리포트한다 +는 테스트 +SAST +, +. DAST + +환경 배포 후 제한적으로 적용된다. +배포 전후로 코드 무결성을 검사하고 배포 환경을 격리하였는가? + +배포될 산출물의 무결성을 검증하고배포 환경을 격리하기 시작한다실무 환경에서는 코드 서명이나 +, +. + +해시 +값 비교를 통해 빌드된 아티팩트 +의 변경 유무무결성를 검사한다또한개발 환경 +(Hash) +(Artifact) +( +) +. +, +, +테스트 환경운영 환경을 별도의 네트워크 세그먼트나 +으로 분리하여배포가 격리된 환경에서 +, +VLAN +, + +안전하게 실행되도록 구성한다. +향상 +배포 과정 전반에 걸쳐 지속적인 모니터링을 수행하는가? + +전사적인 애플리케이션 배포가 +소프트웨어 개발 생명주기 +내에서 관리되며배포 과정 전반에 +SDLC( +) +, +걸쳐 지속적인 모니터링이 이루어진다실무 환경에서는 +파이프라인에서 발생하는 모든 로그 +. +CI/CD +예시빌드 시작테스트 실패배포 승인거절 +및 배포 대상 시스템의 이벤트 로그를 +으로 실 +( +: +, +, +/ +) +SIEM +시간 전송하여 중앙에서 통합 모니터링한다 +이를 통해 배포 과정에서 발생하는 보안 이벤트예시 +. +( +: +허가되지 않은 이미지 사용 +승인되지 않은 코드 변경 시도를 실시간으로 탐지하고 위협 분석을 +, +) +수행하여조치를 진행한다 + +. + +보안 정책 준수를 자동으로 검증하는 도구가 도입되어 있는가? + +의 배포 단계 +에 보안 정책을 자동으로 검증하는 도구가 도입된다실무 환경에서는 +SDLC +(CD) +. +CI/CD +파이프라인 내에 보안 게이트등을 설정하여사전에 정의된 보안 정책예시 +검사 통과 +' +' +, +( +: SAST/DAST +여부오픈소스 취약점 +임계치 미만컨테이너 이미지 서명 검증 등에 부합하지 않으면 배포를 +, +(SCA) +, +) +자동으로 차단하거나 롤백하도록 설정된 검증 모듈이 작동한다. +배포 중 발생하는 비정상적인 활동을 모니터링하여 즉각 대응 가능한가? + +배포 과정 중 발생하는 사용자 및 시스템의 비정상적인 활동을 실시간으로 탐지하고 즉각적인 대응을 +수행한다실무 환경에서는 배포 권한을 가진 계정의 평소와 다른 활동예시업무 시간 외 배포 시도 +. +( +: +, +과도한 권한으로 빌드 서버 접근배포 대상 시스템 변조 시도을 +등의 시스템을 +, +) +SIEM, UEBA, PAM +통해 실시간으로 탐지한다 +탐지 시 +와 연동하여 관리자에게 자동으로 알림을 +. +, SIEM/SOAR +보내거나 +관련 계정을 즉시 비활성화하고배포 프로세스를 강제 중단하는 등의 즉각적인 대응이 이루어진다 +, +. +애플리케이션의 모든 구성 요소가 배포 전후로 보안 검사를 거치도록 구성 하였는가? + +전사적인 애플리케이션 배포가 +내에서 관리되며애플리케이션을 구성하는 모든 요소가 배포 +SDLC +, +전후로 보안 검사를 거치도록 구성된다실무 환경에서는 전체 애플리케이션 아키텍처에 포함된 마 +. +이크로서비스 +외부 라이브러리 +컨테이너 이미지 등이 +파이프라인의 각 단계에서 +, API, +(SCA), +CI/CD +개별적으로 보안 검사 +등를 수행한다이 모든 검증 절차를 통과하여 보안 인증이 +(SAST, DAST, IAST +) +. +완료된 구성 요소아티팩트만이 최종적으로 운영 환경에 배포된다 +( +) +. +최적화 +완전히 자동화된 코드 배포 및 관리자 권한 접근제어가 가능한가? + +를 기반으로인프라 구성과 애플리케이션 배포가 완전히 자동화된 단계이다 +IaC(Infrastructure as Code) +, +. +실무 환경에서는 +워크플로우 등과 통합되어코드 커밋 +을 통해 모든 변경 사항예시 +GitOps +, +(Commit) +( +: +인프라 설정 +애플리케이션 업데이트이 자동으로 검증되고 배포된다 +이 과정에서 운영 서버나 +, +) +. +파이프라인에 대한 관리자의 직접적인 접근은 원천적으로 차단되며 +배포는 사전에 정의된 +CI/CD +, +최소 권한의 서비스 계정을 통해서만 실행된다긴급 장애 대응 등 예외적인 관리자 접근이 필요할 +. +경우 +마이크로 세그멘테이션 +시스템 등과 연동하여 +원칙에 따라 필요한 시간 동안만 +, +, PAM +JIT/JEA +최소한의 명령어 실행 권한을 동적으로 부여받는다. + +를 활용한 고도화된 위협 탐지 및 대응 시스템을 배포 파이프라인에 통합하여 중앙에서 관리하고 +AI +자동 보고 및 추적 관리가 가능한가? + +파이프라인 전반에 +기반의 위협 탐지 및 대응 시스템이 완전히 통합되어 +중앙에서 +CI/CD +ML/AI +, +자율적인관리가 이루어진다실무 환경에서는 +엔진이 배포 과정의 로그개발자의 행위 패턴 + +. +ML/AI +, +예시평소와 다른 코드 커밋 시간비정상적인 빌드 서버 접근 시도 +외부 위협 인텔리전스 +정보 +( +: +, +), +(CTI) + +등을 실시간으로 분석하여 고도화된 위험 요소를 탐지한다탐지된 위협은 즉시 +시스템과 +. +SIEM/SOAR + +연동되어 +관리자 개입 없이도 자동화된 플레이북을 통해 배포를 즉각 중단시키거나 +관련 계정을 +, +, +격리차단하는 등 자동화된 대응이 수행된다 +모든 배포 및 보안 검증 결과 +대응 이력은 중앙화된 +/ +. +, +단일 플랫폼예시 +정보보안 포털에서 자동으로 보고되며완전한 감사 추적성이 보장된다 +( +: ICAM, +) +, +. + +항목 +애플리케이션 인벤토리 +5.4.2 +설명 +조직 내에서 사용되는 모든 응용을 식별하고이를 체계적으로 관리하는 과정이다 +, +. +인벤토리를 통해 응용의 상태소유권사용 목적 등을 파악할 수 있다 +, +, +. +성숙단계 +기존 +모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? +애플리케이션 기본 정보를 기록하여 관리하는가? +초기 +자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리 +할 수 있는가? +향상 +애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 +평가관리할 수 있는가 +· +? +최적화 +기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 +AI + +반영할 수 있는가? +애플리케이션 인벤토리를 다른 보안 시스템과 통합 +종합적인 보안 관리가 +, +이루어지고있는가 + +? +세부 설명 +기존 +모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? + +조직 내부에서 개발하거나 업무시스템으로 사용되는 모든 애플리케이션을 식별하여 스프레드시트 +등을 활용해 수작업으로 목록인벤토리을 작성하여 관리한다실무 환경에서는 각 애플리케이션별로 +( +) +. +담당자개발자운영자관리자 등가 배정되어 관리되고 있는 상태를 의미한다 +( +/ +/ +) +. +애플리케이션 기본 정보를 기록하여 관리하는가? + +애플리케이션의 기본 정보예시이름버전담당자서버 위치 등를 기록하여 목록을 관리한다또한 +( +: +, +, +, +) +. +, +애플리케이션의 종류 및 활용 목적예시대외 서비스내부 업무용개발용 등에 따라 자산을 분류 +( +: +, +, +) +하고 +이 분류된 기준에 따라 기본적인 보안 정책예시 +대외 서비스는 웹 방화벽 기능 적용 +내부 +, +( +: +, +시스템은 사내망 접근만 허용 등을 정의하여 관리하는 수준을 의미한다 +) +. +초기 +자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리할 수 있는가? + +자산관리시스템 +이나 별도의 그룹웨어 등을 통해 애플리케이션 인벤토리를 관리하기 시작한다 +(ITAM) +. +실무 환경에서는 네트워크 스캔에이전트 기반 또는 +연동 방식을 바탕으로 설치되어 있는 애플리 +, +API +케이션을자동으로 탐지하고식별된 정보를 +이나 그룹웨어의 인벤토리에 주기적으로 갱신한다 + +, +ITAM +. +또한 +개발 소스코드 관리를 위해 사용하는 깃허브 +등의 형상 관리 도구를 애플리케이션 +, +(GitHub) +인벤토리관리의 일부로 통합하여 활용할 수도 있다 + +. + +| 항목 | 5.4.2 애플리케이션 인벤토리 | | +| --- | --- | --- | +| 설명 | 조직 내에서 사용되는 모든 응용을 식별하고, 이를 체계적으로 관리하는 과정이다. 인벤토리를 통해 응용의 상태, 소유권, 사용 목적 등을 파악할 수 있다. | | +| 성숙단계 | 기존 | 모든 애플리케이션의 인벤토리를 수동으로 목록화하였는가? | +| | | 애플리케이션 기본 정보를 기록하여 관리하는가? | +| | 초기 | 자동화된 인벤토리 도구를 도입하여 애플리케이션을 자동으로 식별하고 관리 할 수 있는가? | +| | 향상 | 애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가·관리할 수 있는가? | +| | 최적화 | AI 기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가? | +| | | 애플리케이션 인벤토리를 다른 보안 시스템과 통합, 종합적인 보안 관리가 이루어지고 있는가? | + + +향상 +애플리케이션 인벤토리에 보안 정보를 추가하여 애플리케이션의 보안 상태를 평가관리할 수 있는가 +· +? + +식별된 애플리케이션 인벤토리에 다양한 보안 관련 정보를 통합하여 관리하는 단계이다실무 환경 +. +에서는 +파이프라인과 연계하여 +과정에서 수행된 +검사 결과예시 +DevSecOps +, CI/CD +SAST/DAST/SCA +( +: +탐지된 취약점 목록 +번호 +소프트웨어 구성요소 명세서 +정보패치 상태사용된 인증서 +, CVE +), SBOM( +) +, +, + +유효성애플리케이션이 보유한 접근권한예시 +키 +접근 계정 +등의 보안 정보를 인벤토리에 +, +( +: API +, DB +) +자동으로 추가하고 매핑한다이를 통해 관리자는 단순히 애플리케이션 목록을 넘어각 애플리케이션의 +. +, + +현재 보안 상태와 위험도를 지속적으로 평가하고 관리한다. +최적화 + +기반 인벤토리 관리 시스템을 도입하여 애플리케이션 변경 사항을 실시간으로 반영할 수 있는가 +AI +? + +기반의 인벤토리 관리 시스템을 도입하여 애플리케이션의 변경 사항을 실시간으로 반영한다 +ML/AI +. +실무 환경에서는 클라우드 네이티브 환경예시쿠버네티스에서의 오토스케일링이나 신규 배포로 인해 +( +: +) + +수시로 변경되는 애플리케이션 및 워크로드의 설치변경삭제 이벤트를 +기반 이상 탐지 또는 +/ +/ +ML/AI +실시간 로그 분석을 바탕으로 자동으로 감지한다감지된 내용은 즉시 애플리케이션 인벤토리에 실 +. +시간으로 반영되어 항상 최신 상태를 유지한다. +애플리케이션 인벤토리를 다른 보안 시스템과 통합종합적인 보안 관리가 이루어지고 있는가 +, +? + +향상단계에서 확보된 인벤토리의 보안 정보예시취약점 상태 +권한가 다른 보안 시스템과 +' +' +( +: +, SBOM, +) + +유기적으로 통합되어 종합적인 보안 관리가 이루어진다 +실무 환경에서는 인벤토리 데이터가 중앙 +. +정책 엔진 +예시 +및 +등과 실시간으로 연동된다 +이를 통해 +(PDP)( +: ICAM) +SIEM/SOAR, ZTNA, CNAPP +. +정책 엔진은 애플리케이션의 최신 보안 상태예시심각한 취약점 +이 발견된 앱를 접근제어 정책에 +( +: +(CVE) +) + +동적으로 반영할 수 있으며 +시스템에서 위협 탐지 및 통합 대응예시 +취약한 앱이 +, SIEM/SOAR +( +: ' +' +설치된기기 자동 격리에 인벤토리 정보를 활용하는 등 완전 자동화된 정책 적용 및 위협 대 + +) +응이 +수행된다. + +소프트 +웨어애플리케이션 보안 +· +항목 +안전한 소프트웨어 개발 및 통합 +5.5.1 +설명 +소프트웨어 개발 라이프사이클 +전반에 걸쳐 보안 요소를 내제화학개발된 소프트웨어를 +(SDLC) +, +안전하게 통합하는 과정이다. +코드 검토런타임 보호보안 +게이트웨이컨테이너 및 서버리스 보안과 같은 제어 기능이 +, +, +API +, +통합되고 자동화된다 +를 통하여 워크플로우를 구성한다 +. DevSecOps +. +성숙단계 +기존 +개발 프로세스에 보안 코딩 표준이 적용되어 있는가? +코드 배포 전정적이고 수동으로 보안 테스트를 수행하는가 +, +? +초기 +보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 +보안 취약점을 식별하는가? +문화를 도입하였는가 +DevSecOps +? +주요 개발 내용에 대한 +문서를 작성하는가 +SBOM +? +향상 +서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? +프로세스 전반에 걸친 +문서를 작성하는가 +SBOM +? +최적화 +소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? +런타임 소프트웨어에 대한 분석이 자동화되어 있는가? +세부 설명 +기존 +개발 프로세스에 보안 코딩 표준이 적용되어 있는가? + +조직의 컴플라이언스 기준예시 +시큐어코딩 가이드에 따른 기본적인 소프트웨어 +( +: OWASP Top 10, KISA +) + +개발 보안 가이드라인이 문서로 수립되어 있다실무 환경에서는 이 가이드라인이 개발 프로세스나 +. +소프트웨어 개발 생명주기에 체계적으로 통합되거나 강제되지는 않으며주로 개발자에게 교육 +SDLC( +) +, + +자료로 제공되거나 자체적인 점검 용도로 활용되는 수준에 머무른다. +코드 배포 전정적이고 수동으로 보안 테스트를 수행하는가 +, +? + +애플리케이션 배포 전 보안성 검토가 +에 체계적으로 통합되어 있지 않으며 +정적 분석 도구 +SDLC +, +등을 활용한 보안 테스트가 자동화되지 않은 상태이다실무 환경에서는 개발 완료 후 배포 +(SAST) +. +전이나 +년 단위의 취약점 점검 등 정해진 주기에 따라 보안 담당자가 수동으로 +도구를 실행하여 +, 1 +SAST + +취약점을 점검하거나 +매뉴얼 방식으로 코드 검토를 수행하는 등 제한적인 수준의 보안 테스트가 +, +이루어진다. +초기 +보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 +식별하는가? + +소프트웨어 개발 생명주기가 명확히 정의되고 +보안이 내재된 개발개념을 도입하기 시작한다 +SDLC( +) +, ' +' +. + +| 항목 | 5.5.1 안전한 소프트웨어 개발 및 통합 | | +| --- | --- | --- | +| 설명 | 소프트웨어 개발 라이프사이클(SDLC) 전반에 걸쳐 보안 요소를 내제화학, 개발된 소프트웨어를 안전하게 통합하는 과정이다. 코드 검토, 런타임 보호, 보안 API 게이트웨이, 컨테이너 및 서버리스 보안과 같은 제어 기능이 통합되고 자동화된다. DevSecOps를 통하여 워크플로우를 구성한다. | | +| 성숙단계 | 기존 | 개발 프로세스에 보안 코딩 표준이 적용되어 있는가? | +| | | 코드 배포 전, 정적이고 수동으로 보안 테스트를 수행하는가? | +| | 초기 | 보안 검토와 테스트를 소프트웨어 개발 라이프사이클에 통합하여 개발 단계부터 보안 취약점을 식별하는가? | +| | | DevSecOps 문화를 도입하였는가? | +| | | 주요 개발 내용에 대한 SBOM 문서를 작성하는가? | +| | 향상 | 서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? | +| | | 프로세스 전반에 걸친 SBOM 문서를 작성하는가? | +| | 최적화 | 소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? | +| | | 런타임 소프트웨어에 대한 분석이 자동화되어 있는가? | + + +실무 환경에서는 +의 개발및 테스트단계에 보안 검토와 테스트 활동이 공식적으로 통합된다 +SDLC +' +' +' +' +. +예시개발자가 코드를 작성하는 단계에서부터 +정적 분석를 수행하여 시큐어 코딩 규칙 +( +: +SAST( +) +위반 +여부를 검사하고 +테스트 단계에서 +동적 분석를 통해 기본적인 취약점을 식별하는 등 +개발 +, +DAST( +) +) +초기부터 보안 취약점을 식별하고 수정하는 프로세스를 갖추기 시작한다. + +문화를 도입하였는가 +DevSecOps +? + +보안팀 +개발팀 +운영팀 간의 협업 체계를 수립하고 +파이프라인에 보안을 통합하려는 초기 +, +, +, CI/CD +문화를 도입하기 시작한다 +실무 환경에서는 보안팀이 개발 프로세스에 참여하여 보안 +DevSecOps +. +요구사항을 전달하고개발팀은 +파이프라인에 +정적 분석 +검사를 연동하여 빌드 시 자동으로 +, +CI +SAST( +) + +실행하는 등 +개발 +보안 +운영 +이 함께 보안을 책임지는 문화를 구축하기 시작하는 +, +(Dev), +(Sec), +(Ops) +단계이다. +주요 개발 내용에 대한 +문서를 작성하는가 +SBOM +? + +소프트웨어 공급망 보안의 중요성을 인식하고 +주요 개발 내용에 대한 +소프트웨어 구성요소 +, +SBOM( +명세서작성을 시작한다실무 환경에서는 +소프트웨어 구성요소 분석도구 등을 도입하여빌드 +) +. +SCA( +) +, +시 + + +애플리케이션에 포함된 오픈소스 라이브러리 및 서드파티 구성요소를 식별하고이 목록을 기반으로 +, +문서를 수동 또는 반자동으로 생성하여 관리한다이는 향후 발견될 취약점에 대비하여 구성 +SBOM +. +요소를 추적할 수 있는 기반을 마련하는 단계이다. +향상 +서드파티 라이브러리 및 오픈소스 소프트웨어의 보안 검사를 자동화하여 수행하는가? + +소프트웨어 공급망 보안을 강화하기 위해 +소스 코드에 포함된 서드파티 라이브러리나 오픈소스 +, +컴포넌트를자동으로 식별하고 +알려진 취약점 +을 분석 및 경고 처리한다 +실무 환경에서는 + +, +(CVE) +. +소프트웨어 구성요소 분석도구가 +파이프라인에 통합되어빌드 시점마다 자동으로 실행된다 +SCA( +) +CI/CD +, +. +예시 +등급 이상의 +가 포함된 오픈소스 라이브러리가 탐지될 경우빌드를 실패 +처리 +( +: 'High' +CVE +, +(Fail) +하거나 보안팀에 즉시 경고를 전송하여 조치) +프로세스 전반에 걸친 +문서를 작성하는가 +SBOM +? + +'초기단계의 수동반자동 작성을 넘어 +프로세스 전반에 걸쳐 +작성을 자동화한다실무 +' +/ +, SDLC +SBOM +. + +환경에서는 +도구나 빌드 도구가 +파이프라인과 연동되어컴파일 시점 또는 배포 시점마다 +SCA +CI/CD +, + +최종 배포물아티팩트에 포함된 모든 구성요소라이브러리모듈의존성 등의 목록과 버전라이선 +( +) +( +, +, +) +, +스 정보가 포함된 +이 자동으로 생성되고 저장예시아티팩트 저장소된다 +SBOM +( +: +) +. +최적화 +소프트웨어 개발과 관련된 조직의 프로세스가 격리되어 있는가? + +소프트웨어 개발과 관련된 조직의 프로세스가 물리적논리적으로 완벽히 격리된다실무 환경에서는 +· +. +개발 +테스트 +운영 +환경이 +마이크로 세그멘테이션 시스템 등을 통해 네트워크 수준에서 +' +', ' +', ' +' +ZTNA, +엄격히 분리된다또한 +파이프라인예시 +자체도 격리된 전용 세그먼트에서 +. +, CI/CD +( +: Jenkins, GitLab CI) + +실행되며각 단계빌드테스트배포는 최소 권한의 서비스 계정으로만 동작한다개발자나 운영자의 +, +( +, +, +) +. + +직접적인 운영 환경 접근은 원천적으로 차단되며 +긴급 접근이 필요할 경우 +시스템과 연동된 +, +PAM +권한 승인을 통해서만 제한적으로 허용된다 +JIT(Just-in-Time) +. + +런타임 소프트웨어에 대한 분석이 자동화되어 있는가? + +런타임 +환경의 소프트웨어에 대한 분석 및 보호가 자동화된다 +실무 환경에서는 +(Runtime) +. +SASE, +시스템 등을 통해실제 운영 환경에서 실행 중인 애플리케이션의 내부 동작예시 +WAAP, IAST, RASP +, +( +: +비정상적인 함수 호출메모리 접근이나 +요청을 지속적으로 모니터링한다특히 클라우드 네이티브 +, +) +API +. + +환경예시쿠버네티스에서는 +시스템 등을 통해 컨테이너와 워크로드의 런타임 행위를 분석하고 +( +: +) +CNAPP +, +정의된 정책을 위반하는 이상 행위예시허용되지 않은 프로세스 실행악성 +서버 통신 시도를 +( +: +, +C&C +) + +실시간으로 탐지하고 자동으로 차단한다. +모든 소프트웨어 개발 및 통합 프로세스가 자동화되어 있는가? + +소프트웨어 개발에 대한 요구사항 정의부터 코드 통합보안 테스트배포에 이르는 +전 과정이 +, +, +SDLC +완전 자동화된 +체계로 운영된다 +실무 환경에서는 +DevSecOps +. +IaC(Infrastructure as Code), GitOps +워크플로우와 통합되어개발자가 정책이나 코드를 커밋 +하는 순간부터 +, +(Commit) +SAST/DAST/SCA/IAS T +등의 모든 보안 테스트와 정책 준수 검증이 자동으로 실행된다모든 검증을 통과한 경우에만 배포가 +. +자동으로 승인 및 실행되며 +이 모든 개발 및 통합 프로세스는 관리자 개입이 최소화된 자율적 +, +인 +방식으로운영된다 + +. + +항목 +소프트웨어 위험 관리 +5.5.2 +설명 +소프트웨어 개발 및 운영 과정에서 발생할 수 있는 보안 위험을 식별평가완화하는 프로세스이다 +, +, +. +성숙단계 +기존 +최소한의 위험 요소가 식별되고 문서화하였는가? +소프트웨어 위험 관리 계획이 수립되어 있는가? +초기 +위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? +향상 +소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 +이루어지는가? +최적화 +기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가 +AI +? +맞춤형 공격에 대응 가능한가? +세부 설명 +기존 +최소한의 위험 요소가 식별되고 문서화 하였는가? + +기본적인 +소프트웨어 개발 생명주기기준으로 위험 관리가 이루어지나체계적이지 않은 상태 +SDLC( +) +, +이다. +실무 환경에서는 개발 초기 또는 운영 중 발견된 취약점이나 위험 요소를 개발자가 자체적으로 +식별하고비정형적으로 문서화한다 +위험 식별 기준이 조직 전체적으로 일관되지 않고 +기본적인 + +. +, +소프트웨어개발 보안 가이드에 따라 개발자가 수동으로 조치하고 관리하는 수준에 머무른다 + +. +소프트웨어 위험 관리 계획이 수립되어 있는가? + +발생 가능한 보안 사고예시 +취약점 발견 +악성코드 감염에 대비한 기본적인 대응 절차 및 책임 +( +: +, +) +분장 +이 +(R&R) +문서화되어 있다하지만 이 소프트웨어 위험 관리 계획이 +전반에 걸쳐 체계적으로 + +. +SDLC + +적용되지 않으며실질적인 훈련이나 정기적인 검토는 제한적으로 수행된다 +, +. +초기 +위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? + +위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 정량적으로 평가하기 시작한다 +실무 +. +환경에서는 +의 요구사항 분석또는 설계단계에서부터 식별된 위험 요소를 평가한다이 단계에서는 +SDLC +' +' +' +' +. + +검사 결과로 나온 취약점에 대해 +공통 취약점 평가 시스템 +점수나 +이해관계 +SAST/SCA +CVSS( +) +SVSS( +자별 취약점 평가 시스템 +등을 활용하여 등급을 분류하고해당 소프트웨어의 자산 가치중요도나 +) +, +( +) +비즈니스 영향도 분석을 통해 리스크를 정량화한다 +이 평가 결과를 바탕으로예시 +등급 +. +( +: 'High' +취약점우선 조치 +어떤 취약점부터 조치할지에 대한 우선순위 산정 프로세스를 마련하여 운영한다 + +), +. +향상 +소프트웨어 공급망에 대한 보안 강화를 통하여 전 주기적 자동화 위험 관리가 이루어지는가? + +초기 +단계의 위험 평가를 확장하여 +소프트웨어 공급망 전체로 위험 관리 범위를 확대한다 +실무 +' +, +. +환경에서는 +전반에 걸쳐 +개발 중인 코드뿐만 아니라 사용되는 모든 오픈소스 및 서드파티 +SDLC +, + +| 항목 | 5.5.2 소프트웨어 위험 관리 | | +| --- | --- | --- | +| 설명 | 소프트웨어 개발 및 운영 과정에서 발생할 수 있는 보안 위험을 식별, 평가, 완화하는 프로세스이다. | | +| 성숙단계 | 기존 | 최소한의 위험 요소가 식별되고 문서화하였는가? | +| | | 소프트웨어 위험 관리 계획이 수립되어 있는가? | +| | 초기 | 위험 평가 프로세스를 도입하여 소프트웨어의 위험 수준을 평가하는가? | +| | 향상 | 소프트웨어 공급망에 대한 보안 강화를 통하여 전주기적 자동화 위험 관리가 이루어지는가? | +| | 최적화 | AI 기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가? | +| | | 맞춤형 공격에 대응 가능한가? | + + +구성요소의공급망 위험까지 포함하여 자동으로 분석을 수행한다 +파이프라인에 +도구가 + +. CI/CD +SCA +통합되어빌드 시마다 +을 자동으로 생성하고알려진 취약점 +이 포함된 라이브러리가 있는지 +, +SBOM +, +(CVE) + +자동으로 스캐닝한다탐지된 취약점은 +점수자산 중요도외부 위협 인텔리전스 +정보 등을 +. +CVSS +, +, +(CTI) + +종합하여 위험 등급을 자동으로 평가하고이에 따른 조치예시 +등급 이상일 경우 빌드 차단 +, +( +: 'High' +, +개발자에게 즉시 알림를 수행하는 등 전 주기적인 자동화 위험 관리가 이루어진다 +) +. +최적화 + +기반 예측 분석을 도입하여 잠재적 보안 위험을 식별할 수 있는가 +AI +? + +기반의 예측 분석을 도입하여 잠재적 보안 위험을 사전에 식별한다실무 환경에서는 +ML/AI +. +DevSecOps +파이프라인의 +로그 +과거 취약점 데이터개발자의 코드 변경 이력 +패턴 +런타임 +CI/CD +, +, +(Commit/PR +), +환경의 이상 동작 패턴 +등 방대한 데이터를 +엔진이 학습한다이를 통해개별 취약점이 +(IAST, RASP) +AI +. +, + +아닌 공격자가 악용할 가능성이 높은 코드나 향후 장애를 유발할 수 있는 복잡한 의존성등 잠재적인 +' +' +' +' + +위험 요소를 사전에 식별하고 개발자에게 경고하여 선제적인 대응을 수행한다. +맞춤형 공격에 대응 가능한가? + +조직의 소프트웨어 개발 환경 +에 특화된 위협 모델 +과 자동 방어 체계를 구축한다 +(SDLC) +(Threat Model) +. +실무 환경에서는 단순히 취약점을 찾는 것을 넘어조직을 대상으로 하는 특정 공격자 전술 +에 +, +(TTPs) +기반한 공격 시뮬레이션 +을 +파이프라인과 운영 환경 +(BAS, Breach and Attack Simulation) +CI/CD +에 대해 정기적자동으로 수행한다이를 통해 발견된 공격 경로 +나 취약점을 즉시 +(Runtime) +/ +. +(Attack Path) + +식별하고 +시스템과 연동하여 관련 보안 정책예시 +룰셋 자동 업데이트 +, SIEM/SOAR +( +: CNAPP/WAAP +, +방어 정책 즉시 적용을 자율적으로 조정하는 등 맞춤형 공격에 대한 자동화된 대응을 수행한다 +RASP +) +. + + +### 6. 데이터 + +데이터 목록 관리 +항목 +데이터 카탈로그 위험 정렬 +6.1.1 +설명 +조직의 모든 데이터를 분류하고 +데이터가 식별 및 목록화되고 데이터 환경에 대한 모든 +, +변경 사항이 자동으로 감지되어 카탈로그 내에 포함되는지 확인하는 것을 의미한다. +각 데이터 항목에 대한 위험 수준을 평가하여 이를 체계적으로 관리하는 과정이다. +성숙단계 +기존 +데이터 자산의 초기 카탈로그가 작성되어 있는가? +데이터를 파악하고유형 분류를 수동으로 하는가 +, +? +데이터에 대한 기본적인 위험 평가를 문서화하였는가? +초기 +자동화된 데이터 카탈로그 도구가 도입되어 있는가? +데이터 자산을 일부 자동으로 수집하고 분류하는가? +데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? +향상 +데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? +데이터를 자동화하여 파악하고위험한 데이터에 대한 보호 정책이 적용되어 있는가 +, +? +데이터 사용 패턴 분석이 가능한가? +최적화 +기반 데이터 위험 요소를 실시간으로 분석하는가 +AI +? +데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? +세부 설명 +기존 +데이터 자산의 초기 카탈로그가 작성되어 있는가? + +조직 내 보유한 데이터의 위치예시파일 서버 +포맷보유 시스템 등을 식별하여스프레드 +( +: +, DB, PC), +, +, +시트나자산관리 문서 등을 활용해 수동으로 목록카탈로그을 작성하여 관리하기 시작한다 + +( +) +. +데이터를 파악하고유형 분류를 수동으로 하는가 +, +? + +데이터를 파악하고 +유형 분류를 수동으로 수행한다 +실무 환경에서는 조직의 일반 보안 정책이나 +, +. +컴플라이언스예시개인정보보호법정보통신망법신용정보법 등기준에 따라데이터를 일반 데이터와 +( +: +, +, +) +, +' +' + +개인정보가 포함된 데이터 +수준으로 단순 분류하는 단계이다 +이 분류를 기준으로 기본적인 보안 +' +' +. +정책예시개인정보 포함 +는 암호화 적용이 적용되기 시작한다 +( +: +DB +) +. +데이터에 대한 기본적인 위험 평가를 문서화 하였는가? + +분류된 데이터의 민감도와 자산 중요도보안 요구사항 등을 중심으로 정성적인 위험 평가를 수행하고 +, + +그 결과를 문서화한다 +실무 환경에서는 이 위험 등급이 일반 +또는 민감개인정보 +등 내부 관리 +. +' +' +' +( +)' +기준에 따라 단순 정의되며아직 체계적인 평가 프레임워크가 적용되지는 않은 상태이다 +, +. + +| 항목 | 6.1.1 데이터 카탈로그 위험 정렬 | | +| --- | --- | --- | +| 설명 | 조직의 모든 데이터를 분류하고, 데이터가 식별 및 목록화되고 데이터 환경에 대한 모든 변경 사항이 자동으로 감지되어 카탈로그 내에 포함되는지 확인하는 것을 의미한다. 각 데이터 항목에 대한 위험 수준을 평가하여 이를 체계적으로 관리하는 과정이다. | | +| 성숙단계 | 기존 | 데이터 자산의 초기 카탈로그가 작성되어 있는가? | +| | | 데이터를 파악하고, 유형 분류를 수동으로 하는가? | +| | | 데이터에 대한 기본적인 위험 평가를 문서화하였는가? | +| | 초기 | 자동화된 데이터 카탈로그 도구가 도입되어 있는가? | +| | | 데이터 자산을 일부 자동으로 수집하고 분류하는가? | +| | | 데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? | +| | 향상 | 데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? | +| | | 데이터를 자동화하여 파악하고, 위험한 데이터에 대한 보호 정책이 적용되어 있는가? | +| | | 데이터 사용 패턴 분석이 가능한가? | +| | 최적화 | AI 기반 데이터 위험 요소를 실시간으로 분석하는가? | +| | | 데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? | + + +초기 +자동화된 데이터 카탈로그 도구가 도입되어 있는가? + +자동화된 데이터 카탈로그 도구예시 +등를 도입하여다양한 데이터가 생성될 +( +: DSPM, eDLP, eDRM +) +, +때나 저장소예시 +온프레미스 +클라우드 스토리지 +의 메타데이터를 자동으로 수집하기 +( +: +DB, +, SaaS) +시작한다. 이 도구를 통해 수동 관리스프레드시트에서 벗어나조직의 데이터 자산을 식별하고 사전 + +( +) +, + +정의된 규칙에 따라 카탈로그화하는 기반을 마련한다. +데이터 자산을 일부 자동으로 수집하고 분류하는가? + +데이터 카탈로그 도구나 +암호화 등 연계 솔루션을 통해 특정 저장소예시 +eDLP, eDRM, DB +( +: DB, S3, +파일서버에 있는 데이터의 포맷이름구조 등을 기반으로 일부 자동 분류를 수행한다이 단계에서는 +) +, +, +. + +일반 데이터와 개인정보 포함 데이터수준을 넘어조직의 업종과 특성을 고려한 데이터 등급예시 +' +' +' +' +, +( +: +대외 유통 가능 +조직 내부 전용 +직책자 전용을 정의하기 시작한다이 분류 기준에 따라 일부 +' +', ' +', ' +') +. +민감 정보에 대한 데이터 태깅을 수행한다. +데이터 위험 수준 평가를 위하여 기본적인 기준과 지침이 마련되어 있는가? + +수동 및 일부 자동화된 분류 결과를 바탕으로데이터의 민감도접근권한저장 위치사용 주체 등을 +, +, +, +, + +고려한 위험 평가 기준과 지침을 수립하여 평가 표준화를 시작한다실무 환경에서는 정의된 데이터 +. +등급예시 +조직 내부 전용 +직책자 전용에 따라 차등화된 보안 정책을 적용하기 위한 기준을 +( +: ' +', ' +') +마련한다. 예시 +직책자 전용등급의 데이터는 +을 통한 암호화 및 열람 권한 제어를 적용하고 +( +: ' +' +eDRM +, +조직 내부 전용데이터의 외부 반출 시에는 별도 결재 프로세스를 적용 +' +' +) +향상 +데이터의 민감도와 위험 수준을 평가하기 위한 분석 도구가 있는가? + +데이터 보안 형상 관리 +시스템이나 이와 유사한 전문 분석 도구를 도입한다실무 환경에서는 +(DSPM) +. + +이러한 도구가 +머신러닝자연어 처리 +기반의 분석을 통해 데이터 내용 자체를 스캔하고 +ML/NLP( +/ +) +, +개인식별정보 +개인건강정보 +금융정보 등 정형비정형 데이터에 포함된 민감 정보를 자동으로 +PII( +), PHI( +), +/ + +식별하고 분류한다 +이 결과를 바탕으로 데이터의 민감도와 비즈니스 영향도를 조합하여 정량화된 +. +데이터별 위험 스코어링을 수행한다. +데이터를 자동화하여 파악하고위험한 데이터에 대한 보호 정책이 적용되어 있는가 +, +? + +자동화된 데이터 파악 +및 분류 결과를 바탕으로위험한 데이터에 대한 보호 정책이 자동으로 +(Discovery) +, + +적용된다 +실무 환경에서는 +등의 시스템이 연동되어 +이전 단계에서 정의한 +. +DSPM, eDLP, eDRM +, +데이터등급예시 +직책자 전용이나 위험 점수가 높은 항목예시 +개인정보 +건 이상이 포함된 + +( +: ' +') +' +' +( +: +문서에 대해 +암호화 +데이터 접근제어 강화 +외부 이동 방지 +차단 +등의 보호 정책이 +) +eDRM +, +, +(DLP +) +자동으로적용된다 + +. +데이터 사용 패턴 분석이 가능한가? + +데이터 자체의 분류를 넘어 +누가 +언제 +어떻게해당 데이터에 접근하고 사용하는지에 대한 패턴 +, ' +' ' +' ' +' +분석이 가능해진다실무 환경에서는 +등의 시스템이 연동되어데이터 접근 +. +DSPM, UEBA, SIEM/SOAR +, + +로그예시 +접근 로그파일 서버 로그를 수집한다이를 통해 평소와 다른 시간대의 접근과도한 +( +: DB +, +) +. +, + +양의 데이터 다운로드 시도휴면 계정의 민감 데이터 접근 등 이상 행위를 탐지하고이 분석 결과를 +, +, + +실시간 위험 정렬에 반영하여 경고를 발생시킨다. +최적화 + +기반 데이터 위험 요소를 실시간으로 분석하는가 +AI +? + +기반 엔진이 정적 위험 평가를 넘어실시간으로 조직 내 모든 데이터 저장소예시온프레미스 +ML/AI +, +( +: + +클라우드 스토리지 +를 지속적으로 모니터링한다실무 환경에서는 +시스템 등이 +DB, +, SaaS) +. +DSPM +AI +엔진을 활용하여 +새로운 데이터 항목의 생성 +민감도예시 +기밀 정보 +자동 분류 +데이터 접근 +, +, +( +: PII, +) +, +패턴사용자 간 공유연관성 등을 실시간으로 분석한다이 분석 결과는 데이터의 동적인 위험 점수로 +, +/ +. + +산출되며데이터 카탈로그에 자동으로 반영되어 항상 최신 위험 상태를 유지한다 +, +. +데이터 카탈로그와 다른 보안 시스템이 통합되어 관리되는가? + +데이터 카탈로그가 중앙 정책 엔진 +예시 +및 +(PDP)( +: ICAM) +SIEM/SOAR, eDLP, eDRM, ZTNA, CNAPP, +등 다른 보안 시스템과 유기적으로 통합되어종합적인 데이터 중심 보안 관리가 이루어진다 +CASB +, +. +실무 환경에서는 +가 실시간으로 분석한 데이터 위험 점수예시 +고위험 기밀 데이터가 정책 엔진 +AI +( +: ' +') +에 즉시 연동된다 +정책 엔진은 이 정보를 바탕으로 해당 데이터는 다운로드 불가와 같은 +(ICAM) +. +' +' +동적접근 정책을 결정하며이 정책은 +등 정책시행지점 +에 자동으로 적용되 + +, +eDLP, ZTNA, CASB +(PEP) +어 +데이터 유출 방지 및 정책 적용위협 탐지가 자동화된 방식으로 연동된다 +, +. + +항목 +기업 데이터 거버넌스 +6.1.2 +설명 +조직 내 모든 데이터의 사용보호관리에 대한 규칙과 절차를 정의하고이를 준수하는 과정을 +, +, +, + +의미한다. +성숙단계 +기존 +데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? +데이터 소유자와 관리자를 지정하였는가? +데이터 거버넌스 프레임워크가 도입되어 있는가? +초기 +데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? +향상 +데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? +데이터 정책 준수에 대한 실시간 모니터링이 가능한가? +최적화 +데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? +세부 설명 +기존 +데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? + +데이터의 생성수집처리저장폐기 등 전체 생명주기에 대해 조직 내에서 준수해야 할 기본적인 +, +, +, +, +규칙과 절차를 문서화한다실무 환경에서는 주로 개인정보보호법 등 관련 규제컴플라이언스준수를 +. +( +) + +위한 최소한의 기반을 마련하는 수준이며보안 정책이나 지침서 내에 데이터 관리 원칙이 포함되어 있다 +, +. +데이터 소유자와 관리자를 지정하였는가? + +각 데이터 자산예시 +인사 +재무데이터에 대해 +정책적 책임을 지는 소유자 +예시 +( +: +DB, +) +, +' +(Data Owner)'( +: +인사팀장와 실무적인 관리를 담당하는 관리자 +예시 +팀 +관리자를 명시하여 책임 +) +' +(Data Steward)'( +: IT +DB +) + +구역 +을 정의한다이 단계에서는 이러한 지정이 공식적으로 문서화되어 있으나실제 권한 통제 +(R&R) +. +, + +시스템과 자동화되어 연계되지는 않는다. +데이터 거버넌스 프레임워크가 도입되어 있는가? + +데이터 품질보안접근제어 등 데이터 통제 영역을 데이터 목록 관리 및 분류에서 정의한 기본적인 +, +, + +거버넌스 체계프레임워크초안을 수립하고 문서화한다이 프레임워크는 조직의 데이터 관리 방향성을 +( +) +. + +제시하지만아직 전사적으로 강제되거나 자동화된 도구를 통해 구현되지는 않은 상태이다이 단계 +, +. +에서는 데이터 거버넌스가 실무자 수준에서 논의되거나공식적인 전사 기구예시데이터 위원회가 +, +( +: +) +아닌 +보안 부서 내부의 협의체 수준에서 다루어진다 +IT/ +. + +| 항목 | 6.1.2 기업 데이터 거버넌스 | | +| --- | --- | --- | +| 설명 | 조직 내 모든 데이터의 사용, 보호, 관리에 대한 규칙과 절차를 정의하고, 이를 준수하는 과정을 의미한다. | | +| 성숙단계 | 기존 | 데이터 거버넌스 정책 수립 및 데이터 관리에 대한 기본적인 지침이 마련되어 있는가? | +| | | 데이터 소유자와 관리자를 지정하였는가? | +| | | 데이터 거버넌스 프레임워크가 도입되어 있는가? | +| | 초기 | 데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? | +| | 향상 | 데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? | +| | | 데이터 정책 준수에 대한 실시간 모니터링이 가능한가? | +| | 최적화 | 데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? | + + +초기 +데이터 정책 준수를 위하여 정기적인 감사와 검토가 수행되는가? + +기존단계에서 문서화된 데이터 거버넌스 프레임워크를 체계화하고조직의 업종과 특성을 고려하여 +' +' +, + +데이터를 다양한 형태의 등급예시 +대외 유통 가능 +조직 내부 전용 +직책자 전용 +등으로 모두 +( +: ' +', ' +', ' +' +) +정의한다 +이러한 데이터 등급과 정책은 실무 부서예시 +현업 +보안 +담당자들이 참여하는 공식 +. +( +: +, IT, +) +협의체를 통해 결정된다 +이 정의된 데이터 등급에 맞춰 +민감도 +암호화 +보관 주기 +반출 및 결재 +. +, +, +, +, +프로세스예시 +직책자 전용 +등급은 +암호화 적용 +조직 내부 전용 +등급은 +외부 반출 +( +: ' +' +eDRM +, ' +' +eDLP +차단 +등 구체적인 보호 조치를 정책화한다 +실무 환경에서는 이 정책이 실제 시스템에 일관되게 +) +. +적용되고있는지 확인하기 위해정기적으로예시반기별연간 +데이터 접근 기록품질보안 위반 + +, +( +: +, +) +, +, +여부 등을 점검하는 감사 및 검토를 수행한다. +향상 +데이터 거버넌스 도구를 이용하여 데이터 관리 프로세스를 자동화하였는가? + +데이터 거버넌스 도구예시 +암호화 등를 이용하여 데이터 관리 프로세스를 +( +: DSPM, eDLP, eDRM, DB +) + +자동화한다이전 단계 단계에서 수립된 데이터 분류 체계데이터 소유권 지정정책 매핑 등 반복 +. +, +, +되는 관리 작업을 자동화하여 정책 누락이나 인적 오류를 방지한다실무 환경에서는 변화하는 법규 +. +예시개인정보보호법 개정나 비즈니스 요구사항에 따라 데이터 거버넌스 도구를 통해 정책을 자동으로 +( +: +) + +수정하고이를 적용 대상 전체예시전사 +클라우드 스토리지에 반영하는 것을 의미한다 +, +( +: +DB, +) +. +데이터 정책 준수에 대한 실시간 모니터링이 가능한가? + +데이터 거버넌스 도구와 +등의 시스템을 연동하여데이터 정책 준수 여부에 대한 +UEBA, SIEM/SOAR +, +실시간 모니터링을 수행한다 +실무 환경에서는 민감 데이터 접근 +비정상 활동 +정의된 정책예시 +. +, +, +( +: +반출 정책 +위반 등을 실시간으로 감지하고 알림을 전송하거나 접근을 차단하며이 분석 결과를 +eDLP +) +, + +거버넌스 정책에 지속적으로 피드백한다. +최적화 +데이터 거버넌스를 조직의 모든 시스템과 통합하여 일관된 데이터 관리가 가능한가? + +데이터 거버넌스가 실무자와 경영진이 포함된 전사적 기구예시 +데이터 위원회 +디지털 위원회를 +( +: +, +) +통해 조직 차원에서 다루어진다 +실무 환경에서는 이 전사 기구를 통해 데이터 거버넌스 정책이 +. +결정되며, 이 정책은 +기반의 거버넌스 관리 시스템예시 +등을 + +ML/AI +( +: DSPM, eDLP, eDRM, SIEM/SOAR +) + +통해 전사 모든 시스템예시 +온프레미스 +클라우드 +에 실시간으로 반영되고 통합된다 +( +: +, +, SaaS) +. ML/AI +엔진이 데이터의 생성변경폐기 등 전체 생명주기를 지속적으로 모니터링하며정책 준수 여부를 +, +, +, +실시간으로 평가하고 자동 최적화한다이를 통해 수립된 일관된 데이터 관리 정책은 +. +ICAM, ZTNA, +등 다른 제로트러스트 보안 시스템과 유기적으로 통합되어기술적인 통제와 관리적인 거버넌스가 +eDLP +, + +하나의 체계로 운영된다. + +접근 결정방법 +항목 +데이터 접근제어 +6.2.1 +설명 +데이터를 보호하기 위해 데이터에 접근할 수 있는 권한을 부여하고 +이를 엄격하게 관리하는 +, +과정이다. +데이터 및 사용자 +장치 속성을 기반으로 데이터에 대한 적절한 접근 및 사용을 보장하여야 +/NPE/ +한다. +성숙단계 +기존 +데이터 접근 정책이 수립되어 있는가? +데이터 접근권한이 수동으로 부여되는가? +초기 +중앙 집중식 접근제어 시스템이 도입되어 있는가? +최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? +향상 +을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가 +ABAC +? +최적화 +데이터 접근제어를 최소화하고 +를 이용하여 데이터 접근에 대한 실시간 권한 +AI +조정이 가능한가? +세부 설명 +기존 +데이터 접근 정책이 수립되어 있는가? + +조직의 중요 데이터예시개인정보 +서버에 접근할 수 있는 사용자와 권한을 정의한 정책이 +( +: +DB, DB +) +존재하며주로 엑셀이나 내부 지침 등 문서 형태로 수립되어 있다실무 환경에서는 이 정책이 별도 +, +. + +접근제어 시스템이나 +시스템 내에 정적인 규칙 +으로 수동 설정되어 적용된다 +DB +PAM +(Rule) +. +데이터 접근권한이 수동으로 부여되는가? + +사용자의 직무나 개별 요청예시그룹웨어 결재메일 요청에 따라보안 관리자또는 +관리자가 +( +: +, +) +, +( +DB +) +데이터 접근제어 시스템예시 +접근제어 +에 접속하여 직접 권한을 부여하거나 회수한다이 +( +: DB +, PAM) +. +단계에서는 +역할을 하는 +등 중앙 식별자 관리 시스템과 부분적으로 연동 +IDP +Directory, IAM, PAM +되거나 +연동되지 않아 계정 정보나 권한이 실시간으로 동기화되지 않으며 인적 실수로 인한 최소 +, +권한 부여에는 한계점이 존재한다. +초기 +중앙 집중식 접근제어 시스템이 도입되어 있는가? + +개별수동 관리를 벗어나데이터 접근제어를 위한 중앙 집중식 접근제어 시스템예시 +접근제어 +/ +, +( +: DB +시스템 +이 전사적으로 확대된다 +실무 환경에서는 모든 +서버나 파일 서버에 대한 데이터 +, PAM) +. +DB +접근 경로가 이 중앙 플랫폼을 통해서만 접근 가능하도록 통합되며역할 +기반 또는 부서 기반으로 +, +(Role) + +권한 설정을 관리하기 시작한다. + +| 항목 | 6.2.1 데이터 접근제어 | | +| --- | --- | --- | +| 설명 | 데이터를 보호하기 위해 데이터에 접근할 수 있는 권한을 부여하고, 이를 엄격하게 관리하는 과정이다. 데이터 및 사용자/NPE/장치 속성을 기반으로 데이터에 대한 적절한 접근 및 사용을 보장하여야 한다. | | +| 성숙단계 | 기존 | 데이터 접근 정책이 수립되어 있는가? | +| | | 데이터 접근권한이 수동으로 부여되는가? | +| | 초기 | 중앙 집중식 접근제어 시스템이 도입되어 있는가? | +| | | 최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? | +| | 향상 | ABAC을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가? | +| | 최적화 | 데이터 접근제어를 최소화하고 AI를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가? | + + +최소한의 권한 요소를 확인하여 데이터 접근 여부를 결정하는가? + +포괄적인 서버 접근예시 +서버 접근 후 서버 내 +접근과 달리 +역할 기반 접근제어를 +( +: +DB +) +, RBAC( +) +기반으로최소 권한 원칙을 적용하여 업무상 필요한 범위의 데이터예시특정 테이블특정 쿼리에 + +( +: +, +) +대한 접근 여부를 결정한다이 단계에서는 아직 중앙 +예시 +와 실시간으로 연동되지는 +. +IDP( +: IAM, ICAM) + +않더라도 +데이터 접근제어 시스템예시 +접근제어 +내에서 정의된 역할 +과 정책을 +, +( +: DB +, PAM) +(Role) +기반으로최소한의 권한을 부여하고 접근을 통제한다 + +. +향상 + +을 통하여 컨텍스트 기반으로 접근권한 관리가 구현되어 있는가 +ABAC +? + +속성 기반 접근제어을 도입하여정적 역할 +뿐만 아니라 다양한 컨텍스트속성를 기반으로 +ABAC( +) +, +(Role) +( +) + +접근권한 관리를 구현한다실무 환경에서는 데이터 접근제어 시스템예시 +접근제어 +이 중앙 +. +( +: DB +, PAM) + +예시 +와 연동되어 +사용자의 속성예시 +부서 +직책을 실시간으로 가져온다 +또한 +IDP( +: IAM, ICAM) +, +( +: +, +) +. +, +사용자위치기기 보안 상태업무 맥락예시접속 시간 +등 다양한 요소를 정책 엔진이 평가하여 + +, +, +( +: +) +, +세분화된 정책 적용이 가능하다 +나아가 +시스템과 연동하여 +민감 데이터 유출 +. +, eDLP, SIEM/SOAR +, ' +시도와 같은 보안 이벤트가 탐지되면 이에 따라 데이터 접근권한을 동적으로 조정예시해당 계정의 +' +( +: + +접근 차단하고 이상 탐지 시 접근을 차단한다 +DB +) +. +최적화 +데이터 접근제어를 최소화하고 +를 이용하여 데이터 접근에 대한 실시간 권한 조정이 가능한가 +AI +? + +데이터 접근제어를 최소화하고 +을 활용하여 데이터 접근에 대한 실시간 권한 조정이 자율적으로 +ML/AI + +이루어진다 +실무 환경에서는 데이터 카탈로그 정책에 맞춰서 식별된 데이터 등급분류 정보와 +. +를 통해 수집분석된 사용자 행동 패턴 +접근 로그데이터 민감도 정보가 중앙 정책 +SIEM/SOAR +/ +(UEBA), +, + +엔진 +인 +에 실시간으로 전달된다 +시스템 등은 해당 정보들을 +로 +(PDP) +ICAM +. ICAM, SIEM/SOAR +ML/AI +분석하여 동적인 위험 점수를 스코어링하며이 점수에 맞게 데이터 접근권한예시 +기반의 +, +( +: JIT/JE A +최소 권한을 +에서 결정한다 +이 결정된 정책은 실제 데이터 접근을 수행하는 정책시행지점 +) +PDP +. +예시 +등에 전달되어 +권한을 실시간으로 조정하거나 이상 징후 탐지 시 +(PEP)( +: PAM, eDLP, eDRM +) +, +자동으로접근을 차단한다또한 업무 변동사용자 역할 변경새로운 데이터 생성 시에도 이 접근 + +. +, +, +제어 정책이 자동으로 갱신되며전사적 보안 정책과 연계된다 +, +. + +데이터 암호화 +항목 +데이터 암호화 및 권한 관리 +6.3.1 +설명 +데이터의 무결성과 기밀성을 보호하기 위해 데이터를 암호화하고접근권한을 관리하는 과정이다 +, +. +저장 및 전송 중인 데이터를 암호화하기 위한 전략을 수립하고 구현하여야 한다. +성숙단계 +기존 +데이터를 수동으로 암호화하는가? +암호화 정책이 수립되어 있는가? +데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? +초기 +자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? +중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? +향상 +고급 암호화 기술을 도입하고권한 관리 시스템과 통합하여 관리하고 있는가 +, +? +과 +을 결합하여 보다 정밀한 권한 관리가 이루어지는가 +RBAC +ABAC +? +최적화 +기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 +AI +조정이가능한가 + +? +세부 설명 +기존 +데이터를 수동으로 암호화하는가? + +조직의 체계적인 암호화 전략이 부재하여특정 중요 파일에 대해서만 수동으로 암호화를 수행한다 +, +. +실무 환경에서는 문서 자체 암호예시 +오피스 암호 설정 +압축파일 암호를 적용하는 수준에 +( +: MS +, +) +머무르며 +암호화나 +같은 자동화된 시스템이 도입되지 않았거나도입되었더라도 전사적으로 +, DB +eDRM +, + +적용되지 않고 특정 영역에 한정된 상태이다. +암호화 정책이 수립되어 있는가? + +암호화 대상 데이터예시개인정보 +사용 알고리즘키 관리 방식 등이 내부 보안 지침이나 정책서에 +( +: +), +, + +문서화되어 있다하지만이 정책이 실제 시스템에 일관되게 적용강제되지 않으며암호화 키 관리가 +. +, +( +) +, + +중앙화된 시스템예시 +시스템없이 담당자가 수동으로 관리하는 등 체계적인 관리가 부재하다 +( +: KMS +) +. +데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? + +암호화된 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있다 +실무 환경에서는 +. +eDRM +시스템 등이 도입되어 정형 데이터와 비정형 데이터에 대한 접근권한예시 +열람 +편집 +인쇄 +캡처 +( +: +, +, +, +방지을 정의할 수 있다하지만 이 권한 분류가 데이터 카탈로그나 사용자 인벤토리와 연동되지 않고 +) +. +, +업무 담당자소유자가 수동으로 권한을 적용하는 등 표준화된 중앙 접근제어 시스템예시 +과는 +( +) +( +: PAM) + +통합되지 않은 상태이다. + +| 항목 | 6.3.1 데이터 암호화 및 권한 관리 | | +| --- | --- | --- | +| 설명 | 데이터의 무결성과 기밀성을 보호하기 위해 데이터를 암호화하고, 접근권한을 관리하는 과정이다. 저장 및 전송 중인 데이터를 암호화하기 위한 전략을 수립하고 구현하여야 한다. | | +| 성숙단계 | 기존 | 데이터를 수동으로 암호화하는가? | +| | | 암호화 정책이 수립되어 있는가? | +| | | 데이터를 보호하기 위한 초기 권한 관리 체계가 수립되어 있는가? | +| | 초기 | 자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? | +| | | 중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? | +| | 향상 | 고급 암호화 기술을 도입하고, 권한 관리 시스템과 통합하여 관리하고 있는가? | +| | | RBAC과 ABAC을 결합하여 보다 정밀한 권한 관리가 이루어지는가? | +| | 최적화 | AI 기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가? | + + +초기 +자동화된 암호화 도구를 통하여 중요한 데이터를 자동으로 암호화하는가? + +수동 암호화에서 벗어나자동화된 암호화 도구를 도입하여 중요한 데이터를 보호하기 시작한다모든 +, +. + +데이터를 암호화할 경우 성능 저하예시 +데이터 조회 및 전송 지연가 발생할 수 있으므로 +실무 +( +: +) +, +환경에서는데이터 거버넌스 및 데이터 분류 체계에 따라 정의된 중요 데이터예시개인정보기밀 + +( +: +, +문서에 한해 암호화가 적용된다이는 콘텐츠 중앙화 +시스템 +암호화 솔루션정형 데이터 +) +. +(ECM) +, DB +( +), +비정형 데이터 +등을 통해 구현되며 +데이터 저장 시 파일디렉토리 단위 또는 데이터베이스 +eDRM( +) +, +· +필드 단위까지 암호화를 수행한다. +중앙 집중식 데이터 권한 관리 시스템이 도입되어 있는가? + +데이터 암호화와 연계되어 +이나 +접근제어 +등 시스템 내에서 데이터 접근권한 관리가 +, eDRM +DB +, PAM + +중앙 집중화되기 시작한다실무 환경에서는 +등시스템과 연동하여사용자의 역할 +이나 +. +IDP(IAM +) +, +(Role) + +그룹 정보를 기반으로 암호화된 데이터문서 +테이블에 대한 접근권한예시열람편집인쇄을 +( +, DB +) +( +: +, +, +) +중앙에서 승인회수하는 체계를 구축하기 시작한다 +/ +. +향상 +고급 암호화 기술을 도입하고권한 관리 시스템과 통합하여 관리하고 있는가 +, +? + +등 강력한 암호화 기술을 기반으로 저장 데이터 +와 전송 중인 데이터 +AES-256, TLS 1.3 +(Data-at-Rest) +를 보호한다실무 환경에서는 +암호화 +시스템 등이 전사적으로 적용되며 +(Data-in-Transit) +. +DB +, eDRM +, +암호화 시 키의 생성 +배포 +회전 +폐기 등 전체 생명주기를 관리하기 위한 중앙 집중식 키 관리 +, +, +, +시스템(KMS, +등이 도입되어 운영된다 +ICAM +) +. + +과 +을 결합하여 보다 정밀한 권한 관리가 이루어지는가 +RBAC +ABAC +? + +암호화된 데이터에 대한 권한 관리가 단순 역할 기반을 넘어 +정적인 +역할 기반과 동적인 +, +RBAC( +) +속성 기반을 결합하여 정밀하게 이루어진다실무 환경에서는 +시스템 등과 +ABAC( +) +. +eDRM, eDLP, PAM +같은 권한 관리 시스템이 중앙 정책 엔진 +예시 +과 연동되어사용자의 역할예시 +인사팀 +(PDP)( +: ICAM) +, +( +: ' +') +뿐만아니라 컨텍스트예시 +사무실 내 접속 +보안 등록 기기까지 결합하여 데이터 접근 조건을 + +( +: ' +', ' +') +상세화하고 보다 정밀한 제어를 수행한다. +최적화 + +기반 암호화 및 권한 관리를 통하여 데이터 보호 최적화 및 실시간 권한 조정이 가능한가 +AI +? + +기반의 +기능이 데이터 암호화 및 권한 관리 체계에 통합된다 +실무 환경에서는 +ML/AI +UEBA +. +SIEM/ +등에서 수집된 사용자 행동 패턴데이터 사용 이력기기 상태 등을 +엔진이 실시간으로 +SOAR, DSPM +, +, +AI + +분석하여 동적인 위험 점수를 산출한다이 점수는 중앙 정책 엔진 +예시 +으로 전달되며 +. +(PDP)( +: ICAM) +, +정책 엔진은 위험도에 따라 암호화된 데이터문서 등에 대한 접근권한예시 +열람 +편집 +인쇄을 +( +) +( +: +, +, +) +자동으로조정예 +편집 +권한을 읽기 전용으로 하향하거나 차단하는 등의 조치를 정책시행지점 + +( +: ' +' +' +' +) +에 해당하는 +암호화키 관리 시스템 등을 통해 실시간으로 수행한다 +(PEP) +eDRM. DB +, +. + +데이터에 대하여 실시간 권한에 따른 마스킹이 가능한가? + +데이터에 대한 실시간 권한에 따른 동적 마스킹이 구현된다 +실무 환경에서는 사용자의 권한 수준 +. +예시일반 사용자 +인사팀 관리자 +및 컨텍스트예시사내망 +외부망에 따라동일한 데이터 +( +: +vs. +) +( +: +vs. +) +, +예시고객 테이블에 접근하더라도 개인정보나 민감정보예시건강정보생체인식 정보 등가 실시간으로 +( +: +) +( +: +, +) + +마스킹 +되거나 일부만 가공되어 출력된다 +이는 +접근제어 솔루션 +또는 애플리케이션 +('***') +. +DB +, PAM +레벨에서 정책 엔진 +의 결정을 받아 정책시행지점 +에서 수행되며민감 데이터 노출을 최소화 +(PDP) +(PEP) +, +하면서업무 연속성을 보장한다 + +. + +데이터 분류 +항목 +데이터 라벨링 및 태그 지정 +6.4.1 +설명 +데이터를 식별하고 분류하기 위해 메타데이터를 추가하는 과정이다. +데이터 소유자는 레이블 지정태깅 정책에 대한 관리 지침을 준수하여 데이터 레이블을 지정하고 +/ + +태그를 지정한다. +단계가 발전함에 따라 자동화되며확장 요구사항을 충족하고 더 나은 정확성을 제공하여야 한다 +, +. +이를 통해 데이터의 보안 수준을 강화할 수 있다. +성숙단계 +기존 +라벨링 및 태그 지정 지침을 수립하였는가? +일관된 데이터 분류 체계가 마련되어 있는가? +초기 +데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별분류하는가 +· +? +민감한 데이터에 특수 라벨을 적용할 수 있는가? +민감한 데이터에 보안 정책이 차등적으로 적용되는가? +향상 +자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류식별 +· +가능한가? +타 보안 시스템과 연계하여 데이터 보호가 가능한가? +최적화 +고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 +적용하는가? +를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정되는가 +AI +? +세부 설명 +기존 +라벨링 및 태그 지정 지침을 수립하였는가? + +조직 내 데이터의 보안 등급 +민감도 +중요도예시 +대외비 +기밀 +공개 +등에 따른 라벨 및 태그 +, +, +( +: ' +', ' +', ' +') +지정 기준을 문서화한다 +이 단계에서는 데이터 거버넌스에서 정의한 분류 체계를 실제 데이터에 +. +어떻게부착할 것인지에 대한 초기 지침을 의미하며 +아직 자동화된 도구 없이 관리자가 수동으로 + +, +시스템이나 데이터에 보안 등급라벨을 적용하기 시작한다 +( +) +. +일관된 데이터 분류 체계가 마련되어 있는가? + +데이터의 민감도예시 +개인정보 포함 +일반 +및 부서업무 기반의 기본적인 데이터 분류 체계는 +( +: ' +', ' +') +/ +마련되어 있다하지만 이 분류 체계라벨링가 전사적으로 일관되게 적용되지 않으며예시 +부서는 +. +( +) +( +: A + +대외비 +부서는 기밀등 용어 혼용 +자동화된 시스템이 부재하여 실제 데이터와 정책라벨 +간의 +' +', B +' +' +), +( +) + +일관성이 보장되지 않는 상태이다. +초기 +데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별분류하는가 +· +? + +데이터 거버넌스에서 정의한 데이터 분류 체계예시 +대외 유통 가능 +조직 내부 전용 +직책자 전용 +( +: ' +', ' +', ' +' +등를 바탕으로사용자가 파일 저장 또는 문서 작성 시 수동으로 데이터에 라벨과 태그를 지정 +) +, +하여 +식별분류하기 시작한다 +· +. + +| 항목 | 6.4.1 데이터 라벨링 및 태그 지정 | | +| --- | --- | --- | +| 설명 | 데이터를 식별하고 분류하기 위해 메타데이터를 추가하는 과정이다. 데이터 소유자는 레이블 지정/태깅 정책에 대한 관리 지침을 준수하여 데이터 레이블을 지정하고 태그를 지정한다. 단계가 발전함에 따라 자동화되며, 확장 요구사항을 충족하고 더 나은 정확성을 제공하여야 한다. 이를 통해 데이터의 보안 수준을 강화할 수 있다. | | +| 성숙단계 | 기존 | 라벨링 및 태그 지정 지침을 수립하였는가? | +| | | 일관된 데이터 분류 체계가 마련되어 있는가? | +| | 초기 | 데이터에 기본적인 라벨과 태그를 수동으로 지정하여 식별·분류하는가? | +| | | 민감한 데이터에 특수 라벨을 적용할 수 있는가? | +| | | 민감한 데이터에 보안 정책이 차등적으로 적용되는가? | +| | 향상 | 자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류·식별 가능한가? | +| | | 타 보안 시스템과 연계하여 데이터 보호가 가능한가? | +| | 최적화 | 고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? | +| | | AI를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정되는가? | + + +민감한 데이터에 특수 라벨을 적용할 수 있는가? + +정의된 데이터 분류 체계예시 +대외 유통 가능 +조직 내부 전용 +직책자 전용등의 일반적인 라벨 +( +: ' +', ' +', ' +' +) + +외에도 +관련 법규컴플라이언스나 정책상 민감도가 높은 데이터예시 +금융정보에 대해 +, +( +) +( +: PII, PHI, +) +민감 +' +' 또는 개인정보 포함과 같은 특수 라벨 +을 적용하여 별도로 식별하고 관리한다 + +' +' +(Tag) +. +민감한 데이터에 보안 정책이 차등적으로 적용되는가? + +민감 +또는 개인정보 포함 +라벨이 적용된 데이터에 대해 +다른 데이터와 차등화된 보안 정책이 +' +' +' +, +적용되기시작한다 +실무 환경에서는 +시스템과 연동하여 +해당 라벨이 부착된 데이터의 외부 + +. +eDLP +, +공유를 제한하거나 +시스템을 통해 기본적인 접근권한예시 +읽기인쇄 제한을 적용하는 등 +, eDRM +( +: +/ +) +초기 수준의 정책이 적용된다. +향상 +자동화된 라벨링 및 태그 지정 도구를 도입하여 자산을 자동으로 분류식별 가능한가 +· +? + +자동화된 라벨링 및 태그 지정 도구예시 +등를 도입하여 자산을 자동으로 +( +: DSPM, eDLP, eDRM +) +분류식별한다 +· +. 실무 환경에서는 +솔루션이나 +시스템이 개인정보 포함 여부예시주민번호 + +eDLP +DSPM +( +: + +패턴 +특정 키워드예시 +대외비 +기밀 +등 데이터 거버넌스에서 정의된 규칙에 따라 데이터 내용 +), +( +: ' +', ' +') +을 스캔하고자동으로 라벨링 및 태그를 지정한다 +(Content) +, +. +타 보안 시스템과 연계하여 데이터 보호가 가능한가? + +자동으로 부착된 라벨 +값에 따라 +타 보안 시스템과 연계하여 데이터 보호 정책이 자동으로 +(Tag) +, +적용되도록보안 시스템 간 연동이 이루어진다실무 환경에서는 데이터에 기밀라벨이 지정되면이 + +. +' +' +, + +정보가 연동된 +시스템에서 해당 데이터의 외부 반출을 자동으로 차단하거나 +시스템이 +eDLP +, eDRM +문서 암호화 및 권한 제어 정책을 자동으로 적용하는 등 +데이터의 분류 등급라벨에 따라 보안 +, +( +) +시스템이연동되어 데이터 보호가 수행된다 + +. +최적화 +고급 메타데이터 관리 도구를 통하여 데이터 라벨링과 태그 지정 프로세스를 적용하는가? + +고급 메타데이터 관리 도구예시 +를 통하여 데이터 라벨링과 태그 지정 +( +: DSPM, eDLP, SIEM/SOAR) +프로세스를 적용한다 +실무 환경에서는 데이터의 내용뿐만 아니라 데이터 소스 +위치 +접근권한 +. +, +, +, +사용자속성예시 +의 사용자 등급 +등 다양한 메타데이터를 자동으로 수집하고이를 기반으로 + +( +: ICAM +) +, +복합적인 라벨링 규칙을 적용한다 +특히 +마이크로 세그멘테이션 시스템과 연동하여 +워크로드나 +. +, +, +애플리케이션에적용된 태그 +정보를 데이터 분류 및 태깅에 활용하는 등 데이터 단위까지 태깅을 + +(Tag) + +고도화한다. + +를 활용하여 변화하는 데이터 환경에 따른 분류가 자동 조정 되는가 +AI +? + +을 활용하여 변화하는 데이터 환경에 따라 분류가 자동으로 조정된다실무 환경에서는 +ML/AI +. +SIEM +중앙 정책 엔진 +시스템 등 전사 보안 체계에서 데이터 라벨 정보를 실시간으로 공유 +/SOAR, ICAM( +) +하고 통합 정책을 수행한다 +엔진이 데이터 변경 패턴이나 사용자 접근 패턴을 지속적으로 +. ML/AI +학습분석하여기존 라벨을 자동으로 수정하거나 태그를 갱신예시 +일반문서를 기밀로 자동 상향 +/ +, +( +: ' +' +' +' +) +하는등 자율적인 분류 및 정책 조정이 이루어진다 + +. + +데이터 손실 방지 +항목 +데이터 손실 방지 +6.5.1 +(DLP) +설명 +민감한 데이터의 유출을 방지하고데이터의 무단 접근을 차단하기 위한 기술과 정책이다 +, +. +시행 지점을 식별하여 승인된 +도구를 배포하고 태그가 지정된 데이터 속성을 +와 통합한다 +DLP +DLP +. +처음에 +솔루션은 비즈니스 영향을 제한하기 위해 모니터링 전용 +모드로 사용하고 나중에 +DLP +“ +“ + +분석 사용은 방지 +모드로 사용한다 +“ +” +. +이후 +와 통합하여 사용한다 +, AI +. +성숙단계 +기존 +정책을 수립하고 수동으로 평가하는가 +DLP +? +도입을 위한 기업 내 범위가 지정되어 있는가 +DLP +? +초기 +도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가 +DLP +? +정책을 중앙에서 관리하는가 +DLP +? +솔루션이 모니터링 모드로 동작하는가 +DLP +? +향상 +시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 +DLP +방지하는가? +솔루션이 방지 모드로 사용되는가 +DLP +? +최적화 +시스템에 +를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 +DLP +AI +수 있는가? +변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? +세부 설명 +기존 + +정책을 수립하고 수동으로 평가하는가 +DLP +? + +데이터 손실 방지 +의 개념을 이해하고 +조직 내부 문서예시 +정보보호 정책지침를 통해 민감 +(DLP) +, +( +: +/ +) +정보예시 +개인정보 +기밀를 정의하고 기본적인 보호 정책을 수립한다 +이 단계에서는 전용 +( +: +, +) +. +DLP +시스템이부재하여실제 유출 위험은 방화벽 로그나 파일 서버 접근 로그 등을 수동으로 분석하고 + +, +사후에 평가하는 수준에 머무른다. + +도입을 위한 기업 내 범위가 지정되어 있는가 +DLP +? + +전사적인 +도입보다는데이터 손실 방지가 필요한 기업 내 범위를 지정목록화한다실무 환경 +DLP +, +( +) +. +에서는 이메일 +외장하드프린터웹 업로드클라우드 환경 등 주요 데이터 유출 경로채널를 +, USB/ +, +, +, +( +) +식별하고 적용 우선순위를 설정한다특히 이 단계에서는 엔드포인트에 설치되는 +등을 활용해 +. +AV, EPP + +기본적인 +기능에 해당하는 +나 외장하드로의 데이터 유출을 통제하거나 이메일예시오피스 +DLP +USB +( +: +) +자체적인 +기능과 네트워크 방화벽의 +기능 등을 활용하여 기초 수준의 데이터 손실을 방지한다 +DLP +DLP +. + +| 항목 | 6.5.1 데이터 손실 방지 (DLP) | | +| --- | --- | --- | +| 설명 | 민감한 데이터의 유출을 방지하고, 데이터의 무단 접근을 차단하기 위한 기술과 정책이다. 시행 지점을 식별하여 승인된 DLP 도구를 배포하고 태그가 지정된 데이터 속성을 DLP와 통합한다. 처음에 DLP 솔루션은 비즈니스 영향을 제한하기 위해 “모니터링 전용“ 모드로 사용하고 나중에 분석 사용은 “방지” 모드로 사용한다. 이후, AI와 통합하여 사용한다. | | +| 성숙단계 | 기존 | DLP 정책을 수립하고 수동으로 평가하는가? | +| | | DLP 도입을 위한 기업 내 범위가 지정되어 있는가? | +| | 초기 | DLP 도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가? | +| | | DLP 정책을 중앙에서 관리하는가? | +| | | DLP 솔루션이 모니터링 모드로 동작하는가? | +| | 향상 | DLP 시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가? | +| | | DLP 솔루션이 방지 모드로 사용되는가? | +| | 최적화 | DLP 시스템에 AI를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가? | +| | | 변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? | + + +초기 + +도구를 도입하여 주요 데이터 유출 경로를 모니터링할 수 있는가 +DLP +? + +기존단계에서 식별된 주요 데이터 유출 경로채널에 대해 데이터 흐름을 탐지하는 초기 +솔루션이 +' +' +( +) +DLP + +적용되기 시작한다 +실무 환경에서는 엔드포인트 +시스템을 도입하여 +프린터 등 매 +. +DLP(eDLP) +USB, +체제어를 수행하거나 +네트워크 +시스템을 통해 이메일 +웹 +등 주요 채널을 +, +DLP +(SMTP), +(HTTP/HTTPS) +통해 전송되는 데이터를 모니터링하는 수준을 의미한다. + +정책을 중앙에서 관리하는가 +DLP +? + +개별 시스템예시방화벽에서 데이터 손실 방지 기능을 확장하여 +전용 시스템의 중앙 관리 포털 +( +: +) +, DLP +콘솔을 +( +) +통해 정책을 관리하기 시작한다실무 환경에서는 이 중앙 포털을 통해 개인정보가 포함된 + +. +' +파일 +등 데이터 유형별로 정책을 정의하고이를 사용자 그룹별로 차등 적용예시 +인사팀은 예외 +' +, +( +: ' +' +, +개발팀은 탐지하며 +위반 시 수행할 행동예시 +알림 +차단을 정의하는 등 일관된 정책 배포가 +' +' +) +, +( +: +, +) +가능해진다. + +솔루션이 모니터링 모드로 동작하는가 +DLP +? + +실제 차단은 수행하지 않고 탐지 및 로깅 중심으로 운영되어 업무 영향도를 최소화한다. +향상 + +시스템이 전체적으로 도입되어 실시간으로 데이터를 보호하고 유출을 방지하는가 +DLP +? + +데이터 손실 방지 +기능이 전사적으로 도입되어실시간으로 데이터를 보호하고 유출을 방지한다 +(DLP) +, +. +실무 환경에서는 영역별 데이터 손실 방지 +를 구현하여엔드포인트 영역은 별도 +시스템을 +(DLP) +, +eDLP + +통해서예시매체제어로컬 파일 암호화 +네트워크 영역은 +게이트웨이를 통해서예시내부망 +( +: +, +), +ZTNA +( +: +전송 데이터 검사 +웹클라우드 영역은 +시스템이나 +시스템 등을 통해서예시웹 +), +/ +RBI +CASB, CANPP +( +: +업로드 차단 +클라우드 공유 통제 +기능을 구현한다 +이러한 +시스템들이 +, +) DLP +. +DLP +SIEM/SOAR, +등 타 보안 시스템과 연동되어 정교한 정책을 통합 수행하며모든 주요 시스템 +ICAM, EDR, eDRM +, +및 엔드포인트에 +에이전트정책이 적용되어 즉각적인 차단 및 알림이 가능하다 +DLP +/ +. + +솔루션이 방지 모드로 사용되는가 +DLP +? + +모니터링 모드에서 방지 모드차단 모드로 전환하여 +정책을 운영한다 +실무 환경에서는 +' +' +' +( +)' +DLP +. +네트워크 +등이 데이터 거버넌스에서 정의된 데이터 카탈로그나 데이터 라벨링과 +eDLP, +DLP, RBI +연동되어, +기밀 +또는 개인정보로 식별된 특정 민감 정보가 외부로 전송되거나 +복사붙여넣기 +' +' +' +' +, +/ +, +화면캡처 +이동 등을 시도할 경우이를 즉각적으로 차단하거나 강제 암호화하는 등의 능동적인 + +, USB +, + +조치를 수행한다. +최적화 + +시스템에 +를 적용하여 데이터 유출 위험을 실시간으로 예측하고 차단할 수 있는가 +DLP +AI +? + +기반의 +기능이 전사적 데이터 손실 방지 +체계에 통합된다 +실무 환경에서는 +ML/AI +UEBA +(DLP) +. +등에서 수집된 사용자 행동 패턴예시 +평소와 다른 시간대의 대량 민감 +SIEM/SOAR, eDLP, ZTNA +( +: +데이터 접근비정상적인 외부 전송 시도을 +엔진이 실시간으로 분석한다이를 통해 향상단계의 +, +) +AI +. +' +' + +정책 위반 탐지를 넘어 +실제 유출이 발생하기 전에 유출 위험을 예측하고 +이 예측위험 점수을 +, +' +' +, +( +) + +중앙 정책 엔진 +예시 +과 연동하여 해당 사용자의 세션을 선제적으로 차단하거나 격리하는 +(PDP)( +: ICAM) + +등 자동화된 대응을 수행한다. +변화하는 데이터 환경에 맞춰 자동으로 보안 정책이 최적화되는가? + +데이터 탐지분류차단경고보고정책 조정에 이르는 +운영의 전체 사이클 +이 자동화된다 +- +- +/ +- +- +DLP +(Lifecycle) +. +실무 환경에서는 +기반의 +시스템이나 인하우스 +형태로 개발된 데이터 통합 +ML/AI +DSPM +(In-house) +관리 포털 등에서 데이터 카탈로그가 지속적으로 데이터 환경을 스캔하여 +신규 클라우드 앱 +, +(SaaS) +이나 새로운 민감 데이터 패턴예시신규 프로젝트 기밀정보의 등장을 자동으로 식별한다이 +( +: +) +. +정보는 +중앙 정책 엔진 +과 +에 연동되어 +기반의 실시간 학습을 통해 기존 +정책을 +(PDP) +SIEM/SOAR +, ML/AI +DLP + +자동으로 갱신최적화하고관리자 승인 없이도 새로운 유출 경로와 민감 패턴에 대한 탐지 및 차단 +( +) +, +정책이 자율적으로 적용된다. + +항목 +데이터 모니터링 및 감지 +6.5.2 +설명 +데이터 사용과 이동을 실시간으로 모니터링하고비정상적인 활동을 탐지하여 보안을 유지하는 +, + +과정이다. +데이터 소유자는 데이터 자산의 접근 +공유 +변환 및 사용에 대한 정보가 포함된 활성 메타 +, +, +데이터를 모니터링한다 +데이터 손실 방지 +및 +데이터 권한 관리 +적용 지점 분석을 +. DLP( +) +DRM( +) +수행하여 분석 도구를 배포할 위치를 결정한다. +파일 공유데이터베이스 등 +및 +범위 밖의 데이터는 대체 도구를 사용하여 변칙적이고 +, +DLP +DRM + +악의적인 활동이 있는지 적극적으로 모니터링하여야 한다. +성숙단계 +기존 +데이터 활동을 수동으로 모니터링하고이벤트를 수동으로 기록하는가 +, +? +데이터 모니터링 및 감지 프로세스가 수립되어 있는가? +초기 +자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? +모니터링 결과를 기반으로 보안 정책 조정이 가능한가? +향상 +데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? +데이터 모니터링 결과를 다른 보안 시스템과 연계하여종합적인 보안 대응이 +, +가능한가? +최적화 +모든 데이터 활동을 지속적으로 평가하고 +컨텍스트 기반 접근에 따라 최소 +, +접근제어가가능한가 + +? +세부 설명 +기존 +데이터 활동을 수동으로 모니터링하고이벤트를 수동으로 기록하는가 +, +? + +데이터 활동에 대한 모니터링이 자동화된 시스템예시 +없이 +관리자나 보안 담당자가 개별 +( +: SIEM) +, IT +시스템에 직접 접속하여 로그를 확인하는 등 수동으로 이루어진다실무 환경에서는 장애 발생이나 +. +감사 요청 시에만 파일 서버 접근 로그 +로그 등을 수동으로 검토하고 +또는 엑셀 파일 +, DB +, CSV +형태로보안 이벤트를 별도 기록하여 관리하는 수준에 머무른다 + +. +데이터 모니터링 및 감지 프로세스가 수립되어 있는가? + +데이터 모니터링 및 감지 프로세스가 기술적인 시스템보다는 관리적 절차에 의존한다실무 환경에서는 +. + +내부 보안 정책이나 +운영 매뉴얼 수준에서 월 회 +접근 로그 점검과 같이 감시 항목과 주기를 +IT +' +DB +' + +정의하고 문서화한다이는 실시간 감지가 아닌사후 점검 및 감사 +목적의 프로세스에 해당한다 +. +, +(Audit) +. +초기 +자동화된 모니터링도구를 통하여 데이터 활동을 감시할 수 있는가 + +? + +기존 +단계의 수동 로그 검토에서 벗어나 +보안 정보 및 이벤트 관리이나 중앙 로그 수집 +' +' +, SIEM( +) +도구를바탕으로 데이터 활동을 감시하기 시작한다실무 환경에서는 +접근제어파일 + +. +eDLP, eDRM, DB +, + +서버 등에서 발생하는 데이터 이동 +접근 +변경 +삭제 관련 로그를 +으로 자동으로 수집하고 +, +, +, +SIEM +, +사전에정의된 기본 규칙 +기반으로 분석상관 분석한다 + +(Rule) +( +) +. + +| 항목 | 6.5.2 데이터 모니터링 및 감지 | | +| --- | --- | --- | +| 설명 | 데이터 사용과 이동을 실시간으로 모니터링하고, 비정상적인 활동을 탐지하여 보안을 유지하는 과정이다. 데이터 소유자는 데이터 자산의 접근, 공유, 변환 및 사용에 대한 정보가 포함된 활성 메타 데이터를 모니터링한다. DLP(데이터 손실 방지) 및 DRM(데이터 권한 관리) 적용 지점 분석을 수행하여 분석 도구를 배포할 위치를 결정한다. 파일 공유, 데이터베이스 등 DLP 및 DRM 범위 밖의 데이터는 대체 도구를 사용하여 변칙적이고 악의적인 활동이 있는지 적극적으로 모니터링하여야 한다. | | +| 성숙단계 | 기존 | 데이터 활동을 수동으로 모니터링하고, 이벤트를 수동으로 기록하는가? | +| | | 데이터 모니터링 및 감지 프로세스가 수립되어 있는가? | +| | 초기 | 자동화된 모니터링 도구를 통하여 데이터 활동을 감시할 수 있는가? | +| | | 모니터링 결과를 기반으로 보안 정책 조정이 가능한가? | +| | 향상 | 데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? | +| | | 데이터 모니터링 결과를 다른 보안 시스템과 연계하여, 종합적인 보안 대응이 가능한가? | +| | 최적화 | 모든 데이터 활동을 지속적으로 평가하고, 컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가? | + + +모니터링 결과를 기반으로 보안 정책 조정이 가능한가? + +모니터링 결과를 기반으로 기존 보안 정책을 조정하기 시작한다실무 환경에서는 +에서 비정상적인 +. +SIEM +' + +대량 다운로드 시도나 평소와 다른 시간대 민감 데이터 접근등 사전에 정의된 이상 패턴이 탐지 +' +' +' +되면관리자가 이 경보 +를 분석한다분석 결과를 바탕으로 +나 +접근제어 +등의 +, +(Alert) +. +, eDLP +DB +, eDRM +정책을 수동으로 조정예시해당 사용자의 다운로드 임계치 하향접근 시간 제한하여 보안 정책을 +( +: +, +) +개선하는 초기 수준의 피드백 루프를 운영한다. +향상 +데이터 활동을 분석하고 이상 징후를 실시간으로 탐지 가능한가? + +기반의 +기능을 통해 사용자별 데이터 활동을 심층적으로 분석하고 이상 징후를 실시간으로 +ML/AI +UEBA + +탐지한다 +실무 환경에서는 +또는 +시스템의 +기능이 파일 접근이동 +공유 +. +SIEM, DSPM +eDLP +UEBA +, +, +, +삭제 패턴 등을 학습하여 정상 행위 기준선 +을 수립한다 +이후 +이 기준선을 벗어나는 비 +(Baseline) +. +, +정상적인행동예시평소와 다른 대량의 민감 파일 접근휴면 계정의 데이터 반출 시도을 실시간으로 + +( +: +, +) + +식별하고 즉각적인 경보를 제공하고 부분적으로 자동화 조치를 수행한다. +데이터 모니터링 결과를 다른 보안 시스템과 연계하여종합적인 보안 대응이 가능한가 +, +? + +데이터 모니터링 결과를 개별 시스템예시 +접근제어 로그에서만 확인하는 것이 아니라다른 보안 +( +: DB +) +, + +시스템과 연계하여 종합적인 보안 대응 체계를 구축한다실무 환경에서는 데이터 모니터링 결과예시 +. +( +: +의 민감 데이터 접근 탐지를 +으로 전송하여 +로그 등과 연관 +DSPM +) +SIEM +EDR, eDLP, eDRM, ICAM +분석을수행한다나아가탐지된 위협을 보안 자동화 도구 +와 연동하여사전에 정의된 플레이북 + +. +, +(SOAR) +, +에 +(Playbook) +따라 해당 계정 임시 잠금또는 +권한 회수등의 대응 절차를 자동화한다 + +' +' +'eDRM +' +. +최적화 +모든 데이터 활동을 지속적으로 평가하고컨텍스트 기반 접근에 따라 최소 접근제어가 가능한가 +, +? + +모든 데이터 활동을 지속적으로 평가하고 +실시간 컨텍스트를 기반으로 최소 접근제어를 수행한다 +, +. +실무 환경에서는 이상 징후 탐지에서 확장되어중앙 정책 엔진 +예시 +이 사용자 위치시간 +, +(PDP)( +: ICAM) +, +, +기기 보안 상태 등 모든 컨텍스트를 실시간으로 평가하여 데이터 접근을 조건부로 허용예시 +( +: +기반의 최소 권한하거나 자동으로 제한한다또한 +기반 분석을 통해 데이터 흐름을 학습 +JIT/JEA +) +. +, AI +하고 예측되는 위협예시내부자 정보 유출 징후을 사전에 탐지하며 +등과 연동하여 관련 차단 +( +: +) +, SOAR + +규칙예시 +정책을 자동으로 생성하고 +우선순위 및 고위험 사용자를 중심으로 +( +: eDLP, eDRM, PAM +) +, +감시 리소스를 자동 분배하는 등 자율적인 데이터 모니터링 및 감지 체계를 운영한다. + +가시성 및 분석 +7. +항목 +모든 관련 활동 기록 +설명 +네트워크사용자기기애플리케이션 등에서 발생하는 모든 이벤트를 기록하고 저장하는 기능이다 +, +, +, +. +이는 로그 데이터를 생성하고이를 기반으로 향후 분석을 위한 데이터를 축적하는 역할을 한다 +, +. +관련 활동에는 로그인 시도접근권한 변경데이터 전송애플리케이션 실행 등 보안과 관련된 +, +, +, +모든 행동이 포함된다. +이 기능은 잠재적인 보안 위협을 식별하고사건 발생 시 정확한 추적과 분석을 가능하게 한다 +, +. +성숙단계 +기존 +로그 기록을 수동으로 수행하는가? +로그 데이터가 특정한 시스템에서만 수집되는가? +초기 +다양한 시스템에서 자동으로 로그를 수집하는가? +로그 수집 및 관리가 자동화되었는가? +향상 +수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? +로그 기록의 무결성을 보장하는가? +로그 데이터를 기반으로 예측 분석향후 발생한 위협 분석이 가능한가 +( +) +? +최적화 +로그를 기반으로 자율 보안 체계가 구축되었는가? +로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? +로그 분석을 통해 보안 정책이 자동으로 조정되는가? +세부 설명 +기존 +로그 기록을 수동으로 수행하는가? + +시스템 +네트워크 +애플리케이션 등에서 발생하는 다양한 이벤트와 보안 관련 활동에 대한 로그가 +, +, +중앙 시스템예시통합로그 시스템 +으로 자동 전송되지 않고담당자가 직접 확인하는 단계이다 +( +: +, SIEM) +, +. +실무 환경에서는 장애 발생이나 감사 요청 시 +담당자가 개별 시스템 콘솔에 접속해 로그 파일을 +, +수동으로추출하고 +이를 엑셀 +워드 +메모장 등 문서 형태로 별도 관리한다 +이로 인해 로그 수집 + +, +, +, +. +및 저장이 자동화되어 있지 않아 실시간 분석이 불가능한 상태이다. +로그 데이터가 특정한 시스템에서만 수집되는가? + +로그 데이터가 중앙으로 통합되지 않고조직 내 일부 핵심 시스템예시방화벽서버주요 애플리 +, +( +: +, +, +케이션에서만 개별적으로 수집관리되는 단계이다실무 환경에서는 다양한 네트워크 장비클라우드 +) +· +. +, + +서비스 +인증 로그 등 전체 인프라에 대한 로그가 통합적으로 수집되지 않는다이로 인해 +, Directory +. +이벤트 분석이 개별 시스템 단위로만 수행되어전체적인 위협 상황을 파악하거나 상관관계 분석을 +, +수행하기 어렵다. + +| 항목 | 7.1 모든 관련 활동 기록 | | +| --- | --- | --- | +| 설명 | 네트워크, 사용자, 기기, 애플리케이션 등에서 발생하는 모든 이벤트를 기록하고 저장하는 기능이다. 이는 로그 데이터를 생성하고, 이를 기반으로 향후 분석을 위한 데이터를 축적하는 역할을 한다. 관련 활동에는 로그인 시도, 접근권한 변경, 데이터 전송, 애플리케이션 실행 등 보안과 관련된 모든 행동이 포함된다. 이 기능은 잠재적인 보안 위협을 식별하고, 사건 발생 시 정확한 추적과 분석을 가능하게 한다. | | +| 성숙단계 | 기존 | 로그 기록을 수동으로 수행하는가? | +| | | 로그 데이터가 특정한 시스템에서만 수집되는가? | +| | 초기 | 다양한 시스템에서 자동으로 로그를 수집하는가? | +| | | 로그 수집 및 관리가 자동화되었는가? | +| | 향상 | 수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? | +| | | 로그 기록의 무결성을 보장하는가? | +| | | 로그 데이터를 기반으로 예측 분석(향후 발생한 위협 분석)이 가능한가? | +| | 최적화 | 로그를 기반으로 자율 보안 체계가 구축되었는가? | +| | | 로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? | +| | | 로그 분석을 통해 보안 정책이 자동으로 조정되는가? | + + +초기 +다양한 시스템에서 자동으로 로그를 수집하는가? + +개별 시스템에서 로그를 수집하고 분석하는 단계에서 확장되어 통합로그 시스템이나 +등을 +SIEM +도입하여다양한 시스템의 로그를 자동으로 수집하기 시작한다실무 환경에서는 네트워크 장비서버 + +. +, +, +인증 로그클라우드 등 다양한 인프라에 설치된 에이전트 또는 +등을 통해 다양한 +Directory +, +Syslog +인프라에 대한 보안 관련 로그 및 이벤트 로그가 자동으로 중앙 저장소에 수집되는 단계를 의미한다. +로그 수집 및 관리가 자동화 되었는가? + +로그의 중앙집중화 및 자동 수집은 +등을 통해 수행되나로그 분석은 주로 수동으로 진행되거나 +SIEM +, + +일부 자동화만 도입된 수준이다실무 환경에서는 수집된 로그가 주로 감사 +대응이나 장애 발생 +. +(Audit) + +시 사후 분석을 위해 저장되며 +통합로그 시스템이나 +등이 도입되었더라도 실시간 상관관계 +, +SIEM +분석 규칙 +이 정교하지 않고 +와 같은 고급 분석 기능이 부재하다이로 인해 로그 분석은 +(Rule) +, UEBA +. +관리자가 수집된 로그에서 키워드 검색에 의존하는 경우가 많으며다양한 로그 유형 간의 상관관계 +, +분석이나 실시간 위협 탐지는 제한적인 단계로 보안 가시성의 기반을 마련하는 단계에 해당한다. +향상 +수집된 데이터를 분석하여 보안 위협을 실시간으로 탐지 가능한가? + +통합로그 시스템과 +을 통해 중앙에 수집된 로그를 +기능과 연계하여 실시간으로 분석한다 +SIEM +UEBA +. +실무 환경에서는 사전에 정의된 상관관계 규칙에 기반하여예시 +로그인 성공 후 +분 이내 +( +: VPN +대량의파일 접근 시도와 같이 단일 로그로는 탐지하기 어려운 복합적인 보안 위협을 실시간으로 + +) +탐지하고 즉시 경고를 생성하여 관리자의 신속한 대응을 가능하게 한다. +로그 기록의 무결성을 보장하는가? + +로그 데이터의 위변조를 방지하여 분석 결과의 신뢰성을 확보한다 +실무 환경에서는 로그 저장 시 +· +. +암호화 및 해시를 적용해 소산 백업하거나 +스토리지에 원본 로그를 +, WORM(Write Once Read Many) + +저장해 로그 전송 시 해시값을 함께 전송하여 무결성을 검증하는 등위변조 방지 및 감사 추적성 +, +· +확보를 위한 기술적 조치가 이루어진 상태이다. +로그 데이터를 기반으로 예측 분석향후 발생한 위협 분석이 가능한가 +( +) +? + +과거 데이터와 행동 패턴을 바탕으로 머신러닝 +등 고급 분석 기술을 활용하여 이상 징후나 +(ML) +잠재적위협을 사전에 감지하기 시작한다 +실무 환경에서는 +시스템이 사용자의 정상 행위 + +. +UEBA +기준선 +을 +(Baseline) +학습하고이를 벗어나는 통계적 이상 징후를 탐지하여 공격이 본격화되기 전에 + +, +선제적으로 대응할 수 있도록 지원한다. +최적화 +로그를 기반으로 자율 보안 체계가 구축되었는가? + +기술을 활용하여 모든 핵심 요소의 로그 데이터를 실시간으로 분석학습하며 +및 +ML/AI +· +, SIEM/SOAR +기능과 유기적으로 연동된다실무 환경에서는 +엔진이 이상 행위예시 +이상 로그인 시도 +UEBA +. +AI +( +: +, +비정상 트래픽 패턴 등을 실시간 탐지하는 것을 넘어탐지된 위협에 따라 중앙 정책 엔진 +등과 +) +, +(ICAM +) + +플레이북 연계를 통해 정책시행지점 +에 자동화된 대응예시 방화벽 규칙 추가사용자 접근 +SOAR +(PEP) +( +: +, + +차단 등을 즉각 수행한다 +또한 +과거 로그 데이터를 학습하여 제로데이 +공격과 같은 +) +. +, +(Zero-Day) +알려지지않은 위협까지 사전 예측하는 자율 보안 체계가 구축된 상태이다 + +. +로그 항목을 자동으로 포맷을 맞추고 정규화가 가능한가? + +이기종 시스템에서 수집된 비정형 로그를 +이나 빅데이터 플랫폼에서 자동으로 정규화한다실무 +SIEM +. + +환경에서는 +어시스턴트 기능이 비정형 로그 샘플을 분석하여 최적의 파싱 +규칙과 정 +AI +(Parsing) +규 +표현식을 자동 생성하고이를 공통된 포맷예시 +으로 표준화하여 분석 효율성을 극대화한다 +, +( +: CEF, LEEF) +. +로그 분석을 통해 보안 정책이 자동으로 조정되는가? + +그 분석 결과가 정책결정지점 +예시 +의 동적 리스크 스코어링에 실시간으로 반영되어 +(PDP)( +: ICAM) +보안정책이 자동으로 조정된다실무 환경에서는 +기능을 통해 분석한 사용자기기 위험 점수가 + +. +UEBA +/ + +높을 경우 +가 이를 즉시 인지하여 접근권한을 제한하도록 정책을 결정한다이 결정은 정책시행 +, PDP +. +지점 +예시 +마이크로 세그멘테이션 등으로 전달되어 해당 사용자의 세션을 강제 +(PEP)( +: ZTNA, PAM, +) +종료하거나 +를 요구하는 등 리스크 기반 접근제어가 자동으로 수행된다또한 +가 트래픽 패턴 +MFA +. +AI +변화를 감지해 보안 정책을 동적으로 업데이트하거나정책 변경 전 잠재적 영향을 평가하는 시뮬 +, +레이션까지수행하는 자율적인 정책 순환 체계가 완성된다 + +. + +항목 +중앙집중적 보안 정보 및 이벤트 관리 +설명 +중앙화된 +은 다양한 보안 이벤트 및 로그 데이터를 한 곳에서 수집하고 관리하는 +SIEM +시스템이다. +은 다수의 보안 도구에서 데이터를 통합하여 +실시간 모니터링 +로그 분석 +경고 및 +SIEM +, +, +, +보고서 작성 기능을 제공한다이를 통해 네트워크 전체의 보안 상태를 중앙에서 파악하고 +. +, +빠르게 보안 사고에 대응할 수 있다. +은 보안 정책 준수 및 규제 요구사항을 충족하는데 도움을 준다 +SIEM +. +성숙단계 +기존 +보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? +초기 +시스템이 도입되었는가 +SIEM +? +중앙집중적 보안 관리 체계가 구축되었는가? +향상 +시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 +SIEM +분석하는가? +최적화 +기반으로 보안 이벤트를 분석하는가 +AI +? +비정상적인 활동에 대하여 자동 대응이 가능한가? +세부 설명 +기존 +보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? + +보안 이벤트 발생 시 데이터를 중앙에서 통합적으로 관리하지 않고 +각 시스템에서 발생하는 보안 +, +기록을 개별적으로 수집관리하는 단계로각 시스템에서 발생하는 로그가 서로 다른 포맷으로 저장 +· +, +되며보안 사고가 발생할 경우 관련 시스템의 로그를 일일이 수집해 스프레드시트나 문서로 정리한다 +, +. +수집된 로그를 기반으로 담당자가 직접 이상 징후를 찾아내고 대응하는 상태이다. +초기 + +시스템 +SIEM +이 도입되었는가? + +기존 +단계의 수동 로그 취합에서 확장되어 +이 도입되고 로그의 수집 +저장 +관리가 자동화된 +' +' +, SIEM +, +, +상태이다실무 환경에서는 네트워크 장비예시방화벽 로그 +인증 로그보안장비 이벤트 +. +( +: +, Directory +, +로그 등 +다양한 인프라의 로그가 +시스템으로 실시간 전송되어 중앙에서 관리된다 +) +SIEM +. +중앙집중적 보안 관리 체계가 구축되었는가? + +각 시스템에서 분산 관리되던 보안 로그가 +에서 통합되어 +전체적인 보안 상태를 중앙집중 +SIEM +, +시스템예시 +( +: +관리콘솔정보보안포털 연계 등을 통해 파악하는 것이 가능하다실무 환경에서는 +SIEM +, +) +. + +보안 사고 발생 시중앙 +에서 관련 로그를 신속하게 추적하고 사전에 정의된 정적 규칙 +, +SIEM +(Static +기반의 상관 분석을 수행할 수 있는 기반이 마련된 상태이다 +Rule) +. + +| 항목 | 7.2 중앙집중적 보안 정보 및 이벤트 관리 | | +| --- | --- | --- | +| 설명 | 중앙화된 SIEM은 다양한 보안 이벤트 및 로그 데이터를 한 곳에서 수집하고 관리하는 시스템이다. SIEM은 다수의 보안 도구에서 데이터를 통합하여, 실시간 모니터링, 로그 분석, 경고 및 보고서 작성 기능을 제공한다. 이를 통해 네트워크 전체의 보안 상태를 중앙에서 파악하고, 빠르게 보안 사고에 대응할 수 있다. SIEM은 보안 정책 준수 및 규제 요구사항을 충족하는데 도움을 준다. | | +| 성숙단계 | 기존 | 보안 이벤트가 발생하면 수동으로 데이터를 분석하는가? | +| | 초기 | SIEM 시스템이 도입되었는가? | +| | | 중앙집중적 보안 관리 체계가 구축되었는가? | +| | 향상 | SIEM 시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가? | +| | 최적화 | AI 기반으로 보안 이벤트를 분석하는가? | +| | | 비정상적인 활동에 대하여 자동 대응이 가능한가? | + + +향상 + +시스템은 다양한 보안 도구와 연동되어 보안 데이터를 종합적으로 분석하는가 +SIEM +? + +이 다양한 보안 도구예시 +등와 연동되어 보안 데이터를 종합적으로 +SIEM +( +: EDR, NDR, PAM, ZTNA, ICAM +) + +분석하는 단계이다 +실무 환경에서는 +구성하는 예시로는 라이선스 비용 및 성능을 고려하여 +. +SIEM +, +모든 원본 로그는 통합로그 시스템이나 빅데이터 플랫폼에 저장하고 +으로는 상관 분석에 필요한 +, SIEM + +핵심 이벤트 로그만 선별적으로 전송하여 분석을 수행한다또한 +자체의 +기 +. +, SIEM +UEBA +능을 활용하거나 +전용 시스템과 연동하여 +사용자 및 기기의 이상 징후를 탐지하고 분석한다 +탐지된 위협은 +UEBA +, +. +사전에 정의된 워크플로우에 따라 보안 운영팀에 알림을 제공하거나 +시스템과 연동하여 자동화된 +, SOAR + +대응 조치를 실행할 수 있다. +최적화 + +기반으로 보안 이벤트를 분석하는가 +AI +? + +기반의 +기능이 +및 빅데이터 플랫폼과 통합되어발생하는 모든 로그와 이벤트를 +ML/AI +UEBA +SIEM +, +실시간으로 수집분석한다 +실무 환경에서는 +엔진이 사용자 및 기기의 행동 패턴을 학습하고 +· +. +AI +이벤트예시 +( +: +에서 탐지된 의심스러운 프로세스 실행과 +에서 탐지된 외부 +통신 시도를 +EDR +NDR +C&C +연계 +간의 연결성을 분석하여단일 이벤트로는 파악하기 어려운 복합 공격 시나리오를 구성한다이 +) +, +. + +분석 결과는 위협으로 규정되어 정책결정지점 +예시 +으로 전달동적 리스크 스코어링의 +' +' +(PDP)( +: ICAM) +, +근거로 사용된다. +비정상적인 활동에 대하여 자동 대응이 가능한가? + +탐지된 위협과 정책결정지점 +예시 +에서 산출된 동적 리스크 스코어에 기반하여 자동화된 +(PDP)( +: ICAM) +대응을 실행한다 +실무 환경에서는 +가 고위험으로 판단할 경우 +정책시행지점 +예시 +. +PDP +, +(PEP)( +: ZTNA, +마이크로 세그멘테이션에 직접 정책을 전달하여 동적 정책 조정예시 +읽기 전용 +권한으로 +PAM, +) +( +: ' +' +강제 하향이나 세션 강제 종료등의 대응을 수행할 수 있다또한더 복잡한 대응이 필요할 경우 +) +‘ +’ +. +, +가 +와 연계하여 +플레이북을 통해 다양한 보안 솔루션에 해당하는 정책시행지점 +PDP +SOAR +, SOAR +에 사용자 계정 잠금또는 기기 격리등 자율적인 대응을 수행하도록 한다 +(PEP) +‘ +’ +‘ +’ +. + +항목 +보안 위협 분석 +설명 +네트워크에서 발생하는 다양한 활동 및 로그를 분석하여잠재적인 보안 위협을 식별하고 +, +대응하는 기능이다. +이는 수집된 로그와 데이터를 기반으로 공격 패턴취약점이상 행동 등을 분석하여 위협을 +, +, + +사전에 탐지하고필요 시 자동으로 조치를 취하는데 사용된다 +, +. +보안 위협 분석은 실시간으로 수행되며침입 시도나 악성 활동을 빠르게 파악하여 피해를 +, +최소화할 수 있다. +성숙단계 +기존 +보안 로그 및 데이터를 수동으로 수집하는가? +등의 취약점을 수동으로 수집하는가 +CVE, ExploitDB +? +초기 +알려진 취약점에 대한 평가 기준을 마련하였는가? +수집된 취약점에 대한 경고가 자동으로 이루어지는가? +향상 +자동화된 보안 위협 분석 도구를 도입하였는가? +실시간 보안 위협 탐지가 가능한가? +최적화 +기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가 +AI +? +세부 설명 +기존 +보안 로그 및 데이터를 수동으로 수집하는가? + +보안 로그와 데이터를 자동화된 시스템 없이 담당자가 각 시스템에서 직접 추출하는 단계이다로그 +. +파일이나 이벤트 데이터를 일일이 확인하고필요한 정보를 수동으로 복사하거나 별도의 문서엑셀 +, +( +, +워드 등에 정리하고 +로그와 보안 데이터가 여러 시스템에 분산 저장되어 있어 통합관리 체계가 +) +, +부재하며, 보안 이벤트 발생 시 각 시스템에 접속해 데이터를 개별적으로 수집해야 하는 상태이다 + +. + +등의 취약점을 수동으로 수집하는가 +CVE, ExploitDB +? + +최신 보안 취약점 정보 +등를 자동화된 +사이버 위협 인텔리전스 +피드 +없이 +(CVE, ExploitDB +) +CTI( +) +(Feed) +담당자가 직접 확인하고필요한 정보를 수동으로 검색하여 취합한다실무 환경에서는 보안 담당자가 +, +. + +공식 웹사이트데이터베이스보안 커뮤니티 등을 직접 방문해 취약점 정보를 수집하고이를 내부 +, +, +, +문서로 정리하거나 각 시스템에 수동 반영한다. +초기 +알려진 취약점에 대한 평가 기준을 마련하였는가? + +알려진 취약점에 대한 평가 기준을 +와 같은 표준 평가 +CVSS(Common Vulnerability Scoring System) +프레임워크를 기반으로 수립하여 내부 정책으로 관리한다 +실무 환경에서는 이 기준을 활용하여 +. +수집된취약점의 위험 등급예시 +을 분류하고 대응 우선순위를 정의하는 + +( +: 'High', 'Medium', 'Low') +단계를의미한다 + +. + +| 항목 | 7.3 보안 위협 분석 | | +| --- | --- | --- | +| 설명 | 네트워크에서 발생하는 다양한 활동 및 로그를 분석하여, 잠재적인 보안 위협을 식별하고 대응하는 기능이다. 이는 수집된 로그와 데이터를 기반으로 공격 패턴, 취약점, 이상 행동 등을 분석하여 위협을 사전에 탐지하고, 필요 시 자동으로 조치를 취하는데 사용된다. 보안 위협 분석은 실시간으로 수행되며, 침입 시도나 악성 활동을 빠르게 파악하여 피해를 최소화할 수 있다. | | +| 성숙단계 | 기존 | 보안 로그 및 데이터를 수동으로 수집하는가? | +| | | CVE, ExploitDB 등의 취약점을 수동으로 수집하는가? | +| | 초기 | 알려진 취약점에 대한 평가 기준을 마련하였는가? | +| | | 수집된 취약점에 대한 경고가 자동으로 이루어지는가? | +| | 향상 | 자동화된 보안 위협 분석 도구를 도입하였는가? | +| | | 실시간 보안 위협 탐지가 가능한가? | +| | 최적화 | AI 기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가? | + + +수집된 취약점에 대한 경고가 자동으로 이루어지는가? + +수집된 취약점 정보에 대해 기본적인 자동화가 구현된 상태이다실무 환경에서는 +에 +정보를 +. +SIEM +CTI + +연동하거나 별도 피드 수신 시스템또는 취약점 관리 시스템이 +점수 +등급 이상의 취약점을 +, +CVSS +'High' + +탐지하면 +팀과 보안팀에 이메일이나 메신저로 경고가 자동으로 전송된다 +이 단계의 자동화는 +, IT +. +위협대응 +보다는 위협 탐지 및 통보 +에 중점을 둔다 + +(Response) +(Alert) +. +향상 +자동화된 보안 위협 분석 도구를 도입하였는가? + +빅데이터 플랫폼 +등 자동화된 보안 위협 분석 도구를 도입하여 +네트워크 +엔드 +SIEM/SOAR, +, XDR +, +, +포인트, 클라우드 등 다양한 환경에서 수집된 로그와 이벤트를 자동으로 상관관계 분석한다 +실무 + +. +환경에서는 +기능을 활용해 사용자 및 기기의 정상 행동 패턴 기준선 +을 학습하고이 +UEBA +(Baseline) +, +기준선에서 벗어나는 편차가 발생 시 자동으로 경고를 생성하고 대응한다. +실시간 보안 위협 탐지가 가능한가? + +수집된 로그와 이벤트 데이터를 기반으로실시간 보안 위협 탐지가 가능한 통합 분석 체계가 구축된 +, + +상태이다실무 환경에서는 외부 +정보를 +이나 +등과 연동하여신규 위협예시악성 +. +CTI +SIEM +XDR +, +( +: +IP, +서버 +정보를 분석 규칙에 자동으로 반영적용한다 +또한 +기능으로 탐지한 내부 이상 +C&C +) +( +) +. +, UEBA +징후예시평소와 다른 시간대의 대량 접근까지 실시간으로 탐지한다이러한 실시간 위협 탐지 및 +( +: +) +. +대응 체계는 내부 +보안 운영 센터 +조직 +과 같은 전문 +SOC( +) +, MDR(Managed Detection and Response) +관제 서비스외주 +또는 내부 인력과 외주 인력이 협업하는 하이브리드 모델을 통해 운영될 수 있다 +( +), +. +탐지된 결과는 +역할 및 책임에 따라 즉시 관리자에게 경고되거나 +시스템으로 전달되어 +R&R( +) +SOAR +대응 프로세스가 운영된다. +최적화 + +기반 예측 분석 시스템을 통하여 위협에 대한 예측이 가능한가 +AI +? + +엔진이 +빅데이터 플랫폼 +등에서 수집된 방대한 데이터를 실시간으로 분석한다 +ML/AI +SIEM, +, XDR +. +실무 환경에서는 +기능이 사용자와 디바이스의 정상 패턴과의 편차를 즉시 탐지하고 +정보와 +UEBA +, CTI + +연계하여 알려지지 않은 위협이나 잠재적 공격예시제로데이 공격 징후을 조기에 예측하고 경고한다 +( +: +) +. +해당 예측 분석 결과는 정책결정지점 +예시 +의 동적 리스크 스코어링에 반영되어 보안 +(PDP)( +: ICAM) +정책이자동으로 조정되며위험도가 높은 상황에서는 +가 정책시행지점 +예시 +에 + +, +PDP +(PEP)( +: ZTNA, PAM) + +직접 정책을 전달하거나 +와 연동하여 즉시 차단 +기기 격리 +추가 인증 +등 자동화된 대응이 +SOAR +‘ +’, ‘ +’, ‘ +’ + +이어진다. 또한 +엔진이 과거 사건과 새로운 데이터를 지속적으로 학습하여 탐지 정확도와 대응 + +AI +속도를 향상시키며변화하는 위협 환경에 맞춰 자율적으로 보안 체계를 최적화한다 +, +. + +항목 +사용자 및 기기 동작 분석 +설명 +네트워크 내의 사용자의 행동 패턴과 기기활동을 모니터링하여 +비정상적이거나 의심스러운 +, +활동을 탐지하는 기능이다. +이를 통해 정상적인 행동과 이상 행동을 구분하고악의적인 활동을 탐지할 수 있다 +, +. +예를 들어평소와 다른 시간에 접속하거나특정 사용자가 비정상적으로 많은 데이터를 전송할 +, +, + +경우 이를 탐지하여 경고를 발송할 수 있다. +이 기능은 +및 머신러닝을 활용하여 행동 패턴을 학습하고실시간으로 분석을 수행한다 +AI +, +. +성숙단계 +기존 +사용자와 기기의 기본적인 활동 데이터를 수집하는가? +비정상 행동을 수동으로 탐지하는가? +기본적인 사용자 행동 패턴을 기록하고 +의심스러운 활동을 발견하면 이를 +, +추적하는가? +초기 +자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? +사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? +향상 +행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? +기반으로 사용자 및 기기의 행동 패턴을 학습하고 +지속적으로 변화하는 +AI +, +패턴에따라 실시간으로 대응 가능한가 + +? +최적화 +사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 +자동으로 조정하고 최소 권한을 부여할 수 있는가? +세부 설명 +기존 +사용자와 기기의 기본적인 활동 데이터를 수집하는가? + +사용자와 기기의 기본적인 활동 데이터가 중앙에서 분석되지 않고개별 시스템예시서버 접속 로그 +, +( +: +, +방화벽 로그에서 수동으로 취합되는 단계이다실무 환경에서는 네트워크시스템애플리케이션 등 +) +. +, +, +에서 발생하는 로그인접속 시간 +주소간단한 활동 기록 등 단순한 활동 데이터만을 수동 또는 +, +, IP +, +단순 로그 수집 시스템을 통해 취합한다. +비정상 행동을 수동으로 탐지하는가? + +비정상적인 사용자 또는 기기 행동은 주로 담당자가 로그를 직접 확인하거나 +주기적으로 수집된 +, +데이터를검토하여 수동으로 탐지한다자동화된 이상 징후 탐지 도구가 도입되어 있지 않아의심 + +. +, +스러운 활동을 발견하려면 담당자의 경험과 직관에 의존하는 경우가 많은 상태이다. +기본적인 사용자 행동 패턴을 기록하고의심스러운 활동을 발견하면 이를 추적하는가 +, +? + +사용자 및 기기의 기본적인 행동 패턴은 개별 시스템에 로그 형태로 기록되나이는 주로 단순 저장 및 +, + +통계용으로만 사용된다 +실무 환경에서는 의심스러운 활동이 발견되더라도예시 +특정 계정의 잦은 +. +( +: +로그인 실패 +해당 로그를 +등과 연계하여 자동으로 추적하거나 분석하지 못하고 +담당자가 +), +SIEM +, +수동으로 관련 시스템의 로그를 일일이 추적하여 확인한다. + +| 항목 | 7.4 사용자 및 기기 동작 분석 | | +| --- | --- | --- | +| 설명 | 네트워크 내의 사용자의 행동 패턴과 기기활동을 모니터링하여, 비정상적이거나 의심스러운 활동을 탐지하는 기능이다. 이를 통해 정상적인 행동과 이상 행동을 구분하고, 악의적인 활동을 탐지할 수 있다. 예를 들어, 평소와 다른 시간에 접속하거나, 특정 사용자가 비정상적으로 많은 데이터를 전송할 경우 이를 탐지하여 경고를 발송할 수 있다. 이 기능은 AI 및 머신러닝을 활용하여 행동 패턴을 학습하고, 실시간으로 분석을 수행한다. | | +| 성숙단계 | 기존 | 사용자와 기기의 기본적인 활동 데이터를 수집하는가? | +| | | 비정상 행동을 수동으로 탐지하는가? | +| | | 기본적인 사용자 행동 패턴을 기록하고, 의심스러운 활동을 발견하면 이를 추적하는가? | +| | 초기 | 자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? | +| | | 사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? | +| | 향상 | 행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? | +| | | AI 기반으로 사용자 및 기기의 행동 패턴을 학습하고, 지속적으로 변화하는 패턴에 따라 실시간으로 대응 가능한가? | +| | 최적화 | 사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 최소 권한을 부여할 수 있는가? | + + +초기 +자동화된 사용자 및 기기 동작 분석 도구를 도입하였는가? + +자동화된 사용자 및 기기 동작 분석 도구를 도입하기 시작한다실무 환경에서는 +의 기본적인 +. +SIEM +상관관계 분석 기능이나 +등 개별 솔루션에서 제공하는 초기 수준의 이상 행위 탐지 +, EDR, NAC(ZTNA) + +기능을 활용한다이를 통해 각 시스템에 설치된 에이전트 또는 중앙 로그 수집기를 통해 사용자와 +. +기기의 활동 정보를 자동으로 취합하며네트워크 내 모든 활동을 실시간으로 모니터링하기 시작한다 +, +. +사용자의 행동 패턴과 기기의 활동을 자동으로 분석하는가? + +도입된 분석 도구는 주로 정적 규칙 +에 기반하여 사용자 행동 패턴과 기기 활동을 자동으로 +(Static Rule) + +분석한다실무 환경에서는 +에 설정된 특정 시간 외 로그인 시도 +반복적인 로그인 실패등과 +. +SIEM +‘ +’, ‘ +’ + +같은 사전에 정의된 시나리오에 따라 이상 징후나 비정상적인 활동이 감지된다 +이 경우시스템이 +. +, +자동으로 경고 +를 생성하여 관리자에게 알림을 전달하지만 +기반의 동적인 기준선 +(Alert) +, ML/AI +분석은 미흡한 상태이다 +(Baseline) +. +향상 +행동 분석 기능을 도입하여 비정상적인 사용자 활동과 기기 동작을 탐지하는가? + +고급분석 기능에 해당하는 +기능이 도입되어 +사용자와 기기의 활동 데이터를 실시간으로 +UEBA +, +수집분석한다 +· +. 실무 환경에서는 +이나 +등에서 수집된 로그를 기반으로 +분석 엔진이 + +SIEM +XDR +ML/AI +정상적인 행동 패턴 기준선 +을 학습하고 +비정상적인 사용자 활동예시 평소와 다른 시간 +(Baseline) +, +( +: +· +장소에서의로그인비정상적인 대량 데이터 전송권한 상승 시도 등이나의심스러운 기기 동작예시 + +, +, +) +, +( +: +미승인 기기 접속비정상 네트워크 트래픽을 자동으로 탐지하여 경고를 생성한다 +, +) +. + +기반으로 사용자 및 기기의 행동 패턴을 학습하고지속적으로 변화하는 패턴에 따라 실시간으로 +AI +, +대응 가능한가? + +기반 +기능이 사용자 및 기기의 행동 패턴을 지속적으로 학습하며변화하는 업무 환경과 +ML/AI +UEBA +, + +새로운 위협에 따라 실시간으로 탐지대응한다실무 환경에서는 행동 패턴의 변화가 감지되면 +가 +· +. +AI +이를 자동으로 인지하고 정상비정상 여부를 판단하여 +이 분석 결과를 정책결정지점 +예시 +/ +, +(PDP)( +: +에 전달하여 동적 리스크 스코어링에 반영한다 +는 이 스코어에 기반하여 정책시행지점 +ICAM) +. PDP +예시 +을 통해 접근 제한 +추가 인증 요구 +세션 종료등 실시간 대응을 수행한다 +(PEP)( +: ZTNA, PAM) +‘ +’, ‘ +’, ‘ +’ +. +최적화 +사용자 및 기기 동작에 대하여 비정상 행위를 자동으로 파악하여 보안 정책을 자동으로 조정하고 +최소 권한을 부여할 수 있는가? + +기반의 고도화된 +기능이 +등에서 수집된 로그를 바탕으로 사용자 및 기기의 +ML/AI +UEBA +SIEM, XDR +정상 행동 패턴을 지속적으로 학습한다실무 환경에서는 +엔진이 평소와 다른 비정상적인 활동을 +. +AI +실시간으로 탐지하고이 탐지 결과는 즉시 정책결정지점 +예시 +으로 전달되어 동적 리스크 +, +(PDP)( +: ICAM) + +스코어링에 반영되며 +탐지된 비정상 행위에 따라 보안 정책이 자동으로 조정된다또한 +는 이 +, +. +, PDP +분석 결과를 바탕으로 +원칙을 적용하여각 사용자의 업무 환경과 실시간 행동 패턴에 따라 +JIT/JEA +, +필요한 최소 권한만을 동적으로 자동 부여하고불필요한 권한은 자동으로 회수하는 자율적인 보 +, +안 +체계를 의미한다. + +항목 +위협 인텔리전스 통합 +설명 +외부의 보안 위협 정보를 수집하고 이를 조직 내 보안 시스템에 적용하여 위협 대응 능력을 +향상시키는 기능이다. +위협 인텔리전스는 악성 +주소도메인취약점 정보 등 다양한 외부 데이터를 포함하며이를 +IP +, +, +, + +통해 조직 내에서 발생할 수 있는 위협을 사전에 탐지하고 차단할 수 있다. +이 기능은 위협 데이터베이스와 연동되어 지속적으로 최신 정보를 업데이트하며보안 시스템과 +, + +통합되어 자동으로 대응 조치를 취할 수 있다. +성숙단계 +기존 +외부의 보안 위협 정보를 수동으로 수집하는가? +위협 데이터를 조직 내 시스템과 수동으로 연동하는가? +초기 +자동화된 위협 인텔리전스 통합 도구를 도입하였는가? +향상 +위협 인텔리전스를 내부 시스템과 통합하였는가? +최적화 +기반의 위협 인텔리전스 시스템을 구축하였는가 +AI +? +세부 설명 +기존 +외부의 보안 위협 정보를 수동으로 수집하는가? + +외부 위협 인텔리전스를 수집하는 자동화된 +사이버 위협 인텔리전스 +플랫폼 없이보안 담당자 +CTI( +) +, +가 +공개 소스 +보안 커뮤니티뉴스블로그 등을 직접 탐색하여 위협 정보를 수동으로 수집한다 +(OSINT), +, +, +. +실무 환경에서는 주로 알려진 악성 +도메인기본 공격 시그니처 등 단순한 +침해 지표 +정보만 +IP, +, +IOC( +) + +취합하며공격 그룹이나 +전술기술절차와 같은 심층 분석 자료는 부재한 상태이다 +, +TTPs( +, +, +) +. +위협 데이터를 조직 내 시스템과 수동으로 연동하는가? + +수집된 위협 데이터를 조직 내 보안 시스템에 수동으로 반영한다실무 환경에서는 담당자가 취합한 +. +악성 +목록 등을 방화벽 +등 개별 보안 시스템의 관리 콘솔에 직접 입력하여 차단 정책을 +IP +, IPS +설정한다. +이나 +등 내부 시스템과의 자동 연동이 미구축되어 있어데이터 중복 입력 및 +SIEM +EDR +, +시스템간 정책 불일치가 발생할 가능성이 있으며 실시간 대응이 어렵다 + +. +초기 +자동화된 위협 인텔리전스 통합 도구를 도입하였는가? + +사이버 위협 인텔리전스 +플랫폼이나 +위협 인텔리전스 플랫폼 +등 자동화된 위협 인텔리전스 +CTI( +) +TIP( +) +통합 도구를 도입하여 외부 위협 데이터를 자동으로 수집통합하기 시작한다실무 환경에서는 이러한 +· +. + +플랫폼이 +시스템과 +기반 연동을 통해수집된 +침해 지표예시악성 +도메인알려진 +SIEM +API +, +IOC( +)( +: +IP, +, + +악성 파일 해시 +데이터를 실시간으로 전송한다 +은 이 정보를 받아 상관관계 규칙에 활용하며 +) +. SIEM +, +내부 로그에서 일치하는 항목이 발견되면예시내부 기기가 알려진 악성 +와 통신 시도 +자동으로 +( +: +IP +) +경고를 생성한다이 단계에서는 위협 정보가 주기적으로 자동 갱신되어 최신 위협 정보를 +. +반영하는 +것에 중점을 둔다. + +| 항목 | 7.5 위협 인텔리전스 통합 | | +| --- | --- | --- | +| 설명 | 외부의 보안 위협 정보를 수집하고 이를 조직 내 보안 시스템에 적용하여 위협 대응 능력을 향상시키는 기능이다. 위협 인텔리전스는 악성 IP 주소, 도메인, 취약점 정보 등 다양한 외부 데이터를 포함하며, 이를 통해 조직 내에서 발생할 수 있는 위협을 사전에 탐지하고 차단할 수 있다. 이 기능은 위협 데이터베이스와 연동되어 지속적으로 최신 정보를 업데이트하며, 보안 시스템과 통합되어 자동으로 대응 조치를 취할 수 있다. | | +| 성숙단계 | 기존 | 외부의 보안 위협 정보를 수동으로 수집하는가? | +| | | 위협 데이터를 조직 내 시스템과 수동으로 연동하는가? | +| | 초기 | 자동화된 위협 인텔리전스 통합 도구를 도입하였는가? | +| | 향상 | 위협 인텔리전스를 내부 시스템과 통합하였는가? | +| | 최적화 | AI 기반의 위협 인텔리전스 시스템을 구축하였는가? | + + +향상 +위협 인텔리전스를 내부 시스템과 통합하였는가? + +에서 수집된 내부 보안 데이터예시서버 이벤트 로그 +탐지 이벤트 등와 외부 위협 인텔 +SIEM +( +: +, EDR +) +리전스를 통합하여 분석한다실무 환경에서는 단순 +침해 지표예시악성 +도메인취약점 정보 +. +IOC( +)( +: +IP, +, +) +뿐만아니라 +특정 공격 그룹의 +전술기술절차를 심층 분석하여 내부 자산에 미칠 수 있는 + +, +TTPs( +, +, +) +실제 위협을 식별한다또한이 분석된 위협 정보는 정책결정지점 +예시 +의 리스크 스코 +. +, +(PDP)( +: ICAM) +어링에 반영되거나 +시스템과 즉시 연동되어 +정책시행지점 +예시 +SIEM/SOAR +, +(PEP)( +: NGFW, EDR, +의 정책을 실시간으로 업데이트예시관련 +탐지 규칙 자동 추가하는 등 선제적인 방어 +ZTNA) +( +: +TTPs +) +조치를 수행한다. +최적화 + +기반의 위협 인텔리전 +AI +스 시스템을 구축하였는가? + +외부 위협 데이터를 실시간으로 수집통합하는 것을 넘어 내부 보안 시스템예시 +· +( +: SIEM, UEBA, XDR +등의 이벤트와 결합하여 분석한다실무 환경에서는 +엔진이 과거 공격 데이터와 실시간 내외부 +) +. +AI +/ +위협 정보를 학습하여알려지지 않은 신규 위협이나 제로데이 공격을 사전에 예측한다이 예측 분석 +, +. + +결과와 내부 이벤트예시 +의 이상 징후를 종합하여 정책결정지점 +예시 +에서 사용자 +( +: UEBA +) +(PDP)( +: ICAM) + +및 기기의 동적 리스크 스코어를 산출하며위험도가 높다고 판단될 경우 +와 연동하거나 정책 +, +SOAR +시행지점 +예시 +을 통해 접근 제한 +추가 인증 요구 +세션 격리등 자율적인 동적 +(PEP)( +: ZTNA, PAM) +‘ +’, ‘ +’, ‘ +’ + +정책을 실행한다. + +항목 +자동화된 동적 정책 +설명 +실시간으로 발생하는 보안 이벤트와 분석 결과를 기반으로 네트워크의 보안 정책을 자동으로 +변경하는 기능이다. +이는 보안 위협이나 비정상적인 활동이 감지되었을 때사전에 정의된 정책을 자동으로 적용 +, +하거나 새로운 정책을 실시간으로 생성하여 네트워크 보안을 강화하는데 사용된다. +예를 들어 +특정 사용자의 행동이 이상하다고 판단되면 그 사용자의 접근권한을 자동으로 +, +제한하거나, 네트워크 세그먼트를 재조정할 수 있다 + +. +자동화된 동적 정책은 빠르고 유연한 대응을 가능하게 하여보안 사고를 최소화할 수 있다 +, +. +성숙단계 +기존 +보안 정책을 수동으로 관리하는가? +보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? +초기 +자동화된 정책 관리 시스템을 도입하였는가? +보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? +향상 +동적 정책을 실시간으로 조정하여 +보안 이벤트 발생 시 즉각적으로 새로운 +, +정책을생성하고 적용하는가 + +? +위협 탐지와 연계하여 동적으로 정책을 조정하는가? +최적화 +기반의 자동화된 동적 정책 시스템을 구축하여 +보안 이벤트 분석 결과에 +AI +, +따라 자율적으로 정책을 조정하는가? +세부 설명 +기존 +보안 정책을 수동으로 관리하는가? + +보안 정책이 문서예시 +정보보호 정책지침절차서 등로는 정의되어 있어 해당 정책을 기반으로 +( +: +/ +/ +) +담당자가수동으로 관리하는 단계이다실무 환경에서는 관리자가 방화벽 +등 개별 보안 + +. +, AV, NAC, PAM + +솔루션에 직접 접속하여 정의된 보안 정책을 수동으로 적용한다 +또한 +주기적인 로그 분석이나 +. +, +선제적인정책 수정보다는장애가 발생하거나 특정 이벤트예시신규 +허용 요청가 발생했을 때만 + +, +( +: +IP +) + +정책을 사후에 수동으로 업데이트하는 정적인 +정책 관리 상태를 의미한다 +(Static) +. +보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? + +보안 이벤트예시악성코드 탐지발생 시자동화된 동적 정책 조정이 불가능하여 관리자가 백신이나 +( +: +) +, + +취약점 점검 도구 로그 등을 수동 분석한 후 +회의를 통해 대응 방안예시 +해당 +대역 차단을 +, +( +: +IP +) +결정한다. 실무 환경에서는 이 결정 사항을 바탕으로 관리자가 다시 개별 보안 장비예시 +방화벽 + +( +: +, +등에 접속하여 수동으로 정책을 수정하며대응까지 상당한 시간이 소요되는 상태이다 +IPS +) +, +. +초기 +자동화된 정책 관리 시스템을 도입하였는가? + +개별적으로 운영되던 보안 정책 관리 도구를 통합하여 중앙에서 관리하기 시작하는 단계이다실무 +. +환경에서는 기존에 분리되어 있던 시스템 접근제어와 +접근제어를 +시스템으로 통합하여 +' +' +'DB +' +PAM + +| 항목 | 7.6 자동화된 동적 정책 | | +| --- | --- | --- | +| 설명 | 실시간으로 발생하는 보안 이벤트와 분석 결과를 기반으로 네트워크의 보안 정책을 자동으로 변경하는 기능이다. 이는 보안 위협이나 비정상적인 활동이 감지되었을 때, 사전에 정의된 정책을 자동으로 적용 하거나 새로운 정책을 실시간으로 생성하여 네트워크 보안을 강화하는데 사용된다. 예를 들어, 특정 사용자의 행동이 이상하다고 판단되면 그 사용자의 접근권한을 자동으로 제한하거나, 네트워크 세그먼트를 재조정할 수 있다. 자동화된 동적 정책은 빠르고 유연한 대응을 가능하게 하여, 보안 사고를 최소화할 수 있다. | | +| 성숙단계 | 기존 | 보안 정책을 수동으로 관리하는가? | +| | | 보안 이벤트가 발생할 경우 관리자가 직접 정책을 수정하여 대응하는가? | +| | 초기 | 자동화된 정책 관리 시스템을 도입하였는가? | +| | | 보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? | +| | 향상 | 동적 정책을 실시간으로 조정하여, 보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가? | +| | | 위협 탐지와 연계하여 동적으로 정책을 조정하는가? | +| | 최적화 | AI 기반의 자동화된 동적 정책 시스템을 구축하여, 보안 이벤트 분석 결과에 따라 자율적으로 정책을 조정하는가? | + + +관리하거나 +수준에서 관리되던 계정 관리를 +통합계정권한관리으로 확장하여 애플리 +, Directory +IAM( +) +케이션 접근 및 권한 신청을 통합 관리하는 것을 의미한다이러한 통합 정책은 정보보안 포털 등을 +. +통해 중앙에서 일괄적으로 배포적용되기 시작한다 +· +. +보안 이벤트 발생 시 자동으로 정책을 변경하고 적용하는가? + +에서 보안 이벤트가 탐지되면 +사전에 정의된 시나리오 기반의 정적 조건예시 +분 내 +회 +SIEM +, +( +: 5 +로그인실패비인가 +접속 시도에 따라 시스템이 자동으로 정책을 변경하거나 차단 규칙을 적용 + +, +IP +) +한다 +실무 환경에서는 +이 +의 간단한 플레이북을 호출하거나 +정책시행지점 +과 직접 +. +SIEM +SOAR +, +(PEP) +연동되어 해당 +차단과 같은 기본적인 자동화 정책을 적용하는 단계를 의미한다 +‘ +IP +’ +. +향상 +동적 정책을 실시간으로 조정하여보안 이벤트 발생 시 즉각적으로 새로운 정책을 생성하고 적용하는가 +, +? + +정책 시스템이 고도화되어 +이나 +시스템 등에서 이상 행위위협 탐지 등 보안 이벤트가 +SIEM +UEBA +, +발생하면정책결정지점 +예시 +등이 이를 실시간예시 +초 이내으로 인지한다 +, +(PDP)( +: ICAM, ZTNA +) +( +: 10~60 +) +. +실무 환경에서는 +가 이 정보를 바탕으로 새로운 정책을 자동 생성적용하여수동 개입 없이 복합 +PDP +· +, + +공격이나 다단계 위협에 신속하게 대응할 수 있다. +위협 탐지와 연계하여 동적으로 정책을 조정하는가? + +등 위협 탐지 시스템과 정책결정지점 +예시 +등이 연계되어 +SIEM/SOAR, EDR, XDR +(PDP)( +: ICAM, ZTNA +) +, +위협 탐지 결과에 따라 정책을 실시간으로 동적으로 조정한다실무 환경에서는 +에서 특정 공격 +. +SIEM + +시그니처가 탐지되거나 +가 이상 징후를 식별하면이 정보가 +로 전달된다 +는 이 정보를 +UEBA +, +PDP +. PDP + +바탕으로 리스크를 재평가하고정책시행지점 +예시 +게이트웨이마이크로 세그멘 +, +(PEP)( +: NGFW, ZTNA +, +테이션 등의 정책을 자동으로 강화예시 +해당 +사용자의 접근 레벨 하향 조정하여 추가 피해를 +) +( +: +IP/ +) +차단한다. +최적화 + +기반의 자동화된 동적 정책 시스템을 구축하여보안 이벤트 분석 결과에 따라 자율적으로 정책을 +AI +, + +조정하는가? + +기반의 자율 정책 엔진인 정책결정지점 +예시 +이 도입되어 +등에서 +ML/AI +(PDP)( +: ICAM) +, SIEM, UEBA, CTI + +수집된 모든 보안 이벤트와 실시간 분석 결과에 따라 자율적으로 정책을 조정한다실무 환경에서는 +. +엔진이 네트워크 트래픽사용자기기 행동 패턴 등을 지속적으로 학습하여정책 변경이 필요한 +AI +, +· +, +상황을 예측하거나예시 +제로데이 공격 징후 +이상 징후를 탐지한다 +이 분석 결과는 +의 동적 +( +: +) +. +PDP +리스크 스코어링에 즉시 반영되며 +는 탐지된 위협 수준에 따라 정책시행지점 +예시 +, PDP +(PEP)( +: ZTNA, +마이크로 세그멘테이션 +에 접근권한 제한이나 세그먼트 격리 +정책을 직접 전달하거나 +, NGFW) +‘ +’ +‘ +’ +, +플레이북과 연동하여 추가 인증 요구등 다양한 정책을 자율적으로 적용한다 +SOAR +‘ +’ +. + +자동화 및 통합 +8. +항목 +정책 통합 +설명 +조직 내 보안 정책을 자동으로 조정하고여러 시스템과 네트워크 장비에 일관된 정책을 적용 +, +하는 프로세스이다. +보안 이벤트 발생 시 실시간으로 정책을 변경하거나 조정할 수 있으며 +이를 통해 신속하고 +, +일관된 보안 대응이 가능해진다. +성숙단계 +기존 +정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? +초기 +자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? +정책 변경이 자동으로 이루어지는가? +향상 +실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? +위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? +최적화 +기반의 자율 정책 통합 시스템을 통해상황에 맞게 정책을 자동으로 조정 +AI +, +가능한가? +세부 설명 +기존 +정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? + +보안 정책이 정보보안 포털 등 중앙 시스템을 통해 통합 관리되지 않고각 시스템별로 분산되어 수 +, +동으로 관리되는 단계이다 +실무 환경에서는 보안 정책예시 +정보보호 정책지침이 문서로는 정의 +. +( +: +/ +) +되어 있고 +사용자가 정책 변경예시 +신규 +허용 요청을 그룹웨어나 메일 등으로 요청하면 담당 +, +( +: +IP +) +자가 방화벽 +등 개별 보안 솔루션에 직접 접속하여 일일이 변경 사항을 수동으로 +, AV, NAC, PAM +적용한다이로 인해 시스템 간 정책이 상충되거나 누락될 수 있으며일관성 유지가 어려운 정적인 +. +, +정책 관리 상태를 의미한다 +(Static) +. +초기 +자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? + +개별적으로 운영되던 보안 정책 관리 도구를 핵심 요소 +별로 통합하여 중앙에서 관리하기 시작 +(Pillar) +하는 단계이다실무 환경에서는 시스템영역의 경우기존에 각기 접근하던 시스템 접근을 시스템 +. +' +' +, +' +접근제어와 +접근제어등을 통해서만 접근하도록 하거나 통합을 확장하여 +시스템 기반으로 +' +'DB +' +PAM +통합 관리하기 시작한다 +또한 식별자신원 +영역에서는 +그룹웨어 +등을 연계하여 +. +' +· +' +Directory, +, IAM +사용자계정과 권한 신청 프로세스를 통합하는 등각 영역별로 정책 관리의 중앙화를 추진한다 + +, +. +정책 변경이 자동으로 이루어지는가? + +정책 변경이 기존단계의 개별 수동 작업에서 벗어나일부 자동화된 통합 시스템에 의해 이루어진다 +' +' +, +. + +| 항목 | 8.1 정책 통합 | | +| --- | --- | --- | +| 설명 | 조직 내 보안 정책을 자동으로 조정하고, 여러 시스템과 네트워크 장비에 일관된 정책을 적용 하는 프로세스이다. 보안 이벤트 발생 시 실시간으로 정책을 변경하거나 조정할 수 있으며, 이를 통해 신속하고 일관된 보안 대응이 가능해진다. | | +| 성숙단계 | 기존 | 정책 조정 시 수동으로 각 시스템에 일일이 변경 사항을 반영하는가? | +| | 초기 | 자동화된 정책 통합 시스템을 도입하여 보안 정책을 중앙에서 관리하는가? | +| | | 정책 변경이 자동으로 이루어지는가? | +| | 향상 | 실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? | +| | | 위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? | +| | 최적화 | AI 기반의 자율 정책 통합 시스템을 통해, 상황에 맞게 정책을 자동으로 조정 가능한가? | + + +실무 환경에서는 엔드포인트영역의 경우정보보안포털이나 +시스템 콘솔 등에서 정책을 수정 +' +' +, +UEM +하면 별도 관리되는 +등에 정책이 자동으로 반영된다 +애플리케이션영역에서는 +EPP, EDR, NAC, MDM +. ' +' + +클라우드 보안 형상 관리 +기능을 통해 여러 클라우드 환경의 보안 정책을 중앙에서 확인통합 +CSPM( +) +( + +가시성하는 등초기 수준의 자동화가 구현된다다만모든 시스템에 대한 완전한 동적 자동화예시 +) +, +. +, +( +: +연동는 구현되지 않아 +연동되지 않은 레거시 시스템이나 복잡한 환경에서는 여전히 수동 +SOAR +) +, +조정이필요하다 + +. +향상 +실시간 보안 이벤트를 기반으로 정책을 동적으로 조정하는가? + +등에서 탐지된 실시간 보안 이벤트를 트리거 +로 사용하여 +SIEM/SOAR, EDR, UEBA, ZTNA +(Trigger) +정책이동적으로 조정되는 연계 체계가 구축된 상태이다실무 환경에서는 탐지된 위협 정보가 정책 + +. +결정지점 +예시 +컨트롤러으로 전달되어리스크 스코어링 및 정책 재조정이 이루어진다 +(PDP)( +: ICAM, ZTNA +) +, +. +위협에 따라 즉각적으로 정책을 수정하고 적용하는 자동화된 프로세스가 존재하는가? + +정책결정지점 +에서 결정된 동적 정책예시 +특정 사용자 접근 차단은 +의 플레이북이나 +(PDP) +( +: +) +SOAR +연동을 통해 정책시행지점 +예시 +마이크로 세그멘테이션에 즉각적으로 수정 +API +(PEP)( +: NGFW, PAM, +) +및 적용된다또한정책 변경 전후에 대한 검증 및 롤백 +을 위한 복구 프로세스도 자동화되 +. +, +(Rollback) +어 +위협 대응의 일관성과 안정성을 확보한다. +최적화 + +기반의 자율 정책 통합 시스템을 통해상황에 맞게 정책을 자동으로 조정 가능한가 +AI +, +? + +기반의 자율 정책 통합 시스템이 구축되어 +모든 보안 정책이 중앙에서 자동으로 관리되고 +ML/AI +, +최적화되는 단계이다실무 환경에서는 개별 시스템이나 빅데이터 플랫폼에 적용되어 있는 +엔진이 +. +AI + +등에서 수집된 방대한 데이터를 실시간으로 분석하여 +를 기반으로 정책을 +SIEM, XDR, CTI +, UEBA +동적으로조정한다 +나아가 +정책결정지점 +예시 +등은 새로운 위협을 예측하여 + +. +, +(PDP)( +: ICAM, ZTNA +) +사전에정책을 최적화하며 +정책 변경이 정책시행지점 +예시 +등에 적용 + +, +(PEP)( +: NGFW, ZTNA, CNAPP +) +되기 전 +가 해당 변경이 미칠 영향도를 자동으로 평가시뮬레이션하여 잠재적인 서비스 장애나 +, AI +( +) +문제 발생 가능성을 사전에 차단하는 자율적인 정책 통합관리가 이루어진다. + +항목 +중요 프로세스 자동화 +설명 +보안 및 운영에 필요한 핵심 프로세스를 자동화하여업무의 효율성을 높이고 인적 오류를 +, +줄이는 것을 목표로 한다. +이는 중요한 시스템 이벤트 처리데이터 백업장애 대응 등의 프로세스를 포함한다 +, +, +. +성숙단계 +기존 +수동 절차에 의존하며핵심 보안 및 운영 프로세스가 수동으로 관리되는가 +, +? +초기 +중요한 프로세스에 대한 자동화 도구를 도입하여반복적인 작업과 기본적인 +, +보안 절차를 자동으로 처리하는가? +데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? +향상 +자동화된 프로세스를 확장하여보안 사고 발생 시 신속한 자동 대응이 가능 +, +한가? +최적화 +자동화 시스템은 모든 프로세스를 실시간으로 최적화하고 +업무 중단 없이 +, +중요한 프로세스를 자동으로 조정 가능한가? +세부 설명 +기존 +수동 절차에 의존하며핵심 보안 및 운영 프로세스가 수동으로 관리되는가 +, +? + +모든 핵심 보안 및 운영 프로세스데이터 백업 +장애 대응 +보안 이벤트 처리 등가 +와 같은 +( +, +, +) +SOAR +자동화도구 없이 수동으로 관리되는 단계이다실무 환경에서는 프로세스 실행 절차가 엑셀워드 + +. +, +등 문서 기반예시 +장애 대응 매뉴얼으로 관리되며 +각 시스템에서도 경보 +가 발생하더라도 +( +: +) +, +(Alert) +, +담당자가 이를 인지한 후 관련 정책시행지점 +예시방화벽 +등에 직접 접속하여 수동으로 +(PEP)( +: +, EPP, PAM +) + +정책을 적용한다. +초기 +중요한 프로세스에 대한 자동화 도구를 도입하여반복적인 작업과 기본적인 보안 절차를 자동으로 +, +처리하는가? + +초기 수준의 자동화 도구를 통해 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하기 시작한다. +실무 환경에서는 +을 통한 이벤트 수집이나 +를 통한 패치 배포가 자동화된다 +또한 +SIEM +EPP/PMS +. +, +에서 탐지된 기본적인 위협예시알려진 악성 +접근에 대해 +의 간단한 플레이북을 통해 +SIEM +( +: +IP +) +, SOAR + +예시해당 +차단 규칙 +시스템 등에 기본 정책이 자동으로 추가되는 수준을 의미한다 +NGFW( +: +IP +) +. +데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? + +정해진 시간에 데이터 백업 스크립트가 자동으로 실행되거나 +서비스 장애 감지 시 자동 재시작 +, +스크립트가실행되는 등 주요 운영 업무가 자동화된다실무 환경에서는 +로보틱 프로세스 자동화와 + +. +RPA( +) + +같은 도구를 활용하여 +주기적인 백업 프로세스 자동화나 방화벽 정책 신청 시 자동 반영 +등 +, ‘ +’ +‘ +’ +반복적이면서중요한 +운영 프로세스를 자동화하는 것도 이 단계에 포함될 수 있다 + +IT +. + +| 항목 | 8.2 중요 프로세스 자동화 | | +| --- | --- | --- | +| 설명 | 보안 및 운영에 필요한 핵심 프로세스를 자동화하여, 업무의 효율성을 높이고 인적 오류를 줄이는 것을 목표로 한다. 이는 중요한 시스템 이벤트 처리, 데이터 백업, 장애 대응 등의 프로세스를 포함한다. | | +| 성숙단계 | 기존 | 수동 절차에 의존하며, 핵심 보안 및 운영 프로세스가 수동으로 관리되는가? | +| | 초기 | 중요한 프로세스에 대한 자동화 도구를 도입하여, 반복적인 작업과 기본적인 보안 절차를 자동으로 처리하는가? | +| | | 데이터 백업 및 기본 장애 대응과 같은 주요 업무가 자동화되어 있는가? | +| | 향상 | 자동화된 프로세스를 확장하여, 보안 사고 발생 시 신속한 자동 대응이 가능 한가? | +| | 최적화 | 자동화 시스템은 모든 프로세스를 실시간으로 최적화하고, 업무 중단 없이 중요한 프로세스를 자동으로 조정 가능한가? | + + +향상 +자동화된 프로세스를 확장하여보안 사고 발생 시 신속한 자동 대응이 가능한가 +, +? + +시스템이 +등과 연동되어보안 사고 발생 시 신속한 자동 대응이 가능한 연계 +SOAR +SIEM, XDR UEBA +, + +체계가 구축된 상태이다 +실무 환경에서는 랜섬웨어 감염 징후 +비정상적인 내부망 접속 등 단순 +. +, +규칙을넘어서는 복합 위협이 +이나 +을 통해 탐지될 경우즉시 +가 트리거된다 +는 + +SIEM +XDR +, +SOAR +. SOAR + +사전에 정의된 플레이북 +에 따라 +정책시행지점 +예시 +마이크로 세그멘테이션 +(Playbook) +, +(PEP)( +: ZTNA, +, +등과 연동하여 의심 파일 실행 제한 +감염된 기기의 네트워크 격리 +관련 계정 일시 잠금 +CNAPP +) +‘ +’, ‘ +’, ‘ +’ +등 실시간 위협 대응을 자동화한다이 모든 대응 이력은 정보보안 포털이나 +대시보드를 통해 +. +SOAR +중앙에서 관리되어 수동 개입을 최소화하고 대응 시간 +을 단축시킨다 +(MTTR) +. +최적화 +자동화 시스템은 모든 프로세스를 실시간으로 최적화하고업무 중단 없이 중요한 프로세스를 자동 +, +으로 조정 가능한가? + +향상단계의 신속한 자동 대응이 확장되어위협을 사전에 평가하고 시스템 취약점 패치까지 완료하는 +‘ +' +, + +완전한 자율 운영 단계이다 +기반의 자율 운영 체계가 구축되어모든 프로세스를 실시간으로 +. ML/AI +, +최적화하고 업무 중단 없이 동적으로 조정한다실무 환경에서는 +엔진이 트래픽 패턴위험 지표 +. +AI +, +, +사용자 행동 +을 실시간으로 분석하여정책결정지점 +예시 +의 동적 리스크 스코어링을 +(UEBA) +, +(PDP)( +: ICAM) + +최적화한다또한보안 위협 대응뿐만 아니라 +시스템과 연계되어 신규 계정 생성 및 권한 부여 +. +, +, RPA +’ +‘, +방화벽 정책 신청검증 +등 반복적인 +운영 및 보안 프로세스까지 자율적으로 처리한다 +시스템 +’ +/ +‘ +IT +. +업데이트나 새로운 보안 정책 변경 시 +가 다양한 시나리오 시뮬레이션을 통해 잠재적 영향도예시 +, AI +( +: +업무 중단 가능성를 사전에 평가하고검증이 완료된 정책만 정보보안 포털 승인 워크플로우를 거쳐 +) +, + +를 통해 무중단으로 배포전환하는 등보안성과 운영 효율성을 모두 달성하는 자율적인 체계를 +SOAR +/ +, + +의미한다. + +항목 +인공지능 +설명 +보안 위협을 감지하고 분석하는데 있어 인간의 개입을 최소화하고네트워크와 시스템에서 +, +발생하는 데이터를 기반으로 보안 결정을 자동화하는 기능을 제공한다. +성숙단계 +기존 +데이터를 수동으로 수집하고 분석하며 +보안 위협에 대한 대응도 수동으로 +, +이루어지는가? +초기 +기본적인 +기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가 +AI +? +향상 +기반의 보안 시스템이 고도화되어 +실시간으로 위협을 탐지하고 대응 +AI +, +가능한가? +최적화 +가 모든 보안 시스템에 완전히 통합되었는가 +AI +? +자율적으로 보안 위협을 감지하고 대응하며정책을 동적으로 조정 가능한가 +, +? +세부 설명 +기존 +데이터를 수동으로 수집하고 분석하며보안 위협에 대한 대응도 수동으로 이루어지는가 +, +? + +인공지능 +기술이 적용되지 않은 상태로 +보안 로그 +네트워크 트래픽 +시스템 이벤트 등 모든 +AI( +) +, +, +, +데이터를수동으로 수집분석하는 단계이다실무 환경에서는 +이나 +시스템과 같은 자동화된 + +· +. +SIEM +UEBA + +분석 도구가 부재하고각 시스템에서 개별적으로 추출된 문서 기반 데이터엑셀워드 등를 분석하며 +, +( +, +) +, +보안 담당자가 직접 패턴 분석이상 징후 식별위협 판단을 수행하고보안 위협에 대한 대응예시 +, +, +, +( +: +정책시행지점 +정책 변경도 수동으로 이루어지는 상태이다 +(PEP) +) +. +초기 +기본적인 +기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가 +AI +? + +기반 +도구를 도입해 보안 이벤트 자동 분석을 시작한 단계이다 +실무 환경에서는 +ML/AI +AI +. +NGFW, +등에 내장된 기본적인 머신러닝지도 학습 +기능을 활용하여알려진 공격 시그니처예시 +EPP, SIEM +( +) +, +( +: +악성 +패턴를 식별하거나 스팸 메일기본 랜섬웨어 등 반복적인 위협을 탐지한다이 단계는 +IP, C&C +) +, +. + +와 같은 고도화된 비지도 학습이나 행동 분석보다는 +시그니처 기반 탐지를 보조하는 수준의 +UEBA +, +초기 +적용 단계에 해당한다 +AI +. +향상 + +기반의 보안 시스템이 고도화되어실시간으로 위협을 탐지하고 대응 가능한가 +AI +, +? + +기반의 보안 시스템이 고도화되어 실시간 분석 및 자동화된 대응을 수행한다실무 환경에서는 +ML/AI +. + +이나 +시스템 등에 +기능이 통합되거나 전용 +시스템이 연동된다 +이를 통해 +SIEM +XDR +UEBA +UEBA +. +스트리밍데이터실시간 로그를 기반으로 사용자와 기기의 행동을 심층 분석하고 +알려지지 않은 + +( +) +, +위협비정상 행위을 실시간으로 탐지한다탐지된 위협은 +시스템 등에 연동되어 자동화된 +( +) +. +SOAR, ICAM + +대응예시티켓 생성관리자 알림정책시행지점 +차단을 수행하기 시작한다 +( +: +, +, +(PEP) +) +. + +| 항목 | 8.3 인공지능 | | +| --- | --- | --- | +| 설명 | 보안 위협을 감지하고 분석하는데 있어 인간의 개입을 최소화하고, 네트워크와 시스템에서 발생하는 데이터를 기반으로 보안 결정을 자동화하는 기능을 제공한다. | | +| 성숙단계 | 기존 | 데이터를 수동으로 수집하고 분석하며, 보안 위협에 대한 대응도 수동으로 이루어지는가? | +| | 초기 | 기본적인 AI 기반 도구를 도입하여 보안 이벤트를 분석하고 패턴을 식별하는가? | +| | 향상 | AI 기반의 보안 시스템이 고도화되어, 실시간으로 위협을 탐지하고 대응 가능한가? | +| | 최적화 | AI가 모든 보안 시스템에 완전히 통합되었는가? | +| | | 자율적으로 보안 위협을 감지하고 대응하며, 정책을 동적으로 조정 가능한가? | + + +최적화 + +가 모든 보안 시스템에 완전히 통합되었는가 +AI +? + +가 단순한 분석 도구를 넘어전사 보안 시스템을 능동적으로 조율하는 +에이전트형 +AI +, +Agentic AI( +AI) +형태로 통합된 상태이다 +실무 환경에서는 +엔진이 중앙의 보안 에이전트로서 각 보안 시스템 +. +AI +등을 통합하여 관리할 수 있다 +분산된 보안 데이터를 단일 관점에서 +(SIEM, EDR, ZTNA, CNAPP +) +. +분석하는 것을 넘어 +가 스스로 판단하여 필요한 시스템에 명령을 내리고 결과를 회신받아 다음 +, AI +행동을 결정하는 유기적인 통합 아키텍처가 구성된다. +자율적으로 보안 위협을 감지하고 대응하며정책을 동적으로 조정가능한가 +, +? + +기술을 적용하여 자율형 사이버 대응체계를 구축한다 +실무 환경에서는 +에이전트가 +Agentic AI +. +AI +위협 발생 시 스스로 목표예위협 격리 및 서비스 복구를 설정하고 +정보 분석영향도 평가 +( +: +) +, CTI +, +, +정책 시뮬레이션차단 및 복구 등의 복잡한 대응 시나리오를 스스로 계획하고 실행한다예시로 실 +, +. +시간으로 사용자기기의 동적 리스크 스코어를 산출하고정책결정지점 +예시 +은 이 스코어를 +/ +, +(PDP)( +: ICAM) + +기반으로 위험 점수 기반 접근제어를 수행하며 +와 연동하여 정책시행지점 +의 정책을 +’ +‘ +, SOAR +(PEP) +자율적으로 조정한다또한 +시스템은 새로운 위협과 대응 결과를 지속적으로 자율 학습하여예시 +. +, AI +( +: +자동화된 플레이북 개선 +탐지 정확도와 대응 속도를 스스로 진화시키고 보안 체계를 실시간 최적화한다 +), +. + +항목 +보안 통합자동화 및 대응 +, +설명 +는 보안 이벤트에 대한 대응을 자동화하고여러 보안 도구와 시스템을 통합하여 일관된 +SOAR +, +보안 오케스트레이션을 수행하는 시스템이다. +이를 통해 조직은 보안 사고에 신속하게 대응하고반복적인 작업을 자동화하여 운영 효율성을 +, + +높일 수 있다. +성숙단계 +기존 +보안 도구와 시스템이 각각 독립적으로 운영되며수동 대응에 의존하는가 +, +? +보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며 +대응 절차도 +, +개별적으로 수행되는가? +초기 +시스템을 도입하였는가 +SOAR +? +보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 +관리되고 있는가? +향상 +시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 +SOAR +통합이 가능한가? +여러 도구와 연동하여 신속한 위협 차단이 가능한가? +최적화 +모든 보안 이벤트가 중앙에서 자동으로 처리되는가? +자율 통합을 통해 자동으로 보안 사건 관리가 되는가? +세부 설명 +기존 +보안 도구와 시스템이 각각 독립적으로 운영되며수동 대응에 의존하는가 +, +? + +방화벽 +등 개별 보안 도구가 연동되지 않고 독립적으로 운영되는 단계이다실무 환경에서는 +, EPP, SIEM +. + +보안 도구 간 정보 공유가 미비하여 위협 상관관계를 분석하기 어렵고모든 대응이 담당자의 수동 +, +조치에 의존하는 상태이다. +보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며대응 절차도 개별적으로 수행되는가 +, +? + +보안 사고 발생 시 +자동화된 플레이북 +이 없어 담당자가 각 도구별로 로그를 수동으로 +, +(Playbook) +취합하고분석한다실무 환경에서는 +시스템에서 탐지된 경보를 바탕으로담당자가 다시 보안 + +. +SIEM +, +시스템 콘솔에 접속해 악성코드 행위를 분석하고방화벽 관리 콘솔에 접속해 관련 +를 차단하는 등 +, +IP + +대응 절차가 개별 시스템에서 독립적으로 수행된다 +이로 인해 대응 시간 +이 길어지고 +인적 +. +(MTTR) +, +실수 +가 발생할 가능성이 높은 상태이다 +(Human Error) +. +초기 + +시스템을 도입하였는가 +SOAR +? + +시스템을 도입하여 +시스템 등 주요 보안 도구를 연동하고기본적인 자동화 워크 +SOAR +SIEM, EDR +, +플로우인 플레이북 +을 구축하기 시작한 상태이다실무 환경에서는 알려진 악성 +탐지 시와 +' +(Playbook)' +. +’ +IP +‘ + +같은 단순하고 반복적인 이벤트에 대해 +가 자동으로 티켓을 생성하고 담당자에게 알림을 보내는 +, SOAR + +등 초기 수준의 자동화가 적용된다. + +| 항목 | 8.4 보안 통합, 자동화 및 대응 | | +| --- | --- | --- | +| 설명 | SOAR는 보안 이벤트에 대한 대응을 자동화하고, 여러 보안 도구와 시스템을 통합하여 일관된 보안 오케스트레이션을 수행하는 시스템이다. 이를 통해 조직은 보안 사고에 신속하게 대응하고, 반복적인 작업을 자동화하여 운영 효율성을 높일 수 있다. | | +| 성숙단계 | 기존 | 보안 도구와 시스템이 각각 독립적으로 운영되며, 수동 대응에 의존하는가? | +| | | 보안 사고 발생 시 여러 도구에서 데이터를 수집하고 분석하며, 대응 절차도 개별적으로 수행되는가? | +| | 초기 | SOAR 시스템을 도입하였는가? | +| | | 보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? | +| | 향상 | SOAR 시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가? | +| | | 여러 도구와 연동하여 신속한 위협 차단이 가능한가? | +| | 최적화 | 모든 보안 이벤트가 중앙에서 자동으로 처리되는가? | +| | | 자율 통합을 통해 자동으로 보안 사건 관리가 되는가? | + + +보안 이벤트는 여러 시스템에서 데이터를 수집하여 중앙에서 대응 가능하도록 관리되고 있는가? + +방화벽 등 일부 시스템의 경보 +가 +로 연동되어 사고 정보가 중앙으로 집계되고 +SIEM, EPP, +(Alert) +SOAR +, +대응 프로세스가 통합되기 시작한다실무 환경에서는 보안 사고 발생 시담당자가 개별 시스템에 +. +, +일일이 접속하는 대신 +대시보드에서 관련 정보를 취합하고플레이북을 통해 대응을 시작하는 +SOAR +, +등 중앙에서 조율 가능한 +관리 체계가 마련된다 +(Orchestration) +. +향상 + +시스템을 고도화하여 복잡한 보안 사고에 대해 자동화된 대응과 실시간 통합이 가능한가 +SOAR +? + +시스템이 +시스템 등 다양한 보안 도구와 +연동을 통해 고도화되어 +SOAR +SIEM, XDR, UEBA +API +, +복잡한보안 사고에 대해 실시간 대응이 가능한 수준이다실무 환경에서는 +이나 +가 탐지한 + +. +XDR +UEBA +복합 위협 시나리오예시계정 탈취 후 내부 횡적 이동 징후를 +가 인지하며정교하게 구성된 +' +( +: +) +SOAR +, +대응 시나리오플레이북를 기반으로 자동화된 대응을 시작한다 +( +) +. +여러 도구와 연동하여 신속한 위협 차단이 가능한가? + +플레이북이 여러 도구와 연동하여 신속한 위협 차단을 수행한다실무 환경에서는 보안 이벤트 +SOAR +. + +발생 시 +가 +을 통해 엔드포인트 격리를 수행하고 +와 연동하여 네트워크 접근 +, SOAR +EDR +’ +‘ +, ZTNA/NGFW +’ + +차단을 지시하며 +시스템과 연계하여 의심 계정 비활성화를 실행하는 등여러 정책시행지점 +‘ +, ICAM +’ +‘ +, +및 보안 시스템과 연동된 차단격리 조치가 자동으로 수행된다 +(PEP) +/ +. +최적화 +모든 보안 이벤트가 중앙에서 자동으로 처리되는가? + +모든 보안 이벤트가 중앙 +시스템에 자동으로 수집정규화분석되며 +우선순위에 따라 +SIEM/SOAR +· +· +, +자율적으로대응 흐름이 실행된다실무 환경에서는 +기반의 자동 의사결정 엔진예시 +내 + +. +ML/AI +( +: SOAR + +모듈 +내 신뢰도 판단 엔진 등이 +시스템 등에서 수집된 공격 유형자산 +AI +, ICAM +) +SIEM, XDR, UEBA +, +특성과거 이력 등을 종합적으로 분석하여사람의 개입 없이도 적절한 대응 조치플레이북를 스스로 +, +, +( +) + +판단하고 실행한다. +자율 통합을 통해 자동으로 보안 사건 관리가 되는가? + +보안 사건 관리 전 과정예시보안 이벤트 탐지분류분석 +의 동적 정책 결정 +를 통한 +( +: +, +, +, PDP +, SOAR +의 정책 실행복구리포트 발행 등이 완전히 자동화되어사람의 개입이 최소화된 상태이다실무 +PEP +, +, +) +, +. + +환경에서는 +가 단순 대응을 넘어복잡한 위협 시나리오 전체를 자율적으로 처리하고대응 결과를 +AI +, +, + +정보보안 포털 등에 자동으로 보고하는 등 +보안 운영 +자체가 자동화된 자율 통합 체계를 +, +(SecOps) +의미한다. + +항목 +데이터 교환 표준화 +설명 +조직 내외부에서 발생하는 다양한 데이터를 일관된 형식으로 관리하고 +보안 시스템 간에 +, +효율적으로데이터를 공유할 수 있도록 하는 프로세스이다 + +. +이를 통해 여러 시스템에서 수집된 데이터를 통합적으로 분석하고보안 위협에 대응할 수 있다 +, +. +성숙단계 +기존 +수집된 데이터가 상이한 형식으로 저장되는가? +데이터 교환이 비효율적으로 이루어지는가? +보안 시스템 간 데이터 교환이 수동으로 이루어지는가? +초기 +데이터 교환 표준을 도입하였는가? +보안 시스템 간 데이터 교환이 자동화되었는가? +향상 +다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? +여러 보안 도구 간의 상호 운용성이 제공되는가? +최적화 +데이터 교환 표준화가 자율적으로 관리되며외부 파트너와의 데이터 교환까지 +, +실시간으로 자동화되는가? +모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? +보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? +세부 설명 +기존 +수집된 데이터가 상이한 형식으로 저장되는가? + +수집된 데이터가 통합로그 시스템이나 +등 중앙 시스템에서 표준화되지 않고 +각 시스템별로 +SIEM +, +상이한 형식예시 +개별 +테이블으로 저장된다실무 환경에서는 로그 저장을 위한 +( +: CSV, TXT, JSON, +DB +) +. + +정해진 템플릿이나 연동 표준이 부재하여시스템 간 로그를 통합하여 활용예시상관관계 분석하기 +, +( +: +) + +어렵다. +데이터 교환이 비효율적으로 이루어지는가? + +데이터 교환이 +계정 정보 교환 +인증 토큰 교환와 같은 표준 프로토콜 기반이 +SCIM( +), SAML/OAuth( +) +아닌비효율적인 방식으로 이루어진다실무 환경에서는 필요한 데이터를 엑셀로 수동 추출하여 이 +, +. +메일로 전달하거나각 시스템 연동 시 표준 +없이 개별 조직 환경에 맞춘 커스텀 스크립트예시 +, +API +( +: +직접 조회 스크립트를 개발하여 사용한다 +DB +) +. +보안 시스템 간 데이터 교환이 수동으로 이루어지는가? + +보안 시스템 간 데이터 교환예시 +과 +간의 사용자 정보 연동시 +와 같은 표준화된 +( +: SIEM +IAM +) +Restful API + +연동 방식이 부재하다 +실무 환경에서는 연동을 위해 각 시스템 환경에 맞춘 커스텀 에이전트 +. +를 별도로 컴파일하여 설치하거나담당자가 스크립트를 수동으로 실행하여 데이터를 전송하는 +(Agent) +, + +등 자동화되지 않은 방식으로 운영된다. + +| 항목 | 8.5 데이터 교환 표준화 | | +| --- | --- | --- | +| 설명 | 조직 내외부에서 발생하는 다양한 데이터를 일관된 형식으로 관리하고, 보안 시스템 간에 효율적으로 데이터를 공유할 수 있도록 하는 프로세스이다. 이를 통해 여러 시스템에서 수집된 데이터를 통합적으로 분석하고, 보안 위협에 대응할 수 있다. | | +| 성숙단계 | 기존 | 수집된 데이터가 상이한 형식으로 저장되는가? | +| | | 데이터 교환이 비효율적으로 이루어지는가? | +| | | 보안 시스템 간 데이터 교환이 수동으로 이루어지는가? | +| | 초기 | 데이터 교환 표준을 도입하였는가? | +| | | 보안 시스템 간 데이터 교환이 자동화되었는가? | +| | 향상 | 다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? | +| | | 여러 보안 도구 간의 상호 운용성이 제공되는가? | +| | 최적화 | 데이터 교환 표준화가 자율적으로 관리되며, 외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가? | +| | | 모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? | +| | | 보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? | + + +초기 +데이터 교환 표준을 도입하였는가? + +표준 프로토콜을 도입하기 시작하는 단계이다 +실무 환경에서는 예시로 +등 +. +SAML, , OIDC, OAuth +표준프로토콜을 사용하여 +통합인증나 +통합계정권한관리 +시스템 간의 인증 정보 교환을 + +SSO( +) +IAM( +) +표준화하거나 +를 활용하여 데이터 교환을 시도한다또한 +표준 프로토콜과 같은 계정 +, Restful API +. +SCIM + +프로비저닝 표준이 일부 시스템에 적용되기 시작한다. +보안 시스템 간 데이터 교환이 자동화되었는가? + +보안 시스템 간 데이터 교환이 +시스템 등을 통한 실시간 연동이 아닌정기적인 배치 +나 +SOAR +, +(Batch) + +예약된 스케줄 기반으로 자동화된다실무 환경에서는 +도구나 스케줄링된 +. +ETL(Extract, Transform, Load) + +스크립트가 +를 호출하여 +의 로그를 빅데이터 플랫폼으로 전송하거나 +의 계정 +Restful API +SIEM +, IAM +정보를 +시스템으로 주기적으로 +동기화하는 등의 비실시간 자동화 방식이 주로 사용된다 +PAM +DB +. +향상 +다양한 외부 시스템 및 파트너와도 데이터 공유가 원활하게 이루어지는가? + +데이터 교환이 조직 내 주요 시스템은 물론 외부 파트너 시스템까지 확장되며 상호 운용성과 실시간성이 +높아지는 단계이다 +실무 환경에서는 외부 +피드나 클라우드 보안 정보 수신 시 +해당 데이터를 +. +CTI +, +수집 단계에서부터 정제화 +하고 +통합로그 시스템이나 +빅데이터 플랫폼 등 내부 +(Refinement) +, +SIEM, +시스템과 연동할 수 있도록 정의된 로그 포맷예시 +이나 +테이블 스키마에 맞춰 변환 +( +: CEF, LEEF) +DB +하여 통합 관리한다 +(Formatting) +. +여러 보안 도구 간의 상호 운용성이 제공되는가? + +등 표준화된 데이터 교환 체계가 전사적으로 도입되어여러 보안 도구 간의 +SAML, SCIM, Restful API +, + +상호 운용성이 확보된다실무 환경에서는 +등 개별 보안 시스템이 단방향 +. +SIEM, XDR, SOAR, ICAM +경보 +전송을 넘어표준화된 형식예시 +을 통해 데이터를 상호 교환연동한다이를 +(Alert) +, +( +: JSON API) +( +) +. +통해 통합로그 시스템이나 +빅데이터 플랫폼 같은 중앙 분석 시스템이 이기종 시스템의 데이터를 +SIEM, + +바탕으로 고도화된 상관관계 분석을 수행할 수 있는 기반이 마련된다. +최적화 +데이터 교환표준화가 자율적으로 관리되며외부 파트너와의 데이터 교환까지 실시간으로 자동화되는가 + +, +? + +데이터 교환 표준예시 +과 메타데이터 정책이 +기반으로 자율적으로 +( +: SCIM, SAML, STIX/TAXII) +ML/AI +관리된다 +실무 환경에서는 시스템이 데이터 교환 표준의 준수 여부를 자동으로 검증모니터링하며 +. +· +, +오류 발생 시예시비표준 +호출스키마 불일치 +와 연동하여 자율적으로 복구하거나예시 +( +: +API +, +) SOAR +( +: +임시 롤백 +관리자에게 즉각 알림을 보낸다또한내부 시스템 간 데이터 교환뿐 아니라 외부 파트너 +) +. +, +공공기관 +( +, 협력사 등와의 연동도 +게이트웨이 등을 통해 실시간으로 처리되는 자율 운영 + +) +Restful API +체계가 구축된다. +모든 시스템에서 일관된 데이터 형식이 적용되어 있는가? + +전사 보안 시스템은 물론 모든 +시스템예시 +에서 동일한 데이터 구조 및 스키마예시 +IT +( +: HRM, ERP) +( +: +공통 데이터 모델 +가 적용된다 +실무 환경에서는 빅데이터 플랫폼이나 +에 저장된 +, CEF/LEEF) +. +SIEM + +데이터가별도의 포맷 변경파싱정규화 +과정 없이모든 연동 시스템 +등에서 + +( +, +) +, +(SOAR, UEBA, ICAM +) +일관된 데이터 형식으로 즉시 처리가 가능하다. +보안 위협이 발생할 때마다 실시간으로 데이터를 교환하고 분석하는가? + +보안 위협이 발생할 때마다실시간으로 관련 이벤트 및 대응 데이터가 표준화된 +를 통해 자동으로 +, +AP + +수집분석공유된다 +실무 환경에서는 +이 위협을 탐지하면 +해당 위협 정보가 즉시 +와 +· +· +. +XDR +, +SOAR +CTI +플랫폼으로 공유된다 +는 이 정보를 바탕으로 정책결정지점 +예시 +에 리스크 스코어링을 +. SOAR +(PDP)( +: ICAM) +요청하며 +는 다시 정책시행지점 +예시 +마이크로 세그멘테이션 등에 동적 +, PDP +(PEP)( +: SSO, PAM, ZTNA, +) +정책을 전달하는 등모든 보안 시스템이 표준화된 데이터를 기반으로 실시간 상호작용데이터 교환 +, +( +및 분석을 수행한다 +) +. + +항목 +보안 운영 조정 및 사고 대응 +설명 +조직 내 보안 사고가 발생했을 때이를 신속하게 대응하고 조직 내 여러 부서와 조율하여 보 +, +안 문제를 해결하는 프로세스를 의미한다. +이를 통해 보안 사고가 발생할 때 적절한 대응 절차를 신속하게 이행할 수 있으며피해를 최 +, +소화할 수 있다. +성숙단계 +기존 +보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? +보안 사고 대응 절차가 정형화되어 있지 않는가? +초기 +보안 사고 대응 계획을 수립하고사고 대응 절차를 표준화하였는가 +, +? +보안 사고가 발생하면 자동화된 경고가 생성되는가? +향상 +사고 대응 절차가 자동화되고보안 운영팀과 다른 부서 간 조율이 실시간으로 +, + +이루어지는가? +자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? +최적화 +보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? +사고 대응 절차는 완전히 자동화되어보안 팀과 관련 부서가 신속하고 일관된 +, +대응이 가능한가? +사고 발생 시 모든 관련 부서가 실시간으로 협력하고대응 결과가 즉시 보고 +, +되는가? +세부 설명 +기존 +보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? + +보안 사고 발생 시보안 팀이 개별 부서예시 +인프라팀현업 부서와 전화이메일메신저 등을 +, +( +: IT +, +) +, +, +통해 직접 연락하고 협의하여 대응하는 단계이다정보보안 포털 같은 자동화된 협업 도구가 부재하여 +. +, +역할 및 책임에 따른 명확한 협업 절차가 정립되어 있지 않다 +R&R( +) +. +보안 사고 대응 절차가 정형화되어 있지 않는가? + +보안 사고에 대한 대응 및 운영 조정이 주로 수동 절차에 의존하며 체계화되지 않은 상태이다실무 +. +환경에서는 문서화된 표준운영절차 +나 사고 대응 흐름도가 부재하여담당자의 경험에 의존하는 +(SOP) +, +사건별 임기응변식 대응이 일반적이다이로 인해 대응 품질이 일관되지 않고 누락이 발생할 수 있다 +. +. +초기 +보안 사고 대응 계획을 수립하고사고 대응 절차를 표준화하였는가 +, +? + +보안 사고 대응 계획 및 절차가 수립되며자동화된 경보개별 시스템 +등 +기반의 초기 +, +( +Alert, SIEM +) +대응 체계가 마련되는 단계이다실무 환경에서는 보안 사고 대응 체계를 구성하고위협 유형별예시 +. +, +( +: +악성코드 감염계정 탈취 시도 +정형화된 대응 프로세스 및 시나리오를 +표준운영절차로 문서화 +, +) +SOP( +) +하여관리하기 시작한다 + +. + +| 항목 | 8.6 보안 운영 조정 및 사고 대응 | | +| --- | --- | --- | +| 설명 | 조직 내 보안 사고가 발생했을 때, 이를 신속하게 대응하고 조직 내 여러 부서와 조율하여 보 안 문제를 해결하는 프로세스를 의미한다. 이를 통해 보안 사고가 발생할 때 적절한 대응 절차를 신속하게 이행할 수 있으며, 피해를 최 소화할 수 있다. | | +| 성숙단계 | 기존 | 보안 팀이 수동으로 여러 부서와 소통하고 조정하는가? | +| | | 보안 사고 대응 절차가 정형화되어 있지 않는가? | +| | 초기 | 보안 사고 대응 계획을 수립하고, 사고 대응 절차를 표준화하였는가? | +| | | 보안 사고가 발생하면 자동화된 경고가 생성되는가? | +| | 향상 | 사고 대응 절차가 자동화되고, 보안 운영팀과 다른 부서 간 조율이 실시간으로 이루어지는가? | +| | | 자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? | +| | 최적화 | 보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? | +| | | 사고 대응 절차는 완전히 자동화되어, 보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가? | +| | | 사고 발생 시 모든 관련 부서가 실시간으로 협력하고, 대응 결과가 즉시 보고 되는가? | + + +보안 사고가 발생하면 자동화된 경고가 생성되는가? + +개별 보안 솔루션이나 +을 통해사전에 정의된 정적 규칙 +에 기반하여 자동화된 경고 +SIEM +, +(Static Rule) +가 +(Alert) +생성되고일정 조건 하에 담당자예시 +보안 운영 센터 +차 관제에게 전달된다실무 + +, +( +: SOC( +) 1 +) +. +환경에서는 사고 발생 시 대응 책임자보안팀와 협업 부서 +팀가 명확히 지정되어 있으며 +( +) +(IT +) +, SOAR +시스템과 같은 자동화된 협업 도구는 없지만 정의된 +역할 및 책임에 따라 이메일전화 등으로 +R&R( +) +, +연락하는 기초적인 역할분담 체계가 운영된다. +향상 +사고 대응 절차가 자동화되고보안 운영 팀과 다른 부서 간 조율이 실시간으로 이루어지는가 +, +? + +보안 운영 및 사고 대응 절차가 +의 플레이북을 통해 자동화되고부서 간 협업 체계가 실시간 +SOAR +, +으로 작동하는 단계이다실무 환경에서는 +이나 +등에서 분석된 위협이 +로 전달되면 +. +SIEM +XDR +SOAR +, +사전에 정의된 +역할 및 책임에 따라 자동화된 워크플로우가 실행된다 +예시 +가 +지원팀에는 +R&R( +) +. ( +: SOAR +IT + +기기 격리티켓을법무인사팀에는 내부자 위협 알림을정보보안 포털에는 진행 상황을 동시에 +’ +‘ +, +/ +’ +‘ +, +’ +‘ +자동 전송 +또한 +등 통합 커뮤니케이션 도구와 연동되어 관련 부서 간 실시간 조율 +) +, Slack, Teams +체계가 마련된다. +자동화된 보고 시스템을 통해 보안 사고의 진행 상황이 지속적으로 공유되는가? + +자동화된 보고 시스템을 통해 사고 처리 진행 상황과 결과가 전사적으로 공유된다실무 환경에서는 +. +의 케이스 관리 기능이나 정보보안 포털이 중앙 대시보드 역할을 수행한다 +위협 탐지예시 +SOAR +. +( +: +경보부터 대응 완료예시 +플레이북 완료까지의 모든 진행 상황이 이 대시보드에 실시간으로 +SIEM +) +( +: SOAR +) + +업데이트되며경영진 및 관련 부서가 현재 보안 태세와 사고 대응 현황을 지속적으로 공유받을 수 +, +있는 체계가 마련된다. +최적화 +보안 사고가 발생하기 전에 이를 예측하고 선제적으로 대응 가능한가? + +기반의 예측 분석 시스템이 구축되어 +피드 +로그 등 방대한 데이터를 +ML/AI +, SIEM, XDR, CTI +, UEBA +실시간으로 분석하여 잠재적 위협을 조기에 예측하고 선제적으로 대응 가능한 수준이다실무 환경에서는 +. + +엔진이 과거 공격 데이터와 실시간 +정보내부 사용자기기의 행동 패턴을 지속적으로 학습하여 +AI +CTI +, +/ +, +단순 이상 징후를 넘어 제로데이 공격 징후나 내부자 위협예시 +퇴사 예정자의 비정상적 데이터 +’ +‘ +’ +( +: +접근 패턴을 사전에 예측한다이 예측 정보는 정책결정지점 +예시 +의 동적 리스크 스코 +)‘ +. +(PDP)( +: ICAM) +어링에 즉각 반영되어위협이 실제 발생하기 전에 선제적인 대응예시고위험 계정의 권한 자동 축소 +, +( +: +, +의심 기기의 모니터링 강화을 수행한다 +) +. +사고 대응 절차는 완전히 자동화되어보안 팀과 관련 부서가 신속하고 일관된 대응이 가능한가 +, +? + +사고 대응 절차는 +와 +의 플레이북 등을 통해 정책 기반으로 자동 실행되며 +일련의 대응 +AI +SOAR +, +프로세스가담당자의 수동 개입 없이 동작 가능하다실무 환경에서는 +가 위협예시랜섬웨어 확산 + +. +AI +( +: +징후을 탐지하고 위험도를 판단하면 +가 고도화된 플레이북을 자율적으로 실행한다이 플레이북은 +) +, SOAR +. +정책결정지점 +예시 +의 정책 결정을 받아 +정책시행지점 +예시 +마이크로 세그 +(PDP)( +: ICAM) +, +(PEP)( +: ZTNA, +멘테이션 +등과 연동하여 관련 워크로드 즉시 격리 +악성코드 유포 계정 비활성화 +, CNAPP +) +’ +‘, ’ +‘, ’C&C +서버 통신 차단등 신속하고 일관된 대응을 자동으로 수행한다 +‘ +. + +사고 발생 시 모든 관련 부서가 실시간으로 협력하고대응 결과가 즉시 보고되는가 +, +? + +시스템이 자동화된 대응과 동시에 실시간 협업 및 보고를 수행한다실무 환경에서는 사고 발생 시 +. +플레이북이 +역할 및 책임에 따라 보안 운영팀인프라팀서비스팀현업 +경영진 등 모든 +SOAR +R&R( +) +, +, +( +), + +관련 부서에 상황을 자동으로 전파한다예시 +알림이메일 보고 +또한 +가 정책시행 +( +: Slack/Teams +, +). +, SOAR +지점 +을 +(PEP) +통해 수행한 모든 대응 결과예시 +서버 +대 격리 완료 +계정 개 잠금는 정보 + +( +: ' +', ' +') +보안 +포털이나 중앙 대시보드에 즉시 자동으로 보고리포팅되어 +모든 관련 부서가 실시간으로 상황을 +( +) +, +공유하고 협력하여 공동 대응하는 체계가 완성된다. + +부록 +핵심 요소별 기술 및 주요 솔루션 예시 +1. +핵심 요소별 증적 자료 예시 +2. +용어 정의 +3. +약어 정의 +4. + + +핵심 요소별 기술 및 주요 솔루션 예시 +1. +구분 +기술 및 솔루션 +설명 +관련 체크리스트 +식 +별 +자 +· +신 +원 +IAM +(Identity and Access +Management, +통합계정권한관리) + +사용자의 아이덴티티를 중앙에서 통제 및 관리하는 시스템 + +계정 및 권한을 통합적으로 관리하며 +과 +, RBAC +ABAC +정책적용 + +사용자 인벤토리 +1.1.1 +1.1.2 +연계 및 사용자 +ID + +자격 증명 +1.4.1 조건부 사용자 접근 + +ICAM +(Identity Credential and Access +Management, +통합신원계정권한관리) + +에서 자격 증명 +관리가 확장된 개념으로 +IAM +(Credential) +사용자디바이스 등 모든 접근 주체의 신뢰도를 동적으로 +, + +평가 + +다양한 시스템 연계를 통해 제로트러스트 아키텍처의 +핵심 정책 엔진 역할을 수행 +1.3.1 통합 +플랫폼 + +ICAM +1.3.2 행동컨텍스트 기반 +, + +및 생체 인식 +ID +최소 권한 접근 +1.4.2. +SSO +통합인증 +(Single Sign-On, +) + +다양한 시스템을 한 번의 인증으로 접근하도록 지원 + +인증 진행 간 사용자의 위험도를 평가하고 동적으로 +엑세스관리 + +1.1.2 +연계 및 사용자 +ID + +자격 증명 +지속 인증 +1.2.2 +MFA +(Multi-Factor Authentication, +다중인증) + +다중 인증 요소를 활용하여 사용자 인증 강화를 지원 + +생체정보 +등을 활용한 추가 인증 수단 제공 및 +, OTP +패스워드리스인증 + +다중인증 +1.2.1 +1.3.2 행동컨텍스트 기반 +, + +및 생체 인식 +ID +HRM +(Human Resources Management, +인사관리시스템) + +사용자의 인사 정보입사퇴사부서 이동직무를 관리 +( +, +, +, +) +하는 시스템 + +등과 연동되어 사용자 인벤토리의 +Directory/IAM/ICAM +실시간 기준 정보를 제공 +사용자 인벤토리 +1.1.1 +기 +기 +및 +엔 +드 +포 +인 +트 +EDR +(Endpoint Detection and +Response, +엔드포인트 탐지 및 대응) + +디바이스의 위협을 실시간으로 탐지하고 대응 + +비인가 접근을 방지하고 +디바이스에 대한 신뢰성을 +, +지속적으로 평가 +2.1.1 기기 감지 및 규정 + + +준수 +2.2.1 실시간 검사를 통한 +기기 권한 부여 +2.4.1 엔드포인트 및 +확장된 + +탐지대응 + +· +ITAM +(IT Asset Management, +자산관리시스템 +IT +) + +조직 내 모든 +장비를 식별 및 관리 +IT + +다른 보안 솔루션과 실시간 연동을 통해 디바이스 상태를 +실시간 모니터링 +2.1.1 기기 감지 및 규정 + + +준수 +기기 인벤토리 +2.3.1 +UEM +(Unified Endpoint Management, +통합 엔드포인트 관리) + +모바일 기기뿐만 아니라 다양한 +기기까지 통합적으로 관리 +IoT + +개인 기기와 업무용 데이터를 분리하여 +환경을 +BYOD +관리 가능 +2.1.1 기기 감지 및 규정 + + +준수 +통합 엔드포인트 +2.3.2 +관리 및 모바일 +기기 관리 +EPP +(Endpoint Protection Platform, +엔드포인트 보호 플랫폼) + +디바이스에 대한 통합 보안 플랫폼 + +백신패치관리개인정보보호 등 다양한 보안기능 제공 +, +, +자산 +취약성 및 +2.4.2 +, +패치 관리 자동화 + +| 구분 | 기술 및 솔루션 | 설명 | 관련 체크리스트 | +| --- | --- | --- | --- | +| 식 별 자 · 신 원 | IAM (Identity and Access Management, 통합계정권한관리) |  사용자의 아이덴티티를 중앙에서 통제 및 관리하는 시스템  계정 및 권한을 통합적으로 관리하며, RBAC과 ABAC 정책 적용 | 1.1.1 사용자 인벤토리 1.1.2 ID 연계 및 사용자 자격 증명 1.4.1 조건부 사용자 접근 | +| | ICAM (Identity Credential and Access Management, 통합신원계정권한관리) |  IAM에서 자격 증명(Credential) 관리가 확장된 개념으로 사용자, 디바이스 등 모든 접근 주체의 신뢰도를 동적으로 평가  다양한 시스템 연계를 통해 제로트러스트 아키텍처의 핵심 정책 엔진 역할을 수행 | 1.3.1 통합 ICAM 플랫폼 1.3.2 행동, 컨텍스트 기반 ID 및 생체 인식 1.4.2. 최소 권한 접근 | +| | SSO (Single Sign-On, 통합인증) |  다양한 시스템을 한 번의 인증으로 접근하도록 지원  인증 진행 간 사용자의 위험도를 평가하고 동적으로 엑세스 관리 | 1.1.2 ID 연계 및 사용자 자격 증명 1.2.2 지속 인증 | +| | MFA (Multi-Factor Authentication, 다중인증) |  다중 인증 요소를 활용하여 사용자 인증 강화를 지원  생체정보, OTP 등을 활용한 추가 인증 수단 제공 및 패스워드리스 인증 | 1.2.1 다중인증 1.3.2 행동, 컨텍스트 기반 ID 및 생체 인식 | +| | HRM (Human Resources Management, 인사관리시스템) |  사용자의 인사 정보(입사, 퇴사, 부서 이동, 직무)를 관리 하는 시스템  Directory/IAM/ICAM 등과 연동되어 사용자 인벤토리의 실시간 기준 정보를 제공 | 1.1.1 사용자 인벤토리 | +| 기 기 및 엔 드 포 인 트 | EDR (Endpoint Detection and Response, 엔드포인트 탐지 및 대응) |  디바이스의 위협을 실시간으로 탐지하고 대응  비인가 접근을 방지하고, 디바이스에 대한 신뢰성을 지속적으로 평가 | 2.1.1 기기 감지 및 규정 준수 2.2.1 실시간 검사를 통한 기기 권한 부여 2.4.1 엔드포인트 및 확장된 탐지·대응 | +| | ITAM (IT Asset Management, IT자산관리시스템) |  조직 내 모든 IT장비를 식별 및 관리  다른 보안 솔루션과 실시간 연동을 통해 디바이스 상태를 실시간 모니터링 | 2.1.1 기기 감지 및 규정 준수 2.3.1 기기 인벤토리 | +| | UEM (Unified Endpoint Management, 통합 엔드포인트 관리) |  모바일 기기뿐만 아니라 다양한 IoT 기기까지 통합적으로 관리  개인 기기와 업무용 데이터를 분리하여 BYOD 환경을 관리 가능 | 2.1.1 기기 감지 및 규정 준수 2.3.2 통합 엔드포인트 관리 및 모바일 기기 관리 | +| | EPP (Endpoint Protection Platform, 엔드포인트 보호 플랫폼) |  디바이스에 대한 통합 보안 플랫폼  백신, 패치관리, 개인정보보호 등 다양한 보안기능 제공 | 2.4.2 자산, 취약성 및 패치 관리 자동화 | + + +구분 +기술 및 솔루션 +설명 +관련 체크리스트 +네 +트 +워 +크 +ZTNA +(Zero Trust Network Access, +제로트러스트 네트워크 접근) + +소프트웨어 정의 경계기반의 안전한 통신구간 설정 +SDP( +) + +최소 권한 원칙 기반 사용자와 디바이스를 평가하고, +안전한연결 허용 + +소프트웨어 정의 +3.1.3 +네트워킹 +네트워크 회복성 +3.5.1 +NGFW +(Next Generation Fire-Wall, +차세대 방화벽) + +전통적인 방화벽 기능에 +복호화 등 고급 보안 +IPS, SSL +기능 제공 + +애플리케이션 콘텐츠 기반 정책 설정 및 세분화된 +보안관리 + +기능 + +위협 대응 +3.2.1 +트래픽 암호화 +3.3.1 +Micro-Segmentation +마이크로 세그멘테이션 +( +) + +네트워크를 논리적으로 세분화하여 각 세그먼트 간의 +트래픽을 관리 + +민감한 자산에 대한 접근을 최소화하며내부 위협 확산을 +, + +방지 +3.1.1 매크로 +세그멘테이션 +마이크로 +3.1.2 +세그멘테이션 +NDR +(Network Detection and Response, +네트워크 탐지 및 대응) + +풀패킷 모니터링 기반으로 네트워크 트래픽 실시간 +분석과이상징후를 탐지 + + +기반 분석으로 네트워크 이상 트래픽을 식별하고 +ML/AI +, +자동화된 조치 수행 +위협 대응 +3.2.1 +데이터 흐름 매핑 +3.4.1 +네트워크 회복성 +3.5.1 +시 +스 +템 +PAM +(Privileged Access Management, +특권 접근 관리) + +최소 권한 원칙을 적용하여 접근 필요한 서버(Linux, +등에 대한 계정권한을 통합하여 관리 +Window, DB +) +· +접근통제 +4.1.1 +4.2.1 PAM +자격 증명 관리 +4.2.2 +취약점 관리 시스템 +(Vulnerability Management +System) + +시스템서버의 취약점을 주기적으로 스캔하고 관리하여 +( +) +보안성을 강화 + +보안 상태를 실시간으로 모니터링 +4.4.1 시스템 환경에 따른 +정책 관리 +백업 관리 시스템 +(Backup&Recovery Management +System) + +시스템의 주요 정보를 주기적으로 백업하고 복구 가능한 +환경을제공 + +4.4.1 시스템 환경에 따른 +정책 관리 +애 +플 +리 +케 +이 +션 +및 +워 +크 +로 +드 +SASE +(Secure Access Service Edge, +보안 액세스 서비스 엣지) + +클라우드 기반으로 분산된 환경에서도 네트워크와 보안 +정책을일관되게 적용하여 워크로드를 보호 + +리소스 권한 부여 +5.1.1 +및 통합 +5.2.1 지속적인 모니터링 +및 진행 중인 승인 +원격 접속 +5.3.1 +CNAPP +(Cloud Native Application +Protection Platform, +클라우드 네이티브 애플리케이션 +보호 플랫폼) + +클라우드 네이티브 환경에 대한 통합 보안 플랫폼으로 +동작하며 +기능 등을 단일 플랫폼으로 +CSPM, CWPP, CIEM +제공 +5.2.1 지속적인 모니터링 +및 진행 중인 승인 +5.4.2 애플리케이션 +인벤토리 +CASB +(Cloud Access Security Broker, +클라우드 액세스 보안 브로커) + +클라우드에 엑세스하는 환경에서 민감 데이터 보호, +사용자활동 모니터링 등 다양한 보안 기능을 제공 + +5.2.1 지속적인 모니터링 +및 진행 중인 승인 +WAAP +(Web Application & API Protection, +웹 애플리케이션 및 +보호 +API +) + +트래픽의 메타데이터를 분석하여 웹디도스 공격 등 +API +, +대응 + +클라우드 기반으로 +요청에 대해 인증과 권한을 관리 +API +5.4.1 안전한 애플리 +케이션배포 + +SCA +(Software Composition Analysis, +소프트웨어 구성 분석) + +오픈소스 라이브러리와 구성요소의 취약점을 식별하고 관리 + +사용 중인 오픈소스의 라이선스 준수 여부 확인 및 보안 +패치적용 지원 + +5.4.1 안전한 애플리 +케이션배포 + +5.5.1 안전한 소프트웨어 +개발 및 통합 +소프트웨어 위험 +5.5.2 +관리 +SAST/DAST +(Static/Dynamic Application +Security Testing) +정적동적 애플리케이션 보안 +/ +테스트) + +소스코드 단계에서 정적 분석을 통해 취약점을 탐지하고 관리 + +실행 중인 애플리케이션 대상으로 동적 분석을 통해 취약점을 +탐지하고 관리 +5.4.1 안전한 애플리 +케이션배포 + +5.5.1 안전한 소프트웨어 +개발 및 통합 + +| 구분 | 기술 및 솔루션 | 설명 | 관련 체크리스트 | +| --- | --- | --- | --- | +| 네 트 워 크 | ZTNA (Zero Trust Network Access, 제로트러스트 네트워크 접근) |  SDP(소프트웨어 정의 경계) 기반의 안전한 통신구간 설정  최소 권한 원칙 기반 사용자와 디바이스를 평가하고, 안전한 연결 허용 | 3.1.3 소프트웨어 정의 네트워킹 3.5.1 네트워크 회복성 | +| | NGFW (Next Generation Fire-Wall, 차세대 방화벽) |  전통적인 방화벽 기능에 IPS, SSL 복호화 등 고급 보안 기능 제공  애플리케이션 콘텐츠 기반 정책 설정 및 세분화된 보안 관리 기능 | 3.2.1 위협 대응 3.3.1 트래픽 암호화 | +| | Micro-Segmentation (마이크로 세그멘테이션) |  네트워크를 논리적으로 세분화하여 각 세그먼트 간의 트래픽을 관리  민감한 자산에 대한 접근을 최소화하며, 내부 위협 확산을 방지 | 3.1.1 매크로 세그멘테이션 3.1.2 마이크로 세그멘테이션 | +| | NDR (Network Detection and Response, 네트워크 탐지 및 대응) |  풀패킷 모니터링 기반으로 네트워크 트래픽 실시간 분석과 이상징후를 탐지  ML/AI 기반 분석으로 네트워크 이상 트래픽을 식별하고, 자동화된 조치 수행 | 3.2.1 위협 대응 3.4.1 데이터 흐름 매핑 3.5.1 네트워크 회복성 | +| 시 스 템 | PAM (Privileged Access Management, 특권 접근 관리) |  최소 권한 원칙을 적용하여 접근 필요한 서버(Linux, Window, DB등)에 대한 계정·권한을 통합하여 관리 | 4.1.1 접근통제 4.2.1 PAM 4.2.2 자격 증명 관리 | +| | 취약점 관리 시스템 (Vulnerability Management System) |  시스템(서버)의 취약점을 주기적으로 스캔하고 관리하여 보안성을 강화  보안 상태를 실시간으로 모니터링 | 4.4.1 시스템 환경에 따른 정책 관리 | +| | 백업 관리 시스템 (Backup&Recovery Management System) |  시스템의 주요 정보를 주기적으로 백업하고 복구 가능한 환경을 제공 | 4.4.1 시스템 환경에 따른 정책 관리 | +| 애 플 리 케 이 션 및 워 크 로 드 | SASE (Secure Access Service Edge, 보안 액세스 서비스 엣지) |  클라우드 기반으로 분산된 환경에서도 네트워크와 보안 정책을 일관되게 적용하여 워크로드를 보호 | 5.1.1 리소스 권한 부여 및 통합 5.2.1 지속적인 모니터링 및 진행 중인 승인 5.3.1 원격 접속 | +| | CNAPP (Cloud Native Application Protection Platform, 클라우드 네이티브 애플리케이션 보호 플랫폼) |  클라우드 네이티브 환경에 대한 통합 보안 플랫폼으로 동작하며 CSPM, CWPP, CIEM 기능 등을 단일 플랫폼으로 제공 | 5.2.1 지속적인 모니터링 및 진행 중인 승인 5.4.2 애플리케이션 인벤토리 | +| | CASB (Cloud Access Security Broker, 클라우드 액세스 보안 브로커) |  클라우드에 엑세스하는 환경에서 민감 데이터 보호, 사용자 활동 모니터링 등 다양한 보안 기능을 제공 | 5.2.1 지속적인 모니터링 및 진행 중인 승인 | +| | WAAP (Web Application & API Protection, 웹 애플리케이션 및 API 보호) |  API 트래픽의 메타데이터를 분석하여 웹, 디도스 공격 등 대응  클라우드 기반으로 API 요청에 대해 인증과 권한을 관리 | 5.4.1 안전한 애플리 케이션 배포 | +| | SCA (Software Composition Analysis, 소프트웨어 구성 분석) |  오픈소스 라이브러리와 구성요소의 취약점을 식별하고 관리  사용 중인 오픈소스의 라이선스 준수 여부 확인 및 보안 패치 적용 지원 | 5.4.1 안전한 애플리 케이션 배포 5.5.1 안전한 소프트웨어 개발 및 통합 5.5.2 소프트웨어 위험 관리 | +| | SAST/DAST (Static/Dynamic Application Security Testing) 정적/동적 애플리케이션 보안 테스트) |  소스코드 단계에서 정적 분석을 통해 취약점을 탐지하고 관리  실행 중인 애플리케이션 대상으로 동적 분석을 통해 취약점을 탐지하고 관리 | 5.4.1 안전한 애플리 케이션 배포 5.5.1 안전한 소프트웨어 개발 및 통합 | + + +구분 +기술 및 솔루션 +설명 +관련 체크리스트 +데 +이 +터 +DSPM +(Data Security Posture +Management, +데이터 태세 관리) + +조직 내 데이터를 식별하고 민감도에 따라 분류하여 관리 + +데이터의 가시성을 확보하여 일관된 보안 정책을 적용 +데이터 카탈로그 +6.1.1 +위험 정렬 +기업 데이터 +6.1.2 +거버넌스 +6.4.1 데이터 라벨링 및 + + +태그 지정 +RBI +(Remote Browser Isolation, +원격 브라우저 격리) + +웹 브라우저를 격리하여 악성 웹 사이트로부터 데이터를 +보호하고격리된 환경에서 데이터를 전송 + +데이터 접근제어 +6.2.1 +데이터 손실방지 +6.5.1. +eDLP +(Enterprise Data Loss Prevention, +엔터프라이즈 데이터 유출 방지) + +민감한 데이터를 식별하고 비인가 전송을 차단하여 +데이터의유출 방지 + +데이터 카탈로그 +6.1.1 +위험 정렬 +데이터 접근제어 +6.2.1 +6.4.1 데이터 라벨링 및 + + +태그 지정 +6.5.1 데이터 손실 방지 +eDRM +(Enterprise Digital Rights +Management, +엔터프라이즈 디지털 권한 관리) + +디지털 콘텐츠와 파일에 대한 권한 관리 및 보호를 제 +공하여 무단 복제 및 유출을 방지 +기업 데이터 +6.1.2 +거버넌스 +데이터 암호화 +6.3.1 +및 권한 관리 +데이터 모니터링 +6.5.2 +및 감지 +ECM +(Enterprise Content Management, +문서중앙화) + +기업 내 모든 문서 및 컨텐츠를 개인 단말기가 아닌 +중앙서버에 저장하여 접근공유보관폐기까지 일괄된 + +· +· +· +정책으로 통합관리 +데이터 접근제어 +6.2.1 +데이터 암호화 +6.3.1 +및 권한 관리 +데이터 모니터링 +6.5.2 +및 감지 +가 +시 +성 +및 +분 +석 +SIEM +(Security Information and Event +Management, +보안 정보 및 이벤트 관리) + +사용자네트워크애플리케이션 등에서 발생하는 방대한 +, +, +로그데이터를 수집하여 보안 위협 탐지 대응 + + +#### 7.1 모든 관련 활동 기록 + +중앙집중적 보안 +정보 및 이벤트 관리 +보안 위협 분석 +위협 인텔리전스 +통합 + +#### 7.6 자동화된 동적 정책 + +BigData +빅데이터 +( +) + +대규모 데이터를 처리하고 분석하여 조직의 보안 태세 +강화 + +머신러닝 +인공지능와 같은 기술을 활용하여 정상 활동 +, AI( +) +, +비정상 활동을 구분하여 위협을 사전 탐지 +보안 위협 분석 +위협 인텔리전스 +통합 + +#### 7.6 자동화된 동적 정책 + +통합로그 솔루션 +(Integrated Log Management) + +조직 내 다양한 리소스에서 생성된 로그 데이터를 중앙에서 +관리 및 분석 +중앙집중적 보안 +정보 및 이벤트 관리 +위협 인텔리전스 +통합 +ASM +(Attack Surface Management, +공격 표면 관리) + +외부 공격자의 관점에서 인터넷에 노출된 조직의 IT +자산을식별 및 분석하여 잠재적인 위협과 취약점을 + +모니터링및 분석 + +보안 위협 분석 +UEBA +(User and Entity Behavior Analytics, +사용자 및 개체 행동 분석) + +을 기반으로 사용자 및 개체기기서버 등의 정상 +ML/AI +( +, +) + +행동을학습하고 분석하여 리스크 스코어링 근거로 제공 + + +#### 7.1 모든 관련 활동 기록 + +보안 위협 분석 +사용자 및 기기 +동작 분석 + +#### 7.6 자동화된 동적 정책 + + +| 구분 | 기술 및 솔루션 | 설명 | 관련 체크리스트 | +| --- | --- | --- | --- | +| 데 이 터 | DSPM (Data Security Posture Management, 데이터 태세 관리) |  조직 내 데이터를 식별하고 민감도에 따라 분류하여 관리  데이터의 가시성을 확보하여 일관된 보안 정책을 적용 | 6.1.1 데이터 카탈로그 위험 정렬 6.1.2 기업 데이터 거버넌스 6.4.1 데이터 라벨링 및 태그 지정 | +| | RBI (Remote Browser Isolation, 원격 브라우저 격리) |  웹 브라우저를 격리하여 악성 웹 사이트로부터 데이터를 보호하고 격리된 환경에서 데이터를 전송 | 6.2.1 데이터 접근제어 6.5.1. 데이터 손실방지 | +| | eDLP (Enterprise Data Loss Prevention, 엔터프라이즈 데이터 유출 방지) |  민감한 데이터를 식별하고 비인가 전송을 차단하여 데이터의 유출 방지 | 6.1.1 데이터 카탈로그 위험 정렬 6.2.1 데이터 접근제어 6.4.1 데이터 라벨링 및 태그 지정 6.5.1 데이터 손실 방지 | +| | eDRM (Enterprise Digital Rights Management, 엔터프라이즈 디지털 권한 관리) |  디지털 콘텐츠와 파일에 대한 권한 관리 및 보호를 제 공하여 무단 복제 및 유출을 방지 | 6.1.2 기업 데이터 거버넌스 6.3.1 데이터 암호화 및 권한 관리 6.5.2 데이터 모니터링 및 감지 | +| | ECM (Enterprise Content Management, 문서중앙화) |  기업 내 모든 문서 및 컨텐츠를 개인 단말기가 아닌 중앙 서버에 저장하여 접근·공유·보관·폐기까지 일괄된 정책으로 통합관리 | 6.2.1 데이터 접근제어 6.3.1 데이터 암호화 및 권한 관리 6.5.2 데이터 모니터링 및 감지 | +| 가 시 성 및 분 석 | SIEM (Security Information and Event Management, 보안 정보 및 이벤트 관리) |  사용자, 네트워크, 애플리케이션 등에서 발생하는 방대한 로그 데이터를 수집하여 보안 위협 탐지 대응 | 7.1 모든 관련 활동 기록 7.2 중앙집중적 보안 정보 및 이벤트 관리 7.3 보안 위협 분석 7.5 위협 인텔리전스 통합 7.6 자동화된 동적 정책 | +| | BigData (빅데이터) |  대규모 데이터를 처리하고 분석하여 조직의 보안 태세 강화  머신러닝, AI(인공지능)와 같은 기술을 활용하여 정상 활동, 비정상 활동을 구분하여 위협을 사전 탐지 | 7.3 보안 위협 분석 7.5 위협 인텔리전스 통합 7.6 자동화된 동적 정책 | +| | 통합로그 솔루션 (Integrated Log Management) |  조직 내 다양한 리소스에서 생성된 로그 데이터를 중앙에서 관리 및 분석 | 7.2 중앙집중적 보안 정보 및 이벤트 관리 7.5 위협 인텔리전스 통합 | +| | ASM (Attack Surface Management, 공격 표면 관리) |  외부 공격자의 관점에서 인터넷에 노출된 조직의 IT 자산을 식별 및 분석하여 잠재적인 위협과 취약점을 모니터링 및 분석 | 7.3 보안 위협 분석 | +| | UEBA (User and Entity Behavior Analytics, 사용자 및 개체 행동 분석) |  ML/AI을 기반으로 사용자 및 개체(기기, 서버 등)의 정상 행동을 학습하고 분석하여 리스크 스코어링 근거로 제공 | 7.1 모든 관련 활동 기록 7.3 보안 위협 분석 7.4 사용자 및 기기 동작 분석 7.6 자동화된 동적 정책 | + + +구분 +기술 및 솔루션 +설명 +관련 체크리스트 +자 +동 +화 +및 +통 +합 +SOAR +(Security Orchestration, +Automation +and Response, +보안 오케스트레이션자동화 및 대응 +, +) + +다양한 보안 도구와 데이터를 연계하여 위협 탐지 및 자동화 +대응 + +보안 운영을 효율화하고 일괄된 대응 절차를 구현 +정책 통합 + +#### 8.2 중요 프로세스 자동화 + +보안 통합자동화 +, +및 대응 + +#### 8.5 데이터 교환 표준화 + +보안 운영 조정 +및 사고 대응 +ML +머신러닝 +(Machine-Learning, +) + +대규모 데이터 패턴을 식별하고비정상적인 활동 탐지 +, + +시스템에서 수집된 데이터를 전달하고통합적으로 분석 +, +하여위협 탐지 및 대응 + + +#### 8.2 중요 프로세스 자동화 + +인공지능 +보안 통합자동화 +, +및 대응 + +#### 8.5 데이터 교환 표준화 + +보안 운영 조정 +및 사고 대응 +AI +인공지능 +(Artificial Intelligence, +) + +데이터를 학습하고 분석하여 운영 절차 자동화 및 최적화 +관리 + +로그 분석위협 탐지 대응 +, +정책 통합 + +#### 8.2 중요 프로세스 자동화 + +인공지능 +보안 통합자동화 +, +및 대응 + +#### 8.5 데이터 교환 표준화 + +보안 운영 조정 +및 사고 대응 +RPA +(Robotic Process Automation, +로보틱 프로세스 자동화) + +단순하고 반복적인 작업을 자동화 처리하여 효율성을 +높이고, 인적 오류를 줄이며조직의 생산성을 강화 +, +정책 통합 + +#### 8.2 중요 프로세스 자동화 + +보안 통합자동화 +, +및 대응 + +#### 8.5 데이터 교환 표준화 + +XDR +(eXtended Detection and +Response, +확장된 탐지 및 대응) + +다양한 실시간 탐지대응 시스템을 통합하여 엔드포인트 +· +, +네트워크, 서버클라우드 등 조직 전체의 위협을 하나의 + +, + +플랫폼으로통합하고 자동화된 대응체계를 제공 + +정책 통합 + +#### 8.2 중요 프로세스 자동화 + +보안 통합자동화 +, +및 대응 + +#### 8.5 데이터 교환 표준화 + +보안 운영 조정 +및 사고 대응 + +| 구분 | 기술 및 솔루션 | 설명 | 관련 체크리스트 | +| --- | --- | --- | --- | +| 자 동 화 및 통 합 | SOAR (Security Orchestration, Automation and Response, 보안 오케스트레이션, 자동화 및 대응) |  다양한 보안 도구와 데이터를 연계하여 위협 탐지 및 자동화 대응  보안 운영을 효율화하고 일괄된 대응 절차를 구현 | 8.1 정책 통합 8.2 중요 프로세스 자동화 8.4 보안 통합, 자동화 및 대응 8.5 데이터 교환 표준화 8.6 보안 운영 조정 및 사고 대응 | +| | ML (Machine-Learning, 머신러닝) |  대규모 데이터 패턴을 식별하고, 비정상적인 활동 탐지  시스템에서 수집된 데이터를 전달하고, 통합적으로 분석 하여 위협 탐지 및 대응 | 8.2 중요 프로세스 자동화 8.3 인공지능 8.4 보안 통합, 자동화 및 대응 8.5 데이터 교환 표준화 8.6 보안 운영 조정 및 사고 대응 | +| | AI (Artificial Intelligence, 인공지능) |  데이터를 학습하고 분석하여 운영 절차 자동화 및 최적화 관리  로그 분석, 위협 탐지 대응 | 8.1 정책 통합 8.2 중요 프로세스 자동화 8.3 인공지능 8.4 보안 통합, 자동화 및 대응 8.5 데이터 교환 표준화 8.6 보안 운영 조정 및 사고 대응 | +| | RPA (Robotic Process Automation, 로보틱 프로세스 자동화) |  단순하고 반복적인 작업을 자동화 처리하여 효율성을 높이고, 인적 오류를 줄이며, 조직의 생산성을 강화 | 8.1 정책 통합 8.2 중요 프로세스 자동화 8.4 보안 통합, 자동화 및 대응 8.5 데이터 교환 표준화 | +| | XDR (eXtended Detection and Response, 확장된 탐지 및 대응) |  다양한 실시간 탐지·대응 시스템을 통합하여 엔드포인트, 네트워크, 서버, 클라우드 등 조직 전체의 위협을 하나의 플랫폼으로 통합하고 자동화된 대응체계를 제공 | 8.1 정책 통합 8.2 중요 프로세스 자동화 8.4 보안 통합, 자동화 및 대응 8.5 데이터 교환 표준화 8.6 보안 운영 조정 및 사고 대응 | + + +핵심 요소별 증적 자료 예시 +2. +핵심 요소별 공통 증적 자료 예시 +구분 +핵심 요소 +관련 증적 자료 +공 +통 +식별자신원 +· + +사용자 계정 관리 지침 + +통합 인증 및 자격증명 관리 지침 + +인증 및 세션 관리 지침 + +통합 식별접근 관리 정책 및 지침 +· + +인증 수단 및 이상행위컨텍스트탐지 관리 지침 +( +) + +관련 내부 정책지침 +RBAC/ABAC +/ + +접근권한 관리 지침 +기기 및 엔드포인트 + +기기 및 엔드포인트 보안 관리 지침 + +기기 보안 검사 및 접근통제 지침 + +자산 관리 지침 +IT + +엔드포인트 및 모바일 기기 관리 지침 + +엔드포인트 위협 탐지 및 대응 지침 + +자산 및 취약점 관리 지침 +네트워크 + +네트워크 분리 및 접근통제 지침 + +마이크로 세그멘테이션 운영 지침 애플리케이션워크로드 단위 분리 기준 정의 +( +/ +) + +소프트웨어 정의 네트워크 운영 지침 + +위협 탐지 및 대응 지침 + +암호화 통제 및 키 관리 지침 + +데이터 흐름 분석 및 관리 지침 + +재해복구 +및 업무연속성 +관리 지침 +(DR) +(BCP) +시스템 + +시스템 접근통제 정책 및 지침 + +특권 계정 및 접근통제 관리 지침 + +자격 증명 및 인증 관리 지침 패스워드 작성 규칙갱신 주기 등 +( +, +) + +네트워크 분리 및 접근통제 지침 + +시스템 보안 관리 지침 온프레미스 및 클라우드 환경별 보안 정책 포함 +( +) +애플리케이션 및 워크로드 + +애플리케이션 및 리소스 접근통제 지침 + +보안 모니터링 및 운영 지침 + +원격 접속 보안 관리 지침 인가 절차접근 단말 보안 기준 등 +( +, +) + +소프트웨어 개발 보안 가이드 및 운영 지침 + +애플리케이션 자산 관리 지침 + +소프트웨어 개발 보안 지침 시큐어코딩 표준 및 +단계별 보안 절차 +( +SDLC +) + +소프트웨어 위험 관리 지침 및 계획서 위험 식별평가조치 +( +/ +/ +) +데이터 + +데이터 분류 및 위험 평가 지침 + +데이터 거버넌스 정책 및 관리 지침 데이터 관리 원칙 포함 +( +) + +데이터 접근제어 정책 및 지침 + +데이터 암호화 및 키 관리 지침 + +데이터 분류 및 라벨링 관리 지침 등급별 라벨링 기준 및 태깅 규칙 +( +) + +데이터 유출 방지 +정책 및 지침 +(DLP) + +데이터 모니터링 및 이상행위 탐지 절차 및 지침 + +| 구분 | 핵심 요소 | 관련 증적 자료 | +| --- | --- | --- | +| 공 통 | 식별자·신원 |  사용자 계정 관리 지침  통합 인증 및 자격증명 관리 지침  인증 및 세션 관리 지침  통합 식별·접근 관리 정책 및 지침  인증 수단 및 이상행위(컨텍스트) 탐지 관리 지침  RBAC/ABAC 관련 내부 정책/지침  접근권한 관리 지침 | +| | 기기 및 엔드포인트 |  기기 및 엔드포인트 보안 관리 지침  기기 보안 검사 및 접근통제 지침  IT 자산 관리 지침  엔드포인트 및 모바일 기기 관리 지침  엔드포인트 위협 탐지 및 대응 지침  자산 및 취약점 관리 지침 | +| | 네트워크 |  네트워크 분리 및 접근통제 지침  마이크로 세그멘테이션 운영 지침 (애플리케이션/워크로드 단위 분리 기준 정의)  소프트웨어 정의 네트워크 운영 지침  위협 탐지 및 대응 지침  암호화 통제 및 키 관리 지침  데이터 흐름 분석 및 관리 지침  재해복구(DR) 및 업무연속성(BCP) 관리 지침 | +| | 시스템 |  시스템 접근통제 정책 및 지침  특권 계정 및 접근통제 관리 지침  자격 증명 및 인증 관리 지침 (패스워드 작성 규칙, 갱신 주기 등)  네트워크 분리 및 접근통제 지침  시스템 보안 관리 지침 (온프레미스 및 클라우드 환경별 보안 정책 포함) | +| | 애플리케이션 및 워크로드 |  애플리케이션 및 리소스 접근통제 지침  보안 모니터링 및 운영 지침  원격 접속 보안 관리 지침 (인가 절차, 접근 단말 보안 기준 등)  소프트웨어 개발 보안 가이드 및 운영 지침  애플리케이션 자산 관리 지침  소프트웨어 개발 보안 지침 (시큐어코딩 표준 및 SDLC 단계별 보안 절차)  소프트웨어 위험 관리 지침 및 계획서 (위험 식별/평가/조치) | +| | 데이터 |  데이터 분류 및 위험 평가 지침  데이터 거버넌스 정책 및 관리 지침 (데이터 관리 원칙 포함)  데이터 접근제어 정책 및 지침  데이터 암호화 및 키 관리 지침  데이터 분류 및 라벨링 관리 지침 (등급별 라벨링 기준 및 태깅 규칙)  데이터 유출 방지(DLP) 정책 및 지침  데이터 모니터링 및 이상행위 탐지 절차 및 지침 | + + +구분 +핵심 요소 +관련 증적 자료 +공 +통 +가시성 및 분석 + +로그 및 이벤트 관리 지침 수집 대상보존 기간무결성 확보 등 +( +, +, +) + +보안 관제 및 사고 대응 지침 + +보안 위협 및 취약점 관리 지침 + +사용자 이상행위 탐지 및 대응 관리 지침 + +위협 인텔리전스 관리 지침 + +동적 보안 정책 관리 및 운영 지침 +자동화 및 통합 + +정보보호 정책지침절차서 제개정 내역 포함 +· +· +( +· +) + +주요 프로세스 자동화 관리 지침절차서 +· + +기반 보안 운영 및 자동화 관리 지침 +AI + +보안 통합 및 자동화 대응 운영 지침 + +데이터 교환 표준화 정책 및 지침 데이터 포맷연동 프로토콜 표준 정의 +( +, +) + +보안사고 대응 정책 및 표준운영절차(SOP) + +| 구분 | 핵심 요소 | 관련 증적 자료 | +| --- | --- | --- | +| 공 통 | 가시성 및 분석 |  로그 및 이벤트 관리 지침 (수집 대상, 보존 기간, 무결성 확보 등)  보안 관제 및 사고 대응 지침  보안 위협 및 취약점 관리 지침  사용자 이상행위 탐지 및 대응 관리 지침  위협 인텔리전스 관리 지침  동적 보안 정책 관리 및 운영 지침 | +| | 자동화 및 통합 |  정보보호 정책·지침·절차서 (제·개정 내역 포함)  주요 프로세스 자동화 관리 지침·절차서  AI 기반 보안 운영 및 자동화 관리 지침  보안 통합 및 자동화 대응 운영 지침  데이터 교환 표준화 정책 및 지침 (데이터 포맷, 연동 프로토콜 표준 정의)  보안사고 대응 정책 및 표준운영절차(SOP) | + + +핵심 요소별 관련 증적 자료 예시 +구분 +기능 +세부역량 +관련 증적 자료 +식 +별 +자 +· +신 +원 +식별자 관리 +1.1.1 +사용자 인벤토리 + +사용자 계정 관리 지침 + +사용자 계정 목록관리대장 +( +) + +식별자 관리 시스템 +등운영 화면 +(Directory/HRM/IAM +) + +계정 생명주기생성변경삭제관리 이력 +( +· +· +) + +사용자 계정 현황 정기 점검 내역 +1.1.2 +연계 및 사용자 자격 +ID +증명 + +통합 인증 및 자격 증명 관리 지침 + +관리 시스템 연동 현황 및 구성도 +ID + +통합 인증 시스템 +등운영 화면 +(SSO/IAM +) + +사용자 인증 이력 및 로그 + +사용자 자격 증명 감사 내역 +인증 +1.2.1 +다중인증(MFA) + +사용자 인증 및 +관리 지침 +MFA + +시스템 연동 현황 및 구성도 +MFA + +시스템 운영 현황 및 설정 화면 +MFA + +인증 이력 및 실패 로그 +MFA + +비정상 로그인 탐지 및 대응 내역 +1.2.2 +지속인증 + +인증 및 세션 관리 지침 + +인증 시스템 +정책 설정 내역 +(SSO/IAM/ICAM) + +실시간 세션 모니터링 및 접속 로그 + +이상행위 탐지 및 추가 인증재인증이력 +( +) + +세션 및 접속 상태 관리 대시보드 +위험도 평가 +1.3.1 +통합 +플랫폼 +ICAM + +통합 식별접근 관리 정책 및 지침 +· + +시스템 연동 구성도 및 현황 +ICAM + +시스템 운영 화면대시보드정책 설정 +ICAM +( +, +) + +계정 및 권한 생명주기 관리 이력자동화 로그 +( +) + +위험 기반 접근통제 및 대응 내역 + +권한 및 정책 정기 점검 보고서 +1.3.2 +행동 +컨텍스트 기반 +및 +, +ID +생체인식 + + +인증 수단 및 이상행위컨텍스트탐지 관리 지침 +( +) + +생체인증 및 다중인증 +운영 설정 및 이력 +(MFA) + +사용자 행위 +및 컨텍스트 분석 탐지 로그 +(UEBA) + +컨텍스트 기반 권한 조정 및 대응 내역 + +비정상 접근 탐지 및 조치 결과 보고서 +접근관리 +1.4.1 +조건부 사용자 접근 + +관련 내부 정책지침 +RBAC/ABAC +/ + +조건부 접근통제 지침 위치시간기기 상태 등 접근 허용 기준 +( +, +, +정의) + +조건부 접근제어 시스템 +등운영 화면 +(IAM/ZTNA/PAM +) + +비정상 접속 탐지 및 대응 내역이상행위정책 위반 알림 및 조치 로그 +( +, +) + +접근 정책 유효성 검토 및 개선 내역 +최소 권한 접근 +.4.2 + +접근권한 관리 지침 + +직무별 접근권한 정의서 +매트릭스 +(RBAC +) + +권한 신청 및 변경 승인 내역관리 시스템 워크플로우 +( +) + +권한 상승 +및 자동 회수 이력 +(JIT) + +접근권한 정기 검토 및 조치 결과 보고서 + +| 구분 | 기능 | 세부역량 | 관련 증적 자료 | +| --- | --- | --- | --- | +| 식 별 자 · 신 원 | 1.1 식별자 관리 | 1.1.1 사용자 인벤토리 |  사용자 계정 관리 지침  사용자 계정 목록(관리대장)  식별자 관리 시스템(Directory/HRM/IAM 등) 운영 화면  계정 생명주기(생성·변경·삭제) 관리 이력  사용자 계정 현황 정기 점검 내역 | +| | | 1.1.2 ID 연계 및 사용자 자격 증명 |  통합 인증 및 자격 증명 관리 지침  ID 관리 시스템 연동 현황 및 구성도  통합 인증 시스템(SSO/IAM 등) 운영 화면  사용자 인증 이력 및 로그  사용자 자격 증명 감사 내역 | +| | 1.2 인증 | 1.2.1 다중인증(MFA) |  사용자 인증 및 MFA 관리 지침  MFA 시스템 연동 현황 및 구성도  MFA 시스템 운영 현황 및 설정 화면  MFA 인증 이력 및 실패 로그  비정상 로그인 탐지 및 대응 내역 | +| | | 1.2.2 지속인증 |  인증 및 세션 관리 지침  인증 시스템(SSO/IAM/ICAM) 정책 설정 내역  실시간 세션 모니터링 및 접속 로그  이상행위 탐지 및 추가 인증(재인증) 이력  세션 및 접속 상태 관리 대시보드 | +| | 1.3 위험도 평가 | 1.3.1 통합 ICAM 플랫폼 |  통합 식별·접근 관리 정책 및 지침  ICAM 시스템 연동 구성도 및 현황  ICAM 시스템 운영 화면(대시보드, 정책 설정)  계정 및 권한 생명주기 관리 이력(자동화 로그)  위험 기반 접근통제 및 대응 내역  권한 및 정책 정기 점검 보고서 | +| | | 1.3.2 행동, 컨텍스트 기반 ID 및 생체 인식 |  인증 수단 및 이상행위(컨텍스트) 탐지 관리 지침  생체인증 및 다중인증(MFA) 운영 설정 및 이력  사용자 행위(UEBA) 및 컨텍스트 분석 탐지 로그  컨텍스트 기반 권한 조정 및 대응 내역  비정상 접근 탐지 및 조치 결과 보고서 | +| | 1.4 접근관리 | 1.4.1 조건부 사용자 접근 |  RBAC/ABAC 관련 내부 정책/지침  조건부 접근통제 지침 (위치, 시간, 기기 상태 등 접근 허용 기준 정의)  조건부 접근제어 시스템(IAM/ZTNA/PAM 등) 운영 화면  비정상 접속 탐지 및 대응 내역(이상행위, 정책 위반 알림 및 조치 로그)  접근 정책 유효성 검토 및 개선 내역 | +| | | 1.4.2 최소 권한 접근 |  접근권한 관리 지침  직무별 접근권한 정의서(RBAC 매트릭스)  권한 신청 및 변경 승인 내역(관리 시스템 워크플로우)  권한 상승(JIT) 및 자동 회수 이력  접근권한 정기 검토 및 조치 결과 보고서 | + + +구분 +기능 +세부역량 +증적 자료 +기 +기 +및 +엔 +드 +포 +인 +트 +정책 준수 모니터링 +2.1.1 +기기 감지 및 규정 준수 + +기기 및 엔드포인트 보안 관리 지침 + +자산기기관리대장 +IT +( +) + +단말 규정 준수 관리 시스템 +등운영 화면 +(EPP/NAC/EDR +) + +비준수 기기 탐지 및 조치 이력 + +단말 보안 점검 및 조치 결과 보고서백신패치보안 설정 준수율 등 +( +, +, +) +데이터 접근제어 +2.2.1 +실시간 검사를 통한 기기 +권한 부여 + +기기 보안 검사 및 접근통제 지침 + +자산 접근 기기 현황 및 검사 내역 + +기기 접근 제어 시스템 +등운영 화면 +(NAC/EDR/ZTNA +) + +보안 미준수 기기 접근 차단 및 제어 이력 + +기기 보안 상태 정기 점검 결과 보고서 +자산관리 +2.3.1 +기기 인벤토리 + +자산관리 지침 +IT + +자산기기관리대장 +IT +( +) + +관리용 단말기 지정 및 관리 현황 + +자산관리 시스템 +등운영 화면 +(ITAM +) + +비인가 기기 탐지 및 차단 이력 + +정기 자산 실사 보고서 +2.3.2 +통합 엔드포인트 관리 및 +모바일기기 관리 + + +엔드포인트 및 모바일 기기 관리 지침 + +통합 단말기 관리대장 + +통합 엔드포인트 관리 시스템 +등운영 화면 +(MDM/UEM +) + +보안 패치 및 정책 배포 이력 + +단말기 이상행위 탐지 및 조치 내역 +기기 위협 보호 +2.4.1 +엔드포인트 및 확장된 탐지· +대응 +및 +(EDR +XDR) + +엔드포인트 위협 탐지 및 대응 지침 + +시스템 운영 화면 +EDR/XDR + +위협 탐지 및 자동 차단격리 이력 +· + +위협 인텔리전스 +연동 및 정책 반영 내역 +(CTI) + +위협 분석 및 대응 결과 보고서 +2.4.2 +자산 +취약성 및 패치 관리 +, +자동화 + +자산 및 취약점 관리 지침 + +취약점 및 패치 관리 시스템 +등운영 화면 +(EPP/EDR/PMS +) + +자산별 취약점 현황 목록 + +보안 패치 자동 배포 및 적용 내역 + +취약점 점검 및 조치 결과 보고서 +네 +트 +워 +크 +네트워크 세분화 +3.1.1 +매크로 세그멘테이션 + +네트워크 구성도 전체영역별 +( +/ +) + +네트워크 분리 및 접근통제 지침 + +네트워크 접근제어 정책 +등설정 내역 +(ACL/VLAN +) + +세그먼트 간 트래픽 모니터링 및 차단 로그 + +주요 네트워크 장비방화벽 등정책 검토 내역 +( +) +3.1.2 +마이크로 세그멘테이션 + +마이크로 세그멘테이션 운영 지침애플리케이션워크로드 단위 분리 +( +/ + +기준 정의) + +애플리케이션워크로드 단위 상세 네트워크 구성도 +/ + +주요 워크로드 트래픽 흐름도 +및 연동 구성도 +(Flowchart) + +마이크로 세그멘테이션 시스템 +호스트방화벽설정 내역 +(SDN/ +) + +세그먼트별 비인가 트래픽 차단 및 제어 로그 +3.1.3 +소프트웨어 정의 네트워킹 + +소프트웨어 정의 네트워크 운영 지침 + +아키텍처 및 네트워크 구성도 +SDN + +컨트롤러 운영 현황 및 정책 설정 내역 +SDN + +트래픽 제어 및 정책 변경 관리 이력 + +운영 현황 및 트래픽 분석 보고서 +SDN + +| 구분 | 기능 | 세부역량 | 증적 자료 | +| --- | --- | --- | --- | +| 기 기 및 엔 드 포 인 트 | 2.1 정책 준수 모니터링 | 2.1.1 기기 감지 및 규정 준수 |  기기 및 엔드포인트 보안 관리 지침  IT 자산(기기) 관리대장  단말 규정 준수 관리 시스템(EPP/NAC/EDR 등) 운영 화면  비준수 기기 탐지 및 조치 이력  단말 보안 점검 및 조치 결과 보고서(백신, 패치, 보안 설정 준수율 등) | +| | 2.2 데이터 접근제어 | 2.2.1 실시간 검사를 통한 기기 권한 부여 |  기기 보안 검사 및 접근통제 지침  자산 접근 기기 현황 및 검사 내역  기기 접근 제어 시스템(NAC/EDR/ZTNA 등) 운영 화면  보안 미준수 기기 접근 차단 및 제어 이력  기기 보안 상태 정기 점검 결과 보고서 | +| | 2.3 자산관리 | 2.3.1 기기 인벤토리 |  IT 자산관리 지침  IT 자산(기기) 관리대장  관리용 단말기 지정 및 관리 현황  자산관리 시스템(ITAM 등) 운영 화면  비인가 기기 탐지 및 차단 이력  정기 자산 실사 보고서 | +| | | 2.3.2 통합 엔드포인트 관리 및 모바일 기기 관리 |  엔드포인트 및 모바일 기기 관리 지침  통합 단말기 관리대장  통합 엔드포인트 관리 시스템(MDM/UEM 등) 운영 화면  보안 패치 및 정책 배포 이력  단말기 이상행위 탐지 및 조치 내역 | +| | 2.4 기기 위협 보호 | 2.4.1 엔드포인트 및 확장된 탐지· 대응 (EDR 및 XDR) |  엔드포인트 위협 탐지 및 대응 지침  EDR/XDR 시스템 운영 화면  위협 탐지 및 자동 차단·격리 이력  위협 인텔리전스(CTI) 연동 및 정책 반영 내역  위협 분석 및 대응 결과 보고서 | +| | | 2.4.2 자산, 취약성 및 패치 관리 자동화 |  자산 및 취약점 관리 지침  취약점 및 패치 관리 시스템(EPP/EDR/PMS 등) 운영 화면  자산별 취약점 현황 목록  보안 패치 자동 배포 및 적용 내역  취약점 점검 및 조치 결과 보고서 | +| 네 트 워 크 | 3.1 네트워크 세분화 | 3.1.1 매크로 세그멘테이션 |  네트워크 구성도 (전체/영역별)  네트워크 분리 및 접근통제 지침  네트워크 접근제어 정책(ACL/VLAN 등) 설정 내역  세그먼트 간 트래픽 모니터링 및 차단 로그  주요 네트워크 장비(방화벽 등) 정책 검토 내역 | +| | | 3.1.2 마이크로 세그멘테이션 |  마이크로 세그멘테이션 운영 지침(애플리케이션/워크로드 단위 분리 기준 정의)  애플리케이션/워크로드 단위 상세 네트워크 구성도  주요 워크로드 트래픽 흐름도(Flowchart) 및 연동 구성도  마이크로 세그멘테이션 시스템(SDN/호스트방화벽) 설정 내역  세그먼트별 비인가 트래픽 차단 및 제어 로그 | +| | | 3.1.3 소프트웨어 정의 네트워킹 |  소프트웨어 정의 네트워크 운영 지침  SDN 아키텍처 및 네트워크 구성도  SDN 컨트롤러 운영 현황 및 정책 설정 내역  트래픽 제어 및 정책 변경 관리 이력  SDN 운영 현황 및 트래픽 분석 보고서 | + + +구분 +기능 +세부역량 +증적 자료 +네 +트 +워 +크 +위협 대응 +3.2.1 +위협 대응 + +위협 탐지 및 대응 지침 + +위협 탐지 및 차단 시스템 +등운영 화면 +(IDS/IPS/SIEM +) + +침해사고 대응 및 조치 이력탐지분석차단 로그 +( +, +, +) + +위협 인텔리전스 +연동 및 정책 반영 내역 +(CTI) + +보안관제 현황 및 위협 분석 보고서 +트래픽 암호화 +3.3.1 +트래픽 암호화 + +암호화 통제 및 키 관리 지침 + +네트워크 구간별 암호화 적용 현황 +적용 대상 등 +(VPN, SSL/TLS +) + +암호화 시스템 +등운영 화면 +(VPN/KMS +) + +인증서 및 암호화 키 관리 대장 + +암호화 정책 적용 및 점검 내역 +트래픽 관리 +3.4.1 +데이터 흐름 매핑 + +데이터 흐름 분석 및 관리 지침 + +데이터 흐름도시스템업무 단위 상세 흐름 +( +/ +) + +트래픽 분석 및 모니터링 시스템 +등운영 화면 +(NMS/NDR +) + +비정상 트래픽 탐지 및 조치 로그 +네트워크 회복성 +3.5.1 +네트워크 회복성 + +재해복구 +및 업무연속성 +관리 지침 +(DR) +(BCP) + +네트워크 이중화 설계서 및 구성도 + +주요 시스템 백업 및 복구 현황 + +재해복구 모의훈련 계획 및 결과 보고서 + +장애 발생 및 복구 조치 이력 +로그 등 +(Failover +) +시 +스 +템 +접근통제 +4.1.1 +접근통제 + +시스템 접근통제 정책 및 지침 + +시스템 접근권한 정의서 +매트릭스 +(RBAC +) + +접근제어 시스템 +등운영 화면 +(SSO/IAM/PAM +) + +시스템 접근 및 권한 부여 이력 + +접근권한 검토 및 점검 보고서 +시스템 계정 관리 +4.2.1 +PAM + +특권 계정 및 접근통제 관리 지침 + +특권 계정시스템 +관리대장 +( +/DB) + +특권 접근 관리 +시스템 운영 화면 +(PAM) + +권한 상승 신청승인 및 접속 이력 +· + +특권 계정 사용 내역 점검 및 감사 보고서 +4.2.2 +자격 증명 관리 + +자격 증명 및 인증 관리 지침패스워드 작성 규칙갱신 주기 등 +( +, +) + +자격 증명 관리 시스템 +등운영 화면 +(MFA/ICAM +) + +자격 증명 발급갱신폐기 이력 +· +· + +비정상 인증 탐지 및 차단 로그 + +자격 증명 현황 및 보안 점검 보고서 +네트워크 분리 정책 +4.3.1 +네트워크 세분화 및 그룹 +간 이동 + +네트워크 구성도전체영역별 +( +/ +) + +네트워크 분리 및 접근통제 지침 + +네트워크 접근제어 +및 세분화 정책 설정 내역 +(ACL) + +세그먼트 간 접근통제 및 이상행위 차단 이력 + +네트워크 접근제어 정책 검토 및 점검 내역 +시스템 보안 및 정책 +관리 +4.4.1 +시스템 환경에 따른 정책 +관리 + +시스템 보안 관리 지침온프레미스 및 클라우드 환경별 보안 정책 +( +포함) + +하이브리드 클라우드 정책 연동 아키텍처구성도 +( +) + +클라우드 보안 통합 관리 시스템 +등운영 화면 +(CNAPP +) + +코드 기반 인프라스크립트 및 정책 템플릿 +IaC( +) + +보안 정책 변경 및 자동 배포 이력 +파이프라인 연동 로그 +(CI/CD +) + +파이프라인 내 보안 정책 관련 정책 및 지침 +DevSecOps + +| 구분 | 기능 | 세부역량 | 증적 자료 | +| --- | --- | --- | --- | +| 네 트 워 크 | 3.2 위협 대응 | 3.2.1 위협 대응 |  위협 탐지 및 대응 지침  위협 탐지 및 차단 시스템(IDS/IPS/SIEM 등) 운영 화면  침해사고 대응 및 조치 이력(탐지, 분석, 차단 로그)  위협 인텔리전스(CTI) 연동 및 정책 반영 내역  보안관제 현황 및 위협 분석 보고서 | +| | 3.3 트래픽 암호화 | 3.3.1 트래픽 암호화 |  암호화 통제 및 키 관리 지침  네트워크 구간별 암호화 적용 현황(VPN, SSL/TLS 적용 대상 등)  암호화 시스템(VPN/KMS 등) 운영 화면  인증서 및 암호화 키 관리 대장  암호화 정책 적용 및 점검 내역 | +| | 3.4 트래픽 관리 | 3.4.1 데이터 흐름 매핑 |  데이터 흐름 분석 및 관리 지침  데이터 흐름도(시스템/업무 단위 상세 흐름)  트래픽 분석 및 모니터링 시스템(NMS/NDR 등) 운영 화면  비정상 트래픽 탐지 및 조치 로그 | +| | 3.5 네트워크 회복성 | 3.5.1 네트워크 회복성 |  재해복구(DR) 및 업무연속성(BCP) 관리 지침  네트워크 이중화 설계서 및 구성도  주요 시스템 백업 및 복구 현황  재해복구 모의훈련 계획 및 결과 보고서  장애 발생 및 복구 조치 이력(Failover 로그 등) | +| 시 스 템 | 4.1 접근통제 | 4.1.1 접근통제 |  시스템 접근통제 정책 및 지침  시스템 접근권한 정의서(RBAC 매트릭스)  접근제어 시스템(SSO/IAM/PAM 등) 운영 화면  시스템 접근 및 권한 부여 이력  접근권한 검토 및 점검 보고서 | +| | 4.2 시스템 계정 관리 | 4.2.1 PAM |  특권 계정 및 접근통제 관리 지침  특권 계정(시스템/DB) 관리대장  특권 접근 관리(PAM) 시스템 운영 화면  권한 상승 신청·승인 및 접속 이력  특권 계정 사용 내역 점검 및 감사 보고서 | +| | | 4.2.2 자격 증명 관리 |  자격 증명 및 인증 관리 지침(패스워드 작성 규칙, 갱신 주기 등)  자격 증명 관리 시스템(MFA/ICAM 등) 운영 화면  자격 증명 발급·갱신·폐기 이력  비정상 인증 탐지 및 차단 로그  자격 증명 현황 및 보안 점검 보고서 | +| | 4.3 네트워크 분리 정책 | 4.3.1 네트워크 세분화 및 그룹 간 이동 |  네트워크 구성도(전체/영역별)  네트워크 분리 및 접근통제 지침  네트워크 접근제어(ACL) 및 세분화 정책 설정 내역  세그먼트 간 접근통제 및 이상행위 차단 이력  네트워크 접근제어 정책 검토 및 점검 내역 | +| | 4.4 시스템 보안 및 정책 관리 | 4.4.1 시스템 환경에 따른 정책 관리 |  시스템 보안 관리 지침(온프레미스 및 클라우드 환경별 보안 정책 포함)  하이브리드 클라우드 정책 연동 아키텍처(구성도)  클라우드 보안 통합 관리 시스템(CNAPP 등) 운영 화면  IaC(코드 기반 인프라) 스크립트 및 정책 템플릿  보안 정책 변경 및 자동 배포 이력(CI/CD 파이프라인 연동 로그)  DevSecOps 파이프라인 내 보안 정책 관련 정책 및 지침 | + + +구분 +기능 +세부역량 +증적 자료 +애 +플 +리 +케 +이 +션 +및 +워 +크 +로 +드 +애플리케이션 접근 +5.1.1 +리소스 권한 부여 및 통합 + +애플리케이션 및 리소스 접근통제 지침 + +통합 계정권한관리 시스템 +등운영 화면 +(IAM/ICAM +) + +애플리케이션별 접근권한 정의서(RBAC/ABAC) + +권한 부여회수 자동화 및 승인 이력 +/ + +접근권한 정기 검토 및 조치 결과 보고서 +애플리케이션 위협 +보호 +5.2.1 +지속적인 모니터링 및 +진행 중인 승인 + +보안 모니터링 및 운영 지침 + +통합 보안 관제 시스템 +등 +운영 화면 및 대시보드 +(SIEM/XDR +) + +시스템 변경 보안성 검토 및 승인 내역 +파이프라인 연동 +(DevSecOps + +포함) + +이상 징후 탐지 및 대응 이력 + +보안 관제 정기주간월간보고서 +( +/ +) +접근 가능한 +애플리케이션 +5.3.1 +원격 접속 + +원격 접속 보안 관리 지침인가 절차접근 단말 보안 기준 등 +( +, +) + +원격 접속 대상 및 접근권한 현황 목록 + +원격 접속 통제 시스템 +등운영 화면 +(VPN/ZTNA +) + +접근 단말 보안 설정 및 무결성 검증 내역 + +비정상 원격 접속 탐지 및 차단 이력 + +#### 5.4 안전한 애플리케이션 + +배포 +5.4.1 +안전한 애플리케이션 배포 + +소프트웨어 개발 보안 가이드 및 운영 지침 + +소프트웨어 개발 생명주기기반 개발 및 운영 가이드 +SDLC( +) + +파이프라인 보안 +등설정 화면 +CI/CD +(SAST/DAST/SCA +) + +애플리케이션 보안성 검토 및 취약점 조치 이력 + +배포 자동화 및 코드 무결성 검증 로그 + +배포 과정의 이상행위 탐지 및 대응 보고서 +5.4.2 +애플리케이션 인벤토리 + +애플리케이션 자산관리 지침 + +애플리케이션 관리대장개발자 및 담당자 지정 +( +) + +애플리케이션 자동 식별 및 관리 시스템 +등운영 화면 +(ITAM +) + +애플리케이션 변경 관리 및 현행화 이력 + +애플리케이션 보안 현황취약점패치점검 보고서 +( +/ +) +소프트웨어 +· +애플리케이션 보안 +5.5.1 +안전한 소프트웨어 개발 +및 통합 + +소프트웨어 개발 보안 지침시큐어코딩 표준 및 +단계별 보안 절차 +( +SDLC +) + +보안 자동화 시스템 설정 화면 +연동 현황 +CI/CD +(SAST/DAST/SCA +) + +소스코드 보안약점 진단 및 이행 조치서 + +오픈소스 점검 내역 및 +관리대장 +SBOM + +개발운영 환경 분리 및 접근통제 현황 +· +5.5.2 +소프트웨어 위험 관리 + +소프트웨어 위험 관리 지침 및 계획서위험 식별평가조치 +( +/ +/ +) + +소프트웨어 위험 식별 및 평가 보고서취약점 등급 분류 및 +( +우선순위 산정) + +소프트웨어 공급망오픈소스서드파티위험 분석 내역 +( +/ +) + +위험 관리 시스템취약점 진단모니터링운영 화면 +( +/ +) + +위험 조치 및 개선 결과 보고서 + +| 구분 | 기능 | 세부역량 | 증적 자료 | +| --- | --- | --- | --- | +| 애 플 리 케 이 션 및 워 크 로 드 | 5.1 애플리케이션 접근 | 5.1.1 리소스 권한 부여 및 통합 |  애플리케이션 및 리소스 접근통제 지침  통합 계정권한관리 시스템(IAM/ICAM 등) 운영 화면  애플리케이션별 접근권한 정의서(RBAC/ABAC)  권한 부여/회수 자동화 및 승인 이력  접근권한 정기 검토 및 조치 결과 보고서 | +| | 5.2 애플리케이션 위협 보호 | 5.2.1 지속적인 모니터링 및 진행 중인 승인 |  보안 모니터링 및 운영 지침  통합 보안 관제 시스템(SIEM/XDR 등) 운영 화면 및 대시보드  시스템 변경 보안성 검토 및 승인 내역(DevSecOps 파이프라인 연동 포함)  이상 징후 탐지 및 대응 이력  보안 관제 정기(주간/월간) 보고서 | +| | 5.3 접근 가능한 애플리케이션 | 5.3.1 원격 접속 |  원격 접속 보안 관리 지침(인가 절차, 접근 단말 보안 기준 등)  원격 접속 대상 및 접근권한 현황 목록  원격 접속 통제 시스템(VPN/ZTNA 등) 운영 화면  접근 단말 보안 설정 및 무결성 검증 내역  비정상 원격 접속 탐지 및 차단 이력 | +| | 5.4 안전한 애플리케이션 배포 | 5.4.1 안전한 애플리케이션 배포 |  소프트웨어 개발 보안 가이드 및 운영 지침  SDLC(소프트웨어 개발 생명주기)기반 개발 및 운영 가이드  CI/CD 파이프라인 보안(SAST/DAST/SCA 등) 설정 화면  애플리케이션 보안성 검토 및 취약점 조치 이력  배포 자동화 및 코드 무결성 검증 로그  배포 과정의 이상행위 탐지 및 대응 보고서 | +| | | 5.4.2 애플리케이션 인벤토리 |  애플리케이션 자산관리 지침  애플리케이션 관리대장(개발자 및 담당자 지정)  애플리케이션 자동 식별 및 관리 시스템(ITAM 등) 운영 화면  애플리케이션 변경 관리 및 현행화 이력  애플리케이션 보안 현황(취약점/패치) 점검 보고서 | +| | 5.5 소프트웨어· 애플리케이션 보안 | 5.5.1 안전한 소프트웨어 개발 및 통합 |  소프트웨어 개발 보안 지침(시큐어코딩 표준 및 SDLC 단계별 보안 절차)  CI/CD 보안 자동화 시스템 설정 화면(SAST/DAST/SCA 연동 현황)  소스코드 보안약점 진단 및 이행 조치서  오픈소스 점검 내역 및 SBOM 관리대장  개발·운영 환경 분리 및 접근통제 현황 | +| | | 5.5.2 소프트웨어 위험 관리 |  소프트웨어 위험 관리 지침 및 계획서(위험 식별/평가/조치)  소프트웨어 위험 식별 및 평가 보고서(취약점 등급 분류 및 우선순위 산정)  소프트웨어 공급망(오픈소스/서드파티) 위험 분석 내역  위험 관리 시스템(취약점 진단/모니터링) 운영 화면  위험 조치 및 개선 결과 보고서 | + + +구분 +기능 +세부역량 +증적 자료 +데 +이 +터 +데이터 목록 관리 +6.1.1 +데이터 카탈로그 위험 정렬 + +데이터 분류 및 위험 평가 지침 + +데이터 카탈로그 및 위험 등급 현황 목록 + +데이터 보안 형상 관리 +시스템 운영 화면 +(DSPM) + +데이터 위험 식별 및 자동 분류 이력 + +데이터 보안 위험 평가 및 조치 결과 보고서 +6.1.2 +기업 데이터 거버넌스 + +데이터 거버넌스 정책 및 관리 지침데이터 관리 원칙 포함 +( +) + +데이터 소유자 및 관리자 지정 내역 +정의 문서 +(R&R +) + +데이터 거버넌스 관리 시스템 +등운영 화면 +eDRM/eDLP/(DSPM +) + +데이터 정책 준수 모니터링 및 위반 처리 이력 + +데이터 거버넌스 이행 점검 및 감사 보고서 +접근 결정방법 +6.2.1 +데이터 접근제어 + +데이터 접근제어 정책 및 지침 + +데이터 접근권한 관리대장 + +데이터 접근제어 시스템 +등운영 화면 +(DBAM/PAM +) + +접근권한 부여변경해지 이력 +· +· + +접근권한 검토 및 조치 결과 보고서 +데이터 암호화 +6.3.1 +데이터 암호화 및 권한 관리 + +데이터 암호화 및 키 관리 지침 + +암호화 대상 목록 +문서 관리대장 +(DB/ +) + +암호화 시스템 +암호화 +등운영 화면 +(DB +/eDRM/KMS +) + +암호화 키 관리 및 권한 제어 이력 + +표준 암호화 알고리즘 적용 및 +연동 내역 +API + +암호화 적용 및 권한 점검 보고서 +데이터 분류 +6.4.1 +데이터 라벨링 및 태그 지정 + +데이터 분류 및 라벨링 관리 지침등급별 라벨링 기준 및 태깅 규칙 +( +) + +데이터 라벨링 및 태그 지정 현황 목록 + +라벨링 자동화 도구 +등운영 화면 +(eDRM/eDLP/DSPM +) + +데이터 등급별 보호 정책 설정 및 연동 내역 + +라벨링 적용 적정성 검토 및 점검 보고서 +데이터 손실 방지 +6.5.1 +데이터 손실 방지(DLP) + +데이터 유출 방지 +정책 및 지침 +(DLP) + +주요 정보 유출 경로별 통제 현황 목록 + +데이터 유출 방지 시스템 +등운영 화면 +(eDLP +) + +데이터 유출 탐지차단 및 소명조치 이력 +· +/ + +데이터 유출 사고 분석 및 대응 결과 보고서 +6.5.2 +데이터 모니터링 및 감지 + +데이터 모니터링 및 이상행위 탐지 절차 및 지침 + +통합 보안 모니터링 시스템 +등운영 화면 +(SIEM/UEBA +) + +데이터 이상행위 탐지 및 분석 이력 + +보안 위협 자동 대응 및 조치 내역 + +데이터 보안 모니터링 정기 결과 보고서 + +| 구분 | 기능 | 세부역량 | 증적 자료 | +| --- | --- | --- | --- | +| 데 이 터 | 6.1 데이터 목록 관리 | 6.1.1 데이터 카탈로그 위험 정렬 |  데이터 분류 및 위험 평가 지침  데이터 카탈로그 및 위험 등급 현황 목록  데이터 보안 형상 관리(DSPM) 시스템 운영 화면  데이터 위험 식별 및 자동 분류 이력  데이터 보안 위험 평가 및 조치 결과 보고서 | +| | | 6.1.2 기업 데이터 거버넌스 |  데이터 거버넌스 정책 및 관리 지침(데이터 관리 원칙 포함)  데이터 소유자 및 관리자 지정 내역(R&R 정의 문서)  데이터 거버넌스 관리 시스템eDRM/eDLP/(DSPM 등) 운영 화면  데이터 정책 준수 모니터링 및 위반 처리 이력  데이터 거버넌스 이행 점검 및 감사 보고서 | +| | 6.2 접근 결정방법 | 6.2.1 데이터 접근제어 |  데이터 접근제어 정책 및 지침  데이터 접근권한 관리대장  데이터 접근제어 시스템(DBAM/PAM 등) 운영 화면  접근권한 부여·변경·해지 이력  접근권한 검토 및 조치 결과 보고서 | +| | 6.3 데이터 암호화 | 6.3.1 데이터 암호화 및 권한 관리 |  데이터 암호화 및 키 관리 지침  암호화 대상 목록(DB/문서 관리대장)  암호화 시스템(DB암호화/eDRM/KMS 등) 운영 화면  암호화 키 관리 및 권한 제어 이력  표준 암호화 알고리즘 적용 및 API 연동 내역  암호화 적용 및 권한 점검 보고서 | +| | 6.4 데이터 분류 | 6.4.1 데이터 라벨링 및 태그 지정 |  데이터 분류 및 라벨링 관리 지침(등급별 라벨링 기준 및 태깅 규칙)  데이터 라벨링 및 태그 지정 현황 목록  라벨링 자동화 도구(eDRM/eDLP/DSPM 등) 운영 화면  데이터 등급별 보호 정책 설정 및 연동 내역  라벨링 적용 적정성 검토 및 점검 보고서 | +| | 6.5 데이터 손실 방지 | 6.5.1 데이터 손실 방지(DLP) |  데이터 유출 방지(DLP) 정책 및 지침  주요 정보 유출 경로별 통제 현황 목록  데이터 유출 방지 시스템(eDLP 등) 운영 화면  데이터 유출 탐지·차단 및 소명/조치 이력  데이터 유출 사고 분석 및 대응 결과 보고서 | +| | | 6.5.2 데이터 모니터링 및 감지 |  데이터 모니터링 및 이상행위 탐지 절차 및 지침  통합 보안 모니터링 시스템(SIEM/UEBA 등) 운영 화면  데이터 이상행위 탐지 및 분석 이력  보안 위협 자동 대응 및 조치 내역  데이터 보안 모니터링 정기 결과 보고서 | + + +구분 +세부역량 +증적 자료 +가 +시 +성 +및 +분 +석 +모든 관련 활동 기록 + +로그 및 이벤트 관리 지침수집 대상보존 기간무결성 확보 등 +( +, +, +) + +로그 수집 및 연동 현황 목록 +연동 여부 +(SIEM +) + +통합 로그 및 보안 관제 시스템 +등운영 화면 +(SIEM +) + +로그 무결성 검증 및 접근통제 이력 + +로그 분석 및 이상 징후 대응 보고서 +중앙집중적 보안 정보 및 이벤트 관리 + +보안 관제 및 사고 대응 지침 + +통합 보안 관제 시스템 +등운영 화면 +(SIEM +) + +보안 로그 연동 현황 및 상관 분석 규칙 +정의서 +(Rule) + +보안 위협 탐지 및 대응 이력 +연동 자동 대응 내용 포함 +(SOAR +) + +보안 관제 정기주간월간보고서 +( +/ +) +보안 위협 분석 + +보안 위협 및 취약점 관리 지침 + +보안 위협 분석 시스템빅데이터 +등운영 화면 +( +/UEBA/SIEM +) + +취약점 정보 수집 및 위험 평가 +내역 +(CVSS) + +위협 탐지 및 자동 경보 이력 + +보안 위협 분석 정기주간월간보고서 +( +/ +) +사용자 및 기기 동작 분석 + +사용자 이상행위 탐지 및 대응 관리 지침 + +사용자 및 기기 행위 분석 시스템 +등운영 화면 +(ZTNA/XDR/UEBA +) + +사용자 및 기기 이상행위 탐지 시나리오임계치 설정 내역 +/ + +비정상 행위 탐지 및 자동 조치 이력 + +이상행위 분석 및 대응 결과 보고서 +위협 인텔리전스 통합 + +위협 인텔리전스 관리 지침 + +위협 인텔리전스 연동 현황 및 구성도내외부 포함 +( +· +) + +위협 인텔리전스 플랫폼 +운영 화면 +(TIP) + +위협 정보 기반 탐지 및 정책 적용 이력 + +위협 분석 및 대응 결과 보고서 +자동화된 동적 정책 + +동적 보안 정책 관리 및 운영 지침 + +동적 정책 자동화 연동 구성도 및 흐름도시스템 간 연동 구조 및 +( +정책 반영 절차) + +보안 정책 자동화 시스템 운영 화면 + +보안 이벤트 기반 정책 자동 변경 이력 +자 +동 +화 +및 +통 +합 +정책통합 + +정보보호 정책지침절차서제개정 내역 포함 +· +· +( +· +) + +통합 정책 관리 시스템 +보안포털 등운영 화면 +(SIEM/SOAR/ +) + +보안 정책 변경 신청 및 승인 내역정책 변경 관리대장 +( +) + +정책 일괄 적용 및 동기화 이력정책 배포 자동화 로그 +( +) + +보안 정책 정합성 점검 및 조치 결과 보고서 +중요 프로세스 자동화 + +주요 프로세스 자동화 관리 지침절차서 +· + +자동화 시스템 +등운영 화면 +(RPA/SOAR +) + +데이터 백업 및 자동 복구 수행 내역 + +보안 이벤트 및 장애 자동 대응 로그 + +자동화 프로세스 운영 현황 및 결과 보고서 +인공지능 + +기반 보안 운영 및 자동화 관리 지침 +AI + +개별 보안 시스템 +등 +탐지 설정 내역 +(IAM/EDR/XDR/ZTNA +) AI +단위 솔루션의 +기능 적용 현황 +( +ML +) + +통합 분석 시스템 +등 +모델 운영 화면 +(UEBA/ICAM/SIEM/SOAR +) AI +중앙 집중식 학습 및 분석 현황 +( +) + +기반 위협 예측 및 자동 대응 이력 +AI + +보안 관제 및 운영 효율성 분석 보고서 +AI + +| 구분 | 세부역량 | 증적 자료 | +| --- | --- | --- | +| 가 시 성 및 분 석 | 7.1 모든 관련 활동 기록 |  로그 및 이벤트 관리 지침(수집 대상, 보존 기간, 무결성 확보 등)  로그 수집 및 연동 현황 목록(SIEM 연동 여부)  통합 로그 및 보안 관제 시스템(SIEM 등) 운영 화면  로그 무결성 검증 및 접근통제 이력  로그 분석 및 이상 징후 대응 보고서 | +| | 7.2 중앙집중적 보안 정보 및 이벤트 관리 |  보안 관제 및 사고 대응 지침  통합 보안 관제 시스템(SIEM 등) 운영 화면  보안 로그 연동 현황 및 상관 분석 규칙(Rule) 정의서  보안 위협 탐지 및 대응 이력(SOAR 연동 자동 대응 내용 포함)  보안 관제 정기(주간/월간) 보고서 | +| | 7.3 보안 위협 분석 |  보안 위협 및 취약점 관리 지침  보안 위협 분석 시스템(빅데이터/UEBA/SIEM 등) 운영 화면  취약점 정보 수집 및 위험 평가(CVSS) 내역  위협 탐지 및 자동 경보 이력  보안 위협 분석 정기(주간/월간) 보고서 | +| | 7.4 사용자 및 기기 동작 분석 |  사용자 이상행위 탐지 및 대응 관리 지침  사용자 및 기기 행위 분석 시스템(ZTNA/XDR/UEBA 등) 운영 화면  사용자 및 기기 이상행위 탐지 시나리오/임계치 설정 내역  비정상 행위 탐지 및 자동 조치 이력  이상행위 분석 및 대응 결과 보고서 | +| | 7.5 위협 인텔리전스 통합 |  위협 인텔리전스 관리 지침  위협 인텔리전스 연동 현황 및 구성도(내·외부 포함)  위협 인텔리전스 플랫폼(TIP) 운영 화면  위협 정보 기반 탐지 및 정책 적용 이력  위협 분석 및 대응 결과 보고서 | +| | 7.6 자동화된 동적 정책 |  동적 보안 정책 관리 및 운영 지침  동적 정책 자동화 연동 구성도 및 흐름도(시스템 간 연동 구조 및 정책 반영 절차)  보안 정책 자동화 시스템 운영 화면  보안 이벤트 기반 정책 자동 변경 이력 | +| 자 동 화 및 통 합 | 8.1 정책통합 |  정보보호 정책·지침·절차서(제·개정 내역 포함)  통합 정책 관리 시스템(SIEM/SOAR/보안포털 등) 운영 화면  보안 정책 변경 신청 및 승인 내역(정책 변경 관리대장)  정책 일괄 적용 및 동기화 이력(정책 배포 자동화 로그)  보안 정책 정합성 점검 및 조치 결과 보고서 | +| | 8.2 중요 프로세스 자동화 |  주요 프로세스 자동화 관리 지침·절차서  자동화 시스템(RPA/SOAR 등) 운영 화면  데이터 백업 및 자동 복구 수행 내역  보안 이벤트 및 장애 자동 대응 로그  자동화 프로세스 운영 현황 및 결과 보고서 | +| | 8.3 인공지능 |  AI 기반 보안 운영 및 자동화 관리 지침  개별 보안 시스템(IAM/EDR/XDR/ZTNA 등) AI 탐지 설정 내역 (단위 솔루션의 ML 기능 적용 현황)  통합 분석 시스템(UEBA/ICAM/SIEM/SOAR 등) AI 모델 운영 화면 (중앙 집중식 학습 및 분석 현황)  AI 기반 위협 예측 및 자동 대응 이력  AI 보안 관제 및 운영 효율성 분석 보고서 | + + +구분 +세부역량 +증적 자료 +자 +동 +화 +및 +통 +합 +보안 통합자동화 및 대응 +, + +보안 통합 및 자동화 대응 운영 지침 + +보안 시스템 연동 구성도 및 대응 흐름도 + +보안 오케스트레이션 +시스템 운영 화면 +(SOAR) + +보안 위협 자동 탐지 및 대응플레이북 실행이력 +( +) + +보안 사고 통합 대응 결과 보고서 +데이터 교환 표준화 + +데이터 교환 표준화 정책 및 지침 데이터 포맷 +연동 프로토콜 +( +, +표준정의 + +) + +데이터 연동 현황 및 구성도 + +데이터 교환 및 연계 시스템 +게이트웨이 등운영 화면 +(WAAP/API +) + +데이터 교환전송수신자동화 처리 로그 +( +/ +) + +데이터 정합성 검증 및 연동 오류 조치 내역 +보안 운영 조정 및 사고 대응 + +보안사고 대응 정책 및 표준운영절차(SOP) + +보안사고 대응 조직도 및 비상연락망 + +사고 대응 자동화 시스템 +운영 화면대시보드 +워크플로우 +(SOAR) +( +, +설정) + +보안사고 탐지 및 대응 조치 이력 자동화수동 조치 로그 +( +/ +) + +보안사고 분석 및 재발방지 대책 보고서 + +| 구분 | 세부역량 | 증적 자료 | +| --- | --- | --- | +| 자 동 화 및 통 합 | 8.4 보안 통합, 자동화 및 대응 |  보안 통합 및 자동화 대응 운영 지침  보안 시스템 연동 구성도 및 대응 흐름도  보안 오케스트레이션(SOAR) 시스템 운영 화면  보안 위협 자동 탐지 및 대응(플레이북 실행) 이력  보안 사고 통합 대응 결과 보고서 | +| | 8.5 데이터 교환 표준화 |  데이터 교환 표준화 정책 및 지침 (데이터 포맷, 연동 프로토콜 표준 정의)  데이터 연동 현황 및 구성도  데이터 교환 및 연계 시스템(WAAP/API 게이트웨이 등) 운영 화면  데이터 교환(전송/수신) 자동화 처리 로그  데이터 정합성 검증 및 연동 오류 조치 내역 | +| | 8.6 보안 운영 조정 및 사고 대응 |  보안사고 대응 정책 및 표준운영절차(SOP)  보안사고 대응 조직도 및 비상연락망  사고 대응 자동화 시스템(SOAR) 운영 화면(대시보드, 워크플로우 설정)  보안사고 탐지 및 대응 조치 이력 (자동화/수동 조치 로그)  보안사고 분석 및 재발방지 대책 보고서 | + + +용어 +정의 +기능 +(Function) + +어떤 일이나 목적요구사항을 달성하기 위해 필요한 능력 +, + +제로트러스트 성숙도 모델 +에서 정의하는 기능은 +기업망에서 제로트러스트 +, +아키텍처를구현하는 데 있어서 필요한 보안 능력을 의미 + +기업 데이터 거버넌스 +(Enterprise Data +Governance) + +조직 내 모든 데이터의 사용 +보호 +관리에 대한 규칙과 절차를 정의하고 +이를 +, +, +, +준수하는과정 + +네트워크 회복성 +(Network Resilience) + +네트워크가 다양한 위협이나 장애로부터 신속하게 복구하고지속적으로 가용성을 +, + +유지할 수 있도록 하는 능력 +데이터 카탈로그 +(Data Catalog) + +조직의 모든 데이터를 분류하고데이터가 식별 및 목록화되고 데이터 환경에 대한 +, + +모든 변경 사항이 자동으로 감지되어 카탈로그 내에 포함되는지 확인하는 것 +리소스 +(Resource) + +데이터를 포함하여 기업망 내부에서 보호 대상이 되는 모든 종류의 디지털 자산을 +의미하며데이터 외에도 프린터컴퓨팅 리소스 +액추에이터 등을 포함하기도 함 +, +, +, IoT +비인간개체 +(NPE,·Non-Person·Entity) + +기업망에서 사용자가 아닌 기기서버애플리케이션서비스 등으로 특정 리소스에 +, +, +, + +접근하는 접근 주체 역할을 수행 할 수 있으며이 경우 신원 확인 및 권한 검증 +, +, +신뢰도확인 등이 이루어져야 함 + +사용자 인벤토리 +(User Inventory) + +시스템에 접근하는 모든 사용자와 그들의 권한을 기록하고 관리하는 시스템 +세부역량 +(Capability) + +일련의 작업을 수행하기 위한 수단과 방법의 조합을 통해 원하는 요구사항 혹은 +효과를 달성할 수 있는 능력 및 이를 바탕으로 구현되는 구체적 기능 +워크로드 +(Workload) + +기업망에서 시스템 +애플리케이션 등이 처리해야 하는 작업 혹은 일련의 작업 +, +리스트등을 의미하며 +제로트러스트 관점에서는 온프레미스 혹은 클라우드에 + +, +위치한리소스에 접근하는 모든 서비스애플리케이션 및 솔루션 등을 포괄 + +, +위협 인텔리전스 통합 +(Threat Intelligence +Integration) + +외부의 보안 위협 정보를 수집하고 이를 조직 내 보안 시스템에 적용하여 위협 +대응 능력을 향상 시키는 기능 +접근 +(Access) + +접근 주체가 리소스를 이용하는 과정으로단순히 데이터를 읽는 것 뿐만 아니라 +, +, +수정삭제 및 데이터 이외의 디지털 자산에 데이터를 전송하거나 전송받는 등의 +, +행위를 포함 +접근 주체 +(Subject) + +사용자와 애플리케이션혹은 서비스 +기기의 조합이며 +여기에 악의적인 공격자 +( +), +, +혹은 불법적인 애플리케이션감염된 기기 등이 포함될 수 있음 +, +정책결정지점 +(PDP, Policy Decision +Point) + +접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하여 이를 정책시행지점 +에게 +(PEP) +명령하는 논리적 개체로정책 엔진 +과 정책 관리자 +로 구성 + +, +(PE) +(PA) +용어 정의 +3. + +| 용어 | 정의 | +| --- | --- | +| 기능 (Function) |  어떤 일이나 목적, 요구사항을 달성하기 위해 필요한 능력  제로트러스트 성숙도 모델 2.0에서 정의하는 기능은, 기업망에서 제로트러스트 아키텍처를 구현하는 데 있어서 필요한 보안 능력을 의미 | +| 기업 데이터 거버넌스 (Enterprise Data Governance) |  조직 내 모든 데이터의 사용, 보호, 관리에 대한 규칙과 절차를 정의하고, 이를 준수하는 과정 | +| 네트워크 회복성 (Network Resilience) |  네트워크가 다양한 위협이나 장애로부터 신속하게 복구하고, 지속적으로 가용성을 유지할 수 있도록 하는 능력 | +| 데이터 카탈로그 (Data Catalog) |  조직의 모든 데이터를 분류하고, 데이터가 식별 및 목록화되고 데이터 환경에 대한 모든 변경 사항이 자동으로 감지되어 카탈로그 내에 포함되는지 확인하는 것 | +| 리소스 (Resource) |  데이터를 포함하여 기업망 내부에서 보호 대상이 되는 모든 종류의 디지털 자산을 의미하며, 데이터 외에도 프린터, 컴퓨팅 리소스, IoT 액추에이터 등을 포함하기도 함 | +| 비인간개체 (NPE,·Non-Person·Entity) |  기업망에서 사용자가 아닌 기기, 서버, 애플리케이션, 서비스 등으로 특정 리소스에 접근하는 접근 주체 역할을 수행 할 수 있으며, 이 경우 신원 확인 및 권한 검증, 신뢰도 확인 등이 이루어져야 함 | +| 사용자 인벤토리 (User Inventory) |  시스템에 접근하는 모든 사용자와 그들의 권한을 기록하고 관리하는 시스템 | +| 세부역량 (Capability) |  일련의 작업을 수행하기 위한 수단과 방법의 조합을 통해 원하는 요구사항 혹은 효과를 달성할 수 있는 능력 및 이를 바탕으로 구현되는 구체적 기능 | +| 워크로드 (Workload) |  기업망에서 시스템, 애플리케이션 등이 처리해야 하는 작업 혹은 일련의 작업 리스트 등을 의미하며, 제로트러스트 관점에서는 온프레미스 혹은 클라우드에 위치한 리소스에 접근하는 모든 서비스, 애플리케이션 및 솔루션 등을 포괄 | +| 위협 인텔리전스 통합 (Threat Intelligence Integration) |  외부의 보안 위협 정보를 수집하고 이를 조직 내 보안 시스템에 적용하여 위협 대응 능력을 향상 시키는 기능 | +| 접근 (Access) |  접근 주체가 리소스를 이용하는 과정으로, 단순히 데이터를 읽는 것 뿐만 아니라, 수정, 삭제 및 데이터 이외의 디지털 자산에 데이터를 전송하거나 전송받는 등의 행위를 포함 | +| 접근 주체 (Subject) |  사용자와 애플리케이션(혹은 서비스), 기기의 조합이며, 여기에 악의적인 공격자 혹은 불법적인 애플리케이션, 감염된 기기 등이 포함될 수 있음 | +| 정책결정지점 (PDP, Policy Decision Point) |  접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하여 이를 정책시행지점 (PEP)에게 명령하는 논리적 개체로, 정책 엔진(PE)과 정책 관리자(PA)로 구성 | + + +출처 +제로트러스트 가이드라인 +: KISA, +정책 관리자 +(PA, Policy +Administrator) + +접근 주체와 리소스 사이의 통신 경로를 생성하거나 취소하기 위한 결정을 정책 +시행지점 +에게 전달하는 논리 개체 +(PEP) +정책 엔진 +(PE, Policy Engine) + +접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하는 논리적 개체로, +정책정보 지점 +으로부터 신뢰도를 평가할 수 있는 알고리즘에 대한 입력을 +(PIP) +수신하여, 현재 리소스 접근 요청을 승인하거나 거부 혹은 현재 연결 중인 상태의 + + +접근을 취소할 수 있음 +정책시행지점 +(PEP, Policy Enforcement +Point) + +접근 주체와 리소스 사이를 연결하고 모니터링하며 최종적으로 연결을 종료하는 +논리적 개체로 +의 정책 관리자에게 접근 요청을 전달하고 접근 승인 여부를 +, PDP +전달받아 현재 접근 세션에 직접 반영 +정책정보지점 +(PIP, Policy Information +Point) + +정책결정지점이 정책 결정을 내리는 데 활용하기 위해서 수집한 사용자기기 관련 +, + +정보 및 기타 정책 관련 정보를 제공하는 논리적 개체로이러한 정보에는 기업이 +, + +생성하거나 제어하지 않는 외부 데이터와 기업 내부적으로 생성되는 내부 데이터로 +분류할 수 있으며 규제내부규정데이터 접근 정책보안 이벤트위협 인텔리전스 +· +, +, +, +, +사용자 및 기기 인증 정보네트워크 및 시스템상의 행위 로그 등을 포함할 수 있음 +, +제로트러스트 +(Zero Trust) + +위협이 언제 어디서든 발생 가능하다는 인식하에 기업 내부의 네트워크 +시스템 +, +혹은 리소스에 접근하고자 하는 어떤 사용자기기에 대해서도 지속 인증 +세밀한 +· +, +접근제어를 통한 최소 권한 부여 등 적극적인 신뢰도 평가 없이 접근을 허용하지 +않는 보안 모델 및 이를 구현실체화하기 위한 아이디어의 집합을 의미 +· + +영어 원문을 발음대로 쓴 표현으로 두 단어의 결합인 점을 고려하면 제로트러스트 +‘ +’ +라고표현할 수 있으나이 문구가 제로무와 트러스트신뢰의 단순 단어 결합이 + +, +‘ +( +)’ +‘ +( +)’ + +아닌 새로운 보안 모델로서의 의미를 담고 있음을 고려하고 독자들이 해당 의미를 +받아들이는 데 도움이 될 수 있도록 본 가이드라인에서는 두 단어를 붙인 형태의 +새로운 단어로 표현하고 있음 +제로트러스트 아키텍처 +(Zero Trust Architecture) + +제로트러스트의 개념을 활용하여 기업 내부의 네트워크 +시스템 및 리소스를 +, +보호할수 있는 추상적인 보안 구조이며 해당 목적을 달성하기 위한 기업망의 구성 + + +요소구성 요소 간 인터페이스 정의와 인증접근제어보안 모니터링 및 가시화 +, +, +, +등 보안 정책을 포함 +컨텍스트 +(Context) + +특정 접근 주체가 리소스에 접근할 때 접근제어 및 신뢰도 평가에 있어 활용될 +수 있는 모든 상황 정보를 의미하며이러한 정보에는 사용자의 신원기기 상태 +, +, +및 위치사용자의 실행 애플리케이션접속 시간접근하고자 하는 리소스네트 +, +, +, +, +워크 상태 등을 포함할 수 있음 + +제로트러스트 성숙도 수준이 높아질 경우 가급적 많은 컨텍스트 정보를 실시간으로 +확보하여 현재 접근 요청에 대해 동적으로 신뢰도를 판단하기 위해 사용함 +퀵윈 +(Quick-win) + +짧은 시간 안에 가시적인 성과를 낼 수 있는 과제를 찾아 실행하는 전략 + +단기적인 성공을 통해 조직 구성원의 사기를 높이고장기적인 혁신을 위한 동력을 +, + +얻는 데 목적이 있음 +프로비저닝 +(Provisioning) + +기업망에서 사용자 +기기 등이 서비스를 받기 위해 필요한 리소스 및 이에 대한 +, +접근권한정책 등을 사전에 준비하고 배포하는 절차 및 과정을 의미 +, + +| 정책 관리자 (PA, Policy Administrator) |  접근 주체와 리소스 사이의 통신 경로를 생성하거나 취소하기 위한 결정을 정책 시행지점(PEP)에게 전달하는 논리 개체 | +| --- | --- | +| 정책 엔진 (PE, Policy Engine) |  접근 주체가 리소스에 접근할 수 있는지를 최종적으로 결정하는 논리적 개체로, 정책정보 지점(PIP)으로부터 신뢰도를 평가할 수 있는 알고리즘에 대한 입력을 수신하여, 현재 리소스 접근 요청을 승인하거나 거부 혹은 현재 연결 중인 상태의 접근을 취소할 수 있음 | +| 정책시행지점 (PEP, Policy Enforcement Point) |  접근 주체와 리소스 사이를 연결하고 모니터링하며 최종적으로 연결을 종료하는 논리적 개체로, PDP의 정책 관리자에게 접근 요청을 전달하고 접근 승인 여부를 전달받아 현재 접근 세션에 직접 반영 | +| 정책정보지점 (PIP, Policy Information Point) |  정책결정지점이 정책 결정을 내리는 데 활용하기 위해서 수집한 사용자, 기기 관련 정보 및 기타 정책 관련 정보를 제공하는 논리적 개체로, 이러한 정보에는 기업이 생성하거나 제어하지 않는 외부 데이터와 기업 내부적으로 생성되는 내부 데이터로 분류할 수 있으며 규제·내부규정, 데이터 접근 정책, 보안 이벤트, 위협 인텔리전스, 사용자 및 기기 인증 정보, 네트워크 및 시스템상의 행위 로그 등을 포함할 수 있음 | +| 제로트러스트 (Zero Trust) |  위협이 언제 어디서든 발생 가능하다는 인식하에 기업 내부의 네트워크, 시스템 혹은 리소스에 접근하고자 하는 어떤 사용자·기기에 대해서도 지속 인증, 세밀한 접근제어를 통한 최소 권한 부여 등 적극적인 신뢰도 평가 없이 접근을 허용하지 않는 보안 모델 및 이를 구현·실체화하기 위한 아이디어의 집합을 의미  영어 원문을 발음대로 쓴 표현으로 두 단어의 결합인 점을 고려하면 ‘제로트러스트’ 라고 표현할 수 있으나, 이 문구가 ‘제로(무)’와 ‘트러스트(신뢰)’의 단순 단어 결합이 아닌 새로운 보안 모델로서의 의미를 담고 있음을 고려하고 독자들이 해당 의미를 받아들이는 데 도움이 될 수 있도록 본 가이드라인에서는 두 단어를 붙인 형태의 새로운 단어로 표현하고 있음 | +| 제로트러스트 아키텍처 (Zero Trust Architecture) |  제로트러스트의 개념을 활용하여 기업 내부의 네트워크, 시스템 및 리소스를 보호할 수 있는 추상적인 보안 구조이며 해당 목적을 달성하기 위한 기업망의 구성 요소, 구성 요소 간 인터페이스 정의와 인증, 접근제어, 보안 모니터링 및 가시화 등 보안 정책을 포함 | +| 컨텍스트 (Context) |  특정 접근 주체가 리소스에 접근할 때 접근제어 및 신뢰도 평가에 있어 활용될 수 있는 모든 상황 정보를 의미하며, 이러한 정보에는 사용자의 신원, 기기 상태 및 위치, 사용자의 실행 애플리케이션, 접속 시간, 접근하고자 하는 리소스, 네트 워크 상태 등을 포함할 수 있음  제로트러스트 성숙도 수준이 높아질 경우 가급적 많은 컨텍스트 정보를 실시간으로 확보하여 현재 접근 요청에 대해 동적으로 신뢰도를 판단하기 위해 사용함 | +| 퀵윈 (Quick-win) |  짧은 시간 안에 가시적인 성과를 낼 수 있는 과제를 찾아 실행하는 전략  단기적인 성공을 통해 조직 구성원의 사기를 높이고, 장기적인 혁신을 위한 동력을 얻는 데 목적이 있음 | +| 프로비저닝 (Provisioning) |  기업망에서 사용자, 기기 등이 서비스를 받기 위해 필요한 리소스 및 이에 대한 접근권한, 정책 등을 사전에 준비하고 배포하는 절차 및 과정을 의미 | + + + +ABAC +Attribute-Based Access Control + +ACL +Access Control List + +AD +Active Directory + +AI +Artificial Intelligence + +AP +Access Point + +AV +Anti-Virus + +BCP +Business Continuity Plan + +BGP +Border Gateway Protocol + +BYOD +Bring Your Own Device + +C&C +Command & Control + +CVE +Common Vulnerabilities and Exposures + +DLP +Data Loss Prevention + +DR +Disaster Recovery + +DRM +Digital Rights Management + +eDLP +Enterprise Data Loss Prevention + +eDRM +Enterprise Digital Rights Management + +ECDHE +Elliptic Curve Diffie-Hellman Ephemeral + +EDR +Endpoint Detection & Response + +EPP +Endpoint Protection Platform + +ERP +Enterprise Resource Planning + +FIDO +Fast IDentity Online + +FIM +File Integrity Monitoring + +GPO +Group Policy Object + +HRM +Human Resource Management + +HTTPS +Hyper Text Transfer Protocol Secure +약어 정의 +4. + + +IAM +Identity and Access Management + +IAST +Interactive Application Security Testing + +ICAM +Identity, Credential and Access Management + +IDP +Identity Provider + +IDS +Intrusion Detection System + +ILM +Identity Lifecycle Management + +IoT +Internet of Things + +IOA +Indicator of Attack + +IOC +Indicator of Compromise + +IPS +Intrusion Protection System + +ITAM +IT Asset Management + +JIT/JEA +Just-In Time/Just-Enough Access + +KMS +Key Management System + +LACP +Link Aggregation Control Protocol + +LEEF +Log Event Extended Format + +MAC +Message Authentication code + +MAM +Mobile Application Management + +MDM +Mobile Device Management + +MDR +Managed Detection and Response + +MFA +Multi-Factor Authentication + +ML +Machine Learning + +MTTR +Mean Time To Respond + +NAC +Network Access Control + +NGFW +Next-Generation Firewall + +NMS +Network Management System + +NSA +National Security Agency + +NSG +Network Security Group + +OAuth +Open Authorization + + +OIDC +OpenID Connect + +OSINT +Open-Source Intelligence + +OSPF +Open Shortest Path First + +OT +Operation Technology + +OTP +One Time Password + +OWASP +Open Web Application Security Project + +PAM +Privileged Access Management + +PHI +Protected Health Information + +PII +Personally Identifiable Information + +PKI +Public Key Infrastructure + +PMS +Patch Management System + +PQC +Post-Quantum Cryptography + +QENC +Quantum-Communication Encrypted Device + +QKD +Quantum Key Distribution + +QoS +Quality of Service + +RBAC +Role-Based Access Control + +RIP +Routing Information Protocol + +ROI +Return on Investment + +RPA +Robotic Process Automation + +SaaS +Software as a Service + +SAML +Security Assertion Markup Language + +SBOM +Software Bill of Materials + +SDLC +Software Development LifeCycle + +SDN +Software Defined Networking + +SDP +Software Defined Perimeter + +SIEM +Security Information and Event Management + +SOAR +Security Orchestration, Automation and Response + +SOC +Security Operation Center + + +SSH +Secure Shell + +SSL +Secure Sockets Layer + +SSO +Single Sign On + +STP +Spanning Tree Protocol + +TI +Threat Intelligence + +TLS +Transport Layer Security + +UEBA +User and Entity Behavioral Analytics + +UEM +Unified Endpoint Management + +VDI +Virtual Desktop Infrastructure + +VM +Virtual Machine + +VPC +Virtual Private Cloud + +VPN +Virtual Private Network + +WAPP +Web Application & API Protection + +WORM +Write Once Read Many + +XDR +eXtended Detection & Response + +XML +eXtensible Markup Language + +ZTNA +Zero Trust Network Access + + +투이컨설팅 정관복 이사 + +투이컨설팅 김도형 이사 + +투이컨설팅 김병민 컨설턴트 + +투이컨설팅 이봉학 컨설턴트 + +쉴더스 +SK +이봉준 수석 + +쉴더스 +SK +황병권 책임 + +쉴더스 +SK +김혜지 선임 + +가천대학교 이석준 교수 + +강남대학교 박정수 교수 + +국민대학교 김환국 교수 + +국가보안기술연구소 이택규 책임 + +에스지에이솔루션즈 +최영철 대표 +㈜ + +프라이빗테크놀로지 +김주태 전무 +㈜ + +당근마켓 이원규 팀장 +㈜ + +공항철도 +안동원 팀장 +㈜ + +한국정보보호산업협회 +정호준 단장 +(KISIA) + +한국인터넷진흥원 +하병욱 팀장 +(KISA) + +한국인터넷진흥원 +최슬기 선임연구원 +(KISA) +집필진 +연구반 + +제장 +성숙도 모델 해설서의 목적 및 구성 +1. +실제 컨설팅 사례 기반 성숙도 수준 평가 절차 +2. +성숙 수준에 따른 기술 및 증적 자료 +3. \ No newline at end of file diff --git "a/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\204\261\354\210\231\353\217\204_\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234.pdf" "b/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\204\261\354\210\231\353\217\204_\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234.pdf" new file mode 100644 index 0000000..cdb0011 Binary files /dev/null and "b/\353\254\270\354\204\234/\354\240\234\353\241\234\355\212\270\353\237\254\354\212\244\355\212\270_\354\204\261\354\210\231\353\217\204_\353\252\250\353\215\270_\355\225\264\354\204\244\354\204\234.pdf" differ diff --git "a/\353\254\270\354\204\234/\354\243\274\354\232\224\354\240\225\353\263\264\355\206\265\354\213\240\352\270\260\353\260\230\354\213\234\354\204\244_\352\264\200\353\246\254\353\254\274\353\246\254\354\240\201_\354\267\250\354\225\275\354\240\220_\352\260\200\354\235\264\353\223\234.md" "b/\353\254\270\354\204\234/\354\243\274\354\232\224\354\240\225\353\263\264\355\206\265\354\213\240\352\270\260\353\260\230\354\213\234\354\204\244_\352\264\200\353\246\254\353\254\274\353\246\254\354\240\201_\354\267\250\354\225\275\354\240\220_\352\260\200\354\235\264\353\223\234.md" new file mode 100644 index 0000000..10eb3c1 --- /dev/null +++ "b/\353\254\270\354\204\234/\354\243\274\354\232\224\354\240\225\353\263\264\355\206\265\354\213\240\352\270\260\353\260\230\354\213\234\354\204\244_\352\264\200\353\246\254\353\254\274\353\246\254\354\240\201_\354\267\250\354\225\275\354\240\220_\352\260\200\354\235\264\353\223\234.md" @@ -0,0 +1,13024 @@ +# 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서.pdf + +> Converted: 2026-03-27 19:20 + + +--- + +2026 +주요정보통신기반시설 +관리·물리적 취약점 분석·평가방법 +안내서 + + +![이미지 1-0](images/p0001_img0.png) + + +--- + + +Ÿ 본 안내서는 관리·물리적 취약점 분석·평가 항목별 점검 방법의 이해를 돕기 위해 발간된 것으로, 수록된 내용은 +취약점 분석:평가 수행 중 활용할 수 있는 참조의 대상일 뿐, 절대적이지 않습니다. 따라서 본 안내서에 수록된 내용 +이외에도 다양한 점검 방법을 사용하여 취약점 분석·평가를 수행하시기 바랍니다. +Ÿ 본 점검항목은 각 기반시설 현업에 적용되고 있는 다양한 정책 및 운용 상황을 고려하여 취약점 분석·평가 수행자가 +최종적으로 결정하여야 합니다. 예를 들어 본 안내서에 수록된 내용에 의하여 취약 판단을 받게 되어도 그 위험을 +부담할 수 있는 합당한 보안조치와 근거를 수반하고 있다면 양호로 판단할 수 있습니다. +Ÿ 본 안내서를 교육기관 등에서 교육 자료로 활용하는 것을 권장하지 않습니다. 또한 수록된 참고 자료, 서식 등의 +내용은 모든 관리기관이 동일하게 적용하여야 하는 것이 아니므로 반드시 참고 용도로 활용하시기 바랍니다. +Ÿ 개선 사항(점검 항목별 세부 설명, 고려사항, 관계법규, 확인대상 등)에 대한 의견을 향상 소중히 듣겠습니다. +※ E-mail : ciip@kisa.or.kr +(한국인터넷진흥원) + + +--- + +I. 개요···································································································································6 + +## 1. 개요··········································································································································································7 + + +## 2. 목적 및 구성······························································································································································7 + + +## 3. 점검 요령···································································································································································8 + + +## 4. 활용 시 고려사항························································································································································8 + +II. 관리적 분야 기본 항목········································································································9 + +## 1. 정보보호 정책··························································································································································17 + + +## 2. 정보보호 조직··························································································································································29 + + +## 3. 자산분류··································································································································································33 + + +## 4. 위험관리··································································································································································41 + + +## 5. 감사········································································································································································47 + + +## 6. 인적보안··································································································································································51 + + +## 7. 외부자보안······························································································································································59 + + +## 8. 교육 및 훈련····························································································································································73 + + +## 9. 인증 및 권한관리······················································································································································83 + + +## 10. 접근통제································································································································································91 + + +## 11. 운영관리······························································································································································116 + + +## 12. 보안관리······························································································································································164 + + +## 13. 사고대응······························································································································································191 + + +## 14. 업무 연속성·························································································································································207 + +III. 물리적 분야 기본 항목···································································································215 + +## 1. 물리보안································································································································································217 + +IV. 부록1. 참고 자료··········································································································243 +<참고 제1호> 정보보호 정책 목차 (예시) ·······················································································································244 +<참고 제2호> 정보보호 정책 타당성 검토 체크리스트 (예시) ···························································································245 +CONTENTS + + +![이미지 3-0](images/p0003_img0.png) + + +--- + +<참고 제3호> 정보보호 예산 기준································································································································246 +<참고 제4호> 외부용역업체 보안관리 준수사항 (예시) ···································································································249 +<참고 제5호> 사업자 보안위규 처리기준 (예시) ·············································································································251 +<참고 제6호> 사업자 보안위약금 부과 기준 (예시) ·········································································································253 +<참고 제7호> 자산의 보안등급 분류 기준 (예시) ············································································································254 +<참고 제8호> 정보시스템 저장매체ㆍ자료별 삭제방법 (예시) ·························································································255 +<참고 제9호> 무선랜 보안관리 절차서 (예시) ················································································································256 +<참고 제10호> 무선AP 점검항목 (예시) ·······················································································································257 +<참고 제11호> 정보보안 점검항목 (예시) ······················································································································258 +<참고 제12호> 정보보호시스템 도입 요건 (공공기관 사전인증 제품 도입 시) ···································································260 +<참고 제13호> DDoS 공격 유형 및 대응 방안··············································································································261 +<참고 제14호> 집적정보통신시설 보호조치 세부기준·····································································································264 +<참고 제15호> 인터넷 전화망과 전산망의 분리 지침······································································································268 +V. 부록2. 서식 예시···········································································································270 +<서식 제1호> 연간 정보보호 업무 계획·························································································································273 +<서식 제2호> 연간 정보보호 업무 심사분석··················································································································274 +<서식 제3호> 표준 개인정보처리 위탁계약서················································································································275 +<서식 제4호> 정보시스템 반입, 반출 신청서·················································································································278 +<서식 제5호> 정보보호 교육 참가자 명단······················································································································279 +<서식 제6호> 단말기 사용 신청서································································································································280 +<서식 제7호> 무선랜 설치 신청서································································································································281 +<서식 제8호> 무선랜 설치 확인서································································································································282 +<서식 제9호> 무선랜 사용 신청서································································································································283 +<서식 제10호> 무선랜 AP 관리대장·····························································································································284 +<서식 제11호> 무선랜 AP 사용관리대장······················································································································285 +<서식 제12호> 시스템 조사표······································································································································286 +<서식 제13호> 정보보호시스템 도입 시 확인사항··········································································································287 +<서식 제14호> 네트워크 장비 도입 시 보안요구사항······································································································288 +<서식 제15호> 정보보호시스템 도입 시 보안요구사항···································································································290 +<서식 제16호> 시스템 운영 전 보안요구사항················································································································293 +<서식 제17호> 비밀관리기록부····································································································································295 +<서식 제18호> 정보통신 침해사고 신고서·····················································································································296 + + +--- + +<서식 제19호> 정보통신 침해사고 결과서·····················································································································297 +<서식 제20호> 보호구역 관리대장·······························································································································298 +<서식 제21호> 제한구역⦁통제구역 출입자 명부···········································································································299 +<서식 제22호> 정보보호위원회 회의록·························································································································300 +<서식 제23호> 정보보호위원회 의견서·························································································································302 +<서식 제24호> 직무기술서··········································································································································303 +<서식 제25호> 퇴직자 권한회수 및 서약 집행···············································································································304 +<서식 제26호> 퇴직자 보안 서약서······························································································································305 +<서식 제27호> 수탁자 대상, 보안 점검표······················································································································306 +<서식 제28호> 중요정보 파기 확인서···························································································································307 +<서식 제29호> 외부자 보안서약서·······························································································································308 +<서식 제30호> 자산목록표··········································································································································309 +<서식 제31호> 휴대용 저장매체(전산장비 포함) 반출⦁입 대장······················································································310 +<서식 제32호> 휴대용 저장매체 관리대장 (일반용) ········································································································311 +<서식 제33호> 휴대용 저장매체 관리대장 (비밀용) ········································································································312 +<서식 제34호> 휴대용 저장매체 점검대장·····················································································································313 +<서식 제35호> 보안교육 설문지 (Excel) ······················································································································314 +<서식 제36호> 보안교육 설문분석도구 (Excel) ·············································································································316 +<서식 제37호> 정보보호시스템 접근규칙 검토 결과서···································································································317 +<서식 제38호> 침입차단시스템 서비스포트 허용/차단 요청서························································································318 +<서식 제39호> 계정등록(변경⦁삭제)신청서·················································································································319 +<서식 제40호> 네트워크 변경내용 신청서·····················································································································320 +<서식 제41호> 정보시스템 접근기록 검토결과서···········································································································322 +<서식 제42호> 암호화키 관리대장(대외비) ····················································································································323 +<서식 제43호> 암호화키 복구대장(대외비) ····················································································································324 +Ⅵ. 부록3. 법규 및 가이드 예시···························································································325 +1, 법규 및 지침··························································································································································326 + +## 2. 가이드 및 매뉴얼····················································································································································331 + + + +--- + + +## 1. 개요····························································································································7 + + +## 2. 목적 및 구성················································································································7 + + +## 3. 점검 요령····················································································································8 + + +## 4. 활용 시 고려사항··········································································································8 + +개요 +Chapter 01 +6 +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 + + +![이미지 6-0](images/p0006_img0.png) + + +--- + +7 +01 +개요 +「정보통신기반 보호법」 제9조에 따라, 주요정보통신기반시설 관리기관은 매년 취약점 분석ㆍ평가를 실시하여야 +하며 관리적·물리적 항목의 경우 136개의 항목을 점검한다. +한편 취약점 분석ㆍ평가를 수행함에 있어 관리 및 물리적 점검은 정보보호 정책/지침/절차/서식 등의 문서 +점검과 관련자 대상 인터뷰는 물론 시스템, 설비, 보호구역 등에 대한 현장 실사 등의 복합적인 점검요령과 다양한 +지식이 요구되기 때문에 주요정보통신기반시설 담당자들의 어려움이 따르게 된다. +이러한 관리 및 물리적 점검에 대한 어려움을 해소하고 주요정보통신기반시설 담당자들의 이해를 돕기 위해, +전체 135개 관리 및 물리적 점검항목에 대한 해설, 관계 법규 및 확인대상 등을 포함하는 안내서를 개발하게 +되었다. +특히 각각의 점검항목 별 소관 주요정보통신기반시설에 적용이 요구되는 관계 법규 및 관련 준수사항 제시를 +통하여 각 산업 영역별 특화된 보호조치 원칙을 손쉽게 확인할 수 있도록 하였고, 조치를 위해 요구되는 참고 자료, +업무서식 등을 부록에 포함시켜 관리기관의 업무환경에 따른 관리체계 수립에 도움이 될 수 있기를 기대한다. +정보통신기반보호법 제9조(취약점의 분석ㆍ평가) ① 관리기관의 장은 대통령령이 정하는 바에 따라 정기적으로 소관 +주요정보통신기반시설의 취약점을 분석·평가하여야 한다. +② 중앙행정기관의 장은 다음 각 호의 어느 하나에 해당하는 경우 해당 관리기관의 장에게 주요정보통신기반시설의 +취약점을 분석ㆍ평가하도록 명령할 수 있다. + +## 1. 새로운 형태의 전자적 침해행위로부터 주요정보통신기반시설을 보호하기 위하여 필요한 경우 + + +## 2. 주요정보통신기반시설에 중대한 변화가 발생하여 별도의 취약점 분석ㆍ평가가 필요한 경우 + +02 +목적 및 구성 +목적 : 주요정보통신기반시설 담당자의 기반시설 보호 역량강화를 위한 관리·물리 안내서 제공 +대상 : 주요정보통신기반시설 담당자 +범위 : 주요정보통신기반시설 관리 및 물리적 취약점 분석‧평가 +구성: 관리 및 물리적 점검 기준(136개 항목)의 관련조직, 세부 설명, 고려 사항, 관계 법규, 확인 대상(예시), +참고자료, 부록(참고 자료, 참고 서식, 법규·가이드 목록) +활용 : 주요정보통신기반시설 관리 및 물리적 취약점 보안조치 시 활용 + + +![이미지 7-0](images/p0007_img0.png) + + +--- + +| 한국인터넷진흥원 | +8 +03 +점검 요령 +점검을 위해 조직, 문서, 실사 등 점검 대상에 대한 종합적인 검토를 수행하여 점검 항목과의 부합 여부를 +판단하고, 점검 항목에 명확히 부합하는 경우 “양호”, 일부 만족하고 개선이 필요한 요소가 존재할 경우 “부분 +이행”, 점검 항목에 부합하지 못한 경우 “취약”으로 판단한다. +04 +활용 시 고려사항 +본 안내서는 주요정보통신기반시설의 관리 및 물리적 보안을 관리기관 스스로 점검하고 예산, 인력 및 관계 +법규에 따른 적절한 보안대책을 수립할 수 있도록 하는데 목적이 있다. +따라서 안내서에서 제시하는 참고 자료, 서식 등의 내용은 반드시 모든 관리기관이 동일하게 적용하여야 하는 +것이 아니며, 관계 법규에 따라서는 더 높은 보안 수준을 요구할 수 있기 때문에 반드시 참고서 용도로 활용하기를 +당부한다. + + +![이미지 8-0](images/p0008_img0.png) + + +![이미지 8-1](images/p0008_img1.png) + + +--- + + +## 1. 정보보호 정책············································································································17 + + +## 2. 정보보호 조직············································································································29 + + +## 3. 자산분류···················································································································33 + + +## 4. 위험관리···················································································································41 + + +## 5. 감사··························································································································47 + + +## 6. 인적보안···················································································································51 + + +## 7. 외부자보안················································································································59 + + +## 8. 교육 및 훈련··············································································································73 + + +## 9. 인증 및 권한관리·······································································································83 + + +## 10. 접근통제·················································································································91 + + +## 11. 운영관리···············································································································116 + + +## 12. 보안관리···············································································································164 + + +## 13. 사고대응···············································································································191 + + +## 14. 업무 연속성···········································································································207 + +관리적 분야 기본 항목 +Chapter 02 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 + + +![이미지 9-0](images/p0009_img0.png) + + +--- + +| 한국인터넷진흥원 | +10 +l 정보보호정책 +번호 +취약점 점검 항목 +A-1 +조직 전반에 적용하고 있는 정보보호 정책/지침 수립 및 경영진의 승인 획득 +A-2 +정보보호 정책의 시행을 위해 필요한 방법, 절차, 주기 등을 정의하고 문서화 +A-3 +정보보호 정책 및 시행문서를 모든 임직원 및 관련자에게 접근하기 쉬운 형태로 제공 +A-4 +정보보호 정책 및 시행문서에 대한 타당성을 주기적으로 또는 중대한 변화 발생 시 검토·평가하여 수정 및 보완 +A-5 +정보보호 정책 및 시행문서의 제·개정 시 이해관계자의 검토를 받고 해당 내용 반영 +A-6 +연도별 정보보호 업무 세부추진 계획을 수립·이행 +A-7 +기관의 정보보호 강화를 위한 중장기(3년 이상) 계획 수립·이행 +l 정보보호조직 +번호 +취약점 점검 항목 +A-8 +정보보호 활동을 계획, 실행, 검토하는 전담 조직 및 담당자 구성 +A-9 +정보보호위원회가 구성되어 있으며 위원회의 역할 및 책임을 문서화 +l 자산분류 +번호 +취약점 점검 항목 +A-10 +주요정보통신기반시설 내 모든 자산(인력, 시설, 장비 등)을 식별하여 자산분류기준을 수립하고 문서화 +A-11 +정보자산을 보안등급과 중요도 등에 따라 분류하여 관리 +A-12 +조직의 주요 자산 목록을 작성하고, 정기적인 자산 현황 조사 결과 및 변경 사항(취득, 폐기, 양도 등) 등을 +자산 목록에 반영하여 변경이력을 최신으로 유지 관리 +A-13 +자산의 등급에 따른 취급절차(생성·도입, 저장, 이용, 파기) 및 보호대책을 수립·이행 +A-14 +정보자산별로 관리자 및 관리 책임자가 지정되어 있으며, 목록을 최신으로 유지·관리 +l 위험관리 +번호 +취약점 점검 항목 +A-15 +주요정보통신기반시설의 서비스 현황을 식별하고 업무 절차와 흐름을 파악하여 문서화 + + +![이미지 10-0](images/p0010_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +11 +l 감사 +번호 +취약점 점검 항목 +A-18 +법적 요구사항의 준수여부를 연 1회 이상 정기적 검토 +A-19 +주기적으로 정보보호 감사 계획 수립·이행 +A-20 +감사결과를 경영진에게 보고하여 적정한 사후관리를 시행 +l 인적보안 +번호 +취약점 점검 항목 +A-21 +정보보호 관련 직무자의 책임과 역할을 명확히 정의하여 문서화 +A-22 +기반시설 업무 담당자 지정 시 신원, 업무능력, 교육정도, 경력 등에 대한 적격심사 수행 +A-23 +기반시설 업무 담당자 지정 시 보안 서약서나 비밀유지 확약서 작성 +A-24 +기반시설 업무 담당자 지정 해제 시 별도의 비밀유지 확약서 작성 +A-25 +기반시설 업무 담당자 지정 해제 시 지체 없는 정보자산 반납, 접근권한 회수·조정, 결과 확인 등의 절차 수립·이행 +A-26 +기반시설 업무 관련자가 정보보호 정책을 위반할 경우 이에 대한 징계와 관련된 사항을 규정에 명시 +l 외부자보안 +번호 +취약점 점검 항목 +A-16 +연 1회 이상 정기적으로 위험 평가 수행 +A-17 +위험평가에 따른 연간 보호대책 이행계획 수립 및 경영진 보고 +번호 +취약점 점검 항목 +A-27 +외부 서비스 이용 및 업무 위탁에 따른 신규 외부자에 대한 보안 서약서 작성 +A-28 +기반시설 범위 내에서 발생하고 있는 외부 서비스 이용 및 업무 위탁 현황을 식별 및 관리 +A-29 +외부 서비스 이용 및 업무 위탁에 따른 정보보호 요구사항을 식별하고 이를 계약서 또는 협정서에 명시 +A-30 +유지보수 등을 위한 외부자 임시 방문 시 정보 및 자산 접근에 대한 보안 규정 사전 고지 +A-31 +외부자가 계약서, 협정서, 내부정책에 명시된 정보보호 요구사항을 준수하고 있는지 주기적으로 점검 또는 감사를 수행 +A-32 +외부자의 보안 관련 사항 위반이나 침해사고 발생 시, 이에 따른 조치 수행 +A-33 +외부자의 계약만료, 업무 종료, 담당자 변경 시 자산 반납, 접근권한 삭제 및 비밀유지 확약서 작성 등이 + + +![이미지 11-0](images/p0011_img0.png) + + +--- + +| 한국인터넷진흥원 | +12 +l 교육 및 훈련 +l 인증 및 권한관리 +번호 +취약점 점검 항목 +A-39 +담당 업무에 따라 시스템에 접근할 수 있는 사용자 계정 및 접근권한 부여 방법과 범위 등을 정의 및 이행 +A-40 +내·외부에서 시스템 접근 시 안전한 인증 방법 및 절차를 마련하고 이에 따라 이행 +A-41 +시스템에 대한 안전한 사용자 비밀번호 관리 절차 및 작성 규칙 수립·이행 +A-42 +시스템에 대한 사용자 계정 및 접근권한의 적정성 검토 기준, 검토 주체, 검토 방법, 주기 등을 수립하여 이행 +l 접근통제 +번호 +취약점 점검 항목 +A-34 +정보보호 인식제고를 위한 교육 및 훈련 계획을 종합적으로 수립하여 정기적으로 실시 +A-35 +전체 임직원 및 외부자에 대하여 정보보호 교육 및 훈련 수행 +A-36 +교육 및 훈련은 대상자의 직위 및 업무 특성에 따라 차등화하여 실시 +A-37 +교육 및 훈련의 효과가 측정·분석되어 차기 교육 및 훈련에 반영 +A-38 +유관기관에서 공유한 보안공지·권고문 등에 대한 내용을 임직원 및 외부자에게 공유하고 조치요령을 안내 +번호 +취약점 점검 항목 +A-43 +네트워크 접근통제 유지를 위해 접근권한 통제, 원격접속 관리, 네트워크 분리 등의 내용을 포함한 네트워크 +운영 보안 정책을 수립·이행 +A-44 +시스템의 목적 및 민감도 등에 따라 네트워크를 분리 운영하고 각 영역 간 접근통제를 적용 +A-45 +접근통제 규칙은 관리자의 승인을 거쳐서 설정 또는 변경 +A-46 +접근통제 정책의 적합성 여부에 대해 주기적 검토 +A-47 +방화벽, 침입탐지시스템 구축 등 안전한 네트워크를 위한 대책을 마련 +A-48 +외부 네트워크를 통한 원격작업(재택근무, 장애대응 등)에 대한 책임자 승인, 작업내용 및 범위, 기간 설정, +접근 로그 기록/검토 등이 포함된 정책(절차) 수립·이행 +A-49 +네트워크를 통해 시스템을 운영하는 경우 원칙적으로 시스템 관리는 내부의 특정 단말기에서만 할 수 있도록 제한 +번호 +취약점 점검 항목 +이루어질 수 있도록 보안대책 수립·이행 + + +![이미지 12-0](images/p0012_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +13 +l 운영관리 +번호 +취약점 점검 항목 +A-50 +외부에서 내부 시스템 접속 시 VPN 등 안전한 접속 수단 적용 +A-51 +내부망(업무망)과 인터넷망을 분리하여 운용 +A-52 +망분리 후 안전한 자료전송을 위한 시스템을 도입하여 사용 +A-53 +인터넷 전화망과 일반 전산망은 분리하여 운용 +A-54 +내부에 상주하는 외부자에 대하여 네트워크를 분리하여 운영 +A-55 +무선네트워크 사용 시 상급기관장의 보안성 검토를 필하거나 안전한 암호화 알고리즘 및 암호키 설정 등의 +적절한 보안조치를 적용 +A-56 +인가된 임직원만이 인가된 단말을 이용하여 무선네트워크를 사용할 수 있도록 사용 신청 및 해지 절차를 수립·이행 +A-57 +무선네트워크 무단 사용 여부, 비인가 무선 중계기(AP) 설치 여부, 우회 정보통신망 사용 차단 여부 등을 +주기적으로 점검 +번호 +취약점 점검 항목 +A-58 +자산 및 시스템을 신규 도입·개발 또는 변경하는 경우 법, 규제, 계약상의 요구사항을 정의하여 문서화 +A-59 +자산 및 시스템을 신규 도입·개발 또는 변경하는 경우 보안성 검토 및 호환성 검토 수행하고 보안책임자는 +이를 확인 및 승인 +A-60 +시스템의 변경관리 절차 수립·이행 +A-61 +정보보호시스템은 국내용 CC인증을 받았거나, 보안적합성 검증 수행 +A-62 +제품 및 서비스에서 계약 등으로 협의된 사항 이외 이상행위가 발생하는지 모니터링 +A-63 +개발 및 테스트 설비는 실제 운영 설비와 분리하여 운영 +A-64 +개발자와 운영자의 접근 권한 분리 +A-65 +업무용 시스템(ERP, 그룹웨어 등)의 소스코드 접근권한을 차등 부여하고 별도 저장장치에 보관 +A-66 +업무용 시스템(ERP, 그룹웨어 등)의 소스코드 변경 시 보안약점 분석도구를 통해 취약점 점검 +A-67 +주요 시스템 및 정보보호제품의 변경을 위한 공식적인 절차 수립·이행 +A-68 +유지보수 작업 전 공식적인 작업 신청 및 수행절차를 수립·이행하고 작업 기록을 주기적으로 검토 +A-69 +장애탐지, 장애기록, 장애분석, 장애복구, 장애보고 등의 사항을 포함하는 시스템의 장애관리 지침 문서화 +A-70 +백업 대상, 주기, 방법, 보관 장소, 보관기간, 소산 등을 포함한 백업 절차 수립·이행 +A-71 +백업된 정보의 완전성과 정확성, 복구절차의 적절성을 확인하기 위하여 정기적으로 복구 테스트 수행 +A-72 +전자기록 보관을 위한 별도의 방법(아카이빙)을 마련하고, 이를 통해 관리 + + +![이미지 13-0](images/p0013_img0.png) + + +--- + +| 한국인터넷진흥원 | +14 +l 보안관리 +번호 +취약점 점검 항목 +A-73 +시스템 및 정보보호시스템에 대한 접근기록(로그 등)을 생성·보관하고, 이에 대한 비인가 열람, 훼손 등을 +방지하기 위한 보호대책 운영 +A-74 +시스템과 네트워크의 오류, 오·남용(비인가접속, 과다조회 등), 부정행위 등 이상징후를 인지할 수 있도록 +로그 검토 주기, 대상, 방법 등을 포함한 로그 검토 및 모니터링 절차 수립·이행 +A-75 +로그 및 모니터링 결과를 월 1회 이상 책임자에게 보고 +A-76 +정보나 매체가 용도 폐기되기 위한 폐기 방법 수립·이행 +A-77 +보안규정의 이행여부를 확인하는 주기적인 보안점검 및 불시 보안점검 수행 +A-78 +비밀(대외비 포함)을 비밀관리기록부 등에 등재하여 관리 +A-79 +출력된 비밀문서의 경우 잠금장치가 있는 캐비넷 등에 안전하게 보관 +A-80 +비밀 등 중요정보의 안전한 처리를 위한 보호대책을 마련하거나 시스템을 도입하여 사용 +A-81 +정보통신망 세부 구성현황(IP 정보 등)등을 비공개 이상으로 관리 +A-82 +중요 데이터와 일반 데이터를 다른 서버에 분리 보관 +A-83 +홈페이지 게시 자료에 대해 게시 절차를 마련하고 시행 +A-84 +개인정보 및 주요정보의 보호를 위하여 법적 요구사항을 반영한 암호화 대상, 암호강도, 암호사용, 암호키 +관리 등이 포함된 암호정책 수립·이행 +A-85 +암호키를 복구하기 위한 복구 절차를 수립하고 복구 내역 검토 +번호 +취약점 점검 항목 +A-86 +침입차단 및 탐지 도구는 조직의 보안 정책과 규칙에 적합하게 설치하여 운영 +A-87 +외부자와 정보 공유, 네트워크 공유 등에 따른 보안위협에 대한 대책 운영 +A-88 +정보통신망에 비인가 PC, 노트북 등을 연결 시 차단 및 차단 이력 주기적 검토 +A-89 +이동형 장치(노트북, 태블릿, 보조저장매체 등)의 사용 및 반출입에 대한 통제절차 수립·이행 +A-90 +이동형 장치(노트북, 태블릿, 보조저장매체 등)의 반출입 시 통제 절차에 따른 기록 유지 관리하고 절차 +준수여부를 확인할수 있도록 반출입 이력을 주기적으로 점검 +A-91 +스마트폰·개인휴대단말기(태블릿)·전자제어장비 등 정보통신기기를 활용하는 경우, 업무자료 등 중요정보 +보호 및 안전한 전송을 위한 방안 마련 +A-92 +보조저장매체의 사용을 주기적으로 점검하고 운영 현황을 최신화 +A-93 +노트북, 보조저장매체 등 이동형 장치의 분실을 통한 자료 유출 대비책 마련 + + +![이미지 14-0](images/p0014_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +15 +l 사고대응 +번호 +취약점 점검 항목 +A-104 +침해사고 및 개인정보 유출사고를 예방하고 사고 발생 시 신속하고 효과적으로 대응하기 위한 체계와 절차 수립 +A-105 +침해사고 발생 시 신속한 보안사고 보고를 위한 절차를 문서화하고 있고 이에 따라 신속한 보고 수행 +A-106 +침해사고 시 외부기관 및 전문가들과의 대응협조체계 구축 +A-107 +사이버위기 ‘주의’ 이상 경보 발령 및 피해발생 등 필요 시 대응할 수 있는 ‘긴급대응반’을 구성 +A-108 +부정접근 사례나 보안사고 내역을 지속적으로 모니터링 +A-109 +침해사고 발생에 대비한 대응절차 및 방법 숙지를 위한 주기적인 교육·훈련 실시 +A-110 +보안사고 유형, 범위, 영향 등을 포함한 보안사고 분석 결과를 기록 및 관리 +A-111 +보안 취약점 및 사고 발생 시 이에 대한 보완작업 절차 마련 +A-112 +사이버침해사고 발생 후 재발방지 대책 수립·이행 +A-113 +침해사고 처리, 계약증빙 및 소송 등을 위한 적정한 증거자료 확보에 관한 지침 수립·이행 +번호 +취약점 점검 항목 +A-94 +서버, 네트워크시스템, 보안시스템, PC 등 자산별 특성 및 중요도에 따라 운영체제(OS)와 소프트웨어의 +패치관리 정책 및 절차 수립·이행 +A-95 +서버, 네트워크시스템, 보안시스템, PC 등의 운영체제, 소프트웨어 등이 개발사로부터 보안 지원이 되지 않을 +경우 해당 제품을 교체하거나 보안대책 마련 +A-96 +바이러스 등 악성프로그램을 대비한 보안프로그램의 설치·운영 등 보호대책 운영 +A-97 +‘사이버보안진단의 날’ 등과 같이 월별 보안 중점점검사항에 대해 매월 보안점검 및 조치활동 수행 +A-98 +네트워크, 메신저 등으로부터의 허가되지 않았거나 불분명한 파일의 다운로드를 금지하고, 부득이하게 +다운로드 받을 경우 바이러스 검사 수행 +A-99 +스팸 메일 수신을 줄이기 위한 방안(스팸차단 솔루션)을 마련 +A-100 +개인정보의 유출 등을 방지하기 위해 접근 권한의 관리, 접근통제, 암호화, 접속기록의 보관 및 점검 등 +개인정보의 안전성 확보에 필요한 조치 이행 +A-101 +서비스 거부(DDoS) 공격 방지를 위한 대응방안(그린DDoSZone 등) 수립 및 운영 +A-102 +주요정보통기반시설과 직·간접적으로 연계된 시스템을 대상으로 모의해킹 수행 및 보안대책 마련 +A-103 +시스템 및 사용 장비에 대한 보안 취약점에 대한 주기적 검토 및 보완 프로세스 운영 + + +![이미지 15-0](images/p0015_img0.png) + + +--- + +| 한국인터넷진흥원 | +16 +l 업무연속성 +번호 +취약점 점검 항목 +A-114 +기반시설의 서비스(업무) 연속성을 위협할 수 있는 IT 재해 유형을 식별하고 유형별 피해규모 및 업무에 +미치는 영향을 분석하여 핵심 IT 서비스(업무) 및 시스템을 식별 +A-115 +핵심 IT서비스(업무) 및 시스템의 특성에 따른 복구 목표시간, 복구 목표시점을 정의 +A-116 +재해 및 재난 발생 시에도 기반시설 서비스 및 시스템의 연속성을 보장할 수 있도록 복구 전략 및 대책, 비상시 +복구 조직, 비상연락체계, 복구 절차 등 재해 복구 계획 수립·이행 +A-117 +보안중요성이 높은 등급의 시스템들은 이중화하여 관리 +A-118 +모의 훈련 등을 통해 업무 연속성을 지속적으로 검토 및 관리하고, 조직 내의 변경이 있을 경우 이에 대한 사항을 반영 + + +![이미지 16-0](images/p0016_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +17 +01 +정보보호 정책 +A-1 +관리적 분야 > 1. 정보보호 정책 +조직 전반에 적용하고 있는 정보보호 정책/지침 수립 및 경영진의 승인 획득 +관련 조직 +정보보호 부서 +세부 설명 +§ 기관 자체의 최상위 정보보호 정책을 수립하여 조직이 수행하는 정보보호 활동의 근거와 기준을 명확하게 제시할 수 +있도록 하여야 한다. +§ 정보보호에 대한 경영진의 방향, 역할 및 책임, 정책의 대상과 범위, 활동의 근거 등 조직 전반에 적용하고 있는 +정보보호 활동과 관련된 핵심 사항이 모두 포함할 수 있도록 하여야 한다. +§ 최상위 정보보호 정책에 대한 승인은 최고경영자(기관장)가 공식적으로 승인하여야 하며, 이를 통해 경영진의 +의지를 조직 전체에 명확히 전달할 수 있어야 한다. +고려 사항 +§ 최상위 정보보호 정책은 관련 법률 및 상급 기관의 정책을 준수할 수 있도록 그 내용을 구성하되, 관리기관 내 +사업 특성, 조직 구성 등의 환경을 고려해 각 기관의 특성에 맞도록 구체적인 내용을 수립하여야 한다. +§ 최상위 정책 하위의 시행 지침 및 세부 절차는 정보보호책임자의 승인을 받을 수 있지만, 최상위 정책은 +최고경영자(기관장)의 공식적인 승인을 받아야 하며, 그 기록을 명확하게 관리해야 한다. +§ 최상위 정보보호 정책 하위에 특정 대상(예: 조직, 사업, 시스템 등)에 따른 세부 업무 지침 또는 절차를 +추가적으로 수립하여야 한다. + + +![이미지 17-0](images/p0017_img0.png) + + +![이미지 17-1](images/p0017_img1.png) + + +--- + +| 한국인터넷진흥원 | +18 +[그림1] 정보보호 정책 문서 및 시행문서 구성(예시) +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립ㆍ시행 및 점검) +공공기관 +국가 정보보안 기본지침 제4조(책무), 제5조(정보보안담당관 운영, 제7조(정보보안 내규) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산)) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.1.5 정책 수립 +확인 대상(예시) +☐기관 자체의 최상위 정보보호 정책 문서 +☐최고경영자(기관장)의 승인을 확인할 수 있는 내부 결재문 또는 서명본 +☐(참고 자료 제1호) 정보보호 정책 목차 (예시) + + +![이미지 18-0](images/p0018_img0.png) + + +![이미지 18-1](images/p0018_img1.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +19 +A-2 +관리적 분야 > 1. 정보보호 정책 +정보보호 정책의 시행을 위해 필요한 방법, 절차, 주기 등을 정의하고 문서화 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 정보보호 정책을 구체적으로 시행하기 위해 세부적인 방법, 절차, 주기 등이 포함된 시행문서(지침, 절차, +가이드라인, 매뉴얼 등)를 수립하여 문서화해야 한다. +§ 시행문서는 정보보호 정책에서 수립한 규정을 실제로 수행하기 위한 문서이므로 해당 문서를 기반으로 +정보보호 활동을 원활하게 수행할 수 있도록 구체적으로 작성되어야 한다. +§ 문서화된 정책 및 시행문서는 제·개정 내역에 대한 승인절차와 개정이력 관리가 지속적으로 이루어져야 하며 +관련 법규의 개정 등에 따라 정보보호 정책 및 시행문서의 변경이 필요한 경우 법적 요구사항을 반영하여 +개정하여야 한다. +고려 사항 +§ 조직의 특성에 맞게 수립된 시행문서는 정보보호 활동의 근거를 구체적으로 제시할 수 있어야 하며, 정책 및 +시행문서에 포함된 내용은 일관성이 있어야 한다. +§ 지침, 절차, 가이드라인, 매뉴얼 등은 조직이 수행하는 모든 정보보호 활동의 구체적인 근거를 명확히 +제시하여야 하며 보호 대상이나 수행 주체 등 다양한 관점을 고려하여 조직의 특성에 맞게 수립되어야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립ㆍ시행 및 점검) +공공기관 +국가 정보보안 기본지침 제4조(책무), 제6조(연도 추진계획 수립), 제7조(정보보안내규) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.1.5 정책 수립 +확인 대상(예시) +☐정보시스템 운영에 관한 지침 또는 절차(문서) +☐정보시스템 운영에 관한 지침 또는 절차의 제·개정 승인 이력 + + +![이미지 19-0](images/p0019_img0.png) + + +--- + +| 한국인터넷진흥원 | +20 +A-3 +관리적 분야 > 1. 정보보호 정책 +정보보호 정책 및 시행문서를 모든 임직원 및 관련자에게 접근하기 쉬운 형태로 제공 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보보호 정책 및 시행문서는 확인하기 쉬운 형태(예: 사내게시판 공지, 전자우편, 책자 등)로 배포하여 모든 +임직원 및 관련자가 최신본을 인지할 수 있도록 하여야 한다. +§ 정보보호 정책 및 시행문서 제·개정 시 최신본은 임직원 및 관련자가 손쉽게 접근할 수 있는 형태로 +전달되어야 하고, 제·개정 사실을 모든 임직원 및 관련자들이 알 수 있도록 공지하여야 한다. +고려 사항 +§ 정보보호 정책 및 시행문서는 제‧개정사항이 발생하면 즉시 공표하고 최신본을 유지하여야 한다. +§ 정보보호 정책 및 시행문서는 내용에 따라 대외비 이상의 보안등급 분류가 이루어질 수 있으나, 정책 적용의 +대상들이 정보보호 원칙을 이해하고 준수할 수 있도록 널리 배포되어야 한다. +§ 정보보호 정책 및 시행문서의 공개 방법은 그룹웨어 공지, 이메일, 사내 게시물, 인쇄본 교부 등 다양할 수 +있으며 모든 임직원 및 관련자가 확인하기 쉬운 방법으로 선정하여 공개한다. +[그림2] 정보보호 정책 및 지침 개정 안내(메일)(예시) + + +![이미지 20-0](images/p0020_img0.png) + + +![이미지 20-1](images/p0020_img1.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +21 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립ㆍ시행 및 점검) +공공기관 +국가 정보보안 기본지침 제4조(책무), 제7조(정보보안내규) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.1.5 정책 수립 +확인 대상(예시) +☐기관 자체의 최상위 정보보호 정책 및 시행문서 최신본 +☐정보보호 정책 및 시행문서가 공개된 방법(또는 위치) +☐정책 및 시행문서 제·개정 공지 이력 + + +![이미지 21-0](images/p0021_img0.png) + + +--- + +| 한국인터넷진흥원 | +22 +A-4 +관리적 분야 > 1. 정보보호 정책 +정보보호 정책 및 시행문서에 대한 타당성을 주기적으로 또는 중대한 변화 발생 시 검토·평가하여 수정 +및 보완 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보보호 정책 및 시행문서에 대한 공식적인 타당성 검토 절차를 수립하고 연 1회 이상 정기적으로 수행하여 +필요 시 수정 및 보완될 수 있도록 하여야 한다. +§ 정기적 검토 이외에 내부적(예: 조직, 물리, ICT 환경변화) 또는 외부적(예: 법규 변화) 변화가 발생하는 경우 +그에 맞추어 조직의 역할을 변경하거나 법규제에 따른 정보보호 관련 요건의 변경을 반영하여 정책 및 +시행문서를 개정하여야 한다. +고려 사항 +§ 대·내외 환경에 중대한 변화 발생 시 정보보호 정책 및 시행 문서에 미치는 영향을 검토하고 필요 시 변경된 +법규를 준수할 수 있도록 제·개정하여야 한다. +※ 대·내외 환경 변화 예시 +- 정보보호 관련 법규 제·개정 +- 비즈니스 환경의 변화(신규 서비스 도입, 조직개편 등) +- IT 환경의 중대한 변화(신규 시스템 도입 등) +- 내·외부의 보안사고 발생 +- 새로운 위협 또는 취약성 발견 +- 보안점검 및 내부감사 결과 반영 등 +§ 정보보호 정책의 개정이 적시에 이루어지지 않으면 부적절한 내부 보안통제가 적용되거나 변경된 법규제를 +만족하지 못할 우려가 있으므로 최소 연 1회 이상 정기적으로 타당성 검토를 수행하여야 한다. +§ 정보보호 이행점검, 내부감사 등과 같은 보안활동을 수행할 때 정책 및 시행문서 개정의 필요성을 검토하여야 한다. +§ 타당성 검토는 검토를 수행하는 인원에 따라 평가 수준이 다를 수 있으므로 별도의 체크리스트 등을 통해 +반드시 검토가 필요한 기준을 명확하게 설정하는 것이 효과적이다. + + +![이미지 22-0](images/p0022_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +23 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립ㆍ시행 및 점검) +공공기관 +국가 정보보안 기본지침 제7조(정보보안내규) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.1 정책의 유지관리 +확인 대상(예시) +☐연 1회 이상의 정보보호 정책 및 시행문서 타당성 검토 결과 (예: 개정 의견 문건) +☐타당성 검토 결과에 따른 제·개정 이력(예: 개정 의견 및 개정 승인 문건) +☐(참고 자료 제2호) 정보보호 정책 타당성 검토 체크리스트 (예시) + + +![이미지 23-0](images/p0023_img0.png) + + +--- + +| 한국인터넷진흥원 | +24 +A-5 +관리적 분야 > 1. 정보보호 정책 +정보보호 정책 및 시행문서의 제·개정 시 이해관계자의 검토를 받고 해당 내용 반영 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보보호 정책 및 시행문서를 제·개정하는 경우 이해관계자의 검토를 통해 업무에 끼치는 영향, 법적 준거성 +등을 고려하여 타당성을 검토하여야 한다. +§ 이해관계자란 정보보호 정책 및 시행문서의 직접적인 영향을 받는 조직 및 담당자, 관련 분야 전문성을 보유한 +조직 및 담당자 등을 의미한다. +고려 사항 +§ 이해관계자에는 정보보호 및 개인정보보호 인력, IT 부서 인력, 현업부서 실무 책임자 등이 있을 수 있으며, +필요시 정보보호 관련 전문기관 또는 전문업체 등 외부 전문가 집단을 포함할 수 있다. 정보보호 정책 및 +시행문서의 제·개정 시 이들로부터 자문, 협의, 점검 등을 받아 해당 내용을 반영할 수 있다. +§ 전문가 집단 및 내부 이해관계자와의 협의를 통해 정보보호 정책 및 시행문서를 제·개정하는 경우 변경으로 +인한 업무 영향도 및 법적 준거성 등을 검토하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제7조(주요정보통신기반시설의 보호지원) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립ㆍ시행 및 점검) +공공기관 +국가 정보보안 기본지침 제7조(정보보안내규) +금융회사 +전자금융감독규정 제8조의2(정보보호위원회 운영) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.1 정책의 유지관리 +확인 대상(예시) +☐전문가 집단 및 이해관계자로부터의 자문, 협의, 점검 등의 이력(예: 검토 회의록, 계약서, 협의서, 공문 등) +☐자문, 협의, 점검 결과를 내부 보고하고 개선 조치가 이루어진 이력(예: 결과서, 개선 조치 결과서 등) + + +![이미지 24-0](images/p0024_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +25 +A-6 +관리적 분야 > 1. 정보보호 정책 +연도별 정보보호 업무 세부추진 계획을 수립·이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보보호 업무는 관리, 물리, 기술 분야에 대해 통합적인 관리가 이루어져야 하므로 연도별 정보보호 및 +개인정보보호 업무 세부추진 계획을 수립하고 추진결과에 대한 분석· 평가를 수행하여야 한다. +§ 당해 연도의 정보보호 계획의 시행 여부를 검토하고 이행하지 못한 계획이 있다면 미이행 사유 등에 대한 +분석·평가를 통해 문제점을 지속적으로 관리 및 개선하여야 한다. +고려 사항 +§ 해당 연도의 정보보호 및 개인정보보호 업무를 효과적으로 수행하기 위해 지속적인 관리가 요구되며, 이를 +위해 연도별 정보보호 및 개인정보보호 업무 세부추진 계획을 수립하고 경영진에 보고하는 등 계획에 따른 +정보보호 활동과 관리가 이루어져야 한다. +§ 개인정보보호 업무 세부추진 계획은 정보보호 업무 세부추진 계획에 포함하여 수립할 수 있다. +§ 세부추진 계획에 따른 추진결과를 분석 및 평가하여 경영진에게 보고하고 문제점이 발견된 경우 개선대책을 +수립하여 이행하여야 한다. +§ 관계 법규에서 요구하는 내용이 계획과 심사분석에 반영되도록 하고, 특히 금융회사는 정보보호 예산을 +수립할 때 관계 법규에서 요구하는 예산원칙을 고려하여야 한다. +§ 공공기관 정보보호 예산은 정보화 예산 대비 15% 이상을 운영할 수 있도록 노력하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제6조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립ㆍ시행 및 점검) +공공기관 +국가 정보보안 기본지침 제6조(연도 추진계획 수립) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조의2(정보보호위원회 운영), 제36조의2(정보기술부문 계획서 제출 절차 등) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.1.6 자원 할당 + + +![이미지 25-0](images/p0025_img0.png) + + +--- + +| 한국인터넷진흥원 | +26 +확인대상(예시) +☐당해 연도(또는 차년도) 정보보호 업무 계획서 +☐전년도(또는 당해 연도) 정보보호 업무 계획에 대한 시행결과 검토서 +☐(참고 자료 제3호) 정보보호 예산 기준 +☐(서식 예시 제1호) 연간 정보보호 업무 계획 +☐(서식 예시 제2호) 연간 정보보호 업무 심사분석 + + +![이미지 26-0](images/p0026_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +27 +A-7 +관리적 분야 > 1. 정보보호 정책 +기관의 정보보호 강화를 위한 중장기(3년 이상) 계획 수립·이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 기관의 정보보호는 일회성 또는 단기간에 이루어질 수 없는 부분도 존재하기 때문에 단계적이고 지속적인 +정보보호 대책, 즉 중장기 정보보호 대책(정보보호 마스터플랜)을 수립하여야 한다. +§ 정보보호 마스터플랜은 식별된 위험에 따른 보호대책을 확인할 수 있는 증적 자료가 될 수 있으며 식별된 +위험에 대한 처리전략(위험감소, 위험회피 등)을 수립하고 전략에 따른 적절한 중장기 계획을 수립·이행하여 +거시적인 시각에서 정보보호 수준을 꾸준히 향상하여야 한다. +§ 정보보호 마스터플랜을 수립하는 과정에서 다양한 정보보호 대책이 도출되는 경우 각 대책을 언제 적용하고 +예산은 어느 정도 소요될 것인가에 대한 세부사항도 함께 수립하여야 한다. +고려 사항 +§ 정보보호 마스터플랜을 수립하는 방법 중 하나는 선진 사례, 정보보호 표준을 정보보호 목표로 정하고 +해당하는 목표와의 차이(Gap)를 분석하여 그 차이를 줄이기 위한 정보보호 대책을 선정하는 방법이 있다. +§ 정보보호 대책 선정 시 위험의 심각성 및 예산 할당, 구현 용이성 등을 고려하여 일정, 담당 부서 및 담당자, +예산 등의 항목을 지정해 상세 계획을 수립하여야 한다. +§ 수립된 정보보호 마스터플랜은 정보보호책임자 및 개인정보 보호책임자 등 경영진에 보고하여야 한다. +§ 정보보호 현황분석을 토대로 도출한 수행과제에 대해 이행방안, 소요기간, 수행 주체, (필요 시) 예산 등을 +포함하는 개별 세부계획을 수립하여 향후 정보보호 활동을 체계적으로 수행할 수 있도록 하여야 한다. +§ 아래는 국내 정보보호제도 중 정보보호 및 개인정보보호 관리체계(ISMS-P)의 인증기준을 만족하기 위한 +정보보호 목표를 정하고 해당하는 정보보호 수준을 달성하기 위한 3개년 계획을 수립하는 예시이다. + + +![이미지 27-0](images/p0027_img0.png) + + +--- + +| 한국인터넷진흥원 | +28 +[그림3] 정보보호 마스터플랜 수립에 따른 추진목표, 과제, 고려사항(예시) +[그림4] 정보보호 마스터플랜 수립에 따른 세부 이행과제(예시) +관계 법규 +공통 +정보통신기반 보호법 제6조(주요정보통신기반시설보호계획의 수립 등) +개인정보보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립ㆍ시행 및 점검) +공공기관 +국가 정보보안 기본지침 제6조(연도 추진계획 수립) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제8조의2(정보보호위원회 운영) +전자금융감독규정 제36조의2(정보기술부문 계획서 제출 절차 등) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.1.6 자원 할당, 1.2.4 보호대책 서정 +확인 대상(예시) +☐정보보호 마스터플랜 문서 +☐(참고 자료 제3호) 정보보호 예산 기준 + + +![이미지 28-0](images/p0028_img0.png) + + +![이미지 28-1](images/p0028_img1.png) + + +![이미지 28-2](images/p0028_img2.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +29 +02 +정보보호 조직 +A-8 +관리적 분야 > 2. 정보보호 조직 +정보보호 활동을 계획, 실행, 검토하는 전담 조직 및 담당자 구성 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보통신기반 보호법에 따라 주요정보통신기반시설 관리기관은 해당 주요정보통신기반시설의 보호를 +총괄하는 정보보호책임자를 지정하여야 한다. +§ 정보보호책임자는 공공분야의 경우 4급·4급 상당 공무원, 5급, 5급 상당 공무원, 국방분야의 경우 영관급 장교, +민간분야의 경우 임원급 관리·운영자 등 주요정보통신기반시설 보호 활동을 효과적으로 추진하기 위해 이를 +총괄하여 최종 의사결정을 할 수 있는 관리책임자로 지정한다. +§ 정보보호책임자는 주요정보통신기반시설 보호대책의 수립·시행, 기술적 지원의 요청, 취약점 분석·평가 및 +전담반 구성, 주요정보통신기반시설 보호지침 준수 명령의 이행, 침해사고의 통지, 주요정보통신기반시설의 +복구 및 보호에 필요한 조치 등 법령에 명시된 업무와 주요정보통신기반시설 보호 업무 전반을 총괄한다. +§ 금융회사 및 정보통신서비스제공자의 경우 전자금융거래법, 정보통신망법 상의 정보보호 최고책임자 지정요 +건에 따라 정보보호책임자를 지정할 수 있다. +§ 정보보호책임자의 역할 지원 및 조직의 정보보호 활동을 효율적이고 체계적으로 이행하기 위해 정보보호 +전문지식을 보유한 적정인력을 확보하여 정보보호 전담조직을 구성·운영하여야 한다. +§ 정보보호 전담조직의 규모는 법적 요건이 존재하는 경우 해당 법적 기준에 따라야 하며 명확한 규정이 +존재하지 않을 경우 전사 조직의 규모, 업무 등을 고려하여 구성하여야 한다. +고려 사항 +§ 정보보호 전담조직은 정보보호 분야에 대한 이해도가 높거나 다양한 경험으로 전문성을 갖춘 인력으로 +구성하여 운영하여야 한다. +§ 정보보호 전담조직의 보안 업무는 타업무와 직무분리 등을 통해 독립성을 보장하여야 한다. +§ 공공기관 정보보호 전담인력은 정보화 인력 대비 10% 이상 운영할 수 있도록 노력하여야 한다. +§ 정보보호책임자와 정보보호 전담조직 및 담당자는 공식화되어야 하므로 인사발령 등의 절차를 통해 +공식적으로 지정되어야 하고, 전체 조직도 상에서 정보보호 실무를 담당할 부서를 식별하여야 한다. + + +![이미지 29-0](images/p0029_img0.png) + + +![이미지 29-1](images/p0029_img1.png) + + +--- + +| 한국인터넷진흥원 | +30 +§ 공공분야의 경우 정보보호책임자를 정보보안담당관으로 지정하여 겸임할 수 있다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +정보통신기반 보호법 시행령 제9조(정보보호책임자의 지정 등) +개인정보 보호법 제29조(안전조치의무), 제31조(개인정보 보호책임자의 지정 등) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제5조(정보보안담당관 운영) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융거래법 제21조의2(정보보호최고책임자 지정) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조의3(정보보호 최고책임자의 지정 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.1.2 최고책임자의 지정, 1.1.3 +조직 구성 +확인 대상(예시) +☐정보보호 조직 구성도 +☐정보보호책임자 지정 문서(예: 임명장, 승인문서) +☐정보보호 전담조직(정보보호 담당자 포함) 지정 문건(예: 인사발령, 조직도) +☐정보보호 직무기술서 +☐(서식 예시 제24호) 직무기술서 + + +![이미지 30-0](images/p0030_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +31 +A-9 +관리적 분야 > 2. 정보보호 조직 +정보보호위원회가 구성되어 있으며 위원회의 역할 및 책임을 문서화 +관련 조직 +정보보호 부서 +세부 설명 +§ 전사 조직의 이해관계를 대변하고 의사결정을 할 수 있도록 실질적인 의사결정 권한이 있는 임직원(예: +경영진, 임원, 정보보호책임자 및 개인정보 보호책임자 등)으로 정보보호위원회를 구성하여야 한다. +§ 정보보호위원회는 조직 전반에 걸친 주요 사안에 대한 검토, 승인 및 의사결정을 수행하는 조직으로 정보보호와 +관련된 중요한 결정에 대한 공정성의 확보, 의견 조정 및 다양한 의사의 종합⋅협의⋅조정 등을 위해 설치하여야 +한다. +§ 정보보호위원회를 체계적으로 운영하기 위하여 해당 위원회의 정의, 대상, 구성, 역할 및 운영에 관한 절차 +등을 명문화하여야 한다. +고려 사항 +§ 정보보호위원회(공공기관인 경우, 보안심사위원회와 동일)는 해당 명칭의 위원회가 존재하거나 다른 명칭(예: +경영회의)의 의사결정 모임을 정보보호위원회 형태로 운영할 수 있다. +§ 정보보호위원회의 명칭은 다양하게 표현될 수 있으므로, 단순히 명칭에 의해 파악하기보다는 위원회의 행정작용, +소관 사무, 행정조직 내 지위 등을 고려하여 그 성격과 기능을 파악하여야 한다. 즉, 정보보호위원회와 다른 +명칭이더라도 정보보호에 관한 심의 의결하는 형태로 운영하여야 한다. +§ 금융회사 또는 전자금융업자는 전자금융거래법 등 관계 법규에서 정하는 정보보호위원회 구성, 심의·의결 사안, +보고 절차 등의 내용이 포함된 정보보호위원회 운영 규정이 있어야 하며, 관계 법규 및 해당 규정에 따라 위원회를 +운영하여야 한다. +§ 위원회를 통해 심의(의사결정)가 이루어져야 하는 안건을 명확히 규정하되, 위원회 운영이 필요한 사안이 +불시에 발생하는 경우에도 운영 지침에 따른 위원회 운영과 의사결정이 이루어져야 한다. +§ 정보보호위원회가 보다 효과적으로 운영될 수 있도록 정보보호 및 개인정보보호 담당자, 부서별 담당자로 +구성된 실무협의체를 구성하여 운영하는 것을 고려할 수 있다. + + +![이미지 31-0](images/p0031_img0.png) + + +--- + +| 한국인터넷진흥원 | +32 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설의보호대책 수립 등) +공공기관 +국가 정보보안 기본지침 제7조(정보보안내규) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조의2(정보보호위원회 운영) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.1.3 조직 구성 +확인 대상(예시) +☐정보보호위원회 운영 규정(예: 지침, 절차) +☐정보보호위원회 운영 규정에 따른 의사결정 이력(예: 회의록 등) +☐(서식 제22호) 정보보호위원회 회의록 +☐(서식 제23호) 정보보호위원회 의견서 + + +![이미지 32-0](images/p0032_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +33 +03 +자산분류 +A-10 +관리적 분야 > 3. 자산분류 +주요정보통신기반시설 내 모든 자산(인력, 시설, 장비 등)을 식별하여 자산분류기준을 수립하고 문서화 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설을 구성하는 중요 자산의 현황을 체계적으로 관리하기 위해 자산의 유형 별 분류 및 관리(예: 연 1회 이상 +목록 현행화) 기준을 수립하여야 하며 기준에 따라 작성된 자산목록은 정기적으로 검토하여 현행화하여야 한다. +§ 자산을 식별하는 것은 조직에서 보유하고 있는 자산 중 보호하여야 할 대상을 정의하는 것으로 기반시설과 관련된 +모든 자산을 확인하고 보호되어야 할 자산을 분류 기준에 따라 누락 없이 식별하여 자산목록(표) 등으로 문서화하여야 +한다. +고려 사항 +§ 자산의 분류는 서버, 네트워크 장비, 정보시스템(응용프로그램), 소프트웨어, 보안 장비, DBMS, 단말기 +등으로 구분할 수 있으며, 기반시설 및 조직의 특성에 따라 적절한 분류 기준을 마련할 필요가 있다. +§ 자산 분류기준에 따라 자산목록을 작성할 때는 자산명, 용도, 위치, 주요 직무자, 담당자 및 책임자, 관리부서 +등을 확인하여 목록에 포함하여야 한다. +§ 자산을 효과적으로 관리하기 위해 자산관리시스템을 활용하거나 다양한 형태의 문서(예: 엑셀, 워드 등)로 +자산 목록을 작성하여 관리할 수 있다. +§ 자산 목록은 조직의 내부 규정에 따른 분류 기준으로 작성하는 것이 일반적이나, 관련 국내외 표준 및 인증(예: +ISMS, ISMS-P, ISO27001) 규격에 맞춰 상세한 분류 기준과 목록을 유지할 필요가 있는 경우에는 해당 표준을 +준수하여 자체 규정을 수립하고 이에 따라 관리할 수 있다. 다만, 국제 표준을 완벽히 준수하기 어려운 경우에는 +정보시스템을 중심으로 자산 목록을 관리하는 방안을 고려할 수 있다. +§ 자산의 분류 시 누락 되는 자산이 발생하지 않도록 범위 내 모든 자산을 식별하고 식별된 자산은 자산분류 +기준에 따라 분류하여 관리하여야 한다. + + +![이미지 33-0](images/p0033_img0.png) + + +![이미지 33-1](images/p0033_img1.png) + + +--- + +| 한국인터넷진흥원 | +34 +※ 자산 분류(예시) +유형 +설명 +예시 +전자 정보 +전자적 형태로 저장된 데이터 +데이터베이스, 데이터 파일 등 전자파일 +문서 +종이매체로 된 자산 업무에 사용·산출되는 +문서나 기록물 +규정 및 지침, 계약서 및 협약서 등 +소프트웨어 자산 +상용 또는 자체 개발된 소프트카피·하드카피 +보관중인 각종 소프트웨어 자산 +애플리케이션 소프트웨어, 시스템 소프트웨어, +개발도구 및 유틸리티 +하드웨어 +자산 +서버 +대내외 서비스 및 업무를 위해 사용되는 서버 자산 +유닉스 서버, 윈도우 서버 등 +네트워크 +장비 +네트워크와 관련된 장비 +라우터, 스위치, 허브 등 +단말기 +임직원이 업무에 사용하는 단말기 +PC, 노트북, 모바일 기기 등 +시설 +시스템 설치·운영 장소 +물리적 공간 및 각종 부대시설 +전산실, 사무실, 방재실, 통신 장비실 등 +지원설비 +전력공급, 환기시설, 방재 시설 등 +정보시스템 운영 지원하기 위한 설비 +항온항습기, UPS, 공조장비 등 +인력 +소유자, 사용자, 운영자, 개발자 등 +시스템 운영 및 업무 수행 중인 모든 인력 +내부인력, 외부인력 및 협력업체 등 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설의보호대책 수립 등) +공공기관 +국가 정보보안 기본지침 제50조(정보시스템 보안책임), 제81조(보호대책 수립) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책), 제23조(비상대책 등의 수립·운용) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.2.1 정보자산 식별 +확인 대상(예시) +☐자산 분류 및 관리 기준에 대한 지침 +☐자산 목록(표) +☐(참고 자료 제7호) 자산의 보안등급 분류 기준 (예시) +☐(서식 예시 제30호) 자산목록표 + + +![이미지 34-0](images/p0034_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +35 +A-11 +관리적 분야 > 3. 자산분류 +정보자산을 보안등급과 중요도 등에 따라 분류하여 관리 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보자산에 대한 보안등급 분류기준을 관련 지침 등에 명문화하고 수립된 분류 기준에 따라 개별 정보자산에 +대한 보안등급을 자산목록표로 작성하여 관리하여야 한다. +§ 정보자산(예: 서버, 네트워크 장비, 보안 장비, PC 등)을 기밀성, 무결성, 가용성 등의 정보보호 특성을 고려하여 +중요도를 평가하고 자산별 특성에 따라 보안등급(예: 1, 2, 3등급)을 부여하여야 한다. +고려 사항 +§ 정보자산의 유출, 장애 및 침해 발생 시 조직의 업무에 미치는 영향을 고려하여 식별된 자산의 중요도를 +평가할 수 있는 기준을 수립하여야 한다. +§ 정보자산 중요도 평가 시 기밀성, 무결성, 가용성, 법적 요구사항 등을 고려할 수 있으며 이외에도 서비스 영향, +이익손실, 고객 상실, 대외 이미지 등 타 자산과의 연관성을 추가적으로 고려할 수 있다. +※ 자산 중요도 평가를 위한 주요 고려사항 +기준(예시) +설명 +기밀성 +(Confidentiality) +자산이 접근 권한이 없는 자에게 노출되었을 때의 위험성을 파악하여 데이터가 오직 인가된 +사용자만 접근할 수 있도록 보호하는 것을 의미함 +무결성 +(Integrity) +하드웨어/소프트웨어 변경, 데이터 값 수정 등 자산의 상태 또는 내용이 임의로 변경되었을 때의 +위험성을 파악하여 데이터가 정확하고 신뢰할 수 있도록 유지하도록 보장하는 것을 의미함 +가용성 +(Availability) +자산이 필요 시 사용이 불가능하거나, 접근이 되지 않을 때 서비스에 미치는 영향을 파악 하여 +필요한 정보에 적시에 접근할 수 있도록 보장하는 것을 의미함 +§ 식별된 자산에 대한 법적 요구사항 및 업무에 미치는 영향 등을 고려하여 중요도를 결정하고 보안등급을 +부여하여야 한다. +§ 자산 중요도 평가기준에 따라 자산별로 중요도를 평가하여야 한다. 또한 자산별 특성에 따라 보안등급을 +부여하고 임직원이 보안등급을 쉽게 식별할 수 있도록 관리하여야 한다. + + +![이미지 35-0](images/p0035_img0.png) + + +--- + +| 한국인터넷진흥원 | +36 +§ 정보자산에 대한 보안등급은 1등급, 2등급, 3등급(또는 가등급, 나등급, 다등급 등)으로 구분할 수 있으며, +회사의 자산 관리 지침에 따라 보안등급을 부여하고 현행화하여 관리하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +공공기관 +국가 정보보안 기본지침 제51조(정보시스템 유지보수) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책), 제23조(비상대책 등의 수립·운용) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.3 정보자산 관리 +확인 대상(예시) +☐정보시스템 자산에 대한 보안등급 분류 및 관리 기준(예: 지침) +☐정보시스템별 보안등급 지정 현황(예: 시스템별 보안등급 지정 목록) +☐자산별 보안등급이 표기된 자산 목록표 +☐(참고 자료 제7호) 자산의 보안등급 분류 기준 (예시) +☐(서식 예시 제30호) 자산 목록표 + + +![이미지 36-0](images/p0036_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +37 +A-12 +관리적 분야 > 3. 자산분류 +조직의 주요 자산 목록을 작성하고, 정기적인 자산현황 조사 결과 및 변경 사항(취득, 폐기, 양도 등) 등 +을 자산 목록에 반영하여 변경이력을 최신으로 유지·관리 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설을 구성하는 각 자산을 문서화 또는 자산관리시스템을 활용하는 등 목록화하여 관리하고 정기적으로 +점검하여 변경 사항이 발생할 경우 현행화하여야 한다. +§ 정보자산의 취득·신규 도입 변경·폐기·양도 등 발생 시 자산목록에 반영하고 그 변경이력을 최신으로 +유지‧관리하여야 한다. +고려 사항 +§ 명문화된 자산 분류기준에 근거하여 서버, 네트워크 장비, 보안 장비, DBMS, PC, 기타 설비 등에 대한 자산을 +목록(또는 별도 업무시스템을 통한 목록화)으로 관리하고 정기적으로 자산 현황 조사를 수행하여 최신 목록을 +유지하여야 한다. +§ 자산 목록을 변경할 경우 버전 및 변경일을 기재하는 등 변경이력을 관리할 수 있도록 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보 안전성 확보조치 기준 제4조(내부관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제50조(정보시스템 보안책임), 제81조(보호대책 수립) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책), 제23조(비상대책 등의 수립·운용) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.2.1 정보자산 식별 +확인 대상(예시) +☐목록표에 표기된 자산의 위치(예:통신실, 서버실 등) +☐자산 변경에 따른 자산 목록 갱신 이력 +☐(서식 예시 제30호) 자산 목록표 + + +![이미지 37-0](images/p0037_img0.png) + + +--- + +| 한국인터넷진흥원 | +38 +A-13 +관리적 분야 > 3. 자산분류 +자산의 등급에 따른 취급절차(생성·도입, 저장, 이용, 파기) 및 보호대책을 수립·이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 자산의 보안등급 별 취급절차(생성·도입, 저장, 이용, 파기)를 수립하고 보안등급에 따른 차별화된 보안통제를 +수행할 수 있는 지침 또는 절차를 정의하여 그에 따른 이행이 이루어지도록 하여야 한다. +§ 명문화된 자산의 보안등급 기준에 근거하여 보안등급에 따른 보호절차와 접근제한을 하여야 한다. +§ 물리적인 보호구역 등급에 따른 보안통제를 차별화하고, 중요한 정보시스템에 따라 네트워크 및 시스템별 +보안통제을 차별화하여야 한다. +고려 사항 +§ 자산 분류 및 보안등급 산정방법 정의, 자산 목록화, 자산의 보안등급 식별(결정) 등을 전제로 보호대책을 +수립하여야 한다. +§ 자산의 유형 및 특성에 따라 다르겠지만 보안등급에 따른 보안통제 원칙을 명문화하여 이행하도록 한다. +관계 법규 +공통 +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제51조(정보시스템 유지보수) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책), 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.3 정보자산 관리 +확인 대상(예시) +☐내부규정(예: 지침 또는 절차) 중 보안등급별 보안통제에 관한 내용 +☐정보자산별 보안등급 지정 현황(예: 시스템별 보안등급 지정 목록) 및 보안통제 적용 여부 +☐(참고 자료 제8호) 정보시스템 저장매체·자료별 삭제방법 (예시) + + +![이미지 38-0](images/p0038_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +39 +A-14 +관리적 분야 > 3. 자산분류 +정보자산별로 관리자 및 관리 책임자가 지정되어 있으며 목록을 최신으로 유지·관리 +관련 조직 +정보보호 부서 +세부 설명 +§ 식별된 자산별로 자산 관리(도입, 변경, 폐기, 반·출입 등)를 총괄 책임질 수 있는 소유자와 자산을 실제 관리 +운영하는 관리자 및 실무 담당자를 지정하여 각각의 책임과 역할을 정의하고 자산목록표 및 자산관리대장 +등에 기재하여 자산에 대한 보호조치 이행 주체를 명확하게 확인할 수 있도록 하여야 한다. +§ 자산별로 지정된 책임자를 확인하기 위해서는 정보시스템 자산(예: 서버, 네트워크 장비, 보안 장비, PC 등)뿐만 +아니라, 관리자 및 사용자가 접근 가능한 애플리케이션 형태의 소프트웨어 자산도 확인하여야 한다. +§ 기반시설 중 유닉스 서버가 있다면 해당 서버의 소유자를 지정하여 root 권한을 가진 관리자 및 관리부서(예: +시스템팀), 부서장, 그리고 해당 서버에 설치된 업무용 애플리케이션을 관리하는 관리자 계정을 보유한 관리자 +및 관리부서(예:설비 운영팀), 부서장을 확인 할 수 있어야 한다. 또한 자산을 사용하는 내부 인력 및 외부 +인력이 있다면 접근가능 한 사용자 모두를 확인하여야 한다. +고려 사항 +§ 소유자, 관리자, 사용자는 다음과 같이 구분할 수 있다. +기준(예시) +설명 +소유자 +자산의 소유 권한과 관리에 대한 최종 책임을 지며, 자산의 취득, 사용 허가, 처분 또는 폐기 +등의 관리권한을 가진 자 +관리자 +자산의 보관 및 운영·관리 책임이 있고, 자산의 관리위임을 받은 자 +사용자 +정보처리 설비 및 시스템을 활용하여 자산을 실질적으로 사용하는 자 +§ 자산별 관리(담당)자, 관리부서 및 부서장은 각 자산별로 확인할 수 있도록 자산목록표에 해당 인원의 이름을 +기록, 관리 하여야 한다. + + +![이미지 39-0](images/p0039_img0.png) + + +--- + +| 한국인터넷진흥원 | +40 +[그림5] 자산 목록표에 자산별 책임자 명시(예시) +§ 자산별로 관리(도입, 변경, 폐기, 반·출입 등)를 책임을 질 수 있는 책임자와 자산을 실제 관리·운영하는 +관리자(또는 담당자)를 지정하고 자산 목록표에 기재하여 책임소재를 명확하게 하여야 한다. +§ 자산별 관리(담당)자, 관리부서 및 부서장은 자산 목록표에 해당 인원의 이름을 기록하여 관리한다. +§ 자산별 접근 사용자가 많은 경우는 별도의 문서화가 어렵기 때문에 해당 사용자를 서버 또는 어플리케이션 +상에서 확인이 가능하도록 하여야 한다.(예: 사용자 계정별 사용 주체(이름) 목록) +§ 퇴직, 보직 이동 등 인사정보가 변경되거나 자산에 변경(도입, 변경, 폐기, 반·출입)이 발생하는 경우 자산별 +책임자 및 담당자를 파악하여 자산 목록표에 반영 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무), 제30조(개인정보 처리방침의 수립 및 공개) +공공기관 +국가 정보보안 기본지침 제50조(정보시스템 보안책임) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.3 정보자산 관리 +확인 대상(예시) +☐자산별 관리(담당)자, 관리부서, 부서책임자 현황(예: 자산목록표) +☐자산별 사용자 현황(예: 사용자 계정 목록) +☐(서식 예시 제30호) 자산 목록표 + + +![이미지 40-0](images/p0040_img0.png) + + +![이미지 40-1](images/p0040_img1.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +41 +04 +위험관리 +A-15 +관리적 분야 > 4. 위험관리 +주요정보통신기반시설의 서비스 현황을 식별하고 업무 절차와 흐름을 파악하여 문서화 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설의 관리체계 전 영역에 대한 정보서비스 현황을 식별하고, 업무 절차와 흐름을 파악하여 +문서화하여야 한다. +§ 문서화된 정보서비스 흐름도는 서비스 및 업무, 자산 등의 변화를 반영할 수 있도록 주기적으로(최소 연 1회 +이상) 검토하고, 최신성이 유지되도록 관리하여야 한다. +고려 사항 +§ 정보서비스 흐름도는 조직의 업무 절차, 정보보호 요구사항, 보안통제의 상호연계를 도식화한 자료로써 +기관의 정보보호 현황을 이해하고 위험을 관리하기 위한 핵심 자료로 구비 하여야 한다. +§ 현황 및 흐름 분석을 위해 자료 분석, 현장실사, 담당자 인터뷰 등을 수행하며 인터뷰 대상자로는 시스템 +운영자, 개발자, 정보보호 담당자 등을 포함하여야 한다. +§ 정보서비스 흐름도는 개발자, 운영자 등 담당 업무별로 상세하게 나누어 작성하여야 한다. +[그림6] 정보서비스 흐름도(시스템 운영자 예시) + + +![이미지 41-0](images/p0041_img0.png) + + +![이미지 41-1](images/p0041_img1.png) + + +![이미지 41-2](images/p0041_img2.png) + + +--- + +| 한국인터넷진흥원 | +42 +§ 정보서비스 흐름도 작성 시 업무 흐름을 한눈에 이해할 수 있도록 작성하고 다음 사항들을 고려하도록 한다. +- 기반시설 관련 업무를 수행하는 인력 및 부서 등을 식별 및 구분하여 표시하고, 연계기관이 있는 경우에는 해당 +기관도 포함하여 작성한다. +- 각 업무에서 기반시설의 정보서비스 업무와 관련된 처리 수단도 모두 표시한다. (예: PC, 서버, DBMS, 문서 등) +- 해당 직무 또는 담당 업무별 업무명을 이해하기 쉽게 정의하여 흐름도 상단에 기술한다. +- 개발자, 운영자 등 담당 업무별로 상세하게 구분하여 작성할 수 있으며, 필요 시 각 업무에 따라 흐름도를 분리하여 +개별적으로 작성할 수 있다. +- 정보서비스 흐름 목적, 연계방식 등 정보서비스 흐름 파악에 필요한 설명을 간략히 기술한다. +- 외부에서 접속 가능한 자산은 내부 자산과 구분될 수 있도록 다른 색으로 표시하는 등의 별도의 방법으로 구별한다. +- 정보서비스 흐름 분석 및 흐름도 작성 시 나타난 주요 문제점 등은 요약하여 기술한다. +- 업무 흐름도에는 정형화된 서식이 없으므로, 해당 기관 및 직무의 특성에 따라 다르게 표현할 수 있다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제81조(보호대책 수립) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책), 제23조(비상대책 등의 수립·운용) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.2.2 현황 및 흐름분석 +확인 대상(예시) +☐정보서비스 현황표 +☐정보서비스 업무흐름도 + + +![이미지 42-0](images/p0042_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +43 +A-16 +관리적 분야 > 4. 위험관리 +연 1회 이상 정기적으로 위험 평가 수행 +관련 조직 +정보보호 부서 +세부 설명 +§ 법적·관리적·기술적·물리적 분야 등 다방면에서 발생할 수 있는 정보보호 관련 위험을 식별·평가하기 위해 +위험평가 방법을 선정하고 문서화하여야 한다. +§ 위험관리 방법 및 절차를 구체화하여 위험관리계획을 수립하고 이에 따라 위험평가를 연 1회 이상 정기적으로 +수행하거나 중요한 사유(예: 신규 시스템 도입, 조직의 변화 등) 발생 시에는 정기적 평가 외에 별도로 위험평가를 +수행하여야 한다. +고려 사항 +§ 기관의 특성 및 최신 취약점 및 위협동향 등을 반영하여 유형별 위협정보를 수집하고 조직에 적합한 위험평가 +방법(예: 베이스라인 접근법, 상세위험 분석법, 복합 접근법, 위협 및 시나리오 기반 등)을 선정하여 연 1회 +이상 위험을 평가하여야 한다. +§ 사전에 수립된 위험관리 방법 및 계획에 따라 체계적으로 수행하며 수용할 수 있는 위험은 경영진의 승인을 +받도록 하여야 한다. +§ 위험평가 방법론은 조직의 특성에 맞게 적용하도록 하고, 다양한 위험 요인에 대해 측정 및 예측할 수 있도록 +위험을 모델링하여 분석하여야 한다. +§ 위험평가는 정기적으로 수행하되 조직의 변화, 신규시스템 도입 등 중요한 사유가 발생한 경우 별도 위험평가 +수행하여야 한다. +§ 최신 법률 개정사항 반영 등 정보보호 관련 법적 요구사항 준수 여부를 확인하고, 운영(현황)관리 문서에 +변경된 자산, 서비스, 흐름도 등을 반영하여야 한다. +§ 각종 위험이 조직에 미치는 영향(발생가능성, 심각도 등)을 고려하여 위험도를 산정한다. +§ 기관에서 수용가능한 목표 위험수준(DoA, Degree of Assurance)을 정하여 그 수준을 초과하는 위험을 +식별하여야 한다. + + +![이미지 43-0](images/p0043_img0.png) + + +--- + +| 한국인터넷진흥원 | +44 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등), +제9조(취약점의 분석·평가) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제85조(취약점 분석·평가 결과물 관리) +금융회사 +전자금융거래법 제21조의3(전자금융기반시설의 취약점 분석·평가) +전자금융감독규정 제37조의2(전자금융기반시설의 취약점 분석·평가 주기, 내용 등) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.2.3 위험 평가 +확인 대상(예시) +☐위험관리 지침·매뉴얼·가이드 +☐위험관리 계획서 +☐위험평가 결과보고서 + + +![이미지 44-0](images/p0044_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +45 +A-17 +관리적 분야 > 4. 위험관리 +위험평가에 따른 연간 보호대책 이행계획 수립 및 경영진 보고 +관련 조직 +정보보호 부서 +세부 설명 +§ 위험평가 결과에 따라 식별된 위험을 처리하기 위하여 조직에 적합한 보호대책을 선정하고, 보호대책의 +우선순위와 일정·담당자·예산 등을 포함한 이행계획을 수립하여 경영진에 보고하여야 한다. +§ 수립된 연도별 정보보호 업무 계획 등의 중요한 정보보호 사안은 정보보호책임자 이상의 최고경영자(또는 +기관장)까지 보고하여 경영층의 책임과 관리 아래 보호대책이 시행하여야 한다. +§ 연간 정보보호 업무 계획 이외에도 최상위 정보보호 정책의 제·개정, 정보유출 등과 같은 중요한 정보보호 +사안이 발생하면 최고경영자(또는 기관장)까지 보고하여 신속한 의사결정이 이루어지도록 한다. +고려 사항 +§ 위험 식별 및 평가 결과에 따른 연간 보호대책 계획은 정보보호책임자, 개인정보 보호책임자 등 경영진이 +이해하기 쉽게 작성하여 보고하도록 한다. +§ 식별된 위험은 이해관계자에게 내용을 공유하여 논의하고 보호대책의 우선순위를 고려하여 일정, 담당 +부서,담당자, 예산 등의 항목을 포함하여 보호대책 이행계획을 수립한다. +§ 위험 발생가능성 및 심각도 등을 고려하여 위험도 산정기준을 마련하여, 식별 위험에 대하여 위험도를 +산출하여야 한다. 수용 가능한 목표 위험수준(DoA : Degree of Assurance)은 정보보호 책임자 및 경영진의 +승인 하에 결정하고 식별된 위험에 대한 처리 전략(감소, 회피, 전가, 수용 등)을 수립하여 위험을 관리한다. +[그림7] 위험처리 전략(예시) + + +![이미지 45-0](images/p0045_img0.png) + + +![이미지 45-1](images/p0045_img1.png) + + +--- + +| 한국인터넷진흥원 | +46 +관계 법규 +공통 +정보통신기반 보호법 제6조(주요정보통신기반시설보호계획의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제81조(보호대책 수립) +금융회사 +전자금융거래법 제21조의3(전자금융기반시설의 취약점 분석·평가) +전자금융감독규정 제37조의2(전자금융기반시설의 취약점 분석·평가 주기, 내용 등) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.2.4 보호대책 선정 +확인 대상(예시) +☐정보보호 위험관리계획서 +☐정보보호 대책서 +☐당해 연도(또는 전년도) 위험관리 보호대책에 대한 최고경영자(기관장) 보고 문건 + + +![이미지 46-0](images/p0046_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +47 +05 +감사 +A-18 +관리적 분야 > 5. 감사 +법적 요구사항의 준수여부를 연 1회 이상 정기적 검토 +관련 조직 +정보보호 부서, 준법 감시 부서 +세부 설명 +§ 조직이 준수하여야 할 관련 법적 요구사항을 주기적으로 파악하고, 준수 여부를 연 1회 이상 정기적으로 +검토하여 문제점 발견 시 신속하게 조치하여야 한다. +§ 특허권 및 저작권법 등 관련 법규를 준수하여 크랙되거나 불법 복제된 소프트웨어의 사용 금지 등의 조치를 +수행하는 등 업무용 PC에서 불법 소프트웨어 사용을 금지하는 대책(예: 교육, 점검, 기술적인 차단 등)을 강구 +하여야 한다. +§ 또한, 예산 및 운용 인력 여부에 따라서 불법 소프트웨어를 탐지하고 설치하지 못하도록 하는 기술적인 +조치(예: 업무용 PC에 관련 에이전트 설치)를 함께 고려 하여야 한다. +고려 사항 +§ 법적 요구사항의 준수 여부를 주기적으로 검토할 수 있는 절차(검토 대상, 주기, 담당자, 방법 등)를 수립하여야 +한다. +§ 관련 법규의 제·개정 현황을 지속적으로 모니터링하여 중대한 변경사항이 발생한 경우, 조직에 미치는 영향을 +분석하여 반영하고 내부 정책, 지침 등을 최신의 상태로 유지하여야 한다. +§ 불법 소프트웨어는 저작권자의 동의 없이 복제하여 무단으로 이용 중인 소프트웨어를 말하며 기업용 +라이선스가 아닌 개인용 라이선스가 적용되는 소프트웨어도 포함된다. +§ 불법 소프트웨어는 사용자 주의와 관리적·기술적인 강제 조치가 함께 병행될 필요가 있다. 따라서 +사용자(임직원 및 외부자)에 대한 교육은 반드시 이루어져야 하고 주기적인(연 1회) 자체 점검(예: 매월 불법 +소프트웨어 실태점검) 등의 관리적 조치가 시행되어야 한다. + + +![이미지 47-0](images/p0047_img0.png) + + +![이미지 47-1](images/p0047_img1.png) + + +--- + +| 한국인터넷진흥원 | +48 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가정보보안지침 제14조(검토 시기 및 절차) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.4.1 법적 요구사항 준수 검토 +확인 대상(예시) +☐식별된 법적 요구사항 목록 +☐법적 준거성 검토 내역·결과(예: 점검 체크리스트) +☐불법 소프트웨어 사용 금지조치 이행 내역 + + +![이미지 48-0](images/p0048_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +49 +A-19 +관리적 분야 > 5. 감사 +주기적으로 정보보호 감사계획 수립·이행 +관련 조직 +정보보호 부서, 감사 부서 +세부 설명 +§ 정보보호 정책/지침 및 법적 요구사항 등에 따라 정보보호 활동이 수행되고 있는지 여부 등을 점검할 수 +있도록 연 1회 이상 정보보호 감사계획을 수립하고 시행하여야 한다. +§ 정보보호 감사는 관계 법규에 따른 규정 요구사항을 포함하여 감사의 전문성, 독립성 및 중립성을 보장할 수 +있는 감사 조직을 구성하고 감사의 주기, 기준, 범위, 방법 등을 포함하는 연간 보안 감사계획을 수립하여야 한다. +고려 사항 +§ 정보보호 부서가 감사 대상부서에 해당하면 독립성의 문제가 발생할 수 있으므로, 감사 수행의 주체를 별도로 +정하고 정보보호 부서는 감사업무를 지원하는 부서가 될 필요가 있다. 다만, 감사 주관부서의 전문성 문제가 +우려된다면 외부 감사인(예: 보안컨설턴트, 정보보호인증심사원(예: ISMS-P 심사원))을 포함시켜, 전문성을 +확보할 수 있다. +§ 보안 감사 점검 인력은 객관성과 전문성을 보유한 인력이 지정될 수 있도록 자격요건을 정의하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제8조(정보보안감사 등) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제58조(금융회사의 정보기술부문 실태평가 등) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.4.2 관리체계 점검 +확인 대상(예시) +☐연간 보안 감사 계획서(감사 조직 포함) +☐연간 보안 감사 결과보고서 + + +![이미지 49-0](images/p0049_img0.png) + + +--- + +| 한국인터넷진흥원 | +50 +A-20 +관리적 분야 > 5. 감사 +감사결과를 경영진에게 보고하여 적정한 사후관리를 시행 +관련 조직 +정보보호 부서, 감사 부서 +세부 설명 +§ 보안 감사 결과 보완이 필요한 사항이 발견된 경우, 해당 사항에 대한 조치계획을 수립하여 이행하여야 한다. +§ 개선사항 및 사후관리를 포함한 감사 결과를 경영진에게 보고하여 지적사항에 대한 개선조치가 수행되도록 +관리하여야 한다. +고려 사항 +§ 보안 감사 결과 보완이 필요한 경우 보안 조치계획을 수립 및 이행하여 조치완료 여부를 확인하여야 한다. +§ 보안 감사 결과는 감사 수행 직후에 문제점에 대한 해당 부서의 개선계획이 포함된 감사 결과서를 작성하여 +정보보호책임자에게 보고하고, 일정 기간 후 사후조치 실태를 확인하여 그 결과를 다시 정보보호 책임자에게 +보고하여야 한다. 이를 통해 개선조치 책임이 있는 유관 부서의 적극적인 개선 노력을 이끌어 낼 수 있도록 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제8조(정보보안감사) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.4.2 관리체계 점검, 1.4.3 +관리체계 개선 +확인 대상(예시) +☐보안 감사 계획서(사후조치 경과 포함 또는 별도 문건) +☐보안 감사 결과보고서 +☐경영진에게 감사 결과 보고 이력 +☐보안 감사 이행조치 결과보고서 + + +![이미지 50-0](images/p0050_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +51 +06 +인적보안 +A-21 +관리적 분야 > 6. 인적보안 +정보보호 관련 직무자의 책임과 역할을 명확히 정의하여 문서화 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 업무 수행과 관련된 조직의 특성을 고려하여 관련 책임자와 담당자의 역할 및 책임을 구체적으로 정의하여 +명시하여야 한다. +§ 정보보호관리자 및 부서별 담당자의 역할 등에 따라 정보보호 실무 인원이 구분되는 경우는 해당 직무에 대한 +정의와 담당자의 자격 요건 등에 대해 문서화하여야 한다. +§ 정보보호 관련 업무를 실무적으로 지원·이행할 수 있도록 해당 직무에 대한 직무기술서 등을 통하여 책임 및 +역할을 명시하여야 한다. +§ 외부 인력이 정보보호 담당자로 포함되는 경우 외부 인력의 책임과 역할 등을 구체적으로 정의하여 +문서화하여야 한다. +고려 사항 +§ 정보보호 전담 인원, 시스템 관리자, 정보보호 시스템 관리자, 개발보안 담당자, 개인정보보호 담당자, +시설보안 담당자, 부서별 보안담당자 등과 같은 정보보호 실무영역에 대한 직무를 구분하여 명문화하여야 한다. +§ 전사 인원에 대한 직무기술서가 아닌 정보보호 실무조직에 대한 직무기술서에 대해 구비하여야 한다. +§ 조직의 각 구성원에게 정보보호와 개인정보보호 관련 역할 및 책임을 할당하고, 그 활동을 평가할 수 있는 +체계와 조직 구성원 간 상호 의사소통할 수 있는 체계를 수립하여 운영하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무), 제31조(개인정보 보호책임자의 지정) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제4조(책무), 제11조(보안책임), 제73조(개별사용자 보안) + + +![이미지 51-0](images/p0051_img0.png) + + +![이미지 51-1](images/p0051_img1.png) + + +--- + +| 한국인터넷진흥원 | +52 +확인 대상(예시) +☐직무기술서 +☐정보보호 조직도 +☐정보보호 인력 업무 분장표 +☐의사소통 수행 이력(예 : 주간보고, 내부공지 등) +☐(서식 예시 제24호) 직무기술서 +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제21조의2(정보보호최고책임자 지정) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.2 조직의 유지관리 + + +![이미지 52-0](images/p0052_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +53 +A-22 +관리적 분야 > 6. 인적 보안 +기반시설 업무 담당자 지정 시 신원, 업무능력, 교육정도, 경력 등에 대한 적격심사 수행 +관련 조직 +인사 부서 +세부 설명 +§ 기반시설 업무 담당자 지정 혹은 채용 시에는 신원 확인에 필요한 최소한의 개인정보, 자격증, 교육 이력, 업무 +경력에 대한 사항을 확인하는 등의 적격심사를 거쳐야 한다. +§ 적격심사 승인 절차가 완료된 후에만 계정·권한을 부여하며, 이력을 기록·보관한다. +§ 관계 법규에 따른 절차가 있는 경우를 제외하고는 근로기준법 및 자체적으로 정하는 규정 등에 따라 적격심사 +를 수행할 수 있다. +고려 사항 +§ 적격심사는 법적 근거와 동의를 전제로 최소 수집·보관 원칙을 지키고, 적격심사 기준은 직무와 관련된 +요소로만 구성한다. +관계 법규 +공통 +- +공공기관 +국가 정보보안 기본지침 제73조(개별사용자 보안) +금융회사 +- +ICT기업 +- +확인 대상(예시) +☐적격심사 근거 +☐적격심사 수행이력 + + +![이미지 53-0](images/p0053_img0.png) + + +--- + +| 한국인터넷진흥원 | +54 +A-23 +관리적 분야 > 6. 인적 보안 +기반시설 업무 담당자 지정 시 보안 서약서나 비밀유지 확약서 작성 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 채용 및 보직 이동으로 인한 기반시설 담당업무 부여 시 정보보호 및 개인정보보호 책임, 관련 법규 준수, 비밀 +유지 의무 등에 대하여 명시된 보안서약서나 비밀유지 확약서를 작성하여야 한다. +§ 작성자는 소관 업무의 수행에 있어 보안 관련 규정을 준수하고, 직무상 알게 된 비밀을 재직 중 및 퇴직 후에도 +누설하거나 유출하지 않으며, 이를 위반할 경우 처벌을 감수할 것을 서약하여야 한다. +고려 사항 +§ 기반시설 업무 담당 신규 채용 및 보직 변경 등 변동 사항이 발생하는 경우 비밀유지 의무, 법률 준수 여부 +확인, 손해배상 책임 등이 포함된 별도의 보안 서약서를 징구하도록 한다. +§ 보안서약서 및 비밀유지각서는 법적 분쟁 발생 시 법률적 책임에 대한 증거자료로 사용할 수 있도록 +잠금장치가 있는 캐비닛 또는 출입통제가 적용된 문서고 등에 안전하게 보관하여, 필요시 쉽게 찾아볼 수 +있도록 관리한다. +§ 업무의 중요도 및 민감도 등에 따라 필요 시 보안서약서를 연 1회 이상 재작성하는 등 주기적으로 갱신하는 +방안을 고려할 수 있다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보보호법 제28조(개인정보취급자에 대한 감독), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제51조(정보시스템 유지보수), 제59조(원격근무 보안), 제73조(개별사용자 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.3 보안 서약 +확인 대상(예시) +☐서약서 징구·관리 절차 +☐보안서약서 또는 비밀유지각서(최초 또는 갱신) + + +![이미지 54-0](images/p0054_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +55 +A-24 +관리적 분야 > 6. 인적 보안 +기반시설 업무 담당자 지정 해제 시 별도의 비밀유지 확약서 작성 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 기반시설 업무 담당자 퇴직 시 업무 중 알게 된 조직의 중요 정보를 유출하지 않도록 별도의 비밀유지 +확약서를 받아야하며 정보유출 시 그에 따르는 법적 책임이 있음을 명확히 고지하여야 한다. +§ 보직 이동 등 고용 조건에 변화가 발생할 경우, 이전 직무에서 습득한 중요 정보를 유출하지 않고 새로운 직무 +수행과 관련하여 정보보호 책임을 준수하도록 비밀유지 확약서를 작성하는 등의 조치를 수행하여야 한다. +고려 사항 +§ 기반시설 업무 담당자 퇴직 시 정보유출 발생 시 그에 따르는 법적 책임이 있음을 명확히 인식시킬 수 있도록 +별도의 비밀유지 확약서를 작성하도록 한다. +§ 특별히 중요하게 관리되어야 하는 회사 비밀정보는 회사 내부 규정 등에 기재할 수 있으며 비밀정보의 특성을 +고려하여 기타 목적이나 사용에 관련되는 다양한 금지유형들을 규정할 필요가 있다. +§ 작성된 비밀유지 확약서는 필요시 법적 증거자료로 활용할 수 있도록 안전하게 보관하고 관리하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제73조(개별사용자 보안) +금융회사 +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.3 보안 서약 +확인 대상(예시) +☐비밀유지 확약서 +☐정보보호 및 개인정보보호 서약서 +☐(서식 제26호) 퇴직자 보안 서약서 + + +![이미지 55-0](images/p0055_img0.png) + + +--- + +| 한국인터넷진흥원 | +56 +A-25 +관리적 분야 > 6. 인적 보안 +기반시설 업무 담당자 지정 해제 시 지체 없는 정보자산 반납, 접근권한 회수·조정, 결과 확인 등의 절차 +수립·이행 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 기반시설 업무 담당자(임직원, 임시직원, 외주용역직원 등)의 퇴사 및 직무변경 시 지체없이 해당 인원에게 +제공 및 부여된 물리적, 기술적 권한을 모두 회수하는 등 절차를 수립·이행하여야 한다. 이를 위해서는 최종 +퇴사 및 직무변경을 마무리하기 전에 지급된 자산과 부여된 접근권한 등을 식별하고 이를 회수했는지 +확인하는 절차를 수립할 필요가 있다. +§ 퇴직, 계약 만료, 보직이동 시 해당 인력이 중요정보 및 개인정보를 보유하고 있는지 확인하고 이를 +회수·파기할 수 있도록 절차를 수립·이행하여야 한다. +고려 사항 +§ 업무 담당자의 퇴직 및 보직 이동 시 다음 사항을 고려하여 절차를 수립할 수 있다. +- 해당 사용자 계정 삭제·사용 중지 +- 공동사용 계정 변경 및 비밀번호 변경 +- 시스템, 단말기 등 자산에 대한 접근권한 회수·재조정 +- 제공된 데이터 및 문서 반납 또는 파기·삭제 +- 단말기 내 저장매체 데이터 삭제 +- 출입카드 반납 +- 비밀유지 서약서 작성 +- 자산·계정·접근권한 회수 등 절차 이행여부에 대한 점검 등 +§ 퇴직, 직무변경, 부서이동, 휴직 등 인사변경 사항 발생 시 인사 부서, 정보보호 부서, 개인정보보호 부서, +시스템 운영부서 등 관련 부서 간 신속히 공유되도록 한다. +§ 퇴직 및 계약 만료 등의 해당 인력이 보유한 조직의 중요한 정보 등을 파기할 때에는 해당 정보가 +복구·재생되지 않도록 안전한 방법으로 파기하여야 한다. +§ 정보시스템과 담당자 PC뿐만 아니라, 메일 송수신함 등 해당 정보가 저장되어 있는 모든 장치 및 매체에 대한 +삭제 조치를 하여야 한다. +§ 직무변경자 혹은 퇴직자와 불가피하게 정보시스템 및 정보보호시스템 계정(root 계정 등)을 공유하여 사용한 +경우 해당 계정의 비밀번호를 즉시 변경하여야 한다. + + +![이미지 56-0](images/p0056_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +57 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제5조(접근 권한의 관리) +공공기관 +국가 정보보안 기본지침 제73조(개별사용자 보안), 제75조(계정 관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산), 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.5 퇴직 및 직무변경 관리 +확인 대상(예시) +☐서류상 또는 전산화된 퇴직 절차(예: 절차 및 서식, 그룹웨어 등)(서식 예시 제25호) 퇴직자 권한 회수 및 +서약집행) +☐최근 1년 이내 퇴사한 직원 현황(명단)과 해당 직원에 대한 퇴직 절차 이행 근거(서식 예시 제26호) 퇴직자 +보안 서약서) +☐(해당하는 경우) 인사업무를 처리하는 그룹웨어 +☐해당 인원에게 지급된 접근권한(출입, 시스템 계정 등)이 적용된 시스템 +☐퇴직 시 자산 및 계정 반납관리대장 +☐퇴직자 보안점검 체크리스트 및 점검 내역 +☐정보 및 개인정보 파기 확약서 + + +![이미지 57-0](images/p0057_img0.png) + + +--- + +| 한국인터넷진흥원 | +58 +A-26 +관리적 분야 > 6. 인적 보안 +기반시설 업무 관련자가 정보보호 정책을 위반할 경우 이에 대한 징계와 관련된 사항을 규정에 명시 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 기반시설 업무 관련자가 법령과 규제 및 정보보호 정책에 따른 책임과 의무를 위반하는 경우 이에 대한 징계 +규정을 수립하여야 한다. +§ 취업규칙, 징계규정 등 사내 규정을 통해 규정 위반에 대한 징계 기준을 명시할 수 있으나, 문서화된 별도의 +징계 규정이 없는 경우에는 정보보호 정책 또는 인사 관련 규정에 징계 조항을 포함시켜야 한다. +고려 사항 +§ 정보보호 및 개인정보보호 의무 위반에 대한 엄중한 책임을 묻기 위해 파면, 해임, 정직 등의 징계 규정을 +마련하고, 실제 위반 행위에 대해서는 내부 절차에 따른 조치를 수행하여야 한다. +§ 공공기관의 경우 각급기관의 장은 「국가공무원 복무ㆍ징계 관련 예규」 (인사혁신처) 중 “비밀 엄수의 의무 +위반 처리” 등을 참고하여 정보보호 위규자에 대한 처리기준을 마련하도록 한다. +§ 금융회사 또는 전자금융업자는 전자금융감독규정에 따라 임직원이 정보보안 관련 법규를 위반하는 경우 그 +제재에 관한 세부기준 및 절차를 명시적으로 마련하여야 한다. +§ 기반시설의 정보보호 책임 및 관련 법규 준수 등을 충실히 이행하였을 때의 보상 방안도 고려하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제27조(비밀유지의무) +공공기관 +국가 정보보안 기본지침 제80조(위규자 처리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.6 보안 위반 시 조치 +확인 대상(예시) +☐정보보호 규정 등 위반 시 징계 규정 +☐규정 위반자 징계 이력(내용은 비공개 가능) +☐(참고 자료 제5호) 사업자 보안위규 처리기준 (예시) + + +![이미지 58-0](images/p0058_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +59 +07 +외부자보안 +A-27 +관리적 분야 > 7. 외부자보안 +외부 서비스 이용 및 업무 위탁에 따른 신규 외부자에 대한 보안 서약서 작성 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 외부자의 상주 여부와 관계없이 기반시설에 접근하는 모든 외부자(임시직원, 외부용역직원 등)에 대하여 해당 +서식에 따른 보안서약서 작성이 이루어져야 한다. +고려 사항 +§ 용역사업 관련 인원에 대해 정보 누출 방지 조항 및 해당 인력의 자필 서명이 들어간 보안서약서를 징구하여야 한다. +※ 외부자 보안서약서 포함 사항 (예시) +- 정보보호 책임 및 의무 +- 정보보호 관련 법률 및 내부 규정 준수 +- 업무 수행 관련 취득한 중요정보 유출금지(비밀유지) +- 보안요구사항 위반 시 처벌, 손해배상 책임 +- 침해사고 발생에 따른 보고 의무 등 +§ 외부자의 업무형태에 따라 상기 사항에서 제시하고 있는 요구사항을 계약서에 반영하지 못하는 경우 타당한 +사유가 있어야 한다. +§ 보안서약서의 제출 의무에 대해 외부 인력 채용 절차 중 기본적인 사항으로 인식하고 관리부서를 지정하여 +보안서약서를 관리하여야 한다. +§ 관계 법규에 따라서는 외부자에 대한 보안서약서 서식이 정의되어 있을 수 있으며, 해당하는 법규가 없다면 +서식 예시 등을 참고하여 적절한 외부자 보안서약서를 수립하여 징구할 수 있도록 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) + + +![이미지 59-0](images/p0059_img0.png) + + +![이미지 59-1](images/p0059_img1.png) + + +--- + +| 한국인터넷진흥원 | +60 +확인 대상(예시) +☐기반시설 관련 외부 위탁 현황(예: 위탁계약서, 업체 목록, 사업명, 기간, 투입 인원 명단 등) +☐(서식 예시 제29호) 외부자 보안서약서 +공공기관 +국가 정보보안 기본지침 제26조(용역업체 보안), 제73조(개별사용자 보안), 제150조의2(서약서 +징구시 고지 사항) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제40조(외부주문등에 대한 감독 및 검사) +전자금융감독규정 제60조(외부주문등에 대한 기준) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.3 보안서약, 2.3.2 외부자 +계약 시 보안 + + +![이미지 60-0](images/p0060_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +61 +A-28 +관리적 분야 > 7. 외부자보안 +기반시설 범위 내에서 발생하고 있는 외부 서비스 이용 및 업무 위탁 현황을 식별 및 관리 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 기반시설 범위 내에서 외부 서비스를 이용하거나 업무의 일부를 위탁하는 경우 관련 현황을 파악하고 법적 +요구사항 및 외부 조직이나 서비스로부터 발생할 수 있는 위험 요소를 검토하여 필요한 보호대책을 +마련하여야 한다. +고려 사항 +§ 기반시설 범위 내 업무위탁 및 외부 시설·서비스 이용 현황을 명확히 식별하고 이에 대한 목록을 작성하여 +지속적으로 현행화하여야 한다. +※ 업무 위탁 및 외부 시설·서비스 이용현황 목록에 포함되어야 할 사항 (예시) +- 수탁자 및 외부 시설·서비스 명칭 +- 담당부서 및 담당자 명 +- 위탁하는 업무의 구체적인 내용 및 외부 서비스의 세부사항 +- 개인정보 처리업무 위탁 여부 +- 위탁 및 서비스 이용 기간 +- 계약서 작성 여부, 보안점검 여부 등 관리·감독에 관한 사항 등 +§ 외부 서비스 이용 및 업무 위탁에 따른 법적 요구사항을 고려하여 위험평가를 수행하고 그 결과를 토대로 +고위험 외부자에 대해서는 점검주기·점검항목 기준을 달리하여 집중 점검 수행을 하는 등 적절한 보호대책을 +마련하여 관리하도록 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제26조(용역업체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제40조(외부주문등에 대한 감독 및 검사) +전자금융감독규정 제60조(외부주문등에 대한 기준) + + +![이미지 61-0](images/p0061_img0.png) + + +--- + +| 한국인터넷진흥원 | +62 +확인 대상(예시) +☐외부 위탁 및 외부 시설·서비스 현황 +☐외부 위탁 계약서 +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.3.1 외부자 현황 관리 + + +![이미지 62-0](images/p0062_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +63 +A-29 +관리적 분야 > 7. 외부자보안 +외부 서비스 이용 및 업무 위탁에 따른 정보보호 요구사항을 식별하고 이를 계약서 또는 협정서에 명시 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 기반시설 내 직원이 아닌 외부 인원을 통한 유지보수, 개인정보취급, 기타 용역업무 수행 시에 기반시설, +정보시스템, 데이터 등의 자산에 접근이 이루어지는 경우 해당 용역 수행주체(예: 외부자 또는 +용역사업자)와의 계약 문서에 정보보호 요구사항을 포함시켜야 한다. +§ 계약 문서에 포함되는 정보보호 요구사항은 관계 법규에서 규정하는 내용이 있다면 모두 포함되어야 하고, +관계 법규가 없더라도 다음 사항이 계약 문서(또는 부속서)에 포함되도록 한다. +- 참여인력의 보안관련 준수사항 +- 해당 업무 수행과 관련한 보안교육, 보안점검에 관한 사항 +- 계약 기간 중 참여인원 임의교체 금지에 관한 사항 +- 제공되는 자료에 대한 무단 복사 및 외부반출 등 보안조치에 관한 사항 +- 기반시설 관련 장비 반·출입 시 악성코드 감염여부, 정보누출 등 점검에 관한 사항 +- 소프트웨어 개발보안에 필요한 사항 +- 제안요청서에 포함된 보안 관련 사항 +- 계약 종료시 기반시설 관련 장비 내 저장정보 복구 불가 조치에 관한 사항 +- 계약 종료시 관리적·물리적 권한 회수에 관한 사항 +- 규정 위반 시 손해배상 등 책임에 관한 사항 등 +고려 사항 +§ 개인정보처리 업무를 위탁하는 경우는 개인정보 보호법에 따른 필수 사항이 계약 내용에 포함되도록 하여야 한다. +- 위탁업무 수행 목적 외 개인정보의 처리 금지에 관한 사항 +- 개인정보의 기술적ㆍ관리적 보호조치에 관한 사항 +- 위탁업무의 목적 및 범위 +- 재위탁 제한에 관한 사항 +- 개인정보에 대한 접근 제한 등 안전성 확보 조치에 관한 사항 +- 위탁업무와 관련하여 보유하고 있는 개인정보의 관리 현황 점검 등 감독에 관한 사항 +- 수탁자가 준수하여야 할 의무를 위반한 경우의 손해배상 등 책임에 관한 사항 + + +![이미지 63-0](images/p0063_img0.png) + + +--- + +| 한국인터넷진흥원 | +64 +§ 용역사업에 투입되는 자료·장비 등에 대해 대외보안이 필요한 경우 정보보안의 책임을 명확히 하기 위해 +계약서와 별도로 비밀유지계약서를 작성하여야 한다. +§ 용역업체가 해당 업무에 대한 하도급 계약을 체결할 경우 원래 계약 수준의 비밀 유지 조항을 포함하도록 +조치하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한) +공공기관 +국가 정보보안 기본지침 제26조(용역업체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제40조(외부주문등에 대한 감독 및 검사) +전자금융감독규정 제21조(정보처리시스템 구축 및 전자금융거래 관련 계약), 제60조(외부주문등 +에 대한 기준) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.3.2 외부자 계약 시 보안 +확인 대상(예시) +☐용역사업 계약서 또는 협정서 중 정보보호 요구사항 +☐기반시설에 대한 외주용역 현황(계약서, 업체명, 사업명, 기간, 투입인원 등) +☐(참고 자료 제4호) 외부용역업체 보안관리 준수사항 (예시) +☐(서식 예시 제3호) 표준 개인정보처리 위탁계약서 + + +![이미지 64-0](images/p0064_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +65 +A-30 +관리적 분야 > 7. 외부자보안 +유지보수 등을 위한 외부자 임시 방문 시 정보 및 자산 접근에 대한 보안 규정 사전 고지 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 유지보수 등을 위해 임시적으로 외부자가 기반시설에 직·간접적으로 접근하는 경우 법적 요건 또는 내부 +규정에 따른 비밀유지 의무 준수 및 위반시 처벌내용 등에 대한 사항을 업무 수행 전에 고지하여야 한다. +§ 유지보수 등을 위해 외부인력과 계약시 보안서약서 등에 외부 관계자가 준수하여야 하는 관계 법규와 +발주기관의 규정 사항을 고지하여야 한다. +§ 사전 고지 시점은 외주용역사업의 발주 시점에 이루어지도록 하고 준수하여야 하는 법규 사항은 해당 +발주서(RFP)에 포함시킬 수 있도록 한다. +§ 통보하여야 하는 내용에는 관계 법규 목록(정보통신기반보호법은 필수 기재) 및 발주서의 붙임 형태로 +제공하는 외주용역 보안관리 기준을 포함하여야 한다. +고려 사항 +§ 공공기관, 금융회사 등은 관계 법규에서 규정하는 외주용역 보안관리 기준을 준용하도록 한다. +§ 보안서약서 등에 명시하는 것 외에도 업무 수행 전 해당 내용에 대한 보안교육을 실시하여 내부 규정 및 관련 +정보보호 책임에 대하여 사전에 안내하여야 한다. +§ 사전에 관련 법규 준수, 책임 및 의무, 누출금지 대상정보, 업무 종료 시 모든 권한 및 제공 자료 회수, 정보 노출 +시 책임 및 처벌에 관한 사항 등을 고지하여야 한다. +§ 보안서약서 등 관련 규정사항을 안내할 때는 다음 사항을 포함하여 안내·교육하여야 한다. +- 외주용역업체 작업장소에 대한 보안요구사항 +- 지정된 장소에서 설치된 지정된 단말기에서만 접속 +- 지정된 단말기로 업무 목적 외에 인터넷 접속 차단 +- 접속기록 1년이상 보관에 관한 사항 +- 해당 업무 담당자 보안통제 하에 시설·서비스 이용 +- 누출금지 대상정보 목록 +- 정보누출 및 문제 발생 시 법적 책임 사항 +- 누출금지 정보 외 산출물을 제3자에게 제공할 경우 발주자의 승인절차 등 + + +![이미지 65-0](images/p0065_img0.png) + + +--- + +| 한국인터넷진흥원 | +66 +※ 누출금지 대상정보 (예시) +- 기반시설 내·외부 IP주소 현황 +- 시스템 구성 현황 및 정보통신망 구성도 +- 정보시스템 접근권한 정보 +- 정보통신망 또는 정보시스템 취약점 분석·평가 결과물 +- 산출물 및 관련 프로그램 소스코드(외부 유출 시 국가안보 등 피해가 우려되는 중요 용역사업인 경우) +- 암호가 주기능인 제품 및 정보보호시스템 도입·운용 현황 +- 정보보호시스템 및 네트워크 장비 설정 정보 +- 비공개 대상 정보로 분류된 해당 기관의 내부 문서 +- 개인정보 +- 비밀 및 대외비 등 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한) +공공기관 +국가 정보보안 기본지침 제12조(보안대책 수립), 제13조(제안요청서 기재사항), +제26조(용역업체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제40조(외부주문등에 대한 감독 및 검사) +전자금융감독규정 제60조(외부주문등에 대한 기준) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.3.2 외부자 계약 시 보안, + +#### 2.4.5 보호구역 내 작업 + +확인 대상(예시) +☐외주용역 보안관리 요구사항 (예: 발주서 표기 및 사업 착수 전 통지) +☐(참고 자료 제4호) 외부 용역업체 보안관리 준수사항 + + +![이미지 66-0](images/p0066_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +67 +A-31 +관리적 분야 > 7. 외부자보안 +외부자가 계약서, 협정서, 내부정책에 명시된 정보보호 요구사항을 준수하고 있는지 주기적으로 점검 +또는 감사를 수행 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 기반시설에 접근하는 외주용역 등의 외부자에 대해 계약서, 협정서, 내부정책에 명시된 정보보호 요구사항에 +따라 보안관리가 이루어지는지 주기적으로 점검 및 감사를 수행하고 그 결과를 보고하여야 한다. +§ 외주용역은 정보화 사업 이외에도 기반시설에 대한 공사, 유지보수 등의 사업도 포함되어야 한다. +§ 외주용역 보안관리 기준은 관계 법규에서 정하는 기준을 따르되 만약 해당 기준이 정의되어 있지 않다면 참고 +자료 등을 활용하여 자체적인 외주용역 보안관리 기준을 수립하고 이를 바탕으로 점검을 수행할 수 있다. +고려 사항 +§ 정보보호 요구사항 준수여부 확인 시 다음 사항을 고려하여 주기적으로 점검 또는 감사를 수행하여야 한다. +- 계약서에 명시된 요건 및 계약 시 작성한 보안서약서에 따른 보안 요구사항 준수 여부 +- 중요정보 및 누출금지 대상정보 외부 유출 여부 확인 +- 외부자의 정보보호 역량, 자체 시스템 보유 여부, 처리하는 정보의 수량 및 민감도 등을 고려하여 점검 주기 및 방법 결정 +- 업무 시작 전, 업무 수행 중, 계약 및 업무 종료 시점에 외부자에 대한 점검 및 감사를 진행하되 필요한 경우 수시로 진행 가능 +§ 외부인력이 자체적으로 정보보호 책임자를 지정하여 점검을 수행한 경우 그 결과를 주기적으로 보고받아야 한다. +§ 공공기관, 금융회사 등은 관련 법규에서 규정하는 외주용역 보안관리 기준을 준용하도록 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한) +공공기관 +국가 정보보안 기본지침 제26조(용역업체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제40조(외부주문등에 대한 감독 및 검사) +전자금융감독규정 제60조(외부주문등에 대한 기준) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.3.3 외부자 보안 이행 관리 + + +![이미지 67-0](images/p0067_img0.png) + + +--- + +| 한국인터넷진흥원 | +68 +확인 대상(예시) +☐외주용역 보안관리 기준(예: 지침 또는 절차) +☐정보통신 기반시설에 대한 외주용역 현황(계약서, 업체목록, 사업명, 기간, 투입인원명단 등) +☐외주용역에 대한 사업자 자체 보안점검 결과 +☐발주기관이 직접 외주용역에 대하여 수행한 보안점검 결과 +☐(서식 예시 제27호) 수탁자 대상, 보안 점검표 +☐(서식 예시 제28호) 중요정보 파기 확인서 + + +![이미지 68-0](images/p0068_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +69 +A-32 +관리적 분야 > 7. 외부자보안 +외부자의 보안 관련 사항 위반이나 침해사고 발생 시, 이에 따른 조치 수행 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 외부자가 법령과 규제 및 내부정책에 따른 정보보호 책임과 의무를 위반한 경우에 대한 처벌 규정을 +수립하여야 한다. +§ 정보보호에 관한 책임사항, 책임범위, 보안대책, 위반 시 손해배상 책임, 누출금지 대상정보 등을 계약서에 +기록하고, 보안 위반 사항 적발 또는 침해사고 발생 시, 경위 확인 후 위규처리 기준에 따라 조치한 뒤 재발방지 +대책을 요구하여야 한다. +고려 사항 +§ 외부자에 대한 점검 또는 감사 결과를 공유하고 발견된 문제점에 대하여 개선계획 및 재발방지 대책을 +수립·이행하고 개선 조치 완료 여부에 대한 이행점검을 수행하여야 한다. +§ 위반 사항이 적발된 경우 내부 절차에 따른 조치를 수행하고 필요한 경우 전사 공지 또는 교육 사례로 활용할 +수 있다. +§ 위반사항이나 침해사고 결과가 중대하다고 판단되는 경우 외부자의 해당 업체 경영진에게 관련 사실을 +통보하고 계약 제한 등의 제재를 조치하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한) +공공기관 +국가 정보보안 기본지침 제26조(용역업체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제40조(외부주문등에 대한 감독 및 검사) +전자금융감독규정 제8조의2(정보보호위원회 운영), 제60조(외부주문등에 대한 기준) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.3.3 외부자 보안 이행 관리 + + +![이미지 69-0](images/p0069_img0.png) + + +--- + +| 한국인터넷진흥원 | +70 +확인 대상(예시) +☐용역수행 주체에 대한 벌칙 사항 문건(예: 입찰 공고서, 계약 문서, 자체 규정 등) +☐위반 또는 침해사고에 따른 벌칙 적용 공문 +☐(참고 자료 제5호) 사업자 보안위규 처리기준 (예시) +☐(참고 자료 제6호) 사업자 보안위약금 부과 기준 (예시) + + +![이미지 70-0](images/p0070_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +71 +A-33 +관리적 분야 > 7. 외부자보안 +외부자의 계약만료, 업무 종료, 담당자 변경 시 자산 반납, 접근권한 삭제 및 비밀유지 확약서 작성 등이 +이루어질 수 있도록 보안대책을 수립·이행 +관련 조직 +정보보호 부서, 인사 부서 +세부 설명 +§ 외부자 계약만료, 업무 종료, 담당자 변경 시 공식적인 절차에 따른 자산 반납, 정보시스템 접근권한 삭제, +중요정보 파기, 비밀유지 확약서 징구 등이 적시에 이루어질 수 있도록 보안대책을 수립·이행하여야 한다. +고려 사항 +§ 담당조직이 외부자 계약만료, 업무 종료, 담당자 변경이 발생하였음을 신속하게 인지할 수 있도록 정보공유 +방안 마련 방안을 마련하여야 한다. +§ 외부자 계약 만료 시 위탁 업무와 관련하여 외부자가 중요정보 및 개인정보를 보유하고 있는지 확인하고 이를 +회수·파기할 수 있도록 절차를 수립·이행하여야 한다. +§ 업무 종료 후 최종 산출물 등 대외보안이 요구되는 자료는 대외비 이상으로 작성하여 관리하고 불필요한 +자료는 삭제 및 폐기하여야 한다. +§ 외부자에게 제공한 자료, 장비, 산출물, 접근권한 등 용역과 관련된 모든 자료 및 물리적·기술적 권한은 전량 +회수하고 업체에 복사본 등으로 별도 보관하는 것을 금지하여야 한다. +§ 업무 및 계약 종료 후 기반시설 관련 노트북·휴대용 저장매체 등 전자기록 저장매체는 복원이 불가능한 +방법으로 완전 삭제 후 반출하여야 한다. +§ 관련자료 회수 및 삭제조치 후 관련 자료를 보유하고 있지 않다는 대표자 명의의 확약서 등을 징구 받아야 한다. +§ 관계 법규 +공통 +정보통신 기반시설 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제26조(용역업체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제40조(외부주문등에 대한 감독 및 검사) +전자금융감독규정 제60조(외부주문등에 대한 기준) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제50조의3(영리목적의 광고성 정보 전송의 위탁 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.3.4 외부자 계약 변경 및 만료 시 보안 + + +![이미지 71-0](images/p0071_img0.png) + + +--- + +| 한국인터넷진흥원 | +72 +확인 대상(예시) +☐위탁 보안관리 지침, 체크리스트 등 +☐외부자 계약종료 및 변경 절차서 +☐계약 종료 및 변경 시 자산 및 계정 반납관리대장 +☐외부자 정보보호 및 개인정보보호 서약서 +☐외부자 비밀유지 확약서 +☐파기 확인서 +☐(서식 예시 제29호) 외부자 보안서약서 + + +![이미지 72-0](images/p0072_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +73 +08 +교육 및 훈련 +A-34 +관리적 분야 > 8. 교육 및 훈련 +정보보호 인식제고를 위한 교육 및 훈련 계획을 종합적으로 수립하여 정기적으로 실시 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보보호 교육 대상(예: 임직원 및 외주용역인원 포함)에 대하여 연 1회 이상 교육훈련을 위한 연간 계획을 +수립하여야 한다. 이 경우 개인정보 보호교육과 같은 법정 교육 또한 해당 연간 계획에 포함한다. +§ 연간 정보보호 교육 계획은 교육의 시기, 기간, 대상, 내용, 방법 등의 내용을 구체적으로 포함하여 교육 계획을 +수립하고 경영진의 승인을 받아야 한다. +고려 사항 +§ 정보보호 인식제고를 위한 연간 정보보호 교육 계획서의 내용에는 다음 사항을 고려할 수 있다. +※ 연간 정보보호 교육 계획서 고려사항 (예시) +- 근거 법규 : 정보통신기반보호법 및 관계 법규 +- 교육 대상 : 임직원, 관련 외부자 +- 교육 내용 : 정보보호 인식제고, 주요직무자 및 수탁자 교육 등 +- 교육 시기 : 최소 연 1회 이상 +- 교육 방법 : 집합식 교육, 온라인 동영상 및 실시간 교육 등 +- 기타 사항 : 불참자에 대해 추가 교육 및 온라인 교육 시행, 외부인력 자체 교육 시행 등 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한), 제28조(개인정보취급자에 대한 +감독), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제9조(정보보안교육) + + +![이미지 73-0](images/p0073_img0.png) + + +![이미지 73-1](images/p0073_img1.png) + + +--- + +| 한국인터넷진흥원 | +74 +확인 대상(예시) +☐연간 정보보호 교육계획서 +☐정보보호 교육 결과 보고서(예: 교육대상, 참석증적 등) +☐(서식 예시 제5호) 정보보호 교육 참가자 명단 +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.4 인식제고 및 교육훈련 + + +![이미지 74-0](images/p0074_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +75 +A-35 +관리적 분야 > 8. 교육 및 훈련 +전체 임직원 및 외부자에 대하여 정보보호 교육 및 훈련 수행 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보보호 교육에 대한 연간 교육 계획 수립, 교육 대상과 이수 시간 등은 관계 법규에 따르며 정보보호 교육 +대상에 대하여 연 1회 이상 교육훈련을 수행하여야 한다. +§ 정보보호 교육내용은 정보보호 중요성, 보안사고사례 및 대응방안, 관련 법률, 내부 보안규정 및 절차에 따른 +역할과 책임, 법적 책임 등 필요한 내용을 모두 포함하여야 한다. +§ 정보보호 교육방법은 집합식, 서면, 온라인 등의 방법 중 적절한 방법을 정하여 교육 참여여부를 확인할 수 +있는 증적(예: 참석자 서명, 온라인교육 로그, 수료증 등)을 교육시행 근거로 확보하여야 한다. +고려 사항 +§ 임직원을 채용하거나 외부자와 신규 계약 시 업무 수행 전에 정보보호 교육을 시행하여 조직 정책, 정보보호 +책임, 규정 위반 시 법적 책임 등에 대한 내용을 숙지할 수 있도록 하여야 한다. +§ 관련 법규 및 내부 규정의 중대한 변경 시 이에 대해 전체 임직원 및 외부자가 알 수 있도록 추가적으로 교육을 +수행하여야 한다. 다만, 사안이 중요하지 않을 경우에는 게시판 공지, 이메일 안내, 책자 배포 등으로 모든 +임직원 및 관련 인력들이 변경 사항을 쉽게 알 수 있도록 안내할 수 있다. +§ 교육 대상으로는 자산에 직·간접적으로 접근하는 임직원, 임시직원, 외주용역업체 직원 등 모든 인력을 +포함하여야 한다. +§ 개인정보보호 교육의 경우 개인정보 배움터 (https://edu.privacy.go.kr/)에서 제공하는 개인정보보호 온라인 +교육을 활용할 수 있다. +§ 교육에 참석하지 못한 인력에 대해서는 불참자 대상 추가 교육, 온라인 교육, 전달 교육 등 방안을 마련하고 +외부 인력이나 파견된 직원인 경우 해당 업체가 직접 교육을 수행하게 하거나 자체적으로 교육 수행할 수 +있도록 교육 자료를 공유하고 시행 여부를 관리·감독하여야 한다. + + +![이미지 75-0](images/p0075_img0.png) + + +--- + +| 한국인터넷진흥원 | +76 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한), 제28조(개인정보취급자에 대한 +감독), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제9조(정보보안교육) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제19조의2(인력, 조직 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.4 인식제고 및 교육훈련 +확인 대상(예시) +☐연간 정보보호 교육계획서 +☐정보보호 교육 수행 자료 +☐정보보호 교육 시행 결과(예: 교육대상, 참석증적 등) +☐(서식 예시 제5호) 정보보호 교육 참가자 명단 + + +![이미지 76-0](images/p0076_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +77 +A-36 +관리적 분야 > 8. 교육 및 훈련 +교육 및 훈련은 대상자의 직위 및 업무 특성에 따라 차등화하여 실시 +관련 조직 +정보보호 부서 +세부 설명 +§ 조직 내 전체 임직원 및 관련 직무자들의 직위 및 업무특성을 파악하여 교육내용, 교육 유형, 교육 방법 등을 +차등화하여 교육 및 훈련을 시행하여야 한다. +고려 사항 +§ 기반시설 업무와 관련하여 정보보호책임자, 정보보호업무 담당자, 정보보호 실무자, 개발자, 일반직원 등 직무 +및 업무 특성을 고려하여 차등화된 교육을 시행할 필요가 있다. +※ 직위 및 업무 특성별 교육 계획·시행 (예시) +대상자 +교육과정(예시) +공통 +정보보호의 이해 +개인정보보호의 이해 +정보보호책임자 +정보보호 전략 수립 +정보보호 거버넌스 +정보보호업무 담당자 +정보보호 수준진단 +정보보호 실무자 +윈도우, 리눅스, 모바일 보안 +웹해킹과 대응 +개인정보 취급자 +개인정보보호법 실무 +개발자 +가명정보 처리의 이해 +소프트웨어 개발 보안 +일반 직원 +해킹메일 대응 +§ 기반시설 업무와 관련하여 직무별 전문성 제고를 위해 관련 콘퍼런스·세미나·워크숍 참가, 전문 교육기관 위탁 +교육, 전문 강사 초빙 등을 통해 별도의 교육을 받을 수 있도록 하여야 한다. + + +![이미지 77-0](images/p0077_img0.png) + + +--- + +| 한국인터넷진흥원 | +78 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한), 제28조(개인정보취급자에 대한 +감독), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제9조(정보보안교육) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.4 인식제고 및 교육훈련 +확인 대상(예시) +☐연간 정보보호 교육 계획 중 교육대상별 교육방안 +☐교육대상별 교육 실시 이력 +☐직무별 교육 수행 자료 +☐(서식 예시 제5호) 정보보호 교육 참가자 명단 + + +![이미지 78-0](images/p0078_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +79 +A-37 +관리적 분야 > 8. 교육 및 훈련 +교육 및 훈련의 효과가 측정, 분석되어 차기 교육 및 훈련에 반영 +관련 조직 +정보보호 부서 +세부 사항 +§ 교육 수행 후 그 효과 여부에 대한 측정(예: 설문, 시험 등)을 실시하여 발견된 문제점이 차기 교육에서 +재발하지 않도록 하여야 한다. +§ 이를 위해, 정보보호 인식교육은 교육 후 설문평가 등을 통해 교육효과를 측정하고 그 결과를 분석해서 차기 +교육계획을 수립하는데 활용하여야 한다. +고려 사항 +§ 교육시행 후 교육 공지, 교육자료, 교육 참석자 목록 등과 같은 기록을 남기고, 미리 마련된 평가기준에 따라 +설문 또는 테스트 등을 통해 교육 내용 및 방법이 각 직무별 보안기준 준수 역량 제고에 적합하고 +효과적이었는지 평가하여야 한다. +§ 교육평가 결과 내용에서 도출된 문제점에 대한 대책을 마련하고 차기 교육 계획 수립 시 반영하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제26조(업무위탁에 따른 개인정보의 처리 제한), 제28조(개인정보취급자에 대한 +감독), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제9조(정보보안교육) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.4 인식제고 및 교육훈련 + + +![이미지 79-0](images/p0079_img0.png) + + +--- + +| 한국인터넷진흥원 | +80 +확인 대상(예시) +☐정보보호 교육 평가 서식(예: 설문지) +☐정보보호 교육 수행 설문결과(예: 설문지 원문, 설문분석 결과) +☐교육결과(미흡사항 있는 경우 그 내용 포함) 보고 문건 +☐정보보호 교육 개선사항 포함 여부 +☐(서식 예시 제35호) 보안교육 설문지 +☐(서식 예시 제36호) 보안교육 설문분석도구 (Excel) + + +![이미지 80-0](images/p0080_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +81 +A-38 +관리적 분야 > 8. 교육 및 훈련 +유관기관에서 공유한 보안공지·권고문 등에 대한 내용을 임직원 및 외부자에게 공유하고 조치요령을 +안내 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보보호 환경 변화에 따라 심각한 또는 주의가 요구되는 보안권고, 보안패치, 취약점조치 등이 관계 기관 및 +보안기관을 통해 전파되면 해당 내용을 관계자에게 관련 보안공지를 전달하여야 한다. +§ 한국인터넷진흥원 및 관리기관 등을 통해 보안공지가 전달된 경우, 지체없이 관계 직원에게 해당 내용을 +전달하여 심각한 보안패치, 취약점 등이 신속히 조치될 수 있도록 한다. +고려 사항 +§ 관계 기관, 보안기관에서 직접 보안권고 사항을 보내주지 않더라도 한국인터넷진흥원이 운영하는 KISA +보호나라&KrCERT/CC(https://www.krcert.or.kr), 국가정보원이 운영하는 국가사이버안보센터 (www.ncsc.go.kr)의 +보안권고문을 직접 확인할 수 있으므로 이를 활용하여 공지한다. +[그림8] 한국인터넷진흥원 웹사이트의 보안권고문 + + +![이미지 81-0](images/p0081_img0.png) + + +![이미지 81-1](images/p0081_img1.png) + + +--- + +| 한국인터넷진흥원 | +82 +[그림9] 국가정보원 웹사이트의 보안권고문 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제26조(용역업체보안), 제36조(취약점 조치), 제74조(단말기 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산), 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.4 인식제고 및 교육훈련, + +#### 2.10.8(패치관리), 2.11.2(취약점 점검 및 조치) + +확인 대상(예시) +☐관계 기관, 보안 기관 등에서 공지한 보안 권고 사항 공유 이력 +☐보안공지·권고문 공유 현황(예: 그룹웨어, 이메일 시스템) + + +![이미지 82-0](images/p0082_img0.png) + + +![이미지 82-1](images/p0082_img1.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +83 +09 +인증 및 권한관리 +A-39 +관리적 분야 > 9. 인증 및 권한관리 +담당업무에 따라 시스템에 접근할 수 있는 사용자 계정 및 접근권한 부여 방법과 범위 등을 정의 및 이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설에 접근할 수 있는 사용자의 직무 및 담당업무에 따라 계정 및 접근권한 부여를 달리하고 접근권한의 +범위를 결정할 수 있는 방법 등을 정의하여 지침 또는 절차 형태로 문서화하여야 한다. +§ 사용자 계정 및 접근권한의 관리 범위는 기반시설 관련 모든 내부 시스템(예: 서버, 네트워크 장비, 보안 장비 +등), 서비스(예: 업무시스템(Application), 홈페이지 등), 모바일기기(예: 스마트폰, 태블릿PC 등), PC(노트북 +포함)와 내부망에 대한 유·무선 네트워크 접근통제를 포함하여야 한다. +고려 사항 +§ 기반시설에 접근이 가능한 사용자에 대해 분류하고 각 사용자의 직무 및 담당업무에 따라 접근권한, 접근 +범위를 부여할 수 있도록 정의하여야 한다. +※ 접근권한 범위 분류 (예시) +- 사용자 계정별 +- 직무 및 업무 형태별(인사 담당자, 정보보호 담당자, 시스템 관리자, 경영진, 외부자, 임시직원 등) +- 시스템 기능별(관리 기능, 서비스 기능, 조회 기능, 보안 기능 등) +§ 기반시설 관련 중요정보에 대한 접근권한은 알 필요(need-to-know), 할 필요(need-to-do)의 원칙에 따라 업무상 +반드시 필요한 범위에 한하여 최소한의 권한만을 차등 부여하여야 한다. +§ 불필요하거나 과도하게 권한이 부여되지 않도록 직무별 접근권한을 세분화하여야 한다. + + +![이미지 83-0](images/p0083_img0.png) + + +![이미지 83-1](images/p0083_img1.png) + + +--- + +| 한국인터넷진흥원 | +84 +§ 사용자 계정을 등록·변경·삭제하는 경우 공식적인 절차를 수립하여야 하며 다음 절차들을 포함하여야 한다. +- 계정 발급에 대한 타당성 검토 절차 +- 관리자 또는 특수권한 사용자의 계정 발급 및 변경에 대한 타당성 검토 절차 +- 발급된 계정의 접근 범위 및 권한 등에 대한 사항 검토 절차 +- 퇴사, 직무이동 등 인사정보 변경 시 계정 삭제에 대한 절차 +- 접근권한 부여·변경·말소 기록에 대한 보관 절차 +- 계정 및 접근권한 등록·변경·삭제 절차에 관한 책임자의 승인 절차 +- 외부자 및 임시 사용자에 대한 임시 계정 발급 절차 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제5조(접근 권한의 관리), 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제53조(서버 보안), 제75조(계정 관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.5.1 사용자 계정 관리, 2.5.5 +특수 계정 및 권한 관리 +확인 대상(예시) +☐사용자 계정 및 접근 권한 관리 지침 +☐사용자 계정 및 권한 관리대장 +☐정보시스템별 접근권한 분류표 +☐사용자 계정 및 권한 신청서 +☐(서식 예시 제39호) 계정등록(변경·삭제) 신청서 + + +![이미지 84-0](images/p0084_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +85 +A-40 +관리적 분야 > 9. 인증 및 권한관리 +내·외부에서 시스템 접근 시 안전한 사용자 인증 방법을 사용하고 이에 따라 이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 서버 등의 정보시스템에 대한 관리자 및 사용자에 대한 안전한 로그인 및 비밀번호 규칙, 단말기 접속 위치 +제한, 1인 1계정 사용 등 사용자 식별 및 인증수단의 안전한 적용 관리 정책을 마련하고 이에 따라 이행하여야 +한다. +고려 사항 +§ 관계 법규에 따라 ID, 비밀번호 이외의 강화된 사용자 인증방식(예: 인증서, OTP, I-PIN, 휴대폰인증 등)을 +요구하는 경우 정보시스템에 따라서 강화된 사용자 인증방식을 적용하여야 한다. +※ 사용자 인증방식 (예시) +- Type1. 지식기반 인증방식 : 비밀번호 등 +- Type2. 소유기반 인증방식 : 인증서(PKI), 일회용 비밀번호(OTP), 스마트 카드, 보안토큰 등 +- Type3. 생체기반 인증방식 : 지문·홍채·얼굴 인식, FIDO(Fast Identity Online) 등 +- 기타 인증 방식 : IP주소·MAC주소·단말기 시리얼 번호·위치정보기반 등으로 사용자 인증 보완통제 적용 +- 생체기반 인증방식 사용 시 생체인증정보는 안전하게 보관 +§ 싱글사인온 등 다양한 시스템에 대한 사용자 인증을 용이하게 하는 시스템을 운영하는 경우 병목 및 침투(인증 +도용 등) 시 피해 확대 가능성이 있으므로 별도의 보안대책(주요 시스템 재인증, 강화된 인증 적용 등)을 +마련하여야 한다. +§ 사용자 인증수단만을 적용하는 경우 통신 보안을 위한 암호화 기술의 추가 적용이 필요할 수 있으므로 보안성 +강화를 위하여 필요 시 안전한 접속수단(VPN 또는 전용선 등)도 고려하여야 한다. + + +![이미지 85-0](images/p0085_img0.png) + + +--- + +| 한국인터넷진흥원 | +86 +§ 안전한 사용자 인증 체계를 구축하기 위해 다음 사항을 참고하여 계정 도용 및 불법적인 인증 시도를 방지하는 +방안을 마련하여야 한다. +구분 +설명 +비고 +인증 실패 횟수 제한 +일정 횟수 이상 인증 실패 시 접속 중단 +Ÿ 사용자 계정 잠금 등의 조치를 취하거나 +추가적인 인증수단을 적용하여 정당한 접근 +권한자인지 확인 +Ÿ 다시 접속하고자 할 때에도 최초의 로그인과 +동일한 방법으로 접속 +접속 유지시간 제한 +접속 후 일정시간 이상 업무처리를 하지 않은 +경우 자동 접속 차단 +Ÿ 업무용 PC의 화면 보호기 등은 접속차단에 +해당하지 않음 +동시 접속 제한 +동일 계정으로 동시 접속 시 접속 차단 또는 +알림 +- +불법 로그인 시도 +경고 +비정상적인 로그인 시도 시 접속 차단 및 +알림 발송 +Ÿ 미등록 IP 주소 및 새로운 기기에서 접속 시 +차단하거나 추가 인증을 요구할 수 있음 +Ÿ 다중 로그인 시도 시 관리자에게 알림 +Ÿ 주말 및 야간 접속, 관리자 등 특수 권한 +사용자 로그인 시 이메일 및 문자 알림 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제5조(접근 권한의 관리), 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제75조(계정 관리), 제76조(비밀번호 관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), +전자금융감독규정 제14조(정보처리시스템 보호대책), 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.5.3 사용자 인증 +확인 대상(예시) +☐시스템 로그인 화면 +☐로그인 실패 횟수 제한 및 로그인 실패 메시지 화면 +☐정보시스템 계정 생성·변경·삭제 승인 절차 + + +![이미지 86-0](images/p0086_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +87 +A-41 +관리적 분야 > 9. 인증 및 권한관리 +시스템에 대한 안전한 사용자 비밀번호 관리 절차 및 작성규칙 수립·이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설 내 정보시스템 사용자의 안전한 비밀번호 관리를 위한 관리절차 및 작성규칙을 수립하여 적용하여야 +한다. +고려 사항 +§ 안전한 비밀번호는 제3자가 쉽게 알아내기 어려운 조합으로 구성되어야 하며, 비밀번호 작성 규칙은 하단의 +예시를 참고하되, 서비스의 특성 및 위험도 등을 고려하여 적절한 수준으로 적용하여야 한다. +기준(예시) +설명 +조합 규칙 적용 +Ÿ 알파벳 대문자와 소문자, 숫자, 특수문자 중 3종류 이상을 조합하여 최소 8자리 이상 +Ÿ 1종류의 문자로만 구성한 경우 최소 10자리 이상 +※단, 숫자로만 구성할 경우 취약할 수 있음 +변경 주기 설정 +Ÿ 비밀번호 유효기간을 설정하여 주기적으로 변경 +※단, 주기적 변경 여부 및 변경 주기는 위험평가 결과 등을 고려하여 자체적으로 결정 +※비밀번호가 제3자에게 노출되었을 경우에는 지체없이 변경하여야함 +추측하기 쉬운 +비밀번호 설정 제한 +Ÿ 동일한 문자 또는 숫자 반복, 키보드 상에서 나란히 있는 문자열, 일련번호, 연속적인 숫자, +생일, 전화번호 등 추측하기 쉬운 개인정보 및 아이디와 비슷한 비밀번호 사용 제한 +동일한 비밀번호 +재사용 제한 +Ÿ 비밀번호 변경 시 이전에 사용한 비밀번호 재사용 제한 +비밀번호 공유 제한 +Ÿ 동일한 비밀번호를 여러 사람이 공유하여 작성·사용하는 것 제한 + + +![이미지 87-0](images/p0087_img0.png) + + +--- + +| 한국인터넷진흥원 | +88 +※ 비밀번호 관리절차 (예시) +- 비밀번호 작성규칙 수립 +- 주기적으로 비밀번호 변경 및 점검 +- 시스템 도입 시 설정된 초기 및 임시 비밀번호 변경 후 사용 +- 비밀번호 입력 시 마스킹(‘****’ 또는 ‘●●●●’ 표시 등) 처리 +- 종이, 파일, 기기 등에 비밀번호 기록을 제한하고 필요한 경우에는 암호화 등의 보호대책 적용 +- 침해사고 발생 또는 노출 의심 시 지체없이 비밀번호 변경 +- 비밀번호 변경 시 본인확인 절차 수행 +- 관리자 및 특수권한 계정의 비밀번호는 비밀등급에 준하여 관리 등 +§ 비밀번호 외의 인증수단을 사용할 경우 해당 인증수단이 비인가자에게 탈취되거나 도용되지 않도록 +보호대책을 적용하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제5조(접근 권한의 관리) +공공기관 +국가 정보보안 기본지침 제76조(비밀번호 관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제19조의2(사용자 인증수단 관리), 제34조의2(이용자 비밀번호 관리) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.5.5 비밀번호 관리 +확인 대상(예시) +☐비밀번호 관리 절차 및 정책 +☐정보시스템에 설정된 비밀번호 규칙 +☐정보시스템 및 홈페이지 비밀번호 설정 화면 + + +![이미지 88-0](images/p0088_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +89 +A-42 +관리적 분야 > 9. 인증 및 권한관리 +시스템에 대한 사용자 계정 및 접근권한의 적정성 검토 기준, 검토 주체, 검토 방법, 주기 등을 수립하여 +정기적 검토를 이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설 정보시스템에 등록된 사용자 계정이나 접근권한이 적절하게 할당되었는지 검토 기준, 검토주체, 검 +토방법, 주기 등을 수립하여 정기적으로 검토하여야 한다. +§ 정보시스템과 중요정보에 대한 사용자 계정 및 접근권한의 생성·할당·이용·변경·제거·말소 등 이력을 문서화 +하고 보관하여야 한다. +§ 사용자 계정 및 접근권한 검토 결과 인사정보에 변경사항이 있거나 불필요한 계정 및 접근권한 등의 사항이 발 +견된 경우 재조정하기 위한 절차를 수립하고 이행하여야 한다. +고려 사항 +§ 사용자 계정 및 접근권한에 대한 신청정보(신청자, 신청일시, 사용기간 등), 승인정보(승인자, 승인·거부 사유 +등), 등록정보(등록일, 등록방법 등), 관리정보(대상 시스템, 권한명, 권한내역 등) 등 필요한 사항을 모두 포함 +하여 책임추적성을 확보할 수 있도록 기록하여야 한다. +§ 접근권한 기록은 법적 요구사항 등을 반영하여 최소 3년간 보관하여야 한다. +§ 사용자 계정 및 접근권한의 적정성 검토 기준, 검토주체, 검토방법, 주기 등을 수립하여 정기적 검토를 이행하 +여야 하며 검토주기는 반기 1회 이상 수행하는 것을 권고한다. +※ 계정 및 접근권한 검토 시 고려사항 (예시) +- 기반시설의 환경변화 반영 여부 +- 퇴직, 직무변경, 휴직 등 인사 변경 여부 +- 인사변경 여부에 따라 계정 및 접근권한 회수, 재조정 사항 +- 직무변경 시 기존 권한 회수 및 신규 업무 권한 부여 절차 여부 +- 외부 인력에 발급·할당된 계정 현황 +- 임시 계정 발급·할당·회수 절차 관리 여부 +- 업무 수행에 필요한 최소한의 권한 부여에 관한 사항 +- 계정 및 접근권한 할당 시 절차 준수 여부 +- 계정 및 접근권한 관리대장과 실 시스템 계정 및 권한 일치 여부 +- 장기간 미사용 계정(3개월 이하 권고)에 대한 현황 조사 및 조치 여부 + + +![이미지 89-0](images/p0089_img0.png) + + +--- + +| 한국인터넷진흥원 | +90 +§ 검토 결과 권한의 과다 부여, 절차 위반, 권한 오·남용 등 문제가 발견된 경우 소명요청 및 원인분석 및 +소명요청, 보완대책 마련, 보고체계 등 포함한 절차를 마련하고 시행하여야 한다. +§ 계정 및 접근권한 검토 후 변경사항에 대해서는 사용자 및 관리자 등에게 통지하고 문제의 근본 원인을 +분석하여 재발 방지 대책을 수립하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제5조(접근 권한의 관리), 제16조(공공시스템운영기관의 접근 권한의 관리) +공공기관 +국가 정보보안 기본지침 제73조(개별사용자 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.5.6 접근권한 검토 +확인 대상(예시) +☐사용자 계정 및 접근권한 검토 기준·절차 +☐사용자 계정 및 접근권한 검토 내역·결과 보고서 +☐접근권한에 대한 문제 발견 시 조치 내역 + + +![이미지 90-0](images/p0090_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +91 +10 +접근통제 +A-43 +관리적 분야 > 10. 접근통제 +네트워크 접근통제 유지를 위해 접근권한 통제, 원격접속 관리, 네트워크 분리 등의 내용을 포함한 +네트워크 운영 보안 정책을 수립·이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 조직 내 접근할 수 있는 모든 네트워크 경로를 식별하고 네트워크에 대한 비인가 접근과 같은 위험을 효과적으 +로 예방하고 대응할 수 있도록 네트워크 운영 보안정책을 수립·이행하여야 한다. +§ 네트워크에 대한 운영보안 지침과 절차는 문서화(접근통제 정책, 원격접근 통제, 네트워크 분리 등의 내용 포 +함)되고 제·개정에 대한 승인절차와 개정이력 관리가 이루어져야 한다. 또한 해당 지침과 절차에 따른 네트워 +크 운영 보안이 유지되도록 하여야 한다. +§ 해당 지침과 절차의 내용은 관계 법규에서 요구하는 사항을 반영하도록 하여 법적 준거성을 확보할 수 있도록 +하고 법규 개정에 따른 지침 및 절차의 개정도 이루어져야 한다. +고려 사항 +§ 네트워크 운영보안이란 접근권한 통제, 원격운영 관리, 네트워크 망분리, 네트워크 장비 도입, 성능 및 +용량관리, 장애관리, 무선네트워크 보안, 백업관리, 취약점 점검, 정보전송 정책, 저장매체 관리, 패치관리, +로그관리 및 모니터링 등의 네트워크 운영 전반의 보안을 의미한다. +§ 네트워크 운영보안 지침 또는 절차에 해당하는 각각의 운영업무에 대해 보안업무와 관련된 원칙과 절차를 +규정하여야 한다. +※ 네트워크 운영업무 별 고려사항 +구분 +설명 +고려사항 +네트워크 접근통제 +네트워크 시스템에 접근이 허용되는 사용자, +접속 위치, 접근 방법 등을 정의하여 보안정책을 +수립·이행하여야 한다. +Ÿ 사용자 계정 및 접근 권한 신청·승인 절차 +Ÿ 계정 사용 현황에 대한 정기적인 검토 +Ÿ 접속자 IP 주소 제한 등 접속 위치 제한 +Ÿ 관리자 등 특수권한에 대한 인증수단(인증서, +OTP 등) 고려 +Ÿ SSH, SFTP 등 안전한 접근 수단 적용 + + +![이미지 91-0](images/p0091_img0.png) + + +![이미지 91-1](images/p0091_img1.png) + + +--- + +| 한국인터넷진흥원 | +92 +구분 +설명 +고려사항 +Ÿ 동일 네트워크 영역 내 서버 간 접속에 대한 +접근통제 사항 등 +원격운영 관리 +외부 네트워크를 통한 서버, 네트워크 장비, +보안 장비 등 시스템의 원격운영은 원칙적으로 +금지하여야 한다. 부득이하게 허용하는 경우에는 +다음 사항을 고려하여 정책을 수립·이행하여야 +한다. +Ÿ 시스템의 원격운영에 대한 책임자 승인 +Ÿ 안전한 인증수단(인증서, 생체인증 기술, +OTP 등) 적용 +Ÿ 안전한 접속수단(VPN 등) 적용 +Ÿ 문서 암호화제품(DRM 등) 문서 보호대책 적용 +Ÿ 원격운영 현황 모니터링 +Ÿ 주기적으로 원격접속 기록 분석 및 보고 +Ÿ 원격운영 관련 보안 교육 및 훈련 +Ÿ 백신, 보안패치 등 접속 단말 보안 적용 등 +네트워크 망분리 +내부망과 인터넷 망을 분리하여 운영하고자 할 +경우 +망분리에 +관한 +보안대책을 +수립·이행하여야 한다. +Ÿ 침입차단·탐지시스템 설치 등 비인가자 +침입 차단 대책 +Ÿ 네트워크 접근관리시스템 설치 등 비인가자 +장비 내부망 접속 차단 대책 +Ÿ 내부망 정보시스템 인터넷 접속 차단 대책 +Ÿ 분리된 망간 자료 전송 체계 구축·운영에 +관한 사항 및 전송 기록 보관 사항 등 +보안 장비· +네트워크 장비 보안 +침입차단·탐지시스템, +스위치, +라우터 +등 +기반시설 전반에 영향을 미치는 보안·네트워크 +장비를 안전하게 운용하기 위한 보호대책을 +수립·이행하여야 한다. +Ÿ 물리적으로 안전한 장소에 장비 설치 +Ÿ 장비 +관리자 +및 +지정 +단말기로부터 +접속·관리 허용 사항 +Ÿ 최초 설치 시 디폴트 계정 삭제·변경 +Ÿ 관리자 계정 별도로 생성·운영 +Ÿ 불필요한 서비스 포트, 개별 사용자 계정 +차단·삭제 +Ÿ 장비 취약점을 정기적으로 점검, 최신 버전 +유지 +무선 네트워크 보안 +무선 네트워크를 구축·운영할 경우 무선 AP +및 네트워크 구간 보안을 위한 보호대책을 +수립·이행하여야 한다. +Ÿ 무선침입방지시스템 설치 등 침입 차단 대책 +Ÿ 무선 +네트워크 +구성요소 +별 +분실·탈취·훼손·오용 +등에 +대비한 +관리적·물리적 보안대책 +Ÿ 허용되지 않은 시스템이 해당 무선 네트워크 +접속 방지 위한 기술적 보안대책 +Ÿ 무선AP의 관리자 접근 통제 +Ÿ SSID 숨김 기능 설정 +Ÿ IEEE 802.1X, AAA 등 상호인증 위한 +인증제품 사용 등 + + +![이미지 92-0](images/p0092_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +93 +관계 법규 +공통 +정보통신기반보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제40조(내부망·인터넷망 분리), 제59조(원격근무 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책), 제18조(IP주소 관리대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6. 접근통제 +확인 대상(예시) +☐네트워크 구성도 +☐네트워크 운영 보안 지침 또는 절차 +☐네트워크 운영 보안 지침 또는 절차 제·개정 승인 이력 + + +![이미지 93-0](images/p0093_img0.png) + + +--- + +| 한국인터넷진흥원 | +94 +A-44 +관리적 분야 > 10. 접근통제 +시스템의 목적 및 민감도 등에 따라 네트워크를 분리 운영하고 각 영역 간 접근통제를 적용 +관련 조직 +정보보호 부서 +세부 설명 +§ 시스템의 목적, 자산의 중요도 및 민감도, 법적 요구사항 등에 따라 네트워크 영역을 물리적·논리적으로 +분리(DMZ, 서버팜, DB존, 개발존 등)하여 운영하고 각 영역 간 접근통제를 적용하여야 한다. +고려 사항 +§ 접근통제 정책에 따라 분리된 네트워크 영역 간에는 방화벽, 네트워크 장비의 ACL 등을 활용하여 네트워크 +영역 간 업무수행에 필요한 서비스의 접근만 허용하도록 통제하여야 한다. +§ 기반시설 내 중요시스템을 불가피하게 다른 정보통신망과 연결하여야 하는 경우 외부로부터 침입 및 악성코드 +감염을 방지하기 위해 인터넷과 분리하는 방안을 강구하고 불가피한 사유로 인터넷 연결이 필요한 경우 +보안성검토 등을 통해 보안성을 확보하여야 한다. +§ 네트워크 대역별 IP주소 부여 기준을 수립하고 주요 시스템이 외부와 연결이 필요없는 경우 사설 IP를 +사용하여 외부 접근을 차단하며 IP주소 할당 현황을 최신으로 유지하여야 한다. 이에 대한 사항은 유출되지 +않도록 대외비 이상으로 안전하게 관리하여야 한다. +§ 내부망에서의 주소 체계는 사설 IP주소 체계를 사용하고 NAT(Network Address Translation)를 사용하여 내부 +주소 체계가 노출되지 않도록 관리한다. 사설 IP주소는 국제표준에 따른 대역을 사용한다. +※ 사설 IP 주소 대역 +구분 +대역 +A class + +#### 10.0.0.1 + +~ + +#### 10.255.255.255 + +B class + +#### 172.16.0.1 + +~ + +#### 172.31.255.255 + +C class + +#### 192.168.0.1 + +~ + +#### 192.168.255.255 + + + +![이미지 94-0](images/p0094_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +95 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제40조(내부망·인터넷망 분리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제18조(IP주소 관리대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.1 네트워크 접근 +확인 대상(예시) +☐네트워크 구성도(IP주소 포함) +☐IP주소 관리대장 +☐네트워크 및 방화벽 등의 접근규칙 설정 + + +![이미지 95-0](images/p0095_img0.png) + + +--- + +| 한국인터넷진흥원 | +96 +A-45 +관리적 분야 > 10. 접근통제 +접근통제 규칙은 관리자의 승인을 거쳐서 설정 또는 변경 +관련 조직 +정보보호 부서 +세부 설명 +§ 주요 네트워크 장비에 대한 ACL 및 방화벽의 정책(Rule) 변경이 요구될 경우 내부 승인절차에 따라 정책변경이 +이루어져야 한다. +§ 특히 방화벽 등의 주요 보안 장비에 대한 정책 변경이 이루어지는 경우는 내·외부 서비스에 대한 영향 및 +보안성을 검토하고 방화벽을 운용하는 부서장 등의 승인을 거쳐 변경이 이루어지도록 하여야 한다. +고려 사항 +§ 방화벽 이외에도 접근통제 규칙(예: ACL 또는 Rule)을 적용하는 시스템(서버, 네트워크시스템, 보안시스템 +등)이 있다면 점검대상에 포함하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제40조(내부망·인터넷망 분리), 제42조(보안‧네트워크장비 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.1 변경관리 +확인 대상 +☐네트워크 장비 ACL 변경이력 및 승인 절차 +☐방화벽 접근규칙(Rule) 변경이력 및 승인절차 +☐(서식 예시 제38호) 침입차단시스템 서비스포트 허용/차단 요청서 + + +![이미지 96-0](images/p0096_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +97 +A-46 +관리적 분야 > 10. 접근통제 +접근통제 정책의 적합성 여부에 대해 주기적 검토 +관련 조직 +정보보호 부서 +세부 설명 +§ 접근통제 정책을 주기적으로 검토하여 비인가자에 대한 접근통제 정책이 적합한지 확인하여야 한다. +§ 네트워크 장비, 보안 장비에 적용된 접근규칙(Rule)의 적절성을 주기적으로 검토하여 불필요한 접근규칙을 +제거하는 등의 조치가 이루어져야 한다. +§ 접근통제 정책에 대한 검토 기준은 내부 기본 접근통제 정책을 토대로 자체적인 검토 기준을 수립하여 시행할 +수 있으며, 검토 주기는 검토 대상과 범위에 따라 다를 수 있으나 최소 반기 또는 연간 단위로 정하는 것이 좋다. +§ 이 경우 주요 보안 장비(예: 방화벽)에 대하여 불필요한 관리접근 계정 및 권한 여부를 확인하고 개선하기 위해 +관리접근 계정 및 권한의 타당성 검토도 함께 이루어지도록 하여야 한다. +고려 사항 +§ 본 점검항목은 접근계정에 대한 권한 검토보다는 네트워크 등의 접근통제 정책에 대한 점검을 요구하는 +항목이다. 따라서 다음의 접근통제 규칙(보안 장비 자체의 접근권한 포함) 검토 기준을 참고하여 자체 환경에 +적합한 검토 기준을 수립하도록 한다. +- 불필요한 네트워크 접근통제 규칙 +- 기간이 만료된 방화벽 접근통제 규칙 +- 타 정책과 중복되거나 일부 겹치는 네트워크 및 방화벽 접근통제 규칙 +- 기간이 만료된 IP 차단 정책(1년 이상 된 악성코드 경유지 IP 등) +- 보안 장비 사용자 및 관리자의 불필요한 ID 존재 여부 +- 인원 및 IP 변경에 따른 방화벽 접속 관리 IP 변경 여부 등 +§ 접근통제 정책의 적합성 여부를 검토할 수 있도록 접근통제 정책의 등록‧갱신 시에는 일시, 내용, 대상시스템, +사유, 요청부서(또는 요청자) 등 이력을 기록하여 관리할 필요가 있다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) + + +![이미지 97-0](images/p0097_img0.png) + + +--- + +| 한국인터넷진흥원 | +98 +확인 대상(예시) +☐정보시스템(네트워크 및 보안 장비 포함) 목록표 +☐네트워크 및 보안 장비 접근통제 규칙 주기적 검토 내역 +☐네트워크 및 보안 장비에 대한 관리 계정 권한 주기적 검토 내역 +☐(서식 예시 제37호) 정보보호시스템 접근규칙 검토 결과서 +☐(서식 예시 제30호) 자산목록표 +공공기관 +국가 정보보안 기본지침 제42조(보안·네트워크 장비 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.1 네트워크 접근, 2.6.2 +정보시스템 접근, 2.10.1 보안시스템 운영 + + +![이미지 98-0](images/p0098_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +99 +A-47 +관리적 분야 > 10. 접근통제 +방화벽, 침입탐지시스템 등 안전한 네트워크를 위한 대책을 마련 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 네트워크의 비인가 접근 등 관련 위험을 예방·대응할 수 있도록 네트워크 접근에 대한 보안대책을 수립 +·이행하여야 한다. +§ 인터넷 등 내·외부로부터의 침해위협을 차단하기 위하여 침입차단 및 침입탐지 시스템 등의 네트워크 +접근통제 시스템을 도입 및 운영하여야 한다. +§ 업무영역에서 제어시스템의 운영 관련 정보가 필요한 경우, 제어망에서 업무망으로 전송이 가능하도록 일방향 +전송장비를 설치하여 운영할 수 있으나, 업무망에서 제어망으로의 접근은 원천적 차단으로 보안을 유지하여야 +한다. +고려 사항 +§ 서비스, 사용자 그룹, 자산의 중요도, 법적 요구사항에 따라 네트워크 영역을 물리적 또는 논리적으로 분리하고 +각 영역 간 접근통제를 적용하도록 한다. +§ 접근통제 정책에 따라 분리된 네트워크 영역 간에는 침입차단시스템, 네트워크 장비 ACL 등을 활용하여 +네트워크 영역 간 업무수행에 필요한 서비스의 접근만 허용하도록 통제한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제42조(보안·네트워크 장비 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.1 네트워크 접근 + + +![이미지 99-0](images/p0099_img0.png) + + +--- + +| 한국인터넷진흥원 | +100 +확인 대상(예시) +☐네트워크 구성도 +☐네트워크 및 방화벽 등 접근규칙 설정 +☐침입차단 및 침입탐지 시스템 도입 현황(CC인증서 포함) +☐침입차단 및 침입탐지 시스템 등 정보보호시스템 + + +![이미지 100-0](images/p0100_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +101 +A-48 +관리적 분야 > 10. 접근통제 +외부 네트워크를 통한 원격작업(재택근무, 장애대응 등)에 대한 책임자 승인, 작업내용 및 범위, 기간 +설정, 접근 로그 기록/검토 등이 포함된 정책(절차) 수립·이행 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 서버, 네트워크 장비, 보안 장비, PC 등의 정보시스템 및 내부 업무시스템(Application)에 대해 인터넷 등 +외부통신망을 통한 원격접속을 원칙적으로 금지하여야 하나 재택근무, 장애대응 등의 사유로 원격작업을 +불가피하게 허용하는 경우 사용자의 접근신청, 책임자 승인 등을 포함하여 원격접속 보안 대책(예: 지침 또는 +절차)을 수립하여야 한다. +§ 원격접속 시 통신 구간 암호화, 강화된 사용자 인증 및 안전한 접속수단(예: VPN 등)을 적용하여야 한다. +§ 유지보수 등의 목적으로 인터넷 등 외부에서 대상 시스템에 원격접속이 이루어지는 경우는 상시 접속이 아닌 +해당 업무 기간 및 시간에만 접속이 이루어지도록 하여야 한다. +고려 사항 +§ 인터넷 등 정보통신망을 통하여 외부에서 기반시설에 접속하려는 경우에는 법적 요구사항에 따라 안전한 +인증수단을 적용하여야 한다. +- 안전한 인증수단 적용이란 개인정보처리시스템에 사용자계정과 비밀번호를 입력하여 정당한 개인정보취급자 +여부를 식별·인증하는 절차 이외에 추가적인 인증 수단의 적용을 말함 +- 안전한 인증수단 예시 : 인증서, 보안토큰, 일회용 비밀번호(OTP) 등 +- 개인정보취급자가 정보통신망을 통하여 외부에서 개인정보처리시스템 접속 시 인증수단 적용 관련 법적 요구사항 준수 +관계 법규 +공통 +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제59조(원격근무 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보통신망법 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.6 원격접근 통제 + + +![이미지 101-0](images/p0101_img0.png) + + +--- + +| 한국인터넷진흥원 | +102 +확인 대상(예시) +☐원격접속에 대한 접근통제 기준 지침 또는 절차 +☐원격접속수단(예: VPN) 운용 이력 +☐VPN 운영 현황 +☐원격접속 제한 또는 예외 허용 시스템(예: 방화벽, VPN 등) +☐원격 운영 및 접속에 대한 책임자의 승인(1년 이상 보존) + + +![이미지 102-0](images/p0102_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +103 +A-49 +관리적 분야 > 10. 접근통제 +네트워크를 통해 시스템을 운영하는 경우 원칙적으로 시스템 관리는 내부의 특정 단말기에서만 할 수 +있도록 제한 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 정보시스템을 네트워크 상에서 접근하여야 하는 관리자는 내부의 특정 단말기(업무PC)에서만 대상 시스템을 +접근할 수 있도록 하는 조치(예: IP주소 및 MAC주소 지정)가 이루어져야 한다. +§ 또한 해당 단말은 인터넷을 차단하여 관리용 단말을 통한 외부 해킹(예: 악성코드 감염 등)을 방지하여야 한다. +§ 정보시스템의 가동기록(접속일시, 접속자 등)은 일정기간(예: 1년 이상) 보관하고 주기적(예: 월 1회 이상)으로 +점검하여야 한다. +고려 사항 +§ 관리용 단말이란, 해당 단말을 사용하는 직원이 관리대상 시스템에 대한 운영체제 관리권한(예: root, +administrator 등)을 통해 대상 시스템의 설정, 정보 등을 변경할 목적으로 사용하는 컴퓨터를 의미한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제42조(보안·네트워크 장비 보안), 제52조(지정 단말기를 통한 온라인 유지보수) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제12조(단말기 보호대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.1 네트워크 접근, 2.6.6 원격접근 통제 +확인 대상(예시) +☐정보시스템 보안 정책(또는 지침) +☐정보시스템별 관리용 단말 지정 현황 +☐시스템 관리용 단말(PC) 및 콘솔 +☐정보시스템 가동기록 점검 내역 + + +![이미지 103-0](images/p0103_img0.png) + + +--- + +| 한국인터넷진흥원 | +104 +A-50 +관리적 분야 > 10. 접근통제 +외부에서 내부 시스템의 기능을 사용할 수 있다면 VPN 등 안전한 접속 수단 적용 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 인터넷 등 외부에서 내부 시스템에 대한 접근이 이루어지는 경우, 안전한 접속수단(VPN 등)을 사용하여 +비인가자의 해킹 등 침해사고를 예방하기 위한 보호조치를 적용하여야 한다. +§ 외부 접속 시 안전한 접속수단(예: VPN, 전용망 등) 적요에 관한 사항을 내부 정책에 명시하고, 이를 위한 +장비를 구축하고 운영하여야 한다. +고려 사항 +§ 물리적으로 떨어진 IDC, 지사, 대리점, 협력업체, 고객센터 등과의 네트워크 연결 시 전용회선이나 다음과 +같이 VPN(가상사설망) 등을 활용하여 안전한 접속환경을 구성하여야 한다. +- VPN(Virtual Private Network)은 기업이나 개인이 공중망(인터넷)을 이용하여 경제적이면서도 사설망과 같이 +안전하게 통신할 수 있는 보안 솔루션 +- 통신 상대자들끼리 암호화된 채널을 형성하여 외부에서 데이터 도청 및 변조를 방지 +- 인증서, OTP(One Time Password) 등 사용자 인증방식을 추가하여 원격접속에 대한 보안 강화 가능 +[그림10] 가상사설망 + + +![이미지 104-0](images/p0104_img0.png) + + +![이미지 104-1](images/p0104_img1.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +105 +§ VPN 접근계정은 업무목적에 필요한 최소한의 기간, 권한만을 할당하고 해당 기간이 만료되면 접근할 수 +없도록 설정한다. +§ VPN의 접근통제(ACL) 설정을 통해 업무상 필요한 내부시스템만 외부에서 접근할 수 있도록 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제59조(원격근무 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.1 네트워크 접근, 2.6.6 +원격접근 통제 +확인 대상(예시) +☐네트워크 구성도 +☐VPN 장비의 접근 계정(목록) 및 권한(사용기간, 접속대상 등) 설정 +☐VPN 접근제어 정책 설정 현황 +☐VPN 등 사외 접속 신청서 + + +![이미지 105-0](images/p0105_img0.png) + + +--- + +| 한국인터넷진흥원 | +106 +A-51 +관리적 분야 > 10. 접근통제 +내부망(업무망)과 인터넷망을 분리하여 사용 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 기반시설의 업무망에 대한 외부로부터의 침해 위협을 차단하기 위하여 내부 업무망과 인터넷망은 각각 +분리하여 운영하여야 한다. 이 경우 유선은 물론 무선 인터넷 접속까지 차단할 수 있는 조치(예: PC의 +무선랜카드 제거, 무선방화벽 운영 등)가 함께 이루어져야 한다. +고려 사항 +§ 인터넷망 차단 조치는 물리적 방식(예: 네트워크가 분리된 2대의 PC 구성) 또는 논리적 방식(예: VDI와 같은 +가상화 기술 활용)으로 수행할 수 있으며, 분리된 영역 간에는 접근 통제를 적용하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제40조(내부망·인터넷망 분리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.7 인터넷 접속 통제 +확인 대상(예시) +☐네트워크 구성도 +☐인터넷망 접속에 대한 통제 정책 +☐인터넷망 차단조치 대상자 목록 +☐인터넷 접속기록 모니터링 이력 + + +![이미지 106-0](images/p0106_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +107 +A-52 +관리적 분야 > 10. 접근통제 +망분리 후 안전한 자료전송을 위한 시스템을 도입하여 사용 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 내부 업무망의 인터넷 차단에 따라 외부로 자료 전송이 필요한 경우, 안전한 자료전송을 위한 시스템을 +도입(예: 망간 자료전송시스템)하여 보호조치가 이루어져야 한다. +§ 이 경우, 망간 자료전송 시스템의 관리 설정(예: 용량제한, 기간제한, 파일확장자(포맷) 제한 등)을 통해 오용 및 +남용을 최대한 방지해야 한다. +§ 망간 자료전송 시스템 이용 시, 결재권자의 사전 또는 사후 승인 절차를 마련하고 이를 준수하여야 한다. +§ 망분리된 환경에서 자료 전송의 안전성을 확보하고 보안사고를 사전에 방지하기 위해 자료전송 로그 +(비정상적인 트래픽, 전송실패기록, 승인내역 등)를 주기적으로 모니터링하여야 한다. +고려 사항 +§ 공공기관은 망간 자료전송시스템을 운영하여야 하며, 전송로그와 원본파일 보관기간은 국가정보원 지침에 +규정(원본파일은 3개월 이상, 전송기록은 6개월 이상 유지)을 따라야 한다. +§ 공공기관 이외의 기관은 관계 법규에서 정하는 경우를 제외하고, 자체적인 관리 정책을 설정하여 운영한다. +§ 인터넷망에서 내부망으로 자료 전송이 필요한 경우, 악성프로그램 탐지 등의 조치를 통해 악성코드가 +내부망으로 전파되지 않도록 관리한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +공공기관 +국가 정보보안 기본지침 제40조(내부망·인터넷망 분리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.7 인터넷 접속 통제 + + +![이미지 107-0](images/p0107_img0.png) + + +--- + +| 한국인터넷진흥원 | +108 +확인 대상(예시) +☐망간 자료전송시스템의 (정책)관리 설정 내용 +☐망간 자료전송시스템의 신청·승인내역 및 사용자 이용내역 (정기)검토결과서 +☐자료 전송 로그 모니터링 내역 + + +![이미지 108-0](images/p0108_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +109 +A-53 +관리적 분야 > 10. 접근통제 +인터넷 전화망과 일반 전산망은 분리하여 운용 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 인터넷 전화망(음성 네트워크)을 통한 침해위협으로부터 내부 전산망을 보호하기 위해 인터넷 전화망과 일반 +전산망(데이터 네트워크)은 분리하여 운영하여야 한다. +§ 인터넷 전화망을 이용할 경우 제어신호 및 통화내용 암호화와 함께 인터넷 전화 전용 침입차단시스템 등 +보안대책을 수립하고 시행하여야 한다. +고려 사항 +§ 네트워크 분리는 물리적으로 분리하는 방법도 가능하지만, 경제성 등을 고려할 때 VLAN을 설정하여 +네트워크를 논리적으로 분리하여 그룹 내에서만 통신이 가능하도록 설정할 수 있다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +공공기관 +국가 정보보안 기본지침 제40조(내부망·인터넷망 분리), 제46조(인터넷전화 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제18조(IP주소 관리대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.7 인터넷 접속 통제 +확인 대상(예시) +☐네트워크 구성도(IP주소 포함) +☐방화벽 또는 VLAN이 설정된 네트워크 장비의 해당 접근규칙 +☐인터넷전화(IP전화)망 IP할당 내역 +☐제어신호 및 통화내용 암호화 +☐(참고 자료 제15호) 인터넷 전화망과 전산망의 분리 지침 + + +![이미지 109-0](images/p0109_img0.png) + + +--- + +| 한국인터넷진흥원 | +110 +A-54 +관리적 분야 > 10. 접근통제 +내부에 상주하는 외부자에 대하여 네트워크를 분리하여 운영 +관련 조직 +정보보호 부서, 해당 사업 부서 +세부 설명 +§ 내부에 상주하는 외부자가 사용하는 네트워크는 다른 업무망과 분리하여 운영하여야 하며, 기반시설에 접근 +가능한 내부망에 해당한다면 인터넷 차단 등의 추가 조치를 하여야 한다. +§ 용역사업 수행 중 사용하는 PC 및 서버는 인터넷 연결을 금지하되, 연결이 필요한 경우 기관의 통제하에 +제한적으로 사용하여야 한다. +고려 사항 +§ 파견 근로자가 내부 직원과 동일한 사무실에서 업무하는 경우 내부 직원과 동일한 수준의 보안조치를 +적용하여야 하고, 용역사업 시 내부에 상주하는 외부 직원에게 별도의 사무공간과 업무망과 분리된 +네트워크를 제공하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제26조(용역업체 보안), 제27조의2(발주기관내 작업장소 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제18조(IP주소 관리대책), 제60조(외부주문등에 대한 기준) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.1 네트워크 접근 +확인 대상(예시) +☐네트워크 구성도(외주용역의 업무망 IP주소 포함) +☐네트워크 및 방화벽 등의 접근규칙 설정 +☐네트워크 보안지침 + + +![이미지 110-0](images/p0110_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +111 +A-55 +관리적 분야 > 10. 접근통제 +무선네트워크 사용 시 상급기관장의 보안성 검토를 필하거나 안전한 암호화 알고리즘 및 암호키 설정 +등의 적절한 보안조치를 적용 +관련 조직 +정보보호 부서 +세부 설명 +§ 무선AP(Access Point)를 사용하는 경우 정보통신기기(예: 태블릿PC, 스마트폰 등)를 통해 발생할 수 있는 +불법접속 및 무선해킹 등의 위협으로부터 자산을 안전하게 보호하기 위하여 무선네트워크 도입 및 보안관리 +지침을 수립하여야 한다. +§ 무선네트워크를 신규로 도입·설치할 경우, 관계 법령 등에 따라 보안성검토 또는 승인 절차를 마련하고 무선 +네트워크 구축에 따른 보호대책을 적용하여야 한다. +§ 무선네트워크는 운영 전, 사전에 정의된 네트워크 보안지침에 따라 기술적인 보호조치를 적용하여야 한다. +공공기관은 국가 정보보안 기본지침을 적용하고 금융회사는 전자금융감독규정에 따른 기술적 보호조치를 +적용하여야 한다. +고려 사항 +§ 무선네트워크를 업무적으로 사용하는 경우 무선 AP 및 네트워크 구간 보안을 위하여 인증, 송수신 데이터 +암호화 등 다음의 사항을 고려하여 보호대책을 수립·이행한다. +- 무선네트워크 장비(AP 등) 목록 관리 +- 사용자 인증 및 송수신 시 안전한 암호화 기능 설정(WPA2-Enterprise mode, WPA3-Enterprise mode 등) +- 무선 AP 접속 단말 인증 방안(MAC 인증 등) +- SSID 숨김 기능 설정 +- 무선네트워크에 대한 ACL 설정 +- 무선 AP의 관리자 접근 통제(IP제한) 등 +§ 금융회사의 경우 전자금융감독규정에 따라 전산실 내에는 무선네트워크를 설치하는 것을 원칙적으로 금지한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) + + +![이미지 111-0](images/p0111_img0.png) + + +--- + +| 한국인터넷진흥원 | +112 +확인 대상(예시) +☐무선랜(Wi-Fi 등) 운용 현황(예: 네트워크 구성도, 무선AP 목록 등) +☐무선네트워크 보안지침 또는 가이드 +☐보안성검토 이력 +☐무선AP에 대한 기술적 보호조치 적용 증적(예: 해당 설정화면 캡쳐) +☐무선AP·비인가 무선AP 차단시스템 +☐(서식 예시 제7호) 무선랜 설치 신청서 +☐(서식 예시 제8호) 무선랜 설치 확인서 +☐(서식 예시 제10호) 무선랜 AP 관리대장 +☐(서식 예시 제11호) 무선랜 AP 사용관리대장 +공공기관 +국가 정보보안 기본지침 제43조(무선랜 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제11조(전산실 등에 관한 사항), 제15조(해킹 등 방지대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.5 무선 네트워크 접근 + + +![이미지 112-0](images/p0112_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +113 +A-56 +관리적 분야 > 10. 접근통제 +인가된 임직원만이 인가된 단말을 이용하여 무선네트워크를 사용할 수 있도록 사용 신청 및 해지 +절차를 수립·이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 인가된 임직원만이 인가된 단말을 이용하여 무선네트워크를 사용할 수 있도록 사용 신청 및 해지 절차(사용자 +및 접속 단말 등록 등)를 수립·이행하여야 한다. +§ 퇴직, 기간 만료 등의 사유로 무선네트워크 사용이 필요 없는 경우 접근권한 해지 절차를 통해 지체없이 +접근을 차단하고, 불필요한 권한 여부를 주기적으로 검토하여야 한다. +고려 사항 +§ 외부인의 접근이 가능한 공공장소에서는 무선네트워크를 사용할 때 내부 임직원이 사용하는 무선네트워크와 +분리하여 제공하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제43조(무선랜 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.5 무선 네트워크 접근 +확인 대상(예시) +☐무선네트워크 사용 절차 +☐무선네트워크 사용 신청·승인 이력 +☐(참고 자료 제9호) 무선랜 보안관리 절차서 (예시) +☐(서식 예시 제9호) 무선랜 사용 신청서 +☐(서식 예시 제10호) 무선랜 AP 관리대장 +☐(서식 예시 제11호) 무선랜 AP 사용관리대장 + + +![이미지 113-0](images/p0113_img0.png) + + +--- + +| 한국인터넷진흥원 | +114 +A-57 +관리적 분야 > 10. 접근통제 +무선네트워크 무단 사용 여부, 비인가 무선 중계기(AP) 설치 여부, 우회 정보통신망 사용 차단 여부 +등을 주기적으로 점검 +관련 조직 +정보보호 부서 +세부 설명 +§ 무선네트워크를 운영할 경우, 사전 정의된 네트워크 보안지침을 위반하는 사례가 발생할 수 있으므로 +무선네트워크 AP에 공식적으로 등록되지 않은 이용자나 사용기간이 만료된 이용자가 있는지 등을 +주기적으로 점검하여야 한다. +§ 무선네트워크 AP의 설치 허가를 받지 않고 운영하는 비인가 AP가 있는지 주기적으로 점검하여야 한다. +전문적인 장비가 없어도 노트북의 무선네트워크 카드에 감지되는 AP의 신호 등을 기반으로 인접 공간에 +설치된 비인가 AP를 탐색 하여야 한다. +§ 업무PC를 통해 근거리에 위치한 타 건물, 사무실 등에 설치된 AP를 연결할 경우 기관 내부 네트워크를 +우회하거나 악성코드 감염 등의 위협이 발생할 수 있으므로, 이를 방지하기 위한 보호대책(예: 업무PC의 +무선네트워크 장치 동작 해제)을 고려하여야 한다. +고려 사항 +§ 조직 내 허가받지 않은 무선 AP를 탐지하고 차단하기 위해 WIPS(무선침입방지시스템)를 설치·운영할 수 +있다. WIPS는 비인가 노드의 무선 네트워크 접근을 차단하는 시스템으로 네트워크 보안을 강화하고 무단 +접근 및 잠재적 위협으로부터 자산을 보호하는 기능을 수행한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제43조(무선랜 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제45조(정보통신망의 안정성 확보 등) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.5 무선 네트워크 접근 + + +![이미지 114-0](images/p0114_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +115 +확인 대상(예시) +☐네트워크 구성도 +☐연 1회 이상의 무선네트워크 보안점검 결과서 및 개선 결과 +☐비인가 무선AP 차단시스템 운영 현황 +☐무선AP·비인가 무선AP 차단시스템 +☐(참고 자료 제10호) 무선 AP 점검항목 (예시) + + +![이미지 115-0](images/p0115_img0.png) + + +--- + +| 한국인터넷진흥원 | +116 +11 +운영관리 +A-58 +관리적 분야 > 11. 운영관리 +자산 및 시스템을 신규 도입·개발 또는 변경하는 경우 법, 규제, 계약상의 요구사항을 정의하여 문서화 +관련 조직 +정보보호 부서, 운영관리 부서 +세부 설명 +§ 자산 및 시스템을 신규 도입·개발 또는 변경 시 내부 점검 기준으로 정보보호 규제 준수를 점검하기 위해 관계 +법규 또는 계약상의 보안 요구사항을 정의하여 문서화하여야 한다. (예: 보안성 검토, 보안 적합성 검증) +§ 특히 관계 법규(예: 기반시설의 관리·물리 (기본)점검항목, 기타 법규(예: 공공기관, 금융, 개인정보의 안전성 +확보조치 기준) 등)에서 요구하는 주요 사항을 목록화하여 문서화하고 이를 자체 점검하는데 활용할 수 있도록 한다. +고려 사항 +§ 관계 법규의 제·개정에 따라 법적 요구사항을 반영하여 수립된 내부 정책·지침 등이 변경될 수 있으므로, +보안점검 체크리스트는 수시 또는 주기적으로 재검토 하도록 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제20조(정보통신제품 도입), 제26조(용역업체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.8.1 보안 요구사항 정의 +확인 대상(예시) +☐자산 및 시스템 도입·개발·변경 시 법적 보안 요구사항 목록 +☐자산 및 시스템 도입·개발·변경 관련 내부 보안점검 목록(예: 보안점검 체크리스트) + + +![이미지 116-0](images/p0116_img0.png) + + +![이미지 116-1](images/p0116_img1.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +117 +A-59 +관리적 분야 > 11. 운영관리 +자산 및 시스템을 신규 도입·개발 또는 변경하는 경우 보안성 검토 및 호환성 검토 수행하고 +보안책임자는 이를 확인 및 승인 +관련 조직 +정보보호 부서 +세부 설명 +§ 서버, 네트워크 장비, 보안 장비 등 자산 도입 및 개발 또는 변경 시 발생 가능한 보안 위협을 최소화하기 +위하여 사전 보안성 검토 및 호환성 검토 절차를 거치도록 하여야 한다. +§ 보안성 검토를 위해서는 시스템이 충족하여야 하는 보안요구사항을 사전에 정의하고, 이를 만족하는지 검토한 +후 그 결과에 따라 도입‧개발 또는 변경 여부를 결정한다. +§ 보안성 및 호환성 검토 결과는 수립된 절차에 따라 정보보호책임자 등에게 보고하고 승인을 받아야 한다. +고려 사항 +§ 보안성 검토 시 보안취약점이 도출되거나 보안대책이 필요한 경우 개선 및 보완 조치 완료 후 시스템을 +도입하도록 한다. +§ 공공기관은 국가 정보보안 기본지침에 따라 보안성 검토를 공식적이고 규제적인 절차에 따라 진행하여야 +한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제20조(정보통신제품 도입), 제27조(소프트웨어 개발보안), 제50조(정보 +시스템 보안책임) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제36조(자체 보안성심의) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.8.2 보안 요구사항 검토 및 심의 + + +![이미지 117-0](images/p0117_img0.png) + + +--- + +| 한국인터넷진흥원 | +118 +확인 대상(예시) +☐자산 및 시스템 도입 시 보안성 검토 절차(예: 명문화된 업무 지침) +☐보안성 검토 수행 이력 및 관리책임자의 승인 이력 +☐시스템 구매 예정 시 또는 구매 결정 시에 보안성 검토를 거쳐 도입이 결정된 사례 +☐(서식 예시 제12호 - 시스템 조사표) +☐(서식 예식 제13호 - 정보보호시스템 도입 시 확인사항) +☐(서식 예식 제14호 - 네트워크 장비 도입 시 보안요구사항) +☐(서식 예식 제15호 - 정보보호시스템 도입 시 보안요구사항) +☐(서식 예식 제16호 - 시스템 운영 전 보안요구사항) + + +![이미지 118-0](images/p0118_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +119 +A-60 +관리적 분야 > 11. 운영관리 +시스템의 변경관리 절차 수립·이행 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 서버, 네트워크, 보안 장비 등 정보시스템에 대한 변경(예: 접근권한, 설정, 패치 등)은 사전에 정의된 업무 +절차 (예: 지침 및 절차, 그룹웨어 등)에 따라 검토 및 승인을 받고, 변경관리가 이루어져야 한다. +§ 시스템 변경작업 시에는 작업계획 수립, 검토 및 승인 등의 절차를 마련하고, 업무 이력을 기록 및 관리하여야 +한다. ITSM(IT Service Management) 업무시스템을 구축한 경우 해당 업무시스템의 요청, 검토, 승인 절차를 +따라야 하며, 이력은 관련 로그(Log) 형태로 보관하여야 한다. +§ 시스템 변경에 따른 영향을 분석하여 영향을 최소화할 수 있도록 하여야 하며, 큰 영향을 미치는 변경에 +대해서는 사전에 변경내용, 일시, 시스템 변경으로 인한 영향 등을 관련자에게 공지하여야 한다. +고려 사항 +§ ITSM(IT Service Management)은 국제표준 ITIL(IT Infrastructure Library)에 기반하여 각종 IT 자산의 운영 +전반을 관리하는 업무체계 또는 업무시스템을 의미한다. +§ 자동화된 업무시스템을 사용하지 않는 경우, 시스템에 대한 작업 신청, 검토 및 승인을 통해 변경관리를 +진행하는 것으로 볼 수 있다. 주요 시스템의 작업의 경우 상세 작업계획서 작성 후 검토 및 승인 이후 변경 +작업을 진행한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제50조(정보시스템 보안책임) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보처리시스템 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.1 변경관리 + + +![이미지 119-0](images/p0119_img0.png) + + +--- + +| 한국인터넷진흥원 | +120 +확인 대상(예시) +☐시스템 변경 관리 절차 +☐시스템 변경 검토 및 승인 내역 +☐시스템 변경에 따른 영향 분석 결과 +☐ ITSM 등의 업무시스템 +☐(서식 예시 제40호) 네트워크 변경내용 신청서 + + +![이미지 120-0](images/p0120_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +121 +A-61 +관리적 분야 > 11. 운영관리 +정보보호시스템은 국내용 CC인증을 받았거나, 보안적합성 검증 수행 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설에 사용되는 정보보호시스템은 안전성 검증필 제품(국내용 CC인증 및 보안기능 확인서 등) 또는 +보안적합성 검증 수행 제품을 사용하여야 한다. +고려 사항 +§ 제품 유형별 도입기준 및 안전성 검증필 제품은 국가사이버안보센터 홈페이지 (https://www.nis.go.kr/ 참고)를 통해 +확인할 수 있으며, 별도 보안적합성 검증을 수행할 시에도 홈페이지에 명시된 절차를 참고하여 도입을 +진행하여야 한다. +[그림11] 보안적합성 검증 절차 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제20조(정보통신제품 도입) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.8.2 보안 요구사항 검토 및 시험 + + +![이미지 121-0](images/p0121_img0.png) + + +![이미지 121-1](images/p0121_img1.png) + + +--- + +| 한국인터넷진흥원 | +122 +확인 대상(예시) +☐정보시스템 도입 현황 (예: 정보시스템 장비 목록) +☐정보보호시스템 도입확인서 +☐도입된 정보보호시스템에 대한 국내 CC인증 여부 +☐(참고 자료 제12호) 정보[그림11] 보안적합성 검증 절차 +☐보호시스템 도입 요건 (공공기관 사전인증 제품 도입 시) + + +![이미지 122-0](images/p0122_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +123 +A-62 +관리적 분야 > 11. 운영관리 +제품 및 서비스에서 계약 등으로 협의된 사항 이외 이상행위가 발생하는지 모니터링 +관련 조직 +정보보호 부서 +세부 설명 +§ 제품 및 서비스 계약 이행과정에서 협의 사항 이외 악용 가능 행위를 인지할 수 있도록 로그 검토 주기, 대상, +방법을 포함하여 모니터링 절차를 수립·이행하여야 한다. +§ 주기적으로 로그 검토 및 모니터링 결과를 책임자에게 보고하고, 이상행위가 감지되었을 때 신속하게 대응할 +수 있도록 경고 및 알림 정책을 수립하여야 한다. +§ 이상행위를 판단하기 위한 기준과 임계치를 정의하고 정보시스템, 보안시스템, 응용프로그램, 네트워크 장비 +등의 로그를 실시간으로 모니터링하여 신속하게 이상행위를 탐지하고 식별할 수 있는 체계를 갖추어야 한다. +§ 계약 시 계약서나 협약서 등을 통하여 보안 요구사항을 명확하게 명시하여야 한다. +고려 사항 +§ 이상행위 발생 모니터링 체계를 수립할 때에는 이벤트 로그를 수집하거나 모니터링 하여야 할 대상 및 범위, +모니터링 방법, 담당자 및 책임자, 분석 및 모니터링 결과 보고 체계, 이상행위 발생 시 대응 절차 등을 +고려하여야 한다. +§ 이상행위가 확인된 경우 규정에 따라 긴급 대응, 소명 요청, 원인 조사 등 사후조치를 수행하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제8조(접속기록의 보관 및 점검) +공공기관 +- +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보처리시스템 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.3 이상행위 분석 및 모니터링 + + +![이미지 123-0](images/p0123_img0.png) + + +--- + +| 한국인터넷진흥원 | +124 +확인 대상(예시) +☐제품 및 서비스 표준 계약서(보안 요구사항 명시) +☐로그 검토 및 모니터링 절차 +☐로그 검토 및 모니터링 결과 +☐이상행위 분석 및 모니터링 내역 +☐이상행위 발견 시 대응 증적 + + +![이미지 124-0](images/p0124_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +125 +A-63 +관리적 분야 > 11. 운영관리 +개발 및 테스트 설비는 실제 운영설비와 분리하여 운영 +관련 조직 +정보보호 부서, 개발 부서 +세부 설명 +§ 정보시스템 개발 및 테스트 설비는 원칙적으로 실제 운영설비와 물리적으로 분리하여 운영하여야 한다. +§ 개발 및 테스트를 수행하는 정보시스템과 실제 운영 중인 정보시스템은 비인가 접근 및 변경의 위험을 줄이기 +위해 원칙적으로 물리적으로 분리하고, 서로 다른 네트워크 대역에 위치하도록 한다. +고려 사항 +§ 네트워크 대역을 서로 분리할 때 물리적인 분리 또는 논리적인 분리 모두 가능하다. +§ VLAN 설정을 통해 개발 및 테스트망과 운영망을 분리하는 경우, ACL(Access Control List) 설정 등으로 상호 +접근을 통제하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제27조의2(발주기관내 작업장소 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제18조(IP주소 관리대책), 제60조(외부주문등에 대한 기준) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.8.3 시험과 운영 환경 분리 +확인 대상(예시) +☐네트워크 구성도(시험환경 구성 포함) +☐개발 및 테스트 서버가 위치하는 장소(예: 개발부서, 서버실) + + +![이미지 125-0](images/p0125_img0.png) + + +--- + +| 한국인터넷진흥원 | +126 +A-64 +관리적 분야 > 11. 운영관리 +개발자와 운영자의 접근 권한 분리 +관련 조직 +정보보호 부서, 개발 부서, 시스템운영 부서 +세부 설명 +§ 권한 오·남용 등 고의적인 행위로 발생할 수 있는 잠재적인 위협을 줄이기 위하여 개발과 운영직무는 +원칙적으로 분리하여야 한다. 다만 불가피하게 직무분리가 어려운 경우 직무자간 상호검토, 직무자의 +책임추적성 확보 등의 보완대책을 마련하여야 한다. +§ 개발자가 불필요하게 운영시스템에 접근할 수 없도록 개발자와 운영자의 접근 권한을 분리하고 +개발시스템(테스트시스템 포함)과 운영시스템 간 접근통제를 적용하여야 한다. +고려 사항 +§ 개발 및 테스트가 완료된 후 운영시스템으로의 이관은 품질보증(QA) 부서에서 진행한다. 개발자에게는 +운영시스템 관리자 권한을 부여하지 않도록 하여야 한다. +§ 소규모 조직이나 인적 자원 부족 등 불가피한 사유가 있는 경우, 적절한 보안대책을 적용하여 동일 직무 +수행으로 인한 부주의, 오·남용 등을 최소화하도록 조치하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +- +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제8조의2(직무의 분리) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.2.2 직무 분리, 2.8.3 시험과 +운영환경 분리, 2.8.6 운영환경 이관 + + +![이미지 126-0](images/p0126_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +127 +확인 대상(예시) +☐직무 분리 지침(예: 인적 보안 지침 등) +☐직무기술서(개발 및 운영조직) +☐직무 미분리 시 보안통제 현황 +☐네트워크 구성도(IP주소 포함) +☐조직도(개발 및 운영조직 포함) +☐운영시스템의 관리자 계정 목록(해당 담당자의 부서 및 이름 포함) +☐개발 시스템, 운영 시스템 +☐(서식 예시 제24호) 직무기술서 + + +![이미지 127-0](images/p0127_img0.png) + + +--- + +| 한국인터넷진흥원 | +128 +A-65 +관리적 분야 > 11. 운영관리 +업무용 시스템(ERP, 그룹웨어 등)의 소스코드 접근권한을 차등 부여하고 별도 저장장치에 보관 +관련 조직 +정보보호 부서, 개발 부서 +세부 설명 +§ 업무용 시스템(ERP, 그룹웨어 등) 소스코드에 대한 비인가자의 접근을 통제하는 절차를 수립‧이행하고, 업무 +수행 목적에 따라 소스코드 접근권한을 최소한의 범위로 차등 부여하여야 한다. +§ 소스코드는 인가된 사용자만이 접근할 수 있도록 관리하고, 운영환경에는 보관하지 않는 것을 원칙으로 +하여야 한다. +§ 개발업무를 수행하는 조직은 형상관리시스템을 활용하여 개발 변경승인과 변경이력을 시스템에서 관리하고, +소스코드의 최종본이 안전하게 유지되도록 하여야 한다. +§ 소스코드는 장애 등 비상시를 대비하여 별도의 저장장치에 백업하고, 백업된 소스코드는 인가된 관리담당자만 +접근할 수 있도록 접근통제를 수행하여야 한다. +고려 사항 +§ 형상관리시스템에서 관리하는 구성요소는 소스코드 및 각종 문서(개발/설계/프로젝트 관리 등)와 사용자 +요구사항, 참여 인원, 예산, 일정 등 개발 프로젝트의 모든 요소를 포함한다. +§ 형상관리시스템에 저장되어 있는 소스코드에 업무 연관성이 없는 개발자 등 사용자의 접근을 제한하여야 +하며,변경(수정, 삭제 등)에 대한 이력 관리를 수행하여야 한다. +§ 업무적으로 불필요하거나 과도한 접근을 방지하기 위해 권한을 세분화하고, 접근 권한 부여 또는 변경 시 +승인절차 등을 통해 적절성을 검토하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제73조(개별사용자 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제29조(프로그램 통제) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.8.5 소스 프로그램 관리 + + +![이미지 128-0](images/p0128_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +129 +확인 대상(예시) +☐소스코드 관리 절차 +☐SVN 등 형상관리시스템 운영 현황(예 : 접근권한자 목록 등) +☐소스 프로그램 변경 이력 +☐소스 프로그램 백업 현황 + + +![이미지 129-0](images/p0129_img0.png) + + +--- + +| 한국인터넷진흥원 | +130 +A-66 +관리적 분야 > 11. 운영관리 +업무용 시스템(ERP, 그룹웨어 등)의 소스코드 변경 시 보안약점 분석도구를 통해 취약점 점검 +관련 조직 +정보보호 부서, 개발 부서 +세부 설명 +§ 업무용 시스템(ERP, 그룹웨어 등)의 소스코드 변경 시 안전한 코딩 기준에 따라 안전하게 구현되었는지 +점검하여야 하며, 운영환경과 동일한 환경에서 보안약점 점검도구를 통해 취약점 노출 여부를 점검하여야 +한다. +§ 취약점 점검 시 이력관리가 될 수 있도록 점검일시, 점검대상, 점검방법, 점검내용 및 결과, 발견사항, 조치사항 +등이 포함된 보고서를 작성하고 책임자에게 보고하여야 한다. +고려 사항 +§ 보안약점 분석도구가 어떤 종류의 취약점을 검출하는지 이해하고, 시스템 사용 언어에 적합한 도구를 선택한다. +§ 발견된 취약점에 대한 조치를 수행하고, 개선 조치 완료 여부에 대하여 이행점검을 수행한다. +§ 불가피하게 조치할 수 없는 취약점에 대해서는 그 사유를 명확하게 확인하고, 이에 따른 위험성, 보완대책 등을 +책임자에게 보고한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제27조(소프트웨어 개발보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제21조의3(전자금융기반시설의 취약점 분석ㆍ평가) +전자금융감독규정 제29조(프로그램 통제), 제37조의2(전자금융기반시설의 취약점 분석·평가 +주기, 내용 등) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.8.2 보안 요구사항 검토 및 +시험, 2.11.2 취약점 점검 및 조치 + + +![이미지 130-0](images/p0130_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +131 +확인 대상(예시) +☐소스코드 취약점 점검 계획서 +☐소스코드 취약점 점검 이력 및 결과보고서 +☐소스코드 취약점 조치 계획서 +☐소스코드 취약점 조치 완료 보고서(미조치 항목 사유 포함) + + +![이미지 131-0](images/p0131_img0.png) + + +--- + +| 한국인터넷진흥원 | +132 +A-67 +관리적 분야 > 11. 운영관리 +주요 시스템 및 정보보호제품의 변경을 위한 공식적인 절차 수립·이행 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 주요 시스템 및 정보보호제품의 설정 변경을 위한 공식적인 절차를 수립하고 이행하여야 한다. +§ 제어시스템 및 보안 장비 등에 대한 설정 변경은 기반시설의 서비스와 보안에 위협이 될 수 있으므로, 변경 +작업 시 작업계획, 영향검토, 승인 등의 절차가 이루어져야 한다. +고려 사항 +§ 주요 시스템 및 정보보호제품의 변경을 수행하기 전에는 변경이 성능 및 보안에 미치는 영향을 분석하고, +잠재적 문제점을 파악하여야 한다. 또한, 변경에 따른 영향 최소화 및 변경 실패에 따른 복구방안을 사전에 +고려하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제37조(형상변경 및 용도변경시 조치), 제50조(정보시스템 보안책임) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보처리시스템 보호대책), 제29조(프로그램 통제) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.1 변경관리 +확인 대상(예시) +☐시스템 변경 관리 절차 +☐제어시스템, 보안 장비 등의 주요 시스템 설정 +☐시스템 변경 시 영향분석 내역 +☐시스템 변경에 대한 신청·승인 내역 + + +![이미지 132-0](images/p0132_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +133 +A-68 +관리적 분야 > 11. 운영관리 +유지보수 작업 전 공식적인 작업신청 및 수행절차를 수립 및 이행하고 작업 기록을 주기적으로 검토 +관련 조직 +시스템운영 부서 +세부 설명 +§ 유지보수 작업이 필요한 경우 작업신청 및 수행절차를 수립하고, 작업 일시, 목적 및 내용, 담당자 등을 명시한 +작업 신청서를 작성하여 검토, 승인 절차를 준수하여야 한다. +§ 작업이 수행 절차를 준수하여 수행되었는지 확인하기 위해 작업 기록을 주기적으로 검토하여야 한다. +고려 사항 +§ 승인된 작업은 수립된 절차에 따라 수행되어야 하며, 이 과정에서 안전 및 보안을 고려한 절차를 준수하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제51조(정보시스템 유지보수) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보처리시스템의 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.5 보호구역 내 작업 +확인 대상(예시) +☐유지보수 작업수행 관련 지침(또는 절차)(예: 정보보호 정책서, 물리적보안 지침 등) +☐유지보수 작업 신청서·기록서 +☐통제구역 출입 대장 +☐작업 기록 검토 내역 + + +![이미지 133-0](images/p0133_img0.png) + + +--- + +| 한국인터넷진흥원 | +134 +A-69 +관리적 분야 > 11. 운영관리 +장애탐지, 장애기록, 장애분석, 장애복구, 장애보고 등의 사항을 포함하는 시스템의 장애관리 지침 문서화 +관련 조직 +시스템운영 부서 +세부 설명 +§ 정보시스템의 성능 및 용량 요구사항(임계치)를 초과할 경우 등 장애를 즉시 인지하고 대응하기 위한 절차를 +수립하여야 한다. +§ 정보시스템 장애를 즉시 인지하고 신속하게 대응하기 위하여 장애탐지, 장애기록, 장애분석, 장애복구, +장애보고 등의 사항을 포함하는 시스템 장애관리 지침을 수립하여야 한다. +§ 장애관리 지침은 장애처리 및 관리를 위한 업무시스템의 변경에 따라 개정될 수 있으므로 주기적인 제·개정에 +대한 관리를 하여야 한다. +고려 사항 +§ 장애관리 지침에는 장애유형 및 심각도 정의, 장애유형 및 심각도별 보고 절차, 장애유형별 탐지 방법 , 장애 +대응 및 복구에 관한 책임과 역할 정의, 장애기록 및 분석, 대고객 서비스인 경우 고객 안내 절차, +비상연락체계(유지보수업체, 정보시스템 제조사) 등을 포함한다. +§ 정보시스템의 장애를 사전에 예방하고 장애 발생 징후를 신속히 탐지할 수 있도록 성능 및 용량을 지속적으로 +모니터링하는 방안을 고려할 필요가 있다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제51조(정보시스템 유지보수), 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보처리시스템 보호대책), 제25조(정보처리시스템 성능관리) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.2 성능 및 장애관리 + + +![이미지 134-0](images/p0134_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +135 +확인 대상(예시) +☐장애 처리 및 관리를 위한 지침(또는 절차) +☐심각도 높은 장애 처리 및 관리를 위한 지침(또는 절차)(예: 업무연속성관리(비상계획) 지침) +☐장애 처리 및 관리를 위한 업무시스템(예: 장애관리시스템, 그룹웨어 등) + + +![이미지 135-0](images/p0135_img0.png) + + +--- + +| 한국인터넷진흥원 | +136 +A-70 +관리적 분야 > 11. 운영관리 +백업 대상, 주기, 방법, 보관 장소, 보관기간, 소산 등을 포함한 백업 절차 수립·이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보시스템의 가용성과 데이터 무결성을 보장하기 위해 백업체계를 마련하여야 한다. 이를 위해 시스템 손상 +시 신속히 복구할 수 있도록 백업 대상, 주기, 방법, 보관 장소, 보관기간, 소산 등을 고려하여 백업 절차를 +수립·이행하여야 한다. +§ 중요정보가 저장된 백업매체는 운영 중인 정보시스템 또는 백업시스템이 위치한 장소로부터, 물리적으로 +떨어진 장소에 소산하여야 한다. +고려 사항 +§ 백업시스템의 소산은 소산일자(반출, 반입 등), 소산 백업매체 및 백업정보 내용 등 관리대장으로 이력을 +관리하고, 소산이 적절하게 이루어지고 있는지 주기적으로 점검하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해·재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책), 제14조(정보처리시스템 보호대책), 제23조(비상대책 등의 수립ㆍ운용) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.3 백업 및 복구관리 +확인 대상(예시) +☐정보시스템 백업 정책 문서(예: 백업 지침 또는 백업 절차서) +☐소산 백업 위치(또는 스토리지) 및 보관 장소 +☐백업 기록 대장 +☐소산 백업 현황 + + +![이미지 136-0](images/p0136_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +137 +A-71 +관리적 분야 > 11. 운영관리 +백업된 정보의 완전성과 정확성, 복구절차의 적절성을 확인하기 위하여 정기적으로 복구 테스트 수행 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 백업된 정보의 완전성과 정확성, 복구절차의 적절성을 확인하기 위하여 다음과 같이 정기적인 복구 테스트를 +수행하여야 한다. +- 복구테스트 계획(복구테스트 주기 및 시점, 담당자, 방법 등) +- 복구테스트 시나리오 수립 +- 복구테스트 실시 및 결과 보고 +- 복구테스트 결과 문제점 발견 시 개선계획 수립 및 이행 +§ 시험결과, 정보시스템 환경변화, 법률 등에 따른 변화를 반영할 수 있도록 복구전략 및 대책을 정기적으로 +검토·보완하여야 한다. +고려 사항 +§ 테스트 계획에 따라 정기적으로 시험을 실시 하여 복구 전략 및 대책의 효과성을 평가하고, 비상 시 복구조직 +구성원이 복구절차에 따라 신속하게 대응하는지 등을 점검한다. +§ 자연재해, 장애 발생, 사이버 공격 등 다양한 상황을 고려하여 복구 시나리오에 대한 테스트를 진행한다. +§ 복구된 시스템이 실제 운영 환경에서 요구되는 성능을 충족시킬 수 있는지 확인하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해·재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책), 제23조(비상대책 등의 수립‧운용) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.3 백업 및 복구관리 + + +![이미지 137-0](images/p0137_img0.png) + + +--- + +| 한국인터넷진흥원 | +138 +확인대상(예시) +☐백업 복구 절차서 +☐백업 복구 테스트 계획서 +☐백업 복구 테스트 결과서 +☐백업 복구 테스트 수행내역 + + +![이미지 138-0](images/p0138_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +139 +A-72 +관리적 분야 > 11. 운영관리 +전자기록 보관을 위한 별도의 방법(아카이빙)을 마련하고, 이를 통해 관리 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 전자기록을 안전하게 보관하기 위하여 별도의 방법(아카이빙)에 따른 절차를 마련하고 이를 통제 전자기록을 +저장‧관리하여야 한다. +§ 전자기록 보관에 대한 내부 절차는 아카이빙 백업 대상, 주기, 방법, 절차 등을 포함하여 계획을 수립하여야 한다. +§ 데이터 백업본은 원본 정보시스템과는 별도의 위치(예: 백업 스토리지, 원격지 백업 등)에 저장되어야 하며, +분실 위험이 있는 저장매체(예: 백업테잎(DAT), CD, 외장HDD 등)는 지정된 안전한 장소(예: 시건된 +캐비넷)에 보관하여야 한다. +고려 사항 +§ 아카이빙(Archiving)은 데이터를 원래 위치에서 다른 곳으로 이동하여 장기간 보관하는 것을 의미하며, 데이터 +아카이빙을 통하여 현재 운영 시스템에서 사용 빈도가 낮은 데이터를 장기간 보관할 수 있는 특수 아카이브 +스토리지 시스템으로 이동하여 관리한다. +§ 별도의 장소, 공간에 데이터의 백업 매체를 보관(수 km에서 수백 km 이상 거리에 백업 데이터를 보관하는 +데이터 백업 소산을 의미하는 것이 아님)하고, 백업 매체가 훼손, 변경, 분실되지 않도록 안전한 보관 방법을 +마련하여야 한다. +§ 아카이빙과 백업 개념의 차이점은 다음과 같다. +구분 +아카이빙(Archicing) +백업(Backup) +목적 +데이터 장기 보관 및 접근 +데이터 복원 +용도 +필요시 데이터 참조 및 증명 +데이터 손실 또는 장애 발생 시 신속한 복구 +접근성 +접근성이 낮음 +접근성이 높음 +복구시간 +느린 데이터 복구 +신속한 데이터 복구 +저장주기 +조직의 설정한 정책 주기를 따름 +일별, 주별, 월별 등 주기적 저장 +데이터상태 +원본 상태 그대로 저장 +특정 시점의 복사본으로 저장 +저장위치 +클라우드, 테이프 등 저렴한 스토리지 +디스크, 클라우드 등 백업 전용 장비 + + +![이미지 139-0](images/p0139_img0.png) + + +--- + +| 한국인터넷진흥원 | +140 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보 보호법 시행령 제30조(개인정보의 안전성 확보조치) +공공기관 +국가 정보보안 기본지침 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책), 제14조(정보처리시스템 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.3 백업 및 복구관리 +확인 대상(예시) +☐데이터 보안 및 저장 관리지침(아카이빙 방안 포함) +☐데이터 백업 절차서 +☐백업 매체 또는 백업 스토리지가 위치한 장소 +☐백업 매체 + + +![이미지 140-0](images/p0140_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +141 +A-73 +관리적 분야 > 11. 운영관리 +시스템 및 정보보호시스템 접근기록(로그 등)을 생성‧보관하고, 이에 대한 비인가 열람, 훼손 등을 방지 +하기 위한 보호대책 운영 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 서버, 응용프로그램, 네트워크 장비, 보안 장비(정보보호시스템)에 대해 사용자 및 관리자 등의 접근기록(로그 +등)이 생성되도록 하며, 이러한 접근기록은 비인가자의 무단 열람이나 위·변조를 방지하기 위해 접근통제 등을 +적용하여 안전하게 보관하여야 한다. +§ 시스템 접근기록은 공격자 및 유지보수 운영자에 의해 훼손될 우려가 있으므로, 로그 서버 운영 또는 +백업매체를 통해 별도로 보관하여야 한다. 또한, 로그서버 관리자 또는 백업 관리자를 지정하여 보안을 +강화하여야 한다. +§ 시스템 및 정보보호시스템 접근기록은 최소 1년 이상 보관하여야 한다 +§ 관계 법규에 따라 시스템의 접속기록 보관기간(예: 개인정보처리시스템의 경우 최소 1년 이상 또는 최소 2년 +이상) 등이 정해져 있는 경우가 존재하므로, 보관하여야 하는 접속기록의 대상과 기간 등에 유의하여야 한다. +고려 사항 +§ 시스템 및 정보보호시스템 관리자는 접근기록의 정확성을 확보하기 위해 시간 동기화 프로토콜(NTP)을 +적용하여야 한다. +§ 개인정보처리시스템에 접속한 사용자가 수행한 업무 내역은 식별자, 접속 일시, 접속지 정보, 처리한 정보주체 +정보, 수행 업무 등을 포함하여 전자적으로 기록하여야 하며 접속기록 보존기간은 다음과 같다. +보존 기관 +구분 +최소 1년 이상 +일반적 보존기간 +최소 2년 이상 +5만명 이상의 정보주체에 관한 개인정보를 처리하는 개인정보처리시스템 +고유식별정보 또는 민감정보를 처리하는 개인정보처리시스템 +개인정보처리자로서 「전기통신사업법」 제6조 제1항에 따라 등록된 기간통신사업자 +§ WORM(Write Once Read Many) 스토리지 등 덮어쓰기 방지 매체에 접근기록을 저장할 경우 위‧변조, 훼손 +등을 방지할 수 있다. + + +![이미지 141-0](images/p0141_img0.png) + + +--- + +| 한국인터넷진흥원 | +142 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제8조(접속기록의 보관 및 점검) +공공기관 +국가 정보보안 기본지침 제55조(로그기록 유지) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제12조(단말기 보호대책), 제13조(전산자료 보호대책), 제15조(해킹 등 +방지대책), 제18조(IP주소 관리대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.4 로그 및 접속기록 관리 +확인 대상(예시) +☐로그관리 절차 +☐로그기록 내역 +☐로그 저장장치에 대한 접근통제 내역 +☐개인정보 접속기록 내역 +☐개인정보 다운로드 시 사유 확인 기준 및 결과 + + +![이미지 142-0](images/p0142_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +143 +A-74 +관리적 분야 > 11. 운영관리 +시스템과 네트워크의 오류, 오·남용(비인가접속, 과다조회 등), 부정행위 등 이상징후를 인지할 수 +있도록 로그 검토 주기, 대상, 방법 등을 포함한 로그 검토 및 모니터링 절차 수립 및 이행 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 시스템 및 네트워크의 오류, 오·남용(비인가접속, 과다조회 등), 부정행위 등 이상징후를 인지할 수 있도록 +로그 검토 주기, 대상, 방법 등을 포함한 로그 검토 및 모니터링 절차를 수립·이행하여야 한다. +§ 서버에 대한 성능 및 용량을 관리하는 시스템(SMS; Server Management System), 네트워크에 대한 모니터링을 +수행하는 시스템(NMS; Network Management System)을 이용하여 이상징후에 대한 지속적인 모니터링하여야 +한다. +고려 사항 +§ 개인정보 보호법에서는 개인정보처리시스템의 접속기록을 월1회 이상 점검하도록 요구하고 있으므로, 관계 +법규에 따른 법적 준거성을 고려하여 접속기록 검토 절차를 수립·이행하여야 한다. +§ 내·외부에 의한 침해시도, 개인정보유출 시도, 부정행위 등 이상행위를 효과적으로 탐지할 수 있도록 각종 +개별 보안솔루션 및 통합보안 모니터링 솔루션 등을 통해 이상징후에 대한 지속적인 모니터링 방안을 마련할 +필요가 있다. + +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제8조(접속기록의 보관 및 점검) +공공기관 +국가 정보보안 기본지침 제55조(로그기록 유지) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보처리시스템 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.5 로그 및 접속기록 점검, + +#### 2.11.3(이상행위 분석 및 모니터링) + + + +![이미지 143-0](images/p0143_img0.png) + + +--- + +| 한국인터넷진흥원 | +144 +확인 대상(예시) +☐서버, 네트워크 장비에 대한 성능 및 용량 모니터링 체계 +☐로그 검토 및 모니터링 절차 +☐로그 검토 및 모니터링 결과(검토 내역, 보고서 등) +☐이상징후 발견 시 대응 증적 + + +![이미지 144-0](images/p0144_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +145 +A-75 +관리적 분야 > 11. 운영관리 +로그 및 모니터링 결과를 월 1회 이상 책임자에게 보고 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 기반시설의 정보시스템을 대상으로 로그 검토 및 모니터링을 정기적으로 수행하고 점검결과를 월 1회 이상 +책임자에게 보고하여야 한다. 또한, 점검결과 비인가자의 접속시도, 자료 위변조, 정보 유출 등 의심스러운 +정황이나 위반사실이 발견되면 즉시 책임자에게 보고하여야 한다. +§ 개인정보의 접속기록은 오ㆍ남용, 분실ㆍ도난ㆍ유출ㆍ위조ㆍ변조 또는 훼손 등에 대응하기 위하여 관련 +법령에서 정한 기준에 따라 월 1회 이상 점검하여 책임자에게 보고하여야 한다. +고려 사항 +§ 정보시스템에 비인가자 혹은 근무 시간 외 다운로드 등 이상징후가 확인된 경우, 로그검토 기준에 따라 사유를 +확인하고, 그 결과를 책임자에게 보고하여야 한다. +§ 기반시설의 개인정보처리시스템에서 개인정보의 다운로드가 확인된 경우, 내부 관리계획 등 기준에 따라 +사유를 확인하고, 그 결과를 책임자에게 보고하여야 한다. 개인정보의 오·남용이나 유출 목적으로 다운로드 한 +것이 확인되었다면 관계 법령에 따라 유출 신고, 정보주체 통지 등을 이행하여야 하며, 개인정보를 회수하는 +등 조치를 취하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제8조(접속기록의 보관 및 점검) +공공기관 +국가 정보보안 기본지침 제55조(로그기록 유지) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보처리시스템 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.5 로그 및 접속기록 점검 + + +![이미지 145-0](images/p0145_img0.png) + + +--- + +| 한국인터넷진흥원 | +146 +확인 대상(예시) +☐로그 검토 및 모니터링 절차 +☐로그 검토 및 모니터링 결과(검토 내역, 보고서 등) +☐개인정보 접속기록 점검 내역 +☐개인정보 다운로드 시 사유 확인 기준 및 결과 +☐이상징후 발견 시 대응 증적 +☐로그 및 모니터링 결과의 책임자 보고 및 검토 이력 + + +![이미지 146-0](images/p0146_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +147 +A-76 +관리적 분야 > 11. 운영관리 +정보나 매체가 용도 폐기되기 위한 폐기 방법 수립‧이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보나 매체의 용도 폐기 사유가 발생한 경우, 복구나 재생이 불가능하도록 안전한 폐기 절차를 수립하고 +이행하여야 한다. +§ 종이 등의 기록물, 인쇄물, 복사물 등은 파쇄 또는 소각하여 폐기하고, 전산자료는 전용 소자 장비(예: 이레이저 +또는 디가우저)를 이용하여 데이터가 복원되지 않도록 파기하여야 한다. +§ 자체적으로 정보 및 매체를 폐기할 경우, 관리대장을 통해 폐기 이력(폐기일자, 폐기 담당자 및 책임자 서명, +폐기방법, 폐기확인증적 등)을 기록하여야 한다. +§ 외부업체를 통하여 정보 및 매체를 폐기할 경우, 폐기 절차와 관련된 내용을 계약서에 명시하고, 폐기 절차가 +제대로 이행되는지 감독하여야 한다. 또한, 완전한 폐기를 증명하는 증적(예: 사진, 동영상 등)을 보관하여야 한다. +고려 사항 +§ 이레이저(Eraser)와 디가우저(Degausser)의 개념의 차이점은 다음과 같다. +이레이저(Eraser) +디가우저(Degausser) +정의 +저장매체의 데이터를 수회 삭제 및 덮어쓰기를 +반복하면서 원 데이터를 복원 불가능한 수준으로 +완전삭제하는 장비(또는 S/W)를 의미 +강력한 자기장을 이용하여 하드디스크 등의 저장 +장치에 기록된 데이터를 파괴하는 장비를 의미 +목적 +재사용 목적 +폐기(재사용 불가) 목적 +§ 저장매체를 폐기할 때는 물리적 및 전자적으로 완전히 파괴하고, 재사용할 때는 완전 포맷을 통해 모든 정보를 +삭제하여야 한다. 저장매체별·자료별 차별화된 삭제 방법을 다음 분류에 따른 기준 이상으로 적용하여야 한다. +저장매체\저장자료 +공개자료 +비공개 자료 +대외비 자료 +비밀 자료 +자기테이프 +플로피디스크 +자체 판단 +물리적 파괴 +물리적 파괴 +물리적 파괴 +광디스크 +(CDㆍDVD 등) +자체 판단 +물리적 파괴 +물리적 파괴 +물리적 파괴 + + +![이미지 147-0](images/p0147_img0.png) + + +--- + +| 한국인터넷진흥원 | +148 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제21조(개인정보의 파기), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제13조(개인정보의 파기) +공공기관 +국가 정보보안 기본지침 제61조(저장매체 불용처리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.7 자산의 재사용 및 폐기 +확인 대상(예시) +☐정보 또는 저장매체의 폐기 방법 및 지침 +☐종이 또는 저장매체에 대한 폐기 기록 및 증빙(예: 요청, 승인, 수행 이력) +☐(해당하는 경우) 보안 폐기 외주용역 계약서, 폐기 확인서 +저장매체\저장자료 +공개자료 +비공개 자료 +대외비 자료 +비밀 자료 +반도체메모리 +(SSDㆍUSB 등) +포맷 또는 삭제 +완전삭제 제품 +물리적 파괴 +물리적 파괴 +하드디스크 +포맷 또는 삭제 +디가우징 또는 +완전삭제 제품 +물리적 파괴 +물리적 파괴 + + +![이미지 148-0](images/p0148_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +149 +A-77 +관리적 분야 > 11. 운영관리 +보안규정의 이행여부를 확인하는 주기적인 보안점검 및 불시 보안점검 수행 +관련 조직 +정보보호 부서 +세부 설명 +§ 보안규정의 이행여부를 확인하기 위해 연 1회 이상 주기적으로 보안점검을 수행하여야 한다. +§ 보안규정에 따른 임직원 보안업무 생활화 이행여부를 확인하기 위해 불시 보안점검(생활보안 점검)을 +수행하여야 한다. +§ 연 1회 이상 수행하는 보안점검은 내부 보안규정과 관리적·물리적 취약점 점검항목을 고려하여 수행하고, +발견된 문제점은 정보보호책임자(정보보안담당관)에게 보고하여야 한다. +§ 보안점검 완료 후, 보완이 필요한 사항에 대해 조치계획을 수립하고, 조치 완료 여부를 점검하여야 한다. +고려 사항 +§ 정보보호 및 개인정보보호 관리체계(ISMS-P) 인증과 같은 대외 보안인증을 유지하는 경우, 해당 인증기준에 +주요정보통신기반시설 보호지침에 따른 관리적·물리적 취약점 점검항목(보안인증 기준에 따른 내부 보안감사도 +주기적인 보안점검으로 인정)을 포함하여 수행할 필요가 있다. +§ 보안규정의 이행여부를 확인하기 위하여 점검기준, 범위, 점검인력, 자격요건 등 점검계획을 수립하고 +정보보호책임자에게 보고하여야 한다. +- 점검기준 : 조직내부에서 수립한 보안 규정 +- 점검범위 : 전사 또는 기반시설 범위 포함 +- 점검주기 : 최소 연 1회 이상 수행 필요 +- 점검인력 자격요건 : 점검의 객관성, 독립성 및 전문성을 확보할 수 있도록 자격 요건 정의 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제8조(정보보안감사 등) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) + + +![이미지 149-0](images/p0149_img0.png) + + +--- + +| 한국인터넷진흥원 | +150 +확인 대상(예시) +☐당해 연도(또는 전년도) 보안실태점검 계획서·결과서 +☐보안실태점검 이행조치 결과서 +☐(참고 자료 제11호) 정보보안 점검항목 (예시) +전자금융감독규정 제8조(인력, 조직, 교육 및 예산)) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.4.2 관리체계 점검 + + +![이미지 150-0](images/p0150_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +151 +A-78 +관리적 분야 > 11. 운영관리 +비밀(대외비 포함)을 비밀관리기록부 등에 등재하여 관리 +관련 조직 +정보보호 부서, 비밀관리 부서 +세부 설명 +§ 공공기관일 경우, 비밀 정보(I급, II급, III급)는 행정안전부의 ‘비밀기록물 관리 실무지침’을 참고하여 비밀관리기록부에 +등재하고, 이의 열람, 파기 등의 이력을 철저히 관리하고, 안전하게 보관하여야 한다. +§ 민간 기업의 경우 대외 공개가 제한되는 문서를 대외비(Confidential)로 분류하고, 모든 문서에 보안등급 +(각 등급 별로 보안 관리와 보호가 필요함을 의미)을 적용하여 각 등급에 따라 관리하여야 한다. +고려 사항 +§ 공공기관의 비밀관리 절차는 법제처 웹사이트에서 보안업무규정 및 보안업무규정 시행규칙을 참고하여 관련 기준, +비밀표기 방법, 생산부터 폐기까지의 이력관리, 보관 등의 상세한 내용을 확인하여 적용하여야 한다. +§ 공공기관은 비밀등급 문서를 관리할 때, 비밀취급인가증을 소지한 인원만이 생산부터 폐기까지 모든 관리 권한을 +보유한다. 비밀의 등록관리에 중점을 두며, 관련 법규에 따라 비밀취급인가에 관련된 사항을 적용하여야 한다. +§ 비밀 문서를 전사적으로 처리하고자 할 경우 안전한 암호 모듈을 사용하여 위조·변조·훼손 및 유출을 방지한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +공공기관 +국가 정보보안 기본지침 제63조(비밀관리시스템 운용) +보안업무규정 제22조(비밀관리기록부) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.3 정보자산 관리 +확인 대상(예시) +☐비밀 문건 관리 기준 지침 또는 절차 +☐비밀관리기록부 +☐(서식 예시 제17호) 비밀관리기록부 + + +![이미지 151-0](images/p0151_img0.png) + + +--- + +| 한국인터넷진흥원 | +152 +A-79 +관리적 분야 > 11. 운영관리 +출력된 비밀문서의 경우 잠금 장치가 있는 캐비넷 등에 안전하게 보관 +관련 조직 +정보보호 부서 +세부 설명 +§ 출력된 비밀문서(또는 전산자료가 보관된 CD, USB메모리, HDD)는 보관 관리주체(예: 총무부서)와 +보관장소(예: 이중시건 캐비넷)를 정하여 일원화된 관리가 이루어지도록 하여야 한다. +§ 비밀문서는 출입이 엄격하게 통제된 장소에 보관하여야 하므로 통제구역 수준의 장소에 보관하는 것이 +필요하며, 비밀문서의 규모가 크지 않아 사물함, 캐비넷 등에 보관하여야 한다면 이중시건이 가능한 장치를 +설치하여 보관하여야 한다. 또한 화재 등으로부터 소실될 우려가 있다면 내화금고에 비밀문서를 보관한다. +고려 사항 +§ 출력된 비밀문서를 안전하게 관리하기 위해 집적된 비밀문서는 통제구역으로 지정된 장소에 보관하거나 +이중시건 캐비넷 등의 보호조치를 적용하여야 한다. +§ 공공기관의 비밀 보안등급에 따라 다음과 같이 보관 기준을 다르게 마련할 수 있다. +- I급 비밀은 반드시 금고에 보관하고, 다른 비밀과 혼합하여 보관하지 않는다. +- II급 비밀 및 III급 비밀은 금고 또는 이중시건 캐비넷 등 잠금장치가 있는 장소에 보관하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치), 제12조(출력ㆍ복사시 안전조치) +공공기관 +국가 정보보안 기본지침 제62조(비밀의 전자적 처리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.7 업무환경 보안 +확인 대상(예시) +☐비밀문서 보관 통제구역 +☐이중시건 캐비넷 + + +![이미지 152-0](images/p0152_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +153 +A-80 +관리적 분야 > 11. 운영관리 +비밀 등 중요정보의 안전한 처리를 위한 보호대책을 마련하거나 시스템을 도입하여 사용 +관련 조직 +정보보호 부서 +세부 설명 +§ 비밀 등 중요 정보의 생성, 분류, 저장, 접근, 전송, 삭제에 관한 보호대책을 마련한다. +§ 비밀 등 중요 정보를 정보통신망을 통해 처리하는 경우 저장, 전송 시에 암호화가 이루어지도록 하는 등의 +시스템화된 보호대책을 적용하여야 한다. +§ 비밀 등 중요 정보는 사용자에게 보호대책를 맡기는 관리적인 대책보다는 시스템 솔루션 등을 사용하여 보다 +확실한 기술적 대책 마련을 강구하여야 한다. +§ 공공기관은 비밀 등급 자료에 대한 비밀관리시스템 등을 도입하여 안전한 정보 처리를 하여야 한다. +고려 사항 +§ 보호대책 마련시 비밀 등 표시 방법, 처리 기록의 보관 및 관리, 비밀을 관리하기 위한 각종 대장 등 양식, +암호화‧접근통제 등 기술적 보호대책 등을 고려하여야 한다. +§ 비밀 등 중요 정보를 안전하게 처리하기 위해 다음과 같은 기능을 구현한 시스템을 자체 개발하거나 그 기능을 +갖춘 보안시스템을 도입하는 방법으로 보호대책을 적용하여야 한다. +- 메일서버에 보안(비밀)메일 발송(예: 암호화 전송) 및 관리(예: 발송이력 확인) 기능을 포함하여 운영 +- 암호화 대상 중요 정보(예: 고유식별정보)를 DB암호화하는 시스템 운영 +- 중요 정보(DB)에 접근하는 기록을 모니터링하고 불법적인 접근행위를 탐지하는 시스템 운영 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제62조(비밀의 전자적 처리), 제63조(비밀관리시스템 운용) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.3 정보자산 관리 + + +![이미지 153-0](images/p0153_img0.png) + + +--- + +| 한국인터넷진흥원 | +154 +확인 대상(예시) +☐시스템 운영(사용) 계획 +☐시스템 운영(사용) 현황 +☐중요 문서 접근 통제 보호 대책 + + +![이미지 154-0](images/p0154_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +155 +A-81 +관리적 분야 > 11. 운영관리 +정보통신망 세부 구성현황(IP 정보 등)등을 대외비 이상으로 관리 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 정보통신망의 세부 구성현황(네트워크 구조, 장비 정보, IP 주소 등)은 정보의 유출 시 해킹, 정보 유출, 서비스 +마비, 법적 책임 등 심각한 위험을 초래할 수 있으므로 외부에 유출되지 않도록 하여야 한다. 공공기관은 비공개 +업무자료 이상, 민간기업은 대외비 이상 수준의 보안으로 안전하게 관리하여야 한다. +§ 관계 법규에서 엄격한 관리를 요구하는 중요정보에 대하여 적절한 보안수준으로 분류하여 관리하여야 한다. +특히 정보통신망에 대한 세부 구성현황(예: 네트워크 세부 구성도, IP 할당 현황, 정보시스템 상세 현황(목록), +중요(민감) 정보화 사업 상세 현황 등)은 반드시 비공개 업무자료 및 대외비 자료로 관리하여야 한다. +고려 사항 +§ 정보시스템(서버/네트워크/애플리케이션) 구성도, IP 관리대장 등 전자 문서의 경우 문서 암호화, 워터마킹, +접근통제 등의 보호대책을 적용하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +공공기관 +국가 정보보안 기본지침 제71조(정보통신망 현황자료 관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제18조(IP주소 관리대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.1.3 정보자산 관리 +확인 대상(예시) +☐네트워크 구성도 및 IP자산대장 대외비 분류 현황 +☐해당 대외비 보관 장소 + + +![이미지 155-0](images/p0155_img0.png) + + +--- + +| 한국인터넷진흥원 | +156 +A-82 +관리적 분야 > 11. 운영관리 +중요 데이터와 일반 데이터를 다른 서버에 분리 보관 +관련 조직 +정보보호 부서, DB 운영 부서 +세부 설명 +§ 대외 유출이 엄격히 제한되는 중요 데이터는 일반 데이터와 구분하여 별도의 서버에 보관하여 유출 위험을 +완화하여야 한다. +§ DB는 다른 용도의 서버와 함께 운영하지 않고 분리 운영하여야 하며, DB서버 용도로 구축된 전용 시스템에 +보관(웹서버와 DB서버는 동일한 시스템에 구축 제한 등)하여야 한다. +고려 사항 +§ 개인정보 및 중요정보의 정의 및 분류 기준은 조직에 따라 상이하므로 해당 기관의 규정을 준수하여 +분류하여야 한다. +§ 분리 보관되는 개인정보 및 중요정보는 업무 목적상 필요한 최소 인원에게만 최소한의 접근권한을 부여하는 +등 접근통제 방안을 적용하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제53조(서버 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.4 데이터베이스 접근 +확인 대상(예시) +☐중요정보에 대한 분류 정의(예: 규정 또는 지침) +☐중요 정보시스템(예:DB 서버) +☐네트워크 구성도(서버 분리 구성 여부 표시 등) + + +![이미지 156-0](images/p0156_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +157 +A-83 +관리적 분야 > 11. 운영관리 +홈페이지 게시 자료에 대해 게시 절차를 마련하고 시행 +관련 조직 +정보보호 부서, 서비스 운영 부서 +세부 설명 +§ 홈페이지에 공식적인 자료 게시 절차가 없을 경우, 중요정보 및 개인정보 등 비공개 정보가 의도치 않게 +노출될 가능성이 존재하므로, 이러한 위험에 대응할 수 있도록 게시 담당자 지정 및 책임자 승인 등의 절차를 +수립‧이행하여야 한다. +고려 사항 +§ 홈페이지에 비공개 정보가 무단 게시되었는지 여부를 정기적으로 점검하여야 한다. +§ 금융회사 또는 전자금융업자는 홈페이지(공개용 서버)에 자료를 게시하는 경우, 다음의 절차를 준수하는 +절차를 마련하여야 한다. +- 게시자료에 대한 사전 내부 통제 +- 익명, 가명에 의한 게시 금지 +- 홈페이지 게시 전 사전 검토 및 승인 +- 개인정보 유출 및 위ㆍ변조 방지를 위한 보호조치 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제70조(홈페이지 등 게시자료 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제17조(홈페이지 등 공개용 웹서버 관리대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.3 공개서버 보안 +확인 대상(예시) +☐홈페이지 게시물 관리 지침 또는 절차(담당자 지정 여부 포함) +☐중대외 홈페이지의 게시물 등록 메뉴(예: 공지사항, 질의응답) 및 등록된 게시물 +☐해당 홈페이지 + + +![이미지 157-0](images/p0157_img0.png) + + +--- + +| 한국인터넷진흥원 | +158 +A-84 +관리적 분야 > 11. 운영관리 +개인정보 및 주요정보의 보호를 위하여 법적 요구사항을 반영한 암호화 대상, 암호강도, 암호사용, 암호 +키 관리 등이 포함된 암호정책 수립·이행 +관련 조직 +정보보호 부서, 개발 부서 +세부 설명 +§ 개인정보 및 주요정보의 보호를 위하여 법적 요구사항을 반영한 암호화 정책을 수립하여야 하며, 이 정책에는 +암호화 대상, 암호강도, 암호키 관리 등이 포함되어야 한다. +§ 암호키는 접근통제가 적용된 장소에 보관되어야 하며, 물리적 또는 논리적으로 접근통제를 적용하여야 한다. +§ 공개키 및 개인키의 유효기간은 최대 2년으로 정하고 유효기간을 초과한 경우 폐기하도록 하는 내용을 +지침(암호키 관리서식 포함)에 반영하여야 한다. +§ 암호정책은 정기적으로 검토하고 업데이트하여 최신 보안 기준을 반영하도록 하여야 하며, 암호화 방법의 +적절성과 보안성을 지속적으로 점검하여야 한다. +고려 사항 +§ 암호정책에 따라 개인정보 및 중요정보의 저장, 전송, 전달 시 암호화 위치, 시스템 특성 등을 고려하여 다음과 +같이 암호화 방식을 선정 및 적용하여 암호화를 수행하여야 한다. +구분 +암호화 방식 +정보통신망을 통한 +송·수신 시 + +## 1. 웹서버에 SSL(Secure Socket Layer) 인증서를 설치하여 전송하는 정보를 암호화 송수신 + + +## 2. 웹서버에 암호화 응용프로그램을 설치하여 전송하는 정보를 암호화하여 송수신 + + +## 3. 그 밖에 암호화 기술 활용 : VPN, PGP 등 + +개인정보처리시스템 등 +저장 시 + +## 1. 응용프로그램 자체 암호화(API 방식) + + +## 2. 데이터베이스 서버 암호화(Plug-in 방식) + +3. DBMS 자체 암호화(TDE 방식) +4. DBMS 암호화 기능 호출 + +## 5. 운영체제 암호화(파일암호화 등) + + +## 6. 그 밖의 암호화 기술 활용 + +업무용 컴퓨터 및 +모바일 기기 저장 시 + +## 1. 문서도구 자체 암호화(오피스 등에서 제공하는 암호 설정 기능 활용) + + +## 2. 암호 유틸리티를 이용한 암호화 + +3. DRM(Digital Right Management) 기술 적용 등 +보조저장매체 +저장 시 + +## 1. 암호화 기능을 제공하는 보안 저장매체 이용(보안USB 등) + + +## 2. 해당 정보를 암호화한 후 보조저장매체에 저장 등 + + + +![이미지 158-0](images/p0158_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +159 +§ 개인정보 및 주요정보의 보호를 위하여 다음과 같이 법적 요구사항을 반영한 암호화 대상, 암호강도, 암호사용 +등이 포함된 암호정책을 수립하여야 한다. +구분 +개인정보 보호법에 따른 암호화 대상 개인정보 +이용자가 아닌 정보주체의 개인정보 +이용자의 개인정보 +정보통신망 +을 통한 +송·수신 시 +정보통신망 +인증정보(비밀번호, 생체인식정보 등) +※ 내부망 포함 +인터넷망 +개인정보 +저장 시 +저장 위치 +무관 +인증정보(비밀번호, 생체인식정보 등) +※ 단, 비밀번호는 일방향암호화 +주민등록번호 +※ 법 제24조의2 제2항에 따라 암호화 +인터넷구간 +, DMZ +고유식별정보 +※ 단, 주민등록번호 외의 고유식별정보를 +내부망에 저장하는 경우에는 개인정보 +영향평가의 결과 또는 위험도 분석에 따른 +결과에 따라 암호화의 적용여부 및 +적용범위를 정하여 시행 가능 +주민등록번호, +여권번호, 운전면허번호, +외국인등록번호, +신용카드번호, 계좌번호, +생체인식정보 +※ 저장 위치 무관 +내부망 +개인정보취급자 컴퓨터, +모바일기기, +보조저장매체 +등에 저장 시 +고유식별정보, 생체인식정보 +개인정보 +§ 암호키 관리를 위한 지침을 수립하는 경우 다음 내용을 참고한다. 단, 처리속도 등 기술발전에 따라 사용 권고 암호 +알고리즘 등은 달라질 수 있으므로, 암호화 적용 시 국내외 암호관련 연구기관에서 제시하는 최신 정보 확인이 필요하다. +구분 +지침 +암호키 생성 +암호키는 중요정보를 암호화할 경우 보안강도가 높은 키길이를 갖는 안전한 알고리즘(예: +AES-128 등)을 적용하여 보안담당자의 승인을 받아 생성하고 ‘암호키 관리대장’에 기록한다. +(일방향 암호화의 경우는 SHA-256에 해당하는 해시를 적용) +암호키 사용(보관) +암호키는 비인가된 사용자가 접근하지 못하도록 가장 강력한 접근통제를 적용하여야 하며, +인가된 사용자 외에는 절대 노출되지 않도록 철저히 관리하여야 한다. 또한 암호키는 노출 +위험을 최소화하기 위해 최대 2년마다 변경하여야 한다. 암호키의 생성, 사용 및 폐기 ‘암호화 +관리대장’에 기록하고, 이 대장에 대한 접근은 보안담당자가 관리한다. 암호키는 내화금고 등 +안전한 장소에 보관되어야 한다. +암호키 폐기 +암호키는 사용 용도가 끝났거나 사용주기가 경과한 경우, 폐기하여야 한다. 암호키의 폐기는 지정된 +보안담당자가 수행하며, 폐기 과정과 결과는 '암호키 관리대장'에 정확히 기록하여야 한다. 또한, +폐기된 암호키는 완전히 삭제하거나 물리적으로 파괴하여 복구가 불가능하도록 하여야 한다. + + +![이미지 159-0](images/p0159_img0.png) + + +--- + +| 한국인터넷진흥원 | +160 +§ 암호화 알고리즘은 암호화 방식(예: 일방향-해시, 양방향-대칭키) 및 강도에 따라 다르다. 안전한 보 +안을 위한 보안 강도는 다음과 같이 KISA(참고: 암호 알고리즘 및 키 길이 이용 안내서)에서 권하는 +기준을 참고한다. +보안강도 +대칭키 +암호 +알고리즘 +(보안강도) +해시함수 +(보안강도) +공개키 암호 알고리즘 +암호 +알고리즘 +안전성 +유지기간 +(년도) +인수분해 +(비트) +이산대수 +타원곡선 +암호(비트) +공개키 +(비트) +개인키 +(비트) +112 비트 +112 +112 +2048 +2048 +224 +224 +2011에서 +2030년까지 +128 비트 +128 +128 +3072 +3072 +256 +256 +192 비트 +192 +192 +7680 +7680 +384 +384 +2030년 이후 +256 비트 +256 +256 +15360 +512 +512 +512 +§ 암호키의 사용 유효기간은 미국 국립표준기술원(NIST)에서 권하는 다음 기준을 참고한다. +구분 +알고리즘 명칭 +사용 유효기간 +송신자 사용기간 +수신자 사용기간 +대칭키 암호 알고리즘 +비밀키 +최대 2년 +최대 5년 +공개키 암호 알고리즘 +암호화 공개키 +최대 2년 +복호화 개인키 +최대 2년 +검증용 공개키 +최소 2년 +서명용 개인키 +최대 2년 +§ 법적 요구사항 등을 고려하여 안전한 암호화 알고리즘 및 보안 강도를 선택한다. +구분 +알고리즘 명칭 +대칭키 암호 알고리즘 +SEED, ARIA-128/192/256, AES-128/192/256, HIGHT, LEA 등 +공개키 암호 알고리즘 +RSAES-OAEP 등 +일방향 암호 알고리즘 +SHA-256/384/512 등 + + +![이미지 160-0](images/p0160_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +161 +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제24조의2(주민등록번호 처리의 제한), 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제7조(개인정보의 암호화) +공공기관 +국가 정보보안 기본지침 제102조(사용 원칙), 제103조(취급인가자 지정), 제105조(암호자재 설치ㆍ운영 장소) +금융회사 +신용정보의 이용 및 보호에 관한 법률 제19조(신용정보전산시스템의 안전보호) +신용정보업감독규정 제20조(기술적·물리적·관리적 보안대책), [별표 3] 기술적·물리적·관리적 +보안대책 마련기준 Ⅱ기술적·물리적 보안대책, 3. 개인신용정보의 암호화 +전자금융거래법 제21조(안전성 확보의무) +전자금융감독규정 제17조(홈페이지 등 공개용 웹서버 관리대책), 제19조(암호프로그램 및 키 +관리 통제), 제29조의2(사용자 인증수단 관리), 제34조(전자금융거래 시 준수사항), +제34조의3(이용자 비밀번호 관리), 제60조(외부주문등에 대한 기준) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.7.1 암호정책 적용 +확인 대상(예시) +☐암호정책 및 암호키 관리 지침 +☐(가이드) 암호 알고리즘 및 키 길이 이용 안내서(한국인터넷진흥원, 2018) +☐암호키 관리 대장(서식 예시 제42호) 암호화키 관리대장 (대외비) +☐암호화키 및 관리대장이 보관된 장소(예: 서버, 내화금고 등) + + +![이미지 161-0](images/p0161_img0.png) + + +--- + +| 한국인터넷진흥원 | +162 +A-85 +관리적 분야 > 11. 운영관리 +암호키를 복구하기 위한 복구 절차를 수립하고 복구 내역 검토 +관련 조직 +정보보호 부서, 개발 부서 +세부 설명 +§ 사용자의 퇴사 또는 사용자의 부주의 등으로 암호키를 알 수 없는 경우를 대비하여 암호키 복구를 위한 절차와 +방법을 명시한 정책을 수립하여야 한다. +§ 암호키의 복구가 필요한 경우 암호키 복구 이력을 기록하고 관리하여야 한다. +§ 암호키가 손상되거나 손실된 경우, 시스템 또는 암호화된 정보의 복구를 위하여 암호키는 별도의 매체에 +저장한 후, 물리적으로 안전한 장소(암호키 관리시스템, 물리적 분리된 곳 등)에 보관하여야 한다. +§ 암호키 복구 및 관리 절차는 정기적으로 검토하고 업데이트하여 최신 보안 기준에 부합하도록 유지하여야 한다. +고려 사항 +§ 암호키 복구를 위한 지침을 수립하는 경우 다음 내용을 참고한다. +구분 +지침 +암호키 복구 +암호키 소유자가 퇴사 등의 사유로 암호화키를 알 수 없는 경우, 보안담당자의 승인을 받아 +"암호키 복구 대장"에 복구 기록을 작성하고, 암호키 복구 절차를 진행하여야 한다. "암호키 +복구 대장"에 대한 접근은 보안담당자가 관리하며, 안전한 관리를 위해 내화금고 등 물리적으로 +분리된 장소에 보관하도록 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제7조(개인정보의 암호화) +공공기관 +- +금융회사 +신용정보의 이용 및 보호에 관한 법률 제45조(감독·검사 등) +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제31조(암호프로그램 및 키 관리 통제) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.7.2 암호키 관리 + + +![이미지 162-0](images/p0162_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +163 +확인 대상(예시) +☐암호키 관리 지침 +☐암호키 관리 대장 +☐암호키 복구 대장 +☐암호키 관리·복구 대장이 보관된 장소(예: 내화금고 등) +☐(서식 예시 제42호) 암호화키 관리대장 (대외비) +☐(서식 예시 제43호) 암호화키 복구대장 (대외비) + + +![이미지 163-0](images/p0163_img0.png) + + +--- + +| 한국인터넷진흥원 | +164 +12 +보안관리 +A-86 +관리적 분야 > 12. 보안관리 +침입차단 및 탐지 도구는 조직의 보안 정책과 규칙에 적합하게 설치하여 운영 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 침입차단 및 탐지를 위한 보안 장비에 설정하는 접근규칙은 조직의 보안 정책과 규칙에 따라 정의하고 +운영하여야 한다. +§ 보안 장비는 기본 정책으로 Inbound 및 Outbound 트래픽에 대해 모든 서비스를 차단하되, 보안성 검토(승인 절차 +등)를 통해 승인된 IP 및 포트에 대해서만 허용이 이루어지도록 정책을 적용하여야 한다. +§ 외부에서 방화벽을 우회하여 내부망으로 직접 연결되는 경로(예: NAT구성을 통한 리다이렉트 설정)는 +존재하지 않도록 하여야 한다. +고려 사항 +§ 방화벽(Firewall) 및 IDS, IPS 등 보안시스템의 취약점 점검은 연 1회 이상 실시하여야 하며, 보안시스템에 설정된 +정책(Rule)의 타당성은 주기적으로 검토하여 장기 미사용 정책, 중복된 정책, 사용기간 만료 정책 등을 수정하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제42조(보안ㆍ네트워크 장비 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.1 네트워크 접근, 2.10.1 +보안시스템 운영 +확인 대상(예시) +☐방화벽 등 보안 장비의 기본 접근규칙(Rule) +☐취약점 점검 결과서 + + +![이미지 164-0](images/p0164_img0.png) + + +![이미지 164-1](images/p0164_img1.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +165 +A-87 +관리적 분야 > 12. 보안관리 +외부자와 정보 공유, 네트워크 공유 등에 따른 보안위협에 대한 대책 운영 +관련 조직 +정보보호 부서, 해당 사업 부서 +세부 설명 +§ 타 기업 및 기관이 정보 공유 및 네트워크 공유 연계되는 시스템을 사용하는 경우 인증, 일방향 전송, 전송 구간 +암호화, 연계구간 접근통제, 보안성 검토 등의 기술적‧관리적 보호대책을 마련하고 운영하여야 한다. +§ 기술적 보호조치 등을 포함하는 정보전송 협약을 체결하여 양 당사자의 역할과 책임을 명문화한다. +고려 사항 +§ 개인정보를 외부에 제공하는 경우에는 정보전송을 협약하고 기술적인 보호조치를 강구하기 전에 제3자에게 +개인정보의 제공(전송)이 법률상 가능한지 확인 후 그 여부를 결정하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립·시행 및 점검) +공공기관 +국가 정보보안 기본지침 제12조(보안대책 수립) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.5 정보전송 보안 +확인 대상(예시) +☐외부 연계시스템 구성도 및 기술적 보호조치 대책 +☐외부 연계 기관 등과 체결한 정보전송 협약서 +☐연계시스템 또는 서비스 +☐용역업체 인수인계대상 + + +![이미지 165-0](images/p0165_img0.png) + + +--- + +| 한국인터넷진흥원 | +166 +A-88 +관리적 분야 > 12. 보안관리 +정보통신망에 비인가 PC, 노트북 등을 연결 시 차단 및 차단 이력 주기적 검토 +관련 조직 +정보보호 부서 +세부 설명 +§ 정보통신망에 허가되지 않은 PC, 노트북 등이 연결될 경우, 악성코드 감염이나 정보 유출 등의 침해가 발생할 +수 있으므로, 네트워크 접근제어(NAC) 장비 등을 활용하여 비인가 장치의 연결을 차단하고 차단 이력을 +주기적으로 검토하여야 한다. +고려 사항 +§ 비인가 단말기가 중요 시설에 무단 반입되어 내부망에 임의 연결되지 않도록 단말기 반입·반출 통제(장비 식별 +포함)를 고려한 네트워크 연결 승인절차를 수립하여야 한다. +§ 정보통신망에 대한 비인가 단말기의 연결 여부, 예외 정책, 네트워크 연결 승인 및 차단 현황 등 네트워크 +접근제어 시스템의 정책 및 차단 이력을 주기적으로 검토하고 필요시 사후조치를 수행한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제) +공공기관 +국가 정보보안 기본지침 제79조(비인가 기기 통제) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제12조(단말기 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.6 업무용 단말기기 보안 +확인 대상(예시) +☐비인가 PC, 노트북 등의 단말기 통제 지침(또는 절차) +☐단말기 반출입 및 네트워크 연결 승인 문건 +☐네트워크 접근제어시스템 +☐(서식 예시 제6호) 단말기 사용 신청서 + + +![이미지 166-0](images/p0166_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +167 +A-89 +관리적 분야 > 12. 보안관리 +이동형 장치(노트북, 태블릿, 보조저장매체 등)의 사용 및 반출입에 대한 통제절차 수립‧이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 이동형 장치(노트북, 태블릿, 보조저장매체 등)를 사용하거나 반입‧반출하는 경우, 정보유출, 악성코드 감염 등 +보안사고 예방을 위한 통제 절차를 수립·이행하여야 한다. +§ 모든 이동형 장치는 관리번호를 부여하여 자산관리 시스템에 등록하고, 보호구역으로 지정된 곳에 보관하여야 +한다. +§ 또한, 사전 승인을 받은 자만 이동형 장치를 사용할 수 있도록 하고 반출 시에는 반출 요청서를 작성하여 담당자에 +게 보고한다. 보안 담당자는 반출 요청을 검토하고, 불필요한 데이터를 삭제한 후 반출 등의 이동형 장치 반출‧입 +절차를 마련하여야 한다. +고려사항 +§ 보안 담당자는 이동형 장치별로 구분 및 관리하고 수량과 보관 상태를 정기적으로 점검하여야 한다. +§ 공공기관은 국가 정보보안 기본지침에 따라 「USB메모리 등 휴대용 저장매체의 보안관리지침」을 +준수하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제74조(단말기 보안), 제78조(휴대용 저장매체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.6 반출입 기기 통제, 2.10.7 +보조저장매체 관리 + + +![이미지 167-0](images/p0167_img0.png) + + +--- + +| 한국인터넷진흥원 | +168 +확인 대상(예시) +☐이동형 저장매체 관리 지침 또는 절차 +☐이동형 저장매체 및 정보시스템 반출입 지침(또는 절차) +☐시스템의 USB 장치 통제 방법 및 통제 여부 +☐반출입 통제 방법 및 실제 통제 여부 +☐사무실, 통신실, 서버실 등의 PC, 정보시스템 +☐보호구역 내 반출입 신청서 +☐(서식 예시 제4호) 정보시스템 반입, 반출 신청서 + + +![이미지 168-0](images/p0168_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +169 +A-90 +관리적 분야 > 12. 보안관리 +이동형 장치(노트북, 태블릿, 이동식저장매체 등)의 반출입 시 통제 절차에 따른 기록 유지 관리하고 절 +차 준수여부를 확인할수 있도록 반출입 이력을 주기적으로 점검 +관련 조직 +정보보호 부서 +세부 설명 +§ 이동형 장치(노트북, 태블릿, 보조저장매체 등)의 무단 반출입에 따른 내부자료 유출에 대비하여 통제 절차에 +따른 기록을 유지‧관리하고, 절차 준수 여부를 확인할 수 있도록 반출입 이력을 주기적으로 점검하여야 한다. +※ 반출입 관리대장 기록사항(예시) +- 반출입 일시 및 장소 +- 사용자 정보 +- 기종(모델), 기기식별정보(시리얼번호 등) +- 반출입 사유 +- 보안 점검 결과 +- 관리자 확인 서명 등 +고려사항 +§ 보호구역 내 반출입 이력 점검시에는 반입·반출 미디어 장치 수량 차이 비교 등을 통해 장치 분실 및 오남용에 +대한 관점을 고려하여야 한다 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제74조(단말기 보안), 제78조(휴대용 저장매체 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.6 반출입 기기 통제 + + +![이미지 169-0](images/p0169_img0.png) + + +--- + +| 한국인터넷진흥원 | +170 +확인대상(예시) +☐보호구역 내 반출입 신청서 +☐반출입 관리대장 +☐반출입 이력 검토 결과 +☐(서식 예시 제31호) 휴대용 저장매체(전산장비 포함) 반출·입 대장 + + +![이미지 170-0](images/p0170_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +171 +A-91 +관리적 분야 > 12. 보안관리 +스마트폰·개인휴대단말기(태블릿)·전자제어장비 등 첨단 정보통신기기를 활용하는 경우, 업무자료 등 +중요정보 보호 및 안전한 전송을 위한 방안 마련 +관련 조직 +정보보호 부서 +세부 설명 +§ 스마트폰, 개인휴대단말기(태블릿), 전자제어장비 등 첨단 정보통신기기를 사용하는 경우, 중요 정보의 +암호화와 안전한 전송(전송구간 암호화 등) 보호조치를 마련하여야 한다. +§ 관계 법규에 따라 특정 첨단 정보통신기기의 이용이 제한되거나 기술적인 보호조치가 요구될 수 있으므로, +해당 법규가 있는지 확인하여 해당 법규의 요건을 만족하는 보호대책을 적용하여야 한다. +고려 사항 +§ 전송구간 암호화는 SSL, VPN 등의 암호화 통신 방식을 적용하며, 모바일의 경우 E2E 암호화 방식을 적용하여 +인증 정보를 암호화하여 전송하는 것을 권고한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제6조(접근통제), 제7조(개인정보의 암호화) +공공기관 +국가 정보보안 기본지침 제56조(업무용 통신단말기 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제12조(단말기 보호대책), 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.7.1 암호정책 적용, 2.10.6 +업무용 단말기기 보안 +확인 대상(예시) +☐업무상 사용 허가된 스마트폰, 태블릿 등의 이용 현황 +☐정보통신기기 기술적 보호대책(암호화 저장 및 전송 등) 적용 여부 +☐스마트폰, 전자제어장비 등 정보통신기기 + + +![이미지 171-0](images/p0171_img0.png) + + +--- + +| 한국인터넷진흥원 | +172 +A-92 +관리적 분야 > 12. 보안관리 +보조저장매체의 사용을 주기적으로 점검하고 운영 현황을 최신화 +관련 조직 +정보보호 부서 +세부 설명 +§ 보조저장매체의 보유 현황, 사용 및 관리 실태를 주기적으로 점검하여 운영 현황을 현행화하여야 한다. +§ 보조저장매체의 사용, 보관, 폐기, 재사용 등에 대한 관리 절차를 통해 인가된 보조저장매체를 구분ㆍ관리하고 +매월 또는 분기별로 등록된 보조저장매체의 수량 및 보관 상태를 정기적으로 점검하여야 한다. +고려 사항 +§ 보조저장매체 관리대장 작성 등을 통해 현황을 관리할 수 있으며, 관리대장에 등재된 보조저장매체를 +무작위로 선정하여 수량 불일치 등 관리상태의 미흡 여부를 확인한다. +§ 보조저장매체를 통하여 개인정보 또는 중요정보의 유출이 발생하거나 악성코드가 감염되지 않도록 관리 +절차를 수립·이행하고, 개인정보 또는 중요정보가 포함된 보조저장매체는 안전한 장소에 보관하여야 한다. +관계 법규 +공통 +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제78조(휴대용 저장매체 보안), 제79조(비인가 기기 통제) +금융회사 +전자금융감독규정 제12조(단말기 보호대책), 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.7 보조저장매체 관리 +확인 대상(예시) +☐인가된 보조저장매체 보유 현황 +☐보조저장매체 주기적 점검 결과 보고서 +☐보조저장매체 관리시스템 +☐보조저장매체 사용 부서 및 PC, 노트북 등 +☐(서식 예시 34호) 휴대용 저장매체 점검대장 + + +![이미지 172-0](images/p0172_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +173 +A-93 +관리적 분야 > 12. 보안관리 +노트북, 보조저장매체 등 이동형 장치의 분실을 통한 자료 유출 대비책 마련 +관련 조직 +정보보호 부서 +세부 설명 +§ 이동형 장치(예: 노트북, 보조저장매체 등) 분실 시 발생할 수 있는 개인정보 및 중요정보 유출 방지를 위해 +중요정보의 암호화 저장 등의 보호대책을 수립·이행하여야 한다. +§ 개인정보 및 중요정보가 포함된 이동형 장치는 잠금장치가 있는 안전한 장소에 보관하여야 한다. +§ 문서 프로그램 등의 자체 암호 설정 기능, 파일 암호화 등을 통해 이동형 장치 내 개인정보 및 중요정보를 +암호화하여 관리할 수 있으며, 관리 절차 수립 및 사용자 교육 등과 같은 관리적인 조치를 통해 자료 유출에 +대한 보호 대책을 마련한다. +고려 사항 +§ 예산 운용이 가능하다면 보안USB 시스템, 업무용 노트북(PC)에 암호화 솔루션(예: DRM) 등의 기술적인 +보호조치를 통해 장치 분실 등에 따른 유출 시에도 저장된 정보를 열람할 수 없도록 조치할 수 있다. +§ 관리 대상이 많지 않은 조직은 백신 소프트웨어의 USB 메모리 제어기능을 활용하여 기술적인 조치를 적용할 +수 있다. 관리자 비밀번호 설정 및 백신 관리 정책 설정을 통해 USB 메모리의 읽기‧쓰기 기능을 제한한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제78조(휴대용 저장매체 보안), 제79조(비인가 기기 통제) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제12조(단말기 보호대책), 제13조(전산자료 보호대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.7 보조저장매체 관리 + + +![이미지 173-0](images/p0173_img0.png) + + +--- + +| 한국인터넷진흥원 | +174 +확인 대상(예시) +☐이동형 장치 보유 현황 +☐이동형 장치 분실 방지 대책 +☐이동형 장치의 정보 암호화 대책 +☐(서식 예시 제31호) 휴대용 저장매체(전산장비 포함) 반출·입 대장 +☐(서식 예시 제32호) 휴대용 저장매체 관리대장 (일반용) +☐(서식 예시 제33호) 휴대용 저장매체 관리대장 (비밀용) + + +![이미지 174-0](images/p0174_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +175 +A-94 +관리적 분야 > 12. 보안관리 +서버, 네트워크시스템, 보안시스템, PC 등 자산별 특성 및 중요도에 따라 운영체제(OS)와 +소프트웨어의 패치관리 정책 및 절차 수립‧이행 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 서버, 네트워크시스템, 보안시스템, PC 등 자산별 특성 및 중요도에 따라 OS와 소프트웨어의 패치관리 정책 및 +절차를 수립·이행하여야 한다. +§ 주요 시스템의 경우 설치된 OS, 소프트웨어 패치 적용 현황을 주기적으로 점검하여 관리하여야 한다. +§ 서비스 영향도 등에 따라 취약점을 조치하기 위한 최신의 패치 적용이 어려운 경우 적절한 보완대책을 +마련하여야 한다. +고려 사항 +§ 자산별 특성 및 중요도에 따른 패치 적용 대상 및 주기, 테스트 및 영향 분석 방안, 패치 적용 및 미적용 패치 +관리 방안을 고려하여 패치관리 정책 및 절차를 수립·이행하여야 한다. +§ 주요 시스템에 설치된 운영체제 및 소프트웨어의 버전 정보, 패치 적용현황, 패치별 적용일자 등을 확인할 수 +있도록 목록으로 관리하고, 최신 보안패치 적용 필요 여부를 주기적으로 확인하여야 한다. +§ 테스트 환경에서의 테스트, 유관 부서 및 협력업체(유지보수, 벤더)와의 커뮤니케이션 등을 통해 패치 적용 시 +시스템 가용성에 미칠 수 있는 영향을 분석하고, 운영시스템의 중요도와 특성에 따라 즉시 패치 적용이 어려운 +경우 그 사유와 보완대책을 마련하여 책임자에게 보고하고 그 현황을 관리하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제9조(악성프로그램 등 방지) +공공기관 +국가 정보보안 기본지침 제53조(서버 보안), 제53조의2(제어시스템 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보저치리스템 보호대책), 제15조(해킹 등 방지대책), +제16조(악성코드 감염 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.8 패치관리 + + +![이미지 175-0](images/p0175_img0.png) + + +--- + +| 한국인터넷진흥원 | +176 +확인 대상(예시) +☐패치 적용 관리 정책·절차 +☐시스템별 패치 적용 현황 +☐패치 적용 관련 영향도 분석 결과 + + +![이미지 176-0](images/p0176_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +177 +A-95 +관리적 분야 > 12. 보안관리 +서버, 네트워크시스템, 보안시스템, PC 등의 운영체제, 소프트웨어 등이 개발사로부터 보안 지원이 +되지 않을 경우 해당 제품을 교체하거나 보안대책 마련 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 최신의 운영체제, 소프트웨어 등이 보안 지원이 중단(EOS, EOL 등)되었을 경우를 대비한 보안대책을 +수립·이행하여야 한다. +§ 서버, 네트워크시스템 보안시스템, PC 등의 운영체제, 소프트웨어 등이 개발사로부터 보안 지원이 되지 않을 +경우 해당 제품을 교체하여야 하며, 불가피한 사유로 교체가 어려운 경우 향후 취약점 발생에 따른 위협에 +대응할 수 있도록 보안대책을 마련하여야 한다. +§ 보안지원이 중단된 운영체제 및 소프트웨어를 파악하기 위해 사용 현황을 주기적으로 관리하여야 한다. +고려 사항 +§ 자산에 대한 주기적인 현황관리 또는 패치관리 과정에서 자산별 서비스 지원 종료 시점을 확인하여 서비스 +지원 종료 시점이 도래 예정이거나 종료된 자산을 식별하여야 한다. +§ 제품 교체 또는 업그레이드 시 비용 발생이 예상되는 자산의 경우 사전에 계획을 수립하여 서비스 지원 종료 +시점 이전에 교체될 수 있도록 예산을 확보하여야 한다. +§ 시스템간 연동 또는 호환성 등으로 제품 교체 또는 업그레이드가 불가한 경우 사유와 함께 알려진 취약점에 +대한 보호대책, 향후 적용 시점 등 보완대책을 마련하여 책임자에게 보고하고 그 현황을 관리하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제9조(악성프로그램 등 방지) +공공기관 +국가 정보보안 기본지침 제42조(보안·네트워크 장비 보안), 제53조(서버 보안), +제74조(단말기 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제14조(정보처리시스템 보호대책), 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.8 패치관리 + + +![이미지 177-0](images/p0177_img0.png) + + +--- + +| 한국인터넷진흥원 | +178 +확인 대상(예시) +☐서버 등 정보시스템 운영체제 및 소프트웨어 현황 +☐보안지원 중단 운영체제 사용 현황 +☐교체계획 예산이 반영되어 있는 경우 예산 결재 문서 +☐호환성 등의 문제로 지연 중일 경우 제조사의 확인 서류 + + +![이미지 178-0](images/p0178_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +179 +A-96 +관리적 분야 > 12. 보안관리 +바이러스 등 악성프로그램을 대비한 보안프로그램의 설치‧운영 등 보호대책 운영 +관련 조직 +정보보호 부서 +세부 설명 +§ 컴퓨터 바이러스·트로이목마 등 악성코드로부터 보호하기 위하여 백신 소프트웨어를 설치하고 해킹 메일 +차단 시스템을 구축하는 등 보안대책을 수립·시행하여야 한다. +§ PC, 노트북 등의 정보시스템에 바이러스, 웜, 트로이목마, 랜섬웨어 등의 악성코드가 감염되지 않도록 +백신프로그램 등을 설치·운영하여야 하며 최신의 상태로 유지하기 위해 주기적으로 업데이트를 수행하여야 +한다. +§ 바이러스, 악성코드 등 이상징후가 발견되는 경우 이용자에게 통지하고 사용 중지 및 격리 조치를 수행하여야한다. +고려 사항 +§ 유닉스, 리눅스 등의 서버는 윈도우 서버 대비 악성코드 감염 우려가 낮고 상용 백신프로그램이 부족하여 백신 +설치가 어려운 경우 서버의 가용성, 악성코드의 감염 가능성, 기존 보안대책의 적절성 등을 종합적으로 +고려하여 백신 프로그램 등 보안프로그램 설치 여부를 결정하여야 한다. +§ 외부 업데이트 서버와의 연결은 보안 위협에 노출될 수 있으므로 방화벽 규칙 설정을 통해 허용 범위를 +최소화하고, 주기적인 점검 및 업데이트를 수행하는 등의 조치를 이행한다. +§ 보안프로그램의 패치오류 검증, 무결성 검증 등이 필요하여 보안프로그램의 업데이트를 즉시 적용하기 어려운 +등 정당한 사유가 있는 경우에는 보안프로그램의 업데이트에 필요한 조치를 확인한 후 업데이트를 적용한다. +§ 악성프로그램 탐지 및 조치를 위한 백신 중앙 관리 서버 등을 구축하는 경우 다음의 관리설정이 필수적으로 +적용되어야 한다. +- 백신프로그램을 임의 삭제하거나 환경설정 변경을 금지 +- 백신프로그램이 설치되지 않은 시스템은 업무시스템 접속을 위한 내부 네트워크로의 접근 차단 +§ 악성프로그램 감염 발견 시 악성코드 확산 및 피해를 최소화하기 위해 대응절차를 수립·이행하여야 한다. + + +![이미지 179-0](images/p0179_img0.png) + + +--- + +| 한국인터넷진흥원 | +180 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제9조(악성프로그램 등 방지) +공공기관 +국가 정보보안 기본지침 제74조(단말기 보안), 제53조의2(제어시스템 보안), 제77조(전자우편 +보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제16조(악성코드 감염 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.9 악성코드 통제 +확인 대상(예시) +☐백신 프로그램 등 보안프로그램 구매 라이선스 +☐보안프로그램 관리설정 기준 및 지침 +☐보안프로그램이 설치된 업무 PC 및 서버, 백신서버 + + +![이미지 180-0](images/p0180_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +181 +A-97 +관리적 분야 > 12. 보안관리 +‘사이버보안진단의 날’ 등과 같이 월별 보안 중점점검사항에 대해 매월 보안점검 및 조치활동 수행 +관련 조직 +정보보호 부서 +세부 설명 +§ 매월 PC 보안점검과 같은 보안점검이 전사적으로 이루어질 수 있도록 월별 보안 중점 점검사항을 정하고 이를 +모든 조직이 참여할 수 있도록 정례화(예: 사이버보안진단의 날)하여야 한다. +§ 전사적인 정보보안 강화를 위해 클린데스크, PC 보안점검, 불필요한 정보 파기 등의 이행을 의무화하고, 이를 +효과적으로 관리하기 위한 점검 체계를 구축하여야 한다. +§ 공공기관의 경우 각급기관의 장은 해당 기관의 실정에 맞게 매월 세 번째 수요일 ‘사이버 보안진단의 날’에 +소속 부서의 정보통신망과 정보시스템의 보안취약 여부 확인 등 보안진단을 실시하여야 한다. 다만, 부득이한 +사유로 해당 일에 시행하지 못할 경우 같은 달 다른 날에 시행할 수 있다. +고려 사항 +§ 보안점검항목 및 수행절차는 자체적으로 수립하여 이행할 수 있으며, 점검 시 PC 보안점검을 위한 최소한의 +점검항목(예: 주요정보통신기반시설 보호지침에 따른 기술적 취약점 점검항목)은 필수적으로 수행되도록 +한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제10조(사이버보안진단의 날) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 1.3.3 운영현황 관리, 2.4.7 +업무환경 보안 +확인 대상(예시) +☐월별 전사 보안점검 항목 및 수행 절차(예: 사이버보안 진단의 날 운영계획) +☐월별 보안점검 수행 결과 및 보고문건 + + +![이미지 181-0](images/p0181_img0.png) + + +--- + +| 한국인터넷진흥원 | +182 +A-98 +관리적 분야 > 12. 보안관리 +네트워크, 메신저 등으로부터의 허가되지 않았거나 불분명한 파일의 다운로드를 금지하고, 부득이하게 +다운로드 받을 경우 바이러스 검사 수행 +관련 조직 +정보보호 부서 +세부 설명 +§ 악성프로그램 감염 예방을 위해 공식적으로 지정된 전자우편 및 메신저 이외에는 사용할 수 없도록 하여야 +한다. 인가된 전자우편 및 메신저를 통해 파일을 다운로드할 경우, 백신 등 보안프로그램을 통해 바이러스 +검사가 자동으로 이루어지도록 하여야 한다. +§ 인터넷망의 효율적인 운영관리 및 악성프로그램 유입 차단을 위하여 업무와 관련없는 웹서비스를 이용하지 +못하도록 수시로 점검하고 침입차단시스템 등을 활용하여 음란, 도박, P2P 등을 차단하여야 한다. +고려 사항 +§ 기반시설 내부망 PC는 보안 강화를 위해 원칙적으로 내부망 전용 메일 및 메신저 사용만 허용한다. +§ 외부에서 수신된 파일은 악성프로그램 감염 위험이 있으므로 다운로드를 금지하며, 불가피하게 +다운로드하여야 할 경우 반드시 백신 등 보안프로그램을 통해 악성프로그램 검사를 진행하거나 별도의 인터넷 +PC를 이용하여 안전하게 다운로드하도록 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제9조(악성프로그램의 방지) +공공기관 +국가 정보보안 기본지침 제40조(내부망·인터넷망 분리), 제47조(인터넷 사용제한) +금융회사 +전자금융거래법 제21조(안전성 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책), 제16조(악성코드 감염 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.6.7 인터넷 접속 통제, 2.10.9 +악성코드통제 +확인 대상(예시) +☐비업무 웹사이트 및 메신저 사용 차단 대책(예: 유해사이트 차단솔루션, UTM 등) +☐백신 서버 설정 또는 PC에 설치된 백신소프트웨어 설정 + + +![이미지 182-0](images/p0182_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +183 +A-99 +관리적 분야 > 12. 보안관리 +스팸 메일 수신을 줄이기 위한 방안(스팸차단 솔루션)을 마련 +관련 조직 +정보보호 부서 +세부 설명 +§ 스팸 메일을 통한 악성프로그램 유입을 방지하기 위해 스팸차단 솔루션 등 스팸 메일을 차단할 수 있는 기술적 +조치 등을 마련하여야 한다. +§ 스팸차단 솔루션 구축을 통해 스팸 및 악성코드의 공격을 차단할 수 있으며, 이를 통해 개인정보 및 중요정보 +유출을 예방할 수 있다. +고려 사항 +§ 스팸 메일로부터 안전하게 이메일을 이용하기 위해 스팸 필터 및 이메일 보안 소프트웨어 등 스팸차단 솔루션을 +사용하여야 한다. +§ 스팸 메일로 인한 피해를 예방하기 위해 출처가 불분명한 이메일을 열지 않는 등 사용자 인식제고 활동을 +수행할 필요가 있다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제77조(전자우편 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제15조(해킹 등 방지대책), 제16조(악성코드 감염 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.9 악성코드 통제 +확인 대상(예시) +☐스팸메일 차단 솔루션 운영 현황 +☐스팸메일 차단 정책 내역 + + +![이미지 183-0](images/p0183_img0.png) + + +--- + +| 한국인터넷진흥원 | +184 +A-100 +관리적 분야 > 12. 보안관리 +개인정보의 유출 등을 방지하기 위해 접근 권한의 관리, 접근통제, 암호화, 접속기록의 보관 및 점검 등 +개인정보의 안전성 확보에 필요한 조치 이행 +관련 조직 +정보보호 부서, DB관리 부서 +세부 설명 +§ 개인정보처리자는 개인정보를 처리함에 있어서 개인정보가 분실·도난·유출·위조·변조 또는 훼손되지 +아니하도록 ‘개인정보의 안전성 확보조치 기준’에 따른 기술적‧관리적 및 물리적 안전조치를 이행하여야 한다. +§ ‘개인정보의 안전성 확보조치 기준’에 따른 주요 조치사항은 다음과 같다. +구분 +주요 조치 사항 +내부 관리계획의 +수립‧시행 및 점검 +(제4조) +- 내부 의사결정절차를 통한 내부 관리계획의 수립‧시행 및 수정 이력 관리 +- 개인정보 보호책임자 및 개인정보취급자 대상 차등화된 교육의 정기적 실시 +- 내부 관리계획 이행 실태의 연1회 이상 점검‧관리 +접근 권한의 관리 +(제5조) +- 개인정보처리시스템에 대한 접근권한을 업무수행에 필요한 최소한의 범위로 차등 부여 +- 개인정보취급자 또는 개인정보취급자 업무 변경시 지체없는 접근 권한 변경 또는 말소 +- 접근 권한 부여, 변경 또는 말소 내역의 기록 및 최소 3년간 보관 +- 개인정보취급자별 계정 발급 및 공유 금지 +- 개인정보취급자 또는 정보주체의 인증수단을 안전하게 적용‧관리 +- 개인정보취급자 또는 정보주체의 인증 실패 횟수 제한 조치 +접근통제 +(제6조) +- 정보통신망을 통한 불법적 접근 및 침해사고 방지를 위한 안전조치(접근 제한 조치 및 개인정보 +유출시도 탐지‧대응 조치) +- 외부 접속시 안전한 인증수단 적용 +- 인터넷 홈페이지, P2P, 공유설정 등에 대한 조치 +- 세션 타임 아웃 조치 +- 업무용 모바일 기기 비밀번호 설정 등 보호조치 +- 인터넷망 차단조치 +개인정보의 암호화 +(제7조) +- 비밀번호, 생체인식정보 등 인증정보 저장 또는 송수신시 암호화(단, 비밀번호는 일방향암호화) +- 이용자의 고유식별정보, 신용카드번호, 계좌번호, 생체인식정보 저장 시 암호화 +- 이용자가 아닌 정보주체의 고유식별정보 저장시 암호화 +- 개인정보를 인터넷망 구간으로 송수신 시 암호화 +- 컴퓨터, 모바일 기기 및 보조저장매체에 고유식별정보 등 저장 시 암호화 +- 안전한 암호 키 생성, 이용, 보관, 배포 및 파기에 관한 절차 수립‧시행 + + +![이미지 184-0](images/p0184_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +185 +고려 사항 +§ 개인정보처리자는 처리하는 개인정보의 보유 수, 유형 및 정보주체에 미치는 영향 등을 고려하여 스스로의 +환경에 맞는 개인정보 안전성 확보에 필요한 조치를 적용하여야 한다. 다만, ‘개인정보의 안전성 확보조치 +기준’에 따른 사항은 최소한의 법적 요건이므로 반드시 준수하여야 한다. +§ 개인정보의 안전성 확보조치 기준의 세부 사항은 개인정보 포털(https://www.privacy.go.kr) 자료실의 +개인정보의 안전성 확보조치 기준 안내서를 참고할 수 있다. +§ 금융회사 +등이 +개인신용정보를 +처리하는 +경우, +신용정보법 +및 +신용정보업감독규정 +별표3 +기술적‧물리적‧관리적 보안대책 마련 기준에 따른 보안대책을 적용하여야 한다. +접속기록의 보관 및 +점검 (제8조) +- 개인정보처리시스템에 대한 개인정보취급자의 접속기록을 1년 이상 또는 2년 이상 보관‧관리 +- 접속기록의 월 1회 이상 점검 및 다운로드 사유 확인 +- 접속기록의 안전한 보관 +악성프로그램 등 +방지 (제9조) +- 악성프로그램 등을 방지‧치료할 수 있는 보안 프로그램 설치‧운영 +- 보안프로그램의 자동 업데이트 기능 또는 정당한 사유가 없는 한 일 1회 이상 업데이트 실시 +- 악성프로그램 경보 발령 또는 응용프로그램이나 운영체제 소프트웨어 제작업체에서 보안 +업데이트 공지가 있는 경우 정당한 사유가 없는 한 즉시 업데이트 등 실시 +물리적 안전조치 +(제10조) +- 전산실, 자료보관실 등 개인정보 보관 장소에 대한 출입통제 절차 수립‧운영 +- 개인정보가 포함된 서류, 보조저장매체 등을 잠금장치가 있는 안전한 장소에 보관 +- 개인정보가 포함된 보조저장매체의 반출‧입 통제를 위한 보안대책 마련 +재해‧재난 대비 +안전조치 (제11조) +- 재해‧재난 발생 시 개인정보처리시스템 보호를 위한 위기대응 매뉴얼 등 대응절차 마련 및 정기 점검 +- 개인정보처리시스템 백업 및 복구를 위한 계획 마련 +출력‧복사시 +안전조치 (제12조) +- 개인정보처리시스템에서 개인정보의 출력시(인쇄, 화면표시, 파일생성 등) 용도 특정 및 용도에 +따라 출력항목 최소화 +- 개인정보가 포함된 종이 인쇄물, 개인정보가 복사된 외부 저장매체 등 개인정보의 +출력‧복사물을 안전하게 관리하기 위해 필요한 안전조치 +개인정보의 파기 +(제13조) +- 개인정보 파기시 복원되지 않도록 완전파괴, 전용소자장비, 초기화 또는 덮어쓰기 수행 +- 개인정보의 일부만을 파기시 복구 및 재생되지 않도록 관리 및 감독 +- 기술적 특성으로 완전 파기가 어려운 경우 익명처리 조치 +공공시스템운영기 +관 등의 개인정보 +안전성 +확보조치(제3장) +- 공공시스템운영기관의 안전조치 기준 적용(제14조) +- 공공시스템운영기관의 내부 관리계획의 수립‧시행(제15조) +- 공공시스템운영기관의 접근 권한의 관리(제16조) +- 공공시스템운영기관의 접속기록의 보관 및 점검(제17조) + + +![이미지 185-0](images/p0185_img0.png) + + +--- + +| 한국인터넷진흥원 | +186 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 +공공기관 +- +금융회사 +신용정보의 이용 및 보호에 관한 법률 제19조(신용정보전산시스템의 안전보호) +신용정보업감독규정 제20조(기술적·물리적·관리적 보안대책), 별표3 기술적‧물리적‧관리적 보안대책 +마련 기준 +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 나. 보호대책 요구사항 +확인 대상(예시) +☐개인정보 내부 관리계획 +☐개인정보처리시스템 현황 +☐개인정보의 안전성 확보조치 기준 적용 현황 +☐개인정보 내부 관리계획 이행실태 점검 결과 + + +![이미지 186-0](images/p0186_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +187 +A-101 +관리적 분야 > 12. 보안관리 +서비스 거부(DDoS) 공격 방지를 위한 대응방안(그린DDoSZone 등) 수립 및 운영 +관련 조직 +정보보호 부서, DB관리 부서 +세부 설명 +§ DDoS(Distributed Denial of Service) 공격에 대응하기 위해 공격 기법, 목표 시스템, 예상 피해 규모 등 다양한 +요소를 고려하여 보안대책을 수립‧운영하여야 한다. +고려 사항 +§ DDoS에 대한 기술적인 대응은 일반적인 네트워크 장비 또는 보안 장비를 통해 할 수 있지만, 정확하고 신속한 +대응을 위해서는 DDoS 공격에 특화된 보안대책의 적용을 고려할 필요가 있다. +§ DDoS 공격에 특화된 보안대책으로는 DDoS 대응 장비, 그린 DDoS Zone 도입(서비스 구독 형태 또는 +자체구축) 등이 있다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제54조(공개서버 보안) +금융회사 +전자금융거래법 제21조(안전성의 확보 의무) +전자금융감독규정 제15조(해킹 등 방지대책) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.10.1 보안시스템 운영 +확인 대상(예시) +☐DDoS대응 보안시스템 구축, 운영 현황 +☐DDoS 사이버대피소 운영 또는 이용 현황 + + +![이미지 187-0](images/p0187_img0.png) + + +--- + +| 한국인터넷진흥원 | +188 +A-102 +관리적 분야 > 12. 보안관리 +주요정보통기반시설과 직·간접적으로 연계된 시스템을 대상으로 모의해킹 수행 및 보안대책 마련 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설과 직·간접적으로 연계된 시스템을 대상으로 모의해킹을 수행하여야 한다. +§ 모의해킹 점검 절차를 수립하고, 정기적인 모의해킹 및 점검 이력을 기록 관리하여 전년도에 도출된 취약점의 +재발 여부를 식별하고 이에 대한 보호대책을 마련하여야 한다. +§ 유사한 취약점이 재발되고 있는 경우 근본 원인을 분석하고 재발방지 대책을 마련하여야 한다. +고려 사항 +§ 취약점 점검 시 회사의 규모 및 보유하고 있는 정보의 중요도에 따라 모의침투 테스트를 수행하는 것을 +고려하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제96조(사이버공격 대응훈련) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제21조의3(전자금융기반시설 취약점 분석·평가) +전자금융감독규정 제15조(해킹 등 방지 대책), 제37조의2(전자금융기반시설 취약점 분석·평가 +주기, 내용 등) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.2 취약점 점검 및 조치 +확인 대상(예시) +☐취약점 점검 이력 +☐모의해킹 계획서/결과보고서 + + +![이미지 188-0](images/p0188_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +189 +A-103 +관리적 분야 > 12. 보안관리 +시스템 및 사용 장비에 대한 보안 취약점에 대한 주기적 검토 및 보완 프로세스 운영 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 정보시스템을 대상으로 유형(서버, 네트워크, 보안 장비, DBMS, 웹사이트, PC 등)에 따라 점검항목과 +점검방식을 고려하여 연 1회 이상의 기술적인 보안 취약점 점검을 수행하고 그 결과에 따른 개선조치를 +수행하여야 한다. +§ 보안취약점 점검은 시스템 유형별, 항목별로 수동 점검(체크리스트 이용, 인터뷰 등)을 하는 방법과 +취약점진단 솔루션을 활용하여 자동 점검을 수행하는 방법이 있으며 기관 규모, 인력, 예산을 고려하여 취약점 +진단을 수행하여야 한다. +고려 사항 +§ 정보시스템 유형별 취약점 점검항목은 기술적 취약점 점검 해설서(한국인터넷진흥원 배포)를 참고하여 해당 +시스템 관리자가 직접 점검을 수행하고 조치할 수 있다. +§ 정보시스템 점검은 시스템 가용성을 보장하기 위해 정기적인 점검 시간을 설정하고, 점검 과정에서 발생할 +수 있는 시스템 장애에 대한 모니터링 및 복구절차를 마련하여야 한다. 또한, 취약점 점검 계획서를 통해 +점검 범위, 방법, 일정 등을 명확히 하고, 관련 부서와의 협의를 통해 점검으로 인한 서비스 중단을 +최소화하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립‧시행 및 점검) +공공기관 +국가 정보보안 기본지침 제97조(정보통신망 보안진단) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제21조의3(전자금융기반시설 취약점 분석·평가) +전자금융감독규정 제15조(해킹 등 방지대책), 제37조의2(전자금융기반시설 취약점 분석·평가 주기, +내용 등) +ICT기업 +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.2 취약점 점검 및 조치 + + +![이미지 189-0](images/p0189_img0.png) + + +--- + +| 한국인터넷진흥원 | +190 +확인 대상(예시) +☐정보시스템 취약점 점검 계획서(점검대상 정보시스템 목록 포함) +☐점검 대상 시스템 취약점 점검 결과보고서 +☐점검 완료 시스템 취약점 개선 조치 내역 +☐취약점 점검도구 또는 시스템 + + +![이미지 190-0](images/p0190_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +191 +13 +사고대응 +A-104 +관리적 분야 > 13. 사고대응 +침해사고 및 개인정보 유출사고를 예방하고 사고 발생 시 신속하고 효과적으로 대응하기 위한 체계와 절차 수립 +관련 조직 +정보보호 부서 +세부 설명 +§ 침해사고 및 개인정보 유출 등을 예방하고 사고 발생 시 신속하고 효과적으로 대응할 수 있도록 내·외부 +침해시도의 탐지·대응·분석 및 공유를 위한 체계와 절차를 수립하고, 관련 외부기관 및 전문가들과 협조체계를 +구축하여야 한다. +§ 침해사고 대응을 위한 조직 구성, 역할, 업무절차 등을 포함하여 정보보호책임자(정보보안담당관)의 공식적인 +승인을 통한 침해사고 대응 계획을 문서화하여야 한다. +§ 침해사고의 예방활동은 물론 침해사고의 위기단계에 따른 실무 대응과 사후처리를 수행하는 업무, 인원이 +포함되도록 명문화하여야 하며, 전담 인력 및 조직 구성이 어려울 경우 유관 부서(예: 서버운영, 네트워크운영, +개발 등)와 협력하는 형태의 비상설 조직도 가능하다. +고려 사항 +§ 침해사고 대응을 위한 조직(CERT; Computer Emergency Response Team)를 구성할 시 인프라, 예산, 조직 +규모 등에 따라 주요 역할은 다음과 같이 정의할 수 있다. +역할 구분 +역할 정의 +모니터링 +모니터링 대상 주요 서비스와 관련된 URL과 포트(Port)를 점검 +탐지 +서비스와 관련되어 있는 모니터링 이벤트 및 사고 이벤트에 대하여 점검 +분석 +서버를 점검하고 관련된 로그(Log)를 분석 +대응 +보안 장비 점검 및 취약점 분석 등을 통하여 보안 문제점에 대한 해결방법을 수립 +사후처리 +보안교육 프로그램을 수립하여 중장기적인 침해사고대응 능력을 강화시키고 사후지원이 +요구되는 업무를 정의하여 이를 지원 + + +![이미지 191-0](images/p0191_img0.png) + + +![이미지 191-1](images/p0191_img1.png) + + +--- + +| 한국인터넷진흥원 | +192 +§ 침해사고 대응절차는 사고전 준비, 사고탐지, 초기대응, 대응 전략 체계화, 데이터 수집, 데이터분석, 보고서 작성 +등의 단계로 수립할 수 있다. +[그림12] 침해사고대응 절차(예시) +구분 +내용 +1단계: 사고 전 준비 +사고가 발생하기 전 침해사고 대응팀과 조직적인 대응을 준비 +2단계: 사고 탐지 +정보보호 및 네트워크 장비에 의한 이상 징후 탐지. 관리자에 의한 침해 사고의 식별 +3단계:초기 대응 +초기 조사 수행, 사고 정황에 대한 기본적인 세부사항 기록, 사고대응팀 신고 및 소집, 침해사고 +관련 부서에 통지 +4단계: 대응 전략 체계화 +최적의 전략을 결정하고 관리자 승인을 획득, 초기 조사 결과를 참고하여 소송이 필요한 +사항인지를 결정하여 사고 조사 과정에 수사기관 공조 여부를 판단 +5단계: 데이터 수집 +데이터 분석에 필요한 로그, 파일, 증거 데이터 확보 및 무결성 유지 +6단계: 데이터 분석 +의사 결정자가 쉽게 이해할 수 있는 형태로 사고에 대한 정확한 보고서를 작성 +7단계: 보고서 작성 +차기 유사 공격을 식별 및 예방하기 위한 보안 정책의 수립, 절차 변경, 사건의 기록, +장기 보안 정책 수립, 기술 수정 계획수립 등을 결정 + + +![이미지 192-0](images/p0192_img0.png) + + +![이미지 192-1](images/p0192_img1.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +193 +관계 법규 +공통 +정보통신기반 보호법 제4장(주요정보통신기반시설의 보호 및 침해사고의 대응) +개인정보 보호법 제29조(안전조치의무), 제34조(개인정보 유출 등의 통지·신고) +개인정보의 안전성 확보조치 기준 제4조(내부 관리계획의 수립‧시행 및 점검) +공공기관 +- +금융회사 +전자금융거래법 제21조의5(침해사고의 통지 등) +전자금융감독규정 제37조의6(침해사고대응기관 지정 및 업무범위 등) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제48조의4(침해사고 원인분석 등) +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.1 사고 예방 및 대응체계 구축 +확인 대상(예시) +☐침해사고 대응 지침·절차·매뉴얼 +☐침해사고 대응 조직도 및 비상연락망 +☐침해사고 대응 관련 문서 최고책임자 승인 이력 +☐보안관제 시스템 + + +![이미지 193-0](images/p0193_img0.png) + + +--- + +| 한국인터넷진흥원 | +194 +A-105 +관리적 분야 > 13. 사고대응 +침해사고 발생 시 신속한 보안사고 보고를 위한 절차를 문서화하고 있고 이에 따라 신속한 보고 수행 +관련 조직 +정보보호 부서 +세부 설명 +§ 불법침입, 해킹 프로그램·웜·바이러스 유포 등과 같은 사이버 공격 발생 시 신속한 대응과 피해 확산 방지를 +위해 표준화된 침해사고 대응 절차를 마련하고 이를 주기적으로 점검하여 정보시스템 및 정보통신망의 안전한 +운영을 유지하여야 한다. +§ 침해사고 대응 업무절차는 신고‧접수, 대응, 복구, 보고 등 4단계의 세분화된 절차로 구분하여 정의한다. +신고‧접수 단계에서는 침해사고의 유형과 심각도를 분류하고, 침해사고의 심각 정도에 따른 대응, 복구, +보고가 이루어지도록 체계를 수립하여야 한다. +고려 사항 +§ 기반시설은 정보통신기반 보호법에 따라 침해사실을 인지한 때에 관계 행정기관, 수사기관 또는 한국인터넷진흥원 +(이하 "관계기관등"이라 한다)에 24시간 이내에 침해사고 발생일시 및 시설, 침해사고로 인한 피해 내역, 기타 +신속한 대응·복구를 위하여 필요한 사항을 통지하여야 한다. +§ 개인정보가 유출된 경우에는 72시간 이내에 홈페이지 및 서면 등의 방법으로 해당 정보주체에게 통지를 +하여야 하고, 신고 요건에 해당될 경우 72시간 이내에 개인정보보호위원회 또는 한국인터넷진흥원 등에 +신고하여야 한다. +근거 법률 +개인정보 보호법 +신용정보법 +제34조(개인정보 유출 등의 통지·신고) +제39조의4(개인신용정보 누설통지 등) +법률간의 관계 +일반법 +특별법 +적용 대상 +개인정보처리자 +신용정보회사등에서의 상거래기업 및 법인에 한정 +※ 그 외 신용정보회사등은 금융위원회 신고 +적용 범위 +개인정보 유출 등 +개인신용정보 누설 +의무 사항 +통지 및 신고 +벌칙 규정 +3천만원 이하의 과태료 + + +![이미지 194-0](images/p0194_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +195 +관계 법규 +공통 +정보통신기반 보호법 제13조(침해사고의 통지) +개인정보 보호법 제29조(안전조치의무), 제34조(개인정보 유출 등의 통지ㆍ신고) +개인정보 보호법 시행령 제39조(개인정보 유출 등의 통지) +공공기관 +- +금융회사 +신용정보법 제39조의4(개인신용정보 누설통지 등) +전자금융거래법 제21조의5(침해사고의 통지 등) +전자금융감독규정 제37조의4(침해사고대응기관 지정 및 업무법위 등) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제48조의3(침해사고의 신고 등) +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.1 사고 예방 및 대응체계 구축 +확인 대상(예시) +☐침해사고 대응 업무절차서 +☐침해사고 대응을 위한 비상연락망 +☐침해사고 발생 신고·접수·대응·분석·보고 등의 결과문서 +☐(참고 자료 제18호) 정보통신 침해사고 신고서 +☐(참고 자료 제19호) 정보통신 침해사고 결과서 +근거 법률 +개인정보 보호법 +신용정보법 +제34조(개인정보 유출 등의 통지·신고) +제39조의4(개인신용정보 누설통지 등) +유출통지 +규모 +1명 이상 +시점 +72시간 이내 +방법 +홈페이지, 서면 등의 방법으로 개별 통지 +항목 +유출 등이 된 개인정보 항목, 유출 등이 된 시점과 그 경위, 유출 등으로 인하여 발생할 수 있는 +피해를 최소화하기 위하여 정보주체가 할 수 있는 방법 등에 관한 정보,개인정보처리자 대응조치 +및 피해 구제절차, 피해 신고·상담 부서 및 연락처 등 +유출신고 +규모 +1. 1천명 이상 정보주체의 개인정보 유출 등 + +## 2. 민감정보, 고유식별정보 유출 등 + + +## 3. 외부로부터의 불법적인 접근에 의해 개인정보가 + +유출 등 +1만명 이상 +시점 +72시간 이내 +기관 +개인정보보호위원회 또는 한국인터넷진흥원(KISA) + + +![이미지 195-0](images/p0195_img0.png) + + +--- + +| 한국인터넷진흥원 | +196 +A-106 +관리적 분야 > 13. 사고대응 +침해사고 시 외부기관 및 전문가들과의 대응협조체계 구축 +관련 조직 +정보보호 부서 +세부 설명 +§ 침해사고 발생 시 관계 기관 및 외부 전문가(예: 보안컨설팅, 보안관제 등)들과의 협조체계를 통해 정확하고 +정밀한 사고분석 및 대응이 이루어질 수 있도록 하여야 한다. +§ 소관 중앙행정기관, 국가정보원, 한국인터넷진흥원 등의 관계 기관과 보안관제, 보안 제품 공급 업체 등 외부 +보안업체와의 비상 연락망을 구축하고, 연 1회 이상 정기적으로 업데이트하여 항상 최신 상태를 유지하여 +기관, 담당, 연락처 등의 오류가 발생하지 않도록 하여야 한다. +고려 사항 +§ 비상연락망에는 주요 정보통신기반시설을 관할하는 행정기관의 관련 부서, 담당자, 연락처뿐만 아니라 +보안관제, 보안 장비 유지보수 등을 담당하는 계약업체의 명칭, 담당자, 연락처를 상세히 기재하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제15조(대책본부의 구성등), 제16조(정보공유·분석센터) +개인정보 보호법 제29조(안전조치의무), 제34조(개인정보 유출 등의 통지ㆍ신고) +공공기관 +- +금융회사 +신용정보의 이용 및 보호에 관한 법률 제45조(감독·검사 등) +전자금융거래법 제21조의6(침해사고의 대응) +전자금융감독규정 제37조의6(침해사고대응기관 지정 및 업무범위 등) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제52조(한국인터넷진흥원) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.1 사고 예방 및 대응체계 구축 +확인 대상(예시) +☐보안사고 발생 시 비상연락망 +☐비상연락망의 갱신 이력 +☐보안관제서비스 계약서(SLA 등) +☐보안관제 시스템 + + +![이미지 196-0](images/p0196_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +197 +A-107 +관리적 분야 > 13. 사고대응 +사이버위기 ‘주의’ 이상 경보 발령 및 피해발생 등 필요 시 대응할 수 있는 ‘긴급대응반’을 구성 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설은 국가 사이버 비상경보 체계에 따른 대응과 기술적 조치를 수행하여야 한다. +§ 국가 사이버 비상경보 체계는 다음과 같이 분류되며 이 중 ‘주의’ 이상의 경보가 발령되면 자체적인 +긴급대응반을 구성하고 필요시에 즉시 소집되어 대응과 기술적 조치 업무를 수행할 수 있도록 하여야 한다. +경보 단계 +정의 +정상 단계 +- 전 분야 정상적인 활동 +- 위험도 낮은 웜·바이러스 발생 +- 위험도 낮은 해킹기법·보안취약점 발표 +관심 단계 +- 웜ㆍ바이러스, 해킹기법 등에 의한 피해 발생 가능성 증가 +- 다수기관의 정보유출 등 침해사고 확산 가능성 증가 +- 국내외 정치ㆍ군사적 위기발생 등 사이버 안보 위해 가능성 증가 +- 상기 유형과 유사한 수준의 사이버 위기 +주의 단계 +- 다수기관의 정보통신망 및 정보시스템 장애 발생 +- 다수기관의 정보유출 등 침해사고 확산 가능성 증가 +- 국내외 정치ㆍ군사적 위기발생 등 사이버 안보 위해 가능성 고조 +- 상기 유형과 유사한 수준의 사이버 위기 +경계 단계 +- 복수 ISP망 또는 기간망에 피해 발생 +- 대규모 피해 확산 가능성 증대 +- 정보유출 등 대규모 침해사고 발생 +- 복수분야에서 광범위한 피해가 발생하는 등 대규모 피해로 확대될 가능성이 높아 다수기관의 +공조 대응이 필요한 경우 +- 상기 유형과 유사한 수준의 사이버 위기 +심각 단계 +- 전국적인 네트워크 및 정보시스템 사용 불가능 +- 주요 핵심기반시설의 피해로 국민혼란 발생 +- 정보유출 등 대규모 침해사고가 전국적으로 발생 +- 국가적 차원의 평가와 조치가 필요하다고 판단되는 사고 발생 + + +![이미지 197-0](images/p0197_img0.png) + + +--- + +| 한국인터넷진흥원 | +198 +고려 사항 +§ 비상연락망에는 기반시설 소관 행정기관의 부서, 담당자이름, 연락처(사무실, 핸드폰, Email)와 국가정보원, +한국인터넷진흥원(KISA)의 연락처를 포함하도록 하고, 계약 관계에 있는 보안관제, 보안 장비 유지보수 등의 +업체명, 담당자 이름, 연락처 정도를 포함하도록 한다. +※ 경보단계 : 주의 +- 다수기관의 정보통신망 및 정보시스템 장애 발생 +- 다수기관의 정보유출 등 침해사고 확산 가능성 증가 +- 국내외 정치ㆍ군사적 위기발생 등 사이버 안보 위해 가능성 고조 +- 상기 유형과 유사한 수준의 사이버 위기 +[그림13] 사이버위기 경보 단계 별 행동요령(예시) +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침), 제15조(대책본부의 구성등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제96조(사이버공격 대응훈련) +금융회사 +전자금융거래법 제21조의6(침해사고의 대응) +전자금융감독규정 제23조(비상대책 등의 수립·운용) + + +![이미지 198-0](images/p0198_img0.png) + + +![이미지 198-1](images/p0198_img1.png) + + +![이미지 198-2](images/p0198_img2.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +199 +확인 대상(예시) +☐침해사고 대응 계획 문서(예: 지침, 매뉴얼, 가이드 등) +☐긴급대응반 구성 및 활동 이력 +☐보안관제 시스템 +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제48조의2(침해사고의 대응 등), +제48조의4(침해사고 원인분석 등) +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.1 사고 예방 및 대응체계 구축 + + +![이미지 199-0](images/p0199_img0.png) + + +--- + +| 한국인터넷진흥원 | +200 +A-108 +관리적 분야 > 13. 사고대응 +부정접근 사례나 보안사고 내역을 지속적으로 모니터링 +관련 조직 +정보보호 부서, 시스템운영 부서 +세부 설명 +§ 주요 시스템에 대한 내·외부 해킹 시도 및 오·남용 여부 등을 모니터링하기 위하여 관련 접속기록을 +주기적으로 검토하고 그 결과를 보고하여야 한다. +§ 부정접근, 침해시도, 개인정보유출 시도 등의 이상행위 판단을 위해 이상행위 식별기준 및 임계치를 정의하고, +이에 따라 이상행위의 판단 및 조사 등 후속 조치가 이루어질 수 있도록 하여야 한다. +§ 최신 외부 침해동향, 보안사고 내역을 지속적으로 모니터링하고, 필요 시 최신 침해동향 및 보안사고 사례가 +기반시설에 미치는 영향을 분석하여야 한다. +고려 사항 +§ 내·외부에 의한 침해시도, 부정접근 등을 신속하게 탐지·대응 할 수 있도록 네트워크 및 데이터 흐름 등을 +수집·분석하며, 모니터링 및 점검 결과에 대해 적시에 사후조치 진행을 위해 기관 내부 규정에 따른 주기적인 +책임자 보고를 통한 이상 유·무를 관리하여야 한다. +§ 개인정보처리시스템을 운영하는 경우는 관계 법규 및 개인정보 보호법에 따라 개인정보취급자의 접속기록을 +월 1회 이상 점검하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제12조(주요정보통신기반시설 침해행위 등의 금지), +제16조(정보공유·분석센터) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제8조(접속기록의 보관 및 점검) +공공기관 +국가 정보보안 기본지침 제55조(로그기록 유지) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제13조(전산자료 보호대책), 제14조(정보처리시스템 보호대책), 제29조(거래통제 등) +ICT기업 +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.5(로그 및 접속기록 점검), 2.11.3 이상행위 +분석 및 모니터링 + + +![이미지 200-0](images/p0200_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +201 +확인 대상(예시) +☐보안시스템의 모니터링 결과 리포트 +☐개인정보취급자의 접속기록에 대한 모니터링(예: DB접근통제) 결과 +☐모니터링 결과에 따른 보고 이력 +☐모니터링 시스템, 보안관제 시스템 + + +![이미지 201-0](images/p0201_img0.png) + + +--- + +| 한국인터넷진흥원 | +202 +A-109 +관리적 분야 > 13. 사고대응 +침해사고 발생에 대비한 대비한 대응절차 및 방법 숙지를 위한 주기적인 교육·훈련 실시 +관련 조직 +정보보호 부서 +세부 설명 +§ 침해사고 발생 시 효율적인 대처를 위해 교육 대상, 내용, 방법, 시기 등이 포함된 교육 계획을 수립하고 +정기적으로 실시하여야 한다. +§ 침해사고 대응 절차에 따라 신속한 대응 및 복구가 이루어질 수 있도록 관련 조직 및 인력에게 교육을 +수행하여 지속적으로 운영되도록 하여야 한다. +§ 침해사고 대응 절차에 대한 실효성을 검증할 수 있는 모의 훈련 계획을 수립하여 연 1회 이상 주기적으로 +훈련을 실시하여 그 결과에 따른 대응체계를 검토하여야 한다. +고려 사항 +§ 시나리오에 기반한 침해사고 대응 모의훈련을 실시하는 경우 계획과 훈련 실시 내용, 훈련결과보고 등이 함께 +이루어지도록 하여야 한다. +§ 사고 발생 시 신속한 대응이 가능하도록 침해사고 대응과 관련된 조직이 모두 참여할 수 있도록 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제11조(보호조치 명령 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제96조(사이버공격 대응훈련) +금융회사 +전자금융거래법 제21조의3(전자금융기반시설의 취약점 분석·평가), 제21조의6(침해사고의 대응) +전자금융감독규정 제23조(비상대책 등의 수립·운용), 제24조(비상대응 훈련 실시), +제37조의6(침해사고대응기관 지정 및 업무범위 등) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제48조의3(침해사고의 신고 등), +제48조의4(침해사고의 원인분석 등) +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.4 사고 대응 훈련 및 개선 +확인 대상(예시) +☐침해사고 대응 교육 훈련 계획서 +☐침해사고 대응 교육 훈련 자료 +☐침해사고 대응 교육 훈련 결과 보고서 + + +![이미지 202-0](images/p0202_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +203 +A-110 +관리적 분야 > 13. 사고대응 +보안사고 유형, 범위, 영향 등을 포함한 보안사고 분석 결과를 기록 및 관리 +관련 조직 +정보보호 부서 +세부 설명 +§ 보안사고 발생 시 침해 유형별 공격에 대한 체계적이고 신속한 대응을 위해 보안사고의 유형(예: 악성코드 +공격, 서비스거부공격(DoS), 비인가 접근공격, 복합구성공격 등), 피해범위, 피해정도 등을 포함한 보안사고 +분석 결과를 기록‧관리하여야 한다. +§ 보안사고 관련 서식 및 절차를 사전에 정의하여 사고 확인자, 사고내용(일시, 대상, 유형, 범위, 내용), +조치내용(원인, 피해현황, 복구결과) 등의 사항을 확인, 기록하여 보고하고 해당 보고 이력을 보관하도록 한다. +고려 사항 +§ 개인정보가 유출된 경우는 법규에서 정하는 사항(유출 항목, 경위, 피해 최소화 방안 등)을 파악하여 해당 +개인(정보주체)에게 통지하고 피해규모에 따른 신고 의무를 준수하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제4장(주요정보통신기반시설의 보호 및 침해사고의 대응) +개인정보 보호법 제29조(안전조치의무), 제34조(개인정보 유출 등의 통지·신고) +공공기관 +- +금융회사 +전자금융거래법 제21조의5(침해사고의 통지 등) +전자금융감독규정 제37조의4(침해사고대응기관 지정 및 업무법위 등) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제48조의3(침해사고의 신고 등), +제48조의4(침해사고의 원인분석 등) +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.1 사고 예방 및 대응체계 구축, 2.11.5(사고 대응 및 복구) +확인 대상(예시) +☐보안 사고 분석 보고서 +☐보안 사고 관련 문서 관리 절차 +☐보안 사고 조치 사항 보고 이력 + + +![이미지 203-0](images/p0203_img0.png) + + +--- + +| 한국인터넷진흥원 | +204 +A-111 +관리적 분야 > 13. 사고대응 +보안 취약점 및 사고 발생시 이에 대한 보완작업 절차 마련 +관련 조직 +정보보호 부서 +세부 설명 +§ 보안사고에 따른 피해 복구를 신속하게 진행하기 위하여 사고 유형 등에 따른 복구절차를 수립하여야 한다. +§ 사이버 공격 유형별 맞춤형 대응 전략을 수립하여 신속하고 효과적인 대응 체계를 구축하여야 한다. 특히, +악성코드 감염, DDoS 공격, 비인가 접근 등 주요 공격 유형에 대한 상세한 대응 절차를 마련하여야 한다. +§ 최신 보안 취약점 발생 여부를 지속적으로 파악하고, 최신 보안 취약점이 발견된 경우 해당 보안 취약점이 +정보시스템에 미치는 영향을 분석하여 필요시 대응조치를 이행하여야 한다. +고려 사항 +§ 대응 및 복구를 위한 시스템 규모, 전문인력 규모 등은 조직의 특성마다 다르기 때문에 상위 기관의 매뉴얼은 +참고 자료로 활용하여 자체적인 환경에 맞는 맞춤형 대응 매뉴얼을 수립하도록 한다. +§ 인프라, 인력 등의 환경을 고려하여 자체적인 대응 및 복구절차를 규정화하는 것이 필요하다. +관계 법규 +공통 +정보통신기반 보호법 제11조(보호조치 명령 등), 제14조(복구조치) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제96조(사이버공격 대응훈련) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제21조의3(전자금융기반시설의 취약점 분석·평가) +전자금융감독규정 제23조(비상대책 등의 수립·운용) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제47조의4(이용자 정보보호) +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.2 취약점 점검 및 조치, 2.11.5 사고 대응 및 복구 +확인 대상(예시) +☐보안사고에 따른 대응 및 복구 지침 또는 절차 +☐최신 보안 취약점 조치 계획서 및 결과서 +☐보안관제 시스템 + + +![이미지 204-0](images/p0204_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +205 +A-112 +관리적 분야 > 13. 사고대응 +사이버침해사고 발생 후 재발방지 대책 수립‧이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 보안사고 발생 시 유사한 사고의 재발을 방지하기 위해 철저한 원인 분석을 바탕으로 효과적인 대책을 +수립하고 이를 실행하여야 한다. +§ 실제 보안사고가 발생하여 기록, 보고 및 복구조치까지 이루어진 경우 해당 사고에 대한 재발 방지 대책의 +수립뿐만 아니라, 실제 실행 여부를 철저히 점검하여 유사 사고를 예방하여야 한다. +고려 사항 +§ 정보시스템에 기술적 요인으로 사고가 발생한 경우 그 경위에 대해 분석하여 개선 사항을 마련하고 재발 방지 +대책을 수립하여야 한다. 인적요인(Human Error)으로 발생한 경우 고의성, 타당성 등 사유에 대한 명확한 +경계를 나누어 상·벌 규정 등을 수립하고 교육 및 징계 등의 재발 방지 대책을 마련하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제11조(보호조치 명령 등), 제14조(복구조치) +개인정보 보호법 제29조(안전조치의무) +공공기관 +- +금융회사 +전자금융거래법 제21조의3(전자금융기반시설의 취약점 분석·평가) +전자금융감독규정 제23조(비상대책 등의 수립·운용) +ICT기업 +정보통신망 +이용촉진 +및 +정보보호 +등에 +관한 +법률 +제47조의4(이용자 +정보보호), +제48조의4(침해사고의 원인 분석 등) +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.11.5 사고대응 및 복구 +확인 대상(예시) +☐보안사고 대응 및 복구에 관한 규정 또는 지침 +☐보안사고 재발 방지 대책 및 그 이행 여부 +☐보안관제 시스템 + + +![이미지 205-0](images/p0205_img0.png) + + +--- + +| 한국인터넷진흥원 | +206 +A-113 +관리적 분야 > 13. 사고대응 +침해사고 처리, 계약증빙 및 소송 등을 위한 적정한 증거자료 확보에 관한 지침 수립‧이행 +관련 조직 +정보보호 부서 +세부 설명 +§ 보안사고 발생 등에 따른 사고 경위, 책임 소재를 확인하기 위하여 정보시스템 상의 접속기록, 검토 및 보고 +등의 업무 이력을 확보하여 증거자료로서 법적 효력을 갖출 수 있도록 하여야 한다. +§ 업무처리 이력에 대한 문서 또는 전자문서의 안전한 보존이 이루어져야 하고 특히 정보시스템에 대한 정확한 +시각이 설정되어 시스템에 대한 행위 일시가 증거로서 효력이 있도록 하여야 한다. +고려 사항 +§ 각종 문서, 전자문서, 접속기록 등은 안전한 보관(예: 통제구역으로 설정된 문서고 보관, 백업 후 별도 +저장매체(또는 스토리지)에 저장하여 시건 보관)을 통해 비인가자에 의한 훼손이 발생하지 않도록 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제10조(보호지침) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제55조(로그기록 유지) +금융회사 +전자금융거래법 제21조(안전성의 확보의무), 제22조(전자금융거래기록의 생성·보존 및 파기) +전자금융감독규정 제13조(전산자료 보호대책) +ICT기업 +정보통신망 이용촉진 및 정보보호에 관한 법률 제48조의4(침해사고의 원인 분석 등) +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.9.4 로그 및 접속기록 관리, 2.9.6 시간동기화 +확인 대상(예시) +☐보안 사고 절차 관련 규정 또는 지침 +☐보안 사고 관련 문서·접속 기록 등 보존 장소 및 방법 +☐시간 동기화 설정 + + +![이미지 206-0](images/p0206_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +207 +14 +업무 연속성 +A-114 +관리적 분야 > 14. 업무연속성 +기반시설의 서비스(업무) 연속성을 위협할 수 있는 IT 재해 유형을 식별하고 유형별 피해규모 및 업무에 +미치는 영향을 분석하여 핵심 IT 서비스(업무) 및 시스템을 식별 +관련 조직 +정보보호 부서 +세부 설명 +§ 기반시설의 서비스(업무)는 IT 재해가 발생하더라도 서비스(업무)가 중단되지 않도록 핵심 IT 서비스 및 +시스템을 식별하기 위해 업무영향분석(BIA)를 수행하여야 한다. +§ 기반시설의 서비스(업무) 연속성을 위협할 수 있는 IT 재해 유형을 식별하여 장애 발생 시 피해규모 및 업무에 +미치는 영향을 분석하고, 분석 결과를 바탕으로 기반시설 핵심 IT 서비스(업무) 및 시스템을 식별한다. +고려 사항 +§ IT 재해 유형을 식별할 때 다음과 같은 원인 등을 고려한다. +기준(예시) +설명 +자연적 +화재, 지진, 홍수, 태풍 등 +인위적 +내부요인 +인재, 관리적 오류, 파업 등 +외부요인 +해킹, 사이버 테러, 시스템 결함, 네트워크 장애 등 +§ 피해규모 및 업무에 미치는 영향을 분석할 때 다음과 같은 사항 등을 고려한다. +- 업무 중요도: 중요도가 높은 서비스(업무)의 중요도 +- 복구 시간: 복구에 걸리는 시간 +- 보안성: 보안성이 높은지 여부 +- 연계성: 다른 시스템과 연계 정도 +- 파급 효과: 대내ㆍ외 파급효과 영향 +- 대체 가능성: 다른 시스템 및 서비스로 대체할 수 있는지 여부 + + +![이미지 207-0](images/p0207_img0.png) + + +![이미지 207-1](images/p0207_img1.png) + + +--- + +| 한국인터넷진흥원 | +208 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해·재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제92조(재난 방지대책) +금융회사 +전자금융거래법 제 21조(안전성의 확보의무) +전자금융감독규정 제23조(비상대책 등의 수립ㆍ운용) +ICT기업 +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.12.2 재해 복구 시험 및 개선 +확인 대상(예시) +☐업무영향분석평가(BIA) 결과보고서 +☐IT 재해 복구 지침 또는 절차 +☐업무연속성 관리 지침 + + +![이미지 208-0](images/p0208_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +209 +A-115 +관리적 분야 > 14. 업무연속성 +핵심 IT서비스(업무) 및 시스템의 특성에 따른 복구 목표시간, 복구 목표시점을 정의 +관련 조직 +정보보호 부서, 서비스관리 부서, 시스템운영 부서 +세부 설명 +§ 업무영향분석평가(BIA)를 통해 도출된 핵심 IT 서비스(업무) 및 시스템에 대하여 중요도 및 특성에 따른 복구 +목표시간(RTO: Recovery Time Objective) 및 복구 목표시점(RPO: Recovery Point Objective)을 정의한다. +§ 핵심 IT 서비스(업무) 및 시스템의 중요도와 복구 우선순위를 설정하여 효율적인 복구가 이루어지도록 한다. +§ 법적 요건에 따라 금융회사의 경우 핵심업무의 복구 목표시간을 3시간 이내로 설정하여야 하며, 다만 +보험회사의 핵심업무인 경우에는 24시간 이내로 설정하여야 한다. +고려 사항 +§ IT재해복구전략을 수립할 때는 서비스관리 부서, 시스템운영 부서 등과 함께 복구 목표 시간(RTO) 및 복구 +목표 시점(RPO), 복구를 위한 방법 등을 결정하여 수립 한다. +§ 복구 목표 시간(RTO) 및 복구 목표 시점(RPO)를 고려하여 백업 및 소산 방안, 백업센터 구축 운영 방안 등 +업무연속성을 위한 전략을 수립하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해·재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제23조(비상대책 등의 수립ㆍ운용) +ICT기업 +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.12.1 재해 재난 대비 안전조치 +확인 대상(예시) +☐IT 재해 복구지침 +☐IT 재해복구 계획(RTO, RPO 정의 포함) +☐소산백업 장소 또는 백업센터 + + +![이미지 209-0](images/p0209_img0.png) + + +--- + +| 한국인터넷진흥원 | +210 +A-116 +관리적 분야 > 14. 업무연속성 +재해 및 재난 발생 시에도 기반시설 서비스 및 시스템의 연속성을 보장할 수 있도록 복구 전략 및 대책, +비상시 복구 조직, 비상연락체계, 복구 절차 등 재해 복구 계획 수립‧이행 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 재해·재난 발생 시에도 핵심 IT 서비스(업무) 및 시스템의 연속성을 보장할 수 있도록 복구 전략 및 대책, +비상시 복구 조직, 비상연락체계, 복구 절차 등 재해 복구 계획을 수립·이행하여야 한다. +§ IT 재해 발생 시 사전 정의한 서비스 및 시스템 복구 목표시간(RTO) 및 복구 목표시점(RPO)을 달성할 수 +있도록 단계별로 수행할 복구 절차를 체계적으로 수립하여야 한다. +§ 관련 법률에 따라 개인정보처리자의 경우 재해·재난 발생 시 개인정보처리시스템 보호를 위한 위기대응 +매뉴얼 등 대응절차를 마련하여 정기적으로 점검하고, 개인정보처리시스템 백업 및 복구를 위한 계획을 +마련하여야 한다. +고려 사항 +§ 비상시 복구 조직을 구성할 때는 역할과 책임을 명확히 하고 재해 발생 시 즉각적으로 연락할 수 있는 +연락망을 구축하여 정기적으로 비상 연락처 정보를 갱신하여야 한다. +§ 자연재해, 통신·전력 장애, 해킹 등 조직의 핵심 서비스 및 시스템의 운영 연속성을 위협할 수 있는 재해 유형을 +식별하고, 유형별 예상 피해규모 및 영향을 분석하여야 한다. +§ 복구 목표시간, 복구 목표시점을 정의하고 복구 전략 및 대책, 비상시 복구 조직, 비상연락체계, 복구 절차 등 +재해 복구체계를 구축하여야 한다. +§ IT 재해 발생 시 신속한 복구가 가능하도록 다음 내용을 포함한 IT 재해 복구 체계를 구축하여야 한다. +단계 +설명 +재해 시 복구조직 및 역할 정의 +IT 재해 발생 시 복구를 위한 관련부서 및 담당자 역할과 책임 부여 +비상연락체계 +조직 내 관련 부서 담당자, 유지보수 업체 등 복구 조직상 연락체계 구축 +복구 전략 및 대책 수립방법론 +업무영향분석, 복구 목표시간 및 복구 목표시점 정의, 핵심 IT 서비스 +복구 순서 정의 +복구 목표 시간별로 정보시스템의 복구 순서 정의 + + +![이미지 210-0](images/p0210_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +211 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해·재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제23조(비상대책 등의 수립ㆍ운용) +ICT기업 +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.12.1 재해 재난 대비 안전조치 +확인 대상(예시) +☐IT 재해 복구 지침 또는 절차 +☐IT 재해 복구 계획(RTO, RPO 정의 포함) +☐비상연락망 +단계 +설명 +복구 절차 +1단계 +사고 인지 및 비상 상황 선언 +2단계 +초기 조치 및 비상 대응 +3단계 +복구 환경 전환 +4단계 +데이터 복구 +5단계 +서비스 복구 +6단계 +정상 운영 검증 +7단계 +복구 종료 및 사후 관리 + + +![이미지 211-0](images/p0211_img0.png) + + +--- + +| 한국인터넷진흥원 | +212 +A-117 +관리적 분야 > 14. 업무연속성 +보안중요성이 높은 등급의 시스템들은 이중화하여 관리 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 기반시설의 핵심 IT 서비스(업무)는 보안중요성이 높은 등급의 시스템들을 이중화하여 관리함으로써, IT 재해 +발생 시에도 서비스 연속성을 보장하여야 한다. +§ IT 재해 복구계획에 따른 복구목표 우선 순위가 높은 시스템은 이중화하여 관리한다. 특히 고가용성이 +요구되는 보안시스템, 네트워크 장비, 웹서버 등의 주요 시스템은 이중화 대상으로 고려할 필요가 있다. +고려 사항 +§ 이중화 대상에는 예산, 자체 기준(예: IT 재해 복구 전략)을 고려하여 이중화 여부와 대상을 결정할 수 있다. +§ 이중화가 시스템 성능에 미치는 영향을 고려하고, 부하 분산과 성능 최적화를 계획하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해·재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제23조(비상대책 등의 수립ㆍ운용) +ICT기업 +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.12.1 재해 재난 대비 안전조치 +확인 대상(예시) +☐업무영향분석평가(BIA) 결과보고서 +☐IT 재해 복구 전략(복구목표 우선순위 포함) +☐네트워크 구성도(이중화 시스템 현황 포함) +☐이중화된 정보시스템 + + +![이미지 212-0](images/p0212_img0.png) + + +--- + + +## 02. 관리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +213 +A-118 +관리적 분야 > 14. 업무연속성 +모의 훈련 등을 통해 업무 연속성을 지속적으로 검토 및 관리하고, 조직 내의 변경이 있을 경우 이에 대 +한 사항을 반영 +관련 조직 +정보보호 부서, 시스템 운영 부서 +세부 설명 +§ 기반시설의 서비스(업무)는 모의 훈련을 통해 업무 연속성을 지속적으로 검토 및 관리하고, 재해 발생 시 +적절히 대응할 수 있는 능력을 강화하여야 한다. +§ 정기적인 모의 훈련을 통하여 복구절차 및 계획이 실제 상황에서도 효과적으로 작동하는지 확인하고 개선점을 +도출하여야 한다. +§ 모의훈련 시나리오를 수립하며, 관계 비상조직과 함께 모의훈련을 수행하는 내용을 포함하는 IT 재해 복구 +모의훈련계획을 수립하고 모의훈련 결과를 문서화하여야 한다. +§ 모의 훈련 결과에 따라 IT 재해 복구 전략을 보완 및 개정하여, 최신 상태로 유지 및 지속적인 개선관리가 되도록 한다. +고려 사항 +§ IT 재해 복구 전략을 지속적으로 현행화하여 조직 내의 변경, 업무환경과 요구사항의 변화에 대응할 수 있도록 +하여야 한다. +§ IT 재해 복구 전략에 따라 효과적인 복구(예: OO시스템(또는 서비스)은 2시간 이내에 복구)가 가능한 지 IT +재해 복구 모의훈련을 실시하여야 한다. 다만 매년 동일한 수준의 훈련(예: 일부 관계자가 모여서 +회의방식으로 상황 시나리오별 역할과 대응시간만 확인)만 이루어지면 복구대상/목표 및 대책(예: 이중화, +소산백업, 유휴장비 비치, 백업센터 운영 등)의 적절성 판단이 어려울 수 있다. +§ 1년 차는 IT 재해 복구 모의훈련을 계획서를 작성하고, 2년 차에는 도상훈련(시나리오 중 일부는 실 훈련), 3년 +차에는 실 훈련이 가능한 시나리오 기반의 모의훈련을 수행(예: 훈련을 위한 별도 서버를 구축하는 것을 +전제로, 웹사이트 장애 신고를 받고 그 원인을 확인 결과, DB서버의 디스크 오류로 확인되어 DB서버를 +복구하고 웹사이트 서비스가 정상적으로 제공되는 것을 확인)하는 등 단계적으로 모의훈련 강도를 높여 실현 +가능한 목표를 수립·이행하는 것을 고려할 수 있다. +§ 전자금융감독규정에 따른 요건에 해당하는 금융회사 및 전자금융업자는 매년 1회 이상 재해복구센터로 실제 +전환하는 재해복구전환 훈련을 실시하여야 한다. + + +![이미지 213-0](images/p0213_img0.png) + + +--- + +| 한국인터넷진흥원 | +214 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해·재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제23조(비상대책 등의 수립ㆍ운용), 제23조(비상대응훈련 실시) +ICT기업 +정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.12.2 재해복구 심험 및 개선 +확인 대상(예시) +☐복구 절차 및 계획 검토 내역 +☐모의훈련 수행 결과 보고서 +☐모의훈련 효과 분석 내역 +☐IT 재해 복구 지침 또는 절차 + + +![이미지 214-0](images/p0214_img0.png) + + +--- + + +## 1. 물리보안·················································································································217 + +물리적 분야 기본 항목 +Chapter 03 + + + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 + + +![이미지 215-0](images/p0215_img0.png) + + +--- + +| 한국인터넷진흥원 | +216 +l 물리분야 +번호 +취약점 점검 항목 +P-1 +보호구역의 출입에 관한 정책과 절차를 수립하고 이에 따라 출입통제 수행 +P-2 +물리적 중요도에 따라 제한구역, 통제구역 등으로 분류하는 다단계 보호 대책 수행 +P-3 +주요 시스템에 대한 별도의 출입통제를 실시하거나 이중의 보호장치 설치 +P-4 +민감한 시설에 대해 물리적으로 접근하는 사람들의 출입기록 및 허가의 타당성을 주기적으로 검토 +P-5 +제한구역 내 작업에 대한 추가적인 통제 수단 및 안내 지침 마련 +P-6 +주요시설에 대한 출입기록은 출입일로부터 일정기간 이상 보관 +P-7 +외부인에 대해서 출입증을 발급하고, 출입권한은 출입목적이 필요한 구역내로 한정 +P-8 +전산 장비실에 외부협력업체 출입 시 내부 임직원이 상시 동행 +P-9 +시각적으로 구분이 가능한 신분증 패용 +P-10 +주요장비, 대체시스템 및 자료들을 화재, 습도 등의 환경재해로부터 보호되는 적절한 곳에 배치하여 보호 +P-11 +전원공급 이상이나 기타 전기관련 사고로부터 장비 보호(UPS, 비상발전기, 이중전원선 등의 설비) +P-12 +전원공급 이상이나 기타 전기관련 사고로부터 장비를 보호하기 위해 설비 상태에 대해 정기적으로 검토 +P-13 +전원선 및 통신선은 도청이나 손상으로부터 보호 +P-14 +누전이 발생하였을 때 이를 차단할 수 있도록 누전차단기 또는 누전경보기의 설치 +P-15 +전산실에 24시간 항온, 항습을 유지하기 위하여 온습도 측정이 가능하도록 항온항습기 등을 설치 및 운영 +P-16 +주요시설(중앙감시실, 전산실, 전력관련시설, 통신장비실, 방재센터 등)에는 기존 조명설비의 작동이 멈추는 +경우에도 작업이 가능하도록 비상조명을 설치 +P-17 +주요시설의 출입구와 전산실 및 통신장비실 내부에 CCTV를 설치 +P-18 +CCTV 운용 시 중계·관제서버, 관리용 PC, 정보통신망 등에 대해 보안대책을 수립 + + +![이미지 216-0](images/p0216_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +217 +1 +물리보안 +P-1 +관리적 분야 > 1. 물리보안 +보호구역의 출입에 관한 정책과 절차를 수립하고 이에 따라 출입통제 수행 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 비밀, 개인정보 및 중요정보 저장시설, 기반시설 서비스(업무)의 주요 장비가 운영되는 시설 등은 인가된 +사람만이 출입하도록 접근통제 정책과 절차를 수립·이행하여야 한다. +§ 보호구역 지정기준을 마련하고 해당 기준에 따라 물리적 시설을 제한구역, 통제구역 등으로 분류하고 각 +보호구역별 보호대책을 수립·이행하여야 한다. +보호구역 +정의 +예시 +제한구역 +비인가 접근을 방지하기 위해 출입 통제 장치 및 감시 시스템이 +설치되어 있으며, 직원 카드와 같은 출입증이 필요한 장소 +부서별 사무실, +회의실등 +통제구역 +제한 구역의 통제 항목을 모두 포함하며 출입 자격이 최소 +인원으로 유지되고 출입을 위해 추가 절차가 필요한 장소 +서버실, 전산실, 통신실, 관제실, +전원실, 공조실, 발전기실 등 +§ 각 보호구역의 중요도 및 특성을 반영하여 보호대책 이행을 위한 출입통제 장비를 갖추어야 한다. +고려 사항 +§ 공공기관은 지정된 보호구역에 대한 출입자 식별ㆍ인증 등을 위한 출입문 보안장치 설치 및 주·야간 +감시대책을 수립하여야 한다. +§ 출입통제 장비는 지식·소유·생체 기반 중 자산의 중요도 및 통제 목적 등을 고려하여 디지털도어락, ID카드, +지문인식기 등을 선택하여 통제하여야 한다. +§ 출입통제 장비에 출입 및 접근 이력이 기록되지 않을 경우 이력관리를 위해 출입관리대장 등을 작성하여야 한다. +§ 개별 출입 통제 장비를 통합하여 출입 보안 시스템을 구축함으로써 종합적인 물리보안 체계를 마련하여 +위험요소가 최소화된 환경을 조성하는 것을 고려할 수 있다. + + +![이미지 217-0](images/p0217_img0.png) + + +![이미지 217-1](images/p0217_img1.png) + + +--- + +| 한국인터넷진흥원 | +218 +§ 출입통제시스템이 있더라도 필요시 출입하는 인원에 대한 출입 및 접근현황을 목록으로 관리할 수 있는 +별도의 출입관리대장을 비치하여 관리한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책), 제88조(정보통신시설 출입관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제9조(건물에 관한 사항), 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.1 보호구역 지정, 2.4.2 +출입통제 +확인 대상(예시) +☐보호구역(물리적) 보안 지침 +☐보호구역 지정 현황 +☐제한구역·통제구역 표시 +☐보호구역별 설치된 보호설비 +☐출입통제시스템 +☐(서식 자료 제20호) 보호구역 관리대장 +☐(서식 자료 제21호) 제한구역· 통제구역 출입자 명부 + + +![이미지 218-0](images/p0218_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +219 +P-2 +관리적 분야 > 1. 물리보안 +물리적 중요도에 따라 제한구역, 통제구역 등으로 분류하는 다단계 보호 대책 수행 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 보호구역은 그 중요도에 따라 제한구역, 통제구역 등으로 차등화하고 중요 구역에 따른 차별화된 보호 대책을 +강구하여야 하며, 보호구역 내 작업 절차를 수립하고 필요 설비를 갖추어야 한다. +§ 보호구역별 내부 직원, 외부 직원(유지보수 등)의 출입에 대한 출입 절차를 수립하여 적용하여야 한다. +§ 통제구역은 제한구역의 통제 항목을 모두 포함하여 보호대책을 수립·이행하고 외부인 또는 비인가자의 +출입을 통제할 수 있도록 ‘출입통제구역’임을 표시하여 최소한으로 제한한 인가자만을 출입 허용하여야 한다. +§ 비인가자의 접근이 엄격히 통제되어야 하는 장소(예:정보통신실, 서버실 등)는 출입을 통제할 수 있는 +기술적인 출입통제 조치를 하여야 하며, 관계 법규에 따른 요건이 있는 경우 이를 준수하여야 한다. +고려 사항 +§ 공공기관 등에 적용되는 보안업무규정 시행규칙 제54조(보호지역의 구분)에서는 제한지역, 제한구역, +통제구역 등의 보호구역을 다음과 같이 정의한다. +구분 +정의 +제한지역 +비밀 또는 국·공유재산의 보호를 위하여 울타리 또는 방호·경비인력에 의하여 승인을 받지 +않은 사람의 접근이나 출입에 대한 감시가 필요한 지역 +제한구역 +비인가자가 비밀, 주요시설 및 Ⅲ급 비밀 소통용 암호자재에 접근하는 것을 방지하기 위하여 +안내를 받아 출입하여야 하는 구역 +통제구역 +보안상 매우 중요한 구역으로서 비인가자의 출입이 금지되는 구역 +§ 제한구역은 접견구역 이외의 모든 장소로 지정하여 출입통제 절차(예: 사전 방문신청, 임직원 상시 동행, +신분증 패용)를 따르고, 통제구역은 연구개발실, 전산실, 기계실, 문서고로 지정하여 CCTV, 사전출입권한이 +부여된 인원만 출입, 이중신원확인(예: ID카드 및 지문) 절차를 적용하여야 한다. +§ 관계 법규에 따라 공공기관, 집적정보통신시설(IDC)의 경우는 주요시설 중 중앙감시실, 전산실, 전력감시실, +통신장비실, 방재센터의 출입구에 출입자의 신원확인을 통해 개폐되는 잠금장치를 설치하고, 해당 보호구역에 +반드시 ID카드 또는 지문 등 출입통제를 적용하여야 한다. + + +![이미지 219-0](images/p0219_img0.png) + + +--- + +| 한국인터넷진흥원 | +220 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제9조(건물에 관한 사항), 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.1 보호구역 지정 +확인 대상(예시) +☐보호구역(물리적) 보안 지침 +☐제한구역·통제구역 표시 +☐보호구역 출입 관리 대장 +☐보호구역별 출입 통제 절차 +☐보호구역별 설치된 보호설비 + + +![이미지 220-0](images/p0220_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +221 +P-3 +관리적 분야 > 1. 물리보안 +주요 시스템에 대한 별도의 출입통제를 실시하거나 이중의 보호장치 설치 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 주요 시스템이 배치된 구역은 비인가자에 대한 철저한 출입통제가 이루어지도록 별도의 출입통제 절차를 +마련하여 실시하거나 이중의 출입통제장비를 설치하여야 한다. +§ 주요 시스템이 배치된 구역은 상시 이용하는 출입문은 한 곳으로 정하고 이중의 출입통제장비를 설치하여야 +하며, 외벽이 유리인 경우 유리창문을 통하여 접근할 수 없도록 조치하여야 한다. +고려 사항 +§ 출입통제 방법을 ID카드, 지문 등 소유·생체기반으로 적용하고, 불가피한 사유로 정보시스템을 통제구역 내에 +위치시키기 어렵다면 시건 가능한 출입통제(예: 디지털 도어락)와 정보시스템이 위치한 랙(Rack)을 열쇠 +시건하는 등의 이중 출입통제를 적용할 수 있다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제9조(건물에 관한 사항), 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.2 출입통제 +확인 대상(예시) +☐보호구역(물리적) 보안 지침 +☐주요 시스템 출입통제 절차 또는 방법 +☐보호구역별 설치된 보호설비 +☐(서식 자료 제20호) 보호구역 관리대장 +☐(서식 자료 제21호) 제한구역· 통제구역 출입자 명부 + + +![이미지 221-0](images/p0221_img0.png) + + +--- + +| 한국인터넷진흥원 | +222 +P-4 +관리적 분야 > 1. 물리보안 +민감한 시설에 대해 물리적으로 접근하는 사람들의 출입기록 및 허가의 타당성을 주기적으로 검토 +관련 조직 +정보보호 부서, 시설 보안 부서 +세부 설명 +§ 통제구역 등의 민감한 시설에 대해 출입기록 및 출입권한 타당성 검토 등을 매월 또는 분기마다 주기적으로 +수행하여 불필요한 권한을 삭제하여야 한다. +§ 타당성 검토 등을 주기적으로 수행하기 위해 보호구역 별로 출입가능한 부서·직무·업무 등을 정의하고, +출입권한이 부여된 임직원을 식별하고 그 현황을 관리하여야 한다. +§ 출입권한을 보유한 인원에 대한 변경사항(임직원의 퇴사 및 부서이동, 외주용역인원의 종료 및 인원교체 등)이 +발생하는 경우 지체없이 권한을 삭제하여야 한다. +고려 사항 +§ 통제구역 등의 보호구역에 대한 출입권한 타당성 검토는 다음의 사항을 포함하여야 한다. 또한 검토 결과에 +따라 출입권한의 변경, 삭제 등 출입권한 조정이 필요하면 관리책임자에게 승인을 받아야 한다. +No. +출입권한 타당성검토 체크리스트 +1 +퇴사 및 부서 이동 등의 사유로 출입권한이 불필요하게 된 인원이 있는가? +2 +장기간 출입기록이 없어 출입권한이 불필요한 인원이 있는가? +3 +일과 외 시간 등 출입 사유가 타당하지 않는 것으로 추정되는 출입기록(출입인원)이 있는가? +§ 시스템으로 출입 및 접근로그를 남길 수 없는 경우 기록된 출입관리대장을 검토하여야 한다. +§ 출입기록 및 출입권한 타당성 검토 시 내・외부직원의 출입기록 뿐만 아니라 외주용역인원(시설 용역원, 청소 +용역원 등)의 출입기록 또한 검토하여야 한다. + + +![이미지 222-0](images/p0222_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +223 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책), 제88조(정보통신시설 출입관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제9조(건물에 관한 사항), 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.2 출입통제 +확인 대상(예시) +☐보호구역(물리적) 보안 지침 +☐보호구역에 대한 출입기록·권한 검토 내역 +☐출입통제시스템 화면(출입자 등록 현황 등) +☐출입권한 조정 승인 내역(등록, 변경, 삭제 등) +☐(서식 자료 제21호) 제한구역· 통제구역 출입자 명부 + + +![이미지 223-0](images/p0223_img0.png) + + +--- + +| 한국인터넷진흥원 | +224 +P-5 +관리적 분야 > 1. 물리보안 +제한구역 내 작업에 대한 추가적인 통제 수단 및 안내 지침 마련 +관련 조직 +정보보호 부서, 시설 보안 부서 +세부 설명 +§ 제한구역 및 통제구역 내에서 작업이 이루어지는 경우 작업 절차, 작업 기록, 통제 수단 등의 관리지침을 +수립하여고 추가적인 통제 수단 및 안내 지침을 마련하여야 한다. +§ 작업을 위해 출입하는 인원(직원 또는 외부자)에게 보안주지사항이 기록된 서약서(예: 외부자 보안서약서 +등)을 통해 출입 및 작업 시 보안원칙을 이해하고 준수할 수 있도록 하여야 한다. +§ 통제구역 내 모바일기기 사용은 원칙적으로 금지하여야 하며, 휴대용 기기 반·출입을 검색할 수 있는 +보안장치를 설치하고 휴대용 기기 보관용기를 비치하여야 한다. +고려 사항 +§ 제한구역 및 통제구역 등의 보호구역에서 작업이 이루어지는 경우 신청, 허가, 감시(확인) 등의 관리기준이 +마련되어야 하며, 작업을 위해 일정 기간 또는 시간 동안 출입하는 인원(직원 또는 외부자)에게 해당 내용을 +주지시켜야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제88조(정보통신시설 출입관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.5 보호구역 내 작업, 2.4.6 +반출입 기기 통제 + + +![이미지 224-0](images/p0224_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +225 +확인 대상(예시) +☐보호구역(물리적) 보안 지침 +☐제한구역‧통제구역 작업 신청서 및 작업 일지 +☐보호구역 내 휴대용기기 작업통제 관련 규정 및 지침 + + +![이미지 225-0](images/p0225_img0.png) + + +--- + +| 한국인터넷진흥원 | +226 +P-6 +관리적 분야 > 1. 물리보안 +주요시설에 대한 출입기록은 출입일로부터 일정기간 이상 보관 +관련 조직 +정보보호 부서, 시설 보안 부서 +세부 설명 +§ 주요시설이 배치된 구역은 비인가자의 접근이 엄격히 통제되어야 하는 장소로 출입기록(방문기록 포함)은 +관계 법규 등을 고려하여 일정기간 이상 보관하여야 한다. +§ 보호구역(제한구역 및 통제구역)의 방문자 출입기록, ID카드(도는 지문)에 의한 출입기록, CCTV 녹화 +기록(영상)은 필수로 보관하여야 한다. +고려 사항 +§ 출입기록의 보관기간은 최소인원이 출입하여야 하는 통제구역의 출입기록은 최소 2개월 이상, 통제구역보다는 +많은 인원이 출입하는 제한구역 및 보호구역 이외의 출입기록은 최소 1개월 이상 보관하여야 한다. +§ 보관된 출입기록의 훼손, 삭제 등이 우려되는 경우는 별도의 안전한 장소(예: 백업매체에 저장하여 캐비닛에 +시건)에 보관하는 것을 고려하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제9조(건물에 관한 사항), 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.2 출입통제 +확인 대상(예시) +☐통제구역 출입 관리 대장(최근 2개월) +☐제한구역 출입 관리 대장(최근 1개월) +☐출입관리시스템 및 영상보관장비(관리단말 PC) +☐출입 관리 대장 등 보관장소 + + +![이미지 226-0](images/p0226_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +227 +P-7 +관리적 분야 > 1. 물리보안 +외부인에 대해서 출입증을 발급하고, 출입권한은 출입목적이 필요한 구역내로 한정 +관련 조직 +정보보호 부서, 시설 보안 부서 +세부 설명 +§ 외부인에 대하여 출입증을 발급하는 경우 출입 권한은 출입 목적에 따라 필요한 최소 구역 내로 한정하여 권한 +오·남용 등이 이루어지지 않도록 하여야 한다. +§ 외부인에 대하여 출입증을 발급하는 경우 신원확인, 내부 임직원 확인 등 출입증 발급 대상의 적정성 여부 +검토, 출입권한 부여, 출입증 발급 등의 출입증 발급 절차를 수립하여야 한다. +고려 사항 +§ 보호구역 방문이 필요한 외부인은 사전에 홈페이지 등을 이용하여 사전 방문신청을 할 수 있다. 다만, 사전에 +신청하지 못한 외부인은 출입 당일 안내데스크 등에서 방문신청서를 작성·제출하여야 한다. +§ 보호구역 이외의 장소(접견지역 등)만 출입하는 경우 출입증을 발급하지 않고 출입하는 것을 고려 하여야 한다. +§ 업무상 출입이 필요한 경우는 해당 출입구역(예: 특정 층의 특정 사무실)에만 출입이 가능하도록 권한을 +부여하여야 한다. +§ 일부 보호구역(예: 스피드게이트 내의 제한구역)으로만 출입 허용이 요구되는 경우는 최소권한이 부여된 +출입증을 발급하고, 스피드게이트 이외에는 출입 권한을 제한한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제88조(정보통신시설 출입관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.2 출입통제 + + +![이미지 227-0](images/p0227_img0.png) + + +--- + +| 한국인터넷진흥원 | +228 +확인 대상(예시) +☐전산실, 기계실 등의 보호구역 외부자 출입증 발급 절차 +☐외부자 출입증 출입권한 부여 내역 +☐통제구역 등 출입자 목록 중 외부자 여부 +☐출입관리시스템 및 영상보관장비 + + +![이미지 228-0](images/p0228_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +229 +P-8 +관리적 분야 > 1. 물리보안 +전산 장비실에 외부협력업체 출입 시 내부 임직원이 상시 동행 +관련 조직 +정보보호 부서, 시설 보안 부서 +세부 설명 +§ 전산실, 장비실 등 보호구역에 외부협력업체 직원이 출입하는 경우 내부 임직원이 항상 동행하여 +비인가행위가 이루어지지 않도록 하여야 한다. +§ 보호구역은 업무 목적에 따라 최소한의 인원만 출입할 수 있도록 통제하고 임시 출입허가를 받은 자가 출입 시 +출입권한이 부여된 임직원(인솔자)의 인솔하에 출입하고 지시에 따르도록 하여야 한다. +고려 사항 +§ 출입 이후 모든 작업 기간(시간) 동안 동행이 어려울 시에는 출입 및 작업 시점에서만 직원 동행하고 그 이후에 +CCTV를 통하여 모니터링을 하는 등 별도의 통제 방안을 마련하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책), 제88조(정보통신시설 출입관리) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.2 출입통제, 2.4.5 +보호구역 내 작업 +확인 대상(예시) +☐보호구역(물리적) 보안 지침 +☐전산실, 장비실 등의 보호구역 +☐외부자 출입증 출입권한 부여 내역 +☐제한구역 출입 관리 대장(외부자 출입 현황) + + +![이미지 229-0](images/p0229_img0.png) + + +--- + +| 한국인터넷진흥원 | +230 +☐출입관리시스템 및 영상보관장비(관리단말 PC) +☐(서식 자료 제20호) 보호구역 관리대장 +☐(서식 자료 제21호) 제한구역· 통제구역 출입자 명부 + + +![이미지 230-0](images/p0230_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +231 +P-9 +관리적 분야 > 1. 물리보안 +시각적으로 구분이 가능한 신분증 패용 +관련 조직 +정보보호 부서, 시설 보안 부서 +세부 설명 +§ 보호구역을 출입하는 자는 신분증을 상시 패용하여 보호구역에서의 불법행위를 방지하고 보안을 확보하여야 +한다. +§ 보호구역(제한구역, 통제구역 등) 내에서 신분증(사원증, 출입증 등)을 상시 패용하여 본인을 확인할 수 있도록 +하여야 한다. +고려 사항 +§ 보호구역 내 컨설팅·유지보수 계약 등을 통하여 일정 기간(예: 3개월) 이상 상주하는 계약업체 소속직원은 +사원증을 발급하여 업무를 수행하도록 한다. +§ 보호구역은 출입이 제한되는 곳으로서 임시출입증은 특별한 사유가 없는 경우에는 1회 발급시 90일을 +초과하지 않도록 한다. + +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제10조(물리적 안전조치) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제9조(건물에 관한 사항), 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.2 출입통제 +확인 대상(예시) +☐보호구역(물리적) 보안 지침 +☐신분증(사원증, 출입증 등) + + +![이미지 231-0](images/p0231_img0.png) + + +--- + +| 한국인터넷진흥원 | +232 +P-10 +관리적 분야 > 1. 물리보안 +주요장비, 대체시스템 및 자료들을 화재, 습도 등의 환경재해로부터 보호되는 적절한 곳에 배치하여 보호 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 전산실 등의 정보통신 시설은 화재, 습도 등 환경적 영향에 따라 정보시스템의 가동 정지, 데이터 훼손 위험이 +존재하기 때문에 소방설비, 누수감지설비, 항온항습설비를 적절한 곳에 배치하여 관리하여야 한다. +고려 사항 +§ 주요 장비 및 시스템이 위치한 보호구역의 특성에 따라 화재, 습도 등 환경재해 등에 대비하여 필요한 보호 +설비를 갖추고 운영절차를 수립하여 운영하여야 한다. +§ 화재로부터 자산을 안전하게 보호하기 위해 화재 감지기를 적절한 간격으로 설치하고 충분한 소화시설(예: +화재 감지기, 소화설비)을 설치하고 주기적인 점검을 수행하여야 한다. +§ 소화설비란 화재시에 소화의 역할을 수행하기 위해 설치되는 기기, 장치 및 용구를 의미하며, 다음과 같이 +초기 소화설비와 고정식 소화설비로 구분한다. +구분 +설명 +초기 소화설비 +화재현장에서 사람이 사용하는 소화기구를 말하며, 소형 소화기 등이며, 소화기는 A(일반 화재) +B(기름 화재) C(전기화재)로 분류되어 있다. +고정식 소화설비 +초기소화설비에서 소화하는 것이 곤란한 장소나 대량의 위험물이 존재하는 장소, 또는 화재가 +확대할만한 경우에 사설 공설을 불문하고 대량의 소화약제를 투입하여야 되기 때문에 설비되는 +것이며, 옥내 및 옥외 소화전설비나 설비, 화학소화설비 등이 있다. 위험물을 취급, 저장하는 +장소에서는 화학소화설비, 특히 자동소화를 할 수 있으며, 연기 감지기나 열 감지기와 +연동(interlock)시키는 것이 바람직하다. +§ 상하수도 배관이나 냉방 설비 결함에 의한 침수 피해를 방지하기 위해 누수감지 센서를 주요 지점에 설치하고, +누수 탐지 시 즉각 조치할 수 있는 알람 및 점검 절차를 마련하여야 한다. +§ 화재 감지기, 소화설비, 누수감지기는 작동기능 점검, 정기점검, 종합정밀 점검 등 매월 또는 분기마다 +주기적으로 점검을 수행하여 항시 최적의 운영환경을 유지하도록 하여야 한다. +§ 보호구역의 온도 및 습도 유지를 위해 항온항습기 또는 에어컨 등을 설치하여 온습도를 적정한 상태로 +유지하도록 하여야 한다. + + +![이미지 232-0](images/p0232_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +233 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +소방시설 설치 및 관리에 관한 법률 제12조(특정소방대상물에 설치하는 소방시설의 관리 등), +제16조(피난시설, 방화구역 및 방화시설의 관리) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제10조(전원, 공조 등 설비에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.4 보호설비 운영 +확인 대상(예시) +☐화재 감지 및 소화 설비 현황 +☐누수 감지 설비 현황 +☐항온항습 설비 현황 + + +![이미지 233-0](images/p0233_img0.png) + + +--- + +| 한국인터넷진흥원 | +234 +P-11 +관리적 분야 > 1. 물리보안 +전원공급 이상이나 기타 전기관련 사고로부터 장비 보호(UPS, 비상발전기, 이중전원선 등의 설비) +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 전산실 등의 정보통신 시설은 전원공급이 차단되는 경우 서비스 중단으로 이어지기 때문에 무정전전원 +장치(UPS), 비상발전기, 이중전원선 등의 설비를 갖춰야 한다. +고려 사항 +§ 자가발전설비를 운영하는 집적정보통신시설(IDC)의 경우 최소 2시간 이상의 발전이 가능한 연료 공급 시설을 +갖추어야 하며, UPS의 경우 정보시스템 장비의 3개월간 평균 순간사용전력의 130%에 해당하는 전력을 최소 +15분 이상 공급할 수 있도록 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해‧재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책), 제92조(재난 방지대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제10조(전원, 공조 등 설비에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4. 4 보호설비 운영 +확인 대상(예시) +☐UPS 용량 및 성능에 관한 문서(예: 제조사 설명서 또는 정기점검 결과) +☐비상발전기 용량 및 성능에 관한 문서(예: 정기점검 결과) +☐비상 전원 설비(예: UPS, 비상발전기, 이중전원선 등) +☐(참고 자료 제14호) 집적정보통신시설 보호조치 세부기준 + + +![이미지 234-0](images/p0234_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +235 +P-12 +관리적 분야 > 1. 물리보안 +전원공급 이상이나 기타 전기관련 사고로부터 장비를 보호하기 위해 설비 상태에 대해 정기적으로 검토 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 전원 공급이 이루어지지 않는 비상상황을 대비하기 위하여 무정전전원공급장치(UPS), 이중전원선, 비상발전기 +등의 비상설비를 마련하고 해당 설비에 대한 정기점검을 실시하여야 한다. +§ 집적정보통신시설(IDC)인 경우는 관계 법규에 따른 전력 가용성 확보 기준에 따라 UPS, 축전지설비, +자가발전설비 등 설비를 갖춰야 하고 해당 설비에 대한 정기적인 점검을 시행하여야 한다. +§ IDC 이외의 시설에 대하여는 자체적인 비상 전력대책을 수립하고 대상 설비에 대한 정상 동작 여부를 +정기적으로 점검(예: 매월 또는 분기)하여야 한다. +§ 비상 전원 설비의 안정적 운영을 위하여 연간 점검 계획을 수립하고 설비별 관리 책임자를 지정하여야 하며, +점검 결과 발견된 결함에 대해서는 즉각적인 보수 및 관리 책임자 승인 절차를 포함한 사후 관리 프로세스를 +운영하여야 한다. +고려 사항 +§ 비상 전원 설비는 작동기능 점검, 정기점검, 종합정밀 점검과 무부하 시험 등을 매월 또는 분기마다 +주기적으로 수행하여 전원공급 차단과 같은 비상 상황에도 전원공급이 가능하게 하여야 한다. +§ 정전과 같은 비상상황에 대비하기 위한 비상발전기는 정기적인 점검과 시험이 필요하다. 이를 위해, +비상발전기에 대한 부하를 주지 않고 테스트를 수행하는 무부하 테스트를 정기적으로 실시할 필요가 있다. +※ 무부하 시험(no-load test, 無負荷試驗)이란 무부하 운전에 의한 시험을 말하며, 무부하손 측정이 가능하다. +§ 외부 전문 업체를 통한 점검 시 내부 담당자가 반드시 참관하여 실제 점검 여부를 확인하고 보고서의 적정성을 +검토하여야 한다. +§ UPS 및 비상발전기의 장애 발생 시 즉시 대응할 수 있도록 원격 경보 시스템의 작동 상태를 수시로 확인하고, +소모품(축전지, 연료 등)의 교체 주기 및 적정 비축량을 체계적으로 관리하여야 한다. + + +![이미지 235-0](images/p0235_img0.png) + + +--- + +| 한국인터넷진흥원 | +236 +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +개인정보 보호법 제29조(안전조치의무) +개인정보의 안전성 확보조치 기준 제11조(재해‧재난 대비 안전조치) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제10조(전원, 공조 등 설비에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.4 보호설비 운영 +확인 대상(예시) +☐전력 체계도 또는 설비 구성 도면 +☐대상 설비에 대한 정기점검 이력 +☐대상 설비(예: UPS, 비상발전기 등) +☐대상 설비에 대한 연간 점검 및 운영계획서 + + +![이미지 236-0](images/p0236_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +237 +P-13 +관리적 분야 > 1. 물리보안 +전원선 및 통신선은 도청이나 손상으로부터 보호 +관련 조직 +정보보호 부서, 해당 부서 +세부 설명 +§ 전원 및 통신 케이블은 도청이나 손상을 통한 위협으로부터 보호하기 위해 상호 방해 및 간섭받지 않도록 +물리적으로 구분·배선, 식별 표시, 상호 간섭받지 않도록 거리 유지, 케이블 매설 등의 조치를 취하여야 한다. +§ 전원선 및 통신선은 도청 및 손상 방지를 위해 이중마루 하부 또는 천장 배관을 통해 물리적으로 +분리·배선하고 적정 이격 거리를 유지하여 은폐·보호되도록 설치하여야 한다. +고려 사항 +§ 전원선 및 통신선은 이격하는게 원칙이나 기존 통신실에 설치가 이루어지는 경우 이격되지 않거나 이격이 +불가능할 수도 있다. 이 경우 전원선 및 통신선이 손상으로부터 보호할 수 있는 보호대책을 수립·이행하여야 +한다. +§ 배전반, 강전실, 약전실 등에는 인가된 최소한의 인력만 접근할 수 있도록 접근통제를 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제10조(전원, 공조 등 설비에 관한 사항), 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.3 정보시스템 보호 +확인 대상(예시) +☐전원 및 통신 케이블 설치 장소 +☐전원 및 통신 케이블 식별 표시 현황 +☐전원 및 통신 케이블 관리 현황 + + +![이미지 237-0](images/p0237_img0.png) + + +--- + +| 한국인터넷진흥원 | +238 +P-14 +관리적 분야 > 1. 물리보안 +누전이 발생하였을 때 이를 차단할 수 있도록 누전차단기 또는 누전경보기의 설치 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 누전이 발생으로 인한 화재 및 폭발, 전로 및 기계기구의 손상 등을 예방하기 위해 누전을 차단할 수 있는 +누전차단기 및 누전경보기를 설치하여야 한다. +고려 사항 +§ 누전차단기 및 누전경보기는 관계 법률(소방시설 설치ㆍ유지 및 안전관리에 관한 법 등)에서 정한 기준에 따라 +설치가 이루어져야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제10조(전원, 공조 등 설비에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.4 보호설비 운영 +확인 대상(예시) +☐특정소방대상물에 따른 누전경보기 규격서 +☐설치된 누전차단기 및 경보기 + + +![이미지 238-0](images/p0238_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +239 +P-15 +관리적 분야 > 1. 물리보안 +전산실에 24시간 항온, 항습을 유지하기 위하여 온습도 측정이 가능하도록 항온항습기 등을 설치 및 운영 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 전산기기를 운영하는 전산실 등 정보통신 시설은 정보시스템의 가동 정지를 방지하기 위해 24시간 동안 +온도와 습도를 자동으로 측정 및 조절할 수 있는 항온항습 설비를 설치 및 운영하여 적정한 온도와 습도를 +유지하여야 한다. +고려 사항 +§ 항온항습기는 작동기능 점검, 정기점검, 종합정밀 점검 등 매월 또는 분기마다 주기적으로 점검을 수행하여 +항시 최적의 운영환경을 유지하도록 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제10조(전원, 공조 등 설비에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.4 보호설비 운영 +확인 대상(예시) +☐항온항습 설비 현황(사양서 포함) +☐항온항습 설비의 정기점검(예: 매월 또는 분기) 이력 +☐항온항습 설비 + + +![이미지 239-0](images/p0239_img0.png) + + +--- + +| 한국인터넷진흥원 | +240 +P-16 +관리적 분야 > 1. 물리보안 +주요시설(중앙감시실, 전산실, 전력관련시설, 통신장비실, 방재센터 등)에는 기존 조명설비의 작동이 멈 +추는 경우에도 작업이 가능하도록 비상조명을 설치 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 주요 시설(중앙감시실, 전산실, 전력관련시설, 통신장비실, 방재센터 등)은 전력 차단 등에 따라 기존 +조명설비의 작동이 멈추는 경우에도 작업이 가능하도록 비상조명(자동조명설비, 휴대용 손전등 등)을 +설치하여야 한다. +고려 사항 +§ 비상조명등은 작동기능 점검, 정기점검, 종합정밀 점검 등 매월 또는 분기마다 주기적으로 점검을 수행하여 +기존 조명설비의 작동이 멈추는 경우에도 작업이 가능하도록 하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제10조(전원, 공조 등 설비에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.4 보호설비 운영 +확인 대상(예시) +☐비상 조명 설비의 설치 현황(사양서 포함) +☐비상 조명 설비의 점검(예: 매월 또는 분기) 이력 +☐비상 조명 설비 + + +![이미지 240-0](images/p0240_img0.png) + + +--- + + +## 03. 물리적 분야 기본 항목 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +241 +P-17 +관리적 분야 > 1. 물리보안 +주요시설의 출입구와 전산실 및 통신장비실 내부에 CCTV를 설치 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ 제한구역, 통제구역 등의 보호구역은 실제 출입자를 영상으로 식별할 수 있도록 CCTV를 설치하여야 한다. +§ CCTV를 설치하는 위치는 출입이 엄격히 제한되는 장소의 출입구(예: 출입자 얼굴을 확인할 수 있는 위치)와 +정보통신실 내의 전산 작업이 이루어지는 공간으로 출입자 신원(얼굴)과 행위를 확인할 수 있는 위치로 +정하여야 한다. +고려 사항 +§ 설치된 CCTV가 정상 동작하는지 정기적으로 점검하고 장애, 사각지대 등이 확인되는 경우 지체 없이 +보완하여 상시적인 감시통제가 이루어지도록 하여야 한다. +§ 통제구역 내부가 어둡다면 출입자의 신원과 행위를 식별하기 불가능하므로 동작 센서를 통한 자동 점등이 +이루어지게 하거나 적외선 기능을 탑재한 CCTV 카메라 설치를 고려할 필요가 있다. +§ CCTV 영상기록은 식별 가능한 수준으로 가급적 실내·외 200만 화소 이상을 유지할 필요가 있다. +§ 실외 지역이 보호구역이며 CCTV 설치가 필요하다면 저조도 기능이 탑재된 CCTV를 설치하는 것을 고려한다. +§ CCTV 영상기록은 보안사고 조사 및 출입기록 확인 등을 목적을 위해 최소 30일 이상 보관하며, 보관 기간 +만료 후에는 관련 법령 및 내부 정책에 따라 안전하게 삭제하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제10조(전원, 공조 등 설비에 관한 사항), 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.1 보호구역 지정, 2.4.4 +보호설비 운영, 2.4.5 보호구역 내 작업 +확인 대상(예시) +☐CCTV 카메라 등의 정기점검 결과 +☐CCTV 설치 위치, CCTV 중앙통제실 + + +![이미지 241-0](images/p0241_img0.png) + + +--- + +| 한국인터넷진흥원 | +242 +P-18 +관리적 분야 > 1. 물리보안 +CCTV 운용 시 중계·관제서버, 관리용 PC, 정보통신망 등에 대해 보안대책을 수립 +관련 조직 +정보보호 부서, 시설 관리 부서 +세부 설명 +§ CCTV는 폐쇄망에 운영되고 중계·관제서버, 영상기록장비(DVR NVR 등), 관리용 PC 등의 CCTV 관련 +자산에 대한 보안대책을 수립‧적용하여야 한다. +§ 외부에 CCTV를 설치하는 경우 카메라, 중계서버는 비인가자가 임의로 조작하지 못하도록 물리적인 +접근통제를 적용하고 내부 통신망을 통하여 구성(인터넷망과 분리하고 별도 단독망 이용)하여야 한다. +§ CCTV관제시스템이 운용되는 영역으로의 접근은 별도의 침입차단시스템(또는 네트워크 장비의 ACL 설정을 +통한 접근차단)을 통해 비인가 접근을 원천 차단하여야 한다. +§ 관제시스템과 관리용 PC는 계정, 비밀번호 등의 로그인을 통해서만 접근하도록 하여야 하고, 원격에서의 +접근통제를 위해 IP, MAC 등을 활용한다. 또한 관제시스템, 관리용 PC는 백신S/W를 설치하고 최신 +업데이트가 적용되도록 하며 비인가 USB매체 사용 등을 차단하여야 한다. +고려 사항 +§ 인터넷망을 통해 CCTV 관련 자산에 접속하는 것은 통제하여야 하나, 부득이한 경우는 암호화 통신(예: SSL +적용), 관리접속 시의 사용자 인증 강화(예: 인증서, 휴대폰인증 등) 등 보호대책을 강구하여야 한다. +관계 법규 +공통 +정보통신기반 보호법 제5조(주요정보통신기반시설보호대책의 수립 등) +공공기관 +국가 정보보안 기본지침 제87조(정보통신시설 보호대책) +금융회사 +전자금융거래법 제21조(안전성의 확보의무) +전자금융감독규정 제11조(전산실 등에 관한 사항) +ICT기업 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 제46조(집적된 정보통신시설의 보호) +정보보호 및 개인정보보호 관리체계 인증 등에 관한 고시 [별표7] 2.4.4 보호설비 운영, 2.6.1 +네트워크 접근 +확인 대상(예시) +☐네트워크 구성도(CCTV 통신망 포함) +☐보호구역 내의 CCTV 중계·관제서버, 관리용 PC 등 보호대책 적용화면 + + +![이미지 242-0](images/p0242_img0.png) + + +--- + +<참고 제1호> 정보보호 정책 목차 (예시) ········································································244 +<참고 제2호> 정보보호 정책 타당성 검토 체크리스트 (예시) ············································245 +<참고 제3호> 정보보호 예산 기준··················································································246 +<참고 제4호> 외부용역업체 보안관리 준수사항 (예시) ·····················································249 +<참고 제5호> 사업자 보안위규 처리기준 (예시) ······························································251 +<참고 제6호> 사업자 보안위약금 부과 기준 (예시) ··························································253 +<참고 제7호> 자산의 보안등급 분류 기준 (예시) ·····························································254 +<참고 제8호> 정보시스템 저장매체ㆍ자료별 삭제방법 (예시) ···········································255 +<참고 제9호> 무선랜 보안관리 절차서(예시) ···································································256 +<참고 제10호> 무선AP 점검항목 (예시) ·········································································257 +<참고 제11호> 정보보안 점검항목 (예시) ·······································································258 +<참고 제12호> 정보보호시스템 도입 요건 (공공기관 사전인증 제품 도입 시) ····················260 +<참고 제13호> DDoS 공격 유형 및 대응 방안································································261 +<참고 제14호> 집적정보통신시설 보호조치 세부기준······················································264 +<참고 제15호> 인터넷 전화망과 전산망의 분리 지침·······················································268 + +### 부록1. 참고 자료 + +Chapter 04 +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 + + +![이미지 243-0](images/p0243_img0.png) + + +--- + +| 한국인터넷진흥원 | +244 +<참고 제1호> +정보보호 정책 목차 (예시) + +## 1장. 정보보호 정책 및 조직 + +1조(정보보호 정책), 2조(정보보호 계획 수립 및 검토) , 3조(정보보호최고책임자 지정), 4조(정보보호 실무 조직 운영) + +## 2장. 인원 보안 + +5조(인적 보안), 6조(외부자 보안), 7조(보안교육 및 훈련) + +## 3장. 자산 관리 + +8조(자산 분류), 9조(매체 보안관리), 10조(비밀문서 관리) + +## 4장. 정보통신기술(ICT) 보안 + +1절. 접근통제 +11조(원격접속 관리), 12조(모바일기기 보안), 13조(노트북 등 PC보안), +14조(정보보호시스템 접근기록 관리), 15조(무선랜 보안) +2절. 운영 보안 +16조(개발 보안), 17조(정보시스템 도입 시 보안성검토), 18조(취약점 점검), 19조(악성코드 보안), +20조(비밀번호 관리), 21조(백업 관리), 22조(사이버보안진단의 날 운영), 23조(정보보호시스템 도입 및 운영) + +## 5장. 물리적 보안 + +24조(보호구역 관리), 25조(주요 시설 감시 통제), 26조(출입권한 관리), 27조(전력 보호) + +## 6장. 업무연속성 및 사고 대응 + +28조(업무연속성 계획 수립), 29조(침해사고 대응 절차), 30조(침해사고대응 훈련) + + +![이미지 244-0](images/p0244_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +245 +<참고 제2호> +정보보호 정책 타당성 검토 체크리스트 (예시) +검토일자: 년 월 일 +NO +개정 필요성 검토 기준 +개정 +불필요 +1 +관계 법규의 개정이 이루어져 해당하는 정책 또는 지침의 개정 필요성이 있는가? +2 +중대한 보안사고가 발생하여 정책 또는 지침의 보안 요구사항에 대한 개정 필요성이 있는가? +3 +보안기관 등을 통해 알려진 심각한 위협 또는 취약성이 발견되어 정책 또는 지침의 보안 +요구사항에 대한 개정 필요성이 있는가? +4 +조직의 대대적인 개편이 이루어져 해당하는 정책 또는 지침의 개정 필요성이 있는가? +5 +대규모 정보시스템 또는 중요 정보시스템의 물리적인(또는 기술적인) 환경 변화가 있어 +해당하는 정책 또는 지침의 개정 필요성이 있는가? +※ 상기 검토 결과에 따라 개정 필요 부분에 체크가 하나 이상 이루어지면 해당 정책 또는 지침의 개정을 추진하며, 아래 +검토결과에 개정 대상 정책 또는 지침을 명시한다. +검토 결과(의견) + + +![이미지 245-0](images/p0245_img0.png) + + +--- + +| 한국인터넷진흥원 | +246 +<참고 제3호> +정보보호 예산 기준 +(전자금융감독규정 [별표2] 정보기술부문 및 정보보호 예산 기준) + +## 1. 예산 개요 + +정보기술부문 예산 중 정보보호와 관련하여 소요되는 모든 경비의 합계. 다만, 정보기술부문 예산에 포함되지 +아니한 경비는 제외한다. + +## 2. 예산 항목 + +예산 항목 +세부 내용 +1) 정보보호 관련 인건비 +① 정보보호와 관련하여 기획·개발·운영·유지·보수를 수행하는 내부 인력(정규직 및 계약직 +포함)의 인건비 및 복리 후생비 등 관련 경비 일체 +② 외부 주문·제휴에 따라 정보보호 관련 업무를 수행하는 외주 인력과 관련된 경비는 제외 +2) 정보보호시스템 +구입비 및 임차료 +① 정보보호와 관련하여 하드웨어 및 소프트웨어를 구입 또는 임차(리스)하는데 소요되는 경비 +일체 +※ 3. 정보보호시스템 분류표 참고 +3) 정보보호시스템 +유지보수비 +① 정보보호시스템의 성능을 최적화하고 정상적 기능을 수행할 수 있도록 정기 또는 수시로 +정보보호시스템을 유지하고 관리하는데 소요되는 경비 일체 +② 정보보호시스템 관련 소모품 교체 비용 포함 +4) 정보보호서비스 +이용료 +① 정보보호와 관련하여 제공되는 서비스를 이용하거나 정보보호시스템과 관련하여 필요한 +기술을 확보하는데 소요되는 경비 일체 +※ 4. 정보보호서비스 분류표 참고 +② 정보보호S/W라이센스비용, 정보보호기술이전·이용료 포함 +5) 정보보호 관련 외주 +용역비 +① 외부 주문 또는 제휴에 따라 정보보호시스템과 정보보호서비스와 관련하여 기획·개발·운영· +유지·보수의 일부 또는 전부의 업무를 외부업체에 위탁(아웃소싱)하는데 소요되는 경비 일체 +6) 정보보호 관련 컨설팅 +비용 +① 정보보호와 관련하여 외부기관으로부터 자문, 점검, 분석, 평가, 인증, 심사, 연구, 조사에 +소요되는 경비 일체 +※ 5. 정보보호컨설팅 분류표 참고 +7) 정보보호 관 +교육·훈련비 +① 정보보호와 관련하여 임직원의 교육, 직무훈련·연수 및 회의·행사에 소요되는 경비 일체 +8) 정보보호 관련 +통신회선 이용료 +① 재해복구센터용 통신회선 이용료 +② 디도스공격대응용 통신회선 이용료 +※ 상기 정보보호 예산 항목이외 전자금융감독규정 제2조 제5호의 규정에서 정한 정보보호와 관련된 예산 항목을 포함할 수 +있다. + + +![이미지 246-0](images/p0246_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +247 + +## 3. 정보보호시스템 분류표 + +대분류 +소분류 +세부항목 +1) 컨텐츠 +정보보호 +① DB정보보호 +가. DB암호화 +나. DB접근통제 +② 디지털저작권관리 +가. 저작권관리(DRM) +나. 자료유출방지(DLP) +③ 개인정보보호 +가. 정보보호서버 +나. 개인정보필터링 S/W +④ 데이터백업 +가. 데이터 백업·소산시스템 +나. 재해복구(DR)시스템 +⑤ 기타 +가. 도청 및 감청 방지 제품 +2) 시스템 +정보보호 +① 사용자 인증 +가. 정보보호토큰(HSM) +나. 정보보호스마트카드 +다. 일회용 비밀번호(OTP) 생성시스템 +라. 생체(Bio)인식시스템 +② PC정보보호 +가. PC정보보호관리 +나. 정보보호USB +다. 키보드해킹방지프로그램 +③ Anti-Virus/Spam +가. 바이러스백신(Vaccine) +나. 바이러스월(wall) +다. 안티 스파이웨어(Spyware) +라. 스팸(Spam) 차단 +마. 피싱(Phishing) 방지 +④ 접근통제 +가. 정보보호운영체제(SecureOS) +나. 통합접근권한관리(EAM) +다. 싱글사인온(SSO) +라. 통합계정관리시스템(IM/IAM) +3) 네트워크 +정보보호 +① 침입차단시스템 +가. 네트워크방화벽 +나. 시스템 방화벽 +다. PC방화벽 +라. 웹방화벽 +마. 통합위협관리시스템(UTM) +② 침입방지시스템 +가. 침입탐지(IDS) +나. 침입방지(IPS) +③ 가상사설망 +가. VPN +④ 전자서명 +가. 공개키기반(PKI) + + +![이미지 247-0](images/p0247_img0.png) + + +--- + +| 한국인터넷진흥원 | +248 +※ 상기 정보보호시스템 이외 전자금융감독규정 제2조 제6호의 규정에서 정한 정보보호시스템을 포함할 수 있다. + +## 4. 정보보호서비스 분류표 + +대분류 +소분류 +세부항목 +1) 정보보호 +서비스 +① 인증서비스 +가. 공인/사설인증서비스 +② 정보보호관제서비스 +가. 정보보호관제서비스 +③ 재해복구서비스 +가. 재해복구서비스 +④ 위협정보제공서비스 +가. 취약점, 대응방안 등 정보제공서비스 +※ 상기 정보보호서비스 이외 전자금융감독규정 제2조 제5호의 규정에서 정한 정보보호와 관련된 서비스를 포함할 수 있다. + +## 5. 정보보호컨설팅 분류표 + +대분류 +소분류 +세부항목 +1) 정보보호 +컨설팅 +① 정보보호컨설팅 +가. 정보보호계획 수립·자문 +나. 정보보호표준 인증 심사 +다. 정보보호제품 시험·평가 +라. 정보보호 연구·개발 +마. 정보기술부문 감리 +② 취약점 분석 +가. 취약점 분석·평가 +나. 모의 해킹 +다. 모의 훈련 +※ 상기 정보보호컨설팅 이외 전자금융감독규정 제2조 제5호의 규정에서 정한 정보보호와 관련된 컨설팅을 포함할 수 있다. +대분류 +소분류 +세부항목 +⑤ 네트워크통제 +가. 망접근제어(NAC) +⑥ 무선·모바일정보보호 +가. 무선랜정보보호 +나. 모바일정보보호 +⑦ DDoS대응 +가. DDoS대응(탐지,차단)시스템 +4) 정보보호 +관리 +① 정보보호관리 서비스 +① 네트워크정보보호관리(NMS) +가. 위협관리시스템(TMS) +나. 위험관리시스템(RMS) +다. 기업정보보호관리(ESM) +라. 패치관리시스템(PMS) +마. 로그(log) 관리·분석 툴 +바. 취약점 분석·포렌식 툴 + + +![이미지 248-0](images/p0248_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +249 +<참고 제4호> +외부용역업체 보안관리 준수사항 (예시) + +## 1. 참여 인력에 대한 보안관리 + +1) 보안서약서 등 제출 +① 사업 참여인원에 대해 사업투입 전 자체 보안 교육 후, 보안서약서, 기본보안교육 내용을 제출하여야 한다. +2) 보안교육 실시 +① 사업자는 보안인식제고를 위해 주기적으로 자체 보안 교육을 하며, 발주기관이 요구하는 보안교육에 참석하여야 한다. +3) 인력변동 관리 +① 시스템 접근 권한을 승인받은 인력 또는 해당 인력의 업무 변동이 있는 경우, 발주기관 정보보안담당에게 해당 사 +유가 발생한 후 1일 내에 신고하여야 한다. + +## 2. 자료⦁정보 등의 보안관리 + +1) 비밀 준수 대상 자료․정보 +① 사업자는 아래의 자료나 정보(이하 “비밀정보”라 한다)에 대하여 비밀을 유지하여야 한다. +가. 발주기관이 본 사업의 이행을 위하여 사업자에게 서면 또는 구두 등의 방법으로 비밀에 해당한다고 고지하고 +제공한 자료나 정보(DB정보, IP 정보, 상세 시스템 구성도 등) +나. 법령 또는 발주기관의 내규에 의하여 공개가 제한되거나 비밀을 유지하여야 하는 자료나 정보(미공개 계약 정보, +개인정보, 비밀지정문서 등) +다. 사업자가 본 계약의 이행 중 발주기관이 제공한 비밀정보를 이용․가공하여 얻은 자료나 정보 +2) 비밀정보의 관리 +① 사업자는 비밀정보의 관리를 위하여 자료명, 자료 용량․쪽수, 인계자/인수자 서명이 포함된 비밀정보 관리대장을 +작성하여야 한다. +② 사업자는 비밀정보를 업무별로 지정된 사용자만 접근이 가능하도록 관리하고, 비밀정보를 다른 자료나 정보와 구 +분하여 보관하여야 한다. +③ 사업자는 비밀정보 출력 시 출력물에 출력자, 출력일시, 보안경고문구 등을 표시하여야 한다. + +## 3. 사무실 및 전산 장비⦁매체 보안관리 + +1) 사무실 보안 관리 +① 사업자는 사무실 또는 용역 업무를 수행하는 공간에 대해 일일 보안점검을 하여야 하며, 발주기관 보안점검(예 : +월 1회)에 따른 지적사항 발생 시 그에 따른 벌칙 규정을 따른다. + + +![이미지 249-0](images/p0249_img0.png) + + +--- + +| 한국인터넷진흥원 | +250 +② 발주기관 외에서 사업수행을 할 수 없다. +2) 전산 장비·매체 보안 관리 +① 사업자가 사용하는 모든 PC, 서버는 인터넷 연결을 금지한다. 다만, 사업 수행상 필요한 경우 발주기관 정보 +보안담당과 협의하여 인터넷 전용 PC를 사용할 수 있다. +② 상기 인터넷 PC에 사업관련 자료를 저장을 금지하며, 업무용 PC 등과 완전히 분리, 구별하여야 한다. +③ 사업자는 노트북 사용을 제한하며, 데스크탑PC 사용을 원칙으로 한다. +④ 사업자는 PC, 노트북 등 전산장비를 반·출입하는 경우, 다음 사항을 사전 확인, 조치하여야 한다. +가. 반입시 : 백신, 내 PC 지키미 등 PC 보안프로그램 설치 및 악성코드 감염 여부 검사 +나. 반출시 : 저장 데이터 완전 삭제(발주기관 정보보안담당의 사전 확인 필요) +⑤ 사업자는 PC 봉인을 유지하고, 봉인해제 필요시 발주기관 정보보안담당의 사전 승인을 받아야 한다. +⑥ 사업자는 보안USB 외의 기타 보조기억매체는 사용할 수 없으며, 보안USB 외에는 자료를 저장할 수 없다. +⑦ 사업자는 전산 장비·매체를 승인권자 외의 사용자가 조작·탈취할 수 있도록 방치하면 안된다. + +## 4. 정보시스템 접근 보안관리 + +1) 사업자는 정보시스템 사용자 계정 이용 시 부여된 권한·목적 이외의 접근을 하면 안 되며, 승인된 사용자만 +접근하여야 한다. +2) 사업자는 공용계정을 사용하면 안 되며, 사용하지 않는 계정은 주기적으로 삭제하여야 한다. +3) 공유 폴더는 사용해서는 안 된다. +※ 상기 사업자 보안관리 준수사항 중 예외적 허용이 필요한 경우에는, 발주기관 정보보안담당에 예외 허용사항에 대한 보안성 +검토를 요청하여야 한다. + + +![이미지 250-0](images/p0250_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +251 +<참고 제5호> +사업자 보안위규 처리기준 (예시) +구분 +위규사항 +처리기준 +심각 위규 + +## 1. 비밀 및 대외비 급 정보 유출 및 유출시도 + +가. 정보시스템에 대한 구조, 데이터베이스 등의 정보 유출 +나. 개인정보·신상정보 목록 유출 +다. 비공개 항공사진·공간정보 등 비공개 정보 유출 + +## 2. 정보시스템에 대한 불법적 행위 + +가. 관련 시스템에 대한 해킹 및 해킹시도 +나. 시스템 구축 결과물에 대한 외부 유출 +다. 시스템 내 인위적인 악성코드 유포 +Ÿ 사업참여 제한 +Ÿ 위규자 및 직속 감독자 등 중징계 +Ÿ 재발 방지를 위한 조치계획 제출 +Ÿ 위규자 대상 특별 보안교육 실시 +중대 위규 + +## 1. 비공개 정보 관리 소홀 + +가. 비공개 정보를 책상 위 등에 방치 +나. 비공개 정보를 휴지통·폐지함 등에 유기 또는 이면지 활용 +다. 개인정보·신상정보 목록을 책상 위 등에 방치 +라. 기타 비공개 정보에 대한 관리소홀 +마. 참여인원에 대한 보안서약서 미징구 및 교육 미실시 + +## 2. 사무실(작업장)보안관리 허술 + +가. 출입문을 개방한 채 퇴근 등 +나. 인가되지 않은 작업자의 내부 시스템 접근 +다. 통제구역 내 장비·시설 등 무단 사진 촬영 + +## 3. 전산정보 보호대책 부실 + +가. 업무망 인터넷망 혼용사용, USB 등 보조기억매체 기술적 통제 미흡 +나. 웹하드·P2P 등 인터넷 자료공유사이트를 활용하여 용역사업 관련 +자료 수발신 +다. 개발·유지관리 시 원격작업 사용 +라. 저장된 비공개 정보 비밀번호 미부여 +마. 인터넷망 연결 PC 하드디스크에 비공개 정보를 저장 +바. 외부용 PC를 업무망에 무단 연결 사용 +사. 보안관련 프로그램 강제 삭제 +아. 제공된 계정관리 미흡 및 오남용(시스템 불법접근 시도 등) +자. 바이러스 백신 정품 S/W 미설치 +Ÿ 위규자 및 직속 감독자 등 중징계 +Ÿ 재발 방지를 위한 조치계획 제출 +Ÿ 위규자 대상 특별보안교육 실시 + + +![이미지 251-0](images/p0251_img0.png) + + +--- + +| 한국인터넷진흥원 | +252 +보통 위규 + +## 1. 기관 제공 중요정책·민감자료 관리 소홀 + +가. 주요 현안·보고자료를 책상 위 등에 방치 +나. 정책·현안자료를 휴지통·폐지함 등에 유기 또는 이면지 활용 +다. 중요정보에 대한 자료 인수·인계 절차 미이행 + +## 2. 사무실 보안관리 부실 + +가. 캐비닛·서류함·책상 등을 개방한 채 퇴근 +나. 출입키를 책상 위 등에 방치 + +## 3. 보호구역 출입 소홀 + +가. 통제·제한구역 출입문을 개방한 채 근무 +나. 보호구역 내 비인가자 출입 허용 등 통제 불순응 + +## 4. 전산정보 보호대책 부실 + +가. 휴대용저장매체를 서랍·책상 위 등에 방치한 채 퇴근 +나. 네이트온 등 비인가 메신저 무단 사용 +다. PC를 켜 놓거나 보조기억 매체(CD, USB 등)를 꽂아 놓고 퇴근 +라. 부팅·화면보호 비밀번호 미부여 또는 "1111" 등 단순숫자 부여 +마. PC 비밀번호를 모니터 옆 등 외부에 노출 +바. 비인가 보조기억매체 무단사용 +사. 정보시스템 반입시 바이러스 백신 미검사 또는 반출시 자료 삭제 +미확인 +아. 바이러스 백신 최신 업데이트 또는 정밀점검 미실시 +Ÿ 위규자 및 직속 감독자 등 경징계 +Ÿ 위규자 및 직속 감독자 사유서 +/경위서 징구 +Ÿ 위규자 대상 특별보안교육 실시 +경미 위규 + +## 1. 업무 관련서류 관리 소홀 + +가. 진행중인 업무자료를 책상 등에 방치, 퇴근 +나. 복사기·인쇄기 위에 서류 방치 + +## 2. 근무자 근무상태 불량 + +가. 각종 보안 장비 운용 미숙 +나. 경보·보안장치 작동 불량 + +## 3. 전산정보 보호대책 부실 + +가. PC내 보안성이 검증되지 않은 프로그램 사용 +나. 보안관련 소프트웨어의 주기적 점검 위반 +다. PC 월1회 보안 점검 미이행 +Ÿ 위규자 서면·구두 경고 등 문책 +Ÿ 위규자 사유서/경위서 징구 + + +![이미지 252-0](images/p0252_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +253 +<참고 제6호> +사업자 보안위약금 부과 기준 (예시) + +## 1. 사업규모 및 위규수준 등을 고려하여 차등 부과 + +1) 사업 예산이 1억원 이상인 경우 : 계약 금액의 비율로 위약금 부과 +구분 +위규 수준 +A급 +B급 +C급 +D급 +위규 +심각 1건 +중대 1건 +보통 2건 이상 +경미 3건 이상 +위약금 / 처분 +부정당업자 등록 +건당 계약금액의 5% +계약금액의 3% +계약금액의 1% +2) 사업 예산이 1억원 미만인 경우 : 정액으로 위약금 부과 +① 사업 예산이 3천만원 이상인 경우 +구분 +위규 수준 +A급 +B급 +C급 +D급 +위규 +심각 1건 +중대 1건 +보통 2건 이상 +경미 3건 이상 +위약금 / 처분 +부정당업자 등록 +건당 100만원 +50만원 +경고조치 +② 사업 예산이 3천만원 미만인 경우 +구분 +위규 수준 +A급 +B급 +C급 +D급 +위규 +심각 1건 +중대 1건 +보통 2건 이상 +경미 3건 이상 +위약금 / 처분 +부정당업자 등록 +50만원 +경고조치 +주의조치 + +## 2. 보안 위약금은 다른 요인에 의해 상쇄, 삭감이 되지 않도록 부과 + + +## 3. 위약금은 사업 종료 시 또는 기성대금 지급 시 지출금액 조정을 통해 정산 + + + +![이미지 253-0](images/p0253_img0.png) + + +--- + +| 한국인터넷진흥원 | +254 +<참고 제7호> +자산의 보안등급 분류 기준 (예시) +보안등급 +등급 분류 기준 +1등급 +기밀성(또는 무결성), 가용성이 높거나 법적준거성이 높아야 하는 자산 +※ 예시: 대외비 이상의 정보를 처리하는 시스템, 법률(개인정보 보호법)에 따른 보호조치 의무가 +적용되는 시스템 +2등급 +기밀성(또는 무결성), 가용성이 보통 이하이고 법적준거성이 낮은 자산 +※ 예시: 대외비는 아니나 외부에 공개해서는 아니 되는 정보를 처리하고 법률에 따른 보호조치 +의무가 없는 시스템 +3등급 +기밀성(또는 무결성), 가용성, 법적준거성이 모두 낮은 자산 +※ 예시: 외부에 공개 가능한 정보를 처리(예: 기관 소개 홈페이지 서버, 민원용 공용PC)하고 +법률에 따른 보호조치 의무가 없는 시스템 + + +![이미지 254-0](images/p0254_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +255 +<참고 제8호> +정보시스템 저장매체⦁자료별 삭제방법 (예시) +저장자료 +저장매체 +공개 자료 +비공개 자료 +대외비 자료 +비밀 자료 +자기테이프 +플로피디스크 +자체 판단 +물리적 파괴 +물리적 파괴 +물리적 파괴 +광디스크 +(CDㆍDVD 등) +자체 판단 +물리적 파괴 +물리적 파괴 +물리적 파괴 +반도체메모리 +(SSDㆍUSB 등) +포맷 또는 삭제 +물리적 파괴 +물리적 파괴 +물리적 파괴 +하드디스크 +포맷 또는 삭제 +디가우징 +또는 +완전삭제 S/W +물리적 파괴 +물리적 파괴 +1) 불용처리 시 위 분류에 따른 기준 이상으로 삭제 +2) 물리적 파괴는 소각ㆍ파쇄ㆍ용해 등을 말함 +3) 디가우징 또는 완적삭제 S/W는 「국가 정보보안 기본지침」 제31조(검증대상 제품)에 따라 보안적합성을 +검증받았거나 국가정보원이 인정하는 인증을 받은 제품에 한함 + + +![이미지 255-0](images/p0255_img0.png) + + +--- + +| 한국인터넷진흥원 | +256 +<참고 제9호> +무선랜 보안관리 절차서 (예시) +무선랜 AP를 설치하여 사용하고자 하는 경우 다음의 절차를 준수하여 사용하여야 하며, 이를 위반하는 경우는 보안규정에 +따라 조치할 수 있다. + +## 1. 무선랜 AP 사용 절차 + +1) 무선랜 AP를 설치하고자 하는 경우 장비에 대한 보안성검토를 하고, 무선랜 설치신청서(별첨<서식 제7호> 참조)를 +작성하여 정보보호 부서장에게 승인을 득한다. +2) 무선랜 AP를 설치할 때는 도난 등에 대비한 물리적 보호조치와 불법접근 등을 차단하기 위한 기술적 보호조치를 +취한다. +3) 기술적 보호조치는 다음 각 항에 따른다. +① SSID 이름은 추측이 어려운 문자열 조합을 사용한다. +② SSID 검색을 방지하기 위해 브로드캐스팅 기능을 중지한다. +③ WPA2 이상(256비트 이상)의 암호체계를 사용하도록 설정한다. +④ 허가된 IP와 MAC만 접근하도록 설정한다. +⑤ DHCP는 사용하지 않도록 설정한다. +⑥ 사용자 인증은 RADIUS 인증을 사용한다. +4) 기술적·물리적 보호조치를 취한 후 무선랜 설치완료 확인서(별첨<서식 제8호> 참조)를 정보보호 부서장에게 승인받고, +무선랜 AP 관리대장에 기록한다. + +## 2. 무선랜 사용 절차 + +1) 무선랜을 사용하고자 하는 경우 무선랜사용신청서(별첨<서식 제9호> 참조)를 작성하여 정보보호 부서장에게 승인을 +득한다. +2) 무선랜 관리담당자에게 무선랜사용신청서를 접수받아, 무선랜사용관리대장(별첨<서식 제11호> 참조)에 기록하거나 +또는 무선랜 AP의 관리기록(Log)을 유지하며, 해당하는 무선랜AP에 무선단말기(예: 태블릿PC, 스마트폰 등)의 +정보를 등록한다. +3) 1회 신청 시 최대 사용기간은 2개월이며, 2개월 이후 지속적인 사용이 필요한 경우 재신청하여야 한다. + +## 3. 무선랜 보안점검 + +1) 매월 마지막 주 ‘사이버보안진단의 날’에 본 지침에 따른 이행점검을 수행하되, 특히 무선랜 AP의 보안패치 여부, +무선랜 무단 사용 여부, 비인가 무선 중계기(AP) 설치 여부, 우회 정보통신망 사용 차단 여부 등을 함께 점검하고 +발견된 문제점을 개선조치 한다. + +## 4. 절차위반에 따른 조치 + +1) 상기 절차를 위반하는 자는 보안규정에 따라 징계 처리한다. + + +![이미지 256-0](images/p0256_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +257 +<참고 제10호> +무선AP 점검항목 (예시) +구분 +세부 점검 항목 +1) 장비 관리 +Ÿ 물리적 접근통제 +Ÿ 주기적인 패치 및 업그레이드 +2) 계정 관리 +Ÿ Default, Null Password 변경 +Ÿ 관리자 모드 비밀번호 설정 +Ÿ 관리자 페이지 접근통제 +Ÿ 무선랜 사용자 목록 관리 +3) 정책 관리 +Ÿ Default SSID 변경 +Ÿ SSID Broadcast 설정 +Ÿ 사용자 MAC 인증 +Ÿ 운영정책 백업 +4) 설정 관리 +Ÿ 무선랜 암호화 설정 +Ÿ 데이터 암호화 알고리즘 설정 +Ÿ AP 채널 설정 +Ÿ AP 전파 출력 조절 +Ÿ DHCP 운용 설정 +Ÿ IP대역 구분관리 + + +![이미지 257-0](images/p0257_img0.png) + + +--- + +| 한국인터넷진흥원 | +258 +<참고 제11호> +정보보안 점검항목 (예시) +분류 +점검항목 +전산실 +상시출입자외 출입자에 대한 책임자 승인 및 출입자관리기록부 기록‧보관 여부 +무인감시카메라 또는 출입자동기록시스템 등의 정상 작동 여부 +단말기 +업무담당자 이외의 단말기 무단 조작 금지 조치 여부 +정보처리시스템 접속 단말기의 정당한 사용자인가를 확인할 수 있는 기록 유지 여부 +중요 단말기의 외부 반출 금지 여부 +중요 단말기의 인터넷 접속 금지 여부 +중요 단말기의 그룹웨어 접속 금지 여부 +단말기에서 보조기억매체 및 휴대용 전산장비 접근 통제 여부 +전산자료 +개인별 사용자계정과 비밀번호 부여 여부 +사용자계정과 비밀번호 등록․변경․폐기의 체계적 관리 여부 +이용자 정보 조회․출력 통제 여부 +테스트 시 이용자 정보사용 금지 및 불가피한 경우 이용자 정보를 변환하여 사용하고 테스트 종료 +즉시 삭제 여부 +단말기에 이용자 정보 등 주요정보 보관을 금지하고 불가피한 경우 책임자의 승인을 받고 있는지 +여부 +단말기 공유 금지 여부 +전산자료 및 전산장비의 반출‧반입 통제 여부 +사용자 인사 조치시 지체 없이 해당 사용자계정 삭제, 계정 사용 중지, 공동 사용 계정 변경 등 +정보처리시스템 접근을 통제하고 있는지 여부 +정보처리시스템 +내부통신망의 비인가 전산장비‧무선통신 접속 통제 여부 +해킹 등 방지대책 +해킹 등을 방지하기 위한 정보보호시스템의 정상 작동 여부 +정보보호시스템에 최소한의 서비스번호와 기능만을 적용하고 있는지 여부 +정보보호시스템에 업무목적이외 기능 및 프로그램 제거 여부 +정보보호시스템의 원격관리 금지 여부 +시스템프로그램 등 긴급하고 중요한 보정사항에 대한 즉시 보정작업 실시 여부 + + +![이미지 258-0](images/p0258_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +259 +무선통신망 이용 업무에 대한 승인 및 사전 지정 여부 +악성코드 +악성코드 검색 및 치료프로그램의 최신상태 유지 여부 +중요 단말기의 악성코드 감염여부를 매일 점검하고 있는지 여부 +공개용 웹서버 +사용자계정에 아이디‧비밀번호 이외 추가 인증수단 적용 여부 +DMZ구간 내 이용자 정보 등 주요정보를 저장, 관리하지 않는지 여부 +내부사용자 비밀번호 +접근자 비밀번호 설정‧운영 여부 +비밀번호 보관 시 암호화 여부 +이용자 비밀번호 관리 +정보처리시스템 및 전산자료에 보관하고 있는 이용자 비밀번호 암호화 보관 여부 +이용자 유의사항 +비밀번호 유출위험 및 관리에 관한 사항의 공지 여부 +제공하고 있는 이용자보호 제도에 관한 사항의 공지 여부 +해킹·피싱 등 전자적 침해방지에 관한 사항의 공지 여부 +전자금융 사고보고 +전자적 침해행위에 대한 보고 및 조치 여부 + + +![이미지 259-0](images/p0259_img0.png) + + +--- + +| 한국인터넷진흥원 | +260 +<참고 제12호> +정보보호시스템 도입 요건 (공공기관 사전인증 제품 도입 시) +※ 최신 정보보호시스템 유형별 도입 요건은 ‘국가사이버안보센터’ 홈페이지에서 확인가능 +제품 유형 +아래 해당되는 항목 중에서 어느 하나 필요 +검증필 +암호모듈 +CC인증 +성능평가 +보안기능확인서 +보안적합성검증 +스마트카드 +국가용 +보안요구사항 +또는 +국가용 +보호프로파일 +(PP) 준수 +X +O +X +X +침입차단시스템 +X +국가용·일반 +보안요구사항 +준수 +X +X +침입방지시스템 +X +X +X +통합보안관리제품 +X +X +X +웹 방화벽 +X +X +X +운영체제(서버)접근통제제품 +X +X +X +DB접근통제제품 +X +X +X +네트워크접근통제제품 +X +X +X +인터넷전화 보안제품 +X +X +X +무선침입방지시스템 +X +X +X +무선랜 인증제품 +X +X +X +가상사설망제품 +X +X +탑재 필요 +디지털복합기 +X +X +X +스마트폰 보안관리제품 +X +X +X +스팸메일차단시스템 +X +X +X +패치관리시스템 +X +X +X +망간자료전송제품 +X +X +X +DDoS 대응장비 +국가용 +보안요구사항 +준수 +X +X +안티바이러스제품(Windows) +X +X +소스코드 보안약점 분석도구 +X +X +SSO 제품 +X +O +X +탑재필요 +네트워크 자료유출방지제품 +X +X +국가용·일반 +보안요구사항 +준수 +X +X +호스트 자료유출방지제품 +X +X +X +탑재 필요 +S/W기반 보안USB제품 +X +X +X +탑재 필요 +가상화관리제품 +X +X +X +X +네트워크 장비 +X +X +X +X +저장자료 완전삭제제품 +X +X +X +O +X +메일 암호화제품 +X +X +X +O +탑재 필요 + + +![이미지 260-0](images/p0260_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +261 +<참고 제13호> +DDoS 공격 유형 및 대응 방안 +(출처 : DDoS 공격 대응 가이드[한국인터넷진흥원 인터넷침해대응센터]) +1. DDoS 공격 형태 +DDoS 공격은 공격 형태에 따라 크게 △대역폭 공역, △자원소진 공격, △웹/DB부하 공격이 있다. 각각의 공격 +형태마다 특징이 있으며, 대응하는 방법도 각기 다르다. +모든 DDoS 공격은 공격을 수행하는 봇넷의 규모에 따라 위험도가 비례하고, 통상 대부분의 공격은 여러 유형을 +혼합하여 멀티벡터 공격을 사용한다. 예를 들어 웹/DB부하 공격을 대역폭 공격과 함께 사용할 경우 공격 식별 및 +대응이 어려워진다. +구분 +대역폭 공격 +자원 소진 공격 +웹/DB 부하 공격 +공격 특성 +Ÿ 높은 bps¹⁾ +Ÿ 높은 pps²⁾ +Ÿ 높은 connection³⁾ +Ÿ 높은 pps +Ÿ 높은 connection +공격 유형 +Ÿ UDP Flooding 및 UDP +기반 반사공격 (DNS, NTP, +CLDAP, SSDP 등) +Ÿ Tsunami syn flooding +Ÿ ICMP Flooding 등 +Ÿ TCP SYN +Ÿ ACK Flooding 등 +Ÿ GET Flooding +Ÿ POST Flooding 등 +피해 대상 +Ÿ 동일 회선을 사용하는 모든 +시스템 접속 불가 +Ÿ 대상 서버, 네트워크 장비 +등의 과부하 발생 +Ÿ 대상 웹/DB서버 과부하 +발생 +Protocol +Ÿ UDP, ICMP, TCP, GRE +Ÿ TCP +Ÿ HTTP, HTTPS +IP 위/변조 여부 +Ÿ 위/변조 가능 +Ÿ 위/변조 가능 +Ÿ 위/변조 불가능(실제 +IP공격) +비고 +Ÿ 일시적으로 대량의 +트래픽을 발생시키기 +때문에 회선 대역폭이 +작으면 방어가 어려움 +Ÿ 대역폭 공격에 비해 적은 +트래픽으로도 서버 +과부하를 유발할 수 있음 +Ÿ 정상적으로 세션을 맺은 후 +과도한 HTTP 요청으로 +웹/DB서버의 과부하를 +유도함 +※ ¹⁾bps(bit per second) : 초당 bit 수를 지칭하는 약어 +※ ²⁾pps(packet per second) : 초당 packet 수를 지칭하는 약어 +※ ³⁾connection : 데이터를 주고 받기 위해 클라이언트와 서버 간에 서로 연결된 상태 + + +![이미지 261-0](images/p0261_img0.png) + + +--- + +| 한국인터넷진흥원 | +262 +2. DDoS 공격 대응 방안 +구분 +종류 +대응 방안 +대역폭 공격 +UDP, ICMP Flooding +① ICMP 패킷 차단 +Ÿ 외부로부터의 +ICMP를 +사용하지 +않는 +환경이라면 +외부로부터 인입되는 ICMP 패킷에 대하여 네트워크 상단의 +라우터혹은 방화벽장비에서 ICMP프로토콜을 원천차단하는 +설정을 적용 +Ÿ ICMP를 사용한다면 임계치 설정을 적용하여 짧은 시간에 +과도하게 많은 ICMP 패킷을 전달하는 IP를 차단하도록 +설정(예시–초당 10개 이상의 ICMP 패킷 인입 시 해당 +IP차단) +② DDoS방어 서비스 이용 +Ÿ ICMP Flooding은 방어 장비가 있어도 기업 네트워크 +회선의 수용가능한 트래픽 양을 초과하면 결국 서비스 장애로 +이어짐 +Ÿ 따라서 ICMP Flooding의 효과적인 차단을 위해서는 +기업네트워크 회선에 공격트래픽이 인입되기 전에 사전 +차단하는 것이 가장 효과적임 +Ÿ 이를위해 +DDoS방어서비스를 +이용한 +대응프로세스를 +준비하여야함 +※ 기업의 네트워크 환경/공급자에 따라서 이용할 수 있는 +DDoS서비스가 다를 수 있으므로 이용가능한 DDoS서비스를 +사전에 검토하여 대응프로세스를 준비하는 것을 권장 +자원 소진 공격 +ACK Flooding +① 임계치 기반 차단 +Ÿ 정해진 임계치 이상으로 유입되는 ACK packet에 대하여 +요청 IP를 확인 후 차단하도록 설정(예: 1개의 IP에서 1초 +동안 1000개 이상의 ACK 패킷을 보낼 경우 해당 IP를 10초 +동안 차단) +② 비정상 TCP Packet 차단 +Ÿ 방화벽의 +stateful +inspection +기능을 +통해, +3-way-handshake를 거치지 않고 발생하는 비정상적인 +ACK Packet에 대해서 차단하도록 설정 +웹/DB 부하 공격 +GET Flooding +① 웹서버에 존재하지 않는 URL을 과다 요청 +Ÿ 서버상태코드 +중 +4xx(잘못된요청)를 +유발시키는 +악성클라이언트를 식별하여 차단 IP로 설정 +Ÿ 임계치 기반 차단 룰을 적용하여 단시간에 대량의 +Request를 보낸 악성 클라이언트를 식별, 차단 + + +![이미지 262-0](images/p0262_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +263 +② 웹서버에 존재하는 URL을 과다요청(Case를 나눴지만 차단 +방식은 동일) +Case 1. 동일한 URL을 대량으로 요청하는 경우 +Ÿ 요청이 많은 URL에 임계치 차단 룰을 적용시키고 임계치를 +초과한 악성 클라이언트 IP를 차단 +Ÿ 클라이언트 요청에 쿠키 값을 추가하여 응답을 보낸 후, 보낸 +쿠키 값을 포함하지 않은 응답은 비정상 사용자로 판단하여 +차단 +Case 2. 다른 URL을 대량으로 요청하는 경우 +Ÿ 클라이언트 요청에 쿠키 값을 추가하여 응답을 보낸 후, 보낸 +쿠키 값을 포함하지 않은 응답은 비정상 사용자로 판단하여 +차단 +Ÿ 클라이언트의 요청에 Javascript를 추가하여 응답을 보낸 +후, 클라이언트에서 실행한 Javascript의 결과값이 서버에서 +보유한 결과값과 다를 경우 비정상 사용자로 판단하여 차단 + + +![이미지 263-0](images/p0263_img0.png) + + +--- + +| 한국인터넷진흥원 | +264 +<참고 제14호> +집적정보통신시설 보호조치 세부기준 +구분 +목표 +항목 +내용 +물리적 +·기술적 +보호조치 +접근제어 +및 +감시 +BMS +Ÿ 리튬배터리 설치시설은 셀의 온도·전압 등 상태를 확인할 수 있는 +전지관리 시스템(이하 BMS)을 갖추고 계측주기를 10초 이내로 +설정하여야 한다. +Ÿ 리튬배터리 설치시설은 BMS 외에 화재징후를 사전탐지할 수 있는 +보조적 시스템을 병행 운용하여야 한다. +구역별 +전원관리 +Ÿ 전력차단 시, 차단구역을 최소화하여 전력공급의 생존성을 확보할 수 +있도록 전력분할관리를 하여야 한다. +전력 이중화 +Ÿ 재난 발생 시에도 서버에 전원공급이 가능하도록 N+1 이상의 예비전력 +이중화 체계를 갖추고 2N 이상의 이중화체계를 갖춘 경우 이중화 +설비(주·예비)는 내화구조 격벽으로 분리된 공간에 설치하여야 한다. +출입통제장치 +Ÿ 주요시설중 중앙감시실, 전산실, 전력감시실, 통신장비실, 방재센터의 +출입구에는 출입자의 신원확인을 통해 개폐되는 잠금장치를 설치한다. +출입기록 +Ÿ 주요시설에 대한 출입기록(모든 출입자의 신원과 방문목적 및 방문일시에 +대한 기록, CCTV녹화, 출입통제장치의 로그기록)을 출입일로부터 2개월 +이상 유지되도록 보관한다. +Ÿ 주요시설이외의 시설에 대한 출입기록(외부 방문자의 신원과 방문목적 및 +방문일시에 대한 기록)을 출입일로부터 1개월 이상 유지되도록 보관한다. +고객 정보시스템 +장비 보호 +Ÿ 전산실내에 보관하여 관리하는 고객의 컴퓨터장비 등 정보시스템 장비는 +잠금장치가 있는 구조물(Rack)에 설치한다. +중앙감시실 +Ÿ 주요시설중 전산실 및 통신장비실에 대하여 각 시설의 기능별 작동상황 및 +사고발생여부를 확인한다. +Ÿ CCTV가 촬영한 영상을 24시간 감시할 수 있는 모니터를 설치한다. +CCTV +Ÿ 주요시설의 출입구와 주요시설중 전산실·통신장비실·배터리실 내부에 +CCTV를 설치한다. +경보 및 비상정지 +장치 +Ÿ 방재센터는 화재감시센서의 작동상황이 실시간으로 파악되도록 하고, +화재발생시에 경보신호를 통해 상황을 알 수 있도록 화재감지센서와 +연동된 경보장치를 설치한다. +Ÿ 방재센터는 중앙감시실과 통합하여 운영할 수 있다. +Ÿ 리튬배터리 긴급상황 발생 시 자동 또는 수동으로 UPS-배터리 연결을 +차단할 수 있는 체계를 운용하여야 한다. 동작시점 등에 대해서는 +「한국전기설비규정」 512.1.4의 2의 ‘가’, ‘나’를 준용한다. +가용성 +전력 및 관련 설비 Ÿ 전력(비상전력을 포함), 축전지설비, 자가발전설비, 수변전설비, UPS에 + + +![이미지 264-0](images/p0264_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +265 +보호 +대한 상황파악 및 제어가 가능하도록 전력감시실을 두되, 중앙감시실과 +통합하여 운영할 수 있다. +무정전전원 +장치(UPS) +Ÿ 전산실내 고객 정보시스템 장비의 3개월간 평균 순간사용전력의 130%에 +해당하는 전력을 최소 15분 이상 공급할 수 있는 UPS를 설치한다. +Ÿ UPS는 재난 등으로 인한 고장 시에도 안정적으로 전원을 공급할 수 +있도록 바이패스 기능을 탑재하여야하며, UPS 별 개별 전원차단이 +가능하여야 한다. 특히, 재난 시 UPS의 전력차단 및 바이패스 전환이 +필요하나 물리적 접근이 불가능한 경우에 대비해 원격으로 전력 차단이 +가능한 UPS 제어시스템을 운용하여야 하며, UPS실이 배터리실과 같은 +층에 위치한 경우에는 원격 바이패스 전환 체계를 운용하여야 한다. +축전지설비 +Ÿ 리튬배터리를 사용하는 축전지실은 UPS(정류기 포함) 1개에 전력을 +공급하는 배터리 용량이 20KWh를 초과하는 경우에는 다른 전기설비와 +분리된 격실에 시설하여야 한다. 다만, 20KWh 미만 시에도 방화포 설치 +등 재난확산 방지를 위한 조치를 실시하여야 한다. +Ÿ 리튬배터리 사용 시 축전지 간 및 축전지와 벽간 적정 이격거리를 +확보하여야 한다. 다만, 랙 사이에 내화구조 격벽설치 또는 UL9540A* +또는 동등이상의 기준에 적합한 배터리의 경우 예외로 할 수 있다. +이격거리에 대해서는「한국전기설비규정」 512.1.6의 ‘다’를 준용한다. +Ÿ 축전지실 내 UPS 연결 전력선 이외 전력선은 포설하여서는 안 된다. 단, +배터리 일체형 서버를 설치·운영하는 서버실의 경우에는 예외로 한다. +자가발전설비 +Ÿ 자가발전설비의 발전용량은 전산실내 고객의 정보시스템 장비 및 +항온항습기와 집적정보통신시설내에 설치된 유도등의 3개월간 평균 +순간사용전력의 130%에 해당하는 전력을 공급할 수 있어야 하고 +추가적인 연료의 보충 없이도 2시간이상 발전할 수 있는 연료 공급 +저장시설이 있어야 한다. +Ÿ 유류탱크는 반드시 방화벽으로 공간을 분리하여야 한다. +수변전설비 +Ÿ 배전반에 단락·지락 및 과전류를 방지할 수 있도록 계전기(Relay)를 +설치하고 누전이 발생하였을 때 이를 차단할 수 있도록 누전차단기 또는 +누전경보기를 설치한다. +Ÿ 수변전설비는 중앙감시실 또는 전력감시실과 연동되어야 한다. +접지시설 +Ÿ 주요시설의 정보시스템 장비 등 각종 전원장비에 대한 접지시설을 한다. +항온항습기 +Ÿ 전산실에 24시간 항온·항습을 유지하기 위하여 온습도 측정이 가능하도록 +항온항습기를 설치한다. +비상조명 및 +유도등 설비 +Ÿ 주요시설에는 기존 조명설비의 작동이 멈추는 경우에 바닥 또는 작업면의 +조도가 최소 10룩스(lux)이상이 유지되도록 비상조명을 설치한다. +Ÿ 집적정보통신시설 전지역에 유도등 및 유도표지를 설치한다. +방호성 +벽면의 구성 +Ÿ 전산실은 천장을 통하여 외부와의 왕래가 불가능하도록 전산실의 벽면과 + + +![이미지 265-0](images/p0265_img0.png) + + +--- + +| 한국인터넷진흥원 | +266 +접한 천장을 차단하는 조치를 한다. +방재성 +유리창문 설비 +Ÿ 주요시설관련 건물내부의 창문은 강화유리를 사용하고 개폐가 되지 +않도록 설치한다. +하중안전성 +Ÿ UPS, 변압기, 배전반, 자가발전설비가 설치된 장소의 바닥은 최소 +500kg/㎡ +이상의 +하중에 +견디도록 +필요한 +조치를 +하되, +적재하중치(장비의 단위면적당 중량과 건축물의 구조를 고려하여 계산한 +하중치에 2.5<안전율>를 곱한 값)가 500kg/㎡을 초과할 경우에는 그 +값에 해당하는 하중에 견디도록 필요한 조치를 하여야 한다. +소방시설 +Ÿ 집적정보통신시설 전 지역에 열감지 또는 연기감지 센서를 설치한다. +Ÿ 배터리 유형 등 각 시설의 특성에 맞는 적정 소화설비를 설치한다. +Ÿ 화재가 발생한 경우 주요시설로 화재가 번지는 것을 방지하기 위하여 +방화문을 설치한다. +Ÿ 리튬배터리를 사용하는 축전지실 내부에 가연성가스로 인해 내부 압력이 +발생하는 경우, 파열 또는 폭발을 방지하기 위한 급속 배기장치를 +설치하여야 한다. +건축자재 +Ÿ 집적정보통신시설의 건물은 화재 및 물리적 충격에 견디기 위해 철골조, +철근 콘크리트를 사용한 건축물이어야 한다. +Ÿ 바닥재, 내벽, 천장 등의 건물 내부에 사용하는 자재는 화재발생시에도 잘 +연소되지 않는 불연재료·준불연재료 또는 난연재료를 사용한다. +Ÿ 건축물의 외벽에는 불연재료 또는 준불연재료를 마감재료로 사용한다. +수해방지 +Ÿ 주요시설의 천장 및 바닥(주요시설이 지하에 위치한 경우에는 벽을 +포함한다)은 수해를 방지하기 위하여 물이 들어갈 수 없도록 +시공(방수시공 등) 하여야 한다. +Ÿ 특히, 주요시설이 지하공간에 있는 경우 침수피해 방지를 위해 예상침수 +높이까지 물막이판 및 배수시설을 병행설치하여야 한다. +관리적 +보호조치 +보호관리 +체계화 +상근경비원 +Ÿ 24시간 경비업무를 수행하는 상근 경비원을 둔다. +전문기술자 +Ÿ 주요시설의 유지·관리를 위하여 시스템관리, 네트워크관리, 전기를 각각 +담당하는 전문인력(관련분야 2년이상 경력자)을 두되, 해당 인력을 +확보하기 어려운 경우에는 외부 전문업체에 해당 업무를 위탁할 수 있다. +관리책임자 +Ÿ 집적정보통신시설내의 모든 보호조치를 계획, 감독, 통제하며 비상시 +재난관리활동을 수행한다. +시설보호계획 및 +업무연속성 계획 +Ÿ 시설보호계획 및 업무연속성계획을 수립하는 때에는 「집적정보 통신시설 +보호조침」 제6조제1항 및 제2항의 규정에 의한 내용이 포함하되, 실제 +재난상황을 가정하여 구체적인 전력 유지체계, 설비운용 방안 등이 반드시 +포함되어야 한다. +Ÿ 시설보호계획 및 업무연속성계획을 주된 사업장에 비치하고 교육하는 등 +소속 직원이 내용을 숙지할 수 있도록 필요한 조치를 한다. + + +![이미지 266-0](images/p0266_img0.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +267 +Ÿ 업무환경의 변화 등으로 인하여 시설보호계획 및 업무연속성계획의 수정· +보완이 필요한 경우에는 지체없이 검토·보완하여야 한다. +Ÿ 모의대응훈련은 실제 재난상황을 반영한 시나리오를 설정하여 분기별 1회 +이상 실시하여야 한다. 또한, 연 1회 이상은 소방·전기 관계기관과 합동 +훈련을 실시하여야 한다. + + +![이미지 267-0](images/p0267_img0.png) + + +--- + +| 한국인터넷진흥원 | +268 +<참고 제15호> +인터넷 전화망과 전산망의 분리 지침 + +## 1. 인터넷 전화망과 전산망의 분리 + +1) 인터넷전화 서비스를 안전하게 제공하기 위해서는 다음과 같이 전화망(음성네트워크)과 전산망(데이터네트워크)을 +분리하여 운영 +2) 물리적으로 분리하는 방법도 가능하지만 경제성 등을 고려할 때 VLAN을 사용하는 방식을 권장 +(예시) VLAN을 이용한 전화망과 전산망의 분리 +① VLAN 구성 방안 +- VLAN을 구성하는 방법에는 ① 포트 기반, ② 장비의 MAC 주소 기반, ③ IP주소 기반, ④ IEEE 802.1Q 등을 +이용하는 방법이 있음 +② VLAN 간 데이터 교환 방안 +- 해당기관에서 전화망과 전산망의 데이터 교환은 기본적으로 금지하여야 하나, 일부 서비스 제공을 위해 데이터 +교환이 필요한 경우, 국정원과 사전 협의 후 3계층 스위치의 ACL이나 방화벽 등의 필터링 대책을 적용하여 +시행 가능 + + +![이미지 268-0](images/p0268_img0.png) + + +![이미지 268-1](images/p0268_img1.png) + + +--- + + +## 04. 부록1. 참고 자료 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +269 + +## 2. 인터넷전화 전용 보안 장비 도입 + +1) 인터넷전화 및 교환장비 대상 해킹·DDoS공격 등을 탐지·차단하기 위해서 인터넷전화 전용 침입차단·탐지시스템 사용 +2) 인터넷전화 트래픽 모니터링 및 보안 장비 관리를 위한 보안 관리시스템 사용 + +## 3. 백업체계 구축 + +1) 이중화 구성 및 UPS 구축 +2) 기존 유선전화 일부회선 유지 + +## 4. 인터넷전화 시스템 보안 관리 + +1) 소프트폰 사용 금지 +2) 무선 네트워크 및 이동 근무자의 인터넷전화 접속 금지 +3 소프트웨어 보안 업데이트 +가. 인터넷전화 단말기 및 교환장비의 펌웨어, 소프트웨어 등을 주기적으로 갱신 +4) 웹기반 원격 관리 보호 +가. 관리자가 원격접속시 암호화 등 원격 채널 보호기술 적용 +5) 사용자 계정관리 +가. 인터넷전화 단말기 및 교환장비에 디폴트 비밀번호는 반드시 변경하고 주기적으로 비밀번호 변경 필요 +6) 인터넷전화 단말기 및 교환장비(IP-PBX 등)에 대한 접근제어 적용 +7) 감사 및 로그 관리 +8) 데이터 백업 및 복구 +9) 보안대책 및 운영계획 수립 +※ 공공기관은 행정기관용 인터넷전화를 도입할 경우 한국정보통신기술협회(TTA) Verified Ver4 이상 보안규격 +인증 제품 도입 +※ 인터넷전화 시스템 구축 관련 구체사항은「국가ㆍ공공기관 인터넷전화 보안가이드라인」(2009.5. 국가정보원) +준수 + + +![이미지 269-0](images/p0269_img0.png) + + +--- + +<서식 제1호> 연간 정보보호 업무 계획··········································································273 +<서식 제2호> 연간 정보보호 업무 심사분석····································································274 +<서식 제3호> 표준 개인정보처리 위탁계약서··································································275 +<서식 제4호> 정보시스템 반입, 반출 신청서···································································278 +<서식 제5호> 정보보호 교육 참가자 명단·······································································279 +<서식 제6호> 단말기 사용 신청서··················································································280 +<서식 제7호> 무선랜 설치 신청서··················································································281 +<서식 제8호> 무선랜 설치 확인서··················································································282 +<서식 제9호> 무선랜 사용 신청서··················································································283 +<서식 제10호> 무선랜 AP 관리대장··············································································284 +<서식 제11호> 무선랜 AP 사용관리대장········································································285 +<서식 제12호> 시스템 조사표·······················································································286 +<서식 제13호> 정보보호시스템 도입 시 확인사항···························································287 +<서식 제14호> 네트워크 장비 도입 시 보안요구사항·······················································288 +<서식 제15호> 정보보호시스템 도입 시 보안요구사항·····················································290 +<서식 제16호> 시스템 운영 전 보안요구사항··································································293 + +### 부록2. 서식 예시 + +Chapter 05 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 + + +![이미지 270-0](images/p0270_img0.png) + + +--- + +<서식 제17호> 비밀관리기록부·····················································································295 +<서식 제18호> 정보통신 침해사고 신고서······································································296 +<서식 제19호> 정보통신 침해사고 결과서······································································297 +<서식 제20호> 보호구역 관리대장·················································································298 +<서식 제21호> 제한구역⦁통제구역 출입자 명부····························································299 +<서식 제22호> 정보보호위원회 회의록···········································································300 +<서식 제23호> 정보보호위원회 의견서···········································································302 +<서식 제24호> 직무기술서····························································································303 +<서식 제25호> 퇴직자 권한회수 및 서약 집행·································································304 +<서식 제26호> 퇴직자 보안 서약서················································································305 +<서식 제27호> 수탁자 대상, 보안 점검표·······································································306 +<서식 제28호> 중요정보 파기 확인서·············································································307 +<서식 제29호> 외부자 보안서약서·················································································308 +<서식 제30호> 자산목록표····························································································309 +<서식 제31호> 휴대용 저장매체(전산장비 포함) 반출⦁입 대장·······································310 +<서식 제32호> 휴대용 저장매체 관리대장 (일반용) ·························································311 +<서식 제33호> 휴대용 저장매체 관리대장 (비밀용) ·························································312 +<서식 제34호> 휴대용 저장매체 점검대장······································································313 +<서식 제35호> 보안교육 설문지 ···················································································314 +<서식 제36호> 보안교육 설문분석도구 (Excel) ······························································316 +<서식 제37호> 정보보호시스템 접근규칙 검토 결과서·····················································317 +<서식 제38호> 침입차단시스템 서비스포트 허용/차단 요청서··········································318 +<서식 제39호> 계정등록(변경⦁삭제)신청서··································································319 +<서식 제40호> 네트워크 변경내용 신청서······································································320 + + + +![이미지 271-0](images/p0271_img0.png) + + +--- + +<서식 제41호> 정보시스템 접근기록 검토결과서····························································322 +<서식 제42호> 암호화키 관리대장(대외비) ·····································································323 +<서식 제43호> 암호화키 복구대장(대외비) ·····································································324 + + + +![이미지 272-0](images/p0272_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +273 +<서식 제1호> +연간 정보보호 업무 계획 +<작성 요령> + +## 1. 활동 목표 + + +## 2. 기본 방침 + + +## 3. 세부 추진계획 + +분야별 +사업명 +세부 추진계획 +주관⦁관련 부서 +비고 +※ 보안성검토 대상여부 표기 + +## 4. 전년도 보안감사·지도방문 시 도출내용과 조치내역 + +도출 내용 +조치내역 +담당부서 +※ 형식위주의 계획수립을 지양하고 소속 및 산하기관의 추진계획을 종합, 자체 설정에 맞게 작성 + + +![이미지 273-0](images/p0273_img0.png) + + +--- + +| 한국인터넷진흥원 | +274 +<서식 제2호> +연간 정보보호 업무 심사분석 + +## 1. 총평 + + +## 2. 주요 성과 및 추진사항 + + +## 3. 세부 사업별 실적 분석 + +추진계획 +추진실적 +문제점 +개선대책 +※ 추진실적은 목표량과 대비하여 성과달성도를 계량화 + +## 4. 부진(미진)사업 + +부진사업 +원인 및 이유 +다음 연도 추진계획 + +## 5. 애로 및 건의사항 + + +## 6. 첨부 (정보통신망 및 정보보호시스템 운용현황 등) + + + +![이미지 274-0](images/p0274_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +275 +<서식 제3호> +표준 개인정보처리 위탁계약서 +OOO(이하 “갑”이라 한다)과 △△△(이하 “을”이라 한다)는 “갑”의 개인정보 처리업무를 “을”에게 위탁함에 +있어 다음과 같은 내용으로 본 업무위탁계약을 체결한다. +제1조 (목적) 이 계약은 “갑”이 개인정보 처리업무를 “을”에게 위탁하고, “을”은 이를 승낙하여 “을”의 책임 아래 +성실하게 업무를 완성하도록 하는데 필요한 사항을 정함을 목적으로 한다. +제2조 (용어의 정의) 본 계약에서 별도로 정의되지 아니한 용어는 개인정보 보호법, 같은 법 시행령, 개인정보의 +안전성 확보조치 기준(개인정보보호위원회 고시), 표준 개인정보 보호지침(개인정보보호위원회 고시) 등에서 +정의된 바에 따른다. +제3조 (위탁업무의 목적 및 범위) “을”은 계약이 정하는 바에 따라 ( ) 목적으로 다음과 같은 +개인정보 처리 업무를 수행한다.1) +1. (위탁하는 개인정보 처리 업무 내용을 기재) +2. (위탁하는 개인정보 처리 업무 내용을 기재) +제4조 (위탁업무 기간) 이 계약서에 의한 개인정보 처리업무의 기간은 다음과 같다. +계약 기간 : 20 년 월 일 ~ 20 년 월 일 +제5조 (재위탁 제한) ① “을”은 “갑”의 동의를 얻은 경우를 제외하고 위탁받은 개인정보 처리 업무를 제3자에게 +재위탁할 수 없다. +② “을”이 “갑”의 동의를 받아 개인정보 처리 업무의 전부 또는 일부를 제3자에게 다시 위탁하는 경우에는 +“갑”에게 재위탁받는 자 및 재위탁 업무의 범위를 알려야 한다. 다만, “을”이 사전에 재위탁의 범위와 재위탁 +받는 자를 정하여 “갑”에게 알리고 동의를 받았을 때에는 그러하지 아니하다. +③ “을”은 이 규정에 따른 재위탁을 문서로 하여야 한다. +④ “을”은 재위탁받는 자의 명칭과 재위탁 업무의 범위를 개인정보 처리방침으로 공개하여야 한다. +제6조 (개인정보의 안전성 확보조치 등) “을”은 개인정보 보호법 제29조, 같은 법 시행령 제30조 및 개인정보의 +1) 각호의 업무 예시 : 고객만족도 조사 업무, 회원가입 및 운영 업무, 사은품 배송을 위한 이름, 주소, 연락처 처리 등 + + +![이미지 275-0](images/p0275_img0.png) + + +--- + +| 한국인터넷진흥원 | +276 +안전성 확보조치 기준(개인정보보호위원회 고시)에 따라 개인정보의 안전성 확보에 필요한 관리적・기술적 및 +물리적 안전조치를 하여야 한다. +제7조 (개인정보의 처리 제한) “을”은 계약 기간 동안은 물론 계약 종료 후에도 위탁업무 수행 목적 범위를 넘어 +개인정보를 이용하거나 이를 제3자에게 제공 또는 누설하여서는 안 된다 +제8조 (수탁자에 대한 관리・감독 등) ① “갑”은 “을”에 대하여 개인정보의 처리 위탁과 관련하여 다음 각 호의 +사항을 관리하도록 요구할 수 있으며, “을”은 특별한 사유가 없는 한 이에 응해야 한다. + +## 1. 개인정보의 처리 현황 + + +## 2. 개인정보의 접근 또는 접속기록 + + +## 3. 개인정보 접근 또는 접속 대상자 + + +## 4. 목적 외 이용・제공 및 재위탁 제한 사항 준수 여부 + + +## 5. 암호화 등 안전성 확보조치 이행 여부 + + +## 6. 그 밖에 개인정보의 보호를 위하여 필요한 사항 + +② “갑”은 “을”에 대하여 제1항 각 호의 사항에 대한 현황을 점검하거나 “을” 또는 제3자에 의한 현황 점검을 +요구할 수 있고, 점검 사항에 대하여 시정을 요구할 수 있다. “을”은 특별한 사유가 없는 한 “갑”의 요구를 +이행해야 한다. +③ “을”이 다음 각 호 중 어느 하나에 해당하는 경우에는 그러한 사정을 “갑”에게 알리고 위탁받은 개인정보의 +처리 업무에 대한 점검 결과를 “갑”에게 [ ]개월의 단위로 정기적으로 보고하는 것으로 위 각 항에 따른 “갑”과 +“을”의 의무 이행에 갈음할 수 있다. “갑”에 대한 “을”의 보고의 시기 등에 대하여는 “갑”과 “을”이 협의하여 정할 +수 있다. + +## 1. 개인정보 보호법 제32조의2에 따른 개인정보 보호 인증(ISMS-P)을 취득하여 주기적으로 점검을 받고 있는 + +경우 + +## 2. 그 외 위 1호에 준하는 경우로서, “갑”과 “을”이 합의하여 개인정보 보호법 제31조 제7항의 개인정보 + +보호책임자 협의회 등에 의한 점검 등을 주기적으로 받고 있는 경우 +④ 제3항의 경우에도 “을”은 “을”의 처리위탁 업무와 관련하여 개인정보 보호법 위반 또는 본 계약 위반의 +사항이 발생한 경우에는 즉시 이를 “갑”에게 통지하여야 하고, “갑”의 지시에 따라야 한다. +제9조 (수탁자에 대한 교육) ① “갑”은 개인정보 보호법 제26조 제4항에 따라 개인정보 처리 업무의 위탁으로 +인하여 정보주체의 개인정보가 분실・도난・유출・변조 또는 훼손되지 아니하도록 “을”을 교육할 수 있으며, “을”은 +이에 응하여야 한다. “을”은 “갑”과 협의하여 “을”의 책임 하에 그의 개인정보 취급자 등에게 교육을 실시할 수 + + +![이미지 276-0](images/p0276_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +277 +있다. +② 제1항에 따른 교육은 집합교육, 온라인 교육 등의 방식 등 교육 목적을 달성할 수 있는 범위 내에서 다양한 +방식으로 진행될 수 있으며, 구체적인 방식에 대하여는 “갑”과 “을”은 별도로 협의하여 정할 수 있다. 다만, +“을”이 자체적으로 또는 제3자인 전문업체를 통해 교육을 실시하는 경우에는 “을”은 교육의 시행 여부 및 결과 +등을 “갑”에게 증빙자료와 함께 보고하여야 하고, “갑”은 보고 내용을 주기적으로 점검할 수 있다. +③ 그 밖에 구체적으로 교육의 시기와 방법 등에 대해서는 “갑”은 “을”과 협의하여 시행한다. +제10조 (정보주체 권리보장) “을”은 정보주체의 개인정보 열람, 정정・삭제, 처리 정지 요청 등에 대응하기 위한 +연락처 등 민원 창구를 마련해야 한다. +제11조 (개인정보의 파기) ① “을”은 계약이 해지되거나 계약 기간이 만료된 경우 위탁업무와 관련하여 보유하고 +있는 개인정보를 개인정보 보호법 시행령 제16조에 따라 즉시 파기하거나 “갑”에게 반환하여야 한다. +② 제1항에 따라 “을”이 개인정보를 파기한 경우에는 지체없이 “갑”에게 그 결과를 통보해야 한다. +제12조 (손해배상) ① “을”이 이 계약에 따른 의무를 위반하여 정보주체 또는 제3자에게 손해가 발생할 경우 +“갑”과 “을”은 공동으로 정보주체 또는 제3자의 손해를 배상하기로 한다. +② 제1항과 관련하여 정보주체 또는 제3자의 손해를 배상한 당사자는 상대방에게 자신의 부담 비율을 초과하는 +부분에 대하여 구상할 수 있다. +본 계약의 내용을 증명하기 위하여 계약서 2부를 작성하고, “위탁자”와 “수탁자”가 서명 또는 날인한 후 각 1부씩 +보관한다. +20 . . . +위탁자(갑) +주 소 : +기관(회사)명 : +대표자 성명 : (인) +수탁자(을) +주 소 : +기관(회사)명 : +대표자 성명 : (인) + + +![이미지 277-0](images/p0277_img0.png) + + +--- + +| 한국인터넷진흥원 | +278 +<서식 제4호> +정보시스템 반입, 반출 신청서 +신청인 +성명 +자산명 +반입/반출 사유 +장비내역 +반입⦁반출 +자산 명 +수량 +용도 +비고 +상기 장비(반입ㆍ반출)를 신청합니다. +년 월 일 +위 신청인 : (인) +위 신청사항을 다음 조건하에 승인합니다. +<허가조건> +1. +2. +년 월 일 +담당자 : (인) +※ 정보통신시스템 및 보조기억매체 반출시 내용삭제 확인 +담당확인 : (인) + + +![이미지 278-0](images/p0278_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +279 +<서식 제5호> +정보보호 교육 참가자 명단 +교육과정명 +교육주관부서 +교육일시 +20 년 월 일 (시간 : ) +참석자 +순번 +부서 +직위 +성명 +서명 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +비고 + + +![이미지 279-0](images/p0279_img0.png) + + +--- + +| 한국인터넷진흥원 | +280 +<서식 제6호> +단말기 사용 신청서 +소속 +신청자 성명 +직위 +전화번호 +신청자 : (인) +담당자 : (인) +사용 단말기 +사용 형태 +□ 스마트폰 □ 태블릿 □ 기타모바일기기( ) +사용 목적 +사용 기한 +비고 +년 월 일 +신청자 : (인) +담당자 승인 : (인) + + +![이미지 280-0](images/p0280_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +281 +<서식 제7호> +무선랜 설치 신청서 +소속 +신청자 성명 +성명 +전화번호 +설치목적 +설치장소 +장비명 +장비일련번호 +사용기간 +장비보안성검토 +업무상 상기 목적에 따라서 무선랜 설치 신청서를 제출합니다. +년 월 일 + +신청인 : (인) + +부서장 : (인) +기 관 장 귀 하 + + +![이미지 281-0](images/p0281_img0.png) + + +--- + +| 한국인터넷진흥원 | +282 +<서식 제8호> +무선랜 설치 확인서 +소속 +신청자 성명 +성명 +전화번호 +설치장소 +장비IP +SSID +물리적 조치 +□ 장비 이동이 불가하도록 고정 +□ 유선 네트워크 케이블 보호조치 +□ 물리적 접근 통제 적용 +기술적 조치 +□ SSID 브로드캐스팅 중지 +□ WPA2이상(256비트 이상) 사용 설정 +□ 미등록 IP, MAC 접근 차단 +□ default password 변경 +□ RADIUS 인증 설정 +상기 본인은 무선랜 운영 절차에 따라서 무선랜을 설치하고, 기술적·물리적 조치를 취하였음을 확인합니다. +년 월 일 + +설치자 : (인) + +부서장 : (인) +기 관 장 귀 하 + + +![이미지 282-0](images/p0282_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +283 +<서식 제9호> +무선랜 사용 신청서 +소속 +신청자 성명 +성명 +전화번호 +사용목적 +접속AP +단말형태 +MAC주소 +사용기간 +업무상 상기 목적에 따라서 무선랜 사용 신청서를 제출합니다. +년 월 일 + +신청인 : (인) + +부서장 : (인) +기 관 장 귀 하 + + +![이미지 283-0](images/p0283_img0.png) + + +--- + +| 한국인터넷진흥원 | +284 +<서식 제10호> +무선랜 AP 관리대장 +설치일자 +신청자 +성명 +신청자 +연락처 +설치목적 +설치자 +성명 +사용기한 +장비현황 +비고 +설치장소 +장비 +일련번호 +IP +SSID + + +![이미지 284-0](images/p0284_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +285 +<서식 제11호> +무선랜 AP 사용관리대장 +신청일자 +신청자 +성명 +신청자 +연락처 +접속 AP +사용기간 +사용목적 +장비현황 +비고 +단말형태 +MAC 주소 + + +![이미지 285-0](images/p0285_img0.png) + + +--- + +| 한국인터넷진흥원 | +286 +<서식 제12호> +시스템 조사표 +사업정보 +사업명 +담당자 +연락처 +도입금액 +영업담당자 +연락처 +유지보수 기간 +라이선스 정책 +설치업체 +설치자 +연락처 +AS연락처 +제품정보 +제품명 +버전 +일련번호 +제조 업체 +(국산/외산) +CPU +메모리 +HDD +IP Address +소프트웨어 정보 +(버전 및 SN) +운영체제 +백업 소프트웨어 +백신 소프트웨어 +보안 OS +DB +기타 소프트웨어 +제품구분 +하드웨어 +소프트웨어 +통신장비 +정보보호 +서버, +스토리지, +백업장비 +OS, WEB/WAS, +미들웨어, DBMS, +모델링툴, 그래픽툴, +메일, 백신, +기타 +라우터, +허브, +스위치, +기타 +보안 장비, +보안SW +서비스 정보 +Hostname( ) +포트 정보 +보안조치 +기본암호 변경 +기본 포트 변경 +웹취약점 제거 +불필요서비스 제고 +SSH( ) +매뉴얼 제공 +운영매뉴얼 +관리자매뉴얼 +재기동 절차서 +기타 + + +![이미지 286-0](images/p0286_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +287 +<서식 제13호> +정보보호시스템 도입 시 확인사항 +항목명 +점검항목 +결과 +인증 여부 +EAL 2 이상 CC인증 획득 여부 +CC 인증을 받지 않은 경우, 국가용 암호제품 또는 별도 지정제품 목록 등재여부 +국가정보원장이 검증한 암호모듈 탑재 여부 +일치성 +인증보고서 또는 운용정책문서와 도입제품 보안기능 일치성 여부 +기술제안요청서(RFP)에서 요구하는 보안기능 구현 여부 +운용환경 +도입기관의 시스템관리자 지정여부 +감사기능 지원 여부 +도입기관 주요업무 및 최대사용자 등에 대한 가용성 보장 여부 +시스템 장애 시 대책 수립 여부 +유지보수 +보안적합성 검증결과 반영 가능 여부 +업체 기술지원 전담조직 운영 여부 +작동중단 등 긴급상황에 대비한 지원절차 마련 여부 +업체의 유지보수 매뉴얼 제공 여부 +관리자 설치ㆍ운영 매뉴얼 제공 여부 +업체의 제품운용교육 제공 여부 +신규취약성에 대한 통보 및 처리절차 마련 +※ 점검결과는 O, X로 표기 + + +![이미지 287-0](images/p0287_img0.png) + + +--- + +| 한국인터넷진흥원 | +288 +<서식 제14호> +네트워크 장비 도입 시 보안요구사항 +대분류 +소항목 +내용 +점검결과 +식별 및 인증 +디폴트 관리자 비밀번호 +강제변경 기능 +Ÿ 제품 출고시 디폴트 관리자 비밀번호 +설정 금지 +Ÿ 디폴트 관리자 비밀번호 설정된 경우 +최초 관리자 접속시 비밀번호 재설정 +요청 +안전한 비밀번호 설정 기능 +Ÿ 최소 9자리 이상, 영문 대/소문자, +숫자, 특수문자 중 3가지 이상 규칙 +조합사용 +인증실패 대응 기능 +Ÿ 설정된 횟수(기본값 5회이하)이상 +인증 실패 시 일정시간(기본값 5분 +이상) 접속 제한 등의 대응 기능 제공 +인증 피드백 보호 기능 +Ÿ 입력한 비밀번호 정보를 화면에서 볼 +수 없도록 마스킹하는 기능 +관리자/사용자 인증 정보의 +안전한 저장 여부 +Ÿ 평문(Base64와 같은 단순 인코딩 +포함) 저장 금지 +Ÿ 제품에 하드코딩 금지 +별도 서버를 통한 사용자 인증기능 +※ 별도 인증서버 연동을 제공하는 경우 +Ÿ IEEE 802.1x지원 +Ÿ RADIUS, TACACS + 서버 등 지원 +정보흐름 통제 +관리자가 설정한 ACL 규칙에 따라 +트래픽을 제어하는 기능 제공 여부 +Ÿ ACL 규칙(MAC, IP, 포트 등)을 통한 +트래픽 제어지원 +Ÿ IEEE +802.1Q +VLAN, +VLAN +Trunking 지원 +보안관리 +SNMP를 이용한 시스템 모니터링 및 +관리기능 제공여부 +Ÿ 초기 +설정은 +SNMP +서비스 +비활성(Disable) 상태 유지 +Ÿ 최신 SNMP 버전(V3) 지원 +Ÿ Private MIB 정보 문서화 제공 +관리콘솔 접속가능 IP제한 기능 +Ÿ IP지정(2개 이하로 제한) +자체시험 +제품 +구동 +시, +정규 +운영동안 +주기적으로 관리자 요청 시 자체 시험을 +실행하는 기능 제공여부 +Ÿ 제품관련 H/W(메모리, 플래시 등) +등의 자체 검사 지원 +Ÿ 제품관련 S/W(커널, 운용프로그램 +등) 등의 자체 검사 지원 + + +![이미지 288-0](images/p0288_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +289 +관리자에게 제품 설정값 및 실행코드의 +무결성을 검사하는 기능 +- +펌웨어 업데이트시 펌웨어 파일의 +안전한 무결성 검증방법 여부 +Ÿ 전자서명 생성/검증 메커니즘 이용 +등 검증기능 여부 +안전한 세션관리 +일정시간 관리자 활동이 없는 경우 세션 +잠금 또는 세션 종료 기능 +Ÿ 기본값 10분 이하 +관리자의 +동시 +원격 +접속세션을 +제한하는 기능 +Ÿ 하나의 관리자 세션 유지 +※ 제품 운영상황 등 단순 모니터링만 +수행하는 경우에는 예외적으로 허용 +관리자 인증정보 재사용 방지대응기능 +* 웹 UI를 제공하는 경우 +Ÿ 타임스탬프 등 대응기능 제공 +접근통제 +다중 +사용자/그룹 +생성 +지원 +및 +사용자/그룹별 접근권한 설정 기능 +Ÿ 사용자별 +이름(ID), +비밀번호, +접근권한 설정 지원 +제품 +모니터링, +설정 +변경/삭제, +엔지니어 진단, 복구모드 등 운영모드의 +안전한 제공 +Ÿ 제품이 제공하는 운영모드 명시 +Ÿ 각 모드 변경시 명시적 인증 확인 +Ÿ 운영모드별 필요한 최소한의 명령만 +사용 허용 +전송데이터 보호 +제품과 원격 연결된 모든 통신수단간 +안전한 암호통신 프로토콜 사용 +Ÿ 관리자 PC에서 원격으로 관리콘솔 +접속시 SSL/TLS, HTTPS, SSH, +IPSEC 등 사용 지원 +Ÿ 제품과 외부 서버와의 원격으로 +연동시 SSL/TLS, HTTPS, SSH, +IPSEC 등 사용 지원 +감사기록 +감사 데이터를 생성하는 기능 +Ÿ 감사의 기능의 시작/종료 +Ÿ 관리자에 +대한 +식별 +및 +인증 +성공/실패 +Ÿ 제품 +설정 +변경내역, +보안기능 +수행내역 +감사데이터에 해당 정보 포함 여부 +Ÿ 사건 발생 일시, 사건 유형 +Ÿ 사전을 발생시킨 주체의 신원(가능한 +경우) +Ÿ 작업 내역 및 결과(성공/실패) +감사증적의 크기가 디스크 용량 초과시 +대응 행동 +Ÿ 오래된 감사 레코드 덮어쓰기 등 대응 +내용 + + +![이미지 289-0](images/p0289_img0.png) + + +--- + +| 한국인터넷진흥원 | +290 +<서식 제15호> +정보보호시스템 도입 시 보안요구사항 +대분류 +보안기능 요구사항 +점검결과 +비고 +감사기록 +감사의 시작/종료, 관리자 또는 사용자에 대한 식별 및 인증 +성공/실패, 제품 설정 변경내역, 보안기능 수행내역 등 감사데이터 +생성 +※ 네트워크 차단기능이 있는 경우 허용 및 차단된 모든 트래픽에 +대한 감사데이터 생성 +감사데이터는 사건 발생일시, 사건유형, 사건을 발생시킨 주체의 +신원(가능 경우), 작업 내역 및 결과(성공/실패)를 상세히 포함 +인가된 관리자가 제품구성요소로부터 생성된 모든 감사데이터를 +검토할 수 있는 기능 제공 +인가된 관리자 또는 인가된 사용자가 AND, OR 등 논리적 +관계기준에 기초하여 감사레코드를 선택적으로 검토 +감사 증적내 저장된 감사레코드에 대해 비인가된 삭제 또는 변경이 +발생하지 않도록 보호 +Ÿ 인가된 관리자라 할지라도 삭제 또는 변경할 수 없도록 삭제·변경 +관련 유저인터페이스(UI)가 제공되지 않아야 함 +Ÿ 감사레코드에 대한 보호대책을 제품의 보안기능으로 완전히 +구현할 수 없는 경우, 운용환경의 지원을 받을 수 있음 +감사 증적의 크기가 지정된 한도를 초과할 경우, 사전 정의한 방식에 +따라 관리자에게 통보 +감사 증적의 포화 시 적절한 방법(예 : 오래된 감사레코드 덮어쓰기 +등)으로 저장 실패에 대응 +주요 사건에 대한 정확한 시각 정보생성을 위해 신뢰된 OS등을 +이용하여 시간 정보를 생성 +식별 및 인증 +잠재적인 보안위반을 탐지한 경우, 인가된 관리자가 설정한 대응(예 +: 경보메시지 발송 등)을 수행 +관리자 또는 사용자 신원을 검증하기 위해 식별 및 인증기능 제공 +관리자 인증 실패가 설정된 횟수(기본값 5회 이하)에 도달하면, +인가된 관리자가 설정한 시간(기본값 5분 이상)동안 식별 및 인증 +기능이 비활성 +비밀번호 등록 시 보안성 기준(영문대문자/영문소문자/숫자/특수 +문자 중 3가지 이상의 규칙조합 및 9자리 이상으로 구성)을 + + +![이미지 290-0](images/p0290_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +291 +만족하는지 검증 +인증이 진행되는 동안 관리자 또는 사용자에게 비밀번호가 마스킹 +(예 : **** 등)되어 보이도록 하여야 함 +식별 및 인증 실패 시, 실패이유에 대한 피드백(예 : ID오류, +비밀번호 오류 등)을 제공하지 않아야 함 +관리자가 제품에 최초 접속 시 제품이 기본적(예 : 설치시 등)으로 +제공하는 ID 및 비밀번호의 변경을 강제화하는 기능 제공 +관리자의 비밀번호가 제품에 하드코딩되거나 평문(단순 인코딩 +포함)으로 저장되지 않아야 함 +인증정보가 재사용되는 것을 방지(타임스탬프 사용 등)하여야 함 +보안관리 +인가된 관리자가 보안기능, 보안정책 및 중요데이터 등을 설정 및 +관리할 수 있는 보안기능 제공 +사전 등록된 IP주소의 관리콘솔(관리자 IP주소 등록은 2개 이하로 +제한)만 제품에 접속할 수 있도록 하여야 함. +전송 데이터 보호 +물리적으로 분리된 제품 구성 요소간 전송데이터 (보안정책, +제어명령, 감사기록 등)에 대한 암호화를 통해 기밀성 및 무결성 +보장 +Ÿ 에이전트와 관리 서버간 전송되는 데이터에 대한 기밀성 및 +무결성 보장을 위해 상호 인증을 수행 +Ÿ 암호모듈 검증제도에서 검증대상으로 지정된 안전한 암호 +알고리즘 사용을 권고 +Ÿ 관제대상 시스템으로부터 로그를 syslog 형태로 수신하는 경우 +본 요구사항은 적용되지 않음. 단, 전송과정에서 로그정보가 +훼손될 수 있으므로 동일 로컬네트워크 내에서만 syslog 사용 등 +보호대책을 마련하여야 함. +관리자의 웹브라우저를 이용한 접속 등 제품과 원격으로 연결된 +모든 통신수단은 안전한 암호통신 프로토콜을 사용 +자체시험 +제품의 정확한 운영을 보장하기 위해 시동 시와 정규 운영동안 +주기적으로 자체 시험을 실행 +인가된 관리자에게 제품의 설정값 및 제품 자체의 무결성을 +검증하는 기능 제공 +안전한 세션관리 +로그인 이후 일정시간(기본값 10분 이하) 동안 동작이 없을 경우 +세션 잠금 또는 세션 종료 기능을 수행 +로그인 이후 다른 단말에서 동일 계정 또는 동일 권한으로 로그인을 +다시 수행하는 경우, 신규 접속을 차단하거나 이전 접속을 종료 +※ 제품 운영상황 등에 대한 모니터링만 수행하는 관리자 계정에 + + +![이미지 291-0](images/p0291_img0.png) + + +--- + +| 한국인터넷진흥원 | +292 +대해서는 중복 로그인 허용 가능 +정보흐름통제 +인가된 관리자에 의해 설정된 규칙에 따라 인입 및 인출 트래픽을 +차단 +Ÿ 정보흐름통제 규칙은 개별 또는 특정 대역의 출발지/목적지 주소 +및 포트 등 다양한 정보에 의해 구성 +Ÿ 3,000개 이상의 차단 규칙 생성·관리(IPS에 한함) +Ÿ 기본적으로 모든 트래픽을 차단한 뒤, 규칙에 따라 특정 +서비스/포트 및 출발지/목적지 주소기반은 화이트리스트 방식이, +시그니처 또는 유해사이트 목록기반은 블랙리스트 방식을 적용을 +권고하나 장애시 모든 트래픽을 통과시킬 수 있는 기능은 +제공되지 않아야 함. +제품 설정 등을 통해 다음의 정보흐름 차단 가능 +Ÿ 외부로부터 들어오는 트래픽 중 내부 IP주소가 출발지인 트래픽 +Ÿ 내부에서 나가는 트래픽 중 외부 IP주소가 출발지인 트래픽 +Ÿ 외부로부터 들어오는 트래픽 중 브로드캐스트 주소가 목적지인 +트래픽 +Ÿ 외부로부터 들어오는 트래픽 중 루프백 주소가 목적지인 트래픽 +Ÿ 외부로부터 들어오는 트래픽 중 비정상적인 패킷 형식을 가지는 +트래픽 + + +![이미지 292-0](images/p0292_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +293 +<서식 제16호> +시스템 운영 전 보안요구사항 +항목명 +운영 점검사항 +점검결과 +비고 +보안정책 설정 +도입기관의 보안정책에 근거하여 제품의 보안기능 정책을 설정 +우회방지 +SSH 터널링을 통해 제품의 차단기능 우회를 방지 +인증서 운영 +제품의 관리 콘솔에 설정된 서버 인증서는 기관에 설치 시 발급된 +유일한 인증서이어야 하며 인증서 공개키는 RSA 2048비트 이상 +또는 그와 동등한 안전성을 보장하는 키 길이 이어야 한다. +인증서 서명 알고리즘 및 해시 알고리즘은 암호모듈 검증제도에서 +명시된 검증대상 암호 알고리즘이어야 한다. +Ÿ 발급자 : 도입기관에서 지정한 신뢰기관 확인 +Ÿ 유효기간 : 유효기간 만료 여부 확인 +Ÿ 주체 : 인증서 발급 대상자 확인 +Ÿ 공개키 : 제품별로 상이한 공개키가 사용되는지 다른 제품 +인증서의 공개키 값과 비교 +Ÿ 공개키 길이 : RSA 2048비트 이상 +Ÿ 해시함수 : SHA 224, SHA 256 등(224비트 이상 출력 +알고리즘) +최신버전 소프트웨어 +설치 +도입제품에서 사용되는 SNMP, OpenSSL, OpenSSH, DBMS +모듈이 최신 버전이 아닌 경우 취약성을 가지고 있을 수 있으므로 +해당 버전을 확인 +Ÿ SNMP V3 사용 +Ÿ 최신 버전의 OpenSSL, OpenSSH 버전 사용 +불필요한 서비스 제거 +제품에 불필요한 서비스가 동작하지 않아야 함. +안전한 업데이트 적용 +업데이트 대상 및 방식을 참조하여 업데이트 정책을 수립 +[업데이트 대상] +Ÿ 공격 패턴 파일, 차단 엔진, 기타 실행파일/설정파일 등 제품 주요 +업데이트 파일 +[업데이트 방식] +Ÿ 온라인 업데이트 : 제품 개발업체 업데이트 서버를 통한 온라인 +업데이트 방식의 경우 업데이트 서버에 대한 인증과 업데이트 +데이터에 대한 기밀성 및 무결성 검증 기능이 제공되어야 함 +Ÿ 오프라인 업데이트 : 제품 개발업체로부터 오프라인 방식으로 + + +![이미지 293-0](images/p0293_img0.png) + + +--- + +| 한국인터넷진흥원 | +294 +업데이트 데이터를 제공받고 업데이트 적용 시 데이터에 대한 +무결성 검증 기능이 제공되어야 함 +[업데이트 관리] +Ÿ 제품이 제공하는 업데이트 방식을 확인하여 업데이트 정책을 +수립하고 적절한 업데이트가 이루어질 수 있도록 하여야 함. +Ÿ 업데이트 시 제품의 주요 엔진을 변경하는 경우 도입된 CC +인증제품에 대한 형상변경을 가져올 수도 있음. 업데이트 정책 +수립 시 업체와 업데이트되는 내용을 협의하여 도입 제품에 +대해 무단 형상변경이 발생하지 않도록 유의하여야 함. +백업 +관리자는 감사기록 유실에 대비하여 감사데이터 저장소의 여유 +공간을 주기적으로 확인하고 감사기록이 소진되지 않도록 감사기록 +백업 등을 수행 +관리자 운영 +관리서버는 인가된 관리자만이 접근 가능한 물리적으로 안전한 +환경에 설치·운영되어야 하며 외부 원격관리를 허용하지 않아야 함. +원격관리는 원칙적으로 금지하나 불가피한 경우 내부망의 지정된 +단말기에서만 접속하도록 통제하여야 함. +관리콘솔에 접근 가능한 관리자 IP주소는 화이트리스트 방식으로 +설정 + + +![이미지 294-0](images/p0294_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +295 +<서식 제17호> +비밀관리기록부 +부처명 :                               보관책임자 : +관 +리 +번 +호 +접수⦁발송 +문 +서 +번 +호 +비 +밀 +등 +급 +형 +태 +건 +명 +사 +본 +번 +호 +예 +고 +문 +보 +존 +기 +관 +보 +관 +장 +소 +처리방법 +확인 +연월일 +발행처 +수신처 +(처리 +담당) +등급 +변경 +파기 +파기 +확인 +근거 +영수 +증 +처리자 +(인) + + +![이미지 295-0](images/p0295_img0.png) + + +--- + +| 한국인터넷진흥원 | +296 +<서식 제18호> +정보통신 침해사고 신고서 +기본정보 +기관명 +부서 +성명 +직위 +전자우편 +연락처 +전화 : +H.P : +FAX : +사고내용 +사고일시 +년 월 일 +피해 IP주소 +시 분 +피해시스템 +운영체제 +□ 윈도우 +□ 유닉스 +□ 네트워크 장비 +상세 버전 정보: +사고유형 +피해범위 +대 +사고내용 +조치내용 +공격자 정보 +피해 현황 +긴급조치 시 사항 +관련 보안제품 운영현황 +그 밖에 사고 관련 내용을 구체적으로 서술 + + +![이미지 296-0](images/p0296_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +297 +<서식 제19호> +정보통신 침해사고 결과서 +기본정보 +기관명 +부서 +성명 +직위 +전자우편 +연락처 +전화 : +H.P : +FAX : +사고내용 +사고일시 +년 월 일 +피해 IP주소 +시 분 +피해시스템 +운영체제 +□ 윈도우 +□ 유닉스 +□ 네트워크 장비 +상세 버전 정보: +사고유형 +피해범위 +대 +사고내용 +조치내용 요약 +사고 원인 +피해 현황 +사고대응 조치사항 +피해복구결과 +기타 + + +![이미지 297-0](images/p0297_img0.png) + + +--- + +| 한국인터넷진흥원 | +298 +<서식 제20호> +보호구역 관리대장 +구분 +장소 +관리부서 +사유 및 기타사항 +설정 연월일 +해제 연원일 + + +![이미지 298-0](images/p0298_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +299 +<서식 제21호> +제한구역⦁통제구역 출입자 명부 +소속 +신분증 번호 +직위 +직급 +성명 +용건 +출입일시 +부터 +까지 + + +![이미지 299-0](images/p0299_img0.png) + + +--- + +| 한국인터넷진흥원 | +300 +<서식 제22호> +정보보호위원회 회의록 +대외비 +원본 +보호기간 : ~로 재분류 (일자 또는 조건) +보존기간 : +사본 +파 기 : ~로 재분류 (일자 또는 조건) +정 보 보 호 위 원 회 회 의 록 ( 갑 ) +◦ 일 시 : +◦ 장 소 : +◦ 참 석 자 : +◦ 안 건 : +◦ 회부기관 : +발언자 +내용 + + +![이미지 300-0](images/p0300_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +301 +정 보 보 호 위 원 회 회 의 록 ( 을 ) +발언자 +내용 + + +![이미지 301-0](images/p0301_img0.png) + + +--- + +| 한국인터넷진흥원 | +302 +<서식 제23호> +정보보호위원회 의견서 +대외비 +원본 +보호기간 : ~로 재분류 (일자 또는 조건) +보존기간 : +사본 +파 기 : ~로 재분류 (일자 또는 조건) +정 보 보 호 위 원 회 의 견 서 +◦ 안 건 : +◦ 위원성명 : +◦ 의견진술내용 : +제목 +내용 + + +![이미지 302-0](images/p0302_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +303 +<서식 제24호> +직무기술서 +직무기술서 +직무코드 +직무명 +보안업무 +직무수행자 +소속 +직책 +인원 +작성 연원일 +직무개요 및 권한 +직무내용 +작성요건 +학력 +경력 +기타사항 + + +![이미지 303-0](images/p0303_img0.png) + + +--- + +| 한국인터넷진흥원 | +304 +<서식 제25호> +퇴직자 권한회수 및 서약 집행 +결 +재 + +## 1. 대상자 + +전소속 +직급 +성명 +비고 + +## 2. 퇴직사유 + + +## 3. 보안교육 실시 + +◦ 일 시 : +◦ 장 소 : +◦ 교 수 자 : +◦ 교육내용 : + +## 4. 보안서약서 징구 : 별첨 + + + +![이미지 304-0](images/p0304_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +305 +<서식 제26호> +퇴직자 보안 서약서 +본인은 20 . .부로 퇴직(전출)함에 있어서 다음 사항을 준수할 것을 엄숙히 서약합니다. + +## 1. 본인은 회사 근무 중 업무와 관련하여 지득한 기밀은 관계 법규 및 내부 규정에 의해 보호되어야 하는 + +기밀임을 인정한다. + +## 2. 본인은 이 기밀을 누설함이 관계 법규 및 내부 규정을 위반하는 행위가 됨을 자각하여 재직 중은 물론 퇴직 + +후에도 지득한 제반 비밀사항을 일체 누설하지 않을 것을 서약한다. + +## 3. 본인이 이 기밀을 누설한 때에는 동기여하를 막론하고 그 결과가 민사상 또는 형사상 책임이 따르는 것임을 + +자인하고 엄중한 처벌을 받을 것을 서약한다. +20 년 월 일 +서 약 자 + +소 속 : +직 급 : +성 명 : +(인) +서약집행관 + +소 속 · 직 위 : +직 급 : +성 명 : +(인) +※ 각 기관 필요에 따라 서식내용 일부변경 활용가능 + + +![이미지 305-0](images/p0305_img0.png) + + +--- + +| 한국인터넷진흥원 | +306 +<서식 제27호> +수탁자 대상, 보안 점검표 + +## 1. 수탁기업명 : + + +## 2. 업무 목적 : + + +## 3. 업무 책임자 이름 : + + +## 4. 점검일자 : + +상기 수탁자는 ◯◯◯◯◯이 별도 요구하지 않는 한 개인정보 위탁업무 종료 시에 아래 점검사항을 확인하고 그 +결과(또는 개선조치 결과 포함)를 해당 업무 책임자의 확인서명을 포함하여 ◯◯◯◯◯의 개인정보보호 +담당자(또는 용역사업담당자)에게 회신(예: FAX, E-mail)하여야 합니다. +상기 점검사항에 대한 보호조치가 확인되었음을 다음과 같이 서약합니다. +구분 +점검항목 +결과 +(Y, N, N/A) +비고 +(N, N/A 사유) +1 +위탁된 업무에 참여하는 인원에 대하여 본 용역 계약 착수 이후 +개인정보보호교육이 이루어졌는가? +(증적 예시: 교육 참석자 명단(참석 서명 포함)표) +2 +위탁된 업무에 참여하는 인원은 보안서약(또는 개인정보보호서약) +이 이루어졌는가? +3 +위탁사로부터 제공받은 개인정보는 수탁업무 목적 범위 내에서 +이용하였는가? +(만약, 목적 범위 초과 사실 또는 제3자 제공 사실이 있다면 +“No”으로 결과 표시하고 그 사유를 기록) +4 +개인정보를 파일 전송하는 경우, 암호화 조치 후 전송하였는가? +(예: 메일 발송 시 개인정보파일(이름, E-mail)에 암호 설정) +5 +위탁자로부터 제공받은 개인정보 중 암호화 대상 정보(예: +계좌번호, 신용카드번호, 외국인등록번호 등)가 있는 경우, 해당 +정보를 보관 시에 암호화 조치하였는가? +(예: PC에 저장 시에 해당 파일에 암호 설정) +6 +위탁업무를 (계약)종료한 경우, 제공받은 개인정보 등은 모두 +파기(예: 종이는 파쇄, 데이터는 완전삭제 등) 조치하였는가? +년 월 일 +책임자 : (인) + + +![이미지 306-0](images/p0306_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +307 +<서식 제28호> +중요정보 파기 확인서 +(위탁업체명) (이하 “당사”라 한다)는 (수탁업체명) (이하 “귀사”라 한다)(으)로부터 위탁 또는 제공받은 아래 +개인정보의 취급 목적을 달성 및 종료함에 따라 아래 사항을 충분히 숙지하고 이를 성실히 준수하였음을 +확인합니다. +대상정보 +위탁 및 제공 목적 +보유 및 이용기간 +파기일 + +## 1. 귀사로부터 위탁 또는 제공받은 개인정보(개인의 성명, 주민등록번호, 주소, 연락처 등의 신상정보, 금융정보, + +서비스 이용 내역, 통화 내역, IP 주소 등 단독 또는 결합에 의해 개인을 식별할 수 있는 부호, 문자, 음성, 영상 등의 +정보를 포함한다)의 취급 목적을 달성 및 종료함에 따라 해당 개인정보 및 업무 수행 과정에서 추가 취득한 +개인정보를 다음의 방법으로 파기하였습니다. +- 종이에 출력 또는 기록한 개인정보는 분쇄기로 분쇄하거나 소각 +- 전자적 장치를 통해 보관하고 있는 정보는 복구할 수 없도록 완전 삭제 +(DB 및 DB 백업, 개인정보취급자 PC 내 보관 파일 등 포함) + +## 2. 귀사로부터 위탁 또는 제공받은 개인정보를 취급하는 과정에서 지득한 개인정보를 침해, 도용, 누설하지 + +않도록 지속적으로 관리하겠습니다. +당사는 위의 사항을 숙지하고 준수하였으며 이후의 관리 의무도 성실히 준수하겠습니다. 만일 이를 위반하였을 +경우 관련 법령에 의한 민·형사상 일체의 책임을 다할 것이며, 이로 인하여 귀사에 손해를 끼친 경우에는 지체 없이 +귀사에 대하여 그 손해를 배상할 것임을 서약합니다. +년 월 일 +회 사 명 : +주 소 : +대 표 자 : (인) +귀중 + + +![이미지 307-0](images/p0307_img0.png) + + +--- + +| 한국인터넷진흥원 | +308 +<서식 제29호> +외부자 보안서약서 +본인은 ◯◯◯◯년 ◯◯월 ◯◯일부로 (정보시스템 개발·구축 포함)과 관련한 업무(개발, +구축, 입찰, 제안서평가, 기타)를 수행함에 있어 다음 사항을 준수할 것을 엄숙히 서약합니다. + +## 1. 나는 ◯◯◯부 ◯◯◯◯◯사업(정보시스템 포함)과 관련된 소관업무가 국가기밀 사항임을 인정하고 제반 + +보안관계규정 및 지침을 성실히 준수한다. + +## 2. 나는 이 기밀을 누설함이 국가이익을 침해할 수도 있음을 인식하고 재직 중은 물론 퇴직 후에도 알게 된 모든 + +기밀사항을 일체 타인에게 누설하지 아니한다. + +## 3. 나는 기밀을 누설한 때에는 아래의 관계법규에 따라 엄중한 처벌을 받을 것을 서약한다. + +가. 전자정부법 제35조(금지행위) 및 제76조(벌칙) +년 월 일 +서 약 자 + + +소 속 : +직 급 : +생 년 월 일 : +직 위 : +성 명 : +(인) +서약집행관 + +소 속 : +직 급 : +생 년 월 일 : +직 위 : +성 명 : +(인) + + +![이미지 308-0](images/p0308_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +309 +<서식 제30호> +자산목록표 +번호 +자산 +유형 +자산 +코드 +자산명 +용도 +운영 +체제 +IP주소 +소유자 +위치 +관리자 +사용자 + + +![이미지 309-0](images/p0309_img0.png) + + +--- + +| 한국인터넷진흥원 | +310 +<서식 제31호> +휴대용 저장매체(전산장비 포함) 반출⦁입 대장 +부서명 : +관리책임자 : : +장비명 +관리번호 +(시리얼번호) +사용자 +용도 +출입 일시 +(입·출 구분) +반출·입시 +조치사항 +확인 +I. +II. +III. +IV. +V. + + +![이미지 310-0](images/p0310_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +311 +<서식 제32호> +휴대용 저장매체 관리대장 (일반용) +부서명 : +관리책임자 : : +NO +관리번호 +(시리얼번호) +매체형태 +등록일자 +취급자 +불용처리일자 +불용처리방법 +(재사용용도) +비고 +VI. +VII. +VIII. +IX. +X. + + + +![이미지 311-0](images/p0311_img0.png) + + +--- + +| 한국인터넷진흥원 | +312 +<서식 제33호> +휴대용 저장매체 관리대장 (비밀용) +부서명 : +관리책임자 : : +NO +관리번호 +(시리얼번호) +등급 +매체형태 +등록일자 +취급자 +불용처리 +일자 +불용처리방법 +(재사용용도) +비고 +(사유) +XI. +XII. +XIII. +XIV. +XV. + + +![이미지 312-0](images/p0312_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +313 +<서식 제34호> +휴대용 저장매체 점검대장 +부서명 : +관리책임자 : 팀장 김유신 +점검일시 +현 보유수량 +이상유무 +점검자 +비고 +(서명) +Ⅱ급 +Ⅲ급 +대외비 +일반 +성명 +서명 +06. 1. 3 +1 +1 +3 +15 +이상무 +차장 홍길동 +홍길동 +김유신 +XVI. +XVII. +XVIII. +XIX. +XX. + + +![이미지 313-0](images/p0313_img0.png) + + +--- + +| 한국인터넷진흥원 | +314 +<서식 제35호> +보안교육 설문지 +보안인식교육 설문지 +본 교육에 참가해주셔서 감사합니다. +본 설문서는 본 교육 내용에 대한 이해도를 측정하고 보안에 대한 인식수준정도를 측정하여 정보통신기반시설의 보다 높은 +보안 수준을 유지하는데 사용되어질 것입니다. 아래 5점 척도 혹은 O,X에 해당되는 부분에 O표 하시기 바랍니다. +과정명 : +교육기간 : +설문내용 + +## 1. 과정평가 + +매우만족 +다소만족 +보통 +다소미흡 +미흡 +1.1 +교육과정 전반에 대한 만족도는 어느 정도 입니까? +5 +4 +3 +2 +1 +1.2 +교육 내용에 대한 이해도는 어느 정도 입니까? +5 +4 +3 +2 +1 +1.3 +업무 연관성(담당업무와 본 교육 내용과의 연관성)은 +어느 정도 입니까? +5 +4 +3 +2 +1 + +## 2. 교육 내용 + +매우만족 +다소만족 +보통 +다소미흡 +미흡 +2.1 +교육이 보안의식 고취하는데 도움이 되었는가? +5 +4 +3 +2 +1 +2.2 +교육 내용은 회사의 상황에 적합하였는가? +5 +4 +3 +2 +1 +2.3 +교육 내용에 대해 사전에 얼마나 잘 알고 있었는가? +5 +4 +3 +2 +1 + +## 3. 본인이 생각하는 정보보호 인식수준 평가 + +매우만족 +다소만족 +보통 +다소미흡 +미흡 +3.1 +본인의 정보보호 인식 수준 정도는? +5 +4 +3 +2 +1 +3.2 +근무 부서(팀)의 정보보호 수준 정도는? +5 +4 +3 +2 +1 +3.3 +회사 전체의 정보보호 수준 정도는? +5 +4 +3 +2 +1 + +## 4. 보안준수 정도 + +[PC 보안] +매우만족 +잘함 +보통 +다소미흡 +미흡 +4.1 +주기적으로 (운영체제) 보안 업데이트를 실시하도록 +설정되어 있는가? +5 +4 +3 +2 +1 +4.2 +자신의 PC에 백신이 설치되어 있고 주기적으로 +업데이트되고 있는가? +5 +4 +3 +2 +1 +4.3 +자신의 PC에 로그인 암호 및 화면보호기(10분)가 +설정되어 있는가? +5 +4 +3 +2 +1 + + +![이미지 314-0](images/p0314_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +315 +4.4 +대외비, 사외비 등을 전자우편으로 보내기 전 암호 +설정을 하는가? +5 +4 +3 +2 +1 +4.5 +대외비, 사외비 등을 휴대저장장치(USB 등), 노트북에 +보관하고 있는가? +5 +4 +3 +2 +1 +[ 사무실 보안 ] +매우만족 +잘함 +보통 +다소미흡 +미흡 +4.6 +퇴근 시 중요문서를 서랍에 보관, 시건(잠금)하는가? +5 +4 +3 +2 +1 +4.7 +잠시 자리를 이동하는 경우 책상 위에 중요문서를 방치해 +둔적이 있는가? +5 +4 +3 +2 +1 +[ 문서 보안 ] +매우만족 +잘함 +보통 +다소미흡 +미흡 +4.8 +중요한 문서 출력 시 잘못 출력된 문서를 +파기(파쇄)하는가? +5 +4 +3 +2 +1 +4.9 +중요한 문서를 회사 밖으로 가져가거나 사본(복사)을 +생성한 적이 있는가? +5 +4 +3 +2 +1 +4.10 +중요한 문서의 출력물을 이면지로 사용했던 적이 있는가? +5 +4 +3 +2 +1 + +## 5. 건의 사항 + +교육 전반에 대한 소감 및 회사 정보보호를 위한 건의사항 등을 적어주시기 바랍니다. +(예 : 교육 내용에 대한 소감, 스스로의 정보보호인식 수준에 대한 생각, 사내 정보보호를 위한 발전 방안 등) + + +![이미지 315-0](images/p0315_img0.png) + + +--- + +| 한국인터넷진흥원 | +316 +<서식 제36호> +보안교육 설문분석도구 (Excel) + + +![이미지 316-0](images/p0316_img0.png) + + +![이미지 316-1](images/p0316_img1.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +317 +<서식 제37호> +정보보호시스템 접근규칙 검토 결과서 +장비명 +(위치) +수량 +점검기간 +정책현황 +(점검전) +작업삭제내역 +정책현황 +(점검후) +정책수 +기한만료 +미사용 +보안위배 +정책수 + + +![이미지 317-0](images/p0317_img0.png) + + +--- + +| 한국인터넷진흥원 | +318 +<서식 제38호> +침입차단시스템 서비스포트 허용/차단 요청서 +※ 기관 요청 시는 결재 생략 가능 + +## 1. 신청자 정보 + +부서명 +Tel +Fax +부서장명 +직책 +연락처 +담당자명 +직책 +연락처 + +## 2. 서비스 신청내용 + +출발지(Source IP) 객체 정보 +IP Address +시스템명(hostname) +시스템 용도 +시스템 위치 +목적지(Destination IP) 객체 정보 +IP Address +시스템명(hostname) +시스템 용도 +시스템 위치 +IP Protocol +포트번호 +차단/허용 +통신방향 +포트 용도 +사용기간 +TCP □ +UDP □ + +차단 □ +허용 □ +단방향 □ +양방향 □ + +영구 □ +년 월 일부터 +년 월 일까지 +TCP □ +UDP □ + +차단 □ +허용 □ +단방향 □ +양방향 □ + +영구 □ +년 월 일부터 +년 월 일까지 +TCP □ +UDP □ + +차단 □ +허용 □ +단방향 □ +양방향 □ + +영구 □ +년 월 일부터 +년 월 일까지 +서비스요청목적(명확히 기술) +상기 요청한 보안정책은 시스템 관리/서비스를 위해 필요한 정책으로, +반드시 요청한 목적으로만 사용하도록 하겠습니다. +20 . . +신 청 자 (인) +결 +재 + + +![이미지 318-0](images/p0318_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +319 +<서식 제39호> +계정등록(변경⦁삭제)신청서 +신청구분 +□ 등록 □ 변경 □ 삭제 +소속 +성명 +ID +사용자 구분 +□ 시스템관리자 +□ 개발자 +□ 시스템운영자 +□ DBMS 관리자 +□ 내부 임직원 +□ 외부업체 직원 +신청내용 +□ 특수권한 여부 +(root 권한 등) +신청근거 +사용기간 (처리기한) +대상시스템 +담당업무 +전자우편주소 +전화번호 +<주 의 사 항> + +## 1. 계정의 관리책임은 본인에게 있음을 명심하고 타인에게 대여하거나 비밀번호를 공유하는 일이 없도록 + +하여야 한다. + +## 2. 계정의 안전한 관리를 위하여 안전한 비밀번호를 사용하며, 분기 1회 이상 주기적으로 변경하여야 한다. 또, + +계정을 생성하거나 권한을 변경한 경우 반드시 1일 이내 최초 접속하여 비밀번호를 변경하여야 한다. +상기 주의 사항을 명확히 인지하고, 조직 내 「계정관리지침」 제◯조제△항에 따라 위와 같이 +사용자계정등록(변경ㆍ삭제)신청서를 제출합니다. +년 월 일 +신청인 (인) +부서장 (인) +기 관 장 귀 하 + + +![이미지 319-0](images/p0319_img0.png) + + +--- + +| 한국인터넷진흥원 | +320 +<서식 제40호> +네트워크 변경내용 신청서 + +## 1. 제품 개요 + +가. 작성자 정보 : 업체명, 작성일, 작성자 등 +도입기관 +개발업체 +작성일 +작성자 +나. 검증제품 : 제품명, 버전, 펌웨어, 해시값 등 +제품명 +버전 +펌웨어 파일명 (해시값) +검증일 +다. 이전 ‘변경승인’에 관련된 내용 +제품명 +버전 +변경승인일 +변경승인내용 + +## 2. 변경 내역 + +가. 변경 전/후 시스템 구성 +제품명 +소프트웨어 +하드웨어 +변경전 +변경후 +변경전 +변경후 + + +![이미지 320-0](images/p0320_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +321 +나. 검증 제품 : 제품명, 버전, 펌웨어, 해시값 등 +변경된 기능 +변경 내용 +다. 변경이 제품 설계에 미치는 영향 +항목 +영향 분석 +라. 변경 부분에 대한 자체시험 테스트 결과 +변경된 기능 +시험내용 +시험 결과 + + +![이미지 321-0](images/p0321_img0.png) + + +--- + +| 한국인터넷진흥원 | +322 +<서식 제41호> +정보시스템 접근기록 검토결과서 +담당자 +정보보안담당관 +점검일 +회차(회) +점검자 +점검세부내용 +자산명 +용도 +점검항목(이상유무, O/X) +특이사항 +(필요시 +별도 첨부) +정책변경 +설정변경 +계정변경 +ACL 로그 +로그기록 +유무 +시간 +동기화 + + +![이미지 322-0](images/p0322_img0.png) + + +--- + + +## 05. 부록2. 서식 예시 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +323 +<서식 제42호> +암호화키 관리대장(대외비) +No +일자 +키사용용도 +암호화키 +부서명/ +사용자명 +사용자 서명 +정보보호담당자 +서명 +1 +키생성 + +#### 2015.10.1 + +데이터A +암호화 +FACA37E0B0C8 +5373DF706E73 +F7C9AF86 +IT보호팀/ +홍길동 +홍길동 +김담당 +키폐기 + +#### 2015.10.7 + +IT보호팀/ +홍길동 +홍길동 +김담당 +2 +키생성 +키폐기 +3 +키생성 +키폐기 +4 +키생성 +키폐기 +5 +키생성 +키폐기 +6 +키생성 +키폐기 +7 +키생성 +키폐기 +8 +키생성 +키폐기 +9 +키생성 +키폐기 +10 +키생성 +키폐기 + + +![이미지 323-0](images/p0323_img0.png) + + +--- + +| 한국인터넷진흥원 | +324 +<서식 제43호> +암호화키 복구대장(대외비) +No +일자 +암호화키 +관리대장 +일련번호 +키복구 사유 +부서명/ +사용자명 +사용자 서명 +정보보호담당자 +서명 +1 + +#### 2015.10.20. + +2 +이순신의 병가로 암호화키 +폐기를 위한 키 복구 +IT보호팀/ +김유신 +김유신 +김담당 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 + + +![이미지 324-0](images/p0324_img0.png) + + +--- + + +## 1. 법규 및 지침············································································································326 + + +## 2. 가이드 및 매뉴얼·····································································································331 + + +### 부록3. 법규 및 가이드 목록 + +Chapter 06 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 + + +![이미지 325-0](images/p0325_img0.png) + + +--- + +| 한국인터넷진흥원 | +326 + +## 1. 법규 및 지침 + +구분 +법규명 +공포번호 +소관부처 +법 +전자정부법 +법률 제19030호 +행정안전부 +시행령 +전자정부법 시행령 +대통령령 +제35172호 +행정안전부 +고시 +행정기관 및 공공기관 정보시스템 구축·운영 지침 +행정안전부고시 +제2025-1호 +행정안전부 +훈령 +국가사이버안전관리규정 +대통령훈령 +제316호 +국가정보원 +지침 +국가 정보보안 기본지침 +국가정보원 +법 +보안업무규정 +대통령령 +제31354호 +국가정보원 +훈령 +보안업무규정 시행규칙 +대통령훈령 +제450호 +국가정보원 +법 +전자금융거래법 +법률 +제19734호 +금융위원회 +시행령 +전자금융거래법 시행령 +대통령령 +제35038호 +금융위원회 +고시 +전자금융감독규정 +금융위원회고시 +제2024-4호 +금융위원회 +세칙 +전자금융감독규정 시행세칙 +금융감독원세칙 +제9999호 +금융감독원 + + +![이미지 326-0](images/p0326_img0.png) + + +--- + + +## 06. 부록3. 법규 및 가이드 목록 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +327 +고시 +금융회사의 정보처리 업무 위탁에 관한 규정 +금융위원회고시 +제2021-9호 +금융위원회 +규준 +금융회사의 정보통신수단 등 전산장비 이용관련 +내부통제 모범 규준 +금융감독원 기타 +금융감독원 +법 +전자상거래 등에서의 소비자보호에 관한 법률 +법률 제20302호 +공정거래위원회 +시행령 +전자상거래 등에서의 소비자보호에 관한 법률 +시행령 +대통령령 +제35257호 +공정거래위원회 +시행규칙 +전자상거래 등에서의 소비자보호에 관한 법률 +시행규칙 +총리령 +제2013호 +공정거래위원회 +법 +여신전문금융업법 +법률 +제19260호 +금융위원회 +시행령 +여신전문금융업법 시행령 +대통령령 +제35064호 +금융위원회 +시행규칙 +여신전문금융업법 시행규칙 +총리령 +제1635호 +금융위원회 +고시 +여신전문금융업감독규정 +금융위원회고시 +제2025-3호 +금융위원회 +세칙 +여신전문금융업감독업무시행세칙 +금융감독원세칙 +제9999호 +금융감독원 +법 +신용정보의 이용 및 보호에 관한 법률 +법률 +제20304호 +금융위원회 +시행령 +신용정보의 이용 및 보호에 관한 법률 시행령 +대통령령 +제35227호 +금융위원회 + + +![이미지 327-0](images/p0327_img0.png) + + +--- + +| 한국인터넷진흥원 | +328 +시행규칙 +신용정보의 이용 및 보호에 관한 법률 시행규칙 +총리령 +제1635호 +금융위원회 +고시 +신용정보업감독규정 +금융위원회고시 +제2025-2호 +금융위원회 +법 +정보통신기반 보호법 +법률 +제20068호 +과학기술정보통신부 +시행령 +정보통신기반 보호법 시행령 +대통령령 +제35196호 +과학기술정보통신부 +시행규칙 +정보통신기반 보호법 시행규칙 +과학기술정보통신부령 +제1호 +과학기술정보통신부 +훈령 +과학기술정보통신부 소관 +주요 정보통신기반시설 보호지침 +과학기술 +정보통신부훈령 +제3호 +과학기술정보통신부 +법 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 +법률 +제20260호 +과학기술정보통신부, +방송통신위원회 +시행령 +정보통신망 이용촉지 및 정보보호 등에 관한 법률 +시행령 +대통령령 +제35172호 +과학기술정보통신부, +방송통신위원회 +시행규칙 +정보통신망 이용촉진 및 정보보호 등에 관한 법률 +시행규칙 +과학기술정보통신부령 +제71호 +과학기술정보통신부, +방송통신위원회 +고시 +집적정보 통신시설 보호지침 +과학기술 +정보통신부고시 +제2024-19호 +과학기술 +정보통신부 +고시 +정보보호조치에 관한 지침 +과학기술 +정보통신부고시 +제 2017-7호 +과학기술 +정보통신부 +법 +의료법 +법률 +제20593호 +보건복지부, +질병관리청 + + +![이미지 328-0](images/p0328_img0.png) + + +--- + + +## 06. 부록3. 법규 및 가이드 목록 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +329 +시행령 +의료법 시행령 +대통령령 +제35382호 +보건복지부, +질병관리청 +시행규칙 +의료법 시행규칙 +보건복지부령 제1096호 +보건복지부, 질병관리청 +법 +개인정보 보호법 +법률 +제19234호 +개인정보보호위원회 +시행령 +개인정보 보호법 시행령 +대통령령 +제35343호 +개인정보보호위원회 +고시 +개인정보의 안전성 확보조치 기준 +개인정보 +보호위원회고시 +제 2023-6호 +개인정보보호위원회 +고시 +표준 개인정보 보호지침 +개인정보 +보호위원회고시 +제2024-1호 +개인정보보호위원회 +법 +위치정보의 보호 및 이용 등에 관한 법률 +법률 +제18517호 +방송통신위원회 +시행령 +위치정보의 보호 및 이용 등에 관한 법률 시행령 +대통령령 +제 34449호 +방송통신위원회 +고시 +위치정보의 관리적‧기술적 보호조치 기준 +방송통신위원회고시 +제2022-11호 +방송통신위원회 +법 +클라우드컴퓨팅 발전 및 이용자 보호에 관한 법률 +법률 +제20732호 +과학기술정보통신부 +시행령 +클라우드컴퓨팅 발전 및 이용자 보호에 관한 법률 +시행령 +대통령령 +제33220호 +과학기술정보통신부 +법 +고등교육법 +법률 +제20662호 +교육부 + + +![이미지 329-0](images/p0329_img0.png) + + +--- + +| 한국인터넷진흥원 | +330 +※ 관련 법규 및 지침은 수시로 개정될 수 있으므로, 법령정보센터(www.law.go.kr) 등을 통해 최신의 +법규 및 지침을 확인할 필요가 있음 +시행령 +고등교육법 시행령 +대통령령 +제35382호 +교육부 +법 +사이버대학 설립·운영 규정 +대통령령 +제34517호 +교육부 +고시 +원격교육 설비 기준 고시 +교육부고시 제2019-213호 +교육부 +법 +소방시설 설치 및 관리에 관한 법률 +법률 +제18522호 +소방청 +시행령 +소방시설 설치 및 관리에 관한 법률 시행령 +대통령령 +제35151호 +소방청 +시행규칙 +소방시설 설치 및 관리에 관한 법률 시행규칙 +행전안전부령 +제524호 +소방청 +법 +건축법 +법률 +제20424호 +국토교통부 +시행령 +건축법 시행령 +대통령령 +제35221호 +국토교통부 +시행규칙 +건축법 시행규칙 +국토교통부령 +제1439호 +국토교통부 +시행규칙 +건축물의 구조기준 등에 관한 규칙 +국토교통부령 제1420호 +국토교통부 + + +![이미지 330-0](images/p0330_img0.png) + + +--- + + +## 06. 부록3. 법규 및 가이드 목록 + +2026 주요정보통신기반시설 관리·물리적 취약점 분석·평가 방법 안내서 +331 + +## 2. 가이드 및 매뉴얼 + +NO +명칭 +발간처 +주요내용 +1 +알기쉬운 무선랜 보안 안내서 +KISA +무선랜 구성요소, 무선 서비스 주요 보안 취약성과 +대응기술, 보안정책, 무선인터넷 서비스 사용자 +보안 권고에 대한 안내 +2 +알기쉬운 공중 무선랜 보안 안내서 +KISA +안전한 공중 무선랜의 구축과 운영, 이용에 대한 +방법 +3 +침해사고 분석 절차 안내서 +KISA +해킹 및 개인정보 침해사고 대응하기 위한 +분석절차 및 기술 제시, 악성코드 분석 및 대응, +악성코드 분석 및 대응절차 +4 +DDoS 공격대응 가이드 +KISA +DDoS공격 발생 시 대응방안 및 대응절차 안내 +5 +개인정보의 +안전성 +확보조치 +기준 +해설서 +KISA +개인정보보호법에 +따른 +안전성 +확보조치 +기준(고시)과 해설 제시 +6 +개인정보 암호화 조치 안내서 +KISA +개인정보 암호화를 위한 조치 안내서 +7 +암호정책 수립 기준 안내서 +KISA +ISMS, ISO/IEC 27001, ISO/IEC 17799에서 +명시하는 요구사항에 적합한 상세 암호정책 수립 +기준을 제시 +8 +개인정보 유출 등 사고 대응 매뉴얼 +KISA +개인정보 유출 등 사고에 대한 신속한 대응과 그 +피해를 최소화하기 위한 사항 안내 +9 +(공공기관/민간분야) +고정형 +영상정보처리기기(CCTV) +설치운영 +가이드라인 +KISA +공공, +민간부문의 +고정형 +영상정보처리기기 +설치·운영 및 개인영상정보 보호에 관한 준수 사항 +기준 제시 +10 +개인정보 영향평가 수행안내서 +KISA +개인정보 영향평가의 목적 및 필요성에 대해 +제시하고 영향평가 절차별 수행방법을 안내 +11 +조직의 정보보호를 위한 자산 관리 지침 +TTA +정보보호 관점에서 보호하여야할 주요 자산의 관리를 +위해 이행하여야할 절차와 방법을 정의하고 절차별 +주요 활동 사항 안내 + + +![이미지 331-0](images/p0331_img0.png) + + +--- + +2026 +주요정보통신기반시설 +관리·물리적 취약점 분석·평가방법 +안내서 + + +![이미지 332-0](images/p0332_img0.png) diff --git "a/\353\254\270\354\204\234/\354\243\274\354\232\224\354\240\225\353\263\264\355\206\265\354\213\240\352\270\260\353\260\230\354\213\234\354\204\244_\352\270\260\354\210\240\354\240\201_\354\267\250\354\225\275\354\240\220_\354\203\201\354\204\270\352\260\200\354\235\264\353\223\234.md" "b/\353\254\270\354\204\234/\354\243\274\354\232\224\354\240\225\353\263\264\355\206\265\354\213\240\352\270\260\353\260\230\354\213\234\354\204\244_\352\270\260\354\210\240\354\240\201_\354\267\250\354\225\275\354\240\220_\354\203\201\354\204\270\352\260\200\354\235\264\353\223\234.md" new file mode 100644 index 0000000..54c68e0 --- /dev/null +++ "b/\353\254\270\354\204\234/\354\243\274\354\232\224\354\240\225\353\263\264\355\206\265\354\213\240\352\270\260\353\260\230\354\213\234\354\204\244_\352\270\260\354\210\240\354\240\201_\354\267\250\354\225\275\354\240\220_\354\203\201\354\204\270\352\260\200\354\235\264\353\223\234.md" @@ -0,0 +1,34095 @@ +# 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드.pdf + +> Converted: 2026-03-27 19:21 + + +--- + +2026 +주요정보통신기반시설 +기술적 취약점 분석·평가방법 +상세가이드 + + +![이미지 1-0](images/p0001_img0.png) + + +--- + +. +Ÿ 본 가이드는 기술적 취약점 분석·평가 항목별 점검 방법의 이해를 돕기 위해 발간된 것으로, 수록된 점검 방법은 +취약점 분석:평가 수행 중 활용할 수 있는 참조의 대상일 뿐, 절대적이지 않습니다. 더욱이 점검 대상의 세부 버전, +패치 내용 등에 따라 점검 방법은 언제든지 변경될 수 있습니다. 따라서 본 가이드에 수록된 내용 이외에도 다양한 +점검 방법을 사용하여 취약점 분석평가를 수행하시기 바랍니다. +Ÿ 본 가이드의 수록된 판단 기준은 일반적으로 통용되는 권고 사항으로, 양호 혹은 취약을 가르는 실제 판단 기준은 각 +주요정보통신기반시설 현업에 적용되고 있는 다양한 정책 및 운용 상황을 고려하여 취약점 분석:평가 수행자가 +최종적으로 결정해야 합니다. 예를 들어 본 가이드에 수록된 판단 기준에 의하여 취약 판단을 받게 되어도 그 위험을 +부담할 수 있는 합당한 보안 조치와 근거를 수반하고 있다면 양호로 판단할 수 있습니다. +Ÿ 본 가이드를 교육기관 등에서 교육 자료로 활용하는 것을 권장하지 않습니다. +Ÿ 본 가이드에 수록된 점검 및 조치 사례는 시스템 유형별로 다음(표. 분야별 점검 대상 테스트 세부 버전) 버전에서 +실증되었습니다. +Ÿ 개선 사항(취약점 개요, 점검 방법, 조치 방법 등)에 대한 의견을 향상 소중히 듣겠습니다. +※ E-mail : ciip@kisa.or.kr +(한국인터넷진흥원) + + +--- + +I. Unix 서버··························································································································7 + +## 1. 계정 관리···············································································································································12 + + +## 2. 파일 및 디렉터리 관리·····························································································································39 + + +## 3. 서비스 관리············································································································································68 + + +## 4. 패치 관리·············································································································································160 + + +## 5. 로그 관리·············································································································································164 + +II. Windows 서버·············································································································172 + +## 1. 계정 관리·············································································································································177 + + +## 2. 서비스 관리··········································································································································196 + + +## 3. 패치 관리·············································································································································233 + + +## 4. 로그 관리·············································································································································235 + + +## 5. 보안 관리·············································································································································241 + +III. 웹 서비스·····················································································································271 + +## 1. 계정 관리·············································································································································274 + + +## 2. 서비스 관리··········································································································································280 + + +## 3. 보안 설정·············································································································································325 + + +## 4. 패치 및 로그 관리·································································································································347 + +CONTENTS + + +![이미지 3-0](images/p0003_img0.png) + + +--- + +IV. 보안 장비·····················································································································353 + +## 1. 계정 관리·············································································································································356 + + +## 2. 접근 관리·············································································································································363 + + +## 3. 패치 관리·············································································································································367 + + +## 4. 로그 관리·············································································································································368 + + +## 5. 기능 관리·············································································································································373 + +Ⅴ. 네트워크 장비··············································································································387 + +## 1. 계정 관리·············································································································································391 + + +## 2. 접근 관리·············································································································································406 + + +## 3. 패치 관리·············································································································································422 + + +## 4. 로그 관리·············································································································································424 + + +## 5. 기능 관리·············································································································································431 + +Ⅵ. 제어시스템···················································································································467 + +## 1. 계정 관리·············································································································································472 + + +## 2. 서비스 관리··········································································································································484 + + +## 3. 패치 관리·············································································································································501 + + +## 4. 네트워크 접근통제································································································································507 + + +## 5. 물리적 접근통제····································································································································519 + + +## 6. 보안위협 탐지·······································································································································522 + + +## 7. 복구 대응·············································································································································525 + + +## 8. 보안 관리·············································································································································539 + + +## 9. 교육 훈련·············································································································································551 + + + +--- + +Ⅶ. PC ······························································································································552 + +## 1. 계정 관리·············································································································································555 + + +## 2. 접근 관리·············································································································································561 + + +## 3. 패치 관리·············································································································································577 + + +## 4. 보안 관리·············································································································································580 + +Ⅷ. DBMS ························································································································593 + +## 1. 계정 관리·············································································································································596 + + +## 2. 접근 관리·············································································································································628 + + +## 3. 옵션 관리·············································································································································646 + + +## 4. 패치 관리·············································································································································663 + +IX. 이동통신······················································································································670 + +## 1. 운영 관리·············································································································································672 + +X. Web Application(웹) ···································································································676 +XI. 가상화 장비··················································································································787 + +## 1. 계정 관리·············································································································································790 + + +## 2. 시스템 서비스 관리·······························································································································812 + + +## 3. 가상 머신 관리······································································································································837 + + +## 4. 가상 네트워크 관리·······························································································································845 + + + + + +--- + +XII. 클라우드·····················································································································851 + +## 1. 계정 관리·············································································································································854 + + +## 2. 권한 관리·············································································································································858 + + +## 3. 가상 리소스 관리···································································································································860 + + +## 4. 운영 관리·············································································································································864 + + + +--- + +Unix 서버 +Chapter 01 + +## 1. 계정 관리··················································································································12 + + +## 2. 파일 및 디렉토리 관리································································································39 + + +## 3. 서비스 관리···············································································································68 + + +## 4. 패치 관리················································································································160 + + +## 5. 로그 관리················································································································164 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 7-0](images/p0007_img0.png) + + +--- + +| 한국인터넷진흥원 | +8 +01 +Unix 서버 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +root 계정 원격 접속 제한 +상 +U-01 +비밀번호 관리정책 설정 +상 +U-02 +계정 잠금 임계값 설정 +상 +U-03 +비밀번호 파일 보호 +상 +U-04 +root 이외의 UID가 ‘0’ 금지 +상 +U-05 +사용자 계정 su 기능 제한 +상 +U-06 +불필요한 계정 제거 +하 +U-07 +관리자 그룹에 최소한의 계정 포함 +중 +U-08 +계정이 존재하지 않는 GID 금지 +하 +U-09 +동일한 UID 금지 +중 +U-10 +사용자 Shell 점검 +하 +U-11 +세션 종료 시간 설정 +하 +U-12 +안전한 비밀번호 암호화 알고리즘 사용 +중 +U-13 + +## 2. 파일 및 디렉토리 관리 + +점검항목 +항목 +중요도 +항목코드 +root 홈, 패스 디렉터리 권한 및 패스 설정 +상 +U-14 +파일 및 디렉터리 소유자 설정 +상 +U-15 +/etc/passwd 파일 소유자 및 권한 설정 +상 +U-16 +시스템 시작 스크립트 권한 설정 +상 +U-17 +/etc/shadow 파일 소유자 및 권한 설정 +상 +U-18 + + +![이미지 8-0](images/p0008_img0.png) + + +![이미지 8-1](images/p0008_img1.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +9 + +## 3. 서비스 관리 + +점검항목 +항목 +중요도 +항목코드 +/etc/hosts 파일 소유자 및 권한 설정 +상 +U-19 +/etc/(x)inetd.conf 파일 소유자 및 권한 설정 +상 +U-20 +/etc/(r)syslog.conf 파일 소유자 및 권한 설정 +상 +U-21 +/etc/services 파일 소유자 및 권한 설정 +상 +U-22 +SUID, SGID, Sticky bit 설정 파일 점검 +상 +U-23 +사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +상 +U-24 +world writable 파일 점검 +상 +U-25 +/dev에 존재하지 않는 device 파일 점검 +상 +U-26 +$HOME/.rhosts, hosts.equiv 사용 금지 +상 +U-27 +접속 IP 및 포트 제한 +상 +U-28 +hosts.lpd 파일 소유자 및 권한 설정 +하 +U-29 +UMASK 설정 관리 +중 +U-30 +홈 디렉토리 소유자 및 권한 설정 +중 +U-31 +홈 디렉토리로 지정한 디렉토리의 존재 관리 +중 +U-32 +숨겨진 파일 및 디렉토리 검색 및 제거 +하 +U-33 +점검항목 +항목 +중요도 +항목코드 +Finger 서비스 비활성화 +상 +U-34 +공유 서비스에 대한 익명 접근 제한 설정 +상 +U-35 +r 계열 서비스 비활성화 +상 +U-36 +crontab 설정파일 권한 설정 미흡 +상 +U-37 +DoS 공격에 취약한 서비스 비활성화 +상 +U-38 +불필요한 NFS 서비스 비활성화 +상 +U-39 +NFS 접근 통제 +상 +U-40 +불필요한 automountd 제거 +상 +U-41 + + +![이미지 9-0](images/p0009_img0.png) + + +--- + +| 한국인터넷진흥원 | +10 + +## 4. 패치 관리 + +점검항목 +항목 +중요도 +항목코드 +주기적 보안 패치 및 벤더 권고사항 적용 +상 +U-64 +점검항목 +항목 +중요도 +항목코드 +불필요한 RPC 서비스 비활성화 +상 +U-42 +NIS, NIS+ 점검 +상 +U-43 +tftp, talk 서비스 비활성화 +상 +U-44 +메일 서비스 버전 점검 +상 +U-45 +일반 사용자의 메일 서비스 실행 방지 +상 +U-46 +스팸 메일 릴레이 제한 +상 +U-47 +expn, vrfy 명령어 제한 +중 +U-48 +DNS 보안 버전 패치 +상 +U-49 +DNS Zone Transfer 설정 +상 +U-50 +DNS 서비스의 취약한 동적 업데이트 설정 금지 +중 +U-51 +Telnet 서비스 비활성화 +중 +U-52 +FTP 서비스 정보 노출 제한 +하 +U-53 +암호화되지 않는 FTP 서비스 비활성화 +중 +U-54 +FTP 계정 Shell 제한 +중 +U-55 +FTP 서비스 접근 제어 설정 +하 +U-56 +Ftpusers 파일 설정 +중 +U-57 +불필요한 SNMP 서비스 구동 점검 +중 +U-58 +안전한 SNMP 버전 사용 +상 +U-59 +SNMP Community String 복잡성 설정 +중 +U-60 +SNMP Access Control 설정 +상 +U-61 +로그인 시 경고 메시지 설정 +하 +U-62 +sudo 명령어 접근 관리 +중 +U-63 + + +![이미지 10-0](images/p0010_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +11 + +## 5. 로그 관리 + +점검항목 +항목 +중요도 +항목코드 +NTP 및 시각 동기화 설정 +중 +U-65 +정책에 따른 시스템 로깅 설정 +중 +U-66 +로그 디렉터리 소유자 및 권한 설정 +중 +U-67 + + +![이미지 11-0](images/p0011_img0.png) + + +--- + +| 한국인터넷진흥원 | +12 +U-01 +(상) +UNIX > 1. 계정 관리 +root 계정 원격 접속 제한 +개요 +점검 내용 +시스템 정책에 root 계정의 원격터미널 접속 차단 설정이 적용 여부 점검 +점검 목적 +관리자 계정 탈취로 인한 시스템 장악을 방지하기 위해 외부 비인가자의 root 계정 접근 시도를 +원천적으로 차단하기 위함 +보안 위협 +root 계정은 운영체제의 모든 기능을 설정 및 변경이 가능하여(프로세스, 커널 변경 등) root 계정을 +탈취하여 외부에서 원격을 이용한 시스템 장악 및 각종 공격으로(무차별 대입 공격, 사전 대입 공격 등) +인한 root 계정 사용 불가 위험이 존재함 +참고 +※ root 계정: 여러 사용자가 사용하는 컴퓨터에서 모든 기능을 관리할 수 있는 총괄 권한을 가진 유일 +한 특별 계정. 유닉스 시스템의 루트(root)는 시스템 관리자인 운용 관리자(Super User)로서 윈도 +우의 Administrator보다 높은 System 계정에 해당하며, 사용자 계정을 생성하거나 소프트웨어를 +설치하고, 환경 및 설정을 변경하거나 시스템의 동작을 감시 및 제어할 수 있음 +※ 무차별 대입 공격(Brute Force Attack): 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 공격 +방법 +※ 사전 대입 공격(Dictionary Attack): 사전에 있는 단어를 입력하여 암호를 알아내거나 암호를 +해독하는 데 사용되는 컴퓨터 공격 방법 +※ tty(terminal-teletype): 서버와 연결된 모니터, 키보드 등을 통해 사용자가 콘솔로 직접 로그인함 +※ pts(pseudo-terminal): 가상터미널을 뜻하며, Telnet, SSH 등을 이용하여 접속함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 원격터미널 서비스를 사용하지 않거나, 사용 시 root 직접 접속을 차단한 경우 +취약 : 원격터미널 서비스 사용 시 root 직접 접속을 허용한 경우 +조치 방법 +원격 접속 시 root 계정으로 접속할 수 없도록 파일 내용 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +[Telnet] +Step 1) /etc/default/login 파일 내에 CONSOLE 설정값 수정 +CONSOLE=/dev/console + + +![이미지 12-0](images/p0012_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +13 +[SSH] +Step 1) /etc/ssh/sshd_config 파일 내의 PermitRootLogin 설정값 수정 +PermitRootLogin No +l LINUX +[Telnet] +Step 1) /etc/pam.d/login 파일 내에 auth required /lib/security/pam_securetty.so 입력 +Step 2) /etc/securetty 파일 내에 pts/ 설정값 주석 처리 및 제거 +#pts/0 +#pts/1 +#pts/2 +Step 3) /etc/pam.d/login 파일 내에 모듈 추가 +auth required /lib/security/pam_securetty.so +※ /etc/securetty 파일 내 pts/x 관련 설정이 존재하는 경우 PAM 모듈 설정과 관계없이 root 계정 접속을 허용하 +므로 반드시 제거 필요 +※ CentOS 8, Ubuntu 20.04 이상부터 /etc/securetty 파일이 존재하지 않으며 기본적으로 Telnet 서비스가 비활성 +화됨 +[SSH] +Step 1) /etc/ssh/sshd_config 파일에 PermitRootLogin 값 수정 +PermitRootLogin No +l AIX +[Telnet] +Step 1) /etc/security/user 파일에 rlogin 설정값 수정 +rlogin = false +[SSH] +Step 1) /etc/ssh/sshd_config 파일에 PermitRootLogin 값 수정 +PermitRootLogin No + + +![이미지 13-0](images/p0013_img0.png) + + +--- + +| 한국인터넷진흥원 | +14 +l HP-UX +[Telnet] +Step 1) etc/securetty 파일 내에 console 값 수정 +console +※ /etc/securetty 파일은 기본적으로 존재하지 않으므로 해당 파일이 존재하지 않는 경우 생성 후 설정할 것 +[SSH] +Step 1) /opt/ssh/etc/sshd_config 파일 내에 PermitRootLogin 값 수정 +PermitRootLogin No + + +![이미지 14-0](images/p0014_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +15 +U-02 +(상) +UNIX > 1. 계정 관리 +비밀번호 관리정책 설정 +개요 +점검 내용 +비밀번호 관리 정책 설정 여부 점검 +점검 목적 +사용자의 비밀번호 복잡성과 주기적 변경을 통해 시스템 보안을 강화하기 위함 +보안 위협 +비밀번호 관련 정책이 설정되지 않을 경우, 비인가자의 각종 공격(무차별 대입 공격, 사전 대입 공격 +등)에 의해 비밀번호가 노출될 위험이 존재함 +참고 +※ 비밀번호 관리 정책: 비밀번호 복잡성 및 길이, 변경 주기 등을 포함한 비밀번호 정책 +※ 비밀번호 복잡성: 비밀번호 설정 시 영문, 숫자, 특수문자를 포함하여 최소 8자리 이상 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 비밀번호 관리 정책이 설정된 경우 +취약 : 비밀번호 관리 정책이 설정되지 않은 경우 +조치 방법 +root 계정을 포함한 사용자 계정의 비밀번호를 영문, 숫자, 특수문자를 포함하여 최소 8자리 이상 및 +최소 사용 기간 1일, 최대 사용 기간 90일, 최근 비밀번호 기억 4회 이상으로 설정 +조치 시 영향 +비밀번호 변경 시 Web, WAS, DB 연동 구간에서 문제가 발생할 수 있으므로 연동 구간에 미칠 수 있는 +영향을 고려하여 적용 필요 +점검 및 조치 사례 +l SOLARIS +Step 1) /etc/default/passwd 파일 내에 비밀번호 설정값 수정 +HISTORY=4 +PASSLENGTH=8 +MINDIGIT=1 +MINUPPER=1 +MINLOWER=1 +MINSPECIAL=1 +WHITESPACE=NO + + +![이미지 15-0](images/p0015_img0.png) + + +--- + +| 한국인터넷진흥원 | +16 +권고값 +기능 +설명 +HISTORY= 10 +이전 비밀번호 기억 개수 +이전 10개의 암호를 기억함 +MINDIFF= 4 +이전 암호와 차이 +이전 암호와 4자 이상 차이 요구 +MINALPHA= 1 +최소 문자 요구 +최소 1자 이상 문자 요구 +MINNONALPHA= 1 +최소 숫자 또는 특수문자 요구 +숫자 또는 특수문자 1자 이상 요구 +MINUPPER= 1 +최소 대문자 요구 +최소 1자 이상 대문자 요구 +MINLOWER= 1 +최소 소문자 요구 +최소 1자 이상 소문자 요구 +MAXREPEATS= 0 +연속 문자 사용 허용 +0일 경우 문자 연속 사용이 불가 +MINSPECIAL= 1 +최소 특수문자 요구 +최소 1자 이상 특수문자 요구 +MINDIGIT= 1 +최소 숫자 요구 +최소 1자 이상 숫자 요구 +NAMECHECK= YES +아이디와 비밀번호 동일 검증 +아이디와 동일한 비밀번호 사용 불가 +MAXDAYS= 90 +비밀번호 최대 유효일 수 +최대 90일 비밀번호가 유효 +MINDAYS= 1 +비밀번호 변경 최소일 수 +비밀번호 최소 1일 후 변경 가능 +MAXWEEKS= 12 +비밀번호 최대 유효 주 수 +최대 12주 비밀번호가 유효 +MINWEEKS= 1 +비밀번호 변경 최소일 수 +비밀번호 최소 일주일 후 변경 가능 +WARNWEEKS= 1 +비밀번호 만료 전 알림 주 수 +비밀번호 만료 일주일 전 알림 +PASSLENGTH= 8 +비밀번호 최소 길이 +비밀번호 최소 길이 8 +WHITESPACE= NO +비밀번호 공백문자 사용 여부 +비밀번호에 공백문자 사용 금지 설정 +※ MINDIGIT, MINSPECIAL 설정이 적용되어 있는 경우 MINNONALPHA 설정은 적용되지 않음 +※ MINDAYS 설정이 적용되어야 MAXDAYS 설정이 적용됨 +※ 비밀번호 유효일 설정과 비밀번호 유효 주 설정은 중복 설정 불가함 +※ WHITESPACE 기본값: YES + + +![이미지 16-0](images/p0016_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +17 +l LINUX +[Redhat] +Step 1) /etc/login.defs 파일에 PASS_MAX_DAYS / PASS_MIN_DAYS 값 수정 +PASS_MAX_DAYS 90 +PASS_MIN_DAYS 0 +Step 2) /etc/security/pwquality.conf 파일에 정책 값 수정 +minlen = 8 +dcredit = -1 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +Step 3) /etc/security/pwhistory.conf 파일에 값 추가 및 수정 +enforce_for_root +remember=4 +file = /etc/security/opasswd +Step 4) /etc/pam.d/system-auth 파일에 값 수정 +Step 5) /etc/login.defs 파일에 PASS_MAX_DAYS / PASS_MIN_DAYS 값 수정 +PASS_MAX_DAYS 90 +PASS_MIN_DAYS 1 +※ pam_pwquality.so, pam_pwhistory.so 모듈은 pam_unix.so 모듈 위에 위치해야 적용됨 +※ /etc/security/pwquality.conf 파일과 /etc/pam.d/system-auth 파일 중 어느 하나라도 비밀번호 관리 정책이 +설정되어 있으면 양호 +※ 비밀번호 복잡성 설정에서 최소 요구 항목의 값은 반드시 -1로 설정되어야 함 +※ /etc/pam.d/system-auth 파일에 enforce_for_root 추가 +[Debian] +Step 1) /etc/security/pwquality.conf 파일에 정책 값 수정 +minlen = 8 +dcredit = -1 + + +![이미지 17-0](images/p0017_img0.png) + + +--- + +| 한국인터넷진흥원 | +18 +ucredit = -1 +lcredit = -1 +ocredit = -1 +enforce_for_root +Step 2) /etc/pam.d/common-password 파일에 정책 값 수정 +pam_pwquality.so, pam_pwhistory.so 모듈은 pam_unix.so 모듈 위에 위치해야 적용됨 +Step 3) /etc/login.defs 파일에 값 수정 +PASS_MAX_DAYS 90 +PASS_MIN_DAYS 1 +권고값 +기능 +설명 +difok = N +기존 비밀번호와 비교 +기존 비밀번호에 포함되지 않는 문자를 최소 N개 이상 +포함하도록 설정 +minlen = 8 +최소 비밀번호 길이 설정 +최소 8자리 이상 설정 +dcredit = -1 +최소 숫자 요구 +최소 숫자 1자 이상 요구 +ucredit = -1 +최소 대문자 요구 +최소 대문자 1자 이상 요구 +lcredit = -1 +최소 소문자 요구 +최소 소문자 1자 이상 요구 +ocredit = -1 +최소 특수문자 요구 +최소 특수문자 1자 이상 요구 +remember = N +최근 비밀번호 기억 +최근 변경한 비밀번호를 N개 이상 기억하여 동일한 +비밀번호로 변경하지 못하도록 설정 +PASS_MIN_DAYS = 1 +비밀번호 최소 사용 기간 설정 +비밀번호 최소 사용 기간 설정 (단위 : 일) +PASS_MAX_DAYS = 90 +비밀번호 최대 사용 기간 설정 +비밀번호 최대 사용 기간 설정 (단위 : 일) +※ /etc/security/pwquality.conf 파일과 /etc/pam.d/common-password(/etc/pam.d/system-auth) 파일 중 어느 +하나라도 비밀번호 관리 정책이 설정되어 있으면 양호 +※ 비밀번호 복잡성 설정에서 최소 요구 항목의 값은 반드시 -1로 설정되어야 함 +※ /etc/pam.d/system-auth 파일에 enforce_for_root 추가 +l AIX +Step 1) etc/security/user 파일에 정책 값 수정 +default : +minage = 1 +maxage = 12 +minalpha = 2 +minother = 2 + + +![이미지 18-0](images/p0018_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +19 +minspecialchar = 1 +minlen = 8 +mindiff = 4 +histsize = 4 +권고값 +기능 +설명 +histexpire= N +동일한 비밀번호 재사용 기간 +비밀번호 재사용에 필요한 시간 (단위 : 주) +histsize= 4 +이전 비밀번호 기억 개수 +허용 비밀번호 반복 횟수 +maxrepeats= 2 +반복 가능한 동일 문자의 최대 수 +비밀번호에서 반복될 수 있는 최대 문자 수 +minalpha= 2 +최소 알파벳 문자 포함 +비밀번호에 필요한 최소 영문자 수 +minother= 2 +최소 알파벳 문자 이외의 문자 수 +비밀번호에 필요한 최소 알파벳을 제외한 문자 수 +minspecialchar= 1 +최소 특수문자 포함 +비밀번호에 필요한 최소 특수문자 수 +mindiff= 4 +이전 비밀번호와 동일 문자 수 +이전 비밀번호와 구별되는 새 비밀번호의 최소 문자 수 +minlen= 8 +비밀번호 최소 길이 +최소 비밀번호 길이 +minage= 1 +비밀번호 최소 사용 기간 +비밀번호 변경에 필요한 최소 기간 (단위 : 주) +maxage= 12 +비밀번호 최대 사용 기간 +비밀번호 변경에 필요한 최대 시간 (단위 : 주) +l HP-UX +Step 1) /etc/default/security 파일에 정책 값 수정 +MIN_PASSWORD_LENGTH=8 +PASSWORD_MIN_UPPER_CASE_CHARS=1 +PASSWORD_MIN_LOWER_CASE_CHARS=1 +PASSWORD_MIN_DIGIT_CASE_CHARS=1 +PASSWORD_MIN_SPECIAL_CASE_CHARS=1 +PASSWORD_MAXDAYS=90 +PASSWORD_MINDAYS=1 +HISTORY=4 +권고값 +기능 +설명 +MIN_PASSWORD_LENG +TH= 8 +비밀번호 최소 길이 +최소 비밀번호 길이 +PASSWORD_MIN_UPPE +R_CASE_CHARS= 1 +최소 대문자 필요 개수 +비밀번호에 필요한 최소 대문자 수 +PASSWORD_MIN_LOWE 최소 소문자 필요 개수 +비밀번호에 필요한 최소 소문자 수 + + +![이미지 19-0](images/p0019_img0.png) + + +--- + +| 한국인터넷진흥원 | +20 +[부적절한 비밀번호 유형] +사전에 나오는 단어나 이들의 조합 +길이가 너무 짧거나 NULL(공백)인 비밀번호 +키보드 자판의 일련의 나열(예시 : abcd, qwert 등) +사용자 계정 정보에서 유추 가능한 단어들(예시 : 지역명, 부서명, 계정명, 사용자 이름 이니셜, root, admin 등) +[비밀번호 관리 방법] +영문, 숫자, 특수문자를 조합하여 계정명과 다른 8자 이상의 비밀번호 설정 + +## 1. 다음 각 항목의 문자 종류 중 2종류 이상을 조합하여 최소 10자리 이상 또는 3종류 이상을 조합하여 최소 8자리 + +이상의 길이로 구성 +가. 영문 대문자(26개) +나. 영문 소문자(26개) +다. 숫자(10개) +라. 특수문자(32개) + +## 2. 시스템마다 다른 비밀번호 사용 + + +## 3. 비밀번호를 기록해 놓는 경우 변형하여 기록 + +권고값 +기능 +설명 +R_CASE_CHARS= 1 +PASSWORD_MIN_DIGIT_ +CHARS= 1 +최소 숫자 필요 개수 +비밀번호에 필요한 최소 숫자 수 +PASSWORD_MIN_SPECI +AL_CHARS= 1 +최소 특수문자 필요 개수 +비밀번호에 필요한 최소 특수문자 수 +PASSWORD_MINDAYS= +1 +비밀번호 최소 사용 기간 +비밀번호 변경에 필요한 최소 기간 (단위 : 일) +PASSWORD_MAXDAYS= +90 +비밀번호 최대 사용 기간 +비밀번호 변경에 필요한 최대 시간 (단위 : 일) +HISTORY= 4 +이전 비밀번호 기억 개수 +허용 비밀번호 반복 횟수 + + +![이미지 20-0](images/p0020_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +21 +U-03 +(상) +UNIX > 1. 계정 관리 +계정 잠금 임계값 설정 +개요 +점검 내용 +사용자 계정 로그인 실패 시 계정 잠금 임계값이 설정 여부 점검 +점검 목적 +계정 탈취 목적의 무차별 대입 공격 시 해당 계정을 잠금으로써 인증 요청에 응답하는 리소스 낭비를 +차단하고 대입 공격으로 인한 비밀번호 노출 공격을 무력화하기 위함 +보안 위협 +계정 잠금 임계값이 설정되어 있지 않을 경우, 비밀번호 탈취 공격(무차별 대입 공격, 사전 대입 공격, +추측 공격 등)의 인증 요청에 대해 설정된 비밀번호가 일치할 때까지 지속적으로 응답하여 해당 계정의 +비밀번호가 유출될 위험이 존재함 +참고 +※ 사용자 로그인 실패 임계값: 시스템에 로그인 시 몇 번의 로그인 실패에 로그인을 차단할 것인지 +결정하는 값 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 계정 잠금 임계값이 10회 이하의 값으로 설정된 경우 +취약 : 계정 잠금 임계값이 설정되어 있지 않거나, 10회 이하의 값으로 설정되지 않은 경우 +조치 방법 +계정 잠금 임계값을 10회 이하로 설정 +조치 시 영향 +Ÿ HP-UX: Trusted Mode로 전환 시 파일 시스템 구조가 변경되어 운영 중인 서비스에 문제가 발생할 +수 있으므로 충분한 테스트를 거친 후 Trusted Mode로의 전환이 필요함 +Ÿ LINUX: /etc/pam.d/system-auth 파일 설정 시 라이브러리(/lib/security/pam_tally.so)가 해당 +경로에 존재하는지 확인 필요 (존재하지 않는 파일의 경로로 설정하는 경우 시스템 로그인에 장애가 +발생할 수 있음) +Ÿ PAM 모듈을 이용하여 설정할 때 해당 순서를 지키지 않을 경우, 로그인 실패 또는 인증 실패 등 +예기치 못한 상황이 발생할 수 있으므로 반드시 순서에 맞게 설정해야 함 +점검 및 조치 사례 +l SOLARIS +[5.9 미만 버전] +Step 1) /etc/default/login 파일에 RETRIES 값 수정 +RETRIES=10 +[5.9 이상 버전] +Step 1) /etc/security/policy.conf 파일에 LOCK_AFTER_RETRIES 값 수정 + + +![이미지 21-0](images/p0021_img0.png) + + +--- + +| 한국인터넷진흥원 | +22 +LOCK_AFTER_RETRIES=YES +UNLOCK_AFTER =2m +옵션 +설명 +RETRIES +로그인 시도 횟수 +LOCK_AFTER_RETRIES +로그인 시도 횟수와 같거나 초과 되면 잠금 여부 +UNLOCK_AFTER +잠금시간 분(m), 시(h), 일(d), w(주) 단위로 설정 가능 + +l LINUX +[Redhat 계열의 pam_tally.so 또는 pam_tally2.so] +Step 1) /etc/pam.d/system-auth 파일에 deny 값 수정 +auth required /lib/security/pam_tally.so 또는 /lib/security/pam_tally2.so deny=10 unlock_time=120 no_magic_root +account required /lib/security/pam_tally.so 또는 /lib/security/pam_tally2.so no_magic_root reset +※ /etc/pam.d/system-auth 파일 수정 시 모듈이 해당 경로에 존재하지 않을 경우, 모든 계정의 로그인이 되지 않 +는 등 예기치 못한 상황이 발생할 수 있으므로 반드시 올바른 경로를 작성해야 함 +[Redhat 계열의 authselect] +Step 1) # authselect enable-feature with-faillock 입력하여 faillock 적용 +# authselect current +Profile ID: sssd +Enabled features: +- with-fingerprint +- with-silent-lastlog +- with-faillock +Step 2) etc/securiy/faillock.conf 파일에 정책 값 수정 +silent +deny = 10 +unlock_time = 120 +[Redhat 계열의 pam_faillock.so] +Step 1) /etc/pam.d/system-auth 파일에 모듈 값 수정 + + +![이미지 22-0](images/p0022_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +23 +auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +Step 2) /etc/pam.d/password-auth 파일에 모듈 값 수정 +auth required pam_faillock.so preauth silent audit deny=10 unlock_time=120 +※ RHEL 8 이상부터 authselect 명령어를 이용하여 설정하는 것을 권장함 +[Debian 계열의 pam_tally.so 또는 pam_tally2.so] +Step 1) /etc/pam.d/common-auth 파일에 모듈 값 수정 +auth required /lib/security/pam_tally.so 또는 /lib/security/pam_tally2.so deny=10 unlock_time=120 +no_magic_root +account required /lib/security/pam_tally.so 또는 /lib/security/pam_tally2.so no_magic_root reset +[Debian 계열의 pam_faillock.so] +Step 1) /etc/pam.d/common-auth 파일에 pam_faillock.so 모듈 값 수정 +[ /etc/pam.d/common-auth ] +Step 2) etc/pam.d/common-account 파일에 pam_faillock.so 모듈 값 수정 +[ /etc/pam.d/common-account ] + + +![이미지 23-0](images/p0023_img0.png) + + +![이미지 23-1](images/p0023_img1.png) + + +![이미지 23-2](images/p0023_img2.png) + + +![이미지 23-3](images/p0023_img3.png) + + +![이미지 23-4](images/p0023_img4.png) + + +--- + +| 한국인터넷진흥원 | +24 +※ /etc/pam.d/* 파일 수정 시 모듈이 해당 경로에 존재하지 않을 경우, 모든 계정의 로그인이 되지 않는 등 +예기치 못한 상황이 발생할 수 있으므로 반드시 올바른 경로를 작성해야 함 +※ no_magic_root, reset 옵션은 pam_faillock.so 모듈에서 기본으로 작동함 +※ audit : 실패한 로그인 시도, 잠금 조치, 계정 차단 등의 이벤트를 로그에 기록하는 옵션 +※ silent : 비밀번호 인증 실패 시 사용자에게 세부적인 오류 메시지를 표시하지 않는 옵션 +l AIX +Step 1) /etc/security/user 파일에 loginretries 값 수정 +loginretries = 3 +l HP-UX +[11.v2 이하 버전] +Step 1) /tcb/files/auth/system/default 파일에 u_maxtries 값 수정 +u_maxtries#3 +※ HP-UX 서버에 계정 잠금 정책 설정을 위해서는 HP-UX 서버가 Trusted Mode로 동작하고 있어야 하므로 +Trusted Mode로 전환 후 잠금 정책 적용 +[11.v3 이상 버전] +Step 1) /etc/default/security 파일에 AUTH_MAXTRIES 값 수정 +AUTH_MAXTRIES=3 +※ Standard 모드와 Shadow 모드만 적용 가능 +옵션 +설명 +no_magic_root +root 계정은 비밀번호 잠금 설정을 적용하지 않음 +deny=N +N회 입력 실패 시 계정 잠금 +unlock_time +계정이 잠긴 경우, 마지막 계정 실패 시간부터 설정된 시간이 지나면 자동으로 계정 +잠금 해제 (단위 : 초) +reset +접속 시도 성공 시 실패한 횟수 초기화 + + +![이미지 24-0](images/p0024_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +25 +U-04 +(상) +UNIX > 1. 계정 관리 +비밀번호 파일 보호 +개요 +점검 내용 +시스템의 사용자 계정(root, 일반 사용자) 정보가 저장된 파일(/etc/passwd, /etc/shadow 등)에 +사용자 계정 비밀번호가 암호화 저장 여부 점검 +점검 목적 +일부 오래된 시스템의 경우 /etc/passwd 파일에 비밀번호가 평문으로 저장되므로 사용자 계정 +비밀번호가 암호화되어 저장되어 있는지 점검하여 비인가자의 비밀번호 파일 접근 시에도 사용자 계정 +비밀번호가 안전하게 관리되고 있는지 확인하기 위함 +보안 위협 +사용자 계정 비밀번호가 저장된 파일이 유출 또는 탈취 시 평문으로 저장된 비밀번호 정보가 노출 위험이 +존재함 +참고 +※ pwconv: 쉐도우 비밀번호 정책 +※ pwunconv: 일반 비밀번호 정책 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 쉐도우 비밀번호를 사용하거나, 비밀번호를 암호화하여 저장하는 경우 +취약 : 쉐도우 비밀번호를 사용하지 않고, 비밀번호를 암호화하여 저장하지 않는 경우 +조치 방법 +비밀번호 암호화 저장·관리 설정 +조치 시 영향 +HP-UX 경우 Trusted Mode로 전환 시 파일 시스템 구조가 변경되어 운영 중인 서비스에 문제가 +발생할 수 있으므로 충분한 테스트를 거친 후 Trusted Mode로의 전환이 필요함 +점검 및 조치 사례 +l SOLARIS, LINUX +Step 1) /etc/passwd 입력 후 파일 내 두 번째 필드가 x 표시되는지 확인 +root:x:0:0:root:/root:/bin/bash +Step 2) # pwconv 명령으로 쉐도우 비밀번호 적용 +※ SOLARIS 11은 pwunconv 명령어가 존재하지 않음 + + +![이미지 25-0](images/p0025_img0.png) + + +--- + +| 한국인터넷진흥원 | +26 +l AIX +Step 1) /etc/security/passwd 파일에 암호화 여부 확인 +※ AIX는 기본적으로 /etc/security/passwd 파일에 비밀번호를 암호화하여 저장·관리함 +l HP-UX +Step 1) /etc/passwd 파일에 암호화 확인 +Step 2) # pwconv 명령으로 쉐도우 비밀번호 적용 +※ HP-UX 서버는 Trusted Mode로 전환할 경우 비밀번호를 암호화하여 /tcb/files/auth 디렉터리에 계정 이니셜 +과 계정 이름에 따라 파일로 저장·관리할 수 있으므로 Trusted Mode인지 확인 후 UnTrusted Mode인 경우 모 +드를 전환함 +※ Trusted mode 전환 방법 : root계정으로 아래 명령어 실행 +# /etc/tsconvert +※ UnTrusted mode 전환 방법 : root계정으로 아래 명령어 실행 +# /etc/tsconvert –r +※ HP-UX 11.11의 경우 Shadow Password Bundle을 설치하여야 /etc/shadow 파일 생성됨 + + +![이미지 26-0](images/p0026_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +27 +U-05 +(상) +UNIX > 1. 계정 관리 +root 이외의 UID가 ‘0’ 금지 +개요 +점검 내용 +사용자 계정 정보가 저장된 파일(/etc/passwd, /etc/shadow 등)에 root(UID=0) 계정과 동일한 +UID를 가진 계정이 존재 여부 점검 +점검 목적 +root 계정과 동일한 UID가 존재하는지 점검하여 root 권한이 일반 사용자 계정이나 비인가자의 접근 +위협에 안전하게 보호되고 있는지 확인하기 위함 +보안 위협 +Ÿ root 계정과 동일한 UID가 설정되어 있는 일반 사용자 계정도 root 권한을 부여받아 관리자가 실행할 +수 있는 모든 작업이 가능한 위험이 존재함(서비스 시작, 중지, 재부팅, root 권한 파일 편집 등) +Ÿ root 계정과 동일한 UID를 사용하므로 사용자 감사 추적 시 어려움 발생 위험이 존재함 +참고 +※ UID(User Identification): 여러 명의 사용자가 동시에 사용하는 시스템에서 사용자가 자신을 +대표하기 위해 쓰는 이름 +※ OS마다 UID 체계가 달라 시스템 계정 및 일반 사용자 계정이 부여받는 값의 범위에 차이가 있으나, +관리자는 공통으로 UID=0을 부여받음 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : root 계정과 동일한 UID를 갖는 계정이 존재하지 않는 경우 +취약 : root 계정과 동일한 UID를 갖는 계정이 존재하는 경우 +조치 방법 +Ÿ UID가 0으로 설정된 계정을 0 이외의 중복되지 않은 UID로 변경 또는 불필요한 계정인 경우 +제거하도록 설정 +Ÿ (사용 중인 계정인 경우 명령어를 통한 조치가 적용되지 않을 수 있으므로 /etc/passwd 파일을 통해 +변경) +조치 시 영향 +해당 계정에 관리자 권한이 필요하지 않으면 일반적으로 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) usermod 명령어를 이용하여 # usermod -u <변경할 UID> <사용자 이름> 명령으로 0 이외의 중복되지 않 +는 UID로 변경 +[ /etc/passwd 파일 구조 ] + + +![이미지 27-0](images/p0027_img0.png) + + +![이미지 27-1](images/p0027_img1.png) + + +--- + +| 한국인터넷진흥원 | +28 +※ “:”(콜론)을 사용하여 필드를 구분함 +※ 세 번째 필드(UID)가 0인 경우 슈퍼 유저 권한을 가지며, 0 이외의 계정은 일반, 시스템 계정으로 볼 수 있음 + + +![이미지 28-0](images/p0028_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +29 +U-06 +(상) +UNIX > 1. 계정 관리 +사용자 계정 su 기능 제한 +개요 +점검 내용 +su 명령어 사용을 허용하는 사용자를 지정한 그룹이 설정 여부 점검 +점검 목적 +su 관련 그룹만 su 명령어 사용 권한이 부여되어 있는지 점검하여 su 그룹에 포함되지 않은 일반 +사용자의 su 명령 사용을 원천적으로 차단하는지 확인하기 위함 +보안 위협 +무분별한 사용자 변경으로 타 사용자 소유의 파일을 변경할 수 있으며 root 계정으로 변경하는 경우 +관리자 권한을 획득할 수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한된 경우 +※ 일반 사용자 계정 없이 root 계정만 사용하는 경우 su 명령어 사용 제한 불필요 +취약 : su 명령어를 모든 사용자가 사용하도록 설정된 경우 +조치 방법 +PAM 모듈 설정 또는 su 명령어 허용 그룹 생성 후 su 명령어 일반 사용자 권한 제거하도록 설정 +조치 시 영향 +그룹에 추가된 계정들은 모든 Session 종료 후 재 로그인 시 su 명령어 사용 가능 +점검 및 조치 사례 +l SOLARIS, AIX, HP-UX +Step 1) /etc/group 파일 내 wheel 그룹 (su 명령어 사용 그룹) 및 그룹 내 구성원 존재 여부 확인 +Step 2) ls –l /usr/bin/su 입력 후 wheel 그룹이 su 명령어를 사용할 수 있는지 설정 여부 확인 +Step 3) wheel group 생성 (wheel 그룹이 존재하지 않는 경우) +# groupadd wheel +su 명령 그룹 변경 +# chgrp wheel /usr/bin/su +su 명령어 권한 변경 +# chmod 4750 /usr/bin/su +wheel 그룹에 su 명령 허용 계정 등록 +# usermod -G wheel +또는 직접 /etc/group 파일을 수정하여 필요한 계정 등록 +wheel:x:10: -> wheel:x:10:root,admin + + +![이미지 29-0](images/p0029_img0.png) + + +--- + +| 한국인터넷진흥원 | +30 +l LINUX +[PAM 모듈 이용 중이지 않을 경우] +Step 1) /etc/group 파일 내 wheel 그룹(su 명령어 사용 그룹) 확인 +Step 2) ls 명령어를 이용하여 # ls -l /usr/bin/su 입력 후 su 명령어 그룹과 권한 확인 +Step 3) wheel group 생성 (wheel 그룹이 존재하지 않는 경우) +# groupadd wheel +su 명령 그룹 변경 +# chgrp wheel /usr/bin/su +su 명령어 권한 변경 +# chmod 4750 /usr/bin/su +wheel 그룹에 su 명령 허용 계정 등록 +# usermod -G wheel +※ /etc/group 파일에서 기본 그룹의 경우 사용자 이름은 생략되며 자동으로 포함됨 +[PAM 모듈 이용 중인 경우] +Step 1) /etc/group 입력 후 wheel 그룹(su 명령어 사용 그룹) 확인 +예시) wheel:x:1002: +Step 2) etc/pam.d/su 파일 내 su 명령어 허용 그룹 확인 +Step 3) usr/bin/su 파일 내 su 명령어 그룹과 권한 확인 +Step 4) /etc/pam.d/su 파일에 모듈 값 수정 +auth +required pam_wheel.so use_uid +또는 +auth +required pam_wheel.so group=wheel + + +![이미지 30-0](images/p0030_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +31 +U-07 +(하) +UNIX > 1. 계정 관리 +불필요한 계정 제거 +개요 +점검 내용 +시스템 계정 중 불필요한 계정(퇴직, 전직, 휴직 등의 이유로 사용하지 않는 계정 및 장기적으로 사용하지 +않는 계정 등)이 존재 여부 점검 +점검 목적 +불필요한 계정이 존재하는지 점검하여 관리되지 않은 계정에 의한 침입에 대비하는지 확인하기 위함 +보안 위협 +로그인이 가능하고 현재 사용하지 않는 불필요한 계정은 사용 중인 계정보다 상대적으로 관리가 +취약하여 공격자의 목표가 되어 계정이 탈취될 수 있는 위험이 존재함(퇴직, 전직, 휴직 등의 사유 발생 +시 즉시 권한을 회수하는 것을 권고함) +참고 +※ 기본 계정: OS나 Package 설치 시 기본적으로 생성되는 계정(lp, uucp, nuucp 등) +※ 불필요한 기본 계정 제거 시 발생할 업무 영향도를 파악한 후 제거 권고 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 불필요한 계정이 존재하지 않는 경우 +취약 : 불필요한 계정이 존재하는 경우 +조치 방법 +시스템에 존재하는 계정 확인 후 불필요한 계정 제거하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[/etc/passwd 파일을 이용하여 점검] +Step 1) /etc/passwd 파일 내 계정을 확인 후 “# userdel <사용자 이름>” 명령으로 불필요한 사용자 계정 제거 +※ AIX 경우 rmuser 명령어 사용 +※ /etc/passwd 파일에서 계정 앞에 #을 삽입하여도 주석으로 처리되지 않으므로 조치 시에는 반드시 계정을 제 +거하도록 권고함 +[log를 이용하여 점검] +Step 1) last 명령어로 불필요한 계정 확인 후 제거 + + +![이미지 31-0](images/p0031_img0.png) + + +--- + +| 한국인터넷진흥원 | +32 +U-08 +(중) +UNIX > 1. 계정 관리 +관리자 그룹에 최소한의 계정 포함 +개요 +점검 내용 +시스템 관리자 그룹에 최소한(root 계정과 시스템 관리에 허용된 계정)의 계정만 존재 여부 점검 +점검 목적 +관리자 그룹에 최소한의 필요 계정만 존재하는지 확인하여 불필요한 권한 남용을 점검하기 위함 +보안 위협 +시스템을 관리하는 root 계정이 속한 그룹은 시스템 운영 파일에 대한 접근 권한이 부여되어 있으므로 +해당 관리자 그룹에 속한 계정이 비인가자에게 유출될 경우, 관리자 권한으로 시스템에 접근하여 +계정정보 유출, 환경설정 파일 및 디렉터리 변조 등의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 관리자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 +취약 : 관리자 그룹에 불필요한 계정이 등록된 경우 +조치 방법 +관리자 그룹에 등록된 계정 확인 후 불필요한 계정 제거하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/group 파일에 root 그룹에 포함된 계정 확인 +Step 2) 불필요한 계정을 그룹원에서 제거 +# gpasswd -d <사용자 이름> root +※ AIX의 경우 chgrpmem -m - <사용자 이름> root 명령어 사용 + + +![이미지 32-0](images/p0032_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +33 +U-09 +(하) +UNIX > 1. 계정 관리 +계정이 존재하지 않는 GID 금지 +개요 +점검 내용 +그룹 설정 파일(/etc/group)에 불필요한 그룹이 존재 여부 점검 +점검 목적 +시스템에 불필요한 그룹이 존재하는지 점검하여 불필요한 그룹의 소유권으로 설정된 파일의 노출로 인해 +발생할 수 있는 위험에 대해 대비를 하기 위함 +보안 위협 +계정이 존재하지 않거나 불필요한 그룹이 존재하는 경우, 해당 그룹의 소유로 설정된 파일을 통한 권한 +남용 또는 의도치 않은 권한 부여, 보안 감사 및 관리의 어려움 등의 위험이 존재함 +참고 +※ GID(Group Identification): 다수의 사용자가 특정 개체를 공유할 수 있게 연계시키는 특정 그룹의 +이름으로 주로 계정처리 목적으로 사용되며, 한 사용자는 여러 개의 GID를 가질 수 있음 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 시스템 관리나 운용에 불필요한 그룹이 제거된 경우 +취약 : 시스템 관리나 운용에 불필요한 그룹이 존재하는 경우 +조치 방법 +불필요한 그룹이 존재하는 경우 관리자와 검토하여 제거하도록 설정 +※ /etc/group 파일과 /etc/passwd 파일을 비교하여 점검하기를 권고함 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/group, /etc/gshadow 파일에 계정이 존재하지 않거나, 불필요한 그룹 확인 +Step 2) 불필요한 그룹 제거 +# groupdel <그룹 이름> +※ 해당 그룹 제거 시 그룹 권한으로 존재하는 파일이 존재하는지 확인이 필요하며, 사용자가 없는 그룹이더라도 +추후 권한 할당을 위해 그룹을 먼저 생성하였을 가능성도 존재하므로 확인 필요 + + +![이미지 33-0](images/p0033_img0.png) + + +--- + +| 한국인터넷진흥원 | +34 +U-10 +(중) +UNIX > 1. 계정 관리 +동일한 UID 금지 +개요 +점검 내용 +/etc/passwd 파일 내 UID가 동일한 사용자 계정 존재 여부 점검 +점검 목적 +UID가 동일한 사용자 계정을 점검함으로써 타 사용자 계정 소유의 파일 및 디렉터리로의 악의적 접근 +예방 및 침해사고 시 명확한 감사 추적을 하기 위함 +보안 위협 +중복된 UID가 존재할 경우, 시스템은 동일한 사용자로 인식하여 소유자의 권한이 중복되어 불필요한 +권한이 부여되며 시스템 로그를 이용한 감사 추적 시 사용자가 구분되지 않는 위험이 존재함 +참고 +※ 비밀번호 파일 수정 변경 및 신규 사용자 추가 시 UID가 동일한 계정이 존재하는지 확인해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 +취약 : 동일한 UID로 설정된 사용자 계정이 존재하는 경우 +조치 방법 +동일한 UID를 가진 사용자 계정의 UID를 중복되지 않도록 변경하도록 설정 +조치 시 영향 +운영 목적으로 동일한 UID 값을 부여하였다면 해당 계정이 사용하고 있는 파일 및 디렉터리를 검토하여 +권한이 제거되어도 서비스 영향이 없는지 확인 필요 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/passwd 파일에 동일한 UID가 존재하는지 확인 +Step 2) 명령으로 중복된 UID로 변경 +# usermod -u <변경할 UID> <사용자 이름> +※ AIX의 경우 chuser id=<변경할 UID> <사용자 이름> 명령어 사용 + + +![이미지 34-0](images/p0034_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +35 +U-11 +(하) +UNIX > 1. 계정 관리 +사용자 shell 점검 +개요 +점검 내용 +로그인이 불필요한 계정(adm, sys, daemon 등)에 쉘 부여 여부 점검 +점검 목적 +로그인이 불필요한 계정에 부여된 쉘을 제거하여, 로그인이 필요하지 않은 계정을 통한 시스템 명령어를 +실행하지 못하게 하기 위함 +보안 위협 +로그인이 불필요한 계정에 쉘이 부여될 경우, 비인가자가 해당 기본 계정으로 시스템에 접근 위험이 존재함 +참고 +※ 쉘(Shell): 대화형 사용자 인터페이스로써, 운영체제(OS) 가장 외곽계층에 존재하여 사용자의 +명령어를 이해하고 실행함 +※ /bin/false: 시스템 접근을 항상 실패로 처리해 로그인을 차단하고, 사용자에게 메시지를 출력하지 +않으며, 서비스 계정의 직접 접근 차단에 사용됨 +※ /sbin/nologin: 로그인 시 “This account is currently not available” 메시지를 출력하며 접근을 +차단하고, FTP와 같은 일부 서비스의 접근은 허용됨 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 로그인이 필요하지 않은 계정에 /bin/false(/sbin/nologin) 쉘이 부여된 경우 +취약 : 로그인이 필요하지 않은 계정에 /bin/false(/sbin/nologin) 쉘이 부여되지 않은 경우 +조치 방법 +로그인이 필요하지 않은 계정에 대해 /bin/false(/sbin/nologin) 쉘 부여 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/passwd 파일을 참고하여 로그인이 불필요한 계정에 /bin/false(/sbin/nologin) 쉘 부여 여부 확인 +# cat /etc/passwd | grep –E “^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator|^ +games|^gopher” | grep -v admin +Step 2) 로그인이 불필요한 계정에 /bin/false 또는 /sbin/nologin 쉘 부여 +# usermod -s /bin/false <계정명> +# usermod –s /sbin/nologin <계정명> +로그인이 불필요한 계정 목록 +deamon, bin, sys, adm, listen, nobody, nobody4, noaccess, diag, operator, games, gopher + + +![이미지 35-0](images/p0035_img0.png) + + +--- + +| 한국인터넷진흥원 | +36 +U-12 +(하) +UNIX > 1. 계정 관리 +세션 종료 시간 설정 +개요 +점검 내용 +사용자 쉘에 대한 환경설정 파일에서 Session Timeout 설정 여부 점검 +점검 목적 +사용자의 고의 또는 실수로 시스템에 계정이 접속된 상태로 방치됨을 차단하기 위함 +보안 위협 +Session timeout 값이 설정되지 않을 경우, 유휴 시간 내 비인가자가 시스템에 접근하여 불필요한 내부 +정보를 노출할 위험이 존재함 +참고 +※ Session: 프로세스들 사이에 통신을 수행하기 위해서 메시지 교환을 통해 서로를 인식한 이후부터 +통신을 마칠 때까지의 시간 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : Session Timeout이 600초(10분) 이하로 설정된 경우 +취약 : Session Timeout이 600초(10분) 이하로 설정되지 않은 경우 +조치 방법 +600초(10분) 동안 입력이 없는 경우 접속된 Session을 끊도록 설정 +조치 시 영향 +모니터링 용도일 경우 세션 타임 설정 시 모니터링 업무가 불가할 수 있으므로 예외 처리 필요 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[sh, ksh, bash] +Step 1) /etc/profile 파일 내 TMOUT 값 설정 +TMOUT=600 +export TMOUT +[csh] +Step 1) /etc/csh.cshrc 또는 /etc/csh.login 파일 내 autologout 값 설정 +set autologout=10 + + +![이미지 36-0](images/p0036_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +37 +U-13 +(중) +UNIX > 1. 계정 관리 +안전한 비밀번호 암호화 알고리즘 사용 +개요 +점검 내용 +안전한 비밀번호 암호화 알고리즘을 사용 여부 점검 +점검 목적 +안전한 비밀번호 암호화 알고리즘을 사용하여 사용자 계정정보를 보호하기 위함 +보안 위협 +취약한 비밀번호 암호화 알고리즘을 사용할 경우, 노출된 계정에 대해 비인가자가 암호 복호화 공격을 +통해 비밀번호를 획득할 위험이 존재함 +참고 +※ 비밀번호 암호화 알고리즘 저장 방식을 바꾸어도 passwd 명령을 이용하여 재설정해야 변경된 +비밀번호 암호화 알고리즘이 적용되므로 취약한 비밀번호 암호화 알고리즘을 사용하고 있는 모든 +계정 비밀번호 재설정 필요 +※ 비밀번호 암호화 알고리즘: $1 : MD5 / $2 : Blowfish / $5 : SHA-256 / $6 : SHA-512 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : SHA-2 이상의 안전한 비밀번호 암호화 알고리즘을 사용하는 경우 +취약 : 취약한 비밀번호 암호화 알고리즘을 사용하는 경우 +조치 방법 +SHA-2 이상의 안전한 비밀번호 암호화 알고리즘 적용 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) /etc/passwd 파일 내 암호화 필드 값 확인 +Step 2) /etc/security/policy.conf 파일 내 CRYPT_DEFAULT 값 설정 +CRYPT_DEFAULT = 5 또는 6 +※ CRYPT_DEFAULT = 5: SHA-256 / 6 : SHA-512 +l LINUX +[Redhat] +Step 1) /etc/shadow(또는 /etc/passwd) 파일 내 암호화 필드 값 확인 +Step 2) /etc/login.defs 파일 내 ENCRYPT_METHOD 값 설정 +ENCRYPT_METHOD + + +![이미지 37-0](images/p0037_img0.png) + + +--- + +| 한국인터넷진흥원 | +38 +Step 3) /etc/pam.d/system-auth 파일 내 안전한 알고리즘 설정 +password sufficient pam_unix.so +[Debian] +Step 1) /etc/shadow(또는 /etc/passwd) 파일 내의 암호화 필드 값 확인 +Step 2) /etc/login.defs 파일 내 ENCRYPT_METHOD 값 설정 +ENCRYPT_METHOD +Step 3) /etc/pam.d/common-password 파일 내 안전한 알고리즘 설정 +password[success=2 default=ignore] pam_unix.so +l AIX +Step 1) /etc/security/passwd 파일 내 비밀번호 암호화 알고리즘 확인 +password = {<암호화 알고리즘>}<해시값> +Step 2) 안전한 암호화 알고리즘 설정 +# chsec -f /etc/security/login.cfg –s usw –a pwd_algorithm= +※ /etc/security/pwdalg.cfg 파일을 참조하여 OS에서 정의된 암호화 알고리즘 확인 가능 +l HP-UX +Step 1) /etc/shadow 파일 내의 암호화 필드 값 확인 +Step 2) /etc/default/security 파일 내 CRYPT_DEFAULT 값 설정 +CRYPT_DEFAULT = 5 또는 6 +※ HP-UX 11i v2 이상이며, PHI 및 shadow password를 사용하지 않는 경우 취약 +※ CRYPT_DEFAULT = 5: SHA-256 / 6 : SHA-512 + + +![이미지 38-0](images/p0038_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +39 +U-14 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +root 홈, 패스 디렉터리 권한 및 패스 설정 +개요 +점검 내용 +root 계정의 PATH 환경변수에 “.”(마침표)이 포함 여부 점검 +점검 목적 +비인가자가 불법적으로 생성한 디렉터리 및 명령어를 우선으로 실행되지 않도록 설정하기 위함 +보안 위협 +root 계정의 PATH 환경변수에 정상적인 관리자 명령어(ls, mv, cp 등)의 디렉터리 경로보다 현재 +디렉터리를 지칭하는 “.” 표시가 우선하면 현재 디렉터리에 변조된 명령어를 삽입하여 관리자 명령어 +입력 시 악의적인 기능이 실행될 수 있는 위험이 존재함 +참고 +※ 환경변수: 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 집합으로 PATH +환경변수는 실행 파일을 찾는 경로에 대한 변수를 뜻함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되지 않은 경우 +취약 : PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함된 경우 +조치 방법 +root 계정의 환경설정 파일(/.profile, /.bashrc 등)과 시스템 환경설정 파일(/etc/profile 등)에 설정된 +PATH 환경변수에서 현재 디렉터리를 나타내는 “.”을 PATH 환경변수의 마지막으로 이동하도록 설정 +※ /etc/profile 파일, root 계정, 일반 사용자 계정의 환경설정 파일을 순차적으로 검색하여 확인 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) PATH 환경변수 확인 +# echo $PATH +Step 2) 환경설정 파일 내 PATH 변숫값 수정 +PATH=$PATH:$HOME/bin:<상대 경로> 또는 상대 경로 삭제 +Shell 종류별 환경설정 파일 +Bourne Shell(sh) +/etc/profile, $HOME/.profile +C Shell(csh) +/etc/csh.cshrc, /etc/csh.login, $HOME/.cshrc, $HOME/.login +Korn Shell(ksh) +/etc/profile, $HOME/.profile, $HOME/.kshrc +Bash Shell(bash) +/etc/profile, $HOME/.bash_profile, $HOME/.bashrc, /etc/bash.bashrc + + +![이미지 39-0](images/p0039_img0.png) + + +--- + +| 한국인터넷진흥원 | +40 +U-15 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +파일 및 디렉터리 소유자 설정 +개요 +점검 내용 +소유자가 존재하지 않는 파일 및 디렉터리의 존재 여부 점검 +점검 목적 +소유자가 존재하지 않는 파일 및 디렉터리를 제거 또는 관리하여 임의의 사용자가 해당 파일을 열람, +수정하는 행위를 사전에 차단하기 위함 +보안 위협 +소유자가 존재하지 않는 파일의 UID와 동일한 값으로 특정 계정의 UID를 변경하면 해당 파일의 +소유자가 되어 모든 작업이 가능한 위험이 존재함 +참고 +※ 소유자가 존재하지 않는 파일 및 디렉터리는 일반적으로 퇴직자의 자료, 관리 소홀로 인해 생긴 파일 +또는 해킹으로 인한 공격자가 만들어 놓은 악의적인 파일임 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우 +취약 : 소유자가 존재하지 않는 파일 및 디렉터리가 존재하는 경우 +조치 방법 +소유자가 존재하지 않는 파일 및 디렉터리 제거 또는 소유자 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) 소유자와 그룹이 존재하지 않는 파일 및 디렉터리 확인 +# find / \( -nouser -o -nogroup \) -xdev -ls 2>/dev/null +Step 2) 소유자가 존재하지 않는 파일 또는 디렉터리 제거 +# rm <파일 이름> +# rm -r <디렉터리 이름> +Step 3) 사용 중인 파일 및 디렉터리의 경우 소유자 및 그룹 변경 +# chown <사용자 이름> <파일 및 디렉터리 이름> +# chgrp <그룹 이름> <파일 및 디렉터리 이름> +※ 소유자 또는 그룹이 존재하지 않는 파일은 파일 속성의 해당 필드에 UID, GID가 숫자로 표시됨 + + +![이미지 40-0](images/p0040_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +41 +U-16 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +/etc/passwd 파일 소유자 및 권한 설정 +개요 +점검 내용 +/etc/passwd 파일 권한 적절성 여부 점검 +점검 목적 +/etc/passwd 파일을 관리자만 제어할 수 있게 하여 비인가자들의 임의적인 파일 변조를 방지하기 위함 +보안 위협 +비인가자가 /etc/passwd 파일의 사용자 정보를 변조하여 Shell 변경, 사용자 추가/제거 등 root +계정을 포함한 사용자 권한 획득 위험이 존재함 +참고 +※ /etc/passwd: 사용자의 ID, UID, GID, 홈 디렉터리, 쉘 정보를 담고 있는 파일 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /etc/passwd 파일의 소유자가 root이고, 권한이 644 이하인 경우 +취약 : /etc/passwd 파일의 소유자가 root가 아니거나, 권한이 644 이하가 아닌 경우 +조치 방법 +/etc/passwd 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/passwd 파일 소유자 및 권한 확인 +# ls -l /etc/passwd +Step 2) /etc/passwd 파일 소유자 및 권한 변경 +# chown root /etc/passwd +# chmod 644 /etc/passwd + + +![이미지 41-0](images/p0041_img0.png) + + +--- + +| 한국인터넷진흥원 | +42 +U-17 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +시스템 시작 스크립트 권한 설정 +개요 +점검 내용 +시스템 시작 스크립트 파일 권한 적절성 여부 점검 +점검 목적 +시스템 시작 스크립트 파일을 관리자만 제어할 수 있게 하여 비인가자들의 임의적인 파일 변조를 +방지하기 위함 +보안 위협 +시스템 시작 스크립트 파일의 소유권 및 권한 설정이 미흡할 경우, 비인가자가 스크립트의 내용 변경 +등을 통해 시스템 침입 등 악용할 위험이 존재함 +참고 +※ 시스템 시작 스크립트: 운영체제 부팅 시 자동으로 실행되어 시스템 초기화 작업을 수행하고, 필요한 +서비스와 데몬을 시작하는 스크립트 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 시스템 시작 스크립트 파일의 소유자가 root이고, 일반 사용자의 쓰기 권한이 제거된 경우 +취약 : 시스템 시작 스크립트 파일의 소유자가 root가 아니거나, 일반 사용자의 쓰기 권한이 부여된 경우 +조치 방법 +시스템 시작 스크립트 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) 시스템 시작 스크립트 파일 소유자 및 권한 확인 +# ls -al `readlink -f /etc/rc*.d/ | sed ‘s/$/*/’` +Step 2) 시스템 시작 스크립트 파일 소유자 및 권한 변경 +# chown root <파일 이름> +# chmod o-w <파일 이름> +l LINUX +[init] +Step 1) 시스템 시작 스크립트 파일 소유자 및 권한 확인 +# ls -al `readlink -f /etc/rc.d/*/* | sed ‘s/$/*/’` + + +![이미지 42-0](images/p0042_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +43 +Step 2) 시스템 시작 스크립트 파일 소유자 및 권한 변경 +# chown root <파일 이름> +# chmod o-w <파일 이름> +[systemd] +Step 1) 시스템 시작 스크립트 파일 소유자 및 권한 확인 +# ls -al `readlink -f /etc/systemd/system/* | sed ‘s/$/*/’` +Step 2) 시스템 시작 스크립트 파일 소유자 및 권한 변경 +# chown root /etc/systemd/system/<파일 이름> +# chmod o-w /etc/systemd/system/<파일 이름> +l AIX +Step 1) 시스템 시작 스크립트 파일 소유자 및 권한 확인 +# find /etc/rc.d/*/* -type l -exec ls -l {} + +Step 2) 시스템 시작 스크립트 파일 소유자 및 권한 변경 +# chown root <파일 이름> +# chmod o-w <파일 이름> +l HP-UX +Step 1) 시스템 시작 스크립트 파일 소유자 및 권한 확인 +# find /sbin/rc*.d/ -type l -exec ls -l {} + +Step 2) 시스템 시작 스크립트 파일 소유자 및 권한 변경 +# chown root <파일 이름> +# chmod o-w <파일 이름> + + +![이미지 43-0](images/p0043_img0.png) + + +--- + +| 한국인터넷진흥원 | +44 +U-18 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +/etc/shadow 파일 소유자 및 권한 설정 +개요 +점검 내용 +/etc/shadow 파일 권한 적절성 여부 점검 +점검 목적 +/etc/shadow 파일을 관리자만 제어할 수 있게 하여 비인가자들의 임의적인 파일 변조를 방지하기 위함 +보안 위협 +/etc/shadow 파일에 저장된 암호화된 해시값을 복호화하여(크래킹) 비밀번호를 탈취할 위험이 존재함 +참고 +※ /etc/shadow: 시스템에 등록된 모든 계정의 비밀번호를 암호화된 형태로 저장 및 관리하는 파일 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /etc/shadow 파일의 소유자가 root이고, 권한이 400 이하인 경우 +취약 : /etc/shadow 파일의 소유자가 root가 아니거나, 권한이 400 이하가 아닌 경우 +조치 방법 +/etc/shadow 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX +Step 1) /etc/shadow 파일 소유자 및 권한 변경 +# chown root /etc/shadow +# chmod 400 /etc/shadow +l AIX +Step 1) /etc/security/passwd 파일 소유자 및 권한 변경 +# chown root /etc/security/passwd +# chmod 400 /etc/security/passwd +l HP-UX +Step 1) /tcb/files/auth/ 디렉터리 소유자 및 권한 변경 +# chown root /tcb/files/auth +# chmod 400 /tcb/files/auth + + +![이미지 44-0](images/p0044_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +45 +U-19 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +/etc/hosts 파일 소유자 및 권한 설정 +개요 +점검 내용 +/etc/hosts 파일의 권한 적절성 여부 점검 +점검 목적 +/etc/hosts 파일을 관리자만 제어할 수 있게 하여 비인가자들의 임의적인 파일 변조를 방지하기 위함 +보안 위협 +Ÿ /etc/hosts 파일에 비인가자가 쓰기 권한이 부여된 경우, 공격자는 /etc/hosts 파일에 악의적인 +시스템을 등록하여, 이를 통해 정상적인 DNS를 우회하여 악성 사이트로의 접속을 유도하는 +파밍(Pharming) 공격 등에 악용될 수 있는 위험이 존재함 +Ÿ /etc/hosts 파일에 소유자의 쓰기 권한이 부여된 경우, 일반 사용자 권한으로 /etc/hosts 파일에 +변조된 IP주소를 등록하여 정상적인 DNS를 방해하고 악성 사이트로의 접속을 유도하는 +파밍(Pharming) 공격 등에 악용될 수 있는 위험이 존재함 +참고 +※ /etc/hosts: IP주소와 호스트 이름을 매핑하는 파일. 일반적으로 인터넷 통신 시 주소를 찾기 위해 +도메인 네임 서비스(DNS)보다 /etc/hosts 파일을 먼저 참조함. /etc/hosts 파일은 문자열 +주소로부터 IP주소를 수신받는 DNS 서버와는 달리 파일 내에 직접 문자열 주소와 IP주소를 +매핑하여 기록하며, DNS 서버 접근 이전에 확인하여 해당 문자열 주소가 목록에 존재할 시 그 +문자열 주소에 해당하는 IP주소로 연결함 +※ 파밍(Pharming): 사용자의 DNS 또는 /etc/hosts 파일을 변조함으로써 정상적인 사이트로 +오인하여 접속하도록 유도한 뒤 개인정보를 훔치는 새로운 컴퓨터 범죄 수법 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /etc/hosts 파일의 소유자가 root이고, 권한이 644 이하인 경우 +취약 : /etc/hosts 파일의 소유자가 root가 아니거나, 권한이 644 이하가 아닌 경우 +조치 방법 +/etc/hosts 파일 소유자 및 권한 변경 설정 +조치 시 영향 +/etc/hosts 파일에 시스템 정보가 설정된 경우 해당 파일을 참조하는 서비스에 영향을 미칠 수 있음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/hosts 파일 소유자 및 권한 변경 +# chown root /etc/hosts +# chmod 644 /etc/hosts + + +![이미지 45-0](images/p0045_img0.png) + + +--- + +| 한국인터넷진흥원 | +46 +U-20 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +/etc/(x)inetd.conf 파일 소유자 및 권한 설정 +개요 +점검 내용 +/etc/(x)inetd.conf 파일 권한 적절성 여부 점검 +점검 목적 +/etc/(x)inetd.conf 파일을 관리자만 제어하여 비인가자들의 임의적인 파일 변조를 방지하기 위함 +보안 위협 +/etc/(x)inetd.conf 파일에 소유자 외 쓰기 권한이 부여된 경우, 일반 사용자 권한으로 해당 파일에 +등록된 서비스를 변조하거나 악의적인 프로그램(서비스)을 등록할 수 있는 위험이 존재함 +참고 +※ (x)inetd(슈퍼데몬): 자주 사용하지 않는 서비스가 상시 실행되어 메모리를 점유하는 것을 방지하기 +위해 (x)inetd(슈퍼데몬)에 자주 사용하지 않는 서비스를 등록하여 요청이 있을 시에만 해당 +서비스를 실행하고 요청이 끝나면 서비스를 종료하는 역할 수행 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /etc/(x)inetd.conf 파일의 소유자가 root이고, 권한이 600 이하인 경우 +취약 : /etc/(x)inetd.conf 파일의 소유자가 root가 아니거나, 권한이 600 이하가 아닌 경우 +조치 방법 +/etc/(x)inetd.conf 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, AIX, HP-UX +Step 1) /etc/inetd.conf 파일 소유자 및 권한 변경 +# chown root /etc/inetd.conf +# chmod 600 /etc/inetd.conf +l LINUX +[inetd] +Step 1) /etc/inetd.conf 파일 소유자 및 권한 변경 +# chown root /etc/inetd.conf +# chmod 600 /etc/inetd.conf + + +![이미지 46-0](images/p0046_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +47 +[xinetd] +Step 1) /etc/xinetd.conf 파일 소유자 및 권한 변경 +# chown root /etc/xinetd.conf +# chmod 600 /etc/xinetd.conf +Step 2) /etc/xinetd.d/ 디렉터리 내 모든 파일의 소유자 및 권한 변경 +# chown -R root /etc/xinetd.d/ +# chmod - R 600 /etc/xinetd.d/ +[systemd] +Step 1) /etc/systemd/system.conf 파일 소유자 및 권한 변경 +# chown root /etc/systemd/system.conf +# chmod 600 /etc/systemd/system.conf +Step 2) /etc/systemd/ 디렉터리 내 모든 파일의 소유자 및 권한 변경 +# chown -R root /etc/systemd/ +# chmod - R 600 /etc/systemd/ + + +![이미지 47-0](images/p0047_img0.png) + + +--- + +| 한국인터넷진흥원 | +48 +U-21 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +/etc/(r)syslog.conf 파일 소유자 및 권한 설정 +개요 +점검 내용 +/etc/(r)syslog.conf 파일 권한 적절성 여부 점검 +점검 목적 +/etc/(r)syslog.conf 파일의 권한 적절성을 점검하여, 비인가자의 임의적인 /etc/(r)syslog.conf 파일 +변조를 방지하기 위함 +보안 위협 +/etc/(r)syslog.conf 파일의 설정 내용을 참조하여 로그의 저장 위치가 노출되며 로그를 기록하지 +않도록 설정하거나 대량의 로그를 기록하게 하여 시스템 과부하를 유도할 수 있는 위험이 존재함 +참고 +※ /etc/(r)syslog.conf: (r)syslogd 데몬 실행 시 참조되는 설정 파일로 시스템 로그 기록의 종류, +위치 및 Level을 설정할 수 있음 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /etc/(r)syslog.conf 파일의 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우 +취약 : /etc/(r)syslog.conf 파일의 소유자가 root(또는 bin, sys)가 아니거나, 권한이 640 이하가 아닌 +경우 +조치 방법 +/etc/(r)syslog.conf 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/(r)syslog.conf 파일 소유자 및 권한 변경 +# chown root /etc/(r)syslog.conf +# chmod 640 /etc/(r)syslog.conf + + +![이미지 48-0](images/p0048_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +49 +U-22 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +/etc/services 파일 소유자 및 권한 설정 +개요 +점검 내용 +/etc/services 파일 권한 적절성 여부 점검 +점검 목적 +/etc/services 파일을 관리자만 제어할 수 있게 하여 비인가자들의 임의적인 파일 변조를 방지하기 +위함 +보안 위협 +/etc/services 파일의 접근 권한이 적절하지 않을 경우, 비인가 사용자가 운영 포트 번호를 변경하여 +정상적인 서비스를 제한하거나 허용되지 않은 포트를 오픈하여 악성 서비스를 의도적으로 실행할 수 +있는 위험이 존재함 +참고 +※ /etc/services: 서비스 관리를 위해 사용되는 파일. 해당 파일에 서버에서 사용하는 모든 포트에 +대해 정의되어 있으며, 필요시 서비스 기본 사용 포트를 변경하여 네트워크 서비스를 운용할 수 있음 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /etc/services 파일의 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우 +취약 : /etc/services 파일의 소유자가 root(또는 bin, sys)가 아니거나, 권한이 644 이하가 아닌 경우 +조치 방법 +/etc/ services 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/services 파일 소유자 및 권한 변경 +# chown root /etc/services +# chmod 644 /etc/services + + +![이미지 49-0](images/p0049_img0.png) + + +--- + +| 한국인터넷진흥원 | +50 +U-23 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +SUID, SGID, Sticky bit 설정 파일 점검 +개요 +점검 내용 +불필요하거나 악의적인 파일에 SUID, SGID, Sticky bit 설정 여부 점검 +점검 목적 +불필요한 SUID, SGID, Sticky bit 설정 제거로 악의적인 사용자의 권한 상승을 방지하기 위함 +보안 위협 +SUID, SGID, Sticky bit 설정이 적절하지 않을 경우, SUID, SGID, Sticky bit가 설정된 파일로 특정 +명령어를 실행하여 root 권한 획득이 가능한 위험이 존재함 +참고 +※ SUID: 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유자의 권한을 얻게 됨 +※ SGID: 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유 그룹의 권한을 얻게 됨 +※ Sticky bit: 설정된 파일의 수정/삭제는 소유자만 가능한 권한 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 주요 실행 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있지 않은 경우 +취약 : 주요 실행 파일의 권한에 SUID와 SGID에 대한 설정이 부여된 경우 +조치 방법 +Ÿ 불필요한 SUID, SGID 권한 또는 해당 파일 제거하도록 설정 +Ÿ 애플리케이션에서 생성한 파일이나 사용자가 임의로 생성한 파일 등 의심스럽거나 특이한 파일에 +SUID 권한이 부여된 경우 제거하도록 설정 +조치 시 영향 +SUID, SGID, Sticky bit 설정 파일 제거 시, OS 및 응용프로그램 등 서비스 정상 작동 확인 필요 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) SUID, SGID가 설정된 파일 확인 +# find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; +Step 2) 불필요한 특수 권한 제거 +# chmod -s <파일 이름> +Step 3) 반드시 사용이 필요한 경우 특정 그룹에서만 사용하도록 제한하여 일반 사용자의 Setuid 사용 제한 +# chgrp <그룹 이름> +# chmod 4750 + + +![이미지 50-0](images/p0050_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +51 +U-24 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +사용자, 시스템 환경변수 파일 소유자 및 권한 설정 +개요 +점검 내용 +홈 디렉터리 내의 환경변수 파일에 대한 소유자 및 접근 권한이 관리자 또는 해당 계정으로 설정 여부 점검 +점검 목적 +비인가자의 환경변수 조작으로 인한 보안 위험이 존재함 +보안 위협 +홈 디렉터리 내의 사용자 파일 및 사용자별 시스템 시작 파일 등과 같은 환경변수 파일의 접근 권한 +설정이 적절하지 않을 경우, 비인가자가 환경변수 파일을 변조하여 정상 사용 중인 사용자의 서비스가 +제한될 수 있는 위험이 존재함 +참고 +※ 환경변수 파일 종류: .profile, .kshrc, .cshrc, .bashrc, .bash_profile, .login, .exrc, .netrc 등 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정으로 지정되어 있고, 홈 디렉터리 +환경변수 파일에 root 계정과 소유자만 쓰기 권한이 부여된 경우 +취약 : 홈 디렉터리 환경변수 파일 소유자가 root 또는 해당 계정으로 지정되지 않거나, 홈 디렉터리 +환경변수 파일에 root 계정과 소유자 외에 쓰기 권한이 부여된 경우 +조치 방법 +환경변수 파일의 일반 사용자 쓰기 권한 제거하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) 홈 디렉터리 환경변수 파일 소유자 및 권한 확인 +# ls -l <홈 디렉터리 환경변수 파일> +환경변수 파일 종류: .profile, .kshrc, .cshrc, .bashrc, .bash_profile, .login, .exrc, .netrc 등 +Step 2) 홈 디렉터리 환경변수 파일 소유자 및 권한 변경 +# chown <홈 디렉터리 환경변수 파일> +# chmod o-w <홈 디렉터리 환경변수 파일> + + +![이미지 51-0](images/p0051_img0.png) + + +--- + +| 한국인터넷진흥원 | +52 +U-25 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +world writable 파일 점검 +개요 +점검 내용 +불필요한 world writable 파일 여부 점검 +점검 목적 +world writable 파일을 이용한 시스템 접근 및 악의적인 코드 실행을 방지하기 위함 +보안 위협 +시스템 파일과 같은 중요 파일에 world writable이 적용될 경우, 일반 사용자 및 비인가자가 해당 +파일을 임의로 수정, 제거할 위험이 존재함 +참고 +※ world writable 파일: 모든 사용자에게 쓰기 권한이 부여된 파일 +(예시 : -rwxrwxrwx root root <파일명>) +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : world writable 파일이 존재하지 않거나, 존재 시 설정 이유를 인지하고 있는 경우 +취약 : world writable 파일이 존재하나 설정 이유를 인지하지 못하고 있는 경우 +조치 방법 +world writable 파일 존재 여부를 확인하고 불필요한 경우 제거하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[일반 사용자 쓰기 권한 제거] +Step 1) world writable 파일 확인 +# find / -type f -perm -2 -exec ls -l {} \; +Step 2) 일반 사용자 쓰기 권한 제거 +# chmod o-w <파일 이름> +Step 3) 불필요한 world writable 파일 제거 +# rm <파일 이름> + + +![이미지 52-0](images/p0052_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +53 +U-26 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +/dev에 존재하지 않는 device 파일 점검 +개요 +점검 내용 +허용할 호스트에 대한 접속 IP주소 제한 및 포트 제한 설정 여부 점검 +점검 목적 +허용한 호스트만 서비스를 사용하게 하여 서비스 취약점을 이용한 외부자 공격을 방지하기 위함 +보안 위협 +공격자는 rootkit 설정 파일들을 서버 관리자가 쉽게 발견하지 못하도록 /dev 디렉터리에 device +파일인 것처럼 위장하는 수법을 사용하는 위험이 존재함 +참고 +※ /dev 디렉터리: 논리적 장치 파일을 담고 있는 디렉터리이며 /devices 디렉터리에 있는 물리적 +장치 파일에 대한 심볼릭 링크임. 예를 들어 rmt0를 rmto로 잘못 입력한 경우, rmto 파일이 새로 +생성되는 것과 같이 디바이스 이름 입력 오류 시 root 파일 시스템이 에러를 일으킬 때까지 /dev +디렉터리에 계속해서 파일을 생성함 +※ /dev 디렉터리 내 mqueue, shm 파일은 시스템에서 생성 또는 제거가 주기적으로 일어나므로 예외 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /dev 디렉터리에 대한 파일 점검 후 존재하지 않는 device 파일을 제거한 경우 +취약 : /dev 디렉터리에 대한 파일 미점검 또는 존재하지 않는 device 파일을 방치한 경우 +조치 방법 +major, minor number를 가지지 않는 device 파일 제거하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /dev 디렉터리 내 불필요하거나 존재하지 않는 device 파일 확인 및 삭제 +# find /dev -type f -exec ls -l {} \; +# rm <파일 이름> + + +![이미지 53-0](images/p0053_img0.png) + + +--- + +| 한국인터넷진흥원 | +54 +U-27 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +$HOME/.rhosts, hosts.equiv 사용 금지 +개요 +점검 내용 +$HOME/.rhosts 및 /etc/hosts.equiv 파일에 대해 적절한 소유자 및 접근 권한 설정 여부 점검 +점검 목적 +r-command를 통한 별도의 인증 없는 관리자 권한 원격 접속을 차단하기 위함 +보안 위협 +Ÿ r-command(rlogin, rsh 등)에 보안 설정이 적용되지 않을 경우, 원격지의 공격자가 관리자 +권한으로 목표 시스템상 임의의 명령을 수행시킬 수 있으며, 명령어 원격실행을 통해 중요 정보유출 +및 시스템 장애를 유발 또는 공격자의 백도어 등으로도 활용될 수 있는 위험이 존재함 +Ÿ 해당 파일은 r-command 서비스의 접근통제에 관련된 파일이며, 권한 설정이 부적절한 경우 +r-command 서비스 사용 권한을 임의로 등록하여 무단 사용 위험이 존재함 +참고 +※ /etc/hosts.equiv: 서버 설정 파일 +※ $HOME/.rhosts: 개별 사용자의 설정 파일 +※ + +: 모든 호스트의 계정 신뢰 +※ + <사용자 이름>: 모든 호스트의 해당 사용자 계정 신뢰 +※ <호스트 이름> +: 해당 호스트의 모든 계정 신뢰 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : rlogin, rsh, rexec 서비스를 사용하지 않거나, 사용 시 아래와 같은 설정이 적용된 경우 +1. /etc/hosts.equiv 및 $HOME/.rhosts 파일 소유자가 root 또는 해당 계정인 경우 +2. /etc/hosts.equiv 및 $HOME/.rhosts 파일 권한이 600 이하인 경우 +3. /etc/hosts.equiv 및 $HOME/.rhosts 파일 설정에 “+” 설정이 없는 경우 +취약 : rlogin, rsh, rexec 서비스를 사용하며 아래와 같은 설정이 적용되지 않은 경우 +1. /etc/hosts.equiv 및 $HOME/.rhosts 파일 소유자가 root 또는 해당 계정이 아닌 경우 +2. /etc/hosts.equiv 및 $HOME/.rhosts 파일 권한이 600을 초과한 경우 +3. /etc/hosts.equiv 및 $HOME/.rhosts 파일 설정에 “+” 설정이 존재하는 경우 +조치 방법 +/etc/hosts.equiv, $HOME/.rhosts 파일 소유자 및 권한 변경, 허용 호스트 및 계정 등록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/hosts.equiv, $HOME/.rhosts 파일 소유자 및 권한 변경 +# chown /etc/hosts.equiv +# chmod 600 /etc/hosts.equiv + + +![이미지 54-0](images/p0054_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +55 +# chown $HOME/.rhosts +# chmod 600 $HOME/.rhosts +Step 2) /etc/hosts.equiv, $HOME/.rhosts 파일 내 “+” 옵션이 부여된 계정 확인 +Step 3) /etc/hosts.equiv, vi $HOME/.rhosts 파일 내 “+” 옵션 제거 후 허용 호스트 및 계정 등록 + + +![이미지 55-0](images/p0055_img0.png) + + +--- + +| 한국인터넷진흥원 | +56 +U-28 +(상) +UNIX > 2. 파일 및 디렉토리 관리 +접속 IP 및 포트 제한 +개요 +점검 내용 +허용할 호스트에 대한 접속 IP주소 제한 및 포트 제한 설정 여부 점검 +점검 목적 +허용한 호스트만 서비스를 사용하게 하여 서비스 취약점을 이용한 외부자 공격을 방지하기 위함 +보안 위협 +허용할 호스트에 대한 IP 및 포트 제한이 적용되지 않을 경우, Telnet, FTP 같은 보안에 취약한 +네트워크 서비스를 통하여 불법적인 접근 및 시스템 침해사고가 발생할 수 있는 위험이 존재함 +참고 +※ TCP Wrapper: 네트워크 서비스에 관련한 트래픽을 제어하고 모니터링할 수 있는 UNIX 기반의 +방화벽 툴 +※ IPFilter: 유닉스 계열에서 사용하는 공개형 방화벽 프로그램으로써 Packet Filter로 시스템 및 +네트워크 보안에 아주 강력한 기능을 보유한 프로그램 +※ IPtables: 리눅스 커널 방화벽이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 +있게 해주는 응용프로그램 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정한 경우 +취약 : 접속을 허용할 특정 호스트에 대한 IP주소 및 포트 제한을 설정하지 않은 경우 +조치 방법 +OS에 기본으로 제공하는 방화벽 애플리케이션이나 TCP Wrapper와 같은 호스트별 서비스 제한 +애플리케이션을 사용하여 접근 허용 IP 등록 설정 +조치 시 영향 +허용되지 않은 IP는 서비스 사용이 불가함 +점검 및 조치 사례 +l SOLARIS +[TCP Wrapper] +Step 1) TCP Wrapper에 설정된 접근제한 확인 +Step 2) 서비스 차단 및 허용 설정값 수정 +# vi /etc/hosts.deny +ALL:ALL +# vi /etc/hosts.allow +<허용할 서비스> : <허용할 IP주소> +예시) sshd : 192.168.18.129, 192.168.18.180 + + +![이미지 56-0](images/p0056_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +57 +※ TCP Wrapper 접근제어 가능 서비스 : SYSTAT, FINGER, FTP, TELNET, RLOGIN, RSH, TALK, EXEC, +TFTP, SSH +※ hosts.allow, hosts.deny 두 파일이 존재하지 않는 경우 모든 접근을 허용함 +[Packet Filter] +Step 1) Packet Filter에 설정된 접근제한 확인 및 수정 +Step 2) /etc/firewall/pf.conf 파일에 허용할 IP 및 포트 정책 추가 +예시) SSH 서비스 제한 +# pass in quick proto tcp from 192.168.1.0/24 to any port = 22 keep state +# block in quick proto tcp from any to any port = 22 keep state +Step 3) 설정한 접근제한 정책 적용 +# svcadm refresh svc:/network/firewall:default +l LINUX +[TCP Wrapper] +Step 1) TCP Wrapper에 설정된 접근제한 확인 +Step 2) 서비스 차단 및 허용 설정값 수정 +# vi /etc/hosts.deny +ALL:ALL +# vi /etc/hosts.allow +<허용할 서비스> : <허용할 IP주소> +예시) sshd : 192.168.18.129, 192.168.18.180 +※ TCP Wrapper 접근제어 가능 서비스 : SYSTAT, FINGER, FTP, TELNET, RLOGIN, RSH, TALK, EXEC, +TFTP, SSH +※ hosts.allow, hosts.deny 두 파일이 존재하지 않는 경우 모든 접근을 허용함 +[Iptables] +Step 1) Iptables에 설정된 접근제한 확인 +# iptables -L +Step 2) Iptables에 허용할 IP 및 포트 정책 추가 + + +![이미지 57-0](images/p0057_img0.png) + + +--- + +| 한국인터넷진흥원 | +58 +# iptables -A INPUT -p <프로토콜> -s --dport <목적지 포트> -j ACCEPT +Step 3) 설정한 접근제한 정책 적용 +# iptables-save +[Firewalld] +Step 1) Firewalld에 설정된 접근제한 확인 +# firewall-cmd --list-all +Step 2) 허용할 IP 및 포트 정책 추가 +# firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“” port protocol +=“<프로토콜>” port=“<포트 번호>” accept” +Step 3) 설정한 접근제한 정책 적용 +# firewall-cmd --reload +[UFW] +Step 1) UFW에 설정된 접근제한 확인 +# ufw status numbered +Step 2) 허용할 IP 및 포트 정책 추가 +# ufw allow from to any <포트 번호> +Step 3) 설정한 접근제한 정책 적용 +# ufw reload +l AIX +[TCP Wrapper] +Step 1) TCP Wrapper에 설정된 접근제한 확인 +Step 2) 서비스 차단 및 허용 설정값 수정 +# vi /etc/hosts.deny +ALL:ALL +# vi /etc/hosts.allow +<허용할 서비스> : <허용할 IP주소> +예시) sshd : 192.168.18.129, 192.168.18.180 + + +![이미지 58-0](images/p0058_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +59 +※ TCP Wrapper 접근제어 가능 서비스 : SYSTAT, FINGER, FTP, TELNET, RLOGIN, RSH, TALK, EXEC, +TFTP, SSH +※ hosts.allow, hosts.deny 두 파일이 존재하지 않는 경우 모든 접근을 허용함 +[IPfilter] +Step 1) IPfilter에 설정된 접근제한 확인 및 수정 +# vi /etc/ipf/ipf.conf +Step 2) /etc/ipf/ipf.conf 파일에 허용할 IP 및 포트 정책 추가 +예시) SSH 서비스 제한 +# pass in quick proto tcp from 192.168.1.0/24 to any port = 22 keep state +# block in quick proto tcp from any to any port = 22 keep state +Step 3) IPfilter 서비스 재시작 +l HP-UX +[/var/adm/inetd.sec] +Step 1) inetd.sec에 설정된 접근제한 확인 및 수정 +# vi /var/adm/inetd.sec +Step 2) 아래와 같이 수정 또는 삽입 +특정 서비스로의 모든 IP 접근 차단 시 : <서비스> deny *.*.*.* +특정 서비스로의 일부 IP 접근 허용 시 : <서비스> allow < 접속을 허용할 IP주소> +[TCP Wrapper] +Step 1) TCP Wrapper에 설정된 접근제한 확인 +Step 2) 서비스 차단 및 허용 설정값 수정 +# vi /etc/hosts.deny +ALL:ALL +# vi /etc/hosts.allow +<허용할 서비스> : <허용할 IP주소> +예시) sshd : 192.168.18.129, 192.168.18.180 + + +![이미지 59-0](images/p0059_img0.png) + + +--- + +| 한국인터넷진흥원 | +60 +※ TCP Wrapper 접근제어 가능 서비스 : SYSTAT, FINGER, FTP, TELNET, RLOGIN, RSH, TALK, EXEC, +TFTP, SSH +※ hosts.allow, hosts.deny 두 파일이 존재하지 않는 경우 모든 접근을 허용함 +[IPfilter] +Step 1) IPfilter에 설정된 접근제한 확인 +Step 2) /etc/ipf/ipf.conf 파일에 허용할 IP 및 포트 정책 추가 +예시) SSH 서비스 제한 +# pass in quick proto tcp from 192.168.1.0/24 to any port = 22 keep state +# block in quick proto tcp from any to any port = 22 keep state +Step 3) IPfilter 서비스 재시작 + + +![이미지 60-0](images/p0060_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +61 +U-29 +(하) +UNIX > 2. 파일 및 디렉토리 관리 +hosts.lpd 파일 소유자 및 권한 설정 +개요 +점검 내용 +/etc/hosts.lpd 파일의 제거 및 권한 적절성 여부 점검 +점검 목적 +비인가자의 임의적인 /etc/hosts.lpd 변조를 막기 위해 /etc/hosts.lpd 파일 제거 또는 소유자 및 권한 +관리하기 위함 +보안 위협 +/etc/hosts.lpd 파일의 접근 권한이 적절하지 않을 경우, 비인가자가 /etc/hosts.lpd 파일을 수정하여 +허용된 사용자의 서비스를 방해할 수 있으며, 호스트 정보를 획득할 수 있는 위험이 존재함 +참고 +※ /etc/hosts.lpd 파일: 로컬 프린트 서비스를 사용할 수 있는 허가된 호스트(사용자) 정보를 담고 +있는 파일 (hostname 또는 IP주소를 포함하고 있음) +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /etc/hosts.lpd 파일이 존재하지 않거나, 불가피하게 사용 시 /etc/hosts.lpd 파일의 소유자가 +root이고, 권한이 600 이하인 경우 +취약 : /etc/hosts.lpd 파일이 존재하며, 파일의 소유자가 root가 아니거나, 권한이 600 이하가 아닌 +경우 +조치 방법 +/etc/hosts.lpd 파일 제거 또는 /etc/hosts.lpd 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/hosts.lpd 파일 소유자 및 권한 확인 및 수정 +# ls –l /etc/hosts.lpd +# chown root /etc/hosts.lpd +# chmod 600 /etc/hosts.lpd + + +![이미지 61-0](images/p0061_img0.png) + + +--- + +| 한국인터넷진흥원 | +62 +U-30 +(중) +UNIX > 2. 파일 및 디렉토리 관리 +UMASK 설정 관리 +개요 +점검 내용 +시스템 UMASK 값이 022 이상 설정 여부 점검 +점검 목적 +잘못 설정된 UMASK 값으로 인해 신규 파일에 대한 권한이 과도하게 부여되는 것을 방지하기 위함 +보안 위협 +잘못 설정된 UMASK로 인해 파일 및 디렉터리 생성 시 과도한 권한이 부여되어 무단 액세스 및 데이터 +유출의 위험이 존재함 +참고 +※ UMASK: 파일 및 디렉터리 생성 시 기본 권한을 지정해 주는 명령어 +※ 시스템 내에서 사용자가 새로 생성하는 파일의 접근 권한은 UMASK 값에 따라 정해지며, 계정의 +환경설정 파일에 설정을 변경하면 사용자가 로그인한 후에도 변경된 UMASK 값을 적용받게 됨 +※ Start Profile: /etc/profile, /etc/default/login, .cshrc, .kshrc, .bashrc, .login, .profile 등 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : UMASK 값이 022 이상으로 설정된 경우 +취약 : UMASK 값이 022 미만으로 설정된 경우 +조치 방법 +설정 파일에 UMASK 값을 022로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +[/etc/profile] +Step 1) /etc/profile 파일 내 UMASK 설정 확인 및 수정 +# vi /etc/profile +umask 022 +export umask +[/etc/default/login] +Step 1) /etc/default/login 파일 내 UMASK 설정 확인 및 수정 +# vi /etc/default/login +UMASK=022 + + +![이미지 62-0](images/p0062_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +63 +l LINUX +[/etc/profile] +Step 1) /etc/profile 파일 내 UMASK 설정 확인 및 수정 +# vi /etc/profile +umask 022 +export umask +[/etc/login.defs] +Step 1) /etc/login.defs 파일 내 UMASK 설정 확인 및 수정 +# vi /etc/login.defs +UMASK 022 +l AIX +[/etc/profile] +Step 1) /etc/profile 파일 내 UMASK 설정 확인 및 수정 +# vi /etc/profile +umask 022 +export umask +[/etc/security/user] +Step 1) /etc/security/user 파일 내 UMASK 설정 확인 및 수정 +# vi /etc/security/user +default : umask = 022 또는 <사용자 이름> : umask = 022 +l HP-UX +[/etc/profile] +Step 1) /etc/profile 파일 내 UMASK 설정 확인 및 수정 +# vi /etc/profile +umask 022 +export umask +[/etc/default/securitz] + + +![이미지 63-0](images/p0063_img0.png) + + +--- + +| 한국인터넷진흥원 | +64 +Step 1) /etc/default/securitz 파일 내 UMASK 설정 수정 +UMASK = 022 +l FTP UMASK 설정 +[vsFTP] +Step 1) {설치경로}/vsftpd.conf 파일 내 UMASK 설정 확인 및 수정 +# cat vsftpd.conf | grep local_umask +local_umask=022 +[ProFTP] +Step 2) {설치경로}/proftpd.conf 파일 내 UMASK 설정 확인 및 수정 +# cat proftpd.conf | grep umask +Umask 022 + + +![이미지 64-0](images/p0064_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +65 +U-31 +(중) +UNIX > 2. 파일 및 디렉토리 관리 +홈디렉토리 소유자 및 권한 설정 +개요 +점검 내용 +홈 디렉토리의 소유자 외 타 사용자가 해당 홈 디렉토리를 수정할 수 없도록 제한 설정 여부 점검 +점검 목적 +사용자 홈 디렉토리 내 설정 파일이 비인가자에 의한 변조를 방지하기 위함 +보안 위협 +홈 디렉토리 내 설정 파일 변조 시 정상적인 서비스 이용이 제한될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 홈 디렉토리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우 +취약 : 홈 디렉토리 소유자가 해당 계정이 아니거나, 타 사용자 쓰기 권한이 부여된 경우 +조치 방법 +사용자별 홈 디렉토리 소유주를 해당 계정으로 변경하고, 타 사용자의 쓰기 권한 제거하도록 설정 +(/etc/passwd 파일에서 홈 디렉토리 확인, 사용자 홈 디렉토리 외 개별적으로 만들어 사용하는 사용자 +디렉토리 존재 여부 확인하여 점검) +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) 사용자별 홈 디렉토리 확인 +# cat /etc/passwd +Step 2) 사용자별 홈 디렉토리 소유자 및 권한 확인 +# ls -ald <사용자 홈 디렉토리> +Step 3) 사용자별 홈 디렉토리 소유자를 해당 사용자로 변경 및 일반 사용자 권한 제거 +# chown <사용자 이름> <사용자 홈 디렉토리> +# chmod o-w <사용자 홈 디렉토리> + + +![이미지 65-0](images/p0065_img0.png) + + +--- + +| 한국인터넷진흥원 | +66 +U-32 +(중) +UNIX > 2. 파일 및 디렉토리 관리 +홈 디렉토리로 지정한 디렉토리의 존재 관리 +개요 +점검 내용 +사용자 계정과 홈 디렉토리의 일치 여부 점검 +점검 목적 +/home 디렉토리 이외의 사용자의 홈 디렉토리 존재 여부를 점검하여 비인가자가 시스템 명령어의 무단 +사용을 방지하기 위함 +보안 위협 +/etc/passwd 파일에 설정된 홈 디렉토리가 존재하지 않는 경우, 해당 계정으로 로그인 시 홈 +디렉토리가 루트 디렉토리(/)로 할당되어 접근이 가능한 위험이 존재함 +참고 +※ 홈 디렉토리: 사용자가 로그인한 후 작업을 수행하는 디렉토리 +※ 일반 사용자의 홈 디렉토리 위치: /home/ +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 홈 디렉토리가 존재하지 않는 계정이 발견되지 않는 경우 +취약 : 홈 디렉토리가 존재하지 않는 계정이 발견된 경우 +조치 방법 +홈 디렉토리가 존재하지 않는 계정에 홈 디렉토리 설정 또는 계정 제거하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) 사용자별 홈 디렉토리 확인 +# cat /etc/passwd +Step 2) 홈 디렉토리가 존재하지 않는 사용자 계정이 불필요한 계정일 경우, 해당 계정 삭제 +# userdel <사용자 이름> +Step 3) 사용중인 계정일 시, 해당 계정의 홈 디렉토리 설정 +# vi /etc/passwd +예시) example:x:1000:1000::/home/example:/bin/bash + + +![이미지 66-0](images/p0066_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +67 +U-33 +(하) +UNIX > 2. 파일 및 디렉토리 관리 +숨겨진 파일 및 디렉토리 검색 및 제거 +개요 +점검 내용 +숨겨진 파일 및 디렉토리 내 의심스러운 파일 존재 여부 점검 +점검 목적 +숨겨진 파일 및 디렉토리 중 의심스러운 내용은 정상 사용자가 아닌 공격자에 의해 생성되었을 가능성이 +높으므로 이를 제거하여 보안 위협을 방지하기 위함 +보안 위협 +숨겨진 파일 및 디렉토리를 방치할 경우, 비인가자가 생성한 악성 파일 또는 백도어 등을 탐지하지 못할 +위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거한 경우 +취약 : 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리를 제거하지 않은 경우 +조치 방법 +ls -al 명령어로 숨겨진 파일 존재 파악 후 불법적이거나 의심스러운 파일을 제거하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) 특정 디렉토리 내 불필요한 파일 확인 +# ls -al <디렉토리 이름> +Step 2) 숨겨진 파일 및 디렉토리 확인 +# find / -type f –name “.*” +# find / -type d -name “.*” +Step 3) 불필요하거나 의심스러운 숨겨진 파일 및 디렉토리 제거 +# rm <파일 이름> +# rm -r <디렉토리 이름> + + +![이미지 67-0](images/p0067_img0.png) + + +--- + +| 한국인터넷진흥원 | +68 +U-34 +(상) +UNIX > 3. 서비스 관리 +Finger 서비스 비활성화 +개요 +점검 내용 +Finger 서비스 비활성화 여부 점검 +점검 목적 +Finger 서비스를 통해 네트워크 외부에서 해당 시스템에 등록된 사용자 정보를 확인할 수 있어 +비인가자에게 사용자 정보가 조회되는 것을 방지하기 위함 +보안 위협 +Finger 서비스가 활성화되어 있을 경우, 비인가자가 Finger 서비스를 사용하여 사용자 정보를 조회한 +후 비밀번호 공격을 통해 계정을 탈취할 위험이 존재함 +참고 +※ Finger(사용자 정보 확인 서비스): who 명령어가 현재 사용 중인 사용자들에 대한 간단한 정보만을 +보여주는 데 반해 Finger 명령은 옵션에 따른 시스템에 등록된 사용자뿐만 아니라 네트워크를 +통하여 연결되어 있는 다른 시스템에 등록된 사용자들에 대한 자세한 정보를 보여줌 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : Finger 서비스가 비활성화된 경우 +취약 : Finger 서비스가 활성화된 경우 +조치 방법 +Finger 서비스 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS(5.9 이하 버전) +Step 1) /etc/inetd.conf 파일 내 Finger 서비스 활성화 여부 확인 및 비활성화 +Finger 서비스 항목 주석 처리 +예시) #finger stream tcp nowait bin /usr/lbin/fingered fingerd +Step 2) inetd 서비스 재시작 +l SOLARIS(5.10 이상 버전) +Step 1) Finger 서비스 활성화 여부 확인 +# inetadm | grep finger +Step 2) Finger 서비스 데몬 중지 +#inetadm -d svc:/network/finger:default + + +![이미지 68-0](images/p0068_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +69 +l LINUX +[inetd] +Step 1) /etc/inetd.conf 파일 내 Finger 서비스 활성화 여부 확인 및 비활성화 +Finger 서비스 항목 주석 처리 +예시) #finger stream tcp nowait bin /usr/lbin/fingered fingerd +Step 2) inetd 서비스 재시작 +[xinetd] +Step 1) /etc/xinetd.d/finger 파일 내 Finger 서비스 활성화 여부 확인 및 비활성화 +finger의 disable 옵션을 yes로 수정 +Step 2) 설정 적용 및 xinetd 서비스 재시작 +# systemctl restart xinetd +l AIX, HP-UX +Step 1) /etc/inetd.conf 파일 내 Finger 서비스 활성화 여부 확인 및 비활성화 +Finger 서비스 항목 주석 처리 +예시) #finger stream tcp nowait bin /usr/lbin/fingered fingerd +Step 2) inetd 서비스 재시작 + + +![이미지 69-0](images/p0069_img0.png) + + +--- + +| 한국인터넷진흥원 | +70 +U-35 +(상) +UNIX > 3. 서비스 관리 +공유 서비스에 대한 익명 접근 제한 설정 +개요 +점검 내용 +공유 서비스의 익명 접근 제한 설정 여부 점검 +점검 목적 +공유 서비스의 익명 접근을 제한하여 중요 정보의 노출을 방지하기 위함 +보안 위협 +공유 서비스의 익명 접근을 허용할 경우, 비인가자의 무단 접근으로 인한 중요 정보 탈취 또는 변조, +악성 코드 유포 등의 위험이 존재함 +참고 +※ 익명 접속이 허용된 서버에 익명 사용자에 대해 쓰기 권한이 부여되어 있는 경우, 정상 파일에 대해 +변조가 가능하므로 공개된 디렉터리 내 중요 데이터 여부를 주기적으로 확인해야 함 +※ 공유 서비스를 사용하지 않는 경우 양호 또는 N/A +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 공유 서비스에 대해 익명 접근을 제한한 경우 +취약 : 공유 서비스에 대해 익명 접근을 허용한 경우 +조치 방법 +공유 서비스의 익명 접근 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +[기본 FTP] +Step 1) FTP 계정 확인 +# cat /etc/passwd | grep ftp +# cat /etc/passwd | grep anonymous +Step 2) FTP 계정 제거 +# userdel ftp +# userdel anonymous +[vsFTP] +Step 1) Anonymous FTP 활성화 여부 확인 +# cat /etc/vsftpd/vsftpd.conf | grep anonymous_enable + + +![이미지 70-0](images/p0070_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +71 +Step 2) Anonymous FTP 비활성화 +# vi /etc/vsftpd/vsftpd.conf +anonymous_enable 옵션을 NO로 수정 +[ProFTP] +Step 1) Anonymous FTP 활성화 여부 확인 +# sed –n ‘//,/<\/Anonymous>/p’ /etc/proftpd/proftpd.conf +Step 2) Anonymous FTP 비활성화 +# vi /etc/proftpd/proftpd.conf +Anonymous 필드 주석 처리 +※ User, UserAlias 옵션이 설정된 경우 익명 접근이 활성화되어 있는 상태 +[NFS] +Step 1) 익명 접근 활성화 여부 확인 +# cat /etc/dfs/dfstab | grep anon +Step 2) 익명 접근 비활성화 +# vi /etc/dfs/dfstab +anon 옵션을 -1로 수정 +예시) share -F nfs -o rw, anon=-1 /home/example +Step 3) NFS 서비스 재시작 +# exportfs –u +# exportfs –a +[Samba] +Step 1) 익명 접근 허용 여부 확인 +# cat /etc/samba/smb.conf | grep “guset ok” +Step 2) 익명 사용자 접근 비활성화 +# vi /etc/samba/smb.conf +guest ok 옵션을 no로 수정 +Step 3) 변경된 설정 적용 및 재시작 + + +![이미지 71-0](images/p0071_img0.png) + + +--- + +| 한국인터넷진흥원 | +72 +# svcadm refresh samba +l LINUX +[기본 FTP] +Step 1) FTP 계정 확인 +# cat /etc/passwd | grep ftp +# cat /etc/passwd | grep anonymous +Step 2) FTP 계정 제거 +# userdel ftp +# userdel anonymous +[vsFTP] +Step 1) Anonymous FTP 활성화 여부 확인 +# cat /etc/vsftpd.conf | grep anonymous_enable +# cat /etc/vsftpd/vsftpd.conf | grep anonymous_enable +Step 2) Anonymous FTP 비활성화 +# vi /etc/vsftpd/vsftpd.conf +anonymous_enable 옵션을 NO로 수정 +Step 3) 변경된 설정 적용 및 재시작 +# systemctl restart vsftpd +[ProFTP] +Step 1) Anonymous FTP 활성화 여부 확인 +# sed -n ‘//,/<\/Anonymous>/p’ /etc/proftpd.conf +# sed –n ‘//,/<\/Anonymous>/p’ /etc/proftpd/proftpd.conf +Step 2) Anonymous FTP 비활성화 +# vi /etc/proftpd/proftpd.conf +Anonymous 필드 주석 처리 +Step 3) 변경된 설정 적용 및 재시작 +# systemctl restart proftpd +※ User, UserAlias 옵션이 설정된 경우 익명 접근이 활성화되어 있는 상태 + + +![이미지 72-0](images/p0072_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +73 +[NFS] +Step 1) 익명 접근 활성화 여부 확인 +# cat /etc/exports | grep -E “anonuid|anongid” +Step 2) 익명 접근 비활성화 +# vi /etc/exports +anon 옵션값 삭제 +예시) /home/nfs-server *(rw,sync,no_subtree_check) +Step 3) NFS 서비스 재시작 +# exportfs –ra +※ anon 옵션이 설정된 경우 익명 접근이 활성화되어 있는 상태 +[Samba] +Step 1) 익명 접근 허용 여부 확인 +# cat /etc/samba/smb.conf | grep “guset ok” +Step 2) 익명 사용자 접근 비활성화 +# vi /etc/samba/smb.conf +guest ok 옵션을 no로 수정 +Step 3) 변경된 설정 적용 및 재시작 +# smbcontrol all reload-config +l AIX +[기본 FTP] +Step 1) FTP 계정 확인 +# cat /etc/passwd | grep ftp +# cat /etc/passwd | grep anonymous +Step 2) FTP 계정 제거 +# rmuser ftp +# rmuser anonymous + + +![이미지 73-0](images/p0073_img0.png) + + +--- + +| 한국인터넷진흥원 | +74 +[vsFTP] +Step 1) Anonymous FTP 활성화 여부 확인 +# cat /etc/vsftpd.conf | grep anonymous_enable +Step 2) Anonymous FTP 비활성화 +# vi /etc/vsftpd.conf +anonymous_enable 옵션을 NO로 수정 +Step 3) 서비스 재시작 +# kill -1 +[ProFTP] +Step 1) Anonymous FTP 활성화 여부 확인 +# sed -n ‘//,/<\/Anonymous>/p’ /etc/proftpd.conf +Step 2) Anonymous FTP 비활성화 +# vi /etc/proftpd.conf +Anonymous 필드 주석 처리 +Step 3) 서비스 재시작 +# kill –1 +※ User, UserAlias 옵션이 설정된 경우 익명 접근이 활성화되어 있는 상태 +[NFS] +Step 1) 익명 접근 활성화 여부 확인 +# cat /etc/exports | grep anon +Step 2) 익명 접근 비활성화 +# vi /etc/exports +anon 옵션을 -1로 수정 +예시) /home/example -sec=sys:krb5p:krb5i:krb5:dh,ro=host1, access=host1, anon=-1 +Step 3) NFS 서비스 재시작 +# exportfs –u +# exportfs –a +※ anon 옵션이 -1이 아닌 경우 익명 접근이 활성화되어 있는 상태 + + +![이미지 74-0](images/p0074_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +75 +[Samba] +Step 1) 익명 접근 허용 여부 확인 +# cat /usr/lib/smb.conf | grep “guset ok” +Step 2) 익명 사용자 접근 비활성화 +# vi /usr/lib/smb.conf +guest ok 옵션을 no로 수정 +Step 3) Samba 서비스 중지 및 재실행 +# stopsrc –s smbd +# startsrc -s smbd +l HP-UX +[기본 FTP] +Step 1) FTP 계정 확인 +# cat /etc/passwd | grep ftp +# cat /etc/passwd | grep anonymous +Step 2) FTP 계정 제거 +# userdel ftp +# userdel anonymous +[vsFTP] +Step 1) Anonymous FTP 활성화 여부 확인 +# cat /etc/vsftpd.conf | grep anonymous_enable +Step 2) Anonymous FTP 비활성화 +# vi /etc/vsftpd.conf +anonymous_enable 옵션을 NO로 수정 +Step 3) 서비스 재시작 +# kill -1 +[ProFTP] +Step 1) Anonymous FTP 활성화 여부 확인 + + +![이미지 75-0](images/p0075_img0.png) + + +--- + +| 한국인터넷진흥원 | +76 +# sed -n ‘//,/<\/Anonymous>/p’ /etc/proftpd.conf +Step 2) Anonymous FTP 비활성화 +# vi /etc/proftpd.conf +Anonymous 필드 주석 처리 +Step 3) 서비스 재시작 +# kill –1 +[NFS] +Step 1) 익명 접근 활성화 여부 확인 +# cat /etc/exports | grep anon +# cat /etc/dfs/dfstab | grep anon +Step 2) 익명 접근 비활성화 +# vi /etc/exports +# vi /etc/dfs/dfstab +anon 옵션을 -1로 수정 +예시) /home/example –access=bear,anon=-1,ro +예시) share -F nfs -o rw, anon=-1 /home/example +Step 3) NFS 서비스 재시작 +# exportfs –u +# exportfs –a +※ HP-UX 11i v3에서는 /etc/dfs/dfstab 파일을 사용함 +※ anon 옵션이 -1이 아닌 경우 익명 접근이 활성화되어 있는 상태 +[Samba] +Step 1) 익명 접근 허용 여부 확인 +# cat /usr/lib/smb.conf | grep “guset ok” +Step 2) 익명 사용자 접근 비활성화 +# vi /usr/lib/smb.conf +guest ok 옵션을 no로 수정 +Step 3) 서비스 재시작 +# kill –1 + + +![이미지 76-0](images/p0076_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +77 +U-36 +(상) +UNIX > 3. 서비스 관리 +r 계열 서비스 비활성화 +개요 +점검 내용 +r-command 서비스 비활성화 여부 점검 +점검 목적 +r-command 사용을 통한 원격 접속은 NET Backup 또는 클러스터링 등 용도로 사용되기도 하나, +인증 없이 관리자 원격 접속이 가능하여 이에 대한 보안 위협을 방지하기 위함 +보안 위협 +rlogin, rsh, rexec 등의 r-command를 이용하여 원격에서 인증 절차 없이 터미널 접속, 쉘 명령어를 +실행이 가능한 위험이 존재함 +참고 +※ r-command: 인증 없이 관리자의 원격 접속을 가능하게 하는 명령어들로 rsh(remsh), rlogin, +rexec, rsync 등이 있음 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 불필요한 r 계열 서비스가 비활성화된 경우 +취약 : 불필요한 r 계열 서비스가 활성화된 경우 +조치 방법 +불필요한 r 계열 서비스 중지 및 비활성화 설정 +※ NET Backup 등 특별한 용도로 사용하지 않는다면 shell(514), login(513), exec(512) 서비스 중 +지 +※ rlogin, rsh, rexec 서비스는 backup, 클러스터링 등의 용도로 종종 사용되고 있으므로 해당 서비 +스 사용 유무를 확인하여 미사용시 서비스 중지 +※ /etc/hosts.equiv 또는 $HOME/.rhosts 파일을 통해 해당 서비스 사용 여부 확인 (파일이 존재 +하지 않거나 해당 파일 내에 설정이 없다면 사용하지 않는 것으로 간주) +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS(5.9 이하 버전) +Step 1) /etc/inetd.conf 파일 내 불필요한 r 계열 서비스 활성화 여부 확인 +# vi /etc/inetd.conf +Step 2) 불필요한 r 계열 서비스 관련 필드 주석처리 +예시) #shell stream tcp nowait root /usr/sbin/in.rshd in.rshd +Step 3) 서비스 재시작 +# kill -HUP [inetd PID] + + +![이미지 77-0](images/p0077_img0.png) + + +--- + +| 한국인터넷진흥원 | +78 +l SOLARIS(5.10 이상 버전) +Step 1) 불필요한 r 계열 서비스 활성화 여부 확인 +# inetadm | egrep “shell|rlogin|rexec” +Step 2) 불필요한 r 계열 서비스 데몬 중지 +# inetadm -d +l LINUX +[inetd] +Step 1) /etc/inetd.conf 파일 내 불필요한 r 계열 서비스 활성화 여부 확인 +Step 2) 불필요한 r 계열 서비스 관련 필드 주석 처리 +# vi /etc/inetd.conf +예시) # rlogin stream tcp nowait root /usr/sbin/in.rlogind in.rlogind +Step 3) inetd 서비스 재시작 +[xinetd] +Step 1) /etc/xinetd.d/<파일 이름> 파일 내 불필요한 r 계열 서비스 활성화 여부 확인 +Step 2) 불필요한 r 계열 서비스 비활성화 +disable 값을 yes로 수정 +Step 3) 설정 적용 및 서비스 재시작 +# systemctl restart xinetd +[systemd] +Step 1) 불필요한 r 계열 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep –E “rlogin|rsh|rexec” +Step 2) 현재 가동되고 있는 r 계열 서비스 중지 +# systemctl stop <서비스 이름> +Step 3) 불필요한 r 계열 서비스 비활성화 +# systemctl disable <서비스 이름> + + +![이미지 78-0](images/p0078_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +79 +l AIX, HP-UX +[inetd] +Step 1) /etc/inetd.conf 파일 내 불필요한 r 계열 서비스 활성화 여부 확인 +Step 2) 불필요한 r 계열 서비스 관련 필드 주석 처리 +# vi /etc/inetd.conf +예시) #login stream tcp6 nowait root /usr/sbin/rlogind rlogind +Step 3) 변경된 설정 적용 +- AIX : # refresh –s inetd +-HP-UX : # inetd -c +[r-command] +Step 1) /etc/inetd.conf 파일 내 불필요한 r 계열 서비스 활성화 여부 확인 +Step 2) /etc/hosts.equiv, $HOME/.rhosts 파일에 접근을 허용할 사용자 이름 또는 IP주소 설정 +Step 3) /etc/hosts.equiv, $HOME/.rhosts 파일 권한을 600 이하로 설정 + + +![이미지 79-0](images/p0079_img0.png) + + +--- + +| 한국인터넷진흥원 | +80 +U-37 +(상) +UNIX > 3. 서비스 관리 +crontab 설정파일 권한 설정 미흡 +개요 +점검 내용 +crontab 및 at 서비스 관련 파일의 권한 적절성 여부 점검 +점검 목적 +관리자 외에는 서비스를 사용할 수 없도록 설정하고 있는지 점검하기 위함 +보안 위협 +일반 사용자가 crontab 및 at 서비스를 사용할 수 있을 경우, 고의 또는 실수로 불법적인 예약 파일 +실행으로 시스템 피해를 일으킬 수 있는 위험이 존재함 +참고 +※ cron 시스템: 특정 작업을 정해진 시간에 주기적이고 반복적으로 실행하기 위한 데몬 및 설정 +※ cron.allow: 사용자 ID를 등록하면 등록된 사용자는 crontab 명령어 사용이 가능함 +※ cron.deny: 사용자 ID를 등록하면 등록된 사용자는 crontab 명령어 사용이 불가능함 +※ at 서비스(일회성 작업 예약): 지정한 시간에 어떠한 작업이 실행될 수 있도록 작업 스케줄을 예약 +처리해 주는 기능을 제공함. /etc/at.allow 파일에 등록된 사용자만이 at 명령을 사용할 수 있음 +※ 기반시설 시스템에서 at 서비스의 이용은 원칙적으로 금지하나, 불가피하게 사용 시 소유자 및 권한 +설정 등의 보안 조치를 반드시 적용해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : crontab 및 at 명령어에 일반 사용자 실행 권한이 제거되어 있으며, cron 및 at 관련 파일 권한이 +640 이하인 경우 +취약 : crontab 및 at 명령어에 일반 사용자 실행 권한이 부여되어 있으며, cron 및 at 관련 파일 권한이 +640 이상인 경우 +조치 방법 +crontab 및 at 명령어 파일 권한 750 이하, cron 및 at 관련 파일 소유자 및 파일 권한 640 이하 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) crontab, cron 작업 목록 파일, cron 관련 파일 소유자 및 권한 확인 +# ls –l /usr/bin/crontab +# ls -l /var/spool/cron/crontabs/ +# ls -l /etc/cron.d/ +Step 2) at, at 작업 목록 파일 소유자 및 권한 확인 +# ls –l /usr/bin/at +# ls -l /var/spool/cron/atjobs/ + + +![이미지 80-0](images/p0080_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +81 +Step 3) crontab 파일 및 at 파일 소유자를 root로, 파일 권한을 750으로 변경 +Step 4) cron 작업 목록 파일, cron 관련 파일 및 at 작업 목록 파일 소유자를 root로, 파일 권한을 640으로 변경 +※ crontab 및 at 명령어는 SUID가 설정되어 있으므로 SUID 설정 제거 필요 +l LINUX +Step 1) crontab, cron 작업 목록 파일, cron 관련 파일 소유자 및 권한 확인 +# ls –l /usr/bin/crontab +# ls -l /var/spool/cron/, # ls -l /var/spool/cron/crontabs/ +# ls -l /etc/ +Step 2) at, at 작업 목록 파일 소유자 및 권한 확인 +# ls –l /usr/bin/at +# ls -l /var/spool/at/, # ls -l /var/spool/cron/atjobs/ +Step 3) crontab 파일 및 at 파일 소유자를 root로, 파일 권한을 750으로 변경 +Step 4) cron 작업 목록 파일, cron 관련 파일 및 at 작업 목록 파일 소유자를 root로, 파일 권한을 640으로 변경 +※ crontab 및 at 명령어는 SUID가 설정되어 있으므로 SUID 설정 제거 필요 +l AIX, HP-UX +Step 1) crontab, cron 작업 목록 파일, cron 관련 파일 소유자 및 권한 확인 +# ls –l /usr/bin/crontab +# ls -l /var/spool/cron/crontabs/ +# ls -l /var/adm/cron/ +Step 2) at, at 작업 목록 파일 소유자 및 권한 확인 +# ls –l /usr/bin/at +# ls -l /var/spool/cron/atjobs/ +Step 3) crontab 파일 및 at 파일 소유자를 root로, 파일 권한을 750으로 변경 +Step 4) cron 작업 목록 파일, cron 관련 파일 및 at 작업 목록 파일 소유자를 root로, 파일 권한을 640으로 변경 +※ crontab 및 at 명령어는 SUID가 설정되어 있으므로 SUID 설정 제거 필요 + + +![이미지 81-0](images/p0081_img0.png) + + +--- + +| 한국인터넷진흥원 | +82 +cron 관련 설정 파일 +설명 +crontab +예약 작업을 등록하는 파일 +cron.hourly +시간 단위 예약 실행 스크립트 등록 파일 +cron.daily +일 단위 예약 실행 스크립트 등록 파일 +cron.weekly +주 단위 예약 실행 스크립트 등록 파일 +cron.monthly +월 단위 예약 실행 스크립트 등록 파일 +cron.allow +crontab 명령어 허용 사용자 등록 파일 +cron.deny +crontab 명령어 차단 사용자 등록 파일 +/var/spool/cron 또는 +/var/spool/cron/crontab +사용자별 설정된 cron 작업 목록 +※ cron.allow, cron.deny 두 파일 모두 존재하지 않을 시, root 계정만 cron 등록 가능 +at 관련 설정 파일 +설명 +at +예약 작업을 등록하는 파일 +at.allow +at 명령어 허용 사용자 등록 파일 +at.deny +at 명령어 차단 사용자 등록 파일 +/var/spool/at 또는 +/var/spool/cron/atjobs +사용자별 설정된 at 작업 목록 +※ at.allow, at.deny 두 파일 모두 존재하지 않을 시, root 계정만 at 등록 가능 + + +![이미지 82-0](images/p0082_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +83 +U-38 +(상) +UNIX > 3. 서비스 관리 +DoS 공격에 취약한 서비스 비활성화 +개요 +점검 내용 +사용하지 않는 DoS 공격에 취약한 서비스의 실행 여부 점검 +점검 목적 +많은 취약점을 가진 echo, discard, daytime, chargen, ntp, snmp 등의 서비스를 중지하여 +시스템의 보안성을 높이기 위함 +보안 위협 +해당 서비스가 활성화된 경우, 시스템 정보 유출 및 DoS 공격의 대상이 될 수 있는 위험이 존재함 +참고 +※ DoS(Denial of Service attack): 시스템을 악의적으로 공격해 해당 시스템의 자원을 부족하게 +하여 원래 의도된 용도로 사용하지 못하게 하는 공격. 특정 서버에게 수많은 접속 시도를 만들어 +다른 이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP 연결을 바닥내는 등의 +공격이 이 범위에 포함됨 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : DoS 공격에 취약한 서비스가 비활성화된 경우 +취약 : DoS 공격에 취약한 서비스가 활성화된 경우 +조치 방법 +echo, discard, daytime, chargen, ntp, dns, snmp 등의 서비스 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) 서비스 데몬 활성화 여부 확인 +# inetadm | grep enable | egrep “echo|discard|daytime|chargen” +Step 2) 불필요한 서비스 데몬 중지 +# inetadm -d <중지하고자 하는 서비스 데몬> +l LINUX +[inetd] +Step 1) /etc/inetd.conf 파일 내 서비스 활성화 여부 확인 +서비스 대상: echo, discard, daytime, chargen +Step 2) /etc/inetd.conf 파일 수정(주석 제거) + + +![이미지 83-0](images/p0083_img0.png) + + +--- + +| 한국인터넷진흥원 | +84 +예시) echo stream tcp nowait root internal +Step 3) inetd 서비스 재시작 +# inetd +[xinetd] +Step 1) /etc/xinetd.d/<파일명> 파일 내 서비스 활성화 여부 확인 +예시) service echo{ +disable = no +... +} +Step 2) 서비스 비활성화 +disable = yes +Step 3) 설정 적용 및 서비스 재시작 +# service xinetd restart +[systemd] +Step 1) 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep -E “echo|discard|daytime|chargen” +Step 2) 서비스 중지 +# systemctl stop <서비스명> +Step 3) 서비스 비활성화 +# systemctl disable <서비스명> +l AIX, HP-UX +Step 1) /etc/inetd.conf 파일 내 서비스 활성화 여부 확인 +대상 서비스: echo, discard, daytime, chargen +Step 2) /etc/inetd.conf 파일 수정(주석 처리) +# echo stream tcp nowait root internal +# discard +stream tcp nowait root internal +# chargen stream tcp nowait root internal +# daytime stream tcp nowait root internal + + +![이미지 84-0](images/p0084_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +85 +# echo dgram udp wait root internal +# discard +dgram udp wait root internal +# chargen dgram udp wait root internal +# daytime dgram udp wait root internal +Step 3) 설정 적용 +[AIX] +refresh –s inetd +[HP-UX] +inetd -c +DoS 공격에 취약한 서비스 예시 +서비스 (포트) +설명 +echo (7) +클라이언트에서 보내는 메시지를 단순히 재전송하는 서비스 +discard (9) +수신되는 임의 사용자의 데이터를 폐기하는 서비스 +daytime (13) +클라이언트의 질의에 응답하여 아스키 형태로 현재 시간과 날짜를 출력하는 서비스 +chargen (19) +임의 길이의 문자열을 반환하는 서비스 +NTP (123) +네트워크로 연결되어 있는 컴퓨터들끼리 시각을 동기화하는 서비스 +DNS (53) +호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행하는 +서비스 +SNMP (161/162) +네트워크 장비들로부터 필요한 정보를 가져와 장비 상태를 모니터링하거나, 설정값을 +변경하는 등의 작업을 하여 네트워크 장비를 관리하는데 사용되는 서비스 +SMTP (25) +인터넷에서 메일을 보내기 위해 사용되는 서비스 + + +![이미지 85-0](images/p0085_img0.png) + + +--- + +| 한국인터넷진흥원 | +86 +U-39 +(상) +UNIX > 3. 서비스 관리 +불필요한 NFS 서비스 비활성화 +개요 +점검 내용 +불필요한 NFS 서비스 사용 여부 점검 +점검 목적 +NFS(Network File System) 서비스는 한 서버의 파일을 많은 서비스 서버들이 공유하여 사용할 때 +이용하는 서비스지만 이를 이용한 침해사고 위험성이 높으므로 사용하지 않는 경우 중지하기 위함 +보안 위협 +NFS 서비스는 서버의 디스크를 클라이언트와 공유하는 서비스로 적정한 보안 설정이 적용되어 있지 +않다면 불필요한 파일 공유로 인한 유출 위험이 존재함 +참고 +※ NFS(Network File System): 원격 컴퓨터의 파일 시스템을 로컬 시스템에 마운트하여 로컬 파일 +시스템처럼 사용할 수 있는 프로그램 +※ NFS 서비스 사용은 원칙적으로 금지되어 있지만 불가피하게 사용 시 필요한 경우 U-40 항목을 +참조하여 통제해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 불필요한 NFS 서비스 관련 데몬이 비활성화된 경우 +취약 : 불필요한 NFS 서비스 관련 데몬이 활성화된 경우 +조치 방법 +NFS 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +※ 로컬 서버에 마운트 되어 있는 디렉터리 제거 및 공유 디렉터리 제거 후 서비스 중지 가능 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) NFS 서비스 데몬 활성화 확인 +# inetadm | egrep “nfs|statd|lockd” +Step 2) 불필요한 서비스 데몬 중지 +# inetadm -d <중지하고자 하는 서비스 데몬> +l LINUX +Step 1) NFS 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep nfs +Step 2) 불필요한 NFS 서비스 중지 + + +![이미지 86-0](images/p0086_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +87 +# systemctl stop <서비스명> +Step 3) NFS 서비스 비활성화 +# systemctl disable <서비스명> +l AIX +[process 점검] +Step 1) NFS 프로세스 활성화 여부 확인 +# ps -ef | grep nfsd +Step 2) NFS 서비스 관련 데몬 중지 +# kill –9 +Step 3) NFS 시동 스크립트 위치 확인 +# ls -al /etc/rc.d/rc*.d/* | grep nfs +Step 4) NFS 시동 스크립트 이름 변경 +# mv /etc/rc.d/rc2.d/S60nfs /etc/rc.d/rc2.d/_S60nfs +[service 점검] +Step 1) NFS 서비스 활성화 여부 확인 +# lssrc -a | grep nfs +Step 2) NFS 서비스 관련 데몬 중지 +# stopsrc -g nfs +Step 3) /etc/inittab 파일 수정(주석 처리) +# rcnfs:23456789:wait:/etc/rc.nfs > /dev/console +# Start NFS Daemons +Step 4) /etc/inittab 파일 설정 적용 +#init q +l HP-UX +Step 1) NFS 서비스 활성화 여부 확인 및 관련 데몬 PID 확인 +# ps -ef | grep -E “nfsd|statd|lockd” +Step 2) NFS 서비스 관련 데몬 중지 +# kill -9 + + +![이미지 87-0](images/p0087_img0.png) + + +--- + +| 한국인터넷진흥원 | +88 +Step 3) /etc/rc.config.d/nfsconf 파일 수정 +NFS_SERVER=0 +Step 4) 설정 적용 +# /usr/sbin/nfs.server start + + +![이미지 88-0](images/p0088_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +89 +U-40 +(상) +UNIX > 3. 서비스 관리 +NFS 접근 통제 +개요 +점검 내용 +NFS(Network File System)의 접근 통제 설정 적용 여부 점검 +점검 목적 +접근 권한이 없는 비인가자의 접근을 통제하기 위함 +보안 위협 +접근 통제 설정이 적절하지 않을 경우, 인증 절차 없이 비인가자가 디렉터리나 파일의 접근이 가능하며, +해당 공유 시스템에 원격으로 마운트하여 중요 파일을 변조하거나 유출할 위험이 존재함 +참고 +※ NFS 서비스 사용 금지가 원칙이나, 불가피하게 사용 시 NFS v2, v3는 평문으로 전송되는 +취약점이 있으므로 암호화되는 v4를 사용하는 것을 권고함 +※ NFS 서비스를 사용해야 하는 경우, NFS 설정 파일에 꼭 필요한 디렉터리만 설정하고, 허가된 +사용자만 접근할 수 있도록 올바른 접근 통제를 설정해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 접근 통제가 설정되어 있으며 NFS 설정 파일 접근 권한이 644 이하인 경우 +취약 : 접근 통제가 설정되어 있지 않고 NFS 설정 파일 접근 권한이 644를 초과하는 경우 +조치 방법 +Ÿ NFS 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ 불가피하게 사용 시 접근 통제 설정 및 NFS 설정 파일 접근 권한 644 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) 파일 소유자 및 권한 확인 +# ls -l /etc/dfs/dfstab +# ls -l /etc/dfs/sharetab +Step 2) /etc/dfs/dfstab 파일 내 공유 중인 디렉터리에 접근할 수 있는 사용자 및 부여 권한 확인 +Step 3) 파일 소유자를 root로 변경 +# chown root /etc/dfs/dfstab +Step 4) 파일 권한을 644로 변경 +# chmod 644 /etc/dfs/dfstab + + +![이미지 89-0](images/p0089_img0.png) + + +--- + +| 한국인터넷진흥원 | +90 +Step 5) /etc/dfs/dfstab 파일에 디렉터리 공유를 허용할 사용자 및 해당 사용자의 권한 설정 +예시) 사용자의 읽기, 쓰기 권한 접속 허용 : share -F nfs -o rw, ro /export/home/example +사용자의 권한 접속 제한 : share -F nfs -o rw=client1:client2, ro=client1:client2 /export/home/example +Step 6) NFS 서비스 설정 적용 +# shareall +※ 읽기(ro), 쓰기(rw) 권한에 각각 사용자를 설정하여야 읽기, 쓰기 권한 모두 제한 가능 +l LINUX +Step 1) 파일 소유자 및 권한 확인 +# ls -l /etc/exports +Step 2) /etc/exports 파일 내 공유 중인 디렉터리에 접근할 수 있는 사용자 및 부여 권한 확인 +# cat /etc/exports +Step 3) 파일 소유자를 root로 변경 +# chown root /etc/exports +Step 4) 파일 권한을 644로 변경 +# chmod 644 /etc/exports +Step 5) /etc/exports 파일에 디렉터리 공유를 허용할 사용자 및 해당 사용자의 권한 설정 +예시) /home/example +host1 (ro, root_squash) +Step 6) NFS 서비스 설정 적용 +# exportfs -ra +l AIX +Step 1) 파일 소유자 및 권한 확인 +# ls -l /etc/exports +Step 2) /etc/exports 파일 내 공유 중인 디렉터리에 접근할 수 있는 사용자 및 부여 권한 확인 +# cat /etc/exports +Step 3) 파일 소유자를 root로 변경 +# chown root /etc/exports +Step 4) 파일 권한을 644로 변경 +# chmod 644 /etc/exports + + +![이미지 90-0](images/p0090_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +91 +Step 5) /etc/exports 파일에 디렉터리 공유를 허용할 사용자 및 해당 사용자의 권한 설정 +예시) /home/example –sec=sys:krb5p:krb5i:krb5:dh,ro=host1, access=host1 +Step 6) NFS 서비스 재시작 +# exportfs -u, exportfs –a +l HP-UX +[/etc/dfs/dfstab] +Step 1) 파일 소유자 및 권한 확인 +# ls -l /etc/dfs/dfstab +# ls -l /etc/dfs/sharetab +Step 2) /etc/dfs/dfstab 파일 내 공유 중인 디렉터리에 접근할 수 있는 사용자 및 부여 권한 확인 +# cat /etc/dfs/dfstab +Step 3) 파일 소유자를 root로 변경 +# chown root /etc/dfs/dfstab +Step 4) 파일 권한을 644로 변경 +# chmod 644 /etc/dfs/dfstab +Step 5) /etc/dfs/dfstab 파일에 디렉터리 공유를 허용할 사용자 및 해당 사용자의 권한 설정 +예시) 사용자의 읽기, 쓰기 권한 접속 허용 : share -F nfs -o rw, ro /export/home/example +사용자의 권한 접속 제한 : share -F nfs -o rw=client1:client2, ro=client1:client2 /export/home/example +Step 6) NFS 서비스 설정 적용 +# shareall +※ 읽기(ro), 쓰기(rw) 권한에 각각 사용자를 설정하여야 읽기, 쓰기 권한 모두 제한 가능 +[/etc/exports] +Step 1) 파일 소유자 및 권한 확인 +# ls -l /etc/exports +Step 2) /etc/exports 파일 내 디렉터리에 접근할 수 있는 사용자 및 부여 권한 확인 +# cat /etc/exports +Step 3) 파일 소유자를 root로 변경 +# chown root /etc/exports + + +![이미지 91-0](images/p0091_img0.png) + + +--- + +| 한국인터넷진흥원 | +92 +Step 4) 파일 권한을 644로 변경 +# chmod 644 /etc/exports +Step 5) /etc/exports 파일에 디렉터리 공유를 허용할 사용자 및 해당 사용자의 권한 설정 +예시) /home/example +host1 (ro, root_squash) +Step 6) NFS 서비스 설정 적용 +# exportfs -ra + + +![이미지 92-0](images/p0092_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +93 +U-41 +(상) +UNIX > 3. 서비스 관리 +불필요한 automountd 제거 +개요 +점검 내용 +automountd 서비스 데몬의 실행 여부 점검 +점검 목적 +로컬 공격자가 automountd 데몬에 RPC(Remote Procedure Call)를 보낼 수 있는 취약점이 +존재하기 때문에 해당 서비스를 중지시키기 위함 +보안 위협 +파일 시스템의 마운트 옵션을 변경하여 root 권한을 획득할 수 있으며, 로컬 공격자가 automountd +프로세스 권한으로 임의의 명령을 실행할 수 있는 위험이 존재함 +참고 +※ automountd: 클라이언트에서 자동으로 서버에 마운트를 시키고 일정 시간 사용하지 않으면 +unmount 시켜 주는 기능을 말함 +※ RPC(Remote Procedure Call): 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 +프로시저를 실행할 수 있게 하는 프로세스 간 프로토콜 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : automountd 서비스가 비활성화된 경우 +취약 : automountd 서비스가 활성화된 경우 +조치 방법 +automountd 서비스 비활성화 설정 +조치 시 영향 +NFS 및 삼바(Samba) 서비스에서 사용 시 automountd 사용 여부 확인이 필요하며, 적용 시 +CD-ROM의 자동 마운트는 이뤄지지 않음 (/etc/auto.*, /etc/auto_* 파일을 확인하여 필요 여부 +확인) +점검 및 조치 사례 +l SOLARIS +Step 1) automount 서비스 데몬 확인 +#svcs -a | grep autofs +Step 2) autofs 서비스 데몬 확인 +# svcs -l svc:/system/filesystem/autofs:default +Step 3) 서비스 데몬 중지 +# svcadm disable <중지하고자 하는 서비스 데몬> +Step 4) autumount 또는 autofs 데몬 제거 +# pkg uninstall <삭제할 관련 데몬의 패키지명> + + +![이미지 93-0](images/p0093_img0.png) + + +--- + +| 한국인터넷진흥원 | +94 +l LINUX +Step 1) automount 또는 autofs 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep -E “automount|autofs” +Step 2) automount 또는 autofs 서비스 중지 +# systemctl stop <서비스명> +Step 3) automount 또는 autofs 서비스 비활성화 +# systemctl disable <서비스명> +l AIX +[process 점검] +Step 1) automount 또는 autofs 서비스 활성화 여부 확인 +# ps -ef | grep automountd +# ps -ef | grep autofs +Step 2) autumount 또는 autofs 서비스 중지 +# kill -9 +Step 3) autumount 또는 autofs 데몬 제거 +# installp –u <삭제할 관련 데몬의 패키지명> +[service 점검] +Step 1) automount 또는 autofs 서비스 활성화 여부 확인 +# lssrc -a | grep -E “automountd|autofs” +Step 2) automount 또는 autofs 서비스 중지 +# stopsrc –s automountd +# stopsrc -s autofs +Step 3) /etc/inittab 파일 수정(주석 처리) +#automountd:2:once:/usr/sbin/automountd > /dev/console 2>$1 +Step 4) /etc/inittab 파일 설정 적용 +# init q + + +![이미지 94-0](images/p0094_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +95 +l HP-UX +Step 1) automount 또는 autofs 서비스 활성화 여부 확인 +# ps -ef | grep automountd +# ps -ef | grep autofs +Step 2) autumount 또는 autofs 서비스 중지 +# kill -9 +Step 3) /etc/rc.config.d/nfsconf 파일 수정 +AUTOFS=0 + + +![이미지 95-0](images/p0095_img0.png) + + +--- + +| 한국인터넷진흥원 | +96 +U-42 +(상) +UNIX > 3. 서비스 관리 +불필요한 RPC 서비스 비활성화 +개요 +점검 내용 +불필요한 RPC 서비스의 실행 여부 점검 +점검 목적 +많은 취약점(버퍼 오버플로우, DoS, 원격 실행 등)이 존재하는 RPC 서비스를 비활성화하여 시스템의 +보안성을 높이기 위함 +보안 위협 +RPC 서비스의 취약점을 통해 비인가자가 root 권한 획득 및 각종 공격을 시도할 위험이 존재함 +참고 +※ 불필요한 RPC 서비스: rpc.cmsd, rpc.ttdbserverd, sadmind, rusersd, walld, sprayd, +rstatd, rpc.nisd, rexd, rpc.pcnfsd, rpc.statd, rpc.ypupdated, rpc.rquotad, kcms_server, +cachefsd +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 불필요한 RPC 서비스가 비활성화된 경우 +취약 : 불필요한 RPC 서비스가 활성화된 경우 +조치 방법 +불필요한 RPC 서비스 중지 및 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) RPC 서비스 관련 데몬 확인 +# inetadm | grep rpc | grep enabled | egrep “ttdbserver|rex|rstart|rusers|spray|wall|rquota” +Step 2) 불필요한 RPC 서비스 확인 +# inetadm | egrep “ttbd|rex|rstat|ruser|spray|wall|rquoata +Step 3) 서비스 데몬 중지 +# svcadm disable <서비스 데몬> +l LINUX +[inetd] +Step 1) /etc/inetd.conf 파일 내 불필요한 RPC 서비스 활성화 여부 확인 +# cat /etc/inetd.conf + + +![이미지 96-0](images/p0096_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +97 +Step 2) etc/inetd.conf 파일 수정(주석 처리) +#rpc.cmsd/2-4 dgram rpc/udp wait root /usr/dt/bin/rpc.cmsd rpc.cmsd +Step 3) inetd 서비스 재시작 +# systemctl restart inetd +[xinetd] +Step 1) /etc/xinetd.d/ 디렉터리 내 존재하는 불필요한 RPC 서비스 활성화 여부 확인 +#cat /etc/xinetd.d/<파일명> +예시) service rpc-statd{ +disable = no +... +} +Step 2) /etc/xinetd.d/ 디렉터리 내 존재하는 불필요한 rpc 파일을 열어 disable 설정값 수정 +disable = yes +Step 3) 설정 적용 및 서비스 재시작 +# systemctl restart xinetd +[systemd] +Step 1) 불필요한 RPC 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep rpc +Step 2) 불필요한 RPC 서비스 중지 +# systemctl stop <서비스명> +Step 3) 불필요한 RPC 서비스 비활성화 +# systemctl disable <서비스명> +l AIX, HP-UX +Step 1) /etc/inetd.conf 파일 내 불필요한 RPC 서비스 활성화 여부 확인 +Step 2) /etc/inetd.conf 파일 수정(주석 처리) +# rexd sunrpc_tcp tcp wait root /usr/sbin/rpc.rexd rexd 100017 1 +# rstatd sunrpc_udp udp wait root /usr/sbin/rpc.rstatd rstatd 100001 1-3 +Step 3) inetd 설정 적용 + + +![이미지 97-0](images/p0097_img0.png) + + +--- + +| 한국인터넷진흥원 | +98 +[AIX] +refresh –s inetd +[HP-UX] +inetd –c + + +![이미지 98-0](images/p0098_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +99 +U-43 +(상) +UNIX > 3. 서비스 관리 +NIS, NIS+ 점검 +개요 +점검 내용 +안전하지 않은 NIS 서비스의 비활성화, 안전한 NIS+ 서비스의 활성화 여부 점검 +점검 목적 +안전하지 않은 NIS 서비스를 비활성화하고 안전한 NIS+ 서비스를 활성화하여 시스템의 보안성을 +높이기 위함 +보안 위협 +NIS 서비스가 활성화된 경우, 비인가자가 타 시스템의 root 권한까지 탈취할 수 있는 위험이 존재함 +참고 +※ NIS 주 서버는 정보표를 소유하여 NIS 대응 파일들로 변환하고, 이 대응 파일들이 네트워크를 통해 +제공됨으로써 모든 컴퓨터에 정보가 갱신되도록 함. 네트워크를 통한 공유로부터 관리자와 +사용자들에게 일관성 있는 시스템 환경을 제공함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : NIS 서비스가 비활성화되어 있거나, 불가피하게 사용 시 NIS+ 서비스를 사용하는 경우 +취약 : NIS 서비스가 활성화된 경우 +조치 방법 +NIS 관련 서비스 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) NIS 서비스 데몬 구동 여부 확인 +# svcs -a |grep nis +Step 2) NIS 관련 서비스 데몬 확인 +# svcs -a | grep nis +Step 3) NIS 서비스 데몬 중지 +# svcadm disable <서비스 데몬> +l LINUX +Step 1) NIS 관련 서비스 데몬 활성화 여부 확인 +# systemctl list-units --type=service | grep –E “ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated” + + +![이미지 99-0](images/p0099_img0.png) + + +--- + +| 한국인터넷진흥원 | +100 +Step 2) NIS 관련 서비스 데몬 중지 +# systemctl stop <서비스명> +Step 3) NIS 관련 서비스 데몬 비활성화 +# systemctl disable <서비스명> +※ Redhat 계열 리눅스는 RHEL 8 버전부터 NIS(yp rpms) 패키지가 제거되었음 +l AIX +[process 점검] +Step 1) NIS 관련 서비스 데몬 활성화 여부 확인 +# ps -ef | grep -E “ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated” +Step 2) NIS 관련 서비스 중지 +# kill –9 +Step 3) NIS 관련 서비스 시동 스크립트 위치 확인 +# ls -al /etc/rc.d/rc*.d/* | grep –E “ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated” +Step 4) NIS 관련 서비스 시동 스크립트 이름 변경 +# mv /etc/rc.d/rc2.d/S73ypbind /etc/rc.d/rc2.d/_S73ypbind +[service 점검] +Step 1) NIS 관련 서비스 데몬 활성화 여부 확인 +# lssrc -a | grep -E “ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated” +Step 2) NIS 관련 서비스 중지 +# stopsrc -s +Step 3) etc/inittab 파일 수정(주석 처리) +#ypserv:2:wait:/usr/lib/netsvc/yp/ypserv >> /dev/console 2>&1 +#ypbind:2:wait:/usr/lib/netsvc/yp/ypbind >> /dev/console 2>&1 +Step 4) /etc/inittab 파일 설정 적용 +# init q +l HP-UX +Step 1) NIS 관련 서비스 데몬 활성화 여부 확인 + + +![이미지 100-0](images/p0100_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +101 +# ps -ef | grep -E “ypserv|ypbind|ypxfrd|rpc.yppasswdd|rpc.ypupdated” +Step 2) NIS 관련 서비스 중지 +# kill -9 +Step 3) etc/rc.config.d/namesrvs 파일 수정 +NIS_MASTER_SERVER=0 +NIS_SLAVE_SERVER=0 +NIS_CLIENT_SERVER=0 +NIS 관련 서비스 데몬 +설명 +ypserv +master와 slave 서버에서 실행되며 클라이언트로부터의 ypbind 요청에 응답 +ypbind +모든 NIS 시스템에서 실행되며 클라이언트와 서버를 바인딩하고 초기화함 +rpc.yppasswdd +사용자들이 비밀번호를 변경하기 위해 사용 +ypxfrd +NIS 마스터 서버에서만 실행되며 고속으로 NIS 맵 전송 +rpc.ypupdated +NIS 마스터 서버에서만 실행되며 고속으로 암호화하여 NIS 맵 전송 + + +![이미지 101-0](images/p0101_img0.png) + + +--- + +| 한국인터넷진흥원 | +102 +U-44 +(상) +UNIX > 3. 서비스 관리 +tftp, talk 서비스 비활성화 +개요 +점검 내용 +tftp, talk, ntalk 서비스의 활성화 여부 점검 +점검 목적 +안전하지 않거나 불필요한 서비스를 제거함으로써 시스템 보안성 및 리소스의 효율적 운용하기 위함 +보안 위협 +사용하지 않는 서비스나 취약점이 발표된 서비스 운용 시 공격 시도 가능한 위험이 존재함 +참고 +※ tftp: 파일 전송을 위한 프로토콜로서 FTP 서비스보다 구조가 단순하며 적은 양의 데이트를 보낼 때 +사용됨. 주로 원격의 부팅 파일을 불러오거나 설치 프로세스를 시작하기 위한 초기 데이터 호출 +용도로 사용. 서비스 사용 시 인증 절차가 없어 보안에 취약함 +※ talk: 사용자가 시스템에 원격으로 연결하여 다른 시스템에 로그인하고 있는 사용자와 대화 세션을 +시작할 수 있음 +※ ntalk: 서로 다른 시스템 간에 채팅을 가능하게 하는 서비스 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : tftp, talk, ntalk 서비스가 비활성화된 경우 +취약 : tftp, talk, ntalk 서비스가 활성화된 경우 +조치 방법 +불필요한 tftp, talk, ntalk 서비스 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) tftp, talk 서비스 활성화 여부 확인 +# inetadm | egrep “tftp|talk” +Step 2) 불필요한 서비스 데몬 중지 +# inetadm -d <서비스 데몬명> +l LINUX +[inetd] +Step 1) /etc/inetd.conf 파일 내 tftp, talk, ntalk 서비스 활성화 여부 확인 +# cat /etc/inetd.conf + + +![이미지 102-0](images/p0102_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +103 +Step 2) /etc/inetd.conf 파일 수정(주석 처리) +#tftp dgram udp nobody /usr/sbin/tftpd tftpd -n +#talk stream tcp wait root /usr/sbin/talkd talkd +#ntalk dgram udp wait root /usr/sbin/talkd talkd +Step 3) inetd 서비스 재시작 +# systemctl restart inetd +[xinetd] +Step 1) /etc/xinetd.d/ 디렉터리 내 존재하는 tftp, talk, ntalk 파일에 대해 서비스 활성화 여부 확인 +예시) service tftp{ +disable = no +... +} +Step 2) /etc/xinetd.d/ 디렉터리 내 존재하는 tftp, talk, ntalk 파일에 대한 설정값 변경 +disable = yes +Step 3) 설정 적용 및 서비스 재시작 +# systemctl restart xinetd +[systemd] +Step 1) 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep -E “tftp|talk|ntalk” +Step 2) tftp, talk, ntalk 서비스 중지 +systemctl stop <서비스명> +Step 3) tftp, talk, ntalk 서비스 비활성화 +# systemctl disable <서비스명> +※ Redhat 계열 리눅스는 RHEL 7 버전부터 talk 패키지가 제거되었음 +l AIX, HP-UX +Step 1) 서비스 활성화 여부 확인 +# /etc/inetd.conf | grep -E “tftp|talk|ntalk” tftp, talk, ntalk + + +![이미지 103-0](images/p0103_img0.png) + + +--- + +| 한국인터넷진흥원 | +104 +Step 2) /etc/inetd.conf 파일 수정(주석 처리) +#tftp dgram udp6 SRC nobody /usr/sbin/tftpd tftpd -n +#talk dgram udp wait root /usr/sbin/talkd talkd +#ntalk dgram udp wait root /usr/sbin/talkd talkd +Step 3) intetd 설정 적용 +[AIX] +refresh –s inetd +[HP-UX] +inetd –c +서비스 (포트) +설명 +TFTP (69) +파일 전송을 위한 프로토콜로써 FTP 서비스보다 구조가 단순하며 적은 양의 +데이터를 보낼 때 사용됨. 주로 원격의 부팅 파일을 불러오거나 설치 프로세스를 +시작하기 위한 초기 데이터 호출 용도로 사용함. 서비스 사용 시 인증 절차가 없어 +보안에 취약함 +TALK (517) +사용자가 시스템에 원격으로 연결하여 다른 시스템에 로그인하고 있는 사용자와 대화 +세션을 시작할 수 있음 +NTALK (518) +서로 다른 시스템과 채팅을 가능하게 하는 서비스 + + +![이미지 104-0](images/p0104_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +105 +U-45 +(상) +UNIX > 3. 서비스 관리 +메일 서비스 버전 점검 +개요 +점검 내용 +취약한 버전의 메일 서비스 이용 여부 점검 +점검 목적 +메일 서비스 사용 목적 검토 및 취약점이 없는 버전의 사용 유무 점검으로 최적화된 메일 서비스의 +운영하기 위함 +보안 위협 +취약점이 발견된 메일 버전의 경우 버퍼 오버플로우(Buffer Overflow) 공격에 의한 시스템 권한 획득 +및 주요 정보 노출의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 메일 서비스 버전이 최신 버전인 경우 +취약 : 메일 서비스 버전이 최신 버전이 아닌 경우 +조치 방법 +Ÿ 메일 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ 메일 서비스 사용 시 패치 관리 정책을 수립하여 주기적으로 패치 적용 설정 +조치 시 영향 +패치 적용 시 시스템 및 서비스의 영향 정도를 충분히 고려해야 함 +점검 및 조치 사례 +l SOLARIS +[Sendmail 메일 서비스를 사용하는 경우] +Step 1) Sendmail 버전 확인 +# /usr/sbin/sendmail -d grep Version +Step 2) 최신 버전 확인 및 보안 패치 진행 +Sendmail 홈페이지(http://www.sendmail.org/)에 접속하여 다운로드 및 보안 패치 적용 +[Sendmail 메일 서비스를 사용하지 않는 경우] +Step 1) Sendmail 서비스 활성화 여부 확인 +# svcs -a | grep sendmail +Step 2) Sendmail 서비스 비활성화 +# svcadm disable sendmail + + +![이미지 105-0](images/p0105_img0.png) + + +--- + +| 한국인터넷진흥원 | +106 +[Postfix 메일 서비스를 사용하는 경우] +Step 1) Postfix 버전 확인 +# /usr/lib/postfix/postconf | grep mail_version +Step 2) 최신 버전 확인 및 보안 패치 진행 +postfix 홈페이지(https://www.postfix.org/packages.html)에 접속하여 해당 OS 패키지 주소로 접속 후 +다운로드 및 보안 패치 적용 +[Postfix 메일 서비스를 사용하지 않는 경우] +Step 1) Postfix 서비스 활성화 여부 확인 +# svcs -a | grep postfix +Step 2) Postfix 서비스 비활성화 +# svcadm disable postfix +[Exim 메일 서비스를 사용하는 경우] +Step 1) Exim 버전 확인 +# usr/sbin/exim -bV +Step 2) 최신 버전 확인 및 보안 패치 진행 +Exim 홈페이지(https://www.exim.org/)에 접속하여 다운로드 및 보안 패치 적용 +[Exim 메일 서비스를 사용하지 않는 경우] +Step 1) Exim 서비스 활성화 여부 확인 +# svcs -a | grep exim +Step 2) Exim 서비스 비활성화 +# svcadm disable exim +l LINUX +[Sendmail 메일 서비스를 사용하는 경우] +Step 1) Sendmail 버전 확인 +# sendmail –d0 -bt +Step 2) 최신 버전 확인 및 보안 패치 진행 +Sendmail 홈페이지(http://www.sendmail.org/)에 접속하여 다운로드 및 보안 패치 적용 + + +![이미지 106-0](images/p0106_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +107 +[Sendmail 메일 서비스를 사용하지 않는 경우] +Step 1) Sendmail 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep sendmail +Step 2) Sendmail 서비스 중지 +# systemctl stop sendmail +Step 3) Sendmail 서비스 비활성화 +# systemctl disable sendmail +[Postfix 메일 서비스를 사용하는 경우] +Step 1) Postfix 버전 확인 +# postconf mail_version +Step 2) 최신 버전 확인 및 보안 패치 진행 +postfix 홈페이지(https://www.postfix.org/packages.html)에 접속하여 해당 OS 패키지 주소로 접속 후 +다운로드 및 보안 패치 적용 +[Postfix 메일 서비스를 사용하지 않는 경우] +Step 1) Postfix 서비스 활성화 여부 및 PID 확인 +# ps -ef | grep postfix +Step 2) Postfix 서비스 종료 +# kill -9 +[Exim 메일 서비스를 사용하는 경우] +Step 1) Exim 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep exim +Step 2) 최신 버전 확인 및 보안 패치 진행 +Exim 홈페이지(https://www.exim.org/)에 접속하여 다운로드 및 보안 패치 적용 +[Exim 메일 서비스를 사용하지 않는 경우] +Step 1) Exim 서비스 활성화 여부 및 PID 확인 +# ps -ef | grep exim +Step 2) Exim 서비스 종료 + + +![이미지 107-0](images/p0107_img0.png) + + +--- + +| 한국인터넷진흥원 | +108 +# kill -9 +l AIX +[Sendmail 메일 서비스를 사용하는 경우] +Step 1) Sendmail 버전 확인 +# sendmail –d0 -bt +Step 2) 최신 버전 확인 및 보안 패치 진행 +Sendmail 홈페이지(http://www.sendmail.org/)에 접속하여 다운로드 및 보안 패치 적용 +[Sendmail 메일 서비스를 사용하지 않는 경우] +Step 1) Sendmail 서비스 활성화 여부 확인 +# lssrc -a | grep sendmail +Step 2) Sendmail 서비스 중지 +# stopsrc -s sendmail +Step 3) /etc/rc.tcpip 파일 수정(주석 처리) +#start /usr/lib/sendmail “$src_running” “-bd -q${qpi}” +[Postfix 메일 서비스를 사용하는 경우] +Step 1) Postfix 버전 확인 +# postconf mail_version +Step 2) 최신 버전 확인 및 보안 패치 진행 +postfix 홈페이지(https://www.postfix.org/packages.html)에 접속하여 해당 OS 패키지 주소로 접속 후 +다운로드 및 보안 패치 적용 +[Postfix 메일 서비스를 사용하지 않는 경우] +Step 1) Postfix 서비스 활성화 여부 및 PID 확인 +# ps -ef | grep postfix +Step 2) Postfix 서비스 종료 +# kill –9 + + +![이미지 108-0](images/p0108_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +109 +[Exim 메일 서비스를 사용하는 경우] +Step 1) Exim 버전 확인 +# exim -bV +Step 2) 최신 버전 확인 및 보안 패치 진행 +Exim 홈페이지(https://www.exim.org/)에 접속하여 다운로드 및 보안 패치 적용 +[Exim 메일 서비스를 사용하지 않는 경우] +Step 1) Exim 서비스 활성화 여부 및 PID 확인 +# ps -ef | grep exim +Step 2) Exim 서비스 종료 +# kill -9 +l HP-UX +[Sendmail 메일 서비스를 사용하는 경우] +Step 1) Sendmail 버전 확인 +# sendmail –d0 –bt +Step 2) 최신 버전 확인 및 보안 패치 진행 +Sendmail 홈페이지(http://www.sendmail.org/)에 접속하여 다운로드 및 보안 패치 적용 +[Sendmail 메일 서비스를 사용하지 않는 경우] +Step 1) Sendmail 서비스 활성화 여부 및 PID 확인 +# ps -ef | grep sendmail +Step 2) Sendmail 서비스 종료 +# kill -9 +Step 3) /etc/rc.config.d/mailservs 파일 수정 +SENDMAIL_SERVER=0 +[Postfix 메일 서비스를 사용하는 경우] +Step 1) Postfix 버전 확인 +# postconf mail_version + + +![이미지 109-0](images/p0109_img0.png) + + +--- + +| 한국인터넷진흥원 | +110 +Step 2) 최신 버전 확인 및 보안 패치 진행 +postfix 홈페이지(https://www.postfix.org/packages.html)에 접속하여 해당 OS 패키지 주소로 접속 후 +다운로드 및 보안 패치 적용 +[Postfix 메일 서비스를 사용하지 않는 경우] +Step 1) Postfix 서비스 활성화 여부 및 PID 확인 +# ps -ef | grep postfix +Step 2) Postfix 서비스 종료 +# kill -9 +[Exim 메일 서비스를 사용하는 경우] +Step 1) Exim 버전 확인 +# exim –bV +Step 2) 최신 버전 확인 및 보안 패치 진행 +Exim 홈페이지(https://www.exim.org/)에 접속하여 다운로드 및 보안 패치 적용 +[Exim 메일 서비스를 사용하지 않는 경우] +Step 1) Exim 서비스 활성화 여부 및 PID 확인 +# ps -ef | grep exim +Step 2) Exim 서비스 종료 +# kill -9 + + +![이미지 110-0](images/p0110_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +111 +U-46 +(상) +UNIX > 3. 서비스 관리 +일반 사용자의 메일 서비스 실행 방지 +개요 +점검 내용 +SMTP 서비스 사용 시 일반 사용자의 q 옵션 제한 여부 점검 +점검 목적 +일반 사용자의 q 옵션을 제한하여 메일 서비스 설정 및 메일 큐를 강제적으로 drop 시킬 수 없게 하여 +비인가자에 의한 SMTP 서비스 오류 방지하기 위함 +보안 위협 +일반 사용자가 q 옵션을 이용해서 메일 큐, 메일 서비스 설정을 보거나 메일 큐를 강제적으로 drop 시킬 +수 있어 악의적으로 SMTP 서버의 오류를 발생시킬 위험이 존재함 +참고 +※ SMTP(Simple Mail Transfer Protocol): 인터넷상에서 전자우편(E-mail)을 전송할 때 이용하게 +되는 표준 통신 규약을 말함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 일반 사용자의 메일 서비스 실행 방지가 설정된 경우 +취약 : 일반 사용자의 메일 서비스 실행 방지가 설정되어 있지 않은 경우 +조치 방법 +Ÿ 메일 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ 메일 서비스 사용 시 메일 서비스의 q 옵션 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[Sendmail] +Step 1) /etc/mail/sendmail.cf 파일 내 PrivacyOptions 설정에 restrictqrun 값 추가 +PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +Step 2) Sendmail 서비스 재시작 +[Postfix] +Step 1) 일반 사용자 실행 권한 확인 +# ls -l /usr/sbin/postsuper +Step 2) 일반 사용자 실행 권한 제거 +# chmod o-x /usr/sbin/postsuper +[Exim] + + +![이미지 111-0](images/p0111_img0.png) + + +--- + +| 한국인터넷진흥원 | +112 +Step 1) 일반 사용자 실행 권한 확인 +# ls -l /usr/sbin/exiqgrep +Step 2) 일반 사용자 실행 권한 제거 +# chmod o-x /usr/sbin/exiqgrep + + +![이미지 112-0](images/p0112_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +113 +U-47 +(상) +UNIX > 3. 서비스 관리 +스팸 메일 릴레이 제한 +개요 +점검 내용 +SMTP 서버의 릴레이 기능 제한 여부 점검 +점검 목적 +스팸 메일 서버로의 악용 방지 및 서버 과부하를 방지하기 위함 +보안 위협 +SMTP 서버의 릴레이 기능을 제한하지 않을 경우, 악의적인 사용 목적을 가진 사용자들이 스팸 메일 +서버로 사용하거나 DoS 공격의 위험이 존재함 +참고 +※ SMTP(Simple Mail Transfer Protocol) 서버: SMTP에 의해 전자 메일을 발신하는 서버(server) +를 SMTP 서버라고 함 +※ 메일 서비스를 사용하지 않는 경우 양호 또는 N/A +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 릴레이 제한이 설정된 경우 +취약 : 릴레이 제한이 설정되어 있지 않은 경우 +조치 방법 +Ÿ 메일 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ 메일 서비스 사용 시 릴레이 방지 설정 또는 릴레이 대상 접근 제어 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[Sendmail 8.9 이상 버전] +Step 1) /etc/mail/sendmail.cf 파일 내 릴레이 허용 설정 여부 확인 +Step 2) /etc/mail/sendmail.mc 파일 수정 +FEATURE(`promiscuous_relay’)dnl <해당 설정 제거> +Step 3) sendmail.cf 설정 파일 재생성 +# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf +Step 4) /etc/mail/access 파일에 특정 IP, Domain, Email 주소, 네트워크에 대한 접근제한 설정 +예시) localhost.localdomain RELAY +localhost RELAY + +#### 127.0.0.1 RELAY + + + +![이미지 113-0](images/p0113_img0.png) + + +--- + +| 한국인터넷진흥원 | +114 +spam.com REJECT +§ /etc/mail/access 파일을 생성하거나 수정하였을 경우 +# makemap hash /etc/mail/access.db < /etc/mail/access 명령으로 DB 파일 생성 +Step 5) 설정 적용 및 재시작 +# systemctl restart sendmail +※ Sendmail 8.9 이상 버전부터는 기본적으로 스팸 메일 릴레이 제한 설정이 적용됨 +[Sendmail 8.9 미만 버전] +Step 1) /etc/mail/sendmail.cf 파일 내 릴레이 제한 설정 확인 +# cat /etc/mail/sendmail.cf | grep “R$\*” | grep “Relaying denied” +Step 2) /etc/mail/sendmail.cf 파일 수정 +# R$* $#error $@ 5.7.1 $: “550 Relaying denied” +Step 3) /etc/mail/access 파일에 특정 IP, Domain, Email 주소, 네트워크에 대한 접근제한 설정 +예시) localhost.localdomain RELAY +localhost RELAY + +#### 127.0.0.1 RELAY + +spam.com REJECT +Step 4) Sendmail 서비스 재시작 +※ 파일이 존재하지 않는 경우 생성하여 설정 +※ /etc/mail/access 파일을 생성하거나 수정하였을 경우 +# makemap hash /etc/mail/access.db < /etc/mail/access 명령으로 DB 파일 생성 +[Postfix] +Step 1) /etc/postfix/main.cf 파일 내 릴레이 정책 설정 확인 +# cat /etc/postfix/main.cf | grep -E “smtpd_recipient_restrictions|mynetworks” +Step 2) /etc/postfix/main.cf 파일 수정 +mynetworks = <허용할 네트워크 주소> + + +![이미지 114-0](images/p0114_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +115 +Step 3) 설정 적용 +# postfix reload +[Exim] +Step 1) /etc/exim/exim.conf, /etc/exim4/exim4.conf 파일 내 릴레이 설정이 허용된 네트워크 주소 확인 +cat <파일명> | grep -E “relay_from_hosts|hosts =” +Step 2) /etc/exim/exim.conf 또는 /etc/exim4/exim4.conf 파일 수정 +hostlist relay_from_hosts = <허용할 네트워크 주소> +accept hosts = +relay_from_hosts 또는 <허용할 네트워크 주소> +Step 3) Exim 서비스 재시작 + + +![이미지 115-0](images/p0115_img0.png) + + +--- + +| 한국인터넷진흥원 | +116 +U-48 +(중) +UNIX > 3. 서비스 관리 +expn, vrfy 명령어 제한 +개요 +점검 내용 +SMTP 서비스 사용 시 expn, vrfy 명령어 사용 금지 설정 여부 점검 +점검 목적 +SMTP 서비스의 expn, vrfy 명령을 통한 정보 유출을 방지하기 위함 +보안 위협 +expn, vrfy 명령어를 통하여 특정 사용자 계정의 존재 여부를 알 수 있고, 사용자의 정보를 외부로 +유출할 수 있는 위험이 존재함 +참고 +※ expn(메일링 리스트 확장): 메일 전송 시 포워딩하기 위한 명령어 +※ vrfy: SMTP 클라이언트가 SMTP 서버에 특정 아이디에 대한 메일이 있는지 검증하기 위해 보내는 +명령어 +※ goway: authwarnings, noexpn, novrfy, noveb, needmailhelo, needexpnhelo, needvrfyhelo, +nobodyreturn 옵션을 통합한 단축 옵션 +※ 메일 서비스를 사용하지 않는 경우 양호 또는 N/A +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : noexpn, novrfy 옵션이 설정된 경우 +취약 : noexpn, novrfy 옵션이 설정되어 있지 않은 경우 +조치 방법 +Ÿ 메일 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ 메일 서비스 사용 시 메일 서비스 설정 파일에 noexpn, novrfy 또는 goaway 옵션 추가 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[Sendmail] +Step 1) /etc/mail/sendmail.cf 파일 내 PrivacyOptions 설정 확인 +Step 2) PrivacyOptions 옵션 수정 +PrivacyOptions = authwarnings, novrfy, noexpn, restrictqrun +또는 +PrivacyOptions = restrictqrun, goaway +Step 3) Sendmail 서비스 재시작 + + +![이미지 116-0](images/p0116_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +117 +※ goaway : authwarnings, noexpn, novrfy, noveb, needmailhelo, needexpnhelo, needvrfyhelo, nobodyreturn 기능 +이 통합된 단축 옵션 +[Postfix] +Step 1) /etc/postfix/main.cf 파일 내 vrfy 설정 확인 +Step 2) disable_vrfy_command 옵션을 yes로 수정 +disable_vrfy_command = yes +Step 3) postfix 설정 적용 및 재시작 +# postfix reload +※ Postfix는 기본적으로 expn 기능 및 설정을 허용하지 않음 +[Exim] +Step 1) /etc/exim/exim.conf 또는 /etc/exim4/exim4.conf 파일 내 expn, vrfy 설정 확인 +Step 2) 해당 옵션이 허용된 경우 설정 제거 +acl_smtp_vrfy = acceptacl_smtp_expn = accept 주석 처리 혹은 명령어 줄 삭제 +Step 3) Exim 서비스 재시작 + + +![이미지 117-0](images/p0117_img0.png) + + +--- + +| 한국인터넷진흥원 | +118 +U-49 +(상) +UNIX > 3. 서비스 관리 +DNS 보안 버전 패치 +개요 +점검 내용 +BIND 최신 버전 사용 유무 및 주기적 보안 패치 여부 점검 +점검 목적 +취약점이 발표되지 않은 BIND 버전을 사용하여 시스템 보안성을 높이기 위함 +보안 위협 +취약점이 내포된 BIND 버전을 사용할 경우, DoS 공격, 버퍼 오버플로우(Buffer Overflow) 및 DNS +서버 원격 침입 등의 위험이 존재함 +참고 +※ BIND(Berkeley Internet Name Domain): BIND는 BSD 기반의 유닉스 시스템을 위해 설계된 +DNS로 서버와 resolver 라이브러리로 구성되어 있음. 네임 서버는 클라이언트들이 이름 +자원들이나 Object들에 접근하여, 네트워크 내의 다른 Object들과 함께 정보를 공유할 수 있게 +해주는 네트워크 서비스로 사실상 컴퓨터 네트워크 내의 Object들을 위한 분산 데이터베이스 +시스템임 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 주기적으로 패치를 관리하는 경우 +취약 : 주기적으로 패치를 관리하고 있지 않은 경우 +조치 방법 +Ÿ DNS 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ DNS 서비스 사용 시 패치 관리 정책 수립 및 주기적으로 패치 적용 설정 +※ DNS 서비스의 경우 대부분의 버전에서 취약점이 보고되고 있으므로 OS 관리자, 서비스 개발자가 +패치 적용에 따른 서비스 영향 정도를 정확히 파악하여 주기적인 패치 적용 정책 수리 후 적용 +조치 시 영향 +패치 적용 시 시스템 및 서비스 영향 정도를 충분히 고려해야 함 +점검 및 조치 사례 +l SOLARIS +Step 1) DNS 서비스 활성화 여부 확인 +# svcs -a | grep bind +Step 2) DNS 서비스 비활성화 +# svcadm disable bind +Step 3) BIND 버전 확인 +# named -v +Step 4) DNS 서비스 최신 패치 버전 확인 및 업데이트 + + +![이미지 118-0](images/p0118_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +119 +ISC 홈페이지 https://www.isc.org/downloads/ +※ BIND 9 취약점 정보(BIND 9 Vulnerability matrix) https://kb.isc.org/v1/docs/en/aa-00913 +l LINUX +Step 1) DNS 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep named +Step 2) DNS 서비스 비활성화 +# systemctl stop named +Step 3) BIND 버전 확인 +# named –v +Step 4) DNS 서비스 최신 패치 버전 확인 및 업데이트 +ISC 홈페이지 https://www.isc.org/downloads/ +※ BIND 9 취약점 정보(BIND 9 Vulnerability matrix) https://kb.isc.org/v1/docs/en/aa-00913 +l AIX +Step 1) DNS 서비스 활성화 여부 확인 +lssrc -a | grep named +Step 2) DNS 서비스 비활성화 +# stopsrc -s named +Step 3) BIND 버전 확인 +# named –v +Step 4) DNS 서비스 최신 패치 버전 확인 및 업데이트 +ISC 홈페이지 https://www.isc.org/downloads/ +※ BIND 9 취약점 정보(BIND 9 Vulnerability matrix) https://kb.isc.org/v1/docs/en/aa-00913 + + +![이미지 119-0](images/p0119_img0.png) + + +--- + +| 한국인터넷진흥원 | +120 +l HP-UX +Step 1) DNS 서비스 활성화 여부 확인 +# ps -ef | grep named +Step 2) DNS 서비스 중지 +# /sbin/init.d/named stop +Step 3) etc/rc.config.d/namesrvs 파일 내 NAMED 값을 0으로 수정 +NAMED=0 +Step 4) BIND 버전 확인 +# named –v +Step 5) DNS 서비스 최신 패치 버전 확인 및 업데이트 +ISC 홈페이지 https://www.isc.org/downloads/ +※ BIND 9 취약점 정보(BIND 9 Vulnerability matrix) https://kb.isc.org/v1/docs/en/aa-00913 + + +![이미지 120-0](images/p0120_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +121 +U-50 +(상) +UNIX > 3. 서비스 관리 +DNS ZoneTransfer 설정 +개요 +점검 내용 +Secondary Name Server로만 Zone 정보 전송 제한 여부 점검 +점검 목적 +DNS Zone Transfer 설정을 통해 비인가자에 대한 무단 접근을 방지하기 위함 +보안 위협 +Zone Transfer를 모든 사용자에게 허용할 경우, 비인가자에게 호스트 정보, 시스템 정보 등 중요 정보가 +유출될 위험이 존재함 +참고 +※ DNS Zone Transfer는 Primary Name Server와 Secondary Name Server 간에 Zone 정보를 +일관성 있게 유지하기 위하여 사용하는 기능 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : Zone Transfer를 허가된 사용자에게만 허용한 경우 +취약 : Zone Transfer를 모든 사용자에게 허용한 경우 +조치 방법 +Ÿ DNS 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ DNS 서비스 사용 시 DNS Zone Transfer를 허가된 사용자에게만 전송 허용하도록 설정 +조치 시 영향 +Zone Transfer 설정에서 허용할 대상을 정상적으로 등록하였다면 일반적으로 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) xfrnets 설정 확인 +# cat /etc/named.boot | grep xfrnets 또는 # cat /etc/bind/named.boot | grep xfrnets +Step 2) allow-transfer 설정 확인 +# cat /etc/named.conf | grep allow-transfer 또는 # cat /etc/bind/named.conf.options | grep allow-transfer +Step 3) / etc(/bind)/named.boot 파일의 xfrnets 설정값 수정 +xfrnets +Step 4) /etc(/bind)/named.conf 파일의 allow-transfer 설정값 수정 +allow-transfer { ; }; +Step 5) DNS 서비스 재시작 +※ DNS 서비스 Zone 파일명은 임의 지정이 가능하므로 DNS 설정 파일의 Include 구문으로 참조하는 파일명 점검 + + +![이미지 121-0](images/p0121_img0.png) + + +--- + +| 한국인터넷진흥원 | +122 +U-51 +(중) +UNIX > 3. 서비스 관리 +DNS 서비스의 취약한 동적 업데이트 설정 금지 +개요 +점검 내용 +DNS 서비스의 취약한 동적 업데이트 설정 여부 점검 +점검 목적 +DNS 서비스의 동적 업데이트를 비활성화함으로써 신뢰할 수 없는 원본으로부터 업데이트를 +받아들이는 위험을 차단하기 위함 +보안 위협 +DNS 서버에서 동적 업데이트를 사용할 경우, 악의적인 사용자에 의해 신뢰할 수 없는 데이터가 +받아들여질 위험이 존재함 +참고 +※ DNS 동적 업데이트: DNS 정보에 변경 사항이 있을 때마다 DNS 클라이언트 컴퓨터가 자신의 +리소스 레코드(zone 파일)를 DNS 서버에 자동으로 업데이트하는 기능으로 영역 레코드 수동 관리 +작업을 줄일 수 있음 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : DNS 서비스의 동적 업데이트 기능이 비활성화되었거나, 활성화 시 적절한 접근통제를 수행하고 +있는 경우 +취약 : DNS 서비스의 동적 업데이트 기능이 활성화 중이며 적절한 접근통제를 수행하고 있지 않은 경우 +조치 방법 +Ÿ DNS 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ DNS 서비스 사용 시 일반적으로 동적 업데이트 기능이 필요 없으나 확인 필요함 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[DNS 동적 업데이트가 필요하지 않은 경우] +Step 1) allow-update 설정 확인 +# cat /etc/named.conf | grep allow-update 또는 # cat /etc/bind/named.conf.options | grep allow-update +Step 2) /etc(/bind)/named.conf 파일의 allow-update 설정값 수정 +allow-update { none; }; +Step 3) DNS 서비스 재시작 + + +![이미지 122-0](images/p0122_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +123 +[DNS 동적 업데이트가 필요한 경우] +Step 1) allow-update 설정 확인 +# cat /etc/named.conf | grep allow-update” 또는 # cat /etc/bind/named.conf.options | grep allow-update +Step 2) /etc(/bind)/named.conf 파일의 allow-update 설정값 수정 +allow-update { ; }; +Step 3) DNS 서비스 재시작 +※ DNS 서비스 Zone 파일명은 임의 지정이 가능하므로 DNS 설정 파일의 Include 구문으로 참조하는 파일명 점검 + + +![이미지 123-0](images/p0123_img0.png) + + +--- + +| 한국인터넷진흥원 | +124 +U-52 +(중) +UNIX > 3. 서비스 관리 +Telnet 서비스 비활성화 +개요 +점검 내용 +원격 접속 시 Telnet 프로토콜 사용 여부 점검 +점검 목적 +취약한 Telnet 프로토콜을 비활성화함으로써 계정 및 중요 정보 유출 방지하기 위함 +보안 위협 +원격 접속 시 Telnet 프로토콜을 사용할 경우, 데이터가 평문으로 전송되어 비인가자가 스니핑을 통해 +계정 및 중요 정보를 외부로 유출할 위험이 존재함 +참고 +※ 스니핑: 컴퓨터 네트워크상에 흘러 다니는 트래픽을 도청하는 행위 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 원격 접속 시 Telnet 프로토콜을 비활성화하고 있는 경우 +취약 : 원격 접속 시 Telnet 프로토콜을 사용하는 경우 +조치 방법 +Telnet, FTP 등 안전하지 않은 서비스 사용을 중지하고 SSH 설치 및 사용하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) Telnet 서비스 활성화 여부 확인 +# svcs -a | grep telnet +Step 2) Telnet 서비스 비활성화 +# svcadm disable svc:/network/telnet:default +Step 3) SSH 서비스 실행 +# svcadm enable ssh +l LINUX +[inetd] +Step 1) /etc/inetd.conf 파일 내 Telnet 서비스 활성화 여부 확인 +Step 2) 해당 옵션이 허용된 경우 설정 제거 +예시) telnet stream tcp nowait root /usr/sbin/in.telnetd 주석 처리 혹은 명령어 줄 삭제 +Step 3) inetd 서비스 재시작 + + +![이미지 124-0](images/p0124_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +125 +# service inetd restart +Step 4) SSH 서비스 실행 +# service sshd start +[xinetd] +Step 1) /etc/xinetd.d/telnet 파일 내 Telnet 서비스 활성화 여부 확인 +# cat /etc/xinetd.d/telnet +Step 2) /etc/xinetd.d/telnet 파일의 disable 설정값 수정 +disable = yes +Step 3) 설정 적용 및 서비스 재시작 +# systemctl restart xinetd +Step 4) SSH 서비스 실행 +# systemctl start sshd +[systemd] +Step 1) Telnet 서비스 활성화 여부 확인 +# systemctl list-units --type=socket | grep telnet +Step 2) Telnet 서비스 중지 +# systemctl stop telnet.socket +Step 3) Telnet 서비스 비활성화 +# systemctl disable telnet.socket +Step 4) SSH 서비스 실행 +# systemctl start sshd +l AIX +Step 1) /etc/inetd.conf 파일 내 Telnet 서비스 활성화 여부 확인 +Step 2) 해당 옵션이 허용된 경우 설정 제거 +예시) telnet stream tcp6 nowait root /usr/sbin/telnetd telnetd –a 주석 처리 혹은 명령어 줄 삭제 +Step 3) inetd 설정 적용 +# refresh –s inetd +Step 4) SSH 서비스 실행 + + +![이미지 125-0](images/p0125_img0.png) + + +--- + +| 한국인터넷진흥원 | +126 +# startsrc -s sshd +l HP-UX +Step 1) /etc/inetd.conf 파일 내 Telnet 서비스 활성화 여부 확인 +# cat /etc/inetd.conf | grep telnet +Step 2) 해당 옵션이 허용된 경우 설정 제거 +# telnet stream tcp6 nowait root /usr/sbin/telnetd telnetd –a 주석 처리 혹은 명령어 줄 삭제 +Step 3) inetd 설정 적용 +# inetd –c +Step 4) SSH 서비스 실행 +# /sbin/init.d/secsh start + + +![이미지 126-0](images/p0126_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +127 +U-53 +(하) +UNIX > 3. 서비스 관리 +FTP 서비스 정보 노출 제한 +개요 +점검 내용 +FTP 서비스 정보 노출 여부 점검 +점검 목적 +FTP 서비스 접속 배너를 통한 불필요한 정보 노출을 방지하기 위함 +보안 위협 +서비스 접속 배너가 차단되지 않을 경우, 비인가자가 FTP 접속 시도 시 노출되는 접속 배너 정보를 +수집하여 악의적인 공격에 이용할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : FTP 접속 배너에 노출되는 정보가 없는 경우 +취약 : FTP 접속 배너에 노출되는 정보가 있는 경우 +조치 방법 +Ÿ FTP 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ FTP 서비스 사용 시 FTP 설정 파일을 통해 접속 배너 설정 +※ 접속 배너에 서비스 이름이나 버전 정보를 노출하지 않는 것을 권고 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX +[vsFTP] +Step 1) 배너 설정 확인 +# cat /etc/vsftpd.conf | grep ftpd_banner 또는 +# cat /etc/vsftpd/vsftpd.conf | grep ftpd_banner +Step 2) 해당 옵션이 설정되지 않은 경우 주석 제거 및 옵션 설정 +# ftpd_banner=<변경할 배너> +Step 3) vsFTP 서비스 재시작 +# systemctl restart vsftpd +[ProFTP] +Step 1) 배너 설정 확인 + + +![이미지 127-0](images/p0127_img0.png) + + +--- + +| 한국인터넷진흥원 | +128 +# cat /etc/proftpd.conf | grep ServerIdent 또는 # cat /etc/proftpd/proftpd.conf | grep ServerIdent +Step 2) /etc(/proftpd)/proftpd.conf 파일의 ServerIdent 설정값 수정 +ServerIdent off 또는 ServerIdent on “<변경할 배너>” +Step 3) ProFTP 서비스 재시작 +# systemctl restart proftpd +l AIX +[FTP] +Step 1) 메시지 카탈로그 파일 추출 +# dspcat -g /usr/lib/nls/msg/en_US/ftpd.cat > /tmp/ftpd.msg +Step 2) 배너 설정 확인 +# cat /tmp/ftpd.msg +“(%s) FTP server (%s) ready.” +Step 3) /tmp/ftpd.msg 파일 내 배너 설정 변경 +“<변경할 배너>” +Step 4) ftpd.cat 파일 생성 +# gencat /usr/lib/nls/msg/en_US/ftpd.cat /tmp/ftpd.msg +[vsFTP] +Step 1) 배너 설정 확인 +# cat /etc/vsftpd.conf | grep ftpd_banner +Step 2) 해당 옵션이 설정되지 않은 경우 주석 제거 및 옵션 설정 +ftpd_banner=<변경할 배너> +Step 3) vsFTP 서비스 PID 확인 +# ps -ef | grep vsftp +Step 4) vsFTP 서비스 재시작 +# kill -1 + + +![이미지 128-0](images/p0128_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +129 +[ProFTP] +Step 1) 배너 설정 확인 +# cat /etc/proftpd.conf | grep ServerIdent +Step 2) /etc/proftpd.conf 파일 내 ServerIdent 설정값 변경 +ServerIdent off 또는 ServerIdent on “<변경할 배너>” +Step 3) ProFTP 서비스 PID 확인 +# ps -ef | grep proftp +Step 4) ProFTP 서비스 재시작 +# kill –1 +l HP-UX +[FTP] +Step 1) FTP 설정 파일 경로 확인 +# cat /etc/inetd.conf | grep ftp +Step 2) ftpaccess 설정 확인 +# cat /etc/ftpd/ftpaccess +Wu-ftpd v2.4 미만 : suppresshostname, suppressversion, banner <파일 경로> 설정 확인 +Wu-ftpd v2.4 이상 : greeting, banner <파일 경로> 설정 확인 +Step 3) 배너 설정 확인 +# cat <기본 FTP 배너 설정 파일 경로> +Step 4) /etc/inetd.conf 파일 설정값 변경 +ftp stream tcp nowait root /usr/lbin/ftpd ftpd –a /etc/ftpd/ftpaccess +Step 5) 배너 파일 수정 +vi 편집기를 이용하여 배너 파일을 열어 변경할 배너 작성 +Step 6) /etc/ftpd/ftpaccess 파일의 suppresshostname, suppressversion, greeting 옵션 설정값 변경 +Wu-ftpd v2.4 미만 : suppresshostname yes +suppressversion yes +banner <경고 메시지가 작성된 파일 경로> +Wu-ftpd v2.4 이상 : greeting terse +banner <경고 메시지가 작성된 파일 경로> + + +![이미지 129-0](images/p0129_img0.png) + + +--- + +| 한국인터넷진흥원 | +130 +Step 7) inetd 설정 적용 +# inetd –c +※ 해당 파일이 존재하지 않는 경우 “cp /usr/newconfig/etc/ftpd/examples/ftpaccess /etc/ftpd/ftpaccess” +명령으로 파일 생성 +[vsFTP] +Step 1) 배너 설정 확인 +# cat /etc/vsftpd.conf | grep ftpd_banner +Step 2) /etc/vsftpd.conf 파일의 ftpd_banner 설정값 변경 +ftpd_banner=<변경할 배너> +Step 3) vsFTP 서비스 PID 확인 +# ps -ef | grep vsftp +Step 4) vsFTP 서비스 재시작 +# kill -1 +[ProFTP] +Step 1) 배너 설정 확인 +# cat /etc/proftpd.conf | grep ServerIdent +Step 2) /etc/proftpd.conf 파일의 설정값 변경 +ServerIdent off 또는 ServerIdent on “<변경할 배너>” +Step 3) ProFTP 서비스 PID 확인 +# ps -ef | grep proftp +Step 4) ProFTP 서비스 재시작 +# kill -1 + + +![이미지 130-0](images/p0130_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +131 +U-54 +(중) +UNIX > 3. 서비스 관리 +암호화되지 않는 FTP 서비스 비활성화 +개요 +점검 내용 +암호화되지 않은 FTP 서비스 비활성화 여부 점검 +점검 목적 +암호화되지 않은 FTP 서비스를 비활성화함으로써 계정 및 중요 정보 유출 방지하기 위함 +보안 위협 +암호화되지 않은 FTP 서비스를 사용할 경우, 데이터가 평문으로 전송되어 비인가자가 스니핑을 통해 +계정 및 중요 정보를 외부로 유출할 위험이 존재함 +참고 +※ 기반시설 시스템에서 FTP 서비스의 이용은 원칙적으로 금지하나, 불가피하게 사용 시 SFTP 사용 권고 +※ 암호화되지 않은 FTP 서비스 종류 : FTP +※ 암호화되어 있는 FTP 서비스 종류 : SFTP, FTP over SSH(Secure FTP), FTPS +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 암호화되지 않은 FTP 서비스가 비활성화된 경우 +취약 : 암호화되지 않은 FTP 서비스가 활성화된 경우 +조치 방법 +암호화되지 않은 FTP 서비스 중지 및 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +[vsFTP] +Step 1) FTP 서비스 활성화 여부 확인 +# svcs -a | grep vsftpd +Step 2) FTP 서비스 비활성화 +# svcadm disable vsftpd +[ProFTP] +Step 1) FTP 서비스 활성화 여부 확인 +# svcs -a | grep proftpd + + +![이미지 131-0](images/p0131_img0.png) + + +--- + +| 한국인터넷진흥원 | +132 +Step 2) FTP 서비스 비활성화 +# svcadm disable proftpd +l LINUX +[inetd] +Step 1) /etc/inetd.conf 파일 내 FTP 서비스 활성화 여부 확인 +Step 2) /etc/inetd.conf 파일의 설정값 변경(주석 처리) +# ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd +Step 3) inetd 서비스 재시작 +# service inetd restart +[xinetd] +Step 1) /etc/xinetd.d/ftp 파일 내 FTP 서비스 활성화 여부 확인 +service ftp 단락 확인 +Step 2) /etc/xinetd.d/ftp 파일의 설정값 변경 +service ftp{disable = yes} +Step 3) 설정 적용 및 재시작 +# systemctl restart xinetd +[vsFTP] +Step 1) FTP 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep vsftpd +Step 2) FTP 서비스 중지 +# systemctl stop vsftpd +Step 3) FTP 서비스 비활성화 +# systemctl disable vsftpd +[ProFTP] +Step 1) FTP 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep proftp +Step 2) FTP 서비스 중지 + + +![이미지 132-0](images/p0132_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +133 +# systemctl stop proftpd +Step 3) FTP 서비스 비활성화 +# systemctl disable porftpd +l AIX, HP-UX +[FTP] +Step 1) /etc/inetd.conf 파일 내 FTP 서비스 활성화 여부 확인 +# cat /etc/inetd.conf +Step 2) /etc/inetd.conf 파일의 설정값 변경(주석 처리) +# ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd +Step 3) inetd 설정 적용 +# refresh -s inetd +[vsFTP] +Step 1) vsFTP 서비스 활성화 여부 확인 +# ps -ef | grep vsftp +Step 2) vsFTP 서비스 PID 확인 +# ps -ef | grep vsftp +Step 3) vsFTP 서비스 중지 +# kill -9 +[ProFTP] +Step 1) ProFTP 서비스 활성화 여부 확인 +# ps -ef | grep proftp +Step 2) ProFTP 서비스 PID 확인 +# ps -ef | grep proftp +Step 3) ProFTP 서비스 중지 +# kill -9 + + +![이미지 133-0](images/p0133_img0.png) + + +--- + +| 한국인터넷진흥원 | +134 +U-55 +(중) +UNIX > 3. 서비스 관리 +FTP 계정 shell 제한 +개요 +점검 내용 +FTP 기본 계정에 쉘 설정 여부 점검 +점검 목적 +FTP 계정의 쉘을 통한 시스템 접근을 차단하기 위함 +보안 위협 +FTP 기본 계정에 쉘이 부여될 경우, 비인가자가 해당 기본 계정으로 시스템에 접근할 위험이 존재함 +참고 +※ 기반시설 시스템에서 FTP 서비스의 이용은 원칙적으로 금지하나, 불가피하게 사용 시 shell 제한 +등의 보안 조치를 반드시 적용해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : FTP 계정에 /bin/false(/sbin/nologin) 쉘이 부여된 경우 +취약 : FTP 계정에 /bin/false(/sbin/nologin) 쉘이 부여되어 있지 않은 경우 +조치 방법 +Ÿ FTP 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ FTP 서비스 사용 시 FTP 계정에 /bin/false 쉘 부여 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) ftp 계정의 일곱 번째 필드에 등록된 로그인 쉘 확인 +# cat /etc/passwd | grep ftp +예시) ftp:x:134:65534::/srv/ftp:/usr/sbin/nologin +Step 2) ftp 계정 로그인 쉘 변경 +/etc/passwd 파일 직접 수정 : ftp:x:134:65534::/srv/ftp:/bin/false 또는 /sbin/nologin +usermod 명령어를 사용하여 수정 +# usermod -s /bin/false <계정> + + +![이미지 134-0](images/p0134_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +135 +U-56 +(하) +UNIX > 3. 서비스 관리 +FTP 서비스 접근 제어 설정 +개요 +점검 내용 +FTP 서비스에 비인가자의 접근 가능 여부 점검 +점검 목적 +접근 권한이 없는 비인가자의 접근을 통제하기 위함 +보안 위협 +FTP 서비스의 접근제한 설정이 적절하지 않을 경우, 인증 절차 없이 비인가자가 디렉터리나 파일에 +접근할 수 있어 중요 파일 변조 및 유출을 시도할 위험이 존재함 +참고 +※ 기반시설 시스템에서 FTP 서비스의 이용은 원칙적으로 금지하나, 불가피하게 사용 시 접근 제어 +설정 등의 보안 조치를 반드시 적용해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 특정 IP주소 또는 호스트에서만 FTP 서버에 접속할 수 있도록 접근 제어 설정을 적용한 경우 +취약 : FTP 서버에 접근 제어 설정을 적용하지 않은 경우 +조치 방법 +Ÿ FTP 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ FTP 서비스 사용 시 접근 제어 설정 +조치 시 영향 +특정 IP주소 또는 호스트에서만 FTP 접속이 가능함 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[FTP – ftpusers] +Step 1) ftpusers 파일 소유자 및 권한 확인 +# ls -l /etc/ftpusers 또는 # ls -l /etc/ftpd/ftpusers +Step 2) 접근 제한 설정 확인 +# cat /etc/ftpusers 또는 # cat /etc/ftpd/ftpusers +Step 3) 파일 소유자를 root로 변경 +# chown root /etc/ftpusers 또는 # chown root /etc/ftpd/ftpusers +Step 4) 파일 권한을 640으로 변경 +# chmod 640 /etc/ftpusers 또는 # chmod 640 /etc/ftpd/ftpusers +Step 5) /etc(/ftpd)/ftpusers 파일에 FTP 서비스에 접근을 차단할 사용자 설정 + + +![이미지 135-0](images/p0135_img0.png) + + +--- + +| 한국인터넷진흥원 | +136 +[vsFTP – ftpusers] +Step 1) userlist_enable 설정값 확인 +# cat /etc/vsftpd.conf | grep userlist_enable 또는 # cat /etc/vsftpd/vsftpd.conf | grep userlist_enable” +userlist_enable = NO +Step 2) 파일 소유자 및 권한 확인 +# ls -l /etc/vsftpd.ftpusers 또는 # ls -l /etc/vsftpd/ftpusers +Step 3) 접근 제한 설정 확인 +# cat /etc/vsftpd.ftpusers 또는 # cat /etc/vsftpd/ftpusers +Step 4) 파일 소유자를 root로 변경 +# chown root /etc/vsftpd.ftpusers 또는 # chown root /etc/vsftpd/ftpuser +Step 5) 파일 권한을 640으로 변경 +# chmod 640 /etc/vsftpd.ftpusers 또는 # chmod 640 /etc/vsftpd/ftpusers +Step 6) /etc/vsftpd.ftpusers 또는 /etc/vsftpd/ftpusers 파일에 FTP 서비스에 접근을 차단할 사용자 설정 +[vsFTP – user_list] +Step 1) userlist_enable 설정값 확인 +# cat /etc/vsftpd.conf | grep userlist_enable 또는 # cat /etc/vsftpd/vsftpd.conf | grep userlist_enable +userlist_enable = YES +Step 2) 파일 소유자 및 권한 확인 +# ls -l /etc/vsftpd.user_list 또는 # ls -l /etc/vsftpd/user_list +Step 3) 접근 제한 설정 확인 +# cat /etc/vsftpd.user_list 또는 # cat /etc/vsftpd/user_list +Step 4) 파일 소유자를 root로 변경 +# chown root /etc/vsftpd.user_list 또는 # chown root /etc/vsftpd/user_list +Step 5) 파일 권한을 640으로 변경 +# chmod 640 /etc/vsftpd.user_list 또는 # chmod 640 /etc/vsftpd/user_list +Step 6) /etc(/vsftpd)/vsftpd.conf 파일의 userlist_deny 옵션 설정 +user_list에 등록된 사용자만 접속 허가 : userlist_deny=no +user_list에 등록된 사용자 접속 차단 : userlist_deny=yes +Step 7) /etc(/vsftpd)/vsftpd.conf 파일에 FTP 서비스에 접근을 허가/차단할 사용자 설정 + + +![이미지 136-0](images/p0136_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +137 +[ProFTP – ftpusers] +Step 1) UseFtpUsers 설정 확인 +# cat /etc/proftpd.conf | grep UseFtpUsers 또는 # cat /etc/proftpd/proftpd.conf | grep UseFtpUsers +UseFtpUsers on (기본 설정 : on) +Step 2) 파일 소유자 및 권한 확인 +# ls -l /etc/ftpusers 또는 # ls -l /etc/ftpd/ftpusers +Step 3) 접근 제한 설정 확인 +# cat /etc/ftpusers 또는 # cat /etc/ftpd/ftpusers +Step 4) 파일 소유자를 root로 변경 +# chown root /etc/ftpusers 또는 # chown root /etc/ftpd/ftpusers +Step 5) 파일 권한을 640으로 변경 +# chmod 640 /etc/ftpusers 또는 # chmod 640 /etc/ftpd/ftpusers +Step 6) /etc/(/ftpd)ftpusers 파일에 FTP 서비스에 접근을 차단할 사용자 설정 +[ProFTP – proftpd.conf] +Step 1) UseFtpUsers 설정 확인 +# cat /etc/proftpd.conf | grep UseFtpUsers 또는 # cat /etc/proftpd/proftpd.conf | grep UseFtpUsers +UseFtpUsers off +Step 2) 파일 소유자 및 권한 확인 +# cat /etc/proftpd.conf 또는 # cat /etc/proftpd/proftpd.conf +Step 3) 접근 제한 설정 확인 +# sed -n ‘//, /<\/Limit>/p’ /etc/proftpd.conf 또는 # sed -n ‘//, /<\/Limit>/p’ +/etc/proftpd/proftpd.conf” +Step 4) 파일 소유자를 root로 변경 +# chown root /etc/proftpd.conf 또는 # chown root /etc/proftpd/proftpd.conf +Step 5) 파일 권한을 640으로 변경 +# chmod 640 /etc/proftpd.conf 또는 # chmod 640 /etc/proftpd/proftpd.conf +Step 6) /etc(/proftpd)/proftpd.conf 파일 수정 및 삽입 + +Order Deny,Allow +AllowUser <사용자 이름> 또는 Allow from + + +![이미지 137-0](images/p0137_img0.png) + + +--- + +| 한국인터넷진흥원 | +138 +DenyUser <사용자 이름> 또는 Deny from + +Step 7) ProFTP 서비스 재시작 +※ Order : 먼저 정의된 설정 우선 적용 + + +![이미지 138-0](images/p0138_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +139 +U-57 +(중) +UNIX > 3. 서비스 관리 +Ftpusers 파일 설정 +개요 +점검 내용 +FTP 서비스에 root 계정 접근 제한 설정 여부 점검 +점검 목적 +root 계정의 FTP 직접 접속을 제한하여 root 비밀번호 정보 노출을 방지하기 위함 +보안 위협 +FTP 서비스에 root 계정으로 접근할 경우, 데이터가 평문으로 전송되어 비인가자가 스니핑을 통해 +관리자 계정 및 중요 정보를 외부로 유출할 위험이 존재함 +참고 +※ 기반시설 시스템에서 FTP 서비스의 이용은 원칙적으로 금지하나, 불가피하게 사용 시 root 계정 +접근 제한 등의 보안 조치를 반드시 적용해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : root 계정 접속을 차단한 경우 +취약 : root 계정 접속을 허용한 경우 +조치 방법 +Ÿ FTP 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ FTP 서비스 사용 시 root 계정으로 직접 접속할 수 없도록 설정 +조치 시 영향 +애플리케이션에서 root 계정으로 직접 접속하여 FTP를 사용하고 있는 경우 확인 필요 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +[기본 FTP – ftpusers] +Step 1) root 계정 접근 제한 설정 확인 +# cat /etc/ftpusers 또는 # cat /etc/ftpd/ftpusers +Step 2) /etc(/ftpd)/ftpusers 파일의 설정값 변경(#root 주석 제거) +[vsFTP – ftpusers] +Step 1) userlist_enable 설정 확인 +# cat /etc/vsftpd.conf | grep userlist_enable 또는 # cat /etc/vsftpd/vsftpd.conf | grep userlist_enable +userlist_enable = NO +Step 2) root 계정 접근제한 설정 확인 +# cat /etc/ftpusers 또는 # cat /etc/vsftpd/ftpusers + + +![이미지 139-0](images/p0139_img0.png) + + +--- + +| 한국인터넷진흥원 | +140 +Step 3) /etc/vsftpd.ftpusers 또는 /etc/vsftpd/ftpusers 파일의 설정값 변경(#root 주석 제거) +[vsFTP – user_list] +Step 1) userlist_enable 설정 확인 +# cat /etc/vsftpd.conf | grep userlist_enable 또는 # cat /etc/vsftpd/vsftpd.conf | grep userlist_enable” +userlist_enable = YES +Step 2) root 계정 접근제한 설정 확인 +# cat /etc/vsftpd.user_list 또는 # cat /etc/vsftpd/user_list +Step 3) /etc/vsftpd.user_list 또는 /etc/vsftpd/user_list 파일의 설정값 변경(#root 주석 제거) +※ vsftpd.conf 파일에서 user_list deny 옵션이 yes로 설정된 경우에만 root 계정 차단이 적용됨 +[ProFTP – ftpusers] +Step 1) UseFtpUsers 설정 확인 +# cat /etc/proftpd.conf | grep UseFtpUsers 또는 # cat /etc/proftpd/proftpd.conf | grep UseFtpUsers +UseFtpUsers on (기본 설정 : on) +Step 2) root 계정 접근제한 설정 확인 +# cat /etc/ftpusers 또는 # cat /etc/ftpd/ftpuser +Step 3) /etc(/ftpd)/ftpusers 파일의 설정값 변경(#root 주석 제거) + +[ProFTP – proftpd.conf] +Step 1) UseFtpUsers 설정 확인 +# cat /etc/proftpd.conf | grep UseFtpUsers 또는 # cat /etc/proftpd/proftpd.conf | grep UseFtpUser +UseFtpUsers off +Step 2) root 계정 접근제한 설정 확인 +# cat /etc/proftpd.conf | grep RootLogin 또는 # cat /etc/proftpd/proftpd.conf | grep RootLogin +Step 3) /etc(/proftpd)/proftpd.conf 파일의 설정값 변경 +RootLogin off +Step 4) ProFTP 서비스 재시작 +# systemctl restart proftpd + + +![이미지 140-0](images/p0140_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +141 +U-58 +(중) +UNIX > 3. 서비스 관리 +불필요한 SNMP 서비스 구동 점검 +개요 +점검 내용 +SNMP 서비스 활성화 여부 점검 +점검 목적 +불필요한 SNMP 서비스를 비활성화하여 필요 이상의 정보가 노출되는 것을 방지하기 위함 +보안 위협 +SNMP 서비스가 활성화되어 있을 경우, 비인가자가 시스템의 중요 정보를 유출하거나 불법적으로 +수정할 위험이 존재함 +참고 +※ SNMP(Simple Network Management Protocol): TCP/IP 기반 네트워크상의 각 호스트에서 +정기적으로 여러 정보를 자동으로 수집하여 네트워크 관리를 하기 위한 프로토콜을 의미함 +※ 기반시설 시스템에서 SNMP 서비스의 이용은 원칙적으로 금지하나, 불가피하게 사용 시 기본 +Comunity String 변경, 네트워크 모니터링 등의 보안 조치를 반드시 적용해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : SNMP 서비스를 사용하지 않는 경우 +취약 : SNMP 서비스를 사용하는 경우 +조치 방법 +SNMP 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS(5.9 이하 버전) +Step 1) SNMP 서비스 활성화 여부 및 경로 확인 +# ps -ef | grep snmp +Step 2) 서비스 중지 및 이름 변경 +# /etc/init.d/init.snmpdx stop +# mv /etc/rc3.d/S76snmpdx /etc/rc3.d/_S76snmpdx +※ rc*/_S**snmpdx 의 *수치는 각각 다름 + + +![이미지 141-0](images/p0141_img0.png) + + +--- + +| 한국인터넷진흥원 | +142 +l SOLARIS(5.10 이상 버전) +Step 1) SNMP 서비스 활성화 여부 확인 +# svcs -a | grep snmp +Step 2) 불필요한 SNMP 서비스가 활성화 중인 경우 데몬 중지 +# svcadm disable svc:/application/management/snmpd:default +l LINUX +Step 1) SNMP 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep snmpd +Step 2) 불필요한 SNMP 서비스가 활성화(loaded active running)인 경우 서비스 중지 및 비활성화 +# systemctl stop snmpd +# systemctl disable snmpd +l AIX +Step 1) SNMP 서비스 활성화 여부 확인 +# lssrc -a | grep snmp +Step 2) 불필요한 SNMP 서비스가 활성화(active) 중인 경우 서비스 중지 +# stopsrc –s snmpd +Step 3) /etc/rc.tcpip 파일 내에 SNMP설정값 주석 처리 +# start /usr/sbin/snmpd $src_running +Step 4) 설정 적용 +# /etc/rc.tcpip +l HP-UX +Step 1) SNMP 서비스 활성화 여부 확인 +# ps -ef | grep snmp +Step 2) 불필요한 SNMP 서비스가 활성화(active) 중인 경우 서비스 중지 +# /sbin/init.d/snmpd stop + + +![이미지 142-0](images/p0142_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +143 +U-59 +(상) +UNIX > 3. 서비스 관리 +안전한 SNMP 버전 사용 +개요 +점검 내용 +안전한 SNMP 버전 사용 여부 점검 +점검 목적 +안전한 SNMP 버전 사용으로 전송되는 데이터를 보호하기 위함 +보안 위협 +SNMP 버전이 기준보다 낮을 경우, 응답 패킷이 평문으로 전송되어 스니핑 위험이 존재함 +참고 +※ SNMP(Simple Network Management Protocol): TCP/IP 기반 네트워크상의 각 호스트에서 +정기적으로 여러 정보를 자동으로 수집하여 네트워크 관리를 하기 위한 프로토콜을 의미하며 v1, +v2, v3 세 가지 버전이 존재하는데 v1, v2는 요청 및 응답 패킷이 평문으로 전송되기 때문에 +스니핑이 가능하지만 v3 이상부터는 HMAC-MD5 또는 HMAC-SHA 알고리즘 기반의 인증을 +제공함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : SNMP 서비스를 v3 이상으로 사용하는 경우 +취약 : SNMP 서비스를 v2 이하로 사용하는 경우 +조치 방법 +Ÿ SNMP 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ SNMP 서비스 사용 시 SNMP 버전을 v3 이상으로 적용하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) SNMP v3 사용 여부 확인 +# snmpwalk -v3 -l authPriv -u <사용자 이름> -a <사용자 인증 프로토콜> -A <사용자 인증 암호> -x <사 +용자 암호화 프로토콜> -X <사용자 암호화 암호> +(SHA 인증 프로토콜, AES 암호화 프로토콜 사용 예시) +# snmpwalk -v3 -l authPriv -u myuser -a SHA -A myauthpass -x AES -X myprivpass 192.168.18.190 +Step 2) 사용하지 않을 경우 snmp v3 사용자 생성 +# net-snmp-create-v3-user -ro -A <사용자 인증 암호> -X <사용자 암호화 암호> -a <사용자 인증 프로토 +콜> -x <사용자 암호화 프로토콜> <사용자 이름> +예시) # net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser +Step 3) /etc/snmp/snmpd.conf 파일 내의 SNMPv3 사용자 추가 + + +![이미지 143-0](images/p0143_img0.png) + + +--- + +| 한국인터넷진흥원 | +144 +# createUser <사용자 이름> <사용자 인증 프로토콜> <사용자 인증 암호> <사용자 암호화 프로토콜> +<사용자 암호화 암호> +SHA 인증 프로토콜, AES 암호화 프로토콜 사용 예시) +# createUser myuser SHA myauthpass AES myprivpass +Step 4) SNMPv3 사용자 읽기/쓰기 권한 추가 +<읽기/쓰기 권한> <사용자 이름> +# rouser myuser +Step 5) SNMP 서비스 실행 + + +![이미지 144-0](images/p0144_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +145 +U-60 +(중) +UNIX > 3. 서비스 관리 +SNMP Community String 복잡성 설정 +개요 +점검 내용 +SNMP Community String 복잡성 설정 여부 점검 +점검 목적 +SNMP 서비스의 Community String의 복잡성 설정을 통해 비인가자의 비밀번호 추측 공격에 +대비하기 위함 +보안 위협 +Community String에 복잡성 설정이 되어 있지 않을 경우, 비인가자가 비밀번호 추측 공격을 통해 +계정 탈취 시 환경설정 파일 열람 및 수정, 각종 정보수집, 관리자 권한 획득 등 다양한 위험이 존재함 +참고 +※ NMS(Network Management System): 네트워크상의 모든 장비의 중앙 감시 체제를 구축하여 +모니터링, 플래닝, 분석을 시행하고 관련 데이터를 보관하여 필요 즉시 활용할 수 있게 하는 관리 +시스템을 말함 +※ Community String: SNMP는 MIB라는 정보를 주고받기 위해 인증 과정에서 일종의 비밀번호인 +Community String을 사용함 +※ 기반시설 시스템에서 SNMP 서비스의 이용은 원칙적으로 금지하나, 불가피하게 사용 시 기본 +Comunity String 변경, 네트워크 모니터링 등의 보안 조치를 반드시 적용해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : SNMP Community String 기본값인 “public”, “private”이 아닌 영문자, 숫자 포함 10자리 +이상 또는 영문자, 숫자, 특수문자 포함 8자리 이상인 경우 +※ SNMP v3의 경우 별도 인증 기능을 사용하고, 해당 비밀번호가 복잡도를 만족하는 경우 양호 +취약 : 아래의 내용 중 하나라도 해당되는 경우 +1. SNMP Community String 기본값인 “public”, “private”일 경우 + +## 2. 영문자, 숫자 포함 10자리 미만인 경우 + + +## 3. 영문자, 숫자, 특수문자 포함 8자리 미만인 경우 + +조치 방법 +Ÿ SNMP 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ SNMP 서비스 사용 시 SNMP Community String 기본값인 “public”, “private”이 아닌 영문자, +숫자 포함 10자리 이상 또는 영문자, 숫자, 특수문자 포함 8자리 이상으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS(9 이하 버전) +Step 1) /etc/snmp/conf/snmpd.conf 파일 내의 Community String 설정 값 수정 +read-community <변경 값> + + +![이미지 145-0](images/p0145_img0.png) + + +--- + +| 한국인터넷진흥원 | +146 +write-community <변경 값> +Step 2) SNMP 서비스 재시작 +l SOLARIS(10 버전) +Step 1) /etc/snmp/conf/snmpd.conf 파일 내의 Community String 설정 값 수정 +rocommunity <변경 값> +rwcommunity <변경 값> +Step 2) 출력여부 확인 +# svcs -a | grep snmpdx +예시) svcadm enable svc:/application/management/snmpdx:default +l SOLARIS(11 버전) +Step 1) /etc/net-snmp/snmp/snmpd.conf 파일 내의 Community String 설정 값 수정 +rocommunity <변경 값> default +rwcommunity <변경 값> default +Step 2) 설정 적용 및 SNMP 서비스 재시작 +# svcadm refresh net-snmp +l LINUX +[Redhat 계열] +Step 1) /etc/snmp/snmpd.conf 파일 내의 Community String 설정 값 수정 +com2sec notConfigUser default <변경 값> +Step 2) 설정 적용 및 SNMP 서비스 재시작 +# systemctl restart snmpd +[Debian 계열] +Step 1) /etc/snmp/snmpd.conf 파일 내의 Community String 설정 값 수정 +rocommunity <변경 값> default +rwcommunity <변경 값> default +Step 2) 설정 적용 및 SNMP 서비스 재시작 +# systemctl restart snmpd + + +![이미지 146-0](images/p0146_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +147 +l AIX +Step 1) /etc/snmpdv3.conf 파일 내의 Community String 설정 값 수정 +COMMUNITY <새로운 Community String> <새로운 Community String> noAuthNoPriv 0.0.0.0 0.0.0.0 - +Step 2) SNMP 서비스 중지 및 실행 +# stopsrc -s snmpd +# startsrc -s snmpd +l HP-UX +Step 1) /etc/snmpd.conf 파일 내의 Community String 설정 값 수정 +get-community-name : <변경 값> +set-community-name : <변경 값> +Step 2) SNMP 서비스 재시작 + + +![이미지 147-0](images/p0147_img0.png) + + +--- + +| 한국인터넷진흥원 | +148 +U-61 +(상) +UNIX > 3. 서비스 관리 +SNMP Access Control 설정 +개요 +점검 내용 +SNMP 접근 제어 설정 여부 점검 +점검 목적 +SNMP 접근 제어 설정을 통해 비인가자의 접근을 차단하기 위함 +보안 위협 +SNMP 서비스에 접근 제어가 설정되어 있지 않을 경우, 비인가자의 접근, 네트워크 정보 유출, 시스템 +및 네트워크 설정 변경, DoS 공격 등의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : SNMP 서비스에 접근 제어 설정이 되어 있는 경우 +취약 : SNMP 서비스에 접근 제어 설정이 되어 있지 않은 경우 +조치 방법 +Ÿ SNMP 서비스를 사용하지 않는 경우 서비스 중지 및 비활성화 설정 +Ÿ SNMP 서비스 사용 시 SNMP 접근 제어 설정하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +Step 1) /etc/net-snmp/snmp/snmpd.conf 파일 내의 SNMP 접근 제어 설정 +rocommunity <허용할 네트워크 주소 추가> +rwcommunity <허용할 네트워크 주소 추가> +Step 2) 설정 적용 및 SNMP 서비스 재시작 +# svcadm restart net-snmp +l LINUX +[Redhat 계열] +Step 1) /etc/snmp/snmpd.conf 파일 내의 SNMP 접근 제어 설정 +com2sec notConfigUser <허용할 네트워크 주소 추가> +Step 2) 설정 적용 및 SNMP 서비스 재시작 +# systemctl restart snmpd + + +![이미지 148-0](images/p0148_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +149 +[Debian 계열] +Step 1) /etc/snmp/snmpd.conf 파일 내의 SNMP 접근 제어 설정 +rocommunity <허용할 네트워크 주소 추가> +rwcommunity <허용할 네트워크 주소 추가> +Step 2) 설정 적용 및 SNMP 서비스 재시작 +# systemctl restart snmpd +l AIX +Step 1) /etc/snmpdv3.conf 파일 내의 SNMP 접근 제어 설정 +COMMUNITY noAuthNoPriv <허용할 네트워크 주소> <허용할 넷마스크 주소> +Step 2) SNMP 서비스 중지 및 실행 +# stopsrc –s snmpd +# startsrc –s snmpd +l HP-UX +Step 1) /etc/snmpd.conf 파일 내의 SNMP 접근 제어 설정 +trap-dest : <허용할 네트워크 주소 추가> +Step 2) SNMP 서비스 재시작 + + +![이미지 149-0](images/p0149_img0.png) + + +--- + +| 한국인터넷진흥원 | +150 +U-62 +(하) +UNIX > 3. 서비스 관리 +로그인 시 경고 메시지 설정 +개요 +점검 내용 +서버 및 서비스에 로그온 시 불필요한 정보 차단 설정 및 불법적인 사용에 대한 경고 메시지 출력 여부 +점검 +점검 목적 +비인가자들에게 서버에 대한 불필요한 정보를 제공하지 않고, 서버 접속 시 관계자만 접속해야 한다는 +경각심을 심어 주기 위함 +보안 위협 +로그온 시 경고 메시지가 설정되어 있지 않을 경우, 기본 설정값엔 서버 OS 버전 및 서비스 버전이 +비인가자에게 노출되어 해당 정보를 통해 서비스의 취약점을 이용하여 공격을 시도할 위험이 존재함 +참고 +※ 로그온 시 경고 메시지는 공격자의 활동을 주시하고 있다는 생각을 상기시킴으로써 간접적으로 +공격 피해를 감소시키는 효과를 줄 수 있음 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정된 경우 +취약 : 서버 및 Telnet, FTP, SMTP, DNS 서비스에 로그온 시 경고 메시지가 설정되어 있지 않은 경우 +조치 방법 +Telnet, FTP, SMTP, DNS 서비스를 사용하는 경우 설정 파일을 통해 로그온 시 경고 메시지 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +[서버] +Step 1) /etc/motd 파일과 /etc/issue 파일 내에 로그온 시 경고 메시지 입력 +[Telnet] +Step 1) /etc/issue.net 파일 내에 로그온 시 경고 메시지 입력 +Step 2) /etc/default/telnetd 파일 내에 배너 경고 메시지 수정 +BANNER=<로그온 시 경고 메시지> +[SSH] +Step 1) /etc/motd 파일 내 로그온 시 경고 메시지 입력 +Step 2) /etc/ssh/sshd_config 파일 내에 배너 경고 메시지 수정 + + +![이미지 150-0](images/p0150_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +151 +Banner <경고 메시지가 작성된 파일 경로> +Step 3) 파일 내에 로그온 경고 메시지 수정 +(일반적으로 /etc/issue 또는 /etc/issue.net 파일 사용) +[Sendmail] +Step 1) /etc/mail/sendmail.cf 파일 내에 SmtpGreetingMessage 로그온 경고 메시지 수정 +SmtpGreetingMessage=<로그온 시 경고 메시지> +Step 2) 설정 적용 및 재시작 +# svcadm refresh sendmail +[Postfix] +Step 1) /etc/postfix/main.cf 파일 내에 SMTP 서버 로그온 경고 메시지 수정 +smtpd_banner = <로그온 시 경고 메시지> +Step 2) 설정 적용 및 재시작 +# svcadm refresh postfix +[Exim] +Step 1) /exim/exim.conf 파일 내에 SMTP 서버 로그온 경고 메시지 수정 +smtp_banner = <로그온 시 경고 메시지> +Step 2) 설정 적용 및 재시작 +# svcadm refresh exim +[기본 FTP] +Step 1) /etc/default/ftpd 파일 내에 경고 메시지 수정 +BANNER=“<로그온 시 경고 메시지>” +[vsFTP] +Step 1) /etc/vsftpd/vsftpd.conf 파일 내에 FTP 서버 로그온 경고 메시지 수정 +ftpd_banner=<변경할 배너> +Step 2) 설정 적용 및 재시작 +# svcadm refresh vsftpd + + +![이미지 151-0](images/p0151_img0.png) + + +--- + +| 한국인터넷진흥원 | +152 +[ProFTP] +Step 1) /etc/proftpd/proftpd.conf 파일 내에 welcome.msg 파일 경로 확인 및 수정 +DisplayLogin +Step 2) 파일 내에 설정된 FTP 서버 로그온 경고 메시지 수정 +Step 3) 설정 적용 및 재시작 +# svcadm refresh proftpd +l LINUX +[서버] +Step 1) /etc/motd, /etc/issue 파일 내에 경고 메시지 수정 +[Telnet] +Step 1) /etc/issue.net 파일 내에 로그온 경고 메시지 수정 +[SSH] +Step 1) /etc/ssh/sshd_config 파일 내에 설정된 배너 경고 메시지 파일 경로 확인 및 수정 +Banner /etc/issue.net <경고 메시지가 작성된 파일 경로> +Step 2) 파일 내에 경고 메시지 수정 +(일반적으로 /etc/issue 또는 /etc/issue.net 파일 사용) +Step 3) 설정 적용 및 재시작 +# systemctl restart sshd +[Sendmail] +Step 1) /etc/mail/sendmail.cf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +SmtpGreetingMessage=<경고 메시지> +Step 2) 설정 적용 및 재시작 +# systemctl restart sendmail +[Postfix] +Step 1) /etc/postfix/main.cf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +smtpd_banner = <경고 메시지> + + +![이미지 152-0](images/p0152_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +153 +Step 2) 설정 적용 및 재시작 +# systemctl restart postfix +[Exim] +Step 1) /exim/exim.conf 또는 /exim4/exim4.conf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +Step 2) /exim/exim.conf 또는 /exim4/exim4.conf 파일 내에 설정된 SMTP 경고 메시지 수정 +smtp_banner = <경고 메시지> +Step 3) 설정 적용 및 재시작 +# systemctl restart exim +[vsFTP] +Step 1) /etc/vsftpd.conf 또는 /etc/vsftpd/vsftpd.conf 파일 내에 설정된 FTP 서버 로그온 시 경고 메시지 수정 +ftpd_banner=<경고 메시지> +Step 2) 설정 적용 및 재시작 +# systemctl restart vsftpd +[ProFTP] +Step 1) /etc/proftpd.conf 또는 /etc/proftpd/proftpd.conf 파일 내에 설정된 welcome.msg 파일 경로 확인 및 수정 +DisplayLogin +Step 2) 파일 내에 설정된 FTP 서버 로그온 시 경고 메시지 수정 +Step 3) 설정 적용 및 재시작 +# systemctl restart proftpd +[DNS] +Step 1) /etc/named.conf 또는 /etc/bind/named.conf.options 파일 내에 설정된 경고 메시지 수정 +version <경고 메시지>; +Step 2) 설정 적용 및 재시작 +# systemctl restart named + + +![이미지 153-0](images/p0153_img0.png) + + +--- + +| 한국인터넷진흥원 | +154 +l AIX +[서버] +Step 1) /etc/motd, /etc/issue 파일 내에 설정된 서버 로그온 경고 메시지 수정 +[Telnet] +Step 1) /etc/security/login.cfg 파일 내에 설정된 경고 메시지 수정 +default: +~~이하 생략~~ +herald=<경고 메시지> +[SSH] +Step 1) /etc/ssh/sshd_config 파일 내에 설정된 경고 메시지 파일 경로 확인 및 수정 +Banner <경고 메시지가 작성된 파일 경로> +Step 2) 파일 내에 설정된 경고 메시지 수정 +(일반적으로 /etc/issue 또는 /etc/issue.net 파일 사용) +Step 3) SSH 서비스 중지 및 실행 +# stopsrc -s sshd +# startsrc -s sshd +[Sendmail] +Step 1) /etc/mail/sendmail.cf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +SmtpGreetingMessage=<경고 메시지> +Step 2) Sendmail 서비스 중지 및 실행 +# stopsrc -s sendmail +# startsrc -s sendmail +[Postfix] +Step 1) /etc/postfix/main.cf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +smtpd_banner = <경고 메시지> +Step 2) Postfix 서비스 재시작 +# kill -1 + + +![이미지 154-0](images/p0154_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +155 +[Exim] +Step 1) /exim/exim.conf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +smtp_banner = <경고 메시지> +Step 2) Exim 서비스 재시작 +# kill -1 +[기본 FTP] +Step 1) 메시지 카탈로그 파일 생성 +# dspcat -g /usr/lib/nls/msg/en_US/ftpd.cat > /tmp/ftpd.msg +Step 2) /tmp/ftpd.msg 파일 내에 설정된 FTP 서버 로그온 시 경고 메시지 수정 +<변경할 배너> +Step 3) ftpd.cat 파일 생성 +# gencat /usr/lib/nls/msg/en_US/ftpd.cat /tmp/ftpd.msg +[vsFTP] +Step 1) /etc/vsftpd.conf 파일 내에 설정된 FTP 서버 로그온 시 경고 메시지 수정 +ftpd_banner=<경고 메시지> +Step 2) vsFTP 서비스 재시작 +# kill -1 +[ProFTP] +Step 1) /etc/proftpd.conf 파일 내에 설정된 welcome.msg 파일 경로 확인 및 수정 +DisplayLogin +Step 2) 파일 내에 설정된 FTP 서버 로그온 시 경고 메시지 수정 +Step 3) ProFTP 서비스 재시작 +# kill -1 +[DNS] +Step 1) /etc/named.conf 파일 내에 설정된 경고 메시지 수정 +version <경고 메시지>; + + +![이미지 155-0](images/p0155_img0.png) + + +--- + +| 한국인터넷진흥원 | +156 +Step 2) DNS 서비스 중지 및 실행 +# stopsrc –s named +# startsrc -s named +l HP-UX +[서버] +Step 1) /etc/motd, /etc/issue 파일 내에 설정된 로그온 경고 메시지 수정 +[Telnet] +Step 1) /etc/inetd.conf 파일 내에 설정된 경고 메시지 파일 경로 확인 및 수정 +telnet stream tcp6 nowait root /usr/lbin/telnetd telnetd -b /etc/issue 또는 +Step 2) 파일 내에 설정된 경고 메시지 수정 +(일반적으로 /etc/issue 파일 사용) +Step 3) inetd 설정 적용 +# inetd –c +[SSH] +Step 1) /etc/ssh/sshd_config 파일 내에 설정된 경고 메시지 파일 경로 확인 및 수정 +Banner <경고 메시지가 작성된 파일 경로> +Step 2) 파일 내에 설정된 경고 메시지 수정 +(일반적으로 /etc/issue 또는 /etc/issue.net 파일 사용) +Step 3) SSH 서비스 재시작 +# kill -1 +[Sendmail] +Step 1) /etc/mail/sendmail.cf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +SmtpGreetingMessage=<경고 메시지> +Step 2) Sendmail 서비스 재시작 +# kill –1 + + +![이미지 156-0](images/p0156_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +157 +[Postfix] +Step 1) /etc/postfix/main.cf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +smtpd_banner = <경고 메시지> +Step 2) Postfix 서비스 재시작 +# kill -1 +[Exim] +Step 1) /exim/exim.conf 파일 내에 설정된 SMTP 서버 로그온 시 경고 메시지 수정 +smtp_banner = <경고 메시지> +Step 2) Exim 서비스 재시작 +# kill -1 +[기본 FTP] +Step 1) /etc/inetd.conf 파일 내에 설정된 FTP 설정 파일 경로 확인 및 수정 +ftp stream tcp nowait root /usr/lbin/ftpd ftpd –a /etc/ftpd/ftpaccess +Step 2) <기본 FTP 배너 설정 파일 경로> 파일 내에 경고 메시지 수정 +Step 3) /etc/ftpd/ftpaccess 파일 내에 설정값 수정 +[Wu-ftpd v2.4 미만인 경우] +suppresshostname yes +suppressversion yes +banner <경고 메시지가 작성된 파일 경로> +[Wu-ftpd v2.4 이상인 경우] +greeting terse +banner <경고 메시지가 작성된 파일 경로> +# cp /usr/newconfig/etc/ftpd/examples/ftpaccess /etc/ftpd/ftpaccess +Step 4) inetd 설정 적용 +# inetd -c +[vsFTP] + + +![이미지 157-0](images/p0157_img0.png) + + +--- + +| 한국인터넷진흥원 | +158 +Step 1) /etc/vsftpd.conf 파일 내에 설정된 FTP 서버 로그온 시 경고 메시지 수정 +ftpd_banner=<경고 메시지> +Step 2) vsFTP 서비스 재시작 +# kill -1 +[ProFTP] +Step 1) /etc/proftpd.conf 파일 내에 설정된 welcome.msg 파일 경로 확인 및 수정 +DisplayLogin +Step 2) 파일 내에 설정된 FTP 서버 로그온 시 경고 메시지 수정 +Step 3) ProFTP 서비스 재시작 +# kill -1 +[DNS] +Step 1) /etc/named.conf 파일 내에 설정된 경고 메시지 확인 +version <경고 메시지>; +Step 2) DNS 서비스 실행 +# kill -1 + + +![이미지 158-0](images/p0158_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +159 +U-63 +(중) +UNIX > 3. 서비스 관리 +sudo 명령어 접근 관리 +개요 +점검 내용 +/etc/sudoers 파일 권한 적절성 여부 점검 +점검 목적 +비인가자가 관리자 권한을 남용하여 시스템 손상, 악성 코드 실행, 민감한 데이터 유출 등의 보안 위협을 +방지하기 위함 +보안 위협 +sudo 명령어 접근을 제한하지 않을 경우, 비인가자가 관리자 권한으로 허가되지 않은 명령어를 +사용하여 루트 권한 오용, 악성 코드 실행, 데이터 유출 등의 시도를 할 위험이 존재함 +참고 +※ sudo(SuperUser DO): root 권한으로 명령어를 실행함 +※ /etc/sudoers: sudo 명령을 사용하여 다른 명령을 실행할 수 있는 사용자를 지정하는 파일 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : /etc/sudoers 파일 소유자가 root이고, 파일 권한이 640인 경우 +취약 : /etc/sudoers 파일 소유자가 root가 아니거나, 파일 권한이 640을 초과하는 경우 +조치 방법 +/etc/sudoers 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX, AIX, HP-UX +Step 1) /etc/sudoers 파일 소유자 및 권한 확인 +# ls -l /etc/sudoers +Step 2) /etc/sudoers 파일 소유자를 root, 권한 640으로 변경 +# chown root /etc/sudoers +# chmod 640 /etc/sudoer +Step 3) s + + +![이미지 159-0](images/p0159_img0.png) + + +--- + +| 한국인터넷진흥원 | +160 +U-64 +(상) +UNIX > 4. 패치 관리 +주기적 보안 패치 및 벤더 권고사항 적용 +개요 +점검 내용 +시스템에서 최신 패치가 적용 여부 점검 +점검 목적 +주기적인 패치 적용을 통해 시스템 안정성 및 보안성을 확보하기 위함 +보안 위협 +최신 보안패치가 적용되지 않을 경우, 이미 알려진 취약점을 통하여 공격자에 의해 시스템 침해사고 +발생할 위험이 존재함 +참고 +※ 최신 버전의 Kernel을 사용하도록 권고하고 있으나, 시스템 운영상 적용이 어려운 경우 최신 버전이 +아닌 취약점이 존재하지 않는 Kernel 버전도 허용하고 있음 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 패치 적용 정책을 수립하여 주기적으로 패치 관리를 하고 있으며, 패치 관련 내용을 확인하고 +적용하였을 경우 +취약 : 패치 적용 정책을 수립하지 않고 주기적으로 패치 관리를 하지 않거나, 패치 관련 내용을 +확인하지 않고 적용하지 않고 있는 경우 +조치 방법 +OS 관리자, 서비스 개발자가 패치 적용에 따른 서비스 영향 정도를 파악하여 OS 관리자 및 벤더에서 +적용하도록 설정 +※ OS 패치의 경우 지속해서 취약점이 발표되고 있으므로 O/S 관리자, 서비스 개발자가 패치 적용에 +따른 서비스 영향 정도를 정확히 파악하여 주기적인 패치 적용 정책을 수립하여 적용해야 함 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS +[Oracle support이 존재하지 않는 경우] +Step 1) IFO에 ‘i’가 있는 곳에 설치된 패키지 확인 +# pkg list -af entire | head -5 IFO +예시) NAME (PUBLISHER) +VERSION +IFO +entire +11.4-11.4.42.0.0.11.0 +i-- +entire +11.4-11.4.0.0.1.15.0 +--- +entire + +#### 0.5.11-0.175.3.1.0.5.3 + +--- +entire + +#### 0.5.11-0.175.3.1.0.5.2 + +--- + + +![이미지 160-0](images/p0160_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +161 +Step 2) 최신 패키지 확인 +# pkg list -af entire@latest +예시) NAME (PUBLISHER) +VERSION +IFO +entire +11.4-11.4.42.0.0.11.0 +i-- +Step 3) OS 버전으로 업데이트 후 재부팅 +# pkg update --accept +[Oracle support이 존재하는 경우] +Step 1) IFO에 ‘i’ 가 있는 곳에 설치된 패키지 확인 +# pkg list -af entire | head -5 +예시) NAME (PUBLISHER) +VERSION +IFO +entire +11.4-11.4.42.0.0.11.0 +i-- +entire +11.4-11.4.0.0.1.15.0 +--- +entire + +#### 0.5.11-0.175.3.1.0.5.3 + +--- +entire + +#### 0.5.11-0.175.3.1.0.5.2 + +--- +Step 2) 최신 패키지 확인 +# pkg list -af entire@latest +예시) NAME (PUBLISHER) +VERSION +IFO +entire +11.4-11.4.42.0.0.11.0 +i-- +Step 3) 업데이트 프리뷰 +# pkg update –nv entire@버전 이름 +Step 4) 업데이트 후 재부팅 +# pkg update —accept entire@버전 이름 +※ Oracle support 있는지 구분하려면 pkg publisher 명령어를 사용하여 support 리포지토리(repository)가 있어야 +https://pkg.oracle.com/solaris/support/ +※ Oracle support 없으면 분기별로만 업데이트가 가능함 +※ Oracle support 있다면 매달 업데이트(SRU)와 Critical Patch Updates가 support 리포지토리에 담겨 있음 +※ Critical Patch Updates에 대하여 자세한 사항은 아래 링크 참고 +https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/update-sys-add-sw/critical-patch-updat +e-packages.html +※ 자세한 Oracle support 내용은 아래 링크 참고 + + +![이미지 161-0](images/p0161_img0.png) + + +--- + +| 한국인터넷진흥원 | +162 +https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/update-sys-add-sw/accessing-support-u +pdates.html +l LINUX +Step 1) OS 및 커널 버전 확인 +# hostnamectl +Step 2) EOL 상태가 아닌 Linux OS 버전으로 업데이트 +Step 3) 최신 보안 패치가 적용된 Kernel 버전으로 업데이트 +l AIX +[패치 적용 방법] +Step 1) 설치된 OS 또는 버전 확인 +# oslevel -s +Step 2) 서버에 적용되어 있는 패치 리스트 확인 +# instfix -i | grep ML +# instfix -i | grep SP +Step 3) 아래 사이트에 접속하여 최신 패치를 찾아 업데이트 +https://www.ibm.com/support/fixcentral +Step 4) 최신 패치를 다운로드 받은 후 OS 패치 설치 진행 +# smitty installp +Step 5) Install Software 선택 후 INPUT device / directory for software 항목에 패치 파일 경로 입력 +Step 6) SOFTWARE to install 항목에서 all-latest 선택 +Step 7) ACCEPT new license agreements 항목을 yes로 설정 후 설치 진행 +※ 패치 진행 중 문제가 발생한 경우, Apply 설치만 기본 버전으로 재설정 가능 +※ Apply, Commit 된 패키지 확인은 lslpp -l 명령어로 확인 가능 + +[패치 롤백 적용 방법] +Step 1) 설치된 OS 또는 버전 확인 +# oslevel -s +Step 2) 서버에 적용되어 있는 패치 리스트 확인 +# instfix -i | grep ML + + +![이미지 162-0](images/p0162_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +163 +# instfix -i | grep SP +Step 3) OS 패치 롤백 진행 +# smitty install_reject +Step 4) SOFTWARE name 항목에서 Apply 설치된 OS Patch 선택 +Preview 항목 Yes로 설정 +Step 5) 소프트웨어 제거에 문제가 없는지 확인 후 진행 +l HP-UX +[패치 적용 방법] +Step 1) 서버에 적용된 패치 리스트 확인 +# swlist –l product +Step 2) 아래 사이트에 접속 후 패치를 찾아 업데이트 +https://support.hpe.com/hpsc/patch/content?action=home +Step 3) patch 파일을 /tmp 디렉터리 내 저장 +예시) /tmp/patch_10 +Step 4) HP-UX에서 shell archive를 품 +# sh patch_10 +- patch_10.depot, patch_10.text가 생성됨 +Step 5) patch_10.depot 설치 +# swinstall -s /tmp/patch_10.depot (절대경로 입력) +# swinstall -x autoreboot=true -x patch_match_target=true \ -s /tmp/patch_10.depot + + +![이미지 163-0](images/p0163_img0.png) + + +--- + +| 한국인터넷진흥원 | +164 +U-65 +(중) +UNIX > 5. 로그 관리 +NTP 및 시각 동기화 설정 +개요 +점검 내용 +NTP 및 시각 동기화 설정 여부 점검 +점검 목적 +인증 및 감사 목적을 위한 시간 동기화는 필수적이며, 안전하고 승인된 NTP 서비스와 동기화하기 위함 +보안 위협 +시스템 간 시간 동기화 미흡으로 보안 사고 및 장애 발생 시 로그에 대한 신뢰도 확보 미흡 위험이 +존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : NTP 및 시각 동기화 설정이 기준에 따라 적용된 경우 +취약 : NTP 및 시각 동기화 설정이 기준에 따라 적용되어 있지 않은 경우 +조치 방법 +NTP 설정 및 동기화 주기 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, AIX, HP-UX +Step 1) 동기화된 NTP 서버 확인 +# ntpq -pn +예시) 3 u 67 64 12 3.11 -425167 7877.17 +Step 2) /etc/ntp.conf 파일 내의 NTP 설정값 수정(필요시 기존 서버 제거 후 새로운 NTP 서버 추가) +server +Step 3) NTP 서비스 재시작 +l LINUX +[NTP] +Step 1) NTP 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep ntp +Step 2) 동기화된 NTP 서버 확인 +# ntpq -pn + + +![이미지 164-0](images/p0164_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +165 +예시) * 133.243.238.244 2 u 53 64 377 5.730 +2.025 8.323 ++ 3 u 49 64 377 5.838 -16.050 16.484 +- 2 u 2 64 377 187.934 -8.059 81.846 +(이하 생략) +Step 3) /etc/ntp.conf 파일 내에 NTP 서버 추가 +server +Step 4) 설정 적용 및 재시작 +# systemctl restart ntp +※ Redhat 계열 리눅스는 RHEL 8 버전부터 Chrony 서비스로 변경 +[Chrony] +Step 1) Chrony 서비스 활성화 여부 확인 +# systemctl list-units --type=service | grep chrony +Step 2) 동기화된 Chrony 서버 확인 +# chronyc sources +예시) ^- 3 6 37 4 -135us[ +209us] +/- 56ms +^- 3 6 37 5 +841us[+1184us] +/- 57ms +(이하 생략) +Step 3) /etc/chrony.conf 파일 내에 NTP 서버 추가 +server +Step 4) 설정 적용 및 재시작 +# systemctl restart chrony + + +![이미지 165-0](images/p0165_img0.png) + + +--- + +| 한국인터넷진흥원 | +166 +U-66 +(중) +UNIX > 5. 로그 관리 +정책에 따른 시스템 로깅 설정 +개요 +점검 내용 +내부 정책에 따른 시스템 로깅 설정 여부 점검 +점검 목적 +보안 사고 발생 시 원인 파악 및 각종 침해 사실 확인을 하기 위함 +보안 위협 +로깅 설정이 되어 있지 않을 경우, 원인 규명이 어려우며 법적 대응을 위한 충분한 증거로 사용할 수 +없는 위험이 존재함 +참고 +※ 감사 설정이 너무 높으면 보안 로그에 불필요한 항목이 많이 기록되어 매우 중요한 항목과 혼동할 +수 있으며 시스템 성능에도 심각한 영향을 줄 수 있으므로 법적 요구 사항과 조직의 정책에 따라 +필요한 로그를 남기도록 설정해야 함 +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 로그 기록 정책이 보안 정책에 따라 설정되어 수립되어 있으며, 로그를 남기고 있는 경우 +취약 : 로그 기록 정책 미수립 또는 정책에 따라 설정되어 있지 않거나, 로그를 남기고 있지 않은 경우 +조치 방법 +로그 기록 정책을 수립하고, 정책에 따라 (r)syslog.conf 파일을 설정 +조치 시 영향 +아래 제시한 모든 로그를 설정할 경우, 시스템 성능과 로그 저장에 따른 서버 용량 부족 문제가 발생할 +수 있으므로 시스템 운영 환경과 특성을 고려하여 적용 +점검 및 조치 사례 +l SOLARIS +[syslog] +Step 1) /etc/syslog.conf 파일 내에 설정된 로그 기록 정책 수정 +Step 2) 설정 적용 및 재시작 +로그 +로그 파일 경로 +mail.debug +/var/log/mail.log +*.info +/var/log/syslog.log +*.alert +/var/log/syslog.log +*.alert +/dev/console +*.alert +root +*.emerg +* + + +![이미지 166-0](images/p0166_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +167 +# svcadm refresh svc:/system/system-log:default +[rsyslog] +Step 1) /etc/rsyslog.conf 파일 내에 설정된 로그 기록 정책 수정 +로그 +로그 파일 경로 +*.info;mail.none;authpriv.none;cron.none +/var/log/messages +authpriv.* +/var/log/auth.log +mail.* +/var/log/mail.log +cron.* +/var/log/cron.log +alert.* +/dev/console +emerg.* +* +Step 2) 설정 적용 및 재시작 +# svcadm resfresh svc:/system/system-log:rsyslog +l LINUX +Step 1) /etc/rsyslog.conf 또는 /etc/rsyslog.d/default.conf 파일 내에 설정된 로그 기록 정책 수정 +Step 2) 설정 적용 및 재시작 +# systemctl restart rsyslog +l AIX +로그 +로그 파일 경로 +*.info;mail.none;authpriv.none;cron.none +/var/log/messages +auth,authpriv.* +/var/log/secure +mail.* +/var/log/maillog +cron.* +/var/log/cron +*.alert +/dev/console +*.emerg +* + + +![이미지 167-0](images/p0167_img0.png) + + +--- + +| 한국인터넷진흥원 | +168 +Step 1) /etc/syslog.conf 파일 내에 설정된 로그 기록 정책 수정 +로그 +로그 파일 경로 +*.emerg +* +*.alert +/dev/console +*.alert +/var/adm/alert.log +*.err +/var/adm/error.log +mail.info +/var/adm/mail.log +auth.info +/var/adm/auth.log +daemon.info +/var/adm/daemon.log +*.emerg;*.alert;*.crit;*.err;*.warning;*.notice;*.info +/var/adm/messages +Step 2) 설정 적용 +# refresh -s syslogd +l HP-UX +Step 1) /etc/syslog.conf 파일 내에 설정된 로그 기록 정책 수정 +로그 +로그 파일 경로 +*.emerg +* +*.alert +/dev/console +*.alert +root +*.err +/var/adm/syslog/error.log +mail.info +/var/adm/syslog/mail.log +auth.info +/var/adm/syslog/auth.log +*.emerg;*.alert;*.crit;*.err;*.warning;*.notice;*.info +/var/adm/syslog/syslog.log +Step 2) SYSLOG 데몬 재시작 +# kill -1 + + +![이미지 168-0](images/p0168_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +169 +구분 +왼쪽 필드 +오른쪽 필드 +형식 +A, B +C +예시 +mail.debug;cron.crit;auth.info +/var/log/syslog.log +설명 +A 서비스 데몬의 B 로그 레벨 이상 +A 서비스 데몬의 B 로그 레벨 이상 +[syslog.conf 파일 형식] +[오른쪽 필드 로그 형식 종류] +/var/log/syslog.log : 해당 파일에 로그를 기록 +/dev/console : 모니터 화면과 같은 지정된 콘솔로 메시지 출력 +user : 지정된 사용자의 화면에 메시지 출력 +* : 현재 로그인되어 있는 모든 사용자의 화면에 메시지 출력 +@192.168.0.1 : 지정된 호스트로 로그 전송 +서비스 데몬 종류 +메시지 +설명 +auth +로그인 등의 인증 프로그램 유형에서 발행된 메시지 +authpriv +개인 인증을 요구하는 프로그램 유형에서 발행된 메시지 +cron +cron, at 데몬에서 발행된 메시지 +daemon +Telnet, FTP 등 데몬에서 발행한 메시지 +kern +커널에서 발행된 메시지 +lpr +프린터 유형의 프로그램에서 발행된 메시지 +mail +메일 시스템에서 발행된 메시지 +news +유즈넷 뉴스 프로그램에서 발행된 메시지 +syslog +syslog 프로그램 유형에서 발행된 메시지 +user +사용자 프로세스 관련 메시지 +uucp +시스템에서 발행된 메시지 +local0 +여분으로 남겨둔 유형 + + +![이미지 169-0](images/p0169_img0.png) + + +--- + +| 한국인터넷진흥원 | +170 +메시지 우선 순위 +등급 +메시지 +설명 +4 (높음) +Emergency[emerg] +매우 위험한 상황 +3 +Alert[alert] +즉각적인 조치를 해야 하는 상황 +2 +Critical[crit] +하드웨어 등의 심각한 오류가 발생한 상황 +1 +Error[err] +에러 발생 시 +0 +Warning[warning] +주의를 요구하는 메시지 +-1 +Notice[notice] +에러가 아닌 알림에 관한 메시지 +-2 +Information[info] +단순한 프로그램에 대한 정보 메시지 +-3 (낮음) +Debug[Dedug] +프로그램 실행 오류 발생 시 + + +![이미지 170-0](images/p0170_img0.png) + + +--- + +01. Unix 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +171 +U-67 +(중) +UNIX > 5. 로그 관리 +로그 디렉터리 소유자 및 권한 설정 +개요 +점검 내용 +로그에 대한 접근 통제 및 관리 여부 점검 +점검 목적 +로그 파일을 관리자만 제어할 수 있게 하여 비인가자의 임의적인 파일 훼손 및 변조를 방지하기 위함 +보안 위협 +로그에 대한 접근 통제가 미흡할 경우, 비인가자가 로그에서 정보를 획득하거나 로그 자체를 변조할 수 +있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +SOLARIS, LINUX, AIX, HP-UX 등 +판단 기준 +양호 : 디렉터리 내 로그 파일의 소유자가 root이고, 권한이 644 이하인 경우 +취약 : 디렉터리 내 로그 파일의 소유자가 root가 아니거나, 권한이 644를 초과하는 경우 +조치 방법 +디렉터리 내 로그 파일 소유자 및 권한 변경 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l SOLARIS, LINUX +Step 1) /var/log/ 디렉터리 내 로그 파일의 소유자 및 권한 변경 +# chown root /var/log/<파일 이름> +# chmod 644 /var/log/<파일 이름> +l AIX +Step 1) /var/adm/ 디렉터리 내 로그 파일의 소유자 및 권한 변경 +# chown root /var/adm/<파일 이름> +# chmod 644 /var/adm/<파일 이름> +l HP-UX +Step 1) /var/adm/syslog/ 디렉터리 내 로그 파일의 소유자 및 권한 변경 +# chown root /var/adm/syslog/<파일 이름> +# chmod 644 /var/adm/syslog/<파일 이름> + + +![이미지 171-0](images/p0171_img0.png) + + +--- + +Windows 서버 + +## 1. 계정 관리················································································································177 + + +## 2. 서비스 관리·············································································································196 + + +## 3. 패치 관리················································································································233 + + +## 4. 로그 관리················································································································235 + + +## 5. 보안 관리················································································································241 + +Chapter 02 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 172-0](images/p0172_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +173 +01 +Windows 서버 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +Administrator 계정 이름 변경 등 보안성 강화 +상 +W-01 +Guest 계정 비활성화 +상 +W-02 +불필요한 계정 제거 +상 +W-03 +계정 잠금 임계값 설정 +상 +W-04 +해독 가능한 암호화를 사용하여 암호 저장 해제 +상 +W-05 +관리자 그룹에 최소한의 사용자 포함 +상 +W-06 +Everyone 사용 권한을 익명 사용자에게 적용 +중 +W-07 +계정 잠금 기간 설정 +중 +W-08 +비밀번호 관리정책 설정 +상 +W-09 +마지막 사용자 이름 표시 안 함 +중 +W-10 +로컬 로그온 허용 +중 +W-11 +익명 SID/이름 변환 허용 해제 +중 +W-12 +콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 +중 +W-13 +원격터미널 접속 가능한 사용자 그룹 제한 +중 +W-14 + +## 2. 서비스 관리 + +점검항목 +항목 +중요도 +항목코드 +사용자 개인키 사용 시 암호 입력 +상 +W-15 +공유 권한 및 사용자 그룹 설정 +상 +W-16 +하드디스크 기본 공유 제거 +상 +W-17 +불필요한 서비스 제거 +상 +W-18 + + +![이미지 173-0](images/p0173_img0.png) + + +![이미지 173-1](images/p0173_img1.png) + + +--- + +| 한국인터넷진흥원 | +174 + +## 3. 패치 관리 + +점검항목 +항목 +중요도 +항목코드 +주기적 보안 패치 및 벤더 권고사항 적용 +상 +W-38 +백신 프로그램 업데이트 +상 +W-39 +점검항목 +항목 +중요도 +항목코드 +불필요한 IIS 서비스 구동 점검 +상 +W-19 +NetBIOS 바인딩 서비스 구동 점검 +상 +W-20 +암호화되지 않는 FTP 서비스 비활성화 +상 +W-21 +FTP 디렉토리 접근권한 설정 +상 +W-22 +공유 서비스에 대한 익명 접근 제한 설정 +상 +W-23 +FTP 접근 제어 설정 +상 +W-24 +DNS Zone Transfer 설정 +상 +W-25 +RDS(Remote Data Services)제거 +상 +W-26 +최신 Windows OS Build 버전 적용 +상 +W-27 +터미널 서비스 암호화 수준 설정 +중 +W-28 +불필요한 SNMP 서비스 구동 점검 +중 +W-29 +SNMP Community String 복잡성 설정 +중 +W-30 +SNMP Access control 설정 +중 +W-31 +DNS 서비스 구동 점검 +중 +W-32 +HTTP/FTP/SMTP 배너 차단 +하 +W-33 +Telnet 서비스 비활성화 +중 +W-34 +불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 +중 +W-35 +원격터미널 접속 타임아웃 설정 +중 +W-36 +예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 +중 +W-37 + + +![이미지 174-0](images/p0174_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +175 + +## 4. 로그 관리 + +점검항목 +항목 +중요도 +항목코드 +정책에 따른 시스템 로깅 설정 +중 +W-40 +NTP 및 시각 동기화 설정 +중 +W-41 +이벤트 로그 관리 설정 +하 +W-42 +이벤트 로그 파일 접근 통제 설정 +중 +W-43 + +## 5. 보안 관리 + +점검항목 +항목 +중요도 +항목코드 +원격으로 액세스할 수 있는 레지스트리 경로 +상 +W-44 +백신 프로그램 설치 +상 +W-45 +SAM 파일 접근 통제 설정 +상 +W-46 +화면보호기 설정 +상 +W-47 +로그온하지 않고 시스템 종료 허용 +상 +W-48 +원격 시스템에서 강제로 시스템 종료 +상 +W-49 +보안 감사를 로그할 수 없는 경우 즉시 시스템 종료 +상 +W-50 +SAM 계정과 공유의 익명 열거 허용 안 함 +상 +W-51 +Autologon 기능 제어 +상 +W-52 +이동식 미디어 포맷 및 꺼내기 허용 +상 +W-53 +Dos공격 방어 레지스트리 설정 +중 +W-54 +사용자가 프린터 드라이버를 설치할 수 없게 함 +중 +W-55 +SMB 세션 중단 관리 설정 +중 +W-56 +로그온 시 경고 메시지 설정 +하 +W-57 +사용자별 홈 디렉터리 권한 설정 +중 +W-58 +LAN Manager 인증 수준 +중 +W-59 +보안 채널 데이터 디지털 암호화 또는 서명 +중 +W-60 + + +![이미지 175-0](images/p0175_img0.png) + + +--- + +| 한국인터넷진흥원 | +176 +점검항목 +항목 +중요도 +항목코드 +파일 및 디렉토리 보호 +중 +W-61 +시작프로그램 목록 분석 +중 +W-62 +도메인 컨트롤러-사용자의 시간 동기화 +중 +W-63 +윈도우 방화벽 설정 +중 +W-64 + + +![이미지 176-0](images/p0176_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +177 +W-01 +(상) +Windows 서버 > 1. 계정 관리 +Administrator 계정 이름 변경 등 보안성 강화 +개요 +점검 내용 +윈도우 최상위 관리자 계정인 Administrator의 계정명 변경 또는 보안을 고려한 비밀번호 설정 여부 +점검 +점검 목적 +윈도우 기본 관리자 계정인 Administrator의 이름을 변경 또는 보안을 고려한, 잘 알려진 계정을 통한 +악의적인 패스워드 추측 공격을 차단하기 위함 +보안 위협 +Ÿ 일반적으로 관리자 계정으로 잘 알려진 Administrator를 변경하지 않는 경우 악의적인 사용자의 +패스워드 추측 공격을 통해 사용 권한 상승의 위험이 있으며, 관리자를 유인하여 침입자의 액세스를 +허용하는 악성코드를 실행할 위험이 존재함 +Ÿ 윈도우 최상위 관리자 계정인 Administrator는 기본적으로 삭제하거나 잠글 수 없어 악의적인 +사용자의 목표가 될 위험이 존재함 +참고 +※ 윈도우 서버는 Administrator 계정을 비활성화할 수 있으나 안전 모드로 컴퓨터를 시작할 경우 본 +계정은 자동으로 활성화됨 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : Administrator 기본 계정 이름을 변경하거나 강화된 비밀번호를 적용한 경우 +취약 : Administrator 기본 계정 이름을 변경하지 않거나 단순 비밀번호를 적용한 경우 +조치 방법 +Administrator 기본 계정 이름 변경 및 보안성이 있는 비밀번호 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 관리 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “계정: Administrator 계정 이름 바꾸기”를 유추하기 어려운 계정 이름으로 변경 +[ Administrator 계정 이름 변경 ] + + +![이미지 177-0](images/p0177_img0.png) + + +![이미지 177-1](images/p0177_img1.png) + + +--- + +| 한국인터넷진흥원 | +178 +W-02 +(상) +Windows 서버 > 1. 계정 관리 +Guest 계정 비활성화 +개요 +점검 내용 +Guest 계정 비활성화 여부 점검 +점검 목적 +Guest 계정을 비활성화하여 불특정 다수의 임시적인 시스템 접근을 차단하기 위함 +보안 위협 +Guest 계정은 시스템에 임시로 액세스해야 하는 사용자용 계정으로, 해당 계정을 사용하여 권한 없는 +사용자가 시스템에 익명으로 액세스할 수 있으므로 비인가자 접근, 정보 유출 등 보안 위험이 존재함 +참고 +※ Windows Guest 계정은 삭제 불가능한 built-in 계정으로 보안 강화 목적으로 반드시 비활성화 처 +리해야 함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : Guest 계정이 비활성화되어 있는 경우 +취약 : Guest 계정이 활성화되어 있는 경우 +조치 방법 +Guest 계정 비활성화 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 프로그램 > 관리 도구 > 도메인 사용자 관리 > Guest 계정 선택 > 등록정보 +Step 2) “계정 사용 안 함” 설정 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 > 계정: Guest 계정 상태 +Step 2) 계정 “사용 안 함” 설정 +[ Guest 계정 상태 사용 안 함 설정 ] + + +![이미지 178-0](images/p0178_img0.png) + + +![이미지 178-1](images/p0178_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +179 +W-03 +(상) +Windows 서버 > 1. 계정 관리 +불필요한 계정 제거 +개요 +점검 내용 +시스템 내 불필요한 계정 및 의심스러운 계정의 존재 여부를 점검 +점검 목적 +퇴직, 전직, 휴직 등의 이유로 사용하지 않는 계정, 불필요한 계정 및 의심스러운 계정을 삭제하여, +일반적으로 로그인이 필요치 않은 해당 계정들을 통한 로그인을 차단하고, 계정의 패스워드 추측 공격 +시도를 차단하기 위함 +보안 위협 +관리되지 않은 불필요한 계정은 장기간 비밀번호가 변경되지 않아 무차별 대입 공격(Brute Force +Attack)이나 비밀번호 추측 공격(Password Guessing Attack)의 가능성이 존재하며, 또한 이런 +공격으로 계정정보가 유출되어도 유출 사실을 인지하기 어려워 초기 대응이 불가능한 위험이 존재함 +참고 +※ 무차별 대입 공격(Brute Force Attack): 특정 암호를 해독하기 위해 가능한 모든 값을 대입하는 +공격 방법 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 불필요한 계정이 존재하지 않는 경우 +취약 : 불필요한 계정이 존재하는 경우 +조치 방법 +현재 계정 현황 확인 후 불필요한 계정 삭제 +조치 시 영향 +명확하게 파악되지 않은 계정을 삭제하는 경우 해당 계정과 관련한 업무에 장애 발생 가능성이 존재함 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 프로그램 > 관리 도구 > 도메인 사용자 관리> 계정 선택> 등록 정보 +Step 2) “계정 사용 안 함” 설정 또는 계정 삭제 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 컴퓨터 관리 > 로컬 사용자 및 그룹 > 사용자 +Step 2) 등록된 계정 중 불필요한 사용자 선택 > 속성 > “계정 사용 안 함” 설정 또는 계정 삭제 +[ 사용자 계정 확인 ] + + +![이미지 179-0](images/p0179_img0.png) + + +![이미지 179-1](images/p0179_img1.png) + + +--- + +| 한국인터넷진흥원 | +180 +W-04 +(상) +Windows 서버 > 1. 계정 관리 +계정 잠금 임계값 설정 +개요 +점검 내용 +계정 잠금 임계값의 설정 여부 점검 +점검 목적 +계정 잠금 임계값을 설정하여 공격자의 자유로운 자동화 암호 유추 공격을 차단하기 위함 +보안 위협 +공격자는 시스템의 계정 잠금 임계값이 설정되지 않는 경우, 자동화된 방법을 이용하여 모든 사용자 +계정에 대해 암호 조합 공격을 자유롭게 시도할 수 있으므로 사용자 계정 정보의 노출 위험이 존재함 +참고 +※ 계정 잠금 임계값 설정은 사용자 계정이 잠기는 로그온 실패 횟수를 결정하며 잠긴 계정은 관리자가 +재설정하거나 해당 계정의 잠금 유지 시간이 만료되어야 사용할 수 있음 +※ 계정 잠금 정책: 해당 계정이 시스템으로부터 잠기는 환경과 시간을 결정하는 정책으로 ‘계정 잠금 기 +간’, ‘계정 잠금 임계값’, ‘다음 시간 후 계정 잠금 수를 원래대로 설정’의 세 가지 하위 정책을 가짐 +※ 관련 점검 항목: W-08(중) +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 계정 잠금 임계값이 5 이하의 값으로 설정된 경우 +취약 : 계정 잠금 임계값이 5 초과의 값으로 설정된 경우 +조치 방법 +계정 잠금 임계값을 5 이하의 값으로 설정 +조치 시 영향 +Administrator 계정은 잠기지 않으며, 일반 계정의 경우 5회 패스워드 입력 실패 시 잠김 +점검 및 조치 사례 +l Window NT +Step 1) 시작 > 프로그램 > 관리 도구 > 도메인 사용자 관리자 > 정책 > 계정 정책 +Step 2) “계정 잠금” 선택 후 “잠금”에 “5” 이하의 값 설정 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +Step 2) “계정 잠금 임계값”을 “5” 이하의 값으로 설정 +[ 계정 잠금 임계값 설정 ] + + +![이미지 180-0](images/p0180_img0.png) + + +![이미지 180-1](images/p0180_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +181 +W-05 +(상) +Windows 서버 > 1. 계정 관리 +해독 가능한 암호화를 사용하여 암호 저장 해제 +개요 +점검 내용 +해독 가능한 암호화 사용 여부 점검 +점검 목적 +“해독 가능한 암호화를 사용하여 암호 저장” 정책이 설정되어 사용자 계정 비밀번호가 해독 가능한 +텍스트 형태로 저장되는 것을 차단하기 위함 +보안 위협 +위 정책이 설정된 경우 운영체제에서 사용자 계정, 비밀번호를 입력받아 인증을 진행하는 응용 프로그램 +프로토콜 지원 시 운영체제는 사용자의 비밀번호를 해독 가능한 방식으로 저장하기 때문에, 노출된 +계정에 대해 공격자가 비밀번호 복호화 공격으로 비밀번호를 획득하여 네트워크 리소스에 접근할 +위험이 존재함 +참고 +※ “해독 가능한 암호화를 사용하여 암호 저장” 정책은 암호를 암호화하지 않은 상태로 저장하여 일반 +텍스트 버전의 암호를 저장하는 것과 같으나 시스템에서 기본적으로 동작하지는 않음 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “해독 가능한 암호화를 사용하여 암호 저장” 정책이 “사용 안 함”으로 설정된 경우 +취약 : “해독 가능한 암호화를 사용하여 암호 저장” 정책이 “사용”으로 설정된 경우 +조치 방법 +“해독 가능한 암호화를 사용하여 암호 저장”을 “사용 안 함”으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Window NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +Step 2) “해독 가능한 암호화를 사용하여 암호 저장”을 “사용 안 함”으로 설정 +[ 해독 가능한 암호화를 사용하여 암호 저장 정책 설정 ] + + +![이미지 181-0](images/p0181_img0.png) + + +![이미지 181-1](images/p0181_img1.png) + + +--- + +| 한국인터넷진흥원 | +182 +W-06 +(상) +Windows 서버 > 1. 계정 관리 +관리자 그룹에 최소한의 사용자 포함 +개요 +점검 내용 +관리자 그룹에 불필요한 사용자의 포함 여부 점검 +점검 목적 +관리자 그룹 구성원에 불필요한 사용자의 포함 여부를 점검하여, 관리 권한 사용자를 최소화하고자 함 +보안 위협 +Administrators와 같은 관리자 그룹에 속한 구성원은 컴퓨터 시스템에 대한 완전하고 제한 없는 +액세스 권한을 가지므로, 사용자를 관리자 그룹에 포함하면 비인가 사용자에 대한 과도한 관리 권한이 +부여되어 내부 정보 유출 위험이 존재함 +참고 +※ 관리 권한의 오남용으로 인한 시스템 피해를 줄이기 위해서 관리 업무를 위한 계정과 일반 업무를 +위한 계정을 분리하여 사용하는 것이 바람직함 +※ 시스템 관리를 위해서 관리 권한 계정과 일반 권한 계정을 분리하여 운영하는 것을 권고 +※ 시스템 관리자는 원칙적으로 1명 이하로 유지하고, 부득이하게 2명 이상의 관리 권한자를 유지해야 +할 경우, 관리자 그룹에는 최소한의 사용자만 포함하도록 해야 함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : Administrators 그룹의 구성원을 1명 이하로 유지하거나, 불필요한 관리자 계정이 존재하지 않 +는 경우 +취약 : Administrators 그룹에 불필요한 관리자 계정이 존재하는 경우 +조치 방법 +Administrators 그룹에 포함된 불필요한 계정 제거 +조치 시 영향 +Administrator 그룹에 있는 계정을 잘못 삭제하는 경우 해당 업무에 장애 발생 가능성이 있음 +점검 및 조치 사례 +l Window NT +Step 1) 시작 > 프로그램 > 관리 도구 > 도메인 사용자 관리 > Administrators 그룹 > 등록 정보 +Step 2) Administrator 그룹에서 불필요한 계정 제거 후 그룹 변경 + + +![이미지 182-0](images/p0182_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +183 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 컴퓨터 관리 > 로컬 사용자 및 그룹 > 그룹 > Administrators > 속성 +Step 2) Administrators 그룹에서 불필요한 계정 제거 후 그룹 변경 +[ 관리자 계정 그룹 불필요한 계정 확인 ] + + +![이미지 183-0](images/p0183_img0.png) + + +![이미지 183-1](images/p0183_img1.png) + + +--- + +| 한국인터넷진흥원 | +184 +W-07 +(중) +Windows 서버 > 1. 계정 관리 +Everyone 사용 권한을 익명 사용자에 적용 +개요 +점검 내용 +“Everyone 사용 권한을 익명 사용자에 적용” 정책의 설정 여부 점검 +점검 목적 +익명 사용자가 Everyone 그룹으로 사용 권한을 준 모든 리소스에 접근하는 것을 차단하여 비인가자에 +의한 접근 가능성을 제한하기 위함 +보안 위협 +해당 정책이 “사용”으로 설정될 경우 권한이 없는 사용자가 익명으로 계정 이름 및 공유 리소스를 +나열하고 이 정보를 사용하여 암호를 추측하거나 DoS(Denial of Service) 공격을 실행할 위험이 +존재함 +참고 +※ DoS(Denial of Service): 관리자 권한 없이도 특정 서버에 처리할 수 없을 정도로 대량의 접속 신 +호를 한꺼번에 보내 해당 서버가 마비되도록 하는 해킹 기법 +점검 대상 및 판단 기준 +대상 +2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “Everyone 사용 권한을 익명 사용자에게 적용” 정책이 “사용 안 함”으로 되어 있는 경우 +취약 : “Everyone 사용 권한을 익명 사용자에게 적용” 정책이 “사용”으로 되어 있는 경우 +조치 방법 +“Everyone 사용 권한을 익명 사용자에게 적용”정책을 “사용 안 함”으로 설정 +조치 시 영향 +응용프로그램이나 Backup 용도로 Everyone 공유를 사용하지 않는지 확인 필요 +점검 및 조치 사례 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “Everyone 사용 권한을 익명 사용자에게 적용”을 “사용 안 함”으로 설정 +[ Everyone 사용 권한을 익명 사용자에게 적용 정책 설정 ] + + +![이미지 184-0](images/p0184_img0.png) + + +![이미지 184-1](images/p0184_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +185 +W-08 +(중) +Windows 서버 > 1. 계정 관리 +계정 잠금 기간 설정 +개요 +점검 내용 +사용자 계정 잠금 기간 정책 설정 여부 점검 +점검 목적 +로그인 실패 임계값 초과 시 일정 시간 동안 계정 잠금을 실시하여 공격자의 자유로운 비밀번호 유추 +공격을 차단하기 위함 +보안 위협 +로그인 실패 시 일정 시간 동안 계정 잠금을 하지 않은 경우, 공격자의 자동화된 비밀번호 추측 공격이 +가능하여, 사용자 계정의 비밀번호 정보가 유출될 위험이 존재함 +참고 +※ 계정 잠금 기간 설정은 계정 잠금 임계값을 초과한 사용자 계정이 잠기는 시간을 결정함. 잠긴 계정 +은 관리자가 재설정하거나 해당 계정의 잠금 유지 시간이 만료되어야 사용할 수 있음 +※ 계정 잠금 기간 설정을 사용하면 해당 기간 잠긴 계정은 사용할 수 없으며, 계정 잠금이 해제될 때까 +지 접근할 수 없음 +※ 계정 잠금 정책: 해당 계정이 시스템으로부터 잠기는 환경과 시간을 결정하는 정책으로 ‘계정 잠금 +기간’, ‘계정 잠금 임계값’, ‘다음 시간 후 계정 잠금 수를 원래대로 설정’의 세 가지 하위 정책을 가 +짐 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “계정 잠금 기간” 및 “계정 잠금 기간 원래대로 설정 기간”이 60분 이상으로 설정된 경우 +취약 : “계정 잠금 기간” 및 “잠금 기간 원래대로 설정 기간”이 설정되지 않거나 60분 미만으로 설정된 +경우 +조치 방법 +“계정 잠금 기간” 및 “잠금 기간 원래대로 설정 기간” 60분 이상으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Window NT +Step 1) 시작 > 프로그램 > 관리 도구 > 도메인 사용자 관리자 > 정책 > 계정 정책 +Step 2) “횟수 다시 설정”을 “60분”으로 설정, “잠금 유지 기간”의 “시간제한”을 “60분”으로 설정 + + +![이미지 185-0](images/p0185_img0.png) + + +--- + +| 한국인터넷진흥원 | +186 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 계정 정책 > 계정 잠금 정책 +Step 2) “계정 잠금 기간”, “다음 시간 후 계정 잠금 수를 원래대로 설정”에 대해 각각 “60분” 설정 +[ 계정 잠금 정책 설정 ] + + +![이미지 186-0](images/p0186_img0.png) + + +![이미지 186-1](images/p0186_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +187 +W-09 +(상) +Windows 서버 > 1. 계정 관리 +비밀번호 관리 정책 설정 +개요 +점검 내용 +계정 비밀번호 관리 정책 설정 여부 점검 +점검 목적 +비밀번호 설정 시 복잡성, 최소 비밀번호 길이, 최대/최소 사용 기간을 만족하도록 함 +보안 위협 +사용자 비밀번호 관리 정책 설정을 만족하지 못하면 무차별 대입 공격(Brute Force Attack)이나 +비밀번호 추측 공격(Password Guessing Attack)에 쉽게 크랙 될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 계정 비밀번호 관리 정책이 모두 적용된 경우 +취약 : 계정 비밀번호 관리 정책이 모두 적용되어 있지 않은 경우 +조치 방법 +비밀번호 복잡성, 최소 비밀번호 길이, 최대/최소 사용 기간을 기준에 맞게 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 프로그램 > 관리 도구 > 도메인 사용자 관리자 > 정책 > 계정 +Step 2) “최소 암호 길이”에 “최소”를 “8문자”로 설정 +Step 3) “최대 암호 사용 기간”의 “사용 기간”을 “90일”로 설정 +Step 4) “최소 암호 사용 기간”에서 “사용 기간”을 “1일”로 설정 +Step 5) “암호 유일성”에서 “기억”을 “4개”로 설정 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 계정 정책 > 암호 정책 +Step 2) “암호는 복잡성을 만족해야 함”을 “사용”으로 설정 +Step 3) “최근 암호 기억”을 “4개 암호 기억됨”으로 설정 +Step 4) “최대 암호 사용 기간”의 다음 이후 암호 만료 기간을 “90일”로 설정 +Step 5) “최소 암호 길이”를 “8문자”로 설정 +Step 6) “최소 암호 사용 기간”을 “1일”로 설정 + + +![이미지 187-0](images/p0187_img0.png) + + +--- + +| 한국인터넷진흥원 | +188 +[ 암호 정책 설정 ] +※ 해당 정책 설정은 비밀번호를 변경하거나 새로운 비밀번호 생성 시 아래와 같은 일련의 규정을 만족하는지 +결정함. 영문, 숫자, 특수문자 중 2종류 이상을 조합하여 최소 10자리 이상 또는 3종류 이상을 조합하여 최소 +8자리 이상의 길이로 구성 +가. 영문 대문자(26개) +나. 영문 소문자(26개) +다. 숫자(10개) +라. 특수문자(32개) + + +![이미지 188-0](images/p0188_img0.png) + + +![이미지 188-1](images/p0188_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +189 +W-10 +(중) +Windows 서버 > 1. 계정 관리 +마지막 사용자 이름 표시 안 함 +개요 +점검 내용 +로그인 화면에 마지막 로그온 사용자 이름을 표시하지 않도록 설정되었는지를 점검 +점검 목적 +Windows 로그인 화면에 마지막 로그온한 사용자 이름이 표시되지 않도록 하여 악의적인 사용자에게 +계정 정보가 노출되는 것을 차단하고자 함 +보안 위협 +마지막으로 로그온한 사용자의 이름이 로그온 대화상자에 표시될 경우 공격자는 이를 획득하여 +비밀번호를 추측하거나 무작위 공격을 시도할 위험이 존재함 +참고 +※ Windows 로그인 화면에 마지막 로그온한 사용자 이름이 표시될 경우 주로 콘솔 사용자 및 터미널 +서비스 이용자에게 시스템에 존재하는 사용자 계정 정보를 노출함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “마지막 사용자 이름 표시 안 함”이 “사용”으로 설정된 경우 +취약 : “마지막 사용자 이름 표시 안 함”이 “사용 안 함”으로 설정된 경우 +조치 방법 +※ Windows NT: 마지막으로 로그온한 사용자 이름 표시 안 함 설정 +※ Windows 2000: 로그온 스크린에 마지막 사용자 이름 표시 안 함 사용 설정 +※ Windows 2003, 2008, 2012, 2016, 2019, 2022: 대화형 로그온: 마지막 사용자 이름 표시 안 +함 사용 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 프로그램 > 관리 도구 > 시스템 정책 편집기 > 파일 > 레지스트리 열기 > 로컬 컴퓨터 > 편집 > 등 +록 정보 > Windows NT 시스템 > 로그온 > “마지막으로 로그온한 사용자 이름 표시 안 함”을 설정한 후 +저장 +l Windows 2000 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “로그온 스크린에 마지막 사용자 이름 표시 안 함”을 “사용”으로 설정 + + +![이미지 189-0](images/p0189_img0.png) + + +--- + +| 한국인터넷진흥원 | +190 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “대화형 로그온: 마지막 사용자 이름 표시 안 함”을 “사용”으로 설정 +[ 마지막 로그인 사용자 이름 표시 안 함 ] + + +![이미지 190-0](images/p0190_img0.png) + + +![이미지 190-1](images/p0190_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +191 +W-11 +(중) +Windows 서버 > 1. 계정 관리 +로컬 로그온 허용 +개요 +점검 내용 +불필요한 계정의 로컬 로그온을 허용 여부 점검 +점검 목적 +불필요한 계정에 로컬 로그온이 허용될 경우를 찾아 비인가자의 불법적인 시스템 로컬 접근을 +차단하고자 함 +보안 위협 +불필요한 사용자에게 로컬 로그온이 허용될 경우 비인가자를 통한 권한 상승을 위한 악성 코드 실행 +위험이 존재함 +참고 +※ “로컬로 로그온 허용” 권한은 시스템 콘솔에 로그인을 허용하는 권한으로 반드시 콘솔 접근이 필요 +한 사용자 계정에만 해당 권한을 부여해야 함 +※ IIS 서비스를 사용할 경우 이 권한에 IUSR_ 계정을 할당함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 로컬 로그온 허용 정책에 Administrators, IUSR_ 만 존재하는 경우 +취약 : 로컬 로그온 허용 정책에 Administrators, IUSR_ 외 다른 계정 및 그룹이 존재하는 경우 +조치 방법 +Administrators, IUSR_ 외 다른 계정 및 그룹의 로컬 로그온 제한 +조치 시 영향 +Administrators, IUSR_ 계정 외 로컬에서 접속이 필요한 계정 삭제 시 사용 중인 서비스에 장애를 줄 +수 있음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +Step 2) “로컬 로그온 허용(또는, 로컬 로그온)” 정책에 “Adminstrators”, “IUSR_” 외 다른 계정 및 그룹 제거 +[ 로컬 로그온 허용 정책 설정 ] + + +![이미지 191-0](images/p0191_img0.png) + + +![이미지 191-1](images/p0191_img1.png) + + +--- + +| 한국인터넷진흥원 | +192 +W-12 +(중) +Windows 서버 > 1. 계정 관리 +익명 SID/이름 변환 허용 해제 +개요 +점검 내용 +익명 SID/이름 변환 정책 적용 여부 점검 +점검 목적 +익명 SID/이름 변환 정책을 “사용 안 함”으로 설정하여, SID(보안 식별자)를 사용하여 관리자 이름을 +찾을 수 없도록 하기 위함 +보안 위협 +해당 정책이 “사용함”으로 설정될 경우 로컬 접근 권한이 있는 사용자가 잘 알려진 Administrator +SID를 사용하여 Administrator 계정의 실제 이름을 알아낼 수 있으며 암호 추측 공격 위험이 존재함 +참고 +※ 해당 정책이 설정될 경우 익명 사용자가 다른 사용자의 SID(보안 식별자) 특성을 요청할 수 있음 +※ “사용 안 함”으로 정책을 설정할 경우 Windows NT 도메인 환경에서 통신 불가능하게 될 수 있음 +점검 대상 및 판단 기준 +대상 +Windows 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “익명 SID/이름 변환 허용” 정책이 “사용 안 함”으로 설정된 경우 +취약 : “익명 SID/이름 변환 허용” 정책이 “사용”으로 설정된 경우 +조치 방법 +“네트워크 액세스: 익명 SID/이름 변환 허용” 정책 “사용 안 함” 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “네트워크 액세스: 익명 SID/이름 변환 허용” 정책이 “사용 안 함”으로 설정 +[익명 SID/이름 변환 허용] +※ Windows Server 2000 이하 버전 해당 사항 없음 + + +![이미지 192-0](images/p0192_img0.png) + + +![이미지 192-1](images/p0192_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +193 +W-13 +(중) +Windows 서버 > 1. 계정 관리 +콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 +개요 +점검 내용 +콘솔 로그인 시 빈 비밀번호 사용 가능 여부 점검 +점검 목적 +빈 비밀번호를 가진 계정의 콘솔 및 네트워크 서비스 접근을 차단하기 위함 +보안 위협 +해당 정책이 “사용 안 함”으로 설정될 경우 빈 비밀번호를 가진 로컬 계정에 대하여 터미널 서비스(원격 +데스크톱 서비스), Telnet 및 FTP와 같은 네트워크 서비스의 원격 대화형 로그온이 가능하여, 시스템 +내부 정보 유출 위험이 존재함 +참고 +※ 윈도우 원격 제어(mstsc)는 보안상 계정에 비밀번호가 걸린 계정만 접속하도록 하고 있으나 해당 +정책을 활성화하면 계정에 비밀번호가 걸려 있지 않아도 원격 제어가 가능함 +점검 대상 및 판단 기준 +대상 +Windows 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한” 정책이 “사용”인 경우 +취약 : “콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한” 정책이 “사용 안 함”인 경우 +조치 방법 +“계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한” 정책을 “사용”으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한” 정책을 “사용”으로 설정 +[ 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한 설정 ] + + +![이미지 193-0](images/p0193_img0.png) + + +![이미지 193-1](images/p0193_img1.png) + + +--- + +| 한국인터넷진흥원 | +194 +W-14 +(중) +Windows 서버 > 1. 계정 관리 +원격터미널 접속 가능한 사용자 그룹 제한 +개요 +점검 내용 +원격터미널 사용자 그룹 내 비인가자 포함 여부 점검 +점검 목적 +비인가자의 원격터미널 접속을 제한하기 위함 +보안 위협 +원격터미널의 그룹이나 계정을 제한하지 않으면 임의의 사용자가 원격으로 접속하여 해당 서버에 +정보를 변경하거나 정보가 유출될 위험이 존재함 +참고 +※ 컴퓨터 관리 > 로컬 사용자 및 그룹 > Remote Desktop Users 그룹에서 추가 가능 +점검 대상 및 판단 기준 +대상 +Windows 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : (관리자 계정을 제외한) 원격 접속이 가능한 계정을 생성하여 타 사용자의 원격 접속을 제한하고, +원격 접속 사용자 그룹에 불필요한 계정이 등록되어 있지 않은 경우 +취약 : (관리자 계정을 제외한) 원격 접속이 가능한 별도의 계정이 존재하지 않는 경우 +조치 방법 +관리자 계정과 이외의 계정을 생성, 권한을 제한 사용 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2003 +Step 1) 제어판 > 사용자 계정 > 관리자 계정 이외의 계정 생성한 후 +Step 2) 제어판 > 시스템 > [원격] 탭 > [원격] 탭 메뉴에서 “사용자가 이 컴퓨터에 원격으로 연결할 수 있음”에 +체크 > “원격 사용자 선택”에서 원격 사용자 지정 후 확인 +l Windows 2008 +Step 1) 제어판 > 사용자 계정 > 관리자 계정 이외의 계정 생성한 후 +Step 2) 제어판 > 시스템 > 원격 설정 > [원격] 탭 > [원격 데스크톱] 메뉴 > “모든 버전의 원격 데스크톱을 실행 +중인 컴퓨터에서 연결 허용(보안 수준 낮음)” 또는 “네트워크 수준 인증을 사용하여 원격 데스크톱을 실 +행하는 컴퓨터에서만 연결 허용(보안 수준 높음)” 중 하나에 체크 > “사용자 선택”에서 원격 사용자 지정 +후 확인 + + +![이미지 194-0](images/p0194_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +195 +l Windows 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 사용자 계정 > 계정 관리 > 관리자 계정 이외의 계정 생성 +Step 2) 시작 > 제어판 > 시스템 > 원격 설정 > [원격] 탭 > [원격 데스크톱] 메뉴 > “이 컴퓨터에 대한 원격 연결 +허용” 에 체크 > “사용자 선택”에서 원격 사용자 지정 후 확인 +[ 원격 데스크톱 사용자 지정 설정 ] + + +![이미지 195-0](images/p0195_img0.png) + + +![이미지 195-1](images/p0195_img1.png) + + +--- + +| 한국인터넷진흥원 | +196 +W-15 +(상) +Windows 서버 > 2. 서비스 관리 +사용자 개인키 사용 시 암호 입력 +개요 +점검 내용 +사용자 개인 키 사용 시 비밀번호 입력 여부 점검 +점검 목적 +디지털 인증서 소유자와 발급 기관 모두 컴퓨터, 저장 장치 또는 개인 키를 보관 사용하는 보호 해야 함 +보안 위협 +사용자 개인 키 암호 입력을 사용하지 않을 경우, 공격자는 해당 키를 사용하여 네트워크 인프라에 +액세스해 데이터 유출 등의 위험이 존재함 +참고 +※ PKI의 초석은 정보를 암호화하거나 디지털 서명하는 데 사용되는 개인 키로 도난당하게 되면 공격 +자가 개인 키를 사용하여 문서에 디지털 서명하고 인증된 사용자인 것처럼 가장할 수 있으므로 PKI +를 통해 얻은 인증 및 부인 방지가 손상됨 +점검 대상 및 판단 기준 +대상 +Windows 2016, 2019, 2022 +판단 기준 +양호 : 사용자 개인 키를 사용할 때마다 암호 입력을 받는 경우 +취약 : 사용자 개인 키를 사용할 때마다 암호 입력을 받지 않는 경우 +조치 방법 +“시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용” 정책을 “키를 사용할 때마다 +암호를 매 번 입력해야 함”으로 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “시스템 암호화: 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용” 정책을 “키를 사용할 때마다 +암호를 매 번 입력해야 함”으로 적용 +[ 컴퓨터에 저장된 사용자 키에 대해 강력한 키 보호 사용 설정 ] + + +![이미지 196-0](images/p0196_img0.png) + + +![이미지 196-1](images/p0196_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +197 +W-16 +(상) +Windows 서버 > 2. 서비스 관리 +공유 권한 및 사용자 그룹 설정 +개요 +점검 내용 +공유 디렉터리 내 Everyone 권한 존재 여부 점검 +점검 목적 +기본 공유인 C$, D$, Admin$, IPC$ 등을 제외한 공유 폴더에 Everyone 그룹으로 공유되는 것을 +금지하여 익명 사용자의 접근을 차단하기 위함 +보안 위협 +Everyone이 공유계정에 포함되어 있으면 익명 사용자의 접근이 가능하여 내부 정보 유출 및 악성 코드 +감염 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 일반 공유 디렉터리가 없거나 공유 디렉터리 접근 권한에 Everyone 권한이 없는 경우 +취약 : 일반 공유 디렉터리의 접근 권한에 Everyone 권한이 있는 경우 +조치 방법 +공유 디렉터리 접근 권한에서 Everyone 권한 제거 후 필요한 계정 추가 +조치 시 영향 +응용프로그램이나 Backup 용도로 Everyone 공유를 사용하는 경우 해당 작업에 영향 가능 +점검 및 조치 사례 +l Windows NT +Step 1) 프로그램 > 관리 도구 > 서버 관리자 > 컴퓨터 > 공유 디렉터리 > 등록 정보 > 사용 권한에서 Everyone +으로 설정된 공유를 제거하고 접근이 필요한 계정에 적절한 권한 추가 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 실행 > FSMGMT.MSC > 공유 +Step 2) 사용 권한에서 Everyone으로 된 공유를 제거하고 접근이 필요한 계정의 적절한 권한 추가 +[ 공유 폴더 사용 권한 설정 ] + + +![이미지 197-0](images/p0197_img0.png) + + +![이미지 197-1](images/p0197_img1.png) + + +--- + +| 한국인터넷진흥원 | +198 +W-17 +(상) +Windows 서버 > 2. 서비스 관리 +하드디스크 기본 공유 제거 +개요 +점검 내용 +하드디스크 기본 공유 제거 여부 점검 +점검 목적 +하드디스크 기본 공유를 제거하여 시스템 정보 노출을 차단하고자 함 +보안 위협 +Windows는 프로그램 및 서비스를 네트워크나 컴퓨터 환경에서 관리하기 위해 시스템 기본 공유 +항목을 자동으로 생성함. 이를 제거하지 않으면 비인가자가 모든 시스템 자원에 접근할 수 있는 위험한 +상황이 발생할 수 있으며 이러한 공유 기능의 경로를 이용하여 바이러스가 침투 위험이 존재함 +참고 +※ 기본 공유: 관리 목적으로 자동 생성되는 공유 드라이브(Administrative share). 이러한 드라이브 +들은 C$, D$, E$ 등과 같이 이름 뒤에 $가 붙어서 숨겨진 공유로 처리되며, Windows 2000, XP +에서는 관리자 ID와 Password를 알고 있으면 네트워크를 통해 이러한 공유 드라이브들에 자유롭 +게 접근할 수 있음. 그러나 이후 버전 Windows에서는 보안상의 이유로 로컬 시스템의 관리자가 네 +트워크를 통해 시스템을 관리하지 못하도록 기본적으로 차단됨 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 레지스트리의 AutoShareServer (WinNT: AutoShareWks)가 0이며 기본 공유가 존재하지 않 +는 경우 +취약 : 레지스트리의 AutoShareServer (WinNT: AutoShareWks)가 1이거나 기본 공유가 존재하는 +경우 +조치 방법 +기본 공유 중지 후 레지스트리 값 설정(IPC$, 일반 공유 제외) +조치 시 영향 +Active Directory, Clustered system에서 적용 시 영향 있음 +Active Directory: 중앙 집중화된 자원 관리를 위한 계층적 디렉터리 서비스 +Clustered system: 여러 개의 시스템을 결합하여 사용함 +점검 및 조치 사례 +l Windows NT +Step 1) 프로그램 > 관리도구 > 서버 관리자 > 컴퓨터 > 공유 디렉터리 > 공유 > 공유 중지 + + +![이미지 198-0](images/p0198_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +199 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 실행 > FSMGMT.MSC > 공유 > 기본 공유(Default share) 선택 > 마우스 우클릭 > 공유 중지 +[ 기본 공유 폴더 중지 설정 ] +Step 2) 시작 > 제어판 > 관리 도구 > 레지스트리 편집기 +아래 레지스트리 값을 0으로 수정(키 값이 없을 경우 새로 생성) +“HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\” +Step 3) AutoShareServer(Windows NT: AutoShareWks)을 “0”으로 수정 +[ AutoShareServer 값 설정 ] +※ 방화벽과 라우터에서 135~139(TCP/UDP) Port를 차단하여 외부로부터의 위험을 제거함으로써 보안성을 높 +일 수 있음 + + +![이미지 199-0](images/p0199_img0.png) + + +![이미지 199-1](images/p0199_img1.png) + + +![이미지 199-2](images/p0199_img2.png) + + +--- + +| 한국인터넷진흥원 | +200 +W-18 +(상) +Windows 서버 > 2. 서비스 관리 +불필요한 서비스 제거 +개요 +점검 내용 +불필요한 서비스 가동 여부 점검 +점검 목적 +사용자 환경에 필요하지 않은 서비스 및 실행 파일을 제거하거나 비활성화 처리하여 이를 통한 악의적인 +공격을 차단하기 위함 +보안 위협 +시스템에 기본적으로 설치되는 불필요한 취약 서비스들이 제거되지 않은 경우, 해당 서비스의 +취약점으로 인한 공격이 가능하며, 네트워크 서비스의 경우 열린 Port를 통한 외부 침입 위험이 존재함 +참고 +※ OS 버전에 따라 ‘일반적으로 불필요한 서비스’ 목록에 나열된 서비스가 제공되지 않을 수 있음 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 일반적으로 불필요한 서비스(아래 목록 참조)가 중지된 경우 +취약 : 일반적으로 불필요한 서비스(아래 목록 참조)가 구동 중인 경우 +조치 방법 +서비스 중지 후 “사용 안 함” 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 설정 > 제어판 > 서비스를 선택하여 불필요한 서비스를 중지하고, 시작 옵션에서 "시작 유형"을 " +사용 안 함"으로 수정 +Step 2) 해당 서비스를 선택하고 오른쪽 메뉴에서 "시작 옵션"을 클릭하면 시스템이 시작할 때에 해당 서비스의 +시작 유형을 선택할 수 있음. 만약, 시스템 시작 시 자동으로 시작되게 하려면 [자동], 수동으로 서비스를 +시작하려면 [수동], 서비스 자체를 사용하지 않으려면 [사용 안 함]을 선택한 후 [확인]을 클릭함 + + +![이미지 200-0](images/p0200_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +201 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 서비스 > "해당 서비스" 선택 > 속성 +Step 2) 시작 유형 - > 사용 안 함 +Step 3) 서비스 상태 - > 중지 설정 +[ 불필요한 서비스 중지 설정 ] +※ 특별한 목적을 위해 사용하는 서비스가 아니라면 시스템의 업무에 부합되는 서비스가 아닌 기타 기본 서비스 +를 사용하지 않는 것을 권고하며, 시스템 관리자는 대상 시스템의 용도를 정확히 파악해 불필요한 서비스를 +제거해야 함 +서비스 시작 유형 +설명 +사용 안 함 +설치되어 있으나 실행되지 않음 +수동 +다른 서비스나 응용 프로그램에서 해당 기능을 필요로 할 때만 시작됨 +자동 +부팅 시에 해당 장치 드라이버가 로드된 후에 운영체제에 의해 시작됨 +※ 각 서비스마다 옵션을 설정할 수 있으며 해당 서비스의 시작 유형을 선택할 수 있으며 시작 시 로그온 계정을 +별도로 설정할 수 있음. 만약, 시스템 시작 시 자동으로 시작되게 하려면 [자동], 수동으로 서비스를 시작하려 +면 [수동], 서비스 자체를 사용하지 않으려면 [사용 안 함]을 선택 + + +![이미지 201-0](images/p0201_img0.png) + + +![이미지 201-1](images/p0201_img1.png) + + +--- + +| 한국인터넷진흥원 | +202 +※ 일반적으로 불필요한 서비스 +서비스명 +기능 및 설명 +Alerter +네트워크상에서 사용자와 컴퓨터에 관리용 경고 메시지를 전송하는 기능 +Automatic Updates +중요한 윈도우 업데이트를 다운로드하고 설치할 수 있도록 하는 응용프로그램. 수동 +패치를 적용하거나, MS 패치 관리 서버로 패치를 일괄적으로 관리하는 경우 불필요한 +서비스 +Clipbook +서버 내 Clipbook을 다른 클라이언트와 공유 +Computer Browser +네트워크에 있는 모든 컴퓨터의 목록을 업데이트하고 관리하는 기능 +Cryptographic Services +윈도우 파일의 서명을 확인하는 카탈로그 데이터베이스 서비스를 총괄 +DHCP Client +IP주소와 DNS 이름을 DHCP 서버에 등록하거나 DHCP 서버로부터 동적으로 IP주소를 +가져오는 기능을 수행. 단독으로 시스템을 수행하며 고정 IP를 사용하는 경우 불필요한 +서비스 +Distributed Link Tracking +Client, Server +네트워크 도메인의 여러 컴퓨터나 일반 컴퓨터에서 NTFS 파일간의 연결을 관리하는 도구. +Active Directory가 구성되어 있지 않은 서버에서는 불필요한 서비스 +DNS Client +컴퓨터에 대한 도메인 이름 시스템(DNS) 이름을 확인하고 캐시에 보관하는 기능. DNS +서버가 아닌 시스템에서는 유명무실하나, IPSEC을 사용하는 경우에는 필요할 수 있음 +Error reporting +Service +프로그램 오류가 발생 시 응용프로그램의 오류를 MS에 보고한다는 내용을 표시하는 기능 +Human Interface +Device Access +키보드 또는 기타 멀티미디어 장치에 사전 정의된 버튼들을 사용하는 HID 장치들을 위한 +서비스 +IMAPI CD-Burning +COM Service +서버에 CD-RW 또는 DVD-RW가 장착되어 보조백업장치 역할을 하기 위해서 자체 +레코딩 백업을 할 수 있음 +Infrared Monitor +사용자 적외선 연결을 통해 파일 및 이미지를 공유할 수 있도록 함 +Messenger +클라이언트와 서버 사이에 netsend 및 경고서비스 메시지를 전송하는 기능 +NetMeeting Remote +Desktop Sharing +윈도우9X 운영체제부터 인증된 사용자가 넷미팅을 사용해서 원격으로 컴퓨터에 접근할 수 +있도록 하는 기능 +Portable Media Serial +Number +컴퓨터에 연결된 이동성 음악 연주기(미디어기기)의 등록번호를 복원하는 기능 +Print Spooler +인쇄 과정에 있는 스풀링을 관리하는 서비스. 프린터가 있는 경우 필수 서비스이지만, +프린터가 연결되지 않은 시스템에서는 불필요함 +Remote Registry +원격 사용자가 이 컴퓨터에서 레지스트리 설정을 수정할 수 있도록 설정하는 응용프로그램 +Simple TCP/IP +Services +Echo, Discard, Character Generator, Daytime, Quote of the Day 지원 + + +![이미지 202-0](images/p0202_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +203 +※ 운영 중인 시스템에서 필수 서비스를 정의하는 것은 매우 복잡한 과정으로 서비스 사용 여부는 시스템의 영 +향성을 고려하여 신중하게 평가되어야 하므로 Microsoft에서 권고하는 가이드에 따라 전략적으로 적용해야 +함 +※ https://technet.microsoft.com/ko-kr/library/dd547941.aspx (서비스 및 서비스 계정 보안 계획 가이드) 참고 +※ 윈도우 시스템 설치 시 기본적으로 설치되는 서비스에 대한 상세 설명은 아래 주소 참조 +https://technet.microsoft.com/ko-kr/library/dd547949.aspx +서비스명 +기능 및 설명 +Universal Plug and +Play Device Host +네트워크 장치에 대해 피어-투-피어 UPnP(범용 플러그 앤 플레이) 기능을 지원 +Wireless Zero +Configuration + +### 802.11 어댑터에 대해 자동 구성을 공급하는 기본적인 도구 + + + +![이미지 203-0](images/p0203_img0.png) + + +--- + +| 한국인터넷진흥원 | +204 +W-19 +(상) +Windows 서버 > 2. 서비스 관리 +불필요한 IIS 서비스 구동 점검 +개요 +점검 내용 +불필요한 IIS 서비스 구동 여부 점검 +점검 목적 +불필요한 IIS 서비스가 구동 상태인지를 점검하여 제거하고, 해당 서비스가 취약점이 제거되지 않은 +상태로 외부 위협에 노출되지 않도록 하기 위함 +보안 위협 +IIS 서비스의 WEB, FTP 등 기능이 보편적으로 사용되나, 프로파일링, 서비스 거부, 불법적인 접근, +임의의 코드 실행, 정보 공개, 바이러스, 웜, 트로이목마 등의 공격 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : IIS 서비스를 사용하지 않는 경우 또는 필요에 의해 IIS 서비스를 사용하는 경우 +취약 : IIS 서비스를 불필요하게 사용하는 경우 +조치 방법 +IIS 서비스가 불필요한 경우 IIS 서비스 중지 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 서비스 > World Wide Web Publishing 서비스(IISADMIN) > 속성 > "시작 유형"을 "사 +용 안 함" 설정 후 중지 +※ IIS 미설치 시 SERVICES.MSC 에 출력되지 않음 +[ IIS 서비스 사용 안 함 설정 ] + + +![이미지 204-0](images/p0204_img0.png) + + +![이미지 204-1](images/p0204_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +205 +W-20 +(상) +Windows 서버 > 2. 서비스 관리 +NetBIOS 바인딩 서비스 구동 점검 +개요 +점검 내용 +NetBIOS 바인딩 서비스 구동 여부 점검 +점검 목적 +NetBIOS와 TCP/IP 바인딩을 제거하여 TCP/IP를 거치게 되는 파일 공유 서비스를 제공하지 못하도록 +하고, 인터넷에서의 공유자원에 대한 접근시도를 방지하고자 함 +보안 위협 +인터넷에 직접 연결된 윈도우 시스템에서 NetBIOS TCP/IP 바인딩이 활성화되어 있으면 공격자가 +네트워크 공유자원을 사용할 위험이 존재함 +참고 +※ NetBIOS(Network Basic Input/Output System)는 별개의 컴퓨터상에 있는 응용프로그램들이 +근거리통신망 내에서 서로 통신할 수 있게 해주는 API. 이름 서비스, 세션 서비스, 데이터그램 서비 +스를 제공하며, 주로 네트워크 장치 간의 통신을 지원 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : TCP/IP와 NetBIOS 간의 바인딩이 제거되어 있는 경우 +취약 : TCP/IP와 NetBIOS 간의 바인딩이 제거되어 있지 않은 경우 +조치 방법 +네트워크 제어판을 이용하여 TCP/IP와 NetBIOS 간의 바인딩(binding) 제거 +조치 시 영향 +TCP/IP을 거치게 되는 파일 공유 서비스가 제공되지 않음 +인터넷에서의 공유자원에 대한 접근시도가 불가능함 +(라우터를 거치지 않은 내부 네트워크에서는 가능함) +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 네트워크 및 공유 센터 > 어댑터 설정 변경 > 로컬 영역 연결 > 속성 > TCP/IP > [일반] +탭에서 [고급] 클릭 + + +![이미지 205-0](images/p0205_img0.png) + + +--- + +| 한국인터넷진흥원 | +206 +Step 2) [WINS] 탭에서 TCP/IP에서 “NetBIOS 사용 안 함” 또는, “NetBIOS over TCP/IP 사용 안 함” 선택 +[ NetBIOS 사용 안 함 설정 ] + + +![이미지 206-0](images/p0206_img0.png) + + +![이미지 206-1](images/p0206_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +207 +W-21 +(상) +Windows 서버 > 2. 서비스 관리 +암호화되지 않는 FTP 서비스 비활성화 +개요 +점검 내용 +시스템 내 FTP 서비스 구동 여부 점검 +점검 목적 +인증정보가 기본적으로 평문 전송되는 취약한 프로토콜인 FTP의 사용을 제한하기 위함 +보안 위협 +OS에서 제공하는 기본적인 FTP 서비스를 사용할 경우 계정과 패스워드가 암호화되지 않은 채로 +전송되어 Sniffer에 의한 계정정보의 노출 위험이 존재함 +참고 +※ Sniffer: 네트워크 트래픽을 감시하고 분석하는 프로그램 +※ 관련 점검항목: W-22(상), W-23(상), W-24(상) +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : FTP 서비스를 사용하지 않는 경우 또는 Secure FTP 서비스를 사용하는 경우 +취약 : 암호화되지 않는 FTP 서비스를 사용하는 경우 +조치 방법 +FTP 서비스가 필요하지 않다면 서비스 중지 또는 Secure FTP 응용 프로그램 사용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 실행 > SERVICES.MSC > FTP Publishing Service(Windows 2012 이상 : Microsoft FTP Service) +> 속성 > +Step 2) 시작 유형을 “사용 안 함”으로 설정한 후, FTP 서비스 중지 +[ FTP 서비스 사용 안 함 설정 ] + + +![이미지 207-0](images/p0207_img0.png) + + +![이미지 207-1](images/p0207_img1.png) + + +--- + +| 한국인터넷진흥원 | +208 +W-22 +(상) +Windows 서버 > 2. 서비스 관리 +FTP 디렉토리 접근권한 설정 +개요 +점검 내용 +FTP 홈 디렉터리의 접근 권한 적절성 점검 +점검 목적 +FTP 서비스 디렉터리의 접근 권한을 적절하게 설정하여 의도치 않은 정보 유출을 방지하기 위함 +보안 위협 +FTP 홈 디렉터리에 과도한 권한(예. Everyone Full Control)이 부여된 경우 임의의 사용자가 쓰기, +수정이 가능하여 정보 유출, 파일 위‧변조 등의 위험이 존재함 +참고 +※ 기반시설 시스템은 FTP 서비스를 사용하지 않는 것이 원칙이나, 조직 내에서 해당 서비스를 부득이 +사용해야 하는 경우 관련 보호 대책을 수립 및 적용하여 활용해야 함 +※ 관련 점검항목: W-21(상), W-23(상), W-24(상) +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : FTP 홈 디렉터리에 Everyone 권한이 없는 경우 +취약 : FTP 홈 디렉터리에 Everyone 권한이 있는 경우 +조치 방법 +FTP 홈 디렉터리에서 Everyone 권한 삭제, 각 사용자에게 적절한 권한 부여 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT(IIS 4.0), 2000(IIS 5.0), 2003(IIS 6.0) +Step 1) 인터넷 정보 서비스(IIS) 관리 > FTP 사이트 > 해당 FTP 사이트 > 속성 > [홈 디렉터리] 탭에서 FTP 홈 +디렉터리 확인 +Step 2) 탐색기 > 홈 디렉터리 > 속성 > [보안] 탭에서 Everyone 권한 제거 + + +![이미지 208-0](images/p0208_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +209 +l Windows 2008(IIS 7.0), 2012(IIS 8.0), 2016, 2019, 2022(IIS 10.0) +Step 1) 제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리 > 사이트 > 해당 FTP 사이트 > FTP 권한 부여 규칙 +선택 +Step 2) 허용 권한 부여 규칙에서 “지정한 사용자” 지정 +[ FTP 권한 부여 규칙 ] +[ 지정한 사용자 설정 ] + + +![이미지 209-0](images/p0209_img0.png) + + +![이미지 209-1](images/p0209_img1.png) + + +![이미지 209-2](images/p0209_img2.png) + + +--- + +| 한국인터넷진흥원 | +210 +W-23 +(상) +Windows 서버 > 2. 서비스 관리 +공유 서비스에 대한 익명 접근 제한 설정 +개요 +점검 내용 +공유 서비스의 익명(Anonymous) 접속 허용 여부 점검 +점검 목적 +공유 익명 접속을 제한하여, 중요 정보의 불법 유출을 차단하기 함 +보안 위협 +공유 익명 접속이 허용되면 핵심 기밀 자료나 내부 정보의 불법 유출 위험이 존재함 +참고 +※ 만약 익명 접속이 허용된 공유 서버에 익명 사용자에 관해 쓰기 권한이 부여된 경우, 정상적으로 업 +로드한 파일들의 변조가 가능하므로 공개한 디렉터리 내 중요 데이터가 보관되어 있는지를 추가로 +확인해야 함 +※ 공유 서비스: FTP, SMB, NFS, TFTP 등 +※ 관련 점검항목: W-21(상), W-22(상), W-24(상) +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 공유 서비스를 사용하지 않거나, 익명 인증 사용 안 함으로 설정된 경우 +취약 : 공유 서비스를 사용하거나, 익명 인증 사용함으로 설정된 경우 +조치 방법 +공유 서비스를 사용하지 않는 경우 서비스 중지, 사용할 경우 익명 인증 사용 안 함 설정 적용 +조치 시 영향 +응용프로그램에서 익명 연결을 사용할 경우를 제외하고, 일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT(IIS 4.0), 2000(IIS 5.0), 2003(IIS 6.0) +Step 1) 인터넷 정보 서비스(IIS) 관리 > FTP 사이트 > 속성 > [보안 계정] 탭에서 “익명 연결 허용” 체크박스 해 +제 (만약 개별 FTP 사이트에 적용할 경우 해당 사이트에만 설정이 적용되고, 기본 설정은 적용받지 않음) + + +![이미지 210-0](images/p0210_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +211 +l Windows 2008(IIS 7.0), 2012(IIS 8.0), 2016, 2019, 2022(IIS 10.0) +Step 1) 제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리 > 해당 FTP 사이트 > FTP 인증 선택 +[ FTP 인증 설정 ] +Step 2) FTP 인증 화면에서 익명 인증 사용 안 함 설정 +[ 익명 인증 사용 안 함 설정 ] + + +![이미지 211-0](images/p0211_img0.png) + + +![이미지 211-1](images/p0211_img1.png) + + +![이미지 211-2](images/p0211_img2.png) + + +--- + +| 한국인터넷진흥원 | +212 +W-24 +(상) +Windows 서버 > 2. 서비스 관리 +FTP 접근 제어 설정 +개요 +점검 내용 +FTP 접속 가능한 IP주소 지정 여부 점검 +점검 목적 +FTP 접근 시 특정 IP주소에 대해 콘텐츠 접근을 허용하여 서비스 보안성을 강화하기 위함 +보안 위협 +FTP 프로토콜은 로그온 시 지정된 자격 증명이나 데이터 자체가 암호화되지 않고 모든 자격 증명을 +일반 텍스트로 네트워크를 통해 전송되는 특성상 서버 클라이언트 간 트래픽 스니핑을 통해 인증 정보가 +쉽게 노출될 위험이 존재함 +참고 +※ 기반시설 시스템은 FTP 서비스를 사용하지 않는 것이 원칙이나, 조직 내에서 해당 서비스를 부득이 +사용해야 하는 경우 관련 보호 대책을 수립 및 적용하여 활용해야 함 +※ 관련 점검항목: W-21(상), W-22(상), W-23(상) +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 특정 IP주소에서만 FTP 서버에 접속하도록 접근 제어 설정을 적용한 경우 +취약 : 특정 IP주소에서만 FTP 서버에 접속하도록 접근 제어 설정을 적용하지 않는 경우 +※ 조치 시 마스터 속성과 모든 사이트에 적용함 +조치 방법 +특정 IP주소에서만 FTP 서버에 접속하도록 접근 제어 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT(IIS 4.0), 2000(IIS 5.0), 2003(IIS 6.0) +Step 1) 인터넷 정보 서비스(IIS) 관리 > FTP 사이트 > 속성 > [디렉터리 보안] 탭에서 “액세스 거부” 선택 후 접 +근 가능 IP주소 추가 (만약 개별 FTP 사이트에 적용할 경우 해당 사이트에만 설정이 적용되고, 기본 설정 +은 적용받지 않음) +※ 액세스 허가: 모든 액세스를 허용 후 액세스를 거부할 컴퓨터, 그룹, 도메인 추가 +액세스 거부: 모든 액세스를 거부 후 액세스를 허용할 컴퓨터, 그룹, 도메인 추가 + + +![이미지 212-0](images/p0212_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +213 +l Windows 2008(IIS 7.0), 2012(IIS 8.0), 2016, 2019, 2022(IIS 10.0) +Step 1) 제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리 > 해당 FTP 사이트 > FTP IPv4 주소 및 도메인 제한 +Step 2) [작업]의 허용 항목 추가에서 FTP 접속을 허용할 IP 입력 +Step 3) [작업]의 기능 설정 편집에서 지정되지 않은 클라이언트에 대한 액세스를 거부 선택 +[ FTP IP주소 및 도메인 제한 설정 ] +[ 허용 IP주소 설정 ] + + +![이미지 213-0](images/p0213_img0.png) + + +![이미지 213-1](images/p0213_img1.png) + + +![이미지 213-2](images/p0213_img2.png) + + +--- + +| 한국인터넷진흥원 | +214 +W-25 +(상) +Windows 서버 > 2. 서비스 관리 +DNS Zone Transfer 설정 +개요 +점검 내용 +DNS Zone Transfer 차단 설정 여부 점검 +점검 목적 +DNS Zone Transfer 차단 설정을 적용하여 도메인 정보의 불법 외부 유출을 방지하기 위함 +보안 위협 +DNS Zone Transfer 차단 설정이 적용되지 않는 경우 DNS 서버에 저장된 도메인 정보를 승인된 DNS +서버가 아닌 외부로 유출 위험이 존재함 +참고 +※ Zone Transfer: 영역(zone) 전송이라고 하며 master와 slave 간에 또는 primary와 secondary +DNS 간에 zone 파일을 동기화하기 위한 용도로 사용되는 기술 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 아래 기준에 해당하는 경우 +1. DNS 서비스가 비활성화인 경우 + +## 2. 영역 전송 허용을 하지 않는 경우 + + +## 3. 특정 서버로만 설정이 되어있는 경우 + +취약 : 위 3개 기준 중 하나라도 해당하지 않는 경우 +조치 방법 +불필요 시 서비스 중지/사용 안 함 설정, 사용하는 경우 영역 전송을 특정 서버로 제한하거나 “영역 전송 +허용”에 체크 해제 +조치 시 영향 +영역 전송 시 서버를 지정할 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 프로그램 > 관리 도구 > DNS 관리자 > 각 조회 영역 > 해당 영역 > 등록 정보 >알림 +Step 2) “알림 목록에 있는 보조 영역에서만 액세스 허용” 선택 후 서버 IP 추가 + + +![이미지 214-0](images/p0214_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +215 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > DNS > 각 조회 영역 > 해당 영역 > 속성 > 영역 전송 +Step 2) “다음 서버로만” 선택 후 전송할 서버 IP 추가 +[ 영역 전송 IP주소 지정 ] +Step 3) 불필요 시 해당 서비스 중지 +시작 > 실행 > SERVICES.MSC > DNS 서버 > 속성 [일반] 탭에서 “시작 유형”을 “사용 안 함”으로 설정 +한 후, DNS 서비스 중지 +[ DNS Server 사용 안 함 설정 ] + + +![이미지 215-0](images/p0215_img0.png) + + +![이미지 215-1](images/p0215_img1.png) + + +![이미지 215-2](images/p0215_img2.png) + + +--- + +| 한국인터넷진흥원 | +216 +W-26 +(상) +Windows 서버 > 2. 서비스 관리 +RDS(Remote Data Services)제거 +개요 +점검 내용 +RDS(Remote Data Services) 비활성화 여부 점검 +점검 목적 +취약한 RDS 서비스를 제거하여 불법적인 원격 공격을 차단하기 위함 +보안 위협 +취약한 플랫폼의 RDS가 사용되는 경우 서비스 거부 공격이나 원격에서 관리자 권한으로 임의의 명령을 +실행할 수 있는 위험이 존재함 +참고 +※ MDAC 2.7 미만의 버전에서 웹 서버와 웹 클라이언트 모두 취약점으로 인해 위험해질 수 있으므로 +RDS가 불필요할 경우 제거하는 것이 안전함 +※ RDS(Remote Data Services): MDAC(Microsoft Data Access Components)의 한 +컴포넌트로 클라이언트에 있는 데이터를 다룰 수 있도록 하는 서비스 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003 +판단 기준 +양호 : 다음 중 한 가지라도 해당하는 경우 +1. IIS를 사용하지 않는 경우 +2. Windows 2008 이상 버전을 사용하는 경우 +3. Windows 2000 서비스팩 4, Windows 2003 서비스팩 2 이상 설치된 경우 + +## 4. 기본 웹 사이트에 MSADC 가상 디렉터리가 존재하지 않는 경우 + + +## 5. 해당 레지스트리 값이 존재하지 않는 경우 + +취약 : 양호 기준에 한 가지도 해당하지 않는 경우 +조치 방법 +사용하지 않는 경우 IIS 서비스 중지/사용 안 함, 사용할 경우 레지스트리 키 값 제거 또는 관련 패치 +적용 +조치 시 영향 +WAS와 연동될 경우 일부 RDS를 사용할 수가 있으며 사용할 경우 레지스트리 키 값 제거가 요구됨 +점검 및 조치 사례 +l Windows NT, 2000, 2003 +Step 1) 시작 > 실행 > INETMGR > 웹 사이트 선택 후 디렉터리에서 msadc 제거 +Step 2) 다음의 레지스트리 키/디렉터리 제거 +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch +1. RDSServer.DataFactory +2. AdvancedDataFactory +3. VbBusObj.VbBusObjCls + + +![이미지 216-0](images/p0216_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +217 +W-27 +(상) +Windows 서버 > 2. 서비스 관리 +최신 Windows OS Build 버전 적용 +개요 +점검 내용 +최신 Build 적용 여부 점검 +점검 목적 +시스템을 최신 버전으로 유지하여 새로운 위협 및 진행 중인 위협으로부터 중요 정보와 시스템을 +보호하기 위함 +보안 위협 +보안 업데이트를 적용하지 않으면 시스템 및 응용 프로그램의 취약성으로 인해 권한 상승, 원격 코드 +실행, 보안 기능 우회 등의 위험이 존재함 +참고 +※ Build: Windows 패치 버전 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 최신 Build가 설치되어 있으며 적용 절차 및 방법이 수립된 경우 +취약 : 최신 Build가 설치되지 않거나, 적용 절차 및 방법이 수립되지 않은 경우 +조치 방법 +설치에 따른 영향도 확인 후 최신 Build 설치(설치 후 시스템 재시작 필요) +조치 시 영향 +설치 후 시스템 재시작이 필요하며 설치에 따른 시스템 영향 정도를 확인해야 함 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 실행 > Winver +Step 2) Build 버전 확인 후 최신 Build 다운로드 후 설치 또는 자동업데이트 활용 +※ 인터넷 웜(Worm)이 Windows의 취약점을 이용하여 공격하기 때문에 최신 패치 설치 시에는 네트워크와 분 +리된 상태에서 설치할 것을 권장 +[ Windows Build 버전 확인 ] + + +![이미지 217-0](images/p0217_img0.png) + + +![이미지 217-1](images/p0217_img1.png) + + +--- + +| 한국인터넷진흥원 | +218 +W-28 +(중) +Windows 서버 > 2. 서비스 관리 +터미널 서비스 암호화 수준 설정 +개요 +점검 내용 +원격 데스크톱 서비스 암호화 수준 적절성 점검 +점검 목적 +원격 데스크톱 서비스 암호화 설정으로 데이터를 암호화하여 클라이언트와 서버 간의 통신에서 +전송되는 데이터를 보호하기 위함 +보안 위협 +서버 접속 시에 낮은 암호화 수준을 적용할 경우 악의적인 사용자에 의해 서버와 클라이언트 간 +주고받는 정보가 노출될 위험이 존재함 +참고 +※ 기반시설 시스템은 원격 데스크톱 서비스의 사용을 원칙적으로 금지하나, 부득이 해당 서비스를 사 +용해야 하는 경우 클라이언트 서버 간의 데이터 전송 시 암호화하여 보호해야 함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 원격 데스크톱 서비스를 사용하지 않거나 사용 시 암호화 수준을 “클라이언트와 호환 가능(중간)” +이상으로 설정한 경우 +취약 : 원격 데스크톱 서비스를 사용하고 암호화 수준이 “낮음”으로 설정한 경우 +조치 방법 +원격 데스크톱 서비스의 가동을 ‘중지’ 및 ‘사용 안 함’ 설정을 하거나, 부득이하게 사용할 경우 암호화 +수준 설정 적용 +조치 시 영향 +암호화 수준 변경 시 일반적으로 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 실행 > regedit +Step 2) HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\ +MinEncryptionLevel 값을 2(중간) 이상으로 설정 +l Windows 2000 +Step 1) 시작 > 실행 > TSCC.MSC > “해당 서비스” 선택 > 속성 +Step 2) 암호화 수준 → 중간(Windows 2000) 이상으로 설정 + + +![이미지 218-0](images/p0218_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +219 +l Windows 2003 +Step 1) Windows 2003: 시작 > 실행 > TSCC.MSC > “해당 서비스” 선택 > 속성 +Step 2) [일반] 탭에서 암호화 수준 설정 → 클라이언트 호환 가능 +l Windows 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 실행 > GPEDIT.MSC(로컬 그룹 정책 편집기) +Step 2) 컴퓨터 구성 > 관리 템플릿 > 터미널 서비스 > 원격 데스크톱 세션 호스트 > 보안 +Step 3) [클라이언트 연결 암호화 수준 설정] > [암호화 수준]을 클라이언트 호환 가능으로 설정 +[ 암호화 수준 설정 ] +※ 원격 데스크톱 서비스가 필요한 경우 추가 보완 대책 + +## 1. 관리자 이외의 일반 사용자의 터미널 서비스 접속을 허용하지 않음 + + +## 2. 방화벽에서 원격 데스크톱 서비스 포트의 사용을 관리자 컴퓨터의 IP로 제한 + + + +![이미지 219-0](images/p0219_img0.png) + + +![이미지 219-1](images/p0219_img1.png) + + +--- + +| 한국인터넷진흥원 | +220 +W-29 +(중) +Windows 서버 > 2. 서비스 관리 +불필요한 SNMP 서비스 구동 점검 +개요 +점검 내용 +SNMP 서비스 구동 여부 점검 +점검 목적 +취약한 SNMP 서비스를 비활성화하여 시스템의 주요 정보 유출 및 불법 수정을 방지하기 위함 +보안 위협 +취약한 SNMP 서비스를 사용하는 경우 서비스 거부 공격(DoS, DDoS), 버퍼 오버플로우, 비인가 접속 +등의 공격 위험이 존재함 +참고 +※ SNMP: SNMP(Simple Network Management Protocol)는 MIB(Management Information +Base)에 기반을 둔 네트워크망을 관리하기 위한 목적으로 만들어진 프로토콜로, 간단한 명령으로 +원격 시스템의 CPU 정보에서부터, 인터페이스별 트래픽량 등 여러 가지 정보를 확인 가능 +※ 관련 점검항목: W-30(중), W-31(중) +점검 대상 및 판단 기준 +대상 +Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : SNMP 서비스를 사용하지 않는 경우 또는 Community String을 설정하여 SNMP 서비스를 +사용하는 경우 +취약 : 불필요하게 SNMP 서비스를 사용하는 경우 +조치 방법 +불필요 시 서비스 중지/사용 안 함 +조치 시 영향 +NMS 또는, 별도의 툴에서 SNMP 서비스를 이용하여 서버를 모니터링 하는 경우, 통신하고자 하는 Ser +ver/Client에 모두 같은 Community String을 사용해야 함(서비스 > SNMP > 등록 정보 > 종속성 참 +고) +NMS(Network Management System): 네트워크 관리 시스템 +점검 및 조치 사례 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 불필요 시 해당 서비스 중지 +시작 > 제어판 > 관리 도구 > 서비스 > SNMP Service(또는, SNMP 서비스) > 속성에서 “시작 유형”을 +“사용 안 함”으로 설정한 후, SNMP 서비스 중지 +[ SNMP 서비스 사용 안 함 설정 ] + + +![이미지 220-0](images/p0220_img0.png) + + +![이미지 220-1](images/p0220_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +221 +W-30 +(중) +Windows 서버 > 2. 서비스 관리 +SNMP Community String 복잡성 설정 +개요 +점검 내용 +SNMP 서비스 Community String 적절성 점검 +점검 목적 +SNMP에서 일종의 비밀번호로 사용하는 Community String을 유추할 수 없는 복잡한 값으로 +변경하여 불필요한 시스템 정보 노출을 차단하기 위함 +보안 위협 +Community String을 변경하지 않고 public, private 등 기본 설정값으로 사용하는 경우, 기본 Com +munity String 값을 통한 시스템의 주요 정보 및 설정 상태가 비인가자에게 노출될 수 있는 위험이 +존재함 +참고 +※ 관련 점검항목: W-29(중), W-31(중) +점검 대상 및 판단 기준 +대상 +2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : SNMP 서비스를 사용하지 않거나 Community String이 public, private 이 아닌 경우 +취약 : SNMP 서비스를 사용하며, Community String이 public, private인 경우 +조치 방법 +불필요 시 서비스 중지/사용 안 함, 사용 시 기본 Community String 변경 +조치 시 영향 +NMS 또는, 별도의 도구에서 SNMP 서비스를 이용하여 서버를 모니터링하는 경우, 통신하고자 하는 S +erver/Client에 모두 같은 Community String을 사용해야 함. (서비스 > SNMP > 등록 정보 > 종속성 +참고) +점검 및 조치 사례 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 서비스 > SNMP Service(또는, SNMP 서비스) > 속성 > 보안 > [인증 트랩 +보내기] > [추가] +Step 2) Community String을 읽기 전용으로 설정 후 public/private이 아닌 이름을 추가 +Step 3) 불필요 시 해당 서비스 중지 +시작 > 실행 > SERVICES.MSC > SNMP Service(또는, SNMP 서비스) > 속성 [일반] 탭에서 “시작 유형” +을 “사용 안 함”으로 설정한 후, SNMP 서비스 중지 +[ SNMP Community String 설정 ] + + +![이미지 221-0](images/p0221_img0.png) + + +![이미지 221-1](images/p0221_img1.png) + + +--- + +| 한국인터넷진흥원 | +222 +W-31 +(중) +Windows 서버 > 2. 서비스 관리 +SNMP Access Control 설정 +개요 +점검 내용 +SNMP 패킷 Access Control(접근 제어) 설정 여부 점검 +점검 목적 +SNMP 트래픽에 대한 Access Control 설정을 적용하여 내부 네트워크로부터의 악의적인 공격을 +차단하기 위함 +보안 위협 +SNMP Access Control 설정을 적용하지 않아 인증되지 않은 내부 서버로부터의 SNMP 트래픽을 +차단하지 않을 경우, 장치 구성 변경, 라우팅 테이블 조작, 악의적인 TFTP 서버 구동 등의 SNMP 공격 +에 노출될 위험이 존재함 +참고 +※ 관련 점검항목: W-29(중), W-30(중) +점검 대상 및 판단 기준 +대상 +Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : SNMP 서비스를 사용하지 않거나 특정 호스트로부터 SNMP 패킷 받아들이기가 설정된 경우 +취약 : 모든 호스트로부터 SNMP 패킷 받아들이기가 설정된 경우 +조치 방법 +불필요 시 서비스 중지/사용 안 함, 사용 시 SNMP 패킷 수령 호스트 지정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 서비스 > SNMP Service(또는, SNMP 서비스) > 속성 > 보안 +Step 2) “인증 트랩 보내기” 및 “다음 호스트로부터 SNMP 패킷 받아들이기” 선택 +Step 3) SNMP 호스트 등록 +[ SNMP 보안 설정 ] + + +![이미지 222-0](images/p0222_img0.png) + + +![이미지 222-1](images/p0222_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +223 +W-32 +(중) +Windows 서버 > 2. 서비스 관리 +DNS 서비스 구동 점검 +개요 +점검 내용 +DNS 서비스의 동적 업데이트 설정 여부 점검 +점검 목적 +DNS 동적 업데이트를 비활성화함으로 신뢰할 수 없는 원본으로부터 업데이트를 받아들이는 위험을 +차단하기 위함 +보안 위협 +DNS 서버에서 동적 업데이트를 사용할 경우 악의적인 사용자에 의해 신뢰할 수 없는 데이터가 +받아들여질 위험이 존재함 +참고 +※ 동적 업데이트: DNS 정보에 변경 사항이 있을 때마다 DNS 클라이언트 컴퓨터가 자신의 리소스 레 +코드(zone 파일)를 DNS 서버에 자동으로 업데이트하는 기능으로 영역 레코드 수동 관리 작업을 줄 +일 수 있음 +점검 대상 및 판단 기준 +대상 +Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : DNS 서비스를 사용하지 않거나 동적 업데이트 “없음(아니오)”으로 설정된 경우 +취약 : 서비스를 사용하며 동적 업데이트가 설정된 경우 +조치 방법 +DNS 서비스의 동적 업데이트 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > DNS > 각 조회 영역 > 해당 영역 > 속성 > 일반 +Step 2) 동적 업데이트 → 없음 (또는 아니오) 선택 +[ 동적 업데이트 없음 설정 ] + + +![이미지 223-0](images/p0223_img0.png) + + +![이미지 223-1](images/p0223_img1.png) + + +--- + +| 한국인터넷진흥원 | +224 +Step 3) 불필요 시 해당 서비스 중지 +시작 > 제어판 > 관리 도구 > 서비스 > DNS Server > 속성 [일반] 탭에서 "시작 유형"을 "사용 안 함"으로 +설정한 후, DNS Server 서비스 중지 +[ DNS Server 사용 안 함 설정 ] + + +![이미지 224-0](images/p0224_img0.png) + + +![이미지 224-1](images/p0224_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +225 +W-33 +(하) +Windows 서버 > 2. 서비스 관리 +HTTP/FTP/SMTP 배너 차단 +개요 +점검 내용 +HTTP/FTP/SMTP 서비스 배너 차단 적용 여부 점검 +점검 목적 +HTTP/FTP/SMTP 서비스 접속 배너를 통한 불필요한 정보 노출을 방지하기 위함 +보안 위협 +서비스 접속 배너가 차단되지 않는 경우 임의의 사용자가 HTTP, FTP, SMTP 접속 시도 시 노출되는 +접속 배너 정보를 수집하여 악의적인 공격에 이용할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : HTTP, FTP, SMTP 접속 시 배너 정보가 보이지 않는 경우 +취약 : HTTP, FTP, SMTP 접속 시 배너 정보가 보이는 경우 +조치 방법 +사용하지 않는 경우 IIS 서비스 중지/사용 안 함, 사용 시 속성값 수정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l HTTP +[Server 헤더 제거] +Step 1) Microsoft 다운로드 센터에서 URL Rewrite 다운로드 후 설치 +https://www.iis.net/downloads/microsoft/url-rewrite +Step 2) 제어판 > 관리 도구 > IIS(인터넷 정보 서비스) 관리자 > 해당 웹 사이트 > [URL 재작성] +Step 3) 작업 탭 > [서버 값 관리 – 서버 변수 보기...] > 서버 변수 이름 추가 +[ 서버 변수 추가 ] + + +![이미지 225-0](images/p0225_img0.png) + + +![이미지 225-1](images/p0225_img1.png) + + +--- + +| 한국인터넷진흥원 | +226 +Step 4) [URL 재작성] > 작업 탭 > [규칙 추가...] > 아웃바운드 규칙 > 빈 규칙 > 다음 사항 적용 +- 이름(N): Remove Server +- 검색 범위: 서버 변수 +- 서버 변수 이름: RESPONSE_SERVER +- 패턴(T): .* +[ 아웃바운드 규칙 추가 ] +[X-Powered-By 헤더 제거] +Step 1) 제어판 > 관리 도구 > IIS(인터넷 정보 서비스) 관리자 > 해당 웹 사이트 > [HTTP 응답 헤더] +Step 2) [X-Powered-By] 설정 제거 +[ X-Powered-By 헤더 제거 ] + + +![이미지 226-0](images/p0226_img0.png) + + +![이미지 226-1](images/p0226_img1.png) + + +![이미지 226-2](images/p0226_img2.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +227 +l FTP +Step 1) IIS(인터넷 정보 서비스) 관리자 > FTP 메시지 > 기본 배너 숨기기 설정 +[ FTP 기본 배너 숨기기 설정 ] +l SMTP +Step 1) 시작 > 실행 > cmd > adsutil.vbs 파일이 있는 디렉터리로 이동 +- 명령어: cd C:\inetpub\AdminScripts +- adsutil.vbs를 사용하기 위해 서버 관리자에서 역할 추가 필요 → ”웹 서버(IIS) > 관리 도구 > IIS 6 관리 +호환성 > IIS 6 스크립팅 도구“ 설치 필요 +Step 2) IIS에서 서비스 중인 SMTP 서비스 목록 확인 +- 명령어: cscript adsutil.vbs enum /p smtpsvc +Step 3) SMTP 서비스에 connectresponse 속성 값에서 배너 문구 수정 +- 명령어: cscript adsutil.vbs set smtpsvc/1/connectresponse “Banner Text” +Step 4) SMTP 서비스 재시작 +- 명령어: net stop smtpsvc (중지) +- 명령어: net start smtpsvc (시작) + + +![이미지 227-0](images/p0227_img0.png) + + +![이미지 227-1](images/p0227_img1.png) + + +--- + +| 한국인터넷진흥원 | +228 +W-34 +(중) +Windows 서버 > 2. 서비스 관리 +Telnet 서비스 비활성화 +개요 +점검 내용 +Telnet 서비스 활성화 및 취약한 인증 사용 여부 점검 +점검 목적 +취약 프로토콜인 Telnet 서비스의 사용을 원칙적으로 금지하고, 부득이 이용할 경우 네트워크상으로 +비밀번호를 전송하지 않는 NTLM 인증을 사용하도록 하여 인증 정보의 노출을 차단하기 위함 +보안 위협 +Telnet 서비스는 평문으로 데이터를 송수신하기 때문에 비밀번호 방식으로 인증을 수행할 경우 ID 및 +비밀번호가 외부로 노출될 위험이 존재함 +참고 +※ Windows 서버의 Telnet 서비스의 두 가지 인증 방법 +Ÿ NTLM 인증: 암호를 전송하지 않고 negotiate/challenge/response 절차로 인증 수행 +Ÿ Password 인증: 관리자 및 Telnet Clients 그룹에 포함된 ID/PW로 인증 수행 +※ Windows 2016 이상 버전에서는 보안상 이슈로 인해 Telnet 서버 설치 제공하지 않음 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012 +판단 기준 +양호 : Telnet 서비스가 구동되어 있지 않거나 인증 방법이 NTLM인 경우 +취약 : Telnet 서비스가 구동되어 있으며 인증 방법이 NTLM이 아닌 경우 +조치 방법 +불필요 시 서비스 중지/사용 안 함 설정, 사용 시 인증 방법으로 NTLM만 사용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000 +Step 1) 시작 > 설정 > 제어판 > 관리 도구 > 텔넷 서버 설정 +Step 2) NTLM 인증 방식만 사용 +l Windows 2003, 2008, 2012 +Step 1) 시작 > 실행 > cmd > tlntadmn config +Step 2) tlntadmn config sec = +NTLM -passwd (passwd 인증 방식을 제외하고 NTLM 방식만 사용) +Step 3) 불필요 시 해당 서비스 중지 +시작 > 실행 > SERVICES.MSC > Telnet > 속성 [일반] 탭에서 "시작 유형"을 "사용 안 함"으로 설정한 +후 Telnet 서비스 중지 + + +![이미지 228-0](images/p0228_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +229 +W-35 +(중) +Windows 서버 > 2. 서비스 관리 +불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 +개요 +점검 내용 +불필요한 ODBC/OLE-DB 데이터 소스와 드라이브 제거 여부 점검 +점검 목적 +불필요한 데이터 소스 및 드라이버를 ODBC 데이터 소스 관리자 도구를 이용해 제거하여 비인가자에 +의한 데이터베이스 접속 및 자료 유출을 차단하기 위함 +보안 위협 +불필요한 ODBC/OLE-DB 데이터 소스를 통한 비인가자에 의한 데이터베이스 접속 및 자료 유출 이 +존재함 +참고 +※ 특정 샘플 응용프로그램은 샘플 데이터베이스를 위해 ODBC 데이터 소스를 설치하거나 불필요한 +ODBC/OLE-DB 데이터베이스 드라이버를 설치하므로 불필요한 데이터 소스나 드라이버는 +ODBC 데이터 소스 관리자 도구를 이용해서 제거하는 것이 바람직함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 시스템 DSN 부분의 데이터 소스를 현재 사용하고 있는 경우 +취약 : 시스템 DSN 부분의 데이터 소스를 현재 사용하고 있지 않은 경우 +조치 방법 +사용하지 않는 불필요한 ODBC 데이터 소스 제거 +조치 시 영향 +응용프로그램에서 사용할 경우 양호 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 설정 > 제어판 > 데이터 원본(ODBC) > 시스템 DSN > 해당 드라이브 클릭 +Step 2) 사용하지 않은 데이터 소스 제거 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > ODBC 데이터 원본 > 시스템 DSN > 해당 드라이브 클릭 +Step 2) 사용하지 않는 데이터 소스 제거 +[ 불필요 ODBC 데이터 소스 확인 및 제거 ] + + +![이미지 229-0](images/p0229_img0.png) + + +![이미지 229-1](images/p0229_img1.png) + + +--- + +| 한국인터넷진흥원 | +230 +W-36 +(중) +Windows 서버 > 2. 서비스 관리 +원격터미널 접속 타임아웃 설정 +개요 +점검 내용 +원격터미널 접속 Timeout 설정 여부 점검 +점검 목적 +조직에서 부득이 원격터미널 접속을 허용해야 할 경우, 원격터미널 접속 후 일정 시간 동안 이벤트가 +발생하지 않은 호스트의 접속을 차단하여 비인가자의 불필요한 접근을 차단하고 정보의 노출을 +방지하기 위함 +보안 위협 +접속 Timeout 값이 설정되지 않으면 유휴 시간 내 비인가자의 시스템 접근으로 인해 불필요한 내부 +정보의 노출 위험이 존재함 +참고 +※ 기반시설 시스템에서 원격터미널 서비스의 이용은 원칙적으로 금지하나, 부득이하게 해당 기능을 +활용해야 하는 경우 접속 Timeout 설정 등의 보안 설정을 적용해야 함 +점검 대상 및 판단 기준 +대상 +Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 원격 제어 시 Timeout 제어 설정을 30분 이하로 설정한 경우 +취약 : 원격 제어 시 Timeout 제어 설정을 적용하지 않거나 30분 초과로 설정한 경우 +조치 방법 +Timeout 제어 설정 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2000, 2003, 2008 +Step 1) 시작 > 실행 > 열기 > TSCC.MSC 실행(Windows 2008은 TSCONFIG.MC) +Step 2) RDP-Tcp connection에서 우클릭 > 속성 실행 +Step 3) [세션] 탭에서 사용자 설정 무시(Override user settings)를 적용하고 유휴 시 세션이 끊어지도록 “유휴 세 +션 제한 시간”을 “30분” 이하로 설정 + + +![이미지 230-0](images/p0230_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +231 +l Windows 2012, 2016, 2019, 2022 +Step 1) 시작 > 실행 > GPEDIT.MSC(로컬 그룹 정책 편집기) +Step 2) 컴퓨터 구성 > 관리 템플릿 > 터미널 서비스 > 원격 데스크톱 세션 호스트 > 세션 시간 제한 > +Step 3) [활성 상태지만 유휴 터미널 서비스 세션에 시간 제한 설정] > [유휴 세션 제한]을 30분 이하로 설정 +[ 유휴 세션 제한 설정 ] + + +![이미지 231-0](images/p0231_img0.png) + + +![이미지 231-1](images/p0231_img1.png) + + +--- + +| 한국인터넷진흥원 | +232 +W-37 +(중) +Windows 서버 > 2. 서비스 관리 +예약된 작업에 의심스러운 명령이 등록되어 있는지 점검 +개요 +점검 내용 +예약된 작업에 의심스러운 명령의 등록 여부 점검 +점검 목적 +외부 무단 침입 시 설정될 수 있는 불필요한 예약 작업의 등록 여부를 확인하기 위함 +보안 위협 +일정 시간마다 미리 설정해둔 프로그램을 실행할 수 있는 예약된 작업은 시작 프로그램과 더불어서 +해킹과 트로이목마, 백도어를 설치하여 공격하기 좋은 경로로 사용될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 불필요한 명령어나 파일 등 주기적인 예약 작업의 존재 여부를 주기적으로 점검하고 제거한 경우 +취약 : 불필요한 명령어나 파일 등 주기적인 예약 작업의 존재 여부를 주기적으로 점검하지 않거나, 불필 +요한 작업을 제거하지 않은 경우 +조치 방법 +예약 작업에 대한 주기적인 확인 +조치 시 영향 +예약 작업을 잘못 삭제하는 경우 관련된 작업이 실행되지 않을 수 있음 +점검 및 조치 사례 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 설정 > 제어판 > 예약된 작업 확인 +Step 2) 등록된 예약 작업을 선택하여 상세 내역 확인 +Step 3) 불필요한 작업 존재 시 삭제 +[ 불필요한 작업 제거 ] +※ 2008, 2012, 2016, 2019 는 제어판 > 관리 도구 > 작업 스케줄러에서 확인 + + +![이미지 232-0](images/p0232_img0.png) + + +![이미지 232-1](images/p0232_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +233 +W-38 +(상) +Windows 서버 > 3. 패치 관리 +주기적 보안 패치 및 벤더 권고사항 적용 +개요 +점검 내용 +최신 보안 패치 적용 여부 점검 +점검 목적 +최신 보안 패치를 설치하여 시스템 및 응용프로그램의 취약성을 제거하기 위함 +보안 위협 +최신 보안 패치가 즉시 적용되지 않으면 알려진 취약성으로 인한 시스템 공격 위험이 존재함 +참고 +※ 보안 패치보다 취약성을 이용한 공격 도구가 먼저 출현할 수 있으므로 보안 패치는 발표 후 가능한 +한 빨리 설치할 것을 권장함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 패치 절차를 수립하여 주기적으로 패치를 확인 및 설치하는 경우 +취약 : 패치 절차가 수립되어 있지 않거나 주기적으로 패치를 설치하지 않는 경우 +조치 방법 +주기적인 보안 패치 확인 및 설치 적용 +조치 시 영향 +설치 후 시스템 재시작이 필요한 경우가 존재하며 설치에 따른 영향도 검사가 필요함 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +[수동 HOT FIX 적용] +Step 1) 패치 리스트를 조회하여, 서버에 필요한 패치를 선별하여 수동으로 설치함. +https://technet.microsoft.com/ko-kr/security/ +https://msrc.microsoft.com/update-guide +[자동 HOT FIX 적용] +Step 1) Windows 자동업데이트 기능을 이용한 설치 +제어판 > windows update + + +![이미지 233-0](images/p0233_img0.png) + + +--- + +| 한국인터넷진흥원 | +234 +W-39 +(상) +Windows 서버 > 3. 패치 관리 +백신 프로그램 업데이트 +개요 +점검 내용 +사용 백신 프로그램의 최신 업데이트 여부 점검 +점검 목적 +백신 프로그램의 최신 업데이트 상태를 유지하기 위함 +보안 위협 +백신 프로그램이 지속적, 주기적으로 업데이트되지 않으면 계속되는 신종 바이러스의 출현으로 인한 +시스템 공격 위험이 존재함 +참고 +※ 네트워크망이 격리된 기반 보호 시설의 경우, 시스템에 설치된 백신 프로그램의 최신 업데이트 상태 +유지를 위해 적절한 업데이트 절차 및 적용 방법 수립이 필요함 +※ 관련 점검항목 : W-45(상) +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 바이러스 백신 프로그램의 최신 엔진 업데이트가 설치되어 있거나, 망 격리 환경의 경우 백신 +업데이트를 위한 절차 및 적용 방법이 수립된 경우 +취약 : 바이러스 백신 프로그램의 최신 엔진 업데이트가 설치되어 있지 않거나, 망 격리 환경의 경우 +백신 업데이트를 위한 절차 및 적용 방법이 수립되지 않은 경우 +조치 방법 +백신 프로그램 환경설정 메뉴를 통해 DB 및 엔진의 최신 업데이트를 하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 긴급한 경우 수시로 업데이트 진행 +(백신 프로그램 종류마다 다소 차이는 있으나 매주 업데이트가 진행됨) +Step 2) 정기적인 업데이트를 통해 검색엔진을 최신 버전으로 유지하고, 백신 프로그램 제조사에서 발표하는 +경보 주시 +Step 3) 백신 프로그램의 자동 업데이트 기능 이용 시 온라인을 통해 변동 사항을 자동으로 업데이트하여 알 수 있음 + + +![이미지 234-0](images/p0234_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +235 +W-40 +(중) +Windows 서버 > 4. 로그 관리 +정책에 따른 시스템 로깅 설정 +개요 +점검 내용 +시스템 로깅 설정 여부 및 적절성 점검 +점검 목적 +적절한 로깅 설정으로 유사시 책임 추적을 위한 로그를 확보하기 위함 +보안 위협 +감사 설정이 구성되어 있지 않거나 감사 설정 수준이 너무 낮은 경우 보안 관련 문제 발생 시 원인을 +파악하기 어려우며 법적 대응을 위한 충분한 증거 확보가 어려운 위험이 존재함 +참고 +※ 감사 정책을 과도하게 설정할 경우, 보안 로그에 불필요한 항목이 많이 기록되므로 중요한 감사 항 +목 식별이 어려울 수 있으며, 시스템 성능에도 심각한 영향을 줄 수 있으므로 법적 요구 사항과 조직 +의 정책에 따라 꼭 필요한 로그를 남기도록 설정해야 함 +※ Windows 시스템은 보안 로그가 가득 차게 되는 경우 가장 오래된 감사 항목이 덮어 씌워짐 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 감사 정책 권고 기준에 따라 감사 설정이 되어 있는 경우 +취약 : 감사 정책 권고 기준에 따라 감사 설정이 되어 있지 않은 경우 +조치 방법 +이벤트에 대한 감사 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 프로그램 > 관리 도구 > 도메인 사용자 관리자 > 정책 > 감사 +§ 로그온 및 로그오프, 보안 정책 바꾸기: 성공/실패 감사 +§ 사용자 권한 사용, 사용자 및 그룹 관리: 실패 감사 + + +![이미지 235-0](images/p0235_img0.png) + + +--- + +| 한국인터넷진흥원 | +236 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 감사 정책 +<감사 정책 권고 기준> +§ 계정 관리: 실패 감사 +§ 계정 로그온 이벤트 : 성공/실패 감사 +§ 권한 사용 : 성공/실패 감사 +§ 디렉터리 서비스 액세스 : 실패 감사 +§ 로그온 이벤트 : 성공/실패 감사 +§ 정책 변경 : 성공/실패 감사 +[ 감사 정책 설정 ] + + +![이미지 236-0](images/p0236_img0.png) + + +![이미지 236-1](images/p0236_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +237 +W-41 +(중) +Windows 서버 > 4. 로그 관리 +NTP 및 시각 동기화 설정 +개요 +점검 내용 +NTP 및 시각 동기화 설정 여부 점검 +점검 목적 +안전하고 승인된 Windows 시간 서비스 또는 자체 구축한 NTP 서버와 동기화하여 인증 및 감사하기 +위함 +보안 위협 +시스템 간 시각 동기화 미흡으로 보안 사고 및 장애 발생 시 초기 대응이 불가한 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : NTP 및 시각 동기화를 설정한 경우 +취약 : NTP 및 시각 동기화를 설정하지 않은 경우 +조치 방법 +NTP 및 시각 동기화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +[인터넷 동기화 설정 시] +Step 1) 제어판 > 시계 및 국가 > 날짜 및 시간 > 인터넷 시간 > 설정 변경 > 인터넷 시간 서버와 동기화 +Step 2) 신뢰할 수 있는 NTP 서버 입력 후 적용 +[ NTP 설정 및 동기화 ] + + +![이미지 237-0](images/p0237_img0.png) + + +![이미지 237-1](images/p0237_img1.png) + + +--- + +| 한국인터넷진흥원 | +238 +[내부 NTP 서버 사용 시] +Step 1) 시간 동기화 정보 확인 (Client) +CMD > w32tm /dumpreg /subkey:parameters +Step 2) 내부 NTP서버로 시간동기화 설정 (Client) +(설정) CMD > w32tm /config /syncfromflags:manual /manualpeerlist:{NTP서버 IP or 도메인} /update +(적용 확인) CMD > w32tm /dumpreg /subkey:parameters +※ Client에서 동기화 설정 후 ‘SpecialPollInterval’ ‘MaxPosPhaseCorrection’ 설정에 따라 주기적으로 +자동으로 동기화가 적용되지만 NTP Server에서 다음 명령어로 즉시 적용 가능함. +CMD > w32tm /resync +Step 1) 동기화 시간차 확인 +CMD > w32tm /stripchart /dataonly /computer:{NTP서버 IP or 도메인} + + +![이미지 238-0](images/p0238_img0.png) + + +![이미지 238-1](images/p0238_img1.png) + + +![이미지 238-2](images/p0238_img2.png) + + +![이미지 238-3](images/p0238_img3.png) + + +![이미지 238-4](images/p0238_img4.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +239 +W-42 +(하) +Windows 서버 > 4. 로그 관리 +이벤트 로그 관리 설정 +개요 +점검 내용 +이벤트 로그 파일 용량 및 보관 기간 설정 점검 +점검 목적 +유사시 책임추적을 위해 주요 이벤트가 누락 되지 않도록 이벤트 로그 파일의 크기 및 보관 기간을 +적절하게 유지하기 위함 +보안 위협 +이벤트 로그 파일의 크기가 충분하지 않으면 중요 로그가 저장되지 않을 위험이 있으며, 최대 보존 +크기를 초과하는 경우 자동으로 덮어씀으로써 중요 로그의 손실 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 최대 로그 크기 “10,240KB 이상”으로 설정, “90일 이후 이벤트 덮어씀”을 설정한 경우 +취약 : 최대 로그 크기 “10,240KB 미만”으로 설정, 이벤트 덮어씀 기간이 “90일 이하로 설정된 경우 +조치 방법 +최대 로그 크기 “10,204KB”, “90일 이후 이벤트 덮어씀” 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 이벤트 뷰어 > 해당 로그 > 속성 > 일반 +Step 2) 최대 로그 크기 → 10240KB +최대 로그 크기에 도달할 때: 다음보다 오래된 이벤트 덮어쓰기 → 90일 +[ 이벤트 로그 덮어쓰기 설정 ] +※ Windows 2008, 2012, 2016, 2019 서버의 경우 덮어쓰기 날짜 지정 불가능 + + +![이미지 239-0](images/p0239_img0.png) + + +![이미지 239-1](images/p0239_img1.png) + + +--- + +| 한국인터넷진흥원 | +240 +W-43 +(중) +Windows 서버 > 4. 로그 관리 +이벤트 로그 파일 접근 통제 설정 +개요 +점검 내용 +원격에서 로그 파일의 접근을 차단하기 위한 권한 적절성 점검 +점검 목적 +원격에서 로그 파일에 접근하는 것을 차단하여 로그 파일의 훼손 및 변조를 차단하기 위함 +보안 위협 +원격 익명 사용자의 시스템 로그 파일에 접근이 가능한 경우 ‘중요 시스템 로그’ 파일 및 ‘응용프로그램 +로그’ 등 중요 보안 감사 정보의 변조·삭제·유출의 위험이 존재함 +참고 +※ 로그 디렉터리 기본 위치 +Ÿ 시스템 로그 디렉터리: %systemroot%\system32\config +Ÿ IIS 로그 디렉터리: %systemroot%\system32\LogFiles +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 로그 디렉터리의 접근 권한에 Everyone 권한이 없는 경우 +취약 : 로그 디렉터리의 접근 권한에 Everyone 권한이 있는 경우 +조치 방법 +로그 디렉터리의 접근 권한에 Everyone 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012 +Step 1) 탐색기 > 로그 디렉터리 > 속성 > 보안 +Step 2) Everyone 권한 제거 +l Windows 2016, 2019, 2022 +Step 1) 탐색기 > 로그 디렉터리 > 속성 > 보안 > 고급 +Step 2) Everyone 권한 제거 +[ 로그 디렉터리 권한 확인 ] + + +![이미지 240-0](images/p0240_img0.png) + + +![이미지 240-1](images/p0240_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +241 +W-44 +(상) +Windows 서버 > 5. 보안 관리 +원격으로 액세스할 수 있는 레지스트리 경로 +개요 +점검 내용 +원격 레지스트리 서비스 사용 여부 점검 +점검 목적 +원격 레지스트리 서비스를 비활성화하여 레지스트리에 대한 원격 접근을 차단하기 위함 +보안 위협 +Ÿ 원격 레지스트리 서비스는 액세스에 대한 인증이 취약하여 관리자 계정 외 다른 계정들에도 원격 +레지스트리 액세스를 허용할 우려가 있으며, 레지스트리에 대한 권한 설정이 잘못되어 있는 경우 +원격에서 레지스트리를 통해 임의의 파일을 실행할 위험이 존재함 +Ÿ 레지스트리 서비스의 장애는 전체 시스템에 영향을 줄 수 있어 서비스 거부 공격(DoS) 공격에 이용될 +위험이 존재함 +참고 +※ 레지스트리: Windows를 실행하는데 필요한 모든 환경설정 데이터를 모아 두는 중앙 저장소 +※ 원격 레지스트리 서비스: 원격지에 있는 컴퓨터를 한곳에서 집중적으로 관리하기 위한 목적으로 +원격 컴퓨터의 레지스트리에 접근할 수 있도록 하는 서비스 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : Remote Registry Service가 중지된 경우 +취약 : Remote Registry Service가 사용 중인 경우 +조치 방법 +불필요 시 서비스 중지 및 사용 안 함으로 설정 +조치 시 영향 +Remote Registry Service를 사용하는지 확인 필요 +(서비스 > Remote Registry Service > 등록 정보 > 종속성 참고) +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 서비스 > Remote Registry > 속성 +Step 2) 시작 유형을 “사용 안 함”으로 설정한 후 서비스 중지 +[ Remote Registry 사용 중지 설정 ] + + +![이미지 241-0](images/p0241_img0.png) + + +![이미지 241-1](images/p0241_img1.png) + + +--- + +| 한국인터넷진흥원 | +242 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +※ 백신 프로그램에 대한 인지도, 효과성 등을 검토하여 설치할 수 있음 +W-45 +(상) +Windows 서버 > 5. 보안 관리 +백신 프로그램 설치 +개요 +점검 내용 +시스템 내 백신 프로그램 설치 여부 점검 +점검 목적 +적절한 백신 프로그램을 설치하여 바이러스 감염 여부 진단, 치료 및 파일 보호를 통해 보안 사고를 +예방하기 위함 +보안 위협 +백신 프로그램이 설치되지 않으면 웜, 트로이목마 등의 악성 바이러스로 인한 시스템 피해 위험이 +존재함 +참고 +※ 웜: 악의적인 목적을 가지고 자기 자신을 복제해 전파하며 주로 네트워크 공유 폴더나 메일로 전파됨 +※ 트로이목마: 고의로 악의적 목적이 있는 파일, 주로 다른 악성 코드나 위장된 프로그램으로 전파되 +거나 인터넷을 통해 다운로드 됨 +※ 관련 점검항목 : W-39(상) +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 바이러스 백신 프로그램이 설치된 경우 +취약 : 바이러스 백신 프로그램이 설치되어 있지 않은 경우 +조치 방법 +백신 프로그램 설치 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 242-0](images/p0242_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +243 +W-46 +(상) +Windows 서버 > 5. 보안 관리 +SAM 파일 접근 통제 설정 +개요 +점검 내용 +SAM 파일 접근 통제 설정 여부 점검 +점검 목적 +Administrator 및 System 그룹만 SAM 파일에 접근할 수 있도록 제한하여 악의적인 계정 정보 +유출을 차단하기 위함 +보안 위협 +SAM 파일이 노출될 경우 비밀번호 공격 시도로 인해 계정 및 비밀번호 데이터베이스 정보가 탈취될 +위험이 존재함 +참고 +※ SAM(Security Account Manager): 사용자와 그룹 계정의 비밀번호를 관리하고, LSA(Lo cal +Security Authority)를 통한 인증을 제공함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : SAM 파일 접근 권한에 Administrator, System 그룹만 모든 권한으로 설정된 경우 +취약 : SAM 파일 접근 권한에 Administrator, System 그룹 외 다른 그룹에 권한이 설정된 경우 +조치 방법 +SAM 파일 권한 확인 후 Administrator, System 그룹 외 다른 그룹에 설정된 권한 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) %systemroot%\system32\config\SAM > 속성 > 보안 +Step 2) Administrator, System 그룹 외 다른 사용자 및 그룹 권한 제거 +[ SAM 파일 권한 확인 ] + + +![이미지 243-0](images/p0243_img0.png) + + +![이미지 243-1](images/p0243_img1.png) + + +--- + +| 한국인터넷진흥원 | +244 +W-47 +(하) +Windows 서버 > 5. 보안 관리 +화면 보호기 설정 +개요 +점검 내용 +시스템 화면보호기 설정 여부 점검 +점검 목적 +사용자가 일정 시간 동안 아무런 작업을 수행하지 않으면 자동으로 로그오프 되거나 워크스테이션이 +잠기도록 설정하여, 유휴 시간 내 불법적인 시스템 접근을 차단하기 위함 +보안 위협 +화면보호기 설정을 하지 않으면 사용자가 자리를 비운 사이에 임의의 사용자가 해당 시스템에 접근하여 +중요 정보를 유출하거나, 악의적인 행위를 통해 시스템 운영에 악영향을 미칠 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 화면 보호기를 설정하고 대기 시간이 10분 이하의 값으로 설정되어 있으며, 화면 보호기 해제를 +위한 암호를 사용하는 경우 +취약 : 화면 보호기가 설정되지 않았거나 암호를 사용하지 않거나, 화면 보호기 대기 시간이 10분을 +초과한 값으로 설정된 경우 +조치 방법 +화면 보호기 사용, 대기 시간 10분 이하, 해제를 위한 암호 사용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000 +Step 1) 바탕화면 > 등록 정보 > 화면 보호기 +Step 2) “암호 사용” 설정 및 대기 시간 “10분” 이하로 설정 +l Windows 2003 +Step 1) 바탕화면 > 마우스 우클릭 > 속성 > 디스플레이 등록 정보 > [화면 보호기] +Step 2) "다시 시작할 때 암호로 보호" 설정 및 대기 시간 “10분” 이하로 설정 + + +![이미지 244-0](images/p0244_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +245 +l Windows 2008, 2012 +Step 1) 제어판 > 디스플레이 > 화면 보호기 변경 +Step 2) "다시 시작할 때 로그온 화면 표시" 설정 및 대기 시간 “10분” 이하로 설정 +l Windows 2016, 2019, 2022 +Step 1) 설정 > 개인 설정 > 잠금 화면 > 화면 보호기 설정 +Step 2) "다시 시작할 때 로그온 화면 표시" 설정 및 대기 시간 “10분” 이하로 설정 +[ 화면 보호기 설정 ] + + +![이미지 245-0](images/p0245_img0.png) + + +![이미지 245-1](images/p0245_img1.png) + + +--- + +| 한국인터넷진흥원 | +246 +W-48 +(상) +Windows 서버 > 5. 보안 관리 +로그온하지 않고 시스템 종료 허용 +개요 +점검 내용 +비 로그온 사용자의 시스템 종료 허용 여부 점검 +점검 목적 +시스템 로그온 화면의 종료 버튼을 비활성화함으로써 허가되지 않은 사용자를 통한 불법적인 시스템 +종료를 방지하고자 함 +보안 위협 +로그온 화면에 “시스템 종료” 버튼이 활성화되어 있으면 로그인을 하지 않고도 불법적인 시스템 종료가 +가능하여 정상적인 서비스 운영에 영향을 줌 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “로그온하지 않고 시스템 종료 허용”이 “사용 안 함”으로 설정된 경우 +취약 : “로그온하지 않고 시스템 종료 허용”이 “사용”으로 설정된 경우 +조치 방법 +“시스템 종료: 로그온하지 않고 시스템 종료” 정책을 “사용 안 함” 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 제어판 > 관리 도구 > 레지스트리 편집기 +Step 2) 다음의 레지스트리 값 추가 또는 변경 +HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ +ShutdownWithoutLogon = 0 +l Windows 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) “로그온하지 않고 시스템 종료 허용”을 “사용 안 함”으로 설정 + + +![이미지 246-0](images/p0246_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +247 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “시스템 종료: 로그온하지 않고 시스템 종료 허용”을 “사용 안 함”으로 설정 +[ 로그온하지 않고 시스템 종료 허용 사용 안 함 설정 ] + + +![이미지 247-0](images/p0247_img0.png) + + +![이미지 247-1](images/p0247_img1.png) + + +--- + +| 한국인터넷진흥원 | +248 +W-49 +(상) +Windows 서버 > 5. 보안 관리 +원격 시스템에서 강제로 시스템 종료 +개요 +점검 내용 +원격 시스템 종료 정책 적절성 점검 +점검 목적 +원격에서 네트워크를 통하여 운영체제를 종료할 수 있는 사용자나 그룹을 설정하여 특정 사용자만 +시스템 종료를 허용하기 위함 +보안 위협 +원격 시스템 강제 종료 설정이 부적절한 경우 서비스 거부 공격 등에 악용될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “원격 시스템에서 강제로 시스템 종료” 정책에 “Administrators”만 존재하는 경우 +취약 : “원격 시스템에서 강제로 시스템 종료” 정책에 “Administrators” 외 다른 계정 및 그룹이 존재하 +는 경우 +조치 방법 +“원격 시스템에서 강제로 시스템 종료” 정책에 “Administrators” 외 다른 계정 및 그룹 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 사용자 권한 할당 +Step 2) “원격 시스템에서 강제로 시스템 종료” 정책에 Administrators 외 다른 계정 및 그룹 제거 +[ 원격 시스템에서 강제 종료 ] + + +![이미지 248-0](images/p0248_img0.png) + + +![이미지 248-1](images/p0248_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +249 +W-50 +(상) +Windows 서버 > 5. 보안 관리 +보안 감사를 로그 할 수 없는 경우 즉시 시스템 종료 +개요 +점검 내용 +‘보안 감사를 로그 할 수 없는 경우 즉시 시스템 종료’ 정책 설정 여부 점검 +점검 목적 +해당 정책을 비활성화함으로써 로그 용량 초과 등의 이유로 이벤트를 기록할 수 없는 경우, 해당 +정책으로 인해 시스템이 비정상적으로 종료되는 것을 방지하기 위함 +보안 위협 +해당 정책이 활성화되어 있는 경우 악의적인 목적으로 시스템 종료를 유발하여 서비스 거부 공격에 +악용될 수 있으며, 비정상적인 시스템 종료로 인해 시스템 및 데이터에 손상을 입힐 위험이 존재함 +참고 +※ 일반적으로 보안 감사 로그가 꽉 찼을 때 보안 로그에 대한 보존 방법이 [이벤트를 덮어쓰지 않음] +또는 [매일 이벤트 덮어쓰기]인 경우 이벤트가 로그 되지 않음. 보안 로그가 꽉 차고 기존 항목을 덮 +어쓸 수 없을 때 해당 정책을 사용하는 경우 다음과 같은 중지 오류가 출력됨 +중지: C0000244 {감사 실패} +보안 감사를 만들려고 했으나 만들지 못했습니다. +복구하려면 관리자가 로그온하여 로그를 보관한 다음 로그를 지우고 이 옵션을 원하는 대로 다시 설 +정해야 합니다. 이 보안 설정을 다시 설정할 때까지는 보안 로그가 꽉 차지 않았더라도 +Administrators 그룹의 구성원이 아니면 어떤 사용자도 시스템에 로그온할 수 없습니다. +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “보안 감사를 로그 할 수 없는 경우 즉시 시스템 종료” 정책이 “사용 안 함”으로 되어있는 경우 +취약 : “보안 감사를 로그 할 수 없는 경우 즉시 시스템 종료” 정책이 “사용”으로 되어있는 경우 +조치 방법 +“보안 감사를 로그 할 수 없는 경우 즉시 시스템 종료” 정책을 “사용 안 함”으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) “보안 감사를 로그 할 수 없는 경우 즉시 시스템 종료” 정책을 “사용 안 함”으로 설정 + + +![이미지 249-0](images/p0249_img0.png) + + +--- + +| 한국인터넷진흥원 | +250 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “감사: 보안 감사를 로그 할 수 없는 경우 즉시 시스템 종료” 정책을 “사용 안 함”으로 설정 +[ 감사 정책 사용 안 함 설정 ] + + +![이미지 250-0](images/p0250_img0.png) + + +![이미지 250-1](images/p0250_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +251 +W-51 +(상) +Windows 서버 > 5. 보안 관리 +SAM 계정과 공유의 익명 열거 허용 안 함 +개요 +점검 내용 +“SAM 계정과 공유의 익명 열거 허용 안 함” 정책 설정 여부 점검 +점검 목적 +익명 사용자에 의한 악의적인 계정 정보 탈취를 방지하기 위함 +보안 위협 +Windows에서는 익명의 사용자가 도메인 계정(사용자, 컴퓨터 및 그룹)과 네트워크 공유 이름의 열거 +작업을 수행할 수 있으므로 SAM(보안 계정 관리자) 계정과 공유의 익명 열거가 허용될 경우 악의적인 +사용자가 계정 이름 목록을 확인하고 이 정보를 사용하여 암호를 추측하거나 사회 공학적 공격기법을 +수행할 위험이 존재함 +참고 +※ 방화벽과 라우터에서 135~139(TCP, UDP) Port 차단을 통해 외부로부터의 위협을 차단함 +※ 네트워크 및 전화 접속 연결 > 로컬 영역 > 등록 정보 > 고급 > 고급 설정 > Microsoft 네트워크 파일 +및 프린트 공유를 해제해야 함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “SAM 계정과 공유의 익명 열거 허용 안 함”이 “사용”으로 설정된 경우 +취약 : “SAM 계정과 공유의 익명 열거 허용 안 함”이 “사용 안 함”으로 설정된 경우 +조치 방법 +레지스트리 값 또는, 로컬 보안 정책 설정 +조치 시 영향 +Active Directory, Clustered system에서는 적용 시 영향 있음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 제어판 > 관리 도구 > 레지스트리 편집기 +HKLM\SYSTEM\CurrentControlSet\Control\LSA +Step 2) RestrictAnonymous 값을 “1”로 설정 +l Windows 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) “익명의 연결에 추가적인 제한”에 “명백한 익명의 사용 권한이 없으면 액세스 제한” 선택 + + +![이미지 251-0](images/p0251_img0.png) + + +--- + +| 한국인터넷진흥원 | +252 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) "네트워크 액세스 : SAM 계정과 공유의 익명 열거 허용 안 함”과 “네트워크 액세스 : SAM 계정의 익명 +열거 허용 안 함”에 “사용” 선택 +[ 익명 열거 허용 안 함 사용 설정 ] + + +![이미지 252-0](images/p0252_img0.png) + + +![이미지 252-1](images/p0252_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +253 +W-52 +(상) +Windows 서버 > 5. 보안 관리 +Autologon 기능 제어 +개요 +점검 내용 +Autologon 기능 제어 설정 여부 점검 +점검 목적 +Autologon 기능을 사용하지 않도록 설정하여 시스템 계정 정보 노출을 차단하기 위함 +보안 위협 +Autologon 기능을 사용하면 침입자가 해킹 도구를 이용하여 레지스트리에 저장된 로그인 계정 및 +비밀번호 정보 유출 위험이 존재함 +참고 +※ Autologon: 레지스트리에 암호화되어 저장된 대체 증명을 사용하여 자동으로 로그인하는 기능 +※ AutoAdminLogon 키가 없는 경우 기본값 비활성화 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : AutoAdminLogon 값이 없거나 0으로 설정된 경우 +취약 : AutoAdminLogon 값이 1로 설정된 경우 +조치 방법 +해당 레지스트리 값이 존재하는 경우 0으로 설정 +조치 시 영향 +반드시 자동 로그인을 사용하여야 할 경우를 제외하고는 일반적으로 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 레지스트리 편집기 +HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon +Step 2) “AutoAdminLogon” 값을 “0”으로 설정 +Step 3) “Default Password” 존재 시 제거 +[ AutoAdminLogon 값 확인 ] + + +![이미지 253-0](images/p0253_img0.png) + + +![이미지 253-1](images/p0253_img1.png) + + +--- + +| 한국인터넷진흥원 | +254 +W-53 +(상) +Windows 서버 > 5. 보안 관리 +이동식 미디어 포맷 및 꺼내기 허용 +개요 +점검 내용 +관리자 이외 NTFS 미디어 포맷 및 꺼내기 허용 여부 점검 +점검 목적 +이동식 미디어의 NTFS 포맷 및 꺼내기가 허용되는 사용자를 관리 권한자로 제한함으로써 관리 권한이 +없는 사용자 및 비인가자에 의한 불법적인 이동식 미디어의 포맷 및 이동을 차단하기 위함 +보안 위협 +관리자 이외 사용자에게 해당 정책이 설정된 경우 비인가자에 의한 불법적인 매체 처리를 허용할 위험이 +존재함 +참고 +※ 해당 보안 설정은 이동식 NTFS 미디어를 포맷하거나 꺼낼 수 있는 사용자를 결정하는 옵션으로 +Administrators, Administrators 및 Power Users, Administrators 및 Interactive Users 그 +룹에 이 기능을 허용할 수 있음 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “이동식 미디어 포맷 및 꺼내기 허용” 정책이 “Administrators”로 되어있는 경우 +취약 : “이동식 미디어 포맷 및 꺼내기 허용” 정책이 “Administrators”로 되어있지 않은 경우 +조치 방법 +“이동식 NTFS 미디어 꺼내기 허용” 정책을 “Administrators”로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) “이동식 NTFS 미디어 꺼내기 허용” 정책을 “Administrators”로 설정 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “장치 : 이동식 미디어 포맷 및 꺼내기 허용” 정책을 “Administrators”로 설정 +[ 이동식 미디어 포맷 및 꺼내기 허용 ] + + +![이미지 254-0](images/p0254_img0.png) + + +![이미지 254-1](images/p0254_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +255 +W-54 +(중) +Windows 서버 > 5. 보안 관리 +Dos 공격 방어 레지스트리 설정 +개요 +점검 내용 +DoS 공격 방어 레지스트리 설정 여부 점검 +점검 목적 +TCP/IP 스택(Stack)을 강화하는 레지스트리 값 변경을 통하여 DoS 공격을 방어하기 위함 +보안 위협 +DoS 방어 레지스트리를 설정하지 않은 경우, DoS 공격에 의한 시스템 다운으로 서비스 제공이 중단될 +위험이 존재함 +참고 +※ DoS(서비스 거부 공격): 네트워크 사용자가 컴퓨터나 컴퓨터의 특정 서비스를 사용할 수 없도록 만 +들기 위한 네트워크 공격 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 아래 4가지 DoS 방어 레지스트리를 설정한 경우 +Ÿ SynAttackProtect → 1이상 +Ÿ EnableDeadGWDetect → 0 +Ÿ KeepAliveTime → 300,000 +Ÿ NoNameReleaseOnDemand → 1 +취약 : DoS 방어 레지스트리 값이 설정되어 있지 않은 경우 +조치 방법 +레지스트리 값을 추가 또는 수정 +조치 시 영향 +잘못된 값으로 설정할 경우 운영체제 재설치를 요구할 수 있음 +점검 및 조치 사례 +l Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 레지스트리 편집기 +HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\ 폴더 +Step 2) 다음의 DoS 방어 레지스트리 값 추가 또는 변경 +§ SynAttackProtect = REG_DWORD 0(False) - > 1 이상 +§ EnableDeadGWDetect = REG_DWORD 1(True) - > 0 +§ KeepAliveTime = REG_DWORD 7,200,000(2시간) - > 300,000(5분) +§ NoNameReleaseOnDemand = REG_DWORD 0(False) - > 1 + + +![이미지 255-0](images/p0255_img0.png) + + +--- + +| 한국인터넷진흥원 | +256 +W-55 +(중) +Windows 서버 > 5. 보안 관리 +사용자가 프린터 드라이버를 설치할 수 없게 함 +개요 +점검 내용 +사용자의 프린터 드라이버 설치 차단 여부 점검 +점검 목적 +일반 사용자를 통한 프린터 드라이버 설치를 차단하여 의도하지 않은 시스템 손상을 방지하기 위함 +보안 위협 +서버에 프린터 드라이버를 설치하는 경우 악의적인 사용자가 고의로 잘못된 프린터 드라이버를 +설치하여 컴퓨터를 손상할 수 있으며, 프린터 드라이버로 위장한 악성코드를 설치할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “사용자가 프린터 드라이버를 설치할 수 없게 함” 정책이 “사용”인 경우 +취약 : “사용자가 프린터 드라이버를 설치할 수 없게 함” 정책이 “사용 안 함”인 경우 +조치 방법 +“사용자가 프린터 드라이버를 설치할 수 없게 함” 정책을 “사용”으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) “사용자가 프린터 드라이버를 설치할 수 없게 함” 정책을 “사용”으로 설정 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “장치: 사용자가 프린터 드라이버를 설치할 수 없게 함” 정책을 “사용”으로 설정 +[ 장치: 사용자가 프린터 드라이버를 설치할 수 없게 함 적용 ] + + +![이미지 256-0](images/p0256_img0.png) + + +![이미지 256-1](images/p0256_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +257 +W-56 +(중) +Windows 서버 > 5. 보안 관리 +SMB 세션 중단 관리 설정 +개요 +점검 내용 +Session 연결 중단 시 유휴 시간 설정 여부 점검 +점검 목적 +Session이 중단되기 전에 SMB(서버 메시지 블록) Session에서 보내야 하는 연속 유휴 시간을 +결정하여 서비스 거부 공격 등에 악용되지 않도록 하기 위함 +보안 위협 +SMB Session에서는 서버 리소스를 사용하며, NULL Session 수가 많으면 서버 속도가 느려지거나 +서버에 오류를 발생시킬 수 있으므로 공격자는 이를 악용하여 SMB Session을 반복 설정하여 서버의 +SMB 서비스가 느려지거나 응답하지 않게 하여 서비스 거부 공격을 실행할 위험이 존재함 +참고 +※ Administrator는 해당 정책을 활성화하여 컴퓨터가 비활성 SMB Session을 중단하는 시점을 제 +어할 수 있으며, 클라이언트를 다시 시작하면 해당 Session은 자동으로 다시 연결됨. 해당 정책의 +값을 0으로 설정하면 가능한 한 빨리 유휴 Session 연결은 끊어지며, 최댓값은 99999(208일)로 +사실상 정책 설정 해제를 의미함 +※ SMB(서버 메시지 블록): LAN이나 컴퓨터 간의 통신에서 데이터 송수신을 하기 위한 프로토콜 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : “로그온 시간이 만료되면 클라이언트 연결 끊기” 정책을 “사용”으로, “세션 연결을 중단하기 전에 +필요한 유휴 시간” 정책을 “15분” 이하로 설정한 경우 +취약 : “로그온 시간이 만료되면 클라이언트 연결 끊기” 정책이 “사용 안 함” 또는 “세션 연결을 +중단하기 전에 필요한 유휴 시간” 정책이 “15분” 초과로 설정한 경우 +조치 방법 +Ÿ “로그인 시간이 만료되면 클라이언트 연결 끊기” 정책 “사용” 설정 +Ÿ “세션 연결을 중단하기 전에 필요한 유휴 시간” 정책 “15분” 이하로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) “로그인 시간이 만료되면 클라이언트 연결 끊기” 정책 “사용” 설정 +“세션 연결을 중단하기 전에 필요한 유휴 시간” 정책 “15분” 이하로 설정 + + +![이미지 257-0](images/p0257_img0.png) + + +--- + +| 한국인터넷진흥원 | +258 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “Microsoft 네트워크 서버: 로그온 시간이 만료되면 클라이언트 연결 끊기” 정책 “사용” 설정 +“Microsoft 네트워크 서버: 세션 연결을 중단하기 전에 필요한 유휴 시간” 정책 “15분” 이하로 설정 +[ 로그온 시간이 만료되면 클라이언트 연결 끊기 “사용” 설정 ] +[ 세션을 중단하기 전에 필요한 유휴 시간 “15분” 설정 ] + + +![이미지 258-0](images/p0258_img0.png) + + +![이미지 258-1](images/p0258_img1.png) + + +![이미지 258-2](images/p0258_img2.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +259 +W-57 +(하) +Windows 서버 > 5. 보안 관리 +로그온 시 경고 메시지 설정 +개요 +점검 내용 +로그온 시 경고 메시지 출력 여부 점검 +점검 목적 +로그온 시 경고 메시지를 설정하여 시스템에 로그온을 시도하는 사용자들에게 관리자는 시스템의 +불법적인 사용에 대하여 경고 창을 띄움으로써 경각심을 주기 위함 +보안 위협 +로그온 경고 메시지가 없는 경우 악의적인 사용자에게 관리자가 적절한 보안 수준으로 시스템을 +보호하고 있으며, 공격자의 활동을 주시하고 있다는 생각을 상기시킬 수 없어 간접적인 공격 기회를 +제공할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 로그인 경고 메시지 제목 및 내용이 설정된 경우 +취약 : 로그인 경고 메시지 제목 및 내용이 설정되어 있지 않은 경우 +조치 방법 +로그인 메시지 제목 및 메시지 내용에 경고 문구 삽입 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 시작 > 제어판 > 관리 도구 > 레지스트리 편집기 +HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon +Step 2) LegalNoticeCaption: 제목 +Step 3) LegalNoticeText: 메시지 내용 +※ 변경된 레지스트리 키의 내용은 시스템을 로그오프 한 후 반영됨 +l Windows 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) 로그온 시도하는 사용자에 대한 메시지 제목: 배너 제목 입력 +Step 3) 로그온 시도하는 사용자에 대한 메시지 텍스트: 배너 내용 입력 + + +![이미지 259-0](images/p0259_img0.png) + + +--- + +| 한국인터넷진흥원 | +260 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) 대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 제목: 배너 제목 입력 +Step 3) 대화형 로그온: 로그온 시도하는 사용자에 대한 메시지 텍스트: 배너 내용 입력 +[ 로그온 시도 경고 메시지 설정 ] + + +![이미지 260-0](images/p0260_img0.png) + + +![이미지 260-1](images/p0260_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +261 +W-58 +(중) +Windows 서버 > 5. 보안 관리 +사용자별 홈 디렉터리 권한 설정 +개요 +점검 내용 +사용자 홈 디렉터리 권한 적절성 점검 +점검 목적 +사용자 홈 디렉터리에 적절한 권한을 부여하여 비인가 사용자에 의한 불필요한 정보 노출을 방지하기 +위함 +보안 위협 +사용자 계정별 홈 디렉터리의 권한이 제한되어 있지 않으면 임의의 사용자나 다른 사용자의 홈 +디렉터리에 악의적인 목적으로 접근할 수 있으며, 접근 후 의도 또는, 의도하지 않은 행위로 시스템에 +악영향을 미칠 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 홈 디렉터리에 Everyone 권한이 없는 경우 (All Users, Default User 디렉터리 제외) +취약 : 홈 디렉터리에 Everyone 권한이 있는 경우 +조치 방법 +Everyone 권한 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) Windows NT: C:\WinNT\Profiles\사용자 홈 디렉터리 > 등록 정보 > 보안 +Step 2) Everyone 권한 제거(All Users, Default User 디렉터리는 제외) +l Windows 2000, 2003 +Step 1) C:\Documents and Settings\사용자 홈 디렉터리 > 속성 > 보안 +Step 2) Everyone 권한 제거(All Users, Default User 디렉터리는 제외) +l Windows 2008 +Step 1) C:\사용자\<사용자 계정> +Step 2) 해당 사용자에 대한 권한 외 일반 계정 삭제 + + +![이미지 261-0](images/p0261_img0.png) + + +--- + +| 한국인터넷진흥원 | +262 +l Windows 2012, 2016, 2019, 2022 +Step 1) C:\사용자\<사용자 계정> +Step 2) 해당 사용자에 대한 권한 외 일반 계정 삭제 +[ 사용자 권한 설정 확인 ] + + +![이미지 262-0](images/p0262_img0.png) + + +![이미지 262-1](images/p0262_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +263 +W-59 +(중) +Windows 서버 > 5. 보안 관리 +LAN Manager 인증 수준 +개요 +점검 내용 +LAN Manager 인증 수준 적절성 점검 +점검 목적 +LAN Manager 인증 수준 설정을 통해 네트워크 로그온에 사용할 Challenge/ Response 인증 +프로토콜을 결정하며, 안전한 인증 절차를 적용하기 위함 +보안 위협 +안전하지 않은 LAN Manager 인증 수준을 사용하는 경우 인증 트래픽을 가로채기를 통해 악의적인 +계정 정보 노출 위험이 존재함 +참고 +※ LAN Manager는 네트워크를 통한 파일 및 프린터 공유 등과 같은 작업 시 인증을 담당. NTLMv2 +는 Windows 2000, 2003, XP 이상에서 지원되며, Windows 98, NT 버전과 통신하면 패치를 +설치해야 함 +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : "LAN Manager 인증 수준" 정책에 "NTLMv2 응답만 보냄"이 설정되어 있는 경우 +취약 : "LAN Manager 인증 수준" 정책에 "LM" 및 "NTLM"인증이 설정되어 있는 경우 +조치 방법 +- Windows 2000 +: LAN Manager 인증 7수준 - > NTLMv2 응답만 보내기 +- Windows 2003, 2008, 2012, 2016, 2019 +: 네트워크 보안: LAN Manager 인증 수준 - > NTMLv2 응답만 보내기 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) “LAN Manager 인증 수준” 정책에 “NTLMv2 응답만 보내기” 설정 + + +![이미지 263-0](images/p0263_img0.png) + + +--- + +| 한국인터넷진흥원 | +264 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) “네트워크 보안: LAN Manager 인증 수준” 정책에 NTLMv2 응답만 보내기” 설정 +[ LAN Manager 인증 수준 설정 ] + + +![이미지 264-0](images/p0264_img0.png) + + +![이미지 264-1](images/p0264_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +265 +W-60 +(중) +Windows 서버 > 5. 보안 관리 +보안 채널 데이터 디지털 암호화 또는 서명 +개요 +점검 내용 +‘보안 채널 데이터 디지털 암호화 또는 서명’ 정책 적절성 점검 +점검 목적 +해당 정책을 활성화하여 보안 채널의 서명 또는 암호화를 협상하지 않는 한 보안 채널을 확립하지 않기 +위함 +보안 위협 +보안 채널이 암호화되지 않으면 인증 트래픽 끼어들기 공격, 반복 공격 및 기타 유형의 네트워크 공격 +등의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 아래 3가지 정책 모두 “사용"으로 되어있는 경우 +Ÿ 도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상) +Ÿ 도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우) +Ÿ 도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우) +취약 : 아래 3가지 정책 중 일부가 "사용 안 함"으로 되어있는 경우 +Ÿ 도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명(항상) +Ÿ 도메인 구성원: 보안 채널 데이터를 디지털 암호화(가능한 경우) +Ÿ 도메인 구성원: 보안 채널 데이터 디지털 서명(가능한 경우) +조치 방법 +보안 채널 데이터를 디지털 암호화·서명 관련 3개 정책 → 사용 +조치 시 영향 +도메인 구성원만 해당하며, Windows 98/NT와 파일 및 프린터 공유 등의 작업하지 않는 경우 +일반적으로 영향 없음 +점검 및 조치 사례 +l Windows NT, 2000 +Step 1) 시작 > 실행 > SECPOL.MSC > 로컬 정책 > 보안 옵션 +Step 2) 아래 3가지 정책을 모두 "사용"으로 설정 +• 도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명 (항상) +• 도메인 구성원: 보안 채널 데이터 디지털 서명 (가능한 경우) +• 도메인 구성원: 보안 채널 데이터를 디지털 암호화 (가능한 경우) + + +![이미지 265-0](images/p0265_img0.png) + + +--- + +| 한국인터넷진흥원 | +266 +l Windows 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 로컬 정책 > 보안 옵션 +Step 2) 아래 3가지 정책을 모두 "사용"으로 설정 +• 도메인 구성원: 보안 채널 데이터를 디지털 암호화 또는 서명 (항상) +• 도메인 구성원: 보안 채널 데이터 디지털 서명 (가능한 경우) +• 도메인 구성원: 보안 채널 데이터를 디지털 암호화 (가능한 경우) +[ 보안 채널 데이터 설정 적용 ] + + +![이미지 266-0](images/p0266_img0.png) + + +![이미지 266-1](images/p0266_img1.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +267 +W-61 +(중) +Windows 서버 > 5. 보안 관리 +파일 및 디렉토리 보호 +개요 +점검 내용 +NTFS 파일 시스템 사용 여부 점검 +점검 목적 +FAT 파일 시스템에 비해 더 강화된 보안 기능을 제공하는 파일 시스템을 사용하기 위함 (파일과 +디렉터리에 소유권과 사용 권한 설정이 가능하고 ACL(접근통제 목록)을 제공) +보안 위협 +FAT 파일 시스템 사용 시 사용자별 접근통제를 적용할 수 없어 중요 정보에 대한 책임 추적성 확보가 +어려운 위험이 존재함 +참고 +※ 기존에 FAT 파일 시스템을 사용하다가 NTFS로 변환하기 위해서는 convert.exe 명령을 사용할 수 +있지만, FAT 파일 시스템으로 운영 중 변환해야 하는 경우 Default ACL이 적용되지 않으므로 가능 +한 초기 설치 시 NTFS 파일 시스템을 선택하는 것을 권장함 +※ 최근 운영체제 버전에서는 FAT32 파일 시스템을 지원하지 않으나 기존 FAT32에서 NTFS 변환 +가능 +※ NTFS, FAT 파일 시스템 비교: FAT32에는 NTFS가 제공하는 보안 기능이 없으므로 컴퓨터에 +FAT32 파티션 또는, 볼륨이 있는 경우 컴퓨터에 액세스 가능한 모든 사용자가 파일을 읽을 수 +있으며 FAT32에는 크기 제한이 있음. +점검 대상 및 판단 기준 +대상 +Windows NT, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : NTFS 파일 시스템을 사용하는 경우 +취약 : FAT 파일 시스템을 사용하는 경우 +조치 방법 +FAT 파일 시스템을 사용 시 가능한 NTFS 파일 시스템 변환 설정 +조치 시 영향 +파일 시스템을 변환할 경우 기존 파일 시스템에 영향을 줄 수 있음 +점검 및 조치 사례 +l Windows NTM, 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 실행 > CMD > fsutil fsinfo volumeinfo (해당 드라이브) +Step 2) FAT 파일 시스템 사용 시 아래 명령으로 NTFS 변환 +시작 > 실행 > CMD > convert 드라이브명: /fs:ntfs +(예) convert F: /fs/ntfs라고 입력 시 F 드라이브는 NTFS 형식으로 변환됨 + + +![이미지 267-0](images/p0267_img0.png) + + +--- + +| 한국인터넷진흥원 | +268 +W-62 +(중) +Windows 서버 > 5. 보안 관리 +시작 프로그램 목록 분석 +개요 +점검 내용 +시작 프로그램 목록 내 불필요한 항목 존재 여부 점검 +점검 목적 +불필요한 시작 프로그램을 삭제하거나 비활성화하여 악의적인 공격을 차단하기 위함 +보안 위협 +Windows 시작 시 너무 많은 시작 프로그램이 동시에 실행되면 속도가 저하되는 문제가 발생하며, +공격자가 심어놓은 악성 프로그램이나 해킹 도구가 실행되어 시스템에 피해를 줄 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : 시작 프로그램 목록을 정기적으로 검사하고 불필요한 서비스를 비활성화한 경우 +취약 : 시작 프로그램 목록을 정기적으로 검사하지 않고, 부팅 시 불필요한 서비스도 실행되고 있는 경우 +조치 방법 +시작 프로그램 목록의 정기적인 검사 실시 및 불필요한 서비스 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2000, 2003, 2008 +Step 1) 시작 > 검색 > msconfig +Step 2) 시작 프로그램 탭 클릭 > 시작 프로그램 목록 중 불필요하거나 의심스러운 항목 체크 표시 해제 +l Windows 2012, 2016, 2019, 2022 +Step 1) Windows 2012 서버 이후 버전의 경우 시작 프로그램 목록 편집이 불가능하며 별도의 편집이나 등록을 +위해서는 배치파일이나 레지스트리 값 추가를 이용해서 개인화를 통해 사용할 수 있으나 보안상 권장하 +지 않음 + + +![이미지 268-0](images/p0268_img0.png) + + +--- + +02. Windows 서버 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +269 +W-63 +(중) +Windows 서버 > 5. 보안 관리 +도메인 컨트롤러-사용자의 시간 동기화 +개요 +점검 내용 +도메인 컨트롤러와 사용자의 시간 동기화 여부 점검 +점검 목적 +이 설정은 Kerberos가 클라이언트 시계의 시간과 서버 시계의 시간 사이에서 허용되는 최대 시간 +차이(분)를 결정하는 동시에 두 시계의 동기를 고려하여, 재전송 공격을 방지하기 위함 +보안 위협 +Replay Attack 이란 프로토콜 상 메시지를 복사한 후 재전송함으로써 승인된 사용자로 오인하게 +만들어 내부 침입 및 정보 유출 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows 2012, 2016, 2019, 2022 +판단 기준 +양호 : 컴퓨터 시계 동기화 최대 허용 오차값이 5분 이하인 경우 +취약 : 컴퓨터 시계 동기화 최대 허용 오차값이 5분 초과인 경우 +조치 방법 +Kerberos 사용 시 컴퓨터 시계 동기화 최대 허용 오차값 5분 이하로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > 관리 도구 > 로컬 보안 정책 > 계정 정책 > Kerberos 정책 +컴퓨터 시계 동기화 최대 허용 오차 5분으로 설정 +[ 컴퓨터 시계 동기화 최대 허용 오차 ] + + +![이미지 269-0](images/p0269_img0.png) + + +![이미지 269-1](images/p0269_img1.png) + + +--- + +| 한국인터넷진흥원 | +270 +W-64 +(중) +Windows 서버 > 5. 보안 관리 +윈도우 방화벽 설정 +개요 +점검 내용 +시스템의 방화벽 기능이 활성화되어 있는지 점검 +점검 목적 +방화벽 기능 활성화 여부를 점검하여 시스템에서 외부망의 비인가 접근 및 외부망으로 통신을 시도하는 +프로그램에 대해 통제하고 있는지 확인하기 위함 +보안 위협 +방화벽 기능이 비활성화되어 있으면, 외부 및 내부의 접근통제가 되지 않아 유해 정보가 유입되거나 +시스템 사용자의 파일이나 폴더가 외부로 유출될 위험이 존재함 +참고 +※ 방화벽: 인터넷 또는 외부 네트워크에서 유입되는 트래픽을 통제하는 솔루션으로써 외부의 불법 침 +입으로부터 내부의 정보 자산을 보호하고 외부로부터 유해 정보 유입을 차단하기 위한 정책과 이를 +지원하는 하드웨어와 소프트웨어를 총칭함 +점검 대상 및 판단 기준 +대상 +Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +판단 기준 +양호 : Windows 방화벽 “사용”으로 설정된 경우 +취약 : Windows 방화벽 “사용 안 함”으로 설정된 경우 +조치 방법 +Windows 방화벽 “사용”으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 2000, 2003, 2008, 2012, 2016, 2019, 2022 +Step 1) 시작 > 제어판 > Windows Defender 방화벽 > Windows 방화벽 설정 또는 해제 +(또는 시작 > 실행 > “firewall.cpl” 입력) +Step 2) Windows Defender 방화벽 “사용” 설정 +[ 방화벽 “사용” 설정 ] + + +![이미지 270-0](images/p0270_img0.png) + + +![이미지 270-1](images/p0270_img1.png) + + +--- + +웹 서비스 +Chapter 03 + +## 1. 계정 관리················································································································274 + + +## 2. 서비스 관리·············································································································280 + + +## 3. 보안 설정················································································································325 + + +## 4. 패치 및 로그 관리····································································································347 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 271-0](images/p0271_img0.png) + + +--- + +| 한국인터넷진흥원 | +272 +01 +웹 서비스 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +Default 관리자 계정명 변경 +상 +WEB-01 +취약한 비밀번호 사용 제한 +상 +WEB-02 +비밀번호 파일 권한 관리 +상 +WEB-03 + +## 2. 서비스 관리 + +점검항목 +항목 +중요도 +항목코드 +웹 서비스 디렉터리 리스팅 방지 설정 +상 +WEB-04 +지정하지 않은 CGI/ISAPI 실행 제한 +상 +WEB-05 +웹 서비스 상위 디렉터리 접근 제한 설정 +상 +WEB-06 +웹 서비스 경로 내 불필요한 파일 제거 +중 +WEB-07 +웹 서비스 파일 업로드 및 다운로드 용량 제한 +하 +WEB-08 +웹 서비스 프로세스 권한 제한 +상 +WEB-09 +불필요한 프록시 설정 제한 +상 +WEB-10 +웹 서비스 경로 설정 +중 +WEB-11 +웹 서비스 링크 사용 금지 +중 +WEB-12 +웹 서비스 설정 파일 노출 제한 +상 +WEB-13 +웹 서비스 경로 내 파일의 접근 통제 +상 +WEB-14 +웹 서비스의 불필요한 스크립트 매핑 제거 +상 +WEB-15 +웹 서비스 헤더 정보 노출 제한 +중 +WEB-16 +웹 서비스 가상 디렉토리 삭제 +중 +WEB-17 +웹 서비스 WebDAV 비활성화 +상 +WEB-18 + + +![이미지 272-0](images/p0272_img0.png) + + +![이미지 272-1](images/p0272_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +273 + +## 3. 보안 설정 + +점검항목 +항목 +중요도 +항목코드 +웹 서비스 SSI(Server Side Includes) 사용 제한 +중 +WEB-19 +SSL/TLS 활성화 +상 +WEB-20 +HTTP 리디렉션 +중 +WEB-21 +에러 페이지 관리 +하 +WEB-22 +LDAP 알고리즘 적절하게 구성 +중 +WEB-23 + +## 4. 패치 및 로그 관리 + +점검항목 +항목 +중요도 +항목코드 +별도의 업로드 경로 사용 및 권한 설정 +중 +WEB-24 +주기적 보안 패치 및 벤더 권고사항 적용 +상 +WEB-25 +로그 디렉터리 및 파일 권한 설정 +중 +WEB-26 + + +![이미지 273-0](images/p0273_img0.png) + + +--- + +| 한국인터넷진흥원 | +274 +WEB-01 +(상) +웹 서비스 > 1. 계정 관리 +Default 관리자 계정명 변경 +개요 +점검 내용 +웹 서비스 설치 시 기본적으로 설정된 관리자 계정의 변경 후 사용 여부 점검 +점검 목적 +기본 관리자 계정명과 같은 알려진 계정명을 유추하기 어려운 계정명으로 변경 후 사용하여 공격자에 +의한 추측 공격 및 무단 접근 등을 방지하고 보안을 강화하기 위함 +보안 위협 +기본 관리자 계정명을 변경하지 않고 사용할 경우, 공격자에 의한 계정 및 비밀번호 추측 공격이 가능하고, +이를 통해 불법적인 접근, 데이터 유출, 시스템 장애 등의 보안 사고가 발생할 수 있는 위험이 존재함 +참고 +※ 기본 계정: 웹 서비스 설치 시 기본적으로 생성되는 관리자 콘솔 계정 +※ 서비스별 기본 계정: IIS(Administrator), Tomcat(tomcat, admin), JEUS(administrator) +점검 대상 및 판단 기준 +대상 +Tomcat, JEUS +판단 기준 +양호 : 관리자 페이지를 사용하지 않거나, 계정명이 기본 계정명으로 설정되어 있지 않은 경우 +취약 : 계정명이 기본 계정명으로 설정되어 있거나, 추측하기 쉬운 문자 조합으로 이루어진 계정명을 +사용하는 경우 +조치 방법 +기본 관리자 계정명을 추측하기 어려운 계정명으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Tomcat +Step 1) 기본 계정명 변경 또는 관리자 페이지 비활성화(기본값: 비활성화) +# vi /conf/server.xml +예시) +Step 2) Tomcat 재구동 +# systemctl restart tomcat +※ “roles = manager-gui, manager-script, manager-jmx, manager-status” 설정 시 관리자 계정 및 페이지 활성화 상태 + + +![이미지 274-0](images/p0274_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +275 +l JEUS +Step 1) Security > Security Domains 페이지 해당 도메인 > Account & Policies Management > Users > 기본 +관리자 계정의 Name 확인 +[ 기본 관리자 계정 확인 ] +Step 1) Lock & EDIT > Security > Security Domains 페이지 해당 도메인 > Account & Policies Management > +Users > ADD > 기본 관리자 계정의 Name을 유추하기 어려운 계정 이름 입력 > Administrators 그룹 +체크 후 확인 > Accounts & Policies Management > policies > Role Permissions > AdministratorsRole > +“Activate Changes”을 눌러 설정 저장(웹 서비스명과 연관된 단어 “administrator” 계정명 사용금지) > +“Activate Changes”을 눌러 설정 저장 +Step 2) JEUS 재구동 +# ./stopServer –host [도메인명]:[포트 번호] +# ./startDomainAdminServer –host [도메인명]:[포트 번호] +※ 기본 계정명 변경이 불가능할 경우 초기 비밀번호 변경으로 보완 필요 + + +![이미지 275-0](images/p0275_img0.png) + + +![이미지 275-1](images/p0275_img1.png) + + +--- + +| 한국인터넷진흥원 | +276 +WEB-02 +(상) +웹 서비스 > 1. 계정 관리 +취약한 비밀번호 사용 제한 +개요 +점검 내용 +관리자 계정의 취약한 비밀번호 설정 여부 점검 +점검 목적 +관리자 계정의 비밀번호가 복잡도 기준에 맞게 적용되어 있는지 점검하여, 비인가자에 의한 비밀번호 +유추 공격 및 관리자 권한 탈취 등을 방지하기 위함 +보안 위협 +관리자 계정의 비밀번호를 취약하게 설정하여 사용하는 경우, 비인가자의 비밀번호 유추 공격으로 +관리자 권한 탈취 및 시스템 침입 등의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Tomcat, IIS, JEUS +판단 기준 +양호 : 관리자 비밀번호가 암호화되어 있거나, 유추하기 어려운 비밀번호로 설정된 경우 +취약 : 관리자 비밀번호가 암호화되어 있지 않거나, 유추하기 쉬운 비밀번호로 설정된 경우 +조치 방법 +복잡도 기준에 맞는 추측하기 어려운 비밀번호 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Tomcat +Step 1) 복잡도를 만족하는 비밀번호 설정 +# vi /conf/server.xml + +Step 2) Tomcat 재시작 +# systemctl restart tomcat +l JEUS +Step 1) Lock & EDIT > Security > Security Domains 페이지 해당 도메인 > Account & Policies Management > +Users > 기본 관리자 계정의 비밀번호 변경 > 확인 > “Activate Changes”을 눌러 설정 저장 + + +![이미지 276-0](images/p0276_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +277 +[ 관리자 비밀번호 설정 ] +※ SHA-256 이상 암호화 방식 비밀번호로 설정 +[비밀번호 설정 기준 ] + +## 1. 영문, 숫자, 특수문자를 조합하여 계정명과 상이한 8자 이상의 비밀번호 설정 + +※ 다음 각 항목의 문자 종류 중 2종류 이상을 조합하여 최소 10자리 이상 또는 3종류 이상을 조합하여 최소 +8자리 이상의 길이로 구성 +(1) 영문 대문자(26개) +(2) 영문 소문자(26개) +(3) 숫자(10개) +(4) 특수문자(32개) + +## 2. 비밀번호는 비인가자에 의한 추측이 어렵게 다음의 사항을 반영하여 설계 + +(1) Null(공백) 비밀번호 사용금지 +(2) 문자 또는 숫자만으로 구성 금지 +(3) 사용자 ID와 같거나 유사하지 않은 비밀번호 금지 +(4) 연속적인 문자나 숫자 사용 +예시) 1111, 1234, abcd 사용금지 +(5) 주기성 비밀번호 재사용 금지 +(6) 전화번호, 생일과 같이 추측하기 쉬운 개인정보를 비밀번호로 사용금지 +1. SAM 파일에 암호를 저장하기 위해 사용되는 LANMan 알고리즘은 8자 단위로 글자를 나누어 암호화하기 +때문에 8의 배수가 되는 암호 사용 권장 (8자로 이루어진 암호 사용 권장) + +## 3. 아래와 같은 암호 설정 지양 + +(1) Null, 계정과 같거나 유사한 스트링, 지역명, 부서명, 담당자명, 대표 업무명 “root”, “rootroot”, “root123”, +“123root”, “admin”, “admin123”, “123admin”, “osadmin”, “adminos” + + +![이미지 277-0](images/p0277_img0.png) + + +![이미지 277-1](images/p0277_img1.png) + + +--- + +| 한국인터넷진흥원 | +278 +WEB-03 +(상) +웹 서비스 > 1. 계정 관리 +비밀번호 파일 권한 관리 +개요 +점검 내용 +비밀번호 파일에 대해 적절한 접근 권한 설정 여부 점검 +점검 목적 +비밀번호 파일의 접근 권한을 적절하게 설정하여 비인가자가 비밀번호 파일에 무단 접근 및 유출 등을 +방지하기 위함 +보안 위협 +비밀번호 파일의 권한을 적절하게 설정하지 않은 경우, 비인가자에게 비밀번호 정보가 노출될 수 있고 웹 +서버에 접속하는 등의 침해사고가 발생할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Tomcat, IIS, JEUS +판단 기준 +양호 : 비밀번호 파일에 권한이 600 이하로 설정된 경우 +취약 : 비밀번호 파일에 권한이 600 초과로 설정된 경우 +조치 방법 +비밀번호 파일 권한 600 이하로 설정 +조치 시 영향 +일반적인 경우 영향 없음 + +점검 및 조치 사례 +l Tomcat +Step 1) tomcat-users.xml 파일 권한 변경 +# chmod 600 //tomcat-users.xml +l IIS +Step 1) “%systemroot%\system32\config\SAM” 파일 속성 > 보안 > 편집 > Administrators, SYSTEM을 제외한 +계정 및 그룹 권한 제거 +[ SAM 파일 권한 설정 ] + + +![이미지 278-0](images/p0278_img0.png) + + +![이미지 278-1](images/p0278_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +279 +l JEUS +Step 1) [비밀번호 파일] 또는 [Role 파일] 권한 설정 +# chmod 600 //jeus_domain/config/security/SYSTEM_DOMAIN/accounts.xml +# chmod 600 //jeus_domain/config/security/SYSTEM_DOMAIN/policies.xml +Step 2) JEUS 재시작 +# ./stopServer –host <도메인명>:<포트 번호> +# ./startDomainAdminServer –host <도메인명>:<포트 번호> + + +![이미지 279-0](images/p0279_img0.png) + + +--- + +| 한국인터넷진흥원 | +280 +WEB-04 +(상) +웹 서비스 > 2. 서비스 관리 +웹 서비스 디렉터리 리스팅 방지 설정 +개요 +점검 내용 +디렉터리 리스팅 기능 차단 여부 점검 +점검 목적 +웹 서버에 대한 디렉터리 리스팅 기능을 차단하여 디렉터리 내의 모든 파일에 대한 접근 및 정보 노출을 +차단하기 위함 +보안 위협 +디렉터리 리스팅 기능이 차단되지 않은 경우, 비인가자가 해당 디렉터리 내의 모든 파일의 리스트 확인 +및 접근이 가능하고, 웹 서버의 구조 및 백업 파일이나 소스 파일 등 공개되면 안 되는 중요 파일들이 +노출될 위험이 존재함 +참고 +※ 디렉터리 리스팅(Directory Listing): 웹 서버의 취약한 설정으로 인해 웹 서버의 파일 시스템 +목록을 보여주는 것 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 디렉터리 리스팅이 설정되지 않은 경우 +취약 : 디렉터리 리스팅이 설정된 경우 +조치 방법 +디렉터리 리스팅 기능 차단 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) httpd.conf 파일 내 모든 디렉터리의 Options 지시자에서 Indexes 옵션 제거 +# vi //httpd.conf(또는 apache.conf) + +Options Indexes 삭제 (또는 –Indexes 설정) + +Step 2) Apache 재시작 +# systemctl restart apache2 +※ httpd.conf 뿐 아니라 sites-available 디렉터리 내 모든 사이트에 적용 +※ 파일 위치 및 서비스명은 사용하는 운영체제에 따라 달라질 수 있음 + + +![이미지 280-0](images/p0280_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +281 +l Tomcat +Step 1) web.xml 파일 내 listings 옵션 비활성화 +# vi //web.xml + +listings +false + +l Nginx +Step 1) nginx.conf 파일 내 autoindex 지시자 off 설정 +# vi //conf/nginx.conf +server { +autoindex off; +} +Step 2) Nginx 재시작 +# systemctl restart nginx +l IIS +Step 1) 시작 > Windows 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 해당 웹 사이트 > IIS > 디렉터리 검색 +선택, 사용”을 “사용 안 함”으로 설정 +[ 디렉터리 검색 기능 비활성화 ] + + +![이미지 281-0](images/p0281_img0.png) + + +![이미지 281-1](images/p0281_img1.png) + + +--- + +| 한국인터넷진흥원 | +282 +l JEUS +Step 1) jeus-web-dd.xml 파일 내 디렉터리 리스팅 설정 변경 +# vi //WEB-INF/jeus-web-dd.xml +false +l WebtoB +Step 1) *Node, *URL 절에 Options 지시자 설정 삭제 또는 “-Indexes”로 설정 +# nano //config/http.m +*NODE +imuser WEBTOBDIR="/root/webtob", +Options = "-Indexes", +Step 2) 설정 파일 컴파일 및 재시작 +# wscfl -I http.m +# wsdown +# wsboot + + +![이미지 282-0](images/p0282_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +283 +WEB-05 +(상) +웹 서비스 > 2. 서비스 관리 +지정하지 않은 CGI/ISAPI 실행 제한 +개요 +점검 내용 +웹 서비스 CGI 실행 제한 설정 여부 점검 +점검 목적 +CGI 스크립트를 정해진 디렉터리에서만 실행되도록 하여 악의적인 파일의 업로드 및 실행을 방지하기 위함 +보안 위협 +게시판이나 자료실과 같이 업로드되는 파일이 저장되는 디렉터리에 CGI 스크립트가 실행 가능한 경우 +악의적인 파일을 업로드하고 이를 실행하여 시스템의 중요 정보가 노출될 수 있으며 침해사고의 경로로 +이용될 위험이 존재함 +참고 +※ CGI(Common Gateway Interface): 사용자가 서버로 보낸 데이터를 서버에서 작동 중인 데이터 +처리프로그램에 전달하고, 여기에서 처리된 데이터를 다시 서버로 되돌려 보내는 등의 일을 하는 +표준 인터페이스 규격 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, WebtoB +판단 기준 +양호 : CGI 스크립트를 사용하지 않거나 CGI 스크립트가 실행 가능한 디렉터리를 제한한 경우 +취약 : CGI 스크립트를 사용하고 CGI 스크립트가 실행 가능한 디렉터리를 제한하지 않은 경우 +조치 방법 +CGI 스크립트를 정해진 디렉터리 내에서만 실행할 수 있도록 설정 +조치 시 영향 +해당 디렉터리 확인 후 추가적인 파일이 없다면 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) apache 설정 파일 내 CGI 모듈 비활성화 또는 주석 처리 +# vi //httpd.conf(또는 apache.conf) +#LoadModule cgi_module modules/mod_cgi.so +#LoadModule cgid_module modules/mod_cgid.so +Step 2) apache 설정 파일 내 설정된 모든 디렉터리의 Options 지시자에서 ExecCGI 옵션 제거 +# vi //apache.conf(또는 httpd.conf) + +Options -ExecCGI + +Step 3) Apache 재시작 + + +![이미지 283-0](images/p0283_img0.png) + + +--- + +| 한국인터넷진흥원 | +284 +l Tomcat +Step 1) web.xml 파일 내 CGI 매핑 비활성화 + +Step 2) Tomcat 재시작 +l Nginx +Step 1) nginx.conf 파일 내 Fastcgi 사용 여부 확인 +# cat //conf/nginx.conf +location ~ \.cgi$ { +#fastcgi_pass :; +#include fastcgi_params; +} +Step 2) Nginx 재시작 +l IIS +Step 1) CGI 디렉터리 설정 해제 +IIS 관리자 > 서버 선택 > ISAPI 및 CGI 제한 > 기능 열기 > 작업 > 기능 설정 편집 > 사용하지 않는 +CGI/ISAPI 모듈 설정 해제 +[ CGI/ISAPI 모듈 설정 확인 ] + + +![이미지 284-0](images/p0284_img0.png) + + +![이미지 284-1](images/p0284_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +285 +l WebtoB +Step 1) http.m 파일 내 활성화되어 있는 *SVRGROUP, *SERVER, *URI 절에서 CGI 옵션 제거 또는 비활성화 +# vi //config/http.m“ +*SVRGROUP +htmlg +SVRTYPE = HTML +#cgig +SVRTYPE = CGI +ssig +SVRTYPE = SSI +jsvg +SVRTYPE = JSV +*SERVER +#cgi +SVGNAME = cgig, MinProc = 2, MaxProc = 10, ASQCount = 1 +ssi +SVGNAME = ssig, MinProc = 2, MaxProc = 10, ASQCount = 1 +MyGroup +SVGNAME = jsvg, MinProc = 20, MaxProc = 20 +*URI +#uri1 +Uri = "/cgi-bin/", Svrtype = CGI +Step 2) 설정 파일 컴파일 및 재구동 +# wscfl -I http.m +# wsdown +# wsboot +※ 필요한 경우 해당 디렉터리만 제한적으로 CGI 스크립트 실행 설정 + + +![이미지 285-0](images/p0285_img0.png) + + +--- + +| 한국인터넷진흥원 | +286 +WEB-06 +(상) +웹 서비스 > 2. 서비스 관리 +웹 서비스 상위 디렉터리 접근 제한 설정 +개요 +점검 내용 +“..” 와 같은 문자사용 등을 통한 상위 디렉터리 접근 제한 여부 점검 +점검 목적 +상위 디렉터리 접근 제한 설정을 통해 비인가자의 특정 디렉터리에 대한 접근 및 열람을 제한하여 중요 +파일 및 데이터를 보호하고, Unicode 버그 및 서비스 거부 공격 등을 방지하기 위함 +보안 위협 +Ÿ 상위 디렉터리로 이동하는 것이 가능할 경우 접근하고자 하는 디렉터리의 하위 경로에서 상위로 +이동하며 정보 탐색이 가능하여 중요 정보가 노출될 위험이 존재함 +Ÿ 악의적인 목적을 가진 사용자가 중요 파일 및 디렉터리의 접근이 가능하여 데이터가 유출될 위험이 +존재함 +참고 +※ “..” 는 Unicode 버그, 서비스 거부와 같은 공격에 쉽게 이용되므로 허용하지 않는 것을 권장함 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, WebtoB +판단 기준 +양호 : 상위 디렉터리 접근 기능을 제거한 경우 +취약 : 상위 디렉터리 접근 기능을 제거하지 않은 경우 +조치 방법 +상위 디렉터리 접근 기능 제거 설정 +조치 시 영향 +웹 서버 및 웹 서비스의 특성에 따라 영향을 줄 수 있음 +점검 및 조치 사례 +l Apache +Step 1) AllowOverride 지시자 Authconfig 옵션 설정 확인 +# vi //httpd.conf(또는 apache.conf) + +AllowOverride None + +Step 2) AllowOverride 지시자 AuthConfig 옵션 설정 +# vi //httpd.conf(또는 apache.conf) + +AllowOverride AuthConfig + + + +![이미지 286-0](images/p0286_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +287 +Step 3) 사용자 인증을 설정할 디렉터리에 .htaccess 파일 생성 +AuthName “디렉터리 사용자 인증” +AuthType Basic +AuthUserFile /usr/local/apache/test/.auth +Require valid-user +지시자 +설명 +AuthName +인증 영역(웹 브라우저의 인증 창에 표시되는 문구) +AuthType +인증 형태(Basic 또는, Digest) +AuthUserFile +사용자 정보(아이디 및 비밀번호) 저장 파일 위치 +AuthGroupFile +그룹 파일의 위치(옵션) +Require +접근을 허용할 사용자 또는, 그룹 정의 +Step 4) 사용자 인증에 사용할 아이디 및 비밀번호 생성 +# htpasswd //.htpasswd [사용자명] +New password: <비밀번호 입력> +Re-type new password: <비밀번호 재입력> +Adding password for user <사용자명> +Step 5) Apache 재구동 +# systemctl restart apache2 +l Tomcat +Step 1) server.xml 파일 내 Context 요소에서 allowLinking 옵션 확인 +# vi //conf/server.xml + +WEB-INF/web.xml +WEB-INF/tomcat-web.xml +${catalina.base}/conf/web.xml + +Step 2) server.xml 파일 내 Context 요소에서 allowLinking 옵션 제거 +#vi //conf/server.xml + + + +![이미지 287-0](images/p0287_img0.png) + + +--- + +| 한국인터넷진흥원 | +288 +WEB-INF/web.xml +WEB-INF/tomcat-web.xml +${catalina.base}/conf/web.xml + +l Nginx +Step 1) nginx.conf 파일 내 디렉터리 접근을 기본 인증으로 제한 설정 +# cat //conf/nginx.conf +location /<접근제한 디렉터리>/ { +auth_basic "Restricted Content"; +auth_basic_user_file /etc/nginx/.htpasswd; +} +l IIS 6.0 이하 +Step 1) 부모 경로 사용 설정 +시작 > Windows 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 웹 사이트 > IIS > ASP > “부모 경로 +사용” 항목 “False” 설정 +[ 부모 경로 설정 확인 ] +l IIS 7.0 이상 +Step 1) 제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 해당 웹사이트 > 사이트 편집에서 루트 +디렉터리 > 루트 디렉터리의 web.config 파일에서 “enableParentPaths” 요소를 “False”로 설정 + + + + +![이미지 288-0](images/p0288_img0.png) + + +![이미지 288-1](images/p0288_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +289 + + + +※ web.config 파일이 없으면 사이트 홈 디렉터리에 새로 생성 +l WebtoB +Step 1) http.m 파일 내 활성화되어 있는 UpperDirRestrict 옵션 제거 또는 비활성화 +# vi //config/http.m +UpperDirRestrict = N +Step 2) 확인 후 설정 파일 컴파일 및 재구동 +# wscfl -I http.m +# wsdown +# wsboot + + +![이미지 289-0](images/p0289_img0.png) + + +--- + +| 한국인터넷진흥원 | +290 +WEB-07 +(중) +웹 서비스 > 2. 서비스 관리 +웹 서비스 경로 내 불필요한 파일 제거 +개요 +점검 내용 +웹 서비스 설치 시 기본으로 생성되는 불필요한 파일 및 디렉터리 제거 여부 점검 +점검 목적 +웹 서비스 설치 시 기본으로 생성되는 샘플, 매뉴얼 파일 등 서비스에 불필요한 파일을 제거하여 +불필요한 공격 대상으로 이용되는 것을 방지하기 위함 +보안 위협 +웹 서비스 설치 시 기본으로 생성되는 파일 및 디렉터리나 백업, 테스트 파일 등을 제거하지 않은 경우, +비인가자에게 시스템 관련 정보 및 웹 서버 정보가 노출되거나 해킹에 악용될 수 있음 +참고 +※ 불필요한 파일: 샘플 파일, 매뉴얼 파일, 임시 파일, 테스트 파일, 백업 파일 등 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 기본으로 생성되는 불필요한 파일 및 디렉터리가 존재하지 않을 경우 +취약 : 기본으로 생성되는 불필요한 파일 및 디렉터리가 존재하는 경우 +조치 방법 +불필요한 파일 및 디렉터리를 제거하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) rm 명령어로 확인된 불필요한 매뉴얼 디렉터리 및 파일 제거 +# rm –rf //htdocs/manual +# rm –rf //manual +※ 2.4 버전 이상은 htdocs 디렉터리가 기본 제공되지 않으므로 /var/www/html 사용 +l Tomcat +Step 1) rm 명령어로 확인된 불필요한 매뉴얼 디렉터리 및 파일 제거 +# rm –rf //webapps/docs/<불필요 파일> +※ BUILDING.txt, RELEASE-NOTES.txt, jndi-resources-howto.html 등 매뉴얼 파일 포함 + + +![이미지 290-0](images/p0290_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +291 +l Nginx +Step 1) rm 명령어로 확인된 불필요한 매뉴얼 디렉터리 및 파일 제거 +# rm –rf //html/index.html +l IIS +Step 1) 샘플 디렉터리 존재여부 확인 및 제거 +샘플 디렉터리 경로 예시 +c:\inetpub\iissamples +c:\winnt\help\iishelp +c:\program files\common files\system\msadc\sample +%SystemRoot%\System32\Inetsrv\IISADMPWD +l JEUS +Step 1) rm 명령어로 확인된 불필요한 매뉴얼 디렉터리 및 파일 제거 +# rm –rf //docs/manuals/default/web-manager/<불필요 파일> +# rm –rf //samples/ <불필요 파일> +l WebtoB +Step 1) rm 명령어로 확인된 불필요한 매뉴얼 디렉터리 및 파일 제거 +# rm –rf //docs/manuals/<불필요 파일> +# rm –rf //samples/ <불필요 파일> + + +![이미지 291-0](images/p0291_img0.png) + + +--- + +| 한국인터넷진흥원 | +292 +WEB-08 +(하) +웹 서비스 > 2. 서비스 관리 +웹 서비스 파일 업로드 및 다운로드 용량 제한 +개요 +점검 내용 +파일 업로드 및 다운로드의 용량 제한 설정 여부 점검 +점검 목적 +기반시설 시스템은 원칙적으로 파일 업로드 및 다운로드를 금지하지만 불가피하게 파일의 업로드 및 +다운로드 기능이 필요한 경우, 파일의 용량 제한을 설정하여 불필요한 업로드 및 다운로드를 방지해 +서버의 과부하를 예방하고, 웹 서버 자원을 효율적으로 관리하기 위함 +보안 위협 +웹 서비스의 파일 업로드 및 다운로드의 용량을 제한하지 않은 경우, 악의적인 목적을 가진 사용자가 +반복 업로드 및 웹 쉘 공격 등으로 시스템 권한을 탈취하거나 대용량 파일의 업로드 및 다운로드로 서버 +자원을 고갈시켜 서비스 장애를 발생시킬 위험이 존재함 +참고 +※ 불필요한 업로드 및 다운로드: 내부 정책에 맞지 않는 업로드와 다운로드 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 파일 업로드 및 다운로드 용량을 제한한 경우 +취약 : 파일 업로드 및 다운로드 용량을 제한하지 않은 경우 +조치 방법 +파일 업로드 및 다운로드 용량을 허용 가능한 최소 범위로 제한하여 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) 설정 파일 내 LimitRequestBody 지시자에서 파일 용량 제한 설정 + +LimitRequestBody 5000000 + +l Tomcat +Step 1) server.xml 파일 내 maxPostSize 요소 설정 +#vi //conf/server.xml +” protocol=“HTTP/1.1” +connectionTimeout=“20000” +redirectPort=“<사용 포트>” + + +![이미지 292-0](images/p0292_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +293 +maxParameterCount=“1000” +maxPostSize=“5242880” +// maxPostSize=5242880=5MB +/> +Step 2) web.xml 파일 내 multipart-config 요소 설정 +# vi //conf/web.lxml + +2097152 +4194304 +0 + +l Nginx +Step 1) nginx.conf 파일 내 client_max_body_size 요소 파일 용량 제한 설정 +# vi //nginx.conf + +client_max_body_size 5M; (설정 단위: byte) + +Step 2) Nginx 데몬 재구동 +# systemctl restart nginx +l IIS +Step 1) 루트 디렉터리 web.config 파일 설정 파일 내 “maxAllowedContentLength” 설정 확인 +[ 최대 컨텐츠 파일 용량 제한 설정 확인 ] +Step 2) 루트 디렉터리 web.config 파일 설정 파일 내 “maxAllowedContentLength” 제한 설정 (기본값: 30MB) + + +![이미지 293-0](images/p0293_img0.png) + + +![이미지 293-1](images/p0293_img1.png) + + +--- + +| 한국인터넷진흥원 | +294 +Step 3) applicationHost.config 파일 내 “bufferingLimit” 및 “maxRequestEntity Allowed” 설정 +(기본값: bufferingLimit - 4MB, maxRequestEntityAllowed – 0.2MB) +[ 파일 다운로드 및 파일 업로드 용량 설정 ] +※ web.config 파일이 없으면 사이트 홈 디렉터리에 새로 생성 +l JEUS +Step 1) web.xml 파일 내 max-file-size 지시자에서 파일 용량 제한 설정 +#vi /[JEUS 설치 디렉터리]/WEB-INF/web.xml + +5242880 + +※ 출력값이 존재하지 않는 경우 용량을 제한하고 있지 않은 상태로 취약 +l WebtoB +Step 1) LimitRequestBody 지시자를 사용하여 파일 업로드 및 다운로드 용량 제한 설정 +# vi /[WebtoB 설치 디렉터리]/conf/http.m +*NODE +imuser WEBTOBDIR="/home/tmax/webtob/", +SHMKEY = 54000, +DOCROOT="/home/tmax/webtob/docs", +*ALIAS +alias1 URI = "/cgi-bin/", RealPath = "/home/webtob/webtob/cgi-bin/" +LimitRequestBody = 2048000 +※ 업로드 및 다운로드 파일이 5MB를 넘지 않도록 설정 권고 + + +![이미지 294-0](images/p0294_img0.png) + + +![이미지 294-1](images/p0294_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +295 +WEB-09 +(상) +웹 서비스 > 2. 서비스 관리 +웹 서비스 프로세스 권한 제한 +개요 +점검 내용 +웹 서비스 프로세스의 관리자 권한 구동 여부 점검 +점검 목적 +웹 프로세스가 웹 서비스 운영에 필요한 최소한의 권한만을 갖도록 제한함으로써 웹 사이트 방문자가 웹 +서비스의 취약점을 이용해 시스템에 대한 어떤 권한도 획득할 수 없도록 하여 침해사고 발생 시 피해 +범위 확산을 방지하기 위함 +보안 위협 +웹 프로세스 권한을 제한하지 않은 경우, 웹 사이트 방문자가 웹 서비스의 취약점을 이용하여 시스템 +권한을 획득할 수 있으며, 웹 취약점을 통해 접속 권한을 획득한 경우에는 관리자 권한을 획득하여 +서버에 접속 후 정보의 변경, 훼손 및 유출될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 웹 프로세스(웹 서비스)가 관리자 권한이 부여된 계정이 아닌 운영에 필요한 최소한의 권한을 가진 +별도의 계정으로 구동되고 있는 경우 +취약 : 웹 프로세스(웹 서비스)가 관리자 권한이 부여된 계정으로 구동되고 있는 경우 +조치 방법 +웹 서비스 프로세스 구동 시 관리자 권한이 아닌 운영에 필요한 최소한의 권한을 가진 계정으로 구동 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) envvars 파일 내 실행 계정을 관리자 계정이 아닌 별도의 계정으로 변경 +# vi /[Apache 설치 디렉터리]/envvars +export APACHE_RUN_USER=www-data +export APACHE_RUN_GROUP=www-data +Step 2) Apache 서비스 파일 소유권 변경 +# chown -R www-data:www-data /etc/apache2/ +# chown -R www-data:www-data /var/www/ +# chown -R www-data:www-data /var/log/apache2/ +Step 3) 웹 서비스 실행 계정 로그인 제한 설정 +# usermod -s /sbin/nologin [사용자명] + + +![이미지 295-0](images/p0295_img0.png) + + +--- + +| 한국인터넷진흥원 | +296 +Step 4) Apache 재구동 +# systemctl restart apache2 또는 httpd +l Tomcat +Step 1) tomcat.service 파일 내 Tomcat 데몬 구동 권한을 관리자 계정이 아닌 별도 계정으로 변경 +# vi /etc/systemd/system/tomcat.service +[Service] +User=tomcat +Group=tomcat +Step 2) Tomcat 서비스 파일 소유권 변경 +# chown -R tomcat:tomcat /[Tomcat 설치 디렉터리]/usr/share/tomcat9/ +# chown -R tomcat:tomcat /[Tomcat 설치 디렉터리]/tomcat9/temp +# chown -R tomcat:tomcat / [Tomcat 설치 디렉터리]/logs +# chown -R tomcat:tomcat /usr/share/tomcat9/webapps +# chown -R tomcat:tomcat /usr/share/tomcat9/work +Step 3) 웹서비스 실행 계정 로그인 제한 설정 +# usermod -s /sbin/nologin [사용자명] +Step 4) Tomcat 서비스 재구동 +# systemctl restart tomcat +l Nginx +Step 1) nginx.conf 파일 내 Nginx 데몬 구동 권한을 관리자 계정이 아닌 별도 계정으로 변경 +# vi /[Nginx 설치 디렉터리]/conf/nginx.conf +User nginx nginx; +Step 2) Nginx 전용 계정 생성 및 Nginx 전용 그룹 추가 +# adduser --system --no-create-home --shell /bin/false nginx +# groupadd nginx && sudo usermod -aG nginx nginx +Step 3) 웹서비스 실행 계정 로그인 제한 설정 +# usermod –s /sbin/nologin [사용자명] +Step 4) Nginx 서비스 재구동 +# systemctl restart nginx + + +![이미지 296-0](images/p0296_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +297 +l IIS +Step 1) 웹 사이트 응용프로그램 풀 이름 확인 +제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 해당 웹 사이트 > 고급 설정 > ‘응용프로그램 풀 +이름(DefaultAppPool)’ 확인 +[ 응용프로그램 풀 이름 확인 ] +Step 2) 웹 사이트 응용프로그램 풀 ID 확인 +제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 응용프로그램 풀 > ‘응용프로그램 풀 +이름(DefaultAppPool)’ 선택 > 고급 설정 > ID > 확인 +[ 응용프로그램 풀 ID 확인 ] +Step 3) 웹사이트 응용프로그램 풀 ID 설정 +제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 응용프로그램 풀 > ‘용용 프로그램 풀 이름 +(DefaultAppPool)’ 선택 > 고급 설정 > ID > ApplicationPoolIdentity 선택 + + +![이미지 297-0](images/p0297_img0.png) + + +![이미지 297-1](images/p0297_img1.png) + + +![이미지 297-2](images/p0297_img2.png) + + +--- + +| 한국인터넷진흥원 | +298 +[ 응용프로그램 풀 ID 설정 ] +l JEUS +Step 1) JEUS 데몬 구동 권한 확인 +# ps–-ef |grep jeus +jeus 25305 4223 99 09:54 pts/5 00:03:31 /usr/lib/jvm/java-11-openjdk-amd64/bin/java-DadminServer... +Step 2) JEUS 데몬 구동 권한을 관리자 계정이 아닌 별도 계정으로 변경 +# useradd –m jeus +# mv /[JEUS 설치 디렉터리]/home/jeus +Step 3) [JEUS 설치 디렉터리] 소유자 및 그룹 소유자를 JEUS 계정으로 변경 +# chown –R jeus:jeus /home/jeus/ +l WebtoB +Step 1) 소유자 및 그룹 소유자 변경 +chown –R [WebtoB 전용 계정]:[WebtoB 전용 계정] /[WebtoB 디렉터리] +Step 2) http.m 파일 내 기존 경로 변경 +*NODE절의 WEBTOBDIR, DOCROOT을 변경한 디렉터리로 설정 +예시) *NODE +imuser WEBTOBDIR="/home/tmax/webtob/", +SHMKEY = 54000, +DOCROOT="/home/tmax/webtob/docs", +*ALIAS절의 alias1을 변경한 디렉터리로 설정 +예시) *ALIAS + + +![이미지 298-0](images/p0298_img0.png) + + +![이미지 298-1](images/p0298_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +299 +alias1 URI = "/cgi-bin/", RealPath = "/home/webtob/webtob/cgi-bin/" +*LOGGING절의 syslog, log1, log2을 변경한 디렉터리로 설정 +예시) *LOGGING +syslog Format = "SYSLOG", FileName = "/home/tmax/webtob/log/system.log> +Option = "sync" +log1 Format = "DEFAULT", FileName = "/home/tmax/webtob/log/access.lo> +Option = "sync" +log2 Format = "ERROR", FileName = "/home/tmax/webtob/log/error.log_%> +Option = "sync" +Step 3) 변경한 디렉터리명 환경변수에 추가 +# export WEBTOB=/[WebtoB 디렉터리] +# source ~/.bashrc +Step 4) libwbiconv.so 파일을 직접 /usr/lib로 복사 +# cp /webtob/lib/libwbiconv.so /usr/lib/ +Step 5) 라이브러리 캐시 업데이트 +# ldconfig +Step 6) 설정 파일 컴파일 +# wscfl –i http.m + + +![이미지 299-0](images/p0299_img0.png) + + +--- + +| 한국인터넷진흥원 | +300 +WEB-10 +(상) +웹 서비스 > 2. 서비스 관리 +불필요한 프록시 설정 제한 +개요 +점검 내용 +웹 서비스 불필요한 Proxy 설정제한 여부 점검 +점검 목적 +불필요한 Proxy 설정을 제한하여 자원 낭비 예방 및 관리의 복잡성을 감소시키며, 중간자 공격 등의 +해킹 공격으로부터 시스템 관련 정보가 노출되거나 악용되는 것을 방지하기 위함 +보안 위협 +불필요한 Proxy 설정을 제한하지 않는 경우 공격자가 Proxy 서버를 이용하여 원래 의도되지 않은 +방식으로 시스템에 접근하거나 시스템 관련 정보가 유출될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 불필요한 Proxy 설정을 제한한 경우 +취약 : 불필요한 Proxy 설정을 제한하지 않은 경우 +조치 방법 +불필요한 Proxy 설정 존재 여부 점검 및 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) apache2.conf (또는 /conf/httpd.conf) 파일 내 불필요한 Proxy 제거 + +ServerName www.example.com +ProxyPreserveHost On +ProxyRequests Off +ProxyPass / http://backend-server.example.com/ +ProxyPassReverse / http://backend-server.example.com/ + +l Tomcat +Step 1) server.xml 파일 내 Connector 요소에서 불필요한 Proxy 설정 제거 + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +301 +redirectPort="8443" +proxyName="proxy.example.com" +proxyPort="80" /> +l Nginx +Step 1) nginx.conf 파일 내 웹 사이트에서 불필요한 Proxy 설정 제거 +# cat /[Nginx 설치 디렉터리/nginx.conf +location / { +proxy_pass http://backendserver:8080; +proxy_set_header Host $host; +proxy_set_header X-Real-IP $remote_addr; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +} +l IIS +Step 1) 제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 해당 웹 사이트 > 루트 디렉터리에서 불필요한 +Proxy 설정 제거 +[ Proxy 설정 확인 및 제거 ] +l JEUS +Step 1) web.xml 파일 내 불필요한 Proxy 제거 +# vi /[WebtoB 설치 디렉터리]/ReverseProxy/WEB-INF/web.xml + + +![이미지 301-0](images/p0301_img0.png) + + +![이미지 301-1](images/p0301_img1.png) + + +--- + +| 한국인터넷진흥원 | +302 +l WebtoB +Step 1) http.m 파일 내 불필요 Proxy 설정 제거 +# vi /[WebtoB 디렉터리]/conf/http.m +REVERSE_PROXY(0): Name = rproxy1, +PathPrefix = "/proxypath/", +ServerAddress = "127.0.0.1:8088", + + +![이미지 302-0](images/p0302_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +303 +WEB-11 +(중) +웹 서비스 > 2. 서비스 관리 +웹 서비스 경로 설정 +개요 +점검 내용 +웹 서버에 설정한 DocumentRoot 경로가 기본 경로와 분리되었는지 여부 점검 +점검 목적 +웹 서비스 영역 내 불필요한 경로를 분리해 웹 서비스의 침해가 시스템 영역으로 확장될 가능성을 최소화하기 위함 +보안 위협 +웹 서비스 경로를 기타 업무와 영역이 분리되지 않은 경로로 설정하거나, 불필요한 경로가 존재할 경우 +외부에서 시스템 중요 파일이나 기능에 비인가 접근이 발생할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 웹 서버 경로를 기타 업무와 영역이 분리된 경로로 설정 및 불필요한 경로가 존재하지 않는 경우 +취약 : 웹 서버 경로를 기타 업무와 영역이 분리되지 않은 경로로 설정하거나 불필요한 경로가 있는 경우 +조치 방법 +웹 서버의 경로를 별도의 경로로 변경 및 불필요한 경로 제거 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) apache2.conf (또는 /conf/httpd.conf) 파일 내 DocumentRoot를 별도의 경로로 변경 +DocumentRoot [별도의 경로] +l Tomcat +Step 1) web.xml 파일 내 docBase를 별도의 경로로 변경 + + + + + +![이미지 303-0](images/p0303_img0.png) + + +--- + +| 한국인터넷진흥원 | +304 +l Nginx +Step 1) sites-available 파일 내 DocumentRoot를 별도의 경로로 변경 +# vi /[Nginx 설치 디렉터리]/sites-available +root [별도의 경로] +l IIS +Step 1) 기본 디렉터리 확인 +시작 > Windows 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 해당 웹 사이트 > 사이트 편집 > 기본 +설정 > “실제 경로”를 별도의 경로로 변경 +[ 루트 디렉터리 경로 확인 ] +l JEUS +Step 1) ws_engine.m 파일 내 Docroot을 별도의 경로로 변경 +Docroot = “[별도의 경로]” +l WebtoB +Step 1) http.m 파일 내 DOCROOT를 별도의 경로로 변경 +DOCROOT="[별도의 경로]", + + +![이미지 304-0](images/p0304_img0.png) + + +![이미지 304-1](images/p0304_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +305 +WEB-12 +(중) +웹 서비스 > 2. 서비스 관리 +웹 서비스 링크 사용 금지 +개요 +점검 내용 +웹 서비스 링크(심볼릭 링크, aliases 등) 사용 제한 여부 점검 +점검 목적 +무분별한 심볼릭 링크, 별칭(aliases) 등을 제거하여 허용하지 않은 경로에서의 접근을 차단해 경로 +검증을 우회한 시스템 파일 접근을 방지하기 위함 +보안 위협 +Ÿ 보안상 민감한 내용이 포함되어 있는 파일이 악의적인 사용자에게 노출될 경우 침해사고로 이어질 +위험이 존재함 +Ÿ 접근을 허용한 웹 디렉터리 내에 서버의 다른 디렉터리나 파일들에 접근할 수 있는 심볼릭 링크, +aliases, 바로가기 등이 존재하는 경우 해당 링크를 통해 허용하지 않은 다른 디렉터리에 액세스할 수 +있는 위험이 존재함 +참고 +※ 심볼릭 링크(Symbolic link, 소프트 링크): 사용자가 심볼릭 링크 파일을 요청하면, 시스템이 해당 +링크에 저장된 대상 경로를 따라가서 실제 원본 데이터를 가져와 전달 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 심볼릭 링크, aliases, 바로가기 등의 링크 사용을 허용하지 않는 경우 +취약 : 심볼릭 링크, aliases, 바로가기 등의 링크 사용을 허용하는 경우 +조치 방법 +웹 서비스 링크 사용 제한 설정 +조치 시 영향 +심볼릭 링크를 이용하여 웹페이지가 구성된 경우 해당 서비스가 실행되지 않을 수 있음 +점검 및 조치 사례 +l Apache +Step 1) apache.conf(또는 /conf/httpd.conf) 파일 내 Options 지시자 FollowSymLinks 옵션 제거 + +Options –FollowSymLinks +#Options Indexes FollowSymLinks + + + +![이미지 305-0](images/p0305_img0.png) + + +--- + +| 한국인터넷진흥원 | +306 +l Tomcat +Step 1) server.xml 파일 내 Context 요소 allowLinking 옵션 설정 + +WEB-INF/web.xml +WEB-INF/tomcat-web.xml +${catalina.base}/conf/web.xml + +l Nginx +Step 1) nginx.conf 파일 내 설정된 모든 디렉터리의 disable_symlinks on 설정(기본값 : 설정값 없음) +location / { +root html; +index index.html index.htm; +disable_symlinks on; +} +l IIS +Step 1) 홈 디렉터리 바로가기 파일 확인 +제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 해당 웹사이트 > 기본 설정 > ‘실제 경로’로 +설정된 경로로 이동 > 바로가기 파일 확인 후 제거 +[ 홈 디렉터리 위치 확인 ] + + +![이미지 306-0](images/p0306_img0.png) + + +![이미지 306-1](images/p0306_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +307 +l JEUS +Step 1) jeus-web-dd.xml 파일 내 alias 요소 설정 제거 + + +/images/ +/home/web/images/ + + +l WebtoB +Step 1) http.m 파일 내 ALIAS 절 요소 설정 제거 +# cat /[WebtoB 설치 디렉터리]/config/http.m | grep -C 2 ALIAS +*ALIAS +alias1 +URI = "/cgi-bin/", RealPath = "/home/tmax/webtob/cgi-bin/" + + +![이미지 307-0](images/p0307_img0.png) + + +--- + +| 한국인터넷진흥원 | +308 +WEB-13 +(상) +웹 서비스 > 2. 서비스 관리 +웹 서비스 설정 파일 노출 제한 +개요 +점검 내용 +DB 연결 파일에 대한 접근 권한, 스크립트 매핑 등 웹 서비스에서의 DB 연결 취약점 존재 여부 점검 +점검 목적 +웹 서비스에서 DB 연결 파일에 대한 접근 권한 제한 및 불필요한 스크립트 매핑을 제거하여, DB 연결 +정보(사용자 이름, 비밀번호 등)가 외부에 노출되거나 공격자의 DB 접근 및 관리자 권한 획득 등의 +다양한 공격을 방지하기 위함 +보안 위협 +웹 서비스에서 DB 연결 파일에 대한 접근 권한 제한 및 불필요한 스크립트 매핑을 제거하지 않을 경우, +DB 연결 파일에 존재하는 데이터베이스 관련 정보(IP주소, DB명, 비밀번호), 서버 내부 IP주소, 웹 +서비스 환경설정 정보 등 보안상 민감한 내용이 악의적인 사용자에게 노출될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Tomcat, IIS, JEUS +판단 기준 +양호 : 일반 사용자의 DB 연결 파일에 대한 접근을 제한하고, 불필요한 스크립트 매핑이 제거된 경우 +취약 : 일반 사용자의 DB 연결 파일에 대한 접근을 제한하지 않거나, 불필요한 스크립트 매핑이 제거되지 +않은 경우 +조치 방법 +DB 연결 파일에 대한 접근 권한 제한 또는 불필요한 스크립트 매핑 제거 등을 통한 웹 서비스 내 DB +연결 취약점 제거 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Tomcat +Step 1) server.xml 파일 내 불필요한 DB 연결 리소스 설정 제거 + + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +309 +password=“dbpassword” +driverClassName=“com.mysql.jdbc.Driver” +url=“jdbc:mysql://localhost:3306/mydb”/> + +Step 2) DB 연결 리소스가 존재하는 설정 파일 접근권한을 600으로 설정 +# chmod 600 /[Tomcat 설치 디렉터리]/conf/server.xml +l IIS +Step 1) 처리기 매핑에서 불필요한 DB 매핑 설정 제거 +제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 해당 웹사이트 > IIS > 처리기 매핑 선택, 사용 +항목에 *.asa/*.asax 항목 제거 +[ asa/asax 스크립트 매핑 확인 ] +Step 2) 요청 필터링에서 DB 매핑 설정제한 +“허용됨” 값이 true인 매핑 제거 및 “파일 이름 확장명 거부”에 등록 +[ asa/asax 파일 필터링 확인 ] +※ asa/asax 스크립트 매핑 또는 파일 필터링 중 하나라도 설정 시 취약 + + +![이미지 309-0](images/p0309_img0.png) + + +![이미지 309-1](images/p0309_img1.png) + + +![이미지 309-2](images/p0309_img2.png) + + +--- + +| 한국인터넷진흥원 | +310 +l JEUS +Step 1) 설정 파일 내 불필요 DB 연결 리소스 설정 제거 +#vi /[JEUS 설치 디렉터리]/conf/domain.xml + +jdbc/UnnecessaryDB +com.example.Driver +jdbc:example://localhost:1234/unnecessarydb +user +password +10 + +Step 2) 설정 파일의 접근권한을 600으로 설정 +# chmod 600 /[JEUS 설치 디렉터리]/conf/domain.xml +※ domain.xml 뿐 아니라 개별 웹 서비스의 설정 파일인 jeus-web-dd.xml에서도 삭제 필요 + + +![이미지 310-0](images/p0310_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +311 +WEB-14 +(상) +웹 서비스 > 2. 서비스 관리 +웹 서비스 경로 내 파일의 접근 통제 +개요 +점검 내용 +웹 서비스 경로의 파일들에 대해 관리자를 제외한 일반 사용자의 파일 접근 권한 제거 여부 점검 +점검 목적 +웹 서비스 경로의 파일들에 관리자를 제외한 일반 사용자의 파일 접근 권한을 제거함으로써 인가되지 +않은 사용자가 허용되지 않는 파일에 접근하는 것을 차단하기 위함 +보안 위협 +웹 서비스 경로 파일에 비인가자가 접근 가능한 경우, 해당 파일의 수정 및 삭제로 인해 웹 서비스 운영 +장애 및 계정 비밀번호 정보 등의 중요한 정보가 노출될 위험이 존재함 +참고 +※ 웹 서비스 경로 내 파일/디렉터리에 접근 권한을 허용할 때는 필요한 때에만 설정하고, 필요한 특정 +위치의 특정 사용자에게만 허용하도록 조치 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 주요 설정 파일 및 디렉터리에 불필요한 접근 권한이 부여되지 않은 경우 +취약 : 주요 설정 파일 및 디렉터리에 불필요한 접근 권한이 부여된 경우 +조치 방법 +주요 설정 파일 및 디렉터리에 불필요한 접근 권한 제거 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) 루트 디렉터리 내 불필요한 권한 삭제 또는 적절한 권한 부여 +# chown –R ]: apache2.conf (또는 httpd.conf) +# chmod -R 750 apache2.conf (또는 httpd.conf) +l Tomcat +Step 1) 루트 디렉터리 불필요한 권한 삭제 또는 적절한 권한 부여 +# chown –R [Tomcat 계정]:[Tomcat 그룹] web.xml +# chmod -R 750 web.xml + + +![이미지 311-0](images/p0311_img0.png) + + +--- + +| 한국인터넷진흥원 | +312 +l Nginx +Step 1) 루트 디렉터리 불필요한 권한 삭제 또는 적절한 권한 부여 +# chown –R : web.xml +# chmod -R 750 web.xml +l IIS +Step 1) 실제 경로 디렉터리 내 불필요한 권한 삭제 또는 적절한 권한 부여 +web.config > 속성 > 보안 > 편집 > “그룹 또는 사용자 이름”의 불필요 권한 제거 +[ 설정 파일 권한 확인 ] +l JEUS +Step 1) 루트 디렉터리 불필요한 권한 삭제 또는 적절한 권한 부여 +# chown –R : accounts.xml +# chmod -R 750 accounts.xml +l WebtoB +Step 1) 루트 디렉터리 불필요한 권한 삭제 또는 적절한 권한 부여 +# chown –R : http.m +# chmod -R 750 http.m + + +![이미지 312-0](images/p0312_img0.png) + + +![이미지 312-1](images/p0312_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +313 +WEB-15 +(상) +웹 서비스 > 2. 서비스 관리 +웹 서비스의 불필요한 스크립트 매핑 제거 +개요 +점검 내용 +웹 서비스 내 불필요 스크립트 매핑 제거 여부 점검 +점검 목적 +웹 서비스에서 사용하지 않는 불필요 스크립트 매핑이 존재하는지 점검하여 잠재적 보안 위협을 방지하기 위함 +보안 위협 +웹 서비스에서 불필요한 스크립트 매핑을 제거하지 않은 경우, 버퍼 오버플로우(Buffer Overflow), 서비스 +거부 공격(Denial of Service), 크로스 사이트 스크립팅(Cross Site Scripting) 등의 공격 위험이 존재함 +참고 +※ .asp나 .shtm과 같은 확장자들은 특정 DLL 파일과 매핑되어 있어, 이러한 파일들에 대한 요청이 +들어오면 해당 DLL에 의해 처리됨 +※ 스크립트 매핑: 웹 서버에서 특정 파일 확장자나 URL 경로를 특정 스크립트 처리프로그램에 +연결하는 설정 +점검 대상 및 판단 기준 +대상 +Tomcat, IIS, JEUS +판단 기준 +양호 : 불필요한 스크립트 매핑이 존재하지 않는 경우 +취약 : 불필요한 스크립트 매핑이 존재하는 경우 +조치 방법 +불필요한 스크립트 매핑 존재 여부 점검 및 제거 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Tomcat +Step 1) 설정 파일의 불필요 스크립트 매핑 제거 + +UnuseServlet +/example/* + +※ context.xml 파일 내 명시된 설정 파일에서도 DB 연결 확인 필요 + + +![이미지 313-0](images/p0313_img0.png) + + +--- + +| 한국인터넷진흥원 | +314 +l IIS +Step 1) 취약한 매핑 설정 확인(.htr, .idc, .stm, .shtm, .shtml, .printer, .htw, .ida, .idq) +시작 > 실행 > INETMGR > 웹사이트 > 해당 웹사이트 > ‘처리기 매핑’ 선택 후 미사용 확장자 매핑 설정 제거 +[ 웹사이트의 처리기 매핑 ] +확장자명 +기능 +취약점 +asp +Active Server Pages 기능 지원 +Buffer Overflow MS02-018 +• Win 2000 SP3 이상 양호 +htr +Web-based password reset: Outlook Web Access +등에서 웹 기반 응용, 프로그램으로 자신의 사용자 계정 암호 변경 +.htr 소스 공개 취약점 MS01-004 +• Win 2000 SP3, NT SP 7.0 이상 양호 +idc +Internet Database Connector: SQL 서버에 연결하기 위한 +정보 등을 관리하며, asp를 통해 같은 작업을 수행 가능 +Web 디렉터리 패스 공개 Q193689 +• NT4.0, NT SP6a이상 양호 +stm, stml, +shtml +Server-Side Includes +Buffer Overflow MS01-044 +• Win 2000 SP3 이상 양호 +printer +Internet Printing: URL을 사용하여 페이지를 프린터로 +인쇄할 수 있도록 함 +IIS가 인터넷이나 인트라넷을 통해 인쇄 서버 기능 수행 +Buffer Overflow MS01-023 +• Win 2000 SP2 이상 양호 +ida, idq +Index Server: idq.dll에 매핑되며 인덱스 서버 쿼리 시 사용 +Buffer Overflow MS01-033 +• Win 2000 SP3 이상 양호 +htw +Index Server: webhits.dll에 매핑되며, 인덱스 서버 쿼리 시 +사용 +Webhit 소스 공개 취약점 MS00-006 +• Win 2000 SP1 이상 양호 + + +![이미지 314-0](images/p0314_img0.png) + + +![이미지 314-1](images/p0314_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +315 +l JEUS +Step 1) web.xml 파일 내 요소에서 불필요 매핑 확인 + +/welcome +jsp + + + +![이미지 315-0](images/p0315_img0.png) + + +--- + +| 한국인터넷진흥원 | +316 +WEB-16 +(중) +웹 서비스 > 2. 서비스 관리 +웹 서비스 헤더 정보 노출 제한 +개요 +점검 내용 +웹페이지 응답 헤더에서 버전 정보, 사용 중인 OS 등의 서버 정보 노출 여부 점검 +점검 목적 +HTTP 응답 헤더에서 웹 서버 버전 및 종류, OS 정보 등 웹 서버와 관련된 정보가 불필요하게 노출되는 +것을 최소화하기 위함 +보안 위협 +웹 서버 및 OS 정보가 노출될 경우 공격자에 의해 해당 버전의 알려진 취약점을 이용하여 시스템 구조와 +특성 노출 및 해당 취약점을 통한 공격의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, Webtob +판단 기준 +양호 : HTTP 응답 헤더에서 웹 서버 정보가 노출되지 않는 경우 +취약 : HTTP 응답 헤더에서 웹 서버 정보가 노출되는 경우 +조치 방법 +응답 헤더에 표시되는 정보를 최소한으로 제한하여 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) httpd.conf (또는 apache2.conf) 파일 내 모든 디렉터리에 ServerTokens, ServerSignature 옵션 설정 + +ServerTokens Prod +ServerSignature Off + +※ ServerTokens 지시자 옵션 +ServerTokens 지시자 옵션 +키워드 +제공하는 정보 +예문 +Prod +웹 서버 종류 +Apache +Min +웹 서버 버전 +Apache/2.2.3 +OS +웹 서버의 버전 + 운영체제 +Apache/2.2.3 (CentOS) 기본값 +Full +웹 서버의 모든 정보 +Apache/2.2.3 (CentOS) DAV/2 +PHP/5.16 + + +![이미지 316-0](images/p0316_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +317 +l Tomcat +Step 1) server.xml 파일 내 server 값을 임의 정보로 변경 + +... 중략 ... + +l Nginx +Step 2) nginx.conf 파일 내 server_tokens 값을 “off”로 설정 +server_tokens off; +l IIS +Step 1) 오류 페이지 설정 편집 +제어판 > 관리 도구 > IIS(인터넷 정보 서비스) 관리자 > 해당 웹 사이트 > [오류 페이지] > [작업] 탭에서 +[기능 설정 편집] > “서버 오류 발생 시 다음 반환” 항목을 “사용자 지정 오류 페이지”로 설정 +[ 오류 페이지 설정 편집 ] + + +![이미지 317-0](images/p0317_img0.png) + + +![이미지 317-1](images/p0317_img1.png) + + +--- + +| 한국인터넷진흥원 | +318 +l JEUS +[jeus 7 이전 버전] +Step 1) JEUSMain.xml 파일 내 아래 내용 추가 + + +... 중략 ... + +... 중략 ... +-Djeus.servlet.response.header.serverInfo=false + +... 중략 ... + + +[jeus 7] +Step 2) domain.xml 파일 내 아래 내용 추가 + + + +P3P +CP='CAO PSA CONi OTR OUR DEM ONL' + + + +l WebtoB +Step 1) Server 설정 파일 내부 지시자 확인(기본값: off) +# cat /[WebtoB 설치 디렉터리]/config/http.m | grep –i “ServerTokens” +Step 2) 설정 파일 내부 지시자 옵션 설정 +# vi /[WebtoB 설치 디렉터리]/config/http.m +ServerTokens ProductOnly(Prod) +ServerSignature off +// Off : Response Header에 server 필드를 사용하지 않음 +Step 3) ServerTokens 옵션별 반환 정보 + + +![이미지 318-0](images/p0318_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +319 +구분 +반환되는 헤더 정보 +Prod[uctOnly] +WebtoB +Min[imal] +WebtoB/4.1.3 +OS +WebtoB/4.1.3 LINUX-K2.6_x86 libc2.3 +Full +WebtoB/4.1.3 LINUX-K2.6_x86 libc2.3 +Custom +user-specified-name + + +![이미지 319-0](images/p0319_img0.png) + + +--- + +| 한국인터넷진흥원 | +320 +WEB-17 +(중) +웹 서비스 > 2. 서비스 관리 +웹 서비스 가상 디렉로리 삭제 +개요 +점검 내용 +불필요한 가상 디렉터리 삭제 여부 점검 +점검 목적 +불필요한 가상 디렉터리를 삭제하여 공격이 가능한 영역을 최소화하고 정보 노출 방지 및 권한 상승 공격 +등의 위험을 제거하기 위함 +보안 위협 +불필요한 가상 디렉터리를 삭제하지 않은 경우, 취약한 가상 디렉터리를 통해 시스템 권한 탈취 및 +시스템 구조 등의 중요 정보가 노출될 위험이 존재함 +참고 +※ 가상 디렉터리: 물리적으로 홈 디렉터리와 다른 위치에 있거나 홈 디렉터리에 종속된 디렉터리가 +아니어도 웹 브라우저를 통해 사용자가 접속할 때 웹사이트의 하위 디렉터리로 인식되도록 하는 기법 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, WebtoB +판단 기준 +양호 : 불필요한 가상 디렉터리가 존재하지 않는 경우 +취약 : 불필요한 가상 디렉터리가 존재하는 경우 +조치 방법 +불필요한 가상 디렉터리 존재 여부 점검 및 삭제하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) Alias 지시자 확인 +# vi /[Apache 설치 디렉터리]/conf/httpd.conf(또는 apache2.conf) +Alias /virtual /var/www/virtual + +Options Indexes FollowSymLinks +AllowOverride None +Require all granted + +Step 2) 불필요한 가상 디렉터리 삭제 + + +![이미지 320-0](images/p0320_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +321 +l Tomcat +Step 1) ‘Context’ 블록 요소의 ‘path’ 속성값 확인 +#vi /[Tomcat 설치 디렉터리]/server.xml + + + +Step 2) Context 블록 요소 가상 디렉터리 제거 +l Nginx +Step 1) Alias 지시자 확인 +# vi /[Nginx Dir]/nginx –v +location /virtual { +alias /var/www/virtual; +index index.html index.htm; +} +Step 2) 설정된 모든 디렉터리의 불필요한 Alias 지시자 제거 +Step 3) Nginx 재구동 +# systemctl restart nginx +l WebtoB +Step 1) NODE절의 Alias 설정 확인 +# vi /[WebtoB 설치 디렉터리]/config/http.m +*ALIAS +alias1 URI = “/cgi-bin/”, RealPath = “/home/tmax/webtob/cgi-bin/” +Step 2) NODE절의 불필요한 Alias 설정 삭제 + + +![이미지 321-0](images/p0321_img0.png) + + +--- + +| 한국인터넷진흥원 | +322 +WEB-18 +(상) +웹 서비스 > 2. 서비스 관리 +웹 서비스 WebDAV 비활성화 +개요 +점검 내용 +웹 서비스 WebDAV 비활성화 여부 점검 +점검 목적 +WebDAV 서비스를 비활성화하여, WebDAV에서 발견되는 다수의 인증 우회 취약점을 제거하고자 함 +보안 위협 +WebDAV가 활성화되어 있는 경우 웹 서비스에 악의적으로 작성된 요청을 이용하여 인증을 +우회함으로써 비밀번호로 보호된 WebDAV의 자원에 접근 (디렉터리 열람, 파일 다운로드 등)이 +가능하며, WebDAV에 의해 호출된 일부 구성요소에 매개 변수를 정확하게 점검하지 않는 결함이 +존재하여, 이로 인해 버퍼 오버런이 발생할 위험이 존재함 +참고 +※ WebDAV(Web Distributed Authoring and Versioning): 사용자가 원격 World Wide Web +서버를 이용하여 파일을 수정하거나 처리할 수 있도록 하는 HTTP의 확장 서비스. 웹상의 +공동개발을 지원하기 위한 IETF 표준안(RFC 2518)으로써, 원격지 사용자 간에 인터넷상에서 +파일을 공동 편집하고 관리할 수 있도록 함 +점검 대상 및 판단 기준 +대상 +Apache, Nginx, IIS, WebtoB +판단 기준 +양호 : WebDAV 서비스를 비활성화하고 있는 경우 +취약 : WebDAV 서비스를 활성화하고 있는 경우 +조치 방법 +WebDAV 서비스 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) httpd.conf 파일 내 모든 디렉터리에서 WebDAV 설정 확인 +# cat /[Apache_Dir]/conf/httpd.conf(또는 apache2.conf) +Dav On +Step 2) 모든 디렉터리에서 WebDAV 설정 비활성화 또는 주석 처리 +# vi /[Apache_Dir]/conf/httpd.conf(또는 apache2.conf) + +Dav Off + +Step 3) Apache 재구동 +# systemctl restart apache2 + + +![이미지 322-0](images/p0322_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +323 +l Nginx +Step 1) nginx.conf 파일 내 모든 디렉터리에서 WebDAV 설정 확인 +# cat /[Nginx 설치 디렉터리]/conf/nginx.conf +location /webdav { +root /path/to/webdav; +dav_methods PUT DELETE MKCOL COPY MOVE; +dav_access user:rw group:rw all:r; +create_full_put_path on; +} +Step 2) nginx.conf 파일 내 모든 디렉터리에서 WebDAV 설정 주석 처리 또는 제거 +Step 3) Nginx 재구동 +# systemctl restart nginx +l IIS +Step 1) WebDAV 금지 설정 확인 +제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 서버 선택 > IIS > ‘ISAPI 및 CGI 제한’ 선택, +WebDAV 항목 선택 > ‘확장 경로 실행 허용(A)’ 체크 확인 +[ WebDAV 제한 설정 ] + + +![이미지 323-0](images/p0323_img0.png) + + +![이미지 323-1](images/p0323_img1.png) + + +--- + +| 한국인터넷진흥원 | +324 +Step 2) WebDAV 금지 설정 확인 +제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 서버 선택 > IIS > ‘ISAPI 및 CGI 제한’ 선택, +WebDAV 항목 선택 > [작업]에서 제거하거나, 편집 > ‘확장 경로 실행 허용(A)’ 체크 해제 +[ WebDAV 제한 설정 ] +l WebtoB +Step 1) Server 설정 파일 내 NODE절 vhost 메소드 설정 확인 +# vi /[WebtoB 설치 디렉터리]/config/http.m +*VHOST +vhost1 . +Method = “GET, POST, HEAD, OPTIONS, PROPFIND, PUT, DELETE, MKCOL, COPY, MOVE” +Step 2) NODE절 WebDAV 설정 삭제 + + +![이미지 324-0](images/p0324_img0.png) + + +![이미지 324-1](images/p0324_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +325 +WEB-19 +(중) +웹 서비스 > 3. 보안 설정 +웹 서비스 SSI(Server Side Includes) 사용 제한 +개요 +점검 내용 +웹 서비스 SSI 사용 제한 설정 여부 점검 +점검 목적 +웹 서비스 내 SSI 사용을 제한하여 불법적인 데이터 접근을 차단하여 웹 서버의 보안을 강화하기 위함 +보안 위협 +Ÿ 웹 서비스 내 SSI 사용을 제한하지 않을 경우, 공격자가 SSI 기능을 이용하여 시스템 명령 실행 및 중요 +파일 탈취 등 공격이 가능하며, 이를 통해 서버 시스템 침해, 데이터 유출 등이 발생할 위험이 존재함 +Ÿ SSI 공격 시 HTML 페이지에 스크립트를 삽입하거나 원격으로 코드를 실행하여 웹 서비스를 악용할 +위험이 존재함 +참고 +※ SSI(Server-Side Includes): CGI 프로그램을 작성하거나 혹은 서버 사이드 스크립트를 사용하는 +언어로, 웹 서버가 사용자에게 페이지를 제공하기 전에 구문을 해석하도록 지시하는 역할을 함 +※ SSI(Server-Side Includes) Injection: HTML 문서 내 입력받은 변수값을 서버 측에서 처리할 때 +부적절한 명령문이 포함 및 실행되어 서버의 데이터가 유출되는 취약점 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, WebtoB +판단 기준 +양호 : 웹 서비스 SSI 사용 설정이 비활성화되어 있는 경우 +취약 : 웹 서비스 SSI 사용 설정이 활성화되어 있는 경우 +조치 방법 +웹 서비스 내 불필요한 SSI 사용 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) Options 지시자 Includes 옵션 확인 +# vi /[Apache 설치 디렉터리]/conf/httpd.conf(또는 /conf/apache.conf) + +Options Includes + +Step 2) Options 지시자 Includes 옵션 제거 +# vi /[Apache 설치 디렉터리]/conf/httpd.conf(또는 /conf/apache.conf) + +Options + + + +![이미지 325-0](images/p0325_img0.png) + + +--- + +| 한국인터넷진흥원 | +326 +l Tomcat +Step 1) web.xml 파일 내 SSI 서블릿 또는 필터 사용 설정 확인 +#cat /[Tomcat 설치 디렉터리]/tomcat-users.xml | grep ‘SSIServlet\|SSIFilter’ + +SSIServlet +*.shtml + +또는 + +SSIFilter +*.shtml + +Step 2) web.xml 파일 내 SSI 서블릿 및 필터 설정 삭제 또는 주석 처리 +Step 3) web.xml 파일 내에서 SSI와 관련한 불필요 mapping 제거 또는 주석 처리 +Step 4) Tomcat 서비스 재구동 +# systemctl restart tomcat +l Nginx +Step 1) nginx.conf 파일 내 SSI 옵션 사용 여부 확인 +# cat /[Nginx 설치 디렉터리]/conf/nginx.conf +location / { +ssi on; +} +Step 2) nginx.conf 파일 내 모든 디렉터리의 SSI 옵션 설정 +# vi /[Nginx 설치 디렉터리]/conf/nginx.conf +location / { +ssi off; +} +l IIS +Step 1) 매핑 확장자 확인 + + +![이미지 326-0](images/p0326_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +327 +인터넷 정보 서비스(IIS) 관리자 > 서버 선택 > IIS > “처리기 매핑” 선택, .shtml, .shtm, .stm 확장자 매핑 +확인(존재할 경우 취약) +[ 처리기 매핑 확장자 확인 ] +Step 2) .shtml, .shtm, .stm과 매핑되는 항목 제거 +[ 처리기 확장자 삭제 ] + + +![이미지 327-0](images/p0327_img0.png) + + +![이미지 327-1](images/p0327_img1.png) + + +![이미지 327-2](images/p0327_img2.png) + + +--- + +| 한국인터넷진흥원 | +328 +l WebtoB +Step 1) http.m 파일 내 SSI 서버 연결 설정 확인 +# vi /[WebtoB 설치 디렉터리]/conf/http.m +*SVRGROUP +ssig NodeName = mynode, SvrType = SSI +*SERVER +ssi SvgName = ssig, MinProc = 10, MaxProc = 10 +Step 2) SSI 서버 설정 삭제 + + +![이미지 328-0](images/p0328_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +329 +WEB-20 +(상) +웹 서비스 > 3. 보안 설정 +SSL/TLS 활성화 +개요 +점검 내용 +서버와 클라이언트 간 통신 시 데이터 암호화 전송 여부 점검 +점검 목적 +서버와 클라이언트 간 통신 시 데이터의 평문 전송을 사용하지 않고 데이터가 암호화되는 SSL/TLS +인증 암호화 접속을 통해 스니핑을 통한 정보 유출의 위험을 방지하기 위함 +보안 위협 +Ÿ 웹상의 데이터 통신 시 서버와 클라이언트 간에 데이터를 평문 전송하는 경우, 간단한 도청(스니핑)을 +통해 정보가 탈취 및 도용될 위험이 존재함 +Ÿ SSL/TLS가 활성화되어 있지 않을 경우, 데이터는 암호화되지 않아 공격자가 중간에서 데이터를 +가로채거나 도청할 수 있으며, 더 나아가 평문으로 전송되어 중간에서 변경될 우려가 있어 데이터의 +정확성이 훼손될 위험이 존재함 +참고 +※ 스니핑(임의 지정): 스니퍼(Sniffer)는 "컴퓨터 네트워크상에 흘러 다니는 트래픽을 엿듣는 +도청장치"라고 말할 수 있으며 "스니핑"이란 이러한 스니퍼를 이용하여 네트워크상의 데이터를 도청하는 +행위를 말함 +※ SSL(Secure Socket Layer): 인터넷상에서 정보를 암호화하여 송/수신하는 프로토콜. 현재 +인터넷에서 널리 쓰이고 있는 www, FTP 등의 데이터를 암호화하여, 프라이버시에 관한 정보나 +신용카드 번호, 기업 비밀 등을 안전하게 송/수신할 수 있음 +점검 대상 및 판단 기준 +대상 +Apache, Nginx, IIS, WebtoB +판단 기준 +양호 : SSL/TLS 설정이 활성화되어 있는 경우 +취약 : SSL/TLS 설정이 비활성화되어 있는 경우 +조치 방법 +웹 서비스 내 SSL/TLS 활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) SSL 모듈 활성화 확인 +# apache2ctl –M | grep ssl +ssl_module (shared) +Step 2) SSL 가상 호스트 설정에 SSL 인증서 설정 추가 +# vi /[Apache 설치 디렉터리]/sites-available/default-ssl.conf + + + +![이미지 329-0](images/p0329_img0.png) + + +--- + +| 한국인터넷진흥원 | +330 +ServerAdmin webmaster@yourdomain.com +ServerName yourdomain.com +DocumentRoot /var/www/html +SSLEngine on +SSLCertificateFile /path/to/your_domain_name.crt +SSLCertificateKeyFile /path/to/your_domain_name.key +ErrorLog ${APACHE_LOG_DIR}/error.log +CustomLog ${APACHE_LOG_DIR}/access.log combined + +Step 3) SSL 가상 호스트 활성화 +# a2ensite default-ssl +Step 4) Apache 재구동 +# systemctl restart apache2 +l Nginx +Step 1) SSL 인증서 파일 및 개인키 파일 준비 +Step 2) nginx.conf 파일 내 SSL/TLS 설정 +# vi /[Nginx 설치 디렉터리]/conf/nginx.conf +server { +listen 80; +server_name example.com; +location / { +return 301 https://$host$request_uri; +} +} +server { +listen 443 ssl; +server_name example.com; +ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; +ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; + + +![이미지 330-0](images/p0330_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +331 +ssl_protocols TLSv1.2 TLSv1.3; +ssl_prefer_server_ciphers on; +ssl_ciphers 'SSL_CIPHERS'; +} +} +Step 3) Nginx 재구동 +# systemctl restart nginx +l IIS +Step 1) SSL 인증서 바인딩 설정 +제어판 > 관리 도구 > IIS(인터넷 정보 서비스) 관리자 > 해당 웹사이트 > [사이트 바인딩] > [편집] 탭 > +SSL 인증서 확인 +[ SSL 인증서 확인 ] +Step 2) SSL 인증서 가져오기 +발급받은 인증서 > 인증서 설치 > ‘로컬 컴퓨터’선택 > 다음 > ‘인증서 종류를 기준으로 인증서 저장소를 +자동으로 선택’ 선택 > 다음 > 마침 +Step 3) SSL 인증서 설치 +C:\Windows\System32\mmc.exe > 파일 > 스냅인 추가/제거 > 인증서 > 추가 > 이 스냅인이 항상 관리할 +인증서 대상 ‘컴퓨터 계정’ > 로컬 컴퓨터 > 확인 + + +![이미지 331-0](images/p0331_img0.png) + + +![이미지 331-1](images/p0331_img1.png) + + +--- + +| 한국인터넷진흥원 | +332 +[ SSL 인증서 추가 과정 1 ] +[ SSL 인증서 추가 과정 2 ] +Step 4) 추가된 인증서 확인 +콘솔 루트 > 인증서(로컬 컴퓨터) > 개인용 > 인증서 > 발급된 인증서 확인 +[ 추가된 인증서 확인 ] +Step 5) 인증서 등록 +인터넷 정보 서비스(IIS) 관리자 > 서버 선택 및 우클릭 > “바인딩 편집” 선택 > 추가 > 종류 “https”, +IP주소, 포트, 호스트 이름, SSL 인증서 선택 > 확인 + + +![이미지 332-0](images/p0332_img0.png) + + +![이미지 332-1](images/p0332_img1.png) + + +![이미지 332-2](images/p0332_img2.png) + + +![이미지 332-3](images/p0332_img3.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +333 +Step 6) IIS 서버 재구동 +l WebtoB +Step 1) http.m 파일 내 SSLFlag, SSLName 설정 확인 +# vi /[WebtoB 설치 디렉터리]/config/http.m +*VHOST +vhost1 +... +ERRORDOCUMENT = "400,401,403,404,405,406,503", +SSLFLAG = Y, +SSLNAME = "ssl_nxcore", +LOGGING = "acc_https", +Step 2) http.m 파일 내 인증서 설정 파일 확인 +*SSL +ssl_nxcore +CertificateFile = "/sw/webtob5/ssl/2023/cert.crt", +CertificateKeyFile = "/sw/webtob5/ssl/2023/privkey.key", +CertificateChainFile = "/sw/webtob5/ssl/2023/chain.crt", +CACertificateFile = "/sw/webtob5/ssl/2023/rootca.crt", +PassPhraseDialog = "file:/sw/webtob5/ssl/passwd", +Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3", +RequiredCiphers = "HIGH:!RSA:!SHA1" +Step 3) CA 인증서 및 개인키를 생성해 WebtoB 설정 파일에 설정 + + +![이미지 333-0](images/p0333_img0.png) + + +--- + +| 한국인터넷진흥원 | +334 +WEB-21 +(중) +웹 서비스 > 3. 보안 설정 +HTTP 리디렉션 +개요 +점검 내용 +웹 서비스 접근 시 HTTP Redirection 활성화 여부 점검 +점검 목적 +HTTP 차단 및 HTTPS로 Redirection 활성화를 통해 평문으로 전송되는 데이터를 암호화하여 +공격자의 데이터 스니핑에 대비하기 위함 +보안 위협 +HTTP 통신은 암호화 전송이 아닌 평문 전송을 하므로 공격자가 스니핑을 시도할 경우 관리자의 ID, +비밀번호가 노출되어 악의적 사용자가 관리자 계정을 탈취할 수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Apache, Nginx, IIS, WebtoB +판단 기준 +양호 : HTTP 접근 시 HTTPS Redirection이 활성화된 경우 +취약 : HTTP 접근 시 HTTPS Redirection이 비활성화된 경우 +조치 방법 +HTTP Redirection 활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) SSL 모듈 활성화 확인 +# apache2ctl -M | grep ssl +Step 1) SSL 인증서 활성화 설정 +Step 2) (미설치 시) mod_rewrite 설치 +# apt install mod_ssl +Step 3) HTTP Redirection 설정 확인 +# vi /[Apache 설치 디렉터리]/sites-available/default-ssl.conf + +ServerName example.com +Redirect permanent / https://example.com/ + + + +![이미지 334-0](images/p0334_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +335 +Step 4) SSL 가상 호스트 설정 +# vi /[Apache 설치 디렉터리]/sites-available/default-ssl.conf + +ServerAdmin webmaster@yourdomain.com +ServerName yourdomain.com +DocumentRoot /var/www/html +RewriteEngine On +RewriteCond %{HTTPS} off +RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] +ErrorLog ${APACHE_LOG_DIR}/error.log +CustomLog ${APACHE_LOG_DIR}/access.log combined + +Step 5) SSL 가상 호스트 활성화 및 Apache 재구동 +# vi sudo a2ensite default-ssl +# systemctl restart apache2 +l Nginx +Step 1) Server 블록 내 HTTPS Redirection 설정 확인 +# vi /[Nginx 설치 디렉터리]/sites-available/default +server { +listen 80; +server_name yourdomain.com www.yourdomain.com; +return 301 https://$host$request_uri; +} +Step 2) SSL 활성화 설정 +# vi /[Nginx 설치 디렉터리]/sites-available/default +server { +listen 80; +server_name mydomain.com www.mydomain.com; +return 301 https://$host$request_uri; +} + + +![이미지 335-0](images/p0335_img0.png) + + +--- + +| 한국인터넷진흥원 | +336 +Step 3) Nginx 재구동 +# systemctl restart nginx +l IIS +Step 1) SSL 인증서 활성화 +SSL 인증서 등록 과정에서 사이트 바인딩 ‘종류’를 HTTPS로 설정 +[ 사이트 바인딩 확인 ] +Step 2) 등록된 SSL 인증서 바인딩 설정 확인 +제어판 > 관리 도구 > IIS(인터넷 정보 서비스) 관리자 > 해당 웹사이트 > [사이트 바인딩] > [편집] 탭 > +SSL 인증서 확인 +Step 3) IIS 서버 재구동 +l WebtoB +Step 1) Server 설정 파일 NODE절 vhost의 URLRewrite, URLRewriteConfig 설정 확인 +# vi /[WebtoB 설치 디렉터리]/config/http.m +*VHOST +vhost1 +... +URLRewrite = Y, +URLRewriteConfig = "config/rewrite_ssl.conf", + + +![이미지 336-0](images/p0336_img0.png) + + +![이미지 336-1](images/p0336_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +337 +Step 2) Server 설정 파일 NODE절 vhost의 URLRewrite, URLRewriteConfig 설정 +# vi /[WebtoB 설치 디렉터리]/config/http.m +*VHOST +vhost1 +... +URLRewrite = Y, +URLRewriteConfig = "config/rewrite_ssl.conf", +Step 3) URLRewriteConfig 파일에서 Redirection 확인 +# vi /[WebtoB 설치 디렉터리]/config/rewrite_ssel.conf +RewriteCond %{HTTPS} off +RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +Step 4) URLRewriteConfig 파일에서 Redirection 설정 +# vi /[WebtoB 설치 디렉터리]/config/rewrite_ssel.conf +RewriteCond %{HTTPS} off +RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=307,L] +Step 5) 설정 파일 컴파일 및 재구동 +# wscfl -I http.m +# wsdown +# wsboot + + +![이미지 337-0](images/p0337_img0.png) + + +--- + +| 한국인터넷진흥원 | +338 +WEB-22 +(하) +웹 서비스 > 3. 보안 설정 +에러 페이지 관리 +개요 +점검 내용 +에러 페이지 내 불필요 정보 노출 여부 및 필수 에러 코드에 대해 일원화된 에러 페이지 관리 여부 점검 +점검 목적 +에러 페이지에서 웹 서버 버전 및 종류, OS 정보 등 웹 서버와 관련된 불필요한 정보 및 에러 코드를 +통한 기술적 취약점이 노출되는 것을 최소화하기 위함 +보안 위협 +Ÿ 에러 페이지에서 불필요한 정보가 노출될 경우 공격자에 의해 해당 버전의 알려진 취약점 등을 +이용하여 시스템 구조와 특성 노출 및 해당 취약점을 통한 공격의 위험이 존재함 +Ÿ 필수 에러 코드에 대해 일원화된 에러 페이지로 관리하지 않는 경우 에러 코드를 통해 각종 정보 +유추의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 웹 서비스 에러 페이지가 별도로 지정된 경우 +취약 : 웹 서비스 에러 페이지가 별도로 지정되지 않거나 에러 발생 시 중요 정보가 노출되는 경우 +조치 방법 +필수 에러 코드에 대해 일원화된 에러 페이지 사용 및 에러 페이지 내 불필요 정보 노출 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) httpd.conf 파일 내 에러 코드별 에러 페이지 설정 정보 확인 후 별도의 일원화된 에러 페이지 설정 +# vi /[Apache 설치 디렉터리]/sites-available/000-default.conf +ErrorDocument 400 /error.html +ErrorDocument 401 /error.html +(이하 생략) +Step 2) Apache 재구동 +# systemctl restart apache2 + + +![이미지 338-0](images/p0338_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +339 +l Tomcat +Step 1) web.xml 파일 내 에러 코드별 에러 페이지 설정 정보 확인 후 별도의 일원화된 에러 페이지 설정 +# vi /[Tomcat 설치 디렉터리]/conf/web.xml + +404 +/error/404.html +(이하 생략) + +Step 2) Tomcat 재구동 +# systemctl restart tomcat +l Nginx +Step 1) nginx.conf 파일 내 에러 코드별 에러 페이지 설정 정보 확인 후 별도의 일원화된 에러 페이지 설정 +# vi /[Nginx 설치 디렉터리]/conf/nginx.conf +server { +... +error_page 404 /404.html; +error_page 500 502 503 504 /50x.html; +location = /404.html { +root html; +internal; +} +location = /50x.html { +root html; +internal; +} +(이하 생략) +} + + +![이미지 339-0](images/p0339_img0.png) + + +--- + +| 한국인터넷진흥원 | +340 +l IIS +Step 1) 오류 페이지 확인 후 설정 +제어판 > 관리 도구 > IIS(인터넷 정보 서비스) 관리자 > 해당 웹사이트 > [오류 페이지] > [작업] 탭 내 +[기능 설정 편집] > ‘서버 오류 발생 시 다음 반환’ 항목을 ‘사용자 지정 오류 페이지’로 설정 +[ 오류 페이지 설정 편집 ] +l JEUS +Step 1) web.xml(또는 webcommon.xml) 파일 내 에러 메시지 설정 확인 +# vi /[JEUS 설치 디렉터리]/conf/web.xml(또는 webcommon.xml) + +404 +404.html +(이하 생략) + +Step 2) 설정한 에러 메시지 내용 확인 +# vi /[WebtoB 설치 디렉터리]/docs/404.html +HTTP Error 404 - Service unavailable +Step 3) Server 설정 파일 VHOST, NODE, ERRORDOCUMENT에 오류 메시지 설정 확인 +# vi /[JEUS 설치 디렉터리]/conf/web.xml(또는 webcommon.xml) +HTTP Error 404 - Service unavailable +Step 4) 일원화된 오류 메시지 설정 +# vi /[JEUS 설치 디렉터리]/docs/404.html +죄송합니다. 요청하신 페이지를 찾을 수 없습니다. + + +![이미지 340-0](images/p0340_img0.png) + + +![이미지 340-1](images/p0340_img1.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +341 +l WebtoB +Step 1) Server 설정 파일 VHOST, NODE, ERRORDOCUMENT에 설정한 오류 메시지 설정 확인 후 별도의 +일원화된 에러 페이지 설정 +# vi /[WebtoB 설치 디렉터리]/config/http.m +*ERRORDOCUMENT +503 status = 503, +url = "/503.html“ +Step 2) 설정한 에러 메시지 내용 확인 +# vi /[WebtoB 설치 디렉터리]/docs/503.html +HTTP Error 503 - Service unavailable +Step 3) 일원화된 오류 메시지 설정 +# vi /[WebtoB 설치 디렉터리]/docs/503.html +죄송합니다. 요청하신 페이지를 찾을 수 없습니다. +Step 4) 설정 파일 컴파일 및 재구동 +# wscfl -I http.m +# wsdown +# wsboot +※ 일원화된 페이지에서의 불필요한 정보 노출 제한 및 웹 서비스가 제공하는 서비스에 대한 오류 코드별 에러 +페이지 설정 필요 +※ 예시와 같이 에러 코드 및 웹 버전이 출력되지 않도록 설정 +[ 에러 페이지 출력 ] + + +![이미지 341-0](images/p0341_img0.png) + + +![이미지 341-1](images/p0341_img1.png) + + +--- + +| 한국인터넷진흥원 | +342 +WEB-23 +(중) +웹 서비스 > 3. 보안 설정 +LDAP 알고리즘 적절하게 구성 +개요 +점검 내용 +LDAP 연결 시 취약한 알고리즘 사용 제한 설정 여부 점검 +점검 목적 +LDAP 연결 시 안전한 비밀번호 다이제스트 알고리즘을 사용하여 비밀번호 평문 전송 시 발생할 수 있는 +스니핑 등의 공격에 대비하기 위함 +보안 위협 +취약한 다이제스트 알고리즘을 사용하는 경우 공격자의 스니핑, 무차별 공격 등을 통해 인증 정보가 +노출될 위험이 존재함 +참고 +※ LDAP(Lightweight Directory Access Protocol): 네트워크상에서 조직이나 개인정보 혹은 +파일이나 디바이스 정보 등을 조회·관리하는 표준 프로토콜 +점검 대상 및 판단 기준 +대상 +Tomcat +판단 기준 +양호 : LDAP 연결 인증 시 안전한 비밀번호 다이제스트 알고리즘을 사용하는 경우 +취약 : LDAP 연결 인증 시 안전한 비밀번호 다이제스트 알고리즘을 사용하지 않는 경우 +조치 방법 +LDAP 연결 인증 시 SHA-256 이상의 알고리즘을 사용하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Tomcat +Step 1) 비밀번호 다이제스트 알고리즘 확인 (LDAP 종류별 암호화 알고리즘 지원 여부 확인) +# grep 'digest=' /[Tomcat 설치 디렉터리]/conf/server.xml +digest="SSHA" +Step 2) 비밀번호 다이제스트 알고리즘 설정 +# vi /[Tomcat 설치 디렉터리]/conf/server.xml +digest="SHA-256" +Step 3) Tomcat 재구동 +# systemctl restart tomcat +※ SHA-256 이상 암호화 알고리즘 권고 + + +![이미지 342-0](images/p0342_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +343 +WEB-24 +(중) +웹 서비스 > 3. 보안 설정 +별도의 업로드 경로 사용 및 권한 설정 +개요 +점검 내용 +웹 서비스 제공 시 이용되는 파일 전송의 업로드 경로를 별도의 디렉터리 사용 및 적절한 권한 설정 여부 점검 +점검 목적 +웹 서버 루트 디렉터리 내 업로드 경로가 아닌 별도의 디렉터리에서 파일을 업로드할 수 있도록 하여 +루트 디렉터리 내 악의적인 파일 업로드 및 실행을 방지하기 위함 +보안 위협 +웹 서버 내 별도의 파일 업로드 경로 사용 및 적절한 권한 설정을 하지 않을 경우, 악의적인 목적을 가진 +파일을 업로드하여 시스템 침투, 중요 정보 유출 및 변조 등의 침해사고의 가능성이 있음 +참고 +- +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 별도의 업로드 경로를 사용하고 일반 사용자의 접근 권한이 부여되지 않은 경우 +취약 : 별도의 업로드 경로를 사용하지 않거나, 일반 사용자의 접근 권한이 부여된 경우 +조치 방법 +기본 경로가 아닌 별도의 업로드 경로를 지정하고, 해당 경로에 대한 일반 사용자의 접근 권한을 +제한하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) apache2.conf 파일 내 업로드 경로 및 웹서비스 디렉터리 경로 확인 +# vi /[Apache 설치 디렉터리]/apache2/apache2.conf(또는 apache2.conf) + +Options None +AllowOverride None +Require all denied + +Step 2) 별도 업로드 경로 생성 +# mkdir [웹서비스 디렉터리 외 경로] +# mkdir /var/www/html/uploads +Step 3) 파일 실행 권한 확인 +# ls -al /[Apache 업로드 디렉터리] + + +![이미지 343-0](images/p0343_img0.png) + + +--- + +| 한국인터넷진흥원 | +344 +Step 4) 업로드 디렉터리 권한 설정 +# chmod 750 /var/www/html/uploads/ +# chown www-data:www-data /var/www/html/uploads/ +Step 5) apache2.conf 파일 내 업로드 디렉터리 접근제한 설정 +# vi /[Apache 설치 디렉터리]/apache2/apache2.conf + +Require all denied + +l Tomcat +Step 1) server.xml 파일 내 Context 요소 allowLinking 옵션 설정 (기본값 : 업로드 디렉터리 경로 존재하지 않음) +# vi /[Tomcat 설치 디렉터리]/conf/context.xml + +fileUploadServlet +com.example.FileUploadServlet + +Step 2) 별도의 업로드 경로 생성 +# mkdir [웹서비스 디렉터리 외 경로] +# mkdir /var/www/html/uploads +Step 3) 업로드 디렉터리 권한 설정 +chmod 750 /var/www/html/uploads/ +chown tomcat:tomcat /var/www/html/uploads/ +Step 4) 지정한 디렉터리 권한을 웹 서비스에서 사용 +l Nginx +Step 1) nginx.conf 파일 내 업로드 경로 확인 및 웹서비스 디렉터리 경로 사용 여부 확인 +#vi /[Nginx 설치 디렉터리]/conf/nginx.conf +Step 2) 별도의 업로드 경로 생성 +mkdir [웹서비스 디렉터리 외 경로] +mkdir /var/www/html/uploads + + +![이미지 344-0](images/p0344_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +345 +Step 3) 업로드 디렉터리의 권한 설정 +chmod 750 /var/www/html/uploads/ +chown www-data:www-data /var/www/html/uploads/ +Step 4) nginx.conf 파일 내 업로드 디렉터리 접근제한 설정 +#vi /[Nginx 설치 디렉터리]/conf/nginx.conf +location /uploads/ { +alias /var/www/html/uploads/; +autoindex on; +} +Step 5) 변경된 설정 내용을 적용하기 위하여 Nginx 데몬 재구동 +#systemctl restart nginx +l IIS +Step 1) 업로드 디렉터리 경로 확인 +제어판 > 관리 도구 > 인터넷 정보 서비스(IIS) 관리자 > 해당 웹사이트 > 기본 설정 > ‘실제 경로’에서 홈 +디렉터리 위치 확인 +Step 1) 실제 경로에 입력된 홈 디렉터리로 업로드 디렉터리 확인 +[ 홈 디렉터리 위치 확인 ] +Step 2) 웹 서비스 외부에 업로드 디렉터리를 생성 +[외부 업로드 경로] > 새 폴더 생성 및 이름 지정 +Step 3) 새로 생성한 폴더에 대한 권한 설정 +[외부 업로드 파일] > 속성 > 보안 > 편집 > [IIS 구동 계정 그룹] 추가 및 쓰기 권한 부여 설정 + + +![이미지 345-0](images/p0345_img0.png) + + +![이미지 345-1](images/p0345_img1.png) + + +--- + +| 한국인터넷진흥원 | +346 +l JEUS +Step 1) web.xml 파일 내 파일 업로드 경로 확인 +# vi /[JEUS 설치 디렉터리]/conf/web.xml(또는 webcommon.xml) + +uploadDir +/path/to/your/upload/directory + +Step 2) 파일 업로드 경로 권한 확인 +# ls –al /[JEUS 업로드 디렉터리] +Step 3) 업로드 디렉터리 권한 설정 +# chmod 750 # ls –al /[JEUS 업로드 디렉터리] +# chown jeus:jeus /[JEUS 업로드 디렉터리] +l WebtoB +Step 1) http.m 파일 내 파일 업로드 경로 확인 +# cat /root/webtob/config/http.m +*ALIAS +alias_upload URI = "/upload/", RealPath = "/home/tmax/webtob/uploads/" +Step 2) 파일 업로드 경로 권한 확인 +# ls –al /[WebtoB 업로드 디렉터리] +Step 3) 업로드 디렉터리의 권한 설정 +# chmod 750 # ls –al /[WebtoB 업로드 디렉터리] +# chown tmax:tmax /[WebtoB 업로드 디렉터리] + + +![이미지 346-0](images/p0346_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +347 +WEB-25 +(상) +웹 서비스 > 4. 패치 및 로그 관리 +주기적 보안 패치 및 벤더 권고사항 적용 +개요 +점검 내용 +최신 보안 패치 적용 여부 점검 +점검 목적 +주기적인 최신 보안 패치를 통해 보안성 및 시스템 안정성을 확보하기 위함 +보안 위협 +주기적으로 최신 보안 패치를 적용하지 않을 경우, 알려진 취약점을 이용한 공격 또는 새로운 공격에 +대한 침해사고 발생 위험이 존재함 +참고 +※ 최신 버전을 사용하도록 권고하고 있으나 시스템 운영상 적용이 어려운 경우 최신이 아닌 취약점이 +존재하지 않는 버전도 허용하고 있음 +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 최신 보안 패치가 적용되어 있으며, 패치 적용 정책을 수립하여 주기적인 패치 관리를 하는 경우 +취약 : 최신 보안 패치가 적용되어 있지 않거나 패치 적용 정책을 수립 및 주기적인 패치 관리를 하지 +않는 경우 +조치 방법 +패치 적용에 따른 서비스 영향 정도를 정확히 파악하여 주기적인 패치 적용 정책 수립 및 적용하도록 설정 +조치 시 영향 +시스템 영향도를 파악하여 충분한 테스트 후 적용 권고 +점검 및 조치 사례 +l Apache +Step 1) 웹 서버 버전과 최신 패치 버전을 비교하여 확인 +# /[Apache 설치 디렉터리]/httpd –v +[ Apache 웹 서버 버전 확인 ] +Step 2) Apache 사이트를 통해 주기적으로 버전 점검을 하며, 최신 버전 적용 시 충분한 테스트 후 적용 권고 +※ 참고 사이트: http://httpd.apache.org/download.cgi + + +![이미지 347-0](images/p0347_img0.png) + + +![이미지 347-1](images/p0347_img1.png) + + +--- + +| 한국인터넷진흥원 | +348 +l Tomcat +Step 1) 웹 서버 버전과 최신 패치 버전을 비교하여 확인 +# cd /[Tomcat 설치 디렉터리]/lib +# java -cp catalina.jar org.apache.catalina.util.ServerInfo +[ Tomcat 웹 서버 버전 확인 ] +Step 2) Tomcat 사이트를 통해 주기적으로 버전 점검을 하며, 최신 버전 적용 시 충분한 테스트 후 적용 권고 +※ 참고 사이트: https://tomcat.apache.org/ +l Nginx +Step 1) 웹 서버 버전과 최신 패치 버전을 비교하여 확인 +# /[Nginx Dir]/nginx –v +[ Nginx 웹 서버 버전 확인 ] +Step 2) Nginx 사이트를 통해 주기적으로 버전 점검을 하며, 최신 버전 적용 시 충분한 테스트 후 적용 권고 +※ 참고 사이트: https://nginx.org/en/download.html +l IIS +Step 1) 웹 서버 버전과 최신 패치 버전을 비교하여 확인 +# reg query “HKLM\SOFTWARE\Microsoft\InetStp” /v VersionString +[ Windows Server 버전 확인 ] +Step 2) IIS 사이트를 통해 주기적으로 버전 점검을 하며, 최신 버전 적용 시 충분한 테스트 후 적용 권고 + + +![이미지 348-0](images/p0348_img0.png) + + +![이미지 348-1](images/p0348_img1.png) + + +![이미지 348-2](images/p0348_img2.png) + + +![이미지 348-3](images/p0348_img3.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +349 +※ 참고 사이트: https://www.iis.net/downloads/microsoft +l JEUS +Step 1) 웹 서버 버전과 최신 패치 버전을 비교하여 확인 +# jeusadmin -version 또는 jeusadmin –fullversion +Step 2) JEUS 사이트를 통해 주기적으로 버전 점검을 하며, 최신 버전 적용 시 충분한 테스트 후 적용 권고 +※ 참고 사이트: https://technet.tmaxsoft.com/ko/front/download/findDownloadList.do +l WebtoB +Step 1) 웹 서버 버전과 최신 패치 버전을 비교하여 확인 +# wscfl –version +Step 2) WebtoB 사이트를 통해 주기적으로 버전 점검을 하며, 최신 버전 적용 시 충분한 테스트 후 적용 권고 +※ 참고 사이트: https://technet.tmaxsoft.com/ko/front/download/findDownloadList.do? cmProductCode=0102 + + +![이미지 349-0](images/p0349_img0.png) + + +--- + +| 한국인터넷진흥원 | +350 +WEB-26 +(중) +웹 서비스 > 4. 패치 및 로그 관리 +로그 디렉터리 및 파일 권한 설정 +개요 +점검 내용 +비인가자의 로그 디렉터리 및 파일의 접근을 차단하기 위한 권한 적절성 여부 점검 +점검 목적 +로그 파일에 공격자에게 유용한 정보가 들어있을 수 있으므로 권한 관리를 통해 비인가자에 의한 +정보유출, 로그 파일의 훼손 및 변조를 방지하기 위함 +보안 위협 +로그 디렉터리 및 파일에 적절한 권한이 설정되어 있지 않은 경우, 비인가자가 로그 파일에 접근할 수 +있으므로 사용자 및 시스템 정보유출, 로그 파일 조작 등의 공격 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Apache, Tomcat, Nginx, IIS, JEUS, WebtoB +판단 기준 +양호 : 로그 디렉터리 및 파일에 일반 사용자의 접근 권한이 없는 경우 +취약 : 로그 디렉터리 및 파일에 일반 사용자의 접근 권한이 있는 경우 +조치 방법 +로그 디렉터리 및 파일에 일반 사용자 접근 권한 제거 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Apache +Step 1) 로그 디렉터리 및 파일 권한 확인 +# ls –al +Step 2) 로그 디렉터리 및 파일의 불필요 권한 삭제 +# chmod o-rwx / +l Tomcat +Step 1) 로그 디렉터리 및 파일 권한 확인 +# ls –al / +Step 2) 로그 디렉터리 및 파일의 불필요 권한 삭제 +# chmod o-rwx / + + +![이미지 350-0](images/p0350_img0.png) + + +--- + + +## 03. 웹 서비스 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +351 +l Nginx +Step 1) 로그 디렉터리 및 파일의 권한 확인 +# ls –al / +Step 2) 로그 디렉터리 및 파일의 불필요 권한 삭제 +# chmod o-rwx / +l IIS +Step 1) 로그 디렉터리 및 파일의 권한 확인 +파일 탐색기(C:\Windows\System32\config) > 로그 디렉터리 > 속성 > 보안 > 고급 +[ config 속성 확인 ] +Step 1) Everyone 권한 제거 +[ config 타 사용자 권한 확인 ] + + +![이미지 351-0](images/p0351_img0.png) + + +![이미지 351-1](images/p0351_img1.png) + + +![이미지 351-2](images/p0351_img2.png) + + +--- + +| 한국인터넷진흥원 | +352 +※ 일반적으로 시스템 로그는 C:\Windows\system32\config 파일에 저장되지만, 서비스 로그 파일은 각각의 +서비스마다 로그 저장 위치가 다름. 웹 서버에 많이 사용하는 IIS 경우, C:\Windows\system32\LogFiles에 저장됨. +l JEUS +Step 1) 도메인별 logs 파일 권한 확인 +# ls –al /[JEUS 설치 디렉터리]/domains/jeus_domain/servers/sample/logs +Step 2) 로그 디렉터리 권한을 750으로 변경 +# chmod 750 /[JEUS 설치 디렉터리]/domains/jeus_domain/servers/sample/logs +Step 3) 로그 파일의 권한을 640으로 변경 (기본값: 644) +# chmod 640 /[JEUS 설치 디렉터리]/domains/jeus_domain/servers/sample/logs/[로그 파일] +※ 그 외 로그 파일의 권한도 동일하게 설정 +l WebtoB +Step 1) logs 파일 권한 확인 +# ls –al /home/tmax/webtob/log/ +-rw------- 1 tmax tmax 674 8월 19 16:06 access.log_08192024 +Step 2) 로그 디렉터리 권한을 750으로 변경 +# chmod 750 /[WebtoB 설치 디렉터리]/log/ +Step 3) 로그 파일의 권한을 640으로 변경 (기본값: 644) +# chmod 640 /[WebtoB 설치 디렉터리]/log/[로그 파일] +※ 그 외 로그 파일의 권한도 동일하게 설정 + + +![이미지 352-0](images/p0352_img0.png) + + +--- + +보안 장비 + +## 1. 계정 관리················································································································472 + + +## 2. 접근 관리················································································································484 + + +## 3. 패치 관리················································································································501 + + +## 4. 로그 관리················································································································507 + + +## 5. 기능 관리················································································································519 + +Chapter 04 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 353-0](images/p0353_img0.png) + + +--- + +| 한국인터넷진흥원 | +354 +01 +보안 장비 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +보안 장비 Default 계정 변경 +상 +S-01 +비밀번호 관리정책 설정 +상 +S-02 +보안 장비 계정별 권한 설정 +상 +S-03 +보안 장비 계정 관리 +상 +S-04 +계정 잠금 임계값 설정 +상 +S-05 + +## 2. 접근 관리 + +점검항목 +항목 +중요도 +항목코드 +보안장비 원격 관리 접근 통제 +상 +S-06 +보안장비 보안 접속 +상 +S-07 +세션 종료 시간 설정 +상 +S-08 + +## 3. 패치 관리 + +점검항목 +항목 +중요도 +항목코드 +주기적 보안 패치 및 벤더 권고사항 적용 +상 +S-09 + + +![이미지 354-0](images/p0354_img0.png) + + +![이미지 354-1](images/p0354_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +355 + +## 4. 로그 관리 + +점검항목 +항목 +중요도 +항목코드 +보안장비 로그 설정 +중 +S-10 +보안장비 로그 보관 +중 +S-11 +보안장비 정책 백업 설정 +중 +S-12 +원격 로그 서버 사용 +중 +S-13 +NTP 및 시각 동기화 설정 +중 +S-14 + +## 5. 기능 관리 + +점검항목 +항목 +중요도 +항목코드 +정책 관리 +상 +S-15 +NAT 설정 +상 +S-16 +DMZ 설정 +상 +S-17 +최소한의 서비스만 제공 +상 +S-18 +이상징후 탐지 모니터링 수행 +상 +S-19 +장비 사용량 검토 +상 +S-20 +SNMP 서비스 확인 +상 +S-21 +SNMP Community String 복잡성 설정 +상 +S-22 +유해 트래픽 탐지/차단 정책 설정 +중 +S-23 + + +![이미지 355-0](images/p0355_img0.png) + + +--- + +| 한국인터넷진흥원 | +356 +S-01 +(상) +보안 장비 > 1. 계정 관리 +보안장비 Default 계정 변경 +개요 +점검 내용 +보안 장비에 기본적으로 설정된 관리자 계정의 변경 여부 점검 +점검 목적 +보안 장비의 기본 관리자 계정정보는 인터넷이나 매뉴얼 등에 공개되어 있으므로 보안 장비의 기본 +관리자 계정을 변경하여 비인가자가 기본 관리자 계정을 통한 보안 장비 접근을 방지하기 위함 +보안 위협 +보안 장비의 기본 관리자 계정을 변경하지 않을 경우, 비인가자가 공개된 기본 관리자 계정정보를 +통하여 보안 장비에 불법적인 접근 및 보안 장비 설정값을 변경함으로써 시스템 침입 경로 제공 및 보안 +장비를 무력화할 수 있는 위험이 존재함 +참고 +※ 기본 계정: 장비 제조업체에서 출고 시 설정되어 나오는 기본 관리자 계정정보 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 장비에서 제공하고 있는 기본 계정을 변경하여 사용하는 경우 +(기본 계정 변경이 불가능할 경우 기본 비밀번호 변경으로 보완 필요) +취약 : 장비에서 제공하고 있는 기본 계정을 변경할 수 있으나 변경하지 않고 사용하는 경우 +조치 방법 +기본 계정 변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) Web을 통한 접속 +Step 1) 기본 계정, 비밀번호 입력 +Step 2) 접속 확인 +[ 접속 확인 ] + + +![이미지 356-0](images/p0356_img0.png) + + +![이미지 356-1](images/p0356_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +357 +Step 2) 보안 장비에서 제공하고 있는 계정 메뉴에서 기본 계정 변경 +[ 기본 계정 변경 ] +Step 3) 기본 계정 변경이 불가능할 경우 기본 비밀번호 변경으로 보완 필요 + + +![이미지 357-0](images/p0357_img0.png) + + +![이미지 357-1](images/p0357_img1.png) + + +--- + +| 한국인터넷진흥원 | +358 +S-02 +(상) +보안 장비 > 1. 계정 관리 +비밀번호 관리정책 설정 +개요 +점검 내용 +보안 장비의 계정 비밀번호가 기관 정책에서 정의된 비밀번호 관리 정책 적용 여부 점검 +점검 목적 +비밀번호 관리 정책 적용 여부를 점검하여 비인가자의 비밀번호 추측 공격(무차별 대입 공격, 사전 대입 +공격 등)에 대비가 되어있는지 확인하기 위함 +보안 위협 +비밀번호 관리 정책에 맞지 않는 비밀번호를 사용할 경우, 비인가자의 비밀번호 추측 공격(무차별 대입 +공격, 사전 대입 공격 등)에 계정 비밀번호가 유출되어 비인가자가 보안 장비에 접근할 위험이 존재함 +참고 +※ 비밀번호 관리 정책: 기관 정책에서 정의된 비밀번호 복잡성, 비밀번호 최소 길이, 비밀번호 최소 +사용기간, 비밀번호 최대 사용기간 +※ 무차별 대입 공격(Brute Force Attack): 컴퓨터로 암호를 해독하기 위해 가능한 모든 키를 +하나하나 추론해 보는 시도 +※ 사전 대입 공격(Dictionary Attack): 사전에 있는 단어를 입력하여 비밀번호를 알아내거나 암호를 +해독하는 데 사용되는 컴퓨터 공격 방법 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 비밀번호 관리 정책에 맞는 비밀번호가 사용된 경우 +취약 : 비밀번호 관리 정책에 맞지 않는 비밀번호가 사용된 경우 +조치 방법 +해당 기관의 비밀번호 관리 정책에 따라 적합하게 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) Web을 통한 접속 +Step 2) 기본 계정, 비밀번호 입력 + + +![이미지 358-0](images/p0358_img0.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +359 +Step 3) 접속 확인 +[ 접속 확인 ] +Step 4) 비밀번호 메뉴에서 비밀번호 변경 +[ 기본 비밀번호 변경 ] +Step 5) 보안 장비가 제공하는 범위에서 비밀번호 관리 정책에 맞는 비밀번호로 변경 +복잡성 및 최소 길이 : 특수문자, 숫자, 영 소문자 포함 8자리 이상, 최소 사용기간(1일) 설정 + + +![이미지 359-0](images/p0359_img0.png) + + +![이미지 359-1](images/p0359_img1.png) + + +![이미지 359-2](images/p0359_img2.png) + + +--- + +| 한국인터넷진흥원 | +360 +S-03 +(상) +보안 장비 > 1. 계정 관리 +보안장비 계정별 권한 설정 +개요 +점검 내용 +보안 장비에 등록한 계정들에 대해 업무에 불필요한 권한 여부 점검 +점검 목적 +보안 장비에 등록한 계정의 용도별 권한을 부여함으로써 권한 없는 사용자의 설정 변경으로 인한 시스템 +침입 경로 유출 위험을 줄이고 관리자 계정이 아닌 일반 계정이 비인가자에게 탈취되었을 때 보안 장비를 +장악하지 못하게 하기 위함 +보안 위협 +사용자별 계정의 용도 파악 및 적절한 권한을 부여하지 않을 경우, 권한 없는 사용자의 의도하지 않은 +보안 정책 수정이나 보안 장비 설정값 변경을 통하여 비인가자에게 시스템 침입 경로를 제공할 위험이 +존재함 +참고 +※ 관리자 권한은 최소한의 계정에만 부여 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 사용자별 계정의 용도 파악 및 적절한 권한이 부여된 경우 +취약 : 사용자별 계정의 용도 파악 및 적절한 권한이 부여되지 않은 경우 +조치 방법 +사용자별 계정의 용도 파악 및 적절한 권한 부여 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비에서 제공하고 있는 계정 메뉴에서 계정별 권한 확인 +[ 계정 권한 확인 ] +Step 2) 보안 장비에서 제공하고 있는 계정 메뉴에서 기존 계정의 권한 검토(불필요한 권한 삭제) +Step 3) 단일 계정을 여러 사용자가 공유 시 사용자별 계정 생성 및 권한 차등 부여 + + +![이미지 360-0](images/p0360_img0.png) + + +![이미지 360-1](images/p0360_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +361 +S-04 +(상) +보안 장비 > 1. 계정 관리 +보안장비 계정 관리 +개요 +점검 내용 +보안 장비에 등록된 계정 중 사용하지 않는 계정을 제거 또는 관리 여부 점검 +점검 목적 +사용하지 않는 불필요한 계정을 관리함으로써 관리되지 않은 계정을 통한 공격을 차단하기 위함 +보안 위협 +불필요한 계정을 제거하지 않거나 관리하지 않을 경우, 비인가자의 공격을 통해 불필요한 계정 탈취의 +위험이 존재함 +참고 +※ 공용 계정 및 휴면계정의 계정 탈취 시 침해사고 발생 후 사후 추적이 어려움 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 불필요한 계정을 제거하거나 관리된 경우 +취약 : 불필요한 계정을 제거하지 않거나 관리되지 않은 경우 +조치 방법 +불필요한 공용 계정 및 휴면계정 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비에서 제공하고 있는 계정 메뉴에서 계정 및 담당자 확인 +[ 계정 확인 ] +Step 2) 사용하지 않는 계정 삭제 +Step 1) 공용 계정 사용 시 사용자별 계정 생성 및 시스템 접근 이력을 관리하여 책임 추적성 확보 +※ 시스템이 아닌 사람을 중심으로 하는 통합된 계정 관리가 중요함 + + +![이미지 361-0](images/p0361_img0.png) + + +![이미지 361-1](images/p0361_img1.png) + + +--- + +| 한국인터넷진흥원 | +362 +S-05 +(상) +보안 장비 > 1. 계정 관리 +계정 잠금 임계값 설정 +개요 +점검 내용 +보안 장비에서 제공하고 있는 로그인 실패 임계값 설정 적용 여부 점검 +점검 목적 +보안 장비에서 제공하는 로그인 실패 임계값 설정을 통해 비인가자의 자동화된 방법을 이용한 비밀번호 +추측 공격을 막기 위함 +보안 위협 +로그인 실패 임계값 설정을 적용하지 않을 경우, 비인가자는 자동화된 방법을 통하여 모든 계정에 대해 +비밀번호 추측 공격을 자유롭게 시도하여 비밀번호 정보가 유출될 위험이 존재함 +참고 +※ 기종에 따라 Limited/Lockout로 표시됨 +※ 보안 장비에 계정 잠금 시간 기능을 지원할 시 함께 설정하면 보안성이 향상됨 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 로그인 실패 임계값을 5회 이하로 설정된 경우 +취약 : 로그인 실패 임계값을 5회 이하로 설정되지 않은 경우 +조치 방법 +로그인 실패 임계값을 5회 이하로 제한 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비에서 제공하고 있는 계정 메뉴에서 로그인 실패 임계값 확인 +Step 2) 보안 장비에서 제공하고 있는 계정 메뉴에서 로그인 실패 임계값을 5회 이하로 설정 +[ 로그인 임계값 확인 ] + + +![이미지 362-0](images/p0362_img0.png) + + +![이미지 362-1](images/p0362_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +363 +S-06 +(상) +보안 장비 > 2. 접근 관리 +보안 장비 원격 관리 접근 통제 +개요 +점검 내용 +보안 장비 원격 관리 시 관리자 IP 또는 특정 IP만 접근할 수 있도록 설정하였는지 점검 +점검 목적 +보안 장비에 원격으로 접근할 수 있는 특정 IP를 등록함으로써 비인가자의 보안 장비 접근을 차단하기 +위함 +보안 위협 +보안 장비 원격 관리 시 특정 IP만 접근할 수 있도록 설정하지 않을 경우, 외부에 있는 비인가자가 +탈취한 계정을 통해 보안 장비에 접근할 수 있게 되어 보안 장비 설정값을 변경하여 보안 장비를 +무력화시킬 위험이 존재함 +참고 +※ 보안 장비에서 제공하는 관리자 접근제한 기능을 통해 관리자 단말기 또는 콘솔 장비의 허용된 +IP만을 등록하고 접근을 제한할 수 있음 +※ 보안 장비 원격 관리를 원칙적으로 금지하나, 부득이 사용해야 하는 경우 원격 접속을 허용할 IP나 +계정을 제한하는 등 보안대책을 세워 관리해야 함 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 원격 관리 시 관리자 IP 또는 특정 IP만 접근할 수 있도록 설정된 경우 +취약 : 원격 관리 시 관리자 IP 또는 특정 IP만 접근할 수 있도록 설정되지 않은 경우 +조치 방법 +원격 관리 시 관리자 및 특정 IP만 접근 허용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비에서 제공하고 있는 메뉴에서 접속 IP나 계정 제한 확인 +Step 2) 특정 IP나 계정에서만 접속할 수 있도록 설정 +[ IP 접근 제어 ] + + +![이미지 363-0](images/p0363_img0.png) + + +![이미지 363-1](images/p0363_img1.png) + + +--- + +| 한국인터넷진흥원 | +364 +S-07 +(상) +보안 장비 > 2. 접근 관리 +보안장비 보안 접속 +개요 +점검 내용 +보안 장비 접속 시 암호화 프로토콜을 이용한 접속 여부 점검 +점검 목적 +보안 장비 접속 시 평문을 전송하는 Telnet, HTTP 접속을 사용하지 않고 데이터가 암호화되는 SSH, +SSL 인증 등의 암호화 접속을 통하여 비인가자의 데이터 스니핑에 대비하기 위함 +보안 위협 +보안 장비 접속 시 암호화 통신을 하지 않을 경우, 데이터가 평문으로 전송되어 비인가자가 관리자 +계정을 탈취할 위험이 존재함 +참고 +※ 스니핑(임의 지정): 컴퓨터 네트워크상에 흘러 다니는 트래픽을 도청하는 행위 +※ SSL(Secure Socket Layer): 웹사이트와 브라우저 사이에 전송되는 데이터를 암호화하여 인터넷 +연결을 보호하기 위한 표준 기술 +※ 보안 장비에 대한 원격 접속을 원칙적으로 금지하나, 부득이 원격 접속을 해야 하는 경우 암호화 +통신 프로토콜 사용 등 보안대책을 세워 접속해야 함 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 보안 장비 접속 시 암호화 통신을 하는 경우 +취약 : 보안 장비 접속 시 암호화 통신을 하지 않는 경우 +조치 방법 +보안 장비 접속 시, 가능하다면 SSL 등의 암호화 접속 활용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) HTTPS 또는 SSH를 통한 접속 확인 +[ 보안 장비 접속 확인 ] +Step 2) 보안 장비 접속 시, SSL, HTTPS 등의 암호화 접속 활용 +※ 제품마다 상이하므로 벤더사에 문의 + + +![이미지 364-0](images/p0364_img0.png) + + +![이미지 364-1](images/p0364_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +365 +S-08 +(상) +보안 장비 > 2. 접근 관리 +세션 종료 시간 설정 +개요 +점검 내용 +보안 장비의 정책에 Session Timeout 설정을 적용하였는지 점검 +점검 목적 +보안 장비 관리 작업 완료 후 사용자의 부주의로 계정이 접속한 상태로 방치되는 경우를 방지하며 +사용하지 않는 세션을 종료하여 가용성을 높이기 위함 +보안 위협 +Session Timeout 설정을 하지 않을 경우, 보안 장비에 접속한 사용자가 자리 이탈 또는 불완전한 세션 +종료로 인해 권한이 없는 사용자가 해당 세션을 재사용하여 인증 없이 보안 장비에 접근함으로써 보안 +정책 변경 및 삭제 등 악의적인 행위를 할 위험이 존재함 +참고 +※ Session Timeout: 로컬 또는 원격에서 보안 장비에 접속한 사용자가 일정 시간 동안 통신이 없을 +시 해당 세션을 종료시키는 설정 +※ 보안 장비에 접속하여 이행하는 업무 특성을 고려하여 시간을 설정하도록 함 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : Session Timeout을 설정한 경우 +취약 : Session Timeout을 설정하지 않은 경우 +조치 방법 +Session Timeout 시간을 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 벤더별 설정값 확인. 대부분의 보안 장비는 기본으로 설정되어 있음 +Step 2) Console, SSL, VPN, SSH 등의 모든 원격 접근에 대한 Session Timeout 설정 확인 +[ Session timeout 확인 ] + + +![이미지 365-0](images/p0365_img0.png) + + +![이미지 365-1](images/p0365_img1.png) + + +--- + +| 한국인터넷진흥원 | +366 +Step 3) 보안 장비가 제공하는 Session Timeout 기능 활성화 설정 +[ Session Timeout 설정 ] + + +![이미지 366-0](images/p0366_img0.png) + + +![이미지 366-1](images/p0366_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +367 +S-09 +(상) +보안 장비 > 3. 패치 관리 +주기적 보안 패치 및 벤더 권고사항 적용 +개요 +점검 내용 +보안 장비 OS 및 보안 기능(IPS, 안티바이러스 등)을 주기적으로 보안 패치 여부 점검 +점검 목적 +주기적인 보안 패치를 통해 보안 장비 OS 취약점으로 발생하는 공격이나 보안 장비로 유입되는 최신 +유해 트래픽에 대한 탐지 및 차단을 하기 위함 +보안 위협 +주기적 보안 패치 및 벤더 권고사항을 적용하지 않을 경우, 보안 장비 OS의 취약점을 이용한 공격이나 +최신 유해 트래픽에 대한 탐지 및 차단이 제대로 이루어지지 않아 비인가자의 내부 정보시스템 침해 +위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 주기적 보안 패치 및 벤더 권고사항이 적용된 경우 +취약 : 주기적 보안 패치 및 벤더 권고사항이 적용되지 않은 경우 +조치 방법 +벤더사에서 주기적으로 제공하는 장비별 최신 취약점 정보를 파악 후 최신 패치 및 업그레이드를 수행 +조치 시 영향 +최신 업데이트 적용 시 시스템 재시작 등의 서비스 영향도 검토 필요 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비의 최신 패치 현황 파악 또는 벤더사에 문의하여 최신 패치 현황 파악 +Step 2) 주기적으로 업데이트 필요성에 대한 검토 및 조처를 하고 있는지 문서(정기점검보고서, 검토보고서, 작 +업계획서 등)를 통해 검토 +Step 3) 자동 패치 기능 설정 또는 벤더사에 문의하여 수동으로 패치 수행 +[ 수동 및 자동 패치 ] + + +![이미지 367-0](images/p0367_img0.png) + + +![이미지 367-1](images/p0367_img1.png) + + +--- + +| 한국인터넷진흥원 | +368 +S-10 +(중) +보안 장비 > 4. 로그 관리 +보안장비 로그 설정 +개요 +점검 내용 +보안 장비에 로그 설정이 적용되어 있는지 확인하고 로그 정책이 기관 정책에 맞게 적용되어 있는지 +점검 +점검 목적 +로그 설정을 점검하여 보안 장비의 이상 유무와 보안 장비 및 보안 장비를 통해 보호받고 있는 +정보시스템에 대한 비인가자의 침입 및 공격을 식별하고 있는지 확인하기 위함 +보안 위협 +로그 설정이 적용되어 있지 않을 경우, 보안 장비에 장애가 발생하거나 침해사고가 발생했을 경우 원인 +분석이 어려운 위험이 존재함 +참고 +※ 로그 정책 설정: 로그 정책 설정 시 보안 장비에 대한 접근 이력(날짜, 시간, IP, ID, 명령어 이력 등), +보안 장비 성능 이상 유무(CPU, RAM 사용량 등), 보안 장비를 통해 유입되거나 외부로 나가는 +트래픽에 대해 로그가 남도록 설정하는 것을 권장 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 기관 정책에 따른 로그 설정된 경우 +취약 : 기관 정책에 따른 로그 설정이 되지 않은 경우 +조치 방법 +기관 정책에 따른 로깅 설정 +조치 시 영향 +세부적인 로깅 설정은 보안 장비 성능에 영향을 미칠 수 있음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비의 로그 설정 메뉴 확인 +Step 2) 기관 정책에 따른 로깅 설정 (각 벤더별 설정 방법이 상이함) +[ 로깅 설정 ] + + +![이미지 368-0](images/p0368_img0.png) + + +![이미지 368-1](images/p0368_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +369 +S-11 +(중) +보안 장비 > 4. 로그 관리 +보안장비 로그 보관 +개요 +점검 내용 +로그 보관 정책에 따라 적절하게 로그를 보관하는지 점검 +점검 목적 +로그 보관 설정을 점검하여 로그 검토나 보안 장비 침해사고 원인 분석에 필요한(3개월 이상) 로그를 +안전(삭제, 변경 불가)하게 보관하는지 확인하기 위함 +보안 위협 +로그 보관 기간이 적용되어 있지 않을 경우, 보안 장비에서 로그를 자동으로 삭제하여 로그 검토나 보안 +장비 침해사고 원인 분석 시 필요한 로그가 남아 있지 않아 로그 검토나 사고 원인 분석이 어려워질 +위험이 존재함 +참고 +※ 로그 보관 기간: 「정보통신망 이용촉진 및 정보보호 등에 관한 법률」 제45조 제2항에 따른 +과학기술정보통신부 고시 「정보보호조치에 관한 지침 [별표1] 보호조치의 구체적인 내용 2.2.10 +로그관리」에 따라 최소 1개월 이상 로그 기록 유지·관리(정보보호시스템은 3개월)하도록 정함 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 정책에 따라 로그 보관 설정된 경우 +취약 : 로그 보관 정책이 없고 관리되지 않은 경우 +조치 방법 +보안 장비 로그를 정기적으로 분석 및 검토 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비의 보관된 로그 날짜 확인 +Step 2) 보안 장비 로그 보관 설정에서 로그 저장기간 확인 및 변경 +(별도의 장비에 보관하고 있다면 로그 보관 정책에 맞게 보관 설정) +※ 각 벤더마다 설정 방법 상이 + + +![이미지 369-0](images/p0369_img0.png) + + +--- + +| 한국인터넷진흥원 | +370 +S-12 +(중) +보안 장비 > 4. 로그 관리 +보안장비 정책 백업 설정 +개요 +점검 내용 +보안 장비 설정 정보가 저장된 파일을 백업하는지 점검 +점검 목적 +보안 장비 설정 파일의 백업 유무를 점검하여 보안 장비 또는 보안 장비와 연결된 정보시스템에 +문제(장비 이상으로 인해 장비를 교체할 경우, 보안 장비 설정을 실수로 잘못 변경하여 문제가 생긴 +경우, 비인가자의 공격 및 침입에 의한 설정 변경 및 삭제 등의 침해사고가 발생했을 경우 등) 발생 시 +백업된 설정 파일을 통해 즉시 복구할 수 있도록 대비하고 있는지 확인하기 위함 +보안 위협 +설정 파일을 백업해놓지 않으면 보안 장비에 문제 발생 시 즉시 설정 복구가 되지 않아 보안 장비에 +연결된 정보시스템의 가용성(예: 웹 서버 서비스 불가)에 영향을 미칠 수 있는 위험이 존재함 +참고 +※ 보안 장비 설정 파일: 보안 장비의 각종 설정 및 정책(룰셋)이 저장된 파일. 보안 장비가 문제가 +발생했을 경우 복구하는 용도로 활용 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 보안 장비에 적용된 정책을 별도의 파일로 보관하고 있는 경우 +취약 : 보안 장비에 적용된 정책을 별도의 파일로 보관하고 있지 않은 경우 +조치 방법 +보안 장비에 적용된 정책을 별도의 파일로 보관 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비에 적용된 정책을 별도의 파일로 보관하는지 확인 +Step 2) 보안 장비 설정 메뉴에서 정책 백업 설정. 별도의 파일로 보관 +[ 정책 백업 설정 ] +※ 각 벤더마다 설정 방법 상이 + + +![이미지 370-0](images/p0370_img0.png) + + +![이미지 370-1](images/p0370_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +371 +S-13 +(중) +보안 장비 > 4. 로그 관리 +원격 로그 서버 사용 +개요 +점검 내용 +보안 장비 원격 로그 설정((r)syslog)이 기관 정책에 맞게 설정되어 있으며 보안 장비 로그를 원격 로그 +서버에 별도로 보관하도록 설정되어 있는지 점검 +점검 목적 +보안 장비 로그를 별도로 구축된 원격 로그 서버에 기관의 정책에 맞는 로그를 보관하도록 설정되어 +있는지를 점검하여 로그 삭제 및 변조에 대비하고 있는지 확인하기 위함 +보안 위협 +별도의 원격 로그 서버가 구축되어 있지 않거나, 원격 로그 서버에 저장될 로그가 기관 정책에 맞게 +설정되어 있지 않을 경우, 비인가자의 공격 및 침입 사고 또는 보안 장비 문제 발생 시 로그가 +삭제되거나 변조되어 사고 원인 분석이 어려운 위험이 존재함 +참고 +※ 원격 로그 서버: 정보시스템(서버, 네트워크, 보안 장비 등)의 로그를 통합적으로 보관하는 서버 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 별도의 원격 로그 서버가 구축되어 있고, 원격 로그 서버에 저장될 로그가 기관 정책에 맞게 +설정된 경우 +취약 : 별도의 원격 로그 서버가 구축되어 있지 않거나, 원격 로그 서버에 저장될 로그가 기관 정책에 +맞게 설정되지 않은 경우 +조치 방법 +기관 정책에 맞게 원격 로그 서버에 저장될 로그 설정 후 보안 장비 로그 설정 메뉴에서 (r)syslog 설정 +또는 주기적으로 별도 저장 매체에 백업((r)syslog 미지원일 경우) +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비 로그 설정 메뉴에서 syslog 설정 확인 +Step 2) 원격 syslog 로그 수집 서버 설정 +Step 3) 로컬에서 별도의 저장매체를 통해 수동으로 로그 백업(syslog를 지원하지 않는 경우) + + +![이미지 371-0](images/p0371_img0.png) + + +--- + +| 한국인터넷진흥원 | +372 +S-14 +(중) +보안 장비 > 4. 로그 관리 +NTP 및 시각 동기화 설정 +개요 +점검 내용 +보안 장비의 NTP 및 시간 동기화 설정 적용 여부 점검 +점검 목적 +시스템 운영 또는 보안 사고 발생으로 인한 로그 분석 과정에서 이벤트 간의 인과 관계 파악에 도움을 +주고 로그 자체의 신뢰성을 갖기 위함 +보안 위협 +NTP 및 시간 동기화 설정이 되어있지 않을 경우, 시스템 간 시간 동기화 미흡으로 보안 사고 및 장애 +발생 시 로그에 대한 신뢰도가 떨어질 위험이 존재함 +참고 +※ NTP(Network Time Protocol): 네트워크를 통해 컴퓨터 시스템 간의 시간을 정확하게 유지하기 +위한 네트워크 프로토콜. NTP는 1985년 RFC958로 제안된 표준으로 현재 RFC5905 NTP +version 4로 대체됨 +※ https://tools.ietf.org/html/rfc5905 NTP 관련 정보 참고 사이트 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : NTP 및 시간 동기화 설정이 되어 있는 경우 +취약 : NTP 및 시간 동기화 설정이 되어 있지 않은 경우 +조치 방법 +보안 장비 시간 설정에서 NTP 및 시간 동기화 설정 확인 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비 설정 메뉴에서 NTP 프로토콜 연동 확인 및 벤더사에 문의 +Step 2) 보안 장비 설정 메뉴에서 NTP 서버 연동 설정 +[ NTP 설정 ] + + +![이미지 372-0](images/p0372_img0.png) + + +![이미지 372-1](images/p0372_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +373 +S-15 +(상) +보안 장비 > 5. 기능 관리 +정책 관리 +개요 +점검 내용 +보안 장비 정책에 미사용 및 중복된 정책이 존재하는지 점검 +점검 목적 +주기적인 정책 검토를 통해 미사용 및 중복된 정책을 제거하여 향후 발생할 수 있는 보안 위협을 +제거하고 보안 장비의 고가용성을 유지하기 위함 +보안 위협 +미사용 및 중복된 정책을 제거하지 않을 경우, 보안 장비 관리자의 업무 편의성 및 효율성이 저하되며 +설정되어있는 정책 중 관리자가 인지하지 못한 정책으로 인해 네트워크 보안 체계가 약화 될 위험이 +존재함 +참고 +※ 발생할 수 있는 보안 위협: 비인가자의 네트워크 접근 및 내부 정보 유출, 악성코드 삽입 등 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 정책에 대한 주기적인 검사로 미사용 및 중복된 정책을 확인하고 제거된 경우 +취약 : 정책에 대한 주기적인 검사를 하지 않고 미사용 및 중복된 정책을 확인 및 제거되지 않은 경우 +조치 방법 +정책에 대한 주기적인 검사로 미사용 및 중복된 정책을 확인하여 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 정책에 대한 주기적인 검사로 미사용 & 중복된 정책 확인 +Step 2) 보안 장비 정책의 주기적인 검사 및 미사용 & 중복된 정책 제거 +Step 3) 정책 관리 방법 + +## 1. 보안 장비 정책 입력 시 IP 대신 이름을 사용하도록 함 + +(예시. 그룹명: OOO 부서, OOO 팀, OOO 팀의 OOO 등) + +## 2. 공통 정책은 그룹으로 관리하도록 함 + + +## 3. 사용빈도가 높은 정책은 정책 설정 시 상단에 위치하도록 함 + + +## 4. 위 내용을 포함한 정책에 대해 주기적으로 점검하도록 함 + + + +![이미지 373-0](images/p0373_img0.png) + + +--- + +| 한국인터넷진흥원 | +374 +S-16 +(상) +보안 장비 > 5. 기능 관리 +NAT 설정 +개요 +점검 내용 +외부 공개 필요성이 없는 정보시스템에 NAT 설정 여부를 점검 +점검 목적 +비인가자가 내부 시스템을 공격하기 위해서는 내부 사설 IP를 알아야 하므로 NAT 설정을 통해 내부 +네트워크를 보호할 수 있음 +보안 위협 +NAT 설정을 하지 않을 경우, 공인 IP를 통해 시스템에 접근이 가능하여 정보 유출, 시스템 파괴, +악성코드 전파 등의 불법적 행위가 발생할 위험이 존재함 +참고 +※ NAT 사용 목적 +1) 인터넷의 공인 IP주소 절약 +2) 공공망과 연결되는 사용자들의 고유한 사설망을 침입자들로부터 보호 +점검 대상 및 판단 기준 +대상 +방화벽, VPN 등 +판단 기준 +양호 : 외부 공개 필요성이 없는 서버, 단말기 등 정보시스템에 대해 NAT 설정을 적용한 경우 +취약 : 외부 공개 필요성이 없는 서버, 단말기 등 정보시스템에 대해 NAT 설정을 적용하지 않은 경우 +조치 방법 +외부 공개 필요성이 없는 정보시스템에 대해 공인 IP 지정 여부를 확인하여 사설 IP로 변경한 후 보안 +장비에서 NAT 설정을 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 공인 IP 확인 사이트(포털 등)에 접속하여 사용 중인 단말의 IP 확인 +Step 2) 대부분의 네트워크 보안 제품들은 NAT 기술을 기본으로 채택하고 있으므로 내부 사설 IP 부여 정책에 +맞춰 적용하도록 함 + + +![이미지 374-0](images/p0374_img0.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +375 +[ NAT 설정 ] + + +![이미지 375-0](images/p0375_img0.png) + + +![이미지 375-1](images/p0375_img1.png) + + +--- + +| 한국인터넷진흥원 | +376 +S-17 +(상) +보안 장비 > 5. 기능 관리 +DMZ 설정 +개요 +점검 내용 +내부 네트워크와 외부 서비스 네트워크(DMZ)를 구분하고 있는지 점검 +점검 목적 +외부 네트워크로 서비스를 제공하는 호스트에서 내부 네트워크로의 접근이 통제되고 있는지 확인하기 +위함 +보안 위협 +DMZ 설정을 통해 내부 네트워크와 외부 서비스 네트워크를 구분하도록 설정되어 있지 않을 경우, 외부 +네트워크를 통해서 서비스를 제공받는 악의적인 사용자가 DMZ 내 호스트를 통해 내부 네트워크로 +불법적 연결을 시도할 위험이 존재함 +참고 +※ DMZ: 조직의 내부 네트워크와 외부 네트워크 사이에 위치하는 네트워크 망으로 DMZ 내 컴퓨터는 +외부 네트워크에만 연결할 수 있도록 하고, 내부 네트워크로는 연결할 수 없도록 구성함 +점검 대상 및 판단 기준 +대상 +방화벽, VPN 등 +판단 기준 +양호 : DMZ를 구성하여 내부 네트워크를 보호하는 경우 +취약 : DMZ를 구성하지 않고 사설망에서 외부 공개 서비스를 제공하는 경우 +조치 방법 +Ÿ DMZ를 구성하여 내부 네트워크와 외부 서비스 네트워크 분리 +Ÿ 물리적(망 분리)으로 내부 네트워크와 외부 서비스 네트워크가 분리되어 있으면 해당 없음 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 네트워크 구성도 또는 방화벽 설정 확인 +Step 2) 방화벽의 옵션 설정 +각각의 네트워크는 방화벽에 서로 다른 포트를 사용하여 연결하는데 이를 삼각 방화벽 설정 +(three-legged firewall set-up)이라 함 + + +![이미지 376-0](images/p0376_img0.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +377 +[ 방화벽 옵션 설정 ] +Step 3) 두 개의 방화벽 사용 +DMZ는 두 개의 방화벽 중간에 위치하며, 두 개의 방화벽과 연결됨. 하나의 방화벽은 내부 네트워크와 +연결되고 다른 하나는 외부 네트워크와 연결됨. 우연한 설정 실수를 통해 외부 네트워크가 내부 네트워 +크로 연결할 수 있게 되는 상황을 방지함. 이런 구성 형식을 차단된 서브넷 방화벽(screened-subnet firewall) +이라고 함 + + +![이미지 377-0](images/p0377_img0.png) + + +![이미지 377-1](images/p0377_img1.png) + + +--- + +| 한국인터넷진흥원 | +378 +S-18 +(상) +보안 장비 > 5. 기능 관리 +최소한의 서비스만 제공 +개요 +점검 내용 +보안 장비에서 필요한 서비스만 제공하고 있는지 점검 +점검 목적 +보안 장비 정책을 검토하여 사용하지 않는 IP와 포트를 제거하여 네트워크 및 시스템 운영의 보안성을 +유지하기 위함 +보안 위협 +최소한의 서비스만 제공하지 않을 경우, 비인가자의 침입 또는 악성 소프트웨어 전달 등의 보안 위험이 +발생할 위험이 존재함 +참고 +※ 방화벽 기본 정책: 방화벽은 기본적으로 All Deny 설정을 적용하며 허용할 IP와 포트만 +추가함으로써 관리 포인트를 최소화함 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, 웹 방화벽 등 +판단 기준 +양호 : All Deny 설정 및 보안 장비에 최소 서비스만 허용하는 경우 +취약 : All Deny 미설정 또는 보안 장비에 불필요한 서비스를 허용하는 경우 +조치 방법 +보안 장비에 최소 서비스만 허용하도록 설정함 +조치 시 영향 +허용되지 않은 접속은 모두 차단됨 +점검 및 조치 사례 +l 공통 +Step 1) 방화벽에서 허용되지 않은 포트 접속 확인 +Step 2) 방화벽 기본 정책인 all deny에 최소 서비스만 허용 확인 +(허용된 IP와 서비스 포트만 오픈, 모든 IP 및 서비스 허용 금지) +[ 방화벽 정책 설정 ] + + +![이미지 378-0](images/p0378_img0.png) + + +![이미지 378-1](images/p0378_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +379 +S-19 +(상) +보안 장비 > 5. 기능 관리 +이상징후 탐지 모니터링 수행 +개요 +점검 내용 +보안 장비에 이상징후 탐지 모니터링을 수행하고 있는지 점검 +점검 목적 +이상징후가 탐지되는 경우 사고 예방 및 신속한 조치를 이행하기 위함 +보안 위협 +이상징후 탐지 모니터링을 수행하지 않을 경우, 보안 사고를 미리 방지할 수 없는 위험이 존재함 +참고 +※ 보안 사고 미연 방지 및 IT 컴플라이언스 준수 +예시 1) 휴일 또는 업무 시간 이외에 비정상적인 패턴으로 중요 문서 또는 고객 정보 DB에 +접근한다면 정보 유출 징후가 있다고 판단 가능 +예시 2) 퇴사 징후가 의심되는 직원이 휴일이나 업무 시간 외에 비정상적으로 중요 문서나 고객 +DB에 접근하는 경우 정보 유출 가능성이 커 이를 사전에 탐지하고 예방할 수 있음 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 이상징후 탐지 모니터링을 수행하고 있는 경우 +취약 : 이상징후 탐지 모니터링을 수행하고 있지 않은 경우 +조치 방법 +이상징후 탐지 시 담당자/관리자가 즉시 확인할 수 있도록 모니터링 수행 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비의 이상징후 탐지 모니터링 기능(알람, 이메일, SMS 등)이 설정되어 담당자가 즉시 인지할 방 +안이 있는지를 점검 +Step 2) 장비 자체 기능 대신 Syslog를 통해 모니터링 시스템으로 전송하는 경우, 해당 시스템의 모니터링 기능 +설정 여부를 점검 +Step 3) 보안 장비 이상징후에 대해 실시간 모니터링 실시 + + +![이미지 379-0](images/p0379_img0.png) + + +--- + +| 한국인터넷진흥원 | +380 +[ 보안 장비 모니터링 ] + + +![이미지 380-0](images/p0380_img0.png) + + +![이미지 380-1](images/p0380_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +381 +S-20 +(상) +보안 장비 > 5. 기능 관리 +장비 사용량 검토 +개요 +점검 내용 +보안 장비에서 제공하는 Dashboard를 통해 보안 장비의 가용성에 대한 실시간 검토 여부 점검 +점검 목적 +보안 장비의 가용성에 대한 검토로 인해 네트워크 트래픽의 수준을 파악하게 되고, 그에 따른 가용성 +향상을 고려할 수 있음 +보안 위협 +보안 장비 가용성을 정기적으로 검토를 하지 않을 경우, 성능 및 회선 상태를 파악할 수 없어 보안 +장비의 가용성 하락이 발생할 위험이 존재함 +참고 +※ 내부 정책에 맞게 일, 주, 월 등의 주기를 정하여 정기적으로 이행하도록 하며 일반적으로 월 1회 +검토를 권고함 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 보안 장비 가용성을 정기적으로 모니터링 및 검토할 경우 +취약 : 보안 장비 가용성을 정기적으로 모니터링 및 검토하지 않을 경우 +조치 방법 +장비 사용량을 정기적으로 모니터링 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비 사용량에 대해 정기적인 모니터링 및 검토 여부 확인 +Step 2) 보안 장비의 Web Dash Board 모니터링 및 정기적인 장비 사용량 검토(정기점검보고서, 검토보고서 등) + + +![이미지 381-0](images/p0381_img0.png) + + +--- + +| 한국인터넷진흥원 | +382 +[ 장비 사용량 검토 ] + + + +![이미지 382-0](images/p0382_img0.png) + + +![이미지 382-1](images/p0382_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +383 +S-21 +(상) +보안 장비 > 5. 기능 관리 +SNMP 서비스 확인 +개요 +점검 내용 +SNMP 서비스 사용 여부 점검 +점검 목적 +보안 장비 관리를 위해 NMS 솔루션과의 연동으로 SNMP 서비스 사용이 필요한 경우가 아니라면 +서비스를 중지하도록 함 +보안 위협 +불필요한 SNMP 서비스를 사용할 경우, DoS 공격, 보안 장비 성능 저하, 크래쉬, 리로드 등의 공격 +위험이 존재함 +참고 +※ SNMP 서비스: 네트워크 관리를 위한 프로토콜로 네트워크상의 서버, 프린터, 허브, 스위치, +라우터와 같은 네트워크 장치를 구성하고 정보를 수집하는 데 사용됨 +※ SNMP 서비스를 이용해야 하는 경우 Community String을 유추할 수 없게 설정 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 불필요한 SNMP 서비스를 사용하지 않을 경우 +취약 : 불필요한 SNMP 서비스를 사용할 경우 +조치 방법 +불필요한 경우 SNMP 서비스 중지 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비의 SNMP 설정 메뉴에서 확인 +Step 2) 불필요하다면 SNMP 서비스를 중지하고, 관리를 위해 NMS 솔루션과의 연동이 필요하다면 SNMP +설정 +[ SNMP 설정 ] + + +![이미지 383-0](images/p0383_img0.png) + + +![이미지 383-1](images/p0383_img1.png) + + +--- + +| 한국인터넷진흥원 | +384 +S-22 +(상) +보안 장비 > 5. 기능 관리 +SNMP Community String 복잡성 설정 +개요 +점검 내용 +SNMP Community String이 유추하기 어렵게 설정되어 있는지 점검 +점검 목적 +SNMP Community String을 유추하기 어렵게 설정하여 네트워크상에서 시스템 정보가 비인가자에게 +노출되지 않도록 함 +보안 위협 +SNMP의 Community String을 기본값 또는 유추하기 쉬운 값으로 설정할 경우, 악의적인 사용자가 +장비 설정을 쉽게 변경(RW)하여 중요 시스템 정보가 노출될 수 있는 위험이 존재함 +참고 +※ SNMP 버전: v1, v2 ,v3 이 존재. v1, v2는 Community String을 평문 전송하지만, v3는 +암호화가 설정되어 해시값으로 전송함 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : SNMP 서비스를 사용하지 않거나, 유추하기 어려운 Community String을 설정한 경우 +취약 : Community String을 기본값으로 사용하고 있거나, 유추하기 쉬운 Community String을 +설정한 경우 +조치 방법 +유추하기 어려운 Community String을 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 보안 장비의 SNMP 설정 메뉴에서 Community String 확인 +Step 2) 보안 장비는 SNMP 취약성이 존재하므로 누구나 추측하기 어렵고 의미가 없는 문자열, 영문자 혼합으 +로 변경 +[ SNMP Community String 설정 ] + + +![이미지 384-0](images/p0384_img0.png) + + +![이미지 384-1](images/p0384_img1.png) + + +--- + + +## 04. 보안 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +385 +S-23 +(중) +보안 장비 > 5. 기능 관리 +유해 트래픽 탐지/차단 정책 설정 +개요 +점검 내용 +유해 트래픽 탐지/차단 정책 적용 여부 점검 +점검 목적 +유해 트래픽(Flooding 공격, Scan 공격, 해킹 툴 공격 등)을 탐지/차단 정책을 적용하여 네트워크 운영 +및 서비스의 장애 발생 가능성을 차단하기 위함 +보안 위협 +유해 트래픽 탐지/차단 정책이 설정되지 않을 경우, 악성코드가 네트워크를 통해 전파될 우려가 있음 +참고 +※ Flooding 공격: 악의적으로 한꺼번에 많은 양의 데이터를 보내 상대방의 서비스를 운용할 수 없게 +만드는 서비스 거부 공격 +※ Scan 공격: 네트워크, 시스템의 활성화된 포트·서비스·취약점을 식별하기 위한 행위 +※ 해킹툴 공격: 공격자가 상용 해킹툴이나, 자제 제작한 해킹툴을 이용해 시스템을 침투·장악하거나 +권한을 획득하는 행위 +점검 대상 및 판단 기준 +대상 +방화벽, VPN, IDS, IPS, Anti-DDoS, 웹 방화벽 등 +판단 기준 +양호 : 유해 트래픽 탐지/차단 패턴이 적용된 경우 +취약 : 유해 트래픽 탐지/차단 패턴이 적용되지 않은 경우 +조치 방법 +유해 트래팍 탐지/차단 정책 설정 +조치 시 영향 +오탐으로 인한 차단 정책 설정 시 서비스 영향 발생 +점검 및 조치 사례 +l Flooding 공격 +Step 1) TCP/UDP/ICMP Flooding 공격에 대한 탐지 및 차단 패턴 적용 여부를 점검 +Step 2) 인터넷 진입구간에 위치한 DDoS 차단시스템에 TCP/UDP/ICMP Flooding 공격에 대한 차단정 책 등록 +여부를 점검 +Step 3) TCP/UDP/ICMP Flooding 공격에 대한 탐지 및 차단 패턴 적용 +Step 4) 인터넷 진입구간에 위치한 DDoS 차단시스템에 TCP/UDP/ICMP Flooding 공격에 대한 차단 정책 등록 +l Scan 공격 +Step 1) Port Scan에 대한 탐지 및 차단 패턴 적용 여부를 점검 +Step 2) 인터넷 진입 구간에 위치한 DDoS 차단시스템에 Port Scan에 대한 차단 정책 등록 여부를 점검 + + +![이미지 385-0](images/p0385_img0.png) + + +--- + +| 한국인터넷진흥원 | +386 +Step 3) Port Sacn에 대한 탐지 및 차단 패턴 적용 +Step 4) 인터넷 진입 구간에 위치한 DDoS 차단시스템에 Port Scan에 대한 차단 정책 등록 여부를 점검 +l 해킹툴 공격 +Step 1) 악성코드에 대한 탐지 및 차단 패턴 적용 여부를 점검 +Step 2) 주요 해킹 툴에 대한 탐지 및 차단정책 등록 +[ 차단 정책 예시 ] + + +![이미지 386-0](images/p0386_img0.png) + + +![이미지 386-1](images/p0386_img1.png) + + +--- + +네트워크 장비 + +## 1. 계정 관리················································································································391 + + +## 2. 접근 관리················································································································406 + + +## 3. 패치 관리················································································································422 + + +## 4. 로그 관리················································································································424 + + +## 5. 기능 관리················································································································431 + +Chapter 05 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 387-0](images/p0387_img0.png) + + +--- + +| 한국인터넷진흥원 | +388 +01 +네트워크 장비 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +비밀번호 설정 +상 +N-01 +비밀번호 복잡성 설정 +상 +N-02 +암호화된 비밀번호 가용 +상 +N-03 +계정 잠금 임계값 설정 +상 +N-04 +사용자, 명령어별 권한 수준 설정 +중 +N-05 + +## 2. 접근 관리 + +점검항목 +항목 +중요도 +항목코드 +VTY 접근(ACL) 설정 +상 +N-06 +세션 종료 시간 설정 +상 +N-07 +VTY 접속 시 안전한 프로토콜 사용 +중 +N-08 +불필요한 보조 입출력 포트 사용 금지 +중 +N-09 +로그온 시 경고 메시지 설정 +중 +N-10 +원격 로그서버 사용 +중 +N-11 + +## 3. 패치 관리 + +점검항목 +항목 +중요도 +항목코드 +주기적 보안 패치 및 벤더 권고사항 적용 +상 +N-12 + + +![이미지 388-0](images/p0388_img0.png) + + +![이미지 388-1](images/p0388_img1.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +389 + +## 4. 로그 관리 + +점검항목 +항목 +중요도 +항목코드 +로깅 버퍼 크기 설정 +중 +N-13 +정책에 따른 로깅 설정 +중 +N-14 +NTP 및 시각 동기화 설정 +중 +N-15 +Timestamp 로그 설정 +하 +N-16 + +## 5. 기능 관리 + +점검항목 +항목 +중요도 +항목코드 +SNMP 서비스 확인 +상 +N-17 +SNMP Community String 복잡성 설정 +상 +N-18 +SNMP ACL 설정 +상 +N-19 +SNMP Community 권한 설정 +상 +N-20 +TFTP 서비스 차단 +상 +N-21 +Spoofing 방지 필터링 적용 +상 +N-22 +DDoS 공격 방어 설정 또는 DDoS 장비 사용 +상 +N-23 +사용하지 않는 인터페이스 비활성화 +상 +N-24 +TCP Keepalive 서비스 설정 +중 +N-25 +Finger 서비스 차단 +중 +N-26 +웹 서비스 차단 +중 +N-27 +TCP/UDP small 서비스 차단 +중 +N-28 +Bootp 서비스 차단 +중 +N-29 +CDP 서비스 차단 +중 +N-30 +Directed-broadcast 차단 +중 +N-31 +Source 라우팅 차단 +중 +N-32 +Proxy ARP 차단 +중 +N-33 + + +![이미지 389-0](images/p0389_img0.png) + + +--- + +| 한국인터넷진흥원 | +390 +점검항목 +항목 +중요도 +항목코드 +ICMP unreachable, Redirect 차단 +중 +N-34 +identd 서비스 차단 +중 +N-35 +Domain Lookup 차단 +중 +N-36 +pad 차단 +중 +N-37 +mask-reply 차단 +중 +N-38 + + +![이미지 390-0](images/p0390_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +391 +N-01 +(상) +네트워크 장비 > 1. 계정 관리 +비밀번호 설정 +개요 +점검 내용 +관리 터미널(콘솔, SSH, https 등)을 통해 네트워크 장비 접근 시 기본 비밀번호(기본 관리자 계정도 +함께 변경하도록 권고)를 사용하는지 점검 +점검 목적 +기본 비밀번호를 변경하지 않고 사용함으로써 발생할 수 있는 비인가자의 네트워크 장비 접근에 대한 +통제가 이루어지는지 확인하기 위함 +보안 위협 +Ÿ 장비 출고 시 설정된 기본 비밀번호를 변경하지 않고 그대로 사용할 경우 비인가자가 인터넷을 통해 +벤더사 별 네트워크 장비 기본 비밀번호를 쉽게 획득할 수 있음 +Ÿ 획득한 비밀번호를 사용하여 기본 비밀번호를 변경하지 않고 관리 운용 중인 네트워크 장비에 +접근하여 장비의 내부 설정(ACL)을 변경함으로써 해당 네트워크 장비를 통해 전송되는 데이터들이 +비인가자에게 유출되거나 네트워크 장비를 통해 통신하는 정보시스템(서버, 보안 장비, 네트워크 +장비) 간의 통신에 영향(데이터 전송 불가)을 미칠 수 있음 +참고 +※ 기본(Default) 비밀번호: 장비 제조업체에서 출고 시 설정되어 나오는 기본 관리자 계정의 비밀번호 +정보 +※ 기본(Default) 관리자 계정: 장비 제조업체에서 출고 시 설정되어 나오는 네트워크 장비의 관리용 +계정(예: admin, manager 등) +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Passport, Juniper, Piolink 등 +판단 기준 +양호 : 기본 비밀번호를 변경한 경우 +취약 : 기본 비밀번호를 변경하지 않거나 비밀번호를 설정하지 않은 경우 +조치 방법 +기본 비밀번호를 관리기관의 비밀번호 작성규칙을 준용하여 변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) enable 비밀번호 설정 확인 +Router> enable +Router# show running-config +Step 2) VTY, 콘솔, 보조(AUX) 포트의 로그인 인증 방식 및 비밀번호 설정 확인 +login: 라인 비밀번호 인증 +login local: 로컬 사용자 인증 + + +![이미지 391-0](images/p0391_img0.png) + + +--- + +| 한국인터넷진흥원 | +392 +login authentication: AAA 인증 +no login: 인증 없이 사용자 모드(User EXEC mode) 접근 +Step 3) enable 비밀번호 설정 +Router# config terminal (단축 명령 conf t) +Router(config)# enable secret <비밀번호> 또는 Router(config)# enable password <비밀번호> +Router(config)# end +Step 4) 가상 터미널(VTY) 비밀번호 설정 +Router# config terminal +Router(config)# line vty ? +<0X4> First Line number +Router(config)# line vty 0 4 +Router(config-line)# login +Router(config-line)# password <비밀번호> +Step 5) 콘솔 비밀번호 설정 +Router# config terminal +Router(config)# line console ? +<0X0> First Line number +Router(config)# line console 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +Step 6) 보조(AUX) 포트 비밀번호 설정 +Router# config terminal +Router(config)# line aux ? +<0X0> First Line number +Router(config)# line aux 0 +Router(config-line)# login +Router(config-line)# password <비밀번호> +※ AUX 포트는 일반적으로 무단 접근을 방지하기 위해 N-18 항목(불필요한 보조 입출력 포트 사용 금지)과 같 +이 비활성화 설정 + + +![이미지 392-0](images/p0392_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +393 +l Radware Alteon +Step 1) admpw 설정 확인 +Main# /cfg/dump +Step 2) 관리자 비밀번호 변경 +Main# /cfg/sys/access/user/admpw (administrator 비밀번호 변경 시) +Main# apply +Main# save +l Passport +Step 1) 비밀번호 설정 확인 +# show config +Step 2) switch 접속 +Step 3) 다음 해당하는 계정에 따라 명령어 실행 +# config cli password ro <계정명> +# config cli password 11 <계정명> +# config cli password 12 <계정명> +# config cli password 13 <계정명> +# config cli password rw <계정명> +# config cli password rwa <계정명> +# config cli password slboper <계정명> +# config cli password 14oper <계정명> +# config cli password oper <계정명> +# config cli password slbadmin <계정명> +# config cli password 14admin <계정명> +# config cli password ssladmin <계정명> +l Juniper Junos +Step 1) root authentication 설정 확인 +user@host> configure +[edit] +user@host# show + + +![이미지 393-0](images/p0393_img0.png) + + +--- + +| 한국인터넷진흥원 | +394 +Step 2) 루트 사용자 계정의 비밀번호를 변경 +user@host> configure +[edit] +user@host# set system root-authentication plain-test-passwd +New password : <비밀번호> +retype new password : <비밀번호> +l Piolink PLOS +Step 1) 비밀번호 설정 확인 +switch# show running-config +Step 2) 루트 사용자 계정의 비밀번호를 변경 +# configure terminal +(config) # password +Changing password for root +Enter the new password (minimum of 5, maximum of 8 characters) +Enter new password: <비밀번호> +Re-enter new password: <비밀번호> + + +![이미지 394-0](images/p0394_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +395 +N-02 +(상) +네트워크 장비 > 1. 계정 관리 +비밀번호 복잡성 설정 +개요 +점검 내용 +네트워크 장비에 기관 정책에 맞는 계정 비밀번호 복잡성 정책이 적용되어 있는지 점검 +비밀번호 복잡성 정책 설정 기능이 장비에 존재하지 않는 경우 기관 정책에 맞게 계정 비밀번호를 +설정하여 사용하는지 점검 +점검 목적 +비인가자의 네트워크 장비 터미널(콘솔, SSH, https 등) 접근 시도 공격(무차별 대입 공격, 사전 대입 +공격 등)에 대한 대비 여부를 확인하기 위함 +보안 위협 +Ÿ 비밀번호 복잡성 정책이 적용되어 있지 않을 경우 계정 생성 후 초기 비밀번호 설정 및 기존 비밀번호 +변경 시 비밀번호 복잡성 제약 규칙을 적용받지 않아 취약한 비밀번호(예 qwerty, 12345, +pass1234 등)를 설정할 수 있도록 허용되므로, 해당 취약점으로 인해 비인가자의 공격(무차별 대입 +공격, 사전 대입 공격 등)에 계정 비밀번호가 유출되는 원인을 제공하여 유출된 비밀번호를 사용하여 +비인가자가 네트워크 장비 터미널에 접근할 위험이 존재함 +참고 +※ 비밀번호 복잡성: 계정 비밀번호 설정 시 영문(대문자, 소문자), 숫자, 특수문자가 혼합된 비밀번호로 +설정하는 것 +※ 무차별 대입 공격(Brute Force Attack): 컴퓨터로 암호를 해독하기 위해 가능한 모든 키를 +하나하나 추론해 보는 시도를 말함. +※ 사전 대입 공격(Dictionary Attack): 사전에 있는 단어를 입력하여 비밀번호를 알아내거나 암호를 +해독하는 데 사용되는 컴퓨터 공격 방법 +점검 대상 및 판단 기준 +대상 +공통 +판단 기준 +양호 : 기관 정책에 맞는 비밀번호 복잡성 정책을 설정하거나, 비밀번호 복잡성 설정 기능이 없는 장비는 +기관 정책에 맞게 비밀번호를 사용하는 경우 +취약 : 기관 정책에 맞지 않는 비밀번호를 설정하여 사용하는 경우 +조치 방법 +관리기관의 비밀번호 작성규칙에 맞게 비밀번호 복잡성 정책 및 비밀번호 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 장비에 비밀번호 복잡성 정책을 설정하거나 비밀번호 복잡성 설정 기능이 없는 장비는 기관 정책에 따 +라 비밀번호를 설정하여 사용하는지 확인 + + +![이미지 395-0](images/p0395_img0.png) + + +--- + +| 한국인터넷진흥원 | +396 +Step 2) 기반시설 관리기관의 비밀번호 작성규칙과 관련 법규를 준수하여 비밀번호 복잡성 정책을 설정하고 안 +전한 비밀번호를 사용 +※ 비밀번호 작성규칙 예시 +비밀번호는 다음 사항을 반영하고 숫자·문자·특수문자 등을 혼합하여 안전하게 설정하고 정기적으로 변경· +사용해야 함 + +## 1. 사용자 계정(아이디)과 동일하지 않은 것 + + +## 2. 개인 신상 및 부서 명칭 등과 관계가 없는 것 + + +## 3. 일반 사전에 등록된 단어의 사용을 피할 것 + + +## 4. 동일한 단어 또는 숫자를 반복하여 사용하지 말 것 + + +## 5. 사용된 비밀번호는 재사용하지 말 것 + + +## 6. 동일한 비밀번호를 여러 사람이 공유하여 사용하지 말 것 + + +## 7. 응용프로그램 등을 이용한 자동 비밀번호 입력기능을 사용하지 말 것 + +l Cisco IOS +Step 1) 비밀번호 복잡성 관련 설정 확인 +Router# show running-config +Step 2) 비밀번호의 최소 길이 설정(기존 비밀번호는 영향을 받지 않음) +Router# config terminal +Router(config)#security passwords min-length ? +<0-16> Minimum length of all user/enable passwords +Router(config)# security passwords min-length <길이> + + +![이미지 396-0](images/p0396_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +397 +N-03 +(상) +네트워크 장비 > 1. 계정 관리 +암호화된 비밀번호 사용 +개요 +점검 내용 +계정 비밀번호 암호화 설정이 적용되어 있는지 점검 +점검 목적 +비인가자의 네트워크 장비 터미널 접근으로 인해 발생할 수 있는 장비 내 계정 비밀번호 유출에 대비가 +되어있는지 확인하기 위함 +보안 위협 +계정 비밀번호 암호화 기능이 설정되어 있지 않을 경우, 비인가자가 네트워크 터미널에 접근하여 장비 +내에 존재하는 모든 계정의 비밀번호를 획득할 수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : 비밀번호 암호화 설정을 적용한 경우 +취약 : 비밀번호 암호화 설정을 적용하지 않은 경우 +조치 방법 +비밀번호 암호화 설정 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) enable secret 사용 확인 +Router# show running-config +Step 2) 계정명 secret 사용 확인 +Router# show running-config +Step 3) Password-Encryption 서비스 동작 확인 +Router# show running-config +Step 4) enable secret 설정 +enable secret 명령어를 사용하여 enable 비밀번호를 일방향 암호화 저장 +enable secret 와 enable password 명령어로 각각 비밀번호를 사용하는 경우 enable +secret 명령어의 우선순위가 높으며 보안상 비밀번호를 서로 다르게 입력해야 함 +Router# config terminal +Router(config)# enable secret <비밀번호> + + +![이미지 397-0](images/p0397_img0.png) + + +--- + +| 한국인터넷진흥원 | +398 +Step 5) username secret 설정 +(config)# username secret 명령어를 사용하여 로컬 사용자 비밀번호를 일방향 암호화 저장 +enable secret과 enable password 명령어로 비밀번호를 설정하여 같이 사용하는 경우 enable secret 명령 +어로 설정한 비밀번호의 우선순위가 높으며 보안상 비밀번호 서로 다르게 입력해야 함 +Router# config terminal +Router(config)# username <사용자 이름> secret <비밀번호> +Step 6) Password-Encryption 서비스 설정 +구성파일(running-config/startup-config)에 평문 비밀번호를 양방향 암호화로 저장하여 노출을 방지, 해 +독 가능한 알고리즘(비즈네르 암호)을 사용하기 때문에 구성정보에서 비밀번호를 제거하고 출력해야 +하는 경우 show tech-support 명령어를 사용 +Router# config terminal +Router(config)# service password-encryption +Router(config)# end +Router# show running-config +enable secret 5 $1$mERr$9WCswBwUv6WeC6M8kNSs8 +enable password 7 0822455D0A1648121C0A0E082F +l Juniper Junos +Step 1) root authentication 설정을 이용하여 [edit system] 레벨에서 비밀번호 암호화 설정 +[edit] +user@host#show +Step 2) 기본적으로 비밀번호를 암호화 저장하며, encrypted-password 옵션은 이미 암호화된 비밀번호 해시를 +직접 입력할 때 사용 +[edit] +user@host# set system root-authentication encrypted-password <암호화된 비밀번호> + + +![이미지 398-0](images/p0398_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +399 +N-04 +(상) +네트워크 장비 > 1. 계정 관리 +계정 잠금 임계값 설정 +개요 +점검 내용 +사용자 계정에 대해 로그인 실패 임계값이 설정되어 있는지 점검 +점검 목적 +로그인 실패 임계값 초과 시 일정 시간 동안 계정 잠금을 실시하여 공격자의 자유로운 암호 추측 시도 및 +리소스 낭비를 차단하고 무차별 대입 공격 등 비밀번호 탈취 공격을 무력화하기 위함 +보안 위협 +로그인 실패 시 일정 시간 동안 계정 잠금을 하지 않은 경우, 공격자의 자동화된 암호 추측 공격이 +가능하고 비밀번호 탈취 공격(무차별 대입 공격, 사전 대입 공격 등)의 인증 요청에 대해 설정된 +비밀번호와 일치할 때까지 지속적으로 응답하여 해당 계정의 비밀번호가 유출될 위험이 존재함 +참고 +※ 로그인 실패 임계값: 시스템에 로그인 시 몇 번의 로그인 실패 이후 로그인을 차단할 것인지 +결정하는 값 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Passport, Juniper, Piolink 등 +판단 기준 +양호 : 로그인 실패 임계값이 5회 이하의 값으로 설정된 경우 +취약 : 로그인 실패 임계값이 설정되어 있지 않거나, 5회 초과의 값으로 설정된 경우 +조치 방법 +로그인 실패 임계값을 5회 이하로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) 현재 설정된 보안 정책 확인 +Router# show running-config +1. login block-for 사용 확인 + +## 2. 로그인 실패 임계값 확인 + +Step 2) 로그인 실패 임계값 설정 확인 +Router# show login +로그인 실패 임계값 설정 확인 +Step 3) 로그인 실패 임계값 초과 후 계정 잠금 설정 +login block-for 설정 +Router# config terminal +Router(config)# login block-for <계정 잠금 시간> attempts <로그인 실패 횟수(default: 3)> within <로그 + + +![이미지 399-0](images/p0399_img0.png) + + +--- + +| 한국인터넷진흥원 | +400 +인 실패 허용 시간 범위(default: 15)> +l Juniper +Step 1) root authentication 설정을 이용하여 [edit system] 레벨에서 syslog 설정 확인 +user@host> configure +[edit] +user@host# show version +Step 2) 로그인 실패 임계값 설정 +user@host> configure +[edit system login retry-options] +user@host# set tries-before-disconnect <로그인 실패 횟수(default: 3)> +Step 3) 로그인 실패 임계값 초과 후 계정 잠금 시간 설정 +user@host> configure +[edit system login retry-options] +user@host# set lockout-period <계정 잠금 시간> + + +![이미지 400-0](images/p0400_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +401 +N-05 +(중) +네트워크 장비 > 1. 계정 관리 +사용자·명령어별 권한 설정 +개요 +점검 내용 +네트워크 장비 사용자의 업무에 따라 계정별로 장비 관리 권한을 차등(관리자 권한은 최소한의 계정만 +허용) 부여하고 있는지 점검 +점검 목적 +계정별 권한에 따라 장비의 사용 및 설정 가능한 기능을 제한하는지 확인하기 위함 +보안 위협 +계정별 권한이 차등 부여되어 있지 않은 경우, 일반 계정으로 장비의 모든 기능을 제어할 수 있어 일반 +계정이 비인가자에 노출되었을 때 비인가자가 획득한 계정 정보를 통해 네트워크 장비에 접근하여 +장비의 설정(ACL) 변경, 삭제 등의 행위를 하여 장비의 가용성(해당 장비를 통해 통신하는 정보시스템 +간 데이터 전송 불가) 저하 문제가 발생할 위험이 존재함 +참고 +※ 관리자 계정: 장비의 모든 기능(계정 생성 및 권한 부여, 장비 정책 설정, 모든 명령어 사용 가능 +등)을 제한 없이 사용하거나 설정할 수 있는 계정 +※ 일반 계정: 장비의 일부 기능(모니터링, 룰셋 적용, 일부 명령어만 사용 등) 만 사용하거나 설정할 수 +있는 계정 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Juniper, Piolink 등 +판단 기준 +양호 : 업무에 맞게 계정의 권한이 차등 부여된 경우 +취약 : 업무에 맞게 계정의 권한이 차등 부여되지 않은 경우 +조치 방법 +업무에 맞게 계정별 권한 차등(관리자 권한 최소화) 부여 +※ 한 명의 관리자가 네트워크 장비를 관리할 경우는 해당하지 않음 +조치 시 영향 +해당 명령어 실행 시 권한 부족으로 실행되지 않을 수 있음 +점검 및 조치 사례 +l Cisco IOS +Step 1) 사용자·명령어별 레벨 설정 확인 +Router# show privilege +Step 2) 사용자별 권한 수준 지정 +Router# config terminal +Router(config)# 계정명 [ID] privilege [1-15] secret [PASS] 또는 +Router(config)# 계정명 [ID] privilege [1-15] password [PASS] +Step 3) 명령어별 권한 수준 지정 +Router(config)# privilege exec level [1-15] [서비스명] + + +![이미지 401-0](images/p0401_img0.png) + + +--- + +| 한국인터넷진흥원 | +402 +아래의 중요한 명령어에는 반드시 레벨 15를 적용해야 함 +connect, telnet, rlogin, show ip access-list, show logging +Router# config terminal +Router(config)# privilege exec level 15 connect +Router(config)# privilege exec level 15 telnet +Router(config)# privilege exec level 15 rlogin +Router(config)# privilege exec level 15 show ip access-list +Router(config)# privilege exec level 15 show logging +※ 시스코 IOS에서는 0에서 15까지 16개의 서로 다른 권한 수준을 규정하고 있으며, 레벨 1과 레벨 15는 기본적 +으로 정의되어 있음 +※ 사용자 EXEC 모드는 레벨 1에서 실행되며 privileged EXEC 모드는 레벨 15에서 실행되고, IOS 각 명령어는 +레벨 1이나 레벨 15 중 어느 하나의 레벨이 사전에 기본적으로 지정되어 있음 +※ 레벨 1에서는 라우터의 설정 조회만 가능하고 레벨 15에서는 라우터의 전체 설정을 조회하고 변경할 수 있으 +므로 중요한 명령어의 권한 수준을 높여서 제한하는 것이 보안상 안전함 + + +![이미지 402-0](images/p0402_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +403 +l Radware Alteon +Step 1) 사용자의 접근 레벨이 7단계로 나누어져 있는지 확인 +사용자 계정 / 기본 비밀번호 +설명 +User /User +User는 스위치 관리에 대한 직접적인 책임이 없지만 모든 스위치 상태 정보와 통계 자료를 +볼 수 있음 +그러나 스위치의 어떤 설정도 바꿀 수 없음 +SLB Operator / slboper +SLB Operator는 Web 서버들과 다른 인터넷 서비스의 로드를 관리함 +부가적으로 모든 스위치 정보와 통계를 볼 수 있으며, Server Load Balancing 운영 +메뉴를 사용하는 서버의 사용 가능/사용 불가능을 설정할 수 있음 +Layer4 Operator / l4oper +Layer4 Operator는 공유된 인터넷 서비스들에 따른 라인의 트래픽을 관리함 +SLB Operator와 같은 접근 레벨을 가지고 있고, 공유된 인터넷 서비스들에 따른 라인의 +트래픽을 관리하는 운영자를 위한 운영적인 명령어에 접근할 수 있도록 제공하는 위해서 +접근 레벨은 향후에 사용하기 위해 예약되어 있음 +Operator / oper +Operator는 모든 스위치의 기능을 관리함 +부가적으로 SLB Operator 기능과 포트나 전반적인 스위치를 재설정할 수 있음 +SLB Administrator / +slbadmin +SLB Administrator는 웹서버들과 다른 인터넷 서비스들과 그것에 대한 로드를 설정 및 +관리 할 수 있음 +부가적으로 SLB Operator 기능들과 설정 필터들이나 대역폭 관리를 하는 것을 제외한 +Server Load Balancing 메뉴에 매개변수를 설정할 수 있음 +Layer4 Administrator / +l4admin +Layer4 Administrator는 공유된 인터넷 서비스들에 따른 라인에 대한 트래픽을 설정 및 +관리함 +부가적으로 SLB Administrator 기능들, 설정 필터들이나 대역폭 관리 하는 것을 포함한 +Server Load Balancing 메뉴에 모든 매개변수를 설정할 수 있음 +Administrator / admin +superuser Administrator는 user와 administrator 비밀번호를 둘 다 변경할 수 있으며, +Web 스위치의 모든 메뉴, 정보 그리고 설정 명령어들에 사용할 수 있음 +Step 2) switch로 접속 +Step 3) # cfg +Step 4) # sys +Step 5) 다음 중 해당하는 경우를 선택 +# /user/명령어 +usrpw - user 암호 설정 및 변경 +sopw - SLB operator 암호 설정 및 변경 + + +![이미지 403-0](images/p0403_img0.png) + + +--- + +| 한국인터넷진흥원 | +404 +l4opw - L4 operator 암호 설정 및 변경 +opw - operator 암호 설정 및 변경 +sapw - SLB administrator 암호 설정 및 변경 +l4apw - L4 administrator 암호 설정 및 변경 +admpw - administrator 암호 설정 및 변경 +Step 6) 암호 및 설정 변경 +Step 7) # apply +Step 8) # save +l Juniper Junos +Step 1) [edit system login]에서 superuser, read-only 클래스를 분리, 운영하는지 확인 +Step 2) [edit system login] hierarchy level: +Step 3) [edit system] +login {10 +class class-name { +allow-commands “regular-expression”; +deny-commands “regular-expression”; +idle-timeout minutes; +permissions [ permissions ]; +} +} +※ 장비 구성 변경 시 사용하는 superuser 클래스와 monitoring 용으로 사용하는 read-only 클래스를 분리하여 사 +용할 것을 권장함. 장비 내 기본적으로 다음과 같은 클래스별 사용 권한 설정 및 세부 옵션 추가로 기능 제한 +을 할 수 있고, 특정 명령어 사용 제한을 계정마다 따로 설정할 수 있으므로 특정한 사용자 계정의 생성이 필 +요한 경우 사용 권한을 부여해야 함 + + +![이미지 404-0](images/p0404_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +405 +Class-name +Ability +Operator +clear, network, reset, trace, view +read-only +view +Superuser +all +unauthorized +None +l Piolink PLOS +Step 1) 슈퍼 유저(root)와 일반 유저로 권한을 부여하여 관리하는지 확인 +Step 2) 디폴트 계정인 슈퍼 유저(root)와 관리목적에 따라 신규로 등록할 수 있는 일반 유저, 2단계로 나누어져 +있음. 슈퍼 유저는 모든 권한이 부여되어 있으나 일반 유저의 경우 장비의 설정을 변경할 수 있는 권한 +이 없음. 따라서 사용자의 업무 및 권한에 따라 계정을 부여하여 관리하는 것이 보안상 중요함 + + +![이미지 405-0](images/p0405_img0.png) + + +--- + +| 한국인터넷진흥원 | +406 +N-06 +(상) +네트워크 장비 > 2. 접근 관리 +VTY 접근(ACL) 설정 +개요 +점검 내용 +원격 터미널(VTY)을 통해 네트워크 장비 접근 시 지정된 IP에서만 접근할 수 있도록 설정되어 있는지 +점검 +점검 목적 +지정된 IP만 네트워크 장비에 접근하여 비인가자의 터미널 접근을 원천적으로 차단하기 위함 +보안 위협 +지정된 IP만 네트워크 장비에 접근하도록 설정되어 있지 않을 경우, 비인가자가 터미널 접근 시도 +공격(무차별 대입 공격, 사전 대입 공격 등)을 시도하여 관리자 계정 비밀번호 획득 후 네트워크 장비에 +접근하여 장비 설정(기능, ACL정책) 변경 및 삭제 등의 행위를 통해 네트워크 장비를 경유하는 +데이터의 유출 및 가용성 저하 등을 발생시킬 수 있는 위험이 존재함 +참고 +※ VTY(Virtual Type Terminal): 가상 유형 터미널의 약어. 가상 터미널 라인(virtual terminal +line)이라는 용어가 더 흔하게 사용되며 네트워크 장비를 원격 프로토콜(ssh)에서 관리하기 위한 +터미널 서비스 +※ 기반시설 시스템은 VTY를 통한 접근을 원칙적으로 금지하나, 부득이 VTY를 사용하여 접근해야 +하는 경우 허용한 시스템만 접근할 수 있게 하여 사용해야 함 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Passport, Juniper, Piolink 등 +판단 기준 +양호 : 가상 터미널(VTY) 접근을 제한하는 ACL을 설정한 경우 +취약 : 가상 터미널(VTY) 접근을 제한하는 ACL을 설정하지 않은 경우 +조치 방법 +가상 터미널(VTY)에 특정 IP주소만 접근할 수 있도록 설정 +조치 시 영향 +access-List를 생성하면 기본 Deny가 되므로 네트워크 담당자를 통해 설정함 +점검 및 조치 사례 +l Cisco IOS +Step 1) Access List 설정하고 VTY 라인에 적용 여부 확인 +Router# show running-config +Step 2) VTY 접근 허용 IP 설정 +Router# config terminal +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# line vty ? +<0X4> First Line number + + +![이미지 406-0](images/p0406_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +407 +Router(config)# line vty 0 4 +Router(config)# access-class in +l Radware Alteon +Step 1) 장비로 접속하여 Telnet 또는 SSH 사용자의 접속 IP 설정 확인(Access Policies) +Step 2) # cfg +# sys +# access +# mgmt +# add +Enter Management Network Address: +Enter Management Network Mask: <서브넷마스크> +# apply +# save +l Passport +Step 1) 장비로 접속하여 Telnet 또는 SSH 사용자의 접속 IP 설정 확인(Access Policies) +Step 2) # config sys access-policy +config/sys/access-policy# enable true +config/sys/access-policy# policy create +config/sys/access-policy# policy +config/sys/access-policy/policy/# enable true +config/sys/access-policy/policy/# accesslevel rwa +config/sys/access-policy/policy/# host +config/sys/access-policy/policy/# service snmp enable +config/sys/access-policy/policy/# service telnet enable +l Juniper Junos +Step 1) firewall filter 설정하고 루프백 인터페이스에 적용 여부 확인 +[edit] +user@host# show + + +![이미지 407-0](images/p0407_img0.png) + + +--- + +| 한국인터넷진흥원 | +408 +Step 2) 관리자 IP 지정 +user@host> configure +[edit] +user@host# edit policy-options +[edit policy-options] +user@host# set prefix-list +Step 3) SSH 서비스에 관리자 IP 외에 접근을 차단하도록 방화벽 필터를 설정 +[edit] +user@host# edit firewall family inet filter +[edit firewall family inet filter ] +user@host# edit term +[edit firewall family inet filter term ] +user@host# set from source-address 0.0.0.0/0 +user@host# set from source-prefix-list except +user@host# set term from protocol tcp +user@host# set from destination-port ssh +user@host# set then log +user@host# set then discard +Step 4) SNMP, ICMP, BGP, OSPF 등 다른 서비스와 프로토콜에 필요한 접근허용 필터를 설정하지 않은 경우 +방화벽 필터의 영향을 받지 않도록 기본 허용으로 구성을 종료 +user@host# edit firewall family inet filter +[edit firewall family inet filter ] +user@host# set term then accept +※ 기본 허용으로 인한 보안 위협이 존재하므로 필요한 서비스와 프로토콜을 허용하고 기본 차단으로 더 강력한 +보안 필터를 구성할 수 있음 +Step 5) 루프백 인터페이스에 방화벽 필터를 적용 +[edit] +user@host# set interfaces lo0 unit 0 family inet filter input + + + +![이미지 408-0](images/p0408_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +409 +l Piolink PLOS +Step 1) Security system access policy configuration 설정 확인 +(config)# show running-config +Step 2) 시스템 접근 설정 모드에서 SSH 서비스에 ACL 설정 +# configure terminal +(config)# security +(config-security)# system +(config-security-system)# access +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol tcp +(config-security-system-access-rule[id])# source-ip +(config-security-system-access-rule[id])# dest-port 22 +(config-security-system-access-rule[id])# interface any +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +Step 3) 시스템 접근 제어 기능의 기본 접근 정책을 차단으로 설정 +(config-security-system-access) # default-policy deny +※ 기본 접근 정책을 차단으로 변경하기 전에 관리용 포트(mgmt)와 네트워크 장비에 SNMP, ICMP 등 다른 서 +비스와 프로토콜에 필요한 접근 허용 규칙을 모두 설정 + + +![이미지 409-0](images/p0409_img0.png) + + +--- + +| 한국인터넷진흥원 | +410 +N-07 +(상) +네트워크 장비 > 2. 접근 관리 +Session Timeout 설정 +개요 +점검 내용 +기관 정책에 맞게 Session Timeout 설정이 적용되어 있는지 점검 +점검 목적 +Session Timeout 설정 유무를 점검하여 터미널 접속 후 일정 시간(Session Timeout 지정 시간)이 +지난 뒤 터미널 세션이 자동으로 종료되어 관리자의 부재(터미널 작업 중 자리 비움, 작업 완료 후 +터미널 접속을 종료하지 않음) 시 발생 가능한 비인가자의 터미널 접근 통제가 되는지 확인하기 위함 +보안 위협 +Session Timeout 정책이 적용되지 않았을 경우, 관리자 부재 시 비인가자가 네트워크 장비 터미널에 +접속된 컴퓨터를 통해 네트워크 장비의 정책 변경 및 삭제 등의 행위를 할 수 있는 위험이 존재함 +참고 +※ Session Timeout: 터미널 접속 후 유휴 상태일 때 자동으로 터미널 접속을 종료하는 시간 설정 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Juniper, Piolink 등 +판단 기준 +양호 : Session Timeout 시간을 10분 이하로 설정한 경우 +취약 : Session Timeout 시간을 설정하지 않거나 10분 초과로 설정한 경우 +조치 방법 +Session Timeout 설정 (10분 이하 권고) +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) 각 Line Access의 exec-timeout 설정 확인 +Router# show running-config +Step 2) Console +Router# config terminal +Router(config)# line con 0 +Router(config-line)# exec-timeout 5 0 +Step 3) VTY +Router# config terminal +Router(config)# line vty 0 4 +Router(config-line)# exec-timeout 5 0 +Step 4) AUX +Router# config terminal + + +![이미지 410-0](images/p0410_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +411 +Router(config)# line aux 0 +Router(config-line)# exec-timeout 5 0 +l Radware Alteon +Step 1) idle timeout in minutes 설정 확인 +Step 2) # cfg +# sys +# idle +# apply +# save +※ default : 5분 설정 +l Juniper Junos +Step 1) idle-timeout 설정 확인 +[edit] +user@host#show +Step 2) [edit login] +user@host#set class <클래스> idle-timeout <분> +l Piolink PLOS +Step 1) terminal timeout 설정 확인 +Step 2) # configure terminal +(config)# terminal timeout <분> +※ 1분에서 60분 사이의 시간을 설정할 수 있음 + + +![이미지 411-0](images/p0411_img0.png) + + +--- + +| 한국인터넷진흥원 | +412 +N-08 +(중) +네트워크 장비 > 2. 접근 관리 +VTY 접속 시 안전한 프로토콜 사용 +개요 +점검 내용 +네트워크 장비 정책에 암호화 프로토콜(ssh)을 이용한 터미널 접근만 허용하도록 설정되어 있는지 점검 +점검 목적 +암호화 프로토콜을 이용한 터미널 접근만 허용하여 네트워크 터미널 접근 시 전송되는 데이터의 스니핑 +공격에 대한 대비가 되어 있는지 확인하기 위함 +보안 위협 +암호화 프로토콜이 아닌 평문 프로토콜(telnet)을 이용하여 네트워크 장비에 접근할 경우, 네트워크 +스니핑 공격으로 관리자 계정 정보(계정, 비밀번호)가 비인가자에게 유출될 위험이 존재함 +참고 +※ 스니핑(임의 지정) 공격: 스니퍼(Sniffer)는 "컴퓨터 네트워크상에 흘러 다니는 트래픽을 엿듣는 +도청장치"라고 말할 수 있으며 "스니핑"이란 이러한 스니퍼를 이용하여 네트워크상의 데이터를 +도청하는 행위를 말함 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Juniper, Piolink 등 +판단 기준 +양호 : 장비 정책에 VTY 접근 시 암호화 프로토콜(ssh) 이용한 접근만 허용하고 있는 경우 +취약 : 장비 정책에 VTY 접근 시 평문 프로토콜(telnet) 이용한 접근을 허용하고 있는 경우 +조치 방법 +암호화 프로토콜만 VTY에 접근할 수 있도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) SSH 활성화 확인 +Router# show ip ssh +SSH Enabled – version 1.5 +Authentication timeout: 120 secs; Authentication retries: 3 (활성화) +%SSH has not been enabled (비 활성화) +Step 2) Cisco IOS 이미지 확인 +Router# show version +SSHv2 서버를 지원하는 릴리즈별 k9(3DES) 소프트웨어 이미지를 사용하는지 확인 +(예, 7200p-ipbasek9-mz.152-4.M11.bin) +Step 3) SSH 설정 +Router# config terminal + + +![이미지 412-0](images/p0412_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +413 +Router(config)# hostname <호스트명> +Router(config)# ip domain-name <도메인명> +Router(config)# crypto key generate rsa +How many bits in the modulus [512]: 2048 +Router(config)# ip ssh time-out <초> +Router(config)# ip ssh version 2 (SSH 버전 2 사용) +Router(config)# ip ssh authentication-retries [횟수] <- 재시도 횟수 +Step 4) VTY 라인에 SSH 사용 설정 +Router(config)# line vty 0 4 +Router(config-line)# transport input ssh +l Radware Alteon +Step 1) /sys/sshd에서 SSH 활성화 확인 +Step 2) SSH 설정 방법 +# cfg +# /sys/sshd ena +# /sys/sshd on +# apply +# save +l Juniper Junos +Step 1) SSH 버전 확인 +user@host# set ssh +Step 2) SSH 활성화 +[edit] +root# set system services ssh +[edit] +root# commit +Step 3) Telnet 비활성화 + + +![이미지 413-0](images/p0413_img0.png) + + +--- + +| 한국인터넷진흥원 | +414 +[edit] +root# delete system services telnet +[edit] +root# commit +l Piolink PLOS +Step 1) SSH 버전 확인 +(config)# management-access +(config-management-access)# ssh status enable +Step 2) SSH 활성화 +(config)# management-access +(config-management-access)# ssh status enable +(config-management-access)# apply +Step 3) Telnet 비활성화 +(config)# management-access +(config-management-access)# telnet status disable +(config-management-access)# apply + + +![이미지 414-0](images/p0414_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +415 +N-09 +(중) +네트워크 장비 > 2. 접근 관리 +불필요한 보조 입출력 포트 사용 금지 +개요 +점검 내용 +사용하지 않는 보조(AUX) 포트 및 콘솔 점검 +장비 관리나 운용에 쓰이지 않는 포트 및 인터페이스가 비활성화되어 있는지 점검 +점검 목적 +사용하지 않는 보조(Auxiliary) 포트의 사용을 제한하여 불필요한 포트 및 인터페이스를 통한 +비인가자의 접근을 원천적으로 차단하는지 확인하기 위함 +보안 위협 +불필요한 포트 및 인터페이스가 활성화되어 있는 경우, 비인가자가 활성화된 포트 및 인터페이스를 통해 +네트워크 장비에 접근할 수 있는 위험이 존재함 +참고 +※ 보조(AUX) 포트: 모뎀과 연결하여 원격에서 전화를 걸어 접속하거나 다른 네트워크 장비와 null +modem 케이블을 연결하여 접속 +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : 불필요한 포트 및 인터페이스 사용을 제한한 경우 +취약 : 불필요한 포트 및 인터페이스 사용을 제한하지 않은 경우 +조치 방법 +불필요한 포트 및 인터페이스 사용 제한 또는 비활성화 +조치 시 영향 +차단된 포트나 인터페이스를 사용해야 할 경우 별도의 활성화 설정 필요 +점검 및 조치 사례 +l Cisco IOS +Step 1) 불필요한 포트 및 인터페이스 사용 확인 +Router# show running +불필요한 보조 입출력 포트의 오른쪽 끝부분에 Up (활성화) +불필요한 보조 입출력 포트의 오른쪽 끝부분에 Down (비활성화) +Step 2) AUX 포트 접속 차단 +Router# config terminal +Router(config)# line aux 0 +Router(config-line)# no password (어떤 사용자도 접속 금지) +Router(config-line)# transport input none (어떤 입력도 받지 않음) +Router(config-line)# no exec (어떤 명령도 실행 안 됨) +Router(config-line)# exec-timeout 0 1 (1초 지나면 자동 타임아웃) + + +![이미지 415-0](images/p0415_img0.png) + + +--- + +| 한국인터넷진흥원 | +416 +l Juniper Junos +Step 1) 불필요한 포트 및 인터페이스 사용 확인 +user@host>configure +[edit] +user@host#show +root authentication 설정을 이용하여 [edit system] 레벨에서 interface 차단 설정 확인 +Step 2) 보조(AUX) 포트 비활성화 설정 +[edit system ports] +root# set auxiliary disable +[edit system ports] +root# commit + + +![이미지 416-0](images/p0416_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +417 +N-10 +(중) +네트워크 장비 > 2. 접근 관리 +로그인 시 경고 메시지 설정 +개요 +점검 내용 +터미널 접속 화면에 비인가자의 불법 접근에 대한 경고 메시지를 표시하도록 설정되어 있는지 점검 +점검 목적 +경고 메시지 표시 설정 적용 유무를 점검하여 비인가자에게 불법적으로 터미널 접근 시 법적인 처벌에 +대해 경각심을 가질 수 있게 하는지 확인하기 위함 +보안 위협 +터미널 접근 시 경고 메시지가 표시되도록 설정되지 않을 경우, 비인가자가 법 위반에 대한 경각심을 +느끼지 않게 되어 더 많은 공격을 시도할 수 있는 원인이 됨 +참고 +- +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Juniper 등 +판단 기준 +양호 : 로그온 시 접근에 대한 경고 메시지를 설정한 경우 +취약 : 로그온 시 접근에 대한 경고 메시지를 설정하지 않거나 시스템 관련 정보가 노출되는 경우 +조치 방법 +네트워크 장비 접속 시 경고 메시지 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) 배너 설정 내용 확인 +Router# show running-config +Step 2) 배너 설정 +Router# config terminal +Enter configuration commands, one per line. End with CNTL/Z. +Router(config)# banner motd # +Enter TEXT message. End with the character '#'. +<배너 문구 입력> # +Router(config)# banner login # +Enter TEXT message. End with the character '#'. +<배너 문구 입력> # +Router(config)# banner exec # + + +![이미지 417-0](images/p0417_img0.png) + + +--- + +| 한국인터넷진흥원 | +418 +Enter TEXT message. End with the character '#'. +<배너 문구 입력> # +Router(config)# +※ 바람직한 배너 예시 +This system have to access authorized user and only use for officially. +During using equipment, privacy of individuals is not guaranteed. +All access and usage is monitored and recorded and can be provided evidence as court or related organization. +Use of this system constitutes consent to monitoring for these purposes. +l Radware Alteon +Step 1) banner 설정 내용 확인 +Step 2) Banner 설정 +# cfg +# sys +# banner +# apply +# save +l Juniper Junos +Step 1) edit system login 설정 내용 확인 +Step 2) [edit system login] +message text + + +![이미지 418-0](images/p0418_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +419 +N-11 +(중) +네트워크 장비 > 2. 접근 관리 +원격로그 서버 사용 +개요 +점검 내용 +네트워크 장비의 로그를 별도의 원격 로그 서버에 보관하도록 설정하였는지를 점검 +점검 목적 +네트워크 장비의 로그를 별도의 원격 로그 서버에 보관하도록 설정하여 네트워크 장비에 이상이 +발생하거나 로그 저장 공간 부족, 공격자의 로그 삭제나 변조 위험에 대비하기 위함 +보안 위협 +별도의 로그 서버를 통해 로그를 관리하지 않을 경우, 네트워크 장비에 이상이 발생하거나 공격자의 +로그 삭제 및 변조가 일어났을 시 사고 원인 분석에 어려움이 발생함 +참고 +※ 원격 로그 서버: 정보시스템(서버, 네트워크, 보안 장비 등)의 로그를 통합적으로 보관하는 서버 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Juniper, Piolink 등 +판단 기준 +양호 : 별도의 로그 서버를 통해 로그를 관리하는 경우 +취약 : 별도의 로그 서버가 없는 경우 +조치 방법 +Syslog 등을 이용하여 로그 저장 설정 +조치 시 영향 +상세한 로깅 설정은 라우터의 성능에 영향을 미칠 수 있음 +점검 및 조치 사례 +l Cisco IOS +Step 1) Logging 설정 확인 +Router# show running-config +Step 2) Log 정보 확인 +Router# show logging +Step 3) 라우터 로깅 설정 +Router# config terminal +Router(config)# logging on (log를 console 이외도 전달) +Router(config)# logging trap informational (severity level 설정) +Router(config)# logging 192.168.3.1 (syslog 서버) +Router(config)# logging facility local6 (syslog facility 설정) +Router(config)# logging source-interface serial 0 (syslog interface) + + +![이미지 419-0](images/p0419_img0.png) + + +--- + +| 한국인터넷진흥원 | +420 +클래스 명 +설명 +Operator +clear, network, reset, trace, view +read-only +view +Superuser +all +unauthorized +None +l Radware Alteon +Step 1) /syslog/host에서 syslog host 설정 확인 +Step 2) switch로 접속 +Step 3) # cfg +Step 4) # sys +Step 5) 다음과 같이 설정할 수 있음 +# /syslog/host: first syslog host의 IP주소 설정 +# /syslog/host2: second syslog host의 IP주소 설정 +Step 6) # apply +Step 7) # save +l Juniper Junos +Step 1) root authentication 설정을 이용하여 [edit system] 레벨에서 syslog 설정 확인 +user@host> configure +[edit] +user@host# show version +Step 2) user@host> configure +[edit] +user@host# edit system syslog +[edit system syslog] +user@host# set system syslog file message any error +user@host# set system syslog host 192.168.0.245 any any +user@host# set archive files 5 sizes 5m world-readable +(files 5 – 파일 수를 5개지 표시, 5m – 최대 사이즈를 5m까지 허용) + + +![이미지 420-0](images/p0420_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +421 +l Piolink PLOS +Step 1) configure에서 logging 서버 설정 확인 +Step 2) #logging server enable +Step 3) #logging server + + +![이미지 421-0](images/p0421_img0.png) + + +--- + +| 한국인터넷진흥원 | +422 +N-12 +(상) +네트워크 장비 > 3. 패치 관리 +주기적 보안 패치 및 벤더 권고사항 적용 +개요 +점검 내용 +패치 적용 정책에 따라 주기적인 패치를 하고 있는지 점검 +점검 목적 +네트워크 장비의 보안 수준을 높이고 성능 및 기능 향상하기 위함 +보안 위협 +알려진 네트워크 장비의 버그나 취약점을 통한 관리자 권한 획득이나 서비스 거부 공격 등을 발생시킬 +위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +공통 +판단 기준 +양호 : 주기적으로 보안 패치 및 벤더 권고사항을 적용하는 경우 +취약 : 주기적으로 보안 패치 및 벤더 권고사항을 적용하지 않는 경우 +조치 방법 +장비별 제공하는 최신 취약점 정보를 파악 후 최신 패치 및 업그레이드를 수행 +조치 시 영향 +서비스 영향을 고려하여 벤더사와 협의 후 적용 +점검 및 조치 사례 +l Cisco IOS +Step 1) 버전 정보 확인 +Router# show version +l Juniper Junos +Step 1) 버전 정보 확인 +user@host# show version +l 공통 +Step 1) 주기적으로 보안 패치 및 벤더 권고사항을 검토 이후 적용 +Step 2) 패치 식별 + +## 1. 각 네트워크 장비의 하드웨어, 소프트웨어, EOL, 패치 적용 현황을 문서화하여 관리 + + +## 2. 운영 중인 네트워크 장비의 보안 패치 및 벤더 권고사항을 입수 + + + +![이미지 422-0](images/p0422_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +423 +Step 3) 패치 분석 + +## 1. 취약점의 영향도와 발생 가능성을 분석하여 패치 적용 여부와 우선순위를 결정 + + +## 2. 패치 없이 네트워크 장비 설정 변경 등으로 해결이 가능한 경우 대체 조치를 수행 + +Step 4) 패치 테스트 + +## 1. 테스트베드 또는 시뮬레이션에서 운영환경과 최대한 유사하게 테스트 환경 구축 + +GNS3(Graphical Network Simulator): 오픈 소스·무료 소프트웨어로 가상과 실제 네트워크를 에뮬레이 +션, 구성, 테스트, 문제해결을 목적으로 사용 + +## 2. 패치가 식별한 문제를 해결하고 정상 동작하는지 체크리스트를 구성하여 검증 + +Step 5) 패치 적용 + +## 1. 패치 적용 전에 네트워크 장비의 이미지와 설정을 백업하여 복구지점을 생성 + + +## 2. 예비장비를 보유한 경우 운영 장비 설정과 패치를 예비장비에 적용한 후 운영 장비와 교체하고 운영 + +장비는 비상상황에 대비하여 일정 기간 유지 + +## 3. 패치 적용 후 모든 인터페이스와 중요 호스트로의 통신이 정상 동작하는지 확인) + +구분 +보안패치 및 보안권고 정보제공 사이트 +공통 +https://www.krcert.or.kr +Cisco +https://software.cisco.com +https://tools.cisco.com/security/center +Radware +https://portals.radware.com +Passport +https://support.avaya.com/downloads +https://support.avaya.com/security +Juniper +https://support.juniper.net/support/downloads +https://advisory.juniper.net +Piolink +파트너사를 통해 지원 + + +![이미지 423-0](images/p0423_img0.png) + + +--- + +| 한국인터넷진흥원 | +424 +N-13 +(중) +네트워크 장비 > 4. 로그 관리 +로깅 버퍼 크기 설정 +개요 +점검 내용 +버퍼 메모리의 크기를 어느 정도로 설정하고 있는지 점검 +점검 목적 +장비 성능을 고려하여 최대 용량에 가깝도록 버퍼 크기를 설정하도록 함 +보안 위협 +버퍼 메모리의 용량을 초과하는 로그가 저장될 경우 로그 정보를 잃게 되어 침해사고 발생 시 침입 +흔적을 알 수 없는 상황이 발생함 +참고 +※ 버퍼 메모리: 일반적으로 주기억 장치와 중앙 처리 장치 사이의 명령이나 데이터를 일시 유지하는데 +사용되는 고속의 기억 장치. 버퍼 메모리는 주기억 장치보다 메모리 용량은 적지만 고속의 기억 +소자를 사용함으로써 주기억 장치와 중앙 처리 사이의 정보의 흐름을 원활하게 함. 버퍼 메모리를 +달리 로컬 메모리 혹은 캐시(cache)라고도 함 +※ 기본적으로 로그는 파일이 아닌 버퍼 메모리에 저장됨 +※ 최대 버퍼 크기는 65,500byte이며 버퍼 용량을 높게 설정하면 패킷 전달이 안 되는 경우가 발생함. +일반적으로 16Kbyte에서 32Kbyte의 크기가 적당하며, 최대 용량이 16Kbyte에 못 미치는 장비의 +경우 장비 성능을 고려하여 최대 용량에 가깝게 설정하는 것을 권고함 +점검 대상 및 판단 기준 +대상 +Cisco, Piolink 등 +판단 기준 +양호 : 저장되는 로그 데이터보다 버퍼 용량이 큰 경우 +취약 : 저장되는 로그 데이터보다 버퍼 용량이 작은 경우 +조치 방법 +로그에 대한 정보를 확인하여 장비 성능을 고려한 최대 버퍼 크기를 설정 +조치 시 영향 +버퍼 크기가 장비 성능에 비해 큰 경우 라우터의 성능에 영향을 줌 +점검 및 조치 사례 +l Cisco IOS +Step 1) 버퍼 메모리 설정 확인 +Router> enable +Router# show logging 로그에 대한 정보를 확인 +메모리(RAM)에 저장된 로그는 'show logging'으로 확인할 수 있고, 'clear logging'을 실행하거나 RAM +에 저장된 로그는 전원 종료 시 삭제 + + +![이미지 424-0](images/p0424_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +425 +Step 2) 버퍼 메모리 설정 +Router# config terminal +Router(config)# logging on (로그를 메모리에 백업) +Router(config)# logging buffered 16000 (16KByte 할당) +Router(config)# logging buffered information (severity 레벨 설정) +l Piolink PLOS +Step 1) (config)# show logging 로그에 대한 정보를 확인 +Step 2) (config)#logging buffer (설정 범위 1~1000KB, 기본설정 100KB) +(config)#logging priority + + +![이미지 425-0](images/p0425_img0.png) + + +--- + +| 한국인터넷진흥원 | +426 +N-14 +(중) +네트워크 장비 > 4. 로그 관리 +정책에 따른 로깅 설정 +개요 +점검 내용 +정책에 따른 로깅 설정이 이루어지고 있는지 점검 +점검 목적 +로그 정보를 통해 장비 상태, 서비스 정상 여부 파악 및 보안사고 발생 시 원인 파악 및 각종 침해 사실에 +관한 확인을 하기 위함 +보안 위협 +로깅 설정이 되어있지 않을 경우, 원인 규명이 어려우며, 법적 대응을 위한 충분한 증거로 사용할 수 +없음 +참고 +※ 컴퓨터 관리 > 로컬 사용자 및 그룹 > Remote Desktop Users 그룹에서 추가 가능 +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : 로그 기록 정책에 따라 로깅 설정이 되어 있는 경우 +취약 : 로그 기록 정책 미수립 또는 로깅 설정이 미흡한 경우 +조치 방법 +로그 기록 정책을 수립하고 정책에 따른 로깅 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) 로그에 대한 정보 확인 +Router> enable +Router# show logging +l Juniper Junos +Step 1) 로그에 대한 정보 확인 +user@host> configure +[edit] +user@host# show log messages + + +![이미지 426-0](images/p0426_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +427 +l Cisco IOS, Juniper Junos +Step 1) 콘솔 로깅 +콘솔 로그 메시지는 오직 콘솔 포트에서만 보이므로 이 로그를 보기 위해서는 반드시 콘솔 포트에 연결해 +야 함 +Step 2) Buffered 로깅 +Buffered 로깅은 로그를 라우터의 RAM에 저장하는데 이 버퍼가 가득 차게 되면 오래된 로그는 자동으 +로 새로운 로그에 의해 대체됨 +Step 3) Terminal 로깅 +Terminal monitor 명령을 사용하여 로깅을 설정하면 라우터에서 발생하는 로그 메시지를 VTY terminal에 +보냄 +Step 4) Syslog +시스코 라우터는 라우터의 로그 메시지가 외부의 syslog 서버에 저장되도록 설정할 수 있음 +Step 5) SNMP traps +SNMP trap이 설정되면 SNMP는 특별한 상황을 외부의 SNMP 서버에 전송하도록 설정할 수 있음 +Step 6) ACL 침입 로깅 +표준 또는, 확장된 액세스 리스트를 설정할 때 특정한 룰에 매칭하였을 경우 해당 패킷 정보를 로그에 +남기도록 설정할 수 있는데, 이는 액세스 리스트 룰의 끝에 로그나 로그 인풋을 추가하면 됨 +로그 인풋은 로그와는 달리 인터페이스 정보도 함께 남기게 되므로 어떤 인터페이스를 통해 로그가 남 +았는지를 알 수 있음 +※ 라우터에 기본적으로 설정된 로그 파일 설정을 변경하지 않으면 로깅을 효율적으로 사용할 수 없으므로 크게 6 +가지로 이루어진 아래의 방법을 활용해야 함 + + +![이미지 427-0](images/p0427_img0.png) + + +--- + +| 한국인터넷진흥원 | +428 +N-15 +(중) +네트워크 장비 > 4. 로그 관리 +NTP 및 시각 동기화 설정 +개요 +점검 내용 +네트워크 장비의 NTP 서버 연동 및 시간 동기화 설정 적용 여부 점검 +점검 목적 +시스템 운영 또는 보안 사고 발생으로 인한 로그 분석 과정에서 이벤트 간의 인과 관계 파악에 도움을 +주고 로그 자체의 신뢰성을 갖도록 하기 위함 +보안 위협 +시스템 간 시간 동기화 미흡으로 보안 사고 및 장애 발생 시 로그에 대한 신뢰도 확보가 미흡해짐 +참고 +※ IOS 12.2 이전 버전을 사용하는 장비에는 접근 통제(ACL) 설정이 되어 있어야 양호 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Juniper 등 +판단 기준 +양호 : NTP 서버를 통한 시스템 간 실시간 시간 동기화가 설정된 경우 +취약 : NTP 서버와 연동되어 있지 않아 시스템 간 실시간 시간 동기화 설정이 되어있지 않은 경우 +조치 방법 +NTP 사용 시 신뢰할 수 있는 서버로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) NTP 서버 설정 확인 +Router# show running-config +Step 2) Global Configuration 모드에서 ntp server 명령을 실행 +Router# config terminal +Router(config)# ntp server +l Radware Alteon +Step 1) /sys/ntp에서 NTP 서버 설정 확인 +Step 2) # cfg +# /sys/ntp +# on +# prisrvr [NTP 서버 IP] +# intrval [동기화 주기] + + +![이미지 428-0](images/p0428_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +429 +tzone +9:00 +# apply +# save +l Juniper Junos +Step 1) root authentication 설정을 이용하여 [edit system] 레벨에서 NTP 서비스 설정 확인 +user@host> configure +[edit] +user@host# show +Step 2) NTP 서버와 네트워크 장비가 부팅될 때 시간 동기화를 위한 NTP 부트 서버를 설정 +user@host> configure +[edit] +user@host# edit system ntp +[edit system ntp] +user@host# set server +user@host# set boot-server +※ 네트워크 장비와 NTP 서버 간 시간 차이가 1000초 이상 다르면 시간 동기화를 하지 않기 때문에 부팅 단계에서 +정확한 시간을 확보하도록 부트 서버를 구성 + + +![이미지 429-0](images/p0429_img0.png) + + +--- + +| 한국인터넷진흥원 | +430 +N-16 +(하) +네트워크 장비 > 4. 로그 관리 +Timestamp 로그 설정 +개요 +점검 내용 +네트워크 장비 설정 중 timestamp를 설정하여 로그 시간을 기록할 수 있게 하였는지 점검 +점검 목적 +네트워크 장비 로그에 시간을 기록하게 설정하여 공격자의 악의적인 행위를 파악하기 위한 로그의 +신뢰성을 확보하기 위함 +보안 위협 +네트워크 장비에 timestamp를 설정하지 않을 경우, 로그에 시간이 기록되지 않아 공격 및 침입시도에 +관한 정보를 정확히 분석할 수 없고 로그 기록에 대한 신뢰성을 잃게 됨 +참고 +※ timestamp: 네트워크 장비 로그 메시지에 관리자가 지정한 형식으로 시간 정보를 남기도록 하는 +설정 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : timestamp 로그 설정이 되어 있는 경우 +취약 : timestamp 로그 설정이 되어 있지 않은 경우 +조치 방법 +로그에 시간 정보가 기록될 수 있도록 timestamp 로그 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) service timestamps 설정 확인 +Router> enable +Router# show running-config +Step 2) timestamp 로그 설정 + +## 1. 로그 메시지의 타임스탬프를 UTC 시간대로 밀리초 단위까지 표시 + +Router# config terminal +Router(config)# service timestamps log datetime msec show-timezone + +## 2. 로그 메시지의 타임스탬프를 로컬 시간대로 밀리초 단위까지 표시 + +Router(config)# clock timezone KST 9 +Router(config)# service timestamps log datetime msec localtime show-timezone + + +![이미지 430-0](images/p0430_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +431 +N-17 +(상) +네트워크 장비 > 5. 기능 관리 +SNMP 서비스 확인 +개요 +점검 내용 +네트워크 장비의 SNMP 서비스를 사용하지 않는 경우 비활성화 상태인지 점검 +점검 목적 +불필요한 SNMP 서비스 차단하여 SNMP 서비스의 취약점(조작된 MIB 정보를 통한 네트워크 설정 +변경, 전송데이터 평문 전송 등)을 이용한 공격을 차단하기 위함 +보안 위협 +불필요한 SNMP 서비스를 비활성화하지 않은 경우, 비인가자가 SNMP에 무단 접근하여 설정 파일 +열람 및 수정이나 정보 수집 및 관리자 권한 획득, DoS 등 다양한 형태의 공격 위험이 존재함 +참고 +※ SNMP(Simple Network Management Protocol): TCP/IP 기반 네트워크상의 각 호스트에서 +정기적으로 여러 정보를 자동으로 수집하여 네트워크 관리를 하기 위한 프로토콜을 의미하며 v1, +v2, v3 세 가지 버전이 존재하는데 v2까지도 요청, 응답 패킷이 평문으로 전송되기 때문에 +스니핑이 가능하지만, v3 이상부터는 HMAC-MD5 또는 HMAC-SHA 알고리즘 기반의 인증을 +제공함 +※ UDP(User Datagram Protocol): 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 +받는다는 신호 절차를 거치지 않고, 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜 +※ Community String: SNMP는 MIB라는 정보를 주고받기 위해 인증 과정에서 일종의 비밀번호인 +'Community String'을 사용함 +※ DoS(Denial of Service): 시스템을 악의적으로 공격해 해당 시스템의 자원을 부족하게 하여 원래 +의도된 용도로 사용하지 못하게 하는 공격을 말하며 특정 서버에게 수많은 접속 시도를 만들어 다른 +이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP 연결을 바닥내는 등의 공격이 +이 범위에 포함됨 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Passport, Juniper, Piolink 등 +판단 기준 +양호 : 사용하지 않는 SNMP 서비스를 비활성화한 경우 +취약 : 사용하지 않는 SNMP 서비스를 비활성화하지 않은 경우 +조치 방법 +장비별 제공하는 최신 취약점 정보를 파악 후 최신 패치 및 업그레이드를 수행 +조치 시 영향 +SNMP 서비스를 사용하지 않는 경우 비활성화하고, SNMP 서비스를 사용하는 경우 이전 버전보다 +보안 수준이 높은 SNMPv3 사용을 권고 +점검 및 조치 사례 +l Cisco IOS +Step 1) SNMP 설정 확인 +Router# show running-config + + +![이미지 431-0](images/p0431_img0.png) + + +--- + +| 한국인터넷진흥원 | +432 +Step 2) SNMP 서비스 동작 확인 +Router# show snmp +SNMP 서비스 비활성화 시 “%SNMP agent not enabled” 문구 출력 +Step 3) Router# config terminal +Router(config)# no snmp-server +l Radware Alteon +Step 1) SNMP 서비스 확인 +>> Main# /cfg/dump +/c/sys +snmp r +Step 2) >> Main# /cfg/sys/access/snmp +Current SNMP access: disabled +Enter new SNMP access (disabled/read-only/read-write) [d/r/w]: +l Passport +Step 1) SNMP 서비스가 불필요하다면 서비스 중지 +l Juniper Junos +Step 1) snmp 서비스 설정 확인 +user@host# show snmp +Step 2) user@host> configure +user@host# no set snmp community public +l Piolink PLOS +Step 1) SNMP 설정 확인 +switch# show running-config + + +![이미지 432-0](images/p0432_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +433 +N-18 +(상) +네트워크 장비 > 5. 기능 관리 +SNMP Community String 복잡성 설정 +개요 +점검 내용 +SNMP 서비스 사용 시 Community String을 기본 설정(public, private)으로 사용하고 있는지 점검 +점검 목적 +SNMP Community String을 공격자가 쉽게 유추하지 못하도록 설정하여 Community String +탈취에 대한 위험을 줄이기 위함 +보안 위협 +시스템에 기본적으로 설치되는 불필요한 취약 서비스들이 제거되지 않은 경우, 해당 서비스의 +취약점으로 인한 공격이 가능하며, 네트워크 서비스의 경우 열린 포트를 통한 외부 침입의 위험이 +존재함 +참고 +※ OS 버전에 따라 ‘일반적으로 불필요한 서비스’ 목록에 나열된 서비스가 제공되지 않을 수 있음 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Passport, Juniper, Piolink 등 +판단 기준 +양호 : SNMP 서비스를 비활성화하거나 SNMP Community String을 복잡성 기준(영어 대·소문자, +숫자, 특수문자 중 3종류 이상을 조합하여 8자리 이상)에 맞게 설정한 경우 +취약 : SNMP Community String을 기본 설정(public, private)으로 사용하고 있거나, 복잡성 기준에 +맞지 않게 설정한 경우 +조치 방법 +public, private 외 복잡성 기준에 맞는 Community String을 설정 +※ SNMP Community String 복잡성 기준 : 영어 대·소문자, 숫자, 특수문자 중 3종류 이상을 +조합하여 8자리 이상으로 구성 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) SNMP 설정 확인 +Router# show running-config +Step 2) Community String 문자열 변경 +Router# config terminal +Router(config)# snmp-server Community +l Radware Alteon / Passport +Step 1) SNMP 설정에서 Community String 설정 확인 + + +![이미지 433-0](images/p0433_img0.png) + + +--- + +| 한국인터넷진흥원 | +434 +Step 2) Radware Alteon +# cfg/sys/ssnmp +# rcomm - SNMP read community string 을 설정 (최대 32 자, Default String – public) +# wcomm - SNMP write community string 을 설정 (최대 32 자, Default String – private) +# apply +# save +Step 3) Passport +# config snmp-v3 community commname new-commname +l Juniper Junos +Step 1) snmp community 설정에서 Community String 확인 +[edit] +user@host# show +Step 2) [edit] +user@host# set snmp community authorization read-only +l Piolink PLOS +Step 1) snmp community 설정에서 community string 확인 +switch# show running-config +Step 2) switch# configure +switch(config)# snmp +switch(config-snmp)# community +switch(config-snmp)# status enable +switch(config-snmp)# apply + + +![이미지 434-0](images/p0434_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +435 +N-19 +(상) +네트워크 장비 > 5. 기능 관리 +SNMP ACL 설정 +개요 +점검 내용 +SNMP 서비스 사용 시 네트워크 장비 ACL(Access List)을 설정하여 SNMP 접속 대상 호스트를 +지정하여 접근이 가능한 IP를 제한하였는지 점검 +점검 목적 +SNMP ACL 설정을 함으로써 임의의 호스트에서 SNMP 접근을 차단하여 네트워크 정보의 노출을 +제한하기 위함 +보안 위협 +비인가자의 SNMP 접근을 차단하지 않을 경우, 공격자가 Community String 추측 공격 후 MIB +정보를 수정하여 라우팅 정보를 변경하거나 터널링 설정을 하여 내부망에 침투할 수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Passport, Juniper, Piolink 등 +판단 기준 +양호 : SNMP 서비스를 비활성화하거나 SNMP 접근을 제한하는 ACL을 설정한 경우 +취약 : SNMP 접근을 제한하는 ACL을 설정하지 않은 경우 +조치 방법 +SNMP 접근에 대한 ACL(Access List) 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) SNMP 설정 확인 +Router# show running-config +Step 2) Access-List 설정 확인 +Router# show running-config +Step 3) 글로벌 구성 모드에서 snmp-server community 명령어로 ACL 적용 +Router# config terminal +Router(config)# access-list permit +Router(config)# access-list deny any log +Router(config)# snmp-server community RO + + +![이미지 435-0](images/p0435_img0.png) + + +--- + +| 한국인터넷진흥원 | +436 +l Passport +Step 1) config snmp-v3 에서 접근목록 설정 확인 +Step 2) # config snmp-v3 community create [tag] +# config snmp-v3 group-member create [] +# config snmp-v3 group-access create +# config snmp-v3 group-access view [read ] [write +] [notify ] +l Juniper Junos +Step 1) edit snmp 에서 접근목록 설정 확인 +Step 2) [edit snmp] +user@host# edit client-list +[edit snmp client-list ] +user@host# set default restrict +user@host# set +user@host# up +[edit snmp] +user@host# edit community +[edit snmp community ] +user@host#set client-list-name +l Piolink PLOS +Step 1) configuration 모드에서 snmp 접근목록 설정 확인 +Step 2) 시스템 접근 설정 모드에서 SNMP 서비스에 ACL 설정 +# configure terminal +(config)# security +(config-security)# system +(config-security-system)# access +(config-security-system-access)# rule +(config-security-system-access-rule[id])# protocol udp +(config-security-system-access-rule[id])# source-ip + + +![이미지 436-0](images/p0436_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +437 +(config-security-system-access-rule[id])# dest-port 161 +(config-security-system-access-rule[id])# interface any +(config-security-system-access-rule[id])# policy accept +(config-security-system-access-rule[id])# apply +Step 3) 시스템 접근제어 기능의 기본 접근 정책을 차단으로 설정 +(config-security-access)# default-policy deny +※ 기본 접근 정책을 차단으로 변경하기 전에 관리용 포트(mgmt)와 네트워크 장비의 SSH, ICMP 등 다른 서비스와 +프로토콜에 필요한 접근허용 규칙을 모두 설정 + + +![이미지 437-0](images/p0437_img0.png) + + +--- + +| 한국인터넷진흥원 | +438 +N-20 +(상) +네트워크 장비 > 5. 기능 관리 +SNMP Community 권한 설정 +개요 +점검 내용 +SNMP Community에 필요하지 않은 쓰기 권한을 허용하는지 점검 +점검 목적 +불필요한 SNMP Community의 쓰기 권한을 제거함으로써 공격자의 SNMP를 통한 라우터 정보 +수정을 막기 위함 +보안 위협 +SNMP Community 권한이 불필요하게 RW로 설정된 경우, 공격자가 Community String 추측 +공격을 통해 Community String을 탈취했을 시 SNMP를 이용하여 네트워크 설정 정보를 변경하여 +내부망에 침투할 위험이 존재함 +참고 +※ SNMP Community String 권한에는 RO(Read Only)와 RW(Read Write) 모드가 있으며 RO +모드의 경우 네트워크 설정값에 대한 열람만 가능하고 RW 모드는 열람 및 수정을 할 수 있음 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Passport, Juniper, Piolink 등 +판단 기준 +양호 : SNMP 커뮤니티 권한이 읽기 전용(RO)인 경우 +취약 : SNMP 커뮤니티 권한이 불필요하게 읽기 쓰기(RW)인 경우 +조치 방법 +SNMP Community String 권한 설정 (RW 권한 삭제 권고) +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) SNMP 설정 확인 +Router# show running-config +Step 2) SNMP Community String 권한 설정(RW 권한 삭제 권고) +Router# config terminal +Router(config)# snmp-server community RO +Router(config)# snmp-server community RW +l Passport +Step 1) config snmp 에서 SNMP community 권한 확인 +Step 2) SNMP Community String 권한 설정(RW 권한 삭제 권고) + + +![이미지 438-0](images/p0438_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +439 +# config snmp-v3 community create [tag ] +# config snmp-v3 group-member create [] +# config snmp-v3 group-access create +# config snmp-v3 group-access view [read] [write +] [notify ] +l Radware Alteon +Step 1) >> Main# /cfg/sys/access/snmp +Current SNMP access: read-write +Enter new SNMP access (disabled/read-only/read-write) [d/r/w]: r +>> Main# apply +l Juniper Junos +Step 1) root authentication 설정을 이용하여 [edit system] 레벨에서 SNMP community 권한 확인 +[edit] +user@host# show +Step 2) 읽기 쓰기 권한을 설정한 SNMP Community 삭제 +[edit snmp] +user@host# delete community +Step 3) 읽기 전용 권한으로 SNMP Community 설정 +[edit snmp] +user@host# set community authorization read-only +Step 4) SNMPv3는 SNMP 그룹에 읽기 쓰기 권한 제거 +[edit snmp v3 vacm access] +user@host# delete group <그룹> default-context-prefix security-model <보안모델> security-level +<보안 레벨> write-view +l Piolink PLOS +Step 1) switch# configure +switch(config)# snmp +switch(config-snmp)# policy read-only > apply + + +![이미지 439-0](images/p0439_img0.png) + + +--- + +| 한국인터넷진흥원 | +440 +N-21 +(상) +네트워크 장비 > 5. 기능 관리 +TFTP 서비스 차단 +개요 +점검 내용 +네트워크 장비 서비스 중 불필요한 TFTP 서비스가 구동되어 있거나 TFTP 서비스 사용 시 ACL을 +적용하여 허용된 시스템에서만 TFTP 서비스를 사용하도록 설정되어 있는지 점검 +점검 목적 +인증기능이 없는 TFTP 단점을 보완하기 위해 사용이 허용된 시스템만 TFTP 서비스를 사용하게 하여 +TFTP를 이용한 비인가자의 내부 정보 유출을 막고 중요 정보(예: 장비 설정 파일) 등의 정보 유출을 +막기 위함 +보안 위협 +TFTP 서비스는 인증 절차 없이 누구나 사용이 가능한 서비스로 공격자가 TFTP를 통해 악성코드가 +삽입된 파일을 올려 사용자에게 배포할 수 있고, 네트워크 설정 파일이나 중요한 내부 정보를 유출할 수 +있음 +참고 +※ TFTP(Trivial File Transfer Protocol): 임의의 시스템이 원격 시스템으로부터 부팅(Booting)코드 +를 다운로드하는데 사용하는 프로토콜로 UDP 기반으로 포트는 69번을 사용함. FTP와 같은 기능을 +하지만 FTP보다 구현하기 쉽고 사용하기 편하지만, 인증 절차 없이 사용할 수 있어 보안에 취약하고 +데이터 전송 과정에서 데이터가 손실될 수 있는 등 불안정한 단점이 있음 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : TFTP 서비스를 차단한 경우 +취약 : 네트워크 장비의 TFTP 서비스를 차단하지 않은 경우 +조치 방법 +네트워크 장비의 불필요한 TFTP 서비스를 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) TFTP 설정 정보 확인 +Router# show running-config +Step 2) Router# config terminal +Router(config)# no service tftp + + +![이미지 440-0](images/p0440_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +441 +N-22 +(상) +네트워크 장비 > 5. 기능 관리 +Spoofing 방지 필터링 적용 +개요 +점검 내용 +사설 네트워크, 루프백 등 특수 용도로 배정하여 라우팅이 불가능한 IP주소를 스푸핑 방지 +필터링(Anti-Spoofing Filtering)을 적용하여 차단하는지 점검 +점검 목적 +네트워크 경계에서 소스 IP주소가 명백히 위조된 트래픽을 차단하여 IP 스푸핑 기반 DoS 공격으로부터 +인프라를 보호함 +보안 위협 +IP 스푸핑 기반 DoS 공격 트래픽이 네트워크 장비의 한계용량을 초과하는 경우 정상적인 서비스 불가 +참고 +※ IP Spoofing: 호스트의 원본 주소가 아닌 다른 소스 주소로 IP 데이터그램을 조작 +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : 경계 라우터 또는 보안 장비에 스푸핑 방지 필터링을 적용한 경우 +취약 : 경계 라우터 또는 보안 장비에 스푸핑 방지 필터링을 적용하지 않은 경우 +조치 방법 +경계 라우터 또는 보안 장비에서 스푸핑 방지 필터링 적용 +조치 시 영향 +ACL 로그가 과도하게 발생할 경우, 네트워크 장비의 CPU 사용률 증가에 영향을 주므로 로그 설정을 +비활성화 +점검 및 조치 사례 +l Cisco IOS +Step 1) IP spoofing 방지 설정 확인 +Router# show running +Step 2) 스푸핑 방지 필터링 ACL 구성 +access-list 번호는 100~199구간을 사용하여 Extended access-list를 사용 +router# configure terminal +router(config)# access-list deny ip 0.0.0.0 0.255.255.255 any +router(config)# access-list deny ip 10.0.0.0 0.255.255.255 any +router(config)# access-list deny ip 127.0.0.0 0.255.255.255 any +router(config)# access-list deny ip 169.254.0.0 0.0.255.255 any +router(config)# access-list deny ip 172.16.0.0 0.15.255.255 any +router(config)# access-list deny ip 192.0.2.0 0.0.0.255 any +router(config)# access-list deny ip 192.168.0.0 0.0.255.255 any + + +![이미지 441-0](images/p0441_img0.png) + + +--- + +| 한국인터넷진흥원 | +442 +router(config)# access-list deny ip 224.0.0.0 15.255.255.255 any +router(config)# access-list permit ip any any +Step 3) 서비스제공업체(SP)와 연결된 인터페이스에 ACL 적용 +router(config)# interface serial <인터페이스> +router(config-if)# ip access-group in +l Juniper Junos +Step 1) Configure Firewall Filters와 Apply Firewall Filters 설정 확인 +Step 2) 스푸핑 방지 필터링 Firewall Filters 구성 +Step 3) IP 대역 지정 +user@host> configure +[edit] +user@host# edit policy-options +[edit policy-options] +user@host# set prefix-list 0.0.0.0/8 +user@host# set prefix-list 10.0.0.0/8 +user@host# set prefix-list 127.0.0.0/8 +user@host# set prefix-list 169.254.0.0/16 +user@host# set prefix-list 172.16.0.0/12 +user@host# set prefix-list 192.0.2.0/24 +user@host# set prefix-list 192.168.0.0/16 +user@host# set prefix-list 224.0.0.0/4 +Step 4) 방화벽 필터 설정 +[edit] +user@host# edit firewall family inet filter +[edit firewall family inet filter ] +user@host# edit term +[edit firewall family inet filter term ] +user@host# set from source-address +user@host# set then discard +user@host# up + + +![이미지 442-0](images/p0442_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +443 +[edit firewall family inet filter ] +user@host# set term then accept +Step 5) 서비스제공업체(SP)와 연결된 인터페이스에 방화벽 필터를 적용 +[edit] +user@host# set interfaces <인터페이스> unit <유닛> family <패밀리> +filter input +l 공통 +Step 1) 특수 용도 주소 차단(RFC 6890 참조) + +#### 0.0.0.0/8 자체 네트워크(This host on this network, RFC1122) + + +#### 10.0.0.0/8 사설 네트워크(Private-Use, RFC1918) + + +#### 127.0.0.0/8 루프백(Loopback, RFC1122) + + +#### 169.254.0.0/16 링크 로컬(Link Local, RFC3927) + + +#### 172.16.0.0/12 사설 네트워크(Private-Use, RFC1918) + + +#### 192.0.2.0/24 예제 등 문서에서 사용(TEST-NET-1, RFC5737) + + +#### 192.168.0.0/16 사설 네트워크(Private-Use, RFC1918) + + +#### 224.0.0.0/4 멀티캐스트(Multicast, RFC5771) + + + +![이미지 443-0](images/p0443_img0.png) + + +--- + +| 한국인터넷진흥원 | +444 +N-23 +(상) +네트워크 장비 > 5. 기능 관리 +DDoS 공격 방어 설정 또는 DDoS 장비 사용 +개요 +점검 내용 +DDoS 공격 방어 설정을 적용하거나 DDoS 대응 장비를 사용하는지 점검 +점검 목적 +네트워크 장비 또는 DDoS 대응 장비에 DDoS 공격 방어 설정을 적용하여 DDoS 공격 발생 시 피해를 +최소화 +보안 위협 +DDoS 공격으로 인해 사용 가능한 네트워크 및 시스템 리소스 속도가 느려지거나 서버가 손상될 수 +있음 +참고 +※ DDoS(Distributed Denial of Service): 해커에 의해 감염된 다수의 좀비 PC로부터 다량의 +트래픽이 특정 서버로 유입되어 시스템, 네트워크에 가용성을 저해시켜 서비스를 방해하는 공격 +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : 경계 라우터에서 DDoS 공격 방어 설정을 하거나 DDoS 대응 장비를 사용하는 경우 +취약 : 경계 라우터에서 DDoS 공격 방어 설정을 하지 않거나 DDoS 대응 장비를 사용하지 않는 경우 +조치 방법 +DDoS 공격 방어 설정 점검 +조치 시 영향 +필터링 적용 시 사용하는 ACL은 라우터 성능에 많은 영향을 미침 +점검 및 조치 사례 +l Cisco IOS +Step 1) DDoS 방어 설정 요소 확인 +Router# show running +l Juniper Junos +Step 1) DDoS 방어 설정 요소 확인 +[edit] +user@host# show configuration +l 공통 +Step 1) 스푸핑 방지 필터링 등을 제외한 DDoS 공격 방어 설정은 DDoS 공격 발생 시 공격 유형과 상황을 고려 +하여 적용 + + +![이미지 444-0](images/p0444_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +445 +1. ACL(Access Control List) +- 스푸핑 방지 필터링을 사전 적용(N-13) +- DDoS 공격 유형에 따라 공격 대상 IP주소, 프로토콜, 포트를 임시 차단 +2. Rate limiting +- 특정 유형의 트래픽에 대역폭과 일정 시간 동안 전송량을 제한 +- DDoS 공격 유형에 따라 UDP, ICMP, TCP SYN 패킷의 대역폭을 제한함으로써 다른 서비스에 필요 +한 대역폭을 확보 +- 하드웨어 기반 전용 모듈이 없는 경우 정책 수에 따라 라우터의 CPU 부하가 증가 +3. TCP Intercept +- TCP SYN Flooding 공격로부터 서버를 보호하며 Intercept 또는 Watch 모드로 설정 +- Intercept 모드는 SYN 패킷을 서버로 전송하지 않고 라우터가 대신 SYN-ACK를 응답하고 정상적 +으로 TCP 3-way Handshake가 완료되면 서버로 원래 SYN을 전송 +- Watch 모드는 SYN 패킷을 서버로 전달하고 30초 안에 연결 성립이 완료되지 않으면 서버에 RST를 +전송하여 불완전 연결 상태를 정리 +- Intercept 모드는 Watch 모드보다 라우터의 많은 메모리와 CPU를 사용 + + +![이미지 445-0](images/p0445_img0.png) + + +--- + +| 한국인터넷진흥원 | +446 +N-24 +(상) +네트워크 장비 > 5. 기능 관리 +사용하지 않는 인터페이스 비활성화 +개요 +점검 내용 +사용하지 않는 인터페이스가 비활성화 상태인지 점검 +점검 목적 +필요한 인터페이스만 활성화하여 비인가자가 사용하지 않는 인터페이스를 통하여 네트워크에 접근하는 +것을 차단하기 위함 +보안 위협 +사용하지 않는 포트에 연결된 인터페이스를 Shutdown 하지 않을 경우, 물리적인 내부 접근을 통해 +비인가자의 불법적인 네트워크 접근이 가능하게 되며 이로 인하여 네트워크 정보 유출 및 네트워크 +손상이 발생할 수 있음 +참고 +- +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Juniper, Piolink 등 +판단 기준 +양호 : 사용하지 않는 인터페이스가 비활성화된 경우 +취약 : 사용하지 않는 인터페이스가 비활성화되지 않은 경우 +조치 방법 +네트워크 장비에서 사용하지 않는 모든 인터페이스 비활성화 설정 +조치 시 영향 +사용 중인 포트를 비활성화하지 않도록 주의가 필요 +점검 및 조치 사례 +l Cisco IOS +Step 1) 사용하지 않는 인터페이스 확인 +Router# show interface +비활성화한 인터페이스는 Administratively down으로 표시 +Step 2) 사용하지 않는 인터페이스 비활성화(shutdown) +Router# config terminal +Router(config)# interface <인터페이스> +Router(config-line)# shutdown +l Radware Alteon +Step 1) 사용하지 않는 인터페이스 확인 +>> Main# /cfg/dump + + +![이미지 446-0](images/p0446_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +447 +>> Main# /info/link +Step 2) 사용하지 않는 인터페이스 비활성화(dis) +>> Main# /cfg/port <포트>/dis +>> Main# apply +l Juniper Junos +Step 1) 사용하지 않는 인터페이스 확인 +[edit] +user@host# show interface terse +비활성화한 인터페이스는 admin열을 down으로 표시 +Step 2) 사용하지 않는 인터페이스 비활성화(disable) +[edit] +user@host# edit interfaces +[edit interfaces] +user@host# set <인터페이스> disable +l Piolink PLOS +Step 1) 사용하지 않는 인터페이스 확인 +switch# show running-config +switch# show port +Step 2) 사용하지 않는 인터페이스 비활성화(status disable) +switch# configure +switch(config)# port <포트> status disable +switch(config)# apply + + +![이미지 447-0](images/p0447_img0.png) + + +--- + +| 한국인터넷진흥원 | +448 +N-25 +(중) +네트워크 장비 > 5. 기능 관리 +TCP Keepalive 서비스 설정 +개요 +점검 내용 +TCP Keepalive 서비스를 사용하는지 점검 +점검 목적 +네트워크 장비의 Telnet 등 TCP 연결이 원격 호스트 측에 예상치 못한 장애로 비정상 종료된 경우 +네트워크 장비가 해당 연결을 지속하지 않고 해제하도록 TCP Keepalive 서비스를 설정 +보안 위협 +유휴 TCP 세션은 무단 접근 및 하이재킹 공격에 취약 +참고 +※ TCP Keepalive: TCP 연결이 유효한지 확인하기 위해 유휴 연결에 주기적으로 응답을 요구하는 패 +킷을 전송하고 원격 호스트가 일정 시간 동안 응답이 없으면 연결을 끊음 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : TCP Keepalive 서비스를 설정한 경우 +취약 : TCP Keepalive 서비스를 설정하지 않은 경우 +조치 방법 +네트워크 장비에서 TCP Keepalive 서비스를 사용하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) TCP Keepalive 서비스 설정 확인 +Router# show running-config +Step 2) 네트워크 장비로 들어오는 TCP 연결에 TCP Keepalive 서비스를 설정 +Router# config terminal +Router(config) service tcp-keepalives-in +Step 3) 네트워크 장비에서 나가는 TCP 연결에 TCP Keepalive 서비스를 설정 +Router# config terminal +Router(config) service tcp-keepalives-out + + +![이미지 448-0](images/p0448_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +449 +N-26 +(중) +네트워크 장비 > 5. 기능 관리 +Finger 서비스 차단 +개요 +점검 내용 +네트워크 장비 서비스 중 Finger 서비스를 비활성화하고 있는지 점검 +점검 목적 +Finger(사용자 정보 확인 서비스)를 통해 네트워크 외부에서 해당 시스템에 등록된 사용자 정보를 +확인할 수 있어 비인가자에게 사용자 정보가 조회되는 것을 차단하고자 함 +보안 위협 +Ÿ Finger 서비스로 사용하여 네트워크 장비에 로그인한 계정 ID, 접속 IP 등 중요 정보 노출의 위험이 +존재함 +Ÿ Finger 서비스가 활성화되어 있는 경우, 장비의 접속 상태가 노출될 수 있고 VTY(Virtual Type +terminal)의 사용 현황을 원격에서 파악하여 무단 접근을 시도할 위험이 존재함 +참고 +※ Finger(사용자 정보 확인 서비스): finger 서비스는 접속된 시스템에 등록된 사용자뿐만 아니라 +네트워크를 통하여 연결된 다른 시스템에 등록된 사용자들에 대한 자세한 정보를 보여줌 +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : Finger 서비스를 차단하는 경우 +취약 : Finger 서비스를 차단하지 않는 경우 +조치 방법 +장비별 Finger 서비스 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) Finger 서비스 설정 확인 (12.1(5) 및 12.1(5)T 이상은 기본적으로 비활성화) +Router# show running-config +Step 2) Finger 서비스 비활성화 +Router# config terminal +Router(config)# no service finger (이전) +Router(config)# no ip finger +※ 최근 출시되는 IOS는 no service finger 명령 대신 no ip finger 명령을 사용하기도 함 + + +![이미지 449-0](images/p0449_img0.png) + + +--- + +| 한국인터넷진흥원 | +450 +l Juniper Junos +Step 1) root authentication 설정을 이용하여 [edit system] 레벨에서 Finger 서비스 설정 확인 +user@host> configure +[edit] +user@host# show +Step 2) Finger 서비스 비활성화 +user@host> configure +[edit] +user@host# edit system services +[edit system services] +user@host# delete finger +[edit system services] +user@host# commit + + +![이미지 450-0](images/p0450_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +451 +N-27 +(중) +네트워크 장비 > 5. 기능 관리 +웹 서비스 차단 +개요 +점검 내용 +웹 서비스를 이용하여 네트워크 장비를 관리할 경우, 웹 서비스를 비활성화하거나 허용된 IP에서만 +접속할 수 있게 ACL을 적용하였는지 점검 +점검 목적 +허용된 IP만 웹 관리자 페이지에 접속할 수 있도록 설정하는지 점검하여 비인가자가 웹 관리자 페이지를 +공격하여 네트워크 장비를 장악하지 못하도록 하기 위함 +보안 위협 +허용된 IP에서만 웹 관리자 페이지 접속을 가능하게 ACL 적용하지 않을 경우, 공격자가 알려진 웹 +취약점(SQL injection, Command injection 등)이나 자동화된 비밀번호 대입 공격을 통하여 +네트워크 장비의 관리자 권한을 획득하여 시스템 무단 변경, 서비스 중단, 데이터 유출 등이 발생할 +위험이 존재함 +참고 +※ IOS 상의 HTTP 서버를 사용해야만 한다면, HTTP WEB_EXEC 서비스를 비활성화함으로써 +위험을 감소시킬 수 있음 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : 불필요한 웹 서비스를 차단하거나 허용된 IP에서만 웹서비스 관리 페이지에 접속이 가능한 경우 +취약 : 불필요한 웹 서비스를 차단하지 않은 경우 +조치 방법 +HTTP 서비스 차단 또는 HTTP 서버를 관리하는 관리자 접속 IP 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) 불필요한 웹서비스 확인 +Router# show running-config 웹 서비스 설정 확인 +Step 2) 불필요한 웹서비스 관련 설정 +Router# config terminal +Router(config)# no ip http server +Router(config)# no ip http secure-server +Router# config terminal +Router(config)# ip http active-session-modules exclude_webexec +Router(config)# ip http secure-active-session-modules exclude_webexec + + +![이미지 451-0](images/p0451_img0.png) + + +--- + +| 한국인터넷진흥원 | +452 +l Radware Alteon +Step 1) 불필요한 웹서비스 확인 +>> Main# /cfg/dump +>> Main# /info/link +Step 2) 불필요한 웹서비스 관련 설정 +>> Main# /cfg/sys/access/https/https dis +>> Main# /cfg/sys/access/http dis (HTTP는 Alteon 29.5 버전부터 지원하지 않음) +>> Main# apply +l Juniper Junos +Step 1) 불필요한 웹서비스 확인 +[edit] +user@host# show interface terse +비활성화한 인터페이스는 admin열을 down으로 표시 +Step 2) 불필요한 웹서비스 관련 설정 +[edit] +user@host# delete system services web-management +l Piolink PLOS +Step 1) 불필요한 웹서비스 확인 +switch# show running-config +switch# show port +Step 2) 불필요한 웹서비스 관련 설정 +switch# configure +(config)# management-access +(config-management-access)# http status disable +(config-management-access)# https status disable + + +![이미지 452-0](images/p0452_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +453 +N-28 +(중) +네트워크 장비 > 5. 기능 관리 +TCP/UDP small 서비스 차단 +개요 +점검 내용 +TCP/UDP Small 서비스가 제한되어 있는지 점검 +점검 목적 +TCP/UDP Small 서비스를 차단하여 보안성을 높이고자 함 +보안 위협 +TCP/UDP Small 서비스를 차단하지 않을 경우, DoS 공격의 대상이 될 수 있음 +참고 +※ DoS 공격 대상: Cisco 제품의 경우 DoS 공격 대상이 될 수 있는 서비스인 echo, discard, +daytime, chargen 을 기본적으로 제공하며 일반적으로 거의 사용하지 않음 +※ TCP/UDP Small 서비스는 IOS 11.3 이상에서는 기본적으로 서비스가 제거된 상태이므로 Small +서버들이 Default로 Disable 되어있지만 낮은 버전의 경우는 직접 설정해 주어야 함 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : TCP/UDP Small 서비스가 제한된 경우 +취약 : TCP/UDP Small 서비스가 제한되지 않은 경우 +조치 방법 +TCP/UDP Small Service 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) no service tcp-small-servers 및 no service tcp-small-servers 설정 확인 +Router# show running-config +Step 2) Global Configuration 모드에서 TCP/UDP Small 서비스를 비활성화 설정 +Router# config terminal +Router(config)# no service tcp-small-servers +Router(config)# no service udp-small-servers +Router(config)# end + + +![이미지 453-0](images/p0453_img0.png) + + +--- + +| 한국인터넷진흥원 | +454 +N-29 +(중) +네트워크 장비 > 5. 기능 관리 +Bootp 서비스 차단 +개요 +점검 내용 +BOOTP 서비스의 차단 여부 점검 +점검 목적 +BOOTP 서비스를 차단하여 비인가자에게 OS 정보가 노출되는 것을 방지하기 위함 +보안 위협 +BOOTP 서비스를 차단하지 않을 경우, 다른 라우터 상의 OS 사본에 접속, OS 소프트웨어 복사본을 +다운로드하여 시스템 취약점을 악용하거나 악성 코드 삽입의 위험이 존재함 +참고 +※ BOOTP 서비스: 네트워크를 이용하여 사용자가 OS를 로드할 수 있게 하며, 자동으로 IP주소를 +받게 하고, 부팅 파일 정보를 서버로부터 요청하여 부팅하는 데 사용하는 프로토콜 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Juniper 등 +판단 기준 +양호 : BOOTP 서비스가 제한된 경우 +취약 : BOOTP 서비스가 제한되지 않은 경우 +조치 방법 +장비별 BOOTP 서비스 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) ip bootp server 설정 확인 +Router# show running-config +Step 2) BOOTP 차단 설정 +Router# config terminal +Router(config)# no ip bootp server +또는 +DHCP 서비스(DHCP 서버 및 릴레이)는 유지하고 BOOTP만 차단하는 경우 +Router(config)# ip dhcp bootp ignore +※ 라우터를 자동 재부팅하는 취약점이 존재하므로 서비스를 차단하여 방어하기를 권고함 + + +![이미지 454-0](images/p0454_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +455 +l Radware Alteon +Step 1) #bootp disable 설정 확인 +Step 2) BOOTP 차단 설정(dis) +>> Main# /cfg/sys/bootp dis +>> Main# apply +l Juniper Junos +Step 1) bootp 서비스 설정 확인 +user@switch>show configuration & show interfaces detail +Step 2) DHCP 서버 IP주소와 서버가 연결된 스위치에 대한 인터페이스 지정 옵션 제거 +user@switch> configure +[edit] +user@switchr# edit forwarding-options helpers bootp +[edit forwarding-options helpers bootp] +user@switch# no set interface <인터페이스 포트> server <주소> + + +![이미지 455-0](images/p0455_img0.png) + + +--- + +| 한국인터넷진흥원 | +456 +N-30 +(중) +네트워크 장비 > 5. 기능 관리 +CDP 서비스 차단 +개요 +점검 내용 +CDP 서비스를 차단하는지 점검 +점검 목적 +동일 네트워크에 있는 다른 Cisco 장비들의 정보 유출 방지 및 DoS 공격을 차단하기 위함 +보안 위협 +보안이 검증되지 않은 서비스로 비인가자가 다른 Cisco 장비의 정보를 획득할 수 있으며, Routing +Protocol Attack을 통해 네트워크 장비의 DoS(서비스거부 공격)의 위험이 존재함 +참고 +※ CDP(Cisco Discovery Protocol): Cisco 제품의 관리를 목적으로 만든 프로토콜로 같은 +네트워크에 있는 장비들과 정보를 공유하고, 같은 세그먼트에 있는 다른 라우터에 IOS version, +Model, device 등의 정보를 제공함 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : CDP 서비스를 차단하는 경우 +취약 : CDP 서비스를 차단하지 않는 경우 +조치 방법 +Ÿ 장비별 CDP 서비스 제한 설정 +Ÿ CDP는 Cisco 전용 프로토콜이지만 일부 다른 벤더도 지원하며, CDP와 유사한 IEEE 표준인 +LLDP(Link Layer Discovery Protocol, IEEE 802.1AB)도 불필요할 경우 비활성화 +조치 시 영향 +인터넷 전화(VoIP) 구성방식에 따라 IP 전화기와 스위치가 CDP 또는 LLCP를 사용 +점검 및 조치 사례 +l Cisco IOS +Step 1) cdp run, global cdp 설정 확인 +Router# show running-config +Router# show cdp +Step 2) cdp 서비스 차단 설정 +Router# config terminal +Router(config)# no cdp run +Router(config)# interface FastEthernet0/1 +Router(config-if)# no cdp enable +※ CDP를 라우터 전체에서 사용하지 못하도록 하기 위해서는 no cdp run 명령어가 사용되며, 특정 인터페이스 +에서 사용하지 못하도록 하려면 no cdp enable 명령어를 사용함 + + +![이미지 456-0](images/p0456_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +457 +N-31 +(중) +네트워크 장비 > 5. 기능 관리 +Directed-broadcast 차단 +개요 +점검 내용 +Directed-broadcast를 차단하는지 점검 +점검 목적 +Directed-broadcast 서비스 차단을 통해 DoS 공격을 방지하기 위함 +보안 위협 +IP Directed-Broadcast는 Unicast IP 패킷이 특정 서브넷에 도착했을 때 Link-Layer Broadcast로 +전환되는 것을 허용함. 이것은 보통 악의적으로 이용되며, 특히 SMURF 공격에 이용됨 +참고 +※ SMULF 공격: IP Broadcast나 기타 인터넷 운용 측면을 이용하여 인터넷망을 공격하는 행위로 +Broadcast에 대한 응답받을 IP주소를 변조하여 해당 IP주소 호스트에 DoS 공격을 감행하는 공격 +기법 +점검 대상 및 판단 기준 +대상 +Cisco, Alteon, Passport 등 +판단 기준 +양호 : Directed Broadcasts를 차단하는 경우 +취약 : Directed Broadcasts를 차단하지 않는 경우 +조치 방법 +장치별로 Directed Broadcasts 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) Directed-Broadcast 설정 확인 +Router# show running-config +Step 2) Interface Configuration 모드에서 no ip directed-broadcast 명령을 실행하여 비활성화 +Router# config terminal +Router(config)# interface <인터페이스> +Router(config-if)# no ip directed-broadcast +l Radware Alteon +Step 1) dirbr에서 disable 설정 확인 +Step 2) dirbr 서비스 비활성화 +# cfg/l3/frwd + + +![이미지 457-0](images/p0457_img0.png) + + +--- + +| 한국인터넷진흥원 | +458 +# dirbr disable +# apply +# save +l Passport +Step 1) config에서 ip directed-broadcast 설정 확인 +Step 2) directed-broadcast 서비스 비활성화 +# config vlan ip directed-broadcast +# disable + + +![이미지 458-0](images/p0458_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +459 +N-32 +(중) +네트워크 장비 > 5. 기능 관리 +Source Routing 차단 +개요 +점검 내용 +Source Routing을 차단하는지 점검 +점검 목적 +인터페이스마다 no ip source-route를 적용하여 ip spoofing을 차단함 +보안 위협 +공격자가 Source Routing 된 패킷을 네트워크 내부에 발송할 수 있는 경우, 수신된 패킷에 반응하는 +메시지를 가로채어 사용자 호스트를 마치 신뢰 관계에 있는 호스트와 통신하는 것처럼 만들 수 있음 +참고 +※ Source Routing: 송신 측에서 routing 경로 정보를 송신 데이터에 포함해 Routing 시키는 +방법으로 패킷이 전송되는 경로를 각각의 시스템이나 네트워크에 설정된 라우팅 경로를 통하지 +않고 패킷 발송자가 설정할 수 있는 기능임 +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : ip-source-route를 차단하는 경우 +취약 : ip-source-route를 차단하지 않는 경우 +조치 방법 +각 인터페이스에서 ip-source-route 차단 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) Global Configuration 모드에서 no ip source-route 명령어를 실행하여 비활성화 +Router# config terminal +Router(config)# no ip source-route +l Juniper Junos +Step 1) ip source route 설정 확인 +user@host# show route +Step 2) [edit] +user@host# set chassis no-source-route +※ Junos 8.5 버전 이후부터 기본적으로 IPv4 소스 라우팅 비활성화 상태 + + +![이미지 459-0](images/p0459_img0.png) + + +--- + +| 한국인터넷진흥원 | +460 +N-33 +(중) +네트워크 장비 > 5. 기능 관리 +Proxy ARP 차단 +개요 +점검 내용 +Proxy ARP를 차단하는지 점검 +점검 목적 +Proxy ARP 차단으로 IP와 MAC이 관련된 호스트에 대해 정상적인 통신을 유지함 +보안 위협 +Proxy ARP를 차단하지 않을 경우, 악의적인 사용자가 보낸 거짓 IP와 MAC 정보를 보관하게 되며 +이로 인해 호스트와 호스트 사이에서 정상적인 통신이 이루어지지 않을 수 있음 +참고 +※ Proxy ARP: 동일 서브넷에서 다른 호스트를 대신하여 ARP Request에 응답하는 기술 +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : Proxy ARP를 차단하는 경우 +취약 : Proxy ARP를 차단하지 않는 경우 +조치 방법 +각 인터페이스에서 Proxy ARP 비활성화 설정 +조치 시 영향 +게이트웨이 또는 서브넷마스크를 잘못 설정한 호스트가 네트워크 장비의 Proxy ARP에 의해 통신한 +상태인 경우, 가능한 경우를 고려하여 사전조사 등 필요 +점검 및 조치 사례 +l Cisco IOS +Step 1) Interface Configuration 모드에서 no ip proxy-arp 명령어를 실행하여 비활성화 +Router# config terminal +Router(config)# interface <인터페이스> +Router(config-if)# no ip proxy-arp +l Juniper Junos +Step 1) 각 인터페이스에서 proxy-arp 설정을 확인 +user@host# show +Step 2) [edit interfaces <인터페이스> unit <유닛>] +user@host# delete proxy-arp + + +![이미지 460-0](images/p0460_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +461 +N-34 +(중) +네트워크 장비 > 5. 기능 관리 +ICMP unreachable, redirect 차단 +개요 +점검 내용 +ICMP unreachable, ICMP redirect를 차단하는지 점검 +점검 목적 +Ÿ ICMP unreachable 차단으로 DoS 공격을 차단하고 공격자가 네트워크 스캔 시 소요되는 시간을 +길어지게 하여 스캔 공격을 지연 및 차단함 +Ÿ ICMP redirect 차단으로 라우팅 테이블이 변경되는 것을 차단하기 위함 +보안 위협 +Ÿ ICMP unreachable을 차단하지 않을 경우, 공격자의 스캔 공격을 통해 시스템의 현재 운영되고 +있는 상태 정보가 노출될 수 있음 +Ÿ ICMP redirect을 차단하지 않을 경우, 호스트 패킷 경로를 다시 지정하는 과정에서 특정 목적지로 +가기 위해 고의로 패킷 경로를 변경하여 가로챌 수 있음 +Ÿ 연속적으로 ICMP의 port-unreachable frame을 보내서 시스템의 성능을 저하 또는 마비시킬 수 +있음 +참고 +※ ICMP unreachable: ICMP unreachable 메시지에는 특정 호스트 및 게이트웨이에 패킷을 +보냈을 때 어떠한 이유로 전달될 수 없는지 나타내는 코드들을 포함하고 있음 +※ ICMP redirect: ICMP redirect는 라우터가 송신 측 호스트에 적합하지 않은 경로로 설정되어 +있으면 해당 호스트에 대한 최적 경로를 다시 지정해주는 용도로 사용됨 +점검 대상 및 판단 기준 +대상 +Cisco, Juniper 등 +판단 기준 +양호 : ICMP unreachable, ICMP redirect를 차단하는 경우 +취약 : ICMP unreachable, ICMP redirect를 차단하지 않는 경우 +조치 방법 +각 인터페이스에서 ICMP unreachables, ICMP redirects 비활성화 +조치 시 영향 +특정 경로를 찾아갈 때 많은 시간이 경과 될 수 있음 +점검 및 조치 사례 +l Cisco IOS +Step 1) 각 인터페이스에서 no ip unreachables과 no ip redirects 설정을 확인 +Router> enable +Router# show running-config +※ Global Configuration 모드의 ip icmp redirects 명령어는 ICMP redirection 메시지 유형을 호스트 또는 서브넷으 +로 지정하는 명령어로 ICMP redirection 차단과 무관 + + +![이미지 461-0](images/p0461_img0.png) + + +--- + +| 한국인터넷진흥원 | +462 +Step 2) Interface Configuration 모드에서 no ip unreachables과 no ip redirects 명령어를 실행 +Router# config terminal +Router(config)# interface <인터페이스> +Router(config-if)# no ip unreachables +Router(config-if)# no ip redirects +Router(config-if)# end +※ Null Interface는 no ip unreachables 외 다른 모든 명령어는 무시됨 +l Juniper Junos +Step 1) ICMP unreachables , ICMP redirects 적용 확인 +user@host# show +Step 2) ICMP redirect 차단 +전체 장비에서 ICMP redirect 비활성화 +[edit system] +user@host#set no-redirects +또는 특정 인터페이스에서 ICMP Redirect 비활성화 +[edit interfaces] +user@host#set <인터페이스> unit <유닛> family <패밀리> no-redirects + + +![이미지 462-0](images/p0462_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +463 +N-35 +(중) +네트워크 장비 > 5. 기능 관리 +identd 서비스 차단 +개요 +점검 내용 +identd 서비스를 차단하는지 점검 +점검 목적 +불필요한 identd 서비스를 차단하여 잠재적인 취약점 및 공격에 노출 방지 +보안 위협 +identd 서비스는 TCP 세션의 사용자 식별이 가능하여 비인가자에게 사용자 정보가 노출될 수 있음 +참고 +※ identd 서비스: 특정 TCP 연결을 시작한 사용자의 신원을 확인하는 서비스(113/TCP) +※ 사용자가 서버로 TCP 연결을 시작한 경우 서버는 클라이언트의 identd 서비스에 TCP 세션의 포트 +번호를 보내 클라이언트 운영체제와 사용자 ID를 조회 가능 +※ 클라이언트의 정보에 의존하기 때문에 인증 또는 접근제어 용도로 사용할 수 없음 +※ IOS 12.2 이상 Default로 차단되어 있음 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : identd 서비스를 차단하는 경우 +취약 : identd 서비스를 차단하지 않는 경우 +조치 방법 +idnetd 서비스 비활성화 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) identd 서비스 확인 +Router> enable +Router# show running-config +Step 2) Global Configuration 모드에서 no ip identd 명령어를 실행하여 비활성화 +Router# config terminal +Router(config)# no ip identd +※ 기본적으로 ip identd 설정을 별도로 설정하지 않으면 비활성화 상태이며, 구성에서 no ip identd 명령어가 표시되 +지 않음 + + +![이미지 463-0](images/p0463_img0.png) + + +--- + +| 한국인터넷진흥원 | +464 +N-36 +(중) +네트워크 장비 > 5. 기능 관리 +Domain Lookup 차단 +개요 +점검 내용 +Domain Lookup을 차단하는지 점검 +점검 목적 +명령어를 잘못 입력할 때 발생하는 불필요한 Domain Lookup을 차단 +보안 위협 +불필요한 DNS broadcast traffic과 사용자 대기시간 발생 +참고 +※ Domain Lookup: Cisco 장비는 Privileged Exec 모드에서 명령어가 아닌 문자열을 입력하면 +호스트 이름으로 간주하고 Domain Lookup을 시도하며, DNS를 설정하지 않은 경우, DNS +Broadcast Query를 수행하는 1분여간 사용자 입력을 받지 않음 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : Domain Lookup을 차단하는 경우 +취약 : Domain Lookup을 차단하지 않은 경우 +조치 방법 +Domain Lookup 비활성화 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) no ip domain-lookup 설정을 확인 +Router> enable +Router# show running-config +Step 2) Global Configuration 모드에서 no ip domain lookup 명령어를 실행 +Router# config terminal +Router(config)# no ip domain lookup +또는 +Router(config)# no ip domain-lookup +※ IOS 12.2 버전부터 ip domain-lookup을 ip domain lookup로 변경하고 두 명령어 모두 지원 + + +![이미지 464-0](images/p0464_img0.png) + + +--- + + +## 05. 네트워크 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +465 +N-37 +(중) +네트워크 장비 > 5. 기능 관리 +pad 차단 +개요 +점검 내용 +PAD 서비스를 차단하는지 점검 +점검 목적 +X.25 프로토콜을 사용하지 않는 경우 PAD 서비스를 중지 +보안 위협 +PAD와 같이 불필요한 서비스를 차단하지 않을 경우, 잠재적인 취약점 및 공격에 노출될 수 있음 +참고 +※ PAD(Packet Assembler/Disassembler): X.25 패킷 교환망에 패킷 처리 기능이 없는 비 동기형 +단말기의 연결을 제공하는 서비스, 비 동기형 단말기로부터 수신한 문자 스트림을 X.25 패킷으로 +분해하고 반대로 X.25 패킷을 문자 스트림으로 재조합하여 상호 전송 +※ X.25: 패킷교환 데이터 전송 서비스를 위한 ITU-T 표준 프로토콜(1976년 개발), 패킷 교환설비와 +패킷형 단말기의 통신절차는 X.25, 패킷 교환설비와 비동기형 단말기의 통신절차는 X.3, X.28, +X.29를 사용 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : PAD 서비스를 차단하는 경우 +취약 : PAD 서비스를 차단하지 않은 경우 +조치 방법 +PAD 서비스 비활성화 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) no service pad 설정을 확인 +Router> enable +Router# show running-config +Step 2) Global Configuration 모드에서 no service pad 명령어를 사용하여 비활성화 +Router# config terminal +Router(config)# no service pad + + +![이미지 465-0](images/p0465_img0.png) + + +--- + +| 한국인터넷진흥원 | +466 +N-38 +(중) +네트워크 장비 > 5. 기능 관리 +mask-reply 차단 +개요 +점검 내용 +mask-reply를 차단하는지 점검 +점검 목적 +내부 네트워크의 서브넷마스크 정보를 요청하는 ICMP 메시지에 네트워크 장비가 응답하지 않도록 +mask-reply를 차단 설정 +보안 위협 +mask-reply를 차단하지 않는 경우 비인가자에게 내부 서브 네트워크의 서브넷마스크 정보가 노출될 +수 있음 +참고 +※ mask-reply: 네트워크 장비는 ICMP Address Mask Request 메시지에 대한 응답으로 +인터페이스의 서브넷마스크 정보를 제공 +점검 대상 및 판단 기준 +대상 +Cisco 등 +판단 기준 +양호 : mask-reply를 차단하는 경우 +취약 : mask-reply를 차단하지 않은 경우 +조치 방법 +각 인터페이스에서 mask-reply 비활성화 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Cisco IOS +Step 1) mask-reply 차단 여부 확인 +Router# show running-config +Step 2) show ip interface 실행 결과에서 ICMP Address mask-reply 차단 여부 확인 +Router# show ip interface +Serial1/0 is up, line protocol is up (connected) +ICMP mask replies are never sent +Step 3) Interface Configuration 모드에서 no ip mask-reply 명령어를 사용하여 비활성화 +Router# config terminal +Router(config)# interface <인터페이스> +Router(config-if)# no ip mask-reply +※ 기본적으로 ip mask-reply 명령은 비활성화 상태이기 때문에 구성 내용에서 no ip mask-reply 명령이 표시되지 않음 + + +![이미지 466-0](images/p0466_img0.png) + + +--- + +제어시스템 +Chapter 06 + +## 1. 계정 관리················································································································472 + + +## 2. 서비스 관리·············································································································484 + + +## 3. 패치 관리················································································································501 + + +## 4. 네트워크 접근통제···································································································507 + + +## 5. 물리적 접근통제······································································································519 + + +## 6. 보안위협 탐지··········································································································522 + + +## 7. 복구 대응················································································································525 + + +## 8. 보안 관리················································································································539 + + +## 9. 교육 훈련················································································································551 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 467-0](images/p0467_img0.png) + + +--- + +| 한국인터넷진흥원 | +468 +01 +제어시스템 장비 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +계정 기능이 있는 제어시스템 구성요소에 대해 계정을 안전하게 설정하여 사용 +상 +C-01 +제어시스템 계정의 로그인/로그아웃, 사용 명령 등 사용기록을 저장 +상 +C-02 +제어시스템 계정입력 시 비밀번호 마스킹 처리, 입력값 에러 발생 시 제공 정보 제한 수행 +상 +C-03 +제어시스템 계정을 관리, 운영, 유지보수 등 용도에 따라 분리하고 운용 +중 +C-04 +제어시스템 계정에 대해 관리, 운영, 유지보수 등 용도에 맞는 최소 권한 부여 +중 +C-05 +제어시스템 운전원별 유일 계정 부여 또는 시간별 사용자 기록 유지 +중 +C-06 + +## 2. 서비스 관리 + +점검항목 +항목 +중요도 +항목코드 +제어시스템 구성요소에 대한 시간 동기화 수행 +상 +C-07 +제어시스템에 불필요한 서비스 및 취약한 서비스 제거 또는 보완대책 수행 +상 +C-08 +제어시스템 구성요소에 대한 관리자 페이지 운영 시 이에 대한 접근통제(사전인가 +접근만 허용) 수행 +중 +C-09 +제어시스템 내 파일/디렉터리 접근 권한 및 신뢰 관계를 적절히 부여 +중 +C-10 +제어시스템 내 제어와 직접적인 관련이 없는 불필요 프로그램 삭제 +중 +C-11 +제어시스템 운영 정보, 제어 명령 등 중요 정보에 대한 위변조 및 replay 공격 방지 대책 적용 +중 +C-12 +제어시스템 내 전달되는 제어 명령 및 파라미터의 정상 범위를 식별하고 관리 +하 +C-13 +제어시스템 내 사용자 통신 세션에 대해 세션 타임아웃 적용 +하 +C-14 +GPS 스푸핑/재밍 공격 등 시각 동기화 서비스를 교란하기 위한 공격에 대비한 보안 조치 수행 +하 +C-15 + + +![이미지 468-0](images/p0468_img0.png) + + +![이미지 468-1](images/p0468_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +469 + +## 3. 패치 관리 + +점검항목 +항목 +중요도 +항목코드 +제어시스템에 대한 최신 업데이트, 보안패치를 안전하게 적용하기 위한 제조사 +협력방안, 테스트 방안 등의 절차 수립 +상 +C-16 +외부 업체, 인터넷을 통한 다운로드 등의 경로로 반입된 각종 패치·업데이트 파일에 +대해 무결성 검증 및 클린 PC를 통한 악성코드 존재 여부 검사 수행 +상 +C-17 +제어시스템 구성요소의 알려진 취약점에 대해 보안패치 적용 또는 상응하는 대응책 적용 +상 +C-18 +운영체제, 응용프로그램, 펌웨어 등에 대한 안정성이 확인된 최신 버전의 소프트웨어 +사용 및 기술지원이 종료된 제품 미사용 +중 +C-19 +제어시스템 개선, 신규 시스템 도입, 패치 및 수정 시, 안전성을 테스트하기 위한 +테스트베드 또는 시험환경을 구축 +하 +C-20 + +## 4. 네트워크 접근통제 + +점검항목 +항목 +중요도 +항목코드 +제어 네트워크는 업무망, 인터넷, CCTV망 등 외부망과 물리적으로 분리하여 사용 +상 +C-21 +제어 네트워크 외부로 자료전달 시 물리적 일방향 자료전달 환경을 구축하여 외부에서 +제어 네트워크로의 침입을 차단 +상 +C-22 +제어 네트워크에 무선인터넷, 테더링, 외부 유선망 등의 외부망 연결을 제한하고 +주기적으로 점검 +상 +C-23 +제어 네트워크에 비인가된 시스템/기기에 대한 연결 및 접속을 차단 +상 +C-24 +물리적 일방향 자료전달 환경의 올바른 동작 및 운용에 대한 주기적인 점검 수행 +상 +C-25 +제어 네트워크를 용도에 따라 세분화하고, 접근제어를 수행하여 제어시스템 운영에 +필요한 네트워크, 시스템 간의 통신만 허용 +하 +C-26 + + +![이미지 469-0](images/p0469_img0.png) + + +--- + +| 한국인터넷진흥원 | +470 + +## 5. 물리적 접근통제 + +점검항목 +항목 +중요도 +항목코드 +제어시스템에 대해 네트워크 포트, USB 포트 등 외부 연결 접점에 대해 허가받은 +사항을 제외하고 모두 물리적 또는 논리적으로 차단 +상 +C-27 +제어시스템 구성요소를 물리적으로 보호할 수 있는 조치 적용(잠금장치가 있는 함체, +랙, 수납 책상 등) +중 +C-28 + +## 6. 보안위협 탐지 + +점검항목 +항목 +중요도 +항목코드 +백신 프로그램 설치가 가능한 제어시스템 구성요소에 대해 악성코드 감염 및 차단을 +위한 백신 프로그램 설치 +상 +C-29 +이상 트래픽 발생 탐지 등 제어시스템 내의 보안 관리를 위해 적합한 침입탐지시스템 +등을 구축 및 운용하고, 구축된 보안 솔루션 및 보안 장비에서 탐지한 보안 이벤트에 +대해 모니터링 수행 +하 +C-30 + +## 7. 복구 대응 + +점검항목 +항목 +중요도 +항목코드 +제어시스템 대상 사이버 위기대응 매뉴얼을 수립 +상 +C-31 +제어시스템 대상 사이버 위기대응 훈련을 정기적으로 시행 +상 +C-32 +제어시스템 침해사고 대응을 위한 제어시스템 설정, 중요 데이터 등을 백업 및 관리 +상 +C-33 +제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 수립 +중 +C-34 +제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 훈련을 +정기적으로 시행 +중 +C-35 +제어시스템 조작 불능에 대비하여 수작업 운전 매뉴얼 작성 및 교육훈련 시행 +중 +C-36 +제어시스템의 각종 이벤트에 대한 로그를 관리하기 위한 중앙집중식 로그 관리 수행 +하 +C-37 + + +![이미지 470-0](images/p0470_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +471 + +## 8. 보안 관리 + +점검항목 +항목 +중요도 +항목코드 +제어시스템 구성요소에 대한 자산정보(담당자, 펌웨어 버전, 설치 SW 등)를 항상 +최신으로 유지관리 +상 +C-43 +제어시스템 중요 구성요소가 설치된 장소를 보호구역으로 설정 +상 +C-44 +제어시스템에서 USB 등 이동형 저장 매체를 사용해야 하는 경우, 사전정의된 정책에 +따라 사용 +상 +C-45 +제어 네트워크에 연결되는 외부 정보통신기기 반‧출입 시 클린존 통과, 관리대장 작성 +등 관리절차 마련 +상 +C-46 +제어시스템의 특성을 반영한 정보보안 정책, 지침을 수립 +중 +C-47 +제어시스템 운영 업무에 대해 표준 업무 절차서를 작성하고 적용 +중 +C-48 +제어시스템 유지보수를 위한 전용 장비(노트북 등)를 마련하고 관련 정책을 시행 +하 +C-49 +허가에 의한 로직 변경 정책 수립 +상 +C-50 + +## 9. 교육 훈련 + +점검항목 +항목 +중요도 +항목코드 +제어시스템 운전원, 관리자, 유지보수인력, 보안 인력에 대해 직무별 직무교육을 +정기적으로 실시 +하 +C-51 +점검항목 +항목 +중요도 +항목코드 +제어시스템 구성요소의 기준 형상을 설정하고 변경 및 업데이트 시 형상관리 수행 +하 +C-38 +제어시스템 주요 장비 및 제어 네트워크 장비에 대해 이중화 +하 +C-39 +제어시스템 보호를 위한 화재탐지 설비 및 화재 진압설비를 구비 +하 +C-40 +제어시스템 보호를 위한 누수탐지 설비 및 침수 대응 장비 구비 +하 +C-41 +제어시스템에 대하여 정기적으로 사이버 위험 시나리오를 식별하고, 완화방안 수립 +하 +C-42 + + +![이미지 471-0](images/p0471_img0.png) + + +--- + +| 한국인터넷진흥원 | +472 +C-01 +(상) +제어시스템 > 1. 계정 관리 +계정 기능이 있는 제어시스템 구성요소에 대해 계정을 안전하게 설정하여 사용 +개요 +점검 내용 +제어시스템의 계정 기능이 존재하는 모든 설비에 대해 계정을 안전하게 설정하여 인가되지 않은 +사용자의 접근 차단 여부 점검 +점검 목적 +제어시스템 구성요소의 계정 기능을 활성화하고 안전하게 설정하여 제어시스템이 인가되지 않은 +접근으로부터 보호할 수 있도록 함 +보안 위협 +제어시스템 구성요소에 계정을 안전하게 설정하지 않는 경우 비인가자가 구성요소에 접근하여 이를 +장악하여 구성요소 내 정보 획득 및 악의적으로 조작할 수 있음 +참고 +※ 제어시스템의 기본 구성도 및 각 구성요소 +제어시스템의 구성요소로는 크게 제어 H/W, 제어 S/W, 네트워크 장비, 정보시스템, 보안 장비로 +이루어져 있으며, 이러한 구성요소에 대한 예시 및 일반적인 구성도는 다음 그림과 같음 +[ 제어시스템의 기본 구성도 및 각 구성요소 예시 ] +※ HMI 및 PLC 예시 +[ HMI 화면 예시 ] +[ PLC 기기 예시 ] + + +![이미지 472-0](images/p0472_img0.png) + + +![이미지 472-1](images/p0472_img1.png) + + +![이미지 472-2](images/p0472_img2.png) + + +![이미지 472-3](images/p0472_img3.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +473 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소 전체 중 계정 기능이 있는 구성요소를 식별 +§ 계정 기능이 존재하지 않은 기기에 대해서는 자체적으로 보안대책을 수립할 것을 권고 +[Windows OS] +⚫운영자, 관리자별 계정 발급 확인 +- 시작 > 제어판 > 사용자 계정 +⚫(개선조치 시) 제어시스템 운영자, 관리자별 계정 추가 +- 시작 > 제어판 > 사용자 계정 > 추가 +[Unix OS] +⚫운영자, 관리자별 계정 발급 확인 +- #cat /etc/passwd +⚫(개선조치 시) 제어시스템 운영자, 관리자별 계정 추가 +- #useradd 계정명 +Step 2) 식별된 구성요소를 대상으로 계정 기능의 활성화 여부 확인 +§ PLC, DCS 등의 제어 H/W와 이를 운영하는 EWS, OWS와 같은 제어 S/W의 경우 제조사별로 계정 +기능의 관리, 확인 과정이 상이하므로 해당 제품의 매뉴얼을 통해 확인하거나 개발사에 문의하여 확인 +[ 제어 H/W 제품 중 식별기능 설정 화면 예시 ] +점검 대상 및 판단 기준 +대상 +제어시스템 구성요소 전체 +판단 기준 +양호 : 계정 기능을 활성화하고 안전하게 설정하여 인가된 사용자만 접근이 가능한 경우 +취약 : 계정 기능을 비활성화하거나 안전하지 않게 설정하여 비인가 된 사용자가 접근이 가능한 경우 +조치 방법 +제어시스템 구성요소의 계정 기능을 활성화하고 안전하게 설정 +조치 시 영향 +일부 제어시스템 설정에 따라 접속 오류 발생 가능 + + +![이미지 473-0](images/p0473_img0.png) + + +![이미지 473-1](images/p0473_img1.png) + + +--- + +| 한국인터넷진흥원 | +474 +[ 제어 H/W 제품 중 사용자 계정 관리 화면 예시 ] +Step 3) 계정 이름 및 비밀번호를 안전하게 설정했는지 여부 확인 +§ 기본 계정 및 비밀번호를 변경했는지 확인 +§ 비밀번호는 문자, 숫자, 특수문자를 조합한 8자리 이상으로 설정되어 있는지 확인 + + +![이미지 474-0](images/p0474_img0.png) + + +![이미지 474-1](images/p0474_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +475 +C-02 +(상) +제어시스템 > 1. 계정 관리 +제어시스템 계정의 로그인/로그아웃, 사용 명령 등 사용기록을 저장 +개요 +점검 내용 +운영자, 관리자 등의 계정 접근을 허용하는 제어시스템의 계정 접속 로그인 및 사용 기록(Log) 저장 여부 점검 +점검 목적 +제어시스템(운영체제, HMI 등)의 계정 접속 로그인 및 사용 기록(Log)이 저장되도록 하여 계정 사용에 +대한 책임 추적성(Accountability)을 높일 수 있도록 함 +보안 위협 +계정 접속 로그인 및 사용내역 등의 접속기록(Log)이 생성되지 않거나 접속기록의 내용이 미흡(예시: +사용내역 누락)하여 책임 추적이 어려울 수 있음 +참고 +※ 접속기록(Log): 시스템(운영체제) 또는 응용 프로그램의 접속기록은 접속자(예시: ID), 접속일시, +접속자의 위치(예시: IP주소), 사용내역(예시: 운영체제의 명령 실행 또는 제어설비에 밸브 조작 명령 +실행) 등 4가지 유형의 정보를 포함하는 데이터 +점검 대상 및 판단 기준 +대상 +대상 시스템에 접속하기 위해 계정(ID) 접근이 요구되는 제어시스템 구성요소 +판단 기준 +양호 : 대상 기기에 로그인/로그아웃, 사용 명령 등의 사용기록을 저장하고 있는 경우 +취약 : 대상 기기에 로그인/로그아웃, 사용 명령 등의 사용기록이 저장되지 않아 확인할 수 없는 경우 +조치 방법 +대상 구성요소에 사용기록이 저장되도록 설정을 적용하거나, 다른 기기를 이용하여 대상 구성요소의 +사용기록이 저장되도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 로그인/로그아웃, 사용 명령 등의 사용기록이 저장되도록 설정되어 있는지 확인 +§ 생성된 사용기록(별도 파일 또는 DB)의 내용에 사용자의 로그인, 로그아웃, 사용 명령의 내용을 포함 +하고 있는지 확인 +[ 제어 H/W의 사용기록 저장 화면 확인 예시 ] + + +![이미지 475-0](images/p0475_img0.png) + + +![이미지 475-1](images/p0475_img1.png) + + +--- + +| 한국인터넷진흥원 | +476 +[Windows OS] +⚫로깅 설정 및 로그 파일의 로깅 정보 확인 +- 제어판 > 관리 도구 > 로컬 보안 정책 > 보안 설정 > 로컬 정책 > 감사 정책 +- 계정 로그온 이벤트 감사 > “성공”, “실패” 설정 +- 권한 사용 감사 > “성공”, “실패” 설정 +[Unix OS] +⚫#cat /etc/syslog.conf 파일에서 로그 설정 확인 +- #cat /var/adm/loginlog, authlog, sulog의 파일을 열어 로깅 정보 확인 +⚫#vi /etc/syslog.conf 파일 설정 변경 +⚫Unix 계열 운영체제의 생성 로그 종류 +- auth : 로그인 등의 인증 프로그램 유형이 발생한 메시지 +- authpriv : 개인인증을 요구하는 프로그램 유형이 발생한 메시지 +- cron : cron이나 at과 같은 프로그램이 발생하는 메시지 +- daemon : telnetd, ftpd 등과 같은 데몬이 발생한 메시지 +- kern : 커널이 발생한 메시지 +- lpr : 프린터 유형의 프로그램이 발생한 메시지 +- mail : 메일시스템에서 발생한 메시지 +- news : 유즈넷 뉴스 프로그램 유형이 발생한 메시지 +- syslog : syslog 프로그램 유형이 발생한 메시지 +- user : 사용자 프로세스 +- uucp : 시스템이 발생한 메시지 +- local0 : 여분으로 남겨둔 유형 +※ 조치 시, 시스템 운영 특성상 사용기록을 남기도록 변경할 수 없는 경우, 기기 운영기관에서 자체적으로 +이에 대한 보완대책 수립 + + +![이미지 476-0](images/p0476_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +477 +C-03 +(상) +제어시스템 > 1. 계정 관리 +제어시스템 계정입력 시 비밀번호 마스킹 처리, 입력값 에러 발생 시 제공 정보 제한 수행 +개요 +점검 내용 +인증과정에서 사용자가 입력하는 비밀번호의 노출을 방지하도록 마스킹 처리를 하고, 그 외 HMI 등의 +제어시스템 입력창 중 문자열 입력이 가능한 경우 허용된 범위(예시: 문자 유형, 길이 등)의 값만 +입력되도록 하고, 허용된 범위를 초과하는 비정상적인 값이 입력 시 오류 화면 등 발생 여부 점검 +점검 목적 +제어시스템 운영 중에 의도치 않은 실수로 비밀번호가 노출될 수 있으며 이를 방지하기 위해서 사용자가 +입력하는 비밀번호가 노출되지 않도록 하고, 사용자의 입력에 대한 응답으로 제공되는 오류 메시지로 +인해 공격자에게 제어시스템의 정보가 노출될 수 있어 이를 차단하기 위함 +보안 위협 +Ÿ 내부자가 자신보다 많은 권한을 가진 사용자가 입력하는 비밀번호를 획득하여 이를 이용하여 +악의적인 목적으로 제어시스템 전체를 장악할 위험이 존재함 +Ÿ 내부자가 HMI 등의 제어시스템 입력창에 비정상적인 값을 입력하여 그 결과 화면에 노출된 민감한 +정보를 수집하여 악의적인 목적으로 사용할 위험이 존재함 +Ÿ 해당 취약점이 알려져 있는 경우 이를 악용한 악성코드 감염을 통해 HMI 등의 제어시스템 권한을 +이용한 제어설비 오동작 등의 피해가 발생할 위험이 존재함 +참고 +※ 본 취약점은 제어시스템을 개발, 납품하는 업체가 개발단계에서부터 보안 취약점이 최소화되도록 +해야 하고, 운영단계에서 확인된 취약점이 있다면 제품을 이용하는 회사, 기관 등에 해당 취약점이 +조치된 업데이트 및 보안패치를 배포되도록 하는 것이 바람직함 +점검 대상 및 판단 기준 +대상 +제어시스템 구성요소 전체 +판단 기준 +양호 : 비밀번호 입력 시 마스킹 처리를 하고 있으며, 허용된 범위를 초과하는 값을 입력해도 불필요한 +민감 정보 등이 노출되지 않는 경우 +취약 : 비밀번호 입력 시 비밀번호가 노출되고 있거나, 허용된 범위를 초과하는 값을 입력하는 경우 +불필요한 정보가 노출되는 오류 화면이 나타나는 경우 +조치 방법 +비밀번호 입력 시 반드시 마스킹 처리를 하도록 하고, 모든 사용자 입력과정에서 허용된 범위의 값만이 +입력되도록 하고 비정상적인 값이 입력되더라도 불필요한 정보가 노출되는 오류 화면 등이 나타나지 +않도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 비밀번호 입력이 필요한 모든 제어시스템 구성요소에서 비밀번호 입력 시, 비밀번호가 마스킹 처리되고 +있는지 확인 + + +![이미지 477-0](images/p0477_img0.png) + + +--- + +| 한국인터넷진흥원 | +478 +[ 비밀번호 마스킹 처리 예시 ] +Step 2) HMI 등의 소프트웨어에 운영자가 입력 가능한 입력창이 있는 경우, 해당 입력창에 다음 각 호와 같은 +유형의 비정상적인 값을 입력했을 때 사전 정의된 결과(예시: 정상적인 값을 입력하도록 하는 경고 +메시지 출력)가 나타나는지 확인 +§ 허용되는 문자 유형이 아닌 다른 문자 유형을 입력 +(예시: 숫자만 입력해야 하는 입력창에 문자나 특수문자를 입력) +§ 허용되는 문자 길이를 초과하여 입력 +(예시: 보통 4개 문자만 입력하면 되나 8개 문자를 입력) +§ DB 서버와 연동된 경우, DB Query 수준에 해당하는 문자열을 입력 +Step 3) Step 2의 결과와 달리 비정상적인 에러 페이지가 나타나고 특히 해당 에러 페이지에 제어시스템에 +관련된 주요 시스템 정보가 노출된다면 해당 소프트웨어의 설정을 변경하거나, 불가능한 경우 해당 +구성요소의 개발업체와 협의하여 보완대책 마련 + + +![이미지 478-0](images/p0478_img0.png) + + +![이미지 478-1](images/p0478_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +479 +C-04 +(중) +제어시스템 > 1. 계정 관리 +제어시스템 계정을 관리, 운영, 유지보수 등 용도에 따라 분리하고 운용 +개요 +점검 내용 +제어시스템(HMI, DCS 등)에서 사용하고 있는 계정의 업무에 따른(관리, 운영, 유지보수 등) 분리 운용 +여부 점검 +점검 목적 +제어시스템(HMI, DCS 등)에서 사용하고 있는 계정을 용도 별로 분리 사용하도록 하여 인가되지 않은 +접근을 차단하고 책임추적이 가능하도록 하기 위함 +보안 위협 +용도에 따라 계정을 분리, 관리하지 않는 경우, 용도별 권한 분리가 불가능하여 권한 남용, 실수로 인한 +기기의 오작동 발생할 수 있으며 사고 발생 시 사고 원인 파악 및 향후 예방 활동에 필수적인 사고 분석 +제한의 위험이 존재함 +참고 +※ 본 점검항목은 제어시스템 계정은 관리 업무, 운영 업무, 유지보수 업무에 따라 서로 다른 계정을 +사용하고 있는지 점검하는 것으로, 이는 용도별 권한을 분리하여 부여하기 위한 필수 항목임 +점검 대상 및 판단 기준 +대상 +제어시스템 운영 환경에서 계정 접근이 요구되는 전체 구성요소 +판단 기준 +양호 : 계정 기능을 사용하는 제어시스템 구성요소 전체에서 용도별로 계정을 분리하여 사용하고 있는 경우 +취약 : 계정 기능을 사용하는 제어시스템 구성요소 전체에서 용도별로 계정을 분리하지 않고 사용하고 있는 경우 +조치 방법 +계정 기능을 사용하는 제어시스템 구성요소에서 용도별로 계정을 분리하여 운영하도록 설정 +조치 시 영향 +일부 제어시스템 설정에 따라 접속 오류 발생 가능 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 전체의 계정 목록을 확인하여 용도에 맞게 계정이 각각 분리되어 운영되고 있는지 확인 +§ 하나의 계정으로 서로 다른 업무를 가진 사용자가 동시에 사용하고 있는 경우, 서로 다른 계정을 사용 +하도록 조치 +§ 관리 용도, 운영 용도, 유지보수 용도에 따라 각각 계정을 다르게 부여하고 있어야 하며, 다만 점검 +대상의 필요성, 또는 환경에 따라 해당 용도별 사용자가 없는 경우 분리되지 않은 경우도 예외로 허용 +가능 +※ PLC, DCS 등의 제어 H/W와 이를 운영하는 EWS, OWS와 같은 제어 S/W의 경우 제조사 별로 계정 기능의 +관리, 확인 과정이 상이하므로 해당 제품의 매뉴얼을 통해 확인하거나 개발사에 문의하여 확인 + + +![이미지 479-0](images/p0479_img0.png) + + +--- + +| 한국인터넷진흥원 | +480 +C-05 +(중) +제어시스템 > 1. 계정 관리 +제어시스템 계정에 대해 관리, 운영, 유지보수 등 용도에 맞는 최소 권한 부여 +개요 +점검 내용 +제어시스템(HMI, DCS 등)에서 사용하고 있는 계정에 대해 용도에 맞는 최소 권한 부여 여부 점검 +점검 목적 +제어시스템(HMI, DCS 등)에서 사용하고 있는 계정을 용도별로 권한을 부여하여 불필요한 권한으로 +발생하는 업무 사고를 차단할 수 있는지 점검하기 위함 +보안 위협 +용도에 따라 계정을 관리하지 않는 경우, 이를 통해 불필요한 권한을 할당받은 사용자가 악의적인 +목적으로 제어시스템을 공격하거나, 잘못된 운전 조작 사고 등이 발생할 위험이 존재함 +참고 +※ 본 점검항목은 용도별 최소 권한 부여 여부를 점검하는 것으로, 용도별 계정을 분리 사용하고 있어야 함 +※ 제어시스템 기기에서는 계정 관리 기능에서 계정별 권한을 분리하여 할당할 수 있는 기능을 +제공하고 있으며 이를 활용하여 용도별 권한을 분리하여 사용 가능함 +[ PLC의 계정 관리 화면 예시 ] +점검 대상 및 판단 기준 +대상 +제어시스템 운영 환경에서 계정 접근이 요구되는 전체 구성요소 +판단 기준 +양호 : 계정에 따라 각 용도에 맞는 최소한의 권한을 부여하여 사용하고 있는 경우 +취약 : 계정에 따라 각 용도에 맞지 않는 권한이 부여되어 사용하고 있는 경우 +조치 방법 +계정의 용도에 따른 별도 권한 부여 설정 +조치 시 영향 +일부 제어시스템 설정에 따라 접속 오류 발생 가능 +점검 및 조치 사례 +l 공통 +Step 1) 용도별 계정으로 기기에 접근하는 경우, 용도에 맞도록 권한이 분리되고 있는지 확인 +§ 관리 용도의 계정, 운영 용도의 계정, 유지보수 용도의 계정에 따라 각각 권한을 다르게 부여하고 있어 +야 하며, 다만 점검 대상의 필요성, 또는 환경에 따라 용도별 구분이 없는 경우 예외로 허용 가능 + + +![이미지 480-0](images/p0480_img0.png) + + +![이미지 480-1](images/p0480_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +481 +(예시: 관리자 1명이 운영을 동시에 하며 다른 사용자가 없는 경우) + + +![이미지 481-0](images/p0481_img0.png) + + +--- + +| 한국인터넷진흥원 | +482 +C-06 +(중) +제어시스템 > 1. 계정 관리 +제어시스템 운전원별 유일 계정 부여 또는 시간별 사용자 기록 유지 +개요 +점검 내용 +제어시스템 운전원별로 다른 계정을 사용하거나 운전 시간에 따른 사용자(운전원) 기록 유지 여부 점검 +점검 목적 +제어시스템 운전원별로 다른 계정을 사용하거나 운전 시간에 따른 기록을 유지하도록 하여 계정 사용에 +대한 책임 추적성(Accountability)을 높일 수 있도록 하기 위함 +보안 위협 +편의를 위해 다수의 운전원이 공용 계정을 사용하고, 시간별 사용자 기록이 존재하지 않는 경우 +비밀번호 노출, 권한 남용, 사용자 책임추적 어려움 등의 우려가 있으며, 사고 발생 시 이에 대한 분석이 +제한될 위험이 존재함 +참고 +※ 책임 추적성(Accountability) : 정보시스템의 접속자, 접속시간, 접속 위치, 업무내역 등을 식별하여 +장애 원인, 침해사고 경위 등을 조사하는 과정에서 책임을 규명할 수 있도록 하는 것을 의미 +점검 대상 및 판단 기준 +대상 +운전원이 접근하는 모든 제어시스템 구성요소 +판단 기준 +양호 : 모든 운전원별로 다른 계정을 사용하거나 시간별 사용자 기록을 유지하고 있는 경우 +취약 : 운전원이 공용 계정을 사용하고 시간별 사용자 기록이 존재하지 않는 경우 +조치 방법 +모든 운전원별로 다른 계정을 사용하도록 계정 관리 또는 시간별 사용자 기록을 작성하도록 정책 변경 설정 +조치 시 영향 +일부 제어시스템 설정에 따라 접속 오류 발생 가능 +점검 및 조치 사례 +l 공통 +Step 1) HMI, PLC 등의 제어 H/W, 제어 S/W에서 각 시스템 및 기기에 접근하기 위하여 사용하는 계정(ID) +목록과 각 계정을 사용하는 운영자 및 관리자 명단을 확인하여 유일한 계정을 사용하고 있는지 확인 +※ PLC, DCS 등의 제어 H/W와 이를 운영하는 EWS, OWS와 같은 제어 S/W의 경우 제조사 별로 계정 기능의 +관리, 확인 과정이 상이하므로 해당 제품의 매뉴얼을 통해 확인하거나 개발사에 문의하여 확인 + + +![이미지 482-0](images/p0482_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +483 +[ 제어 S/W의 계정 관리 기능 예시 ] +Step 2) 제어시스템 내 정보시스템의 운영체제 계정(ID) 목록과 각 계정을 사용하는 인원의 명단을 확인(이 경우 +다음 사항을 포함하여 점검) +§ 공용 계정을 사용하는지 확인 +[Windows OS] +⚫운영자, 관리자별 계정 발급 확인 +- 시작 > 제어판 > 사용자 계정 +⚫(개선조치 시) 제어시스템 운영자, 관리자별 계정 추가 +- 시작 > 제어판 > 사용자 계정 > 추가 +[Unix OS] +⚫운영자, 관리자별 계정 발급 확인 +- #cat /etc/passwd +⚫(개선조치 시) 제어시스템 운영자, 관리자별 계정 추가 +- #useradd 계정명 +Step 3) Step 1, Step 2에서 공용 계정을 사용하고 있는 경우, 제어시스템을 운영하는 사용자의 시간별 +사용기록을 남기는지 확인 +Step 4) 사용기록은 사용자의 신원을 식별할 수 있는 방안을 포함하는지 확인 +(예시: 근무자 표 작성 및 근무자 접근 단말 기록 등) + + +![이미지 483-0](images/p0483_img0.png) + + +![이미지 483-1](images/p0483_img1.png) + + +--- + +| 한국인터넷진흥원 | +484 +C-07 +(상) +제어시스템 > 2. 서비스 관리 +제어시스템 구성요소에 대한 시각 동기화 수행 +개요 +점검 내용 +제어시스템 구성요소들이 같은 시간을 유지할 수 있도록 하는 시각 동기화 기능의 제공 여부 점검 +점검 목적 +제어시스템에서 시각 동기화 기능을 제공하여 제어시스템 서비스의 안정성 유지와 사고 발생 시 이에 +대한 로그 분석, 원인 파악 등이 가능한지 확인하기 위함 +보안 위협 +시각 동기화가 이루어지지 않는 경우, 구성요소 간 주고받는 제어 명령의 안정성에 문제가 발생할 수 +있으며 제어시스템의 로그 분석이 어려워 이로 인해 공격자가 발각되지 않고 공격 기법을 숨기는 등의 +위험이 존재함 +참고 +※ 제어 H/W 등의 일부 구성요소에서 시간 동기화 기능이 NTP 또는 PTP와 같은 프로토콜을 +이용하지 않으나 상시 연결되어있는 EWS 또는 OWS 등의 다른 구성요소와 시간 동기화를 +수행하고 있고, 해당 구성요소가 운영체제 등을 통해 정상적으로 시간 동기화를 수행하고 있는 경우 +정상적으로 시간 동기화를 수행하는 것으로 볼 수 있음 +※ 정확한 시간 동기화를 위해서는 GPS 서버를 구축하여 시간 동기화에 활용할 수 있으며 이를 권장 +[ 시각 동기화를 위한 GPS 서버 구축 예시 ] +점검 대상 및 판단 기준 +대상 +모든 제어시스템 구성요소 +판단 기준 +양호 : 모든 제어시스템 구성요소에서 NTP 또는 PTP 등의 시각 동기화 기능을 제공하고 있고, 설정되어 +운용되고 있는 경우 +취약 : 제어시스템 구성요소 중에서 시각 동기화 기능이 존재하지 않거나, 시각 동기화 설정이 정상적으로 +이루어지지 않은 경우 +조치 방법 +시각 동기화 기능이 존재하지 않는 경우 이에 대한 보완대책을 마련하고, 모든 제어시스템 구성요소들이 +같은 시간 정보를 이용할 수 있도록 시간 동기화 설정 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 484-0](images/p0484_img0.png) + + +![이미지 484-1](images/p0484_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +485 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소에서 시각 동기화 기능을 제공하고 있는지 확인 +(예시: 제어 H/W, 제어 S/W, 네트워크 장비, 정보시스템의 NTP 서버 설정 화면) +[ 제어 H/W의 NTP 서버 설정 화면 예시 ] +[ 제어 S/W의 NTP 서버 설정 화면 예시 ] +[ 네트워크 장비의 NTP 서버 설정 화면 예시 ] +[ 정보시스템의 NTP 서버 설정 화면 예시 ] +※ Cisco 스위치의 경우 ‘sh ntp status’ 명령어로 확인 가능 + + +![이미지 485-0](images/p0485_img0.png) + + +![이미지 485-1](images/p0485_img1.png) + + +![이미지 485-2](images/p0485_img2.png) + + +![이미지 485-3](images/p0485_img3.png) + + +![이미지 485-4](images/p0485_img4.png) + + +--- + +| 한국인터넷진흥원 | +486 +※ Microsoft Windows 제품의 경우 명령 프롬프트에서 ‘w32tm /dumpreg /subkey:parameters’ 명령어로 확인 가능 +Step 2) 확인된 시각 동기화 기능에서 설정이 정상적으로 적용되어 실제 시간 동기화가 수행되고 있는지 확인 +§ Step 1)의 설정 화면에서 제어시스템 구성요소들이 같은 NTP 서버를 설정하고 있는지 확인 +§ 실제 복수의 제어시스템 구성요소의 시각 정보를 확인하여 같은지 확인 +※ 제어시스템 구성 특성상 독립적으로 분리된 여러 네트워크를 운용 중인 경우, 네트워크별 GPS 서버를 +구축하여 시각 동기화를 수행할 것을 권장하며, 제한될 경우, 일방향 전송 장치 등을 통해 네트워크 독립성을 +유지한 상태에서 시간 동기화를 수행할 것을 권장 +※ 제어시스템 구성요소에서 시간 동기화 기능을 제공하지 않는 경우, 이에 대한 보완대책의 예시로 주기적인 +수동 시각 점검 및 설정하도록 하는 정책 수립 등의 방안이 있으며 이 경우 해당 정책 및 시행 여부에 대한 +점검도 수행할 것을 권고 + + +![이미지 486-0](images/p0486_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +487 +C-08 +(상) +제어시스템 > 2. 서비스 관리 +제어시스템에 불필요한 서비스 및 취약한 서비스 제거 또는 보완대책 수행 +개요 +점검 내용 +제어시스템 구성요소에서 불필요한 서비스와 취약한 서비스를 제거하거나 이용할 수 없도록 비활성화 여부 점검 +점검 목적 +제어시스템(운영체제)에 관련 소프트웨어를 위해 필요한 최소한의 서비스만 활성화하고 취약한 서비스를 +제거 또는 비활성화하여 비인가자 및 악성코드에 의해 취약한 서비스 악용이 일어나지 않도록 하기 위함 +보안 위협 +Ÿ 불필요하거나 취약한 서비스가 활성화되어 있는 경우 공격자가 네트워크 스캐닝을 통해 취약한 서비스를 +찾아내, 비인가자 접근, 악성코드 유포 등 해당 서비스를 악용한 해킹의 위험이 존재함 +Ÿ 위협 사례: SMB Redirect(Redirect To SMB) 공격의 경우, Windows PC 간에 파일 공유를 위해 +사용하는 SMB(Server Message Block) 프로토콜을 악용하여, 해당 네트워크 트래픽을 해커가 +장악한 SMB 서버 또는 악성 웹사이트로 우회시킬 수 있는 취약점을 이용함. 이를 통해 해커는 +Windows PC 사용자들의 해당 로그인 정보를 탈취할 수 있으며 이와 같은 공격에 대한 최선의 +보안대책은 TCP 139와 445 포트를 차단하여 SMB 프로토콜 자체를 이용하지 못하도록 함 +참고 +※ 제어시스템 취약점 검색엔진: 쇼단(https://www.shodan.io)과 같은 웹사이트(Criminal IP)는 +IoT, ICS 등과 같은 설비에 대해 국가, 기관, 서비스(Port), IP주소 등의 검색어 입력만으로 어떤 +서비스가 활성화되어 있고 인터넷상으로 접근 가능한지 검색 가능 +[ 쇼단 홈페이지에서 검색어(예: 제어기기 모델)를 통해 확인한 결과 ] +※ 제어시스템 취약점 목록 제공: 미국 국토안보부(DHS) 산하 CISA(CyberSecurity & Infrastructure) +홈페이지(https://cisa.gov/news-events/cybersecurity-advisories )에서는 ICS에서 발견된 +최신 취약점 목록을 제공하고 있어, 사용 중인 제어시스템 구성요소에 취약점 존재 여부를 확인할 수 +있음 + + +![이미지 487-0](images/p0487_img0.png) + + +![이미지 487-1](images/p0487_img1.png) + + +--- + +| 한국인터넷진흥원 | +488 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 현황(목록)과 네트워크 구성도를 확인하고 제어시스템별 감시, 설비제어 등을 위해 필요한 +서비스(Port) 종류 확인 +Step 2) 구성요소 운영체제의 방화벽 기능 또는 자체적으로 활성화된 서비스 조회 기능 등을 통해 해당 +구성요소에 활성화된 서비스(Port)가 불필요한 것인지 또는 취약한 것인지 점검 +Step 3) Step 2)에서 확인된 불필요하거나 취약한 서비스에 대해 보안대책 적용 여부 확인 +§ 보완대책으로는 제어망, 업무망의 방화벽에서 접근통제 정책으로 해당 서비스를 차단하고 있는 경우 +또는 네트워크 장비의 접근규칙(ACL)을 적용하여 차단하고 있는 경우 존재 +§ 불필요하거나 취약한 서비스가 제거 또는 보완대책 적용이 되어있지 않은 경우, 이를 비활성화하거나 +보완대책을 적용하도록 조치 +[ CISA 홈페이지에서 제공하는 ICS 취약점 목록 ] +점검 대상 및 판단 기준 +대상 +HMI, EWS와 같은 제어 S/W를 제외한 제어시스템 구성요소 전체 +판단 기준 +양호 : 제어시스템에 불필요하거나 취약한 서비스가 제거 또는 비활성화된 경우 +취약 : 제어시스템에 불필요하거나 취약한 서비스가 활성화된 경우 +조치 방법 +제어시스템에 불필요하거나 취약한 서비스를 제거 또는 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 488-0](images/p0488_img0.png) + + +![이미지 488-1](images/p0488_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +489 +[Windows OS] +⚫시작 옵션에서 시작유형을 “사용 안 함”으로 설정 +⚫시작 > 설정 > 제어판 > 관리 도구 > 서비스에서 불필요한 서비스 중지 +⚫시작 > 설정 > 제어판 > 방화벽 설정에서 접근 가능한 IP 제한 +[Unix OS] +⚫# vi /etc/inetd.conf 파일에서 불필요한 서비스 주석(#) 처리하여, 해당 서비스 비활성화 +⚫# /etc/hosts.allow에 접근 가능한 서비스, IP 지정 +⚫ # /etc/hosts.deny에서 차단하고자 하는 서비스, IP 지정 +§ SMB(Session Message Block) 프로토콜은 Windows에서 디스크와 프린터를 네트워크상에서 +공유하는 데 사용되며, TCP 139번, 445번 포트를 사용함. SMB를 비활성화하려면 다음과 같은 +방법으로 TCP/IP에서 SMB를 언바인드 시킴 +바탕화면 또는 제어판에서 [네트워크 환경]의 [등록정보] 실행 +현재 인터넷에 접속된 연결의 [등록정보] 선택 +[Microsoft 네트워크용 클라이언트] 항목과 [Microsoft 네트워크용 파일 및 프린터 공유] 항목의 체크 +해제 + + +![이미지 489-0](images/p0489_img0.png) + + +--- + +| 한국인터넷진흥원 | +490 +C-09 +(중) +제어시스템 > 2. 서비스 관리 +제어시스템 구성요소에 대한 관리자 페이지 운영 시 이에 대한 접근통제(사전인가 접근만 허용) 수행 +개요 +점검 내용 +제어시스템 구성요소의 관리 페이지에 접근하는 관리자에 대해 사전에 인가된 접근만 가능하도록 +접근통제 수행 여부 점검 +점검 목적 +제어시스템 구성요소를 관리하는 관리 페이지에는 사전에 인가된 관리자만 접근하도록 하여 인가되지 +않거나 악의적인 접근을 차단하기 위함 +보안 위협 +업무를 수행하는데 권한이 없는 사용자가 악의적인 목적으로 관리자 페이지에 접근하여 권한 획득, 인증 +우회 등의 공격을 시도하여 해당 장비를 장악할 위험이 존재함 +참고 +※ 관리자 페이지에 대한 접근통제(사전인가 접근만 허용) +일반적으로 활용하는 기법은 관리자가 접근할 수 있는 IP주소, MAC 주소 등을 사전에 인가하여 +인가되지 않은 IP주소, MAC 주소 등을 통한 접근 시, 이를 차단하도록 하는 기법임 +[ 네트워크 장비에서 관리자 접근을 특정 IP로 제한 예시 ] +[ 제어 S/W에서 관리자 접근을 특정 IP로 제한 예시 ] +※ 관리자 페이지 접근 시, 네트워크를 이용한 모든 접근을 차단하고 있으며 물리적으로 접근하는 콘솔 +접근만 허용하고 있는 경우 양호하다고 판단 가능 +점검 대상 및 판단 기준 +대상 +관리자 페이지가 존재하는 모든 제어시스템 구성요소 및 제어시스템을 구성하는 네트워크 전체 +판단 기준 +양호 : 관리자 페이지에 IP주소, MAC 주소 등을 통해 사전인가된 관리자만 접근이 가능한 경우 +취약 : 모든 사용자가 관리자 페이지에 접근이 가능한 경우 +조치 방법 +제어시스템 구성요소의 관리자 페이지에 사전 인가된 접근만 가능하도록(IP주소 등) 설정 +조치 시 영향 +일부 제어시스템 설정에 따라 접속 오류 발생 가능 + + +![이미지 490-0](images/p0490_img0.png) + + +![이미지 490-1](images/p0490_img1.png) + + +![이미지 490-2](images/p0490_img2.png) + + +![이미지 490-3](images/p0490_img3.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +491 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소 현황(목록)을 확인하고 관리자 페이지가 존재하는 구성요소를 식별하여 해당 +구성요소에 대해, 관리자 페이지 접근 방법 및 사전인가된 접근만 가능하도록 설정되어 있는지 확인 +§ 물리적인 접근(기기 콘솔 포트를 이용한 접근 등)만 허용하고 있으며, 그 외 관리자 페이지 접근이 +불가능한 구성요소의 경우 제외 +Step 2) Step 1)에서 사전 인가되지 않은 방법으로 관리자 페이지에 접근 시도 +(예시: 설정되지 않은 IP주소의 기기로 접근 등) +§ 관리자 페이지가 나타날 경우, 해당 구성요소에서 접근할 수 없도록 설정 변경을 통한 조치 수행 +※ 제어시스템 구성요소에서 사전에 인가된 관리자만 접근할 수 있도록 설정할 수 없는 경우, 방화벽, 네트워크 +장비, 서버 등에 적용 가능한 접근통제 규칙 변경을 통해 지정된 관리자 IP만 접근할 수 있도록 설정할 수 +있음 + + +![이미지 491-0](images/p0491_img0.png) + + +--- + +| 한국인터넷진흥원 | +492 +C-10 +(중) +제어시스템 > 2. 서비스 관리 +제어시스템 내 파일/디렉터리 접근 권한 및 신뢰 관계를 적절히 부여 +개요 +점검 내용 +제어시스템 내 구성요소에서 적절한 파일/디렉터리 접근 권한 및 신뢰 관계 부여 여부 점검 +점검 목적 +제어시스템 운영을 위해 파일/디렉터리 접근 권한 및 신뢰 관계를 과다하게 부여하여 인가되지 않은 +사용자가 허용되지 않은 파일, 정보에 접근하는 것을 차단하기 위함 +보안 위협 +제어시스템과 관련된 중요 자료(도면 등)에 대해 접근 권한을 과다하게 부여하여 인가되지 않은 +사용자가 해당 정보를 취득하여 외부에 공개하거나 공격을 위한 기초자료로 활용될 위험이 존재함 +참고 +※ 제어시스템 운영을 위해 공유 폴더 사용 시 볼륨 전체를 공유하거나 모든 사용자 계정이 +읽기·쓰기·실행 권한을 가지는 등의 설정은 파일 및 디렉터리 접근 권한 과다 부여에 해당함 +※ 과다한 신뢰관계란 통합인증(Single Sign-on), SSH Key의 트러스트 설정 등을 통해 제어시스템 +구성요소 간 인증 없이 접근이 가능한 경우를 의미 +※ 필요 이상의 다중 로그인을 허용, 세션 간 로그인 정보를 지속적으로 유지, 비밀번호 저장을 통한 +자동 로그인 등 역시 과다한 신뢰 관계에 해당함 +점검 대상 및 판단 기준 +대상 +제어시스템 내 구성요소 +판단 기준 +양호 : 제어시스템 내 파일/디렉터리에 접근 권한 및 신뢰 관계를 과다하게 부여하지 않은 경우 +취약 : 제어시스템 내 파일/디렉터리에 접근 권한 및 신뢰 관계를 과다하게 부여한 경우 +조치 방법 +제어시스템 내 파일/디렉터리에 접근 권한 및 신뢰 관계를 허용할 경우, 반드시 필요한 때에만 설정하도록 +하고, 반드시 필요한 특정 위치의 특정 사용자에게만 허용하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 내 구성요소에서 파일/디렉터리 접근 권한 설정을 확인 +[Windows OS] +(1) 실행 창에서 fsmgmt.msc를 입력한 후 확인 버튼을 클릭 + + +![이미지 492-0](images/p0492_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +493 +[ 실행 창 ] +(2) 공유 폴더‣ 공유 폴더(로컬) ‣ 공유에서 설정 확인하여 기본 공유 설정된 드라이브 또는 IPC가 +존재하지 않는지 확인 +[ 공유 폴더 ] +(3) 내 컴퓨터> 로컬디스크 속성> 공유> 네트워크 파일 및 폴더 공유에서 확인하여 네트워크 파일 +및 폴더 공유가 사용되고 있지 않은지 확인 +[ 로컬디스크 속성 ] +※ 해당 기기에서 설정 변경이 불가능할 경우, 제어시스템 개발업체와 협의하여 이에 대한 보완대책 마련 권고 + + +![이미지 493-0](images/p0493_img0.png) + + +![이미지 493-1](images/p0493_img1.png) + + +![이미지 493-2](images/p0493_img2.png) + + +![이미지 493-3](images/p0493_img3.png) + + +--- + +| 한국인터넷진흥원 | +494 +C-11 +(중) +제어시스템 > 2. 서비스 관리 +제어시스템 내 제어와 직접적인 관련이 없는 불필요 프로그램 삭제 +개요 +점검 내용 +제어시스템 내 구성요소에 설치된 프로그램 중 제어시스템 운영과 관련이 없는 불필요한 프로그램의 +삭제 여부 점검 +점검 목적 +제어시스템 내 구성요소에 불필요한 프로그램이 설치되어 예상하지 못한 취약점이 발생하거나 +제어시스템의 가용성을 저해시킬 수 있어 안정적인 제어시스템 운영을 하기 위함 +보안 위협 +제어시스템 내 구성요소에 설치된 불필요한 특정 프로그램에서 발견된 취약점으로 인해 해당 +정보시스템이 오동작을 일으키거나, 다른 공격에 활용될 위험이 존재함 +참고 +※ 제어시스템 운영과 관련 없는 불필요한 프로그램의 예시로는 게임, 인스턴트 메신저, 사용하지 않는 +문서편집 및 뷰어 프로그램, 개발용이 아닌 시스템에서 사용하지 않는 컴파일러, DB, 설정 파일 +등이 있을 수 있음 +점검 대상 및 판단 기준 +대상 +제어시스템 내 구성요소 +판단 기준 +양호 : 제어시스템 내 구성요소에 운영에 필요하지 않은 프로그램이 존재하지 않는 경우 +취약 : 제어시스템 내 구성요소에 운영에 필요하지 않은 프로그램이 존재하는 경우 +조치 방법 +제어시스템 운영에 불필요한 프로그램을 삭제하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 내 구성요소의 설치된 프로그램 목록을 확인하여 불필요한 프로그램 유제어시스템 운영에 +필요한 프로그램은 제어시스템 공급사, 운영사가 확인하여 관리하는 것을 권고하며, 이러한 목록에 없는 +프로그램은 모두 삭제하도록 조치 + + +![이미지 494-0](images/p0494_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +495 +C-12 +(중) +제어시스템 > 2. 서비스 관리 +제어시스템 운영 정보, 제어 명령 등 중요 정보에 대한 위변조 및 replay 공격 방지 대책 적용 +개요 +점검 내용 +HMI, PLC 등을 통해 제어설비에 전송되는 제어 명령이 스니핑(임의 지정) 등의 패킷 감청 등으로 +중간에 해당 패킷을 가로채 위변조할 수 없도록 하고, 해당 패킷 재사용을 통한 제어설비 전송, 조작 여부 +점검 +점검 목적 +제어 명령이 비인가자에게 노출되거나 중간에서 가로챌 수 없도록 하고, 이를 재사용할 수 없도록 하여 +안정적인 제어시스템을 운영하기 위함 +보안 위협 +Ÿ 제어시스템을 구성하는 HMI, PLC 등의 제어 H/W, 제어 S/W에서 보안이 고려되지 않은 +프로토콜을 이용하는 시스템에 따라서는 제어 명령을 가로챌 수 있는 취약점이 공개되어 있어 해당 +취약점으로 인한 공격이 성공하는 경우 비인가자가 제어설비의 운영 권한을 획득할 위험이 존재함 +Ÿ 취약점 예시: ‘20. 1. 14. 공개된 취약점으로 GE사의 PACSystems RX3i 제품군에서 조작된 +패킷이 전달되면 모듈 상태가 중지 모드로 변경되어 서비스거부가 발생하는 취약점이 발견됨 +(ICSA-20-014-01)(CVE-2019-13524) +참고 +※ 무결성 체크: 데이터의 무결성을 확인하기 위해 SHA-256 등의 해시 함수를 이용하여 데이터가 +최초 원본 상태와 다른 변형된 것이지 확인 +※ Replay 공격: 네트워크상의 정보 프레임을 수집한 뒤 해당 메시지를 재전송함으로써 갱신되지 않은 +정보의 전달이나, 대상 장비에게 정당한 정보 전송으로 인식시켜 오류를 유도하는 공격 기법으로, +HMI 서버와 RTU 사이의 통신선로에 인가되지 않은 해킹 기기를 접속시켜 각각 HMI 서버와 +RTU에 해당 공격을 수행 가능 +점검 대상 및 판단 기준 +대상 +운영 정보 등 중요 정보를 다루는 제어시스템 구성요소 +판단 기준 +양호 : 제어 명령을 암호화 전송하거나 송수신 정보의 무결성을 확인(위·변조 여부 확인)하고, 재사용 +방지(인증, 시간 확인, 세션 확인 등) 과정을 거치도록 하는 경우 +취약 : 제어 명령이 암호화되지 않고 평문 전송되거나, 송수신 정보의 무결성을 확인하지 않거나, 재사용 +방지(인증, 시간 확인, 세션 확인 등) 과정을 거치지 않는 경우 +조치 방법 +전송되는 정보를 암호화하거나 무결성을 점검할 수 있도록 하고 재사용을 방지할 수 있도록 설정 +변경하거나 불가능할 경우, 제조사와 협의하여 보완대책 마련 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 전송되는 제어 명령을 스니핑(Sniffing)하여 암호화 송수신이 이루어지는지 확인하고 암호화가 + + +![이미지 495-0](images/p0495_img0.png) + + +--- + +| 한국인터넷진흥원 | +496 +필요함에도 평문 전송이 이루어지고 있다면 암호화 전송되도록 송수신 장비의 설정 변경 +Step 2) 제어 명령을 수신 및 송신하는 경로의 네트워크 장비에 트래픽 수집 도구 또는 제어 명령을 수신하는 +서버나 PC에서 스니핑 도구를 설치, 이용하여 전송되는 데이터가 암호화되는지 점검 +※ 스니핑 도구가 설치된 시스템의 LAN 카드를 지정하면 해당 LAN 카드를 통해 송수신되는 데이터 패킷을 +캡쳐하여 문자열이 평문인지 또는 암호화된 것인지 확인할 수 있음 +[ WirkShark을 설치, 실행한 화면 ] +Step 3) 제어 명령을 송수신하는 서버 및 PC 등이 전송된 데이터가 원본과 일치하는지를 확인하는 무결성 체크 +과정을 거치는지 점검하고 무결성 체크 없이 송수신된다면(별도 전송 장비를 사용하는 경우) 송수신 +장비의 설정을 변경하거나 이에 대한 자체적인 보완대책 수립 +Step 4) 해당 항목 점검방법은 송수신되는 데이터를 조작하여 발송한 뒤 무결성 점검 없이 정상 수신되는지를 +확인하는 방식으로 이루어져야 하나, 점검 환경의 제약이 따르는 경우는 대상 제어시스템의 개발, 운용 +확인 + + +![이미지 496-0](images/p0496_img0.png) + + +![이미지 496-1](images/p0496_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +497 +C-13 +(하) +제어시스템 > 2. 서비스 관리 +제어시스템 내 전달되는 제어 명령 및 파라미터의 정상 범위를 식별하고 관리 +개요 +점검 내용 +제어시스템을 통해 설비에 전달되는 제어 명령의 문자열이 운영 목적에 맞는 최소 권한으로 전달되도록 +불필요한 파라미터 사용 제한 여부 점검 +점검 목적 +제어시스템 감시 및 제어를 위한 HMI, PLC 등의 소프트웨어는 제어시스템의 운전정보를 조회하고 +제어할 수 있으므로 제어 명령 제한과 파라미터값의 범위를 제한하여 운영자의 부주의(Human Error), +오·남용 및 악성코드에 의한 악의적인 운전 명령 전달 등을 차단하기 위함 +보안 위협 +Ÿ 정상 범위를 초과하는 제어 명령 값을 부여할 수 있다면 부주의(Human Error), 오·남용이 발생할 수 +있고 특히 악성코드에 의한 악의적인 운전 명령 및 과도한 파라미터 값 전달을 통해 제어설비의 +오작동 등의 피해가 발생할 수 있음 +Ÿ 위협 사례: 스턱스넷은 PLC 시스템의 Profibus 메시지 버스 시스템을 감시하는 D8890 블록에 +악성코드를 설치하여 특정 조건을 만족하면, 주기적으로 모터의 회전수를 1410Hz, 2Hz, +1064Hz로 변경해 모터에 과부하를 일으킴 또한 PLC 시스템에 루트킷을 설치하여 자기 자신을 +숨기고, 모터의 회전수가 변경되고 있다는 것을 숨김 +참고 +※ HMI, PLC 등의 소프트웨어를 통해 사용 가능한 제어 명령, 파라미터값의 범위 등을 사전에 +제한하여 운영자 권한 또는 악성코드에 의해 불필요한 제어 명령과 파라미터값 전송이 일어나지 +않도록 제어시스템의 환경설정 강화 필요 +점검 대상 및 판단 기준 +대상 +HMI, PLC 등의 제어 S/W +판단 기준 +양호 : 운영 업무 목적에 필요한 최소한의 제어 명령과 파라미터만을 사용하도록 제한하는 경우 +취약 : 운영 업무 범위를 초과하는 제어 명령과 파라미터의 사용 제한이 없는 경우 +조치 방법 +운영 목적에 맞는 최소한의 제어 명령과 파라미터만을 사용하도록 HMI, PLC 등의 관리설정 강화 (제어 +명령 권한 조정) +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) HMI, PLC 등을 통해 사용 가능한 제어명령어와 제어 명령 별 파라미터 등을 확인 +Step 2) 확인한 결과, 운영자가 제한 없이 제어 명령 및 파라미터 사용이 가능하다면 HMI, PLC 등의 제어 +S/W에서 업무 목적에 필요한 제어 명령과 파라미터 범위만을 사용할 수 있도록 제한하는 설정 조치 +※ 일반적으로 HMI, PLC 설정 변경으로 취약점을 조치할 수 있으나, 개발업체의 환경, 협조 여부에 따라 +조치가 어려울 수 있으며, 해당 경우 자체적으로 보완대책 마련 필요 + + +![이미지 497-0](images/p0497_img0.png) + + +--- + +| 한국인터넷진흥원 | +498 +C-14 +(하) +제어시스템 > 2. 서비스 관리 +제어시스템 내 사용자 통신 세션에 대해 세션 타임아웃 적용 +개요 +점검 내용 +세션 통신을 지원하는 제어시스템 구성요소의 합리적인 시간 범위 내에 세션 타임아웃 설정 운용 여부 점검 +점검 목적 +제어시스템 구성요소가 세션 통신을 수행하고 있을 때, 일정 시간 동안 입력이 없는 경우 세션을 +종료하도록 하여 해당 세션을 가로채어 발생할 수 있는 위협으로부터 제어시스템을 보호하기 위함 +보안 위협 +관리자가 로그인 후, 세션을 종료하지 않고 자리를 비우는 동안 악의적인 사용자가 접속된 터미널을 +이용하여 불법적인 행위를 시도할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +사용자와 세션 통신을 지원하는 제어시스템 구성요소 +판단 기준 +양호 : 사용자 통신 세션 구간에서 타임아웃 기능이 설정된 경우 +취약 : 사용자 통신 세션 구간에서 타임아웃 기능이 설정되지 않은 경우 +조치 방법 +사용자 통신 세션 구간에서 일정 시간 입력이 없는 경우 자동으로 세션을 종료하는 세션 타임아웃 기능 +설정 또는 개발변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 점검 대상 장비에서 허용하는 세션 통신을 모두 식별하고, 식별된 세션에서 타임아웃 기능 설정 여부 확인 +[ 타임아웃 설정 화면 예시 ] +Step 2) Step 1)에서 확인된 설정과 같이 실제로 타임아웃이 이루어지는지 확인 + + +![이미지 498-0](images/p0498_img0.png) + + +![이미지 498-1](images/p0498_img1.png) + + +![이미지 498-2](images/p0498_img2.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +499 +C-15 +(하) +제어시스템 > 2. 서비스 관리 +GPS 스푸핑/재밍 공격 등 시간 동기화 서비스를 교란하기 위한 공격에 대비한 보안 조치 수행 +개요 +점검 내용 +제어시스템에 구축한 시간 동기화 시스템이 GPS 스푸핑/재밍 공격 등에 대응하는 기능 존재 여부 점검 +점검 목적 +제어시스템 구성요소들이 같은 시간을 유지할 수 있도록 구축한 시간 동기화 시스템이 GPS 스푸핑/재밍 +공격 등에도 같은 시간 정보를 유지하기 위함 +보안 위협 +GPS 스푸핑/재밍 공격은 제어시스템 구성요소의 시간 정보를 동일하게 유지시키는 NTP의 이상 +동작을 발생시키고 이로 인해 제어시스템의 안정성이 저해될 위험이 존재함 +참고 +※ 일부 NTP/PTP 솔루션에서는 최근 발생하는 GPS 재밍, 스푸핑 공격에 대비하여 이에 대응하는 +기능을 가진 제품을 판매하고 있음 +점검 대상 및 판단 기준 +대상 +GPS 신호를 수신하는 안테나와 이를 사용하는 NTP 서버 +판단 기준 +양호 : GPS 스푸핑/재밍 공격 등 시간 동기화 교란 공격에 대비한 대책이 마련되어 있는 경우 +취약 : GPS 스푸핑/재밍 공격 등 시간 동기화 교란 공격에 대비한 대책이 마련되지 않은 경우 +조치 방법 +시간 동기화 교란 공격에 대비하여 고정밀 오실레이터(예시: 세슘, 루비듐 등)를 보유한 백업용 시각장치 +구비 또는 공격 차단을 위한 능동형 안테나 설치 등의 대책을 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 내 NTP 서버를 구축하고 GPS 신호를 이용한 시간 정보 수신 여부를 확인 +Step 2) Step 1)에서 확인된 NTP 서버가 GPS 스푸핑/재밍 공격에 대응하는 기술이 적용되어 있는지 확인 +§ 세슘, 루비듐 등의 고정밀 오실레이터 내장된 백업 시각 유지 장치 등의 자체 대응 기술 여부 확인 +§ 대응하는 기술이 적용되어 있지 않은 경우, 고정밀 오실레이터를 보유한 백업용 시각장치 구비 또는 +공격 차단을 위한 능동형 안테나 설치 등의 조치 수행 + + +![이미지 499-0](images/p0499_img0.png) + + +--- + +| 한국인터넷진흥원 | +500 +C-16 +(상) +제어시스템 > 2. 서비스 관리 +제어시스템에 대한 최신 업데이트, 보안패치를 안전하게 적용하기 위한 제조사 협력방안, 테스트 방안 +등의 절차 수립 +개요 +점검 내용 +제어시스템을 구성하는 소프트웨어, 시스템(OS), 장비 등에 대한 최신 업데이트, 보안패치를 적용할 수 +있는 절차 수립 여부 점검 +점검 목적 +최신 발견된 보안취약점에 대해 이를 조치할 수 있는 업무절차가 수립되어 있는지 점검하여 향후 새로운 +보안취약점이 발견되었을 때 대응할 수 있는지 확인하기 위함 +보안 위협 +알려진 취약점이 존재하는 제어시스템을 대상으로 해당 취약점을 악용한 비인가자의 침해 시도 또는 +자동화된 악성코드의 감염 위험이 존재함 +참고 +※ 본 점검항목에서는 제어시스템의 업데이트, 보안패치를 안전하게 수행할 수 있는 절차에 대한 상세 +점검항목이며, 취약점의 존재 유무에 대한 점검항목은 C-08 항목을 참고 +※ 일반적인 IT 환경과 달리 제어시스템의 경우, 높은 가용성을 요구하는 특징에 따라 최신 업데이트 및 +보안 패치가 신속하게 이루어지지 않는 경우가 있으며 이러한 경우 업데이트 및 보안 패치가 +이루어질 때까지 발생할 수 있는 위협을 완화할 수 있는 방안 적용을 권고함 +점검 대상 및 판단 기준 +대상 +전체 제어시스템 구성요소 +판단 기준 +양호 : 제어시스템 업데이트 및 보안패치 적용 절차가 수립된 경우 +취약 : 제어시스템 업데이트 및 보안패치 적용 절차가 수립되지 않은 경우 +조치 방법 +제어시스템 구성요소가 안전하게 업데이트 및 보안패치를 수행할 수 있도록 하는 절차 수립 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소의 납품 계약 문서, 기타 유지보수 계약 문서 등을 통해 업데이트 및 보안패치 적용 +방안이 수립되어 있는지 확인 +Step 2) 수립된 보안패치 적용 방안에 따라 제어시스템 구성요소의 업데이트 및 보안패치가 가능한지 확인 + + +![이미지 500-0](images/p0500_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +501 +C-17 +(상) +제어시스템 > 3. 패치 관리 +외부 업체, 인터넷을 통한 다운로드 등의 경로로 반입된 각종 패치·업데이트 파일에 대해 무결성 검증 +및 클린 PC를 통한 악성코드 존재 여부 검사 수행 +개요 +점검 내용 +외부 업체, 인터넷 등을 통해 다운로드 등의 경로로 제어망 내부에 반입되는 각종 패치, 업데이트 파일에 +대해 무결성 검증 및 악성코드 검사 수행 여부 점검 +점검 목적 +제어망 내부로 악성코드 유입을 차단하기 위해 패치, 업데이트 수단을 안전하게 보호하기 위함 +보안 위협 +Ÿ 악성코드를 은밀히 유포하기 위해 업데이트 서버나 협력업체 서버, 노트북 등에 침투하여 업데이트 +파일로 위장하는 사례가 있음 +Ÿ 위협 사례: ‘19. 3. 25. Kaspersky Lab에서 발표한 “Operation Shadow Hammer”는 ASUS의 +소프트웨어 업데이트 서버가 해킹되어 대부분의 ASUS 컴퓨터에 설치된 Asus Live Update가 +추가적인 악성코드를 받을 수 있는 경로로 백도어가 포함된 버전으로 업데이트되도록 하는 공격임 +참고 +※ 최근 사이버 공격에 자주 활용되는 공급망 공격(Supply Chain Attack)은 직접 침투가 어려운 +시설에 악성코드를 감염시키기 위해 공격 대상 시설이 사용하는 소프트웨어, 하드웨어 업체를 +활용하는 공격으로, 이러한 공격 기법의 하나로 제공하는 패치, 업데이트 파일에 악성코드를 숨겨 +대상 시설에 악성코드를 설치하도록 유도할 수 있음 +점검 대상 및 판단 기준 +대상 +업데이트 또는 패치를 위해 제어망 내 반입되는 모든 외부 파일 +판단 기준 +양호 : 제어망 내 반입되는 패치·업데이트 파일의 무결성 검증 및 악성코드 검사가 수행되는 경우 +취약 : 제어망 내 반입되는 패치·업데이트 파일의 무결성 검증 및 악성코드 검사가 이루어지지 않은 경우 +조치 방법 +제어망 내 반입되는 패치·업데이트 파일을 제공하는 공급사로부터 무결성을 확인받는 절차를 도입 및 +악성코드를 검사할 수 있는 클린 PC를 구축하여 해당 파일의 악성코드 존재 유무 확인 후 제어시스템 설치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소의 업데이트 또는 패치의 절차에서 무결성을 검증할 수 있는 방안이 마련되어 +있는지 확인 +Step 2) 제어시스템 구성요소의 업데이트 또는 패치 파일의 악성코드를 검사할 수 있는 클린 PC가 구축되어 +있으며, 이를 관리 및 운용하고 있는지 확인 + + +![이미지 501-0](images/p0501_img0.png) + + +--- + +| 한국인터넷진흥원 | +502 +C-18 +(상) +제어시스템 > 3. 패치 관리 +제어시스템 구성요소의 알려진 취약점에 대해 보안패치 적용 또는 상응하는 대응책 적용 +개요 +점검 내용 +제어시스템 구성요소에서 알려진 취약점이 제거되어 있거나, 취약점이 존재하는 경우에 대한 대응방안 +존재 여부 점검 +점검 목적 +최신 보안취약점의 주기적인 확인, 조치 전 영향성 검토, 취약점 조치 등의 체계적인 업무절차를 +수립하고 이를 이행함으로써 알려진 취약점으로 인한 제어시스템의 보안위협을 감소시키기 위함 +보안 위협 +알려진 취약점에 대해 조치하지 못한 제어시스템을 대상으로 해당 취약점을 악용한 비인가자의 침해 +시도 또는 자동화된 악성코드의 감염 우려가 있음 +참고 +※ 스턱스넷(Stuxnet)의 경우 다음과 같은 취약점을 이용하고 있으므로 다음 취약점이 조치되지 않은 +경우, 매우 취약한 환경으로 볼 수 있음 +[ 스턱스넷 이용 취약점 ] +※ 제어시스템 취약점 목록 제공: 미국 국토안보부(DHS) 산하 CISA(CyberSecurity & Infrastructure) +홈페이지(https://cisa.gov/news-events/cybersecurity-advisories)에서는 ICS에서 발견된 최신 +취약점 목록을 제공하고 있어, 사용 중인 제어시스템 구성요소에 취약점 존재 여부를 확인할 수 있음 + + +![이미지 502-0](images/p0502_img0.png) + + +![이미지 502-1](images/p0502_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +503 +[ CISA 홈페이지에서 제공하는 ICS 취약점 예시 ] +[ CISA 홈페이지에서 제공하는 ICS 취약점 예시 ] +점검 대상 및 판단 기준 +대상 +전체 제어시스템 구성요소 +판단 기준 +양호 : 제어시스템 내부 구성요소에서 알려진 취약점이 없거나, 존재하는 취약점에 대한 조치방안이 +이루어진 경우 +취약 : 제어시스템 내부 구성요소에서 알려진 취약점이 있으며, 이에 대한 조치방안이 이루어지지 않은 경우 + + +![이미지 503-0](images/p0503_img0.png) + + +![이미지 503-1](images/p0503_img1.png) + + +![이미지 503-2](images/p0503_img2.png) + + +--- + +| 한국인터넷진흥원 | +504 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소 현황에 대해 취약점 관련 사이트에 제품명, 버전에 대한 취약점 검색 수행 후, +공개된 취약점이 있는지 확인 +(예시: CISA ICS 취약점 목록, CVE 목록, 제조사의 제품 보안 관련 웹페이지 등) +조치 방법 +알려진 취약점에 대한 조치방안(업그레이드 또는 패치, 이에 상응하는 대응방안 적용) 테스트 후 영향성 +검토 및 승인절차를 통한 해당 취약점 조치 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 504-0](images/p0504_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +505 +C-19 +(중) +제어시스템 > 3. 패치 관리 +운영체제, 응용프로그램, 펌웨어 등에 대한 안정성이 확인된 최신 버전의 소프트웨어 사용 및 +기술지원이 종료된 제품 미사용 +개요 +점검 내용 +제어시스템 구성요소의 운영체제, 응용프로그램, 펌웨어 등이 안정성이 확인된 최신 버전 S/W 사용 +여부 및 해당 S/W의 기술지원 종료 여부 점검 +점검 목적 +제어시스템에서 사용하는 운영체제, 응용프로그램, 펌웨어 등이 기술지원이 종료되지 않은 최신 +버전으로 운용하도록 하여 안정적인 제어시스템 운영이 가능하도록 하기 위함 +보안 위협 +기술지원이 종료된 S/W에 취약점이 발견될 경우, 이에 대한 조치가 불가능하여 해당 취약점이 +지속적으로 노출될 위험이 존재함 +참고 +※ Microsoft Windows 7, Windows Server 2008 R2 지원 종료: ‘20. 1. 24. 이후로 Microsoft +Windows의 지원이 종료되어 업데이트, 문제 관련 기술지원, 보안 업데이트가 수행되지 않으므로, +이를 사용하지 않아야 함 +점검 대상 및 판단 기준 +대상 +제어시스템 구성요소 전체 +판단 기준 +양호 : 제어시스템 구성요소가 사용하는 운영체제, 응용프로그램, 펌웨어 등이 기술지원이 종료되지 않은 +최신 제품을 사용하는 경우 +취약 : 제어시스템 구성요소가 사용하는 운영체제, 응용프로그램, 펌웨어 등이 기술지원이 종료되었거나, +최신 버전이 아닌 경우 +조치 방법 +제어시스템 구성요소가 사용하는 운영체제, 응용프로그램, 펌웨어 등이 기술지원이 종료되지 않은 최신 +버전 업데이트 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소 현황을 통해 제어 H/W, 정보시스템, 네트워크 장비에서 사용하는 운영체제, 펌웨어가 +제조사에서 제공하는 최신 버전이 맞는지 확인하고, 제어 S/W가 제조사에서 제공하는 최신 버전이 맞는지 확인 +§ 제조사에서 제공하는 최신 버전이 아닌 경우, 이에 대한 사유(제조사 공식 의견)가 안정성 확보이며, +해당 버전이 취약점이 없는 경우 양호한 것으로 판단 가능 +Step 2) Step 1)에서 확인한 버전이 제조사에 확인하여 기술지원 종료 예정이 없는지 확인 +※ 제어시스템에서 사용하는 운영체제, 펌웨어, 응용프로그램 등이 기술지원 종료 예정일 경우, 이에 대한 +대응방안(업데이트 일정 수립, 별도 기술지원 계약 등) 수립을 권고 + + +![이미지 505-0](images/p0505_img0.png) + + +--- + +| 한국인터넷진흥원 | +506 +C-20 +(하) +제어시스템 > 3. 패치 관리 +제어시스템 개선, 신규 시스템 도입, 패치 및 수정 시, 안전성을 테스트하기 위한 테스트베드 또는 +시험환경을 구축 +개요 +점검 내용 +제어시스템의 신규 구축 및 변경(개발수정, 업그레이드, 패치 포함) 전 안정성 테스트 등의 시험환경 +구축 여부 점검 +점검 목적 +제어시스템은 각 제어설비를 감시, 통제하기 위한 다양한 구성요소(HMI, PLC, RTU 등)를 포함하고 +있고 해당 구성요소의 신규 구축, 변경 등에 따라서 제어시스템의 일부 또는 전체의 오작동이 발생할 수 +있으므로 시험환경을 구축하여 안정성을 검증한 뒤 신규 구축 및 변경 등을 적용하기 위함 +보안 위협 +안정성 검증 없이 신규 구축 및 변경 등을 적용하는 경우 제어시스템의 일부 또는 전체의 오작동 등의 +위험이 존재함 +참고 +※ 시험환경의 구축 고려사항: 제어시스템은 IT와 기계적 요소가 결함된 구조를 이루고 있으므로 IT +환경과 같이 이중화, 유지보수 시간 서비스 정지, 테스트서버 구축 등의 방법 적용이 어려울 수 +있으므로 기계적 요소의 오작동 가능성을 시험할 수 있는 산업특성을 고려한 자체적인 방안을 +수립하는 것이 필요 +점검 대상 및 판단 기준 +대상 +제어시스템 구성요소 전체 +판단 기준 +양호 : 제어시스템의 변경사항을 시험할 수 있는 환경이 구축된 경우 +취약 : 제어시스템의 변경사항을 시험할 수 있는 환경이 구축되지 않은 경우 +조치 방법 +제어시스템의 변경사항을 테스트할 수 있는 테스트베드 구축 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 운영 중인 제어시스템에 대한 시험환경 구축이 되어있는지 확인 +§ 운영 중인 제어시스템의 특성이 고려된 테스트베드 또는 시험할 수 있는 환경 구축이 이루어져 있는지 +확인 + + +![이미지 506-0](images/p0506_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +507 +C-21 +(상) +제어시스템 > 4. 네트워크 접근통제 +제어 네트워크는 업무망, 인터넷, CCTV 망 등 외부망과 물리적으로 분리하여 사용 +개요 +점검 내용 +제어시스템을 감시, 통제하는 네트워크 구성에서 제어망(Production Control System Network)의 +업무망(Business Network), 인터넷망 등으로 물리적 분리 여부 점검 +점검 목적 +제어시스템에 인터넷을 통한 각종 침해위협(예시: 악성코드 등)으로부터 보호하기 위함 +보안 위협 +Ÿ 업무망과 제어망이 분리된 경우에도 업무망 PC에서 제어망에 있는 설비를 모니터링할 수 있는 경우 +해당 PC의 인터넷을 차단하지 않아 스턱스넷과 같은 악성코드에 감염되고 제어망에 있는 설비의 +운영 정보 수집은 물론, 취약점을 악용한 제어시스템 마비를 초래할 위험이 존재함 +Ÿ 제어망과 시설 감시를 위한 CCTV 망이 연결되어있는 경우 CCTV에서 발생시키는 다수의 +트래픽으로 인해 제어망의 가용성이 침해되는 경우를 초래할 위험이 존재함 +Ÿ 위협 사례: 쇼단(Shodan) 연구원에 따르면 미국은 5만 7천 개라는 전 세계에서 가장 많은 수의 +산업제어시스템(ICS)을 가지고 있으며 인터넷에 연결되어있다고 밝힘. 또한, ‘14년 12월 독일 언론에 +따르면, 독일의 한 제철소 용광로의 제어시스템에 대한 해킹 공격으로 제어시스템이 파괴되면서 관련 +산업 전체에 큰 피해를 준 바 있으며 이는 당시 해커들은 보안 의식이 낮은 용광로 운영 직원의 인터넷 +Email을 이용해 로그인 계정을 탈취한 뒤 제어시스템을 장악한 것으로 알려져 있음 +참고 +※ 제어시스템 네트워크 구분(Segmentation): NIST SP 800-82 Guide to Industrial Control +Systems Security에서 제어시스템의 안전한 네트워크 구성을 위해 네트워크를 도메인별로 +구분하고 구분된 도메인 간 접근 통제할 것을 권장함. 이때, 네트워크를 구분하는 방식 중 물리적인 +분리의 경우 두 도메인 간 통신을 완전히 막을 수 있는 방법의 하나로 제시하고 있음. 이에 따라 +제어망의 경우 인터넷망과는 물리적으로 분리할 것을 권고하고, 제어시스템 운영 특성상 업무망과 +연계가 필수적일 경우 C-10 항목을 참고하여 물리적 일방향 자료전달 환경 구축을 권고함 +점검 대상 및 판단 기준 +대상 +제어시스템을 구성하는 네트워크 전체 +판단 기준 +양호 : 외부망(인터넷) 또는 내부망(업무망)과 분리하여 운영하는 경우 +취약 : 외부망(인터넷) 또는 내부망(업무망)과 동일네트워크로 구성하여 운영하는 경우 +조치 방법 +제어시스템 운영망과 업무망 분리 및 인터넷 차단 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 네트워크 구성도를 검토하여 제어망, 업무망, 인터넷망 등이 모두 분리되어 접근이 +차단되도록 구성되었는지 확인 + + +![이미지 507-0](images/p0507_img0.png) + + +--- + +| 한국인터넷진흥원 | +508 +Step 2) 제어망의 네트워크 분리는 물리적 분리 방식이며, 제어망 내부에서 다른망으로 데이터 전달이 +불가능한지 확인 +§ 제어망 내 임의의 정보시스템을 선택하여 정보시스템에서 다음 명령어를 수행하고, 수행 결과 연결이 +되지 않는지 확인 +(1) 콘솔 창에서 ping, tracert 등의 명령어를 제어망이 아닌 업무망, 또는 다른 망의 IP와 공개 DNS +IP주소, 포털사이트의 IP주소를 대상으로 수행 +§ (다른망과 연결이 되는 경우) 해당 연결의 목적, 원인을 파악하여 불필요한 연결일 경우, 연계지점을 +확인하고 물리적으로 분리하도록 조치하고 반드시 필요한 연결일 경우, C-10 항목을 참고하여 일방향 +자료전달 체계 구축을 권고 +※ 제어시스템의 네트워크 구성 +제어시스템을 운영하는 조직은 제어망(Production Control System Network)과 업무망(Business Network)을 +물리적으로 분리하여 운용할 것을 권장 +[ 제어망과 업무망의 물리적 분리 예시 ] + + +![이미지 508-0](images/p0508_img0.png) + + +![이미지 508-1](images/p0508_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +509 +C-22 +(상) +제어시스템 > 4. 네트워크 접근통제 +제어 네트워크 외부로 자료전달 시 물리적 일방향 자료전달 환경을 구축하여 외부에서 제어 +네트워크로의 침입을 차단 +개요 +점검 내용 +제어 네트워크와 외부 자료 연계가 필요한 경우 제어망으로부터 업무망으로의 일방향 데이터 전송 여부 점검 +점검 목적 +업무망에 대한 침해위협으로 인해 제어망에 직접적인 피해(예시: 운전 조작 등)가 발생하지 않도록 하기 위함 +보안 위협 +제어망과 업무망 간 운전정보를 양방향 전송하게 되는 경우 업무망의 운영자 PC를 통한 내부자 부주의 또는 +오·남용(예시: 운전 조작 등) 우려가 있고, 악성코드가 유입되는 경우 제어망 내부에 위치한 시스템까지 +감염될 위험이 존재함 +참고 +※ 본 점검항목은 제어망에 위치한 설비 또는 시스템 등의 정보를 외부(내부 업무망 또는 외부 업무망)로 +전송하는 경우 일방향 전송을 요구하는 항목으로 일방향 전송 장비의 예시는 다음 그림과 같음 +[ 일방향 자료 전달 제품 예시 ] +점검 대상 및 판단 기준 +대상 +제어망으로부터 내부 업무망으로 정보 연계가 이루어지는 시스템 +제어망으로부터 외부 업무망으로 제어망의 운전정보 등을 전송하는 설비 및 시스템 +판단 기준 +양호 : 제어망의 운전정보를 업무망으로 일방향 전송하는 경우 +취약 : 제어망의 운전정보를 업무망으로 양방향 전송하는 경우 +조치 방법 +내·외부의 통신선로에 대한 물리적 일방향 전송이 이루어지도록 조치하거나, DMZ를 구성하고 방화벽 +등을 통한 일방향 접근통제 정책(Rule) 설정 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 509-0](images/p0509_img0.png) + + +![이미지 509-1](images/p0509_img1.png) + + +![이미지 509-2](images/p0509_img2.png) + + +![이미지 509-3](images/p0509_img3.png) + + +--- + +| 한국인터넷진흥원 | +510 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 네트워크 구성도를 검토하여 제어망으로부터 내부 업무망 또는 외부 업무망과 연계지점이 +있는지 확인 +Step 2) 해당 연계지점에서의 정보 전송이 다음 각 호의 방법과 같은 일방향으로 이루어지는지 확인 +§ 송·수신 회선 한쪽을 물리적으로 단절 +(예시: LAN, 시리얼 라인의 업무망에서 제어망으로의 TX-RX 라인을 절체) +§ 데이터 송신용 장비, 수신용 장비를 한 쌍으로 하여 일방향으로만 정보 전달이 가능하도록 개발된 +전용 장비 사용 +※ 물리적 일방향 자료전달 환경 구축 +일방향 자료전달 환경을 구축의 방안으로는 물리적으로 절체한 일방향 전송 장비를 이용하여 구축하는 +방안이 있음 +[ RX 장비와 TX 장비를 활용한 일방향 전송 환경1 ] +[ RX 장비와 TX 장비를 활용한 일방향 전송 환경2 ] + + +![이미지 510-0](images/p0510_img0.png) + + +![이미지 510-1](images/p0510_img1.png) + + +![이미지 510-2](images/p0510_img2.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +511 +C-23 +(상) +제어시스템 > 4. 네트워크 접근통제 +제어 네트워크에 무선인터넷, 테더링, 외부 유선망 등의 외부망 연결을 제한하고 주기적으로 점검 +개요 +점검 내용 +제어망, 업무망, 인터넷망 등의 물리적 망 분리 이외에도 이를 우회할 수 있는 무선인터넷, 테더링 등의 +통제 여부 점검 +점검 목적 +내부 보안정책을 우회할 수 있는 비인가 무선 AP 설치, 스마트폰의 테더링 이용 등과 같은 외부해킹 및 +악성코드 감염 경로를 차단하기 위함 +보안 위협 +Ÿ 제어망 또는 업무망 등에 비인가 무선 AP 설치, 스마트폰의 테더링 이용 등과 같은 외부로의 +인터넷 연결 점검이 생기는 경우는 물리적 망 분리를 우회할 수 있고 이를 통해 악성코드가 +유입되는 경우 제어망에 위치한 시스템까지 감염될 위험이 존재함 +Ÿ 무선통신 인터셉트(EM/RF Interception): 일반적인 제어시스템 통신 구간에서는 무선통신을 +사용하지 않지만, RTU 하단의 제어 구성요소들과 IED에는 무선통신이 적용되는 경우가 있고 해당 +통신 구간의 통신은 비인가 기기를 이용한 가로채기가 상대적으로 용이 +참고 +※ 제어시스템의 보안정책 우회 접근: 제어시스템을 구성하는 환경에서 내부망 내에 위치한 비인가 +무선 AP(또는 외부로부터 수신되는 무선 AP), 스마트폰의 테더링 등을 이용한 외부 인터넷 연결이 +이루어질 수 있으며 이를 차단하기 위해서는 비인가 기기의 반·출입 통제, 무선랜카드 사용통제 +등의 물리적 통제를 함께 고려해야 함 +[ 무선 AP를 이용한 제어망 무단 접근 ] +점검 대상 및 판단 기준 +대상 +제어시스템을 구성하는 네트워크 전체 +판단 기준 +양호 : 제어 시설에 비인가 장비에 대한 반입이 불가능하며, 제어망 및 내부 업무망의 유·무선 인터넷 +접속차단이 이루어지는 경우 +취약 : 제어 시설에 비인가 장비에 대한 반입 통제가 이루어지지 않거나, 제어망 및 내부 업무망에서 +유·무선 인터넷 접속이 가능한 경우 +조치 방법 +외부 연계 접점 차단 설정(외부 연계일 경우 물리적 일방향 시스템 적용) +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 511-0](images/p0511_img0.png) + + +![이미지 511-1](images/p0511_img1.png) + + +--- + +| 한국인터넷진흥원 | +512 +점검 및 조치 사례 +l 공통 +Step 1) 제어망 및 업무망에 외부 노트북, 태블릿PC, 스마트폰 등이 반입될 때 이를 통제, 보안 조치하는 절차가 +있는지 확인하고, 해당 절차가 없다면 기반시설에 대한 관리·물리 점검항목을 참조하여 개선조치 +Step 2) 제어망 및 업무망의 서버, PC에 대해 인터넷 접속 사실이 있는지 다음 각 호의 방법으로 확인하고, +접속이 가능하다면 C-09(상), C-10(상) 등의 조치 방법을 참고하여 개선조치 +§ Windows 환경인 경우, 웹브라우저에서 인터넷 사이트 연결 이력이 있는지 점검 +(1) Windows의 레지스트리 값을 확인하는 방법으로써, CMD 창에 다음 명령어를 입력 +reg query “HKCU\Software\Microsoft\Internet Explorer\TypedURLs” +(2) 상기 명령어 입력 시 웹브라우저 창에 입력한 값이 저장되는 레지스트리 값을 확인 +url1 +REG_SZ +http://www.kisa.or.kr/ +(3) Cookie 파일 확인하는 방법으로서, Cookie 파일 안에 내용에 URL을 확인하여 인터넷 사용 여부 +판단 (단, 쿠키 및 웹사이트 데이터 삭제 시는 확인 불가) +⚫CMD 창에 "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell +Folders" | findstr "Cookies" 입력하여 쿠키 저장 위치 파악 +⚫쿠키가 저장된 폴더에 들어가 쿠키 파일 내용에 포함된 URL 확인 +§ 망 분리가 이루어지지 않고 외부 인터넷 서버로의 패킷 전달이 가능한지 점검 +#ping 외부 IP(예시: 공개 DNS IP주소, 포털사이트의 IP주소 등) +Step 3) 노트북 등을 이용해 제어 시설을 이동하면서 근거리에서 수신되는 내부 무선 AP가 있는지 점검하고, +비인가 무선 AP가 있으면 제거 +§ (내부가 아닌 외부) 무선 AP가 감지되면 해당 구역의 시스템 무선랜카드를 제거 +§ (장비가 있는 경우) 무선 AP, 무선네트워크 전파 스캐너를 사용하여 점검 +Step 4) 노트북 등을 이용해 제어 시설을 이동하며 근거리에서 수신되는 외부 WiFi 접속 가능성과 스마트폰의 +테더링을 통한 접속 가능성이 있는지 점검하고, 가능한 경우, 다음 방법을 적용하여 조치 +§ 해당 구역 내 서버 및 업무 PC의 무선랜카드를 물리적으로 제거하거나 기능 정지 +§ (장비가 있는 경우) 무선 방화벽을 통한 무선망 이용 차단 + + +![이미지 512-0](images/p0512_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +513 +C-24 +(상) +제어시스템 > 4. 네트워크 접근통제 +제어 네트워크에 비인가된 시스템/기기에 대한 연결 및 접속을 차단 +개요 +점검 내용 +제어 네트워크에 비인가된 시스템/기기 등을 연결하는 경우의 연결 및 접속 차단 여부 점검 +점검 목적 +출입자가 비인가 기기, 서버 및 노트북 등을 반입하여 임의로 제어 네트워크에 연결할 수 없도록 하기 위함 +보안 위협 +악성코드가 감염된 기기, 서버 및 노트북 등을 악의적인 목적으로 반입하여 제어 네트워크에 연결하고 +접속하는 경우 해당 시스템을 경유하여 업무망 또는 제어망의 취약한 시스템(예시: 특정 버전의 OPC +시스템)을 위협하고 제어설비의 권한을 획득할 위험이 존재함 +[ 비인가된 기기를 통한 제어시스템 접근 및 제어명령 ] +참고 +※ 제어시스템의 비인가 기기 연결통제 방안 : 제어시스템을 구성하는 환경에서 비인가 서버 및 노트북 +등이 반입되고 이를 손쉽게 제어 네트워크에 연결하는 것을 차단하기 위해서는 비인가 기기의 +반·출입 통제, 기기의 네트워크 연결통제 등을 함께 고려해야 함 +점검 대상 및 판단 기준 +대상 +제어시스템을 구성하는 네트워크 전체 +판단 기준 +양호 : 사전 허가된 시스템 및 기기만 제어 네트워크에 연결 및 접속이 가능한 경우 +취약 : 사전 허가되지 않은 임의의 시스템 및 기기가 제어 네트워크에 연결 및 접속이 가능한 경우 +조치 방법 +제어시스템을 구성하는 네트워크에 시스템 또는 기기를 연결하는 경우 사전 승인 및 MAC 식별 등에 +의한 접근통제 조치 설정 +조치 시 영향 +현재 제어시스템 내 운영 서비스에 대한 정확한 파악이 되지 않은 경우, 장애 발생 가능 + + +![이미지 513-0](images/p0513_img0.png) + + +![이미지 513-1](images/p0513_img1.png) + + +--- + +| 한국인터넷진흥원 | +514 +점검 및 조치 사례 +l 공통 +Step 1) 제어 네트워크에 비인가 시스템 및 기기를 임의로 연결할 수 없도록 다음 각 호의 방법과 같은 조치가 +적용되는지 확인 +§ 연결하려는 기기의 MAC 주소 등의 정보를 식별하고 내부 신청절차에 따라 허가된 IP주소를 +부여(관리적 통제) +§ NAC(Network Access Control) 등의 시스템을 적용하여 허가되지 않은 임의의 시스템 및 기기 연결을 +차단(기술적 통제) +Step 2) 유지보수 등을 위해 제어망의 시스템 접근이 필요한 경우에는 사전 허가된 제어망 시스템에 대하여만 +접근할 수 있도록 하는 보안대책을 적용 +(예시: 방화벽을 경유한 VPN 접속) +[ 허가받지 않은 외부기기의 접속 통제 ] + + +![이미지 514-0](images/p0514_img0.png) + + +![이미지 514-1](images/p0514_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +515 +C-25 +(상) +제어시스템 > 4. 네트워크 접근통제 +물리적 일방향 자료전달 환경의 올바른 동작 및 운용에 대한 주기적인 점검 수행 +개요 +점검 내용 +제어망으로부터 업무망으로의 데이터 전송을 위한 물리적 일방향 전송 환경이 정상 동작하고 있는지 +운용상태를 주기적으로 점검 +점검 목적 +물리적 일방향 자료전달을 위한 장비가 올바르게 운용되었는지 확인하여 업무망 침해위협으로 인한 +제어망에 직접적인 피해(예시: 운전 조작 등)가 발생하지 않도록 하기 위함 +보안 위협 +제어망과 업무망 간 운전정보를 양방향 전송하게 되는 경우 업무망의 운영자 PC를 통한 내부자 부주의 +또는 오·남용(예시: 운전 조작 등) 우려가 있고, 악성코드가 유입되는 경우 제어망에 위치한 시스템까지 +감염될 수 있음 +참고 +※ +본 점검항목은 제어망에 위치한 설비 또는 시스템 등의 정보를 외부(내부 업무망 또는 외부 업무망)로 +전송하는 경우 물리적 일방향 전송을 위한 환경을 올바르게 설정하고 운용하고 있는지 확인함 +※ 본 항목은 C-10 항목에서 확인한 일방향 전송 장비의 운용현황을 점검하는 항목으로 잘못된 +운용으로 인한 분리된 네트워크의 외부 노출 가능성을 방지하기 위한 항목임 +점검 대상 및 판단 기준 +대상 +제어망으로부터 내부 업무망으로 정보 연계가 이루어지는 시스템 +제어망으로부터 외부 업무망으로 제어망의 운전정보 등을 전송하는 설비 및 시스템 +판단 기준 +양호 : 제어망의 운전정보를 업무망으로 일방향 전송하도록 설정한 것으로 확인되고 일방향 트래픽만 +존재하는 경우 +취약 : 제어망의 운전정보를 업무망으로 양방향 전송하도록 설정되거나 양방향 트래픽이 확인되는 경우 +조치 방법 +내·외부의 통신선로에 대한 물리적 일방향 전송이 이루어지도록 조치하거나, 방화벽 등을 통한 일방향 +접근통제 정책(Rule) 설정 +조치 시 영향 +현재 제어시스템 내 운영 서비스에 대한 정확한 파악이 안될 경우, 장애 발생 가능 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 네트워크 구성도를 검토하여 제어망으로부터 내부 업무망 또는 외부 업무망과의 +연계지점에 일방향 전송을 위한 장비가 구축되어 있는지 확인 +Step 2) 해당 연계 지점에서의 정보 전송이 다음 각 호의 방법과 같이 운용하고 있는지 실제로 현장에서 확인 +§ 송·수신 회선 한쪽을 물리적으로 단절 +(예시: LAN, 시리얼 라인의 업무망에서 제어망으로의 TX-RX 라인을 절체) + + +![이미지 515-0](images/p0515_img0.png) + + +--- + +| 한국인터넷진흥원 | +516 +[ 일방향 전송을 위한 물리적 절체 ] +§ 데이터 송신용 장비, 수신용 장비를 한 쌍으로 하여 일방향으로만 정보 전달이 가능하도록 개발된 +전용 장비 사용 +[ RX 장비와 TX 장비를 활용한 일방향 전송 환경 ] +§ 제어망 송신자 주소에서 내·외부 업무망 수신자 주소 및 포트에 대해서만 제한적인 out-bound 정책 +허용(in-bound 정책 적용은 금지) +Step 3) 제어망과 내부 업무망 또는 외부 업무망 간의 트래픽 분석 결과, 일방향 전송 트래픽만 존재하는지 확인 + + +![이미지 516-0](images/p0516_img0.png) + + +![이미지 516-1](images/p0516_img1.png) + + +![이미지 516-2](images/p0516_img2.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +517 +C-26 +(하) +제어시스템 > 4. 네트워크 접근통제 +제어 네트워크를 용도에 따라 세분화하고, 접근제어를 수행하여 제어시스템 운영에 필요한 네트워크, +시스템 간의 통신만 허용 +개요 +점검 내용 +제어시스템을 구성하는 서브넷(Subnet) 등의 방법으로 세분화(예시: 제어망을 종류별로 구분)하고 이에 +따른 접근통제 여부 점검 +점검 목적 +제어시스템 및 운영조직의 규모에 따라 네트워크 내부를 계통 및 역할에 따라 세분화하여 이에 대한 +접근통제를 강화하기 위함 +보안 위협 +단일 네트워크 내에 있는 모든 시스템, 기기에 대해 운영자의 임의 접근이 가능하거나 악성코드 감염에 +따른 피해 확산의 위험이 존재함 +참고 +※ 계통의 경우 에너지 생산 분야를 예로 들면, 터빈(가스, 스팀), 보일러, 전기(ECMS) 등의 각 +제어시스템을 의미하며 PLC 등을 이용한 소규모 제어시스템(예시: 탈황‧탈질, 집진, 수처리 등) +각각을 뜻함 +※ 역할의 경우 상기 계통을 효과적으로 운영하기 위해 구축하는 분석‧감시시스템, 패치 및 업데이트의 +안정성을 확보하기 위한 시험‧평가시스템, 운전원의 교육을 위한 훈련 시스템 등을 의미 +점검 대상 및 판단 기준 +대상 +제어시스템을 구성하는 네트워크 전체 +판단 기준 +양호 : 제어망 내부 네트워크를 세분화하여 구성하고 접근통제 규칙이 적용된 경우 +취약 : 제어망 내부 네트워크를 단일 구성한 경우 +조치 방법 +제어망 내부 네트워크를 용도에 따라 세분화하여 구성하고 세분화된 네트워크 간에 접근통제 규칙을 +방화벽, 스위치 등을 통해 설정 +조치 시 영향 +접근 정책 설정에 따라 일부 제어시스템, 설비 간의 오작동 발생 가능 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 네트워크 전체 구성도와 제어망 내의 상세 네트워크 구성도(IP 대역 포함)를 확인하되 다음 +사항을 함께 점검 +§ 제어망이 단일 네트워크로 이루어지지 않고 제어설비의 역할 따라 서브넷(Subnet) 구성 +§ IP 대역을 분리, 구성한 장비(예시: 방화벽, 스위치 등)에 설정된 접근통제 규칙 +Step 2) Step 1)에 따라 점검한 결과, 제어망을 세분화하여 네트워크 구성이 이루어졌고 분리 구성된 네트워크 +간에 접근통제 규칙이 네트워크 장비 또는 방화벽에 적절하게 적용되었는지 점검 + + +![이미지 517-0](images/p0517_img0.png) + + +--- + +| 한국인터넷진흥원 | +518 +※ 네트워크 구성을 변경하는 것은 제어시스템 일부 또는 전체에 큰 영향을 줄 수 있음 즉 서브넷 구성 +실수(예시: IP주소 충돌 등)와 스위치 및 방화벽의 접근규칙 오류(예시: 서브넷 간의 IP 차단)만으로 HMI +등의 모니터링 장애, 특정 제어설비에 제어 명령 수신 오류 등의 발생 가능성이 높으므로 점검항목 C-34에 +따른 시험환경 구축은 물론 긴급 상황 발생 시 복구 대책 등을 함께 고려한 뒤에 개선조치 수행을 권고 +※ 계층적으로 구성된 IP 체계 예시 +네트워크 단위 +IP +중앙제어 네트워크 + +#### 10.0.0.1~255 + +광역 지역 제어 네트워크 +광역 지역 제어 네트워크1 + +#### 10.10.0.1~255 + +광역 지역 제어 네트워크2 + +#### 10.20.0.1~255 + +광역 지역 제어 네트워크3 + +#### 10.30.0.1~255 + +지역 제어 네트워크 +지역 제어 네트워크1 + +#### 10.30.10.1~255 + +지역 제어 네트워크2 + +#### 10.30.20.1~255 + +지역 제어 네트워크3 + +#### 10.30.30.1~255 + +※ 내부 네트워크의 구성을 표준적으로 요구할 수는 없기 때문에 산업특성, 규모 등을 고려해 적절한 세분화가 +이루어지는 확인 +[ 방화벽을 이용한 네트워크 세분화 구성 예시 ] + + +![이미지 518-0](images/p0518_img0.png) + + +![이미지 518-1](images/p0518_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +519 +C-27 +(상) +제어시스템 > 5. 물리적 접근 통제 +제어시스템에 대해 네트워크 포트, USB 포트 등 외부 연결 접점에 대해 허가받은 사항을 제외하고 모두 +물리적 또는 논리적으로 차단 +개요 +점검 내용 +제어시스템 구성요소에 존재하는 네트워크 포트, USB 포트 등 외부 연결접점에 대한 사용 통제(예시: +원천 차단 및 허가 시 접근) 여부 점검 +점검 목적 +제어시스템 구성요소의 사용하지 않는 포트에 대해 봉인 및 차단을 함으로써 제어시스템의 외부 접점을 +통한 허가받지 않은 사용자의 제어시스템 무단 접근을 차단하기 위함 +보안 위협 +Ÿ 제어시스템의 네트워크 포트를 통해 악의적인 장비가 제어망에 접근하여 공격을 시도할 위험이 존재함 +Ÿ 제어시스템의 USB 포트에 안전하지 않은 이동형 저장 매체 연결 시 악성코드 감염을 통해 +제어시스템의 장애 또는 정지 등의 피해가 발생할 위험이 존재함 +Ÿ 제어시스템 구성요소의 디버깅 포트를 통해 구성요소에 접근하여 펌웨어 추출, 악성 펌웨어 삽입, +제어 명령 실행 등을 통해 제어시스템의 장애 또는 정지가 발생할 위험이 존재함 +참고 +※ 외부 연결 접점 통제방안: 제어시스템 구성요소의 물리적으로 접근 가능한 모든 인터페이스에 대해 +봉인장치 또는 일련번호가 있는 보안스티커를 활용하여 봉인하거나 해당 포트의 비활성화를 통해 +논리적으로 차단 및 봉인 또는 차단된 인터페이스를 불가피하게 개폐하는 경우 정보보호 책임자의 +승인을 획득하고 봉인장치 관리대장에 사용내역을 기록하여 관리하도록 권고 +점검 대상 및 판단 기준 +대상 +제어시스템 구성요소 전체 +판단 기준 +양호 : 사용하지 않는 네트워크 포트, USB 포트 등을 물리적 봉인장치 또는 일련번호가 있는 스티커로 +봉인하거나 논리적으로 차단하는 경우 +취약 : 사용하지 않는 네트워크 포트, USB 포트 등을 물리적으로 봉인하지 않고 논리적으로도 차단하지 +않은 경우 +조치 방법 +미사용 인터페이스(네트워크 포트, USB 포트 등)에 대해 물리적 차단 조치를 적용하거나 해당 기능을 +논리적으로 차단하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소의 미사용 인터페이스(네트워크 포트, USB 포트 등)에 대한 물리적 봉인 여부 확인 +※ 점검 대상은 제어 H/W(PLC, DCS 등), 서버, PC, 현장장치(센서, 액추에이터 등), 네트워크 장치, 방화벽, +단방향 장치, 프린터, 엔지니어링 노트북 등 제어시스템에 연결 가능한 모든 구성요소임 + + +![이미지 519-0](images/p0519_img0.png) + + +--- + +| 한국인터넷진흥원 | +520 +[ 네트워크 포트 봉인 예시 ] +[ USB 포트 봉인 예시 ] +Step 2) 물리적 봉인이 되지 않은 제어시스템 구성요소의 미사용 인터페이스(네트워크 포트, USB 포트 등)에 +대한 논리적 차단 여부 확인 +[ 네트워크 장비 미사용 인터페이스 비활성화(shutdown) 예시 ] + + +![이미지 520-0](images/p0520_img0.png) + + +![이미지 520-1](images/p0520_img1.png) + + +![이미지 520-2](images/p0520_img2.png) + + +![이미지 520-3](images/p0520_img3.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +521 +C-28 +(중) +제어시스템 > 5. 물리적 접근 통제 +제어시스템 구성요소를 물리적으로 보호할 수 있는 조치 적용(잠금장치가 있는 함체, 랙, 수납 책상 등) +개요 +점검 내용 +물리적으로 보호될 수 있는 잠금장치가 있는 함체, 랙, 수납 책상 등을 통한 제어시스템 구성요소 보호 +여부 점검 +점검 목적 +제어시스템 구성요소가 물리적인 공격으로부터 보호하기 위해 인가되지 않은 물리적인 접근을 차단하고 +있는지 확인하기 위함 +보안 위협 +제어시스템의 가용성을 방해하기 위한 여러 공격 중 하나로 제어기기에 대한 물리적인 손상이 있으며, +이를 통해 직접적인 가용성 방해 및 물리적 공격을 통한 내부정보 유출 등의 위험이 존재함 +참고 +※ 본 점검항목은 제어시스템 구성요소의 물리적인 보호를 위한 기초적인 보호 조치로, 물리적인 보호 +조치(함체, 랙, 수납 책상 등)에 대한 무단 해제 시도 시 이를 탐지할 수 있는 방법(CCTV 등)도 +적용할 것을 권고 +점검 대상 및 판단 기준 +대상 +제어시스템 모든 구성요소 +판단 기준 +양호 : 제어시스템의 모든 구성요소가 잠금장치가 있는 함체, 랙, 수납 책상 등으로 보호되고 있는 경우 +취약 : 제어시스템의 모든 구성요소가 별도의 보호장치 없이 바로 접근이 가능한 경우 +조치 방법 +별도의 보호장치 없이 노출된 제어시스템 구성요소에 잠금장치가 있는 함체, 랙, 수납 책상 등으로 +인가되지 않은 물리적 접근이 불가능하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소가 잠금장치가 있는 함체, 랙, 수납 책상 등을 통해서 보호되고 있는지 확인 +§ 특히, 현장에 설치된 제어시스템의 구성요소인 경우 인가되지 않은 물리적인 접근으로부터 보호되고 +있는지 점검 +§ 잠금장치가 있는 함체, 랙, 수납 책상 등으로 제어시스템 구성요소가 보호되고 있으며 인가된 +사용자만 이에 대한 잠금 해제할 수 있도록 해야 하며, 보호되지 않은 제어시스템 구성요소는 이러한 +보호장치를 구비하여 적용하도록 조치 + + +![이미지 521-0](images/p0521_img0.png) + + +--- + +| 한국인터넷진흥원 | +522 +C-29 +(상) +제어시스템 > 6. 보안위협 탐지 +백신 프로그램 설치가 가능한 제어시스템 구성요소에 대해 악성코드 감염 및 차단을 위한 백신 프로그램 설치 +개요 +점검 내용 +백신 프로그램 설치가 가능한 제어시스템 구성요소에 백신 프로그램 설치 여부 확인 +점검 목적 +제어시스템을 악성코드 감염으로부터 보호하기 위한 백신 설치 여부를 확인하기 위함 +보안 위협 +백신 프로그램이 설치되지 않은 경우, 악성 바이러스로 인한 제어시스템 장애, 정지 등의 발생 위험이 존재함 +참고 +※ 바이러스 : 프로그램을 통해 감염되는 악성 소프트웨어 +※ 웜 : 자체 복제하고 네트워크를 통해 스스로 감염되는 악성 소프트웨어 +※ 트로이목마 : 겉보기에는 정상적인 프로그램으로 보이지만 악성 루틴이 숨어 있어 실행하면 악성코드를 +실행하는 소프트웨어 +※ 랜섬웨어 : 특정 파일을 암호화하여 파일을 사용 불가능한 상태로 만들어 복구를 위해 돈을 요구하는 +악성 소프트웨어 +점검 대상 및 판단 기준 +대상 +제어시스템 구성요소 중 정보시스템(서버, PC 등)과 같이 백신 프로그램 설치가 가능한 구성요소 +판단 기준 +양호 : 백신 프로그램이 설치된 경우 +취약 : 백신 프로그램이 설치되지 않은 경우 +조치 방법 +제어시스템 제조사와 협의하여 안정성이 보장되는 백신 프로그램을 설치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소 중 백신 프로그램 설치가 가능한 구성요소 확인 +Step 2) 백신 프로그램 설치가 가능한 구성요소에 모두 백신 프로그램이 설치되어 운용되고 있는지 확인 +※ 백신 프로그램 예시 +[ Windows Defender(MS) ] +[ Kaspersky Antivirus(Kaspersky) ] + + +![이미지 522-0](images/p0522_img0.png) + + +![이미지 522-1](images/p0522_img1.png) + + +![이미지 522-2](images/p0522_img2.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +523 +[ 알약(이스트소프트) ] +[ V3(안랩) ] +※ 제어시스템 가용성 등의 문제로 인해 백신 프로그램 설치가 불가능한 구성요소의 경우 이에 대해 인지하고 +보완대책 마련 필요 + + +![이미지 523-0](images/p0523_img0.png) + + +![이미지 523-1](images/p0523_img1.png) + + +![이미지 523-2](images/p0523_img2.png) + + +--- + +| 한국인터넷진흥원 | +524 +C-30 +(하) +제어시스템 > 6. 보안위협 탐지 +이상 트래픽 발생 탐지 등 제어시스템 내의 보안 관리를 위해 적합한 침입탐지시스템 등을 구축 및 +운용하고, 구축된 보안 솔루션 및 보안 장비에서 탐지한 보안 이벤트에 대해 모니터링 수행 +개요 +점검 내용 +제어시스템 내에 침입탐지시스템 등의 보안 관리 방안 구축 및 구축된 보안 장비에서 탐지한 보안 +이벤트에 대한 모니터링 수행 여부 점검 +점검 목적 +제어망 내 이상 트래픽 발생 등을 탐지하기 위해 침입탐지시스템 등을 구축하고 보안 이벤트를 +모니터링하여 제어시스템을 안전하게 운용하기 위함 +보안 위협 +가용성을 중요시하는 제어시스템의 특성상 공격에 대한 적시 가능이 매우 중요하며 보안 이벤트에 대한 +실시간 모니터링이 이루어지지 않고 있는 경우 사고 발생 시 이에 대한 탐지가 늦어 피해 파급 효과가 +증대될 위험이 존재함 +참고 +※ 오용(Misuse) 침입탐지시스템을 구축한 경우, 공격 패턴은 물론 충분한 양의 과거 공격 패턴을 +적용하여 탐지 정책을 설정해야 함 +※ 비정상행위(Anomaly) 침입탐지시스템을 구축한 경우, 도입 기관의 트래픽 패턴을 분석하여 +정상행위 프로파일이 최적화되어 있어야 함 +점검 대상 및 판단 기준 +대상 +제어망 네트워크 +판단 기준 +양호 : 제어시스템 내에 침입탐지시스템이 구축되어 있고 이상 트래픽, 보안 이벤트 등에 대해 모니터링을 +수행하는 경우 +취약 : 제어시스템 내에 이상 트래픽, 보안 이벤트 등에 대해 모니터링을 수행하지 않는 경우 +조치 방법 +제어망 전체에 대해 이상 트래픽 발생 등을 탐지할 수 있는 침입탐지시스템 등을 구축하고 보안 +이벤트를 모니터링하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소 현황(목록)을 활용하여 제어시스템 이상 트래픽 발생 탐지 등을 위한 장비 +(침입탐지시스템 등) 구축 유무를 확인 +Step 2) Step 1) 에서 확인한 구축 장비를 활용하여 탐지한 보안 이벤트를 모니터링하는지 확인 +※ 이상 트래픽 탐지 장비는 제어망 내의 전체 트래픽에 대해 탐지할 수 있는 위치에 구축 및 운용되어야 함 + + +![이미지 524-0](images/p0524_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +525 +C-31 +(상) +제어시스템 > 7. 복구 대응 +제어시스템 대상 사이버 위기대응 매뉴얼을 수립 +개요 +점검 내용 +제어시스템 대상 사이버 침해사고 발생 시 대응을 위한 사이버 위기대응 매뉴얼 수립 여부 점검 +점검 목적 +비상상황에 의한 피해 파급 효과가 큰 제어시스템의 사이버 위협, 침해사고 발생 시 신속한 원인 규명, +복구 등이 이루어질 수 있도록 하기 위함 +보안 위협 +사이버 위기대응 매뉴얼이 수립되지 않은 경우, 제어시스템에 사이버 침해사고 발생 시 신속한 복구 및 +안정적인 운영이 어려울 수 있음 +참고 +※ 본 점검항목은 사이버 침해사고 발생 시 대응을 위한 매뉴얼의 문서화 여부를 확인하는 항목으로 +경보 단계별 조치사항, 사고대응 및 조치 절차, 사고신고 절차 등을 포함하고 신고 및 대응을 위한 +유관 기관 연락처, 제어시스템 구성요소 제조사 및 협력업체 담당자 연락처 등이 포함되어야 함 +점검 대상 및 판단 기준 +대상 +제어시스템 전체 및 관련 운영조직 +판단 기준 +양호 : 제어시스템 운용환경에 맞는 사이버 위기대응 매뉴얼이 수립되었고, 해당 자료가 모두 최신으로 +개정된 경우 +취약 : 제어시스템 운용환경에 맞는 사이버 위기대응 매뉴얼의 전부 또는 일부가 수립되지 않았거나, +해당 자료가 최신 시스템에 맞게 현행화(개정)되어 있지 않은 경우 +조치 방법 +제어시스템 환경에 맞는 사이버 위기대응 매뉴얼을 수립(문서화)하고 정기적 또는 주기적인 개정(현행화) 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 사이버 위기대응 매뉴얼이 다음의 내용을 포함하여 수립되어 있는지 확인하고 미수립되어 있다면 해당 +자료를 수립하도록 조치 +§ 경보 단계별 조치사항 +§ 사고대응 및 조치 절차 +§ 사고신고 절차 +§ 유관기관 연락처 +§ 제어시스템 구성요소 제조사 담당자 연락처 +§ 제어시스템 관련 협력업체 담당자 연락처 +Step 2) Step 1) 에 따라 수립된 자료가 제어시스템 변경 등에 따라 현행화(개정)되어 있는지 점검하고 미흡한 + + +![이미지 525-0](images/p0525_img0.png) + + +--- + +| 한국인터넷진흥원 | +526 +경우 현행화하도록 조치 + + +![이미지 526-0](images/p0526_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +527 +C-32 +(상) +제어시스템 > 7. 복구 대응 +제어시스템 대상 사이버 위기대응 훈련을 정기적으로 시행 +개요 +점검 내용 +제어시스템 대상 사이버 침해사고 발생 시 체계적인 대응을 위한 정기적인 사이버 위기대응 훈련 시행 +여부 점검 +점검 목적 +비상상황에 의한 피해 파급 효과가 큰 제어시스템의 사이버 위협, 침해사고 발생 시 신속한 원인 규명, +복구 등이 이루어질 수 있도록 하기 위함 +보안 위협 +사이버 위기대응 훈련이 시행되지 않은 경우, 제어시스템에 사이버 침해사고 발생 시 체계적인 대응 및 +신속한 복구 작업이 어려울 수 있음 +참고 +※ 본 점검항목은 사이버 침해사고 발생 시 대응을 위한 매뉴얼의 문서화 여부를 확인하는 항목으로 +경보 단계별 조치사항, 사고대응 및 조치 절차, 사고신고 절차 등을 포함하고 신고 및 대응을 위한 +유관 기관 연락처, 제어시스템 구성요소 제조사 및 협력업체 담당자 연락처 등이 포함되어야 함 +점검 대상 및 판단 기준 +대상 +제어시스템 관련 조직 및 운영인력 전체 +판단 기준 +양호 : 제어시스템 관련 모든 인력에 대한 사이버 위기대응 훈련계획을 수립하고 정기적으로 시행한 경우 +취약 : 제어시스템 관련 일부 인력에 대해서만 사이버 위기대응 훈련을 시행하거나 수행하지 않은 경우 +조치 방법 +제어시스템 관련 모든 인력에 대한 사이버 위기대응 훈련계획을 수립하고 정기적으로 훈련을 +수행하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 정기적인 사이버 위기대응 훈련계획이 수립되어 있는지 확인하고 미수립되어 있다면 수립하도록 조치 +Step 2) Step 1) 에 따라 수립된 계획에 따라 정기적으로 사이버 위기대응 훈련을 시행하고 훈련결과를 보고하였는지 +점검하고 미흡한 경우 정기적인 훈련을 시행하도록 조치 + + +![이미지 527-0](images/p0527_img0.png) + + +--- + +| 한국인터넷진흥원 | +528 +C-33 +(상) +제어시스템 > 7. 복구 대응 +제어시스템 침해사고 대응을 위한 제어시스템 설정, 중요 데이터 등을 백업 및 관리 +개요 +점검 내용 +제어시스템의 장애 및 사고 발생 시 복구에 활용하기 위한 제어시스템의 설정, 중요 데이터 등 백업 및 +관리 여부 점검 +점검 목적 +제어시스템의 장애 발생 시 복구에 필요한 중요 데이터를 백업함으로써 제어시스템의 운영 연속성을 +확보하기 위함 +보안 위협 +제어시스템 설정 및 중요 데이터의 백업이 관리되지 않은 경우, 제어시스템에 사이버 침해사고 발생 시 +신속한 복구 및 지속적인 운영이 어려울 수 있음 +참고 +※ 본 점검항목은 제어시스템 관련 데이터의 백업 및 관리 여부를 확인하는 항목으로 제어 I/O 포인트, +제어 로직, PC, 서버 관련 데이터, 설정 정보 등 제어시스템의 복구에 필요한 중요 정보를 백업하고 +관리하는지 확인함 +점검 대상 및 판단 기준 +대상 +제어시스템 구성요소 전체 +판단 기준 +양호 : 제어시스템의 설정, 중요 데이터 등을 백업하여 관리하는 경우 +취약 : 제어시스템의 설정, 중요 데이터 등을 백업하지 않았거나 백업 데이터를 관리하지 않는 경우 +조치 방법 +제어시스템 구성요소의 설정 및 중요 데이터 등을 주기적으로 백업 및 관리하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소의 설정 및 중요 데이터에 대한 백업본이 존재하는지 확인하고 없는 경우 백업을 +수행하도록 조치 +Step 2) 중요 데이터에 대한 백업을 주기적으로 수행하고 있는지 확인하고 아닌 경우 주기적인 백업 작업을 +수행하도록 조치 +Step 3) 제어시스템 구성요소의 백업본에 중요 데이터가 모두 포함되었는지 확인하고 중요 데이터 중 빠진 것이 +있으면 백업본에 포함하도록 조치 +Step 4) 백업본을 안전하게 보관하고 있는지 확인하고 그렇지 않은 경우 안전하게 보관하도록 조치 + + +![이미지 528-0](images/p0528_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +529 +C-34 +(중) +제어시스템 > 7. 복구 대응 +제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 수립 +개요 +점검 내용 +제어시스템의 장애, 사이버 공격, 물리적 테러 등이 발생하는 경우에 대비한 비상계획 수립 여부 점검 +점검 목적 +제어시스템의 장애, 사이버 공격, 물리적 테러 등이 발생하는 경우, 계획된 대응방안에 따라 적절한 +조치를 하여 제어시스템을 복구하고 사회, 경제적 파급 효과 및 피해를 최소화하기 위함 +보안 위협 +제어시스템의 장애 등이 발생하는 상황에서 비상계획에 따른 적절한 대응 및 조치가 이루어지지 않아 +제어시스템의 운영이 불가능할 수 있고 이에 따른 경제적, 사회적 손실이 발생할 위험이 존재함 +참고 +※ 본 점검항목은 제어시스템의 각종 장애 발생, 사이버 공격, 물리적 테러, 환경 재해 등의 모든 +비상상황에 대비한 재난관리체계, 재난대응절차, 프로세스 및 장애의 종류에 따른 대응방안과 +행동요령을 포함하는 것으로 이중 사이버 공격에 대한 대응은 C-16 항목에서 점검하고 있음 +점검 대상 및 판단 기준 +대상 +제어시스템 전체 및 관련 운영조직 +판단 기준 +양호 : 제어시스템 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획이 수립되었고, 해당 자료가 +모두 최신으로 개정된 경우 +취약 : 제어시스템 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획이 수립되지 않았거나 해당 +자료가 최신이 아닌 경우 +조치 방법 +제어시스템 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획을 모두 수립(문서화)하고 정기적 +또는 주기적으로 개정하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 장애, 사이버 공격, 물리적 테러 등이 발생하는 경우에 대한 비상계획이 수립되어 있는지 +확인하고 비상계획이 없는 경우 수립하도록 조치 +§ 비상상황 발생 시 제어시스템 운영 모드 및 운영 정책 +§ 비상상황 발생 시 제어시스템의 중요 데이터 보호 및 복원 절차 +Step 2) 수립된 비상계획에 재난대응 절차, 재난관리체계 및 관련 인력들의 행동요령 및 협업체계 등이 모두 +포함되어 있는지 확인하고 빠진 부분이 있는 경우 포함하도록 조치 +Step 3) 수립된 비상계획이 최신 제어시스템에 맞추어 수립되어 있는지 확인하고 그렇지 않은 경우 최신 +구성요소 및 인력, 조직에 맞추어 개정하도록 조치 + + +![이미지 529-0](images/p0529_img0.png) + + +--- + +| 한국인터넷진흥원 | +530 +C-35 +(중) +제어시스템 > 7. 복구 대응 +제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 훈련을 정기적으로 시행 +개요 +점검 내용 +제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대비한 정기적인 비상계획 훈련 실시 여부 점검 +점검 목적 +제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등이 발생하는 경우 수립된 비상계획에 따라 신속한 +복구 및 대응을 통해 사회, 경제적 파급 효과 및 피해를 최소화하기 위함 +보안 위협 +비상계획 훈련을 정기적으로 실시하지 않는 경우 제어시스템의 장애 등이 발생하는 상황에서 비상계획에 +따른 적절한 대응 및 조치가 이루어지지 않아 제어시스템의 운영이 불가능할 수 있고 이에 따른 경제적, +사회적 손실 발생이 발생할 위험이 존재함 +참고 +※ 본 점검항목은 제어시스템 장애 발생 시 대응 및 복구를 위한 훈련계획의 수립과 시행 여부를 +확인하는 항목으로, 정기적인 훈련계획을 수립하여 정보보호 책임자가 승인하고 시행해야 함 +※ 비상계획 훈련은 제어시스템 운전원, 제어시스템 관리자, 유지보수 인력, 전담 보안 인력 등 +제어시스템 운영과 관련된 인력 전체를 훈련 참여 대상으로 함 +점검 대상 및 판단 기준 +대상 +제어시스템 관련 운영조직 전체 +판단 기준 +양호 : 제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 훈련을 정기적으로 +시행하는 경우 +취약 : 제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 훈련을 정기적으로 +시행하지 않는 경우 +조치 방법 +제어시스템 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 훈련계획을 수립하고 계획에 따라 +정기적으로 비상계획 훈련을 시행하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 장애, 사이버 공격, 물리적 테러 등이 발생하는 경우에 대비한 비상계획 훈련이 정기적으로 +실시되는지 확인하고 그렇지 않은 경우 정기적인 비상계획 훈련을 실시하도록 조치 +Step 2) 비상계획 훈련이 제어시스템 운전원, 관리자, 유지보수 인력 등 제어시스템 운영과 관련된 모든 인력을 +대상으로 하여 실시되는지 확인하고 그렇지 않은 경우 관련 인력을 모두 포함하여 실시하도록 조치 + + +![이미지 530-0](images/p0530_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +531 +C-36 +(중) +제어시스템 > 7. 복구 대응 +제어시스템 조작 불능에 대비하여 수작업 운전 매뉴얼 작성 및 교육 훈련 시행 +개요 +점검 내용 +제어시스템의 조작 불능에 대비한 수작업 운전 매뉴얼 작성 및 이에 대한 교육 훈련 시행 여부 점검 +점검 목적 +제어시스템 조작에 문제가 발생하는 경우에 대비한 수작업 운전 매뉴얼을 구비하고 정기적으로 교육 +훈련을 실시하여 제어시스템의 조작 불능 시에도 매뉴얼에 따라 제어시스템 가용성을 확보하기 위함 +보안 위협 +수작업 운전 매뉴얼이 없는 경우 제어시스템의 조작 불능 상황 발생 시 적절한 대응 및 조치가 +이루어지지 않아 제어시스템의 지속적인 운영이 불가능할 수 있음 +참고 +※ 본 점검항목은 제어시스템의 조작 불능에 대비한 수작업 운전 매뉴얼 작성 및 이에 대한 정기적인 +교육을 실시하는지 확인하는 것으로, 수작업 운전 매뉴얼은 장애 등으로 인해 제어시스템의 자동 +제어가 불가능한 경우 수작업 전환에 대비하여 작성 사이버 위기대응 훈련 또는 비상계획 훈련에서 +수작업 운전 훈련을 병행하는 경우 이를 수작업 운전 훈련으로 간주함 +점검 대상 및 판단 기준 +대상 +제어시스템 전체 및 관련 운영조직 +판단 기준 +양호 : 제어시스템 조작 불능에 대비한 수작업 운전 매뉴얼을 작성하고 정기적으로 수작업 운전 교육 +훈련을 시행하는 경우 +취약 : 제어시스템 조작 불능에 대비한 수작업 운전 매뉴얼을 작성하지 않았거나 정기적으로 수작업 +운전 교육 훈련을 시행하지 않는 경우 +조치 방법 +제어시스템 조작 불능에 대비한 수작업 운전 매뉴얼을 작성하고 정기적으로 수작업 운전 교육 훈련을 +시행하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템의 조작 불능에 대비한 수작업 운전 매뉴얼이 작성되었는지 확인하고 없는 경우 수작업 운전 +매뉴얼을 작성하도록 조치 +Step 2) 제어시스템의 수작업 운전에 대한 교육 및 훈련을 정기적으로 실시하는지 확인하고 그렇지 않은 경우 +정기적인 교육 훈련을 시행하도록 조치 + + +![이미지 531-0](images/p0531_img0.png) + + +--- + +| 한국인터넷진흥원 | +532 +C-37 +(하) +제어시스템 > 7. 복구 대응 +제어시스템의 각종 이벤트에 대한 로그를 관리하기 위한 중앙집중식 로그관리 수행 +개요 +점검 내용 +제어시스템의 각종 이벤트를 관리할 수 있는 중앙집중식 로그관리 수행 여부 점검 +점검 목적 +중앙집중식 로그관리를 통해 제어시스템의 사고 발생 상황 시 사고 원인 파악 및 분석에 활용하여 유사 +사고를 방지하기 위함 +보안 위협 +로그가 중앙집중식으로 관리되지 않는 경우 침해사고 발생 시 원인 파악 및 대응책 마련에 시간이 +소요되어 유사한 사고가 반복하여 발생할 위험이 존재함 +참고 +※ 사고 발생 시 신속한 원인 분석을 위해 다음의 로그 정보 수집 및 중앙집중식 관리가 필요함 +- 제어시스템 내 구성요소의 운영체제 이벤트 로그 +- 네트워크 및 보안 장비 로그 +- PLC, DCS 등의 제어 H/W와 EWS, HMI등의 제어를 위한 제어 S/W 관련 감사 로그 +- 이상 트래픽 탐지, 백신, 미디어 통제 등의 보안 이벤트 로그 +점검 대상 및 판단 기준 +대상 +제어시스템 전체 +판단 기준 +양호 : 중앙집중식 로그관리 체계를 구축하여 제어시스템의 로그를 관리하는 경우 +취약 : 중앙집중식 로그관리 체계를 구축하지 않은 경우 +조치 방법 +중앙집중식 로그관리 체계를 구축하여 제어시스템의 로그를 관리하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템의 이벤트를 집중하여 관리할 수 있는 중앙집중식 로그관리 시스템을 구축하였는지 +확인하고 없는 경우 제어시스템의 로그를 통합하여 관리할 수 있는 시스템을 구축하여 운영하도록 조치 + + +![이미지 532-0](images/p0532_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +533 +C-38 +(하) +제어시스템 > 7. 복구 대응 +제어시스템 구성요소의 기준 형상을 설정하고 변경 및 업데이트 시 형상관리 수행 +개요 +점검 내용 +제어시스템 구성요소 각각의 기준 형상이 설정되어 있고 업데이트 또는 설정 변경이 발생하는 경우 +형상관리 수행 여부 점검 +점검 목적 +제어시스템의 기준 형상을 설정하고 최신 형상을 지속적으로 관리하여 제어시스템의 장애, 고장 등이 +발생하는 경우 복구에 활용하기 위함 +보안 위협 +형상관리가 이루어지지 않은 경우, 제어시스템의 재설정이 필요한 고장 또는 장애 발생 시 안정적인 +제어시스템 운영이 되지 않을 수 있음 +참고 +※ 형상관리는 제어시스템 모든 구성요소(PLC, DCS, OWS, 네트워크 스위치, SCADA 서버 등)의 +하드웨어 및 소프트웨어(OS, 미들웨어, 응용프로그램 등) 변경, 소프트웨어 버전 변경, 설정 변경, +네트워크 변경, 제어시스템 구성 변경, IP/MAC 주소의 변경, 패치 및 업데이트 등의 각종 +제어시스템 형상변경에 모두 적용되어야 함 +점검 대상 및 판단 기준 +대상 +제어시스템 구성요소 전체 +판단 기준 +양호 : 제어시스템 구성요소의 기준 형상을 수립하고 업데이트 시 형상관리를 수행하는 경우 +취약 : 제어시스템 구성요소의 기준 형상이 없거나 업데이트 시 형상관리가 이루어지지 않는 경우 +조치 방법 +제어시스템 구성요소의 기준 형상을 수립하고 업데이트 시 형상관리를 수행하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템의 모든 구성요소(PLC, DCS, OWS, SCADA 서버, 네트워크 스위치 등)에 대한 기준 형상이 +수립되어 있는지 확인하고 없는 경우 기준 형상을 문서화하도록 조치 +§ 장비의 설치 소프트웨어 및 버전 +§ 장비의 사용 서비스 및 포트 +§ 장비의 네트워크 및 보안 설정 +§ 장비의 로그 설정 +§ 장비의 네트워크 정책 +§ 이외의 장비별 주요 형상 정보 +Step 2) 제어시스템 구성요소의 업데이트 또는 설정 변경 시 형상관리가 이루어지는지 확인하고 그렇지 않은 + + +![이미지 533-0](images/p0533_img0.png) + + +--- + +| 한국인터넷진흥원 | +534 +경우 형상관리를 수행하도록 조치 + + +![이미지 534-0](images/p0534_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +535 +C-39 +(히) +제어시스템 > 7. 복구 대응 +제어시스템 주요 장비 및 제어 네트워크 장비에 대해 이중화 +개요 +점검 내용 +제어시스템의 주요 장비 및 제어 네트워크 장비의 이중화 여부 점검 +점검 목적 +제어시스템의 주요 장비를 이중화하여 하나의 구성요소에서 장애가 발생하는 경우에도 제어시스템을 +지속적으로 운용하기 위함 +보안 위협 +주요 장비가 이중화되어 있지 않은 경우, 해당 장비에 문제가 발생하면 제어시스템의 가용성에 문제가 +발생할 위험이 존재함 +참고 +※ 본 점검항목은 제어시스템의 주요 장비 및 제어 네트워크 장비의 이중화를 확인하는 항목으로 +제어시스템의 주요 장비는 제어를 위한 SCADA 서버, 컨트롤러 기능을 하는 DCS, PLC 등의 제어 +H/W, 운영을 위한 HMI 등 핵심 운영과 관련된 장비를 기준으로 하여 선정함 +점검 대상 및 판단 기준 +대상 +제어시스템의 주요 장비 및 제어 네트워크 장비 +판단 기준 +양호 : 제어시스템의 주요 장비 및 제어 네트워크 장비에 대해 이중화되어 있는 경우 +취약 : 제어시스템의 주요 장비 및 제어 네트워크 장비에 대해 이중화되어 있지 않은 경우 +조치 방법 +제어시스템의 주요 장비 및 제어 네트워크 장비에 대해 이중화하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템의 주요 장비(예: 핵심 운영과 관련된 DCS, PLC 컨트롤러, HMI, SCADA 등)를 식별하여 +모두 이중화하였는지 확인하고 그렇지 않은 경우 이중화하도록 조치 + +[ 제어 H/W 이중화 및 3중화 예시 ] +Step 2) 제어 네트워크 장비가 이중화되었는지 확인하고 그렇지 않은 경우 이중화하도록 조치 + + +![이미지 535-0](images/p0535_img0.png) + + +![이미지 535-1](images/p0535_img1.png) + + +![이미지 535-2](images/p0535_img2.png) + + +--- + +| 한국인터넷진흥원 | +536 +C-40 +(하) +제어시스템 > 7. 복구 대응 +제어시스템 보호를 위한 화재탐지 설비 및 화재 진압설비를 구비 +개요 +점검 내용 +제어시스템을 보호하기 위한 화재탐지 설비 및 화재 진압설비 구비 여부 점검 +점검 목적 +제어시스템 설치 장소에 화재가 발생하는 경우 신속한 탐지 및 진압을 통해 운용 지속성 및 가용성을 +확보하기 위함 +보안 위협 +화재탐지 및 진압이 신속히 되지 않는 경우 제어시스템의 운영 장애가 발생할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +제어시스템 설치 장소 전체 +판단 기준 +양호 : 제어시스템 설치장소에 화재탐지 및 화재 진압설비가 구축된 경우 +취약 : 제어시스템 설치장소에 화재탐지 및 화재 진압설비가 구축되지 않은 경우 +조치 방법 +제어시스템 설치장소에 화재탐지 및 화재 진압설비 설치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 설치 장소에 화재탐지 설비와 화재 진압설비가 구축되어 있는지 확인하고 없는 경우 +구비하도록 조치 +[ 연기감지기 예시 ] +[ 화재진화기 예시 ] +[ CO2 소화기 예시 ] + + +![이미지 536-0](images/p0536_img0.png) + + +![이미지 536-1](images/p0536_img1.png) + + +![이미지 536-2](images/p0536_img2.png) + + +![이미지 536-3](images/p0536_img3.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +537 +C-41 +(하) +제어시스템 > 7. 복구 대응 +제어시스템 보호를 위한 누수탐지 설비 및 침수 대응 장비 구비 +개요 +점검 내용 +제어시스템을 보호하기 위한 누수탐지 설비 및 침수 대응 장비 구비 여부 점검 +점검 목적 +제어시스템 설치장소에 누수 발생 시 신속한 탐지 및 대응을 통해 운용 지속성 및 가용성을 확보하기 위함 +보안 위협 +누수탐지 및 대응이 신속히 되지 않는 경우 제어시스템의 침수 등에 의해 운영 장애가 발생할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +제어시스템 설치장소 전체 +판단 기준 +양호 : 제어시스템 설치장소에 누수탐지 및 침수 대응 장비가 구축된 경우 +취약 : 제어시스템 설치장소에 누수탐지 및 침수 대응 장비가 구축되지 않은 경우 +조치 방법 +제어시스템 설치장소에 누수탐지 및 침수 대응 장비 구비 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 설치 장소에 누수, 침수 등의 탐지설비를 구축하고 있는지 확인하고 없는 경우 구비하도록 +조치 +[ 누수알람시스템 예시 ] +Step 2) 제어시스템 설치 장소에 침수 시 대응을 위한 방수포, 배수펌프 등이 구비되어 있는지 확인하고 없는 +경우 구비하도록 조치 + + +![이미지 537-0](images/p0537_img0.png) + + +![이미지 537-1](images/p0537_img1.png) + + +--- + +| 한국인터넷진흥원 | +538 +C-42 +(하) +제어시스템 > 7. 복구 대응 +제어시스템에 대하여 정기적으로 사이버 위험 시나리오를 식별하고, 완화방안 수립 +개요 +점검 내용 +제어시스템의 사이버 위험 시나리오 정기적 식별 및 이를 완화하기 위한 대책 수립 여부 점검 +점검 목적 +제어시스템에 대한 새로운 사이버 위험 시나리오를 정기적으로 식별하고 완화방안을 수립하여 매년 +증가하고 있는 제어시스템 대상의 사이버 위협에 대응하기 위함 +보안 위협 +제어시스템에 대한 최신 공격 기법에 대한 완화방안을 적용하지 않은 경우, 최신 사이버 공격 및 위협에 +취약할 수 있음 +참고 +※ 제어시스템 사이버 공격 기법: 제어시스템이 점차 발전하고 고도화됨에 따라 다양한 기기들과의 +연결접점이 증가하고 제어시스템 구성요소들의 취약점이 지속적으로 공개됨에 따라 사회적인 파급 +효과가 큰 제어시스템을 대상으로 하는 공격은 점차 증가하고 있음 +점검 대상 및 판단 기준 +대상 +제어시스템 전체 +판단 기준 +양호 : 제어시스템의 사이버 위험 시나리오를 정기적으로 식별하고 완화방안을 수립한 경우 +취약 : 제어시스템의 사이버 위험 시나리오 및 완화방안을 정기적으로 수립하지 않는 경우 +조치 방법 +제어시스템의 사이버 위험 시나리오를 정기적으로 식별하고 완화방안을 수립하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 운영 중인 제어시스템 기능, 환경에 초점을 맞춘 각종 보안위협 및 사이버 위험 시나리오를 식별하고 +이를 완화하기 위한 대책을 수립하였는지 확인하고 그렇지 않은 경우 사이버 공격 완화방안을 +마련하도록 조치 +Step 2) 수립한 사이버 위험 시나리오 및 완화방안을 정기적으로 업데이트하는지 확인하고 그렇지 않은 경우 +정기적으로 위험 시나리오 식별 및 완화방안을 업데이트하도록 조치 + + +![이미지 538-0](images/p0538_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +539 +C-43 +(상) +제어시스템 > 8. 보안 관리 +제어시스템 구성요소에 대한 자산정보(담당자, 제조사, 모델명, 펌웨어 버전, 설치 SW 등)를 항상 +최신으로 유지관리 +개요 +점검 내용 +제어시스템 구성요소에 대한 자산정보(담당자, 제조사, 모델명, IP주소, 펌웨어 버전, 설치 SW 등) +문서화 및 최신 시스템 구성에 맞는 유지관리 실시 여부 점검 +점검 목적 +비상상황에 의한 피해 파급 효과가 큰 제어시스템의 사이버 위협, 침해사고 발생 시 신속한 원인 규명, +복구 등이 이루어질 수 있도록 하기 위함 +보안 위협 +제어시스템의 현황, 네트워크 구성 등이 현행화되지 않아 장애 및 시스템 장애 발생 시 신속한 복구 및 +지속적인 운영이 어려울 수 있음 +참고 +※ 본 점검항목은 자산정보의 문서화와 개정(현행화) 여부를 확인하는 항목이며, 제어시스템의 구성 +변경 및 최신 보안위협 등에 따른 펌웨어 업데이트 등 자산의 변경이 발생할 때마다 해당 시점에서 +개정 작업을 해야 함 +점검 대상 및 판단 기준 +대상 +제어시스템 전체 및 관련 운영조직 +판단 기준 +양호 : 제어시스템 자산정보 자료가 존재하고 해당 자료가 모두 최신 제어시스템 구성요소 정보와 +일치하는 경우 +취약 : 제어시스템 자산정보 자료의 전부 또는 일부가 존재하지 않거나, 작성된 자료의 전부 또는 +일부가 현행화(개정)되지 않은 경우 +조치 방법 +제어시스템 자산정보를 모두 문서화하고 정기적 또는 주기적으로 현행화(개정)하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소의 자산정보 자료가 존재하는지 확인하고 확인되지 않는 경우 해당 자료를 +작성하도록 조치 +Step 2) Step 1)에 따라 확인된 자산정보 자료가 제어시스템 변경 등에 따라 개정되어 있는지 다음 각 호의 +사항을 고려한 점검을 수행하고 미흡한 경우 현행화하도록 조치 +§ 제어설비가 위치한 곳을 실사하여 최신 자산정보 자료와 실제 제어시스템이 현재 구성된 현황과 +일치하는지 확인 + + +![이미지 539-0](images/p0539_img0.png) + + +--- + +| 한국인터넷진흥원 | +540 +※ 자산정보 자료는 제어시스템 구성요소 전체(PLC, DCS 컨트롤러, RTU, OWS, EWS, HSR, 서버, 네트워크 +장치, 방화벽, UTM 등)에 대한 담당자, 제조사, 모델명, IP주소, 펌웨어 버전, 설치 SW 등의 정보를 포함한 +자산정보 목록과 네트워크 구성도 등을 포함 + + +![이미지 540-0](images/p0540_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +541 +C-44 +(상) +제어시스템 > 8. 복구 대응 +제어시스템 중요 구성요소가 설치된 장소를 보호구역으로 설정 +개요 +점검 내용 +제어시스템 중요 구성요소가 설치된 장소(통제센터, 서버실, 기계실 등) 보호구역 설정 여부 점검 +점검 목적 +제어시스템 중요 구성요소가 설치된 구역을 보호구역으로 지정하여 허가받지 않은 사용자의 +제어시스템에 대한 물리적 접근 경로를 차단하기 위함 +보안 위협 +허가받지 않은 사용자가 제어시스템 중요 구성요소에 접근할 수 있는 경우 물리적 접근을 통해 악성코드 +설치, 제어시스템 오동작, 시스템 정지 등의 보안위협이 발생할 위험이 존재함 +참고 +※ 통제구역은 출입문을 제외하고는 외부와 완전히 차단되어 출입통제장치를 통해 출입자 식별 및 +인증을 수행하여 허가받은 사람만 출입하도록 관리해야 함 +※ 본 항목은 P-15 항목과 중복되는 내용이 있으나 장애 발생 시 파급 효과가 큰 제어시스템의 운영 +특성을 고려하여 제어시스템 설치장소를 대상으로 “상” 항목으로 점검 +점검 대상 및 판단 기준 +대상 +제어시스템 설치장소 +판단 기준 +양호 : 제어시스템 구성요소가 설치된 장소가 모두 보호구역으로 설정된 경우 +취약 : 제어시스템 구성요소가 설치된 장소의 일부 또는 전체가 보호구역이 아닌 경우 +조치 방법 +제어시스템 구성요소가 설치된 장소를 보호구역으로 지정하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템이 설치된 구역을 보호구역으로 설정하고 출입통제장치를 통해 출입자 식별·인증을 +수행하고 있는지 확인하고 그렇지 않은 경우 보호구역으로 지정하고 출입자를 통제할 수 있는 방안을 +수립하도록 조치 +※ 원격지에 분산 배치된 소규모 무인 제어시스템이나 현장장치에 대해 보호구역 지정 및 출입자 통제가 어려운 +경우, 점검에서 제외하고 제어시스템 구성요소에 대해 물리적 접근을 통제할 수 있는 보완대책 마련 + + +![이미지 541-0](images/p0541_img0.png) + + +--- + +| 한국인터넷진흥원 | +542 +C-45 +(상) +제어시스템 > 8. 보안 관리 +제어시스템에서 USB 등 이동형 저장 매체를 사용해야 하는 경우, 사전 정의된 정책에 따라 사용 +개요 +점검 내용 +제어시스템에서 USB 등의 이동형 저장 매체를 사용해야 하는 경우, 사전에 정의된 정책에 따른 사용 +여부 점검 +점검 목적 +제어시스템에 USB 등의 이동형 저장 매체를 사용해야 하는 경우 사전 승인절차 및 안전한 저장 매체만 +연결하도록 하는 등의 통제 정책을 사용하여 악성코드 감염 등의 위협을 차단하기 위함 +보안 위협 +Ÿ 제어시스템에 안전하지 않은 USB 등의 이동형 저장 매체 연결 시 악성코드 감염이 이루어지고 이를 +통해 제어시스템의 장애 또는 정지 등의 피해가 발생할 위험이 존재함 +Ÿ 위협 사례: 스턱스넷(Stuxnet) +- 이동형 저장 매체 자동실행 기능이 비활성화되어 있는 PC 환경에서 감염 및 전파를 하기 위해 +MS10-046, CVE-2010-2568 등의 취약점(LNK 파일에 대한 윈도우 쉘 아이콘 처리자 취약점)을 이용 +- 스턱스넷(Stuxnet)에 감염된 USB를 아직 감염되지 않은 PC에 연결하여 USB 내의 파일과 +디렉터리를 검색하기 위해 브라우저 창이 열리는 순간 이동형 저장 매체상에 있는 DLL 파일을 +실행하여 해당 PC 감염 +[ 스턱스넷(Stuxnet)에 감염된 이동형 저장 매체(USB 메모리) 내의 디렉터리 목록 ] +참고 +※ 제어시스템 내 이동형 저장 매체 사용통제 정책 +- USB 등의 이동형 저장 매체는 제어시스템에 연결이 불가하도록 조치하는 것이 원칙임 +- 이동형 저장 매체의 사용이 불가피한 경우, 사전에 인가된 저장 매체를 활용하고 해당 저장 매체의 +사용 승인절차와 안전조치(예시: 사용 전, 사용 후 악성코드 감염 여부 검사)가 적용되도록 하는 +통제절차 필요 +점검 대상 및 판단 기준 +대상 +제어시스템을 구성하는 서버, PC 등 이동형 저장 매체가 연결 가능한 시스템 +판단 기준 +양호 : 이동형 저장 매체 통제 정책을 수립하고 이동형 저장 매체 사용 시 수립된 정책에 따르는 경우 +취약 : 이동형 저장 매체 통제 정책을 수립하지 않았거나 이동형 저장 매체 사용 시 수립된 정책에 따르지 +않는 경우 +조치 방법 +이동형 저장 매체에 대한 사용통제 정책을 수립하고 불가피한 경우 정책에 따라 사용하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 542-0](images/p0542_img0.png) + + +![이미지 542-1](images/p0542_img1.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +543 +점검 및 조치 사례 +l 공통 +Step 1) 불가피하게 이동형 저장 매체를 사용해야 하는 경우를 위한 사용통제 정책이 수립되어 있는지 확인하고 +미수립되어 있다면 해당 정책을 수립하도록 조치 +[ 저장 매체 사용 통제절차 예시 ] +Step 2) 불가피하게 이동형 저장 매체를 사용해야 하는 경우, Step 1) 에서 정의한 정책에 따라 휴대용 저장 매체 +사용을 관리하고 있는지 확인하고 미흡한 경우 정의된 정책에 따라 사용하도록 조치 + + +![이미지 543-0](images/p0543_img0.png) + + +![이미지 543-1](images/p0543_img1.png) + + +--- + +| 한국인터넷진흥원 | +544 +C-46 +(상) +제어시스템 > 8. 복구 대응 +제어 네트워크에 연결되는 외부 정보통신기기 반‧출입 시 클린존 통과, 관리대장 작성 등 관리절차 마련 +개요 +점검 내용 +제어 네트워크에 연결되는 외부 정보통신기기의 반출·입 시 클린존 통과, 관리대장 작성 등의 관리절차 +마련 여부 점검 +점검 목적 +제어 네트워크에 승인받은 안전한 정보통신기기만 반‧출입 되도록 하는 통제 정책을 적용하여 제어 +네트워크에 통제되지 않은 기기의 접근을 차단하기 위함 +보안 위협 +안전하지 않은 외부 정보통신기기가 반출·입 되는 경우 네트워크 정보유출 또는 악성코드 감염의 가능성이 +있으며 이를 통해 제어시스템의 사이버 공격, 장애 또는 정지 등의 피해가 발생할 위험이 존재함 +참고 +※ 외부 정보통신기기는 제어 네트워크에 연결이 불가하도록 조치하는 것이 원칙이나 사용이 불가피한 +경우에는 사전 사용 승인절차와 안전조치를 포함한 반출·입 절차(예시: 사용 전 악성코드 감염 여부 +검사, 사용 후 민감한 정보 저장 여부 확인 등)를 통해 관리해야 함 +점검 대상 및 판단 기준 +대상 +제어 네트워크와 연결되는 모든 외부 정보통신기기 +판단 기준 +양호 : 외부 정보통신기기 반‧출입 시 클린존 통과, 반입 및 반출 장비에 대한 관리대장 작성 등의 +관리절차를 수립하여 해당 절차에 따르는 경우 +취약 : 외부 정보통신기기 반‧출입을 위한 관리절차를 마련하지 않은 경우 +조치 방법 +외부 정보통신기기 반·출입 시 클린존 통과, 반입 및 반출 장비에 대해 관리대장 작성 등의 관리절차를 +수립하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어 네트워크에 연결되는 외부 정보통신기기 반출·입 시 다음의 내용을 포함한 관리절차가 수립되어 +있는지 확인하고 수립되지 않은 경우 절차를 수립하도록 조치 +§ 클린존에서 외부 정보통신기기 통제조치 시행 +§ 외부 정보통신기기 반출·입 대장 기록 및 관리 +§ 일련번호 등의 식별번호를 활용한 외부 정보통신기기 반출·입 신청 및 승인 +§ 반입 시 초기화 수행 및 악성코드 존재 여부 확인 +§ 반출 시 제어시스템 관련 민감 정보 수록 여부 확인 + + +![이미지 544-0](images/p0544_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +545 +C-47 +(중) +제어시스템 > 8. 복구 대응 +제어시스템의 특성을 반영한 정보보안 정책, 지침을 수립 +개요 +점검 내용 +제어시스템의 특성을 반영한 정보보안 정책 및 지침 수립 여부 점검 +점검 목적 +제어시스템에 특화된 정보보안 지침을 수립하여 제어시스템 보안 관리 주체를 지정하고, 제어시스템에 +특화된 관리적·물리적·기술적 보안을 체계적으로 관리하기 위함 +보안 위협 +일반 IT시스템 중심의 보안 관리 이외에 제어시스템에 특화된 보안 관리 요소, 취약점 조치 등이 +누락되어 운영인력의 부주의(Human Error) 또는 운영상의 취약점을 악용한 사이버 침해위협이 발생할 +위험이 존재함 +참고 +※ 제어시스템 특성 +- EWS, OWS, Historian 등의 제어 S/W가 포함된 운영계층, PLC, DCS, RTU, IED 등의 제어 +H/W로 구성되는 제어 계층, 액추에이터, 센서 등이 포함된 현장장치 계층으로 구성됨 +- 제어시스템 보안의 경우 일반 IT시스템과 달리 가용성 측면이 가장 중요하게 고려되어야 함 +- 제어시스템의 경우 각자 특화된 시스템 및 기기로 구성되고 일반적인 IT시스템의 보안 기능과 +우선순위에 차이점이 있으므로 제어시스템을 위한 별도의 관리적, 기술적인 정책과 지침이 필요 +[ 제어시스템 운영환경 ] +점검 대상 및 판단 기준 +대상 +제어시스템 정보보안 정책 및 지침 +판단 기준 +양호 : 제어시스템의 특성을 반영한 정보보안 정책 및 지침이 별도로 수립된 경우 +취약 : 제어시스템의 특성을 반영한 정보보안 정책 및 지침이 별도로 수립되지 않은 경우 +조치 방법 +제어시스템의 특성을 반영한 정보보안 정책 및 지침을 수립 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 545-0](images/p0545_img0.png) + + +![이미지 545-1](images/p0545_img1.png) + + +--- + +| 한국인터넷진흥원 | +546 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템에 대한 보안 관리 주체와 역할, 제어시스템에 대한 접근통제 및 운영 보안 등을 포함하는 +제어시스템 정보보안지침이 별도 존재하는지 확인하고 존재하지 않는다면 제어시스템 정보보안지침을 수립 +제 1 장 총 칙 +제1조 (목적) +제2조 (적용범위) +제3조 (정의) +제 2 장 제어보안 관리체계에 대한 활동 +제4조 (활동방향) +제5조 (제어보안책임자 및 제어보안담당자) +제6조 (제어보안담당자 임무) +제7조 (취약점 진단 및 보호대책 수립) +제8조 (제어보안 교육) +제9조 (긴급사태 관리) +제10조 (제어망 운영) +제11조 (보안관리 절차 수립) +제12조 (통제구역) +제13조 (백신 프로그램 운영) +제14조 (휴대용 저장매체 사용통제) +제15조 (유지보수 통제 및 기록 관리) +제16조 (원격 유지보수 제한) +제17조 (보안성 검토 및 보안적합성 검증) +제18조 (자료관리) +제19조 (계약사항) +제 3 장 보 칙 +[ 제어시스템 정보보안지침 예시 ] +※ 제어시스템 정보보안지침의 목차 및 세부 내용은 제어시스템을 관리하는 조직에 따라 다를 수 있으나, +제어시스템에 대한 기반시설 취약점 점검항목(총 50개)을 고려하여 그 내용이 포함되도록 함 + + +![이미지 546-0](images/p0546_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +547 +C-48 +(중) +제어시스템 > 8. 복구 대응 +제어시스템 운영 업무에 대해 표준업무 절차서를 작성하고 적용 +개요 +점검 내용 +제어시스템의 운영 업무에 대해 표준업무 절차서 작성 및 적용 여부 점검 +점검 목적 +제어시스템의 운영 업무를 표준 절차에 따라 진행하여 운영자의 숙련도, 부주의나 실수에 따른 위험을 +최소화하고 제어시스템의 안정적인 운영을 수행하기 위함 +보안 위협 +제어시스템 운영에 대한 표준업무절차가 문서화되지 않는 경우 숙련되지 않은 운영자의 부주의나 +실수에 의해 제어시스템의 장애 또는 오동작이 발생할 위험이 존재함 +참고 +※ 본 점검항목은 제어시스템의 조작 및 운영 업무절차의 문서화 여부를 확인하는 항목으로 +제어시스템의 구성 변경, 정책에 따른 조직 및 업무절차 변경 등이 발생하는 경우 개정 작업이 필요함 +점검 대상 및 판단 기준 +대상 +제어시스템 관련 운영조직 +판단 기준 +양호 : 제어시스템 운영 업무에 대해 표준업무 절차서가 작성되었고, 해당 자료가 모두 최신으로 개정된 경우 +취약 : 제어시스템 운영 업무에 대해 표준업무 절차서의 전부 또는 일부가 작성되지 않았거나, 절차서의 +전부 또는 일부가 현행화(개정)되어 있지 않은 경우 +조치 방법 +제어시스템 운영 업무에 대해 표준업무절차를 모두 문서화하고 정기적 또는 주기적으로 개정(현행화)하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템의 운영 업무에 대한 표준업무 절차서가 작성되어 있는지 확인하고 그렇지 않은 경우 해당 +자료를 작성하도록 조치 +Step 2) Step 1) 에 따라 작성된 자료가 제어시스템 변경 등에 따라 현행화(개정)되어 있는지 점검을 수행하고 +미흡한 경우 현행화하도록 조치 + + +![이미지 547-0](images/p0547_img0.png) + + +--- + +| 한국인터넷진흥원 | +548 +C-49 +(하) +제어시스템 > 8. 보안 관리 +제어시스템 유지보수를 위한 전용 장비(노트북 등)를 마련하고 관련 정책을 시행 +개요 +점검 내용 +제어시스템 유지보수를 위한 전용 장비(노트북, PC 등)를 마련하고 이를 안전하게 관리하기 위한 관련 +정책 수립 및 시행 여부 점검 +점검 목적 +제어시스템 유지보수 사유로 외부에서 관리되지 않은 장비를 반입함으로써 발생하는 위협을 차단하기 위함 +보안 위협 +외부에서 악성코드가 감염된 기기, 서버 및 노트북 등을 제어시스템 유지보수를 위해 연결하는 경우 +제어시스템의 장애 및 오동작이 발생할 위험이 존재함 +참고 +※ 제어시스템은 지정·관리하는 유지·관리용 전용 장비로만 유지보수를 수행하는 것을 원칙으로 하되 +부득이한 사유로 유지보수 업체의 장비나 저장 매체를 활용하여 유지·관리를 수행하는 경우 +반·출입 시 철저한 통제 및 보안 조치를 수행해야 함 +점검 대상 및 판단 기준 +대상 +제어시스템 관련 운영조직 +판단 기준 +양호 : 제어시스템 구성요소의 유지보수 전용 장비를 별도로 마련하고 이를 안전하게 관리하기 위한 +정책을 수립·시행하는 경우 +취약 : 제어시스템 구성요소의 유지보수 전용 장비를 별도로 마련하지 않았거나 유지보수용 장비를 +안전하게 관리하기 위한 정책이 수립되지 않은 경우 +조치 방법 +제어시스템 구성요소의 유지보수 전용 장비를 별도로 마련하고 이를 안전하게 관리하기 위한 정책을 +수립하여 시행하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 구성요소의 유지보수를 위한 전용 장비를 확인하고 해당 장비가 없는 경우 유지보수 전용 +장비를 마련하도록 조치 +Step 2) 제어시스템 유지보수 전용 장비의 안전한 관리 정책을 수립하여 시행하는지 확인하고 미흡한 경우 +유지보수 전용 장비의 안전한 관리 정책을 수립하고 시행하도록 조치 + + +![이미지 548-0](images/p0548_img0.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +549 +C-50 +(상) +제어시스템 > 8. 보안 관리 +허가에 의한 로직 변경 정책 수립 +개요 +점검 내용 +제어기기의 로직 변경에 대한 사전 검토 및 허가를 포함하는 로직 변경 정책 수립 및 이행 여부 점검 +점검 목적 +내부자(현장 엔지니어, 유지보수 작업자)에 의해서 검증되지 않은 로직이 제어기기에 다운로드 시 +발생할 수 있는 제어시스템 오동작 문제를 차단하고, 제어기기의 세밀한 형상관리를 통해 제어시스템의 +안정성 및 운영 영속성을 보장하기 위함 +보안 위협 +Ÿ 제어기기 로직은 단일 제어기기는 물론 제어시스템 전체에 영향을 끼치므로 안전성이 검증되지 않은 +로직의 오작동은 전체 제어시스템의 예기치 않은 동작을 유발할 위험이 존재함 +Ÿ 제어기기 로직의 오류는 시스템의 중단을 일으키거나 제어 공정의 변경을 통해서 물리적 피해를 +유발할 위험이 존재함 +Ÿ 위협 사례: 2010년에 발견된 스턱스넷(stuxnet)은 이란의 나탄즈(Natanz) 원자력 시설을 +공격하였으며, 일련의 단계를 거쳐 시설 내 제어기기(PLC)의 로직을 변경하였고, 이를 통해서 +원심분리기의 속도를 비정상적으로 조절할 수 있었으며, 결국 일부 원심분리기의 물리적 파손을 유발함 +참고 +※ 제어기기 로직: 프로그래머블 로직 컨트롤러(PLC), 분산 제어시스템(DCS) 컨트롤러 등의 동작을 +제어하고 조정하기 위한 일련의 논리적 명령 집합이며, PLC 및 DCS 컨트롤러는 센서 및 입력 +장치로부터 수신한 데이터를 처리하여 로직에 따라 출력을 발생하고 이를 통해 현장의 +액추에이터를 동작하게 함 +[ PLC 동작 구조 ] +점검 대상 및 판단 기준 +대상 +PLC, DCS 컨트롤러 등 로직에 의해서 동작하는 제어시스템 구성요소 전체 +판단 기준 +양호 : 로직 변경 정책이 수립되어 있고, 정책에 변경 로직에 대한 사전 검토 및 승인 후 변경하도록 +절차가 마련되어 있으며, 절차를 정확히 이행하는 경우 +취약 : 로직 변경 정책이 수립되어 있지 않거나, 정책이 수립되어 있더라도 변경 로직에 대한 사전 검토 +및 승인절차가 포함되어 있지 않거나, 정책이 바르게 수립되어 있더라도 시행하지 않고 있는 경우 +조치 방법 +로직 변경 시 변경할 로직에 대해서 사전 검토 및 승인 후 변경할 로직을 적용하는 절차가 포함된 로직 +변경 정책을 수립하고 문서화하며, 수립된 정책에 명시된 절차에 따라 실제 변경을 수행하도록 관리 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 549-0](images/p0549_img0.png) + + +![이미지 549-1](images/p0549_img1.png) + + +--- + +| 한국인터넷진흥원 | +550 +점검 및 조치 사례 +l 공통 +Step 1) 제어기기 로직 변경 정책 문서에 사전 검토 및 승인 후 설치 절차가 포함되어 있는지 확인 +§ 제어기기 로직 변경 정책은 별도 문서로 관리하지 않고 조직의 보안 정책에 포함하여 관리할 수 있음 +Step 2) 제어기기 로직 변경 시 정책에 명시된 절차를 준수하는지 확인 +§ 변경 예정 로직의 검토 결과 문서 확인 +§ 제어기기의 로직 변경 허가와 관련한 내부 문서 확인 +※ 제어기기 로직 변경 여부 확인 예시 +- 제어기기 로직 변경 여부를 시스템에서 확인하고자 할 경우, 제어 S/W 또는 제어기기의 로그에서 프로그램 +다운로드와 관련한 로그를 확인하여 파악할 수 있음 +[ 제어 S/W를 통한 제어기기의 로그 확인 예시 ] + +[ 제어 S/W의 로그 확인 예시 ] + + +![이미지 550-0](images/p0550_img0.png) + + +![이미지 550-1](images/p0550_img1.png) + + +![이미지 550-2](images/p0550_img2.png) + + +--- + + +## 06. 제어시스템 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +551 +C-51 +(하) +제어시스템 > 9. 교육훈련 +제어시스템 운전원, 관리자, 유지보수인력, 보안 인력에 대해 직무별 직무교육을 정기적으로 실시 +개요 +점검 내용 +제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대비한 정기적인 비상계획 훈련 실시 여부 점검 +점검 목적 +제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등이 발생하는 경우 수립된 비상계획에 따라 신속한 +복구 및 대응을 통해 사회, 경제적 파급 효과 및 피해를 최소화하기 위함 +보안 위협 +비상계획 훈련이 정기적으로 실시되지 않는 경우 제어시스템의 장애 등이 발생하는 상황에서 +비상계획에 따른 적절한 대응 및 조치가 이루어지지 않아 제어시스템의 운영이 불가능할 수 있고 이에 +따른 경제적, 사회적 손실이 발생할 위험이 존재함 +참고 +※ 본 점검항목은 제어시스템 장애 발생 시 대응 및 복구를 위한 훈련계획의 수립과 시행 여부를 +확인하는 항목으로, 정기적인 훈련계획을 수립하여 정보보호 책임자가 승인하고 시행해야 함 +※ 비상계획 훈련은 제어시스템 운전원, 제어시스템 관리자, 유지보수 인력, 전담 보안 인력 등 +제어시스템 운영과 관련된 인력 전체를 훈련 참여 대상으로 함 +점검 대상 및 판단 기준 +대상 +제어시스템 관련 운영조직 전체 +판단 기준 +양호 : 제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 훈련을 정기적으로 +시행하는 경우 +취약 : 제어시스템의 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 훈련을 정기적으로 +시행하지 않는 경우 +조치 방법 +제어시스템 장애 발생, 사이버 공격, 물리적 테러 등에 대한 비상계획 훈련계획을 수립하고 계획에 따라 +정기적으로 비상계획 훈련을 시행하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 제어시스템 장애, 사이버 공격, 물리적 테러 등이 발생하는 경우에 대비한 비상계획 훈련이 정기적으로 +실시되는지 확인하고 그렇지 않은 경우 정기적인 비상계획 훈련을 실시하도록 조치 +Step 2) 비상계획 훈련이 제어시스템 운전원, 관리자, 유지보수 인력 등 제어시스템 운영과 관련된 모든 인력을 +대상으로 하여 실시되는지 확인하고 그렇지 않은 경우 관련 인력을 모두 포함하여 실시하도록 조치 + + +![이미지 551-0](images/p0551_img0.png) + + +--- + +PC + +## 1. 계정 관리················································································································555 + + +## 2. 서비스 관리·············································································································561 + + +## 3. 패치 관리················································································································577 + + +## 4. 보안 관리················································································································580 + +Chapter 07 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 552-0](images/p0552_img0.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +553 +01 +PC 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +비밀번호의 주기적 변경 +상 +PC-01 +비밀번호 관리정책 설정 +상 +PC-02 +복구 콘솔에서 자동 로그온을 금지하도록 설정 +중 +PC-03 + +## 2. 서비스 관리 + +점검항목 +항목 +중요도 +항목코드 +공유 폴더 제거 +상 +PC-04 +항목의 불필요한 서비스 제거 +상 +PC-05 +비인가 상용 메신저 사용 금지 +상 +PC-06 +파일 시스템이 NTFS 포맷으로 설정 +중 +PC-07 +대상 시스템이 Windows 서버를 제외한 다른 OS로 멀티 부팅이 가능하지 않도록 +설정 +중 +PC-08 +브라우저 종료 시 임시 인터넷 파일 폴더의 내용을 삭제하도록 설정 +하 +PC-09 + +## 3. 패치 관리 + +점검항목 +항목 +중요도 +항목코드 +주기적 보안 패치 및 벤더 권고사항 적용 +상 +PC-10 +지원이 종료되지 않은 Windows OS Build 적용 +상 +PC-11 + + +![이미지 553-0](images/p0553_img0.png) + + +![이미지 553-1](images/p0553_img1.png) + + +--- + +| 한국인터넷진흥원 | +554 + +## 4. 보안 관리 + +점검항목 +항목 +중요도 +항목코드 +Windows 자동 로그인 점검 +중 +PC-12 +바이러스 백신 프로그램 설치 및 주기적 업데이트 +상 +PC-13 +바이러스 백신 프로그램에서 제공하는 실시간 감시 기능 활성화 +상 +PC-14 +OS에서 제공하는 침입차단 기능 활성화 +상 +PC-15 +화면보호기 대기 시간 설정 및 재시작 시 암호 보호 설정 +상 +PC-16 +CD, DVD, USB 메모리 등과 같은 미디어의 자동실행 방지등 이동식 미디어에 대한 +보안대책 수립 +상 +PC-17 +원격 지원을 금지하도록 정책을 설정 +중 +PC-18 + + +![이미지 554-0](images/p0554_img0.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +555 +PC-01 +(상) +PC > 1. 계정 관리 +비밀번호의 주기적 변경 +개요 +점검 내용 +최대 암호 사용 기간이 “90일” 이하 설정 여부 점검 +점검 목적 +비밀번호를 주기적으로 변경하여 비밀번호 크래킹의 가능성을 낮추고, 불법으로 획득한 비밀번호의 무단 +사용을 방지하기 위함 +보안 위협 +동일한 비밀번호를 변경하지 않고 오랫동안 사용할 경우 유출이나 무차별 대입 공격에 당할 가능성이 +크고 이전에 사용하던 비밀번호를 재사용한다면 비밀번호 추측 공격으로 계정을 탈취당할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 최대 암호 사용 기간이 “90일” 이하로 설정된 경우 +취약 : 최대 암호 사용 기간이 “제한 없음”이거나 “90일을”을 초과하여 설정된 경우 +조치 방법 +※ 최대 암호 사용 기간 “90일” 설정 +※ 최소 암호 사용 기간 “1일” 설정 +※ 최근 암호 기억 설정 (권장: 24개의 비밀번호 기억) +※ 사용자가 새 비밀번호를 변경하기 전에 이를 유지해야 하는 일수를 결정. 비밀번호 변경 후 편의성 +때문에 기존 비밀번호로 다시 설정하는 경우가 많으므로 최소 사용 기간을 설정 +※ 이전 비밀번호를 다시 사용한다면 변경 주기가 의미가 없으므로 기존에 사용하던 비밀번호를 +기억해서 사용하지 못하게 함 +조치 시 영향 +비밀번호 변경 시 기존 사용했던 비밀번호를 재사용할 수 없음 +점검 및 조치 사례 +l Windows 10, 11 +[계정별 비밀번호 기간 설정] +Step 1) 시작 > 실행 > LUSRMGR.MSC +Step 2) 사용자 > 계정별 속성 > “암호 사용 기간 제한 없음(P)”, “계정 사용 안함(B)” 적용 해제 +[ 계정별 비밀번호 정책 적용 ] + + +![이미지 555-0](images/p0555_img0.png) + + +![이미지 555-1](images/p0555_img1.png) + + +--- + +| 한국인터넷진흥원 | +556 +[비밀번호 정책 설정] +Step 1) 시작 > Windows 관리 도구 > 로컬 보안 정책 +Step 2) 보안 설정 > 계정 정책 > 암호 정책 > “최대 암호 사용 기간” 속성을 “90일”, “최근 암호 기억”을 “24개”, +“최소 암호 사용 기간”을 “1일”로 설정 +[ 비밀번호 정책 적용 확인 ] + + +![이미지 556-0](images/p0556_img0.png) + + +![이미지 556-1](images/p0556_img1.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +557 +PC-02 +(상) +PC > 1. 계정 관리 +비밀번호 관리정책 설정 +개요 +점검 내용 +비밀번호 설정 정책이 복잡성을 만족하는지 점검 +점검 목적 +안전한 비밀번호 (*비밀번호 설정 기준 참고)를 사용함으로써 무차별 대입 공격, 사전공격 등 비밀번호 +탈취 목적의 공격에 대해 대비하기 위함 +보안 위협 +주기적으로 보안 패치를 적용하지 않을 경우, 버전 취약점을 이용한 공격 또는 새로운 공격에 대한 침해 +사고가 발생할 수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 복잡성을 만족하는 비밀번호 정책이 설정된 경우 +취약 : 비밀번호를 사용하지 않거나, 추측하기 쉬운 문자조합으로 이루어진 짧은 자릿수의 비밀번호를 +설정된 경우 +조치 방법 +비밀번호 정책을 해당 기관의 보안 정책에 적합하게 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 시작 > Windows 관리 도구(Windows Tools ) > 로컬 보안 정책 +Step 2) 보안 설정 > 계정 정책 > 암호 정책 > “최소 암호 길이” 속성을 “8문자(이상)”, +“암호는 복잡성을 만족해야함”을 “사용함”으로 설정 +[ 암호 정책 적용 확인 ] + + +![이미지 557-0](images/p0557_img0.png) + + +![이미지 557-1](images/p0557_img1.png) + + +--- + +| 한국인터넷진흥원 | +558 +[ 비밀번호 설정 기준 ] + +## 1. 영문, 숫자, 특수문자를 조합하여 계정명과 상이한 8자 이상의 비밀번호 설정 + +※ 다음 각 항목의 문자 종류 중 2종류 이상을 조합하여 최소 10자리 이상 또는 3종류 이상을 조합하여 최소 8자 +리 이상의 길이로 구성 +(1) 영문 대문자(26개) +(1) 영문 소문자(26개) +(2) 숫자(10개) +(3) 특수문자(32개) + +## 1. 비밀번호는 비인가자에 의한 추측이 어렵게 다음의 사항을 반영하여 설계 + +(1) Null(공백) 비밀번호 사용 금지 +(1) 문자 또는 숫자만으로 구성 금지 +(2) 사용자 ID와 같거나 유사하지 않은 비밀번호 금지 +(3) 연속적인 문자나 숫자 사용 (예) 1111, 1234, abcd) 사용 금지 +(4) 주기성 비밀번호 재사용 금지 +(5) 전화번호, 생일과 같이 추측하기 쉬운 개인정보를 비밀번호로 사용 금지 + +## 2. 아래와 같은 비밀번호 설정 지양 + +Null, 계정과 같거나 유사한 스트링, 지역명, 부서명, 담당자명, 대표 업무명 “root”, “rootroot”, “root123”, +“123root”, “admin”, “admin123”, “123admin”, “osadmin”, “adminos” + + +![이미지 558-0](images/p0558_img0.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +559 +PC-03 +(중) +PC > 1. 계정관리 +복구 콘솔에서 자동 로그온을 금지하도록 설정 +개요 +점검 내용 +Windows 복구 콘솔 자동 로그인 설정이 허용 여부 점검 +점검 목적 +복구 콘솔 자동 로그온 허용을 “사용 안 함”으로 설정함으로써 비인가자의 복구 콘솔을 통한 관리자 권한 +탈취 등의 위험을 방지하기 위함 +보안 위협 +Windows 복구 콘솔(Recovery Console) 자동 로그온 설정은 시스템 액세스 허가 전 Administrator +계정의 비밀번호 제공 여부를 결정하는 것으로 이 옵션을 사용하면 비인가자도 복구 콘솔을 이용해 +관리자 권한으로 시스템에 자동으로 로그온할 수 있는 위험이 존재함 +참고 +※ 복구 콘솔(Recovery Console): Windows 2000, Windows XP, Windows 서버 2003 운영 +체제의 기능 가운데 하나로 Windows가 그래픽 사용자 인터페이스(GUI)가 나타날 때까지 시동이 +되지 않는 상황에서 관리자들이 복구할 수 있게 하는 것이 주된 기능임. 이 콘솔을 통해 관리자들이 +명령줄 인터페이스를 이용하여 제한된 영역의 작업을 수행할 수 있음 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 복구 콘솔 자동 로그온 허용이 “사용 안 함”으로 설정된 경우 +취약 : 복구 콘솔 자동 로그온 허용이 “사용”으로 설정된 경우 +조치 방법 +복구 콘솔 자동 로그온 허용 “사용 안 함”으로 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 시작 > 모든 앱 > Windows Tools > 로컬 보안 정책 > 보안 설정 > 로컬 정책 > 보안 옵션 +Step 2) “복구 콘솔: 자동 관리 로그온 허용” 속성 “사용 안 함” 설정 + + +![이미지 559-0](images/p0559_img0.png) + + +--- + +| 한국인터넷진흥원 | +560 +[ “복구 콘솔: 자동 관리 로그온 허용” “사용 안함” 설정 ] + + + +![이미지 560-0](images/p0560_img0.png) + + +![이미지 560-1](images/p0560_img1.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +561 +PC-04 +(상) +PC > 2. 서비스 관리 +공유 폴더 제거 +개요 +점검 내용 +기본 공유 폴더(C$, D$, Admin$), 미사용 공유 폴더가 존재하는지 점검하고 공유 폴더를 사용하는 +경우 공유 폴더 접근 권한에 “Everyone”이 존재하거나 접근을 위한 비밀번호 설정 여부 점검 +점검 목적 +사용하지 않는 불필요한 공유 폴더를 해제하거나 불가피하게 사용하고 있는 공유 폴더의 경우 +비밀번호를 설정하는 등의 조치를 통해 인가된 사용자만 접근할 수 있게 함으로써 무분별한 접근을 +제한하기 위함 +보안 위협 +Ÿ 시스템 기본 공유 폴더의 경우 기본 드라이브를 개방해놓고 사용하는 것과 같은 위험이 존재함 (예시 : +실행 창 -> \\192.168.16.xxx\C$로 C 드라이브 접근 가능) +Ÿ 접근 권한이 Everyone으로 설정된 공유 폴더는 정보 유출 및 악성코드 유포의 접점이 될 수 있는 +위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 불필요한 공유 폴더가 존재하지 않거나 공유 폴더에 접근 권한 및 비밀번호가 설정된 경우 +취약 : 불필요한 공유 폴더가 존재하거나 접근 권한 및 비밀번호 설정 없이 공유 폴더가 사용된 경우 +조치 방법 +Ÿ 공유 폴더 불필요 시 삭제 +Ÿ 공유 폴더 필요하면 적절한 접근 권한 부여 및 비밀번호 설정 +Ÿ 조치 후 “AutoShareWks”값 변경으로 자동 공유 방지 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +[기본 공유 폴더 설정] +Step 1) 기본 공유 폴더 상태 확인 및 공유 중지 +시작 > 모든 앱> Windows Tools > 컴퓨터 관리 > 공유 폴더 > 공유 +(시작 > 실행 > “fsmgmt.msc” 입력 > 공유) +Step 2) 불필요한 공유 폴더 확인 > 해당 공유 폴더 우클릭 > 공유 중지(S) + + +![이미지 561-0](images/p0561_img0.png) + + +--- + +| 한국인터넷진흥원 | +562 +[ 공유 폴더 “공유 중지” 설정 ] +Step 3) 시작 > 모든 앱 > Windows Tools > 레지스트리 편집기 +Step 4) 레지스트리 경로로 이동 +HKLM\SYSTEM\CurrentControlSet\Service\LanmanServer\Parameters +Step 1) 설정값 입력 +Value name +SecurityLevel +Data Type +Dword 값 +Value +0(zero) +[ “AutoShareWks” 레지스트리 값 0으로 설정 ] + + +![이미지 562-0](images/p0562_img0.png) + + +![이미지 562-1](images/p0562_img1.png) + + +![이미지 562-2](images/p0562_img2.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +563 +Step 5) 값이 없는 경우, 새로 만들기 > “AutoShareWks”를 추가하고 값을 “0”으로 입력 +아래 그림과 같이 “AutoShareWks”를 입력하며, 이때 값은 기본값인 “0”으로 유지 +또한, 방화벽과 라우터에서 135,139(TCP/UDP) Port를 차단하여 보안성을 높일 수 있음 +※ 기본 공유에 대한 조치 시 반드시 [기본 공유 삭제], [비활성화 레지스트리 값]을 모두 설정함 +[일반 공유 폴더 설정] +Step 1) 일반 공유 폴더 확인 및 공유 중지 +시작 > 모든 앱 > Windows Tools > 컴퓨터 관리 > 공유 폴더 > 공유 +(시작 > 실행 > “fsmgmt.msc” 입력 > 공유) +Step 2) 불필요한 공유 폴더 확인 > 해당 공유 폴더 우클릭 > 공유 중지 +[ 공유 중지 ] +Step 3) 일반 공유 폴더 필요한 시 권한 설정 +시작 > 모든 앱 Windows Tools > 컴퓨터 관리 > 공유 폴더 > 공유 + + +![이미지 563-0](images/p0563_img0.png) + + +![이미지 563-1](images/p0563_img1.png) + + +--- + +| 한국인터넷진흥원 | +564 +Step 4) 사용할 공유 폴더 확인 선택 후 우클릭 > 속성 > [공유] 탭 > [공유 사용 권한] 탭 “Everyone”으로 된 +공유를 제거하고, 접근이 필요한 계정에만 적절한 권한 추가 +[ 공유 사용 권한 “Everyone” 제거 ] +[공유 폴더 접근 비밀번호 설정] +Step 1) 시작 > 설정 > 네트워크 및 인터넷 > 고급 네트워크 설정 > 고급 공유 설정 > 모든 네트워크 +Step 2) “암호로 보호된 `공유” 켬 설정 +Step 3) 공유 폴더 접근 가능 여부 확인 +시작 > 모든 앱 > Windows Tools > 실행 > 공유 폴더 PC 계정명 또는, IP주소 입력 후 비밀번호 입력 +팝업 확인 +[ 공유 폴더 접근 가능 여부 확인 ] + + +![이미지 564-0](images/p0564_img0.png) + + +![이미지 564-1](images/p0564_img1.png) + + +![이미지 564-2](images/p0564_img2.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +565 +[공유 폴더 설정 기준] +1. C$, D$, Admin$ 등의 기본 공유 폴더 제거 + +## 2. 기본 공유 폴더 제거 후 시스템 재부팅 시 “기본 공유 폴더가 자동으로 공유되는 것”을 방지하기 위해 해당 + +레지스트리의 “AutoShareWks” 값을 “0”으로 설정 + +## 3. 일반 공유 폴더 사용 시 공유 폴더 접근 권한에 “Everyone” 제거 + + +## 4. 일반 공유 폴더 사용 시 접근이 필요한 계정에만 적절한 (읽기, 변경) 권한 설정 + + +## 5. 일반 공유 폴더 사용 시 공유 폴더 접근을 위한 비밀번호 설정 + + + +![이미지 565-0](images/p0565_img0.png) + + +--- + +| 한국인터넷진흥원 | +566 +PC-05 +(상) +PC > 2. 서비스 관리 +항목의 불필요한 서비스 제거 +개요 +점검 내용 +사용하지 않는 서비스나 기본으로 설치되어 실행되고 있는 서비스 여부 점검 +점검 목적 +사용하지 않는 서비스나 기본으로 설치된 서비스들을 제거하여 시스템 자원의 낭비를 막고 해당 서비스 +포트를 통한 침입을 방지하기 위함 +보안 위협 +Ÿ 실질적 사용하지 않는 서비스들이 실행되어 시스템에 과부하가 발생하는 위험이 존재함 +Ÿ 불필요한 서비스의 경우 사용자가 알지도 못한 서비스들이 실행되고 있는 경우가 대부분, 이 경우 +해당 서비스가 이미 취약한 버전의 서비스인지도 인지하지 못하고 사용하는 위험이 존재함 +참고 +※ 불필요한 서비스가 시스템에 디폴트로 설치되어 실행되는 경우 시스템 자원을 낭비하게 될 뿐만 아 +니라, 이 서비스를 통해 악의적인 공격자가 침입할 수 있으므로 필요하지 않은 서비스는 중지시켜야 +함 +※ 시스템 관리자는 대상 시스템의 용도를 정확히 파악한 후 특별한 목적으로 사용하는 업무 관련 +서비스를 제외한 다른 불필요한 서비스를 제거해야 함 +※ OS 버전에 따라 ‘일반적으로 불필요한 서비스’ 목록에 나열된 서비스가 제공되지 않을 수 있음 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 일반적으로 불필요한 서비스(아래 목록 참조)가 중지된 경우 +취약 : 일반적으로 불필요한 서비스(아래 목록 참조)가 중지되지 않은 경우 +조치 방법 +불필요한 서비스 중지 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 11 +Step 1) 시작 > 모든 앱 Windows Tools > 서비스 > 해당 서비스 선택 > 속성 +(시작 > 모든 앱 > Windows Tools > 실행 > “services.msc” 입력> 해당 서비스 선택> 속성에서도 설정 +가능) +Step 2) 불필요한 서비스 -> 중지 / 시작 유형 -> 사용 안 함 + + +![이미지 566-0](images/p0566_img0.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +567 +[ 불필요한 서비스 선택 후 ‘사용 안 함’ 설정 ] +Step 3) 서비스마다 옵션을 설정할 수 있음 +해당 서비스를 선택하고 더블 클릭하여 “시작 유형” 선택 및 “시작 시 로그온 계정” 별도 설정 가능. +시스템 시작 시 자동으로 시작되게 하려면 [자동], 수동으로 서비스를 시작하려면 [수동], 서비스 자체를 +사용하지 않으려면 [사용 안 함]을 선택한 후 [확인]을 클릭 +서비스 시작 유형 +설명 +사용 안 함 +설치되어 있으나 실행되지 않음 +수동 +다른 서비스나 응용 프로그램에서 해당 기능을 필요로 할 때만 시작됨 +자동 +부팅 시에 해당 장치 드라이버가 로드된 후에 운영체제에 의해 시작됨 +※ 꼭 필요한 서비스만 사용하고 나머지는 “사용 안 함”으로 설정 +※ 개인 방화벽 실행 +※ 백신 등에서 제공하는 방화벽 기능 활성화 사용 +※ 일반적으로 불필요한 서비스 +서비스명 +기능 및 설명 +Alerter +네트워크상에서 사용자와 컴퓨터에 관리용 경고메시지를 전송하는 기능 +Automatic Updates +중요한 윈도우 업데이트를 다운로드하고 설치할 수 있도록 하는 애플리케이션. 수동패치를 +적용하거나, MS패치 관리 서버로 패치를 일괄적으로 관리하는 경우 불필요한 서비스 + + +![이미지 567-0](images/p0567_img0.png) + + +![이미지 567-1](images/p0567_img1.png) + + +--- + +| 한국인터넷진흥원 | +568 +서비스명 +기능 및 설명 +Clipbook +서버 내 Clipbook을 다른 클라이언트와 공유 +Computer Browser +네트워크에 있는 모든 컴퓨터의 목록을 업데이트하고 관리하는 기능 +Cryptographic Services +윈도우 파일의 서명을 확인하는 카탈로그 데이터베이스 서비스를 총괄 +DHCP Client +IP주소와 DNS 이름을 DHCP 서버에 등록하거나 DHCP 서버로부터 동적으로 IP주소를 +가져오는 기능을 수행. 단독으로 시스템을 수행하며 고정IP를 사용하는 경우 불필요한 +서비스 +Distributed Link Tracking +Client, Server +네트워크 도메인의 여러 컴퓨터나 일반 컴퓨터에서 NTFS 파일간의 연결을 관리하는 도구. +Active Directory가 구성되어 있지 않은 서버에서는 불필요한 서비스 +DNS Client +컴퓨터에 대한 도메인 이름 시스템(DNS) 이름을 확인하고 캐시에 보관하는 기능. +DNS서버가 아닌 시스템에서는 유명무실하나, IPSEC을 사용하는 경우 필요한 경우 있음 +Error reporting +Service +프로그램 오류가 발생 시 응용프로그램의 오류를 MS에 보고한다는 내용을 표시하는 기능 +Human Interface +Device Access +키보드 또는 기타 멀티미디어 장치에 사전 정의된 버튼들을 사용하는 HID 장치들을 위한 +서비스 +IMAPI CD-Burning +COM Service +서버에 CD-RW 또는 DVD-RW가 장착되어 보조백업장치 역할을 하기 위해서 자체 +레코딩 백업을 할 수 있음 +Infrared Monitor +사용자 적외선 연결을 통해 파일 및 이미지를 공유할 수 있도록 함 +Messenger +클라이언트와 서버 사이에 netsend 및 경고서비스 메시지를 전송하는 기능 +NetMeeting Remote +Desktop Sharing +윈도우9X 운영체제부터 인증된 사용자가 넷미팅을 사용해서 원격으로 컴퓨터에 접근할 수 +있도록 하는 기능 +Portable Media Serial +Number +컴퓨터에 연결된 이동성 미디어의 등록번호를 가져오는 기능 +Print Spooler +인쇄 과정에 있는 스풀링을 관리하는 서비스. 프린터가 있는 경우 필수 서비스이나, +프린터가 연결되지 않은 시스템에서는 불필요함 +Remote Registry +원격 사용자가 컴퓨터에서 레지스트리 설정을 수정할 수 있도록 설정하는 응용 프로그램 +Simple TCP/IP +Services +Echo, Discard, Character Generator, Daytime, Quote of the Day 지원 +Universal Plug and +Play Device Host +네트워크 장치에 대해 피어-투-피어 UPnP(범용 플러그 앤 플레이) 기능을 지원 +Wireless Zero +Configuration + +### 802.11 어댑터에 대해 자동 구성을 공급하는 기본적인 도구 + + + +![이미지 568-0](images/p0568_img0.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +569 +※ 운영 중인 시스템에서 필수 서비스를 정의하는 것은 매우 복잡한 과정으로 서비스 사용 여부는 시스템의 +영향성을 고려하여 신중하게 평가되어야 하므로 Microsoft에서 권고하는 가이드에 따라 전략적으로 +적용해야 함 +※ https://technet.microsoft.com/ko-kr/library/dd547941.aspx (서비스 및 서비스 계정 보안 계획 가이드) 참고 +※ 윈도우 시스템 설치 시 기본적으로 설치되는 서비스에 대한 상세 설명은 아래 주소 참조 +※ https://technet.microsoft.com/ko-kr/library/dd547949.aspx + + +![이미지 569-0](images/p0569_img0.png) + + +--- + +| 한국인터넷진흥원 | +570 +PC-06 +(상) +PC > 2. 서비스 관리 +비인가 상용 메신저 사용 금지 +개요 +점검 내용 +사용자 PC에서 상용 메신저 사용 여부 점검 +점검 목적 +상용 메신저 차단을 통하여 메신저를 이용한 개인정보 및 내부 주요 정보 유출을 막기 위함 +보안 위협 +일반 사용자 PC에서 메신저 차단을 하지 않을 경우, 메신저를 통해 주요 정보가 유출되거나, 악성코드가 +유입될 위험이 존재함 +참고 +※ 메신저(Messenger): 인터넷을 통해 실시간으로 대화를 나눌 수 있는 서비스. +※ 악성코드: 컴퓨터에 악영향을 끼칠 수 있는 모든 소프트웨어의 총칭 +※ 상용 메신저: 네이트온, 카카오톡 PC 버전, Skype 같은 메신저 프로그램 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : Windows Messenger가 실행 중지된 상태이거나 상용 메신저가 설치되지 않은 경우 +취약 : Windows Messenger가 실행 중이거나 상용 메신저가 설치된 경우 +조치 방법 +“Windows Messenger를 실행하지 않음” 설정 및 상용 메신저 삭제 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 시작 > 모든 앱 > Windows Tools > 실행 > “gpedit.msc”입력 > 컴퓨터 구성 > 관리 템플릿 > Windows +구성 요소 > Windows Messenger +Step 2) “Windows Messenger를 실행 허용 안 함” 설정을 “사용”으로 설정 +[ “Windows Messenger 실행 안 함” “사용”으로 설정 ] + + +![이미지 570-0](images/p0570_img0.png) + + +![이미지 570-1](images/p0570_img1.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +571 +PC-07 +(중) +PC > 2. 서비스 관리 +파일 시스템이 NTFS 포맷으로 설정 +개요 +점검 내용 +하드 디스크의 파일 시스템이 NTFS를 사용 여부 점검 +점검 목적 +보안성 기능이 없는 FAT32를 지양하고 사용 권한 및 암호화를 통해 특정 파일에 대한 특정 사용자의 +액세스를 제한할 수 있는 NTFS를 사용하여 보안성을 강화하기 위함 +보안 위협 +FAT32 파일 시스템을 사용하는 경우, 사용자의 컴퓨터에 액세스하는 사람은 누구나 컴퓨터 안에 있는 +파일을 읽을 수 있으므로, 중요 파일에 접근할 수 없는 비인가자가 주요 정보를 유출할 수 있는 위험이 +존재함 +참고 +※ 기존에 FAT 파일 시스템을 사용하다가 NTFS로 변환하기 위해서는 convert.exe 명령을 사용할 수 +있지만, FAT 파일 시스템으로 운영 중 변환해야 하는 경우 기본 ACL이 적용되지 않으므로 가능한 +초기 설치 시 NTFS 파일 시스템을 선택하는 것을 권장함 +※ ACL: 프로세스가 시스템이나 파일에 읽기, 쓰기, 실행 등의 접근 여부를 허가하거나 거부하는 기능 +※ NTFS, FAT32 파일 시스템 비교: FAT32에는 NTFS가 제공하는 보안 기능이 없으므로 컴퓨터에 +FAT32 파티션 또는, 볼륨이 있는 경우 컴퓨터에 액세스 가능한 모든 사용자가 파일을 읽을 수 +있으며 FAT32에는 크기 제한이 있음 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 모든 디스크 볼륨의 파일 시스템이 NTFS인 경우 +취약 : 모든 디스크 볼륨의 파일 시스템이 FAT32인 경우 +조치 방법 +모든 디스크 볼륨에 대해 파일 시스템 NTFS로 변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 디스크 볼륨의 파일 시스템이 “NTFS”인지 확인 +시작 > 모든 앱 > Windows Tools > 컴퓨터 관리 > 저장소 > 디스크 관리 +시작 > 모든 앱 > Windows Tools > 실행 > “diskmgmt.msc” 입력 > 디스크 관리 +Step 2) 모든 디스크 볼륨의 파일 시스템이 “NTFS”가 아닌 경우 취약점이 존재하므로, 모든 디스크 볼륨에 대해 +파일 시스템을 “NTFS”로 변경 + + +![이미지 571-0](images/p0571_img0.png) + + +--- + +| 한국인터넷진흥원 | +572 +[ 디스크 파일 볼륨의 파일 시스템 확인 ] +Step 3) NTFS 변경 후 폴더 및 파일에 적합한 ACL 적용 + +## 1. 폴더나 파일을 마우스 오른쪽 버튼 클릭 후 단축메뉴에서 [속성] 선택 + +2. [속성] 대화상자에서 [보안] 탭을 선택 + +## 3. 편집을 눌러 그룹이나 계정에 맞는 권한으로 변경 + +[ 폴더 및 파일 권한 편집 ] +※ 최근 OS에서는 convert.exe 기능은 기본적으로 제공하나 FAT32 파일 시스템을 지원하지 않고 exFAT 파일 +시스템을 지원함 + + +![이미지 572-0](images/p0572_img0.png) + + +![이미지 572-1](images/p0572_img1.png) + + +![이미지 572-2](images/p0572_img2.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +573 +PC-08 +(중) +PC > 2. 서비스 관리 +대상 시스템이 Windows 서버를 제외한 다른 OS로 멀티 부팅이 가능하지 않도록 설정 +개요 +점검 내용 +사용자 PC에 하나의 OS 설치 여부 점검 +점검 목적 +사용자 PC에서 멀티 부팅을 사용하는지를 점검하여 다른 OS를 이용한 주요 파일 시스템 접근을 +차단하기 위함 +보안 위협 +멀티 부팅이 가능한 경우, 공격자는 해당 PC의 주요 OS 이외에 다른 OS로 부트하여 중요한 정보가 +들어 있는 파일 시스템에 접근하여 주요 정보를 획득할 수 있는 위험이 존재함 +참고 +※ 멀티 부팅(Multi booting, 다중 시동): 한 대의 PC에서 2개 이상의 OS를 설치하는 것을 말하며, PC +전원을 켤 때 시동할 OS를 선택할 수 있음. 멀티 부팅은 개발, 테스트 목적을 위해 여러 운영체제를 +돌리려고 하는 소프트웨어 개발자들이 많이 사용하며, 한 대의 PC에 이러한 시스템을 갖춤으로써 +하드웨어 비용을 크게 낮출 수 있을 뿐만 아니라 새로운 운영체제를 "별도의 포맷, 다시 설치 과정 +없이" 사용할 수 있다는 장점이 있음 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : PC 내에 하나의 OS만 설치된 경우 +취약 : PC 내에 2개 이상의 OS가 설치된 경우 +조치 방법 +하나의 OS만 설치하여 운영함 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) PC 내 설치된 운영체제 확인 +시작 > 모든 앱 > Windows Tools > 제어판 > 시스템 및 보안 > 시스템 > 고급 시스템 설정 > 시작 및 복구 +> 설정(T) +(시작 > 모든 앱 > Windows Tools > 실행 > “msconfig” 입력 > 시스템 구성 [부팅] 탭에서도 확인 가능) +Step 2) “기본 운영체제” 드롭다운 메뉴에서 2개 이상의 OS가 표시되면 취약점 존재 + + +![이미지 573-0](images/p0573_img0.png) + + +--- + +| 한국인터넷진흥원 | +574 +[ 멀티 부팅 여부 확인 ] +Step 3) 시스템 구성 [부팅] 탭 > 사용하지 않는 OS를 선택 후 [삭제]를 클릭 + + +![이미지 574-0](images/p0574_img0.png) + + +![이미지 574-1](images/p0574_img1.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +575 +PC-09 +(하) +PC > 2. 서비스 관리 +브라우저 종료 시 임시 인터넷 파일 폴더의 내용을 삭제하도록 설정 +개요 +점검 내용 +브라우저 인터넷 옵션에 있는 고급 설정에 “브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기” 기능 +활성화 여부 점검 +점검 목적 +브라우저 사용 시 생성되는 임시 인터넷 파일 삭제를 통하여 웹 양식에 입력한 정보(예: 이름 및 주소), +자동 로그인을 위한 웹 사이트 비밀번호 정보 등을 삭제하여 개인정보의 보안을 향상하기 위함 +보안 위협 +임시 인터넷 파일 폴더 내용을 삭제하지 않을 경우, 다른 계정에 저장된 임시 인터넷 파일 폴더를 통해 +이메일 주소, 웹 사이트 접근 기록 등의 개인정보를 획득할 수 있는 위험이 존재함 +참고 +※ 임시 인터넷 파일: 웹페이지 방문 시 화면에 나타나는 웹페이지 파일이나 이미지, 플래시 등을 저장 +파일 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기” 설정이 “사용”으로 설정된 경우 +취약 : "브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기” 설정이 “미사용”으로 설정된 경우 +조치 방법 +하나의 OS만 설치하여 운영함 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +[제어판에서 설정 변경] +Step 1) 인터넷 제어판에서 “브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기” 설정 여부 확인 +시작 > 파일 탐색기 > 내 PC > 로컬 디스크 (C:) > Windows > System32 > gpedit > 컴퓨터 구성 > 관리 +템플릿 > Windows 구성 요소 > Internet Explorer > 인터넷 제어판 > 고급 페이지 +Step 2) “브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기”를 선택하여 “사용”으로 속성 변경 +※ 해당 인터넷 제어판 메뉴는 버전에 따라 존재하지 않을 수 있음 + + +![이미지 575-0](images/p0575_img0.png) + + +--- + +| 한국인터넷진흥원 | +576 +[브라우저에서 설정 변경] +Step 1) 마이크로소프트 엣지 실행 > 설정 및 기타(Alt + F) > 기타 도구 > 인터넷 옵션 > [고급] 탭 > “브라우저를 +닫을 때 임시 인터넷 파일 폴더 비우기” 설정을 체크 +[ 브라우저를 닫을 때 임시 인터넷 파일 폴더 비우기 체크 ] + + +![이미지 576-0](images/p0576_img0.png) + + +![이미지 576-1](images/p0576_img1.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +577 +PC-10 +(상) +PC > 3. 패치 관리 +주기적 보안 패치 및 벤더 권고사항 적용 +개요 +점검 내용 +시스템에 관련한 공개된 취약점에 대한 최신 보안패치를 적용하였는지 점검 +점검 목적 +공개된 취약점을 통한 침해사고 발생을 방지하기 위함 +보안 위협 +HOT FIX 및 최신 보안패치 적용을 시키지 않을 경우, 이미 공개된 취약점을 통하여 비인가자의 시스템 +접근 및 관리자 권한 획득이 가능해지는 위험이 존재함 +참고 +※ Hot Fix: 즉시 교정되어야만 하는 주요한 취약점(주로 보안과 관련)을 패치를 하기 위해 배포되는 +프로그램으로 서비스팩이 발표된 이후 패치가 추가될 필요가 있을 때 별도로 발표됨 +※ 업데이트(Update): 문제를 예방 또는 해결하거나 컴퓨터 작동 방식을 향상하거나 컴퓨팅 경험을 +향상할 수 있도록 추가되는 소프트웨어를 말함 +※ https://learn.microsoft.com/ko-kr/windows/release-health/: Windows 버전 릴리즈 +※ https://support.microsoft.com/ko-kr/help/14223/windows-xp-end-of-support: +Windows XP 지원 종료 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : HOT FIX 설치 및 자동 업데이트 설정이 되어 있고 내부적으로 관리 절차를 수립하여 이행한 경우 +취약 : HOT FIX 설치되어 있지 않거나 내부적으로 관리 절차가 수립되지 않은 경우 +조치 방법 +Windows Update 사이트에 접속하여 최신 패치 존재 여부 확인 및 패치 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 인터넷에 연결되는 경우 Windows Update 사이트에 접속하여 최신 패치 존재 여부 확인 +[ 최신 패치 존재 여부 확인 ] + + +![이미지 577-0](images/p0577_img0.png) + + +![이미지 577-1](images/p0577_img1.png) + + +--- + +| 한국인터넷진흥원 | +578 +Step 2) 시작 > 설정 > “업데이트 확인”, “업데이트 기록”, “고급 옵션”을 통하여 HOT FIX, 최신 보안 업데이트 +등의 설치 여부 확인 및 설정 변경 +[ 업데이트 기록 ] +※ Windows 업데이트를 통한 소프트웨어 업데이트가 2020년 1월 14일 종료. 기관의 경우 ESU(Extented +Security Updates) 의 구매를 통해 2023년까지 유료 업데이트 가능 +※ 윔(Worm), 랜섬웨어(Ransomware) 등의 위협을 피하고자 네트워크를 물리적으로 단절한 후 서비스팩 설치 +및 업데이트 진행을 권장함 +- 웜(Worm): 컴퓨터 바이러스의 하나로 컴퓨터 바이러스와는 달리 다른 프로그램을 감염시키지 않고 자기 +자신을 복제하면서 통신망 등을 통해 널리 퍼지는 부정 프로그램을 말함 | +- 랜섬웨어(Ransomeware): 악성코드(malware)의 일종으로, 이에 감염된 컴퓨터는 시스템에 대한 접근이 +제한되며 이를 해제하기 위해서는 악성코드 제작자에게 대가로 금품을 제공해야 하는 악성 프로그램을 말함 + + +![이미지 578-0](images/p0578_img0.png) + + +![이미지 578-1](images/p0578_img1.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +579 +PC-11 +(상) +PC > 3. 패치 관리 +지원이 종료되지 않은 Windows OS Build 적용 +개요 +점검 내용 +시스템에 최신 서비스팩이 적용 여부 점검 +점검 목적 +최신 서비스팩이 적용되어 있는지 점검하여 시스템 취약점을 이용한 공격(익스플로잇)에 대비가 +되어있는지 확인하기 위함 +보안 위협 +최신 서비스팩이 적용되지 않았을 경우 비인가자의 시스템 취약점을 이용한 공격(익스플로잇)에 노출될 +수 있는 위험이 존재함 +참고 +※ 서비스 팩: 운영체제 응용프로그램의 기능 추가 및 버그나 보안 취약점을 해결한 패치 파일을 단일 +묶음으로 배포하는 패키지 +※ 익스플로잇: 컴퓨터의 소프트웨어나 하드웨어 또는 컴퓨터 관련 전자 제품의 버그, 보안 취약점 등 +설계상 결함을 이용해 공격자의 의도된 동작을 수행하도록 만들어진 프로그램 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 최신 빌드가 적용되어 있고 내부적으로 관리 절차를 수립하여 이행한 경우 +취약 : 최신 빌드가 적용되어 있지 않거나 내부적으로 관리 절차가 수립되지 않은 경우 +조치 방법 +Windows Update 사이트에 접속하여 최신 서비스팩 여부 확인 및 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 서비스팩이 아닌 윈도우 업데이트를 통해 진행하며 HOT FIX 패치를 통해 업데이트 +※ 업데이트 링크: https://www.microsoft.com/ko-kr/software-download/windows10 +※ 수동업데이트 링크: https://www.microsoft.com/ko-kr/software-download/windows11 +※ 윔(Worm), 랜섬웨어(Ransomware) 등의 위협을 피하기 위해 네트워크를 물리적으로 단절한 후 서비스팩 +설치 및 업데이트 진행을 권장함 + + +![이미지 579-0](images/p0579_img0.png) + + +--- + +| 한국인터넷진흥원 | +580 +PC-12 +(중) +PC > 4. 보안 관리 +Windows 자동 로그인 점검 +개요 +점검 내용 +Windows 자동 로그인이 비활성화 여부 점검 +점검 목적 +Windows 자동 로그인이 비활성화되어 있는지 점검하여 비인가자의 로그인을 방지하고자 하기 위함 +보안 위협 +Windows 자동 로그인이 활성화되어 있을 때 비인가자가 별도의 로그인 과정을 거치지 않고 계정에 +자동으로 로그인할 수 있는 위험이 존재함 +참고 +※ Windows 자동 로그인: 사용자 이름이나 비밀번호를 입력하지 않고 Windows에 로그인할 수 있음 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : Windows 자동 로그인이 비활성화된 경우 +취약 : Windows 자동 로그인이 활성화된 경우 +조치 방법 +Windows 자동 로그인 비활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 레지스트리 값 확인 +시작 > Windows 관리 도구(Windows Tools) > 레지스트리 편집기 > HKEY_LOCAL_MACHINE\SOFT +WARE\Microsoft\Windows NT\CurrentVersion\Winlogon > AutoAdminLogon 확인 +※ 별도의 Windows 자동 로그인 설정을 하지 않았다면 AutoAdminLogon 레지스트리가 존재하지 않음 +※ 별도의 Windows 자동 로그인 설정을 하지 않았다면 Windows 자동 로그인이 비활성화되어 있으므로 양호함 + + +![이미지 580-0](images/p0580_img0.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +581 +Step 1) 레지스트리가 존재하지 않으면 “AutoAdminLogon” 문자열 값 생성함 +우클릭 > 새로 만들기 > 문자열 값 클릭 > “AutoAdminLogon” 입력 > “AutoAdminLogon” 값 데이터 0 +입력 > 확인 +[ “AutoAdminLogon” 레지스트리 확인 ] +Step 2) 레지스트리가 존재하지 않으면 “AutoAdminLogon” 문자열 값 생성함 +우클릭 > 새로 만들기 > 문자열 값 클릭 > “AutoAdminLogon” 입력 > “AutoAdminLogon” 값 데이터 0 +입력 > 확인 +[ “AutoAdminLogon” 설정값 0으로 설정 ] + + +![이미지 581-0](images/p0581_img0.png) + + +![이미지 581-1](images/p0581_img1.png) + + +![이미지 581-2](images/p0581_img2.png) + + +--- + +| 한국인터넷진흥원 | +582 +PC-13 +(상) +PC > 4. 보안 관리 +바이러스 백신 프로그램 설치 및 주기적 업데이트 +개요 +점검 내용 +시스템에 백신이 설치되어 있고 백신이 주기적으로 자동 업데이트되는 설정 여부 점검 +점검 목적 +시스템의 백신 설치 여부와 설치된 백신이 주기적으로 업데이트가 되는지 점검하여 악성코드(바이러스, +웜, 랜섬웨어, 스파이웨어 등) 감염에 대해 대비를 하고 있는지 확인하기 위함 +보안 위협 +백신이 설치되지 않았거나, 백신이 설치되었어도 주기적으로 최신 업데이트가 이루어지지 않았을 경우 +악성코드(바이러스, 웜, 랜섬웨어, 스파이웨어 등)의 감염이 발생하여 시스템의 중요한 파일이나 폴더의 +유출 및 삭제가 발생할 위험이 존재함 +참고 +※ 바이러스(Virus): 바이러스는 자신을 복제하려는 명백한 의도를 갖고 만들어진 코드 사용을 통해 +호스트 프로그램에 침투하여 컴퓨터 사이에서 확산을 시도함. 호스트가 실행되면 바이러스도 함께 +실행되어 새로운 숙주를 감염시키는 등 시스템에 직접적인 피해를 줌. 이메일이나 다른 +외부저장장치를 통해서 다른 PC들로도 전파가 가능하고 전염성이 매우 강해서 PC 내로 들어오면 +다른 파일들까지 급속하게 감염시킴 +※ 웜(Worm): 컴퓨터 바이러스의 하나로 컴퓨터 바이러스와 비슷하지만, 바이러스가 다른 실행 +프로그램에 기생하여 실행되는 데 반해 웜은 독자적으로 실행되며, 다른 프로그램을 감염시키지 +않고 자기 자신을 복제하면서 통신망 등을 통해 널리 퍼지는 부정 프로그램을 말함 +※ 랜섬웨어: 사용자 파일을 암호화하여 접근을 제한하고 암호화된 파일을 복호화할 때 복호화 비용을 +요구하는 악성 소프트웨어의 한 종류 +※ 스파이웨어: 사용자의 동의 없이 설치되어 컴퓨터의 정보를 수집하고 전송하는 악성 소프트웨어 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 백신이 설치되어 있고, 최신 업데이트가 적용된 경우 +취약 : 백신이 설치되어 있지 않거나, 최신 업데이트가 적용되지 않은 경우 +조치 방법 +바이러스 백신 설치 및 최신 업데이트 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 (Windows Defender 사용 예시) +Step 1) 시작 > 설정 > 개인 정보 및 보안 > Windows 보안 > 바이러스 및 위협 방지 > 바이러스 및 위협 방지 +설정 > 보호 업데이트 > 업데이트 확인 + + +![이미지 582-0](images/p0582_img0.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +583 +[ Windows Defender 업데이트 확인 ] +※ 상용 백신도 동일하게 최신 업데이트 확인 + + +![이미지 583-0](images/p0583_img0.png) + + +![이미지 583-1](images/p0583_img1.png) + + +--- + +| 한국인터넷진흥원 | +584 +PC-14 +(상) +PC > 4. 보안 관리 +바이러스 백신 프로그램에서 제공하는 실시간 감시 기능 활성화 +개요 +점검 내용 +시스템에 설치된 백신 프로그램의 환경 설정에 실시간 감시기능 적용 여부 점검 +점검 목적 +사용자가 인터넷(이동식 저장 매체 포함)을 통해 파일을 다운로드하거나 다운로드 받은 파일을 실행할 +경우 백신 프로그램이 악성코드 감염을 실시간으로 점검하고 있는지 확인하기 위함 +보안 위협 +백신 프로그램의 실시간 감시기능이 적용되어 있지 않을 경우, 악성코드에 대해 실시간 감지가 +이루어지지 않아 시스템 사용자가 인터넷(이동식 저장 매체 포함)을 통한 파일 다운로드나 실행 시 +악성코드가 감염될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 설치된 백신의 실시간 감시기능이 활성화된 경우 +취약 : 백신이 설치되어 있지 않거나 실시간 감시기능이 비활성화된 경우 +조치 방법 +바이러스 백신 실시간 감시 기능 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 실시간 보호 기능 활성화 +시작 > 모든 앱 > Windows 보안 > 바이러스 및 위협 방지 > 설정 관리 > 실시간 보호 기능 활성화 +[ 실시간 보호 기능 활성화 ] +※ 상용 백신도 동일하게 실시간 보호 기능 활성화 적용 + + +![이미지 584-0](images/p0584_img0.png) + + +![이미지 584-1](images/p0584_img1.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +585 +PC-15 +(상) +PC > 4. 보안 관리 +OS에서 제공하는 침입차단 기능 활성화 +개요 +점검 내용 +시스템의 방화벽 기능이 활성화 여부 점검 +점검 목적 +방화벽 기능 활성화 여부를 점검하여 시스템에서 외부망의 비인가 접근 및 외부망으로 통신을 시도하는 +프로그램에 대해 통제하고 있는지 확인하기 위함 +보안 위협 +방화벽 기능이 비활성화되어 있으면, 외부 및 내부의 접근통제가 되지 않아 유해 정보가 유입되거나 +시스템 사용자의 파일이나 폴더가 외부로 유출될 위험이 존재함 +참고 +※ 방화벽: 인터넷 또는 외부 네트워크에서 유입되는 트래픽을 통제하는 솔루션으로써 외부의 불법 +침입으로부터 내부의 정보 자산을 보호하고 외부로부터 유해 정보 유입을 차단하기 위한 정책과 +이를 지원하는 하드웨어와 소프트웨어를 총칭함 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : Windows 방화벽 “사용”으로 설정된 경우 또는 유·무료 기타 방화벽을 사용한 경우 +취약 : Windows 방화벽 “사용 안 함”으로 설정된 경우 또는 유·무료 기타 방화벽을 사용하지 않은 경우 +조치 방법 +Windows 방화벽 “사용”으로 설정 또는 유·무료 기타 방화벽을 사용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 제어판으로 설정 +시작 > 모든 앱 > Windows Tools > 제어판 > 시스템 및 보안 > Windows Defender 방화벽 > Windows +방화벽 설정 또는 해제 +시작 > 모든 앱 > Windows Tools > 실행 > “firewall.cpl” 입력으로도 설정 가능 +Step 2) Windows Defender 방화벽 “사용” 설정 + + +![이미지 585-0](images/p0585_img0.png) + + +--- + +| 한국인터넷진흥원 | +586 +[ 방화벽 설정 화면 메뉴 ] +[ 방화벽 설정 화면 ] + + +![이미지 586-0](images/p0586_img0.png) + + +![이미지 586-1](images/p0586_img1.png) + + +![이미지 586-2](images/p0586_img2.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +587 +PC-16 +(상) +PC > 4. 보안 관리 +화면보호기 대기 시간 설정 및 재시작 시 암호 보호 설정 +개요 +점검 내용 +화면보호기 대기 시간 및 화면보호기 재시작 시 비밀번호 설정 여부 점검 +점검 목적 +사용자가 일정 시간 동안 아무런 작업을 수행하지 않을 경우, 자동으로 로그오프 되거나 워크스테이션이 +잠기도록 하기 위함 +보안 위협 +화면보호기가 작동하지 않거나 재시작 시 비밀번호를 설정하지 않는다면, 사용자가 자리를 비운 사이 +임의의 사용자가 해당 시스템에 접근하여 중요 정보를 유출하거나, 악의적인 행위를 통해 시스템 운영에 +악영향을 미칠 수 있는 위험이 존재함 +참고 +※ 악의적인 행위: 시스템 파일 또는 시스템 폴더 삭제, 응용프로그램 폴더 삭제 등 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 화면보호기 설정(대기 시간 10분 이하) 및 비밀번호로 보호가 설정된 경우 +취약 : 화면보호기 설정(대기 시간 10분 초과) 및 비밀번호로 보호가 설정되지 않은 경우 +조치 방법 +화면보호기 설정 및 비밀번호 보호 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 시작 > 설정 > 개인설정 > 잠금화면 > 화면보호기 +바탕화면 > 마우스 우클릭 > 개인설정 > 잠금화면 > 화면보호기로도 설정 가능 + + +![이미지 587-0](images/p0587_img0.png) + + +--- + +| 한국인터넷진흥원 | +588 +[ 화면보호기 시간 및 비밀번호 설정 ] + + +![이미지 588-0](images/p0588_img0.png) + + +![이미지 588-1](images/p0588_img1.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +589 +PC-17 +(상) +PC > 4. 보안 관리 +CD, DVD, USB 메모리 등과 같은 미디어의 자동 실행 방지 등 이동식 미디어에 대한 보안대책 수립 +개요 +점검 내용 +이동식 미디어에 대한 보안대책 수립 여부 점검 +점검 목적 +CD/DVD, USB 메모리 등과 같은 이동식 미디어를 USB port에 연결 시 자동 실행을 차단하기 위함 +보안 위협 +Ÿ CD/DVD, USB 메모리 등과 같은 이동식 미디어가 자동 실행되는 경우 미디어에 탑재된 “Autorun.i +nf” 파일을 통해 다른 응용 프로그램이 자동 실행될 수 있는 위험이 존재함 +Ÿ 이동식 미디어가 사용될 때 읽기 기능을 통해 바이러스 감염이 생길 수 있고, 쓰기 기능을 통하여 주요 +정보 유출이 발생할 수 있음 +참고 +※ Autorun.inf 파일: 윈도우 운영 체제의 “AutoRun”, “AutoPlay” 기능에 사용되는 텍스트 파일. +미디어 장치의 루트 디렉터리에 위치하며, 미디어(CD/DVD, USB) 연결 시 특정 프로그램이 +자동으로 실행되도록 제어함 +※ 다른 응용 프로그램: 사용자에게 피해를 일으키는 특정 프로그램을 말하며, 대부분 USB 관련 +악성코드들은 “autorun.inf” 파일을 통해 자동 실행되도록 제작됨 +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 미디어 사용 시 자동 실행되지 않고 내부적으로 관리 절차를 수립하여 이행된 경우 +취약 : 미디어 사용 시 자동 실행되거나 내부적으로 관리 절차가 수립되지 않은 경우 +조치 방법 +미디어 자동 실행 방지 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows 10, Windows 11 +조치 방법 1. 로컬 그룹 정책 편집기 +Step 1) 시작 > 파일 탐색기 > 내 PC > 로컬 디스크 (C:) > Windows > System32 > gpedit > 컴퓨터 구성 > 관리 +템플릿 > Windows 구성 요소 > 자동 실행 정책 +Step 2) “자동 실행 끄기” 정책을 “사용 모든 드라이브”로 설정 + + +![이미지 589-0](images/p0589_img0.png) + + +--- + +| 한국인터넷진흥원 | +590 +[ 자동 실행 끄기 “사용” 설정 ] +조치 방법 2. 제어판에서 자동 실행 기능 설정 +※ 시작 > 모든 앱 > Windows Tools > 제어판 > 하드웨어 및 소리 > 자동 실행 > “모든 미디어 및 장치에 자동 +실행 사용(U)” 체크 해제 > 저장(S) +[ “모든 미디어 및 장치에 자동 실행 사용” 체크 해제 ] + + +![이미지 590-0](images/p0590_img0.png) + + +![이미지 590-1](images/p0590_img1.png) + + +![이미지 590-2](images/p0590_img2.png) + + +--- + +07. PC +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +591 +PC-18 +(중) +PC > 4. 보안 관리 +원격 지원을 금지하도록 정책이 설정 +개요 +점검 내용 +원격 지원을 사용하지 않도록 하는지 설정 여부 점검 +점검 목적 +원격 지원 기능을 비활성화하여 비인가자가 원격에서 접근을 방지하기 위함 +보안 위협 +원격 지원 기능이 활성화되어 비인가자에게 원격에서의 접근이 허용될 경우, 시스템 제어 권한이 악용될 +수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows 10, Windows 11 +판단 기준 +양호 : 원격 지원이 “사용 안 함”으로 설정된 경우 +취약 : 원격 지원이 “사용”으로 설정된 경우 +조치 방법 +원격 지원 서비스 비활성화 +조치 시 영향 +원격 지원 기능 사용 불가 +점검 및 조치 사례 +l Windows 10, Windows 11 +Step 1) 원격 지원 설정 +시작 > 파일 탐색기 > 내 PC > 로컬 디스크 (C:) > Windows > System32 > gpedit > 컴퓨터 구성 > 관리 +템플릿 > 시스템 > 원격 지원 제공 구성 +[ “원격 지원 제공 구성” 확인 ] + + +![이미지 591-0](images/p0591_img0.png) + + +![이미지 591-1](images/p0591_img1.png) + + +--- + +| 한국인터넷진흥원 | +592 +Step 1) “원격 지원 제공”을 “사용 안 함”으로 설정 +[ 원격 지원 제공 구성을 “사용 안 함” 설정 ] + + +![이미지 592-0](images/p0592_img0.png) + + +![이미지 592-1](images/p0592_img1.png) + + +--- + +DBMS +Chapter 08 + +## 1. 계정 관리················································································································596 + + +## 2. 접근 관리················································································································628 + + +## 3. 옵션 관리················································································································646 + + +## 4. 패치 관리················································································································663 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 593-0](images/p0593_img0.png) + + +--- + +| 한국인터넷진흥원 | +594 +01 +DBMS 서버 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +기본 계정의 비밀번호, 정책 등을 변경하여 사용 +상 +D-01 +데이터베이스의 불필요 계정을 제거하거나, 잠금설정 후 사용 +상 +D-02 +비밀번호의 사용기간 및 복잡도를 기관의 정책에 맞도록 설정 +상 +D-03 +데이터베이스 관리자 권한을 꼭 필요한 계정 및 그룹에 대해서만 허용 +상 +D-04 +비밀번호 재사용에 대한 제약 설정 +중 +D-05 +DB 사용자 계정을 개별적으로 부여하여 사용 +중 +D-06 +root 권한으로 서비스 구동 제한 +중 +D-07 +안전한 암호화 알고리즘 사용 +상 +D-08 +일정 횟수의 로그인 실패 시 이에 대한 잠금정책 설정 +중 +D-09 + + +## 2. 접근 관리 + +점검항목 +항목 +중요도 +항목코드 +원격에서 DB 서버로의 접속 제한 +상 +D-10 +DBA 이외의 인가되지 않은 사용자가 시스템 테이블에 접근할 수 없도록 설정 +상 +D-11 +안전한 리스너 비밀번호 설정 및 사용 +상 +D-12 +불필요한 ODBC/OLE-DB 데이터 소스와 드라이브를 제거하여 사용 +중 +D-13 +데이터베이스의 주요 설정파일, 비밀번호 파일 등과 같은 주요 파일들의 접근 권한이 +적절하게 설정 +중 +D-14 +관리자 이외의 사용자가 오라클 리스너의 접속을 통해 리스너 로그 및 trace 파일에 +대한 변경 제한 +하 +D-15 +Windows 인증 모드 사용 +하 +D-16 + + +![이미지 594-0](images/p0594_img0.png) + + +![이미지 594-1](images/p0594_img1.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +595 + +## 3. 옵션 관리 + +점검항목 +항목 +중요도 +항목코드 +Audit Table은 데이터베이스 관리자 계정에 접근하도록 제한 +하 +D-17 +응용프로그램 또는 DBA 계정의 Role이 Public으로 설정되지 않도록 조정 +상 +D-18 +OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES를 FAL +SE로 설정 +상 +D-19 +인가되지 않은 Object owner의 제한 +하 +D-20 +인가되지 않은 GRANT OPTION 사용 제한 +중 +D-21 +데이터베이스의 자원 제한 기능을 TRUE로 설정 +하 +D-22 +xp_cmdshell 사용 제한 +상 +D-23 +Registry Procedure 권한 제한 +상 +D-24 + +## 4. 패치 관리 + +점검항목 +항목 +중요도 +항목코드 +주기적 보안 패치 및 벤더 권고 사항 적용 +상 +D-25 +데이터베이스의 접근, 변경, 삭제 등의 감사 기록이 기관의 감사 기록 정책에 +적합하도록 설정 +상 +D-26 + + +![이미지 595-0](images/p0595_img0.png) + + +--- + +| 한국인터넷진흥원 | +596 +D-01 +(상) +DBMS > 1. 계정 관리 +기본 계정의 비밀번호, 정책 등을 변경하여 사용 +개요 +점검 내용 +DBMS 기본 계정의 초기 비밀번호 및 권한 정책을 변경하여 사용하는지 점검 +점검 목적 +DBMS 기본 계정의 초기 비밀번호 및 권한 정책 변경 사용 유무를 점검하여 비인가자의 초기 비밀번호 +대입 공격을 차단하고 있는지 확인하기 위함 +보안 위협 +DBMS 기본 계정 초기 비밀번호 및 권한 정책을 변경하지 않을 경우 비인가자가 인터넷 통해 DBMS +기본 계정의 초기 비밀번호를 획득하여 초기 비밀번호를 그대로 사용하고 있는 DB에 접근하여 기본 +계정에 부여된 권한의 취약점을 이용하여 DB 정보를 유출할 수 있는 위험이 존재함 +참고 +※ 기본 계정: DB 설치 후 초기에 기본으로 생성되어있는 DBMS 관리용 계정(예 : sa) +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL, Cubrid 등 +판단 기준 +양호 : 기본 계정의 초기 비밀번호를 변경하거나 잠금설정한 경우 +취약 : 기본 계정의 초기 비밀번호 를 변경하지 않거나 잠금설정을 하지 않은 경우 +조치 방법 +기본(관리자) 계정의 초기 비밀번호 및 권한 정책 변경 +조치 시 영향 +불필요한 기본 계정의 사용 제한 +점검 및 조치 사례 +l Oracle DB +[기본 계정 비밀번호 변경] +Step 1) 기본 계정 사용 여부 및 정책 확인 +SQL> SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +Step 2) 사용되는 계정의 경우 비밀번호 변경 후 사용 +SQL> ALTER USER <기본 계정명> IDENTIFIED BY <신규 비밀번호>; +[기본 계정 잠금 설정] +Step 1) 활성화 되어 있는 기본 계정 확인 +SQL> SELECT USERNAME, ACCOUNT_STATUS, PROFILE FROM DBA_USERS; +Step 2) 활성화 되어 있는 기본 계정 잠금 설정 +SQL> SELECT username, account_status, lock_date, expiry_date, profile FROM dba_users WHERE +account_status ='OPEN'; +ALTER USER <기본 계정명> ACCLUNT LOCK; + + +![이미지 596-0](images/p0596_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +597 +※ Oracle DB 기본 계정 정보 +l MSSQL +Step 1) sa 계정 비밀번호 변경 +ALTER LOGIN sa WITH PASSWORD = '신규 비밀번호'; +[ sa 계정 비밀번호 변경 ] +Step 2) 비밀번호 정책 강제 사용 적용 +l MySQL +Step 1) root 계정 비밀번호 변경 +[mysql 5.7] +mysql> UPDATE user SET authentication_string = PASSWORD('신규 비밀번호') WHERE User = 'root'; +mysql> flush privileges; +[mysql 8.0] +mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '신규 비밀번호'; +User +Password +User +Password +scott +tiger or tigger +system +manager +dbsnmp +dbsnmp +sys +changeon_install +tracesvr +trace +outln +outln +ordplugins +ordplugins +ordsys +ordsys +ctxsys +ctxsys +mdsys +mdsys +adams +wood +blake +papr +clark +clth +jones +steel +lbacsys +lbacsys +- +- + + +![이미지 597-0](images/p0597_img0.png) + + +![이미지 597-1](images/p0597_img1.png) + + +--- + +| 한국인터넷진흥원 | +598 +mysql> flush privileges; +l Altibase +Step 1) 비밀번호 정책 설정 여부 확인 +SELECT * FROM system_.sys_users_; +Step 2) ALTER USER 명령어로 비밀번호 변경 +Altibase 서버에 sys 유저로 접속 후 ALTER USER 명령어로 비밀번호를 변경 +ALTER USER sys IDENTIFIED BY [신규 비밀번호]; +또는 +altipasswd 명령어로 비밀번호 변경(Altibase 서버 온라인 상태에서 수행) +$ altipasswd +Previous Password : old_password +New Password : new_password +Retype New Password : new_password +l Tibero +Step 1) sys 계정 비밀번호 변경 +ALTER USER sys IDENTIFIED BY [신규 비밀번호]; +l PostgreSQL +Step 1) postgres 계정으로 접속 계정 변경 및 접속 +$ sudo –u postgres psql +# ALTER USER postgres WITH PASSWORD '신규 비밀번호'; +# \q +l Cubrid +Step 1) 사용자 계정 비밀번호 사용 여부 확인 +csql> SELECT name, password FROM db_user; +csql> SELECT * FROM db_password; +Step 2) 사용자 계정 비밀번호 변경 + + +![이미지 598-0](images/p0598_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +599 +csql> ALTER USER "사용자 계정명" PASSWORD '신규 비밀번호'; +※ 비밀번호가 취약하게 설정된 경우 비밀번호를 다음 기준을 준수하여 변경함 +< 비밀번호 관리 방법 > + +## 1. 영문, 숫자, 특수문자를 조합하여 계정명과 상이한 8자 이상의 비밀번호 설정 + +다음의 문자 종류 중 2가지 종류 이상을 조합하여 최소 10자리 이상 또는, 3가지 종류 이상을 +조합하여 최소 8자리 이상의 길이로 구성 +1) 영문 대문자(26개) +2) 영문 소문자(26개) +3) 숫자(10개) +4) 특수문자(32개) + +## 2. 시스템마다 상이한 비밀번호 사용 + + +## 3. 비밀번호를 기록해 놓을 경우 변형하여 기록 + + +## 4. 가급적 자주 비밀번호를 변경 + + + +![이미지 599-0](images/p0599_img0.png) + + +--- + +| 한국인터넷진흥원 | +600 +D-02 +(상) +DBMS > 1. 계정 관리 +데이터베이스의 불필요 계정을 제거하거나, 잠금설정 후 사용 +개요 +점검 내용 +DBMS에 존재하는 계정 중 DB 관리나 운용에 사용하지 않는 불필요한 계정이 존재하는지 점검 +점검 목적 +불필요한 계정 존재 유무를 점검하여 불필요한 계정 정보(비밀번호)의 유출 시 발생할 수 있는 +비인가자의 DB 접근에 대비되어 있는지 확인하기 위함 +보안 위협 +DB 관리나 운용에 사용하지 않는 불필요한 계정이 존재할 경우, 비인가자가 불필요한 계정을 이용하여 +DB에 접근하여 데이터를 열람, 삭제, 수정할 위험이 존재함 +참고 +※ 불필요한 계정: SCOTT, PM, ADAMS, CLARK 등의 Demonstration 계정 및 퇴사나 직무 변경 +등으로 더 이상 사용하지 않는 계정 +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL, Cubrid 등 +판단 기준 +양호 : 계정 정보를 확인하여 불필요한 계정이 없는 경우 +취약 : 인가되지 않은 계정, 퇴직자 계정, 테스트 계정 등 불필요한 계정이 존재하는 경우 +조치 방법 +계정별 용도를 파악한 후 불필요한 계정 삭제 +조치 시 영향 +Demonstration 계정 / Object 사용 불가 / 삭제된 계정 사용 불가 +점검 및 조치 사례 +l Oracle DB +Step 1) 불필요한 계정 및 Object 삭제 +SQL> DROP USER [삭제할 계정]; +l MSSQL +Step 1) 불필요한 계정 삭제 +EXEC sp_droplogin '삭제할 계정'; +l MySQL +Step 1) 불필요한 계정 삭제 +DROP USER '삭제할 계정'@'호스트명 or IP'; +FLUSH PRIVILEGES; + + +![이미지 600-0](images/p0600_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +601 +l Altibase +Step 1) 모든 사용자 확인 +SELECT * FROM system_.sys_users_; +Step 2) 불필요한 계정 삭제 +DROP USER user_name CASCADE; +l Tibero +Step 1) 모든 사용자 확인 +Tibero에서는 사용자의 정보를 제공하기 위해 아래 나열된 정적 뷰를 제공하고 있으며, DBA나 일반 사 +용자 모두 사용할 수 있다. +SELECT * FROM all_users; +SELECT * FROM dba_users; +SELECT * FROM user_users; +정적 뷰 +설명 +ALL_USERS +데이터베이스의 모든 사용자의 기본적인 정보를 조회하는 뷰 +DBA_USERS +데이터베이스의 모든 사용자의 자세한 정보를 조회하는 뷰 +USER_USERS +현재 사용자의 정보를 조회하는 뷰 +Step 2) 불필요한 계정 삭제 +DROP USER user_name CASCADE; +l PostgreSQL +Step 1) 모든 사용자 확인 +쿼리문 조회 : SELECT * FROM system_.sys_users_; +명령어 조회 : \du +Step 2) 불필요한 계정 삭제 +DROP ROLE '삭제할 계정'; + + +![이미지 601-0](images/p0601_img0.png) + + +--- + +| 한국인터넷진흥원 | +602 +l Cubrid +Step 1) 사용자 계정 목록 확인 +csql> SELECT name, password FROM db_user; +Step 2) 불필요한 계정 삭제 +csql> DROP USER [삭제할 계정]; + + +![이미지 602-0](images/p0602_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +603 +D-03 +(상) +DBMS > 1. 계정 관리 +비밀번호 사용 기간 및 복잡도를 기관의 정책에 맞도록 설정 +개요 +점검 내용 +기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용되어 있는지 점검 +점검 목적 +비밀번호 사용 기간 및 복잡도 설정 유무를 점검하여 비인가자의 비밀번호 추측 공격(무차별 대입 공격, +사전 대입 공격 등)에 대한 대비가 되어있는지 확인하기 위함 +보안 위협 +비밀번호 사용 기간 및 복잡도 설정이 되어있지 않으면 비인가자가 비밀번호 추측 공격을 통해 획득한 +계정의 비밀번호를 이용하여 DB에 접근할 수 있는 위험이 존재함 +참고 +※ 무차별 대입 공격(Brute Force Attack): 특정 암호를 해독하기 위해 가능한 모든 값을 대입하는 +공격 방법 +※ 사전 대입 공격(Dictionary Attack): 사전에 있는 단어를 입력하여 비밀번호를 알아내거나 암호를 +해독하는데 사용되는 컴퓨터 공격 방법 +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL 등 +판단 기준 +양호 : 기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용된 경우 +취약 : 기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 설정이 적용되지 않은 경우 +조치 방법 +기관 정책에 맞게 비밀번호 사용 기간 및 복잡도 정책 설정 +조치 시 영향 +주기적인 비밀번호 변경 필요 +점검 및 조치 사례 +l Oracle DB +Step 1) PASSWORD_LIFE_TIME Profile 파라미터 변경 +SQL> ALTER PROFILE <프로파일명> LIMIT PASSWORD_LIFE_TIME xx; +Step 2) Profile 값과 관련된 사용자 변경 +SQL> ALTER PROFILE <계정명> PROFILE <변경할 프로파일명>; +Step 3) 비밀번호 정책 설정 변경 +SQL> ALTER PROFILE <프로파일명> LIMIT +FAILED_LOGIN_ATTEMPTS 3 (비밀번호 실패 3번 까지만 가능) +PASSWORD_LIFE_TIME 30 (30일 동안만 비밀번호 사용 가능 +PASSWORD_REUSE_TIME 30 (사용한 비밀번호 30일 후부터 재사용 가능) +PASSWORD_VERIFY_FUNCTION verify_function (비밀번호 복잡성 검증) + + +![이미지 603-0](images/p0603_img0.png) + + +--- + +| 한국인터넷진흥원 | +604 +PASSWORD_GRACE_TIME 5; (life time이 끝나고 5일 동안 메시지를 보여줌) +l MSSQL +Step 1) 비밀번호 변경 주기는 '암호 만료 강제 적용'을 적용함으로써 주기적으로 변경할 수 있으며, 변경 기간은 +OS의 '암호 정책'에서 적용받으므로 '암호 정책 > 최대 암호 사용 기간' 설정도 변경해야 함 +Step 2) 암호 만료 강제 적용 +보안 > 로그인 > 각 로그인 계정 > 속성 > “암호 만료 강제 적용” 설정 +[ 암호 만료 강제 적용 설정 ] +Step 3) OS 암호 정책 설정 +[관리 도구] > [로컬 보안 정책] > [보안 설정] > [계정 정책] > [암호 정책] > 최대 암호 사용 기간 : '60일' +설정 +[ 최대 암호 사용 기간 설정 ] +l MySQL +[비밀번호 복잡도 정책 설정] +Step 1) 비밀번호 정책 확인 + + +![이미지 604-0](images/p0604_img0.png) + + +![이미지 604-1](images/p0604_img1.png) + + +![이미지 604-2](images/p0604_img2.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +605 +mysql> SHOW VARIABLES LIKE 'validate_password%'; +※ component_validate_password가 설치되어 있지 않은 경우 아래와 같이 해당 컴포넌트 설치 +mysql> INSTALL COMPONENT 'file://component_validate_password'; +Step 2) 비밀번호 정책 설정 +다음과 같은 방법으로 각각의 비밀번호 정책을 설정 +SET GLOBAL validate_password.policy = 'MEDIUM'; +(비밀번호 정책의 강도 LOW/MEDIUM/STRONG) +SET GLOBAL validate_password.length = 8; (비밀번호 최소 길이) +SET GLOBAL validate_password.mixed_case_count = 1; (포함되어야 하는 영문 대소문자 최소 개수) +SET GLOBAL validate_password.number_count = 1; (포함되어야 하는 숫자 최소 개수) +SET GLOBAL validate_password.special_char_count = 1; (포함되어야 하는 특수문자 최소 개수) +※ Linux계열(/etc/my.cnf 또는 /etc/mysql/my.cnf), Windows(C:\ProgramData\MySQL\MySQL Server <설치된 +버전>\my.ini)의 섹션에 설정을 추가하여 정책 설정 가능 +※ 비밀번호 신규 적용 및 초기화 시 설정 규칙에 맞추어 관리하고, 저장 시에는 일방향 암호화 알고리즘을 통해 +암호화 처리(One-Way Encryption)함 +[비밀번호 LifeTime 정책 적용 ] +Step 1) 비밀번호 정책 확인 +mysql> SHOW VARIABLES LIKE 'default_password_lifetime'; +Step 2) 비밀번호 LifeTime 설정 +mysql> SET GLOBAL default_password_lifetime=90; +※ 기본 값 +- 5.7.11 이전 버전 : 0 +- 5.7.11 이후 버전 및 8.0 이후 버전 : 360 +Step 3) 정책 적용전에 생성된 계정의 LifeTime 변경 +mysql> ALTER USER <계정명>'@'<호스트명 or IP>' PASSWORD EXPIRE INTERVAL 91 DAY; +l Altibase +Step 1) 다음 명령어를 통해 비밀번호 정책 설정 여부 확인 +SELECT * FROM system_.sys_users_; + + +![이미지 605-0](images/p0605_img0.png) + + +--- + +| 한국인터넷진흥원 | +606 +Step 2) 아래 Property에 대해 비밀번호 정책 설정 +CASE_SENSITIVE_PASSWORD = 1 +FAILED_LOGIN_ATTEMPTS +PASSWORD_LOCK_TIME +PASSWORD_LIFE_TIME +PASSWORD_GRACE_TIME +PASSWORD_REUSE_TIME +PASSWORD_REUSE_MAX +PASSWORD_VERIFY_FUNCTION +정책 적용 시 다음 명령어를 사용 +ALTER USER 계정명 LIMIT (Property 숫자); +예시) ALTER USER TESTUSER LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIM +E 7); +l Tibero +Step 1) 사용자별 비밀번호 PROFILE 적용 여부 확인 +비밀번호 설정 규칙에 맞추어 비밀번호를 설정할 수 있도록 시스템 차원에서 기능 제공 +SELECT * FROM dba_users; +[ 사용자별 비밀번호 PROFILE 적용 여부 확인 ] +Step 2) 설정되어 있을 경우 PROFILE 설정 내용 확인 +SELECT * FROM dba_profiles; + + +![이미지 606-0](images/p0606_img0.png) + + +![이미지 606-1](images/p0606_img1.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +607 +[ PROFILE 설정 내용 확인 ] +Step 3) 설정되어 있지 않을 경우 PROFILE 생성 또는 수정 시(ALTER PROFILE) 비밀번호 정책 설정 적용 시 +다음 명령어를 사용 +CREATE PROFILE prof LIMIT +예시) CREATE PROFILE prof LIMIT +failed_login_attempts 3 +password_lock_time 1/1440 +password_life_time 90 +password_reuse_time unlimited +password_reuse_max 10 +password_grace_time 10 +password_verify_function verify_function; + + +![이미지 607-0](images/p0607_img0.png) + + +![이미지 607-1](images/p0607_img1.png) + + +--- + +| 한국인터넷진흥원 | +608 +D-04 +(상) +DBMS > 1. 계정 관리 +데이터베이스 관리자 권한을 꼭 필요한 계정 및 그룹에 대해서만 허용 +개요 +점검 내용 +관리자 권한이 필요한 계정 및 그룹에만 관리자 권한을 부여하였는지 점검 +점검 목적 +관리자 권한이 필요한 계정과 그룹에만 관리자 권한을 부여하였는지 점검하여 관리자 권한의 남용을 +방지하여 계정 유출로 인한 비인가자의 DB 접근 가능성을 최소화하고자 함 +보안 위협 +관리자 권한이 필요한 계정 및 그룹에만 관리자 권한을 부여하지 않으면 관리자 권한이 부여된 계정이 +비인가자에게 유출될 경우 DB에 접근할 수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL, Cubrid 등 +판단 기준 +양호 : 관리자 권한이 필요한 계정 및 그룹에만 관리자 권한이 부여된 경우 +취약 : 관리자 권한이 필요 없는 계정 및 그룹에 관리자 권한이 부여된 경우 +조치 방법 +관리자 권한이 필요한 계정 및 그룹에만 관리자 권한 부여 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) SYSDBA 권한 점검 +SQL> SELECT username FROM v$pwfile_users WHERE username NOT IN (SELECT grantee FROM d +ba_role_privs WHERE granted_role='DBA') AND username != 'INTERNAL' AND SYSDBA = 'TRUE'; +(어떠한 계정이라도 나오는 경우 취약) +Step 2) Admin에 부적합 계정 존재 여부 점검 +SQL> SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ('SYS', 'SYSTEM', 'AQ_ +ADMINISTRATOR_ROLE', 'DBA', 'DSYS', 'BACSYS', 'HEDULER_ADMIN', 'MSYS') AND admin_opti +on= 'YES' AND grantee NOT IN (SELECT grantee FROM dba_role_privs WHERE granted_role='DBA'); +(어떠한 계정이라도 나오는 경우 취약) +Step 3) 관리자 권한이 불필요한 계정에서 관련 권한을 제거 +SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명'; +불필요하게 시스템 권한을 부여한 계정의 권한 변경 필요 + + +![이미지 608-0](images/p0608_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +609 +REVOKE <권한> FROM <계정명>; +시스템 권한 부여가 필요한 경우 필요한 테이블별 권한 부여 +GRANT <권한> ON <테이블명> TO <계정명>; +인가된 사용자는 관리자 권한에 role을 grant한 후, 시스템 권한을 grant하고 role을 인가된 사용자에게 +grant 함 +GRANT TO <계정명>; +l MSSQL +Step 1) sysadmin서버 역할의 계정 목록을 확인 후 서버 역할에 불필요한 계정이 있는 경우 서버 역할에서 삭제 +EXEC sp_droprolemember 'user_name', 'sysadmin'; +예시) EXEC sp_dropsrvrolemember 'user01', 'sysadmin'; (user01계정을 sysadmin서버 역할에서 삭제) +[ 서버 역할에서 불필요 계정 삭제 예시 ] +l MySQL +Step 1) +Step 1) SUPER 권한(관리자 권한)이 부여되어 있는 계정 확인 +SELECT +GRANTEE +FROM +INFORMATION_SCHEMA.USER_PRIVILEGES +WHERE +PRIVILEGE_TYPE = 'SUPER'; +Step 2) 불필요하게 SUPER 권한이 부여되어 있는 계정에 대해 SUPER 권한 회수 +REVOKE SUPER ON *.* FROM '<계정명>'; +FLUSH PRIVILEGES; +※ 만약 관리자 'test'@'localhost' 계정이 바이너리 로그 정리 및 시스템 변수 수정을 위해 SUPER 권한을 필 +요로 하는 경우 아래와 같은 명령문으로 필요한 권한으로 제한. +GRANT BINLOG_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'test'@'localhost'; + + +![이미지 609-0](images/p0609_img0.png) + + +![이미지 609-1](images/p0609_img1.png) + + +--- + +| 한국인터넷진흥원 | +610 +REVOKE SUPER ON *.* FROM 'test'@'localhost'; +FLUSH PRIVILEGES; +l Altibase +Step 3) 계정별 부여된 시스템 권한 목록에서 grantee 확인 +SELECT grantee_id FROM system_.sys_grant_system_; +Step 4) 계정별 부여된 시스템 권한 목록에서 user_id 확인 +SELECT user_id, user_name FROM system_.sys_users_; +Step 5) 계정별 부여된 시스템 권한 목록에서 priv_id 확인 +SELECT priv_id, priv_name FROM system_.sys_privileges_; +Step 6) 일반 사용자 계정 생성 시 시스템에 의해 부여되는 기본 권한 외 입력된 경우 해당 권한 삭제 +시스템에 의해 자동으로 부여되는 권한 +privileged_id +create session +215 +create table +217 +create sequence +210 +create procedure +205 +create view +229 +create trigger +241 +create synonym +245 +create materialized view +252 +create library +256 +l Tibero +Step 1) 계정별 부여된 시스템 권한 목록 확인 후, 아래 명령어 모두 입력 +SELECT * FROM dba_users; +SELECT * FROM dba_sys_privs; +Step 2) dba_users 결과값에서 시스템 계정, 일반 계정 확인 + + +![이미지 610-0](images/p0610_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +611 +[ 시스템 계정, 일반 계정 확인 ] +Step 3) dba_sys_privs 결과값에서 일반 계정임에도 시스템 권한을 불필요하게 부여받고 있는지 확인 +[ 일반 계정 권한 불필요하게 부여되어 있는지 확인 ] +Step 4) 일반 계정에 불필요한 시스템 권한이 부여된 경우 권한 삭제 +l PostgreSQL +Step 1) 계정의 용도 파악 후 불필요한 계정은 삭제, 새로운 계정 생성 시 적절한 권한을 부여하여 생성 +모든 사용자 확인 +쿼리문 조회 : SELECT * FROM pg_user; or SELECT username, usesuper FROM pg_shadow; +명령어 조회 : \du +Step 2) 불필요하게 관리자 권한이 부여된 경우 권한 회수 +ALTER ROLE <계정명> NOSUPERUSER; +ALTER ROLE <계정명> NOCREATEROLE; +ALTER ROLE <계정명> NOCREATEDB; +ALTER ROLE <계정명> NOREPLICATION; +ALTER ROLE <계정명> NOBYPASSRLS; +Step 3) + + +![이미지 611-0](images/p0611_img0.png) + + +![이미지 611-1](images/p0611_img1.png) + + +![이미지 611-2](images/p0611_img2.png) + + +--- + +| 한국인터넷진흥원 | +612 +l Cubrid +Step 1) 계정의 용도 파악 후 불필요한 계정은 삭제, 새로운 계정 생성 시 적절한 권한을 부여하여 생성 +Step 2) DBA 권한을 가진 사용자 계정 확인 +SELECT a.name FROM db_user a, table(direct_groups) AS t(roles) WHERE roles.name = 'DBA'; +DBA 권한을 가진 사용자 중 권한이 불필요한 계정의 권한 회수 or 계정 삭제 +1. DBA가 가진 권한 한 번에 회수 +REVOKE ALL PRIVILEGES ON test FROM 'GRANT_TEST'; +2. DBA가 가진 권한을 명시적으로 회수 +REVOKE SELECT ON test FROM 'GRANT_TEST'; +REVOKE INSERT ON test FROM 'GRANT_TEST'; +REVOKE UPDATE ON test FROM 'GRANT_TEST'; +REVOKE DELETE ON test FROM 'GRANT_TEST'; +REVOKE ALTER ON test FROM 'GRANT_TEST'; +REVOKE DROP ON test FROM 'GRANT_TEST'; +REVOKE EXECUTE ON test FROM 'GRANT_TEST'; +REVOKE INDEX ON test FROM 'GRANT_TEST'; +REVOKE REFERENCES ON test FROM 'GRANT_TEST'; +3. DBA 권한을 가진 불필요 계정 삭제 +DROP USER 'GRANT_TEST'; +Step 3) 필요할 경우 적절한 권한을 부여하여 새로운 계정 생성 +CREATE USER [계정명] PASSWORD '비밀번호' GROUPS [그룹명]; +예시) CREATE USER test_db PASSWORD 'password' GROUPS DB_USER; + + +![이미지 612-0](images/p0612_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +613 +D-05 +(중) +DBMS > 1. 계정 관리 +비밀번호 재사용에 대한 제약 설정 +개요 +점검 내용 +비밀번호 변경 시 이전 비밀번호를 재사용할 수 없도록 비밀번호 제약 설정이 되어있는지 점검 +점검 목적 +비밀번호 재사용 제약 설정 적용 여부를 점검하여 비밀번호 변경 시 이전 비밀번호 재사용을 제약하여 +형식적인 비밀번호 변경을 원천적으로 차단하기 위함 +보안 위협 +비밀번호 재사용 제약 설정이 적용되어 있지 않을 경우 비밀번호 변경 전 사용했던 비밀번호를 +재사용함으로써 비인가자의 계정 비밀번호 추측 공격에 대한 시간을 더 많이 허용하여 비밀번호 유출 +위험이 증가함 +참고 +※ 비밀번호 제약 설정: 비밀번호 변경 시 이전에 사용했던 비밀번호를 재사용할 수 없게 하는 +설정으로써 이전 암호 재사용 가능 기간(PASSWORD_REUSE_TIME), 이전 암호 재사용 가능 +횟수(PASSWORD_REUSE_MAX) 등이 있음 +점검 대상 및 판단 기준 +대상 +Oracle DB, Altibase, Tibero 등 +판단 기준 +양호 : 비밀번호 재사용 제한 설정을 적용한 경우 +취약 : 비밀번호 재사용 제한 설정을 적용하지 않은 경우 +조치 방법 +PASSWORD_REUSE_TIME, PASSWORD_REUSE_MAX 파라미터 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) SQL*Plus 설정 확인 +-- Check for both reuse max and reuse time not set +SELECT profile FROM DBA_PROFILES WHERE (resource_name = 'PASSWORD_REUSE_MAX' A +ND limit IN ('UNLIMITED', 'NULL')) OR (profile IN (SELECT profile FROM DBA_PROFILES WHE +RE resource_name = 'PASSWORD_REUSE_TIME') AND limit IN ('UNLIMITED', 'NULL')); +-- Check for reuse max with value that is less than allowed minimum +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_MAX' AN +D limit NOT IN ('UNLIMITED', 'NULL') AND REGEXP_LIKE(limit, '^[0-9]+$') -- Only consider nume +ric values AND TO_NUMBER(limit) < 10; + + +![이미지 613-0](images/p0613_img0.png) + + +--- + +| 한국인터넷진흥원 | +614 +-- Check for reuse time that is less than allowed minimum +SELECT profile FROM DBA_PROFILES WHERE resource_name = 'PASSWORD_REUSE_TIME' AN +D limit NOT IN ('UNLIMITED', 'NULL') AND REGEXP_LIKE(limit, '^[0-9]+$') -- Only consider nume +ric values AND TO_NUMBER(limit) < 365; +Step 2) PASSWORD_REUSE_TIME 및 PROFILE 파라미터 수정 +SQL> ALTER PROFILE default LIMIT password_reuse_time 365 password_reuse_max 10; +SQL> ALTER PROFILE [프로파일명] LIMIT password_reuse_time DEFAULT password_reuse_max +default; +l Altibase +Step 1) 다음 명령어를 통해 비밀번호 정책 설정 여부 확인 +SELECT * FROM system_.sys_users_; +Step 2) 아래 Property에 대해 비밀번호 정책 설정 +CASE_SENSITIVE_PASSWORD +FAILED_LOGIN_ATTEMPTS +PASSWORD_LOCK_TIME +PASSWORD_LIFE_TIME +PASSWORD_GRACE_TIME +PASSWORD_REUSE_TIME +PASSWORD_REUSE_MAX +PASSWORD_VERIFY_FUNCTION +정책 적용 시 다음 명령어를 사용 +ALTER USER [계정명] LIMIT (Property 숫자); +예시) ALTER USER TESTUSER LIMIT (FAILED_LOGIN_ATTEMPTS 7, PASSWORD_LOCK_TIM +E 7); + + +![이미지 614-0](images/p0614_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +615 +l Tibero +Step 1) 사용자별 비밀번호 PROFILE 적용 여부 확인 +SELECT * FROM dba_users; +[ 사용자별 비밀번호 PROFILE 적용 여부 확인 ] +Step 2) 설정되어 있을 경우 PROFILE 설정 내용 확인 +SELECT * FROM dba_users; +[ PASSWORD_REUSE_TIME, PASSWORD_REUSE_MAX 파라미터값 확인 ] +Step 3) 설정되어 있지 않을 경우 PROFILE 생성 또는 수정 시(ALTER PROFILE) 비밀번호 정책 설정 적용 시 +다음 명령어를 사용 +CREATE PROFILE prof LIMIT +예시) CREATE PROFILE prof LIMIT +failed_login_attempts 3 +password_lock_time 1/1440 +password_life_time 90 +password_reuse_time unlimited +password_reuse_max 10 +password_grace_time 10 +password_verify_function verify_function; + + +![이미지 615-0](images/p0615_img0.png) + + +![이미지 615-1](images/p0615_img1.png) + + +![이미지 615-2](images/p0615_img2.png) + + +--- + +| 한국인터넷진흥원 | +616 +D-06 +(중) +DBMS > 1. 계정 관리 +DB 사용자 계정을 개별적으로 부여하여 사용 +개요 +점검 내용 +DB 접근 시 사용자별로 서로 다른 계정을 사용하여 접근하는지 점검 +점검 목적 +사용자별 별도 DBMS 계정을 사용하여 DB에 접근하는지 점검하여 DB 계정 공유 사용으로 발생할 수 +있는 로그 감사 추적 문제를 대비하고자 함 +보안 위협 +DB 계정을 공유하여 사용할 경우 비인가자의 DB 접근 발생 시 계정 공유 사용으로 인해 로그 감사 +추적의 어려움이 발생할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL 등 +판단 기준 +양호 : 사용자별 계정을 사용하고 있는 경우 +취약 : 공용 계정을 사용하고 있는 경우 +조치 방법 +사용자별 계정 생성 및 권한 부여 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) 계정 확인(SQL*Plus) +SQL> SELECT username FROM dba_users ORDER BY username; +Step 2) 공용 계정 삭제 +SQL> DROP USER '공용 계정'; +Step 3) 사용자별, 응용 프로그램별 계정 생성 +SQL> CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>'; +Step 4) 권한 부여 +SQL> GRANT connect, resource TO [계정명]; +l MSSQL +Step 1) 공용계정 삭제 +EXEC sp_droplogin '공용 계정'; + + +![이미지 616-0](images/p0616_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +617 +Step 2) 사용자별, 응용 프로그램별 계정 생성 +CREATE LOGIN '생성 계정' WITH PASSWORD = '비밀번호'; +CREATE USER '생성 계정' FOR LOGIN '생성 계정' WITH DEFAULT_SCHEMA ='생성 계정'; +ALTER USER '생성 계정'; +EXEC sp_adduser '생성 계정', '생성 계정', 'db_owner'; +EXEC sp_adduser '생성 계정', '생성 계정', '생성 계정'; +EXEC sp_grantdbaccess '생성 계정', '생성 계정'; +l MySQL +Step 1) 공용용 계정 삭제 +mysql> DROP USER <계정명>@<호스트명 or IP> +Step 2) 사용자별, 응용 프로그램별 계정 생성 및 권한 설정 +// 사용자 계정 생성 +mysql> create user '<계정명>'@'<호스트명 or IP>' identified by '비밀번호'; +// 특정 데이터베이스의 특정 테이블에 select, insert 권한을 부여 +mysql> grant select, insert on DB이름.테이블명 to '<계정명>'@'<호스트명 or IP>'; +// 특정 데이터베이스의 모든 테이블에 모든 권한을 부여 +mysql> grant all privileges on DB이름.* to '<계정명>'@'<호스트명 or IP>'; +mysql> flush privileges; +※ 모든 권한을 부여할 경우, 해당 사용자는 지정된 데이터베이스에서 모든 작업의 수행이 가능하므로 사용자의 +관리적 측면에서는 편리하나, 보안적 측면에서는 필요한 최소한의 권한만 부여하여 안정성을 높여야 함 +l Altibase +Step 1) DB에 생성된 계정 확인 +SELECT * FROM system_.sys_users_; +Step 2) 공용 계정 확인하여 삭제 +DROP USER <계정명> CASCADE; +Step 3) 사용자별, 응용 프로그램별 등 목적에 맞게 계정 생성 +CREATE USER <계정명> IDENTIFIED BY <비밀번호>; +l Tibero + + +![이미지 617-0](images/p0617_img0.png) + + +--- + +| 한국인터넷진흥원 | +618 +Step 1) DB에 생성된 계정 확인 +SELECT * FROM dba_users_; +Step 2) Step1)의 결과에서 공용 계정 확인하여 삭제 +DROP USER [삭제할 계정] CASCADE; +Step 3) 사용자별, 응용 프로그램별 등 목적에 맞게 계정 생성 +CREATE USER [계정명] IDENTIFIED BY [비밀번호]; +l PostgreSQL +Step 1) 모든 사용자 확인 +쿼리문 조회 : SELECT * FROM pg_shadow; +명령어 조회 : \du +Step 2) 불필요 계정 삭제 +DROP ROLE '삭제할 계정'; +Step 3) 계정 생성 및 권한 추가 +CREATE USER '생성할 계정'; +ALTER ROLE '계정명' '권한명' '권한명' ····; +\du (계정 생성 및 권한 확인) +※ 계정의 용도 파악 후 불필요한 계정은 삭제, 새로운 계정 생성 시 적절한 권한을 부여하여 생성 + + +![이미지 618-0](images/p0618_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +619 +D-07 +(중) +DBMS > 1. 계정 관리 +root 권한으로 서비스 구동 제한 +개요 +점검 내용 +서비스 구동 시 root 계정 또는 root 권한으로 구동되는지 점검 +점검 목적 +root 권한을 제한적으로 사용함으로써 시스템의 손상, 데이터의 유출 및 변조 등을 차단하여 보안 +위협을 방지하기 위함 +보안 위협 +root 권한으로 서비스를 구동할 경우 시스템 손상, 데이터 유출 및 변조, 감사 및 추적의 어려움 등으로 +인해 서비스 공격의 표적이 될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, MySQL, Altibase, Cubrid 등 +판단 기준 +양호 : DBMS가 root 계정 또는 root 권한이 아닌 별도의 계정 및 권한으로 구동되고 있는 경우 +취약 : DBMS가 root 계정 또는 root 권한으로 구동되고 있는 경우 +조치 방법 +DBMS 구동 계정 변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) 실행 중인 프로세스를 통한 확인 +$ ps –ef | grep pmon +Step 2) Oracle Listener 프로세스 사용자 확인 +$ ps –ef | grep tnslsnr +Step 3) 사용자 계정을 'Oracle'로 전환 +$ su – oracle (현재 사용자/관리자 계정에서 'Oracle' 사용자로 전환) +$ lsnrctl stop (Oracle Listener 중지) +$ sqlplus / as sysdba (SQL*Plus 유틸리티를 이용하여 시스템 관리자(SYSDBA) 권한으로 로그인) +$ shutdown immediate (데이터베이스 종료) +Step 4) Oracle 서비스 재시작 +$ lsnrctl start (Oracle Listener 시작) +$ sqlplus / as sysdba (SQL*Plus 유틸리티를 이용하여 시스템 관리자(SYSDBA) 권한으로 로그인) + + +![이미지 619-0](images/p0619_img0.png) + + +--- + +| 한국인터넷진흥원 | +620 +$ startup (데이터베이스 시작) +l MySQL +Step 1) 실행 중인 프로세스를 통한 확인 +# ps –ef | grep mysqld +Step 2) mysql server configuration 파일에서 [mysqld] 그룹의 'user' 지시자의 설정값 확인 +# cat [mysql server configuration 파일 위치] | grep user (user=mysql로 설정되어 있으면 양호) +Step 3) mysql server configuration 파일에서 [mysqld] 그룹의 'user' 지시자 설정 +# vi [mysql server configuration 파일 위치] (일반적으로 /etc/my.cnf.d/mysql-server.cnf) +※ user = [mysqld를 구동할 시스템의 일반 사용자 계정] +l Altibase +Step 1) 실행 중인 프로세스를 통한 확인 +# ps –ef | grep altibase | grep –v grep +Step 2) Altibase 디렉터리 및 파일을 Altibase 전용 계정으로 소유자 변경 +# chown –R [계정명]:[그룹명] '[Altibase 디렉터리 위치]’ +Step 3) Altibase 전용 계정으로 DB 구동 +l Cubrid +Step 1) 실행 중인 프로세스를 통한 확인 +# ps –ef | egrep 'cub_master|cub_broker|cub_manager' | grep –v grep +(cub_master, cub_broker, cub_manager 데몬이 root 또는 root 권한으로 구동되었는지 확인) +Step 2) 삭제 후 cubrid 계정으로 재설치 또는 같은 DB를 생성 후에 언로드/로드를 통해 기존 데이터 이관 + + +![이미지 620-0](images/p0620_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +621 +D-08 +(상) +DBMS > 1. 계정 관리 +안전한 암호화 알고리즘 사용 +개요 +점검 내용 +해시 알고리즘 SHA-256 이상의 암호화 알고리즘을 사용하는지 점검 +점검 목적 +안전한 해시 알고리즘 사용으로 데이터의 기밀성 및 무결성을 보장하고, 사용자 인증을 강화하기 위함 +보안 위협 +SHA-1이나 MD5와 같은 오래된 알고리즘 사용 시 공격자의 무차별 대입 공격 등으로 비밀번호 유추가 +가능하며, 데이터 변조 및 유출의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, MySQL, Tibero, PostgreSQL 등 +판단 기준 +양호 : 해시 알고리즘 SHA-256 이상의 암호화 알고리즘을 사용하고 있는 경우 +취약 : 해시 알고리즘 SHA-256 미만의 암호화 알고리즘을 사용하고 있는 경우 +조치 방법 +SHA-256 이상의 암호화 알고리즘 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l OracleDB +Step 1) SQL*Plus 쿼리를 통한 암호화 알고리즘 확인 +SELECT username, password_versions FROM dba_users; +Step 2) sqlnet.ora 파일 수정 +$ vi /u01/app/oracle/product/11.2.0/xe/network/admin/sqlnet.ora +SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12 +SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 12 +※ sqlnet.ora 파일 기본 경로 +Unix/Linux : $ORACLE_HOME/network/admin/sqlnet.ora +Windows : %ORACLE_HOME%\network\admin\sqlnet.ora +※ Oracle DB 알고리즘 : 10G(MD5), 11G(SHA-1), 12C(SHA-512, AES) + + +![이미지 621-0](images/p0621_img0.png) + + +--- + +| 한국인터넷진흥원 | +622 +l MSSQL +Step 1) 저장된 비밀번호 해시 값 확인 +select name, password_hash from sys.sql_logins; +※ MSSQL 2012이상에서 사용자 계정의 비밀번호는 32bit Salt를 적용한 SHA-512 해시 알고리즘을 사용 +[ 일반 이용자 패스워드 해시 알고리즘 변경 ] +Step 1) 데이터베이스 접속 +USE <데이터베이스명> +GO +Step 1) 열 추가 +ALTER TABLE <테이블명> ADD <신규 해시 칼럼명> varbinary(256) +GO +Step 2) 새로운 열에 암호화 된 데이터 저장 +UPDATE <테이블명> SET <신규 해시 칼럼명> = HASHBYTES(‘SHA2_256’, <기존 해시 칼럼명>) +GO +Step 3) 기존 열 제거 +ALTER TABLE <테이블명> DROP COLUMN <기존 해시 칼럼명> +GO +l MySQL +Step 1) 계정별 암호화 알고리즘 확인 +[mysql 5.7] +mysql> SELECT user, host, plugin FROM mysql.user; 또는 +mysql> SELECT host, user, plugin, password AS authentication_string FROM mysql.user; +[mysql 8.0] + + +![이미지 622-0](images/p0622_img0.png) + + +![이미지 622-1](images/p0622_img1.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +623 +mysql> SELECT user, host, plugin FROM mysql.user; 또는 +mysql> SELECT host, user, plugin, authentication_string FROM mysql.user; +Step 2) 비밀번호 및 암호화 알고리즘 설정 +[mysql 5.7] +- user 생성 시 적용 +CREATE USER '계정명'@'host' IDENTIFIED BY '비밀번호'; +- 기존 user 적용 +ALTER USER '계정명'@'host' IDENTIFIED '신규 비밀번호'; +※ mysql 5.7에서는 기본적으로 mysql_native_password 플러그인이 사용되므로 별도의 지정이 필요하지 않음 +[mysql 8.0] +- user 생성 시 적용 +mysql> CREATE USER '계정명'@'localhost' IDENTIFIED WITH caching_sha2_password BY '비밀번호'; +- 기존 user 적용 +mysql> ALTER USER '계정명'@'localhost' IDENTIFIED WITH caching_sha2_password BY '비밀번호'; +※ mysql v8.0 이상부터 암호화 알고리즘으로 caching_sha2_password(SHA-256)가 적용됨 +※ mysql v5.7 버전에서 사용하던 데이터베이스를 8.0으로 업그레이드하여 mysql_native_password 플러그인이 유 +지되는 경우 위와 같이 caching_sha2_password 알고리즘을 지정하여 적용할 수 있음 +l Tibero +Step 1) 쿼리문을 통한 암호화 알고리즘 확인 +SELECT "TS#", "ENCRYPTIONALG", "ENCRYPTEDTS" FROM V$ENCRYPTED_TABLESPACES; +Step 2) 암호화 알고리즘 적용 +ALTER TABLESPACE "ENCRYPTED_TS" ENCRYPTION USING '적용할 암호화 알고리즘'; +l PostgreSQL +Step 1) psql 접속 후 계정별 암호화 알고리즘 확인 +postgres=# SELECT usename, passwd FROM pg_shadow; +Step 2) 명령어를 통한 알고리즘 적용 + + +![이미지 623-0](images/p0623_img0.png) + + +--- + +| 한국인터넷진흥원 | +624 +- user 생성 시 적용 +postgres=# CREATE USER 계정명 password '설정할 비밀번호'; +- 기존 user 적용 +postgres=# ALTER USER 계정명 WITH password '설정할 비밀번호'; +※ default 설정으로 SCRAM-SHA-256 암호화 알고리즘이 적용 +※ peer : 로컬에서만 연결이 가능하며 OS에서 클라이언트의 OS 사용자 이름을 얻고 요청한 데이터베이스 사용자 +이름과 일치하는지 확인하는 인증 방식 + + +![이미지 624-0](images/p0624_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +625 +D-09 +(중) +DBMS > 1. 계정 관리 +일정 횟수의 로그인 실패 시 이에 대한 잠금정책 설정 +개요 +점검 내용 +DBMS 설정 중 일정 횟수의 로그인 실패 시 계정 잠금 정책에 대한 설정이 되어있는지 점검 +점검 목적 +일정 횟수의 로그인 실패 시 계정 잠금 정책을 설정하여 비인가자의 자동화된 무차별 대입 공격, 사전 +대입 공격 등을 통한 사용자 계정 비밀번호 유출을 방지하기 위함 +보안 위협 +일정한 횟수의 로그인 실패 횟수를 설정하여 제한하지 않으면 자동화된 방법으로 계정 및 비밀번호를 +획득하여 데이터베이스에 접근하여 정보가 유출될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, Altibase, Tibero 등 +판단 기준 +양호 : 로그인 시도 횟수를 제한하는 값을 설정한 경우 +취약 : 로그인 시도 횟수를 제한하는 값을 설정하지 않은 경우 +조치 방법 +로그인 시도 횟수 제한 값 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) Failed_login_attempts Profile 파라미터 수정 +SQL> ALTER PROFILE LIMIT FAILED_LOGIN_ATTEMPTS XX; (XX회 이하로 설정) +Step 2) Profile 적용 +SQL> connect / as sysdba +SQL> @$Ora_Home/rdbms/admin/utlpwdmg. 또는 +default profile에 unlimited로 설정하고 이 default 값을 적용하고자 하는 profile에 적용 +SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LOCK_TIME UNLIMITED; +해당 Profile이 잠길 경우 자동으로 해제되지 않음 +SQL> ALTER PROFILE [Profile명] LIMIT PASSWORD_LOCK_TIME XX; +해당 Profile이 잠길 경우 XX일 이후 잠금 해제 +※ utlpwdmg.sql : 비밀번호 관리 관련 기능 설정 및 Profile 수정 역할을 하는 스크립트 + + +![이미지 625-0](images/p0625_img0.png) + + +--- + +| 한국인터넷진흥원 | +626 +l Altibase +Step 1) SELECT * FROM system_.sys_users_; +Step 2) 아래 Property에 대해 비밀번호 정책 설정 +CASE_SENSITIVE_PASSWORD +FAILED_LOGIN_ATTEMPTS +PASSWORD_LOCK_TIME +PASSWORD_LIFE_TIME +PASSWORD_GRACE_TIME +PASSWORD_REUSE_TIME +PASSWORD_REUSE_MAX +PASSWORD_VERIFY_FUNCTION +Step 3) 정책 적용 시 다음 명령어를 사용 +ALTER USER 계정명 LIMIT (Property 숫자); +예시) ALTER USER testuser LIMIT (FAILED_LOGIN_ATTEMPTS 7); +l Tibero +Step 1) 사용자별 비밀번호 PROFILE 적용 여부 확인 +SELECT * FROM dba_users; +[ 사용자별 비밀번호 PROFILE 적용 여부 확인 ] +Step 2) 설정되어 있을 경우 PROFILE 설정 내용 확인 +SELECT * FROM dba_profiles; +[ PROFILE 설정 내용 확인 ] + + +![이미지 626-0](images/p0626_img0.png) + + +![이미지 626-1](images/p0626_img1.png) + + +![이미지 626-2](images/p0626_img2.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +627 +Step 3) 설정되어 있지 않을 경우 PROFILE 생성 시(또는 수정 시 ALTER PROFILE) 비밀번호 정책 설정 정책 +적용 시 다음 명령어를 사용 +CREATE PROFILE prof LIMIT +예시) CREATE PROFILE prof LIMIT +FAILED_LOGIN_ATTEMPTS 3 +PASSWORD_LOCK_TIME 1/1440 +PASSWORD_LIFE_TIME 90 +PASSWORD_REUSE_TIME UNLIMITED +PASSWORD_REUSE_MAX 10 +PASSWORD_GRACE_TIME 10 +PASSWORD_VERIFY_FUNCTION verify_function; + + +![이미지 627-0](images/p0627_img0.png) + + +--- + +| 한국인터넷진흥원 | +628 +D-10 +(상) +DBMS > 2. 접근 관리 +원격에서 DB 서버로의 접속 제한 +개요 +점검 내용 +지정된 IP주소만 DB 서버에 접근 가능하도록 설정되어 있는지 점검 +점검 목적 +지정된 IP주소만 DB 서버에 접근 가능하도록 설정되어 있는지 점검하여 비인가자의 DB 서버 접근을 +원천적으로 차단하고자 함 +보안 위협 +DB 서버 접속 시 IP주소 제한이 적용되지 않은 경우 비인가자가 내·외부망 위치에 상관없이 DB 서버에 +접근할 수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Windows OS, Oracle DB, MySQL, Altibase, Tibero, PostgreSQL 등 +판단 기준 +양호 : DB 서버에 지정된 IP주소에서만 접근 가능하도록 제한한 경우 +취약 : DB 서버에 지정된 IP주소에서만 접근 가능하도록 제한하지 않은 경우 +조치 방법 +DB 서버에 대해 지정된 IP주소에서만 접근 가능하도록 설정 +조치 시 영향 +허용되지 않은 IP에서 접속 제한 +점검 및 조치 사례 +l Windows OS +Step 1) 특정 IP주소에서만 접속 가능하도록 방화벽 등이 설정되어 있는지 확인 +시작 > 제어판 > 시스템 및 보안 > Windows Defender 방화벽 > 고급 설정 > 고급 보안이 포함된 +Windows Defender 방화벽 > 인바운드 규칙 > 원격 데스크톱 – 사용자 모드(TCP-In)/사용자 모드 +(UDP-In) +[ 원격 데스크톱 방화벽 규칙 확인 ] + + +![이미지 628-0](images/p0628_img0.png) + + +![이미지 628-1](images/p0628_img1.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +629 +Step 2) DB서버에 접근 가능한 특정 IP 지정 +원격 데스크톱 – 사용자 모드(TCP-In)/사용자 모드(UDP-In) 속성 > 영역 > 원격 IP주소 > 다음 IP주소 > +추가 > IP주소 입력 +[ 원격 데스크톱 – 사용자 모드(TCP-In) 속성 ] + +[ 원격 데스크톱 – 사용자 모드(UDP-In) 속성 ] +l Oracle DB +Step 1) oracle 계정으로 로그인 +su - oracle +Step 1) 텍스트 에디터로 $ORA_NET/sqlnet.ora 파일 오픈 +vi $ORA_NET/sqlnet.ora +Step 2) sqlnet.ora 파일의 끝에 다음 두 라인을 추가 +tcp.validnode_checking = yes +tcp.invited_nodes = ( 127.0.0.1, [allowed IP's] ) +Step 3) Listener 재시작 +$ORACLE_HOME/bin/lsnrctl stop +$ORACLE_HOME/bin/lsnrctl start +l MySQL +Step 1) user 테이블을 조회하여 모든 클리이언트에서 접속 가능하도록 설정되어 있는 계정을 특정 IP에서만 접 +속 가능하도록 변경 +mysql> UPDATE user SET host = '<접속 IP>' WHERE user ='<계정명>' and host='%'; + + +![이미지 629-0](images/p0629_img0.png) + + +![이미지 629-1](images/p0629_img1.png) + + +![이미지 629-2](images/p0629_img2.png) + + +--- + +| 한국인터넷진흥원 | +630 +l Altibase +Step 1) Altibase HDB Property 파일을 수정하여 접근 제어 적용 +$Altibase_HOME/conf/altibase.properties의 IP Access Control Lists에서 내부 정책에 맞게 수정 +※ Altibase HDB 서버가 실행되지 않은 상태에서 할 수 있는 정적인 환경설정 방법으로 Property 파일에서 해당 +구성 요소를 특정 값으로 설정한 후 Altibase HDB 서버를 구동해야 수정된 값이 Altibase HDB 서버에 반영 +됨 +[ altibase.properties 파일 ] +Step 2) Altibase HDB 서버에 적용된 접근 제어 설정 확인 +iSQL> SELECT name, value1 FROM v$property WHERE name LIKE 'ACCESS_CONTROL_%'; +l PostgreSQL +Step 1) Data 디렉터리 내에 postgres.conf 파일 설정 +[ postgres.conf 파일 ] +※ listen_addresses는 서버가 클라이언트 애플리케이션의 연결을 수신 대기할 TCP/IP 주소를 지정함. 호 +스트 이름 및/또는 숫자 IP 주소의 쉼표로 구분된 목록 형식으로 지정할 수 있으며, *를 사용하는 경우 +모든 IP에 대해 수신 대기함. 기본값은 localhost 이며 로컬 TCP/IP “루프백” 연결 만 허용 +Step 2) Data 디렉터리 내에 pg_hba.conf 파일 설정 +TYPE DATABASE USER CIDR-ADDRESS METHOD +-------- ----------------- --------- ------------------------- ---------------- +host (DB명) (사용자) (접속 허용 IP) md5 + + +![이미지 630-0](images/p0630_img0.png) + + +![이미지 630-1](images/p0630_img1.png) + + +![이미지 630-2](images/p0630_img2.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +631 +[ pg_hba.conf 파일 ] +Step 3) USER에 접근 허용 '계정명'과 CIDR-ADDRESS에 접속을 '허용할 IP' 설정 +※ PostgreSQL은 기본 설치 시 외부에서 접속할 수 없음 +※ IP 접근 제한 설정 시 postgresql.conf와 pg_hba.conf 두 개의 설정 파일이 연계되어 있으므로 하나의 파일이라 +도 설정이 잘못되어 있는 경우 DB 접속이 불가능 할 수 있음. + + +![이미지 631-0](images/p0631_img0.png) + + +![이미지 631-1](images/p0631_img1.png) + + +![이미지 631-2](images/p0631_img2.png) + + +--- + +| 한국인터넷진흥원 | +632 +l Tibero +Step 1) LSNR_INVITED_IP(특정 IP주소를 갖는 클라이언트만 허용, 그 외 차단) +$TB_SID.tip 파일 안에 다음 예시 내용을 참조하여 입력 +LSNR_INVITED_IP=192.168.1.1;192.168.2.0/24;192.1.0.0/16 +LSNR_INVITED_IP의 최대 길이는 255자이며, 256자 이상의 IP주소를 설정할 경우에는 LSNR_INVIT +ESD_IP_FILE을 사용 +(특정 IP주소를 기재한 파일의 절대 경로를 LSNR_INVITED_IP_FILE에 입력) +※ 초기화 파라미터에 설정된 IP주소에 따라 클라이언트의 네트워크 접속을 허용하거나 차단 +※ $TB_SID는 Tibero 설치 시 입력한 데이터베이스 이름과 동일(/ c:/tibero/tibero5/config/데이터베이스.tip) +● +$TB_SID.tip +파일에 +LSNR_INVITED_IP와 +LSNR_DENIED_IP가 +모두 +설정되어 +있는 +경우 +LSNR_DENIED_IP의 설정은 무시되며 LSNR_INVITED_IP만 적용된다. 즉, LSNR_INVITED_IP에 설정된 IP +주소의 클라이언트를 제외하고는 모든 접속이 차단된다. +● +$TB_SID.tip 파일에 LSNR_INVITED_IP와 LSNR_DENIED_IP가 모두 설정되지 않은 경우 모든 +클라이언트의 네트워크 접속이 허용된다. +● +루프백 주소(Loopback Address, 127.0.0.1)에서 접속하는 경우 LSNR_INVITED_IP 또는 LSNR_DENIED_IP +의 설정과는 무관하게 항상 허용된다. X Tibero 서버를 운영하는 중에 서버를 다시 기동하지 않고 LSNR_INVI +TED_IP 또는 LSNR_DENIED_IP의 설정을 변경하려는 경우 우선 $TB_SID.tip 파일에 LSNR_INVITED_IP +또는 LSNR_DENIED_IP의설정을 변경한 후 파일을 저장하고 다음의 명령을 실행한다. +ALTER SYSTEM LISTENER PARAMETER RELOAD; +위의 명령을 실행하면 $TB_SID.tip 파일에서 LSNR_INVITED_IP 또는 LSNR_DENIED_IP의 내용을 다시 +읽어 변경된 내용을 실시간으로 적용한다. + + +![이미지 632-0](images/p0632_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +633 +D-11 +(상) +DBMS > 2. 접근 관리 +DBA 이외의 인가되지 않은 사용자가 시스템 테이블에 접근할 수 없도록 설정 +개요 +점검 내용 +시스템 테이블에 일반 사용자 계정이 접근할 수 없도록 설정되어 있는지 점검 +점검 목적 +시스템 테이블의 일반 사용자 계정 접근 제한 설정 적용 여부를 점검하여 일반 사용자 계정 유출 시 +발생할 수 있는 비인가자의 시스템 테이블 접근 위험을 차단하기 위함 +보안 위협 +시스템 테이블의 일반 사용자 계정 접근 제한 설정이 되어있지 않을 경우 Object, 사용자, 테이블 및 뷰, +작업 내역 등의 시스템 테이블에 저장된 정보가 누출될 수 있음 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL 등 +판단 기준 +양호 : 시스템 테이블에 DBA만 접근 가능하도록 설정되어 있는 경우 +취약 : 시스템 테이블에 DBA 외 일반 사용자 계정이 접근 가능하도록 설정되어 있는 경우 +조치 방법 +시스템 테이블에 일반 사용자 계정이 접근할 수 없도록 설정 +조치 시 영향 +일반 계정으로 시스템 테이블 접근 불가 +점검 및 조치 사례 +l Oracle DB, Tibero +Step 1) DBA만 접근 가능한 테이블의 권한 확인(SQL*Plus) +SQL> SELECT grantee, privilege, owner, table_name FROM dba_tab_privs WHERE (owner = 'SYS' or t +able_name LIKE 'DBA_%') AND privilege <> 'EXECUTE' AND grantee NOT IN ('PUBLIC', 'AQ_AD +MINISTRATOR_ROLE', 'AQ_USER_ROLE', 'AURORA$JIS$UTILITY$', 'OSE$HTTP$ADMIN', 'TR +ACESVR', 'CTXSYS', 'DBA', 'DELETE_CATALOG_ROLE', 'EXECUTE_CATALOG_ROLE', 'EXP_F +ULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', 'IMP_FULL_DATAB +ASE', 'LOGSTDBY_ADMINISTRATOR', 'MDSYS', 'ODM', 'OEM_MONITOR', 'OLAPSYS', 'ORDSY +S', 'OUTLN', 'RECOVERY_CATALOG_OWNER', 'SELECT_CATALOG_ROLE', 'SNMPAGENT', 'SY +STEM', 'WKSYS', 'WKUSER', 'WMSYS', 'WM_ADMIN_ROLE', 'XDB', 'LBACSYS', 'PERFSTAT', 'X +DBADMIN') AND grantee NOT IN (SELECT grantee FROM dba_role_privs WHERE granted_role = 'D +BA') ORDER BY grantee; (어떤 계정이나 role이 나타나지 않으면 양호) + + +![이미지 633-0](images/p0633_img0.png) + + +--- + +| 한국인터넷진흥원 | +634 +Step 2) 불필요하게 테이블 접근 권한이 사용자 계정에 할당된 경우(SQL*Plus) +SQL> REVOKE <권한> ON FROM user; +l MSSQL +Step 1) system tables 접근 권한이 PUBLIC, GUEST 또는 비인가된 사용자에게 부여된 경우 접근 권한을 제거 +REVOKE <권한> ON FROM [계정명]|[PUBLIC]|[GUEST]; +Step 2) 시스템 테이블에 접근하기 위해서는 stored procedure 또는 information_schema views를 통해 접근해야 +함 +Step 3) 시스템 테이블에 접근 가능한 stored procedure는 사용이 제한되어야 함 +l MySQL +Step 1) 사용자 계정에 부여된 권한 확인 +SHOW GRANTS FOR <계정명>; +Step 2) 접근이 필요한 데이터베이스 및 테이블에만 권한 적용 +GRANT <권한> privileges ON .<테이블명> to '<계정명>'@'<호스트명 or IP>'; +l Altibase +Step 1) sys_tables_를 조회하여 system_ 외 접근 계정 유무 확인 +SELECT * FROM system_.sys_tables_; +Step 2) 불필요 계정 접근 시 해당 접근 해제 +l PostgreSQL +Step 1) 사용자 및 역할 권한 정보 조회 +SELECT * FROM information_schema.role_table_grants; +Step 2) 스키마명에 해당되는 Table에 대한 접근 권한을 일반 사용자로부터 제거 +REVOKE [all,select,insert,update...] ON all tables IN schema '스키마명' FROM '계정명'; + + +![이미지 634-0](images/p0634_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +635 +D-12 +(상) +DBMS > 2. 접근 관리 +안전한 리스너 비밀번호 설정 및 사용 +개요 +점검 내용 +오라클 데이터베이스 Listener의 비밀번호 설정 여부 점검 +점검 목적 +Listener의 Owner는 DBA가 아니더라도 Listener를 shutdown 시키거나 DB 서버에 임의의 파일을 +생성할 수 있으며, 원격에서 LSNRCTL 유틸리티를 사용하여 listener.ora 파일에 대한 변경이 +가능하므로 Listener에 비밀번호를 설정하여 비인가자가 이를 수정하지 못하도록 하기 위함 +보안 위협 +Listener에 비밀번호가 설정되지 않았을 경우 DoS, 정보 획득, Listener 프로세스를 중지시킬 수 있는 +위험이 존재함 +참고 +※ 오라클 Listener: 클라이언트가 원격에서 오라클 DB에 접근할 때 접근 요청을 처리하기 위한 서버 +쪽 프로세스, 혹은 네트워크 인터페이스를 말하며 TCP/1521 포트를 사용함 +※ listener.ora: 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신 환경을 설정하는 +파일 +점검 대상 및 판단 기준 +대상 +Oracle DB +판단 기준 +양호 : Listener의 비밀번호가 설정된 경우 +취약 : Listener의 비밀번호가 설정되어 있지 않은 경우 +조치 방법 +Listener 비밀번호 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) Listener 비밀번호 설정 +LSNRCTL> change_password +Old password: (Not displayed) +New password: (Not displayed) +Reenter new password: (Not displayed)Connecting (DESCRIPTION=(ADDRESS=(PR +OTOCOL=TCP)(HOST=prolin1)(PORT=1521)(IP=FIRST))) +Password change for LISTENER +The command completed successfully +LSNRCTL> set password + + +![이미지 635-0](images/p0635_img0.png) + + +--- + +| 한국인터넷진흥원 | +636 +LSNRCTL> save_config +Step 2) Listener 매개변수 설정 +1. $TNS_ADMIN/listener.ora 파일 내에 아래 Option 추가 +PASSWORDS_ = +ADMIN_RESTRICTIONS_ = ON +2. Listener 재시작 및 상태 확인 +LSNRCTL> lsnrctl stop +LSNRCTL> lsnrctl start +LSNRCTL> lsnrctl reload +LSNRCTL> lsnrctl status +※ Oracle 12c release 2 이후 버전은 Listener 비밀번호 설정을 지원하지 않으므로 해당사항 없음 + + +![이미지 636-0](images/p0636_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +637 +D-13 +(중) +DBMS > 2. 접근 관리 +불필요한 ODBC/OLE-DB 데이터 소스와 드라이브를 제거하여 사용 +개요 +점검 내용 +사용하지 않는 불필요한 ODBC/OLE-DB가 설치되어 있는지 점검 +점검 목적 +불필요한 데이터 소스 및 드라이버를 제거함으로써 비인가자에 의한 데이터베이스 접속 및 자료 유출을 +차단하기 위함 +보안 위협 +불필요한 ODBC/OLE-DB 데이터 소스를 통한 비인가자의 데이터베이스 접속 및 주요 정보유출에 +대한 위험이 발생할 수 있음 +참고 +※ 특정 샘플 응용 프로그램은 샘플 데이터베이스를 위해 ODBC 데이터 소스를 설치하거나 불필요한 +ODBC/OLE-DB 데이터베이스 드라이브를 설치하므로 불필요한 데이터 소스나 드라이버는 +ODBC 데이터 소스 관리자 도구를 이용해서 제거하는 것이 바람직함 +점검 대상 및 판단 기준 +대상 +Windows OS +판단 기준 +양호 : 불필요한 ODBC/OLE-DB가 설치되지 않은 경우 +취약 : 불필요한 ODBC/OLE-DB가 설치된 경우 +조치 방법 +불필요한 ODBC/OLE-DB 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Windows NT +Step 1) 사용하지 않는 불필요한 ODBC 데이터 소스 확인 +시작> 설정 > 제어판 > 관리 도구 > 데이터 원본(ODBC) > 시스템 DSN +Step 2) 사용하지 않는 데이터 소스 제거 +l Windows 2000, 2003, 2008, 2012, 2016 +Step 1) 사용하지 않는 불필요한 ODBC 데이터 소스 확인 +시작 > 설정 > 제어판 > 관리 도구 > 데이터 원본 (ODBC) > 시스템 DSN > 해당 드라이브 클릭 + + +![이미지 637-0](images/p0637_img0.png) + + +--- + +| 한국인터넷진흥원 | +638 +Step 2) 사용하지 않는 데이터 소스 제거 +[ 사용하지 않는 데이터 소스 제거 ] +l Windows 2019, 2022 +Step 1) ODBC 사용하지 않는 불필요한 데이터 소스 확인 +시작 > 설정 > 제어판 > 시스템 및 보안 > 관리 도구 > ODBC 데이터 원본 관리자(32비트/64비트) > 시 +스템DSN > 해당 드라이브 클릭 +Step 2) 사용하지 않는 데이터 소스 제거 +[ 사용하지 않는 데이터 소스 제거 ] + + +![이미지 638-0](images/p0638_img0.png) + + +![이미지 638-1](images/p0638_img1.png) + + +![이미지 638-2](images/p0638_img2.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +639 +D-14 +(중) +DBMS > 2. 접근 관리 +데이터베이스의 주요 설정 파일, 비밀번호 파일 등과 같은 주요 파일들의 접근 권한이 적절하게 설정 +개요 +점검 내용 +데이터베이스의 주요 파일들에 대해 관리자를 제외한 일반 사용자의 파일 수정 권한을 제거하였는지 +점검 +점검 목적 +데이터베이스의 주요 파일에 관리자를 제외한 일반 사용자의 파일 수정 권한을 제거함으로써 +비인가자에 의한 DBMS 주요 파일 변경이나 삭제를 방지하고 주요 정보 유출을 방지할 수 있음 +보안 위협 +데이터베이스 주요 파일에 비인가자가 접근하여 수정 및 삭제 시 데이터베이스 운영에 장애가 발생할 수 +있으며 계정 비밀번호 정보 등 중요 정보의 유출 위험이 존재함 +참고 +※ 데이터베이스의 주요 파일: orapw.ora, listener.ora,init.ora, redo 파일, 데이터베이스 +설정 파일, 네트워크 설정 파일 등 +점검 대상 및 판단 기준 +대상 +Oracle DB, PostgreSQL, Cubrid 등 +판단 기준 +양호 : 주요 설정 파일 및 디렉터리의 권한 설정 시 일반 사용자의 수정 권한을 제거한 경우 +취약 : 주요 설정 파일 및 디렉터리의 권한 설정 시 일반 사용자의 수정 권한을 제거하지 않은 경우 +조치 방법 +주요 설정 파일 및 디렉터리의 권한 설정 변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +[Unix OS] +Step 1) 디렉터리 또는 파일의 권한 점검 +$ORACLE_HOME/bin/oracle (755) +$ORACLE_HOME/bin/[ ] (755) +→ [․sqlplus,sqlldr,sqlload,proc,oraenv,oerr,exp,imp,tkprof,tnsping,wrap] +$ORACLE_HOME/bin/[ ] (750) +→ [․svrmgrl, lsnrctl, dbsnmp] +$ORACLE_HOME/network (755) +$ORACLE_HOME/network/admin/[ ] (755) +→ [․listener.ora, sqlnet.ora 등] +$ORACLE_HOME/lib (755) + + +![이미지 639-0](images/p0639_img0.png) + + +--- + +| 한국인터넷진흥원 | +640 +$ORACLE_HOME/network/admin/[ ] (644) +→ [․tnsnames.ora, protocol.ora, sqlpnet.ora] +$ORACLE_HOME/dbs/init.ora (640) +$ORACLE_HOME/dbs/init.ora (640) +- Find $ORACLE_HOME –name init*.ora –print +- 파일 및 디렉터리의 권한 설정 변경 +# chmod <적용 권한> <파일명> +Step 2) redo 파일, 데이터베이스 설정 파일, 데이터 파일 위치 확인(SQL*Plus) +SQL> Select value from v$parameter where name='spfile'; +SQL> Select 'Control Files: '||value from v$parameter where name='control_files'; +SQL> select 'Control Files: '||value from v$parameter where name='spfile'; +SQL> select 'Logfile: '||member from v$logfile; +SQL> select 'Datafile: '||name from v$datafile; +- 파일 및 디렉터리의 권한 설정 변경 +# chmod <적용 권한> <파일명> +[Windows OS] +Step 1) 패스워드 파일(orapw) 접근 권한은 administrators, system group, owner group, oracle service +count, DBA에게 모든 권한 또는, 그 이하로 설정하고 다른 그룹은 제거함 +l MySQL +[Unix OS] +Step 1) 설정 파일 (my.cnf, my.ini)의 접근 권한 설정 +설정 파일 (my.cnf, my.ini)의 접근 권한을 설정 파일에 대한 보호를 위하여 600 또는 640으로 설정 +my.cnf 파일 위치: /etc/my.cnf, <각 홈디렉터리>/my.cnf +# chmod 600 ./my.cnf +[Windows OS] +Step 1) 설정 파일의 접근 권한은 Adminisrators, SYSTEM, Owner에게 모든 권한 또는 그 이하로 설정하고 다른 +그룹은 제거함 + + +![이미지 640-0](images/p0640_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +641 +l PostgreSQL +[Unix OS] +Step 1) 주요 설정 파일 위치 확인 +postgresql.conf 파일 위치: [$datadir] +DB 접속 통제 설정 파일 위치: /postgres/data/pg_hba.conf, /postgres/data/pg_ident.conf +log_directory : /log_directory/pg_log +Step 2) 주요 설정 파일의 권한 설정 +환경설정 파일(postgresql.conf)의 권한을 640 이하로 설정 +# chmod 640 [$datadir]/postgresql.conf +DB접속 통제 설정 파일(pg_hba.conf, pg_ident.conf)의 권한을 640 이하로 설정 +# chmod 640 ./pg_hba.conf +# chmod 640 ./pg_ident.conf +히스토리 파일 (.psql_history)의 권한을 600 이하로 설정 +$chmod 600 .psql_history +Log 파일(pg_log)의 권한을 640 이하로 설정 +#chmod 640 [Log 파일] +[Windows OS] +Step 1) 주요 환경설정 파일의 접근 권한은 Administrators, SYSTEM, Owner에게 모든 권한 또는 필요 권한만 +부여하여 설정하고 기타 다른 그룹은 권한 제거 +l Cubrid +Step 1) cubrid.conf 파일 권한 확인 +# ls –l $_CUBRID_DATABASES/conf/cubrid.conf 또는 +# ls –l /root/CUBRID-11.2.8.0824-bf70ab7-Linux.x86_64/conf/cubrid.conf (설치경로 직접 입력) +Step 2) cubrid.conf 파일 권한 설정 +# sudo chmod 640 /root/CUBRID-11.2.8.0824-bf70ab7-Linux.x86_64/conf/cubrid.conf +※ cubrid.conf 파일의 권한이 600 또는 640일 경우 양호함 + + +![이미지 641-0](images/p0641_img0.png) + + +--- + +| 한국인터넷진흥원 | +642 +D-15 +(하) +DBMS > 2. 접근 관리 +관리자 이외의 사용자가 오라클 리스너의 접속을 통해 리스너 로그 및 trace 파일에 대한 변경 제한 +개요 +점검 내용 +Listener 관련 설정 파일의 접근 권한을 관리자만 가능하게 하고 Listener 파라미터의 변경 방지에 +대한 옵션 설정 여부 점검 +점검 목적 +Listener 설정 파일 및 파라미터 변경 방지 옵션을 설정하여 비인가자의 Listener를 이용한 파라미터 +변경을 방지하여 trace 파일 및 Listener 로그의 신뢰도를 유지하기 위함 +보안 위협 +비인가자가 Oracle의 LSNRCTL 유틸리티를 이용하여 Listener에 직접 접근할 경우, 명령어를 통해 +Listener의 모든 파라미터를 변경할 수 있으며, 이로 인해 trace 파일이나 Listener 로그 파일을 +변경할 위험이 존재함 +참고 +※ trace 파일: 데이터베이스에 문제가 발생했을 시 문제를 진단하고 디버깅할 수 있도록 다양한 +정보를 제공하는 파일 +점검 대상 및 판단 기준 +대상 +Oracle DB +판단 기준 +양호 : Listener 관련 설정 파일에 대한 권한이 관리자로 설정되어 있으며, Listener로 파라미터를 +변경할 수 없게 옵션이 설정된 경우 +취약 : Listener 관련 설정 파일에 대한 권한이 일반 사용자로 설정되어 있고, Listener로 파라미터를 +변경할 수 없게 옵션이 설정되지 않은 경우 +조치 방법 +주요 파일 및 로그 파일에 대한 권한을 관리자로 제한 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) 파일 권한 확인 +$ORACLE_HOME/network/admin 디렉터리 권한 확인 +Unix 계열 : ls –a +Windows 계열 : 파일 속성 +LSNRCTL> status ListenerName (listener.ora 파일 확인) +listener.ora 파일에서 ADMIN_RESTRICTIONS_ = ON 설정 확인 + + +![이미지 642-0](images/p0642_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +643 +Step 2) ADMIN_RESTRICTIONS_LISTENER 설정 추가 +listener.ora 파일에 ADMIN_RESTRICTIONS_=ON 라인을 추가한 후 listener를 재실행 +하거나 lsnrctl reload 명령어를 실행하여 재로딩 +[ ADMIN_RESTRICTIONS_=ON 옵션 설정 ] + + +![이미지 643-0](images/p0643_img0.png) + + +![이미지 643-1](images/p0643_img1.png) + + +--- + +| 한국인터넷진흥원 | +644 +D-16 +(하) +DBMS > 2. 접근 관리 +Windows 인증 모드 사용 +개요 +점검 내용 +DB 로그인 시 Windows 인증 모드 적절성 점검 +점검 목적 +적절한 Windows 인증 모드를 적용하여 적합한 복잡성 수준을 유지하기 위함 +보안 위협 +혼합 인증 모드를 사용하고 sa 계정이 활성화되어 있는 경우, 잘 알려진 sa 계정에 대한 계정 추측 +공격의 위험이 존재함 +참고 +※ 데이터베이스 엔진 인증 모드에는 Windows 인증 모드와 SQL Sever가 있는 혼합 모드 두 가지 +구성이 있음. Windows 인증 모드 선택 시 SQL Sever 인증을 위해서 설치 프로그램은 sa라는 +비활성화된 계정을 생성하고, 이 계정은 혼합 모드를 사용함으로써 활성화됨. sa 계정은 일반 +사용자들에게 잘 알려진 만큼 쉽게 공격의 대상이 될 수 있으므로 꼭 필요하지 않은 경우 +비활성화하고, 활성화해야 할 경우 강력한 암호 체계를 사용해야 함 +※ Windows 인증은 kerberos 보안 프로토콜을 사용하며, 강력한 암호 정책을 적용하여 적합한 +복잡성 수준을 유지함. 또한, 계정 잠금 및 암호만료를 지원하고 SQL 서버가 Windows에서 +제공하는 자격 증명을 신뢰한 트러스트 연결을 사용하기 때문에 Windows 인증 모드 사용을 +권고함 +※ sa 계정: 데이터베이스 서버 설치 시 자동으로 생성되며 DB 서버 관리자 계정 +※ kerberos 보안 프로토콜: 개방된 컴퓨터 네트워크 내에서 서비스 요구를 인증하기 위한 보안 +시스템 +점검 대상 및 판단 기준 +대상 +MSSQL +판단 기준 +양호 : Windows 인증 모드를 사용하고 sa 계정이 비활성화되어 있는 경우 +sa 계정 활성화 시 강력한 암호 정책을 설정한 경우 +취약 : 혼합 인증 모드를 사용하고, 활성화된 sa 계정에 대한 강력한 암호 정책 설정을 하지 않은 경우 +조치 방법 +Windows 인증 모드 사용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l MSSQL +Step 1) Windows 인증 모드 활성화 +SQL Server Management Studio > 해당 서버 우클릭 > 속성 > 보안 > 서버 인증> Windows 인증 모드 +(W)를 클릭하여 활성화 + + +![이미지 644-0](images/p0644_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +645 +[ Windows 인증 모드(W) 활성화 ] + + +![이미지 645-0](images/p0645_img0.png) + + +![이미지 645-1](images/p0645_img1.png) + + +--- + +| 한국인터넷진흥원 | +646 +D-17 +(하) +DBMS > 3.옵션 관리 +Audit Table은 데이터베이스 관리자 계정으로 접근하도록 제한 +개요 +점검 내용 +Audit Table 접근 권한이 관리자 계정으로 제한되고 있는지 점검 +점검 목적 +Audit Table 접근 권한을 관리자 계정으로 제한함으로써 비인가자가 감사 데이터의 수정, 삭제하는 +것을 방지하고, 감사 기록의 무결성과 신뢰성을 보장하기 위함 +보안 위협 +Audit Table이 데이터베이스 관리자 계정에 속하지 않을 경우, 비인가자가 감사 데이터의 수정, 삭제 +등을 수행할 수 있으므로 보안 사고 발생 시 원인 분석이 불가능하게 되며, 이로 인해 재발 방지를 위한 +조치를 할 수 없으므로 동일 유형의 공격이 반복되거나 시스템 취약점의 악용이 반복될 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, Altibase, Tibero 등 +판단 기준 +양호 : Audit Table 접근 권한이 관리자 계정으로 설정한 경우 +취약 : Audit Table 접근 권한이 일반 계정으로 설정한 경우 +조치 방법 +Audit Table 접근 권한을 관리자 계정으로 제한 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB, Tibero +Step 1) 설정 확인(SQL*Plus) +SQL> SELECT owner FROM dba_tables WHERE table_name = 'AUD$'; +Step 2) Audit table에 접근할 권한이 없는 계정이 확인될 경우 권한 삭제(SYS 또는 SYSTEM 제외) +REVOKE <권한> ON FROM <계정명>; +l Altibase +Step 1) 사용자 계정을 조회하여 SYSTEM_, SYS의 USER_ID를 확인 +SELECT * FROM system_.sys_users_; +Step 2) 시스템 테이블 조회 내용 중 AUDIT 관련 테이블 정보의 TABLE_ID 확인 +SELECT * FROM system_.sys_tables_; +Step 3) Audit Table의 계정에 불필요한 권한이 부여되어 있는 경우 권한 삭제 + + +![이미지 646-0](images/p0646_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +647 +REVOKE <권한> ON [audit_table] FROM [계정명]; +l Tibero +감사 기록은 $TB_SID.tip 파일에 설정된 AUDIT_TRAIL 파라미터에 따라 데이터베이스 내부 또는 OS 파일에 +저장할 수 있으며, OS 파일에 감사 기록을 저장하는 경우 파일의 위치와 최대 크기를 각각 $TB_SID.tip파일의 +AUDIT_FILE_DEST 파라미터와 AUDIT_FILE_SIZE 파라미터로 설정할 수 있음 +Step 1) <$TB_SID.tip> 파일에 아래 내용 입력 +AUDIT_TRAIL=DB_EXTENDED +감사 기록에 포함되는 기본 정보 및 사용자가 실행한 SQL 문장까지 저장 +※ 다음 정적뷰를 통해 감사 기록 조회가 가능 +DBA_AUDIT_TRAIL (SELECT * FROM dba_audit_trail;) +USER_AUDIT_TRAIL (SELECT * FROM user_audit_trail;) +또는 +AUDIT_TRAIL=OS +AUDIT_FILE_DEST=/home/Tibero/audit/audit_trail.log +AUDIT_FILE_SIZE=10M +위와 같이 설정하면 "/home/Tibero/audit/audit_trail.log"에 최대 10MB의 크기로 감사 기록이 저장됨 +※ 감사 파일이 있는 디렉터리에는 일반 사용자는 접근할 수 없도록 설정 + + +![이미지 647-0](images/p0647_img0.png) + + +--- + +| 한국인터넷진흥원 | +648 +D-18 +(상) +DBMS > 3. 옵션 관리 +응용프로그램 또는 DBA 계정의 Role이 Public으로 설정되지 않도록 조정 +개요 +점검 내용 +응용 프로그램 또는 DBA 계정의 Role이 Public으로 설정되어 있는지 점검 +점검 목적 +응용 프로그램 또는 DBA 계정의 Role을 점검하여 일반 계정으로 응용 프로그램 테이블이나 DBA +테이블의 접근을 차단하기 위함 +보안 위협 +응용 프로그램 또는 DBA 계정의 Role이 Public으로 설정된 경우 일반 계정에서도 응용 프로그램 +테이블 및 DBA 테이블로 접근할 수 있으므로 중요 정보 유출의 위험이 존재함 +참고 +※ Role: 사용자에게 허가할 수 있는 권한들의 집합 +점검 대상 및 판단 기준 +대상 +Oracle DB, Altibase, Tibero, Cubrid 등 +판단 기준 +양호 : DBA 계정의 Role이 Public으로 설정되지 않은 경우 +취약 : DBA 계정의 Role이 Public으로 설정된 경우 +조치 방법 +DBA 계정의 Role 설정에서 Public 그룹 권한 취소 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) DBA Role 설정 확인(SQL*Plus) +SQL> SELECT granted_role FROM dba_role_privs WHERE grantee = 'PUBLIC'; +Step 2) PUBLIC 그룹의 권한 취소(SQL*Plus) +SQL> REVOKE [Role name] FROM PUBLIC; +l Altibase +Step 1) 사용자 정보를 조회하여 Object 권한, 시스템 권한이 Public 또는 Guest에게 부여되어 있는지 확인 +SELECT * FROM system_.sys_users_; +SELECT * FROM system_.sys_grant_object_; +SELECT * FROM system_.sys_grant_system_; +GRANTOR_ID : 권한을 부여한 사용자의 식별자로, SYS_USERS_ 메타테이블의 한 USER_ID 값과 동일 +GRANTEE_ID : 권한을 부여받은 사용자의 식별자로, SYS_USERS_ 메타테이블의 한 USER_ID 값과 + + +![이미지 648-0](images/p0648_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +649 +동일함. 단, Object 권한을 Public에게 부여한 경우, SYS_USERS_메타테이블에 존재하지 않는 +USER_ID 값인 "0"이 칼럼에 나타남 +Step 2) 불필요 권한 회수 +REVOKE <권한> ON FROM [계정명]; +l Tibero +Step 1) 사용자 정보를 조회하여 Role 부여가 적절한지 확인 +SELECT * FROM dba_role_privs; +SELECT * FROM user_role_privs; +Step 2) 불필요 권한 회수 +REVOKE <권한> FROM [계정명]; + + +![이미지 649-0](images/p0649_img0.png) + + +--- + +| 한국인터넷진흥원 | +650 +D-19 +(상) +DBMS > 3. 옵션 관리 +OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES를 FALSE로 설정 +개요 +점검 내용 +OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES가 FALSE로 설정이 +적용되어 있는지 점검 +점검 목적 +OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES의 설정을 점검하여 +비인가자들의 데이터베이스 접근을 막고 데이터베이스 관리자에 의한 사용자 Role 설정이 가능하게 +하기 위함 +보안 위협 +Ÿ OS_ROLES가 TRUE로 설정된 경우, 데이터베이스 접근 제어로 컨트롤되지 않는 OS 그룹에 의해 +GRANT 된 권한이 허락되어 악의적인 사용자가 시스템 권한을 악용할 위험이 존재 +Ÿ REMOTE_OS_ROLES가 TRUE로 설정된 경우, 원격 사용자가 OS의 다른 사용자로 속여 +데이터베이스에 접근할 수 있으므로 중요 정보에 대한 무단 접근 및 권한 상승의 위험이 존재함 +Ÿ REMOTE_OS_AUTHENT가 TRUE로 설정된 경우, 신뢰하는 원격 호스트에서 인증 절차 없이 +데이터베이스에 접속할 수 있으므로 중요 정보의 유출 위험이 존재함 +참고 +※ OS_ROLES: OS 그룹에 의한 사용자의 롤 부여를 가능하게 하도록 설정 +※ REMOTE_OS_AUTHENT: 원격지의 OS 인증 허용 여부를 설정 +※ REMOTE_OS_ROLES: OS가 원격 클라이언트에 대한 롤의 지정이 가능하도록 설정 +점검 대상 및 판단 기준 +대상 +Oracle DB +판단 기준 +양호 : OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES 설정이 FALSE로 +설정된 경우 +취약 : OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES 설정이 TRUE로 +설정되지 않은 경우 +조치 방법 +OS_ROLES, REMOTE_OS_AUTHENTICATION, REMOTE_OS_ROLES 설정을 FALSE로 변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) OS_ROLES 확인 +SQL> SHOW PARAMETER os_roles; +SQL> SELECT value FROM v$parameter WHERE name = 'os_roles'; +Oracle_HomeDirectory/admin/pfile/init.ora에서 OS_ROLE = FALSE 추가 및 인스턴스 재시작 + + +![이미지 650-0](images/p0650_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +651 +Step 2) REMOTE_OS_AUTHENTICATION 확인 +SQL> SHOW PARAMETER remote_os_authent; +SQL> SELECT value FROM v$parameter WHERE name = 'remote_os_authent'; +Oracle_HomeDirectory/admin/pfile/init.ora에서 remote_os_authent = FALSE 추가 및 인스턴스 재시작 +Step 3) REMOTE_OS_ROLES 확인 +SQL> SHOW PARAMETER remote_os_roles; +SQL> SELECT value FROM v$parameter WHERE name = 'remote_os_roles'; +Oracle_HomeDirectory/admin/pfile/init.ora에서 remote_os_roles = FALSE 추가 및 인스턴스 재시작 +※ 버전 9i 이후 버전은 SPFILE을 재생성해야 하므로, DBMS를 Shutdown시키면 spfile이 재생성 됨 + + +![이미지 651-0](images/p0651_img0.png) + + +--- + +| 한국인터넷진흥원 | +652 +D-20 +(하) +DBMS > 3. 옵션 관리 +인가되지 않은 Object Owner의 제한 +개요 +점검 내용 +Object Owner가 인가된 계정에게만 존재하는지 점검 +점검 목적 +Object Owner가 비인가자에게 존재하고 있는 경우 중요 데이터에 대한 무단 접근이 가능하여 +데이터의 일관성 및 무결성을 해치는 위험이 발생할 수 있으므로 비인가 된 계정의 Object Owner를 +제한하여 내부 및 외부의 보안 위협을 최소화하기 위함 +보안 위협 +Object Owner는 SYS, SYSTEM과 같은 데이터베이스 관리자 계정과 응용 프로그램의 관리자 +계정에만 존재하여야 하며, 일반 계정이 존재할 경우 공격자가 이를 이용하여 Object의 수정, 삭제가 +가능하므로 중요 정보의 유출 및 변경의 위험이 존재함 +참고 +※ Object(객체): ALTER, DELETE, EXECUTE, INDEX, INSERT, SELECT 등을 말함 +점검 대상 및 판단 기준 +대상 +Oracle DB, Altibase, Tibero, PostgreSQL 등 +판단 기준 +양호 : Object Owner가 SYS, SYSTEM, 관리자 계정 등으로 제한된 경우 +취약 : Object Owner가 일반 사용자에게도 존재하는 경우 +조치 방법 +Object Owner를 SYS, SYSTEM, 관리자 계정으로 제한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) 설정 확인(SQL*Plus) +SQL> SELECT DISTINCT owner FROM dba_objects WHERE owner NOT IN ('SYS', 'SYSTEM', 'MD +SYS', 'CTXSYS', 'ORDSYS', 'ORDPLUGINS', 'AURORA$JIS$UTILITY$', 'HR', 'ODM', 'ODM_MTR', ' +OE', 'APDBA', 'OLAPSYS', 'OSE$HTTP$ADMIN', 'OUTLN', 'LBACSYS', 'MTSYS', 'PM', 'PUBLIC', ' +QS', 'QS_ADM', 'QS_CB', 'QS_CBADM', 'DBSNMP', 'QS_CS', 'QS_ES', 'QS_OS', 'QS_WS', 'RMAN', 'S +H', 'WKSYS', 'WMSYS', 'XDB') AND owner NOT IN (SELECT grantee FROM ba_role_privs WHERE +granted_role = 'DBA'); +Step 2) 권한 취소 +SQL> REVOKE <권한> ON FROM user; + + +![이미지 652-0](images/p0652_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +653 +l Altibase +Step 1) 사용자에게 부여된 Object 권한 정보 확인 +SELECT * FROM system_.sys_grant_object_; +SELECT * FROM system_.sys_privileges_; +Step 2) 부여된 권한 ID를 확인하여 불필요한 권한 회수 +REVOKE <권한> ON FROM [소유자]; +[ ALTIBASE HDB 지원 Object 접근 권한 ] +l Tibero +Step 1) 데이터베이스 내 모든 스키마 Object 특권의 정보를 조회하여 인가받지 않은 Object 권한 소유자가 +있는지 확인 +SELECT * FROM dba_tbl_privs; +Step 2) 잘못된 Object 권한 소유자 발견 시 권한 회수 +l PostgreSQL +Step 1) Object 권한 정보 확인 +postgres=# SELECT DISTINCT relowner FROM pg_class WHERE relowner NOT IN (SELECT +usesysid FROM pg_user WHERE usesuper = TRUE); +Step 2) 잘못된 Object 권한 소유자 발견 시 권한 회수 + + +![이미지 653-0](images/p0653_img0.png) + + +![이미지 653-1](images/p0653_img1.png) + + +--- + +| 한국인터넷진흥원 | +654 +D-21 +(중) +DBMS > 3. 옵션 관리 +인가되지 않은 GRANT OPTION 사용 제한 +개요 +점검 내용 +일반 사용자에게 GRANT OPTION이 ROLE에 의하여 부여되어 있는지 점검 +점검 목적 +GRANT OPTION을 ROLE에 의해 설정하여 권한의 남용을 방지하고, 안정성을 확보하기 위함 +보안 위협 +일반 사용자에게 GRANT OPTION이 부여된 경우, 일반 사용자가 Object 소유자인 것과 같이 다른 +일반 사용자에게 권한을 부여할 수 있어 권한의 무분별한 확산으로 인한 중요 정보의 유출 등의 위험이 +존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, MySQL, Altibase, Tibero 등 +판단 기준 +양호 : WITH_GRANT_OPTION이 ROLE에 의하여 설정된 경우 +취약 : WITH_GRANT_OPTION이 ROLE에 의하여 설정되지 않은 경우 +조치 방법 +WITH_GRANT_OPTION이 ROLE에 의하여 설정되도록 변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB, Tibero +Step 1) 설정 확인(SQL*Plus) +SQL> SELECT grantee || ':' || owner || '.' || table_name FROM dba_tab_privs WHERE grantable = 'YES' +and owner NOT IN ('SYS', 'MDSYS', 'ORDPLUGINS', 'ORDSYS', 'SYSTEM', 'WMSYS', 'SDB', +'LBACSYS') AND grantee NOT IN (SELECT grantee FROM dba_role_privs WHERE granted_role = +'DBA') ORDER BY grantee; (계정이 나오는 경우 취약) +Step 2) 권한 회수, 재부여(SQL*Plus) +SQL> REVOKE role FROM user; +l +l MySQL +Step 1) 설정 확인 + + +![이미지 654-0](images/p0654_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +655 +SELECT user, grant_priv FROM mysql.user; (계정이 나오는 경우 취약) +Step 2) 권한 회수 +REVOKE <권한> ON <대상> FROM [계정명]; +l Altibase +Step 1) 사용자 계정을 조회하여 일반 사용자에게 with grant option이 부여(1)되어 있는 경우 취약 +SELECT * FROM system_.sys_users_; +SELECT * FROM system_.sys_grant_object_; +SELECT * FROM system_.sys_privileges_; +Step 2) 권한 회수 +REVOKE <권한> ON FROM [계정명]; + + +![이미지 655-0](images/p0655_img0.png) + + +--- + +| 한국인터넷진흥원 | +656 +D-22 +(하) +DBMS > 3. 옵션 관리 +데이터베이스의 자원 제한 기능을 TRUE로 설정 +개요 +점검 내용 +RESOURCE_LIMIT 값이 TRUE로 설정되어 있는지 점검 +점검 목적 +RESOURCE_LIMIT 값을 TRUE로 설정하여 자원의 과도한 사용을 방지하여 데이터베이스의 안정성을 +보장하고, 효율적인 자원 관리를 수행하기 위함 +보안 위협 +자원 제한 기능을 TRUE로 설정하지 않을 경우, 특정 사용자가 과도하게 많은 자원을 소비할 수 있으며 +이로 인해 시스템에 과부하가 발생할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB +판단 기준 +양호 : RESOURCE_LIMIT 설정이 TRUE로 되어있는 경우 +취약 : RESOURCE_LIMIT 설정이 FALSE로 되어있는 경우 +조치 방법 +RESOURCE_LIMIT 설정을 TRUE로 설정 변경 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) init.ora 설정 파일에 RESOURCE_LIMIT = TRUE 라인 추가 +(Oracle_HomeDirectory/admin/pfile/init.ora) +#vi /Oracle_HomeDirectory/admin/pfile/init.ora +Step 2) SQL*Plus에서 명령어로 설정 추가 및 확인 +SQL> ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; +SQL> SHOW PARAMETER RESOURCE_LIMIT; + + +![이미지 656-0](images/p0656_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +657 +D-23 +(상) +DBMS > 3. 옵션 관리 +xp_cmdshell 사용 제한 +개요 +점검 내용 +xp_cmdshell의 사용 여부 점검 +점검 목적 +불필요하게 활성화되어 있는 xp_cmdshell를 제한하여 공격자의 무단 접근 및 악성코드의 실행 위험을 +감소시키기 위함 +보안 위협 +해킹 툴에서 자주 이용되고 있으며, 권한 상승이나 데이터 유출 등의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +MSSQL +판단 기준 +양호 : xp_cmdshell이 비활성화 되어 있거나, 활성화 되어 있으면 다음의 조건을 모두 만족하는 경우 +1. public의 실행(Execute) 권한이 부여되어 있지 않은 경우 + +## 2. 서비스 계정(애플리케이션 연동)에 sysadmin 권한이 부여되어 있지 않은 경우 + +취약 : xp_cmdshell이 활성화 되어 있고, 양호의 조건을 만족하지 않는 경우 +조치 방법 +xp_cmdshell 설정 값을 0 또는 False로 설정 +조치 시 영향 +xp_cmdshell을 사용하여 운영체제 명령을 실행하던 서비스 및 스크립트가 동작하지 않을 수 있음 +점검 및 조치 사례 +l MSSQL +[ xp_cmdshell 사용이 불필요한 경우ㅣ +Step 1) SQL Server Management Studio > 개체 탐색기 > 컴퓨터 이름 우클릭 > 패싯 > 일반 +Step 2) XPCmdShellEnabled 값 확인 +2.1) Microsoft SQL Server Management Studio에서 확인 +[ 개체 탐색기를 통한 프로시저 확인 ] +2.2) 퀴리문으로 확인 + + +![이미지 657-0](images/p0657_img0.png) + + +![이미지 657-1](images/p0657_img1.png) + + +--- + +| 한국인터넷진흥원 | +658 +SELECT name, value FROM sys.configurations WHERE name = 'xp_cmdshell’; +※ value가 1이면 활성화, 0이면 비활성화 되어 있는 상태 +Step 3) XPCmdShellEnabled 값을 false로 설정 +3.1) Microsoft SQL Server Management Studio에서 설정 +SQL Server Management Studio > 개체 탐색기 > 컴퓨터 이름 우클릭 > 패싯 > 일반 +3.2) 퀴리문으로 설정 +EXEC sp_configure 'show advanced options', 1; GO +RECONFIGURE; GO +EXEC sp_configure 'xp_cmdshell', 1; GO +RECONFIGURE GO +[ xp_cmdshell 사용이 필요한 경우ㅣ +Step 1) xp_cmdshell의 public 실행 권한 제거 +1.1) Microsoft SQL Server Management Studio에서 제거 +SQL Server Management Studio > 개체 탐색기 > [컴퓨터 이름] > 데이터베이스 > 시스템 데이터베이스 > +master > 프로그래밍 기능 > 확장 저장 프로시저 > 시스템 확장 저장 프로시저 > sys.xp_cmdshell > 마우스 +우클릭 > 속성 > 사용권한에서 public에 대한 사용권한에 ‘실행’ 권한 제거 + + +![이미지 658-0](images/p0658_img0.png) + + +![이미지 658-1](images/p0658_img1.png) + + +![이미지 658-2](images/p0658_img2.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +659 +1.2) 퀴리문으로 public에 대한 실행 권한 제거 +REVOKE EXECUTE ON master.dbo.xp_cmdshell TO public +Step 1) 서비스 계정(애플리케이션 연동 등)의 sysadmin 권한 제거 +2.1) Microsoft SQL Server Management Studio에서 제거 +SQL Server Management Studio > 개체 탐색기 > [컴퓨터 이름] > 보안 > 로그인 > [각 계정 선택] > 마우스 +우클릭 > 속성 > 서버 역할에서 sysadmin 권한 제거 + + +![이미지 659-0](images/p0659_img0.png) + + +![이미지 659-1](images/p0659_img1.png) + + +--- + +| 한국인터넷진흥원 | +660 +2.2) 퀴리문으로 서비스 계정의 sysadmin 권한 제거 +- sysadmin 권한이 부여된 계정 확인 +EXEC sp_helpsrvrolemember 'sysadmin’ +- sysadmin 권한이 부여된 계정에 대해 권한 제거 +EXEC master..sp_dropsrvrolemember @loginame = N'<계정명>', @rolename = N'sysadmin' +※ + + +![이미지 660-0](images/p0660_img0.png) + + +![이미지 660-1](images/p0660_img1.png) + + +![이미지 660-2](images/p0660_img2.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +661 +D-24 +(상) +DBMS > 3. 옵션 관리 +Registry Procedure 권한 제한 +개요 +점검 내용 +Registry Procedure의 권한 설정 확인 및 점검 +점검 목적 +불필요한 Registry Procedure의 권한 설정을 확인하고 제한하여 시스템의 보안 및 안정성을 강화하기 +위함 +보안 위협 +불필요한 레지스트리 접근 권한이 제한되지 않는 경우, 공격자가 시스템을 변경하거나 악성 +소프트웨어를 설치하여 권한 상승, 데이터 유출, 시스템 장애를 발생시킬 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +MSSQL +판단 기준 +양호 : 제한이 필요한 시스템 확장 저장 프로시저들이 DBA 외 guest/public에게 부여되지 않은 경우 +취약 : 제한이 필요한 시스템 확장 저장 프로시저들이 DBA 외 guest/public에게 부여된 경우 +조치 방법 +guest/public에게 부여된 시스템 확장 저장 프로시저 권한 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l MSSQL +Step 1) SQL Server Management Studio > 개체 탐색기 > 데이터베이스 +Step 2) 시스템 데이터베이스 > master > 프로그래밍 기능 > 확장 저장 프로시저 > 시스템 확장 저장 프로시저 +[ 시스템 확장 저장 프로시저 확인 ] + + +![이미지 661-0](images/p0661_img0.png) + + +![이미지 661-1](images/p0661_img1.png) + + +--- + +| 한국인터넷진흥원 | +662 +Step 3) 각 시스템 확장 저장 프로시저 제한 > 마우스 우클릭 > 속성 +[ 시스템 확장 저장 프로시저 속성 확인 ] +Step 4) 사용 권한 > public 실행 권한 제거(체크 해제) +[ public 실행 권한 제거 ] +시스템 확장 저장 프로시저 제한 +sys.xp_readdmultistring +sys.xp_redeletekey +sys.xp_regdeletevalue +sys.xp_regenumvalues +sys.xp_regread +sys.xp_regremovemultistring +sys.xp_regwrite + + +![이미지 662-0](images/p0662_img0.png) + + +![이미지 662-1](images/p0662_img1.png) + + +![이미지 662-2](images/p0662_img2.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +663 +D-25 +(상) +DBMS > 4. 패치 관리 +주기적 보안 패치 및 벤더 권고 사항 적용 +개요 +점검 내용 +안전한 버전의 데이터베이스를 사용하고 있는지 점검 +점검 목적 +안전한 버전의 데이터베이스를 사용하여 알려진 보안 취약점으로 인한 공격을 차단하기 위함 +보안 위협 +안전하지 않은 버전을 사용할 경우, 알려진 보안 취약점을 통해 시스템에 침투하거나 데이터의 탈취, +악성코드 감염 및 서비스 중단 등의 보안 사고를 초래할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL, Cubrid 등 +판단 기준 +양호 : 보안 패치가 적용된 버전을 사용하는 경우 +취약 : 보안 패치가 적용되지 않는 버전을 사용하는 경우 +조치 방법 +보안 패치가 적용된 버전으로 업데이트 +조치 시 영향 +기존 시스템 운영 등에 사용되던 시스템 구성 요소와 호환성 문제가 발생할 수 있음 +점검 및 조치 사례 +l Oracle DB +Step 1) 시스템에서 제품 버전 현황 확인(SQL*Plus) +SQL> SELECT banner FROM v$version WHERE banner LIKE 'Oracle%'; +Step 2) Oracle 최신 버전 확인 +http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html +l MSSQL +Step 1) 시스템에서 제품 버전 현황 확인 +SELECT @@version +또는 +SELECT SERVERPROPERTY('productversion') AS ProductVersion, SERVERPROPERTY('productlev +el') AS ProductLevel, SERVERPROPERTY('edition') AS Edition; +Step 2) MSSQL 최신 버전 확인 +http://support.microsoft.com/kb/321185/en-uswnloads/index.html + + +![이미지 663-0](images/p0663_img0.png) + + +--- + +| 한국인터넷진흥원 | +664 +l MySQL +Step 1) 시스템에서 제품 버전 현황 확인 +mysql> SELECT VERSION(); +Step 2) MySQL 최신 버전 확인 +버그 패치된 릴리즈 사이트 http://downloads.mysql.com/archives.php +l Altibase +Step 1) 시스템에서 제품 버전 현황 확인 +SELECT PRODUCT_SIGNATURE FROM v$database; +Step 2) Altibase 최신 패치 노트 확인 +http://support.Altibase.com/kr/patch-note +Step 3) 패키지 인스톨러를 이용한 제품 패치 +- Altibase HDB 는 제품 패치를 위한 설치 파일이 따로 존재하지 않으며, 인스톨러를 시작할 때 설치 형 +태를 풀(full) 패키지 또는 패치로 선택할 수 있음 +- Altibase 고객지원서비스 포털 (http://support.Altibase.com/)을 방문하여 본인의 운영체제에 적합한 인 +스톨러를 다운로드 받을 수 있음 +l Tibero +Step 1) 시스템에서 제품 버전 현황 확인 +tbboot –v +Step 2) Tibero 최신 패치 노트 확인 +http://technet.tmaxsoft.com/ +※ Tibero 패치 정책 (2015.02) +매 분기 초 픽스셋 발표(년간 총 4회 배포 / fixset : hot fix 모음) +l PostgreSQL +Step 1) 시스템에서 제품 버전 현황 확인 +SELECT VERSION(); +Step 2) PostgreSQL 최신 버전 확인 + + +![이미지 664-0](images/p0664_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +665 +http://www.postgresql.org/support/security +l Cubrid +Step 1) 시스템에서 제품 버전 현황 확인 +cubrid_rel +Step 2) Cubrid 최신 버전 확인 +패치된 릴리즈 확인 및 다운로드 https://cubrid.com/release_note/ + + +![이미지 665-0](images/p0665_img0.png) + + +--- + +| 한국인터넷진흥원 | +666 +D-26 +(상) +DBMS > 4. 패치 관리 +데이터베이스의 접근, 변경, 삭제 등의 감사 기록이 기관의 감사 기록 정책에 적합하도록 설정 +개요 +점검 내용 +감사 기록 정책 설정이 기관 정책에 적합하게 설정되어 있는지 점검 +점검 목적 +데이터, 로그, 응용 프로그램에 대한 감사 기록 정책을 수립하고 적용하여 데이터베이스에 문제 발생 시 +원활하게 대응하기 위함 +보안 위협 +감사 기록 정책이 설정되어 있지 않을 경우, 데이터베이스에 문제 발생 시 원인을 규명할 수 있는 자료가 +존재하지 않아 이에 대한 대처 및 개선방안 수립이 어려워 장기적으로 심각한 보안 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Oracle DB, MSSQL, Altibase, Tibero, PostgreSQL 등 +판단 기준 +양호 : DBMS의 감사 로그 저장 정책이 수립되어 있으며, 정책 설정이 적용된 경우 +취약 : DBMS에 대한 감사 로그 저장을 하지 않거나, 정책 설정이 적용되지 않은 경우 +조치 방법 +DBMS에 대한 감사 로그 저장 정책 수립, 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l Oracle DB +Step 1) 데이터베이스 감사 기록 정책 및 백업 정책 수립 +Step 2) DBMS에 대한 기본적인 감사를 설정함 +아래와 같은 명령어를 통해 로그인 실패, 권한, Object 등에 대한 감사 설정 +SQL> connect sys as sysdba +Enter password: ******** +Connected. +SQL> ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE; +System altered. +SQL> shutdown immediate +Database closed. +Database dismounted. +ORACLE instance shut down. + + +![이미지 666-0](images/p0666_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +667 +SQL> startup +ORACLE instance started. +SQL> AUDIT SESSION WHENEVER NOT SUCCESSFUL; +Audit succeeded. +l MSSQL +데이터베이스 감사 기록 정책 및 백업 정책 수립 +● +MSSQL 2000 +DB 접근에 대한 보안 감사를 할 수 있도록 보안 감사 설정 +[SQL SERVER] > [등록정보] > [보안] > [감사수준] > '모두' 선택 +● +MSSQL 2005, 2008, 2012, 2016, 2019, 2022 +[SQL SERVER] > [마우스 우클릭] > [속성] > [보안] > [로그인 감사] 옵션 > '실패한 로그인과 성공한 로그인 +모두' 선택 +[ 로그인 감사 설정 ] +l Altibase +Step 1) AUDIT 구문으로 감사 정책을 설정 +Step 2) 정책 설정 후 감사 조건 적용 +ALTER SYSTEM STOP AUDIT; +ALTER SYSTEM START AUDIT; +ALTER SYSTEM RELOAD AUDIT; +※ Altibase HDB 서버 내에서 실행되고 있는 특정 구문 또는 모든 구문을 실시간으로 추적하고, 로그를 남기는 +것을 감사(Audit)라고 하며, SYS 사용자만이 이 구문을 사용해서 감사 조건을 설정할 수 있음 + + +![이미지 667-0](images/p0667_img0.png) + + +![이미지 667-1](images/p0667_img1.png) + + +--- + +| 한국인터넷진흥원 | +668 +l Tibero +Step 1) 감사 기능은 감사 대상에 따라 두 종류로 구분됨 + +## 1. 스키마 Object에 대한 감사 + +지정된 스키마 Object에 수행되는 모든 동작을 기록할 수 있음 + +## 2. 시스템 특권에 대한 감사 + +지정된 시스템 특권을 사용하는 모든 동작을 기록할 수 있음 +※ 감사를 설정하거나 해제하려면 다음 명령을 사용함 +- audit (감사 설정) +- noaudit (감사 해제) +[감사 설정] +Step 1) 스키마 Object에 대한 감사 +다른 사용자가 소유한 스키마의 Object 또는 디렉터리 Object를 감사하기 위해서는 AUDIT ANY 시스 +템 특권을 부여받아야 함 +예시) AUDIT DELETE ON t BY SESSION WHENEVER SUCCESSFUL; +→ 테이블에 수행되는 모든 DELETE 문이 성공하는 경우에만 감사 기록을 남김 +Step 2) 시스템 특권에 대한 감사 +시스템 특권을 감사하기 위해서는 AUDIT SYSTEM 시스템 특권을 부여받아야 함 +예시) AUDIT CREATE table BY Tibero; +→ Tibero라는 사용자가 테이블을 생성하려고 할 때 그것이 성공하든 실패하든 관계없이 감사 기록을 남김 +[감사 해제] +Step 1) 스키마 Object에 대한 감사 해제 +다른 사용자가 소유한 스키마의 Object 또는 디렉터리 Object의 감사를 해제하기 위해서는 AUDIT +ANY 시스템 특권을 부여받아야 함 +예시) NOAUDIT DELETE ON t BY SESSION WHENEVER SUCCESSFUL; +→ 테이블에 수행되는 모든 DELETE문에 대해 더 이상 감사 기록을 남기지 않음 +Step 2) 시스템 특권에 대한 감사 해제 +시스템 특권의 감사를 해제하기 위해서는 AUDIT SYSTEM 시스템 특권을 부여받아야 함 +예시) NOAUDIT CREATE table BY Tibero; +→ Tibero라는 사용자가 테이블을 생성할 때 더 이상 감사 기록을 남기지 않음 + + +![이미지 668-0](images/p0668_img0.png) + + +--- + +08. DBMS +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +669 +※ SYS 사용자 감사 설정 방법 +<$TB_SID.tip> 파일을 아래 내용처럼 입력 또는 수정 +예시) AUDIT_SYS_OPERATIONS=Y +AUDIT_FILE_DEST=/home/Tibero/audit/audit_trail.log +AUDIT_FILE_SIZE=10M +SYS사용자의 명령을 감사하도록 설정하면 수행한 모든 동작이 OS 파일에 기록되며 보안상의 이유로 데이터 +베이스에는 기록되지 않음 +l PostgreSQL +Step 1) Log 감사 설정 여부 확인 +postgres=# SHOW logging_collector; +logging_collector +------------------- +on (1 row) +Step 2) postgresql.conf 파일 내 logging_collector을 on으로설정 +logging_collector = on + + +![이미지 669-0](images/p0669_img0.png) + + +--- + +이동통신 +Chapter 09 + +## 1. 운영 관리················································································································672 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 670-0](images/p0670_img0.png) + + +--- + + +## 09. 이동통신 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +671 +01 +이동통신 취약점 분석 · 평가 항목 + +## 1. 운영 관리 + +점검항목 +항목 +중요도 +항목코드 +이동통신망 엣지 네트워크 운영 시 인터넷 연결 등을 고려한 보안기술을 적용 +상 +M-01 +이동통신망에서 가상화 기술 적용 시 계정 관리, 이상징후 탐지 등 보안 설정 또는 기술 +적용 +상 +M-02 +이동통신망 장비 및 SW 제조사 등과 보안 정책을 마련하여 운영 +상 +M-03 +이동통신망 장비 구축과 네트워크 설계 시 보안 내재화를 수행 +상 +M-04 + + +![이미지 671-0](images/p0671_img0.png) + + +![이미지 671-1](images/p0671_img1.png) + + +--- + +| 한국인터넷진흥원 | +672 +M-01 +(상) +이동통신> 1. 운영 관리 +이동통신망 엣지 네트워크 운영 시 인터넷 연결 등을 고려한 보안기술을 적용 +개요 +점검 내용 +이동통신망 관리 네트워크에 보안기술을 사용한 안전 분리 운영 여부 점검 +점검 목적 +이동통신망 종단에서 엣지 네트워크를 구성하여 인터넷과 통신할 경우, 5G 네트워크를 사용하는 단말 +사용자의 트래픽 네트워크와 엣지 네트워크를 관리하는 네트워크를 최대한 안전한 보안기술을 사용하여 +안전하게 분리하여 운영하기 위함 +보안 위협 +이동통신망 관리 네트워크에 보안기술이 적용되어 있지 않고 분리 운영하지 않으면 스니핑 공격 등으로 +내부 정보 유출 위험이 존재함 +참고 +※ 스니핑: 컴퓨터 네트워크상에 흘러 다니는 트래픽을 도청하는 행위 +상세 설명 +§ 엣지 네트워크의 서비스를 관리하기 위한 관리자 네트워크에 대한 접근 권한을 가진 사용자 수는 최소화하여 +야 하며, 접근 권한은 1인 1계정 원칙을 준수하고, 접속자, 접근 권한, 접근 목적, 접근 일시 및 주기를 사전에 문 +서로 정의해야 함 +§ 엣지 네트워크에 접근하기 위해서 사용자는 Token을 포함한 다중 인증을 통해서만 접속을 허용해야 하며, 접 +속 성공과 실패에 대한 모든 Log를 최소 1년 이상 저장되도록 설정해야 함 +§ 관리 네트워크에서 단말 사용자의 트래픽 네트워크로의 접속은 어떠한 경로로도 접근이 불가능하도록 상호 네 +트워크끼리의 연결 지점이 없어야 하며, 논리적 네트워크 분리, 상호 다른 네트워크 주소 체계 사용, 최대 비트 +의 암호화, 엣지 내의 저장 장치 분리 및 디스크 암호화 등으로 추가적인 보호조치를 시행해야 함 +§ 엣지 네트워크에 대한 관리자 계정으로 다수의 접근시도, 다수의 접근 실패, 브로드캐스팅 통신, 디스커버리 +통신 등은 실시간으로 보안담당자에게 통보되고 검토되어야 함 +§ 가능하다면 관리 네트워크에 대한 접근, 관리 네트워크 내에서의 작업, 관리 네트워크 내의 시스템 권한 및 활 +동에 대한 가시성을 확보하여 이상징후를 탐지할 수 있는 시스템을 구축해야 함 +§ 관리 네트워크에 대한 관리자와는 직무 분리가 명확한 보안담당자에 의해 주기적인 보안 검토와 감사를 시행 +해야 함 + + +![이미지 672-0](images/p0672_img0.png) + + +--- + + +## 09. 이동통신 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +673 +M-02 +(상) +이동통신> 1. 운영 관리 +이동통신망에서 가상화 기술 적용 시 계정 관리, 이상징후 탐지 등 보안 설정 또는 기술 적용 +개요 +점검 내용 +물리적 계층, 가상화 계층, 애플리케이션 계층 등의 수직적 계층에 적합한 보안기술 적용 여부 점검 +점검 목적 +물리적 계층, 가상화 계층, 애플리케이션 계층 등의 수직적 계층으로 구분될 시 각 계층에 적합한 +보안기술이 적용되어 있어야 하며 서로 다른 보안 계층의 보안기술 조절을 위해 수직적 보안(Vertical +Security)을 고려하기 위함 +보안 위협 +각 계층에 적합한 보안기술이 적용되어 있지 않으면 관리자 권한 탈취, 데이터 유출 등의 위험이 존재함 +참고 +- +상세 설명 +§ 가상화 플랫폼에서 컨트롤 영역과 사용자 데이터 영역별로 제공하는 3GPP 표준의 필수적인 보안 설정을 최대 +한 적용해야 함 +§ 플랫폼에서 제공하는 사용자 계정 및 권한 관리의 보안 정책을 사전에 정의된 계층별 권한에 적합하도록 사용 +자 또는 그룹별로 정의하여 부여해야 하며, 보안담당자는 필요에 따라 변경 절차를 모두 정의하고 적합하게 실 +행되도록 구현해야 함 +§ IAM 계정 관련해서 사전 정의된 변경 절차 이외의 변경 사항 발생 시, 알람 및 경고를 통해 보안담당자가 즉시 +인지할 수 있는 기능을 설정 도입해야 하며, 해당 변경 내용이 로그를 통해 기록되도록 주기적으로 검토되도록 +해야 함 +§ SDN/NFV 등이 플랫폼에서 기본적으로 제공하는 IAM에 통합되어야 하며 기술적 여건으로 플랫폼에 통합되 +지 않는 SDN/NFV 등은 로깅, 알림, 감사에 대한 기능을 추가로 적용하여 각 서비스 슬라이싱 별로 최소한의 +보안성을 유지해야 함 +§ 계층별 계층 침입 탐지, 권한 탈취 식별, 데이터 유출방지, 네트워크 슬라이싱 간 격리, 보호 및 모니터링, IoT +기기 접근통제, 비정상 행위 식별 등을 보안 관제 및 관리할 수 있어야 함 + + +![이미지 673-0](images/p0673_img0.png) + + +--- + +| 한국인터넷진흥원 | +674 +M-03 +(상) +이동통신> 1. 운영 관리 +이동통신망 장비 및 SW 제조사 등과 보안 정책을 마련하여 운영 +개요 +점검 내용 +일정 수준의 보안 요구 수준 및 운영 계획과 수명주기를 반영하여 보안 정책 운영 여부 점검 +점검 목적 +장비 도입 시점부터 SLA나 운영 방법, 개통이나 서비스 적용에 대한 상세 내역을 반영하여 운영 계획과 +제품에 대한 수명주기를 반영하고 보안 수준을 유지하기 위함 +보안 위협 +운영 계획과 수명주기를 반영하지 않고 보안 요구 수준이 낮은 환경으로 서비스 운영 시 잠재적 보안 +위협으로 인한 보안 사고 발생 위험이 존재함 +참고 +- +상세 설명 +§ 사용자 장치로부터 코어 네트워크까지의 종단 네트워크 경로에 대한 보안 수준이 유지되도록 네트워크 설계 +프로세스의 일부로서 초기에 고려되어 최저 보안 기준을 수립해야 함 +§ 장비를 도입하기 위한 네트워크 구축 디자인 시 전체 물리적인 도메인인 단말, 액세스 네트워크, 코어 네트워 +크에 걸쳐 보안 수준이 일정 수준으로 유지되도록 서비스 레벨 정의서(Service Level Agreement : SLA)를 작성 +해야 함 +§ 장비 도입 시 필수적인 보안 항목과 보안 수준을 개선할 수 있는 구현 가능 항목을 포함하여 보안 표준안을 정 +의하여야 하며, 개발 주기 동안 최신의 잠재적 위험을 개선할 수 있도록 피해 발생 회피와 피해 최소화를 고려 +해야 함 +§ 개발이 완료된 후 운영 환경에 적용하기 전에 보안 사전 테스트 및 검증을 통해 설계 시 예측하지 못한 운영상 +의 취약점을 식별하고 대응해야 하며 이러한 운영 환경에 대한 위험성 검토 및 보안 개선 활동은 구축이 완료 +된 이후에도 주기적으로 계획되고 실행되어야 함 +§ 네트워크 접속 시 보안 요구 수준이 낮은 종단 사용자 단말기와 IoT 장비 등은 제3의 서비스 사업자가 사용하 +는 API, IoT 운영 및 원격 관리에 대해서 추가적인 자동 보안 관제 장치 기술의 적용을 적극적으로 고려해야 함 + + +![이미지 674-0](images/p0674_img0.png) + + +--- + + +## 09. 이동통신 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +675 +M-04 +(상) +이동통신> 1. 운영 관리 +이동통신망 장비 구축과 네트워크 설계 시 보안 내재화를 수행 +개요 +점검 내용 +보안담당자 지정 및 보안 업무 인력이 개통 운영 참여 여부 점검 +점검 목적 +초기 장비 구축 전, 서비스 설계, 장비 선정, 아키텍처 구성, 디자인, 검토 심의 등 기타 모든 사항에 대한 +생명 주기 전반에 대하여 초기부터 보안담당자를 지정하고, 지정된 인력이 개통부터 운영까지 참여해야 +하며 관련 내용은 주기적으로 정보보호 책임자에게 보고 및 문서화 하여 보안 수준을 높이기 위함 +보안 위협 +보안담당자를 지정하지 않고, 보안 업무 인력이 개통 운영에 참여하지 않았을 경우 보안 요구 사항이 +미흡하거나, 취약한 시스템 설계 등으로 전체적인 보안 수준이 저하되어 보안 사고 발생 위험이 존재함 +참고 +- +상세 설명 +§ 서비스 시작 전 도입 대상 장비가 국제표준의 보안 요건을 준수하는지 서비스 제공자와 사전 검토 및 확인이 +필요함 +§ 장비 구축 시 보안담당자 입회하에 진행되어야 하며, 담당자는 기존 디바이스 관점의 보안이 아닌 종단 간 보 +안(End to End Security)의 관점으로 전 도메인에 대한 영향도를 분석해야 함 +§ 기반시설을 위한 네트워크 아키텍처 설계 시 산업용 제어 네트워크, 내부 업무용 네트워크, 인터넷 접근이 가 +능한 사용자 네트워크는 각각 분리된 개별 네트워크로 구성하거나 네트워크 슬라이싱 분리를 사용하여 각각 +독립적으로 분리하여 구성해야 함 +§ 엣지 네트워크에 대한 관리자 계정으로 다수의 접근시도, 다수의 접근 실패, 브로드 캐스팅 통신, 디스커버리 +통신 등은 실시간으로 보안담당자에게 통보되고 검토되어야 함 +§ 가능하다면 관리 네트워크에 대한 접근, 관리 네트워크 내에서의 작업, 관리 네트워크 내의 시스템 권한 및 활 +동에 대한 가시성을 확보하여 이상징후를 탐지할 수 있는 시스템을 구축해야 함 +§ 관리 네트워크에 대한 관리자와는 직무 분리가 명확한 보안담당자에 의해 주기적인 보안 검토와 감사를 시행 +해야 함 + + +![이미지 675-0](images/p0675_img0.png) + + +--- + +Web Application(웹) +Chapter 10 + +## 1. 코드 인젝션·············································································································679 + +2. SQL 인젝션············································································································693 + +## 3. 디렉터리 인덱싱······································································································700 + + +## 4. 에러 페이지 적용 미흡······························································································703 + + +## 5. 정보 누출················································································································708 + + +## 6. 크로스사이트 스크립팅·····························································································711 + + +## 7. 크로스사이트 요청 위조(CSRF) ················································································715 + +8. SSRF(Server Side Request Forgery) ···································································719 + +## 9. 약한 비밀번호 정책··································································································726 + + +## 10. 불충분한 인증 절차································································································729 + + +## 11. 불충분한 권한 검증································································································733 + + +## 12. 취약한 비밀번호 복구 절차·····················································································739 + + +## 13. 프로세스 검증 누락································································································739 + + +## 14. 악성 파일 업로드···································································································744 + + +## 15. 파일 다운로드········································································································753 + + +## 16. 불충분한 세션 관리································································································759 + + +## 17. 데이터 평문 전송···································································································766 + + +## 18. 쿠키 변조··············································································································769 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 676-0](images/p0676_img0.png) + + +--- + +Web Application(웹) +Chapter 10 + +## 19. 관리자 페이지 노출································································································775 + + +## 20. 자동화 공격···········································································································777 + + +## 21. 불필요한 Method 악용··························································································779 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 677-0](images/p0677_img0.png) + + +--- + +| 한국인터넷진흥원 | +678 +01 +Web Application(웹) 취약점 분석 · 평가 항목 +점검항목 +항목 +중요도 +항목코드 +코드 인젝션 (Code Injection) +상 +CI +SQL 인젝션 (SQL Injection) +상 +SI +디렉터리 인덱싱 +상 +DI +에러 페이지 적용 미흡 +상 +EP +정보 누출 +상 +IL +크로스사이트 스크립트 +상 +XS +크로스사이트 요청 위조(CSRF) +상 +CF +서버사이드 요청 위조(SSRF) +상 +SF +약한 비밀번호 정책 +상 +BF +불충분한 인증 절차 +상 +IA +불충분한 권한 검증 +상 +IN +취약한 비밀번호 복구 절차 +상 +PR +프로세스 검증 누락 +상 +PV +악성 파일 업로드 +상 +FU +파일 다운로드 +상 +FD +불충분한 세션 관리 +상 +IS +데이터 평문 전송 +상 +SN +쿠키 변조 +상 +CC +관리자 페이지 노출 +상 +AE +자동화 공격 +상 +AU +불필요한 Method 악용 +상 +WM + + +![이미지 678-0](images/p0678_img0.png) + + +![이미지 678-1](images/p0678_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +679 +CI +(상) +Web Application(웹) + +## 1. 코드 인젝션 (Code Injection) + +개요 +점검 내용 +웹 애플리케이션 내 다양한 인젝션 공격(LDAP, 운영체제 명령 실행, SSI, XPATH, XML, SSTI 인젝션 +등)에 대해 외부 입력값이 쿼리나 명령어로 삽입되어 비인가된 접근이나 코드 실행의 가능 유무 점검 +점검 목적 +허용되지 않은 코드 및 쿼리 실행을 방지하여 비인가된 접근, 데이터 유출, 시스템 변조, 악성 코드 실행 +등의 위협을 차단하여, 데이터 보호와 시스템 안정성을 확보하기 위함 +보안 위협 +해당 취약점이 존재하는 경우 비인가된 데이터 접근으로 민감 정보가 탈취될 수 있으며, 시스템 +명령어나 스크립트가 실행되어 서버 제어나 악성 코드 실행이 가능하고, 데이터 무결성이 훼손되어 +정보의 신뢰성이 떨어지며, 서비스 거부 공격(DoS)으로 시스템 가용성이 저하될 수 있음. 따라서 "|", +";", "`", "<" 등의 특수 문자에 대한 필터링 구현과 함께 입력값 검증, 화이트리스트 적용 등의 추가적인 +보안 조치가 필요함 +참고 +※ LDAP 인젝션: 입력값이 LDAP(Lightweight Directory Access Protocol) 쿼리에 삽입되어 +디렉터리 서비스 데이터에 대한 비인가된 조회, 수정, 삭제를 유발하는 공격 +※ 운영체제 명령 실행: 입력값이 시스템 명령어로 실행되어 서버의 운영체제 명령을 비인가로 +수행하거나 민감한 시스템 정보를 노출하는 공격 +※ SSI 인젝션: 입력값이 서버 사이드 인클루드(Server Side Include) 명령어로 실행되어 웹 +애플리케이션 서버에서 비인가된 스크립트 실행이나 파일 접근을 유발하는 공격 +※ XPath 인젝션: 입력값이 XPath 쿼리에 삽입되어 XML 데이터의 비인가된 조회, 추가, 삭제를 +유발하는 공격 +※ XXE 인젝션: 입력값이 XML 문서나 쿼리에 삽입되어 XML 데이터에 대한 비인가된 접근, 외부 +엔티티 참조(XML External Entities)를 통한 시스템 정보 유출을 유발하는 공격 +※ SSTI 인젝션: 입력값이 서버 사이드 템플릿 엔진에 삽입되어 템플릿 렌더링 과정에서 비인가된 코드 +실행이나 서버 내부 데이터 노출을 유발하는 공격 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 방화벽 +판단 기준 +양호 : 임의의 입력값에 대하여 철저한 검증이 이루어져, 허용되지 않은 값이 필터링되고 허용된 값만 +처리되는 경우 +취약 : 임의의 입력값에 대하여 검증 없이 명령이 실행되는 경우 +조치 방법 +화이트리스트 방식으로 쿼리를 허용된 값만 처리하고, 특수 문자에 대해 입력값 검증 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 679-0](images/p0679_img0.png) + + +--- + +| 한국인터넷진흥원 | +680 +점검 및 조치 사례 +l LDAP(Lightweght Directory Access Protocol) 인젝션 +- 점검 방법 +Step 1) 사용자 입력값에 대하여 변조된 LDAP 쿼리 삽입 후 실행 가능 여부 확인 +[ LDAP 쿼리 삽입 ] +- 조치 방법 + +## 1. 사용자 입력값을 화이트리스트로 지정하여 영문(a-z, A-Z)과 숫자(0-9)만을 허용 + + +## 2. 특수문자를 사용해야 하는 경우 입력값(DN에 사용되는 특수문자는 '\'를 붙여 이스케이프 처리, 필터에 사용 + +되는 특수문자는 '= + < > # \ , ; 앞뒤 공백' 등)에 대해서는 실행 명령이 아닌 일반문자로 인식되도록 처리 +3. DN과 필터에 사용되는 사용자 입력값에는 특수문자 제거 + +## 4. 웹 방화벽에 LDAP 관련 특수문자를 필터링하도록 룰셋 적용 + +※ 특수문자 필터링 예시 +구분 +필터링 예시 +변경 전 +\ += ++ +* +( +) +\0 +변경 후 +\5c +\3d +\2b +\2a +\28 +\29 +\00 +※ 필터링 대상 예시 +필터링 대상 예시 +' +" +- +# +( +) +< +> += +/* +*/ ++ +* +; +& +| +\ +\0 +: +` +% +user_tables +table_name +column_name +Syscolumns +union +select +insert +drop +update +and +or +If +join +substring +from +where +declare +substr +openrowset +xp_ +sysobject + + +![이미지 680-0](images/p0680_img0.png) + + +![이미지 680-1](images/p0680_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +681 +l 운영체제 명령실행 +- 점검 방법 +Step 1) 웹 애플리케이션 기능 내 전달되는 파라미터 값에 대하여 운영체제 명령어 삽입 후 실행 여부 확인 +[ 임의 운영체제 명령어 삽입 ] +- 조치 방법 + +## 1. 웹 애플리케이션 설계 시 운영체제로부터 명령어를 직접적으로 호출하지 않도록 구현하고, 언어/프레임워크 + +에서 제공하는 안전한 API 사용 + +## 2. 명령어를 직접 호출하는 기능이 필요한 경우에는, 데이터가 OS의 명령어 해석기에 전달되기 전에 화이트리스 + +트 기반으로 입력값을 검증/확인하도록 구현 + +## 3. 입력값에 대한 파라미터 데이터의 필터링 처리 + +- Unix/Linux : &, &&, |, ||, ;, `, $(), <, > 등 +- Windows : &, |, ^, % 등 + +## 4. 웹 서버 및 웹 애플리케이션 서버는 공개적으로 알려진 취약점이 제거된 상위 버전으로 업데이트 + +KISA 보호나라&KrCERT/CC +알림마당 > 보안공지(https://www.boho.or.kr/) + +## 5. 웹 방화벽에 모든 사용자 입력값을 대상으로 악용될 수 있는 특수문자 및 키워드 등에 대한 룰셋 적용 + +※ 특수문자 필터링 처리 문자 설명 + + +![이미지 681-0](images/p0681_img0.png) + + +![이미지 681-1](images/p0681_img1.png) + + +--- + +| 한국인터넷진흥원 | +682 +구분 +상세 설명 +& +첫 번째 명령어는 백그라운드에서 실행되며, 두 번째 명령어는 즉시 실행 +&& +첫 번째 명령어가 성공했을 때만 두 번째 명령어 실행 +| +두 명령어를 연결하여, 첫 번째 명령어의 출력을 두 번째 명령어의 입력으로 전달 +; +첫 번째 명령어 실행 후 성공여부와 무관하게 두 번째 명령어 실행 +` ` 또는 $() +백틱 또는 괄호 안에 있는 명령어를 실행하고 그 출력을 반환 +> 또는 >> +명령 실행 결과를 파일로 생성(덮어쓰기 또는 추가) +< +파일 내용을 명령어 입력으로 전달 +^ (Windows) +명령어 이스케이프/제어 문자로 사용 +% (Windows) +환경 변수 치환 +\ +이스케이프 문자 또는 뒤에 오는 특수문자를 무효화하거나 명령 연결 시 사용 + + +![이미지 682-0](images/p0682_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +683 +l SSI(Server Side Includes) 인젝션 +- 점검 방법 +Step 1) 사용자가 입력 가능한 파라미터 값에 를 삽입하여 전송 후 반 +환되는 페이지에 사이트의 홈 디렉터리가 표시되는지 확인 +[ Server Side Includes 지시어 삽입 및 취약점 유무 판단 ] +Step 2) 사용자가 입력 가능한 파라미터 값에 를 삽입하여 전송 후 반환되는 페이지에 +디렉터리의 파일 리스트가 표시되는지 확인 +[ 심화 공격 수행 ] +Step 3) HTTP 요청(Request) 헤더에 명령어를 삽입하여 실행되는지 확인 +GET / HTTP/1.0 +Referer: +User-Agent: +- 조치 방법 + +## 1. 화이트리스트 방식으로 사용자 입력에 대한 사용 가능한 문자들을 정의하여 정해진 문자를 제외한 나머지 모 + +든 문자들을 필터링 처리 + +## 2. 필터링 해야 하는 대상은 GET 질의 문자열, POST 데이터, 쿠키, URL, 그리고 일반적으로 브라우저와 웹 서버 + +가 주고받는 모든 데이터를 포함하며, 아래는 특수문자에 대한 엔티티 형태를 표시한 것임 + +## 3. 웹 서버의 SSI 기능을 사용하지 않거나, 웹 방화벽에 특수문자를 필터링하도록 룰셋 적용 + +구분 +필터링 예시 +변경 전 +< +> +" +( +) +# +& +변경 후 +< +> +" +( +) +# +& + + +![이미지 683-0](images/p0683_img0.png) + + +![이미지 683-1](images/p0683_img1.png) + + +![이미지 683-2](images/p0683_img2.png) + + +![이미지 683-3](images/p0683_img3.png) + + +--- + +| 한국인터넷진흥원 | +684 +l XPath 인젝션 +- 점검 방법 +Step 1) 취약점 존재 유무 판단을 위한 Xpath 쿼리(' or '1'='1, ' and 'a' = 'b 등) 삽입 +(※ 예시로 제시한 것으로, 웹 사이트 환경에 맞춰 점검해야 함) +[ XPath 구문 삽입 시도 및 취약점 유무 판단 ] +Step 2) 추가적인 쿼리 질의를 통하여 데이터 추출 등의 타당성 검토 +' or count(parent::*[position()=1])=0 or 'a'='b +1' or string-length(username)=[COUNT] and '1'='1... 등 +[ 심화 공격 수행 ] +- 조치 방법 +1. XPath 쿼리에 사용자가 값을 입력할 수 있는 경우, 입력값 검증을 통해 필요 문자만을 받아들이게 함. ( ) = ' [ ] +: , * / 등의 오동작를 유발하는 특수문자는 제한하며, 특정 특수문자만을 필터링하는 것이 아닌 허용된 문자 +이외의 모든 입력을 화이트리스트 방식으로 필터링 처리 +2. Xpath 및 XQuery의 쿼리 삽입 시 사용되는 특수문자를 필터링하도록 웹 방화벽 룰셋 적용 + + +![이미지 684-0](images/p0684_img0.png) + + +![이미지 684-1](images/p0684_img1.png) + + +![이미지 684-2](images/p0684_img2.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +685 +l XXE(XML External Entities) 인젝션 +- 점검 방법 +Step 1) 파일 업로드 페이지, API 엔드포인트, HTML Form 등 XML을 파싱하는 페이지 포인트 내 XML 객체 삽 +입 시도 (※ 예로 제시한 것으로, 웹 사이트 환경에 맞춰 점검해야 함) + + + +]> +&xxe; +[ 외부 Entity 객체 삽입 및 XXE 공격 수행 ] +- 조치 방법 + +## 1. 허용된 태그와 속성만 사용하도록 화이트리스트 방식을 이용한 입력값 검증 로직 구현 + + +## 2. 최근 언어별 XML 파서의 경우, 기본적으로 외부 엔티티 처리가 비활성화되어 있으나 소스코드 상에서 + +명시적으로 비활성화 처리하는 것이 안전한 방법 + +## 3. 의도하지 않은 오동작이 발생할 가능성이 존재하는 외부 엔티티 참조 명령어 및 주요 스키마 등에 대하여 웹 + +방화벽에 룰셋 적용 + + +![이미지 685-0](images/p0685_img0.png) + + +![이미지 685-1](images/p0685_img1.png) + + +![이미지 685-2](images/p0685_img2.png) + + +--- + +| 한국인터넷진흥원 | +686 +※ Java +Java DTD(외부 엔티티) 비활성화 예시 +... +// 공통 보안 설정 +dbf.setXIncludeAware(false); +... +if (mode == SecurityMode.FULL_SECURE) { +dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); +dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); +dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); +dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); +} else if (mode == SecurityMode.LIMITED_SECURE) { +// DTD를 완전히 비활성화할 수 없는 경우 +dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); +dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); +dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); +} +... + +※ ASP.NET +ASP.NET DTD(외부 엔티티) 비활성화 예시 +... +// XmlDocument 객체 생성 +XmlDocument doc = new XmlDocument(); +// XmlResolver를 null로 설정하여 외부 엔티티의 해석을 비활성화 +doc.XmlResolver = null +... +※ PHP 8.0 이전 +PHP 8.0 이전 DTD(외부 엔티티) 비활성화 예시 +... +libxml_disable_entity_loader(true); +... + + +![이미지 686-0](images/p0686_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +687 +※ PHP 8.0 이후 +§ libxml_disable_entity_loader() 함수가 더 이상 사용되지 않으며, 외부 엔티티 로드는 기본적으로 비활성화되 +어있지만, LIBXML_NOENT 플래그로 인하여 XML 파서가 외부 엔티티를 확장하도록 설정되어있는 경우 X +XE 취약점 발생 가능 +PHP 8.0 이후 DTD(외부 엔티티) 비활성화 예시 +... +// DOMDocument 인스턴스 생성 +$dom = new DOMDocument(); +// 외부 엔티티 비활성화 +$dom->loadXML($xmlfile, LIBXML_NONET); +... +l SSTI(Server Side Template Injection) +- 점검 방법 +Step 1) 사용자 입력값이 서버 템플릿 엔진 내에서 처리되는지 확인하기 위해 {{7*7}} 등의 수식 삽입 시도 +[ 템플릿 엔진 수식 삽입을 통한 취약점 유무 판단 ] + + +![이미지 687-0](images/p0687_img0.png) + + +![이미지 687-1](images/p0687_img1.png) + + +![이미지 687-2](images/p0687_img2.png) + + +--- + +| 한국인터넷진흥원 | +688 +Step 2) 상위 컨텍스트 및 객체 접근을 시도하여 원격 코드 실행의 가능 여부를 판별하기 위하여 페이로드 입력 +및 실행 유무 확인 +[ 심화 공격 수행 ] +- 조치 방법 + +## 1. 템플릿 언어에서 예약된 의미를 가지는 문자({ } < > % # @ 등)에 대하여 이스케이프 처리 + + +## 2. 템플릿 엔진의 안전 모드를 사용함으로써 템플릿 내에서 실행할 수 있는 명령을 제한하여 임의 코드 실행 방 + +지 + +## 3. 안전 모드 및 내장 함수를 활용하여 보안 조치를 하는 경우 엔진의 버전과 그 버전에서 지원하는 기능을 고려 + +하여 적절한 보안 패치 진행 + +## 4. 에러 메시지를 통해 사용된 템플릿 언어 및 관련 취약점에 대한 유의미한 정보를 제공할 가능성이 존재하므 + +로, 노출되는 에러 메시지를 제한 + +## 5. 템플릿 엔진 내 사용되는 특수문자를 필터링하도록 웹 방화벽 룰셋 적용 + + +※ Java +사용자 입력값 특수문자 인코딩 처리 예시 +... +name = org.apache.commons.text.StringEscapeUtils.escapeHtml4(name); // 사용자 입력값 인코딩 +// 사용자 입력값 이스케이프 처리 +public static String escapeSpecialCharacters(String input) { + + +![이미지 688-0](images/p0688_img0.png) + + +![이미지 688-1](images/p0688_img1.png) + + +![이미지 688-2](images/p0688_img2.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +689 +§ Velocity 템플릿 엔진에서 제공하는 '$esc.html'를 사용하여 사용자 입력을 HTML 인코딩 처리 +Java(Velocity) 안전한 템플릿 사용 예시 +... +#set($userInput = $esc.html($params.get("userInput"))) +

사용자 입력: $userInput

+... +§ FreeMarker 템플릿 엔진의 내장 함수인 '?html'를 사용하여 사용자 입력을 HTML 인코딩 처리 +Java(FreeMarker) 안전한 템플릿 사용 예시 +... +

사용자 입력: ${userInput?html}!

+... +※ ASP.NET +if (input == null) return null; +return input.replaceAll("([*{}\\[\\]<>%#@])", "\\\\$1"); +} +사용자 입력값 특수문자 인코딩 처리 예시 +// 사용자 입력값 인코딩 +... +private static readonly Dictionary HtmlEntities = new Dictionary { +{ '*', "*" }, +{ '{', "{" }, +{ '}', "}" }, +{ '[', "[" }, +{ ']', "]" }, +{ '<', "<" }, +{ '>', ">" }, +{ '%', "%" }, +{ '#', "#" }, +{ '@', "@" } +}; +public static string EscapeHtmlEntities(string input) { + + +![이미지 689-0](images/p0689_img0.png) + + +--- + +| 한국인터넷진흥원 | +690 +※ Python +if (input == null) return null; +StringBuilder escapedString = new StringBuilder(); +foreach (char ch in input) { +if (HtmlEntities.ContainsKey(ch)) { +escapedString.Append(HtmlEntities[ch]); +} else { +escapedString.Append(ch); +} +} +return escapedString.ToString(); +} +... +// 사용자 입력값 이스케이프 처리 +public static string EscapeSpecialCharacters(string input) { +if (input == null) return null; +return Regex.Replace(input, @"([*{}\[\]<>%#@])", @"\$1"); +} +... +사용자 입력값 특수문자 인코딩 처리 예시 +# 사용자 입력값 인코딩 +def escape_html_entities(input_string): +if input_string is None: +return None +... +html_entities = { +'*': '*', +'{': '{', +'}': '}', +'[': '[', +']': ']', +'<': '<', +'>': '>', +'%': '%', +'#': '#', + + +![이미지 690-0](images/p0690_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +691 +§ 사용자 입력을 직접 템플릿에 삽입하는 방식은 SSTI 취약점에 노출될 수 있으므로 사용자 입력을 템플릿 변수 +로 전달하는 방식을 사용하여 안전하게 처리 +Python(jinja2) 안전한 템플릿 사용 예시 +... +template = "userinput : {{ userinput }}" +return render_template_string(template, userinput=param) +... +※ PHP +'@': '@', +... +} +return ''.join(html_entities.get(char, char) for char in input_string) +... +# 사용자 입력값 이스케이프 처리 +def escape_special_characters(input_string): +if input_string is None: +return None +return re.sub(r'([*{}\[\]<>%#@])', r'\\\1', input_string) +... +PHP 사용자 입력값 특수문자 인코딩 처리 예시 +... +function escape_html_entities($input_string) { +if ($input_string === null) { +return null; +} +$html_entities = [ +'*' => '*', +'{' => '{', +'}' => '}', +'[' => '[', +'<' => '<', +'>' => '>', +'%' => '%', + + +![이미지 691-0](images/p0691_img0.png) + + +--- + +| 한국인터넷진흥원 | +692 +... +]; +return strtr($input_string, $html_entities); +} +// 특수 문자 앞에 백슬래시를 추가하여 이스케이프 처리 +function escape_special_characters($input_string) { +if ($input_string === null) { +return null; +} +return preg_replace('/([*{}\[\]<>%#@])/', '\\\\$1', $input_string); +} +... +// htmlspecialchars 함수를 이용하여 사용자 입력값을 HTML 인코딩 +$userInput = htmlspecialchars($userInput ENT_QUOTES, 'UTF-8'); +... + + +![이미지 692-0](images/p0692_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +693 +SI +(상) +Web Application(웹) +2. SQL 인젝션 (SQL Injection) +개요 +점검 내용 +웹 애플리케이션 내 입력값이 SQL 쿼리에 삽입되어 비인가된 데이터베이스 접근과 조작 가능 여부 점검 +점검 목적 +웹 애플리케이션 내 SQL문으로 해석될 수 있는 입력값 허용을 차단하고 운영 중인 데이터베이스에 대한 +비인가된 접근 및 조작을 방지하여, 데이터 무결성과 보안성을 확보하기 위함 +보안 위협 +해당 취약점이 존재하는 경우, 입력값이 SQL 쿼리에 삽입되어 데이터베이스에 비인가된 접근을 +허용하며, 공격자는 민감 데이터의 조회, 수정, 삭제를 포함한 다양한 악의적인 행위가 가능하므로 +입력값에 대한 특수문자 필터링을 구현해야함 +참고 +※ SQL 인젝션: 사용자의 입력값으로 웹 사이트 SQL 쿼리가 완성되는 약점을 이용하여, 입력값을 +변조해 비정상적인 SQL 쿼리를 조합하거나 실행하는 공격. 이는 개발자가 의도하지 않은 SQL문을 +실행하게 하여 데이터베이스를 비정상적으로 조작하고, 민감한 데이터를 조회, 수정, 삭제할 수 있는 +공격 +※ SQL 인젝션 공격 관련 코드 검토 필요 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 방화벽 +판단 기준 +양호 : 임의로 작성된 SQL 쿼리 입력에 대한 적절한 검증을 통해 비정상적인 쿼리가 실행되지 않도록 +하는 경우 +취약 : 임의로 작성된 SQL 쿼리 입력에 대한 검증이 이루어지지 않아 비정상적인 쿼리가 실행되는 경우 +조치 방법 +소스코드 내 SQL 쿼리를 입력값으로 받는 함수나 코드를 사용할 경우, 임의의 SQL 쿼리 입력에 대한 +검증 로직을 구현하여 서버에 검증되지 않는 SQL 쿼리요청 시 에러 페이지가 아닌 정상 페이지가 +반환되도록 필터링 처리하고 웹방화벽에 SQL 인젝션 관련 룰셋을 적용하여 SQL 인젝션 공격을 차단함 +조치 시 영향 +웹 서비스에서 사용하고 있는 명령어 및 특수문자가 필터링 되어 장애가 발생 될 수 있어 사전 영향도 및 +코드 분석이 필요 + + +![이미지 693-0](images/p0693_img0.png) + + +--- + +| 한국인터넷진흥원 | +694 +점검 및 조치 사례 +- 점검 방법 +Step 1) 사용자 입력값 조건에 따른 참, 거짓 SQL 쿼리를 삽입하여, 응답의 변화(응답시간, 에러메시지, 응답 내 +용 등) 유무 확인 +[ DB 쿼리 삽입을 통한 취약점 유무 판단 ] +Step 2) 인증 페이지(로그인, 비밀번호 검증 등) 내 참이 되는 SQL쿼리를 삽입하여 우회 유무 확인 +[ 인증 페이지 내 DB 쿼리 삽입을 통한 인증 우회 확인 ] +- 조치 방법 +1. SQL 쿼리 내 사용되는 문자열의 유효성을 검증하는 로직 구현 + +## 2. 아래와 같은 특수문자에 대하여 사용자 입력값으로 지정 금지 + +문자 +상세 설명 +' +문자 데이터 구분 기호 +; +쿼리 구분 기호 +--, # +해당 라인 주석 구분 기호 +/* */ +/* 와 */ 사이 구문 주석 +3. Prepared Statements를 사용하여 사용자 입력과 SQL 쿼리를 분리하여 처리 + +## 4. 시스템에서 제공하는 에러 메시지 및 DBMS에서 제공하는 에러코드가 노출되지 않도록 예외처리 + + +## 5. 웹 방화벽(WAF)에 대하여 SQL Injection 관련 룰셋 추가 + + + +![이미지 694-0](images/p0694_img0.png) + + +![이미지 694-1](images/p0694_img1.png) + + +![이미지 694-2](images/p0694_img2.png) + + +![이미지 694-3](images/p0694_img3.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +695 +※ Java +SQL 키워드 및 특수문자 필터링 로직 예시 +... +public static String sanitize(String input) { +if (input == null) { +return null; +} +// 특수문자 및 키워드들을 공백으로 치환 +String[] sqlKeywords = {"SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"}; +String pattern = "(?i)\\b(" + String.join("|", sqlKeywords) + ")\\b|['\"\\\\;()<>#/*!]"; +Pattern regex = Pattern.compile(pattern + "|--"); +Matcher matcher = regex.matcher(input); +return matcher.replaceAll(" "); +} +... +String sanitizedInput = sanitize(userInput); +Prepared Statement 사용 로직 예시 +... +String sql = "SELECT * FROM users WHERE username = ?"; +PreparedStatement preparedStatement = connection.prepareStatement(sql); +preparedStatement.setString(1, userInput); +... +ResultSet resultSet = preparedStatement.executeQuery(); +... +§ JDBC 표준 예외 클래스를 사용하여 다양한 데이터베이스 시스템에 일관된 방식으로 예외처리 +적절한 예외 처리 예시 +try { +// 데이터베이스 작업 +} catch (SQLException e) { +// 브라우저에 일반적인 오류 메시지를 반환 +e.printStackTrace(); +System.out.println("An error occurred. Please try again later."); +} +§ 사용자 입력을 직접 쿼리에 포함시킬 시 취약점이 발생하므로, 파라미터 바인딩을 사용하여 구현 + + +![이미지 695-0](images/p0695_img0.png) + + +--- + +| 한국인터넷진흥원 | +696 +§ 파라미터 바인딩 : 쿼리를 실행할 때, 쿼리 문자열과 사용자 입력값(파라미터)을 분리하여 처리하는 기법. 데 +이터베이스는 쿼리 문자열을 미리 파싱하고 컴파일하며, 쿼리 실행 시점에 파싱된 쿼리 문자열에 파라미터를 +바인딩하여 데이터를 전달하므로 데이터베이스는 파라미터를 데이터로만 인식함 +ORM(JPA-Hibernate) 파라미터 바인딩 사용 예시 +public class ItemService { +@PersistenceContext +private EntityManager em; +public List findItemsByUserInput(String userInput) { + +// JPQL을 사용하여 SQL Injection 방지 +String jpql = "SELECT i FROM Item i WHERE i.itemID > :userInput"; +Query query = em.createQuery(jpql, Item.class); +query.setParameter("userInput", userInput); +return query.getResultList(); +} +} +§ SQL Mapper(Mybatis) 내 '${}' 구문의 경우 사용자 입력값이 SQL 구문으로 해석되기 때문에 파라미터 바인딩 +('#{}')을 사용하여 구현 +SQL Mapper(Mybatis) 파라미터 바인딩 사용 예시 +... + + +INSERT INTO STUDENTS (NUM, NAME, AGE, GRADE) +VALUES (#{num}, #{name}, #{age}, #{grade}) + + + +DELETE FROM STUDENTS +WHERE NUM = #{num} + +... + + +![이미지 696-0](images/p0696_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +697 +※ ASP.NET +§ 정규표현식을 활용하여 SQL 키워드 및 특수문자에 대하여 필터링 로직 구현 +SQL 키워드 및 특수문자 필터링 로직 예시 +public static string Sanitize(string input) +{ +if (input == null) +{ +return null; +} +// 특수문자들을 공백으로 치환 +string[] sqlKeywords = { "SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--" }; +string pattern = @"(?i)\b(" + string.Join("|", sqlKeywords) + @")\b|['""\\;()<>#/!*]"; +return Regex.Replace(input, pattern, " "); +} +string sanitizedInput = Sanitize(userInput); +... +Prepared Statement 사용 로직 예시 +string strQry = "SELECT count(*) FROM users WHERE userName = @username +AND Password = @password"; +using (SqlCommand cmd = new SqlCommand(strQry, cnx)) +{ +cmd.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar, 50) { +Value = txtUser.Text }); +cmd.Parameters.Add(new SqlParameter("@password", SqlDbType.VarChar, 50) { +Value = txtPassword.Text }); +int intRecs = (int)cmd.ExecuteScalar(); +if (intRecs > 0) +{ +FormsAuthentication.RedirectFromLoginPage(txtUser.Text, false); +} +else +{ +lblMsg.Text = "Login attempt failed."; +} +} + + +![이미지 697-0](images/p0697_img0.png) + + +--- + +| 한국인터넷진흥원 | +698 +적절한 에러 예외처리 로직 예시 +catch (SqlException ex) +{ +Logger.LogError(ex); // 로그 상세 에러 기록 +// 사용자에게 일반적인 메시지 표시 +lblErrorMessage.Text = "데이터베이스 작업 중 오류가 발생했습니다."; +} + +※ ASP +적절한 에러 예외처리 예시 +On Error Resume Next ' 에러 발생 시 계속 실행 +... +If Err.Number <> 0 Then +' 에러가 발생한 경우 +Err.Clear ' 에러 삭제 처리 +%> + +<% +response.end +End If +§ SQL Server의 xp_cmdshell 기능의 경우 SQL Server 2005 버전부터 기본적으로 비활성화 되어있음 +xp_cmdshell 비활성화 처리 예시 +sp_configure 'show advanced options', 1; // SQL Server의 고급 옵션 활성화 +GO +RECONFIGURE; +GO +sp_configure 'xp_cmdshell', 0; // xp_cmdshell 비활성화 +GO +RECONFIGURE; +GO + + +![이미지 698-0](images/p0698_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +699 +※ PHP +§ ereg_replace, eregi_replace 의 경우, PHP 5.3.0 이후 삭제되었으며, addslashes/magic_quotes_gpc의 경우 멀티 +바이트 문자 입력 시 우회의 가능성이 존재하므로 preg_replace를 이용하여 구현 +SQL 키워드 및 특수문자 필터링 로직 예시 +function sanitize($input) { +if ($input === null) { +return null; +} +// 특수문자들을 공백으로 치환 +$sqlKeywords = ["SELECT", "UNION", "INSERT", "UPDATE", "DELETE", "DROP", "--"]; +$pattern = "/(?i)\\b(" . implode("|", $sqlKeywords) . ")\\b|['\"\\\\;()<>#\/!*]/"; +return preg_replace($pattern, " ", $input); +} +$sanitizedInput = sanitize($userInput); +Prepared Statement 사용 로직 예시 +... +$sql = "SELECT * FROM users WHERE username = ?"; +$stmt = $pdo->prepare($sql); +$stmt->execute([$userInput]); +... +$results = $stmt->fetchAll(PDO::FETCH_ASSOC); +... +적절한 에러 예외처리 예시 +... +try { +// 데이터베이스 작업 +} catch (PDOException $e) { // PDO 확장의 표준 예외 클래스를 사용하여 예외처리 +// 브라우저에 일반적인 오류 메시지를 반환 +error_log($e->getMessage()); +echo 'SQL Exception'; +} +... + + +![이미지 699-0](images/p0699_img0.png) + + +--- + +| 한국인터넷진흥원 | +700 +DI +(상) +Web Application(웹) + +## 3. 디렉터리 인덱싱 + +개요 +점검 내용 +웹 애플리케이션 서버 내 디렉터리 인덱싱 취약점 존재 여부 점검 +점검 목적 +디렉터리 인덱싱 취약점을 제거하여 특정 디렉터리 내 불필요한 파일 정보의 노출 및 비인가자가 민감한 +파일에 대한 접근을 차단 +보안 위협 +해당 취약점이 존재할 경우, 브라우저를 통해 특정 디렉터리 내 파일 리스트가 노출되어 응용 시스템의 +구조가 외부에 공개될 수 있으며, 민감한 정보가 포함된 설정 파일 등이 노출될 경우 보안상 심각한 +위험을 초래할 수 있음 +참고 +※ 디렉터리 인덱싱 취약점: 특정 디렉터리의 초기 페이지(index.html, home.html, default.asp 등) +파일이 존재하지 않을 때 디렉터리 목록을 출력하는 취약점 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 서버 +판단 기준 +양호 : 디렉터리 파일 리스트가 노출되지 않는 경우 +취약 : 디렉터리 파일 리스트가 노출되는 경우 +조치 방법 +웹 애플리케이션 서버 설정을 변경하여 디렉터리 파일 리스트가 노출되지 않도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) URL 경로 중 확인하고자 하는 디렉터리 경로에 대하여 주소창에 입력하여 인덱싱 여부 확인 +[ 디렉터리 인덱싱 취약점 유무 판단 ] + + +![이미지 700-0](images/p0700_img0.png) + + +![이미지 700-1](images/p0700_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +701 +- 조치 방법 +l Apache +§ httpd.conf 파일 내 Indexes 옵션 제거 후 서버 재기동 +Apache 서버 설정 예시 + +Options Indexes FollowSymLinks +# Indexes 옵션 제거 +Options FollowSymLinks + + +l Tomcat +§ web.xml 파일 내 아래 지시자 수정 후 서버 재기동 +Tomcat 서버 설정 예시 + +listings +false + + +l IIS (6.0 이하) +§ 인터넷 정보 서비스 → 등록 정보 → 홈 디렉터리 → 디렉터리 검색 해제 +[ 디렉터리 검색 옵션 해제 설정 ] + + +![이미지 701-0](images/p0701_img0.png) + + +![이미지 701-1](images/p0701_img1.png) + + +--- + +| 한국인터넷진흥원 | +702 +l IIS (7.0 이상) +§ IIS 관리자 → 디렉터리 검색 → 사용 안 함 +[ 디렉터리 검색 기능 사용 안함 설정 ] +l Nginx +§ /etc/nginx/sites-available/default 등 파일 내 아래 지시자 수정 후 서버 재기동 +Nginx 서버 설정 예시 +... +server { +location / { +autoindex off; +} +} +... + + +![이미지 702-0](images/p0702_img0.png) + + +![이미지 702-1](images/p0702_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +703 +EP +(상) +Web Application(웹) + +## 4. 에러 페이지 적용 미흡 + +개요 +점검 내용 +웹 애플리케이션 에러 페이지 내 불필요한 정보 노출 여부 점검 +점검 목적 +사용자 정의 에러 페이지를 설정하여 기본 서버 에러 페이지 내 불필요한 정보(서버 버전 정보, 시스템 +절대 경로, 스택 트레이스 등)의 제공을 차단하기 위함 +보안 위협 +에러 페이지 내 서버 및 응용 시스템의 상세한 정보를 포함한 경우, 시스템 구조와 스택 트레이스, +데이터베이스 쿼리 등 민감한 정보를 노출시켜 공격 벡터로 악용할 가능성 존재 +참고 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 서버, 웹 방화벽 +판단 기준 +양호 : 에러 발생 시 자체 정의 에러 페이지를 출력하여 과도한 정보가 노출되지 않는 경우 +취약 : 에러 발생 시 기본 에러 페이지가 출력되며, 해당 페이지에 불필요한 정보(서버 버전 정보, 시스템 +경로, 스택 트레이스 등)가 노출되는 경우 +조치 방법 +웹 애플리케이션 서버 내 사용자 정의 에러 페이지를 적용함으로써 불필요한 정보 노출을 방지 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 에러 유도 시 에러 페이지 내 불필요한 정보(서버 버전 정보, 시스템 절대 경로, 스택 트레이스 등)가 노 +출되는지 확인 +[ 에러 페이지 내 서버 버전 정보 노출 ] + + +![이미지 703-0](images/p0703_img0.png) + + +![이미지 703-1](images/p0703_img1.png) + + +--- + +| 한국인터넷진흥원 | +704 +- 조치 방법 +l Apache +§ apache2.conf 또는 httpd.conf 파일 내 아래 지시자 추가 후 서버 재기동 +응답 헤더 내 서버 버전 정보 제거 예시 +... +ServerTokens Prod +ServerSignature Off +... +사용자 에러 페이지 정의 예시 +# 예) ErrorDocument 404 /main/error.html +ErrorDocument 404 [에러 페이지 경로] +ErrorDocument 405 [에러 페이지 경로] +# 추가적으로 에러 코드 등록하여 설정 +... +l Tomcat +§ server.xml 파일 내 아래 지시자 추가 후 서버 재기동 +응답 헤더 내 서버 버전 정보 제거 예시 +# server.xml 파일 내 요소에 아래 지시자 추가 후 서버 재기동 + +개발용 리포트 비활성화 예시 +# server.xml 파일 내 아래 지시자 추가 후 서버 재기동 + + + + +![이미지 704-0](images/p0704_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +705 +에러 페이지 매핑 예시 + + +404 +/errors/404 + + +500 +/errors/500 + + + +java.lang.Exception +/errors/500 + +l Nginx +§ nginx.conf 파일 내 아래 지시자 추가 후 서버 재기동 +응답 헤더 내 서버 버전 정보 제거 예시 +... +http { +server_tokens off; +... +} +... +§ /etc/nginx/sites-available/default 파일 내 아래 지시자 추가 후 서버 재기동 +사용자 에러 페이지 정의 예시 +server { +listen 80; +... +# 기타 설정 +... + + +![이미지 705-0](images/p0705_img0.png) + + +--- + +| 한국인터넷진흥원 | +706 +l IIS (6.0 이하) +※ 응답 헤더 +§ Microsoft사의 URLScan 3.1 도구 지원 종료로 인한 서버 버전 제거 제한 +※ 에러 페이지 +§ 인터넷 정보 서비스 → 등록 정보 → 사용자 정의 오류 → 등록 정보 편집 → 별도 에러 페이지 지정 +[ 사용자 정의 에러 페이지 설정 ] +error_page 400 401 402 405 /custom_4xx.html; +error_page 404 /custom_404.html; +error_page 500 502 503 504 /custom_5xx.html; +location = /custom_404.html { +root /var/www/html; +internal; +} +location = /custom_4xx.html { +root /var/www/html; +internal; +} +location = /custom_5xx.html { +root /var/www/html; +internal; +} +... +} + + +![이미지 706-0](images/p0706_img0.png) + + +![이미지 706-1](images/p0706_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +707 +l IIS (7.0 이상) +※ 응답 헤더 +§ URL Rewrite 모듈 설치 → IIS 관리자 → URL 재작성 → 서버 변수 보기 → 추가 → RESPONSE_SERVER +변수 추가 → 규칙 추가 → 아웃바운드 규칙(빈 규칙) → 규칙 추가 → 적용 +§ URL Rewrite 모듈 (https://www.iis.net/downloads/microsoft/url-rewrite) +[ 응답 헤더 내 서버 버전 정보 제거 ] +※ 에러 페이지 +§ IIS 관리자 → 오류 페이지 → 기능 설정 편집 → 사용자 지정 오류 페이지 +[ 사용자 정의 에러 페이지 설정 ] + + +![이미지 707-0](images/p0707_img0.png) + + +![이미지 707-1](images/p0707_img1.png) + + +![이미지 707-2](images/p0707_img2.png) + + +--- + +| 한국인터넷진흥원 | +708 +IL +(상) +Web Application(웹) + +## 5. 정보 누출 + +개요 +점검 내용 +웹 애플리케이션 내 중요 정보(개인정보, 금융 정보 등) 및 불필요한 정보(주석 내 디버깅 정보, 초기 +샘플페이지, 백업 파일 등)의 노출 여부 점검 +점검 목적 +웹 애플리케이션 내 중요 정보(개인정보, 금융 정보 등)에 대해 마스킹 처리를 하고, 서비스 제공 중 +불필요한 정보(주석 내 디버깅 정보, 초기 샘플 페이지, 백업 파일 등)를 삭제하여 민감한 정보와 내부 +시스템 정보의 노출을 차단하기 위함 +보안 위협 +웹 애플리케이션 운영 시 중요 정보(개인정보, 금융 정보 등)가 평문으로 노출될 경우, 개인정보 유출, +신원 도용, 피싱 공격 등의 위협이 발생할 수 있으며, 서버나 WAS의 초기 샘플 페이지, 백업 파일, 압축 +파일 등이 노출될 경우, 공격자가 시스템 구조를 파악하고 보안 설정 및 접근 제어 정책을 유출하여 2차 +공격에 활용할 수 있음 +참고 +※ 중요 정보: 고유식별정보(주민등록번호), 비밀번호(로그인 비밀번호, 계좌 비밀번호, 공인인증서 +비밀번호 등), 신용정보(보안카드번호, 카드번호 등) 등 +※ 중요 정보 노출(일회성 노출)이 반드시 필요한 서비스의 경우 본인인증 절차 적용 시 예외 처리 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 애플리케이션 서버 +판단 기준 +양호 : 중요 정보가 마스킹 처리되어 있으며, 서비스 운영 및 서버 사이드의 구조를 파악할 수 있는 +불필요한 정보가 노출되지 않는 경우 +취약 : 중요 정보가 평문으로 노출되거나, 서비스 운영 및 서버 사이드의 구조를 파악할 수 있는 과도한 +정보가 노출되는 경우 +조치 방법 +중요 정보를 마스킹 처리하고, 샘플 페이지나 불필요한 정보를 제공하는 요소를 삭제하여 과도한 정보 +노출을 최소화함으로써 민감 정보와 내부 시스템 구조의 노출을 방지함 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 708-0](images/p0708_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +709 +점검 및 조치 사례 +l Apache +- 점검 방법 +Step 1) 웹 애플리케이션 내 중요 정보(개인정보, 금융정보 등)의 평문 노출 여부 점검 +[ 페이지 내 중요 정보 평문 노출 ] +Step 2) 서버나 WAS의 초기 샘플 페이지, 백업파일 등 불필요한 정보의 노출 유무 점검 +[ 초기 샘플 페이지 내 중요 정보 노출 ] + + +![이미지 709-0](images/p0709_img0.png) + + +![이미지 709-1](images/p0709_img1.png) + + +![이미지 709-2](images/p0709_img2.png) + + +![이미지 709-3](images/p0709_img3.png) + + +--- + +| 한국인터넷진흥원 | +710 +Step 3) HTML 소스코드 내 중요 정보가 코드 및 주석을 통한 노출 여부 점검 +[ HTML 주석 내 중요 정보 노출 ] +- 조치 방법 +1. robots.txt, web.config, nginx.conf 파일 작성을 통해 검색 차단할 디렉터리, 확장자, 페이지 등을 지정할 수 +있으며 HTML 태그 내에 META 태그를 추가하여 검색엔진의 인덱싱을 차단함 + +## 2. 웹 디렉터리 내 삭제해야 할 파일 태그 확장자에 포함된 백업 파일을 모두 삭제하고, *.txt 확장자와 같이 작업 + +중 생성된 일반 텍스트 파일이나 이미지 파일 등 불필요한 파일에 대하여 제거 + +## 3. 웹 서버 설정 후 초기 페이지와 초기 디렉터리 및 배너를 삭제하여 Banner Grab에 의한 시스템 정보 유출을 + +차단함 + +## 4. 아래 개인정보 마스킹 기준 예시를 참고하여 개인정보 항목의 일부를 마스킹해야 함 + + +## 5. 개발 중 작성된 주석 문자, 디버그 정보, 시스템 구조 관련 정보 등이 외부에 노출되지 않게 제거 + +※ 삭제 권고 파일 확장자 예시 +삭제 권고 확장자 예시 +*.bak +*.backup +*.org +*.old +*.zip +*.log +*.sql +*.new +*.txt +*.tmp +*.temp +*.! +※ 개인정보 마스킹 기준 예시 (참고 문서 : 개인정보보호위원회_홈페이지 개인정보 노출방지 안내서) +개인정보 +설명 +예시 +성명 +성명 중 한 글자 이상 +홍*동 +주민등록번호 +뒤에서부터 6자리 +901231-1****** +여권번호 +뒤에서부터 4자리 +12345**** +연락처 +전화번호 또는 휴대폰 뒤 4자리 +010-1234-**** +카드번호 +7번째에서 12번째자리 +9430-82**-****-2393 +계좌번호 +뒤에서부터 5자리 +430-20-1***** + + +![이미지 710-0](images/p0710_img0.png) + + +![이미지 710-1](images/p0710_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +711 +XS +(상) +Web Application(웹) + +## 6. 크로스사이트 스크립트 + +개요 +점검 내용 +웹 애플리케이션 내 악성 스크립트가 다른 사용자의 브라우저에서 실행되는 취약점 존재 여부 점검 +점검 목적 +사용자 입력값에 대한 검증을 실시하여, 사용자 세션 탈취, 악성 코드 삽입 등의 악의적인 스크립트 +실행을 차단하기 위함 +보안 위협 +사용자 입력값에 대한 필터링이 할 경우, 공격자는 사용자 입력값 내 악의적인 스크립트(JavaScript, +VBScript, ActiveX, Flash 등)를 삽입하여 사용자의 쿠키(세션)를 탈취하거나 피싱 사이트로 유도하는 +등의 악의적인 공격을 수행할 수 있음 +참고 +※ 크로스사이트 스크립팅: 악의적인 스크립트를 웹 페이지에 삽입하여 사용자 세션 탈취, 키로깅, 피싱 +공격 등을 유발하는 기법으로, 크게 저장형(Stored)과 반사형(Reflected), DOM 기반 공격 +방식으로 나뉨 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 방화벽 +판단 기준 +양호 : 사용자 입력값에 대해 검증 및 필터링이 이루어져, 악의적인 스크립트가 실행되지 않는 경우 +취약 : 사용자 입력값에 대한 검증 및 필터링이 이루어지지 않으며, HTML 코드가 입력 및 실행되는 경우 +조치 방법 +특수문자에 대해 필터링 처리와 출력값 인코딩(HTML 엔티티, 이스케이프 등)을 적용하여 악성 +스크립트 실행을 방지하며, 부득이하게 HTML 코드를 사용해야 하는 경우 화이트리스트 방식을 적용해 +허용된 HTML 코드만 처리하도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 711-0](images/p0711_img0.png) + + +--- + +| 한국인터넷진흥원 | +712 +점검 및 조치 사례 +- 점검 방법 +Step 1) 사용자 입력값을 전달받아 HTML 상에 렌더링되는 애플리케이션(게시판, 검색 등)에 스크립트 구문 +삽입 후 실행되는지 확인 +§ 게시글 작성 시 스크립트 구문을 삽입하여 글 열람 시 스크립트가 동작하는 경우(Stored XSS) +[ Stored(저장형) XSS 취약점 점검 ] +§ 입력값이 HTML 상에 렌더링되어 스크립트가 삽입된 URL 접근 시 스크립트가 동작하는 경우(Reflected +XSS) +[ Reflected(반사형) XSS 취약점 점검 ] + + +![이미지 712-0](images/p0712_img0.png) + + +![이미지 712-1](images/p0712_img1.png) + + +![이미지 712-2](images/p0712_img2.png) + + +![이미지 712-3](images/p0712_img3.png) + + +![이미지 712-4](images/p0712_img4.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +713 +- 조치 방법 + +## 1. 크로스사이트 스크립팅 공격에 사용되는 특수문자에 대하여 입력값 검증 및 필터링(HTML 엔티티, + +이스케이프 등)처리 로직을 서버 사이드에서 구현 + +## 2. 부득이하게 HTML 코드를 사용해야 하는 경우 화이트리스트 방식을 적용하여 허용된 HTML 코드만 처리 + + +## 3. 웹 방화벽에서 웹 태그 및 스크립트 관련 특수문자 필터링 룰셋을 적용하여 추가적인 방어 확보 + + +## 4. 세션 탈취 방지를 위해 쿠키에 HttpOnly, Secure, SameSite 옵션을 설정하여 노출되지 않도록 보호 + +※ 특수문자 필터링 예시 +구분 +필터링 예시 +변경 전 +< +> +" +( +) +# +& +변경 후 +< +> +" +( +) +# +& +※ Java +§ 입력 문자열 내 특수 문자를 HTML Entity로 변환하는 예시 +사용자 입력값 HTML Entity 처리 로직 예시 +... +public static String sanitizeInput(String input) { +if (input == null) return null; +return input.replaceAll("&", "&") +.replaceAll("<", "<") +.replaceAll(">", ">") +.replaceAll("\"", """) +.replaceAll("'", "'"); +/* 필터링 문자 추가*/ +} +... +※ ASP.NET +§ 입력 문자열 내 특수 문자를 HTML Entity로 변환하는 예시 +사용자 입력값 HTML Entity 처리 로직 예시 +StringBuilder sb = new StringBuilder(); +foreach (char c in input) +{ + + +![이미지 713-0](images/p0713_img0.png) + + +--- + +| 한국인터넷진흥원 | +714 +※ PHP +§ 입력 문자열 내 특수 문자를 HTML Entity로 변환하는 예시 +사용자 입력값 HTML Entity 처리 로직 예시 +function escapeHtml($input) { +return htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +} +// 추가적인 문자열 필터링이 필요한 경우 +function escapeHtmlExtended($input) { +$escaped = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8', false); +$additionalEscapes = [ +'\\' => '\', +'(' => '(', +')' => ')', +'#' => '#' +]; +return strtr($escaped, $additionalEscapes); +} +switch (c) +{ +case '<': +sb.Append("<"); +break; +... +/* 필터링 문자 추가*/ +... +default: +sb.Append(c); +break; +} +} +return sb.ToString(); +... + + +![이미지 714-0](images/p0714_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +715 +CF +(상) +Web Application(웹) + +## 7. 크로스사이트 요청 위조(CSRF) + +개요 +점검 내용 +웹 애플리케이션 내 사용자의 인증 세션을 악용하여 의도하지 않은 위조 요청 가능 여부 점검 +점검 목적 +사용자가 인증된 세션을 가진 상태에서 공격자가 의도한 위조 요청이 전송‧처리되지 않도록 하여 +비정상적인 상태 변경을 방지하기 위함 +보안 위협 +CSRF 취약점이 존재할 경우, 공격자는 사용자가 로그인된 세션을 악용하여 인증정보 없이도 위조된 +요청을 전송할 수 있음. 이로 인해 사용자의 의도와 무관하게 비밀번호 변경, 계좌 이체, 게시글 삭제, +개인정보 수정 등 권한 있는 사용자가 수행할 수 있는 행위가 공격자에 의해 실행될 수 있음 +참고 +※ CSRF(Cross Site Request Forgery): 사용자가 자신의 의지와 무관하게 공격자가 의도한 +행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격 유형으로, 사용자의 인증된 세션을 +악용하여 비인가된 행위 수행 가능 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 방화벽 +판단 기준 +양호 : 중요한 요청(비밀번호 변경, 송금 등)에 대해 CSRF 방어 토큰이 적용되어 있으며, 토큰 검증이 +정상적으로 수행되는 경우 +취약 : 중요한 요청에 대해 CSRF 토큰이 없거나, 토큰 검증을 수행하지 않아 인증된 사용자의 요청 +위조가 가능한 경우 +조치 방법 +중요한 요청에는 CSRF 방어 토큰을 포함하고, 서버 측에서 해당 토큰의 유효성을 검증하도록 설정하며, +Referer/Origin 헤더 검증 및 SameSite 쿠키 옵션을 활용하여 불필요한 외부 도메인 요청이 +차단되도록 구성 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +Step 1) 크로스사이트 스크립팅(XSS) 취약점 존재 여부 확인 후 데이터 수정 기능(게시글 등록, 비밀번호 변경 +등)이 존재하는 요청(Request) 정보를 분석하여 임의의 명령을 수행하는 스크립트 삽입 후 해당 +게시글을 타 사용자가 열람하였을 경우 타 사용자의 권한으로 해당 스크립트의 실행 유무 확인 + + +![이미지 715-0](images/p0715_img0.png) + + +--- + +| 한국인터넷진흥원 | +716 +[ CSRF 취약점 점검 ] +- 조치 방법 + +## 1. 주요 변경 요청(비밀번호 변경, 송금, 개인정보 수정 등)에 대해 CSRF 토큰을 발급하고 요청 시 토큰을 반드시 + +포함하도록 구현 + +## 2. 서버 측에서 CSRF 토큰의 유효성을 검증하여 토큰이 누락되거나 위조된 요청은 차단하도록 설정 + +3. Referer 및 Origin 헤더 검증을 통해 외부 사이트에서 발생한 요청 차단 +4. SameSite 쿠키 옵션을 적용하여 외부 사이트에서 인증 쿠키가 자동 전송되지 않도록 설정 +5. HTTPS 환경에서 쿠키에 Secure, HttpOnly 속성을 적용하여 세션 탈취 및 악용 가능성 최소화 +※CSRF Token +§ CSRF Token은 서버에서 생성한 고유하고 예측 불가능한 값으로 각 사용자 세션 또는 요청마다 생성되며 +생성된 Token은 클라이언트의 요청에 포함되어 서버로 전송되고 서버는 이를 검증하여 요청의 정상 여부 판단 +CSRF Token 생성 예시 +// Java +... +// CSRF Token 생성 및 세션 저장 +public String index(Model model, HttpServletRequest request) { + + +![이미지 716-0](images/p0716_img0.png) + + +![이미지 716-1](images/p0716_img1.png) + + +![이미지 716-2](images/p0716_img2.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +717 +CSRF Token 생성 예시 +HttpSession session = request.getSession(); +String csrfToken = generateCsrfToken(); +session.setAttribute("csrfToken", csrfToken); +model.addAttribute("csrfToken", csrfToken); +model.addAttribute("inputs", inputs); +return "index"; +} +// CSRF Token 생성 함수 +private String generateCsrfToken() { +SecureRandom secureRandom = new SecureRandom(); +byte[] token = new byte[16]; +secureRandom.nextBytes(token); +return Base64.getUrlEncoder().encodeToString(token); +} +// CSRF Token 검증 +@PostMapping("/submit") +public String submit(@RequestParam("input") String input, +@RequestParam("csrfToken") String csrfToken, +HttpServletRequest request, +Model model) { +HttpSession session = request.getSession(); +String sessionToken = (String) session.getAttribute("csrfToken"); +if (sessionToken == null || !sessionToken.equals(csrfToken)) { +throw new IllegalStateException("Invalid CSRF token"); +} +String sanitizedInput = sanitizeInput(input); +inputs.add(sanitizedInput); +model.addAttribute("inputs", inputs); +return "index"; +} +// index.html +
+ + + +![이미지 717-0](images/p0717_img0.png) + + +--- + +| 한국인터넷진흥원 | +718 +CSRF Token 생성 예시 + + + +
+... + + +![이미지 718-0](images/p0718_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +719 +SF +(상) +Web Application(웹) + +## 8. 서버사이드 요청 위조(SSRF) + +개요 +점검 내용 +입력값을 통해 외부에서 직접적인 접근이 제한된 내부 서버 자원에 접근하여 악의적인 요청을 +처리하거나 중요 정보의 유출 여부 점검 +점검 목적 +입력값 검증을 통해 내부 서버 자원에 대한 비인가 접근을 차단하여 중요 정보(개인정보, 금융 정보 등) +탈취, 데이터 변조, 임의 명령 실행 등 악의적인 행위를 방지하기 위함 +보안 위협 +서버 간 통신 시 입력값에 대한 검증이 미흡할 경우, 외부에서 접근이 제한된 내부 서버 자원에 대한 정보 +수집, 중요 정보(개인정보, 금융 정보, 인사 정보 등) 탈취, 임의 명령 실행, 클라우드 환경 내 메타데이터 +수집을 통한 네트워크 인프라 장악이 가능함 +참고 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 애플리케이션 서버, 웹 방화벽, API 서버 +판단 기준 +양호 : 외부 입력값이 화이트리스트 방식으로 검증되어, 허용된 URL 또는 IP 범위 내에서만 처리될 경우 +취약 : 외부 입력값이 검증이 이루어지지 않고 처리되어 허용되지 않는 자원에 임의적인 접근 및 요청이 +가능한 경우 +조치 방법 +입력값 검증 및 화이트리스트를 적용하여 허용된 URL과 IP주소만 접근 가능하도록 설정하며, +네트워크를 분리하여 내부 자원에 대한 비인가 접근을 차단 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 사용자 입력을 통해 서버 간 통신이 이루어지는 지점에서 허용되지 않은 주소값을 입력하여 응답, 지연 +시간 등을 분석해 취약점 가능성 확인 +[ 서버 간 통신 유무 확인 ] + + +![이미지 719-0](images/p0719_img0.png) + + +![이미지 719-1](images/p0719_img1.png) + + +--- + +| 한국인터넷진흥원 | +720 +[ 입력값에 대한 내부 서버 응답값 노출 여부 확인 ] +Step 2) 습득한 정보를 바탕으로 우회 기법, 포트 스캔, 내부 정보 탈취 등 익스플로잇 시도 및 영향 평가 + + +![이미지 720-0](images/p0720_img0.png) + + +![이미지 720-1](images/p0720_img1.png) + + +![이미지 720-2](images/p0720_img2.png) + + +![이미지 720-3](images/p0720_img3.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +721 +[ 심화 공격 수행 ] +- 조치 방법 + +## 1. 외부 요청에 대해 허용된 URL이나 IP주소를 화이트리스트로 정의하여 허용된 대상에만 접근이 가능하도록 + +설정 + +## 2. 내부 네트워크 대역 및 관리용 포트에 대한 요청을 감지하고 차단 + +3. URL 접근에 실패할 경우 사용자에게 에러 정보나 응답값을 노출하지 않고, 일반적인 에러메시지 출력 +4. http, https 외의 다른 프로토콜 (FTP, SMB, SMTP 등)과 URL 스키마(file://, gopher://, data://, dict:// 등)에 +대한 접근을 차단해야 하며, 내부 호스트명이 외부에 노출되지 않도록 DNS 설정을 조정 + +## 5. 애플리케이션 서버와 중요 내부 시스템간 네트워크 분리를 통하여 불필요한 통신을 제한하여 권한 없는 접근 + +과 외부로부터의 직접적인 접근을 방지 +※ Java +화이트 리스트 방식을 이용한 URL 및 IP주소 접근 제한 로직 예시 +... +private final List allowedDomains = Arrays.asList("example.com", ...); +private final Map> allowedIPsAndPorts = new HashMap<>(); +public UrlValidator() { +allowedIPsAndPorts.put("192.168.1.100", Arrays.asList(80, 443, 8080)); +allowedIPsAndPorts.put("10.0.0.1", Arrays.asList(80, 443)); +} +... +public boolean isUrlAllowed(String urlString) { +try { + + +![이미지 721-0](images/p0721_img0.png) + + +![이미지 721-1](images/p0721_img1.png) + + +--- + +| 한국인터넷진흥원 | +722 +※ ASP.NET +URL url = new URL(urlString); +String protocol = url.getProtocol(); + +// HTTP와 HTTPS 스키마만 허용 +if (!("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol))) { +return false; +} +String host = url.getHost(); +int port = url.getPort() == -1 ? url.getDefaultPort() : url.getPort(); +if (allowedDomains.contains(host)) { +return true; +} +if (allowedIPsAndPorts.containsKey(host)) { +return allowedIPsAndPorts.get(host).contains(port); +} +return false; +} catch (Exception e) { +return false; +} +} +... +화이트 리스트 방식을 이용한 URL 및 IP주소 접근 제한 로직 예시 +... +private readonly List _allowedDomains = new List { "example.com", ... }; +private readonly Dictionary> _allowedIPsAndPorts = new Dictionary> +{ +{ "127.0.0.1", new List { 80, 443, 8000 } }, +{ "10.0.0.1", new List { 80, 443 } } +}; +public bool IsUrlAllowed(string urlString) +{ + + +![이미지 722-0](images/p0722_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +723 +※ PHP +if (!Uri.TryCreate(urlString, UriKind.Absolute, out Uri uri)) +{ +return false; +} +// HTTP와 HTTPS 스키마만 허용 +if (uri.Scheme != Uri.UriSchemeHttp && uri.Scheme != Uri.UriSchemeHttps) +{ +return false; +} +string host = uri.Host; +int port = uri.Port; +// 도메인 확인 +if (_allowedDomains.Contains(host)) +{ +return true; +} +// IP주소와 포트 확인 +if (_allowedIPsAndPorts.TryGetValue(host, out List allowedPorts)) +{ +return allowedPorts.Contains(port); +} +return false; +} +... +화이트 리스트 방식을 이용한 URL 및 IP주소 접근 제한 로직 예시 +... +function isUrlAllowed($url) { +$allowedDomains = ['example.com', 'api.example.com']; +$allowedIPsAndPorts = [ +'192.168.10.10' => [80, 443, 8000], +'10.0.0.1' => [80, 443] +]; +$parsedUrl = parse_url($url); +if (!$parsedUrl || !isset($parsedUrl['host'])) { + + +![이미지 723-0](images/p0723_img0.png) + + +--- + +| 한국인터넷진흥원 | +724 +§ php.ini 파일 내 allow_url_fopen 속성 활성화 시 file_get_contents() 함수를 이용하여 원격 URL에 대하여 접근 +및 검색이 가능. 해당 속성을 비활성화하여 원격 URL을 참조할 수 없도록 제한하며 대안으로 cURL 라이브러 +리 사용 +return false; +} +$host = $parsedUrl['host']; +$port = isset($parsedUrl['port']) ? $parsedUrl['port'] : ($parsedUrl['scheme'] === 'https' ? 443 : 80); +// 도메인 확인 +if (in_array($host, $allowedDomains, true)) { +return true; +} +// IP주소와 포트 확인 +if (filter_var($host, FILTER_VALIDATE_IP)) { +if (array_key_exists($host, $allowedIPsAndPorts)) { +return in_array($port, $allowedIPsAndPorts[$host], true); +} +} +return false; +} +... +cURL 라이브러리 사용 예시 +... +function fetchUrl($url) { +// cURL 세션 초기화 +$ch = curl_init(); +// cURL 옵션 설정 +curl_setopt_array($ch, [ +CURLOPT_URL => $url, +CURLOPT_RETURNTRANSFER => false, // 결과를 문자열로 반환 +CURLOPT_FOLLOWLOCATION => false, // 리다이렉트 제한(기본값: false) +CURLOPT_MAXREDIRS => 3, // 최대 리다이렉트 횟수 지정 +CURLOPT_TIMEOUT => 30, // 세션의 최대 허용 시간 지정 (초) + +// 접근 가능한 프로토콜을 http, https로 제한 +CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, + + +![이미지 724-0](images/p0724_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +725 +§ allow_url_include 속성 활성화 시 원격 URL을 PHP의 include(), require() 함수를 통해서 사용 가능. 공격자가 +악의적인 코드가 포함된 원격 파일을 실행할 수 있는 위험이 존재하므로 php.ini 파일 내 해당 속성 비활성화 +allow_url_include 및 allow_url_fopen 속성 비활성화 +... +;;;;;;;;;;;;;;;;;; +; Fopen wrappers ; +;;;;;;;;;;;;;;;;;; +; Whether to allow the treatment of URLs (like http:// or ftp://) as files. +; https://php.net/allow-url-fopen +allow_url_fopen=Off +; Whether to allow include/require to open URLs (like https:// or ftp://) as files. +; https://php.net/allow-url-include +allow_url_include=Off +... +CURLOPT_SSL_VERIFYPEER => true, // SSL 인증서 검증 +]); +// cURL 실행 및 결과 저장 +$response = curl_exec($ch); +$error = curl_error($ch); +$info = curl_getinfo($ch); +// cURL 세션 종료 +curl_close($ch); +// 결과 반환 +return [ +'success' => ($error === ''), +'content' => $response, +'error' => $error, +'info' => $info +]; +} +... + + +![이미지 725-0](images/p0725_img0.png) + + +--- + +| 한국인터넷진흥원 | +726 +BF +(상) +Web Application(웹) + +## 9. 약한 비밀번호 정책 + +개요 +점검 내용 +웹 애플리케이션 내 로그인 폼 등 비밀번호를 설정하는 단계에서 약한 강도의 문자열 사용 여부를 +점검하고, 비밀번호 복잡성 요구사항(최소 길이, 대문자 및 소문자, 숫자 및 특수문자 포함 등)을 준수 +여부 점검 +점검 목적 +유추 가능한 취약한 문자열(이름, 생년월일 등)이나 낮은 복잡성의 비밀번호 사용을 제한하여 계정 및 +비밀번호 추측 공격을 방지하기 위함 +보안 위협 +해당 취약점이 존재할 경우, 유추가 용이한 계정 및 비밀번호 사용으로 인해 사용자 권한 탈취 위험이 +있으며, 이를 방지하기 위해 비밀번호의 적절성 및 복잡성을 검증하는 로직을 구현해야 함 +참고 +※ 약한 비밀번호 정책 취약점: 웹 사이트에서 취약한 비밀번호로 회원가입이 가능할 경우, 공격자는 +비밀번호를 추측하거나 주변 정보를 수집하여 작성한 사전 파일을 이용하여 사용자 계정의 탈취가 +가능한 취약점 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드 +판단 기준 +양호 : 관리자 및 사용자 계정의 비밀번호가 유추하기 어려운 값으로 설정되어 있거나 높은 복잡성의 +비밀번호 정책이 설정되어 있는 경우 +취약 : 관리자 및 사용자 계정의 비밀번호가 유추하기 쉬운 값으로 설정되어 있거나 낮은 복잡성의 +비밀번호 정책이 설정되어 있는 경우 +조치 방법 +높은 복잡성의 비밀번호 설정 기준을 확립하며, 계정 및 비밀번호의 체크 로직 추가 구현 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 웹 애플리케이션 내 추측 가능한 계정이나 비밀번호를 통하여 로그인이 가능한 계정이 존재 여부 확인 +[ 취약한 계정 정보를 통한 로그인 시도 ] + + +![이미지 726-0](images/p0726_img0.png) + + +![이미지 726-1](images/p0726_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +727 +Step 2) 회원가입 및 사용자 정보 수정 페이지 내 비밀번호 설정 시 높은 복잡도를 요구하는지 확인 +[ 높은 복잡도의 비밀번호 정책 설정 유무 확인 ] +- 조치 방법 + +## 1. 테스트 및 관리자 계정 사용 시 취약한 ID 및 비밀번호 사용을 제한 + + +## 2. 사용자가 취약한 계정이나 비밀번호를 등록하지 못하도록 비밀번호 규정이 반영된 체크 로직을 회원가입, + +정보 변경, 비밀번호 변경 등 적용 필요한 페이지에 모두 구현(아래의 예시와 같이 정규 표현식을 통해 +비밀번호 복잡도 검증 로직을 구현) +3. KISA 지식플랫폼 → 법령·가이드라인 → 안내서에서 비밀번호 선택 및 이용 안내서를 통해 안전하게 +비밀번호를 생성하고 관리하는 방법 참고 +(https://www.kisa.or.kr/2060305/form?postSeq=14) +※ 취약한 ID/비밀번호 예시 +구분 +예시 +취약한 ID +admin, administrator, manager, guest, tomcat, root, user, operator, anonymous 등 +취약한 비밀번호 +abcd, 1234, 1111, test, password, public, blank 비밀번호, ID와 동일한 비밀번호 등 +※ 규정 예시 +규정 예시 +Step 1) 다음 각 목의 문자 종류 중 2종류 이상을 조합하여 최소 10자리 이상 또는 3종류 이상을 조합하여 최소 8자리 +이상의 길이로 구성 +(1) 영문 대문자(26개) +(2) 영문 소문자(26개) +(3) 숫자(10개) +(4) 특수문자(32개) +Step 2) 연속적인 숫자나 생일, 전화번호 등 추측하기 쉬운 개인정보 및 아이디와 비슷한 비밀번호는 사용하지 않는 것을 +권고 +Step 3) 비밀번호에 유효기간을 설정하여 반기별 1회 이상 변경 +Step 4) 최근 사용되었던 비밀번호 재사용 금지 + + +![이미지 727-0](images/p0727_img0.png) + + +![이미지 727-1](images/p0727_img1.png) + + +--- + +| 한국인터넷진흥원 | +728 +※ Javascript +비밀번호 복잡성 검증 예시 +function isPasswordStrong(password) { +const minLength = 8; +const hasUpperCase = /[A-Z]/.test(password); +const hasLowerCase = /[a-z]/.test(password); +const hasNumber = /[0-9]/.test(password); +const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(password); +return password.length >= minLength && hasUpperCase && hasLowerCase && hasNumber && +hasSpecialChar; +}document.getElementById('password').addEventListener('input', function() { +const password = this.value; +const strengthMessage = isPasswordStrong(password) ? 'Strong' : 'Weak'; +document.getElementById('strengthText').textContent = `Strength: ${strengthMessage}`; +}); + +## 4. 약한 비밀번호 정책을 사용하고, 비밀번호 입력 실패 횟수 제한 설정 또한 미흡한 경우 사전대입 공격 및 + +무차별 대입 공격을 통한 계정 탈취가 가능하므로 일정 횟수(3~5회) 이상 초과할 경우 계정이 잠기도록 서버 +사이드 스크립트(PHP, ASP, JSP 등)를 통하여 임계 로직 구현 권고 + + +![이미지 728-0](images/p0728_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +729 +IA +(상) +Web Application(웹) + +## 10. 불충분한 인증 절차 + +개요 +점검 내용 +중요 페이지 접근 시 추가 인증 절차 존재 여부 및 인증 로직 우회 여부 점검 +점검 목적 +중요 페이지 접근 시 추가 인증 절차를 도입하고, 서버 사이드에서 인증 여부를 검증하여 불필요한 정보 +노출 및 변조를 차단하기 위함 +보안 위협 +중요 페이지 및 인증 로직(개인정보 수정, 본인인증, OTP 인증 등)에 대한 인증 절차가 미흡할 경우 무단 +접근으로 인해 중요 정보가 유출되거나 변조될 가능성이 있으므로, 해당 구간에는 추가적인 인증 절차를 +서버 사이드 방식으로 구현 및 검증 +참고 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드 +판단 기준 +양호 : 중요 정보 페이지 접근 시 추가 인증 절차가 존재하며, 인증 로직이 서버 사이드에서 구현되어 +우회가 불가능한 경우 +취약 : 중요 정보 페이지 접근 시 추가 인증 절차가 존재하지 않거나, 인증 로직 우회가 가능하여 +비인가자가 접근 가능할 경우 +조치 방법 +중요 페이지에 대한 추가 인증 절차를 도입하고, 서버 사이드에서 인증 여부를 검증하는 로직 구현 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 중요 정보(개인정보 변경 등) 페이지 접근 시 재인증 절차 존재 여부 확인 +[ 2차 인증 유무 확인 ] + + +![이미지 729-0](images/p0729_img0.png) + + +![이미지 729-1](images/p0729_img1.png) + + +--- + +| 한국인터넷진흥원 | +730 +Step 2) 로직 변조, 파라미터 변조 등의 행위를 통하여 인증 로직(OTP 인증, 휴대폰 본인인증 등)의 우회 여부 +확인 +[ 인증 로직 우회 여부 확인 ] +- 조치 방법 + +## 1. 중요 정보를 다루는 페이지에 접근 시 본인인증을 재확인하는 로직을 구현하고, 사용자 승인 여부를 + +페이지마다 검증 + +## 2. 인증 과정을 처리하는 로직 구현 시 클라이언트 사이드 방식으로 구현할 경우 사용자가 임의로 인증 과정에 + +대한 우회가 가능하므로 서버 사이드 방식을 이용하여 구현 + +## 3. 접근 통제 코드는 구조화되고 모듈화되어야 하며, 모든 페이지에 로그인 및 권한 체크 기능을 구현하고 공통 + +모듈 사용 권장 + + +![이미지 730-0](images/p0730_img0.png) + + +![이미지 730-1](images/p0730_img1.png) + + +![이미지 730-2](images/p0730_img2.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +731 +§ 재인증 로직 구현: 중요 정보(개인정보 변경 등)를 표시하거나 수정하는 페이지에 접근 시 사용자가 최근에 +본인인증을 수행했는지 확인하는 로직을 구현하며, 사용자가 페이지에 접근할 때마다 세션을 통해 인증된 +사용자임을 검증 +재인증 로직 구현 예시 +... +public String editProfile(HttpSession session, Model model) { +User user = (User) session.getAttribute("user"); +Boolean isVerified = (Boolean) session.getAttribute("isVerified"); // 세션을 통해 인증 유무 검증 +if (user == null || isVerified == null || !isVerified) { +return "redirect:/user/authenticate"; +} +model.addAttribute("user", user); +return "edit_profile"; +} +... +@PostMapping("/verify_code") +public String verifyCode(@RequestParam String code, HttpSession session) { +if (input.equals(code)) { +session.setAttribute("isVerified", true); +return "redirect:/user/edit_profile"; +} else { +return "redirect:/user/authenticate?error=true"; +} +} +... +§ 접근 제어 로직을 별도의 클래스로 분리 및 관리하여 접근 통제 로직을 공통 모듈로 구현하여 코드의 일관성 +유지 +접근 통제 공통 모듈 예시 +... +public class AccessControl { +public static boolean isAuthenticated(HttpSession session) { +return session.getAttribute("user") != null; +} + + +![이미지 731-0](images/p0731_img0.png) + + +--- + +| 한국인터넷진흥원 | +732 +§ 서버 사이드 스크립트 사용: 인증과정을 처리할 때 클라이언트 사이드 스크립트(Javascript 등)를 사용하지 +않고, 서버 사이드 스크립트(PHP, Java, ASP.NET 등)를 사용하여 인증 및 필터링 과정을 수행하며, 모든 인증 +및 권한 검증 로직은 서버 사이드에서 수행함으로써 클라이언트 측에서는 단순히 UI 제공 및 요청 전송 역할만 +담당하도록 유도 +서버 사이드 인증 모듈 예시 +@PostMapping("/login") +public String login(@RequestParam String username, +@RequestParam String password, +HttpSession session, +Model model) { +User user = userService.findByUsername(username); +if (user != null && user.getPassword().equals(password)) { +session.setAttribute("user", user); +session.setAttribute("isVerified", false); // 인증 세션 초기값 설정 +return "redirect:/user/dashboard"; +} else { +model.addAttribute("error", "Invalid username or password"); +return "login"; +} +} +... +public static boolean isVerified(HttpSession session) { +return Boolean.TRUE.equals(session.getAttribute("isVerified")); +} +} +... + + +![이미지 732-0](images/p0732_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +733 +IN +(상) +Web Application(웹) + +## 11. 불충분한 권한 검증 + +개요 +점검 내용 +타 사용자의 권한을 탈취하여 민감한 데이터 접근 및 수정 가능 여부 점검 +점검 목적 +사용자 검증 로직을 서버 사이드에서 구현하여 비인가자로부터 악의적인 접근을 차단하기 위함 +보안 위협 +패킷 변조, 클라이언트 측 로직 변조 등을 포함한 사용자 식별이 가능한 시퀀스 등의 데이터 변조를 통해 +타 사용자의 권한을 탈취할 경우, 개인정보 유출 및 데이터 조작이 가능하므로 서버 사이드에서 권한 +검증 로직을 구현해야 함 +참고 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드 +판단 기준 +양호 : 중요 페이지에 사용자 검증 로직이 구현되어 있어, 타 사용자의 권한 탈취가 제한된 경우 +취약 : 중요 페이지에 사용자 검증 로직이 미흡하여, 타 사용자의 권한 탈취가 가능한 경우 +조치 방법 +접근 제어가 필요한 모든 페이지에 서버 사이드 방식 사용자 권한 검증 로직 구현 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 타 사용자 접근이 제한된 페이지(비밀 게시글, 개인정보 변경 등)에서 사용되는 URL 구조와 파라미터를 +분석하여 사용자 간 구분을 ID, 숫자, 일련번호 등 단순한 값의 사용 여부 확인 +[ 타 사용자 권한 탈취 시도 ] + + +![이미지 733-0](images/p0733_img0.png) + + +![이미지 733-1](images/p0733_img1.png) + + +--- + +| 한국인터넷진흥원 | +734 +Step 2) 식별된 URL 구조와 파라미터를 변조하여 타 사용자의 비공개 정보나 권한 외 리소스에 대한 접근 가능 +여부 확인 +[ 타 사용자 권한 탈취 유무 확인 ] +- 조치 방법 + +## 1. 세션을 이용한 사용자 검증 로직을 서버 측에 구현하여, 인가된 사용자만 중요 페이지에 접근할 수 있도록 + +구현 + +## 2. 각 페이지의 접근 권한을 정의하는 권한 매트릭스를 작성하고, 모든 페이지에 대해 해당 매트릭스를 참조하여 + +서버 사이드에서 권한 체크를 일관되게 수행 +서버 사이드 세션 검증 예시 +@GetMapping("/inquiry/{id}") +public String viewInquiry(@PathVariable Long id, Model model, HttpSession session) { +User currentUser = (User) session.getAttribute("currentUser"); // 세션에서 현재 사용자 정보를 가져옴 + +// 세션에 사용자 정보가 없으면 로그인되지 않은 상태이므로 401 Unauthorized 응답 +if (currentUser == null) { +throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Not logged in"); +} +Inquiry inquiry = inquiryService.findInquiryById(id); // ID에 해당하는 문의를 데이터베이스에서 가져옴 +// 현재 사용자가 문의의 작성자가 아니면 403 Forbidden 응답을 보냄 +if (!inquiry.getUser().getUsername().equals(currentUser.getUsername())) { +throw new ResponseStatusException(HttpStatus.FORBIDDEN, "permission denied"); +} +} +... + + +![이미지 734-0](images/p0734_img0.png) + + +![이미지 734-1](images/p0734_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +735 +PR +(상) +Web Application(웹) + +## 12. 취약한 비밀번호 복구 절차 + +개요 +점검 내용 +비밀번호 복구 기능 사용 시, 단순 정보(이름, 사번, 아이디 등)만을 활용하거나 SMS나 이메일 인증 시 +발급되는 임시 비밀번호가 동일하거나 유추 가능 여부 점검 +점검 목적 +비밀번호 복구 로직을 유추하기 어렵게 구현하고, 인증된 사용자 메일이나 SMS에서만 복구 비밀번호를 +확인할 수 있도록 하여 비인가자가 사용자 비밀번호를 획득 및 변경하지 못하도록 방지하기 위함 +보안 위협 +취약한 비밀번호 복구 로직(비밀번호 찾기 등)으로 인하여 공격자가 불법적으로 다른 사용자의 +비밀번호를 획득, 변경할 수 있음 +참고 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드 +판단 기준 +양호 : 비밀번호 재설정 시 난수를 이용하여, 인증된 사용자 메일이나 SMS로 임시 비밀번호 또는 +비밀번호 재설정을 위한 링크가 전송될 경우 +취약 : 비밀번호 재설정 시 일정 패턴으로 재설정되고 웹 사이트 화면에 바로 출력될 경우 +조치 방법 +비밀번호 복구 로직을 강화하고, 인증된 사용자 메일이나 SMS에서만 재설정된 비밀번호를 확인할 수 +있도록 하여 비인가자가 비밀번호를 획득하지 못하도록 조치 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 비밀번호 복구 기능 유무를 파악하고, 복구 과정에서 보안 질문이 추측 가능하거나 소셜 엔지니어링으로 +쉽게 답을 찾을 수 있는 단순 정보를 요구하는지 확인 +[ 비밀번호 복구 시 보안 질문 단순성 확인 ] + + +![이미지 735-0](images/p0735_img0.png) + + +![이미지 735-1](images/p0735_img1.png) + + +--- + +| 한국인터넷진흥원 | +736 +Step 2) 비밀번호 복구 시 재설정된 비밀번호에 대하여 추측가능한 일정 패턴으로 발급 유무 확인 +[ 발급 비밀번호에 대한 복잡성 판단 ] +Step 3) 비밀번호 복구 과정에서 해당 계정에 등록된 이메일 및 전화번호가 아닌 공격자의 정보로 변조가 가능한 +포인트의 점검 및 패킷 변조를 통해 공격자 측으로 인증 번호 및 임시 비밀번호 발급 여부 확인 +[ 비밀번호 초기화 시 사용자 정보에 대한 무결성 검증 ] +- 조치 방법 + +## 1. 추측이 어렵고 공개적으로 알 수 없는 정보를 기반으로 한 보안 질문 사용 + + +## 2. 비밀번호 재설정 과정에서 사용자의 메일이나 SMS로 인증 코드 전송 후 이를 확인하는 2단계 인증 도입 + + +## 3. 사용자의 개인정보(연락처, 주소, 메일 주소 등)로 비밀번호의 생성을 제한하며, 불규칙적이고 최소 길이(6자 + +이상 권고) 이상의 복잡도를 만족하는 비밀번호를 발급 및 웹 사이트 화면에 바로 출력하지 않고 인증된 +사용자의 메일이나 SMS로 전송되게 구현 + +## 4. 비밀번호 재발급 검증 실패에 대한 임계값을 설정하여 일정 횟수 이상 실패한 경우 다른 방식으로 비밀번호 + +찾기 기능을 제공하고, 검증 후 기존의 비밀번호가 아닌 임시 비밀번호를 발급하도록 설계하며, 사용자가 +임시 비밀번호를 재사용하지 못하도록 발급받은 즉시 새로운 비밀번호로 재설정하도록 구현 + + +![이미지 736-0](images/p0736_img0.png) + + +![이미지 736-1](images/p0736_img1.png) + + +![이미지 736-2](images/p0736_img2.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +737 +※ Java +§ SecureRandom : 난수를 생성하는 데 사용되는 클래스로, 일반 Random 클래스와 달리 시드를 명시적으로 +설정할 수 없으므로 키 생성, 보안 토큰 등 보안이 필요한 애플리케이션의 경우 SecureRandom 사용 +SecureRandom 클래스를 사용하여 안전한 임시 비밀번호를 생성하는 예시 +private static final String CHARACTERS = +"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +//대소문자 영문, 숫자 조합으로 12자리의 난수 생성 규칙 정의 +private static final int PASSWORD_LENGTH = 12; +private String generateTemporaryPassword() { +SecureRandom secureRandom = new SecureRandom(); +StringBuilder password = new StringBuilder(PASSWORD_LENGTH); +for (int i = 0; i < PASSWORD_LENGTH; i++) { +int randomIndex = secureRandom.nextInt(CHARACTERS.length()); +password.append(CHARACTERS.charAt(randomIndex)); +} +return password.toString() +} //임시 비밀번호로 사용될 난수 생성 +※ ASP.NET +§ RNGCryptoServiceProvider : 난수를 생성하는 데 사용되는 클래스로, 사전에 정의된 문자 집합에서 안전한 +암호화 알고리즘을 기반으로 문자를 선택하여 복잡한 난수를 생성 +RNGCryptoServiceProvider 클래스를 사용하여 안전한 임시 비밀번호를 생성하는 예시 +protected void btnCheckRandom_Click(object sender, EventArgs e) { +lblRandomNumber.Text = GenerateAlphanumericRandom(12); // 자리수 정의(12) +} +private string GenerateAlphanumericRandom(int length) { +const string chars = +"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +//대소문자 영문, 숫자 조합으로 생성 규칙 정의 +StringBuilder result = new StringBuilder(length); +byte[] randomBytes = new byte[4 * length]; +using (var rng = new RNGCryptoServiceProvider()) +{ + + +![이미지 737-0](images/p0737_img0.png) + + +--- + +| 한국인터넷진흥원 | +738 +※ PHP +§ rand 메소드 보다 random_int 메소드가 암호학적으로 안전한 난수를 생성 (PHP 7.0 버전부터 사용 가능) +random_int() 메소드를 사용하여 안전한 임시 비밀번호를 생성하는 예시 +... +function generateRandomPassword($length = 12) { +$characters = +'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()'; +$charactersLength = strlen($characters); +$randomPassword = ''; +for ($i = 0; $i < $length; $i++) { +$randomPassword .= $characters[random_int(0, $charactersLength - 1)]; +} +return $randomPassword; +} +.... +if ($_SERVER['REQUEST_METHOD'] == 'POST') { //세션 정보와 'userid' 값이 일치하는지 검증 +$userid = $_POST[‘userid’]; +$email = $_POST[‘email’]; + +if (isset($_SESSION['userid']) && $_SESSION['userid'] === $userid) { +$temporaryPassword = generateRandomPassword(); +updateUserPassword($userid, password_hash($temporaryPassword, PASSWORD_DEFAULT)); +if (sendPasswordEmail($email, $temporaryPassword)) { +echo "귀하의 이메일로 임시 비밀번호가 발송되었습니다."; +.... +rng.GetBytes(randomBytes); +for (int i = 0; i < length; i++) +{ +uint randomInt = BitConverter.ToUInt32(randomBytes, i * 4); +result.Append(chars[(int)(randomInt % (uint)chars.Length)]); +} +} +return result.ToString(); +} +... + + +![이미지 738-0](images/p0738_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +739 +PV +(상) +Web Application(웹) + +## 13. 프로세스 검증 누락 + +개요 +점검 내용 +서비스 제공에 필요한 사용자 입력 및 실행단계의 흐름에 대한 검증의 적절성 여부 점검 +점검 목적 +서버 사이드에서 적절한 검증을 통해 비정상적인 입력 및 프로세스 흐름으로 허용되지 않은 웹 +애플리케이션 내 발생할 수 있는 논리적 오류를 차단하기 위함 +보안 위협 +웹 애플리케이션 내 프로세스 또는 기능에 대한 접근 제어 및 검증이 미흡할 경우, 비정상적인 논리 +오류를 유발하여, 중요 페이지에 대한 URL 직접 접근, 가격 변조 등의 다양한 행위가 가능하며 서비스 +제공에 불이익이 발생할 수 있음 +참고 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드 +판단 기준 +양호 : 프로세스에 대한 검증이 존재하며, 악의적인 행위(URL 직접 접근, Javascript 로직 변조 등)를 +통하여 논리 오류가 발생하지 않는 경우 +취약 : 프로세스에 대한 검증이 미흡하여, 논리 오류를 통한 의도된 기능이 왜곡되거나 보안 취약점이 +노출되는 경우 +조치 방법 +프로세스 검증이 필요한 경우 각 프로세스에 대한 체크 로직 구현 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 웹 사이트 내 기능들의 권한 종류 및 프로세스의 흐름을 파악하고 각 프로세스의 통제를 우회 및 악용 +가능성 여부 점검(권한 상승, 민감 정보 획득, 가격 변조 등) +§ 비 로그인 상태로 URL 직접 접근을 통해 내부 사용자 관리 페이지로 접근할 수 있는지 확인하는 예시 +[ 내부 페이지 URL 직접 접근 시도 ] + + +![이미지 739-0](images/p0739_img0.png) + + +![이미지 739-1](images/p0739_img1.png) + + +--- + +| 한국인터넷진흥원 | +740 +§ 가격 정보에 대한 검증이 미흡하여, 파라미터 변조를 통해 변조된 가격으로 상품 구매 가능 여부 확인 +[ 프록시 도구를 이용한 가격 변조 시도 ] +- 조치 방법 + +## 1. 모든 비즈니스 로직에서 예상된 프로세스 흐름을 검토하여, 중간 단계를 생략하거나 우회할 수 없도록 플로우 + +제어 로직을 추가하여, 사용자가 단계별로 진행했는지 검증하도록 구현 + +## 2. 인증이 필요한 주요 정보 페이지에 접근 요청자의 권한을 검증하는 로직을 구현하고 임의로 수정할 수 없도록 + +서버 사이드에서 구현된 프로세스를 사용(세션 기반 접근 통제, 토큰 기반 접근 통제, Referer 검증 등) +※ Java +§ 세션을 확인하여 비인가자의 접근을 통제하는 로직의 추가 예시 +세션을 통한 비인가자 접근 통제 로직 +public class SessionConfig implements WebMvcConfigurer { +public void addInterceptors(InterceptorRegistry registry) { +registry.addInterceptor(new SessionInterceptor()) +.addPathPatterns("/home", "/board/**") +.excludePathPatterns("/login", "/register", "/error"); +} //비공개 페이지와 공개용 페이지 정의 +} +... +public class SessionInterceptor implements HandlerInterceptor { +public boolean preHandle(HttpServletRequest request, + + +![이미지 740-0](images/p0740_img0.png) + + +![이미지 740-1](images/p0740_img1.png) + + +![이미지 740-2](images/p0740_img2.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +741 +※ ASP.NET +§ Page_Load : ASP.NET Web Form에서 제공하는 이벤트 핸들러. 페이지 생명주기의 일부로써, 페이지의 로드 +시마다 자동으로 호출. ASP.NET 런타임은 페이지 클래스에서 Page_Load라는 이름의 메서드를 찾아 +자동으로 이동하며, 페이지가 로드될 때 실행해야 하는 초기화 코드를 넣는데 주로 사용 +Page_Load 메서드를 통한 세션 검증 로직 +protected void Page_Load(object sender, EventArgs e) { +if (Session["UserName"] == null) +{ +//세션 내 UserName 키값이 존재하지 않으면 접근권한 없음 +Response.Redirect("~/Login.aspx"); +} +} +§ 어트리뷰트 : 코드의 메타데이터를 나타내는데 사용되는 선언적 태그. 클래스, 메서드, 속성, 이벤트, 필드 +등과 같은 다양한 프로그래밍 요소에 추가 정보를 제공. [Authorize] 어트리뷰트의 경우, 컨트롤러나 액션 +메서드에 대한 접근을 인증된 사용자로 제한하는 기능을 담당함 +HttpServletResponse response, +Object handler) throws Exception { +if (request.getSession().getAttribute("user") == null) { +response.sendRedirect("/login"); +return false; +} //보호된 페이지 접근 시 요청을 가로채, preHandle 메서드를 호출하여 세션을 검증 +return true; +... +[Authorize] 어트리뷰트를 통한 특정 페이지 접근 정책 설정 예시 +//설정 파일(Program.cs) 내 사용자 정의 권한 정책 생성 +... +builder.Services.AddAuthorization(options => +{ options.AddPolicy("AdminOnly", policy => policy.RequireClaim("Auth", "admin")); +}); +... +//로그인 컨트롤러에서 auth값 클레임 추가 + + +![이미지 741-0](images/p0741_img0.png) + + +--- + +| 한국인터넷진흥원 | +742 +※ PHP +[Authorize] 어트리뷰트를 통한 특정 페이지 접근 정책 설정 예시 +... +[HttpPost] +public async Task Login(string username, string password) +{ var user = _context.Users.FirstOrDefault(u => u.Username == username); +if (user != null) +{ +var result = _passwordHasher.VerifyHashedPassword(user, user.Password, password); +if (result == PasswordVerificationResult.Success) +{ +var claims = new List +{ +new Claim(ClaimTypes.Name, username), +new Claim("FullName", user.Name), +new Claim("Auth", user.Auth) +}; +} +.... +//권한 제어 페이지 컨트롤러 내 [Authorize] 어트리뷰 사용 +... +[Authorize(Policy = "AdminOnly")] +public class AdminController : Controller +{ +public IActionResult Index() +{ +return View(); +} +} +... +세션 변수 내 플로우 제어 값 설정 로직 +... +session_start(); +if ($step_completed) { + + +![이미지 742-0](images/p0742_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +743 +$_SESSION['step1_completed'] = true; +header('Location: step2.php'); // 이전 단계 완료 시 2단계로 접근 +exit; +} +// 2단계 직접 접근 시 +if (!isset($_SESSION['step1_completed']) || $_SESSION['step1_completed'] !== true) { +header('Location: step1.php'); // 1단계를 완료하지 않은 경우, 1단계 과정으로 리다이렉트 +exit; +} +... + + +![이미지 743-0](images/p0743_img0.png) + + +--- + +| 한국인터넷진흥원 | +744 +FU +(상) +Web Application(웹) + +## 14. 악성 파일 업로드 + +개요 +점검 내용 +웹 애플리케이션 내 업로드 기능 이용 시 악성 파일의 업로드 및 실행 가능 여부 점검 +점검 목적 +업로드되는 파일의 확장자에 대한 적절성을 검증하는 로직을 구현하여 악성 파일(Server Side Script, +exe, dll, bat 등)의 업로드를 방지하고, 서버에 저장된 파일 경로를 유추하여 해당 파일의 실행을 +제한하기 위함 +보안 위협 +해당 취약점이 존재할 경우, 공격자는 악성 파일을 서버에 업로드 및 실행하여 시스템 관리자 권한을 +획득하거나 인접 서버에 대한 침입을 시도할 수 있음 +참고 +※ Server Side Script: 웹에서 사용되는 스크립트 언어 중 서버 측에서 실행되는 스크립트 +※ 악성 콘텐츠: Flash 파일이나 dll, bat, exe 실행 파일 등 악성코드가 포함될 수 있는 콘텐츠 +※ 기반시설 특성상 원칙적으로 업로드 기능을 제한해야 하나, 부득이하게 사용해야 하는 경우 특정 +사용자만 허용된 확장자의 콘텐츠 파일을 업로드할 수 있도록 구현 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 애플리케이션 서버, 웹 방화벽 +판단 기준 +양호 : 업로드되는 파일에 대한 확장자 검증이 이루어지는 경우 +취약 : 업로드되는 파일에 대한 확장자 검증이 이루어지지 않고 업로드 경로 접근 시 정상적으로 실행이 +가능한 경우 +조치 방법 +업로드되는 파일에 대한 확장자 검증 및 실행 권한 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 악성 콘텐츠 업로드 +- 점검 방법 +Step 1) 파일 업로드 기능 이용 시 파일 확장자(.exe, .bat, .sh, .dll 등) 검증 여부 확인 + +[ 악성 파일 업로드 시도 ] + + +![이미지 744-0](images/p0744_img0.png) + + +![이미지 744-1](images/p0744_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +745 +Step 2) 임의 악성 파일에 대하여 정상적으로 업로드 가능 여부 확인 +[ 악성 파일 업로드 유무 확인 ] +Step 3) 파일 다운로드 및 특정 서비스 간 실행 기능 제공 시 클라이언트/서버에 대하여 악성 코드 감염 가능성 +여부 확인 +[ 악성 파일에 대한 익스플로잇 및 실행 가능성 여부 확인 ] + + +![이미지 745-0](images/p0745_img0.png) + + +![이미지 745-1](images/p0745_img1.png) + + +![이미지 745-2](images/p0745_img2.png) + + +![이미지 745-3](images/p0745_img3.png) + + +--- + +| 한국인터넷진흥원 | +746 +l Server Side Script 업로드 +- 점검 방법 +Step 1) Server Side Script 파일 업로드 및 파일 경로 확인 +[ 업로드 된 악성 Server Side Script에 대한 경로 확인 ] +Step 2) 업로드된 Server Side Script 파일 경로 접근 시 파일 실행 여부 확인 +[ 악성 Server Side Script 실행 유무 확인 ] +- 조치 방법 + +## 1. 업로드 파일명에 인코딩/디코딩, 널바이트, 태그 등을 제거할 수 있도록 정규화 및 필터링 + + +## 2. 업로드 파일의 확장자 및 MIME 타입에 대해 화이트리스트 방식으로 검증 로직을 구현하여 서버 사이드로 + +하여금 허용된 파일 유형만 업로드를 허용하며 대용량 파일 업로드 시 용량 제한 구현 + +## 3. 업로드된 파일의 이름을 암호화 후 저장하여 파일 이름을 유추할 수 없도록 처리 + + +## 4. 업로드된 파일의 실행 권한을 제한하여 해당 파일이 서버 사이드에서 실행되지 않도록 설정 + + +## 5. 업로드 경로에 대하여 웹 디렉터리와 격리 조치 + + +## 6. 주기적으로 업로드된 파일을 대상으로 바이러스 검사 실시 + + + +![이미지 746-0](images/p0746_img0.png) + + +![이미지 746-1](images/p0746_img1.png) + + +![이미지 746-2](images/p0746_img2.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +747 +※ Java +§ 화이트리스트 방식의 확장자 검증 및 MIME 타입 검증 로직을 구현하여 허용된 유형의 파일만 업로드 허용 +파일 업로드 보안코드 예시 +... +private static final String[] ALLOWED_EXTENSIONS = {"jpg", "png", "pdf", "txt"}; +private static final Set ALLOWED_MIME = Set.of("image/jpeg","image/png","application/pdf", +"text/plain"); +... +// 파일명 정규화 +private static String normalizeFilename(String filename) { +if (filename == null) return null; +String name = java.net.URLDecoder.decode(filename, StandardCharsets.UTF_8); +name = Normalizer.normalize(name, Normalizer.Form.NFC); +name = name.replace("\0", ""); +name = name.replaceAll("[<>:\"/\\\\|?*]", ""); +name = name.replaceAll("^[.\\s]+|[.\\s]+$", ""); +return name; +} +// 확장자 추출 + 이중 확장자 차단 +private static String getExtension(String filename) { +String safe = normalizeFilename(filename); +int dotCount = safe.length() - safe.replace(".", "").length(); +if (dotCount != 1) return ""; // 이중 확장자 차단 +int idx = safe.lastIndexOf('.'); +if (idx == -1) return ""; +return safe.substring(idx+1).toLowerCase(); +} +public static String saveFile(MultipartFile file, String uploadDir) throws IOException { +String original = file.getOriginalFilename(); +String ext = getExtension(original); +if (!ALLOWED_EXTENSIONS.contains(ext)) { +throw new IOException("허용되지 않은 확장자"); +} +// MIME 시그니처 검증 + + +![이미지 747-0](images/p0747_img0.png) + + +--- + +| 한국인터넷진흥원 | +748 +Tika tika = new Tika(); +String mime = tika.detect(file.getInputStream()); +if (!ALLOWED_MIME.contains(mime)) { +throw new IOException("허용되지 않은 파일 유형"); +} +// 파일명 난수화 +String newName = UUID.randomUUID().toString().replace("-", "") + "." + ext; +java.nio.file.Path savePath = java.nio.file.Paths.get(uploadDir, newName); +file.transferTo(savePath.toFile()); +return newName; +} +} +... + + +![이미지 748-0](images/p0748_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +749 +※ ASP.NET +§ 화이트리스트 방식의 확장자 검증 로직을 통한 허용된 확장자 파일만 업로드 +파일 업로드 보안 코드 예시 +... +private static readonly string[] AllowedExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".pdf", ".txt" }; +private static readonly string[] AllowedMime = { "image/jpeg","image/png","image/gif","application/pdf", +"text/plain" }; +... +// 파일명 정규화 +private static string NormalizeFilename(string filename) +{ +if (string.IsNullOrWhiteSpace(filename)) return string.Empty; +string name = System.Web.HttpUtility.UrlDecode(filename, Encoding.UTF8); +name = name.Normalize(NormalizationForm.FormC); +name = name.Replace("\0", ""); +name = Regex.Replace(name, "[<>:\"/\\\\|?*]", ""); +name = Regex.Replace(name, "^[.\\s]+|[.\\s]+$", ""); +return name; +} +// 확장자 검증 (이중 확장자 차단 포함) +private static bool IsValidExtension(string filename) +{ +string safeName = NormalizeFilename(filename); +if (string.IsNullOrEmpty(safeName)) return false; +// 이중 확장자 차단 +if (safeName.Split('.').Length != 2) return false; +string ext = Path.GetExtension(safeName).ToLowerInvariant(); +return Array.Exists(AllowedExtensions, e => e == ext); +} +protected void btnUpload_Click(object sender, EventArgs e) +{ +if (FileUpload1.HasFile) +{ +string safeName = NormalizeFilename(FileUpload1.FileName); + + +![이미지 749-0](images/p0749_img0.png) + + +--- + +| 한국인터넷진흥원 | +750 +// 확장자 검증 +if (!IsValidExtension(safeName)) +{ +Response.Write("허용되지 않은 확장자입니다."); +return; +} +// MIME 타입 검증 (주의: Web Forms의 ContentType은 신뢰성이 낮음) +string mime = FileUpload1.PostedFile.ContentType.ToLowerInvariant(); +if (Array.IndexOf(AllowedMime, mime) < 0) +{ +Response.Write("허용되지 않은 MIME 타입입니다."); +return; +} +// 난수화된 파일명 생성 +string ext = Path.GetExtension(safeName).ToLowerInvariant(); +string newName = Guid.NewGuid().ToString("N") + ext; +// 저장 경로 (웹 루트 외부 권장) +string uploadPath = Server.MapPath("~/Uploads/"); +if (!Directory.Exists(uploadPath)) +{ +Directory.CreateDirectory(uploadPath); +} +string savePath = Path.Combine(uploadPath, newName); +try +{ +FileUpload1.SaveAs(savePath); +Response.Write("업로드 성공: " + HttpUtility.HtmlEncode(newName)); +} +catch (Exception ex) +{ +Response.Write("업로드 실패: " + HttpUtility.HtmlEncode(ex.Message)); +} + + +![이미지 750-0](images/p0750_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +751 +※ PHP +§ move_uploaded_file의 경우, php.ini 파일 내 'upload_tmp_dir' 속성에 정의된 경로에 'php***.tmp' 형식의 임시 +파일로 업로드되며, 유효하지 않은 파일의 경우 삭제 처리됨 +§ 화이트리스트 방식의 확장자 검증 및 MIME 타입 검증 로직을 구현하여 허용된 유형의 파일만 업로드 허용 +} +else +{ +Response.Write("업로드할 파일을 선택하세요."); +} +} +} +... +파일 업로드 보안 코드 예시 +// 파일명 정규화 +function normalize_filename($filename) { +$filename = urldecode($filename); +$filename = normalizer_normalize($filename, Normalizer::FORM_C); +$filename = str_replace("\0", "", $filename); +$filename = preg_replace('/[<>:"\/\\\\|?*]/', '', $filename); +$filename = preg_replace('/^[\.\s]+|[\.\s]+$/u', '', $filename); +return $filename; +} +// 이중 확장자 차단 +function is_valid_extension($filename, $allowed_exts) { +$safe = normalize_filename($filename); +if (substr_count($safe, '.') !== 1) return false; +$ext = strtolower(pathinfo($safe, PATHINFO_EXTENSION)); +return in_array($ext, $allowed_exts, true); +} +// 확장자 검증 +function save_upload($file, $uploadDir) { + + +![이미지 751-0](images/p0751_img0.png) + + +--- + +| 한국인터넷진흥원 | +752 +§ +$allowed_exts = ['jpg','jpeg','png','pdf','txt']; +$allowed_mime = ['image/jpeg','image/png','application/pdf','text/plain']; +if (!is_valid_extension($file['name'], $allowed_exts)) { +throw new Exception("허용되지 않은 확장자"); +} +// MIME 시그니처 확인 +$mime = mime_content_type($file['tmp_name']); +if (!in_array($mime, $allowed_mime, true)) { +throw new Exception("허용되지 않은 파일 유형"); +} +// 파일명 난수화 +$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); +$newName = bin2hex(random_bytes(16)) . '.' . $ext; +$dest = rtrim($uploadDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $newName; +if (!move_uploaded_file($file['tmp_name'], $dest)) { +throw new Exception("파일 저장 실패"); +} +return $newName; +} + + +![이미지 752-0](images/p0752_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +753 +FD +(상) +Web Application(웹) + +## 15. 파일 다운로드 + +개요 +점검 내용 +웹 사이트에서 허용된 경로 외 다른 경로의 파일 접근 및 다운로드 가능 여부 점검 +점검 목적 +허용된 경로 외 다른 경로의 비인가된 접근을 방지하여, 공격자가 임의의 경로에 존재하는 파일을 +열람하거나 다운로드하는 것을 차단하기 위함 +보안 위협 +Ÿ 해당 취약점이 존재할 경우, 공격자는 파일 다운로드 시 애플리케이션의 파라미터 값을 조작하여 웹 +사이트의 중요한 파일(DB 커넥션 파일, 애플리케이션 파일 등) 또는 웹 애플리케이션 서버 루트에 +있는 중요한 설정 파일(/etc/passwd, /etc/shadow 등)을 다운로드할 수 있음 +Ÿ CGI, JSP, PHP 등 파일 다운로드 기능을 제공하는 애플리케이션에서 입력 경로를 검증하지 않는 +경우, 공격자는 임의의 문자(../.. 등)나 주요 파일명을 입력하여 웹 애플리케이션 서버의 홈 +디렉터리를 벗어나 임의의 위치에 있는 파일을 열람하거나 다운로드할 수 있음 +참고 +※ 경로 추적: 웹 서버와 웹 애플리케이션의 파일 또는 디렉터리에 대한 접근이 적절히 통제되지 않아, +중요한 파일과 데이터에 비인가된 접근을 허용하는 취약점 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 애플리케이션 서버, 웹 방화벽 +판단 기준 +양호 : 입력값이 검증되어 허용된 경로와 파일만 접근 가능하고, 경로 조작 및 임의 시스템 파일 +다운로드가 불가능하며, 다운로드 디렉터리 외의 접근과 상위 디렉터리 접근이 차단된 경우 +취약 : 입력값이 검증없이 처리되어 임의의 경로로 접근이 가능하거나 비인가된 파일을 다운로드할 수 +있는 경우 +조치 방법 +다운로드 시 허용된 경로 이외의 디렉터리와 파일에 접근할 수 없도록 구현하고, 서버 사이드에서 ../..와 +같은 경로 이동 관련 문자열에 대해 입력값 검증을 수행하여 비인가된 접근을 차단함 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 753-0](images/p0753_img0.png) + + +--- + +| 한국인터넷진흥원 | +754 +점검 및 조치 사례 +- 점검 방법 +Step 1) 웹 사이트 내 파일 다운로드 기능 식별 후 파일 다운로드 요청 및 응답 패킷 내 URL 파라미터, POST +데이터, 쿠키 등을 통해 파일 이름 및 경로 노출 여부 확인(또는 웹 사이트 내 이미지 렌더링 시 이미지 +파일의 경로를 참조하는 경우) +[ 프록시 도구를 이용한 파일 다운로드 파라미터 확인 ] +Step 2) 파일 다운로드 시 요청 패킷 내 파일 경로를 상대 경로(../../ 또는 ..\..\)로 변조하여 요청할 경우 +정상적으로 해당 경로 내 파일 다운로드 여부 확인 +[ 프록시 도구를 이용한 경로 조작 및 임의 시스템 파일 다운로드 시도 ] + + +![이미지 754-0](images/p0754_img0.png) + + +![이미지 754-1](images/p0754_img1.png) + + +![이미지 754-2](images/p0754_img2.png) + + +![이미지 754-3](images/p0754_img3.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +755 +Step 3) "Step 2"에서 파일 다운로드가 불가능한 경우 변조한 파일 경로를 아래의 인코딩(또는 치환, 종단 문자 +추가)을 적용하여 우회 가능 여부 확인 +[ 입력값 인코딩을 통한 우회 공격 시도 ] +※ 참고: 운영체제별 중요 시스템 파일 예시 +구분 +파일 경로 +설명 +Linux +/etc/passwd +시스템유저 계정 리스트 +/etc/group +시스템그룹 정보 리스트 +/etc/hosts +호스트명과 IP주소 매핑 정보 +/var/log/message +시스템 메시지 로그 +~.bash_history +사용자 명령어 기록 +/etc/service +활성화된 서비스 정보 +Windows +C:\Windows\System32\config\SAM +사용자 계정 및 암호의 해시 정보 +C:\Windows\System32\config\SYSTEM +시스템 설정과 관련된 레지스트리 파일 +C:\Windows\System32\config\AppEvent.evt +응용프로그램 이벤트 로그 +C:\Windows\System32\config\SecEvent.evt +보안 이벤트 로그 +C:\Windows\System32\drivers\etc\hosts +호스트명과 IP주소 매핑 정보 + + +![이미지 755-0](images/p0755_img0.png) + + +![이미지 755-1](images/p0755_img1.png) + + +--- + +| 한국인터넷진흥원 | +756 +※ 참고: 우회 방안 예시 +§ 인코딩 적용 : 필터링 시스템이 특정 문자열 패턴을 차단하는 경우 문자열을 인코딩하여 우회 시도 +인코딩 방식 +사용 예시 +16bit 유니코드 인코딩 +.(%u002e), /(%u2215), \(%u2216) +URL 인코딩 +.(%2e), /(%2f), \(%5c) +더블 URL 인코딩 +.(%252e), /(%252f), \(%255c) +Base64인코딩 +../../etc/passwd (Li4vLi4vZXRjL3Bhc3N3ZA==) +HTML 엔티티 인코딩 +../../etc/passwd +§ 특수문자 중첩 사용 : 필터링 시스템이 단일 패턴(../)을 감지하여 소거할 경우, 중복된 경로 문자를 사용하여 +우회( ....// → ../ ) +§ 종단 문자 추가 : 필터링 시스템이 특정 확장자만 허용할 때 Nullbyte, 개행 문자 등을 사용하여 우회([파일 +명]%00.jpg , [파일명]%0a.jpg 등) +§ 문자열 패턴 검증 우회 : 시스템 파일 관련 단어(etc, passwd 등)들을 필터링할 때 대소문자 변환(EtC, PaSswD +등), URL인코딩과 조합(e%74c%2Fpa%73%73wd) 등의 방법을 사용하여 우회 +- 조치 방법 + +## 1. 파일 다운로드의 취약점은 주로 파일 이름 조작으로 인해 발생되므로 파일의 이름을 데이터베이스에 + +저장하고 다운로드 수행 시 요청 파일 이름과 비교하여 적절한지 확인하여 사용자가 조작할 수 있는 공격 +포인트를 제거 + +## 2. 파일 다운로드가 가능한 디렉터리를 별도의 파티션에서 관리하거나 특정 디렉터리로 한정하여 다른 + +디렉터리에서는 파일을 다운받을 수 없도록 설정 +3. URL을 통해 파일 경로를 직접 노출시키지 않고, 파일 ID나 토큰을 사용하여 파일 경로를 은닉 + +## 4. 공격자가 입력값 변조를 통한 경로 추적이 불가하도록 파일 확장자 등의 일부 패턴을 화이트리스트로 + +적용하여 검증하고, 경로 추적 관련 특수문자(. / \ % 등) 필터링 로직 구현 + + +![이미지 756-0](images/p0756_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +757 +※ Java +특수문자 필터링을 통한 입력값 검증 로직 예시 +public class FileDownloadUtil { +//파일 이름에 영문,숫자,일부 특수문자를 제외한 \,/ 문자 등이 탐지되었을 때 다운로드 차단 +public static boolean isValidFileName(String fileName) { +return fileName != null && fileName.matches("^[a-zA-Z0-9._-]+$"); +} + +private static final Set ALLOWED_EXTENSIONS; + +//허용 확장자 리스트 +static { +Set tempSet = new HashSet<>(); +tempSet.add("jpg"); +tempSet.add("png"); +ALLOWED_EXTENSIONS = Collections.unmodifiableSet(tempSet); +} +public static boolean isAllowedExtension(String filePath) { +String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase(); +// 파일 확장자 검증 +return ALLOWED_EXTENSIONS.contains(extension); +} +} +... +@GetMapping("/downloadFile") +public ResponseEntity downloadFile(@RequestParam String filename, +HttpServletResponse response) throws IOException { +if(!FileDownloadUtil.isValidFileName(filename) || !FileDownloadUtil.isAllowedExtension(filename)) { + +// 다운로드 컨트롤러에 검증 로직 적용 +return ResponseEntity.badRequest().build(); +} +... + + +![이미지 757-0](images/p0757_img0.png) + + +--- + +| 한국인터넷진흥원 | +758 +※ ASP.NET +§ 경로 정규화: 다양한 형태의 파일 경로를 표준화된 형식으로 변환시키는 과정으로 ../ 와 같은 상대 경로 +참조를 해석하고 제거하여 허가되지 않은 디렉터리 접근을 차단함 +경로 정규화를 통한 경로 검증 로직 예시 +filename = Path.GetFileName(filename); +var uploadsFolder = Path.Combine(_environment.WebRootPath, "uploads"); +//지정된 업로드 폴더와 정규화된 파일 이름을 결합 +var filePath = Path.GetFullPath(Path.Combine(uploadsFolder, filename)); +... +if (!filePath.StartsWith(uploadsFolder, StringComparison.OrdinalIgnoreCase)) { +//해당 파일이 업로드 폴더 내 존재하는지 검증 +return BadRequest("Invalid file path."); +} +... +※ PHP +§ php.ini 에서 magic_quotes_gpc를 On으로 설정하여 .\./ 와 같은 역 슬러시 문자 입력 시 치환되도록 설정이 +가능하나, PHP 5.4.0 이후로는 해당 기능이 제거됨 +§ filter_input() 함수를 이용해 사용자 입력 데이터를 안전하게 필터링할 수 있으며, realpath() 함수를 이용해 +경로를 정규화하고 실제 경로를 반환하므로, 이를 통해 상위 경로 탐색을 방지함 +경로 정규화를 통한 경로 검증 로직 예시 +// 파일 다운로드 요청 처리 +if (isset($_GET['file'])) { +// file 파라미터 검증 및 처리 +$file = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING); +$filePath = realpath('../uploads/' . $file); //지정된 업로드 디렉터리에 실제 존재하는지 확인 +// 파일 경로가 지정된 디렉토리 내에 있는지 확인 +if ($filePath && strpos($filePath, realpath('../uploads/')) === 0) { +downloadFile($filePath); +} else { +echo "잘못된 파일 경로입니다."; +exit; +... + + +![이미지 758-0](images/p0758_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +759 +IS +(상) +Web Application(웹) + +## 16. 불충분한 세션 관리 + +개요 +점검 내용 +세션 만료 기간 설정, 예측 가능한 세션 ID 생성, 고정된 세션 ID 발행 등 세션 관리 정책을 점검하고, +인증 토큰(JWT 등) 사용 시에도 안전한 서명 알고리즘 사용 여부, 안전한 비밀 키 사용 여부, 토큰 만료 +등의 정책 점검 +점검 목적 +사용자의 세션 ID를 적절히 관리하여 공격자가 불법적으로 접근하거나 비인가적인 세션 탈취를 +차단하기 위함 +보안 위협 +사용자에게 발급되는 세션 ID가 만료되지 않거나, 고정 및 예측 가능한 형태일 경우, 공격자는 해당 세션 +ID를 탈취하여 타 사용자나 시스템에 무단 접근할 수 있으며, 이로 인해 중요 데이터의 무결성이 훼손될 +수 있음 +참고 +※ 세션(Session): 일정 시간 동안 같은 사용자(브라우저)로 부터 들어오는 일련의 요구를 하나의 +상태로 보고 그 상태를 일정하게 유지시키는 기술 +※ JSON Web Token (JWT): 헤더, 페이로드, 서명으로 구성되는 JSON 객체 형식이며, 사용자 +정보가 클라이언트에 저장되고 서버에 요청 시마다 전송하여 인증 상태를 유지시키는 기술 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 애플리케이션 서버 +판단 기준 +양호 : 추측 불가능한 세션 ID가 발급되고, 세션 종료 시간이 설정되어 있는 경우 +취약 : 세션 ID가 일정한 패턴으로 발급되거나 세션 종료 시간이 설정되지 않아 세션 재사용이 가능한 +경우 +조치 방법 +추측 불가능한 세션 ID가 발급되도록 로직을 구현하고, 세션 종료 시간 설정 또는 자동 로그아웃 기능을 +구현하여 사이트 특성에 맞게 적정 시간을 설정 +조치 시 영향 +일반적인 경우 영향 없음 + + +![이미지 759-0](images/p0759_img0.png) + + +--- + +| 한국인터넷진흥원 | +760 +점검 및 조치 사례 +- 점검 방법 +l 세션(Session) +Step 1) 로그인 과정에서 발급받은 세션 ID를 확인하고 로그아웃 후 재 로그인 시 각각 발급받은 세션 ID에 대해 +일정한 패턴이 존재하는지 검증 +§ 각각 발급받은 세션 ID를 확인하여 예측 가능한 패턴으로 생성되는지 검증 +§ 각각 발급받은 세션 ID를 확인하여 고정된 값으로 생성되는지 검증 +[ 세션 발급 시 동일 패턴 유무 확인 ] +Step 2) 로그인 후 웹 페이지 사용을 중지한 상태로 일정 시간이 경과하였을 때 세션이 유지되는지 확인 +[ 일정 시간 경과 시 세션 만료 유무 확인 ] + + +![이미지 760-0](images/p0760_img0.png) + + +![이미지 760-1](images/p0760_img1.png) + + +![이미지 760-2](images/p0760_img2.png) + + +![이미지 760-3](images/p0760_img3.png) + + +![이미지 760-4](images/p0760_img4.png) + + +![이미지 760-5](images/p0760_img5.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +761 +l JWT(JSON Web Token) +Step 1) 사용자 인증 및 상태 유지를 위해 JWT(JSON Web Token)가 사용되는지 확인 +(JWT는 일반적으로 Authorization 헤더에 포함되고, 경우에 따라 Cookie 헤더에 포함, 또는 POST +데이터로 전송할 수 있음) +[ JWT 토큰 사용 유무 확인 ] +Step 2) JWT(JSON Web Token)의 헤더와 페이로드 부분을 각각 Base64 디코딩하여 내용을 확인할 수 있으며, +안전한 알고리즘을 사용하는지, 토큰 만료 설정이 적절하게 되었는지, 민감정보가 노출되는지 등을 확인 +[ JWT 토큰 디코딩 시 민감정보 노출 유무 확인 ] +Step 3) 페이로드 변조 후 서명을 삭제하거나 None 알고리즘으로 변조하였을 때 토큰이 유효하여 타 계정의 +권한 탈취가 가능한지 확인 +[ JWT 토큰 익스플로잇 가능성 유무 확인 ] + + +![이미지 761-0](images/p0761_img0.png) + + +![이미지 761-1](images/p0761_img1.png) + + +![이미지 761-2](images/p0761_img2.png) + + +![이미지 761-3](images/p0761_img3.png) + + +--- + +| 한국인터넷진흥원 | +762 +- 조치 방법 +l 세션 고정 및 예측 + +## 1. 공격자가 하나의 유효한 세션 ID를 추측하는 것이 불가능에 가깝도록 길고 복잡한 세션 ID를 생성하여야 + +하며, 새 로그인 시 기존 세션 ID를 폐기하고 새로운 세션 ID로 발급해야 하며, 이용 중인 계정에 대해 접속 +IP와 디바이스 정보를 통해 동시 세션 로그인 여부를 검사해야함 +※ Java +세션 생성 로직 예시 +@RequestMapping("/login") +public String login(HttpServletRequest request) { +request.changeSessionId(); // 신규 로그인 시 세션 ID 변경 +return "redirect:/home"; +} +//Spring Security 설정에서 세션 고정 방지 및 세션 ID 생성 +@Override +protected void configure(HttpSecurity http) throws Exception { +http.sessionManagement() +.sessionFixation().migrateSession() +.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) +.maximumSessions(1).maxSessionsPreventsLogin(false) +.expiredUrl("/login?expired"); +} +※ ASP.NET +web.config 파일 설정을 통한 불규칙 세션 ID 발급 설정 예시 + +... + + +... + + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +763 +※ PHP +세션 생성 로직 예시 +// 기존 세션을 삭제하고 새로운 세션 ID를 생성 +session_start(); +session_regenerate_id(true); +// 예측 불가한 안전한 세션 ID 생성 +ini_set('session.entropy_length', '256'); +ini_set('session.entropy_file', '/dev/urandom'); +l 세션 만료 + +## 1. 세션 타임아웃이 미흡하게 설정되어있는 경우 사용자가 로그아웃하지 않고 시스템을 떠날 때 타 사용자가 재 + +사용할 수 있는 여지가 존재하므로, 세션 타임아웃 기능을 구현하고 서비스에 따라 10~60분으로 설정할 것을 +권고(아래 예시들은 60분으로 설정) +※ Java +web.xml 파일 설정을 통한 세션 만료 시간 설정 예시 + +60 + +§ Spring Boot의 경우 application.properties 및 소스코드를 통하여 세션 만료 제어 가능 +application.properties 파일 설정을 통한 세션 만료 시간 설정 예시 +server.servlet.session.timeout=60m +소스 코드를 통한 세션 만료 시간 설정 예시 +public String login(HttpSession session) { +session.setMaxInactiveInterval(3600); // 60분 (3600초) +return "Session timeout set to 60 minutes"; +... +decryption="AES" +/> + + +![이미지 763-0](images/p0763_img0.png) + + +--- + +| 한국인터넷진흥원 | +764 +※ ASP.NET +web.config 파일 설정을 통한 세션 만료 시간 설정 예시 + + + + + +§ Global.asax 파일에서 세션을 확인하고 접근을 제어하는 로직 추가 예시 +(ASP.NET Core의 경우 Startup.cs 파일에서 ConfigureServices, Configure 메소드 수정) +Global.asax 파일을 통한 세션 만료 시간 설정 예시 +... +public class Global : HttpApplication { +void Session_Start(object sender, EventArgs e) { +Session.Timeout = 60; // 60분 +} +} +... +※ PHP +php.ini 파일 설정을 통한 세션 만료 시간 설정 예시 +session.gc_maxlifetime = 3600 ; 60분 (3600초) +session.cookie_lifetime = 3600 ; 60분 (3600초) +.htaccess 파일 설정을 통한 세션 만료 시간 설정 예시 +php_value session.gc_maxlifetime 3600 +php_value session.cookie_lifetime 3600 +소스 코드를 통한 세션 만료 시간 설정 예시 +... +ini_set('session.gc_maxlifetime', 3600); // 60분 (3600초) +ini_set('session.cookie_lifetime', 3600); // 60분 (3600초) +session_start(); +... + + +![이미지 764-0](images/p0764_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +765 +l JWT(JSON Web Token) + +## 1. 서명이 없는 JWT(JSON Web Token)는 쉽게 조작할 수 있으므로, 서명이 포함된 JWT를 사용하고 해당 + +서명에 대한 검증 로직 구현 + +## 2. 취약한 서명 알고리즘을 사용하는 경우 공격자가 서명을 위조할 수 있으므로, 강력한 서명 알고리즘 사용 + +권고 + +## 3. 공격자가 JWT의 알고리즘을 none으로 설정하여 서명을 우회할 수 있으므로 토큰의 알고리즘을 명시적으로 + +설정 +§ 안전한 서명 알고리즘을 사용하더라도 약한 키(짧거나 예측 가능한 키)는 추측될 위험이 있으므로, 강력하고 +랜덤한 비밀 키를 사용하고, 유출되지 않도록 키를 안전하게 관리 +§ 토큰이 재사용되지 않도록 짧은 만료 시간을 설정하고, 리프레시 토큰을 사용하여 주기적으로 토큰을 갱신 +안전한 JWT 서명 알고리즘 +HS256~512 +비밀 키를 사용하여 메시지에 해시를 적용 +(숫자가 높을수록 긴 출력 길이를 가지며, 높은 수준의 보안을 제공) +RS256~512 +비대칭 키 쌍을 사용하여 서명 생성. 서명은 개인 키로 생성되고 공개 키로 검증 +ES256~512 +타원 곡선 암호화를 사용하여 서명을 생성 +취약한 JWT 서명 알고리즘 +HS1 +취약한 암호화 기술인 SHA-1을 기반으로 함 +RS1 +취약한 암호화 기술인 SHA-1을 기반으로 함 +none +서명을 생략하여 무결성 검증에 취약함 +plaintext +서명을 평문으로 전달하여, 무결성 검증에 취약함 + + +![이미지 765-0](images/p0765_img0.png) + + +--- + +| 한국인터넷진흥원 | +766 +SN +(상) +Web Application(웹) + +## 17. 데이터 평문 전송 + +개요 +점검 내용 +서버와 클라이언트 간 통신 시 데이터의 암호화 여부 점검 +점검 목적 +서버와 클라이언트 간 통신 시 데이터의 암호화 전송 미흡으로 정보 유출의 위험을 방지하고자 함 +보안 위협 +웹 애플리케이션 통신은 주로 텍스트 기반으로 이루어지므로, 서버와 클라이언트 간 암호화 프로세스를 +구현하지 않을 경우 악의적인 사용자가 네트워크 도청(Sniffing)을 통해 정보를 탈취 및 도용할 수 있음 +참고 +※ Sniffing : 스니퍼(sniff: 냄새를 맡다, 코를 킁킁거리다)를 이용하여 네트워크 상의 데이터를 +도청하는 행위 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 애플리케이션 서버 +판단 기준 +양호 : 중요 정보 전송구간에 암호화 통신이 적용된 경우 +취약 : 중요 정보 전송구간에 암호화 통신이 이루어지지 않는 경우 +조치 방법 +사이트의 중요 정보 전송구간(로그인, 회원가입, 회원정보관리, 게시판 등)에 대하여 암호화 통신(https, +애플리케이션방식) 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 중요 정보(인증정보, 개인정보, 로그인페이지 등)를 송수신하는 페이지 존재 여부 확인 +[ 중요 정보 송수신 페이지 확인 ] + + +![이미지 766-0](images/p0766_img0.png) + + +![이미지 766-1](images/p0766_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +767 +Step 2) 중요 정보 송수신 페이지가 암호화 통신(https, 데이터 암호화 등)을 하는지 확인 +[ 데이터 통신 시 패킷 내 중요 정보 평문 노출 유무 확인 ] +Step 3) 취약한 버전의 암호 프로토콜 사용 시 암호화된 통신 내용이 유출될 가능성이 존재하므로 취약한 버전의 +SSL(SSL 2.0, 3.0) 사용 여부를 점검 +[ 취약한 버전의 암호 프로토콜 사용 여부 확인 ] + + +![이미지 767-0](images/p0767_img0.png) + + +![이미지 767-1](images/p0767_img1.png) + + +![이미지 767-2](images/p0767_img2.png) + + +![이미지 767-3](images/p0767_img3.png) + + +--- + +| 한국인터넷진흥원 | +768 +- 조치 방법 + +## 1. 웹상에서의 전송 정보를 제한하여 불필요한 비밀번호, 주민등록번호, 계좌정보와 같은 중요 정보의 전송을 + +최소화하여야 하며, 중요 정보에 대해서는 SSL 등의 암호화 통신을 사용하여 도청으로부터의 위험을 제거함 + +## 2. 쿠키와 같이 클라이언트 사이드에서 노출되는 곳에 비밀번호, 인증인식 값, 개인정보 등의 중요 정보 제거 + + +## 3. 암호화 전송 시 프로토콜 설계의 결함이 있는 SSLv2, SSLv3은 비활성화 필수, TLSv1.2 이상 사용을 권장함 + +※ Apache +Apache 서버 설정을 통한 프로토콜 제어 예시 +httpd-ssl.conf 또는 ssl.conf의 SSL 관련 VirtualHost 설정에 아래를 추가 SSLProtocol all -SSLv2 -SSLv3 –TLSv1 +-TLSv1.1 +※ IIS +IIS 서버 설정을 통한 프로토콜 제어 예시 +[SSL v2 사용 안 함] +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SS +L 2.0\Server] +하위에 '새로만들기' > 'DWord(32비트)' 값 선택 > 이름 부분에 'Enabled' 입력 > 데이터 부분에 '0' 입력 > 시스템 재부팅 +[SSL v3 사용 안함] +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SS +L 3.0\Server] +하위에 '새로만들기' > 'DWord(32비트)' 값 선택 > 이름 부분에 'Enabled' 입력 > 데이터 부분에 '0' 입력 > 시스템 재부팅 + + + +![이미지 768-0](images/p0768_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +769 +CC +(상) +Web Application(웹) + +## 18. 쿠키 변조 + +개요 +점검 내용 +쿠키 변조를 통한 임의의 타 사용자 권한 탈취 여부 점검 +점검 목적 +쿠키를 사용하는 경우, 안전한 알고리즘으로 암호화하여 공격자가 쿠키 값 변조를 통해 다른 사용자로 +위장하거나 권한을 변경하는 것을 방지하기 위함 +보안 위협 +클라이언트에 전달되는 쿠키에 사용자 식별 값이 평문으로 노출될 경우 쿠키 변조를 통해 타 사용자의 +유효한 세션을 취득할 수 있으며, 기타 중요 정보의 유출 및 변조 가능함 +참고 +※ 쿠키(Cookie): 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각. 브라우저는 그 데이터 +조각들을 저장 후, 동일한 서버에 대하여 재요청 시 저장된 데이터를 함께 전송 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드 +판단 기준 +양호 : 쿠키를 사용하지 않고 서버 사이드 세션을 사용하고 있거나, 쿠키를 사용하는 경우 안전한 +알고리즘(SEED, 3DES, AES)이 적용되어 있는 경우 +취약 : 안전한 알고리즘이 적용되지 않은 쿠키를 사용하거나, 쿠키로만 인증 및 권한 부여를 적용하는 +경우 +조치 방법 +쿠키 대신 서버 사이드 세션 방식을 사용하거나, 쿠키를 통해 인증 등 중요한 기능을 구현해야 하는 경우 +안전한 알고리즘(SEED, 3DES, AES 등)을 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 일반 사용자 계정으로 로그인 한 뒤 쿠키 내용 및 발행되는 쿠키에 중요 정보(인증을 위한 ID, 권한을 +위한 구분자 등)의 노출 여부 확인 후 변조 시도 +[ 쿠키 내 사용자 및 주요 권한 검증값 존재 유무 확인 ] + + +![이미지 769-0](images/p0769_img0.png) + + +![이미지 769-1](images/p0769_img1.png) + + +--- + +| 한국인터넷진흥원 | +770 +Step 2) 쿠키 내 노출되는 중요 정보를 변조하여 다른 사용자 및 권한으로 정상 이용이 가능한지 확인 +[ 쿠키 값 변조를 통한 타 사용자 권한 탈취 여부 확인 ] +- 조치 방법 + +## 1. 쿠키 대신 보안성이 강한 서버 사이드 세션 방식 사용. 클라이언트 사이드 방식인 쿠키는 구조상 다양한 + +취약점에 노출될 가능성이 존재 + +## 2. 쿠키를 사용해서 중요 정보나 인증을 구현해야 할 경우엔 안전한 알고리즘(SEED, 3DES, AES 등) 적용 + + +## 3. 쿠키 서명(HMAC)을 통해 변조 여부 검증 및 HttpOnly, Secure, SameSite 속성을 적용하여 보안 강화 + +※ Java +AES + HMAC CookieUtil 예시 +public class CookieUtil { +private static final int IV_LEN = 16, HMAC_LEN = 32; +private static final SecureRandom RNG = new SecureRandom(); +private final byte[] encKey; +private final byte[] hmacKey; +public CookieUtil(byte[] encKey, byte[] hmacKey) { +if (encKey.length != 32) throw new IllegalArgumentException("AES key must be 32 bytes"); +this.encKey = encKey; +this.hmacKey = hmacKey; +} +// 쿠키 생성 (HttpOnly, Secure, SameSite 설정 포함) +public void addSecureCookie(HttpServletResponse resp, String name, String plaintext, int maxAgeSec) +throws Exception { +byte[] iv = new byte[IV_LEN]; RNG.nextBytes(iv); + + +![이미지 770-0](images/p0770_img0.png) + + +![이미지 770-1](images/p0770_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +771 +// AES-256-CBC 암호화 +Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); +cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); +byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); +Mac mac = Mac.getInstance("HmacSHA256"); +mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); +mac.update(iv); mac.update(ciphertext); +byte[] hmac = mac.doFinal(); +byte[] payload = new byte[iv.length + hmac.length + ciphertext.length]; +System.arraycopy(iv, 0, payload, 0, iv.length); +System.arraycopy(hmac, 0, payload, iv.length, hmac.length); +System.arraycopy(ciphertext, 0, payload, iv.length + hmac.length, ciphertext.length); +String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(payload); +// HttpOnly, Secure 속성 설정 +Cookie cookie = new Cookie(name, encoded); +cookie.setHttpOnly(true); +cookie.setSecure(true); +cookie.setPath("/"); +cookie.setMaxAge(maxAgeSec); +// SameSite 속성은 Cookie API로 직접 지정 불가 → 헤더로 세팅 +String header = String.format( +"%s=%s; Max-Age=%d; Path=/; HttpOnly; Secure; SameSite=Strict", +name, encoded, maxAgeSec +); +resp.addHeader("Set-Cookie", header); +} +// 쿠키 읽기 (HMAC 검증 + 복호화) +public String readSecureCookie(String value) throws Exception { +if (value == null) return null; +byte[] data; +try { data = Base64.getUrlDecoder().decode(value); } catch (IllegalArgumentException e) { return null; } +if (data.length < IV_LEN + HMAC_LEN + 1) return null; + + +![이미지 771-0](images/p0771_img0.png) + + +--- + +| 한국인터넷진흥원 | +772 +※ ASP.NET +byte[] iv = Arrays.copyOfRange(data, 0, IV_LEN); +byte[] hmac = Arrays.copyOfRange(data, IV_LEN, IV_LEN + HMAC_LEN); +byte[] ciphertext = Arrays.copyOfRange(data, IV_LEN + HMAC_LEN, data.length); +// 복호화 전 HMAC 검증 +Mac mac = Mac.getInstance("HmacSHA256"); +mac.init(new SecretKeySpec(hmacKey, "HmacSHA256")); +mac.update(iv); mac.update(ciphertext); +byte[] calc = mac.doFinal(); +if (!MessageDigest.isEqual(hmac, calc)) return null; // 변조 탐지 후 복호화 +Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); +cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(encKey, "AES"), new IvParameterSpec(iv)); +return new String(cipher.doFinal(ciphertext), StandardCharsets.UTF_8); +} +} +MachineKey 적용 예시 + + + +// 쿠키 발급 (FormsAuthenticationTicket 활용) +var ticket = new FormsAuthenticationTicket( +1, "username", DateTime.Now, DateTime.Now.AddMinutes(30), true, "role=admin"); +string encrypted = FormsAuthentication.Encrypt(ticket); // 내부적으로 AES + HMAC 적용 +var cookie = new HttpCookie("AuthCookie", encrypted) { +// 쿠키 보안 적용 +HttpOnly = true, +Secure = true, + + +![이미지 772-0](images/p0772_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +773 +※ PHP +SameSite = SameSiteMode.Lax +}; +Response.Cookies.Add(cookie); +OpenSSL + HMAC 적용 예시 + time() + 3600, +'httponly' => true, +'secure' => true, +'samesite' => 'Lax' +]); +} +function getSecureCookie($name, $encKey, $hmacKey) { +if (!isset($_COOKIE[$name])) return null; +$data = base64_decode($_COOKIE[$name]); +$iv = substr($data, 0, 16); +$hmac = substr($data, 16, 32); +$ciphertext = substr($data, 48); +$calcHmac = hash_hmac('sha256', $ciphertext, $hmacKey, true); +if (!hash_equals($hmac, $calcHmac)) { +return null; // 무결성 검증 실패 + + +![이미지 773-0](images/p0773_img0.png) + + +--- + +| 한국인터넷진흥원 | +774 +} +return openssl_decrypt($ciphertext, "AES-256-CBC", $encKey, OPENSSL_RAW_DATA, $iv); +} +?> + + +![이미지 774-0](images/p0774_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +775 +AE +(상) +Web Application(웹) + +## 19. 관리자페이지 노출 + +개요 +점검 내용 +유추 가능한 URL 또는 설계상의 오류로 인해 관리자 페이지 및 메뉴에 접근 가능 여부 점검 +점검 목적 +관리자 페이지의 URL을 추측하기 어렵게 설정하고, 웹 사이트 설계 오류를 수정하여 비인가자의 관리자 +메뉴 접근을 방지하기 위함 +보안 위협 +웹 관리자의 권한이 노출될 경우, 웹 사이트 변조뿐만 아니라 취약성 정도에 따라 웹 애플리케이션 +서버의 권한까지도 노출될 가능성이 있으므로 시스템 전체의 보안이 심각하게 위협받을 수 있음 +참고 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 애플리케이션 서버, 웹 방화벽 +판단 기준 +양호 : 유추하기 쉬운 URL로 관리자 페이지 접근이 불가능한 경우 +취약 : 유추하기 쉬운 URL로 관리자 페이지 접근 또는 계정 로그인이 가능한 경우 +조치 방법 +유추하기 어려운 이름(포트 번호 변경 포함)으로 관리자 페이지를 변경하여 비인가자가 접근할 수 없도록 +하고, 근본적인 해결을 위해 지정된 IP만 관리자 페이지에 접근할 수 있도록 제한함. 단, 부득이하게 +관리자 페이지를 외부에 노출해야 하는 경우, 관리자 페이지 로그인 시 2차 인증(OTP, VPN, 인증서 +등)을 적용 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 유추하기 쉬운 URL, 포트 등 접속을 시도하여 관리자 페이지가 노출되는지 확인 +[ 유추하기 쉬운 관리자 페이지 URL 접근 시도 ] + + +![이미지 775-0](images/p0775_img0.png) + + +![이미지 775-1](images/p0775_img1.png) + + +--- + +| 한국인터넷진흥원 | +776 +Step 2) 추측하기 쉬운 관리자 계정(admin, adm, administrator, manager 등) 및 비밀번호를 입력하여 로그인 가능 +한지 확인 +[ 추측 가능한 관리자 계정 로그인 유무 확인 ] +- 조치 방법 + +## 1. 일반 사용자의 접근이 불필요한 관리자 로그인 페이지 주소를 유추하기 어려운 URL 및 포트로 변경 + + +## 2. 관리자 페이지에 접근 가능한 IP를 지정하여 지정된 IP만 관리자 페이지에 접근 가능하도록 제한 + + +## 3. 부득이하게 관리자 페이지를 외부에 노출해야 하는 경우, 관리자 페이지 로그인 시 2차 인증(OTP, VPN, + +인증서 등)을 적용 + +## 4. 지정된 IP만 관리자 페이지에 접근 가능하도록 제한관리자 페이지의 하위 페이지 URL을 직접 입력하여 + +접근하지 못하도록 페이지 별 세션 검증 필요 + + +![이미지 776-0](images/p0776_img0.png) + + +![이미지 776-1](images/p0776_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +777 +CC +(상) +Web Application(웹) + +## 20. 자동화 공격 + +개요 +점검 내용 +웹 애플리케이션의 특정 프로세스(로그인 시도, 게시글 등록, SMS 발송 등)에 대한 반복적인 요청 시 +통제 여부를 확인하여, 자동화 공격(봇 공격 등)을 방지 여부 점검 +점검 목적 +무차별 대입 공격 및 자동화 공격으로 인한 자원 고갈, 계정 탈취, 서비스 거부 상태를 방지하기 위함 +보안 위협 +웹 애플리케이션의 특정 프로세스에 대한 반복적인 요청을 통제하지 않을 경우, 무차별 대입 공격으로 +사용자 계정을 탈취할 수 있으며, 자동화 공격을 통해 게시글 등록 또는 SMS 발송 요청을 반복하여 웹 +애플리케이션 자원을 고갈시킬 수 있음 +참고 +※ 소스코드 및 취약점 점검 필요 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 소스코드, 웹 방화벽 +판단 기준 +양호 : 웹 애플리케이션의 특정 프로세스에 대한 반복적인 요청 시 통제가 적절한 경우 +취약 : 웹 애플리케이션의 특정 프로세스에 대한 반복적인 요청 시 통제가 미흡한 경우 +조치 방법 +웹 애플리케이션의 특정 프로세스에 대한 대량 사용을 통제하는 로직을 구현하고, 웹 방화벽의 룰셋을 +설정하여 대량의 불특정 프로세스 요청을 차단 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) 로그인 실패 일정 횟수 초과 시 반복적인 요청에 대한 통제가 미흡한지 확인 +[ 자동화 공격을 통한 사용자 계정 로그인 유무 확인 ] + + +![이미지 777-0](images/p0777_img0.png) + + +![이미지 777-1](images/p0777_img1.png) + + +![이미지 777-2](images/p0777_img2.png) + + +--- + +| 한국인터넷진흥원 | +778 +Step 2) 본인인증(계좌 인증, SMS인증 등)을 반복적으로 시도하여 반복적인 요청에 대한 통제가 미흡한지 확인 +[ 자동화 공격을 통한 인증번호 탈취 유무 확인 ] +- 조치 방법 + +## 1. 로그인 시도, 게시글 등록, 본인인증(계좌 인증, SMS 발송 등)에 대한 사용자 요청에 대하여 횟수 제한을 설정 + +또는 *캡차 등 일회성 확인 로직을 구현해야 함 + +## 2. 자동화 공격을 시도하면 짧은 시간에 다량의 패킷이 전송되므로 이를 공격으로 감지하고 방어할 수 있는 + +IDS/IPS 시스템을 구축해야 함. +※ 캡차(CAPTCHA): 사람과 컴퓨터를 구분하기 위한 자동화된 테스트 +[ 캡차(CAPTCHA) 예시 ] + + + +![이미지 778-0](images/p0778_img0.png) + + +![이미지 778-1](images/p0778_img1.png) + + +![이미지 778-2](images/p0778_img2.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +779 +WM +(상) +Web Application(웹) + +## 21. 불필요한 Method 악용 + +개요 +점검 내용 +PUT, DELETE, TRACE 등 불필요한 HTTP 메소드의 악용 여부 확인 +점검 목적 +불필요한 HTTP 메소드(PUT, DELETE, TRACE 등) 요청을 제한하여 서버의 무단 접근 및 악의적인 +행위(임의 파일 생성, 데이터 삭제 등)를 방지하기 위함 +보안 위협 +PUT, DELETE, TRACE 등의 메소드가 활성화되어 있는 것만으로는 취약 여부를 판단하기 어려우나, +해당 메소드들이 악용될 경우, 조작된 Server Side Script 파일 업로드, 민감 데이터 삭제, 서버 정보 +노출 등이 가능함 +참고 +※ Server Side Script: 웹에서 사용되는 스크립트 언어 중 서버 측에서 실행되는 스크립트 +※ XST(Cross-Site Tracing): TRACE 메소드를 악용하여 httpOnly 등으로 보호된 세션 및 쿠키를 +탈취할 수 있는 공격 기법 +점검 대상 및 판단 기준 +대상 +웹 애플리케이션 서버 +판단 기준 +양호 : 웹 애플리케이션에 불필요한 메소드(PUT, DELETE, TRACE, CONNECT 등)로 변조한 요청 +패킷 전송 시 해당 메소드를 통하여 임의의 행위로부터 악용이 제한되는 경우 +취약 : 웹 애플리케이션에 불필요한 메소드(PUT, DELETE, TRACE, CONNECT 등)로 변조한 요청 +패킷 전송 시 해당 메소드를 통하여 임의의 행위에 대한 악용이 가능한 경우 +조치 방법 +WEB/WAS의 설정파일을 변경하여 불필요한 메소드의 사용을 제한 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +- 점검 방법 +Step 1) PUT 메소드를 사용하여 악성 파일(Server Side Script, 악성 스크립트 등) 생성 시도 + + +![이미지 779-0](images/p0779_img0.png) + + +--- + +| 한국인터넷진흥원 | +780 +[ 프록시 도구를 이용한 임의 파일 생성 시도 ] +Step 2) 생성된 악성 파일을 이용하여 웹쉘(Webshell) 업로드, 크로스사이트 스크립팅 등의 공격 수행 가능 +[ 생성 파일 실행 유무 확인 ] +Step 3) DELETE 메소드를 사용하여 서버에 저장된 임의의 데이터 삭제 가능 +[ 프록시 도구를 이용한 임의 파일 삭제 시도 ] + + +![이미지 780-0](images/p0780_img0.png) + + +![이미지 780-1](images/p0780_img1.png) + + +![이미지 780-2](images/p0780_img2.png) + + +![이미지 780-3](images/p0780_img3.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +781 +- 조치 방법 +1. PUT, DELETE 메소드를 이용해 파일 생성/삭제가 가능한 WebDAV(Web Distributed Authoring and +Versioning) HTTP 확장 프로그램은 비활성화를 권장하며, 부득이하게 사용해야할 경우 망 분리 되어있는 +내부망에서 적절한 인증 절차를 거쳐 운용 +2. RESTful API 애플리케이션 상의 PUT, DELETE 메소드의 경우 기본적으로 취약하게 설계된 메소드가 +아니며, POST 메소드를 통하여 구현하는 것과 동일하게 핵심 비즈니스 로직에 대한 시큐어 코딩을 구현 + +## 3. 불필요하게 활성화된 메소드는 비활성화하여 잠재적인 취약점의 최소화를 권장 + +(웹 서버 설정 파일 구성은 리눅스 OS 내에서도 종류 및 버전에 따라 차이가 있으므로 개발 환경에 맞게 +조치) +l Apache +§ 명령어를 통한 dav 및 dav_fs 모듈 비활성화(WebDAV) +WebDAV 기능 비활성화 +sudo a2dismod dav +sudo a2dismod dav_fs +§ apache2.conf 파일 수정을 통한 WebDAV 서비스 비활성화 +PUT, DELETE 메소드 비활성화 (WebDAV 서비스 비활성화) +/etc/apache2/apache2.conf (예시 :Apache/2.4.52-ubuntu) +... + +Dav On #On으로 활성화 되어있을 경우 Off 또는 지시어 삭제로 비활성 조치 +Options Indexes FollowSymLinks +AllowOverride None +Require all granted + +#PUT, DELETE 메소드 사용이 허용되어 있을 경우, +#PUT, DELETE 부분을 삭제하여 해당 메소드 사용을 금지 +Order Allow,Deny +Deny from all + + +... + + +![이미지 781-0](images/p0781_img0.png) + + +--- + +| 한국인터넷진흥원 | +782 +§ Apache의 경우 TRACE 메소드가 기본적으로 활성화 되어있음 +§ 데비안 계열은 /etc/apache2/apache2.conf 파일 내 TraceEnable Off 지시어를 추가하는 것으로 비활성화 조치 +(2.4.X 버전부터 /etc/apache2/conf-available/security.conf 파일에서 TRACE 사용을 별도로 관리하며, 기본적으 +로 비활성화 되어있음) +TRACE 메소드 비활성화 +# /etc/apache2/apache2.conf (예시 :Apache/2.2.8-ubuntu) +... +TraceEnable Off # 파일 내용 하단에 추가 +... +§ 레드햇 계열의 경우 httpd.conf 파일 수정을 통해 TRACE 메소드 비활성화 조치 +TRACE 메소드 비활성화 +# /etc/httpd/conf/httpd.conf (예시: Apache/2.4.6-CentOS) +... +TraceEnable Off # 파일 내용 하단에 추가 +... +§ mod_rewrite 모듈을 이용한 CONNECT 메소드 비활성화 +CONNECT 메소드 비활성화 +# /etc/apache2/sites-available/000-default.conf (예시: Apache/2.4.52-ubuntu) +... + +... + +RewriteEngine On +RewriteCond %{REQUEST_METHOD} ^CONNECT #CONNECT 비활성화 +RewriteRule .* - [F] + +... + + + +![이미지 782-0](images/p0782_img0.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +783 +l Tomcat +§ WebDAV 서비스 활성화 시 PUT, DELETE 메소드를 이용하여 임의의 파일 생성 및 삭제 가능 +PUT, DELETE 메소드 비활성화 (WebDAV 서비스 비활성화) +// 아래 코드를 제거하여 WebDAV 서비스 비활성화 또는 readonly 옵션을 true로 설정하여 쓰기 권한 제거 + +webdav +org.apache.catalina.servlets.WebdavServlet + +debug +1 + + +listings +false + + +readonly +true // true로 설정하여 쓰기 권한 제거 + +1 + +§server.xml 설정 파일 내 allowTrace="true" 설정 값을 제거하여 TRACE 메소드 비활성화 +TRACE 메소드 비활성화 +// + +§ Tomcat의 경우 설계 목적이 웹 애플리케이션 서버임에 따라, 프록시 서버에서 주로 사용되는 CONNECT 메 +소드를 기본적으로 지원하지 않음 + + +![이미지 783-0](images/p0783_img0.png) + + +--- + +| 한국인터넷진흥원 | +784 +l Nginx +§ WebDAV 서비스 활성화 시 PUT, DELETE 메소드를 이용하여 임의의 파일 생성 및 삭제 가능 +§ /etc/nginx/sites-available/default 설정 파일 수정(환경 : nginx/1.18) +PUT, DELETE 메소드 비활성화 (WebDAV 서비스 비활성화) +... +location /dav/ { +... +dav_methods PUT DELETE MKCOL COPY MOVE; #dav_methods 지시어 부분 삭제 +... +} +§ Nginx는 보안상의 이유로 0.5.17버전 이후로 TRACE 메소드를 항상 405 응답 코드로 거부하도록 패치되었으 +며, 기본적으로 포워드 프록시 기능을 지원하지 않으므로 CONNECT 메소드를 허용하지 않음 +l IIS 5.0 이하 +§ IIS 5.0의 경우 기본적으로 WebDAV 기능이 활성화 되어있어 PUT/DELETE 등의 메소드를 통하여 임의적인 +파일 생성 삭제가 가능하므로 WebDAV 기능을 비활성화하거나 서비스 중인 애플리케이션의 디렉터리 내 '쓰 +기' 권한을 제거하여 PUT/DELETE를 통한 파일 생성 삭제 제한 가능 +§ 레지스트리 편집기(Regedt32.exe) → HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3S +VC\Parameters → 편집 → 값 추가 → 값 이름: DisableWebDAV, 데이터형식: REG_DWORD, 데이터: 1 → II +S 재시작 +[ 생성 파일 실행 유무 확인 ] + + +![이미지 784-0](images/p0784_img0.png) + + +![이미지 784-1](images/p0784_img1.png) + + +--- + +10. Web Application(웹) 보안 +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +785 +§ 웹 애플리케이션 홈 디렉터리 또는 가상 디렉터리 내 쓰기 권한 제거 +[ 디렉터리 쓰기 권한 제거 ] +l IIS 6.0 이상 +§ IIS 6.0 이상의 버전의 경우 IIS 웹 서버 설치 시 WebDAV 기능이 비활성화 되어있으며, OPTIONS/TRACE/G +ET/HEAD/POST 메소드가 기본적으로 활성화되어있음 +§ TRACE 메소드 비활성화를 위하여 요청 필터링 → HTTP 동사 → 동사 거부 메뉴에 TRACE 메소드 추가 +[ IIS 관리자 요청 필터링 메뉴 접근 ] + + +![이미지 785-0](images/p0785_img0.png) + + +![이미지 785-1](images/p0785_img1.png) + + +![이미지 785-2](images/p0785_img2.png) + + +--- + +| 한국인터넷진흥원 | +786 +[ 동사 거부 설정 내 TRACE 메소드 추가 ] + + +![이미지 786-0](images/p0786_img0.png) + + +![이미지 786-1](images/p0786_img1.png) + + +--- + +가상화 장비 +Chapter 11 + +## 1. 계정 관리················································································································790 + + +## 2. 시스템 서비스 관리··································································································812 + + +## 3. 가상 머신 관리·········································································································837 + + +## 4. 가상 네트워크 관리··································································································845 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 787-0](images/p0787_img0.png) + + +--- + +| 한국인터넷진흥원 | +788 +01 +가상화 장비 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +계정 로그오프/세션 관리 +상 +HV-01 +가상화 장비 외부접속 차단 +상 +HV-02 +가상화 장비 루트계정 관리 +상 +HV-03 +가상화 장비 계정 권한 관리 +상 +HV-04 +가상화 장비 사용자 인증 강화 +상 +HV-05 +비밀번호 관리정책 설정 +상 +HV-06 +계정 잠금 임계값 설정 +상 +HV-07 + +## 2. 시스템 서비스 관리 + +점검항목 +항목 +중요도 +항목코드 +시스템 사용 주의사항 출력 설정 +중 +HV-08 +NTP 및 시각 동기화 설정 +중 +HV-09 +SNMP Community String 복잡성 적용 +중 +HV-10 +MOB(Managed Object Browser) 서비스 비활성화 +상 +HV-11 +ESXi Shell 비활성화 +상 +HV-12 +ESXi Shell 세션 종료 시간 설정 +상 +HV-13 +원격 로그 서버 이용 +중 +HV-14 +시스템 주요 이벤트 로그 설정 +상 +HV-15 +비휘발성 경로 내 로그 파일 저장 +상 +HV-16 + + +![이미지 788-0](images/p0788_img0.png) + + +![이미지 788-1](images/p0788_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +789 + +## 3. 가상 머신 관리 + +점검항목 +항목 +중요도 +항목코드 +코어덤프 수집 기능 활성화 +상 +HV-17 +가상 머신의 장치 변경 제한 설정 +상 +HV-18 +가상 머신의 불필요한 장치 제거 +상 +HV-19 +가상 머신 콘솔 클립보드 복사&붙여넣기 기능 비활성화 +상 +HV-20 +가상 머신 콘솔 드래그 앤 드롭 기능 비활성화 +상 +HV-21 + +## 4. 가상 네트워크 관리 + +점검항목 +항목 +중요도 +항목코드 +가상 스위치 MAC 주소 변경 정책 비활성화 +상 +HV-22 +가상 스위치 무차별(Promiscuous) 모드 정책 비활성화 +상 +HV-23 +가상 스위치 위조전송(Forged Transmits) 모드 정책 비활성화 +상 +HV-24 +주기적 보안 패치 및 벤더 권고사항 적용 +상 +HV-25 + + +![이미지 789-0](images/p0789_img0.png) + + +--- + +| 한국인터넷진흥원 | +790 +HV-01 +(상) +가상화 장비 > 1. 계정 관리 +계정 로그오프/세션 관리 +개요 +점검 내용 +웹 콘솔 및 사용자 Shell Session Timeout 설정 여부 점검 +점검 목적 +Session Timeout 기능을 구현하여 공격자가 만료되지 않은 세션 활용을 방지하기 위함 +보안 위협 +세션의 만료 기간을 정하지 않거나, 만료기한이 너무 길게 설정된 경우 악의적인 사용자가 만료되지 +않은 세션을 활용하여 불법적인 접근을 시도할 수 있는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : 웹 콘솔 및 사용자 Shell Session Timeout 설정이 600초(10분) 이하로 설정된 경우 +취약 : 웹 콘솔 및 사용자 Shell Session Timeout 설정이 600초(10분)를 초과하여 설정된 경우 +조치 방법 +600초(10분) 동안 입력이 없을 경우 접속된 클라이언트 세션을 끊도록 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi, vCenter +[웹 콘솔 Session Timeout 설정] +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 호스트 > 관리 > 시스템 > 고급 설정으로 이동 +Step 3) UserVars.HostClientSessionTimeout 설정이 600초(10분)로 설정되어 있는지 확인 +[ 웹 콘솔 Session Timeout 설정 확인 ] + + +![이미지 790-0](images/p0790_img0.png) + + +![이미지 790-1](images/p0790_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +791 +Step 4) 600초(10분) 이하로 설정되어 있지 않은 경우 [옵션 편집]을 클릭하여 아래와 같이 수정 +[ 옵션 값 수정 ] +l XenServer, KVM +[사용자 Shell Session Timeout 설정] +Step 1) 호스트에 접속 +Step 2) echo $TMOUT 명령어를 이용하여 사용자 Shell Session Timeout 설정 확인 +$ echo $TMOUT +9000 +Step 3) Session Timeout 10분을 초과하는 경우 아래 두 라인 추가 +$ vi /etc/profile +readonly TMOUT=600; +export TMOUT +Step 4) 변경된 설정 적용 +$ source /etc/profile +l Nutanix +[사용자 Shell Session Timeout 설정] +Step 1) Controller VM에 접속하여 User Shell Session Timeout 설정 확인 +sudo cat /etc/profile.d/os-security.sh +readonly TMOUT=9000 2> /dev/null || echo "TMOUT already set." +readonly HISTFILE +mesg n 2>/dev/null +Step 2) vi 편집기를 이용하여 User Shell Session Timeout을 10분으로 설정 + + +![이미지 791-0](images/p0791_img0.png) + + +![이미지 791-1](images/p0791_img1.png) + + +--- + +| 한국인터넷진흥원 | +792 +sudo vi /srv/salt/security/CVM/shellCVM.sls +ossecuritycreate: +file: +- managed +- name: /etc/profile.d/os-security.sh +- mode: 644 +- user: root +- group: root +- contents: | +readonly TMOUT=600 2> /dev/null || echo "TMOUT already set." +Step 3) 변경된 설정 적용 +sudo salt-call state.sls security/CVM/shellCVM +[SSH Idle Timeout 설정] +Step 1) Controller VM에 접속하여 SSH Idle Timeout 설정 확인 +sudo cat /etc/ssh/sshd_config | grep "ClientAliveInterval" +Step 2) vi 편집기를 이용하여 SSH Idle Timeout을 10분으로 설정 +sudo vi /srv/salt/security/CVM/sshd/sshdconfCVM +ClientAliveInterval 600 +Step 3) 변경 설정 적용 +sudo salt-call state.sls security/CVM/sshdCVM +[관리 웹 콘솔 Session Timeout 설정] +Step 1) 관리 웹 콘솔 접속 +https:// +Step 2) Session Timeout 설정 적용 +Settings > UI Settings > Security Setting의 SESSION TIMTOUT 설정을 10분으로 설정 + + +![이미지 792-0](images/p0792_img0.png) + + +![이미지 792-1](images/p0792_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +793 +HV-02 +(상) +가상화 장비 > 1. 계정 관리 +가상화 장비 외부접속 차단 +개요 +점검 내용 +허용할 호스트에 대한 접속 IP 제한 설정 여부 점검 +점검 목적 +허용한 호스트만 서비스를 사용하게 하여 비인가자의 무단 접근 시도를 예방하기 위함 +보안 위협 +호스트에서 실행되는 서비스에 대한 접근을 제한하지 않으면 비인가자의 무단 접근에 노출되어 가상화 +시스템 침해사고의 위험이 존재함 +참고 +※ TCP Wrapper: 호스트 기반의 네트워킹 ACL(Access Control List) 시스템 +※ IPTables: 리눅스 커널 방화벽이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 +있게 해주는 서비스 +※ FirewallD: Linux 운영체제를 위한 방화벽 관리 도구 +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : 허용된 IP에서만 관리 콘솔 및 원격 접속이 가능하도록 제한된 경우 +취약 : 허용된 IP에서만 관리 콘솔 및 원격 접속이 가능하도록 제한되지 않은 경우 +조치 방법 +호스트에서 제공하는 방화벽 애플리케이션을 이용하여 서비스 접속 허용 IP 등록 설정 +조치 시 영향 +IPTables의 기본 정책을 Drop으로 변경하는 경우에는 애플리케이션 간의 연결 현황을 확인 후 변경이 +필요함 +점검 및 조치 사례 +l VMware ESXi, vCenter +[웹 콘솔 접속 IP 제한 설정] +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 네트워킹 > 방화벽 규칙으로 이동 +Step 3) [ESXi] SSH 서버 “허용된 IP주소” 확인 +Step 4) [vSphere] 웹 클라이언트 “허용된 IP주소” 확인 +[ 허용된 IP주소 확인 ] + + +![이미지 793-0](images/p0793_img0.png) + + +![이미지 793-1](images/p0793_img1.png) + + +--- + +| 한국인터넷진흥원 | +794 +Step 5) IP 제한 설정이 적용되어 있지 않은 경우 vSphere Web Client(SSH 서버) > 설정 편집 > 다음 네트워크의 +연결만 허용 선택 +Step 6) 접속 허용 IP 입력 +[ 접속 허용 IP 입력 ] +l XenServer, KVM +[IPTables를 통한 접근 통제] +Step 1) 호스트 접속 +$ iptables -nL --line-number +Chain INPUT (policy ACCEPT) +num target prot opt source destination +1 xapi_nbd_input_chain tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10809 +2 ACCEPT 47 -- 0.0.0.0/0 0.0.0.0/0 +3 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0 +… 중간 생략 … +Chain RH-Firewall-1-INPUT (2 references) +num target prot opt source destination +1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 +2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 255 +3 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67 +4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED +5 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW udp dpt:694 + + +![이미지 794-0](images/p0794_img0.png) + + +![이미지 794-1](images/p0794_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +795 +Step 2) IPTables 정책 목록을 통해 접속 IP 제한 설정 확인 +Step 3) SSH 원격 접속을 허용된 IP로만 제한 +$ iptables -I RH-Firewall-1-INPUT 1 -p tcp -s <허용 IP> --dport 22 -j +ACCEPT +$ iptables -I RH-Firewall-1-INPUT 2 -p tcp -s 0.0.0.0/0 --dport 22 -j DROP +Step 4) IPTables의 변경된 정책 저장 및 서비스 재시작 +$ service iptables save +$ service iptables restart +l Nutanix +Step 1) Controller VM에 접속하여 설정 확인 +sudo cat /etc/hosts.allow | grep –v "^#“ +Step 2) vi 편집기를 이용하여 hosts.allow 파일에 ssh 접속이 필요한 IP만 접속을 허용 하도록 설정 +sudo vi /srv/salt/security/CVM/network/hosts.allow +sshd: 192.168.100.1 : ALLOW +Step 3) 변경 설정 적용 +sudo salt-call state.sls security/CVM/networkCVM +6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW tcp dpt:22 +7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW tcp dpt:80 +8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 ctstate NEW tcp dpt:443 +9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21064 +10 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 5404,5405 +11 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited + + +![이미지 795-0](images/p0795_img0.png) + + +--- + +| 한국인터넷진흥원 | +796 +HV-03 +(상) +가상화 장비 > 1. 계정 관리 +가상화 장비 루트계정 관리 +개요 +점검 내용 +별도의 관리자 계정을 생성하여 관리 여부 점검 +점검 목적 +허용한 호스트만 서비스를 사용하게 하여 비인가자의 무단 접근 시도를 예방하기 위함 +보안 위협 +루트 계정은 누구나 알 수 있는 계정이기 때문에 비인가자의 접속 시도 및 비밀번호 무차별 대입 공격에 +노출될 위험이 존재함 +참고 +※ 무차별 대입 공격(Brute-force Attack): 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 것 +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter +판단 기준 +양호 : 별도의 관리자 계정을 생성하여 가상화 장비가 관리된 경우 +취약 : 루트 계정으로 가상화 장비가 관리된 경우 +조치 방법 +별도의 계정을 생성하여 관리자 권한을 부여하고 루트 계정의 권한은 제거하거나 비활성화 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 호스트 > 작업 > 사용 권한으로 이동 +Step 3) root 계정의 관리자 권한이 제거되고 별도의 관리자 권한이 존재하는지 확인 +[ 별도의 관리자 권한 확인 ] + + +![이미지 796-0](images/p0796_img0.png) + + +![이미지 796-1](images/p0796_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +797 +Step 4) root 계정 이외에 관리자 권한이 부여된 계정이 없는 경우 별도의 계정 생성 +호스트 > 관리 > 보안 및 사용자 > 사용자 추가 +[ 별도의 계정 생성 ] +Step 5) 별도로 생성한 계정에 관리자 권한 부여 +호스트 > 작업 > 사용 권한 > 사용자 추가 +[ 계정 관리자 권한 부여 ] +Step 6) root 계정의 관리자 권한 제거 +[ root 계정 관리자 권한 제거 ] + + +![이미지 797-0](images/p0797_img0.png) + + +![이미지 797-1](images/p0797_img1.png) + + +![이미지 797-2](images/p0797_img2.png) + + +![이미지 797-3](images/p0797_img3.png) + + +--- + +| 한국인터넷진흥원 | +798 +HV-04 +(상) +가상화 장비 > 1. 계정 관리 +가상화 장비 계정 권한 관리 +개요 +점검 내용 +공용 계정 등 불필요한 계정이 존재하는지 여부 점검 +점검 목적 +사용하지 않는 불필요한 계정을 관리함으로써 관리되지 않는 계정을 통한 비인가자의 무단 접속 또는 +공격을 차단하기 위함 +보안 위협 +시스템에 등록되어 있는 불필요한 계정을 관리하지 않을 경우 비인가자의 무단 접근이 가능하며, 공용 +계정 및 퇴사자 계정이 존재할 경우 해당 계정을 통한 침해사고 발생 시 사후 추적이 어려울 수 있는 +위험이 존재함 +참고 +※ 1인 1계정 사용을 원칙으로 운영해야 하며, 공용 계정은 가급적 사용을 지양해야 함 +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : 불필요한 공용 계정 및 퇴사자 계정이 존재하지 않은 경우 +취약 : 불필요한 공용 계정 및 퇴사자 계정이 존재하는 경우 +조치 방법 +불필요한 공용 계정 및 퇴사자 계정 제거 +조치 시 영향 +애플리케이션에서 사용하는 계정의 경우 삭제 시 서비스 가용성에 영향을 줄 수 있음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 호스트 > 관리 > 보안 및 사용자 > 사용자로 이동 +[ 등록된 계정 확인 ] + + +![이미지 798-0](images/p0798_img0.png) + + +![이미지 798-1](images/p0798_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +799 +Step 3) 불필요한 계정이 존재하는 경우 해당 계정 삭제 +[ 불필요한 계정 제거 ] +l XenServer, KVM +Step 1) 호스트 접속 +Step 2) 등록되어 있는 계정 확인 +$ grep /bin/bash /etc/passwd | cut -f1 -d: +root +user1 +Step 3) 불필요한 계정이 존재하는 경우 해당 계정 삭제 +$ userdel -r <계정명> +l Nutanix +Step 1) Nutanix Web 콘솔 페이지 접속 +https://:9440 접속 +Step 2) Settings > Users an Roles > Local User Management를 선택하고 불필요한 계정이 존재하는 경우 해당 +계정 삭제 + + +![이미지 799-0](images/p0799_img0.png) + + +![이미지 799-1](images/p0799_img1.png) + + +![이미지 799-2](images/p0799_img2.png) + + +--- + +| 한국인터넷진흥원 | +800 +HV-05 +(상) +가상화 장비 > 1. 계정 관리 +가상화 장비 사용자 인증 강화 +개요 +점검 내용 +사용자 계정별 적절한 권한이 부여 여부 점검 +점검 목적 +가상화 시스템에 등록한 계정들에 용도별 권한을 부여함으로써 권한 없는 사용자의 설정 변경으로 인한 +시스템 침입 경로 유출 위험을 줄이고 관리자 계정이 아닌 일반 계정이 공격자에게 탈취되었을 때 가상화 +시스템을 장악하지 못하도록 하기 위함 +보안 위협 +가상화 시스템에 등록된 계정이 모두 관리자 권한으로 부여된 경우 권한 없는 사용자의 의도하지 않은 +설정 변경을 통하여 공격자에게 가상화 시스템 침입 경로 제공 위험이 존재함 +참고 +※ 최고 관리자 권한은 최소한의 계정에만 부여 +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : 계정별 불필요한 권한이 부여되지 않은 경우 +취약 : 계정별 불필요한 권한이 부여된 경우 +조치 방법 +불필요한 권한이 부여된 계정에 대한 권한 제거 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 호스트 > 작업 > 사용 권한으로 이동 +Step 3) 등록된 계정별 사용 권한 확인 +[ 등록된 계정별 사용 권한 확인 ] + + +![이미지 800-0](images/p0800_img0.png) + + +![이미지 800-1](images/p0800_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +801 +Step 4) 불필요한 권한이 부여되어 있는 경우 해당 계정 선택 +Step 5) 역할에 맞는 권한으로 변경 +[ 계정 권한 변경 ] +l XenServer +[Active Directory에 가입되어 있지 않은 경우] +Step 1) 호스트에 접속 +Step 2) bash 사용자 목록 확인 +$ grep /bin/bash /etc/passwd | cut -f1 -d: +root +user1 +Step 3) 불필요한 계정 제거 +$ gpasswd -d user1 users +[Active Directory에 가입되어 있는 경우] +Step 4) 호스트에 접속 +Step 5) 계정별 부여된 권한 확인 +$ xe subject-list +uuid ( RO): bb6dd239-1fa9-a06b-a497-3be28b8dca44 +subject-identifier ( RO): S-1-5-21-1539997073-1618981536-2562117463-2244 +other-config (MRO): subject-name: example01\user_vm_admin; subject-upn: \ +user_vm_admin@XENDT.NET; subject-uid: 1823475908; subject-gid: 1823474177; \ +subject-sid: S-1-5-21-1539997073-1618981536-2562117463-2244; subject-gecos: \ +user_vm_admin; subject-displayname: user_vm_admin; subject-is-group: false; \ +subject-account-disabled: false; subject-account-expired: false; \ +subject-account-locked: false;subject-password-expired: false + + +![이미지 801-0](images/p0801_img0.png) + + +![이미지 801-1](images/p0801_img1.png) + + +--- + +| 한국인터넷진흥원 | +802 +Step 6) 부적절한 권한이 있는 경우 기존의 역할을 제거하고 새로운 역할을 추가 +$ xe subject-role-remove uuid= role-name= +$ xe subject-role-add uuid= role-name= +l KVM +Step 1) 호스트에 접속 +Step 2) bash 계정 목록 확인 +$ grep /bin/bash /etc/passwd | cut -f1 -d: +root +user1 +Step 3) 불필요한 계정 제거 +$ gpasswd -d user1 users +l Nutanix +Step 1) 웹 콘솔에 접속하여 등록된 사용자 계정 및 권한 확인 +https://:9440 접속 +Settings > Users an Roles > Local User Management 선택 +Step 1) 불필요한 권한이 부여되어 있는 경우 해당 계정 선택 +roles (SRO): vm-admin +… 이하 생략 … + + +![이미지 802-0](images/p0802_img0.png) + + +![이미지 802-1](images/p0802_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +803 +Step 2) 불필요한 권한 제거 + + +![이미지 803-0](images/p0803_img0.png) + + +![이미지 803-1](images/p0803_img1.png) + + +![이미지 803-2](images/p0803_img2.png) + + +--- + +| 한국인터넷진흥원 | +804 +HV-06 +(상) +가상화 장비 > 1. 계정 관리 +비밀번호 관리정책 설정 +개요 +점검 내용 +로그인 계정에 대한 비밀번호 관리 정책 설정 여부 점검 +점검 목적 +로그인 계정 비밀번호에 대한 관리 정책 미흡으로 인한 계정 탈취를 방지하기 위함 +보안 위협 +가상화 시스템에 등록된 계정이 유추하기 쉬운 비밀번호 설정 등 미흡한 비밀번호 관리 정책이 적용되어 +있으면 무차별 대입 공격을 통한 계정 탈취로 인한 공격자에게 가상화 시스템 침입 경로 제공 위험이 +존재함 +참고 +※ 정책 기준: 영문 숫자 특수문자 2개 조합 시 10자리 이상, 3개 조합 시 8자리 이상, 비밀번호 변경 +기간 90일 이하 +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : 로그인 계정 비밀번호 관리 정책이 적용된 경우 +취약 : 로그인 계정 비밀번호 관리 정책이 적용되지 않은 경우 +조치 방법 +로그인 계정 비밀번호를 관리 정책에 맞게 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) WEB 콘솔 페이지 접속 +https:// +Step 2) 호스트> 관리 > 시스템 > 고급 설정으로 이동 +Step 3) Security.PasswordQualityControl 설정값 확인 +[ Security.PasswordQualityControl 설정값 확인 ] + + +![이미지 804-0](images/p0804_img0.png) + + +![이미지 804-1](images/p0804_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +805 +Step 4) min = N0, N1, N2, N3, N4 중 N3, N4의 값이 8 미만일 경우 [옵션 편집]을 클릭하여 아래와 같이 수정 +[ 옵션 값 수정 ] +Step 5) Security.PasswordMaxDays 설정값 확인 +[ 최대 암호 수명 값 확인 ] +Step 6) 90일 이하로 설정되어 있지 않은 경우 [옵션 편집]을 클릭하여 아래와 같이 수정 +[ 최대 암호 수명 값 90 설정 ] +※ (예시) retry = M min = N0, N1, N2, N3, N4 +§ M : 암호 변경 시, 조건을 불만족하는 암호 입력 시 다시 암호를 되묻는 횟수 +§ N0 : 문자 종류(대문자, 소문자, 숫자, 특수문자) 중 한 가지만 사용해 구성된 암호에 허용되는 최소 암호 글자 +수 +§ N1 : 문자 종류(대문자, 소문자, 숫자, 특수문자) 중 두 가지를 사용해 구성된 암호에 허용되는 최소 비밀번호 +길이 +§ N2 : 암호 문구 사용 시, 허용되는 최소 비밀번호 길이 + + +![이미지 805-0](images/p0805_img0.png) + + +![이미지 805-1](images/p0805_img1.png) + + +![이미지 805-2](images/p0805_img2.png) + + +![이미지 805-3](images/p0805_img3.png) + + +--- + +| 한국인터넷진흥원 | +806 +§ N3 : 문자 종류(대문자, 소문자, 숫자, 특수문자) 중 세 가지를 사용해 구성된 암호에 허용되는 최소 비밀번호 +길이 +§ N4 : 문자 종류(대문자, 소문자, 숫자, 특수문자) 중 네 가지를 사용해 구성된 암호에 허용되는 최소 비밀번호 +길이 +disabled : 길이에 관계 없이 해당 종류의 암호를 사용하지 않음 +암호의 첫 문자로 사용되는 대문자와 마지막 문자로 사용되는 숫자는 문자 종류의 수로 포함되지 않음 +l VMware vCenter +Step 1) vSphere Client 접속 후, 다음 메뉴에 접근하여 확인(vSphere Client 버전에 따라, 메뉴 명칭은 달라질 수 +있음) +Step 2) (vCenter6.5) "관리" > "Single Sign On" > "구성" > "Policies" > "암호 정책" > 비밀번호 정책 확인 +Step 3) (vCenter8) "관리" > "Single Sign On" > "구성" > "로컬 계정" > "암호 정책" > 비밀번호 정책 확인 +Step 4) 비밀번호 정책 설정 적용 +l XenServer +Step 1) XenServer 접속 > Local Command Shell 실행 +Step 2) 아래 명령어를 통해 비밀번호 설정 확인 +# cat /etc/login.defs | grep –i "PASS_MAX_DAYS“ +# cat /etc/login.defs | grep –i "PASS_MIN_DAYS“ +# cat /etc/login.defs | grep -i "PASS_MIN_LEN" +Step 3) 아래 명령어 적용 +# vi /etc/login.defs +PASS_MIN_LEN 8 +PASS_MAX_DAYS 90 +PASS_MIN_DAYS 7 +l KVM +[RHEL 8 이후 버전 기반 리눅스] +Step 1) 아래 경로 설정 파일 확인 +/etc/security/faillock.conf + + +![이미지 806-0](images/p0806_img0.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +807 +/etc/security/pwquality.conf +Step 2) 비밀번호 정책 설정이 되어 있지 않으면 적용 설정 +비밀번호 정책 설정 예시(UNIX 기반) +예시)password requisite pam_cracklib.so try_first_pass retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 +ocredit=-1 +l Nutanix +Step 1) Controller VM에 접속하여 비밀번호 최소 사용 기간 확인 +sudo cat /etc/login.defs | grep –v "^#" | grep "PASS_MAX_DAYS" +Step 2) Controller VM에 접속하여 비밀번호 최소 사용 기간을 90일로 설정 +sudo vi /srv/salt/security/CVM/pamCVM.sls +passmaxdays: +file: +- replace +- name: /etc/login.defs +- pattern: ‘^PASS_MAX_DAYS.*’ +- repl: ‘PASS_MAX_DAYS 90’ +Step 3) 변경된 설정을 /etc/login.defs 파일에 적용 +sudo salt-call state.sls security/CVM/pamCVM +Step 4) checkusergroupsCVM.sls 파일에서 admin, nutanix 계정의 비밀번호 최대 사용기간 설정 변경 +sudo vi /srv/salt/security/CVM/checkusergroupsCVM.sls +nutanix: +user: +- present +- shell: /bin/bash +- home: /home/nutanix +- uid: 1000 +- gid_from_name: True +- mindays: 1 +- maxdays: 92 +admin: +user: +- present +- shell: /bin/bash +- home: /home/admin + + +![이미지 807-0](images/p0807_img0.png) + + +--- + +| 한국인터넷진흥원 | +808 +Step 5) 변경한 설정 적용 +sudo salt-call state.sls security/CVM/checkusergroupsCVM +Step 6) Controller VM에 접속하여 비밀번호 최소길이 설정 확인 +cat /etc/login.defs | grep -v "^#" | grep "PASS_MIN_LEN“ +Step 7) 비밀번호 최소 길이를 8자리 이상으로 변경 +sudo vi /srv/salt/security/CVM/pamCVM.sls +passminlendef: +file: +- replace +- name: /etc/login.defs +- pattern: '^PASS_MIN_LEN.*' +- repl: 'PASS_MIN_LEN 9' +- onlyif: +Step 8) 변경한 설정 적용 +sudo salt-call state.sls security/CVM/pamCVM +참고 +※ 영문, 숫자, 특수문자 2개 조합 시 10자리 이상, 3개 조합 시 8자리 이상 설정 권고 +※ 비밀번호 최대 사용 기간을 90일(3개월) 이하로 설정할 것을 권고. +※ 비밀번호 최소 사용 기간을 7일(1주) 이상으로 설정할 것을 권고. +- uid: 2000 +- gid_from_name: True +- mindays: -1 +- maxdays: 92 + + +![이미지 808-0](images/p0808_img0.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +809 +HV-07 +(상) +가상화 장비 > 1. 계정 관리 +계정 잠금 임계값 설정 +개요 +점검 내용 +로그인 계정에 대한 비밀번호 관리 정책 설정 여부 점검 +점검 목적 +잘못된 비밀번호 입력을 제한하지 않으면 무차별 대입 공격을 통한 계정 탈취 위협이 발생할 수 있어 +실패 횟수 설정을 통해 가상화 장비 내부 침입을 방지하기 위함 +보안 위협 +잘못된 비밀번호 입력을 제한하지 않으면 무차별 대입 공격을 통한 계정 탈취로 공격자에게 가상화 +시스템 침입 경로 제공 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, KVM +판단 기준 +양호 : 로그인 시도 실패 횟수에 따른 계정 잠금 설정이 적용된 경우 +취약 : 로그인 시도 실패 횟수에 따른 계정 잠금 설정이 적용되지 않은 경우 +조치 방법 +로그인 시도 실패 횟수 제한 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 관리 > 설정 > 시스템 > 고급 설정으로 이동 +Step 3) Security.AccountLockFailures 설정이 5 이하로 설정되어 있는지 확인 +[ 계정 잠금 실패 값 확인 ] + + +![이미지 809-0](images/p0809_img0.png) + + +![이미지 809-1](images/p0809_img1.png) + + +--- + +| 한국인터넷진흥원 | +810 +Step 4) 5 이하로 설정되어 있지 않은 경우 [옵션 편집]을 클릭하여 아래와 같이 수정 +[ 계정 잠금 실패 값 설정 ] +Step 5) Security.AccountUnlockTime 설정이 600초(10분) 이상으로 설정되어 있는지 확인 +[ 계정 잠금 해제 시간 확인 ] +Step 6) 600초(10분) 이상으로 설정되어 있지 않은 경우 [옵션 편집]을 클릭하여 아래와 같이 수정 +[ 계정 잠금 해제 시간 설정 ] +※ 시스템이 관련 기능을 지원하지 않을 경우, 내부 정책 확인 + + +![이미지 810-0](images/p0810_img0.png) + + +![이미지 810-1](images/p0810_img1.png) + + +![이미지 810-2](images/p0810_img2.png) + + +![이미지 810-3](images/p0810_img3.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +811 +l VMware vCenter +Step 1) vSphere Client 접속 후, 다음 메뉴에 접근하여 확인(vSphere Client 버전에 따라, 메뉴 명칭은 달라질 수 +있음) +(vCenter6.5) "관리" > "Single Sign On" > "구성" > "Policies" > "잠금정책(Lockout Policy)" > 접속제한 +관련 설정(실패한 최대 로그인 시도 횟수, 실패 시간 간격, 잠금 해제 시간)을 확인 +(vCenter8) "관리" > "Single Sign On" > "구성" > "로컬 계정" > "잠금정책(Lockout Policy)" > 접속제한 +관련 설정(실패한 최대 로그인 시도 횟수, 실패 시간 간격, 잠금 해제 시간)을 확인 +l KVM +Step 1) 예시) RHEL 8 이후 버전 기반 리눅스 +아래 경로 설정 파일 확인 +/etc/security/faillock.conf +/etc/security/pwquality.conf +Step 2) 비밀번호 정책 설정이 되어있지 않으면 적용 설정 +비밀번호 정책 설정 예시 +# vi /etc/pam.d/system-auth +auth required /lib/security/pam_tally.so deny=5 unlock_time=120 +no_magic_root +account required /lib/security/pam_tally.so no_magic_root reset + + +![이미지 811-0](images/p0811_img0.png) + + +--- + +| 한국인터넷진흥원 | +812 +HV-08 +(중) +가상화 장비 > 2. 시스템 서비스 관리 +시스템 사용 주의사항 출력 설정 +개요 +점검 내용 +원격 로그인 시 시스템 사용 주의사항 출력 여부 점검 +점검 목적 +원격 로그인 시 시스템 사용 주의사항을 안내해 사용자가 시스템에 접근 시 보안 정책을 인식하도록 하기 +위함 +보안 위협 +사용자가 시스템에 접근 시 보안 정책을 인식하지 못해 인위적인 공격 또는 데이터 유출 등의 보안 +위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : 시스템 사용 주의사항이 출력된 경우 +취약 : 시스템 사용 주의사항 미출력 또는 표시 문구 내에 시스템 버전 정보가 노출된 경우 +조치 방법 +시스템 사용 주의사항 출력 설정 +조치 시 영향 +일반적 경우 해당 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 호스트 > 관리 > 시스템 > 고급 설정으로 이동 +Step 3) Annotaions.WelcomeMessage 설정 값 확인 +[ 시스템 사용 주의사항 출력 값 확인 ] +Step 4) 시스템 사용 주의사항 문구가 설정되어 있지 않은 경우 [옵션 편집]을 클릭하여 문구 입력 + + +![이미지 812-0](images/p0812_img0.png) + + +![이미지 812-1](images/p0812_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +813 +- 다음의 파일들에 메시지 설정 존재 여부 확인 +1. /etc/motd 에 시스템 사용 주의사항 설정 +2. /etc/issue 파일에 로그인 경고 메시지 설정 +3. /etc/ssh/sshd_config 배너 값 설정 +l VMware vCenter +Step 1) vSphere Client 접속 후, 다음 메뉴에 접근하여 확인(vSphere Client 버전에 따라, 메뉴 명칭은 달라질 수 +있음) +(vCenter6.5) "관리" > "Single Sign On" > "구성" > "로그인 배너" > 로그인 배너 설정 여부를 확인 +(vCenter8) "관리" > "Single Sign On" > "구성" > "로그인 메시지" > 로그인 배너 설정 여부를 확인 +l KVM +Step 1) 배너 설정 여부 확인 +# cat /etc/ssh/sshd_config | grep "Banner" +Step 2) /etc/sshd/sshd_config 파일에 배너 내용 삽입 +# vi /etc/sshd/sshd_config +Banner /etc/issue.net +(예시) This system is for the use of authorized users only. +l XenServer +Step 1) 배너 설정 여부 확인 +# cat /etc/ssh/sshd_config | grep "Banner" +Step 2) /etc/sshd/sshd_config 파일에 배너 내용 삽입 +# vi /etc/sshd/sshd_config +Banner /etc/issue.net +(예시) This system is for the use of authorized users only. +l Nutanix +[ 관리 웹 콘솔 배너 설정 ] +Step 1) 웹 콘솔에 접속 +https://:9440 접속 + + +![이미지 813-0](images/p0813_img0.png) + + +--- + +| 한국인터넷진흥원 | +814 +Step 2) Settings > Apperance > Welcome Banner 메뉴 선택 > 배너 입력 > Enable Banner 체크 > Save 버튼 클릭 +[ SSH 배너 설정 ] +■ SSH 설정 파일 직접 변경 +Step 1) AHV, Controller VM에 각각 SSH 접속 +Step 2) 배너 파일 내용 입력 +sudo vi /etc/issue +Step 3) ssh 설정 파일에서 배너 파일 경로 설정 +sudo vi /etc/ssh/sshd_config +Banner /etc/issue +Step 4) ssh 데몬 재시작 +systemctl restart sshd +■ DoD 배너 설정 +Step 1) Controller VM 접속하여 DoD 배너 비활성화 +ncli cluster edit-hypervisor-security-params enable-banner=false +nutanix@cvm$ ncli cluster edit-cvm-security-params enable-banner=false +Step 2) AHV 접속하여 DoD 배너 파일 백업 +[root@AHV-host ~]# cp -a /etc/puppet/modules/kvm/files/issue.DoD \ +/etc/puppet/modules/kvm/files/issue.DoD.bak + + +![이미지 814-0](images/p0814_img0.png) + + +![이미지 814-1](images/p0814_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +815 +Step 3) AHV의 DoD 배너 파일 수정 +[root@AHV-host ~]# vi /etc/issue.DoD +Step 4) Controller VM의 DoD 배너 파일 백업 +nutanix@cvm$ sudo cp -a /srv/salt/security/CVM/sshd/DODbanner \ +/srv/salt/security/CVM/sshd/DODbannerbak +Step 5) Controller VM의 DoD 배너 파일 수정 +nutanix@cvm$ sudo vi /srv/salt/security/CVM/sshd/DODbanner +Step 6) AHV 및 Controller VM의 DoD 배너 활성화 +nutanix@cvm$ ncli cluster edit-hypervisor-security-params enable-banner=true +nutanix@cvm$ ncli cluster edit-cvm-security-params enable-banner=true + + +![이미지 815-0](images/p0815_img0.png) + + +--- + +| 한국인터넷진흥원 | +816 +HV-09 +(증) +가상화 장비 > 2. 시스템 서비스 관리 +NTP 및 시각 동기화 설정 +개요 +점검 내용 +NTP 설정을 통한 시간 동기화 여부 점검 +점검 목적 +시스템이 NTP를 통한 시간 동기화를 적용해 가상화 장비 침해, 장애 등의 위협 발생 시 원활한 로그 +분석 수행이 가능하도록 하기 위함 +보안 위협 +시스템이 NTP를 통한 시간 동기화가 되지 않을 경우 가상화 장비 침해, 장애 등의 위협 발생 시 로그 +분석을 통한 침입 경로 파악이 어려워 초기 대응 불가 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : NTP서버와 시간 동기화 설정을 적용한 경우 +취약 : NTP 서버와 시간 동기화 설정을 적용하지 않은 경우 +조치 방법 +NTP 설정 및 시각 동기화 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 호스트 > 관리 > 시스템 > 시간 및 날짜로 이동 +Step 3) NTP 설정 확인 +[ NTP 설정 확인 ] + + +![이미지 816-0](images/p0816_img0.png) + + +![이미지 816-1](images/p0816_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +817 +Step 4) NTP 서버가 설정되어 있지 않은 경우, [NTP 설정 편집]을 클릭하여 NTP 서버 정보 입력 +[ NTP 클라이언트 사용 설정 ] +l VMware vCenter +Step 1) vCenter Server 관리 페이지(https://<주소>:5480/) 접속 후, 다음 메뉴에 접근하여 확인(vCenter 버전에 따 +라, 메뉴 명칭은 달라질 수 있음) +# "시간" > "시간 동기화" > NTP 설정 여부를 확인 +l KVM +Step 1) PHC 사용 여부 확인 +Step 2) 사용하지 않으면 활성화 적용 +# echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf +Step 3) /dev/ptp0 시계를 chrony 구성에 대한 참조로 추가 설정 +# echo "refclock PHC /dev/ptp0 poll 2" >> /etc/chrony.conf +Step 4) chrony 데몬 다시 시작 +# systemctl restart chronyd +l XenServer +Step 1) XenServer 접속 > Network and Management Interface > Network Time (NTP) > Provide NTP Servers +Manually > 별도 NTP 서버 지정 설정 적용 +l Nutanix +Step 1) 웹 콘솔에 접속 + + +![이미지 817-0](images/p0817_img0.png) + + +![이미지 817-1](images/p0817_img1.png) + + +--- + +| 한국인터넷진흥원 | +818 +https:// +Step 2) Settings > NTP Servers 선택하여 NTP 서버가 설정되어 있는지 확인 +Step 3) 설정되어 있지 않은 경우 NTP 서버를 입력하고 Add 버튼을 클릭 +Step 4) Controller VM에 접속하여 타임존 설정 +ncli cluster set-timezone timezone="Asia/Seoul“ +Step 5) Controller VM에 접속하여 Nutanix 호스트 타임존 설정 +hostssh "date; mv /etc/localtime /etc/localtime.bak; ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime; +date“ +※ Nutanix를 처음 설치하면 타임존이 UTC로 설정되어 있어 실제 시간과 차이가 발생 + + +![이미지 818-0](images/p0818_img0.png) + + +![이미지 818-1](images/p0818_img1.png) + + +![이미지 818-2](images/p0818_img2.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +819 +HV-10 +(중) +가상화 장비 > 2. 시스템 서비스 관리 +SNMP Community String 복잡성 적용 +개요 +점검 내용 +SNMP Community String 복잡성 적용 여부 점검 +점검 목적 +SNMP Community String이 유추하기 어려운 문자열로 구성해 비인가자가 SNMP 서비스 무단 +접근을 방지하기 위함 +보안 위협 +SNMP Community String이 유추하기 쉬운 문자열로 구성되어 있는 경우 비인가자가 SNMP +서비스에 무단 접근이 가능한 위험이 존재함 +참고 +※ SNMP v3 사용 우선 권고 +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : SNMP Community String이 복잡도를 만족하는 경우 +취약 : SNMP Community String이 복잡도를 만족하지 않는 경우 +조치 방법 +SNMP Community String을 복잡도를 만족하는 값으로 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) SSH를 통해 ESXi 호스트 서버 접속 후, 다음 명령어 실행 +$ esxcli system snmp get +Step 2) 다음 명령어를 사용해 Community String 값 설정 변경 +$ esxcli system snmp set --communities <변경 값> +l VMware vCenter +Step 1) SNMP 사용 확인 +if [[ $(vim-cmd proxysvc/service_list | grep 'TSM') ]]; then +echo "SNMP service is running on vcenter“ +else +echo "SNMP service is not running on vcenter“ +fi + + +![이미지 819-0](images/p0819_img0.png) + + +--- + +| 한국인터넷진흥원 | +820 +cat /etc/vmware/snmp.xml | grep community | awk -F '"' '{print $4}' +Step 2) SNMP Community String 설정 확인 +# /etc/snmpd.conf 파일에서 Community String 확인 +# /usr/lib/vmware/vm-support/bin/nvpsvc -printconfig | grep –E "SNMPCommunityString|SNMPAccessC +ontrol“ +l KVM +Step 1) SNMP 파일에서 Community String 값 확인 +sudo vi /etc/snmp/snmpd.conf +Step 2) Community String 설정 후 snmp 서비스 재시작 +sudo systemctl enable snmpd +sudo systemctl start snmpd +l XenServer +Step 1) XenCenter 접속 +Step 2) 해당 서버 설정 > SNMP +Step 3) SNMP 활성화 여부 확인 +Step 4) 활성화 또는 필요에 의해 사용 시 Community String 값 확인 +[ SNMP Community String 값 확인 ] +l Nutanix + + +![이미지 820-0](images/p0820_img0.png) + + +![이미지 820-1](images/p0820_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +821 +[ 불필요한 경우 SNMP 서비스 비활성화 ] +Step 1) Nutanix 관리 웹 콘솔 접속 +https://:9440 +Step 2) Settings > SNMP 선택 +Step 3) Enable for Nutanix objects 체크 해제 +[ SNMP Trap 설정이 필요한 경우 v3 사용 ] +Step 1) Nutanix 관리 웹 콘솔 접속 +https://:9440 +Step 2) Settings > SNMP > Users > New User 클릭 +Step 3) SNMP User 생성 +Step 4) Traps > New Trap receiver 클릭 + + +![이미지 821-0](images/p0821_img0.png) + + +![이미지 821-1](images/p0821_img1.png) + + +![이미지 821-2](images/p0821_img2.png) + + +![이미지 821-3](images/p0821_img3.png) + + +--- + +| 한국인터넷진흥원 | +822 +Step 5) Receiver Name 및 Trap 수신 IP 설정 +[ v2c를 사용해야 하는 경우 Community String 복잡도 설정 ] + + +![이미지 822-0](images/p0822_img0.png) + + +![이미지 822-1](images/p0822_img1.png) + + +![이미지 822-2](images/p0822_img2.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +823 +Step 1) Nutanix 관리 웹 콘솔 접속 +https://:9440 +Step 2) Settings > SNMP > Traps > 편집 버튼 +Step 3) SNMP Community String이 복잡도를 만족하도록 설정 + + +![이미지 823-0](images/p0823_img0.png) + + +![이미지 823-1](images/p0823_img1.png) + + +--- + +| 한국인터넷진흥원 | +824 +HV-11 +(상) +가상화 장비 > 2. 시스템 서비스 관리 +MOB(Managed Object Browser) 서비스 비활성화 +개요 +점검 내용 +MOB 서비스 비활성화 여부 점검 +점검 목적 +MOB(Managed Object Browser) 서비스를 통해 시스템 정보 수집, 가상 머신 제어, 시스템 설정 +변경 등의 기능이 존재해 비인가자가 해당 기능을 사용하지 못하게 하기 위함 +보안 위협 +MOB(Managed Object Browser) 서비스가 활성화되어 있을 경우, 해당 인터페이스를 통해 시스템 +정보 수집, 가상 머신 제어, 시스템 설정 변경 등의 위험이 존재함 +참고 +※ ESXi의 경우 기본적으로 비활성화 +※ vCenter의 경우 기본적으로 활성화 +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter +판단 기준 +양호 : MOB(Managed Object Browser)가 비활성화된 경우 +취약 : MOB(Managed Object Browser)가 활성화된 경우 +조치 방법 +MOB(Managed Object Browser)서비스 비활성화 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 호스트 > 관리 > 시스템 > 고급 설정으로 이동 +Step 3) Config,HostAgent.plugins.solo.enableMob 설정값 확인 +[ MOB 활성화 값 확인 ] + + +![이미지 824-0](images/p0824_img0.png) + + +![이미지 824-1](images/p0824_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +825 +Step 4) 활성화(true)되어 있을 시, 해당 값을 false로 설정 +[ MOB 비활성화 설정 적용 ] +l VMware vCenter +Step 1) vSphere Client 접속 후, 다음 메뉴에 접근하여 확인(vSphere Client 버전에 따라, 메뉴 명칭은 달라질 수 +있음) +# (vCenter6.5) "호스트 및 클러스터" > [vCenter 서버] > "구성" > "설정" > "고급 설정" > +"config.vpxd.enableDebugBrowse" 확인 +# (vCenter8) "호스트 및 클러스터" > [vCenter 서버] > "구성" > "설정" > "고급 설정" > +"config.vpxd.enableDebugBrowse" 확인 + + +![이미지 825-0](images/p0825_img0.png) + + +![이미지 825-1](images/p0825_img1.png) + + +--- + +| 한국인터넷진흥원 | +826 +HV-12 +(상) +가상화 장비 > 2. 시스템 서비스 관리 +ESXi Shell 비활성화 +개요 +점검 내용 +ESXi Shell(TSM, TSM-SSH) 비활성화 여부 점검 +점검 목적 +감사기록에 대한 관리에 어려움이 발생할 수 있는 ESXi Shell(TSM, TSM-SSH) 사용 행위를 방지해 +플랫폼(vCenter)과 동기화하기 위함 +보안 위협 +ESXi Shell(TSM, TSM-SSH)에서 이루어지는 행위는 관리 플랫폼(vCenter)과 동기화되지 않을 수 +있어 감사기록 관리가 불가능해지는 위험이 존재함 +참고 +※ TSM(Tech Support Mode): 문제 해결 및 진단을 위해 ESXi 호스트에 물리적으로 접근하여 +사용할 수 있는 텍스트 기반 명령 인터페이스 +※ TSM-SSH(Tech Support Mode via SSH): SSH 프로토콜을 통해 원격에서 TSM의 기능을 +사용할 수 있게 하는 서비스 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : ESXi Shell(TSM, TSM-SSH) 서비스가 비활성화된 경우 +취약 : ESXi Shell(TSM, TSM-SSH) 서비스가 활성화된 경우 +조치 방법 +ESXi Shell(TSM, TSM-SSH) 서비스가 비활성화 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 호스트 > 관리 > 서비스로 이동 +Step 3) TSM, TSM-SSH 서비스 활성화 여부 확인 +[ TSM TSM-SSH 서비스 활성화 여부 확인 ] +Step 4) TSM, TSM-SSH 서비스가 활성화되어 있는 경우, [중지] 클릭하여 서비스 중지 + + +![이미지 826-0](images/p0826_img0.png) + + +![이미지 826-1](images/p0826_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +827 +HV-13 +(상) +가상화 장비 > 2. 시스템 서비스 관리 +ESXi Shell 세션 종료 시간 설정 +개요 +점검 내용 +ESXi Shell(TSM, TSM-SSH)의 Session Timeout(로그인 후 일정 시간 사용하지 않을 경우 세션 +종료) 설정의 적정성 여부 점검 +점검 목적 +비인가자에 의한 시스템 무단 사용 방지 목적으로 Session Timeout 설정을 적용하기 위함 +보안 위협 +ESXi Shell(TSM, TSM-SSH)의 Session Timeout(로그인 후 일정 시간 사용하지 않을 경우 세션 +종료) 설정이 적용되어 있지 않으면, 비인가자에 의한 시스템 무단 사용 위험이 존재함 +참고 +※ TSM(Tech Support Mode): 문제 해결 및 진단을 위해 ESXi 호스트에 물리적으로 접근하여 +사용할 수 있는 텍스트 기반 명령 인터페이스 +※ TSM-SSH(Tech Support Mode via SSH): SSH 프로토콜을 통해 원격에서 TSM의 기능을 +사용할 수 있게 하는 서비스 +※ 기본값: 0(제한 없음) +※ 기본적으로 ESXi Shell은 비활성화(HV-12)하여야하며, 해당 설정은 필요 시 ESXi Shell을 사용할 +경우에 대비한 설정 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : Session Timeout 값(ESXiShellInteractiveTimeOut)이 600 이하로 설정된 경우 +취약 : Session Timeout 값(ESXiShellInteractiveTimeOut)이 0이거나, 600초과로 설정된 경우 +조치 방법 +Session Timeout 값(ESXiShellInteractiveTimeOut)이 900 이하 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 관리 > 설정 > 시스템 > 고급 설정으로 이동 +Step 3) UserVars.ESXiShellInteractiveTimeOut 설정값 확인 + + +![이미지 827-0](images/p0827_img0.png) + + +--- + +| 한국인터넷진흥원 | +828 +[ ESXiShellInteractiveTimeOut 설정값 확인 ] +Step 4) 0 또는 600초(10분) 초과로 설정되어 있을 경우 [옵션 편집]을 클릭하여 아래와 같이 수정 +[ 900 이하 설정 적용 ] + + +![이미지 828-0](images/p0828_img0.png) + + +![이미지 828-1](images/p0828_img1.png) + + +![이미지 828-2](images/p0828_img2.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +829 +HV-14 +(중) +가상화 장비 > 2. 시스템 서비스 관리 +원격 로그 서버 이용 +개요 +점검 내용 +원격 로그 서버를 이용한 로그 저장 여부 점검 +점검 목적 +원격 로그 서버를 이용하여 로그 관리를 수행하여 시스템 가용성 저하, 침해에 따른 로그 유실을 +방지하기 위함 +보안 위협 +원격 로그 서버를 이용하여 로그 관리를 하지 않을 경우, 시스템 가용성 저하, 침해에 따른 로그 유실 +등의 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, XenServer, KVM, Nutanix +판단 기준 +양호 : 원격 로그 서버 또는 스토리지가 연동 설정된 경우 +취약 : 원격 로그 서버 또는 스토리지가 연동 설정되지 않은 경우 +조치 방법 +원격 로그 서버 또는 스토리지 연동 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 호스트 > 관리 > 시스템 > 고급 설정으로 이동 +Step 3) Syslog.global.logHost 설정값 확인 +[ Syslog.global.logHost 설정 값 확인 ] + + +![이미지 829-0](images/p0829_img0.png) + + +![이미지 829-1](images/p0829_img1.png) + + +--- + +| 한국인터넷진흥원 | +830 +Step 4) [옵션 편집]을 클릭한 후 아래와 같은 양식으로 원격 로그 서버 또는 스토리지 입력 +protocol://hostname|ipv4|'['ipv6']'[:port] +[ Syslog.global.logHost 설정 ] +※ syslog 설정 예시 +예시 +설명 +tcp://10.0.1.10:3555 +TCP 및 Port 3555를 사용하여 Syslog 메시지를 10.0.1.10으로 전송 +tcp://[2001:db8:85a3:8d +3:1319:8a2e:370:7348] +TCP 및 Port 1514를 사용하여 Syslog 메시지를 IPv6 주소로 전송 +udp://10.0.1.10 +UDP 및 Port 514를 사용하여 Syslog 메시지를 10.0.1.10으로 전송 +ssl://syslog.com +SSL(TLS) 및 Port 514를 사용하여 Syslog 메시지를 syslog.com으로 전송 + + +![이미지 830-0](images/p0830_img0.png) + + +![이미지 830-1](images/p0830_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +831 +l VMware vCenter +Step 1) Syslog 설정 여부를 확인 +Step 2) vCenter Server 관리 페이지(https://<주소>:5480/) 접속 후, 다음 메뉴에 접근하여 확인(vCenter 버전에 +따라, 메뉴 명칭은 달라질 수 있음) +# "Syslog" > Syslog 설정 여부를 확인 +l KVM +Step 1) 원격 로그 서버 사용 확인 +Step 2) (호스트 서버) /etc/rsyslog.conf 파일 확인 +Step 3) 원격 로그 서버 전송 지시어 확인 +Step 4) logger 명령어를 통해 전송 여부 확인 +l XenServer +Step 1) Remote Log 서버 사용 유무 확인 +Step 2) udp514 Port 확인 +# netstat -an | grep "udp" 또는 # netstat -an | grep " udp" | egrep "514“ +Step 3) Syslog.conf 파일 수정("/etc/sysconfig/syslog" 파일에 "SYSLOGD_OPTIONS"의 "-r" 옵션 삭제) +# vi /etc/sysconfig/syslog SYSLOGD_OPTIONS="-m 0“ +l Nutanix +Step 1) Controller VM에 접속하여 원격 로깅 서버가 설정되어 있는지 확인 +ncli rsyslog-config list +RSyslog Status : Enabled +RSyslog Servers : 1 +Name : logcenter +IP Address : 192.168.100.33 +Port : 514 +Protocol : TCP +Relp Enabled : false +Step 2) 원격 로깅 서버가 설정되어 있지 않으면 설정 적용 +ncli rsyslog-config add-server name= ip-address=<원격 로그 서버 IP> port=<원격 로 + + +![이미지 831-0](images/p0831_img0.png) + + +--- + +| 한국인터넷진흥원 | +832 +그 서버 포트> network-protocol=tcp relp-enabled=no +Step 3) 로그 레벨 설정 +ncli rsyslog-config add-module module-name=syslog_module level=info server-name= + + +![이미지 832-0](images/p0832_img0.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +833 +HV-15 +(상) +가상화 장비 > 2. 시스템 서비스 관리 +시스템 주요 이벤트 로그 설정 +개요 +점검 내용 +시스템 주요 이벤트 로그가 설정 여부 점검 +점검 목적 +시스템 주요 이벤트 로그를 설정해 시스템 문제 발생 시 보안, 성능 등의 이슈를 파악하기 위함 +보안 위협 +시스템 주요 이벤트 로그가 설정되어 있지 않으면 시스템 문제 발생 시 보안, 성능 등의 이슈를 파악할 수 +없는 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +VMware ESXi, vCenter, KVM +판단 기준 +양호 : 로그 기록 정책이 내부 정책에 부합하게 설정된 경우 +취약 : 로그 기록 정책이 내부 정책에 부합하게 설정되지 않은 경우 +조치 방법 +로그 기록 정책을 내부 정책에 부합하게 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 호스트 > 관리 > 시스템 > 고급 설정으로 이동 +Step 3) Config.HostAgent.log.level 설정값 확인 +[ Config.HostAgent.log.level 설정값 확인 ] + + +![이미지 833-0](images/p0833_img0.png) + + +![이미지 833-1](images/p0833_img1.png) + + +--- + +| 한국인터넷진흥원 | +834 +Step 4) 로그 기록 정책 확인 후, [옵션 편집]을 클릭해 내부 정책에 맞게 설정 +[ Config.HostAgent.log.level 설정 적용 ] +※ log.level 설정값 +로깅 수준 +설명 +None +로그 기록하지 않음 +Quiet +최소한의 로그 항목을 기록함 +Panic +패닉 로그(장애 발생 시 기록되는 메시지) 항목만 기록함 +Error +패닉 및 에러 로그 항목만 기록함 +Warning +패닉, 에러 및 경고 로그 항목만 기록함 +Information +패닉, 에러, 경고 및 정보 로그 항목을 기록함 +Verbose +패닉, 에러, 경고, 정보 및 세부 정보를 표시하는 로그 항목을 기록함 +Trivia +패닉, 에러, 경고, 정보, 세부 정보 표시 및 기타 정보를 표시하는 로그 항목을 기록함 +l VMware vCenter +Step 1) 로그 설정 레벨 확인 +Step 2) vSphere Client 접속 후, 다음 메뉴에 접근하여 확인(vSphere Client 버전에 따라, 메뉴 명칭은 달라질 수 +있음) +# (vCenter6.5) "호스트 및 클러스터" > [vCenter 서버] > "구성" > "설정" > "고급 설정" > +"config.log.level" 확인 +# (vCenter8) "호스트 및 클러스터" > [vCenter 서버] > "구성" > "설정" > "고급 설정" > +"config.log.level" 확인 + + +![이미지 834-0](images/p0834_img0.png) + + +![이미지 834-1](images/p0834_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +835 +l KVM +Step 1) 호스트에 접속 +Step 2) libvirt 설정파일을 확인하여 로그 레벨 확인 +$ cat /etc/libvirt/libvirtd.conf +Step 3) libvirt 설정파일의 log_level 설정 구문 수정 +$ log_level = +Step 4) 변경 사항 적용을 위해 libvirt 데몬 재시작 +$ systemctl restart libvirtd.service +※ log.level 설정값 +레벨 +로깅 수준 +설명 +4 +ERROR +오류 메시지만 기록함 +3 +WARNING +경고 및 오류를 기록함 +2 +INFO +디버그 항목이 아닌 모든 항목을 기록함 +1 +DEBUG +디버그 항목 및 모든 항목을 기록함 + + +![이미지 835-0](images/p0835_img0.png) + + +--- + +| 한국인터넷진흥원 | +836 +HV-16 +(상) +가상화 장비 > 2. 시스템 서비스 관리 +비휘발성 경로 내 로그 파일 저장 +개요 +점검 내용 +비휘발성 경로에 로그파일 저장 여부 점검 +점검 목적 +비휘발성 경로에 로그파일 저장하여 로그 상실을 방지하기 위함 +보안 위협 +휘발성 경로에 로그 파일이 저장될 경우, 일정시간이 지나거나 시스템 재시작 시 저장된 로그를 상실해 +로그 분석이 불가능해지는 위험이 존재함 +참고 +※ ESXi의 경우 기본적으로 /scratch 경로에 로그가 저장되며, 해당 로그는 시스템 재시작 시 또는 +하루가 지나면 삭제 +※ 원격 로그 서버 이용(HV-14) 시에도 일부 시스템 로그(vmksummary.log, dvs.log, +vmkwarnning.log, fdm.log 등)는 전달되지 않으므로 비휘발성 경로에 로그파일 저장 필요 +※ 휘발성 경로: /scratch/, /tmp, /var/tmp, /run, /dev/shm, /dev/pts 등 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : 로그 파일 경로가 존재하며, 해당 경로가 비휘발성 경로에 저장된 경우 +취약 : 로그 파일 경로가 존재하지 않거나, 휘발성 경로에 저장되지 않은 경우 +조치 방법 +로그 파일 경로를 비휘발성 로그 파일 경로로 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 호스트 > 관리 > 시스템 > 고급 설정으로 이동 +Step 3) Syslog.global.LogDir 설정값 확인 +[ Syslog.global.LogDir 설정값 확인 ] +Step 4) 로그 파일 저장 경로 확인 후, [옵션 편집]을 클릭하여 수정 + + +![이미지 836-0](images/p0836_img0.png) + + +![이미지 836-1](images/p0836_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +837 +HV-17 +(상) +가상화 장비 > 3. 가상머신 관리 +코어덤프 수집 기능 활성화 +개요 +점검 내용 +코어 덤프 수집 기능 활성화 여부 점검 +점검 목적 +코어 덤프 기능이 활성화하여 시스템 장애 발생에 대한 원인을 파악하기 위함 +보안 위협 +코어 덤프 기능이 활성화되어 있지 않을 경우, 시스템 장애 발생에 대한 원인을 파악할 수 없는 위험이 +존재함 +참고 +※ 코어 덤프 기능(Vmware vSphere Network Dump Collector 서비스): 시스템에서 심각한 오류 +발생 시 VMKernel 메모리 상태를 서버로 전송 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : 코어 덤프 수집 기능이 활성화(true)된 경우 +취약 : 코어 덤프 수집 기능이 비활성화(false)된 경우 +조치 방법 +코어 덤프 수집 기능 활성화 적용 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) SSH를 통해 ESXi 호스트 서버 접속 후, 다음 명령어 실행 +$ esxcli system coredump network get +Step 2) 다음 명령어를 사용해 VMkernel 네트워크 인터페이스와 원격 네트워크 코어 덤프 서버의 IP주소 및 +UDP Port 번호 지정 +$ esxcli system coredump network set --interface-name --server-ipv4 + --server-port +예시) esxcli system coredump network set --interface-name vmk0 --server-ipv4 10.0.1.10 --server-port +6500 +Step 3) 다음 명령어를 사용해 네트워크 코어 덤프 구성 활성화 +$ esxcli system coredump network set --enable true +Step 4) 코어 덤프 수집 기능 활성화 여부 확인 +$ esxcli system coredump network check + + +![이미지 837-0](images/p0837_img0.png) + + +--- + +| 한국인터넷진흥원 | +838 +HV-18 +(상) +가상화 장비 > 3. 가상머신 관리 +가상머신의 장치 변경 제한 설정 +개요 +점검 내용 +가상 머신 장치 변경 제한 설정 적용 여부 점검 +점검 목적 +가상 머신(게스트 OS)에서 관리자 권한이 없는 사용자(또는 프로세스)에 의한 장치(네트워크 어댑터, +CD-ROM 등) 연결을 끊거나, 설정 변경을 방지하기 위함 +보안 위협 +가상 머신(게스트 OS)에서 관리자 권한이 없는 사용자(또는 프로세스)에 의한 장치(네트워크 어댑터, +CD-ROM 등) 연결을 끊거나, 설정 변경이 가능한 위험이 존재함 +참고 +※ 서버보안 솔루션 등에서 해당 기능을 통제할 경우 양호 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : 가상 머신의 장치 설정 변경 방지 설정이 활성화(true)된 경우 +취약 : 가상 머신의 장치 설정 변경 방지 설정이 없거나, 비활성화(false)된 경우 +조치 방법 +가상 머신의 장치 설정 변경 방지 활성화 적용 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 가상 시스템 > [가상 머신 선택] > 설정 편집 > VM 옵션 > 고급 > 구성 매개 변수로 이동 +Step 3) isolation.device.edit.disable, isolation.device.connectable.disable 설정값 확인 + + +![이미지 838-0](images/p0838_img0.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +839 +Step 4) 매개 변수 값을 각각 TRUE로 설정. +또는, 각 매개 변수가 존재하지 않을 시, 해당 매개 변수 추가 및 값을 TRUE로 설정 +[ 가상 머신의 장치 설정 변경 방지 설정 적용 ] + + +![이미지 839-0](images/p0839_img0.png) + + +![이미지 839-1](images/p0839_img1.png) + + +--- + +| 한국인터넷진흥원 | +840 +HV-19 +(상) +가상화 장비 > 3. 가상머신 관리 +가상 머신의 불필요한 장치 제거 +개요 +점검 내용 +불필요한 장치(USB, CD/DVD, 플로피 디스크, 병렬 포트, 직렬 포트) 제거 여부 점검 +점검 목적 +불필요하게 연결된 외부 장치를 통한 잠재적인 공격 루트로 활용되는 것을 방지하기 위함 +보안 위협 +불필요하게 연결된 외부 장치는 잠재적인 공격 루트로 활용될 수 있는 위험이 존재함 +참고 +※ 장치: USB, CD/DVD, 플로피 디스크, 병렬 포트, 직렬 포트 +점검 대상 및 판단 기준 +대상 +VMware ESXi, XenServer +판단 기준 +양호 : 불필요한 장치가 가상 머신에 연결되지 않은 경우 +취약 : 불필요한 장치가 가상 머신에 연결된 경우 +조치 방법 +불필요한 장치 연결 해제 적용 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 가상 시스템 > [가상 머신 선택] > 설정 편집 > 가상 하드웨어로 이동 +Step 3) 장치 연결상태 확인 및 불필요한 외부 장치 비활성화 +[ 장치 연결상태 확인 ] + + +![이미지 840-0](images/p0840_img0.png) + + +![이미지 840-1](images/p0840_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +841 +l XenServer +Step 1) 장치 연결상태 확인 +1. PCI 장치 목록 확인 +lspci + +## 2. 블록 디바이스 목록 확인 + +lsblk + +## 3. 네트워크 인터페이스 확인 + +ifconfig 또는 ip addr +4.가상 머신의 디스크 목록 확인 +xe vm-list name-label="“ +5. VM에 연결된 디스크 확인 +xe vbd-list vm-uuid= + +## 6. 모든 가상 디스크 이미지 목록 확인 + +xe vdi-list + +## 7. 네트워크 인터페이스 목록 확인 + +xe vif-list +8. USB 장치 확인 +lsusb + +## 9. 디스크 용량 및 사용 현황 확인 + +df –h +Step 2) 불필요한 외부 장치 비활성화 + + +![이미지 841-0](images/p0841_img0.png) + + +--- + +| 한국인터넷진흥원 | +842 +HV-20 +(상) +가상화 장비 > 3. 가상머신 관리 +가상머신 콘솔 클립보드 복사&붙여넣기 기능 비활성화 +개요 +점검 내용 +가상 머신 콘솔 복사 기능 비활성화 여부 점검 +점검 목적 +가상 머신에 클립보드를 활용한 복사/붙여넣기 기능을 비활성화하여 파일 송·수신 기능을 통한 로그 +기록이 저장되도록 하기 위함 +보안 위협 +가상 머신에 클립보드를 활용한 복사/붙여넣기 작업이 허용되어 있으면 파일 송·수신 기록이 로그에 +저장되지 않아 로그 분석을 통한 침입 탐지가 불가능한 위험이 존재함 +참고 +※ ESXi 기본 비활성화 +※ XenServer 기본 비활성화 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : 가상 머신 콘솔 복사 기능이 비활성화 되어 있거나, 복사 제한이 설정된 경우 +취약 : 가상 머신 콘솔 복사 기능이 활성화 되어 있거나, 복사 제한이 설정되지 않은 경우 +조치 방법 +가상 머신 콘솔 복사 제한 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 가상 시스템 > [가상 머신 선택] > 설정 편집 > VM 옵션 > 고급 > 구성 매개 변수로 이동 +Step 3) isolation.tools.copy.disable, isolation.tools.paste.disable 및 +isolation.tools.setGUIOptions.enable 설정값 확인 +Step 4) isolation.tools.copy.disable와 isolation.tools.paste.disable 각 변수 값을 TRUE로, +isolation.tools.setGUIOptions.enable 변수 값을 FALSE로 설정 +또는, 각 매개 변수가 존재하지 않을 시, 해당 매개 변수 추가 및 값 설정 + + +![이미지 842-0](images/p0842_img0.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +843 +[ 가상 머신 콘솔 복사 기능 활성화 여부 확인 ] + + +![이미지 843-0](images/p0843_img0.png) + + +![이미지 843-1](images/p0843_img1.png) + + +--- + +| 한국인터넷진흥원 | +844 +HV-21 +(상) +가상화 장비 > 3. 가상 머신 관리 +가상머신 콘솔 드래그 앤 드롭 기능 비활성화 +개요 +점검 내용 +가상 머신 드래그 앤 드롭 기능 비활성화 여부 점검 +점검 목적 +가상 머신에 대한 드래그 앤 드롭 기능 비활성화하여 파일 송·수신 기능을 통한 로그 기록이 저장되도록 +하기 위함 +보안 위협 +가상 머신에 대한 드래그 앤 드롭 기능이 허용되어 있을 경우 파일 송·수신 기록이 로그에 저장되지 않아 +로그 분석을 통한 침입 탐지가 불가능한 위험이 존재함 +참고 +※ ESXi 기본 비할성화 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : 가상 머신 콘솔 드래그 앤 드롭 기능이 비활성화되어 있거나, 제한 설정된 경우 +취약 : 가상 머신 콘솔 드래그 앤 드롭 기능이 활성화되어 있거나, 제한 설정되지 않은 경우 +조치 방법 +가상 머신 콘솔 드래그 앤 드롭 제한 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 가상 시스템 > [가상 머신 선택] > 설정 편집 > VM 옵션 > 고급 > 구성 매개 변수로 이동 +Step 3) isolation.tools.dnd.disable 설정값 확인 +Step 4) 매개 변수 값을 TRUE로 설정. +또는, 각 매개 변수가 존재하지 않을 시, 해당 매개 변수 추가 및 값을 TRUE로 설정 +[ 가상 머신 콘솔 드래그 앤 드롭 기능 활성화 여부 확인 ] + + +![이미지 844-0](images/p0844_img0.png) + + +![이미지 844-1](images/p0844_img1.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +845 +HV-22 +(상) +가상화 장비 > 4. 가상 네트워크 관리 +가상스위치 MAC 주소 변경 정책 비활성화 +개요 +점검 내용 +MAC 주소 변경 정책 비활성화 여부 점검 +점검 목적 +가상 스위치에 MAC 주소 변경 정책이 거부를 적용해 악의적인 사용자(또는 악성코드)가 장치 내의 +MAC 주소를 변경을 방지하기 위함 +보안 위협 +가상 스위치에 MAC 주소 변경 정책이 설정되어 있을 경우, 악의적인 사용자(또는 악성코드)가 장치 +내의 MAC 주소를 변경하여 스푸핑 등의 공격 위험이 존재함 +참고 +※ MAC 주소 변경 정책: 가상 머신 내부에서 MAC 주소를 변경하는 것을 허용하는 정책 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : 가상 스위치 MAC 주소 변경 정책이 거부로 설정된 경우 +취약 : 가상 스위치 MAC 주소 변경 정책이 허용으로 설정된 경우 +조치 방법 +가상 스위치 MAC 주소 변경 정책 거부 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 네트워킹 > 가상 스위치 > [가상 스위치 선택] > 설정 편집 > 보안으로 이동 +Step 3) MAC 주소 변경 정책 설정 확인 +Step 4) 허용으로 설정되어 있을 경우, ‘거부’로 변경 후 해당 설정 저장 +[ MAC 주소 변경 정책 설정 확인 ] + + +![이미지 845-0](images/p0845_img0.png) + + +![이미지 845-1](images/p0845_img1.png) + + +--- + +| 한국인터넷진흥원 | +846 +HV-23 +(상) +가상화 장비 > 4. 가상 네트워크 관리 +가상스위치 무차별(Promiscuous) 모드 정책 비활성화 +개요 +점검 내용 +무차별(Promiscuous) 모드 비활성화 여부 점검 +점검 목적 +가상 스위치에 무차별(Promiscuous) 모드를 비활성화 해 해당 가상 스위치로 다른 스위치로 전달되는 +네트워크 트래픽 모니터링을 방지하기 위함 +보안 위협 +가상 스위치에 무차별(Promiscuous) 모드가 활성화된 경우, 비인가자가 해당 가상 스위치를 통해 다른 +스위치로 전달되는 네트워크 트래픽을 모니터링 및 내부 정보 유출 위험이 존재함 +참고 +※ 무차별(Promiscuous) 모드: 자신에게 직접 전달되지 않은 모든 네트워크 트래픽 패킷을 수신하는 +기능 +점검 대상 및 판단 기준 +대상 +VMware ESXi, XenServer +판단 기준 +양호 : 가상 스위치 무차별(Promiscuous) 모드 정책 설정이 거부로 설정된 경우 +취약 : 가상 스위치 무차별(Promiscuous) 모드 정책 설정이 허용으로 설정된 경우 +조치 방법 +가상 스위치 무차별(Promiscuous) 모드 정책 거부 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 +https:// +Step 2) 네트워킹 > 가상 스위치 > [가상 스위치 선택] > 설정 편집 > 보안으로 이동 +Step 3) 무차별 모드 정책 설정 확인 +Step 4) 허용으로 설정되어 있을 경우, ‘거부’로 변경 후 해당 설정 저장 + + +![이미지 846-0](images/p0846_img0.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +847 +[ 무차별 모드 정책 설정 확인 ] +l XenServer +Step 1) 가상 스위치 Promiscuous 모드 조회 +Step 2) XenServer CLI 접속 후, 다음 명령어 실행하여 uuid_of_pif/vif 확인 +$ xe pif-list network-name-label=<네트워크 이름> +$ xe vif-list vm-name-label= +Step 3) 다음 명령어 실행하여 promiscuous 값 확인 +$ xe pif-param-list uuid= +$ xe vif-param-list uuid= +Step 4) 다음 명령어 실행하여 promiscuous 값 설정 +$ xe pif-param-set uuid= other-config:promiscuous="false“ +$ xe vif-param-set uuid= other-config:promiscuous="false“ + + +![이미지 847-0](images/p0847_img0.png) + + +![이미지 847-1](images/p0847_img1.png) + + +--- + +| 한국인터넷진흥원 | +848 +HV-24 +(상) +가상화 장비 > 4. 가상 네트워크 관리 +가상스위치 위조전송(Forged Transmits) 모드 정책 비활성화 +개요 +점검 내용 +가상 스위치 위조전송(Forged Transmits) 모드 비활성화 여부 점검 +점검 목적 +가상 스위치에 위조전송(Forged Transmits) 모드를 비활성화하여 네트워크 스니핑, 데이터 데이터 +유출 등을 방지하기 위함 +보안 위협 +가상 스위치에 위조전송(Forged Transmits) 모드가 설정되어 있을 경우, 네트워크 스니핑, 데이터 유출 +등의 보안 위험이 존재함 +참고 +※ 위조 전송(Forged Transmits) 모드: 가상 스위치가 수신하는 모든 트래픽을 연결된 모든 가상 +NIC에게 전송하는 기능 +점검 대상 및 판단 기준 +대상 +VMware ESXi +판단 기준 +양호 : 가상 스위치에 위조 전송(Forged Transmits) 모드 설정이 거부로 설정된 경우 +취약 : 가상 스위치에 위조 전송(Forged Transmits) 모드 설정이 허용으로 설정된 경우 +조치 방법 +위조 전송(Forged Transmits) 모드 거부 설정 +조치 시 영향 +일반적 경우 영향 없음 +점검 및 조치 사례 +l VMware ESXi +Step 1) Web 콘솔 페이지 접속 > https:// +Step 2) 네트워킹 > 가상 스위치 > [가상 스위치 선택] > 설정 편집 > 보안으로 이동 +Step 3) 위조 전송 정책 설정 확인 +Step 4) 허용으로 설정되어 있을 경우, ‘거부’로 변경 후 해당 설정 저장 + + +![이미지 848-0](images/p0848_img0.png) + + +--- + + +## 11. 가상화 장비 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +849 +[위조 전송 정책 설정 확인 ] + + +![이미지 849-0](images/p0849_img0.png) + + +![이미지 849-1](images/p0849_img1.png) + + +--- + +| 한국인터넷진흥원 | +850 +HV-25 +(상) +가상화 장비 > 4. 가상 네트워크 관리 +주기적 보안 패치 및 벤더 권고사항 적용 +개요 +점검 내용 +가상화 장비 및 관리서버 들에 대해 주기적인 보안 패치와 벤더 권고사항 적용 여부를 확인 +점검 목적 +알려진 취약점을 제거하여 가상화 인프라의 안정성과 가용성을 확보하기 위함 +보안 위협 +패치 미적용 시 제로데이·원격코드실행 등 취약점이 악용되어 전체 가상화 인프라 침해 발생 가능 +참고 +- +점검 대상 및 판단 기준 +대상 +공통 +판단 기준 +양호 : 패치 절차를 수립하여 주기적으로 패치 및 벤더 권고사항을 확인 및 적용하는 경우 +취약 : 패치 절차가 수립되어 있지 않거나 주기적으로 패치를 설치하지 않는 경우 +조치 방법 +장비별 제공하는 최신 취약점 정보를 파악 후 최신 패치 및 업그레이드를 수행 +조치 시 영향 +서비스 영향을 고려하여 벤더사와 협의 후 적용 +점검 및 조치 사례 +l 공통 +Step 1) 주기적으로 보안 패치 및 벤더 권고사항을 검토 이후 적용 +구분 +보안패치 및 보안권고 정보제공 사이트 +VMware ESXi, +vCenter +https:/support.broadcom.com/web/ecx/security-advisory +XenServer +https://support.citrix.com/support-home/home +https://xenbits.xen.org/xsa +KVM +운영 중인 리눅스 배포판(Red Hat, Ubuntu. SUSE 등)의 공식 보안공지를 통해 확인 +Nutanix +https://www.nutanix.com/trust/security-advisories + + +![이미지 850-0](images/p0850_img0.png) + + +--- + +클라우드 +Chapter 12 + +## 1. 계정 관리················································································································854 + + +## 2. 권한 관리················································································································858 + + +## 3. 가상 리소스 관리·····································································································860 + + +## 4. 운영 관리················································································································864 + + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 + + +![이미지 851-0](images/p0851_img0.png) + + +--- + +| 한국인터넷진흥원 | +852 +01 +클라우드 취약점 분석 · 평가 항목 + +## 1. 계정 관리 + +점검항목 +항목 +중요도 +항목코드 +사용자 계정 관리 +상 +CA-01 +사용자 정책 관리 +중 +CA-02 +MFA(Multi-Factor Authentication) 설정 +상 +CA-03 +클라우드 계정 비밀번호 정책 관리 +중 +CA-04 + + +## 2. 권한 관리 + +점검항목 +항목 +중요도 +항목코드 +인스턴스 서비스 정책 관리 +상 +CA-05 +네트워크 서비스 정책 관리 +상 +CA-06 + + +## 3. 가상 리소스 관리 + +점검항목 +항목 +중요도 +항목코드 +VPC 네트워크 서브넷 관리 +상 +CA-07 +가상 네트워크 리소스 관리 +중 +CA-08 +접근 제어 설정 관리 +상 +CA-09 +스토리지 리소스 퍼블릭 접근 관리 +중 +CA-10 + + +![이미지 852-0](images/p0852_img0.png) + + +![이미지 852-1](images/p0852_img1.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +853 + +## 4. 운영 관리 + +점검항목 +항목 +중요도 +항목코드 +관계형 데이터베이스 암호화 설정 +중 +CA-11 +통신 구간 암호화 설정 +중 +CA-12 +클라우드 서비스 사용자 계정 로깅 설정 +상 +CA-13 +인스턴스 로깅 설정 +중 +CA-14 +관계형 데이터베이스 로깅 설정 +중 +CA-15 +오브젝트 스토리지 버킷 로깅 설정 +중 +CA-16 +로그 보관 기간 설정 +중 +CA-17 +백업 사용 여부 +중 +CA-18 +가상 리소스 이상징후 알림 설정 +중 +CA-19 + + +![이미지 853-0](images/p0853_img0.png) + + +--- + +| 한국인터넷진흥원 | +854 +CA-01 +(상) +클라우드 > 1. 계정 관리 +사용자 계정 관리 +개요 +점검 내용 +불필요한 클라우드 관리 콘솔 계정 존재 여부 점검 +점검 목적 +불필요한 계정(퇴직, 전직, 휴직 등의 사유로 사용하지 않는 계정 및 장기간 사용하지 않는 계정 등)이 +존재하는지 점검하여 관리되지 않은 계정에 의한 침입에 대비하기 위함 +보안 위협 +불필요한 계정을 관리하지 않는 경우 비인가자의 무단 접근이 가능하며, 공용 계정 및 퇴사자 계정이 +존재할 경우 해당 계정을 통한 침해사고 발생 시 사후 추적이 어려울 수 있는 위험이 존재함 +참고 +※ 불필요한 계정 삭제 시 업무 영향도 파악 후 삭제 권고 +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 불필요한 계정이 존재하지 않거나 비활성화된 경우 +취약 : 불필요한 계정이 존재하며 활성화 된 경우 +조치 방법 +클라우드 관리 콘솔에 등록된 계정 현황 확인 후 불필요한 계정 삭제 또는 비활성화 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 불필요한 클라우드 콘솔 계정 제거 +§ 클라우드 서비스를 운영하는 데 있어 관리 콘솔에 접근할 수 있는 불필요한 계정이 존재할 경우 클라우드 서비 +스 침해 사고가 발생할 수 있으므로 퇴사자 및 장기 미사용 계정은 삭제 또는 비활성화 하여 클라우드 서비스 +를 운영해야 함 + + +![이미지 854-0](images/p0854_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +855 +CA-02 +(중) +클라우드 > 1. 계정 관리 +사용자 정책 관리 +개요 +점검 내용 +사용자 계정에 적절한 권한 부여 여부 점검 +점검 목적 +계정별 권한을 점검하여 권한의 오남용을 예방하기 위함 +보안 위협 +사용자 정책 관리가 적절하게 할당되지 않을 경우 무단 접근, 데이터 유출, 내부자 위협 등 보안 위험이 +존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +Cloud Platform +판단 기준 +양호 : 사용자/그룹의 목적에 맞게 역할/권한이 할당된 경우 +취약 : 사용자/그룹을 목적에 맞지 않게 역할/권한이 할당된 경우 +조치 방법 +사용자/그룹의 역할/권한을 목적에 맞게 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 계정 및 그룹 확인 후 불필요한 권한 제거 +§ 클라우드 서비스 운영 시 사용자에 대한 직무 및 역할에 맞는 사용자 권한을 설정하고, 권한 오남용이 발생하 +지 않도록 주기적인 정책 검토가 요구됨 +§ 관리자 및 일반 사용자 등 관리 정책이나 권한을 분리하여 1인 1계정으로 운영되어야 함 +Step 2) 별도의 계정을 생성하여 서비스 운영에 활용 +§ 콘솔 최상위 관리자(최초 가입계정) 계정은 서비스 운영에 활용 금지 +§ 서비스에 대해 관리자 권한이 필요한 경우, 신규로 계정을 생성하여 필요한 권한을 부여하여 활용 + + +![이미지 855-0](images/p0855_img0.png) + + +--- + +| 한국인터넷진흥원 | +856 +CA-03 +(상) +클라우드 > 1. 계정 관리 +MFA(Multi-Factor Authentication) 설정 +개요 +점검 내용 +2차 인증을 통해 사용자 계정의 보안을 강화 여부 점검 +점검 목적 +사용자 계정의 보안을 강화하여 무단 접근을 방지하고, 계정 탈취 및 데이터 유출의 위험을 줄이기 위함 +보안 위협 +2차 인증을 사용하지 않을 경우, 다양한 비밀번호 추측 공격에 노출될 가능성이 높으며, 이러한 +공격으로 인해 계정이 탈취되어 중요 데이터 유출 및 로그 변조 등의 시스템 악용이 발생할 위험이 +존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 각 계정별 2차 인증이 설정된 경우 +취약 : 각 계정별 2차 인증이 설정되지 않은 경우 +조치 방법 +인증 번호, OTP 등을 통한 2차 인증 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 2차 인증 설정 +§ 클라우드 서비스 관리 계정에 2차 인증을 사용하지 않으면 관리 계정이 탈취 및 데이터 유출 위험이 존재함 +§ 각 계정별 2차 인증을 사용해 계정 탈취를 방지해야 함 +§ 2차 인증은 휴대전화 문자 인증, 이메일 인증, OTP 등으로 설정되어야 함 + + +![이미지 856-0](images/p0856_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +857 +CA-04 +(중) +클라우드 > 1. 계정 관리 +클라우드 계정 비밀번호 정책 관리 +개요 +점검 내용 +비밀번호 설정 정책의 복잡성 만족 여부 점검 +점검 목적 +안전한 비밀번호(*비밀번호 설정 기준 참조)를 사용함으로써 무차별 대입 공격, 사전 공격 등 비밀번호 +탈취 목적의 공격에 대해 대비하기 위함 +보안 위협 +무차별 대입 공격, 비밀번호 추측 공격 등 비밀번호가 비교적 단순하거나 비교적 자주 쓰이는 비밀번호 +(예:1q2w3e4r! 등)로 비인가 접근을 시도하는 공격 위험이 존재함 +참고 +※ 무차별 대입 공격(Brute-force Attack): 특정한 암호를 풀기 위해 가능한 모든 조합을 시도하여 +비밀번호를 찾아내는 공격 방식 +※ 사전 공격(Dictionary attack): 사전에 있는 단어를 입력하여 비밀번호를 알아내거나 해독하는 +컴퓨터 공격 방식 +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 복잡성을 만족하는 비밀번호 정책을 설정하고 로그인 시도 제한을 설정한 경우 +취약 : 복잡성을 만족하지 않는 비밀번호를 사용하거나 로그인 시도 제한을 설정하지 않은 경우 +조치 방법 +비밀번호 정책을 해당 기관의 보안 정책에 적합하게 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 클라우드 콘솔 계정에 대한 비밀번호 정책 설정 +§ 클라우드 관리 콘솔 계정 비밀번호는 영문자, 숫자 및 특수문자를 두개 조합시에는 10자리 이상, 세 개 조합시 +에는 8자리 이상 사용해야 함 +§ 무차별 대입 공격을 방지하기 위한 로그인 시도 횟수 제한 설정 적용이 필요함 + + +![이미지 857-0](images/p0857_img0.png) + + +--- + +| 한국인터넷진흥원 | +858 +CA-05 +(상) +클라우드 > 2. 권한 관리 +인스턴스 서비스 정책 관리 +개요 +점검 내용 +인스턴스 생성 또는 접근 권한 설정 여부 점검 +점검 목적 +인스턴스 생성 또는 접근 권한을 점검하여 인스턴스 내부 정보 유출을 방지하기 위함 +보안 위협 +인스턴스 접근 권한이 적절하지 않을 경우 비인가자가 인스턴스 내부에 접근할 수 있어 중요 정보의 유 +출 위험이 존재함 +참고 +※ 인스턴스 : 클라우드 서비스에서 제공하는 서버 리소스로 인스턴스라는 형태로 자원에 대한 가상 액 +세스를 제공함 +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 인스턴스 접근 권한이 적절하게 부여된 경우 +취약 : 인스턴스 접근 권한이 적절하게 부여되지 않은 경우 +조치 방법 +인스턴스 생성 및 접근 권한을 관리자 계정에 별도로 부여 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 불필요하게 설정된 인스턴스 접근 권한 제거 +§ 클라우드 인스턴스를 사용하여 컨테이너, 데이터베이스, 마이크로서비스, 가상 머신 등 접근이 가능함 +§ 인스턴스 접근권한이 제한되어 있지 않을 경우, 내부 정보의 유출 위험이 존재함 +§ 인스턴스 생성, 삭제, 수정 등에 대한 접근 권한을 설정하여 비인가자의 접근을 방지해야 함 + + +![이미지 858-0](images/p0858_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +859 +CA-06 +(상) +클라우드 > 2. 권한 관리 +네트워크 서비스 정책 관리 +개요 +점검 내용 +가상 네트워크 서비스 리소스 생성 또는 접근 권한 설정 여부 점검 +점검 목적 +가상 네트워크 서비스 리소스 생성 또는 접근 권한을 점검하여 서비스 내부 정보 유출을 방지하기 위함 +보안 위협 +네트워크 서비스 접근 권한이 적절하지 않으면 비인가자가 서비스 내부에 침입하여 중요 정보를 유출하 +는 위험이 존재함 +참고 +※ 네트워크 서비스: 클라우드 서비스에서 제공하는 네트워크 리소스 +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 네트워크 서비스 리소스 접근 권한이 적절하게 부여된 경우 +취약 : 네트워크 서비스 리소스 접근 권한이 적절하게 부여되지 않은 경우 +조치 방법 +네트워크 서비스 리소스 생성 및 접근 권한을 관리자 계정에 별도로 부여 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 불필요하게 설정된 네트워크 리소스 접근 권한 제거 +§ 네트워크 서비스 리소스를 사용하면 각 클라우드 리소스의 연결과 접근 통제 기능을 사용할 수 있으며, 네트워 +킹 서비스에는 방화벽, 로드 밸런서, DNS(도메인 이름 시스템) 관리자 등이 포함됨 +§ 네트워크 리소스 접근권한이 제한되어 있지 않을 경우, 접근 통제가 적절하게 이루어지지 않아 비인가자의 외 +부 침입 위협이 존재함 +§ 네트워크 리소스 생성, 삭제, 수정 등에 대한 접근 권한을 설정하여 비인가자의 접근을 방지해야 함 + + +![이미지 859-0](images/p0859_img0.png) + + +--- + +| 한국인터넷진흥원 | +860 +CA-07 +(상) +클라우드 > 3. 가상 리소스 관리 +VPC 네트워크 서브넷 관리 +개요 +점검 내용 +단일 가상 네트워크 내 Public/Private 서브넷을 혼용하여 사용하는지 여부 점검 +점검 목적 +Public/Private 서브넷을 각 가상 네트워크 리소스를 단위로 분리하여 안전하게 운영하기 위함 +보안 위협 +Public/Private 서브넷을 단일 가상 네트워크 리소스 내 혼용하여 사용할 경우, Private 서브넷이 +외부에 노출되어 내부 정보의 유출 위험이 존재함 +참고 +※ 서브넷: 가상 사설 클라우드(Virtual Private Cloud, VPC) 네트워크 내에서 IP 주소 범위를 분할 +하는 작은 네트워크 영역 +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 공개용 네트워크와 내부 네트워크를 분리한 경우 +취약 : 공개용 네트워크와 내부 네트워크를 분리하지 않은 경우 +조치 방법 +각 서브넷 별 네트워크 리소스 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 서브넷에 따라 네트워크 리소스를 별도로 설정 +§ Public/Private 서브넷에 네트워크 리소스를 혼용하여 사용할 경우, Private 서브넷의 인스턴스 서비스 정보가 +외부에 유출이 될 수 있음 +§ Public 서브넷은 인터넷 게이트웨이로 할당하고, Private 서브넷은 NAT 게이트웨이로 할당하고 있는지 확인 + + +![이미지 860-0](images/p0860_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +861 +CA-08 +(중) +클라우드 > 3. 가상 리소스 관리 +가상 네트워크 리소스 관리 +개요 +점검 내용 +내부 클라우드 리소스 접근 시 접근통제 적용 여부 점검 +점검 목적 +각 서비스에서 내부 네트워크만 사용하는 리소스에 공용 IP주소를 제거하고, 서비스 역할에 맞게 권한을 +부여하여 외부 접근 시도를 차단하기 위함 +보안 위협 +내부 리소스 공인 IP주소와 권한이 적절하지 않을 경우, 비인가자가 관리자 권한을 취득하여 내부 +리소스 유출 및 악용할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 각 서비스 리소스에 공인 IP주소가 존재하지 않고, 적절한 권한이 부여된 경우 +취약 : 각 서비스 리소스에 공인 IP주소가 존재하거나, 적절한 권한이 부여되지 않은 경우 +조치 방법 +서비스 리소스에 공인 IP주소 제거 및 관리자만 접근할 수 있도록 접근권한 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 불필요하게 설정된 가상 네트워크 리소스 접근 권한 제거 +§ 클라우드 가상 네트워크 리소스 접근에 대한 접근통제 정책을 수립하여 접근 권한이 없는 사용자가 내부 클라 +우드 리소스에 접속할 수 없도록 관리해야 함 +§ 각 서비스별 IP, 포트 할당을 적용하여 불필요한 연결을 최소화해야 함 + + +![이미지 861-0](images/p0861_img0.png) + + +--- + +| 한국인터넷진흥원 | +862 +CA-09 +(상) +클라우드 > 3. 가상 리소스 관리 +접근 제어 설정 관리 +개요 +점검 내용 +불필요한 접근 정책 존재 여부 점검 +점검 목적 +클라우드 서비스에 접근할 수 있는 IP를 등록하여 비인가자의 클라우드 서비스 접근을 차단하고, 권한이 +부여된 관리자만 클라우드 서비스에 접근할 수 있도록 하기 위함 +보안 위협 +불필요한 접근 제어 정책이 존재할 경우, 비인가자의 클라우드 서비스 접근 시도로 인한 내부 정보의 +유출 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 접근 제어 정책을 주기적으로 검토하고 불필요한 규칙이 존재하지 않는 경우 +취약 : 접근 제어 정책을 비주기적으로 검토하고 불필요한 규칙이 존재하는 경우 +조치 방법 +접근제어 정책 주기적 검토 및 불필요한 정책 제거 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 클라우드 서비스 접근 제어 관리 +§ 클라우드 관리 콘솔에서 제공하고 있는 메뉴에서 접속 IP나 계정 제한 확인 +§ 설정되어 있는 정책의 출발지와 목적지의 IP주소 범위, 프로토콜/포트, 허용/차단, 정책 순서 등을 종합적으로 +검증하여 불필요한 방화벽 규칙(또는 보안그룹 규칙)이 존재하는지 주기적으로 확인 +§ 관리자 IP 또는 특정 IP 및 계정에서만 접속할 수 있도록 설정 +§ 불필요한 정책 제거 + + +![이미지 862-0](images/p0862_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +863 +CA-10 +(중) +클라우드 > 3. 가상 리소스 관리 +스토리지 리소스 퍼블릭 접근 관리 +개요 +점검 내용 +스토리지 리소스에 모든 인터넷 사용자 접근권한의 차단 여부 점검 +점검 목적 +클라우드 스토리지 리소스에 모든 인터넷 사용자 접근권한을 차단하고 클라우드 관리 권한이 부여된 +관리자만 접근하도록 정책을 수립해 비인가자의 접근을 방지하기 위함 +보안 위협 +스토리지 리소스에 모든 인터넷 사용자 접근권한이 허용된 경우, 비인가자가 접근하여 중요 정보 및 +데이터가 유출될 위험이 존재함 +참고 +※ 스토리지 리소스: 인터넷을 통해 스토리지 리소스를 추상화, 풀링, 공유하는 저장 공간 +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 스토리지 리소스에 불필요한 규칙이 존재하지 않고 접근 제어 정책을 주기적으로 검토하는 경우 +취약 : 스토리지 리소스에 불필요한 규칙이 존재하거나 접근 제어 정책을 비주기적으로 검토하는 경우 +조치 방법 +스토리지 리소스에 모든 인터넷 사용자 접근권한이 차단 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 스토리지 접근 제어 설정 +§ 클라우드 관리 콘솔에서 제공하고 있는 메뉴에서 스토리지 리소스 관리 확인 +§ 스토리지 리소스에 모든 인터넷 사용자 접근 권한이 부여되어 있는지 확인 +§ 스토리지 리소스 접근 권한이 부여된 계정 확인 및 불필요한 권한이 부여되어 있는 계정 제거 + + +![이미지 863-0](images/p0863_img0.png) + + +--- + +| 한국인터넷진흥원 | +864 +CA-11 +(중) +클라우드 > 4. 운영 관리 +관계형 데이터베이스 암호화 설정 +개요 +점검 내용 +관계형 데이터베이스 암호화 설정 여부 점검 +점검 목적 +관계형 데이터베이스 암호화 설정을 적용해 데이터베이스 내부 정보를 보호하기 위함 +보안 위협 +관계형 데이터베이스 암호화 설정이 적용되어 있지 않을 경우, 비인가자의 데이터베이스 내부 침입으로 +중요 정보 유출 위험이 존재함 +참고 +※ 관계형 데이터베이스: 테이블, 행, 열의 정보를 구조화하는 방식 +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 관계형 데이터베이스 암호화가 적용된 경우 +취약 : 관계형 데이터베이스 암호화가 적용되지 않은 경우 +조치 방법 +관계형 데이터베이스 암호화 기능 활성화 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 관계형 데이터베이스에 대한 암호화 설정 +§ 클라우드 관리 콘솔에서 제공하고 있는 메뉴에서 DB 관리 기능 확인 +§ 데이터 스토리지 암호화 적용 여부 확인 +§ 암호화가 적용되어 있지 않을 경우, 사용으로 변경 +§ 개인정보 등 중요정보의 경우 DB 저장시 안전한 암호화 알고리즘으로 암호화 적용 +※ 일반적으로 클라우드 서비스에서 제공하는 암호화 기능은 서버 및 DB 스토리지, 백업 파일, 스냅샷 등을 암 +호화 하는 것으로 데이터베이스의 테이블 단위를 암호화 하는 것은 아님 + + +![이미지 864-0](images/p0864_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +865 +CA-12 +(중) +클라우드 > 4. 운영 관리 +통신구간 암호화 설정 +개요 +점검 내용 +클라우드 시스템 간 암호화 통신 여부 점검 +점검 목적 +클라우드 리소스 간 중요 정보 통신 구간을 암호화하여 내부 정보를 보호하기 위함 +보안 위협 +통신 구간이 암호화되어 있지 않을 경우, 정보 송‧수신 간 공격자가 패킷을 가로채어 공격에 활용할 +위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 클라우드 리소스통신 구간에 암호화가 적용된 경우 +취약 : 클라우드 리소스 통신 구간에 암호화가 적용되지 않은 경우 +조치 방법 +클라우드 리소스 통신 하는 주요 구간은 암호화된 통신수단 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 통신 구간 암호화 설정 +§ 클라우드 시스템에서 중요 정보가 이동하는 구간에 암호화된 통신 채널 사용 여부 확인 +※ 암호화된 통신 채널 예시 +서버 원격 접근 시 암호화된 통신수단(VPN, SSH 등) 사용 +데이터 이관 시 VPN을 통해 이관 +리소스 관리 접근 시 OpenSSH 및 OpenSSL 기반 웹/API 통신(TLS v1.2 이상, TLS v1.3 권장) 사용 +※ 통신 채널 암호화 강도 권고사항 + +## 1. 블록 암호 알고리즘 : SEED, ARIA, AES 등 키 길이 128bits 이상 지원 + + +## 2. 공개키 암호 알고리즘 : RSA 등 키 길이 2048bits 이상 지원 + + +## 3. 해시 알고리즘 : SHA2 이상 등 + + + +![이미지 865-0](images/p0865_img0.png) + + +--- + +| 한국인터넷진흥원 | +866 +CA-13 +(상) +클라우드 > 4. 운영 관리 +클라우드 서비스 사용자 계정 로깅 설정 +개요 +점검 내용 +사용자 계정 로깅 설정 여부 점검 +점검 목적 +사용자 계정 로깅 설정을 점검하여 클라우드 서비스의 이상 유무와 비인가자의 침입 및 공격을 식별하기 +위함 +보안 위협 +사용자 계정 로깅 설정이 적용되어 있지 않을 경우, 클라우드 서비스에 장애, 침해사고 발생 시 원인 +분석이 어려워져 문제 해결이 지연되거나, 추가적인 피해 발생 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 사용자 계정 로깅 설정이 기관 정책에 따라 설정된 경우 +취약 : 사용자 계정 로깅 설정이 기관 정책에 따라 설정되지 않은 경우 +조치 방법 +사용자 계정 로깅 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 클라우드 사용자 로그 설정 +§ 클라우드 관리 콘솔에서 제공하는 로깅 설정 관리 확인 +§ 사용자 로그 설정 적용 및 계정 활동 로그 기록 여부 확인 +§ 로그 기록이 적용되어 있지 않을 경우, 해당 사용자 로그 설정 적용 + + +![이미지 866-0](images/p0866_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +867 +CA-14 +(중) +클라우드 > 4. 운영 관리 +인스턴스 로깅 설정 +개요 +점검 내용 +인스턴스 로깅 설정 여부 점검 +점검 목적 +인스턴스 로깅 설정을 점검하여 클라우드 인스턴스 리소스의 이상 유무와 비인가자의 침입 및 공격을 +식별하기 위함 +보안 위협 +인스턴스 설정이 적용되어 있지 않을 경우, 인스턴스 리소스에 장애, 침해사고 발생 시 원인 분석이 +어려워져 문제해결이 지연되거나, 추가적인 피해 발생 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 인스턴스 로깅 설정이 기관 정책에 따라 설정된 경우 +취약 : 인스턴스 로깅 설정이 기관 정책에 따라 설정되지 않은 경우 +조치 방법 +인스턴스 로깅 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 클라우드 인스턴스 로깅 설정 +§ 클라우드 관리 콘솔에서 제공하는 인스턴스 로깅 설정 관리 확인 +§ 인스턴스 로깅 설정 적용 및 활동 로그 기록 여부 확인 +§ 인스턴스 로깅의 주기적 검토 수행 여부 확인 + + +![이미지 867-0](images/p0867_img0.png) + + +--- + +| 한국인터넷진흥원 | +868 +CA-15 +(중) +클라우드 > 4. 운영 관리 +관계형 데이터베이스 로깅 설정 +개요 +점검 내용 +관계형 데이터베이스 로깅 설정 여부 점검 +점검 목적 +관계형 데이터베이스 설정을 점검하여 클라우드 데이터베이스의 이상 유무와 비인가자의 침입 및 +공격을 식별하기 위함 +보안 위협 +관계형 데이터베이스 설정이 적용되어 있지 않을 경우, 클라우드 데이터베이스 장애, 침해 사고 발생 시 +원인 분석이 어려워져 문제 해결이 지연되거나, 추가적인 피해 발생 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 관계형 데이터베이스 로깅 설정이 기관 정책에 따라 설정된 경우 +취약 : 관계형 데이터베이스 로깅 설정이 기관 정책에 따라 설정되지 않은 경우 +조치 방법 +관계형 데이터베이스 로깅 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 클라우드 관계형 데이터베이스 로깅 설정 +§ 클라우드 관리 콘솔에서 제공하는 관계형 데이터베이스 로깅 설정 관리 확인 +§ 관계형 데이터베이스 로깅 설정 적용 및 활동 로그 기록 여부 확인 +§ 관계형 데이터베이스 로깅의 주기적 검토 수행 여부 확인 + + +![이미지 868-0](images/p0868_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +869 +CA-16 +(중) +클라우드 > 4. 운영 관리 +오브젝트 스토리지 버킷 로깅 설정 +개요 +점검 내용 +Object 스토리지 버킷 로깅 설정 여부 점검 +점검 목적 +Object 스토리지 버킷 로깅 설정을 별도로 설정하고 Object 스토리지의 이상 유무와 비인가자의 침입 +및 공격을 식별하기 위함 +보안 위협 +Object 스토리지 버킷 로깅 설정이 적용되어 있지 않을 경우, 클라우드 Object 스토리지에 장애, 침해 +사고 발생 시 원인 분석이 어려워져 문제 해결이 지연되거나, 추가적인 피해 발생 위험이 존재함 +참고 +※ Object 스토리지 버킷: 객체를 저장하는 공간 +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : Object 스토리지 버킷 로깅 설정이 기관 정책에 따라 설정된 경우 +취약 : Object 스토리지 버킷 로깅 설정이 기관 정책에 따라 설정되지 않은 경우 +조치 방법 +Object 스토리지 버킷 로깅 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 클라우드 Object 스토리지 버킷 로깅 설정 +§ 클라우드 관리 콘솔에서 제공하는 Object 스토리지 버킷 로깅 설정 관리 확인 +§ Object 스토리지 버킷 로깅 설정 적용 및 활동 로그 기록 여부 확인 +§ Object 스토리지 버킷 로깅의 주기적 검토 수행 여부 확인 + + +![이미지 869-0](images/p0869_img0.png) + + +--- + +| 한국인터넷진흥원 | +870 +CA-17 +(중) +클라우드 > 4. 운영 관리 +로그 보관 기간 설정 +개요 +점검 내용 +클라우드 서비스 로그 보관 기간을 기관 정책에 맞게 보관 여부 점검 +점검 목적 +클라우드 서비스 로그 보관 정책을 수립하여 클라우드 침해 사고 원인 분석에 필요한 로그를 안전하게 +보관하는지 확인하기 위함 +보안 위협 +클라우드 서비스 로그 보관 기간이 적용되어 있지 않을 경우, 로그 검토나 침해사고 원인 분석 시 필요한 +로그가 남아 있지 않아 침해사고 원인 분석이 어려워져 문제해결이 지연되거나, 추가적인 피해 발생 +위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 클라우드 서비스 로그 보관 기간을 기관 정책에 맞게 수립된 경우 +취약 : 클라우드 서비스 로그 보관 기간을 기관 정책에 맞게 수립되지 않은 경우 +조치 방법 +클라우드 서비스 로그 보관 기간을 기관 정책에 맞게 수립 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 로그 보관 기간 설정 +§ 클라우드 관리 콘솔에서 제공하는 로그 설정 확인 +§ 로그 보관 주기 및 정상적인 로그 기록수행 여부 확인 +§ 각 사용자 계정 및 클라우드 서비스에 대한 로그 기록 수행 여부 확인 +§ 로그의 주기적 검토 및 백업 수행 여부 확인 + + +![이미지 870-0](images/p0870_img0.png) + + +--- + + +## 12. 클라우드 + +2026 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드 +871 +CA-18 +(중) +클라우드 > 4. 운영 관리 +백업 사용 여부 +개요 +점검 내용 +클라우드 리소스에 대한 백업 수행 여부 점검 +점검 목적 +클라우드 리소스에 대한 장애 발생, 시스템 오류 등의 문제발생 시 정상적인 서비스 제공이 가능하도록 +데이터를 안전하게 보관하기 위함 +보안 위협 +클라우드 리소스를 백업 및 관리하지 않을 경우, 클라우드 시스템의 가용성을 해치고, 정상적인 복구가 +불가하여 데이터 손실이 발생할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 클라우드 리소스를 기관 정책에 따라 주기적으로 백업이 수행된 경우 +취약 : 클라우드 리소스를 기관 정책에 따라 주기적으로 백업이 수행되지 않은 경우 +조치 방법 +클라우드 리소스를 주기적으로 백업 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 클라우드 리소스에 대한 백업 설정 +§ 클라우드 관리 콘솔에서 제공하는 백업 설정 기능 확인 +§ 백업 및 복구 절차를 기관의 정책에 맞게 수립 적용 +§ 주기적 백업 수행 여부 및 검토 진행 + + +![이미지 871-0](images/p0871_img0.png) + + +--- + +| 한국인터넷진흥원 | +872 +CA-19 +(중) +클라우드 > 4. 운영 관리 +가상 리소스 이상징후 알림 설정 +개요 +점검 내용 +가상 리소스 이상징후 알림 설정 여부 점검 +점검 목적 +가상 리소스 이상징후 알림 설정을 통해 클라우드 리소스 내부 침입 사고나 접근 시도 시 초기대응을 +통해 침해사고 대비를 하기 위함 +보안 위협 +기상 리소스 이상징후 알림 설정이 적용되어 있지 않을 경우, 침해사고 초기대응을 원활하게 수행할 수 +없어 정보 유출 등의 보안 사고가 발생할 위험이 존재함 +참고 +- +점검 대상 및 판단 기준 +대상 +클라우드 플랫폼 +판단 기준 +양호 : 가상 리소스 이상징후 알림 설정이 적용된 경우 +취약 : 가상 리소스 이상징후 알림 설정이 적용되지 않은 경우 +조치 방법 +가상 리소스 이상징후 알림 설정 +조치 시 영향 +일반적인 경우 영향 없음 +점검 및 조치 사례 +l 공통 +Step 1) 가상 리소스 이상징후 알림 설정 +§ 클라우드 관리 콘솔에서 제공하는 모니터링 또는 이상징후 알림 설정 확인 +§ 알림 설정이 적용되어 있지 않을 경우, SMS, 이메일, 알람 등으로 설정 적용 + + +![이미지 872-0](images/p0872_img0.png) + + +--- + +2026 +주요정보통신기반시설 +기술적 취약점 분석·평가방법 +상세가이드 + + +![이미지 873-0](images/p0873_img0.png)